Changeset 3997 for neercs


Ignore:
Timestamp:
Nov 22, 2009, 2:33:48 PM (11 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Cleaned et reorganized configuration parsing stuff, paves the way to about:config thingy
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/configuration.c

    r3969 r3997  
    2424
    2525#include "neercs.h"
     26
     27
     28struct config_line
     29{
     30    const char name[32];
     31    int (*func_ptr) (const char *argv, struct screen_list * screen_list);
     32};
     33
     34struct config_line *get_config(const char *name);
     35int set_window_manager(const char *argv, struct screen_list *screen_list);
     36int set_cube_duration(const char *argv, struct screen_list *screen_list);
     37int set_thumbnails(const char *argv, struct screen_list *screen_list);
     38int set_status_bar(const char *argv, struct screen_list *screen_list);
     39int set_screensaver_timeout(const char *argv, struct screen_list *screen_list);
     40int set_autolock_timeout(const char *argv, struct screen_list *screen_list);
     41int set_lock_on_detach(const char *argv, struct screen_list *screen_list);
     42int set_socket_dir(const char *argv, struct screen_list *screen_list);
     43int set_delay(const char *argv, struct screen_list *screen_list);
     44
     45/* Options definition and associated function pointer */
     46struct config_line config_option[] = {
     47    {.name = "window_manager",.func_ptr = set_window_manager},
     48    {.name = "cube_duration",.func_ptr = set_cube_duration},
     49    {.name = "thumbnails",.func_ptr = set_thumbnails},
     50    {.name = "status_bar",.func_ptr = set_status_bar},
     51    {.name = "screensaver_timeout",.func_ptr = set_screensaver_timeout},
     52    {.name = "autolock_timeout",.func_ptr = set_autolock_timeout},
     53    {.name = "lock_on_detach",.func_ptr = set_lock_on_detach},
     54    {.name = "socket_dir",.func_ptr = set_socket_dir},
     55    {.name = "delay",.func_ptr = set_delay},
     56   
     57    {.name = "last",.func_ptr = NULL},
     58};
     59
    2660
    2761
     
    274308
    275309
    276 #define IS_TOKEN(t) (!strncmp(option->key, t, strlen(option->key)))
    277 #define IS_VALUE(t) (!strncmp(option->value, t, strlen(option->value)))
     310
     311struct config_line *get_config(const char *name)
     312{
     313    int i = 0;
     314    while (strncmp(config_option[i].name, "last", strlen("last")))
     315    {
     316        if (!strncmp(name, config_option[i].name, strlen(name)))
     317        {
     318            debug("Found\n");
     319            return &config_option[i];
     320        }
     321        i++;
     322    }
     323    return NULL;
     324}
     325
    278326
    279327
     
    293341        }
    294342
    295         if (IS_TOKEN("window_manager"))
    296         {
    297             if (IS_VALUE("full"))
    298                 screen_list->wm_type = WM_FULL;
    299             else if (IS_VALUE("hsplit"))
    300                 screen_list->wm_type = WM_HSPLIT;
    301             else if (IS_VALUE("vsplit"))
    302                 screen_list->wm_type = WM_VSPLIT;
    303             else if (IS_VALUE("card"))
    304                 screen_list->wm_type = WM_CARD;
    305             else if (IS_VALUE("cube"))
    306                 screen_list->wm_type = WM_CUBE;
    307             else
    308                 fprintf(stderr, "Unknown window manager '%s'\n", option->key);
    309 
    310         }
    311         else if (IS_TOKEN("cube_duration"))
    312         {
    313             screen_list->cube.duration = atoi(option->value) * 1000000;
    314         }
    315         else if (IS_TOKEN("thumbnails"))
    316         {
    317             if (IS_VALUE("true") || IS_VALUE("1"))
    318                 screen_list->mini = 1;
    319             else
    320                 screen_list->mini = 0;
    321 
    322         }
    323         else if (IS_TOKEN("status_bar"))
    324         {
    325             if (IS_VALUE("true") || IS_VALUE("1"))
    326                 screen_list->status = 1;
    327             else
    328                 screen_list->status = 0;
    329 
    330         }
    331         else if (IS_TOKEN("screensaver_timeout"))
    332         {
    333             screen_list->screensaver_timeout = atoi(option->value) * 1000000;
    334             /* if timeout is 0, set it to 0xFFFFFFFFFFFFFFFF */
    335             if (!screen_list->screensaver_timeout)
    336                 screen_list->screensaver_timeout -= 1;
    337         }
    338         else if (IS_TOKEN("autolock_timeout"))
    339         {
    340             debug("Autolock is %d\n", screen_list->autolock_timeout);
    341             if (screen_list->autolock_timeout == 0 ||
    342                 screen_list->autolock_timeout ==
    343                 ((long long unsigned int)0) - 1)
    344             {
    345                 screen_list->autolock_timeout = atoi(option->value) * 1000000;
    346                 /* if timeout is 0, set it to 0xFFFFFFFFFFFFFFFF */
    347                 if (!screen_list->autolock_timeout)
    348                     screen_list->autolock_timeout -= 1;
    349             }
    350         }
    351         else if (IS_TOKEN("lock_on_detach"))
    352         {
    353             if (IS_VALUE("true") || IS_VALUE("1"))
    354                 screen_list->lock_on_detach = 1;
    355             else
    356                 screen_list->lock_on_detach = 0;
    357         }
    358         else if (IS_TOKEN("socket_dir"))
    359         {
    360             screen_list->socket_dir = option->value;
    361         }
    362         else if (IS_TOKEN("delay"))
    363         {
    364             screen_list->requested_delay = atoi(option->value);
    365             screen_list->delay = atoi(option->value);
    366         }
    367         else
    368         {
    369             fprintf(stderr, "Unknown option '%s'\n", option->key);
     343        struct config_line *c = get_config(option->key);
     344        if (c)
     345        {
     346            printf("Found config '%s', ptr %p\n", c->name, c->func_ptr);
     347            c->func_ptr(option->value, screen_list);
    370348        }
    371349        option = option->next;
     
    374352    return i;
    375353}
     354
     355
     356
     357/*
     358 * Options setters
     359 */
     360
     361#define IS_OPTION(t) (!strncmp(argv, t, strlen(argv)))
     362int set_window_manager(const char *argv, struct screen_list *screen_list)
     363{
     364    if (IS_OPTION("full"))
     365        screen_list->wm_type = WM_FULL;
     366    else if (IS_OPTION("hsplit"))
     367        screen_list->wm_type = WM_HSPLIT;
     368    else if (IS_OPTION("vsplit"))
     369        screen_list->wm_type = WM_VSPLIT;
     370    else if (IS_OPTION("card"))
     371        screen_list->wm_type = WM_CARD;
     372    else if (IS_OPTION("cube"))
     373        screen_list->wm_type = WM_CUBE;
     374    else
     375    {
     376        fprintf(stderr, "Unknown window manager '%s'\n", argv);
     377        return -1;
     378    }
     379    return 0;
     380}
     381
     382int set_cube_duration(const char *argv, struct screen_list *screen_list)
     383{
     384    screen_list->cube.duration = atoi(argv) * 1000000;
     385    return 0;
     386}
     387
     388int set_thumbnails(const char *argv, struct screen_list *screen_list)
     389{
     390    if (IS_OPTION("true") || IS_OPTION("1"))
     391        screen_list->mini = 1;
     392    else
     393        screen_list->mini = 0;
     394    return 0;
     395   
     396}
     397
     398int set_status_bar(const char *argv, struct screen_list *screen_list)
     399{
     400    if (IS_OPTION("true") || IS_OPTION("1"))
     401        screen_list->status = 1;
     402    else
     403        screen_list->status = 0;
     404    return 0;
     405}
     406
     407int set_screensaver_timeout(const char *argv, struct screen_list *screen_list)
     408{
     409    screen_list->screensaver_timeout = atoi(argv) * 1000000;
     410    /* if timeout is 0, set it to 0xFFFFFFFFFFFFFFFF */
     411    if (!screen_list->screensaver_timeout)
     412        screen_list->screensaver_timeout -= 1;
     413    return 0;
     414}
     415
     416int set_autolock_timeout(const char *argv, struct screen_list *screen_list)
     417{
     418    if (screen_list->autolock_timeout == 0 ||
     419        screen_list->autolock_timeout ==
     420        ((long long unsigned int)0) - 1)
     421    {
     422        screen_list->autolock_timeout = atoi(argv) * 1000000;
     423        /* if timeout is 0, set it to 0xFFFFFFFFFFFFFFFF */
     424        if (!screen_list->autolock_timeout)
     425            screen_list->autolock_timeout -= 1;
     426    }
     427    return 0;
     428}
     429
     430int set_lock_on_detach(const char *argv, struct screen_list *screen_list)
     431{
     432    if (IS_OPTION("true") || IS_OPTION("1"))
     433        screen_list->lock_on_detach = 1;
     434    else
     435        screen_list->lock_on_detach = 0;
     436    return 0;
     437}
     438
     439int set_socket_dir(const char *argv, struct screen_list *screen_list)
     440{
     441    screen_list->socket_dir = argv;
     442        return 0;
     443}
     444
     445int set_delay(const char *argv, struct screen_list *screen_list)
     446{
     447    screen_list->requested_delay = atoi(argv);
     448    screen_list->delay = atoi(argv);
     449        return 0;
     450}
Note: See TracChangeset for help on using the changeset viewer.