home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / chasm2.zip / DSIZE.ASM < prev    next >
Assembly Source File  |  1986-02-04  |  5KB  |  149 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. param_count    equ     [80H]
  33. param_area     equ     [81H]
  34.  
  35. drv1   equ     [5CH]           ;drive number in 1st fcb
  36.  
  37. dsize  proc    far
  38.  
  39.        cmp     al, 0FFH           ;is the drivespec valid?
  40.        jne     chkver             ;yes, continue
  41.        mov     dx, offset(baddrv) ;no, bitch
  42.        mov     ah, @prnstr        ;print message
  43.        int     21H                ;with dos call
  44.        jmp     exit               ;and quit
  45.  
  46. chkver mov     ah,@getver         ;what DOS are we under?
  47.        int     21H                ;ask DOS.
  48.  
  49.        cmp     al,00              ;earlier than 2.0?
  50.        jne     param              ;no, continue
  51.        mov     dx, offset(baddos) ;yes, bitch
  52.        mov     ah, @prnstr        ;print message
  53.        int     21H                ;with dos call
  54.        jmps    exit               ;and quit
  55.  
  56. param  xor     ch, ch             ;cx <== number of parameter chars
  57.        mov     cl, param_count
  58.        cmp     cl, 00H            ;any parameters?
  59.        je      chkdsk             ;skip if none
  60.        mov     di, offset(param_area) ;scan parameter area for help request
  61.        mov     al, '?'            ;marked with ?
  62.        repnz                      ;scan till match or end
  63.        scasb
  64.        jnz     chkdsk             ;no match? skip
  65.        mov     ah, @prnstr        ;otherwise print help
  66.        mov     dx, offset(help)
  67.        int     21H
  68.        int     20H                ;and exit
  69.  
  70. chkdsk mov     dl, drv1           ;get drive number
  71.        mov     ah, @getfsp        ;ask for disk info
  72.        int     21H                ;with dos call
  73.  
  74.        cmp     dx, 0162H          ;360K
  75.        jne     c1
  76.        mov     dx, offset(K360)   ;print message
  77.        mov     ah, @prnstr
  78.        int     21H
  79.        mov     al, 04H            ;and set errorlevel
  80.        jmps    seterr
  81.  
  82. c1     cmp     dx, 015FH          ;180K
  83.        jne     c2
  84.        mov     dx, offset(K180)   ;print message
  85.        mov     ah, @prnstr
  86.        int     21H
  87.        mov     al, 02H            ;and set errorlevel
  88.        jmps    seterr
  89.  
  90. c2     cmp     dx, 013BH          ;320K
  91.        jne     c3
  92.        mov     dx, offset(K320)   ;print message
  93.        mov     ah, @prnstr
  94.        int     21H
  95.        mov     al, 03H            ;and set errorlevel
  96.        jmps    seterr
  97.  
  98. c3     cmp     dx, 0139H          ;160K
  99.        jne     unkwn
  100.        mov     dx, offset(K160)   ;print message
  101.        mov     ah, @prnstr
  102.        int     21H
  103.        mov     al, 01H            ;and set errorlevel
  104.        jmps    seterr
  105.  
  106. unkwn  mov     dx, offset(K?)     ;print message
  107.        mov     ah, @prnstr
  108.        int     21H
  109.        mov     al, 00H            ;and set errorlevel
  110.  
  111. seterr mov     ah, @exit          ;set errorlevel
  112.        int     21H                ;and exit
  113.  
  114.  
  115. exit   int     20H                ;abnormal exit for errors
  116.        endp
  117. ;====================
  118. ; Messages
  119. ;====================
  120. K360   db cr lf '360K disk' cr lf cr lf '$'
  121. K180   db cr lf '180K disk' cr lf cr lf '$'
  122. K320   db cr lf '320K disk' cr lf cr lf '$'
  123. K160   db cr lf '160K disk' cr lf cr lf '$'
  124. K?     db cr lf 'Unrecognized disk format' cr lf cr lf '$'
  125.  
  126. baddrv db cr lf beep 'Invalid drive specifier!' cr lf '$'
  127. baddos db cr lf beep 'This utility only works under DOS 2.0!' cr lf '$'
  128. help   db cr lf
  129.        db 'DSIZE version 1.0 by D. Whitman' cr lf
  130.        db  cr lf
  131.        db 'Examines the disk in the specified drive' cr lf
  132.        db 'and determines its format.' cr lf
  133.        db  cr lf
  134.        db 'Syntax:' cr lf
  135.        db  cr lf
  136.        db '   DSIZE [?] [d:]' cr lf
  137.        db cr lf
  138.        db '   Option:' cr lf
  139.        db '       ? = Print this help message' cr lf
  140.        db cr lf
  141.        db 'A printed summary is produced, and ERRORLEVEL is set as follows:'
  142.        db  cr lf cr lf
  143.        db '    0 = unknown format' cr lf
  144.        db '    1 = single sided, 8 sector (160K)' cr lf
  145.        db '    2 = single sided, 9 sector (180K)' cr lf
  146.        db '    3 = double sided, 8 sector (320K)' cr lf
  147.        db '    4 = double sided, 9 sector (360K)' cr lf
  148.        db '$'
  149.