Slight wording changes on menus
[people/meteger/rom-o-matic/.git] / utils.php
index 9e2c80b..4855c41 100644 (file)
--- a/utils.php
+++ b/utils.php
@@ -1,8 +1,5 @@
 <? // -*- Mode: PHP; -*-
 
-// Show more runtime errors
-// error_reporting ( -1 );
-
 // Include table of user-configurable gPXE options
 require_once "flag-table.php";
 
@@ -14,9 +11,63 @@ if ( is_file ( 'local-config.php' ) ) {
     include "local-config.php";
 }
 
-list ( $nics, $roms ) = parse_nics_file ();
+// Parse src/bin/NIC file
+list ( $nics, $roms ) = parse_nic_file ();
+
+////
+// General utility functions
+////
+
+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 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" ) ) );
 
-function parse_nics_file ()
+        $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.
@@ -68,16 +119,28 @@ function parse_nics_file ()
     }
     fclose ( $fd );
 
-    // add special cases
-    $nics["undi"] = "undionly";
-    $nics["gpxe-all-drivers"] = "gpxe";
-
-    // put NICs in nice alpha order for menu
+    // put most NICs in nice alpha order for menu
     ksort ( $nics );
 
-    return ( array ( $nics, $roms ) );
+    // add special cases to the top
+
+       $new_nics = array ( "all-drivers" => "gpxe",
+                                               "undi" => "undionly" );
+
+       foreach ( $nics as $key => $value ) {
+               // skip the undi driver
+               if ( $key != "undi" ) {
+                       $new_nics[$key] = $value;
+               }
+       }
+
+       return ( array ( $new_nics, $roms ) );
 }
 
+////
+// HTML form utility functions
+////
+
 function hidden ( $flag, $value ) 
 {
     $value = htmlentities ( $value );
@@ -96,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\">";
@@ -120,6 +190,10 @@ function keys_menubox ( $name, $options, $value )
     return $s . "</select>";
 }  
 
+////
+// Flag (compile option) handling functions
+////
+
 function default_flags () 
 {
     global $flag_table;
@@ -132,12 +206,8 @@ function default_flags ()
         $type  = $props["type"];
 
         // Fields like headers have no "value" property
-        $value = isset ( $props["value"] ) ? $props['value'] : '';
-
-        if ( $value != '' ) {
-            if ( $type != "on/off" || $value == "on" ) {
-                $flags[$flag] = $props["value"];
-            }
+        if ( isset ( $props["value"] ) ) {
+            $flags[$flag] = $props["value"];
         }
     }
     return $flags;
@@ -160,6 +230,38 @@ function get_flags ()
     return $flags;
 }
 
+function pprint_flag ( $key, $value )
+{
+    global $flag_table;
+
+    $type = $flag_table[$key]["type"];
+    $s = "";
+
+    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 $s;
+}
+
+function pprint_flags ( $flags ) 
+{
+    $s = "";
+       foreach ( $flags as $key => $value ) {
+        $f = pprint_flag ( $key, $value );
+        $s .= $f . " ";
+    }
+    return $s;
+}
+
 function echo_flags ( $flags )
 {
     global $flag_table;
@@ -195,11 +297,11 @@ function echo_flags ( $flags )
 
             } else if ($type == "on/off" ) {
 
-                echo "<td>", checkbox ( $flag, $value ), "</td><td><b>$flag</b></td>";
+                echo "<td>", checkbox ( $flag, $value ), "</td><td><strong>$flag</strong></td>";
 
             } else {   // don't display checkbox for non-on/off flags
 
-                echo "<td>&nbsp;</td><td><b>$flag: </b>";
+                echo "<td>&nbsp;</td><td><strong>$flag: </strong>";
 
                 if ($type == "choice" ) {
                     $options = $props["options"];
@@ -207,58 +309,26 @@ function echo_flags ( $flags )
 
                 } else {
 
-                    echo textbox($flag, $value, ($type == "integer" ? 5 : 25));
+                    echo textbox($flag, $value, ($type == "integer" ? 7 : 25));
                 }
                 echo "</td>";
             }
             echo "</tr>\n";
 
             if ( $type != "header" ) {
-                echo "<tr><td>&nbsp;</td>";
-                echo "<td>\n";
-                include_once "doc/$flag.html";
-                echo "\n</td></tr>\n";
+                               echo "<tr><td>&nbsp;</td>";
+                               echo "<td>\n";
+                               if ( is_file ( "doc/$flag.html" ) ) { 
+                                       include_once "doc/$flag.html";
+                               }
+                               echo "\n</td></tr>\n";
             }
         }
     }
     echo "</table>";
 }
 
-function pprint_flag ( $key, $value )
-{
-    global $flag_table;
-
-    $type = $flag_table[$key]["type"];
-    $s = "";
-
-    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;
-}
-
-function pprint_flags ( $flags ) 
-{
-    $s = "";
-       foreach ( $flags as $key => $value ) {
-        $f = pprint_flag($key, $value);
-        if ($f != "" )
-            $s .= $f . " ";
-    }
-    return $s;
-}
-
-function get_cfgsecs ()
+function get_flag_cfgsecs ()
 {
     global $flag_table;
     $cfgsecs = array ();
@@ -272,11 +342,31 @@ function get_cfgsecs ()
     return ( $cfgsecs );
 }
 
+////
+// File and directory handling functions
+////
+
+function mktempcopy ( $src, $dst ) 
+{
+    if ( $src[0] != "/" ) {
+        $src = dirname ( $_SERVER['SCRIPT_FILENAME'] ) . "/" . $src;
+    }
+
+    $dir = tempnam ( $dst, "MDCROM" );
+    unlink ( $dir );
+
+    exec ( "/bin/cp -a '$src' '$dir' 2>&1", $cpytxt, $status );  
+    if ( $status != 0 ) {
+        die ( "src directory copy failed!" );
+    }
+    return ( $dir );
+}
+
 function write_gpxe_config_files ( $config_dir, $flags ) 
 {
     global $flag_table;
 
-    $cfgsecs = get_cfgsecs ();
+    $cfgsecs = get_flag_cfgsecs ();
 
     foreach ( $cfgsecs as $cfgsec ) {
 
@@ -304,48 +394,14 @@ function write_gpxe_config_files ( $config_dir, $flags )
     }
 }
 
-function cleanstring ( $s ) 
+function write_embedded_file ( $fname, $ftext )
 {
-    $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];
+        $fp = fopen ( $fname, "wb" );
+        if ( $fp <= 0 ) {
+            die ( "Unable to open $fname file for output!" );
         }
-        $pos++;
-    }
-    return $result;
-}
-
-function mktempcopy ( $src, $dst ) 
-{
-    if ( $src[0] != "/" ) {
-        $src = dirname ( $_SERVER['SCRIPT_FILENAME'] ) . "/" . $src;
-    }
-
-    $dir = tempnam ( $dst, "MDCROM" );
-    unlink( $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 )
@@ -362,7 +418,7 @@ function deltempdir ( $dir )
                 deltempdir ( "$dir/$file" );
             }
         } else {
-            unlink( "$dir/$file" );
+            unlink ( "$dir/$file" );
         }
     }
     closedir ( $dp );
@@ -372,28 +428,9 @@ function deltempdir ( $dir )
     }
 }
 
-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;
-}
-
+////
 // Debugging functions
+////
 
 function show_flags ( $flags ) 
 {
@@ -417,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;