summaryrefslogtreecommitdiffstats
path: root/source/xrmoptions.c
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2017-06-21 08:19:47 +0200
committerDave Davenport <qball@gmpclient.org>2017-06-21 08:19:47 +0200
commit77a4d97262c3a1837d4b3752c2f222d7ea097703 (patch)
tree5310f88fd6155cd6ea5586663fdaa6532eed8183 /source/xrmoptions.c
parent9af191de26611ce5025e3363dafd0cdbf8ab38b9 (diff)
Add -dump-config option.
Diffstat (limited to 'source/xrmoptions.c')
-rw-r--r--source/xrmoptions.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/source/xrmoptions.c b/source/xrmoptions.c
index 91d69c3a..03ded07c 100644
--- a/source/xrmoptions.c
+++ b/source/xrmoptions.c
@@ -513,6 +513,75 @@ void config_parse_xresource_dump ( void )
}
}
+static void config_parse_dump_config_option ( XrmOption *option )
+{
+ if ( option->type == xrm_Char ) {
+ printf ( "/*" );
+ }
+ printf ( "\t%s: ", option->name );
+ switch ( option->type )
+ {
+ case xrm_Number:
+ printf ( "%u", *( option->value.num ) );
+ break;
+ case xrm_SNumber:
+ printf ( "%i", *( option->value.snum ) );
+ break;
+ case xrm_String:
+ if ( ( *( option->value.str ) ) != NULL ) {
+ // TODO should this be escaped?
+ printf ( "\"%s\"", *( option->value.str ) );
+ }
+ break;
+ case xrm_Boolean:
+ printf ( "%s", ( *( option->value.num ) == TRUE ) ? "true" : "false" );
+ break;
+ case xrm_Char:
+ // TODO
+ if ( *( option->value.charc ) > 32 && *( option->value.charc ) < 127 ) {
+ printf ( "'%c'", *( option->value.charc ) );
+ }
+ else {
+ printf ( "'\\x%02X'", *( option->value.charc ) );
+ }
+ printf ( " /* unsupported */" );
+ break;
+ default:
+ break;
+ }
+
+ printf ( ";" );
+ if ( option->type == xrm_Char ) {
+ printf ( "*/" );
+ }
+ printf ( "\n" );
+}
+
+void config_parse_dump_config ( void )
+{
+ printf ( "configuration {\n" );
+
+ unsigned int entries = sizeof ( xrmOptions ) / sizeof ( *xrmOptions );
+ for ( unsigned int i = 0; i < entries; ++i ) {
+ // Skip duplicates.
+ if ( ( i + 1 ) < entries ) {
+ if ( xrmOptions[i].value.str == xrmOptions[i + 1].value.str ) {
+ continue;
+ }
+ }
+ if ( xrmOptions[i].source != CONFIG_DEFAULT ) {
+ config_parse_dump_config_option ( &( xrmOptions[i] ) );
+ }
+ }
+ for ( unsigned int i = 0; i < num_extra_options; i++ ) {
+ if ( extra_options[i].source != CONFIG_DEFAULT ) {
+ config_parse_dump_config_option ( &( extra_options[i] ) );
+ }
+ }
+
+ printf ( "}\n" );
+}
+
static void print_option_string ( XrmOption *xo, int is_term )
{
int l = strlen ( xo->name );