|
|
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: 5376 (0x1500)
Types: TextFile
Names: »retsave5tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »retsave5tx «
save51tx=edit save5tx
; blocklength error in get_file_nos for blocklength = 4, 7, 10
;
; give up if timer status from tape if not empty input
;
; no of shares always = 3
;
l./message declare zones page 1;/, l-1, r/88.08.11/90.02.13/
l./no_of_shares :=/, r/if segm/<*if segm/, r/2 else/2 else*>/
l./message end of document page 1;/, l-1, r/84.06.06/90.02.13/
l./<******/,
d./end <*end of document*>;/, d./end <*end of document*>;/, i#
<**********************************************************>
<* *>
<* The procedure acts as a block procedure in the zone ar-*>
<* ray za (1:no_of_copies + 1) and supposes that there are*>
<* no other user bits in the status than 1<18, e. o. d. *>
<* and 1 shift 21, timer. *>
<* The purpose of the procedure is to : *>
<* - give up and call stderror if give up bit is raised *>
<* - in case of end of document status, *>
<* signal end of document status in the global boolean *>
<* array end_of_doc indexed with the index found in the *>
<* partial word of the zone ztape (set there by openin- *>
<* out or explicitly by the program in case of normal *>
<* record io). *>
<* - in case of timer status, give up if anything else *>
<* then empty input (which might be unrecorded media on *>
<* streamer casette tape) *>
<* - ignore the status if the operation was output *>
<* - simulate a block of 2 halfs if the operation was in- *>
<* put and nothing was transferred *>
<* *>
<**********************************************************>
integer array zdescr (1:20), sdescr (1:12);
integer index, operation;
if status extract 1 = 1 then
give_up (ztape, status, hwds);
if status shift (-21) extract 1 = 1 then
begin <*timer*>
if not (operation = 3 and
hwds = 0 ) then
give_up (ztape, status, hwds);
end
else
if status shift (-18) extract 1 = 1 then
begin <* end of document *>
getzone__6 (ztape, zdescr );
getshare_6 (ztape, sdescr, zdescr (17)); <*used share*>
index := zdescr (12);
operation := sdescr ( 4) shift (-12);
end_of_doc (index) := true;
end <* end of document *>;
if operation = 3 <* input*> and
hwds = 0 <*nothing xferred*> then
hwds := 2;
end <*end of document*>;
#, p-2
l./page ...110/, l./message prepare tapes and ida page 1;/,
l-1, r/84.10.31/90.01.16/
l./get_filenos/, l-1, d2, i#
begin <*special block for decl of zones for get file nos*>
integer high, low, segs_pr_buf_low, segs_pr_buf_high, segs_pr_buf;
array ra (1:2);
low := system (15, high, ra);
segs_pr_buf_low :=
if low <= 1022 then
0
else
((low - 1022) shift (-9)) // no_of_copies;
segs_pr_buf_high :=
if high <= 1022 then
0
else
((high - 1022) shift (-9)) // no_of_copies;
segs_pr_buf :=
if segs_pr_buf_high >= segs_pr_buf_low then
segs_pr_buf_high
else
segs_pr_buf_low;
if segs_pr_buf > 84 then
segs_pr_buf := 84; <*max allowed tape buffer*>
if test then
write (out,
"nl", 2, <:special block for declare zones for get_filenos:>,
"nl", 1, <:low = :>, low,
"nl", 1, <:segs pr buf low = :>, segs_pr_buf_low,
"nl", 1, <:high = :>, high,
"nl", 1, <:segs pr buf high = :>, segs_pr_buf_high,
"nl", 1, <:segs pr buf = :>, segs_pr_buf);
<*100 halfs for call of opentape, ff., rounded up to 1022*>
<* 42 halfs for one share descriptor , rounded up to 1022*>
begin <*extra block for decl of zone array*>
zone array ztape (no_of_copies,
if segs_pr_buf_high >= segs_pr_buf_low then
segs_pr_buf * 128
else
1 shift 23 +
segs_pr_buf * 128,
1,
end_of_document);
get_filenos (ztape, no_of_copies, vol_count, no_of_vol,
tapename , device_no, modekind , fileno);
end;
end;
#, p-20
l./setposition (ztape/, l2, i/
trap (traplabel); <*to release and remove processes*>
/, p-1
f
▶EOF◀