From aa64ac1595162c6d16d50d85c65f2157d2de4d79 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Thu, 27 Jun 2013 13:59:48 +0200 Subject: [PATCH] file selection now updating --- config/settings.xml | 2 +- layout/jtageditor.css | 8 +- xml_spielwiese/cgitest.pl | 558 ++++++++++++++++++++------------------ 3 files changed, 302 insertions(+), 266 deletions(-) diff --git a/config/settings.xml b/config/settings.xml index ded0929..2e4753b 100644 --- a/config/settings.xml +++ b/config/settings.xml @@ -1,3 +1,3 @@ - + diff --git a/layout/jtageditor.css b/layout/jtageditor.css index 413906d..cf51086 100644 --- a/layout/jtageditor.css +++ b/layout/jtageditor.css @@ -58,10 +58,12 @@ input[type="text"] background:#fff; } -input[type="button"] + + +.stdbutton { - font-size:12px; - height:20px; + width:100px; + height:25px; } diff --git a/xml_spielwiese/cgitest.pl b/xml_spielwiese/cgitest.pl index db0f9f0..273428f 100755 --- a/xml_spielwiese/cgitest.pl +++ b/xml_spielwiese/cgitest.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w print "Content-type: text/html\n\n"; -my $me="cgitest.pl"; +my $me = "cgitest.pl"; use strict; use warnings; @@ -11,16 +11,16 @@ use CGI::Carp qw(fatalsToBrowser); use HTML::Entities; sub initPage { - -print < JTAG Editor EOF -printJavaScripts(); -print <

JTAG Configuration File Editor

@@ -46,398 +46,428 @@ EOF } - - my %cgiHash = &read_input; +if ( !keys %cgiHash ) +{ # if script is called without arguments: initialize the html structure + initPage(); + exit; +} -if (!keys %cgiHash) { # if script is called without arguments: initialize the html structure -initPage(); -exit; -} - - -my $parser = XML::LibXML->new(); +my $parser = XML::LibXML->new(); my $specfile = ""; -my $setfile = ""; +my $setfile = ""; my $spectree; my $settree; my $confDir = '../config'; my $specDir = '../specs'; - -if ($cgiHash{'print'} eq 'fileSelection'){ -print "
File Selection
"; - -print_fileSelection(); +if ( $cgiHash{'print'} eq 'fileSelection' ) { + print "
File Selection
"; + print_fileSelection($cgiHash{'configFile'}); } - - -if ($cgiHash{'print'} eq 'spectree') { -print "
Available Settings
\n"; -parseSetAndSpec($cgiHash{'configFile'}); -print_registers($specfile); +if ( $cgiHash{'print'} eq 'spectree' ) { + print "
Available Settings
\n"; + parseSetAndSpec( $cgiHash{'configFile'} ); + print_registers($specfile); } - -if ($cgiHash{'print'} eq 'settree') { -print "
Selected Settings
\n"; -parseSetAndSpec($cgiHash{'configFile'}); -print_registers($setfile); +if ( $cgiHash{'print'} eq 'settree' ) { + print "
Selected Settings
\n"; + parseSetAndSpec( $cgiHash{'configFile'} ); + print_registers($setfile); } - -if (defined $cgiHash{'debuginput'}) { -print $cgiHash{'debuginput'}; +if ( defined $cgiHash{'debuginput'} ) { + print $cgiHash{'debuginput'}; } -if (defined $cgiHash{'action'} ) { - - printHash(\%cgiHash); - if($cgiHash{'action'} eq 'save') { - parseSet($cgiHash{'configFile'}); - save($cgiHash{'register'},$cgiHash{'field'},$cgiHash{'value'}); +if ( defined $cgiHash{'action'} ) { + + printHash( \%cgiHash ); + if ( $cgiHash{'action'} eq 'save' ) { + parseSet( $cgiHash{'configFile'} ); + save( $cgiHash{'register'}, $cgiHash{'field'}, $cgiHash{'value'} ); } - if($cgiHash{'action'} eq 'delete'){ - parseSet($cgiHash{'configFile'}); - del($cgiHash{'register'},$cgiHash{'field'}); + if ( $cgiHash{'action'} eq 'delete' ) { + parseSet( $cgiHash{'configFile'} ); + del( $cgiHash{'register'}, $cgiHash{'field'} ); } - if($cgiHash{'action'} eq 'copyDefaultRegister'){ - parseSetAndSpec($cgiHash{'configFile'}); - del($cgiHash{'register'},""); # delete existing register from setfile - copyDefaultRegister($cgiHash{'register'}); + if ( $cgiHash{'action'} eq 'copyDefaultRegister' ) { + parseSetAndSpec( $cgiHash{'configFile'} ); + del( $cgiHash{'register'}, "" ); # delete existing register from setfile + copyDefaultRegister( $cgiHash{'register'} ); } } - - #################### SUBLAND ###################### sub prepare_text { - my $t = $_[0]; - chomp $t; - $t = encode_entities($t); - $t =~ s/^\s//; - $t =~ s/^\n//; - $t =~ s/\t//; - return $t; - } - - + my $t = $_[0]; + chomp $t; + $t = encode_entities($t); + $t =~ s/^\s//; + $t =~ s/^\n//; + $t =~ s/\t//; + return $t; +} sub parseSetAndSpec { - $setfile = $confDir."/".$_[0]; + $setfile = $confDir . "/" . $_[0]; $settree = $parser->parse_file($setfile); my $specFileName = $settree->findvalue("/MAPS/\@specDbFile"); - $specfile = $specDir."/".$specFileName; - $spectree = $parser->parse_file($specfile); + $specfile = $specDir . "/" . $specFileName; + $spectree = $parser->parse_file($specfile); } sub parseSet { - $setfile = $confDir."/".$_[0]; + $setfile = $confDir . "/" . $_[0]; $settree = $parser->parse_file($setfile); } sub del { - - my $registerName=$_[0]; - my $fieldName=$_[1]; - my $xmlfile = $setfile; - my $xmltree = $settree; - my $maps = $xmltree->findnodes("/MAPS")->shift(); - my $register = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift(); - - if ($fieldName eq "") { # no field specified, remove whole register - unless($register eq ""){ - $maps->removeChild($register); - } - print "deleted whole register"; - } else { - - my $field = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']")->shift(); + my $registerName = $_[0]; + my $fieldName = $_[1]; + my $xmlfile = $setfile; + my $xmltree = $settree; + my $maps = $xmltree->findnodes("/MAPS")->shift(); + my $register = + $xmltree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" ) + ->shift(); + + if ( $fieldName eq "" ) { # no field specified, remove whole register + unless ( $register eq "" ) { + $maps->removeChild($register); + } + print "deleted whole register"; + } + else { + + my $field = + $xmltree->findnodes( "/MAPS/register[\@name='" + . $registerName + . "']/field[\@name='" + . $fieldName + . "']" )->shift(); $register->removeChild($field); print "deleted field
"; - unless( $register->hasChildNodes()){ + unless ( $register->hasChildNodes() ) { $maps->removeChild($register); print "deleted register as well
"; } - } - open(SCHREIBEN,"> $xmlfile") - or print "could not open file $xmlfile for writing: $!\n"; + } + open( SCHREIBEN, "> $xmlfile" ) + or print "could not open file $xmlfile for writing: $!\n"; -print SCHREIBEN $xmltree->toString(); -close SCHREIBEN; + print SCHREIBEN $xmltree->toString(); + close SCHREIBEN; } sub print_fileSelection { + + my $configFile= $_[0]; -print ""; -print ""; -print ""; + print "
select config file:"; -print "
"; + print ""; + print ""; + + print ""; -print ""; + print ""; -print ""; + print ""; -print ""; + print ""; -print ""; + print "
select config file:"; + print "
"; + opendir( DIR, $confDir ) or die $!; -print ""; - opendir(DIR, $confDir) or die $!; + print ''; + while ( my $file = readdir(DIR) ) { - while (my $file = readdir(DIR)) { + # Use a regular expression to ignore files beginning with a period + next if ( $file =~ m/^\./ ); - # Use a regular expression to ignore files beginning with a period - next if ($file =~ m/^\./); - #print "$file\n"; - if ($file =~ m/\.xml$/){ - print ''; + if ( $file =~ m/\.xml$/ ) { + print ''; + } } - } - closedir(DIR); + closedir(DIR); -print ''; + print ''; + print ""; + print ""; + print ""; -print ""; -print "
"; -print ""; + print ""; + print ""; + print "
"; + print "selected config file: $configFile"; + print "
"; } - sub save { - my $registerName=$_[0]; - my $fieldName=$_[1]; - my $xmlfile = $setfile; - my $newValue = $_[2]; + my $registerName = $_[0]; + my $fieldName = $_[1]; + my $xmlfile = $setfile; + my $newValue = $_[2]; - my $xmltree= $settree; - my $maps = $xmltree->findnodes("/MAPS")->shift(); - #my @fields = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']"); - my $register = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift(); + my $xmltree = $settree; + my $maps = $xmltree->findnodes("/MAPS")->shift(); - if($register eq ""){ - $register = $maps->addNewChild("","register"); - $register->setAttribute("name",$registerName); - } +#my @fields = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']"); + my $register = + $xmltree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" ) + ->shift(); - - my $field = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']")->shift(); + if ( $register eq "" ) { + $register = $maps->addNewChild( "", "register" ); + $register->setAttribute( "name", $registerName ); + } - if($field eq ""){ - $field = $register->addNewChild( "","field" ); - $field->setAttribute( "name", $fieldName ); + my $field = + $xmltree->findnodes( "/MAPS/register[\@name='" + . $registerName + . "']/field[\@name='" + . $fieldName + . "']" )->shift(); - } - #my $fieldValue = ($xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']/\@name='value'"))[0]; - #print $fieldValue->findvalue("./"); - $field->setAttribute( "value", $newValue ); - print $field->findvalue("./\@value"); - open(SCHREIBEN,"> $xmlfile") - or print "could not open file $xmlfile for writing: $!\n"; + if ( $field eq "" ) { + $field = $register->addNewChild( "", "field" ); + $field->setAttribute( "name", $fieldName ); + + } + +#my $fieldValue = ($xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']/\@name='value'"))[0]; +#print $fieldValue->findvalue("./"); + $field->setAttribute( "value", $newValue ); + print $field->findvalue("./\@value"); + open( SCHREIBEN, "> $xmlfile" ) + or print "could not open file $xmlfile for writing: $!\n"; -print SCHREIBEN $xmltree->toString(); -close SCHREIBEN; + print SCHREIBEN $xmltree->toString(); + close SCHREIBEN; } sub copyDefaultRegister { - my $registerName=$_[0]; - my $settree = $parser->parse_file($setfile); - my $spectree = $parser->parse_file($specfile); - my $setmaps = $settree->findnodes("/MAPS")->shift(); - my $specmaps = $spectree->findnodes("/MAPS")->shift(); - - my $specRegister = $spectree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift(); - - my $setRegister = $setmaps->addNewChild("","register"); - $setRegister->setAttribute("name",$registerName); - - my @specFields = $specRegister->findnodes("./field"); - - for my $specField (@specFields){ - my $fieldName = $specField->findvalue("./\@name"); - my $fieldValue = $specField->findvalue("./\@defaultValue"); - my $setField = $setRegister->addNewChild( "","field" ); - $setField->setAttribute( "name", $fieldName ); - $setField->setAttribute( "value", $fieldValue ); - print $setField->findvalue("./\@value"); - } - open(SCHREIBEN,"> $setfile") - or print "could not open file $setfile for writing: $!\n"; + my $registerName = $_[0]; + my $settree = $parser->parse_file($setfile); + my $spectree = $parser->parse_file($specfile); + my $setmaps = $settree->findnodes("/MAPS")->shift(); + my $specmaps = $spectree->findnodes("/MAPS")->shift(); + + my $specRegister = + $spectree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" ) + ->shift(); + + my $setRegister = $setmaps->addNewChild( "", "register" ); + $setRegister->setAttribute( "name", $registerName ); + + my @specFields = $specRegister->findnodes("./field"); + + for my $specField (@specFields) { + my $fieldName = $specField->findvalue("./\@name"); + my $fieldValue = $specField->findvalue("./\@defaultValue"); + my $setField = $setRegister->addNewChild( "", "field" ); + $setField->setAttribute( "name", $fieldName ); + $setField->setAttribute( "value", $fieldValue ); + print $setField->findvalue("./\@value"); + } + open( SCHREIBEN, "> $setfile" ) + or print "could not open file $setfile for writing: $!\n"; -print SCHREIBEN $settree->toString(); -close SCHREIBEN; + print SCHREIBEN $settree->toString(); + close SCHREIBEN; } sub by_name { - my $a_name= $a->findvalue("./\@name") ; - my $b_name= $b->findvalue("./\@name") ; + my $a_name = $a->findvalue("./\@name"); + my $b_name = $b->findvalue("./\@name"); - # putting $b_published in front will ensure the descending order. - return $a_name cmp $b_name; + return $a_name cmp $b_name; } sub printHash { - my $hashref=$_[0]; - for my $element( keys %{$hashref}){ - print $element."=".$hashref->{$element}."
\n"; + my $hashref = $_[0]; + for my $element ( keys %{$hashref} ) { + print $element. "=" . $hashref->{$element} . "
\n"; } } - sub print_registers { -my $xmlfile = $_[0]; -my $xmltree; -if ($xmlfile eq $setfile) { - $xmltree = $settree; -} elsif ($xmlfile eq $specfile) { - $xmltree = $spectree; -} else { - die "xmlfile given to sub print_registers is unknown"; -} -my @registers = sort by_name $xmltree->findnodes("/MAPS/register"); -print ""; -for my $register (@registers ){ - - my $registerName = $register->findvalue("./\@name"); - my $registerId = $register->findvalue("./\@id"); - my $registerSize = $register->findvalue("./\@size"); - my $registerDescr = prepare_text($spectree->findvalue("/MAPS/register[\@name='".$registerName."']/description") || "n/a"); + my $xmlfile = $_[0]; + my $xmltree; + if ( $xmlfile eq $setfile ) { + $xmltree = $settree; + } + elsif ( $xmlfile eq $specfile ) { + $xmltree = $spectree; + } + else { + die "xmlfile given to sub print_registers is unknown"; + } + my @registers = sort by_name $xmltree->findnodes("/MAPS/register"); + print "
"; + for my $register (@registers) { + + my $registerName = $register->findvalue("./\@name"); + my $registerId = $register->findvalue("./\@id"); + my $registerSize = $register->findvalue("./\@size"); + my $registerDescr = prepare_text( + $spectree->findvalue( + "/MAPS/register[\@name='" . $registerName . "']/description" + ) + || "n/a" + ); + + my $flistid = $xmlfile . "//" . $registerName; - my $flistid = $xmlfile."//".$registerName; - - print ""; + print ""; - print < +  EOF - print ""; - #print ""; + print ""; - if($xmlfile eq $setfile){ - print <$registerId"; + + if ( $xmlfile eq $setfile ) { + print < X  EOF - } - if($xmlfile eq $specfile){ - print < →  EOF - } + } - print ""; - #print ""; + print ""; - print ''; - print ''; - print '"; -} -print "
$registerName$registerId$registerName
'; - print_fields($xmlfile,$register); - print ""; - print "
"; + #print ""; + + print ''; + print ''; + print ''; + print_fields( $xmlfile, $register ); + print ""; + print ""; + } + print ""; } sub print_fields { - my $register = $_[1]; - my $xmlfile = $_[0]; + my $register = $_[1]; + my $xmlfile = $_[0]; my $registerName = $register->findvalue("./\@name"); - my @fields = sort by_name $register->findnodes("./field"); + my @fields = sort by_name $register->findnodes("./field"); print ""; - for my $field (@fields){ - my $fieldName = $field->findvalue("./\@name"); - my $readOnlyFlag = 0; - my $fieldValue = $field->findvalue("./\@value"); - my $fieldDescr = prepare_text($spectree->findvalue("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']/description") || "n/a"); - my $fieldId = $xmlfile."//".$registerName."/".$fieldName; - if ($fieldValue eq "") { - $fieldValue = $field->findvalue("./\@defaultValue"); - $readOnlyFlag=1; + for my $field (@fields) { + my $fieldName = $field->findvalue("./\@name"); + my $readOnlyFlag = 0; + my $fieldValue = $field->findvalue("./\@value"); + my $fieldDescr = prepare_text( + $spectree->findvalue( + "/MAPS/register[\@name='" + . $registerName + . "']/field[\@name='" + . $fieldName + . "']/description" + ) + || "n/a" + ); + my $fieldId = $xmlfile . "//" . $registerName . "/" . $fieldName; + if ( $fieldValue eq "" ) { + $fieldValue = $field->findvalue("./\@defaultValue"); + $readOnlyFlag = 1; } print ""; print ""; print ""; - if ($readOnlyFlag){ - print <$fieldValue EOF - } else { - print < EOF - + } print ''; - if($xmlfile eq $specfile){ - print < →  EOF - } - if($xmlfile eq $setfile){ - print < X  EOF - } - print ""; + } + print ""; } print "
$fieldName  = 
"; } +sub read_input { + my $buffer; + my @pairs; + my $pair; + my $name; + my $value; + my %FORM; -sub read_input -{ - my $buffer; my @pairs; my $pair; my $name; my $value;my %FORM; - # Read in text - $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; - if ($ENV{'REQUEST_METHOD'} eq "POST") - { - read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); - } else - { - $buffer = $ENV{'QUERY_STRING'}; - } - # Split information into name/value pairs - @pairs = split(/&/, $buffer); - foreach $pair (@pairs) - { - ($name, $value) = split(/=/, $pair); - $value =~ tr/+/ /; - $value =~ s/%(..)/pack("C", hex($1))/eg; - $FORM{$name} = $value; - } - %FORM; -} - + # Read in text + $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; + if ( $ENV{'REQUEST_METHOD'} eq "POST" ) { + read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); + } + else { + $buffer = $ENV{'QUERY_STRING'}; + } + # Split information into name/value pairs + @pairs = split( /&/, $buffer ); + foreach $pair (@pairs) { + ( $name, $value ) = split( /=/, $pair ); + $value =~ tr/+/ /; + $value =~ s/%(..)/pack("C", hex($1))/eg; + $FORM{$name} = $value; + } + %FORM; +} sub printJavaScripts { - ####### javascript function land ################ - -print < function selectedConfigFile(){ +if(document.getElementById("fileSelector")){ var e = document.getElementById("fileSelector"); -return e.options[e.selectedIndex].text; +return e.options[e.selectedIndex].text;} +else { + return "none"; +} } @@ -462,14 +492,18 @@ showElement(key); } } -function reloadTrees(){ -debugOutput("reload Trees from "+selectedConfigFile()); + +function loadFile(){ +debugOutput("load data from "+selectedConfigFile()); reloadSpecTree(); reloadSetTree(); +reloadFileSelection(); + } function reloadFileSelection(){ -getdata('$me?print=fileSelection','fileSelection',false); +var file_ = encodeURIComponent(selectedConfigFile()); +getdata('$me?print=fileSelection&configFile='+file_,'fileSelection',false); } function saveSettings(register,field,value){ -- 2.43.0