Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / examples / examples / p.log
1 (* ********************************************************** *)\r
2 (*\r
3 SOURCE    : P.LOG\r
4 PROGRAMME : Visualisation de coroutines sur l'exemple du programme merge.log\r
5 \r
6 AUTEURS   :     BEAU Anne-Valerie\r
7                                 DELBURG Myriam\r
8 *)\r
9 (* ********************************************************** *)\r
10 (*\r
11         Les units utilises :\r
12         ecrit\r
13         lit\r
14         affiche_abr\r
15         affiche_prg\r
16         affiche_cor\r
17         node\r
18         efface\r
19         pause\r
20         mousepos\r
21         rectangle\r
22         inchar\r
23         menu\r
24         presentation\r
25 *)\r
26 \r
27 \r
28 \r
29 \r
30 \r
31 \r
32 BLOCK\r
33         (* COROUTINE MERGE OF BINARY TREES*)\r
34 \r
35 (*************************************************************)\r
36 unit ecrit : iiuwgraph procedure( Number : integer );\r
37         var n1, n2, n3 : integer;\r
38 begin\r
39         if Number < 10\r
40         then\r
41                 call HASCII(0);\r
42                 call HASCII(Number + 48);\r
43                 call Hascii(0);\r
44         else\r
45                 if Number < 100\r
46                 then\r
47                         n1 := Number div 10;\r
48                         n2 := Number - n1 * 10;\r
49                         call HASCII(0);\r
50                         call Hascii(n1 + 48);\r
51                         call Hascii(0);\r
52                         call Hascii(n2 + 48);\r
53                 else\r
54                         n1 := Number div 100;\r
55                         n2 := (Number - n1 * 100) div 10;\r
56                         n3 := Number - n1 * 100 - n2 * 10;\r
57                         call HASCII(0);\r
58                         call Hascii(n1 + 48);\r
59                         call Hascii(0);\r
60                         call Hascii(n2 + 48);\r
61                         call HASCII(0);\r
62                         call Hascii(n3 + 48);\r
63                 fi;\r
64          fi;\r
65     call outstring("  ");\r
66 end ecrit;\r
67 \r
68 (*************************************************************)\r
69 unit lit : iiuwgraph function : integer;\r
70         var X,Y,i, OrdN : integer,\r
71                 Number : arrayof integer;\r
72 begin\r
73          array Number dim(1:4);\r
74          i:= 0 ;\r
75          X := InXPos;\r
76          Y := InYPos;\r
77          do\r
78                 OrdN:=inchar;\r
79                 if i = 8 or (OrdN < 48 and OrdN > 57) then exit fi;\r
80 \r
81       case OrdN\r
82                 when 48 : i:=i+1;\r
83                                         Number(i):=0;\r
84                 when 49 : i:=i+1;\r
85                                   Number(i):=1;\r
86                 when 50 : i:=i+1;\r
87                                   Number(i):=2;\r
88                 when 51 : i:=i+1;\r
89                                   Number(i):=3;\r
90                 when 52 : i:=i+1;\r
91                                   Number(i):=4;\r
92                 when 53 : i:=i+1;\r
93                                   Number(i):=5;\r
94                 when 54 : i:=i+1;\r
95                                   Number(i):=6;\r
96                 when 55 : i:=i+1;\r
97                                   Number(i):=7;\r
98                 when 56 : i:=i+1;\r
99                                         Number(i):=8;\r
100                 when 57 : i:=i+1;\r
101                                         Number(i):=9;\r
102                 when 8  : if i>0\r
103                                         then\r
104                                                 Number(i) := 0;\r
105                                                 i := i - 1;\r
106                                                 call hascii(0);\r
107                                         fi;\r
108                 when 13 : if i > 0 then exit fi ;\r
109                 esac;\r
110 \r
111                 if i = 1\r
112                 then\r
113                         call Move(X,Y);\r
114                         call hascii(0);\r
115                         call hascii(48+Number(1));\r
116                 fi;\r
117 \r
118                 if i = 2\r
119                 then\r
120                         call Move(X + 8,Y);\r
121                         call hascii(0);\r
122                         call hascii(48 + Number(2));\r
123                 fi;\r
124         od;\r
125 \r
126         if (Number(1) =0 ) or (Number(1) = 0 and Number(2) = 0)\r
127                 or (Number(1) = 0 and Number(2) = 0 and Number(3) = 0)\r
128         then\r
129                 call Move(X,Y);\r
130                 call hascii(0);\r
131                 call hascii(48);\r
132                 call hascii(0);\r
133         fi;\r
134 \r
135         if i = 1\r
136         then\r
137                 result := Number(1);\r
138         else\r
139                 if i = 2\r
140                 then\r
141                         result := 10 * Number(1) + Number (2);\r
142                 else\r
143                         result := 100 * Number(1) + 10 * Number(2) + Number(3);\r
144                 fi;\r
145         fi;\r
146         kill(Number);\r
147 end lit;\r
148 \r
149 (*************************************************************)\r
150 unit inchar : iiuwgraph function : integer;\r
151 var c : integer;\r
152 begin\r
153         do\r
154                 c := inkey;\r
155                 if c =/= 0 then exit fi;\r
156         od;\r
157         result := c;\r
158 end inchar;\r
159 \r
160 (*************************************************************)\r
161 unit mousepos : iiuwgraph procedure(A,B : integer; output chx : integer);\r
162 begin\r
163         if ((A>50) and (A<170))\r
164         then\r
165                 if ((B>325) and (B<345))\r
166                 then\r
167                         chx := 1;\r
168                 fi;\r
169         else\r
170                 if ((A>260) and (A<380))\r
171                 then\r
172                         if ((B>290) and (B<310))\r
173                         then\r
174                                 chx := 2;\r
175                         fi;\r
176                 fi;\r
177         fi;\r
178 \r
179 end mousepos;\r
180 \r
181 (*************************************************************)\r
182 unit rectangle : iiuwgraph procedure(X1,Y1,X2,Y2 : integer);\r
183 begin\r
184         call move(X1,Y1);\r
185         call draw(X2,Y1);\r
186         call move(X2,Y1);\r
187         call draw(X2,Y2);\r
188         call move(X2,Y2);\r
189         call draw(X1,Y2);\r
190         call move(X1,Y2);\r
191         call draw(X1,Y1);\r
192 end rectangle;\r
193 \r
194 (*************************************************************)\r
195 unit affiche_prg : iiuwgraph procedure;\r
196 begin\r
197         call color(13);\r
198         call move(5,5);\r
199         call draw(5,325);\r
200         call draw(400,325);\r
201         call draw(400,5);\r
202         call draw(5,5);\r
203         call move(5,15);\r
204         call draw(400,15);\r
205         call move(100,7);\r
206         call outstring("DL");\r
207         call move(260,7);\r
208         call outstring("SL");\r
209         call move(5,97);\r
210         call draw(400,97);\r
211         call move(370,330);\r
212         call outstring("main");\r
213         call color(3);\r
214         call move(10,17);\r
215         call outstring("program merge;");\r
216         call move(20,26);\r
217         call outstring("unit node:class;...;");\r
218         call move(30,35);\r
219         call outstring("unit ins:procedure(value:integer);...;end ins;");\r
220         call move(20,44);\r
221         call outstring("end node;");\r
222         call move(20,53);\r
223         call outstring("unit travers:coroutine(x:node);...;");\r
224         call move(30,62);\r
225         call outstring("unit t:procedure(y:node);...;end t;");\r
226         call move(20,71);\r
227         call outstring("end travers;");\r
228    call move(20,80);\r
229         call outstring("var n    ,i    ,j     ,min     ,m     :integer,");\r
230         call color(12);\r
231         call move(63,80);\r
232         call outstring("   ");\r
233         call move(63,80);\r
234         call ecrit(n);\r
235         call move(108,80);\r
236         call outstring("   ");\r
237         call move(108,80);\r
238         call ecrit(i);\r
239         call move(158,80);\r
240         call outstring("   ");\r
241         call move(158,80);\r
242         call ecrit(j);\r
243         call move(228,80);\r
244         call outstring("   ");\r
245         call move(228,80);\r
246         call ecrit(min);\r
247         call move(285,80);\r
248         call outstring("   ");\r
249         call move(285,80);\r
250         call ecrit(m);\r
251         call color(3);\r
252         call move(30,89);\r
253         call outstring("d:arrayof node, tr:array of travers;");\r
254         call move(10,98);\r
255         call outstring("begin");\r
256         call move(20,107);\r
257         call outstring("writeln('Donnez le nombre d'arbres :');read(n);");\r
258         call move(20,116);\r
259         call outstring("array d dim(1:n);");\r
260         call move(20,125);\r
261         call outstring("for i:=1 to n do");\r
262         call move(30,134);\r
263         call outstring("writeln('Donnez la sequence de l'arbre no :');");\r
264         call move(30,143);\r
265         call outstring("read(j); if j>m then m:=j fi;");\r
266         call move(30,152);\r
267         call outstring("d(i):=new node; d(i).val:=j;");\r
268         call move(30,161);\r
269         call outstring("do");\r
270         call move(40,170);\r
271         call outstring("read(j); if j=0 then exit fi;");\r
272         call move(40,179);\r
273         call outstring("if j>m then m:=j fi; call d(i).ins(j);");\r
274         call move(30,188);\r
275         call outstring("od;");\r
276         call move(20,197);\r
277         call outstring("od;");\r
278         call move(20,206);\r
279         call outstring("m:=m+1; array tr dim(1:n); min:=0;");\r
280         call move(20,215);\r
281         call outstring("for i:=1 to n do");\r
282         call move(30,224);\r
283         call outstring("tr(i):=new travers(d(i)); attach(tr(i));");\r
284         call move(20,233);\r
285         call outstring("od;");\r
286         call move(20,242);\r
287         call outstring("writeln('La fusion de la sequence est :');");\r
288         call move(20,251);\r
289         call outstring("do");\r
290         call move(30,260);\r
291         call outstring("if min=m then exit fi; min:=tr(1).val; j:=1;");\r
292         call move(30,269);\r
293         call outstring("for i:=2 to n do");\r
294         call move(40,278);\r
295         call outstring("if min>tr(i).val then min:=tr(i).val;j:=i;fi;");\r
296         call move(30,287);\r
297         call outstring("od;");\r
298         call move(30,296);\r
299         call outstring("if min<m then write(min); attach(tr(j)); fi;");\r
300         call move(20,305);\r
301         call outstring("od;");\r
302         call move(10,314);\r
303         call outstring("end merge.");\r
304 end affiche_prg;\r
305 \r
306 (*************************************************************)\r
307 unit affiche_abr : iiuwgraph procedure(x1,y1,x2,y2:integer);\r
308         var number : integer;\r
309 begin\r
310         call color(3);\r
311         call move(x1+5,y1+5);\r
312         number := 1;\r
313         call ecrit(number);\r
314         call color(9);\r
315         call rectangle(x1,y1,x2,y2);\r
316         call move(x1,y1+5);\r
317         call draw(400,y1+5);\r
318         y1:=y1+20;\r
319         y2:=y2+20;\r
320 \r
321         if n=2\r
322         then\r
323                 call color(3);\r
324                 call move(x1+5,y1+5);\r
325                 call ecrit(n);\r
326                 call color(9);\r
327                 call rectangle(x1,y1,x2,y2);\r
328                 call move(x1,y1+5);\r
329                 call draw(400,y1+5);\r
330                 y1:=y1+20;\r
331                 y2:=y2+20;\r
332         else\r
333                 if n>2\r
334                 then\r
335                         call color(3);\r
336                         call move(x1+5,y1+5);\r
337                         call outstring("...");\r
338                         call color(9);\r
339                         call rectangle(x1,y1,x2,y2);\r
340                         call move(x1,y1+5);\r
341                         call draw(400,y1+5);\r
342                         y1:=y1+20;\r
343                         y2:=y2+20;\r
344                         call color(3);\r
345                         call move(x1+5,y1+5);\r
346                         call ecrit(n);\r
347                         call color(9);\r
348                         call rectangle(x1,y1,x2,y2);\r
349                         call move(x1,y1+5);\r
350                         call draw(400,y1+5);\r
351                         y1:=y1+20;\r
352                         y2:=y2+20;\r
353                 fi;\r
354         fi;\r
355 end affiche_abr;\r
356 \r
357 (*************************************************************)\r
358 unit affiche_cor : iiuwgraph procedure(x1,y1,x2,y2:integer);\r
359 begin\r
360         call color(13);\r
361         call rectangle(x1,y1,x2,y2);\r
362         call move(x1,y1+10);\r
363         call draw(x2,y1+10);\r
364         call move(x1+50,y1+2);\r
365         call outstring("DL");\r
366         call move(x1+150,y1+2);\r
367         call outstring("SL");\r
368 \r
369         call move(x1,y1+145);\r
370         call draw(x2,y1+145);\r
371         call move(x2-55,y2+5);\r
372         call outstring("travers");\r
373         call color(3);\r
374         call move(x1+5,y1+15);\r
375         call outstring("unit travers:coroutine");\r
376         call move(x1+30,y1+25);\r
377         call outstring("(x:node);");\r
378         call move(x1+10,y1+35);\r
379         call outstring("var val : interger;");\r
380         call move(x1+170,y1+35);\r
381         call color(12);\r
382         call outstring("   ");\r
383         call move(x1+170,y1+35);\r
384         call ecrit(valeur);\r
385         call color(3);\r
386         call move(x1+10,y1+45);\r
387         call outstring("unit t:procedure(y:node);");\r
388         call move(x1+10,y1+55);\r
389         call outstring("begin");\r
390         call move(x1+15,y1+65);\r
391         call outstring("if y=/=none");\r
392         call move(x1+15,y1+75);\r
393         call outstring("then");\r
394         call move(x1+20,y1+85);\r
395         call outstring("call t(y.left);");\r
396         call move(x1+20,y1+95);\r
397         call outstring("val:=y.val;");\r
398         call move(x1+20,y1+105);\r
399         call outstring("detach;");\r
400         call move(x1+20,y1+115);\r
401         call outstring("call t(y.right);");\r
402         call move(x1+15,y1+125);\r
403         call outstring("fi;");\r
404         call move(x1+10,y1+135);\r
405         call outstring("end t;");\r
406         call color(5);\r
407         call color(3);\r
408         call move(x1+5,y1+150);\r
409         call outstring("begin");\r
410         call move(x1+10,y1+160);\r
411         call outstring("return;");\r
412         call move(x1+10,y1+170);\r
413         call outstring("call t(x);");\r
414         call move(x1+10,y1+180);\r
415         call outstring("val:=m;");\r
416         call move(x1+5,y1+190);\r
417         call outstring("end travers;");\r
418 end affiche_cor;\r
419 \r
420 (*************************************************************)\r
421 unit presentation : iiuwgraph procedure;\r
422 begin\r
423         call border(5);\r
424         call color(13);\r
425         call rectangle(115,90,515,120);\r
426         call color(3);\r
427         call move(125,100);\r
428         call outstring("VISUALISATION DES COROUTINES DU PROGRAMME MERGE");\r
429         call move(65,160);\r
430         call outstring("Ce programme utilise les coroutines et fusionne un nombre donn\82");\r
431         call move(65,185);\r
432         call outstring("d'arbres de recherche.");\r
433         call pause;\r
434         call cls;\r
435 end presentation;\r
436 \r
437 (*************************************************************)\r
438 unit menu : iiuwgraph procedure(output chx:integer);\r
439         var b,h,v : integer;\r
440 begin\r
441         pref mouse block\r
442         begin\r
443                 if (driver)\r
444                 then\r
445                         call color(1);\r
446                         call rectangle(20,328,140,348);\r
447                         call move(50,335);\r
448                         call color(15);\r
449                         call outstring("Quitter");\r
450                         call move(170,340);\r
451                         call outstring("Ou cliquer ailleurs pour continuer");\r
452                         call move(400,330);\r
453                         call showcursor;\r
454 \r
455                         do\r
456                                 call getpress(0,h,v,b,gauche,droit,centre);\r
457                                 if gauche\r
458                                 then\r
459                                         call mousepos(h,v,chx);\r
460                                         call hidecursor;\r
461                                         gauche := false;\r
462                                         exit;\r
463                                 fi;\r
464                         od;\r
465                 else\r
466                         call move(150,340);\r
467                         call outstring("SERVEZ-VOUS DE LA SOURIS");\r
468                         call pause;\r
469                         chx := 5;\r
470                         exit;\r
471                 fi;\r
472         end;\r
473 end menu;\r
474 \r
475 (*************************************************************)\r
476 unit menu1 : iiuwgraph procedure(output chx:integer);\r
477         var b,h,v : integer;\r
478 begin\r
479         pref mouse block\r
480         begin\r
481                 if (driver)\r
482                 then\r
483                         call color(13);\r
484                         call style(2);\r
485                         call rectangle(200,160,430,180);\r
486                         call color(3);\r
487                         call move(210,165);\r
488                         call outstring("L'application est termin\82e");\r
489                         call color(1);\r
490                         call rectangle(260,290,380,310);\r
491                         call move(295,297);\r
492                         call color(15);\r
493                         call style(3);\r
494                         call outstring("Quitter");\r
495                         call move(400,330);\r
496                         call showcursor;\r
497 \r
498                         do\r
499                                 call getpress(0,h,v,b,gauche,droit,centre);\r
500                                 if gauche\r
501                                 then\r
502                                         call mousepos(h,v,chx);\r
503                                         call hidecursor;\r
504                                         gauche := false;\r
505                                         exit;\r
506                                 fi;\r
507                         od;\r
508                 else\r
509                         call move(150,340);\r
510                         call outstring("SERVEZ-VOUS DE LA SOURIS");\r
511                         call pause;\r
512                         chx := 5;\r
513                         exit;\r
514                 fi;\r
515         end;\r
516 end menu1;\r
517 \r
518 (*************************************************************)\r
519 unit efface : iiuwgraph procedure;\r
520 begin\r
521         call move(150,340);\r
522         call outstring("                                                    ");\r
523 end efface;\r
524 \r
525 (*************************************************************)\r
526 unit efface_zone : iiuwgraph procedure;\r
527         var cpt : integer;\r
528 begin\r
529         for cpt:=1 to 9\r
530         do\r
531                 call move(231,cpt);\r
532                 call outstring("                              ");\r
533         od;\r
534         for cpt:=5 to 25\r
535         do\r
536                 call move(317,cpt);\r
537                 call outstring("                              ");\r
538         od;\r
539         for cpt:=30 to 160\r
540         do\r
541                 call move(231,cpt);\r
542                 call outstring("                                                  ");\r
543         od;\r
544 end efface_zone;\r
545 \r
546 (*************************************************************)\r
547 unit pause : iiuwgraph procedure;\r
548         var touche : char;\r
549 begin\r
550         pref mouse block;\r
551                 var h,b,v,p : integer,\r
552                         touche : char;\r
553         begin\r
554                 droit := false;\r
555                 driver := init(b);\r
556                 if (driver)\r
557                 then\r
558                         call color(15);\r
559                         call move(150,340);\r
560                         call outstring("Appuyez sur le bouton droit de la souris");\r
561                         call move(400,340);\r
562                         while (not droit)\r
563                         do\r
564                                 call getpress(1,h,v,p,gauche,droit,centre);\r
565                         od;\r
566                         call move(150,340);\r
567                         call outstring("                                                    ");\r
568                         call color(5);\r
569                 else\r
570                         call move(150,340);\r
571                         call outstring("                                                    ");\r
572                         call move(150,340);\r
573                         call outstring("Appuyez sur une touche");\r
574                         read (touche);\r
575                 fi;\r
576         end;\r
577 end pause;\r
578 \r
579 \r
580 unit aff : iiuwgraph procedure(num : integer);\r
581 begin\r
582                 call color(13);\r
583                 call move(260,18);\r
584                 call outstring("tr(");\r
585                 call ecrit(num);\r
586                 call move(310,18);\r
587                 call outstring(")");\r
588                 call move(255,20);\r
589                 call draw(235,20);\r
590                 call move(230,17);\r
591                 call outstring("<");\r
592 end aff;\r
593 \r
594 \r
595 (*************************************************************)\r
596 UNIT NODE : CLASS;\r
597         (* NODE OF BINARY TREE *)\r
598         VAR LEFT,RIGHT : NODE, VAL,tuer : INTEGER; (*SEARCHING KEY *)\r
599 \r
600    UNIT INS : PROCEDURE (VALUE : INTEGER);\r
601         BEGIN\r
602                 IF VAL> VALUE\r
603                 THEN\r
604                         IF LEFT = NONE\r
605                         THEN\r
606                                 LEFT := NEW NODE;\r
607                                 LEFT.VAL := VALUE;\r
608                         ELSE\r
609                                 CALL LEFT.INS(VALUE);\r
610                         FI;\r
611                 ELSE\r
612                         (* ELEMENTS NOT LESS THAN VAL ARE LOCATED IN THE RIGHT SUBTREE *)\r
613                         IF RIGHT = NONE\r
614                         THEN\r
615                                 RIGHT := NEW NODE;\r
616                                 RIGHT.VAL := VALUE;\r
617                         ELSE\r
618                                 CALL RIGHT.INS(VALUE);\r
619                         FI;\r
620                 FI;\r
621         END INS;\r
622 END NODE;\r
623 \r
624 unit reaffiche_boi : iiuwgraph procedure(courant,boite : node,\r
625                                                                                 hmin, hmax, vmax, hauteur : integer);\r
626         var w : integer;\r
627 begin\r
628         if sortir =/= 1\r
629         then\r
630                 IF boite =/= NONE\r
631                 THEN\r
632                         if hauteur > 2\r
633                         then\r
634                                 call efface_zone;\r
635                                 hauteur := 0;\r
636                                 hmin := 240;\r
637                                 hmax := 630;\r
638                                 vmax := 10;\r
639                         fi;\r
640                         w := ((hmin - hmax) / 2) + hmax;\r
641                         call move(w-5,vmax+10);\r
642                         call color(12);\r
643                         call ecrit(boite.val);\r
644                         call color(13);\r
645                         call rectangle(w-10,vmax-4,w+38,vmax+20);\r
646                         call move(w-10,vmax+6);\r
647                         call draw(w+38,vmax+6);\r
648                         call move(w-3,vmax-2);\r
649                         call outstring("DL");\r
650                         call move(w+20,vmax-2);\r
651                         call outstring("SL");\r
652                         call move(w+30,vmax+25);\r
653                         call outstring("t");\r
654                         if hauteur < 2\r
655                         then\r
656                                 call trait(w,vmax);\r
657                         fi;\r
658 \r
659                         if boite = courant\r
660                         then\r
661                                 sortir := 1;\r
662                         else\r
663                                 if boite.tuer = 0\r
664                                 then\r
665                                         CALL reaffiche_boi(courant,boite.left,hmin,w,vmax+60,hauteur+1);\r
666                                 fi;\r
667                                 CALL reaffiche_boi(courant,boite.RIGHT,w,hmax,vmax+60,hauteur+1);\r
668                         fi;\r
669                 fi;\r
670         fi;\r
671 end reaffiche_boi;\r
672 \r
673 unit trait : iiuwgraph procedure(mil,bas : integer);\r
674 begin\r
675         call color(9);\r
676         call move(mil-10,bas+14);\r
677         call draw(mil-60,bas+14);\r
678         call draw(mil-60,bas+50);\r
679         call move(mil-67,bas+45);\r
680         call outstring("\/");\r
681 \r
682         call move(mil+38,bas+14);\r
683         call draw(mil+88,bas+14);\r
684         call draw(mil+88,bas+50);\r
685         call move(mil+81,bas+45);\r
686         call outstring("\/");\r
687 end trait;\r
688 \r
689 unit aff_cor : iiuwgraph procedure(x1,y1,x2,y2 : integer);\r
690 begin\r
691         call color(9);\r
692         call move(x1+220,y1+48);\r
693         call draw(x1+400,y1+5);\r
694         call move(x1+405,y1);\r
695         call outstring(">");\r
696         call color(2);\r
697         call move(x1+400,y1-3);\r
698         call draw(x1+220,y1+3);\r
699         call move(x1+220,y1);\r
700         call outstring("<");\r
701         call color(11);\r
702         call move(x1+450,y1-6);\r
703         call draw(x1+220,y1-6);\r
704         call move(x1+220,y1-9);\r
705         call outstring("<");\r
706         x1 := 10;\r
707         x2 := 230;\r
708         y1 := 10;\r
709         y2 := 210;\r
710         call affiche_cor(x1,y1,x2,y2);\r
711 end aff_cor;\r
712 \r
713 \r
714 (*************************************************************)\r
715 UNIT TRAVERS : iiuwgraph COROUTINE (X :NODE);\r
716         (* CONSECUTIVE ELEMENTS OF TREE NODE ARE LOCATED IN THE GROWING ORDER TO *)\r
717         (* THE "MAIL BOX" VAL AND SENT TO THE ATTACHING UNIT                     *)\r
718         VAR VAL : INTEGER;\r
719         (* ----------------------------------------------------------- *)\r
720         UNIT T : PROCEDURE (Y : NODE, xmin, xmax, ymax, haut : integer);\r
721                 (* RECURSIVE PROCEDURE FOR INFIX TRAVERSION RESULTING TREE ELEMENTS *)\r
722                 (* IN NOT DECREASING ORDER                                           *)\r
723                 var w : integer;\r
724         BEGIN\r
725                 x1 := 10;\r
726                 x2 := 230;\r
727                 y1 := 10;\r
728                 y2 := 210;\r
729                 call color(10);\r
730                 call move(x1+10,y1+55);\r
731                 call outstring("begin");\r
732                 call pause;\r
733                 call affiche_cor(x1,y1,x2,y2);\r
734                 call color(10);\r
735                 call move(x1+15,y1+65);\r
736                 call outstring("if y=/=none");\r
737                 call pause;\r
738                 call affiche_cor(x1,y1,x2,y2);\r
739 \r
740                 IF Y =/= NONE\r
741                 THEN\r
742                         call color(10);\r
743                         call move(x1+15,y1+75);\r
744                         call outstring("then");\r
745                         call pause;\r
746                         if haut > 2\r
747                         then\r
748                                 call efface_zone;\r
749                                 haut := 0;\r
750                                 xmin := 240;\r
751                                 xmax := 630;\r
752                                 ymax := 10;\r
753                         fi;\r
754                         w := ((xmin - xmax) / 2) + xmax;\r
755                         call move(w-5,ymax+10);\r
756                         call color(12);\r
757                         call ecrit(y.val);\r
758                         call color(13);\r
759                         call rectangle(w-10,ymax-4,w+38,ymax+20);\r
760                         call move(w-10,ymax+6);\r
761                         call draw(w+38,ymax+6);\r
762                         call move(w-3,ymax-2);\r
763                         call outstring("DL");\r
764                         call move(w+20,ymax-2);\r
765                         call outstring("SL");\r
766                         call move(w+30,ymax+25);\r
767                         call outstring("t");\r
768                         if haut < 2\r
769                         then\r
770                                 call trait(w,ymax);\r
771                         fi;\r
772 \r
773                         call aff_cor(x1,y1,x2,y2);\r
774                         call color(10);\r
775                         call move(x1+20,y1+85);\r
776                         call outstring("call t(y.left);");\r
777                         call pause;\r
778                         call aff_cor(x1,y1,x2,y2);\r
779                         CALL T(Y.LEFT,xmin,w,ymax+60,haut+1);\r
780                         sortir := 0;\r
781                         call efface_zone;\r
782                         call reaffiche_boi(y,x,240,630,10,0);\r
783                         call color(10);\r
784                         call move(x1+20,y1+95);\r
785                         call outstring("val:=y.val;");\r
786                         call pause;\r
787                         call aff_cor(x1,y1,x2,y2);\r
788                         VAL := Y.VAL;\r
789                         valeur := y.val;\r
790                         call color(10);\r
791                         call move(x1+20,y1+105);\r
792                         call outstring("detach;");\r
793                         call pause;\r
794                         call cls;\r
795                         DETACH;\r
796                         call aff(j);\r
797                         y.tuer := 1;\r
798                         sortir := 0;\r
799                         call reaffiche_boi(y,x,240,630,10,0);\r
800                         call aff_cor(x1,y1,x2,y2);\r
801                         call color(10);\r
802                         call move(x1+20,y1+115);\r
803                         call outstring("call t(y.right);");\r
804                         call pause;\r
805                         call aff_cor(x1,y1,x2,y2);\r
806                         (* CONSECUTIVE ELEMENTS OF TREE Y ARE SENT FOR FURTHER        *)\r
807                         (* PROCESSING TO THE MASTER PROGRAM                           *)\r
808                         CALL T(Y.RIGHT,w,xmax,ymax+60,haut+1);\r
809                 FI;\r
810                 call color(10);\r
811                 call move(x1+15,y1+125);\r
812                 call outstring("fi;");\r
813                 call pause;\r
814                 call affiche_cor(x1,y1,x2,y2);\r
815                 call color(10);\r
816                 call move(x1+10,y1+135);\r
817                 call outstring("end t;");\r
818                 call pause;\r
819                 call affiche_cor(x1,y1,x2,y2);\r
820                 call efface_zone;\r
821         END T;\r
822 \r
823 BEGIN\r
824         x1 := 410;\r
825         x2 := 630;\r
826         y1 := 30;\r
827         y2 := 230;\r
828         call affiche_cor(x1,y1,x2,y2);\r
829         call color(10);\r
830         call move(x1+5,y1+150);\r
831         call outstring("begin");\r
832         call pause;\r
833         call affiche_cor(x1,y1,x2,y2);\r
834         call color(10);\r
835         call move(x1+10,y1+160);\r
836         call outstring("return;");\r
837         call pause;\r
838         call affiche_cor(x1,y1,x2,y2);\r
839         RETURN;\r
840         xmin := 240;\r
841         xmax := 630;\r
842         ymax := 10;\r
843         hmin := 240;\r
844         hmax := 630;\r
845         vmax := 10;\r
846         call aff(i);\r
847         x1 := 10;\r
848         x2 := 230;\r
849         y1 := 10;\r
850         y2 := 210;\r
851 \r
852         call affiche_cor(x1,y1,x2,y2);\r
853         call color(10);\r
854         call move(x1+10,y1+170);\r
855         call outstring("call t(x);");\r
856         call pause;\r
857         call affiche_cor(x1,y1,x2,y2);\r
858         CALL T(X,240,630,10,0);\r
859         call color(10);\r
860         call move(x1+10,y1+180);\r
861         call outstring("val:=m;");\r
862         call pause;\r
863         call affiche_cor(x1,y1,x2,y2);\r
864         VAL := M;\r
865         valeur := m;\r
866         call affiche_cor(x1,y1,x2,y2);\r
867         call pause;\r
868         call color(10);\r
869         call move(x1+5,y1+190);\r
870         call outstring("end travers;");\r
871         call pause;\r
872         call cls;\r
873         call affiche_prg;\r
874         (* VAL IS MAXIMAL VALUE TREATED AS A SENTINEL WHILE ENTIRE TREE IS *)\r
875         (* TRAVESED                                                        *)\r
876 END TRAVERS;\r
877 \r
878 unit saisir : iiuwgraph procedure;\r
879         var cpt, w, z : integer;\r
880 begin\r
881         w := 120;\r
882         z := 0;\r
883         call color(3);\r
884         call move(10,30);\r
885         call outstring(" Les elements de l'arbre sont des entiers");\r
886         call move(10,50);\r
887         call outstring(" Pour terminer l'insertion des elements de l'arbre, tapez 0");\r
888         call move(10,70);\r
889         call outstring(" Ce nombre n'est pas insere dans l'arbre");\r
890         call color(3);\r
891         call move(10,100);\r
892         call outstring(" Donnez la sequence des elements de l'arbre  numero ");\r
893         call ecrit(i);\r
894         call move(10,w);\r
895         for cpt := 1 to borne\r
896         do\r
897                 z := z + 1;\r
898                 if z = 10\r
899                 then\r
900                         w := w + 10;\r
901                         call move(10,w);\r
902                         z := 0;\r
903                 fi;\r
904                 call ecrit(arbre(cpt));\r
905         od;\r
906 end saisir;\r
907 \r
908 unit sequence : iiuwgraph procedure;\r
909         var cpt, w, z : integer;\r
910 begin\r
911         w := 30;\r
912         z := 0;\r
913         call color(3);\r
914         call move(10,10);\r
915         call outstring("La fusion des sequences est : ");\r
916         call move(10,w);\r
917         for cpt := 1 to borne\r
918         do\r
919                 z := z + 1;\r
920                 if z = 10\r
921                 then\r
922                         w := w+10;\r
923                         call move(10,w);\r
924                         z := 0;\r
925                 fi;\r
926                 call ecrit(res(cpt));\r
927         od;\r
928 end sequence;\r
929 \r
930 \r
931 \r
932 (*************************************************************)\r
933         VAR N,I,J,MIN,M,K, choix,x1,x2,y1,y2,valeur,u : INTEGER,\r
934                 h,v,p,abscisse,ordonnee,xmin,xmax,ymax : integer,\r
935                 hmin,hmax,vmax,hauteur,haut,sortir,borne,longueur : integer,\r
936                 driver,droit,gauche,centre : boolean,\r
937                 touche : char,\r
938                 rep : char,\r
939                 arbre,res : arrayof integer,\r
940 \r
941         (* N - TNE NUMBER OF TREES\r
942                 M - MAXIMAL KEY VALUE + 1\r
943                 MIN- MINIMAL VALUE PRODUCED AT A GIVEN MOMENT BY SYSTEM OF COROUTINES*)\r
944                 D : ARRAYOF NODE,\r
945                 TR : ARRAYOF TRAVERS;\r
946 \r
947 BEGIN\r
948         pref iiuwgraph block\r
949         begin\r
950                 abscisse := 0;\r
951                 ordonnee := 30;\r
952                 driver := false;\r
953                 call hpage(0,0,0);\r
954                 call hpage(0,639,349);\r
955                 call gron(0);\r
956                 call presentation;\r
957                 gauche := false;\r
958                 droit := false;\r
959                 centre := false;\r
960                 call border(5);\r
961                 call color(3);\r
962 \r
963                 call cls;\r
964 \r
965                 call affiche_prg;\r
966                 call color(10);\r
967                 call move(10,98);\r
968                 call outstring("begin");\r
969                 call pause;\r
970 \r
971                 DO\r
972                         call affiche_prg;\r
973                         call color(10);\r
974                         call move(20,107);\r
975                         call outstring("writeln('Donnez le nombre d'arbres :');");\r
976                         call pause;\r
977                         call cls;\r
978                         call color(3);\r
979                         call move(10,10);\r
980                         call outstring(" Donnez le nombre d'arbres : ");\r
981                         call pause;\r
982                         call cls;\r
983                         call affiche_prg;\r
984                         call color(10);\r
985                         call move(332,107);\r
986                         call outstring("read(n);");\r
987                         call pause;\r
988                         call cls;\r
989                         call color(3);\r
990                         call move(10,10);\r
991                         call outstring(" Donnez le nombre d'arbres : ");\r
992                         read(N);\r
993                         IF N>0\r
994                         THEN EXIT;\r
995                         ELSE\r
996                                 call move(10,30);\r
997                                 call outstring(" Ce nombre doit etre superieur a 0");\r
998                                 call pause;\r
999                                 call cls;\r
1000                         FI;\r
1001                 OD;\r
1002                 call move(250,10);\r
1003                 call ecrit(N);\r
1004                 call pause;\r
1005                 call cls;\r
1006 \r
1007                 call affiche_prg;\r
1008                 call color(10);\r
1009                 call move(20,116);\r
1010                 call outstring("array d dim(1:n);");\r
1011                 call pause;\r
1012                 ARRAY D DIM(1:N);\r
1013                 call affiche_prg;\r
1014 \r
1015                 x1:=450;\r
1016                 x2:=485;\r
1017                 y1:=30;\r
1018                 y2:=45;\r
1019                 call affiche_abr(x1,y1,x2,y2);\r
1020                 call pause;\r
1021                 call cls;\r
1022 \r
1023                 longueur := 0;\r
1024                 FOR I := 1 TO N\r
1025                 DO\r
1026                         borne := 0;\r
1027                         array arbre dim(1:50);\r
1028                         call affiche_prg;\r
1029                         call color(10);\r
1030                         call move(20,125);\r
1031                         call outstring("for i:=1 to n do");\r
1032                         call pause;\r
1033                         call affiche_prg;\r
1034                         call color(10);\r
1035                         call move(30,134);\r
1036                         call outstring("writeln('Donnez la sequence de l'arbre no :');");\r
1037                         call pause;\r
1038                         call cls;\r
1039                         call saisir;\r
1040                         call pause;\r
1041                         call cls;\r
1042 \r
1043                         do\r
1044                                 call affiche_prg;\r
1045                                 call color(10);\r
1046                                 call move(30,143);\r
1047                                 call outstring("read(j);");\r
1048                                 call pause;\r
1049                                 call cls;\r
1050                                 call saisir;\r
1051                                 call move(10,200);\r
1052                                 read(J);\r
1053                                 if j > 0\r
1054                                 then exit;\r
1055                                 fi;\r
1056                                 call cls;\r
1057                         od;\r
1058                         borne := borne + 1;\r
1059                         arbre(borne) := j;\r
1060                         longueur := longueur + 1;\r
1061                         call saisir;\r
1062                         call pause;\r
1063                         call cls;\r
1064 \r
1065                         call affiche_prg;\r
1066                         call color(10);\r
1067                         call move(102,143);\r
1068                         call outstring("if j>m");\r
1069                         call pause;\r
1070                         IF J>M\r
1071                         THEN\r
1072                                 call affiche_prg;\r
1073                                 call color(10);\r
1074                                 call move(158,143);\r
1075                                 call outstring("then");\r
1076                                 call pause;\r
1077                                 call affiche_prg;\r
1078                                 call color(10);\r
1079                                 call move(198,143);\r
1080                                 call outstring("m:=j");\r
1081                                 call pause;\r
1082                                 M :=J;\r
1083                                 call affiche_prg;\r
1084                                 call color(10);\r
1085                                 call move(238,143);\r
1086                                 call outstring("fi;");\r
1087                                 call pause;\r
1088                         FI;\r
1089 \r
1090                         call affiche_prg;\r
1091                         call color(10);\r
1092                         call move(30,152);\r
1093                         call outstring("d(i):=new node;");\r
1094                         call pause;\r
1095                         D(I) := NEW NODE;\r
1096                         call affiche_prg;\r
1097                         call color(10);\r
1098                         call move(158,152);\r
1099                         call outstring("d(i).val:=j;");\r
1100 \r
1101                         call pause;\r
1102                         D(I).VAL := J;\r
1103 \r
1104                         DO\r
1105                                 call affiche_prg;\r
1106                                 call color(10);\r
1107                                 call move(30,161);\r
1108                                 call outstring("do");\r
1109                                 call pause;\r
1110                                 do\r
1111                                         call affiche_prg;\r
1112                                         call color(10);\r
1113                                         call move(40,170);\r
1114                                         call outstring("read(j);");\r
1115                                         call pause;\r
1116                                         call cls;\r
1117 \r
1118                                         call saisir;\r
1119                                         call move(10,200);\r
1120                                         read(j);\r
1121                                         if j =/= 0\r
1122                                         then\r
1123                                                 borne := borne + 1;\r
1124                                                 arbre(borne) := j;\r
1125                                                 longueur := longueur + 1;\r
1126                                                 call saisir;\r
1127                                                 call pause;\r
1128                                         fi;\r
1129                                         call cls;\r
1130                                         call affiche_prg;\r
1131                                         call color(10);\r
1132                                         call move(112,170);\r
1133                                         call outstring("if j=0");\r
1134                                         call pause;\r
1135                                         IF J = 0\r
1136                                         THEN\r
1137                                                 call affiche_prg;\r
1138                                                 call color(10);\r
1139                                                 call move(168,170);\r
1140                                                 call outstring("then");\r
1141                                                 call pause;\r
1142                                                 call affiche_prg;\r
1143                                                 call color(10);\r
1144                                                 call move(208,170);\r
1145                                                 call outstring("exit");\r
1146                                                 call pause;\r
1147                                                 EXIT exit;\r
1148                                         FI;\r
1149                                         call affiche_prg;\r
1150                                         call color(10);\r
1151                                         call move(248,170);\r
1152                                         call outstring("fi;");\r
1153                                         call pause;\r
1154 \r
1155                                         if j > 0 then exit fi;\r
1156                                 od;\r
1157 \r
1158                                 call affiche_prg;\r
1159                                 call color(10);\r
1160                                 call move(40,179);\r
1161                                 call outstring("if j>m");\r
1162                                 call pause;\r
1163                                 IF J > M\r
1164                                 THEN\r
1165                                         call affiche_prg;\r
1166                                         call color(10);\r
1167                                         call move(96,179);\r
1168                                         call outstring("then");\r
1169                                         call pause;\r
1170                                         call affiche_prg;\r
1171                                         call color(10);\r
1172                                         call move(136,179);\r
1173                                         call outstring("m:=j");\r
1174                                         call pause;\r
1175                                         M := J;\r
1176                                         call affiche_prg;\r
1177                                         call color(10);\r
1178                                         call move(176,179);\r
1179                                         call outstring("fi;");\r
1180                                         call pause;\r
1181                                 FI;\r
1182 \r
1183                                 call affiche_prg;\r
1184                                 call color(10);\r
1185                                 call move(208,179);\r
1186                                 call outstring("call d(i).ins(j);");\r
1187                                 call pause;\r
1188                                 CALL D(I).INS(J);\r
1189                                 call affiche_prg;\r
1190                                 call color(10);\r
1191                                 call move(30,188);\r
1192                                 call outstring("od;");\r
1193                                 call pause;\r
1194                         OD;\r
1195                         call affiche_prg;\r
1196                         call color(10);\r
1197                         call move(20,197);\r
1198                         call outstring("od;");\r
1199                         call pause;\r
1200                         kill(arbre);\r
1201                 OD;\r
1202 \r
1203 \r
1204                 call affiche_prg;\r
1205 \r
1206                 call menu(choix);\r
1207                 if choix = 1\r
1208                 then\r
1209                         call groff;\r
1210                         call endrun;\r
1211                 else\r
1212                         call move(19,327);\r
1213                         for u:=328 to 348\r
1214                         do\r
1215                                 call move(20,u);\r
1216                                 call outstring("                ");\r
1217                         od;\r
1218 \r
1219                         call color(10);\r
1220                         call move(20,206);\r
1221                         call outstring("m:=m+1;");\r
1222                         call pause;\r
1223                         M := M+1;\r
1224                 fi;\r
1225 \r
1226                 call affiche_prg;\r
1227                 call color(10);\r
1228                 call move(84,206);\r
1229                 call outstring("array tr dim(1:n);");\r
1230                 call pause;\r
1231                 ARRAY TR DIM(1:N);\r
1232 \r
1233                 call affiche_prg;\r
1234                 call color(10);\r
1235                 call move(236,206);\r
1236                 call outstring("min:=0;");\r
1237                 call pause;\r
1238                 MIN := 0;\r
1239 \r
1240                 FOR I:=1 TO N DO\r
1241                         call affiche_prg;\r
1242                         call color(10);\r
1243                         call move(20,215);\r
1244                         call outstring("for i:=1 to n do");\r
1245                         call pause;\r
1246 \r
1247                         call affiche_prg;\r
1248                         call color(10);\r
1249                         call move(30,224);\r
1250                         call outstring("tr(i):=new travers(d(i));");\r
1251                         call pause;\r
1252 \r
1253 \r
1254                         call color(13);\r
1255                         call move(580,10);\r
1256                         call outstring("tr(");\r
1257                         call ecrit(i);\r
1258                         call move(630,10);\r
1259                         call outstring(")");\r
1260                         call move(595,22);\r
1261                         call outstring("\/");\r
1262                         call move(602,18);\r
1263                         call draw(602,26);\r
1264 \r
1265                         call color(9);\r
1266                         call move(310,55);\r
1267                         call draw(400,55);\r
1268                         call move(400,52);\r
1269                         call outstring(">");\r
1270 \r
1271                         call color(2);\r
1272                         call move(465,30);\r
1273                         call draw(465,20);\r
1274                         call draw(400,20);\r
1275                         call move(400,17);\r
1276                         call outstring("<");\r
1277 \r
1278                         call color(11);\r
1279                         call move(570,30);\r
1280                         call draw(570,10);\r
1281                         call draw(400,10);\r
1282                         call move(400,7);\r
1283                         call outstring("<");\r
1284                         TR(I) := NEW TRAVERS (D(I));\r
1285                         call affiche_prg;\r
1286 \r
1287 \r
1288                         x1 := 410;\r
1289                         x2 := 630;\r
1290                         y1 := 30;\r
1291                         y2 := 230;\r
1292                         call affiche_cor(x1,y1,x2,y2);\r
1293 \r
1294                         call affiche_prg;\r
1295                         call color(10);\r
1296                         call move(238,224);\r
1297                         call outstring("attach(tr(i));");\r
1298                         call pause;\r
1299                         call cls;\r
1300                         x1 := 10;\r
1301                         x2 := 230;\r
1302                         y1 := 10;\r
1303                         y2 := 210;\r
1304                         call affiche_cor(x1,y1,x2,y2);\r
1305                         ATTACH(TR(I));\r
1306 \r
1307                         call affiche_prg;\r
1308                         call color(10);\r
1309                         call move(20,233);\r
1310                         call outstring("od;");\r
1311                         call pause;\r
1312                 OD;\r
1313 \r
1314                 call affiche_prg;\r
1315 \r
1316                 call menu(choix);\r
1317                 if choix = 1\r
1318                 then\r
1319                         call groff;\r
1320                         call endrun;\r
1321                 else\r
1322                         call move(19,327);\r
1323                         for u:=328 to 348\r
1324                         do\r
1325                                 call move(20,u);\r
1326                                 call outstring("                ");\r
1327                         od;\r
1328 \r
1329                         call color(10);\r
1330                         call move(20,242);\r
1331                         call outstring("writeln('La fusion de la sequence est :');");\r
1332                         call pause;\r
1333                 fi;\r
1334                 call cls;\r
1335 \r
1336                 borne := 0;\r
1337                 array res dim(1:longueur);\r
1338                 call sequence;\r
1339                 call pause;\r
1340                 call cls;\r
1341 \r
1342                 DO\r
1343                         call affiche_prg;\r
1344                         call color(10);\r
1345                         call move(20,251);\r
1346                         call outstring("do");\r
1347                         call pause;\r
1348 \r
1349                         call affiche_prg;\r
1350                         call color(10);\r
1351                         call move(30,260);\r
1352                         call outstring("if min=m");\r
1353                         call pause;\r
1354                         IF MIN = M\r
1355                         THEN\r
1356                                 call affiche_prg;\r
1357                                 call color(10);\r
1358                                 call move(102,260);\r
1359                                 call outstring("then");\r
1360                                 call pause;\r
1361                                 call affiche_prg;\r
1362                                 call color(10);\r
1363                                 call move(142,260);\r
1364                                 call outstring("exit");\r
1365                                 call pause;\r
1366                                 EXIT;\r
1367                         FI;\r
1368                         call affiche_prg;\r
1369                         call color(10);\r
1370                         call move(182,260);\r
1371                         call outstring("fi;");\r
1372                         call pause;\r
1373 \r
1374                         call affiche_prg;\r
1375                         call color(10);\r
1376                         call move(214,260);\r
1377                         call outstring("min:=tr(1).val;");\r
1378                         call pause;\r
1379                         MIN := TR(1).VAL;\r
1380 \r
1381                         call affiche_prg;\r
1382                         call color(10);\r
1383                         call move(342,260);\r
1384                         call outstring("j:=1;");\r
1385                         call pause;\r
1386                         J :=1;\r
1387 \r
1388                         FOR I:= 2 TO N\r
1389                         DO\r
1390                                 call affiche_prg;\r
1391                                 call color(10);\r
1392                                 call move(30,269);\r
1393                                 call outstring("for i:=2 to n do");\r
1394                                 call pause;\r
1395 \r
1396             call affiche_prg;\r
1397                                 call color(10);\r
1398                                 call move(40,278);\r
1399                                 call outstring("if min>tr(i).val");\r
1400                                 call pause;\r
1401                                 IF MIN>TR(I).VAL\r
1402                                 THEN\r
1403                                         call affiche_prg;\r
1404                                         call color(10);\r
1405                                         call move(176,278);\r
1406                                         call outstring("then");\r
1407                                         call pause;\r
1408 \r
1409                                         call affiche_prg;\r
1410                                         call color(10);\r
1411                                         call move(216,278);\r
1412                                         call outstring("min:=tr(i).val;");\r
1413                                         call pause;\r
1414                                         MIN:= TR(I).VAL;\r
1415 \r
1416                                         call affiche_prg;\r
1417                                         call color(10);\r
1418                                         call move(336,278);\r
1419                                         call outstring("j:=i;");\r
1420                                         call pause;\r
1421                                         J := I;\r
1422 \r
1423                                         call affiche_prg;\r
1424                                         call color(10);\r
1425                                         call move(376,278);\r
1426                                         call outstring("fi;");\r
1427                                         call pause;\r
1428                                 FI;\r
1429             call affiche_prg;\r
1430                                 call color(10);\r
1431                                 call move(30,287);\r
1432                                 call outstring("od;");\r
1433                                 call pause;\r
1434                         OD;\r
1435 \r
1436          call affiche_prg;\r
1437                         call color(10);\r
1438                         call move(30,296);\r
1439                         call outstring("if min<m");\r
1440                         call pause;\r
1441                         IF MIN< M\r
1442                         THEN\r
1443                                 call affiche_prg;\r
1444                                 call color(10);\r
1445                                 call move(102,296);\r
1446                                 call outstring("then");\r
1447                                 call pause;\r
1448                                 call affiche_prg;\r
1449                                 call color(10);\r
1450                                 call move(142,296);\r
1451                                 call outstring("write(min);");\r
1452                                 call pause;\r
1453                                 call cls;\r
1454 \r
1455                                 borne := borne + 1;\r
1456                                 res(borne) := min;\r
1457 \r
1458                                 call sequence;\r
1459                                 call pause;\r
1460                                 call cls;\r
1461 \r
1462                                 call affiche_prg;\r
1463                                 call color(10);\r
1464                                 call move(236,296);\r
1465                                 call outstring("attach(tr(j));");\r
1466                                 call pause;\r
1467                                 call cls;\r
1468 \r
1469                                 call affiche_cor(x1,y1,x2,y2);\r
1470                                 ATTACH(TR(J));\r
1471 \r
1472                                 call affiche_prg;\r
1473                                 call color(10);\r
1474                                 call move(358,296);\r
1475                                 call outstring("fi;");\r
1476                                 call pause;\r
1477                         FI;\r
1478          call affiche_prg;\r
1479                         call color(10);\r
1480                         call move(20,305);\r
1481                         call outstring("od;");\r
1482                         call pause;\r
1483                 OD;\r
1484 \r
1485                 call affiche_prg;\r
1486                 call color(10);\r
1487                 call move(10,314);\r
1488                 call outstring("end merge.");\r
1489                 call pause;\r
1490                 call cls;\r
1491 \r
1492                 call menu1(choix);\r
1493                 do\r
1494                         case choix\r
1495                         when 2 :\r
1496                                 call groff;\r
1497                                 call endrun;\r
1498                         esac;\r
1499                         call menu1(choix);\r
1500                 od;\r
1501         end;\r
1502 END\r