ReC98/libs/BorlandC/pathops.asm

191 lines
2.8 KiB
NASM

if LDATA
issbcsValXOR macro
xor cx, cx
endm
else
issbcsValXOR macro
xor dx, dx
endm
endif
pathops_10010 proc near
push ax
push cx
push dx
push bx
push sp
push bp
push si
push di
push ds
push es
mov bp, sp
mov ax, word ptr ___path_dbcs_vector
or ax, word ptr ___path_dbcs_vector+2
jnz short @@pathops_1004C
mov si, 0FFFFh
push ds
mov ax, 6300h
clc
int 21h
mov ax, ds
pop ds
jb short @@pathops_1003F
mov dx, ds
cmp ax, dx
jz short @@pathops_1003F
cmp si, 0FFFFh
jnz short @@pathops_10045
@@pathops_1003F:
mov si, offset ___path_dbcs_default
if LDATA
mov ax, seg ___path_dbcs_default
else
mov ax, ds
endif
@@pathops_10045:
mov word ptr ___path_dbcs_vector, si
mov word ptr ___path_dbcs_vector+2, ax
@@pathops_1004C:
mov sp, bp
pop es
pop ds
pop di
pop si
pop bp
pop bx
pop bx
pop dx
pop cx
pop ax
ret
pathops_10010 endp
public ___path_isdbcsleadbyte
___path_isdbcsleadbyte proc
@@arg_0 = byte ptr (cPtrSize + 2)
push bp
mov bp, sp
push si
push di
mov al, [bp+@@arg_0]
xor cx, cx
les bx, ___path_dbcs_vector
@@pathops_10067:
mov dx, es:[bx]
or dx, dx
jz short @@pathops_10079
cmp al, dl
jb short @@pathops_10079
inc bx
inc bx
cmp al, dh
ja short @@pathops_10067
inc cx
@@pathops_10079:
xchg ax, cx
pop di
pop si
pop bp
ret
___path_isdbcsleadbyte endp
public ___path_issbcs
___path_issbcs proc
var_4 = DPTR_ -(dPtrSize)
arg_0 = DPTR_ +(cPtrSize + 2)
arg_4 = word ptr +(cPtrSize + 2 + dPtrSize)
push bp
mov bp, sp
sub sp, dPtrSize
push si
push di
issbcsValXOR
if LDATA
mov dx, word ptr [bp+arg_0+2]
mov ax, word ptr [bp+arg_0]
mov word ptr [bp+var_4+2], dx
mov word ptr [bp+var_4], ax
else
mov ax, [bp+arg_0]
mov word ptr [bp+var_4], ax
endif
@@pathops_10094:
LES_ bx, [bp+var_4]
cmp byte ptr ES_[bx], 0
jnz short @@pathops_100A1
issbcsValXOR
jmp short @@pathops_100CF
@@pathops_100A1:
if LDATA
cmp cx, 1
jnz short @@pathops_100AB
mov cx, 2
else
cmp dx, 1
jnz short @@pathops_100AB
mov dx, 2
endif
jmp short @@pathops_100C2
@@pathops_100AB:
LES_ bx, [bp+var_4]
if LDATA
mov al, ES_[bx]
push ax
else
push word ptr [bx]
endif
call ___path_isdbcsleadbyte
pop cx
or ax, ax
jz short @@pathops_100C0
if LDATA
mov cx, 1
else
mov dx, 1
endif
jmp short @@pathops_100C2
@@pathops_100C0:
issbcsValXOR
@@pathops_100C2:
mov ax, word ptr [bp+var_4]
cmp ax, [bp+arg_4]
jnb short @@pathops_100CF
inc word ptr [bp+var_4]
jmp short @@pathops_10094
@@pathops_100CF:
if LDATA
or cx, cx
else
or dx, dx
endif
jnz short @@pathops_100D8
mov ax, 1
jmp short @@pathops_100DA
@@pathops_100D8:
xor ax, ax
@@pathops_100DA:
pop di
pop si
mov sp, bp
pop bp
ret
___path_issbcs endp