summaryrefslogtreecommitdiff
path: root/create_usage
diff options
context:
space:
mode:
Diffstat (limited to 'create_usage')
-rw-r--r--create_usage367
1 files changed, 367 insertions, 0 deletions
diff --git a/create_usage b/create_usage
new file mode 100644
index 0000000..e8f4bd3
--- /dev/null
+++ b/create_usage
@@ -0,0 +1,367 @@
+#!/usr/bin/perl -w
+
+# Copyright (c) 2000, 2002 Stephen Montgomery-Smith
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of Stephen Montgomery-Smith nor the names of his
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE STEPHEN MONTGOMERY-SMITH AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STEPHEN MONTGOMERY-SMITH OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+sub setatom {
+ $atom = $atomlist[$atomcount];
+}
+
+sub getatom {
+ $atomcount++;
+ setatom;
+}
+
+sub pushatom {
+ $atomcount--;
+ setatom;
+}
+
+sub fetchatoms {
+ @atomlist = ();
+ open(CONFIG,"config_getargs");
+ while ($line = <CONFIG>) {
+ if ($line =~ /^\#/) {
+ push(@atomlist,$line);
+ } else {
+ while (1) {
+ next if ($line =~ s/^\s+//);
+ if ($line =~ s/^\"([^\"]*)\"//) {}
+ elsif ($line =~ s/^([a-zA-Z\_][a-zA-Z\_0-9]*)//) {}
+ elsif ($line =~ s/^(\%\d*[a-zA-Z])//) {}
+ elsif ($line =~ s/^(\S)//) {}
+ else { last }
+ push(@atomlist,$1);
+ }
+ }
+ }
+ close(CONFIG);
+ push(@atomlist,"end");
+ $atomcount = 0;
+ setatom;
+}
+
+sub enum_value {
+ my $enum = '';
+ getatom; $enum = $atom;
+ getatom; die if $atom ne '=';
+ getatom;
+ getatom;
+ return $enum;
+}
+
+sub sub_title_item {
+ my $item;
+ if ($atom =~ /^[a-zA-Z0-9]/) {
+ $item = $atom;
+ }
+ elsif ($atom eq '%d') {
+ $item = "<VAL>"
+ }
+ elsif ($atom eq '%64x') {
+ $item = "<VAL>"
+ }
+ elsif ($atom eq '%e') {
+ getatom;
+ die "'{' expected at beginning of enum list\n" if $atom ne '{';
+ $item = enum_value;
+ while ($atom eq ';') {
+ $item .= "|" . enum_value;
+ }
+ $item = "{$item}";
+ die "'}' expected at end of enum list - got $atom\n" if $atom ne '}';
+ }
+ getatom if defined($item);
+ return $item;
+}
+
+sub title_item {
+ my $title_item = sub_title_item;
+ my $next_item;
+ die "syntax error in title - atom is $atom" if !defined($title_item);
+ while(defined($next_item = sub_title_item)) {
+ $title_item = "$title_item $next_item";
+ }
+ return $title_item;
+}
+
+sub substitute {
+ @t=();
+ foreach $t (split /\|/,$_[0]) {
+ $t =~ s/VAL/$_[1]/;
+ push(@t,$t);
+ }
+ return join '|',@t;
+}
+
+sub process_item {
+ my $comment="";
+ while ($atom =~ /^\#/) {
+ $comment .= "#$1\n" if $atom =~ /^\#C\s*(.*)/;
+ getatom;
+ }
+ my $title_item;
+ $title_item = title_item;
+ while ($atom eq '|') {
+ getatom;
+ $title_item .= "|" . title_item;
+ }
+ die "expected ':'\n" if $atom ne ':';
+
+ my $minus = 0;
+ while ($atom =~ /^(\:|\,)$/) {
+ getatom;
+ my $type = $atom;
+ last if $atom eq '{';
+ getatom;
+ my $field = $atom;
+ getatom;
+ my $mask = $atom;
+ getatom;
+ die "expected three fields\n" if !defined($atom);
+
+#$execute .= "printf(\"executing for $type $field $mask\\n\");\n";
+
+ if ($type !~ /^MASK\_(.*)$/) {
+ $title_item = substitute($title_item,$field);
+ }
+ $minus = 1 if $type eq 'BIT32' || $type =~ /^MASK\_/;
+ }
+
+ $t = $title_item;
+ while ($t=~s/\{[^\}]*\}//) {}
+ $title_item = "{$title_item}" if $t =~/\|/;
+ $title_item = "[-]$title_item" if $minus;
+
+ my $inner;
+ my $inner_count = 0;
+ if ($atom eq '{') {
+ getatom;
+ $inner = process_item();
+ $inner_count++ if $inner;
+ while ($atom ne '}') {
+ $t = process_item();
+ if ($t) {
+ $inner .= "|" . $t;
+ $inner_count++;
+ }
+ }
+ }
+ else {
+ die "expected ';' or '{'\n" if $atom ne ';';
+ }
+ if ($inner_count==1) {
+ $execute = " [$inner]";
+ }
+ elsif ($inner_count>=2) {
+ $execute = " [$inner]...";
+ }
+ else {
+ $execute = "";
+ }
+ getatom;
+#$t=$title_item;
+#$t =~ s/\n/\\n/sg;
+#$t =~ s/\"/\\\"/g;
+#$title_item = "(printf(\"checking $t i = %d (%s)\\n\",i,argv[i])||1) && ($title_item)";
+ $comment = "\n$comment\n" if $comment;
+ $execute = "$comment$title_item$execute";
+ return $execute;
+}
+
+
+sub process_expire {
+ while ($atom =~ /^\#/) {
+ getatom;
+ }
+ my $title_item;
+ $title_item = title_item;
+ while ($atom eq '|') {
+ getatom;
+ $title_item .= "|" . title_item;
+ }
+ die "expected ':'\n" if $atom ne ':';
+
+ my $minus = 0;
+ my $execute = '';
+ while ($atom =~ /^(\:|\,)$/) {
+ getatom;
+ my $type = $atom;
+ last if $atom eq '{';
+ getatom;
+ my $field = $atom;
+ getatom;
+ my $mask = $atom;
+ getatom;
+ die "expected three fields\n" if !defined($atom);
+
+#$execute .= "printf(\"executing for $type $field $mask\\n\");\n";
+
+ $minus = 1 if $type =~ /^MASK\_(.*)$/;
+ }
+
+ $t = $title_item;
+ while ($t=~s/\{[^\}]*\}//) {}
+ $title_item = "{$title_item}" if $t =~/\|/;
+ $title_item = "[-|=]$title_item" if $minus;
+
+ my $inner;
+ my $inner_count = 0;
+ if ($atom eq '{') {
+ getatom;
+ $inner = process_expire();
+ $inner_count++ if $inner;
+ while ($atom ne '}') {
+ $t = process_expire();
+ if ($t) {
+ $inner .= "|" . $t;
+ $inner_count++;
+ }
+ }
+ }
+ else {
+ die "expected ';' or '{'\n" if $atom ne ';';
+ }
+ if ($inner_count==1) {
+ $execute = " [$inner]";
+ }
+ elsif ($inner_count>=2) {
+ $execute = " [$inner]...";
+ }
+ else {
+ $execute = "";
+ }
+ getatom;
+#$t=$title_item;
+#$t =~ s/\n/\\n/sg;
+#$t =~ s/\"/\\\"/g;
+#$title_item = "(printf(\"checking $t i = %d (%s)\\n\",i,argv[i])||1) && ($title_item)";
+ $execute = "$title_item$execute";
+ return $minus ? $execute : "";
+}
+
+
+
+
+
+############ main
+
+fetchatoms;
+$output .= process_item;
+while ($atom ne 'end') {
+ $output .= "\n" . process_item;
+}
+
+fetchatoms;
+$output_expire = "<ax_timeout>\n" . process_expire;
+while ($atom ne 'end') {
+ $t = process_expire;
+ $output_expire .= "\n" . $t if $t;
+}
+my @output = ();
+foreach $line(split "\n",$output) {
+ if ($line =~ /\#(.*)/) {
+ push(@output,$1);
+ } else {
+ while (length($line) > 70) {
+ for($i=69;substr($line,$i,1) !~ /\|| /;$i--) {}
+ push(@output," " . substr($line,0,$i+1));
+ $line = " " . substr($line,$i+1);
+ }
+ push(@output," " . $line);
+ }
+}
+$output = join "\n",@output;
+@output = ();
+foreach $line(split "\n",$output_expire) {
+ while (length($line) > 70) {
+ for($i=69;substr($line,$i,1) !~ /\|| / ||
+ substr($line,$i-1,3) =~ /\-\|\=/;$i--) {}
+ push(@output," " . substr($line,0,$i+1));
+ $line = " " . substr($line,$i+1);
+ }
+ push(@output," " . $line);
+}
+$output_expire = join "\n",@output;
+
+$usage = <<EOM;
+Usage: To set or unset various options:
+
+ xkbset <options>
+
+where <options> may be all or any of (the '-' switches the feature off,
+otherwise it is switched on):
+$output
+
+
+
+To set the AccessX expire controls:
+
+ xkbset exp <options>
+
+where <options> may be all or any of (<ax_timeout> is the timeout (in
+seconds) after which no user activity on X will cause the expiry; '-'
+indicates the feature will be switched off, '=' incicates the feature
+will be left unchanged, otherwise it will be switched on):
+
+$output_expire
+
+To see the current values of the controls:
+
+ xkbset q
+
+To see the current values of what controls will expire:
+
+ xkbset q exp
+
+To have these values written as a command line:
+
+ xkbset w [exp]
+
+To print this help message
+
+ xkbset [h]
+
+EOM
+
+$usage =~ s/^(.*)$/ printf\(\"$1\\n\"\);/mg;
+
+open(GETC,">usage.c");
+open(COPY,"COPYRIGHT");
+$copy = join '',<COPY>;
+print GETC <<EOM
+/*
+$copy
+*/
+
+#include "xkbset.h"
+
+void print_usage()
+{
+$usage
+}
+EOM