home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource4 / 256_01 / fun1ch.a < prev    next >
Text File  |  1988-01-08  |  2KB  |  60 lines

  1. ;---------------------------------------------------------------------
  2. ;    ASM88 FILE:     FUN1CH.A     Get Drive Data
  3. ;    ----------
  4. ;    WRITTEN:        26/10/87
  5. ;    -------
  6. ;    PURPOSE:        This is one of a series of files which take
  7. ;    -------         advantage of INT 21H functions under MS-DOS.
  8. ;                    In each case the error situation is marked by
  9. ;                    the carry flag being set.   We use the De Smet
  10. ;                    external variable '_carryf' to see whether the
  11. ;                    carry is set on return from the function.
  12. ;                    If so, the error code can be used to obtain
  13. ;                    information about the specific error.
  14. ;
  15. ;    USAGE:          int FUN1CH(drv,&_rbx, &rcx, &rdx, &_carryf)
  16. ;    -----           int drv; /* A = 1, B = 2.....DEFAULT = 0
  17. ;                    char *_rbx, *_rcx, *_rdx, *_carryf;
  18. ;
  19. ;    DEPENDENCIES:           De Smet C V 2.44+
  20. ;    ------------
  21. ;    Copyright 1987 - Cogar Computer Services Pty. Ltd
  22. ;---------------------------------------------------------------------
  23.  
  24. CSEG
  25. PUBLIC FUN1CH_
  26.  
  27. FUN1CH_:
  28.     push    bp    ; normal De Smet C start
  29.     mov    bp,sp    ; point to the stack
  30.     mov    ax,ds    ; and make ES common with DS
  31.     mov    es,ax
  32. ;----------------------------------------------------------------------
  33. ;  The unique programme follows.
  34. ;----------------------------------------------------------------------
  35.     mov    byte dl,[bp+4]    ; the specified drive
  36.     mov    ah,1ch    ; the Function No.
  37.     int    21h
  38.     cmp    al,0ffh    ; this is the error check
  39.     je    FUN1CH_ERROR
  40.     mov    si,[bp+6]
  41.     mov    word [si],bx    ; pointer to FAT Table in _rbx
  42.     mov    si,[bp+8]
  43.     mov    word [si],cx    ; bytes per sector in _rcx
  44.     mov    si,[bp+10]
  45.     mov    word [si],dx    ; clusters per drive in _rdx
  46.     xor    ah,ah    ; sectors per cluster in AL on return
  47.     jmp    FUN1CH_QUIT
  48. FUN1CH_ERROR:
  49.     mov    si,[bp+12]    ; get address of '_carryf' variable
  50.     mov    byte [si],1    ; return with _carryf = 1
  51.     xor    ax,ax
  52.     mov    al,15    ; "invalid drive" error message
  53. ;----------------------------------------------------------------------
  54. ;  Normal programme termination.
  55. ;----------------------------------------------------------------------
  56. FUN1CH_QUIT:
  57.     pop    bp    ; restore starting conditions
  58.     ret
  59. ;----------------------------------------------------------------------
  60.