|
|
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: 43776 (0xab00)
Types: TextFile
Names: »edit33tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »edit33tx «
\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.01.80 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 copy possible
; f92 ; boolean bypass close object in work alarm
; 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
; fgs 1984.10.29 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);
se w0 0 ; if connect trouble then
jl. c38. ; alarm (corr.area);
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.01.80 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.
f90=k+1 ; boolean copy possible
sn w1 x1 + 0 ; if -,copy possible then
jl. a0. ; goto work source;
; copy possible:
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 work source;
al. w1 f83. ; create a new object area (exactly as the old):
jd 1<11+40 ; create entry(w1,w3);
se w0 0 ; if create not ok
jl. a6. ; goto restore old object;
\f
; rc 29.01.80 editor i, tape 3, page 12a.
am. (f77.) ; fp base;
am (h16 ) ; own process description;
dl w1 78 ; std base;
am. (f28.) ;
al w3 +h1+2 ;
jd 1<11+74 ; change entry base old object;
al w1 0 ; old object temporary;
jd 1<11+50 ;
f91=k+1 ; permanent key ;
al w1 ; permanent new object;
am. (f27.) ;
al w3 +h1+2 ;
jd 1<11+50 ;
se w0 0 ; if not permanentet then
jl. a6. ; goto restore old object;
dl. w1 f89. ; change entry base new object;
jd 1<11+74 ;
sn w0 0 ; if ok then
jl. a7. ; goto connect object;
a6: jd 1<11+48 ; restore old object: remove new object;
al w1 x3 ; rename old object back again;
am. (f28.) ;
al w3 +h1+2 ;
jd 1<11+46 ;
al w3 x1 ; original name;
zl. w1 f91. ; permanent old object back again;
jd 1<11+50 ;
dl. w1 f89. ; change entry base back again;
jd 1<11+74 ;
\f
; rc 29.01.80 editor i, tape 3, page 12b.
; the text in object must be copied back into source;
a0: rl. w1 f27. ; work source: 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;
\f
; rc 29.01.80 editor i, tape 3, page 12c.
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
; fgs 1984.10.29 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. i2 ; 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. ;
zl. w3 c10. ;
h. sn w3, jl x3 ; if -,dummy object then
w. jl. i2. ; begin
al. w2 g47. ;
jl. w3 c17. ; print text (<:object document : :>);
rl. w2 f27. ;
al w2 x2+h1+2 ; text := object.document name;
jl. w3 c17. ; print text (text);
al. w2 g43. ;
jl. w3 c17. ; print text (<:<10><0>:>);
i2: ; end;
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 84.10.29, editor 1, tape 3.
▶EOF◀