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