Czy można jakoś programowo sprawdzić czy dyskietka jest w FDD?
Myślałem że taki kod da rade:
FILE* plik = fopen("a:\xxx", "w");
if(plik) to_jest_dyskietka;
ale jeżeli dyskietki nie ma to wyskakują dosowe komunikaty które wieszają mi program.
Czy można jakoś programowo sprawdzić czy dyskietka jest w FDD?
Myślałem że taki kod da rade:
FILE* plik = fopen("a:\xxx", "w");
if(plik) to_jest_dyskietka;
ale jeżeli dyskietki nie ma to wyskakują dosowe komunikaty które wieszają mi program.
#include <stdio.h>
int main(){
signed short rax; // 16 bit a czysty int nie zawsze musi miec :>
asm{
int 0x11
mov [rax],ax
}
if(rax==-1){
// Windows NT 4.0 i chyba nowsze zwraca ((signed)-1/0xffff)
// mialem nt 4 i nawet mile go wspominam, ale int 11h nie chcialo mi lazic :>
// to jest tylko zalozenie, jesli kom nie ma dyskietek, to nie mam zielonego
// pojecia jak to sprawdzic...
printf("konsola windowsa nt, zakladam, ze masz A:\n");
// pod nt flop jest zawsze A:, B: nie istnieje, jesli nie ma 2 stacji, a zmiana powoduje blad
// zmiana na nieistniejace ewentualnie A: tez zwroci blad, wiec mozna poprobowac z chdir
// btw to tylko dywagacje ;p
}else{
if(rax & 1){
// zapalony bit 0 swiadczy istnieniu systemie jakiejkolwiek stacji dyskietek
// linux + dosemu + freedos tu wchodzi nawet gdy nie ma zadnego flopa
// tez nie wiem, jak toto sprawdzic :>
if(!((rax>>6)& 3)){
// bity 6 i 7 to liczba stacji pomniejszona o 1 czyli dla zera w nich odpowiednio jedna
printf("odkryta stacja %c:\n",*((char far*)0x00400104L)+'A');
// *((char far*)0x00400104L) == *((char far*)MK_FP(0x0040,0x0104))
// pod adresem 0040:0104 (hex) jest zapisany numer stacji pod dosem
// odpowiednio 0 - A:, 1 - B: , ..., stad + 'A'
}else{
// tu sytuacja jasna, sa minimum 2 stacje/max 4, ale dos tylko 2 zamapuje : A: i B:
// reszty nie uzyje, wiec swobodnie mozna pisac:
printf("odkryto stacje dyskietek A: i B:\n");
}
}else{
printf("brak stacji dyskietek\n");
}
}
return 0;
}
Z tego co widze to ten kod sprawdza jakie FDD są podłączone do kompa. A ja chce sprawdzić tylko czy w mojej jedynej stacji dyskietek jest dyskietka czy tez jej nie ma.
Moze po prostu sprobuj cos odczytac: http://www.ctyme.com/intr/rb-0607.htm
Dzięki za help'a. Troche pokombinowałem i zamiast asemblerowych wstawek udało mi się to osiągnąć cel przy pomosy funkcji biosdisk.