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

⟦e570cfc17⟧ TextFile

    Length: 16896 (0x4200)
    Types: TextFile
    Names: »retclaim3tx «

Derivation

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

TextFile

mode list.yes
claim4tx=edit claim3tx
; connect output : segm < 2 + key
; claim <proc> ...
;
l./claim ...1/, r/85.03.13/89.01.10/
l./s. a26/, r/a26, b38/a99, b99/, r/d2/d9/
l./; variables/, i/
\f


; fgs 1989.01.10                                    claim  ...1a...
/

l./b0:/, i/

b40: 0     ; process description address
b41: 0, r.4; process name
b49: 0     ; saved item adress
b50: 0     ;
b51: 0     ; save item head, address of head after <:all:>
/, l1, p-2
l./b21:/, r/entr/entr./
l./b22:/, r/segm/segm./
l./b24:/, r/***/<10>***/, r/<0>/param <0>/
l./b28:/, r/<10>/  /, r/area/area :/
l./b29:/, r/   buf/  buf :/
l./b30:/, r/   size/  size :/
l./b35:/, r/<:: :>/<: : <0>:>/
l./b38:/, r/   first core/  first :/, l1, i/
b39: <:<10>name : <0>:>
b42: <:area<0>:>
b43: <:buf<0>:>
b44: <:size<0>:>
b45: <:first<0>:>
b46: <:<32><32><32>:>
b47: <:<32><32><0>:>
b48: <:all:>
b52: 4<12 + 10
/, p-1

l./claim ...2/, d./a5:/, d./jl.     a2./, i#
\f


; fgs 1989.01.10                                    claim  ...2...

; program start:
; if a leftside is specified in the program call,
; the current input zone is stacked and used for
; secondary output.
a0:  al  w0  x3       ;   save w3;
     rs. w1    b8.    ;   save fpstart;
     al. w1  h19.     ;   
     jl. w3  h79.     ;   terminate prog zone
     al  w3  (0)      ;
     am.     (h16.)   ;
     zl  w1  27       ;   save own process.area
     rs. w1  b17.     ;   before connect

     rl  w0  x3       ; start: w0 := item head of program name;
     el  w2    0      ;   w2 := separator;
     se  w2    6      ;   if separator = equal then
     jl.       a1.    ;     begin
     jl. w3    h29.-4 ;     stack current input;
     rl. w2    h8.    ;     w2 := outfile name;
     al  w2  x2+2     ;
     al  w0    1<2+0  ;     comment: connect 1 segm. temporary
     jl. w3    h28.   ;     connect output(w0, w1, w2);
     se  w0    0      ;     if connect trouble then
     jl.       a7.    ;       error (<:connect output:>);
     am        h20-h21;     outputzone := current input;
a1:  al. w2    h21.   ;     end
     rs. w2    b0.    ;   else outputzone := current output;
     rl. w1    h16.   ;   process descr addr :=
     rs. w1    b40.   ;     own process description addr;
     dl  w0  x1+4     ;   move
     lo. w3    b46.   ;     name of process
     lo. w0    b46.   ;     or
     ds  w0.   b41.+2 ;     spaces
     dl  w0  x1+8     ;   to
     lo. w3    b46.   ; 
     lo. w0    b47.   ;
     ds. w0    b41.+6 ;     process name;

     jl. w3    d1.    ;   next param;  
     am               ;   comment: skip <end param> action;  
     rs. w1    b49.   ;   saved item address := item address;

\f



; fgs 1989.01.10                         claim  ...3...



; comment: at this point the register contents are:
; w0 == item head
; w1 == item address
; w2 == irrellevant
; w3 == irrellevant

a2:  ds. w1  b9.      ; next parameter: save w0w1;

     al  w2    13     ;
     rs. w2    b1.    ;   keymask := all scopes;
     al  w2  -1       ;
     rs. w2    b2.    ;   devicename := all devices;

     el  w2    0      ;
     sh  w2    3      ;   if separator = <end param> then
     jl.       a27.   ;     goto not internal proc;

     zl  w2    1      ;
     se  w2    10     ;   if item kind <> <name> then
     jl.        a5.   ;     goto paramerror

     el  w2    0      ;
     se  w2    4      ;   if separator = 'sp' then
     jl.       a27.   ;   begin <*maybe internal process*>
     ea  w1  x1+1     ;     get next separator;
     el  w2  x1       ;
     dl. w1    b9.    ;     restore w0w1;
     sl  w2    5      ;     if next separator <> 'sp' and <> end param then
     jl.       a27.   ;       goto not internal process;
     jl. w3    d4.    ;     get next internal process;
     jl.       a50.   ;     if no success then goto check item name;
     rs. w1    b49.   ;     saved item address := item address;
     rs. w3    b40.   ;     process descr addr := w0;
     dl  w1  x3+4     ;     move
     lo. w0    b46.   ;       process name
     lo. w1    b46.   ;       or
     ds. w1    b41.+2 ;       spaces
     dl  w1  x3+8     ;     to
     lo. w0    b46.   ; 
     lo. w1    b47.   ;
     ds. w1    b41.+6 ;       process name;
     jl. w3    d1.    ;     next param;
     am        0      ;     ignore end param list;
     ds. w1    b9.    ;     save new w0w1;
     al  w3    1      ;     new process :=
     hs. w3    b6.    ;       true;
     jl.       a27.   ;   end <*maybe internal process*>;
                      ;   goto internal process;

a50: rl. w1    b49.   ; check if item = <:all:>:
     rl  w0  x1+2     ; 
     se. w0   (b48.)  ;   if item.firat word = <:all:> then
     jl.       a27.   ;   begin
     dl. w1    b51.   ;     get saved item head. address of head after <:all:>;
     jl.       a2.    ;     goto next parameter;
\f



; fgs 1989.01.10                         claim  ...3a...




a27: al  w3    1      ; not internal process:
b6=k+1; new process
     se  w3    1      ;   if not new process then
     jl.       a3.    ;     goto on with param;

     rl. w1    b0.    ;
     al. w0    b39.   ;
     jl. w3    h31.   ;   writetext (<:<10>process name : :>);
     al. w0    b41.   ;
     jl. w3    h31.   ;   writetext (process name);
     al. w0    b28.   ;
     jl. w3    h31.   ;   writetext(<:area:>);
     rl. w2    b40.   ;   area := if own process then
     zl  w0  x2+27    ;       own process.area
     sn. w2   (h16.)  ;     else
     rl. w0    b17.   ;       process.area;
     jl. w3    h32.   ;   writeinteger(area);
     32<12+4          ;
     al. w0    b29.   ;
     jl. w3    h31.   ;   writetext(<:buf.>);
     am.      (b40.)  ;
     zl  w0    26     ;
     jl. w3    h32.   ;   writeinteger(buf);
     32<12+4          ;
     al. w0    b30.   ;
     jl. w3    h31.   ;   writetext(<:size:>);
     rl. w3    b40.   ;
     rl  w0  x3+24    ;
     ws  w0  x3+22    ;
     jl. w3    h32.   ;   writeinteger(size);
     32<12+8          ;
     al. w0    b38.   ;
     jl. w3    h31.   ;   writetext(<:first address:>);
     am.      (b40.)  ;
     rl  w0    22     ;   
     jl. w3    h32.   ;   writeinteger(first address);
     32<12+8          ;
     
     al  w2    0      ;   new process :=
     hs. w2    b6.    ;     false;

     dl. w1    b9.    ;   restore w0w1;
     el  w2    0      ;
     sh  w2    3      ;   if separator = <end param> then
     jl.       a8.    ;     goto search;
\f



; fgs 1989.01.10                         claim  ...3b...


a3:  dl. w1    b9.    ; on with param: restore w0w1;
a33: el  w2    0      ; more param:
     sh  w2    3      ;   if separator = <end param> then
     jl.       a6.    ;     goto terminate program;
     zl  w2    1      ;
     se  w2    10     ;   if item kind <> <name> then 
     jl.        a5.   ;     goto paramerror           

     ea  w1  x1+1     ;   get next item;
     el  w2  x1       ; 
     dl. w1    b9.    ;   restore (item);
     sn  w2    8      ;   if next separator = '.' then
     jl.       a34.   ;     goto treat param;

     el  w2    0      ;
     se  w2    4      ;   if separator <> 'sp' then
     jl.       a34.   ;     goto treat param;

     jl. w3    d4.    ;   check internal process;
     jl.       a34.   ;   if no success then goto treat param;
     jl.       a8.    ;   if    success then goto start search;

a34: rl. w3    b1.    ; treat param:
     rl  w2  x1+2     ;   w3:=
     sn. w2   (b26.+2);   if param=<:key:>
     al  w3    -1     ;   then -1 else
     sn. w2   (b31.+2);   if param=<:temp:>
     al  w3    1      ;   then 1 else
     sn. w2   (b32.+2);   if param=<:login:>
     al  w3    4      ;   then 4 else
     sn. w2   (b33.+2);   if param=<:perm:>
     al  w3    8      ;   then 8 else keymask;
     sn. w3   (b1.)   ;   if w3 = keymask then
     jl.       a18.   ;     goto move docname;
     rs. w3    b1.    ;   keymask := w3;
     jl.       a4.    ;   goto next param;

a18: dl  w3  x1+4     ;   move parametername to devicename;
     ds. w3    b3.    ;
     dl  w3  x1+8     ;
     ds. w3    b5.    ;

a4:  jl. w3    d1.    ; next param:
     jl.       a8.    ;   if param = <end param> then goto start search;
     el  w2    0      ;   if separator <> <point> then
     se  w2    8      ;     goto start search;
     jl.       a8.    ;     
     ds. w1    b9.    ;   store (item);
     jl.       a33.   ;   goto more param;

a5:  jl. w3    d2.    ; paramerror:  out error param;
     jl. w3    d1.    ;   next param;
     am               ;   comment: skip end param action;
     al  w2    1      ;   succes := false;
     hs. w2    b7.    ;
     jl.       a2.    ;   goto next parameter;

#

l./...3a/, r/3a/3c/
l./a6:/, d3
r/     rl./a6:  rl./
l./se. w1    h20./, i/
     al  w2    10     ;
     jl. w3    h26.   ;   outchar ('nl');
/, p-2
l./rl. w3    h8./, g/./ /, i/
     am.      (b8.)   ;
/, p1
l./jd        1<11+42/, l1, i/
     al  w2  x1       ;   save w1;
     dl  w1    110    ;
     ld  w1    5       ;   w0 := shortclock;
     al  w1  x2       ;   restore w1;
     rs  w0  x1+10    ;   tail.shortclock := w0;
/, p-5
l./jl.     h7./, g/./ /, i/
     am.      (b8.)   ;
/, p1
l./rl. w3    h8./, g/./ /, i/
     am.      (b8.)   ;
/, p1

l./...4/, r/82.11.24/89.01.10/
l./al  w1    1/, d1

l./...4a/, r/85.03.15/89.01.10/
l./h16/, l-1, d1, i/
     wa. w1    b40.   ;         proc descr addr           ;
/, p-1

l./...5/, r/85.03.13/89.01.10/
l./h16/, l-1, d1, i/
     wa. w1    b40.   ;     proc descr addr        ;
/, p-1

l./...6/, r/rc 19.06.1971 /fgs 1989.01.10/
l./a12:/, i/

/
l./dl. w1    b9./, d, i/

     rl. w1    b0.    ;
     al  w2    10     ;
     jl. w3    h26.   ;   outchar ('nl');
     rl. w1    b49.   ; 
     rl  w0  x1+2     ;   
     se. w0   (b48.)  ;   if saved item.word1 = <:all:> then
     jl.       a36.   ;   begin <*reset item address to point to <:all:>*>
     jl. w3    d3.    ;     reset item address;
     ds. w1    b51.   ;     save latest parameter address;
     rl. w0    b52.   ;     w0 := 4 < 12 + 10;
     rl. w1    b49.   ;     w1 := save item address;
     ds. w1    b9.    ;     save (item);
                      ;   end;
a36: dl. w1    b9.    ;   restore (item);
/, p-4
l./a13:/, d3, i/

a13: rl. w2    b2.    ; end of devices:
     se  w2    -1     ;   if empty paramname then
     jl.       a35.   ;   begin
     rl. w1    b0.    ;     w1 := outputzone;
     al  w2    10     ;
     jl. w3    h26.   ;     outchar ('nl');
     rl. w1    b49.   ; 
     rl  w0  x1+2     ;   
     se. w0   (b48.)  ;     if saved item.word1 = <:all:> then
     jl.       a37.   ;     begin <*reset item address to point to <:all:>*>
     jl. w3    d3.    ;       reset item address;
     ds. w1    b51.   ;       save latest parameter address;
     rl. w0    b52.   ;       w0 := 4 < 12 + 10;
     rl. w1    b49.   ;       w1 := save item address;
     ds. w1    b9.    ;       save (item);
                      ;     end;
a37: dl. w1    b9.    ;     restore (item);
     jl.       a2.    ;     goto next param;
a35:                  ;   end;
/, p-4
l./al  w2    1/, d, i/

     dl. w1    b2.+2  ; device not found:
     sn. w0   (b42.)  ;
     se. w1   (b42.+2);  if name is <:area:> then
     jl.       a28.   ;
     jl.       a32.   ;     goto ok;

a28: sn. w0   (b43.)  ;
     se. w1   (b43.+2);  if name is <:buf:> then
     jl.       a29.   ;
     jl.       a32.   ;     goto ok;

a29: sn. w0   (b44.)  ;
     se. w1   (b44.+2);  if name is <:size:> then
     jl.       a30.   ;
     jl.       a32.   ;     goto ok;

a30: sn. w0   (b45.)  ;
     se. w1   (b45.+2);  if name is <:first:> then
     jl.       a31.   ;
     jl.       a32.   ;     goto ok;

a31: al  w2    1      ; failure:
/, p-2
l./dl. w1    b9./, d, i/
a32: rl. w1    b49.   ; 
     rl  w0  x1+2     ;   
     se. w0   (b48.)  ;   if saved item.word1 = <:all:> then
     jl.       a38.   ;   begin <*reset item address to point to <:all:>*>
     jl. w3    d3.    ;     reset item address;
     ds. w1    b51.   ;     save latest parameter address;
     rl. w0    b52.   ;     w0 := 4 < 12 + 10;
     rl. w1    b49.   ;     w1 := save item address;
     ds. w1    b9.    ;     save (item);
                      ;   end;
a38: dl. w1    b9.    ;   restore (item);
/
l./d2 = k+2/, l1, i/
d3 = k+4 ; entry to procedure reset param pointer
/, p-2

l./...7/, r/rc 19.06.1971  /fgs 1989.01.10/
l./a9 , b7/, r/a9 /a10/
l./a0:/, i/

; procedure reset param pointer;
;   the procedure resets the param pointer in b2 by the value of
;   w1 at call and returns the old value of item head and address in w0, w1.
;
;   w0 == old value of item head
;   w1 == old value of item address
;   w2 == unchanged
;   w3 == unchanged
;
;  return is made to w3.

a10: rx. w1    b2.      ; swop address of item head;
     rl  w0  x1         ;
     jl      x3         ;   return;

/, p-3

l./...8/, r/rc 19.06.1971 /fgs 1989.01.10/
l./b4:/, r/***/<10>***/

l./d0 = k ; length of program/, i#
\f


; fgs 1989.01.10                                    claim  ...9...

; the following pages contain the code for fetching the
; next internal process description address which matches the name
; pointed to by x1+2
; if the name pointed to by x1+2 is <:all:>, the procedure gets the 
; next used internal procedure description address and leaves the
; variable 'next internal in nametable' to point at the next procedure
; description.
;
; at entry and return the contents of w0, w1, w2 and w3 are :
;
;   w0 : -                        unchanged
;   w1 : name address -2          unchanged
;   w2 : -                        unchanged
;   w3 : link                     proc descr address
;
;   return to :
;   no success : link 
;      success : link +2

b. a9 , b9            ; begin block get next internal
w.

d4:  ds. w1    b1.    ; save registers
     ds. w3    b3.    ;   

     rl  w2  x1+2     ; 
     sn. w2   (b48.)  ;   if name.param.word1 = <:all:> then
     al  w1    0      ;     single process := false;
     hs. w1    b6.    ;   else
     hs. w1    b7.    ;     single process := true;
     hs. w1    b8.    ;
     se  w1    0      ;   if not single process then
     jl.       a0.    ;   begin <*set the next index*>
     rl. w2    b4.    ;     index :=
     sn  w2    0      ;       if next in nametable = 0 then
a0:  rl  w2    78     ;         first in nametable else
                      ;       else
                      ;         next  in nametable;
                      ;   end else
                      ;     index := first in nametable;
a1:  rl  w3  x2       ; next process:

     dl  w0  x3+4     ;
     sl. w3   (b5.)   ;   if name.index.first word.first char <> 0 and
b6=k+1;
     se  w3  x3+0     ;      name.param.first word            =  <:all:> then
     jl.       a2.    ;
     jl.       a3.    ;     goto success;

a2:  sn  w3 (x1+2)    ;   if name.index.first word <>
     se  w0 (x1+4)    ;      name.param.first word    then
     jl.       a4.    ;     goto miss;

     rl  w3  x2       ;
     dl  w0  x3+8     ;
     sn  w3 (x1+6)    ;   if name.index.secnd word <>
     se  w0 (x1+8)    ;      name.param.secnd word    then
     jl.       a4.    ;     goto miss;

a3:  dl. w1    b1.    ; success:
     rl  w3  x2       ;   proc descr addr := nametable.index;
     al  w2  x2+2     ;
b7=k+1;
     sn  w3  x3+0     ;   if name.param.first word = <:all:> then
     rs. w2    b4.    ;     next in nametable := index + 2;
     rl. w2    b2.    ;   restore registers;
     am.      (b3.)   ;   return to
     jl       +2      ;     link + 2;

a4:                   ; miss:
     al  w2  x2+2     ;   index := index + 2;
     se  w2   (80)    ;   if index <> last in nametable then
     jl.       a1.    ;     goto next proc;

     al  w2    0      ; no success:
b8=k+1;
     sn  w3  x3+0     ;   if not single process then
     rs. w2    b4.    ;     next in nametable := 0;
     dl. w1    b1.    ;
     dl. w3    b3.    ;   restore registers;
     jl      x3       ;   goto link;

b0:  0                ; saved w0
b1:  0                ; -     w1
b2:  0                ; -     w2
b3:  0                ; -     w3
b4:  0                ; next in nametable
b5:  1<16             ;

d.
e.                    ; end block get next internal
l.


\f


; fgs 1989.01.10                                    claim  ...10...

#

l./m. rc/, r/85.03.13/89.01.10/

f
end
▶EOF◀