wok annotate linld/stuff/src/LINLD.CPP @ rev 23999

syslinux/iso2exe: read isolinux.cfg
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Jan 12 07:47:12 2021 +0000 (2021-01-12)
parents a946c1651082
children bc4b94310a29
rev   line source
pascal@19515 1 // This file is distributed under GPL
pascal@19515 2 //
pascal@19515 3 // LINLD main() lives here
pascal@19515 4
pascal@19515 5 #include "crtl.h"
pascal@19515 6 #include "common.h"
pascal@23996 7 #include "iso9660.h"
pascal@19515 8
pascal@23996 9 extern char bzimagestr[];
pascal@23996 10 const char* cmdstr[4] = {"auto",bzimagestr,NULL,NULL};
pascal@23999 11 u32 cmdnum[5];
pascal@19515 12
pascal@19515 13 inline void syntax() {
pascal@19515 14 die("Syntax:" NL
pascal@23996 15 "LINLD [image=file] [initrd=files] [vga=mode] [root=num] [mem=max] [cl=cmdline] [iso=file]" NL
pascal@19515 16 "vga mode: ask,extended,normal or dec/oct/hex number" NL
pascal@21984 17 "-64 for cpu64 only" NL
pascal@19515 18 "Defaults:" NL
pascal@19515 19 "\timage=bzImage" NL
pascal@19515 20 "\tinitrd,vga,root=(void)" NL
pascal@19515 21 "\tmem=256m" NL
pascal@19515 22 "\tcl=auto" NL
pascal@19580 23 "\t-b 1088k" NL
pascal@19515 24 "Use quotes: \"cl=...\" if you need spaces in cmdline" NL
pascal@19538 25 "Use cl=@filename to get it from a file"
pascal@19515 26 #if 1
pascal@19515 27 NL NL "Examples:" NL
pascal@23992 28 "\tLINLD "
pascal@23992 29 "-b 64m "
pascal@21569 30 "initrd=rootfs4.gz,rootfs3.gz,rootfs2.gz,rootfs1.gz "
pascal@23890 31 "\"cl=root=/dev/null video=-32\""
pascal@20451 32 NL NL "\tLINLD image=memtest"
pascal@19515 33 #endif
pascal@19515 34 );
pascal@19515 35 }
pascal@19515 36
pascal@23996 37 extern char buf_cmdline[128];
pascal@19515 38 int main(int argc, char *argv[]) {
pascal@19571 39
pascal@19571 40 (void) argc;
pascal@19571 41
pascal@21569 42 ((u16*) &base_himem)[1] |= (_1m+_64k)>>16; // base_himem = _1m+_64k
pascal@19515 43 puts("LINLD v" VERSION_STR "+");
pascal@19515 44
pascal@19538 45 // Parse command line
pascal@23994 46 if (!*++argv) syntax();
pascal@23992 47 const char **clp = &cmdline;
pascal@23994 48 do {
pascal@21984 49 if ((*(u16 *)*argv|2) == 0x362F) { // -64 /64
pascal@23996 50 if (cpuhaslm() != 0) continue;
pascal@23996 51 exit();
pascal@21984 52 }
pascal@23996 53 if (argstr(*argv,"cl|image|initrd|iso",clp) == (int) clp) continue;
pascal@23999 54 if (argnum(*argv,"root|vga|mem|-b|-f*",&root_dev) >= (int) &base_himem) continue;
pascal@23992 55 if (fileexist(*argv) != -1) {
pascal@21984 56 kernel_name=*argv;
pascal@23992 57 continue;
pascal@23992 58 }
pascal@23992 59 *clp = (const char *) buf_cmdline + 1;
pascal@23992 60 strcatb((const char *) buf_cmdline,*argv);
pascal@23994 61 } while (*++argv);
pascal@23992 62 puts(*clp);
pascal@23996 63 if (isofile) setiso(isofile);
pascal@23992 64 set_cmdline(*clp);
pascal@23992 65 load_kernel();
pascal@23992 66 load_initrd();
pascal@23992 67 boot_kernel();
pascal@19515 68
pascal@19515 69 // Let compiler be happy
pascal@23996 70 return _AX;
pascal@19515 71 }