#ifndef	KAWANO_H		  
#define	KAWANO_H
//#include <sched.h>

#define MAX_COURSE_RECORD_NUMBER 5

extern void kawanoDrawAfterSky(int mode);
extern void kawanoDraw2(int mode);
extern void kawanoDrawFinal(void);
extern void doGameSelect(Dynamic *dynamicp);
unsigned short *GetMapViewPointer(void);
void DispResultTime(void);
void DispGPLose(void);
void DispInfo_3P(void);
void EraseInfo_3P(void);
void DispVSResult(void);
void DispMessageRomGhost(void);
void StartKawanoResult(void);
void StartKawanoEnding(void);
void StaffRoll_kawano1(void);

void SetThunder(void);


extern void init_kawano_select(void); 
extern void InitGhostData(void);
extern void init_kawano_game(void); 
extern void init_kawanoResult(void);
extern void kawanoDrawResult(void);
extern void SetWord(int x,int y,char *moji);
extern void SetFadeIn(unsigned count);
extern void SetFadeInWhite(unsigned count);
extern void SetFadeOut(unsigned count);
extern void SetFadeInScreen(unsigned num,unsigned count);
extern void SetFadeOutScreen(unsigned num,unsigned count);
extern void SetFadeOut_m(unsigned count);
extern void SetFadeOut_r(unsigned count);
extern void SetFadeOut_f(void);
extern void SetFadeOut_fw(void);
extern void SetFadeOut_b(void);
extern void SetFadeOut_ta_data(void);
extern void SetFadeOut_option(void);
extern void ps4decode(unsigned int *abuf,unsigned char *tmp,
		      unsigned short *bz,int transp);
extern void k_var_init(int mode);
void Setting_SoundOutMode(void);
int FadeChecker(void);

extern char _tex_dataSegmentRomStart[], _tex_dataSegmentRomEnd[];
extern char _stex_dataSegmentRomStart[], _stex_dataSegmentRomEnd[];
void     initCntrl(void);
void     romCopy(const char *src, const char *dest, const int len);
void     UpdateController(void);

void WriteFlgs1Data(void);
void initEEPRom(void);
void CheckEEPRom(void);
void initEEPRomCourseData(int num);
void initEEPRomFlgs1Data(void);
uint GetRecordTime2(int num);
uint GetRecordTime3(int num,int course_number);
uint GetRecordLapTime(void);
uint GetRecordLapTime3(int course_number);
int SaveCourseRecord(uint new_time,uint my_character);
int SaveCourseLapRecord(void);
void SaveCupStatus(int num);
void SaveCupStatus2(int num,int map_num);
unsigned char GetCupStatus(int c_select,int r_level);
unsigned char GetCupStatus_sub(int c_select,uint data);
unsigned char SetCupStatus_sub(int c_select,uint cup_data,uint new_data);
void PrintCourseData(int num);
int Check4GoldCup_150cc(void);
int Check4GoldCup_pro(void);
void SetEEPRomCourseData_bak(int num);
void SetFlgs1_bakData(void);

int SaveGameNoteKart_ghost(int num);
int CheckSameMap(int map_num);
int CheckSameMap2(int map_num);
int CheckSameGhost(int num);
int LoadGameNoteKart_ghost(int num);
int LoadGameNoteKart_ghost2(int num,int num1);
void LoadGameNoteKart_data(void);
void LoadGameNoteKart_data2(void);
int getExistPak(int num);
int CheckPakStatus(void);
int CheckPakStatus2(void);
int initPak(void);
int initPak2(void);
int SaveGameNoteKart_data(int num);
int initGameNoteKart(int num);
int makeGameNoteKartOnly(void);
void makeGameNoteKart(void);
//void SetDummyData(void);

int kawano_osPfsInit(OSMesgQueue *mq,OSPfs *pfs,int controller_no);



   
void *GetVAddress(void *p_ptr);

void alloc_flagobj(void);


typedef struct {
    int kind;
    int pattern,pattern2;
    int disp_x,disp_y;
    char pri,disp_on;
    int sd_number;//seq_data_number
    int work1,work2;
    float workf1;
} OBJBlock;

typedef struct {
    //int mode;
    short mode;
    unsigned short *tex_data_ptr;
    unsigned short w,h;
    unsigned short pos_x,pos_y;
    //unsigned int dma_size;
    unsigned short dma_size;
} TexBlock;

typedef struct {
    TexBlock *tex_block_ptr;
    int count;
} TexBlockSeq;

typedef struct {
    TexBlockSeq *seq_ptr;
    int pattern;
    int count;
    int pri;
    int block_num;
    int buffer;
} SeqData;

typedef struct {
    TexBlock *tex_block_ptr;
    int block_num;
} ChangeTexBuff;

typedef struct {
    TexBlock *tex_block_ptr;
    short num,wb_num;
} ChangeTexBuff_vs;

typedef struct {
    TexBlock *tex_block_ptr;
    Gfx *gdl_ptr;
} KDLBlockBuff;

typedef struct {
    unsigned short *tex_data_ptr;
    int number;
} TexMap;

typedef struct {
    short x,y;
    short dummy1,dummy2;
} POS_XY;

typedef struct {
    unsigned short r,g,b,a;
} P_COLOR;

typedef struct {
    unsigned int time:21;
    unsigned int player:3;
} EEPROM_DATA_TIME;

typedef struct {
    unsigned char time[MAX_COURSE_RECORD_NUMBER][3];/*3byteのうち
						      下20bit:タイム*100
						      上4bit:キャラデータ */
    unsigned char fastest_lap[3];
    unsigned char init_flg;
    unsigned char dummy[4];
    unsigned char check_sum;
} EEPROM_DATA_COURSE;

#if 0
typedef struct {
    unsigned char cup_status[4][4];/* [cup_select][race_level] */
    unsigned char sound_mode_type;
    unsigned char dummy[6];/*合計24バイト*/
    unsigned char check_sum;
} EEPROM_DATA_FLAGS1;
#else
typedef struct {
    unsigned char cup_status[4];/* [race_level] */
    unsigned char sound_mode_type;
    unsigned char dummy;/*合計8バイト*/
    unsigned char check_sum1;
    unsigned char check_sum2;
} EEPROM_DATA_FLAGS1;
#endif

typedef struct {
    unsigned char time[8][3];/*[(race_level%2)*4 + cup_select][]
			       3byteのうち
			       下20bit:タイム*100上4bit:キャラデータ */
    unsigned char fastest_lap[8][3];
    unsigned char dummy[6];/*合計56バイト*/
    unsigned char check_sum1;
    unsigned char check_sum2;
} EEPROM_DATA_COURSE_BAK;

typedef struct {
    EEPROM_DATA_COURSE course[4][4];
    EEPROM_DATA_FLAGS1 flgs1;
    EEPROM_DATA_COURSE_BAK course_bak[2];
    EEPROM_DATA_FLAGS1 flgs1_bak;
} EEPROM_DATA_KART_t;

typedef union {
    EEPROM_DATA_KART_t e;
    long long int align8byte[512>>3];
}EEPROM_DATA_KART;

typedef struct {
    int ghost_time;
    unsigned char ghost_flg;
    char ghost_map;
    unsigned char ghost_kart;
    unsigned char pak_check_sum[60];
    unsigned char dummy[60];
    unsigned char check_sum;
}PAK_GHOST_t;
    
typedef union {
    PAK_GHOST_t e;
    long long int align8byte[128>>3];
}PAK_GHOST;

typedef struct {
    float mul;
    short start_x,start_y;
    short target_x,target_y;
    char type,color;
} ENDING_DATA;


extern int logo_cam_z;
extern float logo_scale_z;
extern float logo_rot_x;
extern float logo_rot_y;
extern float logo_rot_z;
extern float logo_pos_x;
extern float logo_pos_y;
extern float logo_pos_z;

extern int k_bg_number;
extern int k_bg_number_next;
extern int k_bg_change;
extern char player_cursor[4];
extern char player_driver[4];
extern char player_cursor_set_flg[4];
extern char msel_mode,gsel_mode,psel_mode,title_mode,cp_mode;
extern unsigned char sound_output;
extern char players;
extern char play_mode[];
extern char popup_status[4][3];
extern char vs_result_cursor;
extern char ta_result_cursor;
extern char bt_result_cursor;
extern char tsel_cursor;
extern char dsel_cursor1;
extern char dsel_cursor2;
extern char res_seq_flg;
extern char loading_ghost_flg;
extern char retry_status_kw;/* ゲームセレクトに戻ったら０,ゲーム中は１ */


extern const char play_mode_max[];
extern const char popup_status_max[4][3];
extern char cup_select;
extern char before_cup_select;
extern char circuit_select;

extern char fb_clear_flg;

extern int title_counter,title_counter2;
extern char demo_play_flag;
extern char demo_number;



extern unsigned short *tex_buff;
extern unsigned int *melt_buff;
extern Gfx *kdl_buff;/*ゲーム中につくるディスプレイリスト用のバッファ*/

extern char d_points[8];//８人分のドライバーズポイント
extern char d_points_rank[8];//１位から８位までのキャラクタ番号

extern int k_flash_counter;
extern char fade_flg[5];
extern char thunder_flg[4];

extern const int game_mode_chart[4][3];
extern const short map_number_chart[5][4];//[カップ][そのカップの何番目か]

extern OSPfs pfs_k;
extern OSPfs pfs_k2;
extern OSPfsState pfsState[16];
extern s32 pfsStateRet[16];
extern s32 pfsFileNumMax,pfsFileNum,pfsFreeBlocks,file_no_kart,file_no_kart2;

extern EEPROM_DATA_KART eeprom_save_data;

extern unsigned char rankin_fanfare;

OBJBlock *Get_OBJBlock_ptr(int kind);
OBJBlock *Get_OBJBlock_ptr2(int kind);


extern const u8 game_name_kart[16];
extern const u8 ext_name_kart[4];
extern const u16 company_code_kart;
extern const u32 game_code_kart;

extern char init_pak_flg;
extern PAK_GHOST pak_ghost[2];


extern ENDING_DATA ending_data[];
extern char *ending_names[];
extern char *ending_names_kana[];




#endif



