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

⟦91401bdad⟧ TextFile

    Length: 26880 (0x6900)
    Types: TextFile
    Names: »too         «

Derivation

└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
    └─⟦a957ba283⟧ 
        └─⟦this⟧ »too         « 

TextFile

(
  message copyout
  copyout=set 4
  oo=set bs copyout
  copyproc=set 2
  xxx=set 1
  o xxx
  copyout=slang names.yes
  copyout oo
  if ok.yes
  (
    o c
    xxx=edit xxx
    yyy=algol message.no
    yyy xxx
    clear temp xxx yyy
    copyout=add copyproc
    scope user copyout oo copyproc
  )
  if ok.no
  (
    o c
    message copyout not ok
    end
  )
)

b.      g1, e4                  ; block for insertproc
d.
p.      <:fpnames:>             ;
l.

  ; NHP marts 1991
  ;
  ; Slang program og kode procedure til at frembringe en kopi på et
  ; bs-areal af det der skrives på zonen out. Kopieringen klargøres
  ; med programkaldet "<bs-area> = oo" og afsluttes med "oo". Algol
  ; programmer, der kaldes mellem disse to kald af oo og som ønsker
  ; at benytte faciliteten, kalder proceduren "copyout". Proceduren
  ; har ingen parametre og ingen returværdi, og bør kun kaldes en
  ; gang. Den sætter give up mask, give up action og algol blokpro-
  ; cedure i out's zone description samt modificerer h7, end pro-
  ; gram, så det sidste output kommer med, inden den retablerede h7
  ; kaldes.
  ;
  ; Programmet "oo" parallelforskyder adresseområdet fra h8 til h9,
  ; så der fra h9 til zonen in bliver plads til en blokprocedure
  ; for out og et bufferområde til bs-arealet. Bemærk, at koden i
  ; den følgende tekst kan forekomme dels i blokproceduren i nær-
  ; heden af h9, dels som program loadet af fp, og endelig blandt
  ; et algolprograms programsegmenter.
  ;
  ; Blokproceduren kan kaldes af algol_io, af fp_io og af fp via
  ; kodeproceduren fp_proc.
  ;
  ;  b, c and e names:
  ;
  ;  b0: start of copy to (h9)+2         c0: algol block procedure
  ;  b1: message                         c1: procedure copy core
  ;  b2: answer                          b19:
  ;  b3: name                            c2: common block procedure
  ;  b4: fp-base                         c3: procedure read char
  ;  b5: top of transfer                 c4: procedure write char
  ;  b6: save w1 ("record base")         c5: end program action
  ;  b7: save w3 ("partial word")        c6: procedure fill segment
  ;  b8: stack ref old block proc
  ;  b9: point to old block proc         e0: start of slang segment
  ; b10: constant 255                    e1: external list
  ; b11: constant 1<18                   e2: copyout entry
  ;      save (h7:)                      e3: oo      entry
  ; b12: save (h7:+2)                    e4: end   of slang segment
  ; b13: flag f. blkproc called
  ; b17: start of buffer
  ; b18: used for buffer-alignment
  ; b19: top of buffer
  ; b20: length of copy
  ;

  k=h55
w.
s.      b20, c10, d10           ;
w.
  e0:
b.      j30, g4                 ; code procedure copyout and algol
                                ; blockprocedure segment
h.
  g0=0                          ; no externals
  g1:   g3      , g2            ; head word
  j5:   g0 +  5 , 0             ; RS entry  5, goto point
  j8:   g0 +  8 , 0             ; RS entry  8, end address exp
  j13:  g0 + 13 , 0             ; RS entry 13, last used
  j21:  g0 + 21 , 0             ; RS entry 21, general alarm
  j27:  g0 + 27 , 0             ; RS entry 27, out
  j30:  g0 + 30 , 0             ; RS entry 30, saved stack ref, w3
  g2=-g1.-2                     ; end of abs words
  j0:   1<11 o.0, c0            ; point in this segm
  g3=-g1.-2                     ; end of points
w.
  e1:   g0                      ; external list, no externals
        0                       ; no hw's in own core
        91 03 08                ; date
        s4                      ; time

  ; De følgende data kopieres til hullet der skabes
  ; mellem h9 og zonen in

  b0:                           ; (h9)+2:

  ; w0: answer area addr
  ; w1: zone descr
  ; w2: share descr
  ; w3: logical status

        am     (   0            ; (h9)+2: fp-io blockproc entry
        rl  w0     2            ; w0:= hw transferred
        jl. w1     b19.         ; block_proc(
        am         h36-h68      ;   normal_return,
        al  w2     h68          ;   error_return);
        am.    (   b4.          ;
        al  w1     h21          ; w1:= zone descr
        am.    (   b4.          ; goto if error then
        jl      x2              ; std_give_up else return_to_check;

  b1:   5<12+0, 0, 0, 0         ; message
  b2:   0, r.8                  ; answer
  b3:   0, r.5                  ; name, name table addr
  b4:   0                       ; fp base
  b5:   0                       ; top addr from out
  b6:   0                       ; saved w1
  b7:   0                       ; saved w3
        0                       ; stack ref
  b9:   0                       ; segm nr, relative
  b10:  255                     ; mask, last char in word
  b11:  1<18                    ; mask, end of file
        0                       ; saved h7:
  b12:  0                       ; saved h7:+2

  b17:                          ; start of buffer

  ; Det følgende kopieres med, men overskrives af data fra out

  ; Koden i det følgende står blandt algol programsegmenterne

b.      a10                     ; procedure copyout;
w.
        am.    (   h9-h7        ; h7: goto (h9)+c5
  a0:   jl  w3     c5           ; +2: end_action;
                                ; +4: =w3
  a1:   <:<10>mon30res:>        ;

  e2:   rl. w2 (   j13.         ; copyout entry
        ds. w3 (   j30.         ; save stack ref;
        rl. w2     j27.         ; w2:= out zone descr;
        ac  w0     h53+1        ; w0:= -free before zones
        wa  w0  x2 h20+h0-h21   ; +first of in
        ws  w0  x2 h9-h21       ;     -(h9);
        se  w0     b20          ; if w0<>length of copy-code
        jl.    (   j8.          ; then return; <* oo inactive *>
        al  w1     2            ;
        wa  w1  x2 h9-h21       ; w1:= (h9)+2;
        al  w3  x1 b3-b0        ; w3:= addr(copyname);
        rl. w0     a0.-2        ;
        sn  w0 (x2 h7-h21       ; if h7 already changed
        jl.    (   j8.          ; then return;
        jd         1<11+52      ; create area process(copyname)
        jd         1<11+30      ; write protect(copyname)
        sn  w0     0            ; if result <> 0
        jl.        a2.          ;
        rl  w1     0            ; then
        al. w0     a1.          ; alarm(<:mon30res:>,result);
        jl. w3 (   j21.         ;
  a2:   al  w0     1<1          ; out.give_up_mask += 2;
        lo  w0  x2 h2           ; <* normal answer *>
        ds  w1  x2 h2+2         ; out.give_up_action:= (h9)+2;
        rl. w0 (   j13.         ; get stack ref
        rl. w1     j0.          ; and point to proc;
        rx  w0  x2 h4           ;
        rx  w1  x2 h4+2         ; exchange with out.blockproc;
        ds  w1  x3 b9-b3        ; save out.blockproc
        dl. w1     a0.          ;
        rx  w0  x2 h7-h21       ; change (h7) (fp end action)
        rx  w1  x2 h7-h21+2     ; to jump to c5;
        ds  w1  x3 b12-b3       ;
        jl.    (   j8.          ; return;
e.                              ; end copyout;

  ; Koden i det følgende står blandt algol programsegmenterne

b.      a10                     ; procedure block_pr(z,s,b);
w.
  c0=-g1.                       ; algol block_proc(z,s,b);
        rl. w2 (   j13.         ;
        ds. w3 (   j30.         ;
        rl. w1     j27.         ; w1:= out;
        rl  w3 (x2+12           ; w3:= s;
        rl  w0 (x2+16           ; w0:= b;
        sh  w0     512          ; if b > 512 then
        jl.        a0.          ; <* fp_proc ! *>
        rl  w2 (   0            ; w0:= word(word(w0)+2);
        rl  w0  x2+2            ;
  a0:   rl  w2  x1+h0+4         ; w2:= used_share(out)
        am     (x1+h9-h21       ;
        jl  w1     c2           ; resident block-proc;
        jl.    (   j8.          ; if ok then return;
        rl. w1     j27.         ; else
        rl. w2 (   j13.         ;
        am     (x1+h9-h21       ;
        dl  w1     2+b9-b0      ; old block_proc;
        ls  w0     4            ;
        jl.    (   j5.          ;

e.                              ;

  ; Koden i det følgende står kort efter fp som et slang-program

b.      a20                     ; start of oo-program
w.

  e3:   rs. w1     b4.          ; save fp-base
        al  w2  x2+2            ; w2:= addr(output or progname)
        al  w3  x3+2            ; w3:=
        rs. w3     d3.          ; d3:= addr(progname)
        ac  w0     h53+1        ;
        wa. w0     h20.+h0
        ws. w0     h9.          ; w0:= base.in-h53-top_of_commands
        se  w2  x3              ; if left side
        jl.        a2.          ; then goto output;
        se  w0     b20          ; if not active
        jl.        a7.          ; then return(<:already inactive:>);

        ac. w2     b0.-2        ; displacement:= top_of_commands
        wa. w2     h9.          ; _  + 2 - start_of_buffer;
        dl. w1  x2+b3.+2        ;
        ds. w1     b3.+2        ;
        dl. w1  x2+b3.+6        ;
        ds. w1     b3.+6        ;
        rl. w0  x2+b3.+8        ;
        rs. w0     b3.+8        ;
        al. w3     b3.          ;
  a4:   jd         1<11+52      ; create area process;
        se  w0     0            ; if w0 <> 0 then goto rep;
        jl.        a4.          ;
        rl. w1  x2+b6.          ; w1:= copyout_pointer;
        rl. w3  x2+b7.          ; w3:= addr(write());
        am         25           ; outchar(25);
  a0:   al  w0     0            ; while not
        jl  w3  x3              ; buffer_change do
        jl.        a1.          ;
        se. w1  x2+b17.         ; outchar(0);
        jl.        a0.          ;
        se. w3  x2+c4.          ;
        jl.        a0.          ;
        al. w3  x2+b3.          ;
        jd         1<11+42      ; look up entry;
        rl. w0  x2+b1.+6        ;
        rs  w0  x1              ; cut segments;
        dl  w1     110          ; get clock;
        ld  w1     5            ;
        al. w1  x2+b17.         ;
        rs  w0  x1+10           ; set shortclock;
        jd         1<11+44      ; change entry;
        al  w0  x3              ;
        jl. w3     h31.-2       ; write(out, copyname);
        al  w2     61           ;
        jl. w3     h26.         ; write(out, <:=:>);

        am        -1            ;
  a1:   al  w0     1            ;
        hs. w0     a3.          ;
        al  w0     b20          ;
        rl. w1     h8.          ; move back
        rl. w2     h9.          ; fp-kommands;
        jl. w3     c1.          ;
        rs. w1     h8.          ;
        rs. w2     h9.          ;

        rl. w0     d3.          ;
        jl. w3     h31.-2       ; write(out, progname);
        al. w0     d5.          ;
        jl. w3     h31.         ; write(out, <: now inactive:>);
        al  w2     0            ; return(ok)
  a3=k-1
        jl.        h7.          ;

  a2:   se  w0     0            ; output:
        jl.        a8.          ; if dist((h9),in) <> 0
        rs. w2     d2.          ; then goto already active;
        al  w0     1<2+3        ;
        al  w1     0            ;
        jl. w3     h28.         ; connect output;
        se  w0     0            ; if not ok
        jl.        a9.          ; then goto connecterror;
        rl  w0  x2+14           ; message.segm:=
        rs. w0     b1.+6        ; segm. nr.;
        rl  w0  x2              ;
        al  w2  x2+2            ;
        sl  w0     0            ;
        rl. w2     d2.          ; copyname:=
        dl  w1  x2+2            ; connected name;
        ds. w1     b3.+2        ;
        dl  w1  x2+6            ;
        ds. w1     b3.+6        ;

        ac  w0     b20          ; push h8-h9
        rl. w1     h8.          ; upwards to
        rl. w2     h9.          ; make room;
        jl. w3     c1.          ;
        rs. w1     h8.          ;
        rs. w2     h9.          ;

        ac. w2     b0.-2        ; displacement:=
        wa. w2     h9.          ; _  top of commands + 2 - start of copycore;
        al. w1  x2+b17.         ; set up addresses:
        rs. w1     b1.+2        ;  message.first
        rs. w1     b6.          ;  "record base"
        al  w1  x1+510          ;
        rs. w1     b1.+4        ;  message.last
        al. w1  x2+c4.          ;
        rs. w1     b7.          ;  "partial word"
        al  w0  x2              ;
        al. w1     b0.          ;
        al  w2  x1+b20          ;
        jl. w3     c1.          ; copy to (h9)-in;
        al  w2     0            ;
        jl.        h7.          ; return;

  a7:   jl. w2     a10.         ;
        <: already inactive<10><0>:>

  a8:   al. w0     d4.          ; already active:
        jl. w3     h31.-2       ; write(out,<:***:>);
        ac. w2     b0.-2        ; displacement:=
        wa. w2     h9.          ; _  top of commands + 2 - start of buffer;
        al. w0  x2+b3.          ;
        jl. w3     h31.         ; write(out,copyname,
        al  w2     61           ; _ <:=:>,
        jl. w3     h26.         ;
        jl. w2     a11.         ; _ programname,
        <: already active<10><0>:>

  a9:   jl. w2     a10.         ; connecterror:
        <: connect output unsucceccful<10><0>:>

  a10:  al. w0     d4.          ;
        jl. w3     h31.-2       ;
  a11:  rl. w0     d3.          ;
        jl. w3     h31.         ;
        al  w0  x2              ;
        jl. w3     h31.         ;
        al  w2     1            ;
        jl.        h7.          ; return(error)

e.                              ;

  ; Og nu noget for at overholde konventionerne for en kode procedure

  g4:
c.      g4-g1-506
m.      code segment too long
z.

c.      502-g4+g1
        0, r.252-(:g4-g1:)>1
z.
        <:copyout:>, 0          ; alarm text
i.
e.                              ; end code procedure segm.

  ; Nu er vi tilbage i slang programmet

        0                       ; save link
  d0:   0                       ; save displacement
  d2:   0                       ; save addr(copyname)
  d3:   0                       ; save addr(programname)
  d4:   <:***<0>:>
  d5:   <: now inactive<10><0>:>

b.      a10                     ;
w.
  ; kopier intervallet w1:w2 displacement væk
  ;   w0: displacement  ?
  ;   w1: first from    first to
  ;   w2: last from     last to
  ;   w3: link          ?

  c1:   ds. w0     d0.          ; save link, displacement;
        sh  w0     0            ;
        jl.        a2.          ; if displacement > 0
        wa  w0     4            ; then begin
        am         2            ;
  a1:   al  w2  x2-2            ;   for i:= last step -2 until first
        rl  w3  x2              ;   do to.i:= from.i
        am.    (   d0.          ;
        rs  w3  x2              ;
        se  w2  x1              ;
        jl.        a1.          ;
        wa. w1     d0.          ;
        rl  w2     0            ;
        jl.    (   d0.-2        ; end else

  a2:   wa  w0     2            ; begin
        am        -2            ;
  a3:   al  w1  x1+2            ;   for i:= first step 2 until last
        rl  w3  x1              ;   do to.i:= last.i
        am.    (   d0.          ;
        rs  w3  x1              ;
        se  w1  x2              ;
        jl.        a3.          ;
        rl  w1     0            ;
        wa. w2     d0.          ;
        jl.    (   d0.-2        ; end;
e.                              ;

  ; Fyld op resten af den plads, som skal bruges som buffer

  b18:                          ;
        0, r.256-(:b18-b17:)>1  ;
  b19:                          ; top of buffer

  ; Det følgende er den kode som, efter kopiering til området mellem
  ; (h9) og in, sørger for kopieringen fra out

b.      a10, d10                ;
w.
  ; block procedure, common part
  ;
  ; w0: hw's transferred
  ; w1: link
  ; w2: share
  ; w3: status

  c2=-b0.+2                     ; b19:
        rs. w1     d1.          ; entry block proc
        sz  w3     1            ; if hard error
        jl.        a3.          ; then goto hard;
        al. w1     a2.          ; finished:= normal
        rs. w1     b13.         ;
        rl  w1  x2+8            ; w1:= first addr;
        wa  w0     2            ; w0:= w1 + hw's transf.
  a0:   rs. w0     b5.          ; cont:
        al. w2     c3.          ; top addr:= w0
        rl. w3     b7.          ; x2:= read 1st char;

  a1:   jl  w2  x2              ; rep:
  b13:  0                       ; read char(finished);
        sn  w0     0            ; if char = 0
        jl.        a1.          ; then goto rep
        sn  w0     25           ; if char = 25
        jl.        a4.          ; then goto fill segm
        rx. w1     b6.          ;
        jl  w3  x3              ; write char
        jl.    (   b13.         ; if error then goto finished;
        rx. w1     b6.          ;
        jl.        a1.          ; goto rep

  a2:   rs. w3     b7.          ; finished(normal):
        jl.    (   d1.          ; normal return

  a3:   rs. w3     d3.          ; hard:
        al. w0     a5.          ;
        rs. w0     b13.         ; finished:= hard;
        rl  w1  x2+8            ; w1:= first addr
        al  w0     2            ;
        wa  w0  x2+10           ; w0:= last addr + 2
        jl.        a0.          ; goto cont

  c6:   rs. w3     d1.          ; ext fill segm:
        rl. w3     b7.          ;
  a4:   am        -2            ; fill segm:
  a5:   al  w1     2            ; finished(hard):
        hs. w1     a8.          ;
        rs. w3     b7.          ; finished(hard):
        rl. w1     b6.          ; save w1, w3 to enable continuation
        rs. w1     d0.          ; if out are repaired
        rl  w2  x1              ;
        am         25           ; outchar(25);
  a6:   al  w0     0            ; while not
        jl  w3  x3              ; buffer_change do
        jl.        a7.          ;
        se. w1     b17.         ; outchar(0);
        jl.        a6.          ;
        se. w3     c4.          ;
        jl.        a6.          ;
        rl. w1     b1.+6        ; decrement segment count;
        al  w1  x1-1            ;
        rs. w1     b1.+6        ;
  a7:   rl. w1     d0.          ;
        rs. w1     b6.          ;
        rs  w2  x1              ;
        dl. w3     d3.          ; reestablish save w1
        jl      x2+2            ; error return
  a8=k-1

  d0:   0                       ; save save w1
  d1:   0                       ; save link
  d3:   0                       ; save status
e.                              ;

b.      a10, d10                ;
w.
  d2:   0                       ; save read pointer
  d3:   0                       ; save write pointer

  ; read char
  ;   w0: ?             char
  ;   w1: word addr     word addr
  ;   w2: link          link
  ;   w3: ?             unchanged

        jl  w2  x2+2            ;
  c3:   sl. w1 (   b5.          ; 1st char:
        jl     (x2              ; if w1 >= top addr then return(finished)
        zl  w0  x1              ; w0:= word(w1) shift (-12)
        ls  w0    -4            ; _  shift (-4);
        jl  w2  x2+2            ; return;

        rl  w0  x1              ; 2nd char:
        ls  w0     4            ; w0:= word(w1) shift 4
        hl  w0     0            ; _  shift (-12)
        la. w0     b10.         ; _  and 255;
        jl  w2  x2+2            ; return;

        rl  w0  x1              ; 3rd char:
        la. w0     b10.         ; w0:= word(w1) and 255;
        al  w1  x1+2            ; w1:= w1 + 2;
        jl.        c3.-2        ; return;

  ; write char
  ;   w0: char          ?
  ;   w1: word addr     word addr
  ;   w2: ?             unchanged
  ;   w3: link          link

        jl  w3  x3+2            ;
  c4:   hs  w0     0            ; w0:=
        es  w0     0            ; _  w0 shift 12
        ls  w0     4            ; _  shift 4;
        rs  w0  x1              ; word(w1):= w0;
        jl  w3  x3+2            ; return;

        hs  w0     0            ; w0:=
        es  w0     0            ; _  w0 shift 12
        ls  w0    -4            ; _  shift (-4)
        lo  w0  x1              ; _  or word(w1);
        rs  w0  x1              ; word(w1):= w0;
        jl  w3  x3+2            ; return;

        lo  w0  x1              ; w0:= w0 or word(w1);
        rs  w0  x1              ; word(w1):= w0;
        al  w1  x1+2            ; w1:= w1 + 2;
        se. w1     b19.         ; if w1 < top of buffer
        jl.        c4.-2        ; then return;

        ds. w3     d3.          ; save read and write pointers;
        al. w3     b3.          ;
        jd         1<11+8       ; reserve proc(output)
        se  w0     0            ; if not ok
        jl.        a3.          ; then error;
  a1:   al. w1     b1.          ; send again:
        jd         1<11+16      ; send message
        al. w1     b2.          ;
        jd         1<11+18      ; wait answer
        se  w0     1            ; if not normal answer
        jl.        a3.          ; then error;
        rl  w0  x1+2            ;
        se  w0     512          ; if not one segment transferred
        jl.        a2.          ; then examine further;
        rl. w1     b1.+6        ;
        al  w1  x1+1            ; increase segment count;
        rs. w1     b1.+6        ;
        jd         1<11+10      ; release process;
        al. w1     b17.         ; w1:= first of buffer;
        dl. w3     d3.          ; load read and write pointers;
        jl.        c4.-2        ; return;

  a2:   rl  w0  x1              ; examine:
        sn  w0     0            ; if no status
        jl.        a1.          ; then try again;
        so. w0 (   b11.         ; if not end of file
        jl.        a3.          ; then error;
        am.    (   b4.          ;
        al  w1     h54          ;
        jd         1<11+42      ; look up entry;
        al  w0     10           ; increase segment count;
        wa  w0  x1              ;
        rs  w0  x1              ;
        jd         1<11+44      ; change entry;
        se  w0     6            ; if claims exceeded
        jl.        a5.          ; then begin
        dl  w0  x1 4            ;   move discname;
        ds. w0     d5.          ;
        dl  w0  x1 8            ;
        ds. w0     d7.          ;
        al. w1     d4.          ;
        al. w2     d6.          ;
        am.    (   b4.          ;
        jl  w3     h35          ;   parent message;
        al. w3     b3.          ;
        am.    (   b4.          ;
        al  w1     h54          ;
        jd         1<11+44      ;   try once more
  a5:   sn  w0     0            ; end;
        jl.        a1.          ; if ok then send again;

  a3:   jl. w1     a4.          ; error:
        44<12+0<5+0             ; print-message to parent
        <:trouble: :>           ;
  a4:   al  w2  x3              ;
        am.    (   b4.          ;
        jl  w3     h35          ;
        al  w3  x2              ;
        al. w1     b17.         ;
        rs. w1     b6.          ;
        jl.    (   d3.          ; return(failure)

  d4:   44<12+3<5+1             ; extend bs message
        <:bs :>                 ;
        0                       ;
  d5:   0                       ;
  d6:   0                       ;
  d7:   0                       ;
        10                      ;
        0                       ;
e.                              ;

b.      a10, d10                ;
w.

  d0:   <:   Output copied to <0>:>
  d1:   <:...<10><10><0>:>

  c5=-b0.+2                     ; end program: (modified h7)
        rx. w1     b12.-2       ; save name
        rx. w2     b12.         ; and end_action;
        ds  w2  x3-2            ; reestablish fp h7:;
        al  w2     0            ;
        rs. w2     b13.         ;
        jl  w3  x3 h33-h7-4-4   ; outend(nl);
  a0:   rl. w2     b13.         ; while -,block_proc
        se  w2     0            ; called do
        jl.        a1.          ;
        jl  w3  x1 h26-h21      ; outchar(out,0);
        jl.        a0.          ;
  a1:   jl. w3     c6.          ; fill segment;
        rl. w2     b4.          ;
        al. w0     d0.          ; write message
        jl  w3  x2 h31-2        ;
        al. w0     b3.          ;
        jl  w3  x2 h31          ;
        al. w0     d1.          ;
        jl  w3  x2 h31          ;
        dl. w2     b12.         ; load name
        am.    (   b4.          ; and end_action;
        jl         h7           ; goto h7 proper;
e.                              ;

  b20=-b0.                      ; half words to move
  e4:

i.

e.                              ;

  ; copyout procedure

  g0:   2                       ; segmenter
        0, r.4                  ; disc
        1<23+e2-e0              ; entry
        1<18                    ; procedure copyout
        0                       ;
        4<12+e1-e0              ; type, start of ext. list
        1<12+0                  ; segments, owns

  ; oo program

  g1:   1<23+4                  ; bs
        0, r.4                  ; disc
        s2                      ; time
        0                       ;
        0                       ;
        2<12+e3-e0              ; type, entry
        e4-e0                   ; length

d.
p.      <:insertproc:>          ;

d./c4=/,  r/c5=//,  l1,

d./c6=/,  r/b0=//,  l1,

d./b2=/,  r/b3=//,  l1,

d./b11=/, r/b12=//, l1,

d./b19=/, r/b20=//, l1,

s, f

begin
  integer c5, b0, b3, b12, b20;
  zone z(128, 1, stderror);

  read( in, c5, b0, b3, b12, b20 );
  open( z, 4, <:copyproc:>, 0 );
  write( z, <<d>, <:; include-fil til slang programmer som vil benytte oo
b.      a10
w.
m.copyproc
        ds. w1     a0.
        ds. w3     a1.
        jd         1<11+5
        rl  w1  x1 22
        al  w2  x1 h21
        ac  w0     h53+1
        wa  w0  x1 h20+h0
        ws  w0  x1 h9
        se  w0     :>, b20, <:
        jl.        a7.
        al  w1     2
        wa  w1  x2 h9-h21
        al  w3  x1 :>, b3 - b0, <:
        rl. w0     a2.
        sn  w0 (x2 h7-h21
        jl.        a7.
        jd         1<11+52
        jd         1<11+30
        sn  w0     0
        jl.        a6.
        al  w1  x2
        al  w2  x3
        al. w0     a4.
        jl  w3  x1 h31-h21
        al  w0  x2
        jl  w3  x1 h31-h21
        al. w0     a5.
        jl  w3  x1 h31-h21
        al  w2     1
        jl      x1 h7-h21

        0
  a0:   0
        0
  a1:   0

  a2:   am.    (   h9-h7
  a3:   jl  w3     :>, c5, <:

  a4:   <60>:***<60>0>:<62>
  a5:   <60>:=oo inaccessible<60>10><60>0>:<62>

  a6:   al  w0     1<1
        lo  w0  x2 h2
        ds  w1  x2 h2+2
        dl. w1     a3.
        rx  w0  x2 h7-h21
        rx  w1  x2 h7-h21+2
        ds  w1  x3 :>, b12 - b3, <:

  a7:   dl. w3     a1.
        dl. w1     a0.
e.
t.
u.:>, "nl", 1, "em", 1 );
  close( z, true )
end
▶EOF◀