2018 revision to classic DataBus AVC code.
Dependencies: LSM303DLM Servo SerialGraphicLCD L3G4200D IncrementalEncoder SimpleShell
Config.cpp@5:eff573d4ede7, 2018-12-04 (annotated)
- Committer:
- shimniok
- Date:
- Tue Dec 04 06:44:54 2018 +0000
- Revision:
- 5:eff573d4ede7
- Parent:
- 4:de7feb458652
- Child:
- 6:83a6666a62d7
additional parsing refinements
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shimniok | 4:de7feb458652 | 1 | #include "Config.h" |
shimniok | 5:eff573d4ede7 | 2 | #include <ctype.h> |
shimniok | 5:eff573d4ede7 | 3 | |
shimniok | 5:eff573d4ede7 | 4 | |
shimniok | 5:eff573d4ede7 | 5 | char *trim(char *s) |
shimniok | 5:eff573d4ede7 | 6 | { |
shimniok | 5:eff573d4ede7 | 7 | char *t = s; |
shimniok | 5:eff573d4ede7 | 8 | |
shimniok | 5:eff573d4ede7 | 9 | // rtrim |
shimniok | 5:eff573d4ede7 | 10 | t = s + strlen(s) - 1; |
shimniok | 5:eff573d4ede7 | 11 | while (isspace(*t)) |
shimniok | 5:eff573d4ede7 | 12 | *t = '\0'; |
shimniok | 5:eff573d4ede7 | 13 | |
shimniok | 5:eff573d4ede7 | 14 | // ltrim |
shimniok | 5:eff573d4ede7 | 15 | while (*s && isspace(*s)) |
shimniok | 5:eff573d4ede7 | 16 | s++; |
shimniok | 5:eff573d4ede7 | 17 | |
shimniok | 5:eff573d4ede7 | 18 | return s; |
shimniok | 5:eff573d4ede7 | 19 | } |
shimniok | 4:de7feb458652 | 20 | |
shimniok | 4:de7feb458652 | 21 | |
shimniok | 4:de7feb458652 | 22 | int Config::load(char *filename) |
shimniok | 4:de7feb458652 | 23 | { |
shimniok | 4:de7feb458652 | 24 | char buf[MAXBUF]; |
shimniok | 4:de7feb458652 | 25 | char *key; |
shimniok | 4:de7feb458652 | 26 | char *value; |
shimniok | 4:de7feb458652 | 27 | int status=0; |
shimniok | 4:de7feb458652 | 28 | FILE *fp; |
shimniok | 4:de7feb458652 | 29 | |
shimniok | 4:de7feb458652 | 30 | fp = fopen(filename, "r"); |
shimniok | 4:de7feb458652 | 31 | if (fp == NULL) { |
shimniok | 4:de7feb458652 | 32 | status = -1; |
shimniok | 4:de7feb458652 | 33 | } else { |
shimniok | 4:de7feb458652 | 34 | while (!feof(fp)) { |
shimniok | 4:de7feb458652 | 35 | fgets(buf, MAXBUF-1, fp); |
shimniok | 5:eff573d4ede7 | 36 | |
shimniok | 5:eff573d4ede7 | 37 | char *t = buf; |
shimniok | 5:eff573d4ede7 | 38 | char *s = buf; |
shimniok | 5:eff573d4ede7 | 39 | // trim spaces and terminate at # |
shimniok | 5:eff573d4ede7 | 40 | while (*t) { |
shimniok | 5:eff573d4ede7 | 41 | if (isspace(*buf)) { |
shimniok | 5:eff573d4ede7 | 42 | s = t; |
shimniok | 5:eff573d4ede7 | 43 | } else if (*t == '#') { |
shimniok | 5:eff573d4ede7 | 44 | *t = '\0'; |
shimniok | 4:de7feb458652 | 45 | } |
shimniok | 5:eff573d4ede7 | 46 | t++; |
shimniok | 5:eff573d4ede7 | 47 | } |
shimniok | 5:eff573d4ede7 | 48 | |
shimniok | 5:eff573d4ede7 | 49 | key = strtok(s, ":#"); |
shimniok | 5:eff573d4ede7 | 50 | value = strtok(NULL, ":#"); |
shimniok | 5:eff573d4ede7 | 51 | if (key && value && *key && *value) { |
shimniok | 5:eff573d4ede7 | 52 | key = trim(key); |
shimniok | 5:eff573d4ede7 | 53 | value = trim(value); |
shimniok | 5:eff573d4ede7 | 54 | printf("<%s>=<%s>\n", key, value); |
shimniok | 5:eff573d4ede7 | 55 | // look for key |
shimniok | 5:eff573d4ede7 | 56 | // parse value |
shimniok | 5:eff573d4ede7 | 57 | // set options |
shimniok | 4:de7feb458652 | 58 | } |
shimniok | 4:de7feb458652 | 59 | } |
shimniok | 4:de7feb458652 | 60 | fclose(fp); |
shimniok | 4:de7feb458652 | 61 | }; |
shimniok | 4:de7feb458652 | 62 | |
shimniok | 4:de7feb458652 | 63 | return status; |
shimniok | 4:de7feb458652 | 64 | } |
shimniok | 4:de7feb458652 | 65 | |
shimniok | 4:de7feb458652 | 66 | |
shimniok | 4:de7feb458652 | 67 | /** Attach a setter for each key. The type of the setter's arg will be |
shimniok | 4:de7feb458652 | 68 | * enforced by the parser when the config file is loaded. |
shimniok | 4:de7feb458652 | 69 | */ |
shimniok | 4:de7feb458652 | 70 | void Config::attach(Callback<void(char *)> set, char *key) { |
shimniok | 4:de7feb458652 | 71 | } |
shimniok | 4:de7feb458652 | 72 | |
shimniok | 4:de7feb458652 | 73 | |
shimniok | 4:de7feb458652 | 74 | void Config::attach(Callback<void(int)> set, char *key) { |
shimniok | 4:de7feb458652 | 75 | } |
shimniok | 4:de7feb458652 | 76 | |
shimniok | 4:de7feb458652 | 77 | void Config::attach(Callback<void(float)> set, char *key) { |
shimniok | 4:de7feb458652 | 78 | } |
shimniok | 4:de7feb458652 | 79 | |
shimniok | 4:de7feb458652 | 80 | void Config::attach(Callback<void(double)> set, char *key) { |
shimniok | 4:de7feb458652 | 81 | } |