www.beck-ipc.com
www.beck-ipc.comwww.beck-ipc.com  | ImprintImprint
FAQFAQ  | SearchSearch  |
RegisterRegister   |LoginLogin

setdisk

Questions and discussions about the operating system RTOS-LNX and the corresponding C-LIB.

setdisk

Postby Thomas Rebhan » 08.02.2018, 17:22

Hallo,

die Funktion setdisk wechselt bei mir nicht das Laufwerk und liefert immer den Wert 4 zurück.
Der Rückgabewert ist auch unterschiedlich dokumentiert:
dir.h: current drive
API-Doku: total number of drives

Ab wann sind die Funktionen _dos_getfileattr/_dos_setfileattr verfügbar?

mfg
Thomas Rebhan
SC145, RTOS1.19

Re: setdisk

Postby Andre Pribil » 09.02.2018, 10:40

Hallo Herr Rebhan,

das setdisk() grundsätzlich nicht funktioniert, kann ich so bisher nicht bestätigen.
In einem kurzen Testprogramm war die Funktion soweit erfolgreich. Wie verwenden Sie die Funktion genau?

Die setdisk() Funktion ist so definiert, dass sie die Anzahl der verfügbaren Laufwerke zurückliefert.
Dies ist meiner Meinung nach sowohl in der API Doku, als auch in dir.h so dokumentiert. (Da die API Doku aus den Doxygen-Komentaren der dir.h gebaut wird, muss das eigentlich auch gleich sein.)

Es stimmt das die setdisk() Funktion momentan immer statisch den Wert 4 zurückliefert und nicht schaut wieviele Laufwerke tatsächlich verfügbar sind. Dies wird mit einer der nächsten Versionen korrigiert werden.

Die Funktionen _dos_getfileattr/_dos_setfileattr sind bisher nicht geplant gewesen.
Für welchen Zweck brauchen Sie diese Funktionen?

MfG,
André Pribil
Software Development
Beck IPC GmbH

Re: setdisk

Postby Thomas Rebhan » 09.02.2018, 11:30

Hallo Herr Pribil,

nachfolgend mein Testprogramm zu setdisk.
Beim SC143 funktioniert der Laufwerkswechsel. Der Rückgabewert ist aber beim SC143 auch immer gleich (Wert 5)!?
Bei einem falschen Parameter ist der Rückgabewert 255!?

Die Beschreibung des Rückgabewertes stimmt mit der API-Doku überein. In dir.h bin ich in die Beschreibung von getdisk gerutscht.

Mit den Funktionen _dos_getfileattr/_dos_setfileattr möchte ich eine Datei verarbeiten, wenn diese von aussen verändert wurde (Configfile). Hierzu prüfe ich das Archiv-Attribut.

Code: Select all
int main(int argc, char *argv[] ) {
    int d;
    char txt[100];

    if (argc > 1) {
     d=atoi(argv[1]);
     printf ("\nnewdrive=%d",d);
     printf ("\nSetdisk: %d", setdisk (d));
     printf("\nPath:%s",getcwd(txt, 100));
     BIOS_Execute ("dir");
    }
return 1;
}



mfg
Thomas Rebhan

Re: setdisk

Postby Andre Pribil » 09.02.2018, 12:49

Hallo Herr Rebhan,

danke. Es scheint so zu sein, als ob das Verzeichnis initial nach einem Laufwerkswechsel nicht korrekt gesetzt ist.
Als Workaround können Sie mit chdir("\\"); das Verzeichnis setzen, nachdem das Laufwerk gewechselt wurde. Dann sollte es gehen.

Das setdisk() einen festen Wert liefert, scheint doch korrekt zu sein. Die Funktion geht auf den INT21h, 0xE SW-Interrupt zurück. Und dieser SW-Interrupt ist so definiert das er die Anzahl logischer Laufwerke zurückliefert, wobei nicht garantiert wird, dass alle logischen Laufwerke gültige Laufwerksangaben sind.

Da wir kein echtes DOS Filesystem mehr verwenden, könnte das mit dem Archiv-Attribut schwierig werden.
Ich muss es mir aber noch näher anschauen.

MfG,
André Pribil
Software Development
Beck IPC GmbH

Return to RTOS-LNX


Who is online

Users browsing this forum: No registered users and 0 guests


cron