|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6912 (0x1b00)
Types: TextFile
Names: »proctranstx«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦80900d603⟧ »giprocfile«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦80900d603⟧ »giprocfile«
└─⟦this⟧
; proctrans_tx * page 1 27 09 77, 13.56;
; proc_transla
; ************
if listing.yes
char 10 12 10
proc_transla = set 1
proc_transla = algol
external long procedure proc_transla
____________________________________
_ (proc_name);
string proc_name;
begin
zone pz(128, 1, stderror);
integer array entry(1:10);
array name_a(1:3);
integer field extnls, qbytes, date, time;
integer size, nta, content, ng, ne, nb, segm, t;
boolean field content_f, glb_f, ext_f, next_f;
boolean ext_info, ok;
long array field name_f;
array field rname_f;
move_string_1(name_a, 1, proc_name);
ok := true;
segm := 0;
open(pz, 4, string pump(name_a), 0);
if monitor(42)lookup:(pz, 0, entry) = 0 then
begin
_
comment fixed fields;
_____________________
rname_f :=
name_f := 2;
content_f := 17;
ext_f := 18;
next_f := 504;
\f
comment proctrans_tx * page 2 27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;
comment status after lookup
___________________________
entry_type size doc_name nta cont ext_i
_____________________________________________________
head_proc >0 e.g. disc <0 4 used
head_aux_proc <0 head_proc <0 4 not u
head_own_var <0 head_proc >=0 4 not u
cmpr_proc <0 head_proc <0 >=32 used
cmpr_aux proc <0 cmpr_proc <0 4 not u
cmpr_own_var <0 cmpr_proc <0 4 not u
syst_own_var 0 e.g. disc 0 4 not u
syst_own_var is treated separately. all entries
with size < 0 are looked up again. the position of
the external list is saved for head_proc and
cmpr_proc;
comment check for external proc or var;
_______________________________________
content := entry.content_f extract 12;
if content = 4 or content >= 32 then
begin
size := entry(1);
nta := entry(6);
if size <> 0 then
begin
ext_info := size > 0 or content >= 32;
if ext_info then
begin
ext_f := (entry.ext_f extract 12) + 2;
glb_f := ext_f - 1;
qbytes := ext_f + 2;
end;
if size < 0 then
begin
if content >= 32 then segm := content - 32;
close(pz, true);
open(pz, 4, string pump(entry.rname_f), 0);
\f
comment proctrans_tx * page 3 27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;
if monitor(42)lookup:(pz, 0, entry) = 0 then
begin
_
comment status after lookup
___________________________
entry_type size doc_name nta cont ext_f
__________________________________________________
head_aux_proc >0 e.g. disc <0 4 used
head_own_var >0 e.g. disc <0 4 used
cmpr_proc >0 e.g. disc <0 4 not u
cmpr_aux_proc <0 head_proc <0 >=32 used
cmpr_aux_var <0 head_proc <0 >=32 used
all entries with size < 0 are looked up again to
get information for loading the code from bs-dev.
the position of the external list is taken when
not found before;
size := entry(1);
content := entry.content_f extract 12;
if -, ext_info then
begin
ext_f := (entry.ext_f extract 12) + 2;
glb_f := ext_f - 1;
qbytes := ext_f + 2;
end;
if size < 0 then
begin
if content >= 32 then segm := content - 32;
close(pz, true);
open(pz, 4, string pump(entry.rname_f), 0);
ok := monitor(42)lookup:(pz, 0, entry) = 0;
end last lookup;
end
else ok := false;
end;
\f
comment proctrans_tx * page 4 27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;
comment input of procedure code;
________________________________
if ok then
begin
setposition(pz, 0, segm);
inrec_6(pz, 512);
ng := pz.glb_f extract 12;
ne := pz.ext_f extract 12; ;
if qbytes >= 504 then
begin comment qbytes on next segm;
t := 10 - 512 + (pz.next_f extract 12);
qbytes := qbytes + t;
ext_f := ext_f + t;
inrec_6(pz, 512);
end;
nb := pz.qbytes;
date := ext_f + 2*ng + 12*ne + nb + 4;
for t := 10 - 512 + (pz.next_f extract 12)
_ while date >= 504 do
begin
date := date + t;
inrec_6(pz, 512);
end;
time := date + 2;
date := pz.date;
if time = 504 then
begin
time := 10 - 512 + time + (pz.next_f extract 12);
inrec_6(pz, 512);
end;
time := pz.time;
end input of proc code;
\f
comment proctrans_tx * page 5 27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;
end size <> 0
else if nta = 0 then
<*system_own_variable*>
_______________________
begin
time := 0;
close(pz, true);
open(pz, 4, <:algol:>, 0);
if monitor(42)lookup:(pz, 0, entry) = 0 then
begin
date := ((entry(6) extract 12) - 1900)
_ + (entry(6) shift (-12))*100;
time := 0;
end
else
begin
close(pz, true);
open(pz, 4, <:fortran:>, 0);
date :=
if monitor(42)lookup:(pz, 0, entry) = 0 then
(((entry(6) extract 12) - 1900)
_ + (entry(6) shift (-12))*100)
else (-1);
end;
end system_own_var
else
date := -1;
end else date := -1;
end else date := -1;
if date > 0 and ok then
begin
if date > 311300 then
<*to hell with ISO*>
date := (date mod 100)*1 00 00
_ +((date//100) mod 100)*100
_ + date//1 00 00;
proc_transla := extend 10000*date + (time + 70)//100;
end
else
proc_transla := -1;
close(pz, true);
end proc_transla;
end;
if warning.yes
(mode 0.yes
message proc_transla not ok
lookup proc_transla)
▶EOF◀