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

⟦7a1d24f72⟧ TextFileVerbose

    Length: 36096 (0x8d00)
    Types: TextFileVerbose
    Names: »oplibtxt«

Derivation

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

TextFileVerbose

\f

oplibtxt    81.03.03.   16.36.                                                    page     1

   10    1           
\f

oplibtxt    81.03.03.   16.36.                                                    page     2

 1010    2            (*-------------------------- op lib -----------------------------------*)
 1020    3        PREFIX openzone;
 1030    4          PROCEDURE openzone (          (*  opens a zone for driver comm. *)
 1040    5            VAR z: zone;                  (*  the zone to be opened       *)
 1050    6            driv: ^semaphore;         (*  driver process sem          *)
 1060    7            answ: ^semaphore;         (*  answers arrives here        *)
 1070    8            bufs : integer;               (*  no of buffers               *)
 1080    9            VAR home: pool 1;             (*  ownerpool for buffers       *)
 1090   10            v1, v2, v3, v4: byte );       (*  u values in message headers *)
 1100   11            
 1110   12          CONST
 1120   13            output = 2;
 1130   14            firstbuf = 6;                (*  general driver buffer    *)
 1140   15            lastbuf = firstbuf+80-1;
 1150   16            
 1160   17          TYPE
 1170   18            buffer = RECORD              (*  for driver comm.       *)
 1180   19                     !  first,                   (*  pointer to 1st char  *)
 1190   20                     !  last,                    (*  pointer to last output char  *)
 1200   21                     !  next: integer;           (*  pointer to last+1 input char *)
 1210   22                     !  chars: ARRAY (firstbuf..lastbuf) OF char
 1220   23                     END;
 1230   24            
 1240   25          BEGIN
 1250   26    1     ! WITH z DO
 1260   27    2     !   BEGIN
 1270   28    3     !   ! driver:= driv;
 1280   29    4     !   ! answer:= answ;
 1290   30    5     !   ! u2val := v2;
 1300   31    6     !   ! state := 0;
 1310   32    7     !   ! readstate:= -1;
 1320   33    8     !   ! nextp:= firstbuf;
 1330   34    9     !   ! lastpos:= lastbuf;
 1340   35   10     !   ! 
 1350   36   11     !   ! FOR bufs:= bufs DOWNTO 1 DO
 1360   37   12     !   !   BEGIN
 1370   38   13     !   !   ! alloc ( cur, home, answer^);
 1380   39   14     !   !   ! cur^.u1:= v1;
 1390   40   15     !   !   ! cur^.u2:= 0;
 1400   41   16     !   !   ! cur^.u3:= v3;
 1410   42   17     !   !   ! cur^.u4:= v4;
 1420   43   18     !   !   ! LOCK cur AS buf: buffer DO  WITH buf DO
 1430   44   19     !   !   !     BEGIN
 1440   45   20     !   !   !     ! first:= firstbuf;
 1450   46   21     !   !   !     ! last:= lastbuf;
 1460   47   22     !   !   !     ! next:= first
\f

oplibtxt    81.03.03.   16.36.                                                    page     3

 1470   48   23     !   !   !     END;
 1480   49   24     !   !   ! signal ( cur, free )
 1490   50   25     !   !   END
 1500   51   26     !   END
 1510   52   27     END ; (*  of openzone  *)
 1520   53          
 1530   54           
\f

oplibtxt    81.03.03.   16.36.                                                    page     4

 2010   55        PREFIX openopzone;
 2020   56          PROCEDURE openopzone (          (*  opens a zone for operator comm. *)
 2030   57            VAR z: zone;                  (*  the zone to be opened       *)
 2040   58            driv: ^semaphore;         (*  driver process sem          *)
 2050   59            answ: ^semaphore;         (*  answers arrives here        *)
 2060   60            bufs : integer;               (*  no of buffers               *)
 2070   61            VAR home: pool 1;             (*  ownerpool for buffers       *)
 2080   62            v1, v2, v3, v4: byte );       (*  u values in message headers *)
 2090   63            
 2100   64          CONST
 2110   65            output = 2;
 2120   66            firstbuf = 6+alfalength;                (*  operator buffer    *)
 2130   67            lastbuf = firstbuf+80-1;
 2140   68            
 2150   69          TYPE
 2160   70            opbuffer = RECORD              (*  for operator comm.       *)
 2170   71                       !  first,                   (*  pointer to 1st char  *)
 2180   72                       !  last,                    (*  pointer to last output char  *)
 2190   73                       !  next: integer;           (*  pointer to last+1 input char *)
 2200   74                       !  name: alfa;              (*  process inc name             *)
 2210   75                       !  chars: ARRAY (firstbuf..lastbuf) OF char
 2220   76                       END;
 2230   77            
 2240   78          BEGIN
 2250   79    1     ! WITH z DO
 2260   80    2     !   BEGIN
 2270   81    3     !   ! driver:= driv;
 2280   82    4     !   ! answer:= answ;
 2290   83    5     !   ! u2val := v2;
 2300   84    6     !   ! state := 0;
 2310   85    7     !   ! readstate:= -1;
 2320   86    8     !   ! nextp:= firstbuf;
 2330   87    9     !   ! lastpos:= lastbuf;
 2340   88   10     !   ! 
 2350   89   11     !   ! FOR bufs:= bufs DOWNTO 1 DO
 2360   90   12     !   !   BEGIN
 2370   91   13     !   !   ! alloc ( cur, home, answer^);
 2380   92   14     !   !   ! cur^.u1:= v1;
 2390   93   15     !   !   ! cur^.u2:= 0;
 2400   94   16     !   !   ! cur^.u3:= v3;
 2410   95   17     !   !   ! cur^.u4:= v4;
 2420   96   18     !   !   ! LOCK cur AS buf: opbuffer DO  WITH buf DO
 2430   97   19     !   !   !     BEGIN
 2440   98   20     !   !   !     ! name:= own.incname;
 2450   99   21     !   !   !     ! first:= firstbuf;
 2460  100   22     !   !   !     ! last:= lastbuf;
\f

oplibtxt    81.03.03.   16.36.                                                    page     5

 2470  101   23     !   !   !     ! next:= first
 2480  102   24     !   !   !     END;
 2490  103   25     !   !   ! signal ( cur, free )
 2500  104   26     !   !   END
 2510  105   27     !   END
 2520  106   28     END ; (*  of openopzone  *)
 2530  107          
 2540  108           
\f

oplibtxt    81.03.03.   16.36.                                                    page     6

 3010  109        PREFIX outend;
 3020  110          PROCEDURE outend (              (*  sends outputbuffer to driver  *)
 3030  111            VAR z: zone        );           (*  specifies the document     *)
 3040  112            
 3050  113          TYPE
 3060  114            zonebuffer = RECORD
 3070  115                         !  first, last, next: integer;
 3080  116                         !    (*  the rest is silence here    *)
 3090  117                         END;
 3100  118            
 3110  119          BEGIN
 3120  120    1     ! WITH z DO
 3130  121    2     !   IF NOT nil ( cur) THEN
 3140  122    3     !     BEGIN
 3150  123    4     !     ! LOCK cur AS buf: zonebuffer DO  buf.last:= nextp-1;
 3160  124    5     !     ! cur^.u2:= u2val;
 3170  125    6     !     ! signal ( cur, driver^)
 3180  126    7     !     END
 3190  127    8     END ; (*  of outend  *)
 3200  128          
 3210  129           
\f

oplibtxt    81.03.03.   16.36.                                                    page     7

 4010  130        PREFIX outchar;
 4020  131          PROCEDURE outchar (                (*  writes 1 char in zone z  *)
 4030  132            VAR z: zone;                     (*  specifies the document  *)
 4040  133            t: char           );             (*  character to be written *)
 4050  134            
 4060  135          CONST
 4070  136            opsize = 3+ (alfalength+80) DIV 2;
 4080  137            
 4090  138          TYPE
 4100  139            zonebuffer = RECORD
 4110  140                         !  first, last, next: integer;
 4120  141                         !  chars: ARRAY (6..6+80-1) OF char
 4130  142                         END;
 4140  143            opbuffer = RECORD
 4150  144                       !  first, last, next: integer;
 4160  145                       !  name: alfa;
 4170  146                       !  chars: ARRAY (6+alfalength..6+alfalength+80-1) OF char
 4180  147                       END;
 4190  148            
 4200  149          BEGIN
 4210  150    1     ! WITH z DO
 4220  151    2     !   BEGIN
 4230  152    3     !   ! IF nil ( cur) THEN        (*  get a buffer  *)
 4240  153    4     !   !   BEGIN
 4250  154    5     !   !   ! wait ( cur, free);
 4260  155    6     !   !   ! state:= cur^.u2;
 4270  156    7     !   !   ! LOCK cur AS buf: zonebuffer DO  nextp:= buf.first;
 4280  157    8     !   !   END;
 4290  158    9     !   ! IF cur^.size >= opsize THEN
 4300  159   10     !   !   LOCK cur AS buf: opbuffer DO buf.chars(nextp):= t
 4310  160   11     !   !   ELSE
 4320  161   12     !   !     LOCK cur AS buf: zonebuffer DO buf.chars(nextp):= t;
 4330  162   13     !   ! nextp:= nextp+1;
 4340  163   14     !   ! IF nextp > lastpos THEN outend ( z)
 4350  164   15     !   END
 4360  165   16     END ; (*  of outchar  *)
 4370  166          
 4380  167           
\f

oplibtxt    81.03.03.   16.36.                                                    page     8

 5010  168        PREFIX outtext;
 5020  169          PROCEDURE outtext (                 (*  writes text on z  *)
 5030  170            VAR z: zone;                        (*  specifies the document  *)
 5040  171            text: alfa         );               (*  text to be written
 5050  172                                                # works as textstop         *)
 5060  173            
 5070  174          VAR
 5080  175            i: byte:= 1;
 5090  176            
 5100  177          BEGIN
 5110  178    1     ! WHILE text(i) <> "#" DO
 5120  179    2     !   BEGIN
 5130  180    3     !   ! outchar ( z, text(i));
 5140  181    4     !   ! IF i = alfalength THEN text(i):= "#"  ELSE i:= i+1
 5150  182    5     !   END
 5160  183    6     END ; (*  of outtext  *)
 5170  184          
 5180  185           
\f

oplibtxt    81.03.03.   16.36.                                                    page     9

 6010  186        PREFIX outfill;
 6020  187          PROCEDURE outfill (                (*  repeated outchar    *)
 6030  188            VAR z: zone;                       (*  specifies the document  *)
 6040  189            filler: char;                      (*  character to be written *)
 6050  190            rep: integer     );                (*  repeat counter          *)
 6060  191            
 6070  192          BEGIN
 6080  193    1     ! 
 6090  194    2     ! FOR rep:= rep DOWNTO 1 DO outchar ( z, filler)
 6100  195    3     !   
 6110  196    4     END ; (*  of outfill  *)
 6120  197          
 6130  198           
\f

oplibtxt    81.03.03.   16.36.                                                    page    10

 7010  199        PREFIX outnumber;
 7020  200          PROCEDURE outnumber (              (*  write an integer as decimal  *)
 7030  201            VAR z: zone;                       (*  specifies the document       *)
 7040  202            num: integer;                      (*  the integer                  *)
 7050  203            pos: integer      );               (*  no of writepositions         *)
 7060  204            
 7070  205              (*
 7080  206              pos may give some spaces before the number, but all
 7090  207              digits are written.
 7100  208              *)
 7110  209            
 7120  210          VAR
 7130  211            neg: boolean;
 7140  212            i: byte:= 1;
 7150  213            digits: ARRAY (1..5) OF char;
 7160  214            
 7170  215          BEGIN
 7180  216    1     ! IF num = -32768 THEN
 7190  217    2     !   BEGIN
 7200  218    3     !   ! outfill ( z, sp, pos-6);
 7210  219    4     !   ! outtext ( z, "-32768#     ")
 7220  220    5     !   END
 7230  221    6     ! ELSE
 7240  222    7     !   BEGIN
 7250  223    8     !   ! neg:= num < 0;
 7260  224    9     !   ! IF neg THEN
 7270  225   10     !   !   BEGIN
 7280  226   11     !   !   ! pos:= pos-1;
 7290  227   12     !   !   ! num:= -num
 7300  228   13     !   !   END;
 7310  229   14     !   ! 
 7320  230   15     !   ! REPEAT
 7330  231   16     !   ! ! digits(i):= chr ( num MOD 10 + ord("0"));
 7340  232   17     !   ! ! num:= num DIV 10;
 7350  233   18     !   ! ! i:= i+1
 7360  234   19     !   ! UNTIL num = 0;
 7370  235   20     !   ! 
 7380  236   21     !   ! outfill ( z, sp, pos-i+1);
 7390  237   22     !   ! IF neg THEN outchar ( z, "-");
 7400  238   23     !   ! FOR i:= i-1 DOWNTO 1 DO outchar ( z, digits(i))
 7410  239   24     !   END
 7420  240   25     END ; (*  of outnumber  *)
 7430  241          
 7440  242           
\f

oplibtxt    81.03.03.   16.36.                                                    page    11

 8010  243        PREFIX outhex;
 8020  244          PROCEDURE outhex (          (*  writes an integer as hexadecimal  *)
 8030  245            VAR z: zone;                (*  specifies the document    *)
 8040  246            num: integer;               (*  number to be written      *)
 8050  247            pos: integer    );          (*  write positions           *)
 8060  248            
 8070  249          TYPE
 8080  250            table = ARRAY (0..15) OF char;
 8090  251            
 8100  252          CONST
 8110  253            hextab = table ("0","1","2","3","4","5","6","7",
 8120  254                            "8","9","a","b","c","d","e","f"  );
 8130  255            
 8140  256          VAR
 8150  257            bit0: byte:= 0;
 8160  258            
 8170  259          BEGIN
 8180  260    1     ! IF num < 0 THEN
 8190  261    2     !   BEGIN
 8200  262    3     !   ! bit0:= 8;
 8210  263    4     !   ! num:= num - (-32768);
 8220  264    5     !   END;
 8230  265    6     ! outfill ( z, sp, pos-4);
 8240  266    7     ! outchar ( z, hextab(bit0+num DIV (16*16*16)));
 8250  267    8     ! outchar ( z, hextab(num DIV (16*16) MOD 16));
 8260  268    9     ! outchar ( z, hextab(num DIV 16      MOD 16));
 8270  269   10     ! outchar ( z, hextab(num             MOD 16));
 8280  270   11     END ; (*  of outhex  *)
 8290  271          
 8300  272           
\f

oplibtxt    81.03.03.   16.36.                                                    page    12

 9010  273        PREFIX opin;
 9020  274          PROCEDURE opin ( VAR z: zone);         (*  request input  *)
 9030  275            
 9040  276          VAR
 9050  277            msg: reference;
 9060  278            
 9070  279          BEGIN
 9080  280    1     ! WITH z DO
 9090  281    2     !   IF open ( free) THEN
 9100  282    3     !     BEGIN
 9110  283    4     !     ! wait ( msg, free);
 9120  284    5     !     ! msg^.u2:= u2val;
 9130  285    6     !     ! signal ( msg, driver^)
 9140  286    7     !     END
 9150  287    8     END ; (*  of opin  *)
 9160  288          
 9170  289           
\f

oplibtxt    81.03.03.   16.36.                                                    page    13

10010  290        PREFIX opanswer;
10020  291          PROCEDURE opanswer (         (*  transfers a message to zone z  *)
10030  292            VAR msg: reference;          (*  a message with operator input  *)
10040  293            VAR z: zone          );      (*  an input zone                  *)
10050  294            
10060  295          BEGIN
10070  296    1     ! 
10080  297    2     ! signal ( msg, z.dataready)
10090  298    3     ! 
10100  299    4     END ; (*  of opanswer  *)
10110  300          
10120  301           
\f

oplibtxt    81.03.03.   16.36.                                                    page    14

11010  302        PREFIX optest;
11020  303          FUNCTION optest ( VAR z: zone ): boolean;
11030  304              (*
11040  305              optest is true if the zone has some data ready.
11050  306              i. e. opwait will not wait.
11060  307              *)
11070  308            
11080  309          BEGIN
11090  310    1     ! 
11100  311    2     ! optest := open ( z.dataready)
11110  312    3     ! 
11120  313    4     END ; (*  of optest  *)
11130  314          
11140  315           
\f

oplibtxt    81.03.03.   16.36.                                                    page    15

12010  316        PREFIX opwait;
12020  317          PROCEDURE opwait (            (*  waits for input to z  *)
12030  318            VAR z: zone;                  (*  specifies the document  *)
12040  319            VAR inputpool: pool 1 );      (*  input buffer pool       *)
12050  320            
12060  321          CONST
12070  322            read = 1;
12080  323            
12090  324          TYPE
12100  325            zonebuffer = RECORD
12110  326                         !  first, last, next: integer
12120  327                         END;
12130  328            
12140  329          VAR
12150  330            n: integer:= 0;     (*  msg counter  *)
12160  331            operatorinput: boolean;
12170  332            
12180  333          BEGIN
12190  334    1     ! WITH z DO
12200  335    2     !   IF nil ( cur) THEN
12210  336    3     !     BEGIN
12220  337    4     !     ! IF NOT open ( dataready) THEN      (*  wait for input answer  *)
12230  338    5     !     !   BEGIN
12240  339    6     !     !   ! REPEAT
12250  340    7     !     !   ! ! wait ( cur, answer^);
12260  341    8     !     !   ! ! operatorinput:= ownertest ( inputpool, cur) AND ( cur^.u1 MOD 8 = read);
12270  342    9     !     !   ! ! signal ( cur, dataready);
12280  343   10     !     !   ! ! n:= n+1
12290  344   11     !     !   ! UNTIL operatorinput;
12300  345   12     !     !   ! 
12310  346   13     !     !   ! FOR n:= n DOWNTO 2 DO       (*  send other messages back into queue  *)
12320  347   14     !     !   !   BEGIN
12330  348   15     !     !   !   ! wait ( cur, dataready);
12340  349   16     !     !   !   ! signal ( cur, answer^);
12350  350   17     !     !   !   END;
12360  351   18     !     !   END;
12370  352   19     !     ! wait ( cur, dataready);
12380  353   20     !     ! state:= cur^.u2;
12390  354   21     !     ! LOCK cur AS buf: zonebuffer DO nextp:= buf.first
12400  355   22     !     END
12410  356   23     END ; (*  of opwait  *)
12420  357          
12430  358           
\f

oplibtxt    81.03.03.   16.36.                                                    page    16

13010  359        PREFIX readchar;
13020  360          PROCEDURE readchar (             (*  reads next character  *)
13030  361            VAR z: zone;                     (*  specifies the document    *)
13040  362            VAR t: char         );           (*  delivered character or nl  *)
13050  363            
13060  364          CONST
13070  365            opsize = 3 + (alfalength+80) DIV 2;
13080  366            
13090  367          TYPE
13100  368            zonebuffer = RECORD
13110  369                         !  first, last, next: integer;
13120  370                         !  chars: ARRAY (6..6+80-1) OF char
13130  371                         END;
13140  372            opbuffer = RECORD
13150  373                       !  first, last, next: integer;
13160  374                       !  name: alfa;
13170  375                       !  chars: ARRAY (6+alfalength..6+alfalength+80-1) OF char
13180  376                       END;
13190  377            
13200  378          BEGIN
13210  379    1     ! t:= nl;
13220  380    2     ! WITH z DO
13230  381    3     !   IF nil ( cur) THEN  readstate:= -1
13240  382    4     !   ELSE
13250  383    5     !     BEGIN
13260  384    6     !     ! readstate:= 0;
13270  385    7     !     ! IF cur^.size >= opsize THEN         (*  operator buffer  *)
13280  386    8     !     !   LOCK cur AS buf: opbuffer DO
13290  387    9     !     !     BEGIN
13300  388   10     !     !     ! IF nextp < buf.next THEN
13310  389   11     !     !     !   t:= buf.chars(nextp)
13320  390   12     !     !     ! ELSE  readstate:= -1
13330  391   13     !     !     END
13340  392   14     !     !   ELSE
13350  393   15     !     !     LOCK cur AS buf: zonebuffer DO
13360  394   16     !     !       IF nextp < buf.next THEN
13370  395   17     !     !         t:= buf.chars(nextp)
13380  396   18     !     !       ELSE  readstate:= -1;
13390  397   19     !     ! 
13400  398   20     !     ! IF readstate = -1 THEN signal ( cur, free)
13410  399   21     !     ! ELSE  nextp:= nextp+1
13420  400   22     !     END
13430  401   23     END ; (*  of readchar  *)
13440  402          
13450  403           
\f

oplibtxt    81.03.03.   16.36.                                                    page    17

14010  404        PREFIX readinteger;
14020  405          PROCEDURE readinteger (           (*  reads a decimal number   *)
14030  406            VAR z: zone;                      (*  specifies the document    *)
14040  407            VAR num: integer       );         (*  value read or 0           *)
14050  408              (*
14060  409              syntax:  (0..n)*(not digit), (0..1)*sign, (1..5)*digit
14070  410              z.readstate = 0 if value assigned.
14080  411              *)
14090  412          CONST
14100  413            max = 3276;                (*  max integer div 10  *)
14110  414            digits = (. "0".."9" .);
14120  415            wanted = (. "0".."9", nl .);
14130  416            
14140  417          VAR
14150  418            prev, t: char:= sp;
14160  419            d: byte:= 0;
14170  420            sign: integer;
14180  421            
14190  422          BEGIN
14200  423    1     ! num:= 0;
14210  424    2     ! 
14220  425    3     ! REPEAT
14230  426    4     ! ! prev:= t;
14240  427    5     ! ! readchar ( z, t)
14250  428    6     ! UNTIL t IN wanted;
14260  429    7     ! 
14270  430    8     ! IF t <> nl THEN        (*  a number is met   *)
14280  431    9     !   BEGIN
14290  432   10     !   ! IF prev = "-" THEN sign:= -1 ELSE sign:= +1;
14300  433   11     !   ! 
14310  434   12     !   ! WHILE ( num < max ) AND ( t IN digits ) DO
14320  435   13     !   !   BEGIN
14330  436   14     !   !   ! num:= num*10 - ord("0") + ord( t);
14340  437   15     !   !   ! readchar ( z, t)
14350  438   16     !   !   END;
14360  439   17     !   ! 
14370  440   18     !   ! IF ( num <= max ) AND ( t IN digits ) THEN          (*  include last digit  *)
14380  441   19     !   !   BEGIN
14390  442   20     !   !   ! d:= ord ( t) - ord("0");
14400  443   21     !   !   ! IF 2*d < 16-sign THEN     (*  accept  *)
14410  444   22     !   !   !   BEGIN
14420  445   23     !   !   !   ! num:= num*10;
14430  446   24     !   !   !   ! z.nextp:= z.nextp+1
14440  447   25     !   !   !   END
14450  448   26     !   !   ! ELSE  d:= 0
14460  449   27     !   !   END;
\f

oplibtxt    81.03.03.   16.36.                                                    page    18

14470  450   28     !   ! 
14480  451   29     !   ! num:= sign*num + sign*d;
14490  452   30     !   ! z.readstate:= 0;
14500  453   31     !   ! z.nextp:= z.nextp-1
14510  454   32     !   END
14520  455   33     END ; (*  of readinteger  *)
14530  456          
14540  457           
\f

oplibtxt    81.03.03.   16.36.                                                    page    19

15010  458        PREFIX readhex;
15020  459          PROCEDURE readhex (             (*  reads a hexadecimal number  *)
15030  460            VAR z: zone;                    (*  specifies the document      *)
15040  461            VAR num: integer    );          (*  value read or 0             *)
15050  462            
15060  463              (*
15070  464              syntax:  (0..n)*(not hexdigit), (1..4)*hexdigit
15080  465              z.readstate = 0 if value assigned.
15090  466              *)
15100  467            
15110  468          CONST
15120  469            hexdigits =  (. "0".."9", "a".."f" .);
15130  470            wanted = (. nl, "0".."9", "a".."f" .);
15140  471            
15150  472          VAR
15160  473            t: char;
15170  474            a, b, c, d: byte:= 0;      (*  4 digits  *)
15180  475            
15190  476          BEGIN
15200  477    1     ! num:= 0;
15210  478    2     ! 
15220  479    3     ! REPEAT readchar ( z, t) UNTIL t IN wanted;
15230  480    4     ! 
15240  481    5     ! IF t <> nl THEN               (*  a number is met   *)
15250  482    6     !   BEGIN
15260  483    7     !   ! 
15270  484    8     !   ! WHILE ( a = 0 )  AND ( t IN hexdigits ) DO
15280  485    9     !   !   BEGIN
15290  486   10     !   !   ! a:= b;   b:= c;   c:= d;
15300  487   11     !   !   ! IF ord ( t) <= ord ("9") THEN
15310  488   12     !   !   !   d:= ord ( t) - ord ("0")  ELSE
15320  489   13     !   !   !   d:= ord ( t) - ord ("a") + 10;
15330  490   14     !   !   ! readchar ( z, t)
15340  491   15     !   !   END;
15350  492   16     !   ! 
15360  493   17     !   ! num:= ((((a+8) MOD 16 -8)*16+b)*16+c)*16+d;
15370  494   18     !   ! z.readstate:= 0;
15380  495   19     !   ! z.nextp:= z.nextp-1
15390  496   20     !   END
15400  497   21     END ; (*  of readhex  *)
15410  498          
15420  499           
\f

oplibtxt    81.03.03.   16.36.                                                    page    20

16010  500        PREFIX readname;
16020  501          PROCEDURE readname (          (*  reads a name from z   *)
16030  502            VAR z: zone;                  (*  specifies the document   *)
16040  503            VAR name: alfa       );       (*  read name                *)
16050  504            
16060  505              (*
16070  506              syntax:  (0..n)*sp, 1*letter, (0..11)*alfanum
16080  507              readstate = 0 if name assigned.
16090  508              you may initialize name before readname.
16100  509              *)
16110  510            
16120  511          CONST
16130  512            letters = (. "A".."]", "a".."}" .);
16140  513            alfanum = (. "A".."]", "a".."}", "0".."9" .);
16150  514            
16160  515          VAR
16170  516            t: char;
16180  517            i: byte:= 0;
16190  518            
16200  519          BEGIN
16210  520    1     ! 
16220  521    2     ! REPEAT  readchar ( z, t) UNTIL t <> sp;
16230  522    3     ! 
16240  523    4     ! IF t IN letters THEN        (*  read the name  *)
16250  524    5     !   BEGIN
16260  525    6     !   ! 
16270  526    7     !   ! REPEAT
16280  527    8     !   ! ! i:= i+1;
16290  528    9     !   ! ! name(i):= t;
16300  529   10     !   ! ! readchar ( z, t);
16310  530   11     !   ! UNTIL ( i >= alfalength ) OR NOT ( t IN alfanum );
16320  531   12     !   ! 
16330  532   13     !   ! z.readstate:= 0;
16340  533   14     !   ! z.nextp:= z.nextp-1;
16350  534   15     !   END
16360  535   16     ! ELSE
16370  536   17     !   IF z.readstate = 0 THEN  z.readstate:= 1
16380  537   18     !     
16390  538   19     END . (*  of readname  *)
16400  539          
16410  540            (*------------------------- end of oplib -----------------------------*)
16420  541          
\f

oplibtxt    81.03.03.   16.36.                                                    page    21

           0   31    40    84    93   223   234   250*  257*  260   330*  384   419*  423   448   452 
              474*  477   484   494   517*  532   536 
           1    9*   15*   32    36    61*   67*   85    89   123   141*  146*  162   175*  181   194 
              212*  213*  226   233   236   238   238   319*  322*  343   370*  375*  381   390   396 
              398   399   432   432   446   453   495   527   533   536 
           2   13*   65*  136*  346   365*  443 
           3  136*  365*
           4  265 
           5  213*
           6   14*   66*  141*  141*  146*  146*  218   370*  370*  375*  375*
           8  262   341   493   493 
          10  231   232   436   445   489 
          15  250*
          16  266   266   266   267   267   267   268   268   269   443   493   493   493   493 
          80   15*   67*  136*  141*  146*  365*  370*  375*
        3276  413*
       32768  216   263 
a             474*  484   486=  493 
alfa           74*  145*  171*  374*  503*
alfalength     66*  136*  146*  146*  181   365*  375*  375*  530 
alfanum       513*  530 
alloc          38    91 
answ            7*   29    59*   82 
answer         29=   38    82=   91   340   349 
as             43:   96:  123:  156:  159:  161:  354:  386:  393:
b             474*  486   486=  493 
bit0          257*  262=  266 
boolean       211*  303*  331*
buf            43:   43    96:   96   123:  123   156:  156   159:  159   161:  161   354:  354   386:
              388   389   393:  394   395 
buffer         18*   43 
bufs            8*   36=   36    60*   89=   89 
byte           10*   62*  175*  212*  257*  419*  474*  517*
c             474*  486   486=  493 
char           22*   75*  133*  141*  146*  189*  213*  250*  362*  370*  375*  418*  473*  516*
chars          22*   75*  141*  146*  159=  161=  370*  375*  389   395 
chr           231 
cur            38    39    40    41    42    43:   49    91    92    93    94    95    96:  103   121 
              123:  124   125   152   154   155   156:  158   159:  161:  335   340   341   341   342 
              348   349   352   353   354:  381   385   386:  393:  398 
d             419*  442=  443   448=  451   474*  486   488=  489=  493 
dataready     297   311   337   342   348   352 
digits        213*  231=  238   414*  434   440 
driv            6*   28    58*   81 
\f

oplibtxt    81.03.03.   16.36.                                                    page    22

driver         28=   81=  125   285 
filler        189*  194 
first          19*   45=   47    71*   99=  101   115*  140*  144*  156   326*  354   369*  373*
firstbuf       14*   15*   22*   33    45    66*   67*   75*   86    99 
free           49   103   154   281   283   398 
hexdigits     469*  484 
hextab        253*  266   267   268   269 
home            9*   38    61*   91 
i             175*  178   180   181   181   181=  181   212*  231   233=  233   236   238=  238   238 
              517*  527=  527   528   530 
incname        98 
inputpool     319*  341 
integer         8*   21*   60*   73*  115*  140*  144*  190*  202*  203*  246*  247*  326*  330*  369*
              373*  407*  420*  461*
last           20*   46=   72*  100=  115*  123=  140*  144*  326*  369*  373*
lastbuf        15*   22*   34    46    67*   75*   87   100 
lastpos        34=   87=  163 
letters       512*  523 
lock           43:   96:  123:  156:  159:  161:  354:  386:  393:
max           413*  434   440 
msg           277*  283   284   285   292*  297 
n             330*  343=  343   346=  346 
name           74*   98=  145*  374*  503*  528=
neg           211*  223=  224   237 
next           21*   47=   73*  101=  115*  140*  144*  326*  369*  373*  388   394 
nextp          33=   86=  123   156=  159   161   162=  162   163   354=  388   389   394   395   399=
              399   446=  446   453=  453   495=  495   533=  533 
nl            379   415*  430   470*  481 
num           202*  216   223   227=  227   231   232=  232   234   246*  260   263=  263   266   267 
              268   269   407*  423=  434   436=  436   440   445=  445   451=  451   461*  477=  493=
opanswer      290*  291*
opbuffer       70*   96   143*  159   372*  386 
open          281   311   337 
openopzone     55*   56*
openzone        3*    4*
operatorinput                                                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              331*  341=  344 
opin          273*  274*
opsize        136*  158   365*  385 
optest        302*  303*  311=
opwait        316*  317*
ord           231   436   436   442   442   487   487   488   488   489   489 
outchar       130*  131*  180   194   237   238   266   267   268   269 
outend        109*  110*  163 
\f

oplibtxt    81.03.03.   16.36.                                                    page    23

outfill       186*  187*  218   236   265 
outhex        243*  244*
outnumber     199*  200*
output         13*   65*
outtext       168*  169*  219 
own            98 
ownertest     341 
pool            9*   61*  319*
pos           203*  218   226=  226   236   247*  265 
prefix          3*   55*  109*  130*  168*  186*  199*  243*  273*  290*  302*  316*  359*  404*  458*
              500*
prev          418*  426=  432 
read          322*  341 
readchar      359*  360*  427   437   479   490   521   529 
readhex       458*  459*
readinteger   404*  405*
readname      500*  501*
readstate      32=   85=  381=  384=  390=  396=  398   452=  494=  532=  536   536=
reference     277*  292*
rep           190*  194=  194 
semaphore       6*    7*   58*   59*
sign          420*  432=  432=  443   451   451 
signal         49   103   125   285   297   342   349   398 
size          158   385 
sp            218   236   265   418*  521 
state          31=   84=  155=  353=
t             133*  159   161   362*  379=  389=  395=  418*  426   427   428   430   434   436   437 
              440   442   473*  479   479   481   484   487   488   489   490   516*  521   521   523 
              528   529   530 
table         250*  253*
text          171*  178   180   181=
u1             39=   92=  341 
u2             40=   93=  124=  155   284=  353 
u2val          30=   83=  124   284 
u3             41=   94=
u4             42=   95=
v1             10*   39    62*   92 
v2             10*   30    62*   83 
v3             10*   41    62*   94 
v4             10*   42    62*   95 
wait          154   283   340   348   352 
wanted        415*  428   470*  479 
z               5*   26    57*   79   111*  120   132*  150   163   170*  180   188*  194   201*  218 
              219   236   237   238   245*  265   266   267   268   269   274*  280   293*  297   303*
              311   318*  334   361*  380   406*  427   437   446   446   452   453   453   460*  479 
              490   494   495   495   502*  521   529   532   533   533   536   536 
\f

oplibtxt    81.03.03.   16.36.                                                    page    24

zone            5*   57*  111*  132*  170*  188*  201*  245*  274*  293*  303*  318*  361*  406*  460*
              502*
zonebuffer    114*  123   139*  156   161   325*  354   368*  393 
\f

oplibtxt    81.03.03.   16.36.                                                    page    25

AND                4
ARRAY              8
BEGIN             43
CONST              9
DIV                6
DO                26
DOWNTO             5
ELSE              12
END               51
FOR                5
FUNCTION           1
IF                25
IN                 7
MOD                6
NIL                4
NOT                3
OF                 8
OR                 1
PROCEDURE         15
RECORD             8
REPEAT             6
THEN              25
TYPE               7
UNTIL              6
VAR               32
WHILE              3
WITH               9
 op lib
81.03.03.      16.36.                         pascal80     version 1981.02.09


   name        headline beginline endline  appetite(words)

   openzone        11        29      53  :      19
   openopzone      63        82     107  :      19
   outend         112       123     128  :       8
   outchar        134       154     166  :      12
   outtext        172       179     184  :      16
   outfill        191       195     195  :      14
   outnumber      204       218     241  :      23
   outhex         248       262     271  :      16
   opin           275       283     288  :      10
   opanswer       294       298     298  :       4
   optest         304       314     312  :       7
   opwait         320       337     357  :      19
   readchar       363       380     402  :      11
   readinteger    408       424     456  :      16
   readhex        462       478     498  :      16
   readname       504       522     539  :      13

 code: 0 . 276  = 276 bytes


end of PASCAL80 compilation 

end
blocksread = 52
«eof»