From 0293e0d373230da547fa051bd7fa4d7ac08b34f6 Mon Sep 17 00:00:00 2001 From: TomAwezome Date: Sat, 23 May 2020 01:33:35 -0400 Subject: [PATCH] spacing to more files --- ...o => Zenith-latest-2020-05-23-01_28_40.iso | Bin 34306048 -> 34308096 bytes src/Home/FilesRefactored.DD | 10 +- src/Zenith/ZDebug.CC | 395 +++++---- src/Zenith/ZDefine.CC | 41 +- src/Zenith/ZExterns.CC | 170 ++-- src/Zenith/ZHash.CC | 544 ++++++------ src/Zenith/ZMath.CC | 127 +-- src/Zenith/ZMathODE.CC | 817 ++++++++++-------- src/Zenith/ZMouse.CC | Bin 1598 -> 1631 bytes 9 files changed, 1124 insertions(+), 980 deletions(-) rename Zenith-latest-2020-05-21-01_52_49.iso => Zenith-latest-2020-05-23-01_28_40.iso (99%) mode change 100644 => 100755 diff --git a/Zenith-latest-2020-05-21-01_52_49.iso b/Zenith-latest-2020-05-23-01_28_40.iso old mode 100644 new mode 100755 similarity index 99% rename from Zenith-latest-2020-05-21-01_52_49.iso rename to Zenith-latest-2020-05-23-01_28_40.iso index 49f569cb89c55123ed62513fc953d2ec4d21cf61..5c80335baffe820c02f0b02bc84bd142b4cd703b GIT binary patch delta 72438 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 Nl6-gOBl#m){|*P+eR}`^ diff --git a/src/Home/FilesRefactored.DD b/src/Home/FilesRefactored.DD index d5136107..5c62d564 100755 --- a/src/Home/FilesRefactored.DD +++ b/src/Home/FilesRefactored.DD @@ -1,4 +1,5 @@ $FG,7$Files reformatted starting from ::/ 'root' directory.$FG,0$ + HomeKeyPlugins.CC HomeLocalize.CC HomeSys.CC @@ -6,7 +7,6 @@ HomeWrappers.CC Once.CC StartOS.CC - /Zenith/ DevInfo.CC InFile.CC @@ -17,6 +17,14 @@ StartOS.CC WallPaper.CC Win.CC WinMgr.CC + ZDebug.CC + ZDefine.CC + ZExterns.CC ... ? + ZHash.CC + ZMath.CC + ZMathODE.CC + ZMouse.CC + ZBlkDev/ Mount.CC diff --git a/src/Zenith/ZDebug.CC b/src/Zenith/ZDebug.CC index 6f614d2c..53225061 100755 --- a/src/Zenith/ZDebug.CC +++ b/src/Zenith/ZDebug.CC @@ -1,156 +1,200 @@ #help_index "Debugging/Dump" -Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,Bool u8_chars,Bool force,I64 depth,I64 max_depth,Bool dynamic,I64 types=HTT_CLASS,I64 offset=0) +Bool ClassRep2(CDoc *doc, U8 *_d, U8 *class_name=lastclass, Bool u8_chars, Bool force, I64 depth, I64 max_depth, Bool dynamic, I64 types=HTT_CLASS, I64 offset=0) {//See $LK,"::/Demo/LastClass.CC"$. - I64 i,j,stars,*ptr; + I64 i, j, stars, *ptr; CMemberList *ml; CDocEntry *doc_e; Bool unlock; - CHashClass *tmpc,*tmpc2; - if (depth>=max_depth) return TRUE; - if (!(tmpc=HashFind(class_name,Fs->hash_table,types))) { - DocPrint(doc,"Class Not Found.\n"); + CHashClass *tmpc, *tmpc2; + if (depth >= max_depth) + return TRUE; + if (!(tmpc = HashFind(class_name, Fs->hash_table, types))) + { + DocPrint(doc, "Class Not Found.\n"); return FALSE; } - if (!force && (!CheckPtr(_d) || !CheckPtr(_d(U8 *)+tmpc->size))) { - DocPrint(doc,"Bad Ptr:%016X\n",_d); + if (!force && (!CheckPtr(_d) || !CheckPtr(_d(U8 *) + tmpc->size))) + { + DocPrint(doc, "Bad Ptr:%016X\n", _d); return FALSE; } - if (tmpc->base_class && !ClassRep2(doc,_d,tmpc->base_class->str, - depth,max_depth,dynamic,types,offset)) + if (tmpc->base_class && !ClassRep2(doc, _d, tmpc->base_class->str, depth, max_depth, dynamic, types, offset)) return FALSE; - unlock=DocLock(doc); - DocPrint(doc,"Class:\"%s\"\n",class_name); - ml=tmpc->member_list_and_root; - while (ml) { - tmpc2=ml->member_class; - ptr=_d(U8 *)+ml->offset; - DocPrint(doc,"%08X ",ptr(U8 *)+offset); - stars=tmpc2->ptr_stars_count; - tmpc2=OptClassFwd(tmpc2); - tmpc2-=tmpc2->ptr_stars_count; - if (tmpc2->type & HTT_INTERNAL_TYPE) { - DocPrint(doc,"$$GREEN$$%-20ts:$$FG$$",ml->str); - if (stars==1 && (tmpc2->raw_type==RT_I8 || tmpc2->raw_type==RT_U8)) { - ptr=*ptr; - if (CheckPtr(ptr)) { - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$$\n"); - doc_e->data=ptr; - DocDataFormat(doc,doc_e); - } else - DocPrint(doc,"%40ts\n",ptr); + unlock = DocLock(doc); + DocPrint(doc, "Class:\"%s\"\n", class_name); + ml = tmpc->member_list_and_root; + while (ml) + { + tmpc2 = ml->member_class; + ptr = _d(U8 *) + ml->offset; + DocPrint(doc, "%08X ", ptr(U8 *) + offset); + stars = tmpc2->ptr_stars_count; + tmpc2 = OptClassFwd(tmpc2); + tmpc2 -= tmpc2->ptr_stars_count; + if (tmpc2->type & HTT_INTERNAL_TYPE) + { + DocPrint(doc, "$$GREEN$$%-20ts:$$FG$$", ml->str); + if (stars == 1 && (tmpc2->raw_type == RT_I8 || tmpc2->raw_type == RT_U8)) + { + ptr = *ptr; + if (CheckPtr(ptr)) + { + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$$\n"); + doc_e->data = ptr; + DocDataFormat(doc, doc_e); + } + else + DocPrint(doc, "%40ts\n", ptr); } - } else if (!stars) { - j=MinI64(ml->dim.total_count,32); - if ((tmpc2->raw_type==RT_I8 || tmpc2->raw_type==RT_U8) && u8_chars) { - if (j==1) { - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U8,A=\"%%c\"$$\n"); - doc_e->data=ptr; - } else - DocPrint(doc,"%c\n",*ptr(U8 *)); - } else { - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$$\n"); - doc_e->data=ptr; - DocDataFormat(doc,doc_e); - } else - DocPrint(doc,"%40ts\n",ptr); + } + else if (!stars) + { + j = MinI64(ml->dim.total_count, 32); + if ((tmpc2->raw_type == RT_I8 || tmpc2->raw_type == RT_U8) && u8_chars) + { + if (j == 1) + { + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=U8,A=\"%%c\"$$\n"); + doc_e->data = ptr; + } + else + DocPrint(doc, "%c\n", *ptr(U8 *)); + } + else + { + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$$\n"); + doc_e->data = ptr; + DocDataFormat(doc, doc_e); + } + else + DocPrint(doc, "%40ts\n", ptr); } } - for (i=0;iraw_type) { + for (i = 0; i < j; i++) + { + switch (tmpc2->raw_type) + { case RT_I0: case RT_U0: break; case RT_I8: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I8,A=\"%%02X\"$$ "); - doc_e->data=ptr(I8 *)++; - } else - DocPrint(doc,"%02X ",*ptr(I8 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=I8,A=\"%%02X\"$$ "); + doc_e->data = ptr(I8 *)++; + } + else + DocPrint(doc, "%02X ", *ptr(I8 *)++); break; case RT_U8: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U8,A=\"%%02X\"$$ "); - doc_e->data=ptr(U8 *)++; - } else - DocPrint(doc,"%02X ",*ptr(U8 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=U8,A=\"%%02X\"$$ "); + doc_e->data = ptr(U8 *)++; + } + else + DocPrint(doc, "%02X ", *ptr(U8 *)++); break; case RT_I16: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I16,A=\"%%04X\"$$ "); - doc_e->data=ptr(I16 *)++; - } else - DocPrint(doc,"%04X ",*ptr(I16 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=I16,A=\"%%04X\"$$ "); + doc_e->data = ptr(I16 *)++; + } + else + DocPrint(doc, "%04X ", *ptr(I16 *)++); break; case RT_U16: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U16,A=\"%%04X\"$$ "); - doc_e->data=ptr(U16 *)++; - } else - DocPrint(doc,"%04X ",*ptr(U16 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=U16,A=\"%%04X\"$$ "); + doc_e->data = ptr(U16 *)++; + } + else + DocPrint(doc, "%04X ", *ptr(U16 *)++); break; case RT_I32: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I32,A=\"%%08X\"$$ "); - doc_e->data=ptr(I32 *)++; - } else - DocPrint(doc,"%08X ",*ptr(I32 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=I32,A=\"%%08X\"$$ "); + doc_e->data = ptr(I32 *)++; + } + else + DocPrint(doc, "%08X ", *ptr(I32 *)++); break; case RT_U32: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U32,A=\"%%08X\"$$ "); - doc_e->data=ptr(U32 *)++; - } else - DocPrint(doc,"%08X ",*ptr(U32 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=U32,A=\"%%08X\"$$ "); + doc_e->data = ptr(U32 *)++; + } + else + DocPrint(doc, "%08X ", *ptr(U32 *)++); break; case RT_U64: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U64,A=\"%%08X\"$$ "); - doc_e->data=ptr(U64 *)++; - } else - DocPrint(doc,"%08X ",*ptr(U64 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=U64,A=\"%%08X\"$$ "); + doc_e->data = ptr(U64 *)++; + } + else + DocPrint(doc, "%08X ", *ptr(U64 *)++); break; case RT_F64: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=F64,A=\"%%16g\"$$ "); - doc_e->data=ptr(F64 *)++; - } else - DocPrint(doc,"%16g ",*ptr(I64 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,RT=F64,A=\"%%16g\"$$ "); + doc_e->data = ptr(F64 *)++; + } + else + DocPrint(doc, "%16g ", *ptr(I64 *)++); break; default: - if (dynamic) { - doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,A=\"%%016X\"$$ "); - doc_e->data=ptr(I64 *)++; - } else - DocPrint(doc,"%016X ",*ptr(I64 *)++); + if (dynamic) + { + doc_e = DocPrint(doc, "$$DA-TRM+RD+UD,A=\"%%016X\"$$ "); + doc_e->data = ptr(I64 *)++; + } + else + DocPrint(doc, "%016X ", *ptr(I64 *)++); } if (dynamic) - DocDataFormat(doc,doc_e); + DocDataFormat(doc, doc_e); } - if (jdim.total_count) - DocPrint(doc,"..."); - } else - DocPrint(doc,"%016X",*ptr); + if (j < ml->dim.total_count) + DocPrint(doc, "..."); + } + else + DocPrint(doc, "%016X", *ptr); DocPrint(doc,"\n"); - } else { - if (depth<2) { - if (stars==1 && !CheckPtr(*ptr)) - DocPrint(doc,"%-20ts:%016X\n",ml->str,*ptr); - else { - DocPrint(doc,"$$TR,\"%s\"$$\n",ml->str); - DocPrint(doc,"$$ID,2$$"); - if (!stars) - ClassRep2(doc,ptr,tmpc2->str,u8_chars,force,depth+1,max_depth,dynamic); - else if (stars==1) - ClassRep2(doc,*ptr,tmpc2->str,u8_chars,force,depth+1,max_depth,dynamic); - DocPrint(doc,"$$ID,-2$$"); - } - } else - DocPrint(doc,"%-20ts\n",ml->str); } - ml=ml->next; + else + { + if (depth < 2) + { + if (stars == 1 && !CheckPtr(*ptr)) + DocPrint(doc, "%-20ts:%016X\n", ml->str, *ptr); + else + { + DocPrint(doc, "$$TR,\"%s\"$$\n", ml->str); + DocPrint(doc, "$$ID,2$$"); + if (!stars) + ClassRep2(doc, ptr, tmpc2->str, u8_chars, force, depth + 1, max_depth, dynamic); + else if (stars == 1) + ClassRep2(doc, *ptr, tmpc2->str, u8_chars, force, depth + 1, max_depth, dynamic); + DocPrint(doc, "$$ID,-2$$"); + } + } + else + DocPrint(doc, "%-20ts\n", ml->str); + } + ml = ml->next; } if (unlock) DocUnlock(doc); @@ -163,95 +207,104 @@ public U0 ClassRep(U8 *_d, U8 *class_name=lastclass, I64 max_depth=2, Bool u8_ch I64 type; if (IsRaw) - doc=DocNew; + doc = DocNew; else { DocMax; - doc=DocPut; + doc = DocPut; } if(fun) - type=HTT_FUN; + type = HTT_FUN; else - type=HTT_CLASS; + type = HTT_CLASS; - ClassRep2(doc,_d,class_name,u8_chars,force,0,max_depth,FALSE,type,offset); + ClassRep2(doc, _d, class_name, u8_chars, force, 0, max_depth, FALSE, type, offset); - DocPrint(doc,"\n"); + DocPrint(doc, "\n"); DocRecalc(doc); if (IsRaw) { - DocDump(doc,100000); + DocDump(doc, 100000); DocDel(doc); } } -public U0 ClassRepD(U8 *_d,U8 *class_name=lastclass, - I64 max_depth=2,Bool u8_chars=FALSE,Bool force=FALSE,Bool fun=FALSE,I64 offset=0) +public U0 ClassRepD(U8 *_d, U8 *class_name=lastclass, I64 max_depth=2, Bool u8_chars=FALSE, Bool force=FALSE, Bool fun=FALSE, I64 offset=0) {//Dynamic ClassRep. Uses hex_ed widget for live changes. CDoc *doc; if (IsRaw) - doc=DocNew; - else { + doc = DocNew; + else + { DocMax; - doc=DocPut; + doc = DocPut; } if (fun) - ClassRep2(doc,_d,class_name,u8_chars,force,0,max_depth,TRUE,HTT_FUN,offset); + ClassRep2(doc, _d, class_name, u8_chars, force, 0, max_depth, TRUE, HTT_FUN, offset); else - ClassRep2(doc,_d,class_name,u8_chars,force,0,max_depth,TRUE,HTT_CLASS,offset); - DocPrint(doc,"\n"); + ClassRep2(doc, _d, class_name, u8_chars, force, 0, max_depth, TRUE, HTT_CLASS, offset); + DocPrint(doc, "\n"); DocRecalc(doc); - if (IsRaw) { - DocDump(doc,100000); + if (IsRaw) + { + DocDump(doc, 100000); DocDel(doc); } } -U0 UpdateRegVarImg(CHashFun *tmpf,U8 *_b,CTask *task) +U0 UpdateRegVarImg(CHashFun *tmpf, U8 *_b,CTask *task) { CMemberList *ml; CHashClass *tmpc; - ml=tmpf->member_list_and_root; - while (ml) { - if (ml->reg!=REG_NONE) { - tmpc=OptClassFwd(ml->member_class); - MemCopy(_b+ml->offset,TaskRegAddr(task,ml->reg),tmpc->size); + ml = tmpf->member_list_and_root; + while (ml) + { + if (ml->reg != REG_NONE) + { + tmpc = OptClassFwd(ml->member_class); + MemCopy(_b + ml->offset, TaskRegAddr(task, ml->reg), tmpc->size); } - ml=ml->next; + ml = ml->next; } } -public U0 FunRep(U8 *st,U8 *rbp=NULL,I64 max_depth=2,CTask *task=NULL) +public U0 FunRep(U8 *st, U8 *rbp=NULL, I64 max_depth=2, CTask *task=NULL) {//Shows names and vals of a fun's local vars using compiler's info. I64 size; U8 *img; - CHashFun *tmpf=HashFind(st,Fs->hash_table,HTT_FUN); + CHashFun *tmpf = HashFind(st, Fs->hash_table, HTT_FUN); CMemberList *tmpm; - if (tmpf) { - if (rbp) { - if (task) { -//tmpf->size is negative. It's the bottom - //of the fun local var space relative to RBP . - size=tmpf->arg_count*8-tmpf->size+16; + if (tmpf) + { + if (rbp) + { + if (task) + { //tmpf->size is negative. It's the bottom + //of the fun local var space relative to RBP. + size = tmpf->arg_count * 8 - tmpf->size + 16; - img=MAlloc(size); - MemCopy(img,rbp+tmpf->size,size); - UpdateRegVarImg(tmpf,img-tmpf->size,task); - ClassRep(img-tmpf->size,st,max_depth,FALSE,FALSE,TRUE,rbp-img+tmpf->size); + img = MAlloc(size); + MemCopy(img, rbp + tmpf->size, size); + UpdateRegVarImg(tmpf, img - tmpf->size, task); + ClassRep(img - tmpf->size, st, max_depth, FALSE, FALSE, TRUE, rbp - img + tmpf->size); Free(img); - } else - ClassRep(rbp,st,max_depth,FALSE,FALSE,TRUE); - } else { - tmpm=tmpf->member_list_and_root; - while (tmpm) { - if (0<=tmpm->regreg,"ST_U64_REGS",tmpm->str; - else - "%08tX %s\n",tmpm->offset,tmpm->str; - tmpm=tmpm->next; } - "%08tX Stack Size\n",tmpf->size; + else + ClassRep(rbp, st, max_depth, FALSE, FALSE, TRUE); + } + else + { + tmpm = tmpf->member_list_and_root; + while (tmpm) + { + if (0 <= tmpm->reg < REG_REGS_NUM) + "%08Z %s\n", tmpm->reg, "ST_U64_REGS", tmpm->str; + else + "%08tX %s\n", tmpm->offset, tmpm->str; + tmpm = tmpm->next; + } + "%08tX Stack Size\n", tmpf->size; } } } @@ -262,15 +315,17 @@ public U0 Uf(U8 *st) I64 i; CHashSrcSym *tmpf; CDebugInfo *debug_info; - if (tmpf=HashFind(st,Fs->hash_table,HTT_FUN|HTT_EXPORT_SYS_SYM)) { - if (tmpf->type&HTT_FUN) + if (tmpf = HashFind(st, Fs->hash_table, HTT_FUN | HTT_EXPORT_SYS_SYM)) + { + if (tmpf->type & HTT_FUN) FunRep(st); - if (debug_info=tmpf->debug_info) { - i=debug_info->body[debug_info->max_line+1-debug_info->min_line] - -debug_info->body[0]; - Un(debug_info->body[0],i); - "Code Size:%04X\n",i; - } else + if (debug_info = tmpf->debug_info) + { + i = debug_info->body[debug_info->max_line + 1 - debug_info->min_line] - debug_info->body[0]; + Un(debug_info->body[0], i); + "Code Size:%04X\n", i; + } + else U(HashVal(tmpf)); } } diff --git a/src/Zenith/ZDefine.CC b/src/Zenith/ZDefine.CC index 0df331b7..a4b1eaa4 100755 --- a/src/Zenith/ZDefine.CC +++ b/src/Zenith/ZDefine.CC @@ -2,37 +2,32 @@ U0 LoadDocDefines() { - CBinFile *bfh=mem_boot_base-sizeof(CBinFile); + CBinFile *bfh = mem_boot_base - sizeof(CBinFile); - DefinePrint("DD_OS_NAME_VERSION","ZenithOS V%0.2f",sys_os_version); - DefinePrint("DD_TEMPLEOS_AGE","%0.1f", - (Now-Str2Date("8/1/2003"))/ToF64(1<<32)/CDATE_YEAR_DAYS); + DefinePrint("DD_OS_NAME_VERSION", "ZenithOS V%0.2f", sys_os_version); + DefinePrint("DD_TEMPLEOS_AGE", "%0.1f", (Now - Str2Date("8/1/2003")) / ToF64(1 << 32) / CDATE_YEAR_DAYS); - DefinePrint("DD_KERNEL","%08X",bfh); - bfh(I64)+=bfh->file_size-1; - DefinePrint("DD_KERNEL_END","%08X",bfh); + DefinePrint("DD_KERNEL", "%08X", bfh); + bfh(I64) += bfh->file_size - 1; + DefinePrint("DD_KERNEL_END", "%08X", bfh); //$LK,"DD_BOOT_HIGH_LOC_DVD",A="FF:::/Zenith/Boot/BootDVD.CC,DD_BOOT_HIGH_LOC_DVD"$ $TR,"LineRep"$ -$ID,2$DefinePrint("DD_TEMPLEOS_LOC","80,849"); +$ID,2$DefinePrint("DD_TEMPLEOS_LOC", "80,849"); $ID,-2$ - DefinePrint("DD_MP_VECT","%08X",MP_VECT_ADDR); - DefinePrint("DD_MP_VECT_END","%08X", - MP_VECT_ADDR+COREAP_16BIT_INIT_END-COREAP_16BIT_INIT-1); + DefinePrint("DD_MP_VECT", "%08X", MP_VECT_ADDR); + DefinePrint("DD_MP_VECT_END", "%08X", MP_VECT_ADDR + COREAP_16BIT_INIT_END - COREAP_16BIT_INIT - 1); - DefinePrint("DD_SYS_FIXED_AREA_BASE","%08X",SYS_FIXED_AREA); - DefinePrint("DD_SYS_FIXED_AREA_END","%08X", - SYS_FIXED_AREA+sizeof(CSysFixedArea)-1); - DefinePrint("DD_MEM_HEAP_BASE","%08X",mem_heap_base); - DefinePrint("DD_MEM_HEAP_LIMIT","%08X",mem_heap_limit); - DefinePrint("DD_MEM_MIN_MEG","%dMeg",MEM_MIN_MEG); - DefinePrint("DD_UNCACHED_ALIAS","%010X",dev.uncached_alias); - DefinePrint("DD_PHYSICAL_SPACE_END","%010X", - mem_physical_space-1); - DefinePrint("DD_MAPPED_SPACE_END","%010X", - mem_mapped_space-1); - DefinePrint("DD_JIFFY_HZ","%dHz",JIFFY_FREQ); + DefinePrint("DD_SYS_FIXED_AREA_BASE", "%08X", SYS_FIXED_AREA); + DefinePrint("DD_SYS_FIXED_AREA_END", "%08X", SYS_FIXED_AREA + sizeof(CSysFixedArea) - 1); + DefinePrint("DD_MEM_HEAP_BASE", "%08X", mem_heap_base); + DefinePrint("DD_MEM_HEAP_LIMIT", "%08X", mem_heap_limit); + DefinePrint("DD_MEM_MIN_MEG", "%dMeg", MEM_MIN_MEG); + DefinePrint("DD_UNCACHED_ALIAS", "%010X", dev.uncached_alias); + DefinePrint("DD_PHYSICAL_SPACE_END", "%010X", mem_physical_space - 1); + DefinePrint("DD_MAPPED_SPACE_END", "%010X", mem_mapped_space - 1); + DefinePrint("DD_JIFFY_HZ", "%dHz", JIFFY_FREQ); } LoadDocDefines; diff --git a/src/Zenith/ZExterns.CC b/src/Zenith/ZExterns.CC index a7fcb38f..fdcfb535 100755 --- a/src/Zenith/ZExterns.CC +++ b/src/Zenith/ZExterns.CC @@ -1,94 +1,88 @@ -extern U0 ACDDef(I64 n,CTask *parent=NULL); -extern U0 ACDDefsPut(CDoc *doc=NULL,U8 *st,I64 num=-1); -extern U0 ACDFillin(I64 n); -extern U0 ACFillIn(I64 n); -extern U0 ACMan(I64 n,CTask *parent_task=NULL); -extern I64 ZenithFile(U8 *filename,Bool warn_ext=TRUE); -extern Bool AutoComplete(Bool val=OFF); -extern U0 ClipDel(); -extern CCtrl *CtrlFindUnique(CTask *haystack_task,I64 needle_type); -extern Bool CtrlInside(CCtrl *c,I64 x,I64 y); -extern U8 *DC2Sprite(CDC *tmpb); -extern U0 DocBinDel(CDoc *doc,CDocBin *b); -extern U0 DocBinsValidate(CDoc *doc); -extern U0 DocBottom(CDoc *doc=NULL); -extern U0 DocCenter(CDoc *doc=NULL,I64 recalc_flags=RECALCt_NORMAL); -extern U0 DocClear(CDoc *doc=NULL,Bool clear_holds=FALSE); -extern Bool DocCursor(Bool show=OFF,CDoc *doc=NULL); -extern U0 DocD(U8 *buf,I64 count=0x80); -extern U0 DocDataFormat(CDoc *doc,CDocEntry *doc_e,I64 d=DOCM_CANCEL); -extern U0 DocDel(CDoc *doc); +extern U0 ACDDef(I64 n, CTask *parent=NULL); +extern U0 ACDDefsPut(CDoc *doc=NULL, U8 *st, I64 num=-1); +extern U0 ACDFillin(I64 n); +extern U0 ACFillIn(I64 n); +extern U0 ACMan(I64 n, CTask *parent_task=NULL); +extern I64 ZenithFile(U8 *filename, Bool warn_ext=TRUE); +extern Bool AutoComplete(Bool val=OFF); +extern U0 ClipDel(); +extern CCtrl *CtrlFindUnique(CTask *haystack_task, I64 needle_type); +extern Bool CtrlInside(CCtrl *c, I64 x, I64 y); +extern U8 *DC2Sprite(CDC *tmpb); +extern U0 DocBinDel(CDoc *doc, CDocBin *b); +extern U0 DocBinsValidate(CDoc *doc); +extern U0 DocBottom(CDoc *doc=NULL); +extern U0 DocCenter(CDoc *doc=NULL, I64 recalc_flags=RECALCt_NORMAL); +extern U0 DocClear(CDoc *doc=NULL, Bool clear_holds=FALSE); +extern Bool DocCursor(Bool show=OFF, CDoc *doc=NULL); +extern U0 DocD(U8 *buf, I64 count=0x80); +extern U0 DocDataFormat(CDoc *doc, CDocEntry *doc_e, I64 d=DOCM_CANCEL); +extern U0 DocDel(CDoc *doc); extern CDoc *DocDisplay(CTask *task=NULL); -extern U0 DocDump(CDoc *doc,I64 uS_delay=0); -extern CDocEntry *DocEntryCopy(CDoc *doc,CDocEntry *doc_e); -extern U0 DocEntryDel(CDoc *doc,CDocEntry *doc_e); -extern Bool DocForm(U8 *_d,U8 *class_name=lastclass, - I64 dof_flags=0,U8 *header=NULL,U8 *footer=NULL); -extern U0 DocHelpIdx(CDoc *doc,U8 *idx); -extern Bool DocHighlightCursor(Bool show=OFF,CDoc *doc=NULL); -extern U0 DocInsDoc(CDoc *doc=NULL,CDoc *doc2); -extern U0 DocInsEntry(CDoc *doc,CDocEntry *doc_e); -extern Bool DocLock(CDoc *doc); -extern I64 DocMax(I64 i=I64_MAX); -extern CDoc *DocNew(U8 *filename=NULL,CTask *task=NULL); -extern CDocEntry *DocPrint(CDoc *doc=NULL,U8 *format,...); +extern U0 DocDump(CDoc *doc, I64 uS_delay=0); +extern CDocEntry *DocEntryCopy(CDoc *doc, CDocEntry *doc_e); +extern U0 DocEntryDel(CDoc *doc, CDocEntry *doc_e); +extern Bool DocForm(U8 *_d, U8 *class_name=lastclass, I64 dof_flags=0, U8 *header=NULL, U8 *footer=NULL); +extern U0 DocHelpIdx(CDoc *doc, U8 *idx); +extern Bool DocHighlightCursor(Bool show=OFF, CDoc *doc=NULL); +extern U0 DocInsDoc(CDoc *doc=NULL, CDoc *doc2); +extern U0 DocInsEntry(CDoc *doc, CDocEntry *doc_e); +extern Bool DocLock(CDoc *doc); +extern I64 DocMax(I64 i=I64_MAX); +extern CDoc *DocNew(U8 *filename=NULL, CTask *task=NULL); +extern CDocEntry *DocPrint(CDoc *doc=NULL, U8 *format, ...); extern CDoc *DocPut(CTask *task=NULL); -extern CDoc *DocRead(U8 *name=NULL,I64 flags=0); -extern Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL); -extern U0 DocReset(CDoc *doc,Bool is_old); -extern CDocEntry *DocSprite(CDoc *doc=NULL,U8 *elems,U8 *format=NULL); -extern U0 DocTop(CDoc *doc=NULL); -extern Bool DocUnlock(CDoc *doc); -extern U0 DocUpdateTaskDocs(CTask *task); -extern U0 DrawCtrls(CTask *task); -extern Bool Ed(U8 *link_st,I64 edf_dof_flags=0); -extern U0 EdCodeTools(CDoc *doc); -extern U8 *EdSprite(I64 bin_num); -extern I64 ExeDoc(CDoc *doc,I64 ccf_flags=0); -extern I64 FindWiz(); -extern I64 I64Get(U8 *message=NULL,I64 default=0,I64 lo=I64_MIN,I64 hi=I64_MAX); -extern Bool GrPlot0(CDC *dc,I64 x,I64 y); -extern CMenuEntry *MenuEntryFind(CMenu *haystack_menu,U8 *needle_full_name); +extern CDoc *DocRead(U8 *name=NULL, I64 flags=0); +extern Bool DocRecalc(CDoc *doc, I64 recalc_flags=RECALCt_NORMAL); +extern U0 DocReset(CDoc *doc, Bool is_old); +extern CDocEntry *DocSprite(CDoc *doc=NULL, U8 *elems, U8 *format=NULL); +extern U0 DocTop(CDoc *doc=NULL); +extern Bool DocUnlock(CDoc *doc); +extern U0 DocUpdateTaskDocs(CTask *task); +extern U0 DrawCtrls(CTask *task); +extern Bool Ed(U8 *link_st, I64 edf_dof_flags=0); +extern U0 EdCodeTools(CDoc *doc); +extern U8 *EdSprite(I64 bin_num); +extern I64 ExeDoc(CDoc *doc, I64 ccf_flags=0); +extern I64 FindWiz(); +extern I64 I64Get(U8 *message=NULL, I64 default=0, I64 lo=I64_MIN, I64 hi=I64_MAX); +extern Bool GrPlot0(CDC *dc, I64 x, I64 y); +extern CMenuEntry *MenuEntryFind(CMenu *haystack_menu, U8 *needle_full_name); extern CMenu *MenuFilePush(U8 *filename); -extern U0 MenuPop(); +extern U0 MenuPop(); extern CMenu *MenuPush(U8 *st); -extern U8 Mount(Bool caller_is_prtdisk=FALSE); -extern CTask *Noise(I64 mS,F64 min_ona,F64 max_ona); -extern Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL); -extern I64 PopUpColor(U8 *header=NULL, - Bool allow_transparent=TRUE,Bool allow_default=TRUE); -extern I64 PopUpColorDither(U8 *header=NULL); -extern I64 PopUpColorLighting(U8 *header=NULL); -extern I64 PopUpFile(U8 *filename, - Bool warn_ext=TRUE,CTask *parent=NULL,CTask **_pu_task=NULL); -extern Bool PopUpForm(U8 *_d,U8 *class_name=lastclass, - I64 dof_flags=DOF_SIZE_MIN,U8 *header=NULL,U8 *footer=NULL); -extern I64 PopUpI64Get(U8 *message,I64 default,I64 lo=I64_MIN,I64 hi=I64_MAX); -extern U8 *PopUpGetStr(U8 *header=NULL); -extern I64 PopUpMenu(CDoc *doc,I64 dof_flags=0); -extern Bool PopUpNoYes(U8 *header=NULL,U8 *footer=NULL); -extern Bool PopUpOk(U8 *header=NULL,U8 *footer=NULL); -extern I64 PopUpRangeI64( - I64 lo,I64 hi,I64 step=1,U8 *header=NULL,U8 *footer=NULL); -extern Bool PopUpTransform(I64 *r); -extern I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir, - U8 *_stage2_filename=NULL); -extern U0 Refresh(I64 count=1,Bool force=FALSE); -extern U0 RegOneTimePopUp(I64 flag_num,U8 *message); -extern Bool RegWrite(U8 *path,U8 *format,...); -extern U0 SettingsPop(CTask *task=NULL,I64 flags=0); -extern CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0); -extern U0 TemplateCtrlSlider(CDoc *doc); -extern Bool View(); -extern U0 ViewAnglesDel(CTask *task=NULL); +extern U8 Mount(Bool caller_is_prtdisk=FALSE); +extern CTask *Noise(I64 mS, F64 min_ona, F64 max_ona); +extern Bool PopUpCancelOk(U8 *header=NULL, U8 *footer=NULL); +extern I64 PopUpColor(U8 *header=NULL, Bool allow_transparent=TRUE, Bool allow_default=TRUE); +extern I64 PopUpColorDither(U8 *header=NULL); +extern I64 PopUpColorLighting(U8 *header=NULL); +extern I64 PopUpFile(U8 *filename, Bool warn_ext=TRUE, CTask *parent=NULL, CTask **_pu_task=NULL); +extern Bool PopUpForm(U8 *_d, U8 *class_name=lastclass, I64 dof_flags=DOF_SIZE_MIN, U8 *header=NULL, U8 *footer=NULL); +extern I64 PopUpI64Get(U8 *message, I64 default, I64 lo=I64_MIN, I64 hi=I64_MAX); +extern U8 *PopUpGetStr(U8 *header=NULL); +extern I64 PopUpMenu(CDoc *doc, I64 dof_flags=0); +extern Bool PopUpNoYes(U8 *header=NULL, U8 *footer=NULL); +extern Bool PopUpOk(U8 *header=NULL, U8 *footer=NULL); +extern I64 PopUpRangeI64(I64 lo, I64 hi, I64 step=1, U8 *header=NULL, U8 *footer=NULL); +extern Bool PopUpTransform(I64 *r); +extern I64 RedSeaISO(U8 *_iso_filename=NULL, U8 *_src_dir, U8 *_stage2_filename=NULL); +extern U0 Refresh(I64 count=1, Bool force=FALSE); +extern U0 RegOneTimePopUp(I64 flag_num, U8 *message); +extern Bool RegWrite(U8 *path, U8 *format, ...); +extern U0 SettingsPop(CTask *task=NULL, I64 flags=0); +extern CTaskSettings *SettingsPush(CTask *task=NULL, I64 flags=0); +extern U0 TemplateCtrlSlider(CDoc *doc); +extern Bool View(); +extern U0 ViewAnglesDel(CTask *task=NULL); extern CCtrl *ViewAnglesNew(CTask *task=NULL); -extern Bool WinBorder(Bool val=OFF,CTask *task=NULL); -extern CDoc *WinCursorPosSet(CTask *task,I64 mouse_x,I64 mouse_y,Bool set_cursor=TRUE); -extern Bool WinHorz(I64 left,I64 right,CTask *task=NULL); -extern U0 WinMax(CTask *task=NULL); -extern U0 WinScrollNull(CTask *task,CD3I64 *s); -extern U0 WinScrollRestore(CTask *task,CD3I64 *s); -extern U0 WinScrollsInit(CTask *task); -extern I64 WinToTop(CTask *task=NULL,Bool update_z_buf=TRUE); -extern Bool WinVert(I64 top,I64 bottom,CTask *task=NULL); +extern Bool WinBorder(Bool val=OFF, CTask *task=NULL); +extern CDoc *WinCursorPosSet(CTask *task, I64 mouse_x, I64 mouse_y, Bool set_cursor=TRUE); +extern Bool WinHorz(I64 left, I64 right, CTask *task=NULL); +extern U0 WinMax(CTask *task=NULL); +extern U0 WinScrollNull(CTask *task, CD3I64 *s); +extern U0 WinScrollRestore(CTask *task, CD3I64 *s); +extern U0 WinScrollsInit(CTask *task); +extern I64 WinToTop(CTask *task=NULL, Bool update_z_buf=TRUE); +extern Bool WinVert(I64 top, I64 bottom, CTask *task=NULL); extern CWinMgrGlobals winmgr; diff --git a/src/Zenith/ZHash.CC b/src/Zenith/ZHash.CC index 29f88bf7..22a61ebf 100755 --- a/src/Zenith/ZHash.CC +++ b/src/Zenith/ZHash.CC @@ -5,37 +5,39 @@ class CWho U8 *idx; }; -I64 HashEntriesCompare(CWho *h1,CWho *h2) +I64 HashEntriesCompare(CWho *h1, CWho *h2) { - I64 i1,i2; - if (i1=StrCompare(h1->h->str,h2->h->str)) + I64 i1, i2; + if (i1 = StrCompare(h1->h->str, h2->h->str)) return i1; - i1=HashTypeNum(h1->h); - i2=HashTypeNum(h2->h); - return i1-i2; + i1 = HashTypeNum(h1->h); + i2 = HashTypeNum(h2->h); + return i1 - i2; } -I64 HashEntriesCompare2(CWho *h1,CWho *h2) +I64 HashEntriesCompare2(CWho *h1, CWho *h2) { - CHashFun *tmpf1=h1->h,*tmpf2=h2->h; - I64 i1=HashVal(tmpf1),i2=HashVal(tmpf2); - if (i1==i2) { - i1=HashTypeNum(tmpf1); - i2=HashTypeNum(tmpf2); - if (i1==i2) - return StrCompare(tmpf1->str,tmpf2->str); + CHashFun *tmpf1 = h1->h, *tmpf2 = h2->h; + I64 i1 = HashVal(tmpf1), i2 = HashVal(tmpf2); + if (i1 == i2) + { + i1 = HashTypeNum(tmpf1); + i2 = HashTypeNum(tmpf2); + if (i1 == i2) + return StrCompare(tmpf1->str, tmpf2->str); } - return i1-i2; + return i1 - i2; } -I64 HelpIndexCount(U8 *ptr,U8 *idx) +I64 HelpIndexCount(U8 *ptr, U8 *idx) { - I64 count=0,ch,idx_len=StrLen(idx); - while (*ptr) { - if (!StrNCompare(ptr,idx,idx_len)) + I64 count = 0, ch, idx_len = StrLen(idx); + while (*ptr) + { + if (!StrNCompare(ptr, idx, idx_len)) count++; - while (ch=*ptr++) - if (ch==';') + while (ch = *ptr++) + if (ch == ';') break; if (!ch) ptr--; @@ -43,265 +45,294 @@ I64 HelpIndexCount(U8 *ptr,U8 *idx) return count; } -U8 *HelpIndexStr(U8 **_ptr,U8 *idx) +U8 *HelpIndexStr(U8 **_ptr, U8 *idx) { - U8 *ptr=*_ptr,*ptr2,*res; - I64 ch,idx_len=StrLen(idx); - while (*ptr) { - ptr2=ptr; - while (ch=*ptr++) - if (ch==';') + U8 *ptr = *_ptr, *ptr2, *res; + I64 ch, idx_len = StrLen(idx); + while (*ptr) + { + ptr2 = ptr; + while (ch = *ptr++) + if (ch == ';') break; if (!ch) ptr--; - *_ptr=ptr; - if (!StrNCompare(ptr2,idx,idx_len)) { - if (ch==';') + *_ptr = ptr; + if (!StrNCompare(ptr2, idx, idx_len)) + { + if (ch == ';') ptr--; - *ptr=0; - res=StrNew(ptr2); - *ptr=ch; + *ptr = 0; + res = StrNew(ptr2); + *ptr = ch; return res; } } return NULL; } -U8 *HelpComment(CTask *task,CHash *tmph,U8 *_src_link) +U8 *HelpComment(CTask *task, CHash *tmph, U8 *_src_link) { CDoc *doc; CDocEntry *doc_e; - U8 *res=NULL,*ptr,*ptr2,*src_link=StrNew(_src_link); + U8 *res = NULL, *ptr, *ptr2, *src_link = StrNew(_src_link); - if (*src_link=='F' && src_link[2]==':') - *src_link='P'; - XTalkWait(task,"Ed(0x%X,DOF_DONT_WINMGR_SYNC|DOF_DONT_SHOW);\n",src_link); + if (*src_link == 'F' && src_link[2] == ':') + *src_link = 'P'; + XTalkWait(task, "Ed(0x%X, DOF_DONT_WINMGR_SYNC | DOF_DONT_SHOW);\n", src_link); Free(src_link); - doc=DocPut(task); - doc_e=doc->cur_entry; - if (tmph->type&HTT_FUN) { - if (Bt(&tmph(CHashFun *)->flags,Ff__EXTERN) || - Bt(&tmph(CHashFun *)->flags,Ff_INTERNAL)) - while (doc_e!=doc && - (!(doc_e->de_flags&DOCEF_TAG)||!StrOcc(doc_e->tag,';'))) - doc_e=doc_e->next; + doc = DocPut(task); + doc_e = doc->cur_entry; + if (tmph->type & HTT_FUN) + { + if (Bt(&tmph(CHashFun *)->flags, Ff__EXTERN) || Bt(&tmph(CHashFun *)->flags, Ff_INTERNAL)) + while (doc_e != doc && (!(doc_e->de_flags & DOCEF_TAG) || !StrOcc(doc_e->tag, ';'))) + doc_e = doc_e->next; else - while (doc_e!=doc && - (!(doc_e->de_flags&DOCEF_TAG)||!StrOcc(doc_e->tag,'{'))) - doc_e=doc_e->next; + while (doc_e != doc && (!(doc_e->de_flags & DOCEF_TAG) || !StrOcc(doc_e->tag, '{'))) + doc_e = doc_e->next; } - if (doc_e!=doc) { - if (doc_e->de_flags&DOCEF_TAG) { - ptr=doc_e->tag; - if (ptr2=StrMatch("//",ptr)) - ptr=ptr2+2; - else if (ptr2=StrMatch("/*",ptr)) - ptr=ptr2+2; - else if (!StrNCompare(ptr,"public",6)) - ptr+=6; - while (*ptr==CH_SPACE) + if (doc_e != doc) + { + if (doc_e->de_flags & DOCEF_TAG) + { + ptr = doc_e->tag; + if (ptr2 = StrMatch("//", ptr)) + ptr = ptr2 + 2; + else if (ptr2 = StrMatch("/*", ptr)) + ptr = ptr2 + 2; + else if (!StrNCompare(ptr, "public", 6)) + ptr += 6; + while (*ptr == CH_SPACE) ptr++; - res=StrNew(ptr); - doc_e=doc_e->next; + res = StrNew(ptr); + doc_e = doc_e->next; } - while (doc_e!=doc && doc_e->type_u8!=DOCT_NEW_LINE) { - if (doc_e->type_u8==DOCT_TAB) { - ptr=MStrPrint("%s ",res); + while (doc_e != doc && doc_e->type_u8 != DOCT_NEW_LINE) + { + if (doc_e->type_u8 == DOCT_TAB) + { + ptr = MStrPrint("%s ", res); Free(res); - res=ptr; - } else if (doc_e->de_flags&DOCEF_TAG) { - ptr=MStrPrint("%s%s",res,doc_e->tag); - Free(res); - res=ptr; + res = ptr; } - doc_e=doc_e->next; + else if (doc_e->de_flags & DOCEF_TAG) + { + ptr = MStrPrint("%s%s", res, doc_e->tag); + Free(res); + res = ptr; + } + doc_e = doc_e->next; } } - XTalkWait(task,"%c",CH_SHIFT_ESC); - if (res) { - ptr=MStrUtil(res,SUF_REM_TRAILING|SUF_REM_LEADING|SUF_SINGLE_SPACE); + XTalkWait(task, "%c", CH_SHIFT_ESC); + if (res) + { + ptr = MStrUtil(res, SUF_REM_TRAILING | SUF_REM_LEADING | SUF_SINGLE_SPACE); Free(res); - res=ptr; + res = ptr; } return res; } -I64 HashEntriesCompare3(CWho *h1,CWho *h2) +I64 HashEntriesCompare3(CWho *h1, CWho *h2) { - I64 i,i1=0,i2=0; - i=StrCompare(h1->idx,h2->idx); + I64 i, i1 = 0, i2 = 0; + i = StrCompare(h1->idx, h2->idx); if (i) return i; - else { - if (h1->h->type&HTT_HELP_FILE) - i1=1; - if (h2->h->type&HTT_HELP_FILE) - i2=1; - i=i2-i1; + else + { + if (h1->h->type & HTT_HELP_FILE) + i1 = 1; + if (h2->h->type & HTT_HELP_FILE) + i2 = 1; + i = i2 - i1; if (i) return i; else - return StrCompare(h1->h->str,h2->h->str); + return StrCompare(h1->h->str, h2->h->str); } } -public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, -U8 *idx=NULL,CDoc *doc=NULL) -{//Dump hash symbol table. -// "+p" for only public symbols +public U0 Who(U8 *fu_flags=NULL, CHashTable *h=NULL, U8 *idx=NULL, CDoc *doc=NULL) +{ //Dump hash symbol table. + // "+p" for only public symbols // "+m" to order by number (normally alphabetical) // "-r" just local hash table CHashTable *table; CHashSrcSym *tmph; CHashGeneric *ptr; CWho *list; - I64 count,i,j,k,f=0; - U8 buf[512],*last_idx=StrNew(""),*cur_idx,*comment; - Bool recurse,publics,map; + I64 count, i, j, k, f = 0; + U8 buf[512], *last_idx = StrNew(""), *cur_idx, *comment; + Bool recurse, publics, map; CTask *task; - FlagsScan(&f,Define("ST_FILE_UTIL_FLAGS"),"+r"); - FlagsScan(&f,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - if (f&~(FUF_RECURSE|FUF_PUBLIC|FUF_MAP)) + FlagsScan(&f, Define("ST_FILE_UTIL_FLAGS"), "+r"); + FlagsScan(&f, Define("ST_FILE_UTIL_FLAGS"), fu_flags); + if (f & ~(FUF_RECURSE | FUF_PUBLIC | FUF_MAP)) throw('FUF'); - recurse=Bt(&f,FUf_RECURSE); - publics=Bt(&f,FUf_PUBLIC); - map =Bt(&f,FUf_MAP); + recurse = Bt(&f, FUf_RECURSE); + publics = Bt(&f, FUf_PUBLIC); + map = Bt(&f, FUf_MAP); - if (!h) h=Fs->hash_table; + if (!h) + h = Fs->hash_table; - if (idx) { - task=User; + if (idx) + { + task = User; TaskWait(task); - LBtr(&task->display_flags,DISPLAYf_SHOW); - } else - task=NULL; + LBtr(&task->display_flags, DISPLAYf_SHOW); + } + else + task = NULL; - count=0; - table=h; - while (table) { - for (i=0;i<=table->mask;i++) { - tmph=table->body[i]; - while (tmph) { - if (!(tmph->type & (HTF_IMPORT | HTF_PRIVATE)) && - (tmph->type & HTF_PUBLIC || !publics)) { + count = 0; + table = h; + while (table) + { + for (i = 0; i <= table->mask; i++) + { + tmph = table->body[i]; + while (tmph) + { + if (!(tmph->type & (HTF_IMPORT | HTF_PRIVATE)) && (tmph->type & HTF_PUBLIC || !publics)) + { if (!idx) count++; - else if (tmph->type&HTG_SRC_SYM && (cur_idx=tmph->idx)) - count+=HelpIndexCount(cur_idx,idx); + else if (tmph->type & HTG_SRC_SYM && (cur_idx = tmph->idx)) + count += HelpIndexCount(cur_idx, idx); } - tmph=tmph->next; + tmph = tmph->next; } } if (recurse) - table=table->next; + table = table->next; else break; } if (!count) goto wh_done; - list=CAlloc(count*sizeof(CWho)); - j=0; - table=h; - while (table) { - for (i=0;i<=table->mask;i++) { - tmph=table->body[i]; - while (tmph) { - if (!(tmph->type & (HTF_IMPORT | HTF_PRIVATE)) && - (tmph->type & HTF_PUBLIC || !publics)) + list = CAlloc(count * sizeof(CWho)); + j = 0; + table = h; + while (table) + { + for (i = 0; i <= table->mask; i++) + { + tmph = table->body[i]; + while (tmph) + { + if (!(tmph->type & (HTF_IMPORT | HTF_PRIVATE)) && (tmph->type & HTF_PUBLIC || !publics)) if (!idx) - list[j++].h=tmph; - else if (tmph->type&HTG_SRC_SYM && (cur_idx=tmph->idx) && - (k=HelpIndexCount(cur_idx,idx))) - while (k--) { - list[j].idx=HelpIndexStr(&cur_idx,idx); - list[j++].h=tmph; + list[j++].h = tmph; + else if (tmph->type & HTG_SRC_SYM && (cur_idx=tmph->idx) && (k = HelpIndexCount(cur_idx, idx))) + while (k--) + { + list[j].idx = HelpIndexStr(&cur_idx, idx); + list[j++].h = tmph; } - tmph=tmph->next; + tmph = tmph->next; } } if (recurse) - table=table->next; + table = table->next; else break; } if (map) - QuickSort(list,count,sizeof(CWho),&HashEntriesCompare2); + QuickSort(list, count, sizeof(CWho), &HashEntriesCompare2); else if (idx) - QuickSort(list,count,sizeof(CWho),&HashEntriesCompare3); + QuickSort(list, count, sizeof(CWho), &HashEntriesCompare3); else - QuickSort(list,count,sizeof(CWho),&HashEntriesCompare); + QuickSort(list, count, sizeof(CWho), &HashEntriesCompare); - if (idx) { - progress1_max=count; - progress1=0; + if (idx) + { + progress1_max = count; + progress1 = 0; } - for (i=0;itype & HTT_HELP_FILE) { - DocPrint(doc,"$$WW,1$$"); - DocType(doc,ptr->str); - DocPrint(doc,"$$WW,0$$"); - } else { - if (ptr->type&HTG_SRC_SYM && ptr(CHashSrcSym *)->src_link) { - DocPrint(doc,"$$LK,\"%-20s\",A=\"%s\"$$", - ptr->str,ptr(CHashSrcSym *)->src_link); + if (idx && ptr->type & HTT_HELP_FILE) + { + DocPrint(doc, "$$WW,1$$"); + DocType(doc, ptr->str); + DocPrint(doc, "$$WW,0$$"); + } + else + { + if (ptr->type & HTG_SRC_SYM && ptr(CHashSrcSym *)->src_link) + { + DocPrint(doc, "$$LK,\"%-20s\",A=\"%s\"$$", ptr->str, ptr(CHashSrcSym *)->src_link); if (idx) - comment=HelpComment(task,ptr,ptr(CHashSrcSym *)->src_link); - } else - DocPrint(doc,"%-20s",ptr->str); - - if (!idx) { - if (ptr->type & HTT_DEFINE_STR) { - j=ptr(CHashDefineStr *)->count; - if (j==-1) - StrPrint(buf,"%-10t$$Q ",ptr(CHashDefineStr *)->data); - else - StrPrint(buf,"%-10t$$Q %02X",ptr(CHashDefineStr *)->data,j); - } else if (ptr->type & HTT_GLOBAL_VAR) - StrPrint(buf,"%010X ",ptr(CHashGlobalVar *)->data_addr); - else - StrPrint(buf,"%010X ",HashVal(ptr)); - j=HashEntrySize(ptr); - if (j==-1) - CatPrint(buf," %04X ",ptr->use_count); - else - CatPrint(buf," %04X %010X ",ptr->use_count,j); - } else - *buf=0; - - k=ptr->type; - if (publics) - k&=~HTF_PUBLIC; - if (!(k&HTG_TYPE_MASK)) - CatPrint(buf,"NULL "); - while (k) { - j=Bsf(k); - if (j<0) - break; - Btr(&k,j); - CatPrint(buf,"%Z ",j,"ST_HTT_TYPES"); + comment = HelpComment(task, ptr, ptr(CHashSrcSym *)->src_link); } - DocPrint(doc,"%s",buf); - if (comment) { - DocPrint(doc,"$$GREEN$$%s$$FG$$",comment); + else + DocPrint(doc, "%-20s", ptr->str); + + if (!idx) + { + if (ptr->type & HTT_DEFINE_STR) + { + j = ptr(CHashDefineStr *)->count; + if (j == -1) + StrPrint(buf, "%-10t$$Q ", ptr(CHashDefineStr *)->data); + else + StrPrint(buf, "%-10t$$Q %02X", ptr(CHashDefineStr *)->data, j); + } + else if (ptr->type & HTT_GLOBAL_VAR) + StrPrint(buf, "%010X ", ptr(CHashGlobalVar *)->data_addr); + else + StrPrint(buf, "%010X ", HashVal(ptr)); + j = HashEntrySize(ptr); + if (j == -1) + CatPrint(buf, " %04X ", ptr->use_count); + else + CatPrint(buf, " %04X %010X ", ptr->use_count, j); + } + else + *buf = 0; + + k = ptr->type; + if (publics) + k &= ~HTF_PUBLIC; + if (!(k & HTG_TYPE_MASK)) + CatPrint(buf, "NULL "); + while (k) + { + j = Bsf(k); + if (j < 0) + break; + Btr(&k, j); + CatPrint(buf, "%Z ", j, "ST_HTT_TYPES"); + } + DocPrint(doc, "%s", buf); + if (comment) + { + DocPrint(doc, "$$GREEN$$%s$$FG$$", comment); Free(comment); } - DocPrint(doc,"\n"); + DocPrint(doc, "\n"); } Free(list[i].idx); if (idx) @@ -309,12 +340,13 @@ U8 *idx=NULL,CDoc *doc=NULL) } Free(list); if (idx) - progress1=progress1_max=0; + progress1 = progress1_max = 0; wh_done: - if (doc) { - if (doc->head.next==doc) - DocPrint(doc,"No Match"); + if (doc) + { + if (doc->head.next == doc) + DocPrint(doc, "No Match"); else DocRecalc(doc); } @@ -326,104 +358,112 @@ wh_done: #define HDR_NUM 16 public I64 HashDepthRep(CHashTable *table=NULL) -{//Hash table linked-list chain depth report. -//Histogram of collision count. - I64 i,j,longest=0,count=0,a[HDR_NUM]; +{ //Hash table linked-list chain depth report. + //Histogram of collision count. + I64 i, j, longest = 0, count = 0, a[HDR_NUM]; CHash *tmph; - if (!table) table=Fs->hash_table; - MemSet(a,0,sizeof(a)); - for (i=0;i<=table->mask;i++) { - tmph=table->body[i]; - if (tmph) { - j=LinkedListCount(tmph); - if (jhash_table; + MemSet(a, 0, sizeof(a)); + for (i = 0; i <= table->mask; i++) + { + tmph = table->body[i]; + if (tmph) + { + j = LinkedListCount(tmph); + if (j < HDR_NUM) a[j]++; - count+=j; - if (j>longest) - longest=j; + count += j; + if (j > longest) + longest = j; } } "Histogram\n"; - for (i=0;imask+1,count,longest; + "%02d:%d\n", i, a[i]; + "Size:%d Count:%d Longest:%d\n", table->mask + 1, count, longest; return longest; } #help_index "Help System" #help_file "::/Doc/HelpSystem" -public U0 DocHelpIdx(CDoc *doc,U8 *idx) +public U0 DocHelpIdx(CDoc *doc, U8 *idx) {//Put to doc report for given help idx. - Who("+p",,idx,doc); + Who("+p",, idx, doc); } -public U0 PopUpHelpIndex(U8 *idx,CTask *parent=NULL) +public U0 PopUpHelpIndex(U8 *idx, CTask *parent=NULL) {//PopUp win report for given help idx. U8 *buf; - buf=MStrPrint("DocHelpIdx(DocPut,\"%s\");View;",idx); - PopUp(buf,parent); + buf = MStrPrint("DocHelpIdx(DocPut, \"%s\"); View;", idx); + PopUp(buf, parent); Free(buf); } #help_index "Hash/System" public U0 MapFileLoad(U8 *filename) {//Load map file so we have src line info. - U8 *st,*ptr,*name=ExtDefault(filename,"MAP"), - *absname=FileNameAbs(name); - CDoc *doc=DocRead(name); + U8 *st, *ptr, *name = ExtDefault(filename, "MAP"), *absname = FileNameAbs(name); + CDoc *doc = DocRead(name); CDocEntry *doc_e; CHashSrcSym *tmph; - I64 i,j,base=0; + I64 i, j, base=0; CDebugInfo *debug_info; FileExtRemove(absname); - if (absname[1]==':' && StrLen(absname)>2 && - (tmph=HashSingleTableFind(absname+2,Fs->hash_table,HTT_MODULE))) - base=tmph(CHashGeneric *)->user_data0+sizeof(CBinFile); + if (absname[1] == ':' && StrLen(absname) > 2 && (tmph = HashSingleTableFind(absname + 2, Fs->hash_table, HTT_MODULE))) + base = tmph(CHashGeneric *)->user_data0 + sizeof(CBinFile); if (!doc) return; - doc_e=doc->head.next; - while (doc_e!=doc) { - if (doc_e->type_u8==DOCT_LINK) { + doc_e = doc->head.next; + while (doc_e != doc) + { + if (doc_e->type_u8 == DOCT_LINK) + { if (*doc_e->tag) - st=MStrUtil(doc_e->tag,SUF_REM_TRAILING); + st = MStrUtil(doc_e->tag, SUF_REM_TRAILING); else - st=MStrUtil(doc_e->aux_str,SUF_REM_TRAILING); - if (tmph=HashSingleTableFind(st,Fs->hash_table,HTG_SRC_SYM)) { - if (*doc_e->tag) { + st = MStrUtil(doc_e->aux_str, SUF_REM_TRAILING); + if (tmph = HashSingleTableFind(st, Fs->hash_table, HTG_SRC_SYM)) + { + if (*doc_e->tag) + { Free(tmph->src_link); - tmph->src_link=doc_e->aux_str; - ptr=tmph->src_link; - if (ptr[0] && ptr[1] && ptr[2]==':') { - if (ptr[3]==':') - ptr[3]=blkdev.boot_drive_let; - else if (ptr[3]=='~') - ptr[3]=*blkdev.home_dir; + tmph->src_link = doc_e->aux_str; + ptr = tmph->src_link; + if (ptr[0] && ptr[1] && ptr[2] == ':') + { + if (ptr[3] == ':') + ptr[3] = blkdev.boot_drive_let; + else if (ptr[3] == '~') + ptr[3] = *blkdev.home_dir; } - doc_e->aux_str=NULL; + doc_e->aux_str = NULL; } - if (tmph->type&(HTT_FUN|HTT_EXPORT_SYS_SYM) && - !(debug_info=tmph->debug_info) && doc_e->bin_data && - (debug_info=doc_e->bin_data->data)) { - if (doc_e->bin_data->size>MSize(debug_info)) + if (tmph->type & (HTT_FUN | HTT_EXPORT_SYS_SYM) && + !(debug_info = tmph->debug_info) && doc_e->bin_data && + (debug_info = doc_e->bin_data->data)) + { + if (doc_e->bin_data->size > MSize(debug_info)) "Corrupt Map Entry\n"; - else { - doc_e->bin_data->data=NULL; - tmph->debug_info=debug_info; - for (i=debug_info->min_line;i<=debug_info->max_line+1;i++) { - j=i-debug_info->min_line; + else + { + doc_e->bin_data->data = NULL; + tmph->debug_info = debug_info; + for (i = debug_info->min_line; i <= debug_info->max_line + 1; i++) + { + j = i - debug_info->min_line; if (debug_info->body[j]) - debug_info->body[j]=debug_info->body[j]+base; + debug_info->body[j] = debug_info->body[j] + base; } } } } Free(st); } - doc_e=doc_e->next; + doc_e = doc_e->next; } DocDel(doc); Free(name); diff --git a/src/Zenith/ZMath.CC b/src/Zenith/ZMath.CC index 8f731975..cf30354e 100755 --- a/src/Zenith/ZMath.CC +++ b/src/Zenith/ZMath.CC @@ -1,135 +1,138 @@ #help_index "Math" -public U0 R2P(F64 *_mag=NULL,F64 *_arg=NULL,F64 x,F64 y) +public U0 R2P(F64 *_mag=NULL, F64 *_arg=NULL, F64 x, F64 y) {//Rect to polar //Returns angle in range (-ã,ã] if (_arg) - *_arg=Arg(x,y); + *_arg = Arg(x, y); if (_mag) - *_mag=Sqrt(x*x+y*y); + *_mag = Sqrt(x * x + y * y); } -public U0 P2R(F64 *_x=NULL,F64 *_y=NULL,F64 mag,F64 arg) +public U0 P2R(F64 *_x=NULL, F64 *_y=NULL, F64 mag, F64 arg) {//Polar to Rect if (_x) - *_x=mag*Cos(arg); + *_x = mag * Cos(arg); if (_y) - *_y=mag*Sin(arg); + *_y = mag * Sin(arg); } -public F64 Wrap(F64 é,F64 base=-ã) +public F64 Wrap(F64 é, F64 base=-ã) {//Returns angle in range [base,base+2*ã) - F64 res=é%(2*ã); - if (res>=base+2*ã) - res-=2*ã; - else if (res= base + 2 * ã) + res -= 2 * ã; + else if (res < base) + res += 2 * ã; return res; } -public I64 DistSqrI64(I64 x1,I64 y1,I64 x2,I64 y2) +public I64 DistSqrI64(I64 x1, I64 y1, I64 x2, I64 y2) {//Distance-squared between 2 points. - I64 dx=x1-x2,dy=y1-y2; - return dx*dx+dy*dy; + I64 dx = x1 - x2, dy = y1 - y2; + return dx * dx + dy * dy; } public F64 ASin(F64 s) {//Arc Sin (Inverse Sin). F64 c; - c=s*s; - if (c>=1.0) - return ã/2.0; - c=Sqrt(1.0-c); - return ATan(s/c); + c = s * s; + if (c >= 1.0) + return ã / 2.0; + c = Sqrt(1.0 - c); + return ATan(s / c); } public F64 ACos(F64 c) {//Arc Cos (Inverse Cos). F64 s; if (!c) - return ã/2.0; - s=c*c; - if (s>=1.0) + return ã / 2.0; + s = c * c; + if (s >= 1.0) return 0.0; - s=Sqrt(1.0-s); - return ATan(s/c); + s = Sqrt(1.0 - s); + return ATan(s / c); } public F64 Sinh(F64 x) {//Hyperbolic Sine. - return 0.5*(Exp(x)-Exp(-x)); + return 0.5 * (Exp(x) - Exp(-x)); } public F64 Cosh(F64 x) {//Hyperbolic Cosine. - return 0.5*(Exp(x)+Exp(-x)); + return 0.5 * (Exp(x) + Exp(-x)); } #help_index "Math/Complex;Data Types/Complex" -public Complex *CAdd(Complex *sum,Complex *n1,Complex *n2) +public Complex *CAdd(Complex *sum, Complex *n1, Complex *n2) {//sum=n1+n2 - sum->x=n1->x+n2->x; - sum->y=n1->y+n2->y; + sum->x = n1->x + n2->x; + sum->y = n1->y + n2->y; return sum; } -public Complex *CSub(Complex *diff,Complex *n1,Complex *n2) +public Complex *CSub(Complex *diff, Complex *n1, Complex *n2) {//diff=n1-n2 - diff->x=n1->x-n2->x; - diff->y=n1->y-n2->y; + diff->x = n1->x - n2->x; + diff->y = n1->y - n2->y; return diff; } -public Complex *CMul(Complex *prod,Complex *n1,Complex *n2) +public Complex *CMul(Complex *prod, Complex *n1, Complex *n2) {//prod=n1*n2 - prod->x=n1->x*n2->x-n1->y*n2->y; - prod->y=n1->x*n2->y+n1->y*n2->x; + prod->x = n1->x * n2->x - n1->y * n2->y; + prod->y = n1->x * n2->y + n1->y * n2->x; return prod; } -public Complex *CDiv(Complex *quot,Complex *n1,Complex *n2) +public Complex *CDiv(Complex *quot, Complex *n1, Complex *n2) {//quot=n1/n2 - F64 m1,arg1,m2,arg2; - R2P(&m1,&arg1,n1->x,n1->y); - R2P(&m2,&arg2,n2->x,n2->y); - m1/=m2; - arg1-=arg2; - quot->x=m1*Cos(arg1); - quot->y=m1*Sin(arg1); + F64 m1, arg1, m2, arg2; + R2P(&m1, &arg1, n1->x, n1->y); + R2P(&m2, &arg2, n2->x, n2->y); + m1 /= m2; + arg1 -= arg2; + quot->x = m1 * Cos(arg1); + quot->y = m1 * Sin(arg1); return quot; } -public Complex *CScale(Complex *dst,F64 s) +public Complex *CScale(Complex *dst, F64 s) {//dst*=s - dst->x*=s; - dst->y*=s; + dst->x *= s; + dst->y *= s; return dst; } -public Complex *CCopy(Complex *dst,Complex *src) +public Complex *CCopy(Complex *dst, Complex *src) {//dst=src - dst->x=src->x; - dst->y=src->y; + dst->x = src->x; + dst->y = src->y; return dst; } -public Complex *CEqu(Complex *dst,F64 x,F64 y) +public Complex *CEqu(Complex *dst, F64 x, F64 y) {//dst=(x,y) - dst->x=x; - dst->y=y; + dst->x = x; + dst->y = y; return dst; } -public Complex *CPoly(Complex *dst,I64 n,Complex *zeros,Complex *x) +public Complex *CPoly(Complex *dst, I64 n, Complex *zeros, Complex *x) {//Eval complex polynomial I64 i; - Complex n1,n2; - if (n>0) { - CSub(dst,x,&zeros[0]); - for (i=1;i 0) + { + CSub(dst, x, &zeros[0]); + for (i = 1; i < n; i++) + { + CCopy(&n1, dst); + CMul(dst, &n1, CSub(&n2, x, &zeros[i])); } - } else - CEqu(dst,1.0,0.0); + } + else + CEqu(dst, 1.0, 0.0); return dst; } diff --git a/src/Zenith/ZMathODE.CC b/src/Zenith/ZMathODE.CC index 5398346e..51851d29 100755 --- a/src/Zenith/ZMathODE.CC +++ b/src/Zenith/ZMathODE.CC @@ -3,62 +3,63 @@ //See $LK,"::/Doc/Credits.DD"$. -F64 LowPass1(F64 a,F64 y0,F64 y,F64 dt=1.0) +F64 LowPass1(F64 a, F64 y0, F64 y, F64 dt=1.0) {//First order low pass filter - dt=Exp(-a*dt); - return y0*dt+y*(1.0-dt); + dt = Exp(-a * dt); + return y0 * dt + y * (1.0 - dt); } U0 ODEResetPtrs(CMathODE *ode) { - I64 s=ode->n_internal*sizeof(F64); - F64 *ptr=ode->array_base; - ode->state_internal=ptr; ptr(I64)+=s; - ode->state_scale=ptr; ptr(I64)+=s; - ode->DstateDt=ptr; ptr(I64)+=s; - ode->initial_state=ptr; ptr(I64)+=s; - ode->tmp0=ptr; ptr(I64)+=s; - ode->tmp1=ptr; ptr(I64)+=s; - ode->tmp2=ptr; ptr(I64)+=s; - ode->tmp3=ptr; ptr(I64)+=s; - ode->tmp4=ptr; ptr(I64)+=s; - ode->tmp5=ptr; ptr(I64)+=s; - ode->tmp6=ptr; ptr(I64)+=s; - ode->tmp7=ptr; + I64 s = ode->n_internal * sizeof(F64); + F64 *ptr = ode->array_base; + ode->state_internal = ptr; ptr(I64) += s; + ode->state_scale = ptr; ptr(I64) += s; + ode->DstateDt = ptr; ptr(I64) += s; + ode->initial_state = ptr; ptr(I64) += s; + ode->tmp0 = ptr; ptr(I64) += s; + ode->tmp1 = ptr; ptr(I64) += s; + ode->tmp2 = ptr; ptr(I64) += s; + ode->tmp3 = ptr; ptr(I64) += s; + ode->tmp4 = ptr; ptr(I64) += s; + ode->tmp5 = ptr; ptr(I64) += s; + ode->tmp6 = ptr; ptr(I64) += s; + ode->tmp7 = ptr; } -public CMathODE *ODENew(I64 n,F64 max_tolerance=1e-6,I64 flags=0) +public CMathODE *ODENew(I64 n, F64 max_tolerance=1e-6, I64 flags=0) {//Make differential equation ctrl struct. See $LK,"flags",A="MN:ODEF_HAS_MASSES"$. //The tolerance is not precise. //You can min_tolerance and it will //dynamically adjust tolerance to utilize //the CPU. - I64 s=n*sizeof(F64); - CMathODE *ode=CAlloc(sizeof(CMathODE)); - ode->t_scale=1.0; - ode->flags=flags; - ode->n_internal=ode->n=n; - ode->h=1e-6; - ode->h_min=1e-64; - ode->h_max=1e32; - ode->max_tolerance=ode->min_tolerance=ode->tolerance_internal=max_tolerance; - ode->win_task=ode->mem_task=Fs; + I64 s = n * sizeof(F64); + CMathODE *ode = CAlloc(sizeof(CMathODE)); + ode->t_scale = 1.0; + ode->flags = flags; + ode->n_internal = ode->n = n; + ode->h = 1e-6; + ode->h_min = 1e-64; + ode->h_max = 1e32; + ode->max_tolerance = ode->min_tolerance = ode->tolerance_internal = max_tolerance; + ode->win_task = ode->mem_task = Fs; QueueInit(&ode->next_mass); QueueInit(&ode->next_spring); - ode->state=CAlloc(s); - ode->array_base=MAlloc(12*s); + ode->state = CAlloc(s); + ode->array_base = MAlloc(12 * s); ODEResetPtrs(ode); return ode; } -public Bool ODEPause(CMathODE *ode,Bool val=ON) +public Bool ODEPause(CMathODE *ode, Bool val=ON) {//Pause ODE. Bool res; - if (!ode) return OFF; - res=LBEqual(&ode->flags,ODEf_PAUSED,val); + if (!ode) + return OFF; + res = LBEqual(&ode->flags, ODEf_PAUSED, val); if (val) - while (Bt(&ode->flags,ODEf_BUSY)) + while (Bt(&ode->flags, ODEf_BUSY)) Yield; return res; } @@ -66,12 +67,14 @@ public Bool ODEPause(CMathODE *ode,Bool val=ON) public U0 ODEDel(CMathODE *ode) {//Free ODE node, but not masses or springs. I64 i; - if (!ode) return; + if (!ode) + return; ODEPause(ode); Free(ode->state); Free(ode->array_base); - if (ode->slave_tasks) { - for (i=0;islave_tasks) + { + for (i = 0; i < mp_count; i++) Kill(ode->slave_tasks[i]); Free(ode->slave_tasks); } @@ -83,18 +86,18 @@ public I64 ODESize(CMathODE *ode) if (!ode) return 0; else - return MSize2(ode->state)+MSize2(ode->array_base)+MSize2(ode); + return MSize2(ode->state) + MSize2(ode->array_base) + MSize2(ode); } -U0 ODESetMassesPtrs(CMathODE *ode,F64 *state,F64 *DstateDt) +U0 ODESetMassesPtrs(CMathODE *ode, F64 *state, F64 *DstateDt) { - COrder2D3 *ptr1=state(F64 *)+ode->n, - *ptr2=DstateDt(F64 *)+ode->n; - CMass *tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - tmpm->state=ptr1++; - tmpm->DstateDt=ptr2++; - tmpm=tmpm->next; + COrder2D3 *ptr1 = state(F64 *) + ode->n, *ptr2 = DstateDt(F64 *) + ode->n; + CMass *tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + tmpm->state = ptr1++; + tmpm->DstateDt = ptr2++; + tmpm = tmpm->next; } } @@ -104,39 +107,44 @@ U0 ODEState2Internal(CMathODE *ode) F64 *old_array_base; I64 mass_count; - if (ode->flags&ODEF_HAS_MASSES) { - mass_count=0; - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { + if (ode->flags & ODEF_HAS_MASSES) + { + mass_count = 0; + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { mass_count++; - tmpm=tmpm->next; + tmpm = tmpm->next; } - old_array_base=ode->array_base; - ode->n_internal=ode->n+6*mass_count; - ode->array_base=MAlloc(12*ode->n_internal*sizeof(F64),ode->mem_task); + old_array_base = ode->array_base; + ode->n_internal = ode->n + 6 * mass_count; + ode->array_base = MAlloc(12 * ode->n_internal * sizeof(F64), ode->mem_task); Free(old_array_base); ODEResetPtrs(ode); - ODESetMassesPtrs(ode,ode->state_internal,ode->state_internal); - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - MemCopy(tmpm->state,&tmpm->saved_state,sizeof(COrder2D3)); - tmpm=tmpm->next; + ODESetMassesPtrs(ode, ode->state_internal, ode->state_internal); + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + MemCopy(tmpm->state, &tmpm->saved_state, sizeof(COrder2D3)); + tmpm = tmpm->next; } } - MemCopy(ode->state_internal,ode->state,ode->n*sizeof(F64)); + MemCopy(ode->state_internal, ode->state, ode->n * sizeof(F64)); } U0 ODEInternal2State(CMathODE *ode) { CMass *tmpm; - MemCopy(ode->state,ode->state_internal,ode->n*sizeof(F64)); - if (ode->flags&ODEF_HAS_MASSES) { - ODESetMassesPtrs(ode,ode->state_internal,ode->state_internal); - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - MemCopy(&tmpm->saved_state,tmpm->state,sizeof(COrder2D3)); - tmpm=tmpm->next; + MemCopy(ode->state, ode->state_internal, ode->n * sizeof(F64)); + if (ode->flags & ODEF_HAS_MASSES) + { + ODESetMassesPtrs(ode, ode->state_internal, ode->state_internal); + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + MemCopy(&tmpm->saved_state, tmpm->state, sizeof(COrder2D3)); + tmpm = tmpm->next; } } } @@ -147,100 +155,113 @@ public U0 ODERenum(CMathODE *ode) CSpring *tmps; CMass *tmpm; - i=0; - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - tmpm->num=i++; - tmpm=tmpm->next; + i = 0; + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + tmpm->num = i++; + tmpm = tmpm->next; } - i=0; - tmps=ode->next_spring; - while (tmps!=&ode->next_spring) { - tmps->num=i++; - tmps->end1_num=tmps->end1->num; - tmps->end2_num=tmps->end2->num; - tmps=tmps->next; + i = 0; + tmps = ode->next_spring; + while (tmps != &ode->next_spring) + { + tmps->num = i++; + tmps->end1_num = tmps->end1->num; + tmps->end2_num = tmps->end2->num; + tmps = tmps->next; } } -public CMass *MassFind(CMathODE *ode,F64 x,F64 y,F64 z=0) +public CMass *MassFind(CMathODE *ode, F64 x, F64 y, F64 z=0) {//Search for mass nearest to x,y,z. - CMass *tmpm,*best_mass=NULL; - F64 dd,best_dd=F64_MAX; + CMass *tmpm, *best_mass = NULL; + F64 dd, best_dd = F64_MAX; - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - dd=Sqr(tmpm->x-x)+Sqr(tmpm->y-y)+Sqr(tmpm->z-z); - if (ddnext_mass; + while (tmpm != &ode->next_mass) + { + dd = Sqr(tmpm->x - x) + Sqr(tmpm->y - y) + Sqr(tmpm->z - z); + if (dd < best_dd) + { + best_dd = dd; + best_mass = tmpm; } - tmpm=tmpm->next; + tmpm = tmpm->next; } return best_mass; } -public CSpring *SpringFind(CMathODE *ode,F64 x,F64 y,F64 z=0) +public CSpring *SpringFind(CMathODE *ode, F64 x, F64 y, F64 z=0) {//Find spring midpoint nearest x,y,z. - CSpring *tmps,*best_spring=NULL; - F64 dd,best_dd=F64_MAX; + CSpring *tmps, *best_spring = NULL; + F64 dd, best_dd = F64_MAX; - tmps=ode->next_spring; - while (tmps!=&ode->next_spring) { - dd=Sqr((tmps->end1->x+tmps->end2->x)/2-x)+ - Sqr((tmps->end1->y+tmps->end2->y)/2-y)+ - Sqr((tmps->end1->z+tmps->end2->z)/2-z); - if (ddnext_spring; + while (tmps != &ode->next_spring) + { + dd = Sqr((tmps->end1->x + tmps->end2->x) / 2 - x) + + Sqr((tmps->end1->y + tmps->end2->y) / 2 - y) + + Sqr((tmps->end1->z + tmps->end2->z) / 2 - z); + + if (dd < best_dd) + { + best_dd = dd; + best_spring = tmps; } - tmps=tmps->next; + tmps = tmps->next; } return best_spring; } -public U0 MassOrSpringFind( - CMathODE *ode,CMass **res_mass,CSpring **res_spring, - F64 x,F64 y,F64 z=0) +public U0 MassOrSpringFind(CMathODE *ode, CMass **res_mass, CSpring **res_spring, F64 x, F64 y, F64 z=0) {//Find spring or mass nearest x,y,z. - CMass *tmpm,*best_mass=NULL; - CSpring *tmps,*best_spring=NULL; - F64 dd,best_dd=F64_MAX; + CMass *tmpm, *best_mass = NULL; + CSpring *tmps, *best_spring = NULL; + F64 dd, best_dd = F64_MAX; - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - dd=Sqr(tmpm->x-x)+Sqr(tmpm->y-y)+Sqr(tmpm->z-z); - if (ddnext_mass; + while (tmpm != &ode->next_mass) + { + dd = Sqr(tmpm->x - x) + Sqr(tmpm->y - y) + Sqr(tmpm->z - z); + if (dd < best_dd) + { + best_dd = dd; + best_mass = tmpm; } - tmpm=tmpm->next; + tmpm = tmpm->next; } - tmps=ode->next_spring; - while (tmps!=&ode->next_spring) { - dd=Sqr((tmps->end1->x+tmps->end2->x)/2-x)+ - Sqr((tmps->end1->y+tmps->end2->y)/2-y)+ - Sqr((tmps->end1->z+tmps->end2->z)/2-z); - if (ddnext_spring; + while (tmps != &ode->next_spring) + { + dd = Sqr((tmps->end1->x + tmps->end2->x) / 2 - x) + + Sqr((tmps->end1->y + tmps->end2->y) / 2 - y) + + Sqr((tmps->end1->z + tmps->end2->z) / 2 - z); + + if (dd < best_dd) + { + best_dd = dd; + best_spring = tmps; + best_mass = NULL; } - tmps=tmps->next; + tmps = tmps->next; } - if (res_mass) *res_mass =best_mass; - if (res_spring) *res_spring=best_spring; + if (res_mass) + *res_mass = best_mass; + if (res_spring) + *res_spring = best_spring; } -public CMass *MassFindNum(CMathODE *ode,I64 num) +public CMass *MassFindNum(CMathODE *ode, I64 num) {//Return mass number N. - CMass *tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - if (tmpm->num==num) + CMass *tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + if (tmpm->num == num) return tmpm; - tmpm=tmpm->next; + tmpm = tmpm->next; } return NULL; } @@ -249,68 +270,75 @@ public U0 ODEResetInactive(CMathODE *ode) {//Set all masses and springs to ACTIVE for new trial. CMass *tmpm; CSpring *tmps; - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - tmpm->flags&=~MSF_INACTIVE; - tmpm=tmpm->next; + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + tmpm->flags &= ~MSF_INACTIVE; + tmpm = tmpm->next; } - tmps=ode->next_spring; - while (tmps!=&ode->next_spring) { - tmps->flags&=~SSF_INACTIVE; - tmps=tmps->next; + tmps = ode->next_spring; + while (tmps != &ode->next_spring) + { + tmps->flags &= ~SSF_INACTIVE; + tmps = tmps->next; } } U0 ODECalcSprings(CMathODE *ode) { - CSpring *tmps=ode->next_spring; - CMass *e1,*e2; + CSpring *tmps = ode->next_spring; + CMass *e1, *e2; F64 d; CD3 p; - while (tmps!=&ode->next_spring) { - if (tmps->flags&SSF_INACTIVE) { - tmps->displacement=0; - tmps->f=0; - } else { - e1=tmps->end1; - e2=tmps->end2; - d=D3Norm(D3Sub(&p,&e2->state->x,&e1->state->x)); - tmps->displacement=d-tmps->rest_len; - tmps->f=tmps->displacement*tmps->const; - if (tmps->f>0 && tmps->flags&SSF_NO_TENSION) - tmps->f=0; - else if (tmps->f<0 && tmps->flags&SSF_NO_COMPRESSION) - tmps->f=0; - if (d>0) { - D3MulEqu(&p,tmps->f/d); - D3AddEqu(&e1->DstateDt->DxDt,&p); - D3SubEqu(&e2->DstateDt->DxDt,&p); + while (tmps != &ode->next_spring) + { + if (tmps->flags & SSF_INACTIVE) + { + tmps->displacement = 0; + tmps->f = 0; + } + else + { + e1 = tmps->end1; + e2 = tmps->end2; + d = D3Norm(D3Sub(&p, &e2->state->x, &e1->state->x)); + tmps->displacement = d - tmps->rest_len; + tmps->f = tmps->displacement * tmps->const; + if (tmps->f > 0 && tmps->flags & SSF_NO_TENSION) + tmps->f = 0; + else if (tmps->f < 0 && tmps->flags & SSF_NO_COMPRESSION) + tmps->f = 0; + if (d > 0) + { + D3MulEqu(&p, tmps->f / d); + D3AddEqu(&e1->DstateDt->DxDt, &p); + D3SubEqu(&e2->DstateDt->DxDt, &p); } } - tmps=tmps->next; + tmps = tmps->next; } } U0 ODECalcDrag(CMathODE *ode) { CMass *tmpm; - F64 d,dd; + F64 d, dd; CD3 p; - if (ode->drag_v || ode->drag_v2 || ode->drag_v3) { - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - if (!(tmpm->flags & MSF_INACTIVE) && - tmpm->drag_profile_factor && - (dd=D3NormSqr(&tmpm->state->DxDt))) { - d=ode->drag_v; + if (ode->drag_v || ode->drag_v2 || ode->drag_v3) + { + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + if (!(tmpm->flags & MSF_INACTIVE) && tmpm->drag_profile_factor && (dd = D3NormSqr(&tmpm->state->DxDt))) + { + d = ode->drag_v; if (ode->drag_v2) - d+=ode->drag_v2*Sqrt(dd); + d += ode->drag_v2 * Sqrt(dd); if (ode->drag_v3) - d+=dd*ode->drag_v3; - D3SubEqu(&tmpm->DstateDt->DxDt, - D3Mul(&p,d*tmpm->drag_profile_factor,&tmpm->state->DxDt)); + d += dd * ode->drag_v3; + D3SubEqu(&tmpm->DstateDt->DxDt, D3Mul(&p, d * tmpm->drag_profile_factor, &tmpm->state->DxDt)); } - tmpm=tmpm->next; + tmpm = tmpm->next; } } } @@ -319,140 +347,155 @@ U0 ODEApplyAccelerationLimit(CMathODE *ode) { CMass *tmpm; F64 d; - if (ode->acceleration_limit) { - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - if (!(tmpm->flags & MSF_INACTIVE) && - (d=D3Norm(&tmpm->DstateDt->DxDt))>ode->acceleration_limit) - D3MulEqu(&tmpm->DstateDt->DxDt,ode->acceleration_limit/d); - tmpm=tmpm->next; + if (ode->acceleration_limit) + { + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + if (!(tmpm->flags & MSF_INACTIVE) && (d = D3Norm(&tmpm->DstateDt->DxDt)) > ode->acceleration_limit) + D3MulEqu(&tmpm->DstateDt->DxDt, ode->acceleration_limit / d); + tmpm = tmpm->next; } } } U0 ODEMPTask(CMathODE *ode) { - while (TRUE) { - while (!Bt(&ode->mp_not_done_flags,Gs->num)) + while (TRUE) + { + while (!Bt(&ode->mp_not_done_flags, Gs->num)) Yield; if (ode->mp_derive) - (*ode->mp_derive)(ode,ode->mp_t, - Gs->num,ode->mp_state,ode->mp_DstateDt); - LBtr(&ode->mp_not_done_flags,Gs->num); + (*ode->mp_derive)(ode, ode->mp_t, Gs->num, ode->mp_state, ode->mp_DstateDt); + LBtr(&ode->mp_not_done_flags, Gs->num); } } U0 ODEMPWake(CMathODE *ode) { I64 i; - if (!ode->slave_tasks) { - ode->slave_tasks=CAlloc(mp_count*sizeof(CTask *)); - for (i=0;islave_tasks[i]=Spawn(&ODEMPTask,ode,"ODE Slave",i); + if (!ode->slave_tasks) + { + ode->slave_tasks = CAlloc(mp_count * sizeof(CTask *)); + for (i = 0; i < mp_count; i++) + ode->slave_tasks[i] = Spawn(&ODEMPTask, ode, "ODE Slave", i); } - for (i=0;islave_tasks[i],FALSE); - MPInt(I_WAKE,i); + for (i = 0; i < mp_count; i++) + { + Suspend(ode->slave_tasks[i], FALSE); + MPInt(I_WAKE, i); } } U0 ODEMPSleep(CMathODE *ode) { I64 i; - if (ode->slave_tasks) { + if (ode->slave_tasks) + { while (ode->mp_not_done_flags) Yield; - for (i=0;islave_tasks[i]); } } -U0 ODECallMPDerivative(CMathODE *ode,F64 t,F64 *state,F64 *DstateDt) +U0 ODECallMPDerivative(CMathODE *ode, F64 t, F64 *state, F64 *DstateDt) { - ode->mp_t=t; - ode->mp_state=state; - ode->mp_DstateDt=DstateDt; - ode->mp_not_done_flags=1<mp_t = t; + ode->mp_state = state; + ode->mp_DstateDt = DstateDt; + ode->mp_not_done_flags = 1 << mp_count - 1; + do + Yield; while (ode->mp_not_done_flags); } -U0 ODECallDerivative(CMathODE *ode,F64 t,F64 *state,F64 *DstateDt) +U0 ODECallDerivative(CMathODE *ode, F64 t, F64 *state, F64 *DstateDt) { CMass *tmpm; - if (ode->flags&ODEF_HAS_MASSES) { - ODESetMassesPtrs(ode,state,DstateDt); - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - if (!(tmpm->flags&MSF_INACTIVE)) { + if (ode->flags & ODEF_HAS_MASSES) + { + ODESetMassesPtrs(ode, state, DstateDt); + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + if (!(tmpm->flags & MSF_INACTIVE)) + { D3Zero(&tmpm->DstateDt->DxDt); - D3Copy(&tmpm->DstateDt->x,&tmpm->state->DxDt); + D3Copy(&tmpm->DstateDt->x, &tmpm->state->DxDt); } - tmpm=tmpm->next; + tmpm = tmpm->next; } ODECalcSprings(ode); ODECalcDrag(ode); if (ode->mp_derive) - ODECallMPDerivative(ode,t,state,DstateDt); + ODECallMPDerivative(ode, t, state, DstateDt); if (ode->derive) - (*ode->derive)(ode,t,state,DstateDt); - tmpm=ode->next_mass; - while (tmpm!=&ode->next_mass) { - if (!(tmpm->flags&MSF_INACTIVE)) { - if (tmpm->flags&MSF_FIXED) { + (*ode->derive)(ode, t, state, DstateDt); + tmpm = ode->next_mass; + while (tmpm != &ode->next_mass) + { + if (!(tmpm->flags & MSF_INACTIVE)) + { + if (tmpm->flags & MSF_FIXED) + { D3Zero(&tmpm->DstateDt->DxDt); D3Zero(&tmpm->DstateDt->x); - } else if (tmpm->mass) - D3DivEqu(&tmpm->DstateDt->DxDt,tmpm->mass); + } + else if (tmpm->mass) + D3DivEqu(&tmpm->DstateDt->DxDt, tmpm->mass); } - tmpm=tmpm->next; + tmpm = tmpm->next; } ODEApplyAccelerationLimit(ode); - } else { + } + else + { if (ode->mp_derive) - ODECallMPDerivative(ode,t,state,DstateDt); + ODECallMPDerivative(ode, t, state, DstateDt); if (ode->derive) - (*ode->derive)(ode,t,state,DstateDt); + (*ode->derive)(ode, t, state, DstateDt); } } U0 ODEOneStep(CMathODE *ode) { I64 i; - ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); - for (i=0;in_internal;i++) - ode->state_internal[i]+=ode->h*ode->DstateDt[i]; - ode->t+=ode->h; + ODECallDerivative(ode, ode->t, ode->state_internal, ode->DstateDt); + for (i = 0; i < ode->n_internal; i++) + ode->state_internal[i] += ode->h * ode->DstateDt[i]; + ode->t += ode->h; } U0 ODERK4OneStep(CMathODE *ode) { - I64 i,n=ode->n_internal; - F64 xh,hh,h6,*dym,*dyt,*yt,*DstateDt; + I64 i, n = ode->n_internal; + F64 xh, hh, h6, *dym, *dyt, *yt, *DstateDt; - dym =ode->tmp0; - dyt =ode->tmp1; - yt =ode->tmp2; - DstateDt=ode->tmp3; - hh =0.5*ode->h; - h6 =ode->h / 6.0; - xh =ode->t + hh; + dym = ode->tmp0; + dyt = ode->tmp1; + yt = ode->tmp2; + DstateDt = ode->tmp3; + hh = 0.5 * ode->h; + h6 = ode->h / 6.0; + xh = ode->t + hh; - ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); - for (i=0;istate_internal[i]+hh*DstateDt[i]; - ODECallDerivative(ode,xh,yt,dyt); - for (i=0;istate_internal[i]+hh*dyt[i]; - ODECallDerivative(ode,xh,yt,dym); - for (i=0;istate_internal[i]+ode->h*dym[i]; - dym[i]+=dyt[i]; + ODECallDerivative(ode, ode->t, ode->state_internal, ode->DstateDt); + for (i = 0; i < n; i++) + yt[i] = ode->state_internal[i] + hh * DstateDt[i]; + ODECallDerivative(ode, xh, yt, dyt); + for (i = 0; i < n; i++) + yt[i] = ode->state_internal[i] + hh * dyt[i]; + ODECallDerivative(ode, xh, yt, dym); + for (i = 0; i < n; i++) + { + yt[i] = ode->state_internal[i] + ode->h * dym[i]; + dym[i] += dyt[i]; } - ode->t+=ode->h; - ODECallDerivative(ode,ode->t,yt,dyt); - for (i=0;istate_internal[i]+=h6*(DstateDt[i]+dyt[i]+2.0*dym[i]); + ode->t += ode->h; + ODECallDerivative(ode, ode->t, yt, dyt); + for (i = 0; i < n; i++) + ode->state_internal[i] += h6 * (DstateDt[i] + dyt[i] + 2.0 * dym[i]); } #define ODEa2 0.2 @@ -461,70 +504,64 @@ U0 ODERK4OneStep(CMathODE *ode) #define ODEa5 1.0 #define ODEa6 0.875 #define ODEb21 0.2 -#define ODEb31 (3.0/40.0) -#define ODEb32 (9.0/40.0) +#define ODEb31 (3.0 / 40.0) +#define ODEb32 (9.0 / 40.0) #define ODEb41 0.3 #define ODEb42 (-0.9) #define ODEb43 1.2 -#define ODEb51 (-11.0/54.0) +#define ODEb51 (-11.0 / 54.0) #define ODEb52 2.5 -#define ODEb53 (-70.0/27.0) -#define ODEb54 (35.0/27.0) -#define ODEb61 (1631.0/55296.0) -#define ODEb62 (175.0/512.0) -#define ODEb63 (575.0/13824.0) -#define ODEb64 (44275.0/110592.0) -#define ODEb65 (253.0/4096.0) -#define ODEc1 (37.0/378.0) -#define ODEc3 (250.0/621.0) -#define ODEc4 (125.0/594.0) -#define ODEc6 (512.0/1771.0) -#define ODEdc1 (37.0/378.0-2825.0/27648.0) -#define ODEdc3 (250.0/621.0-18575.0/48384.0) -#define ODEdc4 (125.0/594.0-13525.0/55296.0) -#define ODEdc5 (-277.0/14336.0) -#define ODEdc6 (512.0/1771.0-0.25) +#define ODEb53 (-70.0 / 27.0) +#define ODEb54 (35.0 / 27.0) +#define ODEb61 (1631.0 / 55296.0) +#define ODEb62 (175.0 / 512.0) +#define ODEb63 (575.0 / 13824.0) +#define ODEb64 (44275.0 / 110592.0) +#define ODEb65 (253.0 / 4096.0) +#define ODEc1 (37.0 / 378.0) +#define ODEc3 (250.0 / 621.0) +#define ODEc4 (125.0 / 594.0) +#define ODEc6 (512.0 / 1771.0) +#define ODEdc1 (37.0 / 378.0 - 2825.0 / 27648.0) +#define ODEdc3 (250.0 / 621.0 - 18575.0 / 48384.0) +#define ODEdc4 (125.0 / 594.0 - 13525.0 / 55296.0) +#define ODEdc5 (-277.0 / 14336.0) +#define ODEdc6 (512.0 / 1771.0 - 0.25) U0 ODECashKarp(CMathODE *ode) { - I64 i,n=ode->n_internal; - F64 h=ode->h,*state=ode->state_internal, - *DstateDt=ode->DstateDt,*ak2,*ak3,*ak4,*ak5,*ak6, - *tmpstate,*stateerr,*outstate; + I64 i, n = ode->n_internal; + F64 h = ode->h, *state = ode->state_internal, *DstateDt = ode->DstateDt, *ak2, *ak3, *ak4, *ak5, *ak6, *tmpstate, *stateerr, *outstate; - ak2=ode->tmp0; - ak3=ode->tmp1; - ak4=ode->tmp2; - ak5=ode->tmp3; - ak6=ode->tmp4; - tmpstate=ode->tmp5; - outstate=ode->tmp6; - stateerr=ode->tmp7; + ak2 = ode->tmp0; + ak3 = ode->tmp1; + ak4 = ode->tmp2; + ak5 = ode->tmp3; + ak6 = ode->tmp4; + tmpstate = ode->tmp5; + outstate = ode->tmp6; + stateerr = ode->tmp7; - for (i=0;it+ODEa2*h,tmpstate,ak2); - for (i=0;it+ODEa3*h,tmpstate,ak3); - for (i=0;it+ODEa4*h,tmpstate,ak4); - for (i=0;it+ODEa5*h,tmpstate,ak5); - for (i=0;it+ODEa6*h,tmpstate,ak6); + for (i = 0; i < n; i++) + tmpstate[i] = state[i] + ODEb21 * h * DstateDt[i]; + ODECallDerivative(ode, ode->t + ODEa2 * h, tmpstate, ak2); + for (i = 0; i < n; i++) + tmpstate[i] =state[i] + h * (ODEb31 * DstateDt[i] + ODEb32 * ak2[i]); + ODECallDerivative(ode, ode->t + ODEa3 * h, tmpstate, ak3); + for (i = 0; i < n; i++) + tmpstate[i] = state[i] + h * (ODEb41 * DstateDt[i] + ODEb42 * ak2[i] + ODEb43 * ak3[i]); + ODECallDerivative(ode, ode->t + ODEa4 * h, tmpstate, ak4); + for (i = 0; i < n; i++) + tmpstate[i] = state[i] + h * (ODEb51 * DstateDt[i] + ODEb52 * ak2[i] + ODEb53 * ak3[i] + ODEb54*ak4[i]); + ODECallDerivative(ode, ode->t + ODEa5 * h, tmpstate,ak5); + for (i = 0; i < n; i++) + tmpstate[i] = state[i] + h * (ODEb61 * DstateDt[i]+ ODEb62 * ak2[i] + ODEb63 * ak3[i] + ODEb64 * ak4[i] + ODEb65 * ak5[i]); + ODECallDerivative(ode, ode->t + ODEa6 * h, tmpstate, ak6); - for (i=0;itmp6,*stateerr=ode->tmp7; - while (TRUE) { - ode->h=Clamp(ode->h,ode->h_min,ode->h_max); + F64 errmax, tmp, *tmpstate = ode->tmp6, *stateerr = ode->tmp7; + while (TRUE) + { + ode->h = Clamp(ode->h, ode->h_min, ode->h_max); ODECashKarp(ode); - errmax=0.0; - for (i=0;in_internal;i++) { - tmp=Abs(stateerr[i]/ode->state_scale[i]); - if (tmp>errmax) - errmax=tmp; + errmax = 0.0; + for (i = 0; i < ode->n_internal; i++) + { + tmp = Abs(stateerr[i] / ode->state_scale[i]); + if (tmp > errmax) + errmax = tmp; } - errmax/=ode->tolerance_internal; - if (errmax<=1.0 || ode->h==ode->h_min) break; - tmp=ode->h*SAFETY*errmax`PSHRNK; - if (tmp<0.1*ode->h) - ode->h*=0.1; + errmax /= ode->tolerance_internal; + if (errmax <= 1.0 || ode->h == ode->h_min) + break; + tmp = ode->h * SAFETY * errmax ` PSHRNK; + if (tmp < 0.1 * ode->h) + ode->h *= 0.1; else - ode->h=tmp; + ode->h = tmp; } - ode->t+=ode->h; - if (errmax>ERRCON) - ode->h*=SAFETY*errmax`PGROW; + ode->t += ode->h; + if (errmax > ERRCON) + ode->h *= SAFETY * errmax ` PGROW; else - ode->h*=5.0; - ode->h=Clamp(ode->h,ode->h_min,ode->h_max); - MemCopy(ode->state_internal,tmpstate,sizeof(F64)*ode->n_internal); + ode->h *= 5.0; + ode->h = Clamp(ode->h, ode->h_min, ode->h_max); + MemCopy(ode->state_internal, tmpstate, sizeof(F64) * ode->n_internal); } -F64 ode_alloced_factor=0.75; +F64 ode_alloced_factor = 0.75; U0 ODEsUpdate(CTask *task) {/* This routine is called by the $LK,"window mgr",A="FF:::/Zenith/Gr/GrScreen.CC,ODEsUpdate"$on a continuous @@ -575,85 +615,92 @@ event is taking place to improve accuracy, but in my implementation it has a timeout. */ I64 i; - F64 d,start_time,timeout_time,t_desired,t_initial,interpolation; + F64 d, start_time, timeout_time, t_desired, t_initial, interpolation; CMathODE *ode; - if (task->next_ode==&task->next_ode) - task->last_ode_time=0; - else if (!Bt(&task->win_inhibit,WIf_SELF_ODE)) { -//See $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$() and $LK,"GrUpdateTaskODEs",A="MN:GrUpdateTaskODEs"$(). + if (task->next_ode == &task->next_ode) + task->last_ode_time = 0; + else if (!Bt(&task->win_inhibit, WIf_SELF_ODE)) + {//See $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$() and $LK,"GrUpdateTaskODEs",A="MN:GrUpdateTaskODEs"$(). //We will not pick a time limit based on //how busy the CPU is, what percent of the //last refresh cycle was spent on ODE's //and what the refresh cycle rate was. - start_time=tS; - d=1.0/winmgr.fps; - timeout_time=start_time+ - (task->last_ode_time/d+0.1)/(winmgr.last_ode_time/d+0.1)* - ode_alloced_factor*d; - ode=task->next_ode; - while (ode!=&task->next_ode) { - t_initial=ode->t; - d=tS; - if (!(ode->flags&ODEF_STARTED)) { - ode->base_t=d; - ode->flags|=ODEF_STARTED; + start_time = tS; + d = 1.0 / winmgr.fps; + timeout_time = start_time + (task->last_ode_time / d + 0.1) / (winmgr.last_ode_time / d + 0.1) * ode_alloced_factor * d; + ode = task->next_ode; + while (ode != &task->next_ode) + { + t_initial = ode->t; + d = tS; + if (!(ode->flags & ODEF_STARTED)) + { + ode->base_t = d; + ode->flags |= ODEF_STARTED; } - d-=ode->base_t+t_initial; - t_desired=ode->t_scale*d+t_initial; - if (ode->flags&ODEF_PAUSED) - ode->base_t+=t_desired-ode->t; //Slip - else { - ode->flags|=ODEF_BUSY; - if (ode->flags&ODEF_PAUSED) - ode->base_t+=t_desired-ode->t; //Slip - else { - if (ode->derive || ode->mp_derive) { + d -= ode->base_t + t_initial; + t_desired = ode->t_scale * d + t_initial; + if (ode->flags & ODEF_PAUSED) + ode->base_t += t_desired - ode->t; //Slip + else + { + ode->flags |= ODEF_BUSY; + if (ode->flags & ODEF_PAUSED) + ode->base_t += t_desired-ode->t; //Slip + else + { + if (ode->derive || ode->mp_derive) + { if (ode->mp_derive) ODEMPWake(ode); ODEState2Internal(ode); - MemCopy(ode->initial_state,ode->state_internal, - ode->n_internal*sizeof(F64)); - while (ode->th_max=t_desired-ode->t; - ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); - for (i=0;in_internal;i++) - ode->state_scale[i]=Abs(ode->state_internal[i])+ - Abs(ode->DstateDt[i]*ode->h)+ode->tolerance_internal; + MemCopy(ode->initial_state, ode->state_internal, ode->n_internal * sizeof(F64)); + while (ode->t < t_desired) + { + ode->h_max = t_desired - ode->t; + ODECallDerivative(ode, ode->t, ode->state_internal, ode->DstateDt); + for (i = 0; i < ode->n_internal; i++) + ode->state_scale[i] = Abs(ode->state_internal[i]) + + Abs(ode->DstateDt[i] * ode->h) + + ode->tolerance_internal; ODERK5OneStep(ode); - if (tS>timeout_time) { - ode->base_t+=t_desired-ode->t; //Slip + if (tS > timeout_time) + { + ode->base_t += t_desired - ode->t; //Slip goto ode_done; } } //Interpolate if end time was not exact. - if (ode->t!=t_desired) { - if (interpolation=ode->t-t_initial) { - interpolation=(t_desired-t_initial)/interpolation; - if (interpolation!=1.0) - for (i=0;in_internal;i++) - ode->state_internal[i]=(ode->state_internal[i]- - ode->initial_state[i])*interpolation+ - ode->initial_state[i]; + if (ode->t != t_desired) + { + if (interpolation = ode->t - t_initial) + { + interpolation = (t_desired - t_initial) / interpolation; + if (interpolation != 1.0) + for (i = 0; i < ode->n_internal; i++) + ode->state_internal[i] = (ode->state_internal[i] - + ode->initial_state[i]) * interpolation + + ode->initial_state[i]; } - ode->t=t_desired; + ode->t = t_desired; } ode_done: ODEInternal2State(ode); //Convenience call to set vals - ODECallDerivative(ode,ode->t,ode->state_internal,ode->DstateDt); + ODECallDerivative(ode, ode->t, ode->state_internal, ode->DstateDt); if (ode->mp_derive) ODEMPSleep(ode); } } - ode->flags&=~ODEF_BUSY; + ode->flags &= ~ODEF_BUSY; } - ode->base_t+=(1.0-ode->t_scale)*d; - ode=ode->next; + ode->base_t += (1.0 - ode->t_scale) * d; + ode = ode->next; } //Now, we will dynamically adjust tolerances. @@ -667,22 +714,24 @@ ode_done: //This algorithm is probably not stable or very good, but it's something. //Target is 75% of alloced time. - d=(tS-start_time)/(timeout_time-start_time)-0.75; + d = (tS - start_time) / (timeout_time - start_time) - 0.75; - ode=task->next_ode; - while (ode!=&task->next_ode) { - if (!(ode->flags&ODEF_PAUSED) && ode->derive) { - if (ode->min_tolerance!=ode->max_tolerance) { - if (d>0) - ode->tolerance_internal*=10.0`d; + ode = task->next_ode; + while (ode != &task->next_ode) + { + if (!(ode->flags & ODEF_PAUSED) && ode->derive) + { + if (ode->min_tolerance != ode->max_tolerance) + { + if (d > 0) + ode->tolerance_internal *= 10.0 ` d; else - ode->tolerance_internal*=2.0`d; + ode->tolerance_internal *= 2.0 ` d; } - ode->tolerance_internal=Clamp(ode->tolerance_internal, - ode->min_tolerance,ode->max_tolerance); + ode->tolerance_internal = Clamp(ode->tolerance_internal, ode->min_tolerance, ode->max_tolerance); } - ode=ode->next; + ode = ode->next; } - winmgr.ode_time+=task->last_ode_time=tS-start_time; + winmgr.ode_time += task->last_ode_time = tS - start_time; } } diff --git a/src/Zenith/ZMouse.CC b/src/Zenith/ZMouse.CC index d9f5c6977853c2c41c24718c1fede7b9e2b81362..a31ad4bea8b41b8f591566467fd434099924a40d 100755 GIT binary patch delta 199 zcmdnTbDw8|JF|kV!bFc$eg#i66NL&LFjc9eFmY$Fxq_OlLY;<-vs-*fkfUF)n}3k6 zV~D4}pF)iSNH93k*Vi>9C{oj!i!&uz*Dg6fC%*`2+GJZsWiF6WKw}Ja6eg!Jsv>hI pGHQbCoV=UShy!NnvKeofR6%BJ7Gl<61^_7BH1Plc delta 168 zcmcc5vyW$jJEQGHuT&mSGZTdh9S~WmGjU(AxSDO9hKsXXd`OU^U$C2hkgsEir@vp# zWF1CHM%&3AjLK{kI+Z#GI+IHoRbk8}jG92X3yel=5Yr}eF&(tPVGzjd;7DIz*N~t{ fO=~XB;DVyel2l`jlw=*K!Q9NMjJBJNnRS=}_`5GA