Slight wording changes on menus
[people/meteger/rom-o-matic/.git] / utils.php
index 7d3492d..4855c41 100644 (file)
--- a/utils.php
+++ b/utils.php
@@ -1,59 +1,77 @@
 <? // -*- Mode: PHP; -*-
 
+// Include table of user-configurable gPXE options
 require_once "flag-table.php";
 
-// Some debugging calls:
-// dump_flag_table ();
-// dump_flag_codes ();
-// dump_flag_table_keys_sorted ();
-// exit ();
-
-// Include shadow-able globals
+// Include user-shadowable globals
 require_once "globals.php";
 
-// Allow shadowing of globals
-include_once "local-config.php";
+// Allow user to shadow globals
+if ( is_file ( 'local-config.php' ) ) { 
+    include "local-config.php";
+}
 
-// echo "$version<br>"; exit ();
+// Parse src/bin/NIC file
+list ( $nics, $roms ) = parse_nic_file ();
 
-function value_key ( $ofmt ) 
-{
-        // Here we decide which $flag_table key is associated with
-        // the variable we want to retrieve.  The reason for this is
-        // that we might want to return a different value based on 
-        // what kind of build we are doing.  In particular, if we ever
-        // Support EFI or LinuxBIOS builds, we might want to return
-        // different values than for PC BIOS builds. In which 
-        // case we could do someting like:
-    //    return (strpos ($ofmt, "LinuxBIOS" ) === false 
-    //            ? "value" : "valuelnx" );
-
-        // For now, we return the key "value", since that is the 
-        // slot that contains the usual value associated with this key
-    return ( "value" );
-}
+////
+// General utility functions
+////
 
-function snarf_file ( $fname ) 
+function cleanstring ( $s ) 
 {
-    $len = filesize ( $fname );
-    if ( $len > 0 ) {
-        $fp = fopen ( $fname, "rb" );
-        if ( $fp > 0 ) {
-            $buf = fread ( $fp, $len );
-            fclose ( $fp );
-            if ( $buf ) 
-                return ($buf);
+    $len = strlen ( $s );
+    if ( $len > 80 ) {
+        $s = substr ( $s, 0, 80 );
+    }
+
+    $s      = trim ( $s );
+    $pos    = 0;
+    $result = "";
+
+    while ( $pos < $len ) {
+        $ltr = ord ( ucfirst ( $s[$pos] ) );
+        if ( ( $ltr >= ord ( "A" ) ) && ( $ltr <= ord ( "Z" ) ) || 
+             ( $ltr >= ord ( "0" ) ) && ( $ltr <= ord ( "9" ) ) || 
+             ( $ltr == ord ( "." ) ) && ( strlen ( $result ) > 0 ) ||
+             ( $ltr == ord ( "_" ) ) ||
+             ( $ltr == ord ( "+" ) ) ||
+             ( $ltr == ord ( ":" ) ) ||
+             ( $ltr == ord ( "/" ) ) ||
+             ( $ltr == ord ( "-" ) ) ) {
+            $result .= $s[$pos];
         }
+        $pos++;
     }
-    die ( "Unable to get $fname" );
-    return 0;
+    return $result;
 }
 
-function get_nics () 
+function curDirURL () 
 {
-    global $version, $src_dir;
+        $dir = dirname ( $_SERVER['PHP_SELF'] );
 
-    $nic = ( isset ( $_GET['nic'] ) ? $_GET['nic'] : '' );
+        if ( $dir == "." || $dir == "/" ) {
+                $dir = "";
+        }
+
+        $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" );
+        $port = ( isset($_SERVER["SERVER_PORT"] ) && 
+                          ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || 
+                                ( $isHTTPS  && $_SERVER["SERVER_PORT"] != "443" ) ) );
+
+        $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : '';
+
+        $dest = ( $isHTTPS ? 'https://' : 'http://' ) .
+                $_SERVER["SERVER_NAME"] . $dir . "/";
+
+        return $dest;
+}
+
+function parse_nic_file ()
+{
+    // Extract NIC families and associated ROM PCI IDs from 
+    // the src/bin/NIC file.
+    global $src_dir;
 
     $fd = fopen( "$src_dir/bin/NIC", "r" );
 
@@ -63,126 +81,65 @@ function get_nics ()
     }
 
     $nics = array ();
-    $family = "";
+    $roms = array ();
+    $nic = "";
 
     while ( !feof ( $fd ) ) {
 
         $line = trim ( fgets ( $fd, 200 ) );
 
-        if ( strpos ( $line, "family" ) === 0 ) {
-
-            list ( $dummy, $family ) = split( "[ \t]+", $line );
-            settype ( $family, "string" );
-
-        } else if ( $line != "" && $line[0] != '#' ) {
+        $first_eight_chars = substr ( $line, 0, 8 );
+        settype ( $first_eight_chars, "string" );
 
-            list ( $rom, $pci_ids ) = split ( "[ \t]+", $line );
-            settype ( $rom, "string" );
+        if ( strpos ( $first_eight_chars, "family" ) === 0 ) {
 
-            if ( $pci_ids == "-" ) 
-                                $pci_ids = "";
+            // get pathname of NIC driver
+            list ( $dummy, $nic ) = split( "[ \t]+", $line );
+            settype ( $nic, "string" );
+            
+            // extract filename name of driver from pathname
+            $nic = substr ( $nic, strrpos ( $nic, "/" ) + 1, 
+                          strlen ( $nic ) - strrpos ( $nic, "/" ) + 1 );
 
-            $fam_name = substr ( $family, strrpos ( $family, "/" ) + 1, 
-                         strlen ( $family ) - strrpos ( $family, "/" ) + 1 );
-            $option = ( $pci_ids ? "$fam_name:$rom -- [$pci_ids]" : "$fam_name:$rom" );
+            $nics[$nic] = $nic;
 
-            // * Kludge - fix incoming $nic if any.
-            if ( $nic == $rom ) 
-                                $nic = $option;
+            // For each ISA NIC, there can only be one ROM variant
+            $roms[$nic] = $nic;
+        }
 
-            // ISA drivers are per-family, PCI are per-ROM. If ever decide
-            // to cache the drivers, can use this key.
-            $nics[$option] = ( $pci_ids ? "PCI:" . $rom : "ISA:" . $family );
+        // If the first 8 digits of the line are hex digits
+        // add this rom to the current nic family.
 
-            // echo $nics array for debugging
-            // echo "\$nics[$option] "." -> ".$nics[$option]."<br>";
+        if (    ( strlen ( $first_eight_chars ) == 8 ) 
+             && ( ctype_xdigit ( $first_eight_chars ) )
+             && ( $nic != "" ) ) {
+        
+            $roms[$first_eight_chars] = $nic;
         }
     }
-
-    $nics["gpxe:all-drivers"] = "PCI:gpxe";
     fclose ( $fd );
-    ksort ( $nics );
-    return( $nics );
-}
-
-function get_families () 
-{
-    global $version, $src_dir;
-
-    $nic = ( isset ( $_GET['nic'] ) ? $_GET['nic'] : '' );
 
-    $fd = fopen( "$src_dir/bin/NIC", "r" );
-
-    if ( $fd < 1 ) {
-        trigger_error ( "Missing NIC Config Info" );
-        exit ();
-    }
+    // put most NICs in nice alpha order for menu
+    ksort ( $nics );
 
-    $families = array ();
-    $family = "";
+    // add special cases to the top
 
-    while ( !feof ( $fd ) ) {
-
-        $line = trim ( fgets ( $fd, 200 ) );
+       $new_nics = array ( "all-drivers" => "gpxe",
+                                               "undi" => "undionly" );
 
-        if ( strpos ( $line, "family" ) === 0 ) {
+       foreach ( $nics as $key => $value ) {
+               // skip the undi driver
+               if ( $key != "undi" ) {
+                       $new_nics[$key] = $value;
+               }
+       }
 
-            list ( $dummy, $family ) = split( "[ \t]+", $line );
-            $fam_name = substr ( $family, strrpos ( $family, "/" ) + 1, 
-                         strlen ( $family ) - strrpos ( $family, "/" ) + 1 );
-            settype ( $family, "string" );
-            
-            $families[$fam_name] = $fam_name;
-        }
-    }
-    fclose ( $fd );
-
-    // Add special cases
-    $families["all-drivers"] = "gpxe";
-        
-    ksort ( $families );
-    return ( $families );
+       return ( array ( $new_nics, $roms ) );
 }
 
-function get_nicfile () 
-{
-    global $ofmts;
-
-    $nic = $_GET['nic'];
-    $ofmt = $_GET['ofmt'];
-
-    $n = strpos ( $nic, " " );
-    $family = substr ( $nic, 0, strpos ( $nic,":" ) );
-
-    $rom = ( $n > 0 ? 
-         substr ( $nic, strpos ( $nic, ":" ) + 1, 
-                 $n - ( strlen ( $family ) + 1 ) ) :  
-                  $family );
-
-    $ftype = $ofmts[$ofmt];
-    if ( $ftype == "" ) $ftype = "dsk"; 
-
-    // if .rom format is requested, return rom name,
-    //   since .rom images are PCI ID specific, and 
-    //   rules only exist to build bin/$rom for Binary
-    //    ROM images types
-    if ( $ftype == "rom" )
-        $retval = cleanstring ( $rom . "." . $ftype );
-    else
-        $retval = cleanstring ( $family . "." . $ftype );
-
-    // Let's take a look at what was chosen.
-    //  echo "strpos ( \$nic, \":\" ) ->" . strpos ( $nic, ":" ) . "<br>";
-    //  echo "\$n ->" . "$n" . "<br>";
-    //  echo "\$nic ->" . "|$nic|" . "<br>";
-    //  echo "\$rom ->" . "|$rom|" . "<br>";
-    //  echo "\$family ->" . "|$family|" . "<br>";
-    //  echo "\$ftype ->" . "|$ftype|" . "<br>";
-    //  echo "\$retval ->" . "|$retval|" . "<br>";
-    //  exit();
-
-    return ( $retval );
-}
+////
+// HTML form utility functions
+////
 
 function hidden ( $flag, $value ) 
 {
@@ -202,6 +159,13 @@ function textbox ( $flag, $value, $size )
     return "<input type=\"text\" size=\"$size\" value=\"$value\" name=\"$flag\">";
 }
  
+function textarea ( $flag, $value, $rows, $cols ) 
+{
+    $value = htmlentities ( $value );
+    return "<textarea name=\"$flag\" rows=\"$rows\" cols=\"$cols\">"
+            . $value . "</textarea>";
+}
+
 function menubox ( $name, $options, $value ) 
 {
     $s="<select name=\"$name\">";
@@ -226,137 +190,87 @@ function keys_menubox ( $name, $options, $value )
     return $s . "</select>";
 }  
 
-function encode_flags ( $flags ) 
-{
-    // Encode flags to keep size down, so can use GET's instead of POST's
-    // Note that the value may need to be urlencoded.
+////
+// Flag (compile option) handling functions
+////
 
+function default_flags () 
+{
     global $flag_table;
+    
+    $flags = array ();
 
-    $s = "";
-
-       foreach ( $flags as $flag => $value ) {
-        $prop = $flag_table[$flag];
-        $type = $prop["type"];
-        $s .= $prop["code"];
-
-        if ( $type != "on/off" ) {
-            $n = strlen ( $value );
-            $nstr = strval ( $n );
-
-            if ( $n < 10 ) 
-                $nstr = "0" . $nstr;
+    foreach ( $flag_table as $key => $props ) {
 
-            if ( $n >= 80 ) 
-                die ( "Value too long!" );
+        $flag  = $props["flag"];
+        $type  = $props["type"];
 
-            $s .= $nstr . $value;
+        // Fields like headers have no "value" property
+        if ( isset ( $props["value"] ) ) {
+            $flags[$flag] = $props["value"];
         }
     }
-    return $s;
+    return $flags;
 }
 
-function decode_flags_into ( $s, $flags 
+function get_flags (
 {
-    global $flag_codes;
-    $len = strlen ( $s );
+    global $flag_table;
+    
+    $flags = default_flags ();
 
-    $pos = 0;
-    while ( $pos < $len ) {
+    foreach ( $flag_table as $key => $props ) {
 
-        $code = substr ( $s, $pos, 2 );
-        $pos += 2;
-        $prop = $flag_codes[$code];
-        $flag = $prop["flag"];
-        $value = "on";
-        $type = $prop["type"];
-
-        if ( $prop["type"] != "on/off" ) {
-            $n = intval ( substr ( $s, $pos, 2 ) );
-            $pos += 2;
-            $value = substr ( $s, $pos, $n );
-            $pos += $n;
+        $flag = $props["flag"];
+        
+        if ( isset ( $_POST["$flag"] ) ) {
+            $flags[$flag] = $_POST["$flag"];
         }
-        $flags[$flag] = $value;
     }
     return $flags;
 }
 
-function default_flags () 
+function pprint_flag ( $key, $value )
 {
     global $flag_table;
 
-    if ( isset ( $_GET["F"] ) )
-        $F = $_GET["F"];
-
-    if ( isset ( $_GET["nic"] ) )
-        $nic = $_GET["nic"];
-
-    if ( isset ( $_GET["nicfile"] ) )
-        $nicfile = $_GET["nicfile"];
-
-    if ( isset ( $_GET["ofmt"] ) )
-        $ofmt = $_GET["ofmt"];
-
-    if ( isset ( $_GET["arch"] ) )
-        $arch = $_GET["arch"];
-
-    $flags = array ();
-    if ( isset ( $F ) && $F != "ignore" && isset ( $arch ) &&
-         ( ( isset ( $nic ) && isset ( $ofmt ) ) || isset ( $nicfile ) ) ) {
-        $vkey = value_key($ofmt);
-
-               foreach ( $flag_table as $key => $props ) {
-
-            $farch = isset ( $props["arch"] ) ? $props["arch"] : "";
-
-            if ( isset ( $arch ) && ( $farch == "all" || $farch == $arch ) ) {
+    $type = $flag_table[$key]["type"];
+    $s = "";
 
-                $flag = $props["flag"];
-                $type = $props["type"];
-                $value = ( isset ( $props[$vkey] ) ? $props[$vkey] : $props["value"] );
-                if ( $type != "on/off" || $value == "on" ) {
-                    $flags[$flag] = $value;
-                }
-            }
-        }
-        $flags = decode_flags_into ( $F, $flags );
+    if ( $type == "on/off" && $value == "on" ) {
+        $s = "#define $key";
+    } else if ( $type == "on/off" && $value != "on" ) {
+        $s = "#undef $key";
+    } else if ( $type == "string" ) {
+        $s = ( "#define $key \"" . cleanstring ( $value ) . "\"" );
+    } else if ($type == "qstring" ) {
+        $s = ( "#define $key \\\"" . cleanstring ( $value ) . "\\\"" );
+    } else {
+        $s = "#define $key " . cleanstring($value);
     }
-    return $flags;
+    
+    return $s;
 }
 
-function get_flags (
+function pprint_flags ( $flags 
 {
-    global $flag_table;
-    $flags = default_flags ();
-
-    // echo "<p>Flags in get_flags (): </p>";
-    // show_flags ( $flags );
-
-    foreach ( $flag_table as $key => $props ) {
-        $flag = $props["flag"];
-        if ( isset ( $_GET["$flag"] ) ) {
-            $flags[$flag] = $_GET["$flag"];
-        }
+    $s = "";
+       foreach ( $flags as $key => $value ) {
+        $f = pprint_flag ( $key, $value );
+        $s .= $f . " ";
     }
-    return $flags;
+    return $s;
 }
 
 function echo_flags ( $flags )
 {
-    global $version;
     global $flag_table;
 
-    $arch = isset ( $_GET['arch'] ) ? $_GET['arch'] : '';
-
     echo "<table>\n";
 
        foreach ( $flag_table as $key => $props ) {
 
-        $farch = isset ( $props["arch"] ) ? $props["arch"] : "";
-
         // Hide parameters from users that should not be changed.
-
         $hide_from_user = isset ( $props["hide_from_user"] ) ? $props["hide_from_user"] : "no";
 
         $flag = $props["flag"];
@@ -368,91 +282,53 @@ function echo_flags ( $flags )
 
             // Hidden flags cannot not be set by the user.  We use hidden form
             // fields to keep them at their default values.
-            if ( $type != "header" && ( $farch == "all" || $farch == $arch ) ) {
+            if ( $type != "header" ) {
                 echo hidden ( $flag, $value );
             }
-
+            
         } else {
+            
+            // Flag (gPXE compile option) should be displayed to user
 
-            if ( $type == "header" || $farch == "all" || $farch == $arch ) {
-      
-                if ( $type == "header" ) {
-  
-                    $label = $props["label"];
-                    echo "<td colspan=2><hr><h3>$label</h3><hr></td>";
-  
-                } else if ($type == "on/off" ) {
-  
-                    echo "<td>", checkbox($flag, $value), "</td><td><b>$flag</b></td>";
-  
-                } else {        // no checkbox
-  
-                    echo "<td>&nbsp;</td><td><b>$flag: </b>";
-  
-                    if ($type == "choice" ) {
-                        $options = $props["options"];
-                        echo menubox($flag, $options, $value);
-                    }
-  
-                    else {
-                        echo textbox($flag, $value, ($type == "integer" ? 5 : 25));
-                    }
-  
-                    echo "</td>";
-  
-                }
-  
-                echo "</tr>\n";
-  
-                if ( $type != "header" ) {
+            if ( $type == "header" ) {
 
-                    echo "<tr><td>&nbsp;</td>";
-                    echo "<td>\n";
-                    include_once "doc/$flag.html";
-                    echo "\n</td></tr>\n";
+                $label = $props["label"];
+                echo "<td colspan=2><hr><h3>$label</h3><hr></td>";
 
-                }
-            }
-        }
-    }
-    echo "</table>";
-}
+            } else if ($type == "on/off" ) {
 
-function pprint_flag ( $key, $value )
-{
-    global $flag_table;
+                echo "<td>", checkbox ( $flag, $value ), "</td><td><strong>$flag</strong></td>";
 
-    $type = $flag_table[$key]["type"];
-    $s = "";
+            } else {   // don't display checkbox for non-on/off flags
 
-    if ( $type == "on/off" && $value == "on" ) {
-        $s = "#define $key";
-    } else if ( $type == "on/off" && $value != "on" ) {
-        $s = "#undef $key";
-    } else if ( $type == "string" ) {
-        if ( $value != "" ) $s = ( "#define $key \"" . cleanstring($value) . "\"" );
-    } else if ($type == "qstring" ) {
-        if ( $value != "" ) $s = ( "#define $key \\\"" . cleanstring($value) . "\\\"" );
-    } else {
-        $s = "#define $key " . cleanstring($value);
-    }
-    // print ( $s . "<br>" );
-    
-    return $s;
-}
+                echo "<td>&nbsp;</td><td><strong>$flag: </strong>";
 
-function pprint_flags ( $flags ) 
-{
-    $s = "";
-       foreach ( $flags as $key => $value ) {
-        $f = pprint_flag($key, $value);
-        if ($f != "" )
-            $s .= $f . " ";
+                if ($type == "choice" ) {
+                    $options = $props["options"];
+                    echo menubox($flag, $options, $value);
+
+                } else {
+
+                    echo textbox($flag, $value, ($type == "integer" ? 7 : 25));
+                }
+                echo "</td>";
+            }
+            echo "</tr>\n";
+
+            if ( $type != "header" ) {
+                               echo "<tr><td>&nbsp;</td>";
+                               echo "<td>\n";
+                               if ( is_file ( "doc/$flag.html" ) ) { 
+                                       include_once "doc/$flag.html";
+                               }
+                               echo "\n</td></tr>\n";
+            }
+        }
     }
-    return $s;
+    echo "</table>";
 }
 
-function get_cfgsecs ()
+function get_flag_cfgsecs ()
 {
     global $flag_table;
     $cfgsecs = array ();
@@ -466,39 +342,31 @@ function get_cfgsecs ()
     return ( $cfgsecs );
 }
 
-function write_config_file ( $fname, $arch, $flags ) 
-{
-    global $flag_table;
-
-    $cfgsecs = get_cfgsecs ();
+////
+// File and directory handling functions
+////
 
-    $fp = fopen ( $fname, "wb" );
-    if ( $fp <= 0 ) {
-        die ( "Unable to open $fname file for output!" );
+function mktempcopy ( $src, $dst ) 
+{
+    if ( $src[0] != "/" ) {
+        $src = dirname ( $_SERVER['SCRIPT_FILENAME'] ) . "/" . $src;
     }
 
-    foreach ( $cfgsecs as $cfgsec ) {
-
-        fwrite ( $fp, "/* @BEGIN ${cfgsec}.h \n*/ \n\n" );
+    $dir = tempnam ( $dst, "MDCROM" );
+    unlink ( $dir );
 
-        foreach ( $flags as $key => $value ) {
-
-            // When the flag matches this section name, write it out
-            if ( $flag_table[$key]["cfgsec"] == $cfgsec ) {
-                fwrite ( $fp, pprint_flag ( $key, $value ) . "\n" );
-            } 
-
-        }
-        fwrite ( $fp, "\n/* @END ${cfgsec}.h \n*/ \n\n" );
+    exec ( "/bin/cp -a '$src' '$dir' 2>&1", $cpytxt, $status );  
+    if ( $status != 0 ) {
+        die ( "src directory copy failed!" );
     }
-    fclose($fp);
+    return ( $dir );
 }
 
 function write_gpxe_config_files ( $config_dir, $flags ) 
 {
     global $flag_table;
 
-    $cfgsecs = get_cfgsecs ();
+    $cfgsecs = get_flag_cfgsecs ();
 
     foreach ( $cfgsecs as $cfgsec ) {
 
@@ -526,80 +394,17 @@ function write_gpxe_config_files ( $config_dir, $flags )
     }
 }
 
-function cleanstring ( $s ) 
-{
-    $len = strlen ( $s );
-    if ( $len > 80 ) {
-        $s = substr ( $s, 0, 80 );
-    }
-
-    $s      = trim ( $s );
-    $pos    = 0;
-    $result = "";
-
-    while ( $pos < $len ) {
-        $ltr = ord ( ucfirst ( $s[$pos] ) );
-        if ( ( $ltr >= ord ( "A" ) ) && ( $ltr <= ord ( "Z" ) ) || 
-             ( $ltr >= ord ( "0" ) ) && ( $ltr <= ord ( "9" ) ) || 
-             ( $ltr == ord ( "." ) ) && ( strlen ( $result ) > 0 ) ||
-             ( $ltr == ord ( "_" ) ) ||
-             ( $ltr == ord ( "+" ) ) ||
-             ( $ltr == ord ( ":" ) ) ||
-             ( $ltr == ord ( "/" ) ) ||
-             ( $ltr == ord ( "-" ) ) ) {
-            $result .= $s[$pos];
-        }
-        $pos++;
-    }
-    return $result;
-}
-
-function copydir ( $src, $dst ) 
+function write_embedded_file ( $fname, $ftext )
 {
-    if ( !mkdir ( $dst, 0700 ) ) {
-        die ( "mkdir failed" );
-    }
-
-    $dp = opendir ( $src );
-    if ( $dp < 1 ) {
-        die ( "opendir failed" );
-    }
-
-    while ( $file = readdir ( $dp ) ) {
-
-        if ( is_dir ( "$src/$file" ) ) {
-
-            if ($file[0] != "." ) {
-                copydir ( "$src/$file", "$dst/$file" );
-            }
-        } else {
-
-            copy ( "$src/$file", "$dst/$file" );
+        $fp = fopen ( $fname, "wb" );
+        if ( $fp <= 0 ) {
+            die ( "Unable to open $fname file for output!" );
         }
-    }
-    closedir ( $dp );
-}
-
-function mktempcopy ( $src, $dst ) 
-{
-    if ( $src[0] != "/" ) {
-        $src = dirname ( $_SERVER['SCRIPT_FILENAME'] ) . "/" . $src;
-    }
-
-    $dir = tempnam ( $dst, "ROM" );
-    unlink( $dir );
-
-    //  copydir ( $src, $dir );
-
-    exec ( "/bin/cp -a '$src' '$dir' 2>&1", $cpytxt, $status );  
-
-    if ( $status != 0 ) {
-        die ( "src directory copy failed!" );
-    }
-    return ( $dir );
+        fwrite ( $fp, $ftext );
+        fclose ( $fp );
 }
 
-function deltempdir ( $dir ) 
+function deltempdir ( $dir )
 {
     $dp = opendir ( $dir );
     if ($dp < 1) {
@@ -613,7 +418,7 @@ function deltempdir ( $dir )
                 deltempdir ( "$dir/$file" );
             }
         } else {
-            unlink( "$dir/$file" );
+            unlink ( "$dir/$file" );
         }
     }
     closedir ( $dp );
@@ -623,25 +428,16 @@ function deltempdir ( $dir )
     }
 }
 
+////
 // Debugging functions
+////
 
-function debug_info (
+function show_flags ( $flags 
 {
-    $F = $_GET['F'];
-    $nic = $_GET['nic'];
-    $ofmt = $_GET['ofmt'];
-
-    $s = "F=\"" . htmlentities($F) . "\"<br>\n";
-    $s .= "nic=\"" . htmlentities($nic) . "\"<br>\n";
-    $s .= "ofmt=\"" . htmlentities($ofmt) . "\"<br>\n";
+    echo ( "\$flags contains " . count ( $flags ) . " elements:" . "<br>" );
 
-    return $s;
-}
-
-function showflags ( $flags ) 
-{
        foreach ( $flags as $key => $flag ) {
-        print ( "flag[".$key."]="."\"$flag\""."<br>" );
+        echo ( "\$flags[" . $key . "]=" . "\"$flag\"" . "<br>" );
     }
 }
 
@@ -658,17 +454,6 @@ function dump_flag_table ()
     }
 }
 
-function dump_flag_table_keys_sorted () 
-{
-    global $flag_table;
-
-    ksort ( $flag_table );
-
-    foreach ( $flag_table as $key => $props ) {
-        print ( $key . ".html<br>" );
-    }
-}
-
 function dump_flag_codes () 
 {
     global $flag_codes;
@@ -682,43 +467,6 @@ function dump_flag_codes ()
     }
 }
 
-function curPageURL () 
-{
-    $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" );
-
-    $port = ( isset($_SERVER["SERVER_PORT"] ) && 
-          ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || 
-            ( $isHTTPS  && $_SERVER["SERVER_PORT"] != "443" ) ) );
-
-    $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : '';
-
-    $url = ( $isHTTPS ? 'https://' : 'http://' ) .
-        $_SERVER["SERVER_NAME"] . $port . $_SERVER["REQUEST_URI"];
-
-    return $url;
-}
-
-function curDirURL () 
-{
-        $dir = dirname ( $_SERVER['PHP_SELF'] );
-
-        if ( $dir == "." || $dir == "/" ) {
-                $dir = "";
-        }
-
-        $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" );
-        $port = ( isset($_SERVER["SERVER_PORT"] ) && 
-                          ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || 
-                                ( $isHTTPS  && $_SERVER["SERVER_PORT"] != "443" ) ) );
-
-        $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : '';
-
-        $dest = ( $isHTTPS ? 'https://' : 'http://' ) .
-                $_SERVER["SERVER_NAME"] . $dir . "/";
-
-        return $dest;
-}
-
 // For emacs:
 // Local variables:
 //  c-basic-offset: 4