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.
- data/.gitignore +7 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +4 -0
- data/README.md +119 -0
- data/Rakefile +21 -0
- data/bin/mtl_comp +41 -0
- data/bin/mtl_merge +22 -0
- data/bin/mtl_simu +40 -0
- data/bytecode/lib/buffer.mtl +109 -0
- data/bytecode/lib/button.mtl +27 -0
- data/bytecode/lib/data_helper.mtl +88 -0
- data/bytecode/lib/ear.mtl +90 -0
- data/bytecode/lib/led.mtl +33 -0
- data/bytecode/lib/rfid.mtl +50 -0
- data/bytecode/main.mtl +129 -0
- data/config.ru +6 -0
- data/ext/bytecode/Commands.md +172 -0
- data/ext/bytecode/Docs.md +488 -0
- data/ext/bytecode/README.md +5 -0
- data/ext/bytecode/lib/arp.mtl +159 -0
- data/ext/bytecode/lib/cfg.mtl +74 -0
- data/ext/bytecode/lib/choreos.mtl +1487 -0
- data/ext/bytecode/lib/dhcp.mtl +152 -0
- data/ext/bytecode/lib/dns.mtl +89 -0
- data/ext/bytecode/lib/http.mtl +84 -0
- data/ext/bytecode/lib/tcp.mtl +340 -0
- data/ext/bytecode/lib/udp.mtl +49 -0
- data/ext/bytecode/lib/util.mtl +74 -0
- data/ext/bytecode/lib/var.mtl +15 -0
- data/ext/bytecode/lib/wifi.mtl +243 -0
- data/ext/bytecode/nominal-ping.mtl +5828 -0
- data/ext/mtl/Makefile +42 -0
- data/ext/mtl/README.md +13 -0
- data/ext/mtl/bc.cpp +1891 -0
- data/ext/mtl/conf.bin.sans_password +0 -0
- data/ext/mtl/config.txt +5 -0
- data/ext/mtl/dumpbc.c +2566 -0
- data/ext/mtl/extconf.rb +1 -0
- data/ext/mtl/linux_simu.c +271 -0
- data/ext/mtl/linux_simuaudio.c +16 -0
- data/ext/mtl/linux_simuaudio.h +18 -0
- data/ext/mtl/linux_simunet.c +620 -0
- data/ext/mtl/linux_simunet.h +7 -0
- data/ext/mtl/log.c +297 -0
- data/ext/mtl/log.h +20 -0
- data/ext/mtl/main_compiler.cpp +104 -0
- data/ext/mtl/main_simu.cpp +221 -0
- data/ext/mtl/mp3/GTKANAL.H +97 -0
- data/ext/mtl/mp3/LAYER3.C +2090 -0
- data/ext/mtl/mp3/TABINIT.C +82 -0
- data/ext/mtl/mp3/common.c +265 -0
- data/ext/mtl/mp3/dct64_i386.c +316 -0
- data/ext/mtl/mp3/decode_i386.c +155 -0
- data/ext/mtl/mp3/huffman.h +332 -0
- data/ext/mtl/mp3/interface.c +258 -0
- data/ext/mtl/mp3/mpg123.h +182 -0
- data/ext/mtl/mp3/mpglib.h +44 -0
- data/ext/mtl/properties.c +293 -0
- data/ext/mtl/properties.h +10 -0
- data/ext/mtl/simu.c +750 -0
- data/ext/mtl/simuaudio.c +662 -0
- data/ext/mtl/simuaudio.h +74 -0
- data/ext/mtl/simunet.c +400 -0
- data/ext/mtl/simunet.h +30 -0
- data/ext/mtl/utils/correct_const.sh +34 -0
- data/ext/mtl/vaudio.c +677 -0
- data/ext/mtl/vaudio.h +46 -0
- data/ext/mtl/vbc.h +160 -0
- data/ext/mtl/vbc_str.h +166 -0
- data/ext/mtl/vcomp/Makefile +29 -0
- data/ext/mtl/vcomp/bootstrap.cpp +89 -0
- data/ext/mtl/vcomp/compiler.cpp +470 -0
- data/ext/mtl/vcomp/compiler.h +200 -0
- data/ext/mtl/vcomp/compiler_file.cpp +929 -0
- data/ext/mtl/vcomp/compiler_prog.cpp +250 -0
- data/ext/mtl/vcomp/compiler_term.cpp +1053 -0
- data/ext/mtl/vcomp/compiler_type.cpp +872 -0
- data/ext/mtl/vcomp/compiler_var.cpp +289 -0
- data/ext/mtl/vcomp/file.cpp +79 -0
- data/ext/mtl/vcomp/file.h +39 -0
- data/ext/mtl/vcomp/filesystem.h +14 -0
- data/ext/mtl/vcomp/interpreter.cpp +85 -0
- data/ext/mtl/vcomp/interpreter.h +121 -0
- data/ext/mtl/vcomp/memory.cpp +241 -0
- data/ext/mtl/vcomp/memory.h +326 -0
- data/ext/mtl/vcomp/param.h +95 -0
- data/ext/mtl/vcomp/parser.cpp +427 -0
- data/ext/mtl/vcomp/parser.h +97 -0
- data/ext/mtl/vcomp/parser_xml.cpp +124 -0
- data/ext/mtl/vcomp/prodbuffer.cpp +125 -0
- data/ext/mtl/vcomp/prodbuffer.h +42 -0
- data/ext/mtl/vcomp/resource.h +17 -0
- data/ext/mtl/vcomp/stdlib_core.cpp +122 -0
- data/ext/mtl/vcomp/terminal.cpp +73 -0
- data/ext/mtl/vcomp/terminal.h +30 -0
- data/ext/mtl/vcomp/util.cpp +48 -0
- data/ext/mtl/vcomp/util.h +31 -0
- data/ext/mtl/vinterp.c +1349 -0
- data/ext/mtl/vinterp.h +11 -0
- data/ext/mtl/vloader.c +127 -0
- data/ext/mtl/vloader.h +31 -0
- data/ext/mtl/vlog.c +589 -0
- data/ext/mtl/vlog.h +69 -0
- data/ext/mtl/vmem.c +424 -0
- data/ext/mtl/vmem.h +107 -0
- data/ext/mtl/vnet.c +255 -0
- data/ext/mtl/vnet.h +19 -0
- data/lib/nabaztag_hack_kit/message/api.rb +39 -0
- data/lib/nabaztag_hack_kit/message/helper.rb +39 -0
- data/lib/nabaztag_hack_kit/message.rb +36 -0
- data/lib/nabaztag_hack_kit/server.rb +50 -0
- data/lib/nabaztag_hack_kit/version.rb +3 -0
- data/lib/nabaztag_hack_kit.rb +4 -0
- data/nabaztag_hack_kit.gemspec +29 -0
- data/public/bytecode.bin +0 -0
- data/test/bytecode/helper.mtl +60 -0
- data/test/bytecode/native.mtl +28 -0
- data/test/bytecode/test.mtl +221 -0
- data/test/spec_helper.rb +5 -0
- data/test/unit/message_spec.rb +56 -0
- 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
|
+
|