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

⟦556e6fa4f⟧ TextFileVerbose

    Length: 134400 (0x20d00)
    Types: TextFileVerbose
    Names: »tsvaclst«

Derivation

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

TextFileVerbose

\f

tsvaclst    81.01.19.   16.20.                                                    page     1

   10    1           
\f

tsvaclst    81.01.19.   16.20.                                                    page     2

 1010    2            (* vc(at)-connector alarmsystem  *)
 1020    3          
 1030    4            (**** short decription of process *****
 1040    5            
 1050    6            PROCESS vcatc ( param );
 1060    7            declarations;
 1070    8            procedures;
 1080    9            functions;
 1090   10            
 1100   11            BEGIN
 1110   12            start of lam-driver;
 1120   13            alloc of buffers;
 1130   14            initialiser variables;
 1140   15            
 1150   16            REPEAT
 1160   17            read buffer to mess_ref;
 1170   18            rute , func , types := depend of u3 and u4;
 1180   19            
 1190   20            *** classify buffer ***
 1200   21            CASE rute of
 1210   22            CASE types of
 1220   23            
 1230   24            : buftype:=
 1240   25            
 1250   26            END
 1260   27            END
 1270   28            
 1280   29            action:= acttable ( vcatc_state , buftype );
 1290   30            
 1300   31            *** make action ***
 1310   32            CASE action of
 1320   33            1 :
 1330   34            2 :
 1340   35            8 : lamspeak;
 1350   36            16 :
 1360   37            END
 1370   38            
 1380   39            *** send buffer ***
 1390   40            CASE buftype of
 1400   41            
 1410   42            
 1420   43            END
 1430   44            UNTIL FALSE
 1440   45            END.
 1450   46            ***)
 1460   47           
\f

tsvaclst    81.01.19.   16.20.                                                    page     3

 2010   48        PROCESS vcatc(
 2020   49          opsem      : sempointer;
 2030   50          VAR
 2040   51          messem  ,                   (*input to connector*)
 2050   52          queuesem   : !ts_pointer;   (*queue of unprocessed messages*)
 2060   53          VAR
 2070   54          vchsem  ,                   (*output to vc-handler*)
 2080   55          lamsem  ,                   (*message to lam-driver*)
 2090   56          timeoutsem ,                (*for booking and update*)
 2100   57          com_pool : !sempointer;
 2110   58          VAR
 2120   59          dc_address : macroaddr;     (*macro addresse own dc*)
 2130   60          micadr     : integer;       (*micro adr for this vc(at)*)
 2140   61          canno      : byte);         (*cannel number to lamdriver*)
 2150   62          
 2160   63          
 2170   64           
\f

tsvaclst    81.01.19.   16.20.                                                    page     4

 3010   65        CONST
 3020   66          version         = "vers  3.07 /";
 3030   67          max_lbuf_needed = 5;   (*------ consts used by LAMSPEAK ------*)
 3040   68          max_info_bytes  = 2;
 3050   69          
 3060   70          
 3070   71        TYPE
 3080   72          mask_unknown = RECORD
 3090   73                         !  fix : alarmlabel;
 3100   74                         !  data: alarmlabel;
 3110   75                         END;
 3120   76          
 3130   77          mask_service = RECORD
 3140   78                         !  fix : alarmlabel;
 3150   79                         !  data: integer;
 3160   80                         END;
 3170   81          
 3180   82          mask_poll    = RECORD
 3190   83                         !  fix : alarmlabel;
 3200   84                         !  error_count : integer;
 3210   85                         !  poll_rate   : integer;
 3220   86                         END;
 3230   87          
 3240   88          mask_vcm     = RECORD
 3250   89                         !  fix  : alarmlabel;
 3260   90                         !  data : alarmnetaddr;
 3270   91                         END;
 3280   92          
 3290   93          mask_atvcdc  = RECORD
 3300   94                         !  fix : alarmlabel;
 3310   95                         !  at  : alarmnetaddr;
 3320   96                         !  vc  : alarmnetaddr;
 3330   97                         !  dc  : alarmnetaddr;
 3340   98                         END;
 3350   99          
 3360  100          mask_atadr   = RECORD
 3370  101                         !  fix  : alarmlabel;
 3380  102                         !  entry: at_addr_e;
 3390  103                         END;
 3400  104          
 3410  105          mask_atts    = RECORD
 3420  106                         !  fix  : alarmlabel;
 3430  107                         !  entry: at_ts_e;
 3440  108                         END;
 3450  109          
 3460  110          mask_test    = RECORD
\f

tsvaclst    81.01.19.   16.20.                                                    page     5

 3470  111                         !  fix  : alarmlabel;
 3480  112                         !  data : ARRAY(1..5) OF integer;
 3490  113                         END;
 3500  114          
 3510  115          ch_format  = PACKED RECORD
 3520  116                              !  cntl_inf : byte;
 3530  117                              !  time_inf : byte;
 3540  118                              END;
 3550  119          
 3560  120          state_type =  (not_ready,      (* initially table *)
 3570  121                         passive,         (* waiting start poll *)
 3580  122                         active,          (* polling state *)
 3590  123                         lam_talk,        (* lamspeak active *)
 3600  124                         lam_need_buf,    (* lamspeak waiting listenbuf *)
 3610  125                         vcatc_need_buf,  (* vcatc waiting listenbuf *)
 3620  126                         wait_shorttime,  (* waiting shorttime from vcath *)
 3630  127                         stop_poll);      (* send stop poll mess *)
 3640  128          
 3650  129          buf_type   = (unknown,  (*unknown buffer*)
 3660  130                        alarm  ,  (*alarmbuffer*)
 3670  131                        listen ,  (*listen buffer*)
 3680  132                        table  ,  (*buffer for update tables*)
 3690  133                        report ,  (*buffer to vc(at)*)
 3700  134                        service,  (*buffer to vc(at)-connector*)
 3710  135                        testat ,  (*testbuffer to vc(at)*)
 3720  136                        operate,  (*vc,dc operations*)
 3730  137                        clock  ,  (*poll pulse*)
 3740  138                        ltime  ,  (*longtime timeout*)
 3750  139                        stime  ,  (*shorttime timeout*)
 3760  140                        lam    ,  (*answer from lam-driver*)
 3770  141                        used   ,  (*current buffer on inner semaphore*)
 3780  142                        empty  ,  (*empty buffer to return*)
 3790  143                        permiss);  (* dc to vc ask buffer *)
 3800  144          
 3810  145          input_type       = (from_sem       ,
 3820  146                              from_listen_ref,
 3830  147                              nothing        );
 3840  148          
 3850  149          
 3860  150            (*------------- Types only used by the LAMSPEAK procedure ---------*)
 3870  151          
 3880  152          to_telegram_type = PACKED RECORD
 3890  153                                    !  to_data      : 0..255;    (* 8 bits *)
 3900  154                                    !  to_opcode    : 0..  3;    (* 2 bits *)
 3910  155                                    !  to_serial_no : 0..  1;    (* 1 bit  *)
 3920  156                                    !  to_check     : 0.. 31     (* 5 bits *)
\f

tsvaclst    81.01.19.   16.20.                                                    page     6

 3930  157                                    END;
 3940  158          
 3950  159          lbuf_kind_type   = (log, norm);
 3960  160          
 3970  161          lbuf_record       = RECORD
 3980  162                              !  kind : lbuf_kind_type;
 3990  163                              !  noob : integer;
 4000  164                              !  reci : alarmnetaddr;
 4010  165                              !  opco : byte;
 4020  166                              !  upda : 0..15;
 4030  167                              !  resu : 0..15;
 4040  168                              !  dta1 : byte;
 4050  169                              !  dta2 : byte;
 4060  170                              !  addr : alarmnetaddr
 4070  171                              END;
 4080  172          
 4090  173          oknok_type       = (ok , nok);  (* state of transmitter line *)
 4100  174           
\f

tsvaclst    81.01.19.   16.20.                                                    page     7

 5010  175        VAR
 5020  176          test        : boolean := true;
 5030  177          buftype     : buf_type;          (* type of current buffer *)
 5040  178          vcatc_state : state_type;
 5050  179          old_state   : state_type;
 5060  180          input       : input_type;
 5070  181          line        : oknok_type;   (* transmitter line state *)
 5080  182          lamspeak_state :  (nottele, lettertovc, polling, letterfromvc, testi);
 5090  183          
 5100  184          
 5110  185            (* no of record's in tables *)
 5120  186          noatadr,
 5130  187          noatts ,
 5140  188          novcm  ,
 5150  189          novce  : integer := 0;
 5160  190          
 5170  191            (*tables*)
 5180  192          atadrtable: ARRAY(1..vc_addr_l) OF at_addr_e;(*atadrcode <=> netadr*)
 5190  193          attstable : ARRAY(1..at_ts_l ) OF at_ts_e;   (*ts addresse for at*)
 5200  194          vcmtable  : ARRAY(1..vcmat_l ) OF vcmat_e;   (*vc addresse for potentiel guard transfer*)
 5210  195          vcetable  : ARRAY(1..vce_l   ) OF vce_e;     (*vc addresse with guardtransfer to this connector*)
 5220  196          
 5230  197          rute  : byte;
 5240  198          func,
 5250  199          types : func_grp;
 5260  200          found : boolean;         (* auxiliary *)
 5270  201          action,                  (* auxiliary *)
 5280  202          intg_aux,                (* auxiliary *)
 5290  203          next  : integer;         (* auxiliary *)
 5300  204          adr_code: byte;
 5310  205          own_dc   ,
 5320  206          cur_vcm  ,
 5330  207          zero_addr,
 5340  208          work     : alarmnetaddr;
 5350  209          listen_ref,           (* unused listenbufs *)
 5360  210          bookup_ref,           (*booking or update timeout module*)
 5370  211          clock_ref,            (*unused clockbuffer*)
 5380  212          timeout_ref,          (*unused timeoutbuffer*)
 5390  213          tolam_ref,            (* unused lambuffer *)
 5400  214          fromlam_ref,          (* buffer from lamdriver *)
 5410  215          mess_ref : reference; (* current buffer *)
 5420  216          timeout_answer: semaphore;       (* immediately answer from timeout modul *)
 5430  217          
 5440  218          lam_pool  : pool 1 OF integer;          (* rettes til integer *)
 5450  219          tim_pool  : pool no_vcc_tim OF timers; (* rettes til timers *)
 5460  220          book_pool : pool no_vcc_upd OF updates; (* rettes til updates *)
\f

tsvaclst    81.01.19.   16.20.                                                    page     8

 5470  221          
 5480  222            (* counters *)
 5490  223          pack_counter,                   (* no of mess to vch *)
 5500  224          trans_ok    ,                   (* succession of ok telegram *)
 5510  225          no_of_queue,                    (* no of bufs in queue *)
 5520  226          line_error_count,               (* total number of transmiterror *)
 5530  227          no_of_listen,                   (* no of bufs on listensem *)
 5540  228          no_of_returned,                 (* no of received returned bufs *)
 5550  229          no_of_released,                 (* no of needless bufs released *)
 5560  230          no_of_unknown : integer:= 0;    (* no of unknown messages received *)
 5570  231          
 5580  232          index,object: integer;      (*param to book and update*)
 5590  233          
 5600  234            (* limits *)
 5610  235          serve_limit     : integer := service_lim;
 5620  236          stoppoll_limit  : integer := stop_poll_lim;
 5630  237          max_succ_errors : integer := max_succ_lin_err;
 5640  238          fix_incr_on_err : integer := trans_err_rate;
 5650  239          poll_delay      : integer := poll_delay_time;
 5660  240          
 5670  241          zout : zone;        (* testoutput from modul *)
 5680  242          
 5690  243            (*--------- Vars only used by the LAMSPEAK procedure ----------*)
 5700  244          
 5710  245          speak_action        : integer := 8; (* as p_ack in polling state *)
 5720  246          keep_the_telegram   : to_telegram_type;
 5730  247          area_to_lam        ,
 5740  248          area_from_lam       : ARRAY (1..3) OF byte;
 5750  249          lbuf_info           : ARRAY (1..max_lbuf_needed) OF lbuf_record;
 5760  250          keep_the_opcode     : byte;
 5770  251          teletxt             : alfa;
 5780  252          at_table_addr       : alarmnetaddr;
 5790  253          atts_table_index    : integer;
 5800  254          
 5810  255          serial_no       ,
 5820  256          succ_line_errors,
 5830  257          area_pointer    ,
 5840  258          lbuf_needed         : integer := 0;
 5850  259          
 5860  260          below_serve_limit  ,
 5870  261          below_stoppoll_limit,
 5880  262          lamtest,
 5890  263          boo                 : boolean := true;
 5900  264          
 5910  265           
\f

tsvaclst    81.01.19.   16.20.                                                    page     9

 6010  266        TYPE
 6020  267          row = ARRAY(buf_type) OF integer;
 6030  268          col = ARRAY(state_type) OF row;
 6040  269        CONST
 6050  270          acttable = col (
 6060  271                            (*                     u              s     o                    p *)
 6070  272                            (*                     n     l     r  e  t  p                    e *)
 6080  273                            (*                     k  a  i  t  e  r  e  e  c  l  s        e  r *)
 6090  274                            (*                     n  l  s  a  p  v  s  r  l  t  t     u  m  m *)
 6100  275                            (*                     o  a  t  b  o  i  t  a  o  i  i  l  s  p  i *)
 6110  276                            (*                     w  r  e  l  r  c  a  t  c  m  m  a  e  t  s *)
 6120  277                            (*                     n  m  n  e  t  e  t  e  k  e  e  m  d  y  s *)
 6130  278                            (*not_ready     *)row( 1, 2, 4, 5, 2, 2, 2, 2, 6, 6, 6, 6, 0,18, 2),
 6140  279                            (*passive       *)row( 1, 3, 4, 5, 3, 7, 3,15, 6, 6, 6, 6, 0,18, 3),
 6150  280                            (*active        *)row( 1, 8, 4, 5, 8, 7, 8,15, 8, 6, 6, 6, 0,18, 8),
 6160  281                            (*lam_talk      *)row( 1, 9, 4, 9, 9, 7, 9,15,10,11,12, 8, 0,18, 9),
 6170  282                            (*lam_need_buf  *)row( 1, 9, 8, 9, 9, 7, 9,15,19,11,12,17, 0,18, 9),
 6180  283                            (*vcatc_need_buf*)row( 1, 9,13, 9, 9, 7, 9, 9,10, 6,14,17, 0,18, 9),
 6190  284                            (*wait_shorttime*)row( 1, 9,16, 9, 9, 9, 9, 9,10, 6,14,17, 0,18, 9),
 6200  285                            (*stop_poll     *)row( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
 6210  286           
\f

tsvaclst    81.01.19.   16.20.                                                    page    10

 7010  287          
 7020  288          PROCEDURE save_listen_buf;
 7030  289          FORWARD;
 7040  290          
 7050  291          PROCEDURE update(ticks: integer);
 7060  292              (* update the booked timeoutbuffer *)
 7070  293          BEGIN
 7080  294    1     ! bookup_ref^.u1:= update_req;
 7090  295    2     ! bookup_ref^.u4:= #hc4;
 7100  296    3     ! LOCK bookup_ref AS buf: updates DO
 7110  297    4     !   BEGIN
 7120  298    5     !   ! buf.index := index;
 7130  299    6     !   ! buf.count := ticks;
 7140  300    7     !   ! buf.object:= object
 7150  301    8     !   END;
 7160  302    9     ! signal(bookup_ref,timeoutsem^);
 7170  303   10     ! wait  (bookup_ref,timeout_answer);
 7180  304   11     !   (*q if test then testout(zout,"update      ",ticks*10+bookup_ref^.u2); q*)
 7190  305   12     END;
 7200  306          
 7210  307          PROCEDURE book(ticks: integer);
 7220  308              (* booking of one modultimeout *)
 7230  309          BEGIN
 7240  310    1     ! IF NOT nil( timeout_ref ) THEN
 7250  311    2     !   BEGIN
 7260  312    3     !   ! bookup_ref^.u1:= book_req;
 7270  313    4     !   ! bookup_ref^.u4:= #hc3;
 7280  314    5     !   ! LOCK bookup_ref AS buf: updates DO
 7290  315    6     !   !   BEGIN
 7300  316    7     !   !   ! buf.count:= ticks;
 7310  317    8     !   !   ! buf.object:= ticks
 7320  318    9     !   !   END;
 7330  319   10     !   ! LOCK timeout_ref AS buf: timers DO
 7340  320   11     !   !   buf.object:= ticks;
 7350  321   12     !   ! push(timeout_ref,bookup_ref);
 7360  322   13     !   ! signal(bookup_ref,timeoutsem^);
 7370  323   14     !   ! wait(bookup_ref,timeout_answer);
 7380  324   15     !   !   (*q if test then testout(zout,"book        ",ticks*10+bookup_ref^.u2); q*)
 7390  325   16     !   ! LOCK bookup_ref AS buf: updates DO
 7400  326   17     !   !   BEGIN
 7410  327   18     !   !   ! index := buf.index;
 7420  328   19     !   !   ! object:= buf.object
 7430  329   20     !   !   END
 7440  330   21     !   END
 7450  331   22     END;
 7460  332          
\f

tsvaclst    81.01.19.   16.20.                                                    page    11

 7470  333          
 7480  334          
 7490  335           
\f

tsvaclst    81.01.19.   16.20.                                                    page    12

 8010  336          FUNCTION get_adr_code(atadr: alarmnetaddr; VAR code: byte): boolean;
 8020  337          VAR
 8030  338            found: boolean;
 8040  339          BEGIN
 8050  340    1     ! next:= 1;
 8060  341    2     ! found:= false;
 8070  342    3     ! WHILE (NOT found) AND (next<=noatadr) DO
 8080  343    4     !   IF atadr=atadrtable(next).at_addr THEN
 8090  344    5     !     BEGIN
 8100  345    6     !     ! found:= true;
 8110  346    7     !     ! code := atadrtable(next).addr_code
 8120  347    8     !     END ELSE next:= next+1;
 8130  348    9     ! get_adr_code:= found;
 8140  349   10     END;
 8150  350          
 8160  351          
 8170  352          
 8180  353          FUNCTION get_net_addr(VAR atadr: alarmnetaddr; code: byte): boolean;
 8190  354          VAR
 8200  355            found: boolean;
 8210  356          BEGIN
 8220  357    1     ! next:= 1;
 8230  358    2     ! found:= false;
 8240  359    3     ! WHILE (NOT found) AND (next<=noatadr) DO
 8250  360    4     !   IF code = atadrtable(next).addr_code THEN
 8260  361    5     !     BEGIN
 8270  362    6     !     ! found:= true;
 8280  363    7     !     ! atadr:= atadrtable(next).at_addr
 8290  364    8     !     END ELSE next:= next+1;
 8300  365    9     ! get_net_addr:= found;
 8310  366   10     END;
 8320  367          
 8330  368           
\f

tsvaclst    81.01.19.   16.20.                                                    page    13

 9010  369          
 9020  370          FUNCTION get_atts_index(tsadr: macroaddr; VAR index: integer): boolean;
 9030  371          VAR
 9040  372            found: boolean;
 9050  373          BEGIN
 9060  374    1     ! next := 1;
 9070  375    2     ! found:= false;
 9080  376    3     ! WHILE (NOT found) AND (next<=noatts) DO
 9090  377    4     !   IF tsadr = attstable(next).ts_addr THEN
 9100  378    5     !     BEGIN
 9110  379    6     !     ! found:= true;
 9120  380    7     !     ! index:= attstable(next).index
 9130  381    8     !     END ELSE next:= next+1;
 9140  382    9     ! get_atts_index:= found;
 9150  383   10     END;
 9160  384          
 9170  385           
\f

tsvaclst    81.01.19.   16.20.                                                    page    14

10010  386          
10020  387          PROCEDURE unknown_buf(error: byte);
10030  388              (* returning of one unknown buffer *)
10040  389          BEGIN
10050  390    1     ! buftype:= unknown;
10060  391    2     ! mess_ref^.u4:= #h10;
10070  392    3     ! LOCK mess_ref AS buf: mask_unknown DO
10080  393    4     !   WITH buf DO
10090  394    5     !     BEGIN
10100  395    6     !     ! data:= fix;
10110  396    7     !     ! fix.rec       := own_dc;
10120  397    8     !     ! fix.send.micro:= micadr;
10130  398    9     !     ! fix.no_of_by  := 2*label_size+2;
10140  399   10     !     ! fix.result    := error
10150  400   11     !     END;
10160  401   12     ! no_of_unknown:= (no_of_unknown MOD max_int) + 1
10170  402   13     END;
10180  403          
10190  404          
10200  405          PROCEDURE return_buf( error: byte );
10210  406              (* returned buffer to sender with error *)
10220  407          BEGIN
10230  408    1     ! LOCK mess_ref AS buf: alarmlabel DO
10240  409    2     !   WITH buf DO
10250  410    3     !     IF send.micro < at_addr_limit THEN
10260  411    4     !       BEGIN  (* receipt with error *)
10270  412    5     !       ! buftype:= unknown;
10280  413    6     !       ! mess_ref^.u4:= mess_ref^.u4 + 1;
10290  414    7     !       ! rec         := send;
10300  415    8     !       ! send.micro  := micadr;
10310  416    9     !       ! result      := error
10320  417   10     !       END;
10330  418   11     ! IF buftype <> unknown THEN unknown_buf( error);
10340  419   12     END;
10350  420          
10360  421           
\f

tsvaclst    81.01.19.   16.20.                                                    page    15

11010  422          PROCEDURE send_to_vch;
11020  423          BEGIN
11030  424    1     ! CASE mess_ref^.u4 DIV 16 OF
11040  425    2     ! ! 4,8 : pack_counter:= (pack_counter+1) MOD max_int;
11050  426    3     ! ! OTHERWISE
11060  427    4     ! END;
11070  428    5     ! signal(mess_ref,vchsem^);
11080  429    6     END;
11090  430          
11100  431          PROCEDURE restart_clock;
11110  432          BEGIN
11120  433    1     ! signal(mess_ref,timeoutsem^);
11130  434    2     ! IF no_of_listen<2 THEN
11140  435    3     !   BEGIN
11150  436    4     !   ! sensesem(mess_ref,com_pool^);
11160  437    5     !   ! IF NOT nil (mess_ref) THEN save_listen_buf;
11170  438    6     !   ! buftype:= clock;
11180  439    7     !   END
11190  440    8     END;
11200  441           
\f

tsvaclst    81.01.19.   16.20.                                                    page    16

12010  442          FUNCTION get_listen_buf: boolean;
12020  443              (* serving out one listenbuf from listen_ref *)
12030  444          BEGIN
12040  445    1     ! IF no_of_listen>0 THEN
12050  446    2     !   BEGIN
12060  447    3     !   ! pop(mess_ref,listen_ref);
12070  448    4     !   ! mess_ref^.u2:= 1;
12080  449    5     !   ! mess_ref^.u3:= netc_route;
12090  450    6     !   ! mess_ref^.u4:= #hc5;
12100  451    7     !   ! buftype:= listen;
12110  452    8     !   ! no_of_listen:= no_of_listen - 1;
12120  453    9     !   !   (*q if test then testout(zout," no of li : ",no_of_listen); q*)
12130  454   10     !   ! get_listen_buf:= true;
12140  455   11     !   END ELSE
12150  456   12     !   get_listen_buf:= false
12160  457   13     END;
12170  458          
12180  459          
12190  460          
12200  461          PROCEDURE save_listen_buf;
12210  462              (* save listenbuf from mess_ref to listen_ref *)
12220  463          BEGIN
12230  464    1     ! push(mess_ref,listen_ref);
12240  465    2     ! buftype:= used;
12250  466    3     ! no_of_listen:= no_of_listen + 1;
12260  467    4     !   (*q if test then testout(zout," no of li : ", no_of_listen); q*)
12270  468    5     END;
12280  469          
12290  470          
12300  471          
12310  472          
12320  473           
\f

tsvaclst    81.01.19.   16.20.                                                    page    17

13010  474          
13020  475          PROCEDURE lamspeak;
13030  476            
13040  477              (***************************************************************
13050  478              *                                                              *
13060  479              * Function:    Lamspeak is responsible for the communication   *
13070  480              *              with VC(AT) via lamdriver, that is the protocol *
13080  481              *              for telegram communication is administrated by  *
13090  482              *              lamspeak.                                       *
13100  483              *              The VC(AT)-Conn is in state LAM_TALK. Lamspeak  *
13110  484              *              can change vcatc_state to either ACTIVE or      *
13120  485              *              LAM_NEED_BUF, else vcatc_state is unchanged     *
13130  486              *              LAM_TALK.                                       *
13140  487              *                                                              *
13150  488              * Externals:                                                   *
13160  489              *                                                              *
13170  490              * Parameters:  None.
13180  491              *                                                              *
13190  492              * Semaphores:  None.
13200  493              *                                                              *
13210  494              * Programmed june 1980 by SRS
13220  495              *                                                              *
13230  496              ***************************************************************)
13240  497            
13250  498            
13260  499             
\f

tsvaclst    81.01.19.   16.20.                                                    page    18

14010  500          CONST
14020  501            
14030  502            p_ack  = 0;     data   = 1;      opr    = 2;
14040  503            status = 3;     d_ack  = 4;      t_ack  = 5;
14050  504            nak    = 6;     free   = 7;
14060  505            
14070  506          TYPE
14080  507            
14090  508            from_telegram_type = PACKED RECORD
14100  509                                        !  from_data   : 0..255;   (* 8 bits *)
14110  510                                        !  from_opcode : 0..  7;   (* 3 bits *)
14120  511                                        !  from_check  : 0.. 31    (* 5 bits *)
14130  512                                        END;
14140  513            
14150  514            mask_norm_lbuf = PACKED RECORD
14160  515                                    !  fix_label : alarmlabel;
14170  516                                    !  norm_inf  : byte
14180  517                                    END;
14190  518            
14200  519            mask_log_lbuf  = PACKED RECORD
14210  520                                    !  fix_label : alarmlabel;
14220  521                                    !  log_addr  : alarmnetaddr;
14230  522                                    !  log_opc   : byte;
14240  523                                    !  log_alarm : byte
14250  524                                    END;
14260  525            
14270  526          VAR
14280  527            
14290  528            slave_opcode         : integer;
14300  529            slave_data           : byte;
14310  530            
14320  531            numb_of_bytes        : integer := label_size;
14330  532            lam_timeout          : boolean := false;
14340  533            boo                  : boolean := true;
14350  534            
14360  535            
14370  536             
\f

tsvaclst    81.01.19.   16.20.                                                    page    19

15010  537            PROCEDURE calltest(VAR r : reference);
15020  538            BEGIN
15030  539    1       !   (*x lock r as telegram : to_telegram_type do
15040  540    2       !   begin
15050  541    3       !   if serial_no=0 then
15060  542    4       !   case telegram.to_opcode of
15070  543    5       !   0: teletxt := "  * POLL  0 ";
15080  544    6       !   1: teletxt := "  * DATA  0 ";
15090  545    7       !   2: teletxt := "  * TESTI 0 ";
15100  546    8       !   3: teletxt := "  * OPR   0 "
15110  547    9       !   end
15120  548   10       !   else
15130  549   11       !   case telegram.to_opcode of
15140  550   12       !   0: teletxt := "  * POLL  1 ";
15150  551   13       !   1: teletxt := "  * DATA  1 ";
15160  552   14       !   2: teletxt := "  * TESTI 1 ";
15170  553   15       !   3: teletxt := "  * OPR   1 "
15180  554   16       !   end;
15190  555   17       !   testout(zout, teletxt, telegram.to_data);
15200  556   18       !   end; x*)
15210  557   19       END;
15220  558            
15230  559             
\f

tsvaclst    81.01.19.   16.20.                                                    page    20

16010  560            PROCEDURE build_same_telegram( VAR r: reference );
16020  561            BEGIN
16030  562    1       ! r^.u2 := canno;
16040  563    2       ! 
16050  564    3       ! LOCK r AS telegram : to_telegram_type DO
16060  565    4       !   telegram := keep_the_telegram;
16070  566    5       ! IF lamtest THEN calltest( r );
16080  567    6       ! 
16090  568    7       END (* of procedure build_same_telegram *);
16100  569            
16110  570            
16120  571            PROCEDURE build_serial_changed_telegram( VAR r: reference );
16130  572            BEGIN  (* build the same telegram, but change serial_no *)
16140  573    1       ! r^.u2 := canno;
16150  574    2       ! serial_no := 1 - serial_no;
16160  575    3       ! 
16170  576    4       ! LOCK r AS telegram: to_telegram_type DO
16180  577    5       !   BEGIN
16190  578    6       !   ! telegram := keep_the_telegram;
16200  579    7       !   ! telegram.to_serial_no := serial_no
16210  580    8       !   END (* of lock statement *);
16220  581    9       ! 
16230  582   10       ! boo := check5( r, generate);
16240  583   11       ! 
16250  584   12       ! LOCK r AS telegram: to_telegram_type DO
16260  585   13       !   keep_the_telegram := telegram;
16270  586   14       ! 
16280  587   15       END (* of procedure build_serial_changed_telegram *);
16290  588            
16300  589            
16310  590             
\f

tsvaclst    81.01.19.   16.20.                                                    page    21

17010  591            PROCEDURE build_a_poll_telegram( VAR r: reference );
17020  592            BEGIN
17030  593    1       ! 
17040  594    2       ! r^.u2 := canno;
17050  595    3       ! 
17060  596    4       ! LOCK r AS telegram : to_telegram_type DO
17070  597    5       !   BEGIN
17080  598    6       !   !   (*----------------------------------- build up the buffer *)
17090  599    7       !   ! 
17100  600    8       !   ! serial_no := 1 - serial_no;
17110  601    9       !   ! WITH telegram DO
17120  602   10       !   !   BEGIN
17130  603   11       !   !   !   (*------------------------------ build the telegram *)
17140  604   12       !   !   ! to_opcode   := 0;
17150  605   13       !   !   ! to_serial_no:= serial_no;
17160  606   14       !   !   ! to_data     := 0;
17170  607   15       !   !   ! IF serial_no = 0 THEN
17180  608   16       !   !   !   to_check := 10            (* as bits 01010 *)
17190  609   17       !   !   ! ELSE
17200  610   18       !   !   !   to_check :=  19;           (* as bits 10011 *)
17210  611   19       !   !   END;
17220  612   20       !   !   (*---------------------------------- keep the telegram *)
17230  613   21       !   ! keep_the_telegram := telegram;
17240  614   22       !   ! 
17250  615   23       !   END (* of lock statement *);
17260  616   24       ! IF lamtest THEN calltest( r );
17270  617   25       ! 
17280  618   26       END (* of procedure build_a_poll_telegram *);
17290  619            
17300  620             
\f

tsvaclst    81.01.19.   16.20.                                                    page    22

18010  621            PROCEDURE build_a_letter_telegram( VAR r: reference );
18020  622            BEGIN
18030  623    1       ! serial_no := 1 - serial_no;
18040  624    2       ! r^.u2 := canno;
18050  625    3       ! 
18060  626    4       ! LOCK r AS telegram : to_telegram_type DO
18070  627    5       !   BEGIN   (* build up the buffer *)
18080  628    6       !   ! 
18090  629    7       !   ! WITH telegram DO
18100  630    8       !   !   BEGIN
18110  631    9       !   !   ! IF area_pointer = 1 THEN
18120  632   10       !   !   !   to_opcode := 3   (* OPR master opcode *)
18130  633   11       !   !   ! ELSE
18140  634   12       !   !   !   to_opcode := 1;  (* DATA master opcode *)
18150  635   13       !   !   ! to_serial_no := serial_no;
18160  636   14       !   !   ! to_data := area_to_lam( area_pointer );
18170  637   15       !   !   END;
18180  638   16       !   END (* of lock statement *);
18190  639   17       ! IF lamtest THEN calltest( r );
18200  640   18       ! 
18210  641   19       ! boo := check5( r, generate );  (* complete the telegram *)
18220  642   20       ! 
18230  643   21       !   (*---------------------------- keep the telegram *)
18240  644   22       ! LOCK r AS telegram : to_telegram_type DO
18250  645   23       !   keep_the_telegram := telegram;
18260  646   24       ! 
18270  647   25       END (* of procedure build_a_letter_telegram *);
18280  648            
18290  649            
18300  650            
18310  651            
18320  652             
\f

tsvaclst    81.01.19.   16.20.                                                    page    23

19010  653            PROCEDURE build_line_dep_telegram(
19020  654              VAR r   : reference;
19030  655              line_was: oknok_type
19040  656              );
19050  657              
19060  658                (* Maybe the serial number at VC(AT) has been changed *
19070  659                *  of some unknown reason. Line_was = nok indicates   *
19080  660                *  that the serial_no must be changed.                *)
19090  661              
19100  662            BEGIN
19110  663    1       ! 
19120  664    2       ! IF line_was = ok THEN
19130  665    3       !   build_same_telegram( r )
19140  666    4       ! ELSE   (* line was not ok *)
19150  667    5       !   build_serial_changed_telegram( r);
19160  668    6       ! 
19170  669    7       END (* of procedure build_line_dep_telegram *);
19180  670            
19190  671            
19200  672             
\f

tsvaclst    81.01.19.   16.20.                                                    page    24

20010  673            PROCEDURE build_an_lbuf(
20020  674              VAR r   : reference;
20030  675              x       : lbuf_record
20040  676              );
20050  677              
20060  678            BEGIN
20070  679    1       ! r^.u4 := x.opco;
20080  680    2       ! 
20090  681    3       ! CASE x.kind OF
20100  682    4       ! ! norm:
20110  683    5       ! !   LOCK r AS buf : mask_norm_lbuf DO
20120  684    6       ! !     BEGIN
20130  685    7       ! !     ! WITH buf.fix_label DO
20140  686    8       ! !     !   BEGIN
20150  687    9       ! !     !   ! no_of_by := x.noob;
20160  688   10       ! !     !   ! rec      := x.reci;
20170  689   11       ! !     !   ! op_code  := x.opco;
20180  690   12       ! !     !   ! update   := x.upda;
20190  691   13       ! !     !   ! result   := x.resu
20200  692   14       ! !     !   END;
20210  693   15       ! !     ! buf.norm_inf := x.dta1;
20220  694   16       ! !     END;
20230  695   17       ! ! 
20240  696   18       ! ! log:
20250  697   19       ! !   LOCK r AS buf : mask_log_lbuf DO
20260  698   20       ! !     BEGIN
20270  699   21       ! !     ! WITH buf.fix_label DO
20280  700   22       ! !     !   BEGIN
20290  701   23       ! !     !   ! no_of_by := x.noob;
20300  702   24       ! !     !   ! rec      := x.reci;
20310  703   25       ! !     !   ! op_code  := x.opco;
20320  704   26       ! !     !   ! update   := x.upda;
20330  705   27       ! !     !   ! result   := x.resu
20340  706   28       ! !     !   END;
20350  707   29       ! !     ! buf.log_addr  := x.addr;
20360  708   30       ! !     ! buf.log_opc   := x.dta1;
20370  709   31       ! !     ! buf.log_alarm := x.dta2;
20380  710   32       ! !     END
20390  711   33       ! END (* of case on x.kind *);
20400  712   34       ! 
20410  713   35       END (* of procedure build_an_lbuf *);
20420  714            
20430  715            
20440  716             
\f

tsvaclst    81.01.19.   16.20.                                                    page    25

21010  717            PROCEDURE demand_lbuf(
21020  718              d_kind : lbuf_kind_type;
21030  719              d_noob : integer;
21040  720              d_reci : alarmnetaddr;
21050  721              d_opco : byte;
21060  722              d_upda : 0..15;
21070  723              d_resu : 0..15;
21080  724              d_dta1 : byte;
21090  725              d_dta2 : byte;
21100  726              d_addr : alarmnetaddr
21110  727              );
21120  728              
21130  729            BEGIN
21140  730    1       ! 
21150  731    2       ! lbuf_needed := lbuf_needed + 1;
21160  732    3       ! WITH lbuf_info( lbuf_needed ) DO
21170  733    4       !   BEGIN
21180  734    5       !   ! kind := d_kind;
21190  735    6       !   ! noob := label_size + d_noob;
21200  736    7       !   ! reci := d_reci;
21210  737    8       !   ! opco := d_opco;
21220  738    9       !   ! upda := d_upda;
21230  739   10       !   ! resu := d_resu;
21240  740   11       !   ! dta1 := d_dta1;
21250  741   12       !   ! dta2 := d_dta2;
21260  742   13       !   ! addr := d_addr
21270  743   14       !   END;
21280  744   15       ! 
21290  745   16       END (* of procedure demand_lbuf *);
21300  746             
\f

tsvaclst    81.01.19.   16.20.                                                    page    26

22010  747            PROCEDURE fault_at_line;
22020  748            BEGIN
22030  749    1       ! 
22040  750    2       ! IF succ_line_errors <> max_int THEN
22050  751    3       !   succ_line_errors := succ_line_errors + 1;
22060  752    4       ! 
22070  753    5       ! IF succ_line_errors = max_succ_errors THEN
22080  754    6       !   BEGIN   (*------ line alarm *)
22090  755    7       !   ! IF lam_timeout THEN   (* timeout *)
22100  756    8       !   !   demand_lbuf( norm, 1, own_dc, #h31, 0, 0,
22110  757    9       !   !   at_tim_excess, 0, own_dc)
22120  758   10       !   ! ELSE                   (* not timeout *)
22130  759   11       !   !   demand_lbuf( norm, 1, own_dc, #h31, 0, 0,
22140  760   12       !   !   call, 0, own_dc );
22150  761   13       !   ! lam_timeout := false;
22160  762   14       !   END;
22170  763   15       ! 
22180  764   16       ! IF line_error_count <= (max_int - fix_incr_on_err) THEN
22190  765   17       !   line_error_count := line_error_count + fix_incr_on_err
22200  766   18       ! ELSE
22210  767   19       !   line_error_count := max_int;
22220  768   20       ! 
22230  769   21       ! IF (line_error_count >= serve_limit) AND below_serve_limit THEN
22240  770   22       !   BEGIN   (*------service alarm *)
22250  771   23       !   !   (* high counter *)
22260  772   24       !   ! demand_lbuf( norm, 1, own_dc, #h34, 0, 0,
22270  773   25       !   ! call, 0, own_dc );
22280  774   26       !   ! below_serve_limit := false;
22290  775   27       !   END;
22300  776   28       ! 
22310  777   29       ! IF (line_error_count >= stoppoll_limit) AND below_stoppoll_limit THEN
22320  778   30       !   BEGIN   (*------ stoppoll alarm *)
22330  779   31       !   !   (* high counter *)
22340  780   32       !   ! demand_lbuf( norm, 1, own_dc, #h35, 0, 0,
22350  781   33       !   ! call, 0, own_dc );
22360  782   34       !   ! below_stoppoll_limit := false;
22370  783   35       !   END;
22380  784   36       ! 
22390  785   37       ! line := nok;
22400  786   38       ! 
22410  787   39       END (* of fault_at_line *);
22420  788             
\f

tsvaclst    81.01.19.   16.20.                                                    page    27

23010  789            PROCEDURE ok_at_line;
23020  790            BEGIN
23030  791    1       ! line_error_count := line_error_count - 1;
23040  792    2       ! IF line_error_count < 0 THEN
23050  793    3       !   line_error_count := 0;   (* Must not be negative *)
23060  794    4       ! 
23070  795    5       ! IF (line_error_count < serve_limit) AND NOT(below_serve_limit) THEN
23080  796    6       !   BEGIN  (*------ recall service alarm *)
23090  797    7       !   !   (* low counter *)
23100  798    8       !   ! demand_lbuf( norm, 1, own_dc, #h34, 0, 0,
23110  799    9       !   ! recall, 0, own_dc );
23120  800   10       !   ! below_serve_limit := true;
23130  801   11       !   END;
23140  802   12       ! 
23150  803   13       ! IF (line_error_count < stoppoll_limit) AND NOT(below_stoppoll_limit) THEN
23160  804   14       !   BEGIN   (*------ recall stoppoll alarm *)
23170  805   15       !   !   (* low counter *)
23180  806   16       !   ! demand_lbuf( norm, 1, own_dc, #h35, 0, 0,
23190  807   17       !   ! recall, 0, own_dc );
23200  808   18       !   ! below_stoppoll_limit := true;
23210  809   19       !   END;
23220  810   20       ! 
23230  811   21       ! IF succ_line_errors >= max_succ_errors THEN
23240  812   22       !   BEGIN   (*------recall line alarm *)
23250  813   23       !   ! demand_lbuf( norm, 1, own_dc, #h31, 0, 0,
23260  814   24       !   ! recall, 0, own_dc );
23270  815   25       !   END;
23280  816   26       ! 
23290  817   27       ! succ_line_errors := 0;
23300  818   28       ! 
23310  819   29       ! line := ok;
23320  820   30       ! 
23330  821   31       !   (*q if test then
23340  822   32       !   begin
23350  823   33       !   testout(zout,"line state: ",ord(line));
23360  824   34       !   testout(zout,"succ lineerr",succ_line_errors);
23370  825   35       !   testout(zout,"lineerrcount",line_error_count);
23380  826   36       !   end; q*)
23390  827   37       ! 
23400  828   38       END (* of ok_at_line *);
23410  829            
23420  830             
\f

tsvaclst    81.01.19.   16.20.                                                    page    28

24010  831            PROCEDURE to_lam_driver;
24020  832              
24030  833                (***********************************************************
24040  834                * The buftype is alarm, report or testat.                  *
24050  835                * Send a letter to VC(AT). A letter is always 3 telegrams  *
24060  836                * The reference to the message buffer is mess_ref and this *
24070  837                * buffer will be released, ie buftype = empty.             *
24080  838                * The reference to the unused lam buffer is tolam_ref.     *
24090  839                * The letter is stored in the area_to_lam array            *
24100  840                ************************************************************)
24110  841              
24120  842            BEGIN
24130  843    1       ! keep_the_opcode := func * 16 + types;
24140  844    2       ! 
24150  845    3       ! CASE buftype OF
24160  846    4       ! ! 
24170  847    5       ! ! testat :    (* Send TESTI telegram by order of own DC *)
24180  848    6       ! !   BEGIN     (* opcode 8,0 or 8,2 *)
24190  849    7       ! !   ! 
24200  850    8       ! !   ! serial_no := 1 - serial_no;
24210  851    9       ! !   ! tolam_ref^.u2 := canno;
24220  852   10       ! !   ! 
24230  853   11       ! !   !   (*----------------------- build the telegram of TESTI *)
24240  854   12       ! !   ! LOCK tolam_ref AS telegram : to_telegram_type DO
24250  855   13       ! !   !   BEGIN
24260  856   14       ! !   !   ! WITH telegram DO
24270  857   15       ! !   !   !   BEGIN
24280  858   16       ! !   !   !   ! to_opcode := 2;
24290  859   17       ! !   !   !   ! to_serial_no := serial_no;
24300  860   18       ! !   !   !   ! IF keep_the_opcode = #h80 THEN
24310  861   19       ! !   !   !   !   to_data := 0
24320  862   20       ! !   !   !   ! ELSE
24330  863   21       ! !   !   !   !   to_data := 1;
24340  864   22       ! !   !   !   END;
24350  865   23       ! !   !   END (* of lock statement *);
24360  866   24       ! !   ! IF lamtest THEN calltest( tolam_ref );
24370  867   25       ! !   ! 
24380  868   26       ! !   !   (*----------------------- complete the telegram *)
24390  869   27       ! !   ! boo := check5( tolam_ref, generate );
24400  870   28       ! !   ! 
24410  871   29       ! !   !   (*----------------------- keep the telegram *)
24420  872   30       ! !   ! LOCK tolam_ref AS telegram : to_telegram_type DO
24430  873   31       ! !   !   keep_the_telegram := telegram;
24440  874   32       ! !   ! 
24450  875   33       ! !   ! lamspeak_state := testi;
24460  876   34       ! !   ! 
\f

tsvaclst    81.01.19.   16.20.                                                    page    29

24470  877   35       ! !   ! signal( tolam_ref, lamsem^ );
24480  878   36       ! !   END (* of testat *);
24490  879   37       ! ! 
24500  880   38       ! ! alarm,
24510  881   39       ! ! report :    (* Send a letter by order of an AT-CONNECTOR *)
24520  882   40       ! !   BEGIN
24530  883   41       ! !   ! 
24540  884   42       ! !   ! area_pointer := 1;
24550  885   43       ! !   ! 
24560  886   44       ! !   ! area_to_lam( 1 ) := keep_the_opcode;
24570  887   45       ! !   ! area_to_lam( 2 ) := adr_code;   (* a lookup in the AT-addr_table *
24580  888   46       ! !   !                                 * is made outside lamspeak      *)
24590  889   47       ! !   ! 
24600  890   48       ! !   ! LOCK mess_ref AS buf : mask_norm_lbuf DO
24610  891   49       ! !   !   BEGIN
24620  892   50       ! !   !   ! numb_of_bytes := buf.fix_label.no_of_by;
24630  893   51       ! !   !   ! IF numb_of_bytes = label_size THEN
24640  894   52       ! !   !   !   area_to_lam( 3 ) := 0
24650  895   53       ! !   !   ! ELSE   (* nbbbbb numb_of_bytes must be label_size + 1 here *)
24660  896   54       ! !   !   !   area_to_lam( 3 ) := buf.norm_inf;
24670  897   55       ! !   !   ! 
24680  898   56       ! !   !   ! IF (keep_the_opcode=#h41) OR (keep_the_opcode=#h85) THEN
24690  899   57       ! !   !   !   CASE buf.fix_label.result OF
24700  900   58       ! !   !   !   ! 0: area_to_lam(1) := keep_the_opcode    (* accepted *)
24710  901   59       ! !   !   !   !   OTHERWISE area_to_lam(1) := keep_the_opcode+1   (* rejected *)
24720  902   60       ! !   !   !   END (* of case *);
24730  903   61       ! !   !   ! 
24740  904   62       ! !   !   END (* of lock statement *);
24750  905   63       ! !   ! 
24760  906   64       ! !   ! build_a_letter_telegram( tolam_ref );
24770  907   65       ! !   ! lamspeak_state := lettertovc;
24780  908   66       ! !   ! signal( tolam_ref, lamsem^ );
24790  909   67       ! !   ! 
24800  910   68       ! !   END; (* of alarm, report *)
24810  911   69       ! ! 
24820  912   70       ! ! permiss :   (* send a letter by order of own dc, opcode 6.4 *)
24830  913   71       ! !   BEGIN
24840  914   72       ! !   ! area_pointer := 1;
24850  915   73       ! !   ! area_to_lam(1) := keep_the_opcode;
24860  916   74       ! !   ! 
24870  917   75       ! !   ! LOCK mess_ref AS buf: mask_vcm DO
24880  918   76       ! !   !   BEGIN
24890  919   77       ! !   !   ! area_to_lam(2) := adr_code;
24900  920   78       ! !   !   ! area_to_lam(3) := buf.fix.update;  (* 0: says start at, 1: stop at *)
24910  921   79       ! !   !   END; (* of lock statement *)
24920  922   80       ! !   ! 
\f

tsvaclst    81.01.19.   16.20.                                                    page    30

24930  923   81       ! !   ! build_a_letter_telegram( tolam_ref );
24940  924   82       ! !   ! lamspeak_state := lettertovc;
24950  925   83       ! !   ! signal( tolam_ref, lamsem^ );
24960  926   84       ! !   ! 
24970  927   85       ! !   END (* of permiss *)
24980  928   86       ! !   
24990  929   87       ! END (* of case *);
25000  930   88       ! 
25010  931   89       END (* of to_lam_driver *);
25020  932            
25030  933             
\f

tsvaclst    81.01.19.   16.20.                                                    page    31

26010  934            PROCEDURE from_lam_driver;
26020  935            VAR
26030  936              hlp, i: integer;
26040  937            BEGIN
26050  938    1       ! 
26060  939    2       ! CASE lamspeak_state OF
26070  940    3       ! ! 
26080  941    4       ! ! lettertovc :   (* master telegram is opr or data ================*)
26090  942    5       ! !   CASE slave_opcode OF
26100  943    6       ! !   ! 
26110  944    7       ! !   ! p_ack,
26120  945    8       ! !   ! data ,
26130  946    9       ! !   ! opr  :   (* non expected answer on opr or data *)
26140  947   10       ! !   !   speak_action := 1;
26150  948   11       ! !   ! 
26160  949   12       ! !   ! status:
26170  950   13       ! !   !   speak_action := 14;
26180  951   14       ! !   ! 
26190  952   15       ! !   ! d_ack:
26200  953   16       ! !   !   CASE area_pointer OF
26210  954   17       ! !   !   ! 1:   (* non expected answer on opr *)
26220  955   18       ! !   !   !   speak_action := 1;
26230  956   19       ! !   !   ! 2:   (* data sended for the first time *)
26240  957   20       ! !   !   !   speak_action := 3
26250  958   21       ! !   !   !   OTHERWISE   (* data sended for the third time *)
26260  959   22       ! !   !   !   speak_action := 4
26270  960   23       ! !   !   END (* of case on area_pointer *);
26280  961   24       ! !   ! 
26290  962   25       ! !   ! t_ack:
26300  963   26       ! !   !   CASE area_pointer OF
26310  964   27       ! !   !   ! 1:   (* expected answer on opr *)
26320  965   28       ! !   !   !   speak_action := 3
26330  966   29       ! !   !   !   OTHERWISE   (* non expected answer on data *)
26340  967   30       ! !   !   !   speak_action := 1
26350  968   31       ! !   !   END (* of case on area_pointer *);
26360  969   32       ! !   ! 
26370  970   33       ! !   ! nak ,
26380  971   34       ! !   ! free:
26390  972   35       ! !   !   speak_action := 2;
26400  973   36       ! !   ! 
26410  974   37       ! !   END (* of case in lettertovc *);
26420  975   38       ! ! 
26430  976   39       ! ! 
26440  977   40       ! ! letterfromvc:   (* master telegram is poll =====================*)
26450  978   41       ! !   CASE slave_opcode OF
26460  979   42       ! !   ! 
\f

tsvaclst    81.01.19.   16.20.                                                    page    32

26470  980   43       ! !   ! p_ack:
26480  981   44       ! !   !   speak_action := 5;
26490  982   45       ! !   ! 
26500  983   46       ! !   ! data :
26510  984   47       ! !   !   CASE area_pointer OF
26520  985   48       ! !   !   ! 1:
26530  986   49       ! !   !   !   speak_action := 1;
26540  987   50       ! !   !   ! 2:
26550  988   51       ! !   !   !   speak_action := 6;
26560  989   52       ! !   !   ! 3:
26570  990   53       ! !   !   !   speak_action := 7
26580  991   54       ! !   !   END (* of case *);
26590  992   55       ! !   ! 
26600  993   56       ! !   ! opr  ,
26610  994   57       ! !   ! d_ack,
26620  995   58       ! !   ! t_ack:   (* non expected answer on poll *)
26630  996   59       ! !   !   speak_action := 1;
26640  997   60       ! !   ! 
26650  998   61       ! !   ! status:
26660  999   62       ! !   !   speak_action := 14;
26670 1000   63       ! !   ! 
26680 1001   64       ! !   ! nak  ,
26690 1002   65       ! !   ! free :
26700 1003   66       ! !   !   speak_action := 2;
26710 1004   67       ! !   END (* of case in letterfromvc *);
26720 1005   68       ! ! 
26730 1006   69       ! ! 
26740 1007   70       ! ! polling:   (* master telegram is poll ===========================*)
26750 1008   71       ! !   CASE slave_opcode OF
26760 1009   72       ! !   ! 
26770 1010   73       ! !   ! p_ack:
26780 1011   74       ! !   !   speak_action := 8;
26790 1012   75       ! !   ! 
26800 1013   76       ! !   ! data ,
26810 1014   77       ! !   ! d_ack,
26820 1015   78       ! !   ! t_ack:   (* non expected answer on poll *)
26830 1016   79       ! !   !   speak_action := 9;
26840 1017   80       ! !   ! 
26850 1018   81       ! !   ! opr  :
26860 1019   82       ! !   !   speak_action := 10;
26870 1020   83       ! !   ! 
26880 1021   84       ! !   ! status:
26890 1022   85       ! !   !   speak_action := 14;
26900 1023   86       ! !   ! 
26910 1024   87       ! !   ! nak  ,
26920 1025   88       ! !   ! free :
\f

tsvaclst    81.01.19.   16.20.                                                    page    33

26930 1026   89       ! !   !   speak_action := 11;
26940 1027   90       ! !   ! 
26950 1028   91       ! !   END (* of case in polling *);
26960 1029   92       ! ! 
26970 1030   93       ! ! 
26980 1031   94       ! ! testi :   (* master telegram is testi =============================*)
26990 1032   95       ! !   CASE slave_opcode OF
27000 1033   96       ! !   ! 
27010 1034   97       ! !   ! p_ack ,
27020 1035   98       ! !   ! data  ,
27030 1036   99       ! !   ! opr   ,
27040 1037  100       ! !   ! d_ack :   (* non expected answer on testi *)
27050 1038  101       ! !   !   speak_action := 1;
27060 1039  102       ! !   ! 
27070 1040  103       ! !   ! status:
27080 1041  104       ! !   !   speak_action := 14;
27090 1042  105       ! !   ! 
27100 1043  106       ! !   ! t_ack :
27110 1044  107       ! !   !   speak_action := 12;
27120 1045  108       ! !   ! 
27130 1046  109       ! !   ! nak   ,
27140 1047  110       ! !   ! free  :
27150 1048  111       ! !   !   speak_action := 2;
27160 1049  112       ! !   ! 
27170 1050  113       ! !   END (* of case in testi *)
27180 1051  114       ! END (* of case on lamspeak_state *);
27190 1052  115       ! 
27200 1053  116       ! 
27210 1054  117       ! CASE speak_action OF   (* the treatment of: "speak_actions" =======*)
27220 1055  118       ! ! 
27230 1056  119       ! ! 1:   (* non expected answers *)
27240 1057  120       ! !   BEGIN
27250 1058  121       ! !   ! build_line_dep_telegram( tolam_ref, line );
27260 1059  122       ! !   ! fault_at_line;
27270 1060  123       ! !   ! signal( tolam_ref, lamsem^ )
27280 1061  124       ! !   END;
27290 1062  125       ! ! 
27300 1063  126       ! ! 2:   (* nak and free answers only *)
27310 1064  127       ! !   BEGIN
27320 1065  128       ! !   ! fault_at_line;
27330 1066  129       ! !   ! build_same_telegram( tolam_ref );
27340 1067  130       ! !   ! signal( tolam_ref, lamsem^ )
27350 1068  131       ! !   END;
27360 1069  132       ! ! 
27370 1070  133       ! ! 3:   (* letter not finished *)
27380 1071  134       ! !   BEGIN
\f

tsvaclst    81.01.19.   16.20.                                                    page    34

27390 1072  135       ! !   ! ok_at_line;
27400 1073  136       ! !   ! area_pointer := area_pointer + 1;
27410 1074  137       ! !   ! build_a_letter_telegram( tolam_ref );
27420 1075  138       ! !   ! signal( tolam_ref, lamsem^ )
27430 1076  139       ! !   END;
27440 1077  140       ! ! 
27450 1078  141       ! ! 4:   (* letter finished, make receipt *)
27460 1079  142       ! !   BEGIN
27470 1080  143       ! !   ! ok_at_line;
27480 1081  144       ! !   ! area_pointer := 1;
27490 1082  145       ! !   ! 
27500 1083  146       ! !   ! CASE area_to_lam(1) OF
27510 1084  147       ! !   ! ! #h30, #h31, #h32 :   (* make receipt of delivered alarm *)
27520 1085  148       ! !   ! !   BEGIN
27530 1086  149       ! !   ! !   ! boo := get_net_addr( at_table_addr, area_to_lam(2) );
27540 1087  150       ! !   ! !   ! demand_lbuf( log, 6, own_dc, #h2, 0, 0,
27550 1088  151       ! !   ! !   ! area_to_lam(1), area_to_lam(3), at_table_addr )
27560 1089  152       ! !   ! !   END
27570 1090  153       ! !   ! !   OTHERWISE (* nothing *)
27580 1091  154       ! !   ! END (* of case *);
27590 1092  155       ! !   ! 
27600 1093  156       ! !   !   (* make master poll to handle response from vc *)
27610 1094  157       ! !   ! build_a_poll_telegram( tolam_ref );
27620 1095  158       ! !   ! lamspeak_state := polling;
27630 1096  159       ! !   ! signal( tolam_ref, lamsem^ )
27640 1097  160       ! !   END;
27650 1098  161       ! ! 
27660 1099  162       ! ! 5:   (* poll answers leading to poll sending *)
27670 1100  163       ! !   BEGIN
27680 1101  164       ! !   ! ok_at_line;
27690 1102  165       ! !   ! build_a_poll_telegram( tolam_ref );
27700 1103  166       ! !   ! signal( tolam_ref, lamsem^ )
27710 1104  167       ! !   END;
27720 1105  168       ! ! 
27730 1106  169       ! ! 6:
27740 1107  170       ! !   BEGIN
27750 1108  171       ! !   ! area_from_lam(area_pointer) := slave_data;
27760 1109  172       ! !   ! area_pointer := area_pointer + 1;
27770 1110  173       ! !   ! ok_at_line;
27780 1111  174       ! !   ! build_a_poll_telegram( tolam_ref );
27790 1112  175       ! !   ! signal( tolam_ref, lamsem^ )
27800 1113  176       ! !   END;
27810 1114  177       ! ! 
27820 1115  178       ! ! 7:   (* three gathered telegrams, make lbuf *)
27830 1116  179       ! !   BEGIN
27840 1117  180       ! !   ! area_from_lam(area_pointer) := slave_data;
\f

tsvaclst    81.01.19.   16.20.                                                    page    35

27850 1118  181       ! !   ! ok_at_line;
27860 1119  182       ! !   ! area_pointer := 1;
27870 1120  183       ! !   ! lamspeak_state := nottele;
27880 1121  184       ! !   ! 
27890 1122  185       ! !   !   (* send the letter via lbuf *)
27900 1123  186       ! !   ! hlp := area_from_lam(1);
27910 1124  187       ! !   ! 
27920 1125  188       ! !   ! CASE get_net_addr( at_table_addr, area_from_lam(2)) OF
27930 1126  189       ! !   ! ! true :
27940 1127  190       ! !   ! !   BEGIN
27950 1128  191       ! !   ! !   ! IF (hlp = #h40) OR (hlp = #h84) THEN   (* "styr" or "test" *)
27960 1129  192       ! !   ! !   !   demand_lbuf( norm, 1, at_table_addr, hlp, 0, 0,
27970 1130  193       ! !   ! !   !   area_from_lam(3), 0, own_dc )
27980 1131  194       ! !   ! !   ! ELSE
27990 1132  195       ! !   ! !   !   IF (0 < hlp) AND (hlp < 5) THEN   (* "start at", "stop at" "-start at" -*)
28000 1133  196       ! !   ! !   !     BEGIN
28010 1134  197       ! !   ! !   !     ! CASE hlp OF
28020 1135  198       ! !   ! !   !     ! ! 1, 3:  i := 0; (* permission was "start at" *)
28030 1136  199       ! !   ! !   !     ! ! 2, 4:  i := 1  (* permission was "stop  at" *)
28040 1137  200       ! !   ! !   !     ! END (* of case *);
28050 1138  201       ! !   ! !   !     ! demand_lbuf( log, 4, own_dc, #h65, i, area_from_lam(3),
28060 1139  202       ! !   ! !   !     ! 0, 0, at_table_addr );
28070 1140  203       ! !   ! !   !     END
28080 1141  204       ! !   ! !   !   ELSE
28090 1142  205       ! !   ! !   !     BEGIN   (* refuse command *)
28100 1143  206       ! !   ! !   !     ! area_to_lam(1) := #h10;
28110 1144  207       ! !   ! !   !     ! area_to_lam(2) := area_from_lam(2);
28120 1145  208       ! !   ! !   !     ! area_to_lam(3) := area_from_lam(3);
28130 1146  209       ! !   ! !   !     ! lamspeak_state := lettertovc;
28140 1147  210       ! !   ! !   !     ! build_a_letter_telegram( tolam_ref );
28150 1148  211       ! !   ! !   !     ! signal( tolam_ref, lamsem^ );
28160 1149  212       ! !   ! !   !     END;
28170 1150  213       ! !   ! !   END;
28180 1151  214       ! !   ! ! 
28190 1152  215       ! !   ! ! false:
28200 1153  216       ! !   ! !   BEGIN
28210 1154  217       ! !   ! !   ! IF (hlp = #h40) OR (hlp = #h84) THEN
28220 1155  218       ! !   ! !   !   area_to_lam(1) := hlp + 3
28230 1156  219       ! !   ! !   ! ELSE
28240 1157  220       ! !   ! !   !   IF (0<hlp) AND (hlp<5) THEN
28250 1158  221       ! !   ! !   !     area_to_lam(1) := #h65
28260 1159  222       ! !   ! !   !   ELSE
28270 1160  223       ! !   ! !   !     area_to_lam(1) := #h10;
28280 1161  224       ! !   ! !   ! area_to_lam(2) := area_from_lam(2);
28290 1162  225       ! !   ! !   ! area_to_lam(3) := area_from_lam(3);
28300 1163  226       ! !   ! !   ! lamspeak_state := lettertovc;
\f

tsvaclst    81.01.19.   16.20.                                                    page    36

28310 1164  227       ! !   ! !   ! build_a_letter_telegram( tolam_ref );
28320 1165  228       ! !   ! !   ! signal( tolam_ref, lamsem^ );
28330 1166  229       ! !   ! !   END (* of false *)
28340 1167  230       ! !   ! END (* of case on check *);
28350 1168  231       ! !   END (* of action 7 *);
28360 1169  232       ! ! 
28370 1170  233       ! ! 8:   (* a single poll caused by a clockpulse *)
28380 1171  234       ! !   BEGIN
28390 1172  235       ! !   ! ok_at_line;
28400 1173  236       ! !   ! buftype := used;
28410 1174  237       ! !   ! lamspeak_state := nottele
28420 1175  238       ! !   END (* of action 8 *);
28430 1176  239       ! ! 
28440 1177  240       ! ! 9:   (* non expected answers caused by a single poll *)
28450 1178  241       ! !   BEGIN
28460 1179  242       ! !   ! fault_at_line;
28470 1180  243       ! !   ! buftype := used;
28480 1181  244       ! !   ! lamspeak_state := nottele
28490 1182  245       ! !   END (* of action 9 *);
28500 1183  246       ! ! 
28510 1184  247       ! ! 10:   (* first telegram of a letter is comming *)
28520 1185  248       ! !   BEGIN
28530 1186  249       ! !   ! ok_at_line;;
28540 1187  250       ! !   ! area_from_lam(1) := slave_data;
28550 1188  251       ! !   ! area_pointer := 2;
28560 1189  252       ! !   ! build_a_poll_telegram( tolam_ref );
28570 1190  253       ! !   ! lamspeak_state := letterfromvc;
28580 1191  254       ! !   ! signal ( tolam_ref, lamsem^ )
28590 1192  255       ! !   END (* of action 10 *);
28600 1193  256       ! ! 
28610 1194  257       ! ! 11:   (* nak and free answers in polling state only *)
28620 1195  258       ! !   BEGIN
28630 1196  259       ! !   ! fault_at_line;
28640 1197  260       ! !   ! buftype := used;
28650 1198  261       ! !   ! lamspeak_state := nottele
28660 1199  262       ! !   END;
28670 1200  263       ! ! 
28680 1201  264       ! ! 12:   (* usable answers on master testi *)
28690 1202  265       ! !   BEGIN
28700 1203  266       ! !   ! 
28710 1204  267       ! !   ! ok_at_line;
28720 1205  268       ! !   ! demand_lbuf( norm, 1, own_dc, keep_the_opcode+1, 0, accepted,
28730 1206  269       ! !   ! slave_data, 0, own_dc );
28740 1207  270       ! !   !   (*------ 8.1 or 8.3 demanded *)
28750 1208  271       ! !   ! buftype := used;
28760 1209  272       ! !   ! lamspeak_state := nottele;
\f

tsvaclst    81.01.19.   16.20.                                                    page    37

28770 1210  273       ! !   ! 
28780 1211  274       ! !   END (* of action 12 *);
28790 1212  275       ! ! 
28800 1213  276       ! ! 13:   (* empty *);
28810 1214  277       ! ! 
28820 1215  278       ! ! 14:   (* status answers *)
28830 1216  279       ! !   BEGIN
28840 1217  280       ! !   ! demand_lbuf( norm, 1, own_dc, #h32, 0, 0,
28850 1218  281       ! !   ! slave_data, 0, own_dc );
28860 1219  282       ! !   ! ok_at_line;
28870 1220  283       ! !   ! build_serial_changed_telegram( tolam_ref);
28880 1221  284       ! !   ! signal( tolam_ref, lamsem^ )
28890 1222  285       ! !   END (* of action 14 *);
28900 1223  286       ! ! 
28910 1224  287       ! END (* of case on speak_action *);
28920 1225  288       ! 
28930 1226  289       END (* of from_lam_driver procedure *);
28940 1227            
28950 1228             
\f

tsvaclst    81.01.19.   16.20.                                                    page    38

29010 1229          BEGIN
29020 1230    1     !   (*******************************************
29030 1231    2     !   **** the body of the lamspeak procedure ****
29040 1232    3     !   ********************************************)
29050 1233    4     ! 
29060 1234    5     !   (*q if test then testout(zout,"speak st in ",ord(lamspeak_state)); q*)
29070 1235    6     ! 
29080 1236    7     ! CASE buftype OF
29090 1237    8     ! ! clock :                                                  (* <--------<< *)
29100 1238    9     ! !     (* ------ No nessage buffer is involved.       *
29110 1239   10     ! !     *  ------ The lam buffer is idle at tolam_ref. *)
29120 1240   11     ! !   
29130 1241   12     ! !   BEGIN
29140 1242   13     ! !   ! 
29150 1243   14     ! !   ! build_a_poll_telegram( tolam_ref );
29160 1244   15     ! !   ! lamspeak_state := polling;
29170 1245   16     ! !   ! signal( tolam_ref, lamsem^ );
29180 1246   17     ! !   ! 
29190 1247   18     ! !   END;
29200 1248   19     ! ! 
29210 1249   20     ! ! permiss,
29220 1250   21     ! ! alarm,                                                  (* <--------<< *)
29230 1251   22     ! ! report,
29240 1252   23     ! ! testat:
29250 1253   24     ! !     (* the message buffer is involved at mess_ref.  *
29260 1254   25     ! !     *  return  this buffer, ie buftype := empty.    *
29270 1255   26     ! !     *  The lam buffer is idle at tolam_ref.         *)
29280 1256   27     ! !   BEGIN
29290 1257   28     ! !   ! to_lam_driver;
29300 1258   29     ! !   ! buftype := empty;
29310 1259   30     ! !   END;
29320 1260   31     ! ! 
29330 1261   32     ! ! lam :
29340 1262   33     ! !     (* The message buffer is a lam buffer, that is        *
29350 1263   34     ! !     *  the lam buffer is not idle.                        *
29360 1264   35     ! !     *  Transfer the reference, ie tolam_ref :=: mess_ref. *)
29370 1265   36     ! !   BEGIN
29380 1266   37     ! !   ! tolam_ref :=: mess_ref;
29390 1267   38     ! !   ! 
29400 1268   39     ! !   ! LOCK tolam_ref AS telegram : from_telegram_type DO
29410 1269   40     ! !   !   BEGIN   (*----- get all the information needed *)
29420 1270   41     ! !   !   ! slave_opcode := telegram.from_opcode;
29430 1271   42     ! !   !   ! slave_data   := telegram.from_data;
29440 1272   43     ! !   !   END;
29450 1273   44     ! !   ! 
29460 1274   45     ! !   !   (*x if lamtest then
\f

tsvaclst    81.01.19.   16.20.                                                    page    39

29470 1275   46     ! !   !   begin
29480 1276   47     ! !   !   case slave_opcode of
29490 1277   48     ! !   !   0: teletxt := "    P-ACK   ";
29500 1278   49     ! !   !   1: teletxt := "    DATA    ";
29510 1279   50     ! !   !   2: teletxt := "    OPR     ";
29520 1280   51     ! !   !   3: teletxt := "    STATUS  ";
29530 1281   52     ! !   !   4: teletxt := "    D-ACK   ";
29540 1282   53     ! !   !   5: teletxt := "    T-ACK   ";
29550 1283   54     ! !   !   6: teletxt := "    NAK     ";
29560 1284   55     ! !   !   7: teletxt := "    FREE    "
29570 1285   56     ! !   !   end;
29580 1286   57     ! !   !   testout(zout, teletxt, slave_data);
29590 1287   58     ! !   !   end; x*)
29600 1288   59     ! !   ! 
29610 1289   60     ! !   ! IF check5( tolam_ref, check ) = false THEN
29620 1290   61     ! !   !   BEGIN
29630 1291   62     ! !   !   ! slave_opcode := free;
29640 1292   63     ! !   !   ! IF lamtest THEN testout(zout,"CHEHK5FAULT ",slave_opcode);
29650 1293   64     ! !   !   END;
29660 1294   65     ! !   ! 
29670 1295   66     ! !   ! IF tolam_ref^.u2 <> 0 THEN
29680 1296   67     ! !   !   BEGIN
29690 1297   68     ! !   !   ! slave_opcode := free;
29700 1298   69     ! !   !   ! IF tolam_ref^.u2 = 5 THEN
29710 1299   70     ! !   !   !   BEGIN
29720 1300   71     ! !   !   !   ! lam_timeout := true;
29730 1301   72     ! !   !   !   !   (*x if lamtest then testout(zout,"LAMTIMEOUT  ",slave_opcode); x*)
29740 1302   73     ! !   !   !   END;
29750 1303   74     ! !   !   !   (*x if lamtest then testout(zout,"LAMFAULT    ",tolam_ref^.u2); x*)
29760 1304   75     ! !   !   END;
29770 1305   76     ! !   ! 
29780 1306   77     ! !   ! from_lam_driver;
29790 1307   78     ! !   ! 
29800 1308   79     ! !   END;
29810 1309   80     ! ! 
29820 1310   81     ! ! listen :                                               (* <--------<< *)
29830 1311   82     ! !     (* The listen buffer is refered to by mess_ref. *)
29840 1312   83     ! !   BEGIN
29850 1313   84     ! !   !   (*---- Nb ---- if lbuf_needed < 1 the program fault *)
29860 1314   85     ! !   ! 
29870 1315   86     ! !   ! build_an_lbuf( mess_ref, lbuf_info( lbuf_needed ) );
29880 1316   87     ! !   ! 
29890 1317   88     ! !   ! lbuf_needed := lbuf_needed - 1;
29900 1318   89     ! !   ! 
29910 1319   90     ! !   ! buftype := listen;
29920 1320   91     ! !   ! 
\f

tsvaclst    81.01.19.   16.20.                                                    page    40

29930 1321   92     ! !   END
29940 1322   93     ! !   OTHERWISE
29950 1323   94     ! !     (*-------- Nb --- program fault *);
29960 1324   95     ! ! 
29970 1325   96     ! END (* of case on buftype *);
29980 1326   97     ! 
29990 1327   98     ! IF lamspeak_state = nottele THEN
30000 1328   99     !   vcatc_state := active;
30010 1329  100     ! 
30020 1330  101     ! IF lbuf_needed > 0 THEN
30030 1331  102     !   BEGIN
30040 1332  103     !   !   (*q if test then testout(zout,"lbuf needed:",lbuf_needed); q*)
30050 1333  104     !   ! vcatc_state := lam_need_buf;
30060 1334  105     !   ! IF no_of_listen > 0 THEN
30070 1335  106     !   !   input := from_listen_ref;  (* There is a lbuf *)
30080 1336  107     !   END;
30090 1337  108     ! 
30100 1338  109     !   (*q if test then testout(zout,"speak st out",ord(lamspeak_state)); q*)
30110 1339  110     END (* of lamspeak procedure *);
30120 1340           
\f

tsvaclst    81.01.19.   16.20.                                                    page    41

31010 1341        BEGIN   (***** main program *****)
31020 1342    1   ! 
31030 1343    2   !   (* initier module *)
31040 1344    3   ! testopen(zout,own.incname,opsem);
31050 1345    4   ! testout(zout, version, al_env_version);
31060 1346    5   ! testout (zout, "chann/addr  ", canno*1000+micadr);
31070 1347    6   ! 
31080 1348    7   ! alloc(mess_ref,lam_pool,messem.s^);
31090 1349    8   ! WITH mess_ref^ DO
31100 1350    9   !   BEGIN
31110 1351   10   !   ! u1:= create_at_ch;
31120 1352   11   !   ! u2:= canno;
31130 1353   12   !   ! u3:= lam_route
31140 1354   13   !   END;
31150 1355   14   ! LOCK mess_ref AS buf : ch_format DO
31160 1356   15   !   WITH buf DO
31170 1357   16   !     BEGIN
31180 1358   17   !     ! cntl_inf:= at_control;
31190 1359   18   !     ! time_inf:= con_lam_time
31200 1360   19   !     END;
31210 1361   20   ! signal(mess_ref,lamsem^);
31220 1362   21   !   (* initier timeout buffers *)
31230 1363   22   ! alloc(bookup_ref,book_pool,timeout_answer);
31240 1364   23   ! bookup_ref^.u3:= tim_route1;
31250 1365   24   ! 
31260 1366   25   ! alloc(clock_ref,tim_pool,messem.s^);
31270 1367   26   ! WITH clock_ref^ DO
31280 1368   27   !   BEGIN
31290 1369   28   !   ! u1:= delay_req;
31300 1370   29   !   ! u3:= tim_route;
31310 1371   30   !   ! u4:= #hc1
31320 1372   31   !   END;
31330 1373   32   ! LOCK clock_ref AS buf: timers DO
31340 1374   33   !   buf.object:= poll_delay;
31350 1375   34   ! 
31360 1376   35   ! alloc(timeout_ref,tim_pool,messem.s^);
31370 1377   36   ! WITH timeout_ref^ DO
31380 1378   37   !   BEGIN
31390 1379   38   !   ! u1:= book_req;
31400 1380   39   !   ! u3:= tim_route1;
31410 1381   40   !   ! u4:= #hc2
31420 1382   41   !   END;
31430 1383   42   !  
\f

tsvaclst    81.01.19.   16.20.                                                    page    42

32010 1384   43   ! line        := ok;
32020 1385   44   ! input       := from_sem;
32030 1386   45   ! vcatc_state := not_ready;      (* <--------<< *)
32040 1387   46   ! old_state   := not_ready;
32050 1388   47   ! lamspeak_state := nottele;
32060 1389   48   ! zero_addr   := alarmnetaddr(macroaddr(0,0,0),0);
32070 1390   49   ! cur_vcm     := zero_addr;
32080 1391   50   ! own_dc.macro := dc_address;
32090 1392   51   ! own_dc.micro := 0;
32100 1393   52   ! 
32110 1394   53   !  
\f

tsvaclst    81.01.19.   16.20.                                                    page    43

33010 1395   54   ! REPEAT
33020 1396   55   ! !   (* read one new buffer *)
33030 1397   56   ! !   (*q if test then
33040 1398   57   ! !   begin
33050 1399   58   ! !   testout(zout," input    : ",ord(input));
33060 1400   59   ! !   testout(zout," vcatc st : ",ord(vcatc_state));
33070 1401   60   ! !   end; q*)
33080 1402   61   ! ! 
33090 1403   62   ! ! buftype:= used;
33100 1404   63   ! ! 
33110 1405   64   ! ! CASE input OF
33120 1406   65   ! ! ! from_sem        :
33130 1407   66   ! ! !   CASE vcatc_state OF
33140 1408   67   ! ! !   ! not_ready..active  : IF NOT nil(fromlam_ref) THEN
33150 1409   68   ! ! !   !     mess_ref :=: fromlam_ref ELSE
33160 1410   69   ! ! !   !   IF no_of_queue>0 THEN
33170 1411   70   ! ! !   !     BEGIN
33180 1412   71   ! ! !   !     ! wait(mess_ref,queuesem.w^);
33190 1413   72   ! ! !   !     ! no_of_queue:= no_of_queue - 1
33200 1414   73   ! ! !   !     END ELSE
33210 1415   74   ! ! !   !     wait(mess_ref,messem.w^);
33220 1416   75   ! ! !   ! lam_talk           : IF NOT nil(fromlam_ref) THEN
33230 1417   76   ! ! !   !     mess_ref :=: fromlam_ref ELSE
33240 1418   77   ! ! !   !   wait(mess_ref,messem.w^);
33250 1419   78   ! ! !   ! OTHERWISE wait(mess_ref,messem.w^)
33260 1420   79   ! ! !   END;
33270 1421   80   ! ! ! from_listen_ref :
33280 1422   81   ! ! !   BEGIN
33290 1423   82   ! ! !   ! found:= get_listen_buf;
33300 1424   83   ! ! !   ! input:= from_sem
33310 1425   84   ! ! !   END;
33320 1426   85   ! ! ! nothing         : input:= from_sem
33330 1427   86   ! ! !   OTHERWISE
33340 1428   87   ! ! END;
33350 1429   88   ! ! 
33360 1430   89   ! ! 
33370 1431   90   ! !   (* classify buffer *)
33380 1432   91   ! ! rute := mess_ref^.u3;
33390 1433   92   ! ! func := mess_ref^.u4 DIV 16;
33400 1434   93   ! ! types:= mess_ref^.u4 MOD 16;
33410 1435   94   ! ! 
33420 1436   95   ! !   (*q if test then
33430 1437   96   ! !   begin
33440 1438   97   ! !   testout(zout," route    : ",rute);
33450 1439   98   ! !   testout(zout," functype : ",func*100+types);
33460 1440   99   ! !   end; q*)
\f

tsvaclst    81.01.19.   16.20.                                                    page    44

33470 1441  100   ! ! 
33480 1442  101   ! ! CASE rute OF
33490 1443  102   ! ! ! dummy_route : (*this buffer must bee returned*)
33500 1444  103   ! ! !   buftype:= empty;
33510 1445  104   ! ! ! tim_route   : (* delay from timeoutmodule *)
33520 1446  105   ! ! !   CASE types OF
33530 1447  106   ! ! !   ! 1 : buftype:= clock
33540 1448  107   ! ! !   !   OTHERWISE unknown_buf(unknown_opcode)
33550 1449  108   ! ! !   END;
33560 1450  109   ! ! ! tim_route1  : (* timeout answer and longtimeout *)
33570 1451  110   ! ! !   CASE types OF
33580 1452  111   ! ! !   ! 2 : LOCK mess_ref AS buf : timers DO
33590 1453  112   ! ! !   !     IF buf.object = vcc_vch_ltime THEN
33600 1454  113   ! ! !   !       buftype:= ltime ELSE
33610 1455  114   ! ! !   !       IF buf.object = vcc_vch_stime THEN
33620 1456  115   ! ! !   !         buftype:= stime ELSE
33630 1457  116   ! ! !   !         unknown_buf(rejected)
33640 1458  117   ! ! !   !         OTHERWISE unknown_buf(unknown_opcode)
33650 1459  118   ! ! !   END;
33660 1460  119   ! ! ! netc_route : (*buffer from vch*)
33670 1461  120   ! ! !   CASE func OF
33680 1462  121   ! ! !   ! 3 : CASE types OF
33690 1463  122   ! ! !   !   ! 0,1,2 : buftype:= alarm     (* at --> vcat *)
33700 1464  123   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
33710 1465  124   ! ! !   !   END;
33720 1466  125   ! ! !   ! 4 : CASE types OF
33730 1467  126   ! ! !   !   ! 1 : buftype:= report     (* at --> vcat *)
33740 1468  127   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
33750 1469  128   ! ! !   !   END;
33760 1470  129   ! ! !   ! 6 : CASE types OF
33770 1471  130   ! ! !   !   ! 2 : return_buf( accepted); (* dc --> dc *)
33780 1472  131   ! ! !   !   ! 4 : buftype := permiss    (* dc --> vc *)
33790 1473  132   ! ! !   !   !   OTHERWISE unknown_buf( unknown_opcode )
33800 1474  133   ! ! !   !   END;
33810 1475  134   ! ! !   ! 8 : CASE types OF
33820 1476  135   ! ! !   !   ! 0,2 : buftype:= testat;     (* dc --> vcat *)
33830 1477  136   ! ! !   !   ! 5 : buftype:= report     (* at --> vcat *)
33840 1478  137   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
33850 1479  138   ! ! !   !   END;
33860 1480  139   ! ! !   ! 9 : CASE types OF
33870 1481  140   ! ! !   !   ! 0 : buftype:= operate
33880 1482  141   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
33890 1483  142   ! ! !   !   END;
33900 1484  143   ! ! !   ! 10 : CASE types OF
33910 1485  144   ! ! !   !   ! 2,4 : buftype:= table
33920 1486  145   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
\f

tsvaclst    81.01.19.   16.20.                                                    page    45

33930 1487  146   ! ! !   !   END;
33940 1488  147   ! ! !   ! 11 : CASE types OF
33950 1489  148   ! ! !   !   ! 2,4,6,8,10,12,14 : buftype:= service
33960 1490  149   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
33970 1491  150   ! ! !   !   END;
33980 1492  151   ! ! !   ! 12 : CASE types OF
33990 1493  152   ! ! !   !   ! 5 : buftype:= listen
34000 1494  153   ! ! !   !   !   OTHERWISE unknown_buf(unknown_opcode)
34010 1495  154   ! ! !   !   END
34020 1496  155   ! ! !   !   OTHERWISE unknown_buf(unknown_opcode)
34030 1497  156   ! ! !   END;
34040 1498  157   ! ! ! lam_route   : (* buffer from lamdriver *)
34050 1499  158   ! ! !   buftype:= lam
34060 1500  159   ! ! !   OTHERWISE unknown_buf(unknown_route)
34070 1501  160   ! ! END;
34080 1502  161   ! ! 
34090 1503  162   ! !  
\f

tsvaclst    81.01.19.   16.20.                                                    page    46

35010 1504  163   ! !   (* make action *)
35020 1505  164   ! ! action:= acttable(vcatc_state,buftype);
35030 1506  165   ! !   (*q if test then
35040 1507  166   ! !   begin
35050 1508  167   ! !   testout(zout," buftype  : ",ord(buftype));
35060 1509  168   ! !   testout(zout," action   : ",action);
35070 1510  169   ! !   end; q*)
35080 1511  170   ! ! CASE action OF
35090 1512  171   ! ! ! 
35100 1513  172   ! ! ! 1 : (* no action, has been taken *);
35110 1514  173   ! ! ! 
35120 1515  174   ! ! ! 2 : (* not ready *)
35130 1516  175   ! ! !   return_buf(module_not_ready);
35140 1517  176   ! ! ! 
35150 1518  177   ! ! ! 3 : (* passive , alarm/report/testat received *)
35160 1519  178   ! ! !   IF cur_vcm <> zero_addr THEN
35170 1520  179   ! ! !       (* send to current vcm *)
35180 1521  180   ! ! !     LOCK mess_ref AS buf: alarmlabel DO
35190 1522  181   ! ! !       buf.rec:= cur_vcm
35200 1523  182   ! ! !     ELSE
35210 1524  183   ! ! !       return_buf(module_passive);
35220 1525  184   ! ! ! 
35230 1526  185   ! ! ! 4 : (* save listenbuf *)
35240 1527  186   ! ! !   save_listen_buf;
35250 1528  187   ! ! ! 
35260 1529  188   ! ! ! 5 : (* update table *)
35270 1530  189   ! ! !   BEGIN
35280 1531  190   ! ! !   ! CASE types OF
35290 1532  191   ! ! !   ! ! 2 : (* at_addr *)
35300 1533  192   ! ! !   ! !   LOCK mess_ref AS buf : mask_atadr DO
35310 1534  193   ! ! !   ! !     WITH buf DO
35320 1535  194   ! ! !   ! !       IF fix.update = remove_code THEN
35330 1536  195   ! ! !   ! !         BEGIN  (* delete *)
35340 1537  196   ! ! !   ! !         ! IF get_adr_code(entry.at_addr,adr_code) THEN
35350 1538  197   ! ! !   ! !         !   BEGIN (* found *)
35360 1539  198   ! ! !   ! !         !   ! atadrtable(next):= atadrtable(noatadr);
35370 1540  199   ! ! !   ! !         !   ! noatadr:= noatadr - 1;
35380 1541  200   ! ! !   ! !         !   ! fix.result:= accepted;
35390 1542  201   ! ! !   ! !         !   END ELSE
35400 1543  202   ! ! !   ! !         !   BEGIN (* not found *)
35410 1544  203   ! ! !   ! !         !   ! fix.result:= not_found;
35420 1545  204   ! ! !   ! !         !   END;
35430 1546  205   ! ! !   ! !         END ELSE
35440 1547  206   ! ! !   ! !         IF fix.update = insert_code THEN
35450 1548  207   ! ! !   ! !           BEGIN  (* insert *)
35460 1549  208   ! ! !   ! !           ! IF noatadr < at_addr_l THEN
\f

tsvaclst    81.01.19.   16.20.                                                    page    47

35470 1550  209   ! ! !   ! !           !   BEGIN (* ok *)
35480 1551  210   ! ! !   ! !           !   ! noatadr:= noatadr + 1;
35490 1552  211   ! ! !   ! !           !   !   (*q if test then testout(zout," noatadr  : ",noatadr); q*)
35500 1553  212   ! ! !   ! !           !   ! atadrtable(noatadr):= entry;
35510 1554  213   ! ! !   ! !           !   ! fix.result:= accepted;
35520 1555  214   ! ! !   ! !           !   END ELSE
35530 1556  215   ! ! !   ! !           !   BEGIN (* no room *)
35540 1557  216   ! ! !   ! !           !   ! fix.result:= no_room;
35550 1558  217   ! ! !   ! !           !   END;
35560 1559  218   ! ! !   ! !           END ELSE
35570 1560  219   ! ! !   ! !           fix.result:= update_error;
35580 1561  220   ! ! !   ! ! 4 : (* at-ts *)
35590 1562  221   ! ! !   ! !   LOCK mess_ref AS buf: mask_atts DO
35600 1563  222   ! ! !   ! !     WITH buf DO
35610 1564  223   ! ! !   ! !       IF fix.update = remove_code THEN
35620 1565  224   ! ! !   ! !         BEGIN (* delete *)
35630 1566  225   ! ! !   ! !         ! IF get_atts_index(entry.ts_addr,intg_aux) THEN
35640 1567  226   ! ! !   ! !         !   BEGIN (* found *)
35650 1568  227   ! ! !   ! !         !   ! attstable(next):= attstable(noatts);
35660 1569  228   ! ! !   ! !         !   ! noatts:= noatts-1;
35670 1570  229   ! ! !   ! !         !   ! fix.result:= accepted;
35680 1571  230   ! ! !   ! !         !   END ELSE
35690 1572  231   ! ! !   ! !         !   BEGIN (* not found *)
35700 1573  232   ! ! !   ! !         !   ! fix.result:= not_found;
35710 1574  233   ! ! !   ! !         !   END
35720 1575  234   ! ! !   ! !         END ELSE
35730 1576  235   ! ! !   ! !         IF fix.update = insert_code THEN
35740 1577  236   ! ! !   ! !           BEGIN (* insert *)
35750 1578  237   ! ! !   ! !           ! IF noatts < at_ts_l THEN
35760 1579  238   ! ! !   ! !           !   BEGIN (* ok *)
35770 1580  239   ! ! !   ! !           !   ! noatts:= noatts+1;
35780 1581  240   ! ! !   ! !           !   ! attstable(noatts):= entry;
35790 1582  241   ! ! !   ! !           !   ! fix.result:= accepted;
35800 1583  242   ! ! !   ! !           !   END ELSE
35810 1584  243   ! ! !   ! !           !   BEGIN (* no room *)
35820 1585  244   ! ! !   ! !           !   ! fix.result:= no_room;
35830 1586  245   ! ! !   ! !           !   END;
35840 1587  246   ! ! !   ! !           END ELSE
35850 1588  247   ! ! !   ! !           fix.result:= update_error;
35860 1589  248   ! ! !   ! ! 
35870 1590  249   ! ! !   ! ! OTHERWISE (* nothing *)
35880 1591  250   ! ! !   ! ! 
35890 1592  251   ! ! !   ! END;
35900 1593  252   ! ! !   END;
35910 1594  253   ! ! ! 
35920 1595  254   ! ! ! 6 : (* save received buffer *)
\f

tsvaclst    81.01.19.   16.20.                                                    page    48

35930 1596  255   ! ! !   BEGIN
35940 1597  256   ! ! !   ! CASE buftype OF
35950 1598  257   ! ! !   ! ! clock :
35960 1599  258   ! ! !   ! !   BEGIN
35970 1600  259   ! ! !   ! !   ! clock_ref:=: mess_ref;
35980 1601  260   ! ! !   ! !   ! WHILE get_listen_buf DO
35990 1602  261   ! ! !   ! !   !   return(mess_ref)
36000 1603  262   ! ! !   ! !   END;
36010 1604  263   ! ! !   ! ! ltime,
36020 1605  264   ! ! !   ! ! stime : timeout_ref :=: mess_ref;
36030 1606  265   ! ! !   ! ! lam   :
36040 1607  266   ! ! !   ! !   BEGIN
36050 1608  267   ! ! !   ! !   ! mess_ref^.u1:= write_read_at;
36060 1609  268   ! ! !   ! !   ! tolam_ref :=: mess_ref;
36070 1610  269   ! ! !   ! !   ! IF vcatc_state=not_ready THEN
36080 1611  270   ! ! !   ! !   !   BEGIN
36090 1612  271   ! ! !   ! !   !   !   (* book(vcc_vch_ltime); *)
36100 1613  272   ! ! !   ! !   !   ! vcatc_state:= passive      (* <--------<< *)
36110 1614  273   ! ! !   ! !   !   END
36120 1615  274   ! ! !   ! !   END
36130 1616  275   ! ! !   ! !   OTHERWISE (* nothing *)
36140 1617  276   ! ! !   ! END;
36150 1618  277   ! ! !   ! buftype:= used
36160 1619  278   ! ! !   END;
36170 1620  279   ! ! ! 
36180 1621  280   ! ! ! 7 : (* service on variable limit and counters *)
36190 1622  281   ! ! !   BEGIN
36200 1623  282   ! ! !   ! LOCK mess_ref AS buf: alarmlabel DO
36210 1624  283   ! ! !   !   buf.result:= accepted;
36220 1625  284   ! ! !   ! CASE types OF
36230 1626  285   ! ! !   ! ! 2 : (* read line error count *)
36240 1627  286   ! ! !   ! !   LOCK mess_ref AS buf: mask_service DO
36250 1628  287   ! ! !   ! !     WITH buf DO
36260 1629  288   ! ! !   ! !       BEGIN
36270 1630  289   ! ! !   ! !       ! fix.no_of_by:= label_size + 2;
36280 1631  290   ! ! !   ! !       ! CASE fix.update OF
36290 1632  291   ! ! !   ! !       ! ! read_code  : data:= line_error_count;
36300 1633  292   ! ! !   ! !       ! ! insert_code: line_error_count:= data
36310 1634  293   ! ! !   ! !       ! !   OTHERWISE fix.result:= update_error
36320 1635  294   ! ! !   ! !       ! END
36330 1636  295   ! ! !   ! !       END;
36340 1637  296   ! ! !   ! ! 4 : (* read pack counter *)
36350 1638  297   ! ! !   ! !   LOCK mess_ref AS buf: mask_service DO
36360 1639  298   ! ! !   ! !     WITH buf DO
36370 1640  299   ! ! !   ! !       BEGIN
36380 1641  300   ! ! !   ! !       ! fix.no_of_by:= label_size + 2;
\f

tsvaclst    81.01.19.   16.20.                                                    page    49

36390 1642  301   ! ! !   ! !       ! CASE fix.update OF
36400 1643  302   ! ! !   ! !       ! ! read_code : data:= pack_counter
36410 1644  303   ! ! !   ! !       ! !   OTHERWISE fix.result:= update_error
36420 1645  304   ! ! !   ! !       ! END
36430 1646  305   ! ! !   ! !       END;
36440 1647  306   ! ! !   ! ! 6 : (* update service limit *)
36450 1648  307   ! ! !   ! !   LOCK mess_ref AS buf: mask_service DO
36460 1649  308   ! ! !   ! !     WITH buf DO
36470 1650  309   ! ! !   ! !       BEGIN
36480 1651  310   ! ! !   ! !       ! fix.no_of_by:= label_size + 2;
36490 1652  311   ! ! !   ! !       ! CASE fix.update OF
36500 1653  312   ! ! !   ! !       ! ! read_code   : data:= serve_limit;
36510 1654  313   ! ! !   ! !       ! ! insert_code : serve_limit:= data
36520 1655  314   ! ! !   ! !       ! !   OTHERWISE fix.result:= update_error
36530 1656  315   ! ! !   ! !       ! END
36540 1657  316   ! ! !   ! !       END;
36550 1658  317   ! ! !   ! ! 8 : (* read current vcm *)
36560 1659  318   ! ! !   ! !   LOCK mess_ref AS buf: mask_vcm DO
36570 1660  319   ! ! !   ! !     WITH buf DO
36580 1661  320   ! ! !   ! !       BEGIN
36590 1662  321   ! ! !   ! !       ! fix.no_of_by:= label_size + 4;
36600 1663  322   ! ! !   ! !       ! CASE fix.update OF
36610 1664  323   ! ! !   ! !       ! ! read_code : data:= cur_vcm
36620 1665  324   ! ! !   ! !       ! !   OTHERWISE fix.result:= update_error
36630 1666  325   ! ! !   ! !       ! END
36640 1667  326   ! ! !   ! !       END;
36650 1668  327   ! ! !   ! ! 10 : (* update stoppoll limit *)
36660 1669  328   ! ! !   ! !   LOCK mess_ref AS buf: mask_service DO
36670 1670  329   ! ! !   ! !     WITH buf DO
36680 1671  330   ! ! !   ! !       BEGIN
36690 1672  331   ! ! !   ! !       ! fix.no_of_by:= label_size + 2;
36700 1673  332   ! ! !   ! !       ! CASE fix.update OF
36710 1674  333   ! ! !   ! !       ! ! read_code   : data:= stoppoll_limit;
36720 1675  334   ! ! !   ! !       ! ! insert_code : stoppoll_limit:= data
36730 1676  335   ! ! !   ! !       ! !   OTHERWISE fix.result:= update_error
36740 1677  336   ! ! !   ! !       ! END
36750 1678  337   ! ! !   ! !       END;
36760 1679  338   ! ! !   ! ! 12 : (* update max succ errors *)
36770 1680  339   ! ! !   ! !   LOCK mess_ref AS buf: mask_service DO
36780 1681  340   ! ! !   ! !     WITH buf DO
36790 1682  341   ! ! !   ! !       BEGIN
36800 1683  342   ! ! !   ! !       ! fix.no_of_by:= label_size + 2;
36810 1684  343   ! ! !   ! !       ! CASE fix.update OF
36820 1685  344   ! ! !   ! !       ! ! read_code   : data:= max_succ_errors;
36830 1686  345   ! ! !   ! !       ! ! insert_code : max_succ_errors:= data
36840 1687  346   ! ! !   ! !       ! !   OTHERWISE fix.result:= update_error
\f

tsvaclst    81.01.19.   16.20.                                                    page    50

36850 1688  347   ! ! !   ! !       ! END
36860 1689  348   ! ! !   ! !       END;
36870 1690  349   ! ! !   ! ! 14 : (* intern tests *)
36880 1691  350   ! ! !   ! !   LOCK mess_ref AS buf: mask_test DO
36890 1692  351   ! ! !   ! !     WITH buf DO
36900 1693  352   ! ! !   ! !       CASE fix.update OF
36910 1694  353   ! ! !   ! !       ! 0 : (* test off *)
36920 1695  354   ! ! !   ! !       !   test:= false;
36930 1696  355   ! ! !   ! !       ! 1 : (* test on *)
36940 1697  356   ! ! !   ! !       !   test:= true;
36950 1698  357   ! ! !   ! !       ! 2 : (* lamtest off *)
36960 1699  358   ! ! !   ! !       !   lamtest := false;
36970 1700  359   ! ! !   ! !       ! 3 : (* lamtest on  *)
36980 1701  360   ! ! !   ! !       !   lamtest := true;
36990 1702  361   ! ! !   ! !       ! 4 : (* get variable *)
37000 1703  362   ! ! !   ! !       !   BEGIN
37010 1704  363   ! ! !   ! !       !   ! fix.no_of_by:= label_size + 10;
37020 1705  364   ! ! !   ! !       !   ! data(1):= no_of_listen;
37030 1706  365   ! ! !   ! !       !   ! data(2):= no_of_returned;
37040 1707  366   ! ! !   ! !       !   ! data(3):= no_of_released;
37050 1708  367   ! ! !   ! !       !   ! data(4):= no_of_unknown;
37060 1709  368   ! ! !   ! !       !   ! data(5):= no_of_queue;
37070 1710  369   ! ! !   ! !       !   END;
37080 1711  370   ! ! !   ! !       ! 5 : (* get states *)
37090 1712  371   ! ! !   ! !       !   BEGIN
37100 1713  372   ! ! !   ! !       !   ! fix.no_of_by:= label_size + 10;
37110 1714  373   ! ! !   ! !       !   ! data(1):= ord(vcatc_state);
37120 1715  374   ! ! !   ! !       !   ! data(2):= ord(old_state);
37130 1716  375   ! ! !   ! !       !   ! data(3):= ord(lamspeak_state);
37140 1717  376   ! ! !   ! !       !   ! data(4):= ord(input);
37150 1718  377   ! ! !   ! !       !   ! data(5):= poll_delay MOD 256;
37160 1719  378   ! ! !   ! !       !   END;
37170 1720  379   ! ! !   ! !       ! OTHERWISE fix.result:= update_error;
37180 1721  380   ! ! !   ! !       END;
37190 1722  381   ! ! !   ! ! OTHERWISE (* nothing *)
37200 1723  382   ! ! !   ! END
37210 1724  383   ! ! !   END;
37220 1725  384   ! ! ! 
37230 1726  385   ! ! ! 8 : (* call lamspeak *)
37240 1727  386   ! ! !   BEGIN
37250 1728  387   ! ! !   ! found:= true;
37260 1729  388   ! ! !   ! CASE buftype OF
37270 1730  389   ! ! !   ! ! report,
37280 1731  390   ! ! !   ! ! alarm : LOCK mess_ref AS buf: alarmlabel DO
37290 1732  391   ! ! !   ! !     BEGIN
37300 1733  392   ! ! !   ! !     ! found:= get_adr_code(buf.send,adr_code);
\f

tsvaclst    81.01.19.   16.20.                                                    page    51

37310 1734  393   ! ! !   ! !     ! IF found THEN buf.op_code:= adr_code
37320 1735  394   ! ! !   ! !     END;
37330 1736  395   ! ! !   ! ! permiss: LOCK mess_ref AS buf: mask_vcm DO
37340 1737  396   ! ! !   ! !     BEGIN
37350 1738  397   ! ! !   ! !     ! found:= get_adr_code(buf.data,adr_code);
37360 1739  398   ! ! !   ! !     ! IF found THEN buf.fix.op_code:= adr_code
37370 1740  399   ! ! !   ! !     ! ELSE buf.fix.result:= not_found
37380 1741  400   ! ! !   ! !     END;
37390 1742  401   ! ! !   ! ! clock : restart_clock;
37400 1743  402   ! ! !   ! ! OTHERWISE (* nothing *)
37410 1744  403   ! ! !   ! END;
37420 1745  404   ! ! !   ! IF found THEN
37430 1746  405   ! ! !   !   BEGIN
37440 1747  406   ! ! !   !   ! vcatc_state:= lam_talk;     (* <--------<< *)
37450 1748  407   ! ! !   !   ! lamspeak
37460 1749  408   ! ! !   !   END ELSE
37470 1750  409   ! ! !   !   IF buftype<>permiss THEN
37480 1751  410   ! ! !   !     unknown_buf(sender_error)
37490 1752  411   ! ! !   END;
37500 1753  412   ! ! ! 
37510 1754  413   ! ! ! 9 : (* save mess_ref *)
37520 1755  414   ! ! !   BEGIN
37530 1756  415   ! ! !   ! signal(mess_ref,queuesem.s^);
37540 1757  416   ! ! !   ! no_of_queue:= no_of_queue + 1;
37550 1758  417   ! ! !   ! buftype:= used
37560 1759  418   ! ! !   END;
37570 1760  419   ! ! ! 
37580 1761  420   ! ! ! 10 : (* restart clock *)
37590 1762  421   ! ! !   restart_clock;
37600 1763  422   ! ! ! 
37610 1764  423   ! ! ! 11 : (* long timeout *)
37620 1765  424   ! ! !   BEGIN
37630 1766  425   ! ! !   ! timeout_ref :=: mess_ref;
37640 1767  426   ! ! !   ! buftype:= used;
37650 1768  427   ! ! !   ! old_state:= vcatc_state;
37660 1769  428   ! ! !   ! IF get_listen_buf THEN
37670 1770  429   ! ! !   !   BEGIN (* listenbuf found *)
37680 1771  430   ! ! !   !   ! mess_ref^.u2:= 0;     (* empty databuffer *)
37690 1772  431   ! ! !   !   ! book(vcc_vch_stime);
37700 1773  432   ! ! !   !   ! vcatc_state:= wait_shorttime;     (* <--------<< *)
37710 1774  433   ! ! !   !   END ELSE
37720 1775  434   ! ! !   !   BEGIN (* listenbuf not found *)
37730 1776  435   ! ! !   !   ! vcatc_state:= vcatc_need_buf;     (* <--------<< *)
37740 1777  436   ! ! !   !   END
37750 1778  437   ! ! !   END;
37760 1779  438   ! ! ! 
\f

tsvaclst    81.01.19.   16.20.                                                    page    52

37770 1780  439   ! ! ! 12 : (* book longtime *)
37780 1781  440   ! ! !   BEGIN
37790 1782  441   ! ! !   ! timeout_ref :=: mess_ref;
37800 1783  442   ! ! !   ! book(vcc_vch_ltime)
37810 1784  443   ! ! !   END;
37820 1785  444   ! ! ! 
37830 1786  445   ! ! ! 13 : (* listenbuf ready to vcatc *)
37840 1787  446   ! ! !   BEGIN
37850 1788  447   ! ! !   ! mess_ref^.u2:= 0;      (* empty databuffer *)
37860 1789  448   ! ! !   ! book(vcc_vch_stime);
37870 1790  449   ! ! !   ! vcatc_state:= wait_shorttime     (* <--------<< *)
37880 1791  450   ! ! !   END;
37890 1792  451   ! ! ! 
37900 1793  452   ! ! ! 14 : (* modul error *)
37910 1794  453   ! ! !     (* temporary solution *)
37920 1795  454   ! ! !   BEGIN
37930 1796  455   ! ! !   ! timeout_ref :=: mess_ref;
37940 1797  456   ! ! !   ! testout(zout,"timeout vch ",ord(vcatc_state));
37950 1798  457   ! ! !   ! vcatc_state := passive;
37960 1799  458   ! ! !   ! book(vcc_vch_ltime)
37970 1800  459   ! ! !   END;
37980 1801  460   ! ! ! 
37990 1802  461   ! ! ! 15 : (* dc or vc operations *)
38000 1803  462   ! ! !   CASE types OF
38010 1804  463   ! ! !   ! 0 : (* order to start or stop polling *)
38020 1805  464   ! ! !   !   LOCK mess_ref AS buf: mask_poll DO
38030 1806  465   ! ! !   !     WITH buf DO
38040 1807  466   ! ! !   !       CASE fix.update OF
38050 1808  467   ! ! !   !       ! stop_code : (* stop poll *)
38060 1809  468   ! ! !   !       !   IF vcatc_state <> passive THEN
38070 1810  469   ! ! !   !       !     BEGIN
38080 1811  470   ! ! !   !       !     ! area_pointer := 1;
38090 1812  471   ! ! !   !       !     ! lamspeak_state := nottele;  (* lamspeak is initialized *)
38100 1813  472   ! ! !   !       !     ! vcatc_state:= passive;     (* <--------<< *)
38110 1814  473   ! ! !   !       !     ! fix.result:= accepted;
38120 1815  474   ! ! !   !       !     END ELSE
38130 1816  475   ! ! !   !       !     fix.result:= rejected;
38140 1817  476   ! ! !   !       ! start_code : (* start poll *)
38150 1818  477   ! ! !   !       !   IF (vcatc_state=passive) AND (NOT nil(tolam_ref)) AND (NOT nil(clock_ref)) THEN
38160 1819  478   ! ! !   !       !     BEGIN
38170 1820  479   ! ! !   !       !     ! vcatc_state:= active;     (* <--------<< *)
38180 1821  480   ! ! !   !       !     ! poll_delay:= poll_rate;
38190 1822  481   ! ! !   !       !     ! LOCK clock_ref AS cbuf: timers DO
38200 1823  482   ! ! !   !       !     !   cbuf.object:= poll_delay;
38210 1824  483   ! ! !   !       !     ! signal(clock_ref,timeoutsem^);     (* start clock timeout *)
38220 1825  484   ! ! !   !       !     ! fix.result:= accepted;
\f

tsvaclst    81.01.19.   16.20.                                                    page    53

38230 1826  485   ! ! !   !       !     ! line_error_count:= error_count;
38240 1827  486   ! ! !   !       !     END ELSE
38250 1828  487   ! ! !   !       !     fix.result:= rejected;
38260 1829  488   ! ! !   !       ! OTHERWISE fix.result:= update_error;
38270 1830  489   ! ! !   !       END;
38280 1831  490   ! ! !   ! 2 : (* at-vc control *)
38290 1832  491   ! ! !   !   BEGIN
38300 1833  492   ! ! !   !   ! LOCK mess_ref AS buf: mask_atvcdc DO
38310 1834  493   ! ! !   !   !   WITH buf DO
38320 1835  494   ! ! !   !   !     BEGIN
38330 1836  495   ! ! !   !   !     ! buftype:= alarm;
38340 1837  496   ! ! !   !   !     ! IF fix.send = at THEN
38350 1838  497   ! ! !   !   !     !   BEGIN
38360 1839  498   ! ! !   !   !     !   ! fix.send:= fix.rec;
38370 1840  499   ! ! !   !   !     !   ! fix.rec := dc;
38380 1841  500   ! ! !   !   !     !   ! fix.result:= accepted;
38390 1842  501   ! ! !   !   !     !   END ELSE
38400 1843  502   ! ! !   !   !     !   IF fix.send = dc THEN
38410 1844  503   ! ! !   !   !     !     BEGIN
38420 1845  504   ! ! !   !   !     !     ! fix.send:= fix.rec;
38430 1846  505   ! ! !   !   !     !     ! fix.rec := at;
38440 1847  506   ! ! !   !   !     !     ! fix.result:= accepted;
38450 1848  507   ! ! !   !   !     !     END ELSE
38460 1849  508   ! ! !   !   !     !     buftype := unknown;
38470 1850  509   ! ! !   !   !     END;
38480 1851  510   ! ! !   !   ! IF buftype = unknown THEN unknown_buf( sender_error);
38490 1852  511   ! ! !   !   END
38500 1853  512   ! ! !   !   OTHERWISE (* nothing *)
38510 1854  513   ! ! !   END;
38520 1855  514   ! ! ! 
38530 1856  515   ! ! ! 16 : (* one listenbuf arrived before shorttimeout *)
38540 1857  516   ! ! !   BEGIN
38550 1858  517   ! ! !   ! save_listen_buf;
38560 1859  518   ! ! !   ! input:= from_listen_ref;
38570 1860  519   ! ! !   ! vcatc_state:= old_state     (* <--------<< *)
38580 1861  520   ! ! !   END;
38590 1862  521   ! ! ! 17 : (* lambuf arrived before lamspeak ready *)
38600 1863  522   ! ! !   fromlam_ref :=: mess_ref;
38610 1864  523   ! ! ! 18 : (* return buffer to pool *)
38620 1865  524   ! ! !   BEGIN
38630 1866  525   ! ! !   ! return(mess_ref);
38640 1867  526   ! ! !   ! no_of_returned:= (no_of_returned MOD max_int) + 1;
38650 1868  527   ! ! !   ! buftype:= used;
38660 1869  528   ! ! !   END;
38670 1870  529   ! ! ! 19 : (* lam need buf *)
38680 1871  530   ! ! !   BEGIN
\f

tsvaclst    81.01.19.   16.20.                                                    page    54

38690 1872  531   ! ! !   ! restart_clock;
38700 1873  532   ! ! !   ! IF no_of_listen>0 THEN
38710 1874  533   ! ! !   !   input:= from_listen_ref
38720 1875  534   ! ! !   ! ELSE
38730 1876  535   ! ! !   !   IF no_of_queue>5 THEN
38740 1877  536   ! ! !   !     BEGIN
38750 1878  537   ! ! !   !     ! wait(mess_ref,queuesem.w^);
38760 1879  538   ! ! !   !     ! no_of_queue:= no_of_queue - 1;
38770 1880  539   ! ! !   !     ! unknown_buf(pool_empty)
38780 1881  540   ! ! !   !     END
38790 1882  541   ! ! !   END
38800 1883  542   ! ! !   OTHERWISE unknown_buf(rejected)
38810 1884  543   ! ! END (* case *);
38820 1885  544   ! ! 
38830 1886  545   ! !  
\f

tsvaclst    81.01.19.   16.20.                                                    page    55

39010 1887  546   ! !   (* send buffer *)
39020 1888  547   ! !   (*q if test then
39030 1889  548   ! !   testout(zout,"buftype out:",ord(buftype)); q*)
39040 1890  549   ! ! CASE buftype OF
39050 1891  550   ! ! ! operate,
39060 1892  551   ! ! ! table  ,
39070 1893  552   ! ! ! service,
39080 1894  553   ! ! ! permiss:
39090 1895  554   ! ! !   BEGIN   (* receipt in current buffer , back to sender *)
39100 1896  555   ! ! !   ! mess_ref^.u3:= vca_route;
39110 1897  556   ! ! !   ! mess_ref^.u4:= mess_ref^.u4 + 1;
39120 1898  557   ! ! !   ! LOCK mess_ref AS buf: alarmlabel DO
39130 1899  558   ! ! !   !   BEGIN
39140 1900  559   ! ! !   !   ! buf.rec:= buf.send;
39150 1901  560   ! ! !   !   ! buf.send.micro:= micadr;
39160 1902  561   ! ! !   !   END;
39170 1903  562   ! ! !   ! send_to_vch
39180 1904  563   ! ! !   END;
39190 1905  564   ! ! ! unknown:
39200 1906  565   ! ! !   BEGIN     (* send buffer to own dc or sender *)
39210 1907  566   ! ! !   ! mess_ref^.u3:= vca_route;
39220 1908  567   ! ! !   ! send_to_vch
39230 1909  568   ! ! !   END;
39240 1910  569   ! ! ! listen:
39250 1911  570   ! ! !   BEGIN     (* new listenbuffer are used *)
39260 1912  571   ! ! !   ! mess_ref^.u3:= vca_route1;    (* request listenbuffer *)
39270 1913  572   ! ! !   ! LOCK mess_ref AS buf: alarmlabel DO
39280 1914  573   ! ! !   !   buf.send.micro:= micadr;
39290 1915  574   ! ! !   ! send_to_vch
39300 1916  575   ! ! !   END;
39310 1917  576   ! ! ! report,
39320 1918  577   ! ! ! testat,
39330 1919  578   ! ! ! alarm:
39340 1920  579   ! ! !   BEGIN     (* send to other receiver *)
39350 1921  580   ! ! !   ! mess_ref^.u3:= vca_route;
39360 1922  581   ! ! !   ! send_to_vch
39370 1923  582   ! ! !   END;
39380 1924  583   ! ! ! empty:
39390 1925  584   ! ! !   BEGIN     (* buffer is empty, release to pool *)
39400 1926  585   ! ! !   ! mess_ref^.u2:= 0;
39410 1927  586   ! ! !   ! mess_ref^.u3:= vca_route;
39420 1928  587   ! ! !   ! IF no_of_listen<2 THEN
39430 1929  588   ! ! !   !   save_listen_buf ELSE
39440 1930  589   ! ! !   !   return(mess_ref)
39450 1931  590   ! ! !   END
39460 1932  591   ! ! !   OTHERWISE (* nothing *)
\f

tsvaclst    81.01.19.   16.20.                                                    page    56

39470 1933  592   ! ! END (* send buffer *);
39480 1934  593   ! ! 
39490 1935  594   ! ! IF input <> nothing THEN
39500 1936  595   ! !   IF NOT nil(mess_ref) THEN
39510 1937  596   ! !     BEGIN  (* needless buffer , possible program error *)
39520 1938  597   ! !     !   (*q if test then testout(zout,"released :  ",mess_ref^.u4); q*)
39530 1939  598   ! !     ! no_of_released:= (no_of_released MOD max_int) + 1;
39540 1940  599   ! !     ! return(mess_ref);
39550 1941  600   ! !     END;
39560 1942  601   ! ! 
39570 1943  602   ! UNTIL false;
39580 1944  603   END.
39590 1945      
39600 1946      
\f

tsvaclst    81.01.19.   16.20.                                                    page    57

           0  153*  154*  155*  156*  166*  167*  189*  230*  258*  278*  279*  280*  281*  282*  283*
              284*  285*  285*  285*  285*  285*  285*  285*  285*  285*  285*  285*  285*  285*  285*
              285*  445   502*  509*  510*  511*  604   606   607   722*  723*  756   756   757   759 
              759   760   772   772   773   780   780   781   792   793   798   798   799   806   806 
              807   813   813   814   817   861   894   900: 1087  1087  1129  1129  1130  1132  1135 
             1139  1139  1157  1205  1206  1217  1217  1218  1295  1330  1334  1389  1389  1389  1389 
             1392  1410  1463: 1476: 1481: 1694: 1771  1788  1804: 1873  1926 
           1  112*  155*  192*  193*  194*  195*  218*  248*  249*  278*  279*  280*  281*  282*  283*
              284*  340   347   357   364   374   381   401   413   425   448   452   466   502*  574 
              600   623   631   634   731   751   756   759   772   780   791   798   806   813   850 
              863   884   886   900   901   901   914   915   947   954:  955   964:  967   985:  986 
              996  1038  1056: 1073  1081  1083  1088  1109  1119  1123  1129  1135: 1136  1143  1155 
             1158  1160  1187  1205  1205  1217  1317  1413  1447: 1463: 1467: 1513: 1540  1551  1569 
             1580  1696: 1705  1714  1757  1811  1867  1879  1897  1939 
           2   68*  278*  278*  278*  278*  278*  278*  398   398   434   502*  858   887   919   956:
              972   987: 1003  1048  1063: 1086  1125  1136: 1144  1144  1161  1161  1188  1452: 1463:
             1471: 1476: 1485: 1489: 1515: 1532: 1626: 1630  1641  1651  1672  1683  1698: 1706  1715 
             1831: 1928 
           3  154*  248*  279*  279*  279*  279*  503*  632   894   896   920   957   965   989: 1070:
             1088  1130  1135: 1138  1145  1145  1155  1162  1162  1462: 1518: 1700: 1707  1716 
           4  278*  279*  280*  281*  425:  503*  959  1078: 1136: 1138  1466: 1472: 1485: 1489: 1526:
             1561: 1637: 1662  1702: 1708  1717 
           5   67*  112*  278*  279*  280*  503*  981  1099: 1132  1157  1298  1477: 1493: 1529: 1709 
             1711: 1718  1876 
           6  278*  278*  278*  278*  279*  279*  279*  279*  280*  280*  280*  283*  284*  504*  988 
             1087  1106: 1470: 1489: 1595: 1647:
           7  279*  280*  281*  282*  283*  504*  510*  990  1115: 1621:
           8  245*  280*  280*  280*  280*  280*  281*  282*  425: 1011  1170: 1475: 1489: 1658: 1726:
           9  281*  281*  281*  281*  281*  282*  282*  282*  282*  282*  283*  283*  283*  283*  283*
              283*  284*  284*  284*  284*  284*  284*  284* 1016  1177: 1480: 1754:
          10  281*  283*  284*  608  1019  1184: 1484: 1489: 1668: 1704  1713  1761:
          11  281*  282* 1026  1194: 1488: 1764:
          12  281*  282* 1044  1201: 1489: 1492: 1679: 1780:
          13  283* 1213: 1786:
          14  283*  284*  950   999  1022  1041  1215: 1489: 1690: 1793:
          15  166*  167*  279*  280*  281*  282*  722*  723* 1802:
          16  284*  424   843  1433  1434  1856:
          17  282*  283*  284* 1862:
          18  278*  279*  280*  281*  282*  283*  284* 1864:
          19  282*  610  1870:
          31  156*  511*
         255  153*  509*
         256 1718 
        1000 1346 
\f

tsvaclst    81.01.19.   16.20.                                                    page    58

accepted     1205  1471  1541  1554  1570  1582  1624  1814  1825  1841  1847 
action        201* 1505= 1511 
active        122* 1328  1408: 1820 
acttable      270* 1505 
addr          170*  707   742=
addr_code     346   360 
adr_code      204*  887   919  1537  1733  1734  1738  1739 
alarm         130*  880: 1250: 1463  1731: 1836  1919:
alarmlabel     73*   74*   78*   83*   89*   94*  101*  106*  111*  408   515*  520* 1521  1623  1731 
             1898  1913 
alarmnetaddr   90*   95*   96*   97*  164*  170*  208*  252*  336*  353*  521*  720*  726* 1389 
alfa          251*
alloc        1348  1363  1366  1376 
al_env_version                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1345 
area_from_lam                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              248* 1108= 1117= 1123  1125  1130  1138  1144  1145  1161  1162  1187=
area_pointer  257*  631   636   884=  914=  953   963   984  1073= 1073  1081= 1108  1109= 1109  1117 
             1119= 1188= 1811=
area_to_lam   247*  636   886=  887=  894=  896=  900=  901=  915=  919=  920= 1083  1086  1088  1088 
             1143= 1144= 1145= 1155= 1158= 1160= 1161= 1162=
as            296:  314:  319:  325:  392:  408:  564:  576:  584:  596:  626:  644:  683:  697:  854:
              872:  890:  917: 1268: 1355: 1373: 1452: 1521: 1533: 1562: 1623: 1627: 1638: 1648: 1659:
             1669: 1680: 1691: 1731: 1736: 1805: 1822: 1833: 1898: 1913:
at             95* 1837  1846 
atadr         336*  343   353*  363=
atadrtable    192*  343   346   360   363  1539= 1539  1553=
attstable     193*  377   380  1568= 1568  1581=
atts_table_index                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              253*
at_addr       343   363  1537 
at_addr_e     102*  192*
at_addr_l    1549 
at_addr_limit                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              410 
at_control   1358 
at_table_addr                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              252* 1086  1088  1125  1129  1139 
at_tim_excess                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              757 
at_ts_e       107*  193*
at_ts_l       193* 1578 
below_serve_limit                                                <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              260*  769   774=  795   800=
\f

tsvaclst    81.01.19.   16.20.                                                    page    59

below_stoppoll_limit                                             <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              261*  777   782=  803   808=
boo           263*  533*  582=  641=  869= 1086=
book          307* 1772  1783  1789  1799 
bookup_ref    210*  294   295   296:  302   303   312   313   314:  321   322   323   325: 1363  1364 
book_pool     220* 1363 
book_req      312  1379 
boolean       176*  200*  263*  336*  338*  353*  355*  370*  372*  442*  532*  533*
buf           296:  298   299   300   314:  316   317   319:  320   325:  327   328   392:  393   408:
              409   683:  685   693   697:  699   707   708   709   890:  892   896   899   917:  920 
             1355: 1356  1373: 1374  1452: 1453  1455  1521: 1522  1533: 1534  1562: 1563  1623: 1624 
             1627: 1628  1638: 1639  1648: 1649  1659: 1660  1669: 1670  1680: 1681  1691: 1692  1731:
             1733  1734  1736: 1738  1739  1740  1805: 1806  1833: 1834  1898: 1900  1900  1901  1913:
             1914 
buftype       177*  390=  412=  418   438=  451=  465=  845  1173= 1180= 1197= 1208= 1236  1258= 1319=
             1403= 1444= 1447= 1454= 1456= 1463= 1467= 1472= 1476= 1477= 1481= 1485= 1489= 1493= 1499=
             1505  1597  1618= 1729  1750  1758= 1767= 1836= 1849= 1851  1868= 1890 
buf_type      129*  177*  267*
build_an_lbuf                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              673* 1315 
build_a_letter_telegram                                          <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              621*  906   923  1074  1147  1164 
build_a_poll_telegram                                            <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              591* 1094  1102  1111  1189  1243 
build_line_dep_telegram                                          <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              653* 1058 
build_same_telegram                                              <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              560*  665  1066 
build_serial_changed_telegram                                                <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              571*  667  1220 
byte           61*  116*  117*  165*  168*  169*  197*  204*  248*  250*  336*  353*  387*  405*  516*
              522*  523*  529*  721*  724*  725*
call          760   773   781 
calltest      537*  566   616   639   866 
canno          61*  562   573   594   624   851  1346  1352 
cbuf         1822: 1823 
check        1289 
check5        582   641   869  1289 
ch_format     115* 1355 
clock         137*  438  1237: 1447  1598: 1742:
clock_ref     211* 1366  1367  1373: 1600= 1818  1822: 1824 
cntl_inf      116* 1358=
code          336*  346=  353*  360 
col           268*  270*
\f

tsvaclst    81.01.19.   16.20.                                                    page    60

com_pool       57*  436 
con_lam_time 1359 
count         299=  316=
create_at_ch 1351 
cur_vcm       206* 1390= 1519  1522  1664 
data           74*   79*   90*  112*  395=  502*  945:  983: 1013: 1035: 1632= 1633  1643= 1653= 1654 
             1664= 1674= 1675  1685= 1686  1705= 1706= 1707= 1708= 1709= 1714= 1715= 1716= 1717= 1718=
             1738 
dc             97* 1840  1843 
dc_address     59* 1391 
delay_req    1369 
demand_lbuf   717*  756   759   772   780   798   806   813  1087  1129  1138  1205  1217 
dta1          168*  693   708   740=
dta2          169*  709   741=
dummy_route  1443:
d_ack         503*  952:  994: 1014: 1037:
d_addr        726*  742 
d_dta1        724*  740 
d_dta2        725*  741 
d_kind        718*  734 
d_noob        719*  735 
d_opco        721*  737 
d_reci        720*  736 
d_resu        723*  739 
d_upda        722*  738 
empty         142* 1258  1444  1924:
entry         102*  107* 1537  1553  1566  1581 
error         387*  399   405*  416   418 
error_count    84* 1826 
false         341   358   375   456   532*  761   774   782  1152: 1289  1695  1699  1943 
fault_at_line                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              747* 1059  1065  1179  1196 
fix            73*   78*   83*   89*   94*  101*  106*  111*  395   396   397   398   399   920  1535 
             1541  1544  1547  1554  1557  1560  1564  1570  1573  1576  1582  1585  1588  1630  1631 
             1634  1641  1642  1644  1651  1652  1655  1662  1663  1665  1672  1673  1676  1683  1684 
             1687  1693  1704  1713  1720  1739  1740  1807  1814  1816  1825  1828  1829  1837  1839 
             1839  1840  1841  1843  1845  1845  1846  1847 
fix_incr_on_err                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              238*  764   765 
fix_label     515*  520*  685   699   892   899 
found         200*  338*  341=  342   345=  348   355*  358=  359   362=  365   372*  375=  376   379=
              382  1423= 1728= 1733= 1734  1738= 1739  1745 
free          504*  971: 1002: 1025: 1047: 1291  1297 
fromlam_ref   214* 1408  1409  1416  1417  1863=
\f

tsvaclst    81.01.19.   16.20.                                                    page    61

from_check    511*
from_data     509* 1271 
from_lam_driver                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              934* 1306 
from_listen_ref                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              146* 1335  1421: 1859  1874 
from_opcode   510* 1270 
from_sem      145* 1385  1406: 1424  1426 
from_telegram_type                                               <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              508* 1268 
func          198*  843  1433= 1461 
func_grp      199*
generate      582   641   869 
get_adr_code  336*  348= 1537  1733  1738 
get_atts_index                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              370*  382= 1566 
get_listen_buf                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              442*  454=  456= 1423  1601  1769 
get_net_addr  353*  365= 1086  1125 
h10           391  1143  1160 
h2           1087 
h30          1084 
h31           756   759   813  1084 
h32          1084: 1217 
h34           772   798 
h35           780   806 
h40          1128  1154 
h41           898 
h65          1138  1158 
h80           860 
h84          1128  1154 
h85           898 
hc1          1371 
hc2          1381 
hc3           313 
hc4           295 
hc5           450 
hlp           936* 1123= 1128  1128  1129  1132  1132  1134  1154  1154  1155  1157  1157 
i             936* 1135= 1136= 1138 
incname      1344 
index         232*  298=  298   327=  327   370*  380=  380 
input         180* 1335= 1385= 1405  1424= 1426= 1717  1859= 1874= 1935 
input_type    145*  180*
insert_code  1547  1576  1633: 1654: 1675: 1686:
\f

tsvaclst    81.01.19.   16.20.                                                    page    62

integer        60*   79*   84*   85*  112*  163*  189*  203*  218*  230*  232*  235*  236*  237*  238*
              239*  245*  253*  258*  267*  291*  307*  370*  528*  531*  719*  936*
intg_aux      202* 1566 
keep_the_opcode                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              250*  843=  860   886   898   898   900   901   915  1205 
keep_the_telegram                                                <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              246*  565   578   585=  613=  645=  873=
kind          162*  681   734=
label_size    398   531*  735   893  1630  1641  1651  1662  1672  1683  1704  1713 
lam           140* 1261: 1499  1606:
lamsem         55*  877   908   925  1060  1067  1075  1096  1103  1112  1148  1165  1191  1221  1245 
             1361 
lamspeak      475* 1748 
lamspeak_state                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              182*  875=  907=  924=  939  1095= 1120= 1146= 1163= 1174= 1181= 1190= 1198= 1209= 1244=
             1327  1388= 1716  1812=
lamtest       262*  566   616   639   866  1292  1699= 1701=
lam_need_buf  124* 1333 
lam_pool      218* 1348 
lam_route    1353  1498:
lam_talk      123* 1416: 1747 
lam_timeout   532*  755   761= 1300=
lbuf_info     249*  732  1315 
lbuf_kind_type                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              159*  162*  718*
lbuf_needed   258*  731=  731   732  1315  1317= 1317  1330 
lbuf_record   161*  249*  675*
letterfromvc  182*  977: 1190 
lettertovc    182*  907   924   941: 1146  1163 
line          181*  785=  819= 1058  1384=
line_error_count                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              226*  764   765=  765   767=  769   777   791=  791   792   793=  795   803  1632  1633=
             1826=
line_was      655*  664 
listen        131*  451  1310: 1319  1493  1910:
listen_ref    209*  447   464 
lock          296:  314:  319:  325:  392:  408:  564:  576:  584:  596:  626:  644:  683:  697:  854:
              872:  890:  917: 1268: 1355: 1373: 1452: 1521: 1533: 1562: 1623: 1627: 1638: 1648: 1659:
             1669: 1680: 1691: 1731: 1736: 1805: 1822: 1833: 1898: 1913:
log           159*  696: 1087  1138 
log_addr      521*  707=
log_alarm     523*  709=
log_opc       522*  708=
ltime         138* 1454  1604:
\f

tsvaclst    81.01.19.   16.20.                                                    page    63

macro        1391=
macroaddr      59*  370* 1389 
mask_atadr    100* 1533 
mask_atts     105* 1562 
mask_atvcdc    93* 1833 
mask_log_lbuf                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              519*  697 
mask_norm_lbuf                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              514*  683   890 
mask_poll      82* 1805 
mask_service   77* 1627  1638  1648  1669  1680 
mask_test     110* 1691 
mask_unknown   72*  392 
mask_vcm       88*  917  1659  1736 
max_info_bytes                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               68*
max_int       401   425   750   764   767  1867  1939 
max_lbuf_needed                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
               67*  249*
max_succ_errors                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              237*  753   811  1685  1686=
max_succ_lin_err                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              237*
messem         51* 1348  1366  1376  1415  1418  1419 
mess_ref      215*  391   392:  408:  413   413   424   428   433   436   437   447   448   449   450 
              464   890:  917: 1266  1315  1348  1349  1355: 1361  1409= 1412  1415  1417= 1418  1419 
             1432  1433  1434  1452: 1521: 1533: 1562: 1600  1602  1605  1608  1609  1623: 1627: 1638:
             1648: 1659: 1669: 1680: 1691: 1731: 1736: 1756  1766  1771  1782  1788  1796  1805: 1833:
             1863  1866  1878  1896  1897  1897  1898: 1907  1912  1913: 1921  1926  1927  1930  1936 
             1940 
micadr         60*  397   415  1346  1901  1914 
micro         397=  410   415= 1392= 1901= 1914=
module_not_ready                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1516 
module_passive                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1524 
nak           504*  970: 1001: 1024: 1046:
netc_route    449  1460:
next          203*  340=  342   343   346   347=  347   357=  359   360   363   364=  364   374=  376 
              377   380   381=  381  1539  1568 
noatadr       186*  342   359  1539  1540= 1540  1549  1551= 1551  1553 
noatts        187*  376  1568  1569= 1569  1578  1580= 1580  1581 
nok           173*  785 
noob          163*  687   701   735=
\f

tsvaclst    81.01.19.   16.20.                                                    page    64

norm          159*  682:  756   759   772   780   798   806   813  1129  1205  1217 
norm_inf      516*  693=  896 
nothing       147* 1426: 1935 
nottele       182* 1120  1174  1181  1198  1209  1327  1388  1812 
not_found    1544  1573  1740 
not_ready     120* 1386  1387  1408  1610 
novce         189*
novcm         188*
no_of_by      398=  687=  701=  892  1630= 1641= 1651= 1662= 1672= 1683= 1704= 1713=
no_of_listen  227*  434   445   452=  452   466=  466  1334  1705  1873  1928 
no_of_queue   225* 1410  1413= 1413  1709  1757= 1757  1876  1879= 1879 
no_of_released                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              229* 1707  1939= 1939 
no_of_returned                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              228* 1706  1867= 1867 
no_of_unknown                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              230*  401=  401  1708 
no_room      1557  1585 
no_vcc_tim    219*
no_vcc_upd    220*
numb_of_bytes                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              531*  892=  893 
object        232*  300=  300   317=  320=  328=  328  1374= 1453  1455  1823=
ok            173*  664   819  1384 
oknok_type    173*  181*  655*
ok_at_line    789* 1072  1080  1101  1110  1118  1172  1186  1204  1219 
old_state     179* 1387= 1715  1768= 1860 
opco          165*  679   689   703   737=
operate       136* 1481  1891:
opr           502*  946:  993: 1018: 1036:
opsem          49* 1344 
op_code       689=  703= 1734= 1739=
ord          1714  1715  1716  1717  1797 
own          1344 
own_dc        205*  396   756   757   759   760   772   773   780   781   798   799   806   807   813 
              814  1087  1130  1138  1205  1206  1217  1218  1391  1392 
pack_counter  223*  425=  425  1643 
passive       121* 1613  1798  1809  1813  1818 
permiss       143*  912: 1249: 1472  1736: 1750  1894:
polling       182* 1007: 1095  1244 
poll_delay    239* 1374  1718  1821= 1823 
poll_delay_time                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              239*
poll_rate      85* 1821 
\f

tsvaclst    81.01.19.   16.20.                                                    page    65

pool          218*  219*  220*
pool_empty   1880 
pop           447 
process        48*
push          321   464 
p_ack         502*  944:  980: 1010: 1034:
queuesem       52* 1412  1756  1878 
r             537*  560*  562   564:  566   571*  573   576:  582   584:  591*  594   596:  616   621*
              624   626:  639   641   644:  654*  665   667   674*  679   683:  697:
read_code    1632: 1643: 1653: 1664: 1674: 1685:
rec           396=  414=  688=  702= 1522= 1839  1840= 1845  1846= 1900=
recall        799   807   814 
reci          164*  688   702   736=
reference     215*  537*  560*  571*  591*  621*  654*  674*
rejected     1457  1816  1828  1883 
remove_code  1535  1564 
report        133*  881: 1251: 1467  1477  1730: 1917:
restart_clock                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              431* 1742  1762  1872 
resu          167*  691   705   739=
result        399=  416=  691=  705=  899  1541= 1544= 1554= 1557= 1560= 1570= 1573= 1582= 1585= 1588=
             1624= 1634= 1644= 1655= 1665= 1676= 1687= 1720= 1740= 1814= 1816= 1825= 1828= 1829= 1841=
             1847=
return       1602  1866  1930  1940 
return_buf    405* 1471  1516  1524 
row           267*  268*  278*  279*  280*  281*  282*  283*  284*  285*
rute          197* 1432= 1442 
s            1348  1366  1376  1756 
save_listen_buf                                                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              288*  437   461* 1527  1858  1929 
semaphore     216*
sempointer     49*   57*
send          397   410   414   415  1733  1837  1839= 1843  1845= 1900  1901  1914 
sender_error 1751  1851 
send_to_vch   422* 1903  1908  1915  1922 
sensesem      436 
serial_no     255*  574=  574   579   600=  600   605   607   623=  623   635   850=  850   859 
serve_limit   235*  769   795  1653  1654=
service       134* 1489  1893:
service_lim   235*
signal        302   322   428   433   877   908   925  1060  1067  1075  1096  1103  1112  1148  1165 
             1191  1221  1245  1361  1756  1824 
slave_data    529* 1108  1117  1187  1206  1218  1271=
slave_opcode  528*  942   978  1008  1032  1270= 1291= 1292  1297=
\f

tsvaclst    81.01.19.   16.20.                                                    page    66

speak_action  245*  947=  950=  955=  957=  959=  965=  967=  972=  981=  986=  988=  990=  996=  999=
             1003= 1011= 1016= 1019= 1022= 1026= 1038= 1041= 1044= 1048= 1054 
start_code   1817:
state_type    120*  178*  179*  268*
status        503*  949:  998: 1021: 1040:
stime         139* 1456  1605:
stoppoll_limit                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              236*  777   803  1674  1675=
stop_code    1808:
stop_poll     127*
stop_poll_lim                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              236*
succ_line_errors                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              256*  750   751=  751   753   811   817=
table         132* 1485  1892:
telegram      564:  565=  576:  578=  579   584:  585   596:  601   613   626:  629   644:  645   854:
              856   872:  873  1268: 1270  1271 
teletxt       251*
test          176* 1695= 1697=
testat        135*  847: 1252: 1476  1918:
testi         182*  875  1031:
testopen     1344 
testout      1292  1345  1346  1797 
ticks         291*  299   307*  316   317   320 
timeoutsem     56*  302   322   433  1824 
timeout_answer                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              216*  303   323  1363 
timeout_ref   212*  310   319:  321  1376  1377  1605= 1766= 1782= 1796=
timers        219*  319  1373  1452  1822 
time_inf      117* 1359=
tim_pool      219* 1366  1376 
tim_route    1370  1445:
tim_route1   1364  1380  1450:
tolam_ref     213*  851   854:  866   869   872:  877   906   908   923   925  1058  1060  1066  1067 
             1074  1075  1094  1096  1102  1103  1111  1112  1147  1148  1164  1165  1189  1191  1220 
             1221  1243  1245  1266= 1268: 1289  1295  1298  1609= 1818 
to_check      156*  608=  610=
to_data       153*  606=  636=  861=  863=
to_lam_driver                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              831* 1257 
to_opcode     154*  604=  632=  634=  858=
to_serial_no  155*  579=  605=  635=  859=
to_telegram_type                                                 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              152*  246*  564   576   584   596   626   644   854   872 
\f

tsvaclst    81.01.19.   16.20.                                                    page    67

trans_err_rate                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              238*
trans_ok      224*
true          176*  263*  345   362   379   454   533*  800   808  1126: 1300  1697  1701  1728 
tsadr         370*  377 
ts_addr       377  1566 
ts_pointer     52*
types         199*  843  1434= 1446  1451  1462  1466  1470  1475  1480  1484  1488  1492  1531  1625 
             1803 
t_ack         503*  962:  995: 1015: 1043:
u1            294=  312= 1351= 1369= 1379= 1608=
u2            448=  562=  573=  594=  624=  851= 1295  1298  1352= 1771= 1788= 1926=
u3            449= 1353= 1364= 1370= 1380= 1432  1896= 1907= 1912= 1921= 1927=
u4            295=  313=  391=  413=  413   424   450=  679= 1371= 1381= 1433  1434  1897= 1897 
unknown       129*  390   412   418  1849  1851  1905:
unknown_buf   387*  418  1448  1457  1458  1464  1468  1473  1478  1482  1486  1490  1494  1496  1500 
             1751  1851  1880  1883 
unknown_opcode                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1448  1458  1464  1468  1473  1478  1482  1486  1490  1494  1496 
unknown_route                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1500 
upda          166*  690   704   738=
update        291*  690=  704=  920  1535  1547  1564  1576  1631  1642  1652  1663  1673  1684  1693 
             1807 
updates       220*  296   314   325 
update_error 1560  1588  1634  1644  1655  1665  1676  1687  1720  1829 
update_req    294 
used          141*  465  1173  1180  1197  1208  1403  1618  1758  1767  1868 
vc             96*
vcatc          48*
vcatc_need_buf                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              125* 1776 
vcatc_state   178* 1328= 1333= 1386= 1407  1505  1610  1613= 1714  1747= 1768  1773= 1776= 1790= 1797 
             1798= 1809  1813= 1818  1820= 1860=
vca_route    1896  1907  1921  1927 
vca_route1   1912 
vcc_vch_ltime                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1453  1783  1799 
vcc_vch_stime                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1455  1772  1789 
vcetable      195*
vce_e         195*
vce_l         195*
vchsem         54*  428 
\f

tsvaclst    81.01.19.   16.20.                                                    page    68

vcmat_e       194*
vcmat_l       194*
vcmtable      194*
vc_addr_l     192*
version        66* 1345 
w            1412  1415  1418  1419  1878 
wait          303   323  1412  1415  1418  1419  1878 
wait_shorttime                                                   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              126* 1773  1790 
work          208*
write_read_at                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             1608 
x             675*  679   681   687   688   689   690   691   693   701   702   703   704   705   707 
              708   709 
zero_addr     207* 1389= 1390  1519 
zone          241*
zout          241* 1292  1344  1345  1346  1797 
\f

tsvaclst    81.01.19.   16.20.                                                    page    69

AND               11
ARRAY              9
BEGIN            146
CASE              46
CONST              3
DIV                2
DO                67
ELSE              38
END              206
FORWARD            1
FUNCTION           4
IF                70
MOD                6
NIL                7
NOT               12
OF                58
OR                 3
OTHERWISE         35
PACKED             5
PROCEDURE         21
RECORD            14
REPEAT             1
THEN              70
TYPE               3
UNTIL              1
VAR               19
WHILE              4
WITH              23
\f

srs9  1981.01.19  16.22
 tsvac program
81.01.19.      16.22.                         pascal80     version 1980.12.16


   name        headline beginline endline  appetite(words)

   update         291       294     305  :       7
   book           307       311     331  :       7
   get_adr_code   336       340     349  :       8
   get_net_addr   353       357     366  :       8
   get_atts_ind   370       374     383  :       8
   unknown_buf    387       390     402  :       9
   return_buf     405       408     419  :      13
   send_to_vch    422       425     429  :       4
   restart_cloc   431       433     440  :       9
   get_listen_b   442       446     457  :       4
   save_listen_   461       464     468  :       4
   calltest       533       557     557  :       2
   build_same_t   560       562     568  :      12
   build_serial   571       573     587  :      15
   build_a_poll   591       594     618  :      12
   build_a_lett   621       623     647  :      15
   build_line_d   655       665     669  :      10
   build_an_lbu   675       679     713  :      11
   demand_lbuf    726       731     745  :       7
   fault_at_lin   747       751     787  :      19
   ok_at_line     789       791     828  :      19
   to_lam_drive   831       843     931  :      15
   from_lam_dri   934       941    1226  :      24
   lamspeak       475      1237    1339  :      25
   vcatc           65      1344    1944  :     311

 code: 4 . 656  = 12656 bytes


end of PASCAL80 compilation 

end
blocksread = 54
«eof»