{ pnd_conf_conf, PND_CONF_FILE },
{ pnd_conf_apps, "apps" },
{ pnd_conf_startup, "startup" },
+ { pnd_conf_desktop, "desktop" },
+ { pnd_conf_categories, "categories" },
+ { pnd_conf_evmap, "eventmap" },
{ pnd_conf_nil, NULL },
};
temp = pnd_conf_get_as_char ( ch, PND_CONF_KEY );
- if ( searchpath ) {
+ if ( temp ) {
searchpath = strdup ( temp );
} else {
searchpath = strdup ( PND_CONF_SEARCHPATH );
conf = pnd_conf_fetch_by_path ( buffer );
if ( conf ) {
+ wordfree ( &_p );
return ( conf );
}
*mid = '\0';
mid++;
+ // skip past any heading space for the key
+ while ( *mid && isspace ( *mid ) ) {
+ mid++;
+ }
+
//printf ( "key head: '%s'\n", head );
//printf ( "key mid: '%s'\n", mid );
}
} else {
- // key/value pairing
+ // key only
char *v;
// form the actual new key
} // key or key/value?
} // section or key/value line?
-
+
} // while
// clean up a trifle
char *pnd_conf_get_as_char ( pnd_conf_handle c, char *key ) {
return ( pnd_box_find_by_key ( c, key ) );
}
+
+int pnd_conf_get_as_int ( pnd_conf_handle c, char *key ) {
+ char *t = pnd_box_find_by_key ( c, key );
+
+ if ( ! t ) {
+ return ( PND_CONF_BADNUM ); // non-existant
+ }
+
+ int i = atoi ( t );
+
+ return ( i );
+}
+
+int pnd_conf_get_as_int_d ( pnd_conf_handle c, char *key, int def ) {
+ char *t = pnd_box_find_by_key ( c, key );
+
+ if ( ! t ) {
+ return ( def ); // non-existant
+ }
+
+ int i = atoi ( t );
+
+ return ( i );
+}
+
+int *pnd_conf_set_int ( pnd_conf_handle c, char *key, int v ) {
+
+ // key is already present? if so, delete it
+ void *kv = pnd_box_find_by_key ( c, key );
+
+ if ( kv ) {
+ pnd_box_delete_node ( c, kv );
+ }
+
+ // add the new node
+ int *nv = pnd_box_allocinsert ( c, key, sizeof(int) );
+
+ if ( nv ) {
+ *nv = v;
+ return ( nv );
+ }
+
+ return ( NULL );
+}
+
+char *pnd_conf_set_char ( pnd_conf_handle c, char *key, char *v ) {
+
+ // key is already present? if so, delete it
+ char *kv = pnd_box_find_by_key ( c, key );
+
+ if ( kv ) {
+ pnd_box_delete_node ( c, kv );
+ }
+
+ // add the new node
+ char *nv = pnd_box_allocinsert ( c, key, strlen ( v ) + 1 );
+
+ if ( nv ) {
+ strcpy ( nv, v );
+ return ( nv );
+ }
+
+ return ( NULL );
+}
+
+unsigned char pnd_conf_write ( pnd_conf_handle c, char *fullpath ) {
+ char *p = pnd_box_get_head ( c );
+ FILE *f;
+ char lastcategory [ 100 ] = "";
+
+ if ( ! p ) {
+ return ( 1 ); // nothing to save, so.. success?
+ }
+
+ f = fopen ( fullpath, "w" );
+
+ if ( ! f ) {
+ return ( 0 );
+ }
+
+ while ( p ) {
+ char *k = pnd_box_get_key ( p );
+ char *c = strchr ( k, '.' );
+
+ if ( c ) {
+ if ( strncmp ( k, lastcategory, c - k ) == 0 ) {
+ // same category
+ } else {
+ strncpy ( lastcategory, k, c - k );
+ fprintf ( f, "[%s]\n", lastcategory );
+ }
+ fprintf ( f, "%s\t%s\n", c + 1, p );
+ } else {
+ if ( lastcategory [ 0 ] ) {
+ fprintf ( f, "[]\n" );
+ }
+ lastcategory [ 0 ] = '\0';
+ fprintf ( f, "%s\t%s\n", k, p );
+ }
+
+ p = pnd_box_get_next ( p );
+ }
+
+ fclose ( f );
+
+ return ( 1 );
+}