|
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: 26112 (0x6600) Types: TextFile Names: »uti25«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦f8e4b63af⟧ »trcfput« └─⟦this⟧
; rc 1979.04.04 copy skip ; jens ramsbøl, (tove ann aris) b. g2, f9 w. ; start insertproc block s.w. ; start code block d. p.<:fpnames:> l. ; global names: ; a-names: main-program names ; b-names: global parameters ; c-names: case-names ; d-names: procedure names ; e-names: error-handling programs and procedures ; h-names: fp-procedures ; local names: ; i-names: local parameters ; j-names: local labels b.a10,b27,c10,d25,e10 k=h55 w. ; definition of global parameters: b0: 0 ; <ok-byte><message.yes or no> b1: 0 ; output zone desc. addr b2: 0 ; termchar b3: 0 ; appearences b4: 1<12 ; graphic b5: 0 ; testsum b6: 0 ; bigchar(no of chars>=128) b7: 768 ; no of chars per segm b8: 0 ; no of chars (outside transfer) 0 ; temp. b9: 0 ; accumulated sum b10: 0 ; addr(outfile-name)(:=0 if no outfile) b11: 0 ; pointer(last item in command) b12: 0 ; pointer(first item in command) b13: a0. ; first free addr after program, after initialization: pointer(param) b14: 0 ; addr of program name b15: 0 ; 0 for copy, 1 for skip b16: 0 ; accumulated sum of bigchars b17: 0 ; accumulated sum of chars 0 ; accumulated b18: 0 ; sum of testsums b19: 1 ; list.yes list.no b20: 0 ; save addr for links b21: 0 ; save addr for links b22: 0 ; save addr for links b23: 0 ; save addr for links b24: <:cur.input<0>:> b25: 0 ; blind b26: 0 ; sub b27: 0 ; accumulated sub ; interprete command ; by exit: b11= pointer(last item in command) ; b12= pointer(first item in command) ; b13= pointer(first param) ; w1=addr(first item in next command) b.j8 w. a1: rl.w1 b11. ; load pointer(last item in last command); j0: jl.w3 d0. ; next param: jl. a2. ; end, .<param> jl. j1. ; <s><name> ; <s><integer> al w2 x1+2 ; pointer(first item)(b12):=poiter; ds.w2 b13. ; pointer(param)(b13):=pointer+2; jl.w3 d1. ; next item: jl. c5. ; end,<s> jl. e2. ; . <name> ; . <integer> jl.w3 d1. ; next item: jl. c6. ; end,<s> jl. e2. ; . <name> jl. e2. ; . <integer> j1: al w2 x1+2 ; pointer(first item)(b12):=pointer; ds.w2 b13. ; pointer(param)(b13):=pointer+2; jl.w3 d1. ; next item: jl. c1. ; end,<s> jl. j2. ; . <name> ; . <integer> jl.w3 d1. ; next item: jl. c2. ; end,<s> jl. e2. ; . <name> ; . <integer> jl.w3 d1. ; next item: jl. c3. ; end,<s> jl. e2. ; . <name> jl. e2. ; . <integer> j2: jl.w3 d1. ; next item: jl. c7. ; end,<s> jl. e2. ; . <name> ; . <integer> jl.w3 d1. ; next item: jl. c4. ; end,<s> jl. e2. ; . <name> jl. e2. ; . <integer> e. ; terminate copy b.j3 w. a2: al w1 0 ; rs.w1 b25. ; blind:=0 rl.w1 b27. ; rs.w1 b26. ; sub:=accumulated sub rl.w1 b17. ; sn.w1(b8.) ; if accumulated char<>char then jl. j0. ; begin rs.w1 b8. ; transfer accumulated rl.w1 b16. ; datas to temporary rs.w1 b6. ; registers dl.w1 b18. ; end ds.w1 b9. ; rl.w2 b10. ; if left side in call then se w2 0 ; jl.w3 d10. ; write message; j0: rl.w1 b10. ; sn w1 0 ; if no outfile then jl. j1. ; goto end of copy; rl.w1 b1. ; jl.w3 h95. ; close up-as it should be; jl.w3 h79. ; terminate zone; bz.w1 h19.+h1+1 ; decrease bs area: se w1 4 ; if kind(output-file)=4(=>bs area) then jl. j1. ; begin al.w1 b10. ; b10 is used as tail area; al.w3 h19.+h1+2 ; name addr:=name addr in zone desc; jd 1<11+42 ; lookup entry(tail addr,name addr); se w0 0 ; if result<>0 then goto end; jl. j1. ; rl.w0 h19.+h1+16; insert no of segments rs.w0 b10. ; in tail area; jd 1<11+44 ; change entry(tail addr,name addr); j1: bz.w2 b0. ; end: load return value; jl.w3 h7. ; end of copy, return to fp; e. ; terminate copy(sorry); a3: al w2 1<1+1 ; set warning and ok.no bit; jl.w3 h7. ; end of copy, return to fp; ; procedure connect error ; call: return: ; w0 error cause destroyed ; w1 destroyed ; w2 destroyed ; w3 link destroyed b. i4 w. e1: ds.w0 b22. ; save link and cause; jl.w3 d11. ; write error text; rl.w0 b13. ; jl.w3 h31.-2 ; write out <file>; rl. w2 b22. al. w0 i0. sn w2 1 al. w0 i1. sn w2 3 al. w0 i2. sn w2 4 al. w0 i4. sn w2 5 al. w0 i3. jl. w3 h31.-2 jl. (b21.) ; exit: i0: <: error<10><0>:> i1: <: no resources<10><0>:> i2: <: not found<10><0>:> i3: <: in use<10><0>:> i4: <: convention error<10><0>:> e. ; param error ; the routine writes out an error text together with the ; erroneous parameterstring and updates the pointer to ; next command b.j3 w. e2: jl.w3 d12. ; write error text; j0: rl.w2 b12. ; pointer:=pointer(item); bz w1 x2+1 ; param:=param(item); se w1 4 ; if param=<integer> then jl. j1. ; rl w0 x2+2 ; jl.w3 h32.-2 ; write out 'integer'; 1 ; format structure; jl. j2. ; else j1: al w0 x2+2 ; write out 'name'; jl.w3 h31.-2 ; j2: rs.w2 b11. ; pointer(last item):=pointer; ba w2 x2+1 ; pointer:=pointer(next item); bz w1 x2 ; sep:=seperator(next item); se w1 8 ; if sep<>'.' then jl. j3. ; goto end; rs.w2 b12. ; save pointer; al w2 46 ; jl.w3 h26.-2 ; outchar '.'; jl. j0. ; next loop; j3: al w2 10 ; char:=<nl>; jl.w3 h26.-2 ; outchar(char); jl. a1. ; exit: gto interprete command; e. ; error no space for share e4: jl.w3 d14. ; write error text; jl. a3. ; goto terminate copy; ; case 1 ; command: <infile> c1: jl. w3 d16. ; test copy or skip jl. c10. ; if skip then goto skip param jl.w3 d2. ; connect infile; al w0 25 ; termchar:=<em>; al w1 1 ; app:=1; ds.w1 b3. ; rl.w1 b10. ; if no left side in call then sn w1 0 ; no output<=> rs.w1 b1. ; b1:=0; jl.w3 d8. ; transfer; rl.w1 b10. ; if no outfile then al.w3 h21. ; out.zone addr:=current out.zone; sn w1 0 ; rs.w3 b1. ; jl. c8. ; c10: ; skip param: jl. w3 d7. ; test one small letter al w1 1 ; app:=1 ds. w1 b3. ; termchar:=letter jl. w3 d8. ; transfer; jl. a1. ; goto interprete command ; case 2 ; command: <small letter>.<app> c2: jl.w3 d4. ; jl. c9. ; ; case 3 ; command: <infile>.<iso-value>.<app> c3: jl. w3 d16. ; test copy or skip jl. e2. ; if skip then goto param error jl.w3 d2. ; connect infile; jl.w3 d5. ; case 6 routine; jl. c8. ; ; case 4 ; command: <infile>.<small letter>.<app> c4: jl. w3 d16. ; test copy or skip jl. e2. ; if skip then goto param error jl.w3 d2. ; connect infile; jl.w3 d4. ; test iso-value etc. c8: jl.w3 d6. ; write message; jl.w3 d3. ; disconnect infile; jl. a1. ; exit: goto interprete command; ; case 5 ; command: <lines> c5: al w0 10 ; termchar:=<nl>; rl.w1(b13.) ; app:=app; ds.w1 b3. ; al w0 0 ; rs.w0 b4. ; graphic:=0; jl.w3 d8. ; transfer; rl.w1 b10. ; if no left side incall then al w0 -1 ; rs.w0 b4. ; 'graphic'is set to a nonzero value; jl. c9. ; ; case 6 ; command: <iso-value>.<app> c6: jl.w3 d5. ; c9: al.w2 b24. ; load addr(<:cur.input:>); jl.w3 d10. ; write message; jl. a1. ; goto interprete command; ; case 7 ; command: message.yes, message.no, list.yes , list.no ; b15(0:11): 0(yes), 1(no) b.i3,j1 w. c7: jl. w3 d16. ; test copy or skip jl. e2. ; if skip then goto param error rl.w3(b13.) ; load param(pointer); se.w3(i0.) ; if param(0:2)<>'mes' sn. w3 (i3.) ; and param<>list jl. 4 ; then jl. j1. ; goto fejl; rl w3 x1-8 ; if next param='yes' then sn.w3(i1.) ; message.yes; jl. j0. ; goto exit; se.w3(i2.) ; if next param='no' then j1: jl. e2. ; message.no; am 1 ; goto exit; j0: al w1 0 ; error: goto param error; rl. w3 (b13.) ; sn. w3 (i0.) ; if message then hs. w1 b0.+1 ; save message state; sn. w3 (i3.) ; if list then rs. w1 b19. ; save list state; jl. a1. ; exit: goto interprete command; i0: <:mes:> i1: <:yes:> i2: <:no:> i3: <:lis:> e. ; procedure next item ; the procedure tests next item, updates the pointer(b11) if ; necessary, and returns to link, link+2,etc., corresponding ; to the cases: ; item: d0: d1: ; end link link ; <s><name> link+2 link ; <s><integer> link+4 link ; . <name> link link+2 ; . <integer> link link+4 ; ; call: return: ; w0 destroyed ; w1 pointer(last item) pointer(item) ; w2 destroyed ; w3 link destroyed b.j0 w. d1: am 4 ; testsep:='.'; d0: al w2 4 ; testsep:=<s>; ba w1 x1+1 ; pointer:=pointer(item); bz w0 x1 ; sep:=seperator(item); se w0 x2 ; if sep<>testsep then jl. j0. ; goto exit; al w3 x3+2 ; link:=link+2; bz w0 x1+1 ; param:=param(item); rs.w1 b11. ; save pointer; se w0 10 ; if param=<integer> then al w3 x3+2 ; link:=link+2; j0: jl x3 ; exit: goto link; e. ; procedure connect infile ; call: return: ; w0 0 if no error ; w1 destroyed ; w2 destroyed ; w3 link destroyed b.j0 w. d2: rs.w3 b20. ; save link; jl.w3 h29.-4 ; stack current input; rl.w2 b13. ; load addr(infile-name); jl.w3 h27.-2 ; connect <infile> to current input; sn w0 0 ; if error then jl. j0. ; write error-message; jl.w3 h30.-4 ; unstack current input; jl.w3 e1. ; jl. a1. ; goto interprete command; j0: rl.w3 b13. ; al w3 x3+10 ; pointer(param):=addr(next param); rs.w3 b13. ; jl. (b20.) ; exit: e. ; procedure disconnect infile ; call: return: ; w0 unchanged ; w1 destroyed ; w2 destroyed ; w3 link destroyed b. w. d3: rs.w3 b20. ; save link; jl.w3 h79.-4 ; terminate current input; jl.w3 h30.-4 ; unstack current input; jl. (b20.) ; exit: e. ; procedure used of c2 and c4 ; call: return: ; w0 destroyed ; w1 destroyed ; w2 destroyed ; w3 link destroyed b. w. d4: rs.w3 b20. ; save link; jl.w3 d7. ; test param; rl.w2 b13. ; pointer:=pointer(next param); al w2 x2+6 ; rs.w2 b13. ; jl.w3 d9. ; jl. (b20.) ; exit e. ; procedure used of c3 and c6 ; call: return: ; w0 destroyed ; w1 destroyed ; w2 destroyed ; w3 link destroyed b. w. d5: rl.w0(b13.) ; load pointer; d9: rs.w3 b21. ; save link; sl w0 0 ; sl w0 127 ; between 0 and 127 jl. e2. ; rl.w1 b13. ; rl w1 x1+4 ; termchar:=<iso-value>;; ds.w1 b3. ; jl.w3 d8. ; transfer; jl. (b21.) ; exit: e. ; procedure write message ; call: return: ; w0 addr(file) destroyed ; w1 destroyed ; w2 destroyed ; w3 link destroyed b. i6, j7 w. i0: 1000000 ; i1: <: <0>:> ; i2: 0, r.4 ; <:segm.<0>:> ; i3: <: >127: :> i4: <: sub: :> i5: <: blind: :> i6: 10 d6: rl.w2 b12. ; load pointer(first item); al w2 x2+2 ; pointer:=pointer(file-name); d10: rs.w3 b22. ; save link; dl w1 x2+2 ; lo. w0 i1. ; lo. w1 i1. ; ds. w1 i2.+2 ; dl w1 x2+6 ; lo. w0 i1. ; lo. w1 i1. ; extend name ds. w1 i2.+6 ; with spaces al. w0 i2. ; bz.w2 b0.+1 ; se w2 0 ; if message.no then jl. j7. ; goto exit; jl.w3 h31.-2 ; outtext <file>; al w0 767 ; al w3 0 ; wa. w0 b8. ; wd. w0 b7. ; jl. w3 h32.-2 ; outinteger(segm) 32<12+4 ; rl.w0 b8. ; jl.w3 h32.-2 ; outinteger <number of chars>; 32<12+ 8 ; format structure; al w2 47 ; char:=</>; jl.w3 h26.-2 ; outchar; dl.w0 b9. ; w0:=sum/10**6; wd.w0 i0. ; w3:=sum mod 10**6; rs.w3 b9. ; sn w0 0 ; if kvotient=0 then jl. j1. ; goto write sum; jl.w3 h32.-2 ; outinteger <kvotient>; 1 ; format structure; rl.w0 b9. ; jl.w3 h32.-2 ; outinteger <modulo>; 48<12+6 ; format structure; jl. j3. ; j1: rl.w0 b9. ; write sum: jl.w3 h32.-2 ; outinteger <sum>; 1 ; format structure; rl. w0 b9. ; if char=0 then sn w0 0 ; char:=char+1; ba. w0 1 ; j2: al w3 0 ; next: wm. w0 i6. ; char:=char*10; sh w0 0 ; if char jl. j3. ; >1000000 sl. w0 (i0.) ; then jl. j3. ; exit; al w2 32 ; jl. w3 h26.-2 ; outchar(sp); jl. j2. ; goto next; j3: rl.w0 b6. ; sn w0 0 ; if sum of bigchars>0 then jl. j4. ; al. w0 i3. ; jl. w3 h31.-2 ; outtext(<: >127 :> rl. w0 b6. ; jl.w3 h32.-2 ; outinteger <bigchar>; 1 ; format structure; j4: rl. w0 b26. ; if sub=0 then sn w0 0 ; skip; jl. j5. ; al. w0 i4. ; jl. w3 h31.-2 ; outtext(<: sub :> rl. w0 b26. ; jl. w3 h32.-2 ; outinteger(sub); 1 ; layout j5: rl. w0 b25. ; if blind=0 then sn w0 0 ; skip; jl. j6. ; al. w0 i5. ; jl. w3 h31.-2 ; outtext(<: blind :>); rl. w0 b25. ; jl. w3 h32.-2 ; outinteger(blind); 1 ; layout j6: al w2 10 ; char:=<nl>; jl.w3 h26.-2 ; outchar(char); j7: jl. (b22.) ; exit: e. ; procedure test one small letter ; call: return: ; w0 <iso-value> (if ok) ; w1 0 (if ok) ; w2 param addr destroyed ; w3 link destroyed b. w. d7: rl.w1 b13. ; dl w1 x1+2 ; load, param, param+2 ld w1 -16 ; sn w1 0 ; jl x3 ; exit: goto link; jl. e2. ; error: goto param error; e. ; procedure transfer ; the procedure takes a character from the input zone, tests ; it, updates 'number' and 'sum' and outputs the char on the ; output-zone ; call: return: ; w0 destroyed ; w1 destroyed ; w2 destroyed ; w3 link destroyed b.i1,j11 w. d8: rs.w3 b22. ; save link; al w0 0 ; al w1 0 ; ds.w1 b6. ; initiate counting words; ds.w1 b9. ; ds. w1 b26. ; jl. j0. ; j10: rl. w3 b25. ; al w3 x3+1 ; blind:=blind+1; rs. w3 b25. ; j0: rl.w3 b3. ; if app=0 then rs.w0 b8. sn w3 0 ; goto last jl. j8. jl.w3 h25.-2 ; inchar from current input; rs. w2 b8. ; save char; sn.w2(b2.) ; if char=termchar then jl. j7. ; goto found; se w2 0 ; if char=0 or 127 then sn w2 127 ; skip char+ jl. j10. ; goto nextchar; sn w2 25 ; if char=<em> then jl. j6. ; goto input exhausted; se w2 26 ; jl. j11. ; rl. w3 b26. ; al w3 x3+1 ; sub:=sub+1; rs. w3 b26. ; j11: sh w2 126 ; if 32<char<127 then sh w2 33 ; (<=> char is graphic) jl. j1. ; set 'graphic'>0; hs.w2 b4.+1 ; j1: al w3 x2 ; continue: wa.w3 b5. ; sum:=sum+char; sl.w3(i0.) ; if sum>=8388000 then jl. j5. ; goto update; j2: rs.w3 b5. ; sl w2 128 ; if char>=128 then jl. j4. ; goto bigchar; wa.w0 i1. ; number:=number+1; j3: rl.w1 b1. ; if no output then se w1 0 ; goto nextchar; jl.w3 h26. ; outchar; rl. w1 b19. ; if list.no then se w1 0 ; goto next char; jl. j0. ; rl. w2 b8. ; jl. w3 h26.-2 ; outchar(cur out); jl. j0. ; goto nextchar; j4: rl.w3 b6. ; bigchar: al w3 x3+1 ; rs.w3 b6. ; bigchar:=bigchar+1; jl. j3. ; j5: al w2 0 ; aa.w3 b9. ; accumulatedsum:= ds.w3 b9. ; accumulatedsum+sum; al w3 0 ; sum:=0; rl.w2 b8. ; load char; jl. j2. ; j6: rs.w0 b8. ; save 'no of chars'; jl.w3 d13. ; write error message; rl.w0 b8. ; al w3 0 ; jl. j8. ; j7: rl.w3 b4. ; found: sn w3 0 ; test if any graphic chars jl. j1. ; since last <nl>(only in function al w3 0 ; when the command is <lines>); hs.w3 b4.+1 ; graphic:=0; rl.w3 b3. ; al w3 x3-1 ; app:=app-1; rs.w3 b3. ; sl w3 1 ; if app>0 then jl. j1. ; goto continue sn w2 10 ; if termchar=10 then jl. j1. ; goto continue; ; end of transfer: rs.w0 b8. ; save number of chars; j8: wa.w0 b17. ; accumulate 'number of chars'; rs.w0 b17. ; dl.w1 b6. ; aa.w0 b9. ; save testsum; ds.w0 b9. ; aa.w0 b18. ; accumulate testsum; ds.w0 b18. ; wa.w1 b16. ; accumulate number of bigchar; rs.w1 b16. ; rl.w0 b26. ; accumulate sub wa.w0 b27. ; rs.w0 b27. ; bz.w0 b0.+1 ; rl.w1 b1. ; am -1000 sn.w1 h21.+1000 ; outfile=current output and se w0 0 ; then message.yes and jl. j9. ; outchar(nl); al w2 10 ; jl.w3 h26.-2 ; j9: jl. (b22.) ; exit: i0: 8388000 ; i1: 1 ; e. ; procedure error text ; the procedure writes out an error text and sets the ok-byte ; call: return: ; w0 destroyed ; w1 destroyed ; w2 destroyed ; w3 link destroyed b.i5 w. i0: <:***<0>:> i1: <: connect <0>:> i2: <: param <0>:> i3: <: end medium<10><0>:> i4: <: no core<10><0>:> i5: <: call<10><0>:> d15: am i5-i4 ; error : call d14: am i4-i3 ; error: no core d13: am i3-i2 ; error: end medium d12: am i2-i1 ; error: param d11: al.w2 i1. ; error: connect al w0 2 ; set warning bit; hs.w0 b0. ; al.w0 i0. ; rs.w3 b23. ; save link; jl.w3 h31.-2 ; output error message on current output; rl. w3 b14. ; al w0 x3+2 ; jl. w3 h31.-2 ; write(out,programname) al w0 x2 ; jl.w3 h31.-2 ; jl. (b23.) ; exit: e. ; procedure copy or skip ; call return ; w0 destroyed ; w1 ; w2 ; w3 link link d16: al w0 0 ; se. w0 (b15.) ; jl x3 ; return skip jl x3+2 ; return copy ; init copy b.i0,j1 w. f1: ; entry copy a0: rs.w3 b11. ; save pointer(item); rs. w3 b14. ; save program name sn x2 w3 ; if no left side in call then jl. a1. ; goto interprete commands; al w2 x2+2 ; addr:=addr(outfile name); rs.w2 b10. ; save addr; al.w1 b13. ; wa.w1 b13. ; save first free rs.w1 b13. ; addr after program; al w0 x1+512 ; is there space enough for sl w0 x3 ; a share between the pg. jl. e4. ; and the command stack am -2048 al.w1 h19.+2048 ; rs.w1 b1. ; jl.w3 h79. ; terminate current program zone rl.w3 b13. ; am -2048 rs.w3 h80.+2+2048; insert share in share desc. al w0 1<1+ 1 ; jl.w3 h28. ; connect <outfile> to current pg. zone; sn w0 0 ; if no error then jl. j0. ; exit: goto changeentry; rl.w3 b10. ; else rs.w3 b13. ; jl.w3 e1. ; write out errror-message; jl. a3. ; goto terminate(sorry); j0: bl w0 x1+h1+1 ; sn w0 4 ; if -,bs and jl. 6 ; -,mt se w0 18 ; then jl. a1. ; goto interprete commands; am -1000 al. w1 h54.+1000 ; w1:=lookup area; rl. w2 b10. ; w2:=name addr jl. w3 f9. ; prepare entry for textoutput jl. a1. ; goto interprete commands e. ; init skip f2: al w0 1 ; entry skip: rs. w0 b0. ; message.no ds. w0 b15. ; save program name rs. w3 b11. ; save pointer(item) sn w2 x3 ; if no left side then jl. a1. ; goto interprete param jl. w3 d15. ; else goto error call jl. a3. ; goto terminate(sorry) f9: ; procedure prepare entry for textoutput ; w0 not used ; w1 lookup area ; w2 name addr, entry must be present ; w3 return addr b. a2 w. ds. w1 a1. ; save w0.w1 ds. w3 a2. ; save w2.w3 al w3 x2 ; w3:=name addr jd 1<11+42 ; lookup bz w2 x1+16 ; sh w2 32 ; if contents=4 or sn w2 4 ; contents>=32 jl. 4 ; then jl. a0. ; file:=block:=0; rs w0 x1+12 ; rs w0 x1+14 ; a0: rs w0 x1+16 ; contents.entry:=0; rs w0 x1+18 ; loadlength:=0; dl w1 110 ; ld w1 5 ; shortclock; rl. w1 a1. ; rs w0 x1+10 ; jd 1<11+44 ; changeentry; dl. w1 a1. ; restore w0,w1 dl. w3 a2. ; restore w2,w3 jl x3 ; return 0 ; saved w0 a1: 0 ; saved w1 0 ; saved w2 a2: 0 ; saved w3 e. e. ; end of copy f3=k-h55 ; length of copy skip m.rc 1978.04.17 copy skip ; insert tails in catalog ; the entries are given by f1 and f2 ; load length by f8 f8=k-h55 ; entry copy g0: (:f8+511:)>9 ; no. of segm 0, r.4 ; s2 ; date 0,0 ; file, block 2<12+f1-h55 ; contents, entry f3 ; ; entry skip g1: 1<23+4 ; bs 0, r.4 ; s2 ; date 0,0 ; file, block 2<12+f2-h55 ; contents, entry f3 ; length d. p.<:insertproc:> l. e. e. ▶EOF◀