home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / asmutil / chasm4.zip / DSIZE.ASM < prev    next >
Assembly Source File  |  1985-01-19  |  4KB  |  111 lines

  1. ;===============================================
  2. ; PROGRAM DSIZE  Version 1.00 by Dave Whitman
  3. ;
  4. ; Syntax:  DSIZE [d:]
  5. ;
  6. ; Examines the disk in the specified drive
  7. ; and sets ERRORLEVEL as follows:
  8. ;
  9. ;  0 = unknown format
  10. ;  1 = single sided, 8 sectors (160K)
  11. ;  2 = single sided, 9 sectors (180K)
  12. ;  3 = double sided, 8 sectors (320K)
  13. ;  4 = double sided, 9 sectors (360K)
  14. ;
  15. ; DSIZE will only run under DOS 2.0
  16. ;
  17. ; This source file is in CHASM assembler syntax.
  18. ;===============================================
  19.  
  20. ;===============
  21. ; Equates
  22. ;===============
  23. @getver        equ     30H     ;get DOS version number
  24. @getfsp        equ     36H     ;get disk free space
  25. @prnstr        equ     09H     ;print string to console
  26. @exit          equ     4CH     ;exit and set ERRORLEVEL
  27.  
  28. cr     equ     0DH             ;carriage return
  29. lf     equ     0AH             ;linefeed
  30. beep   equ     07H             ;bell
  31.  
  32. drv1   equ     [5CH]           ;drive number in 1st fcb
  33.  
  34. dsize  proc    far
  35.  
  36.        cmp     al, 0FFH           ;is the drivespec valid?
  37.        jne     chkver             ;yes, continue
  38.        mov     dx, offset(baddrv) ;no, bitch
  39.        mov     ah, @prnstr        ;print message
  40.        int     21H                ;with dos call
  41.        jmps    exit               ;and quit
  42.  
  43. chkver mov     ah,@getver         ;what DOS are we under?
  44.        int     21H                ;ask DOS.
  45.  
  46.        cmp     al,00              ;earlier than 2.0?
  47.        jne     chkdsk             ;no, continue
  48.        mov     dx, offset(baddos) ;yes, bitch
  49.        mov     ah, @prnstr        ;print message
  50.        int     21H                ;with dos call
  51.        jmps    exit               ;and quit
  52.  
  53. chkdsk mov     dl, drv1           ;get drive number
  54.        mov     ah, @getfsp        ;ask for disk info
  55.        int     21H                ;with dos call
  56.  
  57.        cmp     dx, 0162H          ;360K
  58.        jne     c1
  59.        mov     dx, offset(K360)   ;print message
  60.        mov     ah, @prnstr
  61.        int     21H
  62.        mov     al, 04H            ;and set errorlevel
  63.        jmps    seterr
  64.  
  65. c1     cmp     dx, 015FH          ;180K
  66.        jne     c2
  67.        mov     dx, offset(K180)   ;print message
  68.        mov     ah, @prnstr
  69.        int     21H
  70.        mov     al, 02H            ;and set errorlevel
  71.        jmps    seterr
  72.  
  73. c2     cmp     dx, 013BH          ;320K
  74.        jne     c3
  75.        mov     dx, offset(K320)   ;print message
  76.        mov     ah, @prnstr
  77.        int     21H
  78.        mov     al, 03H            ;and set errorlevel
  79.        jmps    seterr
  80.  
  81. c3     cmp     dx, 0139H          ;160K
  82.        jne     unkwn
  83.        mov     dx, offset(K160)   ;print message
  84.        mov     ah, @prnstr
  85.        int     21H
  86.        mov     al, 01H            ;and set errorlevel
  87.        jmps    seterr
  88.  
  89. unkwn  mov     dx, offset(K?)     ;print message
  90.        mov     ah, @prnstr
  91.        int     21H
  92.        mov     al, 00H            ;and set errorlevel
  93.  
  94. seterr mov     ah, @exit          ;set errorlevel
  95.        int     21H                ;and exit
  96.  
  97.  
  98. exit   int     20H                ;abnormal exit for errors
  99.        endp
  100. ;====================
  101. ; Messages
  102. ;====================
  103. K360   db cr lf '360K disk' cr lf cr lf '$'
  104. K180   db cr lf '180K disk' cr lf cr lf '$'
  105. K320   db cr lf '320K disk' cr lf cr lf '$'
  106. K160   db cr lf '160K disk' cr lf cr lf '$'
  107. K?     db cr lf beep 'Unrecognized disk format' cr lf cr lf '$'
  108.  
  109. baddrv db cr lf beep 'Invalid drive specifier!' cr lf '$'
  110. baddos db cr lf beep 'This utility only works under DOS 2.0!' cr lf '$'
  111.