DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦ed5adffe0⟧ TextFile

    Length: 44544 (0xae00)
    Types: TextFile
    Names: »ntedit3«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦63b4788cd⟧ »cgndit« 
            └─⟦this⟧ 

TextFile

\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
f102:           g22    ; bit 9.
f103:        -1-g22    ; not bit 9.
f104:           g23    ; bit 8.
f105:        -1-g23    ; not bit 8.
f106:           g24    ; bit 7.
f107:        -1-g24    ; not bit 7.
f108:             0    ; count with inserting in correct command
                       ; and <ctrl> + q.
f109:             0    ; syntaks and error flags.


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
f101:   0            ; simulate vaalue for bs and flag.

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.   a65               ; 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
     ; a63 next line
     ; 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                      a64 prepered for abs
     ; a29 num                          a65 xit editor.
\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;
     rs. w0     f109.  ; clear in insert mode.
     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.        c33.   ;** goto start preprocessing( through stepping stone)
                       ; c20 = start prepprocessing.


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.                     ;
a64:                   ; abs:
       al w0 0         ; set current to
       rs. w0 f44.     ; to zero and continue in rel.

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;
a63:                   ; next line
      am         1     ; line dest := cur line + 1;
                       ; goto prep 1.

a10:                   ; the line:
     al  w0      0     ;
     wa. w0     f44.   ;   line dest:= cur line + 0;
     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     g54.   ; 
     jl. w3     c43.   ;   print text (<:line.:>), ( with no new line char);
     al. w2     g53.   ; 
     jl. w3     c43.   ; print text (<:object::>)
     rl. w2     f27.   ; get address of current obj.
     al  w2     x2+h1+2; get address of document name.
     rl  w0  x2        ; if first word of name to be printed
     sn  w0     0      ;  is zero ( no name exist) then
     al. w2     g56.   ;  print text (<:<empty>:>) else
     jl. w3     c43.   ; print text obj name.
     al. w2     g52.   ;
     jl. w3     c43.   ; prrint text (<:source: :>);
     rl. w2     f28.   ; get address of current source descriptor.
     al  w2  x2+h1+2   ; get address of current source name;
     rl  w0  x2        ; if first word of name to be printed 
     sn  w0      0     ; is zero then 
     al. w2     g56.   ; print text (<:<empty>:>) else
     jl. w3     c43.   ; print text ( current source name);
     al. w2     g43.   ; 
     jl. w3     c17.   ; print text (<:<10>:>);
     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.   i3                ; 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;
     rl. w2     f27.   ;   get address of obj file descriptor.
     al  w2  x2+h1+2   ;   get address of name of object file.
     rl  w3     x2     ;   get first word of doc name.
     sn  w3     0      ;   if doc_name no exits then 
     jl.        i2.    ;    goto print end.
     jl. w3     c43.   ;   print text ( name of current object file);
     al. w2     g55.   ; 
     jl. w3     c43.   ;   print text (<:=:>);
i2:  al. w2     g32.   ;   print text (<:edit end.:>);
i3:  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);
a65: ;* xit ed. ( exit)
     ; the xit is selected because r is so close to e on the key bord
     al. w2     g58.   ; text := <:*** exit edit.:>;
     jl.        i3.    ; continue in finis.

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◀