mirror of https://github.com/nmlgc/ReC98.git
74 lines
1.2 KiB
NASM
74 lines
1.2 KiB
NASM
; int __cdecl __far _rtl_open(const char *filename, int oflag)
|
|
__rtl_open proc DIST
|
|
@@fd = word ptr -2
|
|
@@filename = DPTR_ (cPtrSize + 2)
|
|
@@oflag = word ptr (cPtrSize + 2 + dPtrSize)
|
|
|
|
push bp
|
|
mov bp, sp
|
|
sub sp, 2
|
|
push si
|
|
push di
|
|
mov al, 1
|
|
mov cx, [bp+@@oflag]
|
|
test cx, O_WRONLY
|
|
jnz short @@ready
|
|
mov al, 2
|
|
test cx, O_RDWR
|
|
jnz short @@ready
|
|
mov al, 0
|
|
|
|
@@ready:
|
|
pushDS_
|
|
LDS_ dx, [bp+@@filename]
|
|
mov cl, 0F0h
|
|
and cl, byte ptr [bp+@@oflag]
|
|
or al, cl
|
|
mov ah, 3Dh
|
|
int 21h
|
|
popDS_
|
|
jb short @@_openFailed
|
|
mov [bp+@@fd], ax
|
|
mov ax, [bp+@@oflag]
|
|
and ax, not (_O_RUNFLAGS or O_TEXT)
|
|
or ax, O_BINARY
|
|
mov bx, [bp+@@fd]
|
|
add bx, bx
|
|
mov _openfd[bx], ax
|
|
mov ax, [bp+@@fd]
|
|
jmp short @@ret
|
|
|
|
@@_openFailed:
|
|
push ax
|
|
call __IOERROR
|
|
|
|
@@ret:
|
|
pop di
|
|
pop si
|
|
mov sp, bp
|
|
pop bp
|
|
ret
|
|
__rtl_open endp
|
|
|
|
; int __cdecl _open(const char *path, int oflags)
|
|
__open proc DIST
|
|
@@filename = DPTR_ (cPtrSize + 2)
|
|
@@oflag = word ptr (cPtrSize + 2 + dPtrSize)
|
|
|
|
push bp
|
|
mov bp, sp
|
|
push si
|
|
push di
|
|
push [bp+@@oflag]
|
|
if LDATA
|
|
push word ptr [bp+@@filename+2]
|
|
endif
|
|
push word ptr [bp+@@filename]
|
|
call __rtl_open
|
|
add sp, (2 + dPtrSize)
|
|
pop di
|
|
pop si
|
|
pop bp
|
|
ret
|
|
__open endp
|