![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > env verwaltung | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2009-07-02, 14:29 h AGSzabo Posts: 1663 User |
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 [ - Answer - Quote - Direct link - ] |
2009-07-02, 17:32 h ZeroG Posts: 1488 User |
@AGSzabo: Dann hast du nicht richtig gesucht. Guck mal in die dos.library Autodocs SetVar(), GetVar() usw. [ - Answer - Quote - Direct link - ] |
2009-07-02, 18:11 h AGSzabo Posts: 1663 User |
@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 [ - Answer - Quote - Direct link - ] |
2009-07-02, 19:15 h ZeroG Posts: 1488 User |
@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... [ - Answer - Quote - Direct link - ] |
2009-07-03, 05:46 h AGSzabo Posts: 1663 User |
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 [ - Answer - Quote - Direct link - ] |
2009-07-03, 08:05 h tboeckel Posts: 124 User |
@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! [ - Answer - Quote - Direct link - ] |
2009-07-03, 08:19 h AGSzabo Posts: 1663 User |
@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. ] [ - Answer - Quote - Direct link - ] |
2009-07-03, 08:34 h Thore Posts: 2266 User |
> 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*) [ - Answer - Quote - Direct link - ] |
2009-07-03, 12:07 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2009-07-03, 12:40 h tboeckel Posts: 124 User |
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. ] [ - Answer - Quote - Direct link - ] |
2009-07-03, 14:08 h AGSzabo Posts: 1663 User |
@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. ] [ - Answer - Quote - Direct link - ] |
2009-07-03, 19:56 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2009-07-03, 20:00 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2009-07-03, 20:33 h Thore Posts: 2266 User |
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. [ - Answer - Quote - Direct link - ] |
2009-07-03, 20:40 h tboeckel Posts: 124 User |
@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. [ - Answer - Quote - Direct link - ] |
2009-07-04, 09:01 h AGSzabo Posts: 1663 User |
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 [ - Answer - Quote - Direct link - ] |
2009-07-04, 10:24 h Thore Posts: 2266 User |
Hier ist die Beschreibung was es ist und was es macht: http://aminet.net/package/disk/misc/HappyENV [ - Answer - Quote - Direct link - ] |
2009-07-06, 13:38 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2009-07-06, 15:31 h Thore Posts: 2266 User |
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. [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > env verwaltung | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |