mirror of https://github.com/nmlgc/ReC98.git
79 lines
1.2 KiB
NASM
79 lines
1.2 KiB
NASM
|
; master library - DOS - file - size
|
||
|
;
|
||
|
; Description:
|
||
|
; ファイルの大きさを得る
|
||
|
;
|
||
|
; Function/Procedures:
|
||
|
; long dos_filesize( int fh ) ;
|
||
|
;
|
||
|
; Parameters:
|
||
|
; fh ファイルハンドル
|
||
|
;
|
||
|
; Returns:
|
||
|
; InvalidHandle (cy=1) ハンドルが無効
|
||
|
; 0〜 (cy=0) ファイルの大きさ
|
||
|
;
|
||
|
; Binding Target:
|
||
|
; Microsoft-C / Turbo-C / Turbo Pascal
|
||
|
;
|
||
|
; Running Target:
|
||
|
; MS-DOS
|
||
|
;
|
||
|
; Requiring Resources:
|
||
|
; CPU: 8086
|
||
|
;
|
||
|
; Notes:
|
||
|
;
|
||
|
;
|
||
|
; Assembly Language Note:
|
||
|
;
|
||
|
;
|
||
|
; Compiler/Assembler:
|
||
|
; TASM 3.0
|
||
|
; OPTASM 1.6
|
||
|
;
|
||
|
; Author:
|
||
|
; 恋塚昭彦
|
||
|
;
|
||
|
; Revision History:
|
||
|
; 94/ 2/14 Initial: dosfsize.asm/master.lib 0.22a
|
||
|
; 95/ 1/21 [M0.23] BUGFIX
|
||
|
|
||
|
func DOS_FILESIZE ; dos_filesize() {
|
||
|
mov BX,SP
|
||
|
@@filehandle = (RETSIZE+0)*2
|
||
|
mov BX,SS:[BX+@@filehandle]
|
||
|
|
||
|
mov AX,4201h ; 現在位置を得る
|
||
|
xor CX,CX
|
||
|
mov DX,CX
|
||
|
int 21h
|
||
|
jc short @@FAULT
|
||
|
|
||
|
push SI
|
||
|
push DI
|
||
|
|
||
|
push AX ; 現在位置をpush
|
||
|
push DX
|
||
|
xor DX,DX
|
||
|
mov AX,4202h ; 末尾へ (CX,DXは既に 0)
|
||
|
int 21h
|
||
|
mov SI,AX ; 末尾位置を DI,SIに保存
|
||
|
mov DI,DX
|
||
|
|
||
|
pop CX
|
||
|
pop DX
|
||
|
mov AX,4200h ; 元の位置へ戻る
|
||
|
int 21h
|
||
|
|
||
|
mov AX,SI
|
||
|
mov DX,DI
|
||
|
pop DI
|
||
|
pop SI
|
||
|
ret 2
|
||
|
@@FAULT:
|
||
|
neg AX ; InvalidHandle
|
||
|
sbb DX,DX ; 必ず-1, cy=1
|
||
|
ret 2
|
||
|
endfunc ; }
|