;> MoveToolPG
 LEADR &1000
ORIGIN
CR * 13
LF * 10
TERM * LF
STYLE * 1 ;style 0 JGT, 1 Book

 ^ 0
WRITEC # 1
WRITES # 1
WRITE0 # 1
NEWLINE # 1
READC # 1
CLI # 1
BYTE # 1
WORD # 1
FILE # 1
ARGS # 1
BGET # 1
BPUT # 1
MULTIPLE # 1
OPEN # 1
READLINE # 1
CONTROL # 1
GETENV # 1
EXIT # 1
SETENV # 1
WRITEI * 256

R0 RN 0
R1 RN 1
R2 RN 2
R3 RN 3
R4 RN 4
R5 RN 5
R6 RN 6
R7 RN 7
R8 RN 8
R9 RN 9
R10 RN 10
R11 RN 11
R12 RN 12
R13 RN 13
R14 RN 14
R15 RN 15
PC RN R15
SP RN R13

ENTRY SWI GETENV
 MOV SP,R1
MOVEE1 LDRB R2,[R0],#1
 CMP R2,#0
 BEQ MOVENOARGS
 CMP R2,#" "
 BNE MOVEE1 ;skip to end of first keyword section
MOVEE2 LDRB R2,[R0],#1
 CMP R2,#" "
 BEQ MOVEE2
 CMP R2,#0
 BEQ MOVENOARGS ;go past any spaces
 CMP R2,#"-"
 BEQ MOVENOARGS
 SUB R8,R0,#1 ;pointer to file name
MOVEE3 LDRB R2,[R0],#1
 CMP R2,#" "
 BHI MOVEE3
 BNE MOVENOARGS ;didn't stop on a space
 MOV R2,#0
 STRB R2,[R0,#-1]
MOVEF1 LDRB R2,[R0],#1
 CMP R2,#" "
 BEQ MOVEF1
 BCC MOVENOARGS
 MOV R9,#0
MOVEH1 CMP R2,#"0"
 BCC MOVEHX
 CMP R2,#"9"+1
 BCC MOVEH2
 CMP R2,#"A"
 BCC MOVEHX
 CMP R2,#"F"+1
 BCC MOVEH3
 BIC R2,R2,#" "
 CMP R2,#"A"
 BCC MOVEHX
 CMP R2,#"F"+1
 BCS MOVEHX
MOVEH3 SUB R2,R2,#"A"-("9"+1)
MOVEH2 AND R2,R2,#15
 ORR R9,R2,R9,LSL #4
 LDRB R2,[R0],#1
 CMP R2,#" "
 BHI MOVEH1
 CMP R9,#&4000000
 BCS MOVEBADADR
 CMP R9,#&1000
 BCC MOVEBADADR
 SWI WRITES
 = "Moving file '",0
 MOV R0,R8
 SWI WRITE0
 SWI WRITEI+"'"
 SWI NEWLINE
 MOV R0,#5
 MOV R1,R8
 SWI FILE
 CMP R0,#1
 BCC MOVENOFILE
 BHI MOVENODIR
 SUB R7,R9,R2
 MOV R2,R9
 ADD R3,R3,R7
 MOV R0,#1
 SWI FILE
 SWI EXIT
MOVEBADADR SWI WRITES
 = "Bad load address for file.",10,13,0
 SWI EXIT
MOVENOFILE SWI WRITES
 = "File to move not found.",10,13,0
 SWI EXIT
MOVENODIR SWI WRITES
 = "Cannot move a directory.",10,13,0
 SWI EXIT
MOVEHX SWI WRITES
 = "Bad hex argument.",10,13,0
 ALIGN
MOVENOARGS SWI WRITES
 = "File address change tool.",10,13,10,13
 = "First argument:  name of file to be moved.",10,13
 = "Second argument: new load address of file.",10,13,10,13
 = "For example: MOVEFILE $.library.twin 3d0000",10,13,0
 SWI EXIT
 END
