Source File section
File deleted: DIFFS (Size: 748, Created: Jul 19 20:17 )
File created: DIFFS (Size: 1424, Created: Jul 20 21:03 )
File created: Versuche/isdn/isdn-workshop.tar.gz (Size: 359691, Created: Jul 20 20:06 )
File created: Versuche/isdn/isdn4k-utils.v3.2p1.tar.bz2 (Size: 5238737, Created: Jul 20 20:07 )
File created: Versuche/isdn/ftp.isdn4linux.de.url (Size: 94, Created: Jul 20 20:09 )
File created: DIFFS-INDEX.pl (Size: 718, Created: Jul 20 20:56 )
Usermanager Section
File deleted: mylinux-usermanager-0.98/rootfiles/cfedit.pl-old
#!/usr/bin/perl
$valuecount = 0;
$menucount = 0;
# global variables:
# menutitle[] - array of menu titles
# menuhelp{} - array of help entries, indexed by menu title
# menuentries{} - array of entry counters, indexed by menu title
# menuentry{}[] - array of menu entries, indexed by menu title and entry number
# entryname{}[] - array of menu entry names,
# indexed by menu title and entry number
# entrynumber{}{} - array of menu entry numbers,
# indexed by menu title and entry name
# entrystr{}[] - array of menu entry names,
# indexed by menu title and entry number
# entryaction{}[] - array of menu entry names,
# indexed by menu title and entry number
# entryval{}[] - array of menu entry names,
# indexed by menu title and entry number
# entrykey{}[] - array of optional menu entry keys,
# indexed by menu title and entry number
# valuename[] - array of value (variable) names
# value{} - array of values (content of the variable)
# valuenum{} - array of value (variable) numbers, idexed by name
sub readmenus {
my ($menufile) = @_;
if (!(-r $menufile)) {
die "File '$menufile' does not exist or is not readable\n";
}
my $MENUS
= `cat "$menufile" | sed -e 's/#.*//' -e 's/[ \\t]*\$//' | grep -v "^\$"`;
my $entry = "";
foreach my $line (split /\n/, $MENUS) {
if ($line =~ /[ \t]*\[(.+)\]$/) {
$entry = $1; # menu window title
$menutitle[$menucount++] = $entry;
$helpmode = 0; # help screen content is defined behind the entry list
$menuhelp{$entry} = "";
$menuentries{$entry} = 0;
}
elsif ($helpmode) {
if (! $entry) {
die "No menu title defined\n";
}
$line =~ s/"/\\"/g;
$menuhelp{$entry} .= $line . "\n"; # adding line to help content
}
else {
if ($line =~ /[ \t]*:HELP$/) {
$helpmode = 1; # after ":HELP" comes the help screen content
}
elsif (
$line =~ /[ \t]*([^ \t]*)[ \t]+"([^"]*)"[ \t]*(VAL|SUB|KEY):([^ \t]+)[ \t]*(([^ \t]+))?$/
|| $line =~ /[ \t]*([^ \t]*)[ \t]+"([^"]*)"[ \t]*(RUN):"([^"]+)"[ \t]*(([^ \t]+))?$/
) {
my $num = $menuentries{$entry}++;
$entryname{$entry}[$num] = $1;
$entrynumber{$entry}{$1} = $num;
$entrystr{$entry}[$num] = $2;
my $action = $3;
$entryaction{$entry}[$num] = $action;
my $val = $4;
$entryval{$entry}[$num] = $val;
$entrykey{$entry}[$num] = $5;
if (($action eq "VAL") || ($action eq "KEY")) {
if (defined $valuenum{$val}) {
die "$action:$val is already defined";
}
$valuename[$valuecount] = $val;
$valuenum{$val} = $valuecount++;
}
}
else {
die "Line '$line'\nis not a menu entry definition\n";
}
}
}
}
sub readvalues {
my ($valuefile) = @_;
if (!(-r $valuefile)) {
die "File '$valuefile' does not exist or is not readable\n";
}
my $VALUEFILE
= `cat "$valuefile" | sed -e 's/#.*//' -e 's/[ \\t]*\$//' | grep -v "^\$"`;
foreach my $line (split /\n/, $VALUEFILE) {
if ($line =~ /[ \t]*([^ \t=]*)[ \t]*=[ \t]*"([^"]*)"/) {
$value{$1} = $2;
}
}
}
sub writevalues {
my ($valuefile) = @_;
my $VALUEFILE = "";
for (my $i = 0; $i < $valuecount; $i++) {
my $name = $valuename[$i];
$VALUEFILE .= qq|$name="| . $value{$name} . qq|"\n|;
}
open (VALFILE, "> $valuefile");
print VALFILE $VALUEFILE;
close VALFILE;
}
sub printmenu {
my ($menu, $cursorpos) = @_;
my $cmd = "dialog --help-button ";
my $ret = 0;
# set cursor position:
if ((defined $cursorpos) && $cursorpos) {
$cmd .= "--default-item '$cursorpos' ";
}
$cmd .= "--menu '$menu' 25 80 17 ";
# adding menu entries:
for ($i = 0; $i < $menuentries{$menu}; $i++) {
my $keyval = $value{$entrykey{$menu}[$i]};
if (!$keyval || ($keyval =~ /^yes$/i)) {
$cmd .= "'" . $entryname{$menu}[$i] . "' '";
if ($entryaction{$menu}[$i] eq "KEY") {
if ($value{$valuename[$valuenum{$entryval{$menu}[$i]}]} =~ /^yes$/i) {
$cmd .= "(*) ";
}
else {
$cmd .= "( ) ";
}
}
$cmd .= $entrystr{$menu}[$i] . "' ";
}
}
# adding exit entry:
if ($menu eq $menutitle[0]) {
$cmd .= "'Save & Exit' 'Save changes and exit' ";
}
else {
$cmd .= "'Close' 'Return to calling menu' ";
}
$cmd .= "2> /tmp/cfedit.tmp";
my $sysret = system ($cmd);
if ($sysret == 0) {
$ret = `cat /tmp/cfedit.tmp`;
}
elsif ($sysret == 512) {
# 512: return value 2 is shifted 8 bit to the right by "system"
$ret = "Help";
}
else {
if (system ("dialog --yesno 'Discard changes?' 5 30") == 0) {
$ret = "Cancel";
}
else {
$ret = "Close";
}
}
`rm -f /tmp/cfedit.tmp`;
if ($ret eq "Save & Exit") {
$ret = "Close";
}
return $ret;
}
sub setvalue {
my ($varname) = @_;
my $name = $valuename[$valuenum{$varname}];
my $val = $value{$name};
my $cmd = qq|dialog --inputbox "$name" 8 40 "$val" 2> /tmp/cfedit.tmp|;
if (system ($cmd) == 0) {
$value{$name} = `cat /tmp/cfedit.tmp`;
}
else {
$ret = "Cancel";
}
`rm -f /tmp/cfedit.tmp`;
}
sub menuwrapper {
my ($menu) = @_;
my $ret = &printmenu ($menu);
while (!($ret eq "Close")) {
if ($ret eq "Cancel") {
system ("clear");
die "Aborted\n";
}
elsif ($ret eq "Help") {
my $helptext = $menuhelp{$menu};
$helptext = "No help available" if (!$helptext);
`dialog --msgbox "$helptext" 25 80`;
}
else {
my $num = $entrynumber{$menu}{$ret};
my $action = $entryaction{$menu}[$num];
if ($action eq "VAL") {
&setvalue ($entryval{$menu}[$num]);
}
elsif ($action eq "SUB") {
&menuwrapper ($entryval{$menu}[$num]);
}
elsif ($action eq "KEY") {
my $key = $valuename[$valuenum{$entryval{$menu}[$num]}];
if ($value{$key} =~ /^yes$/i) {
$value{$key} = "no";
}
else {
$value{$key} = "yes";
}
}
elsif ($action eq "RUN") {
my $cmd = $entryval{$menu}[$num];
system ("clear");
system ($cmd);
print "Press to return to the menu\n";
$cmd = ;
}
else {
system ("clear");
die "Invalid menu entry action: $action\n";
}
}
$ret = &printmenu ($menu, $ret);
}
}
########################################################################
# Main program #
########################################################################
if (@ARGV < 2) {
die ("Usage: cfedit.pl \n");
}
$menufile = $ARGV[0];
$valuefile = $ARGV[1];
# reading initial values
&readmenus ($menufile);
&readvalues ($valuefile);
# print main menu
&menuwrapper ($menutitle[0]);
# writing values
&writevalues ($valuefile);
system ("clear");