|
|
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: 10752 (0x2a00)
Types: TextFileVerbose
Names: »pass5test«
└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
└─⟦6b41451d2⟧
└─⟦this⟧ »pass5test«
job pmn 9 600 time 20 0 size 100000 perm disc 200 10
(mode list.yes
pass5bin = set 150 disc
scope user pass5bin
if ok.no
finis
pass5bin = pascal list.no codesize.2500
finis)
program pass5test( in_pass5, out_pass5, descr_pass5, ext_pass5, output );
(* platon-80, test program for pass5.
-------------------------------------------
version: 1, 26/2/80, pemn.
*)
var
prolog_yes, epilog_yes : boolean;
descr_pass5 : file of char;
in_pass5 : file of char;
out_pass5 : file of char;
ext_pass5 : file of integer;
value
prolog_yes = true;
epilog_yes = true;
procedure pass5( prolog_yes, epilog_yes : boolean );
label
1 ; (* exit on fatal error *)
const
(* const. global for pass5: *)
pass5_version = 1;
const_niv_0 = 0;
const_size_nn = 12;
const_exc_mask = 0;
first_letter = 'a';
last_letter = 'z';
descr_max_param = 10;
c_size_opcode = 12;
c_size_identifier = 12;
c_size_string = 60;
c_size_alfa = 12;
c_exc_range = 1;
c_exc_case = 2;
t_routinemodule = 1; t_externalproc = 2;
t_externalfunc = 3; t_proc = 4;
t_func = 5; t_forstore = 6;
t_length = 7; t_deflix = 8;
t_pushvar = 9; t_pushindv = 10;
t_pushpackedrec = 11; t_assignstat = 12;
t_while = 13; t_whileexpr = 14;
t_endwhile = 15; t_pushaddr = 16;
t_pushcaddr = 17; t_field = 18;
t_indexexpr = 19; t_pushinda = 20;
t_index = 21; t_cindex = 22;
t_packedarr = 23; t_const = 24;
t_lconst = 25; t_left = 26;
t_block = 27; t_initconst = 28;
t_endblock = 29; t_eom = 30;
t_assign = 31; t_dope = 32;
t_not = 33; t_neg = 34;
t_compare = 35; t_compstruct = 36;
t_div = 37; t_add = 38;
t_sub = 39; t_mul = 40;
t_or = 41; t_and = 42;
t_mod = 43; t_rangetest = 44;
t_functioncall = 45; t_fcall = 46;
t_exfunctioncall = 47; t_endpcall = 48;
t_procedurecall = 49; t_cparam = 50;
t_exprocedurecall = 51; t_vparam = 52;
t_endfunccall = 53; t_paramtype = 54;
t_lockstat = 55; t_lockvar = 56;
t_endlock = 57; t_withstat = 58;
t_withvar = 59; t_endwith = 60;
t_exchangestat = 61; t_exchange = 62;
t_goto = 63; t_ifstat = 64;
t_ifexpr = 65; t_else = 66;
t_endif = 67; t_repeat = 68;
t_until = 69; t_endrepeat = 70;
t_forstat = 71; t_leftfor = 72;
t_testlimit = 73; t_endfor = 74;
t_channel = 75; t_chanvar = 76;
t_endchannel = 77; t_casestat = 78;
t_case = 79; t_caselabel = 80;
t_caserange = 81; t_otherwise = 82;
t_endcase = 83; t_process = 84;
t_extprocess = 85; t_body = 86;
t_endbody = 87; t_endcaselist = 88;
t_endcasestate = 89; t_begincode = 90;
t_codeline = 91; t_endcode = 92;
t_max_token = 92;
op_pexit = 'pexit'; op_pcals = 'pcals';
op_revgb = 'revgb'; op_revlb = 'revlb'; op_revib = 'revib';
op_revgw = 'revgw'; op_revlw = 'revlw'; op_reviw = 'reviw';
op_revgf = 'revgf'; op_revlf = 'revlf'; op_revif = 'revif';
op_revgd = 'revgd'; op_revld = 'revld'; op_revid = 'revid';
op_revsb = 'revsb'; op_revsw = 'revsw'; op_revsf = 'revsf';
op_revsd = 'revsd';
op_revpd = 'revpd'; op_revpw = 'revpw';
op_reagd = 'reagd'; op_reald = 'reald'; op_reaid = 'reaid';
op_readd = 'readd'; op_reasd = 'reasd';
op_rechw = 'rechw'; op_rechd = 'rechd';
op_renhb = 'renhb'; op_stnhb = 'stnhb';
op_setre = 'setre'; op_setst = 'setst';
op_index = 'index'; op_inprs = 'inprs'; op_inpss = 'inpss';
op_intrs = 'intrs';
op_jmppd = 'jmppd'; op_jmcht = 'jmcht';
op_jmzne = 'jmzne'; op_jmzeq = 'jmzeq'; op_jmprw = 'jmprw';
op_jmzgt = 'jmzgt'; op_jmzlt = 'jmzlt';
op_stbsa = 'stbsa'; op_stwsa = 'stwsa'; op_stxsa = 'stxsa';
op_stvgb = 'stvgb'; op_stvlb = 'stvlb'; op_stvib = 'stvib';
op_stvgw = 'stvgw'; op_stvlw = 'stvlw'; op_stviw = 'stviw';
op_stvgf = 'stvgf'; op_stvlf = 'stvlf'; op_stvif = 'stvif';
op_stvgd = 'stvgd'; op_stvld = 'stvld'; op_stvid = 'stvid';
op_stvsb = 'stvsb'; op_stvsw = 'stvsw'; op_stvsf = 'stvsf';
op_stvsd = 'stvsd';
op_ult = 'ult'; op_eq = 'eq'; op_ne = 'ne';
op_lt = 'lt'; op_gt = 'gt'; op_le = 'le';
op_ge = 'ge';
op_seteq = 'seteq'; op_setsb = 'setsb'; op_setsp = 'setsp';
op_setun = 'setun'; op_setdi = 'setdi'; op_setin = 'setin';
op_not = 'not'; op_and = 'and'; op_or = 'or';
op_settm = 'settm'; op_stcea = 'stcea';
op_neg = 'neg'; op_div = 'div'; op_add = 'add';
op_sub = 'sub'; op_mul = 'mul'; op_mod = 'mod';
op_iocda = 'iocda';
op_csell = 'csell';
(* offsets in the Incarnation Descriptor : *)
inc_excode = 17;
inc_exaddr = 19;
inc_exic = 23;
(* offsets in the Process Descriptor : *)
pd_count = 0;
pd_param = 2;
pd_linked = 6;
pd_procinf = 8;
pd_name = 12;
(* offsets in the message head and the message buffer : *)
sh_start = 24;
(* const. local to modules: *)
(*..........................%...........................*)
(* type definitions global for pass5: *)
type
opcode = packed array [ 1 .. c_size_opcode ] of char;
identifier = packed array [ 1 .. c_size_identifier ] of char;
token = 1 .. t_max_token;
string = packed array [ 1 .. c_size_string ] of char;
letter = first_letter .. last_letter;
symbol = record
id_letter : letter;
id_no : integer;
lix : integer
end;
context = record
niv : integer;
stack_size : integer;
max_stack_size : integer
end;
varvalue_descr = record
kind : integer;
size : integer
end;
varaddr_descr = record
kind : integer;
niv : integer;
offset : integer;
size : integer
end;
(* type definitions from modules: *)
(*..........................%..........................*)
(* var. declarations global for pass5: *)
var
const_vv_set : set of token;
const_op_set : set of token;
const_proc_set : set of token;
const_rou_set : set of token;
descr : record
(* in this variable the Descriptor Segment, part 1 is accumulated. *)
kind : integer;
name : identifier;
entry_point,
exit_point,
exception_point : identifier;
exception_mask : integer;
appetite : integer;
no_of_params : integer;
param : array [ 1 .. descr_max_param ] of
record
kind : integer;
size : integer
end
end (* descr *);
(* var. declarations from the modules: *)
(*.........................%..............................*)
(* procedure declarations global for pass5: *)
procedure descr_init;
begin
end;
procedure ext_descr_out; (* routine referenced by 'descr_end' !! *)
forward;
procedure descr_end;
var
a : alfa;
k : integer;
procedure descr_out_integer( i : integer );
begin
write( descr_pass5, ' ' );
write( descr_pass5, i );
write( descr_pass5, ' /' )
end;
procedure descr_out_identifier( id : identifier );
var
i : integer;
begin
write( descr_pass5, ' ' );
for i := 1 to c_size_identifier do
write( descr_pass5, id [ i ] );
write( descr_pass5, ' /' )
end;
procedure descr_out_alfa( a : alfa );
begin
write( descr_pass5, a )
end;
begin
open( descr_pass5, 'pass5d' );
rewrite( descr_pass5 );
writeln( descr_pass5 );
writeln( descr_pass5, ' ; platon-80, descriptor from pass5. ' );
write( descr_pass5, ' ; version: ' );
writeln( descr_pass5, pass5_version );
write( descr_pass5, ' ; date and time: ' );
date( a ); descr_out_alfa( a );
time( a ); descr_out_alfa( a );
writeln( descr_pass5 ); writeln( descr_pass5 );
writeln( descr_pass5, ' d. ' );
descr_out_identifier( descr.name );
descr_out_integer( descr.kind );
writeln( descr_pass5 );
descr_out_identifier( descr.entry_point );
descr_out_identifier( descr.exception_point );
descr_out_identifier( descr.exit_point );
writeln( descr_pass5 );
descr_out_integer( descr.exception_mask );
descr_out_integer( descr.appetite );
writeln( descr_pass5 );
descr_out_integer( descr.no_of_params );
writeln( descr_pass5 );
for k := 1 to descr.no_of_params do
begin
descr_out_integer( descr.param[ k ].kind );
descr_out_integer( descr.param[ k ].size );
writeln( descr_pass5 )
end;
ext_descr_out;
writeln( descr_pass5 );
writeln( descr_pass5, ' . ' );
writeln( descr_pass5 )
end (* descr_end *);
procedure context_eval( var c : context; change : integer );
begin
with c do
begin
stack_size := stack_size + change;
if stack_size > max_stack_size then max_stack_size := stack_size
end
end;
(* procedure declarations from the modules: *)
(*.............................%..................................*)
(* body of pass5: *)
begin
(* initialize the frozen variables: *)
const_vv_set := [ t_pushvar, t_pushaddr, t_pushcaddr ];
const_op_set := const_vv_set +
[ t_const, t_lconst, t_functioncall, t_exfunctioncall ];
const_proc_set := [ t_process, t_extprocess ];
const_rou_set := [ t_proc, t_externalproc, t_func, t_externalfunc ];
(* initialize the pseudo classes: *)
out_init;
in_init;
sym_init;
descr_init;
ext_init;
(* generate code for one program: *)
find_program;
(* terminate the pseudo classes: *)
out_end;
in_end;
descr_end;
1: (* exit from fatal errors *)
end (* pass5 *);
(* body of the test program: *)
begin
pass5( prolog_yes, epilog_yes )
end.
«eof»