#!/usr/bin/perl # New configuration script $ENV{'PATH'}.= ':/usr/openwin/bin'; $_= $ENV{'DISPLAY'}; $_= $ENV{'HOST'}.':0' if m/^:/ || m/^unix:/; s/:.*$//; s/\.[^0-9].*$//; $pfx= shift @ARGV; @ARGV && warn "arguments beyond the first ignored\n"; if ($_) { $c{'display'}= $_; $_= `xauth -i extract /dev/null $c{'display'}:0 2>&1`; $c{'xauth'}= length($_) ? 'false' : 'true'; $_= `xdpyinfo`; $c{'keycodes'}="$1-$2" if m/range:\s+minimum (\d+), maximum (\d+)\s/; if (m/default screen number:\s+(\d+)\s/) { $defscreen= $1; $_=$' if m/\nscreen \#$defscreen:/; $_="$`\n" if m/\n\S/; } ($c{'pixels_x'}, $c{'pixels_y'}) = ($1,$2) if m/dimensions:\s+(\d+)x(\d+) pixels/; ($c{'mm_x'}, $c{'mm_y'}) = ($1,$2) if m/dimensions:.*\D(\d+)x(\d+) millimeters/; ($c{'dpi_x'}, $c{'dpi_y'}) = ($1,$2) if m/resolution:\s+(\d+)x(\d+) dots per inch/; $c{'depth'} = $1 if m/depth of root window:\s+(\d+) planes/; if (m/default visual id:\s+(\w+)\s/) { $defvisual= $1; $_=$' if m/\n visual:\s+visual id:\s+$defvisual\s/; $_="$`\n" if m/\n visual:/; } $c{'visual'} = $1 if m/class:\s+(\w+)\s/; $c{'depth'} = $1 if m/depth:\s+(\d+) planes/; } $c{'host'}= $ENV{'HOST'}; #$c{'arch'}= $ENV{'ARCH'}; $_= `uname -sr`; s/\s(\d+)\.\S*/$1/; $c{'arch'}= $_; chdir($ENV{'HOME'}); chdir('.configs'); open(L, "list") || die "$0: list: $!\n"; while() { s/\s*$//; next if m/^#/ || m/^$/; $ol= $l= $_; $true=0; while ($l =~ s/\s*(\S+)// && $1 ne ':') { next if $true; $_= $1; if (m/^default$/) { $true= 1; } elsif (m/[<>]=?/) { $lhs= $`; $rhs= $'; $op= $&; next unless defined($c{$lhs}); $true= eval '$c{$lhs} '.$op.' $rhs'; } elsif (m/=/) { $lhs= $`; $rhs= $'; next unless defined($c{$lhs}); $true= $c{$lhs} eq $rhs; } else { warn "condition `$_' in line $. not understood\n"; } } next unless $true; while ($l =~ s/\s*(\S+)//) { unless ($1 =~ m/=/) { warn "consequence `$1' in line $. not understood\n"; next; } $c{$`}= $'; } } close(L); while (($k,$v) = each %c) { print " $pfx$k=$v"; } print "\n";