|
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: 62208 (0xf300) Types: TextFile Names: »kkfptxt33«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦80d78256e⟧ »kkmon4filer« └─⟦this⟧
m. fp text 3 \f ; fp text 3 ; rc 19.02.73 file processor, init, page 1 ; initialize the file processor s. k=h55, e48,b12 ; begin w. 512 ; length ; segment 10: e0: al. w0 h12. ; init: word(first of process) := rs. w0 h12. ; first of process; am (66) ; parent: rl w1 50 ; h17:=parent address; rs. w1 h17. ; search the nametable rl w2 78 ; to find the nametable address al w2 x2+2 ; of the parent (to be used at se w1 (x2-2) ; parent-messages); jl. -4 ; rx. w2 h44.+8 ; rs. w2 b8. ; first:=(old addr=0); al. w3 h10. ; al w0 0 ; jd 1<11+0 ; set interrupt (0,fp break); am (66) ; get parent name: rl w2 50 ; w2:=parent; dl w1 x2+4 ; ds. w1 h44.+2 ; move parent name dl w1 x2+8 ; to resident fp; ds. w1 h44.+6 ; rl w1 66 ; set catbase: dl w1 x1+78 ; set catbase(standard); al. w3 b4. ; jd 1<11+72 ; ; initialize current out: rl. w2 h15. ; create c: rl w0 x2 ; kind := kind of prim out; sl w0 20 ; if kind > 18 then al w0 8 ; kind := tw; wa. w0 b0. ; al. w1 b1. ; tail(0) := 1<23 + kind; rs w0 x1 ; dl w0 x2+4 ; ds w0 x1+4 ; tail(2:8) := dl w0 x2+8 ; process name(prim out); ds w0 x1+8 ; al. w3 b2. ; e11: jd 1<11+40 ; create entry(<:c:>); se w0 3 ; if not allready exists jl. e12. ; then goto check created; \f ; rc 06.10.72 file processor, init, page 2 al. w1 h54. ; c exists allready: jd 1<11+42 ; lookup entry(c); se w0 0 ; if not found jl. e5. ; then goto failure; dl. w3 b5. ; compare proc.names: sn w2 (x1+2) ; if first part of name se w3 (x1+4) ; does not fit jl. e10. ; then goto remove c; dl. w3 b6. ; sn w2 (x1+6) ; if second part of name se w3 (x1+8) ; does not fit jl. e10. ; then goto remove c; jl. e6. ; goto initialize curr in; e10: al. w3 b2. ; remove c: jd 1<11+48 ; remove entry(c); al. w1 b1. ; jl. e11. ; goto create c; ; check created: e12: se w0 0 ; if not created then jl. e5. ; goto failure; ; initialize current in: e6: rl. w2 h17.-2 ; create v: rl w0 x2 ; kind := kind of prim in; sl w0 20 ; if kind > 18 then al w0 8 ; kind := tw; wa. w0 b0. ; al. w1 b1. ; tail(0) := 1<23 + kind; rs w0 x1 ; dl w0 x2+4 ; ds w0 x1+4 ; tail(2:8) := dl w0 x2+8 ; process name (prim in); ds w0 x1+8 ; al. w3 b3. ; e13: jd 1<11+40 ; create entry(<:v:>); se w0 3 ; if not allready exists jl. e14. ; then goto check created; al. w1 h54. ; v exists allready: jd 1<11+42 ; lookup entry(v); se w0 0 ; if not found jl. e5. ; then goto failure; dl. w3 b5. ; compare proc.names: sn w2 (x1+2) ; if first part of name se w3 (x1+4) ; does not fit jl. e15. ; then goto remove v; dl. w3 b6. ; sn w2 (x1+6) ; if second part of name se w3 (x1+8) ; does not fit jl. e15. ; then goto remove v; jl. e7. ; goto init zones; e15: al. w3 b3. ; remove v: jd 1<11+48 ; remove entry(v); al. w1 b1. ; jl. e13. ; goto create v; ; check created: e14: se w0 0 ; if not created then jl. e5. ; goto failure; \f ; rc 06.10.72 filiprocessor init, page 3 ; initialize current zones and shares (max double buffered) e7: rl. w3 h16. ; init current zones: dl w2 x3+24 ; al w1 x1-1 ; base.prog:= first addr.proc -1; al w2 x2-1 ; last.prog:= top addr.proc -1; ds. w2 h19.+h0+2 ; al w1 x2-h91*512 ; base.out:= last.prog -h91*512; ds. w2 h21.+h0+2 ; last.out:= last.prog; al w3 x1+1 ; base.in:= base.out -h90*512; rs. w3 h82.+2 ; last.in:= base.out; e1: al w3 x3+512 ; c. h91-2 ; comment: the init code will rs. w3 h82.+2+h6 ; handle single and double z. al w0 x1-h90*512 ; buffered io zones; ds. w1 h20.+h0+2 ; ba. w0 1 ; first shared.first share.out:= rs. w0 h81.+2 ; base.out +1; c. h90-2 ; ba. w0 e1.+1 ; first shared.last share.out:= rs. w0 h81.+2+h6 ; base.out +1 + (h91-1)*512; z. al. w0 h80. ; first shared.first share.in:= rs. w0 h19.+h0+4 ; base.in +1; rs. w0 h19.+h0+6 ; first shared.last share.in:= rs. w0 h19.+h0+8 ; base.in +1 + (h90-1)*512; al. w1 h81. ; e2= (:h90-1:)*h6 ; set first,last share in prog; al w2 x1+e2 ; ds. w2 h20.+h0+8 ; set first,last share in out; al. w1 h82. ; e3= (:h91-1:)*h6 ; set first,last share in in; al w2 x1+e3 ; ds. w2 h21.+h0+8 ; \f ; rc 05.06.73 file processor, init, page 4 e4: al w0 1<1 ; connect in and out: al. w2 b2. ; no of segs := 1; device := drum; jl. w3 h28.-2 ; connect out (c , out zone); se w0 0 ; if result <> 0 then jl. e5. ; goto failure; al. w2 b3. ; connect in (v , in zone); jl. w3 h27.-2 ; if result <> 0 then se w0 0 ; goto failure; jl. e5. ; al w0 1 ; al. w1 h68. ; set i-bit to zero in cur input; ds. w1 h93. ; clear give up masks in all zones; al w0 0 ; set fp stdaction as ds. w1 h92. ; give up action in all cur. zones; rl. w3 h20.+h0+0 ; init command pointers: al w3 x3-1 ; current command pointer:= rs. w3 h8. ; last of commands:= rs. w3 h9. ; base.in -1; al w0 0 ; current name chain(0):= 0; rs. w0 h50. ; am. (b8.) ; if not first sn w1 x1 ; then jl. e16. ; begin al. w0 b7. ; outtext(<:***fp reinitialized:>); jl. w3 h31.-2 ; al w2 3 ; goto end program; jl. h7. ; jl. w3 h33. ; end; e16: jl. h61. ; call and enter command segment; e5: al. w1 b9. ; failure: al. w3 h44. ; parent message jd 1<11+16 ; (<:***fp init troubles:>); jd 1<11+18 ; jl. w3 h14. ; goto finis; jl. e4. ; at start: goto connect in and out; b0: 1<23 ; b1: 0 ; file descriptor; 0 ; b5: 0 ; first half of name; 0 ; b6: 0 ; second half of name; 0, r.5 ; rest of tail; b2: <:c:>,0,0,0 ; b3: <:v:>,0,0,0 ; b4: 0 ; zero used in set catbase b7: <:***fp reinitialized<10><0>:> b8: 0 ; first (boolean) b9: 8<13+0<5 ; parent message <:***fp init troubles :> b. g1 ; begin g1= (:h55+512-k:)/2 ; fill up segment to 512 bytes: c. -g1 m.length error on fp segment 11 z.w. 0, r.g1 ; zero fill e. ; end fill up; c. h90-3 m.fp init, buf error: in z. ; c. h91-3 m.fp init, buf error:out z. ; m.fp init 05.06.73 i. ; maybe names e. ; end init; \f \f ; rc 21.04.72 file processor, commands, page 1 ; command assembly: s. w. b. k=h55, e48, j24 ; begin w. 1024 ; length ; segment 11: rl. w3 h41. ; save segment number of hs. w3 j2. ; command reading segment; al. w2 h55.+516 ; initialize char save area: rs. w2 h55.+512 ; start:= slut:= rs. w2 h55.+514 ; first of cycl buf; e0: al. w2 h55.+534 ; state:=composite count:= 0; rs. w2 e8. ; delimpointer:= first free; dl. w0 e4. ; value pointer:=delim pointer+2; ds w0 x2+0 ; delim word:= start command; rl. w0 e3. ; comment: the stack begins with rs. w0 (h9.) ; the bytes: 4,2, 2,2; al w3 x2+2 ; last of commands:= end mark; rs. w2 e10. ; init saved delimpointer; jl. e25. ; goto input char; e3: -4<12+0 ; end command mark 2<12+2 ; start command mark e4: 2<12+2 ; nl-mark e7: 0 ; value pointer e8: 0 ; delim pointer e5: 0, e6=e5+1 ; state, composite count e10: 0 ; saved delim pointer e9: 0, ; saved state, saved comp. count e11: <:***fp cancel<0>:>; cancel text e13: 0 ; common return ; procedure next char; ; reads the next non-blind character from current input. ; end of medium and non-text characters cause unstacking ; of input (possibly with an error message) and reading ; continues from the old current input. ; registers call return ; w0 destroyed ; w1 character class ; w2 character value ; w3 link link e20: rs. w3 e13. ; begin jl. w3 h25.-2 ; next char: se w2 0 ; if char = 0 sn w2 127 ; or char = 127 then jl. j1. ; bypass char saving; rl. w3 h55.+512 ; save char in cycl buf: hs w2 x3 ; buf(pointer):=char; al w3 x3+1 ; pointer:=pointer+1; sh. w3 h55.+529 ; if pointer>last of buf jl. e12. ; then begin rs. w3 h55.+514 ; start:=irrelevant; al. w3 h55.+516 ; pointer:=first of buf; e12: rs. w3 h55.+512 ; end; \f ; rc 17.08.72 file processor, commands, page 1a j1: bz. w1 x2+e47. ; char:=inchar(cur in); sl w2 128 ; class:=table(char,3); jl. e45. ; if char>127 then goto off; la. w1 e28. ; if class=12 then begin al. w3 e20.+2 ; eom: unstack(cur in,cur chain); sn w1 12 ; goto next char; end; jl. w0 h30.-4 ; if class=9 then sn w1 9 ; blind char: jl. e20.+2 ; goto next char; sn w1 14 ; if class=14 then jl. e19. ; goto cancel; jl. (e13.) ; end next char; ; input character: e25: rs. w3 e7. ; input char: save value pointer; e26: jl. w3 e20. ; get char: char,class:=next char; dl. w0 e5. ; if savestack then begin e17=k+1, sn w1 x1 ; save (delim pointer, ds. w0 e9. ; state, composite count); hs. w2 e17. ; savestack:=false; end; se w1 10 ; if class=skip space sn w1 11 ; or class=skip line jl. e21. ; then goto skip; sl w1 8 ; if class>7 then jl. e22. ; goto syntax; \f ; rc 1.7.69 file processor, commands, page 2 e23: ba. w1 e5. ; get action and state: bz. w0 x1+e47. ; lookup in state table: ld w1 -8 ; index:=8*state+class; ls w0 3 ; action:=table(index,2); hs. w0 e5. ; state:=table(index,1); ls w1 -20 ; w0=action addr bl. w0 x1+e48. ; w1=action number (0 to 15) rl. w3 e7. ; w2=character value am (0) ; w3=value pointer e24: jl. e24. ; enter action (w0); e21: hs. w1 e14. ; skip: save class; jl. w3 e20. ; new: char,class:=next char; e28: sn w1 15 ;used ; if alarm then jl. e22. ; goto syntax; se w1 7 ; if not new line then jl. e21.+2 ; goto new; al w0 0 ; savestack:=true; hs. w0 e17. ; causes saving at next char; am -4 ; class:=saved class-4; e14=k+1 ; saved class ; comment: transforms al w1 10 ; <,> to <sp>, and <;> to <nl>; jl. e23. ; goto get action and state; ; the action numbers are chosen so that the separator value ; can be computed from the action: sep:=(action number)//2*2-6. e30=e26 ; empty: goto get char; e31: ld w1 -65 ; init name: ds w1 x3+2 ; words(value pointer) to: ds w1 x3+6 ; (value pointer+6):=0; al w1 10 ; increase:=10; hs w1 x3-1 ; count:=121; al w1 121 ; goto test count; jl. j0. ; e35: al w1 121 ; pack name: al w1 x1-11 ; count:=count-11; j0: hs. w1 e35.+1 ; test count: sh w1 0 ; if count <= 0 then jl. e22. ; goto syntax; sz w1 16 ; word(value pointer):= ls w2 8 ; word(value pointer) + sz w1 28 ; character value shift ls w2 8 ; (count mod 33/11*8); lo w2 x3+0 ; if count mod 33=0 rs w2 x3+0 ; then value pointer:= sz w1 28 ; value pointer+2; jl. e25. ; goto input char; al w3 x3+2 ; jl. e25. ; e33: al w0 0 ; init integer: al w1 4 ; word(value pointer):=0; rs w0 x3+0 ; increase:=4; hs w1 x3-1 ; \f ; rc 21.04.72 file processor, commands, page 3 e37: al w2 x2-48 ; pack integer: al w1 10 ; char:=char-iso digit base; wm w1 x3+0 ; word (value pointer):= wa w1 4 ; 10*word (value pointer) + char; se w0 0 ; if too big then goto syntax; jl. e22. ; goto input char; rs w1 x3+0 ; jl. e25. ; e36: am +2 ; increase: change:= +1; or: e34: al w0 -1 ; decrease: change:= -1; ba. w0 e6. ; composite count:= hs. w0 e6. ; composite count+change; sh w0 -1 ; if composite count<0 jl. e22. ; then goto syntax; jl. e44. ; goto set delimeter; e40: am e31-e33 ; space name: place to go:= init name; e41: am e33-e25 ; space int: place to go:= init integer; e39: e42: ; e44: al. w3 e25.+0 ; set delimeter: e46: rs. w3 e13. ; set equal: set dot: ls w1 -1 ; place to go:= input char; if not mod. al w0 x1-3 ; separator value:= ls w0 13 ; (action number)//2*2-6; rl. w1 e8. ; delim pointer:= ba w1 x1+1 ; delim pointer+increase; rs. w1 e8. ; value pointer:=delim pointer+2; al w3 x1+2 ; delim word:=separator shift 12 + 2; hl. w0 -1 ; if room enough then rs w0 x1+0 ; goto place to go; sh. w3 (h8.) ; stack overflow: jl. (e13.) ; goto stack overflow; jl. e18. ; e32: dl. w0 e5. ; save stack: ds. w0 e9. ; save current status of the stack; jl. e26. ; goto get char; e38: dl. w0 e5. ; test end: ba w3 x3+1 ; update delim pointer; ds. w0 e9. ; save stack status; sz w0 2047 ; place to go:= if composite count <> 0 jl. e44. ; then input char else jl. w3 e46. ; end of commands; goto set delimeter; e29: rl. w2 h8. ; end of commands: al w3 x3-2 ; for addr:=value pointer-2 rl w0 x3+0 ; step -2 until first free do begin al w2 x2-2 ; cur comm:=cur comm-2; rs w0 x2+0 ; word(cur comm):=word(addr); se. w3 h55.+532 ; end; jl. e29.+2 ; al w1 -1-1<7 ; oldmode:= fp mode bits; la. w1 h51. ; fp mode bits:= fp mode bits remove if; rx. w1 h51. ; comment: clear if bit; sz w1 1<7 ; if oldmode (if bit) = 1 then jl. h61. ; call and enter read commands; rs. w2 h8. ; goto program load segment; jl. h62. ; \f ; rc 08.04.72 file processor, commands, page 4 ; error handling: e22: ; syntax: e43: ; new line error e45: am 1 ; error e18: al w0 0 ; stack overflow j2=k+1 al w3 1 ; goto command reading al w3 x3+1 ; error segment; jl. h70.+2 ; e19: al. w0 e11. ; cancel: text:=cancel; jl. w3 h31.-2 ; outtext (cur out, jl. w3 h39. ; <:***fp <text>:>); dl. w3 e9. ; outend(new line); rs. w3 e5. ; restore state: comp.count:= al w1 x2+2 ; state:= delim pointer:= saved values; ds. w2 e8. ; value pointer:=delim pointer+2; al w0 0 ; increase.delimp:= 0; hs w0 x2+1 ; al w1 7 ; simulate input of a al w2 10 ; new line character jl. e26.+2 ; goto got char; (+2); ; survey of classes, states, and actions ; value char state action ; 0 letter before command empty action. ; 1 digit in file name init name ; 2 left ( after = save stack ; 3 right ) in program name init integer ; 4 equal = after <s> decrease ; 5 dot . in param name pack name ; 6 spaces in param integer increase ; 7 new lines after dot pack integer ; 8 illegal after command test end ; 9 blind file name <s> ; 10 skip <,> parameter <s> space name ; 11 skip <;> after right ) space integer ; 12 end medium set equal ; 13 new line error ; 14 cancel set dot ; 15 alarm error error ; class values greater than 7 are handled at microsyntactical ; level, thus eliminating the need for a 256 bytes state table. ; most actions are composite and follows each other in rather ; complicated manners. ; init name => init, pack name ; init integer => init, pack integer ; increase => count, set separator ; space name => separator, init, pack name ; space integer => separator, init, pack integer \f ; rc 05.04.72 file processor, commands, page 5 ; state 0: before command e47: ; start of tables h. 1<8+ 1<4+ 9 ; l. file, init name nul 15<8+15<4+ 9 ; d. error, error soh 0<8+ 6<4+ 9 ; ( b.comm, increase stx 11<8+ 4<4+ 9 ; ) after ), decrease etx 15<8+15<4+ 9 ; = error, error eot 15<8+15<4+ 9 ; . error, error enq 0<8+ 0<4+ 9 ; <s> b.comm, empty ack 0<8+ 2<4+ 9 ; <nl> b.comm, save stack bel ; state 1: in file name h. 1<8+ 5<4+15 ; l. file, pack name bs 1<8+ 5<4+ 6 ; d. file, pack name ht 15<8+15<4+ 7 ; ( error, error nl 8<8+ 4<4+ 7 ; ) a.comm, decrease vt 2<8+12<4+ 7 ; = equal, set equal ff 15<8+15<4+ 9 ; . error, error cr 9<8+ 0<4+15 ; <s> after sp1, empty so 0<8+ 8<4+ 9 ; <nl> b.comm, test end si ; state 2: after = h. 3<8+ 1<4+ 9 ; l. program, init name dle 15<8+15<4+ 9 ; d. error, error dc1 15<8+15<4+ 9 ; ( error, error dc2 15<8+15<4+ 9 ; ) error, error dc3 15<8+15<4+ 9 ; = error, error dc4 15<8+15<4+ 9 ; . error, error nak 2<8+ 0<4+ 9 ; <s> after =, empty syn 15<8+13<4+ 9 ; <nl> error, nl error etb ; state 3: in program name h. 3<8+ 5<4+14 ; l. program, pack name can 3<8+ 5<4+12 ; d. program, pack name eom 15<8+15<4+15 ; ( error, error sub 8<8+ 4<4+15 ; ) a.comm, decrease esc 15<8+15<4+ 9 ; = error, error fs 15<8+15<4+ 9 ; . error, error gs 4<8+ 0<4+ 9 ; <s> after sp, empty rs 0<8+ 8<4+ 9 ; <nl> b.comm, test end us ; state 4: after sp h. 5<8+10<4+ 6 ; l. param name,sp name sp 6<8+11<4+ 8 ; d. param int, sp integer ! 15<8+15<4+ 8 ; ( error, error quo 8<8+ 4<4+ 8 ; ) a.comm, decrease ste 15<8+15<4+ 8 ; = error, error dol 15<8+15<4+ 8 ; . after dot, set dot 4<8+ 0<4+ 8 ; <s> after sp, empty & 0<8+ 8<4+ 8 ; <nl> b.comm, test end ' ; state 5: in param name h. 5<8+ 5<4+ 2 ; l. param name,pack name ( 5<8+ 5<4+ 3 ; d. param name,pack name ) 15<8+15<4+11 ; ( error, error * 8<8+ 4<4+ 8 ; ) a.comm, decrease + 15<8+15<4+10 ; = error, error , 7<8+14<4+ 8 ; . after dot, set dot - 10<8+ 0<4+ 5 ; <s> after sp2, empty . 0<8+ 8<4+ 5 ; <nl> b.comm, test end / \f ; rc 1.7.69 file processor, commands, page 6 ; state 6: in param integer h. 15<8+15<4+ 1 ; l. error, error 0 6<8+ 7<4+ 1 ; d. param int, pack integer 1 15<8+15<4+ 1 ; ( error, error 2 8<8+ 4<4+ 1 ; ) a.comm, decrease 3 15<8+15<4+ 1 ; = error, error 4 7<8+14<4+ 1 ; . after dot, set dot 5 10<8+ 0<4+ 1 ; <s> after sp2, empty 6 0<8+ 8<4+ 1 ; <nl> b.comm, test end 7 ; state 7: after dot h. 5<8+ 1<4+ 1 ; l. param name,init name 8 6<8+ 3<4+ 1 ; d. param int, init integer 9 15<8+15<4+ 8 ; ( error, error : 15<8+15<4+11 ; ) error, error ; 15<8+15<4+ 8 ; = error, error < 15<8+15<4+ 4 ; . error, error = 7<8+ 0<4+ 8 ; <s> after dot, empty > 15<8+13<4+14 ; <nl> error, nl error ; state 8: after command h. 15<8+15<4+ 8 ; l. error, error cat 15<8+15<4+ 8 ; d. error, error a 15<8+15<4+ 8 ; ( error, error b 8<8+ 4<4+ 8 ; ) a.comm, decrease c 15<8+15<4+ 8 ; = error, error d 15<8+15<4+ 8 ; . error, error e 8<8+ 0<4+ 8 ; <s> a.comm, empty f 0<8+ 8<4+ 8 ; <nl> b.comm, test end g ; aux state 9: after space (following file name) h. 5<8+10<4+ 8 ; l. param name,sp name h 6<8+11<4+ 8 ; d. param int, sp integer i 15<8+15<4+ 8 ; ( error, error j 8<8+ 4<4+ 8 ; ) a.comm, decrease k 2<8+12<4+ 8 ; = after =, set equal l 15<8+15<4+ 8 ; . error, error m 9<8+ 0<4+ 8 ; <s> after sp1, empty n 0<8+ 8<4+ 8 ; <nl> b.comm, test end o ; aux state 10: after space (following parameter) h. 5<8+10<4+ 8 ; l. param name,sp name p 6<8+11<4+ 8 ; d. param int, sp integer q 15<8+15<4+ 8 ; ( error, error r 8<8+ 4<4+ 8 ; ) a.comm, decrease s 15<8+15<4+ 8 ; = error, error t 7<8+14<4+ 8 ; . after dot, set dot u 10<8+ 0<4+ 8 ; <s> after sp2, empty v 0<8+ 8<4+ 8 ; <nl> b.comm, test end w ; aux state 11: after right ) h. 15<8+15<4+ 8 ; l. error, error x 15<8+15<4+ 8 ; d. error, error y 15<8+15<4+ 8 ; ( error, error z 11<8+ 4<4+ 8 ; ) after ), decrease æ 15<8+15<4+ 8 ; = error, error ø 15<8+15<4+ 8 ; . error, error å 11<8+ 0<4+ 8 ; <s> after ), empty cir 0<8+ 8<4+ 9 ; <nl> b.comm, test end _ \f ; rc 05.04.72 file processor, commands, page 7 ; aux state 12: not used h. 8 ; acc 0 ; a 0 ; b 0 ; c 0 ; d 0 ; e 0 ; f 0 ; g ; aux state 13: not used h. 0 ; h 0 ; i 0 ; j 0 ; k 0 ; l 0 ; m 0 ; n 0 ; o ; aux state 14: not used h. 0 ; p 0 ; q 0 ; r 0 ; s 0 ; t 0 ; u 0 ; v 0 ; w ; aux state 15: syntax error h. 0 ; x 0 ; y 0 ; z 0 ; æ 0 ; ø 0 ; å 8 ; ovl 9 ; del ; action table, containing addresses relative to e24 e48: e30-e24 ; * empty e31-e24 ; * init name e32-e24 ; * save stack e33-e24 ; * init integer e34-e24 ; -2 decrease e35-e24 ; * pack name e36-e24 ; 0 increase e37-e24 ; * pack integer e38-e24 ; 2 test end e39-e24 ; * e40-e24 ; 4 space name e41-e24 ; * space integer e42-e24 ; 6 set equal e43-e24 ; * new line error e44-e24 ; 8 set dot e45-e24 ; * error b. g1 ; begin w.g1=(:h55+512-k:)/2 ; fill segment to 512 bytes; c. -g1 m.length error on commands part 1 z.w. 0, r.g1 e. ; zero fill; end fill up; i.e. ; \f ; rc 01.03.73 file processor, commands, page 8 ;this second part of the command reading contains the error ;handling (syntax and stack overflow). it is entered from the ;command reading via the generel swopping machinery with the last ;few characters read from current in in the cyclic buffer ;just after the segment. the content of c4 (w0 at exit from command ;reading) determines whether the error is syntax or stack. ;the error handling first reselects primary output as current ;output. then the first part of the error text consisting of ;a heading (*** etc..) and the characters in the cycl buf is ;output. next the current input file is unstacked down to pri- ;mary input. during unstacking the document names of the input ;files are output. when unstacking is finished the current input ;and output files are terminated and the initialization of fp is ;entered (in order to abandon the command stack etc..) b. k=h55, e48, w. ; begin second part of commands 0 ; dummy word, not used; rl. w0 c4. ; start: rs. w0 e0. ; save cause (syntax or stack); jl. e1. ; goto reselect curr out; e20: <:c:>,0,0,0 ; name of primary output e21: 1<23 ; area for create(c) e22: 0,r.9 ; e23: <:***fp stack<32><0>:> ; error texts: e24: <:***fp syntax<32><0>:> ; e25: <:<10> *selected from<32><0>:> ; e26: <:primary input<0>:> ; e0: 0 ; cause e27: <:<10> *read from<32><0>:> e30: <:<10>***fp job termination<10><0>:> e1: al. w1 h21. ; reselect curr out: bz w3 x1+h1+1 ; char:= se w3 4 ; if kind(curr out) = bs sn w3 18 ; or kind(curr out) = mt am 25 ; then em al w2 0 ; else null; jl. w3 h34. ; close up(curr out,char); jl. w3 h79. ; terminate curr out; rl. w2 h15. ; find c: rl w0 x2 ; sl w0 20 ; try create c: kind:=kind(prim out); al w0 8 ; if kind > 18 then kind :=tw; al. w1 e21. ; tail(0) := 1<23+kind; hs w0 x1+1 ; dl w0 x2+4 ; ds w0 x1+4 ; dl w0 x2+8 ; ds w0 x1+8 ; tail(2:8):=name(prim out); al. w3 e20. ; create entry (c); e11: jd 1<11+40 ; se w0 3 ; if not allready exists jl. e8. ; then goto check created al. w1 h54. ; c exists allready: jd 1<11+42 ; lookup entry(c); se w0 0 ; if not found jl. h67. ; then break; \f ; rc 21.04.72 file processor, commands, page 9 dl. w3 e21.+4 ; compare proc names: sn w2 (x1+2) ; if name(found c) se w3 (x1+4) ; < > jl. e12. ; name(primt out proc) dl. w3 e21.+8 ; then goto remove c; sn w2 (x1+6) ; se w3 (x1+8) ; jl. e12. ; jl. e2. ; goto connect c; e12: al. w3 e20. ; remove c: jd 1<11+48 ; remove entry(c); se w0 0 ; if not ok jl. h67. ; then break al. w1 e21. ; jl. e11. ; goto create c; e8: se w0 0 ; check created: if not created jl. h67. ; then break; e2: al. w2 e20. ; connect(curr out,c); al w0 1<1+1 ; jl. w3 h28.-2 ; se w0 0 ; if not ok jl. h67. ; then break; am. (e0.) ; error text heading: se w3 x3 ; text:=if cause <> 0 am e24-e23 ; then <:***fp syntax:> al. w0 e23. ; else <:***fp stack:> jl. w3 h31.-2 ; outtext(curr out,text); rl. w0 h55.+514 ; write last input chars: se. w0 h55.+516 ; pointer:=if start relevant rl. w0 h55.+512 ; then start else char pointer; e3: bz w2 (0) ; next char: w2:=char value; sn w2 32 ; if char = space jl. e4. ; then write char; sh w2 39 ; if 40 <= value <= 62 jl. e7. ; or 97 <= value <= 125 sh w2 62 ; then goto write char jl. e4. ; else goto write value; sh w2 125 ; sh w2 96 ; jl. e7. ; e4: jl. w3 h26.-2 ; write char: outchar(curr out,char); e5: am (0) ; increase pointer: pointer := al w0 1 ; pointer+1; sl. w0 h55.+530 ; if pointer > last of buf al. w0 h55.+516 ; then pointer := first of buf; sn. w0 (h55.+512) ; if pointer = slut jl. e28. ; then goto unstack in else jl. e3. ; goto next char; e6: 0 ; saved pointer; e7: rs. w0 e6. ; write value: save pointer; al w2 60 ; jl. w3 h26.-2 ; outchar(<); bl. w0 (e6.) ; jl. w3 h32.-2 ; outinteger(value); 1<23+0<12+1 ; al w2 62 ; jl. w3 h26.-2 ; outchar(>); rl. w0 e6. ; restore pointer; jl. e5. ; goto increase pointer; \f ; rc 01.03.73 file processor, commands, page 10 ; unstack in: e28: am e27-e25 ; first time: text:=<:read from:>; e9: al. w0 e25. ; output doc.name: jl. w3 h31.-2 ; outtext(curr out,<:*selected from :>); am. (h50.) ; sn w3 x3 ; if curr in name chain = 0 jl. e10. ; then goto chain end; al. w0 h20.+h1+2 ; jl. w3 h31.-2 ; outtext(curr out,doc.name(in)); jl. w3 h30.-4 ; unstack curr in; jl. e9. ; goto output doc name; e10: al. w0 e26. ; chain end: jl. w3 h31.-2 ; outtext(curr out,<:primary input:>); al w2 1 ; syntax count: wa. w2 h96. ; count:=count+1; rs. w2 h96. ; sl w2 10 ; if count >= 10 then jl. e29. ; goto termination; jl. w3 h39. ; outend(nl); jl. w3 h95. ; close up; jl. w3 h79.-2 ; terminate curr in and curr out; jl. w3 h79.-4 ; jl. h60. ; goto init fp; e29: al. w0 e30. ; terminate: jl. w3 h31.-2 ; output error text; jl. w3 h39. ; close up curr out; jl. w3 h95. ; jl. w3 h79.-2 ; terminate curr in jl. w3 h79.-4 ; and curr out; jl. h14. ; goto finis; b. g1 w. ; fill segment to 512 bytes g1=(:h55+512-k:)/2 c. -g1 m.length error on commands part 2 z. w. 0,r.g1 e. ; fill up i.e. ; end commands part 2 m.fp commands 26.03.73 i.e. ; end commands; \f \f ; rc 12.07.79 file processor, load, page 1 ; interpretation of commands; program loading s. k=h55, e48 ; begin w. 512 ; length ; segment 12: al w0 1 ; give up mask.cur in:= 1; al. w1 h68. ; give up mask.prog.cur out:= 0; ds. w1 h93. ; al w0 0 ; give up action.in.out.prog:=fp stderror; ds. w1 h92. ; ds. w1 h94. ; e0: rl. w2 h8. ; upspace to next command: ba w2 x2+1 ; cur comm:= param pointer:= bl w0 x2+0 ; cur comm + item size; rs. w2 h8. ; separator:= first byte.item; rs. w2 e8. ; if separator= -4 sn w0 -4 ; then goto read commands; jl. h61. ; if separator <> 2 (nl) sz w0 -3 ; or <> 0 then goto jl. e0.+2 ; upspace to next command; e1: am. (e8.) ; find program name: bz w2 +1 ; updated param pointer:= wa. w2 e8. ; param pointer + size.param; bl w3 x2+0 ; e8:= updated pointer; rs. w2 h8. ; h8:= pointer; rx. w2 e8. ; if end of commands in stack sn w3 -4 ; then goto read commands; jl. h61. ; w0:= separator.param; bl w0 x2+0 ; w1:= kind.param; bz w1 x2+1 ; w3:= next sep.param; se w1 10 ; if kind.param <> 10 (i e name) jl. e1. ; then goto find program name; ds. w1 e33. ; save params for first name; rs. w2 h8. ; h8:= current param pointer; sn w3 6 ; if next sep = <equal> al w2 x2+10 ; then upspace to next param; rs. w2 c12. ; w3 at entry:=current param; rs. w2 e12. ; addr of prog name param \f ; rc 12.07.79 file processor, load, page 1a al. w1 e4. ; test content of entry: al w3 x2+2 ; lookup entry(program name, own filedescr.); jd 1<11+42 ; se w0 0 ; if unknown then jl. e44. ; goto connect trouble; bz. w3 e5. ; load content; se w3 15 ; if content<>15 then jl. e2. ; goto test content and load; bz. w3 e6. ; load through sysldr: sl w3 1000 ; if loaderno>999 then jl. e47. ; goto call trouble; al w1 -8 ; convert loaderno to text: e11: al w1 x1+8 ; repeat al w2 0 ; counter:=counter+8; wd. w3 e10. ; w2:=loaderno mod 10; al w2 x2+48 ; loaderno:=loaderno//10; ls w2 x1 ; w2:=w2+48; wa w0 4 ; w2:=w2 shift counter; se w1 16 ; w0:=w0 add x2; jl. e11. ; until counter=0; rs. w0 e13. ; e13:=loaderno as text; al. w2 e12. ; base for loader name rs. w2 e12. ; used by connect trouble and size trouble al. w1 e4. ; test content of loader entry: al w3 x2+2 ; jd 1<11+42 ; lookup_entry(loader name, own file descr); se w0 0 ; if unknown then jl. e44. ; goto connect trouble; bz. w3 e5. ; load content; \f ; rc 12.07.79 file processor, load, page 1b ; test content and load: e2: se w3 2 ; if content<>2 and sn w3 8 ; content <> 8 jl. 4 ; then jl. e47. ; goto call trouble; al w2 x2+2 ; file name pointer:= param pointer+2; al. w1 h19. ; connect input (file name pointer, jl. w3 h27. ; program zone,result); se w0 0 ; if result <> 0 then jl. e44. ; goto connect trouble; bz. w0 e6. ; test size: rl. w1 e7. ; if entry>=length rs. w0 h19.+h3+6 ; or length<=0 sh w0 x1-1 ; then goto size trouble; sh w1 0 ; jl. e46. ; entry.pzone:= entry; rl. w3 e4. ; bz. w0 e9. ; if mode.kind >= 0 sl w3 0 ; jl. 6 ; or se w0 4 ; kind = 4 jl. e3. ; al w1 x1+511 ; then ls w1 -9 ; length:= (length+511)//512*512; ls w1 +9 ; \f ; rc 12.07.79 file processor, load, page 2 e3: rs. w1 h19.+h3+4 ; test room: ac. w3 h55.+0 ; top length:= cur command pointer wa. w3 h8. ; - base of transient; sl w1 x3 ; if length>=top length jl. e46. ; then goto size trouble; al w1 x1-1 ; increment:= (length-1)//2*2; ls w1 -1 ; adjust share: ls w1 +1 ; first shared:= first address:= al. w0 h55. ; base of transient; al. w1 x1+h55. ; last addr:= first addr+increment; ds. w1 h80.+10 ; last shared:= cur command pointer-2; rl. w1 h8. ; set dump range: al w1 x1-2 ; base.prog:= first addr.proc-1; ds. w1 h80.+4 ; last.prog:= top addr.proc-1; rl. w3 h16. ; dl w2 x3+24 ; if list mode al w1 x1-1 ; then list cur command; al w2 x2-1 ; ds. w2 h19.+h0+2 ; floating precision:= long; rl. w3 h51. ; sz w3 1<0 ; zone:= program zone; jl. w3 e26. ; goto load and enter; al. w1 h19. ; xl. 0 ; jl. h18. ; e8: 0 ; ; current parameter pointer e10: 10 ; ; constant 10 e31: 0 ; ; count e32: 1 ; ; sep e33: 1 ; ; kind e34: 0 ; ; saved param pointer e35: 0 ; w2 ; saved w2 e36: 0 ; w3 ; saved w3 e26: ds. w3 e36. ; list cur command: dl. w1 e33. ; save (w2,w3); rl. w2 h8. ; restore params for first name; al w3 0 ; count:= 0; rs. w3 e31. ; e27: ds. w2 e34. ; print param: sh w0 3 ; al w2 42 ; char:= case separator of sn w0 4 ; (<4: asterisk, al w2 32 ; 4: space , sn w0 6 ; 6: equal , al w2 61 ; 8: dot ); sn w0 8 ; al w2 46 ; if char=space rl. w1 e31. ; and count>10 al w1 x1+1 ; then begin rs. w1 e31. ; outtext (cur out,<:,<10> :>); sn w2 32 ; count:= 0; sh w1 10 ; end; jl. e28. ; count:= count+1; \f ; rc 12.07.79 file processor, load, page 3 al w1 0 ; rs. w1 e31. ; outchar (cur out, char); al. w0 e37. ; jl. w3 h31.-2 ; if kind.param=10 e28: jl. w3 h26.-2 ; then dl. w2 e34. ; outtext (cur out,param name) al. w3 e29. ; else al w0 x2+2 ; outinteger (cur out, sn w1 10 ; <<d>,param integer); jl. h31.-2 ; rl w0 x2+2 ; jl. w3 h32.-2 ; 0<23 + 32<12 + 1 ; e29: dl. w2 e34. ; take next param: wa w2 2 ; param pointer:= pointer+size; bl w0 x2+0 ; separator:= new separator; bz w1 x2+1 ; kind:= new kind; sl w0 4 ; if separator > 3 then jl. e27. ; goto print param; jl. w3 h39. ; dl. w3 e36. ; outend (cur out,new line); jl x3 ; return; e37: <:,<10> :> ; end list; e38: <:***fp name<32><0>:> ; not found in catalog e39: <:***fp connect<32><0>:> ; io trouble during connection e40: <:***fp size<32><0>:> ; program to big e41: <:***fp call<32><0>:> ; call convention error e44: sn w0 3 ; connect trouble: am e38-e39 ; text:= if result <> 3 then <name> am e39-e40 ; else <connect> e46: am e40-e41 ; size trouble: or <size> e47: al. w0 e41. ; call trouble: or <call>; jl. w3 h31.-2 ; outtext (cur out, text); rl. w3 e12. ; outtext(curr out,prog.name); al w0 x3+2 ; jl. w3 h31.-2 ; jl. w3 h39. ; outend (cur out, new line); al w2 3 ; warning:=true; ok:= false; jl. h7. ; goto end program; e4: 0 ; own filedescriptor: mode.kind e9=e4+1 ; mode 0,r.7 e5: 0 ; content e6=e5+1 ; entry e7: 0 ; length e12: 0 ; base of loader name or prog name param <:sysldr:> ; space for loader name 0,r.2 ; space for number part of loader name e13=e12+6 ; address of number part of loader name b. g1 ; begin g1= (:h55+512-k:)/2 ; fill up segment to 512 bytes; c. -g1 m.length error on fp segment 13 z.w. 0, r.g1 ; zero fill e. ; end fill up; m.fp program load 12.07.79 i. ; maybe names e. ; end load; \f ; rc 09.03.73 file processor, end program, page 1 ;this segment is entered when a utility program terminates by ;entering end program entry h7. the function is to stop the ;current out zone, to set the ok bit and to remove su- ;perfluos area processes and messages buffers. ;the segment calls either the load program segment, the device ;status segment or the break action. ;if load program is entered the current in zone will before be ;unstacked to the first i-bit. ;if device status is entered the current zone is unstacked to ;the i-bit unless there is hard error on the stacked curr in ;zone. ;in case of hard error on current out or on a curr in zone ;with i-bit the current out zone is connected to primary out. ;if this is impossible the break action is entered. s. k=h55, a8, e7, f7 w. 512 al w0 0 ; entry: al. w3 h10. ; set interrupt; jd 1<11+0 ; al. w3 h68. ; restore give up action in: al w2 0 ; rs. w3 h19.+h2+2 ; program zone; rs. w3 h20.+h2+2 ; curr in zone; ds. w3 h21.+h2+2 ; curr out zone; g.up.mask(out):=0; dl. w2 c20. ; set mode bits: rs. w2 e7. ; save status word; al w0 -1-1<6-1<5 ; w0:=mode bits - la. w0 h51. ; (ok and warning); al w3 2.11 ; la w3 4 ; bz. w3 x3+e6. ; w3:=table(w2.exit); sz w2 -4 ; if device errors then al w3 1<6 ; w3:=warn yes and ok no; lo w0 6 ; mode bits := w0 or w3; rs. w0 h51. ; sz w2 -4 ; determine action: jl. e1. ; if no device errors al. w3 f1. ; get action and jl. e5. ; goto start on actions; e1: se. w1 c31. ; if hard error on curr out jl. e2. ; then get actions al. w3 f2. ; jl. e5. ; and goto start on actions; e7: 0 ; saved status word ;mode bit table: h. ; warning: ok: e6: 0<6+1<5 ; no yes 0<6+0<5 ; no no 1<6+1<5 ; yes yes 1<6+0<5 ; yes no w. \f ; rc 16.04.72 file processor, end program, page 2 e2: se. w1 h20.+h1+2 ; if hard error curr in zone jl. e3. ; then rl. w0 h20.+h2+0 ; al. w3 f3. ; get action(i-bit) sz w0 2.1 ; al. w3 f4. ; jl. e5. ; and goto start on actions; e3: al. w3 f5. ; other zone error: jl. e5. ; get actions and goto actions; e0: 0 ; action table pointer; ;central call of next action: e4: rl. w3 e0. ; next action entry: al w3 x3+1 ; pointer:=pointer+1; e5: rs. w3 e0. ; start actions entry: save pointer; bl w3 x3 ; action:=table(pointer); a0: jl. x3+a0. ; goto action; ;outend and wait current out: a1: jl. w3 h59. ; outend(curr out,nl); jl. w3 h89. ; check all(curr out); jl. a7. ; goto free the share; ;unstack curr in to i-bit: a2: rl. w0 h20.+h2+0 ; start: if bit 0 in give up sz w0 2.1 ; is <> 0 then jl. e4. ; goto next action else jl. w3 h30.-4 ; unstack curr in and jl. a2. ; goto start; ;close up and terminate curr out a3: al. w1 h21. ; char:= bz w3 x1+h1+1 ; if kind(curr out) = bs se w3 4 ; or kind(curr out) = mt sn w3 18 ; then em am 15 ; else nl; al w2 10 ; jl. w3 h34. ; terminate curr out; jl. w3 h79. ; terminate zone; jl. e4. ; goto next action; \f ; rc 19.02.73 file processor, end program, page 3 ;connect current out to primary out: b. d10 w. d1: 0 ; area for lookup entry: 0 ; d2: 0 ; name first doubleword 0 ; d3: 0 ; name second doubleword 0,r.5 ; rest of tail; d4: <:c:>,0,0,0 ; name of primary output; d0: 1<23 a4: rl. w2 h15. ; start: create c: rl w0 x2 ; kind:=kind(prim out process); sl w0 20 ; if kind > 18 al w0 8 ; then kind = tw; wa. w0 d0. ; al. w1 d1. ; rs w0 x1 ; tail(0):=1<23+kind; dl w0 x2+4 ; ds w0 x1+4 ; tail(2:8) := name(prim out); dl w0 x2+8 ; ds w0 x1+8 ; al. w3 d4. ; d5: jd 1<11+40 ; create entry(c); se w0 3 ; if not allready exists jl. d7. ; then goto check created; al. w1 h54. ; c exists allready: jd 1<11+42 ; lookup entry(c); se w0 0 ; if not found jl. d9. ; then goto give up; dl. w3 d2. ; compare proc names: sn w2 (x1+2) ; se w3 (x1+4) ; if name cat entry (c) jl. d6. ; < > name (prim out process) dl. w3 d3. ; then goto remove c; sn w2 (x1+6) ; se w3 (x1+8) ; jl. d6. ; else goto connect; jl. d8. ; d6: al. w3 d4. ; remove c: jd 1<11+48 ; remove entry(c); al. w1 d1. ; jl. d5. ; goto create (c); d9: al. w1 d10. ; give up: al. w3 h44. ; jd 1<11+16 ; parent message: jd 1<11+18 ; (<:***fp troubles with c:>); jl. w3 h14. ; goto finis; d10: 8<13+0<5 <:***fp troubles with c:> \f ; rc 76.05.25 file processor, end program, page ...4... d7: se w0 0 ; check created: if not created jl. d9. ; then give up; d8: al w0 1<1+1 ; connect c: al. w2 d4. ; jl. w3 h28.-2 ; se w0 0 ; if not ok jl. d9. ; then give up ; flg for at undgaa at cykle, naar forbindelse til primært ; output er afbrudt al w3 x1+h1+2 ; al. w1 d4.+2 ; w1:=sense jd 1<11+16 ; send message al. w1 d1. ; jd 1<11+18 ; wait answer se w0 1 ; if not ok then jl. d9. ; goto give up jl. e4. ; else goto next action; e. ;remove area processes and message buffers: b. d12 w. d9: -1,r.8 ; dummy message to fp; d10: 0 ; buf address; d11: 0 ; rel. addr of bittable in areaproc d12: 24 ; a5: rl w1 80 ; last internal ws w1 78 ; ls w1 -1 ; w1:=number of internals al w1 x1+23 ; al w0 0 ; wd. w1 d12. ; w1:=size of bittable for userbits ls w1 1 ; ac w1 x1+4 ; rs. w1 d11. ; d11:=rel. addr of bittable i areaproc rl w1 76 ; start: remove area processes: d1: rl w2 x1+0 ; for w2 through area in name table do rl w3 66 ; w3:=cur; ba w2 x3+12 ; w2:=w2+rel addr.curr am. (d11.) ; bz w0 x2 ; w0:=userbits.cur bs w2 x3+12 ; reset w2 sz w0 (x3+12) ; if cur is user of area proc then jl. d3. ; then goto maybe remove proc; d2: al w1 x1+2 ; se w1 (78) ; jl. d1. ; jl. d4. ; goto remove buffers; d3: se. w1 (h20.+h1+10); maybe remove process: sn. w1 (h21.+h1+10); if name tab addr(proc) <> jl. d2. ; name tab(in) and name tab(out) dl w0 x2+4 ; then begin ds. w0 h43.+2 ; if proc name <> <:fp:> sn. w3 (h40.) ; then jl. d2. ; copy name into own core area dl w0 x2+8 ; ds. w0 h43.+6 ; al. w3 h43. ; and remove process; jd 1<11+64 ; end jl. d2. ; return; d4: al. w1 d9. ; remove buffers: al. w3 h40. ; send dummy message to fp; jd 1<11+16 ; rs. w2 d10. ; save buffer address; d5: al w2 0 ; first event: event:=first; d6: jd 1<11+24 ; wait: wait event; sn w2 0 ; if claims exceeded jl. d7. ; then goto get clock buf; \f ; rc 19.02.73 file processor, end program, page 5 sn w0 0 ; if event=message jl. d6. ; then goto wait; sn. w2 (h81.) ; if buf = sh.state(in) then jl. d6. ; goto wait next; jd 1<11+26 ; get event; se. w2 (d10.) ; if buf <> clock buf jl. d5. ; then goto first event; jl. e4. ; goto next action; d7: rl. w2 d10. ; get clock buf: al. w1 d9. ; jd 1<11+18 ; wait answer(clock buf); jl. e4. ; goto next action; e. ;free curr in - free cur out: a6: am h20-h21 ; zone:=curr in a7: al. w1 h21. ; zone:=curr out; al w0 0 ; rl w2 x1+h0+6 ; rs w0 x2 ; share state := free; rl w3 x2+4 ; last address := rs w3 x2+10 ; last shared; jl. e4. ; goto next action; ;enter device status: a8: rl. w1 e7. ; restore status word; rs. w1 c20. ; jl. h64. ; goto device status; \f ; rc 19.02.73 file processor, end program, page 6 ;table of sequences of actions: ;(each sequence consists of an even number of bytes) h. ;no device errors: f1: a1-a0,a2-a0,a5-a0,h62-a0 ;hard error on current out: f2: a7-a0,a4-a0,a2-a0,a5-a0,a8-a0,0 ;hard error on stacked curr in zone: f3: a1-a0,a6-a0,a5-a0,a8-a0 ;hard error on curr in zone: f4: a3-a0,a4-a0,a6-a0,a5-a0,a8-a0,0 ;hard error on other zone: f5: a1-a0,a2-a0,a5-a0,a8-a0 w. ;the actions are: ; ;a1 outend and free curr out ;a2 unstack curr in zone to i-bit ;a3 terminate cur out ;a4 connect primary output ;a5 remove area processes and message buffers ;a6 free curr in zone ;a7 free curr out zone ;h62 call and enter load program segment ;a8 call and enter device status segment b. g1 ; fill up to 512 bytes: g1=(:h55+512-k:)/2 c. -g1 m.length error on end program segment z.w. 0,r.g1 e. m.fp end program 07.03.73 i.e. \f ; rc 12.04.72 file processor, device status, page 1 s. k=h55, e48 ; begin segment: device status; w. ; 512 ; length of segment al. w0 e7. ; device status: jl. w3 h31.-2 ; writetext(out,<:***device status:>); al. w0 h10.+2 ; jl. w3 h31.-2 ; writetext(out,doc name); al w2 0 ; e6: rl. w1 c20. ; for bit := 0 step 1 until 21 do ls w1 x2 ; begin al. w0 e10. ; ba. w0 x2+e5. ; sh w1 -1 ; text := device status text(bit); jl. w3 h31.-2 ; if bit = 1 then al w2 x2+1 ; writetext(out,text); se w2 22 ; jl. e6. ; end; jl. w3 h39. ; outend(nl); al. w3 h10.+2 ; examine hardware error: jd 1<11+4 ; process description(document name); sn w0 0 ; if non exist then jl. e9. ; goto get mask; rl w1 (0) ; w1 := kind(doc name); se w1 4 ; if kind = 4 (bs) sn w1 8 ; or kind = 8 (tw) jl. +4 ; or sn w1 14 ; kind = 14 (lp) am 2 ; add parity to mask; e9: rl. w1 e2. ; get mask; rl. w0 c20. ; move status to message; la w0 2 ; rs. w0 e4. ; sn w0 0 ; if status and mask(kind) <> 0 jl. e8. ; then al. w1 e3. ; al. w2 h10.+2 ; parent message(<:status:>, doc name); jl. w3 h35. ; e8: dl. w2 c20. ; test if current in error: rl. w0 h20.+h2+0 ; sn. w1 h20.+h1+2 ; if error on curr in zone so w0 2.1 ; and i-bit then jl. e33. ; begin al. w3 2 ; unstack curr in rl. w0 h50. ; until name se w0 0 ; chain end; jl. h30.-4 ; rl. w3 h20.+h0+0 ; reset the al w3 x3-1 ; fp command stack; rs. w3 h8. ; rs. w3 h9. ; call and enter jl. h61. ; command segment; e33: al. w3 2 ; end; rl. w0 h20.+h2+0 ; unstack curr in zone so w0 2.1 ; until first i-bit; jl. h30.-4 ; call and enter jl. h62. ; load program segment; ; hard error message to parent, in case of hardware errors: e3: 3<13+1<9+0 ; m(0) , pattern word <:status:> ; m(2:4) e4: 0 ; m(6) , logical status e7: <:<10>***device status <0>:> \f ; rc 77.09.22 file processor, device status, page ...2... ; mask(0:20) , to select hardware errors: e2: 1<23+ 1<21+1<20+1<13+1<12+1<4 ; without parity bit 1<23+1<22+1<21+1<20+1<13+1<12+1<4 ; with parity bit ; device status text (0:21): e10: <:<10>intervention<0>:> ; e11: <:<10>parity error<0>:> ; e12: <:<10>timer<0>:> ; e13: <:<10>data overrun<0>:> ; e14: <:<10>block length error<0>:> ; e15: <:<10>end of document<0>:> ; e16: <:<10>load point<0>:> ; e17: <:<10>tape mark or attention<0>:> ; e18: <:<10>writing enabled<0>:> ; e19: <:<10>mode error<0>:> ; e20: <:<10>read error<0>:> ; e21: <:<10>card rejected or disk error<0>:> ; e22: <:<10>checksum error<0>:> ; e23: <:<10>bit 13<0>:> ; e24: <:<10>bit 14<0>:> ; e25: <:<10>stopped<0>:> ; e26: <:<10>word defect<0>:> ; e27: <:<10>position error<0>:> ; e28: <:<10>process does not exist<0>:> ; e29: <:<10>disconnected<0>:> ; e30: <:<10>unintelligible<0>:> ; e31: <:<10>rejected<0>:> ; h. e5: e10-e10, e11-e10, e12-e10, e13-e10, e14-e10, e15-e10 e16-e10, e17-e10, e18-e10, e19-e10, e20-e10, e21-e10 e22-e10, e23-e10, e24-e10, e25-e10, e26-e10, e27-e10 e28-e10, e29-e10, e30-e10, e31-e10 w. e1 = (:h55+512-k:)/2 0, r. e1 ; fill segment with zeroes m.fp device status 77.09.22 m. fpnames follows: e. ; end device status segment i. ; list fp names b. g1 w. g0: g1: 17 ; segm 0, r.4 ; docname s2 ; date 0, 0 ; fil, blok 3<12 + 2 ; contry 3584 ; length p.<:insertproc:> e. ; end file processor ▶EOF◀