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
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 !"
|