home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 3
/
FREEWARE.BIN
/
towns_os
/
tvi
/
tvi_src.lzh
/
ASM
/
FILECTRL.ASM
next >
Wrap
Assembly Source File
|
1990-10-10
|
5KB
|
183 lines
;*****************************************************************************
;$Header: filectrl.asv 1.3 90/10/10 18:37:26 Nam Rel $
;*****************************************************************************
.386p
code segment dword public use32 'code'
assume cs:code
;*****************************************************************************
;int set_defdrv(unsigned char); /*デフォルトドライブの選択(filectrl)*/
; ↑ドライブ番号(1:A)
;
public set_defdrv
db 'set_defdrv',10
align 4
set_defdrv proc near
mov dl,byte ptr [esp+4] ;ドライブ番号(A=0)
dec dl ;A=1に
mov ah,0eh ;デフォルトドライブの選択
int 21h ;DOS_EXTENDERをcall
and ax,0ffh ;alにシステム論理ドライブ数
ret
set_defdrv endp
;*****************************************************************************
; int get_curdrv(); /* カレントドライブ番号取得(filectrl) */
;
public get_curdrv
db 'get_curdrv',10
align 4
get_curdrv proc near
mov ah,19h ;カレントディレクトリの取得
int 21h ;DOS_EXTENDERをcall
and eax,00fh ;下位8bitにドライブ番号(0:A,1:B....)
inc al ;Aドライブを1に
ret
get_curdrv endp
;*****************************************************************************
; int get_curdir(unsigned char, char *); /* カレントディレクトリ取得(filectrl) */
; ↑ドライブ番号(1:A)↑ディレクトリ名を格納する64byteバッファポインタ
public get_curdir
db 'get_curdir',10
align 4
get_curdir proc near
mov eax,dword ptr [esp+8] ;ディレクトリ名を格納する64byteバッファポインタ
mov dl,byte ptr [esp+4] ;ドライブ番号
push esi
mov esi,eax ;ds:[esi]にディレクトリ名
mov ah,47h ;カレントディレクトリの取得
int 21h ;DOS_EXTENDERをcall
pop esi
and eax,0ffh ;下位16bitにエラーコード
; 15:ドライブ番号が無効
ret
get_curdir endp
;*****************************************************************************
; int set_curdir(char *); /* カレントディレクトリ設定(filectrl) */
; ↑末尾が0のパス名のポインタ
public set_curdir
db 'set_curdir',10
align 4
set_curdir proc near
mov edx,dword ptr [esp+4] ;ディレクトリ名ポインタ
mov esi,eax ;ds:[esi]にディレクトリ名
mov ah,3bh ;カレントディレクトリの設定
int 21h ;DOS_EXTENDERをcall
and eax,0ffh ;下位16bitにエラーコード
; 3:パスが無かった
ret
set_curdir endp
;*****************************************************************************
;int get_diskfree(unsigned char); /*指定ドライブ空き(byte)取得*/
; ↑ドライブ番号(1:A)
; /* 無効なドライブなら-1 */
public get_diskfree
db 'get_diskfree',12
align 4
get_diskfree proc near
mov dl,byte ptr [esp+4] ;ドライブ番号
push ebx
mov ah,36h ;ディスク情報の取得(CXに物理セクタサイズ)
int 21h ;DOS_EXTENDERをcall
;AX:セクタ数/クラスタ
;BX:使用可能なディスククラスタの数
;CX:バイト数/クラスタ
;DX:クラスタ数/ディスク
cmp ax,0ffffh
jnz short get_diskfree_calcbyte
xor eax,eax
dec eax ;eax=-1
pop ebx
ret
get_diskfree_calcbyte:
mul bx ;使用可能なディスククラスタ*(セクタ数/クラスタ)
mov bx,ax
mov ax,dx
shl ax,16
mov ax,bx ;ax=使用可能なセクタ数
and ecx,0ffffh
mul ecx ;使用可能なセクタ数*(バイト数/クラスタ)
;eax=使用可能なバイト数
pop ebx
ret
get_diskfree endp
;*****************************************************************************
; void dta_set(char *); /* ディスク転送アドレスの設定(filectrl) */
; ↑
public dta_set
db 'dta_set',7
align 4
dta_set proc near
mov edx,dword ptr [esp+4] ;ディスク転送アドレス(ds:edx)
mov ah,1ah ;ディスク転送アドレスの設定
int 21h ;DOS_EXTENDERをcall
ret
dta_set endp
;*****************************************************************************
; int dta_findfirst(unsigned char, char *); /*最初に一致するファイル探索*/
; ↑ファイル属性 ↑末尾が0のファイルパスのポインタ
public dta_findfirst
db 'dta_findfirst',13
align 4
dta_findfirst proc near
mov edx,dword ptr [esp+8] ;ファイルパスのポインタ(ds:edx)
mov cx,word ptr [esp+4] ;ファイル属性
mov ah,4eh ;最初に一致するファイル探索
int 21h ;DOS_EXTENDERをcall
and eax,0ffh ;下位8bitにエラーコード
; 2:パスが無効
; 18:一致するディレクトリエントリが無い
ret
dta_findfirst endp
;*****************************************************************************
; int dta_findnext(); /*次に一致するファイル探索*/
;
public dta_findnext
db 'dta_findnext',12
align 4
dta_findnext proc near
mov ah,4fh ;次に一致するファイル探索
int 21h ;DOS_EXTENDERをcall
and eax,0ffh ;下位8bitにエラーコード
; 18:一致するディレクトリエントリが無い
ret
dta_findnext endp
;*****************************************************************************
; int delete_file(char *); /* ファイルの削除(filectrl) */
; ↑末尾が0のパス名のポインタ
public delete_file
db 'delete_file',11
align 4
delete_file proc near
mov edx,dword ptr [esp+4] ;ファイル名ポインタ(ds:edx)
mov ah,41h ;ファイルの削除
int 21h ;DOS_EXTENDERをcall
and eax,0ffh ;下位16bitにエラーコード
; 2:ファイルが無かった
; 5:アクセスを拒否された
ret
delete_file endp
code ends
end
;*****************************************************************************
;$Log: RCS/filectrl.asv $
; Revision 1.3 90/10/10 18:37:26 Nam
; Release at V0.0 L18d
;
; Revision 1.2 90/10/10 18:37:26 Nam
; Rel V0.0L17 at '90.11.2 for FPICS.
;
; Revision 1.1 90/10/10 18:37:26 Nam
; Initial revision
;
;*****************************************************************************