slitaz-forge annotate mirror/floppies/builder/index.php @ rev 596

Web floppy builder: multiple initrd upload
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Aug 03 09:47:23 2015 +0200 (2015-08-03)
parents 8c02c699a951
children 4ea260d6c590
rev   line source
pascal@265 1 <?php
pascal@265 2 if (false) { // no php support on this mirror !
pascal@265 3 ?>
pascal@265 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
pascal@265 5 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
pascal@265 6 <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
pascal@265 7 <head>
pascal@265 8 <title>SliTaz Boot Floppies redirection</title>
pascal@265 9 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
pascal@265 10 <meta name="description" content="slitaz boot floppies builder redirection" />
pascal@265 11 <meta name="robots" content="index, nofollow" />
pascal@265 12 <meta name="author" content="SliTaz Contributors" />
pascal@578 13 <meta http-equiv="Refresh" content="0;url=http://mirror1.slitaz.org/floppies/builder/index.php">
pascal@265 14 </head>
pascal@594 15 <body>
pascal@594 16 <script type="text/javascript">
pascal@594 17 window.location.replace('http://mirror1.slitaz.org/floppies/builder/index.php')
pascal@594 18 </script>
pascal@594 19 <noscript>
pascal@594 20 <frameset rows="100%">
pascal@594 21 <frame src="http://mirror1.slitaz.org/floppies/builder/index.php">
pascal@594 22 <noframes>
pascal@594 23 <body>Please follow <a href="http://mirror1.slitaz.org/floppies/builder/index.php
pascal@594 24 ">this link</a>.</body>
pascal@594 25 </noframes>
pascal@594 26 </frameset>
pascal@594 27 </noscript>
pascal@594 28 </body>
pascal@366 29 </html>
pascal@265 30 <?php
pascal@265 31 }
pascal@265 32 ini_set('upload_max_filesize','16M');
pascal@265 33 ini_set('post_max_size','16M');
pascal@265 34 if (isset($_GET['id']) && is_file("/tmp/".$_GET['id']."/fd")) {
pascal@265 35
pascal@265 36 // Download a floppy image
pascal@265 37
pascal@265 38 $size = $_GET['s'];
pascal@265 39 if ($size == 0)
pascal@265 40 $size = filesize("/tmp/".$_GET['id']."/fd");
pascal@265 41 header("Content-Type: application/octet-stream");
pascal@265 42 header("Content-Length: ".$size);
pascal@265 43 header("Content-Disposition: attachment; filename=".
pascal@265 44 sprintf("fd%03d.img",$_GET['n']));
pascal@265 45 $cmd = "cat /tmp/".$_GET['id']."/fd";
pascal@265 46 if ($_GET['s'] != 0) {
pascal@265 47 $cmd .= " /dev/zero | dd count=1 bs=".$_GET['s'];
pascal@265 48 if ($_GET['n'] > 1)
pascal@265 49 $cmd .= " skip=".($_GET['n']-1);
pascal@265 50 }
pascal@265 51 echo `$cmd 2> /dev/null`;
pascal@265 52 exit;
pascal@265 53 }
pascal@265 54 ?>
pascal@265 55 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
pascal@265 56 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
pascal@265 57 <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
pascal@265 58 <head>
pascal@265 59 <title>SliTaz Boot Floppies</title>
pascal@265 60 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
pascal@265 61 <meta name="description" content="slitaz boot floppies builder" />
pascal@265 62 <meta name="robots" content="index, nofollow" />
pascal@265 63 <meta name="author" content="SliTaz Contributors" />
pascal@366 64 <link rel="shortcut icon" href="../static/favicon.ico" />
pascal@366 65 <link rel="stylesheet" type="text/css" href="../static/slitaz.css" />
pascal@265 66 <style type="text/css">
pascal@265 67
pascal@594 68 // input[type=submit] {
pascal@594 69 // cursor: pointer;
pascal@594 70 // }
pascal@594 71
pascal@265 72 input[type=text] {
pascal@265 73 width: inherit;
pascal@265 74 }
pascal@265 75
pascal@265 76 #content {
pascal@265 77 margin: 6px 280px 0px 0px;
pascal@265 78 padding: 0px 3% 20px 4%;
pascal@265 79 }
pascal@265 80
pascal@265 81 #nav {
pascal@265 82 right: 4%;
pascal@265 83 }
pascal@265 84
pascal@265 85 #copy {
pascal@265 86 text-align: center;
pascal@265 87 }
pascal@265 88
pascal@265 89 #bottom {
pascal@265 90 text-align: center;
pascal@265 91 }
pascal@265 92
pascal@594 93 // #cmdline:hover, #cmdline:foqus, #cmdline:not([value=""]) { width: 200px; }
pascal@594 94 // #cmdline { width: 50px; }
pascal@594 95
pascal@265 96 </style>
pascal@265 97 </head>
pascal@265 98 <body bgcolor="#ffffff">
pascal@265 99 <!-- Header -->
pascal@265 100 <div id="header">
pascal@265 101 <a name="top"></a>
pascal@265 102 <div id="logo"></div>
pascal@265 103 <div id="network">
pascal@265 104 <a href="http://www.slitaz.org/">
pascal@366 105 <img src="../static/home.png" alt="[ home ]" /></a>
pascal@265 106 <a href="bootloader" title="Build your floppy sets without Internet">Shell builder</a> |
pascal@265 107 <a href="../floppy-grub4dos" title="Boot tools">Generic boot floppy</a>
pascal@265 108 </div>
pascal@265 109 <h1><a href="http://www.slitaz.org/">Boot floppies builder</a></h1>
pascal@265 110 </div>
pascal@265 111
pascal@265 112 <!-- Navigation menu -->
pascal@265 113 <div id="nav">
pascal@265 114
pascal@265 115 <?php
pascal@265 116
pascal@265 117 // Cleanup old sessions
pascal@265 118
pascal@265 119 $dir = opendir("/tmp");
pascal@265 120 while (($name = readdir($dir)) !== false) {
pascal@265 121 if (preg_match('/^fdbuild/',$name) == 0) continue;
pascal@265 122 if (filemtime("/tmp/$name") > strtotime("-1 hour")) continue;
pascal@265 123 system("rm -rf /tmp/$name");
pascal@265 124 }
pascal@265 125 closedir($dir);
pascal@265 126
pascal@265 127 function get_long($file, $offset)
pascal@265 128 {
pascal@265 129 $value = 0;
pascal@265 130 if ($fp = fopen($file,"r")) {
pascal@265 131 fseek($fp,$offset,SEEK_SET);
pascal@265 132 for ($i = 0; $i < 32; $i += 8) {
pascal@265 133 $value += ord(fgetc($fp)) << $i;
pascal@265 134 }
pascal@265 135 fclose($fp);
pascal@265 136 }
pascal@265 137 return $value;
pascal@265 138 }
pascal@265 139
pascal@265 140 function error($string, $title="Error")
pascal@265 141 {
pascal@265 142 echo <<<EOT
pascal@265 143 <div class="nav_box">
pascal@265 144 <h4>$title</h4>
pascal@265 145 <p>
pascal@265 146 $string
pascal@265 147 </p>
pascal@265 148 </div>
pascal@265 149 EOT;
pascal@265 150 }
pascal@265 151
pascal@265 152 $size = 0;
pascal@265 153 $initrd_size = 0;
pascal@366 154 $info_size = 0;
pascal@265 155
pascal@265 156 // Upload kernel
pascal@265 157
pascal@265 158 foreach($_FILES as $data) {
pascal@265 159 $msg="The file ".$data['name']." ";
pascal@265 160 switch ($data["error"]) {
pascal@265 161 case UPLOAD_ERR_INI_SIZE :
pascal@265 162 error($msg."exceeds upload_max_filesize.");
pascal@265 163 break;
pascal@265 164 case UPLOAD_ERR_FORM_SIZE :
pascal@265 165 error($msg."exceeds max_post_size.");
pascal@265 166 break;
pascal@265 167 case UPLOAD_ERR_PARTIAL :
pascal@265 168 error($msg."was only partially uploaded.");
pascal@265 169 break;
pascal@265 170 case UPLOAD_ERR_NO_TMP_DIR :
pascal@265 171 error("Missing a temporary folder.");
pascal@265 172 break;
pascal@265 173 case UPLOAD_ERR_CANT_WRITE :
pascal@265 174 error("Failed to write file to disk.");
pascal@265 175 break;
pascal@265 176 }
pascal@265 177 }
pascal@265 178 if (isset($_FILES["kernel"]['tmp_name']) &&
pascal@265 179 is_uploaded_file($_FILES["kernel"]['tmp_name'])) {
pascal@265 180 $tmp_dir = tempnam('','fdbuild');
pascal@265 181 if (file_exists($tmp_dir)) unlink($tmp_dir);
pascal@265 182 mkdir($tmp_dir);
pascal@265 183 $tmp_dir .= '/';
pascal@265 184 move_uploaded_file($_FILES["kernel"]['tmp_name'],
pascal@265 185 $tmp_dir."kernel");
pascal@265 186 $kernel = $tmp_dir."kernel";
pascal@265 187 $boot_version = get_long($kernel,0x206) & 255;
pascal@366 188 if (get_long($kernel,0x202) != 0x53726448) // 'HdrS' magic
pascal@366 189 $boot_version = 0;
pascal@265 190 $size = get_long($kernel,0x1F4); // syssize paragraphs
pascal@265 191 if ($boot_version < 4) $size &= 0xFFFF; // 16 bits before 2.4
pascal@265 192 $size = ($size + 0xFFF) & 0xFFFF000; // round up to 64K
pascal@265 193 $size <<= 4; // paragraphs -> bytes
pascal@265 194 $msg = "The size of the file ".$_FILES["kernel"]['name'];
pascal@265 195 }
pascal@366 196
pascal@366 197 if ($size && isset($_FILES["info"]['tmp_name']) &&
pascal@366 198 is_uploaded_file($_FILES["info"]['tmp_name'])) {
pascal@366 199 move_uploaded_file($_FILES["info"]['tmp_name'],
pascal@366 200 $tmp_dir."info");
pascal@366 201 $info_size = $_FILES["info"]['size'];
pascal@366 202 }
pascal@265 203
pascal@265 204 // Upload initrd
pascal@265 205
pascal@596 206 if ($size) for ($i = 0; $i < count($_FILES["initrd"]['name']); $i++)
pascal@596 207 if (isset($_FILES["initrd"]['tmp_name'][$i]) &&
pascal@596 208 is_uploaded_file($_FILES["initrd"]['tmp_name'][$i])) {
pascal@596 209 move_uploaded_file($_FILES["initrd"]['tmp_name'][$i],
pascal@596 210 $tmp_dir."initrd.".$i);
pascal@596 211 $initrd_cmd .= " --initrd ".$tmp_dir."initrd.".$i;
pascal@596 212 $initrd_size = $_FILES["initrd"]['size'][$i];
pascal@265 213 $size += $initrd_size;
pascal@596 214 if ($i == 0)
pascal@265 215 $msg = "The total size of the files ".$_FILES["kernel"]['name'].
pascal@596 216 " and ".$_FILES["initrd"]['name'][$i];
pascal@596 217 else $msg .= ", ".$FILE["initrd"]['name'][$i];
pascal@265 218 }
pascal@596 219 if ($initrd_size) for ($i = 0; $i < count($_FILES["initrd2"]['name']); $i++)
pascal@596 220 if (isset($_FILES["initrd2"]['tmp_name'][$i]) &&
pascal@596 221 is_uploaded_file($_FILES["initrd2"]['tmp_name'][$i])) {
pascal@596 222 move_uploaded_file($_FILES["initrd2"]['tmp_name'][$i],
pascal@596 223 $tmp_dir."initrd2.".$i);
pascal@596 224 $initrd2_cmd .= " --initrd ".$tmp_dir."initrd2.".$i;
pascal@596 225 $initrd2_size = $_FILES["initrd2"]['size'][$i];
pascal@265 226 $size += $initrd2_size;
pascal@596 227 $msg .= ", ".$FILE["initrd2"]['name'][$i];
pascal@265 228 }
pascal@265 229 if ($size == 0) {
pascal@265 230 if (isset($tmp_dir))
pascal@265 231 system("rm -f $tmp_dir");
pascal@265 232 }
pascal@265 233 else {
pascal@265 234 $cmd = "./bootloader ".$tmp_dir."kernel --prefix "
pascal@265 235 . $tmp_dir."fd --format 0 --flags ".$_POST['flags']
pascal@366 236 . " --video ".$_POST['video']." --mem ".$_POST['ram'];
pascal@366 237 if ($_POST['edit'] == "")
pascal@366 238 $cmd .= " --dont-edit-cmdline";
pascal@265 239 if ($_POST['cmdline'])
pascal@265 240 $cmd .= " --cmdline '".$_POST['cmdline']."'";
pascal@366 241 if ($info_size)
pascal@366 242 $cmd .= " --info ".$tmp_dir."info";
pascal@265 243 if (file_exists($_POST['rdev']))
pascal@265 244 $cmd .= " --rdev ".$_POST['rdev'];
pascal@265 245 if ($initrd_size)
pascal@596 246 $cmd .= $initrd_cmd;
pascal@265 247 if ($initrd2_size)
pascal@596 248 $cmd .= $initrd2_cmd;
pascal@265 249 switch ($_POST['size']) {
pascal@265 250 case 1763328 :
pascal@265 251 case 2015232 :
pascal@265 252 case 3526656 :
pascal@265 253 case 4030464 :
pascal@265 254 $cmd .= " --tracks 82"; break;
pascal@265 255 case 1784832 :
pascal@265 256 $cmd .= " --tracks 83"; break;
pascal@265 257 }
pascal@265 258 shell_exec($cmd);
pascal@265 259 $count = 1;
pascal@265 260 if ($_POST['size'] != 0) {
pascal@265 261 $count += (filesize($tmp_dir."fd") -1) / $_POST['size'];
pascal@265 262 $padding = $_POST['size'] -
pascal@265 263 (filesize($tmp_dir."fd") % $_POST['size']);
pascal@265 264 }
pascal@265 265 }
pascal@265 266 $sizes = array(
pascal@265 267 "368640" => "360 KB", "737280" => "720 KB",
pascal@265 268 "1228800" => "1.20 MB",
pascal@265 269 "1474560" => "1.44 MB", "1638400" => "1.60 MB",
pascal@265 270 "1720320" => "1.68 MB", "1763328" => "1.72 MB",
pascal@265 271 "1784832" => "1.74 MB", "1802240" => "1.76 MB",
pascal@265 272 "1884160" => "1.84 MB", "1966080" => "1.92 MB",
pascal@265 273 "2015232" => "1.96 MB", "2949120" => "2.88 MB",
pascal@265 274 "3440640" => "3.36 MB", "3526656" => "3.44 MB",
pascal@265 275 "3932160" => "3.84 MB", "4030464" => "3.92 MB",
pascal@265 276 "0" => "no limit"
pascal@265 277 );
pascal@265 278
pascal@265 279 function show_size($size)
pascal@265 280 {
pascal@265 281 global $sizes;
pascal@265 282 if ($size != 0) return " ".$sizes[$size];
pascal@265 283 }
pascal@265 284 ?>
pascal@265 285
pascal@265 286 <!-- End navigation menu -->
pascal@265 287 </div>
pascal@265 288
pascal@265 289 <!-- Content top. -->
pascal@265 290 <div id="content_top">
pascal@265 291 <div class="top_left"></div>
pascal@265 292 <div class="top_right"></div>
pascal@265 293 </div>
pascal@265 294
pascal@265 295 <!-- Content -->
pascal@265 296 <div id="content">
pascal@265 297
pascal@265 298 <h2>Floppy image set builder</h2>
pascal@265 299
pascal@265 300 <?php
pascal@265 301 if (!isset($count)) {
pascal@265 302 $max = rtrim(ini_get('upload_max_filesize'),"M");
pascal@265 303 $max_post = rtrim(ini_get('post_max_size'),"M");
pascal@265 304 if ($max_post < $max) $max = $max_post;
pascal@594 305 $msg = "the web server can't upload more than $max MB";
pascal@265 306 ?>
pascal@265 307 <form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
pascal@265 308 <table>
pascal@265 309 <tr>
pascal@265 310 <td>Linux kernel:</td>
pascal@366 311 <td><input type="file" name="kernel" size="37" /> <i>required</i></td>
pascal@265 312 </tr>
pascal@265 313 <tr>
pascal@265 314 <td>Initramfs / Initrd:</td>
pascal@596 315 <td><input type="file" name="initrd[]" size="37" multiple /> <i>optional</i></td>
pascal@265 316 </tr>
pascal@265 317 <tr>
pascal@265 318 <td>Extra initramfs:</td>
pascal@596 319 <td><input type="file" name="initrd2[]" size="37" multiple /> <i>optional</i></td>
pascal@366 320 </tr>
pascal@366 321 <tr>
pascal@366 322 <td>Boot message:</td>
pascal@366 323 <td><input type="file" name="info" size="37" /> <i>optional</i></td>
pascal@265 324 </tr>
pascal@265 325 <tr>
pascal@265 326 <td>Default cmdline:</td>
pascal@594 327 <td id="cmdline"><input type="text" name="cmdline" size="36" <?php
pascal@265 328 if (isset($_GET['cmdline'])) echo 'value="'.$_GET['cmdline'].'"';
pascal@366 329 ?>/> <input type="checkbox" name="edit" checked="checked" />edit
pascal@366 330 <i>optional</i></td>
pascal@265 331 </tr>
pascal@265 332 <tr>
pascal@265 333 <td>Root device:</td>
pascal@265 334 <td><input type="text" name="rdev" size="8" value="<?php
pascal@265 335 if (isset($_GET['rdev'])) echo $_GET['rdev'];
pascal@596 336 else echo "/dev/ram0";
pascal@265 337 ?>" />
pascal@265 338 &nbsp;&nbsp;Flags: <select name="flags">
pascal@265 339 <option value="1">R/O</option>
pascal@265 340 <option value="0" <?php
pascal@265 341 if (isset($_GET['rdev']) && $_GET['rdev'] == "0")
pascal@265 342 echo ' selected="selected"'
pascal@265 343 ?>>R/W</option>
pascal@265 344 </select>
pascal@265 345 &nbsp;&nbsp;VESA: <select name="video">
pascal@265 346 <?php
pascal@265 347 $selected=-1;
pascal@265 348 if (isset($_GET['video'])) $selected = $_GET['video'];
pascal@265 349 $options = array();
pascal@265 350 $options[-3] = "Ask";
pascal@265 351 $options[-2] = "Extended";
pascal@265 352 $options[-1] = "Standard";
pascal@265 353 for ($i = 0; $i < 16; $i++) $options[$i] = $i;
pascal@265 354 $options[0xF00] = "80x25";
pascal@265 355 $options[0xF01] = "80x50";
pascal@265 356 $options[0xF02] = "80x43";
pascal@265 357 $options[0xF03] = "80x28";
pascal@265 358 $options[0xF05] = "80x30";
pascal@265 359 $options[0xF06] = "80x34";
pascal@265 360 $options[0xF07] = "80x60";
pascal@265 361 $options[0x30A] = "132x43";
pascal@265 362 $options[0x309] = "132x25";
pascal@366 363 $options[0x338] = "320x200x8"; // 382?
pascal@265 364 $options[0x30D] = "320x200x15";
pascal@265 365 $options[0x30E] = "320x200x16";
pascal@366 366 $options[0x30F] = "320x200x24";
pascal@366 367 $options[0x320] = "320x200x32";
pascal@366 368 $options[0x332] = "320x240x8"; // 392?
pascal@366 369 $options[0x393] = "320x240x15";
pascal@366 370 $options[0x335] = "320x240x16";// 394?
pascal@366 371 $options[0x395] = "320x240x24";
pascal@366 372 $options[0x396] = "320x240x32";
pascal@366 373 $options[0x333] = "400x300x8";// 3A2?
pascal@366 374 $options[0x3A3] = "400x300x15";
pascal@366 375 $options[0x336] = "400x300x16";// 3A4?
pascal@366 376 $options[0x3A5] = "400x300x24";
pascal@366 377 $options[0x3A6] = "400x300x32";
pascal@366 378 $options[0x334] = "512x384x8";// 3B2?
pascal@366 379 $options[0x3B3] = "512x384x15";
pascal@366 380 $options[0x337] = "512x384x16";// 3B4?
pascal@366 381 $options[0x3B5] = "512x384x24";
pascal@366 382 $options[0x3B6] = "512x384x32";
pascal@366 383 $options[0x3C2] = "640x350x8";
pascal@366 384 $options[0x3C3] = "640x350x15";
pascal@366 385 $options[0x3C4] = "640x350x16";
pascal@366 386 $options[0x3C5] = "640x350x24";
pascal@366 387 $options[0x3C6] = "640x350x32";
pascal@265 388 $options[0x300] = "640x400x8";
pascal@366 389 $options[0x383] = "640x400x15";
pascal@366 390 $options[0x339] = "640x400x16";// 384?
pascal@366 391 $options[0x385] = "640x400x24";
pascal@366 392 $options[0x386] = "640x400x32";
pascal@265 393 $options[0x301] = "640x480x8";
pascal@265 394 $options[0x310] = "640x480x15";
pascal@265 395 $options[0x311] = "640x480x16";
pascal@265 396 $options[0x312] = "640x480x24";
pascal@366 397 $options[0x33A] = "640x480x32";// 321?
pascal@366 398 $options[879] = "800x500x8";
pascal@366 399 $options[880] = "800x500x15";
pascal@366 400 $options[881] = "800x500x16";
pascal@366 401 $options[882] = "800x500x24";
pascal@366 402 $options[883] = "800x500x32";
pascal@265 403 //$options[770] = "800x600x4";
pascal@265 404 $options[0x303] = "800x600x8";
pascal@265 405 $options[0x313] = "800x600x15";
pascal@265 406 $options[0x314] = "800x600x16";
pascal@265 407 $options[0x315] = "800x600x24";
pascal@366 408 $options[0x33B] = "800x600x32";//322?
pascal@366 409 $options[815] = "896x672x8";
pascal@366 410 $options[816] = "896x672x15";
pascal@366 411 $options[817] = "896x672x16";
pascal@366 412 $options[818] = "896x672x24";
pascal@366 413 $options[819] = "896x672x32";
pascal@366 414 $options[874] = "1024x640x8";
pascal@366 415 $options[875] = "1024x640x15";
pascal@366 416 $options[876] = "1024x640x16";
pascal@366 417 $options[877] = "1024x640x24";
pascal@366 418 $options[878] = "1024x640x32";
pascal@265 419 //$options[772] = "1024x768x4";
pascal@265 420 $options[0x305] = "1024x768x8";
pascal@265 421 $options[0x316] = "1024x768x15";
pascal@265 422 $options[0x317] = "1024x768x16";
pascal@265 423 $options[0x318] = "1024x768x24";
pascal@366 424 $options[0x33C] = "1024x768x32";//323?
pascal@366 425 $options[869] = "1152x720x8";
pascal@366 426 $options[870] = "1152x720x15";
pascal@366 427 $options[871] = "1152x720x16";
pascal@366 428 $options[872] = "1152x720x24";
pascal@366 429 $options[873] = "1152x720x32";
pascal@265 430 $options[0x307] = "1280x1024x8";
pascal@265 431 $options[0x319] = "1280x1024x15";
pascal@265 432 $options[0x31A] = "1280x1024x16";
pascal@265 433 $options[0x31B] = "1280x1024x24";
pascal@265 434 $options[0x33D] = "1280x1024x32";
pascal@366 435 $options[835] = "1400x1050x8";
pascal@366 436 $options[837] = "1400x1050x16";
pascal@366 437 $options[838] = "1400x1040x24";
pascal@366 438 $options[864] = "1440x900x8";
pascal@366 439 $options[864] = "1440x900x15";
pascal@366 440 $options[866] = "1440x900x16";
pascal@366 441 $options[867] = "1440x900x24";
pascal@366 442 $options[868] = "1440x900x32";
pascal@265 443 $options[0x330] = "1600x1200x8";
pascal@265 444 $options[0x331] = "1600x1200x16";
pascal@366 445 $options[893] = "1920x1200x8";
pascal@265 446 foreach ($options as $key => $value) {
pascal@265 447 echo '<option value="'.$key.'"';
pascal@265 448 if ($key == $selected || $value == $selected)
pascal@265 449 echo ' selected="selected"';
pascal@265 450 echo '>'.$value."</option>\n";
pascal@265 451 }
pascal@265 452 ?>
pascal@265 453 </select>
pascal@265 454 </td>
pascal@265 455 </tr>
pascal@265 456 <tr>
pascal@265 457 <td>Floppy size:</td>
pascal@265 458 <td><select name="size">
pascal@265 459 <?php
pascal@265 460 foreach ($sizes as $key => $value) {
pascal@366 461 switch ($key) {
pascal@366 462 case "368640" :
pascal@366 463 echo " <optgroup label=\"5&frac14; SD\">\n";
pascal@366 464 break;
pascal@366 465 case "737280" :
pascal@366 466 echo " </optgroup>\n";
pascal@366 467 echo " <optgroup label=\"3&frac12; SD\">\n";
pascal@366 468 break;
pascal@366 469 case "1228800" :
pascal@366 470 echo " </optgroup>\n";
pascal@366 471 echo " <optgroup label=\"5&frac14; HD\">\n";
pascal@366 472 break;
pascal@366 473 case "1474560" :
pascal@366 474 echo " </optgroup>\n";
pascal@366 475 echo " <optgroup label=\"3&frac12; HD\">\n";
pascal@366 476 break;
pascal@366 477 case "2949120" :
pascal@366 478 echo " </optgroup>\n";
pascal@366 479 echo " <optgroup label=\"3&frac12; ED\">\n";
pascal@366 480 break;
pascal@366 481 case "0" :
pascal@366 482 echo " </optgroup>\n";
pascal@366 483 break;
pascal@366 484 }
pascal@265 485 echo " <option value=\"$key\"";
pascal@265 486 if ($key == "1474560") echo " selected='selected'";
pascal@265 487 echo ">$value</option>\n";
pascal@265 488 }
pascal@265 489 ?>
pascal@265 490 </select>&nbsp;
pascal@366 491 RAM used&nbsp;<select name="ram">
pascal@366 492 <?php
pascal@366 493 for ($i = 16; $i >= 4; $i--)
pascal@366 494 echo " <option value=\"$i\">$i MB</option>\n";
pascal@366 495 ?>
pascal@366 496 </select>&nbsp;
pascal@265 497 <input name="build" value="Build floppy set" type="submit" />
pascal@265 498 </td>
pascal@265 499 </tr>
pascal@265 500 </table>
pascal@265 501 </form>
pascal@265 502 <?php
pascal@265 503 echo <<<EOT
pascal@265 504 <p>
pascal@265 505 Note 1: $msg of files (kernel and initramfs) in memory.
pascal@265 506 </p>
pascal@265 507 <p>
pascal@265 508 Note 2: the extra initramfs may be useful to add your own configuration files.
pascal@265 509 </p>
pascal@366 510 <p>
pascal@366 511 Note 3: the keyboard is read for ESC or ENTER on every form feed (ASCII 12) in the boot message.
pascal@366 512 </p>
pascal@265 513 EOT;
pascal@265 514 }
pascal@265 515 else {
pascal@265 516 ?>
pascal@265 517 <h4>Download image<?php if ($count >= 2) echo "s"; ?></h4>
pascal@265 518 <ul>
pascal@265 519 <?php
pascal@265 520 for ($i = 1; $i <= $count; $i++) {
pascal@265 521 echo ' <li><a href="'.$_SERVER["PHP_SELF"].
pascal@265 522 "?id=".basename($tmp_dir)."&amp;n=$i&amp;s=".
pascal@265 523 $_POST["size"].'">'.sprintf("fd%03d.img",$i).
pascal@265 524 show_size($_POST["size"])."</a></li>\n";
pascal@265 525 }
pascal@265 526 echo "</ul>\n".floor($padding/1024)."KB padding.\n";
pascal@265 527 ?>
pascal@265 528
pascal@265 529 <p>
pascal@265 530 You can write floppies with SliTaz <i>bootfloppybox</i>,
pascal@265 531 <a href="http://en.wikipedia.org/wiki/RaWrite">Windows rawrite</a> or simply dd:
pascal@265 532 </p>
pascal@265 533 <pre># dd if=fd001.img of=/dev/fd0
pascal@265 534 </pre>
pascal@265 535
pascal@265 536 <p>
pascal@265 537 Start your computer with <i>fd001.img</i>. It will show the kernel version string and
pascal@265 538 the kernel cmdline line. You can edit the cmdline. Most users can just press Enter.
pascal@265 539 </p>
pascal@265 540
pascal@265 541 <?php
pascal@265 542 if ($count >= 2) {
pascal@265 543 ?>
pascal@265 544 <p>
pascal@265 545 The floppy is then loaded into memory (one dot each 64k) and you will be prompted to
pascal@265 546 insert the next floppy, <i>fd002.img</i>. And so on.
pascal@265 547 </p>
pascal@265 548
pascal@265 549 <p>
pascal@265 550 The floppy set detects disk swaps and can be used without a keyboard.
pascal@265 551 </p>
pascal@265 552 <?php
pascal@265 553 }
pascal@265 554 ?>
pascal@265 555 <p>
pascal@265 556 Good luck.
pascal@265 557 </p>
pascal@265 558 <?php
pascal@265 559 }
pascal@265 560 ?>
pascal@265 561
pascal@265 562 <div class="nav_box">
pascal@265 563 <h4>How does it work ?</h4>
pascal@265 564 <p>
pascal@265 565 This tool updates the boot sector of your kernel with
pascal@595 566 <a href="http://hg.slitaz.org/wok/raw-file/13835bce7189/syslinux/stuff/iso2exe/bootloader.S">this code</a>.
pascal@265 567 You may add a default cmdline and an initramfs. The cmdline can be edited at boot
pascal@366 568 time but the <acronym title="Check for disk swap every 5 seconds">keyboard is not mandatory</acronym>.
pascal@595 569 A <a href="bootloader"> standalone version</a> is available to break the web server upload limit.
pascal@265 570 </p>
pascal@265 571 <p>
pascal@366 572 Each part (boot, setup, boot message, cmdline, kernel, initramfs) is aligned to 512 bytes.
pascal@265 573 The result is split to fit the floppy size.
pascal@265 574 The last floppy image is padded with zeros.
pascal@265 575 </p>
pascal@265 576 <p>
pascal@265 577 You can extract the <u>kernel</u>, <u>cmdline</u> and <u>rootfs</u> files with
pascal@595 578 <a href="bootloader" title="./bootloader --extract floppy.*">this tool</a> from the floppy images.
pascal@265 579 </p>
pascal@265 580 </div>
pascal@265 581
pascal@265 582 <!-- End of content with round corner -->
pascal@265 583 </div>
pascal@265 584 <div id="content_bottom">
pascal@265 585 <div class="bottom_left"></div>
pascal@265 586 <div class="bottom_right"></div>
pascal@265 587 </div>
pascal@265 588
pascal@265 589 <!-- Start of footer and copy notice -->
pascal@265 590 <div id="copy">
pascal@265 591 <p>
pascal@265 592 Copyright &copy; <?php echo date('Y'); ?> <a href="http://www.slitaz.org/">SliTaz</a> -
pascal@265 593 <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>
pascal@265 594 </p>
pascal@265 595 <!-- End of copy -->
pascal@265 596 </div>
pascal@265 597
pascal@265 598 <!-- Bottom and logo's -->
pascal@265 599 <div id="bottom">
pascal@265 600 <p>
pascal@366 601 <a href="http://validator.w3.org/check?uri=referer"><img src="../static/xhtml10.png" alt="Valid XHTML 1.0" title="Code validé XHTML 1.0" style="width: 80px; height: 15px;" /></a>
pascal@265 602 </p>
pascal@348 603 <p>
pascal@594 604 <img src="#" id="qrcodeimg" alt="#" width="60" height="60"
pascal@594 605 onmouseover= "this.title = location.href"
pascal@594 606 onclick= "this.width = this.height = 300;" />
pascal@594 607 <script type="text/javascript" src="../static/qrcode.js"></script>
pascal@568 608 <script type="text/javascript">
pascal@594 609 document.getElementById('qrcodeimg').src =
pascal@594 610 QRCode.generatePNG(location.href, {ecclevel: 'H'});
pascal@568 611 </script>
pascal@348 612 </p>
pascal@265 613 </div>
pascal@265 614
pascal@265 615 </body>
pascal@265 616 </html>