DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

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

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦dcdb4cc34⟧ TextFile

    Length: 87552 (0x15600)
    Types: TextFile
    Names: »tssuplst«

Derivation

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

TextFile

\f

tssuplst    81.06.16.   09.17.                                                    page     1

   10    1           
\f

tssuplst    81.06.16.   09.17.                                                    page     2

 1010    2            (*----------------------------------------------------*)
 1020    3            (*                                                    *)
 1030    4            (*         ts   supervisor                            *)
 1040    5            (*                                                    *)
 1050    6            (*----------------------------------------------------*)
 1060    7          
 1070    8        PROCESS tssupervisor (
 1080    9          opsem: sempointer;             (*  allocator, operator       *)
 1090   10          VAR sem : !ts_pointer_vector        (*  ts semaphores             *)
 1100   11          );
 1110   12          
 1120   13        CONST
 1130   14          version= "vers  3.13 /";
 1140   15          
 1150   16            (*---------------------- externals -------------------------------*)
 1160   17          
 1170   18        PROCESS timout ( opsem: sempointer;
 1180   19          VAR tim: !ts_pointer; t, m: integer );
 1190   20        EXTERNAL;
 1200   21        
 1210   22          <*  PROCESS tsconnector ( opsem: sempointer;
 1220   23          VAR tss, dc, nc, lam, tim, com : !sempointer;
 1230   24          VAR net, s1, s2, s3, s4: !ts_pointer );
 1240   25          EXTERNAL;   *>
 1250   26        
 1260   27        PROCESS at_handler ( opsem: sempointer;
 1270   28          VAR dca, tsa : macroaddr;
 1280   29          VAR sem : !ts_pointer_vector );
 1290   30        EXTERNAL;
 1300   31        
 1310   32        PROCESS vc_handler ( opsem: sempointer;
 1320   33          VAR dca, tsa : macroaddr;
 1330   34          VAR sem : !ts_pointer_vector );
 1340   35        EXTERNAL;
 1350   36        
 1360   37        
 1370   38        PROCESS lam ( opsem: sempointer;
 1380   39          pu, level: integer;
 1390   40          VAR main_sem: !ts_pointer
 1400   41          );
 1410   42        EXTERNAL;
 1420   43         
\f

tssuplst    81.06.16.   09.17.                                                    page     3

 2010   44        CONST
 2020   45          
 2030   46          maxroute = 12;            (*  for u3 routing    *)
 2040   47          
 2050   48        TYPE    (*----------------- options ------------------------------*)
 2060   49          
 2070   50          grouptable = ARRAY (func_grp) OF integer;
 2080   51          modulref = ( netc, vch, ath, traffic, nc, dc, tss, dummy, empty );
 2090   52          modulident = ARRAY (netc..ath) OF byte;
 2100   53          modultable = ARRAY (modulref) OF integer;
 2110   54          modulstate = ARRAY (modulref) OF boolean;
 2120   55          modulroute = ARRAY (0..maxroute) OF modulref;
 2130   56          leveltab  = ARRAY (0..max_lam+1) OF byte;
 2140   57          
 2150   58        CONST     (*-------------- options -------------------------------*)
 2160   59          
 2170   60          traffic_id = 24;                 (*  for time_out        *)
 2180   61          nc_ident   = 25;
 2190   62          dc_ident   = 26;
 2200   63          
 2210   64          microadr = modultable ( netc_mic_addr, vch_mic_addr, ath_mic_addr,
 2220   65                                 traffic_id, nc_ident, dc_ident, 0, 0, 0  );
 2230   66          
 2240   67          book_id = modulident(1,2,3);
 2250   68          
 2260   69          interval = modultable(tss_netc_time,tss_vch_time,tss_ath_time,
 2270   70                                tss_nc_ltime,tss_nc_stime,tss_dc_stime,-1,-1,-1);
 2280   71          
 2290   72          from = modulroute(tss,tss,netc,netc,ath,ath,4***vch,3***tss);
 2300   73          
 2310   74          u3val= modulident(netc_route1, netc_route, netc_route);
 2320   75          
 2330   76          
 2340   77           
\f

tssuplst    81.06.16.   09.17.                                                    page     4

 3010   78            (*-------------------- op codes ---------------------------------*)
 3020   79          
 3030   80          log_code   = #h00;        (*   0.0   *)
 3040   81          nb_code    = #h10;        (*   1.0   *)
 3050   82          refuse_code= #h12;        (*   1.2   *)
 3060   83          dc_down    = #h20;        (*   2.0   *)
 3070   84          dc_up      = #h21;        (*   2.1   *)
 3080   85          nc_down    = #h22;        (*   2.2   *)
 3090   86          nc_up      = #h23;        (*   2.3   *)
 3100   87          ts_down    = #h24;        (*   2.4   *)
 3110   88          ts_up      = #h25;        (*   2.5   *)
 3120   89          vc_down    = #h26;        (*   2.6   *)
 3130   90          vc_up      = #h27;        (*   2.7   *)
 3140   91          at_down    = #h28;        (*   2.8   *)
 3150   92          at_up      = #h29;        (*   2.9   *)
 3160   93          newlam_code= #h9c;        (*   9.12  *)
 3170   94          anslam_code= #h9d;        (*   9.13  *)
 3180   95          new_addr_code= #hb0;      (*   11.0   *)
 3190   96          new_ans_code = #hb1;      (*   11.1   *)
 3200   97          nodetest_code= #hc0;      (*   12.0   *)
 3210   98          nodeans_code= #hc1;       (*   12.1   *)
 3220   99          input_code  = #hc5;       (*   12.5   *)
 3230  100          contest_code= #hc8;       (*   12.8   *)
 3240  101          conansw_code= #hc9;       (*   12.9   *)
 3250  102          
 3260  103            (*---------------------- other constants -------------------------*)
 3270  104          
 3280  105          maxno = 2*2*2*2;                  (*  4 bits   *)
 3290  106          read_clock = 2;
 3300  107          write  = 2;
 3310  108          by_father = 47;               (*  break parameter      *)
 3320  109          forever = false;
 3330  110          label_length = label_size;          (*  size in words, length in bytes  *)
 3340  111          logleng = 2*size_supp -(4+2+label_length);
 3350  112          rawleng = 2*size_listen - 2;
 3360  113          free_sem_no = com_pool;            (*  free listen buffers are here      *)
 3370  114          queue = tssup_int1;
 3380  115          done = tssup_int2;
 3390  116          supp_sem_no = tssup_int3;            (*  log buffers              *)
 3400  117          
 3410  118           
\f

tssuplst    81.06.16.   09.17.                                                    page     5

 4010  119          
 4020  120            (*------------------------ message formats --------------------------*)
 4030  121          
 4040  122        TYPE
 4050  123          
 4060  124          testshape = PACKED RECORD        (*  for nodetest  *)
 4070  125                             !  head: alarmlabel;
 4080  126                             !  data: ARRAY (1..5) OF integer
 4090  127                             END;
 4100  128          
 4110  129          
 4120  130          
 4130  131          flawshape = PACKED RECORD        (*  for 1.0 and 1.2    *)
 4140  132                             !  head : alarmlabel;
 4150  133                             !  data : alarmlabel
 4160  134                             END;
 4170  135          
 4180  136          
 4190  137          
 4200  138          note = PACKED RECORD             (*  for broadcast  *)
 4210  139                        !  head: alarmlabel;
 4220  140                        !  component: alarmnetaddr;
 4230  141                        !  count: integer
 4240  142                        END;
 4250  143          
 4260  144          
 4270  145          
 4280  146          lammess = PACKED RECORD              (*  for new lam         *)
 4290  147                           !  head: alarmlabel;
 4300  148                           !  lam_num,
 4310  149                           !  lam_level : integer
 4320  150                           END;
 4330  151          
 4340  152          
 4350  153           
\f

tssuplst    81.06.16.   09.17.                                                    page     6

 5010  154          
 5020  155            (*------------------ variables section ------------------------*)
 5030  156          
 5040  157        VAR
 5050  158          
 5060  159          who,
 5070  160          here : alarmnetaddr;         (*  my own addr updated by 11.00     *)
 5080  161          debug : integer:= 1;         (*  controls testoutput        *)
 5090  162          cv,                          (*  value of create                *)
 5100  163          lost,                        (*  num of loast messages          *)
 5110  164          quelen,                      (*  actual queuelength               *)
 5120  165          maxqueue,                    (*  max queuelength                  *)
 5130  166          queput,                      (*  number of queings                *)
 5140  167          nodetest_cnt : integer:=0;   (*  numb of nodetests send  *)
 5150  168          running : modulstate := modulstate(4***true, false, false, 3***true);
 5160  169          ms1,                         (*  a free buffer                 *)
 5170  170          ms : reference;              (*  mess arrived                  *)
 5180  171          console : zone;              (**debug           for output    **)
 5190  172          
 5200  173            (*----------------- for ts modules ----------------------*)
 5210  174          
 5220  175          no : ARRAY (netc..ath) OF integer;
 5230  176          suppool: pool no_req_supp OF ARRAY (1..size_supp) OF integer;
 5240  177          lamname : alfa := "lam00       ";
 5250  178          leveltable : leveltab := leveltab((max_lam+2) *** 0);
 5260  179          proc_lam : ARRAY(0..max_lam) OF shadow;
 5270  180          proc_timeout,
 5280  181          proc_vchan,
 5290  182          proc_athan : shadow;
 5300  183          
 5310  184            (*----------------- for timing ---------------------------*)
 5320  185          
 5330  186          nc_long, nc_short,           (*  timeouts from 11.0             *)
 5340  187          cnt : integer;
 5350  188          netaddr: ARRAY (nc..dc) OF alarmnetaddr;
 5360  189          module: modulref;
 5370  190          t_out,                       (*  module timeouts   *)
 5380  191          t_up : ARRAY (netc..dc) OF reference;      (*  book and update  *)
 5390  192          u_pool: pool no_tss_tim OF updates;
 5400  193          t_pool: pool no_tss_tim OF timers;
 5410  194          
 5420  195          clockpool: pool 1 OF ts_time;          (**demo            **)
 5430  196          clock_msg: reference;
 5440  197          
 5450  198            (*---------------- end of data section -----------------------*)
 5460  199           
\f

tssuplst    81.06.16.   09.17.                                                    page     7

 6010  200            <*q   q*>
 6020  201            (*------------------------ display -----------------------------*)
 6030  202          
 6040  203          PROCEDURE display ( VAR msg: reference);     (*  write contents  *)
 6050  204          CONST
 6060  205            lastword = 16;
 6070  206          TYPE
 6080  207            abuf = RECORD  w: ARRAY(1..lastword) OF integer  END;
 6090  208          VAR
 6100  209            i,m : integer;
 6110  210          BEGIN
 6120  211    1     ! LOCK msg AS buf: abuf DO
 6130  212    2     !   WITH buf DO
 6140  213    3     !     BEGIN
 6150  214    4     !     ! m:= (w(1)+1) DIV 2;
 6160  215    5     !     ! IF m<7 THEN m:= 7;
 6170  216    6     !     ! IF m>lastword THEN m:=lastword;
 6180  217    7     !     ! FOR i:= 1 TO m DO testout ( console,"  data      ", w(i));
 6190  218    8     !     END;
 6200  219    9     END;
 6210  220          
 6220  221            <*q  q*>
 6230  222          
 6240  223           
\f

tssuplst    81.06.16.   09.17.                                                    page     8

 7010  224            (*------------------------ gettime -----------------------------*)
 7020  225          
 7030  226          FUNCTION gettime : ts_time;
 7040  227          TYPE
 7050  228            clock_form = RECORD  time: ts_time  END;
 7060  229          BEGIN
 7070  230    1     ! signal ( clock_msg, sem(timeout_sem_no).s^);
 7080  231    2     ! wait   ( clock_msg, sem(done).w^);
 7090  232    3     ! LOCK     clock_msg AS buf : clock_form DO  gettime:= buf.time
 7100  233    4     END;
 7110  234          
 7120  235           
\f

tssuplst    81.06.16.   09.17.                                                    page     9

 8010  236          
 8020  237            (*--------------------- odd ------------------------------------*)
 8030  238          
 8040  239          FUNCTION odd ( number: integer ) : boolean;
 8050  240          BEGIN
 8060  241    1     ! odd:= number MOD 2 = 1
 8070  242    2     END;
 8080  243          
 8090  244          
 8100  245          
 8110  246          
 8120  247           
\f

tssuplst    81.06.16.   09.17.                                                    page    10

 9010  248            (*---------------------- send up ---------------------------*)
 9020  249          
 9030  250          
 9040  251          PROCEDURE send_up (        (*  signals to net-con   *)
 9050  252            VAR msg : reference;   (*  mess to be send  *)
 9060  253            operation : byte );    (*  op code          *)
 9070  254          BEGIN
 9080  255    1     ! 
 9090  256    2     ! msg^.u1:= write;
 9100  257    3     ! msg^.u3:= tss_route;
 9110  258    4     ! msg^.u4:= operation;
 9120  259    5     ! IF ( debug MOD 16 ) >= 8 THEN display ( msg);
 9130  260    6     ! signal ( msg, sem(netc_sem_no).s^ );
 9140  261    7     END;
 9150  262          
 9160  263          
 9170  264           
\f

tssuplst    81.06.16.   09.17.                                                    page    11

10010  265            (*------------------------ to queue ------------------------------*)
10020  266          
10030  267          PROCEDURE to_queue ( VAR msg : reference );
10040  268          BEGIN
10050  269    1     ! count ( queput);
10060  270    2     ! quelen:= quelen+1;
10070  271    3     ! IF quelen > maxqueue THEN maxqueue:= quelen;
10080  272    4     ! signal ( msg, sem(queue).s^)
10090  273    5     END;
10100  274          
10110  275           
\f

tssuplst    81.06.16.   09.17.                                                    page    12

11010  276            <*  -- only used IN nc
11020  277            (*---------------------- nodetest --------------------------*)
11030  278            
11040  279            PROCEDURE nodetest (
11050  280            node : modulref );      (*  node to be tested  *)
11060  281            
11070  282            VAR
11080  283            try : reference;             (*  node test message  *)
11090  284            
11100  285            BEGIN
11110  286            sensesem ( try, sem(free_sem_no).w^);
11120  287            IF NOT nil ( try) THEN
11130  288            BEGIN
11140  289            nodetest_cnt:= nodetest_cnt+1;
11150  290            LOCK try AS buf : testshape DO
11160  291            BEGIN
11170  292            WITH buf, head DO
11180  293            BEGIN
11190  294            no_of_by:= testlength;
11200  295            rec:= netaddr(node);
11210  296            send:= here;
11220  297            result:= 0;
11230  298            ts_add:= gettime;
11240  299            END;
11250  300            buf.data(1):= nodetest_cnt;
11260  301            END;
11270  302            send_up ( try, nodetest_code);
11280  303            timerupdate ( t_up(node), interval(node),
11290  304            sem(timeout_sem_no).s^, sem(done).w^ )
11300  305            END
11310  306            END;
11320  307            
11330  308            *>
11340  309           
\f

tssuplst    81.06.16.   09.17.                                                    page    13

12010  310            (*---------------------- broadcast -------------------------*)
12020  311          
12030  312          PROCEDURE broadcast (             (*  send a broadcast message  *)
12040  313            VAR msg : reference;            (*  used for message       *)
12050  314            element : alarmnetaddr;         (*  unit in question   *)
12060  315            cnt : integer;                  (*  counter in datapart       *)
12070  316            operation: byte;                (*  op code            *)
12080  317            recip : modulref);              (*  reveiver           *)
12090  318            
12100  319          CONST
12110  320            broadlength = label_length+6;
12120  321            
12130  322          BEGIN
12140  323    1     ! LOCK msg AS buf : note DO
12150  324    2     !   WITH buf, head DO
12160  325    3     !     BEGIN
12170  326    4     !     ! no_of_by:= broadlength;
12180  327    5     !     ! IF recip = netc THEN rec:= netaddr(nc) ELSE
12190  328    6     !     !   BEGIN
12200  329    7     !     !   ! rec:= here;
12210  330    8     !     !   ! rec.micro:= microadr(recip)
12220  331    9     !     !   END;
12230  332   10     !     ! send:= here;
12240  333   11     !     ! update:= insert_code;
12250  334   12     !     ! result:= accepted;
12260  335   13     !     ! op_code:= operation;
12270  336   14     !     ! ts_add:= gettime;
12280  337   15     !     ! component:= element;
12290  338   16     !     ! count:= cnt
12300  339   17     !     END;
12310  340   18     ! msg^.u1:= write;
12320  341   19     ! IF recip = netc THEN msg^.u3:= tss_route ELSE msg^.u3:= netc_route1;
12330  342   20     ! msg^.u4:= operation;
12340  343   21     ! signal ( msg, sem(no(recip)).s^ )
12350  344   22     !   (*  end  *)
12360  345   23     END;
12370  346          
12380  347           
\f

tssuplst    81.06.16.   09.17.                                                    page    14

13010  348          
13020  349            (*--------------------- start timeout -------------------------*)
13030  350          
13040  351          PROCEDURE start_timeout;
13050  352          BEGIN
13060  353    1     ! IF nil ( proc_timeout ) THEN
13070  354    2     !   BEGIN
13080  355    3     !   ! cv:= link ("timout      ", timout );
13090  356    4     !   ! cv:= create ( "timout      ",
13100  357    5     !   ! timout ( opsem,
13110  358    6     !   ! sem(timeout_sem_no), time_out_unit, timeout_l),
13120  359    7     !   ! proc_timeout, tim_size);
13130  360    8     !   ! IF cv = 0 THEN  start (  proc_timeout, tim_pri)
13140  361    9     !   ! ELSE
13150  362   10     !   !   BEGIN
13160  363   11     !   !   ! testout ( console,"timeoutstart", cv);
13170  364   12     !   !   ! cv:= unlink ( timout)
13180  365   13     !   !   END
13190  366   14     !   END
13200  367   15     END;
13210  368          
13220  369          
13230  370           
\f

tssuplst    81.06.16.   09.17.                                                    page    15

14010  371            (*------------------- start lam --------------------------------*)
14020  372          
14030  373          PROCEDURE start_lam ( nr, level: byte );
14040  374            
14050  375          BEGIN
14060  376    1     ! 
14070  377    2     ! IF nil ( proc_lam(nr)) THEN
14080  378    3     !   BEGIN
14090  379    4     !   ! lamname(4):= chr ( ord("0") + nr DIV 10);
14100  380    5     !   ! lamname(5):= chr ( ord("0") + nr MOD 10);
14110  381    6     !   ! cv:= create ( lamname,
14120  382    7     !   ! lam ( opsem, pu_no, level,
14130  383    8     !   ! sem(lam_sem_no+nr) ),
14140  384    9     !   ! proc_lam(nr), lam_size);
14150  385   10     !   ! IF cv = 0 THEN
14160  386   11     !   !   BEGIN
14170  387   12     !   !   ! start ( proc_lam(nr), lam_pri);
14180  388   13     !   !   ! leveltable(nr):= level
14190  389   14     !   !   END
14200  390   15     !   ! ELSE testout ( console,"lam start   ", cv);
14210  391   16     !   END;
14220  392   17     END;
14230  393          
14240  394           
\f

tssuplst    81.06.16.   09.17.                                                    page    16

15010  395            <*------------------- start netcon ----------------------------*
15020  396            
15030  397            PROCEDURE start_netcon;
15040  398            BEGIN
15050  399            IF nil ( proc_netcon ) THEN
15060  400            BEGIN
15070  401            (*
15080  402            cv:= link ("netconnector", netconnector );
15090  403            *)
15100  404            cv:= link ("tsconnector ", tsconnector);
15110  405            cv:= create ( "tsconnector ",
15120  406            tsconnector (
15130  407            opsem,
15140  408            sem(tssup_sem_no).s,
15150  409            sem(dc_sem_no).s,
15160  410            sem(nc_sem_no).s,
15170  411            sem(lam_sem_no).s,
15180  412            sem(timeout_sem_no).s,
15190  413            sem(com_pool).w,
15200  414            sem(netc_sem_no),
15210  415            sem(net_int1), sem(net_int2), sem(net_int3),
15220  416            sem(net_int4)
15230  417            ),
15240  418            proc_netcon, netc_size);
15250  419            IF cv = 0 THEN  start ( proc_netcon, netc_pri)
15260  420            ELSE
15270  421            BEGIN
15280  422            testout ( console,"netcon start", cv );
15290  423            cv:= unlink ( tsconnector)
15300  424            END;
15310  425            END
15320  426            END;
15330  427            -------------------------------------------------------------*>
15340  428          
15350  429           
\f

tssuplst    81.06.16.   09.17.                                                    page    17

16010  430          
16020  431            (*----------------------- start vchandler ---------------------*)
16030  432          
16040  433          PROCEDURE start_vchan;
16050  434          BEGIN
16060  435    1     ! IF nil ( proc_vchan ) THEN
16070  436    2     !   BEGIN
16080  437    3     !   ! cv:= link ( "vc_handler  ", vc_handler);
16090  438    4     !   ! cv:= create ( "vc_handler  ",
16100  439    5     !   ! vc_handler ( opsem,
16110  440    6     !   ! netaddr(dc).macro,
16120  441    7     !   ! here.macro,
16130  442    8     !   ! sem
16140  443    9     !   ! ),
16150  444   10     !   ! proc_vchan, vch_size);
16160  445   11     !   ! IF cv = 0 THEN start ( proc_vchan, vch_pri)
16170  446   12     !   ! ELSE
16180  447   13     !   !   BEGIN
16190  448   14     !   !   ! testout ( console, "vc_han start", cv);
16200  449   15     !   !   ! cv:= unlink ( vc_handler)
16210  450   16     !   !   END
16220  451   17     !   END
16230  452   18     END;
16240  453          
16250  454          
16260  455           
\f

tssuplst    81.06.16.   09.17.                                                    page    18

17010  456          
17020  457            (*------------------------ start athandler -----------------------*)
17030  458          
17040  459          PROCEDURE start_athan;
17050  460          BEGIN
17060  461    1     ! IF nil ( proc_athan ) THEN
17070  462    2     !   BEGIN
17080  463    3     !   ! cv:= link ( "at_handler  ", at_handler);
17090  464    4     !   ! cv:= create ( "at_handler  ",
17100  465    5     !   ! at_handler ( opsem,
17110  466    6     !   ! netaddr(dc).macro,
17120  467    7     !   ! here.macro,
17130  468    8     !   ! sem
17140  469    9     !   ! ),
17150  470   10     !   ! proc_athan, ath_size);
17160  471   11     !   ! IF cv = 0 THEN start ( proc_athan, ath_pri )
17170  472   12     !   ! ELSE
17180  473   13     !   !   BEGIN
17190  474   14     !   !   ! testout ( console, "at_han start", cv);
17200  475   15     !   !   ! cv:= unlink ( at_handler )
17210  476   16     !   !   END
17220  477   17     !   END
17230  478   18     END;
17240  479           
\f

tssuplst    81.06.16.   09.17.                                                    page    19

18010  480          
18020  481            (*---------------------- module timeout --------------------*)
18030  482          
18040  483          PROCEDURE module_timeout (
18050  484            VAR msg : reference;     (* received mess   *)
18060  485            VAR res : modulref);     (*  becomes dummy  *)
18070  486            
18080  487          VAR
18090  488            cnt,
18100  489            who : integer;
18110  490            elem : alarmnetaddr;
18120  491            bm1, bm2 : reference;              (*  2 empty buffers   *)
18130  492            
18140  493          BEGIN
18150  494    1     ! sensesem ( bm1, sem(free_sem_no).w^);
18160  495    2     ! IF NOT nil ( bm1) THEN
18170  496    3     !   sensesem ( bm2, sem(free_sem_no).w^);
18180  497    4     ! IF nil ( bm2 ) THEN
18190  498    5     !   BEGIN   (*  try later  *)
18200  499    6     !   ! IF NOT nil ( bm1) THEN return ( bm1);
18210  500    7     !   ! to_queue ( msg)
18220  501    8     !   END  ELSE
18230  502    9     !   BEGIN
18240  503   10     !   ! LOCK msg AS buf : timers DO who:= buf.object;
18250  504   11     !   ! elem.macro:= here.macro;
18260  505   12     !   ! elem.micro:= who;
18270  506   13     !   ! CASE who OF
18280  507   14     !   ! ! 
18290  508   15     !   ! !   <*
18300  509   16     !   ! !   netc_mic_addr:
18310  510   17     !   ! !   BEGIN    (*  net-connector stopped, so remove it
18320  511   18     !   ! !   and start a new one                   *)
18330  512   19     !   ! !   break ( proc_netcon, by_father);
18340  513   20     !   ! !   unlink ( tsconnector);
18350  514   21     !   ! !   remove ( proc_netcon);
18360  515   22     !   ! !   (*   get released buffers.    *)
18370  516   23     !   ! !   start_netcon;
18380  517   24     !   ! !   nodetest ( nc);
18390  518   25     !   ! !   timerbook ( t_up(netc), msg, interval(netc), who,
18400  519   26     !   ! !   sem(timeout_sem_no).s^, sem(done).w^)
18410  520   27     !   ! !   END;
18420  521   28     !   ! !   *>
18430  522   29     !   ! ! 
18440  523   30     !   ! ! ath_mic_addr:
18450  524   31     !   ! !   BEGIN
18460  525   32     !   ! !   ! IF running(ath) THEN
\f

tssuplst    81.06.16.   09.17.                                                    page    20

18470  526   33     !   ! !   !   BEGIN
18480  527   34     !   ! !   !   ! broadcast ( bm1, elem, 0, at_down, netc);
18490  528   35     !   ! !   !   ! broadcast ( bm2, elem, 0, at_down, vch )
18500  529   36     !   ! !   !   END;
18510  530   37     !   ! !   ! running(ath):= false;
18520  531   38     !   ! !   ! timerbook ( t_up(ath), msg, -1, who,
18530  532   39     !   ! !   ! sem(timeout_sem_no).s^, sem(done).w^)
18540  533   40     !   ! !   END;
18550  534   41     !   ! ! 
18560  535   42     !   ! ! vch_mic_addr:
18570  536   43     !   ! !   BEGIN
18580  537   44     !   ! !   ! IF running(vch) THEN
18590  538   45     !   ! !   !   BEGIN
18600  539   46     !   ! !   !   ! broadcast ( bm1, elem, 0, vc_down, netc);
18610  540   47     !   ! !   !   ! broadcast ( bm2, elem, 0, vc_down, ath );
18620  541   48     !   ! !   !   ! running(vch):= false
18630  542   49     !   ! !   !   END;
18640  543   50     !   ! !   ! timerbook ( t_up(vch), msg, -1, who,
18650  544   51     !   ! !   ! sem(timeout_sem_no).s^, sem(done).w^)
18660  545   52     !   ! !   END;
18670  546   53     !   ! ! 
18680  547   54     !   ! !   <*
18690  548   55     !   ! !   traffic_id:
18700  549   56     !   ! !   BEGIN       (*  nc or paxnet stopped  *)
18710  550   57     !   ! !   nodetest ( nc);
18720  551   58     !   ! !   timerbook ( t_up(traffic), msg, -1, who,
18730  552   59     !   ! !   sem(timeout_sem_no).s^, sem(done).w^)
18740  553   60     !   ! !   END;
18750  554   61     !   ! !   *>
18760  555   62     !   ! ! 
18770  556   63     !   ! ! nc_ident:
18780  557   64     !   ! !   BEGIN   (*  nc down  *)
18790  558   65     !   ! !   ! IF running(nc) THEN
18800  559   66     !   ! !   !   BEGIN
18810  560   67     !   ! !   !   ! broadcast ( bm1, elem, 0, nc_down, ath);
18820  561   68     !   ! !   !   ! broadcast ( bm2, elem, 0, nc_down, vch);
18830  562   69     !   ! !   !   ! running(dc):= false;
18840  563   70     !   ! !   !   ! running(nc):= false
18850  564   71     !   ! !   !   END;
18860  565   72     !   ! !   ! timerbook ( t_up(nc), msg, -1, who,
18870  566   73     !   ! !   ! sem(timeout_sem_no).s^, sem(done).w^)
18880  567   74     !   ! !   END;
18890  568   75     !   ! ! 
18900  569   76     !   ! !   <*
18910  570   77     !   ! !   dc_ident:
18920  571   78     !   ! !   BEGIN         (*  dc down    *)
\f

tssuplst    81.06.16.   09.17.                                                    page    21

18930  572   79     !   ! !   IF running(dc) THEN
18940  573   80     !   ! !   BEGIN
18950  574   81     !   ! !   broadcast ( bm1, elem, dc_down, ath);
18960  575   82     !   ! !   broadcast ( bm2, elem, dc_down, vch);
18970  576   83     !   ! !   running(dc):= false
18980  577   84     !   ! !   END;
18990  578   85     !   ! !   timerbook ( t_up(dc), msg, -1, who,
19000  579   86     !   ! !   sem(timeout_sem_no).s^, sem(done).w^);
19010  580   87     !   ! !   END;
19020  581   88     !   ! !   *>
19030  582   89     !   ! ! OTHERWISE
19040  583   90     !   ! ! BEGIN
19050  584   91     !   ! ! ! return ( bm1);
19060  585   92     !   ! ! ! return ( bm2)
19070  586   93     !   ! ! END
19080  587   94     !   ! END
19090  588   95     !   END;
19100  589   96     ! res:= dummy
19110  590   97     END;  (*  of module timeout  *)
19120  591          
19130  592           
\f

tssuplst    81.06.16.   09.17.                                                    page    22

20010  593          
20020  594            (*--------------------- route ---------------------------*)
20030  595          
20040  596          FUNCTION route (
20050  597            microadr : integer            (*  addr of local module  *)
20060  598            ) : modulref;      (*  the selected module   *)
20070  599          BEGIN
20080  600    1     ! IF microadr >= at_addr_limit THEN  route:= ath   ELSE
20090  601    2     !   IF microadr >= vc_addr_limit THEN  route:= vch  ELSE
20100  602    3     !     IF microadr = vch_mic_addr THEN route:= vch ELSE
20110  603    4     !       IF microadr = ath_mic_addr THEN route:= ath ELSE
20120  604    5     !         IF microadr = netc_mic_addr THEN route:= netc  ELSE
20130  605    6     !           IF microadr = tss_mic_addr THEN route:= tss  ELSE
20140  606    7     !             route:= dc
20150  607    8     END;
20160  608          
20170  609           
\f

tssuplst    81.06.16.   09.17.                                                    page    23

21010  610            (*----------------------- waitlog ----------------------------------*)
21020  611          
21030  612          PROCEDURE waitlog (          (*  fetch a free logbuffer    *)
21040  613            VAR msg : reference );     (*  a msg for log             *)
21050  614            
21060  615          BEGIN
21070  616    1     ! 
21080  617    2     !   (*    allocator may be used later !       *)
21090  618    3     ! 
21100  619    4     ! IF open ( sem(supp_sem_no).w^) THEN
21110  620    5     !   BEGIN
21120  621    6     !   ! 
21130  622    7     !   ! wait ( msg, sem(supp_sem_no).w^ );
21140  623    8     !   ! 
21150  624    9     !   ! WHILE msg^.u3 = dummy_route DO
21160  625   10     !   !   BEGIN
21170  626   11     !   !   ! return ( msg);
21180  627   12     !   !   ! wait ( msg, sem(supp_sem_no).w^ )
21190  628   13     !   !   END;
21200  629   14     !   END
21210  630   15     !   
21220  631   16     END;
21230  632          
21240  633           
\f

tssuplst    81.06.16.   09.17.                                                    page    24

22010  634            (*---------------------- make log --------------------------*)
22020  635          
22030  636          PROCEDURE make_log ( VAR msg : reference );
22040  637              (*  makes a copy of msg.data and send to dc.  *)
22050  638            
22060  639          TYPE
22070  640            logshape = PACKED RECORD
22080  641                              !  head : alarmlabel;
22090  642                              !  extra : integer;
22100  643                              !  byno : integer;
22110  644                              !  data : ARRAY (1..logleng) OF byte;
22120  645                              END;
22130  646            rawshape = PACKED RECORD
22140  647                              !  bytes : integer;
22150  648                              !  rawdata : ARRAY (1..rawleng) OF byte;
22160  649                              END;
22170  650            
22180  651          VAR
22190  652            cnt : 1..rawleng;
22200  653            length : integer;
22210  654            logm : reference;
22220  655            
22230  656          BEGIN
22240  657    1     ! LOCK msg AS head : alarmlabel DO head.op_code:= msg^.u4;
22250  658    2     !   (*  if ( logmin <= msg^.u4) and ( msg^.u4 <= logmax )  then    +++++++
22260  659    3     !   begin        -------------------------------------------------------*)
22270  660    4     ! waitlog ( logm );
22280  661    5     ! IF nil ( logm) THEN  to_queue ( msg)  ELSE
22290  662    6     !   BEGIN
22300  663    7     !   ! IF msg^.u4 = refuse_code THEN             (*  make copy   1.0    *)
22310  664    8     !   !   BEGIN
22320  665    9     !   !   ! LOCK logm AS copy: flawshape DO
22330  666   10     !   !   !   LOCK msg AS buf: flawshape DO
22340  667   11     !   !   !     BEGIN
22350  668   12     !   !   !     ! copy:= buf;
22360  669   13     !   !   !     ! copy.head.rec.macro:= netaddr(dc).macro;
22370  670   14     !   !   !     ! copy.head.rec.micro:= dc_erh_mic_addr;
22380  671   15     !   !   !     END;
22390  672   16     !   !   ! send_up ( logm, nb_code)
22400  673   17     !   !   END
22410  674   18     !   ! ELSE
22420  675   19     !   !    
\f

tssuplst    81.06.16.   09.17.                                                    page    25

23010  676   20     !   !   BEGIN                         (*  make log   0.0    *)
23020  677   21     !   !   ! LOCK logm AS log : logshape DO
23030  678   22     !   !   !   LOCK msg  AS buf : rawshape  DO
23040  679   23     !   !   !     BEGIN
23050  680   24     !   !   !     ! length:= label_length;
23060  681   25     !   !   !     ! IF    ( buf.bytes > label_length )
23070  682   26     !   !   !     !   AND ( buf.bytes <= rawleng )
23080  683   27     !   !   !     !   AND ( buf.bytes <= logleng ) THEN length:= buf.bytes;
23090  684   28     !   !   !     ! 
23100  685   29     !   !   !     ! WITH log, head DO
23110  686   30     !   !   !     !   BEGIN
23120  687   31     !   !   !     !   ! no_of_by:= label_length+2+length;
23130  688   32     !   !   !     !   ! rec.macro:= netaddr(dc).macro;
23140  689   33     !   !   !     !   ! rec.micro:= dc_log_mic_addr;
23150  690   34     !   !   !     !   ! send:= here;
23160  691   35     !   !   !     !   ! update:= insert_code;
23170  692   36     !   !   !     !   ! ts_add:= gettime;
23180  693   37     !   !   !     !   END;
23190  694   38     !   !   !     ! log.extra:= quelen;
23200  695   39     !   !   !     ! log.byno:= buf.bytes;
23210  696   40     !   !   !     ! FOR cnt:= 1 TO length DO log.data(cnt):= buf.rawdata(cnt);
23220  697   41     !   !   !     END;
23230  698   42     !   !   ! send_up ( logm, log_code)
23240  699   43     !   !   END
23250  700   44     !   END
23260  701   45     !     (* end      ---------------------------------------   ++++++++++++++++*)
23270  702   46     END;
23280  703           
\f

tssuplst    81.06.16.   09.17.                                                    page    26

24010  704            (*--------------------- refuse --------------------------*)
24020  705          
24030  706          PROCEDURE refuse ( VAR msg : reference; cause : result_range );
24040  707              (*  send opcode 1.2 back        *)
24050  708          CONST
24060  709            newleng = 2*label_length+2;
24070  710            
24080  711          VAR
24090  712            receiver : macroaddr;
24100  713            who : integer;
24110  714            
24120  715          BEGIN
24130  716    1     ! LOCK msg AS buf : flawshape DO
24140  717    2     !   WITH buf DO
24150  718    3     !     BEGIN
24160  719    4     !     ! data:= head;
24170  720    5     !     ! data.op_code:= msg^.u4;
24180  721    6     !     ! WITH head DO
24190  722    7     !     !   BEGIN
24200  723    8     !     !   ! no_of_by:= newleng;
24210  724    9     !     !   ! rec:= send;
24220  725   10     !     !   ! receiver:= rec.macro;
24230  726   11     !     !   ! who:= rec.micro;
24240  727   12     !     !   ! send:= here;
24250  728   13     !     !   ! result:= cause;
24260  729   14     !     !   ! ts_add:= gettime
24270  730   15     !     !   END
24280  731   16     !     END;
24290  732   17     ! 
24300  733   18     ! IF receiver <> here.macro THEN
24310  734   19     !   send_up ( msg, refuse_code)
24320  735   20     ! ELSE
24330  736   21     !   BEGIN
24340  737   22     !   ! IF who < vc_addr_limit THEN msg^.u3:= netc_route1
24350  738   23     !   ! ELSE msg^.u3:= netc_route;
24360  739   24     !   ! msg^.u4:= refuse_code;
24370  740   25     !   ! CASE route ( who) OF
24380  741   26     !   ! ! ath:  signal ( msg, sem(ath_sem_no).s^);
24390  742   27     !   ! ! vch:  signal ( msg, sem(vch_sem_no).s^);
24400  743   28     !   ! ! OTHERWISE
24410  744   29     !   ! ! send_up ( msg, refuse_code)
24420  745   30     !   ! END;
24430  746   31     !   END;
24440  747   32     END;
24450  748           
\f

tssuplst    81.06.16.   09.17.                                                    page    27

25010  749            (*---------------- downwards ----------------------------*)
25020  750          
25030  751          PROCEDURE downwards (
25040  752            VAR msg : reference;     (*  a msg from net      *)
25050  753            VAR modul : modulref);   (*  tells what to do later  *)
25060  754          VAR
25070  755            receiver : macroaddr;
25080  756            from : alarmnetaddr;
25090  757            xmt_dc : 0..15;
25100  758            who : integer;
25110  759            
25120  760          BEGIN
25130  761    1     ! LOCK msg AS head : alarmlabel DO
25140  762    2     !   WITH head DO
25150  763    3     !     BEGIN
25160  764    4     !     ! receiver:= rec.macro;
25170  765    5     !     ! who     := rec.micro;
25180  766    6     !     ! xmt_dc  := send.macro.dc_addr;
25190  767    7     !     ! from    := send;
25200  768    8     !     END;
25210  769    9     ! 
25220  770   10     ! IF ( debug MOD 32 ) >= 16 THEN display ( msg);
25230  771   11     ! 
25240  772   12     ! IF receiver <> here.macro THEN     (*  not for me  *)
25250  773   13     !   IF msg^.u4 = refuse_code THEN  modul:= empty  ELSE
25260  774   14     !     BEGIN
25270  775   15     !     ! refuse ( msg, unknown_receiver);
25280  776   16     !     ! modul:= dummy
25290  777   17     !     END
25300  778   18     !   ELSE
25310  779   19     !     BEGIN                     (*  addr ok   *)
25320  780   20     !     ! IF (xmt_dc <> here.macro.dc_addr) AND
25330  781   21     !     !   running(dc) THEN make_log ( msg );
25340  782   22     !     ! IF from = netaddr(dc) THEN running(dc):= true;
25350  783   23     !     ! IF nil ( msg) THEN modul:= dummy  ELSE
25360  784   24     !     !   BEGIN
25370  785   25     !     !   ! modul:= route ( who );
25380  786   26     !     !   ! IF who < vc_addr_limit THEN msg^.u3:= netc_route1;
25390  787   27     !     !   END
25400  788   28     !     END
25410  789   29     END;   (* of downwards  *)
25420  790          
25430  791          
25440  792           
\f

tssuplst    81.06.16.   09.17.                                                    page    28

26010  793            (*---------------- upwards -------------------------*)
26020  794          
26030  795          PROCEDURE upwards (
26040  796            VAR msg : reference;      (*  a msg from ath or vch  *)
26050  797            VAR modul : modulref);    (*  tells what to do later *)
26060  798            
26070  799          VAR
26080  800            receiver : macroaddr;
26090  801            who : integer;
26100  802            
26110  803          BEGIN
26120  804    1     ! LOCK msg AS head : alarmlabel DO
26130  805    2     !   BEGIN
26140  806    3     !   ! head.ts_add:= gettime;
26150  807    4     !   ! receiver:= head.rec.macro;
26160  808    5     !   ! who:= head.rec.micro
26170  809    6     !   END;
26180  810    7     ! 
26190  811    8     ! IF receiver <> netaddr(dc).macro THEN    (*   log   *)
26200  812    9     !   IF running(dc) THEN make_log ( msg );
26210  813   10     ! 
26220  814   11     ! IF nil ( msg) THEN modul:= dummy  ELSE
26230  815   12     !   BEGIN
26240  816   13     !   ! IF receiver = here.macro THEN
26250  817   14     !   !   BEGIN
26260  818   15     !   !   ! modul:= route ( who );
26270  819   16     !   !   ! IF modul < tss THEN
26280  820   17     !   !   !   IF who < vc_addr_limit THEN msg^.u3:= netc_route1
26290  821   18     !   !   !   ELSE  msg^.u3:= netc_route
26300  822   19     !   !   END
26310  823   20     !   ! ELSE modul:= netc
26320  824   21     !   END
26330  825   22     END;
26340  826          
26350  827          
26360  828          
26370  829           
\f

tssuplst    81.06.16.   09.17.                                                    page    29

27010  830            (*----------------------- rec broadcast ---------------------------*)
27020  831          
27030  832          PROCEDURE rec_broadcast ( VAR msg : reference );
27040  833              (*  handle received broadcast  *)
27050  834          TYPE
27060  835            ncaddr = RECORD
27070  836                     !  dcpart : 0..15;
27080  837                     !  ncpart : 0..63
27090  838                     END;
27100  839            
27110  840          VAR
27120  841            cnt : integer;
27130  842            unit : alarmnetaddr;
27140  843            own_dc, unit_dc : 0..15;
27150  844            own_nc, unit_nc : ncaddr;
27160  845            bm1, bm2 : reference;
27170  846            
27180  847          BEGIN
27190  848    1     ! sensesem ( bm1, sem(free_sem_no).w^);
27200  849    2     ! IF nil ( bm1) THEN
27210  850    3     !   BEGIN                (*  try later  *)
27220  851    4     !   ! to_queue ( msg)
27230  852    5     !   END  ELSE
27240  853    6     !   
27250  854    7     !   BEGIN
27260  855    8     !   ! 
27270  856    9     !   ! LOCK msg AS buf: note DO
27280  857   10     !   !   WITH buf DO
27290  858   11     !   !     BEGIN
27300  859   12     !   !     ! unit:= component;
27310  860   13     !   !     ! cnt := count
27320  861   14     !   !     END;
27330  862   15     !   ! own_dc:= here.macro.dc_addr;
27340  863   16     !   ! own_nc.dcpart:= own_dc;
27350  864   17     !   ! own_nc.ncpart:= here.macro.nc_addr;
27360  865   18     !   ! unit_dc:= unit.macro.dc_addr;
27370  866   19     !   ! unit_nc.dcpart:= unit_dc;
27380  867   20     !   ! unit_nc.ncpart:= unit.macro.nc_addr;
27390  868   21     !   ! 
27400  869   22     !   ! CASE msg^.u4 OF
27410  870   23     !   ! ! dc_down:   IF unit_dc = own_dc THEN running(dc):= false;
27420  871   24     !   ! ! dc_up:     IF unit_dc = own_dc THEN running(dc):= true;
27430  872   25     !   ! ! nc_down:   IF unit_nc = own_nc THEN running(nc):= false;
27440  873   26     !   ! ! nc_up:     IF unit_nc = own_nc THEN running(nc):= true
27450  874   27     !   ! !     OTHERWISE
27460  875   28     !   ! END;
\f

tssuplst    81.06.16.   09.17.                                                    page    30

27470  876   29     !   ! 
27480  877   30     !   ! CASE msg^.u3 OF
27490  878   31     !   ! ! netc_route1: BEGIN    (*  from net  *)
27500  879   32     !   ! !   ! testout ( console, "from net    ", msg^.u3);
27510  880   33     !   ! !   ! broadcast ( bm1, unit, cnt, msg^.u4, vch);
27520  881   34     !   ! !   ! broadcast ( msg, unit, cnt, msg^.u4, ath)
27530  882   35     !   ! !   END;
27540  883   36     !   ! ! 
27550  884   37     !   ! ! at_route,
27560  885   38     !   ! ! at_route1: BEGIN      (*  from at    *)
27570  886   39     !   ! !   ! testout ( console, "from at     ", msg^.u3);
27580  887   40     !   ! !   ! broadcast ( bm1, unit, cnt, msg^.u4, netc);
27590  888   41     !   ! !   ! broadcast ( msg, unit, cnt, msg^.u4, vch)
27600  889   42     !   ! !   END;
27610  890   43     !   ! ! 
27620  891   44     !   ! ! vca_route,
27630  892   45     !   ! ! vca_route1,
27640  893   46     !   ! ! vci_route,
27650  894   47     !   ! ! vci_route1: BEGIN    (*  from vc   *)
27660  895   48     !   ! !   ! testout ( console, "from vc     ", msg^.u3);
27670  896   49     !   ! !   ! broadcast ( bm1, unit, cnt, msg^.u4, netc);
27680  897   50     !   ! !   ! broadcast ( msg, unit, cnt, msg^.u4, ath)
27690  898   51     !   ! !   END
27700  899   52     !   ! !   OTHERWISE
27710  900   53     !   ! !   BEGIN
27720  901   54     !   ! !   ! return ( bm1);
27730  902   55     !   ! !   ! return ( msg)
27740  903   56     !   ! !   END
27750  904   57     !   ! END;   (*  case  *)
27760  905   58     !   ! 
27770  906   59     !   END
27780  907   60     END;   (*  of rec broadcast  *)
27790  908          
27800  909           
\f

tssuplst    81.06.16.   09.17.                                                    page    31

28010  910            (*------------------------ new lam ---------------------------------*)
28020  911          
28030  912          PROCEDURE new_lam ( VAR msg : reference );
28040  913              (*  start or check lam driver incarnation        *)
28050  914            
28060  915          CONST
28070  916            top = max_lam+1;
28080  917            
28090  918          VAR   nr, level : integer;
28100  919            index : 0..top;
28110  920            
28120  921          BEGIN
28130  922    1     ! IF msg^.u4 = newlam_code THEN
28140  923    2     !   BEGIN
28150  924    3     !   !   (*q  if debug >= 1 then testout ( console,"new lam     ", msg^.u4);   q*)
28160  925    4     !   ! LOCK msg AS buf: lammess DO  WITH buf, head DO
28170  926    5     !   !     BEGIN
28180  927    6     !   !     ! result:= rejected;
28190  928    7     !   !     ! nr:= lam_num;
28200  929    8     !   !     ! level:= lam_level;
28210  930    9     !   !     ! 
28220  931   10     !   !     ! index:= 0;
28230  932   11     !   !     ! 
28240  933   12     !   !     ! WHILE leveltable(index) <> level DO index:= index+1;
28250  934   13     !   !     ! 
28260  935   14     !   !     ! IF update = start_code THEN   (*  start lam driver    *)
28270  936   15     !   !     !   BEGIN
28280  937   16     !   !     !   ! IF index = top THEN start_lam ( nr, level);
28290  938   17     !   !     !   ! IF leveltable(nr) = level THEN result:= accepted;
28300  939   18     !   !     !   END  ELSE
28310  940   19     !   !     !   BEGIN   (*  stop lam driver  *)
28320  941   20     !   !     !   ! IF leveltable(nr) = level THEN
28330  942   21     !   !     !   !   BEGIN
28340  943   22     !   !     !   !   ! remove ( proc_lam(nr));
28350  944   23     !   !     !   !   ! leveltable(nr):= 0;
28360  945   24     !   !     !   !   ! result:= accepted
28370  946   25     !   !     !   !   END
28380  947   26     !   !     !   END;
28390  948   27     !   !     ! 
28400  949   28     !   !     ! rec:= send;
28410  950   29     !   !     ! send:= here;
28420  951   30     !   !     ! ts_add:= gettime;
28430  952   31     !   !     END;
28440  953   32     !   ! send_up ( msg, anslam_code)
28450  954   33     !   END  ELSE refuse ( msg, unknown_opcode)
28460  955   34     END;
\f

tssuplst    81.06.16.   09.17.                                                    page    32

28470  956          
28480  957          
28490  958           
\f

tssuplst    81.06.16.   09.17.                                                    page    33

29010  959            (*----------------------- rec returned ----------------------------*)
29020  960          
29030  961          PROCEDURE rec_returned ( VAR msg : reference );
29040  962              (*  handle op codes 1.0    1.2    *)
29050  963            
29060  964          BEGIN
29070  965    1     !   (*   not yet specified         *)
29080  966    2     ! 
29090  967    3     ! IF debug >= 1 THEN testout ( console, "returned    ", msg^.u4);
29100  968    4     ! 
29110  969    5     ! IF debug >= 1 THEN
29120  970    6     !   LOCK msg AS buf: flawshape DO
29130  971    7     !     WITH buf DO
29140  972    8     !       testout ( console, "orig op-code", data.op_code);
29150  973    9     ! 
29160  974   10     ! count ( lost);
29170  975   11     ! return ( msg )
29180  976   12     ! 
29190  977   13     END;
29200  978          
29210  979          
29220  980           
\f

tssuplst    81.06.16.   09.17.                                                    page    34

30010  981            (*----------------------- tss var update ----------------------------*)
30020  982          
30030  983          PROCEDURE var_update ( VAR msg : reference );
30040  984              (*  the buffer contains a new ts-macro-address  *)
30050  985          TYPE
30060  986            table = PACKED RECORD
30070  987                           !  head : alarmlabel;
30080  988                           !  adr : macroaddr;
30090  989                           !  cn: integer
30100  990                           END;
30110  991            
30120  992          BEGIN
30130  993    1     ! IF msg^.u4 = new_addr_code THEN
30140  994    2     !   BEGIN
30150  995    3     !   ! LOCK msg AS buf : table DO  WITH buf, head DO
30160  996    4     !   !     BEGIN
30170  997    5     !   !     ! here.macro:= adr;
30180  998    6     !   !     ! netaddr(dc).macro.dc_addr:= here.macro.dc_addr;
30190  999    7     !   !     ! netaddr(nc).macro.dc_addr:= here.macro.dc_addr;
30200 1000    8     !   !     ! netaddr(nc).macro.nc_addr:= here.macro.nc_addr;
30210 1001    9     !   !     ! debug:= cn;
30220 1002   10     !   !     !   (*  generate answer  *)
30230 1003   11     !   !     ! rec:= send;
30240 1004   12     !   !     ! send:= here;
30250 1005   13     !   !     ! ts_add:= gettime;
30260 1006   14     !   !     ! result:= accepted;
30270 1007   15     !   !     END;
30280 1008   16     !   !   (*
30290 1009   17     !   !   if debug>=3 then display ( msg);
30300 1010   18     !   !   *)
30310 1011   19     !   ! running(dc):= true;
30320 1012   20     !   ! running(nc):= true;
30330 1013   21     !   ! send_up ( msg, new_ans_code);
30340 1014   22     !   ! 
30350 1015   23     !   END  ELSE refuse ( msg, unknown_opcode)
30360 1016   24     END;  (*  of table update  *)
30370 1017          
30380 1018           
\f

tssuplst    81.06.16.   09.17.                                                    page    35

31010 1019            (*----------------------- watch -----------------------------------*)
31020 1020          
31030 1021          PROCEDURE watch ( VAR msg : reference );
31040 1022              (*  nodetest received, so send node test answer   *)
31050 1023            
31060 1024          VAR
31070 1025            node : modulref;
31080 1026            node_up : byte;
31090 1027            
31100 1028          BEGIN
31110 1029    1     ! IF msg^.u4 = nodetest_code THEN      (*  node test  *)
31120 1030    2     !   BEGIN
31130 1031    3     !   ! LOCK msg    AS buf : testshape DO
31140 1032    4     !   !   WITH buf, head DO
31150 1033    5     !   !     BEGIN
31160 1034    6     !   !     ! rec:= send;
31170 1035    7     !   !     ! send:= here;
31180 1036    8     !   !     ! result:= accepted;
31190 1037    9     !   !     ! ts_add:= gettime;
31200 1038   10     !   !     ! nc_long:= data(2);
31210 1039   11     !   !     ! data(2):= quelen;
31220 1040   12     !   !     ! data(3):= queput;
31230 1041   13     !   !     ! data(4):= maxqueue;
31240 1042   14     !   !     ! data(5):= lost;
31250 1043   15     !   !     END;
31260 1044   16     !   ! send_up ( msg, nodeans_code)
31270 1045   17     !   END  ELSE
31280 1046   18     !   IF msg^.u4 = nodeans_code THEN            (*  node test answer    *)
31290 1047   19     !     BEGIN
31300 1048   20     !     ! LOCK msg AS buf: testshape DO
31310 1049   21     !     !   IF buf.head.send.macro.nc_addr = 0 THEN
31320 1050   22     !     !     BEGIN   node_up:= dc_up;  node:= dc   END  ELSE
31330 1051   23     !     !     BEGIN   node_up:= nc_up;  node:= nc   END;
31340 1052   24     !     ! timerupdate ( t_up(node), -1,
31350 1053   25     !     ! sem(timeout_sem_no).s^, sem(done).w^);
31360 1054   26     !     ! IF NOT running(node) THEN             (*  node running again   *)
31370 1055   27     !     !   BEGIN
31380 1056   28     !     !   !   (*  broadcast ( ms1, netaddr(node), node_up, ath);
31390 1057   29     !     !   !   broadcast ( msg, netaddr(node), node_up, vch);  *)
31400 1058   30     !     !   ! running(node):= true
31410 1059   31     !     !   END;
31420 1060   32     !     ! return ( msg);
31430 1061   33     !     END  ELSE  refuse ( msg, unknown_opcode)
31440 1062   34     END;   (*  of watch   *)
31450 1063           
\f

tssuplst    81.06.16.   09.17.                                                    page    36

32010 1064            (*------------------------- tss function --------------------------*)
32020 1065          
32030 1066          PROCEDURE tss_function ( VAR msg : reference );
32040 1067              (*  msg : received message for ts-supervisor     *)
32050 1068            
32060 1069            
32070 1070          VAR
32080 1071            group : func_grp;
32090 1072            
32100 1073          BEGIN
32110 1074    1     !   (*q  if debug>= 3 then testout ( console,"tss gets    ", msg^.u4);   q*)
32120 1075    2     ! group:= msg^.u4 DIV maxno;
32130 1076    3     ! 
32140 1077    4     ! CASE group OF
32150 1078    5     ! ! 0:   (*  returned log  *)
32160 1079    6     ! !   BEGIN   return ( msg);
32170 1080    7     ! !   ! testout ( console, "log retur   ", lost );
32180 1081    8     ! !   END;
32190 1082    9     ! ! 1:   (*  returns       *)   rec_returned ( msg );
32200 1083   10     ! ! 2:   (*  broadcast     *)   rec_broadcast( msg );
32210 1084   11     ! ! 9:   (*  new lam       *)   new_lam ( msg );
32220 1085   12     ! ! 11:  (*  update var    *)   var_update ( msg);
32230 1086   13     ! ! 12:  (*  watch         *)   watch ( msg )
32240 1087   14     ! !   OTHERWISE (*  refuse *)   refuse ( msg, unknown_opcode)
32250 1088   15     ! END;
32260 1089   16     ! 
32270 1090   17     END;   (*  of tss function   *)
32280 1091          
32290 1092           
\f

tssuplst    81.06.16.   09.17.                                                    page    37

33010 1093            (*-------------------- exception ---------------------------------*)
33020 1094          
33030 1095          PROCEDURE exception ( cause : integer);
33040 1096          BEGIN
33050 1097    1     ! trace ( cause);
33060 1098    2     ! 
33070 1099    3     ! IF NOT nil ( ms1) THEN return ( ms1);
33080 1100    4     ! IF NOT nil ( ms ) THEN refuse ( ms, breaked);
33090 1101    5     ! 
33100 1102    6     ! sensesem ( ms, sem(queue).w^);
33110 1103    7     ! WHILE NOT nil ( ms) DO
33120 1104    8     !   BEGIN
33130 1105    9     !   ! refuse ( ms, breaked);
33140 1106   10     !   ! sensesem ( ms, sem(queue).w^)
33150 1107   11     !   END;
33160 1108   12     ! 
33170 1109   13     ! FOR module:= netc TO ath DO
33180 1110   14     !   BEGIN
33190 1111   15     !   ! wait ( ms, sem(free_sem_no).w^);
33200 1112   16     !   ! broadcast ( ms, here, lost, ts_down, module)
33210 1113   17     !   END;
33220 1114   18     ! 
33230 1115   19     ! REPEAT
33240 1116   20     ! ! wait ( ms, sem(tssup_sem_no).w^);
33250 1117   21     ! ! IF ms^.u4 < #h30 THEN  return ( ms)  ELSE
33260 1118   22     ! !   refuse ( ms, breaked)
33270 1119   23     ! UNTIL false;
33280 1120   24     ! 
33290 1121   25     END;
33300 1122          
33310 1123           
\f

tssuplst    81.06.16.   09.17.                                                    page    38

34010 1124            (*---------------------------------------------------------------*)
34020 1125            (*                                                               *)
34030 1126            (*                    main  program                              *)
34040 1127            (*                                                               *)
34050 1128            (*---------------------------------------------------------------*)
34060 1129          
34070 1130        BEGIN
34080 1131    1   ! 
34090 1132    2   ! testopen ( console, own.incname, opsem);
34100 1133    3   ! IF debug>=0 THEN testout ( console, version, al_env_version);
34110 1134    4   ! 
34120 1135    5   ! here.macro:= macroaddr(0,0,0);
34130 1136    6   ! here.micro:= tss_mic_addr;
34140 1137    7   ! netaddr(dc):= here;
34150 1138    8   ! netaddr(nc):= here;
34160 1139    9   ! 
34170 1140   10   !   (**demo         get buffers for log and clock        **)
34180 1141   11   ! FOR cnt:= 1 TO no_req_supp DO
34190 1142   12   !   BEGIN
34200 1143   13   !   ! alloc ( ms, suppool, sem(supp_sem_no).s^);
34210 1144   14   !   ! ms^.u3:= tss_route;
34220 1145   15   !   ! signal ( ms, sem(supp_sem_no).s^ )
34230 1146   16   !   END;
34240 1147   17   ! alloc ( clock_msg, clockpool, sem(done).s^);
34250 1148   18   ! clock_msg^.u1:= read_clock;
34260 1149   19   ! clock_msg^.u3:= tss_route;
34270 1150   20   ! 
34280 1151   21   ! no(netc):= netc_sem_no;
34290 1152   22   ! no( vch):= vch_sem_no;
34300 1153   23   ! no( ath):= ath_sem_no;
34310 1154   24   ! 
34320 1155   25   ! cv:= link ("lam         ", lam);
34330 1156   26   ! IF cv <> 0 THEN testout ( console, "link lam =  ", cv);
34340 1157   27   ! start_lam ( 0, 5);
34350 1158   28   ! 
34360 1159   29   ! start_timeout;
34370 1160   30   !  
\f

tssuplst    81.06.16.   09.17.                                                    page    39

35010 1161   31   ! 
35020 1162   32   !   (*-------- wait for a node-test ------------ *)
35030 1163   33   ! 
35040 1164   34   ! REPEAT
35050 1165   35   ! ! wait ( ms, sem(tssup_sem_no).w^);
35060 1166   36   ! ! CASE ms^.u3 OF
35070 1167   37   ! ! ! netc_route1,
35080 1168   38   ! ! ! dummy_route:   return ( ms);
35090 1169   39   ! ! ! 
35100 1170   40   ! ! ! netc_route:
35110 1171   41   ! ! !   BEGIN
35120 1172   42   ! ! !   ! LOCK ms AS head: alarmlabel DO
35130 1173   43   ! ! !   !   cv:= head.rec.micro;
35140 1174   44   ! ! !   ! IF cv = netc_mic_addr THEN
35150 1175   45   ! ! !   !   BEGIN
35160 1176   46   ! ! !   !   ! ms^.u3:= netc_route1;
35170 1177   47   ! ! !   !   ! signal ( ms, sem(netc_sem_no).s^);
35180 1178   48   ! ! !   !   END  ELSE
35190 1179   49   ! ! !   !   IF cv = tss_mic_addr THEN
35200 1180   50   ! ! !   !     IF (ms^.u4 = new_addr_code) OR
35210 1181   51   ! ! !   !       (ms^.u4 = nodetest_code) THEN
35220 1182   52   ! ! !   !       BEGIN
35230 1183   53   ! ! !   !       ! LOCK ms AS head: alarmlabel DO
35240 1184   54   ! ! !   !       !   WITH head DO
35250 1185   55   ! ! !   !       !     BEGIN
35260 1186   56   ! ! !   !       !     ! IF ms^.u4 = new_addr_code THEN
35270 1187   57   ! ! !   !       !     !   BEGIN
35280 1188   58   ! ! !   !       !     !   ! here:= rec;
35290 1189   59   ! ! !   !       !     !   ! result:= accepted;
35300 1190   60   ! ! !   !       !     !   END  ELSE
35310 1191   61   ! ! !   !       !     !   result:= not_ready;
35320 1192   62   ! ! !   !       !     ! who:= rec;
35330 1193   63   ! ! !   !       !     ! rec:= send;
35340 1194   64   ! ! !   !       !     ! send:= who;
35350 1195   65   ! ! !   !       !     ! ts_add:= gettime;
35360 1196   66   ! ! !   !       !     END;
35370 1197   67   ! ! !   !       ! send_up ( ms, ms^.u4+1);
35380 1198   68   ! ! !   !       END  ELSE
35390 1199   69   ! ! !   !       refuse ( ms, unknown_opcode)
35400 1200   70   ! ! !   !     ELSE
35410 1201   71   ! ! !   !       refuse ( ms, not_ready);
35420 1202   72   ! ! !   END;
35430 1203   73   ! ! ! OTHERWISE
35440 1204   74   ! ! ! send_up ( ms, ms^.u4);
35450 1205   75   ! ! END  (*  case  *)
35460 1206   76   ! UNTIL here.macro <> macroaddr(0,0,0);
\f

tssuplst    81.06.16.   09.17.                                                    page    40

35470 1207   77   ! 
35480 1208   78   ! netaddr(dc).macro.dc_addr:= here.macro.dc_addr;
35490 1209   79   ! netaddr(nc).macro.dc_addr:= here.macro.dc_addr;
35500 1210   80   ! netaddr(nc).macro.nc_addr:= here.macro.nc_addr;
35510 1211   81   ! running(dc):= true;
35520 1212   82   ! running(nc):= true;
35530 1213   83   ! 
35540 1214   84   !   (*----------- now started -------------*)
35550 1215   85   ! 
35560 1216   86   !  
\f

tssuplst    81.06.16.   09.17.                                                    page    41

36010 1217   87   ! 
36020 1218   88   ! FOR module:= netc TO dc DO
36030 1219   89   !   BEGIN
36040 1220   90   !   ! alloc ( t_out(module), t_pool, sem(tssup_sem_no).s^ );
36050 1221   91   !   ! alloc ( t_up(module), u_pool, sem(done).s^);
36060 1222   92   !   ! t_up(module)^.u3:= tss_route;
36070 1223   93   !   ! timerbook ( t_up(module), t_out(module), -1, microadr(module),
36080 1224   94   !   ! sem(timeout_sem_no).s^, sem(done).w^)
36090 1225   95   !   END;
36100 1226   96   !   (*   start_netcon;     done by opsys   *)
36110 1227   97   ! start_vchan;
36120 1228   98   ! start_athan;
36130 1229   99   ! 
36140 1230  100   !   (*  kun for ts-connector
36150 1231  101   !   wait ( ms, sem(free_sem_no).w^);
36160 1232  102   !   lock ms as head: alarmlabel do
36170 1233  103   !   begin
36180 1234  104   !   head.rec:= here;
36190 1235  105   !   head.send:= here;
36200 1236  106   !   end;
36210 1237  107   !   send_up ( ms, new_ans_code);       *)
36220 1238  108   ! 
36230 1239  109   !   (*q  if debug>=1 then testout ( console,"init ok     ", 820 );   q*)
36240 1240  110   !  
\f

tssuplst    81.06.16.   09.17.                                                    page    42

37010 1241  111   !   (*------------------ main loop -------------------------*)
37020 1242  112   ! 
37030 1243  113   ! REPEAT   (*  until forever  *)
37040 1244  114   ! ! 
37050 1245  115   ! ! IF open ( sem(queue).w^) THEN  sensesem ( ms1, sem(free_sem_no).w^);
37060 1246  116   ! ! IF open ( sem(queue).w^) AND NOT nil ( ms1) THEN   (*  take queue  *)
37070 1247  117   ! !   BEGIN
37080 1248  118   ! !   ! wait ( ms, sem(queue).w^);
37090 1249  119   ! !   ! quelen:= quelen-1
37100 1250  120   ! !   END  ELSE
37110 1251  121   ! !   BEGIN
37120 1252  122   ! !   !   (*q  if (debug mod 8)>=4 then testout ( console,"wait mysem  ", 960 );   q*)
37130 1253  123   ! !   ! wait ( ms, sem(tssup_sem_no).w^ );
37140 1254  124   ! !   END;
37150 1255  125   ! !   (*q  if (debug mod 8)>=4 then testout ( console,"handle      ", msg_ready);   q*)
37160 1256  126   ! ! 
37170 1257  127   ! ! CASE ms^.u3 OF
37180 1258  128   ! ! ! dummy_route:    module:= empty;
37190 1259  129   ! ! ! tim_route,
37200 1260  130   ! ! ! tim_route1:     module_timeout ( ms, module );
37210 1261  131   ! ! ! netc_route:     downwards ( ms, module);
37220 1262  132   ! ! ! netc_route1:
37230 1263  133   ! ! !   BEGIN
37240 1264  134   ! ! !   ! LOCK ms AS buf: flawshape DO
37250 1265  135   ! ! !   !   IF buf.data.rec.macro = netaddr(dc).macro THEN running(dc):= false;
37260 1266  136   ! ! !   ! IF running(dc) THEN make_log ( ms);
37270 1267  137   ! ! !   ! IF nil ( ms) THEN module:= dummy  ELSE
37280 1268  138   ! ! !   !   downwards ( ms, module);
37290 1269  139   ! ! !   END;
37300 1270  140   ! ! ! 
37310 1271  141   ! ! ! OTHERWISE       upwards ( ms, module );
37320 1272  142   ! ! END;
37330 1273  143   ! ! 
37340 1274  144   ! ! CASE module OF
37350 1275  145   ! ! ! dummy:         ;                              (*   no action   *)
37360 1276  146   ! ! ! empty:     return ( ms );                     (*   no data     *)
37370 1277  147   ! ! ! tss:       tss_function ( ms );
37380 1278  148   ! ! ! vch:       signal ( ms, sem(vch_sem_no).s^ );
37390 1279  149   ! ! ! ath:       signal ( ms, sem(ath_sem_no).s^ );
37400 1280  150   ! ! ! netc:      BEGIN
37410 1281  151   ! ! !   ! IF ( debug MOD 16 ) >= 8 THEN display ( ms);
37420 1282  152   ! ! !   ! signal ( ms, sem(netc_sem_no).s^ );
37430 1283  153   ! ! !   END
37440 1284  154   ! ! !   OTHERWISE   refuse ( ms, not_found)
37450 1285  155   ! ! END;   (*  case  *)
37460 1286  156   ! ! 
\f

tssuplst    81.06.16.   09.17.                                                    page    43

37470 1287  157   ! UNTIL forever
37480 1288  158   END  .  (*  of ts supervisor program  *)
37490 1289        
\f

tssuplst    81.06.16.   09.17.                                                    page    44

           0   55*   56*   65*   65*   65*  167*  178*  179*  360   385   445   471   527   528   539 
              540   560   561   757*  836*  837*  843*  919*  931   944  1049  1078: 1133  1135  1135 
             1135  1156  1157  1206  1206  1206 
           1   56*   67*   70*   70*   70*  126*  161*  176*  195*  207*  214   214   217   241   270 
              531   543   565   644*  648*  652*  696   916*  933   967   969  1052  1082: 1141  1197 
             1223  1249 
           2   67*  105*  105*  105*  105*  106*  107*  111*  111*  112*  112*  178*  214   241   687 
              709*  709* 1038  1039  1083:
           3   67*   72*  168* 1040 
           4   72*  111*  168*  379  1041 
           5  126*  380  1042  1157 
           6  320*
           7  215   215 
           8  259  1281 
           9 1084:
          10  379   380 
          11 1085:
          12   46* 1086:
          15  757*  836*  843*
          16  205*  259   770  1281 
          24   60*
          25   61*
          26   62*
          32  770 
          47  108*
          63  837*
abuf          207*  211 
accepted      334   938   945  1006  1036  1189 
adr           988*  997 
alarmlabel    125*  132*  133*  139*  147*  641*  657   761   804   987* 1172  1183 
alarmnetaddr  140*  160*  188*  314*  490*  756*  842*
alfa          177*
alloc        1143  1147  1220  1221 
al_env_version                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1133 
anslam_code    94*  953 
as            211:  232:  323:  503:  657:  665:  666:  677:  678:  716:  761:  804:  856:  925:  970:
              995: 1031: 1048: 1172: 1183: 1264:
ath            51*   52*   72*   72*  175*  525   530   531   540   560   600   603   741:  881   897 
             1109  1153  1279:
ath_mic_addr   64*  523:  603 
ath_pri       471 
ath_sem_no    741  1153  1279 
ath_size      470 
\f

tssuplst    81.06.16.   09.17.                                                    page    45

at_addr_limit                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              600 
at_down        91*  527   528 
at_handler     27*  463   465   475 
at_route      884:
at_route1     885:
at_up          92*
bm1           491*  494   495   499   499   527   539   560   584   845*  848   849   880   887   896 
              901 
bm2           491*  496   497   528   540   561   585   845*
book_id        67*
boolean        54*  239*
breaked      1100  1105  1118 
broadcast     312*  527   528   539   540   560   561   880   881   887   888   896   897  1112 
broadlength   320*  326 
buf           211:  212   232:  232   323:  324   503:  503   666:  668   678:  681   682   683   683 
              695   696   716:  717   856:  857   925:  925   970:  971   995:  995  1031: 1032  1048:
             1049  1264: 1265 
byno          643*  695=
byte           52*   56*  253*  316*  373*  644*  648* 1026*
bytes         647*  681   682   683   683   695 
by_father     108*
cause         706*  728  1095* 1097 
chr           379   380 
clockpool     195* 1147 
clock_form    228*  232 
clock_msg     196*  230   231   232: 1147  1148  1149 
cn            989* 1001 
cnt           187*  315*  338   488*  652*  696=  696   696   841*  860=  880   881   887   888   896 
              897  1141=
component     140*  337=  859 
com_pool      113*
conansw_code  101*
console       171*  217   363   390   448   474   879   886   895   967   972  1080  1132  1133  1156 
contest_code  100*
copy          665:  668=  669   670 
count         141*  269   338=  860   974 
create        356   381   438   464 
cv            162*  355=  356=  360   363   364=  381=  385   390   437=  438=  445   448   449=  463=
              464=  471   474   475= 1155= 1156  1156  1173= 1174  1179 
data          126*  133*  644*  696=  719=  720   972  1038  1039= 1040= 1041= 1042= 1265 
dc             51*  188*  191*  440   466   562   606   669   688   781   782   782   811   812   870 
              871   998  1011  1050  1137  1208  1211  1218  1265  1265  1266 
dca            28*   33*
\f

tssuplst    81.06.16.   09.17.                                                    page    46

dcpart        836*  863=  866=
dc_addr       766   780   862   865   998=  998   999=  999  1208= 1208  1209= 1209 
dc_down        83*  870:
dc_erh_mic_addr                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              670 
dc_ident       62*   65*
dc_log_mic_addr                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              689 
dc_up          84*  871: 1050 
debug         161*  259   770   967   969  1001= 1133  1281 
display       203*  259   770  1281 
done          115*  231   532   544   566  1053  1147  1221  1224 
downwards     751* 1261  1268 
dummy          51*  589   776   783   814  1267  1275:
dummy_route   624  1168: 1258:
elem          490*  504   505   527   528   539   540   560   561 
element       314*  337 
empty          51*  773  1258  1276:
exception    1095*
external       20*   30*   35*   42*
extra         642*  694=
false         109*  168*  168*  530   541   562   563   870   872  1119  1265 
flawshape     131*  665   666   716   970  1264 
forever       109* 1287 
free_sem_no   113*  494   496   848  1111  1245 
from           72*  756*  767=  782 
func_grp       50* 1071*
gettime       226*  232=  336   692   729   806   951  1005  1037  1195 
group        1071* 1075= 1077 
grouptable     50*
h00            80*
h10            81*
h12            82*
h20            83*
h21            84*
h22            85*
h23            86*
h24            87*
h25            88*
h26            89*
h27            90*
h28            91*
h29            92*
h30          1117 
\f

tssuplst    81.06.16.   09.17.                                                    page    47

h9c            93*
h9d            94*
hb0            95*
hb1            96*
hc0            97*
hc1            98*
hc5            99*
hc8           100*
hc9           101*
head          125*  132*  139*  147*  324   641*  657:  657   669   670   685   719   721   761:  762 
              804:  806   807   808   925   987*  995  1032  1049  1172: 1173  1183: 1184 
here          160*  329   332   441   467   504   690   727   733   772   780   816   862   864   950 
              997   998   999  1000  1004  1035  1112  1135  1136  1137  1138  1188= 1206  1208  1209 
             1210 
i             209*  217=  217 
incname      1132 
index         919*  931=  933   933=  933   937 
input_code     99*
insert_code   333   691 
integer        19*   39*   50*   53*  126*  141*  149*  161*  167*  175*  176*  187*  207*  209*  239*
              315*  489*  597*  642*  643*  647*  653*  713*  758*  801*  841*  918*  989* 1095*
interval       69*
label_length  110*  111*  320*  680   681   687   709*
label_size    110*
lam            38*  382  1155 
lammess       146*  925 
lamname       177*  379=  380=  381 
lam_level     149*  929 
lam_num       148*  928 
lam_pri       387 
lam_sem_no    383 
lam_size      384 
lastword      205*  207*  216   216 
length        653*  680=  683=  687   696 
level          39*  373*  382   388   918*  929=  933   937   938   941 
leveltab       56*  178*  178*
leveltable    178*  388=  933   938   941   944=
link          355   437   463  1155 
lock          211:  232:  323:  503:  657:  665:  666:  677:  678:  716:  761:  804:  856:  925:  970:
              995: 1031: 1048: 1172: 1183: 1264:
log           677:  685   694   695   696 
logleng       111*  644*  683 
logm          654*  660   661   665:  672   677:  698 
logshape      640*  677 
\f

tssuplst    81.06.16.   09.17.                                                    page    48

log_code       80*  698 
lost          163*  974  1042  1080  1112 
m              19*  209*  214=  215   215=  216   216=  217 
macro         440   441   466   467   504=  504   669=  669   688=  688   725   733   764   766   772 
              780   807   811   816   862   864   865   867   997=  998   998   999   999  1000  1000 
             1049  1135= 1206  1208  1208  1209  1209  1210  1210  1265  1265 
macroaddr      28*   33*  712*  755*  800*  988* 1135  1206 
main_sem       40*
make_log      636*  781   812  1266 
maxno         105* 1075 
maxqueue      165*  271   271= 1041 
maxroute       46*   55*
max_lam        56*  178*  179*  916*
micro         330=  505=  670=  689=  726   765   808  1136= 1173 
microadr       64*  330   597*  600   601   602   603   604   605  1223 
modul         753*  773=  776=  783=  785=  797*  814=  818=  819   823=
module        189* 1109= 1112  1218= 1220  1221  1222  1223  1223  1223  1258= 1260  1261  1267= 1268 
             1271  1274 
module_timeout                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              483* 1260 
modulident     52*   67*   74*
modulref       51*   53*   54*   55*  189*  317*  485*  598*  753*  797* 1025*
modulroute     55*   72*
modulstate     54*  168*  168*
modultable     53*   64*   69*
ms            170* 1100  1100  1102  1103  1105  1106  1111  1112  1116  1117  1117  1118  1143  1144 
             1145  1165  1166  1168  1172: 1176  1177  1180  1181  1183: 1186  1197  1197  1199  1201 
             1204  1204  1248  1253  1257  1260  1261  1264: 1266  1267  1268  1271  1276  1277  1278 
             1279  1281  1282  1284 
ms1           169* 1099  1099  1245  1246 
msg           203*  211:  252*  256   257   258   259   260   267*  272   313*  323:  340   341   341 
              342   343   484*  500   503:  531   543   565   613*  622   624   626   627   636*  657:
              657   661   663   666:  678:  706*  716:  720   734   737   738   739   741   742   744 
              752*  761:  770   773   775   781   783   786   796*  804:  812   814   820   821   832*
              851   856:  869   877   879   880   881   881   886   887   888   888   895   896   897 
              897   902   912*  922   925:  953   954   961*  967   970:  975   983*  993   995: 1013 
             1015  1021* 1029  1031: 1044  1046  1048: 1060  1061  1066* 1075  1079  1082  1083  1084 
             1085  1086  1087 
nb_code        81*  672 
nc             51*  188*  327   558   563   565   872   873   999  1000  1012  1051  1138  1209  1210 
             1212 
ncaddr        835*  844*
ncpart        837*  864=  867=
nc_addr       864   867  1000= 1000  1049  1210= 1210 
\f

tssuplst    81.06.16.   09.17.                                                    page    49

nc_down        85*  560   561   872:
nc_ident       61*   65*  556:
nc_long       186* 1038=
nc_short      186*
nc_up          86*  873: 1051 
netaddr       188*  327   440   466   669   688   782   811   998   999  1000  1137= 1138= 1208  1209 
             1210  1265 
netc           51*   52*   72*   72*  175*  191*  327   341   527   539   604   823   887   896  1109 
             1151  1218  1280:
netc_mic_addr                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               64*  604  1174 
netc_route     74*   74*  738   821  1170: 1261:
netc_route1    74*  341   737   786   820   878: 1167: 1176  1262:
netc_sem_no   260  1151  1177  1282 
newlam_code    93*  922 
newleng       709*  723 
new_addr_code                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               95*  993  1180  1186 
new_ans_code   96* 1013 
new_lam       912* 1084 
no            175*  343  1151= 1152= 1153=
node         1025* 1050= 1051= 1052  1054  1058 
nodeans_code   98* 1044  1046 
nodetest_cnt  167*
nodetest_code                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               97* 1029  1181 
node_up      1026* 1050= 1051=
note          138*  323   856 
not_found    1284 
not_ready    1191  1201 
no_of_by      326=  687=  723=
no_req_supp   176* 1141 
no_tss_tim    192*  193*
nr            373*  377   379   380   383   384   387   388   918*  928=  937   938   941   943   944 
number        239*  241 
object        503 
odd           239*  241=
open          619  1245  1246 
operation     253*  258   316*  335   342 
opsem           9*   18*   27*   32*   38*  357   382   439   465  1132 
op_code       335=  657=  720=  972 
ord           379   380 
own          1132 
own_dc        843*  862=  863   870   871 
\f

tssuplst    81.06.16.   09.17.                                                    page    50

own_nc        844*  863   864   872   873 
pool          176*  192*  193*  195*
process         8*   18*   27*   32*   38*
proc_athan    182*  461   470   471 
proc_lam      179*  377   384   387   943 
proc_timeout  180*  353   359   360 
proc_vchan    181*  435   444   445 
pu             39*
pu_no         382 
quelen        164*  270=  270   271   271   694  1039  1249= 1249 
queput        166*  269  1040 
queue         114*  272  1102  1106  1245  1246  1248 
rawdata       648*  696 
rawleng       112*  648*  652*  682 
rawshape      646*  678 
read_clock    106* 1148 
rec           327=  329=  330   669   670   688   689   724=  725   726   764   765   807   808   949=
             1003= 1034= 1173  1188  1192  1193= 1265 
receiver      712*  725=  733   755*  764=  772   800*  807=  811   816 
recip         317*  327   330   341   343 
rec_broadcast                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              832* 1083 
rec_returned  961* 1082 
reference     170*  191*  196*  203*  252*  267*  313*  484*  491*  613*  636*  654*  706*  752*  796*
              832*  845*  912*  961*  983* 1021* 1066*
refuse        706*  775   954  1015  1061  1087  1100  1105  1118  1199  1201  1284 
refuse_code    82*  663   734   739   744   773 
rejected      927 
remove        943 
res           485*  589=
result        334=  728=  927=  938=  945= 1006= 1036= 1189= 1191=
result_range  706*
return        499   584   585   626   901   902   975  1060  1079  1099  1117  1168  1276 
route         596*  600=  601=  602=  603=  604=  605=  606=  740   785   818 
running       168*  525   530=  537   541=  558   562=  563=  781   782=  812   870=  871=  872=  873=
             1011= 1012= 1054  1058= 1211= 1212= 1265= 1266 
s             230   260   272   343   532   544   566   741   742  1053  1143  1145  1147  1177  1220 
             1221  1224  1278  1279  1282 
sem            10*   29*   34*  230   231   260   272   343   358   383   442   468   494   496   532 
              532   544   544   566   566   619   622   627   741   742   848  1053  1053  1102  1106 
             1111  1116  1143  1145  1147  1165  1177  1220  1221  1224  1224  1245  1245  1246  1248 
             1253  1278  1279  1282 
sempointer      9*   18*   27*   32*   38*
send          332=  690=  724   727=  766   767   949   950= 1003  1004= 1034  1035= 1049  1193  1194=
\f

tssuplst    81.06.16.   09.17.                                                    page    51

send_up       251*  672   698   734   744   953  1013  1044  1197  1204 
sensesem      494   496   848  1102  1106  1245 
shadow        179*  182*
signal        230   260   272   343   741   742  1145  1177  1278  1279  1282 
size_listen   112*
size_supp     111*  176*
start         360   387   445   471 
start_athan   459* 1228 
start_code    935 
start_lam     373*  937  1157 
start_timeout                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              351* 1159 
start_vchan   433* 1227 
suppool       176* 1143 
supp_sem_no   116*  619   622   627  1143  1145 
t              19*
table         986*  995 
testopen     1132 
testout       217   363   390   448   474   879   886   895   967   972  1080  1133  1156 
testshape     124* 1031  1048 
tim            19*
time          228*  232 
timeout_l     358 
timeout_sem_no                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              230   358   532   544   566  1053  1224 
timerbook     531   543   565  1223 
timers        193*  503 
timerupdate  1052 
time_out_unit                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              358 
timout         18*  355   357   364 
tim_pri       360 
tim_route    1259:
tim_route1   1260:
tim_size      359 
top           916*  919*  937 
to_queue      267*  500   661   851 
trace        1097 
traffic        51*
traffic_id     60*   65*
true          168*  168*  782   871   873  1011  1012  1058  1211  1212 
tsa            28*   33*
tss            51*   72*   72*   72*  605   819  1277:
tssupervisor    8*
\f

tssuplst    81.06.16.   09.17.                                                    page    52

tssup_int1    114*
tssup_int2    115*
tssup_int3    116*
tssup_sem_no 1116  1165  1220  1253 
tss_ath_time   69*
tss_dc_stime   70*
tss_function 1066* 1277 
tss_mic_addr  605  1136  1179 
tss_nc_ltime   70*
tss_nc_stime   70*
tss_netc_time                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               69*
tss_route     257   341  1144  1149  1222 
tss_vch_time   69*
ts_add        336=  692=  729=  806=  951= 1005= 1037= 1195=
ts_down        87* 1112 
ts_pointer     19*   40*
ts_pointer_vector                                                <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               10*   29*   34*
ts_time       195*  226*  228*
ts_up          88*
t_out         190* 1220  1223 
t_pool        193* 1220 
t_up          191*  531   543   565  1052  1221  1222  1223 
u1            256=  340= 1148=
u3            257=  341=  341=  624   737=  738=  786=  820=  821=  877   879   886   895  1144= 1149=
             1166  1176= 1222= 1257 
u3val          74*
u4            258=  342=  657   663   720   739=  773   869   880   881   887   888   896   897   922 
              967   993  1029  1046  1075  1117  1180  1181  1186  1197  1204 
unit          842*  859=  865   867   880   881   887   888   896   897 
unit_dc       843*  865=  866   870   871 
unit_nc       844*  866   867   872   873 
unknown_opcode                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              954  1015  1061  1087  1199 
unknown_receiver                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              775 
unlink        364   449   475 
update        333=  691=  935 
updates       192*
upwards       795* 1271 
u_pool        192* 1221 
var_update    983* 1085 
vca_route     891:
\f

tssuplst    81.06.16.   09.17.                                                    page    53

vca_route1    892:
vch            51*   72*  528   537   541   543   561   601   602   742:  880   888  1152  1278:
vch_mic_addr   64*  535:  602 
vch_pri       445 
vch_sem_no    742  1152  1278 
vch_size      444 
vci_route     893:
vci_route1    894:
vc_addr_limit                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              601   737   786   820 
vc_down        89*  539   540 
vc_handler     32*  437   439   449 
vc_up          90*
version        14* 1133 
w             207*  214   217   231   494   496   532   544   566   619   622   627   848  1053  1102 
             1106  1111  1116  1165  1224  1245  1245  1246  1248  1253 
wait          231   622   627  1111  1116  1165  1248  1253 
waitlog       612*  660 
watch        1021* 1086 
who           159*  489*  503=  505   506   531   543   565   713*  726=  737   740   758*  765=  785 
              786   801*  808=  818   820  1192= 1194 
write         107*  256   340 
xmt_dc        757*  766=  780 
zone          171*
\f

tssuplst    81.06.16.   09.17.                                                    page    54

AND                4
ARRAY             15
BEGIN             97
CASE               8
CONST              7
DIV                3
DO                41
ELSE              37
END              115
FOR                5
FUNCTION           3
IF                77
MOD                5
NIL               16
NOT                7
OF                27
OR                 1
OTHERWISE          8
PACKED             7
PROCEDURE         21
RECORD            10
REPEAT             3
THEN              77
TO                 5
TYPE               7
UNTIL              3
VAR               37
WHILE              3
WITH              12
 ts supervisor
81.06.16.      09.18.                         pascal80     version 1981.04.01


   name        headline beginline endline  appetite(words) 

   display        205       211     219  :      30            
   gettime        228       230     232  :       9            
   odd            240       242     242  :       4            
   send_up        254       256     261  :      10            
   to_queue       268       269     272  :      10            
   broadcast      320       323     343  :      20            
   start_timeou   352       354     367  :      36            
   start_lam      375       378     392  :      38            
   start_vchan    434       436     452  :      38            
   start_athan    460       462     478  :      38            
   module_timeo   488       494     590  :      35            
   route          599       600     607  :       3            
   waitlog        615       620     631  :       8            
   make_log       640       657     702  :      30            
   refuse         709       716     747  :      22            
   downwards      755       761     789  :      20            
   upwards        800       804     825  :      20            
   rec_broadcas   835       848     907  :      34            
   new_lam        916       923     954  :      24            
   rec_returned   964       967     975  :      22            
   var_update     986       994    1015  :      20            
   watch         1025      1030    1061  :      25            
   tss_function  1071      1075    1090  :      18            
   exception     1096      1097    1121  :      18            
   tssupervisor    14      1132    1288  :     372            

 code: 8 . 1128  = 10728 bytes


end of PASCAL80 compilation 

end
blocksread = 53
▶EOF◀