Software > Coding

Feststellen, ob eine Diskette im Laufwerk ist

(1/1)

Count:
Hallo zusammen,

wie kann ich feststellen, ob eine Diskette im Laufwerk eingelegt ist und so die Alertbox "Laufwerk A: antwortet nicht..." umgehen?

Mupfel antwortet auf "ls a:" zum Beispiel mit "a: existiert nicht (oder ist blockiert)". COMMAND.PRG von Oliver Scholz meldet "Drive A: does not respond!".

Gruß
Oliver

mfro:
[Original gelöscht wg. Blödsinn]

Es gibt keine GEMDOS-Funktion, mit der man feststellen könnte, ob eine Diskette im Laufwerk ist.

Das kriegst Du nur mit einem Leseversuch raus. Wenn Du dafür eine BIOS-Funktion nimmst, wird der GEMDOS Critical-Error Handler nicht ausgeführt, wenn der Leseversuch fehlschlägt.

Count:
Leider kommt die Alertbox auch bei BIOS-Aufrufen.
Ich habe es mit Getbpb() und Rwabs() probiert.

Stattdessen muss der Critical Error Handler auf eine eigene Routine, die nichts tut, verbogen werden:


--- Code: ---static void install_handlers();
static void critical_error_handler();
static void process_termination();

static void (*orig_critical_error_handler)() = NULL;
static void (*orig_process_termination)();

int main()
{
    install_handlers();

    ...
}

void
install_handlers()
{
    if (orig_critical_error_handler == NULL) {
        orig_process_termination    = Setexc((long)etv_term   / 4, process_termination);
        orig_critical_error_handler = Setexc((long)etv_critic / 4, critical_error_handler);
    }
}

void
critical_error_handler()
{
}

void
process_termination()
{
    if (orig_critical_error_handler != NULL) {
        (void)Setexc((long)etv_critic / 4, orig_critical_error_handler);
        (void)Setexc((long)etv_term   / 4, orig_process_termination);

        orig_critical_error_handler = NULL;

        orig_process_termination();
    }
}
--- Ende Code ---

mfro:
So kann man's natürlich auch machen. Bei Rwabs() hätte ich tatsächlich angenommen, dass der Critical Error Handler nicht anspringt (so kann man sich täuschen).

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln