home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
chasm2.zip
/
DSIZE.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-02-04
|
5KB
|
149 lines
;===============================================
; PROGRAM DSIZE Version 1.00 by Dave Whitman
;
; Syntax: DSIZE [d:]
;
; Examines the disk in the specified drive
; and sets ERRORLEVEL as follows:
;
; 0 = unknown format
; 1 = single sided, 8 sectors (160K)
; 2 = single sided, 9 sectors (180K)
; 3 = double sided, 8 sectors (320K)
; 4 = double sided, 9 sectors (360K)
;
; DSIZE will only run under DOS 2.0
;
; This source file is in CHASM assembler syntax.
;===============================================
;===============
; Equates
;===============
@getver equ 30H ;get DOS version number
@getfsp equ 36H ;get disk free space
@prnstr equ 09H ;print string to console
@exit equ 4CH ;exit and set ERRORLEVEL
cr equ 0DH ;carriage return
lf equ 0AH ;linefeed
beep equ 07H ;bell
param_count equ [80H]
param_area equ [81H]
drv1 equ [5CH] ;drive number in 1st fcb
dsize proc far
cmp al, 0FFH ;is the drivespec valid?
jne chkver ;yes, continue
mov dx, offset(baddrv) ;no, bitch
mov ah, @prnstr ;print message
int 21H ;with dos call
jmp exit ;and quit
chkver mov ah,@getver ;what DOS are we under?
int 21H ;ask DOS.
cmp al,00 ;earlier than 2.0?
jne param ;no, continue
mov dx, offset(baddos) ;yes, bitch
mov ah, @prnstr ;print message
int 21H ;with dos call
jmps exit ;and quit
param xor ch, ch ;cx <== number of parameter chars
mov cl, param_count
cmp cl, 00H ;any parameters?
je chkdsk ;skip if none
mov di, offset(param_area) ;scan parameter area for help request
mov al, '?' ;marked with ?
repnz ;scan till match or end
scasb
jnz chkdsk ;no match? skip
mov ah, @prnstr ;otherwise print help
mov dx, offset(help)
int 21H
int 20H ;and exit
chkdsk mov dl, drv1 ;get drive number
mov ah, @getfsp ;ask for disk info
int 21H ;with dos call
cmp dx, 0162H ;360K
jne c1
mov dx, offset(K360) ;print message
mov ah, @prnstr
int 21H
mov al, 04H ;and set errorlevel
jmps seterr
c1 cmp dx, 015FH ;180K
jne c2
mov dx, offset(K180) ;print message
mov ah, @prnstr
int 21H
mov al, 02H ;and set errorlevel
jmps seterr
c2 cmp dx, 013BH ;320K
jne c3
mov dx, offset(K320) ;print message
mov ah, @prnstr
int 21H
mov al, 03H ;and set errorlevel
jmps seterr
c3 cmp dx, 0139H ;160K
jne unkwn
mov dx, offset(K160) ;print message
mov ah, @prnstr
int 21H
mov al, 01H ;and set errorlevel
jmps seterr
unkwn mov dx, offset(K?) ;print message
mov ah, @prnstr
int 21H
mov al, 00H ;and set errorlevel
seterr mov ah, @exit ;set errorlevel
int 21H ;and exit
exit int 20H ;abnormal exit for errors
endp
;====================
; Messages
;====================
K360 db cr lf '360K disk' cr lf cr lf '$'
K180 db cr lf '180K disk' cr lf cr lf '$'
K320 db cr lf '320K disk' cr lf cr lf '$'
K160 db cr lf '160K disk' cr lf cr lf '$'
K? db cr lf 'Unrecognized disk format' cr lf cr lf '$'
baddrv db cr lf beep 'Invalid drive specifier!' cr lf '$'
baddos db cr lf beep 'This utility only works under DOS 2.0!' cr lf '$'
help db cr lf
db 'DSIZE version 1.0 by D. Whitman' cr lf
db cr lf
db 'Examines the disk in the specified drive' cr lf
db 'and determines its format.' cr lf
db cr lf
db 'Syntax:' cr lf
db cr lf
db ' DSIZE [?] [d:]' cr lf
db cr lf
db ' Option:' cr lf
db ' ? = Print this help message' cr lf
db cr lf
db 'A printed summary is produced, and ERRORLEVEL is set as follows:'
db cr lf cr lf
db ' 0 = unknown format' cr lf
db ' 1 = single sided, 8 sector (160K)' cr lf
db ' 2 = single sided, 9 sector (180K)' cr lf
db ' 3 = double sided, 8 sector (320K)' cr lf
db ' 4 = double sided, 9 sector (360K)' cr lf
db '$'