nabaztag_hack_kit 0.1.0.beta3 → 0.1.0.beta8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -2
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +2 -2
  5. data/CHANGELOG.md +17 -2
  6. data/LICENSE +21 -0
  7. data/README.md +115 -44
  8. data/Rakefile +2 -6
  9. data/bytecode/{Commands.md → _docs/commands.md} +0 -0
  10. data/bytecode/{Docs.md → _docs/grammar.md} +0 -0
  11. data/bytecode/_docs/grammar.pdf +0 -0
  12. data/bytecode/{src → _original}/README.md +0 -0
  13. data/bytecode/{src → _original}/lib/arp.mtl +0 -0
  14. data/bytecode/{src → _original}/lib/cfg.mtl +0 -0
  15. data/bytecode/{src → _original}/lib/choreos.mtl +0 -0
  16. data/bytecode/{src → _original}/lib/dhcp.mtl +0 -0
  17. data/bytecode/{src → _original}/lib/dns.mtl +0 -0
  18. data/bytecode/{src → _original}/lib/http.mtl +0 -0
  19. data/bytecode/{src → _original}/lib/tcp.mtl +0 -0
  20. data/bytecode/{src → _original}/lib/udp.mtl +0 -0
  21. data/bytecode/{src → _original}/lib/util.mtl +0 -0
  22. data/bytecode/{src → _original}/lib/var.mtl +0 -0
  23. data/bytecode/{src → _original}/lib/wav.mtl +0 -0
  24. data/bytecode/{src → _original}/lib/wifi.mtl +0 -0
  25. data/bytecode/{src → _original}/nominal-ping.mtl +0 -0
  26. data/bytecode/main.mtl +11 -11
  27. data/bytecode/test/test.mtl +8 -8
  28. data/examples/basic/Gemfile +1 -3
  29. data/examples/basic/config.ru +14 -4
  30. data/examples/record/Gemfile +0 -5
  31. data/examples/record/{config.ru.example → config.ru} +2 -2
  32. data/examples/record/server.rb +0 -2
  33. data/ext/Makefile +10 -0
  34. data/ext/bin/mtl_comp +29 -0
  35. data/{bytecode → ext}/bin/mtl_merge +0 -0
  36. data/ext/bin/mtl_simu +29 -0
  37. data/{bytecode/src/mtl → ext}/extconf.rb +0 -0
  38. data/ext/mtl_linux/.gitignore +7 -0
  39. data/ext/mtl_linux/LICENSE +21 -0
  40. data/ext/mtl_linux/Makefile +116 -0
  41. data/ext/mtl_linux/MetalC.project +196 -0
  42. data/ext/mtl_linux/conf.bin +0 -0
  43. data/{bytecode/src/mtl → ext/mtl_linux}/conf.bin.sans_password +0 -0
  44. data/{bytecode/src/mtl → ext/mtl_linux}/config.txt +0 -0
  45. data/ext/mtl_linux/inc/log.h +21 -0
  46. data/{bytecode/src/mtl → ext/mtl_linux/inc}/properties.h +0 -0
  47. data/{bytecode/src/mtl/linux_simuaudio.h → ext/mtl_linux/inc/simu/linux/simuaudio.h} +0 -0
  48. data/{bytecode/src/mtl/linux_simunet.h → ext/mtl_linux/inc/simu/linux/simunet.h} +0 -0
  49. data/{bytecode/src/mtl → ext/mtl_linux/inc/simu/win}/simuaudio.h +18 -18
  50. data/{bytecode/src/mtl → ext/mtl_linux/inc/simu/win}/simunet.h +0 -0
  51. data/ext/mtl_linux/inc/vcomp/compiler.h +200 -0
  52. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/file.h +11 -11
  53. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/filesystem.h +0 -0
  54. data/ext/mtl_linux/inc/vcomp/interpreter.h +121 -0
  55. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/memory.h +120 -92
  56. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/param.h +0 -0
  57. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/parser.h +27 -27
  58. data/ext/mtl_linux/inc/vcomp/prodbuffer.h +42 -0
  59. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/resource.h +1 -1
  60. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/terminal.h +8 -8
  61. data/{bytecode/src/mtl → ext/mtl_linux/inc}/vcomp/util.h +7 -7
  62. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vaudio.h +0 -0
  63. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vbc.h +1 -1
  64. data/ext/mtl_linux/inc/vm/vbc_str.h +167 -0
  65. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vinterp.h +0 -0
  66. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vloader.h +0 -0
  67. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vlog.h +0 -0
  68. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vmem.h +0 -0
  69. data/{bytecode/src/mtl → ext/mtl_linux/inc/vm}/vnet.h +0 -0
  70. data/ext/mtl_linux/nominal.mtl +3959 -0
  71. data/ext/mtl_linux/src/comp/main.cpp +123 -0
  72. data/ext/mtl_linux/src/simu/dumpbc.c +2566 -0
  73. data/ext/mtl_linux/src/simu/linux/main.cpp +288 -0
  74. data/ext/mtl_linux/src/simu/linux/simu.c +309 -0
  75. data/ext/mtl_linux/src/simu/linux/simuaudio.c +44 -0
  76. data/ext/mtl_linux/src/simu/linux/simunet.c +707 -0
  77. data/ext/mtl_linux/src/simu/log.c +340 -0
  78. data/ext/mtl_linux/src/simu/properties.c +368 -0
  79. data/{bytecode/src/mtl → ext/mtl_linux/src/simu/win}/mp3/GTKANAL.H +0 -0
  80. data/{bytecode/src/mtl → ext/mtl_linux/src/simu/win}/mp3/LAYER3.C +0 -0
  81. data/{bytecode/src/mtl → ext/mtl_linux/src/simu/win}/mp3/TABINIT.C +0 -0
  82. data/ext/mtl_linux/src/simu/win/mp3/common.c +302 -0
  83. data/ext/mtl_linux/src/simu/win/mp3/dct64_i386.c +316 -0
  84. data/ext/mtl_linux/src/simu/win/mp3/decode_i386.c +160 -0
  85. data/ext/mtl_linux/src/simu/win/mp3/huffman.h +332 -0
  86. data/ext/mtl_linux/src/simu/win/mp3/interface.c +276 -0
  87. data/{bytecode/src/mtl → ext/mtl_linux/src/simu/win}/mp3/mpg123.h +34 -30
  88. data/ext/mtl_linux/src/simu/win/mp3/mpglib.h +47 -0
  89. data/ext/mtl_linux/src/simu/win/simu.c +819 -0
  90. data/ext/mtl_linux/src/simu/win/simuaudio.c +787 -0
  91. data/ext/mtl_linux/src/simu/win/simunet.c +489 -0
  92. data/ext/mtl_linux/src/vcomp/bootstrap.cpp +95 -0
  93. data/ext/mtl_linux/src/vcomp/compiler.cpp +587 -0
  94. data/ext/mtl_linux/src/vcomp/compiler_file.cpp +1253 -0
  95. data/ext/mtl_linux/src/vcomp/compiler_prog.cpp +437 -0
  96. data/ext/mtl_linux/src/vcomp/compiler_term.cpp +1500 -0
  97. data/ext/mtl_linux/src/vcomp/compiler_type.cpp +1238 -0
  98. data/ext/mtl_linux/src/vcomp/compiler_var.cpp +502 -0
  99. data/ext/mtl_linux/src/vcomp/file.cpp +100 -0
  100. data/ext/mtl_linux/src/vcomp/interpreter.cpp +93 -0
  101. data/ext/mtl_linux/src/vcomp/memory.cpp +313 -0
  102. data/ext/mtl_linux/src/vcomp/parser.cpp +584 -0
  103. data/ext/mtl_linux/src/vcomp/parser_xml.cpp +137 -0
  104. data/{bytecode/src/mtl → ext/mtl_linux/src}/vcomp/prodbuffer.cpp +57 -36
  105. data/ext/mtl_linux/src/vcomp/stdlib_core.cpp +130 -0
  106. data/ext/mtl_linux/src/vcomp/terminal.cpp +80 -0
  107. data/{bytecode/src/mtl → ext/mtl_linux/src}/vcomp/util.cpp +18 -11
  108. data/ext/mtl_linux/src/vm/vaudio.c +830 -0
  109. data/ext/mtl_linux/src/vm/vinterp.c +1780 -0
  110. data/ext/mtl_linux/src/vm/vloader.c +139 -0
  111. data/ext/mtl_linux/src/vm/vlog.c +782 -0
  112. data/ext/mtl_linux/src/vm/vmem.c +461 -0
  113. data/ext/mtl_linux/src/vm/vnet.c +298 -0
  114. data/{bytecode/src/mtl → ext/mtl_linux}/utils/correct_const.sh +0 -0
  115. data/lib/nabaztag_hack_kit/server.rb +4 -7
  116. data/lib/nabaztag_hack_kit/version.rb +1 -1
  117. data/lib/nabaztag_hack_kit.rb +2 -2
  118. data/nabaztag_hack_kit.gemspec +10 -11
  119. data/spec/integration/server_spec.rb +3 -3
  120. data/spec/spec_helper.rb +2 -0
  121. data/spec/unit/message_spec.rb +12 -18
  122. data/spec/unit/server_spec.rb +13 -10
  123. metadata +145 -137
  124. data/bytecode/bin/mtl_comp +0 -50
  125. data/bytecode/bin/mtl_simu +0 -49
  126. data/bytecode/src/mtl/Makefile +0 -42
  127. data/bytecode/src/mtl/README.md +0 -13
  128. data/bytecode/src/mtl/bc.cpp +0 -1891
  129. data/bytecode/src/mtl/dumpbc.c +0 -2566
  130. data/bytecode/src/mtl/linux_simu.c +0 -271
  131. data/bytecode/src/mtl/linux_simuaudio.c +0 -16
  132. data/bytecode/src/mtl/linux_simunet.c +0 -620
  133. data/bytecode/src/mtl/log.c +0 -297
  134. data/bytecode/src/mtl/log.h +0 -20
  135. data/bytecode/src/mtl/main_compiler.cpp +0 -104
  136. data/bytecode/src/mtl/main_simu.cpp +0 -221
  137. data/bytecode/src/mtl/mp3/common.c +0 -265
  138. data/bytecode/src/mtl/mp3/dct64_i386.c +0 -316
  139. data/bytecode/src/mtl/mp3/decode_i386.c +0 -155
  140. data/bytecode/src/mtl/mp3/huffman.h +0 -332
  141. data/bytecode/src/mtl/mp3/interface.c +0 -258
  142. data/bytecode/src/mtl/mp3/mpglib.h +0 -44
  143. data/bytecode/src/mtl/properties.c +0 -293
  144. data/bytecode/src/mtl/simu.c +0 -750
  145. data/bytecode/src/mtl/simuaudio.c +0 -662
  146. data/bytecode/src/mtl/simunet.c +0 -400
  147. data/bytecode/src/mtl/vaudio.c +0 -677
  148. data/bytecode/src/mtl/vbc_str.h +0 -166
  149. data/bytecode/src/mtl/vcomp/Makefile +0 -29
  150. data/bytecode/src/mtl/vcomp/bootstrap.cpp +0 -89
  151. data/bytecode/src/mtl/vcomp/compiler.cpp +0 -470
  152. data/bytecode/src/mtl/vcomp/compiler.h +0 -200
  153. data/bytecode/src/mtl/vcomp/compiler_file.cpp +0 -929
  154. data/bytecode/src/mtl/vcomp/compiler_prog.cpp +0 -250
  155. data/bytecode/src/mtl/vcomp/compiler_term.cpp +0 -1053
  156. data/bytecode/src/mtl/vcomp/compiler_type.cpp +0 -872
  157. data/bytecode/src/mtl/vcomp/compiler_var.cpp +0 -289
  158. data/bytecode/src/mtl/vcomp/file.cpp +0 -79
  159. data/bytecode/src/mtl/vcomp/interpreter.cpp +0 -85
  160. data/bytecode/src/mtl/vcomp/interpreter.h +0 -121
  161. data/bytecode/src/mtl/vcomp/memory.cpp +0 -241
  162. data/bytecode/src/mtl/vcomp/parser.cpp +0 -427
  163. data/bytecode/src/mtl/vcomp/parser_xml.cpp +0 -124
  164. data/bytecode/src/mtl/vcomp/prodbuffer.h +0 -42
  165. data/bytecode/src/mtl/vcomp/stdlib_core.cpp +0 -122
  166. data/bytecode/src/mtl/vcomp/terminal.cpp +0 -73
  167. data/bytecode/src/mtl/vinterp.c +0 -1349
  168. data/bytecode/src/mtl/vloader.c +0 -127
  169. data/bytecode/src/mtl/vlog.c +0 -589
  170. data/bytecode/src/mtl/vmem.c +0 -424
  171. data/bytecode/src/mtl/vnet.c +0 -255
  172. data/examples/basic/Procfile +0 -2
  173. data/examples/basic/server.rb +0 -14
@@ -0,0 +1,461 @@
1
+ // VLISP Virtual Machine - 2006 - by Sylvain Huet
2
+ // Lowcost IS Powerfull
3
+
4
+ #include"vmem.h"
5
+ #include"vloader.h"
6
+ #include"vlog.h"
7
+
8
+ void play_check(int nocb);
9
+
10
+ #ifdef VSIMU
11
+ #include <stdio.h>
12
+ #include <stdlib.h>
13
+ #include <string.h>
14
+ int vmem_heap[VMEM_LENGTH];
15
+ #endif
16
+
17
+ #define VMEM_DBG
18
+
19
+
20
+ int vmem_heapindex;
21
+ int *vmem_top;
22
+ int vmem_stack;
23
+ int vmem_start;
24
+ int vmem_broken;
25
+
26
+ // initialisation de la m�moire
27
+ void vmemInit(int start)
28
+ {
29
+ vmem_top=&vmem_heap[VMEM_LENGTH];
30
+ vmem_stack=0;
31
+ vmem_start=vmem_heapindex=start;
32
+ vmem_broken=0;
33
+ }
34
+
35
+ void vmemSetstart(int start)
36
+ {
37
+ int size;
38
+
39
+ if (start>=vmem_start-HEADER_LENGTH)
40
+ {
41
+ return;
42
+ }
43
+
44
+ size=((vmem_start-HEADER_LENGTH-start)<<2)-1;
45
+
46
+ vmem_heap[start]=(size<<8)+(TYPE_BINARY);
47
+ vmem_heap[start+HEADER_GC]=0;
48
+ vmem_heap[start+HEADER_LIST]=0;
49
+
50
+ vmem_start=start;
51
+ }
52
+
53
+
54
+ void vmemGCfirst()
55
+ {
56
+ int i,k,j,n;
57
+ int first;
58
+
59
+ first=-1;
60
+ for(i=vmem_stack; i<0; i++)
61
+ {
62
+ k=vmem_top[i];
63
+ if ((ISVALPNT(k))&&(k!=NIL))
64
+ {
65
+ k=VALTOPNT(k);
66
+ #ifdef VMEM_DBG
67
+ if ((k<0)||(k>=VMEM_LENGTH))
68
+ {
69
+ consolestr("1.k out of space\n");
70
+ }
71
+ #endif
72
+ if (!HEADER_USED(k))
73
+ {
74
+ HEADER_MARK(k);
75
+ vmem_heap[k+HEADER_LIST]=first;
76
+ first=k;
77
+ }
78
+ }
79
+ }
80
+ while(first!=-1)
81
+ {
82
+ k=first;
83
+ #ifdef VMEM_DBG
84
+ if ((k<0)||(k>=VMEM_LENGTH))
85
+ {
86
+ consolestr("1.first out of space\n");
87
+ }
88
+ #endif
89
+ first=vmem_heap[k+HEADER_LIST];
90
+ if (HEADER_TYPE(k)) // bloc table
91
+ {
92
+ n=VSIZE(k);
93
+ j=k+HEADER_LENGTH;
94
+ for(i=0; i<n; i++)
95
+ {
96
+ k=vmem_heap[j+i];
97
+ if ((ISVALPNT(k))&&(k!=NIL))
98
+ {
99
+ k=VALTOPNT(k);
100
+ #ifdef VMEM_DBG
101
+ if ((k<0)||(k>=VMEM_LENGTH))
102
+ {
103
+ consolestr("1.k2 out of space\n");
104
+ }
105
+ #endif
106
+ if (!HEADER_USED(k))
107
+ {
108
+ HEADER_MARK(k);
109
+ vmem_heap[k+HEADER_LIST]=first;
110
+ first=k;
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ #ifdef VMEM_DBG
118
+ void dumpheap()
119
+ {
120
+ int pos,realsize;
121
+ #ifdef VSIMU
122
+ FILE *f;
123
+
124
+ f=fopen("mem.bin","wb");
125
+ fwrite(&vmem_start,1,4,f);
126
+ fwrite(&vmem_heapindex,1,4,f);
127
+ fwrite(&vmem_stack,1,4,f);
128
+ fwrite(vmem_heap,VMEM_LENGTH,1,f);
129
+ fclose(f);
130
+ #endif
131
+ pos=vmem_start;
132
+
133
+ while(pos < vmem_heapindex)
134
+ {
135
+ realsize=VSIZE(pos)+HEADER_LENGTH;
136
+ consolehx(pos);
137
+ consolestr(":pos ");
138
+ consolehx(realsize);
139
+ consolestr(":realsize\n");
140
+ if ((realsize<0)||(realsize>=VMEM_LENGTH))
141
+ {
142
+ consolestr("2.realsize out of range\n");
143
+ dump((char*)&vmem_heap[pos-32],128);
144
+ return;
145
+ }
146
+ dump((char*)&vmem_heap[pos],32);
147
+ pos+=realsize;
148
+ }
149
+
150
+
151
+ }
152
+ #endif
153
+ void vmemGCsecond()
154
+ {
155
+ int pos,newpos,realsize;
156
+
157
+ pos=newpos=vmem_start;
158
+
159
+ while(pos < vmem_heapindex)
160
+ {
161
+ realsize=VSIZE(pos)+HEADER_LENGTH;
162
+ #ifdef VMEM_DBG
163
+ if ((realsize<0)||(realsize>=VMEM_LENGTH))
164
+ {
165
+ dumpheap();
166
+ #ifdef VSIMU
167
+ printf("CORE DUMP\n");
168
+ getchar();
169
+ exit(0);
170
+ #endif
171
+ }
172
+ #endif
173
+ if (HEADER_USED(pos))
174
+ {
175
+ vmem_heap[pos+HEADER_GC]=newpos<<1;
176
+ newpos+=realsize;
177
+ }
178
+ pos+=realsize;
179
+ }
180
+ }
181
+
182
+ void vmemGCthird()
183
+ {
184
+ int i,k,j,n;
185
+ int first;
186
+
187
+ first=-1;
188
+ for(i=vmem_stack; i<0; i++)
189
+ {
190
+ k=vmem_top[i];
191
+ if ((ISVALPNT(k))&&(k!=NIL))
192
+ {
193
+ k=VALTOPNT(k);
194
+ vmem_top[i]=vmem_heap[k+HEADER_GC]|1; // attention, hack
195
+ if (!HEADER_USED(k))
196
+ {
197
+ HEADER_MARK(k);
198
+ vmem_heap[k+HEADER_LIST]=first;
199
+ first=k;
200
+ }
201
+ }
202
+ }
203
+ while(first!=-1)
204
+ {
205
+ k=first;
206
+ first=vmem_heap[k+HEADER_LIST];
207
+ if (HEADER_TYPE(k)) // bloc table
208
+ {
209
+ n=VSIZE(k);
210
+ j=k+HEADER_LENGTH;
211
+ for(i=0; i<n; i++)
212
+ {
213
+ k=vmem_heap[j+i];
214
+ if ((ISVALPNT(k))&&(k!=NIL))
215
+ {
216
+ k=VALTOPNT(k);
217
+ vmem_heap[j+i]=vmem_heap[k+HEADER_GC]|1; // attention, hack
218
+ if (!HEADER_USED(k))
219
+ {
220
+ HEADER_MARK(k);
221
+ vmem_heap[k+HEADER_LIST]=first;
222
+ first=k;
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ void vmemGCfourth()
230
+ {
231
+ int pos,newpos,realsize,i;
232
+
233
+ pos=newpos=vmem_start;
234
+
235
+ while(pos < vmem_heapindex)
236
+ {
237
+ realsize=VSIZE(pos)+HEADER_LENGTH;
238
+ if (HEADER_USED(pos))
239
+ {
240
+ vmem_heap[pos+HEADER_GC]=0;
241
+ if (newpos!=pos)
242
+ {
243
+ if (newpos+realsize<=pos)
244
+ {
245
+ memcpy(&vmem_heap[newpos],&vmem_heap[pos],realsize<<2);
246
+ }
247
+ else
248
+ {
249
+ consolestr("########GC : BIG MOVE\n");
250
+ for(i=0; i<realsize; i++)
251
+ {
252
+ vmem_heap[newpos+i]=vmem_heap[pos+i];
253
+ }
254
+ }
255
+
256
+ newpos+=realsize;
257
+ pos+=realsize;
258
+ // for(i=0;i<realsize;i++) vmem_heap[newpos++]=vmem_heap[pos++];
259
+ }
260
+ else
261
+ {
262
+ newpos=pos=pos+realsize;
263
+ }
264
+ }
265
+ else
266
+ {
267
+ // ## ajouter ici la gestion des types externes : if (HEADER_EXT(pos)) ...
268
+ pos+=realsize;
269
+ }
270
+ }
271
+ vmem_heapindex=newpos;
272
+ }
273
+
274
+ void vmemGC()
275
+ {
276
+ // logGC();
277
+ #ifdef VREAL
278
+ play_check(1);
279
+ #endif
280
+ vmemGCfirst();
281
+ #ifdef VREAL
282
+ play_check(1);
283
+ #endif
284
+ vmemGCsecond();
285
+ #ifdef VREAL
286
+ play_check(1);
287
+ #endif
288
+ vmemGCthird();
289
+ #ifdef VREAL
290
+ play_check(1);
291
+ #endif
292
+ vmemGCfourth();
293
+ #ifdef VREAL
294
+ play_check(1);
295
+ #endif
296
+ logGC();
297
+ // dump(bytecode,32);
298
+ }
299
+
300
+ int vmemAllocBin(int size,int ext)
301
+ {
302
+ int wsize,p;
303
+ wsize=HEADER_LENGTH+((size+4)>>2);
304
+
305
+ if (VMEM_LENGTH+vmem_stack-vmem_heapindex-wsize<VMEM_GCTHRESHOLD)
306
+ {
307
+ vmemGC();
308
+ if (VMEM_LENGTH+vmem_stack-vmem_heapindex-wsize<VMEM_GCTHRESHOLD)
309
+ {
310
+ consolestr("?OM Error\n");
311
+ vmem_broken=1;
312
+ sysReboot();
313
+ return -1;
314
+ }
315
+ }
316
+ p=vmem_heapindex;
317
+ vmem_heapindex+=wsize;
318
+ vmem_heap[p]=(size<<8)+((ext&127)<<1)+(TYPE_BINARY);
319
+ vmem_heap[p+HEADER_GC]=0;
320
+ vmem_heap[p+HEADER_LIST]=0;
321
+ vmem_heap[p+wsize-1]=0;
322
+ return p;
323
+ }
324
+
325
+ int vmemAllocString(char *p,int len)
326
+ {
327
+ int i;
328
+ char *q;
329
+ int iq=vmemAllocBin(len,0);
330
+ if (iq<0)
331
+ {
332
+ return iq;
333
+ }
334
+ q=VSTARTBIN(iq);
335
+ for(i=0; i<len; i++)
336
+ {
337
+ q[i]=p[i];
338
+ }
339
+ return iq;
340
+ }
341
+
342
+ int vmemAllocTab(int size,int ext)
343
+ {
344
+ int wsize,p;
345
+ wsize=HEADER_LENGTH+size;
346
+
347
+ if (VMEM_LENGTH+vmem_stack-vmem_heapindex-wsize<VMEM_GCTHRESHOLD)
348
+ {
349
+ vmemGC();
350
+ if (VMEM_LENGTH+vmem_stack-vmem_heapindex-wsize<VMEM_GCTHRESHOLD)
351
+ {
352
+ consolestr("?OM Error\n");
353
+ vmem_broken=1;
354
+ sysReboot();
355
+ return -1;
356
+ }
357
+ }
358
+ p=vmem_heapindex;
359
+ vmem_heapindex+=wsize;
360
+ size=(size<<2)-1;
361
+ vmem_heap[p]=(size<<8)+((ext&127)<<1)+(TYPE_TAB);
362
+ vmem_heap[p+HEADER_GC]=0;
363
+ vmem_heap[p+HEADER_LIST]=0;
364
+ vmem_heap[p+wsize-1]=0;
365
+ return p;
366
+ }
367
+
368
+ int vmemAllocTabClear(int size,int ext)
369
+ {
370
+ int p=vmemAllocTab(size,ext);
371
+ if (p>=0)
372
+ {
373
+ int i;
374
+ for(i=0; i<size; i++)
375
+ {
376
+ vmem_heap[p+HEADER_LENGTH+i]=NIL;
377
+ }
378
+ }
379
+ return p;
380
+ }
381
+
382
+ int vmemPush(int val)
383
+ {
384
+ vmem_top[--vmem_stack]=val;
385
+ if (VMEM_LENGTH+vmem_stack-vmem_heapindex<VMEM_GCTHRESHOLD)
386
+ {
387
+ vmemGC();
388
+ if (VMEM_LENGTH+vmem_stack-vmem_heapindex<VMEM_GCTHRESHOLD)
389
+ {
390
+ consolestr("?OM Error\n");
391
+ vmem_broken=1;
392
+ sysReboot();
393
+ return -1;
394
+ }
395
+ }
396
+ return 0;
397
+ }
398
+
399
+ void vmemStacktotab(int n)
400
+ {
401
+ int *q;
402
+ int p=vmemAllocTab(n,0);
403
+ q=VSTART(p);
404
+ while(n>0)
405
+ {
406
+ q[--n]=VPULL();
407
+ }
408
+ VPUSH(PNTTOVAL(p));
409
+ }
410
+
411
+
412
+ void vmemDumpHeap()
413
+ {
414
+ #ifdef VSIMU
415
+ int i,pos,realsize,n;
416
+ #endif
417
+ consolestr("HEAP\n----\n");
418
+ #ifdef VSIMU
419
+ pos=vmem_start;
420
+ n=0;
421
+ while(pos < vmem_heapindex)
422
+ {
423
+ realsize=VSIZE(pos)+HEADER_LENGTH;
424
+ printf("%06X : %s %d\n",pos,HEADER_TYPE(pos)?"Tab":"Bin",VSIZE(pos));
425
+ for(i=0; i<realsize; i++)
426
+ {
427
+ printf("%x ",vmem_heap[pos+i]);
428
+ }
429
+ printf("\n");
430
+ pos+=realsize;
431
+ n++;
432
+ }
433
+ #endif
434
+ logGC();
435
+ }
436
+
437
+ void vmemDumpStack()
438
+ {
439
+ #ifdef VSIMU
440
+ int i,k;
441
+ #endif
442
+ consolestr("STACK\n-----\n");
443
+ #ifdef VSIMU
444
+ for(i=-1; i>=vmem_stack; i--)
445
+ {
446
+ k=vmem_top[i];
447
+ printf("%d : %6x -> %6x (%d)\n",i,k,k>>1,k>>1);
448
+ }
449
+ #endif
450
+ }
451
+
452
+ void vmemDump()
453
+ {
454
+ vmemDumpHeap();
455
+ vmemDumpStack();
456
+ }
457
+
458
+ void vmemDumpShort()
459
+ {
460
+ logGC();
461
+ }