|
|
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: 4608 (0x1200)
Types: TextFile
Names: »tcmerge2 «
└─⟦cde9d517b⟧ Bits:30007477 RC8000 Backup tape fra HT's bus-radio system
└─⟦6a563b143⟧
└─⟦this⟧ »tcmerge2 «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
└─⟦a957ba283⟧
└─⟦this⟧ »tcmerge2 «
begin
integer i,j,maxsource;
boolean skipbits;
real array arr(1:2);
procedure error(cause);
integer cause;
begin
write(out,<:<10>***cmerge :>,
case cause of (
<:no object file:>,
<:syntax at source:>,
<:sequence error at source:>,
<:object file could not be created:>,
<:object file protected or in use:>,
<:skip bracket not closed:>,
<:***:>),<:<10>:>);
goto abend;
end error;
if system(4,1,arr) <> 6 shift 12 + 10 then error(1);
system(4,3,arr);
if arr(1) <> real <:sourc:> add 101 then error(2);
maxsource:=0;
while system(4,maxsource+4,arr) = 8 shift 12 + 10 do
maxsource:= maxsource + 1;
skipbits:= false;
i:= maxsource+4;
if system(4, i, arr) = 4 shift 12 + 10 and arr(1) = real <:skip:> then
begin
i:= i+1;
while system(4, i, arr) = 8 shift 12 + 4 do
begin
skipbits:= skipbits or (false add (1 shift arr(1)));
i:= i+1;
end;
end;
begin
zone array source(maxsource,128*2,2,stderror);
zone object(128*2,2,stderror);
integer array state(1:maxsource);
integer array tail(1:10);
integer partition,slabel,currcharout;
integer procedure search(z,no,startpos,output);
zone z; integer no,startpos; boolean output;
begin
integer margin,class,pos,i,j;
boolean found;
integer array line(1:132);
line(startpos):=0;
if startpos = 1 then margin:=case partition of (0,2,2,4,4,6,4,4)
else margin:=0;
if partition = 1 then
begin
for class:= readchar(z, i) while class <> 8 do outchar(out, i);
outchar(out, 10);
ud(out);
end else
if startpos = 1 then <* source file *>
begin
for class:= readchar(z,i) while class<>8 do outchar(out,i);
outchar(out,10);
ud(out);
end else
begin <* master file *>
for class:= readchar(z, i) while class <> 8 do ;
end;
nextline:
pos:=1;
for class:=readchar(z,line(pos)) while class <> 8 and pos < startpos+2 do pos:=pos+1;
if line(pos) = 25 then search:=1000000 else
if pos = startpos+2 and (line(startpos) = 58 and line(startpos+2) = 58) then
search:= line(startpos+1)-48
else
begin
if class <> 8 then
begin
pos:= pos + 1;
for class:= readchar(z, line(pos)) while class <> 8 do pos:= pos+1;
end;
if (line(1) = 60 <* < *> and
(line(1+1) = 42 <* * *> and
(line(1+2) = 43 <* + *> and
(line(1+4) = 42 <* * *> and
line(1+5) = 62 <* > *> )))) then
begin
i:= line(1+3) - 48;
if (i > 0 and i < 10) and skipbits shift (-i) then
begin <* skip until closing bracket *>
repeat
pos:=1;
for class:= readchar(z, line(pos)) while class <> 8 do pos:= pos+1;
if line(pos) = 25 then
begin
close(object, true);
error(6);
end;
found:= true;
for j:= 0 step 1 until 5 do
begin
if line(j+1) <> (case (j+1) of (60, 42, 45, i+48, 42, 62))
then found:= false;
end;
until found;
goto nextline;
end;
end;
if output then
begin
write(object,false add 32,margin);
for i:=1 step 1 until pos do outchar(object,line(i));
end;
goto nextline;
end;
end search;
system(4,0,arr);
i:=1;
open(object,4,string arr(increase(i)),0);
if monitor(42) lookup entry :(object,0,tail) <> 0 then
begin
tail(1):=50;
for i:=2 step 1 until 10 do tail(i):=0;
if monitor(40) create entry :(object,0,tail) <> 0 then error(4);
end;
if monitor(52,object,0,tail) + monitor(8,object,0,tail) <> 0 then error(5);
for j:=1 step 1 until maxsource do
begin
state(j):=0;
system(4,j+3,arr);
i:=1;
open(source(j),4,string arr(increase(i)),0);
end;
for partition:=1 step 1 until 8 do
begin
for i:=1 step 1 until maxsource do
begin
if state(i) < partition then
begin
slabel:=search(source(i),partition,1,partition>1);
if slabel <= state(i) then error(3);
state(i):=slabel;
end;
end;
search(in,partition,4,true);
end;
outchar(object,25);
close(object,true);
for i:=1 step 1 until maxsource do close(source(i),true);
end;
abend:
end
▶EOF◀