amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > process -> Result2 ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

09.09.2002, 12:10 Uhr

tokai
Posts: 1071
Nutzer
Wie kann man als Nutzer mitbekommen, ob in der Processstruktur bei Programbeendigung der Result2-Wert gesetzt wurde? Oder bringt das eigentlich überhaupt nichts?

CodeSchnippsel zur Verdeutlichung:
code:
long __saveds main(void)
{
    LONG rc = RETURN_OK;
    
    SysBase = *(struct ExecBase **)4;

    if ( DOSBase = (struct DosLibrary *)OpenLibrary("dos.library",40L) )
    {
         /* normal code here */
         
         CloseLibrary((strcut Library *)DOSBase);     
    }
    else
    {
         /* das hier meine ich, kann sein dass der Fehlercode anders heisst, kann aber gerade nicht nachschauen. :)  */
         ((struct Process *)FindTask(NULL))->pr_Result2 = INVALID_RESIDENT_LIBRARY;
    }
 
    return rc;
}


--
http://www.christianrosentreter.de

[ Dieser Beitrag wurde von tokai am 09.09.2002 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

09.09.2002, 12:35 Uhr

tokai
Posts: 1071
Nutzer

da fällt mir ein, dass es auf der Developer CD 1.2 gar keine Amigaguide RKRM zur dos.library gibt. Sind diese eigentlich auf der 2.1er-Version vorhanden?
--
http://www.christianrosentreter.de

http://www.taniquetil.de

[ - Antworten - Zitieren - Direktlink - ]

09.09.2002, 14:11 Uhr

gni
Posts: 1106
Nutzer
Zitat:
tokai:
Wie kann man als Nutzer mitbekommen, ob in der Processstruktur bei Programbeendigung der Result2-Wert gesetzt wurde?


Wenn die Shell meckert, das RC nicht Null ist, kannst Du per set
Dir Result2 ansehen (wenn das Programm ihn setzt). Anschliessend verrät Dir fault, was das für ein Fehler ist. Wenn RC=0 ist, dann hat pr_Result2 keine Bedeutung.
Für den Programmierer: IoErr() liefert Result2, mittels SetIoErr()
setzt man das Feld. Selber schreiben ist tabu.

[ - Antworten - Zitieren - Direktlink - ]

09.09.2002, 15:03 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von gni:
Zitat:
tokai:
Wie kann man als Nutzer mitbekommen, ob in der Processstruktur bei Programbeendigung der Result2-Wert gesetzt wurde?

Wenn die Shell meckert, das RC nicht Null ist, kannst Du per set
Dir Result2 ansehen (wenn das Programm ihn setzt). Anschliessend verrät Dir fault, was das für ein Fehler ist. Wenn RC=0 ist, dann hat pr_Result2 keine Bedeutung.


schon das erste Übel im Codeschnippsel gefunden. RC bleibt da nämlich 0. :)

Zitat:
Für den Programmierer: IoErr() liefert Result2, mittels SetIoErr()
setzt man das Feld. Selber schreiben ist tabu.


stimmt schon. Aber dummerweise ist die dos.library zu diesem Zeitpunkt noch gar nicht geöffnet, d.h. kann ich keine Funktion der dos.library aufrufen. Es geht ja eigentlich darum, eine Fehlermeldung zu erzeugen, wenn die DOS-Library (in der richtigen Version) nicht geöffnet werden konnte. Eine normale Fehlerausgabe geht auch nicht, weil die "print"-funktionen sind auch nur über dos.library calls verfügbar.

Argh... ich will den User doch nicht dumm sterben lassen, wenn das Tool bei ihm den Dienst versagt. Gibt's da eine andere Möglichkeit als die im obigem Beispiel? Oder ist eine solche Fehlerausgabe generell wenig von Nutzen und ein RC mit RETURN_FAIL tut's auch?



--
http://www.christianrosentreter.de

[ - Antworten - Zitieren - Direktlink - ]

09.09.2002, 20:01 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von tokai:
Argh... ich will den User doch nicht dumm sterben lassen, wenn das Tool bei ihm den Dienst versagt. Gibt's da eine andere Möglichkeit als die im obigem Beispiel? Oder ist eine solche Fehlerausgabe generell wenig von Nutzen und ein RC mit RETURN_FAIL tut's auch?

Weder noch.
Du musst Result2 setzen UND RETURN_FAIL zurueckgegeben. Solange Du 0 (RETURN_OK) zurueckgibst, wird Result2 auch nicht ausgewertet.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

11.09.2002, 11:12 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von Holger:
Zitat:
Original von tokai:
Argh... ich will den User doch nicht dumm sterben lassen, wenn das Tool bei ihm den Dienst versagt. Gibt's da eine andere Möglichkeit als die im obigem Beispiel? Oder ist eine solche Fehlerausgabe generell wenig von Nutzen und ein RC mit RETURN_FAIL tut's auch?

Weder noch.
Du musst Result2 setzen UND RETURN_FAIL zurueckgegeben. Solange Du 0 (RETURN_OK) zurueckgibst, wird Result2 auch nicht ausgewertet.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.



ja, das hatte ich im beipspiel vergessen. Ist aber in meinen Originalquelltexten vorhanden.

Schade nur, dass wen man das Programm ausführt und mit Absicht einen Fehler produziert (öffnen einer dos.library >50 oder so :) ), es sich stillschweigend beendet. Nur über "set" bekommt man dann den Fehlercode übermittelt. Der normale User kriegt somit nicht raus, weshalb das Programm nicht startet. Aber da lässt sich wohl nicht viel machen... :)


Und noch eine Frage: welchen CODE muss ich mit SetIoErr() setzten wenn das Öffnen einer autocon fehlschlägt, in den dos.library includes findet sich da kein passender Fehlercode... aber irgendwie erscheint mir die ErrCode-Liste auch unvollständig. Selbst der SAS/C startupcode nimmt da keine Rücksicht, d.h. es wird keine Fehlermeldung asugeben, wenn die CON: nicht geöffnet werden konnte.

Baut man denn keine ordentliche Fehlerroutine ein, wenn solche default-Dinge fehlschlagen? Solche Fehler treten zwar nur theoretisch auf (in absoluten Extremfällen, z.B. absolut kein Speicher mehr frei o.ä.).... wobei: wenn das öffnen der CON: für die Fehlerausgabe fehlschlägt... dann ist der Rechner eh' schon kurz vorm unfreiwilligem Reboot, oder? :)

--
http://www.christianrosentreter.de

[ - Antworten - Zitieren - Direktlink - ]

11.09.2002, 11:47 Uhr

thomas
Posts: 7717
Nutzer
Zitat:
Der normale User kriegt somit nicht raus, weshalb das Programm nicht startet. Aber da lässt sich wohl nicht viel machen...

Gib doch einfach mal Why ein. Ich staune daß du das nicht kennst, denn das ist das tollste was es gibt, schon seit OS1.2. Wenn die Fehlermeldung rausgescrollt ist, oder keine Fehlermeldung oder nur ein Return-Code ausgegeben wird, einfach Why fragen und schon kommt die Antwort.

Gruß Thomas



--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

11.09.2002, 12:07 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von thomas:
Zitat:
Der normale User kriegt somit nicht raus, weshalb das Programm nicht startet. Aber da lässt sich wohl nicht viel machen...

Gib doch einfach mal Why ein. Ich staune daß du das nicht kennst, denn das ist das tollste was es gibt, schon seit OS1.2. Wenn die Fehlermeldung rausgescrollt ist, oder keine Fehlermeldung oder nur ein Return-Code ausgegeben wird, einfach Why fragen und schon kommt die Antwort.


:)


Hmmm.... aber nicht jeder ist ein Programmierer oder Shellfreak, der alles was da so an Tools existiert auch kennt. Es gibt da auch die "Normalos", wenn bei denen etwas nicht läuft und es kommt keine Rückinformation... naja, dann ist so ein Tool für die Leute Geschichte (d.h. -> Trashcan :) Und man darf auch nicht davon ausgehen, dass zuerst die Anleitung gelesen wird, man kennt das ja von sich selbst: Doppelklick auf irgendein Programm -> Absturz oder Fehler -> Trashcan (nicht immer, Ausnahmen bestätigen die Regel) :)




--
http://www.christianrosentreter.de

[ - Antworten - Zitieren - Direktlink - ]

11.09.2002, 12:54 Uhr

thomas
Posts: 7717
Nutzer

Dann mußt du es halt so machen, daß kein Fehler auftreten kann, sprich die dos.library mit Version 0 öffnen und anschließend die Version aus der Library-Struktur prüfen und ggf. eine Fehlermeldung ausgeben. Das gleiche mit der intuition.library und einem Fehler-Requester (falls du von der Workbench aus aufgerufen wurdest). Eine andere Fehlerursache kann es bei DOS und Intuition nicht geben, denn sie sind immer bereits im Speicher wenn irgendein Programm gestartet wird.

Entwickle doch mal ein bißchen Phantasie. Programmieren ist ein kreativer Prozeß.

Außerdem landet ein Programm mit der Fehlermeldung "benötige OS3.1 oder besser" genauso schnell im Abfall. Oder zu so seltsamen Anfragen wie "Ich brauche für ein Programm die dos.library V40, wo bekomme ich die her ? Im Aminet finde ich nichts."

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

11.09.2002, 14:53 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von thomas:

Dann mußt du es halt so machen, daß kein Fehler auftreten kann, sprich die dos.library mit Version 0 öffnen und anschließend die Version aus der Library-Struktur prüfen und ggf. eine Fehlermeldung ausgeben.


Das ist doch mal eine gute Idee! :)

Hätte von mir sein müssen! *rgh* :D

Zitat:
Entwickle doch mal ein bißchen Phantasie. Programmieren ist ein kreativer Prozeß.

huh?! Phantasie habe ich genug, nur muss ich auch sicherstellen, dass danach auch alles so funktioniert wie's funktionieren soll. Und eine kleine Frage hier im Forum schadet da nichts. Schlieslich ist es ja nichts schlechtes von den Erfahrungen anderer zu profitieren! Ganz im Gegenteil... da gibt's Tipps, Tricks und Kniffe auf die man so manchmal nicht kommt. Naja, oft rennt man aber auch nur mit einem "Brett vor der Rübe" umher... :)

Zitat:
Außerdem landet ein Programm mit der Fehlermeldung "benötige OS3.1 oder besser" genauso schnell im Abfall. Oder zu so seltsamen Anfragen wie "Ich brauche für ein Programm die dos.library V40, wo bekomme ich die her ? Im Aminet finde ich nichts."

naja 3.0 wird als minimum vorrausgesetzt werden müssen.... aber dafür kann ich nichts. :)



--
http://www.christianrosentreter.de (ganz frisch und überarbeitet :P )

[ - Antworten - Zitieren - Direktlink - ]

11.09.2002, 20:18 Uhr

Holger
Posts: 8116
Nutzer
Tja, manchmal muß man eine deutliche Trennung zwischen dem Code für den Normal- und den Fehlerfall machen. Wenn man nicht mal dos oder intuition öffnen kann, hat man natürlich verloren. Dann kann man eben nur noch pr_Result2 setzen und RETURN_FAIL zurückgeben. Die andere Frage ist, ob man sich wirklich mit der deutlich komplizierteren Programmierung für ältere OS-Versionen auseinandersetzen will (wenn es PrintFault() oder EasyRequest() nicht gibt).
Aber es gibt ja noch exec/Alert()...

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

13.09.2002, 09:59 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von Holger:
Tja, manchmal muß man eine deutliche Trennung zwischen dem Code für den Normal- und den Fehlerfall machen. Wenn man nicht mal dos oder intuition öffnen kann, hat man natürlich verloren. Dann kann man eben nur noch pr_Result2 setzen und RETURN_FAIL zurückgeben.


Das stimmt. :)

Hätte ich ein kleines bischen weitergedacht, hätte ich mir die Fragerei ersparen können:

Das Beispiel öffnet jetzt dos.library version 0, und gleich danach kommt die Initialisierungsfunktion für die ganzen anderen Libraries, dort wird u.a. auch die intuition.library und die graphics.library geöffnet, spätestens dann lässt sich das Programm bei falscher OS-Verison sauber mit Fehlermeldung (dos.library ist ja da) beenden.

Ha... manchmal liegt die Lösung so nah! :)

--
http://www.christianrosentreter.de (ganz frisch und überarbeitet :P )

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > process -> Result2 ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.