-
Notifications
You must be signed in to change notification settings - Fork 21
/
mk_vocabulary
executable file
·155 lines (118 loc) · 3.29 KB
/
mk_vocabulary
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#! /usr/bin/perl
# Ensure that both mkbootmsg.c & bincode.asm talk about the same thing.
@callback = qw (
KeyEvent MenuInit InfoBoxInit InfoBoxDone
ProgressInit ProgressDone ProgressUpdate
PasswordInit PasswordDone
Timeout Timer
);
@primary = qw (
[ ] def if ifelse loop repeat for forall exit return array get put length
dup pop exch rot roll over index exec
add sub mul div mod neg abs min max and or xor not shl shr
eq ne gt ge lt le
trace dtrace
malloc free realloc memsize dumpmem
gettype settype
screen.size image.colors vscreen.size monitorsize displaysizes screen.framebuffer
moveto currentpoint lineto setcolor currentcolor putpixel getpixel
setfont currentfont fontheight strsize show settextmodecolor
image loadpalette setpalette getpalette
settransparentcolor
savescreen restorescreen
fillrect
snprintf
edit.init edit.done edit.input edit.showcursor edit.hidecursor edit.redraw
edit.getleft
rmoveto strstr
sound.getvolume sound.setvolume
sound.getsamplerate sound.setsamplerate
sound.play sound.done
mod.load mod.play mod.playsample
wav.play wav.playlater
settextwrap currenttextwrap
seteotchar currenteotchar
settextcolors currenttextcolors
setmaxrows currentmaxrows
formattext
gettextrows setstartrow
getlinks
setlink currentlink
getlink
lineheight
currenttitle
usleep notimeout
time date
idle
image.size
eject poweroff reboot
64bit
getbyte putbyte getword putword getdword putdword
inbyte outbyte
findfile filesize getcwd chdir mount
setmode currentmode videomodeinfo videomodes
colorbits
setimage currentimage
settransparency currenttransparency
unpackimage
keepmode
blend
memcpy sysconfig _readsector sysinfo
getkey serial.init serial.putc serial.setconfig serial.getbaud
realpath systempath
xxx test1 test2 test3 test4 test5 test6
);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub canon_name;
if($ARGV[0] eq '-a') {
printf "cb_functions\t\tequ %u\n", @callback + 0;
printf "prim_functions\t\tequ %u\n\n", @primary + 3;
$i = 0;
for (@callback) {
$c = canon_name $_;
$s = "";
$s .= "\t" if length $c < 3;
$s .= "\t" if length $c < 11;
print "cb_$c$s\tequ $i\n";
$i++;
}
print "\n%macro\t\t\tprim_jump_table 0\n";
print "jt_p_none\t\tdw 0\t\t\t; 00h\njt_p_code\t\tdw 0\t\t\t; 01h\njt_p_ret\t\tdw 0\t\t\t; 02h\n";
$i = 3;
for (@primary) {
$c = canon_name $_;
$s = "";
$s .= "\t" if length $c < 3;
$s .= "\t" if length $c < 11;
$t = "";
$t .= "\t" if length $_ < 8;
print "jt_p_$c$s\tdw prim_$c$t\t; ";
printf "%02xh\n", $i++
}
print "%endmacro\n"
}
if($ARGV[0] eq '-c') {
print "typedef enum {\n";
print " p_none,\n p_code,\n p_ret";
for (@primary) { $c = canon_name $_; print ",\n p_$c" }
print "\n} prim_t;\n\n";
print "struct {\n type_t type;\n unsigned value;\n char *name;\n} prim_names[] = {\n";
for (@callback) {
print " { t_none, 0, \"$_\" },\n"
}
print " { t_prim, p_code, \"{\" },\n";
print " { t_prim, p_ret, \"{\" }";
for (@primary) {
$c = canon_name $_;
print ",\n { t_prim, p_$c, \"$_\" }"
}
print "\n};\n"
}
sub canon_name
{
local $_ = shift;
$_ = 'astart' if $_ eq '[';
$_ = 'aend' if $_ eq ']';
tr/.//d;
return $_
}