SuperIlu
Berlin, Germany, 07.07.2023, 21:14 |
Detect the available drives on DOS (Developers) |
Hi,
I face an interesting problem for a file selection dialog I want to create:
How do I detect which drive letters are actually available/used in DOS (using either DJGPP or a DOS/BIOS INT)?
I guess it is always safe to assume A, B and C are there?
What happens when no secondary disk drive is installed?
I found _dos_setdrive() in DJGPP and INT21 0Eh, but I'm not sure what happens when I _set_drive() with a non existing drive?
Also the return value is "the highest drive present", so that won't help me with gaps (e.g. A present, B isn't, C is, D-W are not and X is a mapped network drive).
Also, there is the 'undocumented' INT21 32h. Would that work for network-drives as well?
What would be the best practice to only find available drives (like e.g. DosZip file commander does)?
cheers
Ilu --- Javascript on MS-DOS? Try DOjS https://github.com/SuperIlu/DOjS
Fediverse: @dec_hl@mastodon.social |
CandyMan
07.07.2023, 21:41
@ SuperIlu
|
Detect the available drives on DOS |
You set the default disk (function 0Eh) and then check if the default is the one you set (function 19h).
function DriveValid(Drive:Char):Boolean;
assembler;asm
MOV CL,Drive
MOV AH,$19
INT $21
MOV BL,AL
MOV DL,CL
SUB DL,'A'
MOV AH,$0E
INT $21
MOV AH,$19
INT $21
XOR CL,CL
CMP AL,DL
JNE @@1
MOV CL,1
MOV DL,BL
MOV AH,$0E
INT $21
@@1: XCHG EAX,ECX
end;
--------D-2119-------------------------------
INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
AH = 19h
Return: AL = drive (00h = A:, 01h = B:, etc)
Note: Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
from a particular location every time it starts a command to
determine when to issue an automatic EOJ
--------D-210E-------------------------------
INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
AH = 0Eh
DL = new default drive (00h = A:, 01h = B:, etc)
Return: AL = number of potentially valid drive letters
Notes: under Novell NetWare, the return value is always 32, the number of
drives that NetWare supports
under DOS 3.0+, the return value is the greatest of 5, the value of
LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
may be accessed as either A: or B:
otherwise, the return value is the highest drive actually present
DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
and 3+ a maximum of 26 drives
under Novell DOS 7, this function returns the correct LASTDRIVE value
even when the undocumented LASTDRIVE=27..32 directive was used in
CONFIG.SYS
"parse FCB" (see AH=29h) can be used to determine whether a drive
letter is valid
|
ecm
Düsseldorf, Germany, 07.07.2023, 22:02
@ SuperIlu
|
Detect the available drives on DOS |
> Also, there is the 'undocumented' INT21 32h. Would that work for
> network-drives as well?
No, definitely not, as this function deals in DPBs which redirector drives do not have. Refer to the interrupt list: http://fd.lod.bz/rbil/interrup/dos_kernel/2132.html#2763 --- l |
SuperIlu
Berlin, Germany, 07.07.2023, 23:04
@ CandyMan
|
Detect the available drives on DOS |
> You set the default disk (function 0Eh) and then check if the default is
> the one you set (function 19h).
Thanks, that sounds like a plan! This does not trigger a disk access, right? So it would work even when there is no disk in A or B? --- Javascript on MS-DOS? Try DOjS https://github.com/SuperIlu/DOjS
Fediverse: @dec_hl@mastodon.social |
Rugxulo
Usono, 08.07.2023, 07:56
@ SuperIlu
|
Detect the available drives on DOS |
Does this help?
Detecting floppy disk drives |
Laaca
Czech republic, 08.07.2023, 10:36
@ SuperIlu
|
Detect the available drives on DOS |
> Thanks, that sounds like a plan! This does not trigger a disk access,
> right? So it would work even when there is no disk in A or B?
I can confirm that this method (func 0Eh and func 19h) works nice and I also use it in my programs.
It does not trigger the disk access.
What can be chalanging is the detection of the fantom drives (I HATE this feature and I am disappointed that FreeDOS kernel maintainers refused my proposal to add the switch to remove this "feature") --- DOS-u-akbar! |
SuperIlu
Berlin, Germany, 09.07.2023, 00:11
@ Laaca
|
Detect the available drives on DOS |
> I can confirm that this method (func 0Eh and func 19h) works nice and I
> also use it in my programs.
Yeah, thanks. As far as I can tell for now it is working... --- Javascript on MS-DOS? Try DOjS https://github.com/SuperIlu/DOjS
Fediverse: @dec_hl@mastodon.social |
marcov
09.07.2023, 23:18
@ SuperIlu
|
Detect the available drives on DOS |
> Hi,
>
> I face an interesting problem for a file selection dialog I want to
> create:
> How do I detect which drive letters are actually available/used in DOS
> (using either DJGPP or a DOS/BIOS INT)?
Do it as little as possible (e.g. only in a setup program). People with DVD/CD changers will thank you. |
SuperIlu
Berlin, Germany, 10.07.2023, 18:15
@ marcov
|
Detect the available drives on DOS |
> Do it as little as possible (e.g. only in a setup program). People with
> DVD/CD changers will thank you.
LOL, it is done once at program start --- Javascript on MS-DOS? Try DOjS https://github.com/SuperIlu/DOjS
Fediverse: @dec_hl@mastodon.social |