|
|
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: 43008 (0xa800)
Types: TextFile
Names: »edit32tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »edit32tx «
\f
; rc 17.6.69 editor i, tape 2, page 1.
; outstring:
; comment: a string terminated by the current <del> is trans-
; ferred from the correction document to the correction string
; the value of numic specified characters are taken from
; the byte table; if they are special marked the mark
; is removed.
;
; outstring 1 requiers the total string to be in the corr string
; buffer.
; outstring 2 puts no restrictions on the string.
; outstring 3 requiers the total copied string to be in the
; corr string buffer, and being not empty;
b. h10,i4 ;
h. ; booleans for:
i0: sn.w2 ( , se w1 x1; outstring 3,
sn w1 x1, rs.w2 ; outstring 2,
sn w1 x1, se w1 x1; outstring 1;
w. ;
; outstring 1:
a17: am 2 ; long:=false; not empty:= false; goto a;
; outstring 2:
a18: am 2 ; long:=true; not empty:= false; goto a;
; outstring 3:
a27: rl. w0 i0. ; long:=false; not empty:= true;
; a:
rs. w2 i3. ; first:= cur corr;
rs. w3 f67. ; save(cur pr);
hs. w0 i1. ;
ls w0 -12 ;
hs. w0 i2. ;
h1: ; next normal: boolean long;
i1: rs. w2 f63. ; if long then save point:= cur corr;
bl w0 x1 ; byte:= byte(cur in);
sn w0 g9 ; if byte = <no line>
jl. w1 c15. ; then input corr line;
al w1 x1+1 ; cur in:= cur in + 1;
sz w0 g20+g21 ; if byte = <special> ! <comp>
jl. h3. ; then goto test byte;
sn. w0 (f6.) ; if byte = delim(1)
jl. h9. ; then goto to next pr;
; store byte:
h2: hs w0 x2 ; byte(cur corr):= byte;
al w2 x2+1 ; cur corr:= cur corr + 1;
sn. w2 (f50.) ; if cur corr = corr bottom
jl. w2 c7. ; then save correction;
jl. h1. ; goto next normal;
; test byte:
h3: se. w0 (f37.) ; if byte = num char then
jl. h4. ; begin
ds. w3 f43. ; save(w2, w3);
jl. w2 c14. ; read integer;
; test num char:
h10: al w1 x1+1 ; cur in:= cur in +1;
bl w0 x1-1 ; byte:= byte(cur in);
sn w0 g4 ; if byte = <sp>
jl. h10. ; then goto test num char;
se. w0 (f37.) ; if byte <> num char
jl. c25. ; then alarm(syntax);
\f
; rc 1.11.70 editor i, tape 2, page 2.
rl. w0 f66. ;
sl w0 0 ; in integer < 0
sl w0 128 ; integer >= 128
jl. c25. ; then alarm (syntax);
am (0) ;
bl. w0 f1. ; byte:= byte table(integer) and
la. w0 i4. ; -, special and -,skipped;
jl. h2. ; goto store byte;
; end;
h4: sz w0 g20 ; if byte = <special>
jl. c25. ; then alarm (syntax);
; test comp delim:
al. w3 f6. ; delim pointer:= first delim
; next comp:
h5: rs. w0 f60. ; subbyte:= byte
bl w0 x3 ; byte:= delim (delim pointer);
rs. w3 f43. ; save (delim pointer);
rx. w0 f60. ; cross (byte, subbyte);
jl. w3 c12. ; search comp(
jl. h8. ; goto match);
; no match:
al. w3 f6. ; delim pointer:= first delim;
; step delim pointer:
h6: sn. w3 (f43.) ; if delim pointer = saved delim pointer
jl. h7. ; then goto transfer comp;
bl w0 x3 ; byte:= delim (delim pointer);
hs w0 x2 ; byte (cur corr):= byte;
al w2 x2+1 ; cur corr := curcorr + 1;
sn. w2 (f50.) ; if cur corr = corr bottom
jl. w2 c7. ; then save correction;
al w3 x3+1 ; delim pointer:= delim pointer + 1;
jl. h6. ; goto step delim pointer;
; transfer comp:
h7: bl w0 x1-1 ; byte:= byte(cur in);
so w0 g21 ; if byte <> <comp>
jl. h2. ; then goto store byte;
hs w0 x2 ; byte (cur corr):= byte;
al w2 x2+1 ; cur corr:= cur corr + 1
sn. w2 (f50.) ; if cur corr = corr bottom
jl. w2 c7. ; then save correction;
al w1 x1+1 ; cur in := cur in + 1
jl. h7. ; goto transfer comp;
; match:
h8: so w0 g21 ; if byte <> <comp>
jl. h9. ; then goto new pr;
al w3 x3+1 ; delim pointer:= delim pointer + 1;
bl w0 x1 ; byte:= byte (cur in);
al w1 x1+1 ; cur in:=cur in +1;
jl. h5. ; goto next comp;
; to next pr:
h9: rl. w3 f67. ; restore(cur pr);
; boolean not empty:
i2: sn. w2 (i3.) ; if not empty and first=cur corr
jl. c25. ; then alarm(syntax);
jl. a4. ; goto next pr 2;
i3: 0 ; first:
i4: -1-g20-g24 ; not special and not skipped
e. ;
\f
; rc 17.6.69 editor i, tape 2, page 3.
a19: ; prep last:
rs. w2 f63. ; save point:= cur corr;
jl. a4. ; goto next pr 2;
a20: ; set last:
al w0 x2 ; byte:= cur corr - save point;
ws. w0 f63. ;
am. (f63.) ; byte(save point + 1):= byte
hs w0 1 ;
jl. a4. ; goto next pr 2;
; mark kind
; comment: a name is read indicating one of the five
; kinds: 1 empty, 2. standard, 3. numeric, 4. char,
; and 5. line. cur pr is shifted to a corresponding
; process string;
b. h2, i1 ; begin
h. ; byte array kind(1:6):=
h1: 83,69,78, 67,76 ; s, e, n, c, l, -1;
-1 ;
w. ;
a21: rs. w2 f67. ; save (cur corr)
jl. w2 c13. ; read name (letter);
hs. w0 i1. ;
al w2 0 ; for i:= 0 step 1 until 6 do
h2: bl. w0 x2+h1. ; begin
al w2 x2+1 ;
sn w0 -1 ; if kind(i) = -1
jl. c25. ; then alarm(syntax);
h. se w0 ; if kind(i) = letter then
i1: 0 ; begin cur corr:= saved cur corr;
w. jl. h2. ;
wa w3 4 ; cur pr:= cur pr + i + byte (cur pr + i);
rl. w2 f67. ; goto next pr 3;
ba w3 x3 ; end
jl. a5. ; end
e. ; end;
\f
; rc 17.6.69 editor i, tape 2, page 4.
a22: ; read char:
; comment: a graphic not composed character is input
; and transferred to the correction string;
bl w0 x1 ; byte:= byte(cur in);
al w1 x1+1 ; cur in:= cur in + 1;
se w0 g8 ; if byte = <nl 1>
sz w0 g21+g22 ; byte = (<non gr> <comp>)
jl. c25. ; then alarm (syntax);
al w3 x3+1 ; cur pr:= cur pr + 1;
jl. a2. ; goto out corr and next pr 3;
a23: ; read yes or no:
; comment: a name is read. if it is yes the next cur pr
; is output, if it is no the second cur pr is output;
b. h1 ; begin
w. ;
rs. w2 f67. ;
jl. w2 c13. ; letter:= read name;
rl. w2 f67. ;
al w3 x3+3 ; cur pr:= cur pr + 3;
sn w0 78 ; if letter = <n>
jl. h1. ; then goto no
se w0 89 ; if letter <> <y>
jl. c25. ; then alarm (syntax);
; yes:
am -1 ; byte:= byte(cur pr - 1); goto a;
; no:
h1: bl w0 x3-1 ; byte:= byte (cur pr - 2);
jl. a2. ; a: goto out corr and next pr 3;
e. ; end read yes or no;
\f
; rc 9.1.70 editor i, tape 2, page 5.
a24: ; to nl:
; comment: before transfer to the executor for copying
; the line to be corrected it is tested that the mode
; is on line and that the correct command is
; terminated by a <nl>;
bl w0 x1 ; byte:= byte (cur in);
bl. w2 f70. ;
se w2 1 ; if mode <> on line
se w0 g8 ; byte <> <nl>
jl. c25. ; then alarm (syntax);
jl. c21. ; goto start executor;
c19: ; after correction:
; comment: after the corrected line has been composed
; in the corr line string, curr corr and cur pr
; are initialized and control is transferred to next pr 3;
al w0 g8 ;
hs. w0 f6. ; delim(first delim):= <nl 1>
rl. w2 f49. ; cur corr:= corr top
al. w3 j18. ; cur pr:= j18
jl. a5. ; goto next pr 3;
a26: ; test nl:
; comment: if the next byte is not <nl> an alarm
; is given;
bl w0 x1 ; byte:= byte(cur in);
al w1 x1+1 ; cur in:= cur in +1;
sn w0 g8 ; if byte = <nl1> then
jl. a4. ; goto next pr 2;
sz w0 g22+g23 ; if byte = (<nongr> or <blind>)
jl. a26. ; then goto testnl
jl. c25. ; else alarm(syntax);
a28: ; out integer byte:
; comment: an integer is read and output as a byte;
ds. w3 f43. ; save(w2,w3);
jl. w2 c14. ; read integer; restore(w2,w3);
rl. w0 f66. ; byte:= integer;
al w3 x3+1 ; cur pr:= cur pr +1;
jl. a2. ; goto out corr and next pr 3;
\f
; fgs 1984.10.29 editor i, tape 2, page 6.
c7: ; procedure save correction;
; w0: destroyed
; w1: saved
; w2: return/updated cur corr
; w3: saved
; comment: the procedure is used for saving the correction string
; when it is full.
; 1. if <save point> is equal <corr top> a correction part is to
; long. alarm <:syntax:> is given.
; 2. the byte at save point is replaced with <restore corr>.
; 3. if the byte at corr top is <first corr> no correction has yet
; been saved. the correction area descriptor is connected for
; output.
; 4. the output is performed.
; 5. the byte replaced is restored and the correction string from
; <save point> to <corr bottom> is moved to <corr top>. when
; exit w2, <cur corr>, points on the byte after the last moved
; byte;
b. d2 ; begin
w. ;
ds. w2 f42. ; save(w1,w2,w3);
rs. w3 f43. ;
rl. w1 f63. ;
sn. w1 (f49.) ; if save point = corr top
jl. c25. ; then goto alarm(<:syntax:>);
bl w0 x1 ;
rs. w0 f40. ; save(byte(save point));
al w0 b5 ;
hs w0 x1 ; byte(save point):= <restore corr>;
rl. w1 f88. ; w1:= correction area descriptor;
bl. w0 (f49.) ;
se w0 g11 ; if byte(corr top) <> <first corr>
jl. d1. ; then goto output;
; connect:
al w0 1<1+0 ; comment: one segment , pref. on disk
al w2 x1+h1+2 ; w2:= corr descr.name;
am. (f77.) ;
jl w3 h28 ; connect output(w1,w2);
se w0 0 ; if connect trouble then
jl. c38. ; alarm (corr. area);
; output:
d1 = k
c. h57<2 ; if system 2 then begin
rl w2 x1+h1+16 ; get segment count
sl. w2 (f25.) ; if area length <= segmentcount
jl. c38. ; then alarm (corr. area);
z. ; end system 2;
am. (f77.) ;
jl w3 h23 ; outblock(w1);
; move:
rl. w1 f63. ; w1:= save point;
rl. w0 f40. ; byte:= saved(byte(savepoint));
rl. w2 f49. ; cur corr:= corr top;
rs. w2 f63. ; save point:= corr top;
; step:
d2: hs w0 x2 ; byte(cur corr):= byte;
al w2 x2+1 ; cur corr:= cur corr +1;
al w1 x1+1 ; w1:= w1 +1;
bl w0 x1 ; byte:= byte(w1);
se. w1 (f50.) ; if w1 <> corr bottom
jl. d2. ; then goto step;
rl. w1 f41. ;
rl. w3 f43. ; restore(w1,w3);
jl. (f42.) ; exit(saved w2);
;
e. ; end save correction;
\f
; rc 29.06.71 editor i, tape 2, page 7.
c13: ; procedure read name;
; w0: irrelevant / first letter of name in kapitel
; w1: cur in / cur in pointing at byte after name
; w2: return / destroyed
; w3: saved
;
; comment: a name consisting of letters including comments, leading
; spaces and new lines, and including following spaces
; is by passed. the first letter of the name is delivered
; in w0;
b. h6, i2 ; begin
w. ;
rs. w2 i1. ; save (w2);
; skip prelude:
h1: bl w0 x1 ; first letter:= byte (cur in);
sn w0 g9 ; if first letter = <no line>
jl. w1 c15. ; then input corr line;
al w1 x1+1 ; cur in:= cur in + 1;
la. w0 f18. ;
se w0 g8 ; if first letter = <nl>
sn w0 g4 ; first letter = <sp>
jl. h1. ; then goto skip prelude;
sl w0 97 ; if first letter is a small letter
ba. w0 i2. ; then first letter:= corresponding kapital letter;
sl w0 65 ; if first letter
sl w0 94 ; is not a letter
jl. h5. ; then goto test comment;
; skip letter:
h2: bl w2 x1 ; byte 1:= byte (cur in);
la. w2 f18. ;
sl w2 97 ; if byte 1 is a small letter
h. al w2 x2 ; then byte 1:= corresponding kapital letter;
i2: -32 ;
w. sl w2 65 ; if byte 1 is equal
sl w2 94 ; a letter
jl. h4. ; then
al w1 x1+1 ; begin cur in:= cur in +1;
jl. h2. ; goto skip letter end;
; skip post lude:
h3: se w2 g4 ; if byte 1 <> <sp>
jl. (i1.) ; then exit (saved w2);
al w1 x1+1 ; cur in:= cur in + 1;
h4: bl w2 x1 ; byte 1:= byte (cur in);
la. w2 f18. ;
jl. h3. ; goto skip post lude;
;
; test comment:
h5: sn w0 59 ; if byte <> ; or
h6: sn w0 g7 ; next char: if byte = <em> then
jl. c25. ; alarm(syntax);
se w0 g8 ; if byte = <nl1>
sn w0 g9 ; or byte = <no line> then
jl. h1. ; goto skip prelude;
al w1 x1+1 ; cur in := cur in + 1;
bl w0 x1 ; byte := byte(cur in);
jl. h6. ; goto next char;
i1: 0 ; saved w2:
e. ; end read name;
\f
; rc 17.6.69 editor i, tape 2, page 8.
c14: ; procedure read integer;
; w0: destroyed
; w1: cur in / cur in pointing at terminating char
; w2: return / saved w2
; w3: irrelevant / saved w3
; integer: the value of the integer
;
; a integer consisting of a possible leading sign and termi-
; nated by a non digit character is read and stored in
; integer. spaces are regarded as blind.
b. h5 ; begin
w. ;
rs. w2 f40. ; save (return);
al w3 0 ; value:= 0;
; skip leading spaces:
h1: bl w0 x1 ; byte:= byte(cur in);
se w0 g4 ; if byte = <sp> then
jl. h2. ; begin
al w1 x1+1 ; cur in:= cur in + 1;
jl. h1. ; goto skip leading spaces;
; end;
h2: sn w0 45 ; if byte = <minus>
am -2 ; then sign:= -1
al w2 1 ; else sign:= +1;
rs. w2 f66. ;
se w0 43 ; if byte = <plus>
sn w0 45 ; byte = <minus> then
; test digit:
h3: al w1 x1+1 ; cur in := cur in +1;
bl w0 x1 ; byte:= byte(cur in);
sl w0 48 ; if byte < digit (0)
sl w0 58 ; byte > digit (9)
jl. h5. ; then goto term;
wm. w3 f21. ; value:= value * 10 + byte - 48;
am (0) ;
al w3 x3-48 ;
jl. h3. ; goto test digit;
; term:
h5: wm. w3 f66. ; integer:= value * sign;
rs. w3 f66. ;
dl. w3 f43. ; restore(w2, w3);
bl w0 x1-1 ;
se w0 43 ; if byte(cur in-1) =
sn w0 45 ; (<plus> or <minus>)
al w1 x1-1 ; then cur in:= cur in -1;
jl. (f40.) ; exit (saved return);
;
e. ; end read integer;
\f
; rc 17.6.69 editor i, tape 2, page 9.
c15: ; procedure input corr line;
; w0: irrelevant / first byte
; w1: return / cur in pointing at first byte
; w2: saved
; w3: saved
;
; comment: input line is called for reading of the next line;
b. i3 ; begin
w. ;
rs. w1 i1. ; save (w1, w2, w3);
ds. w3 i3. ;
jl. w3 c1. ; cur in:= input line;
bl w0 x1 ; first byte:= byte(cur in);
dl. w3 i3. ; restore (w2, w3);
jl. (i1.) ; exit(saved w1);
;
i1: 0, i2: 0, i3: 0 ;
e. ; end input corr line;
\f
; rc 17.6.69 editor i, tape 2, page 10.
; definition of byte values for command table and process table:
; value in command table referring to process table:
e0 = j0 - b0 ; syntax
e1 = j21 - b0 ; line
e2 = j22 - b0 ; print
e3 = j23 - b0 ; delete
e4 = j24 - b0 ; insert
e5 = j25 - b0 ; replace
e6 = j26 - b0 ; global
e7 = j27 - b0 ; correct
e8 = j28 - b0 ; mark
e9 = j29 - b0 ; verify
e10 = j30 - b0 ; where
e11 = j31 - b0 ; finis
e12 = j32 - b0 ; source
; value in process table referring to preprocesses:
e20 = a25 - b1 ; alarm (syntax)
e21 = a6 - b1 ; pos
e22 = a7 - b1 ; term print
e23 = a8 - b1 ; term
e24 = a10 - b1 ; out 6
e25 = a11 - b1 ; out 3
e26 = a12 - b1 ; out 2
e27 = a13 - b1 ; out 1
e28 = a14 - b1 ; out rel
e29 = a15 - b1 ; return
e30 = a16 - b1 ; delim
e31 = a17 - b1 ; out string 1
e32 = a18 - b1 ; out string 2
e33 = a19 - b1 ; prep last
e34 = a20 - b1 ; set last
e35 = a21 - b1 ; mark kind
e36 = a22 - b1 ; read char
e37 = a23 - b1 ; read yes or no
e38 = a24 - b1 ; to nl
e39 = a9 - b1 ; to executor
e40 = a26 - b1 ; test nl
e41 = a27 - b1 ; out string 3
e42 = a28 - b1 ; out integer byte
i.
e. ; end preprocessor block 2;
m.end preprocessor
t.
i.
e. ; end preprocessor block 1;
\f
; fgs 1984.10.29 editor i, tape 2, page ...11...
;global text string:
g30: <: line.<10><0>:>
g31: <: line, end document.<10><0>:>
g32: <:edit end.<10><0>:>
g33: <: position not found. <10><0>:>
g34: <: back space error. <10><0>:>
g35: <: object too big. <10><0>:>
g36: <: editor error. <10><0>:>
g37: <: syntax. <10><0>:>
g38: <: line too long. <10><0>:>
g39: <: connect source.<10><0>:>
g40: <:***edit<0>:>
g41: <: character.<10><0>:>
g42: <: work area.<10><0>:>
g43: <:<10><0>:>
g44: <: correction area.<10><0>:>
g45: <: parity error on <0>:>
g46: <: source unknown.<10><0>:>
g47: <:object document : <0>:>
c40: jl. c32. ; address init editor (stepping stone);
\f
; rc 17.6.69 editor i, tape 2, page 12.
c12: ; procedure search comp;
; w0: byte
; w1: saved
; w2: saved
; w3: return / cur sub
; sub byte: byte value / destroyed
; save w3; f43: cur sub
; match return: return
; no match return: return + 2
; comment: it is tested whether the byte can be found among
; a composed set of characters in the substring. if a match is
; found the current subbyte and the found subbyte change
; position in the substring.
b. h4 ; begin
w. rs. w3 f42. ; save w2:= return;
rl. w3 f43. ; i:= cur sub;
sn. w0 (f60.) ; if byte = subbyte
jl. (f42.) ; then exit (save w2);
rx. w0 f60. ;
so w0 g21 ; if byte (cur sub) <> <comp>
jl. h4. ; then goto no match
; search:
h1: al w3 x3+1 ; i:= i + 1;
bl w0 x3 ; sub byte:= byte (i);
so w0 g21 ; if sub byte <> <comp>
jl. h3. ; then goto test last;
se. w0 (f60.) ; if byte <> subbyte
jl. h1. ; then goto search;
bl. w0 (f43.) ;
; match:
h2: hs w0 x3 ; byte (i):= byte (cur sub);
rl. w3 f43. ;
rl. w0 f60. ;
hs w0 x3 ; byte(cur sub):= byte;
jl. (f42.) ; exit (save w2);
; test last:
h3: lo. w0 f16. ; sub byte:= sub byte ! comp;
se. w0 (f60.) ; if byte <> subbyte
jl. h4. ; then goto no match;
bl. w0 (f43.) ;
la. w0 f17. ; byte:= byte & not comp;
jl. h2. ; goto match;
; no match:
h4: dl. w0 f60. ; restore(byte,cur sub);
am. (f42.) ;
jl 2 ; exit (save w2 + 2);
e. ; end search comp;
\f
; rc 9.1.70 editor i, tape 2, page 13.
c1: ; procedure input line;
; w0: destroyed
; w1: irrelevant / line address
; w2: destroyed
; w3: return / destroyed
; line address: actual line address
; descriptor: actual descriptor address
; call: jl. w3 c1.
; comment: a line is input and stored on the internal line format.
; the bytes are input by the fp inchar function, and the
; corresponding byte is fetched from the byte table.
; special bytes are treated as follows:
; <nl>: is replaced by <nl 1>, a not special byte, and the line
; is terminated
; <em>: is stored and the line is terminated
; <bs> and <cr>: the line is updated in accordance with
; the characters graphical behaviour.
; the mark characters are transformed to not special
; bytes in case the input file is the source file. for the
; correction file following actions are taken:
; line char: input is started a freach.
; char char: in stead of the char char the graphical position
; is replaced by a space.
; number char: the char is just treated as a normal
; character.
; the procedure is used for composing a line after a <cr> has
; been simulated:
; w0: destroyed
; w1: irrelevant / line address
; w2: destroyed
; w3: destroyed
; line address: actual line address
; descriptor: actual descriptor address
; line top: actual line address - 1
; line bottom: actual line bottom
; bottom: last character of line + 1;
; input line return: return
; call: jl. c2.
b. h30, i1 ; begin
w. ;
rs. w3 f36. ; input line return:= return;
; first:
h1: rl. w1 f33. ; w1:=
al w1 x1-1 ; cur:=
al w2 x1+d4-2 ; line top:= line address -1;
ds. w2 f53. ; line bottom:= line top +max line length -2;
\f
; rc 9.1.70 editor i, tape 2, page 14.
; next:
h2: al w0 x1 ; w0:= cur;
rl. w1 f32. ; w1:= descriptor;
jl. w3 (f84.) ; w2:= inchar;
; inchar return 1:
i1: sl w2 128 ; if char error
jl. c36. ; then alarm(character);
bl. w2 x2+f1. ; byte:= byte table(w2);
sz w2 g20+g24 ; if byte = <special> or <skipped>
jl. h20. ; then special 1(inchar return 1);
; store 1:
h27: ba. w0 1 ; cur:= cur +1;
hs w2 (0) ; byte(cur):= byte;
sl. w0 (f53.) ; if cur >= line bottom
jl. h6. ; then goto terminate;
jl. (f84.) ; w2:= inchar; goto inchar return 1;
; store:
h3: rl w2 0 ; w2:= byte;
al w0 x1 ; w0:= cur;
rl. w1 f32. ; w1:= descriptor;
al. w3 i1. ; w3:= inchar return 1;
jl. h27. ; goto store 1;
; nl:
h4: al w2 g8 ; byte:= <nl 1>;
; em:
h5: rl. w0 f35. ; cur:= bottom;
ba. w0 1 ; cur:= cur +1;
hs w2 (0) ; byte(cur):= byte;
; terminate:
h6: al w2 g9 ; byte:= <no line>;
ba. w0 1 ; cur:= cur +1;
hs w2 (0) ; byte(cur):= byte;
rl. w1 f33. ; w1:= line address;
jl. (f36.) ; exit(input line return);
c2: ; comment: entry for processing after simulation of <cr>;
; cr:
h7: rl. w1 f34. ; cur:= line top;
am 1 ; delete next instruction
; bs:
h8: al w1 x1-1 ; cur := cur-1;
sn. w1 (f34.) ; if cur = line top
jl. h9. ; then goto next comp;
bl w0 x1 ; byte:= byte(cur);
sz w0 g21+g22 ; if byte = <comp> or <non gr>
jl. h8. ; then goto bs;
; next comp:
h9: al w0 x1 ; w0:= cur;
rl. w1 f32. ; w1:= descriptor;
jl. w3 (f84.) ; w2:= inchar;
sl w2 128 ; if char error
jl. c36. ; then alarm(character);
; inchar return 2:
bl. w2 x2+f1. ; byte:= byte table(w2);
sz w2 g20+g24 ; if byte = <special> or <skipped>
jl. h21. ; then special 2(in char return 2);
rx w2 0 ; w0:= byte;
al w1 x2 ; w1:= cur;
\f
; rc 17.6.69 editor i, tape 2, page 15.
; skip non graphic:
h10: sn. w1 (f35.) ; if cur = bottom
jl. h3. ; then goto store;
al w1 x1+1 ; cur:= cur + 1;
bl w3 x1 ; byte 1:= byte (cur);
sz w3 g22 ; if byte 1 = <non gr>
jl. h10. ; then goto skip non graphic;
sz w0 g22 ; if byte = <non gr>
jl. h16. ; then goto make room;
; test sp:
h11: la. w3 f17. ; byte 1:= byte 1 & not comp
se w0 g4 ; if byte = <sp> !
sn w0 x3 ; byte = byte 1
jl. h19. ; then goto skip forward;
sn w3 g4 ; if byte 1 = <sp>
jl. h18. ; then goto store comp;
se w0 g5 ; if byte <> <underline>
jl. h13. ; then goto test bar;
; underline:
h12: lo. w0 f16. ; byte:= byte ! comp;
jl. h16. ; goto make room;
; test bar:
h13: se w0 g6 ; if byte <> <bar>
jl. h14. ; then goto test comp;
se w3 g5 ; if byte 1 <> <underline>
jl. h12. ; then goto underline;
bl w3 x1 ; byte 1:= byte (cur);
so w3 g21 ; if byte 1 <> <comp>
jl. h15. ; then goto comp and make room;
al w1 x1+1 ; cur:= cur + 1;
bl w3 x1 ; byte 1:= byte (cur);
la. w3 f17. ; byte 1:= byte 1 & not comp
sn w0 x3 ; if byte 1 = byte
jl. h19. ; then goto skip forward
jl. h12. ; goto underline;
; test comp:
h14: bl w3 x1 ; byte 1:= byte (cur);
so w3 g21 ; if byte 1 <> <comp>
jl. h15. ; then goto comp and make room;
al w1 x1+1 ; cur:= cur + 1;
bl w3 x1 ; byte 1:= byte (cur);
la. w3 f17. ; byte 1:= byte 1 & not comp;
se w0 x3 ; if byte 1 <> byte
jl. h14. ; then goto test comp;
jl. h19. ; else goto skip forward;
\f
; rc 17.6.69 editor i, tape 2, page 16.
; comp and make room:
h15: lo. w3 f16. ; byte 1:= byte 1 ! comp;
hs w3 x1 ; byte (cur):= byte 1;
al w1 x1+1 ; cur:= cur + 1;
; make room:
h16: rl. w2 f35. ; cur 1:=
al w2 x2+1 ; bottom:= bottom + 1;
rs. w2 f35. ;
sl. w2 (f53.) ; if bottom >= line bottom
jl. h25. ; then goto line over flow
; step room:
h17: sn w2 x1 ; if cur 1 = cur
jl. h18. ; then goto store comp;
al w2 x2-1 ; cur 1:= cur 1 - 1;
bl w3 x2 ;
hs w3 x2+1 ; byte (cur 1 + 1):= byte (cur 1);
jl. h17. ; then goto step room;
; store comp:
h18: hs w0 x1 ; byte (cur):= byte;
; skip forward:
h19: bl w3 x1 ; byte 1:= byte (cur)
sz w3 g22 ; if byte 1 = <non gr>
jl. h8. ; then goto bs;
so w3 g21 ; if byte 1 <> <comp>
jl. h9. ; then goto next comp;
al w1 x1+1 ; cur:= cur + 1;
jl. h19. ; goto skip forward;
; line overflow:
h25: al w0 g9 ;
hs w0 x2-1 ; byte (bottom - 1):= <no line>
jl. c26. ; alarm (line to long);
; procedure special 1, special 2;
; w0: cur
; w1: descriptor
; w2: byte
; w3: return -6
; call special 1: jl. h20.
; call special 2: jl. h21.
;
; comment: the difference between special 1 and special 2 is
; that special 1 sets the value of bottom to cur, special 2 does
; not.
; on the special bytes <nl>, <bs>, <cr>, and <em> jump is
; made to relevant actions.
; if the descriptor is the source descriptor the special mark
; on the mark characters are removed and return is made.
; otherwise:
; line char: will cause jump to first.
; char char: cause replacement with <sp> and compressing
; if necessary and then return either to store or to store comp.
; numeric char: cause imediate return.
\f
; rc 1.11.70 editor i, tape 2, page 17.
b. i1 ; begin
w. ; special 1:
h20: rs. w0 f35. ; bottom:= cur;
; special 2:
h21: sz w2 g24 ; if byte = <skipped> then inchar(w3);
jl. (f84.) ;
sn w2 g1 ; if byte = <nl> then goto nl;
jl. h4. ;
sn w2 g3 ; if byte = <bs> then goto bs 1;
jl. h26. ;
sn w2 g2 ; if byte = <cr> then goto cr;
jl. h7. ;
sn w2 g7 ; if byte = <em> then goto em;
jl. h5. ;
sn w2 g15 ; if byte = <sub> then
jl. c39. ; alarm (parity error);
se. w1 (f28.) ; if descriptor <> source descriptor
jl. h22. ; then goto del char;
la. w2 f18. ; byte:= byte and not special;
jl x3+10 ; exit(return);
; bs 1:
h26: rl w1 0 ; w1:= cur;
jl. h8. ; goto bs;
; del char:
h22: se. w2 (f38.) ; if byte = line char then
jl. h28. ; begin a: char:= inchar
jl. w3 (f84.) ; if char <> <nl>
se w2 10 ; then goto a;
jl. -4 ; goto first;
jl. h1. ; end;
h28: sn. w2 (f37.) ; if byte = num char then exit(return);
jl x3+10 ;
; erasing:
rl w1 0 ; w1 := cur;
al w0 g4 ; byte := <sp>;
al w2 x1 ; cur1 := cur;
; step distance:
h23: bl w3 x2+1 ; byte1 := byte(cur1 + 1);
sz w3 g21+g22 ; if byte1 <> (<nongr> or <comp>)
sn. w2 (f35.) ; or cur1 = bottom
jl. h24. ; then goto move;
al w2 x2+1 ; cur1 := cur1 + 1;
jl. h23. ; goto step distance;
; move:
h24: al w3 x1 ;
ws w3 4 ; distance := cur - cur1;
hs. w3 i1. ;
; test move:
h29: sn. w2 (f35.) ; if cur1 = bottom
jl. h30. ; then goto set new bottom;
al w2 x2+1 ; cur1 := cur1 + 1;
bl w3 x2 ;
i1 = k+1 ; integer distance:
hs w3 x2+0 ; byte(cur1 + distance) := byte(cur1);
jl. h29. ; goto test move;
; set new bottom:
h30: ba. w2 i1. ; bottom := bottom + distance;
rs. w2 f35. ;
sn w1 x2 ; if cur = bottom
jl. h3. ; then goto store;
al w1 x1+1 ; cur := cur + 1;
jl. h18. ; goto store comp;
e. ; end special;
e. ; end input line;
\f
; rc 76.05.17 editor i, tape 2, page ...18...
; procedure alarm (message text);
; comment: for normal alarms the current value of the correction
; number and the message text are printed on the message docu-
; ment. for the editor error, the call address (the value of w1)
; is printed in stead of the correction number. in on-line
; mode control is transfered to start preprocessing. in off-
; line mode the editing is terminated.
b. h1, i1 ; begin
w. ;
; connect source:
c34: rl. w2 f56. ; w2:= cur obj;
sn w0 3
am g46-g39 ; mess:=<:source unknown:>
am g39-g33 ; mess:= mess 7; goto save pointer;
;
am -1 ; position not found:
c23: am g33-g34+1 ; mess:= mess1; goto save pointer;
;
; back space error:
c24: am g34-g35 ; mess:= mess 2; goto save pointer;
;
; obj to big:
c27: al. w0 g35. ; mess:= mess 3;
ds. w2 f56. ; save pointer: save (cur source, cur obj);
jl. h1. ; goto print;
;
; editor error:
c29: rs. w1 f69. ; corr no:= call address;
am g36-g42 ; mess:= editor error; else
; work area:
c37: al w0 g42-g37 ; mess:= work area;
al w1 2 ; if work alarm
sn w0 g42-g37 ; then bypass close object;
hs. w1 f92. ;
al w1 1 ;
hs. w1 f70. ; opr mode:= off line;
am (0) ; goto print;
;
; syntax:
c25: am g37-g41 ; mess:= mess5; goto print;
; character:
c36: am g41-g44 ; mess:= character; goto print;
;
; correction area
c38: am g44-g38 ; mess := corr. area; goto print;
;
; line to long:
c26: al. w0 g38. ; mess:= mess 6;
; print:
h1: rs. w0 i1. ;
al. w2 g40. ;
jl. w3 c17. ; printtext(<:***edit:>);
rl. w0 f69. ;
jl. w3 c16. ; print value (corr no);
32<12+5 ;
rl. w2 i1. ;
jl. w3 c17. ; print text (mess);
rl. w2 i1. ; if <position not found> during
sn. w2 g33. ; string search then
jl. w3 c41. ; print searched string;
bl. w0 f70. ;
rl. w2 f56. ; w2:=cur. obj.
se w0 0 ; if opr mode = off line
jl. c18. ; then goto error terminate editor;
jl. c20. ; goto start preprocessor;
i1: 0 ;
e. ; end alarm;
\f
; rc 1.11.70 editor i, tape 2, page 19.
c16: ; procedure print value;
; w0: value
; w1: -
; w2: -
; w3: return
; return: <layout>
; comment: the procedure just transferes the call to
; out integer on current output;
b. i2 ; begin
w. ;
am. (f77.) ;
jl h32-2 ; out integer current(w0);
; end print value;
c17: ; procedure print text;
; w0: destroyed
; w1: destroyed
; w2: addr / destroyed
; w3: return / destroyed
;
; comment: a string terminated by <0> is printed
; on the message document;
; begin
rs. w3 i2. ; save( return);
al w0 x2 ; w0:= addr;
am. (f77.) ;
jl w3 h31-2 ; outtext current(w0);
al w2 0 ;
am. (f77.) ;
jl w3 h33-2 ; outend current(0);
jl. (i2.) ; exit(saved return);
i2: 0 ;
e. ; end print text;
c39: ;print parity alarm
; called from special1 or special2 in
; input line (c1)
; w0 - / unchanged
; w1 descriptor / unchanged
; w2 par.char. / unchanged
; w3 return-10 / unchanged
b. i1
w.
ds. w1 i0. ; begin
la. w2 f18. ; byte := <sub>;
ds. w3 i1. ; save registers;
rl. w2 f77. ; get fp-base;
al. w0 g45. ; get text addr
jl w3 x2+h31-2 ; outtext(parity error on);
rl. w3 i0. ;
al w0 x3+h1+2 ; get document name address
jl w3 x2+h31-2 ; outtext(document name);
al w2 10 ;
am. (f77.) ;
jl w3 +h33-2 ; outend(nl);
dl. w1 i0. ; restore registers;
dl. w3 i1. ;
jl x3+10 ; return; end;
0, i0:0, 0, i1: 0 ; saved registers
e.
\f
; rc 1.11.70 editor i, tape 2, page 20.
f1: ; byte table:
h.
g24+0 , g22+1 , g22+2 , g22+3 ; skipped, non gr , non gr , non gr
g22+4 , g22+5 , g22+6 , g22+7 ; non gr , non gr , non gr , non gr
g3=8+g20 , g1=10+g20 ; <bs> , <ht> , <nl> , <vt>
g3 , g22+9 , g1 , g22+11 ; spec , non gr , spec , non gr
g2=13+g20 ; <ff> , <cr> ,
g22+12 , g2 , g22+14 , g22+15 ; non gr , spec , non gr , non gr
; , red rb , black rb
g22+16 , g22+17 , g22+18 , g22+19 ; non gr , non gr , non gr , non gr
g22+20 , g22+21 , g22+22 , g22+23 ; non gr , non gr , non gr , non gr
g7=25+g20, g15=26+g20 ; <em> , <sub>
g22+24 , g7 , g15 , g22+27 ; non gr , spec , spec , non gr
; , <us>
g22+28 , g22+29 , g22+30 , g22+31 ; non gr , non gr , non gr , non gr
g4=32+g23, g6=33 ; <sp> , <bar> ,
g4 , g6 , 34 , 35 ; blind , , ,
36 , 37 , 38 , 39 ; , , ,
40 , 41 , 42 , 43 ; ( , ) , , +
44 , 45 , 46 , 47 ; , , - , . , /
48 , 49 , 50 , 51 ; 0 , 1 , 2 , 3
52 , 53 , 54 , 55 ; 4 , 5 , 6 , 7
56 , 57 , 58 , 59 ; 8 , 9 , : , ;
60 , 61 , 62 , 63 ; < , = , > ,
\f
; rc 17.6.69 editor i, tape 2, page 21.
64 , 65 , 66 , 67 ; , a , b , c
68 , 69 , 70 , 71 ; d , e , f , g
72 , 73 , 74 , 75 ; h , i , j , k
76 , 77 , 78 , 79 ; l , m , n , o
80 , 81 , 82 , 83 ; p , q , r , s
84 , 85 , 86 , 87 ; t , u , v , w
88 , 89 , 90 , 91 ; x , y , z , æ
g5=95 ;
92 , 93 , 94 , 95 ; ø , å , & ,
96 , 97 , 98 , 99 ; , a , b , c
100 , 101 , 102 , 103 ; d , e , f , g
104 , 105 , 106 , 107 ; h , i , j , k
108 , 109 , 110 , 111 ; l , m , n , o
112 , 113 , 114 , 115 ; p , q , r , s
116 , 117 , 118 , 119 ; t , u , v , w
120 , 121 , 122 , g20+123 ; x , y , z , æ
g20+124 , g20+125 , 126 ; ø , å ,
g23+g24+127 ; <del> blind skipped
m.rc 84.10.29, editor 1, tape 2.
\f
▶EOF◀