Contributor: ANDREW EIGUS { > What I need is a routine that will give back the letters of the active > drives on a system. Can anyone help me. } Program ListAvailableDrives; (* Public Domain, (c) 1994 by Andrew Eigus Fidonet: 2:5100/33 } These routines are taken from my EnhDOS unit where are lot of useful stuff. MATERIAL RELEASED FOR SWAG *) const { GetDriveType return values } dtError = $00; { Bad drive } dtFixed = $01; { Fixed drive } dtRemovable = $02; { Removable (floppy) drive } dtRemote = $03; { Remote (network) drive } dtCDROM = $04; { CD-ROM V2.00+ drive } dtDblSpace = $05; { DoubleSpace compressed drive } Function GetDriveType(Drive : byte) : byte; assembler; { 0=current (default) drive,1=A,2=B,3=C... } Asm cmp Drive,0 jne @@1 mov ah,19h int 21h mov Drive,al inc Drive @@1: mov ax,1500h xor bx,bx int 2Fh or bx,0 { works with CD-ROM v2.00+ } jz @@2 mov ax,150Bh xor ch,ch mov cl,Drive int 2Fh cmp bx,0ADADh jne @@2 or ax,0 jz @@2 mov bl,dtCDROM jmp @@7 @@2: mov ax,4A11h mov bx,1 mov dl,Drive dec dl int 2Fh xor cl,cl { mov cl,False } or ax,0 { is DoubleSpace loaded? } jnz @@3 cmp dl,bl { if a host drive equal to compressed, then get out... } je @@3 test bl,10000000b { bit 7=1: DL=compressed,BL=host =0: DL=host,BL=compressed } jz @@3 { so avoid host drives, assume host=fixed :) } inc dl cmp Drive,dl jne @@3 mov bl,dtDblSpace jmp @@7 @@3: mov ax,4409h mov bl,Drive int 21h jc @@5 or al,False jz @@4 mov bl,dtRemote jmp @@7 @@4: mov ax,4408h mov bl,Drive int 21h jc @@5 or al,False jz @@6 mov bl,dtFixed jmp @@7 @@5: xor bl,bl { mov bl,dtError cuz dtError=0 } jmp @@7 @@6: mov bl,dtRemovable @@7: mov al,bl End; { GetDriveType } var Drive : byte; DriveType : byte; Begin WriteLn(#13#10'Drives available:'); WriteLn('-----------------------------'); for Drive := (Ord('A') - Ord('A') + 1) to (Ord('Z') - Ord('A') + 1) do begin DriveType := GetDriveType(Drive); if DriveType <> dtError then begin Write('Drive ', Chr(Drive + Ord('A') - 1), ': '); case DriveType of dtRemovable: WriteLn('Removable (floppy)'); dtFixed: WriteLn('Fixed (hard disk)'); dtRemote: WriteLn('Remote (network)'); dtCDROM: WriteLn('CD-ROM'); dtDblSpace: WriteLn('DoubleSpace') end end end; WriteLn('-----------------------------') End.