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
data/ext/mtl/simunet.c ADDED
@@ -0,0 +1,400 @@
1
+ // Librairie Sound
2
+
3
+ #include<windows.h>
4
+ #include<winsock.h>
5
+ #include<stdio.h>
6
+ #include"simunet.h"
7
+ #include"vmem.h"
8
+ #include"vloader.h"
9
+ #include"vinterp.h"
10
+
11
+ extern HWND mainwin;
12
+
13
+ #define TCPMAX 128
14
+ #define UDPMAX 128
15
+
16
+ #define SOCKETWOULDBLOCK (WSAGetLastError()==WSAEWOULDBLOCK)
17
+
18
+ SOCKET tcp_sock[TCPMAX]; // =INVALID_SOCKET -> disponible
19
+ int tcp_enable[TCPMAX];
20
+ SOCKET udp_sock[UDPMAX];
21
+ int udp_port[UDPMAX]; // port=0 -> disponible
22
+
23
+ int inet_addr_bin(char *ip)
24
+ {
25
+ return *(int*)ip;
26
+ }
27
+
28
+ int simunetinit()
29
+ {
30
+ int i;
31
+ WORD wVersionRequested;
32
+ WSADATA wsaData;
33
+
34
+ wVersionRequested = MAKEWORD( 1, 1 );
35
+ if (WSAStartup( wVersionRequested, &wsaData )) return -1;
36
+ for(i=0;i<TCPMAX;i++) tcp_sock[i]=INVALID_SOCKET;
37
+ for(i=0;i<UDPMAX;i++) udp_port[i]=0;
38
+ return 0;
39
+ }
40
+
41
+ int tcpgetfree()
42
+ {
43
+ int i;
44
+ for(i=0;i<TCPMAX;i++) if (tcp_sock[i]==INVALID_SOCKET)
45
+ {
46
+ tcp_enable[i]=1;
47
+ return i;
48
+ }
49
+ return -1;
50
+ }
51
+ int tcpbysock(SOCKET s)
52
+ {
53
+ int i;
54
+ for(i=0;i<TCPMAX;i++) if (tcp_sock[i]==s) return i;
55
+ return -1;
56
+ }
57
+ int tcpservercreate(int port)
58
+ {
59
+ int opt=1;
60
+ SOCKADDR_IN ina;
61
+ SOCKET socksrv;
62
+ int i=tcpgetfree();
63
+ if (i<0) return i;
64
+
65
+ socksrv=socket(PF_INET,SOCK_STREAM,0);
66
+ if (socksrv==INVALID_SOCKET)
67
+ {
68
+ return -1;
69
+ }
70
+ setsockopt (socksrv, SOL_SOCKET, SO_REUSEADDR,(char*) &opt, sizeof (opt));
71
+ if (WSAAsyncSelect(socksrv,mainwin,TCPEVENT,(FD_ACCEPT))==SOCKET_ERROR)
72
+ {
73
+ closesocket(socksrv);
74
+ return -1;
75
+ }
76
+ ina.sin_family = PF_INET;
77
+ ina.sin_port = htons((unsigned short)port);
78
+ ina.sin_addr.s_addr = INADDR_ANY;
79
+
80
+ if (bind(socksrv,(struct sockaddr*)&ina,sizeof(ina))!=0)
81
+ {
82
+ printf("Sockets : Tcp port %d busy\n",port);
83
+ closesocket(socksrv);
84
+ return -1;
85
+ }
86
+ if (listen(socksrv,3)!=0)
87
+ {
88
+ printf("Sockets : Tcp port %d listen error\n",port);
89
+ closesocket(socksrv);
90
+ return -1;
91
+ }
92
+ printf("Sockets : create Tcp server :%d (socket=%d)\n",port,socksrv);
93
+ tcp_sock[i]=socksrv;
94
+
95
+ return 0;
96
+ }
97
+
98
+
99
+ int tcpopen(char* dstip,int dstport)
100
+ {
101
+ SOCKET socktcp;
102
+ SOCKADDR_IN ina;
103
+ int opt=1;
104
+
105
+ int i=tcpgetfree();
106
+ if (i<0) return i;
107
+
108
+ socktcp=socket(PF_INET,SOCK_STREAM,0);
109
+ if (socktcp==INVALID_SOCKET) return -1;
110
+
111
+ if (WSAAsyncSelect(socktcp,mainwin,TCPEVENT,(FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE))==SOCKET_ERROR)
112
+ {
113
+ closesocket(socktcp);
114
+ return -1;
115
+ }
116
+ ina.sin_family = PF_INET;
117
+ ina.sin_port = htons((unsigned short)dstport);
118
+ ina.sin_addr.s_addr = inet_addr_bin(dstip);
119
+
120
+ if ( (connect(socktcp,(struct sockaddr *)&ina,sizeof(ina))!=0)
121
+ &&(!SOCKETWOULDBLOCK))
122
+ {
123
+ printf("Sockets : Tcp connect failed\n");
124
+ closesocket(socktcp);
125
+ return -1;
126
+ }
127
+ printf("Sockets : create Tcp %s:%d (socket=%d)\n",dstip,dstport,socktcp);
128
+
129
+ tcp_sock[i]=socktcp;
130
+ return i;
131
+ }
132
+ int tcpclose(int i)
133
+ {
134
+ if ((i>=0)&&(i<TCPMAX)&&(tcp_sock[i]!=INVALID_SOCKET))
135
+ {
136
+ printf("Sockets : Tcp close %d\n",tcp_sock[i]);
137
+ closesocket(tcp_sock[i]);
138
+ tcp_sock[i]=INVALID_SOCKET;
139
+ }
140
+ return i;
141
+ }
142
+
143
+ void tcpenable(int i,int enable)
144
+ {
145
+ if ((i>=0)&&(i<TCPMAX)&&(tcp_sock[i]!=INVALID_SOCKET))
146
+ {
147
+ char buf[16];
148
+ if (enable!=tcp_enable[i])
149
+ {
150
+ tcp_enable[i]=enable;
151
+ if (enable) recv(tcp_sock[i],buf,0,0);
152
+ }
153
+ }
154
+ }
155
+
156
+ int tcpsend(int i,char* msg, int len)
157
+ {
158
+ if ((i>=0)&&(i<TCPMAX)&&(tcp_sock[i]!=INVALID_SOCKET))
159
+ {
160
+ int res=send(tcp_sock[i],msg,len,0);
161
+ if (res<0)
162
+ {
163
+ if (SOCKETWOULDBLOCK) res=0;
164
+ else res=-1;
165
+ }
166
+ return res;
167
+ }
168
+ return -1;
169
+ }
170
+ int tcpevent(int eventId, int wParam, int lParam)
171
+ {
172
+ int NetEvent,NetError;
173
+ SOCKET sock=(SOCKET)wParam;
174
+ int i=tcpbysock(sock);
175
+ // printf("tcpevent\n");
176
+ if (i<0) return 0;
177
+ NetEvent=WSAGETSELECTEVENT(lParam);
178
+ NetError=WSAGETSELECTERROR(lParam);
179
+ if (NetError)
180
+ {
181
+ printf("Sockets : NetError %d on %d\n",NetError,i);
182
+ VPUSH(INTTOVAL(i));
183
+ VPUSH(INTTOVAL(-1));
184
+ VPUSH(NIL);
185
+ VPUSH(VCALLSTACKGET(sys_start,SYS_CBTCP));
186
+ interpGo();
187
+ VPULL();
188
+ return 1;
189
+ }
190
+ if (NetEvent==FD_ACCEPT)
191
+ {
192
+ SOCKADDR_IN cor;
193
+ SOCKET ns;
194
+ int sizecor;
195
+ int ni,ip,port;
196
+ char buf[16];
197
+
198
+ sizecor=sizeof(cor);
199
+ ns=accept(sock,(struct sockaddr*)&cor,&sizecor);
200
+ if (ns==INVALID_SOCKET) return 1;
201
+
202
+ ni=tcpgetfree();
203
+ if (ni<0)
204
+ {
205
+ closesocket(ns);
206
+ return 1;
207
+ }
208
+
209
+ ip=cor.sin_addr.s_addr;
210
+ port=ntohs(cor.sin_port);
211
+
212
+ if (WSAAsyncSelect(ns,mainwin,TCPEVENT,
213
+ (FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE))==SOCKET_ERROR)
214
+ {
215
+ closesocket(ns);
216
+ return 1;
217
+ }
218
+ tcp_sock[ni]=ns;
219
+
220
+ printf("Sockets : accept Tcp from %x:%d (socket=%d)\n",ip,port,ns);
221
+ VPUSH(INTTOVAL(ni));
222
+ VPUSH(INTTOVAL(2));
223
+ sprintf(buf,"%d",i);
224
+ VPUSH(PNTTOVAL(VMALLOCSTR(buf,strlen(buf))));
225
+ VPUSH(VCALLSTACKGET(sys_start,SYS_CBTCP));
226
+ if (VSTACKGET(0)!=NIL) interpGo();
227
+ else { VPULL();VPULL();VPULL();}
228
+ VPULL();
229
+ return 1;
230
+ }
231
+
232
+ if (NetEvent==FD_WRITE)
233
+ {
234
+ printf("Sockets : Write event on %d\n",i);
235
+ VPUSH(INTTOVAL(i));
236
+ VPUSH(INTTOVAL(0));
237
+ VPUSH(NIL);
238
+ VPUSH(VCALLSTACKGET(sys_start,SYS_CBTCP));
239
+ if (VSTACKGET(0)!=NIL) interpGo();
240
+ else { VPULL();VPULL();VPULL();}
241
+ VPULL();
242
+ return 1;
243
+ }
244
+ if ((NetEvent==FD_READ)||(NetEvent==FD_CLOSE))
245
+ {
246
+ char buf[1024];
247
+ int res;
248
+ if (!tcp_enable[i])
249
+ {
250
+ // Sleep(10);
251
+ // recv(sock,buf,0,0);
252
+ // printf("disabled\n");
253
+ return 1;
254
+ }
255
+
256
+ printf("Sockets : Read event on %d\n",sock);
257
+ res=recv(sock,buf,1024,0);
258
+
259
+ VPUSH(INTTOVAL(i));
260
+ if (res>0)
261
+ {
262
+ VPUSH(INTTOVAL(1));
263
+ VPUSH(PNTTOVAL(VMALLOCSTR(buf,res)));
264
+ }
265
+ else
266
+ {
267
+ VPUSH(INTTOVAL(-1));
268
+ VPUSH(NIL);
269
+ }
270
+ VPUSH(VCALLSTACKGET(sys_start,SYS_CBTCP));
271
+ if (VSTACKGET(0)!=NIL) interpGo();
272
+ else { VPULL();VPULL();VPULL();}
273
+ VPULL();
274
+ return 1;
275
+ }
276
+ return 0;
277
+ }
278
+
279
+ int udpbyport(int p)
280
+ {
281
+ int i;
282
+ for(i=0;i<UDPMAX;i++) if (udp_port[i]==p) return i;
283
+ return -1;
284
+ }
285
+ int udpgetfree()
286
+ {
287
+ return udpbyport(0);
288
+ }
289
+ int udpbysock(SOCKET s)
290
+ {
291
+ int i;
292
+ for(i=0;i<UDPMAX;i++) if ((udp_port[i])&&(udp_sock[i]==s)) return i;
293
+ return -1;
294
+ }
295
+
296
+ int udpcreate(int port)
297
+ {
298
+ SOCKET sockudp;
299
+ SOCKADDR_IN ina;
300
+ int opt=1;
301
+ int i;
302
+
303
+ udpclose(port);
304
+
305
+ i=udpgetfree();
306
+ if (i<0) return i;
307
+
308
+ sockudp=socket(PF_INET,SOCK_DGRAM,0);
309
+ if (sockudp==INVALID_SOCKET) return -1;
310
+
311
+ if (WSAAsyncSelect(sockudp,mainwin,UDPEVENT,(FD_READ))==SOCKET_ERROR)
312
+ {
313
+ closesocket(sockudp);
314
+ return -1;
315
+ }
316
+ ina.sin_family = PF_INET;
317
+ ina.sin_port = htons((unsigned short)port);
318
+ ina.sin_addr.s_addr = INADDR_ANY;
319
+ if (bind(sockudp,(struct sockaddr*)&ina,sizeof(ina))!=0)
320
+ {
321
+ printf("Sockets : Udp port %d busy\n",port);
322
+ closesocket(sockudp);
323
+ return -1;
324
+ }
325
+ setsockopt(sockudp, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof (opt));
326
+ setsockopt(sockudp, SOL_SOCKET, SO_BROADCAST, (char*)&opt, sizeof (opt));
327
+ printf("Sockets : create Udp :%d (socket=%d)\n",port,sockudp);
328
+
329
+ udp_port[i]=port;
330
+ udp_sock[i]=sockudp;
331
+ return i;
332
+ }
333
+
334
+ int udpclose(int port)
335
+ {
336
+ int i=udpbyport(port);
337
+ if (i>=0)
338
+ {
339
+ closesocket(udp_sock[i]);
340
+ udp_port[i]=0;
341
+ }
342
+ return i;
343
+ }
344
+
345
+ int udpsend(int localport,char* dstip,int dstport,char* msg, int len)
346
+ {
347
+ SOCKADDR_IN ina;
348
+ int i;
349
+
350
+ i=udpbyport(localport);
351
+ if (i<0) i=udpcreate(localport);
352
+ if (i>=0)
353
+ {
354
+ ina.sin_family = PF_INET;
355
+ ina.sin_port = htons((unsigned short)dstport);
356
+ ina.sin_addr.s_addr = inet_addr_bin(dstip);
357
+ printf("send %d bytes on chn %d\n",len,i);
358
+ sendto(udp_sock[i],msg,len,0,(struct sockaddr *)&ina,sizeof(ina));
359
+ return 0;
360
+ }
361
+ return -1;
362
+ }
363
+
364
+ int udpevent(int eventId, int wParam, int lParam)
365
+ {
366
+ int NetEvent,NetError;
367
+ SOCKET sock=(SOCKET)wParam;
368
+ int i=udpbysock(sock);
369
+ printf("Sockets : UDP event\n");
370
+
371
+ if (i<0) return 0;
372
+
373
+ NetEvent=WSAGETSELECTEVENT(lParam);
374
+ NetError=WSAGETSELECTERROR(lParam);
375
+ if (NetError)
376
+ {
377
+ return 1;
378
+ }
379
+ if (NetEvent==FD_READ)
380
+ {
381
+ char buf[4096];
382
+ char *ip;
383
+ SOCKADDR_IN add;
384
+ int l=sizeof(add);
385
+ int res=recvfrom(sock,buf,4096,0,(struct sockaddr *)&add,&l);
386
+ if (res<0) return 1;
387
+
388
+ ip=inet_ntoa(add.sin_addr);
389
+ printf("Sockets : UDP Read %d bytes on :%d from %s:%d\n",res,udp_port[i],ip,ntohs(add.sin_port));
390
+ VPUSH(INTTOVAL(i));
391
+ VPUSH(PNTTOVAL(VMALLOCSTR(buf,res)));
392
+ VPUSH(PNTTOVAL(VMALLOCSTR((char*)&add.sin_addr.s_addr,4)));
393
+ VPUSH(VCALLSTACKGET(sys_start,SYS_CBUDP));
394
+ if (VSTACKGET(0)!=NIL) interpGo();
395
+ else { VPULL();VPULL();VPULL();}
396
+ VPULL();
397
+ return 1;
398
+ }
399
+ return 0;
400
+ }
data/ext/mtl/simunet.h ADDED
@@ -0,0 +1,30 @@
1
+ //-------------------
2
+ // MV
3
+ // version WIN32
4
+ // Sylvain Huet
5
+ // Premiere version : 07/01/2003
6
+ // Derniere mise a jour : 07/01/2003
7
+ //
8
+
9
+ #ifndef _SIMUNET_
10
+ #define _SIMUNET_
11
+
12
+ #define UDPEVENT (WM_USER+1)
13
+ #define TCPEVENT (WM_USER+2)
14
+
15
+ int simunetinit();
16
+
17
+ int tcpservercreate(int port);
18
+ int tcpopen(char* dstip,int dstport);
19
+ int tcpclose(int i);
20
+ int tcpsend(int i,char* msg, int len);
21
+ int tcpevent(int eventId, int wParam, int lParam);
22
+ void tcpenable(int i,int enable);
23
+
24
+ int udpcreate(int port);
25
+ int udpclose(int port);
26
+ int udpsend(int localport,char* dstip,int dstport,char* msg, int len);
27
+ int udpevent(int eventId, int wParam, int lParam);
28
+
29
+ #endif
30
+
@@ -0,0 +1,34 @@
1
+ #!/bin/sh
2
+
3
+ # Ce script permet de corriger automatiquement, dans un code source
4
+ # mtl, les variables déclarées en "var" qui devraient être déclarées
5
+ # en const.
6
+ #
7
+ # Cependant il vaut mieux regarder "à la main" d'abord, ou tout du
8
+ # moins regarder les modifications qui sont faites, pour identifier
9
+ # les cas où un utilise des constantes alors qu'on devrait utiliser un
10
+ # type énuméré.
11
+
12
+ usage() {
13
+ echo "usage: $(basename $0) <logs_de_la_compilation> " \
14
+ "<fichier_source_compile> <fichier_source_corrige>"
15
+ }
16
+
17
+ if [ "$#" -ne 3 ] ; then
18
+ usage
19
+ return
20
+ fi
21
+
22
+ TMPFILE="$(mktemp)"
23
+
24
+ cp "$2" "${TMPFILE}"
25
+
26
+ for i in $(grep ' is only set once, at declaration. It should be a const.' "$1" | cut -d' ' -f1 | tr -s \\n ' ') ; do
27
+ echo -n "replacing $i..."
28
+ sed -i s/"var $i\([ =;]\)"/"const $i\1"/g "$TMPFILE"
29
+ echo "done !"
30
+ done
31
+
32
+ mv "${TMPFILE}" "$3"
33
+
34
+ echo "all done !"