1 /*****************************************************************************/ 2 /* �ե�������� */ 3 /* */ 4 /* QUASI88 �Υե��������ϡ����٤Ƥ��Υإå��ˤ���������ؿ�(�ޥ���)�� */ 5 /* ��ͳ���ƹԤ��롣 */ 6 /* */ 7 /*****************************************************************************/ 8 9 #ifndef FILE_OP_H_INCLUDED 10 #define FILE_OP_H_INCLUDED 11 12 13 /**************************************************************************** 14 * ������ѥ�̾�κ���Ĺ 15 *****************************************************************************/ 16 17 #ifndef OSD_MAX_FILENAME 18 #define OSD_MAX_FILENAME (1024) 19 #endif 20 21 22 /**************************************************************************** 23 * �ե��������Ķ��ν���� 24 * 25 * int osd_file_config_init(void) 26 * �Ƽ�ե���������˻��Ѥ��롢�ǥ��쥯�ȥ�̾�ʤɤ������Ԥ������δؿ��� 27 * �ƤӽФ��ʹߡ����Υإå��˽�Ƥ���ؿ����ѿ������Ѳ�ǽ�Ȥʤ롣 28 * 29 * ���δؿ��ϡ� config_init() �����ˤƺǽ�˸ƤӽФ���롣 30 * ���ェλ���Ͽ��۾ェλ���ϵ����֤��� 31 * (�����֤�����硢 config_init() �⥨�顼�Ȥʤ�) 32 * 33 * void osd_file_config_exit(void) 34 * osd_file_config_init() �θ����դ���Ԥ���(���ݤ���������β����ʤ�) 35 * ���δؿ��ϡ���λ����1������ƤӽФ���롣 36 * 37 *****************************************************************************/ 38 int osd_file_config_init(void); 39 void osd_file_config_exit(void); 40 41 42 43 /**************************************************************************** 44 * �Ƽ�ե�����̾ (�����Х��ѿ�) 45 * 46 * ��ư�塢�ؿ� quasi88() ��ƤӽФ����ˡ������ץ����ե�����̾�� 47 * ���ꤷ�Ƥ������������פξ��ϡ���ʸ���� (�ޤ��� NULL) �åȡ� 48 * �ʤ����ؿ� quasi88() �θƤӽФ��ʸ�ϡ��ѹ����ʤ����� ! 49 * 50 * char file_disk[2][QUASI88_MAX_FILENAME] 51 * �ɥ饤�� 1: / 2: �˥��åȤ���ǥ�����������ե�����̾�� 52 * Ʊ��ʸ���� (�ե�����̾) �����åȤ���Ƥ�����ϡ�ξ�ɥ饤�� 53 * �ˡ�Ʊ���ǥ�����������ե�����åȤ��뤳�Ȥ��̣���롣 54 * 55 * int image_disk[2] 56 * �ǥ���������������åȤ���Ƥ����硢��������ֹ档 57 * 0��31 �ʤ� 1��32���ܡ� -1 �ʤ�С���ưŪ���ֹ���꿶�롣 58 * 59 * int readonly_disk[2] 60 * ���ʤ顢��ɥ����ǥǥ�����������ե�������� 61 * 62 * char *file_compatrom 63 * ���Υե������ P88SR.exe �� ROM������ե�����Ȥ��Ƴ����� 64 * NULL �ξ����̾��̤�� ROM������ե�������� 65 * 66 * char file_tape[2][QUASI88_MAX_FILENAME] 67 * �ơ��ץ�����/�������ѥե�����̾�� 68 * 69 * char file_prn[QUASI88_MAX_FILENAME] 70 * �ץ�����ѥե�����̾�� 71 * 72 * char file_sin[QUASI88_MAX_FILENAME] 73 * char file_sout[QUASI88_MAX_FILENAME] 74 * ���ꥢ��������/�����ѥե�����̾�� 75 * 76 * char file_state[QUASI88_MAX_FILENAME] 77 * ���ơ��ȥ�����/�����ѤΥե�����̾�� 78 * ��ʸ����ξ��ϡ��ǥե���ȤΥե�����̾�����Ѥ���롣 79 * 80 * char file_snap[QUASI88_MAX_FILENAME] 81 * ���̥��ʥåץ���å���¸�ѤΥե�����Υ١���̾�� 82 * �ºݤ˥��ʥåץ���åȤ���¸������ϡ����Υե�����̾�� 83 * 4��ο��� + ��ĥ�� ( 0000.bmp �ʤ� ) ��Ϣ�뤷���ե�����̾�ˤʤ� 84 * ��ʸ����ξ��ϡ��ǥե���ȤΥե�����̾�����Ѥ���롣 85 * 86 * char file_wav[QUASI88_MAX_FILENAME] 87 * ������ɽ�����¸�ѤΥե�����Υ١���̾�� 88 * �ºݤ˥�����ɽ��Ϥ���¸������ϡ����Υե�����̾�� 89 * 4��ο��� + ��ĥ�� ( 0000.wav ) ��Ϣ�뤷���ե�����̾�ˤʤ� 90 * ��ʸ����ξ��ϡ��ǥե���ȤΥե�����̾�����Ѥ���롣 91 * 92 * char *file_rec / char *file_pb 93 * �������Ϥε�Ͽ��/�����ѥե�����̾�� 94 * ���Ѥ��ʤ��ʤ顢NULL �ˤ��Ƥ����� 95 *****************************************************************************/ 96 97 extern char file_disk[2][QUASI88_MAX_FILENAME]; /*�ǥ�����������ե�����̾*/ 98 extern int image_disk[2]; /*������ֹ�0��31,-1�ϼ�ư*/ 99 extern int readonly_disk[2]; /*��ɥ����dz����ʤ鿿*/ 100 101 extern char file_tape[2][QUASI88_MAX_FILENAME]; /* �ơ��������ϤΥե�����̾ */ 102 extern char file_prn[QUASI88_MAX_FILENAME]; /* �ѥ�����ϤΥե�����̾ */ 103 extern char file_sin[QUASI88_MAX_FILENAME]; /* ���ꥢ����ϤΥե�����̾ */ 104 extern char file_sout[QUASI88_MAX_FILENAME]; /* ���ꥢ�����ϤΥե�����̾ */ 105 106 extern char file_state[QUASI88_MAX_FILENAME]; /* ���ơ��ȥե�����̾ */ 107 extern char file_snap[QUASI88_MAX_FILENAME]; /* ���ʥåץ���åȥ١����� */ 108 extern char file_wav[QUASI88_MAX_FILENAME]; /* ������ɽ��ϥ١����� */ 109 110 extern char *file_compatrom; /* P88SR.exe��ROM��Ȥ��ʤ�ե�����̾*/ 111 extern char *file_rec; /* �������ϵ�Ͽ����ʤ顢�ե�����̾ */ 112 extern char *file_pb; /* �������Ϻ�������ʤ顢�ե�����̾ */ 113 114 115 116 /**************************************************************************** 117 * �Ƽ�ǥ��쥯�ȥ�μ��������� 118 * QUASI88 �ϥե��������κݤˡ������Ǽ��������ǥ��쥯�ȥ�̾�� 119 * osd_path_join ��Ȥäơ��ѥ�̾���������롣 120 * osd_dir_cwd() �� NULL ���֤��ʤ�����! ¾�ϡġĤޤ� NULL �Ǥ⤤���䡣 121 * 122 * const char *osd_dir_cwd (void) �ǥե���ȤΥǥ��쥯�ȥ���֤� 123 * const char *osd_dir_rom (void) ROM������Τ���ǥ��쥯�ȥ���֤� 124 * const char *osd_dir_disk (void) DISK������δ��ǥ��쥯�ȥ���֤� 125 * const char *osd_dir_tape (void) TAPE������δ��ǥ��쥯�ȥ���֤� 126 * const char *osd_dir_snap (void) ���ʥåץ���å���¸�ǥ��쥯�ȥ���֤� 127 * const char *osd_dir_state(void) ���ơ��ȥե�������¸�ǥ��쥯�ȥ���֤� 128 * const char *osd_dir_gcfg (void) ��������ե�����Υǥ��쥯�ȥ���֤� 129 * const char *osd_dir_lcfg (void) ��������ե�����Υǥ��쥯�ȥ���֤� 130 * 131 * int osd_set_dir_???(const char *new_dir) 132 * ���줾�졢�ƥǥ��쥯�ȥ�� new_dir �� 133 * ���ꤹ�롣���Ԥ������ϵ����֤롣 134 * ( ���λ����ƥǥ��쥯�ȥ�ϸ��Τޤ� ) 135 *****************************************************************************/ 136 137 const char *osd_dir_cwd (void); 138 const char *osd_dir_rom (void); 139 const char *osd_dir_disk (void); 140 const char *osd_dir_tape (void); 141 const char *osd_dir_snap (void); 142 const char *osd_dir_state(void); 143 const char *osd_dir_gcfg (void); 144 const char *osd_dir_lcfg (void); 145 146 int osd_set_dir_cwd (const char *new_dir); 147 int osd_set_dir_rom (const char *new_dir); 148 int osd_set_dir_disk (const char *new_dir); 149 int osd_set_dir_tape (const char *new_dir); 150 int osd_set_dir_snap (const char *new_dir); 151 int osd_set_dir_state(const char *new_dir); 152 int osd_set_dir_gcfg (const char *new_dir); 153 int osd_set_dir_lcfg (const char *new_dir); 154 155 156 157 /**************************************************************************** 158 * �ե�����̾�˻��Ѥ���Ƥ�����������ɤ���� 159 * 0 �� ASCII �Τ� 160 * 1 �� ���ܸ�EUC 161 * 2 �� ���ե�JIS 162 * ���ξ���ϡ���˥塼���̤ǥե�����̾��ɽ������ݤˤΤ����Ѥ��롣 163 *****************************************************************************/ 164 int osd_kanji_code(void); 165 166 167 168 /**************************************************************************** 169 * �ե�������� 170 * QUASI88 �Υե����륢�������ϡ����ưʲ��δؿ����ͳ���ƹԤ��롣 171 * �ºݤ��ɤ߽ϡ������¸��¦�ˤơ������ˤ��Ƥ�褤�� 172 * (��¾���椷���ꡢ���̥ե�����Ȥ����ɤ߽�����ġĤʤ�) 173 * ���ݤʤ顢���Τޤ�ɸ��ؿ��Υ�åѤˤ���Ф褤�� 174 * ���ʤߤ� errno �ϻ��Ȥ��ʤ���ferror��feof �ʤɤ�ƤӽФ��ʤ��� 175 * 176 * ���δؿ��ˤư����ե�����μ��प��ӥ⡼�ɤϰʲ��ΤȤ��ꡣ 177 * ()��ϥե�����η����ǡ����ܤ��Ƥʤ���Τ����ΥХ��ʥ�ǡ����ǰ����� 178 * 179 * FTYPE_ROM ROM����� "rb" 180 * FTYPE_DISK �ǥ����������(D88����) "r+b" , "rb" 181 * FTYPE_TAPE_LOAD �����ѥơ��ץ����(T88/CMT����) "rb" 182 * FTYPE_TAPE_SAVE �������ѥơ��ץ����(CMT����) "ab" 183 * FTYPE_PRN �ץ���ϥ���� "ab" 184 * FTYPE_COM_LOAD ���ꥢ�����ϥ���� "rb" 185 * FTYPE_COM_SAVE ���ꥢ����ϥ���� "ab" 186 * FTYPE_SNAPSHOT_RAW ���̥��ʥåץ���å� "wb" 187 * FTYPE_SNAPSHOT_PPM ���̥��ʥåץ���å�(PPM����) "wb" 188 * FTYPE_SNAPSHOT_BMP ���̥��ʥåץ���å�(BMP����) "wb" 189 * FTYPE_KEY_PB �������Ϻ��� "rb" 190 * FTYPE_KEY_REC �������ϵ�Ͽ "wb" 191 * FTYPE_STATE_LOAD �쥸�塼���ѥ���� "rb" 192 * FTYPE_STATE_SAVE �����ڥ���ѥ���� "wb" 193 * FTYPE_CFG ����ե����� "r", "w","a" 194 * FTYPE_READ �Х��ʥ������� "rb" 195 * FTYPE_WRITE �Х��ʥ������� "wb" 196 * --------------------------------------------------------------------- 197 * 198 * OSD_FILE *osd_fopen(int type, const char *path, const char *mode) 199 * fopen ��Ʊ�����������ϥե�����ݥ��������Ի��� NULL ���֤��� 200 * type �ϡ��嵭�� FTYPE_xxxx ����ꤹ�롣 201 * type �� FTYPE_DISK �ξ��ǡ����Ǥ�Ʊ���ե����뤬�����Ƥ�����ϡ� 202 * �㤦�⡼�ɤdz������Ȥ������� NULL ��Ʊ���⡼�ɤdz������Ȥ������� 203 * ���γ����Ƥ���ե�����Υե�����ݥ����֤��� 204 * (Ʊ���ե����뤬�����Ƥ��뤫�ɤ������ΤǤ�����Τ�) 205 * 206 * int osd_fclose(OSD_FILE *stream) 207 * fclose ��Ʊ�������Ի��Ǥ� EOF ���֤��ʤ��Ƥ⤫�ޤ�ʤ��� 208 * 209 * int osd_fflush(OSD_FILE *stream) 210 * fflush ��Ʊ�������Ի��Ǥ� EOF ���֤��ʤ��Ƥ⤫�ޤ�ʤ��� 211 * 212 * int osd_fseek(OSD_FILE *stream, long offset, int whence) 213 * fseek ��Ʊ�������Ի��ˤ� -1 ���֤��� 214 * 215 * long osd_ftell(OSD_FILE *stream) 216 * ftell ��Ʊ�������Ի��ˤ� -1 ���֤��� 217 * 218 * void osd_rewind(OSD_FILE *stream) 219 * rewind ��Ʊ���� 220 * 221 * size_t osd_fread(void *ptr, size_t size, size_t nobj, OSD_FILE *stream) 222 * fread ��Ʊ�����ɤ߹��ߤ����������֥�å������֤��� 223 * 224 * size_t osd_fwrite(const void *ptr,size_t size,size_t nobj,OSD_FILE *stream) 225 * fwrite ��Ʊ�������ߤ����������֥�å������֤��� 226 * 227 * int osd_fputc(int c, OSD_FILE *stream) 228 * fputc ��Ʊ�������Ի��ˤ� EOF ���֤��� 229 * 230 * int osd_fgetc(OSD_FILE *stream) 231 * fgetc ��Ʊ�������Ի��ˤ� EOF ���֤��� 232 * 233 * char *osd_fgets(char *str, int size, OSD_FILE *stream) 234 * fgets ��Ʊ�������Ի��ˤ� NULL ���֤��� 235 * 236 * int osd_fputs(const char *str, OSD_FILE *stream) 237 * fputs ��Ʊ�������Ի��ˤ� NULL ���֤��� 238 * 239 *****************************************************************************/ 240 241 enum { 242 FTYPE_ROM, 243 FTYPE_DISK, 244 FTYPE_TAPE_LOAD, 245 FTYPE_TAPE_SAVE, 246 FTYPE_PRN, 247 FTYPE_COM_LOAD, 248 FTYPE_COM_SAVE, 249 FTYPE_SNAPSHOT_RAW, 250 FTYPE_SNAPSHOT_PPM, 251 FTYPE_SNAPSHOT_BMP, 252 FTYPE_KEY_PB, 253 FTYPE_KEY_REC, 254 FTYPE_STATE_LOAD, 255 FTYPE_STATE_SAVE, 256 FTYPE_CFG, 257 FTYPE_READ, 258 FTYPE_WRITE, 259 FTYPE_END 260 }; 261 262 263 /* �ե��������ι�¤�Ρ����Τϡ� file-op.c �ˤ�������� */ 264 265 typedef struct OSD_FILE_STRUCT OSD_FILE; 266 267 268 269 OSD_FILE *osd_fopen(int type, const char *path, const char *mode); 270 int osd_fclose (OSD_FILE *stream); 271 int osd_fflush (OSD_FILE *stream); 272 int osd_fseek (OSD_FILE *stream, long offset, int whence); 273 long osd_ftell (OSD_FILE *stream); 274 void osd_rewind (OSD_FILE *stream); 275 size_t osd_fread (void *ptr, size_t size, size_t nobj, OSD_FILE *stream); 276 size_t osd_fwrite (const void *ptr,size_t size,size_t nobj,OSD_FILE *stream); 277 int osd_fputc (int c, OSD_FILE *stream); 278 int osd_fgetc (OSD_FILE *stream); 279 char *osd_fgets (char *str, int size, OSD_FILE *stream); 280 int osd_fputs (const char *str, OSD_FILE *stream); 281 282 283 284 /**************************************************************************** 285 * �ե�����°���μ��� 286 * filename ��Ϳ����줿�ե������°�����֤� 287 * 288 * �ƤӽФ����ϡ��֤ä��褿���Ƥˤ��ʲ��ν�����Ԥ��� 289 * 290 * FILE_STAT_NOEXIST �� �ե�����ο����������ߤ롣 291 * ( fopen("filename", "w") ) 292 * FILE_STAT_DIR �� �ǥ��쥯�ȥ���ɤ߹��ߤ��ߤ롣 293 * ( osd_opendir ) 294 * FILE_STAT_FILE �� �ե�������ɤ߽��ߤ롣 295 * ( fopen("filename", "r" or "r+" or "a") ) 296 * 297 * °���������ξ��ϡ������ɤ����褦������?? 298 * �Ȥꤢ������ FILE_STAT_FILE ���֤����Ȥˤ��Ƥ������礭������Ϥʤ� ? 299 *****************************************************************************/ 300 #define FILE_STAT_NOEXIST (0) /* ¸�ߤ��ʤ� */ 301 #define FILE_STAT_DIR (1) /* �ǥ��쥯�ȥ� */ 302 #define FILE_STAT_FILE (2) /* �ե����� */ 303 int osd_file_stat(const char *filename); 304 305 306 307 /**************************************************************************** 308 * �ǥ��쥯�ȥ���� 309 * 310 * T_DIR_INFO *osd_opendir(const char *filename) 311 * filename �ǻ��ꤵ�줿�ǥ��쥯�ȥ�������ξ���åȤ������ 312 * �ؤΥݥ����֤������Υݥ��ϡ�osd_readdir��osd_closedir �ˤƻ��� 313 * �ƤӽФ�¦��ľ����ȤȤ��뤳�ȤϤʤ��� 314 * 315 * const T_DIR_ENTRY *osd_readdir(T_DIR_INFO *dirp) 316 * osd_opendir �ˤƳ������ǥ��쥯�ȥ꤫�饨��ȥ�����ɤ�äơ����Ƥ� 317 * T_DIR_ENTRY���Υ���˥��åȤ������Υݥ����֤��� 318 * 319 * typedef struct { 320 * int type; �ե�����μ��� (������) 321 * char *name; �ե�����̾ (����������) 322 * char *str; �ե�����̾ (ɽ����) 323 * } T_DIR_ENTRY; 324 * 325 * �ե�����μ���ϡ��ʲ��Τ����줫 326 * FILE_STAT_DIR osd_opendir �dz������Ȥ���ǽ 327 * (�ǥ��쥯�ȥ�ʤ�) 328 * FILE_STAT_FILE osd_opendir �dz������Ȥ�����ʤ� 329 * (�ե�����ʤ�) 330 * 331 * name �ϡ�osd_fopen �ǥե�������ݤ˻��Ѥ��롢�ե�����̾�� 332 * str �ϡ����̤�ɽ������ݤ�ʸ����ǡ��㤨�Хǥ��쥯�ȥ�̾�� <> �ǰϤࡢ 333 * �Ȥ��ä�������ܤ���ʸ����Ǥ⤫�ޤ�ʤ���(EUC or SJIS �δ������) 334 * �ʤ������̤�ɽ���ϡ� osd_readdir �ˤƼ���������˹Ԥ��Τǡ�ͽ��Ŭ�ڤ� 335 * ����ǥ����ƥ�����Ƥ���Τ��褤�� 336 * 337 * void osd_closedir(T_DIR_INFO *dirp) 338 * �ǥ��쥯�ȥ���Ĥ��롣�ʹ� dirp �ϻȤ�ʤ��� 339 * 340 *****************************************************************************/ 341 342 /* �ǥ��쥯�ȥ����¤�Ρ����Τϡ�file-op.c �ˤ�������� */ 343 344 typedef struct T_DIR_INFO_STRUCT T_DIR_INFO; 345 346 347 348 /* �ǥ��쥯�ȥꥨ��ȥ깽¤�� */ 349 350 typedef struct { 351 int type; /* �ե�����μ��� (������) */ 352 char *name; /* �ե�����̾ (����������) */ 353 char *str; /* �ե�����̾ (ɽ����) */ 354 } T_DIR_ENTRY; 355 356 357 T_DIR_INFO *osd_opendir(const char *filename); 358 T_DIR_ENTRY *osd_readdir(T_DIR_INFO *dirp); 359 void osd_closedir(T_DIR_INFO *dirp); 360 361 362 363 /**************************************************************************** 364 * �ѥ�̾����� 365 * �ѥ�̾�ǥ��쥯�ȥ�̾�ȥե�����̾��ʬΥ�����ꡢ�Ĥʤ����ꤹ�롣 366 * ������δؿ��⡢�����˼��Ԥ������ϵ����֤��� 367 * 368 * int osd_path_normalize(const char *path, char resolved_path[], int size) 369 * path ��Ϳ����줿�ѥ�̾��Ÿ������ resolved_path �˥��åȤ��롣 370 * resolved_path �ΥХåե��������ϡ� size �Х��ȡ� 371 * 372 * int osd_path_split(const char *path, char dir[], char file[], int size) 373 * path ��Ϳ����줿�ѥ�̾��ǥ��쥯�ȥ�̾�ȥե�����̾��ʬ�䤷�ơ� 374 * dir, file �˥��åȤ��롣 dir, file �ΥХåե��������ϤȤ��size �Х��� 375 * 376 * int osd_path_join(const char *dir, const char *file, char path[], int size) 377 * dir, file Ϳ����줿�ǥ��쥯�ȥ�̾�ȥե�����̾���礷���ѥ�̾�� 378 * path �˥��åȤ��롣 path �ΥХåե��������ϡ�size �Х��� 379 * 380 *****************************************************************************/ 381 int osd_path_normalize(const char *path, char resolved_path[], int size); 382 int osd_path_split(const char *path, char dir[], char file[], int size); 383 int osd_path_join(const char *dir, const char *file, char path[], int size); 384 385 386 387 #endif /* FILE_OP_H_INCLUDED */ 388