DataMuseum.dk

Presents historical artifacts from the history of:

RC3500

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC3500

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦f92b1429b⟧ TextFileVerbose

    Length: 48384 (0xbd00)
    Types: TextFileVerbose
    Names: »ncsuplst«

Derivation

└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
    └─⟦72244f0ef⟧ 
        └─⟦this⟧ »ncsuplst« 

TextFileVerbose

\f

ncsuplst    81.06.22.   11.34.                                                    page     1

   10    1           
\f

ncsuplst    81.06.22.   11.34.                                                    page     2

 1010    2          
 1020    3        PROCESS ncsupervisor (
 1030    4          opsem :         sempointer;        (*  operator              *)
 1040    5          VAR main_sem : !ts_pointer;        (*  my input semaphore    *)
 1050    6          VAR free_sem : !ts_pointer;        (*  nc buffer pool        *)
 1060    7          VAR done :     !ts_pointer;        (*  answer from timeout   *)
 1070    8          VAR net_sem,                       (*  netconnector          *)
 1080    9          timeout_sem  : !sempointer         (*  timeout module        *)
 1090   10          );
 1100   11          
 1110   12        CONST
 1120   13          
 1130   14          version = "vers  0.16 /";
 1140   15          
 1150   16           
\f

ncsuplst    81.06.22.   11.34.                                                    page     3

 2010   17          
 2020   18        CONST
 2030   19          
 2040   20          
 2050   21          no_nc_talk = 7;             (*  number of buffers for nc     *)
 2060   22          last_node = 63;             (*  max number of ts addresses   *)
 2070   23          max_node = last_node+1;
 2080   24          dc = 0;
 2090   25          
 2100   26          copy_code   = #h10;
 2110   27          refuse_code = #h12;
 2120   28          dc_down     = #h20;
 2130   29          dc_up       = #h21;
 2140   30          nc_down     = #h22;
 2150   31          nc_up       = #h23;
 2160   32          ts_down     = #h24;
 2170   33          ts_up       = #h25;
 2180   34          tablerequest= #hae;
 2190   35          var_code    = #hb0;
 2200   36          var_answ    = #hb1;
 2210   37          nodetest_code=#hc0;
 2220   38          nodetest_answ=#hc1;
 2230   39          connect_code= #hc8;
 2240   40          connect_answ= #hc9;
 2250   41          finis_code  = #hce;
 2260   42          
 2270   43          words = size_listen - 1 - ( label_size DIV 2);
 2280   44          refuse_length = 2*label_size+2;
 2290   45          bc_length = label_size + 4 + 2;
 2300   46          ae_length = label_size + 4;
 2310   47          test_length = label_size + 10;
 2320   48          
 2330   49          delay1 = 250;              (*  1 sec = 1000 m sec     *)
 2340   50          delay2 = 2;
 2350   51          margin = 5;                (*  timeout tolerance     *)
 2360   52          read_clock = 2;
 2370   53          writetimer = 6;
 2380   54          
 2390   55          write = 2;
 2400   56           
\f

ncsuplst    81.06.22.   11.34.                                                    page     4

 3010   57          
 3020   58        TYPE
 3030   59          
 3040   60          status = ( down, starting, sleep, ready );
 3050   61          
 3060   62          node_range = 0..max_node;
 3070   63          
 3080   64          flawshape = PACKED RECORD             (*  for 1.0 and 1.2   *)
 3090   65                             !  head,
 3100   66                             !  data: alarmlabel
 3110   67                             END;
 3120   68          
 3130   69          
 3140   70          note = PACKED RECORD                  (*  for 2.xx and 10.14      *)
 3150   71                        !  head: alarmlabel;
 3160   72                        !  comp: alarmnetaddr;
 3170   73                        !  cnt : integer
 3180   74                        END;
 3190   75          
 3200   76          
 3210   77          form11= PACKED RECORD                   (*  for 11.0 and 11.1      *)
 3220   78                         !  head: alarmlabel;
 3230   79                         !  address: macroaddr;
 3240   80                         END;
 3250   81          
 3260   82          
 3270   83          testshape = PACKED RECORD              (*  for 12.0, 12.1, 12.8, 12.9   *)
 3280   84                             !  head: alarmlabel;
 3290   85                             !  testno, peri : integer;
 3300   86                             !  data: ARRAY ( 3..words) OF integer;
 3310   87                             END;
 3320   88          
 3330   89          
 3340   90          
 3350   91           
\f

ncsuplst    81.06.22.   11.34.                                                    page     5

 4010   92          
 4020   93        VAR
 4030   94          
 4040   95          tickmess : pool 1;                 (*  1 sec ticks                *)
 4050   96          clockpool: pool 1 OF ts_time;      (*  timing                     *)
 4060   97          bufferpool: pool no_nc_talk OF testshape;
 4070   98          
 4080   99          clock_msg,
 4090  100          ms, msg : reference;
 4100  101          
 4110  102          n, ts, nodes : node_range := 0;
 4120  103          
 4130  104          index : ARRAY ( node_range) OF node_range;
 4140  105          addr: ARRAY ( node_range) OF alarmnetaddr;
 4150  106          state: ARRAY ( node_range) OF status;
 4160  107          tests: ARRAY ( node_range) OF integer;
 4170  108          
 4180  109          who,                                 (*  message receiver    *)
 4190  110          here : alarmnetaddr :=               (*  my addr             *)
 4200  111          alarmnetaddr(macroaddr(0,0,0),0);
 4210  112          
 4220  113          from : macroaddr;                    (*  message sender      *)
 4230  114          
 4240  115          periode: integer:= 5*60;              (*  timeout periode     *)
 4250  116          rest_time : integer:= 5*60;           (*  rest # sec to timeout   *)
 4260  117          
 4270  118          loading: boolean:= true;              (*  nc-up not received yet     *)
 4280  119          
 4290  120          h : integer;
 4300  121          cause : result_range;
 4310  122          
 4320  123          console : zone;
 4330  124          
 4340  125          
 4350  126          
 4360  127          PROCEDURE readram ( VAR w: byte; adr: integer);
 4370  128          EXTERNAL;
 4380  129          
 4390  130          
 4400  131          PROCEDURE writeram ( adr, w: integer);
 4410  132          EXTERNAL;
 4420  133          
 4430  134           
\f

ncsuplst    81.06.22.   11.34.                                                    page     6

 5010  135          
 5020  136          FUNCTION gettime : ts_time;
 5030  137            
 5040  138          TYPE
 5050  139            clock_form = RECORD  time: ts_time  END;
 5060  140            
 5070  141          BEGIN
 5080  142    1     ! 
 5090  143    2     ! signal ( clock_msg, timeout_sem^);
 5100  144    3     ! wait   ( clock_msg, done.w^);
 5110  145    4     ! LOCK     clock_msg AS buf: clock_form DO
 5120  146    5     !   gettime:= buf.time
 5130  147    6     !   
 5140  148    7     END;
 5150  149          
 5160  150          
 5170  151          
 5180  152           
\f

ncsuplst    81.06.22.   11.34.                                                    page     7

 6010  153          
 6020  154          PROCEDURE xmit ( VAR m: reference; u4val: byte );
 6030  155            
 6040  156          BEGIN
 6050  157    1     ! m^.u1:= write;
 6060  158    2     ! m^.u3:= nc_route;
 6070  159    3     ! m^.u4:= u4val;
 6080  160    4     ! signal ( m, net_sem^)
 6090  161    5     END;
 6100  162          
 6110  163          
 6120  164          
 6130  165          
 6140  166          
 6150  167          
 6160  168          PROCEDURE answer (
 6170  169            VAR m : reference;
 6180  170            cause : result_range;
 6190  171            oper  : byte   );
 6200  172            
 6210  173          BEGIN
 6220  174    1     ! LOCK m AS head: alarmlabel DO
 6230  175    2     !   WITH head DO
 6240  176    3     !     BEGIN
 6250  177    4     !     ! rec:= send;
 6260  178    5     !     ! send:= here;
 6270  179    6     !     ! result:= cause;
 6280  180    7     !     ! ts_add:= gettime;
 6290  181    8     !     END;
 6300  182    9     ! xmit ( m, oper);
 6310  183   10     END;
 6320  184          
 6330  185          
 6340  186           
\f

ncsuplst    81.06.22.   11.34.                                                    page     8

 7010  187          
 7020  188          
 7030  189          PROCEDURE refuse ( VAR m : reference; cause : result_range );
 7040  190            
 7050  191          BEGIN
 7060  192    1     ! 
 7070  193    2     ! LOCK m AS buf : flawshape DO
 7080  194    3     !   WITH buf DO
 7090  195    4     !     BEGIN
 7100  196    5     !     ! data:= head;
 7110  197    6     !     ! data.op_code:= m^.u4;
 7120  198    7     !     ! head.no_of_by:= refuse_length;
 7130  199    8     !     ! head.rec:= head.send;
 7140  200    9     !     ! head.send:= here;
 7150  201   10     !     ! head.result:= cause;
 7160  202   11     !     ! head.ts_add:= gettime;
 7170  203   12     !     ! 
 7180  204   13     !     ! sensesem ( ms, free_sem.w^);
 7190  205   14     !     ! IF NOT nil ( ms) THEN
 7200  206   15     !     !   BEGIN
 7210  207   16     !     !   ! LOCK ms AS new : flawshape DO
 7220  208   17     !     !   !   BEGIN
 7230  209   18     !     !   !   ! new:= buf;
 7240  210   19     !     !   !   ! new.head.rec:= addr(dc);
 7250  211   20     !     !   !   END;
 7260  212   21     !     !   ! xmit ( ms, copy_code);
 7270  213   22     !     !   END;
 7280  214   23     !     ! 
 7290  215   24     !     END;
 7300  216   25     ! xmit ( m, refuse_code);
 7310  217   26     ! 
 7320  218   27     END;
 7330  219          
 7340  220          
 7350  221           
\f

ncsuplst    81.06.22.   11.34.                                                    page     9

 8010  222          
 8020  223          PROCEDURE insert ( new: macroaddr; newstate: status );
 8030  224            
 8040  225          VAR   t: node_range;
 8050  226          BEGIN
 8060  227    1     ! 
 8070  228    2     ! IF ( new.dc_addr = here.macro.dc_addr ) AND
 8080  229    3     !   ( new.nc_addr = here.macro.nc_addr ) AND
 8090  230    4     !   ( new.ts_addr <> 0 )  THEN
 8100  231    5     !   BEGIN   (*  new is one of my ts   *)
 8110  232    6     !   ! addr(nodes+1).macro:= new;
 8120  233    7     !   ! t:= index(new.ts_addr);
 8130  234    8     !   ! IF t = max_node THEN
 8140  235    9     !   !   BEGIN
 8150  236   10     !   !   ! t:= nodes+1;
 8160  237   11     !   !   ! index(new.ts_addr):= t;
 8170  238   12     !   !   ! nodes:= t;
 8180  239   13     !   !   END;
 8190  240   14     !   ! IF msg^.u4 = ts_down THEN state(t):= down  ELSE
 8200  241   15     !   !   IF msg^.u4 = ts_up THEN state(t):= ready  ELSE
 8210  242   16     !   !     state(t):= newstate;
 8220  243   17     !   END;
 8230  244   18     ! 
 8240  245   19     END;
 8250  246          
 8260  247          
 8270  248           
\f

ncsuplst    81.06.22.   11.34.                                                    page    10

 9010  249          PROCEDURE update ( VAR msg: reference);
 9020  250            
 9030  251          BEGIN    (*      11.0 from dc    *)
 9040  252    1     ! 
 9050  253    2     ! LOCK msg AS buf: form11 DO
 9060  254    3     !   WITH buf DO
 9070  255    4     !     BEGIN
 9080  256    5     !     ! insert ( address, starting);
 9090  257    6     !     ! here:= buf.head.rec;
 9100  258    7     !     END;
 9110  259    8     ! answer ( msg, accepted, var_answ);
 9120  260    9     ! 
 9130  261   10     END;
 9140  262          
 9150  263           
\f

ncsuplst    81.06.22.   11.34.                                                    page    11

10010  264          
10020  265          
10030  266          PROCEDURE first ( VAR m : reference );
10040  267            
10050  268          VAR   res : byte;
10060  269            
10070  270          BEGIN
10080  271    1     ! 
10090  272    2     ! LOCK m AS buf : testshape DO
10100  273    3     !   WITH buf, head DO
10110  274    4     !     BEGIN
10120  275    5     !     ! IF ( m^.u4 = nodetest_code) AND             (*  12.0   from dc *)
10130  276    6     !     !   ( rec.macro.ts_addr = 0 ) AND
10140  277    7     !     !   ( send.macro.nc_addr = 0 ) AND
10150  278    8     !     !   ( send.macro.ts_addr = 0 ) THEN
10160  279    9     !     !   BEGIN
10170  280   10     !     !   ! here.macro:= rec.macro;
10180  281   11     !     !   ! periode:= abs ( peri);
10190  282   12     !     !   ! rest_time:= periode;
10200  283   13     !     !   ! addr(dc).macro.dc_addr:= here.macro.dc_addr;
10210  284   14     !     !   ! state(dc):= ready;
10220  285   15     !     !   ! cause:= not_ready;
10230  286   16     !     !   ! res:= nodetest_answ;
10240  287   17     !     !   END  ELSE
10250  288   18     !     !   BEGIN
10260  289   19     !     !   ! cause:= unknown_opcode;
10270  290   20     !     !   ! res:= refuse_code;
10280  291   21     !     !   END;
10290  292   22     !     END;
10300  293   23     ! 
10310  294   24     ! answer ( m, cause, res);
10320  295   25     ! 
10330  296   26     END;
10340  297          
10350  298          
10360  299           
\f

ncsuplst    81.06.22.   11.34.                                                    page    12

11010  300          
11020  301          PROCEDURE restart ( where: alarmnetaddr);
11030  302            
11040  303          BEGIN            (*  send 10.14 to dc     *)
11050  304    1     ! 
11060  305    2     ! wait ( ms, free_sem.w^);
11070  306    3     ! LOCK ms AS buf: note DO
11080  307    4     !   WITH buf, head DO
11090  308    5     !     BEGIN
11100  309    6     !     ! no_of_by:= ae_length;
11110  310    7     !     ! rec:= addr(dc);
11120  311    8     !     ! send:= here;
11130  312    9     !     ! update:= insert_code;
11140  313   10     !     ! result:= accepted;
11150  314   11     !     ! ts_add:= gettime;
11160  315   12     !     ! comp:= where;
11170  316   13     !     END;
11180  317   14     ! xmit ( ms, tablerequest);
11190  318   15     ! 
11200  319   16     END;
11210  320          
11220  321           
\f

ncsuplst    81.06.22.   11.34.                                                    page    13

12010  322          
12020  323          
12030  324          PROCEDURE broadcast (
12040  325            operation : byte;               (*  op code          *)
12050  326            who : alarmnetaddr;             (*  receiver         *)
12060  327            where : alarmnetaddr;           (*  component        *)
12070  328            c : integer                     (*  count            *)
12080  329            );
12090  330            
12100  331          BEGIN
12110  332    1     ! 
12120  333    2     ! wait ( ms, free_sem.w^);
12130  334    3     ! LOCK ms AS buf : note DO
12140  335    4     !   WITH buf, head DO
12150  336    5     !     BEGIN
12160  337    6     !     ! no_of_by:= bc_length;
12170  338    7     !     ! rec:= who;
12180  339    8     !     ! send:= here;
12190  340    9     !     ! update:= insert_code;
12200  341   10     !     ! ts_add:= gettime;
12210  342   11     !     ! comp:= where;
12220  343   12     !     ! cnt:= c
12230  344   13     !     END;
12240  345   14     ! 
12250  346   15     ! xmit ( ms, operation)
12260  347   16     ! 
12270  348   17     END;
12280  349          
12290  350          
12300  351          
12310  352           
\f

ncsuplst    81.06.22.   11.34.                                                    page    14

13010  353          
13020  354          PROCEDURE test_all;
13030  355            
13040  356          BEGIN                           (*  test all ts   *)
13050  357    1     ! 
13060  358    2     ! FOR ts:= 1 TO nodes DO
13070  359    3     !   BEGIN
13080  360    4     !   ! 
13090  361    5     !   ! IF state(ts) = sleep THEN         (*  answer missing   *)
13100  362    6     !   !   BEGIN
13110  363    7     !   !   ! state(ts):= down;
13120  364    8     !   !   ! FOR n:= 0 TO nodes DO
13130  365    9     !   !   !   IF n <> ts THEN
13140  366   10     !   !   !     broadcast ( ts_down, addr(n), addr(ts), 0);
13150  367   11     !   !   END;
13160  368   12     !   ! 
13170  369   13     !   ! wait ( ms, free_sem.w^);
13180  370   14     !   ! LOCK ms AS buf: testshape DO
13190  371   15     !   !   WITH buf, head DO
13200  372   16     !   !     BEGIN
13210  373   17     !   !     ! no_of_by:= test_length;
13220  374   18     !   !     ! rec:= addr(ts);
13230  375   19     !   !     ! send:= here;
13240  376   20     !   !     ! update:= insert_code;
13250  377   21     !   !     ! ts_add:= gettime;
13260  378   22     !   !     ! count ( tests(ts));
13270  379   23     !   !     ! testno:= tests(ts);
13280  380   24     !   !     ! peri:= periode+margin;
13290  381   25     !   !     END;
13300  382   26     !   ! IF state(ts) = ready THEN state(ts):= sleep;
13310  383   27     !   ! xmit ( ms, nodetest_code)
13320  384   28     !   ! 
13330  385   29     !   END
13340  386   30     END;
13350  387          
13360  388          
13370  389           
\f

ncsuplst    81.06.22.   11.34.                                                    page    15

14010  390          
14020  391            (*--------------------- exception for nc-sup -------------------------*)
14030  392          
14040  393          PROCEDURE exception ( cause : integer);
14050  394            
14060  395          VAR  switch: byte;
14070  396            
14080  397          BEGIN
14090  398    1     ! trace ( cause);        (*  shows where I was   *)
14100  399    2     ! 
14110  400    3     !   (*                 clear resources    *)
14120  401    4     ! IF NOT nil ( msg) THEN refuse ( msg, breaked);
14130  402    5     ! IF nil ( ms) THEN wait ( ms, free_sem.w^);
14140  403    6     ! 
14150  404    7     ! LOCK ms AS buf: testshape DO
14160  405    8     !   WITH buf, head DO
14170  406    9     !     BEGIN
14180  407   10     !     ! no_of_by:= label_size + 2;
14190  408   11     !     ! send:= addr(dc);
14200  409   12     !     ! testno:= cause
14210  410   13     !     END;
14220  411   14     ! answer ( ms, breaked, finis_code);
14230  412   15     ! 
14240  413   16     ! FOR h:= 1 TO no_nc_talk DO
14250  414   17     !   BEGIN
14260  415   18     !   ! wait ( ms, free_sem.w^);
14270  416   19     !   ! release ( ms)
14280  417   20     !   END;
14290  418   21     ! 
14300  419   22     !   (*                 exception loop   *)
14310  420   23     ! h:= 0;
14320  421   24     ! REPEAT
14330  422   25     ! ! wait ( msg, main_sem.w^);
14340  423   26     ! ! IF ownertest ( tickmess, msg) THEN
14350  424   27     ! !   release ( msg)
14360  425   28     ! ! ELSE
14370  426   29     ! !   refuse ( msg, breaked);
14380  427   30     ! ! h:= h+1;
14390  428   31     ! ! 
14400  429   32     ! ! IF h>2 THEN
14410  430   33     ! !   BEGIN            (*     autoload       *)
14420  431   34     ! !   ! readram ( switch, 10);
14430  432   35     ! !   ! IF switch DIV 16 = 6 THEN
14440  433   36     ! !   !   BEGIN
14450  434   37     ! !   !   ! writeram ( 6,0);   writeram ( 5,1);
14460  435   38     ! !   !   ! WHILE true DO ;
\f

ncsuplst    81.06.22.   11.34.                                                    page    16

14470  436   39     ! !   !   END
14480  437   40     ! !   END;
14490  438   41     ! UNTIL false
14500  439   42     ! 
14510  440   43     END;
14520  441          
14530  442          
14540  443           
\f

ncsuplst    81.06.22.   11.34.                                                    page    17

15010  444            (*-------------------- main program -----------------------------*)
15020  445          
15030  446        BEGIN
15040  447    1   ! testopen ( console, own.incname, opsem);
15050  448    2   ! testout ( console, version, al_env_version);
15060  449    3   ! 
15070  450    4   ! 
15080  451    5   ! 
15090  452    6   ! FOR ts:= 0 TO max_node DO
15100  453    7   !   BEGIN
15110  454    8   !   ! index(ts):= max_node;
15120  455    9   !   ! addr(ts).macro:= macroaddr(0,0,0);
15130  456   10   !   ! addr(ts).micro:= tss_mic_addr;
15140  457   11   !   ! state(ts):= down;
15150  458   12   !   ! tests(ts):= 0
15160  459   13   !   END;
15170  460   14   ! addr(dc).micro:= dc_erh_mic_addr;
15180  461   15   ! 
15190  462   16   ! FOR h:= 1 TO no_nc_talk DO
15200  463   17   !   BEGIN
15210  464   18   !   ! alloc ( msg, bufferpool, free_sem.s^);
15220  465   19   !   ! msg^.u3:= nc_route;
15230  466   20   !   ! signal( msg, free_sem.s^)
15240  467   21   !   END;
15250  468   22   ! 
15260  469   23   ! alloc ( clock_msg, clockpool, done.s^);
15270  470   24   ! clock_msg^.u1:= read_clock;
15280  471   25   ! clock_msg^.u3:= nc_route;
15290  472   26   ! 
15300  473   27   !   (*  wait for 12.00   *)
15310  474   28   ! REPEAT
15320  475   29   ! ! wait ( msg, main_sem.w^);
15330  476   30   ! ! CASE msg^.u3 OF
15340  477   31   ! ! ! dummy_route:    return ( msg);
15350  478   32   ! ! ! netc_route1:    return ( msg);      (*  refused  *)
15360  479   33   ! ! ! netc_route:     first ( msg);
15370  480   34   ! ! ! OTHERWISE        signal ( msg, net_sem^);
15380  481   35   ! ! END  (*  case  *)
15390  482   36   ! UNTIL state(dc) = ready;
15400  483   37   ! 
15410  484   38   ! restart ( here);
15420  485   39   ! alloc ( msg, tickmess, main_sem.s^);
15430  486   40   ! msg^.u1:= writetimer;
15440  487   41   ! msg^.u3:= delay1;
15450  488   42   ! msg^.u4:= delay2;
15460  489   43   ! sendtimer ( msg);
\f

ncsuplst    81.06.22.   11.34.                                                    page    18

15470  490   44   ! 
15480  491   45   !   (*q   trace ( 370);    (*  only for debug   *)
15490  492   46   !  
\f

ncsuplst    81.06.22.   11.34.                                                    page    19

16010  493   47   ! 
16020  494   48   !   (*------------------------ main loop ----------------------------------*)
16030  495   49   ! 
16040  496   50   ! REPEAT
16050  497   51   ! ! 
16060  498   52   ! ! wait ( msg, main_sem.w^);
16070  499   53   ! ! 
16080  500   54   ! ! IF ownertest ( tickmess, msg) THEN              (*  timer  *)
16090  501   55   ! !   BEGIN
16100  502   56   ! !   ! rest_time:= rest_time - 1;
16110  503   57   ! !   ! msg^.u3:= delay1;
16120  504   58   ! !   ! msg^.u4:= delay2;
16130  505   59   ! !   ! sendtimer ( msg);
16140  506   60   ! !   ! 
16150  507   61   ! !   ! IF rest_time <= 0 THEN                      (*  timeout    *)
16160  508   62   ! !   !   BEGIN
16170  509   63   ! !   !   !   <*      skip UNTIL  dc makes nodetest ---------------------------- *>
16180  510   64   ! !   !   ! IF state(dc) <> down THEN
16190  511   65   ! !   !   !   BEGIN
16200  512   66   ! !   !   !   ! state(dc):= down;
16210  513   67   ! !   !   !   ! FOR ts:= 1 TO nodes DO
16220  514   68   ! !   !   !   !   broadcast ( dc_down, addr(ts), addr(dc), 0);
16230  515   69   ! !   !   !   END;
16240  516   70   ! !   !   !   <* ----------------------------------------------------------------*>
16250  517   71   ! !   !   ! test_all;
16260  518   72   ! !   !   ! rest_time:= periode;
16270  519   73   ! !   !   ! 
16280  520   74   ! !   !   END    (*  timeout  *)
16290  521   75   ! !   END     (* timer    *)
16300  522   76   ! ! ELSE
16310  523   77   ! !   
16320  524   78   ! !   IF msg^.u3 = dummy_route THEN
16330  525   79   ! !     return ( msg)
16340  526   80   ! !   ELSE
16350  527   81   ! !     
16360  528   82   ! !      
\f

ncsuplst    81.06.22.   11.34.                                                    page    20

17010  529   83   ! !     
17020  530   84   ! !     BEGIN                        (*  other messages   *)
17030  531   85   ! !     ! 
17040  532   86   ! !     ! LOCK msg AS head: alarmlabel DO
17050  533   87   ! !     !   BEGIN
17060  534   88   ! !     !   ! who:= head.rec;
17070  535   89   ! !     !   ! from:= head.send.macro
17080  536   90   ! !     !   END;
17090  537   91   ! !     ! 
17100  538   92   ! !     ! IF who = here THEN             (*  for me    *)
17110  539   93   ! !     !   BEGIN
17120  540   94   ! !     !   ! CASE msg^.u4 OF
17130  541   95   ! !     !   ! ! 
17140  542   96   ! !     !   ! ! refuse_code:
17150  543   97   ! !     !   ! !   BEGIN
17160  544   98   ! !     !   ! !   ! LOCK msg AS buf: testshape DO
17170  545   99   ! !     !   ! !   !   WITH buf DO
17180  546  100   ! !     !   ! !   !     IF state(index(peri MOD 64)) >= sleep THEN
17190  547  101   ! !     !   ! !   !       BEGIN
17200  548  102   ! !     !   ! !   !       ! testout ( console, "msg to      ", peri);
17210  549  103   ! !     !   ! !   !       ! testout ( console, "returned    ", data(6));
17220  550  104   ! !     !   ! !   !       END;
17230  551  105   ! !     !   ! !   ! return ( msg)
17240  552  106   ! !     !   ! !   END;
17250  553  107   ! !     !   ! ! 
17260  554  108   ! !     !   ! ! #h20..#h23,
17270  555  109   ! !     !   ! ! #h26..#h29:
17280  556  110   ! !     !   ! !   BEGIN                              (*  broadcast    *)
17290  557  111   ! !     !   ! !   ! LOCK msg AS buf: note DO
17300  558  112   ! !     !   ! !   !   WITH buf DO
17310  559  113   ! !     !   ! !   !     BEGIN
17320  560  114   ! !     !   ! !   !     ! IF from = addr(dc).macro THEN
17330  561  115   ! !     !   ! !   !     !   BEGIN
17340  562  116   ! !     !   ! !   !     !   ! head.send.micro:= addr(dc).micro;
17350  563  117   ! !     !   ! !   !     !   ! IF ( msg^.u4 = nc_up ) AND
17360  564  118   ! !     !   ! !   !     !   !   ( comp = here ) THEN    loading:= false;
17370  565  119   ! !     !   ! !   !     !   END;
17380  566  120   ! !     !   ! !   !     ! FOR ts:= 0 TO nodes DO
17390  567  121   ! !     !   ! !   !     !   IF head.send <> addr(ts) THEN
17400  568  122   ! !     !   ! !   !     !     broadcast ( msg^.u4, addr(ts), comp, cnt)
17410  569  123   ! !     !   ! !   !     END;
17420  570  124   ! !     !   ! !   ! return ( msg);
17430  571  125   ! !     !   ! !   END;
17440  572  126   ! !     !   ! ! 
17450  573  127   ! !     !   ! !  
\f

ncsuplst    81.06.22.   11.34.                                                    page    21

18010  574  128   ! !     !   ! ! 
18020  575  129   ! !     !   ! ! ts_down,
18030  576  130   ! !     !   ! ! ts_up  :
18040  577  131   ! !     !   ! !   BEGIN                             (*  ts broadcast   *)
18050  578  132   ! !     !   ! !   ! LOCK msg AS buf: note DO
18060  579  133   ! !     !   ! !   !   WITH buf, head DO
18070  580  134   ! !     !   ! !   !     BEGIN
18080  581  135   ! !     !   ! !   !     ! 
18090  582  136   ! !     !   ! !   !     ! insert ( comp.macro, ready);
18100  583  137   ! !     !   ! !   !     ! 
18110  584  138   ! !     !   ! !   !     ! IF from = addr(dc).macro THEN head.send.micro:= addr(dc).micro;
18120  585  139   ! !     !   ! !   !     ! FOR ts:= 0 TO nodes DO
18130  586  140   ! !     !   ! !   !     !   IF head.send<> addr(ts) THEN
18140  587  141   ! !     !   ! !   !     !     broadcast ( msg^.u4, addr(ts), comp, cnt);
18150  588  142   ! !     !   ! !   !     END;
18160  589  143   ! !     !   ! !   ! return ( msg);
18170  590  144   ! !     !   ! !   ! 
18180  591  145   ! !     !   ! !   END;
18190  592  146   ! !     !   ! ! 
18200  593  147   ! !     !   ! ! var_code:
18210  594  148   ! !     !   ! !   IF from = addr(dc).macro THEN                      (*  11.0   *)
18220  595  149   ! !     !   ! !     update ( msg) ELSE
18230  596  150   ! !     !   ! !     refuse ( msg, unknown_sender);
18240  597  151   ! !     !   ! ! 
18250  598  152   ! !     !   ! !  
\f

ncsuplst    81.06.22.   11.34.                                                    page    22

19010  599  153   ! !     !   ! ! 
19020  600  154   ! !     !   ! ! nodetest_code:
19030  601  155   ! !     !   ! !   BEGIN                                      (*  12.0    *)
19040  602  156   ! !     !   ! !   ! IF from = addr(dc).macro THEN
19050  603  157   ! !     !   ! !   !   BEGIN
19060  604  158   ! !     !   ! !   !   ! LOCK msg AS buf: testshape DO
19070  605  159   ! !     !   ! !   !   !   periode:= abs ( buf.peri);
19080  606  160   ! !     !   ! !   !   ! rest_time:= periode;
19090  607  161   ! !     !   ! !   !   ! answer ( msg, accepted, nodetest_answ);
19100  608  162   ! !     !   ! !   !   ! IF state(dc) = down THEN
19110  609  163   ! !     !   ! !   !   !   BEGIN
19120  610  164   ! !     !   ! !   !   !   ! FOR ts:= 1 TO nodes DO
19130  611  165   ! !     !   ! !   !   !   !   broadcast ( dc_up, addr(ts), addr(dc), 0);
19140  612  166   ! !     !   ! !   !   !   END;
19150  613  167   ! !     !   ! !   !   ! IF loading THEN restart ( here);
19160  614  168   ! !     !   ! !   !   ! state(dc):= ready;
19170  615  169   ! !     !   ! !   !   ! test_all;
19180  616  170   ! !     !   ! !   !   ! rest_time:= periode;
19190  617  171   ! !     !   ! !   !   END
19200  618  172   ! !     !   ! !   ! ELSE
19210  619  173   ! !     !   ! !   !   refuse ( msg, unknown_sender)
19220  620  174   ! !     !   ! !   END;
19230  621  175   ! !     !   ! ! 
19240  622  176   ! !     !   ! ! 
19250  623  177   ! !     !   ! ! 
19260  624  178   ! !     !   ! !   <*  *>
19270  625  179   ! !     !   ! !   (*-------------- only for debug of own exception ------------------*)
19280  626  180   ! !     !   ! ! 
19290  627  181   ! !     !   ! ! #h0b:                                               (*  0.11    *)
19300  628  182   ! !     !   ! !   BEGIN
19310  629  183   ! !     !   ! !   ! h:= h DIV msg^.u1;        (*  if u1 = 0   *)
19320  630  184   ! !     !   ! !   ! exception ( msg^.u2);     (*  or use u2   *)
19330  631  185   ! !     !   ! !   END;
19340  632  186   ! !     !   ! ! 
19350  633  187   ! !     !   ! !   <*  *>
19360  634  188   ! !     !   ! ! 
19370  635  189   ! !     !   ! ! 
19380  636  190   ! !     !   ! !  
\f

ncsuplst    81.06.22.   11.34.                                                    page    23

20010  637  191   ! !     !   ! ! 
20020  638  192   ! !     !   ! ! nodetest_answ:                                 (*  12.1    *)
20030  639  193   ! !     !   ! !   BEGIN
20040  640  194   ! !     !   ! !   ! LOCK msg AS buf: testshape DO
20050  641  195   ! !     !   ! !   !   WITH buf DO
20060  642  196   ! !     !   ! !   !     BEGIN
20070  643  197   ! !     !   ! !   !     ! ts:= index(head.send.macro.ts_addr);
20080  644  198   ! !     !   ! !   !     ! IF ts <= nodes THEN     (*  found   *)
20090  645  199   ! !     !   ! !   !     !   BEGIN
20100  646  200   ! !     !   ! !   !     !   ! IF head.result = not_ready THEN
20110  647  201   ! !     !   ! !   !     !   !   BEGIN
20120  648  202   ! !     !   ! !   !     !   !   ! restart ( head.send);
20130  649  203   ! !     !   ! !   !     !   !   ! IF state(ts) >= sleep THEN              (*  ts autoloaded    *)
20140  650  204   ! !     !   ! !   !     !   !   !   FOR n:= 0 TO nodes DO
20150  651  205   ! !     !   ! !   !     !   !   !     IF n <> ts THEN
20160  652  206   ! !     !   ! !   !     !   !   !       broadcast ( ts_down, addr(n), addr(ts), 0);
20170  653  207   ! !     !   ! !   !     !   !   ! state(ts):= starting;
20180  654  208   ! !     !   ! !   !     !   !   END  ELSE
20190  655  209   ! !     !   ! !   !     !   !   BEGIN
20200  656  210   ! !     !   ! !   !     !   !   ! IF state(ts) = down THEN
20210  657  211   ! !     !   ! !   !     !   !   !   BEGIN
20220  658  212   ! !     !   ! !   !     !   !   !   ! FOR n:= 0 TO nodes DO
20230  659  213   ! !     !   ! !   !     !   !   !   !   IF n <> ts THEN
20240  660  214   ! !     !   ! !   !     !   !   !   !     broadcast ( ts_up, addr(n), addr(ts), 0)
20250  661  215   ! !     !   ! !   !     !   !   !   END;
20260  662  216   ! !     !   ! !   !     !   !   ! state(ts):= ready;
20270  663  217   ! !     !   ! !   !     !   !   END;
20280  664  218   ! !     !   ! !   !     !   ! IF tests(ts) <> testno THEN
20290  665  219   ! !     !   ! !   !     !   !   BEGIN
20300  666  220   ! !     !   ! !   !     !   !   ! testout ( console, "send no.    ", tests(ts));
20310  667  221   ! !     !   ! !   !     !   !   ! testout ( console, "received    ", testno);
20320  668  222   ! !     !   ! !   !     !   !   END;
20330  669  223   ! !     !   ! !   !     !   !   (*  look at data(2..8)    *)
20340  670  224   ! !     !   ! !   !     !   END
20350  671  225   ! !     !   ! !   !     ! ELSE
20360  672  226   ! !     !   ! !   !     !   insert ( from, starting);
20370  673  227   ! !     !   ! !   !     END;
20380  674  228   ! !     !   ! !   ! return ( msg);
20390  675  229   ! !     !   ! !   END;
20400  676  230   ! !     !   ! ! 
20410  677  231   ! !     !   ! ! connect_code:                                    (*  12.8    *)
20420  678  232   ! !     !   ! !   BEGIN
20430  679  233   ! !     !   ! !   ! answer ( msg, accepted, connect_answ)
20440  680  234   ! !     !   ! !   END
20450  681  235   ! !     !   ! !   
20460  682  236   ! !     !   ! !   OTHERWISE
\f

ncsuplst    81.06.22.   11.34.                                                    page    24

20470  683  237   ! !     !   ! !   refuse ( msg, unknown_opcode)
20480  684  238   ! !     !   ! !   
20490  685  239   ! !     !   ! END  (*  case  *)
20500  686  240   ! !     !   END  (*  who = here   *)
20510  687  241   ! !     !   
20520  688  242   ! !     !    
\f

ncsuplst    81.06.22.   11.34.                                                    page    25

21010  689  243   ! !     !   
21020  690  244   ! !     ! ELSE
21030  691  245   ! !     !   
21040  692  246   ! !     !   IF ( msg^.u3 = netc_route1 ) THEN          (*  refused by netc    *)
21050  693  247   ! !     !     return ( msg)   ELSE
21060  694  248   ! !     !     
21070  695  249   ! !     !     IF ( msg^.u3 = netc_route2 ) THEN         (*  answer from netc   *)
21080  696  250   ! !     !       signal ( msg, net_sem^)
21090  697  251   ! !     !     ELSE
21100  698  252   ! !     !       
21110  699  253   ! !     !       IF who.micro = netc_mic_addr THEN       (*  to netc     *)
21120  700  254   ! !     !         BEGIN
21130  701  255   ! !     !         ! msg^.u3:= netc_route1;
21140  702  256   ! !     !         ! signal ( msg, net_sem^);
21150  703  257   ! !     !         END  ELSE
21160  704  258   ! !     !         
21170  705  259   ! !     !         IF ( from = addr(dc).macro )
21180  706  260   ! !     !           AND ( msg^.u4 = var_code)
21190  707  261   ! !     !           AND ( who.micro = tss_mic_addr ) THEN
21200  708  262   ! !     !           update ( msg)
21210  709  263   ! !     !         ELSE
21220  710  264   ! !     !           refuse ( msg, unknown_receiver);
21230  711  265   ! !     END
21240  712  266   ! !     
21250  713  267   ! UNTIL  false;
21260  714  268   ! 
21270  715  269   END .      (*  of nc - supervisor   *)
21280  716        
21290  717        
21300  718        
\f

ncsuplst    81.06.22.   11.34.                                                    page    26

           0   24*   62*  102*  111*  111*  111*  111*  230   276   277   278   364   366   420   434 
              452   455   455   455   458   507   514   566   585   611   650   652   658   660 
           1   23*   43*   95*   96*  232   236   358   413   427   434   462   502   513   610 
           2   43*   44*   44*   45*   50*   52*   55*  407   429 
           3   86*
           4   45*   46*
           5   51*  115*  116*  434 
           6   53*  432   434   549 
           7   21*
          10   47*  431 
          16  432 
          60  115*  116*
          63   22*
          64  546 
         250   49*
abs           281   605 
accepted      259   313   607   679 
addr          105*  210   232   283   310   366   366   374   408   455   456   460   514   514   560 
              562   567   568   584   584   586   587   594   602   611   611   652   652   660   660 
              705 
address        79*  256 
adr           127*  131*
ae_length      46*  309 
alarmlabel     66*   71*   78*   84*  174   532 
alarmnetaddr   72*  105*  110*  111*  301*  326*  327*
alloc         464   469   485 
al_env_version                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              448 
answer        168*  259   294   411   607   679 
as            145:  174:  193:  207:  253:  272:  306:  334:  370:  404:  532:  544:  557:  578:  604:
              640:
bc_length      45*  337 
boolean       118*
breaked       401   411   426 
broadcast     324*  366   514   568   587   611   652   660 
buf           145:  146   193:  194   209   253:  254   257   272:  273   306:  307   334:  335   370:
              371   404:  405   544:  545   557:  558   578:  579   604:  605   640:  641 
bufferpool     97*  464 
byte          127*  154*  171*  268*  325*  395*
c             328*  343 
cause         121*  170*  179   189*  201   285=  289=  294   393*  398   409 
clockpool      96*  469 
clock_form    139*  145 
clock_msg      99*  143   144   145:  469   470   471 
\f

ncsuplst    81.06.22.   11.34.                                                    page    27

cnt            73*  343=  568   587 
comp           72*  315=  342=  564   568   582   587 
connect_answ   40*  679 
connect_code   39*  677:
console       123*  447   448   548   549   666   667 
copy_code      26*  212 
count         378 
data           66*   86*  196=  197   549 
dc             24*  210   283   284   310   408   460   482   510   512   514   560   562   584   584 
              594   602   608   611   614   705 
dc_addr       228   228   283=  283 
dc_down        28*  514 
dc_erh_mic_addr                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              460 
dc_up          29*  611 
delay1         49*  487   503 
delay2         50*  488   504 
done            7*  144   469 
down           60*  240   363   457   510   512   608   656 
dummy_route   477:  524 
exception     393*  630 
external      128*  132*
false         438   564   713 
finis_code     41*  411 
first         266*  479 
flawshape      64*  193   207 
form11         77*  253 
free_sem        6*  204   305   333   369   402   415   464   466 
from          113*  535=  560   584   594   602   672   705 
gettime       136*  146=  180   202   314   341   377 
h             120*  413=  420=  427=  427   429   462=  629=  629 
h0b           627:
h10            26*
h12            27*
h20            28*  554 
h21            29*
h22            30*
h23            31*  554 
h24            32*
h25            33*
h26           555 
h29           555:
hae            34*
hb0            35*
\f

ncsuplst    81.06.22.   11.34.                                                    page    28

hb1            36*
hc0            37*
hc1            38*
hc8            39*
hc9            40*
hce            41*
head           65*   71*   78*   84*  174:  175   196   198   199   199   200   201   202   210   257 
              273   307   335   371   405   532:  534   535   562   567   579   584   586   643   646 
              648 
here          110*  178   200   228   229   257=  280   283   311   339   375   484   538   564   613 
incname       447 
index         104*  233   237=  454=  546   643 
insert        223*  256   582   672 
insert_code   312   340   376 
integer        73*   85*   86*  107*  115*  116*  120*  127*  131*  328*  393*
label_size     43*   44*   45*   46*   47*  407 
last_node      22*   23*
loading       118*  564=  613 
lock          145:  174:  193:  207:  253:  272:  306:  334:  370:  404:  532:  544:  557:  578:  604:
              640:
m             154*  157   158   159   160   169*  174:  182   189*  193:  197   216   266*  272:  275 
              294 
macro         228   229   232=  276   277   278   280=  280   283   283   455=  535   560   582   584 
              594   602   643   705 
macroaddr      79*  111*  113*  223*  455 
main_sem        5*  422   475   485   498 
margin         51*  380 
max_node       23*   62*  234   452   454 
micro         456=  460=  562=  562   584=  584   699   707 
ms            100*  204   205   207:  212   305   306:  317   333   334:  346   369   370:  383   402 
              402   404:  411   415   416 
msg           100*  240   241   249*  253:  259   401   401   422   423   424   426   464   465   466 
              475   476   477   478   479   480   485   486   487   488   489   498   500   503   504 
              505   524   525   532:  540   544:  551   557:  563   568   570   578:  587   589   595 
              596   604:  607   619   629   630   640:  674   679   683   692   693   695   696   701 
              702   706   708   710 
n             102*  364=  365   366   650=  651   652   658=  659   660 
ncsupervisor    3*
nc_addr       229   229   277 
nc_down        30*
nc_route      158   465   471 
nc_up          31*  563 
netc_mic_addr                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              699 
\f

ncsuplst    81.06.22.   11.34.                                                    page    29

netc_route    479:
netc_route1   478:  692   701 
netc_route2   695 
net_sem         8*  160   480   696   702 
new           207:  209=  210   223*  228   229   230   232   233   237 
newstate      223*  242 
nodes         102*  232   236   238=  358   364   513   566   585   610   644   650   658 
nodetest_answ                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               38*  286   607   638:
nodetest_code                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               37*  275   383   600:
node_range     62*  102*  104*  104*  105*  106*  107*  225*
note           70*  306   334   557   578 
not_ready     285   646 
no_nc_talk     21*   97*  413   462 
no_of_by      198=  309=  337=  373=  407=
oper          171*  182 
operation     325*  346 
opsem           4*  447 
op_code       197=
own           447 
ownertest     423   500 
peri           85*  281   380=  546   548   605 
periode       115*  281=  282   380   518   605=  606   616 
pool           95*   96*   97*
process         3*
readram       127*  431 
ready          60*  241   284   382   482   582   614   662 
read_clock     52*  470 
rec           177=  199=  210=  257   276   280   310=  338=  374=  534 
reference     100*  154*  169*  189*  249*  266*
refuse        189*  401   426   596   619   683   710 
refuse_code    27*  216   290   542:
refuse_length                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               44*  198 
release       416   424 
res           268*  286=  290=  294 
restart       301*  484   613   648 
rest_time     116*  282=  502=  502   507   518=  606=  616=
result        179=  201=  313=  646 
result_range  121*  170*  189*
return        477   478   525   551   570   589   674   693 
s             464   466   469   485 
sempointer      4*    9*
\f

ncsuplst    81.06.22.   11.34.                                                    page    30

send          177   178=  199   200=  277   278   311=  339=  375=  408=  535   562   567   584   586 
              643   648 
sendtimer     489   505 
sensesem      204 
signal        143   160   466   480   696   702 
size_listen    43*
sleep          60*  361   382   546   649 
starting       60*  256   653   672 
state         106*  240=  241=  242=  284=  361   363=  382   382=  457=  482   510   512=  546   608 
              614=  649   653=  656   662=
status         60*  106*  223*
switch        395*  431   432 
t             225*  233=  234   236=  237   238   240   241   242 
tablerequest   34*  317 
testno         85*  379=  409=  664   667 
testopen      447 
testout       448   548   549   666   667 
tests         107*  378   379   458=  664   666 
testshape      83*   97*  272   370   404   544   604   640 
test_all      354*  517   615 
test_length    47*  373 
tickmess       95*  423   485   500 
time          139*  146 
timeout_sem     9*  143 
trace         398 
true          118*  435 
ts            102*  358=  361   363   365   366   374   378   379   382   382   452=  454   455   456 
              457   458   513=  514   566=  567   568   585=  586   587   610=  611   643=  644   649 
              651   652   653   656   659   660   662   664   666 
tss_mic_addr  456   707 
ts_add        180=  202=  314=  341=  377=
ts_addr       230   233   237   276   278   643 
ts_down        32*  240   366   575:  652 
ts_pointer      5*    6*    7*
ts_time        96*  136*  139*
ts_up          33*  241   576:  660 
u1            157=  470=  486=  629 
u2            630 
u3            158=  465=  471=  476   487=  503=  524   692   695   701=
u4            159=  197   240   241   275   488=  504=  540   563   568   587   706 
u4val         154*  159 
unknown_opcode                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              289   683 
unknown_receiver                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              710 
\f

ncsuplst    81.06.22.   11.34.                                                    page    31

unknown_sender                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              596   619 
update        249*  312=  340=  376=  595   708 
var_answ       36*  259 
var_code       35*  593:  706 
version        14*  448 
w             127*  131*  144   204   305   333   369   402   415   422   475   498 
wait          144   305   333   369   402   415   422   475   498 
where         301*  315   327*  342 
who           109*  326*  338   534=  538   699   707 
words          43*   86*
write          55*  157 
writeram      131*  434   434 
writetimer     53*  486 
xmit          154*  182   212   216   317   346   383 
zone          123*
\f

ncsuplst    81.06.22.   11.34.                                                    page    32

AND                8
ARRAY              5
BEGIN             59
CASE               2
CONST              2
DIV                3
DO                40
ELSE              15
END               66
FOR               11
FUNCTION           1
IF                40
MOD                1
NIL                3
NOT                2
OF                 9
OTHERWISE          2
PACKED             4
PROCEDURE         12
RECORD             5
REPEAT             3
THEN              40
TO                11
TYPE               2
UNTIL              3
VAR               14
WHILE              1
WITH              12
 nc supervisor
81.06.22.      11.35.                         pascal80     version 1981.04.01


   name        headline beginline endline  appetite(words) 

   gettime        139       143     146  :       9            
   xmit           156       157     160  :       5            
   answer         173       174     183  :      18            
   refuse         191       193     218  :      18            
   insert         225       231     245  :       6            
   update         251       253     261  :      14            
   first          268       272     296  :      20            
   restart        303       305     319  :      20            
   broadcast      331       333     346  :      20            
   test_all       356       358     386  :      25            
   exception      395       398     440  :      19            
   ncsupervisor    14       447     715  :     400            

 code: 8 . 362  = 6762 bytes


end of PASCAL80 compilation 

end
blocksread = 53
«eof»