|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 49920 (0xc300)
Types: TextFileVerbose
Names: »feaosjob2«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system
└─⟦72244f0ef⟧
└─⟦this⟧ »feaosjob2«
\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»