[lcdproc] Hashes and config file. ;-) (and dynamic load)
Andre Breiler
andreb@rd.bbc.co.uk
Tue, 27 Mar 2001 13:52:37 +0100 (BST)
On Tue, 27 Mar 2001, David Glaude wrote:
> >From: Andre Breiler [mailto:andreb@rd.bbc.co.uk]
> >On Mon, 26 Mar 2001, Joris Robijn wrote:
> >> > > Maybe we could have a (argv,argc) kind of argument (list of string).
> >> This way we can use the same format for command line, config file and
> >> widget language. Cool.
> >Yes sure. When you define a EOL char than you can put the complete config
> >file on the command line :) (LCDd -c 'globaloption1=yyy\n[driver]\n...)
>
> Ok, I feel it, you don't like long command line. ;-)
Yes, write a w3 server on the cmd line of tcl :)
> Obviously if LCDd is run at startup we want a short command line
> and yet another config file in /etc(?).
I agree. Maybe I'm able to specify a config file an overwrite only same
parts ?
> >> Or read and store the values, and let the drivers request them by key.
> >> Better encapsulation. The example that I used a short while back was:
> >>
> >> value = get_parameter_int( "key", defaultvalue );
> >
> >Nice. Should this only available while the config is read or over the
> >complete lifetime of the server ?
>
> I guess over the complete lifetime of the driver,
> but most driver will only read this at init time. ;-)
Yes and if we define it's only available while driver_init() is
called then we can free the memory.
With the dristributed driver in mind this should be enforced.
> >In the latter case we should use a hash to store config in the LCDd.
>
> I have been suggestion hash for that,
> then someone said we only need it the protocol,
Yep, thats me. But the conditions have changed ?
> now you tell me we need it again for config file... ;-)
If a driver uses this often then it should be definitly a hash.
Otherwise not.
> [Side note, for protocol we can build a perfect hash function...
Yes this is quite easy :)
> but for the config file, we might not know the keywords used
> by each driver. So an unperfect hashing with a more dynamic
> table need to be used. However remember that hash table are
> most of the time of fixed size, this introduce limitation
> and/or waste of memory.]
Yes and you pay also cpu to build the hash.
> TROUBLE:
> Is the config file suppose to be read only at startup,
> or re-read later (for dynamic loading) when we get a signal (or ?)?
I think reread later would a "nice to have" thing but should be in mind on
initial design.
> If it has to be re-read and that some config of some LCD is change
> (baud rate? size? ...) should we reset and reinitialise the driver?
Definitively yes.
> How do we detect changes, how do we tell the driver?
I think you mean changes in options ?
I would reada the config reinit all things (call driver_init() again).
Every part of the system should then decide for itself what to do.
If something is removed (e.g. driver) it should be killed.
So I would do the following steps:
- disable/ignore all non init related communication (tell this all
connected parts ?)
- read & parse the config (struct config allocated)
- find removed components (e.g. a driver doesn't appear anymore)
- remove these components (e.g. unload lib)
- alloc and init struct LCDd status (take all things over from old
status to new)
- init all subsystems (e.g. call driver_init with the new LCDd status)
- check which clients are affected (e.g. key changes, display removed)
based on old/new LCDd status
- notify these clients
- set new status as working status
- free old sttus
- enable all communication (notify all parts of this ?)
> What do we do with current client?
The client should get a reset and should reinit itself.
Bye Andre'
--
Andre' Breiler | Tel: +44 1737 839532
BBC Internet Services | Email: andre.breiler@rd.bbc.co.uk
Kingswood Warren,Tadworth,Surrey,UK | URL: http://support.bbc.co.uk/
Mail me. Don't phone if possible. And use a Subject line.
-----------------------------------------------------------
To unsubscribe from this list send a blank message to
lcdproc-unsubscribe@lists.omnipotent.net