Affichage amélioré des boucles et tests.
[mp-scratch.git] / src / Controle.mp
1 vardef AffiControle=
2   path cadre;
3   cadre=(llcorner texto+(-eb,-eb))--%(llcorner texto+(0,-eb))--
4     (llcorner texto+(0.875cm,0)+(-eb,-eb))--
5     (llcorner texto+(0.875cm,0)+(0,-2eb))--
6     (llcorner texto+(1.125cm,0)+(0,-2eb))--
7     (llcorner texto+(1.125cm,0)+(eb,-eb))--
8     (lrcorner texto+(0,-eb))--(lrcorner texto+(eb,0))--(urcorner texto+(eb,0))--(urcorner texto+(0,eb))--
9     (ulcorner texto+(0.625cm,0)+(eb,eb))--
10     (ulcorner texto+(0.625cm,0))--
11     (ulcorner texto+(0.375cm,0))--
12     (ulcorner texto+(0.375cm,0)+(-eb,eb))--
13     (ulcorner texto+(0,eb))--(ulcorner texto+(-eb,0))--cycle;
14   picture TEXT;
15   TEXT=image(
16       fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
17     draw cadre withcolor if unknown colControle : LightOrange else : colControle fi;
18   draw (llcorner texto+(-eb,-eb))--
19     (ulcorner texto+(-eb,0))--
20     (ulcorner texto+(0,eb))--
21     (ulcorner texto+(0.375cm,0)+(-eb,eb))--
22     (ulcorner texto+(0.375cm,0))--
23     (ulcorner texto+(0.625cm,0))--
24     (ulcorner texto+(0.625cm,0)+(eb,eb))--
25     (urcorner texto+(0,eb))--
26     (urcorner texto+(eb,0))--
27     (lrcorner texto+(eb,0))--
28     (lrcorner texto+(0,-eb))--
29     (llcorner texto+(1.125cm,0)+(eb,-eb))--
30     (llcorner texto+(1.125cm,0)+(0,-2eb))--
31     (llcorner texto+(0.875cm,0)+(0,-2eb))--
32     (llcorner texto+(0.875cm,0)+(-eb,-eb))--
33     (llcorner texto+(0.5cm,-eb));
34     if bloctest=true:
35       draw texto;% withcolor white;
36     fi;
37     );
38   TEXT
39 enddef;
40
41 vardef AffichageCN=
42   path cadre;
43   cadre=(llcorner texto+(-eb,0))--(llcorner texto+(0,-eb))--
44     (llcorner texto+(0.375cm,0)+(-eb,-eb))--
45     (llcorner texto+(0.375cm,0)+(0,-2eb))--
46     (llcorner texto+(0.625cm,0)+(0,-2eb))--
47     (llcorner texto+(0.625cm,0)+(eb,-eb))--
48     (lrcorner texto+(0,-eb))--(lrcorner texto+(eb,0))--(urcorner texto+(eb,0))--(urcorner texto+(0,eb))--
49     (ulcorner texto+(0.625cm,0)+(eb,eb))--
50     (ulcorner texto+(0.625cm,0))--
51     (ulcorner texto+(0.375cm,0))--
52     (ulcorner texto+(0.375cm,0)+(-eb,eb))--
53     (ulcorner texto+(0,eb))--(ulcorner texto+(-eb,0))--cycle;
54   picture TEXT;
55   TEXT=image(
56       fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
57     draw texto;
58     draw cadre;
59     );
60   TEXT
61 enddef;
62
63 vardef AffichageStop=
64   path cadre;
65   cadre=(llcorner texto+(-eb,0))--(llcorner texto+(0,-eb))--
66 %    (llcorner texto+(0.375cm,0)+(-eb,-eb))--
67 %    (llcorner texto+(0.375cm,0)+(0,-2eb))--
68 %    (llcorner texto+(0.625cm,0)+(0,-2eb))--
69 %    (llcorner texto+(0.625cm,0)+(eb,-eb))--
70     (lrcorner texto+(0,-eb))--(lrcorner texto+(eb,0))--(urcorner texto+(eb,0))--(urcorner texto+(0,eb))--
71     (ulcorner texto+(0.625cm,0)+(eb,eb))--
72     (ulcorner texto+(0.625cm,0))--
73     (ulcorner texto+(0.375cm,0))--
74     (ulcorner texto+(0.375cm,0)+(-eb,eb))--
75     (ulcorner texto+(0,eb))--(ulcorner texto+(-eb,0))--cycle;
76   picture TEXT;
77   TEXT=image(
78       fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
79     draw texto;
80     draw cadre;
81     );
82   TEXT
83 enddef;
84
85 vardef AffichageEC=
86   path cadre;
87   cadre=(llcorner texto+(-eb,0))--(llcorner texto+(0,-eb))--
88     (llcorner texto+(0.375cm,0)+(-eb,-eb))--
89     (llcorner texto+(0.375cm,0)+(0,-2eb))--
90     (llcorner texto+(0.625cm,0)+(0,-2eb))--
91     (llcorner texto+(0.625cm,0)+(eb,-eb))--
92     (lrcorner texto+(0,-eb))--(lrcorner texto+(eb,0))--
93     (urcorner texto+(eb,0))--(urcorner texto+(0,eb))--
94     1/2[ulcorner texto+(-eb,eb),urcorner texto+(eb,eb)]{dir150}..{dir-150}(ulcorner texto+(-eb,eb))--cycle;
95   picture TEXT;
96   TEXT=image(
97     fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
98     draw texto;
99     draw cadre;
100     );
101   TEXT
102 enddef;
103
104 pair coindebutbloc[];
105
106 vardef Repeter[](expr tps)=
107   save $;
108   picture $,texto;
109   bloctest:=true;
110   texto=image(
111     label(LATEX("\bfseries\color{white}répéter "&if numeric tps:"\colorbox{white}{\textcolor{black}{"&decimal(tps)&"}}" else: tps fi&" fois"),(0,0));
112   );
113 $=AffiControle shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffiControle);
114 _coinprec:=(llcorner $)+(0.5cm,0);
115 _coinprec:=_coinprec+(0,eb);
116 coindebutbloc@:=(llcorner $)+(0,eb);
117  $
118 enddef;
119
120 vardef RepeterI[]=
121   save $;
122   picture $,texto;
123   bloctest:=true;
124   texto=image(
125     label(LATEX("\bfseries\color{white}répéter indéfiniment"),(0,0));
126   );
127 $=AffiControle shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffiControle);
128 _coinprec:=(llcorner $)+(0.5cm,0);
129 _coinprec:=_coinprec+(0,eb);
130 coindebutbloc@:=(llcorner $)+(0,eb);
131  $
132 enddef;
133
134 vardef RepeterJ[](expr test)=
135   save $;
136   picture $,texto;
137   bloctest:=true;
138   texto=image(
139     label(LATEX("\bfseries\color{white}répéter jusqu'à "&test&""),(0,0));
140   );
141 $=AffiControle shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffiControle);
142 _coinprec:=(llcorner $)+(0.5cm,0);
143 _coinprec:=_coinprec+(0,eb);
144 coindebutbloc@:=(llcorner $)+(0,eb);
145  $
146 enddef;
147
148 vardef FinBlocRepeter[](expr tps)=
149   save $;
150   picture $,texto;
151   _coinprec:=_coinprec-(0.5cm,0);
152   drawoptions();
153   texto=image(
154       labeloffset:=0;
155     label.lrt(LATEX("\bfseries\color{white}répéter \colorbox{white}{\textcolor{white}{"&decimal(tps)&"}} fois"),if unknown _coinprec: (0,0) else:_coinprec fi);
156   labeloffset:=3;
157   );
158 path cadre;
159 cadre=(coindebutbloc@+(0.125,0.125))--
160   (coindebutbloc@+(0.0625+0.5cm+eb,0.125))--
161   (coindebutbloc@+(0.5cm,-eb))--
162   (ulcorner texto+(0.5cm,eb))--
163   (ulcorner texto+(0.5cm+eb,0))--
164   (urcorner texto+(-eb,0))--
165   (urcorner texto+(0,-eb))--
166   (lrcorner texto+(0,eb))--
167   (lrcorner texto+(-eb,0))--
168   (llcorner texto+(0.125+0.625cm,0)+(2eb,0))--
169   (llcorner texto+(0.125+0.625cm,0)+(eb,-eb))--
170   (llcorner texto+(0.125+0.375cm,0)+(eb,-eb))--
171   (llcorner texto+(0.125+0.375cm,0))--
172   (llcorner texto+(0.125,0)+(eb,0))--
173   (llcorner texto+(0.125,0)+(0,eb))--  
174   cycle;
175 bloctest:=false;
176 $=image(
177     fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
178   draw cadre withcolor if unknown colControle : LightOrange else : colControle fi;
179   label.lft(LATEX("$\color{white}\raisebox{-0.5pt}{\hbox{$\bm{\_\!\_}$}}\!\!\!\!\bm{\uparrow}$"),0.5[lrcorner texto,urcorner texto]);
180   draw (coindebutbloc@+(0.125+0.5cm+eb,0.1875))--
181     (coindebutbloc@+(0.5cm,-eb))--
182     (ulcorner texto+(0.5cm,eb))--
183     (ulcorner texto+(0.5cm+eb,0))--
184     (urcorner texto+(-eb,0))--
185     (urcorner texto+(0,-eb))--
186     (lrcorner texto+(0,eb))--
187     (lrcorner texto+(-eb,0))--
188     (llcorner texto+(0.125+0.625cm,0)+(2eb,0))--
189     (llcorner texto+(0.125+0.625cm,0)+(eb,-eb))--
190     (llcorner texto+(0.125+0.375cm,0)+(eb,-eb))--
191     (llcorner texto+(0.125+0.375cm,0))--
192     (llcorner texto+(0.125,0)+(eb,0))--
193     (llcorner texto+(0.125,0)+(0,eb))--
194     (coindebutbloc@+(0.125,0.25));
195   );
196 _coinprec:=(llcorner $);
197 _coinprec:=_coinprec+(0,eb);
198 $
199 enddef;
200
201 vardef FinBlocRepeterI[](expr tps)=
202   save $;
203   picture $,texto;
204   _coinprec:=_coinprec-(0.5cm,0);
205   drawoptions();
206   texto=image(
207       labeloffset:=0;
208     label.lrt(LATEX("\bfseries\color{white}répéter \colorbox{white}{\textcolor{white}{"&decimal(tps)&"}} fois"),if unknown _coinprec: (0,0) else:_coinprec fi);
209   labeloffset:=3;
210   );
211 path cadre;
212 cadre=(coindebutbloc@+(0.125,0.125))--
213   (coindebutbloc@+(0.0625+0.5cm+eb,0.125))--
214   (coindebutbloc@+(0.5cm,-eb))--
215   (ulcorner texto+(0.5cm,eb))--
216   (ulcorner texto+(0.5cm+eb,0))--
217   (urcorner texto+(-eb,0))--
218   (urcorner texto+(0,-eb))--
219   (lrcorner texto+(0,eb))--
220   (lrcorner texto+(-eb,0))--
221   (llcorner texto+(0.125,0)+(eb,0))--
222   (llcorner texto+(0.125,0)+(0,eb))--
223   cycle;
224 bloctest:=false;
225 $=image(
226     fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
227   draw cadre withcolor if unknown colControle : LightOrange else : colControle fi;
228   label.lft(LATEX("$\color{white}\raisebox{-0.5pt}{\hbox{$\bm{\_\!\_}$}}\!\!\!\!\bm{\uparrow}$"),0.5[lrcorner texto,urcorner texto]);
229   draw (coindebutbloc@+(0.125+0.5cm+eb,0.1875))--
230     (coindebutbloc@+(0.5cm,-eb))--
231     (ulcorner texto+(0.5cm,eb))--
232     (ulcorner texto+(0.5cm+eb,0))--
233     (urcorner texto+(-eb,0))--
234   (urcorner texto+(0,-eb))--
235   (lrcorner texto+(0,eb))--
236   (lrcorner texto+(-eb,0))--
237   (llcorner texto+(0.125,0)+(eb,0))--
238     (llcorner texto+(0.125,0)+(0,eb))--
239     (coindebutbloc@+(0.125,0.25));
240   );
241 _coinprec:=(llcorner $);
242 _coinprec:=_coinprec+(0,eb);
243 $
244 enddef;
245
246 vardef Si[](expr tps)=
247   save $;
248   picture $,texto;
249   bloctest:=true;
250   texto=image(
251     label(LATEX("\bfseries\color{white}si "&tps&" alors"),(0,0));
252   );
253 $=AffiControle shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffiControle);
254 _coinprec:=(llcorner $)+(0.5cm,0);
255 _coinprec:=_coinprec+(0,eb);
256 coindebutbloc@:=(llcorner $)+(0,eb);
257  $
258 enddef;
259
260 vardef FinBlocSi[]=
261   save $;
262   picture $,texto;
263   _coinprec:=_coinprec-(0.5cm,0);
264   drawoptions();
265   texto=image(
266       labeloffset:=0;
267     label.lrt(LATEX("\bfseries\color{white}répéter \colorbox{white}{\textcolor{black}{titi=10}}"),if unknown _coinprec: (0,0) else:_coinprec fi);
268   labeloffset:=3;
269   );
270 path cadre;
271 cadre=(coindebutbloc@+(0.125,0.125))--
272   (coindebutbloc@+(0.0625+0.5cm+eb,0.125))--
273   (coindebutbloc@+(0.5cm,-eb))--
274   (ulcorner texto+(0.5cm,eb))--
275   (ulcorner texto+(0.5cm+eb,0))--
276   (urcorner texto+(-eb,0))--
277   (urcorner texto+(0,-eb))--
278   (lrcorner texto+(0,eb))--
279   (lrcorner texto+(-eb,0))--
280   (llcorner texto+(0.125+0.625cm,0)+(2eb,0))--
281   (llcorner texto+(0.125+0.625cm,0)+(eb,-eb))--
282   (llcorner texto+(0.125+0.375cm,0)+(eb,-eb))--
283   (llcorner texto+(0.125+0.375cm,0))--
284   (llcorner texto+(0.125,0)+(eb,0))--
285   (llcorner texto+(0.125,0)+(0,eb))--  
286   cycle;
287 bloctest:=false;
288 $=image(
289     fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
290   draw cadre withcolor if unknown colControle : LightOrange else : colControle fi;
291   draw (coindebutbloc@+(0.125+0.5cm+eb,0.1875))--
292     (coindebutbloc@+(0.5cm,-eb))--
293     (ulcorner texto+(0.5cm,eb))--
294     (ulcorner texto+(0.5cm+eb,0))--
295     (urcorner texto+(-eb,0))--
296     (urcorner texto+(0,-eb))--
297     (lrcorner texto+(0,eb))--
298     (lrcorner texto+(-eb,0))--
299     (llcorner texto+(0.125+0.625cm,0)+(2eb,0))--
300     (llcorner texto+(0.125+0.625cm,0)+(eb,-eb))--
301     (llcorner texto+(0.125+0.375cm,0)+(eb,-eb))--
302     (llcorner texto+(0.125+0.375cm,0))--
303     (llcorner texto+(0.125,0)+(eb,0))--
304     (llcorner texto+(0.125,0)+(0,eb))--
305     (coindebutbloc@+(0.125,0.25));
306   );
307 _coinprec:=(llcorner $);
308 _coinprec:=_coinprec+(0,eb);
309 $
310 enddef;
311
312 vardef Sinon[]=
313   save $;
314   picture $,texto;
315   _coinprec:=_coinprec-(0.5cm,0);
316   drawoptions();
317   texto=image(
318       labeloffset:=0;
319     label.lrt(LATEX("\bfseries\color{white}\,sinon\phantom{\colorbox{white}{\textcolor{black}{\hbox to2cm{t}}}}"),if unknown _coinprec: (0,0) else:_coinprec fi);
320   labeloffset:=3;
321   );
322 path cadre;
323 cadre=(llcorner texto+(0.125,0))--
324   (coindebutbloc@+(0.125,0.125))--
325   (coindebutbloc@+(0.0625+0.5cm,0)+(eb,0.125))--
326   (coindebutbloc@+(0.5cm,0)+(0,-eb))--
327   (ulcorner texto+(0.5cm,0)+(0,eb))--
328   (ulcorner texto+(0.5cm,0)+(eb,0))--
329   (urcorner texto+(-eb,0))--
330   (urcorner texto+(0,-eb))--
331   (lrcorner texto+(0,eb))--
332   (lrcorner texto+(-eb,0))--
333   (llcorner texto+(0.125+1.125cm,0)+(2eb,0))--
334   (llcorner texto+(0.125+1.125cm,0)+(eb,-eb))--
335   (llcorner texto+(0.125+0.875cm,0)+(eb,-eb))--
336   (llcorner texto+(0.125+0.875cm,0))--  
337   cycle;
338 bloctest:=false;
339 $=image(
340     fill cadre withcolor if unknown colControle : LightOrange else : colControle fi;
341   draw cadre withcolor if unknown colControle : LightOrange else : colControle fi;
342   draw texto;
343   draw (coindebutbloc@+(0.5cm,0)+(eb,0))--
344     (coindebutbloc@+(0.5cm,0)+(0,-eb))--
345     (ulcorner texto+(0.5cm,0)+(0,eb))--
346     (ulcorner texto+(0.5cm,0)+(eb,0))--
347     (urcorner texto+(-eb,0))--
348     (urcorner texto+(0,-eb))--
349     (lrcorner texto+(0,eb))--
350     (lrcorner texto+(-eb,0))--
351     (llcorner texto+(0.125+1.125cm,0)+(2eb,0))--
352     (llcorner texto+(0.125+1.125cm,0)+(eb,-eb))--
353     (llcorner texto+(0.125+0.875cm,0)+(eb,-eb))--
354     (llcorner texto+(0.125+0.875cm,0))--
355     (llcorner texto+(eb+0.5cm,0));
356   draw (llcorner texto+(0.125,0))--(coindebutbloc@+(0.125,0.125));
357   );
358 _coinprec:=(llcorner $)+(0.5cm,0);
359 _coinprec:=_coinprec+(0,eb);
360 coindebutbloc[@]:=(llcorner $)+(0,eb+0.125);
361 $
362 enddef;
363
364 vardef Attendre(expr test)=
365   save $;
366   picture $,texto;
367   bloctest:=true;
368   texto=image(
369     label(LATEX("\bfseries\color{white}attendre "&if numeric test:"\colorbox{white}{\textcolor{black}{"&decimal(test)&"}}" else: test fi &" seconde(s)"),(0,0));
370   );
371 $=AffichageCN shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageCN);
372 _coinprec:=(llcorner $);
373 _coinprec:=_coinprec+(0,eb);
374  $
375 enddef;
376
377 vardef AttendreJ(expr test)=
378   save $;
379   picture $,texto;
380   bloctest:=true;
381   texto=image(
382     label(LATEX("\bfseries\color{white}attendre jusqu'à "&test&""),(0,0));
383   );
384 $=AffichageCN shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageCN);
385 _coinprec:=(llcorner $);
386 _coinprec:=_coinprec+(0,eb);
387  $
388 enddef;
389
390 vardef Stop(expr test)=
391   save $;
392   picture $,texto;
393   bloctest:=true;
394   texto=image(
395     label(LATEX("\bfseries\color{white}stop \colorbox{cDarkOrange}{\normalfont\textcolor{white}{"&test&" \tiny\textcolor{black}{$\blacktriangledown$}}}"),(0,0));
396   );
397 $=AffichageStop shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageStop);
398 _coinprec:=(llcorner $);
399 %_coinprec:=_coinprec+(0,eb);
400  $
401 enddef;
402
403 vardef CommencerClone=
404   save $;
405   picture $,texto;
406   %bloctest:=true;
407   texto=image(
408     label(LATEX("\bfseries\color{white}quand je commence comme un clone"),(0,0));
409   );
410 $=AffichageEC shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageEC);
411 _coinprec:=(llcorner $);
412 _coinprec:=_coinprec+(0,eb);
413  $
414 enddef;
415
416 vardef CreerClone(expr test)=
417   save $;
418   picture $,texto;
419   bloctest:=true;
420   texto=image(
421     label(LATEX("\bfseries\color{white}créer un clone de \colorbox{cDarkOrange}{\normalfont\textcolor{white}{"&test&" \tiny\textcolor{black}{$\blacktriangledown$}}}"),(0,0));
422   );
423 $=AffichageCN shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageCN);
424 _coinprec:=(llcorner $);
425 _coinprec:=_coinprec+(0,eb);
426  $
427 enddef;
428
429 vardef SupprimerClone=
430   save $;
431   picture $,texto;
432   bloctest:=true;
433   texto=image(
434     label(LATEX("\bfseries\color{white}supprimer ce clone"),(0,0));
435   );
436 $=AffichageCN shifted (if unknown _coinprec:(0,0) else :_coinprec fi - ulcorner AffichageCN);
437 _coinprec:=(llcorner $);
438 _coinprec:=_coinprec+(0,eb);
439  $
440 enddef;

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.