diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/cfg2html.pl | 550 | ||||
-rwxr-xr-x | scripts/cfg_defs.sh | 48 | ||||
-rwxr-xr-x | scripts/cfg_edit.sh | 17 | ||||
-rwxr-xr-x | scripts/cfg_path.sh | 5 | ||||
-rwxr-xr-x | scripts/conf.mingw.sh | 32 | ||||
-rwxr-xr-x | scripts/config.djgpp.sh | 24 | ||||
-rwxr-xr-x | scripts/fixtext.sh | 10 | ||||
-rwxr-xr-x | scripts/indent.sh | 152 | ||||
-rwxr-xr-x | scripts/install-cfg.sh | 86 | ||||
-rwxr-xr-x | scripts/install-lss.sh | 38 | ||||
-rwxr-xr-x | scripts/man2hlp.sh | 22 | ||||
-rwxr-xr-x | scripts/tbl2html.pl | 364 |
12 files changed, 1348 insertions, 0 deletions
diff --git a/scripts/cfg2html.pl b/scripts/cfg2html.pl new file mode 100755 index 00000000..78d6e421 --- /dev/null +++ b/scripts/cfg2html.pl @@ -0,0 +1,550 @@ +#!/usr/bin/perl -w +# $LynxId: cfg2html.pl,v 1.16 2012/02/04 00:54:50 tom Exp $ +# +# This script uses embedded formatting directives in the lynx.cfg file to +# guide it in extracting comments and related information to construct a +# set of HTML files. Comments begin with '#', and directives with '.'. +# Directives implemented: +# +# h1 {Text} +# major heading. You may specify the same major heading in +# more than one place. +# h2 {Text} +# minor heading, i.e. a keyword. +# ex [number] +# the following line(s) are an example. The [number] defaults +# to 1. +# nf [number] +# turn justification off for the given number of lines, defaulting +# to the remainder of the file. +# fi +# turn justification back on +# url text +# embed an HREF to external site. +# +use strict; + +use Getopt::Std; + +use vars qw($opt_a $opt_m $opt_s); + +use vars qw(@cats); +use vars qw(%cats); + +use vars qw(@settings_avail); +use vars qw(%settings_avail); + +# Options: +# -a show all options, not only those that are available. +# -m mark unavailable options with an '*'. Data for this is read +# from standard input. +# -s sort entries in body.html +&getopts('ams'); + +if ( defined $opt_m ) { + my $l; + my @settings_ = <STDIN>; + %settings_avail = (); + foreach $l (@settings_) { + chop $l; + if ($l =~ /^[[:alpha:]_][[:alnum:]_]*$/) { + $settings_avail{uc $l} = 1; + } + } +} else { + $opt_a = 1; +} + +# This sub tells whether the support for the given setting was enabled at +# compile time. +sub ok { + my ($name) = @_; + my $ret = defined($settings_avail{uc $name})+0; + $ret; +} + + +if ( $#ARGV < 0 ) { + &doit("lynx.cfg"); +} else { + while ( $#ARGV >= 0 ) { + &doit ( shift @ARGV ); + } +} +exit (0); + + +# process a Lynx configuration-file +sub doit { + my ($name) = @_; + my $n; + + # Ignore our own backup files + if ( $name =~ ".*~" ) { + return; + } + + # Read the file into an array in memory. + open(FP,$name) || do { + print STDERR "Can't open $name: $!\n"; + return; + }; + my (@input) = <FP>; + close(FP); + + for $n (0..$#input) { + chop $input[$n]; # trim newlines + $input[$n] =~ s/\s*$//; # trim trailing blanks + $input[$n] =~ s/^\s*//; # trim leading blanks + } + + &gen_alphatoc(@input); + @cats = &gen_cattoc(@input); + &gen_body(@input); +} + +sub gen_alphatoc { + my (@input) = @_; + my @minor; + my ($n, $m, $c, $d); + my $output = "alphatoc.html"; + open(FP,">$output") || do { + print STDERR "Can't open $output: $!\n"; + return; + }; + print FP <<'EOF'; +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<link rev="made" href="mailto:lynx-dev@nongnu.org"> +<title>Settings by name</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> +<body> +<h1>Alphabetical table of settings</h1> +EOF + $m=0; + for $n (0..$#input) { + if ( $input[$n] =~ /^\.h2\s*[[:upper:]][[:upper:][:digit:]_]*$/ ) { + $minor[$m] = $input[$n]; + $minor[$m] =~ s/^.h2\s*//; + $m++ if (ok($minor[$m]) || defined $opt_a); + } + } + @minor = sort @minor; + # index by the first character of each keyword + $c=' '; + for $n (0..$#minor) { + $d = substr($minor[$n],0,1); + if ($d ne $c) { + printf FP "<a href=\"#%s\">%s</a> \n", $d, $d; + $c=$d; + } + } + # index by the first character of each keyword + $c=' '; + for $n (0..$#minor) { + $d = substr($minor[$n],0,1); + if ($d ne $c) { + printf FP "<h2><a name=%s>%s</a></h2>\n", $d, $d; + $c=$d; + } + my $avail = ok($minor[$n]); + my $mark = (!$avail && defined $opt_m) ? "*" : ""; + if (defined $opt_a || $avail) { + printf FP "<a href=\"body.html#%s\">%s</a> \n", $minor[$n], $minor[$n] . $mark; + }; + } + my $str = <<'EOF' +<p> +<a href=cattoc.html>To list of settings by category</a> +EOF +. (defined $opt_a && defined $opt_m ? +"<p>Support for all settings suffixed with '*' was disabled at compile time.\n" : + "") . <<'EOF' +</body> +</html> +EOF + ;print FP $str; + close(FP); +} + +# This uses the associative array $cats{} to store HREF values pointing into +# the cattoc file. +# +# We could generate this file in alphabetic order as well, but choose to use +# the order of entries in lynx.cfg, since some people expect that arrangement. +sub gen_body { + my @input = @_; + my ($n, $c); + my @h2; + my $output = "body.html"; + open(FP,">$output") || do { + print STDERR "Can't open $output: $!\n"; + return; + }; + print FP <<'EOF'; +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<link rev="made" href="mailto:lynx-dev@nongnu.org"> +<title>Description of settings in lynx configuration file</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> +<body> +EOF + my $l; + my $t; + my $d = -1; + my $p = 0; + my $m = 0; + my $h1 = ""; + my $sp = ' '; + my $ex = 0; + my $nf = 0; + my $any = 0; + my $first = 0; + my $next = 0; + my $left = 0; + my %keys; + undef %keys; + + my @optnames; + my %optname_to_fname; #this maps optname to fname - will be used + #for alphabetical output of the content + my $curfilename = "tmp000"; #will be incremented each time + my $tmpdir = "./"; #temp files will be created there + close(FP); + + for $n (0..$#input) { + if ( $next ) { + $next--; + next; + } + $c = $input[$n]; + my $count = $#input; + my $once = 1; + if ( $c =~ /^\.h1\s/ ) { + $h1 = 1; + $h1 = $c; + $h1 =~ s/^.h1\s*//; + $m = 0; + $first = 1; + undef %keys; + next; + } elsif ( $c =~ /^\.h2\s/ ) { + $c =~ s/^.h2\s*//; + $h2[$m] = $c; + $keys{$c} = 1; + $m++; + next; + } elsif ( $c =~ /^\./ ) { + my $s = $c; + $s =~ s/^\.[[:lower:]]+\s//; + if ( $s =~ /^[[:digit:]]+$/ ) { + $count = $s; + $once = $s; + } + } + if ( $c =~ /^\.ex/ ) { + $ex = $once; + printf FP "<h3><em>Example%s:</em></h3>\n", $ex > 1 ? "s" : ""; + } elsif ( $c =~ /^\.url/ ) { + my $url = $c; + $url =~ s/^\.url\s+//; + printf FP "<blockquote><a href=\"%s\">%s</a></blockquote>\n", $url, $url; + } elsif ( $c =~ /^\.nf/ ) { + printf FP "<pre>\n"; + $nf = $count; + } elsif ( $c =~ /^\.fi/ ) { + printf FP "</pre>\n"; + $nf = 0; + } elsif ( $c =~ /^$/ ) { + if ( $m > 1 ) { + my $j; + for $j (1..$#h2) { + close(FP);++$curfilename; + push @optnames,$h2[$j]; + open(FP,">$tmpdir/$curfilename") || do { + print STDERR "Can't open tmpfile: $!\n"; + return; + }; + $optname_to_fname{$h2[$j]} = $curfilename; + + printf FP "<hr>\n"; + printf FP "<h2><kbd><a name=\"%s\">%s</a></kbd>\n", $h2[$j], $h2[$j]; + if ( $h1 ne "" ) { + printf FP " – <a href=\"cattoc.html#%s\">%s</a>", $cats{$h1}, $h1; + } + printf FP "</h2>\n"; + printf FP "<h3><em>Description</em></h3>\n"; + printf FP "Please see the description of <a href=\"#%s\">%s</a>\n", $h2[0], $h2[0]; + } + @h2 = ""; + } + $m = 0; + $first = 1; + } elsif ( $c =~ /^[#[:alpha:]]/ && $m != 0 ) { + if ( $first ) { + close(FP);++$curfilename; + push @optnames,$h2[0]; + open(FP,">$tmpdir/$curfilename") || do { + print STDERR "Can't open tmpfile: $!\n"; + return; + }; + $optname_to_fname{$h2[0]} = $curfilename; + + if ( $any ) { + printf FP "<hr>\n"; + } + printf FP "<h2><kbd><a name=\"%s\">%s</a></kbd>\n", $h2[0], $h2[0]; + if ( $h1 ne "" ) { + printf FP " – <a href=\"cattoc.html#%s\">%s</a>", $cats{$h1}, $h1; + } + printf FP "</h2>\n"; + printf FP "<h3><em>Description</em></h3>\n"; + $any++; + $first = 0; + } + + # Convert tabs first, to retain relative alignment + $c =~ s#^\t#' 'x8#e; + while ( $c =~ /\t/ ) { + $c =~ s#(^[^\t]+)\t#$1 . $sp x (9 - (length($1) % 8 ))#e; + } + + # Strip off the comment marker + $c =~ s/^#//; + + # and convert simple expressions: + $c =~ s/&/&/g; + $c =~ s/>/>/g; + $c =~ s/</</g; + #hvv - something wrong was with next statement + $c =~ s/'([^ ])'/"<strong>$1<\/strong>"/g; + + my $k = 0; + if ( $c =~ /^[[:alpha:]_][[:alnum:]_]+:/ ) { + $t = $c; + $t =~ s/:.*//; + $k = $keys{$t}; + } + + if ( $c =~ /^$/ ) { + if ( $nf ) { + printf FP "\n"; + } else { + $p = 1; + } + } elsif ( $ex != 0 ) { + printf FP "<br><code>%s</code><br>\n", $c; + $ex--; + } elsif ( $k ) { + if ( $d != $n && ! $nf ) { + printf FP "<h3><em>Default value</em></h3>\n"; + } + $c =~ s/:$/:<em>none<\/em>/; + $c =~ s/:/<\/code>:<code>/; + $c = "<code>" . $c . "</code>"; + if ( ! $nf ) { + $c .= "<br>"; + } + printf FP "%s\n", $c; + $d = $n + 1; + } else { + if ( $p && ! $nf ) { + printf FP "<p>\n"; + } + $p = 0; + if ( $input[$n+1] =~ /^#\s*==/ ) { + $c = "<br><em>$c</em>"; + if ( ! $nf ) { + $c .= "<br>"; + } + $next++; + } + printf FP "%s\n", $c; + } + if ( $nf != 0 && $nf-- == 0 ) { + printf FP "</pre>\n"; + } + } + } + close(FP); + # Here we collect files with description of needed lynx.cfg + # options in the proper (natural or sorted) order. + open(FP,">>$output") || do { + print STDERR "Can't open $output: $!\n"; + return; + }; + { + my @ordered = (defined $opt_s ? (sort keys(%optname_to_fname)) : @optnames); + if (defined $opt_s) { + print FP "Options are sorted by name.\n"; + } else { + print FP "Options are in the same order as lynx.cfg.\n"; + } + foreach $l (@ordered) { + my $fnm = $tmpdir . $optname_to_fname{$l}; + open(FP1,"<$fnm") || do { + print STDERR "Can't open $fnm: $!\n"; + return; + }; + my $avail = ok($l); + if (defined $opt_a || $avail) { + my @lines = <FP1>; + print FP @lines; + if (!$avail && defined $opt_m) { + print FP <<'EOF'; +<p>Support for this setting was disabled at compile-time. +EOF + } + } + close(FP1); + } + foreach $l (values(%optname_to_fname)) { + unlink $l; + } + } + + print FP <<'EOF'; +</body> +</html> +EOF + close(FP); +} + +sub gen_cattoc { + my @input = @_; + my @major; + my %descs; + my %index; + my ($n, $m, $c, $d, $found, $h1, $nf, $ex, $count, $once); + my $output = "cattoc.html"; + + open(FP,">$output") || do { + print STDERR "Can't open $output: $!\n"; + return; + }; + print FP <<'EOF'; +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<link rev="made" href="mailto:lynx-dev@nongnu.org"> +<title>Settings by category</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> +<body> +<h1>Settings by category</h1> +These are the major categories of configuration settings in Lynx: +<ul> +EOF + $m = -1; + $h1 = 0; + $nf = 0; + for $n (0..$#input) { + my $count = $#input; + my $once = 1; + $c = $input[$n]; + if ( $input[$n] =~ /^\.h1\s/ ) { + $h1 = 1; + $c =~ s/^.h1\s*//; + $m = $#major + 1; + $d = 0; + $found = 0; + while ( $d <= $#major && ! $found ) { + if ( $major[$d] eq $c ) { + $m = $d; + $found = 1; + } + $d++; + } + if ( ! $found ) { + $major[$m] = $c; + $descs{$major[$m]} = ""; + $index{$major[$m]} = ""; + } + next; + } elsif ( $h1 != 0 ) { + if ( $c =~ /^\.(nf|ex)/ ) { + my $s = $c; + $s =~ s/^\.[[:lower:]]+\s//; + if ( $s =~ /^[[:digit:]]+$/ ) { + $count = $s; + $once = $s; + } + } + if ( $input[$n] =~ /^$/ ) { + $h1 = 0; + } elsif ( $input[$n] =~ /^\.nf/ ) { + $descs{$major[$m]} .= "<pre>" . "\n"; + $nf = $count; + } elsif ( $input[$n] =~ /^\.fi/ ) { + $descs{$major[$m]} .= "</pre>" . "\n"; + $nf = 0; + } elsif ( $input[$n] =~ /^\.ex/ ) { + $ex = $once; + $descs{$major[$m]} .= + "<h3><em>Example" + . + ($ex > 1 ? "s" : "") + . + ":</em></h3>\n" + . "\n"; + } elsif ( $input[$n] =~ /^\s*#/ ) { + $c = $input[$n]; + $c =~ s/^\s*#\s*//; + $descs{$major[$m]} .= $c . "\n"; + } + } + if ( $m >= 0 && $input[$n] =~ /^\.h2\s/ ) { + $c = $input[$n]; + $c =~ s/^.h2\s*//; + $index{$major[$m]} .= $c . "\n" + if (defined $opt_a || ok($c)); + $h1 = 0; + } + if ( $nf != 0 && $nf-- == 0 ) { + $descs{$major[$m]} .= "</pre>\n"; + } + } + @major = sort @major; + for $n (0..$#major) { + $cats{$major[$n]} = sprintf("header%03d", $n); + printf FP "<li><a href=\"#%s\">%s</a>\n", $cats{$major[$n]}, $major[$n]; + } + printf FP "</ul>\n"; + for $n (0..$#major) { + printf FP "\n"; + printf FP "<h2><a name=\"%s\">%s</a></h2>\n", $cats{$major[$n]}, $major[$n]; + if ($descs{$major[$n]} !~ /^$/) { + printf FP "<h3>Description</h3>\n%s\n", $descs{$major[$n]}; + } + $c = $index{$major[$n]}; + if ( $c ne "" ) { + my @c = split(/\n/, $c); + @c = sort @c; + printf FP "<p>Here is a list of settings that belong to this category\n"; + printf FP "<ul>\n"; + for $m (0..$#c) { + my $avail = ok($c[$m]); + my $mark = (!$avail && defined $opt_m) ? "*" : ""; + printf FP "<li><a href=\"body.html#%s\">%s</a>\n", $c[$m], $c[$m] . $mark; + } + printf FP "</ul>\n"; + } + } + my $str = <<'EOF' +<p> +<a href=alphatoc.html>To list of settings by name</a> +EOF +. (defined $opt_a && defined $opt_m ? +"<p>Support for all settings suffixed with '*' was disabled at compile time." : + "") . <<'EOF' +</body> +</html> +EOF + ;print FP $str; + close(FP); + return @cats; +} diff --git a/scripts/cfg_defs.sh b/scripts/cfg_defs.sh new file mode 100755 index 00000000..5f37e962 --- /dev/null +++ b/scripts/cfg_defs.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Translate the lynx_cfg.h and config.cache data into a table, useful for +# display at runtime. + +TOP="${1-.}" +OUT=cfg_defs.h + +# just in case we want to run this outside the makefile +: ${SHELL:=/bin/sh} + +cat >$OUT <<EOF +#ifndef CFG_DEFS_H +#define CFG_DEFS_H 1 + +static const struct { + const char *name; + const char *value; +} config_cache[] = { +EOF + +sed \ + -e '/^#/d' \ + -e 's/^.[^=]*_cv_//' \ + -e 's/=\${.*=/=/' \ + -e 's/}$//' \ + config.cache | $SHELL $TOP/scripts/cfg_edit.sh >>$OUT + +cat >>$OUT <<EOF +}; + +static const struct { + const char *name; + const char *value; +} config_defines[] = { +EOF +fgrep '#define' lynx_cfg.h | +sed -e 's@ @ @g' \ + -e 's@ @ @g' \ + -e 's@^[ ]*#define[ ]*@@' \ + -e 's@[ ]*/\*.*\*/@@' \ + -e 's@[ ][ ]*@=@' \ + | $SHELL $TOP/scripts/cfg_edit.sh >>$OUT + +cat >>$OUT <<EOF +}; + +#endif /* CFG_DEFS_H */ +EOF diff --git a/scripts/cfg_edit.sh b/scripts/cfg_edit.sh new file mode 100755 index 00000000..6206c6c4 --- /dev/null +++ b/scripts/cfg_edit.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Invoked from cfg_defs.sh as a filter +# Strip leading and trailing whitespace +# Escape any iternal '\' +# Escape any iternal '"' +# Entify any iternal '&', '<' or '>' +# Append a '=' if none present' +# Break into two strings at '=' +# Prefix ' { "' and suffix '" },' +sort | +sed -e 's!^[ ]*!!' -e 's![ ]*$!!' \ + -e 's!\\!\\\\!g' \ + -e 's!"!\\"!g' \ + -e 's!&!\&!g' -e 's!<!\<!g' -e 's!>!\>!g' \ + -e 's!^[^=]*$!&=!' \ + -e 's!=!", "!' \ + -e 's!^! { "!' -e 's!$!" },!' diff --git a/scripts/cfg_path.sh b/scripts/cfg_path.sh new file mode 100755 index 00000000..321f5b93 --- /dev/null +++ b/scripts/cfg_path.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# Use this script for substituting the configured path into lynx.cfg - +# not all paths begin with a slash. +SECOND=`echo "$2" | sed -e 's,^/,,'` +sed -e "/^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]*:file:/s,/PATH_TO/$1,/$SECOND," diff --git a/scripts/conf.mingw.sh b/scripts/conf.mingw.sh new file mode 100755 index 00000000..59b398d1 --- /dev/null +++ b/scripts/conf.mingw.sh @@ -0,0 +1,32 @@ +#!/bin/bash.exe +LDFLAGS="-mno-cygwin -static -L/mingw/lib" \ +LIBS="-lwsock32 -lgdi32 -lmsvcrt -liconv" \ +CFLAGS="-mno-cygwin -I/mingw/include -I/mingw/include/openssl -W -Wall -O3 -D_WINDOWS -DSH_EX -DWIN_EX -DNOUSERS -DNOSIGHUP -DDOSPATH -DUSE_ALT_BLAT_MAILER -DBOXHORI=0 -DBOXVERT=0" \ +CPPFLAGS="-mno-cygwin -I/mingw/include -I/mingw/include/openssl" \ +./configure --prefix=/d/cygwin/mingw/lynx2.8.7dev.13/lynx-conf \ +--host=mingw32 \ +--disable-dired-override \ +--disable-full-paths \ +--enable-addrlist-page \ +--enable-change-exec \ +--enable-charset-choice \ +--enable-default-colors \ +--enable-exec-links \ +--enable-externs \ +--enable-file-upload \ +--enable-gzip-help \ +--enable-nested-tables \ +--enable-nls \ +--enable-vertrace \ +--includedir=/mingw/include \ +--sysconfdir=/d/cygwin/mingw/lynx2.8.7dev.13/lynx-conf \ +--datadir=/d/cygwin/mingw/lynx2.8.7dev.13/lynx-conf \ +--with-bzlib \ +--with-cfg-file=d:/cygwin/mingw/lynx2.8.7dev.13/lynx-conf/lynx.cfg \ +--with-lss-file=d:/cygwin/mingw/lynx2.8.7dev.13/lynx-conf/lynx.lss \ +--with-mime-libdir=c:/ \ +--with-nls-datadir=d:/cygwin/mingw/share \ +--with-pkg-config=no \ +--with-screen=curses \ +--with-ssl=/mingw/lib \ +--with-zlib diff --git a/scripts/config.djgpp.sh b/scripts/config.djgpp.sh new file mode 100755 index 00000000..fa4dcfee --- /dev/null +++ b/scripts/config.djgpp.sh @@ -0,0 +1,24 @@ +#!/bin/sh +CFLAGS="-g -gcoff -O2 -W -Wall -I/dev/env/DJDIR/pdcur_cvs/PDCurses -I/dev/env/DJDIR/watt32/inc" \ +CPPFLAGS="-DBOXHORI=0 -DBOXVERT=0 -I/dev/env/DJDIR/pdcur_cvs/PDCurses -I/dev/env/DJDIR/watt32/inc" \ +LIBS="-L/dev/env/DJDIR/pdcur_cvs/PDCurses/lib -L/dev/env/DJDIR/watt32/lib -lwmemu" \ +/dev/env/DJDIR/bin/bash.exe ./configure \ +--datadir=/dev/env/DJDIR/lib \ +--sysconfdir=/dev/env/DJDIR/lib \ +--disable-dired-override \ +--disable-full-paths \ +--enable-addrlist-page \ +--enable-change-exec \ +--enable-cgi-links \ +--enable-charset-choice \ +--enable-exec-links \ +--enable-externs \ +--enable-nested-tables \ +--enable-nls \ +--enable-scrollbar \ +--enable-vertrace \ +--with-bzlib \ +--with-mime-libdir=/dev/env/DJDIR/lib \ +--with-screen=curses \ +--with-ssl \ +--with-zlib diff --git a/scripts/fixtext.sh b/scripts/fixtext.sh new file mode 100755 index 00000000..1f5c1abd --- /dev/null +++ b/scripts/fixtext.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# xgettext only processes literal strings. Someone with a poor sense of humor +# decided to ignore strings in preprocessor lines. So we construct a fake +# ".c" file with the definitions turned into literals. + +sed -e 's/")/");/' \ + -e 's/^#define[ ]*\([^ ]*\)[ ]*gettext/char *\1 = gettext/' \ + -e 's,^#define[ ]*\([^ ]*\)[ ]*\\,/* #define \1 */char *\1 = \\,' \ + $* diff --git a/scripts/indent.sh b/scripts/indent.sh new file mode 100755 index 00000000..899870de --- /dev/null +++ b/scripts/indent.sh @@ -0,0 +1,152 @@ +#!/bin/sh +# $LynxId: indent.sh,v 1.3 2007/05/13 16:26:51 tom Exp $ +# Indent LYNX files. +NOOP=no +OPTS=' +--blank-lines-after-declarations +--blank-lines-after-procedures +--braces-on-if-line +--continue-at-parentheses +--cuddle-else +--dont-break-procedure-type +--indent-level4 +--leave-preprocessor-space +--line-length80 +--no-space-after-function-call-names +--parameter-indentation4 +--space-after-cast +--space-special-semicolon +--swallow-optional-blank-lines +-T AddressDefList +-T BOOL +-T BOOLEAN +-T CSOfield_info +-T DIR +-T DocAddress +-T DocInfo +-T DocObj +-T EntryInfo +-T EditFieldData +-T FILE +-T GCC_NORETURN +-T GCC_UNUSED +-T GLOBALREF +-T GroupDef +-T GroupDefList +-T HTAAFailReasonType +-T HTAAProt +-T HTAARealm +-T HTAAServer +-T HTAssoc +-T HTAssocList +-T HTAtom +-T HTBTElement +-T HTBTree +-T HTChildAnchor +-T HTChunk +-T HTConverter +-T HTFormat +-T HTLine +-T HTLinkType +-T HTList +-T HTParentAnchor +-T HTParentAnchor0 +-T HTPresentation +-T HTStream +-T HTStyle +-T HTStyleChange +-T HTStyleSheet +-T HText +-T HyperDoc +-T InitResponseAPDU +-T Item +-T ItemList +-T LYNX_ADDRINFO +-T LYNX_HOSTENT +-T LYUCcharset +-T LexItem +-T ProgramPaths +-T STable_cellinfo +-T STable_info +-T STable_rowinfo +-T STable_states +-T SearchAPDU +-T SearchResponseAPDU +-T TextAnchor +-T UCode_t +-T UserDefList +-T WAISDocumentCodes +-T WAISDocumentHeader +-T WAISDocumentHeadlines +-T WAISDocumentLongHeader +-T WAISDocumentShortHeader +-T WAISDocumentText +-T WAISInitResponse +-T WAISSearch +-T _cdecl +-T any +-T bit_map +-T boolean +-T bstring +-T data_tag +-T eServerType +-T lynx_list_item_type +-T pdu_type +-T query_term +-nbacc +' +for name in $* +do + case $name in + -n) NOOP=yes + OPTS="$OPTS -v" + ;; + -*) + OPTS="$OPTS $name" + ;; + *.[ch]) + save="${name}".a$$ + test="${name}".b$$ + rm -f "$save" "$test" + mv "$name" "$save" + sed \ + -e '/MODULE_ID(/s/)$/);/' \ + -e 's,)[ ]*\<GCC_PRINTFLIKE,);//GCC_PRINTFLIKE,' \ + -e 's,[ ]*\<GCC_NORETURN;,;//GCC_NORETURN;,' \ + -e 's,[ ]*\<GCC_UNUSED;,;//GCC_UNUSED;,' \ + "$save" >"$test" + cp "$test" "$name" + chmod u+w "$name" + ${INDENT_PROG-indent} -npro $OPTS "$name" + sed \ + -e '/MODULE_ID(/s/);$/)/' \ + -e 's,;[ ]*//GCC_UNUSED;, GCC_UNUSED;,' \ + -e 's,;[ ]*//GCC_NORETURN;, GCC_NORETURN;,' \ + -e 's,);[ ]*//GCC_PRINTFLIKE,) GCC_PRINTFLIKE,' \ + "$name" >"$test" + mv "$test" "$name" + rm -f "${name}~" + if test $NOOP = yes ; then + if ! ( cmp -s "$name" $save ) + then + diff -u $save "$name" + fi + mv "$save" "$name" + rm -f "${name}~" + else + if ( cmp -s "$name" "$save" ) + then + echo "** unchanged $name" + rm -f "${name}" "${name}~" + mv "$save" "$name" + else + echo "** updated $name" + rm -f "$save" + fi + fi + ;; + *) + echo "** ignored: $name" + ;; + esac +done diff --git a/scripts/install-cfg.sh b/scripts/install-cfg.sh new file mode 100755 index 00000000..bd8129f6 --- /dev/null +++ b/scripts/install-cfg.sh @@ -0,0 +1,86 @@ +#!/bin/sh +# $LynxId: install-cfg.sh,v 1.3 2008/09/10 13:15:35 tom Exp $ +# install lynx.cfg, ensuring the old config-file is saved to a unique file, +# and prepending customizations to the newly-installed file. +# +# $1 = install program +# $2 = file to install +# $3 = where to install it +PRG="$1" +SRC=$2 +DST=$3 + +LANG=C; export LANG +LC_ALL=C; export LC_ALL +LC_CTYPE=C; export LC_CTYPE +LANGUAGE=C; export LANGUAGE + +if test -f "$DST" ; then + echo "** checking if you have customized $DST" + OLD=lynx-cfg.old + NEW=lynx-cfg.new + TST=lynx-cfg.tst + TMP=lynx-cfg.tmp + trap "rm -f $OLD $NEW $TST $TMP; exit 9" 1 2 5 15 + rm -f $OLD $NEW $TST $TMP + + # avoid propagating obsolete URLs into new installs + echo lynx.browser.org >$TMP + echo www.trill-home.com >>$TMP + echo www.cc.ukans.edu >>$TMP + echo www.ukans.edu >>$TMP + echo www.slcc.edu >>$TMP + echo sol.slcc.edu >>$TMP + + # Make a list of the settings which are in the original lynx.cfg + # Do not keep the user's HELPFILE setting since we modify that in + # a different makefile rule. + egrep '^[ ]*[A-Za-z]' $SRC |sed -e 's/^[ ]*HELPFILE:.*/HELPFILE:/' >>$TMP + egrep '^[ ]*[A-Za-z]' $SRC |fgrep -v -f $TMP >$OLD + egrep '^[ ]*[A-Za-z]' $DST |fgrep -v -f $TMP >$TST + + if test -s $TST ; then + cat >$TMP <<EOF +## The following lines were saved from your previous configuration. + +EOF + cat $TST >>$TMP + cat $SRC >$NEW + cat $TMP >>$NEW + + # See if we have saved this information before (ignoring the + # HELPFILE line). + if cmp -s $NEW $OLD + then + echo "... installed $DST would not be changed" + else + NUM=1 + while test -f ${DST}-${NUM} + do + if cmp -s $NEW ${DST}-${NUM} + then + break + fi + NUM=`expr $NUM + 1` + done + if test ! -f ${DST}-${NUM} + then + echo "... saving old config as ${DST}-${NUM}" + mv $DST ${DST}-${NUM} || exit 1 + fi + echo "** installing $NEW as $DST" + eval $PRG $NEW $DST || exit 1 + fi + else + echo "... no customizations found" + echo "** installing $SRC as $DST" + eval $PRG $SRC $DST || exit 1 + fi + rm -f $SKIP $OLD $NEW $TST $TMP +elif cmp -s $SRC $DST +then + echo "... installed $DST would not be changed" +else + echo "** installing $SRC as $DST" + eval $PRG $SRC $DST || exit 1 +fi diff --git a/scripts/install-lss.sh b/scripts/install-lss.sh new file mode 100755 index 00000000..6573a35e --- /dev/null +++ b/scripts/install-lss.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# $LynxId: install-lss.sh,v 1.1 2007/05/13 22:15:29 tom Exp $ +# install lynx.lss, ensuring the old config-file is saved to a backup file. +# +# $1 = install program +# $2 = file to install +# $3 = where to install it +PRG="$1" +SRC=$2 +DST=$3 + +if test -f "$DST" ; then + # See if we have saved this information before + if cmp -s $SRC $DST + then + echo "... installed $DST would not be changed" + else + NUM=1 + while test -f ${DST}-${NUM} + do + if cmp -s $SRC ${DST}-${NUM} + then + break + fi + NUM=`expr $NUM + 1` + done + if test ! -f ${DST}-${NUM} + then + echo "... saving old config as ${DST}-${NUM}" + mv $DST ${DST}-${NUM} || exit 1 + fi + echo "** installing $SRC as $DST" + eval $PRG $SRC $DST || exit 1 + fi +else + echo "** installing $SRC as $DST" + eval $PRG $SRC $DST || exit 1 +fi diff --git a/scripts/man2hlp.sh b/scripts/man2hlp.sh new file mode 100755 index 00000000..fed9b428 --- /dev/null +++ b/scripts/man2hlp.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# $LynxId: man2hlp.sh,v 1.3 2008/09/10 13:25:45 tom Exp $ +# This script uses rman (Rosetta Man), which complements TkMan, to strip +# nroff headers from a manpage file, and format the result into a VMS help +# file. + +LANG=C; export LANG +LC_ALL=C; export LC_ALL +LC_CTYPE=C; export LC_CTYPE +LANGUAGE=C; export LANGUAGE + +for name in $* +do + NAME=`echo $name |sed -e 's/\.man$/.1/'` + (echo 1 `echo $NAME | sed -e 's/^.*\///' -e 's/\..*$//' | tr '[a-z]' '[A-Z]'` ; \ + (echo '.hy 0'; cat $name) |\ + nroff -Tascii -man |\ + rman -n$NAME |\ + sed -e 's/^[1-9].*$//' \ + -e 's/^\([A-Z]\)/2 \1/' |\ + uniq) +done diff --git a/scripts/tbl2html.pl b/scripts/tbl2html.pl new file mode 100755 index 00000000..ba8ae092 --- /dev/null +++ b/scripts/tbl2html.pl @@ -0,0 +1,364 @@ +#!/usr/bin/perl -w +# $LynxId: tbl2html.pl,v 1.5 2011/05/21 15:18:16 tom Exp $ +# +# Translate one or more ".tbl" files into ".html" files which can be used to +# test the charset support in lynx. Each of the ".html" files will use the +# charset that corresponds to the input ".tbl" file. + +use strict; + +use Getopt::Std; +use File::Basename; +use POSIX qw(strtod); + +sub field($$) { + my $value = $_[0]; + my $count = $_[1]; + + while ( $count > 0 ) { + $count -= 1; + $value =~ s/^\S*\s*//; + } + $value =~ s/\s.*//; + return $value; +} + +sub notes($) { + my $value = $_[0]; + + $value =~ s/^[^#]*//; + $value =~ s/^#//; + $value =~ s/^\s+//; + + return $value; +} + +sub make_header($$$) { + my $source = $_[0]; + my $charset = $_[1]; + my $official = $_[2]; + + printf FP "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; + printf FP "<HTML>\n"; + printf FP "<HEAD>\n"; + printf FP "<!-- $source -->\n"; + printf FP "<TITLE>%s table</TITLE>\n", &escaped($official); + printf FP "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=%s\">\n", &escaped($charset); + printf FP "</HEAD>\n"; + printf FP "\n"; + printf FP "<BODY> \n"; + printf FP "\n"; + printf FP "<H1 ALIGN=center>%s table</H1> \n", &escaped($charset); + printf FP "\n"; + printf FP "<PRE>\n"; + printf FP "Code Char Entity Render Description\n"; +} + +sub make_mark() { + printf FP "---- ---- ------ ------ -----------------------------------\n"; +} + +sub escaped($) { + my $result = $_[0]; + $result =~ s/&/&/g; + $result =~ s/</</g; + $result =~ s/>/>/g; + return $result; +} + +sub make_row($$$) { + my $old_code = $_[0]; + my $new_code = $_[1]; + my $comments = $_[2]; + + # printf "# make_row %d %d %s\n", $old_code, $new_code, $comments; + my $visible = sprintf("&#%d; ", $new_code); + if ($old_code < 256) { + printf FP "%4x %c %.13s &#%d; %s\n", + $old_code, $old_code, + $visible, $new_code, + &escaped($comments); + } else { + printf FP "%4x . %.13s &#%d; %s\n", + $old_code, + $visible, $new_code, + &escaped($comments); + } +} + +sub null_row($$) { + my $old_code = $_[0]; + my $comments = $_[1]; + + if ($old_code < 256) { + printf FP "%4x %c %s\n", + $old_code, $old_code, + &escaped($comments); + } else { + printf FP "%4x . %s\n", + $old_code, + &escaped($comments); + } +} + +sub make_footer() { + printf FP "</PRE>\n"; + printf FP "</BODY>\n"; + printf FP "</HTML>\n"; +} + +# return true if the string describes a range +sub is_range($) { + return ($_[0] =~ /.*-.*/); +} + +# convert the U+'s to 0x's so strtod() can convert them. +sub zeroxes($) { + my $result = $_[0]; + $result =~ s/^U\+/0x/; + $result =~ s/-U\+/-0x/; + return $result; +} + +# convert a string to a number (-1's are outside the range of Unicode). +sub value_of($) { + my ($result, $oops) = strtod($_[0]); + $result = -1 if ($oops ne 0); + return $result; +} + +# return the first number in a range +sub first_of($) { + my $range = &zeroxes($_[0]); + $range =~ s/-.*//; + return &value_of($range); +} + +# return the last number in a range +sub last_of($) { + my $range = &zeroxes($_[0]); + $range =~ s/^.*-//; + return &value_of($range); +} + +sub one_many($$$) { + my $oldcode = $_[0]; + my $newcode = &zeroxes($_[1]); + my $comment = $_[2]; + + my $old_code = &value_of($oldcode); + if ( $old_code lt 0 ) { + printf "? Problem with number \"%s\"\n", $oldcode; + } else { + &make_mark if (( $old_code % 8 ) == 0 ); + + if ( $newcode =~ /^#.*/ ) { + &null_row($old_code, $comment); + } elsif ( &is_range($newcode) ) { + my $first_item = &first_of($newcode); + my $last_item = &last_of($newcode); + my $item; + + if ( $first_item lt 0 or $last_item lt 0 ) { + printf "? Problem with one:many numbers \"%s\"\n", $newcode; + } else { + if ( $comment =~ /^$/ ) { + $comment = sprintf("mapped: %#x to %#x..%#x", $old_code, $first_item, $last_item); + } else { + $comment = $comment . " (range)"; + } + for $item ( $first_item..$last_item) { + &make_row($old_code, $item, $comment); + } + } + } else { + my $new_code = &value_of($newcode); + if ( $new_code lt 0 ) { + printf "? Problem with number \"%s\"\n", $newcode; + } else { + if ( $comment =~ /^$/ ) { + $comment = sprintf("mapped: %#x to %#x", $old_code, $new_code); + } + &make_row($old_code, $new_code, $comment); + } + } + } +} + +sub many_many($$$) { + my $oldcode = $_[0]; + my $newcode = $_[1]; + my $comment = $_[2]; + + my $first_old = &first_of($oldcode); + my $last_old = &last_of($oldcode); + my $item; + + if (&is_range($newcode)) { + my $first_new = &first_of($newcode); + my $last_new = &last_of($newcode); + for $item ( $first_old..$last_old) { + &one_many($item, $first_new, $comment); + $first_new += 1; + } + } else { + for $item ( $first_old..$last_old) { + &one_many($item, $newcode, $comment); + } + } +} + +sub approximate($$$) { + my $values = $_[0]; + my $expect = sprintf("%-8s", $_[1]); + my $comment = $_[2]; + my $escaped = &escaped($expect); + my $left; + my $this; + my $next; + + $escaped =~ s/\\134/\\/g; + $escaped =~ s/\\015/\
\;/g; + $escaped =~ s/\\012/\
\;/g; + + while ( $escaped =~ /^.*\\[0-7]{3}.*$/ ) { + $left = $escaped; + $left =~ s/\\[0-7]{3}.*//; + $this = substr $escaped,length($left)+1,3; + $next = substr $escaped,length($left)+4; + $escaped = sprintf("%s&#%d;%s", $left, oct $this, $next); + } + + my $visible = sprintf("&#%d; ", $values); + if ($values < 256) { + printf FP "%4x %c %.13s &#%d; approx: %s\n", + $values, $values, + $visible, + $values, + $escaped; + } else { + printf FP "%4x . %.13s &#%d; approx: %s\n", + $values, + $visible, + $values, + $escaped; + } +} + +sub doit($) { + my $source = $_[0]; + + printf "** %s\n", $source; + + my $target = basename($source, ".tbl"); + + # Read the file into an array in memory. + open(FP,$source) || do { + print STDERR "Can't open input $source: $!\n"; + return; + }; + my (@input) = <FP>; + chomp @input; + close(FP); + + my $n; + my $charset = ""; + my $official = ""; + my $empty = 1; + + for $n (0..$#input) { + $input[$n] =~ s/\s*$//; # trim trailing blanks + $input[$n] =~ s/^\s*//; # trim leading blanks + $input[$n] =~ s/^#0x/0x/; # uncomment redundant stuff + + next if $input[$n] =~ /^$/; + next if $input[$n] =~ /^#.*$/; + + if ( $empty + and ( $input[$n] =~ /^\d/ + or $input[$n] =~ /^U\+/ ) ) { + $target = $charset . ".html"; + printf "=> %s\n", $target; + open(FP,">$target") || do { + print STDERR "Can't open output $target: $!\n"; + return; + }; + &make_header($source, $charset, $official); + $empty = 0; + } + + if ( $input[$n] =~ /^M.*/ ) { + $charset = $input[$n]; + $charset =~ s/^.//; + } elsif ( $input[$n] =~ /^O.*/ ) { + $official = $input[$n]; + $official =~ s/^.//; + } elsif ( $input[$n] =~ /^\d/ ) { + + my $newcode = &field($input[$n], 1); + + next if ( $newcode eq "idem" ); + next if ( $newcode eq "" ); + + my $oldcode = &field($input[$n], 0); + if ( &is_range($oldcode) ) { + &many_many($oldcode, $newcode, ¬es($input[$n])); + } else { + &one_many($oldcode, $newcode, ¬es($input[$n])); + } + } elsif ( $input[$n] =~ /^U\+/ ) { + if ( $input[$n] =~ /^U\+\w+:/ ) { + my $values = $input[$n]; + my $expect = $input[$n]; + + $values =~ s/:.*//; + $values = &zeroxes($values); + $expect =~ s/^[^:]+://; + + if ( &is_range($values) ) { + printf "fixme:%s(%s)(%s)\n", $input[$n], $values, $expect; + } else { + &approximate(&value_of($values), $expect, ¬es($input[$n])); + } + } else { + my $value = $input[$n]; + $value =~ s/\s*".*//; + $value = &value_of(&zeroxes($value)); + if ($value gt 0) { + my $quote = $input[$n]; + my $comment = ¬es($input[$n]); + $quote =~ s/^[^"]*"//; + $quote =~ s/".*//; + &approximate($value, $quote, $comment); + } else { + printf "fixme:%d(%s)\n", $n, $input[$n]; + } + } + } else { + # printf "skipping line %d:%s\n", $n + 1, $input[$n]; + } + } + if ( ! $empty ) { + &make_footer(); + } + close FP; +} + +sub usage() { + print <<USAGE; +Usage: $0 [tbl-files] + +The script writes a new ".html" file for each input, using +the same name as the input, stripping the ".tbl" suffix. +USAGE + exit(1); +} + +if ( $#ARGV < 0 ) { + usage(); +} else { + while ( $#ARGV >= 0 ) { + &doit ( shift @ARGV ); + } +} +exit (0); |