nabaztag_hack_kit 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+