In message <[EMAIL PROTECTED]> "Gary T. Corcoran" writes:
: Forgive my ignorance (since I'm unfamiliar with this hint stuff), but
: I presume the above hints.foo... stuff just goes in some config file
: somewhere?  And this config file would be consulted whenever a module
: is loaded?   Just curious, what would "userconfig" be for?

Yes.  hints are loaded in the environment at boot time.  userconfig
will edit hints.

: Umm, I'm a little bit confused by the above.  First you say that you'd
: make simple functions to do the storing, but that you don't do the
: parsing yourself.

No.  I'd provide the usual functions to parse integers, simple
strings, booleans, etc and store them properly.  Driver writers would
be free to provide their own string -> binary mappings if they
desired.

: If you don't know how to do the storing (because of
: a special type), how do you know how to do the parsing in a general
: routine? :)

That's implicit.  All the strings in the enviornment are of the form:
        hint.foo.4.key=value\0
so the function listed in the table would be called with value and it
would be responsible for storing the binary represenation of the
string.

: But then you go on to suggest that you would like the
: function pointers to give modules the maximum flexibility.  This means
: that the module itself would have the functions for parsing the parameters,
: right?   I'm not trying to give you a hard time, I'm just trying to
: understand what you really meant to say...  :)

No.  See above.

: And I do agree that it would be nice to have the flexibility for the
: module to parse its own parameters, if desired.  For example, it would
: be much clearer, and less prone to error, if the user could specify
: TransmissionMode=LLC/SNAP/Bridged, rather than having to look up that
: LLC/SNAP/Bridged mode is value 4 and then put TransmissionMode=4 in
: a config file.  The Windows "Advanced Properties" GUI allows this -
: that is, it presents a drop-down list of strings, and when the user
: chooses one, the corresponding enum'ed value is stored in the registry.

Yes.  You'd say

hint.dslmodem.-1.TransmissionMode=LLC

and your entry would look like:

        "TransmissionMode", offsetof(struct softc, tm), MyParseTM, NULL,

in the table.  And it would be responsible for parsing.  MyParseTM
would look like:

int
MyParseTM(const char *src, void *dst, void *argp)
{
        int *valp = (int *) dst;

        if (strcmp("LLC", src) == 0) {
                *valp = 1;
                return 1;
        }

        if (strcmp("Next", src) == 0) {
                *valp = 2;
                return 1;
        }
        // etc
        return 0;
}

It would be called
        ep points to the entry
        vp points to "LLC"
        sc points to softc.

        ep->fnp(vp, (void *) ((caddr_t) sc) + ep->off, ep->argp);

But writing this, I thin that normal enums would want a specialized
routine for doing this that would could pass a table to.

Hmmm, maybe I should just write something now that I've designed it to
this level :-)

: But of course using the string to specify the desired
: mode takes more work on the part of the module writer, so it'd be
: nice to not require that in all cases, i.e. allow "=4" auto-parsed.
: I suppose we could have kernel-supplied functions to do the parsing
: for the typical simple cases, e.g. int's, strings, and allow the
: modules themselves to supply parsing routines for "special" parameters?
: Maybe that's what you meant by the above?  ;-)

Something like that.

Warner


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to