//This is run in a $LK,"#exe",A="FF:::/Kernel/Kernel.PRJ,KCfg"${}. U8 *kernel_cfg_options="MemInit\0HeapInit\0VarInit\0StaffMode\0" "HomeDir\0NoMP\0TextMode\0DontProbe\0AutoMountIDE\0BootRescueDrv\0Help\0"; #define CFG_MEM_INIT 0 #define CFG_HEAP_INIT 1 #define CFG_VAR_INIT 2 #define CFG_STAFF_MODE 3 #define CFG_HOME_DIR 4 #define CFG_NO_MP 5 #define CFG_TEXT_MODE 6 #define CFG_DONT_PROBE 7 #define CFG_AUTO_MOUNT_IDE 8 #define CFG_BOOT_RESCUE_DRV 9 #define CFG_NUM_OPTIONS 10 #define CFG_HELP 10 class CKernelCfg { U8 *dsk_cache_size_exp; CDoc *add_dev; U8 *boot_rescue_drv_file,*boot_rescue_drv_start; U8 *home_dir; Bool opts[CFG_NUM_OPTIONS]; U8 mem_init_val,heap_init_val,var_init_val, boot_drv_let,auto_mount_ide_hd_let,auto_mount_ide_cd_let; }; CDoc *KernelCfgAddDev(CKernelCfg *c) { I64 ch; CDoc *doc=DocNew; "\n\nIn anticipation of the drives you will\n" "define shortly, enter the drive letter\n" "of the drive with the account directory.\n" "\n($$PURPLE$$$$FG$$ for cur drv) Boot Drv:"; ch=Let2Let(GetChar); if ('A'<=ch<='Z') c->boot_drv_let=ch; else c->boot_drv_let=Drv2Let(Fs->cur_dv); "\n\n$$BK,1$$$$PURPLE$$Mount drives so they will be present when " "you boot.$$FG$$$$BK,0$$\n"; Mount2(c->boot_drv_let,doc,FALSE); return doc; } U0 KernelCfgOptions(CKernelCfg *c) { I64 i; U8 *st=NULL,*st2,*st3; Bool state; do { Free(st); for (i=0;ihome_dir; else "$$PURPLE$$%13tz$$FG$$:%Z\n",i,kernel_cfg_options,c->opts[i],"ST_OFF_ON"; "\nType '$$PURPLE$$Help$$FG$$' for help.\n"; st=GetStr("Option ($$PURPLE$$$$FG$$ when done):",""); i=LstMatch(st,kernel_cfg_options,LMF_IGNORE_CASE); if (i==CFG_HELP) "\n" "$$PURPLE$$MemInit$$FG$$ Initializes memory above 0x100000 " "to a val at boot.\n" "$$PURPLE$$HeapInit$$FG$$ Initializes MAlloc() memory to a val.\n" "$$PURPLE$$VarInit$$FG$$ Initializes glbl var memory to a val.\n" "$$PURPLE$$HomeDir$$FG$$ Set home dir.\n" "$$PURPLE$$NoMP$$FG$$ No multicore.\n" "$$PURPLE$$TextMode$$FG$$ Text Mode (requires hard reboot).\n" "$$PURPLE$$DontProbe$$FG$$ Just prompt CD/DVD ports, don't probe.\n" "$$PURPLE$$AutoMountIDE$$FG$$ AutoMount IDE drives to 'C' and 'T'.\n" "$$PURPLE$$BootRescueDrv$$FG$$ Include RAM Drv in Kernel.BIN.\n" "\n"; else if (0<=iopts[i]=!c->opts[i]; switch (i) { case CFG_MEM_INIT: if (state) c->mem_init_val=GetI64("Val (0-255):",255,0,255); break; case CFG_HEAP_INIT: if (state) c->heap_init_val=GetI64("Val (0-255):",255,0,255); break; case CFG_VAR_INIT: if (state) c->var_init_val=GetI64("Val (0-255):",255,0,255); break; case CFG_HOME_DIR: st2=GetStr("Home Dir(\"%s\"):",c->home_dir); if (!*st2) st2=StrNew("::/Home"); else if (st2[1]!=':') { st3=MStrPrint("::%s",st2); Free(st2); st2=st3; } Free(c->home_dir); c->home_dir=st2; if (StrCmp(c->home_dir,"::/Home")) c->opts[i]=TRUE; else c->opts[i]=FALSE; break; case CFG_AUTO_MOUNT_IDE: if (state) { "First HD Drive Let:"; c->auto_mount_ide_hd_let=Let2Let(GetChar); if (!('A'<=c->auto_mount_ide_hd_let<='Z')) c->auto_mount_ide_hd_let=0; '\n'; if (c->auto_mount_ide_hd_let) "First HD Drive:%C\n",c->auto_mount_ide_hd_let; else "First HD Drive:%C\n",'C'; "First CD Drive Let:"; c->auto_mount_ide_cd_let=Let2Let(GetChar); if (!('A'<=c->auto_mount_ide_cd_let<='Z')) c->auto_mount_ide_cd_let=0; '\n'; if (c->auto_mount_ide_cd_let) "First CD Drive:%C\n",c->auto_mount_ide_cd_let; else "First CD Drive:%C\n",'T'; } else { c->auto_mount_ide_hd_let=0; c->auto_mount_ide_cd_let=0; } break; case CFG_BOOT_RESCUE_DRV: Free(c->boot_rescue_drv_file); c->boot_rescue_drv_file=0; c->boot_rescue_drv_start=0; if (state) { c->boot_rescue_drv_file=GetStr("Boot Rescue Drv File:"); c->boot_rescue_drv_start=GetI64("Boot Rescue Drv Start:"); } break; } } } while (*st); Free(st); } CKernelCfg *KernelCfgNew() { CKernelCfg *c=CAlloc(sizeof(CKernelCfg)); c->add_dev=KernelCfgAddDev(c); c->home_dir=StrNew("::/Home"); c->dsk_cache_size_exp=GetStr( "Disk Cache Size in Bytes,\n" "gets rounded-up funny,\n" "($$PURPLE$$$$FG$$ will use default.):", "Scale2Mem(0x80000,0x8000000)"); KernelCfgOptions(c); return c; } U0 KernelCfgDel(CKernelCfg *c) { DocDel(c->add_dev); Free(c->boot_rescue_drv_file); Free(c->home_dir); Free(c->dsk_cache_size_exp); Free(c); }