nabaztag_hack_kit 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +11 -0
  4. data/Gemfile +4 -0
  5. data/README.md +119 -0
  6. data/Rakefile +21 -0
  7. data/bin/mtl_comp +41 -0
  8. data/bin/mtl_merge +22 -0
  9. data/bin/mtl_simu +40 -0
  10. data/bytecode/lib/buffer.mtl +109 -0
  11. data/bytecode/lib/button.mtl +27 -0
  12. data/bytecode/lib/data_helper.mtl +88 -0
  13. data/bytecode/lib/ear.mtl +90 -0
  14. data/bytecode/lib/led.mtl +33 -0
  15. data/bytecode/lib/rfid.mtl +50 -0
  16. data/bytecode/main.mtl +129 -0
  17. data/config.ru +6 -0
  18. data/ext/bytecode/Commands.md +172 -0
  19. data/ext/bytecode/Docs.md +488 -0
  20. data/ext/bytecode/README.md +5 -0
  21. data/ext/bytecode/lib/arp.mtl +159 -0
  22. data/ext/bytecode/lib/cfg.mtl +74 -0
  23. data/ext/bytecode/lib/choreos.mtl +1487 -0
  24. data/ext/bytecode/lib/dhcp.mtl +152 -0
  25. data/ext/bytecode/lib/dns.mtl +89 -0
  26. data/ext/bytecode/lib/http.mtl +84 -0
  27. data/ext/bytecode/lib/tcp.mtl +340 -0
  28. data/ext/bytecode/lib/udp.mtl +49 -0
  29. data/ext/bytecode/lib/util.mtl +74 -0
  30. data/ext/bytecode/lib/var.mtl +15 -0
  31. data/ext/bytecode/lib/wifi.mtl +243 -0
  32. data/ext/bytecode/nominal-ping.mtl +5828 -0
  33. data/ext/mtl/Makefile +42 -0
  34. data/ext/mtl/README.md +13 -0
  35. data/ext/mtl/bc.cpp +1891 -0
  36. data/ext/mtl/conf.bin.sans_password +0 -0
  37. data/ext/mtl/config.txt +5 -0
  38. data/ext/mtl/dumpbc.c +2566 -0
  39. data/ext/mtl/extconf.rb +1 -0
  40. data/ext/mtl/linux_simu.c +271 -0
  41. data/ext/mtl/linux_simuaudio.c +16 -0
  42. data/ext/mtl/linux_simuaudio.h +18 -0
  43. data/ext/mtl/linux_simunet.c +620 -0
  44. data/ext/mtl/linux_simunet.h +7 -0
  45. data/ext/mtl/log.c +297 -0
  46. data/ext/mtl/log.h +20 -0
  47. data/ext/mtl/main_compiler.cpp +104 -0
  48. data/ext/mtl/main_simu.cpp +221 -0
  49. data/ext/mtl/mp3/GTKANAL.H +97 -0
  50. data/ext/mtl/mp3/LAYER3.C +2090 -0
  51. data/ext/mtl/mp3/TABINIT.C +82 -0
  52. data/ext/mtl/mp3/common.c +265 -0
  53. data/ext/mtl/mp3/dct64_i386.c +316 -0
  54. data/ext/mtl/mp3/decode_i386.c +155 -0
  55. data/ext/mtl/mp3/huffman.h +332 -0
  56. data/ext/mtl/mp3/interface.c +258 -0
  57. data/ext/mtl/mp3/mpg123.h +182 -0
  58. data/ext/mtl/mp3/mpglib.h +44 -0
  59. data/ext/mtl/properties.c +293 -0
  60. data/ext/mtl/properties.h +10 -0
  61. data/ext/mtl/simu.c +750 -0
  62. data/ext/mtl/simuaudio.c +662 -0
  63. data/ext/mtl/simuaudio.h +74 -0
  64. data/ext/mtl/simunet.c +400 -0
  65. data/ext/mtl/simunet.h +30 -0
  66. data/ext/mtl/utils/correct_const.sh +34 -0
  67. data/ext/mtl/vaudio.c +677 -0
  68. data/ext/mtl/vaudio.h +46 -0
  69. data/ext/mtl/vbc.h +160 -0
  70. data/ext/mtl/vbc_str.h +166 -0
  71. data/ext/mtl/vcomp/Makefile +29 -0
  72. data/ext/mtl/vcomp/bootstrap.cpp +89 -0
  73. data/ext/mtl/vcomp/compiler.cpp +470 -0
  74. data/ext/mtl/vcomp/compiler.h +200 -0
  75. data/ext/mtl/vcomp/compiler_file.cpp +929 -0
  76. data/ext/mtl/vcomp/compiler_prog.cpp +250 -0
  77. data/ext/mtl/vcomp/compiler_term.cpp +1053 -0
  78. data/ext/mtl/vcomp/compiler_type.cpp +872 -0
  79. data/ext/mtl/vcomp/compiler_var.cpp +289 -0
  80. data/ext/mtl/vcomp/file.cpp +79 -0
  81. data/ext/mtl/vcomp/file.h +39 -0
  82. data/ext/mtl/vcomp/filesystem.h +14 -0
  83. data/ext/mtl/vcomp/interpreter.cpp +85 -0
  84. data/ext/mtl/vcomp/interpreter.h +121 -0
  85. data/ext/mtl/vcomp/memory.cpp +241 -0
  86. data/ext/mtl/vcomp/memory.h +326 -0
  87. data/ext/mtl/vcomp/param.h +95 -0
  88. data/ext/mtl/vcomp/parser.cpp +427 -0
  89. data/ext/mtl/vcomp/parser.h +97 -0
  90. data/ext/mtl/vcomp/parser_xml.cpp +124 -0
  91. data/ext/mtl/vcomp/prodbuffer.cpp +125 -0
  92. data/ext/mtl/vcomp/prodbuffer.h +42 -0
  93. data/ext/mtl/vcomp/resource.h +17 -0
  94. data/ext/mtl/vcomp/stdlib_core.cpp +122 -0
  95. data/ext/mtl/vcomp/terminal.cpp +73 -0
  96. data/ext/mtl/vcomp/terminal.h +30 -0
  97. data/ext/mtl/vcomp/util.cpp +48 -0
  98. data/ext/mtl/vcomp/util.h +31 -0
  99. data/ext/mtl/vinterp.c +1349 -0
  100. data/ext/mtl/vinterp.h +11 -0
  101. data/ext/mtl/vloader.c +127 -0
  102. data/ext/mtl/vloader.h +31 -0
  103. data/ext/mtl/vlog.c +589 -0
  104. data/ext/mtl/vlog.h +69 -0
  105. data/ext/mtl/vmem.c +424 -0
  106. data/ext/mtl/vmem.h +107 -0
  107. data/ext/mtl/vnet.c +255 -0
  108. data/ext/mtl/vnet.h +19 -0
  109. data/lib/nabaztag_hack_kit/message/api.rb +39 -0
  110. data/lib/nabaztag_hack_kit/message/helper.rb +39 -0
  111. data/lib/nabaztag_hack_kit/message.rb +36 -0
  112. data/lib/nabaztag_hack_kit/server.rb +50 -0
  113. data/lib/nabaztag_hack_kit/version.rb +3 -0
  114. data/lib/nabaztag_hack_kit.rb +4 -0
  115. data/nabaztag_hack_kit.gemspec +29 -0
  116. data/public/bytecode.bin +0 -0
  117. data/test/bytecode/helper.mtl +60 -0
  118. data/test/bytecode/native.mtl +28 -0
  119. data/test/bytecode/test.mtl +221 -0
  120. data/test/spec_helper.rb +5 -0
  121. data/test/unit/message_spec.rb +56 -0
  122. metadata +209 -0
@@ -0,0 +1,289 @@
1
+ //-------------------
2
+ // MV
3
+ // version WIN32 et POCKETPC
4
+ // Sylvain Huet
5
+ // Derniere mise a jour : 07/01/2003
6
+ //
7
+
8
+ #include <stdio.h>
9
+ #include <string.h>
10
+
11
+ #include "param.h"
12
+ #include "terminal.h"
13
+ #include "memory.h"
14
+ #include "parser.h"
15
+ #include "prodbuffer.h"
16
+ #include "compiler.h"
17
+ #include "interpreter.h"
18
+
19
+
20
+ int Compiler::parseval()
21
+ {
22
+ int k;
23
+
24
+ if (k=parseval3()) return k;
25
+
26
+ if (!parser->next(0)) return 0;
27
+ if (strcmp(parser->token,"::"))
28
+ {
29
+ parser->giveback();
30
+ return 0;
31
+ }
32
+ if (k=parseval()) return k; // r�cursion
33
+
34
+ if (k=createnodetype(TYPENAME_LIST)) return k;
35
+ if (k=createnodetype(TYPENAME_UNDEF)) return k; // noeud �lement
36
+ TABSET(m,VALTOPNT(STACKGET(m,1)),TYPEHEADER_LENGTH,STACKGET(m,0)); // attachement du noeud �l�ment au noeud list
37
+ if (k=unif(VALTOPNT(STACKGET(m,0)),VALTOPNT(STACKGET(m,4)))) return k; // unification �lement
38
+ if (k=unif(VALTOPNT(STACKGET(m,1)),VALTOPNT(STACKGET(m,2)))) return k; // unification list
39
+ STACKSET(m,4,STACKGET(m,1)); // remplacement du type
40
+
41
+ int* p=MALLOCCLEAR(m,LIST_LENGTH); // cr�ation du tuple liste
42
+ if (!p) return MTLERR_OM;
43
+ TABSET(m,p,LIST_VAL,STACKGET(m,5));
44
+ TABSET(m,p,LIST_NEXT,STACKGET(m,3));
45
+ STACKSET(m,5,PNTTOVAL(p));
46
+ STACKDROPN(m,4);
47
+ return 0;
48
+ }
49
+
50
+
51
+ int Compiler::parseval3()
52
+ {
53
+ int k,op,typ;
54
+
55
+ if (k=parseval4()) return k;
56
+ while(1)
57
+ {
58
+ if (!parser->next(0)) return 0;
59
+ if (!strcmp(parser->token,"+")) { op=OPadd; typ=1;}
60
+ else if (!strcmp(parser->token,"-")) { op=OPsub; typ=1;}
61
+ else
62
+ {
63
+ parser->giveback();
64
+ return 0;
65
+ }
66
+ if (k=parseval4()) return k;
67
+ if (op==OPadd) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))+VALTOINT(STACKGET(m,1))));
68
+ else if (op==OPsub) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))-VALTOINT(STACKGET(m,1))));
69
+ int* ptyp;
70
+ if (typ==1) ptyp=VALTOPNT(TABGET(stdtypes,STDTYPE_I));
71
+ if (k=unif(VALTOPNT(STACKGET(m,0)),ptyp)) return k;
72
+ if (k=unif(VALTOPNT(STACKGET(m,2)),ptyp)) return k;
73
+ STACKDROPN(m,2);
74
+ }
75
+ }
76
+
77
+ int Compiler::parseval4()
78
+ {
79
+ int k,op,typ;
80
+
81
+ if (k=parseval5()) return k;
82
+ while(1)
83
+ {
84
+ if (!parser->next(0)) return 0;
85
+ if (!strcmp(parser->token,"*")) { op=OPmul; typ=1;}
86
+ else if (!strcmp(parser->token,"/")) { op=OPdiv; typ=1;}
87
+ else if (!strcmp(parser->token,"%")) { op=OPmod; typ=1;}
88
+ else
89
+ {
90
+ parser->giveback();
91
+ return 0;
92
+ }
93
+ if (k=parseval5()) return k;
94
+
95
+ if (op==OPmul) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))*VALTOINT(STACKGET(m,1))));
96
+ else if (op==OPdiv)
97
+ {
98
+ if (VALTOINT(STACKGET(m,1))==0) return MTLERR_DIV;
99
+ STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))/VALTOINT(STACKGET(m,1))));
100
+ }
101
+ else if (op==OPmod) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))%VALTOINT(STACKGET(m,1))));
102
+ int* ptyp;
103
+ if (typ==1) ptyp=VALTOPNT(TABGET(stdtypes,STDTYPE_I));
104
+ if (k=unif(VALTOPNT(STACKGET(m,0)),ptyp)) return k;
105
+ if (k=unif(VALTOPNT(STACKGET(m,2)),ptyp)) return k;
106
+ STACKDROPN(m,2);
107
+ }
108
+ }
109
+
110
+ int Compiler::parseval5()
111
+ {
112
+ int k,op;
113
+
114
+ if (k=parseval6()) return k;
115
+ while(1)
116
+ {
117
+ if (!parser->next(0)) return 0;
118
+ if (!strcmp(parser->token,"&")) op=OPand;
119
+ else if (!strcmp(parser->token,"|")) op=OPor;
120
+ else if (!strcmp(parser->token,"^")) op=OPeor;
121
+ else if (!strcmp(parser->token,"<<")) op=OPshl;
122
+ else if (!strcmp(parser->token,">>")) op=OPshr;
123
+ else
124
+ {
125
+ parser->giveback();
126
+ return 0;
127
+ }
128
+ if (k=parseval6()) return k;
129
+
130
+ if (op==OPand) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))&VALTOINT(STACKGET(m,1))));
131
+ else if (op==OPor) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))|VALTOINT(STACKGET(m,1))));
132
+ else if (op==OPeor) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))^VALTOINT(STACKGET(m,1))));
133
+ else if (op==OPshl) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))<<VALTOINT(STACKGET(m,1))));
134
+ else if (op==OPshr) STACKSET(m,3,INTTOVAL(VALTOINT(STACKGET(m,3))>>VALTOINT(STACKGET(m,1))));
135
+
136
+ int* ptyp=VALTOPNT(TABGET(stdtypes,STDTYPE_I));
137
+ if (k=unif(VALTOPNT(STACKGET(m,0)),ptyp)) return k;
138
+ if (k=unif(VALTOPNT(STACKGET(m,2)),ptyp)) return k;
139
+ STACKDROPN(m,2);
140
+ }
141
+ }
142
+
143
+ int Compiler::parseval6()
144
+ {
145
+ int k;
146
+
147
+ if (!parser->next(0)) return parseval7();
148
+
149
+ if (!strcmp(parser->token,"-"))
150
+ {
151
+ if (!parser->next(0)) return parseval6();
152
+ if (isdecimal(parser->token)) // gestion des entiers
153
+ {
154
+ int i=-mtl_atoi(parser->token);
155
+ if (k=STACKPUSH(m,INTTOVAL(i))) return k;
156
+ return STACKPUSH(m,TABGET(stdtypes,STDTYPE_I));
157
+ }
158
+ parser->giveback();
159
+ if (k=parseval6()) return k;
160
+ STACKSET(m,1,INTTOVAL(-VALTOINT(STACKGET(m,0))));
161
+ return unif(VALTOPNT(STACKGET(m,0)),VALTOPNT(TABGET(stdtypes,STDTYPE_I)));
162
+ }
163
+ else if (!strcmp(parser->token,"~"))
164
+ {
165
+ if (k=parseval6()) return k;
166
+ STACKSET(m,1,INTTOVAL(~VALTOINT(STACKGET(m,0))));
167
+ return unif(VALTOPNT(STACKGET(m,0)),VALTOPNT(TABGET(stdtypes,STDTYPE_I)));
168
+ }
169
+ parser->giveback();
170
+ return parseval7();
171
+ }
172
+
173
+
174
+ int Compiler::parseval7()
175
+ {
176
+ int k;
177
+
178
+ if (!parser->next(0))
179
+ {
180
+ PRINTF(m)(LOG_COMPILER,"Compiler : term expected (found EOF)\n");
181
+ return MTLERR_SN;
182
+ }
183
+ if (!strcmp(parser->token,"(")) // gestion des parenth�ses
184
+ {
185
+ if (k=parseval()) return k;
186
+ return parser->parsekeyword(")");
187
+ }
188
+ else if (!strcmp(parser->token,"[")) // gestion des tuples
189
+ {
190
+ int nval=0;
191
+ if (k=STACKPUSH(m,NIL)) return k; // valeur finale
192
+ if (k=STACKPUSH(m,NIL)) return k; // type final
193
+ int sref=STACKREF(m);
194
+ while(1)
195
+ {
196
+ if (!parser->next(0))
197
+ {
198
+ PRINTF(m)(LOG_COMPILER,"Compiler : ']' expected (found EOF)\n");
199
+ return MTLERR_SN;
200
+ }
201
+ if (!strcmp(parser->token,"]"))
202
+ {
203
+ int* p=MALLOCCLEAR(m,nval); // cr�ation du tuple liste
204
+ if (!p) return MTLERR_OM;
205
+ int i;
206
+ for(i=0;i<nval;i++) TABSET(m,p,i,STACKGET(m,(nval-i)*2-1));
207
+ STACKSETFROMREF(m,sref,1,PNTTOVAL(p));
208
+ if (k=createnodetupleval(nval)) return k;
209
+ STACKSETFROMREF(m,sref,0,STACKPULL(m));
210
+ STACKRESTOREREF(m,sref);
211
+ return 0;
212
+ }
213
+ parser->giveback();
214
+ if (k=parseval()) return k;
215
+ nval++;
216
+ }
217
+ }
218
+ else if (!strcmp(parser->token,"{")) // gestion des tableaux
219
+ {
220
+ int nval=0;
221
+ if (k=STACKPUSH(m,NIL)) return k; // valeur finale
222
+ if (k=createnodetype(TYPENAME_TAB)) return k; // type final
223
+ if (k=createnodetype(TYPENAME_UNDEF)) return k;
224
+ TABSET(m,VALTOPNT(STACKGET(m,1)),TYPEHEADER_LENGTH,STACKGET(m,0));
225
+ int* p=VALTOPNT(STACKPULL(m));
226
+
227
+ while(1)
228
+ {
229
+ if (!parser->next(0))
230
+ {
231
+ PRINTF(m)(LOG_COMPILER,"Compiler : '}' expected (found EOF)\n");
232
+ return MTLERR_SN;
233
+ }
234
+ if (!strcmp(parser->token,"}"))
235
+ {
236
+
237
+ if (k=DEFTAB(m,nval)) return k;
238
+
239
+ STACKSET(m,2,STACKGET(m,0)); // report de la valeur du tableau
240
+ STACKDROP(m);
241
+ return 0;
242
+ }
243
+ parser->giveback();
244
+ if (k=parseval()) return k;
245
+ if (k=unif(VALTOPNT(STACKGET(m,0)),p)) return k;
246
+ STACKDROP(m);
247
+ nval++;
248
+ }
249
+ }
250
+ else if (!strcmp(parser->token,"nil")) // gestion du nil
251
+ {
252
+ if (k=STACKPUSH(m,NIL)) return k; // valeur
253
+ return createnodetype(TYPENAME_WEAK);
254
+ }
255
+ else if (!strcmp(parser->token,"'")) // gestion des 'char
256
+ {
257
+ if (!parser->next(0))
258
+ {
259
+ PRINTF(m)(LOG_COMPILER,"Compiler : 'char expected (found EOF)\n");
260
+ return MTLERR_SN;
261
+ }
262
+ if (k=STACKPUSH(m,INTTOVAL(parser->token[0]&255))) return k; // valeur
263
+ if (k=parser->parsekeyword("'")) return k;
264
+ return STACKPUSH(m,TABGET(stdtypes,STDTYPE_I));
265
+ }
266
+ else if (isdecimal(parser->token)) // gestion des entiers
267
+ {
268
+ int i=mtl_atoi(parser->token);
269
+ if (k=STACKPUSH(m,INTTOVAL(i))) return k; // valeur
270
+ return STACKPUSH(m,TABGET(stdtypes,STDTYPE_I));
271
+ }
272
+ else if ((parser->token[0]=='0')&&(parser->token[1]=='x')
273
+ &&(ishexadecimal(parser->token+2))) // gestion des entiers
274
+ {
275
+ int i=mtl_htoi(parser->token+2);
276
+ if (k=STACKPUSH(m,INTTOVAL(i))) return k; // valeur
277
+ return STACKPUSH(m,TABGET(stdtypes,STDTYPE_I));
278
+ }
279
+ else if (parser->token[0]=='"') // gestion des chaines
280
+ {
281
+ if (k=parser->getstring(m,'"')) return k;
282
+ return STACKPUSH(m,TABGET(stdtypes,STDTYPE_S));
283
+ }
284
+ else
285
+ {
286
+ PRINTF(m)(LOG_COMPILER,"Compiler : unexpected term '%s'\n",parser->token);
287
+ return MTLERR_SN;
288
+ }
289
+ }
@@ -0,0 +1,79 @@
1
+ //-------------------
2
+ // Moteur 3d
3
+ // version WIN32 et POCKETPC
4
+ // Sylvain Huet
5
+ // Premiere version : 03/09/2002
6
+ // Derniere mise a jour : 05/10/2002
7
+ //
8
+
9
+ #include <stdio.h>
10
+ #include <stdarg.h>
11
+ #include <string.h>
12
+
13
+ #include "param.h"
14
+ #include "filesystem.h"
15
+ #include "file.h"
16
+
17
+ ///////////////
18
+ // File - gestion simple de fichiers
19
+
20
+
21
+ File::File(FileSystem *fs)
22
+ {
23
+ filesystem=fs;
24
+ file=NULL;
25
+ sizeinternalbuffer=64;
26
+ internalbuffer=new char[sizeinternalbuffer];
27
+ }
28
+
29
+ File::~File()
30
+ {
31
+ if (file) fclose(file);
32
+ delete internalbuffer;
33
+ }
34
+
35
+ int File::close()
36
+ {
37
+ if (file) fclose(file);
38
+ file=NULL;
39
+ return 0;
40
+ }
41
+
42
+
43
+ int File::openread(const char* name)
44
+ {
45
+ file=fopen(name,"rb");
46
+ if (file) return 0;
47
+ return -1;
48
+ }
49
+
50
+ char* File::getcontent(int *size)
51
+ {
52
+ if (file==NULL) return NULL;
53
+
54
+ fseek(file,0,SEEK_END);
55
+ *size=ftell(file);
56
+ fseek(file,0,SEEK_SET);
57
+
58
+ char* buffer;
59
+ buffer=new char[(*size)+1];
60
+ fread((void*)buffer,1,*size,file);
61
+ buffer[*size]=0;
62
+ close();
63
+ return buffer;
64
+ }
65
+ int File::openwrite(const char* name)
66
+ {
67
+ file=fopen(name,"wb");
68
+ if (file) return 0;
69
+ return -1;
70
+ }
71
+ int File::write(const char *outbuf,int size)
72
+ {
73
+ if (file==NULL) return 0;
74
+
75
+ int k=fwrite((void*)outbuf,1,size,file);
76
+ if (k<0) return -1;
77
+ fflush(file);
78
+ return 0;
79
+ }
@@ -0,0 +1,39 @@
1
+ //-------------------
2
+ // Moteur 3d
3
+ // version WIN32 et POCKETPC
4
+ // Sylvain Huet
5
+ // Premiere version : 03/09/2002
6
+ // Derniere mise a jour : 05/10/2002
7
+ //
8
+
9
+
10
+
11
+ #ifndef _FILE_
12
+ #define _FILE_
13
+
14
+ // commenter pour utiliser les fichiers windows
15
+ #include <stdio.h>
16
+
17
+ class FileSystem;
18
+
19
+ class File
20
+ {
21
+ private :
22
+ FileSystem *filesystem;
23
+ FILE *file;
24
+ char* internalbuffer;
25
+ int sizeinternalbuffer;
26
+ public:
27
+ File(FileSystem *fs);
28
+ ~File();
29
+
30
+ int openread(const char* name);
31
+ char* getcontent(int *size);
32
+
33
+ int openwrite(const char* name);
34
+ int write(const char* outbuf,int size);
35
+
36
+ int close();
37
+
38
+ };
39
+ #endif
@@ -0,0 +1,14 @@
1
+ //-------------------
2
+ // Moteur 3d
3
+ // version WIN32 et POCKETPC
4
+ // Sylvain Huet
5
+ // Premiere version : 03/09/2002
6
+ // Derniere mise a jour : 05/10/2002
7
+ //
8
+
9
+
10
+
11
+ #ifndef _FILESYSTEM_
12
+ #define _FILESYSTEM_
13
+ class FileSystem;
14
+ #endif
@@ -0,0 +1,85 @@
1
+ //-------------------
2
+ // MV
3
+ // version WIN32 et POCKETPC
4
+ // Sylvain Huet
5
+ // Premiere version : 07/01/2003
6
+ // Derniere mise a jour : 07/01/2003
7
+ //
8
+
9
+ #include <stdio.h>
10
+ #include <string.h>
11
+
12
+ #include "param.h"
13
+ #include "terminal.h"
14
+ #include "prodbuffer.h"
15
+ #include "memory.h"
16
+ #include "util.h"
17
+ #include "interpreter.h"
18
+ #include "compiler.h"
19
+
20
+ #include"../vbc_str.h"
21
+
22
+ void displaybc(Memory* m,char* p)
23
+ {
24
+ PRINTF(m)(LOG_DEVCORE,"dump %x\n",p);
25
+ const char* spaces=" ";
26
+ int ind=0;
27
+ while(1)
28
+ {
29
+ int i=*p;
30
+ if ((i<0)||(i>=MaxOpcode)) PRINTF(m)(LOG_DEVCORE,"%4d ??\n",ind);
31
+ else if ((i==OPint))
32
+ {
33
+ p++;
34
+ int v=(p[0]&255)+((p[1]&255)<<8)+((p[2]&255)<<16)+((p[3]&255)<<24);
35
+ PRINTF(m)(LOG_DEVCORE,"%4d %s%s %d\n",ind,strbytecod[i],spaces+strlen(strbytecod[i]),v);
36
+ ind+=4;
37
+ p+=3;
38
+ }
39
+ else if ((i==OPgoto)||(i==OPelse))
40
+ {
41
+ p++;
42
+ int v=(p[0]&255)+((p[1]&255)<<8);
43
+ PRINTF(m)(LOG_DEVCORE,"%4d %s%s %d\n",ind,strbytecod[i],spaces+strlen(strbytecod[i]),v);
44
+ ind+=2;
45
+ p+=1;
46
+ } else if ((i==OPgetlocalb)||(i==OPgetglobalb)||(i==OPfetchb)||(i==OPdeftabb)||(i==OPsetlocalb)||
47
+ (i==OPmktabb)||(i==OPsetstructb)||(i==OPcallrb)||(i==OPintb))
48
+ {
49
+ p++;
50
+ int v=p[0]&255;
51
+ PRINTF(m)(LOG_DEVCORE,"%4d %s%s %d\n",ind,strbytecod[i],spaces+strlen(strbytecod[i]),v);
52
+ ind++;
53
+ }
54
+ else if (i==OPret)
55
+ {
56
+ PRINTF(m)(LOG_DEVCORE,"%4d %s%s\n",ind,strbytecod[i],spaces+strlen(strbytecod[i]));
57
+ return;
58
+ }
59
+ else PRINTF(m)(LOG_DEVCORE,"%4d %s%s\n",ind,strbytecod[i],spaces+strlen(strbytecod[i]));
60
+ ind++;
61
+ p++;
62
+ }
63
+ }
64
+
65
+
66
+ Interpreter::Interpreter(Memory* memory)
67
+ {
68
+ m=memory;
69
+ output=new Prodbuffer();
70
+ };
71
+
72
+ Interpreter::~Interpreter()
73
+ {
74
+ delete output;
75
+ };
76
+
77
+ int Interpreter::start()
78
+ {
79
+ return 0;
80
+ }
81
+
82
+ void Interpreter::stop()
83
+ {
84
+ }
85
+
@@ -0,0 +1,121 @@
1
+ //-------------------
2
+ // MV
3
+ // version WIN32 et POCKETPC
4
+ // Sylvain Huet
5
+ // Premiere version : 07/01/2003
6
+ // Derniere mise a jour : 07/01/2003
7
+ //
8
+
9
+ #ifndef _INTERPRETER_
10
+ #define _INTERPRETER_
11
+
12
+
13
+ class Memory;
14
+ class Prodbuffer;
15
+
16
+
17
+ class Interpreter
18
+ {
19
+ private:
20
+ Memory* m;
21
+ int callstack;
22
+ char *pc; // pointeur vers le prochain bytecode
23
+ char *bc; // pointeur vers le d�but du bytecode
24
+ int locals; // pointeur vers les variable locales dans la pile
25
+ int* globals; // pointeur vers les variable globales
26
+
27
+ public:
28
+ Prodbuffer* output;
29
+
30
+ Interpreter(Memory* memory);
31
+ ~Interpreter();
32
+ int start();
33
+ void stop();
34
+
35
+ int go();
36
+
37
+ int TFCtest(char* p);
38
+
39
+ int BCexec();
40
+ int BCret();
41
+ int BCdrop();
42
+ int BCdup();
43
+ int BCnil();
44
+ int BCgetlocal();
45
+ int BCsetlocal();
46
+ int BCgetglobal();
47
+ int BCgetglobalb();
48
+ int BCint();
49
+ int BCgoto();
50
+ int BCelse();
51
+ int BCfetch();
52
+ int BCstore();
53
+ int BCdeftab();
54
+ int BCnop();
55
+ int BCadd();
56
+ int BCsub();
57
+ int BCmul();
58
+ int BCdiv();
59
+ int BCneg();
60
+ int BCand();
61
+ int BCor();
62
+ int BCeor();
63
+ int BCnot();
64
+ int BCshl();
65
+ int BCshr();
66
+ int BCeq();
67
+ int BCne();
68
+ int BClt();
69
+ int BCgt();
70
+ int BCle();
71
+ int BCge();
72
+ int BCnon();
73
+ int BCsearch();
74
+ int BCfloat();
75
+ int BCcall();
76
+ int BCaddf();
77
+ int BCsubf();
78
+ int BCmulf();
79
+ int BCdivf();
80
+ int BCnegf();
81
+ int BCltf();
82
+ int BCgtf();
83
+ int BClef();
84
+ int BCgef();
85
+ int BCsetlocal2();
86
+ int BCsetglobal2();
87
+ int BCexecnative();
88
+ int BCgetlocalb();
89
+ int BCfetchb();
90
+ int BCdeftabb();
91
+ int BCsetlocalb();
92
+ int BCfirst();
93
+ int BCmod();
94
+ int BCmktab();
95
+ int BCmktabb();
96
+ int BCsetstruct();
97
+ int BCsetstructb();
98
+ int BCcallr();
99
+ int BCcallrb();
100
+ int BCgetglobalval();
101
+ int BCgetglobalvalb();
102
+ int BCupdate();
103
+ int BCupdateb();
104
+ int BCintb();
105
+
106
+ };
107
+
108
+ typedef int (Interpreter::*BCfunction)();
109
+ typedef int (*EXTfunction)(void*);
110
+
111
+ #include"../vbc.h"
112
+
113
+ #define CALLSTACK_LENGTH 6 // taille de la callstack sans les variables locales
114
+ #define CALLSTACK_BC 0 // pointeur bytecode
115
+ #define CALLSTACK_PC 1 // index bytecode
116
+ #define CALLSTACK_REF 2 // table r�f�rences globales
117
+ #define CALLSTACK_PREV 3 // callstack pr�c�dente
118
+ #define CALLSTACK_NBARGS 4 // nombre d'arguments et variables globales
119
+ #define CALLSTACK_FUN 5 // pointeur vers la r�f�rence de la fonction en cours
120
+
121
+ #endif