Don't offer .hd (hard disk partition)
[people/pravin/rom-o-matic-BKO.git] / configinfo.php
1 <? // -*- Mode: PHP; -*-
2
3 $version = "git";
4 $src_dir = "../../../gpxe.git/src"; // TODO temporary hack to work around symlink git
5
6 include ( "flag_table.php" );
7
8 $top_inc = "top.php";
9 $bottom_inc = "bottom.php";
10
11 $flag_codes = array ();
12
13 reset($flag_table);
14 $i = 1;
15
16 while ( list ( $key, $props ) = each ( $flag_table ) ) {
17   $is = (string) $i;
18   if ( $i < 10 ) {
19     $is = "0" . $is;
20   }
21
22   $props["code"] = $is;
23   $props["flag"] = $key;
24
25   $flag_table[$key] = $props;
26   $flag_codes[$is] = $props;
27   $i = $i + 1;
28 }
29
30 // dump_flag_table();
31 // dump_flag_codes();
32 // dump_flag_table_keys_sorted();
33 // exit ();
34
35 $ofmts = array (
36   "Floppy bootable ROM Image (.dsk)" => "dsk",
37   "Binary ROM Image(.rom)" => "rom",
38   "ISO bootable image (.iso)" => "iso",
39   "ISO bootable image with legacy floppy emulation (.liso)" => "liso",
40   "LILO/GRUB/SYSLINUX loadable Linux kernel format (.lkrn)" => "lkrn",
41   "PXE bootstrap loader format ROM Image (.pxe)" => "pxe",
42   "USB Keychain Disk Image / bootable HD image (.usb)" => "usb",
43 // "HD Disk Partition Image (.hd)" => "hd",
44 );
45
46 function value_key ($ofmt) 
47 {
48   // No LinuxBIOS support in gpxe right now
49   //  return (strpos ($ofmt, "LinuxBIOS" ) === false ? "value" : "valuelnx" );
50   return ( "value" );
51 }
52
53 function snarf_file ( $fname ) 
54 {
55   $len = filesize ( $fname );
56   if ( $len > 0 ) {
57     $fp = fopen ( $fname, "rb" );
58     if ( $fp > 0 ) {
59       $buf = fread ( $fp, $len );
60       fclose ( $fp );
61       if ( $buf ) 
62         return ($buf);
63     }
64   }
65   die ( "Unable to get $fname" );
66   return 0;
67 }
68
69 function get_nics () 
70 {
71   global $version, $src_dir;
72   $nic = ( isset ( $_GET['nic'] ) ? $_GET['nic'] : '' );
73
74   $fd = fopen( "$src_dir/bin/NIC", "r" );
75   if ( $fd < 1 ) {
76     trigger_error ( "Missing NIC Config Info" );
77     exit ();
78   }
79   $nics = array ();
80   $family = "";
81   while ( !feof ( $fd ) ) {
82     $line = trim ( fgets ( $fd, 200 ) );
83     if ( strpos ( $line, "family" ) === 0 ) {
84       list ( $dummy, $family ) = split( "[ \t]+", $line );
85       settype ( $family, "string" );
86     } elseif ( $line != "" && $line[0] != '#' ) {
87       list ( $rom, $pci_ids ) = split ( "[ \t]+", $line );
88       settype ( $rom, "string" );
89       if ( $pci_ids == "-" ) $pci_ids = "";
90       $fam_name = substr ( $family, strrpos ( $family, "/" ) + 1, 
91                            strlen ( $family ) - strrpos ( $family, "/" ) + 1 );
92       $option = ( $pci_ids ? "$fam_name:$rom -- [$pci_ids]" : "$fam_name:$rom" );
93       // * Kludge - fix incoming $nic if any.
94       if ( $nic == $rom ) $nic = $option;
95       // ISA drivers are per-family, PCI are per-ROM. If ever decide
96       // to cache the drivers, can use this key.
97       $nics[$option] = ( $pci_ids ? "PCI:" . $rom : "ISA:" . $family );
98       // echo $nics array for debugging
99       //      echo "\$nics[$option] "." -> ".$nics[$option]."<br>";
100     }
101   }
102   $nics["gpxe:all-drivers"] = "PCI:gpxe";
103   fclose ( $fd );
104   ksort ( $nics );
105   return( $nics );
106 }
107
108 function get_nicfile () 
109 {
110   global $ofmts;
111
112   $nic = $_GET['nic'];
113   $ofmt = $_GET['ofmt'];
114
115   $n = strpos ( $nic, " " );
116   $family = substr ( $nic, 0, strpos ( $nic,":" ) );
117
118   $rom = ( $n > 0 ? 
119            substr ( $nic, strpos ( $nic, ":" ) + 1, 
120                     $n - ( strlen ( $family ) + 1 ) ) :  
121            $family );
122
123   $ftype = $ofmts[$ofmt];
124   if ( $ftype == "" ) $ftype = "dsk"; 
125
126   // if .rom format is requested, return rom name,
127   //   since .rom images are PCI ID specific, and 
128   //   rules only exist to build bin/$rom for Binary
129   //    ROM images types
130   if ( $ftype == "rom" )
131     $retval = cleanstring ( $rom . "." . $ftype );
132   else
133     $retval = cleanstring ( $family . "." . $ftype );
134
135   // Let's take a look at what was chosen.
136   //  echo "strpos ( \$nic, \":\" ) ->" . strpos ( $nic, ":" ) . "<br>";
137   //  echo "\$n ->" . "$n" . "<br>";
138   //  echo "\$nic ->" . "|$nic|" . "<br>";
139   //  echo "\$rom ->" . "|$rom|" . "<br>";
140   //  echo "\$family ->" . "|$family|" . "<br>";
141   //  echo "\$ftype ->" . "|$ftype|" . "<br>";
142   //  echo "\$retval ->" . "|$retval|" . "<br>";
143   //  exit();
144
145   return ( $retval );
146 }
147
148 function checkbox ( $flag, $value ) {
149   return "<input type=\"checkbox\" value=\"on\" name=\"$flag\"" .
150     ($value == "on" ? " checked>" : ">" );
151 }
152
153 function textbox ( $flag, $value, $size ) {
154   $value = htmlentities ( $value );
155   return "<input type=\"text\" size=\"$size\" value=\"$value\" name=\"$flag\">";
156 }
157  
158 function menubox ( $name, $options, $value ) {
159   $s="<select name=\"$name\">";
160   reset ( $options );
161   while ( list ( $ignore, $option ) = each ( $options ) ) {
162     $s .= "<option" . ( $option == $value ? " selected>" : ">" ) .
163       htmlentities ( $option ) . "</option>";
164   }
165   return $s . "</select>";
166 }
167
168 function keys_menubox ( $name, $options, $value ) 
169 {
170   $s="<select name=\"$name\">";
171   reset ( $options );
172   while ( list ( $option, $ignore ) = each ( $options ) ) {
173     if ( !$value ) $value = $option;
174     $s .= "<option" . ( $option == $value ? " selected>" : ">" ) .
175       htmlentities ( $option ) . "</option>";
176   }
177   return $s . "</select>";
178 }  
179
180 // Encode flags to keep size down, so can use GET's instead of POST's...
181 // Note that the value may need to be urlencoded.
182 function encode_flags ( $flags ) 
183 {
184   global $flag_table;
185
186   $s = "";
187   reset ( $flags );
188   while ( list ( $flag, $value ) = each ( $flags ) ) {
189     $prop = $flag_table[$flag];
190     $type = $prop["type"];
191     $s .= $prop["code"];
192     if ( $type != "on/off" ) {
193       $n = strlen ( $value );
194       $nstr = strval ( $n );
195       if ( $n < 10 ) $nstr = "0" . $nstr;
196       if ( $n >= 80 ) die ( "Value too long!" );
197       $s .= $nstr . $value;
198     }
199   }
200   return $s;
201 }
202
203 function decode_flags_into ( $s, $flags ) 
204 {
205   global $flag_codes;
206   $len = strlen ( $s );
207
208   $pos = 0;
209   while ( $pos < $len ) {
210     $code = substr ( $s, $pos, 2 );
211     $pos += 2;
212     $prop = $flag_codes[$code];
213     $flag = $prop["flag"];
214     $value = "on";
215     $type = $prop["type"];
216     if ( $prop["type"] != "on/off" ) {
217       $n = intval ( substr ( $s, $pos, 2 ) );
218       $pos += 2;
219       $value = substr ( $s, $pos, $n );
220       $pos += $n;
221     }
222     $flags[$flag] = $value;
223   }
224   return $flags;
225 }
226
227 function default_flags () 
228 {
229   global $flag_table;
230
231   if ( isset ( $_GET["F"] ) )
232     $F = $_GET["F"];
233   if ( isset ( $_GET["nic"] ) )
234     $nic = $_GET["nic"];
235   if ( isset ( $_GET["nicfile"] ) )
236     $nicfile = $_GET["nicfile"];
237   if ( isset ( $_GET["ofmt"] ) )
238     $ofmt = $_GET["ofmt"];
239   if ( isset ( $_GET["arch"] ) )
240     $arch = $_GET["arch"];
241
242   $flags = array ();
243   if ( isset ( $F ) && $F != "ignore" && isset ( $arch ) &&
244        ( ( isset ( $nic ) && isset ( $ofmt ) ) || isset ( $nicfile ) ) ) {
245     $vkey = value_key($ofmt);
246
247     reset($flag_table);
248     while ( list ( $key, $props ) = each ( $flag_table ) ) {
249
250       $farch = isset ( $props["arch"] ) ? $props["arch"] : "";
251
252       if ( isset ( $arch ) && ( $farch == "all" || $farch == $arch ) ) {
253         $flag = $props["flag"];
254         $type = $props["type"];
255         $value = ( isset ( $props[$vkey] ) ? $props[$vkey] : $props["value"] );
256         if ( $type != "on/off" || $value == "on" ) {
257           $flags[$flag] = $value;
258         }
259       }
260     }
261     $flags = decode_flags_into ( $F, $flags );
262   }
263   return $flags;
264 }
265
266 function get_flags () 
267 {
268   global $flag_table;
269   $flags = default_flags();
270
271   // echo "<p>Flags in get_flags(): </p>";
272   // show_flags($flags);
273
274   reset ( $flag_table );
275   while ( list ( $key, $props ) = each ( $flag_table ) ) {
276     $flag = $props["flag"];
277     if ( isset ( $_GET["$flag"] ) ) {
278       $flags[$flag] = $_GET["$flag"];
279     }
280   }
281   return $flags;
282 }
283
284 function echo_flags ( $flags ) {
285
286   global $version;
287   global $flag_table;
288
289   $arch = isset ( $_GET['arch'] ) ? $_GET['arch'] : '';
290
291   echo "<table>\n";
292
293   reset($flag_table);
294   while ( list ( $index, $props ) = each ( $flag_table ) ) {
295
296     $farch = isset ( $props["arch"] ) ? $props["arch"] : "";
297
298     // Hide parameters from users that should not be changed.
299
300     $hide_from_user = isset ( $props["hide_from_user"] ) ? $props["hide_from_user"] : "no";
301
302     $flag = $props["flag"];
303     $type = $props["type"];
304
305     $value = isset ( $flags[$flag] ) ? $flags[$flag] : '';
306
307     if ( ( $hide_from_user != "yes" ) && ($type == "header" || $farch == "all" 
308                                           || $farch == $arch ) ) {
309       
310       if ( $type == "header" ) {
311
312         $label = $props["label"];
313         echo "<td colspan=2><hr><h3>$label</h3><hr></td>";
314
315       } elseif ($type == "on/off" ) {
316
317         echo "<td>", checkbox($flag, $value), "</td><td><b>$flag</b></td>";
318
319       } else {  // no checkbox
320
321         echo "<td>&nbsp;</td><td><b>$flag: </b>";
322
323         if ($type == "choice" ) {
324           $options = $props["options"];
325           echo menubox($flag, $options, $value);
326         }
327
328         else {
329           echo textbox($flag, $value, ($type == "integer" ? 5 : 25));
330         }
331
332         echo "</td>";
333
334       }
335
336       echo "</tr>\n";
337
338       if ( $type != "header" ) {
339         echo "<tr><td>&nbsp;</td>";
340         echo "<td>\n";
341         include "doc-$version/$flag.html";
342         echo "\n</td></tr>\n";
343       }
344     }
345   }
346   echo "</table>";
347 }
348
349 function pprint_flag ( $key, $value ) {
350
351   global $flag_table;
352
353   $type = $flag_table[$key]["type"];
354   $s = "";
355
356   if ( $type == "on/off" && $value == "on" ) {
357     $s = "#define $key";
358   } elseif ( $type == "on/off" && $value != "on" ) {
359     $s = "#undef $key";
360   } elseif ( $type == "string" ) {
361     if ( $value != "" ) $s = ( "#define $key \"" . cleanstring($value) . "\"" );
362   } elseif ($type == "qstring" ) {
363     if ( $value != "" ) $s = ( "#define $key \\\"" . cleanstring($value) . "\\\"" );
364   } else {
365     $s = "#define $key " . cleanstring($value);
366   }
367   //  print ($s . "<br>" );
368
369   return $s;
370 }
371
372 function pprint_flags ( $flags ) 
373 {
374   $s = "";
375   reset ($flags);
376
377   while (list($key, $value) = each($flags)) {
378     $f = pprint_flag($key, $value);
379     if ($f != "" )
380       $s .= $f . " ";
381   }
382   return $s;
383 }
384
385 function get_cfgsecs ()
386 {
387   global $flag_table;
388   $cfgsecs = array ();
389
390   foreach ( $flag_table as $key => $props ) {
391     if ( isset ( $props['cfgsec'] ) ) {
392       $cfgsec = $props["cfgsec"];
393       $cfgsecs[$cfgsec] = $cfgsec;
394     }
395   }
396   return ( $cfgsecs );
397 }
398
399 function write_config_file ( $fname, $arch, $flags ) 
400 {
401   global $flag_table;
402
403   $cfgsecs = get_cfgsecs ();
404
405   $fp = fopen ( $fname, "wb" );
406   if ( $fp <= 0 ) {
407     die ( "Unable to open $fname file for output!" );
408   }
409
410   foreach ( $cfgsecs as $cfgsec ) {
411
412     fwrite ( $fp, "/* @BEGIN ${cfgsec}.h \n*/ \n\n" );
413
414     foreach ( $flags as $key => $value ) {
415
416       // When the flag matches this section name, write it out
417       if ( $flag_table[$key]["cfgsec"] == $cfgsec ) {
418         fwrite ( $fp, pprint_flag ( $key, $value ) . "\n" );
419       } 
420
421     }
422     fwrite ( $fp, "\n/* @END ${cfgsec}.h \n*/ \n\n" );
423   }
424   fclose($fp);
425 }
426
427 function cleanstring ($s) {
428   $len = strlen($s);
429   if ($len > 80) {
430     $s = substr ($s, 0, 80);
431   }
432   $s = trim($s);
433   $pos = 0;
434   $result = "";
435   while($pos < $len) {
436     $ltr = ord( ucfirst( $s[$pos]));
437     if ( ($ltr >= ord( "A" )) && ($ltr <= ord( "Z" )) || 
438          ($ltr >= ord( "0" )) && ($ltr <= ord( "9" )) || 
439          ($ltr == ord( "." )) && (strlen($result) > 0) ||
440          ($ltr == ord( "_" )) ||
441          ($ltr == ord( "+" )) ||
442          ($ltr == ord( ":" )) ||
443          ($ltr == ord( "/" )) ||
444          ($ltr == ord( "-" )) ) {
445       $result .= $s[$pos];
446     }
447     $pos++;
448   }
449   return $result;
450 }
451
452 function copydir ( $src, $dst ) 
453 {
454   if ( !mkdir ( $dst, 0700 ) ) {
455     die ( "mkdir failed" );
456   }
457
458   $dp = opendir ( $src );
459   if ( $dp < 1 ) {
460     die ( "opendir failed" );
461   }
462
463   while ( $file = readdir ( $dp ) ) {
464     if ( is_dir ( "$src/$file" ) ) {
465       if ($file[0] != "." ) {
466         copydir ( "$src/$file", "$dst/$file" );
467       }
468     } else {
469       copy ( "$src/$file", "$dst/$file" );
470     }
471   }
472   closedir ( $dp );
473 }
474
475 function mktempcopy ( $src, $dst ) 
476 {
477   if ( $src[0] != "/" ) {
478     $src = dirname($_SERVER['SCRIPT_FILENAME']) . "/" . $src;
479   }
480
481   $dir = tempnam ( $dst, "ROM" );
482   unlink( $dir );
483
484   //  copydir ( $src, $dir );
485
486   exec ( "/bin/cp -a '$src' '$dir' 2>&1", $cpytxt, $status );  
487
488   if ( $status != 0 ) {
489     die ( "src directory copy failed!" );
490   }
491
492   return ( $dir );
493 }
494
495 function deltempdir ($dir) 
496 {
497   $dp = opendir ( $dir );
498   if ($dp < 1) {
499     die ( "opendir failed" );
500   }
501
502   while ( $file = readdir ( $dp ) ) {
503
504     if ( is_dir ( "$dir/$file" ) ) {
505       if ($file[0] != "." ) {
506         deltempdir ( "$dir/$file" );
507       }
508     } else {
509       unlink( "$dir/$file" );
510     }
511   }
512   closedir ( $dp );
513
514   if ( !rmdir ( "$dir" ) ) {
515     die ( "rmdir failed" );
516   }
517 }
518
519 function debug_info () 
520 {
521
522   $F = $_GET['F'];
523   $nic = $_GET['nic'];
524   $ofmt = $_GET['ofmt'];
525
526   $s = "F=\"" . htmlentities($F) . "\"<br>\n";
527   $s .= "nic=\"" . htmlentities($nic) . "\"<br>\n";
528   $s .= "ofmt=\"" . htmlentities($ofmt) . "\"<br>\n";
529
530   return $s;
531 }
532
533 function showflags ($flags) 
534 {
535    reset($flags);
536    while (list ($key, $flag) = each ($flags)) {
537      print ( "flag[".$key."]="."\"$flag\""."<br>" );
538    }
539 }
540
541 function dump_flag_table () 
542 {
543   global $flag_table;
544   reset ( $flag_table );
545
546   while ( list ( $key, $props ) = each ( $flag_table ) ) {
547     print ( "flag_table[" . $key . "] = " . "<br>" );
548
549     while ( list ( $key2, $props2 ) = each ( $props ) ) {
550       print ( "&nbsp;&nbsp;&nbsp;" . $key2 . " = " . $props2 . "<br>" );
551     }
552
553   }
554 }
555
556 function dump_flag_table_keys_sorted () 
557 {
558   global $flag_table;
559   reset ( $flag_table );
560   ksort ( $flag_table );
561
562   while ( list ( $key, $props ) = each ( $flag_table ) ) {
563     print ( $key . ".html<br>" );
564   }
565 }
566
567 function dump_flag_codes () 
568 {
569   global $flag_codes;
570   reset ( $flag_codes );
571
572   while ( list ( $key, $props ) = each ( $flag_codes ) ) {
573     print ( "flag_codes[" . $key . "] = " . "<br>" );
574
575     while ( list ( $key2, $props2 ) = each ( $props ) ) {
576       print ( "&nbsp;&nbsp;&nbsp;" . $key2 . " = " . $props2 . "<br>" );
577     }
578   }
579 }
580
581 function curPageURL () 
582 {
583   $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" );
584
585   $port = ( isset($_SERVER["SERVER_PORT"] ) && 
586             ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || 
587               ( $isHTTPS  && $_SERVER["SERVER_PORT"] != "443" ) ) );
588
589   $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : '';
590
591   $url = ( $isHTTPS ? 'https://' : 'http://' ) .
592          $_SERVER["SERVER_NAME"] . $port.$_SERVER["REQUEST_URI"];
593
594   return $url;
595 }
596
597 ?>