ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > env verwaltung | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
02.07.2009, 14:29 Uhr AGSzabo Posts: 1663 Nutzer |
hi, ich brauche eure hilfe: ich will env / envarc in mein programm einbauen, finde aber in den docs keine befehle wie zb SetEnv() oder so. Also wie lese und schreibe ich env/envarc konfigurationen? also mit "use", "save" und "cancel. -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
02.07.2009, 17:32 Uhr ZeroG Posts: 1487 Nutzer |
@AGSzabo: Dann hast du nicht richtig gesucht. Guck mal in die dos.library Autodocs SetVar(), GetVar() usw. [ - Antworten - Zitieren - Direktlink - ] |
02.07.2009, 18:11 Uhr AGSzabo Posts: 1663 Nutzer |
@ZeroG: hij zero, jetzt bin ich schon schlauer. aber wie ist der name der variable zu verstehen? darf der ein verzeichnis voran haben und wird dieses verzeichnis falls nicht vorhanden von SetVar() erzeugt? -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
02.07.2009, 19:15 Uhr ZeroG Posts: 1487 Nutzer |
@AGSzabo: Soweit ich das noch weiß wird das Verzeichnis automatisch erzeugt, oder es gab zumindest eine möglichkeit SetVar() zu sagen das es das tun soll. Ist ne weile her... [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 05:46 Uhr AGSzabo Posts: 1663 Nutzer |
ok, wie unterscheide ich ob ich mit SetVar() nur in env: (use) oder auch in envarc: (save) speichern will? -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 08:05 Uhr tboeckel Posts: 124 Nutzer |
@AGSzabo: Wenn du die AutoDocs wirklich gelesen hast, dann solltest du das jetzt wissen. Ansonsten lies dir den gesamten Abschnitt zu SetVar() noch mal durch. Alternativ darf man auch einen Blick in die Includes werfen. Macht garantiert nicht blind! [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 08:19 Uhr AGSzabo Posts: 1663 Nutzer |
@tboeckel: ok, ich habs gefunden. in dos/var.i: BITDEF GV,SAVE_VAR,12 ; only with GVF_GLOBAL_VAR um in envarc zu schreiben. GetVar() geht aber nur von ENV: -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 03.07.2009 um 08:20 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 08:34 Uhr Thore Posts: 2266 Nutzer |
> GetVar() geht aber nur von ENV: Was auch richtig ist. Alles andere macht nicht soviel Sinn. Wenn Du eine Einstellung temporär anwenden willst, speicherst Du nach ENV: und wenn Du sie speichern willst zusätzlich nach ENVARC: Nur die, die in ENV: stehen werden auch benutzt. Es macht kein Sinn, eine Datei nur nach ENVARC: zu speichern, in ENV: aber einen anderen Wert zu haben. Denn bei einem Reboot werden die Werte aus ENVARC: nach ENV: kopiert. Daher ist es schon sinnvoll, daß GetVar nur aus ENV: liest. (Sorry wenn das verwirrend geschrieben ist *g*) [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 12:07 Uhr Holger Posts: 8116 Nutzer |
Es gibt nur eine Ausnahme, die nicht abgedeckt ist: will man eine aktuelle, transiente Einstellung durch den persistenten Wert ersetzen, so wie die Voreinsteller es beim Menüpunkt "Auf zuletzt gespeichertes Zurücksetzen" tun, muss man selbst die Datei(en) von ENVARC: nach ENV: kopieren. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 12:40 Uhr tboeckel Posts: 124 Nutzer |
Zitat: Nicht ganz. Man kann die Variable in ENV: erst mit DeleteVar() löschen und dann mit GetVar() alles neu lesen. Wer ohnehin schon auf etwas vorher gespeichertes zurücksetzen möchte, den kümmert auch der Verlust der aktuellen Variable nicht. Außerdem darf man beim Variablenname auch "Laufwerke" angeben, d.h. Ein Zugriff auf GetVar("ENVARC:blafasel") holt die Daten auch wirklich von da und nicht etwa aus ENV:blafasel. Auch wenn's mir eigentlich widerstrebt lese- und probierfaulen "Entwicklern" fertigen Code vor die Füße zu werfen, hier ein kleines Testprogramm: C code:#include <proto/dos.h> #include <dos/var.h> void main(void) { char buffer[256]; LONG error; error=SetVar("blafasel", "dummy", -1, GVF_SAVE_VAR|GVF_GLOBAL_ONLY); Printf("SetVar('blafasel')=%ld, IoErr=%ldn",error,IoErr()); error=GetVar("blafasel", buffer, sizeof(buffer)-1, GVF_GLOBAL_ONLY); Printf("GetVar('blafasel')=%ld, IoErr=%ldn",error,IoErr()); if(error>0) Printf("var='%s'n",buffer); error=DeleteVar("blafasel", GVF_GLOBAL_ONLY); Printf("DeleteVar('blafasel')=%ld, IoErr=%ldn",error,IoErr()); error=GetVar("blafasel", buffer, sizeof(buffer)-1, GVF_GLOBAL_ONLY); Printf("GetVar('blafasel')=%ld, IoErr=%ldn",error,IoErr()); if(error>0) Printf("var='%s'n",buffer); error=GetVar("ENVARC:blafasel", buffer, sizeof(buffer)-1, GVF_GLOBAL_ONLY); Printf("GetVar('ENVARC:blafasel')=%ld, IoErr=%ldn",error,IoErr()); if(error>0) Printf("var='%s'n",buffer); error=DeleteVar("blafasel", GVF_GLOBAL_ONLY); Printf("DeleteVar('blafasel')=%ld, IoErr=%ldn",error,IoErr()); } Und das erzeugt ohne HappyEnv/EnvHandler diese Ausgabe: C code:SetVar('blafasel')=-1, IoErr=0 GetVar('blafasel')=5, IoErr=5 var='dummy' DeleteVar('blafasel')=-1, IoErr=0 GetVar('blafasel')=-1, IoErr=205 GetVar('ENVARC:blafasel')=5, IoErr=5 var='dummy' DeleteVar('blafasel')=0, IoErr=0 Das Löschen der Variable in ENVARC: läuft analog zum Lesen aus ENVARC: ab. [ Dieser Beitrag wurde von tboeckel am 03.07.2009 um 12:44 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 14:08 Uhr AGSzabo Posts: 1663 Nutzer |
@tboeckel: eh, danke, das wäre nicht nötig gewesen. im gegenteil es verwirrt mich eher. @holger: neben "Auf zuletzt gespeichertes Zurücksetzen" gibts noch "auf interne defaults zurücksetzen" -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 03.07.2009 um 14:10 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 19:56 Uhr Holger Posts: 8116 Nutzer |
Zitat:Darf man das wirklich, oder handelt es sich lediglich um etwas, das zufällig funktioniert? Außerdem bedeutet es letztendlich, dass hardcodiert auf eine absolut angegebene Datei zugegriffen und das API für Variablen ad absurdum geführt wird. Die versteckte Andeutung, dass es mit HappyEnv/EnvHandler nicht funktioniert, sollte einem zusätzlich zu denken geben. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 20:00 Uhr Holger Posts: 8116 Nutzer |
Zitat:Auf interne defaults zurückzusetzen, funktioniert aber problemlos, in dem man SetVar aufruft. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 20:33 Uhr Thore Posts: 2266 Nutzer |
Wenn es ein Versehen mit GetVar wäre, dann müsste er intern immer ENV: voranstellen und bei Laufwerksangaben einen Fehler verursachen. Das wird intern aber explizit abgeprüft und ist damit völlig ok. In den Autodocs zu FindVar findet sich auch das unscheinbare Kommentar: Note variable names follow filesystem syntax and semantics. Da FindVar und GetVar "verwandt" sind, gehe ich davon aus, daß es sich bei GetVar auch so verhält. [ - Antworten - Zitieren - Direktlink - ] |
03.07.2009, 20:40 Uhr tboeckel Posts: 124 Nutzer |
@Holger: Der Verweise auf HappyEnv/EnvHandler sollte nicht bedeuten, daß es damit nicht funktioniert. Ich wollte damit nur verdeutlichen, daß es damit einen Unterschied macht. Gibt es in ENV: eine Variable nicht, dann sorgt der EnvHandler automatisch dafür, daß sie aus ENVARC: gelesen wird. Ohne EnvHandler bekommt man also eventuell einen Fehler, mit EnvHandler nur dann, wenn es die Variable auch in ENVARC nicht gibt. [ - Antworten - Zitieren - Direktlink - ] |
04.07.2009, 09:01 Uhr AGSzabo Posts: 1663 Nutzer |
sorry die dumme frage aber was ist HappyEnv/EnvHandler? ich habe in docs und in includes gesucht... -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
04.07.2009, 10:24 Uhr Thore Posts: 2266 Nutzer |
Hier ist die Beschreibung was es ist und was es macht: http://aminet.net/package/disk/misc/HappyENV [ - Antworten - Zitieren - Direktlink - ] |
06.07.2009, 13:38 Uhr Holger Posts: 8116 Nutzer |
Zitat:Ach so, was Du also indirekt sagst, ist das es ohne EnvHandler nicht funktioniert. Meine ursprüngliche Aussage war, dass man, um eine Variable auf ihren zuletzt gespeicherten Wert zurückzusetzen, nicht um Dateioperationen herumkommt (da man ENVARC:xyz nach ENV:xyz kopieren muss). Deine Antwort war, "Man kann die Variable in ENV: erst mit DeleteVar() löschen und dann mit GetVar() alles neu lesen.", was natürlich den Eindruck erweckt, das Löschen der Variablen stünde in irgendeinem Zusammenhang mit dem Ziel, die in ENV: gespeicherte Variable auf den Wert aus ENVARC: zu setzen. Wie sich jetzt herausstellt, kommt man um den Kopiervorgang von ENVARC: nach ENV: trotzdem nicht herum, auch wenn man also GetVar dazu missbrauchen kann, um den Inhalt einer beliebigen Datei zu lesen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
06.07.2009, 15:31 Uhr Thore Posts: 2266 Nutzer |
GetVar ist eben eine einfache und sinnige Art und Weise, auch wenn man da mit dem Pfad ENVARC: liest. Erspart Schreibarbeit und im Code ists deutlich, daß man Env-Variablen lesen will. Wie man es auch macht, ist im Grunde egal, das Resultat ist das selbe. Man sollte aber nicht darauf gehen daß jeder den Env-Handler/HappyEnv hat, also wenn man die Variable aus Env: löscht, sollte man aus EnvArc: oder durch schreiben eines neuen Werts per Programmcode die Variable neu erzeugen. Das ist wohl im Grunde die Kernaussage, also so zu programmieren, daß es überall funktioniert. Du kannst auch in ENVARC: ein Verzeichnis für dein Tool anlegen und dort die vorhergegangenen Variablen schreiben. Beispielsweise heißt dein Tool "MyTool" Beim speichern neuer Werte schreibst Du die momentanen Werte nach ENV/ENVARC:MyTool und überschreibst dann die Werte in ENV: und/oder ENVARC: mit den neuen Werten. Beim Zurückspeichern der vorhergegangenen Werte nimmst dann die aus ENVARC:MyTool. Das mal als Alternativ-Methode. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > env verwaltung | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |