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

⟦eff899210⟧ TextFile

    Length: 14592 (0x3900)
    Types: TextFile
    Names: »tremoveupdi «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »tremoveupdi « 

TextFile

(removeupdi=slang list.no
removeupdi
end)
; procedure removeupdi ( name );
; undefined              name  ;
;
; flemming biggas april 1988.
; flemming biggas januar 1988.
; flemming biggas august 1985.
;
; b.h100 dummy block fpnames
;
b. g1, e5 w.

k=10000
d.
p.<:fpnames:>
l.
s.  c20
w.
b. j100
j0=3                            ;    3 externals
h.
c1:e5:c2         , c3           ;    head word
j1:  0           , 1            ;    own core: result
j13: j0+13       , 0            ;    rs entry last used
j29: j0+29       , 0            ;    rs entry param alarm
j30: j0+30       , 0            ;    rs entry saved stack ref
j3:  j0+3        , 0            ;    rs entry reserve
j6:  j0+6        , 0            ;    rs entry end register express.
j4:  j0+4        , 0            ;    rs entry take expression
j16: j0+16       , 0            ;    rs entry segment table base
j21: j0+21       , 0            ;    rs entry general alarm
j61: 1<11+1      , 0            ;    segment table address next segment

c2=k-2-c1
c3=k-2-c1

w.

e0:                3            ;    3 externals
                   0            ;    0 own bytes
  <:open:>,0,0,      1<18+19<12+41<6+19 , 8<18+0
  <:close:>,0,0,     1<18+18<12+8<6+0   , 0
  <:startfilei:>,    1<18+8<12+0        , 0

  s3,s4                                 ;    end external list

  b. a40, b40 , f40  ;    local names
  w.
 ; organization of stack extension during call:
                f0 =    + 0 ;    saved stack ref;
                f1 = f0 + 2 ;    mess operation
                f2 = f1 + 2 ;    mess first address
                f3 = f2 + 2 ;    mess last address
                f4 = f3 + 2 ;    mess segment number
                f5 = f4 + 2 ;    answer status
                f6 = f5 + 2 ;    answer remaining words
                f7 = f6 +14 ;    docname
                f8 = f7 +10 ;    start i/o area
                f9 = f8+510 ;    top i/o area
                f10= f9+2   ;    zone descriptor address (<>0 if param=zone)
                f11= f10+2  ;    last used (after reserve)
                f12= f11-f0+2;    no of halfwords to reserve in stack

b0:             0,r.10         ; area for lookup entry
b3:             0       ;    saved return in check
b18:           <:<32><32><32>:>; mask for non zero chars
b15:            2.11111;  mask for kind
b16:            0    ;    saved segment table entry of string point;
b17:            0    ;    saved relative of string point;
b19:            6<12+23;  param=zone
b21:            3<12+0;   input
b22:            5<12+0;   output
b24:           <:<10>upd.mark:>
b25:           <:<10>lookup  :>
b26:           <:<10>kind    :>
b27:           <:<10>contents:>
b28:           <:<10>z.state :>
b29:           <:<10>reserve :>
b30:           <:<10>status  :>

e1:  rl. w2    (j13.)  ;    get last used
     ds. w3    (j30.)  ;    save stackref
     al  w1    -f12    ;    reserve room for i/o e.t.c. in stack
     jl. w3    (j3.)   ;    init stack for i/o:
     rs  w1  x1+f11    ;    save stack top;
     rs  w2  x1+f0     ;    save stack ref from call;
     al  w2  x1+f8     ;    first address;
     rs  w2  x1+f2     ;
     al  w2  x1+f9     ;     last address;
     rs  w2  x1+f3     ;
     ld  w0     100    ;
     rs  w0  x1+f4     ;    segno:= 0;
     ds  w0  x1+f7+2   ;    docname(1):= 0;
     ds  w0  x1+f7+6   ;    docname(2):= 0;
     rs  w0  x1+f7+8   ;    name table address:=0;
     rs  w0  x1+f10    ;    zone descriptor address := 0;
a2:  rl. w1    (j13.)  ;    get param: w1:= last used;
     rl  w2  x1+f0     ;  get param: w2:= saved stackref;
     dl  w1  x2+8      ;    w0w1:= first formal
     la. w0     b15.   ;    isolate kind
     sn  w0     24     ;    if string variable
     jl.        a1.    ;    goto string;
     sn  w0     8      ;    if expression then
     jl.        a0.    ;    goto take expression
     dl  w1  x2+8      ;    if param<>zone then
     sn. w0    (b19.)  ;
     jl.        a10.   ;
     jl. w3    (j29.)  ;    call param alarm

a0:  dl  w1  x2+8       ;    string expression:
     jl. w3   (j4.)     ;    take expression;
     ds. w3   (j30.)    ;    save stack ref;

a1:  dl  w0  x1         ;    string: 
     sh  w3    -1       ;    if layout string then
     jl. w3    (j29.)   ;      goto param error;
     sh  w0    -1       ;    if short string then 
     jl.        a6.     ;
     jl. w1     a3.     ;      save and check;
     jl.        a0.     ;      goto take expression;

a6:  zl  w0     6       ;    string point: w0:= segno;
     ls  w0     1       ;
     rl. w2    (j16.)   ;    w2:= segm table (segno);
     wa  w2     0       ;
     rs. w2     b16.    ;    save segm table entry
     zl  w2     7       ;    w2:= relative string point;
a5:  rl. w3    (b16.)   ;    next portion: w3:= address (relative string point);
     hs. w2     3       ;    modify next address with relative string point;
     dl  w0  x3+0       ;    w3w0:= string portion;
     sh  w0    -1       ;    if point then
     jl.       a6.      ;    goto string point;
     jl. w1    a3.      ;    save and check;
     al  w2  x2-4       ;    relative := relative -4;
     jl.        a5.     ;    goto next portion;
     
     0,0                ;    return address,saved w2;
a3:  ds. w2     a3.-2   ;    save and check:
     rl. w1    (j13.)   ;    w1:= stack reference;
     rl  w2  x1+f7      ;    if docname (1) = real <::> then
     sn  w2     0       ;
     am        -4       ;    docname(1):= w3w0 else
     ds  w0  x1+f7+6    ;    docname(2):= w3w0;
     la  w3     0       ;    if end of text then
     so. w3    (b18.)   ;
     jl.        a4.     ;    goto check entry
     dl. w2     a3.-2   ;
     jl      x1         ;    else return;

a10: rl. w3    (j13.)  ;    zone parameter:
     rs  w1  x3+f10    ;
     rl  w2     2      ;    w2:=zone descriptor
     rl  w1  x2+h2+6   ;    if zone state<>10 then
     sn  w1    +10     ;    alarm (z.state);
     jl.       +6      ;
     al. w0     b28.   ;
     jl. w3    (j21.)  ;
     rl. w3    (j13.)  ;    w3:= saved stack ref;
     al  w2  x2+h1+2   ;    for i:= 1, 2 do
     dl  w1  x2+2      ;    docname(i):= z.docname(i);
     ds  w1  x3+f7+2   ;
     dl  w1  x2+6      ;
     ds  w1  x3+f7+6   ;
                       ;
a4:  rl. w3    (j13.)  ;    check entry:
     al  w3+x3+f7      ;
     al. w1     b0.    ;
     jd         1<11+42;    lookup entry
     se  w0     0      ;    if -, found then
     jl.        a20.   ;    goto alarm (not found) else
     rl. w0     b0.    ;    if not area then
     sh  w0     0      ;    goto alarm (not area)
     jl.        a21.   ;    else
     zl. w0     b0.+16 ;    if content key<>22 then
     se  w0     22     ;
     jl.        a22.   ;    goto alarm (contents);
     jd         1<11+52;    create (area process);
     jd         1<11+8 ;    reserve (process);
     se  w0     0      ;    if ok.no then
     jl.        a23.   ;    goto alarm (reserve);
     rl. w0     b21.   ;    operation:=input;
     rl. w1    (j13.)  ;    w1:= last used;
     rs  w0  x1+f1     ;
     al  w0     0      ;    segno := 0;
     rs  w0  x1+f4     ;
     jl. w3    a31.     ;    send and check
     rl. w3    (j13.)  ;    w3:= last used;
     rl  w2   x3+f2    ;    w2:=buffer start
     rl  w1  x2        ; 
     al  w1  x1+147    ;
     al  w1  x1-1      ;
     as  w1    -9      ;
     al  w1  x1+1      ;    w1 := segno of update mark
     sn  w1     0      ;    if <> current segment then
     jl.        a12.   ;    begin
     rs  w1  x3+f4     ;    segno:=w1;
     jl. w3    a31.     ;    send and check
a12: rl. w3    (j13.)  ;    w3:= last used;
     rl  w2  x3+f2     ;    w2:=buffer start;
     rl  w1  x2+14     ;    w1:=update mark
     rs. w1    (j1.)   ;    result:=w1;
     sh  w1    +1      ;    if w1>1 then
     jl.        a13.   ;
     al. w0     b24.   ;    alarm(w1,updatemark);   
     jl. w3    (j21.)  ;
a13: al  w1     0      ;    delete update mark
     rs  w1  x2+14     ;
     rl. w0     b22.   ;    operation:=output;
     rs  w0  x3+f1     ;
     jl. w3    a31.    ;    send and check
     rl. w3    (j13.)  ;    w3:= last used;
     rl  w2  x3+f10    ;    w2:= zone param (<>0 = yes)
     al  w1    +f12    ;    release bytes from stack
     jl. w3    (j3.)   ;
     sn  w2     0      ;    if w2=<>0 then
     jl.        a14.   ;    begin comment zone param;
     rl. w0     b19.   ;      w0:= first formal zone param;
     al  w1  x2        ;      w1:= zone descr. address;
     rl. w3    (j61.)  ;      w3 segment table address
     jl      x3+c8     ;      goto rel c8 on next segment
                       ;    end

a14: rl. w3    (j13.)  ;    remove process:
     al  w3  x3+f7     ;
     jd         1<11+64;   
     al  w0     0      ;
     rl. w1    (j1.)   ;    w0w1:=result;
     jl.       (j6.)   ;    return
a20: al. w1     b25.   ;
     jl.        a30.   ;
a21: al. w1     b26.   ;
     jl.        a30.   ;
a22: al. w1     b27.   ;
     jl.        a30.   ;
a23: al. w1     b29.   ;
     jl.        a30.   ;
a30: rx  w1     0      ;
     jl. w3    (j21.)  ;    alarm

a31: rs. w3    b3.     ;    save and check: save return ;
     rl. w3   (j13.)   ;
     al  w1  x3+f1     ;    w1 := address (mess area);
     al  w3  x3+f7     ;    w3 := address (docname);
     jd      1<11+16   ;    send message ;
     rl. w3   (j13.)   ;
     al  w1  x3+f5     ;    w1 := address (answer area);
     jd      1<11+18   ;    wait answer;
     rl  w2    0       ;    status :=
     al  w0    1       ;              1 < result
     ls  w0  x2        ;    if normal answer then
     sn  w0    2       ;      status := status
     lo  w0  x1        ;      or answer.status;
     se  w0    2       ;    if status <> 0 then
     jl.       a32.    ;      goto status_alarm;
     rl  w2  x1+2      ;    
     rl. w3    b3.     ;      w3 := return;
     sn  w2    512     ;    if halfwords = 512 then
     jl      x3        ;      goto return else
     jl.       a31.    ;      goto repeat;
a32: rl  w1    0       ;    status alarm: w1 := status;
     al. w0    b30.    ;
     jl. w3   (j21.)   ;    general alarm (<:status:>, w1);


i.e.                     ;    end a and b names
e.                     ;    end j names
c4:

c.c4-c1-506
m.code segment 0 too long
z.

c.502-c4+c1,jl -1,r. 252-(:c4-c1:)>1 z.
<:removeupdi0:>

\f




k=10000
b. j100
j0=3                   ;    3 externals
h.
c5:    c6         ,  c7       ;    rel last point,rel last abs word
j1:     0         ,  1        ;    result
j3:    j0+3       ,  0        ;    rs entry reserve
j4:    j0+4       ,  0        ;    rs entry take expression
j6:    j0+6       ,  0        ;    rs entry end register expression
j13:   j0+13      ,  0        ;    rs entry last used
j30:   j0+30      ,  0        ;    rs entry saved stack ref

c7=k-2-c5

j70:   1          ,  0        ;    1st external open
j71:   2          ,  0        ;    2nd external close
j72:   3          ,  0        ;    3rd external startfilei

c6=k-2-c5

b. a20, b20
w.
      0
b0:   0, r.10
c8=k-c5
     rs  w1    4       ;    at entry w0w1=formals descr. zone param
     al  w1   -10      ;    reserve ( 10 bytes )
     jl. w3   (j3.)    ;    during create call formals are saved in w0 and w2;
     al  w3  x2        ;    w2,w3:= zone formals from call;
     rl  w2     0      ;    stack+0 : formal 1 zone param
     ds  w3  x1+2      ;    stack+2 : formal 2  -     -
     al  w2    +25     ;    stack+4 : formal 1 boolean
     rs  w2  x1+4      ;    stack+ 6: address  boolean
     al  w2  x1+8      ;    stack+ 8: boolean :=
     rs  w2  x1+6      ;    0 ( false )
     al  w0     0      ;
     rs  w0  x1+8      ;
     al  w0  x1        ;    w0 = stack ref
     ls  w0     4      ;     ls 4
     rl. w1     j71.   ;    w1 = point (close);
     dl. w3    (j30.)  ;
     jl. w3    (j4.)   ;
     ds. w3    (j30.)  ;
     al  w1     10     ;    release from stack
     jl. w3    (j3.)   ;
     rl. w2    (j13.)  ;    w2 = last used
     al  w1    -38     ;    reserve 38 bytes
     jl. w3    (j3.)   ;    in stack
     dl  w0  x2+8      ;    w3w0 = formals zone
     ds  w0  x1+2      ;    stack+ 2: formals zone
     rl  w2     0      ;    w2:= zone descr.
     al  w2  x2+h1+4   ;    w2 = zonedescr.name
     dl  w0  x2        ;    w3w0 := zone.name(1);
     ds  w0  x1+24     ;    stack+24: name(1);
     dl  w0  x2+4      ;    w3w0 := zone.name(2);
     ds  w0  x1+28     ;    stack+28: name(2);
     al  w3     26     ;    stack+6: formals integer
     al  w0  x1+18     ;
     ds  w0  x1+6      ;
     al  w0    +4      ;    integer := 4;
     rs  w0  x1+18     ;   
     al  w3    +4      ;    dope address=4
     ls  w3    +12     ;    formal 1:= dope address < 12
     al  w3  x3+19     ;                         + 19
     al  w0  x1+32     ;
     ds  w0  x1+10     ;
     al  w3    +26     ;    stack+14: formals intger
     al  w0  x1+16     ;
     ds  w0  x1+14     ;
     al  w0    +0      ;    intger := 0;
     rs  w0  x1+16     ;
     al  w3  x1+29     ;    array description
     al  w0  x1+21     ;
     ds  w0  x1+32     ;
     al  w3    +8      ;
     al  w0    +0      ;
     ds  w0  x1+36     ;
     rs  w0  x1+20     ;
     al  w0  x1        ;    w0 stack ref
     ls  w0    +4      ;
     rl. w1     j70.   ;    w0w1 := point open;
     dl. w3    (j30.)  ;
     jl. w3    (j4.)   ; 
     ds. w3    (j30.)  ;
     al  w1     38     ;
     jl. w3    (j3.)   ;    release bytes in stack
     al  w2  x1        ;    w2:=param stack
     al  w1    -4      ;    reserve 4 bytes in stack
     jl. w3    (j3.)   ;
     dl  w0  x2+8      ;    transfer zone param to
     ds  w0  x1+2      ;    new stack
     dl. w3    (j30.)  ;
     al  w0     0      ;
     rl. w1     j72.   ;    w0w1 := point startfilei
     jl. w3    (j4.)   ;    call startfilei;
     ds. w3    (j30.)  ;
     al  w1     4      ;    release stack
     jl. w3    (j3.)   ;


     al  w0     0
     rl. w1    (j1.)   ;    w0w1:=result
     jl.       (j6.)   ;
c9:

c.c9-c5-506 m.code segment 1 too long 
z.

c.502-c9+c5,jl -1, r.252-(:c9-c5:)>1 z.

<:removeupdi1<0>:>
e.                                 ;    end a20,b20 block
i.e.
i.e.
w.
g0:g1:               2 ;    2 segments on disc
               0,0,0,0 ;    room for docname
            1<23+e1-e5 ;    entry point on segment 0
          3<18+41<12,0 ;    integer procedure, one param:undefined
            4<12+e0-e5 ;    algol procedure, start external list
                2<12+2 ;    2 code segments, 2 bytes in own core
m.removeupdi 4.0 (sw8201/1 15.2) fb.1988.02.11
d.
p.<:insertproc:>
end
▶EOF◀