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 >
Assembly Source File  |  1990-10-10  |  5KB  |  183 lines

  1. ;*****************************************************************************
  2. ;$Header: filectrl.asv  1.3  90/10/10 18:37:26  Nam  Rel $
  3. ;*****************************************************************************
  4.  
  5.     .386p
  6. code    segment dword public use32 'code'
  7.     assume cs:code
  8.  
  9. ;*****************************************************************************
  10. ;int set_defdrv(unsigned char);    /*デフォルトドライブの選択(filectrl)*/
  11. ;               ↑ドライブ番号(1:A)
  12. ;
  13.     public    set_defdrv
  14.     db    'set_defdrv',10
  15.     align    4
  16. set_defdrv    proc near
  17.     mov    dl,byte ptr [esp+4]    ;ドライブ番号(A=0)
  18.     dec    dl            ;A=1に
  19.     mov    ah,0eh            ;デフォルトドライブの選択
  20.     int    21h            ;DOS_EXTENDERをcall
  21.     and    ax,0ffh            ;alにシステム論理ドライブ数
  22.     ret
  23. set_defdrv    endp
  24.  
  25. ;*****************************************************************************
  26. ; int get_curdrv();    /* カレントドライブ番号取得(filectrl) */
  27. ;
  28.     public    get_curdrv
  29.     db    'get_curdrv',10
  30.     align    4
  31. get_curdrv    proc near
  32.     mov    ah,19h            ;カレントディレクトリの取得
  33.     int    21h            ;DOS_EXTENDERをcall
  34.     and    eax,00fh        ;下位8bitにドライブ番号(0:A,1:B....)
  35.     inc    al            ;Aドライブを1に
  36.     ret
  37. get_curdrv    endp
  38.  
  39. ;*****************************************************************************
  40. ; int get_curdir(unsigned char,   char *);    /* カレントディレクトリ取得(filectrl) */
  41. ;                  ↑ドライブ番号(1:A)↑ディレクトリ名を格納する64byteバッファポインタ
  42.     public    get_curdir
  43.     db    'get_curdir',10
  44.     align    4
  45. get_curdir    proc near
  46.     mov    eax,dword ptr [esp+8]    ;ディレクトリ名を格納する64byteバッファポインタ
  47.     mov    dl,byte ptr [esp+4]    ;ドライブ番号
  48.     push    esi
  49.     mov    esi,eax            ;ds:[esi]にディレクトリ名
  50.     mov    ah,47h            ;カレントディレクトリの取得
  51.     int    21h            ;DOS_EXTENDERをcall
  52.     pop    esi
  53.     and    eax,0ffh        ;下位16bitにエラーコード
  54.                     ;    15:ドライブ番号が無効
  55.     ret
  56. get_curdir    endp
  57.  
  58. ;*****************************************************************************
  59. ; int set_curdir(char *);    /* カレントディレクトリ設定(filectrl) */
  60. ;                ↑末尾が0のパス名のポインタ
  61.     public    set_curdir
  62.     db    'set_curdir',10
  63.     align    4
  64. set_curdir    proc near
  65.     mov    edx,dword ptr [esp+4]    ;ディレクトリ名ポインタ
  66.     mov    esi,eax            ;ds:[esi]にディレクトリ名
  67.     mov    ah,3bh            ;カレントディレクトリの設定
  68.     int    21h            ;DOS_EXTENDERをcall
  69.     and    eax,0ffh        ;下位16bitにエラーコード
  70.                     ;    3:パスが無かった
  71.     ret
  72. set_curdir    endp
  73.  
  74. ;*****************************************************************************
  75. ;int get_diskfree(unsigned char);    /*指定ドライブ空き(byte)取得*/
  76. ;                      ↑ドライブ番号(1:A)
  77. ;                                               /* 無効なドライブなら-1 */
  78.     public    get_diskfree
  79.     db    'get_diskfree',12
  80.     align    4
  81. get_diskfree    proc near
  82.     mov    dl,byte ptr [esp+4]    ;ドライブ番号
  83.     push    ebx
  84.     mov    ah,36h            ;ディスク情報の取得(CXに物理セクタサイズ)
  85.     int    21h            ;DOS_EXTENDERをcall
  86.                     ;AX:セクタ数/クラスタ
  87.                     ;BX:使用可能なディスククラスタの数
  88.                     ;CX:バイト数/クラスタ
  89.                     ;DX:クラスタ数/ディスク
  90.     cmp    ax,0ffffh
  91.     jnz short    get_diskfree_calcbyte
  92.     xor    eax,eax
  93.     dec    eax            ;eax=-1
  94.     pop    ebx
  95.     ret
  96. get_diskfree_calcbyte:
  97.     mul    bx            ;使用可能なディスククラスタ*(セクタ数/クラスタ)
  98.     mov    bx,ax
  99.     mov    ax,dx
  100.     shl    ax,16
  101.     mov    ax,bx            ;ax=使用可能なセクタ数
  102.     and    ecx,0ffffh
  103.     mul    ecx            ;使用可能なセクタ数*(バイト数/クラスタ)
  104.                     ;eax=使用可能なバイト数
  105.     pop    ebx
  106.     ret
  107. get_diskfree    endp
  108.  
  109. ;*****************************************************************************
  110. ; void dta_set(char *);    /* ディスク転送アドレスの設定(filectrl) */
  111. ;              ↑
  112.     public    dta_set
  113.     db    'dta_set',7
  114.     align    4
  115. dta_set    proc near
  116.     mov    edx,dword ptr [esp+4]    ;ディスク転送アドレス(ds:edx)
  117.     mov    ah,1ah            ;ディスク転送アドレスの設定
  118.     int    21h            ;DOS_EXTENDERをcall
  119.     ret
  120. dta_set    endp
  121.  
  122. ;*****************************************************************************
  123. ; int dta_findfirst(unsigned char,   char *);    /*最初に一致するファイル探索*/
  124. ;                   ↑ファイル属性        ↑末尾が0のファイルパスのポインタ
  125.     public    dta_findfirst
  126.     db    'dta_findfirst',13
  127.     align    4
  128. dta_findfirst    proc near
  129.     mov    edx,dword ptr [esp+8]    ;ファイルパスのポインタ(ds:edx)
  130.     mov    cx,word ptr [esp+4]    ;ファイル属性
  131.     mov    ah,4eh            ;最初に一致するファイル探索
  132.     int    21h            ;DOS_EXTENDERをcall
  133.     and    eax,0ffh        ;下位8bitにエラーコード
  134.                     ;     2:パスが無効
  135.                     ;    18:一致するディレクトリエントリが無い
  136.     ret
  137. dta_findfirst    endp
  138.  
  139. ;*****************************************************************************
  140. ; int dta_findnext();    /*次に一致するファイル探索*/
  141. ;
  142.     public    dta_findnext
  143.     db    'dta_findnext',12
  144.     align    4
  145. dta_findnext    proc near
  146.     mov    ah,4fh            ;次に一致するファイル探索
  147.     int    21h            ;DOS_EXTENDERをcall
  148.     and    eax,0ffh        ;下位8bitにエラーコード
  149.                     ;    18:一致するディレクトリエントリが無い
  150.     ret
  151. dta_findnext    endp
  152.  
  153. ;*****************************************************************************
  154. ; int delete_file(char *);    /* ファイルの削除(filectrl) */
  155. ;                ↑末尾が0のパス名のポインタ
  156.     public    delete_file
  157.     db    'delete_file',11
  158.     align    4
  159. delete_file    proc near
  160.     mov    edx,dword ptr [esp+4]    ;ファイル名ポインタ(ds:edx)
  161.     mov    ah,41h            ;ファイルの削除
  162.     int    21h            ;DOS_EXTENDERをcall
  163.     and    eax,0ffh        ;下位16bitにエラーコード
  164.                     ;    2:ファイルが無かった
  165.                     ;    5:アクセスを拒否された
  166.     ret
  167. delete_file    endp
  168.  
  169. code    ends
  170.     end
  171. ;*****************************************************************************
  172. ;$Log: RCS/filectrl.asv $
  173. ; Revision 1.3  90/10/10 18:37:26  Nam
  174. ; Release at V0.0 L18d
  175. ; Revision 1.2  90/10/10 18:37:26  Nam
  176. ; Rel V0.0L17 at '90.11.2 for FPICS.
  177. ; Revision 1.1  90/10/10 18:37:26  Nam
  178. ; Initial revision
  179. ;*****************************************************************************
  180.