|
|
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: 33024 (0x8100)
Types: TextFile
Names: »uti21«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦f8e4b63af⟧ »trcfput«
└─⟦this⟧
b. g1,f6 w. ;for insertproc
s. a29, c33, e45, g20, i27, b3
w.d.
p.<:fpnames:>
l.
k=h55
;entry move
0 , 0
;get output entry
rs. w1 c1. ;save fp-start
b. i0 ;begin output file
w. ;check
sn w2 x3 ;if no leftside then
jl. a11. ;outerror (move call)
ba w3 x3+1 ;update parameter pointer
rs. w3 c2. ;save parameter pointer
al. w1 c3. ;get output tail address
al w3 x2+2 ;get name address
rs. w3 c15. ;save name address
jd 1<11+42 ;look up entry
se w0 0 ;if unknown then
jl. i0. ;c5=2
rl. w0 c3.
sl w0 0 ;if mto-file then
jl. i0. ;c5=0 else
la. w0 c29. ;mask mode off
se. w0 (c14.) ;if bs file then
jl. a14. ;c5=2 else
al w0 0 ;outerror(output kind)
se w0 0
i0:al w0 2
rs. w0 c5.
e. ;end output file check
;c15 contains the address of the
;output file name in the fp-command stack
;check of input parameters : checks an indivisible group of
;separators and parameters to see if they describes a bs-file,
;mt-file, mt-file-set or message.yes. at excit the parameter
;pointer points at the separator starting the next indivisible
;group unless this is a <nl> in case of which the end
;param. c26:= 1.
b. i16
w.
al w1 1 ;initial check for message.yes
rl. w3 c2. ;get param. pointer
i14:bl w0 x3 ;get separator
sh w0 2 ;if separator = <nl> then
jl. a4. ;goto next parameter: else
ba w0 x3+1 ;if separator = <point>
se w0 18 ;and parameter = <name> then goto check name:
jl. i15. ;else goto update pointer:
rl w0 x3-8 ;if last name <> <:mes:>
se. w0 (i16.) ;then
jl. a10. ;param error else
rl w0 x3+2 ;check name: get <name>
sn. w0 (i10.) ;if <name> = <yes> then
rs. w1 c23. ;c23:= 1
al w1 20 ; message.yes_or_no:=true
hs w1 x3-9 ;
jl. a4. ;goto next parameter:
i15:ba w3 x3+1 ;update pointer: point at next
jl. i14. ;pair (separator, parameter)
;end initial check for message.yes
a4:rl. w3 c2. ;next parameter: get param. pointer
bl w0 x3 ;get first separator
se w0 4 ;if first separator <> <s>
jl. a10. ;outerror (parameter error)
bl w0 x3+1 ;get first item
se w0 20 ; if message.yes_or_no=true then
jl. +12 ; begin
al w0 10 ; set item=name
hs w0 x3+1 ; update param.pointer
al w3 x3+10 ; update w2
al w2 1 ; goto message
jl. i0. ; end comment this sequence avoid
; lookup of message
se w0 10 ;if first item<><name>
jl. a10. ;then outerror (param. error)
al w3 x3+2 ;get address of name
rs. w3 c18. ;save address of name
al. w1 c4. ;get address of entry tail
jd 1<11+42 ;look up entry
rl w2 x1 ;if kind <> bs then
sl w2 0 ; begin
jl. +12 ; if kind <> 18 then
la. w2 c31. ; outerror (input kind)
sn w2 4 ; kind bs but no area
jl. +6 ;
se w2 18 ; end
jl. a15. ;
al w3 x3+8 ;update param. pointer
al w2 1 ;w2:=1
se w0 0 ;if entry name unknown
jl. i0. ;then outerror connect input
ba w0 x3 ;if next separator = point
ba w0 x3+1 ;and next parameter = <name>
sn w0 18 ;then
jl. i0. ;goto message:
hs. w2 c23. ;else bytec23:=1
rl w0 x1 ;get first word of entry tail
bl w1 x3 ;get second separator
sh w1 2 ;if second separator=<nl>
rs. w2 c26. ;then end param.=1
sl w0 0 ;if w0>=0 then
jl. i13. ;goto bs-file
rl. w0 c5. ;else
ls w0 -1 ;set c5 bit 23 = 0
ls w0 1 ;and
rs. w0 c5. ;goto
jl. i1. ; mt-file
i13:rl. w0 c26. ;bs-file:
sn w0 1 ;if end param. <> 1
jl. i2. ;and second separator <> <s>
sn w1 4 ;then
jl. i2. ;goto mt-set: else
jl. a10. ;outerror (param. error)
i2:al w0 1 ;mt-set:
lo. w0 c5. ;set c5
rs. w0 c5. ;bit 23 = 1
i3:al w0 0 ;
rs. w0 c8. ;c8:=0
rs. w2 c7. ;c7:=1
rs. w3 c2. ;save param. pointer
jl. a0. ;goto initialize zone
i1:rl. w0 c26. ;mt-file:
sn w0 1 ;if end param.=1
jl. i3. ;or second separator=<s>
sn w1 4 ;then goto i3
jl. i3. ;else
se w1 8 ;if second separator <> point
jl. a10. ;then outerror (param. error)
bl w1 x3+1 ;if second item <> <integer>
se w1 4 ;then
jl. a10. ;outerror (param. error)
rl w1 x3+2 ;else
rs. w1 c7. ;c7:=second item
rl. w1 c5. ; if output fil bs
sn w1 2 ; then set mtfilset true
rs. w2 c33. ;
ba w3 x3+1 ;update param. pointer
bl w1 x3 ;get third separator
se w1 8 ;if third separator <> point
jl. i6. ;then goto i6
bl w1 x3+1 ;get third item
se w1 4 ;if third item <> <integer>
jl. a10. ;then outerror (param. error)
rl w1 x3+2 ;get third item
rs. w1 c8. ;c8:=third item
ba w3 x3+1 ;update param. pointer
bl w1 x3 ;get the fourth separator
se w1 4 ;if the fourth item=<s>
jl. i5. ;then save param. pointer
rs. w3 c2. ;and goto
jl. a0. ;initialize zone
i5:sl w1 3 ;else if fourth separator <> <nl>
jl. a10. ;outerror (too many parameters)
rs. w2 c26. ;else end param.=1
rs. w3 c2. ;save param. pointer
jl. a0. ;goto initialize zone
i6:sh w1 2 ;if third separator <> <nl>
jl. i7. ;or third separator <> <s>
se w1 4 ;then
jl. a10. ;outerror (param. error)
jl. i8. ;if third separator = <nl>
i7:rs. w2 c26. ;end param.=1
i8:al w1 0 ;
rs. w1 c8. ;c8:=0
rs. w3 c2. ;save param. pointer
jl. a0. ;goto initialize zone
i0:bl w0 x3 ;message: if second separator <> point
se w0 8 ;then
jl. a10. ;outerror (param. error )
rl w0 x3+2
sn. w0 (i9.) ;if second item=<yes>
jl. i11. ;then
rs. w2 c23. ;message.yes else
se. w0 (i10.) ;message.no or
jl. a10. ;outerror ( param. error )
i11:ba w3 x3+1 ;update param. pointer
bl w0 x3 ;get third separator
sn w0 4 ;if third separator = <nl>
jl. i12. ;then end param.=1
rs. w2 c26. ;
sl w0 3 ;if third separator<> <nl>
;and third separator <> <s>
jl. a10. ;outerror (param. error)
jl. a19. ;goto write out output file
i12:rs. w3 c2. ;save param. pointer
hl. w0 c23. ;if bytec23=1 then
se w0 1 ;goto next parameter
jl. a4. ;else
jl. a0. ;goto initialize zone
i9: <:no:>
i10: <:yes:>
i16: <:mes:>
e. ;end of input parameter check.
; output file current input file c5
; bs file bs file 3
; bs file mt file 2
; mt file bs file 1
; mt file mt file 0
;if message.yes then byte c23+1 = 1
;if next separator = <nl> then end param. = 1
;c18: name address of current input file
;allocate buffers and initialize descriptors
b. i0
w.
a0:rl. w2 c25. ;initialize zone: if number
se w2 0 ;of files
am 62 ;transferred > 0
jl. 2 ;then goto initialize move
rl. w2 c15. ; (get the address of
al w2 x2-2 ;fp-command-stack top
ac. w1 e20. ;subtract the base buffer
wa w1 4
wd. w1 c6. ;area address)//3
ls w1 -1
ls w1 1
sh w1 511 ;if max. blocklength<512 then
jl. a17. ;outerror (no core)
rs. w1 c11. ;save max. blocklength
;initialize zones and shares
al. w3 e20.
rs. w3 e1. ;base buffer area input
rs. w3 e11. ;base buffer area output
al w2 x2-1
rs. w2 e2. ;last of buffer input
rs. w2 e12. ;last of buffer output
;input
al. w2 e21.
rs. w2 e3. ;used share=first share
rs. w2 e4. ;first share=e21
al. w2 e22.
rs. w2 e5. ;last share=e22
;output
al. w2 e23.
rs. w2 e13. ;used share=first share
rs. w2 e14. ;first share=e23
al. w2 e24.
rs. w2 e15.
al w2 0
;input
rs. w2 e6. ;set give up mask
rs. w2 e7. ;set give up action
;output
rs. w2 e16. ;give up mask:=0
rs. w2 e17. ;give up action:=0
;initialize move
rl. w0 c9. ;input file count:=
wa. w0 c8. ;input file count +
rs. w0 c9. ;rel file
;insert first shared
a24:al. w1 e20.
ba. w1 1
rs. w1 a1. ;a1:e20+1
rs. w1 e25. ;e25:e20+1 input shared 1
rs. w1 e29. ;e29:e20+1 output shared 1
wa. w1 c11. ;
al w1 x1-2 ;
rs. w1 a2. ;a2:e20+1+maxbll.-2
rs. w1 e27. ;e27:(a2) input shared 2
wa. w1 c11.
al w1 x1-2
rs. w1 a3. ;a3:e20+1+2*maxbll.-4
rs. w1 e31. ;e31:(a2) output shared 2
;connect files
;connect input
al. w1 e0. ;get address of input zone
al. w2 c4. ;w2:= if input file mt
rl. w0 c5. ;then tail address
sz w0 1 ;else name address
rl. w2 c18. ;
jl. w3 h27. ;call connect input
se w0 0 ;if no success then
jl. a13. ;outerror (connect input)
;connect output
al. w1 e10. ;get address of output zone
al. w2 c3. ;w2:= if output file mt
rl. w0 c5. ;then tail address
sz w0 2 ;else name address
rl. w2 c15.
al w0 1<1+1 ;connect one segment on disc
jl. w3 h28. ;call connect output
se w0 0 ;if no success then
jl. a12. ;outerror (connect output)
;set last shared if c5=0 or c5=2
rl. w0 c5.
sz w0 1 ;if input file = bs file
jl. i0. ;then goto i0
rl. w1 c11. ;get maxbll.
rl. w2 c27. ;get maxbll of ampex
sh w1 x2 ;if maxbll<maxbll of ampex then
am 34 ;goto set last shared
jl. 2 ;else
am 2 ;get address of process
al. w3 c4. ;description of
jd 1<11+4 ;input device
sn w0 0 ;if result=0 then
jl. a13. ;goto outerror (connect input)
;else
rl w2 (0) ;get monitor kind
se w2 18 ;if m kind <> 18 then
am +6 ;goto cdc, ampex 9-tracks
jl. 2 ;else
rl. w2 c27. ;maxbll=maxbll of
rs. w2 c11. ;ampex 7-tracks
jl. 12 ;goto set last shared
rl. w2 c28. ;cdc, ampex 9-tracks: get maxbll of cdc, ampex 9-tracks
sh w1 x2 ;if maxbll<maxbll of ampex,cdc then
am 2 ;goto set last shared
jl. 2 ;else
rs. w2 c11. ;maxbll=maxbll of cdc, ampex 9-tracks
rl. w1 a1. ;set last shared: get first shared
wa. w1 c11. ;add maxbll
al w1 x1-4 ;
rs. w1 b1. ;b1:(a2+maxbll-4)
rs. w1 e26. ;(b1) input last shared 1
rs. w1 e30. ;(b1) output last shared 1
rs. w1 e42. ;set last address of transfer
rs. w1 e44. ;in first input and output share
rl. w1 a2. ;
wa. w1 c11. ;
al w1 x1-4 ;
rs. w1 b2. ;b2:(a2+maxbll-4)
rs. w1 e28. ;(b2) input last shared 2
rs. w1 e43. ;set last address of transfer in last input share
rl. w1 a3. ;
wa. w1 c11.
al w1 x1-4
rs. w1 b3. ;b3:(a3+maxbll.-4)
rs. w1 e32. ;(b2) output last shared 2
rs. w1 e45. ;set last address of transfer in last output share
jl. a6. ;goto move loop
;set last shared if c5=1 or c5=3
i0:rl. w1 e26. ;get last input shared 1
rs. w1 b1. ;save last input shared 1
rl. w1 e28. ;get last input shared 2
rs. w1 b2. ;save last input shared 2
rl. w1 a3. ;get first shared 3
al w1 x1+510 ;add 510
rs. w1 b3. ;save last shared 3
e.
;move loop: this block copy from input file to output file
; by repeated call of inblock and outblock.
; a call of inblock gives us a used input share
; which points at one of three possible buffer areas.
; the move block computes a checksum of the words
; transferred from input file to this buffer area.
; if the buffer area exceeds the size of the input
; block the remaining part is filled with zeroes before
; outblock is called. if both input and output file are
; on mag. tape the outblocklength is equal to the inblock-
; length i.e. no fill with zeroes. when the current input
; file is exhausted the routine jumps to terminate zone
; which checks the last pending output transfer.
b. i8
w.
a6:al w0 0 ;move loop: set number of
rs. w0 a5. ;bytes transferred to zero
rs. w0 a7. ;set checksum to zero
i0:al. w1 e0. ;call inblock: get address of zone
jl. w3 h22. ;call inblock
am. (e3.) ;get
rl w2 +22 ;top transferred
am. (e3.) ;subtract first address
ws w2 +8 ;of transfer
rs. w2 a29. ;save input blocklength
sn w2 0 ;if blocklength equal
jl. i0. ;zero goto call inblock
se w2 2 ;if blocklength=2 and
jl. i1. ;word=<em> then
rl. w1 (e8.) ;if i0=2 goto terminate zone:
se. w1 (i7. ) ;else i1=1 goto last outblock
jl. i1. ;
jl. i8. ;goto terminate zone
i1:rl. w0 c23. ;if message.no
so w0 1 ;then
jl. a27. ;goto fill zeroes
wa. w2 a5. ;number of bytes transferred :=
rs. w2 a5. ;number of bytes transf. + blocklength
rl. w1 e0. ;get address of first word transferred
ba. w1 1 ;
am. (e3.) ;get address of
rl w2 +22 ;last word transferred
al w2 x2-2 ;to used share
rs. w2 i6. ;nonsens total: save address of last word
al w3 0 ;transferred
al w2 0 ;w3:=w2:=0
al w1 x1+2 ;w1:=w1+2
i2:aa w3 x1 ;w2,w3:=w2,w3+word(x1-2,x1)
al w1 x1+4 ;w1:=w1+4 update index reg.
sh. w1 (i6.) ;if index reg.<=address of last byte
jl. i2. ;goto i7
al w1 x1-4 ;w1:=w1-4
wa w2 6 ;w2:=w2+w3
rl. w3 i6. ;get address of last word transferred
se w1 x3 ;if index reg.<add. of last word then
wa w2 x3 ;w2:=w2+last word
wa. w2 a7. ;
rs. w2 a7. ;save checksum
;fill with zeroes
a27:am. (e3.) ;set used output share: get first and last
dl w2 +10 ;address of transfer from used input share
am. (e13.) ;store these in first and last address of
ds w2 +10 ;transfer in used output share
al w2 0
rl. w0 c5. ;if input file=mt and
se w0 2 ;output file=bs
am 28 ;then
jl. 2 ; begin
rl. w3 a29. ; get inblocklength
al w3 x3-1
ls w3 -9 ; divide by 512
al w3 x3+1 ; add one
wm. w3 c10. ; multiply by 512; w3 contain outblocklength
se w2 0 ; if blocklength > 2**23 then
jl. a17. ; outerror (no core)
sl. w3 (c11.) ; if blocklength > maxbll. then
jl. a17. ; outerror (no core)
al w3 x3-2 ; last address of transfer in used
am. (e3.) ; output share := first address of
wa w3 +8 ; transfer in used input share
am. (e13.) ; +outblocklength - 2
rs w3 +10 ; end
se w0 0 ;if input file=mt and
am 12 ;output file=mt
jl. 2 ;then
; begin
rl. w3 a29. ; last address of transfer in used output
al w3 x3-2 ; share := first address of transfer in
am. (e3.) ; used input share + inblocklength - 2
wa w3 +8 ; comment outblocklength=inblocklength
am. (e13.) ;
rs w3 +10 ; end
am. (e3.) ;get first and last shared
dl w2 +4 ;from used input share
am. (e13.) ;store these in first and last
ds w2 +4 ;shared in used output share
am. (e3.) ;
rl w3 +22 ; w3=input top transf -2
al w3 x3-2 ;
am. (e13.) ;
rl w2 +10 ;w2=last address of transf from
sl w3 x2 ; output
jl. i5. ;if w3>=w2 then goto call outblock
al w0 0 ;
al w1 0 ;
i3:al w3 x3+4
sh w3 x2 ;
jl. i4.
rs w1 x2
jl. i5.
i4:ds w1 x3 ;
jl. i3. ;
i5:al. w1 e10. ;call outblock: get address of zone
jl. w3 h23. ;call outblock
am. (e13.) ;set used input share: get first and last
dl w2 +4 ;shared in used output share and
am. (e3.) ;store these in
ds w2 +4 ;first and last shared plus first
am. (e3.) ;and last address of transfer
ds w2 +10 ;in used input share
jl. i0. ;goto call inblock:
i8:al. w1 e0. ;terminate zone:get address of input zone
jl. w3 h79. ;call terminate
al. w1 e10. ;get address of output zone
jl. w3 h79. ;call terminate
jl. a8. ;
i6: 0
i7: <:<25><0><0>:>
e.
;compute checksum and bytes transferred of output file
b. i4
w.
a8:al w0 0 ;reset
hs. w0 c23. ;byte c23
rl. w0 c7. ;no-of-file :=
bs. w0 1 ;no-of-file - 1
rs. w0 c7. ;
rl. w0 a7. ;checksum of output file :=
ls w0 1 ;checksum of output file +
ls w0 -1 ;checksum of last input file
rs. w0 a7. ;
wa. w0 a9. ;
ls w0 1 ;
ls w0 -1 ;
rs. w0 a9. ;
rl. w0 a5. ;bytes transferred to output file :=
wa. w0 a21. ;bytes transferred to output file +
rs. w0 a21. ;bytes transferred from last input file
rl. w0 c25. ;
ba. w0 1 ;
rs. w0 c25. ;c25:=c25+1
rl. w0 c23. ;if message.no
so w0 1 ;then
jl. a22. ;goto prepare next move:
al w2 10 ;write out:
jl. w3 h26.-2 ;outchar <nl>
al. w1 (c18.)
dl w3 x1+2 ;write
lo. w2 i2. ;out
lo. w3 i2. ;input
am 2
ds. w3 i3. ;file name
dl w3 x1+6
lo. w2 i2. ;
lo. w3 i2. ;
am 6
ds. w3 i3. ;
al. w0 i3. ;
jl. w3 h31.-2 ;write out input file name
al. w0 i0. ;write out
jl. w3 h31.-2 ;number of bytes transferred
rl. w0 a5. ;write out
jl. w3 h32.-2 ;number of bytes transferred
1<23+32<12+9 ;from current input file
al w2 32 ;
jl. w3 h26.-2 ;outchar <nl>
al. w0 i1. ;write out
jl. w3 h31.-2 ;checksum
rl. w0 a7. ;write out
jl. w3 h32.-2 ;checksum of
1<23+32<12+9 ;current input file
rl. w0 c7. ;get no-of-file
se w0 0 ;if no-of-file <> 0 then
jl. a22. ;goto prepare next move: else
rl. w0 c26. ;if end param. = 0
se w0 1 ;then goto
jl. a22. ;prepare next move: else
a19:rl. w0 c23. ;if
so w0 1 ;message.no
jl. a22. ;then goto prepare next move
al w2 10 ;write out
jl. w3 h26.-2 ;<nl>
al. w1 (c15.)
dl w3 x1+2 ;write
lo. w2 i2. ;out
lo. w3 i2. ;output
am 2
ds. w3 i3. ;file name
dl w3 x1+6
lo. w2 i2. ;
lo. w3 i2. ;
am 6
ds. w3 i3. ;
al. w0 i3. ;
jl. w3 h31.-2 ;output file name
al. w0 i0. ;write out
jl. w3 h31.-2 ;number of bytes transferred
rl. w0 a21. ;write out
jl. w3 h32.-2 ;number of bytes transferred
1<23+32<12+9 ;to output file
al w2 32 ;
jl. w3 h26.-2 ;outchar <nl>
al. w0 i1. ;write out
jl. w3 h31.-2 ;checksum
rl. w0 a9. ;write out
jl. w3 h32.-2 ;checksum of
1<23+32<12+9 ;output file
al w2 10 ;
jl. w3 h26.-2 ;outchar <nl>
jl. a22. ;goto prepare next move:
i0: <: number of bytes transferred:<0>:>
i1: <:,checksum:<0>:>
i2: <: <0>:>
i3: 0, r.4
<:<0>:>
e.
;prepare next movement in case of mt.
a22:rl. w1 c5. ;prepare next move:
sz w1 2 ;if output=bs then
jl. a25. ;goto change bs-area
al w0 1 ;output file no:=
wa. w0 c13. ;output file no.+1
rs. w0 c13. ;
rl. w0 c7. ;no-of-files:=no-of-files - 1
sh w0 0 ;if number of files = 0 then
am -8 ;check end param. else
jl. 10 ;goto update counter
rl. w0 c26. ;get end param.
se w0 1 ;if end param. <> 1
jl. a4. ;goto next parameter
jl. a23. ;goto end program
al w0 1 ;
wa. w0 c9. ;update count file-no.
rs. w0 c9. ;in input
jl. a24. ;goto insert first shared
;change bs-area-descriptor
a25:rl. w0 c7. ;change bs-area:
sn w0 0 ;if mt-file-set specified as input
jl. +8 ;then set end param=1 and too_many
al w0 0 ;
rs. w0 c7. ;
jl. +10 ;
rl. w0 c26. ;
sz w0 1 ;
am +8 ;
jl. 2 ;
al w0 1 ;
rs. w0 c26. ;
rs. w0 c30. ;set too many param true
jl. a19. ;
rl. w0 e37. ;
rs. w0 c3. ;change output length
se w1 3 ;if c5<>3 then goto
jl. a26. ;change entry
al. w1 c3. ;else
al. w2 c4. ;
rl w0 x2+10 ;outputdescriptor :=
rs w0 x1+10 ;inputdescriptor
dl w0 x2+14 ;
ds w0 x1+14 ;
dl w0 x2+18 ;
ds w0 x1+18 ;
a26:rl. w3 c15. ;change entry: (output)
al. w1 c3. ;
jd 1<11+44 ;
se w0 0 ;if no success then
jl. a18. ;outerror (change error)
rl. w3 c33.
sn w3 1
jl. +14
rl. w3 c2.
ba w3 x3+1
bl w0 x3
ba w0 x3+1
sn w0 18
jl. +8
rl. w2 c30. ;if too_many_param then
se w2 0 ;
jl. a16. ;outerror (too many param)
a23:al w2 0 ;end program:
am. (c1.)
jl +h7
;error texts
g10: <:***move param: <0>:>
g11: <:***move call<0>:>
g12: <:***move: connect output<0>:>
g13: <:***move: connect input<0>:>
g14: <:***move: output kind<0>:>
g15: <:***move: input kind<0>:>
g16: <:***move: too many parameters<0>:>
g17: <:***move: no core<0>:>
g18: <:***move: change error<0>:>
;variables
c0: 0 ;address of output blocklength
c1: 0 ;fp-start
c2: 0 ;parameter pointer
c3: 0,r.10 ;output entry tail
c4: 0,r.10 ;input entry tail
c5: 0 ;file mode boolean
c6: 3 ;number of buffers
c7: 0 ;no of files
c8: 0 ;rel file
c9= c4 + 12 ;file number in input descriptor
c10: 512 ;std. blocklength
c11: 0 ;max blocklength
c13= c3 + 12 ;file number in output descriptor
c14: 1<23+18 ;mt-mode-kind
c15: 0 ;output name address
c18: 0 ;input name address
c23: 0 ;if message.yes then byte c23+1=1
c25: 0 ;number of input files
c26: 0 ;end param.
c27: 32767 ;maxbll of ampex 7-tracks
c28: 42690 ;maxbll of cdc, ampex 9-tracks
c29:1<23+4095
c30: 0 ;too many param when output is bs
c31: 4095 ;input kind mask
c32: 0
c33: 0
a3: 0 ;address of first word in buffer area 3
b3: 0 ;address of last word in buffer area 3
a2: 0 ;address of first word in buffer area 2
b2: 0 ;address of last word in buffer area 2
a1: 0 ;address of first word in bufferarea 1
b1: 0 ;address of last word in buffer area 1
a7: 0 ;checksum of current input file
a5: 0 ;bytes transferred from current input file
a9: 0 ;checksum of output file
a21: 0 ;bytes transferred to output file
a28: 1<18+1<16 ;give up mask
a29: 0 ;input blocklength
;outerror (message)
b. i3
w.
a10: am g10-g11 ;move param:
a11: am g11-g12 ;move call:
a12: am g12-g13 ;connect output
a13: am g13-g14 ;connect input
a14: am g14-g15 ;illegal output kind
a15: am g15-g16 ;illegal input kind
a16: am g16-g17 ;too many parameters
a17: am g17-g18 ;no core:
a18: al. w0 g18. ;change error
rs. w0 c32. ;save error entry
al w2 10 ;write(out,<:<10>:>)
am. (c1.) ;
jl w3 h33-2 ;
am. (c1.)
jl w3 h31-2 ;write error message:
rl. w0 c32. ;if param error
sn. w0 g10. ; then
jl. i1. ; goto write_out_param
sn. w0 g13. ; else if connect input
jl. i2. ; goto write_out_input_name
sn. w0 g15. ; else if input kind
jl. i2. ; goto write_out_input_name
i0:al w2 10 ; end
am. (c1.)
jl w3 h33-2
al w2 1 ;success := false:
am. (c1.)
jl +h7
i1:al w2 32 ;write_out_param:
am. (c1.) ; write(out,<:<32>:>)
jl w3 h33-2 ;
al w0 2
wa. w0 c2. ;
am. (c1.) ; write(out,<param>)
jl w3 h31-2 ;
jl. i0. ; goto end
i2:al w2 32 ;write_out_input_name:
am. (c1.) ;
jl w3 h33-2 ; write(out,<:<32>:>,<input name>)
rl. w0 c18. ;
am. (c1.) ;
jl w3 h31-2 ;
jl. i0. ;
e.
;zone and share descriptors
;define input zone
k=k+2
e0=k-h0+h3 ;record base
e1=e0+h0+0 , e2=e0+h0+2 ;base buffer area, last of buffer
e3=e0+h0+4 ;used share
e4=e0+h0+6 , e5=e0+h0+8 ;first share, last share
e6=e0+h2+0 , e7=e0+h2+2 ;give up mask, give up action
e8=e0+h3+2 , e9=e0+h3+4 ;last byte, record length
k=k+h5
;define output zone
e10=k-h0+h3
e11=e10+h0+0 , e12=e10+h0+2 ;base buffer area, last of buffer
e13=e10+h0+4 ;used share
e14=e10+h0+6 , e15=e10+h0+8 ;first share, last share
e37=e10+h1+16
e16=e10+h2+0 , e17=e10+h2+2 ;give up mask , give up action
e18=e10+h3+2 , e19=e10+h3+4 ;last byte, record length
k=k+h5
;share descriptor addresses
e21=k ;input share 1
e22=e21+h6 ;input share 2
e23=e22+h6 ;output share 1
e24=e23+h6 ;output share 2
e25=e21+2 , e26=e21+4 ;first shared, last shared input 1
e27=e22+2 , e28=e22+4 ;first shared, last shared input 2
e29=e23+2 , e30=e23+4 ;first shared, last shared output 1
e31=e24+2 , e32=e24+4 ;first shared, last shared output 2
e33=e21+22 ;top transferred input 1
e34=e22+22 ;top transferred input 2
e35=e23+22 ;top transferred output 1
e36=e24+22 ;top transferred output 2
e20=e24+h6-1 ;base of buffers
e38=e21+4
e39=e22+4
e40=e23+4
e41=e24+4
e42=e21+10
e43=e22+10
e44=e23+10
e45=e24+10
i.
m. rc 120876 fp utility move
f1=k-h55-h5-h5 ;length
f2=4 ;entry
g0:g1:(:f1+511:)>9 ;segm.
0,r.4 ;name
s2 ;date
0,0 ;file,block
2<12+f2 ;contents,entry
f1 ;length
d.
p.<:insertproc:>
e.
▶EOF◀