ini-Dateien

Roland Henkel rhenkel at sbb.spk-berlin.de
Do Okt 26 12:16:55 CEST 2000


Lieber Herr Berger,

daß die Flexfunktionen es im Prinzip hergeben, so etwas selber zu
programmieren, versteht sich.  Schönen Dank für die anregenden Beispiele.

Extra Abschnitte in der a99.ini wären vielleicht gar nicht so übel, da
könnte man dann das "von Hause aus" gegebene wie DbDir o.ä. und das die
spezielle Anwendung betreffende deutlicher und optisch einleuchtender
voneinander sondern.

Da es - wenigstens für die Windowssysteme - API-Funktionen für die
Ini-Dateien gibt (jedenfalls habe ich mit Borlands CBuilder schon mal so
etwas gemacht), war ich der Meinung, so ein getini  ließe sich relativ
leicht realisieren, indem man um diese Funktionen  einen Wrapper legt,
der sie in das Flexkonzept einpaßt.

Noch eine Frage, für deren Laienhaftigkeit ich um Entschuldigung bitte. Ich
flexe erst seit wenigen Tagen und habe die Übersicht im einzelnen noch
nicht. Wenn ich  z.B. per call ein externes Progemm aufrufe, kann ich diesem
durch entsprechende Manipulation des Arbeitstextes, in dem die Zeile
erstellt wird, natürlich auch beliebige Parameter übermitteln. Wie sieht es
aber umgedreht aus, kann das externe Programm auf irgendeine Weise einen
oder mehrere Werte an das rufende Programm (also letztendlich an a99)
zurückgeben? Es wäre doch z.B. praktisch,wenn man irgendwelche #uxy  mit
Hilfe einer exteren Funktion füllen könnte.

Ich kann es mir bei dieser Gelegenheit nicht versagen, einmal meiner
Begeisterung über das Flexkonzept Audsruck zu geben. Ist zwar eine
Spätzündung, aber ich bin eben erst jetzt dazu gekommen, mich damit zu
befassen.

Gruß
R. Henkel

----- Original Message -----
From: "Thomas Berger" <ThB.com at t-online.de>
To: "Diskussionsliste Allegro-C" <allegro at buch.biblio.etc.tu-bs.de>
Sent: Wednesday, October 25, 2000 6:25 PM
Subject: Re: =?iso-8859-1?Q?W=E4re_folgendes_einfach_zu_realisieren=


> Lieber Herr Henkel,
>
> > > W=E4re es auf leichtem Wege - und nur, wenn sowieso was zu tun ist - =
> > > m=F6glich einen flex Befehl einzubauen, der Schl=FCssel aus der =
> > > Ini-Datei liefert?
> > >
> > > Etwa so getini <key>
>
> Ist nicht ganz so einfach, da ja "normale" Ini-Dateien
> mehrere "Sections" wie [General] etc. haben. ausserdem
> will man ja u.U. direkt mehrere Schluessel haben,
> zumindest waere es oekonomischer, mehrere auf einmal
> zu bekommen, wenn man mehrere will. Fuer automatische
> Installationsroutinen, die ich vorbereite, habe ich
> die entsprechenden Flexe bereits geschrieben, und
> zwar in Form einer Art Flex-Bibliothek: In einer
> speziellen Anwendervariablen wird dem Flex mitgeteilt,
> mit welchem Flex er fortzufahren hat.
>
> Angehaengt ein Flex, der so etwas tut (es gibt
> auch einen, der die .ini-Dateien aktualisieren kann).
>
> viele Gruesse
> Thomas Berger
>
>
>
> Aus apm/hans2k/defaults.ini sollen die Schluessel
> Root, Work, ProgDir, DbDir, DbName und Std entweder
> aus dem Abschnitt [HANS] oder aus dem Abschnitt
> [General] (falls in [HANS] nicht vorhanden) geholt
> und in den angegebenen Anwendervariablen abgelegt
> werden. Danach soll mit apm/hans2k/inihans.flx
> weitergemacht werden (Unterprogramm fuer Arme).
>
>
> Vorbereitung des Aufrufs fuer ini_read.flx wie folgt:
>
> // Vorbereiten der Neuinstallation: Teil 2, bestimmen der Verzeichnisse
> //            #uds: Section
> #uds HANS
> //            #udf: Name der Datei
> #udf apm/hans2k/defaults
> //            #udl: Liste von key1=#kkf|#key2=...
> #udl Root=#uHW|Work=#uHA|ProgDir=#uHP|DbDir=#uHD|DbName=#uHb|Std=#uHS
> //            #udn: Folge-Flex
> #udn X apm/hans2k/inihans
> exec X ini_read
>
>
> Hier ini_read.flx:
>
> //.ini-Datei einlesen und mit aktualisierten Variablen ablegen
> //Vorbesetzt: #uds: Section
> //            #udf: Name der Datei
> //            #udl: Liste von key1=#kkf|#key2=...
> //            #udn: Folge-Flex
>
> var #udf ".ini"
> open
> if no jump fail
>
> #udt
> :inactive
> get
> if no jump done
> if "[" jump section
> jump inactive
>
> :section
> #udm
> ins #udx
> var #udx(b"[")
> if =#uds jump specific
> if "~General" jump default
> jump inactive
>
> :default
> #udm Default-Merker
>
> :specific
> get #udx
> if no jump doit
> var #udx
> if "[" jump testagain
> if "#" jump specific
> if " " jump specific
> if ";" jump specific
> var #udx "|" #udt
> ins #udt
> jump specific
>
> :testagain
> if #udm jump section
>
> // jetzt enthaelt #udt alle relevanten Key=value-Paare
> // diese muessen anhand von #udl auf Kategorien verteilt
> // werden
> :doit
> var #udl
> ins #udm
> close
> //var "Test" n
> //var +"#udm ist: >" #udm "<" n
> //var +"#udt ist: >" #udt "<" n
> //show +iV
> :pair
> // hole ein Paar key=value
> var #udm(e"|")
> ins #udx
> // Suchschluessel nach #udy
> var #udx(e"=")
> ins #udy
> var #udy "="
> ins #udy
> //var "Test fuer #udy: >" #udy "<" n
> //show +iV
> // Kopie des Verteilungsmusters nach #udz
> var #udt
> ins #udz
>
> :subpair
> //var "Teste #udy: >" #udy "<" n "     gegen #udz: >" #udz "<" n
> //show +iV
> var #udz
> if =#udy jump did
> var ""
> var #udz(b"|")
> Ins #udz
> if #udz jump subpair
> jump nextpair
>
> :did
> // #udz enthaelt jetzt am Anfang den gefundenen Bestandteil
> var #udz(e"|")
> ins #udz
> var #udx(b"=") " " #udz(b"=")
> ins
>
> :nextpair
> #udy
> // #udm verkuerzen
> var ""
> var #udm(b"|")
> ins #udm
> if #udm jump pair
>
> // o.k. fertig
> var #udn(e"|")
> ins #uxx
> var #udn(b"|")
> ins #udn
> var #uxx
> exec
> var "--> Kann Flex " #uxx " nicht ausfuehren!" n
> show +IV
> end
>
> :fail
> var "--> Kann Datei " #udf " nicht oeffnen!" n
> show +IV
> end
>





Mehr Informationen über die Mailingliste Allegro