|
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: 42240 (0xa500) Types: TextFile Names: »uti15«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦f8e4b63af⟧ »trcfput« └─⟦this⟧
\f ; rc 1.11.70 editor i, tape 3, page 1. w. c32: jl. c30. ; addr init editor: ; goto initializing the editor; c33: jl. c20. ; addr start preprocessor: ; goto start preprocessor; ; global tables: ; f1: byte table ; f2: base corr descriptor ; f4: command table h. 0 ; f6: 0,0,0,0,0,0 ; delimiter array (0:5); f5: ; ; f7: base correction. share descr ; f10: base source descriptor ; f11: base source.first share ; f12: base source.last share ; f80: base obj descriptor ; f81: base obj. share w. ; global constants: f15: g20 ; special f16: g21 ; comp f17: -1-g21 ; not comp f18: -1-g20 ; not special f19: 1<16 ; input partial word empty f20: 127 ; mask char f21: 10 ; ten f22: -1-g22-g23 ; not blind and not gr c31: ; global variable: (+ and - for fixed order). f25: d9, 0,r.9 ; corr. area file descr. f26: 0 ; out descriptor f27: 0 ; obj descriptor f28: 0 ; +source descriptor f29: 0 ; +source line addr f30: 0 ; -in descriptor f31: 0 ; -corr line addr f32: 0 ; +descriptor f33: 0 ; +line addr f34: 0 ; -line top f53: 0 ; -line bottom f35: 0 ; bottom f36: 0 ; input line return c. d15 ; if mark is standard then f37: g20+d1 ; +num char f38: g20+d2 ; +line char f39: g20+d3 ; +char char z. ; else c. -d15 ; f37: -1 ; +num char = <empty> f38: -1 ; +line char = <empty> f39: -1 ; +char char = <empty> z. ; \f ; rc 29.06.71 editor i, tape 3, page 2. f40: 0 ; -saved w0 f41: 0 ; -saved w1 f42: 0 ; -saved w2 f43: 0 ; -saved w3 f60: 0 ; -sub byte f44: d6 ; cur line f45: d6 ; +out line f46: 0 ; +cur out f51: 0 ; source top f52: f47: 0 ; source bottom, obj top f48: 0 ; obj bottom f49: 0 ; corr top f50: 0 ; corr bottom f55: 0 ; +saved cur source f56: 0 ; +saved cur obj. f67: 0 ; +saved cur corr f57: 0 ; -gen first instr f58: 0 ; -gen last instr f59: 0 ; cur fix ; f61 ; boolean obj proper ; f62 ; boolean delete proper f63: 0 ; save point f64: 0 ; line dest f65: 0 ; old line f66: 0 ; integer f68: 0 ; return pr f69: 0 ; corr no h. f70: 0 ; boolean on line (true) f71: 1 ; boolean extend alowed (false) f72: 1 ; boolean interm source (false) w. ; f73 ; boolean dummy obj in output line f77: 0 ; fp base f78: 0 ; fp command f79: 0 ; work obj name addr f83: d7, 0,r.9 ; obj no of segments f84: 0 ; fp inchar address ; f85: in output line: obj mess.first storage ; f86: in output line: obj mess.last storage ; f87: in output linr: answer message f88: 0 ; corr descr c. h57<3 ; if system 3 then f89 = k+2 , 0, r.2 ; entry interval of object area ; f90 ; boolean rename impossible ; f91 ; permanentkey of object area z. ; \f ; rc 17.6.69 editor i, tape 3, page 3. ; executor: ; comment: by the executor the actual editing is performed. ; the executor contains an administration, entries for each ; instruction, and a set of action procedures; b. a62 ; begin executor w. ; ; administration: a30 line ; a31 char ; a0 test first corr segm a34 line num printing ; a1 next instr 1 a35 command ; a2 next instr 2 a36 finish ed ; a3 next instr 3 a37 head ; a4 next instr 4 a38 ; a39 source ; ; entries corresponding ; to instructions: action procedures: ; ; a5 restore corr a40 switch array action ; a6 executed ; a7 executed print a41 from source ; a32 verify yes a42 from corr ; a33 verify no a43 to obj ; a8 rel a44 to delete ; a9 set bot a45 to corr ; a10 the line a46 print ; a11 search a47 init search ; a12 ab corr a48 next search ; a13 copy a49 step up ; a14 print a50 move fix ; a15 delete line a51 test line ; a16 delete search a52 test em ; a17 ad corr print a53 gen test line ; a18 repl a54 gen test em ; a19 gen a55 print em ; a20 store line ; a21 reset line ; a22 repeat gen ; a23 gen return others: ; a24 delete fix ; a25 corr input a60 to obj top of line ; a26 to top a62 prep 0 ; a27 uphead ; a28 back up ; a29 num \f ; rc 17.6.69 editor i, tape 3, page 4. ; initialization of action switch: ; several commands are executed by repeately call of a ; set of so called action procedures, i.e. peases of code where ; the return address are kept in a table, the action switch. ; loading of the switch by instructions, which after loading ; return to process the next instruction: ; rel, reset line ; back up: set bot: the line: search: ; 0: 0: 0: 0: from source ; 2: 2: 2: 2: ; 4: 4: 4: 4: ; 6: test line 6: from source 6: test line 6: next search ; 8: from source 8: from source 8: from source 8: next search ;10: test em 10: test em 10: test em 10: alarm ;12: 12: 12: 12: step up ;14: from source 14: from source 14: from source 14: init search ; ab corr: ; 0: ; 2: ; 4: ; 6: from corr ; 8: from corr ;10: ;12: ;14: from corr ; loading of the switch and jump to action (14): ; copy print: delete line : delete search ; 0: 0: 0: 0: ; 2: to obj 2: print 2: to delete 2: next search ; 4: 4: to obj 4: 4: ; 6: 6: 6: 6: ; 8: 8: 8: 8: ;10: 10: print em 10: 10: ;12: 12: 12: 12: ;14: 14: (old cont of 10)14: 14: ; repl: gen: ad corr print ; 0: 0: 0: ; 2: to obj 2: to obj 2: print ; 4: 4: 4: to corr ; 6: alarm 6: gen test line 6: ; 8: 8: 8: ;10: 10: gen test emm 10: print em ;12: move fix 12: move fix 12: ;14: 14: 14: (old cont. of 10) a40: 0,0,0,0,0,0,0,0 ; switch array action (0:14); \f ; rc 29.06.71 editor i, tape 3, page 5. c21: ; start executor: al w0 0 ; begin rs. w0 f69. ; corr no:= 0; dl. w0 f29. ; line addr:= source line addr; ds. w0 f33. ; descriptor:= source descriptor; ; test first corr segment: a0: rl. w3 f49. ; cur corr:= corr top; bl w0 x3 ; sn w0 g11 ; if byte (cur corr) = <first corr> jl. a1. ; then goto next instr 1; ; save last corr segment and ; restore first corr segment: rl. w1 f88. ; w1:= corr descr; c. h57<2 ; if system 2 then begin rl w2 x1+h1+16 ; get segment count; sl. w2 (f25.) ; if area length <= segm.count then jl. c38. ; alarm(corr. area); z. ; end system 2; am. (f77.) ; jl w3 h23 ; outblock(w1); al w2 x1+h1+2 ; w2:= corr descr.name; am. (f77.) ; jl w3 h27 ; connect input(w1,w2); am. (f77.) ; jl w3 h22 ; inblock(w1); jl. a0. ; goto test first corr segment; ; next instr 1: a1: dl. w2 f56. ; restore (cur source, cur obj); ; next instr 2: a2: al w3 x3+1 ; cur corr:= cur corr + 1; ; next instr 3: a3: bl w0 x3 ; byte:= byte (cur corr) ; next instr 4: a4: am (0) ; jl. b2. ; goto instruction (byte); \f ; rc 17.6.69 editor i, tape 3, page 6. a5: ; restore corr: ds. w2 f56. ; save(cur source, cur obj); rl. w1 f88. ; w1:= corr descr; am. (f77.) ; jl w3 h22 ; inblock(w1); rl. w3 f49. ; cur corr:= corr top; dl. w2 f56. ; restore(cur source, cur obj); jl. a3. ; goto next instr 3; ; terminate and verify: ; comment: if verification the execution is terminated ; by printing of the current line. this is obtained ; letting cur corr point on a sequence of instruction ; for execution of the printing and then execute the ; instructions. b. h2 ; begin terminate and verify: h. ; the line, print, uphead h1: b10 , b14 , b27 ; executed print h2: b7 w. c28: ; execute verification: a6: ; executed: al. w3 h1. ; cur corr:= if verify yes then print instruct jl. a3. ; else no print instr; goto next instr 3; a7: ; executed print: ds. w2 f56. ; save (cur source, cur obj); jl. c20. ; goto start preprocessing; a32: ; verify yes: am h1-h2 ; verify yes:= true; goto next instr 2; a33: ; verify no: al w0 h2-a6 ; verify yes:= false; goto next instr 2; hs. w0 a6.+1 ; jl. a2. ; e. ; end terminate and verify; \f ; rc 25.3.72 editor i, tape 3, page 7. b. h7 ; begin loading of action switch: w. ; a8: ; rel: bz w0 x3+1 ; integer := byte(cur corr + 1) ls w0 12 ; shift 12 + byte(cur corr + 2); hl w0 x3+2 ; line dest := integer wa. w0 f44. ; + cur line; al w3 x3+2 ; cur corr:= cur corr +2; ; prep 1: h1: rs. w0 f64. ; ; prep 0: a62: al. w0 a51. ; action(6):= test line; ; prep 2: h2: rs. w0 a40.+6 ; al. w0 a52. ; action(10):= test em; rs. w0 a40.+10; al. w0 a41. ; action(8):= action(14):= from source; jl. h3. ; goto prep 3; a9: ; set bot: al w0 -1 ; rs. w0 f64. ; line dest:= -1; al. w0 a41. ; action(6):= from source; jl. h2. ; goto prep 2; a10: ; the line: rl. w0 f44. ; line dest:= cur line; jl. h1. ; goto prep 1; a11: ; search: al. w0 a41. ; action (0):= from source; rs. w0 a40.+0 ; al. w0 a48. ; action (6):= action (8):= next search; rs. w0 a40.+6 ; rs. w0 a40.+8 ; al. w0 c23.-2 ; action (10):= alarm (position not found); rs. w0 a40.+10; al. w0 a49. ; action (12):= step up; rs. w0 a40.+12; al. w0 a47. ; action (14):= init search; jl. h4. ; goto prep 4; a12: ; ab corr: al. w0 a42. ; action (6):= action (8):= action (14) rs. w0 a40.+6 ; := from corr; ; prep 3: h3: rs. w0 a40.+8 ; ; prep 4: h4: rs. w0 a40.+14; jl. a2. ; goto next instr 2; \f ; rc 9.1.70 editor i, tape 3, page 8. a13: ; copy: al. w0 a43. ; action (2):= to obj; jl. h7. ; goto prep 7; a14: ; print: al. w0 a43. ; action (4):= to obj; rs. w0 a40.+4 ; al. w0 a46. ; action(2) := print rs. w0 a40.+2 ; al. w0 a55. ; new action(10) := print em; jl. h5. ; goto prep 5; a16: ; delete search: a15: ; delete line: al. w0 a44. ; action (2):= to delete jl. h7. ; goto prep 7; a17: ; ad corr print: rs. w2 f56. ; saved cur obj:= cur obj; rl. w2 f31. ; in corr:= corr line address; al. w0 a45. ; action (4):= to corr; rs. w0 a40.+4 ; al. w0 a46. ; action (2):= print; rs. w0 a40.+2 ; al. w0 c38. ; new action(10) := alarm(pos. not found);; h5: rx. w0 a40.+10; prep 5: rx. w0 a40.+14; new action(14) := old action(10); jl (0) ; goto old action(14); a18: ; repl: al. w0 c23.-2 ; action (6):= alarm (position not found); jl. h6. ; goto prep 6; a19: ; gen: al. w0 a54. ; action (10):= gen test em; rs. w0 a40.+10; al. w0 a53. ; action (6):= gen test line; ; prep 6: h6: rs. w0 a40.+6 ; al. w0 a50. ; action (12):= move fix; rs. w0 a40.+12; al. w0 a43. ; action (2):= to obj; ; prep 7: h7: rs. w0 a40.+2 ; jl. (a40.+14); goto action (14); \f ; rc 17.6.69 editor i, tape 3, page 9. a20: ; store line: rl. w0 f44. ; rs. w0 f65. ; old line:= cur line; jl. a2. ; goto next instr 2; a21: ; reset line: rl. w0 f65. ; rs. w0 f64. ; line dest:= old line; jl. a62. ; goto prep 0; ; a22: ; repeat gen: ; goto action procedure gen test line; a23: ; gen return: bl w0 x3+1 ; wa w0 6 ; gen last instr:= cur corr + byte (cur corr + 1); al w3 x3+2 ; cur corr:= gen first instr:= cur corr + 2; ds. w0 f58. ; jl. a3. ; goto next instr 3; a24: ; delete fix: rl. w2 f59. ; cur obj:= cur fix; jl. a2. ; goto next instr 2; e. ; end loading of action switch; \f ; rc 17.6.69 editor i, tape 3, page 10. a25: ; corr input: ; comment: input from the control string for composing ; after cr is prepared. ; input line return is set to after correct in the prepro- ; cessor and control is transferred to composing ; input line. ; w0: destroyed ; w1: cur source / destroyed ; w2: corr line top / destroyed ; w3: destroyed; rs. w1 f55. ; save (cur source); rl. w1 f30. ; descriptor:= corr descripter; ds. w2 f33. ; line address:= corr line address; al w2 x2-1 ; line top:= line address - 1; al w3 x2+d4-2 ; line bottom:= line top + max line length; ds. w3 f53. ; al. w0 c19. ; input line return:= after correct; rs. w0 f36. ; jl. c2. ; goto composing input line; a26: ; to top: ; comment: line dest is set equal zero, and control is ; transferred to back up; al w0 d6 ; line dest:= first source line; jl. a38. ; goto prep back up; a27: ; uphead: ; comment: line dest is set equal cur line -1, and control ; is transferred to back up; am -1 ; line dest:= cur line -1; goto prep back up; a37: ; head: ; comment: line dest is set equal to cur line, and control ; is transfered to back up; al w0 0 ; line dest:= cur line; wa. w0 f44. ; ; prep back up: a38: rs. w0 f64. ; goto back up; \f ; rc 17.6.69 editor i, tape 3, page 11. a28: ; back up: ; comment: backspacing to the beginning of the ; line defined by line dest is performed. ; first it is tried whether the backspacing can be ; performed by copying from the obj string to ; the source string. ; if it does not succed the remainder of the source ; string is copied into the object string and ; the object is taken as new source string. then ; the new source string is copied into a new object ; string until the line determined by line dest. ; the boolean extend alowed tells whether it is ; alowed to create a new source string. ; the boolean interm source tells whether the old ; source file shall be removed after creation of the ; new source file; the boolean is set true after ; the creation. ; w0: available ; w1: cur source ; w2: cur obj ; w3: cur corr b. h5 ; begin back up: h. al w0 ,se w1 x1 ; w. hs. w0 f61. ; obj proper:= hs. w0 f62. ; delete proper:= false; h1: se. w2 (f47.) ; from obj: jl. h2. ; if cur obj = obj top then am. (f44.) ; begin sl w1 x1-d6 ; if cur line <= first source line jl. a2. ; then goto next instr 2; rl. w2 f48. ; cur obj:= obj bottom ; end; h2: sn. w2 (f46.) ; if cur obj = cur out jl. h4. ; then goto forward; al w2 x2-1 ; cur obj:= cur obj - 1; bl w0 x2 ; byte:= byte (cur obj); se w0 g10 ; if byte <> <top of line> jl. h3. ; then goto to source; rl. w0 f44. ; bs. w0 1 ; cur line:= cur line - 1 rs. w0 f44. ; sl. w0 (f64.) ; if cur line >= line dest jl. h1. ; then goto from obj; al. w0 a2. ; rs. w0 a40.+6 ; action (6):= next instr 2; jl. a60. ; goto to obj top of line; \f ; rc 29.06.71 editor i, tape 3, page 12. h3: ; to source: hs w0 x1 ; byte (cur source):= byte; al w1 x1-1 ; cur source:= cur source - 1; sl. w1 (f51.) ; if cur source >= source top jl. h1. ; then goto from obj; ; forward: h4: bl. w0 f71. ; sn w0 1 ; if extend alowed = false jl. c24. ; then alarm (back space error) al. w0 h5. ; rs. w0 a40.+10; action (10):= turn al. w0 a41. ; rs. w0 a40.+6 ; action (6):= rs. w0 a40.+8 ; action (8):= rs. w0 a40.+14; action (14):= from source; jl. a13. ; goto copy; h5: ; turn: e. ; h. al w0 ,se w1 x1 ; obj proper:= w. hs. w0 f61. ; delete proper:= false; hs. w0 f62. ; rs. w3 f67. ; save(cur corr); jl. w3 c10. ; close obj; b. a7 , i3 w. ; se w1 x1+a0. ; if rename impossible then f90: jl. a0. ; goto copy; am. (f28.) ; rename object area: al w3 +h1+2 ; source name := new generated name; jd 1<11+68 ; al w1 x3 ; w1 := source name; am. (f27.) ; al w3 +h1+2 ; w3 := object name; jd 1<11+46 ; rename(w1,w3); se w0 0 ; if error then jl. a0. ; goto copy; al. w1 f83. ; create a new object area (exactly as the old): jd 1<11+40 ; create entry(w1,w3); sn w0 0 ; if create ok then goto connect object; jl. a7. ; al w1 x3 ; rename back again: am. (f28.) ; al w3 +h1+2 ; w3 := addr of generated name; jd 1<11+46 ; rename(w1,w3); ; the text in object must be copied back into source; a0: rl. w1 f27. ; copy: w1 := addr of object zone; al w2 x1+h1+2 ; w2 := addr of object file descr; am. (f77.) ; jl w3 +h27 ; connect input (w1, w2); se w0 0 ; if connect trouble then jl. c37. ; error(work area); am. (f28.) ; al w3 +h1+2 ; w3 := name addr; rs w0 x3 ; clear sourcename; rs. w0 i3. ; document.tail := pref. drum; rl. w0 f83. ; save (obj number of segments); rs. w0 i1. ; rs. w0 i2. ; al. w1 i2. ; w1 := tail address; jd 1<11+40 ; create entry(w1,w3); se w0 0 ; if create trouble then jl. c37. ; error(work area); rl. w1 f28. ; w1 := source descr; al w2 x1+h1+2 ; w2 := new source name; am. (f77.) ; jl w3 +h28 ; connect output(w1,w2); se w0 0 ; if connect trouble then jl. c37. ; error(work area); a1: rl. w1 i1. ; copy next segment: sh w1 0 ; if number of segments <= 0 then jl. a5. ; goto copy ended; al w1 x1-1 ; decrease(number of segments); rs. w1 i1. ; a2: rl. w1 f27. ; inblock; am. (f77.) ; jl w3 +h22 ; rl w2 x1+h3 ; w2 := recordbase.from; sl w2 (x1+h3+2) ; if w2 >= last byte then jl. a2. ; goto repeat inblock; am. (f28.) ; rl w3 +h3 ; w3 := record base.to; a3: am. (f27.) ; move next word: sl w2 (+h3+2) ; if w2 >= last byte then jl. a4. ; goto out next; al w2 x2+4 ; increase(w2,w3); al w3 x3+4 ; dl w1 x2 ; move doubleword; ds w1 x3 ; jl. a3. ; goto move next word; a4: rl. w1 f28. ; out next: am. (f77.) ; outblock; jl w3 +h23 ; jl. a1. ; goto copy next segment; a5: rl. w1 f28. ; copy ended: w1 := source descr; am. (f77.) ; jl w3 +h79 ; terminate zone(source); rl. w1 f27. ; w1 := object descr; am. (f77.) ; jl w3 +h79 ; terminate zone(object); jl. a7. ; goto connect object; i1: 0 ; number of segments to copy i2: 0 , r.10 ; tail for create entry i3 = i2+2 ; document name a7: al w0 0 ; connect object: hs. w0 f72. ; interm source := true; rl. w1 f27. ; w1 := obj descr; al w2 x1+h1+2 ; w2 := obj name; e. ; end of turn-block; am. (f77.) ; jl w3 h28 ; connect output(w1,w2); se w0 0 ; if connect error jl. c37. ; then alarm(work area); rl. w2 f28. ; al w2 x2+h1+2 ; w2:= source descr.name; jl. w3 c9. ; init source; jl. c37. ; if not ok then alarm(work area); al w0 d6 ; rs. w0 f44. ; cur line:= rs. w0 f45. ; out line:= first source line; rl. w2 f47. ; cur obj:= rs. w2 f46. ; cur out:= obj top; rl. w3 f67. ; cur corr:= saved cur corr; ; am. (f64.) ; sl w1 x1-d6 ; if line dest <= first source line jl. a2. ; then goto next instr 2; al w0 b13 ; hs w0 x3 ; byte (cur corr):= copy; al w3 x3-1 ; cur corr:= cur corr - 1; jl. a62. ; goto prep 0; ; end back up; \f ; rc 17.6.69 editor i, tape 3, page 13. ; mark character: ; comment: the old mark character is exchanged ; with the new one given in the correction string. ; the special mark in the byte table is removed ; from the old mark character and set for the ; new mark character. if the mark character is ; empty no special mark is set in the byte table; b. h2 w. a29: ; num: am -2 ; char addr:= num char; goto set char; a30: ; line: am -2 ; char addr:= line char; goto set char; a31: ; char: al. w0 f39. ; char addr:= char char; ; set char: ds. w1 f41. ; rl. w1 (f40.) ; mark char:= word (char addr); sn w1 -1 ; if mark char = empty jl. h1. ; then goto new char; la. w1 f20. ; bl. w0 x1+f1. ; byte table (mark char):= la. w0 f18. ; byte table (mark char) & not special; hs. w0 x1+f1. ; ; new char: h1: bl w0 x3+1 ; mark char:= byte (cur corr + 1); sn w0 -1 ; if mark char = empty jl. h2. ; then goto store char; rl w1 0 ; la. w1 f20. ; bl. w0 x1+f1. ; byte table (mark char):= mark char:= lo. w0 f15. ; byte table (mark char special; hs. w0 x1+f1. ; ; store char: h2: rs. w0 (f40.) ; word (char addr):= mark char; rl. w1 f41. ; al w3 x3+2 ; cur corr:= cur corr + 2; jl. a3. ; goto next instr 3; e. ; end mark characters; \f ; rc 14.09.72 editor i, tape 3, page 14. a34: ; line number printing: ; comment: the value of cur line is printed; ds. w2 f56. ; save (cur source, cur obj); rs. w3 f67. ; save (cur corr); rl. w0 f44. ; jl. w3 c16. ; print value (cur line); 5 ; al. w2 g30. ; jl. w3 c17. ; print text (<:line.:>); rl. w3 f67. ; restore (cur corr); jl. a1. ; goto next instr 1; a35: ; command: ; comment: corr no is increased by one; al w0 1 ; wa. w0 f69. ; corr no:= corr no + 1; rs. w0 f69. ; jl. a2. ; goto next instr 2; c22: ; terminate editor: a36: ; finis ed: ; comment: the object document is closed, and exit ; is made from the editor; b. i1 ; begin w. al w0 0 ; success:= ok; c18: ; error terminate editor: ; comment: w0 = no success; hs. w0 i1. ; f92=k+1 ; cf. action c37 (tape 2 page 18) jl. w3 c10. ; close obj; al. w2 g32. ; print text (<:edit end.:>); jl. w3 c17. ; rl. w1 f77. ; w1:= fp base; rl. w3 f88. ; al w3 x3+h1+2 ; w3:= corr descr.name; jd 1<11+48 ; remove entry(w3); h. al w2 ; w2:= success; i1: 0 ; integer success; w. jl w3 x1+h7 ; end program(w2); e. ; end; \f ; rc 17.6.69 editor i, tape 3, page 15. a39: ; source: ; comment: the next corr byte contain an integer. the fp command ; corresponding to the integer is selected as the new source. ; does the selected parameter not correspond to a proper text the ; source will be empty. ; if the old source is an intermideate source it is removed. in- ; termediate source is set false; b. d2 ; begin w. ; al w3 x3+1 ; cur corr:= cur corr +1; ds. w3 f67. ; save(cur obj,cur corr); rl. w1 f28. ; am. (f77.) ; terminate(source descr); jl w3 h79 ; rl. w3 f28. ; al w3 x3+h1+2 ; w3:= source descr.name; bl. w0 f72. ; sn w0 0 ; if intermediate source jd 1<11+48 ; remove entry(w3); al w0 1 ; hs. w0 f72. ; intermediate source:= false; bl. w0 (f67.) ; w0:= integer from corr string; jl. w3 c35. ; source param(w0, w1=cur source); dl. w3 f67. ; restore(cur obj,cur source); jl. a2. ; goto next instr 2; ; e. ; end source; \f ; rc 17.6.69 editor i, tape 3, page 16. a41: ; action procedure from source; ; w0: irrelevant / byte ; w1: cur source / updated cur source ; w2: saved ; w3: saved ; normal return: action (2) ; <empty source> return: action (10); ; ; comment: the next source byte is fetched. special bytes are ; treated as follows: ; <empty source>: cur source remain pointing ahead of the byte, ; meaning that it is not removed from the source string. ; return is made to action (10). ; <em>: the source is terminated and the byte replaced by ; <empty source>. the byte is examined once more. ; <first source>: the procedure source param is called for ; connecting the first source document. current source ; byte is examined once more. ; <no line>: the procedure input line is called. the first ; byte of the line is fetch; b. d3, i2 ; begin w. ; d0: al w1 x1+1 ; cur source:= cur source + 1; ; fetch: d1: bl w0 x1 ; byte:= byte (cur source); so w0 g20 ; if byte <> <special> jl. (a40.+2); then goto action (2); ; special source: al w1 x1-1 ; cur source:= cur source - 1; sn w0 g13 ; if byte = <empty source> jl. (a40.+10); then goto action (10); rl. w1 f29. ; al w1 x1-1 ; saved cur source:= source line addr -1; rs. w1 f55. ; ds. w3 i2. ; save(w2, w3); se w0 g9 ; if byte = <no line> then jl. d2. ; begin ; no line: jl. w3 c1. ; input line(cur source); dl. w3 i2. ; restore(w2, w3); jl. d1. ; goto fetch; ; end else d2: se w0 g7 ; if byte = <em> then jl. d3. ; begin ; em: rl. w1 f28. ; am. (f77.) ; terminate (source descr); jl w3 h79 ; rl. w1 f29. ; al w0 g13 ; byte(cur source):= <emty source>; hs w0 x1 ; restore(w2, w3); dl. w3 i2. ; goto fetch; jl. d1. ; end else ; begin d3: al w0 1 ; first source: jl. w3 c35. ; source param(1,w1=cur source); dl. w3 i2. ; restore(w2, w3); jl. d0. ; goto fetch; ; end; i1: 0 ; saved w2; i2: 0 ; saved w3; e. ; end from source; \f ; rc 17.6.69 editor i, tape 3, page 17. a42: ; action procedure from corr; ; w0: irrelevant / byte ; w1: saved ; w2: saved ; w3: cur corr ; return on string byte: action (2) ; return on instruction: next instruction ; ; comment: the next byte is fetch from the correction string. ; if the byte is <restore corr> a new correction buffer is input. ; if the byte is marked special jump is made to next instr 4. ; otherwise exit is made to action 2; b. d1 ; begin w. al w3 x3+1 ; cur corr:= cur corr + 1; ; next: d1: bl w0 x3 ; byte:= byte(cur corr); so w0 g20 ; if byte <> <special> jl. (a40.+2); then goto action(2); se w0 b5 ; if byte <> <restore corr> jl. a4. ; then goto next instr 4; ds. w2 f56. ; save(cur source,cur obj); rl. w1 f88. ; w1:= corr descr; am. (f77.) ; jl w3 h22 ; inblock(w1); rl. w3 f49. ; w3:= cur corr:= corr top; dl. w2 f56. ; restore(cur source, cur obj); jl. d1. ; goto next; e. ; end from corr; \f ; rc 17.6.69 editor i, tape 3, page 18. c5: ; procedure byte to obj; ; w0: byte ; w1: saved ; w2: cur obj / updated cur obj ; w3: return ; ; comment: the return is stored in action (8), and the ; action procedure to object takes care of the rest; rs. w3 a40.+8 ; action (8):= return; a43: ; action procedure to object; ; w0: byte ; w1: saved ; w2: cur obj / updated cur obj ; w3: saved ; return on proper line: action (6) ; return on normal bytes: action (8) ; ; comment: the byte is stored in the objectstring. if no proper ; line has been accumulated return is made to action (8). ; if a proper line has been accumulated the special byte ; <top of line> is stored as well, cur line is increased ; by one, and return is made to action (6). ; a line is transfered from the object string to the ; object buffer when: ; 1. number of lines in the object string exceeds max ; back up. ; 2. there is no room for more bytes b. h3, i2 ; begin w. ; ; store: h1: hs w0 x2 ; byte (cur obj):= byte; al w2 x2+1 ; cur obj:= cur obj + 1; sn. w2 (f48.) ; if cur obj = obj bottom rl. w2 f47. ; then cur obj:= obj top; sn. w2 (f46.) ; if cur obj = cur out jl. h3. ; then goto line over flow; f61: ; boolean obj proper: ;jl. h2. ; if obj proper then goto not empty se. w1 x1+h2. ; else goto empty; \f ; rc 17.6.69 editor i, tape 3, page 19. ; empty: se w0 g8 ; if byte = <nl 1> sn w0 g4 ; byte = <sp> jl. (a40.+8); then goto action (8); sz w0 g22 ; if byte = <non gr> jl. (a40.+8); then goto action (8); rs. w0 i2. ; h. al w0 , jl. ; obj proper:= true; w. hs. w0 f61. ; rl. w0 i2. ; ; not empty: h2: se w0 g8 ; if byte <> <nl 1> jl. (a40.+8); then goto action (8); a60: ;to obj top of line: ds. w0 i2. ; save (w0, w3); h. al w0 , se w1 x1 ; obj proper:= false; w. hs. w0 f61. ; al w0 g10 ; byte (cur obj):= <top of line> hs w0 x2 ; al w2 x2+1 ; cur obj:= cur obj + 1; sn. w2 (f48.) ; if cur obj = obj bottom rl. w2 f47. ; then cur obj:= obj top; rl. w3 f44. ; al w3 x3+1 ; cur line:= cur line + 1; rs. w3 f44. ; ws. w3 f45. ; sh w3 d5 ; if cur line - out line > max back up sn. w2 (f46.) ; cur obj = cur out jl. w3 c11. ; then output line; dl. w0 i2. ; restore (w0, w3) jl. (a40.+6); goto action (6); ; line overflow: h3: ds. w0 i2. ; save (w0, w3); sn. w2 (f47.) ; if cur obj = obj top rl. w2 f48. ; then cur obj:= obj bottom; al w2 x2-1 ; cur obj:= cur obj - 1; al w0 g10 ; byte (cur obj):= <top of line> hs w0 x2 ; jl. w3 c11. ; output line; dl. w0 i2. ; restore (w0, w3); jl. h1. ; goto store; ; 0 ; save w3 i2: 0 ; save w0 ; e. ; end to object; \f ; rc 17.6.69 editor i, tape 3, page 20. a44: ; action procedure to delete; ; w0: destroyed ; w1: saved ; w2: saved ; w3: saved ; return on normal: action (8) ; return on proper line: action (6) ; ; comment: it is tested when a proper line has been ; deleted. b. h1, i1 ; begin to delete: w. ; ; f62: ; boolean delete proper; ;jl. h1. ; if delete proper then goto not empty se. w1 x1+h1. ; else goto empty; ; empty: se w0 g8 ; if byte = <nl> sn w0 g4 ; byte = <sp> jl. (a40.+8); then goto action (8); sz w0 g22 ; if byte = <non gr> jl. (a40.+8); then goto acion (8); rx. w0 i1. ; hs. w0 f62. ; delete proper:= true; rx. w0 i1. ; jl. (a40.+8); goto action (8); ; not empty: h1: se w0 g8 ; if byte <> <nl 1> jl. (a40.+8); then goto action (8); rl. w0 f64. ; bs. w0 1 ; line dest:= line dest -1; rs. w0 f64. ; h. al w0, se w1 x1 ; w. hs. w0 f62. ; delete proper:= false; al w0 g8 ; jl. (a40.+6); goto action (6); h. i1: 0 , jl. ; w. e. ; end to delete; \f ; rc 17.6.69 editor i, tape 3, page 21. a45: ; action procedure to corr; ; w0: byte / destroyed ; w1: saved ; w2: in corr ; w3: saved ; return normal: action (8) ; return on proper line: action (6) ; ; comment: bytes are stored in the corr line. for normal ; bytes control is transfered to action procedure to delete, ; which keep track of proper lines. ; when an empty line has been stored in corr is reset ; to the top of the corr line. ; a proper line will via to delete and the next ; instruction transfer control to corr input; b. h1 ; begin w. ; sn w0 g8 ; if byte = <nl 1> jl. h1. ; then goto nl; hs w0 x2 ; byte (in corr):= byte; al w2 x2+1 ; in corr:= in corr + 1; jl. a44. ; goto to delete; ; nl: h1: al w2 x2-1 ; in corr:= in corr -1; rs. w2 f35. ; bottom:= in corr; rl. w2 f31. ; in corr:= corr line address; jl. a44. ; goto to delete; e. ; end; \f ; rc 1.11.70 editor i, tape 3, page 22. a46: ; action procedure print; ; w0: byte ; w1: saved ; w2: saved ; w3: saved ; return: action(4); ; comment: a character is extracted from the byte and output ; on current output. ; if the byte is marked backspace, a <bs> is output as well. ; the character <nl> is output by outend, which cause termination ; of the block on character oriented processes; b. ; begin w. ; rs. w1 f41. ; save(w1,w2,w3); ds. w3 f43. ; rl. w1 f26. ; w1:= current out descriptor; al w2 127 ; la w2 0 ; char:= byte and mask char; sn w2 26 ; if char = <sub> then al w2 d16 ; char := <par. ver. char>; sn w2 10 ; if char = <nl> am h33-h26; then outend(w1,char) jl w3 x1+h26-h21; else outchar(w1,char); al w2 g3 a. 127 ; sz w0 g21 ; if byte = <comp> jl w3 x1+h26-h21; then outchar(w1,<bs>); rl. w1 f41. ; restore(w1,w2,w3); dl. w3 f43. ; jl. (a40.+4); goto action(4); e. ; end print; m.rc 14.09.72, editor i, tape 3. ▶EOF◀