|
|
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: 26112 (0x6600)
Types: TextFile
Names: »copy3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »copy3tx «
; rc 1979.04.04 copy skip
; jens ramsbøl, (tove ann aris)
b. g2, f9 w. ; start insertproc block
s.w. ; start code block
d.
p.<:fpnames:>
l.
; global names:
; a-names: main-program names
; b-names: global parameters
; c-names: case-names
; d-names: procedure names
; e-names: error-handling programs and procedures
; h-names: fp-procedures
; local names:
; i-names: local parameters
; j-names: local labels
b.a10,b27,c10,d25,e10
k=h55
w.
; definition of global parameters:
b0: 0 ; <ok-byte><message.yes or no>
b1: 0 ; output zone desc. addr
b2: 0 ; termchar
b3: 0 ; appearences
b4: 1<12 ; graphic
b5: 0 ; testsum
b6: 0 ; bigchar(no of chars>=128)
b7: 768 ; no of chars per segm
b8: 0 ; no of chars (outside transfer)
0 ; temp.
b9: 0 ; accumulated sum
b10: 0 ; addr(outfile-name)(:=0 if no outfile)
b11: 0 ; pointer(last item in command)
b12: 0 ; pointer(first item in command)
b13: a0. ; first free addr after program, after initialization: pointer(param)
b14: 0 ; addr of program name
b15: 0 ; 0 for copy, 1 for skip
b16: 0 ; accumulated sum of bigchars
b17: 0 ; accumulated sum of chars
0 ; accumulated
b18: 0 ; sum of testsums
b19: 1 ; list.yes list.no
b20: 0 ; save addr for links
b21: 0 ; save addr for links
b22: 0 ; save addr for links
b23: 0 ; save addr for links
b24: <:cur.input<0>:>
b25: 0 ; blind
b26: 0 ; sub
b27: 0 ; accumulated sub
; interprete command
; by exit: b11= pointer(last item in command)
; b12= pointer(first item in command)
; b13= pointer(first param)
; w1=addr(first item in next command)
b.j8
w.
a1: rl.w1 b11. ; load pointer(last item in last command);
j0: jl.w3 d0. ; next param:
jl. a2. ; end, .<param>
jl. j1. ; <s><name>
; <s><integer>
al w2 x1+2 ; pointer(first item)(b12):=poiter;
ds.w2 b13. ; pointer(param)(b13):=pointer+2;
jl.w3 d1. ; next item:
jl. c5. ; end,<s>
jl. e2. ; . <name>
; . <integer>
jl.w3 d1. ; next item:
jl. c6. ; end,<s>
jl. e2. ; . <name>
jl. e2. ; . <integer>
j1: al w2 x1+2 ; pointer(first item)(b12):=pointer;
ds.w2 b13. ; pointer(param)(b13):=pointer+2;
jl.w3 d1. ; next item:
jl. c1. ; end,<s>
jl. j2. ; . <name>
; . <integer>
jl.w3 d1. ; next item:
jl. c2. ; end,<s>
jl. e2. ; . <name>
; . <integer>
jl.w3 d1. ; next item:
jl. c3. ; end,<s>
jl. e2. ; . <name>
jl. e2. ; . <integer>
j2: jl.w3 d1. ; next item:
jl. c7. ; end,<s>
jl. e2. ; . <name>
; . <integer>
jl.w3 d1. ; next item:
jl. c4. ; end,<s>
jl. e2. ; . <name>
jl. e2. ; . <integer>
e.
; terminate copy
b.j3
w.
a2: al w1 0 ;
rs.w1 b25. ; blind:=0
rl.w1 b27. ;
rs.w1 b26. ; sub:=accumulated sub
rl.w1 b17. ;
sn.w1(b8.) ; if accumulated char<>char then
jl. j0. ; begin
rs.w1 b8. ; transfer accumulated
rl.w1 b16. ; datas to temporary
rs.w1 b6. ; registers
dl.w1 b18. ; end
ds.w1 b9. ;
rl.w2 b10. ; if left side in call then
se w2 0 ;
jl.w3 d10. ; write message;
j0: rl.w1 b10. ;
sn w1 0 ; if no outfile then
jl. j1. ; goto end of copy;
rl.w1 b1. ;
jl.w3 h95. ; close up-as it should be;
jl.w3 h79. ; terminate zone;
bz.w1 h19.+h1+1 ; decrease bs area:
se w1 4 ; if kind(output-file)=4(=>bs area) then
jl. j1. ; begin
al.w1 b10. ; b10 is used as tail area;
al.w3 h19.+h1+2 ; name addr:=name addr in zone desc;
jd 1<11+42 ; lookup entry(tail addr,name addr);
se w0 0 ; if result<>0 then goto end;
jl. j1. ;
rl.w0 h19.+h1+16; insert no of segments
rs.w0 b10. ; in tail area;
jd 1<11+44 ; change entry(tail addr,name addr);
j1: bz.w2 b0. ; end: load return value;
jl.w3 h7. ; end of copy, return to fp;
e.
; terminate copy(sorry);
a3: al w2 1<1+1 ; set warning and ok.no bit;
jl.w3 h7. ; end of copy, return to fp;
; procedure connect error
; call: return:
; w0 error cause destroyed
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b. i4 w.
e1: ds.w0 b22. ; save link and cause;
jl.w3 d11. ; write error text;
rl.w0 b13. ;
jl.w3 h31.-2 ; write out <file>;
rl. w2 b22.
al. w0 i0.
sn w2 1
al. w0 i1.
sn w2 3
al. w0 i2.
sn w2 4
al. w0 i4.
sn w2 5
al. w0 i3.
jl. w3 h31.-2
jl. (b21.) ; exit:
i0: <: error<10><0>:>
i1: <: no resources<10><0>:>
i2: <: not found<10><0>:>
i3: <: in use<10><0>:>
i4: <: convention error<10><0>:>
e.
; param error
; the routine writes out an error text together with the
; erroneous parameterstring and updates the pointer to
; next command
b.j3
w.
e2: jl.w3 d12. ; write error text;
j0: rl.w2 b12. ; pointer:=pointer(item);
bz w1 x2+1 ; param:=param(item);
se w1 4 ; if param=<integer> then
jl. j1. ;
rl w0 x2+2 ;
jl.w3 h32.-2 ; write out 'integer';
1 ; format structure;
jl. j2. ; else
j1: al w0 x2+2 ; write out 'name';
jl.w3 h31.-2 ;
j2: rs.w2 b11. ; pointer(last item):=pointer;
ba w2 x2+1 ; pointer:=pointer(next item);
bz w1 x2 ; sep:=seperator(next item);
se w1 8 ; if sep<>'.' then
jl. j3. ; goto end;
rs.w2 b12. ; save pointer;
al w2 46 ;
jl.w3 h26.-2 ; outchar '.';
jl. j0. ; next loop;
j3: al w2 10 ; char:=<nl>;
jl.w3 h26.-2 ; outchar(char);
jl. a1. ; exit: gto interprete command;
e.
; error no space for share
e4: jl.w3 d14. ; write error text;
jl. a3. ; goto terminate copy;
; case 1
; command: <infile>
c1: jl. w3 d16. ; test copy or skip
jl. c10. ; if skip then goto skip param
jl.w3 d2. ; connect infile;
al w0 25 ; termchar:=<em>;
al w1 1 ; app:=1;
ds.w1 b3. ;
rl.w1 b10. ; if no left side in call then
sn w1 0 ; no output<=>
rs.w1 b1. ; b1:=0;
jl.w3 d8. ; transfer;
rl.w1 b10. ; if no outfile then
al.w3 h21. ; out.zone addr:=current out.zone;
sn w1 0 ;
rs.w3 b1. ;
jl. c8. ;
c10: ; skip param:
jl. w3 d7. ; test one small letter
al w1 1 ; app:=1
ds. w1 b3. ; termchar:=letter
jl. w3 d8. ; transfer;
jl. a1. ; goto interprete command
; case 2
; command: <small letter>.<app>
c2: jl.w3 d4. ;
jl. c9. ;
; case 3
; command: <infile>.<iso-value>.<app>
c3: jl. w3 d16. ; test copy or skip
jl. e2. ; if skip then goto param error
jl.w3 d2. ; connect infile;
jl.w3 d5. ; case 6 routine;
jl. c8. ;
; case 4
; command: <infile>.<small letter>.<app>
c4: jl. w3 d16. ; test copy or skip
jl. e2. ; if skip then goto param error
jl.w3 d2. ; connect infile;
jl.w3 d4. ; test iso-value etc.
c8: jl.w3 d6. ; write message;
jl.w3 d3. ; disconnect infile;
jl. a1. ; exit: goto interprete command;
; case 5
; command: <lines>
c5: al w0 10 ; termchar:=<nl>;
rl.w1(b13.) ; app:=app;
ds.w1 b3. ;
al w0 0 ;
rs.w0 b4. ; graphic:=0;
jl.w3 d8. ; transfer;
rl.w1 b10. ; if no left side incall then
al w0 -1 ;
rs.w0 b4. ; 'graphic'is set to a nonzero value;
jl. c9. ;
; case 6
; command: <iso-value>.<app>
c6: jl.w3 d5. ;
c9: al.w2 b24. ; load addr(<:cur.input:>);
jl.w3 d10. ; write message;
jl. a1. ; goto interprete command;
; case 7
; command: message.yes, message.no, list.yes , list.no
; b15(0:11): 0(yes), 1(no)
b.i3,j1
w.
c7: jl. w3 d16. ; test copy or skip
jl. e2. ; if skip then goto param error
rl.w3(b13.) ; load param(pointer);
se.w3(i0.) ; if param(0:2)<>'mes'
sn. w3 (i3.) ; and param<>list
jl. 4 ; then
jl. j1. ; goto fejl;
rl w3 x1-8 ; if next param='yes' then
sn.w3(i1.) ; message.yes;
jl. j0. ; goto exit;
se.w3(i2.) ; if next param='no' then
j1: jl. e2. ; message.no;
am 1 ; goto exit;
j0: al w1 0 ; error: goto param error;
rl. w3 (b13.) ;
sn. w3 (i0.) ; if message then
hs. w1 b0.+1 ; save message state;
sn. w3 (i3.) ; if list then
rs. w1 b19. ; save list state;
jl. a1. ; exit: goto interprete command;
i0: <:mes:>
i1: <:yes:>
i2: <:no:>
i3: <:lis:>
e.
; procedure next item
; the procedure tests next item, updates the pointer(b11) if
; necessary, and returns to link, link+2,etc., corresponding
; to the cases:
; item: d0: d1:
; end link link
; <s><name> link+2 link
; <s><integer> link+4 link
; . <name> link link+2
; . <integer> link link+4
;
; call: return:
; w0 destroyed
; w1 pointer(last item) pointer(item)
; w2 destroyed
; w3 link destroyed
b.j0
w.
d1: am 4 ; testsep:='.';
d0: al w2 4 ; testsep:=<s>;
ba w1 x1+1 ; pointer:=pointer(item);
bz w0 x1 ; sep:=seperator(item);
se w0 x2 ; if sep<>testsep then
jl. j0. ; goto exit;
al w3 x3+2 ; link:=link+2;
bz w0 x1+1 ; param:=param(item);
rs.w1 b11. ; save pointer;
se w0 10 ; if param=<integer> then
al w3 x3+2 ; link:=link+2;
j0: jl x3 ; exit: goto link;
e.
; procedure connect infile
; call: return:
; w0 0 if no error
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b.j0
w.
d2: rs.w3 b20. ; save link;
jl.w3 h29.-4 ; stack current input;
rl.w2 b13. ; load addr(infile-name);
jl.w3 h27.-2 ; connect <infile> to current input;
sn w0 0 ; if error then
jl. j0. ; write error-message;
jl.w3 h30.-4 ; unstack current input;
jl.w3 e1. ;
jl. a1. ; goto interprete command;
j0: rl.w3 b13. ;
al w3 x3+10 ; pointer(param):=addr(next param);
rs.w3 b13. ;
jl. (b20.) ; exit:
e.
; procedure disconnect infile
; call: return:
; w0 unchanged
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b.
w.
d3: rs.w3 b20. ; save link;
jl.w3 h79.-4 ; terminate current input;
jl.w3 h30.-4 ; unstack current input;
jl. (b20.) ; exit:
e.
; procedure used of c2 and c4
; call: return:
; w0 destroyed
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b.
w.
d4: rs.w3 b20. ; save link;
jl.w3 d7. ; test param;
rl.w2 b13. ; pointer:=pointer(next param);
al w2 x2+6 ;
rs.w2 b13. ;
jl.w3 d9. ;
jl. (b20.) ; exit
e.
; procedure used of c3 and c6
; call: return:
; w0 destroyed
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b.
w.
d5: rl.w0(b13.) ; load pointer;
d9: rs.w3 b21. ; save link;
sl w0 0 ;
sl w0 127 ; between 0 and 127
jl. e2. ;
rl.w1 b13. ;
rl w1 x1+4 ; termchar:=<iso-value>;;
ds.w1 b3. ;
jl.w3 d8. ; transfer;
jl. (b21.) ; exit:
e.
; procedure write message
; call: return:
; w0 addr(file) destroyed
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b. i6, j7
w.
i0: 1000000 ;
i1: <: <0>:> ;
i2: 0, r.4 ;
<:segm.<0>:> ;
i3: <: >127: :>
i4: <: sub: :>
i5: <: blind: :>
i6: 10
d6: rl.w2 b12. ; load pointer(first item);
al w2 x2+2 ; pointer:=pointer(file-name);
d10: rs.w3 b22. ; save link;
dl w1 x2+2 ;
lo. w0 i1. ;
lo. w1 i1. ;
ds. w1 i2.+2 ;
dl w1 x2+6 ;
lo. w0 i1. ;
lo. w1 i1. ; extend name
ds. w1 i2.+6 ; with spaces
al. w0 i2. ;
bz.w2 b0.+1 ;
se w2 0 ; if message.no then
jl. j7. ; goto exit;
jl.w3 h31.-2 ; outtext <file>;
al w0 767 ;
al w3 0 ;
wa. w0 b8. ;
wd. w0 b7. ;
jl. w3 h32.-2 ; outinteger(segm)
32<12+4 ;
rl.w0 b8. ;
jl.w3 h32.-2 ; outinteger <number of chars>;
32<12+ 8 ; format structure;
al w2 47 ; char:=</>;
jl.w3 h26.-2 ; outchar;
dl.w0 b9. ; w0:=sum/10**6;
wd.w0 i0. ; w3:=sum mod 10**6;
rs.w3 b9. ;
sn w0 0 ; if kvotient=0 then
jl. j1. ; goto write sum;
jl.w3 h32.-2 ; outinteger <kvotient>;
1 ; format structure;
rl.w0 b9. ;
jl.w3 h32.-2 ; outinteger <modulo>;
48<12+6 ; format structure;
jl. j3. ;
j1: rl.w0 b9. ; write sum:
jl.w3 h32.-2 ; outinteger <sum>;
1 ; format structure;
rl. w0 b9. ; if char=0 then
sn w0 0 ; char:=char+1;
ba. w0 1 ;
j2: al w3 0 ; next:
wm. w0 i6. ; char:=char*10;
sh w0 0 ; if char
jl. j3. ; >1000000
sl. w0 (i0.) ; then
jl. j3. ; exit;
al w2 32 ;
jl. w3 h26.-2 ; outchar(sp);
jl. j2. ; goto next;
j3: rl.w0 b6. ;
sn w0 0 ; if sum of bigchars>0 then
jl. j4. ;
al. w0 i3. ;
jl. w3 h31.-2 ; outtext(<: >127 :>
rl. w0 b6. ;
jl.w3 h32.-2 ; outinteger <bigchar>;
1 ; format structure;
j4: rl. w0 b26. ; if sub=0 then
sn w0 0 ; skip;
jl. j5. ;
al. w0 i4. ;
jl. w3 h31.-2 ; outtext(<: sub :>
rl. w0 b26. ;
jl. w3 h32.-2 ; outinteger(sub);
1 ; layout
j5: rl. w0 b25. ; if blind=0 then
sn w0 0 ; skip;
jl. j6. ;
al. w0 i5. ;
jl. w3 h31.-2 ; outtext(<: blind :>);
rl. w0 b25. ;
jl. w3 h32.-2 ; outinteger(blind);
1 ; layout
j6: al w2 10 ; char:=<nl>;
jl.w3 h26.-2 ; outchar(char);
j7: jl. (b22.) ; exit:
e.
; procedure test one small letter
; call: return:
; w0 <iso-value> (if ok)
; w1 0 (if ok)
; w2 param addr destroyed
; w3 link destroyed
b.
w.
d7: rl.w1 b13. ;
dl w1 x1+2 ; load, param, param+2
ld w1 -16 ;
sn w1 0 ;
jl x3 ; exit: goto link;
jl. e2. ; error: goto param error;
e.
; procedure transfer
; the procedure takes a character from the input zone, tests
; it, updates 'number' and 'sum' and outputs the char on the
; output-zone
; call: return:
; w0 destroyed
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b.i1,j11
w.
d8: rs.w3 b22. ; save link;
al w0 0 ;
al w1 0 ;
ds.w1 b6. ; initiate counting words;
ds.w1 b9. ;
ds. w1 b26. ;
jl. j0. ;
j10: rl. w3 b25. ;
al w3 x3+1 ; blind:=blind+1;
rs. w3 b25. ;
j0: rl.w3 b3. ; if app=0 then
rs.w0 b8.
sn w3 0 ; goto last
jl. j8.
jl.w3 h25.-2 ; inchar from current input;
rs. w2 b8. ; save char;
sn.w2(b2.) ; if char=termchar then
jl. j7. ; goto found;
se w2 0 ; if char=0 or 127 then
sn w2 127 ; skip char+
jl. j10. ; goto nextchar;
sn w2 25 ; if char=<em> then
jl. j6. ; goto input exhausted;
se w2 26 ;
jl. j11. ;
rl. w3 b26. ;
al w3 x3+1 ; sub:=sub+1;
rs. w3 b26. ;
j11: sh w2 126 ; if 32<char<127 then
sh w2 33 ; (<=> char is graphic)
jl. j1. ; set 'graphic'>0;
hs.w2 b4.+1 ;
j1: al w3 x2 ; continue:
wa.w3 b5. ; sum:=sum+char;
sl.w3(i0.) ; if sum>=8388000 then
jl. j5. ; goto update;
j2: rs.w3 b5. ;
sl w2 128 ; if char>=128 then
jl. j4. ; goto bigchar;
wa.w0 i1. ; number:=number+1;
j3: rl.w1 b1. ; if no output then
se w1 0 ; goto nextchar;
jl.w3 h26. ; outchar;
rl. w1 b19. ; if list.no then
se w1 0 ; goto next char;
jl. j0. ;
rl. w2 b8. ;
jl. w3 h26.-2 ; outchar(cur out);
jl. j0. ; goto nextchar;
j4: rl.w3 b6. ; bigchar:
al w3 x3+1 ;
rs.w3 b6. ; bigchar:=bigchar+1;
jl. j3. ;
j5: al w2 0 ;
aa.w3 b9. ; accumulatedsum:=
ds.w3 b9. ; accumulatedsum+sum;
al w3 0 ; sum:=0;
rl.w2 b8. ; load char;
jl. j2. ;
j6: rs.w0 b8. ; save 'no of chars';
jl.w3 d13. ; write error message;
rl.w0 b8. ;
al w3 0 ;
jl. j8. ;
j7: rl.w3 b4. ; found:
sn w3 0 ; test if any graphic chars
jl. j1. ; since last <nl>(only in function
al w3 0 ; when the command is <lines>);
hs.w3 b4.+1 ; graphic:=0;
rl.w3 b3. ;
al w3 x3-1 ; app:=app-1;
rs.w3 b3. ;
sl w3 1 ; if app>0 then
jl. j1. ; goto continue
sn w2 10 ; if termchar=10 then
jl. j1. ; goto continue;
; end of transfer:
rs.w0 b8. ; save number of chars;
j8: wa.w0 b17. ; accumulate 'number of chars';
rs.w0 b17. ;
dl.w1 b6. ;
aa.w0 b9. ; save testsum;
ds.w0 b9. ;
aa.w0 b18. ; accumulate testsum;
ds.w0 b18. ;
wa.w1 b16. ; accumulate number of bigchar;
rs.w1 b16. ;
rl.w0 b26. ; accumulate sub
wa.w0 b27. ;
rs.w0 b27. ;
bz.w0 b0.+1 ;
rl.w1 b1. ;
am -1000
sn.w1 h21.+1000 ; outfile=current output and
se w0 0 ; then message.yes and
jl. j9. ; outchar(nl);
al w2 10 ;
jl.w3 h26.-2 ;
j9: jl. (b22.) ; exit:
i0: 8388000 ;
i1: 1 ;
e.
; procedure error text
; the procedure writes out an error text and sets the ok-byte
; call: return:
; w0 destroyed
; w1 destroyed
; w2 destroyed
; w3 link destroyed
b.i5
w.
i0: <:***<0>:>
i1: <: connect <0>:>
i2: <: param <0>:>
i3: <: end medium<10><0>:>
i4: <: no core<10><0>:>
i5: <: call<10><0>:>
d15: am i5-i4 ; error : call
d14: am i4-i3 ; error: no core
d13: am i3-i2 ; error: end medium
d12: am i2-i1 ; error: param
d11: al.w2 i1. ; error: connect
al w0 2 ; set warning bit;
hs.w0 b0. ;
al.w0 i0. ;
rs.w3 b23. ; save link;
jl.w3 h31.-2 ; output error message on current output;
rl. w3 b14. ;
al w0 x3+2 ;
jl. w3 h31.-2 ; write(out,programname)
al w0 x2 ;
jl.w3 h31.-2 ;
jl. (b23.) ; exit:
e.
; procedure copy or skip
; call return
; w0 destroyed
; w1
; w2
; w3 link link
d16: al w0 0 ;
se. w0 (b15.) ;
jl x3 ; return skip
jl x3+2 ; return copy
; init copy
b.i0,j1
w.
f1: ; entry copy
a0: rs.w3 b11. ; save pointer(item);
rs. w3 b14. ; save program name
sn x2 w3 ; if no left side in call then
jl. a1. ; goto interprete commands;
al w2 x2+2 ; addr:=addr(outfile name);
rs.w2 b10. ; save addr;
al.w1 b13. ;
wa.w1 b13. ; save first free
rs.w1 b13. ; addr after program;
al w0 x1+512 ; is there space enough for
sl w0 x3 ; a share between the pg.
jl. e4. ; and the command stack
am -2048
al.w1 h19.+2048 ;
rs.w1 b1. ;
jl.w3 h79. ; terminate current program zone
rl.w3 b13. ;
am -2048
rs.w3 h80.+2+2048; insert share in share desc.
al w0 1<1+ 1 ;
jl.w3 h28. ; connect <outfile> to current pg. zone;
sn w0 0 ; if no error then
jl. j0. ; exit: goto changeentry;
rl.w3 b10. ; else
rs.w3 b13. ;
jl.w3 e1. ; write out errror-message;
jl. a3. ; goto terminate(sorry);
j0: bl w0 x1+h1+1 ;
sn w0 4 ; if -,bs and
jl. 6 ; -,mt
se w0 18 ; then
jl. a1. ; goto interprete commands;
am -1000
al. w1 h54.+1000 ; w1:=lookup area;
rl. w2 b10. ; w2:=name addr
jl. w3 f9. ; prepare entry for textoutput
jl. a1. ; goto interprete commands
e.
; init skip
f2: al w0 1 ; entry skip:
rs. w0 b0. ; message.no
ds. w0 b15. ; save program name
rs. w3 b11. ; save pointer(item)
sn w2 x3 ; if no left side then
jl. a1. ; goto interprete param
jl. w3 d15. ; else goto error call
jl. a3. ; goto terminate(sorry)
f9:
; procedure prepare entry for textoutput
; w0 not used
; w1 lookup area
; w2 name addr, entry must be present
; w3 return addr
b. a2 w.
ds. w1 a1. ; save w0.w1
ds. w3 a2. ; save w2.w3
al w3 x2 ; w3:=name addr
jd 1<11+42 ; lookup
bz w2 x1+16 ;
sh w2 32 ; if contents=4 or
sn w2 4 ; contents>=32
jl. 4 ; then
jl. a0. ; file:=block:=0;
rs w0 x1+12 ;
rs w0 x1+14 ;
a0: rs w0 x1+16 ; contents.entry:=0;
rs w0 x1+18 ; loadlength:=0;
dl w1 110 ;
ld w1 5 ; shortclock;
rl. w1 a1. ;
rs w0 x1+10 ;
jd 1<11+44 ; changeentry;
dl. w1 a1. ; restore w0,w1
dl. w3 a2. ; restore w2,w3
jl x3 ; return
0 ; saved w0
a1: 0 ; saved w1
0 ; saved w2
a2: 0 ; saved w3
e.
e.
; end of copy
f3=k-h55 ; length of copy skip
m.rc 1978.04.17 copy skip
; insert tails in catalog
; the entries are given by f1 and f2
; load length by f8
f8=k-h55
; entry copy
g0: (:f8+511:)>9 ; no. of segm
0, r.4 ;
s2 ; date
0,0 ; file, block
2<12+f1-h55 ; contents, entry
f3 ;
; entry skip
g1: 1<23+4 ; bs
0, r.4 ;
s2 ; date
0,0 ; file, block
2<12+f2-h55 ; contents, entry
f3 ; length
d.
p.<:insertproc:>
l.
e.
e.
▶EOF◀