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

⟦1f1ccea3d⟧ TextFileVerbose

    Length: 49920 (0xc300)
    Types: TextFileVerbose
    Names: »feaosjob2«

Derivation

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

TextFileVerbose

\f





\f


PROCESS feopsys( VAR semvector: system_vector;
VAR evavector: appl_vector );

(***************************************************
*
* function:    the test module is used to initialise buffers,
*              signal them to semaphores, and to write their
*              contents, when they have been handled by another
*
* externals:   none
*
* var params:  none
*
* semaphores:  the module sends to the system semaphore
*              "operatorsem".
*
*
* programmed may 1980 by wib and stb
*
***************************************************)

CONST
version = "vers  4.18 /";



\f


CONST
opbufsize = 80; (* no. of bytes in buffers to the operator module *)
(***   bufs   ***)
messbufsize= 64; (*words*)
testbufsize= 120;
maxbufsize= 120;
minbufsize=  16;
noofmodules= 11;
noofsemaphores= ts_sem_total;
pu= 0; (* processing unit number *)
pr= -1; (* timeslicing priority *)

valparam= "param val ";
noparam= " no param ";
alreadyexists= " already exists     ";
doesntexist= " doesn't exist      ";
illegalno= "illegal no";
createerror= "error in createcall ";

linelength= 80;
firstindex= 6 + alfalength;
lastindex= firstindex + (linelength - 1);
ok= 0; (* result from operator *)


TYPE

(*---- for alarmenv later  ------*)

paxpooltype = pool no_pax_bufs OF min_rut_mess;

opbuftype=
RECORD
first,
last,
next: integer;
name: alfa;
data: ARRAY (firstindex..lastindex) OF char
END;

(***   bufs   ***)
messbuftype= ARRAY (1..messbufsize) OF integer;
testbuftype= ARRAY (1..testbufsize) OF integer;
minbuftype = ARRAY (1.. minbufsize) OF integer;
maxbuftype = ARRAY (1.. maxbufsize) OF integer;

\f


createchtype=
RECORD
controlinfo, timeout: byte
END;

atbuffer= ARRAY (0..1) OF byte;


alfa10= ARRAY (1..10) OF char;
alfa20= ARRAY (1..20) OF char;

(* type necessary to compare sempointers *)
point_rec = RECORD
a: sempointer;
END;

VAR
(*********  pools  *********)
opbufpool: pool 3 OF opbuftype;
(***   bufs   ***)
testbufpool: pool 12 OF testbuftype;
messbufpool: pool no_listen OF messbuftype;
paxbufpool : paxpooltype;

(**********  semaphores  **********)
countsem,    (* used by "t"-command *)
wsem,        (* buffers written by the operatormodule is
returned here *)
wrsem        (* buffers with content read by the operator
module is returned here *)
: semaphore;
ts_sem : ARRAY (1..ts_sem_total) OF semaphore;

(**********  references  **********)
nref,
countref,    (* used by "t"-command *)
opinref,    (* ref. to buffer from operator *)
opoutref,   (* ref. to buffer to operator *)
cur           (* ref. to current buffer *)
: reference;

(**********  pointers  **********)
opsem: sempointer;
worksem: sempointer;
sem : ts_pointer_vector;

\f


(**********  zones  **********)
z: zone;

(**********  char  **********)
command: char;   (* the first char the operator typed *)


(**********  integers  **********)
base,            (* number base for input and output *)
firstword,       (* used by "o"-command *)
i,
incharsleft,   (* no. of not yet read chars in opinbuffer *)
j,
k,
lastword,       (* used by "o"-command *)
leftbyte,       (* used by "p"-command *)
moduleno,       (* tested module *)
noofparams,     (* no. of params in operator line *)
oldbase,        (* used by the "b" command *)
rightbyte,      (* used by "p"-command *)
semno,           (* typed semaphore number *)
curbufsize,     (* in words *)
curbuftype,     (* 0 - 4 *)
st              (* storage requirements *)
: integer;

(**********  booleans  **********)
readok,         (* indicates if the last call of readinteger
yielded a result *)
testmode
: boolean;

(**********  arrays  **********)
netc_locals : netc_loc_sems;
params: ARRAY(1..50) OF integer; (* holds parameters from operator *)
sh: ARRAY(1..noofmodules) OF shadow; (* ref. to process incarn. *)

(********** param to use in create **********)
dc_addr: macroaddr := macroaddr(7,0,0);
nc_addr: macroaddr := macroaddr(7,5,0);
ts_addr: macroaddr := macroaddr(7,5,4);

(*** auxiliary to compare sempointers ***)
ap,bp : point_rec;

\f


(**********  externals **********)
PROCESS fesupervisor(
op: sempointer;
VAR input_sem, que_sem : ! ts_pointer;
VAR stream_sem, com_pool : ! sempointer;
EXTERNAL;

PROCESS streamer(
VAR input_sem, xmitter, receiver : ! ts_pointer;
retrans_max : integer;
op : sempointer);
EXTERNAL;

PROCESS timeout(
opsem: sempointer;
VAR timeoutsem: !ts_pointer;
ticklength, max: integer);
EXTERNAL;

PROCESS lam(
opsem: sempointer;
pu, level: integer;
VAR inputsem: !ts_pointer);
EXTERNAL;

PROCESS tap(
opsem: sempointer;
VAR tab_sem: !ts_pointer);
EXTERNAL;

PROCESS dtesimulator (
op_sem : sempointer;
VAR
pax_pool_sem,
dte_sem : !ts_pointer;
VAR
netc_sem,
rut_trm_sem,
rut_rec_sem : !sempointer;
dte_addr : int_pax_addr
);
EXTERNAL;

PROCESS netconnector (
global_timeout : byte;
op_sem : sempointer;
\f


VAR
pax_pool_sem,
main_sem : !ts_pointer;
local_sem_table : netc_loc_sems;
VAR
com_pool_sem,
timeout_sem,
dte_sem : !sempointer
);
EXTERNAL;

PROCESS tapdte (
op_sem : sempointer;
VAR sem : ! ts_pointer );
EXTERNAL;

PROCESS tapnet (
op_sem : sempointer;
VAR sem : !ts_pointer );
EXTERNAL;

PROCESS osif (
op_sem : sempointer;
VAR inputsem : !ts_pointer;
VAR streemsem, lamsem : !sempointer;
port : byte);
EXTERNAL;

PROCEDURE setoflowmask( oflow: boolean);
EXTERNAL;


(********** forwards **********)

PROCEDURE getparams;
FORWARD;

PROCEDURE outdecimal(int,positions: integer);
FORWARD;

PROCEDURE outinteger(int,positions: integer);
FORWARD;

PROCEDURE outstring10(text: alfa10);
FORWARD;

\f


PROCEDURE outstring12(text: alfa);
FORWARD;

PROCEDURE outstring20(text: alfa20);
FORWARD;

FUNCTION readchar: char;
FORWARD;

FUNCTION readinteger: integer;
FORWARD;

PROCEDURE repeatchar;
FORWARD;

PROCEDURE testmodeout (text: alfa20; i: integer);
FORWARD;

PROCEDURE writenl;
FORWARD;

\f


FUNCTION dte_pax_addr (i:integer): int_pax_addr;
VAR pax_adr : int_pax_addr;
BEGIN
pax_adr.net_addr := params(i);
pax_adr.reg_addr := params(i+1);
pax_adr.node_addr := params(i+2);
pax_adr.ext_addr := params(i+3);
dte_pax_addr := pax_adr;
END;

PROCEDURE make_phead (
i : integer; op_code : byte;
VAR p : format_1_packet_header );
BEGIN
WITH p DO
BEGIN
format := rut_format_1;
priority := rut_prio_0;
packet_type := rut_pack_type;
state := 0;
org := dte_pax_addr(i);
dst := dte_pax_addr(i+3);
facility := params(9);
user_field := op_code *256 + params(2);
top_of_data := 0;
END;
END;

\f


FUNCTION packmacro (
par:integer):macroaddr;
VAR
a:macroaddr;
BEGIN
a.dc_addr := params( par);
a.nc_addr := params( par+1);
a.ts_addr := params( par+2);
packmacro := a;
END;

FUNCTION packextnode (
par:integer) : ext_pax_addr;
VAR
i:integer;
a:ext_pax_addr;
BEGIN
FOR i:=1 TO 6 DO
a(i):=0;
FOR i:=0 TO 2 DO
a(7+i):=params(par+i);
FOR i:= 10 TO 14 DO
a(i) := 0;
packextnode := a;
END;

\f


PROCEDURE get_curbuftype;
BEGIN
IF cur^.size < minbufsize THEN
curbuftype:= 0 ELSE
IF cur^.size < messbufsize THEN
curbuftype:= 1 ELSE
IF cur^.size < maxbufsize THEN
curbuftype:= 2 ELSE
IF cur^.size < testbufsize THEN
curbuftype:= 3 ELSE
curbuftype:= 4;

CASE curbuftype OF
0: curbufsize:= 0;
1: curbufsize:= minbufsize;
2: curbufsize:= messbufsize;
3: curbufsize:= maxbufsize;
4: curbufsize:= testbufsize;
END;
END;

\f


PROCEDURE getinput;
(* reads input from console into opinref^ *)
BEGIN

testmodeout ("getinput called     ",0);

REPEAT
LOCK opinref AS opbuf: opbuftype DO
opbuf.next:= firstindex;
signal (opinref, opsem^);
wait (opinref, wrsem);
UNTIL opinref^.u2= ok (* 0*);

LOCK opinref AS opbuf: opbuftype DO
WITH opbuf DO
BEGIN
incharsleft:= next - first;
next:= firstindex;
END;
command:= readchar;

testmodeout ("command read:       ",ord(command));

getparams;
END (* getinput *);

\f


PROCEDURE getparams;
(* reads integer parameters *)
VAR newbase: boolean;
BEGIN
testmodeout ("getparams called    ",0);

noofparams:= 0;

IF command IN (."a","b","c","d","e","f","k","n","o","p","s","t","w","x".)
THEN
BEGIN (* change to decimal *)
oldbase:= base;
base:= 10;
newbase:= true;
END
ELSE
newbase:= false;

REPEAT
noofparams:= noofparams + 1;
params(noofparams):= readinteger;
testmodeout ("parameter read:     ",params(noofparams));
IF (noofparams=1) THEN
IF command IN (."f","p".) THEN
BEGIN (* change to old *)
base:= oldbase;
newbase:= false;
END;

UNTIL (NOT readok) OR (noofparams= 50);

noofparams:= noofparams - 1;

IF newbase THEN
(* change back to old base *)
base:= oldbase;
END (* getparams *);

\f


PROCEDURE init_proc(
index: integer;
name,
inc_name : alfa;
p    : processrec;
size,
prio : integer);
VAR
okl,
ok   : integer;
BEGIN
IF NOT nil(sh(index)) THEN
outstring20(alreadyexists) ELSE
BEGIN
IF noofparams<2 THEN st:= size;
okl:= link(name,p.processref^);
ok:= create(inc_name,p,sh(index),st);
IF ok=0 THEN
start(sh(index),prio) ELSE
BEGIN
ok:= ok*100+okl;
outstring20(createerror);
outstring12(inc_name);
outdecimal(ok,5);
writenl;
okl:= unlink(p.processref^);
END;
END;
END;

\f


PROCEDURE init_modul(index: integer);
CONST
n1 = "fesupervisor";
n2 = "streamer    ";
n3 = "osif        ";
n4 = "timeout     ";
n5 = "lam         ";
n6 = "tap         ";
n7 = "netconnector";
n8 = "dtesimulator";
n9 = "tapdte      ";
n10= "tapnet      ";
BEGIN
CASE index OF
1: (* fesup *)
init_proc(index, n1, n1,
fesupervisor( opsem,
sem(fesup_sem_no), sem(fesup_que),
sem(stream_sem_no).s, sem(netc_sem_no).s, sem(com_pool).w ),
fesup_size, fesup_pri );
2: (* streamer *)
init_proc(index, n2, n2,
streamer( sem(stream_sem_no), sem(stream_xmit),
sem(stream_rec), 5, opsem), stream_size, stream_pri);
3: (* osif *)
init_proc(index, n3, n3,
osif( opsem, sem(osif_sem_no), sem(stream_sem_no).s, 7),
osif_size, osif_pri);
4: (* timeout *)
init_proc(index, n4, n4,
timeout( opsem, sem(timeout_sem_no), time_out_unit, 40),
tim_size,tim_pri);
5: (* lam *)
init_proc(index, n5, n5,
lam( opsem, pu, 5, sem(lam_sem_no)),
lam_size, lam_pri);
6: (* tap *)
init_proc(index, n6, n6,
tap( opsem, sem(tap_sem_no)),
512, 0);
11: (* tap01 *)
init_proc(index, n6, "tap01       ",
tap ( opsem, sem(tap1_sem_no)),
512, 0);
7: (* netconnector *)
init_proc ( index, n7, n7,
\f


netconnector( glob_timeout, opsem,
sem( pax_pool),sem( netc_sem_no), netc_locals,
sem( com_pool).w,
sem( timeout_sem_no).s, sem( net_int4).s),
netc_size, netc_pri);

8: (* dtesimulator *)
init_proc ( index, n8, n8,
dtesimulator ( opsem, sem( pax_pool), sem(net_int4),
sem( netc_sem_no).s,
sem( net_int2).s, sem( net_int1).s,
dte_pax_addr(3)),
netc_size, netc_pri);
9: (* tapdte *)
init_proc ( index, n9, n9,
tapdte ( opsem, sem(tapdte_sem_no)),
512,0);
10: (* tapnet *)
init_proc ( index, n10, n10,
tapnet ( opsem, sem(tapnet_sem_no)),
512,0);



OTHERWISE
BEGIN
outdecimal(index,4);
outstring10(illegalno);
END;
END (* case *)
END;

\f


FUNCTION moduleready(moduleno: integer): boolean;
(* tests if an incarnation of the module is existing
and writes an errormessage if so *)
BEGIN
IF nil( sh( moduleno) ) THEN moduleready:=true
ELSE
BEGIN  (* module is already existing *)
outdecimal(moduleno,4);
outstring20(alreadyexists);
moduleready:=false;
END;
END (* module ready *);



\f


PROCEDURE outchar(ch:char);
(* writes ch into the output buffer *)
BEGIN
LOCK opoutref AS opbuf: opbuftype DO
WITH opbuf DO
BEGIN
last:= last + 1;
data (last):= ch;
END;
END (* outchar *);

\f


PROCEDURE outdecimal (int, positions: integer);
(* writes the integer "int" decimally into opbuf starting
at "last", which is updated accordingly *)

BEGIN
oldbase:= base;
base:= 10;
outinteger(int,positions);
base:= oldbase;
END (* outdecimal *);

\f


PROCEDURE outinteger(int,positions:integer);
(* writes the integer "int" into opbuf starting at
"last", which is updated accordingly *)
CONST
maxpos = 20; (* max number of positions in layout *)

VAR
bits: ARRAY(0..15) OF bit;
digits:ARRAY(1..maxpos) OF char;
curdigit, (* current pos. in digits-array to be filled out *)
curpos,   (* cur. pos. in the nunber being computed *)
h, i,
m, newm,
noofdig,  (* no. of digits in the resulting number *)
noofpos,  (* no. of pos. from bits-array for one number *)
res,      (* resulting number *)
used: integer;

negative, zeroes: boolean;

BEGIN
used:= 1;

(* first we initialise the digits array *)
FOR i:=1 TO maxpos DO digits(i):=sp;

IF base= 10 THEN
BEGIN
i:=maxpos;

negative:= int<0;

REPEAT
(* now we unpack the digits backwards and put them
into the digits array *)

digits(i):= chr (abs(int MOD base) + ord("0"));
int:=int DIV base;
i:=i-1;
UNTIL (i=1) OR (int=0);

IF negative THEN
BEGIN
digits(i):="-";
i:=i-1;
END;
\f



used:=maxpos-i;

IF int <> 0 THEN digits(1):= "*";
END (* if base= 10 *)

ELSE (* base= 2, 8, or 16 *)
BEGIN
(* initialise bits-array *)
IF int>=0 THEN
BEGIN
FOR i:= 15 DOWNTO 1 DO
BEGIN
bits(i):= int MOD 2;
int:= int DIV 2;
END;
bits(0):= int MOD 2;
int:= int DIV 2;
END
ELSE
(* int<0 *)
BEGIN
(* subtract abs(int) from 1111111...1 *)
FOR i:= 15 DOWNTO 1 DO
BEGIN
bits(i):= 1+(int MOD 2);
int:= int DIV 2;
END;
bits(0):= 1+(int MOD 2);
int:= int DIV 2;

(* add 1 *)
m:= 1;
FOR i:= 15 DOWNTO 1 DO
BEGIN
newm:= (bits(i)+m) DIV 2;
bits(i):= (bits(i)+m) MOD 2;
m:= newm;
END;
newm:= (bits(0)+m) DIV 2;
bits(0):= (bits(0)+m) MOD 2;
m:= newm;
END (*int<0*);

(* compute digits-array *)
CASE base OF
\f


2: BEGIN
noofpos:= 1;
noofdig:= 16;
END;

8: BEGIN
noofpos:= 3;
noofdig:= 6;
END;

16: BEGIN
noofpos:= 4;
noofdig:= 4;
END;
END (* case *);

curdigit:= maxpos -noofdig +1;

IF base= 8
THEN curpos:= 3
ELSE curpos:= 1;
res:= 0;
zeroes:= true;

FOR h:= 0 TO 15 DO
BEGIN
res:= res*2 + bits(h);
IF curpos= noofpos THEN
BEGIN (* time to fill out a pos. in digits-array *)
IF zeroes AND (res=0) THEN
BEGIN
IF curdigit=maxpos
THEN digits(curdigit):= "0"
(*else digits (curdigit):= " "*);
END
ELSE
IF res<=9
THEN digits(curdigit):= chr (res + ord ("0"))
ELSE digits(curdigit):= chr (res + ord ("7"));
IF (res<>0) AND zeroes THEN
BEGIN
zeroes:= false;
used:= maxpos - curdigit + 1;
END;
res:= 0;
curpos:= 0;
\f


curdigit:= curdigit + 1;
END;
curpos:= curpos + 1;
END;
END (* base= 2, 8, of 16 *);

IF positions<used THEN outchar(sp);

IF (NOT (positions IN (. 1 .. maxpos .)) )
OR (positions < used) THEN
positions:=used;

FOR i:=maxpos+1-positions TO maxpos DO
BEGIN
outchar( digits(i) );
END

END (* out integer *);



\f


PROCEDURE outstring10(text: alfa10);
(* writes the text into opbuf starting at outputpointer
which is updated accordingly *)
VAR
i: integer;
BEGIN
FOR i:=1 TO 10 DO
outchar( text(i) );
END (* out string 10 *);

PROCEDURE outstring12(text: alfa);
VAR
i: integer;
BEGIN
FOR i:=1 TO 12 DO
outchar(text(i));
END;

\f


PROCEDURE outstring20(text: alfa20);
(* analogue to outstring10 *)
VAR
i: integer;
BEGIN
FOR i:=1 TO 20 DO
outchar( text(i) );
END (* out string 20 *);




\f


FUNCTION readchar: char;
(* reads the next char from opinref^.
next is incremented and charsleft is
decremented *)
BEGIN
LOCK opinref AS opbuf: opbuftype DO
WITH opbuf DO
BEGIN
readchar:= data(next);
next:= next + 1;
END;
incharsleft:=incharsleft-1;
END (* readchar *);




\f


FUNCTION readinteger : integer;
(* reads the next integer from opinref^ starting
at "inputpoint". upon return "inputpoint" will be
the position just after the last char read.

the global boolean "readok" will be true if an
integer was read and false otherwise *)

CONST
digits = (. "0" .. "9" .);
hexdigits = (. "a" .. "f" .);
signs =  (. "+" , "-" .);

VAR
negative, digit: boolean;

curdigit, noofdigit,
result: integer;

ch,lastchar: char;


BEGIN
readok:=false;
lastchar:=nul;
ch:=nul;
digit:=false;

(* now skip until a digit is encountered *)

IF incharsleft > 0 THEN
REPEAT
lastchar:=ch;
ch:=readchar;
digit:= (ch IN digits) OR
((base= 16) AND (ch IN hexdigits))
UNTIL digit OR (incharsleft<=0);

result:=0;
IF base= 10 THEN
negative:= lastchar= "-"
ELSE negative:= false;


IF digit THEN
BEGIN
\f


IF ch IN digits
THEN result:= ord (ch) - ord ("0")
ELSE result:= ord (ch) - 87 (*ord ("W")*);
readok:=true;
END;

IF base=10 THEN
BEGIN
WHILE digit AND (incharsleft>0) DO
BEGIN (* read the digits *)
ch:= readchar;

digit:= (ch IN digits) OR
((base= 16) AND (ch IN hexdigits));
IF digit THEN
BEGIN
IF negative AND (result=3276) AND (ch="8")
THEN BEGIN
result:= -32768;
negative:= false;
END
ELSE
BEGIN
IF ch IN digits
THEN result:= result*base+(ord(ch)-ord("0"))
ELSE result:= result*base+(ord(ch)-87(*ord("W")*));
END;
END;
END (* while *);

IF negative THEN result:= - result;

END (* base= 10 *)

ELSE
BEGIN (* base= 2, 8, or 16 *)

CASE base OF
2:BEGIN
IF ch="1" THEN negative:= true;
noofdigit:= 16;
END;

8: BEGIN
IF ch="1" THEN negative:= true;
noofdigit:= 6;
\f


END;

16: BEGIN
IF ch>="8" THEN negative:= true;
noofdigit:= 4;
END;
END (*case*);
curdigit:= 1;

WHILE digit AND (incharsleft>0) DO
BEGIN
ch:= readchar;
digit:= (ch IN digits) OR
((base=16) AND (ch IN hexdigits));
IF digit
THEN BEGIN
curdigit:= curdigit+1;
IF (curdigit=noofdigit) AND negative THEN
BEGIN
CASE base OF
2: result:= result - 16384 (*2^14*);
8: result:= result -  4096 (*2^12*);
16:result:= result -  2048 (*2^11*);
END (*case*)
END;
IF ch IN digits THEN
result:= result*base + (ord(ch)-ord("0"))
ELSE
result:= result*base + (ord(ch)-87 (*ord("W")*));
IF (curdigit=noofdigit) AND negative
THEN BEGIN
IF result=0
THEN result:= -32768
ELSE result:= -((32767-result)+1);
END;
END (*if digit*);
END (*while digit*);
END (* base= 2, 8, or 16 *);
IF incharsleft > 0 THEN
(* we read one char too many - spit it out *)
repeatchar;

readinteger:=result;
END (* read integer *);

\f


PROCEDURE repeatchar;
BEGIN
LOCK opinref AS opbuf: opbuftype DO
opbuf.next:= opbuf.next - 1;
incharsleft:= incharsleft + 1;
END;

\f


FUNCTION testinterval (i,first,last: integer): boolean;
(* true if first<=i<=last *)
BEGIN
IF (i<first) OR (i>last) THEN
BEGIN
outstring10(illegalno);
outinteger(i,4);
writenl;
testinterval:= false
END
ELSE
testinterval:= true;
END;

\f


PROCEDURE testmodeout (text: alfa20; i: integer);
BEGIN
IF testmode THEN
BEGIN
outstring20 (text);
outinteger (i, 4);
writenl;
END;
END (* testout *);

\f


PROCEDURE testsem(i: integer; VAR t_sem : semaphore);
(* test the semaphore t_sem, and
writes its status on the console if it is
non-passive *)
VAR more: boolean;
BEGIN

IF i>0 THEN
BEGIN
ap.a := sem(i).s;
bp.a := sem(i).w;
END
ELSE ap:=bp;
IF open(t_sem) THEN
BEGIN (* user semaphore no. i is open *)
IF ap=bp THEN
outchar(" ") ELSE outchar("^");
outdecimal(i,3);
outchar(":");
more:= true;

(* now count the no. of buffers on this semaphore *)
j:=0; (* j is the counter *)
WHILE more DO
BEGIN
sensesem(countref, t_sem);
IF nil(countref) THEN
more:= false
ELSE
BEGIN
signal(countref,countsem);
j:=j+1;
END
END;

outdecimal(j,3);
WHILE open(countsem) DO
BEGIN (* return the buffers to sem(i) *)
wait(countref,countsem);
signal(countref,t_sem);
END;

writenl;
END (* open *)
ELSE
IF locked( t_sem) THEN
\f


BEGIN (* user semaphore no. i is locked *)
IF ap=bp THEN
outchar(" ") ELSE outchar("^");
outdecimal(i,3);
outchar(":");
outstring10(" locked   ");
writenl;
END;
END (* testsem *);





\f


PROCEDURE writenl;
(* prepares opbuf for output to the operator and signals
it to operator module *)
BEGIN
IF NOT nil(opoutref) THEN
BEGIN
outchar(nl);
signal(opoutref, opsem^)
END;
wait(opoutref, wsem);
LOCK opoutref AS opbuf: opbuftype DO
opbuf.last:= firstindex;
END (* writenl *);


\f





(****************************************
*                                       *
*       m a i n   p r o g r a m         *
*                                       *
****************************************)






BEGIN

opsem:= semvector(operatorsem);
testmode:= false;
testopen (z,own.incname,opsem);
testout(z,version,fe_env_version);

(* initialise pointers *)
FOR i:=1 TO ts_sem_total DO
BEGIN
sem(i).s:= ref(ts_sem(i));
sem(i).w:= sem(i).s;
END;

(*  initialize pointers to eva semaphores *)
sem(net_int1).s:=ref(evavector(px_urec));
sem(net_int1).w:=sem(net_int1).s;
sem(net_int2).s:=ref(evavector(px_utrm));
sem(net_int2).w:=sem(net_int2).s;
sem(net_int3).s:=ref(evavector(px_ncp));
sem(net_int3).w:=sem(net_int3).s;
sem(lam_sem_no).s:= ref(evavector(al_lam1));
sem(lam_sem_no).w:= sem(lam_sem_no).s;

(*  initialize local semaphores for netconnector  *)

netc_locals(1):=sem(tssup_sem_no).s;
netc_locals(2):=sem(nc_sem_no).s;

(* initialise buffers *)
FOR i:= 1 TO 2 DO
BEGIN
\f


alloc (opoutref, opbufpool, wsem);
opoutref^.u1:=2; (* write *)
LOCK opoutref AS opbuf: opbuftype DO
WITH opbuf DO
BEGIN
first:= firstindex;
name:= opsysname;
data(firstindex):= "!";
END;
return (opoutref);
END;
writenl;

alloc(opinref, opbufpool, wrsem);

opinref^.u1:=1; (* read *)

LOCK opinref AS opbuf: opbuftype DO
WITH opbuf DO
BEGIN
first:= firstindex;
last:= lastindex;
name:= opsysname;
END;

(*-------    allocate all listenbuffers ---*)
FOR i:= 1 TO no_listen DO
BEGIN
alloc(cur,messbufpool,sem(com_pool).s^);
return(cur);
END;

(*-------    allocate all paxnetbuffers ---*)
FOR i:=1 TO no_pax_bufs DO
BEGIN
alloc( cur, paxbufpool, sem(net_int4).s^);
signal( cur, sem( pax_pool).s^);
END;

st:= 1024;
base:= 10;
firstword:= 1;
lastword:= 10;

setoflowmask(true);

\f


noofparams:= 0;
(* insert auto create with edit here *)

REPEAT
(* read a line of input from the operator and execute it *)

getinput;

CASE command OF

";": (* comment command *)
BEGIN
END;

\f


"a": (* alloc *)
(* a buffer is allocated from the messbufpool to the current
reference "cur".
1st param is the answersem *)
BEGIN
semno:= params(1);

IF noofparams >= 1 THEN
IF nil(cur) THEN
IF ((semno>0) AND (semno <= noofsemaphores))
OR ((semno<0) AND (semno >= -applsem_max)) THEN
BEGIN
IF semno > 0 THEN
alloc (cur, testbufpool, ts_sem(semno))
ELSE
alloc (cur, testbufpool, evavector(-semno));
WITH cur^ DO
BEGIN
u1:= 0;
u2:= 0;
u3:= 0;
u4:= 0;
END;
get_curbuftype;
outstring10("  bufsize ");
outinteger(curbufsize, 5);
outinteger(cur^.size, 5)
END
ELSE outstring10(illegalno)
ELSE outstring20("you already have one")
ELSE outstring10(noparam)
END (* alloc*);

\f


"b": (* base *)
(* defines the number base for input as well as output *)
(* the base is always read decimally *)
BEGIN
IF noofparams < 1 THEN
BEGIN
base:= oldbase;
outstring10(noparam)
END
ELSE

IF NOT (params(1) IN (. 2, 8, 10, 16 .) ) THEN
BEGIN (* illegal base *)
outstring20("illegal base        ");
base:= oldbase;
END
ELSE
base:= params(1);
END;

\f


"c": (* create *)
(* an incarnation of each of the predefined modules to be tested
is created and started.
params are nos. of the modules to be created and started *)

IF noofparams >= 1 THEN

BEGIN
moduleno:= params(1);

IF noofparams>1 THEN st:= params(2);

IF (moduleno<1) OR (moduleno > noofmodules) THEN
BEGIN (* illegal no *)
outdecimal(moduleno,4);
outstring10(illegalno);
END
ELSE
IF moduleready(moduleno) THEN init_modul(moduleno);
END (* if noofparams >= 1 *)
ELSE outstring10 (noparam);
(* end create *)

\f


"d": (*  test dtesimulator  *)
BEGIN
outstring10("test dte  ");

sensesem( nref, sem( pax_pool).w^);

IF NOT nil( nref) THEN
BEGIN
nref^.u2 := 7;
nref^.u4 := from_link;

CASE params(1) OF

1: (* answer to connect ext *)
BEGIN
nref^.u1 := rut_con;
nref^.u2 := rut_ok;
nref^.u3 := 7;

LOCK nref AS buf: rut_prefix_type DO
buf.ext_no := params(2);
(* ie  d 1 20  answers on connect ext 20 *)
END;

2: (* call request *)
BEGIN
nref^.u1 := dte_car;
nref^.u3 := params(2);
nref^.u4 := to_link;
LOCK nref AS buf:car_buf_type DO
WITH buf DO
BEGIN
first := ric_first_val;
last := ric_first_val+l_control+l_listen-1;
q_bit := false;
WITH call_buf DO
BEGIN
control.op_code := dte_car;
dte_adr_l := l_dte_adr;
dte_adr := packextnode(3);
facility_l := l_facilities;
facility := params(6);
FOR i := 1 TO l_listen DO
alarm_mess(i):=i;
END;
END;
\f


END;
(* ie d 2  1  0 0 3  0 sends a call to 3 on stream 1 *)
(* ie d 2  2  0 0 4  0 sends a call to 4 on stream 2 *)

3: (* call accepted from remote user *)
BEGIN
nref^.u1 := rut_rec;
nref^.u2 := rut_ok;
nref^.u3 := rut_default;
LOCK nref AS buf: rut_trp_pdata DO
WITH buf DO
make_phead( 3, dte_aic, phead);
END;
(* ie d  3  1  0 0 3  0 0 2  0  is 3 accepting call from 2 *)

4: (* send data to remote user *)
BEGIN
nref^.u1 := dte_sdata;
nref^.u3 := params(2);
LOCK nref AS buf : dte_sdata_data DO
WITH buf DO
BEGIN
q_bit := false;
m_bit := false;
control.op_code := dte_sdata;
FOR i := 1 TO l_listen DO
alarm_mess(i) := i;
END
END;
(* ie d  4  1      sends data on stream 1 *)



OTHERWISE
outstring10("undef test");
END;
signal( nref, sem( net_int4).s^);
END
ELSE
outstring10("no paxbufs");

END;

\f


"f": (* fill *)
(* fills integers into current buffer.
1st param: first word no. to be filled,
following: values to be assigned *)
BEGIN
IF noofparams < 2 THEN
outstring10("param     ")
ELSE
IF (params(1) < 1) THEN
outstring20("illegal start       ")
ELSE
IF nil(cur) THEN
outstring10("no buffer ")
ELSE
BEGIN (* params are ok *)
i:= params(1); (* i points into the messbuf *)

FOR j:= 2 TO noofparams DO
(* j points into the param list *)
IF i <= curbufsize THEN
BEGIN
CASE curbuftype OF
1: LOCK cur AS minbuf: minbuftype DO
minbuf(i):= params(j);
2: LOCK cur AS messbuf: messbuftype DO
messbuf(i):= params(j);
3: LOCK cur AS maxbuf: maxbuftype DO
maxbuf(i):= params(j);
4: LOCK cur AS testbuf: testbuftype DO
testbuf(i):= params(j);
OTHERWISE
END;
i:= i + 1;
END;

END (* params ok *)
END (* fill *);

\f


"h": (* help *)
(* lists possible commands and no. of parameters *)
BEGIN
outstring20("comm and no of param"); writenl;
outstring20("a: allocate   1     "); writenl;
outstring20("b: base       1     "); writenl;
outstring20("c: create     >=1   "); writenl;
outstring20("e: execute    1     "); writenl;
outstring20("f: fill       2     "); writenl;
outstring20("h: help       0     "); writenl;
outstring20("i: init point 0     "); writenl;
outstring20("k: kill       >=1   "); writenl;
outstring20("o: output     0 to 2"); writenl;
outstring20("p: partial    >=3   "); writenl;
outstring20("r: return     0     "); writenl;
outstring20("s: signal     1     "); writenl;
outstring20("t: test       0 or 1"); writenl;
outstring20("u: user param 1 to 4"); writenl;
outstring20("w: wait       1     "); writenl;
outstring20("x: exch point 2     "); writenl;
outstring20(";: comment          ");
END;

\f


"i": (* initialise pointers *)
IF noofparams=0 THEN
FOR i:=1 TO noofsemaphores DO sem(i).w:= sem(i).s ELSE
IF (params(1)>0) AND (params(1)<=noofsemaphores) THEN
sem(params(1)).w:= sem(params(1)).s ELSE
outstring10(valparam);

\f


"e", (* exception *)
(* call of exception routine in one or more incarnations *)
"k": (* kill *)
(* removes incarnation of tested module(s)
params are nos. of modules to be removed *)

IF noofparams >= 1 THEN
FOR i:= 1 TO noofparams DO
BEGIN
moduleno:= params(i);
IF (1<=moduleno) AND (moduleno<=noofmodules) THEN
IF NOT nil(sh(moduleno)) THEN
IF command="e" THEN
break(sh(moduleno),#h2f) ELSE
remove (sh(moduleno))
ELSE
BEGIN
outdecimal (moduleno, 4);
outstring10(" not alive");
writenl;
END
ELSE
BEGIN
outdecimal (moduleno, 4);
outstring10(illegalno);
writenl;
END
END
ELSE outstring10("no params ");

\f


"m": (* testmode *)
testmode:= NOT testmode;

\f


"n": (*  test netconnector *)
BEGIN
outstring10("test netc ");

sensesem( nref, sem( pax_pool).w^);

IF NOT nil( nref) THEN
BEGIN

nref^.u2 := 7;

CASE params(1) OF

1: (* update pax-table from local sup *)
BEGIN
nref^.u3 := tss_route;
nref^.u4 := #hac;

LOCK nref AS buf : RECORD
a:alarmlabel;
i : integer;
p:paxnet_e;
END DO
WITH buf DO
BEGIN
a.update := insert_code;
a.rec.macro := packmacro(2);
a.rec.micro := netc_mic_addr;
a.send.macro := packmacro(5);
p.al_mac_addr := packmacro(8);
p.pax_addr := packextnode(11);
i := params(14);
p.stream_no := params(15);
END;
(*       receiver sender al-mac  pax indx stream       *)
(* ie n 1  0 0 0  1 0 0  1 2 2  0 0 2  1  0 sets netc address *)
(* ie n 1  1 2 2  1 0 0  1 2 2  0 0 2  2  1 sets tssup addr   *)
(* ie n 1  1 2 2  1 0 0  1 2 0  0 0 2  3  2 sets ncsup addr   *)
(* ie n 1  1 2 2  1 0 0  1 3 2  0 0 3  4  0 sets global ts-adr*)
(* ie n 1  1 2 2  1 0 0  1 3 0  0 0 3  5  0 sets global nc-adr*)
END;

\f


2 : (* update pax-table from net *)
BEGIN
nref^.u3 := params(15);
nref^.u4 := to_link;

LOCK nref AS buf : RECORD
x,y,z:integer;
b1,b2:boolean;
d:byte;
control: control_field_type;
a:alarmlabel;
i:integer;
p:paxnet_e;
END DO
WITH buf DO
BEGIN
a.update := insert_code;
a.rec.macro := packmacro(2);
a.rec.micro:=netc_mic_addr;
a.send.macro:=packmacro(5);
p.al_mac_addr := packmacro(8);
p.pax_addr := packextnode(11);
i:=params(14);
p.stream_no := 0;
END;
END;
(*       receiver sender al-mac  pax  indx stream  *)
(* ie n 2  1 2 2  1 0 0  1 4 2  0 0 4  6  1   sets global ts-addr *)
(* ie n 2  1 2 2  1 0 0  1 4 0  0 0 4  7  1   sets global nc-addr *)
(* ie n 2  1 2 2  1 0 0  1 5 2  0 0 5  8  1   sets global ts-addr *)
(* ie n 2  1 2 2  1 0 0  1 5 0  0 0 5  9  1   sets global nc-addr *)

\f


3:  (* send alarmmessage *)
BEGIN
nref^.u3 := tss_route;
nref^.u4 := #h30;

LOCK nref AS abuf : alarmlabel DO
abuf.rec.macro := packmacro(2);

(*        receiver *)
(* ie n 3  1 2 2   gives an alarm to tssup itself  *)
(* ie n 3  1 2 0   gives an alarm to ncsup local   *)
(* ie n 3  1 3 2   gives an alarm to tssup global  *)
(* ie n 3  1 3 0   gives an alarm to ncsup global  *)
END;


OTHERWISE
outstring10("undef test");
END;
signal( nref, sem( netc_sem_no).s^);
END
ELSE
outstring10("no paxbufs");
END;


\f


"o": (* output *)
(* outputs current buffer incl. user parameters
1st param is firstword,
2nd param is lastword *)
BEGIN
IF nil(cur) THEN
outstring10 ("no buffer ")
ELSE
BEGIN
outchar("u");
outchar(":");

outinteger(cur^.u1,4);
outinteger(cur^.u2,4);
outinteger(cur^.u3,4);
outinteger(cur^.u4,4);
writenl;

IF (noofparams>=1) AND (params(1)>=1)
AND (params(1)<= curbufsize) THEN
firstword:= params(1);

IF (noofparams>=2) AND (params(2)<=curbufsize) THEN
lastword:= params(2);
IF lastword>curbufsize THEN
lastword:= curbufsize;

IF cur^.size<curbufsize THEN
outstring20("too small buffer    ") ELSE
FOR i:= firstword TO lastword DO
BEGIN
outdecimal(i,3);
outchar(":");
CASE curbuftype OF
1: LOCK cur AS minbuf: minbuftype DO
j:= minbuf(i);
2: LOCK cur AS messbuf: messbuftype DO
j:= messbuf(i);
3: LOCK cur AS maxbuf: maxbuftype DO
j:= maxbuf(i);
4: LOCK cur AS testbuf: testbuftype DO
j:= testbuf(i);
OTHERWISE
j:= 0;
END;
IF base= 2 THEN
\f


outinteger(j,17)
ELSE
outinteger(j,7);
writenl;
END;
END (* ok *);
END (* output *);

\f


"p": (* partial words *)
(* fills partial words i.e. bytes into current buffer.
1st param: word no. in which to start
2nd param: byte no. (of 1st word) in which to start:
-           0: left byte
-           1: right byte
following: byte values to be assigned *)
BEGIN
IF noofparams<2 THEN
outstring10("param     ")
ELSE
IF (params(1)<1) THEN
outstring20("illegal start-word  ")
ELSE
IF NOT (params(2) IN (.0,1.)) THEN
outstring20 ("2nd must be 0 or 1  ")
ELSE
IF nil (cur) THEN
outstring10 ("no buffer ")
ELSE
BEGIN (* params are ok *)
i:= params(1); (* i points into current buffer *)
j:= params(2);

IF cur^.size<messbufsize THEN
outstring20("too small buffer    ") ELSE
LOCK cur AS messbuf: messbuftype DO
BEGIN
IF messbuf(i)<0 THEN
leftbyte:= (messbuf(i)+255) DIV 256
ELSE
leftbyte:= messbuf(i) DIV 256;

FOR k:= 3 TO noofparams DO
(* k points into the parameter list *)
IF i<= messbufsize THEN
BEGIN
CASE j OF
0:
BEGIN (* left *)
rightbyte:= abs(messbuf(i) MOD 256);
leftbyte := params (k);
END;
1:
BEGIN (* right *)
rightbyte:= params (k);
\f


IF leftbyte>=128 THEN
BEGIN
messbuf(i):= (leftbyte-128)*256 + rightbyte;
IF messbuf(i)>0 THEN
messbuf(i):= -((32767-messbuf(i))+1)
ELSE messbuf(i):= -32768;
END
ELSE
messbuf(i):= leftbyte*256 + rightbyte;
i:= i+1;
END;

END (* case *);

j:= 1-j;
END;

IF (j=1) AND (i<=messbufsize) THEN
IF leftbyte>=128 THEN
BEGIN
IF messbuf(i)>0 THEN
messbuf(i):= (leftbyte-128)*256 + rightbyte
ELSE messbuf(i):= - 32768;
messbuf(i):= -((32767-messbuf(i))+1);
END
ELSE
messbuf(i):= leftbyte*256 + rightbyte;
END (* lock *);
END (* params ok *);
END (* partial *);

\f


"r": (* return *)
(* returns current buffer *)
IF nil(cur)
THEN outstring10("no buffer ")
ELSE return(cur);

\f


"s": (* signal *)
(* signals current buffer to one of the predefined semaphores.
1st param is semno *)
BEGIN
semno:= params(1);

IF noofparams >= 1 THEN
IF (1<=semno) AND (semno<=noofsemaphores) THEN
IF NOT nil(cur) THEN
signal (cur,ts_sem(semno))
ELSE outstring10("no buffer ")
ELSE
IF (semno <= -1) AND (semno >= -applsem_max) THEN
signal( cur, evavector( -semno))
ELSE outstring10(illegalno)
ELSE outstring10(noparam)
END (* signal *);

\f


"t": (* testsem *)
(* tests the status of the specified semaphores.
if none is specified, the status of all the
user semaphores is given.
in both cases nothing will be written for a semaphore
if it is passive. *)
BEGIN
IF noofparams=0 THEN
BEGIN (* test all semaphores *)

FOR i:= -applsem_max TO -1 DO
testsem( i,evavector(-i));

FOR i:=1 TO noofsemaphores DO
testsem(i,ts_sem(i))
END (* test all *)
ELSE
BEGIN (* test the specified semaphores *)

FOR i:=1 TO noofparams DO
IF (params(i)=0) OR (params(i)>noofsemaphores)
OR (params(i) < -applsem_max) THEN
BEGIN (* illegal no. *)
outstring20("illegal no.:        ");
outdecimal(params(i),3);
writenl;
END (* illegal no *)
ELSE
BEGIN
IF params(i)>0 THEN
testsem( params(i), ts_sem(params(i)))
ELSE
testsem( params(i), evavector(-params(i)));
END
END (* test the specified semaphores *)
END (* testsem *);


\f


"u": (* user parameters *)
(* inserts user param into header of current buffer
1st param is u1
2nd param is u2
3rd param is u3
4th param is u4 *)
BEGIN
IF nil(cur)
THEN outstring10("no buffer ")
ELSE
IF noofparams = 0 THEN
outstring10(noparam)
ELSE
WITH cur^ DO
BEGIN
IF testinterval (params(1),0,255) THEN u1:= params(1);
IF (noofparams>=2) THEN IF testinterval(params(2),0,255) THEN
u2:= params(2);
IF (noofparams>=3) THEN IF testinterval(params(3),0,255) THEN
u3:= params(3);
IF (noofparams>=4) THEN IF testinterval(params(4),0,255) THEN
u4:= params(4);
END
END; (* end user parameters *)


\f


"w": (* wait *)
(* waits for semaphore semno.
1st param is semno *)
BEGIN
semno:= params(1);

IF noofparams >= 1 THEN
IF nil(cur) THEN
IF ((semno>0) AND (semno <= noofsemaphores))
OR ((semno<0) AND (semno >= -applsem_max)) THEN
BEGIN
IF semno > 0 THEN
sensesem( cur, ts_sem(semno))
ELSE
sensesem( cur, evavector(-semno));
IF nil(cur) THEN
outstring20("semaphore not open  ")
ELSE
BEGIN
get_curbuftype;
outstring10("  bufsize ");
outinteger(curbufsize, 5);
outinteger(cur^.size, 5)
END;
END
ELSE outstring10(illegalno)
ELSE outstring20("you already have one")
ELSE outstring10(noparam)
END (* wait *);

\f


"x": (* exchange pointer *)
BEGIN
IF noofparams >= 2 THEN
IF (params(1)>0) AND (params(1)<=noofsemaphores) THEN
IF (params(2)>0) AND (params(2)<=noofsemaphores) THEN
BEGIN
worksem:= sem(params(1)).w;
sem(params(1)).w:= sem(params(2)).w;
sem(params(2)).w:= worksem;
END
ELSE outstring10(valparam)
ELSE outstring10(valparam)
ELSE outstring10(noparam)
END (* exchange pointer *);


OTHERWISE (* error *)
outstring20 ("illegal comm. type h");
END (* case *);

IF command<>";" THEN
writenl;

UNTIL false;

END.




\f


9*   52*   81*  160*  160*  161*  299   304   326   327   330   337   347:  347   359 
387   436   488   492   511   515   571*  594   603   613   619   626   638   649 
650   677   680   685   695   700   701   800   806   808   824   871   893   900 
960  1105  1128  1129  1131  1137  1138  1139  1140  1346  1348  1450  1528  1553 
1577: 1588  1605  1647  1660  1669  1688  1693  1694  1696  1698  1712  1713  1715 
1738 
*   51*   71*   72*   73*   74*   81*   84*   85*  107*  156*  157*  284   314   325 
348:  400   403   412   463:  548   572*  585   588   602   603   608   613   621 
635   638   642   643   657   672   676   698   702   704   710   714   729   737 
762   764   869   878   895   910   911   969  1035  1053  1057  1074  1085  1092 
1124  1126  1156  1163  1169  1177  1180  1182  1184  1206  1208: 1228  1237  1266 
1292  1299  1306: 1316  1347  1348  1348  1349  1349  1358  1359  1362  1396  1398:
1503  1503  1504  1505  1519: 1550  1550  1553  1560  1582: 1589  1594  1599  1602 
1626  1628  1629  1634  1650  1653  1659  1693  1693  1708  1710  1737  1737  1740 

303   315   327   341   349:  433   469:  623   624   626   627   635   636   638 
645   646   649   650   656:  682   854:  882: 1054  1057  1060  1163  1182  1215 
: 1222  1259  1289  1301  1308: 1411  1427: 1444  1465  1507  1507  1508  1521: 1530 
1553  1561  1694  1694  1695  1736  1738  1738  1741  1742 
*  286   301   343   350:  473:  506   662   675   955   973   987  1234  1245: 1252 
: 1459: 1516  1523: 1572  1664  1696  1696  1697 
*  344   351:  477:  521   534   667   668   866   920   933  1186  1256: 1312: 1369 
1497  1498  1499  1500  1525: 1698  1698  1699 
*  162*  442   472   481:  483  1144  1145  1413  1446  1725  1726 
*  325   485:  663   861  1236 
*  161*  162*  328   475   493: 1203  1212  1394  1533 
:  661:  674   859:  883: 1163  1414  1447 
508:  692 
*  329   393   512:  559   590   729   809   822  1099  1101  1163 
*  489: 1415  1448 
*  737 
1416  1449 
*  621   633   643   680  1417  1429 
*  658   666:  805   829   856   864:  875   884: 1163 

*  568*  746 

*  410 
*
*   49*
841   890 

*   35*
1587  1603  1606 
\f


8  1693  1694  1696  1698 
1568  1570  1579  1587  1593  1606  1611 
492   511   515 





1589  1608 
894  1590  1607 
*  311*  313   314   315   316   323*  326=  328=  330=  331   947=  948= 1404: 1410 
1412  1413  1437: 1443  1444  1445  1446 
1579 
: 1465 
1437  1464 
= 1267=
*  259*  422*  733*
*  256*  723*
*  262*  274*  741*  928*
*
1072  1087  1094  1132  1134 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*  431   535 

= 1447=
*  947   950=  953   985 
1634  1650  1661  1713 
*
:  368:  545:  758:  909: 1008: 1061: 1076: 1214: 1224: 1250: 1260: 1306: 1308: 1310:
: 1403: 1432: 1464: 1519: 1521: 1523: 1525: 1565:
*
:
:
*  392   393=  406=  416=  558   559=  561=  590   600   601   655   674   805   809 
829   840   841   853   875   881   888   890  1099= 1158= 1166= 1169= 1530 
*
*  623=  626=  635=  638=  645   646=  646   649   650=  650   682 
*  241*  383*  527*  582*  784*  914*  942* 1434 
*  948   950   953   985 

: 1215  1224: 1225  1250: 1251  1260: 1261  1403: 1408  1432: 1441 
*   81*  211*  238*  291* 1435 


\f


2*  549   789*  795=  802   803=  804   805   816   817   818   826=  828   829   832 
840   841   855   860   865   873=  874   875   887   888   890 
*   84*   85*  126*  265*  542*  572*  753*  789*
693   694 
*  374=  376   389   404  1113  1364  1754 
*  467   497  1087 
*
1265  1436:
*
e                                               <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

*  963   964   968   976   977 
*  968   974   976 

*
*  440 
*  336   338   340   342  1087  1088  1094  1095  1127  1132  1134  1135  1145  1295 
: 1308: 1310: 1312: 1490  1497  1498  1499  1500  1512  1519: 1521: 1523: 1525: 1556 
1565: 1618  1620  1630  1631  1635  1685  1691  1711  1716  1718  1719  1726 
*  347=  348=  349=  350=  351= 1144  1303  1504  1507  1509  1510  1512  1725 
*  337=  339=  341=  343=  344=  346  1305  1518 
*  672=  687   688   693   694   698   702=  702   786*  869=  878=  878   879   891 
*  675=  676=  683   701=  704=  704 
:
*  549=  761  1066=
*  313=
*  796=  804=  806   814   824   828=  830   871   874=  876 
*  588=  600=  607=  613=  688=  693=  694=  716   779*  804   816   828   839   874 

*
=
*  503 
*
=
=

1232 
*  287=  300   301   506 
1265 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

*  220*
* 1042  1044  1046  1048  1134  1635  1651  1672  1718 
*  178*  184*  190*  195*  208*  222*  227*  232*  239*  242*
\f


6=
=
*  323*
= 1236=
=
407   536   697   793   796   811   835   922   965  1030  1229  1263  1264  1757 
*
*  465 




<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

*  371   914*  917  1064= 1079= 1227=
*   51*   67*  363   372  1009  1064  1066  1079 
* 1100= 1505= 1514 
=
eader                                           <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*

* 1111 
*  378   381*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
* 1142  1723 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*

*  680=  682 



*  805   829   875 
*  274*  280*  283   284   285   286   291*  300   301   322*  325=  326   327=  328 
329=  330   575*  588=  588   592=  600   602=  602   603   607   608=  608   611 
=  623   633=  635   643=  645   646   646   714=  716   727*  729=  730   735*  737=
744*  746=  747   914*  917   917   920   928*  933   938*  945   947   948   955 
1035= 1037  1037  1038  1038  1057= 1085= 1092= 1237= 1238  1238  1266= 1267  1267 
= 1303  1307  1309  1311  1313  1316= 1316  1347= 1347  1347  1359= 1361  1405: 1416=
: 1449= 1514= 1516  1520  1522  1524  1526  1560= 1567  1568  1570  1574  1579  1587 
1589  1589  1590  1593  1594= 1594  1602  1605  1606  1607  1608  1608  1611  1650=
1651  1653= 1654  1654  1659= 1660  1660  1661  1664  1669  1670  1670  1672  1672 
*  522   919  1147  1187  1376  1636  1729 
*  371=  764=  764   800   806   824   871   900   911=  911 
\f


1 
*  435   441 
*  430   435   437   449*  462   464   470   474   478   482   486   490   494   502 
513   521 
* 1190 
*  464   470   474   478   482   486   490   494   502   509   513 
*  236*
*  175*
1443 
*  253*  553*  560   564*  594   600   601=  601   603   613   619   623   624=  624 
627=  627   635   636=  636   638   639=  639 
*   71*   72*   73*   74*  146*  156*  176*  183*  188*  250*  253*  268*  274*  280*
*  309*  320*  322*  420*  425*  428*  449*  527*  553*  564*  580*  727*  735*  744*
*  787*  914*  928*  938* 1405  1433  1438 
*  280*  281*
*  960=  969=  969   973  1301= 1307  1309  1311  1313  1520= 1522= 1524= 1526= 1528=
1533  1561= 1576  1599= 1599  1602 
* 1572= 1580  1584 
*  483 
*

1048  1049  1049 

*  548=  548   549   914*  917  1009= 1080= 1228=
*  794=  802=  810 
*   67* 1080 
* 1101= 1508= 1509  1510= 1514 
* 1568= 1570= 1580= 1585  1587  1593  1603  1606  1611 
*
*   51*

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*
:  368:  545:  758:  909: 1008: 1061: 1076: 1214: 1224: 1250: 1260: 1306: 1308: 1310:
: 1403: 1432: 1464: 1519: 1521: 1523: 1525: 1565:




1237  1266 
*  642=  645   646   647=  649   650   651=
= 1413= 1444= 1446= 1465=
*  160*  161*  161*  162*  162*  309*  311*
*
\f


0* 1252 
*
: 1311= 1523: 1524 
*   74*  340   350 
* 1310  1523 
*  572*  588   592   611   672   687   698   710   714   714 
: 1309= 1521: 1522  1565: 1567  1568  1570  1579  1587= 1588  1589= 1589  1590= 1593=
1606= 1607= 1608= 1608  1611=
* 1087 
*   71*  338   349  1563  1574  1602 
*   97* 1308  1521  1565 
= 1445=
: 1307= 1519: 1520 
*   73*  336   348 
* 1306  1519 
*
*  527*  531   534  1180= 1184  1184  1186  1190  1190  1361= 1362  1362  1363  1365 
1369  1375 
*  531=  536= 1190 
*  957=  961   965=
=
*  464   464 
*  513   513 
*  470   470 
*  474   474 
*  478   478 
*  482   482 
*  486   486   490 
*  494   494 
*  502   502 
*  509   509 
*  421*  434  1065= 1081=
*  314=

*  594=  605   784*  810=  811=  832   835=  846   855=  860=  865=  879   891 
*  495 
*  496  1053= 1054=
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*  216*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1445 
507 
*
496   504  1478 
\f


9   507 
=
1042  1043  1043 
1044  1045  1045 
1047  1047 
503  1094  1277 
*  394=  397=  407=  414 
*  645=  647   649=  651 
*  363=  371   372=  761   762=  762   910=  910 

=
*  658=  663=  668=  672 
*  856=  861=  866=  879   891 
*  157* 1184  1362 
*  387=  400=  400   401   402   403   410   412=  412   433  1105= 1126  1156  1177 
1289  1301  1346  1358  1359  1503  1507  1547  1572  1628  1647  1659  1688  1694 
1698  1710  1736 
*  657=  662=  667=  683 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
* 1128  1347  1348  1629  1653  1660  1712  1737  1738 
* 1149  1159  1192  1637  1689  1731  1746 
* 1085 
* 1092 
* 1199  1201  1203  1204  1210  1211  1212  1214: 1221  1222  1223  1224: 1247  1248 
1250: 1258  1259  1260: 1277  1389  1391  1394  1400  1401  1403: 1429  1430  1432:
1462  1464: 1478 
795 
*
*  366   428*  435=  436   439=  439   442 
*  434=  439   444=
*  392=  406   416   558=  561  1158  1166 
*  177*
:  363   368:  369   545:  546   758:  759   909:  910   910  1008: 1009  1061: 1062 
: 1077 
* 1059  1072 
*
*   94*  362   368   545   758   909  1008  1061  1076 
974 

*  362:  364   365   366   368:  758:  909: 1072  1074  1076:
*  545: 1002  1005  1007  1008: 1059  1060  1061: 1068 
*  181*  187*  193*  364   465   472   475   479   483   487   491   495   503   510 
1005  1029= 1031 
1081 
\f


1*  303  1232= 1265=
*  212*  225*  230*  235*
600   693   694   817   817   818   840   840   841   888   888   890 
=
*  475 



*  708   716   730   738   747   954   954   956   986   986   988  1004  1494  1495 

*  442   521   534   553*  955   973   987  1186  1369  1375  1516  1664 
*  560   564*  920   933  1144  1145  1497  1498  1499  1500  1531  1533  1725  1726 
*  522   723*  919   989  1143  1147  1149  1159  1187  1192  1197  1275  1280  1290 
1350  1370  1376  1380  1387  1476  1481  1491  1548  1557  1619  1632  1636  1637 
1689  1724  1729  1731  1744  1745  1746 
*  441   733*
*  431   440   535   741*  932  1148  1165  1293  1325  1326  1327  1328  1329  1330 
1332  1333  1334  1335  1336  1337  1338  1339  1340  1341  1342  1513  1551  1554 
1663  1720  1730  1751 

*  294   423*  434   435   444  1406: 1414  1415  1417  1439: 1447  1448  1450 
=
*  331= 1234  1415  1448 
*  316= 1411  1413  1414  1444  1446  1447  1465 
*  313   314   315   320*  328 
*  283   284   285   286   302   303   313   314   315   328   401=  402  1124  1163 
1180  1182  1206  1215  1222  1236  1259  1292  1299  1307  1309  1311  1313  1348 
1349  1349  1361  1396  1416  1417  1429  1449  1503  1504  1505  1507  1508  1550 
1560  1561  1580  1584  1626  1660  1660  1661  1664  1669  1670  1670  1672  1672 
1693  1694  1695  1696  1697  1698  1699  1708  1737  1737  1738  1738  1740  1741 
1742 
* 1094 
1439 
*   98*
= 1448=
*  283   284   285   286   287 
503  1095  1199  1389 
*  214*

*  165*
*   94*   96*   97*
*
*  253*  553*  560   564*  708   710   711   712=  714 
*
\f


5*  437 
=
*  168*  174*  180*  186*  192*  197*  210*  224*  229*  234*
*
444 
*  188*  483 



*
= 1263=
*  374   753*  761=  803   826   873 
*  401   770*  904=
*  410   793=  819=
1412  1444  1445  1465 
*
1042  1044  1046  1048 
*
=

*  902   907*
*  677=  682=  682   685   692   693   694   695   700=
*  808=  817=  818=  832   834=  840=  840   841=  841   846=  846   882=  882   883=
884=  884   888=  888   890=  890   893   894=  895=  895   904 
*
1088  1620 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1228 
* 1579= 1584= 1587  1593  1606  1611 



1248 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<



*
*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

467   475   498   498   504   505   505   947  1037= 1038  1042= 1043  1044= 1045 
= 1047  1048= 1049  1053  1054  1087  1094  1095  1277  1347  1349  1478 
\f


0*  226*  231*  466   466   467   467   467   471   471   472   475   475   479   483 
491   496   496   497   498   498   503   503   504   505   505   510   514   947 
1037  1038  1038  1042  1043  1043  1044  1045  1045  1046  1047  1047  1048  1049 
1053  1054  1087  1094  1095  1199  1277  1347  1347  1349  1349  1389  1478  1740 
1741  1742 
*  107*  938*
* 1124= 1128  1128  1129  1129  1131  1132  1134  1626= 1629  1629  1631  1634  1634 
1708= 1712  1712  1713  1713  1715  1716  1718 
*  118*  119*  169*  171*  177*  181*  187*  193*  198*  205*  212*  220*  225*  230*
*  237*
* 1029 
1446 
1199  1389  1716  1718 
* 1103 
*  430   435   437   531  1363  1365  1366 
*
968   977  1005  1095  1277  1478  1631  1635 
*
338   340   342   424*  433  1145  1512  1563  1726 
708 
*  433=  435  1098= 1182=

=
*  471 
= 1450=


*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
471   475 


*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*
*
*  487   491 

*  510 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

*  514 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

\f


7 
: 1313= 1525: 1526 
* 1132  1134 
*   72*  342   351 
*   96* 1312  1525 
*  922=  925= 1693  1694  1696  1698 
*  930  1030= 1383= 1383 
*  359   376   385   402   928*


* 1651  1654  1670  1672 
*  259*  262*  274*  723*  730   733*  738   741*  747   928*  932 
*
*  180*  479 
*
*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
498 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<



=
1430 
531   678   819   855   860   865   925   957  1103 

1461 
*  315=
*  175*  182*  189*  194*  201*  215*  226*  231*  236*
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*
* 1037  1132  1631  1654  1670  1716 
*  107* 1035 
*  951   963   977   983 
= 1074= 1137= 1210= 1221= 1247= 1258= 1497  1693=
1138= 1203= 1211= 1248= 1394= 1498  1695=
= 1212= 1222= 1249= 1259= 1400= 1429= 1461= 1499  1697=
= 1204= 1223= 1401= 1430= 1462= 1500  1699=

= 1443=
*  585=  611=  698=  708   711   712 
=
* 1350  1744  1745 
* 1032 
\f


7   497   948  1038= 1043= 1045= 1047= 1049= 1199  1347= 1349= 1389  1740  1741= 1741 
=
976  1007 
* 1740= 1742 
*  443   921   934   980   990   998* 1070  1325  1326  1327  1328  1329  1330  1331 
1333  1334  1335  1336  1337  1338  1339  1340  1341  1371  1377  1501  1534  1665 

*  365  1072 
* 1007  1059 
:
*
:
* 1031  1032  1433:
*  678=  685   695   697=
*
\f


25
13
135
11
5
9
68
3
76
151
26
11
9
117
14
8
16
11
28
13
6
26
5
5
117
23
1
5
30
4
14
\f


.04.08.      15.03.                         pascal80     version 1981.02.09
nal; 
^4
s streamer( 
^4
ure setoflowmask( oflow: boolean); 
^44
r.net_addr := params(i); 
^0
fmax' too small 
\f


s:   0
on
aracter or fatal error
expected
or 'prefix' expected
erminated after pass1 
58
23
1
5
30
4
14
\f


.04.08.      15.03.                         pascal80     version 1981.02.09
nal; 
^4
s streamer( 
^4
ure setoflowmask( oflow: boolean); 
^44
r.net_addr := params(i); 
«eof»