In Windows heb je het register, in *nix vaak losse configuratiefiles. Het Windows register is niet optimaal, omdat het te log en te groot is. De losse *nix configuratiefiles zijn niet optimaal omdat er geen centrale plaats is om ze op te slaan, en vaak een ietwat onduidelijke indeling hebben.
Nu heb ik daar na enig denken een IMNSHO goede oplossing voor bedacht, namelijk de standaard IniDB.
Het gaat hier om een verzameling van losse configuratiefiles (die als INI-files zijn gestructureerd, vandaar de naar IniDB), die volgens een boomstructuur is geordend in een centraal bestand, net als in het register. In dit geval gaat het echter om losse files, die overal kunnen staan maar toch achterhaald kunnen worden.
Voorbeeld van het centraal bestand:
Een voorbeeld van een bestand voor het fictieve programma 123Text:
Je zult zien dat de ConfigurationID verschillend is. Dit nummer staat voor een ``configuration instance''. Bij de Centrale INI Database was dat 0, bij de 123Text INI was dat 3. Dat betekend dat de eerste file de system-wide instellingen bevatte. De tweede file bevatte de instellingen voor User 3, dit kan echter ook Installatie 3 (bij meerdere installaties van hetzelfde programma op een computer) betekenen. Zoals je ziet is het een fluitje van een cent om instellingen van verschillende Users/Instances/Installaties te scheiden. Het programma moet de betekenis van de configuration instances zelf implementeren. Dit kan echter natuurlijk ook ergens in de INI DataBase staan! (en dan b.v. ConfigurationID op 0 zetten)
De sectie [General] bevat de informatie over de INI zelf. Bij [Classes] staan de INI-files die weer meer instellingen kunnen bevatten, zo voorkom je grote INI-files waarin veel gezocht moet worden (wat weer lijkt op een register). De rest van de secties kunnen door het programma zelf willekeurig aan worden gemaakt en gebruikt.
Overbodige INI-files die door onzorgvuldig geschreven programma's achterblijven staan nu dus alleen nog als 1 entry in de hoofddatabase ``Applications''. Zolang die entry niet opgevraagd wordt, wordt het ook niet geladen in het geheugen, zoals bij het Windows register wel gebeurt.
Een entry zou je bijvoorbeeld zo kunnen opvragen:
Een:
zou dus:
kunnen opleveren.
Wat vinden jullie ervan?
Nu heb ik daar na enig denken een IMNSHO goede oplossing voor bedacht, namelijk de standaard IniDB.
Het gaat hier om een verzameling van losse configuratiefiles (die als INI-files zijn gestructureerd, vandaar de naar IniDB), die volgens een boomstructuur is geordend in een centraal bestand, net als in het register. In dit geval gaat het echter om losse files, die overal kunnen staan maar toch achterhaald kunnen worden.
Voorbeeld van het centraal bestand:
code:
1
2
3
4
5
6
7
8
9
10
| ; Central INI DataBase [General] LastUpdate=<datum laatste update> IniDBVersion=<besturingssysteem>,<programmaversie> ConfigurationID=0 [Classes] System=C:\ETC\INI\SYSTEM.INI Applications=%windir%\All Users\Application Data\General\APP.INI |
Een voorbeeld van een bestand voor het fictieve programma 123Text:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| ; INI DataBase for 123Text Word Processor [General] LastUpdate=<datum laatste update> IniDBVersion=<besturingssysteem>,<programmaversie> ConfigurationID=3 [Classes] InstalledFonts=C:\PROGRAM FILES\123Text\FONTS\FONTS.INI [123Text_General] WindowSizeX=200 WindowSizeY=400 [123Text_RecentList] Recent0=C:\MY DOCUMENTS\CV.123DOC Recent1=C:\MY DOCUMENTS\Notes.123DOC |
Je zult zien dat de ConfigurationID verschillend is. Dit nummer staat voor een ``configuration instance''. Bij de Centrale INI Database was dat 0, bij de 123Text INI was dat 3. Dat betekend dat de eerste file de system-wide instellingen bevatte. De tweede file bevatte de instellingen voor User 3, dit kan echter ook Installatie 3 (bij meerdere installaties van hetzelfde programma op een computer) betekenen. Zoals je ziet is het een fluitje van een cent om instellingen van verschillende Users/Instances/Installaties te scheiden. Het programma moet de betekenis van de configuration instances zelf implementeren. Dit kan echter natuurlijk ook ergens in de INI DataBase staan! (en dan b.v. ConfigurationID op 0 zetten)
De sectie [General] bevat de informatie over de INI zelf. Bij [Classes] staan de INI-files die weer meer instellingen kunnen bevatten, zo voorkom je grote INI-files waarin veel gezocht moet worden (wat weer lijkt op een register). De rest van de secties kunnen door het programma zelf willekeurig aan worden gemaakt en gebruikt.
Overbodige INI-files die door onzorgvuldig geschreven programma's achterblijven staan nu dus alleen nog als 1 entry in de hoofddatabase ``Applications''. Zolang die entry niet opgevraagd wordt, wordt het ook niet geladen in het geheugen, zoals bij het Windows register wel gebeurt.
Een entry zou je bijvoorbeeld zo kunnen opvragen:
code:
1
2
3
4
5
| str RequestedINIFile; str RequestedValue; RequestedINIFile = GetINILocation("INI.Applications.WordProcessors.123Text.InstalledFonts"); RequestedValue = GetINIValue(RequestedINIFile, "Arial.FontType") |
Een:
code:
1
| printf(RequestedValue); |
zou dus:
code:
1
| TrueType |
kunnen opleveren.
Wat vinden jullie ervan?
[ Voor 12% gewijzigd door Verwijderd op 11-04-2005 17:06 . Reden: typo ]