OSDN Git Service

AI003:config.txt, words.txtを追加。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_008 / chnos / file.c
1 \r
2 #include "core.h"\r
3 \r
4 void decode_fat(ushort *fat, bool backup)\r
5 {\r
6         int i, j = 0;\r
7         uchar *img;\r
8 \r
9         if(backup)      img = (uchar *)ADR_DISKIMG + 0x00001400;\r
10         else            img = (uchar *)ADR_DISKIMG + 0x00000200;\r
11 \r
12         for(i = 0; i < 2880; i += 2){\r
13                 fat[i + 0] = (img[j + 0]        | img[j + 1] << 8) & 0xfff;\r
14                 fat[i + 1] = (img[j + 1] >> 4   | img[j + 2] << 4) & 0xfff;\r
15                 j += 3;\r
16         }\r
17         return;\r
18 }\r
19 \r
20 void load_file(uint finfo_no, uchar *buf)\r
21 {\r
22         int i;\r
23         uchar *img;\r
24         uint size;\r
25         ushort clustno;\r
26 \r
27         if(finfo_no > 224) return;\r
28 \r
29         img = (uchar *)ADR_DISKIMG + 0x00003e00;\r
30         size = system.io.file.list[finfo_no].size;\r
31         clustno = system.io.file.list[finfo_no].clustno;\r
32 \r
33 \r
34         for(;;){\r
35                 if(size <= 512){\r
36                         for(i = 0; i < size; i++){\r
37                                 buf[i] = img[clustno * 512 + i];\r
38                         }\r
39                         break;\r
40                 }\r
41                 for(i = 0; i < 512; i++){\r
42                         buf[i] = img[clustno * 512 + i];\r
43                 }\r
44                 size -= 512;\r
45                 buf += 512;\r
46                 clustno = system.io.file.fat[clustno];\r
47                 \r
48         }\r
49 }\r
50 \r
51 uint search_file(char *name)\r
52 {\r
53         int i, j;\r
54         uchar s[12];\r
55 \r
56         for(j = 0; j < 11; j++){\r
57                 s[j] = ' ';\r
58         }\r
59         j = 0;\r
60         for(i = 0; j < 11 && name[i] != 0x00; i++){\r
61                 if(name[i] == '.' && j <= 8){\r
62                         j = 8;\r
63                 } else{\r
64                         s[j] = name[i];\r
65                         if('a' <= s[j] && s[j] <= 'z'){\r
66                                 s[j] -= 0x20;\r
67                         }\r
68                         j++;\r
69                 }\r
70         }\r
71         for(i = 0; i < 224; ){\r
72                 if(system.io.file.list[i].name[0] == 0x00) break;\r
73                 if((system.io.file.list[i].type & 0x18) == 0){\r
74                         for(j = 0; j < 11; j++){\r
75                                 if(system.io.file.list[i].name[j] != s[j]) goto next_file;\r
76                         }\r
77                         break; \r
78                 }\r
79 next_file:\r
80                 i++;\r
81         }\r
82         if(i < 224 && system.io.file.list[i].name[0] != 0x00){\r
83                 return i;\r
84         } else {\r
85                 return 0xFFFFFFFF;\r
86         }\r
87 }\r