-
Notifications
You must be signed in to change notification settings - Fork 0
/
ftype.txt
103 lines (80 loc) · 1.31 KB
/
ftype.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
%%
#pragma optimize 79
#pragma noroot
#include <Types.h>
// cp should be a filename w/ .ext
int parse_extension(const char *cp, Word size, Word *ftype, LongWord *atype);
int parse_extension_c(const char *cp, Word *ftype, LongWord *atype)
{
int i;
int pd;
if (!cp || !*cp) return 0;
pd = -1;
for (i = 0; ; ++i)
{
char c;
c = cp[i];
if (c == 0) break;
if (c == '.') pd = i;
}
// pd == position of final .
// i == strlen
if (pd == -1) return 0;
if (pd + 1 >= i) return 0;
pd++; // skip past it...
return parse_extension(cp + pd, i - pd, ftype, atype);
}
// cp is just the extension
int parse_extension(const char *cp, Word size, Word *ftype, LongWord *atype)
{
Word *wp = (Word *)cp;
Word h;
if (!cp || !size) return 0;
h = ((*cp | 0x20) ^ size) & 0x0f;
switch (h)
{
%%
}
return 0;
}
%%
'h' ->
*ftype = 0xb0;
*atype = 0x0008;
return 1;
.
'c' ->
*ftype = 0xb0;
*atype = 0x0008;
return 1;
.
'asm' ->
*ftype = 0xb0;
*atype = 0x0003;
return 1;
.
'pas' ->
*ftype = 0xb0;
*atype = 0x0005;
return 1;
.
'txt' ->
*ftype = 0x04;
*atype = 0x0000;
return 1;
.
'text' ->
*ftype = 0x04;
*atype = 0x0000;
return 1;
.
'shk' ->
*ftype = 0xe0;
*atype = 0x8002;
return 1;
.
'bxy' ->
*ftype = 0xe0;
*atype = 0x8000;
return 1;
.