home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
rxfiles.zip
/
rxcanon.asm
< prev
next >
Wrap
Assembly Source File
|
1998-09-17
|
3KB
|
95 lines
;-----------------------------------------------------------------------
; RXCANON.RX by ML /AT /Fe RXCANON.RX RXCANON.ASM
;
; TRUENAME = RXCANON( path )
; returns canonical form of specified path, i.e. its TRUENAME,
; or null string, if path is invalid
;-----------------------------------------------------------------------
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,1 ;one argument expected
jne fail
les si,RXARGV
push ds
lds si,es:RXSTR.RxPtr[si] ;DS:SI argument pointer
les di,cs:RXRESULT ;ES:DI RESULT buffer
mov ah,60h ;canon DS:SI to ES:DI
int 21h ;"truename" function
pop ds
;;;;;;;; jnc okay ;REXX cleared RESULT
;;;;;;;; mov byte ptr es:[di],0
okay: 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