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,241 @@
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 "memory.h"
15
+ #include "util.h"
16
+ #include "interpreter.h"
17
+
18
+ #define GCincPeriod 20
19
+
20
+
21
+ // Gestion de la pile
22
+ Stack::Stack()
23
+ {
24
+ base=NULL;
25
+ }
26
+ Stack::~Stack()
27
+ {
28
+ if (base) delete base;
29
+ }
30
+
31
+ void Stack::dump(FILE *f)
32
+ {
33
+ const char* buf="stck";
34
+ fwrite((void*)buf,1,4,f);
35
+ fwrite((void*)&size,1,4,f);
36
+ fwrite((void*)&pp,1,4,f);
37
+ fwrite((void*)&base,1,4,f);
38
+ fwrite((void*)base,1,4*size,f);
39
+ }
40
+
41
+ void Stack::initialize(int s)
42
+ {
43
+ size=s;
44
+ base=new int[size];
45
+ pp=base;
46
+ }
47
+
48
+ int Stack::bigger(Memory* m)
49
+ {
50
+ int currentpp=pp-base;
51
+
52
+ size*=2;
53
+
54
+ int* newbase=new int[size];
55
+ if (!newbase)
56
+ {
57
+ PRINTF(m)(LOG_RUNTIME,"Stack : out of Stack Memory\n");
58
+ AbortMetal(m,1);
59
+ return MTLERR_OM; // impossible d'augmenter la taille de la pile
60
+ }
61
+ int i; for(i=0;i<=currentpp;i++) newbase[i]=base[i];
62
+ delete base;
63
+ base=newbase;
64
+ pp=&base[currentpp];
65
+ return 0;
66
+ }
67
+
68
+
69
+
70
+
71
+ // ajout d'une racine
72
+ int Memory::addroot(int *p)
73
+ {
74
+ int k;
75
+
76
+ if (k=push(PNTTOVAL(p))) return k;
77
+ int* r=malloc(LIST_LENGTH,TYPE_TAB);
78
+ TABSET(this,r,LIST_VAL,PNTTOVAL(p));
79
+ TABSET(this,r,LIST_NEXT,root);
80
+ root=PNTTOVAL(r);
81
+ STACKDROP(this);
82
+ return 0;
83
+ }
84
+
85
+ // suppression d'une racine
86
+ void Memory::removeroot(int *p)
87
+ {
88
+ int* last=NULL; // pointeur vers le précédent maillon de la liste
89
+ int vq=root;
90
+ while(vq!=NIL)
91
+ {
92
+ int* q=VALTOPNT(vq);
93
+ if (TABGET(q,LIST_VAL)==PNTTOVAL(p))
94
+ {
95
+ if (last) TABSET(this,last,LIST_NEXT,TABGET(q,LIST_NEXT));
96
+ else root=TABGET(q,LIST_NEXT);
97
+ return;
98
+ }
99
+ last=q;
100
+ vq=TABGET(q,LIST_NEXT);
101
+ }
102
+ }
103
+
104
+ Memory::Memory(int size,Terminal *t,FileSystem *fs)
105
+ {
106
+ term=t;
107
+ filesystem=fs;
108
+ size0=size; // on retient la taille initiale, elle sert d'ordre de grandeur
109
+ gcincperiod=GCincPeriod;
110
+ abort=0;
111
+
112
+ util=new Util(this);
113
+ winutil=NULL;
114
+ // listing();
115
+ }
116
+
117
+ Memory::~Memory()
118
+ {
119
+ // if (winutil) delete winutil;
120
+ delete util;
121
+ }
122
+
123
+ void Memory::stop()
124
+ {
125
+ abort=1;
126
+ util->stop();
127
+ root=NIL;
128
+ stack.pp=0;
129
+ }
130
+
131
+ int Memory::start()
132
+ {
133
+ root=NIL;
134
+
135
+ stack.initialize(STACK_FIRST_SIZE);
136
+
137
+ PRINTF(this)(LOG_RUNTIME,"Metal Virtual Machine\n");
138
+ PRINTF(this)(LOG_RUNTIME,"V0.2 - Sylvain Huet - 2005\n");
139
+ PRINTF(this)(LOG_RUNTIME,"--------------------------\n");
140
+ return util->start();
141
+ }
142
+
143
+ void Memory::dump()
144
+ {
145
+ }
146
+
147
+
148
+ int* Memory::malloc(int size,int type)
149
+ {
150
+ int *p=NULL;
151
+
152
+ int blocsize=size+HEADER_LENGTH;
153
+ p=new int[blocsize];
154
+ if (!p) return p;
155
+
156
+ HEADERSETSIZETYPE(p,blocsize,type);
157
+
158
+ return p;
159
+ }
160
+
161
+
162
+
163
+ int* Memory::mallocClear(int size)
164
+ {
165
+ int* p=malloc(size,TYPE_TAB);
166
+ if (!p) return p;
167
+ int i;
168
+ for(i=0;i<size;i++) TABSET(this,p,i,NIL);
169
+ return p;
170
+ }
171
+
172
+ // allocation de type TYPE_EXT (la fonction fun(pnt) sera appelée lors de l'oubli du bloc)
173
+ int* Memory::mallocExternal(void* pnt,FORGET fun)
174
+ {
175
+ int* p=malloc(2,TYPE_EXT);
176
+ if (!p) return p;
177
+ TABSET(this,p,0,(int)pnt);
178
+ TABSET(this,p,1,(int)fun);
179
+ return p;
180
+ }
181
+
182
+ // allocation de type TYPE_EXT (la fonction fun(pnt) sera appelée lors de l'oubli du bloc)
183
+ int Memory::pushExternal(void* pnt,FORGET fun)
184
+ {
185
+ int* p=mallocExternal(pnt,fun);
186
+ if (!p) return MTLERR_OM;
187
+ return push(PNTTOVAL(p));
188
+ }
189
+
190
+ int* Memory::storenosrc(int size)
191
+ {
192
+ // calcul de la taille d'un bloc pouvant contenir une certain nombre de caractères
193
+ // il faut 1 mot pour la taille et un octet nul final
194
+ int l=2+(size>>2);
195
+
196
+ int* p=malloc(l,TYPE_BINARY);
197
+ if (!p) return p;
198
+ STRSETLEN(p,size);
199
+ STRSTART(p)[size]=0;
200
+ return p;
201
+ }
202
+
203
+ int* Memory::storebinary(const char *src,int size)
204
+ {
205
+ // calcul de la taille d'un bloc pouvant contenir une certain nombre de caractères
206
+ // il faut 1 mot pour la taille et un octet nul final
207
+ int l=2+(size>>2);
208
+
209
+ int* p=malloc(l,TYPE_BINARY);
210
+ if (!p) return p;
211
+ STRSETLEN(p,size);
212
+ memcpy(STRSTART(p),src,size);
213
+ STRSTART(p)[size]=0;
214
+ return p;
215
+ }
216
+
217
+ int* Memory::storestring(const char *src)
218
+ {
219
+ return storebinary(src,strlen(src));
220
+ }
221
+
222
+ int Memory::deftab(int size)
223
+ {
224
+ int* p=malloc(size,TYPE_TAB);
225
+ if (!p) return MTLERR_OM;
226
+ int i; for(i=size-1;i>=0;i--) TABSET(this,p,i,STACKPULL(this));
227
+ return push(PNTTOVAL(p));
228
+ }
229
+
230
+ const char* Memory::errorname(int err)
231
+ {
232
+ if (err==MTLERR_OM) return "Out of memory";
233
+ else if (err==MTLERR_OP) return "Unknown Operand";
234
+ else if (err==MTLERR_DIV) return "Division by zero";
235
+ else if (err==MTLERR_RET) return "Bad implementation on 'return'";
236
+ else if (err==MTLERR_NOFUN) return "No function defined";
237
+ else if (err==MTLERR_SN) return "Syntax error";
238
+ else if (err==MTLERR_TYPE) return "Typechecking error";
239
+ else if (err==MTLERR_ABORT) return "Application aborted";
240
+ else return "Unknown error";
241
+ }
@@ -0,0 +1,326 @@
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 _MEMORY_
10
+ #define _MEMORY_
11
+
12
+ // commenter pour utiliser les fonctions d'allocatio m�moire du C++
13
+ //#define _MY_MALLOC_
14
+
15
+ class Terminal;
16
+ class Memory;
17
+ class FileSystem;
18
+ class Prodbuffer;
19
+
20
+ #define HEADER_LENGTH 3
21
+ #define HEADER_SIZETYPE 0 // la taille contient le header
22
+
23
+
24
+ #define HEADER_TYPE(p) ((p)[HEADER_SIZETYPE]&3)
25
+ #define HEADER_SIZE(p) ((p)[HEADER_SIZETYPE]>>2)
26
+ #define HEADERSETSIZETYPE(p,size,type) ((p)[HEADER_SIZETYPE]=(size<<2)+(type&3))
27
+
28
+
29
+
30
+ #define STACK_FIRST_SIZE 128
31
+ class Memory;
32
+ class FileSystem;
33
+ class Util;
34
+ class Winutil;
35
+
36
+ class Stack
37
+ {
38
+ private:
39
+ public:
40
+ Stack();
41
+ ~Stack();
42
+ int size; // taille du bloc allou�
43
+ int* base; // d�but de la pile
44
+ int* pp; // pointeur de pile
45
+
46
+ void initialize(int s);
47
+ int bigger(Memory* m);
48
+ void dump(FILE* f);
49
+ };
50
+
51
+ typedef void (*FORGET)(Memory*, void*);
52
+
53
+
54
+ class Memory
55
+ {
56
+ private:
57
+
58
+ // gestion du GC
59
+ int root; // bloc racine (initialis� avec le premier bloc allou�)
60
+
61
+ int size0;
62
+
63
+ public:
64
+ int gcincperiod;
65
+ int abort;
66
+ // stack courante
67
+ Stack stack;
68
+ Terminal* term;
69
+ FileSystem* filesystem;
70
+ Util *util;
71
+ Winutil *winutil;
72
+ Memory(int size,Terminal *t,FileSystem *fs);
73
+ ~Memory();
74
+
75
+ int start();
76
+ void stop();
77
+
78
+ int addroot(int* p);
79
+ void removeroot(int *p);
80
+
81
+ int* malloc(int size,int type); // allocation (type vaut TYPE_BINARY ou TYPE_TAB)
82
+ int* mallocClear(int size); // allocation de type TYPE_TAB avec initialisation � NIL
83
+ int* mallocExternal(void* pnt,FORGET fun); // allocation de type TYPE_EXT (la fonction fun(pnt) sera appel�e lors de l'oubli du bloc)
84
+ int pushmalloc(int size,int type); // allocation (type vaut TYPE_BINARY ou TYPE_TAB)
85
+ int pushmallocClear(int size); // allocation de type TYPE_TAB avec initialisation � NIL
86
+ int pushExternal(void* pnt,FORGET fun);
87
+
88
+ int push(int val);
89
+ void tabset(int* p,int i,int val);
90
+ void stackset(int* p,int val);
91
+
92
+
93
+ int* storestring(const char* src);
94
+ int* storebinary(const char* src,int size);
95
+ int* storenosrc(int size);
96
+ int pushstring(const char* src);
97
+ int pushbinary(const char* src,int size);
98
+ int pushnosrc(int size);
99
+ int pushpnt(void* pnt);
100
+
101
+ int deftab(int size);
102
+
103
+ void listing();
104
+ const char* errorname(int err);
105
+ void dump();
106
+ };
107
+
108
+ // structures en m�moire
109
+
110
+ // structure d'une r�f�rence
111
+ #define REF_LENGTH 10
112
+ #define REF_NAME 0 // nom de la r�f�rence
113
+ #define REF_VAL 1 // valeur de la r�f�rence
114
+ #define REF_CODE 2 // >=0 nb d'arguments de la fonction, sinon voir CODE_*
115
+ #define REF_TYPE 3 // graphe de type de la r�f�rence
116
+ #define REF_NEXT 4 // suivant dans la table de hachage
117
+ #define REF_NEXTALL 5 // suivant dans la liste globale du package
118
+ #define REF_PACKAGE 6
119
+
120
+ //// les champs suivants ne sont - pour l'instant - remplis que pour
121
+ //// les CODE_VAR et les CODE_CONST
122
+ #define REF_USED 7 // 0 au debut, 1 de plus � chaque fois que la
123
+ // r�f�rence est utilis�e
124
+ #define REF_SET 8 // pour les var. 0 si la var ne re�oit jamais de
125
+ // valeur, 1 si elle a seulement une valeur
126
+ // donn�e � la d�claration, et 2 si elle est
127
+ // 'set'-�e dans le programme
128
+ #define REF_USED_IN_IFDEF 9 // 0 au d�but, 1 de plus � chaque fois que
129
+ // la ref est utlis�e comme condition dans
130
+ // un ifdef
131
+
132
+ #define CODE_TYPE -1 // type
133
+ #define CODE_VAR -2 // variable
134
+ #define CODE_SUM -3 // type somme
135
+ #define CODE_STRUCT -4 // type struct
136
+ #define CODE_EMPTYTYPE -5 // type pr�-d�fini
137
+ #define CODE_FIELD -6 // champ de structure
138
+ #define CODE_CONS -7 // constructeur de type somme
139
+ #define CODE_CONS0 -8 // constructeur de type somme sans valeur
140
+ #define CODE_CONST -9 // valeur constante
141
+
142
+
143
+ // structure de lien d'un champ vers le type
144
+ #define FIELD_LENGTH 2
145
+ #define FIELD_NUM 0 // num�ro du champ
146
+ #define FIELD_TYPE 1 // pointeur vers la r�f�rence du type (contient le nombre de champs de la structure)
147
+
148
+ // structure d'une fonction
149
+ #define FUN_LENGTH 6
150
+ #define FUN_NBARGS 0 // nb arguments de la fonction
151
+ #define FUN_NBLOCALS 1 // nb locals+args de la fonction
152
+ #define FUN_BC 2 // bytecode
153
+ #define FUN_REF 3 // table des r�f�rences globales
154
+ #define FUN_SUPPARGS 4 // liste des arguments attach�s
155
+ #define FUN_REFERENCE 5 // pointeur vers la r�f�rence de la fonction
156
+
157
+ // structure d'une liste
158
+ #define LIST_LENGTH 2
159
+ #define LIST_VAL 0
160
+ #define LIST_NEXT 1
161
+
162
+ // structure de type
163
+ #define TYPEHEADER_LENGTH 3
164
+ #define TYPEHEADER_CODE 0 // entier TYPENAME_*
165
+ #define TYPEHEADER_ACTUAL 1
166
+ #define TYPEHEADER_COPY 2
167
+
168
+
169
+ #define TYPENAME_UNDEF 0
170
+ #define TYPENAME_FUN 1
171
+ #define TYPENAME_LIST 2
172
+ #define TYPENAME_TUPLE 3
173
+ #define TYPENAME_TAB 4
174
+ #define TYPENAME_WEAK 5
175
+ #define TYPENAME_CORE 6
176
+ #define TYPENAME_REC 7
177
+
178
+ // structure d'un package
179
+ #define PACK_LENGTH 3
180
+ #define PACK_NAME 0
181
+ #define PACK_HACH 1
182
+ #define PACK_NEXT 2
183
+
184
+
185
+ void AbortMetal(Memory* m,int donotstop);
186
+
187
+ // defines publics
188
+
189
+ #define PRINTF(m) ((m)->term->printf)
190
+
191
+ #define TYPE_BINARY 0 // type binaire pour allocation
192
+ #define TYPE_TAB 1 // type table pour allocation
193
+ #define TYPE_EXT 2 // type externe pour allocation
194
+
195
+ #define PNTTOVAL(p) (1+((int)(p))) // conversion pointeur vers mot metal
196
+ #define INTTOVAL(i) ((i)<<1) // conversion entier vers mot metal
197
+ #define FLOATTOVAL(v) ((~1)&(*(int*)(&(v)))) // conversion flottant vers mot metal
198
+
199
+ #define VALTOPNT(v) ((int*)((v)-1)) // conversion mot metal vers pointeur
200
+ #define VALTOINT(v) ((v)>>1) // conversion mot metal vers entier
201
+ #define VALTOFLOAT(v) (*((mtl_float*)(&(v)))) // conversion mot metal vers flottant
202
+
203
+ #define NIL (1) // nil
204
+ #define ISVALPNT(v) ((v)&1) // teste si un mot metal est un pointeur
205
+
206
+ #define MALLOC(m,size,type) (m->malloc(size,type)) // allocation d'un bloc
207
+ #define MALLOCCLEAR(m,size) (m->mallocClear(size)) // allocation d'un bloc de type table, initialis� � nil
208
+ #define MALLOCEXT(m,pnt,fun) (m->mallocExternal(pnt,fun)) // allocation de type TYPE_EXT (la fonction fun(pnt) sera appel�e lors de l'oubli du bloc)
209
+ #define MALLOCBIN(m,size) (m->malloc(((size)+3)>>2,TYPE_BINARY)) // allocation de type TYPE_BINARY en sp�cifiant la taille en octets
210
+
211
+ #define PUSHMALLOC(m,size,type) (m->pushmalloc(size,type)) // allocation d'un bloc
212
+ #define PUSHMALLOCCLEAR(m,size) (m->pushmallocClear(size)) // allocation d'un bloc de type table, initialis� � nil
213
+ #define PUSHMALLOCBIN(m,size) (m->pushmalloc(((size)+3)>>2,TYPE_BINARY)) // allocation de type TYPE_BINARY en sp�cifiant la taille en octets
214
+ #define PUSHPNT(m,pnt) (m->pushpnt(pnt)) // allocation de type TYPE_BINARY pour stocker un pointeur
215
+
216
+ #define EXTPUSH(m,pnt,fun) (m->pushExternal(pnt,fun)) // allocation de type TYPE_EXT (la fonction fun(pnt) sera appel�e lors de l'oubli du bloc)
217
+ #define EXTFORGET(p) (p[HEADER_LENGTH]=p[HEADER_LENGTH+1]=0) // supprime les r�f�rences d'un type externe
218
+ #define EXTVAL(p) ((void*)(p)[HEADER_LENGTH]) // retourne l'objet externe
219
+ #define TABSET(m,p,i,val) (m->tabset(p,i,val)) // r�gle une valeur d'une table
220
+ #define TABGET(p,i) (p[HEADER_LENGTH+(i)]) // lit une valeur d'une table
221
+ #define TABSTART(p) (&p[HEADER_LENGTH]) // pointeur vers la premi�re case d'une table
222
+ #define TABLEN(p) (HEADER_SIZE(p)-HEADER_LENGTH) // taille de la table
223
+ #define BINSTART(p) (&p[HEADER_LENGTH]) // pointeur vers le d�but d'un bloc binaire
224
+
225
+ #define STACKGET(m,i) ((m)->stack.pp[-(i)]) // retourne le n-ieme �l�ment de la pile
226
+ #define STACKSET(m,i,val) ((m)->stackset(&(m)->stack.pp[-(i)],val)) // r�gle le n-ieme �l�ment de la pile
227
+ #define STACKPULL(m) (*(m)->stack.pp--) // d�pile un �l�ment de la pile
228
+ #define STACKDROP(m) ((m)->stack.pp--) // supprime 1 �l�ment de la pile
229
+ #define STACKDROPN(m,n) ((m)->stack.pp-=(n)) // supprime n �l�ments de la pile
230
+ #define STACKPUSH(m,val) ((m)->push(val)) // empile un nouvel �l�ment (retourne non nul si out of memory)
231
+
232
+ #define STACKREF(m) ((m)->stack.pp-(m)->stack.base) // retourne une r�f�rence correspondant � la taille actuelle de la pile
233
+ #define STACKRESTOREREF(m,size) ((m)->stack.pp=(m)->stack.base+size) // red�finit la taille de la pile en fonction de la r�f�rence
234
+ #define STACKGETFROMREF(m,size,i) ((m)->stack.base[(size)-(i)]) // lit le n-ieme �l�ment � partir d'une r�f�rence
235
+ #define STACKSETFROMREF(m,size,i,val) ((m)->stackset(&(m)->stack.base[(size)-(i)],val)) // r�gle le l-ieme �l�ment � partir d'une r�f�rence
236
+
237
+ #define STRSTART(p) ((char*)&p[HEADER_LENGTH+1]) // retourne le d�but d'une cha�ne
238
+ #define STRLEN(p) (p[HEADER_LENGTH]) // retourne la longueur d'une cha�ne
239
+ #define STRSETLEN(p,size) (p[HEADER_LENGTH]=(size)) // d�finit la longueur de la cha�ne
240
+ #define STRSTORE(m,src) (m->storestring(src)) // stocke une cha�ne
241
+ #define STRSTOREBINARY(m,src,size) (m->storebinary(src,size)) // stocke un buffer binaire
242
+ #define STRSTORENOSRC(m,size) (m->storenosrc(size)) // stocke un buffer binaire
243
+
244
+ #define STRPUSH(m,src) (m->pushstring(src)) // stocke une cha�ne
245
+ #define STRPUSHBINARY(m,src,size) (m->pushbinary(src,size)) // stocke un buffer binaire
246
+ #define STRPUSHNOSRC(m,size) (m->pushnosrc(size)) // stocke un buffer binaire
247
+
248
+ #define DEFTAB(m,size) (m->deftab(size)) // cr�e un tuple avec les �l�ments dans la pile et empile le tuple
249
+
250
+
251
+ #define MTLERR_ENDINTERPRETER 1
252
+ #define MTLERR_OM -1
253
+ #define MTLERR_OP -2
254
+ #define MTLERR_DIV -3
255
+ #define MTLERR_RET -4
256
+ #define MTLERR_NOFUN -5
257
+ #define MTLERR_SN -6
258
+ #define MTLERR_TYPE -7
259
+ #define MTLERR_ABORT -8
260
+
261
+ #define LOG_RUNTIME 1
262
+ #define LOG_WARNING 2
263
+ #define LOG_DEVCORE 4
264
+ #define LOG_COMPILER 8
265
+ #define LOG_USER 16
266
+
267
+ inline int Memory::push(int val)
268
+ {
269
+ *(++stack.pp)=val;
270
+ if ((stack.pp-stack.base)>=stack.size-1)
271
+ {
272
+ int k; if ((k=stack.bigger(this))) return k;
273
+ // term->printf(LOG_DEVCORE,"## bigger stack %d\n",stack.size);
274
+ // stackprint(0);
275
+ }
276
+ return 0;
277
+ }
278
+
279
+ inline void Memory::tabset(int* p,int i,int val)
280
+ {
281
+ p[HEADER_LENGTH+i]=val; // r�gle une valeur d'une table
282
+ }
283
+
284
+ inline void Memory::stackset(int* p,int val)
285
+ {
286
+ *p=val;
287
+ }
288
+
289
+ inline int Memory::pushmalloc(int size,int type)
290
+ {
291
+ int* p=malloc(size,type); if (!p) return MTLERR_OM;
292
+ return push(PNTTOVAL(p));
293
+ }
294
+
295
+ inline int Memory::pushmallocClear(int size)
296
+ {
297
+ int* p=mallocClear(size); if (!p) return MTLERR_OM;
298
+ return push(PNTTOVAL(p));
299
+ }
300
+
301
+ inline int Memory::pushstring(const char* src)
302
+ {
303
+ int* p=storestring(src); if (!p) return MTLERR_OM;
304
+ return push(PNTTOVAL(p));
305
+ }
306
+
307
+ inline int Memory::pushbinary(const char* src,int size)
308
+ {
309
+ int* p=storebinary(src,size); if (!p) return MTLERR_OM;
310
+ return push(PNTTOVAL(p));
311
+ }
312
+
313
+ inline int Memory::pushnosrc(int size)
314
+ {
315
+ int* p=storenosrc(size); if (!p) return MTLERR_OM;
316
+ return push(PNTTOVAL(p));
317
+ }
318
+
319
+ inline int Memory::pushpnt(void* pnt)
320
+ {
321
+ int* p=malloc(1,TYPE_BINARY); if (!p) return MTLERR_OM;
322
+ *(BINSTART(p))=(int)pnt;
323
+ return push(PNTTOVAL(p));
324
+ }
325
+
326
+ #endif
@@ -0,0 +1,95 @@
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
+ #ifndef _PARAM_
9
+ #define _PARAM_
10
+
11
+
12
+ #define VLSB
13
+
14
+ //-------------------
15
+ // Parametres du benchmark
16
+
17
+ //++++++++
18
+ //Plateforme : commenter pour la version win32, decommenter pour la version pocketpc
19
+ //#define POCKETPC
20
+
21
+ //++++++++
22
+ //Precision des flottant : decommenter une des deux lignes
23
+
24
+ //#define myfloat double
25
+ #define mtl_float float
26
+
27
+ //++++++++
28
+ //Resolution de l'image : commenter pour utiliser des bmp 24 bits,
29
+ // decommenter pour avoir des bmp 32 bits (impossible sur pocketpc ipaq 3630
30
+
31
+ #define MODEBMP32
32
+
33
+
34
+ // Fin des parametres du benchmark
35
+ //-------------------
36
+
37
+ #ifdef POCKETPC
38
+
39
+ #define FlagMainWindow (WS_VISIBLE)
40
+ #define UNICODEDISPLAY
41
+ #define UNICODEFILENAME
42
+
43
+ #else
44
+
45
+ #define FlagMainWindow (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX)
46
+
47
+ #endif
48
+
49
+ #ifdef MODEBMP32
50
+ #define BMPINC 4
51
+ #else
52
+ #define BMPINC 3
53
+ #endif
54
+
55
+ typedef unsigned char uchar;
56
+
57
+ #ifdef UNICODEDISPLAY
58
+ #define display_type unsigned short
59
+ #define display_strlen wcslen
60
+ #define display_copyfromchar(dst,src) wsprintf(dst,TEXT("%S"),src)
61
+ #define display_copy(dst,src) wcscpy(dst,src)
62
+ #else
63
+ #define display_type char
64
+ #define display_strlen strlen
65
+ #define display_copyfromchar(dst,src) strcpy(dst,src)
66
+ #define display_copy(dst,src) strcpy(dst,src)
67
+ #endif
68
+
69
+ #ifdef UNICODEFILENAME
70
+ #define filename_type unsigned short
71
+ #define filename_strlen wcslen
72
+ #define filename_copyfromchar(dst,src) wsprintf(dst,TEXT("%S"),src)
73
+ #define filename_copy(dst,src) wcscpy(dst,src)
74
+ #define filename_copyn(dst,src,n) {wcsncpy(dst,src,n);(dst)[n]=0;}
75
+ #define filename_strcmp(s1,s2) wcscmp(s1,s2)
76
+ #define filename_strncmp(s1,s2,n) wcsncmp(s1,s2,n)
77
+ #define filename_mkdir(d) _wmkdir(d)
78
+ #else
79
+ #define filename_type char
80
+ #define filename_strlen strlen
81
+ #define filename_copyfromchar(dst,src) strcpy(dst,src)
82
+ #define filename_copy(dst,src) strcpy(dst,src)
83
+ #define filename_copyn(dst,src,n) {strncpy(dst,src,n);(dst)[n]=0;}
84
+ #define filename_strcmp(s1,s2) strcmp(s1,s2)
85
+ #define filename_strncmp(s1,s2,n) strncmp(s1,s2,n)
86
+ #define filename_mkdir(d) _mkdir(d)
87
+
88
+ #endif
89
+
90
+ //#define API_PUB __declspec(dllexport)
91
+ #define API_PUB
92
+
93
+
94
+ #endif
95
+