|
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: 33792 (0x8400) Types: TextFile Names: »move3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »move3tx «
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 la. w0 c31. ;kind := modekind extract 12; sh w0 4 ;if kind = 4 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 1981.08.10 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◀