|
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: 9216 (0x2400) Types: TextFile Names: »checktapetx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »checktapetx «
mode list.yes checktape=algol, survey.yes begin integer file, block, length, format, i, sepleng, segm, giveup; long array name, param (1:2); boolean test; real array field from, to; write (out, "nl", 2, <:call : checktape ( segm.<integer> ):>, "nl", 2, <: default : segm.9:>); setposition (out, 0, 0); param (1) := param (2) := long <::>; i := 1; segm := 9; <*default*> for sepleng := system (4, increase (i), param) while sepleng = 4 shift 12 + 10 do if param (1) = long <:segm:> and system (4, increase (i), param) = 8 shift 12 + 4 then segm := param (1); write (out, <:<10>segm : :>, segm, "nl", 1); setposition (out, 0, 0); begin <*block for zone*> zone z (segm * 128<* + 2*>, 1, ignore_eot); integer procedure out_text_in_int (z, text); zone z ; string text ; begin integer int; write (z, text); setposition (z, 0, 0); read (z, int ); setposition (z, 0, 0); out_text_in_int := int; end out_text_in_int; procedure ignore_eot (ztape, status, hwds); value status ; zone ztape ; integer status, hwds ; begin <**********************************************************> <* *> <* The procedure acts as a block procedure in the zone *> <* ztape and supposes that there are *> <* no other user bits in the status than 1<18, e. o. d., *> <* and 1 shift 14, mode error. *> <* The purpose of the procedure is to : *> <* *> <* If give up bit is raised , dummy answer : *> <* - give up and call stderror *> <* *> <* If give up bit is raised, normal answer : *> <* - write out the status word and ignore *> <* *> <* If end of document status : *> <* - ignore the status if the operation was output *> <* - simulate a block of 2 halfs if the operation was in- *> <* put and nothing was transferred *> <* *> <* If mode error status : *> <* - try the next mode in the reportoire and give up if *> <* all have been tried *> <* - close the zone, open it again with new mode, setpo- *> <* sition, check position operation (with possible call *> <* of block procedure) and return with bytes transfer- *> <* red = 0. *> <* *> <**********************************************************> integer array zdescr (1:20), sdescr (1:12); integer operation, i, j, nextmode; long array field docname; own integer startmode; docname := 2; <*fields docname in zone*> if status extract 2 = 1 then <*dummy answer, give up bit*> std_error (ztape, status, hwds) else if status extract 2 = 3 then begin <*normal answer, give up bit*> write (out, "nl", 2, <:*status = :>); for i := 0 step 1 until 23 do if status shift i < 0 then write (out, "sp", 1, case (i + 1) of ( <:intervention:>, <:parity error:>, <:timer:>, <:data overrun:>, <:block length error:>, <:end of document:>, <:load point:>, <:tape mark:>, <:writing enabled:>, <:mode error:>, <:read error:>, <:disk error:>, <:checksum error:>, <:bit 13:>, <:bit 14:>, <:stopped:>, <:word defect:>, <:position error:>, <:process does not exist:>, <:disconnected:>, <:unintelligible:>, <:rejected:>, <:normal answer:>, <:give up:> )); end <*normal answer, give up bit*>; getzone__6 (ztape, zdescr ); getshare_6 (ztape, sdescr, zdescr (17)); <*used share*> operation := sdescr ( 4) shift (-12); if status shift (-18) extract 1 = 1 <*eot*> and operation = 3 <*input*> and hwds = 0 <*nothing xferred*> then begin <*eot and nothing input*> hwds := 2; status := 0; end else if status shift (-14) extract 1 = 1 then begin <*mode error*> if startmode = 0 then startmode := 1 shift 11 add (zdescr (1) shift (-12) extract 11); for i := 1 step 1 until 6 do if zdescr (1) shift (-12) extract 11 = ( case i of ( 0, 2, 4, 6, 128, 132 ) ) then begin j := i; i := 6; end; j := if j = 6 then 1 else j + 1; nextmode := 1 shift 11 add ( case j of ( 0, 2, 4, 6, 128, 132 ) ); if test then write (out, "nl", 2, <:block procedure tape zone :>, "nl", 1, <:operation = :>, operation, "nl", 1, <: , mode = :>, sdescr (4) extract 12, "nl", 1, <:status = :>, status, "nl", 1, <:hwds xferred = :>, hwds, "nl", 1, <:file count = :>, zdescr (7), "nl", 1, <:block count = :>, zdescr (8), "nl", 1, <:startmode = :>, startmode extract 11, "nl", 1, <:next mode = :>, next_mode extract 11); if nextmode = startmode then std_error (ztape, status, hwds); close (ztape, false); open (ztape, nextmode shift 12 + 18, zdescr.docname, giveup); setposition (ztape, zdescr (7), zdescr (8)); write (out, "nl", 2, <:*mode error on :>, true, 12, zdescr.docname, "sp", 1, <:, trying :> , case j of ( <:mtlh:>, <:mte :>, <:mtll:>, <:nrze:>, <:mthh:>, <:mthl:>)); status := hwds := 0; <*position checked ok, in case of inrec repeat*> end <*mode error*> else if status shift (-6) extract 1 = 1 then begin <*position error*> hwds := 2; status := 0; end; end <*ignore eot*>; test := false; giveup := 1 shift 18 + 1 shift 14 + 1 shift 7; <*eot, mode error, w.defect*> write (out, <:<10>name : :>); setposition (out, 0, 0); readstring (in, name, 1); open (z, 18, name, giveup); for format := out_text_in_int (out, <: format : 0 all below except bits 1 halfword 2 word 3 long 4 real 5 text 6 text 7 bits 8 chars 9 all : :>) while format >= 0 do begin <*format*> for file := out_text_in_int (out, <:<10>file : :>) while file >= 0 do begin <*file*> for block := out_text_in_int (out, <:<10>block : :>) while block >= 0 do begin <*block*> setposition (z, file, block); length := inrec6 (z, 0); inrec6 (z, length); for from := out_text_in_int (out, <:<10>from hwd : :>) while from >= 0 do begin <*from*> for to := out_text_in_int (out, <:<10>to hwd : :>) while to >= 0 do begin <*to*> if from > length then from := length; if to > length then to := length; if to < from then to := from ; write (out, <:<10>tapename : :>, name, <: file : :>, file, <: block : :>, block, <: length : :>, length); if length > 0 then write_all (out, z.from, to - from + 2, format); end <*to*>; end <*from*>; end <*block*>; end <*file*>; end <*format*>; close (z, false); end <*block for zone*>; end; scope user checktape end ▶EOF◀