|
|
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: 13056 (0x3300)
Types: TextFile
Names: »tapescantx«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦0f6e8048b⟧ »preditfile«
└─⟦this⟧
comment tapescantx * page 1 26 03 80, 14.12;
comment case 11, tapescan;
_________________________
comment GI reg. no. 75007
written 1975 and updated 1979-80 by E. Hjortenberg;
begin
comment abbreviations used as names:
p=print, nbe=not block end,
it=total number of blocks read, ib=block number(in file),
bl=block length(bytes), blold=previous block length,
s=status word, sold=previous status word, ch=character,
sf=skipfiles, pf=printfiles, sb=skipblocks, pb=printblocks,
se=skipelements, pe=printelements, fl=feet limit,
f=feet from load point, pa=parity errors allowed,
pt=parity errors found, bi=block interval, bbi=boolean bi,
inrange=fileno and blockno is within print range,
p=print this block,
ebcp=every block change printed,
pe54= 5 parity errors at block no 4( fifth block);
zone z(1280, 1, printb); <* max 10 segments per block*>
integer array param, ia(1:6);
boolean p, nbe, bbi, inrange, change, ebcp, first,
endsearch, tm, tmold, test, nrz, pe54, alarm;
array name, a, b(1:2);
real f, fl;
integer it, ib,
_ file, rest, oldfile, blold, sf, pf, sb, pb, se, pe,
ch, i, j, k, n, word, line, istart, eb, pa, pt, bi, blim, llimit,
sold, blmax, iparam, t2, t3;
procedure printb(z, s, bl); zone z; integer s, bl;
begin
if bl=0 and it>=0 then
begin
if s shift (-14) extract 1=1 and -, nrz then
begin
close(z, false);
it:=-1;
i:=1;
open(z, 4 shift 12 add 18 , string name(increase(i)), -1);
nrz:=true;
end
else
begin
endsearch:=true;
alarm:=true;
end;
end;
getposition(z, file, ib);
if s shift (-16) extract 1=1 then tm:=true
_ else tm:=false;
f:=f+bl/(if nrz then 6400 else 12800)+0.05;
comment record gap 0.05 feet assumed;
if f>fl then
endsearch:=true;
inrange:=file <sf+pf and file>=sf
and ib<sb+pb and ib>=sb;
change:=s<>sold or (bl<>blold and ebcp)or bl>blmax;
bbi:=it mod bi=0 and it>0;
p:=inrange or change or bbi or bl<4 or endsearch
or s shift (-20) extract 3 > 0
or s shift (-16) extract 3 > 0;
\f
comment tapescantx * page 2 26 03 80, 14.12
0 1 2 3 4 5 6 7 8 9 ;
if p then
begin
if it<0 or ib<0 then
write(out, nl, 1,
_ <<-dddd>, it, <<-dd>, file, <<-dddd>, ib, bl)
else
write(out,
nl, 1, <<ddddd>, it, <<ddd>, file, <<ddddd>, ib, bl);
if -, bbi then
begin write(out, sp, 2);
for i:=-20 step 4 until 0 do
begin ch:=s shift i extract 4;
if ch<10 then ch:=ch+48 else ch:=ch+87;
comment ch contain sextodecimal (hexadecimal) digit;
write(out, false add ch, 1);
end; write(out, sp, 2);
end else write(out, sp, 1, <<dddd>, f,
<:feet :>); comment end of sedecimal status;
llimit:=(pe-1)//2;
if -, inrange then llimit:=0;
if pe=0 then llimit:=-1;
if bl=0 then llimit:=-2;
if llimit*8>bl then llimit:=1+bl//8;
for line:=0 step 1 until llimit do
begin
if line>0 then write(out, nl, 1, sp, 28);
istart:= line*2+se+1;
for i:=istart, istart+1 do
begin
for j:=0, 1 do
begin
word:=z(i)shift((j-1)*24)extract 24;
for k:=-20 step 4 until 0 do
begin
ch:=word shift k extract 4;
if ch<10 then ch:=ch+48 else ch:=ch+87;
nbe:=(i-1)*4+j*2+(k+20)//12<bl;
if nbe then write(out, false add ch, 1)
else write(out, sp, 1);
end char;
write(out, sp, 1);
end word;
write(out, sp, 1);
end element;
for i:=istart, istart+1 do
for j:=-40 step 8 until 0 do
begin ch:=z(i)shift j extract 8;
if ch<32 or ch>126 then ch:=32;
nbe:=i*4+(j+48)//12<bl+2;
if nbe then write(out, false add ch, 1);
end char, element;
end line;
\f
comment tapescantx * page 3 26 03 80, 14.12
0 1 2 3 4 5 6 7 8 9 ;
if llimit=-1 then
begin
for i:=0 step 1 until 23 do
begin
if i mod 4=0 then write(out, sp, 1);
if i mod 12 =0 then write(out, sp, 1);
write(out, <<d>, s shift (i-23) extract 1);
end;
if tm then write(out, <: tapemark:>);
if s
shift (-22) extract 1=1 then write(out, <:parity error:>);
if s
shift (-17) extract 1=1 then write(out, <: load point:>);
end;
end print;
if s shift (-22) extract 1 = 1 then pt:=pt+1;
if pt>pa then
begin
write(out, nl, 1, <:parity errors exceeded:>, nl, 1);
endsearch:=true;
end;
if pt=1 and s shift (-22) extract 1=1 then
write(out, nl, 1, <:first parity error:>, nl, 1);
if pt=5 and it=4 then pe54:=endsearch:=true;
if s shift(-21)extract 1=1
or s shift (-18) extract 1=1
or s shift (-14) extract 1=1
or s shift (-6) extract 1=1
or s shift (-3) extract 1=1
then
begin
endsearch:=true;
if s shift (-14) extract 1=1 then
begin
if it>-1 then
write(out, nl, 1, <:mode error nrz-pe:>, nl, 1)
else endsearch:=false;
end;
if s shift (-21) extract 1=1 then
write(out, nl, 1,
_ <:timer, ie blank or wrong density tape found:>, nl, 1);
if s shift (-18) extract 1=1 then
write(out,
nl, 1, <:end document, i. e. physical end of tape:>, nl, 1);
if s shift (-6) extract 1=1 then
write(out, nl, 1, <:unintelligible:>, nl, 1);
if s shift (-3) extract 1=1 then
write(out, nl, 1, <:position error:>, nl, 1);
end status 0306141821;
if file>sf+pf-1
or (file=sf+pf-1 and ib>sb+pb-1)
then
begin
if ib=sb+pb then
write(out, nl, 1, <:last requested block printed:>, nl, 1);
if file=sf+pf then
write(out, nl, 1, <:last requested file printed:>, nl, 1);
endsearch:=true;
end;
\f
comment tapescantx * page 4 26 03 80, 14.12
0 1 2 3 4 5 6 7 8 9 ;
if tmold and tm then
begin
write(out, nl, 1, <:zero length file found:>, nl, 1);
if pa mod 3 =0 then
begin
endsearch:=true;
write(out, <: end of tape data assumed:>);
end;
end;
oldfile:=file;
sold:=s;
blold:=bl;
tmold:=tm;
if bl>blmax then blmax:=bl;
if ib=-1 or bbi then blmax:=0;
if endsearch then
begin
write(out, nl, 2, <<-dddd>, round f,
<: feet total at the end of search:>, nl, 1,
<<-d>, <:at file no.:>, file, <: and block no.:>, ib,
<: with block length:>, bl, <: 12 bit bytes:>,
nl, 1, <:total no. of blocks with start at zero was:>,
it, nl, 2);
if -, test then
begin
write(out,
<:status listed above is sedecimal (hexadecimal):>, nl, 1);
write(out, <:last binary status::>, sp, 4);
for i:=0 step 1 until 23 do
begin
if i mod 4 =0 then write(out, sp, 1);
if i mod 12 =0 then write(out, sp, 1);
write(out, <<d>, s shift (i-23) extract 1);
end loop;
write(out, nl, 2);
end nottest;
if pt>0 then
write(out, nl, 2, pt, <: parity error(s) found:>, nl, 2);
end endsearch;
it:=it+1;
if alarm then system(9, 0*write(out, nl, 1,
<:perhaps operator error pe-nrz<10>assumed mode is :>,
if nrz then <:nrz:> else <:pe:>, nl, 1), <::>);
end printb;
integer procedure findparamno(i); integer i;
begin
own integer k;
if k=0 then
begin integer s, p, f, b, e;
s:=115; p:=112; f:=102; b:=98; e:=101;
ia(1):=s*256+f; ia(2):=p*256+f;
ia(3):=s*256+b; ia(4):=p*256+b;
ia(5):=s*256+e; ia(6):=p*256+e;
end assign;
findparamno:=7;
for k:=1 step 1 until 6 do
if ia(k)=i then findparamno:=k;
end findparamno;
procedure stop;
begin
write(out,
nl, 1, <:error at tapescan parameter no.:>, iparam, nl, 1);
system(9, 0, <:<10>system9:>);
end;
\f
comment tapescantx * page 5 26 03 80, 14.12
0 1 2 3 4 5 6 7 8 9 ;
for i:=1, 3, 5 do param(i):=0;
param(2):=1000; param(4):=5; param(6):=2;
iparam:=1;
if readparam(name)<>2 then stop;
j:=readparam(a);
iparam:=iparam+1;
t2:=t3:=-1;
if j<>3 then stop;
fl:=a(1);
j:= readparam(a);
iparam:=iparam+1;
if j<>3 and j<>2 and j<>0 then stop;
if j=3 then pa:=t2:=a(1) else t2:=-1;
if j=3 then
begin j:=readparam(a); iparam:=iparam+1; end;
if j=3 then bi:=t3:=a(1) else t3:=-1;
if j<>3 and j<>0 and j<>2 then stop;
if j=3 then
begin j:=readparam(a); iparam:=iparam+1; end;
if j<>2 and j<>0 then stop;
first:=true;
if a(1)=real <:test:> then test:=true else test:=false;
if test then
begin
readparam(b);
if b(1)=real <:yes:> then test:=true else test:=false;
j:=readparam(a);
iparam:=iparam+2;
if j<>2 and j<>0 then stop;
param(4):=2;
end;
for j:=j while j<>0 do
begin
if -, first then
begin
j:=readparam(a);
iparam:=iparam+1;
end
else first:=false;
k:=readparam(b);
if j<>2 and j<>0 then stop;
iparam:=iparam+1;
if k<>3 and j<>0 and k<>0 then stop; comment not.<integer>;
n:=findparamno(a(1)shift(-32)extract 16);
iparam:=iparam -1;
if n=7 and j<>0 then stop; comment illegal letters;
iparam:=iparam+1;
if n<7 and j<>0 then param(n):=b(1);
end findparams;
if test then
begin
if t2=-1 then pa:=301;
if t3=-1 then bi:=200;
param(5):=param(6):=0;
end
else
begin
if t2=-1 then pa:=300;
if t3=-1 then bi:=200
end;
if round fl mod 2 = 0 then ebcp:=true else ebcp:=false;
\f
comment tapescantx * page 6 26 03 80, 14.12
0 1 2 3 4 5 6 7 8 9 ;
sf:=param(1); pf:=param(2);
sb:=param(3); pb:=param(4);
se:=param(5); pe:=param(6);
i:=1;
begin
if ebcp then write(out, nl, 1,
<:every change of block length printed:>, nl, 1);
write(out, nl, 1, <:tapescan parameters:>);
write(out, sp, 1, string name(increase(i)));
write(out, <:, feet limit=:>, <<ddddd>, fl);
write(out, <:, parity errors allowed:>, <<dddd>, pa, nl, 1);
write(out, <: block interval=:>, <<dddd>, bi);
write(out, <: skipfiles=:>, <<dddddd>, sf);
write(out, <:, printfiles=:>, <<dddddd>, pf);
write(out, nl, 1, sp, 30, <:skipblocks=:>, <<ddddd>, sb);
write(out, <:, printblocks=:>, <<ddddd>, pb);
write(out, nl, 1, sp, 30, <:skipelements=:>, <<ddd>, se);
write(out, <:, printelements=:>, <<ddd>, pe);
write(out, nl, 3);
write(out, <:total file block:>);
write(out, nl, 1, <: no. no. length:>);
write(out, nl, 1, <: of block:>);
write(out, nl, 1, <:blocks number status:>);
if pe<>0 then
begin
write(out, sp, 4, <:sedecimal (hexadecimal) dump:>);
write(out, sp, 3, <:iso dump:>, nl, 1);
end else write(out, sp, 10, <:binary status:>, nl, 1);
end heading;
i:=1;
alarm:=pe54:=nrz:=endsearch:=false;
open(z, 18, string name(increase(i)), -1);
setposition(z, 0, 0);
it:=blold:=-1; sold:=0;
oldfile:=-1; f:=0; pt:=0;
tm:=tmold:=false;
for rest:=inrec6(z, 0) while -, endsearch do
inrec6(z, rest);
close(z, true);
if pe54 then
write(out, nl, 1, <:first 5 blocks all with parity errors:>,
nl, 1, <:possibly :>, if nrz then <:1600:> else <:800:>,
_ <: named by operator with tapestation:>,
_ if nrz then <:botton=800 ( lights off):>
_ else <:botton=1600 (light on):>, nl, 1)
else
begin
if -, nrz then write(out, nl, 1,
_ <:this magtape is pe, i. e. phase encoded 1600 bpi:>
_ , nl, 1)
else
write(out, nl, 1,
_ <:this magtape is nrz, i. e. 800 bpi:>, nl, 1);
end;
end case 11, tapescan;
▶EOF◀