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 memsize dumpmem
gettype settype
screen.size image.colors vscreen.size
moveto currentpoint lineto setcolor currentcolor putpixel getpixel
setfont currentfont fontheight strsize show settextmodecolor
image loadpalette tint settintcolor setpalette getpalette
settransparentcolor
savescreen restorescreen
fillrect
snprintf
edit.init edit.done edit.input edit.showcursor edit.hidecursor
updatedisk rmoveto bootloader
strstr
sound.getvolume sound.setvolume
sound.getsamplerate sound.setsamplerate
sound.play sound.done
mod.load mod.play mod.playsample
settextwrap currenttextwrap
seteotchar currenteotchar
settextcolors currenttextcolors
setmaxrows currentmaxrows
formattext
gettextrows setstartrow
getlinks
setlink currentlink
getlink
lineheight
currenttitle
videomodes getvideomode
usleep notimeout
time
setbrightness currentbrightness
fadein fade
idle
image.size
bootdrive reloadfs usernote eject poweroff reboot biosmem
getinfo 64bit
getbyte putbyte getdword putdword
findfile
setmode currentmode findmode
colorbits
setimage currentimage
settransparency currenttransparency
unpackimage
keepmode
blend blend2
memcpy
xxx
);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 $_
}
|