Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / loglan96 / loglan84.rs / antek4.txt
1 From:   MX%"antek@mimuw.edu.pl"  1-MAR-1993 16:00:42.56\r
2 To:     SALWICKI\r
3 CC:     \r
4 Subj:   \r
5 \r
6 Date: Mon, 1 Mar 93 14:59:41 GMT\r
7 From: antek@mimuw.edu.pl\r
8 To: salwicki@pauvx1.univ-pau.fr\r
9 \r
10 /*\r
11 \r
12 program mergecor;\r
13  unit node: class;\r
14    var left,right : node,\r
15        val :        integer;\r
16 \r
17    unit ins: procedure( value: integer) ;\r
18    begin\r
19      if val > value\r
20      then\r
21        if left=none\r
22        then\r
23          left:=new node;\r
24          left.val:=value;\r
25        else\r
26          call left.ins(value);\r
27        fi;\r
28      else\r
29        if right = none\r
30        then\r
31          right:=new node;\r
32          right.val:=value;\r
33        else\r
34          call right.ins(value)\r
35        fi;\r
36      fi;\r
37    end ins;\r
38 \r
39  end node;\r
40 \r
41  unit traverse : coroutine (i:integer);\r
42    var val: integer,\r
43          x: node;\r
44 \r
45    unit t: procedure(y:node);\r
46    begin\r
47      if y=/=none\r
48      then\r
49        call t(y.left);\r
50        val:=y.val;\r
51        detach;\r
52        call t(y.right);\r
53      fi;\r
54    end t;\r
55  begin\r
56    x:=d(i);\r
57    return;\r
58    call t(x);\r
59    detach with endtree(i);\r
60  end traverse;\r
61  signal endtree(t:integer),fin ;\r
62 \r
63  var n,i,j,min,m,k: integer,\r
64      d:             arrayof node,\r
65      tr:            arrayof traverse,\r
66      bb:            integer;\r
67   exceptions\r
68    when endtree:\r
69     if bb=1\r
70     then\r
71       raise fin\r
72     fi;\r
73     bb:=1;\r
74     if t=1\r
75     then\r
76      j:=2\r
77     else\r
78      j:=1\r
79     fi;\r
80     do\r
81       write(tr(j).val); writeln;\r
82       attach(tr(j))\r
83     od;\r
84   when fin : terminate;\r
85  begin\r
86    read(n);\r
87    array d dim(1:n);\r
88    for i:=1 to n\r
89    do\r
90      read(j); write(j); if j>m then m:=j fi;\r
91      d(i):=new node;\r
92      d(i).val:=j;\r
93      do\r
94        read(j);\r
95        if j=-1 then writeln; exit fi;\r
96        write(j);\r
97        if j>m then m:=j fi;\r
98        call d(i).ins(j)\r
99      od;\r
100    od;\r
101    array tr dim (1:n);\r
102    min:=0;\r
103    for i:=1 to n\r
104    do\r
105      tr(i):=new traverse(i);\r
106      attach(tr(i));\r
107    od;\r
108    k:=0;\r
109    do\r
110      min:=tr(1).val;\r
111      j:=1;\r
112      for i:=2 to n\r
113      do\r
114        if min > tr(i).val then min:=tr(i).val; j:=i fi;\r
115      od;\r
116      write(min); attach(tr(j));\r
117      k:=k+1;  if k=10 then writeln; k:=0 fi;\r
118    od;\r
119    writeln;\r
120  end mergecor\r
121 \r
122 */\r
123 \r
124 \r
125 \r
126 \r
127 #include "rsdata.h"\r
128 \r
129 \r
130 extern  int IC;                                 /* global control */\r
131 extern  int modulenumber;                       /* module number */\r
132 extern  unsigned int *DISPVIRT,*DISPDIR;        /* displays' addresses */\r
133 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
134 extern  unsigned int *current,*local,*global;\r
135 \r
136 #define numprot 8\r
137 \r
138 \r
139    int displ= -6;\r
140    int displdir = -15;\r
141    int curr= -8;\r
142    int lstcor= -10;\r
143    int chead = -12;\r
144    int protnum=numprot;\r
145    int offnum=4;\r
146 \r
147     int perm []    =  { 0,1,2};\r
148     int perminv [] =  { 0,1,2};\r
149 \r
150     struct Prototype PROT [] =\r
151 /*\r
152 kind num lspn rspn ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref pslen */\r
153 {\r
154 {2, 0,   15,  27,   0, -1,  0,  7,   0,  27, 26, 25, 24, 0,  -1,   1},\r
155 {0, 1,   0,    9,   1,  0,  1,  2,   0,   9,  8, 7,  6, -1,  -1,   1},\r
156 {1, 2,   0,    9,   2,  1,  2,  6,   0,   9,  8, 7,  6, -1,  -1,   1},\r
157 {3, 3,   1,    9,   3,  0,  1,  4,   0,   9,  8, 7,  6, -1,  -1,   1},\r
158 {1, 4,   0,    9,   4,  3,  2,  5,   0,   9,  8, 7,  6, -1,  -1,   1},\r
159 {7, 5},\r
160 {4, 6,   0,    9,   1,  0,  1,  4,   0,   9,  8, 7,  6,  0},\r
161 {4, 7,   0,    9,   1,  0,  1,  2,   0,   9,  8, 7,  6,  0}\r
162 };\r
163 \r
164 \r
165    int (* module [numprot]) () ;\r
166    jmp_buf buffer;\r
167 \r
168      struct Offsets OFF[]=\r
169     { 0, 43, 0, 11, 0,  0, 0,\r
170       0, 10, 1,  2, 0, 11, 0,\r
171       0, 10, 2,  3, 0, 13, 0,\r
172       0, 10, 3,  4, 0, 16, 0,\r
173       0, 10, 4,  4, 0, 20, 0 };\r
174 \r
175      struct Elem EL[]=\r
176     { 7,  1, 0,\r
177       9,  2, 0,\r
178      16,  3, 0,\r
179      -6,  4, 0,\r
180      -4,  5, 0,\r
181      -2,  6, 0,\r
182      -8,  7, 0,\r
183     -10,  8, 0,\r
184     -12,  9, 0,\r
185      26, 10, 1,\r
186      27, -1, 2,\r
187       1, 12, 0,\r
188       3, -1, 0,\r
189       2, 14, 0,\r
190       8, 15, 1,\r
191       9, -1, 2,\r
192       1, 17, 0,\r
193       4, 18, 0,\r
194       8, 19, 1,\r
195       9, -1, 2,\r
196       1, 21, 0,\r
197       3, 22, 0,\r
198       8, 23, 1,\r
199       9, -1, 2};\r
200 \r
201 \r
202      struct Hlstelem HL[]= { 6,0,1,\r
203                              7,1,-1 };\r
204      struct Sgelem SL[]= { 101,-1,\r
205                           102, -1 };\r
206 \r
207 \r
208 \r
209 node()\r
210 { switch(IC)\r
211   {\r
212     case 1:  goto L1; break;\r
213     case 2:  goto L2; break;\r
214   };\r
215 L1:  Endclass();\r
216 L2:  Killafter();\r
217      Endclass();\r
218 }\r
219 \r
220 \r
221 ins()\r
222 { switch(IC)\r
223   {\r
224     case 1:  goto L1; break;\r
225     case 2:  goto L2; break;\r
226     case 3:  goto L3; break;\r
227     case 4:  goto L4; break;\r
228     case 5:  goto L5; break;\r
229     case 6:  goto L6; break;\r
230   };\r
231 \r
232 L1:\r
233  if (*Address(1,5) > *Local(1))\r
234  {\r
235   if (Notmember(Address(1,1)))\r
236   {\r
237     Dopen(1,0,Address(1,1));\r
238     IC=2;  Go(Address(1,1));\r
239 L2:\r
240     *(Physical(Address(1,1))+5)= *Local(1);\r
241   }\r
242   else\r
243   {\r
244     Slopen(2,Local(2),Address(1,1));\r
245     *(Physical(Local(2))+1)= *Local(1);\r
246     IC=3; Go(Local(2));\r
247 L3: Killafter() ;\r
248   };\r
249  }\r
250  else\r
251  {\r
252   if (Notmember(Address(1,3)))\r
253   {\r
254     Dopen(1,0,Address(1,3));\r
255     IC=4; Go(Address(1,3));\r
256 L4:  *(Physical(Address(1,3))+5)= *Local(1);\r
257   }\r
258   else\r
259   {\r
260     Slopen(2,Local(2),Address(1,3));\r
261     *(Physical(Local(2))+1)= *Local(1);\r
262     IC=5; Go(Local(2));\r
263 L5: Killafter();\r
264   };\r
265  };\r
266  Back();\r
267 L6: Killafter();\r
268    Back();\r
269 }\r
270 \r
271 \r
272 \r
273 \r
274 trav()\r
275 { switch(IC)\r
276   {\r
277     case 1:  goto L1; break;\r
278     case 2:  goto L2; break;\r
279     case 3:  goto L3; break;\r
280     case 4:  goto L4; break;\r
281   };\r
282 L1:  Refmove(Local(1),Arrayelem(Global(7),*Local(-1)));\r
283      IC=2; Back();\r
284 L2:  Dopen(4,3,Local(4));\r
285      Refmove(Physical(Local(4))+1,Local(1));\r
286      IC=3;    Go(Local(4));\r
287 L3:  Killafter();\r
288      Attachwith(lastcor,101,Local(4));\r
289      *(Physical(Local(4))+5)= *Local(-1);\r
290      Attach(lastcor);\r
291      Endcor();\r
292 L4:  Killafter();\r
293      Endcor();\r
294 }\r
295 \r
296 t()\r
297 { switch(IC)\r
298   {\r
299     case 1:  goto L1; break;\r
300     case 2:  goto L2; break;\r
301     case 3:  goto L3; break;\r
302     case 4:  goto L4; break;\r
303     case 5:  goto L5; break;\r
304   };\r
305 L1:\r
306  if (Member(Local(1)))\r
307   { Dopen(4,3,Local(3));\r
308     Refmove(Physical(Local(3))+1,Physical(Local(1))+1);\r
309     IC=2;  Go(Local(3));\r
310 L2: Killafter();\r
311     *Address(1,3)= *(Physical(Local(1))+5);\r
312     IC=3; Attach(lastcor);\r
313 L3: Dopen(4,3,Local(3));\r
314     Refmove(Physical(Local(3))+1,Physical(Local(1))+3);\r
315     IC=4;  Go(Local(3));\r
316 L4: Killafter();\r
317    };\r
318   Back();\r
319 L5: Killafter();\r
320   Back();\r
321 }\r
322 \r
323 \r
324 \r
325 merge()\r
326 \r
327 { switch(IC)\r
328   {\r
329     case 1:  goto L1; break;\r
330     case 2:  goto L2; break;\r
331     case 3:  goto L3; break;\r
332     case 4:  goto L4; break;\r
333     case 5:  goto L5; break;\r
334     case 6:  goto L6; break;\r
335     case 7:  goto L7; break;\r
336   };\r
337 \r
338 L1:\r
339   printf("Number of trees n=2\n"); *Global(1)=2;\r
340   Openarray(5,1,*Global(1),Global(7));\r
341   printf("Give the values of nodes. End each tree with -1\n");\r
342   *Global(2)=1;\r
343   while (1)\r
344    {\r
345      if (*Global(2)> *Global(1)) break;\r
346      scanf("%d",Global(3));\r
347      if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
348      Dopen(1,0,Arrayelem(Global(7),*Global(2)));\r
349      IC=2; Go(Arrayelem(Global(7),*Global(2)));\r
350 L2:  *(Physical(Arrayelem(Global(7),*Global(2)))+5)= *Global(3);\r
351      while(1)\r
352       {\r
353         scanf("%d",Global(3));\r
354         if (*Global(3) == -1) break;\r
355         if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
356         Slopen(2,Global(16),Arrayelem(Global(7),*Global(2)));\r
357         *(Physical(Global(16))+1)= *Global(3);\r
358         IC=3; Go(Global(16));\r
359 L3:     Killafter();\r
360       };\r
361       (*Global(2))++;\r
362    };\r
363    (*Global(5))++;\r
364    Openarray(5,1,*Global(1),Global(9));\r
365    *Global(4)=0;\r
366    *Global(2)=1;\r
367    while(1)\r
368     { if (*Global(2) > *Global(1)) break;\r
369       Dopen(3,0,Arrayelem(Global(9),*Global(2)));\r
370       *(Physical(Arrayelem(Global(9),*Global(2)))-1)=\r
371          *Global(2);\r
372       IC=4;  Go(Arrayelem(Global(9),*Global(2)));\r
373 L4:   IC=5;  Attach(Arrayelem(Global(9),*Global(2)));\r
374 L5:   (*Global(2))++;\r
375     };\r
376    *Global(6)=0;\r
377    while(1)\r
378    {\r
379     if (*Global(4) == *Global(5) ) break;\r
380     *Global(4)= *(Physical(Arrayelem(Global(9),1))+3);\r
381     *Global(3)=1;\r
382     *Global(2)=2;\r
383     while (1)\r
384     {\r
385      if (*Global(2) > *Global(1))  break;\r
386      if (*Global(4) >  *(Physical(Arrayelem(Global(9),*Global(2)))+3))\r
387        { *Global(4) =   *(Physical(Arrayelem(Global(9),*Global(2)))+3);\r
388           *Global(3)= *Global(2);\r
389        };\r
390      (*Global(2))++;\r
391     };\r
392     if (*Global(4) < *Global(5))\r
393     {\r
394       printf("%d  ",*Global(4));\r
395       IC=6;   Attach(Arrayelem(Global(9),*Global(3)));\r
396 L6:   (*Global(6))++;\r
397       if (*Global(6)==10) { printf("  \n"); *Global(6)=0; };\r
398     };\r
399    };\r
400    Endrun();\r
401 \r
402 L7: Killafter();\r
403     Endrun();\r
404  }\r
405 \r
406 \r
407 endtree()\r
408 {\r
409    switch(IC)\r
410   {\r
411     case 1:  goto L1; break;\r
412     case 2:  goto L2; break;\r
413     case 3:  goto L3; break;\r
414     case 4:  goto L4; break;\r
415   };\r
416 L1:\r
417     if (*Global(18))\r
418    { Raising(102,Address(1,1));\r
419     IC=2; Go(Address(1,1));\r
420 L2: ;\r
421    };\r
422    *Global(18)= 1;\r
423    if (*Address(1,5)==1) *Global(3)=2; else *Global(3)=1;\r
424    while(1)\r
425   { if (IC==0) break; /* dummy */\r
426     printf("%d  ",*(Physical(Arrayelem(Global(9),*Global(3)))+3));\r
427     (*Global(6))++;\r
428     if (*Global(6)==10) { printf("  \n"); *Global(6)=0; };\r
429     IC=3;   Attach(Arrayelem(Global(9),*Global(3)));\r
430 L3: ;\r
431    };\r
432   Back();\r
433 L4: Killafter();\r
434   Back();\r
435 }\r
436 \r
437 fin()\r
438 { switch(IC)\r
439   {\r
440     case 1:  goto L1; break;\r
441     case 2:  goto L2; break;\r
442   };\r
443 L1:\r
444      Termination();\r
445      Back();\r
446 L2:  Killafter();\r
447      Back();\r
448 }\r
449 \r
450 \r
451 main ()\r
452 {\r
453   Init();\r
454   module[0]=merge;\r
455   module[1]=node;\r
456   module[2]=ins;\r
457   module[3]=trav;\r
458   module[4]=t;\r
459   module[6]=endtree;\r
460   module[7]=fin;\r
461   IC=1;\r
462   modulenumber=0;\r
463   if (setjmp(buffer)!=-2) module[modulenumber]();\r
464 }\r
465 \r
466 \1a/*\r
467 \r
468 program pawel;\r
469   var n,m;\r
470 \r
471  unit F: procedure;\r
472    var i: integer;\r
473  begin\r
474    if m=n+1\r
475    then\r
476      for i:=1 to n do write(A[i],"  "); od;\r
477      writeln;\r
478    else\r
479      for i:=1 to n\r
480      do\r
481        if A[i]=0\r
482        then\r
483          A[i]:=m;  m:=m+1;\r
484          F;\r
485          m:=m-1; A[i]:=0;\r
486        fi;\r
487      od;\r
488    fi;\r
489  end F;\r
490 \r
491 begin\r
492   write("Generation of all permutations. Give n=");\r
493   read(n); writeln;\r
494   A:=array[1..n] of integer;\r
495   m:=1;\r
496   F;\r
497 end\r
498 \r
499 */\r
500 \r
501 #include "rsdata.h"\r
502 \r
503 \r
504 \r
505 extern  int IC;                                 /* global control */\r
506 extern  int modulenumber;                       /* module number */\r
507 extern  unsigned int *DISPVIRT,*DISPDIR;        /* displays' addresses */\r
508 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
509 extern  unsigned int *current,*local,*global;\r
510 \r
511 \r
512 #define numprot 3\r
513 \r
514 \r
515    int displ= 5;\r
516    int displdir = 9;\r
517    int curr= 11;\r
518    int lstcor= 13;\r
519    int chead =15;\r
520    int offnum = 1;\r
521    int protnum= numprot;\r
522 \r
523 \r
524     int perm []    =  { 0,0,1};\r
525     int perminv [] =  { 0,0,1};\r
526 \r
527     struct Prototype PROT [] =\r
528 /*\r
529 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref  pslen*/\r
530 {\r
531 {2, 0,   0,   27,   0, -1,  0,  0,   0,  27, 26, 25, 24,  -1,  -1,  1},\r
532 {1, 1,   0,    9,   1,  0,  1,  0,   1,   9,  8, 7,  6,   -1,  -1,  1},\r
533 {6, 2,   1}\r
534 };\r
535 \r
536 \r
537    int (* module [numprot]) ();\r
538    jmp_buf buffer;\r
539 \r
540      struct Offsets OFF[]=\r
541     { 0, 28, 0, 9, 0, 0, 0,\r
542       0, 10, 1, 2, 0, 9, 0 };\r
543 \r
544      struct Elem EL[]=\r
545     { 3,  1, 0,\r
546       5,  2, 0,\r
547       7,  3, 0,\r
548       11, 4, 0,\r
549       13, 5, 0,\r
550       15, 6, 0,\r
551       17, 7, 0,\r
552       26, 8, 1,\r
553       27, -1,2,\r
554       8, 10, 1,\r
555       9, -1, 2 };\r
556 \r
557      struct Hlstelem HL[]= { 0 };\r
558      struct Sgelem SL[]= { 0 };\r
559 \r
560 \r
561 \r
562 int pawel()\r
563 {\r
564   switch (IC)\r
565   { case 1: goto L1; break;\r
566     case 2: goto L2; break;\r
567   };\r
568 \r
569 \r
570  L1: printf("Generation of all permutations. Give n=");\r
571      scanf("%d",Global(1));\r
572      printf("  \n");\r
573      Openarray(2,1,*Global(1),Global(3));\r
574      { int i;\r
575        for (i=1; i<= *Global(1); i++)\r
576        *Arrayelem(Global(3),i)=0;\r
577      };\r
578      *Global(2)=1;\r
579      Dopen(1,0,Global(17)); IC=2;\r
580      Go(Global(17));\r
581  L2: Killafter();\r
582      Endrun();\r
583 }\r
584 \r
585 int F()\r
586 {\r
587    switch (IC)\r
588   { case 1: goto L1; break;\r
589     case 2: goto L2; break;\r
590   };\r
591 \r
592 \r
593 L1:\r
594   if (*Global(2)== *Global(1)+1)\r
595    { int i;\r
596      for (i=1; i<= *Global(1); i++)\r
597        printf("%d  ",*(Arrayelem(Global(3),i)));\r
598      printf("  \n");\r
599    }\r
600   else\r
601 \r
602    {int i;\r
603      for (i=1; i<= *Global(1);i++)\r
604      {\r
605        if (*(Arrayelem(Global(3),i))==0)\r
606        {\r
607          *(Arrayelem(Global(3),i))= *Global(2);\r
608          (*Global(2))++;\r
609          Dopen(1,0,Global(17));  *Local(1)=i;\r
610          IC=2; Go(Global(17));\r
611  L2:     Killafter();\r
612          (*Global(2))--;  i= *Local(1);\r
613          *(Arrayelem(Global(3),i))=0;\r
614        };\r
615      };\r
616    };\r
617    Back();\r
618  }\r
619 \r
620 \r
621 \r
622 main ()\r
623 {\r
624   Init();\r
625   module[0]=pawel;\r
626   module[1]=F;\r
627   IC=1;\r
628   modulenumber=0;\r
629   if (setjmp(buffer) !=-2)  module[modulenumber]();\r
630 }\r
631 \r
632 \1a/*\r
633 \r
634 program square;\r
635  var a,b,c,delta,x1,x2:real;\r
636 begin\r
637   writeln(" solution of square equation a*x**2 b*x +c=0");\r
638   write(" give a= "); read(a);\r
639   write(" give b= "); read(b);\r
640   write(" give c= "); read(c);\r
641   delta:=b**2 - 4*a*c;\r
642   if delta < 0\r
643   then\r
644     writeln(" no solutions"); endrun;\r
645   fi;\r
646   delta:=sqrt(delta);\r
647   x1:=(-b-delta)/2/a;\r
648   x2:=(-b+delta)/2/a;\r
649   writeln("x1=",x1,"x2=",x2);\r
650 end\r
651   */\r
652 \r
653 #include <math.h>\r
654 #include "rsdata.h"\r
655 \r
656 \r
657 \r
658 extern  int IC;                                 /* global control */\r
659 extern  int modulenumber;                       /* module number */\r
660 extern  unsigned int *DISPVIRT,*DISPDIR;        /* displays' addresses */\r
661 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
662 extern  unsigned int *current,*local,*global;\r
663 \r
664 \r
665 #define numprot 1\r
666 \r
667 #define rlh sizeof(float)/sizeof(int)\r
668 \r
669 #define aoff 1\r
670 #define boff 1+rlh\r
671 #define coff 1+2*rlh\r
672 #define deloff 1+3*rlh\r
673 #define x1off 1+4*rlh\r
674 #define x2off 1+5*rlh\r
675 \r
676 \r
677    int displ=15;\r
678    int displdir =17;\r
679    int curr= 18;\r
680    int lstcor= 20;\r
681    int chead =22;\r
682    int offnum = 1;\r
683    int protnum= numprot;\r
684 \r
685 \r
686     int perm []    =  { 0,0,1};\r
687     int perminv [] =  { 0,0,1};\r
688 \r
689     struct Prototype PROT [] =\r
690 /*\r
691 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref  pslen*/\r
692 {\r
693 {2, 0,   0,   27,   0, -1,  0,  0,   0,  27, 26, 25, 24,  -1,  -1,  1}\r
694 };\r
695 \r
696 \r
697    int (* module [numprot+1]) () ;\r
698    jmp_buf buffer;\r
699 \r
700      struct Offsets OFF[]=\r
701     { 0, 28, 0, 6, 0, 0, 0 };\r
702 \r
703      struct Elem EL[]=\r
704     {\r
705       15, 1, 0,\r
706       18, 2, 0,\r
707       20, 3, 0,\r
708       22, 4, 0,\r
709       26, 5, 1,\r
710       27, -1,2,\r
711      };\r
712 \r
713      struct Hlstelem HL[]= { 0 };\r
714      struct Sgelem SL[]= { 0 };\r
715 \r
716 \r
717 \r
718 int square()\r
719 {\r
720 \r
721   switch (IC)\r
722   { case 1: goto L1; break;\r
723     case 2: goto L2; break;\r
724   };\r
725 \r
726  L1: printf(" solution of square equation a*x**2 + b*x +c=0\n");\r
727      printf(" \ngive a=");\r
728      scanf("%f",  Flglobal(aoff));\r
729      printf(" \ngive b=");\r
730      scanf("%f",  Flglobal(boff));\r
731      printf(" \ngive c=");\r
732      scanf("%f",   Flglobal(coff));\r
733      *  Flglobal(deloff) =\r
734         (*  Flglobal(boff))*(*  Flglobal(boff))-\r
735          4*(* Flglobal(aoff))*(* Flglobal(coff));\r
736      if ( *  Flglobal(deloff) < 0 )\r
737        {\r
738          printf(" no solutions\n");\r
739          Endrun();\r
740        };\r
741      *  Flglobal(deloff) = sqrt( (double) *  Flglobal(deloff) );\r
742      *  Flglobal(x1off) = (- *  Flglobal(boff) -\r
743                   *   Flglobal(deloff))/2/ *  Flglobal(aoff);\r
744 \r
745      *  Flglobal(x2off) = (- *  Flglobal(boff) +\r
746                   *   Flglobal(deloff))/2/ *  Flglobal(aoff);\r
747      printf(" \n x1=%f\n",*  Flglobal(x1off));\r
748      printf(" \n x2=%f\n",*  Flglobal(x2off));\r
749  L2: Endrun();\r
750 }\r
751 \r
752 main ()\r
753 { Init();\r
754   module[0]=square;\r
755   IC=1;\r
756   IC=1;\r
757   modulenumber=0;\r
758   if (setjmp(buffer) !=-2)  module[modulenumber]();\r
759 }\r
760 \r
761 \1a/*\r
762 \r
763 program functest;\r
764   type F: function(n:integer): integer;\r
765 \r
766   unit f : function(n:integer):F;\r
767 \r
768     unit h:F;\r
769     begin\r
770       result:=n*2;\r
771     end h;\r
772 \r
773     unit g:F;\r
774     begin\r
775       result:=n+2;\r
776     end g;\r
777 \r
778   begin\r
779     if n=0 then result=h else result:=g fi;\r
780   end f;\r
781 \r
782   var x,y :F; n:integer;\r
783 \r
784 begin\r
785   x:=f(0); y:=f(1);\r
786   write("n="); readln(n); writeln(x(n));\r
787   write("m="); readln(n); writeln(y(n));\r
788 end\r
789 \r
790 */\r
791 \r
792 #include "rsdata.h"\r
793 \r
794 \r
795 \r
796 extern  int IC;                                 /* global control */\r
797 extern  int modulenumber;                       /* module number */\r
798 extern  unsigned int *DISPLAY,*DISPDIR;         /* displays' addresses */\r
799 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
800 extern  unsigned int *current,*local,*global;\r
801 \r
802 #define numprot 4\r
803 \r
804 \r
805    int displ= -9;\r
806    int displdir = 20;\r
807    int curr= -11;\r
808    int lstcor= -13;\r
809    int chead = -15;\r
810    int protnum=numprot;\r
811    int offnum=3;\r
812 \r
813     int perm []    =  { 0,1,2};\r
814     int perminv [] =  { 0,1,2};\r
815 \r
816     struct Prototype PROT [] =\r
817 /*\r
818 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref pslen */\r
819 {\r
820 {2, 0,   15,  27,   0, -1,   0,  0,  0,  27, 26, 25, 24,  -1,  -1,  1},\r
821 {1, 1,   0,    9,   1,  0,   1,  0,  0,   9,  8, 7,  6,   -1,  -1,  1},\r
822 {1, 2,   0,    9,   2,  1,   2,  0,  0,   9,  8, 7,  6,   -1,  -1,  1},\r
823 {1, 3,   0,    9,   2,  1,   2,  0,  0,   9,  8, 7,  6,   -1,  -1,  1}\r
824 };\r
825 \r
826 \r
827    int (* module [numprot]) () ;\r
828    jmp_buf buffer;\r
829 \r
830      struct Offsets OFF[]=\r
831     { 0, 43, 0, 11, 0,  0, 0,\r
832       0, 10, 1,  3, 0, 11, 0,\r
833       0, 10, 2,  2, 0, 14, 0,\r
834      };\r
835 \r
836      struct Elem EL[]=\r
837     { 7,  1, 2,\r
838       9,  2, 2,\r
839      16,  3, 0,\r
840      -9,  4, 0,\r
841      -7,  5, 0,\r
842      -5,  6, 0,\r
843     -11,  7, 0,\r
844     -13,  8, 0,\r
845     -15,  9, 0,\r
846      26, 10, 1,\r
847      27, -1, 2,\r
848       2, 12, 2,\r
849       8, 13, 1,\r
850       9, -1, 2,\r
851       8, 15, 1,\r
852       9, -1, 2\r
853      };\r
854 \r
855      struct Hlstelem HL[]= { 0 };\r
856      struct Sgelem SL[]= { 0 };\r
857 \r
858 \r
859 procclostest()\r
860  {\r
861   switch(IC)\r
862   { case 1: goto L1; break;\r
863     case 2: goto L2; break;\r
864     case 3: goto L3; break;\r
865     case 4: goto L4; break;\r
866     case 5: goto L5; break;\r
867 \r
868   };\r
869 L1: Dopen(1,0,Global(16));\r
870     *(Physical(Global(16))+1)= 0;\r
871     IC=2;Go(Global(16));\r
872 L2: Procclosmove(Global(7), Physical(Global(16))+2);\r
873     Killafter();\r
874     Dopen(1,0,Global(16));\r
875     *(Physical(Global(16))+1)= 1;\r
876     IC=3;Go(Global(16));\r
877 L3: Procclosmove(Global(9), Physical(Global(16))+2);\r
878     Killafter();\r
879     printf("n=");\r
880     scanf("%d",Global(6));\r
881     Slopen(*Global(8),Global(16),Global(7));\r
882     *(Physical(Global(16))+1)= *Global(6);\r
883     IC=4;Go(Global(16));\r
884 L4: printf("%d\n",*(Physical(Global(16))+2));\r
885     Killafter();\r
886     printf("m=");\r
887     scanf("%d",Global(6));\r
888     Slopen(*Global(10),Global(16),Global(9));\r
889     *(Physical(Global(16))+1)= *Global(6);\r
890     IC=5;Go(Global(16));\r
891 L5: printf("%d\n",*(Physical(Global(16))+2));\r
892     Killafter();\r
893     Endrun();\r
894 }\r
895 \r
896 \r
897 f()\r
898 {\r
899    if ( *Local(1) == 0)\r
900     {\r
901       *Local(2) = *current;\r
902       *Local(3) = 2;\r
903     }\r
904     else\r
905     {\r
906       *Local(2) = *current;\r
907       *Local(3) = 3;\r
908     };\r
909     Back();\r
910 }\r
911 \r
912 \r
913 \r
914 h()\r
915 {\r
916     *Local(2) = *Local(1) * 2;\r
917     Back();\r
918 }\r
919 \r
920 g()\r
921 {\r
922     *Local(2) = *Local(1) +2;\r
923     Back();\r
924 }\r
925 \r
926 \r
927 main ()\r
928 {\r
929     Init();\r
930     module[0]=procclostest;\r
931     module[1]=f;\r
932     module[2]=h;\r
933     module[3]=g;\r
934     IC=1;\r
935     modulenumber=0;\r
936     if (setjmp(buffer)!=-2)  module[modulenumber]();\r
937  }\r
938 \1a/*\r
939 \r
940 program MEMORYTEST;\r
941 var i,j,k,n:   integer,\r
942       X,Y:       A,\r
943       Z:         arrayof A;\r
944   unit A: class;\r
945     var P: arrayof A;\r
946   begin\r
947     array P dim(1:j);\r
948   end A;\r
949 begin\r
950   i:=0;\r
951   read(n);  read(k);\r
952   for j:=1 to n\r
953   do\r
954     X:=new A;  i:=i+1;\r
955     if i=k\r
956     then\r
957       Z:=Y.P;\r
958       kill(Y); kill(Z);\r
959       i:=0;\r
960     fi;\r
961     Y:=X;\r
962   od;\r
963 end\r
964 \r
965 */\r
966 \r
967 \r
968 #include "rsdata.h"\r
969 \r
970 \r
971 extern  int IC;                                 /* global control */\r
972 extern  int modulenumber;                       /* module number */\r
973 extern  unsigned int *DISPVIRT,*DISPDIR;        /* displays' addresses */\r
974 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
975 extern  unsigned int *current,*local,*global;\r
976 \r
977 \r
978 #define numprot 3\r
979 \r
980 \r
981 \r
982    int displdir = 15;\r
983    int displ= 11;\r
984    int curr= 17;\r
985    int lstcor= 19;\r
986    int chead =21;\r
987    int protnum=numprot;\r
988    int offnum=1;\r
989 \r
990     int perm []    =  { 0,0,1};\r
991     int perminv [] =  { 0,0,1};\r
992 \r
993   struct Prototype PROT[]=\r
994 \r
995 /*\r
996 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref pslen */\r
997 {\r
998 {2, 0,   0,   27,   0, -1,   0,  0,   0,  27, 26, 25, 24,  -1,  -1,  1},\r
999 {0, 1,   0,    9,   1,  0,   1,  0,   1,   9,  8, 7,  6,   -1,  -1,  1},\r
1000 {7, 2}\r
1001 };\r
1002 \r
1003 \r
1004    int (* module [numprot]) () ;\r
1005    jmp_buf buffer;\r
1006 \r
1007      struct Offsets OFF[]=\r
1008     { 0, 30, 0, 8, 0, 0, 0,\r
1009       0, 12, 1, 3, 0, 8, 0 };\r
1010 \r
1011      struct Elem EL[]=\r
1012     {\r
1013       5,  1, 0,\r
1014       7,  2, 0,\r
1015       11, 3, 0,\r
1016       13, 4, 0,\r
1017       21, 5, 0,\r
1018       17, 6, 0,\r
1019       26, 7, 1,\r
1020       27, -1,2,\r
1021       1,  9, 0,\r
1022       8, 10, 1,\r
1023       9, -1, 2 };\r
1024 \r
1025      struct Hlstelem HL[]= { 0 };\r
1026      struct Sgelem SL[]= { 0 };\r
1027 \r
1028 \r
1029 \r
1030 int memor()\r
1031 {\r
1032   switch (IC)\r
1033   { case 1: goto L1; break;\r
1034     case 2: goto L2; break;\r
1035   };\r
1036 \r
1037  L1: *Global(1)=0;\r
1038      printf("\n n="); scanf("%d",Global(4));\r
1039      printf("\n k="); scanf("%d",Global(3));\r
1040      *Global(2)=1;\r
1041      while (1)\r
1042      { if (*Global(2) > *Global(4)) break;\r
1043        Dopen(1,0,Global(5));  IC=2;\r
1044        Go(Global(5));\r
1045  L2:   (*Global(1))++;\r
1046        if (*Global(1)== *Global(3))\r
1047         {\r
1048          Refmove(Global(9),Physical(Global(7))+1);\r
1049          Gkill(Global(7));\r
1050          Gkill(Global(9));\r
1051          *Global(1)=0;\r
1052         };\r
1053        Refmove(Global(7),Global(5));\r
1054        (*Global(2))++;\r
1055      };\r
1056    Endrun ();\r
1057  }\r
1058 \r
1059 int A()\r
1060 {\r
1061     Openarray(2,1,*Global(2),Local(1));\r
1062     Endclass ();\r
1063 }\r
1064 \r
1065 main ()\r
1066 { Init();\r
1067   module[0]=memor;\r
1068   module[1]=A;\r
1069   IC=1;\r
1070   modulenumber=0;\r
1071   if (setjmp(buffer)!=-2) module[modulenumber]();\r
1072 }\r
1073 \r
1074 \1a\r
1075 /*\r
1076 \r
1077 program merge;\r
1078  unit node: class;\r
1079    var left,right : node,\r
1080        val :        integer;\r
1081 \r
1082    unit ins: procedure( value: integer) ;\r
1083    begin\r
1084      if val > value\r
1085      then\r
1086        if left=none\r
1087        then\r
1088          left:=new node;\r
1089          left.val:=value;\r
1090        else\r
1091          call left.ins(value);\r
1092        fi;\r
1093      else\r
1094        if right = none\r
1095        then\r
1096          right:=new node;\r
1097          right.val:=value;\r
1098        else\r
1099          call right.ins(value)\r
1100        fi;\r
1101      fi;\r
1102    end ins;\r
1103 \r
1104  end node;\r
1105 \r
1106  unit traverse : coroutine (x:node);\r
1107    var val: integer;\r
1108 \r
1109    unit t: procedure(y:node);\r
1110    begin\r
1111      if y=/=none\r
1112      then\r
1113        call t(y.left);\r
1114        val:=y.val;\r
1115        detach;\r
1116        call t(y.right);\r
1117      fi;\r
1118    end t;\r
1119  begin\r
1120    return;\r
1121    call t(x);\r
1122    val:=m;\r
1123  end traverse;\r
1124 \r
1125  var n,i,j,min,m,k: integer,\r
1126      d:             arrayof node,\r
1127      tr:            arrayof traverse;\r
1128  begin\r
1129    read(n);\r
1130    array d dim(1:n);\r
1131    for i:=1 to n\r
1132    do\r
1133      read(j); write(j); if j>m then m:=j fi;\r
1134      d(i):=new node;\r
1135      d(i).val:=j;\r
1136      do\r
1137        read(j);\r
1138        if j=-1 then writeln; exit fi;\r
1139        write(j);\r
1140        if j>m then m:=j fi;\r
1141        call d(i).ins(j)\r
1142      od;\r
1143    od;\r
1144    m:=m+1;\r
1145    array tr dim (1:n);\r
1146    min:=0;\r
1147    for i:=1 to n\r
1148    do\r
1149      tr(i):=new traverse(d(i));\r
1150      attach(tr(i));\r
1151    od;\r
1152    k:=0;\r
1153    do\r
1154      if min=m then exit fi;\r
1155      min:=tr(1).val;\r
1156      j:=1;\r
1157      for i:=2 to n\r
1158      do\r
1159        if min > tr(i).val then min:=tr(i).val; j:=i fi;\r
1160      od;\r
1161      if min<m\r
1162      then\r
1163        write(min); attach(tr(j));\r
1164        k:=k+1;  if k=10 then writeln; k:=0 fi;\r
1165      fi;\r
1166    od;\r
1167    writeln;\r
1168    attach(tr(j));\r
1169  end merge\r
1170 \r
1171 */\r
1172 \r
1173 #include "rsdata.h"\r
1174 \r
1175 \r
1176 extern  int IC;                                 /* global control */\r
1177 extern  int modulenumber;                       /* module number */\r
1178 extern  unsigned int *DISPVIRT,*DISPDIR;        /* displays' addresses */\r
1179 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
1180 extern  unsigned int *current,*local,*global;\r
1181 \r
1182 #define numprot 6\r
1183 \r
1184    int displ= -6;\r
1185    int displdir = -15;\r
1186    int curr= -8;\r
1187    int lstcor= -10;\r
1188    int chead = -12;\r
1189    int protnum=numprot;\r
1190    int offnum=4;\r
1191 \r
1192 \r
1193     int perm []    =  { 0,1,2};\r
1194     int perminv [] =  { 0,1,2};\r
1195 \r
1196     struct Prototype PROT [] =\r
1197 /*\r
1198 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref psleng*/\r
1199 {\r
1200 {2, 0,   15,  27,   0, -1,  0,  0,   0,  27, 26, 25, 24, -1,  -1,  1},\r
1201 {0, 1,   0,    9,   1,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1202 {1, 2,   0,    9,   2,  1,  2,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1203 {3, 3,   0,    9,   3,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1204 {1, 4,   0,    9,   4,  3,  2,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1205 {7, 5 }\r
1206 };\r
1207 \r
1208 \r
1209    int (* module [numprot]) () ;\r
1210    jmp_buf buffer;\r
1211 \r
1212      struct Offsets OFF[]=\r
1213     { 0, 43, 0, 11, 0,  0, 0,\r
1214       0, 10, 1,  2, 0, 11, 0,\r
1215       0, 10, 2,  3, 0, 13, 0,\r
1216       0, 10, 3,  4, 0, 16, 0,\r
1217       0, 10, 4,  4, 0, 20, 0 };\r
1218 \r
1219      struct Elem EL[]=\r
1220     { 7,  1, 0,\r
1221       9,  2, 0,\r
1222      16,  3, 0,\r
1223      -6,  4, 0,\r
1224      -4,  5, 0,\r
1225      -2,  6, 0,\r
1226      -8,  7, 0,\r
1227     -10,  8, 0,\r
1228     -12,  9, 0,\r
1229      26, 10, 1,\r
1230      27, -1, 2,\r
1231       1, 12, 0,\r
1232       3, -1, 0,\r
1233       2, 14, 0,\r
1234       8, 15, 1,\r
1235       9, -1, 2,\r
1236       1, 17, 0,\r
1237       4, 18, 0,\r
1238       8, 19, 1,\r
1239       9, -1, 2,\r
1240       1, 21, 0,\r
1241       3, 22, 0,\r
1242       8, 23, 1,\r
1243       9, -1, 2};\r
1244      struct Hlstelem HL[]= { 0 };\r
1245      struct Sgelem SL[]= { 0 };\r
1246 \r
1247 \r
1248 \r
1249 node()\r
1250 {\r
1251   Endclass();\r
1252 }\r
1253 \r
1254 \r
1255 ins()\r
1256 { switch(IC)\r
1257   {\r
1258     case 1:  goto L1; break;\r
1259     case 2:  goto L2; break;\r
1260     case 3:  goto L3; break;\r
1261     case 4:  goto L4; break;\r
1262     case 5:  goto L5; break;\r
1263   };\r
1264 \r
1265 L1:\r
1266  if (*Address(1,5) > *Local(1))\r
1267  {\r
1268   if (Notmember(Address(1,1)))\r
1269   {\r
1270     Dopen(1,0,Address(1,1));\r
1271     IC=2;  Go(Address(1,1));\r
1272 L2:\r
1273     *(Physical(Address(1,1))+5)= *Local(1);\r
1274   }\r
1275   else\r
1276   {\r
1277     Slopen(2,Local(2),Address(1,1));\r
1278     *(Physical(Local(2))+1)= *Local(1);\r
1279     IC=3; Go(Local(2));\r
1280 L3: Killafter() ;\r
1281   };\r
1282  }\r
1283  else\r
1284  {\r
1285   if (Notmember(Address(1,3)))\r
1286   {\r
1287     Dopen(1,0,Address(1,3));\r
1288     IC=4; Go(Address(1,3));\r
1289 L4:  *(Physical(Address(1,3))+5)= *Local(1);\r
1290   }\r
1291   else\r
1292   {\r
1293     Slopen(2,Local(2),Address(1,3));\r
1294     *(Physical(Local(2))+1)= *Local(1);\r
1295     IC=5; Go(Local(2));\r
1296 L5: Killafter();\r
1297   };\r
1298  };\r
1299  Back();\r
1300 }\r
1301 \r
1302 \r
1303 \r
1304 \r
1305 traverse()\r
1306 { switch(IC)\r
1307   {\r
1308     case 1:  goto L1; break;\r
1309     case 2:  goto L2; break;\r
1310     case 3:  goto L3; break;\r
1311     case 4:  goto L4; break;\r
1312   };\r
1313 L1:\r
1314      IC=2; Back();\r
1315 L2:  Dopen(4,3,Local(4));\r
1316      Refmove(Physical(Local(4))+1,Local(1));\r
1317      IC=3;    Go(Local(4));\r
1318 L3:  Killafter();\r
1319      *Local(3)= *Global(5);\r
1320      IC=4; Attach(lastcor);\r
1321 L4:  Endcor();\r
1322 }\r
1323 \r
1324 t()\r
1325 { switch(IC)\r
1326   {\r
1327     case 1:  goto L1; break;\r
1328     case 2:  goto L2; break;\r
1329     case 3:  goto L3; break;\r
1330     case 4:  goto L4; break;\r
1331   };\r
1332 L1:\r
1333  if (Member(Local(1)))\r
1334   { Dopen(4,3,Local(3));\r
1335     Refmove(Physical(Local(3))+1,Physical(Local(1))+1);\r
1336     IC=2;  Go(Local(3));\r
1337 L2: Killafter();\r
1338     *Address(1,3)= *(Physical(Local(1))+5);\r
1339     IC=3; Attach(lastcor);\r
1340 L3: Dopen(4,3,Local(3));\r
1341     Refmove(Physical(Local(3))+1,Physical(Local(1))+3);\r
1342     IC=4;  Go(Local(3));\r
1343 L4: Killafter();\r
1344    };\r
1345   Back();\r
1346 }\r
1347 \r
1348 \r
1349  merge()\r
1350 { switch(IC)\r
1351   {\r
1352     case 1:  goto L1; break;\r
1353     case 2:  goto L2; break;\r
1354     case 3:  goto L3; break;\r
1355     case 4:  goto L4; break;\r
1356     case 5:  goto L5; break;\r
1357     case 6:  goto L6; break;\r
1358   };\r
1359 L1:\r
1360   printf("Number of trees n="); scanf("%d",Global(1));\r
1361   Openarray(5,1,*Global(1),Global(7));\r
1362   printf("Give the values of nodes. End each tree with -1\n");\r
1363   *Global(2)=1;\r
1364   while (1)\r
1365    {\r
1366      if (*Global(2)> *Global(1)) break;\r
1367      scanf("%d",Global(3));\r
1368      if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
1369      Dopen(1,0,Arrayelem(Global(7),*Global(2)));\r
1370      IC=2; Go(Arrayelem(Global(7),*Global(2)));\r
1371 L2:  *(Physical(Arrayelem(Global(7),*Global(2)))+5)= *Global(3);\r
1372      while(1)\r
1373       {\r
1374         scanf("%d",Global(3));\r
1375         if (*Global(3) == -1) break;\r
1376         if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
1377         Slopen(2,Global(16),Arrayelem(Global(7),*Global(2)));\r
1378         *(Physical(Global(16))+1)= *Global(3);\r
1379         IC=3; Go(Global(16));\r
1380 L3:     Killafter();\r
1381       };\r
1382       (*Global(2))++;\r
1383    };\r
1384    (*Global(5))++;\r
1385    Openarray(5,1,*Global(1),Global(9));\r
1386    *Global(4)=0;\r
1387    *Global(2)=1;\r
1388    while(1)\r
1389     { if (*Global(2) > *Global(1)) break;\r
1390       Dopen(3,0,Arrayelem(Global(9),*Global(2)));\r
1391       Refmove(Physical(Arrayelem(Global(9),*Global(2)))+1,\r
1392          Arrayelem(Global(7),*Global(2)));\r
1393       IC=4;  Go(Arrayelem(Global(9),*Global(2)));\r
1394 L4:   IC=5;  Attach(Arrayelem(Global(9),*Global(2)));\r
1395 L5:   (*Global(2))++;\r
1396     };\r
1397    *Global(6)=0;\r
1398    while(1)\r
1399    {\r
1400     if (*Global(4) == *Global(5) ) break;\r
1401     *Global(4)= *(Physical(Arrayelem(Global(9),1))+3);\r
1402     *Global(3)=1;\r
1403     *Global(2)=2;\r
1404     while (1)\r
1405     {\r
1406      if (*Global(2) > *Global(1))  break;\r
1407      if (*Global(4) >  *(Physical(Arrayelem(Global(9),*Global(2)))+3))\r
1408        { *Global(4) =   *(Physical(Arrayelem(Global(9),*Global(2)))+3);\r
1409           *Global(3)= *Global(2);\r
1410        };\r
1411      (*Global(2))++;\r
1412     };\r
1413     if (*Global(4) < *Global(5))\r
1414     {\r
1415       printf("%d  ",*Global(4));\r
1416       IC=6;   Attach(Arrayelem(Global(9),*Global(3)));\r
1417 L6:   (*Global(6))++;\r
1418       if (*Global(6)==10) { printf("  \n"); *Global(6)=0; };\r
1419     };\r
1420    };\r
1421 \r
1422     Attach(Arrayelem(Global(9),*Global(3)));\r
1423     Endrun();\r
1424  }\r
1425 \r
1426 \r
1427 main ()\r
1428 { Init();\r
1429   module[0]=merge;\r
1430   module[1]=node;\r
1431   module[2]=ins;\r
1432   module[3]=traverse;\r
1433   module[4]=t;\r
1434   IC=1;\r
1435   if (setjmp(buffer)!=-2)  module[modulenumber]();\r
1436 }\r
1437 \1a\r
1438 /*\r
1439 \r
1440 program merge;\r
1441  unit node: class;\r
1442    var left,right : node,\r
1443        val :        integer;\r
1444 \r
1445    unit ins: procedure( value: integer) ;\r
1446    begin\r
1447      if val > value\r
1448      then\r
1449        if left=none\r
1450        then\r
1451          left:=new node;\r
1452          left.val:=value;\r
1453        else\r
1454          call left.ins(value);\r
1455        fi;\r
1456      else\r
1457        if right = none\r
1458        then\r
1459          right:=new node;\r
1460          right.val:=value;\r
1461        else\r
1462          call right.ins(value)\r
1463        fi;\r
1464      fi;\r
1465    end ins;\r
1466 \r
1467  end node;\r
1468 \r
1469  unit traverse : coroutine (x:node);\r
1470    var val: integer;\r
1471 \r
1472    unit t: procedure(y:node);\r
1473    begin\r
1474      if y=/=none\r
1475      then\r
1476        call t(y.left);\r
1477        val:=y.val;\r
1478        detach;\r
1479        call t(y.right);\r
1480      fi;\r
1481    end t;\r
1482  begin\r
1483    return;\r
1484    call t(x);\r
1485    val:=m;\r
1486  end traverse;\r
1487 \r
1488 \r
1489  unit killtree: procedure (x:node);\r
1490  begin\r
1491   if x=/= none\r
1492   then\r
1493     killtree(x.left);\r
1494     killtree(x.right);\r
1495     kill(x);\r
1496   fi;\r
1497  end killtree;\r
1498 \r
1499  unit clear:procedure ;\r
1500  var i:integer;\r
1501  begin\r
1502    for i:=1 to n do call killtree(d(i)); od;\r
1503    for i:=1 to n do kill(tr(i)); od;\r
1504    kill(d);\r
1505    kill(tr);\r
1506  end clear;\r
1507 \r
1508  var n,i,j,min,m,k: integer,\r
1509      d:             arrayof node,\r
1510      tr:            arrayof traverse;\r
1511  begin\r
1512    read(n);\r
1513    array d dim(1:n);\r
1514    for i:=1 to n\r
1515    do\r
1516      read(j); write(j); if j>m then m:=j fi;\r
1517      d(i):=new node;\r
1518      d(i).val:=j;\r
1519      do\r
1520        read(j);\r
1521        if j=-1 then writeln; exit fi;\r
1522        write(j);\r
1523        if j>m then m:=j fi;\r
1524        call d(i).ins(j)\r
1525      od;\r
1526    od;\r
1527    m:=m+1;\r
1528    array tr dim (1:n);\r
1529    min:=0;\r
1530    for i:=1 to n\r
1531    do\r
1532      tr(i):=new traverse(d(i));\r
1533      attach(tr(i));\r
1534    od;\r
1535    k:=0;\r
1536    do\r
1537      if min=m then exit fi;\r
1538      min:=tr(1).val;\r
1539      j:=1;\r
1540      for i:=2 to n\r
1541      do\r
1542        if min > tr(i).val then min:=tr(i).val; j:=i fi;\r
1543      od;\r
1544      if min<m\r
1545      then\r
1546        write(min); attach(tr(j));\r
1547        k:=k+1;  if k=10 then writeln; k:=0 fi;\r
1548      fi;\r
1549    od;\r
1550    writeln;\r
1551    call clear;\r
1552  end merge\r
1553 \r
1554 */\r
1555 \r
1556 \r
1557 \r
1558 #include "rsdata.h"\r
1559 \r
1560 extern  int IC;                         /* global control */\r
1561 extern  int modulenumber;               /* module number */\r
1562 extern  unsigned int *DISVIRT,*DISPDIR; /* displays' addresses */\r
1563 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
1564 extern  unsigned int *current,*local,*global;\r
1565 \r
1566 #define numprot 9\r
1567 \r
1568    int displ= -6;\r
1569    int displdir = -15;\r
1570    int curr= -8;\r
1571    int lstcor= -10;\r
1572    int chead = -12;\r
1573    int protnum=numprot;\r
1574    int offnum=4;\r
1575 \r
1576 \r
1577     int perm []    =  { 0,1,2};\r
1578     int perminv [] =  { 0,1,2};\r
1579 \r
1580     struct Prototype PROT [] =\r
1581 /*\r
1582 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref psleng*/\r
1583 {\r
1584 {2, 0,   15,  27,   0, -1,  0,  0,   0,  27, 26, 25, 24, -1,  -1,  1},\r
1585 {0, 1,   0,    9,   1,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1586 {1, 2,   0,    9,   2,  1,  2,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1587 {3, 3,   0,    9,   3,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1588 {1, 4,   0,    9,   4,  3,  2,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1589 {7, 5 },\r
1590 {1, 6,   0,    9,   2,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
1591 {1, 7,   0,    9,   4,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1}\r
1592 };\r
1593 \r
1594 \r
1595    int (* module [numprot]) () ;\r
1596    jmp_buf buffer;\r
1597 \r
1598      struct Offsets OFF[]=\r
1599     { 0, 43, 0, 11, 0,  0, 0,\r
1600       0, 10, 1,  2, 0, 11, 0,\r
1601       0, 10, 2,  3, 0, 13, 0,\r
1602       0, 10, 3,  4, 0, 16, 0,\r
1603       0, 10, 4,  4, 0, 20, 0 };\r
1604 \r
1605      struct Elem EL[]=\r
1606     { 7,  1, 0,\r
1607       9,  2, 0,\r
1608      16,  3, 0,\r
1609      -6,  4, 0,\r
1610      -4,  5, 0,\r
1611      -2,  6, 0,\r
1612      -8,  7, 0,\r
1613     -10,  8, 0,\r
1614     -12,  9, 0,\r
1615      26, 10, 1,\r
1616      27, -1, 2,\r
1617       1, 12, 0,\r
1618       3, -1, 0,\r
1619       2, 14, 0,\r
1620       8, 15, 1,\r
1621       9, -1, 2,\r
1622       1, 17, 0,\r
1623       4, 18, 0,\r
1624       8, 19, 1,\r
1625       9, -1, 2,\r
1626       1, 21, 0,\r
1627       3, 22, 0,\r
1628       8, 23, 1,\r
1629       9, -1, 2};\r
1630      struct Hlstelem HL[]= { 0 };\r
1631      struct Sgelem SL[]= { 0 };\r
1632 \r
1633 \r
1634 \r
1635 node()\r
1636 {\r
1637   Endclass();\r
1638 }\r
1639 \r
1640 \r
1641 ins()\r
1642 { switch(IC)\r
1643   {\r
1644     case 1:  goto L1; break;\r
1645     case 2:  goto L2; break;\r
1646     case 3:  goto L3; break;\r
1647     case 4:  goto L4; break;\r
1648     case 5:  goto L5; break;\r
1649   };\r
1650 \r
1651 L1:\r
1652  if (*Address(1,5) > *Local(1))\r
1653  {\r
1654   if (Notmember(Address(1,1)))\r
1655   {\r
1656     Dopen(1,0,Address(1,1));\r
1657     IC=2;  Go(Address(1,1));\r
1658 L2:\r
1659     *(Physical(Address(1,1))+5)= *Local(1);\r
1660   }\r
1661   else\r
1662   {\r
1663     Slopen(2,Local(2),Address(1,1));\r
1664     *(Physical(Local(2))+1)= *Local(1);\r
1665     IC=3; Go(Local(2));\r
1666 L3: Killafter() ;\r
1667   };\r
1668  }\r
1669  else\r
1670  {\r
1671   if (Notmember(Address(1,3)))\r
1672   {\r
1673     Dopen(1,0,Address(1,3));\r
1674     IC=4; Go(Address(1,3));\r
1675 L4:  *(Physical(Address(1,3))+5)= *Local(1);\r
1676   }\r
1677   else\r
1678   {\r
1679     Slopen(2,Local(2),Address(1,3));\r
1680     *(Physical(Local(2))+1)= *Local(1);\r
1681     IC=5; Go(Local(2));\r
1682 L5: Killafter();\r
1683   };\r
1684  };\r
1685  Back();\r
1686 }\r
1687 \r
1688 \r
1689 \r
1690 \r
1691 traverse()\r
1692 { switch(IC)\r
1693   {\r
1694     case 1:  goto L1; break;\r
1695     case 2:  goto L2; break;\r
1696     case 3:  goto L3; break;\r
1697     case 4:  goto L4; break;\r
1698   };\r
1699 L1:\r
1700      IC=2; Back();\r
1701 L2:  Dopen(4,3,Local(4));\r
1702      Refmove(Physical(Local(4))+1,Local(1));\r
1703      IC=3;    Go(Local(4));\r
1704 L3:  Killafter();\r
1705      *Local(3)= *Global(5);\r
1706      IC=4; Attach(lastcor);\r
1707 L4:  Endcor();\r
1708 }\r
1709 \r
1710 t()\r
1711 { switch(IC)\r
1712   {\r
1713     case 1:  goto L1; break;\r
1714     case 2:  goto L2; break;\r
1715     case 3:  goto L3; break;\r
1716     case 4:  goto L4; break;\r
1717   };\r
1718 L1:\r
1719  if (Member(Local(1)))\r
1720   { Dopen(4,3,Local(3));\r
1721     Refmove(Physical(Local(3))+1,Physical(Local(1))+1);\r
1722     IC=2;  Go(Local(3));\r
1723 L2: Killafter();\r
1724     *Address(1,3)= *(Physical(Local(1))+5);\r
1725     IC=3; Attach(lastcor);\r
1726 L3: Dopen(4,3,Local(3));\r
1727     Refmove(Physical(Local(3))+1,Physical(Local(1))+3);\r
1728     IC=4;  Go(Local(3));\r
1729 L4: Killafter();\r
1730    };\r
1731   Back();\r
1732 }\r
1733 \r
1734 \r
1735 \r
1736 clear()\r
1737 { switch(IC)\r
1738   {\r
1739     case 1:  goto L1; break;\r
1740     case 2:  goto L2; break;\r
1741   };\r
1742 L1:*Local(1)=1;\r
1743   while (1)\r
1744   {\r
1745     if (*Local(1)> *Global(1)) break;\r
1746     Dopen(7,0,Local(2));\r
1747     Refmove(Physical(Local(2))+1,Arrayelem(Global(7),*Local(1)));\r
1748     IC=2; Go(Local(2));\r
1749 L2: Killafter();\r
1750     (*Local(1))++;\r
1751   };\r
1752   Memorydump();\r
1753   *Local(1)=1;\r
1754   while (1)\r
1755   {\r
1756     if (*Local(1)> *Global(1)) break;\r
1757     Gkill(Arrayelem(Global(9),*Local(1)));\r
1758     (*Local(1))++;\r
1759   };\r
1760   Memorydump();\r
1761   Gkill(Global(7));\r
1762   Gkill(Global(9));\r
1763   Back();\r
1764 }\r
1765 \r
1766 \r
1767 killtree()\r
1768 { switch(IC)\r
1769   {\r
1770     case 1:  goto L1; break;\r
1771     case 2:  goto L2; break;\r
1772     case 3:  goto L3; break;\r
1773   };\r
1774 L1:if (Member(Local(1)))\r
1775    {\r
1776      Dopen(7,0,Local(3));\r
1777      Refmove(Physical(Local(3))+1,Physical(Local(1))+1);\r
1778      IC=2; Go(Local(3));\r
1779 L2:  Killafter();\r
1780      Dopen(7,0,Local(3));\r
1781      Refmove(Physical(Local(3))+1,Physical(Local(1))+3);\r
1782      IC=3; Go(Local(3));\r
1783 L3:  Killafter();\r
1784      Gkill(Local(1));\r
1785    };\r
1786    Back();\r
1787 }\r
1788 \r
1789 \r
1790 \r
1791  merge()\r
1792 { switch(IC)\r
1793   {\r
1794     case 1:  goto L1; break;\r
1795     case 2:  goto L2; break;\r
1796     case 3:  goto L3; break;\r
1797     case 4:  goto L4; break;\r
1798     case 5:  goto L5; break;\r
1799     case 6:  goto L6; break;\r
1800     case 7:  goto L7; break;\r
1801   };\r
1802 L1:\r
1803   printf("Number of trees n="); scanf("%d",Global(1));\r
1804   Openarray(5,1,*Global(1),Global(7));\r
1805   printf("Give the values of nodes. End each tree with -1\n");\r
1806   *Global(2)=1;\r
1807   while (1)\r
1808    {\r
1809      if (*Global(2)> *Global(1)) break;\r
1810      scanf("%d",Global(3));\r
1811      if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
1812      Dopen(1,0,Arrayelem(Global(7),*Global(2)));\r
1813      IC=2; Go(Arrayelem(Global(7),*Global(2)));\r
1814 L2:  *(Physical(Arrayelem(Global(7),*Global(2)))+5)= *Global(3);\r
1815      while(1)\r
1816       {\r
1817         scanf("%d",Global(3));\r
1818         if (*Global(3) == -1) break;\r
1819         if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
1820         Slopen(2,Global(16),Arrayelem(Global(7),*Global(2)));\r
1821         *(Physical(Global(16))+1)= *Global(3);\r
1822         IC=3; Go(Global(16));\r
1823 L3:     Killafter();\r
1824       };\r
1825       (*Global(2))++;\r
1826    };\r
1827    (*Global(5))++;\r
1828    Openarray(5,1,*Global(1),Global(9));\r
1829    *Global(4)=0;\r
1830    *Global(2)=1;\r
1831    while(1)\r
1832     { if (*Global(2) > *Global(1)) break;\r
1833       Dopen(3,0,Arrayelem(Global(9),*Global(2)));\r
1834       Refmove(Physical(Arrayelem(Global(9),*Global(2)))+1,\r
1835          Arrayelem(Global(7),*Global(2)));\r
1836       IC=4;  Go(Arrayelem(Global(9),*Global(2)));\r
1837 L4:   IC=5;  Attach(Arrayelem(Global(9),*Global(2)));\r
1838 L5:   (*Global(2))++;\r
1839     };\r
1840    *Global(6)=0;\r
1841    while(1)\r
1842    {\r
1843     if (*Global(4) == *Global(5) ) break;\r
1844     *Global(4)= *(Physical(Arrayelem(Global(9),1))+3);\r
1845     *Global(3)=1;\r
1846     *Global(2)=2;\r
1847     while (1)\r
1848     {\r
1849      if (*Global(2) > *Global(1))  break;\r
1850      if (*Global(4) >  *(Physical(Arrayelem(Global(9),*Global(2)))+3))\r
1851        { *Global(4) =   *(Physical(Arrayelem(Global(9),*Global(2)))+3);\r
1852           *Global(3)= *Global(2);\r
1853        };\r
1854      (*Global(2))++;\r
1855     };\r
1856     if (*Global(4) < *Global(5))\r
1857     {\r
1858       printf("%d  ",*Global(4));\r
1859       IC=6;   Attach(Arrayelem(Global(9),*Global(3)));\r
1860 L6:   (*Global(6))++;\r
1861       if (*Global(6)==10) { printf("  \n"); *Global(6)=0; };\r
1862     };\r
1863    };\r
1864     Memorydump();\r
1865     Dopen(6,0,Global(16));\r
1866     IC=7; Go(Global(16));\r
1867 L7: Killafter();\r
1868     Memorydump();\r
1869     Endrun();\r
1870  }\r
1871 \r
1872 \r
1873 main ()\r
1874 { Init();\r
1875   module[0]=merge;\r
1876   module[1]=node;\r
1877   module[2]=ins;\r
1878   module[3]=traverse;\r
1879   module[4]=t;\r
1880   module[6]=clear;\r
1881   module[7]=killtree;\r
1882   IC=1;\r
1883   if (setjmp(buffer)!=-2) module[modulenumber]();\r
1884 }\r
1885 \1a/*\r
1886 \r
1887 program merge;\r
1888  unit node: class;\r
1889    var left,right : node,\r
1890        val :        integer;\r
1891 \r
1892    unit ins: procedure( value: integer) ;\r
1893    begin\r
1894      if val > value\r
1895      then\r
1896        if left=none\r
1897        then\r
1898          left:=new node;\r
1899          left.val:=value;\r
1900        else\r
1901          call left.ins(value);\r
1902        fi;\r
1903      else\r
1904        if right = none\r
1905        then\r
1906          right:=new node;\r
1907          right.val:=value;\r
1908        else\r
1909          call right.ins(value)\r
1910        fi;\r
1911      fi;\r
1912    end ins;\r
1913 \r
1914  end node;\r
1915 \r
1916  unit traverse : coroutine (x:node);\r
1917    var val: integer;\r
1918 \r
1919    unit t: procedure(y:node);\r
1920    begin\r
1921      if y=/=none\r
1922      then\r
1923        call t(y.left);\r
1924        val:=y.val;\r
1925        detach;\r
1926        call t(y.right);\r
1927      fi;\r
1928    end t;\r
1929  begin\r
1930    return;\r
1931    call t(x);\r
1932    val:=m;\r
1933  end traverse;\r
1934 \r
1935  var n,i,j,min,m,k: integer,\r
1936      d:             arrayof node,\r
1937      tr:            arrayof traverse;\r
1938  begin\r
1939    read(n);\r
1940    array d dim(1:n);\r
1941    for i:=1 to n\r
1942    do\r
1943      read(j); write(j); if j>m then m:=j fi;\r
1944      d(i):=new node;\r
1945      d(i).val:=j;\r
1946      do\r
1947        read(j);\r
1948        if j=-1 then writeln; exit fi;\r
1949        write(j);\r
1950        if j>m then m:=j fi;\r
1951        call d(i).ins(j)\r
1952      od;\r
1953    od;\r
1954    m:=m+1;\r
1955    array tr dim (1:n);\r
1956    min:=0;\r
1957    for i:=1 to n\r
1958    do\r
1959      tr(i):=new traverse(d(i));\r
1960      attach(tr(i));\r
1961    od;\r
1962    k:=0;\r
1963    do\r
1964      if min=m then exit fi;\r
1965      min:=tr(1).val;\r
1966      j:=1;\r
1967      for i:=2 to n\r
1968      do\r
1969        if min > tr(i).val then min:=tr(i).val; j:=i fi;\r
1970      od;\r
1971      if min<m\r
1972      then\r
1973        write(min); attach(tr(j));\r
1974        k:=k+1;  if k=10 then writeln; k:=0 fi;\r
1975      fi;\r
1976    od;\r
1977    writeln;\r
1978  end merge\r
1979 \r
1980 */\r
1981 \r
1982 \r
1983 \r
1984 #include "rsdata.h"\r
1985 \r
1986 \r
1987 extern  int IC;                         /* global control */\r
1988 extern  int modulenumber;               /* module number */\r
1989 extern  unsigned int *DISVIRT,*DISPDIR; /* displays' addresses */\r
1990 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
1991 extern  unsigned int *current,*local,*global;\r
1992 \r
1993 #define numprot 6\r
1994 \r
1995    int displ= -6;\r
1996    int displdir = -15;\r
1997    int curr= -8;\r
1998    int lstcor= -10;\r
1999    int chead = -12;\r
2000    int protnum=numprot;\r
2001    int offnum=4;\r
2002 \r
2003 \r
2004     int perm []    =  { 0,1,2};\r
2005     int perminv [] =  { 0,1,2};\r
2006 \r
2007     struct Prototype PROT [] =\r
2008 /*\r
2009 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref psleng*/\r
2010 {\r
2011 {2, 0,   15,  27,   0, -1,  0,  0,   0,  27, 26, 25, 24, -1,  -1,  1},\r
2012 {0, 1,   0,    9,   1,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
2013 {1, 2,   0,    9,   2,  1,  2,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
2014 {3, 3,   0,    9,   3,  0,  1,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
2015 {1, 4,   0,    9,   4,  3,  2,  0,   0,   9,  8, 7,  6,  -1,  -1,  1},\r
2016 {7, 5 }\r
2017 };\r
2018 \r
2019 \r
2020    int (* module [numprot]) () ;\r
2021    jmp_buf buffer;\r
2022 \r
2023      struct Offsets OFF[]=\r
2024     { 0, 43, 0, 11, 0,  0, 0,\r
2025       0, 10, 1,  2, 0, 11, 0,\r
2026       0, 10, 2,  3, 0, 13, 0,\r
2027       0, 10, 3,  4, 0, 16, 0,\r
2028       0, 10, 4,  4, 0, 20, 0 };\r
2029 \r
2030      struct Elem EL[]=\r
2031     { 7,  1, 0,\r
2032       9,  2, 0,\r
2033      16,  3, 0,\r
2034      -6,  4, 0,\r
2035      -4,  5, 0,\r
2036      -2,  6, 0,\r
2037      -8,  7, 0,\r
2038     -10,  8, 0,\r
2039     -12,  9, 0,\r
2040      26, 10, 1,\r
2041      27, -1, 2,\r
2042       1, 12, 0,\r
2043       3, -1, 0,\r
2044       2, 14, 0,\r
2045       8, 15, 1,\r
2046       9, -1, 2,\r
2047       1, 17, 0,\r
2048       4, 18, 0,\r
2049       8, 19, 1,\r
2050       9, -1, 2,\r
2051       1, 21, 0,\r
2052       3, 22, 0,\r
2053       8, 23, 1,\r
2054       9, -1, 2};\r
2055      struct Hlstelem HL[]= { 0 };\r
2056      struct Sgelem SL[]= { 0 };\r
2057 \r
2058 \r
2059 \r
2060 node()\r
2061 {\r
2062   Endclass();\r
2063 }\r
2064 \r
2065 \r
2066 ins()\r
2067 { switch(IC)\r
2068   {\r
2069     case 1:  goto L1; break;\r
2070     case 2:  goto L2; break;\r
2071     case 3:  goto L3; break;\r
2072     case 4:  goto L4; break;\r
2073     case 5:  goto L5; break;\r
2074   };\r
2075 \r
2076 L1:\r
2077  if (*Address(1,5) > *Local(1))\r
2078  {\r
2079   if (Notmember(Address(1,1)))\r
2080   {\r
2081     Dopen(1,0,Address(1,1));\r
2082     IC=2;  Go(Address(1,1));\r
2083 L2:\r
2084     *(Physical(Address(1,1))+5)= *Local(1);\r
2085   }\r
2086   else\r
2087   {\r
2088     Slopen(2,Local(2),Address(1,1));\r
2089     *(Physical(Local(2))+1)= *Local(1);\r
2090     IC=3; Go(Local(2));\r
2091 L3: Killafter() ;\r
2092   };\r
2093  }\r
2094  else\r
2095  {\r
2096   if (Notmember(Address(1,3)))\r
2097   {\r
2098     Dopen(1,0,Address(1,3));\r
2099     IC=4; Go(Address(1,3));\r
2100 L4:  *(Physical(Address(1,3))+5)= *Local(1);\r
2101   }\r
2102   else\r
2103   {\r
2104     Slopen(2,Local(2),Address(1,3));\r
2105     *(Physical(Local(2))+1)= *Local(1);\r
2106     IC=5; Go(Local(2));\r
2107 L5: Killafter();\r
2108   };\r
2109  };\r
2110  Back();\r
2111 }\r
2112 \r
2113 \r
2114 \r
2115 \r
2116 traverse()\r
2117 { switch(IC)\r
2118   {\r
2119     case 1:  goto L1; break;\r
2120     case 2:  goto L2; break;\r
2121     case 3:  goto L3; break;\r
2122     case 4:  goto L4; break;\r
2123   };\r
2124 L1:\r
2125      IC=2; Back();\r
2126 L2:  Dopen(4,3,Local(4));\r
2127      Refmove(Physical(Local(4))+1,Local(1));\r
2128      IC=3;    Go(Local(4));\r
2129 L3:  Killafter();\r
2130      *Local(3)= *Global(5);\r
2131      IC=4; Attach(lastcor);\r
2132 L4:  Endcor();\r
2133 }\r
2134 \r
2135 t()\r
2136 { switch(IC)\r
2137   {\r
2138     case 1:  goto L1; break;\r
2139     case 2:  goto L2; break;\r
2140     case 3:  goto L3; break;\r
2141     case 4:  goto L4; break;\r
2142   };\r
2143 L1:\r
2144  if (Member(Local(1)))\r
2145   { Dopen(4,3,Local(3));\r
2146     Refmove(Physical(Local(3))+1,Physical(Local(1))+1);\r
2147     IC=2;  Go(Local(3));\r
2148 L2: Killafter();\r
2149     *Address(1,3)= *(Physical(Local(1))+5);\r
2150     IC=3; Attach(lastcor);\r
2151 L3: Dopen(4,3,Local(3));\r
2152     Refmove(Physical(Local(3))+1,Physical(Local(1))+3);\r
2153     IC=4;  Go(Local(3));\r
2154 L4: Killafter();\r
2155    };\r
2156   Back();\r
2157 }\r
2158 \r
2159 \r
2160  merge()\r
2161 { switch(IC)\r
2162   {\r
2163     case 1:  goto L1; break;\r
2164     case 2:  goto L2; break;\r
2165     case 3:  goto L3; break;\r
2166     case 4:  goto L4; break;\r
2167     case 5:  goto L5; break;\r
2168     case 6:  goto L6; break;\r
2169   };\r
2170 L1:\r
2171   printf("Number of trees n="); scanf("%d",Global(1));\r
2172   Openarray(5,1,*Global(1),Global(7));\r
2173   printf("Give the values of nodes. End each tree with -1\n");\r
2174   *Global(2)=1;\r
2175   while (1)\r
2176    {\r
2177      if (*Global(2)> *Global(1)) break;\r
2178      scanf("%d",Global(3));\r
2179      if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
2180      Dopen(1,0,Arrayelem(Global(7),*Global(2)));\r
2181      IC=2; Go(Arrayelem(Global(7),*Global(2)));\r
2182 L2:  *(Physical(Arrayelem(Global(7),*Global(2)))+5)= *Global(3);\r
2183      while(1)\r
2184       {\r
2185         scanf("%d",Global(3));\r
2186         if (*Global(3) == -1) break;\r
2187         if (*Global(3) > *Global(5)) *Global(5)= *Global(3);\r
2188         Slopen(2,Global(16),Arrayelem(Global(7),*Global(2)));\r
2189         *(Physical(Global(16))+1)= *Global(3);\r
2190         IC=3; Go(Global(16));\r
2191 L3:     Killafter();\r
2192       };\r
2193       (*Global(2))++;\r
2194    };\r
2195    (*Global(5))++;\r
2196    Openarray(5,1,*Global(1),Global(9));\r
2197    *Global(4)=0;\r
2198    *Global(2)=1;\r
2199    while(1)\r
2200     { if (*Global(2) > *Global(1)) break;\r
2201       Dopen(3,0,Arrayelem(Global(9),*Global(2)));\r
2202       Refmove(Physical(Arrayelem(Global(9),*Global(2)))+1,\r
2203          Arrayelem(Global(7),*Global(2)));\r
2204       IC=4;  Go(Arrayelem(Global(9),*Global(2)));\r
2205 L4:   IC=5;  Attach(Arrayelem(Global(9),*Global(2)));\r
2206 L5:   (*Global(2))++;\r
2207     };\r
2208    *Global(6)=0;\r
2209    while(1)\r
2210    {\r
2211     if (*Global(4) == *Global(5) ) break;\r
2212     *Global(4)= *(Physical(Arrayelem(Global(9),1))+3);\r
2213     *Global(3)=1;\r
2214     *Global(2)=2;\r
2215     while (1)\r
2216     {\r
2217      if (*Global(2) > *Global(1))  break;\r
2218      if (*Global(4) >  *(Physical(Arrayelem(Global(9),*Global(2)))+3))\r
2219        { *Global(4) =   *(Physical(Arrayelem(Global(9),*Global(2)))+3);\r
2220           *Global(3)= *Global(2);\r
2221        };\r
2222      (*Global(2))++;\r
2223     };\r
2224     if (*Global(4) < *Global(5))\r
2225     {\r
2226       printf("%d  ",*Global(4));\r
2227       IC=6;   Attach(Arrayelem(Global(9),*Global(3)));\r
2228 L6:   (*Global(6))++;\r
2229       if (*Global(6)==10) { printf("  \n"); *Global(6)=0; };\r
2230     };\r
2231    };\r
2232     Endrun();\r
2233  }\r
2234 \r
2235 \r
2236 main ()\r
2237 { Init();\r
2238   module[0]=merge;\r
2239   module[1]=node;\r
2240   module[2]=ins;\r
2241   module[3]=traverse;\r
2242   module[4]=t;\r
2243   modulenumber=0;\r
2244   IC=1;\r
2245   if (setjmp(buffer)!=-2) module[modulenumber]();\r
2246 }\r
2247 \r
2248 \1a\r
2249 #include "rsdata.h"\r
2250 \r
2251 \r
2252 \r
2253 extern  int IC;                                 /* global control */\r
2254 extern  int modulenumber;                       /* module number */\r
2255 extern  unsigned int *DISPLAY,*DISPDIR;         /* displays' addresses */\r
2256 extern  unsigned int *lastcor,*mycoroutine,*myprocess;\r
2257 extern  unsigned int *current,*local,*global;\r
2258 \r
2259 #define numprot 5\r
2260 \r
2261 \r
2262    int displ= -9;\r
2263    int displdir = 20;\r
2264    int curr= -11;\r
2265    int lstcor= -13;\r
2266    int chead = -15;\r
2267    int protnum=numprot;\r
2268    int offnum=4;\r
2269 \r
2270     int perm []    =  { 0,1,0,2,1,3};\r
2271     int perminv [] =  { 0,1,0,2,1,3};\r
2272 \r
2273     struct Prototype PROT [] =\r
2274 /*\r
2275 kind num lspn rspan ref dcl lev lst pmdd Sl  DL Lsc Stat hand pref pslen */\r
2276 {\r
2277 {2, 0,   15,  27,   0, -1,   0,  0,  0,  27, 26, 25, 24,  -1,  -1,  1},\r
2278 {0, 1,   0,    9,   1,  0,   1,  0,  0,   9,  8, 7,  6,   -1,  -1,  1},\r
2279 {1, 2,   0,    9,   1,  0,   1,  0,  0,   9,  8, 7,  6,   -1,  -1,  1},\r
2280 {0, 3,   0,    9,   1,  2,   2,  0,  2,   9,  8, 7,  6,   -1,   1,  2},\r
2281 {1, 4,   0,    9,   1,  3,   3,  0,  2,   9,  8, 7,  6,   -1,  -1,  1}\r
2282 };\r
2283 \r
2284 \r
2285    int (* module [numprot]) () ;\r
2286    jmp_buf buffer;\r
2287 \r
2288      struct Offsets OFF[]=\r
2289     { 0, 43, 0, 11, 0,  0, 0,\r
2290       0, 10, 1,  2, 0, 11, 0,\r
2291       0, 10, 2,  3, 0, 13, 0,\r
2292       0, 10, 3,  4, 0, 16, 0,\r
2293       0, 10, 4,  4, 0, 20, 0 };\r
2294 \r
2295      struct Elem EL[]=\r
2296     { 7,  1, 0,\r
2297       9,  2, 0,\r
2298      16,  3, 0,\r
2299      -9,  4, 0,\r
2300      -7,  5, 0,\r
2301      -5,  6, 0,\r
2302     -11,  7, 0,\r
2303     -13,  8, 0,\r
2304     -15,  9, 0,\r
2305      26, 10, 1,\r
2306      27, -1, 2,\r
2307       8, 12, 1,\r
2308       9, -1, 2,\r
2309       2, 14, 0,\r
2310       8, 15, 1,\r
2311       9, -1, 2,\r
2312       1, 17, 0,\r
2313       4, 18, 0,\r
2314       8, 19, 1,\r
2315       9, -1, 2,\r
2316       1, 21, 0,\r
2317       3, 22, 0,\r
2318       8, 23, 1,\r
2319       9, -1, 2};\r
2320 \r
2321      struct Hlstelem HL[]= { 0 };\r
2322      struct Sgelem SL[]= { 0 };\r
2323 \r
2324 \r
2325 sltest()\r
2326  {\r
2327   switch(IC)\r
2328   { case 1: goto L1; break;\r
2329     case 2: goto L2; break;\r
2330     case 3: goto L3; break;\r
2331   };\r
2332 L1: Dopen(2,0,Global(16));\r
2333     IC=2;Go(Global(16));\r
2334 L2: Killafter();\r
2335     Slopen(4,Global(16),Global(7));\r
2336     IC=3;\r
2337     Go(Global(16));\r
2338 L3: Killafter();\r
2339     Endrun();\r
2340 }\r
2341 \r
2342 \r
2343 A()\r
2344 {\r
2345   switch(IC)\r
2346   { case 1: goto L1; break;\r
2347     case 2: goto L2; break;\r
2348   };\r
2349 \r
2350 L1: Inn(1);\r
2351 L2: Endclass();\r
2352 }\r
2353 \r
2354 Bk()\r
2355 {\r
2356   switch(IC)\r
2357   { case 1: goto L1; break;\r
2358     case 2: goto L2; break;\r
2359   };\r
2360 \r
2361 L1: Dopen(3,2,Global(7));\r
2362     IC=2;  Go(Global(7));\r
2363 L2:\r
2364     Back();\r
2365 }\r
2366 \r
2367 B()\r
2368 { IC=2;\r
2369   modulenumber=1;\r
2370   longjmp(buffer,-1);\r
2371 }\r
2372 \r
2373 P()\r
2374 { (* Address(2,1))++;\r
2375   printf("i=%d\n", *Address(2,1));\r
2376   Back();\r
2377 }\r
2378 \r
2379 \r
2380 \r
2381 main ()\r
2382 {\r
2383     Init();\r
2384     module[0]=sltest;\r
2385     module[1]=A;\r
2386     module[2]=Bk;\r
2387     module[3]=B;\r
2388     module[4]=P;\r
2389     IC=1;\r
2390     modulenumber=0;\r
2391     if (setjmp(buffer)!=-2)  module[modulenumber]();\r
2392  }\r
2393 \1a\r