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");