amiga-news 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: 1485
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: 1485
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: 8046
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:
Original von Holger:
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.


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=%ld\n",error,IoErr());

	error=GetVar("blafasel", buffer, sizeof(buffer)-1, GVF_GLOBAL_ONLY);
	Printf("GetVar('blafasel')=%ld, IoErr=%ld\n",error,IoErr());
	if(error>0)
		Printf("var='%s'\n",buffer);

	error=DeleteVar("blafasel", GVF_GLOBAL_ONLY);
	Printf("DeleteVar('blafasel')=%ld, IoErr=%ld\n",error,IoErr());

	error=GetVar("blafasel", buffer, sizeof(buffer)-1, GVF_GLOBAL_ONLY);
	Printf("GetVar('blafasel')=%ld, IoErr=%ld\n",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=%ld\n",error,IoErr());
	if(error>0)
		Printf("var='%s'\n",buffer);

	error=DeleteVar("blafasel", GVF_GLOBAL_ONLY);
	Printf("DeleteVar('blafasel')=%ld, IoErr=%ld\n",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: 8046
Nutzer
Zitat:
Original von tboeckel:
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.

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: 8046
Nutzer
Zitat:
Original von AGSzabo:
@holger: neben "Auf zuletzt gespeichertes Zurücksetzen" gibts noch "auf interne defaults zurücksetzen"

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: 8046
Nutzer
Zitat:
Original von tboeckel:
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.

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 © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.