printJavaScripts();
print <<EOF;
</HEAD>
-<BODY onload='reloadSpecTree();reloadSetTree();'>
+<BODY onload='reloadFileSelection()'>
<h2>JTAG Configuration File Editor</h2>
<div id="debug">
debug text
</div>
<div id="fileSelection">
-<div class='header'>File Selection</div>
+
Current File: unknown
</div>
<div id="roterBereich">
-<input type="button" onClick="getdata('$me?print=spectree','roterBereich',true);" value="show spectree">
+empty
</div>
<div id="blauerBereich">
-<input type="button" onClick="getdata('$me?print=settree','blauerBereich',true);" value="show settree">
+empty
</div>
my $parser = XML::LibXML->new();
-my $specfile = "./MIMOSA26_JTAG_SPEC.xml";
-my $setfile = "./settings.xml";
+my $specfile = "";
+my $setfile = "";
+my $spectree;
+my $settree;
+
+my $confDir = '../config';
+my $specDir = '../config/specifications';
+if ($cgiHash{'print'} eq 'fileSelection'){
+print "<div class='header'>File Selection</div>";
+print_fileSelection();
+
+}
if ($cgiHash{'print'} eq 'spectree') {
print "<div class='header'>Available Settings</div>\n";
+parseSetAndSpec($cgiHash{'configFile'});
print_registers($specfile);
}
if ($cgiHash{'print'} eq 'settree') {
print "<div class='header'>Selected Settings</div>\n";
+parseSetAndSpec($cgiHash{'configFile'});
print_registers($setfile);
}
printHash(\%cgiHash);
if($cgiHash{'action'} eq 'save') {
- save($cgiHash{'file'},$cgiHash{'register'},$cgiHash{'field'},$cgiHash{'value'});
+ parseSet($cgiHash{'configFile'});
+ save($cgiHash{'register'},$cgiHash{'field'},$cgiHash{'value'});
}
if($cgiHash{'action'} eq 'delete'){
- del($cgiHash{'file'},$cgiHash{'register'},$cgiHash{'field'});
+ parseSet($cgiHash{'configFile'});
+ del($cgiHash{'register'},$cgiHash{'field'});
}
if($cgiHash{'action'} eq 'copyDefaultRegister'){
- del($setfile,$cgiHash{'register'},""); # delete existing register from setfile
+ parseSetAndSpec($cgiHash{'configFile'});
+ del($cgiHash{'register'},""); # delete existing register from setfile
copyDefaultRegister($cgiHash{'register'});
}
}
return $t;
}
+
+
+sub parseSetAndSpec {
+ $setfile = $confDir."/".$_[0];
+ $settree = $parser->parse_file($setfile);
+ my $specFileName = $settree->findvalue("/MAPS/\@specDbFile");
+ $specfile = $specDir."/".$specFileName;
+ $spectree = $parser->parse_file($specfile);
+}
+
+sub parseSet {
+ $setfile = $confDir."/".$_[0];
+ $settree = $parser->parse_file($setfile);
+}
+
sub del {
- my $registerName=$_[1];
- my $fieldName=$_[2];
- my $xmlfile = $_[0];
- my $xmltree = $parser->parse_file($xmlfile);
+ 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();
close SCHREIBEN;
}
+sub print_fileSelection {
+
+print "<table>";
+print "<tr>";
+print "<td>select config file:<td>";
+print "</tr>";
+
+print "<tr>";
+
+print "<td>";
+ opendir(DIR, $confDir) or die $!;
+
+print '<select name="fileSelectionDropdown" id="fileSelector">';
+
+ while (my $file = readdir(DIR)) {
+
+ # Use a regular expression to ignore files beginning with a period
+ next if ($file =~ m/^\./);
+ #print "$file\n";
+ if ($file =~ m/\.xml$/){
+ print '<option value="'.$file.'">'.$file.'</option>';
+ }
+ }
+
+ closedir(DIR);
+
+print '</select>';
+
+print "</td>";
+
+print "<td>";
+print "<input type='button' onclick='reloadTrees()' value='load file'>";
+print "</td>";
+
+print "</tr>";
+
+print "</table>";
+}
+
sub save {
- my $registerName=$_[1];
- my $fieldName=$_[2];
- my $xmlfile = $_[0];
- my $newValue = $_[3];
- my $xmltree = $parser->parse_file($xmlfile);
+ 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();
sub print_registers {
my $xmlfile = $_[0];
-my $xmltree = $parser->parse_file($xmlfile);
+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 "<table class=\"registers\">";
for my $register (@registers ){
if($xmlfile eq $setfile){
print <<EOF;
-<td class='button_move' onclick='deleteSettings("$setfile","$registerName","");'> X </td>
+<td class='button_move' onclick='deleteSettings("$registerName","");'> X </td>
EOF
}
if($xmlfile eq $specfile){
} else {
print <<EOF;
<td align='right'>
-<input type='text' align='right' value='$fieldValue' onchange='saveSettings("$xmlfile","$registerName","$fieldName",this.value)' >
+<input type='text' align='right' value='$fieldValue' onchange='saveSettings("$registerName","$fieldName",this.value)' >
</td>
EOF
print '</td>';
if($xmlfile eq $specfile){
print <<EOF;
-<td class='button_move' onclick='saveSettings("$setfile","$registerName","$fieldName","$fieldValue");'> → </td>
+<td class='button_move' onclick='saveSettings("$registerName","$fieldName","$fieldValue");'> → </td>
EOF
}
if($xmlfile eq $setfile){
print <<EOF;
-<td class='button_move' onclick='deleteSettings("$setfile","$registerName","$fieldName");'> X </td>
+<td class='button_move' onclick='deleteSettings("$registerName","$fieldName");'> X </td>
EOF
}
print "</tr>";
<script language="javascript">
+
+function selectedConfigFile(){
+var e = document.getElementById("fileSelector");
+return e.options[e.selectedIndex].text;
+}
+
+
var visHash= new Object();
function reloadSpecTree(){
-getdata('$me?print=spectree','roterBereich',false);
+getdata('$me?print=spectree&configFile='+selectedConfigFile(),'roterBereich',false);
for (var key in visHash) {
if(visHash[key]==true){
showElement(key);
}
function reloadSetTree(){
-getdata('$me?print=settree','blauerBereich',false);
+getdata('$me?print=settree&configFile='+selectedConfigFile(),'blauerBereich',false);
for (var key in visHash) {
if(visHash[key]==true){
showElement(key);
}
}
-function saveSettings(file,register,field,value){
+function reloadTrees(){
+debugOutput("reload Trees from "+selectedConfigFile());
+reloadSpecTree();
+reloadSetTree();
+}
+
+function reloadFileSelection(){
+getdata('$me?print=fileSelection','fileSelection',false);
+}
+
+function saveSettings(register,field,value){
//getdata("$me?debuginput=tralla","debug");
-var file_ = encodeURIComponent(file);
+var file_ = encodeURIComponent(selectedConfigFile());
var register_ = encodeURIComponent(register);
var field_ = encodeURIComponent(field);
var value_ = encodeURIComponent(value);
-getdata("$me?action=save&file="+file_+"®ister="+register_+"&field="+field_+"&value="+value_,"debug",false);
+getdata("$me?action=save&configFile="+file_+"®ister="+register_+"&field="+field_+"&value="+value_,"debug",false);
//getdata("$me?print=settree","blauerBereich",true);
reloadSetTree();
}
-function deleteSettings(file,register,field){
+function deleteSettings(register,field){
//getdata("$me?debuginput=tralla","debug");
-var file_ = encodeURIComponent(file);
+var file_ = encodeURIComponent(selectedConfigFile());
var register_ = encodeURIComponent(register);
var field_ = encodeURIComponent(field);
-getdata("$me?action=delete&file="+file_+"®ister="+register_+"&field="+field_,"debug",false);
+getdata("$me?action=delete&configFile="+file_+"®ister="+register_+"&field="+field_,"debug",false);
//getdata("$me?print=settree","blauerBereich",true);
reloadSetTree();
}
function copyDefaultRegister(register){
var register_ = encodeURIComponent(register);
-getdata("$me?action=copyDefaultRegister®ister="+register_,"debug",false);
+var file_ =encodeURIComponent(selectedConfigFile());
+getdata("$me?action=copyDefaultRegister®ister="+register_+'&configFile='+file_,"debug",false);
//getdata("$me?print=settree","blauerBereich",true);
reloadSetTree();
}