hschumann2/TempleOS-Source-Code
0847
1 2#help_index "DolDoc/Output;StdOut/DolDoc"3public CTask *PopUpViewDoc(CDoc *doc,I64 dof_flags=0)4{//Pass doc to PopUp win task for viewing.5 U8 *buf=MStrPrint("DocEd(0x%X,0x%X);",doc,dof_flags);6 CTask *task=Spawn(&SrvCmdLine,NULL,"View",,Fs);7 TaskExe(task,NULL,buf,1<<JOBf_EXIT_ON_COMPLETE|1<<JOBf_FREE_ON_COMPLETE);8 Free(buf);9 return task;10}11 12public CTask *PopUpViewPrint(U8 *fmt,...)13{//View Print stmt in PopUp win task.14 CTask *task=Spawn(&SrvCmdLine,NULL,"View",,Fs);15 U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);16 CDoc *doc=DocNew(,task);17 DocPrint(doc,buf);18 Free(buf);19 buf=MStrPrint("DocEd(0x%X);",doc);20 TaskExe(task,NULL,buf,1<<JOBf_EXIT_ON_COMPLETE|1<<JOBf_FREE_ON_COMPLETE);21 Free(buf);22 return task;23}24 25#help_index "DolDoc/Input;File/FileNames;StdIn/DolDoc"26public U8 *PopUpPickFile(U8 *dir=NULL)27{//Filename chooser. Uses FileMgr().28 U8 *res,*st,*st2;29 if (dir)30 st=MStrPrint("Cd(\"%Q\");FileMgr(FM_PICK_FILE,Fs->parent_task);",dir);31 else {32 st2=DirCur;33 st=MStrPrint("Cd(\"%Q\");FileMgr(FM_PICK_FILE,Fs->parent_task);",st2);34 Free(st2);35 }36 res=PopUp(st,Fs);37 Free(st);38 return res;39}40 41public U8 *PopUpPickDir(U8 *dir=NULL)42{//File dir name chooser. Uses FileMgr().43 U8 *res,*st,*st2;44 if (dir)45 st=MStrPrint("Cd(\"%Q\");FileMgr(FM_PICK_DIR,Fs->parent_task);",dir);46 else {47 st2=DirCur;48 st=MStrPrint("Cd(\"%Q\");FileMgr(FM_PICK_DIR,Fs->parent_task);",st2);49 Free(st2);50 }51 res=PopUp(st,Fs);52 Free(st);53 return res;54}55 56public U8 *FileNameForm(U8 *dft=NULL,I64 dof_flags=0,CTask *mem_task=NULL)57{//Text filename form in cur win, not PopUp.58 CEdFileName fn;59 if (dft)60 StrCpy(fn.name,dft);61 else62 *fn.name=0;63 if (DocForm(&fn,,dof_flags))64 return StrNew(fn.name,mem_task);65 else66 return NULL;67}68 69public U8 *PopUpFileName(U8 *dft=NULL,I64 dof_flags=0)70{//Filename chooser. Uses form, not FileMgr().71 U8 *st=MStrPrint("FileNameForm(\"%Q\",0x%X,Fs->parent_task);",72 dft,dof_flags|DOF_SIZE_MIN),*res=PopUp(st,Fs);73 Free(st);74 return res;75}76 77#help_index "DolDoc"78Bool PopUpCd()79{80 Bool res;81 U8 *st=PopUpPickDir;82 if (st) {83 res=Cd(st);84 Free(st);85 } else86 res=FALSE;87 return res;88}89 90#help_index "DolDoc/Input;Char/Lists;StdIn/DolDoc"91public I64 PopUpPickLst(U8 *lst)92{//Prompt for lst entry in PopUp win task.93 I64 res,i=0;94 CDoc *doc=DocNew;95 DocPrint(doc,"$LTBLUE$");96 while (*lst) {97 if (*lst=='@') {//Check for '@' alias lst entry98 i--;99 lst++;100 }101 DocPrint(doc,"$MU,\"%s\",LE=%d$\n",lst,i++);102 lst+=StrLen(lst)+1;103 }104 DocPrint(doc,"\n$MU,\"CANCEL\",LE=DOCM_CANCEL$\n");105 res=PopUpMenu(doc);106 DocDel(doc);107 return res;108}109 110#help_index "DolDoc/Input;Char/Lists;Char/Define;StdIn/DolDoc"111public U8 *PopUpPickDefineSub(U8 *dname)112{//Prompt for Define lst entry in PopUp win task.113 return PopUpPickLst(Define(dname));114}115 116#help_index "DolDoc/Input;StdIn/DolDoc"117public I64 PopUp1(U8 *b1,I64 n1,U8 *header=NULL,U8 *footer=NULL)118{//Make PopUp win task with one bttn.119 I64 i,l1=StrLen(b1);120 CDoc *doc=DocNew;121 if (header) DocPrint(doc,"%s",header);122 DocPrint(doc,"$CM+CX,%d,4$$BT,\"%s\",LE=%d$\n",-l1/2,b1,n1);123 if (footer) DocPrint(doc,"%s",footer);124 i=PopUpMenu(doc);125 DocDel(doc);126 return i;127}128 129public I64 PopUp2(U8 *b1,I64 n1,U8 *b2,I64 n2,U8 *header=NULL,U8 *footer=NULL)130{//Make PopUp win task with two bttns.131 I64 i,l1=StrLen(b1),l2=StrLen(b2),y;132 CDoc *doc=DocNew;133 if (header) {134 DocPrint(doc,"%s",header);135 y=4;136 } else {137 DocPrint(doc,"%*s\n",l1+l2+10,"");138 y=3;139 }140 DocPrint(doc,"$CM+CX,%d,%d$$BT,\"%s\",LE=%d$",-(l1+l2+3)>>1,y,b1,n1);141 DocPrint(doc,"$CM+CX,%d,0$$BT,\"%s\",LE=%d$\n" ,-(l1+l2+3)>>1+l1+6,b2,n2);142 if (footer) DocPrint(doc,"%s",footer);143 i=PopUpMenu(doc);144 DocDel(doc);145 return i;146}147 148public Bool PopUpOk(U8 *header=NULL,U8 *footer=NULL)149{//Make PopUp win task with OKAY bttn.150 return PopUp1("OKAY",1,header,footer)>0;151}152 153public Bool PopUpNoYes(U8 *header=NULL,U8 *footer=NULL)154{//Make PopUp win task with NO/YES bttns.155 return PopUp2("YES",1,"NO",0,header,footer)>0;156}157 158public Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL)159{//Make PopUp win task CANCEL/OKAY bttns.160 return PopUp2("OKAY",1,"CANCEL",0,header,footer)>0;161}162 163U8 *PopUpGetStr2(U8 *header,CTask *mem_task)164{165 U8 *res,*st;166 if (header)167 "%s",header;168 st=GetStr(,,GSF_WITH_NEW_LINE);169 res=StrNew(st,mem_task);170 Free(st);171 return res;172}173 174public U8 *PopUpGetStr(U8 *header=NULL)175{//Prompt for text str in PopUp win task.176 U8 *st=MStrPrint("PopUpGetStr2(0x%X,0x%X);",header,Fs),177 *res=PopUp(st,Fs);178 Free(st);179 return res;180}181 182public I64 PopUpGetI64(U8 *msg,I64 dft,I64 lo=I64_MIN,I64 hi=I64_MAX)183{//Prompt for I64 text expression in PopUp win task.184 U8 *st=MStrPrint("GetI64(0x%X,0x%X,0x%X,0x%X);",msg,dft,lo,hi);185 I64 res=PopUp(st,Fs);186 Free(st);187 return res;188}189 190public F64 PopUpGetF64(U8 *msg,F64 dft,F64 lo=F64_MIN,F64 hi=F64_MAX)191{//Prompt for F64 text expression in PopUp win task.192 U8 *st=MStrPrint("GetF64(0x%X,0x%X(F64),0x%X(F64),0x%X(F64));",msg,dft,lo,hi);193 F64 res=PopUp(st,Fs)(F64);194 Free(st);195 return res;196}197 198public I64 PopUpRangeI64(I64 lo,I64 hi,I64 step=1,199 U8 *header=NULL,U8 *footer=NULL)200{//Evenly-spaced I64 range chooser in PopUp win task.201 I64 i;202 CDoc *doc=DocNew;203 if (header)204 DocPrint(doc,"%s",header);205 DocPrint(doc,"$LTBLUE$");206 for (i=lo;i<=hi;i+=step)207 DocPrint(doc,"$MU,\"%d\",LE=%d$\n",i,i);208 if (footer)209 DocPrint(doc,"%s",footer);210 i=PopUpMenu(doc);211 DocDel(doc);212 return i;213}214 215public F64 PopUpRangeF64(F64 lo,F64 hi,F64 step,216 U8 *fmt="%9.4f",U8 *header=NULL,U8 *footer=NULL)217{//Evenly-spaced F64 range chooser in PopUp win task.218 F64 d;219 I64 i;220 U8 buf[STR_LEN];221 CDoc *doc=DocNew;222 if (header)223 DocPrint(doc,"%s",header);224 DocPrint(doc,"$LTBLUE$");225 for (d=lo;d<=hi;d+=step) {226 StrPrint(buf,fmt,d);227 DocPrint(doc,"$MU,\"%s\",LE=0x%X$\n",buf,d);228 }229 if (footer)230 DocPrint(doc,"%s",footer);231 i=PopUpMenu(doc);232 DocDel(doc);233 return i(F64);234}235 236public F64 PopUpRangeF64Exp(F64 lo,F64 hi,F64 factor,237 U8 *fmt="%9.4f",U8 *header=NULL,U8 *footer=NULL)238{//Exp-spaced F64 range chooser in PopUp win task.239 F64 d;240 I64 i;241 U8 buf[STR_LEN];242 CDoc *doc=DocNew;243 if (header)244 DocPrint(doc,"%s",header);245 DocPrint(doc,"$LTBLUE$");246 for (d=lo;d<=hi;d*=factor) {247 StrPrint(buf,fmt,d);248 DocPrint(doc,"$MU,\"%s\",LE=0x%X$\n",buf,d);249 }250 if (footer)251 DocPrint(doc,"%s",footer);252 i=PopUpMenu(doc);253 DocDel(doc);254 return i(F64);255}256 257public F64 PopUpRangeF64Log(F64 lo,F64 hi,I64 steps,258 U8 *fmt="%9.4f",U8 *header=NULL,U8 *footer=NULL)259{//Log-spaced F64 range chooser in PopUp win task.260 return PopUpRangeF64Exp(lo,hi,Exp(Ln(hi/lo)/(steps-1)),fmt,header,footer);261}262 263#help_index "Job/Exe;Task/Job/Exe;Compiler"264public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE)265{//Make adam_task execute file.266 Bool okay=TRUE;267 U8 *name=FileNameAbs(filename),268 *name2=ExtDft(name,"HC.Z");269 I64 res=0;270 if (warn_ext &&271 !FilesFindMatch(name2,FILEMASK_JIT) &&272 !PopUpCancelOk(ST_WARN_ST "Not .HC File\n\n"))273 okay=FALSE;274 if (okay)275 res=Adam("#include \"%s\";",name2);276 Free(name2);277 Free(name);278 return res;279}280 281public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE,282 CTask *parent=NULL,CTask **_pu_task=NULL)283{//ExeFile2() in PopUp task. Cont as User.284 Bool okay=TRUE;285 U8 *st,*name=FileNameAbs(filename),286 *name2=ExtDft(name,"HC.Z");287 I64 res=0;288 if (warn_ext &&289 !FilesFindMatch(name2,FILEMASK_JIT) &&290 !PopUpCancelOk(ST_WARN_ST "Not .HC File\n\n"))291 okay=FALSE;292 if (okay) {293 st=MStrPrint(294 "\"$$WW+H,1$$\";In(\"ExeFile2(\\\"%s\\\",CCF_CMD_LINE);\\n\");"295 "UserTaskCont;",296 name2);297 res=PopUp(st,parent,_pu_task);298 Free(st);299 }300 Free(name2);301 Free(name);302 return res;303}304 305public I64 PopUpRunFile(U8 *filename,I64 ccf_flags=0,...)306{//ExeFile() with args using LastFun() in PopUp task.307 U8 *st,*name=FileNameAbs(filename),308 *name2=ExtDft(name,"HC.Z");309 I64 res=0;310 st=MStrPrint(311 "\"$$WW+H,1$$\";ExeFile2(\"%s\",0x%X);LastFun(0x%X,0x%X);",312 name2,ccf_flags,argc,argv);313 res=PopUp(st,Fs);314 Free(st);315 Free(name2);316 Free(name);317 return res;318}319 