|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 16896 (0x4200)
Types: TextFile
Names: »retclaim3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »retclaim3tx «
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◀