ReC98/libs/master.lib/file_seek.asm

80 lines
1.4 KiB
NASM

; master library - MS-DOS
;
; Description:
; ファイルポインタの移動
; ファイルポインタの読み取り
;
; Function/Procedures:
; void file_seek( long pos, int dir ) ;
; unsigned long file_tell( void ) ;
;
; Parameters:
; long pos 位置
; int dir 0: SEEK_SET ( ファイル先頭相対 )
; 1: SEEK_CUR ( 現在位置相対 )
; 2: SEEK_END ( ファイル末尾相対 )
;
; Returns:
; unsigned long file_tell(); ファイルの先頭からの距離(先頭=0)
;
; Binding Target:
; Microsoft-C / Turbo-C / Turbo Pascal
;
; Running Target:
; MS-DOS
;
; Requiring Resources:
; CPU: 8086
;
; Notes:
;
;
; Compiler/Assembler:
; TASM 3.0
; OPTASM 1.6
;
; Author:
; 恋塚昭彦
;
; Revision History:
; 92/11/30 Initial
; 95/ 4/ 1 [M0.22k] BUGFIX file_seek エラー時に位置の把握が狂った
func FILE_SEEK ; file_seek() {
call FILE_FLUSH
cmp BX,-1
je short @@ERROR
push BP
mov BP,SP
; 引数
@@pos = (RETSIZE+2)*2
@@dir = (RETSIZE+1)*2
mov AL,[BP+@@dir]
mov AH,42h
mov DX,[BP+@@pos]
mov CX,[BP+@@pos+2]
int 21h
pop BP
; errorがでたときのために位置を読みなおす
mov AX,4201h
mov DX,0
mov CX,DX
int 21h
mov file_Eof,0
mov WORD PTR file_BufferPos,AX
mov WORD PTR file_BufferPos+2,DX
@@ERROR:
ret 6
endfunc ; }
func FILE_TELL ; file_tell() {
mov AX,file_BufPtr
xor DX,DX
add AX,WORD PTR file_BufferPos
adc DX,WORD PTR file_BufferPos+2
ret
endfunc ; }