/*
 *  Shinobi Library
 *  Copyright (c) 1998 SEGA
 *
 *       Keyboard
 *
 *  Module  : Library Header File
 *  File    : sg_pdkbd.h
 *  Create  : 1998-03-25
 *  Modify  : 1998-06-05
 *  Version : 1.06
 *  Note    :
 */

#ifndef _SG_PDKBD_H_
#define _SG_PDKBD_H_

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#include <sg_xpt.h>
#include <sg_pad.h>


/*
 *  DEFINES / MACROS
 */

/******** 特殊キービットアサイン ********************************************/
#define PDD_KEY_CTRL_RGUI     (1 << 7)     /* 右GUI                         */
#define PDD_KEY_CTRL_RALT     (1 << 6)     /* 右ALT                         */
#define PDD_KEY_CTRL_RSHIFT   (1 << 5)     /* 右シフト                      */
#define PDD_KEY_CTRL_RCTRL    (1 << 4)     /* 右コントロール                */
#define PDD_KEY_CTRL_LGUI     (1 << 3)     /* 左GUI                         */
#define PDD_KEY_CTRL_LALT     (1 << 2)     /* 左ALT                         */
#define PDD_KEY_CTRL_LSHIFT   (1 << 1)     /* 左シフト                      */
#define PDD_KEY_CTRL_LCTRL    (1 << 0)     /* 左コントロール                */

/******** LED点灯状態 *******************************************************/
#define PDD_LED_SHIFT         (1 << 7)     /* シフト                        */
#define PDD_LED_POWER         (1 << 6)     /* 電源                          */
#define PDD_LED_KANA          (1 << 5)     /* カナ                          */
#define PDD_LED_SCRLOCK       (1 << 2)     /* Scroll Lock                   */
#define PDD_LED_CAPLOCK       (1 << 1)     /* Caps Lock                     */
#define PDD_LED_NUMLOCK       (1 << 0)     /* Num Lock                      */

/*
 *  TYPEDEFS
 */

/******** キーボードデータ構造体 *******************************************/
typedef struct {
	Uint8 ctrl;                           /* 特殊キーの状態                */
	Uint8 led;                            /* LEDの点灯状態                 */
	Uint8 key[6];                         /* 押されているキーコード        */
} PDS_KEYBOARD;

#if 0
/******** キーボード情報構造体 *********************************************/
typedef struct {
	Uint8 lang;                           /* キーボード言語                */
	Uint8 type;                           /* キーボードタイプ              */
	Uint8 reserved[2];                    /* 予約                          */
} PDS_KEYBOARDINFO;
#endif

typedef struct {
	Uint8 used;
	Uint8 rate;
	Uint8 delay;
	Uint8 rate_count;
	Uint8 delay_count;
	Uint8 repeat_flag;
	Uint8 predata;
	Uint8 old_data[8];
	Uint32 port;
	Uint32 putp;
	Uint32 getp;
	Uint8* buf;
	Uint32 bufsize;
} PDS_KBDSTRUCT;

typedef PDS_KBDSTRUCT* PD_KBD;



/*
 *  PROTOTYPES
 */

/******** 低レベルキーボード関数 *******************************************/
#if 0
const PDS_KEYBOARDINFO* pdKbdGetInfo(Uint32 port);
#endif
const PDS_KEYBOARD* pdKbdGetData(Uint32 port);

#if 0
/******** 高レベルキーボード関数 *******************************************/
void pdKbdInit(void);
void pdKbdSetState(PD_KBD hKbd, Uint8 rate, Uint8 delay);
void pdKbdGetState(PD_KBD hKbd, Uint8* rate, Uint8* delay);
Sint32 pdKbdIsHit(PD_KBD hKbd);
PD_KBD pdKbdCreate(Uint32 port);
void pdKbdDestroy(PD_KBD kbd);
char pdKbdGetc(PD_KBD hKbd);
void pdKbdExecServer(void);
void pdKbdExecServerOne(PD_KBD hKbd);
#endif

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* _SG_PDKBD_H_ */
