slitaz-dev-tools annotate mirror-tools/slitaz/mirror/floppies/builder/index.php @ rev 305

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