Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / loglan96 / loglan84.rs / antek3.txt
1 From:   MX%"antek@mimuw.edu.pl"  1-MAR-1993 15:47:20.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\r