home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
rxfiles.zip
/
rxrename.asm
< prev
next >
Wrap
Assembly Source File
|
1998-09-17
|
4KB
|
123 lines
;-----------------------------------------------------------------------
; RXRENAME.RX by ML /AT /Fe RXRENAME.RX RXRENAME.ASM
;
; RXRENAME( old, new )
; renames resp. moves old file to new file on the same drive
; returning the DOS result code, i.e. 0 if successful. It's
; also posible to rename a directory. Wildcards in the file
; names are not allowed.
;-----------------------------------------------------------------------
code segment para public 'CODE'
assume cs:code, ds:code, es:code, ss:code
RXSTR struct
RxLen dw ?
RxPtr dd ?
RXSTR ends
PRXSTR TYPEDEF far ptr RXSTR
SHVBLOCK struct
ShvNext dd ?
ShvNam RXSTR <>
ShvVal RXSTR <>
ShvNamL dw ?
ShvValL dw ?
ShvCode db ?
ShvRet db ?
SHVBLOCK ends
org 16h
RXpid dw ? ;_psp:0x16 parent (REXX) pid
org 2Ch
envseg dw ? ;_psp:0x2C environment segment
org 54h
DOSREXX4 dd ? ;_psp:0x54 'REXX' signature
SHVENTRY dd ? ;_psp:0x58 shared variable handler
org 82h
RXARGC dw ? ;_psp:0x82 number of arguments
RXARGV PRXSTR ? ;_psp:0x84 arg.s (length, pointer)
RXRESULT dd ? ;_psp:0x88 RESULT buffer (256 bytes)
_RXNAME db ? ;_psp:0x8C (undocumented)
org 100h ;COM entry point at CS:100
start: jmp stack ;set stack, release memory
;-----------------------------------------------------------------------
main proc near ;enter after initialization
cmp word ptr DOSREXX4+2,'XX'
jne fail
cmp RXARGC,2
jne fail
les si,RXARGV
push ds
lds dx,es:RXSTR.RxPtr[si] ;DS:DX 1st argument pointer
add si,sizeof RXSTR
les di,es:RXSTR.RxPtr[si] ;ES:DI 2nd argument pointer
mov ah,56h ;rename DS:DX to ES:DI
int 21h
jc result ;if carry AL = error
xor al,al ;else okay (AL := 0)
result: pop ds ;restore data segment
les di,RXRESULT ;ES:DI RESULT buffer
mov ah,0 ;AX = exit code 0..255
mov cl,100 ;AL = quotient 0.. 2
div cl ;AH = remainder 0.. 99
mov cx,'00'
or al,cl
cmp al,ch
je lt_100
xor ch,ch
stosb ;e.g. 1 of exit code 123
lt_100: mov al,ah
aam ;adjust remainder 0..99
xchg al,ah
or al,cl
cmp al,ch
je lt_010
stosb ;e.g. 2 of exit code 123
lt_010: mov al,ah
or al,cl
stosb ;e.g. 3 of exit code 123
xor al,al ;REXX function ended
jmp exit
fail: mov al,1 ;REXX function error
exit: mov ah,4Ch ;terminate with RC AL
int 21h
main endp
;-----------------------------------------------------------------------
align 16
stkparas equ 32 ;stack size 512 = 32 * 16
stack label near ;initialise *.com program
mov bx,offset stack + 16 * stkparas
mov sp,bx ;new stack 100h above init
mov cl,4
shr bx,cl ;used number of paragraphs:
mov ah,4ah ;modify allocated memory to
int 21h ;needed size i.e. free rest
jmp main ;current SP must be beyond
;-----------------------------------------------------------------------
code ends
end start ;program entry point