hschumann2/TempleOS-Source-Code
0847
1 2U0 InstallDrv(U8 drv_let)3{4 U8 *st;5 ExePrint("CopyTree(\"::/\",\"%C:/\");",drv_let);6 ExePrint("DirMk(\"%C:/Tmp\");",drv_let);7 ExePrint("DirMk(\"%C:/Tmp/ScrnShots\");",drv_let);8 ExePrint("DirMk(\"%C:/Home\");",drv_let);9 10 st=MStrPrint("%C:/Home/DoDistro.HC.Z",drv_let);11 if (!FileFind(st))12 Copy("::/Misc/DoDistro.HC.Z",st);13 Free(st);14 15 st=MStrPrint("%C:/Home/MakeHome.HC.Z",drv_let);16 if (!FileFind(st))17 Copy("::/MakeHome.HC.Z",st);18 Free(st);19}20 21Bool VMPrtDsk(CTask *task,CATARep *ata_drv)22{23 if (ata_drv) {24 XTalkWait(task,"DskPrt(,0.5,0.5);\nC\np%d\nY",ata_drv->num);25 return TRUE;26 } else27 return FALSE;28}29 30U0 VMInstallDrv(CTask *task,U8 drv_let,31 CATARep *ata_drv,CATARep *atapi_drv)32{33 InstallDrv(drv_let);34 XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n",drv_let);35 if (ata_drv)36 XTalkWait(task,"C\np%d\n",ata_drv->num);37 if (atapi_drv)38 XTalkWait(task,"Tp%d\n",atapi_drv->num);39 XTalkWait(task,"\n\n\n"); //Exit Drives,Dsk Cache,Options40}41 42U0 VMInstallWiz()43{44 CATARep *head=NULL,*ata_drv=NULL,*atapi_drv=NULL;45 CTask *task;46 "\nIt's normal for this to freeze for a moment or two.\n";47 PressAKey;48 49 task=User;50 TaskWait(task);51 task->border_src=BDS_CONST;52 task->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15;53 task->text_attr =LTGRAY<<4+BLUE;54 task->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER;55 WinHorz(Fs->win_left,Fs->win_right,task);56 WinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task);57 WinVert(task->win_bottom+3,Fs->win_bottom);58 WinToTop(Fs);59 60 ATARep(FALSE,TRUE,&head);61 ATAIDDrvs(head,&ata_drv,&atapi_drv);62 if (VMPrtDsk(task,ata_drv)) {63 VMInstallDrv(task,'C',ata_drv,atapi_drv);64 VMInstallDrv(task,'D',ata_drv,atapi_drv);65 BootMHDIns('C');66 }67 LinkedLstDel(head);68 WinVert(task->win_top,Fs->win_bottom);69 Kill(task);70}71 72U0 RegularInstallWiz()73{74 I64 unit,drv_let;75 U8 *st,*base0,*base1;76 CATARep *head=NULL,*tmpha;77 I64 ch,num_hints;78 CTask *task;79 80 "\nIt's normal for this to freeze for a moment or two.\n";81 PressAKey;82 83 task=User;84 TaskWait(task);85 task->border_src=BDS_CONST;86 task->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15;87 task->text_attr =LTGRAY<<4+BLUE;88 task->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER;89 WinHorz(Fs->win_left,Fs->win_right,task);90 WinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task);91 WinVert(task->win_bottom+3,Fs->win_bottom);92 WinToTop(Fs);93 XTalk(task,"Mount;\nC\np");94 95 num_hints=ATARep(FALSE,,&head);96 "\nInclude '$PURPLE$0x$FG$' for hexidecimal numbers.\n\n";97 while (TRUE) {98 base0=GetStr("Hard Drive I/O Port Base0 : ");99 if (0<Str2I64(base0)<=0xFFFF)100 break;101 Free(base0);102 }103 if (1<=Str2I64(base0)<=num_hints) {104 tmpha=ATARepFind(&head,Str2I64(base0));105 Free(base0);106 base0=MStrPrint("0x%X",tmpha->base0);107 base1=MStrPrint("0x%X",tmpha->base1);108 st =MStrPrint("0x%X",tmpha->unit);109 unit=Str2I64(st);110 Free(st);111 } else {112 while (TRUE) {113 base1=GetStr("Hard Drive I/O Port Base1 : ");114 if (0<Str2I64(base1)<=0xFFFF)115 break;116 Free(base1);117 }118 do {119 st =GetStr("Unit--$PURPLE$0$FG$=Master or $PURPLE$1$FG$=Slave: ","0");120 unit=Str2I64(st);121 Free(st);122 } while (!(0<=unit<=1));123 }124 LinkedLstDel(head);125 XTalkWait(task,"%s\n%s\n%C\n",base0,base1,'0'+unit);126 DrvRep;127 do {128 st=GetStr("\nDestination Partition Letter: ");129 if (*st)130 drv_let=Let2Let(*st);131 else132 drv_let=0;133 Free(st);134 } while (!('A'<=drv_let<='Z'));135 '\n';136 137 "$RED$Format %C Partition?$FG$\n",drv_let;138 if (YorN) {139 '\n';140 do {141 "$PURPLE$1$FG$) Use FAT32\n"142 "$PURPLE$2$FG$) Use RedSea\n"143 "\nFile System Type: ";144 ch=GetChar;145 '\n';146 } while (!('1'<=ch<='2'));147 if (ch=='1')148 Fmt(drv_let,,FALSE,FSt_FAT32);149 else150 Fmt(drv_let,,FALSE,FSt_REDSEA);151 }152 InstallDrv(drv_let);153 XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n"154 "C\ns%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options155 drv_let,base0,base1,'0'+unit);156 "$RED$Install Master Boot loader?$FG$";157 if (YorN) {158 '\n';159 BootMHDIns(drv_let);160 }161 Free(base0);162 Free(base1);163 164 WinVert(task->win_top,Fs->win_bottom);165 Kill(task);166}167 168U0 DoInstructions()169{170 CTask *task;171 AutoComplete;172 task=Fs->next_task;173 while (task!=Fs) {174 if (task!=adam_task && task!=sys_winmgr_task && task!=ac.task) {175 XTalk(task,"Ed(\"::/Doc/Install.DD.Z\");\n");176 break;177 }178 task=task->next_task;179 }180}181 182Bool DoInstall(Bool pmt_reboot)183{184 I64 res=FALSE,vm_install;185 "\n\n\n\n\nAre you installing inside VMware, QEMU, VirtualBox "186 "or a similar virtual machine? ";187 vm_install=YorN;188 DocBottom;189 190 if (vm_install) {191 VMInstallWiz();192 res=TRUE;193 } else {194 "\n\nThis wizard works if you have a partition ready. "195 "You can partition the drive or BootHDIns() "196 "with more options if you do it by hand, not using this wizard.\n\n"197 "Continue Install Wizard ";198 if (YorN) {199 RegularInstallWiz();200 res=TRUE;201 } else202 pmt_reboot=FALSE;203 }204 if (pmt_reboot) {205 "Reboot Now ";206 if (YorN)207 Reboot;208 }209 return res;210}211 212Bool OSInstall(Bool pmt_reboot=TRUE)213{214 DoInstructions;215 return DoInstall(pmt_reboot);216}217 218#if __CMD_LINE__219OSInstall(TRUE);220#endif221 