diff --git a/0000Boot/0000Kernel.BIN.C b/0000Boot/0000Kernel.BIN.C index d9563ce..899ff9d 100644 Binary files a/0000Boot/0000Kernel.BIN.C and b/0000Boot/0000Kernel.BIN.C differ diff --git a/Adam.CPP b/Adam.CPP index 6ce9ca2..8c09d6f 100644 --- a/Adam.CPP +++ b/Adam.CPP @@ -23,7 +23,7 @@ HashTablePurge(adam_task->hash_table); //Use Dbg("Type 'G;'"); to debug before window mgr is running. -public F64 os_version=3.03;//Operating system version. +public F64 os_version=3.07;//Operating system version. #include "AExts.HPP" #include "AMath" @@ -56,7 +56,7 @@ Cd("::/Adam/Ctrls");; Cd("::/Adam");; #include "AutoFile" -#include "Acct" +#include "ARegistry" Cd("::/Adam/AutoComplete");; #include "AutoComplete" @@ -75,16 +75,17 @@ DocTermNew; WinVert(2,10); sys_winmgr_task=Spawn(&WinMgrTask,NULL,"Window Mgr"); -Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL-WIF_SELF_CTRLS; +Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER + -WIF_SELF_GRAB_SCROLL-WIF_SELF_CTRLS; LBts(&Fs->display_flags,DISPLAYf_CHILDREN_NOT_ON_TOP); LBts(&Fs->display_flags,DISPLAYf_SHOW); -RegistryInit; +RegInit; LBts(&sys_run_level,RLf_REGISTRY); Cd("::/Adam");; #include "WallPaper" -if (IsDrvWritable) +if (DrvIsWritable) MkDir("/Temp"); //Good to have a Temp #exe {OptOff(OPTf_WARN_PAREN);}; diff --git a/Adam/ADbg.CPP b/Adam/ADbg.CPP index 3d0b633..31f20fa 100644 --- a/Adam/ADbg.CPP +++ b/Adam/ADbg.CPP @@ -1,5 +1,6 @@ #help_index "Debugging/Dump" -Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth,Bool dynamic,I64 types=HTT_CLASS,I64 offset=0) +Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass, + I64 depth,I64 max_depth,Bool dynamic,I64 types=HTT_CLASS,I64 offset=0) {//See $LK,"::/Demo/LastClass.CPP"$. I64 i,j,stars,*ptr; CMemberLst *ml; @@ -15,7 +16,8 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth DocPrint(doc,"Bad Ptr:%016X\n",_d); return FALSE; } - if (tempc->base_class && !ClassRep2(doc,_d,tempc->base_class->str,depth,max_depth,dynamic,types,offset)) + if (tempc->base_class && !ClassRep2(doc,_d,tempc->base_class->str, + depth,max_depth,dynamic,types,offset)) return FALSE; unlock=DocLock(doc); DocPrint(doc,"Class:\"%s\"\n",class_name); @@ -149,7 +151,8 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,I64 depth,I64 max_depth return TRUE; } -public U0 ClassRep(U8 *_d,U8 *class_name=lastclass,I64 max_depth=2,Bool fun=FALSE,I64 offset=0) +public U0 ClassRep(U8 *_d,U8 *class_name=lastclass, + I64 max_depth=2,Bool fun=FALSE,I64 offset=0) {//Displays members of a record by using the compiler's info. CDoc *doc; Bool old_preempt; @@ -157,7 +160,7 @@ public U0 ClassRep(U8 *_d,U8 *class_name=lastclass,I64 max_depth=2,Bool fun=FALS doc=DocNew; } else { DocMax; - old_preempt=Preempt(OFF); + old_preempt=Preempt; doc=DocPut; } if (fun) @@ -173,7 +176,8 @@ public U0 ClassRep(U8 *_d,U8 *class_name=lastclass,I64 max_depth=2,Bool fun=FALS Preempt(old_preempt); } -public U0 ClassRepD(U8 *_d,U8 *class_name=lastclass,I64 max_depth=2,Bool fun=FALSE,I64 offset=0) +public U0 ClassRepD(U8 *_d,U8 *class_name=lastclass, + I64 max_depth=2,Bool fun=FALSE,I64 offset=0) {//Dynamic ClassRep. Uses hex_ed widgit for live changes. CDoc *doc; Bool old_preempt; @@ -181,7 +185,7 @@ public U0 ClassRepD(U8 *_d,U8 *class_name=lastclass,I64 max_depth=2,Bool fun=FAL doc=DocNew; } else { DocMax; - old_preempt=Preempt(OFF); + old_preempt=Preempt; doc=DocPut; } if (fun) @@ -220,7 +224,7 @@ public U0 FunRep(U8 *st,U8 *rbp=NULL,I64 max_depth=2,CTask *task=NULL) if (tempf) { if (rbp) { if (task) { - //tempf->size is negative. It's the bottom +//tempf->size is negative. It's the bottom //of the fun local var space relative to RBP . size=tempf->arg_cnt*8-tempf->size+16; @@ -255,7 +259,8 @@ public U0 Uf(U8 *st) if (tempf->type&HTT_FUN) FunRep(st); if (dbg_info=tempf->dbg_info) { - i=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]-dbg_info->body[0]; + i=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line] + -dbg_info->body[0]; Un(dbg_info->body[0],i); "Code Size:%04X\n",i; } else diff --git a/Adam/ADefine.CPP b/Adam/ADefine.CPP index f034821..0f9faf8 100644 --- a/Adam/ADefine.CPP +++ b/Adam/ADefine.CPP @@ -4,48 +4,36 @@ U0 LoadDocDefines() { CBinFile *bfh=sys_boot_base-sizeof(CBinFile); - DefinePrint( - "DD_OS_NAME_VERSION","TempleOS V%0.2f",os_version); - DefinePrint( - "DD_TEMPLEOS_AGE","%0.1f",(Now-Str2Date("8/1/2003"))/ToF64(1<<32)/CDATE_YEAR_DAYS); + DefinePrint("DD_OS_NAME_VERSION","TempleOS V%0.2f",os_version); + DefinePrint("DD_TEMPLEOS_AGE","%0.1f", + (Now-Str2Date("8/1/2003"))/ToF64(1<<32)/CDATE_YEAR_DAYS); //This is cut and replaced when I generate a distro. //See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TOSDistro.CPP,DD_TEMPLEOS_LOC"$. $TR-C,"LineRep"$ -$ID,4$DefinePrint("DD_TEMPLEOS_LOC","120,789"); -DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","79,959"); + $ID,4$DefinePrint("DD_TEMPLEOS_LOC","122,918"); +DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","80,950"); $ID,-4$ - DefinePrint( - "DD_KERNEL","%08X",bfh); + DefinePrint("DD_KERNEL","%08X",bfh); bfh(I64)+=bfh->file_size-1; - DefinePrint( - "DD_KERNEL_END","%08X",bfh); - DefinePrint( - "DD_PROTECTED_LOW","%08X",MEM_PROTECTED_LOW_LIMIT); + DefinePrint("DD_KERNEL_END","%08X",bfh); + DefinePrint("DD_PROTECTED_LOW","%08X",MEM_PROTECTED_LOW_LIMIT); //$LK,"DD_BOOT_HIGH_LOC_CD",A="FF:::/Adam/Boot/BootCD.CPP,DD_BOOT_HIGH_LOC_CD"$ - DefinePrint( - "DD_MP_VECT","%08X",MP_VECT_ADDR); - DefinePrint( - "DD_MP_VECT_END","%08X",MP_VECT_ADDR+AP_16BIT_INIT_END-AP_16BIT_INIT-1); + DefinePrint("DD_MP_VECT","%08X",MP_VECT_ADDR); + DefinePrint("DD_MP_VECT_END","%08X", + MP_VECT_ADDR+AP_16BIT_INIT_END-AP_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_SYS_HEAP_BASE","%08X",sys_heap_base); - DefinePrint( - "DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); - DefinePrint( - "DD_MEM_MIN_MEG","%d Meg",MEM_MIN_MEG); - DefinePrint( - "DD_MEM_MAPPED_SPACE_GIG","%d Gig",MEM_MAPPED_SPACE/0x40000000); - DefinePrint( - "DD_MEM_MAPPED_SPACE_END","%010X",MEM_MAPPED_SPACE-1); - DefinePrint( - "DD_JIFFY_HZ","%d Hz",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_SYS_HEAP_BASE","%08X",sys_heap_base); + DefinePrint("DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); + DefinePrint("DD_MEM_MIN_MEG","%d Meg",MEM_MIN_MEG); + DefinePrint("DD_MEM_MAPPED_SPACE_GIG","%d Gig",MEM_MAPPED_SPACE/0x40000000); + DefinePrint("DD_MEM_MAPPED_SPACE_END","%010X",MEM_MAPPED_SPACE-1); + DefinePrint("DD_JIFFY_HZ","%d Hz",JIFFY_FREQ); } LoadDocDefines; diff --git a/Adam/AExts.HPP b/Adam/AExts.HPP index 5740479..9c482cf 100644 --- a/Adam/AExts.HPP +++ b/Adam/AExts.HPP @@ -4,17 +4,15 @@ extern U0 ACDFillin(I64 n); extern U0 ACFillIn(I64 n); extern U0 ACFindMisspelled(CDoc *doc); extern U0 ACMan(I64 n,CTask *parent=NULL); -extern U0 AcctOneTimePopUp(I64 flag_num,U8 *msg); extern I64 AdamFile(U8 *filename,Bool warn_ext=TRUE); extern Bool AutoComplete(Bool val=OFF); extern I64 BMPWrite(U8 *filename,CDC *dc,I64 bits=4); -extern I64 CDFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask,U8 *fu_flags=NULL, - U8 *_stage2_filename=NULL); extern U0 ClipboardDel(); extern CCtrl *CtrlFindUnique(CTask *haystack_task,I64 needle_type); extern Bool CtrlInside(CCtrl *c,I64 x,I64 y); extern U8 *DC2Sprite(CDC *tempb); -extern U0 DocBMP(CDoc *doc=NULL,U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint_palette=FALSE); +extern U0 DocBMP(CDoc *doc=NULL,U8 *filename, + Bool dither_probability=FALSE,Bool use_ms_paint_palette=FALSE); extern U0 DocBinDel(CDoc *doc,CDocBin *b); extern U0 DocBinsValidate(CDoc *doc); extern U0 DocBottom(CDoc *doc=NULL); @@ -27,7 +25,8 @@ 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 Bool DocFormDo(U8 *_d,U8 *class_name=lastclass,I64 dof_flags=0,U8 *header=NULL,U8 *footer=NULL); +extern Bool DocForm(U8 *_d,U8 *class_name=lastclass, + I64 dof_flags=0,U8 *header=NULL,U8 *footer=NULL); extern U0 DocHelpIndex(CDoc *doc,U8 *index); extern U0 DocInsDoc(CDoc *doc,CDoc *doc2); extern U0 DocInsEntry(CDoc *doc,CDocEntry *doc_e); @@ -51,9 +50,11 @@ extern I64 EdCurU8(CDoc *doc); extern U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64); extern U0 EdCursorRight(CDoc *doc,I64 sc=MIN_I64); extern U8 *EdSprite(I64 bin_num); +extern I64 FindWiz(); extern I64 GetI64(U8 *msg,I64 dft,I64 lo=MIN_I64,I64 hi=MAX_I64); extern U0 GrPlot0(CDC *dc,I64 x,I64 y); -extern I64 GrepWiz(); +extern I64 ISOFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask, + U8 *fu_flags=NULL,U8 *_stage2_filename=NULL); extern CMenuEntry *MenuEntryFind(CMenu *m,U8 *full_name); extern CMenu *MenuFilePush(U8 *filename); extern U0 MenuPop(); @@ -61,18 +62,22 @@ extern CMenu *MenuPush(U8 *st); extern CTask *Noise(I64 mS,I64 min_freq,I64 max_freq); extern Bool Plain(U8 *filename,I64 edf_dof_flags=0); extern Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL); -extern I64 PopUpColor(U8 *header=NULL,Bool allow_transpant=TRUE,Bool allow_dft=TRUE); +extern I64 PopUpColor(U8 *header=NULL, + Bool allow_transpant=TRUE,Bool allow_dft=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_MIN_SIZE, - U8 *header=NULL,U8 *footer=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_MIN_SIZE,U8 *header=NULL,U8 *footer=NULL); 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 I64 PopUpRangeI64( + I64 lo,I64 hi,I64 step=1,U8 *header=NULL,U8 *footer=NULL); extern Bool PopUpTransform(I64 *r); +extern U0 RegOneTimePopUp(I64 flag_num,U8 *msg); extern U0 SettingsPop(CTask *task=NULL,I64 flags=0); extern CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0); extern U0 TemplateCtrlSlider(CDoc *doc); @@ -80,7 +85,8 @@ extern Bool View(); extern U0 ViewAnglesDel(CTask *task=NULL); extern CCtrl *ViewAnglesNew(CTask *task=NULL); extern Bool WinBorder(Bool val,CTask *task=NULL); -extern CDoc *WinCursorPosSet(CTask *task,I64 ip_text_x,I64 ip_text_y,Bool set_cursor=TRUE); +extern CDoc *WinCursorPosSet( + CTask *task,I64 ip_text_x,I64 ip_text_y,Bool set_cursor=TRUE); extern Bool WinHorz(I64 left,I64 right,CTask *task=NULL); extern U0 WinMax(CTask *task=NULL); extern U0 WinMgrSync(I64 cnt=1,Bool force=FALSE); diff --git a/Adam/AHash.CPP b/Adam/AHash.CPP index 9cca377..13f0bf2 100644 --- a/Adam/AHash.CPP +++ b/Adam/AHash.CPP @@ -1,4 +1,4 @@ -#help_index "Info;Hash;Cmd Line (Typically)" +#help_index "Info;Hash/System;Cmd Line (Typically)" class CWho { CHashGeneric *h; @@ -80,11 +80,17 @@ U8 *HelpComment(CTask *task,CHash *temph,U8 *_src_link) doc=DocPut(task); doc_e=doc->cur_entry; - if (temph->type&HTT_FUN && !Bt(&temph(CHashFun *)->flags,Ff__EXTERN) && - !Bt(&temph(CHashFun *)->flags,Ff_INTERNAL)) - while (doc_e!=doc && - (!(doc_e->de_flags&DOCEF_TAG)||!StrOcc(doc_e->tag,'{'))) - doc_e=doc_e->next; + if (temph->type&HTT_FUN) { + if (Bt(&temph(CHashFun *)->flags,Ff__EXTERN) || + Bt(&temph(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; + } if (doc_e!=doc) { if (doc_e->de_flags&DOCEF_TAG) { ptr=doc_e->tag; @@ -141,7 +147,7 @@ I64 HashEntriesCompare3(CWho *h1,CWho *h2) } public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, - U8 *outname=NULL,U8 mapfile_drv=0,U8 *index=NULL,CDoc *_doc=NULL) +U8 *index=NULL,CDoc *doc=NULL) {//Dump hash symbol table. // "+p" for only public symbols // "+m" to order by number (normally alphabetical) @@ -150,12 +156,9 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, CHashSrcSym *temph; CHashGeneric *ptr; CWho *lst; - I64 cnt,i,j,k,size,f=0,dbg_bin_num; - U8 buf[512],*st,*src_link,*last_index=StrNew(""),*cur_index,*comment; - CDoc *doc; - Bool recurse,publics,map,old_preempt=Preempt(OFF); - CDocBin *tempb; - CDbgInfo *dbg_info; + I64 cnt,i,j,k,f=0; + U8 buf[512],*st,*last_index=StrNew(""),*cur_index,*comment; + Bool recurse,publics,map,old_preempt=Preempt; CTask *task; ScanFlags(&f,Define("ST_FILE_UTIL_FLAGS"),"+r"); @@ -168,14 +171,6 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, if (!h) h=Fs->hash_table; - if (_doc) - doc=_doc; - else if (outname) { - doc=DocNew(outname); - doc->flags|=DOCF_NO_CURSOR; - } else - doc=NULL; - if (index) { task=User; TaskWait(task); @@ -247,7 +242,6 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, for (i=0;itype&HTG_SRC_SYM && ptr(CHashSrcSym *)->src_link) { - src_link=StrNew(ptr(CHashSrcSym *)->src_link); - if (mapfile_drv && StrLen(src_link)>4 && buf[1]==':' && src_link[4]==':') - src_link[3]=mapfile_drv; - dbg_info=NULL; - if (outname && doc && ptr->type & HTT_FUN) { - if (dbg_info=ptr(CHashFun *)->dbg_info) { - size=offset(CDbgInfo.body)+sizeof(U32)*(dbg_info->max_line+2-dbg_info->min_line); - if (size>MSize(dbg_info)) { - "Corrupt Map Entry\n"; - dbg_info=NULL; - } else { - if (dbg_info->min_line<=dbg_info->max_line) { - tempb=CAlloc(sizeof(CDocBin)); - tempb->size=size; - tempb->data=MAlloc(size); - MemCpy(tempb->data,dbg_info,size); - dbg_bin_num=tempb->num=doc->cur_bin_num++; - tempb->use_cnt=1; - QueIns(tempb,doc->bin_root.last); - } else - dbg_info=NULL; - } - } - } - if (dbg_info) - DocPrint(doc,"$$LK,\"%-20s\",A=\"%s\",BI=%d$$",ptr->str,src_link,dbg_bin_num); - else { - DocPrint(doc,"$$LK,\"%-20s\",A=\"%s\"$$",ptr->str,src_link); - if (index) - comment=HelpComment(task,ptr,src_link); - } - Free(src_link); + DocPrint(doc,"$$LK,\"%-20s\",A=\"%s\"$$", + ptr->str,ptr(CHashSrcSym *)->src_link); + if (index) + comment=HelpComment(task,ptr,ptr(CHashSrcSym *)->src_link); } else DocPrint(doc,"%-20s",ptr->str); @@ -309,12 +275,9 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, else StrPrint(buf,"%-10tQ %02X",st,j); Free(st); - } else if (ptr->type & HTT_GLBL_VAR) { - if (outname) - StrPrint(buf,"%010X ",ptr(CHashGlblVar *)->data_addr_ip); - else - StrPrint(buf,"%010X ",ptr(CHashGlblVar *)->data_addr); - } else + } else if (ptr->type & HTT_GLBL_VAR) + StrPrint(buf,"%010X ",ptr(CHashGlblVar *)->data_addr); + else StrPrint(buf,"%010X ",HashVal(ptr)); j=HashEntrySize(ptr); if (j==-1) @@ -354,21 +317,17 @@ public U0 Who(U8 *fu_flags=NULL,CHashTable *h=NULL, wh_done: Preempt(old_preempt); if (doc) { - DocBinsValidate(doc); - if (!_doc) { - DocWrite(doc); - DocDel(doc); - } else { - if (doc->root.next==doc) - DocPrint(doc,"No Match"); - else - DocRecalc(doc); - } + if (doc->root.next==doc) + DocPrint(doc,"No Match"); + else + DocRecalc(doc); } Free(last_index); Kill(task); } +#help_index "Info;Hash;Cmd Line (Typically)" + #define HDR_MAX 16 public I64 HashDepthRep(CHashTable *table=NULL) {//Hash table linked-list chain depth report. @@ -393,16 +352,16 @@ public I64 HashDepthRep(CHashTable *table=NULL) if (a[i]) "%02d:%d\n",i,a[i]; "Size:%d Count:%d Longest:%d\n", - table->mask+1,cnt,longest; + table->mask+1,cnt,longest; return longest; } -#help_index "Help System;Training" +#help_index "Help System" #help_file "::/Doc/HelpSystem" public U0 DocHelpIndex(CDoc *doc,U8 *index) {//Put to doc report for given help index. - Who("+p",,,,index,doc); + Who("+p",,index,doc); } public U0 PopUpHelpIndex(U8 *index,CTask *parent=NULL) @@ -413,7 +372,7 @@ public U0 PopUpHelpIndex(U8 *index,CTask *parent=NULL) Free(buf); } -#help_index "Hash" +#help_index "Hash/System" public U0 MapFileLoad(U8 *filename) {//Load map file so we have src line info. U8 *st,*ptr,*name=DftExt(filename,"MAP.Z"), diff --git a/Adam/AMath.CPP b/Adam/AMath.CPP index 147d3e8..87c6e68 100644 --- a/Adam/AMath.CPP +++ b/Adam/AMath.CPP @@ -1,7 +1,7 @@ #help_index "Math" public U0 R2P(F64 *_mag=NULL,F64 *_arg=NULL,F64 x,F64 y) {//Rect to polar - //Returns angle in range (-ã,ã] +//Returns angle in range (-ã,ã] if (_arg) *_arg=Arg(x,y); if (_mag) @@ -64,7 +64,7 @@ public F64 Cosh(F64 x) return 0.5*(Exp(x)+Exp(-x)); } -#help_index "Math/Complex" +#help_index "Math/Complex;Data Types/Complex" public Complex *CAdd(Complex *n1,Complex *n2,Complex *sum) {//n1 + n2 -->sum sum->x=n1->x+n2->x; diff --git a/Adam/AMathODE.CPP b/Adam/AMathODE.CPP index 49c2311..c920489 100644 --- a/Adam/AMathODE.CPP +++ b/Adam/AMathODE.CPP @@ -30,10 +30,10 @@ U0 ODERstPtrs(CMathODE *ode) 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. + //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=MAlloc(sizeof(CMathODE)); @@ -78,7 +78,7 @@ public I64 ODESize(CMathODE *ode) U0 ODESetMassesPtrs(CMathODE *ode,F64 *state,F64 *DstateDt) { COrder2D3 *ptr1=state(F64 *)+ode->n, - *ptr2=DstateDt(F64 *)+ode->n; + *ptr2=DstateDt(F64 *)+ode->n; CMass *tempm=ode->next_mass; while (tempm!=&ode->next_mass) { tempm->state=ptr1++; @@ -178,8 +178,8 @@ public CSpring *SpringFind(CMathODE *ode,F64 x,F64 y,F64 z=0) temps=ode->next_spring; while (temps!=&ode->next_spring) { dd=Sqr((temps->end1->x+temps->end2->x)/2-x)+ - Sqr((temps->end1->y+temps->end2->y)/2-y)+ - Sqr((temps->end1->z+temps->end2->z)/2-z); + Sqr((temps->end1->y+temps->end2->y)/2-y)+ + Sqr((temps->end1->z+temps->end2->z)/2-z); if (ddnext_spring; while (temps!=&ode->next_spring) { dd=Sqr((temps->end1->x+temps->end2->x)/2-x)+ - Sqr((temps->end1->y+temps->end2->y)/2-y)+ - Sqr((temps->end1->z+temps->end2->z)/2-z); + Sqr((temps->end1->y+temps->end2->y)/2-y)+ + Sqr((temps->end1->z+temps->end2->z)/2-z); if (ddnext_mass; while (tempm!=&ode->next_mass) { if (!(tempm->flags & MSF_INACTIVE) && - tempm->drag_profile_factor && - (dd=D3NormSqr(&tempm->state->DxDt))) { + tempm->drag_profile_factor && + (dd=D3NormSqr(&tempm->state->DxDt))) { d=ode->drag_v; if (ode->drag_v2) d+=ode->drag_v2*Sqrt(dd); if (ode->drag_v3) d+=dd*ode->drag_v3; D3SubEqu(&tempm->DstateDt->DxDt, - D3Mul(d*tempm->drag_profile_factor,&tempm->state->DxDt,&p)); + D3Mul(d*tempm->drag_profile_factor,&tempm->state->DxDt,&p)); } tempm=tempm->next; } @@ -311,7 +312,7 @@ U0 ODEApplyAccelerationLimit(CMathODE *ode) tempm=ode->next_mass; while (tempm!=&ode->next_mass) { if (!(tempm->flags & MSF_INACTIVE) && - (d=D3Norm(&tempm->DstateDt->DxDt))>ode->acceleration_limit) + (d=D3Norm(&tempm->DstateDt->DxDt))>ode->acceleration_limit) D3MulEqu(&tempm->DstateDt->DxDt,ode->acceleration_limit/d); tempm=tempm->next; } @@ -422,7 +423,9 @@ U0 ODERK4OneStep(CMathODE *ode) 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,*tempstate,*stateerr,*outstate; + F64 h=ode->h,*state=ode->state_internal, + *DstateDt=ode->DstateDt,*ak2,*ak3,*ak4,*ak5,*ak6, + *tempstate,*stateerr,*outstate; ak2=ode->temp0; ak3=ode->temp1; @@ -443,15 +446,19 @@ U0 ODECashKarp(CMathODE *ode) tempstate[i]=state[i]+h*(ODEb41*DstateDt[i]+ODEb42*ak2[i]+ODEb43*ak3[i]); ODECallDerivative(ode,ode->t+ODEa4*h,tempstate,ak4); for (i=0;it+ODEa5*h,tempstate,ak5); for (i=0;it+ODEa6*h,tempstate,ak6); for (i=0;inext_ode==&task->next_ode) task->last_ode_time=0; else if (!Bt(&task->win_inhibit,WIf_SELF_ODE)) { - //See $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() - //TODO: Being preempted here woulds be bad - if (task!=Fs) - old_suspend=Suspend(task); +//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 @@ -536,7 +539,8 @@ it has a timeout. ode->base_t+=t_desired-ode->t; //Slip else if (ode->derivative) { ODEState2Internal(ode); - MemCpy(ode->initial_state,ode->state_internal,ode->n_internal*sizeof(F64)); + MemCpy(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); @@ -595,13 +599,11 @@ ode_done: else 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; } winmgr.ode_time+=task->last_ode_time=tS-start_time; - //See $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() - if (task!=Fs) - Suspend(task,old_suspend); } } diff --git a/Adam/Acct.CPP b/Adam/ARegistry.CPP similarity index 68% rename from Adam/Acct.CPP rename to Adam/ARegistry.CPP index 854ecb3..2e95579 100644 --- a/Adam/Acct.CPP +++ b/Adam/ARegistry.CPP @@ -1,25 +1,25 @@ -#help_index "Misc/Accts" -#define ACCT_REGISTRY_FILENAME "::/Home/Registry.CPP.Z" +#help_index "Misc/Registry" +#define REGISTRY_FILENAME "::/Home/Registry.CPP.Z" CDoc *sys_registry_doc=NULL; I64 sys_msg_flags[1]={0}; F64 registry_version; -Bool AcctCacheRegistry() +Bool RegCache() { Bool old_silent; if (!sys_registry_doc) { old_silent=Silent; - sys_registry_doc=DocRead(ACCT_REGISTRY_FILENAME); + sys_registry_doc=DocRead(REGISTRY_FILENAME); Silent(old_silent); return FALSE; } else return TRUE; } -public Bool AcctRegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) +public Bool RegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) {//Add code doc tree branch to registry. Bool result,unlock_doc; - AcctCacheRegistry; + RegCache; unlock_doc=DocLock(sys_registry_doc); if (!DocTreeFind(sys_registry_doc,path)) { DocTreeMake(sys_registry_doc,path); @@ -30,7 +30,7 @@ public Bool AcctRegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) else Adam("%s",val); } - if (IsDrvWritable(':')) + if (DrvIsWritable(':')) DocWrite(sys_registry_doc); result=FALSE; } else @@ -40,24 +40,25 @@ public Bool AcctRegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) return result; } -public I64 AcctRegExeBranch(U8 *path) +public I64 RegExeBranch(U8 *path) {//Execute doc tree branch in registry. - AcctCacheRegistry; + RegCache; return DocTreeBranchExe(sys_registry_doc,path); } -public Bool AcctRegWriteBranch(U8 *path,U8 *fmt,...) +public Bool RegWriteBranch(U8 *path,U8 *fmt,...) {//Rewrite doc tree branch in registry. Bool result,unlock_doc; CDocEntry *tree_branch,*start_indent,*end_indent; U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - AcctCacheRegistry; + RegCache; unlock_doc=DocLock(sys_registry_doc); - if (result=DocTreeFind(sys_registry_doc,path,&tree_branch,&start_indent,&end_indent)) + if (result=DocTreeFind(sys_registry_doc,path, + &tree_branch,&start_indent,&end_indent)) DocCut(sys_registry_doc,tree_branch,end_indent); DocTreeMake(sys_registry_doc,path); DocPrint(sys_registry_doc,"%s",buf); - if (IsDrvWritable(':')) + if (DrvIsWritable(':')) DocWrite(sys_registry_doc); if (unlock_doc) DocUnlock(sys_registry_doc); @@ -83,23 +84,23 @@ public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg) return result; } -U0 AcctOneTimePopUp(I64 flag_num,U8 *msg) +U0 RegOneTimePopUp(I64 flag_num,U8 *msg) {//You're not supposed to make system pop-up flags, only me. if (OneTimePopUp(sys_msg_flags,flag_num,msg)) - AcctRegWriteBranch("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", - sys_msg_flags[0]); + RegWriteBranch("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", + sys_msg_flags[0]); } -U0 RegistryInit() +U0 RegInit() { - U8 buf[136]; + U8 buf[STR_LEN]; Bool version_present; - AcctRegSetDftEntry("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE); + RegSetDftEntry("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE); StrPrint(buf,"registry_version=%4.3f;\n",os_version); - version_present=AcctRegSetDftEntry("Adam/SysRegVer",buf,TRUE); - AcctRegExeBranch("Adam"); + version_present=RegSetDftEntry("Adam/SysRegVer",buf,TRUE); + RegExeBranch("Adam"); if (registry_version!=os_version) { - AcctRegWriteBranch("Adam/SysRegVer",buf); - AcctRegExeBranch("Adam"); + RegWriteBranch("Adam/SysRegVer",buf); + RegExeBranch("Adam"); } } diff --git a/Adam/AUtils.CPP b/Adam/AUtils.CPP index fbb75d5..f301c8b 100644 --- a/Adam/AUtils.CPP +++ b/Adam/AUtils.CPP @@ -25,6 +25,7 @@ public I64 TaskMemUsed(CTask *task=NULL,Bool override_validate=FALSE) return 0; } +#help_index "Memory/Task;Debugging/Heap" public Bool HeapRep(CTask *task) {//Report status of task's heap. I64 i,cnt; @@ -86,7 +87,7 @@ public Bool HeapRep(CTask *task) #help_index "Memory/HeapCtrl;Debugging/Heap" public Bool IsInHeapCtrl(U8 *a,CHeapCtrl *hc,Bool lock=TRUE) -{//Check addr if on heap. +{//Check addr if in HeapCtrl. CMemBlk *m; PUSHFD CLI @@ -134,7 +135,7 @@ public Bool HeapCtrlWalk(CHeapCtrl *hc) uum=uum->next; } -#if _CFG_HEAP_DBG + #if _CFG_HEAP_DBG CMemUsed *um,*um1; um1=(&hc->next_um)(U8 *)-offset(CMemUsed.next); um=um1->next; @@ -149,7 +150,7 @@ public Bool HeapCtrlWalk(CHeapCtrl *hc) POPFD return TRUE; -hc_false: + hc_false: LBtr(&hc->locked_flags,HClf_LOCKED); POPFD return FALSE; @@ -157,10 +158,11 @@ hc_false: #help_index "Memory/Task;Debugging/Heap" public Bool IsInHeap(U8 *a,CTask *task=NULL,Bool lock=TRUE) -{//Check addr if on heap. +{//Check addr if in task's heaps. if (!task) task=Fs; if (TaskValidate(task) && (IsInHeapCtrl(a,task->code_heap,lock)|| - task->data_heap!=task->code_heap && IsInHeapCtrl(a,task->data_heap,lock))) + task->data_heap!=task->code_heap && + IsInHeapCtrl(a,task->data_heap,lock))) return TRUE; else return FALSE; @@ -170,7 +172,7 @@ public Bool HeapWalk(CTask *task=NULL) {//Check integrity of task's heaps. if (!task) task=Fs; if (!TaskValidate(task) || !HeapCtrlWalk(task->code_heap) || - task->data_heap!=task->code_heap && !HeapCtrlWalk(task->data_heap)) + task->data_heap!=task->code_heap && !HeapCtrlWalk(task->data_heap)) return FALSE; else return TRUE; @@ -183,14 +185,15 @@ U0 TaskRepTask(CTask *task,I64 indent) U8 *st,*desc=MStrUtil(task->task_title,SUF_SAFE_DOLLAR); st=MStrPrint("$$MA,T=\"%08X\",LM=\"Kill(0x%X);\n\",$$",task,task,task); "%h*c%s $$TX,\"%Q...\",SCX=16$$ Mem:%08X\n",indent,CH_SPACE, - st,desc,TaskMemAlloced(task); + st,desc,TaskMemAlloced(task); "%h*cFlags:%04X:%04X Time:%0.2fm\n",indent+2,CH_SPACE, - task->task_flags,task->display_flags, - task->total_time/60.0/cnts.time_stamp_freq_initial; + task->task_flags,task->display_flags, + task->total_time/60.0/cnts.time_stamp_freq_initial; Free(st); Free(desc); task1=task->next_child_task; - while (task1!=(&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task)) { + while (task1!=(&task->next_child_task)(U8 *) + -offset(CTask.next_sibling_task)) { TaskRepTask(task1,indent+2); task1=task1->next_sibling_task; } diff --git a/Adam/AutoComplete/ACDefs.DAT b/Adam/AutoComplete/ACDefs.DAT index a19d99c..b33e19d 100644 Binary files a/Adam/AutoComplete/ACDefs.DAT and b/Adam/AutoComplete/ACDefs.DAT differ diff --git a/Adam/AutoComplete/ACDict.CPP b/Adam/AutoComplete/ACDict.CPP index be34187..642b981 100644 --- a/Adam/AutoComplete/ACDict.CPP +++ b/Adam/AutoComplete/ACDict.CPP @@ -43,14 +43,15 @@ public U8 *ACDDefGet(U8 *st,I64 def_num=1) CFile *f; CHashGeneric *temph; U8 *result=NULL,*buf,*in_ptr, - *st2=MStrUtil(st,SUF_TO_UPPER); + *st2=MStrUtil(st,SUF_TO_UPPER); temph=HashFind(st2,ac.hash_table,HTT_DICT_WORD); Free(st2); if (temph) { if (f=FOpen(ACD_DEF_FILENAME,"r")) { buf=MAlloc(ACD_BLK_SIZE*2+1); buf[ACD_BLK_SIZE*2]=0; //terminate - FRBlks(f,buf,temph->user_data0*ACD_BLK_SIZE/BLK_SIZE,ACD_BLK_SIZE*2/BLK_SIZE); + FRBlks(f,buf,temph->user_data0*ACD_BLK_SIZE/BLK_SIZE, + ACD_BLK_SIZE*2/BLK_SIZE); FClose(f); in_ptr=buf; while (in_ptruser_data0*ACD_BLK_SIZE/BLK_SIZE,ACD_BLK_SIZE*2/BLK_SIZE); + FRBlks(f,buf,temph->user_data0*ACD_BLK_SIZE/BLK_SIZE, + ACD_BLK_SIZE*2/BLK_SIZE); FClose(f); in_ptr=buf; while (in_ptrcur_entry; - I64 col=doc->cur_data_col,col2,ch; + I64 col=doc->cur_col,col2,ch; do { if (doc_e!=doc && doc_e->de_flags&DOCEF_TAG) { while (colmax_col) { - while (colmax_col && !Bt(chars_bitmap_word,doc_e->tag[col])) + while (colmax_col && !Bt(chars_bmp_word,doc_e->tag[col])) col++; if (colmax_col) { col2=col; - while (col2max_col && Bt(chars_bitmap_word,doc_e->tag[col2])) + while (col2max_col && Bt(chars_bmp_word,doc_e->tag[col2])) col2++; ch=doc_e->tag[col2]; doc_e->tag[col2]=0; if (StrICmp(&doc_e->tag[col],ACDWordPtAt(&doc_e->tag[col])+1)) { doc_e->tag[col2]=ch; doc->cur_entry=doc_e; - doc->cur_data_col=col; + doc->cur_col=col; goto fm_done; } doc_e->tag[col2]=ch; diff --git a/Adam/AutoComplete/ACDictGen.CPP b/Adam/AutoComplete/ACDictGen.CPP index 3436594..06b889e 100644 --- a/Adam/AutoComplete/ACDictGen.CPP +++ b/Adam/AutoComplete/ACDictGen.CPP @@ -4,19 +4,59 @@ which will regenerate processed dictionary files from a raw Project Gutenberg dictionary file. -Supply the raw dictionary filename in -the call at the bottom of this file -and #include this file. - -I ran $LK,"::/Misc/ToDolDoc.CPP"$ on it, first. +$TX,"http://www.templeos.org/files/DICTIONARY.TXT",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$ See $LK,"::/Doc/Credits.TXT"$. */ +U0 ACDPreprocess(U8 *in_name,U8 *out_name) +{/* +--> +$$ --> $$$$ +\'89 --> ‰ +*/ + I64 ch,i; + U8 *src,*dst; + CDoc *doc; + CDocEntry *doc_e; + if (doc=DocRead(in_name,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_DBL_DOLLARS)) { + doc_e=doc->root.next; + while (doc_e!=doc) { + if (doc_e->type_u8==DOCT_TEXT) { + src=dst=doc_e->tag; + while (ch=*src++) { + if (ch=='\\' && *src=='\'') { + src++; + i=0; + ch=ToUpper(*src++); + if ('0'<=ch<='9') + i+=ch-'0'; + else if ('A'<=ch<='F') + i+=ch-'A'+10; + i<<=4; + ch=ToUpper(*src++); + if ('0'<=ch<='9') + i+=ch-'0'; + else if ('A'<=ch<='F') + i+=ch-'A'+10; + *dst++=i; + } else + *dst++=ch; + } + *dst=0; + } + doc_e=doc_e->next; + } + StrCpy(doc->filename.name,out_name); + DocWrite(doc); + DocDel(doc); + } +} + I64 ACDNextCmd(U8 **_ptr) { - U8 ch,*ptr=*_ptr,*ptr2; - I64 result=-1; + U8 *ptr=*_ptr,*ptr2; + I64 ch,result=-1; do { do { if (!(ch=*ptr++)) goto ncmd_done; @@ -28,21 +68,22 @@ I64 ACDNextCmd(U8 **_ptr) } while (ch!='>'); *--ptr2=0; result=LstMatch(ptr,"h1\0/h1\0def\0/def\0hw\0/hw\0tt\0/tt\0" -"ety\0@fld\0@cd\0@blockquote\0@wordforms\0@note\0@altname\0@chform\0@cref\0@syn\0" -"/ety\0@/fld\0@/cd\0@/blockquote\0@/wordforms\0@/note\0@/altname\0@/chform\0@/cref\0@/syn\0"); + "ety\0@fld\0@cd\0@blockquote\0@wordforms\0@note\0@altname\0@chform\0" + "@cref\0@syn\0/ety\0@/fld\0@/cd\0@/blockquote\0@/wordforms\0@/note\0" + "@/altname\0@/chform\0@/cref\0@/syn\0"); *ptr2++='>'; ptr=ptr2; } while (result<0); -ncmd_done: + ncmd_done: *_ptr=ptr; return result; } U8 *ACDNextEntry(U8 **_ptr) { - U8 *result,*ignore,ch,*ptr=*_ptr,buf[ACD_BLK_SIZE],*out_ptr=buf; - I64 l; + U8 *result,*ignore,*ptr=*_ptr,buf[ACD_BLK_SIZE],*out_ptr=buf; + I64 ch,l; while (TRUE) { while (TRUE) { if (!(ch=*ptr++)) goto nentry_done; @@ -54,9 +95,9 @@ U8 *ACDNextEntry(U8 **_ptr) break; } ignore="b>\0i>\0ppp>\0/b>\0/i>\0/p>\0" - "ets>\0col>\0spn>\0/ets>\0/col>\0/spn>\0er>\0as>\0cs>\0cd>\0ex>\0" - "/er>\0/as>\0/cs>\0/cd>\0/ex>\0" - "note>\0/note>\0blockquote>\0/blockquote>\0"; + "ets>\0col>\0spn>\0/ets>\0/col>\0/spn>\0er>\0as>\0cs>\0cd>\0ex>\0" + "/er>\0/as>\0/cs>\0/cd>\0/ex>\0" + "note>\0/note>\0blockquote>\0/blockquote>\0"; while (*ignore) { l=StrLen(ignore); if (!StrNCmp(ptr,ignore,l)) { @@ -83,8 +124,8 @@ I64 ACDCompareWords(U8 *e1,U8 *e2) U8 *ACDSortWords(U8 *start,I64 size,I64 word_cnt) { U8 **ptr_array=MAlloc(sizeof(U8 *)*word_cnt), - *out_start=MAlloc(size), - *ptr=start,*ptr2; + *out_start=MAlloc(size), + *ptr=start,*ptr2; I64 i=0; while (*ptr) { ptr_array[i++]=ptr; @@ -107,14 +148,14 @@ U8 *ACDSortWords(U8 *start,I64 size,I64 word_cnt) return out_start; } -U0 ACDGen(U8 *raw_dict_filename) +U0 ACDGen(U8 *in_file) { I64 cmd,size,word_cnt=0,largest_entry=0; - U8 *st,*in_ptr=FileRead(raw_dict_filename,&size),*in_start=in_ptr, - *out_ptr=MAlloc(size),*out_start=out_ptr, - *word_ptr=MAlloc(size),*word_start=word_ptr, - *last_word="",*def_word_start=out_ptr, - *sorted_word_start; + U8 *st,*in_ptr=FileRead(in_file,&size),*in_start=in_ptr, + *out_ptr=MAlloc(size),*out_start=out_ptr, + *word_ptr=MAlloc(size),*word_start=word_ptr, + *last_word="",*def_word_start=out_ptr, + *sorted_word_start; U16 *d; if (!in_ptr) return; do { @@ -137,7 +178,7 @@ next_word: d=word_ptr; *d=(out_ptr-out_start)/ACD_BLK_SIZE; word_ptr+=2; - + *out_ptr++=ACD_WORD_CHAR; StrCpy(out_ptr,st); out_ptr+=StrLen(st)+1; @@ -149,7 +190,8 @@ next_word: cmd=ACDNextCmd(&in_ptr); if (cmd==ACD_H1) goto next_word; - } while (cmd>=0 && !(cmd==ACD_DEF||cmd==ACD_PRONUNCIATION||cmd==ACD_POS||cmd==ACD_EXTRA)); + } while (cmd>=0 && !(cmd==ACD_DEF||cmd==ACD_PRONUNCIATION|| + cmd==ACD_POS||cmd==ACD_EXTRA)); if (cmd==ACD_DEF) { if(st=ACDNextEntry(&in_ptr)) { if (*st) { @@ -187,7 +229,8 @@ next_word: Free(st); } } - } while (cmd==ACD_DEF||cmd==ACD_PRONUNCIATION||cmd==ACD_POS||cmd==ACD_EXTRA); + } while (cmd==ACD_DEF||cmd==ACD_PRONUNCIATION|| + cmd==ACD_POS||cmd==ACD_EXTRA); } else Free(st); } @@ -215,4 +258,6 @@ next_word: Free(sorted_word_start); } -ACDGen("DICTIONARY.TXT"); +Cd(__DIR__); +ACDPreprocess("DICTIONARY.TXT","DICTIONARY2.TXT"); +ACDGen("DICTIONARY2.TXT"); diff --git a/Adam/AutoComplete/ACMain.CPP b/Adam/AutoComplete/ACMain.CPP index 5533d40..1bff4a8 100644 --- a/Adam/AutoComplete/ACMain.CPP +++ b/Adam/AutoComplete/ACMain.CPP @@ -24,7 +24,7 @@ U0 ACSingleFileAdd(U8 *buf) while (TRUE) { while (TRUE) { if (ch=*ptr++) { - if (Bt(chars_bitmap_alpha_numeric,ch)) + if (Bt(chars_bmp_alpha_numeric,ch)) break; } else return; @@ -34,7 +34,7 @@ U0 ACSingleFileAdd(U8 *buf) ptr--; while (TRUE) { if (ch=*ptr2++) { - if (Bt(chars_bitmap_alpha_numeric,ch)) + if (Bt(chars_bmp_alpha_numeric,ch)) *ptr3++=ch; else if (ch!=CH_CURSOR) break; @@ -54,7 +54,7 @@ I64 ACSkipCrap(U8 *src,I64 len) I64 j; j=len-1; while (j>=0) { - if (Bt(chars_bitmap_alpha_numeric,src[j])) + if (Bt(chars_bmp_alpha_numeric,src[j])) break; else j--; @@ -67,7 +67,7 @@ I64 ACPriorWordInStr(U8 *src,U8 *dst,I64 len,I64 buf_size) I64 i,j=0,k; i=len-1; while (i>=0) - if (!Bt(chars_bitmap_alpha_numeric,src[i])) + if (!Bt(chars_bmp_alpha_numeric,src[i])) break; else i--; @@ -92,7 +92,7 @@ U0 ACMan(I64 n,CTask *parent_task=NULL) { CHashAC *tempw; CHashSrcSym *temph; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (0<=--nstr,Fs->hash_table,HTG_SRC_SYM)) && temph->src_link) { @@ -105,7 +105,8 @@ U0 ACMan(I64 n,CTask *parent_task=NULL) U0 ACFillInAdd(CHashAC *tempw) { I64 k; - if (ac.num_fillinshits>ac.fillin_hits[ac.num_fillins-1]) { + if (ac.num_fillinshits>ac.fillin_hits[ac.num_fillins-1]) { for (k=ac.num_fillins-1;k>=0;k--) { if (tempw->hits<=ac.fillin_hits[k]) break; @@ -149,15 +150,15 @@ U0 ACPutChoices(CDoc *focus_l,CDocEntry *doc_e,CTask *focus_task) ac.num_fillins=0; if (*ac.cur_word) { Preempt(ON); - for (i=0;i<=ac.hash_table->mask;i++) { + for (i=0;i<=ac.hash_table->mask && tSbody[i]; - while (tempw && tSstr,StrLen(ac.cur_word))) ACFillInAdd(tempw); tempw=tempw->next; } } - Preempt(OFF); + Preempt; } DocRst(doc,TRUE); doc->flags|=DOCF_MIN_SIZE; @@ -203,12 +204,14 @@ U0 ACTask(I64) DocTermNew; WinHorz(51,Fs->win_right); LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER + -WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; Free(ac.cur_word); ac.cur_word=NULL; while (TRUE) { original_focus_task=focus_task=sys_focus_task; - while (TaskValidate(focus_task) && Bt(&focus_task->task_flags,TASKf_INPUT_FILTER_TASK)) + while (TaskValidate(focus_task) && + Bt(&focus_task->task_flags,TASKf_INPUT_FILTER_TASK)) focus_task=focus_task->parent_task; if (TaskValidate(focus_task) && (doc=DocPut(focus_task)) && focus_task!=Fs && Bt(&focus_task->display_flags,DISPLAYf_SHOW)) { @@ -244,7 +247,8 @@ U0 ACMainFileLstTraverse(U8 *files_find_mask) U8 *buf; CDirEntry *tempde,*tempde1; try { - tempde=tempde1=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES|FUF_CLUSTER_ORDER); + tempde=tempde1=FilesFind(files_find_mask, + FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES|FUF_CLUSTER_ORDER); while (tempde) { "%s\n",tempde->full_name; buf=FileRead(tempde->full_name); @@ -260,7 +264,7 @@ U0 ACMainFileLstTraverse(U8 *files_find_mask) public Bool AutoComplete(Bool val=OFF) {//Turn AutoComplete OFF (or ON). Bool old_autocomplete=FALSE, - old_preempt=Preempt(OFF); + old_preempt=Preempt; if (val) { while (Bt(&ac.flags,ACf_INIT_IN_PROGRESS)) Sleep(10); @@ -308,7 +312,8 @@ public U0 ACInit(U8 *mask=NULL) Yield; AutoComplete; - if (IsDrvWritable && FileFind(ACD_DEF_FILENAME_Z) && !FileFind(ACD_DEF_FILENAME)) { + if (DrvIsWritable && FileFind(ACD_DEF_FILENAME_Z) && + !FileFind(ACD_DEF_FILENAME)) { if (bd->type!=BDT_RAM) { start_flag=FALSE; Spawn(&ACProgressTask,&start_flag); diff --git a/Adam/AutoComplete/ACWords.DAT b/Adam/AutoComplete/ACWords.DAT index 705886a..4009271 100644 Binary files a/Adam/AutoComplete/ACWords.DAT and b/Adam/AutoComplete/ACWords.DAT differ diff --git a/Adam/AutoComplete/AutoComplete.CPP b/Adam/AutoComplete/AutoComplete.CPP index 08d53cd..e903274 100644 --- a/Adam/AutoComplete/AutoComplete.CPP +++ b/Adam/AutoComplete/AutoComplete.CPP @@ -19,8 +19,8 @@ public class CAutoCompleteGlbls CHashAC *fillin_matches[AC_MAX_FILLINS+1]; } ac={0,NULL,NULL,0,NULL,0,0, -{0,0,0,0,0,0,0,0,0,0,0}, -{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}}; + {0,0,0,0,0,0,0,0,0,0,0}, + {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}}; //Dictionary Stuff #help_index "AutoComplete/Dictionary" diff --git a/Adam/AutoFile.CPP b/Adam/AutoFile.CPP index 5036e10..0fcff20 100644 --- a/Adam/AutoFile.CPP +++ b/Adam/AutoFile.CPP @@ -1,4 +1,4 @@ -#help_index "AutoFile;Training" +#help_index "AutoFile;Help System/Training" public U0 AFGetStr(U8 *st) {//Wait for user to type certain str. @@ -7,8 +7,8 @@ public U0 AFGetStr(U8 *st) while (*st) { ch=GetKey(&sc,FALSE); if (sc.u8[0]!=SC_SHIFT && - sc.u8[0]!=SC_ALT && - sc.u8[0]!=SC_CTRL) { + sc.u8[0]!=SC_ALT && + sc.u8[0]!=SC_CTRL) { if (ch==*st) { '' ch; st++; @@ -36,13 +36,13 @@ public U0 AFPrint(I64 mS=100,U8 *fmt,...) public U0 AFGetKey(I64 scan_code,I64 sc_mask=0xFF|SCF_SHIFT|SCF_CTRL|SCF_ALT) {//Wait for user to press certain key. I64 sc,ch; - U8 buf[128],*st; + U8 buf[STR_LEN],*st; do { ch=GetKey(&sc); if (sc.u8[0]!=SC_PRTSCRN1 && - !(sc.u8[0]==SC_SHIFT && scan_code&SCF_SHIFT) && - !(sc.u8[0]==SC_CTRL && scan_code&SCF_CTRL) && - !(sc.u8[0]==SC_ALT && scan_code&SCF_ALT) ) { + !(sc.u8[0]==SC_SHIFT && scan_code&SCF_SHIFT) && + !(sc.u8[0]==SC_CTRL && scan_code&SCF_CTRL) && + !(sc.u8[0]==SC_ALT && scan_code&SCF_ALT) ) { if (sc&sc_mask!=scan_code&sc_mask) { st=ScanCode2KeyName(scan_code); StrPrint(buf,"Press the $$GREEN$$<%s>$$FG$$ key",st); @@ -113,7 +113,8 @@ Bool AFSetIPPlot(I64 mS,I64 x,I64 y,I64 z) return TRUE; } -public U0 AFSetIP(I64 mS=7,I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) +public U0 AFSetIP(I64 mS=7,I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64, + I64 l=MAX_I64,I64 r=MAX_I64) {//Move input pointer (mouse) to spot at certain speed. if (!(0<=xboot_src=BOOT_SRC_RAM; hi_image->boot_patch_table_base=lo_image(U8 *)+hi_image->h.patch_table_offset; hi_image->sys_run_level =lo_image->sys_run_level&(RLF_VGA|RLF_16BIT); - MemCpy(&hi_image->start,&lo_image->start,sizeof(CKernel)-offset(CKernel.start)); + MemCpy(&hi_image->start,&lo_image->start, + sizeof(CKernel)-offset(CKernel.start)); CLI if (mp_cnt>1) diff --git a/Adam/Boot/BootCD.CPP b/Adam/Boot/BootCD.CPP index 5408418..4f89ac1 100644 --- a/Adam/Boot/BootCD.CPP +++ b/Adam/Boot/BootCD.CPP @@ -1,5 +1,6 @@ #define CD_BOOT_LOADER_SIZE CD_BLK_SIZE*1 //Max CD_BLK_SIZE*4, I think -#define BOOT_HIGH_LOC_CD ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4) +#define BOOT_HIGH_LOC_CD ((BOOT_RAM_LIMIT-\ + (BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4) DefinePrint( "DD_BOOT_HIGH_LOC_CD","%08X",BOOT_HIGH_LOC_CD<<4); diff --git a/Adam/Boot/BootHD.CPP b/Adam/Boot/BootHD.CPP index 7a1b79f..33a471f 100644 --- a/Adam/Boot/BootHD.CPP +++ b/Adam/Boot/BootHD.CPP @@ -1,5 +1,6 @@ #define MODULE_SIZE 1*BLK_SIZE -#define BOOT_HIGH_LOC_HD ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) +#define BOOT_HIGH_LOC_HD ((BOOT_RAM_LIMIT-\ + (BOOT_STK_SIZE+MODULE_SIZE))>>4) DefinePrint( "DD_BOOT_HIGH_LOC_HD","%08X",BOOT_HIGH_LOC_HD<<4); diff --git a/Adam/Boot/BootIns.CPP b/Adam/Boot/BootIns.CPP index fc1ea83..380e511 100644 --- a/Adam/Boot/BootIns.CPP +++ b/Adam/Boot/BootIns.CPP @@ -13,8 +13,8 @@ public U0 MakeAll() {//Use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$. Loader must be patched. //These 2 modules (and bootloaders at top) are the only AOT -//compiled code in TempleOS. Everything else is JIT. -//You are doing it wrong if you make AOT compiled code. + //compiled code in TempleOS. Everything else is JIT. + //You are doing it wrong if you make AOT compiled code. if (Cmp("/Compiler/Compiler","Compiler",,':')) throw; if (Cmp("/Kernel/Kernel","Kernel",,':')) @@ -24,15 +24,15 @@ public U0 MakeAll() public Bool MakeOSDrvBootInstall(U8 src_drv=0,U8 dst_drv=0) {// Does $LK,"MakeAll",A="MN:MakeAll"$ and installs new boot-loader. -//Normally, you just supply a src_drv. It will compile -//the code on that drive and update the boot sect. + //Normally, you just supply a src_drv. It will compile + //the code on that drive and update the boot sect. -//If you are making a bootable CD-ROM, you supply a dst_drv. -//See $LK,"::/Misc/MakeDistro.CPP"$ + //If you are making a bootable CD-ROM, you supply a dst_drv. + //See $LK,"::/Misc/MakeDistro.CPP"$ -//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ + //See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ -//Study my account examples my technique: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$ + //Study my account examples my technique: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$ CBlkDev *bd; CDrv *dv; @@ -87,7 +87,7 @@ public Bool MakeOSDrvBootInstall(U8 src_drv=0,U8 dst_drv=0) public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv) {//Reads MBR from disk drive containing src partition. - //Writes a single blk file to dst /0000Boot directory. +//Writes a single blk file to dst BOOT_DIR. CBlkDev *bd=Let2BlkDev(src_drv); CDrv *dv; CMasterBoot mbr; @@ -96,7 +96,7 @@ public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv) if (dv->type!=DVT_REDSEA && dv->type!=DVT_FAT32) PrintErr("Not RedSea Drv\n"); else { - //Bypass partition bounds-checking +//Bypass partition bounds-checking BlkDevLock(bd); ATAReadBlks(bd,&mbr,0,1); BlkDevUnlock(bd); @@ -108,13 +108,13 @@ public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv) } public U0 MasterBootOldWrite(U8 src_drv,U8 dst_drv) -{//Reads OldMBR from src drive /0000Boot directory - //writes it to the MBR of the drive with dst partition. +{//Reads OldMBR from src drive BOOT_DIR. +//writes it to the MBR of the drive with dst partition. CBlkDev *bd=Let2BlkDev(dst_drv); CMasterBoot *mbr; Drv(src_drv); if (mbr=FileRead(BOOT_DIR_OLDMBR_BIN_C)) { - //Bypass partition bounds-checking +//Bypass partition bounds-checking BlkDevLock(bd); ATAWriteBlks(bd,mbr,0,1); BlkDevUnlock(bd); @@ -125,15 +125,15 @@ public U0 MasterBootOldWrite(U8 src_drv,U8 dst_drv) public U0 MasterBootZero(U8 dst_drv) {//Set MBR of disk with dst partition to zero. -//This is dangerous!! -//The TempleOS partitioner doesn't play well -//with other operating systems at this time and you need -//to do this on a drive partitioned by TempleOS -//if you wish to partition with another operating system. + //This is dangerous!! + //The TempleOS partitioner doesn't play well + //with other operating systems at this time and you need + //to do this on a drive partitioned by TempleOS + //if you wish to partition with another operating system. CBlkDev *bd=Let2BlkDev(dst_drv); CMasterBoot mbr; MemSet(&mbr,0,BLK_SIZE); - //Bypass partition bounds-checking +//Bypass partition bounds-checking BlkDevLock(bd); ATAWriteBlks(bd,&mbr,0,1); BlkDevUnlock(bd); @@ -141,13 +141,13 @@ public U0 MasterBootZero(U8 dst_drv) public Bool MasterBootIntall(U8 drv_let,U8 *drv_lst=NULL) {//Create new MBR on the disk that has drv_let as a partition. - //Puts stage 2 in /0000Boot dir of drv_let. +//Puts stage 2 in BOOT_DIR of drv_let. CBlkDev *bd,*bd1; CDrv *dv,*p1; CMasterBoot mbr; CDirEntry de; I64 i,j,size,*_q; - U8 *menu_ptr,*ptr,ch,buf[128]; + U8 *menu_ptr,*ptr,ch,buf[STR_LEN]; Bool result=FALSE; try { @@ -209,7 +209,7 @@ public Bool MasterBootIntall(U8 drv_let,U8 *drv_lst=NULL) Free(de.full_name); *BMHD_BLK_CNT(U16 *)=(size+BLK_SIZE-1)>>BLK_SIZE_BITS; *BMHD_DAP_BLK(I64 *)=Cluster2Blk(dv,de.cluster); - //Bypass partition bounds-checking +//Bypass partition bounds-checking BlkDevLock(bd); ATAReadBlks(bd,&mbr,0,1); for (i=0;i>4) +#define BOOT_HIGH_LOC_MHD ((BOOT_RAM_LIMIT-\ + (BOOT_STK_SIZE+MODULE_SIZE))>>4) DefinePrint( "DD_BOOT_HIGH_LOC_MHD","%08X",BOOT_HIGH_LOC_MHD<<4); diff --git a/Adam/Boot/BootMHD2.CPP b/Adam/Boot/BootMHD2.CPP index 5c944f3..be890e5 100644 --- a/Adam/Boot/BootMHD2.CPP +++ b/Adam/Boot/BootMHD2.CPP @@ -1,5 +1,6 @@ #define MODULE_SIZE 2*BLK_SIZE -#define BOOT_HIGH_LOC_MHD2 ((BOOT_RAM_LIMIT-(BOOT_STK_SIZE+MODULE_SIZE))>>4) +#define BOOT_HIGH_LOC_MHD2 ((BOOT_RAM_LIMIT-\ + (BOOT_STK_SIZE+MODULE_SIZE))>>4) DefinePrint( "DD_BOOT_HIGH_LOC_MHD2","%08X",BOOT_HIGH_LOC_MHD2<<4); diff --git a/Adam/Boot/DskCDDVD.CPP b/Adam/Boot/DskISOFile.CPP similarity index 90% rename from Adam/Boot/DskCDDVD.CPP rename to Adam/Boot/DskISOFile.CPP index a4ac496..c4a6553 100644 --- a/Adam/Boot/DskCDDVD.CPP +++ b/Adam/Boot/DskISOFile.CPP @@ -29,9 +29,9 @@ I64 CDFileCreate2(CFile *out_file,CDirEntry *tempde, CFile *in_file; U8 *buf=MAlloc(CD_BLK_SIZE),*ptr1,*ptr2; CISO1DirEntry *dir_blk_buf =CAlloc(CD_BLK_SIZE*128), - *de =dir_blk_buf, *de1, - *dir_blk_buf2=CAlloc(CD_BLK_SIZE*128), - *de2=dir_blk_buf2,*de12; + *de =dir_blk_buf, *de1, + *dir_blk_buf2=CAlloc(CD_BLK_SIZE*128), + *de2=dir_blk_buf2,*de12; I64 i,n; tempc=parent->user_data; @@ -87,7 +87,8 @@ I64 CDFileCreate2(CFile *out_file,CDirEntry *tempde, de1=de; de12=de2; if (tempde1->attr & RS_ATTR_DIR) { - n=CDFileCreate2(out_file,tempde1,de,de2,_cur_blk,tempde,write,stage2_filename,_stage2_blk); + n=CDFileCreate2(out_file,tempde1,de,de2,_cur_blk, + tempde,write,stage2_filename,_stage2_blk); de(U8 *)+=sizeof(CISO1DirEntry)-1+n; de2(U8 *)+=sizeof(CISO1DirEntry)-1+n<<1; } else { @@ -145,20 +146,22 @@ I64 CDFileCreate2(CFile *out_file,CDirEntry *tempde, FClose(in_file); } if ((de1(U8 *)-dir_blk_buf(U8 *))/CD_BLK_SIZE!= - (de(U8 *) -dir_blk_buf(U8 *))/CD_BLK_SIZE) { + (de(U8 *) -dir_blk_buf(U8 *))/CD_BLK_SIZE) { i=de1->len; MemCpy(buf,de1,i); MemSet(de1,0,i); - de=dir_blk_buf(U8 *)+(de(U8 *)-dir_blk_buf(U8 *))/CD_BLK_SIZE*CD_BLK_SIZE; + de=dir_blk_buf(U8 *)+(de(U8 *) + -dir_blk_buf(U8 *))/CD_BLK_SIZE*CD_BLK_SIZE; MemCpy(de,buf,i); de(U8 *)+=i; } if ((de12(U8 *)-dir_blk_buf2(U8 *))/CD_BLK_SIZE!= - (de2(U8 *) -dir_blk_buf2(U8 *))/CD_BLK_SIZE) { + (de2(U8 *) -dir_blk_buf2(U8 *))/CD_BLK_SIZE) { i=de12->len; MemCpy(buf,de12,i); MemSet(de12,0,i); - de2(U8 *)=dir_blk_buf2(U8 *)+(de2(U8 *)-dir_blk_buf2(U8 *))/CD_BLK_SIZE*CD_BLK_SIZE; + de2(U8 *)=dir_blk_buf2(U8 *)+(de2(U8 *) + -dir_blk_buf2(U8 *))/CD_BLK_SIZE*CD_BLK_SIZE; MemCpy(de2,buf,i); de2(U8 *)+=i; } @@ -250,14 +253,15 @@ I64 CDTableLen(CDirEntry *tempde,I64 *size1,I64 *size2,I64 cur_depth) U0 CDFillPathTable(CDirEntry *tempde, CISO1PathEntry **_itabbuf,CISO1PathEntry **_itabbuf2, - I64 parent_entry_num,Bool big_endian,I64 *first_free,I64 cur_level,I64 output_level) + I64 parent_entry_num,Bool big_endian,I64 *first_free, + I64 cur_level,I64 output_level) { U8 *ptr1,*ptr2; I64 i; CISO1PathEntry *tabbuf=*_itabbuf,*tabbuf2=*_itabbuf2; CDirEntry *tempde1=tempde->sub,*tempde2; CCCDUserData *tempc; - + if (cur_level==output_level) { while (tempde1) { if (tempde1->attr & RS_ATTR_DIR) { @@ -273,7 +277,8 @@ U0 CDFillPathTable(CDirEntry *tempde, } StrCpy(&tabbuf->name,tempde1->name); - tabbuf(U8 *)+=sizeof(CISO1PathEntry)-2+(StrLen(tempde1->name)+1) & -0x2; + tabbuf(U8 *)+=sizeof(CISO1PathEntry)-2+ + (StrLen(tempde1->name)+1) & -0x2; tabbuf2->name_len=StrLen(tempde1->name)<<1; if (big_endian) { @@ -290,7 +295,7 @@ U0 CDFillPathTable(CDirEntry *tempde, *ptr1++=*ptr2++; } tabbuf2(U8 *)+=sizeof(CISO1PathEntry)-2+ - StrLen(tempde1->name)<<1; + StrLen(tempde1->name)<<1; *first_free+=1; } tempde1=tempde1->next; @@ -304,7 +309,7 @@ U0 CDFillPathTable(CDirEntry *tempde, if (tempde1->attr & RS_ATTR_DIR) { tempc=tempde1->user_data; CDFillPathTable(tempde1,_itabbuf,_itabbuf2,tempc->path_entry_num, - big_endian,first_free,cur_level+1,output_level); + big_endian,first_free,cur_level+1,output_level); } tempde1=tempde2; } @@ -323,24 +328,23 @@ class CElTorito U8 zero2[20]; }; -public I64 CDFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask,U8 *fu_flags=NULL, - U8 *_stage2_filename=NULL) +public I64 ISOFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask, + U8 *fu_flags=NULL,U8 *_stage2_filename=NULL) {//See $LK,"::/Misc/MakeDistro.CPP"$ //Use "C:/Distro/*" if you want all files in the C:/Distro directory. -//Default flags are "+r" recurse. + //Default flags are "+r" recurse. CISO1PriDesc *iso_pri=CAlloc(CD_BLK_SIZE), - *iso_boot=CAlloc(CD_BLK_SIZE), - *iso_sup=CAlloc(CD_BLK_SIZE), - *iso_term=CAlloc(CD_BLK_SIZE); + *iso_boot=CAlloc(CD_BLK_SIZE), + *iso_sup=CAlloc(CD_BLK_SIZE), + *iso_term=CAlloc(CD_BLK_SIZE); CDirEntry *rootdir=CAlloc(sizeof(CDirEntry)); - I64 i,j,stage2_blk=(CD_FILE_OFFSET+1<<2+CD_BOOT_LOADER_SIZE/BLK_SIZE)>>2,stage2_size, - cur_blk=0,tabsize,tabsize2,first_free,max_depth, - fuf_flags=0; + I64 i,j,stage2_blk=(CD_FILE_OFFSET+1<<2+CD_BOOT_LOADER_SIZE/BLK_SIZE)>>2, + stage2_size,cur_blk=0,tabsize,tabsize2,first_free,max_depth,fuf_flags=0; U32 *d; CElTorito *et=CAlloc(CD_BLK_SIZE); U8 *filename,*stage2_filename, - *stage1_buf=CAlloc(CD_BOOT_LOADER_SIZE), - *zero_buf=CAlloc(CD_BLK_SIZE); + *stage1_buf=CAlloc(CD_BOOT_LOADER_SIZE), + *zero_buf=CAlloc(CD_BLK_SIZE); CISO1PathEntry *tabbuf=NULL,*tabbuf2=NULL,*itabbuf,*itabbuf2; CFile *out_file=NULL; CISO1DirEntry *tempi; @@ -369,9 +373,9 @@ public I64 CDFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask,U8 *fu_flags= if (stage2_filename) //preboot and bootloader cur_blk+=1+CD_BOOT_LOADER_SIZE/CD_BLK_SIZE; CDFileCreate2(out_file,rootdir, - &iso_pri->root_dir_record, - &iso_sup->root_dir_record, - &cur_blk,rootdir,FALSE,stage2_filename,&stage2_blk); + &iso_pri->root_dir_record, + &iso_sup->root_dir_record, + &cur_blk,rootdir,FALSE,stage2_filename,&stage2_blk); tabsize=sizeof(CISO1PathEntry); tabsize2=sizeof(CISO1PathEntry); max_depth=CDTableLen(rootdir,&tabsize,&tabsize2,1); @@ -437,7 +441,8 @@ public I64 CDFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask,U8 *fu_flags= } CDFileCreate2(out_file,rootdir,&iso_pri->root_dir_record, - &iso_sup->root_dir_record,&cur_blk,rootdir,TRUE,stage2_filename,&stage2_blk); + &iso_sup->root_dir_record,&cur_blk,rootdir,TRUE, + stage2_filename,&stage2_blk); tabbuf=CAlloc(tabsize*CD_BLK_SIZE); iso_pri->type_l_path_table=cur_blk; @@ -503,15 +508,16 @@ public I64 CDFileCreate(U8 *_filename=NULL,U8 *src_files_find_mask,U8 *fu_flags= MemCpy(stage1_buf,BCD_START,BCD_END-BCD_START); *(BCD_BLK_CNT-BCD_START+stage1_buf)(U16 *)=stage2_size; *(BCD_BLK_LO -BCD_START+stage1_buf)(U32 *)=stage2_blk; - "$$RED$$!!! Boot Stage 2 !!! %X-%X$$FG$$\n",stage2_blk,stage2_blk+stage2_size-1; + "$$RED$$!!! Boot Stage 2 !!! %X-%X$$FG$$\n", + stage2_blk,stage2_blk+stage2_size-1; FWBlks(out_file,stage1_buf, - CD_FILE_OFFSET+1<<2,CD_BOOT_LOADER_SIZE/BLK_SIZE); + CD_FILE_OFFSET+1<<2,CD_BOOT_LOADER_SIZE/BLK_SIZE); } else { FWBlks(out_file,iso_sup,17<<2,4); FWBlks(out_file,iso_term,18<<2,4); } -cf_done: + cf_done: FClose(out_file); Free(tabbuf); Free(tabbuf2); diff --git a/Adam/Ctrls/CtrlsA.CPP b/Adam/Ctrls/CtrlsA.CPP index d217410..719007b 100644 --- a/Adam/Ctrls/CtrlsA.CPP +++ b/Adam/Ctrls/CtrlsA.CPP @@ -1,7 +1,7 @@ public CCtrl *CtrlFindUnique(CTask *haystack_task,I64 needle_type) -{//Find task ctrl givin $LK,"ctrl_type",A="MN:CTRLT_VIEWING_ANGLES"$. +{//Find task ctrl given $LK,"ctrl_type",A="MN:CTRLT_VIEWING_ANGLES"$. CCtrl *c; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; c=haystack_task->next_ctrl; while (c!=&haystack_task->next_ctrl) { if (c->type==needle_type) { @@ -17,7 +17,7 @@ public CCtrl *CtrlFindUnique(CTask *haystack_task,I64 needle_type) U0 CtrlsUpdate(CTask *task) { CCtrl *c; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; c=task->next_ctrl; while (c!=&task->next_ctrl) { if (c->update_derived_vals) @@ -43,7 +43,7 @@ fp_update_ctrls=&CtrlsUpdate; Bool CtrlInsideRect(CCtrl *c,I64 x,I64 y) {//screen coordinates if (c->screen_left<=x<=c->screen_right && - c->screen_top<=y<=c->screen_bottom) + c->screen_top<=y<=c->screen_bottom) return TRUE; else return FALSE; @@ -64,7 +64,7 @@ U0 DrawCtrls(CTask *task) { CCtrl *c; CDC *dc=DCAlias(gr.dc2,task); - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; c=task->next_ctrl; while (c!=&task->next_ctrl) { if (c->flags&CTRLF_SHOW) { @@ -116,7 +116,7 @@ U0 DrawCtrls(CTask *task) U0 DrawWinScroll(CDC *dc,CCtrl *c) { CWinScroll *s=c->state; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (c->flags&CTRLF_CLICKED) dc->color=s->color>>4; @@ -140,20 +140,26 @@ U0 WinDerivedScrollValsUpdate(CCtrl *c) if (s->posmin) s->pos=s->min; if (s->pos>s->max) s->pos=s->max; s->color=c->win_task->border_attr&0xF^0xF+ - (c->win_task->border_attr&0xF)<<4; + (c->win_task->border_attr&0xF)<<4; range=s->max-s->min; if (!range) range=1; switch (c->type) { case CTRLT_WIN_HSCROLL: - c->left =gr.pan_text_x+FONT_WIDTH-WIN_SCROLL_BORDER_BONUS+(s->pos-s->min)*(c->win_task->pix_width+2*WIN_SCROLL_BORDER_BONUS-WIN_SCROLL_SIZE)/range; + c->left =gr.pan_text_x+FONT_WIDTH-WIN_SCROLL_BORDER_BONUS+ + (s->pos-s->min)*(c->win_task->pix_width+2*WIN_SCROLL_BORDER_BONUS + -WIN_SCROLL_SIZE)/range; c->right =c->left+WIN_SCROLL_SIZE-1; - c->top =gr.pan_text_y+FONT_HEIGHT+(FONT_WIDTH-WIN_SCROLL_SIZE)/2+c->win_task->pix_height; + c->top =gr.pan_text_y+FONT_HEIGHT+ + (FONT_WIDTH-WIN_SCROLL_SIZE)/2+c->win_task->pix_height; c->bottom=c->top+WIN_SCROLL_SIZE-1; break; case CTRLT_WIN_VSCROLL: - c->left =gr.pan_text_x+FONT_WIDTH+(FONT_WIDTH-WIN_SCROLL_SIZE)/2+c->win_task->pix_width; + c->left =gr.pan_text_x+FONT_WIDTH+ + (FONT_WIDTH-WIN_SCROLL_SIZE)/2+c->win_task->pix_width; c->right =c->left+WIN_SCROLL_SIZE-1; - c->top =gr.pan_text_y+FONT_HEIGHT-WIN_SCROLL_BORDER_BONUS+(s->pos-s->min)*(c->win_task->pix_height+2*WIN_SCROLL_BORDER_BONUS-WIN_SCROLL_SIZE)/range; + c->top =gr.pan_text_y+FONT_HEIGHT-WIN_SCROLL_BORDER_BONUS+ + (s->pos-s->min)*(c->win_task->pix_height+ + 2*WIN_SCROLL_BORDER_BONUS-WIN_SCROLL_SIZE)/range; c->bottom=c->top+WIN_SCROLL_SIZE-1; break; } @@ -165,7 +171,8 @@ U0 LeftClickHWinScroll(CCtrl *c,I64 x,I64,Bool down) CWinScroll *s=c->state; I64 range=task->pix_width+2*WIN_SCROLL_BORDER_BONUS-WIN_SCROLL_SIZE; LBts(&s->flags,WSSf_SET_TO_POS); - s->pos=((x-(FONT_WIDTH-WIN_SCROLL_BORDER_BONUS))*(s->max-s->min+1)+range/2)/range+s->min; + s->pos=((x-(FONT_WIDTH-WIN_SCROLL_BORDER_BONUS)) + *(s->max-s->min+1)+range/2)/range+s->min; if (down) c->flags|=CTRLF_CLICKED; else @@ -180,7 +187,8 @@ U0 LeftClickVWinScroll(CCtrl *c,I64,I64 y,Bool down) CWinScroll *s=c->state; I64 range=task->pix_height+2*WIN_SCROLL_BORDER_BONUS-WIN_SCROLL_SIZE; LBts(&s->flags,WSSf_SET_TO_POS); - s->pos=((y-(FONT_HEIGHT-WIN_SCROLL_BORDER_BONUS))*(s->max-s->min+1)+range/2)/range+s->min; + s->pos=((y-(FONT_HEIGHT-WIN_SCROLL_BORDER_BONUS)) + *(s->max-s->min+1)+range/2)/range+s->min; if (down) c->flags|=CTRLF_CLICKED; else @@ -200,7 +208,7 @@ U0 WheelChangeWinScroll(CCtrl *c,I64 delta) U0 WinScrollsInit(CTask *task) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CCtrl *c; if (!CtrlFindUnique(task,CTRLT_WIN_HSCROLL)) { @@ -241,33 +249,41 @@ U0 DrawViewAnglesCtrl(CDC *dc,CCtrl *c) CViewAngles *s=c->state; dc->color=s->cbd; - GrRect(dc, c->left,c->top,VIEWANGLES_SPACING*4+3,VIEWANGLES_SPACING*2+VIEWANGLES_RANGE); + GrRect(dc, c->left,c->top,VIEWANGLES_SPACING*4+3, + VIEWANGLES_SPACING*2+VIEWANGLES_RANGE); dc->color=s->cbg; GrRect(dc, c->left+VIEWANGLES_BORDER,c->top+VIEWANGLES_BORDER, - VIEWANGLES_SPACING*4+3-2*VIEWANGLES_BORDER,VIEWANGLES_SPACING*2+VIEWANGLES_RANGE-2*VIEWANGLES_BORDER); + VIEWANGLES_SPACING*4+3-2*VIEWANGLES_BORDER, + VIEWANGLES_SPACING*2+VIEWANGLES_RANGE-2*VIEWANGLES_BORDER); dc->color=s->cfg; GrLine(dc,c->left+VIEWANGLES_SPACING,c->top+VIEWANGLES_SPACING, - c->left+VIEWANGLES_SPACING,c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE-1); + c->left+VIEWANGLES_SPACING,c->top+VIEWANGLES_SPACING+ + VIEWANGLES_RANGE-1); GrLine(dc,c->left+2*VIEWANGLES_SPACING+1,c->top+VIEWANGLES_SPACING, - c->left+2*VIEWANGLES_SPACING+1,c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE-1); + c->left+2*VIEWANGLES_SPACING+1,c->top+VIEWANGLES_SPACING+ + VIEWANGLES_RANGE-1); GrLine(dc,c->left+3*VIEWANGLES_SPACING+2,c->top+VIEWANGLES_SPACING, - c->left+3*VIEWANGLES_SPACING+2,c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE-1); + c->left+3*VIEWANGLES_SPACING+2,c->top+VIEWANGLES_SPACING+ + VIEWANGLES_RANGE-1); for (i=1;ileft+VIEWANGLES_SPACING-j,c->bottom-VIEWANGLES_SPACING-i, - c->left+VIEWANGLES_SPACING+j,c->bottom-VIEWANGLES_SPACING-i); + c->left+VIEWANGLES_SPACING+j,c->bottom + -VIEWANGLES_SPACING-i); GrLine(dc,c->left+2*VIEWANGLES_SPACING+1-j,c->bottom-VIEWANGLES_SPACING-i, - c->left+2*VIEWANGLES_SPACING+1+j,c->bottom-VIEWANGLES_SPACING-i); + c->left+2*VIEWANGLES_SPACING+1+j,c->bottom + -VIEWANGLES_SPACING-i); GrLine(dc,c->left+3*VIEWANGLES_SPACING+2-j,c->bottom-VIEWANGLES_SPACING-i, - c->left+3*VIEWANGLES_SPACING+2+j,c->bottom-VIEWANGLES_SPACING-i); + c->left+3*VIEWANGLES_SPACING+2+j,c->bottom + -VIEWANGLES_SPACING-i); } dc->color=s->cx; GrPrint(dc,c->left+VIEWANGLES_SPACING-FONT_WIDTH/2, - c->top+VIEWANGLES_SPACING-(1+FONT_HEIGHT),"X"); + c->top+VIEWANGLES_SPACING-(1+FONT_HEIGHT),"X"); GrPrint(dc,c->left+VIEWANGLES_SPACING-3*FONT_WIDTH/2, - c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE+3, - "%3d",s->sx*360/VIEWANGLES_RANGE); + c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE+3, + "%3d",s->sx*360/VIEWANGLES_RANGE); i=c->left+VIEWANGLES_SPACING; if (s->sx>VIEWANGLES_RANGE/2) j=-VIEWANGLES_RANGE/2+s->sx; @@ -280,10 +296,10 @@ U0 DrawViewAnglesCtrl(CDC *dc,CCtrl *c) dc->color=s->cy; GrPrint(dc,c->left+2*VIEWANGLES_SPACING+1-FONT_WIDTH/2, - c->top+VIEWANGLES_SPACING-(1+FONT_HEIGHT),"Y"); + c->top+VIEWANGLES_SPACING-(1+FONT_HEIGHT),"Y"); GrPrint(dc,c->left+2*VIEWANGLES_SPACING+1-3*FONT_WIDTH/2, - c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE+3, - "%3d",s->sy*360/VIEWANGLES_RANGE); + c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE+3, + "%3d",s->sy*360/VIEWANGLES_RANGE); i=c->left+2*VIEWANGLES_SPACING+1; if (s->sy>VIEWANGLES_RANGE/2) j=-VIEWANGLES_RANGE/2+s->sy; @@ -296,10 +312,10 @@ U0 DrawViewAnglesCtrl(CDC *dc,CCtrl *c) dc->color=s->cz; GrPrint(dc,c->left+3*VIEWANGLES_SPACING+2-FONT_WIDTH/2, - c->top+VIEWANGLES_SPACING-(1+FONT_HEIGHT),"Z"); + c->top+VIEWANGLES_SPACING-(1+FONT_HEIGHT),"Z"); GrPrint(dc,c->left+3*VIEWANGLES_SPACING+2-3*FONT_WIDTH/2, - c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE+3, - "%3d",s->sz*360/VIEWANGLES_RANGE); + c->top+VIEWANGLES_SPACING+VIEWANGLES_RANGE+3, + "%3d",s->sz*360/VIEWANGLES_RANGE); i=c->left+3*VIEWANGLES_SPACING+2; if (s->sz>VIEWANGLES_RANGE/2) j=-VIEWANGLES_RANGE/2+s->sz; @@ -367,7 +383,7 @@ public CCtrl *ViewAnglesNew(CTask *task=NULL) c->draw_it=&DrawViewAnglesCtrl; c->left_click=&LeftClickViewAngles; c->update_derived_vals=&UpdateDerivedViewAnglesCtrl; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(c,task->last_ctrl); TaskDerivedValsUpdate(task); Preempt(old_preempt); @@ -378,7 +394,7 @@ public CCtrl *ViewAnglesNew(CTask *task=NULL) public U0 ViewAnglesDel(CTask *task=NULL) {//Free view angle ctrl. CCtrl *c; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (!task) task=Fs; if (c=CtrlFindUnique(task,CTRLT_VIEWING_ANGLES)) { QueRem(c); diff --git a/Adam/Ctrls/CtrlsButton.CPP b/Adam/Ctrls/CtrlsButton.CPP index cea767b..d0d3cb6 100644 --- a/Adam/Ctrls/CtrlsButton.CPP +++ b/Adam/Ctrls/CtrlsButton.CPP @@ -1,4 +1,4 @@ -#define BUTTBORDER 2 +#define BUTTON_BORDER 2 #define BTF_DONT_FREE 1 @@ -21,11 +21,12 @@ U0 DrawCtrlButton(CDC *dc,CCtrl *c) st=s->state_texts; dc->color=s->state_colors[s->state]; l=StrLen(st); - GrRect(dc,c->left+BUTTBORDER,c->top+BUTTBORDER, - c->right-c->left+1-BUTTBORDER*2,c->bottom-c->top+1-BUTTBORDER*2); + GrRect(dc,c->left+BUTTON_BORDER,c->top+BUTTON_BORDER, + c->right-c->left+1-BUTTON_BORDER*2, + c->bottom-c->top+1-BUTTON_BORDER*2); dc->color=s->state_colors[s->state]^(WHITE<<16+WHITE); GrPrint(dc,(c->left+c->right+1-l*FONT_WIDTH)>>1, - (c->top+c->bottom+1-FONT_HEIGHT)>>1,"%s",st); + (c->top+c->bottom+1-FONT_HEIGHT)>>1,"%s",st); } U0 LeftClickCtrlButton(CCtrl *c,I64,I64,Bool down) @@ -39,7 +40,8 @@ U0 LeftClickCtrlButton(CCtrl *c,I64,I64,Bool down) } public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, - I64 num_states=1,U8 *state_texts,I32 state_colors[],CCtrlButtonState *_s=NULL) + I64 num_states=1,U8 *state_texts, + I32 state_colors[],CCtrlButtonState *_s=NULL) {//Create button ctrl. See $LK,"::/Apps/Strut/Strut.CPP"$. Bool old_preempt; CCtrl *result; @@ -53,9 +55,9 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, j=StrLen(st); if (j>l) l=j; } - width=BUTTBORDER*4+l*FONT_WIDTH; + width=BUTTON_BORDER*4+l*FONT_WIDTH; } - if (height<0) height=BUTTBORDER*4+FONT_HEIGHT; + if (height<0) height=BUTTON_BORDER*4+FONT_HEIGHT; result=CAlloc(sizeof(CCtrl)); if (_s) { s=_s; @@ -77,7 +79,7 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, result->top=y; result->right=result->left+width-1; result->bottom=result->top+height-1; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(result,Fs->last_ctrl); Preempt(old_preempt); return result; @@ -85,7 +87,7 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, public U0 CtrlButtonDel(CCtrl *c) {//Free button ctrl. - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(c); Preempt(old_preempt); if (!(c->flags&BTF_DONT_FREE)) diff --git a/Adam/Ctrls/CtrlsSlider.CPP b/Adam/Ctrls/CtrlsSlider.CPP index bbee833..b3af421 100644 --- a/Adam/Ctrls/CtrlsSlider.CPP +++ b/Adam/Ctrls/CtrlsSlider.CPP @@ -15,7 +15,7 @@ class CTemplateCS CTemplateCS *CtrlSliderGet() { CTemplateCSSlider *temps; - U8 *st,pmt[136]; + U8 *st,pmt[STR_LEN]; CTemplateCS *result=CAlloc(sizeof(CTemplateCS)); "$$PURPLE$$Ctrl Slider$$FG$$\n\n"; @@ -85,14 +85,15 @@ U0 DrawCtrlSlider(CDC *dc,CCtrl *c) GrRect(dc, c->left,c->top,%d*SLIDER_SPACING+%d,SLIDER_SPACING*2+SLIDER_RANGE); dc->color=BLUE; GrRect(dc, c->left+SLIDER_BORDER,c->top+SLIDER_BORDER, - %d*SLIDER_SPACING+%d-2*SLIDER_BORDER,SLIDER_SPACING*2+SLIDER_RANGE-2*SLIDER_BORDER); + %d*SLIDER_SPACING+%d-2*SLIDER_BORDER,SLIDER_SPACING*2 + +SLIDER_RANGE-2*SLIDER_BORDER); dc->color=BLACK; ",m->num_sliders+1,m->num_sliders,m->num_sliders+1,m->num_sliders); for (i=0;inum_sliders;i++) DocPrint(doc, " GrLine(dc,c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING, - c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING+SLIDER_RANGE-1); + c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING+SLIDER_RANGE-1); ",i+1,i,i+1,i); DocPrint(doc," dc->color=LTRED;\n"); @@ -109,7 +110,9 @@ U0 DrawCtrlSlider(CDC *dc,CCtrl *c) temps=m->next_slider; while (temps!=&m->next_slider) { - DocPrint(doc," GrRect(dc,c->left+%d*SLIDER_SPACING+%d-3,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-2,7,5);\n", + DocPrint(doc, + " GrRect(dc,c->left+%d*SLIDER_SPACING+%d-3," + "c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-2,7,5);\n", temps->num+1,temps->num,temps->name); temps=temps->next; } @@ -117,7 +120,8 @@ U0 DrawCtrlSlider(CDC *dc,CCtrl *c) temps=m->next_slider; while (temps!=&m->next_slider) { - DocPrint(doc," GrRect(dc,c->left+%d*SLIDER_SPACING+%d-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-1,5,3);\n", + DocPrint(doc," GrRect(dc,c->left+%d*SLIDER_SPACING+%d-2," + "c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-1,5,3);\n", temps->num+1,temps->num,temps->name); temps=temps->next; } @@ -135,7 +139,8 @@ U0 UpdateDerivedCtrlSlider(CCtrl *c) temps=m->next_slider; while (temps!=&m->next_slider) { - DocPrint(doc," s->%s=ClampI64(s->%s,0,SLIDER_RANGE-1);\n",temps->name,temps->name); + DocPrint(doc," s->%s=ClampI64(s->%s,0,SLIDER_RANGE-1);\n", + temps->name,temps->name); temps=temps->next; } DocPrint(doc, @@ -177,14 +182,14 @@ CCtrl *SliderNew() "); if (*m->glbl_name) DocPrint(doc," c->state=&%s;\n" - " MemSet(&%s,0,sizeof(CSliderState));\n",m->glbl_name,m->glbl_name); + " MemSet(&%s,0,sizeof(CSliderState));\n",m->glbl_name,m->glbl_name); else DocPrint(doc, " c->state=CAlloc(sizeof(CSliderState));\n"); DocPrint(doc, " c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; c->update_derived_vals=&UpdateDerivedCtrlSlider; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; Preempt(old_preempt); @@ -193,7 +198,7 @@ CCtrl *SliderNew() U0 SliderDel(CCtrl *c) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(c); Preempt(old_preempt); "); @@ -206,7 +211,7 @@ U0 SliderDel(CCtrl *c) Kill(task); //This frees memory. - AcctOneTimePopUp(ARf_MANAGE_SLIDER, + RegOneTimePopUp(ARf_MANAGE_SLIDER, "Modify the code to your heart's content.\n" "The code is no longer managed.\n"); diff --git a/Adam/DevInfo.CPP b/Adam/DevInfo.CPP index 118f929..8bb5eeb 100644 --- a/Adam/DevInfo.CPP +++ b/Adam/DevInfo.CPP @@ -26,7 +26,7 @@ public U0 PCIDevFileGen() first=FALSE; } if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[StrLen(doc_e->tag)-1]=='=' && - doc_e2->type_u8==DOCT_NEW_LINE) { + doc_e2->type_u8==DOCT_NEW_LINE) { doc_e->tag[StrLen(doc_e->tag)-1]=CH_SPACE; cont=TRUE; } @@ -57,7 +57,8 @@ U0 PCILookUpSingle(CDoc *doc,I64 m,I64 d,U8 **_vendor,U8 **_dev) CDocEntry *doc_e=doc->root.next; while (doc_e!=doc) { if (first) { - if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[0]!=';' && StrLen(doc_e->tag)>=4) { + if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[0]!=';' && + StrLen(doc_e->tag)>=4) { buf[0](U16)='0x'; buf[2](U32)=doc_e->tag(U32 *)[0]; buf[6]=0; @@ -158,9 +159,9 @@ public U0 PCIRep() temppci=dev.pci_root.next; while (temppci!=&dev.pci_root) { "%02X:%02X:%01X %02X%02X $$GREEN$$%s $$CYAN$$%s$$FG$$\n", - temppci->bus,temppci->dev,temppci->fun, - temppci->base_code,temppci->sub_code, - temppci->vendor_str,temppci->dev_id_str; + temppci->bus,temppci->dev,temppci->fun, + temppci->base_code,temppci->sub_code, + temppci->vendor_str,temppci->dev_id_str; temppci=temppci->next; } } @@ -177,7 +178,7 @@ public U0 MemBIOSRep() U16 *m01=SYS_MEM_E801; CMemE820 *m20=SYS_MEM_E820; CMemRange *tempmr; - "Standard Addresses\n" + "Standard Addresses\n" "0x000A0000-0x000BFFFF VGA\n" "0xFEE00000-0xFEE00FFF See $$LK,\"APIC\",A=\"MN:LAPIC_BASE\"$$\n\n" "32 Bit Device Mem\n"; @@ -185,13 +186,14 @@ public U0 MemBIOSRep() Yield; tempmr=dev.mem32_root.next; while (tempmr!=&dev.mem32_root) { - "%02X:0x%016X-0x%016X\n",tempmr->type,tempmr->base,tempmr->base+tempmr->size-1; + "%02X:0x%016X-0x%016X\n", + tempmr->type,tempmr->base,tempmr->base+tempmr->size-1; tempmr=tempmr->next; } LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); "\nBIOS Memory Report 15:E801\n" - "01:0x0000000000000000-0x%016X\n",0x100000+m01[0]<<10-1; + "01:0x0000000000000000-0x%016X\n",0x100000+m01[0]<<10-1; "01:0x0000000001000000-0x%016X\n",0x1000000+m01[1]<<16-1; if (m20->type) { diff --git a/Adam/DolDoc/Doc.CPP b/Adam/DolDoc/Doc.CPP index 888c823..fa86de9 100644 --- a/Adam/DolDoc/Doc.CPP +++ b/Adam/DolDoc/Doc.CPP @@ -22,41 +22,45 @@ extern U8 *PopUpPickLst(U8 *lst); #define DHT_DOC_FLAG 2 #define DHT_COLOR 4 -//--TEMPLEOS LINK TYPES-- -// "filename" -// "FI:filename" -// "FA:haystack_filename,needle_anchor_str" -// "FF:haystack_filename,needle_str" -// "FF:haystack_filename,needle_str:occurnum" -// "FL:filename,linenum" +/* See $LK,"TempleOS Link Types",A="MN:ST_LINK_TYPES"$. + +"filename" +"FI:filename" +"FA:haystack_filename,needle_anchor_str" +"FF:haystack_filename,needle_str" +"FF:haystack_filename,needle_str:occurnum" +"FL:filename,linenum" +"MN:SymName" +"PI:filename" +"PF:haystack_filename,needle_str" +"PF:haystack_filename,needle_str:occurnum" +"PL:filename,linenum" +"BF:haystack_bible_book,needle_str" +"DF:word" +"DF:word,defnum" +"HI:index" +"AD:code_address_number" + + To edit a doc structure already in memory. See $LK,"SpriteEdText",A="MN:SpriteEdText"$(). +"AI:doc_address" +"AA:haystack_doc_address,needle_anchor_str" +"AF:haystack_doc_address,needle_str" +"AF:haystack_doc_address,needle_str:occurnum" +"AL:doc_address,linenum" + +*/ #define LK_FILE 0 #define LK_FILE_ANCHOR 1 #define LK_FILE_FIND 2 #define LK_FILE_LINE 3 -// "MN:SymName" #define LK_MAN_PAGE 4 -// "PI:filename" -// "PF:haystack_filename,needle_str" -// "PF:haystack_filename,needle_str:occurnum" -// "PL:filename,linenum" #define LK_PLAIN 5 #define LK_PLAIN_FIND 6 #define LK_PLAIN_LINE 7 -// "BF:haystack_bible_book,needle_str" #define LK_BIBLE_FIND 8 -// "DF:word" -// "DF:word,defnum" #define LK_DEF 9 -// "HI:index" #define LK_HELP_INDEX 10 -// "AD:code_address_number" #define LK_ADDR 11 -//These are to edit a doc structure already in memory. -// "AI:doc_address" -// "AA:haystack_doc_address,needle_anchor_str" -// "AF:haystack_doc_address,needle_str" -// "AF:haystack_doc_address,needle_str:occurnum" -// "AL:doc_address,linenum" #define LK_DOC 12 //See $LK,"SpriteEdText",A="MN:SpriteEdText"$() #define LK_DOC_ANCHOR 13 #define LK_DOC_FIND 14 diff --git a/Adam/DolDoc/DocCodeTools.CPP b/Adam/DolDoc/DocCodeTools.CPP index 38f7172..64c6475 100644 --- a/Adam/DolDoc/DocCodeTools.CPP +++ b/Adam/DolDoc/DocCodeTools.CPP @@ -1,5 +1,31 @@ #help_index "DolDoc/Misc" +U0 EdReplaceTroubleOne(CDoc *doc,U8 *st_original,U8 *st_safe,I64 num, + Bool to_safe,Bool select) +{ + U8 buf[STR_LEN]; + StrPrint(buf,st_safe,num); + if (to_safe) + EdReplace(doc,st_original,buf,select); + else + EdReplace(doc,buf,st_original,select); +} + +U0 EdReplaceTroubleAll(CDoc *doc,Bool to_safe,Bool select) +{ + I64 i=0; + EdReplaceTroubleOne(doc,"#assert" ,"//<@%d@>" ,i++,to_safe,select); + EdReplaceTroubleOne(doc,"#define" ,"//<@%d@>" ,i++,to_safe,select); + EdReplaceTroubleOne(doc,"#include","//<@%d@>" ,i++,to_safe,select); +//#if will match #if,#ifdef,#ifndef,#ifaot and #ifjit + EdReplaceTroubleOne(doc,"#if" ,"//<@%d@>" ,i++,to_safe,select); + EdReplaceTroubleOne(doc,"#endif" ,"//<@%d@>" ,i++,to_safe,select); +//Convert #exe to union because we want that indent pattern. + EdReplaceTroubleOne(doc,"#exe" ,"union @%d@",i++,to_safe,select); + EdReplaceTroubleOne(doc,"'{'" ,"'<@%d@>'" ,i++,to_safe,select); + EdReplaceTroubleOne(doc,"'}'" ,"'<@%d@>'" ,i++,to_safe,select); +} + #define C_INDENT_SPACES 2 #define ASM_RENUM_SPACING 5 @@ -14,10 +40,12 @@ I64 PopUpEdFmt() I64 i; CDoc *doc=DocNew; DocPrint(doc,"$$LTBLUE$$$$MU,\"Check Compile\",LE=EF_CHK_COMPILE$$\n" - "$$MU,\"Reindent CPP.Z Fun\",LE=EF_REINDENT$$\n" + "$$MU,\"Reindent CPP.Z Fun (Beware braces in strings.)\"," + "LE=EF_REINDENT$$\n" "$$MU,\"Renum Asm Local @@ Labels for Fun\",LE=EF_RENUM_ASM$$\n" "$$MU,\"Insert Template Code: Ctrl Slider\",LE=EF_CTRL_SLIDER$$\n" - "$$MU,\"Insert ASCII/Scan Code Hex Codes for key pressed\",LE=EF_CH_SC$$\n\n" + "$$MU,\"Insert ASCII/Scan Code Hex Codes for key pressed\"," + "LE=EF_CH_SC$$\n\n" "$$MU,\"CANCEL\",LE=DOCM_CANCEL$$\n\n" "$$GREEN$$$$FG$$ to undo if not happy\n" "with the results.\n"); @@ -28,7 +56,7 @@ I64 PopUpEdFmt() class CRILex { - CLex *lx1,*lx2; + CCmpCtrl *cc1,*cc2; CQueVectU8 *indent; I64 depth,exp_depth,one_shot; Bool was_new_line,is_not_cont; @@ -38,34 +66,38 @@ I64 EdRILex(CRILex *rx) { rx->is_not_cont=FALSE; I64 i; + CLexFile *tempf; do { - Lex(rx->lx1); - Lex(rx->lx2); - i=PrsKeyWord(rx->lx2); - if (rx->lx1->token=='\n' && rx->lx2->token==';' || rx->lx2->token=='{' || - rx->lx2->token=='}' || rx->lx2->token==':' || rx->lx2->token==')' && - !rx->exp_depth || i==KW_ELSE || i==KW_CATCH || i==KW_DO) - rx->is_not_cont=TRUE; - if (rx->was_new_line && (rx->lx1->token!=':' || - i==KW_DFT || i==KW_SUB_SWITCH_START || i==KW_SUB_SWITCH_END)) { - QueVectU8Put(rx->indent,rx->lx2->lfns[0].cur_entry->y,rx->depth+rx->one_shot); + Lex(rx->cc1); + Lex(rx->cc2); + i=PrsKeyWord(rx->cc2); + if (rx->cc1->token=='\n' && rx->cc2->token==';' || rx->cc2->token=='{' || + rx->cc2->token=='}' || rx->cc2->token==':' || rx->cc2->token==')' && + !rx->exp_depth || i==KW_ELSE || i==KW_CATCH || i==KW_DO) + rx->is_not_cont=TRUE; + if (rx->was_new_line && (rx->cc1->token!=':' || + i==KW_DFT || i==KW_SUB_SWITCH_START || i==KW_SUB_SWITCH_END)) { + tempf=rx->cc2->lex_include_stk; + while (tempf->next) + tempf=tempf->next; + QueVectU8Put(rx->indent,tempf->cur_entry->y,rx->depth+rx->one_shot); rx->one_shot=0; } - if (rx->lx2->token=='\n') + if (rx->cc2->token=='\n') rx->was_new_line=TRUE; else rx->was_new_line=FALSE; - } while (rx->lx1->token=='\n'); - return rx->lx1->token; + } while (rx->cc1->token=='\n'); + return rx->cc1->token; } U0 EdRIExp(CRILex *rx) { - if (rx->lx1->token=='(') { + if (rx->cc1->token=='(') { if (!rx->exp_depth++) rx->depth+=3; EdRILex(rx); - while (rx->lx1->token && rx->lx1->token!=')') + while (rx->cc1->token && rx->cc1->token!=')') EdRIExp(rx); if (!--rx->exp_depth) { rx->depth-=3; @@ -79,10 +111,10 @@ U0 EdRIStmt(CRILex *rx,Bool indent) { I64 i; Bool cont; - if (rx->lx1->token=='{') { + if (rx->cc1->token=='{') { rx->depth++; EdRILex(rx); - while (rx->lx1->token && rx->lx1->token!='}') + while (rx->cc1->token && rx->cc1->token!='}') EdRIStmt(rx,FALSE); if (--rx->depth<0) rx->depth=0; EdRILex(rx); @@ -90,14 +122,14 @@ U0 EdRIStmt(CRILex *rx,Bool indent) if (indent) rx->depth++; do { cont=FALSE; - switch (PrsKeyWord(rx->lx1)) { + switch (PrsKeyWord(rx->cc1)) { case KW_IF: EdRILex(rx); EdRIExp(rx); EdRIStmt(rx,TRUE); - if (PrsKeyWord(rx->lx1)==KW_ELSE) { + if (PrsKeyWord(rx->cc1)==KW_ELSE) { EdRILex(rx); - if (PrsKeyWord(rx->lx1)==KW_IF && rx->lx2->token!='\n') + if (PrsKeyWord(rx->cc1)==KW_IF && rx->cc2->token!='\n') EdRIStmt(rx,FALSE); else EdRIStmt(rx,TRUE); @@ -106,11 +138,15 @@ U0 EdRIStmt(CRILex *rx,Bool indent) case KW_TRY: EdRILex(rx); EdRIStmt(rx,TRUE); - if (PrsKeyWord(rx->lx1)==KW_CATCH) { + if (PrsKeyWord(rx->cc1)==KW_CATCH) { EdRILex(rx); EdRIStmt(rx,TRUE); } break; + case KW_LOCK: + EdRILex(rx); + EdRIStmt(rx,TRUE); + break; case KW_FOR: case KW_WHILE: EdRILex(rx); @@ -118,49 +154,52 @@ U0 EdRIStmt(CRILex *rx,Bool indent) EdRIStmt(rx,TRUE); break; case KW_ASM: - EdRILex(rx); + case KW_CLASS: + case KW_UNION: + if (EdRILex(rx)==TK_IDENT) + EdRILex(rx); EdRIStmt(rx,TRUE); break; case KW_DO: EdRILex(rx); EdRIStmt(rx,TRUE); - if (PrsKeyWord(rx->lx1)==KW_WHILE) { + if (PrsKeyWord(rx->cc1)==KW_WHILE) { EdRILex(rx); EdRIExp(rx); } - if (rx->lx1->token==';') + if (rx->cc1->token==';') EdRILex(rx); break; case KW_SWITCH: case KW_NOBOUND_SWITCH: EdRILex(rx); EdRIExp(rx); - if (rx->lx1->token=='{') { + if (rx->cc1->token=='{') { rx->depth++; EdRILex(rx); i=0; - while (rx->lx1->token && rx->lx1->token!='}') { - switch (PrsKeyWord(rx->lx1)) { + while (rx->cc1->token && rx->cc1->token!='}') { + switch (PrsKeyWord(rx->cc1)) { case KW_SUB_SWITCH_START: rx->depth+=i; i=0; - while (EdRILex(rx) && rx->lx1->token!=':'); + while (EdRILex(rx) && rx->cc1->token!=':'); EdRILex(rx); i++; break; case KW_SUB_SWITCH_END: rx->depth+=i; i=0; if (--rx->depth<0) rx->depth=0; - while (EdRILex(rx) && rx->lx1->token!=':'); + while (EdRILex(rx) && rx->cc1->token!=':'); EdRILex(rx); break; case KW_CASE: case KW_DFT: rx->depth+=i; i=0; - while (EdRILex(rx) && rx->lx1->token!=':'); + while (EdRILex(rx) && rx->cc1->token!=':'); EdRILex(rx); break; default: - if (rx->lx1->token) + if (rx->cc1->token) EdRIStmt(rx,TRUE); } } @@ -169,24 +208,25 @@ U0 EdRIStmt(CRILex *rx,Bool indent) } break; default: - if (rx->lx1->token==TK_IDENT && rx->lx1->hash_entry && - rx->lx1->hash_entry->type&(HTT_OPCODE|HTT_ASM_KEYWORD)) { - rx->one_shot=4-rx->depth; + if (rx->cc1->token==TK_IDENT && rx->cc1->hash_entry && + rx->cc1->hash_entry->type&(HTT_OPCODE|HTT_ASM_KEYWORD)) { +// rx->one_shot=4-rx->depth; do EdRILex(rx); - while (rx->lx2->token && rx->lx2->token!='\n'); + while (rx->cc2->token && rx->cc2->token!='\n'); rx->is_not_cont=TRUE; } else { - while (rx->lx1->token && rx->lx1->token!=';' && rx->lx1->token!=':') { - if (rx->lx2->token=='\n' && !rx->is_not_cont) + while (rx->cc1->token && rx->cc1->token!=';' && + rx->cc1->token!=':') { + if (rx->cc2->token=='\n' && !rx->is_not_cont) rx->one_shot=3; EdRILex(rx); } - if (rx->lx1->token==':') + if (rx->cc1->token==':') cont=TRUE; EdRILex(rx); } } - } while (cont && rx->lx1->token!='}'); + } while (cont && rx->cc1->token!='}'); if (indent && --rx->depth<0) rx->depth=0; } @@ -197,21 +237,23 @@ CQueVectU8 *EdRICode(CDoc *doc) CQueVectU8 *result; CRILex *rx=CAlloc(sizeof(CRILex)); - rx->lx1=LexNew(,LF_KEEP_NEW_LINES|LF_DONT_FREE_BUF,doc->filename.name); - Free(rx->lx1->lfns[0].full_name); - LexAttachDoc(rx->lx1,&rx->lx1->lfns[0],doc,,doc->cur_entry,doc->cur_data_col); + rx->cc1=CmpCtrlNew(,CCF_KEEP_NEW_LINES|CCF_DONT_FREE_BUF,doc->filename.name); + Free(rx->cc1->lex_include_stk->full_name); + LexAttachDoc(rx->cc1,rx->cc1->lex_include_stk,doc,, + doc->cur_entry,doc->cur_col); - rx->lx2=LexNew(,LF_KEEP_NEW_LINES|LF_DONT_FREE_BUF,doc->filename.name); - Free(rx->lx2->lfns[0].full_name); - LexAttachDoc(rx->lx2,&rx->lx2->lfns[0],doc,,doc->cur_entry,doc->cur_data_col); + rx->cc2=CmpCtrlNew(,CCF_KEEP_NEW_LINES|CCF_DONT_FREE_BUF,doc->filename.name); + Free(rx->cc2->lex_include_stk->full_name); + LexAttachDoc(rx->cc2,rx->cc2->lex_include_stk,doc,, + doc->cur_entry,doc->cur_col); rx->indent=QueVectU8New(doc->cur_entry->y); - Lex(rx->lx1); + Lex(rx->cc1); EdRIStmt(rx,FALSE); - LexDel(rx->lx1); - LexDel(rx->lx2); + CmpCtrlDel(rx->cc1); + CmpCtrlDel(rx->cc2); result=rx->indent; Free(rx); return result; @@ -284,7 +326,8 @@ class CRenum I64 EdRAGetU8(CDoc *doc) { I64 result=-1; - while (doc->cur_entry!=doc && doc->cur_entry->type&DOCET_SELECTED && result<0) { + while (doc->cur_entry!=doc && + doc->cur_entry->type&DOCET_SELECTED && result<0) { result=EdCurU8(doc); EdCursorRight(doc); } @@ -307,7 +350,7 @@ U0 EdRACollect(CDoc *doc,CRenum *root) StrCpy(buf,"@@"); i=2; while (ch>=0 && i=0 && Bt(chars_bitmap_white_space,ch)) + while (ch>=0 && Bt(chars_bmp_white_space,ch)) ch=EdRAGetU8(doc); if (ch==':') { ch=EdRAGetU8(doc); @@ -327,7 +370,7 @@ U0 EdRACollect(CDoc *doc,CRenum *root) } } } - //This is needed because we moved the +//This is needed because we moved the //cursor and it didn't recalc. DocRecalc(doc); } @@ -337,7 +380,7 @@ U0 EdRenumAsm(CDoc *doc) Bool unlock=DocLock(doc); I64 num=0; CRenum root,*tempr,*tempr1; - U8 buf[sizeof(CEdFindText.find_text)], + U8 buf[sizeof(CEdFindText.find_text)], buf2[sizeof(CEdFindText.find_text)]; QueInit(&root); @@ -367,7 +410,7 @@ U0 EdRenumAsm(CDoc *doc) DocUnlock(doc); } -U0 EdCodeTools2(CDoc *doc,I64 tool_action) +U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) { Bool okay,unlock=DocLock(doc),start_of_line=TRUE; CDocEntry *doc_e,*doc_ne; @@ -395,28 +438,32 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) Free(st); WinHorz(Fs->win_left,Fs->win_right, task); WinVert(Fs->win_top, Fs->win_bottom,task); - if (ScanResult(tempc,&r)) { + if (JobResultScan(tempc,&r)) { st=DirFile(doc->filename.name,,"PRJ.Z"); prj_file=FileNameAbs(st,FUF_Z_OR_NOT_Z); Free(st); if (FileFind(prj_file)) { st2=DirFile(prj_file), - st=MStrPrint("Cd(\"%s\");",st2); + st=MStrPrint("Cd(\"%s\");",st2); Free(st2); - tempc=TaskExe(task,Fs,st,1<filename.name,"Load","CPP.Z"); @@ -428,7 +475,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) st=MStrPrint("\"$$WW,1$$\";ExeFile(\"%s\",TRUE);",doc->filename.name); tempc=TaskExe(task,Fs,st,1<cur_entry->y; + EdReplaceTroubleAll(doc,TRUE,FALSE); + DocLineNumGoTo(doc,start_y+1); if (EdGoToFun(doc,FALSE,FALSE)) { start_y=doc->cur_entry->y; indent=EdRICode(doc); DocUnlock(doc); - Snd(2000); Sleep(150); Snd(0); - Sleep(100); - Snd(2000); Sleep(150); Snd(0); + if (beep) { + Snd(2000); Sleep(150); Snd(0); + Sleep(100); + Snd(2000); Sleep(150); Snd(0); + } DocLock(doc); EdRemFunLeadingSpace(doc); DocLineNumGoTo(doc,start_y+1); @@ -460,7 +512,8 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) while (start_y<=doc_e->ycur_entry && !(doc_e->de_flags&(DOCEG1_DONT_EDIT-DOCEF_SCROLLING_X))) { - if (doc_e->type_u8==DOCT_NEW_LINE||doc_e->type_u8==DOCT_SOFT_NEW_LINE) + if (doc_e->type_u8==DOCT_NEW_LINE|| + doc_e->type_u8==DOCT_SOFT_NEW_LINE) start_of_line=TRUE; else { if (start_of_line) { @@ -473,7 +526,8 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) doc_ne->x=x; doc_ne->y=doc_e->y; doc_ne->page_line_num=doc_e->page_line_num; - MemCpy(&doc_ne->settings,&doc_e->settings,sizeof(CDocSettings)); + MemCpy(&doc_ne->settings, + &doc_e->settings,sizeof(CDocSettings)); QueIns(doc_ne,doc_e->last); i-=8; x+=8; @@ -490,7 +544,8 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) doc_ne->x=x; doc_ne->y=doc_e->y; doc_ne->page_line_num=doc_e->page_line_num; - MemCpy(&doc_ne->settings,&doc_e->settings,sizeof(CDocSettings)); + MemCpy(&doc_ne->settings, + &doc_e->settings,sizeof(CDocSettings)); QueIns(doc_ne,doc_e->last); } } @@ -501,6 +556,9 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) } QueVectU8Del(indent); } + start_y=doc->cur_entry->y; + EdReplaceTroubleAll(doc,FALSE,FALSE); + DocLineNumGoTo(doc,start_y+1); break; case EF_RENUM_ASM: if (EdGoToFun(doc,FALSE,TRUE)) { @@ -514,9 +572,11 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action) DocRecalc(doc); } DocUnlock(doc); - Snd(2000); Sleep(150); Snd(0); - Sleep(100); - Snd(2000); Sleep(150); Snd(0); + if (beep) { + Snd(2000); Sleep(150); Snd(0); + Sleep(100); + Snd(2000); Sleep(150); Snd(0); + } DocLock(doc); EdRenumAsm(doc); } @@ -546,7 +606,7 @@ U0 EdPopUpChSC(I64 *_ch,I64 *_sc) U0 EdChSC(CDoc *doc) { I64 ch,sc; - U8 buf[136]; + U8 buf[STR_LEN]; StrPrint(buf,"EdPopUpChSC(%d,%d);",&ch,&sc); PopUp(buf,Fs); if (ch==CH_BACKSPACE) @@ -569,7 +629,7 @@ U0 EdChSC(CDoc *doc) DocPrint(doc,"CH_SPACE,0x%X",sc); else if (ch==CH_SHIFT_SPACE) DocPrint(doc,"CH_SHIFT_SPACE,0x%X",sc); - else if (Bt(chars_bitmap_displayable,ch)) + else if (Bt(chars_bmp_displayable,ch)) DocPrint(doc,"'%c',0x%X",ch,sc); else DocPrint(doc,"0x%X,0x%X",ch,sc); diff --git a/Adam/DolDoc/DocCtrlL.CPP b/Adam/DolDoc/DocCtrlL.CPP index 822d7eb..7a740ef 100644 --- a/Adam/DolDoc/DocCtrlL.CPP +++ b/Adam/DolDoc/DocCtrlL.CPP @@ -151,7 +151,8 @@ class CEdProject hide; }; -Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html_link) +Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up, + Bool *_quote,U8 **_html_link) { I64 i; CEdFileLink *e=CAlloc(sizeof(CEdFileLink)); @@ -160,7 +161,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html e->num=1; switch (type) { case LK_FILE: - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->file); @@ -170,7 +171,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_PLAIN: - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->file); @@ -180,7 +181,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_FILE_ANCHOR: - if (DocFormDo(e,"CEdFileAnchorLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdFileAnchorLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->aux); @@ -190,7 +191,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_FILE_FIND: - if (DocFormDo(e,"CEdFileFindLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdFileFindLink",,,ctrl_L_footer)) { result=TRUE; if (e->num==1) { if (!*e->tag) @@ -208,7 +209,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_PLAIN_FIND: - if (DocFormDo(e,"CEdFileFindLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdFileFindLink",,,ctrl_L_footer)) { result=TRUE; if (e->num==1) { if (!*e->tag) @@ -226,7 +227,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_FILE_LINE: - if (DocFormDo(e,"CEdFileLineLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdFileLineLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->file); @@ -236,7 +237,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_PLAIN_LINE: - if (DocFormDo(e,"CEdFileLineLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdFileLineLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->file); @@ -246,7 +247,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_MAN_PAGE: - if (DocFormDo(e,"CEdManPageLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdManPageLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->aux); @@ -256,7 +257,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_PLACE_ANCHOR: - if (DocFormDo(e,"CEdPlaceAnchor",,,ctrl_L_footer)) { + if (DocForm(e,"CEdPlaceAnchor",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) { if (e->hide) @@ -271,7 +272,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html case LK_BIBLE_FIND: //TODO i=PopUpPickDefineSub("ST_BIBLE_BOOKS"); if (i>=0) { - if (DocFormDo(e,"CEdBibleLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdBibleLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=MStrPrint("%Z,%s",i,"ST_BIBLE_BOOKS",e->aux); @@ -283,7 +284,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html break; case LK_DEF: e->num=-1; - if (DocFormDo(e,"CEdDefLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdDefLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->aux); @@ -297,7 +298,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html } break; case LK_HELP_INDEX: - if (DocFormDo(e,"CEdManPageLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdManPageLink",,,ctrl_L_footer)) { result=TRUE; if (!*e->tag) *_tag=StrNew(e->aux); @@ -308,7 +309,7 @@ Bool GetLink(I64 type,U8 **_tag,U8 **_link,Bool *_pop_up,Bool *_quote,U8 **_html break; case LK_ADDR: e->num=DFT_ADDR_LINK_BIN_SIZE; - if (DocFormDo(e,"CEdAddrLink",,,ctrl_L_footer)) { + if (DocForm(e,"CEdAddrLink",,,ctrl_L_footer)) { result=TRUE; if (e->num==DFT_ADDR_LINK_BIN_SIZE) { if (!*e->tag) @@ -363,7 +364,8 @@ U0 EdInsLink() break; default: if (html_link) - st=MStrPrint("$$LK%s,\"%Q\",A=\"%Q\",HTML=\"%Q\"$$",pop_up_st,tag,link,html_link); + st=MStrPrint("$$LK%s,\"%Q\",A=\"%Q\",HTML=\"%Q\"$$", + pop_up_st,tag,link,html_link); else st=MStrPrint("$$LK%s,\"%Q\",A=\"%Q\"$$",pop_up_st,tag,link); } @@ -442,7 +444,7 @@ U0 EdInsPageSetting() CEdPageSetting1 *e=CAlloc(sizeof(CEdPageSetting1)); if (type>=0) { if (type==DOCT_RIGHT_MARGIN||type==DOCT_PAGE_LEN) { - if (DocFormDo(e(CEdPageSetting2 *))) { + if (DocForm(e(CEdPageSetting2 *))) { if (e->winrel) { if (*e->val) "$$%Z+WR,%s$$",type,"ST_DOC_CMDS",e->val; @@ -456,7 +458,7 @@ U0 EdInsPageSetting() } } } else { - if (DocFormDo(e)) { + if (DocForm(e)) { if (*e->val) "$$%Z,%s$$",type,"ST_DOC_CMDS",e->val; else @@ -506,18 +508,23 @@ class CEdDollarText underline fmtstr "$$CB,\"Underline\"$$\n", tree fmtstr "$$CB,\"Tree\"$$\n", collapsed fmtstr "$$CB,\"Collapsed\"$$\n"; - U8 scroll_x [512] fmtstr "$$DA-P,511,A=\"Scroll X Length Expression:%s\"$$\n", - shift_x [512] fmtstr "$$DA-P,511,A=\"X Offset Expression :%s\"$$\n", - shift_y [512] fmtstr "$$DA-P,511,A=\"Y Offset Expression :%s\"$$\n", - define_str[512] fmtstr "$$DA-P,511,A=\"Define Str :%s\"$$\n", - html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n"; + U8 scroll_x [512] + fmtstr "$$DA-P,511,A=\"Scroll X Length Expression:%s\"$$\n", + shift_x [512] + fmtstr "$$DA-P,511,A=\"X Offset Expression :%s\"$$\n", + shift_y [512] + fmtstr "$$DA-P,511,A=\"Y Offset Expression :%s\"$$\n", + define_str[512] + fmtstr "$$DA-P,511,A=\"Define Str :%s\"$$\n", + html_link[512] + fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n"; }; U0 EdInsDollarText() { U8 *st,buf[512]; CEdDollarText *e=CAlloc(sizeof(CEdDollarText)); - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->left_x ) CatPrint(buf,"+LX"); if (e->center_x) CatPrint(buf,"+CX"); @@ -561,7 +568,7 @@ class CEdSong U0 EdInsSong() { CEdSong *e=CAlloc(sizeof(CEdSong)); - if (DocFormDo(e,,,,ctrl_L_footer)) + if (DocForm(e,,,,ctrl_L_footer)) "$$SO,\"%Q\",A=\"%s\"$$",e->tag,e->song; Free(e); } @@ -574,7 +581,7 @@ class CEdHighlight U0 EdInsHighlight() { CEdHighlight *e=CAlloc(sizeof(CEdHighlight)); - if (DocFormDo(e,,,,ctrl_L_footer)) + if (DocForm(e,,,,ctrl_L_footer)) "$$HL,%d$$",e->highlight_on; Free(e); } @@ -587,16 +594,19 @@ class CEdHtmlCode U0 EdInsHtml() { CEdHtmlCode *e=CAlloc(sizeof(CEdHtmlCode)); - if (DocFormDo(e,,,,ctrl_L_footer)) + if (DocForm(e,,,,ctrl_L_footer)) "$$HC,\"%Q\"$$",e->tag; Free(e); } class CEdMacroMenu { - U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n", - left_macro[512] fmtstr "$$DA-P,511,A=\"Left Click Macro :%s\"$$\n", - left_exp[512] fmtstr "$$DA-P,511,A=\"Left Click Expression :%s\"$$\n"; + U8 tag[512] + fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n", + left_macro[512] + fmtstr "$$DA-P,511,A=\"Left Click Macro :%s\"$$\n", + left_exp[512] + fmtstr "$$DA-P,511,A=\"Left Click Expression :%s\"$$\n"; Bool popup fmtstr "$$CB,\"PopUp\"$$\n", left_is_auto fmtstr "$$CB,\"Left is AutoStr\"$$\n", left_x fmtstr "$$CB,\"Left X \"$$\n", @@ -607,9 +617,12 @@ class CEdMacroMenu invert fmtstr "$$CB,\"Invert\"$$\n", underline fmtstr "$$CB,\"Underline\"$$\n", escape fmtstr "$$CB,\"Escape\"$$\n"; - U8 scroll_x[512] fmtstr "$$DA-P,511,A=\"Scroll X Length Expression:%s\"$$\n", - shift_x[512] fmtstr "$$DA-P,511,A=\"X Offset Expression :%s\"$$\n", - shift_y[512] fmtstr "$$DA-P,511,A=\"Y Offset Expression :%s\"$$\n"; + U8 scroll_x[512] + fmtstr "$$DA-P,511,A=\"Scroll X Length Expression:%s\"$$\n", + shift_x[512] + fmtstr "$$DA-P,511,A=\"X Offset Expression :%s\"$$\n", + shift_y[512] + fmtstr "$$DA-P,511,A=\"Y Offset Expression :%s\"$$\n"; }; U0 EdInsMacroMenu(Bool is_macro) @@ -618,7 +631,7 @@ U0 EdInsMacroMenu(Bool is_macro) CEdMacroMenu *e=CAlloc(sizeof(CEdMacroMenu)); e->underline=TRUE; e->escape=TRUE; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->popup) CatPrint(buf,"+PU-X"); if (e->left_x ) CatPrint(buf,"+LX"); @@ -682,7 +695,7 @@ U0 EdInsButton() U8 *st,buf[512]; CEdButton *e=CAlloc(sizeof(CEdButton)); e->escape=TRUE; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->popup) CatPrint(buf,"+PU-X"); if (e->left_x ) CatPrint(buf,"+LX"); @@ -741,7 +754,7 @@ U0 EdInsCursorMovement() { U8 buf[512]; CEdCursorMovement *e=CAlloc(sizeof(CEdCursorMovement)); - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->left_x ) CatPrint(buf,"+LX"); if (e->center_x) CatPrint(buf,"+CX"); @@ -785,7 +798,7 @@ U0 EdInsData() e->term=TRUE; e->len=512; e->type=RT_I64; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->type==RT_I64) *raw_type=0; @@ -815,7 +828,7 @@ U0 EdInsCheckBox() U8 *st,buf[512],raw_type[16]; CEdCheckBox *e=CAlloc(sizeof(CEdCheckBox)); e->type=RT_I8; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->type==RT_I8) *raw_type=0; @@ -842,7 +855,7 @@ U0 EdInsLst() U8 *st1,*st2,buf[512],raw_type[16]; CEdLst *e=CAlloc(sizeof(CEdLst)); e->type=RT_I64; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (e->type==RT_I64) *raw_type=0; @@ -879,7 +892,7 @@ U0 EdInsHexEd() e->cnt=128; e->cols=4; e->zero=TRUE; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (!e->zero) CatPrint(buf,"-Z"); if (e->refresh) CatPrint(buf,"+RD"); @@ -903,18 +916,18 @@ U0 EdInsBinary(I64 bin_num,I64 type) StrPrint(e->tag,"<%d>",bin_num); e->bin_num=bin_num; e->bin_ptr_link_bin_num=1; - if (DocFormDo(e,,, -"Note: Normally, you enter no file,\n" -"just a bin num. If You enter a\n" -"file, enter a file bin num or a file\n" -"bin tag.\n\n",ctrl_L_footer)) { + if (DocForm(e,,, + "Note: Normally, you enter no file,\n" + "just a bin num. If You enter a\n" + "file, enter a file bin num or a file\n" + "bin tag.\n\n",ctrl_L_footer)) { if (*e->bin_ptr_link_file) { if (*e->bin_ptr_link_tag) "$$%Z,\"%Q\",BI=%d,BP=\"%s,%s\"$$",type,"ST_DOC_CMDS",e->tag,e->bin_num, - e->bin_ptr_link_file,e->bin_ptr_link_tag; + e->bin_ptr_link_file,e->bin_ptr_link_tag; else "$$%Z,\"%Q\",BI=%d,BP=\"%s,%d\"$$",type,"ST_DOC_CMDS",e->tag,e->bin_num, - e->bin_ptr_link_file,e->bin_ptr_link_bin_num; + e->bin_ptr_link_file,e->bin_ptr_link_bin_num; } else { if (DocBinFindNum(DocPut,e->bin_num)) "$$%Z,\"%Q\",BI=%d$$",type,"ST_DOC_CMDS",e->tag,e->bin_num; @@ -938,12 +951,12 @@ U0 EdInsTree() CEdTree *e=CAlloc(sizeof(CEdTree)); e->collapsed=TRUE; e->indent=2; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; if (!e->collapsed) CatPrint(buf,"-C"); st1=MStrPrint("%q",e->tag); st2=MStrPrint("$$TR%s,\"%Q\"$$\n$$ID,%d$$*\n$$ID,%d$$", - buf,st1,e->indent,-e->indent); + buf,st1,e->indent,-e->indent); DocPrintAtomic(DocPut,"%s",st2); Free(st1); Free(st2); @@ -1002,16 +1015,16 @@ U0 EdInsDollarCmd() break; case DOCT_HTML_CODE: EdInsHtml; - } + } } -#define DVT_SPRITE 0 -#define DVT_SPRITE_PTR 1 -#define DVT_DUP_SPRITE 2 -#define DVT_SPRITE_SIZE 3 -#define DVT_SPRITE_MACRO 4 -#define DVT_SPRITE_MENU 5 -#define DVT_SPRITE_LINK 6 +#define EST_SPRITE 0 +#define EST_SPRITE_PTR 1 +#define EST_DUP_SPRITE 2 +#define EST_SPRITE_SIZE 3 +#define EST_SPRITE_MACRO 4 +#define EST_SPRITE_MENU 5 +#define EST_SPRITE_LINK 6 I64 PopUpSpriteType() { @@ -1019,13 +1032,13 @@ I64 PopUpSpriteType() CDoc *doc=DocNew; DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Graphic Resource Menu\"$$\n" "$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/Resource.TXT.Z\"$$\n" - "\n$$LTBLUE$$$$MU,\"Make Sprite\",LE=DVT_SPRITE$$\n" - "$$MU,\"Pointer to Sprite\",LE=DVT_SPRITE_PTR$$\n" - "$$MU,\"Duplicate Sprite\",LE=DVT_DUP_SPRITE$$\n" - "$$MU,\"Sprite Size (not really needed)\",LE=DVT_SPRITE_SIZE$$\n" - "$$MU,\"Sprite Macro (Icon)\",LE=DVT_SPRITE_MACRO$$\n" - "$$MU,\"Sprite Menu Item\",LE=DVT_SPRITE_MENU$$\n" - "$$MU,\"Sprite Link\",LE=DVT_SPRITE_LINK$$\n" + "\n$$LTBLUE$$$$MU,\"Make Sprite\",LE=EST_SPRITE$$\n" + "$$MU,\"Pointer to Sprite\",LE=EST_SPRITE_PTR$$\n" + "$$MU,\"Duplicate Sprite\",LE=EST_DUP_SPRITE$$\n" + "$$MU,\"Sprite Size (not really needed)\",LE=EST_SPRITE_SIZE$$\n" + "$$MU,\"Sprite Macro (Icon)\",LE=EST_SPRITE_MACRO$$\n" + "$$MU,\"Sprite Menu Item\",LE=EST_SPRITE_MENU$$\n" + "$$MU,\"Sprite Link\",LE=EST_SPRITE_LINK$$\n" "\n$$MU,\"Abort\",LE=DOCM_CANCEL$$\n\n"); i=PopUpMenu(doc); DocDel(doc); @@ -1074,14 +1087,14 @@ U8 *EdSprite(I64 bin_num) CEdMacroSprite *e=CAlloc(sizeof(CEdMacroSprite)); *buf=0; switch (type) { - case DVT_SPRITE: + case EST_SPRITE: StrPrint(e->tag,"<%d>",bin_num); - if (DocFormDo(e,"CEdJustSprite",,,ctrl_L_footer)) + if (DocForm(e,"CEdJustSprite",,,ctrl_L_footer)) st1=MStrPrint("\"%Q\"",e->tag); break; - case DVT_SPRITE_MACRO: + case EST_SPRITE_MACRO: e->escape=TRUE; - if (DocFormDo(e,,,,ctrl_L_footer)) { + if (DocForm(e,,,,ctrl_L_footer)) { CatPrint(buf,"+UL"); if (e->is_auto)CatPrint(buf,"+LA"); if (e->popup) CatPrint(buf,"+PU"); @@ -1091,26 +1104,26 @@ U8 *EdSprite(I64 bin_num) Free(st); } break; - case DVT_SPRITE_MENU: + case EST_SPRITE_MENU: e->escape=TRUE; - if (DocFormDo(e,"CEdMenuSprite",,,ctrl_L_footer)) { + if (DocForm(e,"CEdMenuSprite",,,ctrl_L_footer)) { if (e->escape) CatPrint(buf,"+X"); st1=MStrPrint("\"%Q\",LE=%s",e->tag,e->exp); } break; - case DVT_SPRITE_LINK: + case EST_SPRITE_LINK: CatPrint(buf,"+L"); st1=EdSpriteLink(&pop_up,&html_link); if (pop_up) CatPrint(buf,"+PU"); break; - case DVT_SPRITE_PTR: + case EST_SPRITE_PTR: EdInsBinary(--bin_num,DOCT_INS_BINARY); break; - case DVT_SPRITE_SIZE: + case EST_SPRITE_SIZE: EdInsBinary(--bin_num,DOCT_INS_BINARY_SIZE); break; - case DVT_DUP_SPRITE: + case EST_DUP_SPRITE: EdInsBinary(--bin_num,DOCT_SPRITE); break; } diff --git a/Adam/DolDoc/DocEdA.CPP b/Adam/DolDoc/DocEdA.CPP index 0d558e0..04786e9 100644 --- a/Adam/DolDoc/DocEdA.CPP +++ b/Adam/DolDoc/DocEdA.CPP @@ -5,11 +5,13 @@ public I64 EdCurU8(CDoc *doc) Bool unlock=DocLock(doc); CDocEntry *doc_ce=doc->cur_entry; I64 result=-1; - if (doc_ce->type_u8==DOCT_TEXT && doc_ce->min_col<=doc->cur_data_colmax_col) - result=doc_ce->tag[doc->cur_data_col]; + if (doc_ce->type_u8==DOCT_TEXT && + doc_ce->min_col<=doc->cur_colmax_col) + result=doc_ce->tag[doc->cur_col]; else if (doc_ce->type_u8==DOCT_TAB) result='\t'; - else if (doc_ce->type_u8==DOCT_NEW_LINE || doc_ce->type_u8==DOCT_SOFT_NEW_LINE) + else if (doc_ce->type_u8==DOCT_NEW_LINE || + doc_ce->type_u8==DOCT_SOFT_NEW_LINE) result='\n'; if (unlock) DocUnlock(doc); @@ -22,11 +24,11 @@ public U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64) U8 *dst; Bool unlock=DocLock(doc); CDocEntry *doc_ce=doc->cur_entry,*original_ce=doc_ce,*doc_ne; - I64 cc=doc->cur_data_col,y=doc_ce->y; + I64 cc=doc->cur_col,y=doc_ce->y; if (sc!=MIN_I64) sc=sc.u32[0]; if (sc>=0 && sc&SCF_CTRL) { while (doc_ce->last!=doc && (doc_ce->last->y==y || - doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) + doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) doc_ce=doc_ce->last; //TODO: select? recurse? cc=doc_ce->min_col; } else { @@ -53,8 +55,10 @@ public U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64) } else { cc=doc_ce->min_col; while (doc_ce->last!=doc && - (doc_ce->last->type_u8==DOCT_SOFT_NEW_LINE || doc_ce->last->type_u8==DOCT_INDENT || - doc_ce->last->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + (doc_ce->last->type_u8==DOCT_SOFT_NEW_LINE || + doc_ce->last->type_u8==DOCT_INDENT || + doc_ce->last->de_flags + &(DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { doc_ce=doc_ce->last; if (sc>=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); @@ -79,7 +83,7 @@ public U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64) } } } - doc->cur_data_col=cc; + doc->cur_col=cc; doc->cur_entry=doc_ce; if (doc_ce!=original_ce) DocFormBwd(doc); @@ -93,12 +97,13 @@ public U0 EdCursorRight(CDoc *doc,I64 sc=MIN_I64) Bool unlock=DocLock(doc); U8 *dst; CDocEntry *doc_ce=doc->cur_entry,*original_ce=doc_ce,*doc_ne; - I64 cc=doc->cur_data_col,y=doc_ce->y,old_de_flags,old_color; + I64 cc=doc->cur_col,y=doc_ce->y,old_de_flags,old_color; if (sc!=MIN_I64) sc=sc.u32[0]; if (sc>=0 && sc&SCF_CTRL) { while (doc_ce!=doc && doc_ce->next->y==y && - doc_ce->next->type_u8!=DOCT_SOFT_NEW_LINE && doc_ce->next!=doc && (doc_ce->next->type_u8!=DOCT_NEW_LINE || !(doc->flags & DOCF_FORM)) || - doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) + doc_ce->next->type_u8!=DOCT_SOFT_NEW_LINE && doc_ce->next!=doc && + (doc_ce->next->type_u8!=DOCT_NEW_LINE || !(doc->flags & DOCF_FORM)) || + doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) doc_ce=doc_ce->next; if (doc_ce->max_col>doc_ce->min_col) cc=doc_ce->max_col-1; @@ -139,7 +144,8 @@ public U0 EdCursorRight(CDoc *doc,I64 sc=MIN_I64) if (cc<=doc_ce->min_col && sc>=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); doc_ce=doc_ce->next; - while (doc_ce!=doc && doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) { + while (doc_ce!=doc && doc_ce->de_flags + &(DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) { if (sc>=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); doc_ce=doc_ce->next; @@ -154,7 +160,7 @@ public U0 EdCursorRight(CDoc *doc,I64 sc=MIN_I64) } } } - doc->cur_data_col=cc; + doc->cur_col=cc; doc->cur_entry=doc_ce; if (doc_ce!=original_ce) DocFormFwd(doc); @@ -172,42 +178,42 @@ public U0 EdLineUp(CDoc *doc,I64 sc=MIN_I64) if (sc!=MIN_I64) sc=sc.u32[0]; if (doc_ce->type_u8==DOCT_HEX_ED) { - doc->cur_data_col=doc->cur_data_col-doc_ce->hex_ed_width*3; - if (doc->cur_data_col>=0) { + doc->cur_col=doc->cur_col-doc_ce->hex_ed_width*3; + if (doc->cur_col>=0) { if (unlock) DocUnlock(doc); return; } else - doc->cur_data_col=0; + doc->cur_col=0; } x=doc->x; y=doc->y; if (IsEditableText(doc_ce)) { - if (doc_ce->min_colcur_data_colmax_col-1) { - dst=doc_ce->tag+doc->cur_data_col; + if (doc_ce->min_colcur_colmax_col-1) { + dst=doc_ce->tag+doc->cur_col; doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); *dst=0; - doc_ne->x=doc_ce->x+doc->cur_data_col; - doc_ce->max_col=doc->cur_data_col; + doc_ne->x=doc_ce->x+doc->cur_col; + doc_ce->max_col=doc->cur_col; QueIns(doc_ne,doc_ce); - } else - if (doc->cur_data_col==doc_ce->min_col && doc_ce->last!=doc) - doc_ce=doc_ce->last; - } else - if (doc_ce->last!=doc) + } else if (doc->cur_col==doc_ce->min_col && doc_ce->last!=doc) doc_ce=doc_ce->last; + } else if (doc_ce->last!=doc) + doc_ce=doc_ce->last; if (sc>=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); doc->cur_entry=doc_ce; DocFormBwd(doc); doc_ce=doc->cur_entry; - while (doc_ce->last!=doc && (doc_ce->y>=y || doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + while (doc_ce->last!=doc && (doc_ce->y>=y || + doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { doc_ce=doc_ce->last; if (sc>=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); } y=doc_ce->y; doc->y=y; - while (doc_ce!=doc && (doc_ce->y>=y && doc_ce->x>=x || doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + while (doc_ce!=doc && (doc_ce->y>=y && doc_ce->x>=x || + doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { if (sc>=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); doc_ce=doc_ce->last; @@ -222,38 +228,35 @@ public U0 EdLineUp(CDoc *doc,I64 sc=MIN_I64) } else { if (doc_ce->next->x==x) { doc_ce=doc_ce->next; - if (doc->flags & DOCF_FORM) { + if (doc->flags & DOCF_FORM) while (doc_ce->next->x==x && - (!Bt(doldoc.type_flags_form,doc_ce->type_u8) && - !(doc_ce->de_flags&DOCEF_LINK)|| - doc_ce->de_flags&DOCEF_SKIP_IN_FORM)) + (!Bt(doldoc.type_flags_form,doc_ce->type_u8) && + !(doc_ce->de_flags&DOCEF_LINK)|| + doc_ce->de_flags&DOCEF_SKIP_IN_FORM)) doc_ce=doc_ce->next; - } } } } if (doc_ce->de_flags&DOCEF_TAG) { - doc->cur_data_col=x-doc_ce->x; + doc->cur_col=x-doc_ce->x; if (IsEditableText(doc_ce)) { - if (doc->cur_data_col>doc_ce->max_col) - doc->cur_data_col=doc_ce->max_col; - } else { - if (doc->cur_data_col>=doc_ce->max_col) - doc->cur_data_col=doc_ce->max_col-1; - } - if (doc->cur_data_colmin_col) - doc->cur_data_col=doc_ce->min_col; + if (doc->cur_col>doc_ce->max_col) + doc->cur_col=doc_ce->max_col; + } else if (doc->cur_col>=doc_ce->max_col) + doc->cur_col=doc_ce->max_col-1; + if (doc->cur_colmin_col) + doc->cur_col=doc_ce->min_col; } else { if (doc_ce->type_u8==DOCT_HEX_ED) { - doc->cur_data_col=RoundI64((doc_ce->len-1)*3,doc_ce->hex_ed_width*3); - if (doc->cur_data_col<0) - doc->cur_data_col=0; + doc->cur_col=RoundI64((doc_ce->len-1)*3,doc_ce->hex_ed_width*3); + if (doc->cur_col<0) + doc->cur_col=0; } else - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; } if (IsEditableText(doc_ce) && doc_ce->xcur_data_colmax_col-1) { - dst=doc_ce->tag+doc->cur_data_col; + if (doc->cur_colmax_col-1) { + dst=doc_ce->tag+doc->cur_col; doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); *dst=0; if (sc>=0) { @@ -262,16 +265,16 @@ public U0 EdLineUp(CDoc *doc,I64 sc=MIN_I64) else doc_ne->type=doc_ce->type & ~DOCET_SELECTED; } - doc_ne->x=doc_ce->x+doc->cur_data_col; - doc_ce->max_col=doc->cur_data_col; + doc_ne->x=doc_ce->x+doc->cur_col; + doc_ce->max_col=doc->cur_col; QueIns(doc_ne,doc_ce); doc_ce=doc_ne; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; } } doc->cur_entry=doc_ce; DocFormFwd(doc); - doc->x=doc->cur_entry->x+doc->cur_data_col; + doc->x=doc->cur_entry->x+doc->cur_col; if (unlock) DocUnlock(doc); } @@ -285,11 +288,11 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64) CDocEntry *doc_ce=doc->cur_entry,*doc_ne,*doc_ce2; if (sc!=MIN_I64) sc=sc.u32[0]; if (doc_ce->type_u8==DOCT_HEX_ED) { - doc->cur_data_col=doc->cur_data_col+doc_ce->hex_ed_width*3; - if (doc->cur_data_col>=doc_ce->len*3) { + doc->cur_col=doc->cur_col+doc_ce->hex_ed_width*3; + if (doc->cur_col>=doc_ce->len*3) { doc->cur_entry=doc_ce=doc_ce->next; - doc->cur_data_col=doc_ce->min_col; - doc->x=doc_ce->x+doc->cur_data_col; + doc->cur_col=doc_ce->min_col; + doc->x=doc_ce->x+doc->cur_col; doc->y=doc_ce->y; } if (unlock) @@ -298,8 +301,8 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64) } x=doc->x; y=doc->y; if (IsEditableText(doc_ce)) { - if (doc->cur_data_col>doc_ce->min_col && doc->cur_data_colmax_col-1) { - dst=doc_ce->tag+doc->cur_data_col; + if (doc->cur_col>doc_ce->min_col && doc->cur_colmax_col-1) { + dst=doc_ce->tag+doc->cur_col; doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); *dst=0; if (sc>=0) { @@ -308,67 +311,68 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64) else doc_ne->type=doc_ce->type & ~DOCET_SELECTED; } - doc_ne->x=doc_ce->x+doc->cur_data_col; - doc_ce->max_col=doc->cur_data_col; + doc_ne->x=doc_ce->x+doc->cur_col; + doc_ce->max_col=doc->cur_col; QueIns(doc_ne,doc_ce); doc_ce=doc_ne; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; } } doc_ce2=doc_ce; - while (doc_ce!=doc && (doc_ce->y<=y || doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) + while (doc_ce!=doc && (doc_ce->y<=y || + doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) doc_ce=doc_ce->next; y=doc_ce->y; doc->y=y; - while (doc_ce!=doc && (doc_ce->y<=y && doc_ce->x<=x || doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + while (doc_ce!=doc && (doc_ce->y<=y && doc_ce->x<=x || + doc_ce->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { old_de_flags=doc_ce->de_flags; old_color=doc_ce->type; doc_ce=doc_ce->next; } - if (doc_ce->last!=doc && (doc_ce->x>x || doc_ce->y>y)) { + if (doc_ce->last!=doc && (doc_ce->x>x && doc_ce->last->y>=y || doc_ce->y>y)) { doc_ce=doc_ce->last; doc->cur_entry=doc_ce; - if (!((doc_ce->type_u8==DOCT_NEW_LINE || doc_ce->type_u8==DOCT_SOFT_NEW_LINE || doc_ce->type_u8==DOCT_INDENT) && - (doc_ce->last->type_u8==DOCT_NEW_LINE || doc_ce->last->type_u8==DOCT_SOFT_NEW_LINE || doc_ce->last->type_u8==DOCT_INDENT))) + if (!((doc_ce->type_u8==DOCT_NEW_LINE || + doc_ce->type_u8==DOCT_SOFT_NEW_LINE || + doc_ce->type_u8==DOCT_INDENT) && + (doc_ce->last->type_u8==DOCT_NEW_LINE || + doc_ce->last->type_u8==DOCT_SOFT_NEW_LINE || + doc_ce->last->type_u8==DOCT_INDENT))) DocFormBwd(doc); doc_ce=doc->cur_entry; } while (doc_ce2!=doc && (doc_ce2!=doc_ce || IsEditableText(doc_ce))) { - if (doc_ce2->yxde_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP) || - doc_ce2->x==x && !doc_ce2->max_col && - Bt(doldoc.type_flags_nontag_invisible,doc_ce2->type_u8)) { - if (sc>=0) - BEqu(&doc_ce2->type,DOCEt_SELECTED,sc&SCF_SHIFT); - } + if ((doc_ce2->yxde_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP) || + doc_ce2->x==x && !doc_ce2->max_col && + Bt(doldoc.type_flags_nontag_invisible,doc_ce2->type_u8)) && sc>=0) + BEqu(&doc_ce2->type,DOCEt_SELECTED,sc&SCF_SHIFT); if (doc_ce2==doc_ce) break; doc_ce2=doc_ce2->next; } if (doc_ce->de_flags&DOCEF_TAG) { - doc->cur_data_col=x-doc_ce->x; + doc->cur_col=x-doc_ce->x; if (IsEditableText(doc_ce)) { - if (doc->cur_data_col>doc_ce->max_col) - doc->cur_data_col=doc_ce->max_col; - } else { - if (doc->cur_data_col>=doc_ce->max_col) - doc->cur_data_col=doc_ce->max_col-1; - } - if (doc->cur_data_colmin_col) - doc->cur_data_col=doc_ce->min_col; + if (doc->cur_col>doc_ce->max_col) + doc->cur_col=doc_ce->max_col; + } else if (doc->cur_col>=doc_ce->max_col) + doc->cur_col=doc_ce->max_col-1; + if (doc->cur_colmin_col) + doc->cur_col=doc_ce->min_col; } else - doc->cur_data_col=doc_ce->min_col; - if (IsEditableText(doc_ce)) { - if (doc_ce->min_colcur_data_colmax_col-1) { - dst=doc_ce->tag+doc->cur_data_col; - doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); - *dst=0; - doc_ne->type=DOCT_TEXT | old_color & -0x100; - doc_ne->de_flags=old_de_flags|doldoc.dft_de_flags[DOCT_TEXT]; - doc_ce->max_col=doc->cur_data_col; - doc_ne->x=doc_ce->x+doc->cur_data_col; - QueIns(doc_ne,doc_ce); - doc_ce=doc_ne; - doc->cur_data_col=doc_ce->min_col; - } + doc->cur_col=doc_ce->min_col; + if (IsEditableText(doc_ce)&&doc_ce->min_colcur_colmax_col-1) { + dst=doc_ce->tag+doc->cur_col; + doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); + *dst=0; + doc_ne->type=DOCT_TEXT | old_color & -0x100; + doc_ne->de_flags=old_de_flags|doldoc.dft_de_flags[DOCT_TEXT]; + doc_ce->max_col=doc->cur_col; + doc_ne->x=doc_ce->x+doc->cur_col; + QueIns(doc_ne,doc_ce); + doc_ce=doc_ne; + doc->cur_col=doc_ce->min_col; } doc->cur_entry=doc_ce; DocFormFwd(doc); @@ -378,7 +382,7 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); doc_ce=doc_ce->next; } - doc->x=doc->cur_entry->x+doc->cur_data_col; + doc->x=doc->cur_entry->x+doc->cur_col; if (unlock) DocUnlock(doc); } @@ -393,19 +397,19 @@ U0 EdDelChar(CDoc *doc) DocUnlock(doc); return; } - if (doc_ce->max_col!=0 && (IsEditableText(doc_ce)||doc_ce->type_u8==DOCT_DATA)) { - if (doc_ce->type_u8==DOCT_DATA) { - if (doc_ce->de_flags & DOCEF_HAS_TERMINATOR && doc->cur_data_col==doc_ce->max_col-1) { - if (unlock) - DocUnlock(doc); - return; - } + if (doc_ce->max_col!=0 && + (IsEditableText(doc_ce)||doc_ce->type_u8==DOCT_DATA)) { + if (doc_ce->type_u8==DOCT_DATA && doc_ce->de_flags & DOCEF_HAS_TERMINATOR && + doc->cur_col==doc_ce->max_col-1) { + if (unlock) + DocUnlock(doc); + return; } - if (doc->cur_data_colmax_col) - StrCpy(doc_ce->tag+doc->cur_data_col,doc_ce->tag+doc->cur_data_col+1); - if (doc->cur_data_col>=doc_ce->max_col-1) { + if (doc->cur_colmax_col) + StrCpy(doc_ce->tag+doc->cur_col,doc_ce->tag+doc->cur_col+1); + if (doc->cur_col>=doc_ce->max_col-1) { doc->cur_entry=doc_ce->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } DocRemSoftNewLines(doc,doc->cur_entry); if (unlock) @@ -413,7 +417,7 @@ U0 EdDelChar(CDoc *doc) return; } doc->cur_entry=doc_ce->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; if (!(doc_ce->de_flags&DOCEF_FILTER_SKIP)) DocEntryDel(doc,doc_ce); DocRemSoftNewLines(doc,doc->cur_entry); @@ -441,7 +445,7 @@ U0 EdInsChar(I64 ch,I64 sc,CDoc *doc) I64 i,j,m,y=doc_ce->y; if (doc->flags & DOCF_IN_DOLLAR) { - if (!Bt(chars_bitmap_getkey,ch)) + if (!Bt(chars_bmp_getkey,ch)) goto ic_done; ChkDollarBufSize(doc); doc->dollar_buf[doc->dollar_buf_ptr++]=ch; @@ -460,22 +464,21 @@ U0 EdInsChar(I64 ch,I64 sc,CDoc *doc) } else goto ic_done; } - if (ch=='$$') { - if (!(doc->flags & (DOCF_PLAIN_TEXT | DOCF_PLAIN_TEXT_WITH_TABS))) { - doc->flags|=DOCF_IN_DOLLAR; - doc->dollar_buf_ptr=0; - doc->dollar_buf[doc->dollar_buf_ptr++]=ch; - goto ic_done; - } + if (ch=='$$' && !(doc->flags & (DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS))) { + doc->flags|=DOCF_IN_DOLLAR; + doc->dollar_buf_ptr=0; + doc->dollar_buf[doc->dollar_buf_ptr++]=ch; + goto ic_done; } if (ch=='\r') goto ic_done; ic_cont: if ((ch==CH_SPACE || ch=='\n') && - !(sc & (SCF_CTRL|SCF_SHIFT)) && - doc_ce->de_flags & (DOCEF_LINK|DOCEF_TREE|DOCEF_LST|DOCEF_CHECK_COLLAPSABLE| - DOCEF_LEFT_MACRO|DOCEF_LEFT_EXP|DOCEF_LEFT_CB|DOCEF_LEFT_AUTO | - DOCEF_RIGHT_MACRO|DOCEF_RIGHT_EXP|DOCEF_RIGHT_CB|DOCEF_RIGHT_AUTO)) { + !(sc & (SCF_CTRL|SCF_SHIFT)) && + doc_ce->de_flags & + (DOCEF_LINK|DOCEF_TREE|DOCEF_LST|DOCEF_CHECK_COLLAPSABLE| + DOCEF_LEFT_MACRO|DOCEF_LEFT_EXP|DOCEF_LEFT_CB|DOCEF_LEFT_AUTO | + DOCEF_RIGHT_MACRO|DOCEF_RIGHT_EXP|DOCEF_RIGHT_CB|DOCEF_RIGHT_AUTO)) { doc->cmd_U8=ch; DocEntryRun(doc,doc_ce,FALSE); DocLock(doc); @@ -486,7 +489,7 @@ ic_cont: b=doc_ce->data; else b=&doc_ce->data; - i=doc->cur_data_col; + i=doc->cur_col; j=i%(doc_ce->hex_ed_width*3); m=i/(doc_ce->hex_ed_width*3)*doc_ce->hex_ed_width; if (j>=doc_ce->hex_ed_width<<1) @@ -504,38 +507,36 @@ ic_cont: else b[m]=b[m] & 0xF | ch<<4; } - doc->cur_data_col++; + doc->cur_col++; goto ic_done; } if (doc->flags & DOCF_OVERSTRIKE) { - if (Bt(chars_bitmap_displayable,ch)) { + if (Bt(chars_bmp_displayable,ch)) { ic_overstrike_char: if (IsEditableText(doc_ce)) { - if (doc->cur_data_colmax_col) { - if (doc_ce->tag[doc->cur_data_col]) { - doc_ce->tag[doc->cur_data_col++]=ch; + if (doc->cur_colmax_col) { + if (doc_ce->tag[doc->cur_col]) { + doc_ce->tag[doc->cur_col++]=ch; goto ic_done; } } else { doc_ce=doc_ce->next; doc->cur_entry=doc_ce; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; goto ic_overstrike_char; } } else if (doc_ce->type_u8==DOCT_DATA) { if (doc_ce->de_flags & DOCEF_HAS_TERMINATOR) { - if (doc_ce->tag[doc->cur_data_col] && - doc->cur_data_colmin_col+doc_ce->len) { - doc_ce->tag[doc->cur_data_col++]=ch; - if ( ! doc_ce->tag[doc->cur_data_col]) { - doc_ce->tag[doc->cur_data_col]='_'; - doc_ce->tag[doc->cur_data_col+1]=0; + if (doc_ce->tag[doc->cur_col] && + doc->cur_colmin_col+doc_ce->len) { + doc_ce->tag[doc->cur_col++]=ch; + if ( ! doc_ce->tag[doc->cur_col]) { + doc_ce->tag[doc->cur_col]='_'; + doc_ce->tag[doc->cur_col+1]=0; } } - } else { - if (doc_ce->tag[doc->cur_data_col]) - doc_ce->tag[doc->cur_data_col++]=ch; - } + } else if (doc_ce->tag[doc->cur_col]) + doc_ce->tag[doc->cur_col++]=ch; goto ic_done; } b=MAlloc(2,doc->mem_task); @@ -548,7 +549,7 @@ ic_overstrike_char: } else if (ch=='\n') { while (doc->cur_entry->next!=doc && doc->cur_entry->y==y) doc->cur_entry=doc->cur_entry->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } else if (ch=='\t') { if (doc->flags&DOCF_FORM) goto ic_form_tab; @@ -567,12 +568,12 @@ ic_overstrike_char: DocInsEntry(doc,doc_ne); } else if (ch=='\t') { if (doc->flags&DOCF_FORM && - (Bt(doldoc.type_flags_form,doc->cur_entry->type_u8) || - doc->cur_entry->de_flags&DOCEF_LINK) && - !(doc->cur_entry->de_flags&DOCEF_SKIP_IN_FORM)) { + (Bt(doldoc.type_flags_form,doc->cur_entry->type_u8) || + doc->cur_entry->de_flags&DOCEF_LINK) && + !(doc->cur_entry->de_flags&DOCEF_SKIP_IN_FORM)) { ic_form_tab: doc->cur_entry=doc->cur_entry->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; DocFormFwd(doc); goto ic_done; } else { @@ -582,7 +583,7 @@ ic_form_tab: DocInsEntry(doc,doc_ne); } } else { - if (Bt(chars_bitmap_displayable,ch)) { + if (Bt(chars_bmp_displayable,ch)) { if (doc_ce->type_u8==DOCT_DATA) { i=doc_ce->len+doc_ce->min_col; if (doc_ce->de_flags & DOCEF_HAS_TERMINATOR) @@ -590,14 +591,14 @@ ic_form_tab: if (i>doc_ce->max_col) { b=doc_ce->tag; doc_ce->max_col++; - for (i=doc_ce->max_col;i>doc->cur_data_col;i--) + for (i=doc_ce->max_col;i>doc->cur_col;i--) b[i]=b[i-1]; - b[doc->cur_data_col++]=ch; + b[doc->cur_col++]=ch; } } else if (IsEditableText(doc_ce)) { dst=b=MAlloc(doc_ce->max_col+2,doc->mem_task); src=doc_ce->tag; - i=doc->cur_data_col; + i=doc->cur_col; while (i-->0) *dst++=*src++; *dst++=ch; @@ -605,7 +606,7 @@ ic_form_tab: Free(doc_ce->tag); doc_ce->tag=b; doc_ce->max_col++; - doc->cur_data_col++; + doc->cur_col++; } else { b=MAlloc(2,doc->mem_task); *b=ch; @@ -620,11 +621,10 @@ ic_form_tab: } ic_done: DocRemSoftNewLines(doc,doc->cur_entry); - if (doc->cur_entry->de_flags & DOCEF_UPDATE_DATA) { - if (doc->cur_entry->type_u8==DOCT_DATA || - doc->cur_entry->type_u8==DOCT_CHECK_BOX) + if (doc->cur_entry->de_flags & DOCEF_UPDATE_DATA && + (doc->cur_entry->type_u8==DOCT_DATA || + doc->cur_entry->type_u8==DOCT_CHECK_BOX)) DocDataScan(doc,doc->cur_entry); - } if (unlock) DocUnlock(doc); } @@ -637,7 +637,7 @@ U0 EdDelLine(CDoc *doc) while (doc_ce!=doc && doc_ce->y==y) doc_ce=doc_ce->next; doc->cur_entry=doc_ce; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; doc_ce=doc_ce->last; while (doc_ce!=doc && doc_ce->y==y) { doc_ce2=doc_ce->last; @@ -653,10 +653,12 @@ U0 DocEntryToggle(CDoc *doc) CDocEntry *doc_ce=doc->cur_entry,*cl1,*doc_ce2; U8 ch,*st,*st2; I64 i,j,k; - if (doc_ce!=doc && !(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS))) { - if (doc_ce->type_u8==DOCT_TEXT && - !(doc_ce->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && - !(doc_ce->type&DOCG_BL_IV_UL)) { + if (doc_ce!=doc && + !(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS))) { + if (doc_ce->type_u8==DOCT_TEXT && !(doc_ce->de_flags & + ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT| + DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && + !(doc_ce->type&DOCG_BL_IV_UL)) { doc_ce2=doc_ce->last; for (k=0;k<20;k++) { if (doc_ce2!=doc) { @@ -672,7 +674,7 @@ U0 DocEntryToggle(CDoc *doc) Free(doc_ce->tag); doc_ce->tag=st; doc_ce->max_col=i+j; - doc->cur_data_col+=i; + doc->cur_col+=i; DocEntryDel(doc,doc_ce2); } else if (doc_ce2->type_u8==DOCT_SOFT_NEW_LINE) DocEntryDel(doc,doc_ce2); @@ -706,24 +708,24 @@ U0 DocEntryToggle(CDoc *doc) } else break; } - i=doc->cur_data_col; + i=doc->cur_col; while (i>doc_ce->min_col && doc_ce->tag[i]!='$$') i--; - j=doc->cur_data_col+1; + j=doc->cur_col+1; while (jmax_col && doc_ce->tag[j]!='$$') j++; if (imin_col<=imax_col && - doc_ce->tag[i]=='$$' && doc_ce->tag[j]=='$$') { + doc_ce->tag[i]=='$$' && doc_ce->tag[j]=='$$') { ch=doc_ce->tag[j+1]; doc_ce->tag[j+1]=0; st=StrNew(doc_ce->tag+i); doc_ce->tag[j+1]=ch; StrCpy(doc_ce->tag+i,doc_ce->tag+j+1); - doc->cur_data_col=i; + doc->cur_col=i; st2=MStrPrint("%q",st); if (doc_ce=DocPrint(doc,st2)) { doc->cur_entry=doc_ce; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; } Free(st); Free(st2); diff --git a/Adam/DolDoc/DocEdB.CPP b/Adam/DolDoc/DocEdB.CPP index 0e4ef6d..682a79e 100644 --- a/Adam/DolDoc/DocEdB.CPP +++ b/Adam/DolDoc/DocEdB.CPP @@ -1,4 +1,4 @@ -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) {//$LK,"PutKey",A="MN:PutKey"$(ch,sc) at doc insert pt, cur_entry. @@ -16,7 +16,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (!Bt(doldoc.clean_scan_codes,sc.u8[0])) doc->flags|=DOCF_UNDO_DIRTY; DocCaptureUndo(doc); - if (Bt(chars_bitmap_getkey,ch) && + if (Bt(chars_bmp_getkey,ch) && !(sc&(SCF_CTRL|SCF_ALT))) { if (sc&SCF_KEY_DESC) { st=Char2KeyName(ch,FALSE); @@ -39,7 +39,8 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc&SCF_KEY_DESC) KeyDescSet("Win/Toggle Border"); else - WinBorder(Bt(&doc->win_task->display_flags,DISPLAYf_NO_BORDER),doc->win_task); + WinBorder(Bt(&doc->win_task->display_flags, + DISPLAYf_NO_BORDER),doc->win_task); break; case CH_CTRLC: if (sc&SCF_KEY_DESC) @@ -61,7 +62,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc&SCF_KEY_DESC) KeyDescSet("Cmd/Find Wizard"); else - GrepWiz; + FindWiz; } else { if (sc&SCF_KEY_DESC) KeyDescSet("Edit/Find & Replace"); @@ -87,21 +88,21 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) else { DocCaptureUndo(doc); doc_ce=doc->cur_entry; - if (doc->cur_data_col<=doc_ce->min_col) { + if (doc->cur_col<=doc_ce->min_col) { doc_ce=doc->cur_entry=doc_ce->last; if (doc_ce!=doc && doc_ce->type_u8==DOCT_SOFT_NEW_LINE) doc_ce=doc->cur_entry=doc_ce->last; if (doc_ce==doc || doc_ce->type_u8==DOCT_PMT) { doc_ce=doc->cur_entry=doc_ce->next; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; } else { - doc->cur_data_col=doc_ce->max_col; - if (doc->cur_data_col>doc_ce->min_col) - doc->cur_data_col--; + doc->cur_col=doc_ce->max_col; + if (doc->cur_col>doc_ce->min_col) + doc->cur_col--; EdDelChar(doc); } } else { - doc->cur_data_col--; + doc->cur_col--; EdDelChar(doc); } } @@ -164,7 +165,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) Ed("::/Home/PersonalNotes.TXT.Z"); else { m=DocRead("::/Home/PersonalMenu.TXT.Z"); - DocMenuDo(m); + DocMenu(m); DocDel(m); } } @@ -217,11 +218,11 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (doc_ce->type_u8==DOCT_SPRITE) EdSpriteEd(doc, (doc_ce->x-doc->line_start_col+doc_ce->max_col)*FONT_WIDTH, - (doc_ce->y-doc->cur_top_line_num)*FONT_HEIGHT); + (doc_ce->y-doc->top_line_num)*FONT_HEIGHT); else EdSpriteIns(doc, - (doc_ce->x+doc->cur_data_col-doc->line_start_col)*FONT_WIDTH, - (doc_ce->y-doc->cur_top_line_num)*FONT_HEIGHT); + (doc_ce->x+doc->cur_col-doc->line_start_col)*FONT_WIDTH, + (doc_ce->y-doc->top_line_num)*FONT_HEIGHT); DocLock(doc); } } @@ -249,7 +250,8 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (sc&SCF_KEY_DESC) KeyDescSet("Edit/Toggle Plain Text Display"); else - if (!(doc->flags&DOCF_FORM) || doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS)) + if (!(doc->flags&DOCF_FORM) || + doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_WITH_TABS)) DocFlagsToggle(doc,DOCF_PLAIN_TEXT); } break; @@ -404,7 +406,8 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) DocUnlock(doc); if (sc&SCF_SHIFT) { if (TaskValidate(sys_macro_util_task)) - SendMsg(sys_macro_util_task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(sys_macro_util_task, + MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); SysMacroStripKey(&sys_macro_root,ch,sc); PlaySysMacro; } else @@ -479,10 +482,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) else KeyDescSet("God Song"); } else { - //$LK,"::/Adam/God/HSNotes.TXT"$ - if (sc & SCF_SHIFT) +//$LK,"::/Adam/God/HSNotes.TXT"$ + if (sc & SCF_SHIFT) { + DocUnlock(doc); GodDoodle; - else + DocLock(doc); + } else GodSong; } break; @@ -493,7 +498,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) else KeyDescSet("God Word"); } else { - //$LK,"::/Adam/God/HSNotes.TXT"$ +//$LK,"::/Adam/God/HSNotes.TXT"$ FifoU8Flush(god.fifo); GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); if (sc & SCF_SHIFT) @@ -519,7 +524,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT); doc_ce=doc->cur_entry=doc_ce->next; } - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; DocFormBwd(doc); } } else if (sc&SCF_KEY_DESC) { @@ -545,7 +550,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) doc_ce=doc->cur_entry=doc_ce->last; } doc_ce=doc->cur_entry=doc->root.next; - doc->cur_data_col=doc_ce->min_col; + doc->cur_col=doc_ce->min_col; DocFormFwd(doc); } } else if (sc&SCF_KEY_DESC) { @@ -565,10 +570,11 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) } else { i=doc_ce->y+doc->win_task->win_height-1; if (doc_ce->type_u8==DOCT_HEX_ED) - i+=doc->cur_data_col/3/doc_ce->hex_ed_width; + i+=doc->cur_col/3/doc_ce->hex_ed_width; while (doc_ce!=doc && (doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->ytype_u8==DOCT_HEX_ED && doc_ce->y+doc->cur_data_col/3/doc_ce->hex_ed_widthtype_u8==DOCT_HEX_ED && + doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_widthcur_entry==doc_ce && doc_ce->type_u8!=DOCT_HEX_ED) @@ -586,10 +592,11 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) }else { i=doc_ce->y-(doc->win_task->win_height-1); if (doc_ce->type_u8==DOCT_HEX_ED) - i+=doc->cur_data_col/3/doc_ce->hex_ed_width; + i+=doc->cur_col/3/doc_ce->hex_ed_width; while (doc_ce->last!=doc && (doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->y>i || - doc_ce->type_u8==DOCT_HEX_ED && doc_ce->y+doc->cur_data_col/3/doc_ce->hex_ed_width>i) && + doc_ce->type_u8==DOCT_HEX_ED && + doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_width>i) && doc_ce->y!=doc->root.next->y) { EdLineUp(doc,sc); //paranoid check for stuck on same node @@ -693,15 +700,15 @@ public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...) DocPutKey(doc,ch,0); else while (ch=*ptr) { - if (!Bt(chars_bitmap_safe_dollar,ch) || - doc->flags & (DOCF_OVERSTRIKE | DOCF_IN_DOLLAR)) { + if (!Bt(chars_bmp_safe_dollar,ch) || + doc->flags & (DOCF_OVERSTRIKE | DOCF_IN_DOLLAR)) { DocPutKey(doc,ch,0); ptr++; } else { ptr2=ptr++; while (TRUE) { ch=*ptr++; - if (!Bt(chars_bitmap_safe_dollar,ch)) + if (!Bt(chars_bmp_safe_dollar,ch)) break; } ptr--; @@ -711,8 +718,8 @@ public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...) if (IsEditableText(doc_ce)) { dst=b=MAlloc(doc_ce->max_col+j+1,doc->mem_task); src=doc_ce->tag; - i=doc->cur_data_col; - doc->cur_data_col+=j; + i=doc->cur_col; + doc->cur_col+=j; doc_ce->max_col+=j; while (i-->0) *dst++=*src++; @@ -729,7 +736,7 @@ public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...) doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT]; QueIns(doc_ne,doc_ce->last); doc->cur_entry=doc_ne; - doc->cur_data_col=StrLen(ptr2); + doc->cur_col=StrLen(ptr2); } *ptr=ch; DocRemSoftNewLines(doc,doc->cur_entry); @@ -837,7 +844,7 @@ Bool DocFileEd(I64 _type,U8 *filename, if (edf_dof_flags&EDF_WAS_WRITE) result=FALSE; - if (!(edf_dof_flags&EDF_BAIL) && DocDo(doc,edf_dof_flags|DOF_DONT_HOME)) { + if (!(edf_dof_flags&EDF_BAIL) && DocEd(doc,edf_dof_flags|DOF_DONT_HOME)) { DocLock(doc); doc_e=doc->cur_entry; if (doc_e!=doc) @@ -879,7 +886,8 @@ public I64 EdLinkCvt(U8 *link_st,U8 **_filename=NULL,U8 **_needle_str=NULL, switch (result=DefineMatch(st,"ST_LINK_TYPES",LMF_IGNORE_CASE)) { case LK_MAN_PAGE: if (temph=HashFind(filename2,Fs->hash_table,HTG_SRC_SYM)) - result=EdLinkCvt(temph->src_link,&filename,&needle_str,&num,edf_dof_flags); + result=EdLinkCvt(temph->src_link,&filename, + &needle_str,&num,edf_dof_flags); else result=-1; goto lc_done; diff --git a/Adam/DolDoc/DocFile.CPP b/Adam/DolDoc/DocFile.CPP index 3ea3a8a..e2a8d97 100644 --- a/Adam/DolDoc/DocFile.CPP +++ b/Adam/DolDoc/DocFile.CPP @@ -81,11 +81,12 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) cnt++; break; case DOCT_TEXT://$BK,1$Update $LK,"DOCT_TEXT",A="FF:D:/Compiler/Lex.CPP,DOCT_TEXT"$$BK,0$ - if (!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && - !(doc_e->type&DOCG_BL_IV_UL)) { + if (!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP| + DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))&& + !(doc_e->type&DOCG_BL_IV_UL)) { cnt+=StrLen(doc_e->tag); if (!(doc->flags & (DOCF_PLAIN_TEXT | DOCF_PLAIN_TEXT_WITH_TABS)) || - doc->flags&DOCF_DBL_DOLLARS) + doc->flags&DOCF_DBL_DOLLARS) cnt+=StrOcc(doc_e->tag,'$$'); } else { st=Doc2PlainText(doc,doc_e); @@ -95,39 +96,42 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) break; default: if (doc_e->type_u8!=DOCT_SOFT_NEW_LINE && - doc_e->type_u8!=DOCT_CURSOR) { + doc_e->type_u8!=DOCT_CURSOR) { st=Doc2PlainText(doc,doc_e); cnt+=StrLen(st)+2; Free(st); } - } + } } } for (b=doc->bin_root.next;b!=&doc->bin_root;b=b->next) { if (b->use_cnt>b->temp_use_cnt) cnt+=offset(CDocBin.end)- - offset(CDocBin.start)+b->size; + offset(CDocBin.start)+b->size; } result=MAlloc(cnt); dst=result; for (doc_e=doc->root.next;doc_e!=doc;doc_e=doc_e->next) { if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) { if (doc_e->type_u8==DOCT_TEXT && - !(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && - !(doc_e->type&DOCG_BL_IV_UL)) { + !(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP| + DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && + !(doc_e->type&DOCG_BL_IV_UL)) { src=doc_e->tag; i=0; while (ch=*src++) { - if (doc_e==doc->cur_entry && i++==doc->cur_data_col && !(doc->flags&DOCF_NO_CURSOR)) + if (doc_e==doc->cur_entry && i++==doc->cur_col && + !(doc->flags&DOCF_NO_CURSOR)) *dst++=CH_CURSOR; *dst++=ch; if (ch=='$$') { if (!(doc->flags & (DOCF_PLAIN_TEXT | DOCF_PLAIN_TEXT_WITH_TABS)) || - doc->flags&DOCF_DBL_DOLLARS) + doc->flags&DOCF_DBL_DOLLARS) *dst++=ch; } } - if (doc_e==doc->cur_entry && i++==doc->cur_data_col && !(doc->flags&DOCF_NO_CURSOR)) + if (doc_e==doc->cur_entry && i++==doc->cur_col && + !(doc->flags&DOCF_NO_CURSOR)) *dst++=CH_CURSOR; } else { if (doc_e==doc->cur_entry && !(doc->flags&DOCF_NO_CURSOR)) @@ -146,7 +150,7 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) break; default: if (doc_e->type_u8!=DOCT_SOFT_NEW_LINE && - doc_e->type_u8!=DOCT_CURSOR) {//(Cursor is set by cur_entry) + doc_e->type_u8!=DOCT_CURSOR) {//(Cursor is set by cur_entry) *dst++='$$'; st=Doc2PlainText(doc,doc_e); StrCpy(dst,st); @@ -158,7 +162,8 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) } } } - if (doc->cur_entry==doc && doc->root.next!=doc && !(doc->flags&DOCF_NO_CURSOR)) + if (doc->cur_entry==doc && doc->root.next!=doc && + !(doc->flags&DOCF_NO_CURSOR)) *dst++=CH_CURSOR; *dst++=0; if (*result==CH_CURSOR) { @@ -189,7 +194,7 @@ public Bool DocWrite(CDoc *doc,Bool prompt=FALSE) {//Store doc to disk. I64 size; U8 *buf; - if (prompt && !DocFormDo(&doc->filename) || + if (prompt && !DocForm(&doc->filename) || doc->filename.name[0]=='A' && doc->filename.name[2]==':') return FALSE; //CANCEL || LK_DOC,LK_DOC_ANCHOR,LK_DOC_FIND,LK_DOC_LINE? buf=DocSave(doc,&size); @@ -207,18 +212,18 @@ public U0 DocInsDoc(CDoc *doc=NULL,CDoc *doc2) CDocEntry *doc_ne,*doc_e=doc2->root.next,*doc_ce; if (!doc) doc=DocPut; unlock_doc=DocLock(doc), - DocRemSoftNewLines(doc,NULL); + DocRemSoftNewLines(doc,NULL); doc_ce=doc->cur_entry; - if (doc_ce->type_u8==DOCT_TEXT && doc->cur_data_col>doc_ce->min_col) { - if (doc->cur_data_colmax_col) { - dst=doc_ce->tag+doc->cur_data_col; + if (doc_ce->type_u8==DOCT_TEXT && doc->cur_col>doc_ce->min_col) { + if (doc->cur_colmax_col) { + dst=doc_ce->tag+doc->cur_col; doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); *dst=0; doc_ne->type=DOCT_TEXT | doc_ce->type & 0xFFFFFF00; - doc_ce->max_col=doc->cur_data_col; + doc_ce->max_col=doc->cur_col; QueIns(doc_ne,doc_ce); doc->cur_entry=doc_ne; - doc->cur_data_col=doc_ne->min_col; + doc->cur_col=doc_ne->min_col; } else if (doc_ce!=doc) doc->cur_entry=doc_ce->next; @@ -247,7 +252,7 @@ public U0 EdCopyToClipboard(CDoc *doc) {//Copy $LK,"DOCET_SELECTED",A="MN:DOCET_SELECTED"$ flagged entries to clipboard. CDoc *doc2=sys_clipboard_doc; Bool unlock_doc=DocLock(doc), - unlock_doc2=DocLock(doc2); + unlock_doc2=DocLock(doc2); CDocEntry *doc_e=doc->root.next,*doc_ne; ClipboardDel; while (doc_e!=doc) { @@ -270,7 +275,7 @@ public U0 EdCutToClipboard(CDoc *doc) {//Remove selected entries and place on clipboard. CDoc *doc2=sys_clipboard_doc; Bool unlock_doc=DocLock(doc), - unlock_doc2=DocLock(doc2); + unlock_doc2=DocLock(doc2); CDocEntry *doc_e=doc->root.next,*doc_e1,*doc_ne,*doc_e2=NULL; ClipboardDel; while (doc_e!=doc) { @@ -289,7 +294,7 @@ public U0 EdCutToClipboard(CDoc *doc) } if (doc_e2) { doc->cur_entry=doc_e2; - doc->cur_data_col=doc_e2->min_col; + doc->cur_col=doc_e2->min_col; } DocRemSoftNewLines(doc,NULL); if (unlock_doc2) @@ -302,7 +307,7 @@ public U0 EdPasteClipboard(CDoc *doc) {//Insert copy of clipboard at insert pt, cur_entry. CDoc *doc2=sys_clipboard_doc; Bool unlock_doc=DocLock(doc), - unlock_doc2=DocLock(doc2); + unlock_doc2=DocLock(doc2); CDocEntry *doc_ce=doc->cur_entry,*doc_e; if (doc_ce->type_u8==DOCT_DATA) { doc_e=doc2->root.next; @@ -327,7 +332,7 @@ public U0 DocCut(CDoc *doc,CDocEntry *start,CDocEntry *end) doc_e1=start->next; if (start==doc->cur_entry) { doc->cur_entry=start->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } DocEntryDel(doc,start); if (start==end) @@ -389,7 +394,8 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE) unlock=DocLock(doc); time_stamp=GetTSC; if (doc->flags&DOCF_UNDO_DIRTY && - time_stamp>doc->undo_root.last->time_stamp+cnts.time_stamp_freq<<4 || force) { + time_stamp>doc->undo_root.last->time_stamp+cnts.time_stamp_freq<<4 || + force) { u=CAlloc(sizeof(CDocUndo),doc->mem_task); u->time_stamp=time_stamp; u->body=DocSave(doc,&u->size); @@ -427,8 +433,8 @@ U0 DocUndoRestore(CDoc *doc) DocUnlock(doc); } -#help_index "Graphics/Windows BMP Files;Graphics/GRA Files;DolDoc/Output" - +#help_index "Graphics/Windows BMP Files;Graphics/GRA Files;"\ + "DolDoc/Output;StdOut/DolDoc" public Bool DocType(CDoc *doc=NULL,U8 *filename,I64 trailing_new_lines=1) {//Output txt or graphic file to document. Bool result=FALSE; @@ -455,8 +461,9 @@ public Bool DocType(CDoc *doc=NULL,U8 *filename,I64 trailing_new_lines=1) return result; } -#help_index "Graphics/Windows BMP Files;Graphics/GRA Files;File/Cmd Line (Typically);DolDoc/Cmd Line (Typically);Cmd Line (Typically)" - +#help_index "Graphics/Windows BMP Files;Graphics/GRA Files;"\ + "File/Cmd Line (Typically);DolDoc/Cmd Line (Typically);"\ + "StdOut;Cmd Line (Typically)" public Bool Type(U8 *filename,I64 trailing_new_lines=1) {//Output txt or graphic file to command line. return DocType(,filename,trailing_new_lines); diff --git a/Adam/DolDoc/DocFind.CPP b/Adam/DolDoc/DocFind.CPP index 0e3dd0e..5d779cf 100644 --- a/Adam/DolDoc/DocFind.CPP +++ b/Adam/DolDoc/DocFind.CPP @@ -18,7 +18,7 @@ public Bool DocLineNumGoTo(CDoc *doc,I64 line_num) //one based } public Bool DocFind(CDoc *haystack_doc,I64 start_line_num=MIN_I64, - U8 *needle,I64 match=1) +U8 *needle,I64 match=1) {//Find str by searching tags. Move cur_entry & center. Bool result=FALSE,unlock; CDocEntry *doc_e; @@ -38,13 +38,14 @@ public Bool DocFind(CDoc *haystack_doc,I64 start_line_num=MIN_I64, result=FALSE; while (doc_e!=haystack_doc) { if (doc_e->de_flags&DOCEF_TAG && doc_e->tag && - (ptr=StrIMatch(needle,doc_e->tag))) {//TODO: handle multientry strings +//TODO: handle multientry strs + (ptr=StrIMatch(needle,doc_e->tag))) { i=ptr-doc_e->tag; if (!--match) { haystack_doc->cur_entry=doc_e; if (imin_col) i=doc_e->min_col; if (i>doc_e->max_col) i=doc_e->max_col; - haystack_doc->cur_data_col=i; + haystack_doc->cur_col=i; result=TRUE; break; } @@ -74,7 +75,7 @@ public Bool DocAnchorFind(CDoc *haystack_doc,U8 *needle_str) if (doc_e->type_u8==DOCT_ANCHOR && doc_e->de_flags & DOCEF_AUX_STR) { if (!StrCmp(needle_str,doc_e->aux_str)) { haystack_doc->cur_entry=doc_e; - haystack_doc->cur_data_col=doc_e->min_col; + haystack_doc->cur_col=doc_e->min_col; result=TRUE; break; } @@ -104,11 +105,13 @@ public U0 EdFindNext(CDoc *doc) do { if (doc_e!=doc) { if (doc_e->de_flags&DOCEF_TAG && doc_e->tag && - !(doc_e->de_flags&(DOCEG1_DONT_EDIT|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { - if (doc_e->type & DOCET_SELECTED || !doc->find_replace->scan_selected_text) { + !(doc_e->de_flags&(DOCEG1_DONT_EDIT| + DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + if (doc_e->type & DOCET_SELECTED || + !doc->find_replace->scan_selected_text) { if (doc->find_replace->scan_fwd) { if (doc_e==doc_ce) { - ptr=doc_ce->tag+doc->cur_data_col+1; + ptr=doc_ce->tag+doc->cur_col+1; if (ptr-doc_ce->tag>=doc_ce->max_col) goto fn_skip; if (ptr-doc_ce->tagmin_col) @@ -117,11 +120,11 @@ public U0 EdFindNext(CDoc *doc) ptr=doc_e->tag; if (ptr=StrFind(doc->find_replace->find_text,ptr,sf_flags)) { doc->cur_entry=doc_e; - doc->cur_data_col=ptr-doc_e->tag; - if (doc->cur_data_col>=doc_e->max_col) - doc->cur_data_col=doc_e->max_col-1; - if (doc->cur_data_colmin_col) - doc->cur_data_col=doc_e->min_col; + doc->cur_col=ptr-doc_e->tag; + if (doc->cur_col>=doc_e->max_col) + doc->cur_col=doc_e->max_col-1; + if (doc->cur_colmin_col) + doc->cur_col=doc_e->min_col; DocCenter(doc); if (unlock) DocUnlock(doc); @@ -131,7 +134,7 @@ public U0 EdFindNext(CDoc *doc) ptr2=NULL; ptr=doc_e->tag+doc_e->min_col; if (doc_e==doc_ce) - ptr3=doc_ce->tag+doc->cur_data_col; + ptr3=doc_ce->tag+doc->cur_col; else ptr3=doc_e->tag+doc_e->max_col; while (ptr=StrFind(doc->find_replace->find_text,ptr,sf_flags)) { @@ -141,11 +144,11 @@ public U0 EdFindNext(CDoc *doc) } if (ptr2 && ptr2cur_entry=doc_e; - doc->cur_data_col=ptr2-doc_e->tag; - if (doc->cur_data_col>=doc_e->max_col) - doc->cur_data_col=doc_e->max_col-1; - if (doc->cur_data_colmin_col) - doc->cur_data_col=doc_e->min_col; + doc->cur_col=ptr2-doc_e->tag; + if (doc->cur_col>=doc_e->max_col) + doc->cur_col=doc_e->max_col-1; + if (doc->cur_colmin_col) + doc->cur_col=doc_e->min_col; DocCenter(doc); if (unlock) DocUnlock(doc); @@ -177,11 +180,12 @@ public U0 EdSelectAll(CDoc *doc,Bool select) DocUnlock(doc); } -public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus,Bool fwd,Bool abort_on_dbl_colon=FALSE) +public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus, +Bool fwd,Bool abort_on_dbl_colon=FALSE) {//Find { } or ( ) pair. Move cur_entry & center. Bool unlock=DocLock(doc),result=FALSE; U8 *ptr; - I64 ch,levels=0,colons=0,original_col=doc->cur_data_col; + I64 ch,levels=0,colons=0,original_col=doc->cur_col; CDocEntry *doc_ce=doc->cur_entry,*doc_e=doc_ce,*original_ce=doc_ce; if (abort_on_dbl_colon && EdCurU8(doc)==':') colons=1; @@ -190,10 +194,10 @@ public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus,Bool fwd,Bool abort_on_dbl_c do { if (doc_e!=doc) { if (doc_e->de_flags&DOCEF_TAG && doc_e->tag && - !(doc_e->de_flags&(DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { + !(doc_e->de_flags&(DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP))) { if (fwd) { if (doc_e==doc_ce) - ptr=doc_e->tag+doc->cur_data_col+1; + ptr=doc_e->tag+doc->cur_col+1; else ptr=doc_e->tag; if (ptr-doc_e->tagmin_col) @@ -204,7 +208,7 @@ public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus,Bool fwd,Bool abort_on_dbl_c if (abort_on_dbl_colon && ch==':') { if (++colons==2) { doc->cur_entry=doc_e; - doc->cur_data_col=ptr-doc_e->tag-1; + doc->cur_col=ptr-doc_e->tag-1; EdCursorLeft(doc); result=FALSE; goto pa_done; @@ -216,15 +220,16 @@ public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus,Bool fwd,Bool abort_on_dbl_c else if (ch==minus) { if (!levels--) { doc->cur_entry=doc_e; - doc->cur_data_col=ptr-doc_e->tag-1; - result=doc->cur_entry!=original_ce || doc->cur_data_col!=original_col; + doc->cur_col=ptr-doc_e->tag-1; + result=doc->cur_entry!=original_ce || + doc->cur_col!=original_col; goto pa_done; } } } } else { if (doc_e==doc_ce) { - ptr=doc_e->tag+doc->cur_data_col-1; + ptr=doc_e->tag+doc->cur_col-1; if (ptr-doc_e->tag>=doc_e->max_col) ptr=doc_e->tag+doc_e->max_col-1; } else @@ -236,7 +241,7 @@ public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus,Bool fwd,Bool abort_on_dbl_c if (abort_on_dbl_colon && ch==':') { if (++colons==2) { doc->cur_entry=doc_e; - doc->cur_data_col=ptr-doc_e->tag+1; + doc->cur_col=ptr-doc_e->tag+1; result=FALSE; goto pa_done; } @@ -247,8 +252,9 @@ public Bool EdFindPaired(CDoc *doc,U8 plus,U8 minus,Bool fwd,Bool abort_on_dbl_c else if (ch==minus) { if (!levels--) { doc->cur_entry=doc_e; - doc->cur_data_col=ptr-doc_e->tag+1; - result=doc->cur_entry!=original_ce || doc->cur_data_col!=original_col; + doc->cur_col=ptr-doc_e->tag+1; + result=doc->cur_entry!=original_ce || + doc->cur_col!=original_col; goto pa_done; } } @@ -284,7 +290,7 @@ public Bool EdGoToFun(CDoc *doc,Bool fwd,Bool abort_on_dbl_colon) if (++colons==2) { EdCursorLeft(doc); break; - } + } } else { colons=0; if (ch=='{') @@ -335,7 +341,7 @@ public U0 EdSelectFun(CDoc *doc,Bool abort_on_dbl_colon=FALSE) if (doc_e->de_flags&DOCEF_TAG && doc_e->tag) { ptr=doc_e->tag; if (doc_e==doc->cur_entry) - ptr+=doc->cur_data_col; + ptr+=doc->cur_col; while (ch=*ptr++) if (abort_on_dbl_colon && ch==':') { if (++colons==2) @@ -379,7 +385,7 @@ I64 EdFindReplace(CDoc *doc) cmd=RSAC_REPLACE; else cmd=RSAC_ALL; - if (!doc->find_replace->pmt || DocFormDo(doc->find_replace)) { + if (!doc->find_replace->pmt || DocForm(doc->find_replace)) { result=0; unlock=DocLock(doc); if (doc->find_replace->match_case || doc->find_replace->local_var) @@ -393,7 +399,7 @@ I64 EdFindReplace(CDoc *doc) doc_ce=doc->root.next; while (doc_ce!=doc) { if (doc_ce->de_flags&DOCEF_TAG && doc_ce->tag && - !(doc_ce->de_flags&(DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && + !(doc_ce->de_flags&(DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && StrFind(doc->find_replace->find_text,doc_ce->tag,sf_flags)) { doc_ce->type|=DOCET_SELECTED; result++; @@ -462,18 +468,21 @@ I64 EdFindReplace(CDoc *doc) break; } if (doc_e->type_u8==DOCT_TEXT && - !(doc_e->de_flags&(DOCEG1_DONT_EDIT|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) && - (doc_e->type & DOCET_SELECTED || !doc->find_replace->scan_selected_text&&!doc->find_replace->local_var)) { + !(doc_e->de_flags&(DOCEG1_DONT_EDIT|DOCEF_HARD_SKIP| + DOCEF_FILTER_SKIP)) && + (doc_e->type & DOCET_SELECTED || + !doc->find_replace->scan_selected_text&& + !doc->find_replace->local_var)) { src=doc_e->tag; while (src) { src=StrFind(doc->find_replace->find_text,src,sf_flags); if (src) { - doc->cur_data_col=src-doc_e->tag; + doc->cur_col=src-doc_e->tag; doc->cur_entry=doc_e; if (cmd!=RSAC_ALL) DocCenter(doc); doc_e=doc->cur_entry; - src=doc->cur_data_col+doc_e->tag; + src=doc->cur_col+doc_e->tag; if (cmd!=RSAC_ALL) { DocUnlock(doc); cmd=PopUpReplaceSkipAllCancel(""); @@ -496,14 +505,14 @@ I64 EdFindReplace(CDoc *doc) *dst++=doc_e->tag[i]; Free(doc_e->tag); doc_e->tag=dst2; - doc->cur_data_col=src-doc_e->tag; + doc->cur_col=src-doc_e->tag; doc->cur_entry=doc_e; if (cmd!=RSAC_ALL) { DocRemSoftNewLines(doc,doc->cur_entry); DocRecalc(doc); } doc_e=doc->cur_entry; - src=doc->cur_data_col+doc_e->tag; + src=doc->cur_col+doc_e->tag; result++; } else src++; @@ -527,7 +536,7 @@ fr_unlock_done: } public I64 EdReplace(CDoc *doc,U8 *find,U8 *replace, - Bool selected=TRUE,Bool match_case=TRUE,Bool whole_labels=FALSE) +Bool selected=TRUE,Bool match_case=TRUE,Bool whole_labels=FALSE) {//Find & replace using editor's cmd. CEdFindText old_find_replace; Bool unlock; @@ -565,6 +574,6 @@ U0 EdGoToLine(CDoc *doc) {//Prompt with form and go to line num. CEdLineGoTo gtl; gtl.line=1; - if (DocFormDo(>l)) + if (DocForm(>l)) DocLineNumGoTo(doc,gtl.line); } diff --git a/Adam/DolDoc/DocHighlight.CPP b/Adam/DolDoc/DocHighlight.CPP index 28895c8..f0e1dea 100644 --- a/Adam/DolDoc/DocHighlight.CPP +++ b/Adam/DolDoc/DocHighlight.CPP @@ -12,7 +12,7 @@ U32 *DocHighlight(CDocEntry *doc_e,U8 *src,I64 len,I64 _temp_u32_attr) case DOCSS_NORMAL: hl_normal: while (len) { - while (len && !Bt(chars_bitmap_alpha_numeric,*src)) { + while (len && !Bt(chars_bmp_alpha_numeric,*src)) { temp_u32_attr=_temp_u32_attr; ch1=*src++; switch (ch1) { @@ -65,13 +65,14 @@ hl_normal: if (!--len) goto hl_normal_done; } ptr=src; - while (len && Bt(chars_bitmap_alpha_numeric,*src)) { + while (len && Bt(chars_bmp_alpha_numeric,*src)) { src++; len--; } ch=*src; *src=0; - if (temph=HashFind(ptr,cmp.asm_hash,HTT_KEYWORD|HTT_ASM_KEYWORD|HTT_OPCODE|HTT_REG)) { + if (temph=HashFind(ptr,cmp.asm_hash, + HTT_KEYWORD|HTT_ASM_KEYWORD|HTT_OPCODE|HTT_REG)) { if (temph->type&(HTT_KEYWORD|HTT_ASM_KEYWORD|HTT_OPCODE)) temp_u32_attr=DOC_COLOR_KEYWORD<<8|mask_temp_u32_attr; else diff --git a/Adam/DolDoc/DocInit.CPP b/Adam/DolDoc/DocInit.CPP index 67b4644..e3080fa 100644 --- a/Adam/DolDoc/DocInit.CPP +++ b/Adam/DolDoc/DocInit.CPP @@ -2,14 +2,14 @@ U0 DocInit() {//$LK-UL,"CMD Defines",A="MN:DOCT_TEXT"$ - CLex *lx; + CCmpCtrl *cc; I64 i; CHashGeneric *temph; DefineLstLoad("ST_DOC_CMDS", - "TX\0CR\0SR\0CU\0TB\0CL\0PB\0DA\0PL\0LM\0RM\0HD\0FO\0ID\0" - "FG\0BG\0FD\0BD\0PT\0WW\0UL\0IV\0BK\0SX\0SY\0CM\0AN\0LK\0BT\0" - "CB\0LS\0MA\0MU\0HX\0TR\0SP\0IB\0IS\0SO\0HL\0HC\0ER\0"); + "TX\0CR\0SR\0CU\0TB\0CL\0PB\0PL\0LM\0RM\0HD\0FO\0ID\0FG\0" + "BG\0FD\0BD\0PT\0WW\0UL\0IV\0BK\0SX\0SY\0CM\0AN\0LK\0BT\0" + "DA\0CB\0LS\0MA\0MU\0HX\0TR\0SP\0IB\0IS\0SO\0HL\0HC\0ER\0"); DefineLstLoad("ST_DOC_FLAGS", "T\0A\0D\0HTML\0LE\0LM\0RE\0RM\0BI\0BP\0RT\0SX\0SY\0SCX\0U\0" "LC\0LA\0RC\0RA\0TC\0LX\0CX\0RX\0TY\0CY\0BY\0" @@ -26,21 +26,21 @@ U0 DocInit() MemSet(doldoc.dft_de_flags, 0,sizeof(doldoc.dft_de_flags)); MemSet(doldoc.dft_type_flags, 0,sizeof(doldoc.dft_type_flags)); - lx=LexNew("TX+T;DA+P+TRM+T;CM+LE+RE;AN+T;LK+L+UL+T;MA+X+UL+T;MU+X+UL+T;" + cc=CmpCtrlNew("TX+T;DA+P+TRM+T;CM+LE+RE;AN+T;LK+L+UL+T;MA+X+UL+T;MU+X+UL+T;" "BT+X+B+T;CB+CA+P+T;LS+LS+P+T;HX+P+Z;TR+TR+C+CA+UL+T;SP+T;IB+T;IS+T;" - "SO+T;HC+T;",LF_DONT_FREE_BUF); - lx->htc.hash_table_lst=NULL; - Lex(lx); - while (lx->token==TK_IDENT) { - if (temph=HashFind(lx->cur_str,doldoc.hash,DHT_DOC_CMD)) { + "SO+T;HC+T;",CCF_DONT_FREE_BUF); + cc->htc.hash_table_lst=NULL; + Lex(cc); + while (cc->token==TK_IDENT) { + if (temph=HashFind(cc->cur_str,doldoc.hash,DHT_DOC_CMD)) { i=temph->user_data0; - Lex(lx); - PrsDocFlags(lx,&doldoc.dft_de_flags[i],&doldoc.dft_type_flags[i]); + Lex(cc); + PrsDocFlags(cc,&doldoc.dft_de_flags[i],&doldoc.dft_type_flags[i]); } - if (lx->token==';') - Lex(lx); + if (cc->token==';') + Lex(cc); } - LexDel(lx); + CmpCtrlDel(cc); for (i=0;inext; if (tempc->cmd_code==SVCT_MSG && - (tempc->msg_code==MSG_KEY_DOWN || - tempc->msg_code==MSG_KEY_UP || - tempc->msg_code==MSG_KEY_DOWN_UP) && - a1 && tempc->aux1==a1 || - !a1 && tempc->aux2==a2) { + (tempc->msg_code==MSG_KEY_DOWN || + tempc->msg_code==MSG_KEY_UP || + tempc->msg_code==MSG_KEY_DOWN_UP) && + a1 && tempc->aux1==a1 || + !a1 && tempc->aux2==a2) { QueRem(tempc); SrvCmdDel(tempc); } @@ -32,14 +32,14 @@ class CMacroTemp { CMacroTemp *next,*last; I64 type; - U8 buf[136]; + U8 buf[STR_LEN]; }; CMacroTemp *Cmd2MT(CSrvCmd *tempc) { U8 buf[8]; CMacroTemp *tempmt=CAlloc(sizeof(CMacroTemp)); - if (Bt(chars_bitmap_getkey,tempc->aux1) && tempc->msg_code==MSG_KEY_DOWN) { + if (Bt(chars_bmp_macro,tempc->aux1) && tempc->msg_code==MSG_KEY_DOWN) { tempmt->type=MT_CHAR; buf[0]=tempc->aux1; buf[1]=0; @@ -47,7 +47,7 @@ CMacroTemp *Cmd2MT(CSrvCmd *tempc) } else { tempmt->type=MT_MSG; StrPrint(tempmt->buf,"Msg(0x%X,0x%X,0x%X);", - tempc->msg_code,tempc->aux1,tempc->aux2); + tempc->msg_code,tempc->aux1,tempc->aux2); } return tempmt; } @@ -58,7 +58,7 @@ U8 *SysMacro2Str(CSrvCmd *macro_root) I64 cnt=1; //terminating zero U8 *ptr,*m; CMacroTemp *tempmt,*tempmt1,root; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); QueInit(&root); @@ -113,7 +113,7 @@ U0 PlaySysMacro(I64 n=1) U8 *m; if (TaskValidate(task)) { LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); - old_preempt=Preempt(OFF); + old_preempt=Preempt; m=SysMacro2Str(&sys_macro_root); while (n-- && TaskValidate(task)) { if (task==Fs) @@ -128,11 +128,11 @@ U0 PlaySysMacro(I64 n=1) U0 EdInsCapturedMacro() { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; U8 *st=SysMacro2Str(&sys_macro_root); if (sys_focus_task) { XTalk(sys_focus_task,"$$MA+LA,T=\"%s\",LM=\"%Q\"$$", - captured_macro_name,st); + captured_macro_name,st); Free(st); } Preempt(old_preempt); @@ -147,10 +147,10 @@ U0 EdInsCapturedMacro() I64 PopUpMacroMenu() { I64 result=0; - U8 buf[136]; + U8 buf[STR_LEN]; CSrvCmd *tempc; CDoc *doc=DocNew; - CDocEntry *doc_e=DocPrint(doc,"$$DA-P,135,A=\"Name:%%s\"$$"); + CDocEntry *doc_e=DocPrint(doc,"$$DA-P,STR_LEN-1,A=\"Name:%%s\"$$"); doc_e->data=captured_macro_name; DocDataFmt(doc,doc_e); @@ -167,13 +167,13 @@ I64 PopUpMacroMenu() "$$CM+LX,17,0$$$$BT,\"CANCEL\",LE=DOCM_CANCEL$$" "\n\n\n$$GREEN$$SHIFT-F2$$FG$$ will play macro.\n"); doc->flags|=DOCF_MIN_SIZE | DOCF_FORM; - StrPrint(buf,"DocMenuDo(%d);",doc); + StrPrint(buf,"DocMenu(%d);",doc); sys_macro_util_task=Spawn(&SrvCmdLine,NULL,"Macro Popup",,Fs); Fs->popup_task=sys_macro_util_task; LBts(&sys_macro_util_task->display_flags,DISPLAYf_WIN_ON_TOP); tempc=TaskExe(sys_macro_util_task,Fs,buf, - 1<popup_task=NULL; Kill(sys_macro_util_task); sys_macro_util_task=NULL; diff --git a/Adam/DolDoc/DocMain.CPP b/Adam/DolDoc/DocMain.CPP index 767b9d5..9448bdc 100644 --- a/Adam/DolDoc/DocMain.CPP +++ b/Adam/DolDoc/DocMain.CPP @@ -21,7 +21,7 @@ public Bool Ed(U8 *link_st,I64 edf_dof_flags=0) DocHelpIndex(doc,filename); ej_doc: if (!(edf_dof_flags&EDF_BAIL)) { - DocDo(doc); + DocEd(doc); DocDel(doc); } if (!(edf_dof_flags&EDF_WAS_WRITE)) @@ -33,8 +33,8 @@ ej_doc: else { cont=TRUE; if (!(edf_dof_flags&EDF_BAIL) && !(LK_DOC<=i<=LK_DOC_LINE) && - !FilesFindMatch(filename,FILEMASK_TXT) && - !PopUpCancelOk(ST_WARN_ST "Not Text File\n\n")) + !FilesFindMatch(filename,FILEMASK_TXT) && + !PopUpCancelOk(ST_WARN_ST "Not Text File\n\n")) cont=FALSE; if (cont) result=DocFileEd(i,filename,needle_str,&num,edf_dof_flags); @@ -57,7 +57,7 @@ public Bool Plain(U8 *filename,I64 edf_dof_flags=0) #help_index "DolDoc" public Bool DocLinkChk(U8 *link_st) {//Check for bad $LK,"Editor Link",A="MN:LK_FILE"$. - U8 *filename; + U8 *filename,*st; Bool result=FALSE; if (link_st) { switch (EdLinkCvt(link_st,&filename)) { @@ -66,11 +66,17 @@ public Bool DocLinkChk(U8 *link_st) case LK_FILE_LINE: case LK_PLAIN_LINE: case LK_FILE: - //We don't check line number - result=FileFind(filename,,FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS); +//We don't check line number + result=FileFind(filename,, + FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS); break; case LK_BIBLE_FIND: - result=TRUE; //We don't check verse string + st=StrNew(link_st+3); + if (StrOcc(st,',')) + StrLastRem(st,","); + if (DefineMatch(st,"ST_BIBLE_BOOKS",LMF_IGNORE_CASE)>=0) + result=TRUE; + Free(st); break; default://TODO: Need to validate HI: and DF: if (Ed(link_st,EDF_BAIL)) @@ -106,7 +112,7 @@ public U8 *DocLinkFile(U8 *link_st,CTask *mem_task=NULL) return result; } -#help_index "DolDoc/Task" +#help_index "DolDoc/Task;StdOut/Task" public CDoc *DocBorderNew(CDoc *pdoc) {//Make new std border doc. CDocEntry *doc_e; @@ -145,7 +151,7 @@ public CDoc *DocBorderNew(CDoc *pdoc) public U0 DocTermNew() {//Make into term win task with Put/Display/Border docs. - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CDoc *pdoc=DocNew; pdoc->right_click_link=&TermRightClickLink; pdoc->max_entries=4096; @@ -159,8 +165,9 @@ public U0 DocTermNew() Raw(OFF); } -#help_index "DolDoc/Input" -public U8 *DocScanLine(CDoc *doc,CDocEntry *doc_e,I64 *cur_col=NULL,CDocEntry **_do_e_end=NULL) +#help_index "DolDoc/Input;StdIn/DolDoc" +public U8 *DocScanLine(CDoc *doc,CDocEntry *doc_e, + I64 *cur_col=NULL,CDocEntry **_do_e_end=NULL) {//Start at entry in doc,make and return one line as str. CDocEntry *doc_e2=doc_e; Bool unlock=DocLock(doc); @@ -187,19 +194,19 @@ public U8 *DocScanLine(CDoc *doc,CDocEntry *doc_e,I64 *cur_col=NULL,CDocEntry ** } else if (doc_e->type_u8==DOCT_TAB) *dst++='\t'; if (doc_e==doc->cur_entry && cur_col) - *cur_col=start-result+doc->cur_data_col; + *cur_col=start-result+doc->cur_col; doc_e=doc_e->next; } if (_do_e_end) *_do_e_end=doc_e; *dst=0; - if (doc_e==doc->cur_entry && cur_col && !doc->cur_data_col) + if (doc_e==doc->cur_entry && cur_col && !doc->cur_col) *cur_col=dst-result; if (unlock) DocUnlock(doc); return result; } -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" U0 DocDump(CDoc *doc,I64 uS_delay=0) { U8 *st; @@ -259,7 +266,7 @@ public CDocEntry *DocPutLine(CDoc *doc=NULL,CDocEntry *doc_e) return doc_e; } -#help_index "DolDoc/Input" +#help_index "DolDoc/Input;StdIn/DolDoc" U8 *DocGetStr2(I64 flags=0) {//$LK,"Flags",A="MN:GSF_SHIFT_ESC_EXIT"$ CDoc *doc; @@ -291,10 +298,11 @@ U8 *DocGetStr2(I64 flags=0) goto gs_done; } } - // is a blank line without entry - } while (flags&GSF_WITH_NEW_LINE || ch!='\n' || sc & SCF_CTRL && sc & SCF_SHIFT); +// is a blank line without entry + } while (flags&GSF_WITH_NEW_LINE || ch!='\n' || + sc & SCF_CTRL && sc & SCF_SHIFT); - Preempt(OFF); + Preempt; doc=DocPut; DocLock(doc); if (flags&GSF_WITH_NEW_LINE) { @@ -319,11 +327,11 @@ U8 *DocGetStr2(I64 flags=0) doc_e=doc->cur_entry; do doc_e=doc_e->last; while (doc_e!=doc && doc_e->type_u8!=DOCT_NEW_LINE && - doc_e->type_u8!=DOCT_PMT); + doc_e->type_u8!=DOCT_PMT); if (doc_e!=doc && doc_e->type_u8!=DOCT_PMT) { do doc_e=doc_e->last; while (doc_e!=doc && doc_e->type_u8!=DOCT_NEW_LINE && - doc_e->type_u8!=DOCT_PMT); + doc_e->type_u8!=DOCT_PMT); } doc_e=doc_e->next; result=DocScanLine(doc,doc_e,NULL); @@ -335,7 +343,7 @@ gs_done: return result; } -#help_index "Keyboard Devices;Char/Input" +#help_index "Keyboard Devices;Char/Input;StdIn" public I64 GetI64(U8 *msg=NULL,I64 dft=0,I64 lo=MIN_I64,I64 hi=MAX_I64) {//Prompt user for I64 expression. @@ -389,7 +397,8 @@ public F64 GetF64(U8 *msg=NULL,F64 dft=0,F64 lo=MIN_F64,F64 hi=MAX_F64) } } -public CDate GetDate(U8 *msg=NULL,CDate dft=MIN_I64,CDate lo=MIN_I64,CDate hi=MAX_I64) +public CDate GetDate(U8 *msg=NULL,CDate dft=MIN_I64, + CDate lo=MIN_I64,CDate hi=MAX_I64) {//Prompt user for date expression. (Use $LK,"Now",A="MN:Now"$() if you want current time.) U8 *st; CDate result; @@ -497,14 +506,14 @@ I64 TermRightClickLink(CDoc *doc,CDocEntry *doc_e) break; case RIGHT_COPY: StrCpy(fn.name,st); - if (DocFormDo(&fn)) { + if (DocForm(&fn)) { result=ToBool(Copy(st,fn.name)); } else send_new_line=TRUE; break; case RIGHT_MOVE: StrCpy(fn.name,st); - if (DocFormDo(&fn)) + if (DocForm(&fn)) result=Move(st,fn.name); else send_new_line=TRUE; @@ -551,7 +560,8 @@ I64 TermRightClickLink(CDoc *doc,CDocEntry *doc_e) return result; } -#help_index "Debugging/Dump;DolDoc/Cmd Line (Typically);Cmd Line (Typically);DolDoc/Output" +#help_index "Debugging/Dump;DolDoc/Cmd Line (Typically);"\ + "Cmd Line (Typically);DolDoc/Output;StdOut/DolDoc" public U0 DocDm(U8 *buf,I64 cnt=0x80) {//Dump live chunk of mem showing addresses. Can be edited. CDocEntry *doc_e; @@ -578,7 +588,7 @@ public U0 DocD(U8 *buf,I64 cnt=0x80) DocUnlock(doc); } -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" Bool KDDocPutS(U8 *st) { CDoc *doc; diff --git a/Adam/DolDoc/DocNew.CPP b/Adam/DolDoc/DocNew.CPP index fa2eb7c..ce7e62f 100644 --- a/Adam/DolDoc/DocNew.CPP +++ b/Adam/DolDoc/DocNew.CPP @@ -266,12 +266,12 @@ U0 DocFormFwd(CDoc *doc,Bool giveup=FALSE) if (doc->flags & DOCF_FORM) { if (doc_e==doc) goto ff_recover; while (!Bt(doldoc.type_flags_form,doc_e->type_u8) && - !(doc_e->de_flags&DOCEF_LINK) || - doc_e->de_flags&DOCEF_SKIP_IN_FORM) { + !(doc_e->de_flags&DOCEF_LINK) || + doc_e->de_flags&DOCEF_SKIP_IN_FORM) { doc_e=doc_e->next; if (doc_e==doc) { ff_recover: - doc->cur_data_col=0; + doc->cur_col=0; if (!giveup) { doc->cur_entry=doc_e->last; DocFormBwd(doc,TRUE); @@ -284,7 +284,7 @@ ff_recover: while (doc_e->type_u8==DOCT_INDENT) doc_e=doc_e->next; if (doc_e!=doc_e2) { - doc->cur_data_col=doc_e->min_col; + doc->cur_col=doc_e->min_col; doc->cur_entry=doc_e; } } @@ -294,11 +294,11 @@ U0 DocFormBwd(CDoc *doc,Bool giveup=FALSE) CDocEntry *doc_e=doc->cur_entry,*doc_e2=doc_e; if (doc->flags & DOCF_FORM) { while (!Bt(doldoc.type_flags_form,doc_e->type_u8) && - !(doc_e->de_flags&DOCEF_LINK) || - doc_e->de_flags&DOCEF_SKIP_IN_FORM) { + !(doc_e->de_flags&DOCEF_LINK) || + doc_e->de_flags&DOCEF_SKIP_IN_FORM) { doc_e=doc_e->last; if (doc_e==doc) { - doc->cur_data_col=0; + doc->cur_col=0; if (!giveup) { doc->cur_entry=doc_e->next; DocFormFwd(doc,TRUE); @@ -311,7 +311,7 @@ U0 DocFormBwd(CDoc *doc,Bool giveup=FALSE) while (doc_e->type_u8==DOCT_INDENT) doc_e=doc_e->next; if (doc_e!=doc_e2) { - doc->cur_data_col=doc_e->min_col; + doc->cur_col=doc_e->min_col; doc->cur_entry=doc_e; } } @@ -323,11 +323,11 @@ public U0 DocTop(CDoc *doc=NULL) return; unlock=DocLock(doc); doc->cur_entry=doc->root.next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; doc->x=0; doc->y=0; doc->line_start_col=0; - doc->cur_top_line_num=0; + doc->top_line_num=0; DocFormFwd(doc); DocRecalc(doc); @@ -367,7 +367,7 @@ public U0 DocRst(CDoc *doc,Bool is_old) b=b1; } } - //Check $LK,"DocInsDoc",A="MN:DocInsDoc"$ +//Check $LK,"DocInsDoc",A="MN:DocInsDoc"$ doc->flags&=DOCF_BREAK_UNLOCKED; doc->root.next=doc->root.last=doc; QueInit(&doc->bin_root); @@ -495,9 +495,8 @@ U0 DocDataFmt(CDoc *doc,CDocEntry *doc_e,I64 d=DOCM_CANCEL) } doc_e->max_col=StrLen(doc_e->tag); } else if (doc_e->de_flags & DOCEF_LST) { - if (doc_e->de_flags & DOCEF_DEFINE && - (temph=HashFind(doc_e->define_str,doc->win_task->hash_table,HTT_DEFINE_STR)) && - 0<=dcnt) { + if (doc_e->de_flags & DOCEF_DEFINE && (temph=HashFind(doc_e->define_str, + doc->win_task->hash_table,HTT_DEFINE_STR)) && 0<=dcnt) { ptr=MStrPrint("[%s]",temph->sub_lst[d]); Free(doc_e->tag); doc_e->tag=StrNew(ptr,doc->mem_task); @@ -521,7 +520,7 @@ U0 DocDataScan(CDoc *doc,CDocEntry *doc_e) U8 *ptr,*ptr1,*ptr2; CHashDefineStr *temph; if (doc_e->type_u8==DOCT_DATA && doc_e->de_flags&DOCEF_AUX_STR || - doc_e->type_u8==DOCT_CHECK_BOX || doc_e->de_flags & DOCEF_LST) { + doc_e->type_u8==DOCT_CHECK_BOX || doc_e->de_flags & DOCEF_LST) { if (doc_e->de_flags & DOCEF_DATA_IS_PTR) { if (!(ptr=doc_e->data)) return; } else @@ -545,7 +544,8 @@ U0 DocDataScan(CDoc *doc,CDocEntry *doc_e) } else if (doc_e->de_flags & DOCEF_LST) { d=0; if (doc_e->tag && doc_e->de_flags & DOCEF_DEFINE && - (temph=HashFind(doc_e->define_str,doc->win_task->hash_table,HTT_DEFINE_STR))) { + (temph=HashFind(doc_e->define_str, + doc->win_task->hash_table,HTT_DEFINE_STR))) { ptr1=ptr2=StrNew(doc_e->tag); if (*ptr2=='[') { ptr2++; @@ -596,7 +596,7 @@ U0 DocRemSoftNewLines(CDoc *doc=NULL,CDocEntry *doc_e=NULL) if (doc_e->type_u8==DOCT_SOFT_NEW_LINE) { if (doc->cur_entry==doc_e) { doc->cur_entry=doc_e2; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } DocEntryDel(doc,doc_e); } else if (saved_ll && doc_e->type_u8==DOCT_NEW_LINE) @@ -612,9 +612,9 @@ U0 DocRemSoftNewLines(CDoc *doc=NULL,CDocEntry *doc_e=NULL) public I64 DocMax(I64 i=MAX_I64) {//Set max document entries. (Cmd line buffer.) //Adjusts the size of the cmd line buf. -//Normally, the cmd line deletes entries -//when more are added and the old scroll up. -//See $LK,"max_entries",A="FF:::/Adam/DolDoc/DocMain.CPP,max_entries"$. + //Normally, the cmd line deletes entries + //when more are added and the old scroll up. + //See $LK,"max_entries",A="FF:::/Adam/DolDoc/DocMain.CPP,max_entries"$. I64 result; CDoc *doc; if (doc=DocPut) { @@ -650,10 +650,10 @@ public CDoc *DocNew(U8 *filename=NULL,CTask *task=NULL) return doc; } -#help_index "DolDoc/Task" +#help_index "DolDoc/Task;StdOut/Task" public CDoc *DocPut(CTask *task=NULL) {//Current document that StdOut Put() goes to. - //Basically, StdOut unless double buffering. +//Basically, StdOut unless double buffering. CDoc *result; if (!task) task=Fs; if ((result=task->put_doc) && result->doc_signature==DOC_SIGNATURE_VAL) @@ -684,13 +684,13 @@ public CDoc *DocBorder(CTask *task=NULL) public CDoc *DocDblBufStart(CTask *task=NULL) {//See $LK,"::/Demo/Spy.CPP"$ - Bool unlock_ddoc,old_preempt=Preempt(OFF); + Bool unlock_ddoc,old_preempt=Preempt; CDoc *pdoc=DocPut(task),*ddoc=DocDisplay(task),*result; if (!pdoc || !ddoc || pdoc!=ddoc) result=NULL; //Already Double buffering else { if (!task) task=Fs; - unlock_ddoc=DocLock(ddoc); //dont want change during winupdate, so lock DocPut$WW,0$ + unlock_ddoc=DocLock(ddoc); //dont change during winupdate, so lock DocPut$WW,0$ result=DocNew(,task); result->win_task =ddoc->win_task; result->max_entries =ddoc->max_entries; @@ -715,7 +715,7 @@ public CDoc *DocDblBufStart(CTask *task=NULL) public Bool DocDblBufEnd(CTask *task=NULL) {//See $LK,"::/Demo/Spy.CPP"$ - Bool result=FALSE,old_preempt=Preempt(OFF); + Bool result=FALSE,old_preempt=Preempt; CDoc *pdoc=DocPut(task),*ddoc=DocDisplay(task); if (pdoc && ddoc && pdoc!=ddoc) {//Double buffering? if (!task) task=Fs; @@ -733,7 +733,7 @@ public Bool DocDblBufEnd(CTask *task=NULL) public Bool DocDblBufSwap(CTask *task=NULL) {//See $LK,"::/Demo/Spy.CPP"$ - Bool result=FALSE,old_preempt=Preempt(OFF); + Bool result=FALSE,old_preempt=Preempt; CDoc *pdoc=DocPut(task),*ddoc=DocDisplay(task); if (pdoc && ddoc && pdoc!=ddoc) {//Double buffering? if (!task) task=Fs; @@ -746,7 +746,8 @@ public Bool DocDblBufSwap(CTask *task=NULL) MemCpy(ddoc->find_replace,pdoc->find_replace,sizeof(CEdFindText)); MemCpy(&ddoc->filename,&pdoc->filename,sizeof(CEdFileName)); ddoc->max_entries =pdoc->max_entries; - ddoc->flags =pdoc->flags&DOCG_DBL_BUF_FLAGS | ddoc->flags&~DOCG_DBL_BUF_FLAGS; + ddoc->flags =pdoc->flags&DOCG_DBL_BUF_FLAGS | + ddoc->flags&~DOCG_DBL_BUF_FLAGS; ddoc->left_click_link =pdoc->left_click_link; ddoc->right_click_link =pdoc->right_click_link; ddoc->user_put_data =pdoc->user_put_data; diff --git a/Adam/DolDoc/DocOpt.CPP b/Adam/DolDoc/DocOpt.CPP index 190597c..2a81707 100644 --- a/Adam/DolDoc/DocOpt.CPP +++ b/Adam/DolDoc/DocOpt.CPP @@ -7,7 +7,8 @@ I64 DocOptEntry(CDoc *,CDocEntry *doc_e) if (doc_e->de_flags&DOCEF_LINK && doc_e->de_flags&(DOCEF_AUX_STR|DOCEF_TAG)) { if (doc_e->de_flags & DOCEF_AUX_STR && doc_e->de_flags & DOCEF_TAG && - !MemCmp(doc_e->aux_str,"FI:",3) && !StrCmp(doc_e->aux_str+3,doc_e->tag)) { + !MemCmp(doc_e->aux_str,"FI:",3) && + !StrCmp(doc_e->aux_str+3,doc_e->tag)) { Free(doc_e->aux_str); doc_e->aux_str=NULL; doc_e->de_flags&=~DOCEF_AUX_STR; @@ -31,18 +32,18 @@ I64 DocOptEntry(CDoc *,CDocEntry *doc_e) Free(st); } /* !!! Dangerous, but handy !!! - if (doc_e->de_flags & DOCEF_AUX_STR) { - if (st=StrMatch(".Z",doc_e->aux_str)) { - StrCpy(st,st+2); - result++; - } - } - if (doc_e->de_flags&DOCEF_TAG) { - if (st=StrMatch(".Z",doc_e->tag)) { - StrCpy(st,st+2); - result++; - } - } +if (doc_e->de_flags & DOCEF_AUX_STR) { +if (st=StrMatch(".Z",doc_e->aux_str)) { +StrCpy(st,st+2); +result++; +} +} +if (doc_e->de_flags&DOCEF_TAG) { +if (st=StrMatch(".Z",doc_e->tag)) { +StrCpy(st,st+2); +result++; +} +} */ } return result; diff --git a/Adam/DolDoc/DocPlain.CPP b/Adam/DolDoc/DocPlain.CPP index 046b470..3b8bed0 100644 --- a/Adam/DolDoc/DocPlain.CPP +++ b/Adam/DolDoc/DocPlain.CPP @@ -1,10 +1,11 @@ #help_index "DolDoc" -I64 PrsDocFlagSingle(CLex *lx,I64 *_de_flags,U32 *_type,Bool turn_on) +I64 PrsDocFlagSingle(CCmpCtrl *cc,I64 *_de_flags,U32 *_type,Bool turn_on) { I64 result=-1; CHashGeneric *temph; - if (lx->token==TK_IDENT && (temph=HashFind(lx->cur_str,doldoc.hash,DHT_DOC_FLAG))) { + if (cc->token==TK_IDENT && + (temph=HashFind(cc->cur_str,doldoc.hash,DHT_DOC_FLAG))) { result=temph->user_data0; if (result<64) { BEqu(_de_flags,result,turn_on); @@ -17,24 +18,24 @@ I64 PrsDocFlagSingle(CLex *lx,I64 *_de_flags,U32 *_type,Bool turn_on) break; } } - Lex(lx); //skip flag + Lex(cc); //skip flag } return result; } -I64 PrsDocFlags(CLex *lx,I64 *_de_flags,U32 *_type) +I64 PrsDocFlags(CCmpCtrl *cc,I64 *_de_flags,U32 *_type) { I64 result=-1; Bool turn_on; while (TRUE) { - if (lx->token=='+') + if (cc->token=='+') turn_on=TRUE; - else if (lx->token=='-') + else if (cc->token=='-') turn_on=FALSE; else break; - Lex(lx); - result=PrsDocFlagSingle(lx,_de_flags,_type,turn_on); + Lex(cc); + result=PrsDocFlagSingle(cc,_de_flags,_type,turn_on); } return result; } @@ -45,7 +46,8 @@ I64 DocBinPtrRst(CDoc *doc,CDocEntry *doc_e) CDoc *doc2; CDocBin *tempb,*tempb2; I64 i,bin_num=0; - if (doc_e->de_flags&DOCEF_HAS_BIN && doc_e->bin_ptr_link && StrLen(doc_e->bin_ptr_link)) { + if (doc_e->de_flags&DOCEF_HAS_BIN && + doc_e->bin_ptr_link && StrLen(doc_e->bin_ptr_link)) { bin_num=doc_e->bin_num; st=StrNew(doc_e->bin_ptr_link); st2=StrNew(st); @@ -54,7 +56,7 @@ I64 DocBinPtrRst(CDoc *doc,CDocEntry *doc_e) if (i>0||*st2) { doc2=DocRead(st); if (i>0 && (tempb2=DocBinFindNum(doc2,i)) || - i==0 && (tempb2=DocBinFindTag(doc2,st2))) { + i==0 && (tempb2=DocBinFindTag(doc2,st2))) { i=1; if (bin_num>0) { if (tempb=DocBinFindNum(doc,bin_num)) { @@ -91,7 +93,8 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e) t1,f1,de_flags,type; U8 *buf,*buf2; - if (doc_e->type_u8==DOCT_FOREGROUND && doc->flags&DOCF_COLOR_NAMES && 0<=attrtype_u8==DOCT_FOREGROUND && + doc->flags&DOCF_COLOR_NAMES && 0<=attrtype_u8]; t1=doc_e->type_u8|doldoc.dft_type_flags[doc_e->type_u8]; - de_flags=doc_e->de_flags&~(DOCG_BL_IV_UL|DOCEF_SELECTED|DOCEF_HIGHLIGHT|DOCEF_WORD_WRAP|DOCEF_SKIP|DOCEF_FILTER_SKIP); + de_flags=doc_e->de_flags&~(DOCG_BL_IV_UL|DOCEF_SELECTED| + DOCEF_HIGHLIGHT|DOCEF_WORD_WRAP|DOCEF_SKIP|DOCEF_FILTER_SKIP); for (i=0;itype_u8==DOCT_DATA || doc_e->type_u8==DOCT_MACRO && - (doc_e->de_flags&DOCEF_LEFT_MACRO && !StrCmp(doc_e->tag,doc_e->left_macro) || - doc_e->de_flags&DOCEF_RIGHT_MACRO && !StrCmp(doc_e->tag,doc_e->right_macro)) || - doc_e->de_flags&DOCEF_LST && !StrCmp(doc_e->tag,"[]") && doc_e->de_flags&DOCEF_DEFINE) { + (doc_e->de_flags&DOCEF_LEFT_MACRO && + !StrCmp(doc_e->tag,doc_e->left_macro) || + doc_e->de_flags&DOCEF_RIGHT_MACRO && + !StrCmp(doc_e->tag,doc_e->right_macro)) || + doc_e->de_flags&DOCEF_LST && !StrCmp(doc_e->tag,"[]") && + doc_e->de_flags&DOCEF_DEFINE) { buf2=buf; buf=NULL; } else { @@ -227,7 +234,7 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e) break; case DOCEf_RAW_TYPE: if (doc_e->type_u8==DOCT_CHECK_BOX&&doc_e->raw_type!=RT_I8 || - doc_e->type_u8!=DOCT_CHECK_BOX&&doc_e->raw_type!=RT_I64) + doc_e->type_u8!=DOCT_CHECK_BOX&&doc_e->raw_type!=RT_I64) buf2=MStrPrint("%sRT=%Z,",buf,doc_e->raw_type,"ST_RAW_TYPES"); break; case DOCEf_SHIFTED_X: @@ -264,12 +271,12 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) U8 *ptr,*st2; CDocEntry *doc_e=NULL; CHashGeneric *temph; - CLex *lx=LexNew(st,LF_DONT_FREE_BUF); - CHashTable *old_hash_table_lst=lx->htc.hash_table_lst; + CCmpCtrl *cc=CmpCtrlNew(st,CCF_DONT_FREE_BUF); + CHashTable *old_hash_table_lst=cc->htc.hash_table_lst; try { - lx->htc.hash_table_lst=NULL; - if (Lex(lx)==TK_IDENT) { - if (temph=HashFind(lx->cur_str,doldoc.hash,DHT_DOC_CMD|DHT_COLOR)) { + cc->htc.hash_table_lst=NULL; + if (Lex(cc)==TK_IDENT) { + if (temph=HashFind(cc->cur_str,doldoc.hash,DHT_DOC_CMD|DHT_COLOR)) { if (temph->type&DHT_DOC_CMD) i=temph->user_data0; else {//DHT_COLOR @@ -278,20 +285,20 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) } } else goto pd_err; - Lex(lx); //skip cmd code + Lex(cc); //skip cmd code doc_e=CAlloc(sizeof(CDocEntry),doc->mem_task); doc_e->type=i; doc_e->de_flags=doldoc.dft_de_flags[i]; doc_e->type|=doldoc.dft_type_flags[i]; doc_e->raw_type=RT_I64; - j=PrsDocFlags(lx,&doc_e->de_flags,&doc_e->type); - lx->htc.hash_table_lst=old_hash_table_lst; + j=PrsDocFlags(cc,&doc_e->de_flags,&doc_e->type); + cc->htc.hash_table_lst=old_hash_table_lst; nobound_switch (i) { case DOCT_DATA: - while (lx->token==',') - Lex(lx); - if (lx->token) - doc_e->len=LexExpressionI64(lx); + while (cc->token==',') + Lex(cc); + if (cc->token) + doc_e->len=LexExpressionI64(cc); else goto pd_err; break; @@ -299,16 +306,16 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) doc_e->raw_type=RT_I8; break; case DOCT_HEX_ED: - while (lx->token==',') - Lex(lx); - if (lx->token) - doc_e->len=LexExpressionI64(lx); + while (cc->token==',') + Lex(cc); + if (cc->token) + doc_e->len=LexExpressionI64(cc); else goto pd_err; - while (lx->token==',') - Lex(lx); - if (lx->token) - doc_e->hex_ed_width=LexExpressionI64(lx); + while (cc->token==',') + Lex(cc); + if (cc->token) + doc_e->hex_ed_width=LexExpressionI64(cc); else goto pd_err; break; @@ -329,10 +336,10 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) case DOCT_BLINK: case DOCT_SHIFTED_X: case DOCT_SHIFTED_Y: - while (lx->token==',') - Lex(lx); - if (lx->token) - doc_e->attr=LexExpressionI64(lx); + while (cc->token==',') + Lex(cc); + if (cc->token) + doc_e->attr=LexExpressionI64(cc); else doc_e->attr=attr; break; @@ -343,15 +350,15 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) processed_flags=0; while (TRUE) { - lx->htc.hash_table_lst=NULL; - while (lx->token==',') - Lex(lx); - lx->htc.hash_table_lst=old_hash_table_lst; - j=PrsDocFlagSingle(lx,&doc_e->de_flags,&doc_e->type,TRUE); + cc->htc.hash_table_lst=NULL; + while (cc->token==',') + Lex(cc); + cc->htc.hash_table_lst=old_hash_table_lst; + j=PrsDocFlagSingle(cc,&doc_e->de_flags,&doc_e->type,TRUE); if (!(de_flags=~processed_flags & doc_e->de_flags & DOCEG1_HAS_ARG)) break; - if (lx->token=='=') - Lex(lx); + if (cc->token=='=') + Lex(cc); else j=Bsf(de_flags); if (j<0 || Bts(&processed_flags,j)) @@ -360,10 +367,11 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) case DOCEf_TAG: if (!doc_e->tag) { //If a $$MA,LM=""$$, Tag is filled when the LM is processed. -//if doc_e->df_flags&DOCEF_LST, Tag is filled when the Define is processed. -//(The dft_flag1.tag calls this after.) - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + //if doc_e->df_flags&DOCEF_LST, + // Tag is filled when the Define is processed. + //(The dft_flag1.tag calls this after.) + if (cc->token==TK_STR) { + st2=LexExtStr(cc); if (i==DOCT_CHECK_BOX) { st=MStrPrint("[X] %s",st2); Free(st2); @@ -388,22 +396,23 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) } break; case DOCEf_AUX_STR: - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + if (cc->token==TK_STR) { + st2=LexExtStr(cc); doc_e->aux_str=StrNew(st2,doc->mem_task); Free(st2); //$AN,"Anchor",A="DataTagWidth"$ if (i==DOCT_DATA) { if (ptr=StrMatch(":",doc_e->aux_str)) doc_e->min_col=ptr-doc_e->aux_str+1; - doc_e->tag=MAlloc(doc_e->len+doc_e->min_col+2,doc->mem_task); //+2 because "_\0" + doc_e->tag=MAlloc(doc_e->len+doc_e->min_col+2, + doc->mem_task); //+2 because "_\0" } } else goto pd_err; break; case DOCEf_DEFINE: - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + if (cc->token==TK_STR) { + st2=LexExtStr(cc); doc_e->define_str=StrNew(st2,doc->mem_task); Free(st2); if (doc_e->de_flags&DOCEF_LST && !doc_e->tag) @@ -412,22 +421,22 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) goto pd_err; break; case DOCEf_HTML_LINK: - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + if (cc->token==TK_STR) { + st2=LexExtStr(cc); doc_e->html_link=StrNew(st2,doc->mem_task); Free(st2); } else goto pd_err; break; case DOCEf_LEFT_EXP: - if (lx->token) - doc_e->left_exp=LexExpression(lx); + if (cc->token) + doc_e->left_exp=LexExpression(cc); else goto pd_err; break; case DOCEf_LEFT_MACRO: - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + if (cc->token==TK_STR) { + st2=LexExtStr(cc); doc_e->left_macro=StrNew(st2,doc->mem_task); Free(st2); if (i==DOCT_MACRO && !doc_e->tag) @@ -436,14 +445,14 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) goto pd_err; break; case DOCEf_RIGHT_EXP: - if (lx->token) - doc_e->right_exp=LexExpression(lx); + if (cc->token) + doc_e->right_exp=LexExpression(cc); else goto pd_err; break; case DOCEf_RIGHT_MACRO: - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + if (cc->token==TK_STR) { + st2=LexExtStr(cc); doc_e->right_macro=StrNew(st2,doc->mem_task); Free(st2); if (i==DOCT_MACRO && !doc_e->tag) @@ -452,14 +461,14 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) goto pd_err; break; case DOCEf_HAS_BIN: - if (lx->token) - doc_e->bin_num=LexExpressionI64(lx); + if (cc->token) + doc_e->bin_num=LexExpressionI64(cc); else goto pd_err; break; case DOCEf_BIN_PTR_LINK: - if (lx->token==TK_STR) { - st2=LexExtStr(lx); + if (cc->token==TK_STR) { + st2=LexExtStr(cc); doc_e->bin_ptr_link=StrNew(st2,doc->mem_task); Free(st2); if (!DocBinPtrRst(doc,doc_e)) @@ -468,36 +477,36 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) goto pd_err; break; case DOCEf_RAW_TYPE: - if (lx->token==TK_IDENT) { - j=DefineMatch(lx->cur_str,"ST_RAW_TYPES"); + if (cc->token==TK_IDENT) { + j=DefineMatch(cc->cur_str,"ST_RAW_TYPES"); if (j<0) goto pd_err; doc_e->raw_type=j; - Lex(lx); + Lex(cc); } else goto pd_err; break; case DOCEf_SHIFTED_X: - if (lx->token) - doc_e->type|=(LexExpressionI64(lx) & 0x1F)<<16; + if (cc->token) + doc_e->type|=(LexExpressionI64(cc) & 0x1F)<<16; else goto pd_err; break; case DOCEf_SHIFTED_Y: - if (lx->token) - doc_e->type|=(LexExpressionI64(lx) & 0x1F)<<21; + if (cc->token) + doc_e->type|=(LexExpressionI64(cc) & 0x1F)<<21; else goto pd_err; break; case DOCEf_SCROLLING_X: - if (lx->token) - doc_e->scroll_len=LexExpressionI64(lx); + if (cc->token) + doc_e->scroll_len=LexExpressionI64(cc); else goto pd_err; break; case DOCEf_USER_DATA: - if (lx->token) - doc_e->user_data=LexExpression(lx); + if (cc->token) + doc_e->user_data=LexExpression(cc); else goto pd_err; break; @@ -512,11 +521,12 @@ pd_err: doc_e->type=DOCT_ERROR; doc_e->de_flags=0; } - if (doc_e->de_flags & DOCEF_LST && !(doc_e->de_flags & DOCEF_DATA_IS_PTR)) { + if (doc_e->de_flags & DOCEF_LST && + !(doc_e->de_flags & DOCEF_DATA_IS_PTR)) { DocDataScan(doc,doc_e); DocDataFmt(doc,doc_e); } - LexDel(lx); + CmpCtrlDel(cc); } catch { Fs->catch_except=TRUE; if (!doc_e) @@ -537,40 +547,40 @@ public U0 DocInsEntry(CDoc *doc,CDocEntry *doc_e) doc_e->y=doc_ce->y; doc_e->page_line_num=doc_ce->page_line_num; MemCpy(&doc_e->settings,&doc_ce->settings,sizeof(CDocSettings)); - if (doc->cur_data_col>0 && - doc_ce->type_u8==DOCT_TEXT && - !(doc_ce->de_flags&(DOCEF_TAG_CB|DOCEF_DEFINE| + if (doc->cur_col>0 && + doc_ce->type_u8==DOCT_TEXT && + !(doc_ce->de_flags&(DOCEF_TAG_CB|DOCEF_DEFINE| DOCEF_HTML_LINK|DOCEF_BIN_PTR_LINK)) && - doc->cur_data_colmax_col) { - dst=doc_ce->tag+doc->cur_data_col; + doc->cur_colmax_col) { + dst=doc_ce->tag+doc->cur_col; doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task)); *dst=0; doc_ne->type=DOCT_TEXT|doc_ce->type&0xFFFFFF00; - doc_ce->max_col=doc->cur_data_col; + doc_ce->max_col=doc->cur_col; QueIns(doc_ne,doc_ce); - doc->cur_data_col=0; + doc->cur_col=0; doc_ce=doc_ne; } - if (doc_ce->type_u8==DOCT_TEXT && doc->cur_data_col>=doc_ce->max_col) { + if (doc_ce->type_u8==DOCT_TEXT && doc->cur_col>=doc_ce->max_col) { QueIns(doc_e,doc_ce); doc->cur_entry=doc_e->next; } else { QueIns(doc_e,doc_ce->last); doc->cur_entry=doc_ce; } - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; DocRemSoftNewLines(doc,doc->cur_entry); if (unlock) DocUnlock(doc); } -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" CDocEntry *DocPutS(CDoc *doc,U8 *st) {//Don't use this. Use $LK-UL,"DocPrint",A="MN:DocPrint"$(). - //Does not handle partial Doc entries +//Does not handle partial Doc entries //Returns last newly created dollar-sign CDocEntry. U8 *ptr=st,*ptr2,*st2,*ptr3,*ptr4,*src, - *char_bitmap; + *char_bitmap; Bool unlock; I64 ch,j; CDocEntry *doc_e=NULL,*result=NULL,*doc_ce; @@ -578,11 +588,11 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) return NULL; unlock=DocLock(doc); if (doc->flags & DOCF_PLAIN_TEXT_WITH_TABS) - char_bitmap=chars_bitmap_zero_cr_nl_cursor; + char_bitmap=chars_bmp_zero_cr_nl_cursor; else if (doc->flags & DOCF_PLAIN_TEXT) - char_bitmap=chars_bitmap_zero_tab_ff_cr_nl_cursor; + char_bitmap=chars_bmp_zero_tab_ff_cr_nl_cursor; else - char_bitmap=chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar; + char_bitmap=chars_bmp_zero_tab_ff_cr_nl_cursor_dollar; doc_ce=doc->cur_entry; while (*ptr) { ptr2=ptr; @@ -694,7 +704,8 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) DocInsEntry(doc,doc_e); } else if (ch==CH_FORM_FEED) { doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task); - doc_e->type=DOCT_PAGE_BREAK | doc->settings_root.dft_text_attr<<8; + doc_e->type=DOCT_PAGE_BREAK | + doc->settings_root.dft_text_attr<<8; doc_e->de_flags=doldoc.dft_de_flags[DOCT_PAGE_BREAK]; DocInsEntry(doc,doc_e); } else diff --git a/Adam/DolDoc/DocPopUp.CPP b/Adam/DolDoc/DocPopUp.CPP index 839a363..f30c13c 100644 --- a/Adam/DolDoc/DocPopUp.CPP +++ b/Adam/DolDoc/DocPopUp.CPP @@ -1,6 +1,7 @@ #help_index "DolDoc" -public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e,Bool exited,I64 *_has_action=NULL) +public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, + Bool exited,I64 *_has_action=NULL) {//Do action on final entry selected by user. //Sometimes returns locked, sometimes unlocked U8 ch=doc->cmd_U8,*st; @@ -52,9 +53,11 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e,Bool exited,I64 *_has_action=N } has_action=TRUE; } - if (!exited && doc_e->de_flags & DOCEF_LST && doc_e->de_flags & DOCEF_DEFINE && - (temph=HashFind(doc_e->define_str,doc->win_task->hash_table,HTT_DEFINE_STR)) && - (result=PopUpPickLst(temph->data))!=DOCM_CANCEL) { + if (!exited && doc_e->de_flags & DOCEF_LST && + doc_e->de_flags & DOCEF_DEFINE && + (temph=HashFind(doc_e->define_str, + doc->win_task->hash_table,HTT_DEFINE_STR)) && + (result=PopUpPickLst(temph->data))!=DOCM_CANCEL) { DocDataFmt(doc,doc_e,result); DocDataScan(doc,doc_e); has_action=TRUE; @@ -150,7 +153,7 @@ U8 *EdDollarTypeCB(CDoc *,CDocEntry *doc_e,CTask *mem_task) { CDoc *doc=doc_e->user_data; U8 *src=DefineSub(doc->cur_entry->type_u8,"ST_DOC_CMDS"), - *st=CAlloc(8,mem_task); + *st=CAlloc(8,mem_task); if (doc->cur_entry==doc) src="EOF"; else if (!src) @@ -168,7 +171,7 @@ public I64 DocGetKey(I64 *_sc=NULL) DocRecalc(DocPut); cont=FALSE; if (ch==CH_ESC || ch==CH_SHIFT_ESC) {//Check for exit filter mode - Preempt(OFF); + Preempt; if (DocPut && DocPut->find_replace->filter_lines) { EdUndoFilter(DocPut); cont=TRUE; @@ -180,7 +183,7 @@ public I64 DocGetKey(I64 *_sc=NULL) return ch; } -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" public Bool View() {//Go live for user interaction until or . I64 ch; @@ -190,16 +193,16 @@ public Bool View() } #help_index "DolDoc" -public Bool DocDo(CDoc *doc,I64 dof_flags=0) +public Bool DocEd(CDoc *doc,I64 dof_flags=0) {//Live for user interaction. End on or . CDoc *old_put_doc =DocPut, - *old_display_doc=DocDisplay, - *old_border_doc =DocBorder,*bdoc; + *old_display_doc=DocDisplay, + *old_border_doc =DocBorder,*bdoc; CDocEntry *doc_e; I64 old_attr=Fs->text_attr, - old_top =Fs->win_top, old_bottom=Fs->win_bottom, - old_left=Fs->win_left,old_right =Fs->win_right, - old_title_src=Fs->title_src; + old_top =Fs->win_top, old_bottom=Fs->win_bottom, + old_left=Fs->win_left,old_right =Fs->win_right, + old_title_src=Fs->title_src; Bool result,unlock,old_preempt; U8 *old_task_title; if (dof_flags&DOF_WIN_MAX) @@ -256,7 +259,7 @@ public Bool DocDo(CDoc *doc,I64 dof_flags=0) DocRecalc(doc); if (!(dof_flags&DOF_DONT_HOME)) DocTop(doc); - old_preempt=Preempt(OFF); + old_preempt=Preempt; Fs->border_doc=bdoc; if (doc!=old_display_doc) doc->parent_doc=old_display_doc; @@ -279,7 +282,7 @@ public Bool DocDo(CDoc *doc,I64 dof_flags=0) } result=View; - Preempt(OFF); + Preempt; DocLock(doc); if (result) { doc_e=doc->root.next; @@ -309,11 +312,10 @@ public Bool DocDo(CDoc *doc,I64 dof_flags=0) return result; } -#help_index "DolDoc/Input" -public Bool DocFormDo(U8 *_d,U8 *class_name=lastclass, +#help_index "DolDoc/Input;StdIn/DolDoc" +public Bool DocForm(U8 *_d,U8 *class_name=lastclass, I64 dof_flags=0,U8 *header=NULL,U8 *footer=NULL) -{//Supply a class name that has fmtstr definitions. -//and this routine will allow user input. +{//User input. Supply a class name that has fmtstr definitions. //See $LK,"::/Demo/DolDoc/Form.CPP"$ and $LK,"::/Demo/LastClass.CPP"$. CMemberLst *ml; CDocEntry *doc_e; @@ -344,7 +346,7 @@ public Bool DocFormDo(U8 *_d,U8 *class_name=lastclass, if (doc->root.next!=doc) { Fs->border_src=BDS_CONST; DocRecalc(doc); - if (DocDo(doc,dof_flags)) { + if (DocEd(doc,dof_flags)) { doc_e=doc->cur_entry; result=TRUE; if (doc_e!=doc) { @@ -359,25 +361,25 @@ public Bool DocFormDo(U8 *_d,U8 *class_name=lastclass, return result; } -U0 DocMenuDoEndTaskCB() +U0 DocMenuEndTaskCB() { WinToTop; throw; } -public I64 DocMenuDo(CDoc *m,I64 dof_flags=0) -{//Do (Run) menu chooser doc. (Returns menu doc unlocked.) +public I64 DocMenu(CDoc *m,I64 dof_flags=0) +{//Run menu chooser doc. Returns menu doc unlocked. U8 *old_end_cb=Fs->task_end_cb; Bool old_break_shift_esc=LBts(&Fs->task_flags,TASKf_BREAK_TO_SHIFT_ESC); CDocEntry *doc_e; I64 old_border_src=Fs->border_src,result=DOCM_CANCEL,has_action; - Fs->task_end_cb=&DocMenuDoEndTaskCB; + Fs->task_end_cb=&DocMenuEndTaskCB; try { if (m) { m->desc='Menu'; Fs->border_src=BDS_CONST; -md_restart: - if (DocDo(m,dof_flags)) { +dm_restart: + if (DocEd(m,dof_flags)) { doc_e=m->cur_entry; if (doc_e!=m) { result=DocEntryRun(m,doc_e,TRUE,&has_action); @@ -385,7 +387,7 @@ md_restart: if (!has_action) { result=DOCM_CANCEL; dof_flags|=DOF_DONT_HOME; - goto md_restart; + goto dm_restart; } } } @@ -412,10 +414,10 @@ public I64 PopUpEd(U8 *filename,CTask *parent=NULL,CTask **_pu_task=NULL) return result; } -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" public CTask *PopUpViewDoc(CDoc *doc,I64 dof_flags=0) {//Pass doc to PopUp win task for viewing. - U8 *buf=MStrPrint("Preempt(ON);DocDo(0x%X,0x%X);",doc,dof_flags); + U8 *buf=MStrPrint("Preempt(ON);DocEd(0x%X,0x%X);",doc,dof_flags); CTask *task=Spawn(&SrvCmdLine,NULL,"View",,Fs); TaskExe(task,NULL,buf,1<flags|=DOCF_MIN_SIZE | DOCF_FORM; - return PopUpPrint("DocMenuDo(0x%X,0x%X);",doc,dof_flags); + return PopUpPrint("DocMenu(0x%X,0x%X);",doc,dof_flags); } -public Bool PopUpForm(U8 *_d,U8 *class_name=lastclass,I64 dof_flags=DOF_MIN_SIZE, - U8 *header=NULL,U8 *footer=NULL) +public Bool PopUpForm(U8 *_d,U8 *class_name=lastclass, + I64 dof_flags=DOF_MIN_SIZE,U8 *header=NULL,U8 *footer=NULL) {//See $LK,"::/Demo/DolDoc/Form.CPP"$ and $LK,"::/Demo/LastClass.CPP"$. - return PopUpPrint("DocFormDo(0x%X,0x%X,0x%X,0x%X,0x%X);",_d,class_name, - dof_flags,header,footer); + return PopUpPrint("DocForm(0x%X,0x%X,0x%X,0x%X,0x%X);",_d,class_name, + dof_flags,header,footer); } -#help_index "DolDoc/Input;File/FileNames" +#help_index "DolDoc/Input;File/FileNames;StdIn/DolDoc" public U8 *PopUpPickFile(U8 *dir=NULL) {//Filename chooser. Uses $LK,"FileMgr",A="MN:FileMgr"$(). U8 *result,*st,*st2; @@ -493,7 +495,7 @@ public U8 *FileNameForm(U8 *dft=NULL,I64 dof_flags=0,CTask *mem_task=NULL) StrCpy(fn.name,dft); else *fn.name=0; - if (DocFormDo(&fn,,dof_flags)) + if (DocForm(&fn,,dof_flags)) return StrNew(fn.name,mem_task); else return NULL; @@ -501,8 +503,8 @@ public U8 *FileNameForm(U8 *dft=NULL,I64 dof_flags=0,CTask *mem_task=NULL) public U8 *PopUpFileName(U8 *dft=NULL,I64 dof_flags=0) {//Filename chooser. Uses form, not $LK,"FileMgr",A="MN:FileMgr"$(). - U8 *st=MStrPrint("FileNameForm(\"%Q\",0x%X,Fs->parent_task);",dft,dof_flags|DOF_MIN_SIZE), - *result=PopUp(st,Fs); + U8 *st=MStrPrint("FileNameForm(\"%Q\",0x%X,Fs->parent_task);", + dft,dof_flags|DOF_MIN_SIZE),*result=PopUp(st,Fs); Free(st); return result; } @@ -520,7 +522,7 @@ Bool PopUpCd() return result; } -#help_index "DolDoc/Input;Char/Lists" +#help_index "DolDoc/Input;Char/Lists;StdIn/DolDoc" public U8 *PopUpPickLst(U8 *lst) {//Prompt for lst entry in PopUp win task. I64 i=0; @@ -545,7 +547,7 @@ public U8 *PopUpPickDefineSub(U8 *st) return PopUpPickLst(Define(st)); } -#help_index "DolDoc/Input" +#help_index "DolDoc/Input;StdIn/DolDoc" public I64 PopUp1(U8 *b1,I64 n1,U8 *header=NULL,U8 *footer=NULL) {//Make PopUp win task with one button. I64 i,l1=StrLen(b1); @@ -611,7 +613,7 @@ I64 PopUpReplaceSkipAllCancel(U8 *header=NULL,U8 *footer=NULL) return i; } -U8 *DoPopUpGetStr(U8 *header,CTask *mem_task) +U8 *PopUpGetStr2(U8 *header,CTask *mem_task) { U8 *result,*st; if (header) @@ -624,8 +626,8 @@ U8 *DoPopUpGetStr(U8 *header,CTask *mem_task) public U8 *PopUpGetStr(U8 *header=NULL) {//Prompt for text str in PopUp win task. - U8 *st=MStrPrint("DoPopUpGetStr(0x%X,0x%X);",header,Fs), - *result=PopUp(st,Fs); + U8 *st=MStrPrint("PopUpGetStr2(0x%X,0x%X);",header,Fs), + *result=PopUp(st,Fs); Free(st); return result; } @@ -638,7 +640,16 @@ public I64 PopUpGetI64(U8 *msg,I64 dft,I64 lo=MIN_I64,I64 hi=MAX_I64) return result; } -public I64 PopUpRangeI64(I64 lo,I64 hi,I64 step=1,U8 *header=NULL,U8 *footer=NULL) +public F64 PopUpGetF64(U8 *msg,F64 dft,F64 lo=MIN_F64,F64 hi=MAX_F64) +{//Prompt for F64 text expression in PopUp win task. + U8 *st=MStrPrint("GetF64(0x%X,0x%X(F64),0x%X(F64),0x%X(F64));",msg,dft,lo,hi); + F64 result=PopUp(st,Fs)(F64); + Free(st); + return result; +} + +public I64 PopUpRangeI64(I64 lo,I64 hi,I64 step=1, + U8 *header=NULL,U8 *footer=NULL) {//Evenly-spaced I64 range chooser in PopUp win task. I64 i; CDoc *doc=DocNew; @@ -659,7 +670,7 @@ public F64 PopUpRangeF64(F64 lo,F64 hi,F64 step, {//Evenly-spaced F64 range chooser in PopUp win task. F64 d; I64 i; - U8 buf[136]; + U8 buf[STR_LEN]; CDoc *doc=DocNew; if (header) DocPrint(doc,"%s",header); @@ -680,7 +691,7 @@ public F64 PopUpRangeF64Exp(F64 lo,F64 hi,F64 factor, {//Exp-spaced F64 range chooser in PopUp win task. F64 d; I64 i; - U8 buf[136]; + U8 buf[STR_LEN]; CDoc *doc=DocNew; if (header) DocPrint(doc,"%s",header); @@ -707,11 +718,11 @@ public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE) {//Tell adam task to compile and run a file. Bool okay=TRUE; U8 *name=FileNameAbs(filename), - *name2=DftExt(name,"CPP.Z"); + *name2=DftExt(name,"CPP.Z"); I64 result=0; if (warn_ext && - !FilesFindMatch(name2,FILEMASK_JIT) && - !PopUpCancelOk(ST_WARN_ST "Not .CPP File\n\n")) + !FilesFindMatch(name2,FILEMASK_JIT) && + !PopUpCancelOk(ST_WARN_ST "Not .CPP File\n\n")) okay=FALSE; if (okay) result=Adam("#include \"%s\";",name2); @@ -720,18 +731,21 @@ public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE) return result; } -public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE,CTask *parent=NULL,CTask **_pu_task=NULL) +public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE, + CTask *parent=NULL,CTask **_pu_task=NULL) {//Run code file in PopUp win task. Bool okay=TRUE; U8 *st,*name=FileNameAbs(filename), - *name2=DftExt(name,"CPP.Z"); + *name2=DftExt(name,"CPP.Z"); I64 result=0; if (warn_ext && - !FilesFindMatch(name2,FILEMASK_JIT) && - !PopUpCancelOk(ST_WARN_ST "Not .CPP File\n\n")) + !FilesFindMatch(name2,FILEMASK_JIT) && + !PopUpCancelOk(ST_WARN_ST "Not .CPP File\n\n")) okay=FALSE; if (okay) { - st=MStrPrint("\"$$$$WW+H,1$$$$\";Auto(\"ExeFile2(\\\"%s\\\");\\n\");UserTaskCont;",name2); + st=MStrPrint( + "\"$$$$WW+H,1$$$$\";Auto(\"ExeFile2(\\\"%s\\\");\\n\");UserTaskCont;", + name2); result=PopUp(st,parent,_pu_task); Free(st); } @@ -741,7 +755,8 @@ public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE,CTask *parent=NULL,CTask ** } #help_index "Graphics/Input" -public I64 PopUpColor(U8 *header=NULL,Bool allow_transparent=TRUE,Bool allow_dft=TRUE) +public I64 PopUpColor(U8 *header=NULL, + Bool allow_transparent=TRUE,Bool allow_dft=TRUE) {//Chooser for 16-color, default or transparent. I64 i; CDoc *doc=DocNew; @@ -749,7 +764,7 @@ public I64 PopUpColor(U8 *header=NULL,Bool allow_transparent=TRUE,Bool allow_dft DocPrint(doc,"%s",header); if (allow_transparent) DocPrint(doc,"$$MU,\"TRANSPARENT\",LE=TRANSPARENT$$\n"); - for (i=0;i<16;i++) + for (i=0;iz_scale*GR_SCALE; r[15]=GR_SCALE; - GrRotZEqu(r,tf->é_z*ã/180.0); - GrRotYEqu(r,tf->é_y*ã/180.0); - GrRotXEqu(r,tf->é_x*ã/180.0); + Mat4x4RotZ(r,tf->é_z*ã/180.0); + Mat4x4RotY(r,tf->é_y*ã/180.0); + Mat4x4RotX(r,tf->é_x*ã/180.0); r[3] =tf->x_offset*GR_SCALE; r[7] =tf->y_offset*GR_SCALE; @@ -846,21 +867,23 @@ U0 DrawIt(CTask *task,CDC *dc) else i1=TRANSPARENT; dc->color=j1+i1<<16+ROPF_DITHER; - GrRect(dc,i*PU_SPACING,j*PU_SPACING+FramePtr("DitherDoFrame",task),PU_SPACING,PU_SPACING); + GrRect(dc,i*PU_SPACING,j*PU_SPACING+FramePtr("DitherFrame",task), + PU_SPACING,PU_SPACING); } i=(17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH; if (doc->max_x>i) i=doc->max_x; WinHorz(task->win_left,task->win_left+i,task); - WinVert(task->win_top,task->win_top+doc->max_y+(17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH,task); + WinVert(task->win_top,task->win_top+doc->max_y+ + (17*PU_SPACING+FONT_WIDTH-1)/FONT_WIDTH,task); } -I64 DitherColorDo(U8 *header=NULL) +I64 DitherColor2(U8 *header=NULL) { I64 msg_code,a1,a2,result=-1,i,j; DocClear; "%s",header; DocRecalc(DocPut); - FramePtrAdd("DitherDoFrame",(DocPut->max_y+1)*FONT_HEIGHT); + FramePtrAdd("DitherFrame",(DocPut->max_y+1)*FONT_HEIGHT); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->draw_it=&DrawIt; do { @@ -868,26 +891,26 @@ I64 DitherColorDo(U8 *header=NULL) if (msg_code==MSG_IP_L_DOWN) { msg_code=GetMsg(&a1,&a2,1<=0 && a2>=0 && 0<=j<17 && 0<=i<17) { if (j==16) j=TRANSPARENT; if (i==16) i=TRANSPARENT; result=j+i<<16+ROPF_DITHER; - goto dcd_done; + goto dc_done; } } } while (!(msg_code==MSG_KEY_DOWN && (a1==CH_ESC || a1==CH_SHIFT_ESC))); do GetMsg(&a1,&a2,1<win_task; DocRecalc(doc,FALSE,recalc); if (!(doc->flags&DOCF_BORDER_DOC)) - doc->cur_top_line_num=doc->y-(task->win_height+1)>>1; + doc->top_line_num=doc->y-(task->win_height+1)>>1; if (unlock) DocUnlock(doc); } @@ -29,7 +29,7 @@ U0 DocDelToNum(CDoc *doc,I64 num) if (!(doc_e->de_flags & (DOCEF_HOLD|DOCEF_FILTER_SKIP))) { if (doc_e==doc->cur_entry) { doc->cur_entry=doc_e2; - doc->cur_data_col=doc_e2->min_col; + doc->cur_col=doc_e2->min_col; } DocEntryDel(doc,doc_e); } @@ -45,7 +45,7 @@ U0 DocDelToEntry(CDoc *doc,CDocEntry *clear_entry) if (!(doc_e->de_flags & (DOCEF_HOLD|DOCEF_FILTER_SKIP))) { if (doc_e==doc->cur_entry) { doc->cur_entry=doc_e2; - doc->cur_data_col=doc_e2->min_col; + doc->cur_col=doc_e2->min_col; } DocEntryDel(doc,doc_e); } @@ -62,7 +62,7 @@ U0 DocBorderLstDraw(CDoc *doc) U64 ch; CDoc *templ=doc; CD3I64 saved_scroll; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; while (templ && templ->doc_signature==DOC_SIGNATURE_VAL) { y+=(Bsr(templ->desc)+7)>>3+1; //StrLen+1 templ=templ->parent_doc; @@ -94,7 +94,7 @@ public U0 DocBottom(CDoc *doc=NULL) return; unlock=DocLock(doc); doc->cur_entry=doc; - doc->cur_data_col=0; + doc->cur_col=0; DocRecalc(doc); if (unlock) DocUnlock(doc); @@ -145,7 +145,7 @@ public U0 DocCollapse(Bool collapse=TRUE,CDoc *doc=NULL) DocUnlock(doc); } -#help_index "DolDoc/Output" +#help_index "DolDoc/Output;StdOut/DolDoc" public U0 DocPrintAtomic(CDoc *doc,U8 *fmt,...) {//Necessary when hidden text might screw-up //inserts. It does multiple whole doc cmds all-at-once. @@ -166,13 +166,13 @@ public U0 DocPrintAtomic(CDoc *doc,U8 *fmt,...) Free(buf); } -#help_index "DolDoc/Task" +#help_index "DolDoc/Task;StdOut/Task" U0 DocUpdateTaskDocs(CTask *task) -{//This is called from $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() by the winmgr at 30fps. +{//This is called from $LK,"GrUpdateTaskWin",A="MN:GrUpdateTaskWin"$() by the winmgr at 30fps. CDrv *dv; CDoc *doc; CD3I64 saved_scroll; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; I64 border_attr; if (task->border_src==BDS_CUR_DRV && task->cur_dv) { border_attr=task->cur_dv->text_attr; @@ -195,7 +195,7 @@ U0 DocUpdateTaskDocs(CTask *task) MemCpy(task->task_title,doc->filename.name,TASK_TITLE_LEN); Preempt(old_preempt); DocRecalc(doc,TRUE,DOC_RECALC_TO_SCREEN); - Preempt(OFF); + Preempt; } if ((doc=DocBorder(task)) && !(doc->flags&DOCF_DONT_SHOW)) { WinScrollNull(task,&saved_scroll); diff --git a/Adam/DolDoc/DocRecalcB.CPP b/Adam/DolDoc/DocRecalcB.CPP index 449eecc..c0d44b3 100644 --- a/Adam/DolDoc/DocRecalcB.CPP +++ b/Adam/DolDoc/DocRecalcB.CPP @@ -17,7 +17,7 @@ I64 DocWordWrapDel(CDoc *doc,CDocEntry *doc_e, if (doc_e2->type_u8==DOCT_SOFT_NEW_LINE && !same_win) { if (doc->cur_entry==doc_e2) { doc->cur_entry=doc_e2->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } if (*_best_doc_e==doc_e2) { *_best_doc_e=doc_e2->next; @@ -34,7 +34,7 @@ I64 DocWordWrapDel(CDoc *doc,CDocEntry *doc_e, doc_e->tag=ptr; if (doc->cur_entry==doc_e2) { doc->cur_entry=doc_e; - doc->cur_data_col+=k; + doc->cur_col+=k; } if (*_best_doc_e==doc_e2) { *_best_doc_e=doc_e; @@ -94,7 +94,7 @@ U0 DocRecalcXY(CDoc *doc,CDocEntry *doc_e, doc->page_line_num+=y-i; if (doc->page_line_num<0) doc->page_line_num=doc_e->settings.page_len+ - doc->page_line_num%doc_e->settings.page_len; + doc->page_line_num%doc_e->settings.page_len; else doc->page_line_num=doc->page_line_num%doc_e->settings.page_len; if (doc_e->settings.header!=DOC_DFT && @@ -112,7 +112,8 @@ U0 DocRecalcXY(CDoc *doc,CDocEntry *doc_e, } } } else { - if (doc->page_line_num>=doc_e->settings.page_len-doc_e->settings.footer) { + if (doc->page_line_num>= + doc_e->settings.page_len-doc_e->settings.footer) { y+=doc_e->settings.footer; if (doc_e->settings.header==DOC_DFT) doc->page_line_num=0; @@ -137,10 +138,10 @@ CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e, ii=x+1-doc_e->settings.left_margin; if (IsEditableText(doc_e)) { if (doc->cur_entry==doc_e->next) { - if (doc->cur_data_col==doc_e->next->min_col) + if (doc->cur_col==doc_e->next->min_col) i--; } else { - if (doc->cur_entry==doc_e && doc->cur_data_col==i) + if (doc->cur_entry==doc_e && doc->cur_col==i) i--; } if (*_k>i) { @@ -154,9 +155,9 @@ CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e, doc_e2=MAllocIdentical(doc_e,doc->mem_task); doc_e2->tag=StrNew(doc_e->tag+i,doc->mem_task); QueIns(doc_e2,doc_e); - if (doc->cur_entry==doc_e && doc->cur_data_col>=i) { + if (doc->cur_entry==doc_e && doc->cur_col>=i) { doc->cur_entry=doc_e2; - doc->cur_data_col=doc->cur_data_col-i; + doc->cur_col=doc->cur_col-i; } doc_e->tag[i]=0; ptr=StrNew(doc_e->tag,doc->mem_task); @@ -164,7 +165,8 @@ CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e, doc_e->tag=ptr; doc_e2=CAlloc(sizeof(CDocEntryBase),doc->mem_task); doc_e2->type=DOCT_SOFT_NEW_LINE | doc_e->type & 0xFFFFFF00; - doc_e2->de_flags=doc_e->de_flags&~DOCEF_TAG|doldoc.dft_de_flags[DOCT_SOFT_NEW_LINE]; + doc_e2->de_flags=doc_e->de_flags + &~DOCEF_TAG|doldoc.dft_de_flags[DOCT_SOFT_NEW_LINE]; doc_e2->x=x; doc_e2->y=y; doc_e2->page_line_num=doc_e->page_line_num; @@ -185,7 +187,8 @@ CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e, doc_e2=CAlloc(sizeof(CDocEntryBase),doc->mem_task); doc_e2->type=DOCT_SOFT_NEW_LINE | doc_e->type & 0xFFFFFF00; doc_e2->de_flags=DOCEF_WORD_WRAP|doldoc.dft_de_flags[DOCT_SOFT_NEW_LINE]| - doc_e->de_flags & (DOCEF_HIGHLIGHT|DOCG_BL_IV_UL|DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP); + doc_e->de_flags&(DOCEF_HIGHLIGHT|DOCG_BL_IV_UL| + DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP); doc_e2->x=x; doc_e2->y=y; doc_e2->page_line_num=doc_e->last->page_line_num; @@ -202,7 +205,9 @@ I64 DocTempAttr(CDoc *doc,CDocEntry *doc_e,I64 cur_u8_attr) I64 temp_u32_attr; doc_e->de_flags=doc->flags& (DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT) | doc_e->de_flags&~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT); - temp_u32_attr=(cur_u8_attr&0xF0)<<8|doc->flags&DOCG_BL_IV_UL|(doc_e->settings.shifted_x&0x1F)<<16|(doc_e->settings.shifted_y&0x1F)<<21; + temp_u32_attr=(cur_u8_attr&0xF0)<<8| + doc->flags&DOCG_BL_IV_UL|(doc_e->settings.shifted_x&0x1F)<<16| + (doc_e->settings.shifted_y&0x1F)<<21; if (doc_e->de_flags & DOCEF_HAS_BIN && *doc_e->tag=='<') temp_u32_attr.u8[1]|=DOC_COLOR_BIN; else @@ -259,7 +264,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) find_cursor=FALSE,blink_flag,full_refresh=TRUE,unlock; CTask *win_task,*mem_task; CDC *dc; - U8 *bptr,*ptr,buf[136],ch; + U8 *bptr,*ptr,buf[STR_LEN],ch; U32 *u32_ptr,*hl; I32 *depth_buf=NULL; F64 cur_time=tS; @@ -340,11 +345,12 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) hss=&win_task->horz_scroll; vss=&win_task->vert_scroll; if (doc->flags&DOCF_BORDER_DOC) { - doc->cur_top_line_num=0; + doc->top_line_num=0; doc->line_start_col=0; has_cursor=FALSE; if (recalc==DOC_RECALC_TO_SCREEN) - doc->settings_root.cur_text_attr=doc->settings_root.dft_text_attr=win_task->border_attr; + doc->settings_root.cur_text_attr= + doc->settings_root.dft_text_attr=win_task->border_attr; } else { if (has_cursor && full_refresh) { if (Bt(&hss->flags,WSSf_SET_TO_POS)||Bt(&vss->flags,WSSf_SET_TO_POS)) { @@ -354,35 +360,37 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) LBtr(&hss->flags,WSSf_SET_TO_POS); } if (Bt(&vss->flags,WSSf_SET_TO_POS)) { - doc->cur_top_line_num=vss->pos; + doc->top_line_num=vss->pos; LBtr(&vss->flags,WSSf_SET_TO_POS); } } doc->x=doc->line_start_col+width/2; - doc->y=doc->cur_top_line_num+height/2; + doc->y=doc->top_line_num+height/2; find_cursor=TRUE; } } if (recalc==DOC_RECALC_TO_SCREEN) - doc->settings_root.cur_text_attr=doc->settings_root.dft_text_attr=win_task->text_attr; + doc->settings_root.cur_text_attr= + doc->settings_root.dft_text_attr=win_task->text_attr; } x0=doc->line_start_col; - y0=doc->cur_top_line_num; + y0=doc->top_line_num; same_win=top ==doc->old_win_top && bottom==doc->old_win_bottom && left ==doc->old_win_left && right ==doc->old_win_right && doc->cur_entry==doc->old_cur_entry && - doc->cur_data_col==doc->old_cur_data_col; + doc->cur_col==doc->old_cur_col; if (recalc==DOC_RECALC_TO_SCREEN) { y_plot_top=y0-scroll_y/FONT_HEIGHT; y_plot_bottom=y0+height-1-scroll_y/FONT_HEIGHT; - if (!(doc->flags&DOCF_BORDER_DOC) && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) + if (!(doc->flags&DOCF_BORDER_DOC) && + !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) DocBorderLstDraw(doc); } - if (doc->cur_data_col<=doc->cur_entry->min_col) - doc->cur_data_col=doc->cur_entry->min_col; + if (doc->cur_col<=doc->cur_entry->min_col) + doc->cur_col=doc->cur_entry->min_col; doc_e=doc->root.next; doc_e->de_flags&=~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT); if (doc_e==doc->root.next) @@ -404,7 +412,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) best_doc_e=doc; best_col=0; doc->cur_entry=doc; - doc->cur_data_col=0; + doc->cur_col=0; doc_e=doc; } skipped_update= doc_e==doc && doc->root.next!=doc; @@ -423,7 +431,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) MemCpy(&doc_e->settings,s,sizeof(CDocSettings)); s=&doc_e->settings; if (doc_e->de_flags & (DOCEF_TAG_CB|DOCEF_DEFINE) && - !(doc_e->de_flags & DOCEF_LST)) { + !(doc_e->de_flags & DOCEF_LST)) { Free(doc_e->tag); if (doc_e->de_flags & DOCEF_TAG_CB) { if (doc_e->tag_cb) @@ -431,17 +439,18 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) else doc_e->tag=StrNew("",mem_task); } else { - if (temph=HashFind(doc_e->define_str,win_task->hash_table,HTT_DEFINE_STR)) + if (temph=HashFind(doc_e->define_str, + win_task->hash_table,HTT_DEFINE_STR)) doc_e->tag=StrNew(temph->data,mem_task); else doc_e->tag=CAlloc(1,mem_task); } doc_e->max_col=StrLen(doc_e->tag); - if (doc->cur_entry==doc_e && doc->cur_data_col>=doc_e->max_col) { + if (doc->cur_entry==doc_e && doc->cur_col>=doc_e->max_col) { if (doc_e->max_col) - doc->cur_data_col=doc_e->max_col-1; + doc->cur_col=doc_e->max_col-1; else - doc->cur_data_col=0; + doc->cur_col=0; } } k=DocWordWrapDel(doc,doc_e,full_refresh,same_win, @@ -475,8 +484,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) cursor_y=doc_e->y; if (doc_e->de_flags & DOCEF_REFRESH_DATA && - (doc_e->type_u8==DOCT_DATA || doc_e->type_u8==DOCT_CHECK_BOX || - doc_e->de_flags & DOCEF_LST)) { + (doc_e->type_u8==DOCT_DATA || doc_e->type_u8==DOCT_CHECK_BOX || + doc_e->de_flags & DOCEF_LST)) { DocDataFmt(doc,doc_e); k=StrLen(doc_e->tag); } @@ -520,8 +529,9 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) ijif>>=3; for (k=0;kscroll_len;k++) { ch=ptr[(ijif+k)%j]; - if (!Bt(chars_bitmap_displayable,ch)) ch='.'; - if (recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { + if (!Bt(chars_bmp_displayable,ch)) ch='.'; + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+ch); @@ -540,7 +550,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) if (doc_e->de_flags & DOCEF_BORDER_PLOT && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) { while (ch=*ptr++) { - if (recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+ch); else if (find_cursor) { @@ -558,8 +569,10 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) hl=DocHighlight(doc_e,ptr,k,temp_u32_attr); else hl=NULL; - if (recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { - if (y>y_plot_bottom) //Technically we should do this for scrolling_x, too. + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { +//Technically we should do this for scrolling_x, too. + if (y>y_plot_bottom) more=TRUE; else if (y>=y_plot_top) { if (hl) @@ -591,8 +604,9 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) } nobound_switch (doc_e->type_u8) { case DOCT_TEXT: - if (!col2 && !(doc_e->de_flags&(DOCEF_TREE|DOCEF_LST|DOCEF_TAG_CB|DOCEF_DEFINE| - DOCEF_HTML_LINK|DOCEF_BIN_PTR_LINK))) + if (!col2 && !(doc_e->de_flags + &(DOCEF_TREE|DOCEF_LST|DOCEF_TAG_CB|DOCEF_DEFINE| + DOCEF_HTML_LINK|DOCEF_BIN_PTR_LINK))) del_cl=TRUE; break; case DOCT_HEX_ED: @@ -608,7 +622,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) StrPrint(buf,"%08tX ",bptr); ptr=buf; while (ch=*ptr++) { - if (recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+ch); @@ -629,7 +644,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) StrPrint(buf,"%02tX",*bptr++); ptr=buf; while (ch=*ptr++) { - if (recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+ch); @@ -652,8 +668,9 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) x+=(doc_e->hex_ed_width-k)*3; for (j=0;jde_flags&DOCEF_DONT_DRAW)) { + if (!Bt(chars_bmp_displayable,ch)) ch='.'; + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+ch); @@ -679,7 +696,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) if (doc_e->de_flags & DOCEF_BORDER_PLOT && !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) { while (xde_flags&DOCEF_DONT_DRAW)) + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+CH_SPACE); if (find_cursor) { d2=DocCharDist(doc,x,y); @@ -690,7 +708,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) } } else { k-=x; - if (recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { + if (recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (y_plot_top<=y<=y_plot_bottom) TextLenStr(win_task,x-x0,y-y0,k,temp_u32_attr," "); x+=k; @@ -709,8 +728,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC) break; case DOCT_NEW_LINE: case DOCT_SOFT_NEW_LINE: - if (recalc==DOC_RECALC_TO_SCREEN && - !(doc_e->de_flags&DOCEF_DONT_DRAW)&& y_plot_top<=y<=y_plot_bottom) + if (recalc==DOC_RECALC_TO_SCREEN &&!(doc_e->de_flags&DOCEF_DONT_DRAW)&& + y_plot_top<=y<=y_plot_bottom) TextLenAttr(win_task,x-x0,y-y0,width-(x-x0),cur_u8_attr<<8); if (doc_e->de_flags&DOCEF_HIGHLIGHT) { if (s->state==DOCSS_CPP_Z_COMMENT) @@ -856,7 +875,7 @@ rc_adjust_xy: cur_u8_attr=cur_u8_attr&0xF0|DOC_COLOR_PMT; if (y==cursor_y) { doc->cur_entry=doc_e->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } break; case DOCT_WORD_WRAP: @@ -898,14 +917,15 @@ rc_adjust_xy: case DOCT_CURSOR: if (!find_cursor && !(doc->flags & DOCF_NO_CURSOR)) { doc->cur_entry=doc_e->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } del_cl=TRUE; break; case DOCT_SPRITE: if (!doc_e->bin_data && doc->flags&DOCEF_HAS_BIN) doc_e->bin_data=DocBinFindNum(doc,doc_e->bin_num); - if ((tempb=doc_e->bin_data) && !tempb->tag && doc_e->tag && *doc_e->tag) + if ((tempb=doc_e->bin_data) && + !tempb->tag && doc_e->tag && *doc_e->tag) tempb->tag=StrNew(doc_e->tag,mem_task); if (tempb && dc) { DCRst(dc); @@ -926,14 +946,13 @@ rc_adjust_xy: i^=0xF; if (temp_u32_attr & DOCET_INVERT) i^=0xF; - if (blink_flag && (doc_e==doc->cur_entry || temp_u32_attr&DOCET_BLINK)) + if (blink_flag && + (doc_e==doc->cur_entry || temp_u32_attr&DOCET_BLINK)) i^=0xF; } dc->color=i; if (find_cursor) dc->flags|=DCF_LOCATE_NEAREST; - dc->nearest_sprite_elem_num=0; - dc->nearest_dist=MAX_I64; if (recalc==DOC_RECALC_TO_SCREEN && doc->cur_sprite==bptr) { dc->flags|=DCF_LOCATE_NEAREST; dc->cur_x=ip.pos.x; @@ -955,13 +974,14 @@ rc_adjust_xy: } if (ii&(1<depth_buf; } else dc->depth_buf=depth_buf; - GrRotZEqu(dc->r,cur_time*3.1); - GrRotYEqu(dc->r,cur_time*1.9); - GrRotXEqu(dc->r,cur_time); + Mat4x4IdentEqu(dc->r); + Mat4x4RotZ(dc->r,cur_time*3.1); + Mat4x4RotY(dc->r,cur_time*1.9); + Mat4x4RotX(dc->r,cur_time); dc->flags|=DCF_TRANSFORMATION; dc->x=xx; dc->y=yy; @@ -971,7 +991,7 @@ rc_adjust_xy: Sprite3(dc,xx,yy,zz,bptr); dc->depth_buf=NULL; if (recalc==DOC_RECALC_TO_SCREEN && doc->cur_sprite==bptr) - doc->cur_sprite_elem_num=dc->nearest_sprite_elem_num; + doc->nearest_sprite_elem_num=dc->nearest_sprite_elem_num; dc->flags&=~(DCF_LOCATE_NEAREST|DCF_DONT_DRAW|DCF_TRANSFORMATION); if (dc->nearest_dist<=D) { D=dc->nearest_dist; @@ -980,8 +1000,10 @@ rc_adjust_xy: } break; case DOCT_SONG: - if (sys_focus_task==win_task && recalc==DOC_RECALC_TO_SCREEN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { - if (doc_e->aux_str && (!music.cur_song || StrCmp(music.cur_song,doc_e->aux_str))) { + if (sys_focus_task==win_task && recalc==DOC_RECALC_TO_SCREEN && + !(doc_e->de_flags&DOCEF_DONT_DRAW)) { + if (doc_e->aux_str && + (!music.cur_song || StrCmp(music.cur_song,doc_e->aux_str))) { Free(music.cur_song); MusicSettingsRst; music.cur_song=AStrNew(doc_e->aux_str); @@ -999,7 +1021,7 @@ rc_adjust_xy: if (doc_e->de_flags & DOCEF_HAS_BORDER) TextBorder(win_task,doc_e->x-x0,x-x0-1,doc_e->y-y0,y-y0, - temp_u32_attr.u8[1],ToBool(doc_e->de_flags & DOCEF_SOLID_BORDER)); + temp_u32_attr.u8[1],ToBool(doc_e->de_flags & DOCEF_SOLID_BORDER)); if (full_refresh) { switch (doc_e->type_u8) { case DOCT_CHECK_BOX: @@ -1033,7 +1055,8 @@ rc_adjust_xy: else tree_collapsed=FALSE; doc_e2=doc_e->next; - while (doc_e2!=doc && doc_e2->type_u8!=DOCT_INDENT && !(doc_e2->de_flags & DOCEF_TREE)) + while (doc_e2!=doc && doc_e2->type_u8!=DOCT_INDENT && + !(doc_e2->de_flags & DOCEF_TREE)) doc_e2=doc_e2->next; if (doc_e2->type_u8==DOCT_INDENT) { j=i=s->indent; @@ -1056,10 +1079,11 @@ rc_adjust_xy: doc_e2=doc_e->next; rc_skip: - while (doc_e2!=doc && doc_e2->de_flags & (DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) { + while (doc_e2!=doc && doc_e2->de_flags + &(DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP)) { if (doc_e2==doc->cur_entry) { doc->cur_entry=doc_e2->next; - doc->cur_data_col=doc->cur_entry->min_col; + doc->cur_col=doc->cur_entry->min_col; } if (full_refresh) { doc_e2->x=x; @@ -1067,7 +1091,8 @@ rc_skip: doc_e2->page_line_num=doc->page_line_num; MemCpy(&doc_e2->settings,s,sizeof(CDocSettings)); doc_e2->type.u8[1]=cur_u8_attr; - doc_e2->de_flags=doc->flags&(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT) | + doc_e2->de_flags=doc->flags + &(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT) | doc_e2->de_flags&~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT); } doc_e2=doc_e2->next; @@ -1078,7 +1103,7 @@ rc_skip: if (!(doc_e->de_flags & (DOCEF_HOLD|DOCEF_FILTER_SKIP))) { if (doc_e==doc->cur_entry) { doc->cur_entry=doc_e2; - doc->cur_data_col=doc_e2->min_col; + doc->cur_col=doc_e2->min_col; } if (best_doc_e==doc_e) { best_doc_e=doc_e2; @@ -1151,7 +1176,7 @@ rc_skip: } if (find_cursor) { doc->cur_entry=best_doc_e; - doc->cur_data_col=best_col; + doc->cur_col=best_col; DocFormBwd(doc); //We need this because text coordinates are used if (best_dcur_entry->type_u8!=DOCT_HEX_ED) { doc->y=doc->cur_entry->y; - doc->x=doc->cur_entry->x+doc->cur_data_col; + doc->x=doc->cur_entry->x+doc->cur_col; } else { - doc->y=doc->cur_entry->y+doc->cur_data_col/3/doc->cur_entry->hex_ed_width; - x=doc->cur_data_col%(doc->cur_entry->hex_ed_width*3); + doc->y=doc->cur_entry->y+doc->cur_col/3/doc->cur_entry->hex_ed_width; + x=doc->cur_col%(doc->cur_entry->hex_ed_width*3); i=x/doc->cur_entry->hex_ed_width; doc->x=doc->cur_entry->x+9; if (i<2) @@ -1184,15 +1209,15 @@ rc_skip: x=scroll_x/FONT_WIDTH; y=scroll_y/FONT_HEIGHT; } - if (doc->cur_top_line_num-y+height-1>doc->max_y) - doc->cur_top_line_num=doc->max_y-(height-1)+y; - if (doc->cur_top_line_num-ymin_y) - doc->cur_top_line_num=doc->min_y+y; + if (doc->top_line_num-y+height-1>doc->max_y) + doc->top_line_num=doc->max_y-(height-1)+y; + if (doc->top_line_num-ymin_y) + doc->top_line_num=doc->min_y+y; - if (doc->y-doc->cur_top_line_num+y>height-1) - doc->cur_top_line_num=doc->y-(height-1)+y; - if (doc->y-doc->cur_top_line_num+y<0) - doc->cur_top_line_num=doc->y+y; + if (doc->y-doc->top_line_num+y>height-1) + doc->top_line_num=doc->y-(height-1)+y; + if (doc->y-doc->top_line_num+y<0) + doc->top_line_num=doc->y+y; if (doc->line_start_col-x+width-1>doc->max_x) doc->line_start_col=doc->max_x-(width-1)+x; @@ -1207,7 +1232,7 @@ rc_skip: } if (recalc==DOC_RECALC_TO_SCREEN && has_cursor) { x=doc->x-doc->line_start_col+left +scroll_x/FONT_WIDTH; - y=doc->y-doc->cur_top_line_num+top+scroll_y/FONT_HEIGHT; + y=doc->y-doc->top_line_num+top+scroll_y/FONT_HEIGHT; if (0<=x<=right && 0<=y<=bottom && xflags&DOCF_HIDE_CURSOR)) { @@ -1231,7 +1256,7 @@ rc_skip: vss->max=vss->min; else vss->max=doc->max_y-height+1; - vss->pos=doc->cur_top_line_num; + vss->pos=doc->top_line_num; } } LBEqu(&doc->flags,DOCf_MORE,more); @@ -1243,7 +1268,7 @@ rc_skip: doc->old_win_left=left; doc->old_win_right=right; doc->old_cur_entry=doc->cur_entry; - doc->old_cur_data_col=doc->old_cur_data_col; + doc->old_cur_col=doc->old_cur_col; } if (doc->flags & DOCF_HAS_SONG) LBts(&win_task->task_flags,TASKf_HAS_SONG); diff --git a/Adam/DolDoc/DocTree.CPP b/Adam/DolDoc/DocTree.CPP index 0b37eac..a62a4d2 100644 --- a/Adam/DolDoc/DocTree.CPP +++ b/Adam/DolDoc/DocTree.CPP @@ -17,32 +17,33 @@ public Bool DocTreeFind(CDoc *haystack_doc,U8 *needle_path, while (doc_e!=haystack_doc) { if (doc_e->type_u8==DOCT_INDENT) i+=doc_e->attr; - else if (i==k && doc_e->de_flags&DOCEF_TREE && !StrCmp(doc_e->tag+3,st2)) { - if (*st1) - break; - else { - if (_tree_entry) *_tree_entry=doc_e; - i=0; - while (doc_e!=haystack_doc && doc_e->type_u8!=DOCT_INDENT) - doc_e=doc_e->next; - if (doc_e!=haystack_doc) { - i=doc_e->attr; - if (_start_indent) *_start_indent=doc_e; - doc_e=doc_e->next; - while (doc_e!=haystack_doc && i>0) { - if (doc_e->type_u8==DOCT_INDENT) { - i+=doc_e->attr; - if (i<=0) { - if (_end_indent) *_end_indent=doc_e; - result=TRUE; - break; - } - } - doc_e=doc_e->next; - } - } - goto ft_done; - } + else if (i==k && doc_e->de_flags&DOCEF_TREE && + !StrCmp(doc_e->tag+3,st2)) { + if (*st1) + break; + else { + if (_tree_entry) *_tree_entry=doc_e; + i=0; + while (doc_e!=haystack_doc && doc_e->type_u8!=DOCT_INDENT) + doc_e=doc_e->next; + if (doc_e!=haystack_doc) { + i=doc_e->attr; + if (_start_indent) *_start_indent=doc_e; + doc_e=doc_e->next; + while (doc_e!=haystack_doc && i>0) { + if (doc_e->type_u8==DOCT_INDENT) { + i+=doc_e->attr; + if (i<=0) { + if (_end_indent) *_end_indent=doc_e; + result=TRUE; + break; + } + } + doc_e=doc_e->next; + } + } + goto ft_done; + } } doc_e=doc_e->next; } @@ -61,12 +62,12 @@ public Bool DocTreeMake(CDoc *doc,U8 *path) {//Make registry-like tree widget. I64 i=0,j=MIN_I64,k=0; U8 *st1=StrNew(path), - *st2=MAlloc(StrLen(path)+1), - *st3=StrNew(path); + *st2=MAlloc(StrLen(path)+1), + *st3=StrNew(path); Bool result=TRUE,unlock_doc=DocLock(doc); CDocEntry *doc_e=doc->root.next; doc->cur_entry=doc; - doc->cur_data_col=0; + doc->cur_col=0; while (*st1 && doc_e!=doc) { StrFirstRem(st1,"/",st2); if (*st2) { @@ -75,17 +76,18 @@ public Bool DocTreeMake(CDoc *doc,U8 *path) i+=doc_e->attr; if (i==j) { doc->cur_entry=doc_e; - doc->cur_data_col=0; + doc->cur_col=0; goto mt_done; } - } else if (i==k && doc_e->de_flags&DOCEF_TREE && !StrCmp(doc_e->tag+3,st2)) { - Free(st3); - st3=StrNew(st1); - j=i; - if (!*st1) - result=FALSE; - else - break; + } else if (i==k && doc_e->de_flags&DOCEF_TREE && + !StrCmp(doc_e->tag+3,st2)) { + Free(st3); + st3=StrNew(st1); + j=i; + if (!*st1) + result=FALSE; + else + break; } doc_e=doc_e->next; } @@ -99,7 +101,7 @@ mt_done: if (*st2) { DocPrint(doc,"$$TR+C,\"%s\"$$\n$$ID,2$$",st2); doc->cur_entry=DocPrint(doc,"$$ID,-2$$"); - doc->cur_data_col=0; + doc->cur_col=0; } } } @@ -116,16 +118,16 @@ public I64 ExeDoc(CDoc *doc,Bool just_load=FALSE) {//JIT Compile and execute a document. I64 result; Bool okay=TRUE,unlock_doc=DocLock(doc); - CLex *lx=LexNew(,LF_DONT_FREE_BUF); + CCmpCtrl *cc=CmpCtrlNew(,CCF_DONT_FREE_BUF); if (just_load) - lx->flags|=LF_JUST_LOAD; + cc->flags|=CCF_JUST_LOAD; if (Fs->last_lex!=&Fs->next_lex) - lx->opts=Fs->last_lex->opts; - QueIns(lx,Fs->last_lex); - LexAttachDoc(lx,,doc); + cc->opts=Fs->last_lex->opts; + QueIns(cc,Fs->last_lex); + LexAttachDoc(cc,,doc); try { - Lex(lx); - result=ExeCmdLine(lx); + Lex(cc); + result=ExeCmdLine(cc); } catch { if (Fs->except_ch=='Compiler' || Fs->except_ch=='Break') { Fs->catch_except=TRUE; @@ -133,9 +135,9 @@ public I64 ExeDoc(CDoc *doc,Bool just_load=FALSE) result=0; } } - QueRem(lx); + QueRem(cc); if (okay) - LexDel(lx); //TODO: can crash + CmpCtrlDel(cc); //TODO: can crash if (unlock_doc) DocUnlock(doc); return result; diff --git a/Adam/Dsk/ADskA.CPP b/Adam/Dsk/ADskA.CPP index 724cd6b..800a561 100644 --- a/Adam/Dsk/ADskA.CPP +++ b/Adam/Dsk/ADskA.CPP @@ -3,8 +3,8 @@ public U8 *DBlk(I64 blk,Bool write=FALSE) {//Dump disk block. Optionally, write. //If you set write to TRUE, the block will -//be written when you press . -//See $LK,"::/Demo/Dsk/DskRaw.CPP"$. + //be written when you press . + //See $LK,"::/Demo/Dsk/DskRaw.CPP"$. U8 *buf=MAlloc(BLK_SIZE); RBlks(Fs->cur_dv,buf,blk,1); @@ -22,9 +22,9 @@ public U8 *DBlk(I64 blk,Bool write=FALSE) public U8 *DCluster(I64 c,Bool write=FALSE,I64 num=0) {//Dump disk cluster. Optionally, write. //If you set write to TRUE, the cluster will -//be written when you press . -//See $LK,"::/Demo/Dsk/DskRaw.CPP"$. -//Do $LK,"Dir",A="MN:Dir"$("*",TRUE); to get cluster numbers of files. + //be written when you press . + //See $LK,"::/Demo/Dsk/DskRaw.CPP"$. + //Do $LK,"Dir",A="MN:Dir"$("*",TRUE); to get cluster numbers of files. U8 *buf=MAlloc(Fs->cur_dv->spc<cur_dv,c,num); RClusters(Fs->cur_dv,buf,c,1); @@ -43,7 +43,7 @@ public U8 *DCluster(I64 c,Bool write=FALSE,I64 num=0) public U8 *Dump(U8 *filename,Bool write=FALSE) {//Dump file. Optionally, write. //If you set write to TRUE, the file will -//be written when you press . + //be written when you press . U8 *buf; I64 size; if (buf=FileRead(filename,&size)) { @@ -95,16 +95,16 @@ public I64 FileCnt(CDirEntry *tempde) public Bool Copy(U8 *src_files_find_mask,U8 *dst_files_find_mask=".") {//Copy files. //If the name ends in ".Z", it will -//be stored compressed. If not ".Z" -//it will be stored uncompressed. + //be stored compressed. If not ".Z" + //it will be stored uncompressed. Bool result=TRUE; - CFileAccess *fa; + CDirContext *dirc; CDirEntry *tempde,*tempde1; U8 *st; if (!(tempde=FilesFind(src_files_find_mask,FUF_CLUSTER_ORDER))) return FALSE; if (IsDir(dst_files_find_mask)) { - if (fa=FileAccessNew(dst_files_find_mask,TRUE)) { + if (dirc=DirContextNew(dst_files_find_mask,TRUE)) { while (tempde) { tempde1=tempde->next; if (!(tempde->attr & RS_ATTR_DIR)) { @@ -116,7 +116,7 @@ public Bool Copy(U8 *src_files_find_mask,U8 *dst_files_find_mask=".") DirEntryDel(tempde); tempde=tempde1; } - FileAccessDel(fa); + DirContextDel(dirc); } return result; } else @@ -151,10 +151,11 @@ I64 CopyTree2(CDirEntry *tempde,I64 src_dir_len,I64 dst_dir_len,U8 *dst_dir) } return result; } -public I64 CopyTree(U8 *src_files_find_mask,U8 *dst_files_find_mask,Bool no_mask=TRUE) +public I64 CopyTree(U8 *src_files_find_mask,U8 *dst_files_find_mask, + Bool no_mask=TRUE) {//Copy directory tree. //Returns the count of copied files (not dirs). - CFileAccess *fa; + CDirContext *dirc; CDirEntry *tempde=NULL; I64 result=0,i1,i2; U8 *st1,*st2; @@ -169,18 +170,18 @@ public I64 CopyTree(U8 *src_files_find_mask,U8 *dst_files_find_mask,Bool no_mask } Free(st1); Free(st2); - if (fa=FileAccessNew(src_files_find_mask,TRUE,,no_mask)) { - tempde=SysFilesFind(fa->mask,FUF_RECURSE); + if (dirc=DirContextNew(src_files_find_mask,TRUE,,no_mask)) { + tempde=FilesFind(dirc->mask,FUF_RECURSE); st1=CurDir; - FileAccessDel(fa); + DirContextDel(dirc); i1=StrLen(st1); if (i1==3) i1--; - if (fa=FileAccessNew(dst_files_find_mask,TRUE,TRUE)) { + if (dirc=DirContextNew(dst_files_find_mask,TRUE,TRUE)) { st2=CurDir; i2=StrLen(st2); if (i2==3) i2--; result=CopyTree2(tempde,i1,i2,st2); - FileAccessDel(fa); + DirContextDel(dirc); Free(st2); } DirTreeDel(tempde); @@ -198,7 +199,7 @@ I64 DelTreeDirs(CDirEntry *tempde1) if (tempde1->attr & RS_ATTR_DIR) { if (tempde1->sub) result+=DelTreeDirs(tempde1->sub); - result+=SysDel(tempde1->full_name,TRUE); + result+=Del(tempde1->full_name,TRUE,TRUE); } DirEntryDel(tempde1); tempde1=tempde2; @@ -215,7 +216,7 @@ I64 DelTreeFiles(CDirEntry *tempde1) if (tempde1->sub) result+=DelTreeFiles(tempde1->sub); } else - result+=SysDel(tempde1->full_name,FALSE); + result+=Del(tempde1->full_name,FALSE,TRUE); DirEntryDel(tempde1); tempde1=tempde2; } @@ -228,8 +229,8 @@ public I64 DelTree(U8 *files_find_mask,U8 *fu_flags=NULL) ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); if (IsDir(files_find_mask)) { result=DelTreeDirs(FilesFind(files_find_mask,fuf_flags)); - result+=SysDel(files_find_mask,TRUE); - result+=SysDel(files_find_mask,FALSE); + result+=Del(files_find_mask,TRUE,TRUE); + result+=Del(files_find_mask,FALSE,TRUE); } else result=DelTreeFiles(FilesFind(files_find_mask,fuf_flags)); return result; @@ -240,7 +241,7 @@ U0 TouchFile(U8 *filename,U8 *attr,CDate cdt=MIN_I64) CDrv *dv=Let2Drv(*filename); CDirEntry de; U8 *cur_dir=StrNew(filename), - buf[136]; + buf[STR_LEN]; if (FileFind(filename,&de,FUF_JUST_FILES)) { Free(de.full_name); if (!StrCmp(attr,"+?")) @@ -260,14 +261,15 @@ U0 TouchFile(U8 *filename,U8 *attr,CDate cdt=MIN_I64) } else PrintErr("File not found.\n"); } -public U0 Touch(U8 *files_find_mask,U8 *attr="+?",U8 *fu_flags=NULL,CDate cdt=MIN_I64) +public U0 Touch(U8 *files_find_mask,U8 *attr="+?", + U8 *fu_flags=NULL,CDate cdt=MIN_I64) {/*Touch file attributes and DateTime. Default lists attributes. attr: "+?" =show current - "+T" =resident - $LK,"RS_ATTR_READ_ONLY",A="MN:RS_ATTR_READ_ONLY"$ $LK,"ST_FILE_ATTRS",A="MN:ST_FILE_ATTRS"$ +"+T" =resident +$LK,"RS_ATTR_READ_ONLY",A="MN:RS_ATTR_READ_ONLY"$ $LK,"ST_FILE_ATTRS",A="MN:ST_FILE_ATTRS"$ To Set DateL: - Touch(filename,"",,datetime); +Touch(filename,"",,datetime); */ I64 fuf_flags=0; CDirEntry *tempde,*tempde1; @@ -374,7 +376,8 @@ I64 Size1(CDirEntry *tempde,I64 *_fuf_flags,I64 round_to) CDrv *dv; while (tempde) { if ((i=tempde->size) && Bt(_fuf_flags,FUf_EXPAND) && - !(tempde->attr&RS_ATTR_DIR) && FileAttr(tempde->name)&RS_ATTR_COMPRESSED) { + !(tempde->attr&RS_ATTR_DIR) && + FileAttr(tempde->name)&RS_ATTR_COMPRESSED) { dv=Let2Drv(*tempde->full_name); RBlks(dv,buf,Cluster2Blk(dv,tempde->cluster),1); i=(&buf)(CArcCompress *)->expanded_size; @@ -392,7 +395,7 @@ I64 Size1(CDirEntry *tempde,I64 *_fuf_flags,I64 round_to) public I64 Size(U8 *files_find_mask="/*",U8 *fu_flags=NULL,I64 round_to=0) {//Total size of files in mask. "+x" for expanded size. //Does not include directory size of base directory, but -//does include size of sub directories. + //does include size of sub directories. I64 fuf_flags=0,result=0; CDirEntry *tempde1=NULL; ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r"); diff --git a/Adam/Dsk/ADskB.CPP b/Adam/Dsk/ADskB.CPP index d9d3ba6..73275e9 100644 --- a/Adam/Dsk/ADskB.CPP +++ b/Adam/Dsk/ADskB.CPP @@ -78,28 +78,28 @@ I64 drv_dsk_dsk_size; public U0 PrtDsk(U8 drv_let=0) {//Partition the disk containing partition drv_let. //drv_let=0 means add new drive that -//is not already mounted. + //is not already mounted. CBlkDev *bd; CPlannedDrv root,*temppp; CMasterBoot mbr; Bool pri=TRUE; I64 ext_base,drv_let2,pri_cnt=0, - i,start_offset,offset,remaining; -"This command does not play well\n" -"with other operating systems.\n" -"You really should use another\n" -"operating system's partitioner.\n" -"If you use this, it may, in fact,\n" -"make your hard drive impossible\n" -"to repartition with other operating\n" -"until you set block zero to zero\n" -"with $$LK,\"MasterBootZero\",\"MN:MasterBootZero\"$$()\n\n\n" -"Continue"; + i,start_offset,offset,remaining; + "This command does not play well\n" + "with other operating systems.\n" + "You really should use another\n" + "operating system's partitioner.\n" + "If you use this, it may, in fact,\n" + "make your hard drive impossible\n" + "to repartition with other operating\n" + "until you set block zero to zero\n" + "with $$LK,\"MasterBootZero\",\"MN:MasterBootZero\"$$()\n\n\n" + "Continue"; if (!YorN) return; if (drv_let) try - Let2BlkDev(drv_let); + Let2BlkDev(drv_let); catch { drv_let=0; Fs->catch_except=TRUE; @@ -136,9 +136,9 @@ public U0 PrtDsk(U8 drv_let=0) pri=FALSE; } "Blocks Remaining:%d (0x%X)\n", - remaining-DRV_HEADER,remaining-DRV_HEADER; + remaining-DRV_HEADER,remaining-DRV_HEADER; temppp->size=CeilU64(GetI64("Size in Blocks :", - remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); + remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); } while (!(ROUND_DRV_TO<=temppp->size<=FloorU64(remaining,ROUND_DRV_TO))); QueIns(temppp,root.last); remaining-=temppp->size; @@ -225,7 +225,7 @@ public U0 PrtDsk(U8 drv_let=0) for (i=bd->first_drv_let;isize+dv->spc-1)/dv->spc; + s=(dv->size+dv->spc-1)/dv->spc; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; @@ -273,7 +273,7 @@ U0 RedSeaDrvView(U8 drv_let=0) } catch DrvUnlock(dv); GetChar; - + SettingsPop; DCFill; DCDel(dc); @@ -285,8 +285,8 @@ U0 FAT32DrvView(U8 drv_let=0) U32 *bitmap; CDC *dc=DCAlias; l=(GR_HEIGHT-3*FONT_HEIGHT)*(GR_WIDTH-FONT_WIDTH<<1), - s=(dv->size+dv->spc-1)/dv->spc; - + s=(dv->size+dv->spc-1)/dv->spc; + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; DocCursor; @@ -315,7 +315,7 @@ U0 FAT32DrvView(U8 drv_let=0) } catch DrvUnlock(dv); GetChar; - + SettingsPop; DCFill; DCDel(dc); @@ -340,9 +340,9 @@ public U0 DrvView(U8 drv_let=0) public U0 DskView(U8 drv_let=0) {//Disk view. Pie chart of partition sizes. I64 i,j, - h=Fs->pix_width, - v=Fs->pix_height, - radius; + h=Fs->pix_width, + v=Fs->pix_height, + radius; CDrv *dv; CBlkDev *bd=Let2BlkDev(drv_let); CDC *dc=DCAlias; @@ -367,18 +367,18 @@ public U0 DskView(U8 drv_let=0) sect_end =-((dv->base_offset+dv->size)*2*ã/(bd->max_blk+1)); dc->color=BLACK; GrLine(dc,h>>1,v>>1, - h>>1+radius*Cos(sect_start), - v>>1+radius*Sin(sect_start)); + h>>1+radius*Cos(sect_start), + v>>1+radius*Sin(sect_start)); GrLine(dc,h>>1,v>>1, - h>>1+radius*Cos(sect_end), - v>>1+radius*Sin(sect_end)); + h>>1+radius*Cos(sect_end), + v>>1+radius*Sin(sect_end)); dc->color=j; GrPrint(dc,0,v-FONT_HEIGHT*j,"%C %-8Z",Drv2Let(dv), - dv->type.u16[0],"ST_DRV_TYPES"); + dv->type.u16[0],"ST_DRV_TYPES"); GrFloodFill(dc, - h>>1+(radius-4)*Cos((sect_start+sect_end)/2), - v>>1+(radius-4)*Sin((sect_start+sect_end)/2),FALSE); + h>>1+(radius-4)*Cos((sect_start+sect_end)/2), + v>>1+(radius-4)*Sin((sect_start+sect_end)/2),FALSE); j++; } } @@ -389,6 +389,8 @@ public U0 DskView(U8 drv_let=0) DCDel(dc); } +#help_index "File/Cmd Line (Typically);Cmd Line (Typically)" + public I64 Zip(U8 *files_find_mask="*",U8 *fu_flags=NULL) {//Compress files by moving to .Z filename. U8 *st; @@ -412,7 +414,7 @@ public I64 Zip(U8 *files_find_mask="*",U8 *fu_flags=NULL) public I64 Unzip(U8 *files_find_mask="*.Z",U8 *fu_flags=NULL) {//Uncompress files by moving to not .Z filename. //You don't have to do this for normal operation. -//It automatically unzips ".Z" files. + //It automatically unzips ".Z" files. U8 *st; CDirEntry *tempde,*tempde1; I64 result=0,fuf_flags=0; diff --git a/Adam/Dsk/ChkDsk.CPP b/Adam/Dsk/ChkDsk.CPP index 01d6e8f..6e6b7c6 100644 --- a/Adam/Dsk/ChkDsk.CPP +++ b/Adam/Dsk/ChkDsk.CPP @@ -11,7 +11,8 @@ Bool ChkDskConfirm(Bool *_fix,Bool *_confirm) return *_fix; } -I64 RedSeaChkDskLst(CDrv *dv,CDirEntry *tempde1,U8 *bits,U8 *bits2,I64 size,I64 bpc) +I64 RedSeaChkDskLst(CDrv *dv,CDirEntry *tempde1, + U8 *bits,U8 *bits2,I64 size,I64 bpc) { CDirEntry *tempde2; I64 i,j,errs=0; @@ -23,18 +24,18 @@ I64 RedSeaChkDskLst(CDrv *dv,CDirEntry *tempde1,U8 *bits,U8 *bits2,I64 size,I64 for (i=0;icluster-dv->data_area>size) { PrintErr("Invalid Cluster:%s Cluster:%X\n",tempde1->full_name, - i+tempde1->cluster); + i+tempde1->cluster); errs++; break; } if (LBts(bits,i+tempde1->cluster-dv->data_area)) { PrintErr("Dbl Alloc:%s Cluster:%X\n",tempde1->full_name, - i+tempde1->cluster); + i+tempde1->cluster); errs++; } if (!LBtr(bits2,i+tempde1->cluster-dv->data_area)) { PrintErr("UnAlloc:%s Cluster:%X\n",tempde1->full_name, - i+tempde1->cluster); + i+tempde1->cluster); errs++; } } @@ -49,8 +50,8 @@ I64 RedSeaChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) I64 i,j,bpc,size,errs=0; CDrv *dv=Let2Drv(drv_let),*old_dv=Fs->cur_dv; U8 *files_find_mask=MStrPrint("%c:/*",Drv2Let(dv)), - *old_dir=StrNew(Fs->cur_dir), - *bits,*bits2; + *old_dir=StrNew(Fs->cur_dir), + *bits,*bits2; CDirEntry *ptr,*ptr2; Drv(drv_let); @@ -84,7 +85,8 @@ I64 RedSeaChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) } } - errs+=RedSeaChkDskLst(dv,FilesFind(files_find_mask,FUF_RECURSE),bits,bits2,size,bpc); + errs+=RedSeaChkDskLst(dv,FilesFind(files_find_mask,FUF_RECURSE), + bits,bits2,size,bpc); for (i=1;idata_area); @@ -102,7 +104,8 @@ I64 RedSeaChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) return errs; } -I64 FAT32ChkDskLst(CDrv *dv,CDirEntry *tempde1,U8 *bits,U32 *bits2,I64 size,I64 bpc) +I64 FAT32ChkDskLst(CDrv *dv,CDirEntry *tempde1, + U8 *bits,U32 *bits2,I64 size,I64 bpc) { CDirEntry *tempde2; I64 i,c,errs=0; @@ -152,8 +155,8 @@ I64 FAT32ChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) I64 i,bpc,size,c,errs=0; CDrv *dv=Let2Drv(drv_let),*old_dv=Fs->cur_dv; U8 *files_find_mask=MStrPrint("%c:/*",Drv2Let(dv)), - *old_dir=StrNew(Fs->cur_dir), - *bits; + *old_dir=StrNew(Fs->cur_dir), + *bits; U32 *bits2; Drv(drv_let); "Scanning...\n"; @@ -182,7 +185,8 @@ I64 FAT32ChkDsk(U8 drv_let,Bool *_fix,Bool *_confirm) c=ClusterNumNext(dv,c); } - errs+=FAT32ChkDskLst(dv,FilesFind(files_find_mask,FUF_RECURSE),bits,bits2,size,bpc); + errs+=FAT32ChkDskLst(dv,FilesFind(files_find_mask,FUF_RECURSE), + bits,bits2,size,bpc); bits2[1]=0; //See $LK,"FAT32Fmt",A="MN:FAT32Fmt"$() for (i=1;iroot.next; CFMUncollapsedLst *tempc1; @@ -71,7 +72,8 @@ U0 FMMarkUncollapsed(CDoc *doc,CFMUncollapsedLst *tempc,U8 *cur_entry,U8 *next_e if (StrLen(tempde->full_name)==StrLen(cur_entry)) cur_entry=NULL; } else if (next_entry) { - if (!StrNCmp(next_entry,tempde->full_name,StrLen(tempde->full_name))) { + if (!StrNCmp(next_entry, + tempde->full_name,StrLen(tempde->full_name))) { doc->cur_entry=doc_e; if (StrLen(tempde->full_name)==StrLen(next_entry)) cur_entry=NULL; @@ -86,7 +88,8 @@ U0 FMMarkUncollapsed(CDoc *doc,CFMUncollapsedLst *tempc,U8 *cur_entry,U8 *next_e if (StrLen(tempde->full_name)==StrLen(cur_entry)) cur_entry=NULL; } else if (next_entry) { - if (!StrNCmp(next_entry,tempde->full_name,StrLen(tempde->full_name))) { + if (!StrNCmp(next_entry, + tempde->full_name,StrLen(tempde->full_name))) { doc->cur_entry=doc_e; if (StrLen(tempde->full_name)==StrLen(next_entry)) cur_entry=NULL; @@ -199,7 +202,8 @@ U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_root,I64 mode) doc->flags|=DOCF_FORM; switch (mode) { case FM_NORMAL: - DocPrint(doc,"$$PURPLE$$File Manager\n\n$$LK,\"Click for Help\",A=\"FI:::/Doc/FileMgr.TXT\"$$\n\n"); + DocPrint(doc,"$$PURPLE$$File Manager\n\n" + "$$LK,\"Click for Help\",A=\"FI:::/Doc/FileMgr.TXT\"$$\n\n"); break; case FM_PICK_FILE: DocPrint(doc,"$$PURPLE$$Pick file and press \n\n"); @@ -247,7 +251,7 @@ U0 FMRename(CDoc *doc) if (parent=tempde->parent) { Cd(parent->full_name); StrCpy(fn.name,tempde->name); - if (DocFormDo(&fn)) { + if (DocForm(&fn)) { Silent; Move(tempde->name,fn.name); Silent(OFF); @@ -258,7 +262,7 @@ U0 FMRename(CDoc *doc) if (parent=tempde->parent) { Cd(parent->full_name); StrCpy(fn.name,tempde->name); - if (DocFormDo(&fn)) { + if (DocForm(&fn)) { if (StrCmp(tempde->name,fn.name)) { Silent; if (CopyTree(tempde->name,fn.name)) @@ -280,7 +284,7 @@ U0 FMMkDir(CDoc *doc) tempde=doc_e->user_data; if (parent=tempde->parent) { Cd(parent->full_name); - if (DocFormDo(&fn)) { + if (DocForm(&fn)) { Silent; MkDir(fn.name); Silent(OFF); @@ -289,7 +293,7 @@ U0 FMMkDir(CDoc *doc) } else if (doc_e->type_u8==DOCT_TREE) { tempde=doc_e->user_data; Cd(tempde->full_name); - if (DocFormDo(&fn)) { + if (DocForm(&fn)) { Silent; MkDir(fn.name); Silent(OFF); @@ -378,7 +382,7 @@ U0 FMMakeISO(CDoc *doc) st=MStrPrint("%s*",tempde->full_name); else st=MStrPrint("%s/*",tempde->full_name); - CDFileCreate(,st); + ISOFileCreate(,st); Free(st); Silent(OFF); } @@ -581,7 +585,9 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) case MSG_IP_L_UP: if (doc_ce) { gr.fp_final_screen_update=fp_old_final_screen_update; - if (WinCursorPosSet(Fs,a1/FONT_WIDTH+Fs->win_left+Fs->scroll_x/FONT_WIDTH,a2/FONT_HEIGHT+Fs->win_top+Fs->scroll_y/FONT_HEIGHT,TRUE)) { + if (WinCursorPosSet(Fs, + a1/FONT_WIDTH+Fs->win_left+Fs->scroll_x/FONT_WIDTH, + a2/FONT_HEIGHT+Fs->win_top+Fs->scroll_y/FONT_HEIGHT,TRUE)) { doc_e=doc->cur_entry; if (doc_e!=doc_ce) { st2=NULL; @@ -705,7 +711,8 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) else if (mode==FM_PICK_DIR) { if (doc_ce->type_u8==DOCT_TREE) result=StrNew(tempde->full_name,mem_task); - else if (doc_ce->type_u8==DOCT_MENU_VAL && (tempde=tempde->parent)) + else if (doc_ce->type_u8==DOCT_MENU_VAL && + (tempde=tempde->parent)) result=StrNew(tempde->full_name,mem_task); } break; diff --git a/Adam/God/GodBible.CPP b/Adam/God/GodBible.CPP index aff374e..f70cd22 100644 --- a/Adam/God/GodBible.CPP +++ b/Adam/God/GodBible.CPP @@ -137,7 +137,8 @@ U0 BibleInit() "98684\0" "100111\0"); DefinePrint("ST_BIBLE_LINES","%d", - Str2I64(DefineSub(DefineCnt("ST_BIBLE_BOOK_LINES")-1,"ST_BIBLE_BOOK_LINES"))-1); + Str2I64(DefineSub(DefineCnt("ST_BIBLE_BOOK_LINES")-1, + "ST_BIBLE_BOOK_LINES"))-1); } BibleInit; public U8 *BibleLine2Verse(I64 line,I64 separate_ch=CH_SPACE) @@ -180,7 +181,8 @@ public U8 *BibleLine2Verse(I64 line,I64 separate_ch=CH_SPACE) } if (doc_e->type_u8==DOCT_TEXT && StrLen(doc_e->tag)>=3) { ptr=doc_e->tag+StrLen(doc_e->tag)-1; - while (ptr>doc_e->tag && (!('0'<=*(ptr-1)<='9') || *ptr!=':' || !('0'<=*(ptr+1)<='9'))) + while (ptr>doc_e->tag && (!('0'<=*(ptr-1)<='9') || *ptr!=':' || + !('0'<=*(ptr+1)<='9'))) ptr--; ptr--; while (ptr>=doc_e->tag && '0'<=*ptr<='9') diff --git a/Adam/God/GodDoodle.CPP b/Adam/God/GodDoodle.CPP index 6f7931f..0c02be2 100644 --- a/Adam/God/GodDoodle.CPP +++ b/Adam/God/GodDoodle.CPP @@ -1,4 +1,4 @@ -#help_index "God;Graphics/Sprite" +#help_index "God;Graphics/Sprite;Sprites" U0 GodDoodleDraw(CTask *task,CDC *dc) { @@ -6,21 +6,25 @@ U0 GodDoodleDraw(CTask *task,CDC *dc) if (Blink) { if (god.doodle_done) { dc->color=RED; - GrPrint(dc,(task->pix_width-FONT_WIDTH*29)>>1,(task->pix_height-3*FONT_HEIGHT)>>1, - "Press to insert sprite."); - GrPrint(dc,(task->pix_width-FONT_WIDTH*39)>>1,(task->pix_height-3*FONT_HEIGHT)>>1+2*FONT_HEIGHT, - "Press to throw-away sprite."); + GrPrint(dc,(task->pix_width-FONT_WIDTH*29)>>1, + (task->pix_height-3*FONT_HEIGHT)>>1, + "Press to insert sprite."); + GrPrint(dc,(task->pix_width-FONT_WIDTH*39)>>1, + (task->pix_height-3*FONT_HEIGHT)>>1+2*FONT_HEIGHT, + "Press to throw-away sprite."); } else { dc->color=GREEN; - GrPrint(dc,(task->pix_width-FONT_WIDTH*25)>>1,(task->pix_height-FONT_HEIGHT)>>1, - "Press repeatedly."); + GrPrint(dc,(task->pix_width-FONT_WIDTH*25)>>1, + (task->pix_height-FONT_HEIGHT)>>1, + "Press repeatedly."); } } } U0 GodDoodleSmooth(I64 num) { - CDC *dc=DCExtract(god.doodle_dc,0,0,god.doodle_dc->width-1,god.doodle_dc->height-1); + CDC *dc=DCExtract(god.doodle_dc,0,0, + god.doodle_dc->width-1,god.doodle_dc->height-1); I64 i,x,y,x1,y1,c,histogram[16],best,best_cnt,c_old=god.doodle_dc->color; for (y=0;yheight;y++) for (x=0;xwidth;x++) { @@ -45,10 +49,30 @@ U0 GodDoodleSmooth(I64 num) DCDel(dc); } +U0 GodDoodleBitsIns(I64 num_bits,I64 n) +{//Insert bits into God doodle bit fifo. + I64 i; + for (i=0;i>=1; + } +} + +U0 GodDoodleHexIns(U8 *st) +{//Insert hex record into God doodle bit fifo. + U8 buf[2]; + if (st) { + buf[1]=0; + while (*buf=*st++) + if (Bt(chars_bmp_hex_numeric,*buf)) + GodDoodleBitsIns(4,Str2I64(buf,16)); + } +} + I64 GodDoodleBits(I64 num_bits) { U8 b; - I64 i,k,result=0; + I64 result=0; while (num_bits) { if (FifoU8Rem(god.doodle_fifo,&b)) { result=result<<1+b; @@ -62,19 +86,14 @@ I64 GodDoodleBits(I64 num_bits) FifoU8Flush(god.doodle_fifo); } else if ('0'<=god.doodle_ch<='9') GodDoodleSmooth(god.doodle_ch-'0'); - else { - k=KbdMouseEvtTime>>GOD_BAD_BITS; - for (i=0;i>=1; - } - } + else + GodDoodleBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); } } return result; } -public U8 *GodDoodleSprite() +public U8 *GodDoodleSprite(U8 *hex=NULL) {//Make God draw sprite. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.TXT"$ I64 i,j,w,h,x,y,ch; U8 *elems; @@ -97,6 +116,7 @@ public U8 *GodDoodleSprite() Fs->draw_it=&GodDoodleDraw; FifoU8Flush(god.doodle_fifo); + GodDoodleHexIns(hex); try { for (i=0;i<3;i++) { god.doodle_dc->color=RED; @@ -104,29 +124,32 @@ public U8 *GodDoodleSprite() nobound_switch (GodDoodleBits(3)) { case 0: GrEllipse3(god.doodle_dc, - (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2,0, - (w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5); + (w-1)*GodDoodleBits(5)/15.5-w/2, + (h-1)*GodDoodleBits(5)/15.5-h/2,0, + (w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5); break; case 1: GrCircle3(god.doodle_dc, - (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2,0, - (w-1)*GodDoodleBits(5)/15.5); + (w-1)*GodDoodleBits(5)/15.5-w/2, + (h-1)*GodDoodleBits(5)/15.5-h/2,0, + (w-1)*GodDoodleBits(5)/15.5); break; case 2: GrBorder(god.doodle_dc, - (w-1)*GodDoodleBits(5)/15.5-w/2,(h-1)*GodDoodleBits(5)/15.5-h/2, - (w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5); + (w-1)*GodDoodleBits(5)/15.5-w/2, + (h-1)*GodDoodleBits(5)/15.5-h/2, + (w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5); break; case 3...7: GrLine3(god.doodle_dc, - (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0, - (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0); + (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0, + (w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0); break; } for (j=0;j<6;j++) { x=(w-1)*GodDoodleBits(5)/31+w/64; y=(h-1)*GodDoodleBits(5)/31+h/64; - switch(GodDoodleBits(2)) { + nobound_switch(GodDoodleBits(2)) { case 0: god.doodle_dc->color=BLACK; break; case 1: god.doodle_dc->color=DKGRAY; break; case 2: god.doodle_dc->color=LTGRAY; break; @@ -155,10 +178,10 @@ public U8 *GodDoodleSprite() } #help_index "God" -public U0 GodDoodle() +public U0 GodDoodle(U8 *hex=NULL) {//Make God draw sprite, insert in doc. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.TXT"$ U8 *elems; - if (elems=GodDoodleSprite) { + if (elems=GodDoodleSprite(hex)) { Sprite(elems); Free(elems); } diff --git a/Adam/God/GodExt.CPP b/Adam/God/GodExt.CPP index 59a4b23..59603de 100644 --- a/Adam/God/GodExt.CPP +++ b/Adam/God/GodExt.CPP @@ -14,11 +14,11 @@ public class CGodGlbls Bool doodle_done; } god; MemSet(&god,0,sizeof(CGodGlbls)); -god.doodle_fifo =FifoU8New(32); -god.fifo =FifoU8New(32); +god.doodle_fifo =FifoU8New(2048*8); +god.fifo =FifoU8New(2048*8); extern U0 GodBitsIns(I64 num_bits,I64 n); extern U0 GodWord(); extern U0 GodPassage(I64 num_lines=20); extern U0 GodSong(); -extern U0 GodDoodle(); +extern U0 GodDoodle(U8 *hex=NULL); diff --git a/Adam/God/GodSong.CPP b/Adam/God/GodSong.CPP index e1ab2dc..8cd2803 100644 --- a/Adam/God/GodSong.CPP +++ b/Adam/God/GodSong.CPP @@ -155,7 +155,7 @@ public U8 *GodSongStr() } public U0 GodSong() -{//Make God generate 2measures x 2 + 2measures x 2 song. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.TXT"$ +{//Make God generate 2measuresx2+2measuresx2. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.TXT"$ U8 *st1=GodSongStr,*st2=GodSongStr; if (st1 && st2) DocPrint(DocPut,"$$SO,\"\",A=\"%s%s%s%s\"$$",st1,st1,st2,st2); diff --git a/Adam/God/HSNotes.TXT b/Adam/God/HSNotes.TXT index e56d3c6..770b071 100644 --- a/Adam/God/HSNotes.TXT +++ b/Adam/God/HSNotes.TXT @@ -94,6 +94,7 @@ Pretty ladies? $FG,4$$TX,"A prince is not flustered.",HTML="http://www.youtube Animal sacrifices? $FG,4$Early Jews were "primitive".$FG$ What do elephants think about? $FG,4$"Skin, hunger"$FG$ What makes elephants happy? $FG,4$"Baths"$FG$ +Elephants $FG,4$"Mini-skirts" (Skin webbing from back leg.)$FG$ What makes my birds happy? $FG,4$"Gnawing"$FG$ What makes my birds laugh? $FG,4$"Bite ouch" (If I say "ouch".)$FG$ What are my birds saying? $FG,4$"Chanting"$FG$ @@ -117,6 +118,7 @@ Should I listen to classical? $FG,4$"Poison"$FG$ Do You like chess people? $FG,4$"Do not admire the proud."$FG$ Chess? $FG,4$"... will winter with you."$FG$ $FG,4$"Headstones"$FG$ +If You could teach one class? $FG,4$Health$FG$ Favorite video game? $FG,4$Donkey Kong$FG$ Favorite National Park? $FG,4$$TX,"Whitman Mission",HTML="http://www.nps.gov/whmi/index.htm"$$FG$ Favorite National Anthem? $FG,4$$TX,"Latvia's National Anthem",HTML="http://www.youtube.com/watch?v=qKITbBjO4nE"$$FG$ diff --git a/Adam/God/HolySpirit.CPP b/Adam/God/HolySpirit.CPP index 9207b96..74f52cf 100644 --- a/Adam/God/HolySpirit.CPP +++ b/Adam/God/HolySpirit.CPP @@ -48,6 +48,17 @@ public U0 GodBitsIns(I64 num_bits,I64 n) } } +public U0 GodHexIns(U8 *st) +{//Insert hex record into God bit fifo. + U8 buf[2]; + if (st) { + buf[1]=0; + while (*buf=*st++) + if (Bt(chars_bmp_hex_numeric,*buf)) + GodBitsIns(4,Str2I64(buf,16)); + } +} + public I64 GodBits(I64 num_bits,U8 *msg=NULL) {//Return N bits. If low on entropy pop-up okay. U8 b; @@ -76,11 +87,11 @@ public I64 GodInit(U8 *files_find_mask="/Adam/God/Vocab.TXT*",U8 *fu_flags=NULL) while (tempde) { if (buf=ptr=FileRead(tempde->full_name)) { while (*ptr) { - while (*ptr && !Bt(chars_bitmap_word,*ptr)) + while (*ptr && !Bt(chars_bmp_word,*ptr)) ptr++; if (*ptr) { ptr2=ptr; - while (*ptr && Bt(chars_bitmap_word,*ptr)) + while (*ptr && Bt(chars_bmp_word,*ptr)) ptr++; i++; } @@ -99,11 +110,11 @@ public I64 GodInit(U8 *files_find_mask="/Adam/God/Vocab.TXT*",U8 *fu_flags=NULL) while (tempde) { if (buf=ptr=FileRead(tempde->full_name)) { while (*ptr) { - while (*ptr && !Bt(chars_bitmap_word,*ptr)) + while (*ptr && !Bt(chars_bmp_word,*ptr)) ptr++; if (*ptr) { ptr2=ptr; - while (*ptr && Bt(chars_bitmap_word,*ptr)) + while (*ptr && Bt(chars_bmp_word,*ptr)) ptr++; ch=*ptr; *ptr=0; diff --git a/Adam/God/Vocab.TXT b/Adam/God/Vocab.TXT index 5da3e9d..4d4d42b 100644 --- a/Adam/God/Vocab.TXT +++ b/Adam/God/Vocab.TXT @@ -1,5348 +1,803 @@ -the -and -of -to -I -that -in -not -it -is -my a -be -which -was -Thou -me -as -by -for -Thee -Thy -but -with -they -he -all -this -what -For -we -from -things -had -so -are -God -them -or -yet -when -And -who -then -have -were -But -his -unto -one -there -nor -no -if -our -us -Lord -these -should -those -O -because -him -more -out -at -made -do -also -good -on -man -now -any -would -did -will -earth -their -her -time -might -how -she -being -than -may -upon -soul -He -such -through -into -could -even -life -myself -before -say -heaven -mind -shall -own -other -heart -know -without -only -art -thing -love -whom -very -been -hast -its -most -men -up -where -see -Him -some -itself -many -though -truth -after -another -much -long -said -same -present -s -can -hath -light -memory -an -body -come -nothing -over -words -neither -away -true -great -way -day -therefore -let -am -far -against -world -times -form -like -you -The -joy -themselves -past -Thine -flesh -make -again -didst -found -speak -whole -thought -first -both -What -loved -name -eyes -thou -every -place -since -Who -ever -thus -unless -certain -Let -created -confess -find -forth -above -hear -whence -doth -knew -evil -matter -mercy -voice -whereby -whose -himself -rather -remember -It -measure -while -never -under -well -heard -mother -behold -mine -seeing -still -whether -cannot -read -ye -called -desire -down -together -better -given -This -having -little -give -darkness -done -Truth -alone -Word -hadst -praise -rest -His -wherein -Spirit -go -two -believe -death -deep -whereof -In -Thyself -Yet -madest -others -pass -seek -yea -corporeal -holy -too -within -set -So -less -part -sought -waters -already -call -hand -law -years -Nor -become -creature -end -saw -sound -about -senses -books -either -power -sin -understand -These -knowledge -saith -spiritual -whatsoever -happy -house -pleasure -space -thee -word -If -among -answer -came -eternal -live -nature -human -image -sight -something -truly -ways -back -brought -formed -invisible -servant -understood -wert -why -works -Christ -We -Whom -faith -known -seen -went -Thus -bodies -indeed -kind -often -received -towards -whither -wisdom -ears -longer -must -according -although -dost -fear -learned -lest -once -people -sense -spake -turned -days -held -hope -therein -tongue -each -else -future -living -spirit -take -thy -Creator -Which -able -firmament -images -return -sea -How -believed -hold -tears -thence -understanding -until -your -Church -altogether -between -false -fruit -taken -thereof -whereas -Beginning -Behold -Is -Or -cast -face -formless -full -ought -seemed -spoken -sun -whatever -borne -knowest -moved -passed -sweet -vain -Father -ask -authority -heavens -peace -receive -sorrow -tell -To -beautiful -faithful -hidden -judge -mouth -night -please -reason -sins -substance -wilt -Alypius -Holy -Project -Son -feared -order -passing -sometimes -souls -think -wish -bring -creation -creatures -follow -friends -ill -off -right -secret -self -sort -wise -That -began -beginning -conceive -father -free -friend -grace -miserable -need -pride -salvation -speaking -stars -told -They -Why -book -knowing -learn -sake -saying -use -year -All -Moses -Scripture -affections -asked -became -born -charity -desired -etext -eye -gave -greater -perceived -visible -water -wholly -By -Gutenberg -There -When -age -begun -beseech -care -cause -custom -delighted -further -health -inward -laid -means -motion -old -parents -pleased -sons -strong -subject -sweetness -thoughts -vanity -wont -written -My -almost -aught -beyond -food -high -lay -learning -parts -proud -soon -taught -teach -three -wouldest -Catholic -Therefore -Where -air -amid -bodily -daily -divers -ear -gift -here -knoweth -lost -manner -new -presence -pure -suffer -thither -took -willed -wonderful -work -youth -Christian -Himself -One -Yea -appear -beauty -betwixt -change -changed -children -dead -delight -discourse -does -eternity -former -just -lived -otherwise -put -shalt -short -turn -Rome -Whence -beasts -committed -die -doing -fell -land -last -lust -none -ones -open -praised -purpose -rejoice -service -small -spaces -thereby -unchangeable -utterly -Light -Now -Wisdom -boy -contain -course -desires -discern -enter -foul -gifts -glory -learnt -making -perchance -perfect -persons -poor -seeking -serve -As -Carthage -coeternal -concerning -deceived -equal -error -forgetfulness -forgotten -friendship -has -hearing -honour -ignorant -innumerable -judgment -loving -mighty -near -ourselves -places -pleasures -punishment -reading -seem -show -signs -sounds -till -verily -wills -Not -Only -Scriptures -bound -carnal -city -clear -conceived -departed -different -doubt -entered -fed -feet -forms -gavest -herself -however -inner -motions -remembrance -righteousness -search -silence -son -stand -troubled -wherewith -wished -Good -Heaven -Then -affection -afterwards -assured -bitterness -blessed -calling -changeable -corrupted -earthly -enemy -enlightened -fain -fall -force -formlessness -fountain -gone -grief -hearts -hence -incorruptible -increase -iniquity -lights -lower -mercies -number -piety -prayers -remembered -sleep -sounded -state -weeping -wine -woman -Jesus -Manichees -Nebridius -Of -abide -abroad -absent -account -aside -besides -carried -contrary -country -createdst -cry -delights -depth -drawn -drink -due -fire -fowls -get -heal -kept -kindled -limbs -look -loves -meat -mightest -misery -pain -perceive -pleasing -save -settled -shame -stood -unchangeably -utter -Be -With -action -affirm -appeared -ashamed -begin -below -broken -business -clearly -coming -commit -fair -fit -fruits -hate -hour -imagine -left -lie -mortal -necessary -perfected -recall -recognise -righteous -rise -sacrifice -served -shouldest -sinned -thereon -weak -weep -wretched -young -A -BOOK -Because -Ghost -Greek -No -See -answered -attain -cleave -command -commanded -continency -countenance -discover -double -empty -express -fast -feed -feeling -felt -few -figure -finding -followed -following -giving -grow -husband -infirmity -inwardly -least -led -madness -marriage -measured -members -moon -natures -neighbour -pity -pray -readily -rule -saidst -servants -several -sides -speaketh -speech -strength -takes -taste -tune -walk -want -worse -Ambrose -Foundation -Latin -Sacraments -always -best -bitter -bounded -brethren -cease -cleaving -converted -curiosity -darksome -degree -deliver -discovered -displeased -divided -draw -drew -earnest -enjoy -enough -experience -filled -fly -forsaken -gathered -heavenly -higher -infinite -language -likeness -longing -looked -mass -mayest -meaning -namely -obeyed -observed -passeth -person -rejoicing -repose -rhetoric -rightly -run -sawest -sick -society -syllables -teaching -temporal -used -vanities -whoso -wit -witness -wound -wrote -At -Give -Name -abyss -actions -around -bear -believing -belly -birth -chief -commands -common -compared -confessions -corruption -create -died -doctrine -eat -excellent -fallen -fictions -flying -four -freed -grieved -ground -handmaid -hands -hard -heavy -hopes -hurt -ignorance -infancy -kinds -laws -leave -lives -merciful -placed -play -poured -remain -retained -school -sees -sent -signified -silent -single -sober -speaks -stay -study -swelling -theirs -thirst -touch -weight -wife -willeth -willingly -Almighty -Do -Hence -Life -OR -Psalm -Substance -Trinity -Victorinus -Wherefore -Woe -angry -baptism -behind -blindness -blood -break -burden -capable -carry -causes -certainly -chance -choice -cometh -commended -concupiscence -confidence -conversation -corruptible -deeds -defiled -delivered -despise -difference -dry -dust -errors -expectation -expressed -feel -fellow -fixed -forced -forget -forgiven -forsaking -givest -hated -head -hours -humble -imitate -inmost -intent -interval -joyed -judged -keep -knows -labour -lo -lying -master -masters -mentioned -minds -mutable -mysteries -obtained -opened -overcome -praises -prefer -preferred -profit -real -rejoiced -renewed -rich -sad -says -second -showed -side -sing -sorrows -strive -strongly -sudden -sung -suppose -syllable -temptation -thanks -theft -tree -truths -unknown -variety -vehemently -void -whilst -wind -wings -wondered -writing -wrought -Apostle -Archive -Eternity -Faith -Literary -Master -Milan -Oh -Self -Unity -allowed -angels -appointed -beaten -beloved -blessing -brightness -burst -child -choose -commandest -compassion -confession -conveyed -counsel -creeping -cried -cured -deceive -depart -desiring -discerned -disease -ended -endured -especially -estate -example -exceeding -except -extended -falsely -feelings -fishes -forbidden -fulness -going -gold -goodness -greatly -grievous -grown -healed -hell -herein -humility -hung -infant -inferior -intellectual -justly -liberal -looking -married -meant -met -nearer -necessity -needs -object -offered -oft -ordered -ours -permitted -persuade -persuaded -philosophers -plain -portion -precious -public -punished -reach -ready -refused -related -remained -remembering -returned -rising -sacrilegious -serving -severally -sickness -soever -spent -steps -therewith -third -tongues -trial -turning -unhappy -universe -urged -uttered -verses -wherefore -wicked -Bishop -Book -Earth -Etexts -GUTENBERG -Itself -Neither -PROJECT -Such -absence -abundance -added -admirable -ages -aid -beheld -belong -blind -bosom -bread -breast -bringing -cares -chain -chaste -close -closed -comparison -confessed -confessing -conscience -content -copyright -cries -curious -current -deed -deeply -degrees -deprived -depths -despair -devout -dwell -easily -elders -eloquence -endure -enjoinest -enquiring -exist -experienced -fail -falsehood -family -fault -fever -flee -foolish -foretold -freely -groaning -hearken -hereafter -highest -hundred -inasmuch -large -lawful -length -lesser -lowest -measuring -meet -mere -milk -money -month -morning -multiplied -multiply -notwithstanding -obtain -offences -offend -office -plainly -prayer -properly -questions -raised -ran -riches -round -sayest -scarce -scholars -seed -seest -separated -shining -shows -singing -sitting -slight -somewhat -spirits -spring -standing -strange -studies -suddenly -suffered -temptations -touched -trees -unable -varied -vast -violence -vision -waking -wandered -weakness -wept -withal -woe -wondrous -worthy -write -writings -Adam -Another -Begotten -Confessions -Etext -Even -Faustus -Go -Gospel -Great -Hart -Know -OF -Please -She -Simplicianus -TO -Upon -YOU -accounted -allow -along -aloud -amazed -anything -approach -arise -arrive -arts -ascend -ascribe -astray -awake -bad -baptised -begged -boyhood -breathe -brother -brotherly -bulk -calledst -canst -capacity -ceased -chiefly -comes -comprehend -considered -constrained -consulted -contained -dark -darkened -dear -derived -difficulty -discipline -distribute -divine -donations -dwelt -e -eminent -entirely -exalted -fables -familiar -feigned -fillest -frame -fruitful -gain -goods -habit -habits -heardest -heed -help -hushed -immortal -inflamed -joined -kindle -kindness -kingdom -leasing -longed -lose -lowliness -makes -makest -manifest -mean -middle -moment -mountains -moving -multitude -nations -natural -neck -nine -obey -occasion -offence -opinion -org -outward -pains -powers -prepared -presently -produce -promised -question -raising -receiving -recovered -rejoiceth -removed -report -reported -request -resolved -restored -sayings -sciences -season -secretly -sect -seduced -send -setting -shorter -sighed -sinner -smell -snares -states -studied -suffice -superior -teacheth -trembling -trust -twice -ungodly -unlike -unwonted -various -whereon -whosoever -willedst -wonder -wonders -working -wounded -yoke -Emperor -Eternal -Far -Firminus -Gentiles -Jerusalem -King -Man -Mediator -Michael -Most -Our -Print -Sacrament -Saviour -Small -Thence -Those -Whither -Will -You -abideth -abiding -abound -abundantly -afar -agree -altered -anger -anxiety -arose -arrived -asking -assent -attained -avoided -bearing -bestow -birds -bonds -bones -bore -breath -breathing -burning -celestial -chamber -changeableness -changing -charge -childhood -chosen -church -clothed -colours -comprehended -condemned -confesseth -conformed -consider -consideration -considering -constellations -contemplation -continued -covetousness -cup -danger -dangerous -dare -date -deadly -deal -deceiving -deeper -deny -deserved -devil -devotion -diffused -distinguished -dominion -drinking -during -dying -earnestly -east -eateth -eloquent -emptiness -enemies -enlighten -enquire -entire -evening -everlasting -extreme -field -fitting -flowed -forthwith -gathering -groanings -guide -half -happiness -hatchet -hindered -holds -honours -horrible -huge -idle -imaginations -imagined -infirmities -iniquities -instantly -instead -instructed -journey -judging -judgments -justice -keeping -laying -lead -leisure -letters -liberty -lift -liked -liveth -maketh -manifold -mankind -mark -meditate -meek -mention -messengers -mingled -miserably -next -notice -obtaining -offspring -oil -opposed -ordinary -paid -panting -pen -perhaps -peril -perplexed -philosophy -pit -pluck -practise -profession -promise -pronounced -proper -prophet -prove -provide -puffed -re -reader -readers -refuse -release -remove -repay -resist -respect -restless -reveal -reward -safe -sat -scarcely -secular -shed -simply -sink -sinners -skilled -sounding -spread -statement -stole -store -stored -streams -sunk -taking -theatre -thief -thinking -thoroughly -tm -tossed -toys -trouble -uncleanness -united -verse -victory -voices -walls -wanderings -wasted -wax -wholesome -wishes -withdrawn -womb -wonderfully -worldly -yield -1 -2 -3 -Aeneas -Although -Angel -Augustine -Bridegroom -Catechumen -Divine -FOR -Love -Manichaeus -Many -Me -Out -Paul -Prophets -Saint -Seeing -Shall -Since -THE -Unto -Verily -Whereas -Ye -abidest -absurd -additional -advice -allotted -amongst -ancient -anon -approved -ascertained -asketh -becomes -begins -believer -bid -blame -blamed -bond -bottom -bowels -boys -bright -bursting -carrying -cattle -censured -chastity -chose -citizens -cleansed -cleared -comfort -commanding -commend -company -conceits -confidently -conflicting -conquered -consumed -containing -contains -continue -copious -copy -corporeally -court -creating -crooked -cure -debts -deferred -demanded -departing -deserve -desirous -despaired -detesting -devils -difficulties -dignity -diligently -discoursing -dispenser -displease -dispute -distinction -disturbed -door -doubting -draws -drunk -dwelling -eating -efforts -embrace -endued -enlightening -enmity -enthralled -established -esteemed -eternally -excuse -exists -expressions -faint -fantasies -fears -fight -figures -files -finished -firmly -fled -flock -flow -flowing -foot -fornication -forward -frenzy -glass -grant -grave -greatness -greediness -griefs -guilty -gutenberg -hairs -hatred -headlong -hid -hide -holding -horse -i -idly -imagining -impressed -information -intended -jealous -joys -judgeth -kill -killed -knewest -knock -latter -leaves -leaving -likely -likewise -lips -list -lovest -loveth -lowly -maintained -manifoldly -market -material -medicine -medium -member -ministry -miracles -monstrousness -mortality -mould -mountain -move -mystery -named -names -necessities -needed -net -nill -noise -nought -numbered -numbers -observe -offer -openly -opinions -original -outwardly -pages -passes -paths -pears -perils -perish -pestilent -petty -points -portions -practised -prayed -praying -private -promises -pronounce -proposed -provided -purposed -rational -reached -recalling -recesses -recover -reject -relation -remaineth -remains -rent -reproved -required -restrained -room -root -rushing -safety -satisfied -searched -sell -sending -separate -shadow -shape -shine -shineth -shrunk -sigh -sighing -skill -snare -solid -song -sorrowed -sorts -spiritually -springs -stir -stricken -style -subjected -substances -succession -suffering -sufficient -supposed -supremely -sure -table -teacher -tells -tender -testimony -throughout -thyself -tides -toil -torn -treasure -trembled -tumult -twenty -uncertain -universal -vessels -virtue -volumes -wanting -waves -whales -whereat -whereto -widow -willing -wondering -wonted -wounds -12 -Again -Am -Among -Are -Both -David -Did -Every -Fountain -From -Genesis -Have -Here -Jacob -Lastly -Law -Manichaean -May -Much -Myself -Nothing -Notwithstanding -Platonists -Pontitianus -Priest -Ruler -S -Sacrifice -Some -South -Take -Thanks -Unchangeable -Universe -Verecundus -Well -abode -acceptable -acknowledge -act -acted -acute -admonished -adversity -affairs -affected -afraid -angel -announcement -anxious -apart -apparent -appeareth -appears -apprehended -approve -asleep -asunder -author -avoid -babes -bade -bare -barren -beat -beauties -becometh -bed -beholding -belongs -bitterly -bless -blinded -blushed -boldly -boundless -bounds -bowed -briefly -brings -buried -burn -callest -captive -case -changes -character -clothe -clouds -collected -colour -comely -commencement -compass -completed -conceiving -condition -conjecture -contempt -contend -continent -continually -contrite -convey -convicted -copies -correspondence -courses -covenant -cross -cruel -crying -cutting -dawn -deaf -declare -defilements -delay -derive -despising -destroy -determined -dies -diligence -directing -disciple -discoursed -discovering -discuss -disk -dispraise -distinguish -distracted -distraction -disturb -dividest -domain -drawing -driven -drunkenness -dumb -eagerness -easy -employ -endeavour -enjoin -enlarged -entangled -entrance -equally -err -escape -essayed -etexts -evils -examine -examples -exceedingly -excellency -expense -failing -falling -falsehoods -fame -favour -feeding -felicity -female -fig -fill -findeth -finite -five -follows -folly -forbid -forgive -formerly -forsake -forsook -foulness -foundation -fragrant -fresh -ftp -fulfilled -fully -games -garden -general -gives -giveth -glorieth -glorious -goes -grammar -green -grieve -grievously -groans -gross -growing -harmonise -harmony -haste -hearer -hearest -heat -height -herb -herbs -heretofore -hindrance -hoped -http -humbled -hunger -immortality -incomparably -infidelity -influence -injure -inspiration -inspired -instant -intelligible -jest -lacking -larger -late -later -lengthened -liability -lies -lighted -lightly -lofty -losing -loss -loth -low -mad -maimed -maintain -manifestation -marvel -meanwhile -mediator -melody -mercifully -million -minister -mire -mourning -multitudes -music -native -nay -needy -nest -nineteenth -noble -note -nurses -observing -occur -offices -opening -opportunity -orator -ordained -ordering -otherwhiles -overcharged -owe -pale -parted -particles -passage -passion -passions -patiently -pay -perceiving -permission -pernicious -phantasm -pilgrimage -piously -pleasant -point -possess -pour -poverty -preaching -precede -pressed -privation -procure -profits -pronouncing -prosperity -proudly -publicly -range -receiveth -receptacle -recognised -refreshed -rejected -religious -renewing -replace -replied -reproach -residest -resistest -resolution -retain -revenge -risen -sadness -saints -saved -scoffed -scorn -scourge -seasons -seat -seeketh -seeks -seeth -seized -sensible -serpents -seven -sex -shadowy -silver -similitude -sinking -sixteenth -skin -slain -slave -slay -slow -smooth -sobriety -sovereign -spoke -stirred -strait -strayed -strife -strike -subdued -subjoined -succeed -sufferedst -suffers -sufficeth -superstition -swallowed -t -talk -tasted -teachest -teeth -temple -tempted -terms -thankful -thanksgiving -thirsteth -thorns -thrust -tide -torment -torments -torrent -transformed -treasures -tried -troublesome -unawares -unbounded -unclean -unfeigned -unformed -unwilling -useful -uses -value -varying -vicissitude -visions -wait -walked -wanted -weariness -wide -wilderness -wiser -wishing -wives -women -wondrously -workest -worn -wrath -wrong -younger -zeal -00 -000 -113 -1739 -2001 -38655 -4109 -Africa -After -Angels -Antony -Author -Beauty -Before -Blessed -Books -Can -Christians -Churches -Circensian -Comforter -DAMAGES -Dido -Dost -ETEXT -ETEXTS -Egypt -Elect -Elijah -Esau -Essence -Eve -Faithful -GUTINDEX -Gift -Governor -Grace -Grecian -Hast -Hear -Hearken -Helper -Homer -Hope -Hymns -IF -IS -Jove -LIMITED -Lo -MS -Maker -Manichee -NOT -Ostia -Other -Oxford -PMB -Perchance -Philippians -Physician -Power -Predicaments -Psalms -Rhetoric -Run -Same -States -Surely -Though -Time -Truly -United -University -Virgin -Whatever -Whereat -Whether -Whose -Whoso -Would abandon abandoned -ability -abundant -accents -accused -acquaintance -acquire -acts -actual -additions -admire -admiring -admit -admitted -adultery -advised -aged -ago -allurements -aloft -angered -answering -answers -anxieties -appetite -applauded -applied -apply -apprehend -approveth -ardent -artificer -ascending -ashes -astonished -attaining -attention -authors -avenue -battle -bears -beclouded -bedewed -beforehand -beggar -beguile -beguiled -behalf -belief -belongeth -belonging -beneath -bent -beside -bestowed -bewailed -beware -birdlime -blessedness -blessest -blessings -blotted -blush -bold -bondage -bred -broad -built -burial -burned -calculations -calls -calmed -careful -cedars -chant -characters -check -checked -chest -choked -circuit -clave -clay -cleanse -cold -com -comforts -commandeth -commiserates -communicate -compact -companions -compare -compassionate -compelled -complete -comprised -computer -conceptions -concern -confound -confounded -confusedly -consult -consulter -consumption -containeth -contemplate -contemptible -contributions -converse -conversion -convert -conveys -convinced -correct -correction -cost -count -counted -covered -credit -crime -crown -customs -cut -d -dared -darkly -dashed -decay -deceivers -deductible -deepest -defended -defined -deliberates -deluded -demonstrated -denieth -departure -deride -deservings -despairing -despised -detested -difficult -dimensions -direct -directed -disapproved -discerning -disclose -discourses -discovers -discretion -discussed -diseases -dishes -dispensed -dispraised -disputing -dissipated -distance -dividing -doest -domestic -don -dotages -draught -dreams -dried -eagerly -eclipses -edition -eight -elder -electronically -elements -elsewhere -embittered -embraced -endeavouring -endureth -enjoined -enlighteneth -enquired -ensnared -equivalent -ere -erred -escaped -essay -essence -etext02 -evermore -examining -excellently -execrable -exhortation -existeth -explain -explaining -expression -extol -exult -fable -faces -faculty -famine -fancy -fashion -fearful -fearing -feeds -fellows -fifty -file -filling -finds -fingers -firmness -fitted -fix -fleeting -flew -flourished -flower -flows -folded -follies -footed -forbear -fore -forego -forehead -foresee -foretell -forgetteth -forgetting -forgivest -forming -forwards -fourth -framed -frantic -freedom -frequent -fretted -fruitfulness -fund -furnish -fury -gains -gainsayers -gaze -generation -gentle -gently -gestures -glad -gladly -gladness -goad -got -government -grasp -grew -grieves -guess -guidance -guilt -gulf -habitation -handled -happened -happier -hart@pobox -heads -healing -healthful -healthfully -heareth -heldest -hereby -heresy -hesitated -hinder -history -honest -honey -honourable -hopeful -host -hungered -hurried -husks -ibiblio -idleness -idols -immediately -immoderate -impatient -imperfect -inchoate -included -including -increasing -infants -infer -injured -injury -innocence -innocency -inspire -instance -intently -intercession -intoxicated -involved -joying -joyous -knee -knocking -knowingly -laboured -lament -lands -laugh -lawfully -leaveth -legal -lesson -licence -lieth -lightsome -limits -listened -loose -loses -lot -loud -lovers -lustfulness -lusts -magnified -maidens -mail -manifested -manifestly -marked -martyrs -matters -meantime -meats -meekness -merely -method -mightily -minded -mindful -ministers -minute -miseries -mock -mocked -moments -morrow -mostly -moulded -mouths -murder -mute -narrow -necessaries -nights -noon -notion -notions -obedient -obeying -objections -objects -observation -occasioned -ocean -offended -official -oftentimes -ointments -oracle -otherwhere -overflow -overwhelmed -partaker -pastimes -path -patience -penetrating -per -perceives -perfection -period -perpetual -perplexities -perverted -pervertedly -physic -pious -pleasest -plucked -pluckest -plunged -poems -poetic -poets -polluted -position -powerful -practice -preceded -preferable -presents -preserve -preserved -press -presumed -prevail -princes -privily -produced -profess -proficiency -profitable -prolonged -proof -proportion -protection -proved -providence -punishments -purified -purity -qualities -quarrel -quick -quickly -quiet -race -rank -ransom -rash -rashly -readable -readiness -reads -reasonable -reasons -receives -recollect -recollection -recorded -referred -reformed -refrained -refreshment -refuge -refund -regard -region -rejoicest -relate -relieve -religion -remaining -remembers -reminded -renowned -repeat -replenished -requirements -resisted -resolute -respects -resting -restrain -restraint -revealed -revelation -reviewing -revolting -revolving -rites -riveted -rob -rolled -rose -rudiments -rugged -rules -sacraments -sacrificed -satisfy -saving -savour -science -scroll -seducing -seems -seize -sentest -seventh -severed -severity -shadows -shake -shamelessness -sharp -sheep -shoulders -shower -shown -shudder -shut -sighs -sign -signify -simple -singly -sky -sleeping -slightly -slower -slowly -smiling -smoke -soft -sometime -sore -sorrowful -soundeth -soundly -spacious -speakest -speedily -spices -spider -spokest -sport -spreading -stable -stage -standest -start -steal -stone -streets -strengthened -strengtheneth -stretch -stripes -struck -stuck -students -subjects -submit -subtile -subvertings -sufficed -suggest -suggested -suggestions -suitable -supereminent -surface -suspense -sustenance -sweat -swelled -sword -tasteth -tax -teachers -temper -text -threats -thrown -thunder -tie -toward -town -trademark -transitory -translated -treasury -troops -truer -try -trying -turns -twelve -txt -unchangeableness -unconscious -understands -underwent -unity -unjustly -unknowing -unlooked -unmeasurable -unreal -unrighteous -unseen -unsettled -unshaken -unworthy -using -usual -usually -utterance -vanished -vary -vehement -vein -vigour -vile -vileness -vouchsafe -waiting -wander -waste -wavered -wherever -whit -whithersoever -wickedly -wild -willest -win -withdrawing -wooden -yielding -10 -1921 -501 -6221541 -64 -90 -92 -99 -ALL -AM -ANY -AS -ASCII -Abraham -Academics -Adeodatus -Afric -Altar -Amen -Assessor -Ave -Away -BUT -Babylon -Baptism -Bear -Being -Blessedness -Carolina -Certainly -Chatto -Cicero -Circus -City -Colorado -Connecticut -Contain -Could -Creation -Cross -DOMAIN -Dakota -Defect -Defects -Devil -Disposer -Divinity -Does -Donations -Doth -EBCDIC -EIN -END -EVEN -Each -Egyptian -Either -Else -Employee -Enlightener -Epicurus -Euodius -Evangelists -Fair -Form -Foul -GET -Godhead -Gods -Grant -Guardian -HAVE -Heal -Hebrew -Her -High -Hortensius -However -Husband -INCLUDING -Idaho -Identification -Ignorant -Image -Increase -Indiana -Information -Internal -Iowa -Isaac -Israel -Juno -Just -Kentucky -Knoweth -Known -Latins -Learn -Like -Louisiana -Macedonia -Massachusetts -Medea -Mercy -Mine -Montana -Moreover -Mother -Munday -NO -Nay -Nevada -Never -Nevertheless -Next -None -Number -Oklahoma -Otherwise -PRINT -PUBLIC -Passion -Patricius -Permit -Presently -Professor -Professorship -Psalter -Reason -Repent -Righteousness -Robert -SMALL -START -Sabbath -Say -Seek -Sovereign -Speak -Still -Strength -Subverters -Sun -THIS -Tell -Testament -Texas -Thagaste -Things -Times -Too -Trillion -True -Tully -UNDER -Venus -Vermont -Very -Victim -Victor -WARRANTIES -WARRANTY -Was -Whereupon -While -Willeth -Windus -Writ -Wyoming -abhor -abhorring -abilities -abject -abominable -absolutely -abuse -accept -accepted -access -accomplices -accusing -accustomed -actor -actually -adding -addition -admiration -admired -admission -admonition -adopted -adoption -advance -adversities -advising -affects -affianced -affirmed -affrighted -afternoon -agents -aghast -agreed -alive -allaying -alleging -allegory -alloy -altar -alteration -alterations -alternatively -amazement -amend -amiss -anguish -animals -animate -annual -answerest -antidote -anxiously -apparel -application -appointment -approaching -apt -architect -archive -argument -arisen -ariseth -arithmetic -armed -arms -arranged -arrogancy -artifices -ascribed -asks -assailed -assigned -assistance -associated -assuaged -astrologers -athirst -attempered -attended -attentively -attributing -attuned -audience -avoiding -awaiting -aware -awe -awhile -babe -backward -baggage -ball -bands -barbarism -bark -base -basket -bathed -beams -beast -beatific -beauteous -beck -becoming -begat -beget -begging -begotten -beholdeth -beings -believeth -bend -bends -benefit -bepraised -beset -bestowedst -betook -bewail -bier -billows -biting -black -blasphemies -bleeding -blow -boast -bought -bounces -bowing -breasts -breathed -brighter -broughtest -builder -building -burthen -busied -c -calamity -calleth -candle -cane -carefully -carest -catch -catching -cd -ceases -ceasing -celebrated -cellar -centre -certainty -changest -chariots -cheap -checking -cheeks -cheerful -chewing -chiefest -childish -circus -citizen -clasped -cleansest -cleansing -cloak -clothing -cloud -co -coals -cogitation -collect -collectively -combine -comforted -commandments -commendable -commender -complain -complaints -compliance -compose -composed -concealed -conception -conclude -concubinage -condemnation -condemns -conference -conferring -confesses -conform -confused -conscious -consciousness -consent -considers -consist -consistently -consisting -consolation -consolations -constituted -constrain -constraint -consulting -consuming -contact -containest -contemn -contemplating -contented -contention -contentiousness -continence -contradict -contradicting -convict -copied -corn -corpse -corrected -corresponding -corrupt -corruptions -cottage -counsels -coursing -courtly -crafty -credence -credulity -creepeth -crept -crimes -cud -cupidity -damages -dangers -daughter -dawned -deafness -dearest -deaths -debated -deceit -deceitful -decline -dedicated -deem -deeps -defection -defective -defence -defile -deformed -deformities -deliberate -deliberating -delighting -deliveredst -delivering -dens -depend -derision -descend -descent -deserts -despiseth -despite -destroying -destruction -detached -detain -detected -detest -devotions -devoutly -dew -dieth -differ -differently -diminished -diminution -din -directly -disapproveth -discharge -disciples -disclaimers -disclaims -disclosed -discord -disgraceful -disordered -dispense -displeaseth -displeasing -dispose -disputes -disquieted -distances -distempered -distilled -distinctly -distract -distress -distributed -distribution -diversely -divide -divinations -division -divisions -docs -doer -doings -dollars -donation -doubtful -download -downward -downwards -dragging -dragon -drank -dread -dreaded -dream -drenched -drinketh -durst -duty -dwellest -dwelleth -early -ease -echo -echoed -editing -education -effaces -effect -effort -eighth -element -eloquently -email -emblem -embracement -embracements -eminence -eminently -emotion -emptied -enabled -endeavoured -endeavours -ending -ends -endurance -endures -enduring -enforcement -engage -engaged -enjoyed -enjoying -enlightens -enquirers -entangle -enters -entitled -entreated -entrusted -envy -envying -equipment -esteem -estimation -etc -eunuchs -exact -examiner -exceeded -excel -excelled -excellence -exhausted -exiled -existing -expenses -experiments -explained -expound -expounding -extension -extremest -exultation -eyesight -fabric -faced -failure -faintly -fairer -familiarly -famous -faster -fatherless -fathers -fearlessly -fee -feedest -feedeth -feels -fees -fervently -fetters -fields -fiercely -fighting -figured -filth -fires -fish -fitter -fixedly -flagitiousness -flame -flash -fleeing -fleshly -flies -flood -floods -flown -flung -followers -fool -fools -forbade -forenamed -forepassed -foreshow -foresignified -foretelling -forethinking -forgetful -formedst -forsooth -fought -fragrance -frenzied -frenzies -fro -fuel -fugitives -funeral -gained -gall -garland -garment -gate -gates -gather -generations -gifted -gladdened -gladiators -gleams -glided -glories -glorified -glorify -glow -gnawed -goads -godly -gods -goeth -golden -goodly -gracious -grammarians -grandchildren -granted -grass -gratification -gratuitously -greatest -greedily -groan -groat -guarded -guardian -guessed -guiltless -hale -handwriting -hanging -haphazard -happens -happily -harmless -harvest -hastened -hasting -hateful -header -healedst -hears -hearted -heeded -heights -helper -heretics -hesitation -hideous -hills -hither -hitherto -honied -honoured -horror -hot -household -houses -hungering -hungry -hurtful -hurting -husbands -hymns -hypertext -ice -ideas -imaginary -imbibed -imitating -imitation -imperturbable -impiety -impious -impression -impressions -incensed -incline -incomprehensible -incorporeal -incorruptibly -increased -incredibly -indicate -indignant -indited -inflame -infused -inhabitants -inheritance -initiated -injures -innocent -inseparable -instruct -instruction -instructor -insult -intelligence -intelligent -intend -intercedeth -intercourse -interest -intermission -intermitted -interpreting -interrupt -intervals -intolerable -intricate -intrude -invite -iron -irrational -issue -issued -itch -itching -join -joyfulness -judges -justifieth -keeper -keeps -king -kings -knocked -knots -labours -lack -lacketh -laden -lap -lastly -lawless -leads -leaning -leaven -legally -lessons -letter -lewd -liar -lied -lifted -lifts -lighten -lightened -lighteth -lineaments -lines -links -lion -listening -listing -literature -load -loathed -lodging -looks -loosed -loosen -lord -loveliness -lovingly -lucid -lulled -lump -lusteth -lustful -lusting -luxury -machine -magical -maid -maiden -maintainers -male -malice -mangled -manhood -mansion -marrow -masses -mastery -materials -meanings -measures -medicines -meditated -meditations -melodies -melted -mentally -merits -merry -mingling -minutest -mirth -mislike -misliked -mistress -mistresses -mockeries -mockery -mode -moderate -moderation -modestly -modesty -monstrous -monument -mortified -mothers -mourned -mule -musing -muttering -mutual -mysterious -mystic -nails -naked -nation -needing -neglected -neighbours -nilled -ninety -nobility -nod -nostrils -noted -notices -nourished -numbering -numberless -obedience -objected -obscurely -observance -occupy -occurred -occurs -odour -odours -offensive -officers -ofttimes -omit -omnipotent -openest -opens -operations -oppose -oratory -ordinance -ordinarily -organization -outer -overflowing -overpass -owed -owes -owing -owns -painful -pangs -panted -partake -participation -particle -parties -partly -pastime -pause -paying -penal -penalty -perceiveth -perdition -perfecting -persecuted -persevering -personages -persuasive -pertain -perturbations -perverse -phantom -phantoms -phrase -physical -physician -physicians -piece -pierced -piled -pitiest -pleasurable -plenteous -plentiful -plenty -plucking -plural -poet -poison -possession -possible -posted -prated -prating -preacher -prefect -prejudice -prepare -preparest -preparing -presented -preserving -pressure -presumption -prevailed -prevailing -preventing -price -primitive -prince -principles -prisoner -privately -prize -probable -proceeding -proclaim -production -professed -professing -profited -proofread -proprietary -protracted -provision -prudent -pub -purely -purest -purged -purposes -pursue -pursuits -putting -qualified -quench -questioning -quickenest -quite -races -raise -raises -random -ranged -rashness -reacheth -really -rebel -recalled -recalls -receivest -recess -reckoned -reckons -reconciled -recondite -recount -recourse -recovery -recruiting -redeem -reference -reform -refresh -refreshing -refusing -regular -rehearse -reigns -rejects -rejoices -relating -relics -relief -religiously -remembereth -remindeth -remittest -remnants -rend -renew -repair -repeated -replacement -replenish -reporters -reposed -reproachful -reproof -requited -rescue -rescued -resembling -resigned -resisteth -resisting -rested -restlessness -restore -restraining -retire -retired -retiring -returning -returns -revelations -reverently -revive -riddle -riper -rivers -rmunday@att -robbery -roll -rolling -rough -roused -royalty -ruminating -rush -sacrifices -sail -saint -sakes -sale -salt -sand -sang -satisfactorily -savage -savoured -scattered -scholar -scornful -scourges -sealed -searcher -seasonably -secure -selected -semblance -senator -senseless -serene -serpent -sets -settest -sever -shadowed -shaken -shameful -shameless -share -sharpen -shelter -shines -ships -shod -shone -shore -showedst -showing -shrink -shunning -sigheth -signifies -silently -silversmiths -singeth -singular -sitteth -sixth -slaves -slept -slippery -smaller -smallest -smelleth -smelling -smells -smile -smiled -soaring -soberly -software -sold -sole -solemnities -solicited -solidity -songs -sooner -soothed -sorry -soughtest -soundness -source -sources -sovereignly -spare -sparedst -spectacles -spectator -speed -spend -spoil -sponge -spot -spouts -sprang -sprung -staff -standeth -stands -startled -stature -stayed -stealing -step -stirring -stomach -stooping -stopped -storm -stormy -strained -straitly -straying -streaming -stretched -striking -strives -striving -studying -stuff -stumble -stumbling -stung -submitting -subsequently -subsist -substantial -subtle -succeeded -suggestion -sunder -superstitious -supplied -support -supporting -supreme -surely -surmount -surpassed -surveyed -suspected -swerving -swiftness -swollen -tabernacle -tale -talked -tamed -taughtest -taunt -tcosa10 -teaches -telling -tempered -temples -temporary -ten -tend -tenets -terrestrial -terrible -testimonies -texts -theatres -theatrical -thereto -thick -thine -thinketh -thirtieth -thousand -threatens -thrice -throat -throng -tickled -toilsome -tomorrow -tone -tones -tore -tormented -tosses -total -touching -towardliness -trace -traced -transferred -transgressions -treacherous -trials -triumpheth -tumultuous -turbulent -tutor -tutors -twentieth -unallowed -unbroken -uncertainty -uncorrupted -undergo -understandeth -ungoverned -unhesitatingly -unholy -uninjurable -unjust -unlawful -unlikeness -unsearchable -unseemly -unskilfulness -untainted -upbraided -upheld -uphold -upper -uprightness -upward -upwards -urge -users -vacation -vainly -valley -variableness -variance -varies -veiled -venerable -vengeance -vent -vessel -vicissitudes -victorious -view -villa -villainies -vintage -violated -violent -vital -vivid -vocal -volume -vomited -vouchsafed -vouchsafest -wages -waited -wallowed -wandering -wantonness -wants -warfare -wars -wash -wast -wasting -watch -watchfully -watered -wavering -wayfaring -weaker -wearied -weighed -weighty -welcome -wheel -whenever -whereupon -whispered -wickedness -wilfully -wilfulness -window -wisely -withdraw -wither -witnesses -wood -workmaster -worshipped -worshipping -wretch -wretchedness -writer -wroth -www -yesterday -yielded -yourselves -youthful -youths -zealously -zip -01 -03 -100 -19 -1971 -20 -2000 -2002 -30 -300 -3000 -31 -3296 -333 -4 -401 -500 -60 -91 -93 -94 -95 -96 -97 -98 -ABOUT -AD -ANYTHING -ARE -AUGUSTINE -Academicians -Accept -Affrighted -African -Afterwards -Agonistic -Alas -Alexandria -Already -Ambition -Ambrosian -Amid -Amidst -Amphitheatre -An -Anaximenes -Anger -Animals -Anon -Answer -Anubis -Apollinarian -Apostles -Apostolic -Arians -Arise -Aristotle -Art -Artificer -Ask -Association -Assuredly -Athanasius -Athenians -Avenue -Awake -BE -BEFORE -BREACH -Babylonian -Balaneion -Basilica -Better -Betwixt -Beware -Bible -Body -Bouverie -Bread -Bridal -Bride -Brought -C -CAN -CONFESSIONS -CONSEQUENTIAL -CONTRACT -Caesar -Canst -Canticles -Carthaginian -Cassiacum -Catholics -Catiline -Central -Charity -Cherubim -Circumcise -Clearly -Coeternal -Come -Commandment -Commandments -Computers -Continence -Continency -Continual -Copyright -Corrected -Couldest -Courage -Court -Covetousness -Creusa -Cup -Curiosity -Cyprian -DISCLAIMER -DISTRIBUTION -DOMINE -DON -Danae -Darkness -Date -Death -Deceased -December -Deity -Descend -Desire -Despite -Deus -Didst -Difficulty -Dispenser -Divers -Domain -Dominions -Doubt -Drunkard -Drunkenness -Duad -Duck -Dudley -EDITIONS -EITHER -EXPRESS -Eagerly -Eastern -Eat -Eating -Edition -Edward -Electronic -Empress -End -English -Enricher -Enter -Entrust -Envy -Epaphroditus -Episcopal -Epistles -Ergo -Especially -Evil -Example -Excellent -Excellently -Exodus -FITNESS -FTP -Fame -Fathers -Fear -Files -Finally -Fire -Firmament -First -Fish -Food -Forgive -Forsake -Forthwith -Forum -Free -Frenzied -Full -Furthermore -Future -GIVE -GRATIAS -Gainst -Galatians -General -Gervasius -Giver -Glad -Glory -Goal -Grammar -Greeks -Grief -Guide -Had -Hadst -Happy -Head -Helpidius -Hereat -Hereupon -Hide -Hierius -Highest -Highness -Hippocrates -Honor -Hosts -Howsoever -Human -Humans -Humble -Hundreds -II -III -IMPLIED -INCIDENTAL -INDEMNITY -INDIRECT -IRS -IT -IV -IX -Incarnation -Infinite -Inhabitant -Innocency -Insomuch -Instantly -Instructor -Intelligences -International -Interrupt -Into -Isaiah -Italian -Italy -Jew -Jews -Jordan -Joseph -Julian -June -Jupiter -Justina -KIND -Knowing -Knowledge -Knows -LETTER -LIABILITY -Lamentable -Language -Latinum -Lay -Led -Legal -Libanus -Living -Look -Lovely -Loving -Luxury -MADE -MAY -MEDIUM -MERCHANTABILITY -MONEY -Madaura -Madness -Mail -Mammon -Mars -Mary -Mathematicians -Meanwhile -Medicine -Men -Midnight -Might -Milanese -Minerva -Ministry -Monad -Money -Monnica -Moon -Mothers -NEGLIGENCE -NOTICE -NUMBER -Narrow -Nature -Neptune -New -Newsletter -Newsletters -Noah -Nod -ON -OTHER -OTHERWISE -Observe -Offices -Ofttimes -Oil -Old -Omnipotency -Omnipotent -On -Onesiphorus -Orations -Oratory -Ordainer -Orderer -Orestes -Ours -P -PARTICULAR -POSSIBILITY -PROVIDED -PUNITIVE -PURPOSE -Pages -Paraclete -Paradise -Passing -Paulus -Pay -Perfect -Perish -Perverseness -Photinus -Place -Placed -Plain -Portions -Powers -Praetorian -Praise -Preacher -Predicament -Prelate -Prepared -Presence -Present -Press -Principalities -Proceed -Proconsul -Prodigality -Prof -Prophet -Protasius -Psalmody -Public -Pusey -Pylades -READ -REMEDIES -Rare -Read -Readable -Rebuke -Receive -Redeemer -Redemption -Refund -Rejoiceth -Release -Remember -Replacement -Rest -Revenue -Ridiculous -Right -Roman -Romanianus -Royalties -SAINT -SEND -STRICT -SUCH -Saints -Saturn -Saul -School -Schools -Senators -Send -Seneca -Seraphim -Service -Seven -Shepherd -Shine -Shut -Simple -Sodom -Soft -Solomon -Sometimes -Soon -Special -Spiritual -Stage -Stand -Stop -Strengthen -Sudden -Suffer -Suppose -Supreme -Sure -Symmachus -Syrian -T -THAT -TIBI -TM -Teacher -Ten -Terence -Texts -Theft -Thefts -Their -Themselves -Thenceforth -Thereupon -Thessalonica -Thinkest -Thither -Three -Thrones -Title -Tobias -Tomorrow -Translated -Treasury -Triers -Trine -Trojan -Troy -Trust -Turn -Turned -US -USA -USE -Understand -Unless -Up -V -VERSIONS -VI -VII -VIII -Vacation -Valentinian -Vanilla -Ver -Verity -Viewing -Vindicianus -Vintage -Virgil -Volunteers -WANT -WHAT -WHICH -Way -Weight -Welcome -Whatsoever -Wheresoever -Whereto -Whosoever -Willing -Wills -Wilt -Within -Wondrous -Wordly -World -Wretched -X -XI -XII -XIII -Yes -Young -Your -_ abandonedly abase abased abashed abated +abhor abhorred +abhorring +abide abided +abidest +abideth +abiding +abilities +ability +abject +able abler +abode abolished +abominable +abound abounded +about +above +abraham abridged +abroad +absence +absent absolute +absolutely absorb abstemious abstinence abstract abstruser +absurd absurdity absurdly +abundance +abundant +abundantly +abuse +abyss +academicians +academics +accents +accept +acceptable acceptably +accepted accepts +access accompany +accomplices accomplish accomplished accord +according +account +accounted accursed accuse +accused accuser +accusing +accustomed aches achieve +acknowledge acknowledged +acquaintance acquainted acquiesce +acquire acquired +act +acted acting +action +actions +actor actors +acts +actual +actually +acute acuteness +ad +adam adapt adapted add +added +adding +addition +additional +additions +adeodatus +admirable +admiration +admire +admired +admiring +admission +admit +admitted admittest admonish +admonished +admonition adomed +adopted +adoption adored adorned adorning adulterer adulteress adulterous +adultery +advance advantage adversary +adversities +adversity +advice advices +advised +advising +aeneas +afar +affairs affect +affected affecting +affection +affections +affects +affianced +affirm +affirmed affirming affliction afford affright +affrighted aforesaid aforetime +afraid +afric +africa +african +after +afternoon afterward +afterwards +again +against +age +aged +agents +ages +aghast agito +ago agonised +agonistic agony +agree agreeable +agreed agreement ahead +aid aided ails aim +air alarmed alas +alexandria alike +alive +all allay +allaying allege +alleging allegorically +allegory +allotted +allow allowances +allowed allowing +alloy +allurements alluring +almighty +almost alms almsdeeds +aloft +alone +along +aloud +already +also +altar alter +alteration +alterations +altered alternately alternates +alternatively +although +altogether +always +alypius +am +amazed +amazement amazing ambition ambitions ambitious +ambrose +ambrosian +amen +amend amendment amiable +amid amidst +amiss +among +amongst +amphitheatre ample +an analyzed +anaximenes +ancient +and +angel +angels +anger +angered angers +angry +anguish animal +animals +animate anniversary announce announced +announcement announcing annoyance +annual anointings +anon anonymous +another +answer answerably +answered +answerest answereth +answering +answers antecedent anticipate anticipated anticipating +antidote +antony +anubis +anxieties +anxiety +anxious +anxiously +any anyone +anything +apart +apollinarian apostle apostles +apostolic +apparel +apparent apparently appeal +appear appearance +appeared +appeareth appearing +appears +appetite +applauded applauds applauses applicable +application +applied +apply +appointed appointing +appointment appointments apportioned +apprehend +apprehended apprehending apprehension +approach approached +approaching approbation appropriated +approve +approved +approveth approving +apt aptly aquatic +architect architects +archive +ardent ardently +are +argument arguments +arians aright +arise +arisen +ariseth arising +aristotle +arithmetic +armed armory +arms army +arose +around arrange +arranged array arrival +arrive +arrived arriving +arrogancy arrogant arrows +art artifice +artificer +artifices +arts +as +ascend ascended +ascending ascension +ascertained +ascii +ascribe +ascribed +ashamed +ashes +aside +ask +asked +asketh +asking +asks +asleep aspirate assail +assailed assaying assembly +assent assented assenting +assessor assiduously assign +assigned +assistance associate +associated +association +assuaged assume assurance assure +assured +assuredly assuring asterisk +astonished astonishment +astray astrologer +astrologers +asunder +at +athanasius +athenians +athirst atrociously attack attacked +attain +attained +attaining +attempered attempt attempted attendant +attended +attention attentive +attentively attested attracted attractiveness attracts attributed +attributing +attuned audacious audaciously +audience auditor auditors +aught augmented augmenting +augustine +author +authority +authors avail availed +ave avenged avengest +avenue avenues averred averse avert +avoid +avoided +avoiding awaited +awaiting +awake awakest +aware +away +awe awful awfulness +awhile awoke +babe +babes baby +babylon +babylonian +back backs +backward +bad +bade badge +baggage bait balancings +balaneion +ball balls balm balneum +bands banished banner banquetings banter baptise +baptised +baptism barbarian +barbarism +bare bared bargain +bark barked barking barred +barren +base based baseness basest bashfulness +basilica +basket bath bathe +bathed bathing baths +battle bawler +be +beams +bear bearer beareth +bearing +bears +beast +beasts +beat +beaten +beatific beating beatings +beauteous +beauties beautified +beautiful +beauty +became +because +beck +beclouded +become +becomes +becometh +becoming +bed +bedewed bedimmed +been befalls befell befitting +before +beforehand beg +began begannest +begat +beget +beggar beggary +begged +begging +begin beginneth +beginning +begins +begotten +beguile +beguiled beguiling +begun +behalf +beheld +behind +behold beholder beholdest +beholdeth +beholding beholds +being +beings +belief +believe +believed +believer believes +believeth +believing +belly +belong +belongeth +belonging +belongs +beloved +below bemoaned bemoaning +bend +bends +beneath benediction +benefit benefits +bent +bepraised bereaved +beseech +beset besets +beside +besides bespoken bespotted besprinkle besprinkling +best +bestow +bestowed +bestowedst betake bethink +betook betrothed +better betters +between +betwixt +bewail +bewailed bewailing +beware bewitched +beyond bibber bibbing +bible +bid bidden +bier billion +billows bin binary bind bird +birdlime +birds +birth birthright births +bishop +biting +bitter +bitterly +bitterness +black blade +blame +blamed blameless blamest blameworthy +blasphemies blasphemous blasphemy blasts +bleeding blending +bless +blessed blessedly +blessedness blesses +blessest blesseth +blessing +blessings blest blew +blind +blinded +blindness blissful +blood bloody bloom +blotted blottedst +blow blowing blunt blunted +blush +blushed +boast boastfulness boasting +bodies +bodily +body boil boiled boiling boils +bold +boldly boldness +bond +bondage +bonds +bones +book +books +bore +born +borne borrow +bosom bosses +both +bottom bottomless boughs +bought +bounces +bound boundary +bounded +boundless +bounds +bouverie +bowed +bowels bowers +bowing bows +boy +boyhood boyish +boys brackishness brain +breach +bread breadth +break breakers breaking +breast +breasts +breath +breathe +breathed breathedst +breathing +bred +brethren briars bribe +bridal bride bridegroom brides bridle +briefly briers +bright +brighter +brightness brim +bring bringeth +bringing +brings brittle +broad broke +broken brooks +brother +brotherly +brought +broughtest brow brows brute @@ -5351,190 +806,434 @@ bubblings buckler bud builded +builder +building buildings +built +bulk bulky +burden +burial +buried +burn +burned burnest +burning burnt +burst burstest +bursting +burthen burthened bury bushel +busied +business bustle busy +but butler buy buyers buzz buzzed buzzing +by cabinets +caesar cakes calamities +calamity calculate calculated calculation +calculations calf +call +called +calledst +callest +calleth +calling +calls calm +calmed calmly calumnies +came camp +can candid +candle +cane +cannot +canst +canticles canvassing +capable capacities +capacity capital captain captious +captive captivity carcase +care cared caredst +careful +carefully careless carelessly +cares caresses +carest careth +carnal +carolina +carried +carry +carrying +carthage +carthaginian +case cases +cassiacum +cast casters castest casting casts cataloguers +catch +catching +catechumen +catholic +catholics +catiline +cattle caught cauldron +cause +causes causing caverns caves +cd +cease +ceased +ceases ceasest ceaseth +ceasing +cedars +celebrated celebration +celestial celibacy +cellar cellars cementest censers +censured +central +centre +certain +certainly certainties +certainty +chain chains chair challenged challenges +chamber chambering chambers +chance +change +changeable +changeableness +changed +changes +changest +changing +chant chanting chapter +character +characters +charge charges charioteer +chariots +charity charmed +chaste chastely chastened chastenedst chastenest +chastity +chatto +cheap +check +checked +checking +cheeks cheer cheered +cheerful cheerfulness cherish cherished +cherubim +chest +chewing +chief +chiefest +chiefly +child childbearing +childhood +childish +children chill chilled +choice +choked choler choleric +choose chooses choosing +chose +chosen +christ +christian +christians +church churches +cicero +circensian circles +circuit circuits +circumcise circumlocutions circumstance +circus cities +citizen +citizens +city claim clanking clasp +clasped class classics +clave +clay clean +cleanse +cleansed +cleansest +cleansing +clear +cleared clearest +clearly clearness +cleave cleaved cleaveth +cleaving climb clingeth +cloak cloaked clog +close +closed closes closing +clothe +clothed +clothing +cloud cloudiness +clouds cloudy cloven cloyed cloyedness +co +coals coats codes +coeternal cogitated +cogitation cogito cogo +cold +collect +collected +collectively collects +colorado +colour coloured colouring +colours +com combinations +combine combined +come +comely +comes +cometh +comfort +comforted comfortedst +comforter comfortest comforting +comforts +coming +command +commanded commander +commandest +commandeth +commanding commandment +commandments +commands commemorated +commencement commencing +commend +commendable +commended +commender commenders commendeth comment commercial commiserate +commiserates commiserating commission +commit commits +committed committing +common commonly +communicate communicated communication community +compact compactedst compacting companion +companions +company +compare +compared comparing +comparison +compass compassing +compassion +compassionate compassionates +compelled compendiously +complain +complaints +complete +completed +compliance +compose +composed composing compound +comprehend +comprehended comprehendeth comprehending compressed comprise +comprised +computer +computers conceal +concealed conceit +conceits +conceive +conceived conceives +conceiving concentrated +conception +conceptions +concern concerned +concerning concernment concerns +conclude concluded concludeth concord concreated +concubinage concubine +concupiscence concupiscences +condemnation +condemned condemnest condemning +condemns condensed +condition condole confer +conference +conferring +confess +confessed +confesses +confesseth +confessing +confession +confessions +confidence confidentially +confidently confiding confine confined confirm confirmed conflict +conflicting +conform conformably +conformed conformity +confound +confounded +confused +confusedly confusedness confusions confute @@ -5543,278 +1242,622 @@ congratulated congratulating congratulation congregations +conjecture conjectures conjecturing conjoined conjugal +connecticut connects conquer +conquered conquering conquests +conscience +conscious +consciousness consecrate consecrated consecrateth consecrating consecration +consent consented consenting consentings consequences consequential conservative +consider considerable +consideration +considered considereth +considering +considers consigned +consist consistent +consistently consisteth +consisting consists +consolation +consolations conspiracy conspirators constant constantly +constellations constitute +constituted constituteth +constrain +constrained +constraint +consult +consulted +consulter consulters +consulting consume +consumed consumest +consuming +consumption +contact contacting contagion +contain +contained +containest +containeth +containing +contains +contemn +contemplate contemplateth +contemplating +contemplation contemporary +contempt +contemptible +contend +content +contented +contention contentions contentious +contentiousness contentment contents contests +continence +continency +continent continently +continual +continually continuance +continue +continued continueth +contract contracted +contradict +contradicting contradiction contradictions contradictory +contrary contributing +contributions +contrite contrition contritions controversy convenient conventicle conventionally +conversation conversations +converse conversing +conversion +convert +converted convertedst converting +convey +conveyed conveyedst conveying +conveys +convict +convicted +convinced +copied +copies +copious +copy +copyright +corn corner corners +corporeal +corporeally +corpse +correct +corrected +correction corresponded +correspondence +corresponding corrigible +corrupt +corrupted +corruptible corrupting +corruption +corruptions corruptly +cost costs +cottage couch +could couldest councillor +counsel counselled +counsels +count +counted +countenance counterfeit countermanding +country countryman counts courage +course +courses +coursing +court courteously courtesy +courtly courts +covenant covenanted cover +covered covetous +covetousness cower craftier +crafty +create +created +createdst createst createth +creating +creation +creator +creature +creatures +credence credibility +credit +credulity creep +creepeth +creeping +crept +creusa +cried criedst +cries +crime +crimes crisis criticised criticising +crooked crookedly crookedness +cross crossed crosses +crown crowned crucifixion crudities +cruel cruelty +cry +crying cubit cubits +cud cultivated cultivating culture cunning +cup cupboards +cupidity curb +cure +cured curest curing curiosities +curiosity +curious curiously +current currents curtailment +custom +customs +cut +cutting +cyprian daemon daemons +daily +dakota damage damaged +damages damnable +danae +danger +dangerous +dangers +dare +dared dares +dark +darkened darkenings darkest +darkly +darkness +darksome darksomely +dashed data +date dates +daughter daughters +david +dawn +dawned +day daybreak +days +dead +deadly +deaf deafen +deafness +deal dealt +dear dearer +dearest +death +deaths debasing +debated debtor debtors +debts +decay decayeth decays +deceased +deceit +deceitful deceits deceivableness +deceive +deceived +deceivers +deceiving deceivingness +december deception decide decided decked declaiming declamation +declare declared +decline decree decrepit dedicate +dedicated +deductible +deed +deeds +deem deemed +deep +deeper +deepest +deeply deepness +deeps +defect +defection +defective +defects +defence +defended defender defending defends +deferred deferring defers +defile +defiled +defilements define +defined defining definite definitely +deformed +deformities deformity degraded +degree +degrees +deity dejectedness +delay delayed delete +deliberate +deliberates +deliberating deliberation +delight +delighted delightful delightfulness +delighting +delights delightsome +deliver +delivered +deliveredst deliverest +delivering delivers +deluded deluding delusions +demanded demander demandest demanding demands demonstrate +demonstrated denied denies +denieth denoted denotes +dens +deny +depart +departed departest +departing +departure +depend depending depends depraved +deprived +depth +depths +deride derided deridedst deriders derides deriding +derision +derive +derived +descend descendants descending +descent described deserted deserters +deserts +deserve +deserved deservedly deserving +deservings designs +desire +desired desiredst +desires desireth +desiring +desirous +despair +despaired +despairing desperate +despise +despised despisedst despisest +despiseth +despising +despite destined +destroy destroyers +destroying +destruction +detached detail details +detain +detected +determined +detest +detested +detesting detriment +deus +devil devilish +devils devised devoted +devotion +devotions devour devoured +devout +devoutly devoutness +dew dialogue +did diddest +dido +didst +die +died +dies +dieth +differ +difference +different +differently +difficult +difficulties +difficulty +diffused digest digested digits dignities +dignity +diligence diligent +diligently diluted +dimensions diminish +diminished diminisheth diminishing +diminution +din dining dinner dir +direct +directed directeth +directing direction directions +directly director disagreeing disagreements disalloweth disallowing disappear +disapproved +disapproveth +discern +discerned discerneth +discerning +discharge +disciple +disciples +discipline +disclaimer +disclaimers +disclaims +disclose +disclosed discomfort discommended discontent +discord discordant discourage +discourse +discoursed +discourses +discoursing +discover discoverable +discovered discoverest discovereth +discovering +discovers discovery discreet discreetly +discretion +discuss +discussed discussion disdained +disease diseased +diseases disembowelled disengage disentangle disentangled disgraced +disgraceful disguise disguised disguising disgust disgusted +dishes dishonour +disk disliked dismiss disobeyed disorder +disordered disorders dispel +dispense +dispensed +dispenser dispensers dispensest dispensing @@ -5825,63 +1868,152 @@ displace displacing displayed displays +displease +displeased +displeaseth +displeasing +dispose disposed +disposer disposition +dispraise +dispraised dispraisest disprove +dispute disputed disputer +disputes +disputing disquiet +disquieted disregard dissent dissentings +dissipated dissipation dissoluteness dissolution dissolved dissolvest +distance +distances distant +distempered distended distill +distilled distinct +distinction +distinctly +distinguish +distinguished distinguishing +distract +distracted distractedly distracting +distraction distractions +distress +distribute +distributed distributest distributing +distribution distrusted +disturb +disturbed dive +divers diverse +diversely diversifiedst diversity diversly +divide +divided +dividest +dividing divination +divinations +divine diving divinity +division +divisions divorceth +do docile +docs +doctrine +doer +does +doest dog +doing +doings doleful dollar +dollars +domain +domestic +domine +dominion +dominions +don +donation +donations +done +door doors dormant +dost +dotages dotards doted +doth doting +double doubled +doubt doubted doubteth +doubtful doubtfulness +doubting doubtless doubts +down downfall +download +downward +downwards +dragging +dragon dragons +drank +draught +draw drawest +drawing +drawn +draws +dread +dreaded dreadful dreading +dream +dreams +drenched +drew drewest +dried +drink +drinketh +drinking drive +driven drives drop drops @@ -5889,59 +2021,144 @@ drove drowsiness drowsy drudgery +drunk +drunkard drunkards drunken +drunkenness +dry dryness +duad +duck +dudley +due dug dull duller dully +dumb +during +durst +dust duties dutiful +duty +dwell dwellers +dwellest +dwelleth +dwelling +dwelt +dying +each eager +eagerly +eagerness eagle +ear earliest +early +earnest +earnestly earnestness +ears +earth +earthly +ease eased easeful easier +easily +east +eastern +easy +eat eaten +eateth +eating ebb ebbing ebbs +ebcdic ecclesiastical +echo +echoed echoes eclipsed +eclipses edged edification edify edit edited +editing +edition editions educate educated +education +edward effaced +effaces +effect effected effectedst +effort +efforts +egypt +egyptian +eight +eighth +ein +either +elder +elders elect electronic +electronically +element +elements elephant elevated elevation eligible +elijah +eloquence +eloquent +eloquently +else +elsewhere eluding +email embalmed embarrassments +embittered +emblem +embrace +embraced +embracement +embracements embraces embryo emerge emerging +eminence +eminent +eminently +emotion emotions +emperor empire +employ employed +employee employest +empress +emptied +emptiness emptinesses +empty +enabled enact enacted enacteth @@ -5954,84 +2171,202 @@ encouraged encouraging encumbered encumbrances +end endangers endeared endearments +endeavour +endeavoured +endeavouring +endeavours +ended +ending endlessly +ends +endued +endurance +endure +endured +endures +endureth +enduring +enemies +enemy energy enervated enforced +enforcement +engage +engaged engages engine +english engraff enigma +enjoin +enjoined +enjoinest +enjoy +enjoyed +enjoying enlarge +enlarged enlargedst enlarging +enlighten +enlightened +enlightener +enlighteneth +enlightening +enlightens enlisted enmities +enmity +enough enounce +enquire +enquired +enquirers enquiries +enquiring enquiringly enquiry +enricher ensample enslaved +ensnared ensnaring ensues ensuing +entangle +entangled entangling +enter +entered enteredst entering +enters +enthralled enticed enticements enticing +entire +entirely entireness +entitled entrails +entrance entreat +entreated entreaties +entrust +entrusted entwine enumeration envenomed envious environeth environing +envy +envying +epaphroditus +epicurus +episcopal +epistles equably +equal equalled +equally equals equinoxes +equipment equity -er +equivalent +ere +ergo +err +erred +error +errors erst +esau +escape +escaped +especially espoused +essay +essayed +essence establish +established +estate +esteem +esteemed esteeming estimate estimated +estimation estranged +etc +eternal +eternally +eternity +etext etext00 etext01 +etext02 etext90 etext99 +etexts +eunuchs +euodius +evangelists evaporates +eve +even evened +evening evenly events +ever everfixed +everlasting everlastingly +evermore +every everything everywhere evidence evident evidently +evil +evils evincing +exact exacted exacting +exalted exaltedness +examine examined +examiner +examining +example +examples +exceeded exceedeth +exceeding +exceedingly +excel +excelled +excellence excellencies +excellency +excellent +excellently excelling excels +except excepted exceptions excess @@ -6046,334 +2381,766 @@ excluded exclusion exclusions excursive +excuse excused excuses +execrable execrate execute exercise exercised exhalation +exhausted exhibit exhibited exhort +exhortation exhortations exhorted exhorting exigency +exiled +exist existence +existeth +existing +exists +exodus expansive expect +expectation expected expecteth expects expends +expense +expenses +experience +experienced +experiments +explain +explained +explaining explanatory expose exposed +expound expounded +expounding +express +expressed +expression +expressions exquisitely +extended +extension extent exterior external extinguish extinguished +extol extolled extollers extracted +extreme extremely +extremest extricate extricated exuberance exuberant exude +exult +exultation +eye +eyes +eyesight +fable +fables +fabric fabulous +face +faced +faces facio factito facts faculties +faculty +fail faileth +failing +failure +fain +faint fainting +faintly +fair +fairer fairest fairly fairness +faith +faithful faithfully faithfulness +fall fallacies +fallen +falling falls +false +falsehood +falsehoods +falsely falsified +fame +familiar familiarised +familiarly +family +famine famished +famous fancies +fancy fanned +fantasies fantastic +far fared farness farther +fashion fashioned +fast +faster fastidiousness fasting fastings fat +father +fatherless fatherly +fathers fatigues fatness +fault faultfinders faults faulty +faustus +favour favoured favourites favours +fear +feared feareth +fearful fearfully +fearing +fearlessly +fears feast +fed +fee +feed +feedest +feedeth +feeding +feeds +feel +feeling +feelings +feels +fees +feet +feigned +felicity +fell +fellow +fellows +felt +female females fence fervent +fervently fervid festival fetched fettered +fetters +fever feverishness +few fiction +fictions +field +fields +fiercely fiercest fifteen fifth +fifty +fig +fight fighter +fighting figurative figuratively +figure +figured +figures +file filename +files +fill +filled +fillest filleth +filling +filth filths filthy final finally +find findest +findeth +finding +finds fine finest finger +fingers finish +finished +finite +fire fired +fires firm +firmament +firminus +firmly +firmness +first +fish +fishes +fit +fitness +fitted +fitter fittest +fitting +five +fix +fixed +fixedly fixing +flagitiousness flagitiousnesses flagon +flame +flash flashedst flashes flashing flattering +fled fledged +flee +fleeing +fleeting +flesh +fleshly fleshy +flew +flies flights fling floating +flock flocks +flood +floods flour +flourished +flow +flowed +flower flowers +flowing +flown +flows fluctuate fluctuates fluctuating fluctuations fluently fluidness +flung fluttereth flux +fly +flying foamed fog +folded folk folks +follies +follow +followed +followers followest followeth +following +follows +folly +food +fool +foolish foolishly foolishness +fools +foot +footed footsteps +for forasmuch +forbade forbadest forbare +forbear +forbid +forbidden +force +forced forceth forcibly +fore foreconceived forefathers +forego foregoing +forehead foreign foreigner foreknowledge forementioned +forenamed forenoon forenoons +forepassed foresaw +foresee +foreshow foreshowed foreshower +foresignified foresignify forests +foretell +foretelling forethink +forethinking forethought +foretold forgave forge +forget +forgetful +forgetfulness +forgetteth +forgetting forging +forgive +forgiven +forgivest forgiving forgot +forgotten forgottest +form formation +formed +formedst +former +formerly formest +forming +formless +formlessness +forms fornicating +fornication fornications +forsake +forsaken forsakest forsaketh +forsaking +forsook +forsooth +forth forthcoming +forthwith fortunate fortunes forum +forward +forwards foster fostering +fought +foul foully +foulness fouls +found +foundation foundations founded +fountain +four +fourth fourthly fowl +fowls fragment fragments +fragrance +fragrant frailness +frame +framed framers +frantic fraud fraught freaks +free +freed +freedom +freely freeman +frenzied +frenzies +frenzy +frequent frequently +fresh freshness +fretted +friend +friends +friendship frightful +fro +from front frozen +fruit +fruitful fruitfully +fruitfulness fruitless fruitlessly +fruits +ftp +fuel +fugitives fulfil +fulfilled fulfils +full fuller +fully +fulness fumed fumes functions +fund funding +funeral furious furnace +furnish furnished furnishing +further furtherance -g +furthermore +fury +future +gain +gained gainful gaining +gains gainsay gainsayer +gainsayers +gainst +galatians gales +gall gallantry game +games garb +garden gardens +garland garlands +garment garner gasped +gate +gates +gather +gathered gatheredst gatherest +gathering gathers +gave +gavest gay +gaze gazers gazing +general generally generate +generation +generations +genesis genius +gentiles +gentle gentleness +gently genuinely geometry +gervasius +gestures +get getting ghastly +ghost ghosts giant +gift +gifted +gifts gilded girded girl girls +give +given giver givers +gives +givest +giveth +giving +glad +gladdened gladdens +gladiators +gladly +gladness gladsome glance glances +glass gleam gleameth +gleams glide +glided gliding glittering gloried +glories +glorieth +glorified glorifies +glorify +glorious +glory glorying +glow glowed gloweth glowing glows glue gnashed +gnawed gnawing +go +goad goaded goading +goads goal god +godhead godless +godly +gods +goes goest +goeth +going +gold +golden +gone +good goodliness +goodly +goodness +goods gorgeous +gospel +got gotten govemed +government +governor governors gowned +grace graceful gracefulness +gracious gradation gradually +grammar grammarian +grammarians +grandchildren +grant +granted grantest +grasp grasps +grass grassy gratefully +gratias +gratification gratings gratuitous +gratuitously +grave gravity +great +greater +greatest +greatly +greatness greaves +grecian +greedily +greediness greedy +greek +greeks +green greet greeted +grew +grief +griefs +grieve +grieved +grieves grievest grieving +grievous +grievously +groan groaned groaneth +groaning +groanings +groans +groat +gross grossness +ground grounded grounds groves +grow +growing +grown growth +guarded +guardian guardianship +guess +guessed +guidance guidances +guide guidest +guilt +guiltless +guilty +gulf gushed +gutenberg +gutindex +habit +habitation +habits +had +hadst hail hair +hairs +hale haled +half hallow hallowed hallowing halved +hand handkerchief handle +handled handling +handmaid +hands +handwriting hang +hanging hap +haphazard hapless haply happen +happened happeneth +happens +happier +happily +happiness +happy harass harbour harbouring +hard harder hardheartedness hardship @@ -6382,98 +3149,276 @@ hark harlotries harm harmed +harmless harmonious harmoniously +harmonise harmoniseth harmonising harmonized harmonizing +harmony harsh hart -hart@prairienet harts +harvest +has +hast +haste hasten +hastened hastening +hasting +hatchet +hate +hated +hateful +hath +hatred haughtiness haunt +have +having hay +he +head +header +headlong +heads +heal +healed +healedst healeth +healing +health +healthful +healthfully healthy heaped heaps +hear +heard +heardest +hearer hearers +hearest +heareth +hearing +hearken +hears hearsay +heart +hearted heartedness +hearts +heat heated heathen +heaven +heavenly +heavens heavier heavily +heavy +hebrew hedged +heed +heeded +height heightening +heights heinous +held +heldest +hell hellish helmet +help helped +helper helpful +helpidius helping +hence henceforth +her +herb +herbs +here +hereafter +hereat +hereby hereditary +herein hereof hereon heresies +heresy +heretics +heretofore hereunto +hereupon hers +herself hesitate +hesitated hesitating +hesitation +hid +hidden hiddest +hide +hideous hidest +hierius +high +higher +highest highly +highness +hills +him +himself +hinder +hindered hindereth +hindrance hint +hippocrates +his +history +hither +hitherto hoar hogs hogshed +hold holden holdest +holding +holds holies holily holiness +holy home +homer +honest honestly honesty +honey +honied +honor +honour +honourable +honoured honouring +honours hook hooks +hope +hoped +hopeful +hopes hoping horns +horrible +horror +horse horses +hortensius +host hosts +hot hotly +hour +hours +house +household houseless +houses hovered +how +however +howsoever html +http +huge hugging +human humane humanity +humans +humble +humbled humbledst +humility +hundred +hundreds +hung +hunger +hungered +hungering +hungry hunting +hurried hurriedly hurrying +hurt +hurtful +hurting +husband +husbands +hushed +husks hymn +hymns +hypertext +i +ibiblio +ice +idaho +ideas +identification identify +idle +idleness +idly idol +idols +if ignoble +ignorance +ignorant +ii +iii +ill ills illuminate illuminating illumined illusion +image +images +imaginary imagination +imaginations +imagine +imagined +imagining imbibe +imbibed imbue +imitate imitated +imitating +imitation +immediately immense immersed +immoderate +immortal +immortality immortally immovably immutable @@ -6483,10 +3428,15 @@ impart imparted imparts impatience +impatient impatiently +imperfect imperfection imperfections imperishable +imperturbable +impiety +impious implanted implanting implied @@ -6499,7 +3449,10 @@ impostumes impotent impregnable impress +impressed impressing +impression +impressions imprinted improperly impudently @@ -6508,35 +3461,60 @@ impunity impure impurity impute +in inaccessible inaccurate inactive inanimate inappropriately +inasmuch +incarnation incense +incensed +inchoate +incidental inclination +incline inclined +included +including incommutable +incomparably incomplete +incomprehensible incongruously +incorporeal incorrect +incorruptible +incorruptibly incorruption +increase +increased +increasing incredible +incredibly incumbrances incurable incurred indebted +indeed indefinitely indemnify +indemnity indentures indexes +indiana +indicate indicated indicating indications indigent indigested +indignant +indirect indirectly indite +indited indued indulgent inebriate @@ -6546,64 +3524,125 @@ inevitable inevitably inexperienced inexpressible +infancy +infant infantine +infants infected infection +infer +inferior +infidelity infidels +infinite infinitely infinitude +infirmities +infirmity +inflame +inflamed inflammation inflection inflicted +influence influenced influences +information informed informing infringement infuse +infused ingrated +inhabitant +inhabitants inhabited inharmonious +inheritance +iniquities +iniquity +initiated initiating initiation initiatory injurable +injure +injured +injures injurious +injury injustice +inmost innate +inner +innocence +innocency +innocent +innumerable innumerably inordinate insatiable insatiate insensibly +inseparable inserted insight insolently +insomuch inspect inspecting +inspiration +inspire +inspired inspirest inspiring instability +instance instances +instant +instantly +instead instillest instinct instinctive instituted institution +instruct +instructed instructest +instruction +instructor +insult insultingly +intellectual +intelligence +intelligences +intelligent +intelligible intemperance +intend +intended intense intensely intenseness intensest +intent intention +intently intercede +intercedeth intercepting +intercession +intercourse +interest interested interior +intermission intermit +intermitted intermitting +internal +international interpose interposed interposing @@ -6611,357 +3650,1006 @@ interpret interpretation interpreted interpreter +interpreting +interrupt interrupted interruption +interval +intervals intimacy intimate intimated intimately +into +intolerable +intoxicated +intricate introduced +intrude inured inveigler invest invests +invisible +invite invited inviting +involved +inward +inwardly +iowa +iron irons +irrational irresoluteness irrevocable irritate +is +isaac +isaiah +israel +issue +issued +it +italian +italy +itch +itching items +its +itself +jacob jarring +jealous jealousy jeer jeering +jerusalem +jest jests +jesus +jew +jews +join +joined joineth joining joint jointly joking +jordan +joseph +journey journeyed +jove +joy +joyed joyful +joyfulness +joying +joyous joyously joyousness +joys +judge +judged judgements +judges judgest +judgeth +judging +judgment +judgments +julian juncture +june +juno +jupiter +just +justice justification +justifieth justify +justina +justly keen +keep +keeper keepest +keeping +keeps ken +kentucky +kept kicking +kill +killed killest killeth +kind +kindle +kindled kindly +kindness kindred +kinds +king +kingdom kingdoms +kings +knee knees +knew +knewest knit knitting +knock +knocked knocketh +knocking knocks +knots knottiness knotty +know +knowest +knoweth +knowing +knowingly +knowledge +known +knows +labour +laboured labourers +labours +lack +lacketh +lacking +laden +laid +lament +lamentable lamented lancet +land +lands +language languages languishing lanthorn +lap +large largely largeness +larger lashed lashes lashest +last +lastly +late +later lathe +latin +latins +latinum +latter lattice +laugh laughed laughter launched +law +lawful +lawfully +lawless +laws lawyer lawyers laxly +lay layeth +laying lays +lead leaden leadeth leading +leads +leaning leaps +learn +learned learner +learning +learnt +leasing +least +leave +leaven +leaves +leaveth +leaving lecture lectured +led +left +legal +legally +leisure lends +length +lengthened lentiles +less lessen +lesser +lesson +lessons +lest +let lethargy +letter +letters lettest +lewd +liability +liar +libanus +liberal liberality +liberty +licence license licensed licenses lick +lie +lied +lies +lieth +life +lift +lifted liftedst lifter liftest +lifts +light +lighted +lighten +lightened +lighteth +lightly +lights +lightsome +like +liked likedst +likely +likeness likenesses liker likes likest +likewise lilies +limbs limed limitation +limited +limits line lineage +lineaments lined +lines linger lingered lingering +links +lion lip +lips +list +listened +listening +listing lists literally literary +literature litigation +little littles +live +lived livelihood lively +lives livest +liveth +living lizard +lo +load loads +loathed loathing loathsome locking locusts +lodging +lofty logic login +long +longed +longer +longing longings longs +look +looked looker looketh +looking +looks +loose +loosed +loosen loosest loquacity +lord lords +lose +loses loseth +losing +loss +lost +lot +loth lottery +loud loudly +louisiana +love +loved +loveliness +lovely lover +lovers +loves +lovest +loveth +loving +lovingly +low +lower lowering +lowest lowlily +lowliness +lowly +lucid lucre ludicrous +lulled luminaries +lump lungs lure lures +lust lusted +lusteth +lustful +lustfulness +lusting +lusts luxuriousness +luxury +lying +macedonia +machine +mad +madaura +made +madest madly +madness +magical magistrates +magnified magnify magnitudes +maid +maiden +maidens +mail +maimed main mainly +maintain +maintained +maintainers maintaining majesty +make +maker makers +makes +makest +maketh +making +male +malice malicious maliciously malignant +mammon +man manage manfully +mangled +manhood +manichaean +manichaeus +manichee +manichees +manifest +manifestation +manifested +manifestly +manifold +manifoldly manifoldness +mankind manna +manner manners manors +mansion mantles manufactures +many mariners +mark +marked +market marketplace marking marks +marriage marriageable +married +marrow marry marrying +mars marts martyr +martyrs +marvel marvelled +mary masculine +mass +massachusetts +masses +master mastered +masters +mastery +material +materials +mathematicians matrons +matter +matters maturing +may +mayest mazes +me +mean meanest +meaning +meanings meanly +means +meant +meantime +meanwhile measurable +measure +measured +measures +measuring +meat +meats meddle meddling +medea +mediator +medicine +medicines medicining +meditate +meditated meditating +meditations +medium +meek +meekness +meet meeting meets +melodies melodious +melody melt +melted +member +members +memory +men +mentally +mention +mentioned mentioning +merchantability +mercies +merciful +mercifully +mercy +mere +merely merged +merits merrily +merry message messages +messengers +met +method metre metres mget +michael mid +middle midnight +might +mightest mightier +mightily mightiness +mighty +milan +milanese milder mildly +milk milky millennium +million mimic +mind +minded +mindful +minds +mine +minerva mingle +mingled +mingling +minister +ministers +ministry +minute +minutest +miracles +mire +mirth mirthful mischief misdeeds +miserable +miserably +miseries +misery +mislike +misliked miss missed missing mist mistaken +mistress +mistresses mists mixture moan +mock +mocked +mockeries mockers +mockery mocking +mode models +moderate +moderation modes +modestly +modesty modification modify modulation moist molest molten +moment momentary momentous +moments +monad monasteries monastery +money monk +monnica monster +monstrous +monstrousness +montana +month months +monument +moon moral +more moreover +morning +morrow morsel +mortal +mortality mortals +mortified +moses +most +mostly +mother motherly +mothers +motion +motions motive +mould +moulded mount +mountain +mountains mounting mourn +mourned mourners mournful +mourning +mouth mouthed +mouths +move +moved moveth +moving +much muddy +mule multiple multiplicity +multiplied multipliedst +multiply multiplying +multitude +multitudes +munday +murder murdered murdering murmur murmured museth +music musical +musing +must mutability +mutable +mute +muttering +mutual mutually +my +myself +mysteries +mysterious mysteriously +mystery +mystic mystically +nails +naked +name +named +namely +names +narrow narrower narrowly narrowness +nation +nations +native nativity +natural naturally +nature +natures +nay +near +nearer neatly neatness +nebridius +necessaries necessarily +necessary +necessities +necessity +neck +need +needed needeth needful +needing +needs +needy neglect +neglected neglecteth neglecting negligence negligent +neighbour neighbouring +neighbours +neither +neptune +nest nests +net nets +nevada +never nevertheless +new +newsletter +newsletters +next nigh +night +nights +nill +nilled nimble +nine +nineteenth +ninety ninth +no +noah +nobility +noble +nod +noise nominally +none +noon +nor north +nostrils +not +note +noted notes +nothing +notice +notices +notion +notions notorious +notwithstanding +nought nourish +nourished nourishing nourishment nourishments novelty novice +now nowhere null +number +numbered numberest +numbering +numberless +numbers numerous nurse nursery +nurses nuts -o +obedience +obedient obediently +obey +obeyed +obeying obeys +object +objected +objections +objects oblation obscure +obscurely +observance +observation +observe +observed observes observeth +observing obstinacy +obtain +obtained +obtaining obtains obviously +occasion +occasioned +occupy occupying -ofThe +occur +occurred +occurs +ocean +odour +odours +of +off +offence +offences +offend +offended +offensive +offer +offered offerings +office officer +officers +offices +official +offspring +oft +often +oftentimes +ofthe +ofttimes oh +oil +ointments +oklahoma +old omened +omit omitted omnipotency +omnipotent omnium +on +once +one +ones +onesiphorus +only +open +opened +openest openeth +opening +openly +opens +operations +opinion opinionative +opinions +opportunity +oppose +opposed opposing oppressed oppresseth oppression +or +oracle oracles orally +orations +orator +oratory orbs +ordained +ordainer +order +ordered +orderer orderest +ordering +ordinance +ordinarily +ordinary +orestes +org +organization organs origin +original ornamentedst ornamenting ostentation +ostia +other +others +otherwhere +otherwhiles +otherwise +ought oughtest +our +ours ourself +ourselves +out +outer outrages outset +outward +outwardly +over overboldness overcame overcast +overcharged overclouded +overcome overcoming +overflow overflowed +overflowing overhastily overjoyed +overpass overpast overspread overspreading @@ -6969,108 +4657,231 @@ overtake overthrew overthrow overturned +overwhelmed +owe +owed +owes +owing +own +owns +oxford page +pages +paid +pain +painful +pains pair pairs palace palaces palate +pale palm pamperedness pander panegyric +pangs pant +panted +panting paper par +paraclete paradise parched pardoned pared parent parental +parents parity parley +part +partake +partaker partaketh +parted +participation +particle +particles particular +parties parting +partly partners +parts party +pass +passage passages +passed passengers +passes +passeth passible +passing +passion passionately +passions password +past +pastime +pastimes patched +path +paths +patience +patiently +patricius pattern patterns +paul +paulus +pause pauses +pay payable payest +paying payments +peace peaceful peacefully peacemaker pear pearl +pears peculiar peculiarly +pen +penal penally penalties +penalty pence +penetrating penitent +people +per peradventure perceivable +perceive +perceived perceivedst +perceives +perceiveth +perceiving +perchance +perdition +perfect +perfected +perfecting +perfection perfectly performed performing +perhaps +peril perilous +perils +period periodic periods +perish perishable perished perisheth +permission +permit +permitted +pernicious +perpetual +perplexed +perplexities +persecuted persecutes persecuting +persevering +person +personages personally personated +persons perspicuous +persuade +persuaded persuasions +persuasive +pertain pertained pertaining +perturbations perused +perverse perverseness perversion perversity pervert +perverted +pervertedly perverting pervious +pestilent petitions +petty petulantly pg +phantasm phantasms +phantom +phantoms +philippians +philosophers +philosophy +photinus +phrase phrases +physic +physical +physician +physicians picture pictures +piece piecemeal pieces pierce +pierced piercing +piety pile +piled pilgrim +pilgrimage pilgrims pinching pines +pious +piously +pit pitch pitiable pitied +pitiest pitiful +pity pitying +place +placed placedst +places placest placing plague +plain plainer +plainly plainness plains plan @@ -7078,111 +4889,237 @@ planets plans plant plants +platonists plausibility +play playing plays plea plead +pleasant pleasanter pleasantly pleasantness +please +pleased +pleasest +pleasing +pleasurable +pleasure pleasureableness +pleasures plenary +plenteous plenteousness +plentiful plentifully +plenty pliant plot plots plotting +pluck +plucked +pluckest +plucking +plunged plunging +plural +pmb +poems poesy +poet +poetic +poets +point pointed +points poise +poison pole polished +polluted pollution +pontitianus +poor popular popularity population +portion +portions +position +possess possessed possesses possessest possesseth +possession possessor +possibility +possible +posted potent potter +pour +poured pourest +poverty +power +powerful +powers +practice +practise +practised +praetorian prairienet +praise +praised +praises praiseth +prated praters +prating +pray +prayed +prayer +prayers +praying preach preached +preacher preachers +preaching preachings +precede +preceded precedes precedest precedeth precepts +precious precipice precipitated precisely predestinated predestination +predicament +predicaments predicated predict predicted preeminence preeminent +prefect +prefer +preferable preference +preferred preferring +prejudice prelate preliminary +prepare +prepared preparedst prepares +preparest +preparing prerogative presbyters prescribed prescribes prescripts +presence +present +presented +presently +presents +preserve +preserved +preserving presidentship presides presidest presideth presiding +press +pressed pressedst presseth +pressure presume +presumed presuming +presumption pretend +prevail +prevailed +prevailing prevails prevented preventedst +preventing previous prey +price prices pricked pricks +pride +priest primary +primitive +prince +princes +principalities principally +principles print prior prison +prisoner privacy +private +privately +privation +privily +prize prizes +probable problem proceed proceeded proceedeth +proceeding processing processors +proclaim proclaiming +proconsul proconsular +procure procured procuredst +prodigality +produce +produced +production products +prof profane +profess +professed +professing +profession +professor +professorship proffer proffering +proficiency +profit +profitable +profited +profits profligate profound profounder @@ -7193,132 +5130,278 @@ prohibition project projected prolix +prolonged +promise +promised +promises promiseth promising promo +pronounce +pronounced pronounces +pronouncing pronunciation +proof +proofread prop +proper +properly property prophecy +prophet prophets +proportion proportions +proposed propound propoundest +proprietary prose prosper prosperities +prosperity +protasius protect +protection protest protesting +protracted protraction +proud prouder +proudly +prove +proved provest proveth +provide +provided providedst +providence province provincial +provision provisions provoke +prudent prunes pryers psalm +psalmody +psalms +psalter psaltery +pub +public publication +publicly +puffed pulse punctuation punish punishable +punished +punishment +punishments +punitive pupils puppies purchase purchased purchasing +pure +purely purer +purest +purged +purified +purity +purpose +purposed +purposes purposing +pursue pursued pursues pursuing +pursuits +pusey +put putrefied +putting +pylades +qualified +qualities +quarrel quarrels quarter queen +quench quest +question questioned +questioning questionings +questions +quick quicken quickened +quickenest quicker +quickly quickness +quiet quieter quit +quite quitting quoth +race +races racked racks rage raged raging rais +raise +raised raisedst +raises raisest +raising +ran +random +range +ranged +rank ranked +ransom rapture rare +rash +rashly +rashness rates +rather +rational raven ravish +reach +reached +reacheth reaching +read +readable +reader +readers readest readier +readily +readiness +reading +reads +ready +real realised realisest realities reality +really reap +reason +reasonable reasoning reasonings +reasons reawakened +rebel rebelled rebellious +rebuke rebuked +recall +recalled recallest +recalling +recalls +receive +received +receives +receivest +receiveth +receiving recent recently +receptacle +recess +recesses recite recited reckon +reckoned reckoning +reckons reclaim reclaiming +recognise +recognised recognises recognising +recollect recollected recollecting +recollection recommend recommended recommending reconcile +reconciled reconcilement reconciliation +recondite record +recorded +recount recounts +recourse +recover +recovered recoveredst recovering +recovery +recruiting rectify recur recurring +redeem redeemed redeemer redemption redistributing redoubling refer +reference references +referred reflect +reform +reformed refrain +refrained refraining +refresh +refreshed +refreshing +refreshment +refuge +refund +refuse +refused +refusing refute +regard regarded regardest regarding @@ -7326,16 +5409,33 @@ regardless regenerated regeneratedst regeneration +region regions +regular regulate +rehearse reigning +reigns rein reins reinvolved +reject +rejected rejection +rejects +rejoice +rejoiced +rejoices +rejoicest +rejoiceth +rejoicing relapse relapseth +relate +related relater +relating +relation relations relationship relative @@ -7343,64 +5443,143 @@ relators relaxation relaxedly relaxing +release released +relics relied +relief +relieve +religion +religious +religiously +remain remainder +remained remainest +remaineth +remaining +remains remarkable remedies +remember +remembered +remembereth +remembering +remembers +remembrance remembrances +reminded +remindeth remission remitted +remittest +remnants remorse removal +remove +removed +rend render renderest +renew +renewed reneweth +renewing renounce +renowned +rent +repair +repay +repeat +repeated repeating repel repelled +repent repentance repentest +replace +replacement replacing +replenish +replenished replenishing +replied replies reply +report +reported +reporters reports +repose +reposed reposes reposeth reposing represent repress +reproach +reproachful +reproof +reproved reproves reptiles reputation repute reputed +request require +required +requirements requires requiring requital +requited requitest +rescue +rescued rescuing resemble +resembling resend resent reserved reside +residest +resigned +resist resistance +resisted resistedst +resistest +resisteth +resisting +resolute resolutely +resolution +resolved +respect respected respective +respects respite +rest +rested restest +resting +restless restlessly +restlessness restoration +restore +restored restoring +restrain +restrained restrainest +restraining restrains +restraint restricted result resulting @@ -7408,347 +5587,833 @@ results resumed resumes resurrection +retain +retained retaineth retard +retire +retired +retiring retreat +return +returned +returning +returns +reveal +revealed revealedst revealing +revelation +revelations +revenge revenged revenges +revenue reverence reverential +reverently review +reviewing reviled revised +revive revolt +revolting revolved +revolving +reward rewards +rhetoric +rich richer +riches +riddle ridiculous +right +righteous +righteousness rightful +rightly rights rigidly rigorous rioting riotous ripened +riper +rise +risen riseth +rising risk +rites +rivers +riveted roared roarest +rob robber +robbery +robert robing rocks rods +roll +rolled +rolling +roman +romanianus +rome rood +room +root +rose rottenness +rough +round rounds rouse +roused rove roving rovings royalties +royalty rude rudely +rudiments +rugged ruggedness ruinous +rule ruled +ruler +rules rulest ruleth ruminate +ruminating +run running runs +rush +rushing +s +sabbath +sacrament +sacraments +sacrifice +sacrificed +sacrifices sacrificing +sacrilegious +sad saddeneth +sadness +safe safer +safety +said +saidst +sail sailors sails +saint +saints +saith +sake +sakes salary +sale +salt salted +salvation +same sanctification sanctified sanctity sanctuary +sand +sang sangest sank +sat sate sated satiate satiated satiety satisfaction +satisfactorily +satisfied +satisfy satisfying +saturn +saul +savage savageness +save +saved +saving +saviour +savour +savoured savoury +saw +sawest +say +sayest +saying +sayings +says scanning scantling +scarce +scarcely scatter +scattered scatteredst scenical sceptre schedule +scholar +scholars +school +schools +science +sciences +scoffed scoffing +scorn scorned +scornful scornfully +scourge scourged scourgedst +scourges scraped scratch scratching +scripture +scriptures +scroll scruple +sea seal +sealed +search +searched +searcher searches searching seas +season +seasonably seasoned seasoneth +seasons +seat seated seats +second secondary secrecies +secret +secretly secrets +sect section +secular +secure securely seduce +seduced seducers +seducing seduction seductions seductive +see +seed +seeing +seek seekest +seeketh +seeking +seeks +seem +seemed seemeth seemly +seems +seen +sees +seest +seeth +seize +seized seizes seldomness +selected +self +sell sellers selling selves +semblance +senator +senators +send +sending +seneca sensation sensations +sense +senseless +senses +sensible sensibly sensitive +sent sentence sentences +sentest sentiment +separate +separated separateth separating +seraphim +serene serenity sermons +serpent +serpents +servant +servants +serve +served serves +service serviceable services +serving servitude session +set +sets +settest +setting settle +settled settling +seven +seventh +sever +several +severally severe +severed severely severer severing +severity +sex shade +shadow +shadowed +shadows +shadowy shady shaggy +shake +shaken shakes +shall +shalt +shame +shameful shamefulness +shameless +shamelessness +shape shapen shapes +share shared sharers shares +sharp +sharpen sharper sharply sharpness sharpsighted shatter shattered +she +shed +sheep +shelter shepherd shield shifted shifting +shine +shines shinest +shineth +shining ship +ships shipwreck +shod shoe shoes +shone shonest shook shoot shop shops +shore +short shortened +shorter shortly +should shoulder +shoulders +shouldest shouted shoutedst +show +showed +showedst +shower showeth +showing +shown +shows +shrink shrinking +shrunk +shudder +shunning shuns +shut +sick sickly +sickness sicknesses +side +sides siege +sigh +sighed +sigheth +sighing +sighs +sight sights +sign significations +signified +signifies +signify +signs +silence silenced +silent +silently silly +silver +silversmiths +similitude +simple +simplicianus simplicity +simply +sin +since sincerely sinful +sing +singeth +singing +single +singly sings singsong +singular singularly +sink +sinking sinks +sinned +sinner +sinners +sins sipped sips sit sites sits sittest +sitteth +sitting six +sixteenth +sixth size skies skilful +skill +skilled +skin skins skirmishes skirts +sky slackened slackness +slain +slave slavery +slaves slavish +slay slaying +sleep sleeper sleepest +sleeping +slept slew +slight slighting +slightly slipped +slippery sloth slothful +slow +slower +slowly sluggish slumber slumbers +small +smaller +smallest smarting +smell +smelleth +smelling +smells +smile +smiled +smiling smiting +smoke +smooth smoothed smoothing +snare +snares snow +so +soaring +sober +soberly +sobriety socalled +society +sodom +soever +soft softened softening softly +software soil solaces +sold soldier +sole solecism solemn solemnise +solemnities solemnity +solicited solicits +solid +solidity solitude +solomon solstices solve solving +some someone +something +sometime +sometimes +somewhat somewhere +son +song +songs +sons +soon +sooner +soothed soothes +sore sorely sores +sorrow +sorrowed +sorrowful sorrowfulness +sorrows +sorry +sort +sorts +sought +soughtest +soul +souls +sound +sounded soundedst sounder +soundeth +sounding +soundly +soundness +sounds sour +source +sources +south +sovereign +sovereignly sowing +space +spaces +spacious +spake +spare +sparedst sparks sparrow sparrows +speak speakers +speakest +speaketh +speaking +speaks +special species specimens spectacle +spectacles +spectator spectators +speech speeches speechless +speed +speedily +spend +spent +spices +spider +spirit +spirits +spiritual +spiritually +spoil +spoke +spoken +spokest +sponge +sport sportively sports +spot spots +spouts +sprang +spread spreadest +spreading spreads +spring springeth +springs +sprung spurn +stable stablished +staff +stage stages staggered +stand +standest +standeth +standing +stands stank stanza stanzas star starry +stars +start starting +startled startles +state stated stateliness +statement +states station statue +stature status +stay +stayed stays stead steadfast +steal +stealing steals stealth steep steeping steer steered +step +steps stick sticking stiff stiffly stiffneckedness stiffness +still stilled stimulus stipend +stir +stirred stirrest +stirring +stole stolen stolidity +stomach stomachs +stone stones +stood stoop +stooping +stop +stopped +store +stored stores stories storing +storm stormed +stormy story stowed straightening +strained +strait +straitly straitness +strange strangely stranger strangers +strayed +straying stream +streaming +streams +streets +strength +strengthen +strengthened strengthenedst strengthenest +strengtheneth strengthless +stretch +stretched stretching +stricken +strict strictness +strife strifes +strike strikes +striking strings +stripes stripped +strive +strives +striving stroke +strong strongholds +strongly +struck structure struggle struggled struggles struggling +stuck student +students +studied +studies studious studiously +study +studying +stuff +stumble stumbled +stumbling +stung stupidity +style styled subdu +subdued subduedst subduing +subject +subjected subjection +subjects +subjoined subjoinedst subjoins sublime @@ -7756,163 +6421,394 @@ sublimely sublimer sublimities sublimity +submit submitted +submitting subordinate +subsequently +subsist subsists +substance +substances +substantial +subtile subtilty +subtle subversion subverted +subverters +subvertings +succeed +succeeded succeeding +succession successive successively succour succouredst +such suck sucking sucklings +sudden +suddenly sue +suffer +suffered +sufferedst sufferest +suffering +suffers +suffice +sufficed sufficest +sufficeth +sufficient sufficiently suffocated suffrages +suggest +suggested +suggestion +suggestions suggests +suitable suitably summer summing summit sumptuously +sun +sunder +sung +sunk supercelestial supereminence +supereminent superfluously +superior +superstition +superstitious suppliant +supplied supplies +support supported +supporting +suppose +supposed supposing suppress suppressed +supreme +supremely +sure +surely surf +surface surfeiting +surmount surmounted +surpassed surpasses surpassest surpassingly surprises surrounded +surveyed suspect +suspected +suspense suspicions suspicious +sustenance +swallowed swaying +sweat +sweet sweeten sweetened sweeter sweetly sweetlyvain +sweetness sweetnesses +swelled +swelling swept +swerving swift +swiftness swine +swollen swoon +sword +syllable +syllables +symmachus sympathy +syrian +tabernacle +table +take +taken +takes taketh +taking +tale talent talented talents tales +talk +talked talkers talketh talking tame +tamed tamedst tamer taming tardy task +taste +tasted tastes +tasteth tasting tattlings +taught +taughtest +taunt taunted +tax taxes +tcosa10 tcosa10a tcosa11 +teach +teacher +teachers +teaches +teachest +teacheth +teaching teachings tear tearful +tears tediousness teeming +teeth +tell tellest telleth +telling +tells +temper temperament temperance +tempered tempers tempestuously +temple +temples +temporal +temporary temporately tempt +temptation +temptations +tempted tempting tempts +ten +tend +tender tenderly tenderness tendernesses tending tends tenet +tenets tenor +terence termed +terms +terrestrial +terrible terribly terrors +testament testified +testimonies +testimony +texas +text +texts +thagaste +than thank +thankful +thanks +thanksgiving thanksgivings +that +the +theatre +theatres +theatrical +thee +theft thefts +their +theirs +them +themselves +then +thence thenceforth +there +thereby +therefore therefrom +therein +thereof +thereon +thereto thereupon +therewith +these +thessalonica +they +thick thickeneth thickets +thief thieve thin +thine +thing +things +think +thinkest +thinketh +thinking thinks +third thirdly +thirst thirsted +thirsteth thirsts +thirtieth +this +thither +thorns +thoroughly +those +thou +though +thought +thoughts +thousand thraldom thread threatenest +threatens +threats +three threefold +thrice thriven +throat throne +thrones +throng throngs +through +throughout +thrown +thrust thrustedst +thunder thundered thunderer thunderest thundering +thus thwart +thy +thyself +tibi +tickled +tide +tides +tie tilde +till +time +times tip tire tired title titles +tm +to +tobias +together +toil toiled toiling +toilsome token +told tolerated tolerating toment tomenting +tomorrow +tone +tones +tongue +tongues +too +took tookest top +tore +torment +tormented +torments +torn torpor +torrent torture toss +tossed +tosses +total +touch +touched touchedst +touching +toward +towardliness +towards tower +town townsman +toys +trace +traced tracedst traces track trade +trademark tradition tragical trailed @@ -7922,12 +6818,17 @@ tranquil tranquillity transcribe transcription +transferred transferring +transformed transforming transgressing transgression +transgressions transgressors transition +transitory +translated transmitted transparent transported @@ -7936,63 +6837,132 @@ travailed travailing travails traveller +treacherous treachery tread +treasure treasured +treasures +treasury treat treble +tree +trees tremble +trembled +trembling +trial +trials tribulation tribute +tried +triers trifles trifling +trillion +trine +trinity triple triumph triumphed +triumpheth trod +trojan troop +troops +trouble +troubled troubles +troublesome +troy +true +truer +truly +trust trustees trusting +truth +truths +try +trying +tully tumbling +tumult tumults +tumultuous tumultuously tumultuousness +tune turbulence +turbulent turmoiling turmoils +turn +turned turnest +turning +turns +tutor +tutors +twelve +twentieth +twenty +twice twinkling twins twisted +two +txt ulcerous uman unabiding +unable unacquainted unadorned unaided +unallowed unalterable unanxious unarranged unassuming +unawares unbecoming unbelievers unbelieving unbending unbeseemingly +unbounded +unbroken uncase unceasing +uncertain uncertainties +uncertainty unchain +unchangeable +unchangeableness +unchangeably unchanged +unclean +uncleanness +unconscious unconsciously +uncorrupted uncorruptible uncorruptness uncultivated undefilable +under +undergo underline +understand +understandeth +understanding +understands +understood undertake undertook +underwent undid undistracted undisturbed @@ -8004,30 +6974,53 @@ unexplained unfailing unfailingly unfair +unfeigned unfledged unforgotten +unformed unfriendly ungodlily ungodliness +ungodly +ungoverned unhappily unhappiness +unhappy unharmonising unhealthiness +unhesitatingly +unholy +uninjurable uninjuriousness unintelligible unintermitting union +united +unity +universal universally +universe +university +unjust +unjustly unkindled unkindness +unknowing unknowingly +unknown +unlawful unlearned +unless unlicensed +unlike unlikeliness +unlikeness unliker unlimited unlocked +unlooked unmarried +unmeasurable unmeasured unnatural unpassable @@ -8039,13 +7032,21 @@ unpunished unquiet unravelied unravelled +unreal unreasoning unresolved +unrighteous unrulily unruly unsating +unsearchable +unseemly +unseen +unsettled +unshaken unshakenly unskilful +unskilfulness unsought unsound unspeakable @@ -8053,10 +7054,13 @@ unstable unstayed unsuitably unsure +untainted unteach unteachable unthankful unthought +until +unto untruly untruth unused @@ -8067,66 +7071,171 @@ unveiled unwarmed unwearied unwholesome +unwilling +unwonted +unworthy unyielding +up upborne upbraid +upbraided +upheld upheldest +uphold upliftest +upon +upper upright +uprightness uproar +upward +upwards +urge +urged urgedst urgently +us +usa usage +use +used +useful usefully +users +uses useth ushered +using +usual +usually usury utensils utmost +utter +utterance +uttered uttereth +utterly +vacation vagrant vail +vain vainglorious +vainly +valentinian valiant +valley valuable +value valued +vanilla +vanished +vanities +vanity vanquished vapours variable +variableness +variance variation variations +varied +varies varieties +variety +various variously +vary +varying +vast vaster vaunt vehemence +vehement +vehemently veil +veiled +vein +venerable +vengeance +vent venture ventures venturing +venus +ver +verecundus +verily +verity +vermont +verse +verses version +versions +very +vessel +vessels vestige vex vexed +vi vice vices viciousness +vicissitude +vicissitudes +victim +victor +victorinus +victorious +victory +view viewing vigorous +vigour +vii +viii +vile +vileness +villa +villainies vindicating +vindicianus vineyard +vintage +violated +violence +violent violets viper +virgil +virgin virginity virgins +virtue virtuous virus +visible +vision +visions +vital +vivid +vocal vocally +voice +voices +void +volume +volumes voluntarily volunteers voluptuous voluptuousness +vomited +vouchsafe +vouchsafed vouchsafedst +vouchsafest vow vowed vowing @@ -8135,117 +7244,326 @@ voyage vulgar waft waged +wages wail +wait +waited +waiting +waking +walk +walked walking walks wallow +wallowed +walls +wander +wandered wanderer +wandering +wanderings +want +wanted +wanting wanton wantonly +wantonness +wants war +warfare warmth warned warning warped warranted warranties +warranty warreth warring +wars +was +wash washing +wast +waste +wasted +wasting +watch watched +watchfully watchings +water +watered waterest +waters watery waver +wavered +wavering +waves wavy +wax +way +wayfaring +ways wayward +we +weak weaken weakened +weaker weakest weakly +weakness weaknesses weal wealth wealthy weapon wear +wearied +weariness wearing wearisome weary weaving wedlock +weep +weeping weeps weigh +weighed weigheth weighing +weight weights +weighty +welcome +well weltering +went +wept +were +wert +whales +what +whatever +whatsoever wheat +wheel +when +whence whencesoever +whenever +where +whereas +whereat +whereby +wherefore wherefrom +wherein +whereof +whereon wheresoever +whereto +whereupon +wherever +wherewith +whether +which whichsoever +while +whilst whirling whirlings whirlpool whirlpools +whispered whisperings whispers +whit white +whither +whithersoever whitherto whitherward +who whoever +whole +wholesome wholesomely wholesomeness +wholly +whom whomever whoring +whose +whoso +whosoever +why +wicked +wickedly +wickedness +wide +widow widows +wife +wild +wilderness wildness +wilfully +wilfulness +will +willed +willedst +willest +willeth +willing +willingly +wills +wilt +win +wind winding windings +window winds +windus windy +wine +wings winked winning wins wipe +wisdom +wise +wisely +wiser +wish +wished +wishes +wishing +wit +with +withal +withdraw +withdrawing +withdrawn withdrew +wither withered withering +within +without withstood +witness +witnesses witting wittingly +wives wizard +woe woes woke +woman womanish +womb +women won +wonder +wondered +wonderful +wonderfully wonderfulness +wondering +wonders +wondrous +wondrously +wont +wonted +wood +wooden wooed +word +wordly +words wordy +work +workest worketh workhouse +working workings workmanship +workmaster +works +world +worldly worlds worm +worn +worse worship +worshipped worshipper worshippers +worshipping worsted worthless +worthy +would +wouldest +wound +wounded woundest +wounds wove wrap +wrath wrench wrested +wretch +wretched +wretchedness wring wrinkle +writ +write +writer +writing +writings +written +wrong wronged wronging -x +wrote +wroth +wrought +wyoming +ye +yea +year +years +yes +yesterday +yet +yield +yielded yieldeth +yielding yields -your@login +yoke +you +young +younger +your +yourselves +youth +youthful youthfulness +youths +zeal zealous +zealously +zip diff --git a/Adam/Gr/Gr.CPP b/Adam/Gr/Gr.CPP index d79486d..9e57437 100644 --- a/Adam/Gr/Gr.CPP +++ b/Adam/Gr/Gr.CPP @@ -5,7 +5,8 @@ U0 GrInit1() "End\0Color\0Dither Color\0" "Width\0Planar Symmetry\0Transform On\0Transform Off\0Shift\0" "Point\0PolyPoint\0Line\0PolyLine\0Rect\0Rotated Rect\0" - "Circle\0Ellipse\0Polygon\0BSpline2\0BSpline2 Closed\0BSpline3\0BSpline3 Closed\0" + "Circle\0Ellipse\0Polygon\0BSpline2\0BSpline2 Closed\0" + "BSpline3\0BSpline3 Closed\0" "Flood Fill\0Flood Fill Not Color\0BitMap\0Mesh\0Shiftable Mesh\0" "Arrow\0Text\0Text Box\0Text Diamond\0"); DefineLstLoad("ST_SPRITE_ELEM_CODES", @@ -18,12 +19,13 @@ U0 GrInit1() } GrInit1; -#help_index "Graphics/Sprite" +#help_index "Sprites/Binary" class CMeshTri { - I32 color; //Give one of 0-7 colors. Colors 8-15 are 0-7 with intensity bit set. - I32 nums[3]; //Vertex number + I32 color; //Give one of 0-7 colors. +//Colors 8-15 are 0-7 with intensity bit set. + I32 nums[3]; //Vertex number }; class CQueMeshTri @@ -49,7 +51,7 @@ public class CSpriteDitherColor : CSpriteBase U16 dither_color; }; -public class CSpriteWidth : CSpriteBase +public class CSpriteW : CSpriteBase { I32 width; }; @@ -136,7 +138,7 @@ public class CSpritePtMeshU8s : CSpriteBase #define SPT_END 0 //$LK,"CSpriteBase",A="MN:CSpriteBase"$ #define SPT_COLOR 1 //$LK,"CSpriteColor",A="MN:CSpriteColor"$ #define SPT_DITHER_COLOR 2 //$LK,"CSpriteDitherColor",A="MN:CSpriteDitherColor"$ -#define SPT_WIDTH 3 //$LK,"CSpriteWidth",A="MN:CSpriteWidth"$ +#define SPT_WIDTH 3 //$LK,"CSpriteW",A="MN:CSpriteW"$ #define SPT_PLANAR_SYMMETRY 4 //$LK,"CSpritePtPt",A="MN:CSpritePtPt"$ #define SPT_TRANSFORM_ON 5 //$LK,"CSpriteBase",A="MN:CSpriteBase"$ #define SPT_TRANSFORM_OFF 6 //$LK,"CSpriteBase",A="MN:CSpriteBase"$ @@ -157,14 +159,17 @@ public class CSpritePtMeshU8s : CSpriteBase #define SPT_FLOOD_FILL 21 //$LK,"CSpritePt",A="MN:CSpritePt"$ #define SPT_FLOOD_FILL_NOT 22 //$LK,"CSpritePt",A="MN:CSpritePt"$ #define SPT_BITMAP 23 //$LK,"CSpritePtWHU8s",A="MN:CSpritePtWHU8s"$ -#define SPT_MESH 24 //$LK,"CSpriteMeshU8s",A="MN:CSpriteMeshU8s"$ See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$. +#define SPT_MESH 24 //$LK,"CSpriteMeshU8s",A="MN:CSpriteMeshU8s"$ See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$. #define SPT_SHIFTABLE_MESH 25 //$LK,"CSpritePtMeshU8s",A="MN:CSpritePtMeshU8s"$ See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$. #define SPT_ARROW 26 //$LK,"CSpritePtPt",A="MN:CSpritePtPt"$ #define SPT_TEXT 27 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$ #define SPT_TEXT_BOX 28 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$ #define SPT_TEXT_DIAMOND 29 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$ #define SPT_NUM_TYPES 30 -//See $LK,"Graphics/Sprite",A="HI:Graphics/Sprite"$. See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ and + +#help_index "Graphics/Sprite;Sprites;Sprites/Binary" + +//See $LK,"Sprites",A="HI:Sprites"$. See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ and //$LK,"::/Demo/Graphics/SpriteRaw.CPP"$ for how CSprite are stored. public class CSprite { @@ -175,7 +180,7 @@ public class CSprite CSpriteBase b; CSpriteColor c; CSpriteDitherColor d; - CSpriteWidth w; + CSpriteW w; CSpritePt p; CSpritePtPt pp; CSpritePtPtAng ppa; @@ -195,13 +200,14 @@ public class CSprite extern I64 GrBlot3(CDC *dc,I64 x1,I64 y1,I64 z1,CDC *img); extern U8 *GrBitMap4ToBitMap8(U8 *dst,U8 *src,I64 src_size,I64 bkcolor); +extern I64 *Mat4x4New(I64 *src,CTask *mem_task=NULL); extern U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL); #include "GrGlbls" #include "GrTextBase" #include "GrAsm" -#include "GrDC" #include "GrPalette" +#include "GrDC" #include "GrInit" #include "GrMath" #include "GrScreen" diff --git a/Adam/Gr/GrAsm.CPP b/Adam/Gr/GrAsm.CPP index 1ea0918..ea84a83 100644 --- a/Adam/Gr/GrAsm.CPP +++ b/Adam/Gr/GrAsm.CPP @@ -1,6 +1,5 @@ #help_index "Graphics/Misc" asm { -USE64 //************************************ _GR_UPDATE_LINE64:: PUSH RBP @@ -398,9 +397,10 @@ _GR_ROP_EQU_U8_NO_CLIPPING:: @@10: POP RBP RET1 24 } -_extern _GR_ROP_EQU_U8_NO_CLIPPING U0 GrRopEquU8NoClipping(I64 ch,U8 *dst,I64 width_internal); -//No clipping -public _extern _IS_PIX_COVERED0 Bool IsPixCovered0(CTask *task,I64 x,I64 y); +_extern _GR_ROP_EQU_U8_NO_CLIPPING U0 GrRopEquU8NoClipping(I64 ch, + U8 *dst,I64 width_internal); +public _extern _IS_PIX_COVERED0 Bool IsPixCovered0( + CTask *task,I64 x,I64 y);//No clipping _extern _GR_UPDATE_LINE64 U0 GrUpdateLine64( U64 **_vga,U64 **_src,I64 d,U8 **_dst); diff --git a/Adam/Gr/GrBitMap.CPP b/Adam/Gr/GrBitMap.CPP index 57c3533..2ac535a 100644 --- a/Adam/Gr/GrBitMap.CPP +++ b/Adam/Gr/GrBitMap.CPP @@ -4,16 +4,11 @@ public Bool GrPlot0(CDC *dc=gr.dc,I64 x,I64 y) {//2D. No clipping or transformation or pen width. U8 *dst; I32 *db; - I64 d,dist; + I64 d; CColorROPU32 c,color=dc->color,bkcolor=dc->bkcolor; - if (dc->flags & DCF_LOCATE_NEAREST) { - dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (dc->flags & DCF_LOCATE_NEAREST) + dc->dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y); if (dc->flags & DCF_RECORD_EXTENTS) { if (xmin_x) dc->min_x=x; if (x>dc->max_x) dc->max_x=x; @@ -71,8 +66,9 @@ public I64 GrPeek0(CDC *dc=gr.dc,I64 x,I64 y) public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) {//2D. Clipping but not transformation.. I64 i,j,k,k1,kk,kk1,w1,h1,w2,h2, - leading_pixels,leading_pixel_mask,whole_I64s,trailing_pixels,trailing_pixel_mask, - reg bit_shift,dist,win_z_buf_line_inc,win_z_buf_line_dec,win_z_num, + leading_pixels,leading_pixel_mask,whole_I64s, + trailing_pixels,trailing_pixel_mask, + reg bit_shift,win_z_buf_line_inc,win_z_buf_line_dec,win_z_num, color_mask; U8 reg *dst,*src; I32 db; @@ -99,13 +95,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) x+=win_task->pix_left; y+=win_task->pix_top; } - if (dc->flags & DCF_LOCATE_NEAREST) {//TODO:Untested - dist=DistSqrI64(x+img->width>>1,y+img->height>>1,dc->cur_x,dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (dc->flags & DCF_LOCATE_NEAREST) + dc->dist=DistSqrI64(x+img->width>>1,y+img->height>>1,dc->cur_x,dc->cur_y); if (dc->flags & DCF_SCREEN_BITMAP) { if (x+w1<0) w1=-x; if (x+w2>win_task->pix_right+1) @@ -166,7 +157,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) win_z_buf_ptr=NULL; else { win_z_num=win_task->win_z_num; - win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); + win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+ + (w1+x)/FONT_WIDTH)*sizeof(U16); win_z_buf_line_dec=whole_I64s; if (leading_pixels) win_z_buf_line_dec++; @@ -187,7 +179,9 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (win_z_num>=*win_z_buf_ptr++) { if (bit_shift) *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask&color_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))& + ~leading_pixel_mask&color_mask; else *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| *src(I64 *)++&~leading_pixel_mask&color_mask; @@ -199,7 +193,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (bit_shift) for (i=0;i=*win_z_buf_ptr++) - *dst(I64 *)++=(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&color_mask; + *dst(I64 *)++=(*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))&color_mask; else { src(I64 *)++; dst(I64 *)++; @@ -215,7 +210,9 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { if (bit_shift) *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask&color_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))& + ~trailing_pixel_mask&color_mask; else *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| *src(I64 *)++&~trailing_pixel_mask&color_mask; @@ -234,14 +231,17 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (leading_pixels) { if (bit_shift) *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask&color_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))& + ~leading_pixel_mask&color_mask; else *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| *src(I64 *)++&~leading_pixel_mask&color_mask; } if (bit_shift) for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift))&color_mask; + *dst(I64 *)++=(*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))&color_mask; else for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask&color_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))& + ~trailing_pixel_mask&color_mask; else *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| *src(I64 *)++&~trailing_pixel_mask&color_mask; @@ -268,7 +270,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) } } else { win_z_num =win_task->win_z_num; - win_z_buf_ptr =gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); + win_z_buf_ptr =gr.win_z_buf(U8 *)+ + ((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); win_z_buf_line_dec=whole_I64s; if (leading_pixels) win_z_buf_line_dec++; @@ -307,7 +310,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) win_z_buf_ptr=NULL; else { win_z_num=win_task->win_z_num; - win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); + win_z_buf_ptr=gr.win_z_buf(U8 *)+ + ((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); win_z_buf_line_dec=whole_I64s; if (leading_pixels) win_z_buf_line_dec++; @@ -328,7 +332,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (win_z_num>=*win_z_buf_ptr++) { if (bit_shift) *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))&~leading_pixel_mask; else *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| *src(I64 *)++&~leading_pixel_mask; @@ -340,7 +345,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (bit_shift) for (i=0;i=*win_z_buf_ptr++) - *dst(I64 *)++=*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift); + *dst(I64 *)++=*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift); else { src(I64 *)++; dst(I64 *)++; @@ -356,7 +362,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { if (bit_shift) *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask; else *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| *src(I64 *)++&~trailing_pixel_mask; @@ -375,14 +382,16 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img) if (leading_pixels) { if (bit_shift) *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| - (*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift))&~leading_pixel_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))&~leading_pixel_mask; else *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| *src(I64 *)++&~leading_pixel_mask; } if (bit_shift) for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift); + *dst(I64 *)++=*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift); else for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask; + (*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift))&~trailing_pixel_mask; else *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| *src(I64 *)++&~trailing_pixel_mask; @@ -413,8 +423,9 @@ here1a: k+=img->width_internal; } } else { - win_z_num =win_task->win_z_num; - win_z_buf_ptr =gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); + win_z_num =win_task->win_z_num; + win_z_buf_ptr =gr.win_z_buf(U8 *)+ + ((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); win_z_buf_line_dec=whole_I64s; if (leading_pixels) win_z_buf_line_dec++; @@ -458,7 +469,8 @@ here1a: win_z_buf_ptr=NULL; else { win_z_num=win_task->win_z_num; - win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); + win_z_buf_ptr=gr.win_z_buf(U8 *)+ + ((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); win_z_buf_line_dec=whole_I64s; if (leading_pixels) win_z_buf_line_dec++; @@ -479,7 +491,8 @@ here1a: if (win_z_num>=*win_z_buf_ptr++) { if (bit_shift) *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| - (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~leading_pixel_mask; + (*dst(I64 *)^(*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift)))&~leading_pixel_mask; else *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| (*dst(I64 *)^*src(I64 *)++)&~leading_pixel_mask; @@ -491,7 +504,8 @@ here1a: if (bit_shift) for (i=0;i=*win_z_buf_ptr++) - *dst(I64 *)++^=*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift); + *dst(I64 *)++^=*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift); else { src(I64 *)++; dst(I64 *)++; @@ -507,7 +521,8 @@ here1a: if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { if (bit_shift) *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| - (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~trailing_pixel_mask; + (*dst(I64 *)^(*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift)))&~trailing_pixel_mask; else *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| (*dst(I64 *)^*src(I64 *)++)&~trailing_pixel_mask; @@ -526,21 +541,24 @@ here1a: if (leading_pixels) { if (bit_shift) *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| - (*dst(I64 *)^(*src(U64 *)++>>bit_shift|*src(I64 *)<<(64-bit_shift)))&~leading_pixel_mask; + (*dst(I64 *)^(*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift)))&~leading_pixel_mask; else *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| (*dst(I64 *)^*src(I64 *)++)&~leading_pixel_mask; } if (bit_shift) for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift); + *dst(I64 *)++^=*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift); else for (i=0;i>bit_shift|*src(I64 *)<<(64-bit_shift)))&~trailing_pixel_mask; + (*dst(I64 *)^(*src(U64 *)++>>bit_shift| + *src(I64 *)<<(64-bit_shift)))&~trailing_pixel_mask; else *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| (*dst(I64 *)^*src(I64 *)++)&~trailing_pixel_mask; @@ -588,7 +606,8 @@ U8 *GrBitMap1ToBitMap8(U8 *dst,U8 *src,I64 src_size,I64 bkcolor) return dst; } -public CDC *DCExtract(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,CTask *task=NULL) +public CDC *DCExtract(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2, + CTask *task=NULL) {//Extract new device context rect from device context. CDC *result; CTask *win_task; @@ -597,9 +616,9 @@ public CDC *DCExtract(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,CTask *task=NULL if (dc->flags & DCF_SCREEN_BITMAP) { win_task=dc->win_task; x1+=win_task->pix_left+win_task->scroll_x; - y1+=win_task->pix_top+win_task->scroll_y; + y1+=win_task->pix_top +win_task->scroll_y; x2+=win_task->pix_left+win_task->scroll_x; - y2+=win_task->pix_top+win_task->scroll_y; + y2+=win_task->pix_top +win_task->scroll_y; } result=DCNew(x2-x1+1,y2-y1+1,task); DCFill(result); @@ -613,7 +632,7 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) {//2D. Clipping but not transformation. U8 reg *src,reg *dst,*font_ptr; I64 i,m,leading_pixels,trailing_pixels,leading_pixel_mask,trailing_pixel_mask, - j,k1,kk1,w1,h1,w2,h2,reg bit_shift,dist,reg color_mask; + j,k1,kk1,w1,h1,w2,h2,reg bit_shift,reg color_mask; CColorROPU32 color,c; CTask *win_task; @@ -638,13 +657,8 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) x+=win_task->pix_left; y+=win_task->pix_top; } - if (dc->flags & DCF_LOCATE_NEAREST) {//TODO:Untested - dist=DistSqrI64(x+w2>>1,y+h2>>1,dc->cur_x,dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (dc->flags & DCF_LOCATE_NEAREST) + dc->dist=DistSqrI64(x+w2>>1,y+h2>>1,dc->cur_x,dc->cur_y); if (dc->flags & DCF_SCREEN_BITMAP) { if (x+w1<0) w1=-x; if (x+w2>win_task->pix_right+1) @@ -660,9 +674,9 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) h2=dc->height-y; if (w1flags & DCF_RECORD_EXTENTS) { - if (x+w1min_x) dc->min_x=x+w1; + if (x+w1 min_x) dc->min_x=x+w1; if (x+w2-1>dc->max_x) dc->max_x=x+w2-1; - if (y+h1min_y) dc->min_y=y+h1; + if (y+h1 min_y) dc->min_y=y+h1; if (y+h2-1>dc->max_y) dc->max_y=y+h2-1; } if (dc->flags & DCF_DONT_DRAW) @@ -709,7 +723,8 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_MONO: for (j=h2-h1;j;j--) { m=gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + (color_mask&m|*dst(I64 *)&~m)&~leading_pixel_mask; src++; dst+=dc->width_internal; } @@ -717,7 +732,9 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_XOR: if (color_mask) { for (j=h2-h1;j;j--) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + (*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])& + ~leading_pixel_mask; src++; dst+=dc->width_internal; } @@ -736,19 +753,21 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) case ROPB_MONO: for (j=h2-h1;j;j--) { m=gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (color_mask&m|*dst(I64 *)&~m)&~trailing_pixel_mask; src++; dst+=dc->width_internal; } break; case ROPB_XOR: - if (color_mask) { + if (color_mask) for (j=h2-h1;j;j--) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*dst(I64 *)^gr.to_8_bits[*src(U16 *)>>bit_shift&0xFF])& + ~trailing_pixel_mask; src++; dst+=dc->width_internal; } - } break; } } @@ -764,21 +783,24 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) for (j=h1;j>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + (color_mask&m|*dst(I64 *)&~m)&~leading_pixel_mask; } src++; dst+=dc->width_internal; } break; case ROPB_XOR: - if (color_mask) { + if (color_mask) for (j=h1;j>bit_shift&0xFF])&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + (*dst(I64 *)^gr.to_8_bits + [*src(U16 *)>>bit_shift&0xFF])& + ~leading_pixel_mask; src++; dst+=dc->width_internal; } - } break; } k1+=8; @@ -795,21 +817,24 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch) for (j=h1;j>bit_shift&0xFF]; - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|(color_mask&m|*dst(I64 *)&~m)&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (color_mask&m|*dst(I64 *)&~m)&~trailing_pixel_mask; } src++; dst+=dc->width_internal; } break; case ROPB_XOR: - if (color_mask) { + if (color_mask) for (j=h1;j>bit_shift&0xFF])&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + (*dst(I64 *)^gr.to_8_bits + [*src(U16 *)>>bit_shift&0xFF])& + ~trailing_pixel_mask; src++; dst+=dc->width_internal; } - } break; } } @@ -885,8 +910,9 @@ public I64 GrVPrint(CDC *dc=gr.dc,I64 x,I64 y,U8 *fmt,...) public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) {//2D. Width Height. Clipping but not transformation. //Returns cnt of pixs changed. - I64 i,result=0,j,k1,kk1,w1,h1,w2,h2,dist, - leading_pixels,original_leading_pixels,whole_I64s,trailing_pixels,leading_pixel_mask,trailing_pixel_mask, + I64 i,result=0,j,k1,kk1,w1,h1,w2,h2, + leading_pixels,original_leading_pixels,whole_I64s, + trailing_pixels,leading_pixel_mask,trailing_pixel_mask, win_z_buf_line_inc,win_z_buf_line_dec,win_z_num,color_mask; U8 reg *dst; U16 reg *win_z_buf_ptr; @@ -916,17 +942,10 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) y+=win_task->pix_top; } if (dc->flags & DCF_LOCATE_NEAREST) {//TODO:Untested - if (dc->cur_x>=x && dc->cur_y>=y && - dc->cur_x<=x+w && dc->cur_y<=y+h) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=0; - } else { - dist=DistSqrI64(x+w>>1,y+h>>1,dc->cur_x,dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (x<=dc->cur_x<=x+w && y<=dc->cur_y<=y+h) + dc->dist=0; + else + dc->dist=DistSqrI64(x+w>>1,y+h>>1,dc->cur_x,dc->cur_y); } if (dc->flags & DCF_SCREEN_BITMAP) { if (x+w1<0) w1=-x; @@ -943,9 +962,9 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) h2=dc->height-y; if (w1flags & DCF_RECORD_EXTENTS) { - if (x+w1min_x) dc->min_x=x+w1; + if (x+w1 min_x) dc->min_x=x+w1; if (x+w2-1>dc->max_x) dc->max_x=x+w2-1; - if (y+h1min_y) dc->min_y=y+h1; + if (y+h1 min_y) dc->min_y=y+h1; if (y+h2-1>dc->max_y) dc->max_y=y+h2-1; } if (dc->flags & DCF_DONT_DRAW) @@ -992,7 +1011,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) win_z_buf_ptr=NULL; else { win_z_num=win_task->win_z_num; - win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+(w1+x)/FONT_WIDTH)*sizeof(U16); + win_z_buf_ptr=gr.win_z_buf(U8 *)+((h1+y)/FONT_HEIGHT*TEXT_COLS+ + (w1+x)/FONT_WIDTH)*sizeof(U16); win_z_buf_line_dec=whole_I64s; if (leading_pixels) win_z_buf_line_dec++; @@ -1018,7 +1038,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) dst=dc->body+kk1&~7; if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + color_mask&~leading_pixel_mask; result+=leading_pixels; } dst(I64 *)++; @@ -1029,7 +1050,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result+=8; } if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|color_mask&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + color_mask&~trailing_pixel_mask; result+=trailing_pixels; } if ((j+y)&7==7) @@ -1047,11 +1069,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) color_mask=gr.to_8_colors[color.c0.color]; dst=dc->body+kk1&~7; if (leading_pixels) - *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + color_mask&~leading_pixel_mask; for (i=0;iwidth_internal; if (RandU16dither_probability_u16) color.c0=dither_colors.c1; @@ -1069,7 +1093,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) dst=dc->body+kk1&~7; if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + *dst(I64 *)^color_mask&~leading_pixel_mask; result+=leading_pixels; } dst(I64 *)++; @@ -1080,7 +1105,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result+=8; } if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|*dst(I64 *)^color_mask&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *dst(I64 *)^color_mask&~trailing_pixel_mask; result+=trailing_pixels; } if ((j+y)&7==7) @@ -1098,11 +1124,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) color_mask=gr.to_8_colors[color.c0.color]; dst=dc->body+kk1&~7; if (leading_pixels) - *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *dst(I64 *)^color_mask&~leading_pixel_mask; for (i=0;iwidth_internal; if (RandU16dither_probability_u16) color.c0=dither_colors.c1; @@ -1127,7 +1155,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) dst=dc->body+kk1&~7; if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + color_mask&~leading_pixel_mask; result+=leading_pixels; } dst(I64 *)++; @@ -1138,7 +1167,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result+=8; } if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|color_mask&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + color_mask&~trailing_pixel_mask; result+=trailing_pixels; } if ((j+y)&7==7) @@ -1154,11 +1184,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) gr.to_8_bits[0xAA]&gr.to_8_colors[color.c1.color]; dst=dc->body+kk1&~7; if (leading_pixels) - *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + color_mask&~leading_pixel_mask; for (i=0;iwidth_internal; SwapU16(&color.c0,&color.c1); } @@ -1174,7 +1206,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) dst=dc->body+kk1&~7; if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + *dst(I64 *)^color_mask&~leading_pixel_mask; result+=leading_pixels; } dst(I64 *)++; @@ -1185,7 +1218,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result+=8; } if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|*dst(I64 *)^color_mask&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *dst(I64 *)^color_mask&~trailing_pixel_mask; result+=trailing_pixels; } if ((j+y)&7==7) @@ -1201,11 +1235,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) gr.to_8_bits[0xAA]&gr.to_8_colors[color.c1.color]; dst=dc->body+kk1&~7; if (leading_pixels) - *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *dst(I64 *)^color_mask&~leading_pixel_mask; for (i=0;iwidth_internal; SwapU16(&color.c0,&color.c1); } @@ -1225,7 +1261,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) dst=dc->body+kk1&~7; if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + color_mask&~leading_pixel_mask; result+=leading_pixels; } dst(I64 *)++; @@ -1236,7 +1273,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result+=8; } if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|color_mask&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + color_mask&~trailing_pixel_mask; result+=trailing_pixels; } if ((j+y)&7==7) @@ -1249,11 +1287,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) for (j=h2-h1;j;j--) { dst(I64 *)=dc->body+kk1&~7; if (leading_pixels) - *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask|color_mask&~leading_pixel_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + color_mask&~leading_pixel_mask; for (i=0;iwidth_internal; } result=(h2-h1)*(w2-w1); @@ -1266,7 +1306,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) dst=dc->body+kk1&~7; if (leading_pixels) { if (win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + *dst(I64 *)=*dst(I64 *)&leading_pixel_mask| + *dst(I64 *)^color_mask&~leading_pixel_mask; result+=leading_pixels; } dst(I64 *)++; @@ -1277,7 +1318,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) result+=8; } if (trailing_pixels && win_z_num>=*win_z_buf_ptr++) { - *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask|*dst(I64 *)^color_mask&~trailing_pixel_mask; + *dst(I64 *)=*dst(I64 *)&trailing_pixel_mask| + *dst(I64 *)^color_mask&~trailing_pixel_mask; result+=trailing_pixels; } if ((j+y)&7==7) @@ -1290,11 +1332,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h) for (j=h2-h1;j;j--) { dst=dc->body+kk1&~7; if (leading_pixels) - *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask|*dst(I64 *)^color_mask&~leading_pixel_mask; + *dst(I64 *)++=*dst(I64 *)&leading_pixel_mask| + *dst(I64 *)^color_mask&~leading_pixel_mask; for (i=0;iwidth_internal; } result=(h2-h1)*(w2-w1); @@ -1327,11 +1371,8 @@ I64 GrRayLenMinus(CDC *dc,I64 x,I64 y) if (dc->flags & DCF_SCREEN_BITMAP) { x3+=win_task->pix_left; y3+=win_task->pix_top; - if (x3<0 || y3<0 || - x3>win_task->pix_right || - y3>win_task->pix_bottom || - !(dc->flags&DCF_ON_TOP) && - IsPixCovered0(win_task,x3,y3)) + if (!(0<=x3<=win_task->pix_right) || !(0<=y3<=win_task->pix_bottom) || + !(dc->flags&DCF_ON_TOP) && IsPixCovered0(win_task,x3,y3)) goto gr_done; } if (x3>=dc->width || y3>=dc->height) @@ -1345,10 +1386,8 @@ I64 GrRayLenMinus(CDC *dc,I64 x,I64 y) if (dc->flags & DCF_SCREEN_BITMAP) { if (x3<0) break; x3+=win_task->pix_left; - if (x3<0 || x3>win_task->pix_right || - x3>=dc->width || - !(dc->flags&DCF_ON_TOP) && - IsPixCovered0(win_task,x3,y3)) + if (!(0<=x3<=win_task->pix_right) || x3>=dc->width || + !(dc->flags&DCF_ON_TOP) && IsPixCovered0(win_task,x3,y3)) break; } else if (!(0<=x3width)) @@ -1379,8 +1418,9 @@ gr_done: I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL) { //Returns cnt of pixs changed - I64 result=0,d,x=*x1,x2,x3,y3,dist; - Bool plot,dither,probability_dither,not_color=ToBool(dc->flags&DCF_FILL_NOT_COLOR); + I64 result=0,d,x=*x1,x2,x3,y3; + Bool plot,dither,probability_dither, + not_color=ToBool(dc->flags&DCF_FILL_NOT_COLOR); U8 *dst,*dst2; CColorROPU32 c,c2,color=dc->color,bkcolor=dc->bkcolor; I32 *db2; @@ -1400,11 +1440,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL) if (dc->flags & DCF_SCREEN_BITMAP) { x3+=win_task->pix_left; y3+=win_task->pix_top; - if (x3<0 || y3<0 || - x3>win_task->pix_right || - y3>win_task->pix_bottom || - !(dc->flags&DCF_ON_TOP) && - IsPixCovered0(win_task,x3,y3)) + if (!(0<=x3<=win_task->pix_right) || !(0<=y3<=win_task->pix_bottom) || + !(dc->flags&DCF_ON_TOP) && IsPixCovered0(win_task,x3,y3)) goto gr_done; } if (x3>=dc->width || y3>=dc->height) @@ -1432,10 +1469,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL) if (dc->flags & DCF_SCREEN_BITMAP) { if (x3<0) break; x3+=win_task->pix_left; - if (x3<0 || x3>win_task->pix_right || - x3>=dc->width || - !(dc->flags&DCF_ON_TOP) && - IsPixCovered0(win_task,x3,y3)) + if (!(0<=x3<=win_task->pix_right) || x3>=dc->width || + !(dc->flags&DCF_ON_TOP) && IsPixCovered0(win_task,x3,y3)) break; } else { if (!(0<=x3width)) @@ -1459,13 +1494,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL) if ((not_color && c!=dc->color2 || !not_color && c==dc->color2) && plot) { - if (dc->flags & DCF_LOCATE_NEAREST) { - dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (dc->flags & DCF_LOCATE_NEAREST) + dc->dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y); if (dc->flags & DCF_RECORD_EXTENTS) { if (x3min_x) dc->min_x=x3; if (x3>dc->max_x) dc->max_x=x3; @@ -1513,10 +1543,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL) if (dc->flags & DCF_SCREEN_BITMAP) { if (x3<0) break; x3+=win_task->pix_left; - if (x3<0 || x3>win_task->pix_right || - x3>=dc->width || - !(dc->flags&DCF_ON_TOP) && - IsPixCovered0(win_task,x3,y3)) + if (!(0<=x3<=win_task->pix_right) || x3>=dc->width || + !(dc->flags&DCF_ON_TOP) && IsPixCovered0(win_task,x3,y3)) break; } else if (!(0<=x3width)) @@ -1538,13 +1566,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL) if ((not_color && c!=dc->color2 || !not_color && c==dc->color2) && plot) { - if (dc->flags & DCF_LOCATE_NEAREST) { - dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (dc->flags & DCF_LOCATE_NEAREST) + dc->dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y); if (dc->flags & DCF_RECORD_EXTENTS) { if (x3min_x) dc->min_x=x3; if (x3>dc->max_x) dc->max_x=x3; @@ -1589,8 +1612,8 @@ gr_done: public I64 GrHLine(CDC *dc=gr.dc,I64 x1,I64 x2,I64 y,I64 z1=0,I64 z2=0) {//3D. No transformation or pen width. //Returns cnt of pixs changed -//Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. - I64 dx,dz,z,result=0,i,j,d,dist; + //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. + I64 dist,dx,dz,z,result=0,i,j,d; U8 *dst; CColorROPU32 c,c2,color=dc->color,bkcolor=dc->bkcolor,dither_colors; I32 *db; @@ -1641,9 +1664,7 @@ public I64 GrHLine(CDC *dc=gr.dc,I64 x1,I64 x2,I64 y,I64 z1=0,I64 z2=0) x2=win_task->pix_right; } y+=win_task->pix_top; - if (y>win_task->pix_bottom || - y<0 || - x2<0) + if (!(0<=y<=win_task->pix_bottom) || x2<0) goto gr_done; } if (x1>=dc->width || y>=dc->height) @@ -1671,18 +1692,14 @@ public I64 GrHLine(CDC *dc=gr.dc,I64 x1,I64 x2,I64 y,I64 z1=0,I64 z2=0) else dist=SqrI64(dc->cur_x-x2); dist+=SqrI64(y-dc->cur_y); - if (dist<=dc->nearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } + dc->dist=dist; } if (dc->flags & DCF_DONT_DRAW) goto gr_done; if (!(dc->flags & DCF_SCREEN_BITMAP) || win_task->next_task==sys_winmgr_task || - dc->flags&DCF_ON_TOP || - !IsPixCovered0(win_task,x1,y)) + dc->flags&DCF_ON_TOP || !IsPixCovered0(win_task,x1,y)) char_clear=TRUE; else char_clear=FALSE; @@ -1750,8 +1767,7 @@ public I64 GrHLine(CDC *dc=gr.dc,I64 x1,I64 x2,I64 y,I64 z1=0,I64 z2=0) if (!(x1&(FONT_WIDTH-1)) && x1<=x2) { if (!(dc->flags & DCF_SCREEN_BITMAP)|| win_task->next_task==sys_winmgr_task || - dc->flags&DCF_ON_TOP || - !IsPixCovered0(win_task,x1,y)) + dc->flags&DCF_ON_TOP || !IsPixCovered0(win_task,x1,y)) char_clear=TRUE; else char_clear=FALSE; diff --git a/Adam/Gr/GrComposites.CPP b/Adam/Gr/GrComposites.CPP index fb9e21c..b5ef102 100644 --- a/Adam/Gr/GrComposites.CPP +++ b/Adam/Gr/GrComposites.CPP @@ -12,7 +12,7 @@ public I64 GrFillPoly3(CDC *dc=gr.dc,I64 n,CD3I32 *poly) x=poly[j].x; y=poly[j].y; z=poly[j].z; if (dc->flags&DCF_TRANSFORMATION) (*dc->transform)(dc,&x,&y,&z); - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); tri[0].x=x; tri[0].y=y; tri[0].z=z; } @@ -21,7 +21,7 @@ public I64 GrFillPoly3(CDC *dc=gr.dc,I64 n,CD3I32 *poly) x=poly[j].x; y=poly[j].y; z=poly[j].z; if (dc->flags&DCF_TRANSFORMATION) (*dc->transform)(dc,&x,&y,&z); - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); } tri[1].x=x; tri[1].y=y; tri[1].z=z; @@ -29,7 +29,7 @@ public I64 GrFillPoly3(CDC *dc=gr.dc,I64 n,CD3I32 *poly) x=poly[j].x; y=poly[j].y; z=poly[j].z; if (dc->flags&DCF_TRANSFORMATION) (*dc->transform)(dc,&x,&y,&z); - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); tri[2].x=x; tri[2].y=y; tri[2].z=z; result+=GrFillTri0(dc,&tri[0],&tri[1],&tri[2]); @@ -90,7 +90,8 @@ public I64 GrRect3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,I64 w,I64 h) return GrFillPoly3(dc,4,poly); } -public U0 GrBorder(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,I64 step=1,I64 start=0) +public U0 GrBorder(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2, + I64 step=1,I64 start=0) {//2D. Transformation with pen width. //Can be used with ROPF_DITHER+WHITE<<16+BLACK for dotted rect. GrLine3(dc,x1,y1,0,x2,y1,0,step,start); @@ -99,7 +100,8 @@ public U0 GrBorder(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,I64 step=1,I64 star GrLine3(dc,x1,y2,0,x1,y1,0,step,start); } -public Bool GrArrow3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,F64 w=2.75,I64 step=1,I64 start=0) +public Bool GrArrow3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1, + I64 x2,I64 y2,I64 z2,F64 w=2.75,I64 step=1,I64 start=0) {//3D. Transformation with pen width. I64 _x1,_y1,_z1,_x2,_y2,_z2,dx,dy; F64 d; @@ -112,16 +114,18 @@ public Bool GrArrow3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,F64 } if (dc->flags & DCF_SYMMETRY) { _x1=x1; _y1=y1; _z1=z1; - GrReflect(dc,&_x1,&_y1,&_z1); + DCReflect(dc,&_x1,&_y1,&_z1); _x2=x2; _y2=y2; _z2=z2; - GrReflect(dc,&_x2,&_y2,&_z2); + DCReflect(dc,&_x2,&_y2,&_z2); dc->flags&=~DCF_SYMMETRY; result=Line(dc,_x1,_y1,_z1,_x2,_y2,_z2,&GrPlot3,step,start); dx=_x2-_x1; dy=_y2-_y1; if (d=Sqrt(dx*dx+dy*dy)) { d=w*dc->pen_width/d; - result|=Line(dc,_x2-dx*d+dy*d+0.5,_y2-dy*d-dx*d+0.5,_z2,_x2,_y2,_z2,&GrPlot3,step); - result|=Line(dc,_x2-dx*d-dy*d+0.5,_y2-dy*d+dx*d+0.5,_z2,_x2,_y2,_z2,&GrPlot3,step); + result|=Line(dc,_x2-dx*d+dy*d+0.5,_y2-dy*d-dx*d+0.5,_z2, + _x2,_y2,_z2,&GrPlot3,step); + result|=Line(dc,_x2-dx*d-dy*d+0.5,_y2-dy*d+dx*d+0.5,_z2, + _x2,_y2,_z2,&GrPlot3,step); } was_symmetry=TRUE; if (dc->flags&DCF_JUST_MIRROR) @@ -131,8 +135,10 @@ public Bool GrArrow3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,F64 dx=x2-x1; dy=y2-y1; if (d=Sqrt(dx*dx+dy*dy)) { d=w*dc->pen_width/d; - result|=Line(dc,x2-dx*d+dy*d+0.5,y2-dy*d-dx*d+0.5,z2,x2,y2,z2,&GrPlot3,step); - result|=Line(dc,x2-dx*d-dy*d+0.5,y2-dy*d+dx*d+0.5,z2,x2,y2,z2,&GrPlot3,step); + result|=Line(dc,x2-dx*d+dy*d+0.5,y2-dy*d-dx*d+0.5,z2, + x2,y2,z2,&GrPlot3,step); + result|=Line(dc,x2-dx*d-dy*d+0.5,y2-dy*d+dx*d+0.5,z2, + x2,y2,z2,&GrPlot3,step); } gr_done: if (was_transform) @@ -174,7 +180,8 @@ public Bool GrTextBox3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,U8 *s,I64 border=2) #define MAX_DIAMOND_SLOPE 2.75 -public Bool GrTextDiamond3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,U8 *_s,I64 border=2) +public Bool GrTextDiamond3(CDC *dc=gr.dc, + I64 x1,I64 y1,I64 z1,U8 *_s,I64 border=2) {//3D. Transformation. DCF_SYMMETRY is silly. Bool first=TRUE; U8 ch,*ptr,*ptr_end,*st,*s; @@ -239,7 +246,8 @@ public Bool GrTextDiamond3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,U8 *_s,I64 border= } #help_index "Graphics/Mesh" -public I64 Gr3Mesh(CDC *dc=gr.dc,I64 vertex_cnt,CD3I32 *p,I64 tri_cnt,CMeshTri *tri) +public I64 Gr3Mesh(CDC *dc=gr.dc,I64 vertex_cnt,CD3I32 *p, + I64 tri_cnt,CMeshTri *tri) {//Returns cnt of pixs changed. CColorROPU32 old_color=dc->color; I64 i,x,y,z,result=0; @@ -261,20 +269,23 @@ public I64 Gr3Mesh(CDC *dc=gr.dc,I64 vertex_cnt,CD3I32 *p,I64 tri_cnt,CMeshTri * p_sym=p; for (i=0;ix; y=p_sym->y; z=p_sym->z; - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); dst->x=x; dst->y=y; dst->z=z; } p_sym=pt_sym; for (i=0;ilighting)(dc,&p_sym[tri_sym->nums[0]],&p_sym[tri_sym->nums[2]],&p_sym[tri_sym->nums[1]],tri_sym->color); - result+=GrFillTri0(dc,&p_sym[tri_sym->nums[0]],&p_sym[tri_sym->nums[2]],&p_sym[tri_sym->nums[1]]); + (*dc->lighting)(dc,&p_sym[tri_sym->nums[0]],&p_sym[tri_sym->nums[2]], + &p_sym[tri_sym->nums[1]],tri_sym->color); + result+=GrFillTri0(dc,&p_sym[tri_sym->nums[0]],&p_sym[tri_sym->nums[2]], + &p_sym[tri_sym->nums[1]]); } Free(pt_sym); if (dc->flags&DCF_JUST_MIRROR) goto mesh_done; } for (i=0;ilighting)(dc,&p[tri->nums[0]],&p[tri->nums[1]],&p[tri->nums[2]],tri->color); + (*dc->lighting)(dc,&p[tri->nums[0]],&p[tri->nums[1]], + &p[tri->nums[2]],tri->color); result+=GrFillTri0(dc,&p[tri->nums[0]],&p[tri->nums[1]],&p[tri->nums[2]]); } mesh_done: @@ -285,9 +296,9 @@ mesh_done: #help_index "Graphics/Misc;Input Pointer/Displayed Image" public U0 DrawStdInputPtr(CDC *dc,I64 x,I64 y) -{//This is a callback. +{//This is a callback. See $LK,"::/Demo/Graphics/Grid.CPP.Z"$. //Called by $LK,"DrawInputPtr",A="MN:DrawInputPtr"$() which is -//called by $LK,"WinFinalUpdate",A="MN:WinFinalUpdate"$(). + //called by $LK,"WinFinalUpdate",A="MN:WinFinalUpdate"$(). dc->pen_width=1; dc->flags&=~(DCF_TRANSFORMATION|DCF_SYMMETRY); GrArrow3(dc,x+8,y+8,0,x,y,0); @@ -296,7 +307,7 @@ public U0 DrawStdInputPtr(CDC *dc,I64 x,I64 y) gr.fp_draw_input_ptr=&DrawStdInputPtr; public U0 DrawWaitInputPtr(CDC *dc,I64 x,I64 y) -{//This is a callback. +{//This is a callback. See $LK,"::/Demo/Graphics/Grid.CPP.Z"$. I64 old_pen_width=dc->pen_width; CColorROPU32 old_color=dc->color; dc->pen_width=3; diff --git a/Adam/Gr/GrDC.CPP b/Adam/Gr/GrDC.CPP index 16f17b7..888d35d 100644 --- a/Adam/Gr/GrDC.CPP +++ b/Adam/Gr/GrDC.CPP @@ -3,7 +3,7 @@ #define GR_SCALE (1<<32) -public U0 GrRot(I64 r[4][4],I64 *_x,I64 *_y,I64 *_z) +public U0 Mat4x4MulXYZ(I64 r[4][4],I64 *_x,I64 *_y,I64 *_z) {//Rotate 3D point using 4x4 matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. I64 x1,y1,z1,xx=*_x,yy=*_y,zz=*_z; x1=(r[0][0]*xx+r[0][1]*yy+r[0][2]*zz+r[0][3])>>32; @@ -12,26 +12,16 @@ public U0 GrRot(I64 r[4][4],I64 *_x,I64 *_y,I64 *_z) *_x=x1;*_y=y1;*_z=z1; } -public U0 GrTransform(CDC *dc,I64 *_x,I64 *_y,I64 *_z) -{//This is a callback. +public U0 DCTransform(CDC *dc,I64 *_x,I64 *_y,I64 *_z) +{//This is the dft dc->transform() callback. //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. - GrRot(dc->r,_x,_y,_z); + Mat4x4MulXYZ(dc->r,_x,_y,_z); *_x+=dc->x; *_y+=dc->y; *_z+=dc->z; } -public I64 *GrIdentNew(CTask *mem_task=NULL) -{//MAlloc an identity matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. - I64 *r=CAlloc(sizeof(I64)*16,mem_task); - r[0] .i32[1]=1; - r[5] .i32[1]=1; - r[10].i32[1]=1; - r[15].i32[1]=1; - return r; -} - -public I64 *GrIdentEqu(I64 r[4][4]) +public I64 *Mat4x4IdentEqu(I64 r[4][4]) {//Set matrix to identity. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. MemSet(r,0,sizeof(I64)*16); r[0][0].i32[1]=1; @@ -41,26 +31,32 @@ public I64 *GrIdentEqu(I64 r[4][4]) return r; } -public I64 GrRotNormSqr65536(I64 r[4][4]) +public I64 *Mat4x4IdentNew(CTask *mem_task=NULL) +{//MAlloc an identity matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. + return Mat4x4IdentEqu(MAlloc(sizeof(I64)*16,mem_task)); +} + +public I64 Mat4x4NormSqr65536(I64 r[4][4]) {//Norm Squared of r. //(1.0/Sqrt(3))*65536=37837.22 return SqrI64((r[0][0]*37838+r[0][1]*37838+r[0][2]*37838)>>32)+ - SqrI64((r[1][0]*37837+r[1][1]*37837+r[1][2]*37837)>>32)+ - SqrI64((r[2][0]*37837+r[2][1]*37837+r[2][2]*37837)>>32); + SqrI64((r[1][0]*37837+r[1][1]*37837+r[1][2]*37837)>>32)+ + SqrI64((r[2][0]*37837+r[2][1]*37837+r[2][2]*37837)>>32); } -public U0 GrSetRotMat(CDC *dc=NULL,I64 r[4][4]) -{//Set device context's rot matrix. Will be $LK,"Free",A="MN:Free"$d() in $LK,"DCDel",A="MN:DCDel"$(). Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. +public U0 DCMat4x4Set(CDC *dc=NULL,I64 r[4][4]) +{//Set device context's rot matrix. Will be $LK,"Free",A="MN:Free"$d() in $LK,"DCDel",A="MN:DCDel"$().Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. //The main purpose is to set matrix norm for pen width scaling. -//NULL as dc means gr.dc + //NULL as dc means gr.dc if (!dc) dc=gr.dc; dc->r=r; - dc->r_norm=Sqrt(GrRotNormSqr65536(r))*65536; //scaled 32 bits + dc->r_norm=Sqrt(Mat4x4NormSqr65536(r))*65536; //scaled 32 bits } #help_index "Graphics/Mesh" -public U0 GrLighting(CDC *dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p3,CColorROPU32 color) -{//This is a callback. +public U0 DCLighting(CDC *dc, + CD3I32 *p1,CD3I32 *p2,CD3I32 *p3,CColorROPU32 color) +{//This is the dft dc->lighting() callback. CD3I32 v1,v2; I64 i,vn_x,vn_y,vn_z; F64 d; @@ -73,8 +69,8 @@ public U0 GrLighting(CDC *dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p3,CColorROPU32 color v2.y=p3->y-p2->y; v2.z=p3->z-p2->z; -//V1 and V2 are vects along two sides -//of the tri joined at p2. + //V1 and V2 are vects along two sides + //of the tri joined at p2. vn_x=v1.y*v2.z-v1.z*v2.y; vn_y=v1.z*v2.x-v1.x*v2.z; @@ -85,21 +81,21 @@ public U0 GrLighting(CDC *dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p3,CColorROPU32 color vn_y*=d; vn_z*=d; //Vn is the cross product of V1 and V3 -//which means it is perpendicular. It -//is the normal vect to the surface. -//It has been scaled to length 65536. + //which means it is perpendicular. It + //is the normal vect to the surface. + //It has been scaled to length 65536. -//Light source has been scaled to length 65536. + //Light source has been scaled to length 65536. i=(vn_x*dc->ls.x+vn_y*dc->ls.y+vn_z*dc->ls.z)>>16; //The dot product of the light source -//vect and the surface normal -//gives an illumination number. -//65536*65536>>16=65536 + //vect and the surface normal + //gives an illumination number. + //65536*65536>>16=65536 -//TempleOS will generate a random U16 -//and compare to dither_probability_u16 and -//will pick from two colors. -//Probability dithering does not work with pen_width>1 at this time. + //TempleOS will generate a random U16 + //and compare to dither_probability_u16 and + //will pick from two colors. + //Probability dithering does not work with pen_width>1 at this time. if (color.c0.rop&ROPBF_TWO_SIDED) { color.c0.rop&=~ROPBF_TWO_SIDED; i=AbsI64(i)<<1; @@ -148,18 +144,19 @@ public U0 DCRst(CDC *dc) dc->x=0; dc->y=0; dc->z=0; - dc->transform=&GrTransform; - dc->lighting =&GrLighting; - GrIdentEqu(dc->r); + dc->transform=&DCTransform; + dc->lighting =&DCLighting; + Mat4x4IdentEqu(dc->r); dc->r_norm=GR_SCALE; dc->flags&=~(DCF_SYMMETRY|DCF_TRANSFORMATION|DCF_JUST_MIRROR); + MemCpy(dc->palette,gr_palette_std,sizeof(CBGR48)*NUM_COLORS); } public U0 DCExtentsInit(CDC *dc=NULL) {//Init markers for extent of next newly drawn graphics. //NULL means gr.dc -//See $LK,"::/Demo/Graphics/Extents.CPP"$ -//You should clear the record flag yourself + //See $LK,"::/Demo/Graphics/Extents.CPP"$ + //You should clear the record flag yourself if (!dc) dc=gr.dc; dc->flags|=DCF_RECORD_EXTENTS; dc->min_x=MAX_I64; @@ -189,7 +186,7 @@ public CDC *DCAlias(CDC *dc=NULL,CTask *task=NULL) public CDC *DCNew(I64 width,I64 height,CTask *task=NULL,Bool null_bitmap=FALSE) {//Create new width x height device context. //Internally only allows widths which are divisible by 8. -//Don't forget these $MA-X+PU,"sizeof(CDC)",LM="Find(\"sizeof(CDC)\",\"/*\");View;"$. + //Don't forget these $MA-X+PU,"sizeof(CDC)",LM="Find(\"sizeof(CDC)\",\"/*\");View;"$. CDC *result; if (!task) task=Fs; result=CAlloc(sizeof(CDC),task); @@ -235,7 +232,7 @@ public U0 DCDepthBufRst(CDC *dc) MemSetU32(dc->depth_buf,MAX_I32,dc->width_internal*dc->height); } -public U0 DCAllocDepthBuf(CDC *dc) +public U0 DCDepthBufAlloc(CDC *dc) {//Alloc a 32-bit depth buffer for device context. Free(dc->depth_buf); dc->depth_buf=MAlloc(dc->width_internal*dc->height*sizeof(I32),dc->mem_task); @@ -249,7 +246,7 @@ public CDC *DCCopy(CDC *dc,CTask *task=NULL) if (dc->dc_signature!=DCS_SIGNATURE_VAL) throw('Graphics'); result=MAllocIdentical(dc,task); - GrSetRotMat(result,MAllocIdentical(dc->r,task)); + DCMat4x4Set(result,Mat4x4New(dc->r,task)); result->mem_task=task; result->body=MAllocIdentical(dc->body,task); result->depth_buf=MAllocIdentical(dc->depth_buf,task); @@ -285,37 +282,55 @@ public I64 DCColorChg(CDC *dc,I64 src_color,I64 dst_color=TRANSPARENT) return result; } -public U8 *DCSave(CDC *dc,I64 *_size=NULL,Bool compressed=TRUE) +public U8 *DCSave(CDC *dc,I64 *_size=NULL,I64 dcsf_flags=DCSF_COMPRESSED) {//Stores device context to mem, perhaps, with compression. U8 *result,*ptr,*body; - Bool old_preempt; - CArcCompress *ac; - I64 i=dc->width_internal*dc->height,old_flags=dc->flags; + CArcCompress *arc; + I64 body_size=dc->width_internal*dc->height,total_size,flags; + CBGR48 palette[NUM_COLORS]; - if (compressed) { - ac=CompressBuf(dc->body,i); - i=ac->compressed_size; - body=ac; + if (dcsf_flags&DCSF_COMPRESSED) { + arc=CompressBuf(dc->body,body_size); + body_size=arc->compressed_size; + body=arc; } else { - ac=NULL; + arc=NULL; body=dc->body; } - ptr=result=MAlloc(offset(CDC.end)-offset(CDC.start)+i); + total_size=offset(CDC.end)-offset(CDC.start)+body_size; + if (dcsf_flags&DCSF_COMPRESSED) + flags=DCF_COMPRESSED; + else + flags=0; - old_preempt=Preempt(OFF); //in case it is a screen bitmap - if (compressed) dc->flags|=DCF_COMPRESSED; - dc->flags&=DCF_COMPRESSED; - MemCpy(result,&dc->start,offset(CDC.end)-offset(CDC.start)); - dc->flags=old_flags; - Preempt(old_preempt); + if (dcsf_flags&DCSF_PALETTE_GET) + GrPaletteGet(palette); + else + MemCpy(palette,&dc->palette,NUM_COLORS*sizeof(CBGR48)); + if (MemCmp(palette,gr_palette_std,NUM_COLORS*sizeof(CBGR48))) { + flags|=DCF_PALETTE; + total_size+=NUM_COLORS*sizeof(CBGR48); + } + ptr=result=MAlloc(total_size); + +#assert !offset(CDC.start) + MemCpy(ptr,&dc->start,offset(CDC.end)-offset(CDC.start)); + ptr(CDC *)->flags=flags; ptr+=offset(CDC.end)-offset(CDC.start); - MemCpy(ptr,body,i); - ptr+=i; - Free(ac); - if (_size) *_size=ptr-result; +#assert offset(CDC.end)==offset(CDC.palette) + if (flags&DCF_PALETTE) { + MemCpy(ptr,palette,NUM_COLORS*sizeof(CBGR48)); + ptr+=NUM_COLORS*sizeof(CBGR48); + } + + MemCpy(ptr,body,body_size); + ptr+=body_size; + + Free(arc); + if (_size) *_size=total_size; return result; } @@ -323,28 +338,34 @@ public CDC *DCLoad(U8 *src,I64 *_size=NULL,CTask *task=NULL) {//Loads device context from mem. CDC *result; U8 *ptr=src; - CArcCompress *ac; + CArcCompress *arc; I64 body_size; if (!task) task=Fs; result=CAlloc(sizeof(CDC),task); result->win_task=task; result->mem_task=task; - MemCpy(&result->start,src, - offset(CDC.end)-offset(CDC.start)); + MemCpy(&result->start,ptr,offset(CDC.end)-offset(CDC.start)); ptr+=offset(CDC.end)-offset(CDC.start); + + if (result->flags&DCF_PALETTE) { + MemCpy(&result->palette,ptr,NUM_COLORS*sizeof(CBGR48)); + ptr+=NUM_COLORS*sizeof(CBGR48); + } else + MemCpy(&result->palette,gr_palette_std,NUM_COLORS*sizeof(CBGR48)); + body_size=result->width_internal*result->height; if (result->flags&DCF_COMPRESSED) { result->flags&=~DCF_COMPRESSED; - ac=ptr; - result->body=ExpandBuf(ac,task); - ptr+=ac->compressed_size; + arc=ptr; + result->body=ExpandBuf(arc,task); + ptr+=arc->compressed_size; } else { result->body=MAlloc(body_size,task); MemCpy(result->body,ptr,body_size); ptr+=body_size; } result->pen_width=1; - result->r=GrIdentNew(task); + result->r=Mat4x4IdentNew(task); result->r_norm.u32[1]=1; result->dc_signature=DCS_SIGNATURE_VAL; if (_size) *_size=ptr-src; @@ -354,11 +375,11 @@ public CDC *DCLoad(U8 *src,I64 *_size=NULL,CTask *task=NULL) #help_index "Graphics/GRA Files" #help_file "::/Doc/GRAFiles" #help_index "Graphics/Device Contexts;Graphics/GRA Files" -public I64 GRAWrite(U8 *filename,CDC *dc) +public I64 GRAWrite(U8 *filename,CDC *dc,I64 dcsf_flags=DCSF_COMPRESSED) {//TempleOS GRA File. I64 size; U8 *st=DftExt(filename,"GRA.Z"), - *src=DCSave(dc,&size); + *src=DCSave(dc,&size,dcsf_flags); FileWrite(st,src,size); Free(st); Free(src); @@ -369,7 +390,7 @@ public CDC *GRARead(U8 *filename,CTask *task=NULL) {//TempleOS GRA File. CDC *dc=NULL; U8 *st=DftExt(filename,"GRA.Z"), - *src=FileRead(st); + *src=FileRead(st); if (src) dc=DCLoad(src,,task); Free(src); @@ -377,9 +398,9 @@ public CDC *GRARead(U8 *filename,CTask *task=NULL) return dc; } -#help_index "Graphics/Sprite;Graphics/GRA Files;DolDoc/Output" +#help_index "Graphics/Sprite;Graphics/GRA Files;DolDoc/Output;StdOut/DolDoc" public U0 DocGRA(CDoc *doc=NULL,U8 *filename) -{//Put a GRA file into a document as a sprite. +{//Put a GRA file into a document as asprite. CDC *dc=GRARead(filename); CSprite *elems=DC2Sprite(dc); DocSprite(doc,elems); @@ -388,7 +409,7 @@ public U0 DocGRA(CDoc *doc=NULL,U8 *filename) } #help_index "Graphics/Device Contexts;Graphics/Screen" -public CDC *DCCaptureScreen(Bool include_zoom=TRUE,CTask *task=NULL) +public CDC *DCScreenCapture(Bool include_zoom=TRUE,CTask *task=NULL) {//Capture screen to a device context. CDC *dc; U8 *dst; @@ -399,19 +420,20 @@ public CDC *DCCaptureScreen(Bool include_zoom=TRUE,CTask *task=NULL) dc=DCCopy(gr.dc1,task); dc->flags&=~DCF_SCREEN_BITMAP; dst=MAlloc(dc->width_internal*dc->height,task); - //Pick background color that never occurs. COLOR_INVALID - GrBitMap4ToBitMap8(dst,dc->body,(dc->width_internal*dc->height)>>1,COLOR_INVALID); +//Pick background color that never occurs. COLOR_INVALID + GrBitMap4ToBitMap8(dst,dc->body, + (dc->width_internal*dc->height)>>1,COLOR_INVALID); Free(dc->body); dc->body=dst; return dc; } #help_index "Graphics/GRA Files;Graphics/Screen" -public I64 GRACaptureScreen(U8 *filename,Bool include_zoom=TRUE) +public I64 GRAScreenCapture(U8 *filename,Bool include_zoom=TRUE) {//Capture screen to a TempleOS GRA File. I64 size; - CDC *dc=DCCaptureScreen(include_zoom); - size=GRAWrite(filename,dc); + CDC *dc=DCScreenCapture(include_zoom); + size=GRAWrite(filename,dc,DCSF_COMPRESSED|DCSF_PALETTE_GET); DCDel(dc); return size; } diff --git a/Adam/Gr/GrEnd.CPP b/Adam/Gr/GrEnd.CPP index 9e18434..1daa95e 100644 --- a/Adam/Gr/GrEnd.CPP +++ b/Adam/Gr/GrEnd.CPP @@ -11,7 +11,7 @@ CtrlAltLetCBSet('Z',&CtrlAltZ,"Sys/Zoom In or Out"); U0 Screen2Clipboard(I64) { - CDC *dc=DCCaptureScreen; + CDC *dc=DCScreenCapture; U8 *elems=DC2Sprite(dc); Bool unlock_doc=DocLock(sys_clipboard_doc); ClipboardDel; diff --git a/Adam/Gr/GrGlbls.CPP b/Adam/Gr/GrGlbls.CPP index 73ef36c..307820e 100644 --- a/Adam/Gr/GrGlbls.CPP +++ b/Adam/Gr/GrGlbls.CPP @@ -12,7 +12,7 @@ public class CGrGlbls U32 *text_base; //See $LK,"TextBase Layer",A="HI:TextBase Layer"$. (Similar to 0xB8000 but 32 bits) U16 *win_z_buf; -#define SPHT_ELEM_CODE 1 + #define SPHT_ELEM_CODE 1 CHashTable *sprite_hash; U16 *win_uncovered_bitmap; @@ -25,13 +25,13 @@ public class CGrGlbls U0 (*fp_draw_grab_input_ptr)(CDC *dc,I64 x,I64 y,Bool closed); U8 *empty_sprite; //Gets assigned $LK,"gr.empty_sprite",A="FF:::/Adam/WallPaper.CPP,empty_sprite"$ -#define GR_NUM_PEN_BRUSHES 64 + #define GR_NUM_PEN_BRUSHES 64 CDC *pen_brushes[GR_NUM_PEN_BRUSHES], *collision_pen_brushes[GR_NUM_PEN_BRUSHES], *even_pen_brushes[GR_NUM_PEN_BRUSHES], *odd_pen_brushes[GR_NUM_PEN_BRUSHES]; -#define GR_MAX_SCREEN_ZOOM 8 + #define GR_MAX_SCREEN_ZOOM 8 U8 *screen_zoom_tables[GR_MAX_SCREEN_ZOOM+1]; I64 screen_zoom,sx,sy; diff --git a/Adam/Gr/GrInit.CPP b/Adam/Gr/GrInit.CPP index 995d001..0fb2762 100644 --- a/Adam/Gr/GrInit.CPP +++ b/Adam/Gr/GrInit.CPP @@ -62,7 +62,7 @@ U0 GrSetUpTables() OutU8(VGAP_INDEX,VGAR_MAP_MASK); OutU8(VGAP_DATA,0x0F); //Virtual Box crashes on the following for some reason. -// MemSet(VGAM_GRAPHICS,0,GR_HEIGHT*GR_WIDTH>>3); + // MemSet(VGAM_GRAPHICS,0,GR_HEIGHT*GR_WIDTH>>3); MemSet(gr.screen_image->body,0,GR_WIDTH*GR_HEIGHT>>1); } for (i=1;i<=GR_MAX_SCREEN_ZOOM;i++) { @@ -128,17 +128,17 @@ U0 WinZBufFill(CTask *task) if (w=r-l+1) for (y=t;y<=b;y++) MemSetU16(gr.win_z_buf(U8 *)+(y*TEXT_COLS+l)*sizeof(U16), - task->win_z_num,w); + task->win_z_num,w); } public U0 WinZBufUpdate() -{//Might have to call this if you are doing graphics outside winmgr callback routines. +{//Might have to call if doing graphics outside winmgr callback routines. //Call it if, for example, when a pop-up window closes and you need to refresh -//before graphics. + //before graphics. I64 i,z=1; U16 *ptr; CTask *task,*task1; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (gr.win_z_buf) { LBtr(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); task1=task=sys_winmgr_task; @@ -167,9 +167,9 @@ U0 GrInit2() HashDefineLstAdd("ST_SPRITE_ELEM_CODES",SPHT_ELEM_CODE,gr.sprite_hash); gr.screen_zoom=1; - SetStdPalette; - fp_set_std_palette=&SetStdPalette; - SetVGAPalette4Indices; + PaletteSetStd; + fp_set_std_palette=&PaletteSetStd; + GrPaletteIndicesSet; gr.to_8_bits =MAlloc(256*sizeof(I64)); gr.to_8_colors=MAlloc(256*sizeof(I64)); diff --git a/Adam/Gr/GrMath.CPP b/Adam/Gr/GrMath.CPP index 70e72f0..4f500b8 100644 --- a/Adam/Gr/GrMath.CPP +++ b/Adam/Gr/GrMath.CPP @@ -13,7 +13,7 @@ public Bool Line(U8 *aux_data, {//Step through line segment calling callback. //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. I64 i,j,d,dx=x2-x1,dy=y2-y1,dz=z2-z1,_x,_y,_z, - adx=AbsI64(dx),ady=AbsI64(dy),adz=AbsI64(dz); + adx=AbsI64(dx),ady=AbsI64(dy),adz=AbsI64(dz); Bool first=TRUE; if (adx>=ady) { if (adx>=adz) { @@ -58,7 +58,7 @@ public Bool Line(U8 *aux_data, } x1<<=32; y1<<=32; z1<<=32; for (j=0;j one. - d/=GR_SCALE; - r[i+4*j]+=d; - } + sum=0; + for (k=0;k<4;k++) + sum+=ToF64(m1[k+4*j])*ToF64(m2[i+4*k]); + dst[i+4*j]=sum/GR_SCALE; } } - return r; + return dst; } -public I64 *GrRotXEqu(I64 *m1,F64 è) +public I64 *Mat4x4MulMat4x4New(I64 *m1,I64 *m2,CTask *mem_task=NULL) +{//Multiply 4x4 matrices. Return MAlloced matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. +//Conceptually, the transform m1 is applied after m2 + return Mat4x4MulMat4x4Equ(MAlloc(sizeof(I64)*16,mem_task),m1,m2); +} + +public I64 *Mat4x4Equ(I64 *dst,I64 *src) +{//Copy 4x4 Rot matrix. + MemCpy(dst,src,sizeof(I64)*16); + return dst; +} + +public I64 *Mat4x4New(I64 *src,CTask *mem_task=NULL) +{//Return MAlloced copy of 4x4 Rot matrix. + return Mat4x4Equ(MAlloc(sizeof(I64)*16,mem_task),src); +} + +public I64 *Mat4x4RotX(I64 *m1,F64 è) {//Rot matrix about X axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. F64 my_cos=Cos(è)*GR_SCALE, - my_sin=Sin(è)*GR_SCALE; - I64 r[16],*r2; + my_sin=Sin(è)*GR_SCALE; + I64 r[16],r2[16]; MemSet(r,0,sizeof(r)); r[5]=my_cos; r[10]=my_cos; @@ -163,18 +125,14 @@ public I64 *GrRotXEqu(I64 *m1,F64 r[6]=-my_sin; r[0]=GR_SCALE; r[15]=GR_SCALE; - - r2=GrMulMat(r,m1); - MemCpy(m1,r2,sizeof(I64)*16); - Free(r2); - return m1; + return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); } -public I64 *GrRotYEqu(I64 *m1,F64 ê) +public I64 *Mat4x4RotY(I64 *m1,F64 ê) {//Rot matrix about Y axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. F64 my_cos=Cos(ê)*GR_SCALE, - my_sin=Sin(ê)*GR_SCALE; - I64 r[16],*r2; + my_sin=Sin(ê)*GR_SCALE; + I64 r[16],r2[16]; MemSet(r,0,sizeof(r)); r[0]=my_cos; r[10]=my_cos; @@ -182,18 +140,14 @@ public I64 *GrRotYEqu(I64 *m1,F64 r[2]=my_sin; r[5]=GR_SCALE; r[15]=GR_SCALE; - - r2=GrMulMat(r,m1); - MemCpy(m1,r2,sizeof(I64)*16); - Free(r2); - return m1; + return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); } -public I64 *GrRotZEqu(I64 *m1,F64 é) +public I64 *Mat4x4RotZ(I64 *m1,F64 é) {//Rot matrix about Z axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. F64 my_cos=Cos(é)*GR_SCALE, - my_sin=Sin(é)*GR_SCALE; - I64 r[16],*r2; + my_sin=Sin(é)*GR_SCALE; + I64 r[16],r2[16]; MemSet(r,0,sizeof(r)); r[0]=my_cos; r[5]=my_cos; @@ -201,14 +155,10 @@ public I64 *GrRotZEqu(I64 *m1,F64 r[1]=-my_sin; r[10]=GR_SCALE; r[15]=GR_SCALE; - - r2=GrMulMat(r,m1); - MemCpy(m1,r2,sizeof(I64)*16); - Free(r2); - return m1; + return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); } -public I64 *GrScaleEqu(I64 *m1,F64 s) +public I64 *Mat4x4Scale(I64 *m1,F64 s) {//Scale 4x4 matrix by value. I64 i; for (i=0;i<16;i++) @@ -216,7 +166,7 @@ public I64 *GrScaleEqu(I64 *m1,F64 s) return m1; } -public U0 GrScalePenWidth(CDC *dc=gr.dc) +public U0 DCPenWidthScale(CDC *dc=gr.dc) {//Scale device context's pen width by norm of transformation. I64 d; if (dc->flags&DCF_TRANSFORMATION) { @@ -229,7 +179,7 @@ public U0 GrScalePenWidth(CDC *dc=gr.dc) } } -public I64 *GrSetTranslation(I64 r[4][4],I64 x,I64 y,I64 z) +public I64 *Mat4x4TranslationEqu(I64 r[4][4],I64 x,I64 y,I64 z) {//Set translation values in 4x4 matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. r[0][3]=x<<32; r[1][3]=y<<32; @@ -238,7 +188,7 @@ public I64 *GrSetTranslation(I64 r[4][4],I64 x,I64 y,I64 z) return r; } -public I64 *GrAddTranslation(I64 r[4][4],I64 x,I64 y,I64 z) +public I64 *Mat4x4TranslationAdd(I64 r[4][4],I64 x,I64 y,I64 z) {//Add translation to 4x4 matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. r[0][3]+=x<<32; r[1][3]+=y<<32; @@ -247,7 +197,7 @@ public I64 *GrAddTranslation(I64 r[4][4],I64 x,I64 y,I64 z) return r; } -public Bool GrSetSymmetry(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2) +public Bool DCSymmetrySet(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2) {//2D. Set device context's symmetry. F64 d; if (y1==y2 && x1==x2) @@ -256,8 +206,8 @@ public Bool GrSetSymmetry(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2) dc->sym.sny=x1-x2; dc->sym.snz=0; if (d=Sqrt(SqrI64(dc->sym.snx)+ - SqrI64(dc->sym.sny)+ - SqrI64(dc->sym.snz))) { + SqrI64(dc->sym.sny)+ + SqrI64(dc->sym.snz))) { d=GR_SCALE/d; dc->sym.snx *= d; dc->sym.sny *= d; @@ -269,15 +219,16 @@ public Bool GrSetSymmetry(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2) return TRUE; } -public Bool GrSetSymmetry3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,I64 x3,I64 y3,I64 z3) +public Bool DCSymmetry3Set(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1, + I64 x2,I64 y2,I64 z2,I64 x3,I64 y3,I64 z3) {//3D. Set device context's symmetry. F64 d,x,y,z,xx,yy,zz; I64 xx1,yy1,zz1,xx2,yy2,zz2,*r; xx1=x1-x2; yy1=y1-y2; zz1=z1-z2; xx2=x3-x2; yy2=y3-y2; zz2=z3-z2; if (!xx1 && !yy1 && !zz1 || - !xx2 && !yy2 && !zz2 || - xx1==xx2 && yy1==yy2 && zz1==zz2) + !xx2 && !yy2 && !zz2 || + xx1==xx2 && yy1==yy2 && zz1==zz2) return FALSE; x=yy1*zz2-zz1*yy2; @@ -304,12 +255,12 @@ public Bool GrSetSymmetry3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 return TRUE; } -public U0 GrReflect(CDC *dc,I64 *_x,I64 *_y,I64 *_z) +public U0 DCReflect(CDC *dc,I64 *_x,I64 *_y,I64 *_z) {//Reflect 3D point about device context's symmetry. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. I64 x=*_x<<32,y=*_y<<32,z=*_z<<32, - xx=*_x-dc->sym.sx,yy=*_y-dc->sym.sy,zz=*_z-dc->sym.sz, - d=(xx*dc->sym.snx+yy*dc->sym.sny+zz*dc->sym.snz)>>16, - xn,yn,zn,xx2,yy2,zz2; + xx=*_x-dc->sym.sx,yy=*_y-dc->sym.sy,zz=*_z-dc->sym.sz, + d=(xx*dc->sym.snx+yy*dc->sym.sny+zz*dc->sym.snz)>>16, + xn,yn,zn,xx2,yy2,zz2; xn=d*dc->sym.snx>>15; yn=d*dc->sym.sny>>15; zn=d*dc->sym.snz>>15; @@ -320,11 +271,11 @@ public U0 GrReflect(CDC *dc,I64 *_x,I64 *_y,I64 *_z) yy2=y+yn; zz2=z+zn; if (SqrI64(xx>>16 -dc->sym.sx<<16)+ - SqrI64(yy>>16 -dc->sym.sy<<16)+ - SqrI64(zz>>16 -dc->sym.sz<<16)< - SqrI64(xx2>>16-dc->sym.sx<<16)+ - SqrI64(yy2>>16-dc->sym.sy<<16)+ - SqrI64(zz2>>16-dc->sym.sz<<16)) { + SqrI64(yy>>16 -dc->sym.sy<<16)+ + SqrI64(zz>>16 -dc->sym.sz<<16)< + SqrI64(xx2>>16-dc->sym.sx<<16)+ + SqrI64(yy2>>16-dc->sym.sy<<16)+ + SqrI64(zz2>>16-dc->sym.sz<<16)) { *_x=xx.i32[1]; *_y=yy.i32[1]; *_z=zz.i32[1]; } else { *_x=xx2.i32[1]; *_y=yy2.i32[1]; *_z=zz2.i32[1]; @@ -343,7 +294,7 @@ public Bool Circle(U8 *aux_data, F64 len_radians=2*ã) {//Step through circle arc calling callback. I64 i,j,len=Ceil(len_radians*radius), - x,y,x1,y1,s1,s2,c; + x,y,x1,y1,s1,s2,c; F64 t; if (radius<=0||!step) return TRUE; t=1.0/radius; @@ -387,7 +338,7 @@ public Bool Ellipse(U8 *aux_data, F64 len_radians=2*ã) {//Step through ellipse arc calling callback. I64 i,j,len, - x,y,_x,_y,x1,y1,x2,y2, s1,s2,c, s12,s22,c2; + x,y,_x,_y,x1,y1,x2,y2, s1,s2,c, s12,s22,c2; F64 t; Bool first=TRUE; if (x_radius<=0 || y_radius<=0 || !step) @@ -432,7 +383,7 @@ public Bool Ellipse(U8 *aux_data, for (i=0;i<=len;i+=step) { if ((x>>SCALE2!=_x || y>>SCALE2!=_y || first) && - !(*fp_plot)(aux_data,cx+x>>SCALE2,cy+y>>SCALE2,cz)) + !(*fp_plot)(aux_data,cx+x>>SCALE2,cy+y>>SCALE2,cz)) return FALSE; _x=x>>SCALE2; _y=y>>SCALE2; first=FALSE; @@ -459,8 +410,8 @@ public Bool RegPoly(U8 *aux_data, F64 len_radians=2*ã) {//Step through regular polygon calling callback. I64 i,n,x,y,x1,y1,x2,y2, - xx1,yy1,xx2,yy2, - s1,s2,c, s12,s22,c2; + xx1,yy1,xx2,yy2, + s1,s2,c, s12,s22,c2; F64 angle_step; if (sides<=0 || x_radius<=0 || y_radius<=0) @@ -512,7 +463,7 @@ public Bool RegPoly(U8 *aux_data, return TRUE; } -#help_index "Graphics/Data Types;Math/Data Types" +#help_index "Graphics/Data Types/D3I32;Math/Data Types/D3I32;Data Types/D3I32" public F64 D3I32Dist(CD3I32 *p1,CD3I32 *p2) {//Dist between p1 and p2. return Sqrt(SqrI64(p1->x-p2->x)+SqrI64(p1->y-p2->y)+SqrI64(p1->z-p2->z)); @@ -534,16 +485,17 @@ public I64 D3I32NormSqr(CD3I32 *p) } #help_index "Graphics/Math" -public Bool Bezier2(U8 *aux_data,CD3I32 *ctrl,Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool first=TRUE) +public Bool Bezier2(U8 *aux_data,CD3I32 *ctrl, + Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool first=TRUE) {//Go in 2nd order bezier calling callback. I64 x,y,z,xx,yy,zz,dx,dy,dz,d_max; F64 x0=ctrl[0].x,y0=ctrl[0].y,z0=ctrl[0].z, - x1=ctrl[1].x-x0,y1=ctrl[1].y-y0,z1=ctrl[1].z-z0, - x2=ctrl[2].x-x0,y2=ctrl[2].y-y0,z2=ctrl[2].z-z0, - t,d=D3I32Dist(&ctrl[0],&ctrl[1])+ - D3I32Dist(&ctrl[1],&ctrl[2])+ - D3I32Dist(&ctrl[2],&ctrl[0]), - s=0.5/d,t1,t2; + x1=ctrl[1].x-x0,y1=ctrl[1].y-y0,z1=ctrl[1].z-z0, + x2=ctrl[2].x-x0,y2=ctrl[2].y-y0,z2=ctrl[2].z-z0, + t,d=D3I32Dist(&ctrl[0],&ctrl[1])+ + D3I32Dist(&ctrl[1],&ctrl[2])+ + D3I32Dist(&ctrl[2],&ctrl[0]), + s=0.5/d,t1,t2; xx=x0; yy=y0; zz=z0; if (first && !(*fp_plot)(aux_data,xx,yy,zz)) return FALSE; @@ -573,23 +525,24 @@ public Bool Bezier2(U8 *aux_data,CD3I32 *ctrl,Bool (*fp_plot)(U8 *aux,I64 x,I64 } x=ctrl[2].x; y=ctrl[2].y; z=ctrl[2].z; if ((xx!=x || yy!=y || zz!=z) && - !(*fp_plot)(aux_data,x,y,z)) + !(*fp_plot)(aux_data,x,y,z)) return FALSE; return TRUE; } -public Bool Bezier3(U8 *aux_data,CD3I32 *ctrl,Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool first=TRUE) +public Bool Bezier3(U8 *aux_data,CD3I32 *ctrl, + Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool first=TRUE) {//Go in 3rd order bezier calling callback. I64 x,y,z,xx,yy,zz,dx,dy,dz,d_max; F64 x0=ctrl[0].x,y0=ctrl[0].y,z0=ctrl[0].z, - x1=ctrl[1].x-x0,y1=ctrl[1].y-y0,z1=ctrl[1].z-z0, - x2=ctrl[2].x-x0,y2=ctrl[2].y-y0,z2=ctrl[2].z-z0, - x3=ctrl[3].x-x0,y3=ctrl[3].y-y0,z3=ctrl[3].z-z0, - t,d=D3I32Dist(&ctrl[0],&ctrl[1])+ - D3I32Dist(&ctrl[1],&ctrl[2])+ - D3I32Dist(&ctrl[2],&ctrl[3])+ - D3I32Dist(&ctrl[3],&ctrl[0]), - s=0.5/d,nt,t1,t2,t3; + x1=ctrl[1].x-x0,y1=ctrl[1].y-y0,z1=ctrl[1].z-z0, + x2=ctrl[2].x-x0,y2=ctrl[2].y-y0,z2=ctrl[2].z-z0, + x3=ctrl[3].x-x0,y3=ctrl[3].y-y0,z3=ctrl[3].z-z0, + t,d=D3I32Dist(&ctrl[0],&ctrl[1])+ + D3I32Dist(&ctrl[1],&ctrl[2])+ + D3I32Dist(&ctrl[2],&ctrl[3])+ + D3I32Dist(&ctrl[3],&ctrl[0]), + s=0.5/d,nt,t1,t2,t3; xx=x0; yy=y0; zz=z0; if (first && !(*fp_plot)(aux_data,xx,yy,zz)) return FALSE; @@ -621,12 +574,13 @@ public Bool Bezier3(U8 *aux_data,CD3I32 *ctrl,Bool (*fp_plot)(U8 *aux,I64 x,I64 } x=ctrl[3].x; y=ctrl[3].y; z=ctrl[3].z; if ((xx!=x || yy!=y || zz!=z) && - !(*fp_plot)(aux_data,x,y,z)) + !(*fp_plot)(aux_data,x,y,z)) return FALSE; return TRUE; } -public Bool BSpline2(U8 *aux_data,CD3I32 *ctrl,I64 cnt,Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool closed=FALSE) +public Bool BSpline2(U8 *aux_data,CD3I32 *ctrl,I64 cnt, + Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool closed=FALSE) {//Go in 2nd order spline calling callback. I64 i,j; CD3I32 *c; @@ -692,7 +646,8 @@ public Bool BSpline2(U8 *aux_data,CD3I32 *ctrl,I64 cnt,Bool (*fp_plot)(U8 *aux,I return TRUE; } -public Bool BSpline3(U8 *aux_data,CD3I32 *ctrl,I64 cnt,Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool closed=FALSE) +public Bool BSpline3(U8 *aux_data,CD3I32 *ctrl,I64 cnt, + Bool (*fp_plot)(U8 *aux,I64 x,I64 y,I64 z),Bool closed=FALSE) {//Go in 3rd order spline calling callback. I64 i,j; F64 x,y,z; @@ -786,10 +741,11 @@ public Bool BSpline3(U8 *aux_data,CD3I32 *ctrl,I64 cnt,Bool (*fp_plot)(U8 *aux,I #define CC_TOP 4 #define CC_BOTTOM 8 -public Bool ClipLine(I64 *_x1,I64 *_y1,I64 *_x2,I64 *_y2,I64 left,I64 top,I64 right,I64 bottom) +public Bool ClipLine(I64 *_x1,I64 *_y1,I64 *_x2,I64 *_y2, + I64 left,I64 top,I64 right,I64 bottom) {//Clip x1,y1 x2,y2 with left,top,right,bottom. I64 x,y,x1=*_x1,y1=*_y1,x2=*_x2,y2=*_y2, - cc,cc1,cc2; + cc,cc1,cc2; if (y1>bottom) cc1=CC_BOTTOM; else if (y1>2); - OutU8(VGAP_PALETTE_DATA,bgr.g>>2); - OutU8(VGAP_PALETTE_DATA,bgr.b>>2); + OutU8(VGAP_PALETTE_DATA,bgr48.r>>10); + OutU8(VGAP_PALETTE_DATA,bgr48.g>>10); + OutU8(VGAP_PALETTE_DATA,bgr48.b>>10); LBtr(&sys_semas[SYS_SEMA_VGA],0); POPFD } -public CBGR GetVGAPaletteColor(I64 color_num) -{//6-bits per b, g and r. - CBGR result=0; +public CBGR48 GrPaletteColorGet(I64 color_num) +{//VGA has 6-bits for blue, for green, and for red. + CBGR48 result=0; if (!Bt(&sys_run_level,RLf_VGA)) return 0; PUSHFD CLI @@ -61,41 +53,41 @@ public CBGR GetVGAPaletteColor(I64 color_num) Yield; OutU8(VGAP_PALETTE_MASK,0xFF); OutU8(VGAP_REG_READ,color_num); - result.r=InU8(VGAP_PALETTE_DATA)<<2; - result.g=InU8(VGAP_PALETTE_DATA)<<2; - result.b=InU8(VGAP_PALETTE_DATA)<<2; + result.r=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; + result.g=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; + result.b=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; LBtr(&sys_semas[SYS_SEMA_VGA],0); POPFD return result; } -public CBGR vga_palette4_std[16]={ -0x000000,0x0000AA,0x00AA00,0x00AAAA, -0xAA0000,0xAA00AA,0xAA5500,0xAAAAAA, -0x555555,0x5555FF,0x55FF55,0x55FFFF, -0xFF5555,0xFF55FF,0xFFFF55,0xFFFFFF}; +public CBGR48 gr_palette_std[NUM_COLORS]={ +0x000000000000,0x00000000AAAA,0x0000AAAA0000,0x0000AAAAAAAA, +0xAAAA00000000,0xAAAA0000AAAA,0xAAAA55550000,0xAAAAAAAAAAAA, +0x555555555555,0x55555555FFFF,0x5555FFFF5555,0x5555FFFFFFFF, +0xFFFF55555555,0xFFFF5555FFFF,0xFFFFFFFF5555,0xFFFFFFFFFFFF}; -public CBGR vga_palette4_gray[16]={ -0x000000,0x111111,0x222222,0x333333, -0x444444,0x555555,0x666666,0x777777, -0x888888,0x999999,0xAAAAAA,0xBBBBBB, -0xCCCCCC,0xDDDDDD,0xEEEEEE,0xFFFFFF}; +public CBGR48 gr_palette_gray[NUM_COLORS]={ +0x000000000000,0x111111111111,0x222222222222,0x333333333333, +0x444444444444,0x555555555555,0x666666666666,0x777777777777, +0x888888888888,0x999999999999,0xAAAAAAAAAAAA,0xBBBBBBBBBBBB, +0xCCCCCCCCCCCC,0xDDDDDDDDDDDD,0xEEEEEEEEEEEE,0xFFFFFFFFFFFF}; -public U0 GetVGAPalette4(CBGR *bgr) -{//4-bit (16 color) +public U0 GrPaletteGet(CBGR48 *bgr48) +{//16 colors I64 i; - for (i=0;i<16;i++) - bgr[i]=GetVGAPaletteColor(i); + for (i=0;ipix_left+win_task->scroll_x; y+=win_task->pix_top+win_task->scroll_y; if (win_task->pix_left<=x<=win_task->pix_right && - win_task->pix_top <=y<=win_task->pix_bottom && - 0<=xwidth && 0<=yheight && - (win_task->next_task==sys_winmgr_task || - dc->flags&DCF_ON_TOP || - !IsPixCovered0(win_task,x,y))) + win_task->pix_top <=y<=win_task->pix_bottom && + 0<=xwidth && 0<=yheight && + (win_task->next_task==sys_winmgr_task || + dc->flags&DCF_ON_TOP || + !IsPixCovered0(win_task,x,y))) GrPlot0(dc,x,y); } else if (0<=xwidth && 0<=yheight) - GrPlot0(dc,x,y); + GrPlot0(dc,x,y); dc->depth_buf=db; return TRUE; } @@ -94,15 +96,15 @@ Bool GrPlot1(CDC *dc=gr.dc,I64 x,I64 y) x+=win_task->pix_left+win_task->scroll_x; y+=win_task->pix_top+win_task->scroll_y; if (win_task->pix_left<=x<=win_task->pix_right && - win_task->pix_top <=y<=win_task->pix_bottom && - 0<=xwidth && 0<=yheight && - (win_task->next_task==sys_winmgr_task || - dc->flags&DCF_ON_TOP || - !IsPixCovered0(win_task,x,y))) + win_task->pix_top <=y<=win_task->pix_bottom && + 0<=xwidth && 0<=yheight && + (win_task->next_task==sys_winmgr_task || + dc->flags&DCF_ON_TOP || + !IsPixCovered0(win_task,x,y))) GrPlot0(dc,x,y); } else if (0<=xwidth && 0<=yheight) - GrPlot0(dc,x,y); + GrPlot0(dc,x,y); return TRUE; } @@ -115,15 +117,15 @@ public I64 GrPeek(CDC *dc=gr.dc,I64 x,I64 y) x+=win_task->pix_left+win_task->scroll_x; y+=win_task->pix_top+win_task->scroll_y; if (!(win_task->pix_left<=x<=win_task->pix_right) || - !(win_task->pix_top <=y<=win_task->pix_bottom) || - !(0<=xwidth) || !(0<=yheight) || - win_task->next_task!=sys_winmgr_task && - !(dc->flags&DCF_ON_TOP) && - IsPixCovered0(win_task,x,y)) + !(win_task->pix_top <=y<=win_task->pix_bottom) || + !(0<=xwidth) || !(0<=yheight) || + win_task->next_task!=sys_winmgr_task && + !(dc->flags&DCF_ON_TOP) && + IsPixCovered0(win_task,x,y)) return -1; } else if (!(0<=xwidth) || !(0<=yheight)) - return -1; + return -1; return GrPeek0(dc,x,y); } @@ -171,7 +173,7 @@ I64 GrFloodFillRay(CDC *dc,I64 x,I64 y,I64 z,I32 *db) //Returns cnt of pixs changed I64 result=0; //We don't dynamically calculate the size to avoid -//fragmentation of memory. + //fragmentation of memory. CFFRay *f_dc=MAlloc(sizeof(CFFRay)*0x80000),*f=f_dc; f->x=x; f->y=y; @@ -234,11 +236,12 @@ I64 GrFloodFillRay(CDC *dc,I64 x,I64 y,I64 z,I32 *db) return result; } -public I64 GrFloodFill(CDC *dc=gr.dc,I64 x,I64 y,Bool not_color=FALSE,I64 z=0,I32 *db=NULL) +public I64 GrFloodFill(CDC *dc=gr.dc,I64 x,I64 y, + Bool not_color=FALSE,I64 z=0,I32 *db=NULL) {//2D. Ignore z and db. //not_color=TRUE means fill up to everything which is not the current color. -//not_color=FALSE means fill all parts equal to the color under the point. -//Returns cnt of pixs changed + //not_color=FALSE means fill all parts equal to the color under the point. + //Returns cnt of pixs changed I64 result=0,j,old_flags=dc->flags; CColorROPU32 old_color2=dc->color2; CDC *old_brush; @@ -254,14 +257,14 @@ public I64 GrFloodFill(CDC *dc=gr.dc,I64 x,I64 y,Bool not_color=FALSE,I64 z=0,I3 dc->color2=j; if (dc->color.c1.rop&ROPBF_DITHER) { if (dc->color2.c0.color==dc->color.c0.color && - dc->color.c0.color==dc->color.c1.color) + dc->color.c0.color==dc->color.c1.color) goto ff_done; } else if (dc->color2.c0.color==dc->color.c0.color) goto ff_done; dc->flags&=~DCF_FILL_NOT_COLOR; } if (not_color && j!=dc->color2 || - !not_color) + !not_color) result=GrFloodFillRay(dc,x,y,z,db); } ff_done: @@ -282,7 +285,7 @@ public Bool GrPlot3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z) } if (dc->flags & DCF_SYMMETRY) { _x=x; _y=y; _z=z; - GrReflect(dc,&_x,&_y,&_z); + DCReflect(dc,&_x,&_y,&_z); dc->flags&=~DCF_SYMMETRY; dc->db_z=_z; GrPlot1(dc,_x,_y); @@ -302,7 +305,7 @@ gr_done: public Bool GrPlot3(CDC *dc=gr.dc,I64 x,I64 y,I64 z) {//3D. Clipping and transformation and pen width. - I64 _x,_y,_z,i,j,w,dist; + I64 _x,_y,_z,i,j,w; CColorROPU32 old_color=dc->color; Bool record,was_transform=FALSE,was_symmetry=FALSE; CTask *win_task; @@ -313,7 +316,7 @@ public Bool GrPlot3(CDC *dc=gr.dc,I64 x,I64 y,I64 z) } if (dc->flags & DCF_SYMMETRY) { _x=x; _y=y; _z=z; - GrReflect(dc,&_x,&_y,&_z); + DCReflect(dc,&_x,&_y,&_z); dc->flags&=~DCF_SYMMETRY; GrPlot3(dc,_x,_y,_z); was_symmetry=TRUE; @@ -341,8 +344,10 @@ public Bool GrPlot3(CDC *dc=gr.dc,I64 x,I64 y,I64 z) } } else { if (dc->color.c0.rop==ROPB_COLLISION) { - if (dc->color.c0.color!=dc->bkcolor.c0.color && dc->color.c0.color!=TRANSPARENT) - record=GrBlot3(dc,x-w,y-w,z,gr.collision_pen_brushes[dc->pen_width]); + if (dc->color.c0.color!=dc->bkcolor.c0.color && + dc->color.c0.color!=TRANSPARENT) + record=GrBlot3(dc,x-w,y-w,z, + gr.collision_pen_brushes[dc->pen_width]); else record=FALSE; } else @@ -362,7 +367,8 @@ public Bool GrPlot3(CDC *dc=gr.dc,I64 x,I64 y,I64 z) } } else { if (dc->color.c0.rop==ROPB_COLLISION) { - if (dc->color.c0.color!=dc->bkcolor.c0.color && dc->color.c0.color!=TRANSPARENT) + if (dc->color.c0.color!=dc->bkcolor.c0.color && + dc->color.c0.color!=TRANSPARENT) record=GrBlot(dc,x-w,y-w,gr.collision_pen_brushes[dc->pen_width]); else record=FALSE; @@ -376,13 +382,8 @@ public Bool GrPlot3(CDC *dc=gr.dc,I64 x,I64 y,I64 z) x+=win_task->pix_left+win_task->scroll_x; y+=win_task->pix_top+win_task->scroll_y; } - if (dc->flags & DCF_LOCATE_NEAREST) { - dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y); - if (distnearest_dist) { - dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num; - dc->nearest_dist=dist; - } - } + if (dc->flags & DCF_LOCATE_NEAREST) + dc->dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y); if (dc->flags & DCF_RECORD_EXTENTS) { if (x-wmin_x) dc->min_x=x-w; if (y-wmin_y) dc->min_y=y-w; @@ -417,9 +418,9 @@ Bool GrLinePlot0(CDC *dc,I64 x,I64 y,I64 z) {//This is a callback. CTask *win_task=dc->win_task; if (!(dc->flags & DCF_SCREEN_BITMAP) || - win_task->next_task==sys_winmgr_task || - dc->flags&DCF_ON_TOP || - !IsPixCovered0(win_task,x,y)) { + win_task->next_task==sys_winmgr_task || + dc->flags&DCF_ON_TOP || + !IsPixCovered0(win_task,x,y)) { dc->db_z=z; GrPlot0(dc,x,y); } @@ -433,7 +434,8 @@ Bool GrLinePlot(CDC *dc,I64 x,I64 y,I64 z) return TRUE; } -public Bool GrLine(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,I64 step=1,I64 start=0) +public Bool GrLine(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2, + I64 step=1,I64 start=0) {//2D. Clipping but not transformation. Bool result=FALSE; I32 *db=dc->depth_buf; @@ -469,7 +471,8 @@ public Bool GrEllipse(CDC *dc=gr.dc, Bool result; I32 *db=dc->depth_buf; dc->depth_buf=NULL; - result=Ellipse(dc,cx,cy,0,x_radius,y_radius,&GrLinePlot,rot_angle,step,start_radians,len_radians); + result=Ellipse(dc,cx,cy,0,x_radius,y_radius,&GrLinePlot, + rot_angle,step,start_radians,len_radians); dc->depth_buf=db; return result; } @@ -486,7 +489,7 @@ public Bool GrRegPoly(CDC *dc=gr.dc, I32 *db=dc->depth_buf; dc->depth_buf=NULL; result=RegPoly(dc,cx,cy,0,x_radius,y_radius,sides, - &GrLinePlot,rot_angle,step,start_radians,len_radians); + &GrLinePlot,rot_angle,step,start_radians,len_radians); dc->depth_buf=db; return result; } @@ -511,7 +514,8 @@ public Bool Gr3BSpline(CDC *dc=gr.dc,CD3I32 *ctrl,I64 cnt,Bool closed=FALSE) return BSpline3(dc,ctrl,cnt,&GrLinePlot,closed); } -public Bool GrLine3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,I64 step=1,I64 start=0) +public Bool GrLine3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2, + I64 step=1,I64 start=0) {//3D. Transformation with pen width. I64 _x1,_y1,_z1,_x2,_y2,_z2; Bool result=FALSE,was_transform=FALSE,was_symmetry=FALSE; @@ -523,11 +527,12 @@ public Bool GrLine3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,I64 } if (dc->flags & DCF_SYMMETRY) { _x1=x1; _y1=y1; _z1=z1; - GrReflect(dc,&_x1,&_y1,&_z1); + DCReflect(dc,&_x1,&_y1,&_z1); _x2=x2; _y2=y2; _z2=z2; - GrReflect(dc,&_x2,&_y2,&_z2); + DCReflect(dc,&_x2,&_y2,&_z2); dc->flags&=~DCF_SYMMETRY; - if (step==1 && !start && !dc->brush && dc->pen_width<2 && !dc->depth_buf) {//TODO: clip z for depth buf + if (step==1 && !start && !dc->brush && dc->pen_width<2 && + !dc->depth_buf) {//TODO: clip z for depth buf if (DCClipLine(dc,&_x1,&_y1,&_x2,&_y2)) result=Line(dc,_x1,_y1,0,_x2,_y2,0,&GrLinePlot0,step,start); } else @@ -536,7 +541,8 @@ public Bool GrLine3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,I64 x2,I64 y2,I64 z2,I64 if (dc->flags&DCF_JUST_MIRROR) goto gr_done; } - if (step==1 && !start && !dc->brush && dc->pen_width<2 && !dc->depth_buf) {//TODO: clip z for depth buf + if (step==1 && !start && !dc->brush && dc->pen_width<2 && + !dc->depth_buf) {//TODO: clip z for depth buf if (DCClipLine(dc,&x1,&y1,&x2,&y2)) result|=Line(dc,x1,y1,0,x2,y2,0,&GrLinePlot0,step,start); } else @@ -628,10 +634,11 @@ public Bool GrEllipse3(CDC *dc=gr.dc, m2*=Abs(Sin(a2-a1)); result=Ellipse(dc,cx,cy,cz, - m1/0x10000,m2/0x10000,&GrPlot3,-a1,step,start_radians,len_radians); + m1/0x10000,m2/0x10000,&GrPlot3,-a1,step,start_radians,len_radians); dc->flags|=DCF_TRANSFORMATION; } else - result=Ellipse(dc,cx,cy,cz,x_radius,y_radius,&GrPlot3,rot_angle,step,start_radians,len_radians); + result=Ellipse(dc,cx,cy,cz,x_radius,y_radius,&GrPlot3, + rot_angle,step,start_radians,len_radians); return result; } @@ -639,9 +646,11 @@ public Bool GrCircle3(CDC *dc=gr.dc,I64 cx,I64 cy,I64 cz,I64 radius, I64 step=1,F64 start_radians=0,F64 len_radians=2*ã) {//3D. Transformation with pen width. if (dc->flags & DCF_TRANSFORMATION) - return GrEllipse3(dc,cx,cy,cz,radius,radius,0,step,start_radians,len_radians); + return GrEllipse3(dc,cx,cy,cz,radius,radius,0,step, + start_radians,len_radians); else - return Circle(dc,cx,cy,cz,radius,&GrPlot3,step,start_radians,len_radians); + return Circle(dc,cx,cy,cz,radius,&GrPlot3,step, + start_radians,len_radians); } public Bool GrRegPoly3(CDC *dc=gr.dc, @@ -690,27 +699,29 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, m2*=Abs(Sin(a2-a1)); result=RegPoly(dc,cx,cy,cz, - m1/0x10000,m2/0x10000,sides,&GrPlot3,-a1,step,start_radians,len_radians); + m1/0x10000,m2/0x10000,sides,&GrPlot3,-a1, + step,start_radians,len_radians); dc->flags|=DCF_TRANSFORMATION; } else - result=RegPoly(dc,cx,cy,cz,x_radius,y_radius,sides,&GrPlot3,rot_angle,step,start_radians,len_radians); + result=RegPoly(dc,cx,cy,cz,x_radius,y_radius,sides,&GrPlot3, + rot_angle,step,start_radians,len_radians); return result; } public I64 GrFloodFill3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,Bool not_color=FALSE) {//3D. Transformation. //not_color=TRUE means fill up to everything which is not the current color. -//not_color=FALSE means fill all parts equal to the color under the point. -//Returns cnt of pixs changed + //not_color=FALSE means fill all parts equal to the color under the point. + //Returns cnt of pixs changed I64 result,old_flags=dc->flags, - _x,_y,_z; + _x,_y,_z; if (dc->flags & DCF_TRANSFORMATION) { (*dc->transform)(dc,&x1,&y1,&z1); dc->flags&=~DCF_TRANSFORMATION; } if (dc->flags & DCF_SYMMETRY) { _x=x1; _y=y1; _z=z1; - GrReflect(dc,&_x,&_y,&_z); + DCReflect(dc,&_x,&_y,&_z); dc->flags&=~DCF_SYMMETRY; result=GrFloodFill(dc,_x,_y,not_color,_z,dc->depth_buf); if (dc->flags&DCF_JUST_MIRROR) @@ -725,16 +736,16 @@ gr_done: #help_index "Graphics;Graphics/Device Contexts" public I64 GrBlot3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,CDC *img) -{//3D. Clipping and transformation. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. +{//3D. Clipping and transformation. CColorROPU32 old_color=dc->color; I64 color,reg i,j,w=img->width,h=img->height, - d1,dx1,dy1,dz1, - reg d2,dx2,dy2,dz2, - adx1,ady1,adz1, - adx2,ady2,adz2, - x2,y2,z2,x3,y3,z3, - dw,reg dh,x,y,_x1,_y1,_z1,_x2,_y2,_z2,_x3,_y3,_z3, - last_x,last_y,result=0; + d1,dx1,dy1,dz1, + reg d2,dx2,dy2,dz2, + adx1,ady1,adz1, + adx2,ady2,adz2, + x2,y2,z2,x3,y3,z3, + dw,reg dh,x,y,_x1,_y1,_z1,_x2,_y2,_z2,_x3,_y3,_z3, + last_x,last_y,result=0; Bool first; CDC *old_brush=dc->brush; @@ -748,11 +759,11 @@ public I64 GrBlot3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,CDC *img) } if (dc->flags & DCF_SYMMETRY) { _x1=x1; _y1=y1; _z1=z1; - GrReflect(dc,&_x1,&_y1,&_z1); + DCReflect(dc,&_x1,&_y1,&_z1); _x2=x2; _y2=y2; _z2=z2; - GrReflect(dc,&_x2,&_y2,&_z2); + DCReflect(dc,&_x2,&_y2,&_z2); _x3=x3; _y3=y3; _z3=z3; - GrReflect(dc,&_x3,&_y3,&_z3); + DCReflect(dc,&_x3,&_y3,&_z3); dx1=_x2-_x1; dy1=_y2-_y1; dz1=_z2-_z1; dx2=_x3-_x1; dy2=_y3-_y1; dz2=_z3-_z1; adx1=AbsI64(dx1); ady1=AbsI64(dy1); adz1=AbsI64(dz1); @@ -944,7 +955,7 @@ public Bool Gr2Bezier3(CDC *dc=gr.dc,CD3I32 *ctrl) {//2nd order. Clipping and transform and pen width. Bool result=FALSE; I64 i,x,y,z, - old_flags=dc->flags; + old_flags=dc->flags; CD3I32 *ctrl2=NULL,*ctrl3=NULL; if (dc->flags & DCF_TRANSFORMATION) { ctrl2=MAlloc(sizeof(CD3I32)*3); @@ -966,7 +977,7 @@ public Bool Gr2Bezier3(CDC *dc=gr.dc,CD3I32 *ctrl) x=ctrl[i].x; y=ctrl[i].y; z=ctrl[i].z; - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); ctrl3[i].x=x; ctrl3[i].y=y; ctrl3[i].z=z; @@ -989,7 +1000,7 @@ public Bool Gr3Bezier3(CDC *dc=gr.dc,CD3I32 *ctrl) {//3rd order. Clipping and transform and pen width. Bool result=FALSE; I64 i,x,y,z, - old_flags=dc->flags; + old_flags=dc->flags; CD3I32 *ctrl2=NULL,*ctrl3=NULL; if (dc->flags & DCF_TRANSFORMATION) { ctrl2=MAlloc(sizeof(CD3I32)*4); @@ -1011,7 +1022,7 @@ public Bool Gr3Bezier3(CDC *dc=gr.dc,CD3I32 *ctrl) x=ctrl[i].x; y=ctrl[i].y; z=ctrl[i].z; - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); ctrl3[i].x=x; ctrl3[i].y=y; ctrl3[i].z=z; @@ -1034,7 +1045,7 @@ public I64 Gr2BSpline3(CDC *dc=gr.dc,CD3I32 *ctrl,I64 cnt,Bool closed=FALSE) {//2nd order. Clipping and transform and pen width. Bool result=FALSE; I64 i,x,y,z, - old_flags=dc->flags; + old_flags=dc->flags; CD3I32 *ctrl2=NULL,*ctrl3=NULL; if (dc->flags & DCF_TRANSFORMATION) { ctrl2=MAlloc(sizeof(CD3I32)*cnt); @@ -1056,7 +1067,7 @@ public I64 Gr2BSpline3(CDC *dc=gr.dc,CD3I32 *ctrl,I64 cnt,Bool closed=FALSE) x=ctrl[i].x; y=ctrl[i].y; z=ctrl[i].z; - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); ctrl3[i].x=x; ctrl3[i].y=y; ctrl3[i].z=z; @@ -1079,7 +1090,7 @@ public Bool Gr3BSpline3(CDC *dc=gr.dc,CD3I32 *ctrl,I64 cnt,Bool closed=FALSE) {//3rd order. Clipping and transform and pen width. Bool result=FALSE; I64 i,x,y,z, - old_flags=dc->flags; + old_flags=dc->flags; CD3I32 *ctrl2=NULL,*ctrl3=NULL; if (dc->flags & DCF_TRANSFORMATION) { ctrl2=MAlloc(sizeof(CD3I32)*cnt); @@ -1101,7 +1112,7 @@ public Bool Gr3BSpline3(CDC *dc=gr.dc,CD3I32 *ctrl,I64 cnt,Bool closed=FALSE) x=ctrl[i].x; y=ctrl[i].y; z=ctrl[i].z; - GrReflect(dc,&x,&y,&z); + DCReflect(dc,&x,&y,&z); ctrl3[i].x=x; ctrl3[i].y=y; ctrl3[i].z=z; @@ -1121,17 +1132,16 @@ gr_done: } public I64 GrFillTri0(CDC *dc=gr.dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p4) -{//3D. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. -//Returns cnt of pixs changed +{//3D. Returns cnt of pixs changed I64 x1,x2,y,z1,z2,dx1,dy1,dz1,dx2,dy2,dz2,result=0,i,y_min,y_max; CTask *win_task; - //p1 is min x +//p1 is min x if (p4->xx) SwapI64(&p4,&p2); if (p2->xx) SwapI64(&p2,&p1); - //p2y<=p4y + //p2y<=p4y if (p4->yy) SwapI64(&p4,&p2); diff --git a/Adam/Gr/GrScreen.CPP b/Adam/Gr/GrScreen.CPP index 7d61697..a15e3b7 100644 --- a/Adam/Gr/GrScreen.CPP +++ b/Adam/Gr/GrScreen.CPP @@ -1,87 +1,84 @@ #help_index "Graphics/Screen" -U0 GrUpdateWins() +U0 GrUpdateTaskODEs(CTask *task) +{ + sys_task_being_screen_updated=task; + try + ODEsUpdate(task); + catch { + LBts(&task->win_inhibit,WIf_SELF_ODE); + "Exception in WinMgr: Update Task ODEs\n"; + PutExcept; + Sleep(3000); + VGAFlush; + } + sys_task_being_screen_updated=NULL; +} + +U0 GrUpdateTaskWin(CTask *task) +{ //Draw core#0 task win. + CDC *dc; + CD3I64 saved_scroll; + sys_task_being_screen_updated=task; + try { + if (!Bt(&task->display_flags,DISPLAYf_NO_BORDER)) + TextBorder(Fs,task->win_left,task->win_right,task->win_top, + task->win_bottom,task->border_attr,task==sys_focus_task); + TextRect(task->win_left,task->win_right, + task->win_top,task->win_bottom,task->text_attr<<8); + if (task==sys_winmgr_task) { + if (gr.fp_wall_paper) + (*gr.fp_wall_paper)(task); + } else if (!(task->win_inhibit&WIF_SELF_DOC)) + DocUpdateTaskDocs(task); + if (TaskValidate(task)) { + if (task->draw_it) { + dc=DCAlias(gr.dc2,task); + (*task->draw_it)(task,dc); + DCDel(dc); + } + if (TaskValidate(task)) { + WinScrollNull(task,&saved_scroll); + DrawCtrls(task); + WinScrollRestore(task,&saved_scroll); + } + } + } catch { + if (task!=Fs && TaskValidate(task)) { + LBtr(&task->display_flags,DISPLAYf_SHOW); + "Exception in WinMgr: Update Task Win\n"; + PutExcept; + Sleep(3000); + VGAFlush; + } + } + sys_task_being_screen_updated=NULL; +} + +U0 GrUpdateTasks() {//Only called by WinMgr I64 i; CTask *task,*task1; - CD3I64 saved_scroll; - CDC *dc; - Preempt(OFF); try { winmgr.ode_time=0; if (Bt(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0)) WinZBufUpdate; task1=task=sys_winmgr_task; - do { - if (!TaskValidate(task)) - break; - sys_task_being_screen_updated=task; - Preempt(ON); - ODEsUpdate(task); - Preempt(OFF); - if (!TaskValidate(task)) - break; + do { //Loop through core#0 tasks. + if (!TaskValidate(task)) break; if (Bt(&task->display_flags,DISPLAYf_SHOW) && - Bt(gr.win_uncovered_bitmap,task->win_z_num)) - try { - if (!Bt(&task->display_flags,DISPLAYf_NO_BORDER)) - TextBorder(Fs,task->win_left,task->win_right,task->win_top, - task->win_bottom,task->border_attr,task==sys_focus_task); - TextRect(task->win_left,task->win_right, - task->win_top,task->win_bottom,task->text_attr<<8); - Preempt(ON); - if (task==sys_winmgr_task) { - if (gr.fp_wall_paper) - (*gr.fp_wall_paper)(task); - } else if (!(task->win_inhibit&WIF_SELF_DOC)) - DocUpdateTaskDocs(task); - if (TaskValidate(task)) { - if (task->draw_it) { - dc=DCAlias(gr.dc2,task); - (*task->draw_it)(task,dc); - DCDel(dc); - } - if (TaskValidate(task)) { - Preempt(OFF); - WinScrollNull(task,&saved_scroll); - DrawCtrls(task); - WinScrollRestore(task,&saved_scroll); - } - } - Preempt(OFF); - } catch { - if (task!=Fs && TaskValidate(task)) { - LBtr(&task->display_flags,DISPLAYf_SHOW); - "Exception in WinMgr: DrawIt\n"; - PutExcept; - Sleep(3000); - VGAFlush; - } - } - if (!TaskValidate(task)) - break; + Bt(gr.win_uncovered_bitmap,task->win_z_num)) + GrUpdateTaskWin(task); + if (!TaskValidate(task)) break; task=task->next_task; } while (task!=task1); - for (i=1;iwin_inhibit,WIf_SELF_ODE); - "Exception in WinMgr: ODE\n"; - PutExcept; - Sleep(3000); - VGAFlush; - } - if (!TaskValidate(task)) - break; + if (!TaskValidate(task)) break; + GrUpdateTaskODEs(task); + if (!TaskValidate(task)) break; task=task->next_task; } while (task!=task1); } @@ -91,7 +88,7 @@ U0 GrUpdateWins() } winmgr.last_ode_time=winmgr.ode_time; ode_alloced_factor=LowPass1(0.1,ode_alloced_factor, - Clamp(Gs->idle_factor-0.1,0.2,0.8),1/winmgr.fps); + Clamp(Gs->idle_factor-0.1,0.2,0.8),1/winmgr.fps); sys_task_being_screen_updated=NULL; } @@ -109,7 +106,7 @@ U0 GrFixZoomScale() public U0 GrScaleZoom(F64 scale) {//Multiply zoom factor larger or smaller. - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; F64 s=gr.screen_zoom; gr.screen_zoom=gr.screen_zoom*scale; GrFixZoomScale; @@ -130,12 +127,12 @@ U0 GrZoomInScreen() { GrFixZoomScale; I64 plane,row,col,k,l, - d2=gr.zoomed_dc->width>>3/gr.screen_zoom, - d4=gr.zoomed_dc->width_internal>>3, - d5=d4-d2*gr.screen_zoom, - d3=gr.zoomed_dc->height/gr.screen_zoom, - d6=(gr.zoomed_dc->height-d3)*gr.dc1->width_internal>>3, - d7=gr.zoomed_dc->height%gr.screen_zoom*d4; + d2=gr.zoomed_dc->width>>3/gr.screen_zoom, + d4=gr.zoomed_dc->width_internal>>3, + d5=d4-d2*gr.screen_zoom, + d3=gr.zoomed_dc->height/gr.screen_zoom, + d6=(gr.zoomed_dc->height-d3)*gr.dc1->width_internal>>3, + d7=gr.zoomed_dc->height%gr.screen_zoom*d4; U8 *src,*src2,*dst,*src3,*map=gr.screen_zoom_tables[gr.screen_zoom]; src=gr.dc1->body+gr.sx>>3+gr.sy*gr.dc1->width_internal>>3; @@ -171,8 +168,8 @@ U0 GrZoomInScreen() U0 GrUpdateTextBG() { I64 reg RSI *dst=gr.dc2->body,reg R13 c,row,col, - num_rows=TEXT_ROWS,num_cols=TEXT_COLS,i,j,cur_ch, - reg R12 w1=gr.dc2->width_internal,w2=-7*w1+8,w3=7*w1,w4=0; + num_rows=TEXT_ROWS,num_cols=TEXT_COLS,i,j,cur_ch, + reg R12 w1=gr.dc2->width_internal,w2=-7*w1+8,w3=7*w1,w4=0; U32 *src=gr.text_base; Bool blink_flag=Blink; U8 *dst2=dst; @@ -235,21 +232,21 @@ U0 GrUpdateTextBG() cur_ch.u8[1]=cur_ch.u8[1]<<4+cur_ch.u8[1]>>4; } c=gr.to_8_colors[cur_ch.u8[1]>>4]; - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 - ADD RSI,R12 - MOV U64 [RSI],R13 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 + ADD RSI,R12 + MOV U64 [RSI],R13 dst(U8 *)+=w2; } src+=w4; @@ -261,8 +258,8 @@ U0 GrUpdateTextFG() {//See $LK,"TextBase Layer",A="HI:TextBase Layer"$. U32 *src=gr.text_base; I64 i,j,cur_ch,*dst=gr.dc2->body, - w1=gr.dc2->width_internal,w2=7*w1,w4=0, - num_rows=TEXT_ROWS,num_cols=TEXT_COLS,row,col; + w1=gr.dc2->width_internal,w2=7*w1,w4=0, + num_rows=TEXT_ROWS,num_cols=TEXT_COLS,row,col; U8 *dst_start=gr.dc2->body,*dst_end=dst_start+w1*gr.dc2->height-7*w1-8; Bool blink_flag=Blink; @@ -408,14 +405,14 @@ U0 GrUpdateScreen() CDC *dc; Preempt(ON); if (!Bt(&sys_run_level,RLf_VGA)) //if text mode - GrUpdateWins; + GrUpdateTasks; else { GrUpdateTextBG; GrUpdateTextFG; - GrUpdateWins; + GrUpdateTasks; DCBlotColor8(gr.dc2,gr.dc); } - Preempt(OFF); + Preempt; dc=DCAlias(gr.dc2,Fs); dc->flags|=DCF_ON_TOP; @@ -427,7 +424,7 @@ U0 GrUpdateScreen() GrUpdateTextModeText; else { DCBlotColor4(gr.dc1->body,gr.dc2->body,gr.dc_cache->body, - gr.dc2->height*gr.dc2->width_internal>>3); + gr.dc2->height*gr.dc2->width_internal>>3); GrUpdateVGAGraphics; } } diff --git a/Adam/Gr/GrSpritePlot.CPP b/Adam/Gr/GrSpritePlot.CPP index 1ff42a0..9391a8f 100644 --- a/Adam/Gr/GrSpritePlot.CPP +++ b/Adam/Gr/GrSpritePlot.CPP @@ -1,25 +1,18 @@ -#help_index "Graphics/Sprite" +#help_index "Graphics/Sprite;Sprites" /* $LK,"CSprite",A="MN:CSprite"$s are stored as a sequence of var -length operations with a 1-byte type leading -each operation. The types available are lsted -here, $LK,"SPT_PT",A="MN:SPT_PT"$. They are stored, one after another, -in a chunk of memory terminated by a type $LK,"SPT_END",A="MN:SPT_END"$. - +length operations with a 1-byte $LK,"type",A="MN:SPT_PT"$ leading +each operation. They are stored, one after another, +in a chunk of memory terminated by a $LK,"zero",A="MN:SPT_END"$. $LK,"Sprite3",A="MN:Sprite3"$() shows how the $LK,"CSprite",A="MN:CSprite"$ unions are used. -It's kind-of a mess using a union. $LK,"SpriteElemSize",A="MN:SpriteElemSize"$() will return the size of a single element, while $LK,"SpriteSize",A="MN:SpriteSize"$() will return the size -of an entire lst. Look at $LK,"sprite_elem_base_sizes",A="MN:sprite_elem_base_sizes"$. - -See $LK,"SpriteElem2Code",A="MN:SpriteElem2Code"$() to infer the raw storage -format. They are stored as raw binary values -when saved to files, not text code. +of an entire list. Look at $LK,"sprite_elem_base_sizes",A="MN:sprite_elem_base_sizes"$. See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$ for an example of -making CSprite by hand. Those are type -$LK,"SPT_MESH",A="MN:SPT_MESH"$, one of the most complicated. +making CSprite by hand. It uses $LK,"SPT_MESH",A="MN:SPT_MESH"$, +one of the most complicated. */ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) @@ -35,8 +28,11 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) CD3I32 *p; CGrSym old_sym; MemCpy(&old_sym,&dc->sym,sizeof(CGrSym)); + if (dc->flags & DCF_LOCATE_NEAREST) { + dc->nearest_sprite_elem_num=0; + dc->dist=dc->nearest_dist=MAX_I64; + } while (tempg->type) { - dc->cur_sprite_elem_num=cur_sprite_elem_num++; switch (tempg->type) { case SPT_COLOR: dc->color=dc->color&~(COLORROP_COLORS_MASK|ROPF_DITHER)|tempg->c.color; @@ -48,7 +44,7 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) break; case SPT_WIDTH: dc->pen_width=tempg->w.width; - GrScalePenWidth(dc); + DCPenWidthScale(dc); break; case SPT_TRANSFORM_ON: if (!(dc->flags&DCF_TRANSFORMATION)) { @@ -92,13 +88,17 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) y+=tempg->p.y1; break; case SPT_LINE: - GrLine3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z); + GrLine3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z, + tempg->pp.x2+x,tempg->pp.y2+y,z); break; case SPT_ARROW: - GrArrow3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z); + GrArrow3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z, + tempg->pp.x2+x,tempg->pp.y2+y,z); break; case SPT_PLANAR_SYMMETRY: - if (GrSetSymmetry3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z,tempg->pp.x2+x,tempg->pp.y2+y,z+1)) + if (DCSymmetry3Set(dc,tempg->pp.x1+x,tempg->pp.y1+y,z, + tempg->pp.x2+x,tempg->pp.y2+y,z, + tempg->pp.x2+x,tempg->pp.y2+y,z+1)) dc->flags|=DCF_SYMMETRY; else dc->flags&=~DCF_SYMMETRY; @@ -114,22 +114,25 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) Free(img); break; case SPT_RECT: - GrRect3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z,tempg->pp.x2-tempg->pp.x1,tempg->pp.y2-tempg->pp.y1); + GrRect3(dc,tempg->pp.x1+x,tempg->pp.y1+y,z, + tempg->pp.x2-tempg->pp.x1,tempg->pp.y2-tempg->pp.y1); break; case SPT_ROTATED_RECT: x1=tempg->ppa.x1+x; y1=tempg->ppa.y1+y; z1=z; - GrRot(dc->r,&x1,&y1,&z1); + Mat4x4MulXYZ(dc->r,&x1,&y1,&z1); old_r=dc->r; dc->flags|=DCF_TRANSFORMATION; - r2=GrRotZNew(-tempg->ppa.angle); - GrSetTranslation(r2,x1,y1,z1); - GrSetRotMat(dc,GrMulMat(old_r,r2)); - GrRect3(dc,0,0,0,tempg->ppa.x2-tempg->ppa.x1,tempg->ppa.y2-tempg->ppa.y1); + r2=Mat4x4IdentNew; + Mat4x4RotZ(r2,-tempg->ppa.angle); + Mat4x4TranslationEqu(r2,x1,y1,z1); + DCMat4x4Set(dc,Mat4x4MulMat4x4New(old_r,r2)); + GrRect3(dc,0,0,0, + tempg->ppa.x2-tempg->ppa.x1,tempg->ppa.y2-tempg->ppa.y1); Free(dc->r); Free(r2); - GrSetRotMat(dc,old_r); + DCMat4x4Set(dc,old_r); dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; break; case SPT_CIRCLE: @@ -137,11 +140,11 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) break; case SPT_ELLIPSE: GrEllipse3(dc,tempg->pwha.x1+x,tempg->pwha.y1+y,z,tempg->pwha.width, - tempg->pwha.height,tempg->pwha.angle); + tempg->pwha.height,tempg->pwha.angle); break; case SPT_POLYGON: GrRegPoly3(dc,tempg->pwhas.x1+x,tempg->pwhas.y1+y,z,tempg->pwhas.width, - tempg->pwhas.height,tempg->pwhas.sides,tempg->pwhas.angle); + tempg->pwhas.height,tempg->pwhas.sides,tempg->pwhas.angle); break; case SPT_POLYLINE: ptr=&tempg->nu.u; @@ -202,7 +205,7 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) p->z+=z; } Gr3Mesh(dc,tempg->mu.vertex_cnt,&tempg->mu.u,tempg->mu.tri_cnt, - (&tempg->mu.u)(U8 *)+sizeof(CD3I32)*tempg->mu.vertex_cnt); + (&tempg->mu.u)(U8 *)+sizeof(CD3I32)*tempg->mu.vertex_cnt); p=&tempg->mu.u; for (i=0;imu.vertex_cnt;i++,p++) { p->x-=x; @@ -230,7 +233,7 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) p->z+=z1; } Gr3Mesh(dc,tempg->pmu.vertex_cnt,&tempg->pmu.u,tempg->pmu.tri_cnt, - (&tempg->pmu.u)(U8 *)+sizeof(CD3I32)*tempg->pmu.vertex_cnt); + (&tempg->pmu.u)(U8 *)+sizeof(CD3I32)*tempg->pmu.vertex_cnt); p=&tempg->pmu.u; for (i=0;ipmu.vertex_cnt;i++,p++) { p->x-=x1; @@ -244,6 +247,11 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) } break; } + if (dc->flags & DCF_LOCATE_NEAREST && dc->distnearest_dist) { + dc->nearest_dist=dc->dist; + dc->nearest_sprite_elem_num=cur_sprite_elem_num; + } + cur_sprite_elem_num++; if (just_one) break; tempg(U8 *)+=SpriteElemSize(tempg); } @@ -257,7 +265,7 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,Bool just_one=FALSE) public U0 Sprite3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems) {//Plot a sprite into a CDC, post transform xyz translation. I64 old_x=dc->x,old_y=dc->y,old_z=dc->z, - old_flags=dc->flags&DCF_TRANSFORMATION; + old_flags=dc->flags&DCF_TRANSFORMATION; dc->x=x; dc->y=y; dc->z=z; dc->flags|=DCF_TRANSFORMATION; Sprite3(dc,0,0,0,elems); @@ -267,14 +275,13 @@ public U0 Sprite3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems) public U0 SpriteMat3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) {//Plot rotated by matrix. - I64 *old_r=dc->r,old_m[16], - old_flags=dc->flags&DCF_TRANSFORMATION; + I64 r[16],*old_r=dc->r,old_m[16], + old_flags=dc->flags&DCF_TRANSFORMATION; MemCpy(old_m,m,16*sizeof(I64)); dc->flags|=DCF_TRANSFORMATION; - GrAddTranslation(m,x,y,z); - dc->r=GrMulMat(old_r,m); + Mat4x4TranslationAdd(m,x,y,z); + dc->r=Mat4x4MulMat4x4Equ(r,old_r,m); Sprite3(dc,0,0,0,elems); - Free(dc->r); dc->r=old_r; MemCpy(m,old_m,16*sizeof(I64)); dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; @@ -282,23 +289,26 @@ public U0 SpriteMat3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) public U0 SpriteX3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 è=0) {//Plot rotated around X axis. - I64 *r=GrRotXNew(è); + I64 r[16]; + Mat4x4IdentEqu(r); + Mat4x4RotX(r,è); SpriteMat3B(dc,x,y,z,elems,r); - Free(r); } public U0 SpriteY3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 ê=0) {//Plot rotated around Y axis. - I64 *r=GrRotYNew(ê); + I64 r[16]; + Mat4x4IdentEqu(r); + Mat4x4RotY(r,ê); SpriteMat3B(dc,x,y,z,elems,r); - Free(r); } public U0 SpriteZ3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 é=0) {//Plot rotated around Z axis. - I64 *r=GrRotZNew(é); + I64 r[16]; + Mat4x4IdentEqu(r); + Mat4x4RotZ(r,é); SpriteMat3B(dc,x,y,z,elems,r); - Free(r); } public U0 SpriteExtents(U8 *elems,I64 *min_x=NULL,I64 *max_x=NULL, @@ -340,14 +350,14 @@ public U8 *SpriteInterpolate(U8 *elems0,U8 *elems1,F64 t) CD3I32 *p0,*p1,*pr; U8 *result; CSprite *tempg0=elems0-offset(CSprite.start), - *tempg1=elems1-offset(CSprite.start),*tempgr; + *tempg1=elems1-offset(CSprite.start),*tempgr; if (t<0.5) { i=SpriteSize(elems0), - result=MAlloc(i); + result=MAlloc(i); MemCpy(result,elems0,i); } else { i=SpriteSize(elems1), - result=MAlloc(i); + result=MAlloc(i); MemCpy(result,elems1,i); } tempgr=result-offset(CSprite.start); @@ -443,10 +453,10 @@ public U8 *SpriteInterpolate(U8 *elems0,U8 *elems1,F64 t) return result; } -#help_index "Graphics/Sprite;DolDoc/Output" +#help_index "Graphics/Sprite;DolDoc/Output;StdOut/DolDoc" public CDocEntry *DocSprite(CDoc *doc=NULL,U8 *elems,U8 *fmt=NULL) {//Put a sprite into a document. You can, optionally, supply a fmt string - //for $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ cmd with a %d for the bin_num. +//for $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ cmd with a %d for the bin_num. I64 size; U8 *st; Bool unlock; diff --git a/Adam/Gr/GrTextBase.CPP b/Adam/Gr/GrTextBase.CPP index 3e54601..8298f9b 100644 --- a/Adam/Gr/GrTextBase.CPP +++ b/Adam/Gr/GrTextBase.CPP @@ -2,9 +2,9 @@ #help_file "::/Doc/TextBase" asm { -USE64 //************************************ -_TEXT_CHAR:://Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d); +_TEXT_CHAR:: +//Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d); //Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP @@ -81,7 +81,8 @@ _TEXT_CHAR:://Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 POP RBP RET1 40 //************************************ -_TEXT_LEN_STR:://Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s) +_TEXT_LEN_STR:: +//Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s) //Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP @@ -156,7 +157,8 @@ _TEXT_LEN_STR:://Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s) POP RBP RET1 48 //************************************ -_TEXT_LEN_ATTR_STR:://Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr) +_TEXT_LEN_ATTR_STR:: +//Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr) //Must be called 30fps in Fs->draw_it() callback. PUSH RBP MOV RBP,RSP @@ -307,23 +309,28 @@ _TEXT_LEN_ATTR:://Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr) POP RBP RET1 40 } -public _extern _TEXT_CHAR Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d); //Plot char. Must be called 30fps in Fs->draw_it() callback. -public _extern _TEXT_LEN_STR Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s); //Plot str with len. Must be called 30fps in Fs->draw_it() callback. -public _extern _TEXT_LEN_ATTR_STR Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr); //Plot attr str with len. Must be called 30fps in Fs->draw_it() callback. -public _extern _TEXT_LEN_ATTR Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr); //Plot attrs with len. Must be called 30fps in Fs->draw_it() callback. +public _extern _TEXT_CHAR Bool TextChar(CTask *task,Bool allow_border=FALSE, +I64 x,I64 y,I64 d); //Plot char. 30fps in Fs->draw_it() callback. +public _extern _TEXT_LEN_STR Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len, +I64 attr,U8 *s); //Plot str with len. 30fps in Fs->draw_it() callback. +public _extern _TEXT_LEN_ATTR_STR Bool TextLenAttrStr(CTask *task,I64 x,I64 y, +I64 len,U32 *_attr); //Plot attr str with len. 30fps in Fs->draw_it() callback. +public _extern _TEXT_LEN_ATTR Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len, +I64 attr); //Plot attrs with len. 30fps in Fs->draw_it() callback. public U0 TextPrint(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...) -{//Plot chars. Must be called 30fps in Fs->draw_it() callback. +{//Plot chars. 30fps in Fs->draw_it() callback. //You probably want $LK,"GrPrint",A="MN:GrPrint"$() or just $LK,"Print",A="MN:Print"$(). U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); TextLenStr(task,x,y,StrLen(buf),attr<<8,buf); Free(buf); } -public U0 TextBorder(CTask *task=NULL,I64 l,I64 r,I64 t,I64 b,I64 attr,Bool solid) -{//Plot border square. Must be called 30fps in Fs->draw_it() callback. +public U0 TextBorder(CTask *task=NULL, + I64 l,I64 r,I64 t,I64 b,I64 attr,Bool solid) +{//Plot border square. 30fps in Fs->draw_it() callback. //Draws window borders or DolDoc text button borders. -//Set task=sys_winmgr_task for no clipping. + //Set task=sys_winmgr_task for no clipping. I64 i; if (!task) task=Fs; attr<<=8; @@ -357,7 +364,7 @@ public U0 TextBorder(CTask *task=NULL,I64 l,I64 r,I64 t,I64 b,I64 attr,Bool soli } public U0 TextRect(I64 l,I64 r,I64 t,I64 b,I64 d) -{//Fill text rect. Must be called 30fps in Fs->draw_it() callback. +{//Fill text rect. 30fps in Fs->draw_it() callback. I64 y,w; if (l>r || t>b) return; if (t<0) t=0; diff --git a/Adam/Gr/SpriteBitMap.CPP b/Adam/Gr/SpriteBitMap.CPP index 5eb76d2..e82f1a8 100644 --- a/Adam/Gr/SpriteBitMap.CPP +++ b/Adam/Gr/SpriteBitMap.CPP @@ -1,4 +1,4 @@ -#help_index "Graphics/Sprite" +#help_index "Graphics/Sprite;Sprites" #define GBM_EXIT 0 #define GBM_MAIN_MENU 1 @@ -43,7 +43,7 @@ GrInit4; I64 PopUpSpriteBitMap(CColorROPU32 color,I64 width) { I64 i; - U8 *st1,*st2,buf[136]; + U8 *st1,*st2,buf[STR_LEN]; CDoc *doc=DocNew; Color2Str(buf,color); @@ -98,11 +98,12 @@ U0 GrBitMapEdPrepPersistentDC(CDC *dc,I64 xx1,I64 yy1,CDC *img) GrBlot(dc,xx1,yy1,img); } -U0 GrBitMapEdTrimToExtents(CDC **_img,I64 *_xx1,I64 *_yy1,I64 *_xx2,I64 *_yy2,CColorROPU32 bkcolor) +U0 GrBitMapEdTrimToExtents(CDC **_img,I64 *_xx1,I64 *_yy1, + I64 *_xx2,I64 *_yy2,CColorROPU32 bkcolor) { CDC *img=*_img; I64 i,c, - x1=0,y1=0,x2=img->width-1,y2=img->height-1; //inclusive + x1=0,y1=0,x2=img->width-1,y2=img->height-1; //inclusive while (y1width-1); *_yy2+=y2-(img->height-1); //not inclusive DCDel(img); } -U0 GrBitMapEdAddOutline(CDC *img,I64 width,CColorROPU32 color,CColorROPU32 bkcolor) +U0 GrBitMapEdAddOutline(CDC *img,I64 width, + CColorROPU32 color,CColorROPU32 bkcolor) { I64 i,j,k,c; CColorROPU32 old_color; @@ -197,10 +199,11 @@ U0 GrBitMapEdEtch(CDC *img,I64 width,CColorROPU32 bkcolor) } } -I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1,I64 *_xx2,I64 *_yy2,CDC **_img,CColorROPU32 bkcolor) +I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1, + I64 *_xx2,I64 *_yy2,CDC **_img,CColorROPU32 bkcolor) { - I64 i,j,mode=GBM_LINE,color=BLACK,width=1,msg_code,a1,a2,x1,y1,x11,y11,x22,y22, - result,xx1=*_xx1,yy1=*_yy1,xx2=*_xx2,yy2=*_yy2, + I64 i,j,mode=GBM_LINE,color=BLACK,width=1,msg_code,a1,a2,x1,y1,x11,y11, + x22,y22,result,xx1=*_xx1,yy1=*_yy1,xx2=*_xx2,yy2=*_yy2, old_de_flags=doc_e->de_flags; Bool down=FALSE; U8 *st=NULL; @@ -220,8 +223,8 @@ I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1,I64 *_xx2 dc->pen_width=1; GrBorder(dc,xx1-1,yy1-1,xx2,yy2);//This is done little bit too often. - while (msg_code=ScanMsg(&a1,&a2,1<type) { case SPT_COLOR: DocPrint(doc,"{%s}", - Color2Str(buf1,tempg->c.color)); + Color2Str(buf1,tempg->c.color)); break; case SPT_DITHER_COLOR: DocPrint(doc,"{%s}", - Color2Str(buf2,ROPF_DITHER|tempg->d.dither_color.u8[0]|tempg->d.dither_color.u8[1]<d.dither_color.u8[0]| + tempg->d.dither_color.u8[1]<pp.x1,tempg->pp.y1,tempg->pp.x2,tempg->pp.y2); + DocPrint(doc,"{(%d,%d),(%d,%d)}",tempg->pp.x1,tempg->pp.y1, + tempg->pp.x2,tempg->pp.y2); break; case SPT_RECT: DocPrint(doc,"{(%d,%d):(%d,%d)}",tempg->pp.x1,tempg->pp.y1, - tempg->pp.x2-tempg->pp.x1,tempg->pp.y2-tempg->pp.y1); + tempg->pp.x2-tempg->pp.x1,tempg->pp.y2-tempg->pp.y1); break; case SPT_ROTATED_RECT: DocPrint(doc,"{(%d,%d):(%d,%d),%0.4f}",tempg->ppa.x1,tempg->ppa.y1, - tempg->ppa.x2-tempg->ppa.x1,tempg->ppa.y2-tempg->ppa.y1, - 180/ã*Wrap(tempg->ppa.angle)); + tempg->ppa.x2-tempg->ppa.x1,tempg->ppa.y2-tempg->ppa.y1, + 180/ã*Wrap(tempg->ppa.angle)); break; case SPT_PT: case SPT_FLOOD_FILL: @@ -54,12 +56,13 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) break; case SPT_ELLIPSE: DocPrint(doc,"{(%d,%d):(%d,%d),%0.4f}",tempg->pwha.x1,tempg->pwha.y1, - tempg->pwha.width,tempg->pwha.height,180/ã*Wrap(tempg->pwha.angle)); + tempg->pwha.width,tempg->pwha.height,180/ã*Wrap(tempg->pwha.angle)); break; case SPT_POLYGON: DocPrint(doc,"{%d,(%d,%d):(%d,%d),%0.4f}",tempg->pwhas.sides, - tempg->pwhas.x1,tempg->pwhas.y1,tempg->pwhas.width,tempg->pwhas.height, - 180/ã*Wrap(tempg->pwhas.angle)); + tempg->pwhas.x1,tempg->pwhas.y1, + tempg->pwhas.width,tempg->pwhas.height, + 180/ã*Wrap(tempg->pwhas.angle)); break; case SPT_TEXT: case SPT_TEXT_BOX: @@ -109,7 +112,7 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) break; case SPT_BITMAP: DocPrint(doc,"{(%d,%d):(%d,%d),\n",tempg->pwhu.x1,tempg->pwhu.y1, - tempg->pwhu.width,tempg->pwhu.height); + tempg->pwhu.width,tempg->pwhu.height); width_internal=(tempg->pwhu.width+7)&~7; if (width_internal<80) k=width_internal; @@ -148,7 +151,7 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) tri=p; for (i=0;imu.tri_cnt;i++,tri++) { DocPrint(doc,"(%s,%d,%d,%d)",Color2Str(buf1,tri->color), - tri->nums[0],tri->nums[1],tri->nums[2]); + tri->nums[0],tri->nums[1],tri->nums[2]); if (i+1mu.tri_cnt) DocPrint(doc,","); if (++col>=3 && i+1mu.tri_cnt) { DocPrint(doc,"\n"); @@ -173,7 +176,7 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tempg) tri=p; for (i=0;ipmu.tri_cnt;i++,tri++) { DocPrint(doc,"(%s,%d,%d,%d)",Color2Str(buf1,tri->color), - tri->nums[0],tri->nums[1],tri->nums[2]); + tri->nums[0],tri->nums[1],tri->nums[2]); if (i+1pmu.tri_cnt) DocPrint(doc,","); if (++col>=3 && i+1pmu.tri_cnt) { DocPrint(doc,"\n"); @@ -195,7 +198,7 @@ public U0 Sprite2Code(CDoc *doc=NULL,U8 *elems) } } -CSprite *Code2SpriteElem(CLex *lx,I64 type) +CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) { I64 i,num1,num2,size; CSprite *result,g; @@ -209,10 +212,10 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) sub_switch_start: case SPT_COLOR: case SPT_DITHER_COLOR: - st=LexFirstRem(lx,"}"); + st=LexFirstRem(cc,"}"); color=Str2ColorU32(st); Free(st); - Lex(lx); //Skip color + Lex(cc); //Skip color g.c.color=color.c0.color; if (color&ROPF_DITHER) { g.d.dither_color.u8[1]=color.c1.color; @@ -222,8 +225,8 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) break; case SPT_TRANSFORM_ON: case SPT_TRANSFORM_OFF: - Lex(lx); //Skip { - if (LexExpressionI64(lx)) + Lex(cc); //Skip { + if (LexExpressionI64(cc)) g.type=SPT_TRANSFORM_ON; else g.type=SPT_TRANSFORM_OFF; @@ -231,44 +234,44 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) case SPT_LINE: case SPT_ARROW: case SPT_PLANAR_SYMMETRY: - Lex(lx); //Skip { + Lex(cc); //Skip { g.type=type; - LexD2I32(lx,&g.pp.x1); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - LexD2I32(lx,&g.pp.x2); + LexD2I32(cc,&g.pp.x1); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + LexD2I32(cc,&g.pp.x2); break; case SPT_RECT: case SPT_ROTATED_RECT: - Lex(lx); //Skip { - LexD2I32(lx,&g.pp.x1); - if (lx->token!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); //Skip : - LexD2I32(lx,&g.pp.x2); + Lex(cc); //Skip { + LexD2I32(cc,&g.pp.x1); + if (cc->token!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); //Skip : + LexD2I32(cc,&g.pp.x2); g.ppa.x2+=g.pp.x1; g.ppa.y2+=g.pp.y1; - if (lx->token==',') { - Lex(lx); //Skip , - g.ppa.angle=ã/180*LexExpressionF64(lx); + if (cc->token==',') { + Lex(cc); //Skip , + g.ppa.angle=ã/180*LexExpressionF64(cc); g.type=SPT_ROTATED_RECT; } else g.type=SPT_RECT; break; case SPT_PT: case SPT_SHIFT: - Lex(lx); //Skip { + Lex(cc); //Skip { g.type=type; - LexD2I32(lx,&g.p.x1); + LexD2I32(cc,&g.p.x1); break; case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: - Lex(lx); //Skip { - LexD2I32(lx,&g.p.x1); - if (lx->token==',') { - Lex(lx); //Skip , - i=LexExpressionI64(lx); + Lex(cc); //Skip { + LexD2I32(cc,&g.p.x1); + if (cc->token==',') { + Lex(cc); //Skip , + i=LexExpressionI64(cc); } else i=0; if (i) @@ -277,36 +280,36 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) g.type=SPT_FLOOD_FILL; break; case SPT_WIDTH: - Lex(lx); //Skip { - g.w.width=LexExpressionI64(lx); + Lex(cc); //Skip { + g.w.width=LexExpressionI64(cc); g.type=SPT_WIDTH; break; case SPT_CIRCLE: - Lex(lx); //Skip { + Lex(cc); //Skip { g.type=SPT_CIRCLE; - LexD2I32(lx,&g.pr.x1); - if (lx->token!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); //Skip : - g.pr.radius=LexExpressionI64(lx); + LexD2I32(cc,&g.pr.x1); + if (cc->token!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); //Skip : + g.pr.radius=LexExpressionI64(cc); break; case SPT_POLYGON: - Lex(lx); //Skip { - g.pwhas.sides=LexExpressionI64(lx); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); + Lex(cc); //Skip { + g.pwhas.sides=LexExpressionI64(cc); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); case SPT_ELLIPSE: - Lex(lx); //Skip { + Lex(cc); //Skip { g.type=type; - LexD2I32(lx,&g.pwha.x1); - if (lx->token!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); //Skip : - LexD2I32(lx,&g.pwha.width); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - g.pwha.angle=ã/180*LexExpressionF64(lx); + LexD2I32(cc,&g.pwha.x1); + if (cc->token!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); //Skip : + LexD2I32(cc,&g.pwha.width); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + g.pwha.angle=ã/180*LexExpressionF64(cc); break; sub_switch_end: size=SpriteElemSize(&g)+offset(CSprite.start); @@ -316,15 +319,15 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - Lex(lx); //Skip { + Lex(cc); //Skip { g.type=type; - LexD2I32(lx,&g.ps.x1); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - if (Lex(lx)==TK_STR) //Skip , - st=LexExtStr(lx); + LexD2I32(cc,&g.ps.x1); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + if (Lex(cc)==TK_STR) //Skip , + st=LexExtStr(cc); else - LexExcept(lx,"expecting string at "); + LexExcept(cc,"expecting string at "); size=SpriteElemQuedBaseSize(type); i=StrLen(st)+1; result=MAlloc(size+i); @@ -333,19 +336,19 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) Free(st); break; case SPT_POLYLINE: - Lex(lx); //Skip { + Lex(cc); //Skip { g.type=SPT_POLYLINE; QueInit(&rootp); - while (lx->token=='(') { + while (cc->token=='(') { tempp=CAlloc(sizeof(CQueD3I32)); - LexD2I32(lx,&tempp->p); + LexD2I32(cc,&tempp->p); QueIns(tempp,rootp.last); g.nu.num++; - if (lx->token==',') - Lex(lx); //Skip , + if (cc->token==',') + Lex(cc); //Skip , } if (g.nu.num<2) - LexExcept(lx,"expecting point at "); + LexExcept(cc,"expecting point at "); size=SpriteElemQuedBaseSize(SPT_POLYLINE); result=MAlloc(size+g.nu.num*sizeof(CD2I32)); MemCpy(result,&g,size); @@ -363,21 +366,21 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - Lex(lx); //Skip { + Lex(cc); //Skip { QueInit(&rootp); - while (lx->token=='(') { + while (cc->token=='(') { tempp=CAlloc(sizeof(CQueD3I32)); - LexD3I32(lx,&tempp->p); + LexD3I32(cc,&tempp->p); QueIns(tempp,rootp.last); g.nu.num++; - if (lx->token==',') - Lex(lx); //Skip , + if (cc->token==',') + Lex(cc); //Skip , } if (g.nu.num<2) - LexExcept(lx,"expecting point at "); + LexExcept(cc,"expecting point at "); size=SpriteElemQuedBaseSize(type); result=MAlloc(size+g.nu.num*sizeof(CD3I32)); - if (LexExpressionI64(lx)) { + if (LexExpressionI64(cc)) { if (type==SPT_BSPLINE2||type==SPT_BSPLINE2_CLOSED) g.type=SPT_BSPLINE2_CLOSED; else @@ -400,21 +403,21 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) } break; case SPT_POLYPT: - Lex(lx); //Skip { - LexD2I32(lx,&g.npu.x); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); + Lex(cc); //Skip { + LexD2I32(cc,&g.npu.x); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); tempv=QueVectU8New; while (TRUE) { - if (!(i=LexGetChar(lx))) - LexExcept(lx,"expecting '}' at "); + if (!(i=LexGetChar(cc))) + LexExcept(cc,"expecting '}' at "); if (i=='}') break; if ('0'<=i<='7') QueVectU8Put(tempv,g.npu.num++,i-'0'); } - Bts(&lx->flags,Lf_USE_LAST_U16); - Lex(lx); //Load '}' + Bts(&cc->flags,CCf_USE_LAST_U16); + Lex(cc); //Load '}' g.type=SPT_POLYPT; size=SpriteElemQuedBaseSize(SPT_POLYPT); result=CAlloc(size+(g.npu.num*3+7)>>3); @@ -425,19 +428,19 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) QueVectU8Del(tempv); break; case SPT_BITMAP: - Lex(lx); //Skip { - LexD2I32(lx,&g.pwhu.x1); - if (lx->token!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); //Skip : - LexD2I32(lx,&g.pwhu.width); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); + Lex(cc); //Skip { + LexD2I32(cc,&g.pwhu.x1); + if (cc->token!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); //Skip : + LexD2I32(cc,&g.pwhu.width); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); tempv=QueVectU8New; num1=0; while (TRUE) { - if (!(i=ToUpper(LexGetChar(lx)))) - LexExcept(lx,"expecting '}' at "); + if (!(i=ToUpper(LexGetChar(cc)))) + LexExcept(cc,"expecting '}' at "); if (i=='}') break; if ('0'<=i<='9') @@ -449,8 +452,8 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) else if (i=='_') QueVectU8Put(tempv,num1++,0); } - Bts(&lx->flags,Lf_USE_LAST_U16); - Lex(lx); //Load '}' + Bts(&cc->flags,CCf_USE_LAST_U16); + Lex(cc); //Load '}' g.type=SPT_BITMAP; size=SpriteElemQuedBaseSize(SPT_BITMAP); result=CAlloc(size+num1); @@ -462,62 +465,62 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) break; case SPT_MESH: case SPT_SHIFTABLE_MESH: - Lex(lx); //Skip { - if (LexExpressionI64(lx)) { + Lex(cc); //Skip { + if (LexExpressionI64(cc)) { g.type=SPT_SHIFTABLE_MESH; - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - LexD3I32(lx,&g.pmu.x); - if (lx->token!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); //Skip : + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + LexD3I32(cc,&g.pmu.x); + if (cc->token!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); //Skip : } else { g.type=SPT_MESH; - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , } num1=0; QueInit(&rootp); - while (lx->token=='(') { + while (cc->token=='(') { tempp=CAlloc(sizeof(CQueD3I32)); - LexD3I32(lx,&tempp->p); + LexD3I32(cc,&tempp->p); QueIns(tempp,rootp.last); num1++; - if (lx->token==',') - Lex(lx); //Skip , + if (cc->token==',') + Lex(cc); //Skip , } - if (lx->token!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); //Skip : + if (cc->token!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); //Skip : num2=0; QueInit(&roott); - while (lx->token=='(') { + while (cc->token=='(') { tempt=CAlloc(sizeof(CQueMeshTri)); - st=LexFirstRem(lx,","); + st=LexFirstRem(cc,","); tempt->color=Str2ColorU32(st); Free(st); - Lex(lx); //Skip color - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - tempt->nums[0]=LexExpressionI64(lx); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - tempt->nums[1]=LexExpressionI64(lx); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - tempt->nums[2]=LexExpressionI64(lx); - if (lx->token!=')') - LexExcept(lx,"expecting ')' at "); - Lex(lx); //Skip ) + Lex(cc); //Skip color + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + tempt->nums[0]=LexExpressionI64(cc); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + tempt->nums[1]=LexExpressionI64(cc); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + tempt->nums[2]=LexExpressionI64(cc); + if (cc->token!=')') + LexExcept(cc,"expecting ')' at "); + Lex(cc); //Skip ) QueIns(tempt,roott.last); num2++; - if (lx->token==',') - Lex(lx); //Skip , + if (cc->token==',') + Lex(cc); //Skip , } if (g.type==SPT_MESH) { g.mu.vertex_cnt=num1; @@ -549,10 +552,10 @@ CSprite *Code2SpriteElem(CLex *lx,I64 type) } break; } - if (lx->token!='}') - LexExcept(lx,"expecting '}' at "); - if (Lex(lx)!=';') - LexExcept(lx,"expecting ';' at "); + if (cc->token!='}') + LexExcept(cc,"expecting '}' at "); + if (Lex(cc)!=';') + LexExcept(cc,"expecting ';' at "); return result; } @@ -561,24 +564,24 @@ public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL) CSprite root; U8 *result; Bool okay=TRUE,unlock_doc=DocLock(doc); - CLex *lx=LexNew(,LF_DONT_FREE_BUF); - CHashTable *old_hash_table_lst=lx->htc.hash_table_lst; + CCmpCtrl *cc=CmpCtrlNew(,CCF_DONT_FREE_BUF); + CHashTable *old_hash_table_lst=cc->htc.hash_table_lst; CHashGeneric *temph; I64 i,size=0; QueInit(&root); - LexAttachDoc(lx,,doc); + LexAttachDoc(cc,,doc); try { do { - lx->htc.hash_table_lst=NULL; - if (Lex(lx)==TK_IDENT && //Skip ; - (temph=HashFind(lx->cur_str,gr.sprite_hash,SPHT_ELEM_CODE))) { + cc->htc.hash_table_lst=NULL; + if (Lex(cc)==TK_IDENT && //Skip ; + (temph=HashFind(cc->cur_str,gr.sprite_hash,SPHT_ELEM_CODE))) { i=temph->user_data0; - lx->htc.hash_table_lst=old_hash_table_lst; - if (Lex(lx)=='{') //Skip ident - QueIns(Code2SpriteElem(lx,i),root.last); - } else if (lx->token) - LexExcept(lx,"expecting sprite element type name at "); - } while (lx->token); + cc->htc.hash_table_lst=old_hash_table_lst; + if (Lex(cc)=='{') //Skip ident + QueIns(Code2SpriteElem(cc,i),root.last); + } else if (cc->token) + LexExcept(cc,"expecting sprite element type name at "); + } while (cc->token); okay=TRUE; } catch { Fs->catch_except=TRUE; @@ -587,7 +590,7 @@ public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL) if (unlock_doc) DocUnlock(doc); if (okay) { - LexDel(lx); //TODO: can crash + CmpCtrlDel(cc); //TODO: can crash result=SpriteQue2Sprite(&root,&size); } else { result=NULL; diff --git a/Adam/Gr/SpriteEd.CPP b/Adam/Gr/SpriteEd.CPP index 2266838..763bd93 100644 --- a/Adam/Gr/SpriteEd.CPP +++ b/Adam/Gr/SpriteEd.CPP @@ -1,4 +1,4 @@ -#help_index "Graphics/Sprite" +#help_index "Graphics/Sprite;Sprites" Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64) { @@ -10,7 +10,8 @@ Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64) return TRUE; } -CSprite *SpriteElemNum2QueEntry(CSprite *root,I64 elem_num,I64 *_x=NULL,I64 *_y=NULL) +CSprite *SpriteElemNum2QueEntry(CSprite *root,I64 elem_num, + I64 *_x=NULL,I64 *_y=NULL) { I64 xx=0,yy=0; CSprite *result=root->next; @@ -30,8 +31,8 @@ CSprite *Sprite2SpriteQue(U8 *elems) { I64 s; CSprite *result=CAlloc(sizeof(CSprite)), - *tempg=elems-offset(CSprite.start),*tempg1; - result->next=result->last=result; + *tempg=elems-offset(CSprite.start),*tempg1; + QueInit(result); while (tempg->type) { tempg1=MAlloc(SpriteElemSize(tempg)+offset(CSprite.start)); s=SpriteElemSize(tempg); @@ -151,16 +152,16 @@ CSprite *SpriteTransformCircle(I64 r[4][4],CSprite *tempg) tempg1->type=SPT_ELLIPSE; x=tempg->pr.x1; y=tempg->pr.y1; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg1->pwha.x1=x; tempg1->pwha.y1=y; x=radius; y=0; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); R2P(&m1,&a1,x,y); x=0; y=radius; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); m2=Sqrt(x*x+y*y); tempg1->pwha.width =ToI64(m1)/0x10000; @@ -181,7 +182,7 @@ CSprite *SpriteTransformEllipse(I64 r[4][4],CSprite *tempg) tempg1->pwhas.sides=tempg->pwhas.sides; x=tempg->pwha.x1; y=tempg->pwha.y1; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg1->pwha.x1=x; tempg1->pwha.y1=y; @@ -191,13 +192,13 @@ CSprite *SpriteTransformEllipse(I64 r[4][4],CSprite *tempg) x=x_radius*c; y=x_radius*s; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); R2P(&m1,&a1,x,y); x=-y_radius*s; y=y_radius*c; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); R2P(&m2,&a2,x,y); m2*=Abs(Sin(a2-a1)); @@ -214,13 +215,13 @@ CSprite *SpriteTransformRect(I64 r[4][4],CSprite *tempg,F64 { I64 x,y,z,w,h; F64 m1,a1,m2,a2,s,c, - x_radius=(tempg->pp.x2-tempg->pp.x1)<<16, - y_radius=(tempg->pp.y2-tempg->pp.y1)<<16; + x_radius=(tempg->pp.x2-tempg->pp.x1)<<16, + y_radius=(tempg->pp.y2-tempg->pp.y1)<<16; CSprite *tempg1=CAlloc(SpriteElemQuedBaseSize(SPT_ROTATED_RECT)); tempg1->type=SPT_ROTATED_RECT; x=tempg->pp.x1; y=tempg->pp.y1; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg1->ppa.x1=x; tempg1->ppa.y1=y; @@ -230,13 +231,13 @@ CSprite *SpriteTransformRect(I64 r[4][4],CSprite *tempg,F64 x=x_radius*c; y=x_radius*s; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); R2P(&m1,&a1,x,y); x=-y_radius*s; y=y_radius*c; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); R2P(&m2,&a2,x,y); m2*=Abs(Sin(a2-a1)); @@ -259,13 +260,13 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) CSprite *tempg1; x=0; y=0; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); minx=maxx=x; miny=maxy=y; minz=maxz=z; x=0; y=tempg->pwhu.height; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); if (xmaxx) maxx=x; if (ymaxx) maxz=z; x=tempg->pwhu.width; y=0; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); if (xmaxx) maxx=x; if (ymaxx) maxz=z; x=tempg->pwhu.width; y=tempg->pwhu.height; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); if (xmaxx) maxx=x; if (yr); - GrSetRotMat(tempb,r); + DCMat4x4Set(tempb,r); tempb->flags|=DCF_TRANSFORMATION; tempb->x=-minx; @@ -321,12 +322,12 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) tempg1->type=tempg->type; x=tempg->pwhu.x1; y=tempg->pwhu.y1; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg1->pwhu.x1=x; tempg1->pwhu.y1=y; x=0; y=0; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg1->pwhu.x1+=minx-x; tempg1->pwhu.y1+=miny-y; @@ -336,21 +337,21 @@ CSprite *SpriteTransformBitmap(I64 r[4][4],CSprite *tempg) U0 SpriteTransform(I64 r[4][4],CSprite *root) { I64 i,j,k,num, - x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; + x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; I32 *ptr; CD3I32 *p; CSprite *tempg=root->next,root2,*tempg1,*tempg2,*tempg3; while (tempg!=root) { switch (tempg->type) { case SPT_WIDTH: - tempg->w.width*=Sqrt(GrRotNormSqr65536(r))/65536; + tempg->w.width*=Sqrt(Mat4x4NormSqr65536(r))/65536; if (tempg->w.width<0) tempg->w.width=0; break; case SPT_PLANAR_SYMMETRY: case SPT_ARROW: case SPT_LINE: x=tempg->pp.x2; y=tempg->pp.y2; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg->pp.x2=x; tempg->pp.y2=y; case SPT_PT: @@ -360,7 +361,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: x=tempg->p.x1; y=tempg->p.y1; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg->p.x1=x; tempg->p.y1=y; break; @@ -404,7 +405,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) ptr=&tempg->nu.u; for (i=0;inu.num;i++) { x=ptr[i<<1]; y=ptr[i<<1+1]; z=0; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); ptr[i<<1]=x; ptr[i<<1+1]=y; } @@ -413,7 +414,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) QueInit(&root2); x=tempg->npu.x; y=tempg->npu.y; z=0; x1=x; y1=y; z1=z; //unrotated cur coordinates - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); ptr=&tempg->npu.u; k=tempg->npu.num*3; x2=x; y2=y; z2=z; //rotated start coordinates @@ -423,7 +424,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) x1+=gr_x_offsets[j]; y1+=gr_y_offsets[j]; x=x1; y=y1; z=z1; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); Line(&root2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot); x3=x; y3=y; z3=z; } @@ -454,8 +455,8 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) while (tempg1!=&root2) { tempg2=tempg1->next; BFieldOrU32(ptr,i, - polypt_map[SignI64(tempg1->p.x1-x3)+1+ - 3*(SignI64(tempg1->p.y1-y3)+1)]); + polypt_map[SignI64(tempg1->p.x1-x3)+1+ + 3*(SignI64(tempg1->p.y1-y3)+1)]); i+=3; x3=tempg1->p.x1;y3=tempg1->p.y1; QueRem(tempg1); @@ -476,7 +477,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) p=&tempg->nu.u; for (i=0;inu.num;i++,p++) { x=p->x; y=p->y; z=p->z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); p->x=x; p->y=y; p->z=z; @@ -484,14 +485,14 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) break; case SPT_SHIFTABLE_MESH: x=tempg->pmu.x; y=tempg->pmu.y; z=tempg->pmu.z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempg->pmu.x=x; tempg->pmu.y=y; tempg->pmu.z=z; p=&tempg->pmu.u; for (i=0;ipmu.vertex_cnt;i++,p++) { x=p->x; y=p->y; z=p->z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); p->x=x; p->y=y; p->z=z; @@ -501,7 +502,7 @@ U0 SpriteTransform(I64 r[4][4],CSprite *root) p=&tempg->mu.u; for (i=0;imu.vertex_cnt;i++,p++) { x=p->x; y=p->y; z=p->z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); p->x=x; p->y=y; p->z=z; @@ -518,7 +519,7 @@ CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num) CDocEntry *doc_e=doc->root.next; Bool found=FALSE; I64 num=0; - result->next=result->last=result; + QueInit(result); while (doc_e!=doc) { if (doc_e->type_u8==DOCT_MENU_VAL && doc_e->left_exp>=0) { tempg=SpriteElemNum2QueEntry(root,doc_e->left_exp); @@ -549,11 +550,12 @@ U0 SpriteSideBarPickNew(CDoc *doc,CSprite *root,I64 old_num) U8 *st; DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite SideBar\"$$\n" - "$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/SpriteSideBar.TXT.Z\"$$\n\n"); + "$$LK+PU+CX,\"Click for Help\"," + "A=\"FI:::/Doc/SpriteSideBar.TXT.Z\"$$\n\n"); tempg=root->next; while (tempg!=root) { - st=SpriteElem2OneLineSummary(tempg); + st=SpriteElem2Summary(tempg); if (cur_elem_num==old_num) { DocPrint(doc,"$$LTRED$$"); doc_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++); @@ -616,11 +618,12 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) CDoc *doc=DocNew,*doc2,*old_put=DocPut; StrPrint(doc->filename.name,"AI:0x%X",doc); DocPrint(doc,"//$$PURPLE$$$$TX+CX,\"Sprite Edit as Text\"$$$$FG$$\n" - "//$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/SpriteEdText.TXT.Z\"$$\n\n"); + "//$$LK+PU+CX,\"Click for Help\"," + "A=\"FI:::/Doc/SpriteEdText.TXT.Z\"$$\n\n"); Sprite2Code(doc,elems); Free(elems); while (TRUE) { - if (result=PopUpPrint("DocDo(0x%X,0x%X);",doc,0)) { + if (result=PopUpPrint("DocEd(0x%X,0x%X);",doc,0)) { Fs->put_doc=doc2=DocNew; "$$WW,1$$"; if (elems=Code2Sprite(doc)) { @@ -633,7 +636,7 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) *_cur_elem_num=QueCnt(root); //TODO: Might want to improve this. break; } else { - PopUpPrint("DocDo(0x%X,0x%X);",doc2,0); + PopUpPrint("DocEd(0x%X,0x%X);",doc2,0); DocDel(doc2); Fs->put_doc=old_put; } @@ -681,7 +684,8 @@ I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num) "$$MU-UL,\"Set Origin\",LE=GED_SET_ORIGIN$$\n" "$$MU-UL,\"Shift Origin\",LE=GED_SHIFT_ORIGIN$$\n" "$$MU-UL,\"Insert Shift SubOrigin\",LE=GED_SHIFT_SUB_ORIGIN$$\n" - "$$MU-UL,\"Pick or Delete Objects Graphically\",LE=GED_PICK_GRAPHICALLY$$\n" + "$$MU-UL,\"Pick or Delete Objects Graphically\"," + "LE=GED_PICK_GRAPHICALLY$$\n" "$$MU-UL,\"Delete\",LE=GED_DELETE$$\n" "$$MU-UL,\"Insert Clipboard Sprite's\",LE=GED_INS_CLIPBOARD$$\n" "\n$$PURPLE$$$$MU-UL,\"+] Sprite Main Menu\",LE=GED_MAIN_MENU$$$$LTBLUE$$\n" @@ -721,6 +725,19 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) QueInit(root); while (tempg->type) { switch (tempg->type) { + case SPT_ELLIPSE: + case SPT_POLYGON: + temppe=CAlloc(sizeof(CEdSprite)); + temppe->type=GSPT_WIDTH_HEIGHT; + temppe->xx=x; + temppe->yy=y; + temppe->x=&tempg->pwha.x1; + temppe->y=&tempg->pwha.y1; + temppe->w=&tempg->pwha.width; + temppe->h=&tempg->pwha.height; + temppe->num=num; + QueIns(temppe,root->last); + goto pq_x1_y1; case SPT_RECT: case SPT_ROTATED_RECT: case SPT_LINE: @@ -742,6 +759,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: case SPT_CIRCLE: +pq_x1_y1: temppe=CAlloc(sizeof(CEdSprite)); temppe->type=GSPT_SIMPLE_PT; temppe->xx=x; @@ -755,19 +773,6 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) x+=tempg->p.x1; y+=tempg->p.y1; break; - case SPT_ELLIPSE: - case SPT_POLYGON: - temppe=CAlloc(sizeof(CEdSprite)); - temppe->type=GSPT_WIDTH_HEIGHT; - temppe->xx=x; - temppe->yy=y; - temppe->x=&tempg->pwha.x1; - temppe->y=&tempg->pwha.y1; - temppe->w=&tempg->pwha.width; - temppe->h=&tempg->pwha.height; - temppe->num=num; - QueIns(temppe,root->last); - break; case SPT_POLYLINE: ptr=&tempg->nu.u; for (i=0;inu.num;i++) { @@ -888,10 +893,11 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) SpritePtQueNew(elems,x,y,&root); cur_elem_num=0; if (root.next!=&root) { - old_preempt=Preempt(OFF); + old_preempt=Preempt; while (TRUE) { SpriteCtrlPtsDraw(dc,&root); //has WinMgrSync - switch (msg_code=ScanMsg(&a1,&a2,1<type) { case GSPT_SIMPLE_PT: - dd=SqrI64(*temppe->x+temppe->xx-xx)+SqrI64(*temppe->y+temppe->yy-yy); + dd=SqrI64(*temppe->x+temppe->xx-xx)+ + SqrI64(*temppe->y+temppe->yy-yy); break; case GSPT_WIDTH_HEIGHT: - dd=SqrI64(*temppe->x+*temppe->w+temppe->xx-xx)+SqrI64(*temppe->y+*temppe->h+temppe->yy-yy); + dd=SqrI64(*temppe->x+*temppe->w+temppe->xx-xx)+ + SqrI64(*temppe->y+*temppe->h+temppe->yy-yy); break; } if (ddtype) { case GSPT_SIMPLE_PT: if (xx<=*temppe->x+temppe->xx<=xx2 && - yy<=*temppe->y+temppe->yy<=yy2) + yy<=*temppe->y+temppe->yy<=yy2) temppe->flags|=GSPF_SELECTED; break; case GSPT_WIDTH_HEIGHT: if (xx<=*temppe->x+*temppe->w+temppe->xx<=xx2 && - yy<=*temppe->y+*temppe->h+temppe->yy<=yy2) + yy<=*temppe->y+*temppe->h+temppe->yy<=yy2) temppe->flags|=GSPF_SELECTED; break; } @@ -969,7 +977,7 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) } break; case MSG_KEY_DOWN: - gs_key: +gs_key: switch (a1.u8[0]) { case CH_SHIFT_ESC: result=FALSE; @@ -1001,7 +1009,8 @@ gs_done: return result; } -I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,CSprite **_root,I64 *_cur_elem_num) +I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y, + CSprite **_root,I64 *_cur_elem_num) { CDocEntry *doc_e2; CDocBin *tempb; @@ -1023,15 +1032,16 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,CSprite **_root,I64 *_cur_el StrCpy(Fs->task_title,DefineSub(i,"ST_SPRITE_ED_MENU")); switch (i) { case GED_PICK_GRAPHICALLY: - AcctOneTimePopUp(ARf_CSPRITE_PICK_GRAPHICALLY, + RegOneTimePopUp(ARf_CSPRITE_PICK_GRAPHICALLY, "You can delete elements by\n" "holding $$GREEN$$Delete$$FG$$ and clicking.\n"); doc_e->de_flags=old_de_flags; doc->cur_sprite=tempb->data; - doc->cur_sprite_elem_num=0; + doc->nearest_sprite_elem_num=0; del_down=FALSE; do { - msg_code=GetMsg(&a1,&a2,1<cur_sprite_elem_num; + msg_code==MSG_KEY_DOWN && a2&SCF_IP_L_DOWN && + a2.u8[0]==SC_DELETE) { + *_cur_elem_num=doc->nearest_sprite_elem_num; cur_elem=SpriteElemNum2QueEntry(*_root,*_cur_elem_num); if (cur_elem!=*_root) { QueRem(cur_elem); @@ -1048,12 +1059,12 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,CSprite **_root,I64 *_cur_el SpriteEdUpdate(doc,tempb,*_root); } doc->cur_sprite=tempb->data; - doc->cur_sprite_elem_num=0; + doc->nearest_sprite_elem_num=0; if (msg_code==MSG_KEY_DOWN) GetMsg(&a1,&a2,1<cur_sprite_elem_num; + *_cur_elem_num=doc->nearest_sprite_elem_num; doc->cur_sprite=NULL; break; case GED_SET_ORIGIN: @@ -1076,7 +1087,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,CSprite **_root,I64 *_cur_el break; case GED_SHIFT_PTS: case GED_SHIFT_RECTS: - AcctOneTimePopUp(ARf_CSPRITE_PTS_RECTANGLES, + RegOneTimePopUp(ARf_CSPRITE_PTS_RECTANGLES, "You can switch between points\n" "and rectangles with '$$GREEN$$p$$FG$$' and '$$GREEN$$r$$FG$$'.\n" "Press '$$GREEN$$r$$FG$$' after one rectangle\n" @@ -1115,7 +1126,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,CSprite **_root,I64 *_cur_el *_cur_elem_num+=1; break; case GED_INS_CLIPBOARD: - AcctOneTimePopUp(ARf_CSPRITE_INS_CLIPBOARD, + RegOneTimePopUp(ARf_CSPRITE_INS_CLIPBOARD, "You will probably want to shift around\n" "the location of element groups. Use\n" "'Insert shift sub-origin' after picking the\n" diff --git a/Adam/Gr/SpriteMain.CPP b/Adam/Gr/SpriteMain.CPP index 82f64ee..de8dd53 100644 --- a/Adam/Gr/SpriteMain.CPP +++ b/Adam/Gr/SpriteMain.CPP @@ -1,4 +1,4 @@ -#help_index "Graphics/Sprite" +#help_index "Graphics/Sprite;Sprites" #define SPT_MENU -2 #define SPT_INS_SCREEN_BITMAP -3 @@ -37,12 +37,17 @@ I64 PopUpSpriteMain(CSprite **_root,I64 *_cur_elem_num) "$$MU-UL,\"BSpline2 Closed\",LE=SPT_BSPLINE2_CLOSED$$\n" "$$MU-UL,\"BSpline3 Closed\",LE=SPT_BSPLINE3_CLOSED$$\n" "$$MU-UL,\"Insert Screen-Captured BitMap\",LE=SPT_INS_SCREEN_BITMAP$$\n" - "$$MU-UL,\"Insert Transparent Screen-Captured BitMap\",LE=SPT_INS_TRANSPARENT_SCREEN_BITMAP$$\n" + "$$MU-UL,\"Insert Transparent Screen-Captured BitMap\"," + "LE=SPT_INS_TRANSPARENT_SCREEN_BITMAP$$\n" "$$PURPLE$$$$MU-UL,\"+] Create or Edit 3D Mesh\",LE=SPT_MESH$$\n" - "$$MU-UL,\"+] Create or Edit Shiftable 3D Mesh\",LE=SPT_SHIFTABLE_MESH$$\n" - "$$MU-UL,\"+] Convert to BitMap or Edit BitMap\",LE=SPT_BITMAP$$$$LTBLUE$$\n" - "\n$$MU-UL,\"Transform On (for use with 3D icons)\",LE=SPT_TRANSFORM_ON$$\n" - "$$MU-UL,\"Transform Off (for use with 3D icons)\",LE=SPT_TRANSFORM_OFF$$\n" + "$$MU-UL,\"+] Create or Edit Shiftable 3D Mesh\"," + "LE=SPT_SHIFTABLE_MESH$$\n" + "$$MU-UL,\"+] Convert to BitMap or Edit BitMap\"," + "LE=SPT_BITMAP$$$$LTBLUE$$\n" + "\n$$MU-UL,\"Transform On (for use with 3D icons)\"," + "LE=SPT_TRANSFORM_ON$$\n" + "$$MU-UL,\"Transform Off (for use with 3D icons)\"," + "LE=SPT_TRANSFORM_OFF$$\n" "\n" "$$PURPLE$$$$MU-UL,\"+] Sprite Edit Menu\",LE=SPT_ED_MENU$$$$LTBLUE$$\n" "$$MU-UL,\"Exit Sprite\",LE=SPT_EXIT$$\n" @@ -86,7 +91,8 @@ Bool PopUpExtents(I64 *_x1,I64 *_x2,I64 *_y1,I64 *_y2) return i; } -U0 SpriteSetSettings(CDC *dc,CSprite *root,I64 cur_elem_num,CColorROPU32 *_color,I64 *_width,I64 x,I64 y) +U0 SpriteSetSettings(CDC *dc,CSprite *root, + I64 cur_elem_num,CColorROPU32 *_color,I64 *_width,I64 x,I64 y) { CSprite *tempg; *_color=BLACK; @@ -101,14 +107,15 @@ U0 SpriteSetSettings(CDC *dc,CSprite *root,I64 cur_elem_num,CColorROPU32 *_color break; case SPT_DITHER_COLOR: dc->color=*_color= - tempg->d.dither_color.u8[0]| - tempg->d.dither_color.u8[1]<d.dither_color.u8[0]| + tempg->d.dither_color.u8[1]<pen_width=*_width=tempg->w.width; break; case SPT_PLANAR_SYMMETRY: - if (GrSetSymmetry3(dc,tempg->pp.x1+x,tempg->pp.y1+y,0,tempg->pp.x2+x,tempg->pp.y2+y,0,tempg->pp.x2+x,tempg->pp.y2+y,1)) + if (DCSymmetry3Set(dc,tempg->pp.x1+x,tempg->pp.y1+y,0, + tempg->pp.x2+x,tempg->pp.y2+y,0,tempg->pp.x2+x,tempg->pp.y2+y,1)) dc->flags|=DCF_SYMMETRY; else dc->flags&=~DCF_SYMMETRY; @@ -133,13 +140,13 @@ U0 SpriteScreenInit(CDC *dc,I64,I64) yy=-dc->sym.snx*8192; dc->color=RED; GrLine3(dc,dc->sym.sx-xx.i32[1],dc->sym.sy-yy.i32[1],0, - dc->sym.sx+xx.i32[1],dc->sym.sy+yy.i32[1],0,3,0); + dc->sym.sx+xx.i32[1],dc->sym.sy+yy.i32[1],0,3,0); dc->color=WHITE; GrLine3(dc,dc->sym.sx-xx.i32[1],dc->sym.sy-yy.i32[1],0, - dc->sym.sx+xx.i32[1],dc->sym.sy+yy.i32[1],0,3,1); + dc->sym.sx+xx.i32[1],dc->sym.sy+yy.i32[1],0,3,1); dc->color=BLACK; GrLine3(dc,dc->sym.sx-xx.i32[1],dc->sym.sy-yy.i32[1],0, - dc->sym.sx+xx.i32[1],dc->sym.sy+yy.i32[1],0,3,2); + dc->sym.sx+xx.i32[1],dc->sym.sy+yy.i32[1],0,3,2); dc->flags|=DCF_SYMMETRY; } dc->color=old_color; @@ -178,7 +185,8 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) SpriteSetSettings(dc,root,cur_elem_num,&color,&width,x,y); DCFill; if (eletype==SPT_MENU) { - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL; if (winmgr.fps<10) doc_e->de_flags|=DOCEF_DONT_DRAW; StrCpy(Fs->task_title,old_task_title); @@ -191,7 +199,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) switch (eletype) { case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: - AcctOneTimePopUp(ARf_FLOODFILL, + RegOneTimePopUp(ARf_FLOODFILL, ST_WARN_ST "This is affected by what's underneath\n" "when it is drawn. You will probably want to\n" "convert it to a bitmap.\n\n" @@ -200,7 +208,7 @@ I64 SpriteMainEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y) "brush strokes look cool.\n"); break; case SPT_PLANAR_SYMMETRY: - AcctOneTimePopUp(ARf_PLANAR_SYMMETRY, + RegOneTimePopUp(ARf_PLANAR_SYMMETRY, "Right-click to turn-off symmetry.\n"); break; } @@ -489,7 +497,7 @@ ei_restart: result=GE_ABORT; goto ei_done; } - msg_code=GetMsg(&a1,&a2,1<pen_width=1; do { dc2->color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(dc2,xx1+Fs->pix_left+Fs->scroll_x,yy1+Fs->pix_top+Fs->scroll_y, - xx2+Fs->pix_left+Fs->scroll_x,yy2+Fs->pix_top+Fs->scroll_y); + GrBorder(dc2,xx1+Fs->pix_left+Fs->scroll_x, + yy1+Fs->pix_top+Fs->scroll_y, + xx2+Fs->pix_left+Fs->scroll_x, + yy2+Fs->pix_top+Fs->scroll_y); msg_code=GetMsg(&a1,&a2, 1<pix_left+Fs->scroll_x+xx1,Fs->pix_top+Fs->scroll_y+yy1, - Fs->pix_left+Fs->scroll_x+xx2-1,Fs->pix_top+Fs->scroll_y+yy2-1); + Fs->pix_left+Fs->scroll_x+xx1, + Fs->pix_top+Fs->scroll_y+yy1, + Fs->pix_left+Fs->scroll_x+xx2-1, + Fs->pix_top+Fs->scroll_y+yy2-1); if (eletype==SPT_INS_TRANSPARENT_SCREEN_BITMAP) DCColorChg(img,bm_bkcolor); GrScaleZoom(i); @@ -669,7 +681,8 @@ ei_restart: DCDel(dc3); dc2->pen_width=old_width; eletype=SPT_MENU; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL; break; case SPT_CIRCLE: do { @@ -823,7 +836,8 @@ ei_restart: } while (msg_code!=MSG_IP_R_UP); case SPT_POLYLINE: if (num>1) { - tempg=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+num*sizeof(CD2I32)); + tempg=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+ + num*sizeof(CD2I32)); ptr=&tempg->nu.u; tempg2=root2.next; for (i=0;i2) { - tempg=CAlloc(SpriteElemQuedBaseSize(eletype)+num*sizeof(CD3I32)); + tempg=CAlloc(SpriteElemQuedBaseSize(eletype)+ + num*sizeof(CD3I32)); p=&tempg->nu.u; tempg2=root2.next; for (i=0;inext=root->last=root; cur_elem_num=1; } else { - SpriteSetSettings(img,root,cur_elem_num,&color,&width,-(xx1-x),-(yy1-y)); + SpriteSetSettings(img,root,cur_elem_num,&color,&width, + -(xx1-x),-(yy1-y)); Sprite3(img,-(xx1-x),-(yy1-y),0,&tempg1->start,TRUE); insert_pt=tempg1->next; QueRem(tempg1); @@ -981,7 +997,8 @@ ei_bitmap: } MemCpy(&tempg->pwhu.u,img->body,((xx2-xx1+7)&~7)*(yy2-yy1)); - switch (i=SpriteBitMapEd(doc,doc_e,dc,&xx1,&yy1,&xx2,&yy2,&img,bm_bkcolor)) { + switch (i=SpriteBitMapEd(doc,doc_e,dc,&xx1,&yy1, + &xx2,&yy2,&img,bm_bkcolor)) { case GE_EXIT: case GE_CONT: Free(tempg); @@ -1042,7 +1059,8 @@ ei_shiftable_mesh: old_mesh=NULL; } if (mesh=SpriteMeshEd(old_mesh,&size,TRUE)) { - tempg=MAlloc(SpriteElemQuedBaseSize(SPT_SHIFTABLE_MESH)-sizeof(I32)*2+size); + tempg=MAlloc(SpriteElemQuedBaseSize(SPT_SHIFTABLE_MESH) + -sizeof(I32)*2+size); tempg->type=SPT_SHIFTABLE_MESH; MemCpy(&tempg->pmu.vertex_cnt,mesh,size); Free(mesh); diff --git a/Adam/Gr/SpriteMesh.CPP b/Adam/Gr/SpriteMesh.CPP index b5c1d4d..7a28afc 100644 --- a/Adam/Gr/SpriteMesh.CPP +++ b/Adam/Gr/SpriteMesh.CPP @@ -13,7 +13,7 @@ class CMeshEdVertex CD3I32 p; //World coordinates of the point. U0 end; CD3I32 p0, - pt; //Transformed coordinates. (Screen) + pt; //Transformed coordinates. (Screen) I32 num,flags; }; @@ -58,7 +58,8 @@ CMeshEdVertex *MeshVertexNew(CMeshFrame *e,I64 x,I64 y,I64 z) return tempv; } -CMeshEdTri *MeshTriNew(CMeshFrame *e,CColorROPU32 color,CMeshEdVertex *v1,CMeshEdVertex *v2,CMeshEdVertex *v3) +CMeshEdTri *MeshTriNew(CMeshFrame *e,CColorROPU32 color, + CMeshEdVertex *v1,CMeshEdVertex *v2,CMeshEdVertex *v3) { static I64 cpu_num=0; CMeshEdTri *tempt=CAlloc(sizeof(CMeshEdTri)); @@ -201,7 +202,7 @@ U0 MeshVertexSelectRect(CMeshFrame *e,I64 mode,I64 x1,I64 x2,I64 y1,I64 y2) if (y1>y2) SwapI64(&y1,&y2); while (tempv!=&e->vertex_root) { if (x1<=tempv->pt.x<=x2 && - y1<=tempv->pt.y<=y2) { + y1<=tempv->pt.y<=y2) { if (mode==MESH_AND) tempv->flags&=~VF_SELECTED; else @@ -219,11 +220,11 @@ U0 MeshTriSelectRect(CMeshFrame *e,I64 mode,I64 x1,I64 x2,I64 y1,I64 y2) if (y1>y2) SwapI64(&y1,&y2); while (tempt!=&e->tri_root) { if (x1<=tempt->t[0]->pt.x<=x2 && - y1<=tempt->t[0]->pt.y<=y2 && - x1<=tempt->t[1]->pt.x<=x2 && - y1<=tempt->t[1]->pt.y<=y2 && - x1<=tempt->t[2]->pt.x<=x2 && - y1<=tempt->t[2]->pt.y<=y2) { + y1<=tempt->t[0]->pt.y<=y2 && + x1<=tempt->t[1]->pt.x<=x2 && + y1<=tempt->t[1]->pt.y<=y2 && + x1<=tempt->t[2]->pt.x<=x2 && + y1<=tempt->t[2]->pt.y<=y2) { if (mode==MESH_AND) tempt->flags&=~TF_SELECTED; else @@ -233,12 +234,12 @@ U0 MeshTriSelectRect(CMeshFrame *e,I64 mode,I64 x1,I64 x2,I64 y1,I64 y2) tempt->flags&=~TF_SELECTED; else if (mode==MESH_AND) { if (x1<=tempt->t[0]->pt.x<=x2 && - y1<=tempt->t[0]->pt.y<=y2 || - x1<=tempt->t[1]->pt.x<=x2 && - y1<=tempt->t[1]->pt.y<=y2 || - x1<=tempt->t[2]->pt.x<=x2 && - y1<=tempt->t[2]->pt.y<=y2) - tempt->flags&=~TF_SELECTED; + y1<=tempt->t[0]->pt.y<=y2 || + x1<=tempt->t[1]->pt.x<=x2 && + y1<=tempt->t[1]->pt.y<=y2 || + x1<=tempt->t[2]->pt.x<=x2 && + y1<=tempt->t[2]->pt.y<=y2) + tempt->flags&=~TF_SELECTED; } } tempt=tempt->next; @@ -313,7 +314,7 @@ U0 MeshTransformSelect(CMeshFrame *e) while (tempv!=&e->vertex_root) { if (tempv->flags&VF_SELECTED) { x=tempv->p.x; y=tempv->p.y; z=tempv->p.z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); tempv->p.x=x; tempv->p.y=y; tempv->p.z=z; } tempv=tempv->next; @@ -352,9 +353,9 @@ U0 MeshCurSnap(CMeshFrame *e) I64 x1,y1,z1,x2,y2,z2; if (e->w2s) { x1=e->cur_snap<<16; y1=0; z1=0; - GrRot(e->w2s,&x1,&y1,&z1); + Mat4x4MulXYZ(e->w2s,&x1,&y1,&z1); x2=0; y2=e->cur_snap<<16; z2=0; - GrRot(e->w2s,&x2,&y2,&z2); + Mat4x4MulXYZ(e->w2s,&x2,&y2,&z2); ip_grid.x=Max(1,MaxI64(x1,x2)>>16); ip_grid.y=Max(1,MaxI64(y1,y2)>>16); ip_grid.z=Min(ip_grid.x,ip_grid.y); @@ -378,26 +379,26 @@ U0 MeshScaleZoom(CMeshFrame *e,F64 scale) U0 MPDrawIt(CMeshFrame *e) {//Multiprocessing draw it, called by each core. -//Makes a copy of e->dc so we can change dc->color member and stuff. + //Makes a copy of e->dc so we can change dc->color member and stuff. CDC *dc=DCAlias(e->dc,e->dc->win_task); CMeshEdTri *tempt=e->tri_root.next; I64 i,*old_r=dc->r; -//$LK,"DCAlias",A="MN:DCAlias"$() alllocs a new identity rotation matrix. -//We want e->dc's rotation matrix. + //$LK,"DCAlias",A="MN:DCAlias"$() alllocs a new identity rotation matrix. + //We want e->dc's rotation matrix. dc->r=e->dc->r; MemCpy(&dc->ls,&e->dc->ls,sizeof(CD3I32)); -//... and translation (shift) vals. + //... and translation (shift) vals. dc->x=e->dc->x; dc->y=e->dc->y; dc->z=e->dc->z; dc->flags|=DCF_TRANSFORMATION; if (e->grid_on) - //Draw grid with different cores. +//Draw grid with different cores. for (i=-500+25*Gs->num;i<=500;i+=25*mp_cnt) { if (i) { dc->color=DKGRAY; @@ -432,7 +433,8 @@ U0 MPDrawIt(CMeshFrame *e) dc->color=ROPF_DITHER+RED<<16+WHITE; GrFillTri0(dc,&tempt->t[0]->pt,&tempt->t[1]->pt,&tempt->t[2]->pt); } else { - (*dc->lighting)(dc,&tempt->t[0]->pt,&tempt->t[1]->pt,&tempt->t[2]->pt,tempt->mt.color); + (*dc->lighting)(dc,&tempt->t[0]->pt,&tempt->t[1]->pt, + &tempt->t[2]->pt,tempt->mt.color); GrFillTri0(dc,&tempt->t[0]->pt,&tempt->t[1]->pt,&tempt->t[2]->pt); } } @@ -440,7 +442,7 @@ U0 MPDrawIt(CMeshFrame *e) } dc->r=old_r; -//e->dc's depth buf was copied but we don't want it freed during $LK,"DCDel",A="MN:DCDel"$(). + //e->dc's depth buf was copied but we don't want it freed during $LK,"DCDel",A="MN:DCDel"$(). dc->depth_buf=NULL; DCDel(dc); @@ -451,14 +453,14 @@ I64 *MeshW2S(CMeshFrame *e,CTask *task) {//World to screen coordinate transform matrix. CCtrl *c=CtrlFindUnique(task,CTRLT_VIEWING_ANGLES); CViewAngles *s=c->state; - I64 *r=GrIdentNew(task); - GrScaleEqu(r,e->view_scale); - GrRotZEqu(r,s->az); - GrRotYEqu(r,s->ay); + I64 *r=Mat4x4IdentNew(task); + Mat4x4Scale(r,e->view_scale); + Mat4x4RotZ(r,s->az); + Mat4x4RotY(r,s->ay); if (e->flip_y) - GrRotXEqu(r,s->ax); + Mat4x4RotX(r,s->ax); else - GrRotXEqu(r,s->ax+ã); + Mat4x4RotX(r,s->ax+ã); return r; } @@ -466,14 +468,14 @@ I64 *MeshS2W(CMeshFrame *e,CTask *task) {//Screen to world coordinate transform matrix. CCtrl *c=CtrlFindUnique(task,CTRLT_VIEWING_ANGLES); CViewAngles *s=c->state; - I64 *r=GrIdentNew(task); + I64 *r=Mat4x4IdentNew(task); if (e->flip_y) - GrRotXEqu(r,-s->ax); + Mat4x4RotX(r,-s->ax); else - GrRotXEqu(r,-(s->ax+ã)); - GrRotYEqu(r,-s->ay); - GrRotZEqu(r,-s->az); - GrScaleEqu(r,1/e->view_scale); + Mat4x4RotX(r,-(s->ax+ã)); + Mat4x4RotY(r,-s->ay); + Mat4x4RotZ(r,-s->az); + Mat4x4Scale(r,1/e->view_scale); return r; } @@ -483,32 +485,34 @@ I64 *MeshSetW2S(CMeshFrame *e,CTask *task) e->w2s=MeshW2S(e,task); Free(e->s2w); e->s2w=MeshS2W(e,task); - return MAllocIdentical(e->w2s,task); //returned matrix is assigned to dc->r and will be freed by $LK,"DCDel",A="MN:DCDel"$(). +//returned matrix is assigned to dc->r and will be freed by $LK,"DCDel",A="MN:DCDel"$(). + return Mat4x4New(e->w2s,task); } U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z) { I64 x_shadow,y_shadow,z_shadow, - xc=ip.pos.x-task->pix_left-task->scroll_x-e->cx,yc=ip.pos.y-task->pix_top-task->scroll_y-e->cy,zc=0, + xc=ip.pos.x-task->pix_left-task->scroll_x-e->cx, + yc=ip.pos.y-task->pix_top-task->scroll_y-e->cy,zc=0, x=0,y=0,z=e->my_ip_z, i,x2,y2,z2; - GrRot(e->w2s,&x,&y,&z); //screen of Z vect + Mat4x4MulXYZ(e->w2s,&x,&y,&z); //screen of Z vect -//Converges onto a solution for zc, an unknown. + //Converges onto a solution for zc, an unknown. for (i=0;i<128;i++) { x_shadow=xc-x; //Shadow of mouse cursor on xy plane y_shadow=yc-y; z_shadow=zc-z; - GrRot(e->s2w,&x_shadow,&y_shadow,&z_shadow); + Mat4x4MulXYZ(e->s2w,&x_shadow,&y_shadow,&z_shadow); x2=0; y2=0; z2=-z_shadow; - GrRot(e->w2s,&x2,&y2,&z2); + Mat4x4MulXYZ(e->w2s,&x2,&y2,&z2); zc+=Round(Sqrt(x2*x2+y2*y2+z2*z2))*SignI64(z2); } x=xc-x; y=yc-y; z=zc-z; - GrRot(e->s2w,&x,&y,&z); + Mat4x4MulXYZ(e->s2w,&x,&y,&z); x=RoundI64(x,e->cur_snap); y=RoundI64(y,e->cur_snap); z=RoundI64(e->my_ip_z,e->cur_snap); @@ -552,7 +556,7 @@ U0 MeshClipboardCopy(CMeshFrame *e) } while (tempt!=&e->tri_root) { if (tempt->flags&TF_SELECTED && - tempt->t[0]->copy && tempt->t[1]->copy && tempt->t[2]->copy) { + tempt->t[0]->copy && tempt->t[1]->copy && tempt->t[2]->copy) { tempt2=ACAlloc(sizeof(CMeshEdTri)); tempt2->t[0]=tempt->t[0]->copy; tempt2->t[1]=tempt->t[1]->copy; @@ -608,7 +612,7 @@ U0 MeshClipboardPaste(CMeshFrame *e) { CMeshEdVertex *tempv2=sys_clipboard_vertex_root.next,*tempv; CMeshEdTri *tempt2=sys_clipboard_tri_root.next,*tempt; - + MeshVertexSelectAll(e,FALSE); MeshTriSelectAll(e,FALSE); while (tempv2!=&sys_clipboard_vertex_root) { @@ -620,7 +624,8 @@ U0 MeshClipboardPaste(CMeshFrame *e) } while (tempt2!=&sys_clipboard_tri_root) { - tempt=MeshTriNew(e,tempt2->mt.color,tempt2->t[0]->copy,tempt2->t[1]->copy,tempt2->t[2]->copy); + tempt=MeshTriNew(e,tempt2->mt.color,tempt2->t[0]->copy, + tempt2->t[1]->copy,tempt2->t[2]->copy); tempt->flags|=TF_SELECTED; tempt2=tempt2->next; } @@ -635,7 +640,7 @@ U0 DrawIt(CTask *task,CDC *dc) F64 d; I64 i,x,y,z; CMeshEdVertex *tempv; - + task->horz_scroll.min=-(MESH_WORKSPACE_SIZE-task->pix_width)/2; task->horz_scroll.max= (MESH_WORKSPACE_SIZE-task->pix_width)/2; task->vert_scroll.min=-(MESH_WORKSPACE_SIZE-task->pix_height)/2; @@ -646,16 +651,16 @@ U0 DrawIt(CTask *task,CDC *dc) dc->flags|=DCF_TRANSFORMATION; Free(dc->r); //Set rotmat doesn't free old dc->r matrix. - GrSetRotMat(dc,MeshSetW2S(e,task)); + DCMat4x4Set(dc,MeshSetW2S(e,task)); dc->x=e->cx; dc->y=e->cy; //z-vals less than zero are in front of screen and not drawn. -//we want to shift all Z-vals into a drawable range. -//GR_Z_ALL is set to half of the Z-range which is an I32. + //we want to shift all Z-vals into a drawable range. + //GR_Z_ALL is set to half of the Z-range which is an I32. dc->z=GR_Z_ALL; -//Light source set to input pointer (mouse). + //Light source set to input pointer (mouse). MeshCursorW(e,task,&x,&y,&z); dc->ls.x=x; dc->ls.y=y; @@ -665,7 +670,7 @@ U0 DrawIt(CTask *task,CDC *dc) dc->ls.y*=d; dc->ls.z*=d; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); tempv=e->vertex_root.next; while (tempv!=&e->vertex_root) { @@ -694,9 +699,11 @@ U0 DrawIt(CTask *task,CDC *dc) if (tempv->flags&VF_SELECTED) { if (e->mode=='t') { if (Blink(10)) //This blinks at 10 Hz. - dc->color=ROPF_DITHER+e->cur_color.c0.color<<16+e->cur_color.c0.color^8; + dc->color=ROPF_DITHER+e->cur_color.c0.color<<16+ + e->cur_color.c0.color^8; else - dc->color=ROPF_DITHER+(e->cur_color.c0.color^8)<<16+e->cur_color.c0.color; + dc->color=ROPF_DITHER+(e->cur_color.c0.color^8)<<16+ + e->cur_color.c0.color; } else { if (Blink) dc->color=ROPF_DITHER+RED<<16+WHITE; @@ -713,7 +720,8 @@ U0 DrawIt(CTask *task,CDC *dc) task->win_inhibit=WIF_SELF_DOC; } else { MeshCurSnap(e); - task->win_inhibit=WIG_TASK_DFT|WIF_SELF_DOC-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_SELF_CTRLS-WIF_FOCUS_TASK_MENU-WIF_SELF_GRAB_SCROLL; + task->win_inhibit=WIG_TASK_DFT|WIF_SELF_DOC-WIF_SELF_FOCUS-WIF_SELF_BORDER + -WIF_SELF_CTRLS-WIF_FOCUS_TASK_MENU-WIF_SELF_GRAB_SCROLL; } MeshCursorW(e,task,&x,&y,&z); @@ -808,8 +816,8 @@ I64 MeshSize(CMeshFrame *e) tempt=tempt->next; } return sizeof(I32)*2+ - (offset(CMeshEdVertex.end)-offset(CMeshEdVertex.start))*e->vertex_cnt+ - (offset(CMeshEdTri.end)-offset(CMeshEdTri.start))*e->tri_cnt; + (offset(CMeshEdVertex.end)-offset(CMeshEdVertex.start))*e->vertex_cnt+ + (offset(CMeshEdTri.end)-offset(CMeshEdTri.start))*e->tri_cnt; } I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL) @@ -824,7 +832,8 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL) e->vertex_cnt=0; while (tempv!=&e->vertex_root) { - MemCpy(dst,&tempv->start,offset(CMeshEdVertex.end)-offset(CMeshEdVertex.start)); + MemCpy(dst,&tempv->start,offset(CMeshEdVertex.end) + -offset(CMeshEdVertex.start)); dst+=offset(CMeshEdVertex.end)-offset(CMeshEdVertex.start); tempv=tempv->next; } @@ -869,10 +878,10 @@ U0 MeshUpdateMenu(CMeshFrame *e) I32 *SpriteMeshEd(I32 *root=NULL,I64 *_size=NULL,Bool flip_y=FALSE) {/*Fmt for mesh: { -I32 vertex_cnt; -I32 tri_cnt; -CD3I32 vertices[]; -CMeshTri tris[]; + I32 vertex_cnt; + I32 tri_cnt; + CD3I32 vertices[]; + CMeshTri tris[]; } If root points to a mesh, it will load it. @@ -906,58 +915,58 @@ $WW,0$*/ s->cz=GREEN; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Edit {" - " Delete(,,SC_DELETE);" - " DelLast(,CH_BACKSPACE);" - " Cut(,CH_CTRLX);" - " Copy(,CH_CTRLC);" - " Paste(,CH_CTRLV);" - " SelectAll(,'A');" - " UnSelectAll(,'U');" - " SelectRect(,'a');" - " UnSelectRect(,'u');" - " OrSelectRect(,'o');" - " JumpToZ(,'j');" - " FlipTri(,'f');" - "}" - "Mode {" - " PlaceVertex(,'v');" - " MoveVertex(,'m');" - " MoveVertexZ(,'M');" - " MakeTri(,'t');" - "}" - "Settings {" - " Color(,'c');" - " Snap(,'s');" - "}" - "View {" - " ZoomIn(,'z');" - " ZoomOut(,'Z');" - " NullAngles(,'n');" - " FlipY(,'y');" - " Grid(,'g');" - " Vertex(,'V');" - " ToggleBorder(,CH_CTRLB);" - "}" - "Transforms {" - " Transform(,'T');" - " SwapXY(,'1');" - " SwapXZ(,'2');" - " SwapYZ(,'3');" - " InvertX(,'4');" - " InvertY(,'5');" - " InvertZ(,'6');" - " FlipTri(,'F');" - "}"); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Edit {" + " Delete(,,SC_DELETE);" + " DelLast(,CH_BACKSPACE);" + " Cut(,CH_CTRLX);" + " Copy(,CH_CTRLC);" + " Paste(,CH_CTRLV);" + " SelectAll(,'A');" + " UnSelectAll(,'U');" + " SelectRect(,'a');" + " UnSelectRect(,'u');" + " OrSelectRect(,'o');" + " JumpToZ(,'j');" + " FlipTri(,'f');" + "}" + "Mode {" + " PlaceVertex(,'v');" + " MoveVertex(,'m');" + " MoveVertexZ(,'M');" + " MakeTri(,'t');" + "}" + "Settings {" + " Color(,'c');" + " Snap(,'s');" + "}" + "View {" + " ZoomIn(,'z');" + " ZoomOut(,'Z');" + " NullAngles(,'n');" + " FlipY(,'y');" + " Grid(,'g');" + " Vertex(,'V');" + " ToggleBorder(,CH_CTRLB);" + "}" + "Transforms {" + " Transform(,'T');" + " SwapXY(,'1');" + " SwapXZ(,'2');" + " SwapYZ(,'3');" + " InvertX(,'4');" + " InvertY(,'5');" + " InvertZ(,'6');" + " FlipTri(,'F');" + "}"); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ AutoComplete; - Preempt(OFF); //We don't really want window update while modifying links - AcctOneTimePopUp(ARf_MESH_ED, + Preempt; //We don't really want window update while modifying links + RegOneTimePopUp(ARf_MESH_ED, "$$GREEN$$Right Mouse$$FG$$: Hold and move to shift cursor z\n" "$$GREEN$$'j'$$FG$$: Jump cursor Z to nearest vertex's Z\n" "$$GREEN$$'v'$$FG$$: Place Vertex Mode\n" @@ -968,7 +977,8 @@ $WW,0$*/ "$$GREEN$$'s'$$FG$$: Set snap\n" "\nSee menu at top of screen for more.\n"); - Fs->win_inhibit=WIG_TASK_DFT|WIF_SELF_DOC-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_SELF_CTRLS-WIF_FOCUS_TASK_MENU-WIF_SELF_GRAB_SCROLL; + Fs->win_inhibit=WIG_TASK_DFT|WIF_SELF_DOC-WIF_SELF_FOCUS-WIF_SELF_BORDER + -WIF_SELF_CTRLS-WIF_FOCUS_TASK_MENU-WIF_SELF_GRAB_SCROLL; Fs->horz_scroll.pos=0; Fs->vert_scroll.pos=0; MeshInit(&e,flip_y); @@ -982,7 +992,8 @@ $WW,0$*/ try {//In case of while (TRUE) { MeshUpdateMenu(&e); - msg_code=GetMsg(&a1,&a2,1<pix_left-Fs->scroll_x,ip.presnap.y-Fs->pix_top-Fs->scroll_y)); + MeshVertexDel(&e,MeshVertexFindScrPt(&e, + ip.presnap.x-Fs->pix_left-Fs->scroll_x, + ip.presnap.y-Fs->pix_top-Fs->scroll_y)); MeshVertexSelectAll(&e,FALSE); MeshTriSelectAll(&e,FALSE); vn=0; @@ -1071,7 +1084,9 @@ gm_restart: i=MESH_AND; else i=MESH_OR; - if ((msg_code=GetMsg(&a1,&a2,1<pix_left-Fs->scroll_x,ip.pos.y-Fs->pix_top-Fs->scroll_y)) { + if (tempv=MeshVertexFindScrPt(&e, + ip.pos.x-Fs->pix_left-Fs->scroll_x, + ip.pos.y-Fs->pix_top-Fs->scroll_y)) { Noise(25,2000,8000); e.my_ip_z=RoundI64(tempv->p.z,e.cur_snap); } else { @@ -1212,7 +1231,7 @@ gm_restart: case 'm': if (!moving) { if (!MeshSelectCnt(&e) && - (tempv=MeshVertexFindScrPt(&e,a1,a2))) { + (tempv=MeshVertexFindScrPt(&e,a1,a2))) { tempv->flags|=VF_SELECTED; e.my_ip_z=RoundI64(tempv->p.z,e.cur_snap); } @@ -1229,7 +1248,7 @@ gm_restart: case 'M': if (!adjusting_z && !moving) { if (!MeshSelectCnt(&e) && - (tempv=MeshVertexFindScrPt(&e,a1,a2))) { + (tempv=MeshVertexFindScrPt(&e,a1,a2))) { tempv->flags|=VF_SELECTED; e.my_ip_z=RoundI64(tempv->p.z,e.cur_snap); } @@ -1262,7 +1281,9 @@ gm_restart: case 'M': if (moving) { if (adjusting_z) { - e.my_ip_z=RoundI64(Sign(p0b.y-ip.presnap.y)*Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y))+p0b.z,e.cur_snap); + e.my_ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) + *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + +p0b.z,e.cur_snap); Snd(0); adjusting_z=FALSE; MeshCursorW(&e,Fs,&x,&y,&z); @@ -1317,7 +1338,9 @@ gm_restart: break; case MSG_IP_R_UP: if (e.mode!='M' && adjusting_z) { - e.my_ip_z=RoundI64(Sign(p0b.y-ip.presnap.y)*Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y))+p0b.z,e.cur_snap); + e.my_ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) + *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + +p0b.z,e.cur_snap); Snd(0); adjusting_z=FALSE; if (moving) { @@ -1332,7 +1355,9 @@ gm_restart: break; case MSG_IP_MOVE: if (adjusting_z) { - e.my_ip_z=RoundI64(Sign(p0b.y-ip.presnap.y)*Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y))+p0b.z,e.cur_snap); + e.my_ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) + *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + +p0b.z,e.cur_snap); Snd(ClampI64(3*e.my_ip_z+1500,0,15000)); } if (moving) { diff --git a/Adam/Gr/SpriteNew.CPP b/Adam/Gr/SpriteNew.CPP index 55b93ba..f785a30 100644 --- a/Adam/Gr/SpriteNew.CPP +++ b/Adam/Gr/SpriteNew.CPP @@ -1,40 +1,39 @@ -#help_index "Graphics/Sprite" +#help_index "Graphics/Sprite;Sprites" #help_file "::/Doc/Sprite" U8 polypt_map[9]={0,1,2,3,0,4,5,6,7}; -I64 sprite_elem_base_sizes[SPT_NUM_TYPES]= -{ -sizeof(CSpriteBase), //SPT_END -sizeof(CSpriteColor), //SPT_COLOR -sizeof(CSpriteDitherColor), //SPT_DITHER_COLOR -sizeof(CSpriteWidth), //SPT_WIDTH -sizeof(CSpritePtPt), //SPT_PLANAR_SYMMETRY -sizeof(CSpriteBase), //SPT_TRANSFORM_ON -sizeof(CSpriteBase), //SPT_TRANSFORM_OFF -sizeof(CSpritePt), //SPT_SHIFT -sizeof(CSpritePt), //SPT_PT -sizeof(CSpriteNumPtU8s), //SPT_POLYPT -sizeof(CSpritePtPt), //SPT_LINE -sizeof(CSpriteNumU8s), //SPT_POLYLINE -sizeof(CSpritePtPt), //SPT_RECT -sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT -sizeof(CSpritePtRad), //SPT_CIRCLE -sizeof(CSpritePtWHAng), //SPT_ELLIPSE -sizeof(CSpritePtWHAngSides), //SPT_POLYGON -sizeof(CSpriteNumU8s), //SPT_BSPLINE2 -sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED -sizeof(CSpriteNumU8s), //SPT_BSPLINE3 -sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED -sizeof(CSpritePt), //SPT_FLOOD_FILL -sizeof(CSpritePt), //SPT_FLOOD_FILL_NOT -sizeof(CSpritePtWHU8s), //SPT_BITMAP -sizeof(CSpriteMeshU8s), //SPT_MESH -sizeof(CSpritePtMeshU8s), //SPT_SHIFTABLE_MESH -sizeof(CSpritePtPt), //SPT_ARROW -sizeof(CSpritePtStr), //SPT_TEXT -sizeof(CSpritePtStr), //SPT_TEXT_BOX -sizeof(CSpritePtStr), //SPT_TEXT_DIAMOND +I64 sprite_elem_base_sizes[SPT_NUM_TYPES]={ + sizeof(CSpriteBase), //SPT_END + sizeof(CSpriteColor), //SPT_COLOR + sizeof(CSpriteDitherColor), //SPT_DITHER_COLOR + sizeof(CSpriteW), //SPT_WIDTH + sizeof(CSpritePtPt), //SPT_PLANAR_SYMMETRY + sizeof(CSpriteBase), //SPT_TRANSFORM_ON + sizeof(CSpriteBase), //SPT_TRANSFORM_OFF + sizeof(CSpritePt), //SPT_SHIFT + sizeof(CSpritePt), //SPT_PT + sizeof(CSpriteNumPtU8s), //SPT_POLYPT + sizeof(CSpritePtPt), //SPT_LINE + sizeof(CSpriteNumU8s), //SPT_POLYLINE + sizeof(CSpritePtPt), //SPT_RECT + sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT + sizeof(CSpritePtRad), //SPT_CIRCLE + sizeof(CSpritePtWHAng), //SPT_ELLIPSE + sizeof(CSpritePtWHAngSides), //SPT_POLYGON + sizeof(CSpriteNumU8s), //SPT_BSPLINE2 + sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED + sizeof(CSpriteNumU8s), //SPT_BSPLINE3 + sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED + sizeof(CSpritePt), //SPT_FLOOD_FILL + sizeof(CSpritePt), //SPT_FLOOD_FILL_NOT + sizeof(CSpritePtWHU8s), //SPT_BITMAP + sizeof(CSpriteMeshU8s), //SPT_MESH + sizeof(CSpritePtMeshU8s), //SPT_SHIFTABLE_MESH + sizeof(CSpritePtPt), //SPT_ARROW + sizeof(CSpritePtStr), //SPT_TEXT + sizeof(CSpritePtStr), //SPT_TEXT_BOX + sizeof(CSpritePtStr), //SPT_TEXT_DIAMOND }; I64 SpriteElemQuedBaseSize(I64 type) @@ -67,10 +66,12 @@ I64 SpriteElemSize(CSprite *tempg) i+=tempg->nu.num*sizeof(CD3I32); break; case SPT_MESH: - i+=tempg->mu.vertex_cnt*sizeof(CD3I32)+tempg->mu.tri_cnt*sizeof(CMeshTri); + i+=tempg->mu.vertex_cnt*sizeof(CD3I32)+ + tempg->mu.tri_cnt*sizeof(CMeshTri); break; case SPT_SHIFTABLE_MESH: - i+=tempg->pmu.vertex_cnt*sizeof(CD3I32)+tempg->pmu.tri_cnt*sizeof(CMeshTri); + i+=tempg->pmu.vertex_cnt*sizeof(CD3I32)+ + tempg->pmu.tri_cnt*sizeof(CMeshTri); break; } return i; @@ -101,9 +102,9 @@ public U8 *DC2Sprite(CDC *tempb) {//Convert device context to sprite. CSprite *tempg; tempg=CAlloc(sprite_elem_base_sizes[SPT_BITMAP]+ - tempb->width_internal*tempb->height+ - sprite_elem_base_sizes[SPT_END]) - (U8 *)-offset(CSprite.start); + tempb->width_internal*tempb->height+ + sprite_elem_base_sizes[SPT_END]) + (U8 *)-offset(CSprite.start); tempg->type=SPT_BITMAP; tempg->pwhu.width=tempb->width; tempg->pwhu.height=tempb->height; @@ -113,9 +114,9 @@ public U8 *DC2Sprite(CDC *tempb) return tempg(U8 *)+offset(CSprite.start); } -public U8 *SpriteElem2OneLineSummary(CSprite *tempg) +public U8 *SpriteElem2Summary(CSprite *tempg) {//Study $LK,"::/Demo/Graphics/SpriteText.CPP"$. - U8 buf[256],buf2[136]; + U8 buf[STR_LEN],buf2[STR_LEN]; I32 *ptr; StrPrint(buf,"%Z",tempg->type,"ST_SPRITE_ELEM_TYPES"); switch (tempg->type) { @@ -123,7 +124,8 @@ public U8 *SpriteElem2OneLineSummary(CSprite *tempg) CatPrint(buf," %s",Color2Str(buf2,tempg->c.color)); break; case SPT_DITHER_COLOR: - CatPrint(buf," %s",Color2Str(buf2,ROPF_DITHER|tempg->d.dither_color.u8[0]|tempg->d.dither_color.u8[1]<d.dither_color.u8[0]| + tempg->d.dither_color.u8[1]<pp.x1,tempg->pp.y1,tempg->pp.x2,tempg->pp.y2); + CatPrint(buf," (%d,%d),(%d,%d)",tempg->pp.x1,tempg->pp.y1, + tempg->pp.x2,tempg->pp.y2); break; case SPT_CIRCLE: CatPrint(buf," (%d,%d):%dR",tempg->pr.x1,tempg->pr.y1,tempg->pr.radius); @@ -157,7 +160,8 @@ public U8 *SpriteElem2OneLineSummary(CSprite *tempg) case SPT_ELLIPSE: case SPT_POLYGON: case SPT_BITMAP: - CatPrint(buf," (%d,%d):%dW,%dH",tempg->pwhu.x1,tempg->pwhu.y1,tempg->pwhu.width,tempg->pwhu.height); + CatPrint(buf," (%d,%d):%dW,%dH",tempg->pwhu.x1,tempg->pwhu.y1, + tempg->pwhu.width,tempg->pwhu.height); break; case SPT_BSPLINE2: case SPT_BSPLINE3: diff --git a/Adam/Menu.CPP b/Adam/Menu.CPP index dc4b81d..3117a41 100644 --- a/Adam/Menu.CPP +++ b/Adam/Menu.CPP @@ -11,7 +11,8 @@ CTask *MenuTask() CMenuEntry *sys_cur_submenu_entry=NULL; -public CMenuEntry *MenuSubEntryFind(CMenuEntry *haystack_first,U8 *needle_entry_name) +public CMenuEntry *MenuSubEntryFind( + CMenuEntry *haystack_first,U8 *needle_entry_name) {//You probably don't need this. Use dir / and $LK,"MenuEntryFind",A="MN:MenuEntryFind"$(). while (haystack_first) { if (!StrCmp(haystack_first->name,needle_entry_name)) @@ -40,43 +41,43 @@ public CMenuEntry *MenuEntryFind(CMenu *haystack_menu,U8 *needle_full_name) return tempse; } -CMenuEntry *MenuNewSub(CLex *lx,CTask *task) +CMenuEntry *MenuNewSub(CCmpCtrl *cc,CTask *task) { CMenuEntry *tempme=NULL,*tempse; - if (lx->token==TK_IDENT) { + if (cc->token==TK_IDENT) { tempme=CAlloc(sizeof(CMenuEntry),task); - if (StrLen(lx->cur_str)>31) - lx->cur_str[31]=0; - StrCpy(tempme->name,lx->cur_str); - if (Lex(lx)=='(') { + if (StrLen(cc->cur_str)>31) + cc->cur_str[31]=0; + StrCpy(tempme->name,cc->cur_str); + if (Lex(cc)=='(') { tempme->msg_code=MSG_KEY_DOWN_UP; - if (Lex(lx)!=',' && lx->token!=')') - tempme->msg_code=LexExpressionI64(lx); - if (lx->token==',') - Lex(lx); - if (lx->token!=',' && lx->token!=')') - tempme->a1=LexExpressionI64(lx); - if (lx->token==',') - Lex(lx); - if (lx->token!=',' && lx->token!=')') - tempme->a2=LexExpressionI64(lx); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - if (Lex(lx)!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); //Skip ; - } else if (lx->token=='{') { - Lex(lx); //Skip { + if (Lex(cc)!=',' && cc->token!=')') + tempme->msg_code=LexExpressionI64(cc); + if (cc->token==',') + Lex(cc); + if (cc->token!=',' && cc->token!=')') + tempme->a1=LexExpressionI64(cc); + if (cc->token==',') + Lex(cc); + if (cc->token!=',' && cc->token!=')') + tempme->a2=LexExpressionI64(cc); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + if (Lex(cc)!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); //Skip ; + } else if (cc->token=='{') { + Lex(cc); //Skip { tempme->dir=TRUE; tempse=&tempme->sub; - while (tempse && lx->token!='}') - tempse=tempse->next=MenuNewSub(lx,task); - if (lx->token!='}') - LexExcept(lx,"missing '}' at "); + while (tempse && cc->token!='}') + tempse=tempse->next=MenuNewSub(cc,task); + if (cc->token!='}') + LexExcept(cc,"missing '}' at "); else - Lex(lx); //Skip } + Lex(cc); //Skip } } else - LexExcept(lx,"expecting '{' at "); + LexExcept(cc,"expecting '{' at "); } return tempme; } @@ -85,17 +86,17 @@ public CMenu *MenuNew(U8 *st,I64 flags=0,CTask *task=NULL) {//Parse a menu. You probably don't need this. CMenu *m; CMenuEntry *tempse; - CLex *lx=LexNew(st,LF_DONT_FREE_BUF); + CCmpCtrl *cc=CmpCtrlNew(st,CCF_DONT_FREE_BUF); if (!task) task=Fs; - Lex(lx); + Lex(cc); m=CAlloc(sizeof(CMenu),task); m->task=task; m->flags=flags; m->attr =BLUE<<4+YELLOW; tempse=&m->sub; while (tempse) - tempse=tempse->next=MenuNewSub(lx,task); - LexDel(lx); + tempse=tempse->next=MenuNewSub(cc,task); + CmpCtrlDel(cc); return m; } @@ -203,7 +204,8 @@ U0 DrawMenu(CDC *dc) else i=m->attr; if (y0<=y1msg_code==MSG_KEY_DOWN||tempse->msg_code==MSG_KEY_DOWN_UP) { + if (tempse->msg_code==MSG_KEY_DOWN|| + tempse->msg_code==MSG_KEY_DOWN_UP) { if (!tempse->a2) tempse->a2=Char2ScanCode(tempse->a1); st=ScanCode2KeyName(tempse->a2); @@ -215,7 +217,8 @@ U0 DrawMenu(CDC *dc) GrPrint(dc,x0,y0,"%s",tempse->name); if (st) { dc->color=i>>4; - GrRect(dc,x0+w,y0-FONT_HEIGHT,(StrLen(st)+1)*FONT_WIDTH,FONT_HEIGHT*3); + GrRect(dc,x0+w,y0-FONT_HEIGHT, + (StrLen(st)+1)*FONT_WIDTH,FONT_HEIGHT*3); dc->color=i&15; GrPrint(dc,x0+w,y0,"%s",st); Free(st); diff --git a/Adam/Snd/SndFile.CPP b/Adam/Snd/SndFile.CPP index 48813ca..ecddb0a 100644 --- a/Adam/Snd/SndFile.CPP +++ b/Adam/Snd/SndFile.CPP @@ -16,12 +16,13 @@ class CFileSND //#define MAX_SND_FILE_DATA 0x0007FF00 #define MAX_SND_FILE_DATA 0x7FFFFF00 -public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0,F64 averaging=0.0,I64 waveform=WF_SQUARE, - F64 reverb_delay=0,F64 reverb_intensity=0,F64 time_shift=0) +public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, + F64 averaging=0.0,I64 waveform=WF_SQUARE, + F64 reverb_delay=0,F64 reverb_intensity=0,F64 time_shift=0) {//Use "snd.record" flag to start or stop recording, then call this routine. //Averaging should be a num from 0.0 to 0.999. -//Vol should be from 0.0 to 1.0. -//Set reverb_delay to like 0.3 sec and reverb_intensity to like 0.4. + //Vol should be from 0.0 to 1.0. + //Set reverb_delay to like 0.3 sec and reverb_intensity to like 0.4. I64 i,k,cnt,cnt2,level,file_num; F64 avg,dt; CFileSND *s; @@ -78,14 +79,14 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0,F64 averaging= avg=0; for (i=0;ibody[i]=avg=LowPass1(averaging,avg,s->body[i],1.0); - } + } //Reverb if (reverb_intensity) { if (dt=reverb_delay*SNDFILE_SAMPLE_RATE) for (i=dt;ibody[i]+=reverb_intensity*s->body[i-dt]; - } + } //Get rid of D.C. component for (k=0;k<3;k++) { @@ -95,7 +96,7 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0,F64 averaging= level/=cnt-1; for (i=0;ibody[i]=ClampI64(s->body[i]-level,MIN_I16,MAX_I16); - } + } for (i=0;ibody[i]=EndianU16(s->body[i]); diff --git a/Adam/Snd/SndMath.CPP b/Adam/Snd/SndMath.CPP index e01dfaa..76375da 100644 --- a/Adam/Snd/SndMath.CPP +++ b/Adam/Snd/SndMath.CPP @@ -126,8 +126,8 @@ public U0 SndWaveAddBuf(CSndWaveCtrl *swc,U8 *buf,I64 num_samples, F64 _freq,I64 _waveform=WF_SQUARE,F64 _amp=1.0,F64 _left=1.0, F64 _right=1.0) {//Add waveform to buffer. //num_samples is multiplied by channels to get buf_len. -//left,right range from 0.0-1.0 -//Supports 16,24 and 32 bits + //left,right range from 0.0-1.0 + //Supports 16,24 and 32 bits I64 reg i,reg j,reg k; F64 a,f,amp,reg phase; if (!swc) return; @@ -195,7 +195,7 @@ public U0 SndWaveAddBuf(CSndWaveCtrl *swc,U8 *buf,I64 num_samples, } break; } - //left channel +//left channel k=j*_left; if (swc->sample_bits==16) { k>>=16; @@ -205,7 +205,7 @@ public U0 SndWaveAddBuf(CSndWaveCtrl *swc,U8 *buf,I64 num_samples, k&=0xFFFFFF00; buf(I32 *)[i++]+=k; } - //right channel +//right channel if (swc->channels==2) { k=j*_right; if (swc->sample_bits==16) { diff --git a/Adam/Snd/SndMusic.CPP b/Adam/Snd/SndMusic.CPP index 316a3c5..7527fc1 100644 --- a/Adam/Snd/SndMusic.CPP +++ b/Adam/Snd/SndMusic.CPP @@ -20,7 +20,7 @@ public class CMusicGlbls #help_index "Snd/Music;Time/Seconds" public F64 tM() -{//Time in seconds synchronized to music subsystem. +{//Time in seconds synced to music subsystem. return (cnts.jiffies+music.tM_correction)/JIFFY_FREQ; } @@ -98,37 +98,37 @@ U8 *MusicSetNoteLen(U8 *st) public U0 Play(U8 *st,U8 *words=NULL) {/* Notes are entered with a capital letter. - Octaves are entered with a digit and - stay set until changed. +Octaves are entered with a digit and +stay set until changed. - Durations are entered with - 'w' whole note - 'h' half note - 'q' quarter note - 'e' eighth note - 't' sets to 2/3rds the current duration - '.' sets to 1.5 times the current duration - durations stay set until changed. +Durations are entered with +'w' whole note +'h' half note +'q' quarter note +'e' eighth note +'t' sets to 2/3rds the current duration +'.' sets to 1.5 times the current duration +durations stay set until changed. - '(' tie, placed before the note to be extended +'(' tie, placed before the note to be extended - $LK,"music.meter_top",A="MN:CMusicGlbls"$,$LK,"music.meter_bottom",A="MN:CMusicGlbls"$ is set with - "M3/4" - "M4/4" - etc. +$LK,"music.meter_top",A="MN:CMusicGlbls"$,$LK,"music.meter_bottom",A="MN:CMusicGlbls"$ is set with +"M3/4" +"M4/4" +etc. - Sharp and flat are done with '#' or 'b'. +Sharp and flat are done with '#' or 'b'. - The var music.stacatto_factor can - be set to a range from 0.0 to 1.0. +The var music.stacatto_factor can +be set to a range from 0.0 to 1.0. - The var music.tempo is quarter-notes - per second. It defaults to - 2.5 and gets faster when bigger. +The var music.tempo is quarter-notes +per second. It defaults to +2.5 and gets faster when bigger. */ U8 *word,*last_st; I64 note,i=0,timeout_val,timeout_val2; - Bool tie,old_preempt=Preempt(OFF); + Bool tie,old_preempt=Preempt; F64 f,d,on_jiffies,off_jiffies; music.play_note_num=0; while (*st) { diff --git a/Adam/TaskSettings.CPP b/Adam/TaskSettings.CPP index 14bf49b..a905350 100644 --- a/Adam/TaskSettings.CPP +++ b/Adam/TaskSettings.CPP @@ -3,7 +3,7 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0) {//Typically, called at start of an application. //It saves many settings so they can be restored -//at the end of the application with $LK,"SettingsPop",A="MN:SettingsPop"$(). + //at the end of the application with $LK,"SettingsPop",A="MN:SettingsPop"$(). CTaskSettings *tempse; CDoc *doc; @@ -12,7 +12,7 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0) tempse=CAlloc(sizeof(CTaskSettings),task); tempse->cur_dir=CurDir(task,task); tempse->draw_it=task->draw_it; - GetVGAPalette4(tempse->palette4); + GrPaletteGet(tempse->palette); tempse->task_end_cb=task->task_end_cb; if (!(flags&TSF_SAME_SONG)) { @@ -81,14 +81,14 @@ U0 SettingsPop2(CTask *task,CTaskSettings *tempse) task->title_src =tempse->title_src; StrCpy(task->task_title,tempse->task_title); AutoComplete(tempse->autocomplete); - SetVGAPalette4(tempse->palette4); + GrPaletteSet(tempse->palette); Snd(0); } public U0 SettingsPop(CTask *task=NULL,I64 flags=0) {//Typically, called at end of an application. CTaskSettings *tempse; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (!task) task=Fs; if (!TaskValidate(task)) { Preempt(old_preempt); diff --git a/Adam/Training.CPP b/Adam/Training.CPP index b603c55..590e947 100644 --- a/Adam/Training.CPP +++ b/Adam/Training.CPP @@ -1,22 +1,22 @@ -#help_index "Training" +#help_index "Help System" public U0 PressKeyHelp(CTask *task=NULL) {//Jump to key handlers src for key presses. I64 a1=0,a2=0; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CTask *old_hash=Fs->hash_table; if (!task) task=Fs; -/* + /* This feature is a burden in code. It would be nice to lst key cmds for all applications, but it makes the code too ugly. */ -task=Fs; + task=Fs; Fs->hash_table=task->hash_table; "Press keys to show handler code.\n" - " to exit.\n" - "Do not press .\n"; + " to exit.\n" + "Do not press .\n"; while (a1!=CH_ESC && a1!=CH_SHIFT_ESC) { GetMsg(&a1,&a2,1<=j1_hi || j2_lo>=j2_hi) { if (j1_louser_datauser_datauser_datatag,doc_sorted2[i2]->tag); @@ -177,7 +181,7 @@ Bool DiffSub(CDoc *doc,I64 *_df_flags,I64 j1_lo,I64 j1_hi,I64 j2_lo,I64 j2_hi, n=j2_hi-j2; while (scoretag, - doc_unsorted2[j2+score]->tag)) + doc_unsorted2[j2+score]->tag)) score++; else break; @@ -199,14 +203,15 @@ Bool DiffSub(CDoc *doc,I64 *_df_flags,I64 j1_lo,I64 j1_hi,I64 j2_lo,I64 j2_hi, } if (!best_score) { DiffSelect(doc,_df_flags,j1_lo,j1_hi,j2_lo,j2_hi,cnt1,cnt2, - doc_unsorted1,doc_unsorted2); + doc_unsorted1,doc_unsorted2); return TRUE; } else { if (DiffSub(doc,_df_flags,j1_lo,best_j1,j2_lo,best_j2,cnt1,cnt2, - doc_sorted1,doc_sorted2,doc_unsorted1,doc_unsorted2)) + doc_sorted1,doc_sorted2,doc_unsorted1,doc_unsorted2)) result=TRUE; - if (DiffSub(doc,_df_flags,best_j1+best_score,j1_hi,best_j2+best_score,j2_hi,cnt1,cnt2, - doc_sorted1,doc_sorted2,doc_unsorted1,doc_unsorted2)) + if (DiffSub(doc,_df_flags,best_j1+best_score,j1_hi,best_j2+best_score, + j2_hi,cnt1,cnt2, + doc_sorted1,doc_sorted2,doc_unsorted1,doc_unsorted2)) result=TRUE; return result; } @@ -215,12 +220,13 @@ Bool DiffSub(CDoc *doc,I64 *_df_flags,I64 j1_lo,I64 j1_hi,I64 j2_lo,I64 j2_hi, Bool DiffBins(CDoc *doc1,CDoc *doc2) { CDocBin *tempb1=doc1->bin_root.next, - *tempb2=doc2->bin_root.next; + *tempb2=doc2->bin_root.next; if (tempb1->last->last->num!=tempb2->last->last->num) return TRUE; while (tempb1!=&doc1->bin_root) { - if (tempb1->size!=tempb2->size || MemCmp(tempb1->data,tempb2->data,tempb1->size)) + if (tempb1->size!=tempb2->size || + MemCmp(tempb1->data,tempb2->data,tempb1->size)) return TRUE; tempb1=tempb1->next; tempb2=tempb2->next; @@ -232,7 +238,7 @@ public Bool Diff(U8 *dst_file,U8 *src_file,I64 *_df_flags=NULL) {//Report differences between two files and merge differences //from src_file to dst_file. Don't use _df_flags arg. (Used by $LK,"Merge",A="MN:Merge"$().) CDoc *doc1=DocRead(dst_file,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR), - *doc2=DocRead(src_file,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR); + *doc2=DocRead(src_file,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR); CDocEntry *doc_e,**doc_sorted1,**doc_sorted2,**doc_unsorted1,**doc_unsorted2; I64 i,cnt1=0,cnt2=0,df_flags; Bool result=FALSE; @@ -286,7 +292,7 @@ public Bool Diff(U8 *dst_file,U8 *src_file,I64 *_df_flags=NULL) QSortI64(doc_sorted2,cnt2,&DiffEntriesCompare); result=DiffSub(doc1,&df_flags,0,cnt1,0,cnt2,cnt1,cnt2, - doc_sorted1,doc_sorted2,doc_unsorted1,doc_unsorted2); + doc_sorted1,doc_sorted2,doc_unsorted1,doc_unsorted2); if (df_flags&DF_MODIFIED && !(df_flags&DF_DONT_MODIFIED)) DocWrite(doc1); @@ -315,11 +321,11 @@ public U0 ZipRep(U8 *files_find_mask="/*",U8 *fu_flags=NULL, Bool just_text_not_graphics=TRUE) {//Report file compressibility. //Dft is just src files. (Used to spot -//src files with redundancy in them.) + //src files with redundancy in them.) I64 i=0,cnt,size,fuf_flags=0; CDirEntry *tempde,*tempde1,**sort_buf; U8 *buf; - CArcCompress *ac; + CArcCompress *arc; ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+F+S"); ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); tempde=tempde1=FilesFind(files_find_mask,fuf_flags); @@ -330,10 +336,10 @@ public U0 ZipRep(U8 *files_find_mask="/*",U8 *fu_flags=NULL, buf=FileRead(tempde->full_name,&size); if (just_text_not_graphics) size=StrLen(buf); - ac=CompressBuf(buf,size); + arc=CompressBuf(buf,size); Free(buf); - tempde->user_data(F64)=100.0*ac->compressed_size/ac->expanded_size; - Free(ac); + tempde->user_data(F64)=100.0*arc->compressed_size/arc->expanded_size; + Free(arc); tempde=tempde->next; } QSortI64(sort_buf,cnt,&ZRepCompare); diff --git a/Adam/Utils/FileBMP.CPP b/Adam/Utils/FileBMP.CPP index 7fa541e..4335a1e 100644 --- a/Adam/Utils/FileBMP.CPP +++ b/Adam/Utils/FileBMP.CPP @@ -1,12 +1,14 @@ #help_index "Graphics/Windows BMP Files" +#define NUM_BMP_COLORS 16 + class CFileBMP { U16 type; U32 file_size; U32 reserved; U32 data_offset; - + U32 header_size; U32 width; U32 height; @@ -21,26 +23,34 @@ class CFileBMP U0 end; - CBGR palette[16]; + CBGR24 palette[NUM_BMP_COLORS]; }; public CFileBMP *BMP4To(CDC *dc) {//To Windows 4-bit BMP. U8 *src,*ptr; - I64 x,y,w=dc->width>>1, - size=sizeof(CFileBMP)+dc->width*dc->height>>1; - CFileBMP *r =CAlloc(size); - r->type ='BM'; - r->planes =1; - r->file_size =size; - r->data_offset=sizeof(CFileBMP); - r->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); - r->width =dc->width; - r->height =dc->height; - r->bit_cnt =4; - r->image_size =dc->width*dc->height>>1; - GetVGAPalette4(r->palette); - ptr=r(U8 *)+r->data_offset; + CBGR48 palette[NUM_COLORS]; + I64 i,x,y,w=dc->width>>1, + size=sizeof(CFileBMP)+dc->width*dc->height>>1; + CFileBMP *bmp =CAlloc(size); + bmp->type ='BM'; + bmp->planes =1; + bmp->file_size =size; + bmp->data_offset=sizeof(CFileBMP); + bmp->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); + bmp->width =dc->width; + bmp->height =dc->height; + bmp->bit_cnt =4; + bmp->image_size =dc->width*dc->height>>1; + GrPaletteGet(palette); +#assert NUM_COLORS==NUM_BMP_COLORS + for (i=0;ipalette[i].b=palette[i].b>>8; + bmp->palette[i].g=palette[i].g>>8; + bmp->palette[i].r=palette[i].r>>8; + bmp->palette[i].pad=0; + } + ptr=bmp(U8 *)+bmp->data_offset; for (y=dc->height-1;y>=0;y--) { src=y*dc->width_internal+dc->body; for (x=0;xwidth,cnt,pattern; - CFileBMP *r =CAlloc(sizeof(CFileBMP)+2*(dc->width+1)*dc->height); - r->type ='BM'; - r->planes =1; - r->data_offset=sizeof(CFileBMP); - r->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); - r->width =dc->width; - r->height =dc->height; - r->bit_cnt =4; - r->compression=2; //RLE4 - GetVGAPalette4(r->palette); - start=ptr=r(U8 *)+r->data_offset; + I64 i,x,y,w=dc->width,cnt,pattern; + CBGR48 palette[NUM_COLORS]; + CFileBMP *bmp =CAlloc(sizeof(CFileBMP)+2*(dc->width+1)*dc->height); + bmp->type ='BM'; + bmp->planes =1; + bmp->data_offset=sizeof(CFileBMP); + bmp->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); + bmp->width =dc->width; + bmp->height =dc->height; + bmp->bit_cnt =4; + bmp->compression=2; //RLE4 + GrPaletteGet(palette); +#assert NUM_COLORS==NUM_BMP_COLORS + for (i=0;ipalette[i].b=palette[i].b>>8; + bmp->palette[i].g=palette[i].g>>8; + bmp->palette[i].r=palette[i].r>>8; + bmp->palette[i].pad=0; + } + start=ptr=bmp(U8 *)+bmp->data_offset; for (y=dc->height-1;y>=0;y--) { src=y*dc->width_internal+dc->body; x=0; @@ -97,28 +115,28 @@ public CFileBMP *BMPRLE4To(CDC *dc) } *ptr(U16 *)++=0; } - r->image_size=ptr-start; - r->file_size=sizeof(CFileBMP)+r->image_size; - return r; + bmp->image_size=ptr-start; + bmp->file_size=sizeof(CFileBMP)+bmp->image_size; + return bmp; } public CFileBMP *BMP24To(CDC *dc) {//To Windows 24-bit BMP. U8 *src; - I64 i,x,y,size=offset(CFileBMP.end)+dc->width*dc->height*sizeof(CRGB); - CBGR *bgr; - CFileBMP *r =CAlloc(size); - r->type ='BM'; - r->planes =1; - r->file_size =size; - r->data_offset=offset(CFileBMP.end); - r->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); - r->width =dc->width; - r->height =dc->height; - r->bit_cnt =32; - r->image_size =dc->width*dc->height<<2; + I64 i,x,y,size=offset(CFileBMP.end)+dc->width*dc->height*sizeof(CBGR24); + CBGR24 *bgr; + CFileBMP *bmp =CAlloc(size); + bmp->type ='BM'; + bmp->planes =1; + bmp->file_size =size; + bmp->data_offset=offset(CFileBMP.end); + bmp->header_size=offset(CFileBMP.end)-offset(CFileBMP.header_size); + bmp->width =dc->width; + bmp->height =dc->height; + bmp->bit_cnt =32; + bmp->image_size =dc->width*dc->height<<2; - bgr=r(U8 *)+r->data_offset; + bgr=bmp(U8 *)+bmp->data_offset; for (y=dc->height-1;y>=0;y--) { src=y*dc->width_internal+dc->body; for (x=0;xwidth;x++) { @@ -134,48 +152,49 @@ public CFileBMP *BMP24To(CDC *dc) bgr(U8 *)+=4; } } - return r; + return bmp; } public I64 BMPWrite(U8 *filename,CDC *dc,I64 bits=4) {//Window's BMP Files. I64 size; - CFileBMP *r; + CFileBMP *bmp; if (bits==4) { if (IsDotZ(filename)) //.Z compression is better than RLE - r=BMP4To(dc); + bmp=BMP4To(dc); else { - r=BMPRLE4To(dc); - if (r->file_size>sizeof(CFileBMP)+dc->width*dc->height>>1) { - Free(r); - r=BMP4To(dc); + bmp=BMPRLE4To(dc); + if (bmp->file_size>sizeof(CFileBMP)+dc->width*dc->height>>1) { + Free(bmp); + bmp=BMP4To(dc); } } } else if (bits==24) - r=BMP24To(dc); + bmp=BMP24To(dc); else { "Format Not Supported.\n"; return 0; } - size=r->file_size; - FileWrite(filename,r,r->file_size); - Free(r); + size=bmp->file_size; + FileWrite(filename,bmp,bmp->file_size); + Free(bmp); return size; } -U8 *BMPPaletteNew(CFileBMP *r) +U8 *BMPPaletteNew(CFileBMP *bmp) { I64 i,j,best,score,best_score; - CBGR palette[16]; - U8 *result=CAlloc(16*sizeof(U8)); - GetVGAPalette4(palette); - for (i=0;i<16;i++) { + CBGR48 palette[NUM_COLORS]; + U8 *result=CAlloc(NUM_BMP_COLORS*sizeof(U8)); + GrPaletteGet(palette); +#assert NUM_COLORS==NUM_BMP_COLORS + for (i=0;ipalette[i].r-palette[j].r)+ - SqrI64(r->palette[i].g-palette[j].g)+ - SqrI64(r->palette[i].b-palette[j].b); + for (j=0;jpalette[i].r-palette[j].r>>8)+ + SqrI64(bmp->palette[i].g-palette[j].g>>8)+ + SqrI64(bmp->palette[i].b-palette[j].b>>8); if (scorewidthheightwidth,r->height); - ptr+=r->data_offset; - if (r->compression==2) + bmp=ptr; + if (0widthheightwidth,bmp->height); + ptr+=bmp->data_offset; + if (bmp->compression==2) rle=TRUE; else rle=FALSE; if (use_ms_paint_palette) palette_map=ms_paint_palette; else - palette_map=BMPPaletteNew(r); - if (r->bit_cnt==4) { - for (i=r->height-1;i>=0;i--) + palette_map=BMPPaletteNew(bmp); + if (bmp->bit_cnt==4) { + for (i=bmp->height-1;i>=0;i--) if (rle) {//We don't support full RLE4, just our own subset j=0; while (cnt=*ptr++) { @@ -261,7 +281,7 @@ public CDC *BMPRead(U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint } ptr++; } else - for (j=0;j<(r->width+7)&~7;) { + for (j=0;j<(bmp->width+7)&~7;) { result->color=palette_map[*ptr&15]; GrPlot(result,j+1,i); result->color=palette_map[*ptr>>4]; @@ -271,19 +291,19 @@ public CDC *BMPRead(U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint } if (!use_ms_paint_palette) Free(palette_map); - } else if (r->bit_cnt==24) { - for (i=r->height-1;i>=0;i--) { - for (j=0;jwidth;j++,ptr+=3) { + } else if (bmp->bit_cnt==24) { + for (i=bmp->height-1;i>=0;i--) { + for (j=0;jwidth;j++,ptr+=3) { result->color=BMP24Color(ptr,dither_probability); GrPlot(result,j,i); } - ptr+=r->width&3; + ptr+=bmp->width&3; } if (!use_ms_paint_palette) Free(palette_map); - } else if (r->bit_cnt>=32) { - for (i=r->height-1;i>=0;i--) - for (j=0;jwidth;j++,ptr+=4) { + } else if (bmp->bit_cnt>=32) { + for (i=bmp->height-1;i>=0;i--) + for (j=0;jwidth;j++,ptr+=4) { result->color=BMP24Color(ptr,dither_probability); GrPlot(result,j,i); } @@ -296,13 +316,15 @@ public CDC *BMPRead(U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint } } else "Invalid BMP File\n"; - Free(r); + Free(bmp); } return result; } -#help_index "Graphics/Sprite;Graphics/Windows BMP Files;DolDoc/Output" -public U0 DocBMP(CDoc *doc=NULL,U8 *filename,Bool dither_probability=FALSE,Bool use_ms_paint_palette=FALSE) +#help_index "Graphics/Sprite;Graphics/Windows BMP Files;"\ + "DolDoc/Output;StdOut/DolDoc" +public U0 DocBMP(CDoc *doc=NULL,U8 *filename,Bool dither_probability=FALSE, + Bool use_ms_paint_palette=FALSE) {//Put a BMP file into a document as a sprite. CDC *dc=BMPRead(filename,dither_probability,use_ms_paint_palette); CSprite *elems=DC2Sprite(dc); @@ -312,9 +334,9 @@ public U0 DocBMP(CDoc *doc=NULL,U8 *filename,Bool dither_probability=FALSE,Bool } #help_index "Graphics/Windows BMP Files;Graphics/Screen" -public I64 BMPCaptureScreen(U8 *filename,I64 bits=4,Bool include_zoom=TRUE) +public I64 BMPScreenCapture(U8 *filename,I64 bits=4,Bool include_zoom=TRUE) {//Capture screen as BMP file. - CDC *dc=DCCaptureScreen(include_zoom); + CDC *dc=DCScreenCapture(include_zoom); I64 size=BMPWrite(filename,dc,bits); DCDel(dc); return size; diff --git a/Adam/Utils/Find.CPP b/Adam/Utils/Find.CPP index a5a8dbb..c26b447 100644 --- a/Adam/Utils/Find.CPP +++ b/Adam/Utils/Find.CPP @@ -1,34 +1,36 @@ #help_index "Cmd Line (Typically)" -#define GRF_REPLACE 0 -#define GRF_SKIP 1 -#define GRF_ALL 2 -#define GRF_ED 3 -#define GRF_ABORT_FILE 4 -#define GRF_SKIP_FILE 5 +#define FND_REPLACE 0 +#define FND_SKIP 1 +#define FND_ALL 2 +#define FND_ED 3 +#define FND_ABORT_FILE 4 +#define FND_SKIP_FILE 5 -I64 PopUpGrepMenu() +I64 PopUpFindMenu() { I64 i; CDoc *doc=DocNew; - DocPrint(doc,"$$CM+LX,2,4$$$$BT,\"REPLACE\",LE=GRF_REPLACE$$" - "$$CM+LX,22,0$$$$BT,\"SKIP\",LE=GRF_SKIP$$" - "$$CM+LX,2,4$$$$BT,\"ALL\",LE=GRF_ALL$$" + DocPrint(doc,"$$CM+LX,2,4$$$$BT,\"REPLACE\",LE=FND_REPLACE$$" + "$$CM+LX,22,0$$$$BT,\"SKIP\",LE=FND_SKIP$$" + "$$CM+LX,2,4$$$$BT,\"ALL\",LE=FND_ALL$$" "$$CM+LX,22,0$$$$BT,\"ABORT ALL\",LE=DOCM_CANCEL$$" - "$$CM+LX,2,4$$$$BT,\"EDIT\",LE=GRF_ED$$" - "$$CM+LX,22,0$$$$BT,\"ABORT FILE\",LE=GRF_ABORT_FILE$$" - "$$CM+LX,2,4$$$$BT,\"SKIP FILE\",LE=GRF_SKIP_FILE$$\n"); + "$$CM+LX,2,4$$$$BT,\"EDIT\",LE=FND_ED$$" + "$$CM+LX,22,0$$$$BT,\"ABORT FILE\",LE=FND_ABORT_FILE$$" + "$$CM+LX,2,4$$$$BT,\"SKIP FILE\",LE=FND_SKIP_FILE$$\n"); i=PopUpMenu(doc); DocDel(doc); return i; } -I64 GrepFile(U8 *needle_str,U8 *haystack_filename,I64 *_fuf_flags,U8 *replace_text) -{ +I64 FindFile(U8 *needle_str,U8 *haystack_filename, + I64 *_fuf_flags,U8 *replace_text) +{//Have you confused with $LK,"FileFind",A="MN:FileFind"$()? Bool first_on_line,write_this_file=FALSE,cont=!Bt(_fuf_flags,FUf_CANCEL); U8 *src,*dst,*dst2,*name_buf=NULL; I64 i,j,plen,rlen,dlen,cnt=0,old_flags,ss_flags; - CDoc *cur_l,*doc=DocRead(haystack_filename,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR); + CDoc *cur_l,*doc=DocRead(haystack_filename, + DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR); CDocEntry *doc_e; if (Bt(_fuf_flags,FUf_IGNORE)) @@ -67,22 +69,22 @@ I64 GrepFile(U8 *needle_str,U8 *haystack_filename,I64 *_fuf_flags,U8 *replace_te } if (Bt(_fuf_flags,FUf_REPLACE)) { if (Bt(_fuf_flags,FUf_ALL)) - i=GRF_ALL; + i=FND_ALL; else { - i=PopUpGrepMenu; + i=PopUpFindMenu; if (i<0) { LBts(_fuf_flags,FUf_CANCEL); cont=FALSE; write_this_file=FALSE; - } else if (i==GRF_ALL) + } else if (i==FND_ALL) LBts(_fuf_flags,FUf_ALL); - else if (i==GRF_ABORT_FILE) { + else if (i==FND_ABORT_FILE) { cont=FALSE; write_this_file=FALSE; - } else if (i==GRF_SKIP_FILE) + } else if (i==FND_SKIP_FILE) cont=FALSE; } - if (i==GRF_REPLACE || i==GRF_ALL) { + if (i==FND_REPLACE || i==FND_ALL) { dlen=StrLen(doc_e->tag); dst=MAlloc(dlen+1+rlen-plen); dst2=dst; @@ -106,12 +108,12 @@ I64 GrepFile(U8 *needle_str,U8 *haystack_filename,I64 *_fuf_flags,U8 *replace_te write_this_file=TRUE; } else { src++; - if (i==GRF_ED) { + if (i==FND_ED) { Free(name_buf); name_buf=StrNew(doc->filename.name); doc->flags&=~DOCF_NO_CURSOR; doc->cur_entry=doc_e; - doc->cur_data_col=doc_e->min_col; + doc->cur_col=doc_e->min_col; DocWrite(doc); DocDel(doc); "Wrote:%s\n",name_buf; @@ -140,7 +142,8 @@ I64 GrepFile(U8 *needle_str,U8 *haystack_filename,I64 *_fuf_flags,U8 *replace_te return cnt; } -public I64 Find(U8 *needle_str,U8 *files_find_mask="*",U8 *fu_flags=NULL,U8 *replace_text=NULL) +public I64 Find(U8 *needle_str,U8 *files_find_mask="*", + U8 *fu_flags=NULL,U8 *replace_text=NULL) {/*Find occurrences of a string in files. This does not do regular expressions. Anyway, it's good for searching and replacing. @@ -149,11 +152,11 @@ Let's say it stands for global replace ;-) "+r" =recurse "+i" =ignore case "+l" =whole labels only. - This will check for a nonlabel character before - and after. If you have a var, "dd" and don't - want to match words like "Add", you - set this flag and it will see that the characters - before or after "ll" are label characters. +This will check for a nonlabel character before +and after. If you have a var, "dd" and don't +want to match words like "Add", you +set this flag and it will see that the characters +before or after "dd" are label characters. "+lb"=only checks for label chars before. "+la"=only checks for label chars after. */ @@ -161,21 +164,24 @@ Let's say it stands for global replace ;-) CDirEntry *tempde,*tempde1; ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+i+f+F+T"); ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - if (fuf_flags&~(FUG_FILES_FIND|FUF_IGNORE|FUF_ALL|FUF_WHOLE_LABELS|FUF_WHOLE_LABELS_BEFORE|FUF_WHOLE_LABELS_AFTER)) + if (fuf_flags&~(FUG_FILES_FIND|FUF_IGNORE|FUF_ALL| + FUF_WHOLE_LABELS|FUF_WHOLE_LABELS_BEFORE|FUF_WHOLE_LABELS_AFTER)) throw('FUF'); LBEqu(&fuf_flags,FUf_REPLACE,replace_text); tempde=tempde1=FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND); - fuf_flags&=FUF_ALL|FUF_REPLACE|FUF_IGNORE|FUF_WHOLE_LABELS|FUF_WHOLE_LABELS_BEFORE|FUF_WHOLE_LABELS_AFTER; + fuf_flags&=FUF_ALL|FUF_REPLACE|FUF_IGNORE|FUF_WHOLE_LABELS| + FUF_WHOLE_LABELS_BEFORE|FUF_WHOLE_LABELS_AFTER; while (tempde && !Bt(&fuf_flags,FUf_CANCEL)) { - cnt+=GrepFile(needle_str,tempde->full_name,&fuf_flags,replace_text); + cnt+=FindFile(needle_str,tempde->full_name,&fuf_flags,replace_text); tempde=tempde->next; } DirTreeDel(tempde1); return cnt; } -public I64 FileOcc(U8 *needle_str,U8 *files_find_mask="*",U8 *fu_flags="+r+i+l") -{/*Report occurrences of a string in files. +public I64 FileOcc(U8 *needle_str, + U8 *files_find_mask="*",U8 *fu_flags="+r+i+l") +{/*Silently return occurrences of a string in files. "+r"=recurse "+i"=ignore case "+l"=whole labels only. @@ -189,22 +195,22 @@ public I64 FileOcc(U8 *needle_str,U8 *files_find_mask="*",U8 *fu_flags="+r+i+l") return cnt; } -class CGrep +class CFind { - U8 find_text[136] fmtstr "$$DA-P,135,A=\"FIND :%s\"$$\n"; - U8 replace_text[136] fmtstr "$$DA-P,135,A=\"REPLACE :%s\"$$\n"; + U8 find_text[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"FIND :%s\"$$\n"; + U8 replace_text[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"REPLACE :%s\"$$\n"; Bool replace fmtstr "$$CB,\"REPLACE\"$$\n"; Bool match_case fmtstr "$$CB,\"MATCH CASE\"$$\n"; Bool whole_labels fmtstr "$$CB,\"WHOLE LABELS\"$$\n"; - U8 filemask[136] fmtstr "$$DA-P,135,A=\"FILE MASK :%s\"$$\n"; + U8 filemask[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"FILE MASK :%s\"$$\n"; Bool recurse fmtstr "$$CB,\"RECURSE\"$$\n"; }; -I64 GrepWiz() +I64 FindWiz() { CDoc *doc; U8 buf[32],*dir,*st; - CGrep *g=CAlloc(sizeof(CGrep)); + CFind *g=CAlloc(sizeof(CFind)); I64 result=0; g->recurse=TRUE; StrCpy(g->filemask,FILEMASK_TXT); @@ -215,7 +221,7 @@ I64 GrepWiz() g->match_case=doc->find_replace->match_case; g->whole_labels=doc->find_replace->whole_labels; } - if (DocFormDo(g,,0,"$$PURPLE$$$$TX+CX,\"Find\"$$\n$$FG$$")) { + if (DocForm(g,,0,"$$PURPLE$$$$TX+CX,\"Find\"$$\n$$FG$$")) { if (doc) { StrCpy(doc->find_replace->find_text,g->find_text); StrCpy(doc->find_replace->replace_text,g->replace_text); @@ -233,9 +239,13 @@ I64 GrepWiz() if (g->whole_labels) CatPrint(buf,"+l"); if (g->replace) - st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");Find(\"%Q\",\"%Q\",\"%Q\",\"%Q\");UserTaskCont;",dir,g->find_text,g->filemask,buf,g->replace_text); + st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");" + "Find(\"%Q\",\"%Q\",\"%Q\",\"%Q\");UserTaskCont;", + dir,g->find_text,g->filemask,buf,g->replace_text); else - st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");Find(\"%Q\",\"%Q\",\"%Q\");UserTaskCont;",dir,g->find_text,g->filemask,buf); + st=MStrPrint("\"$$$$WW+H,1$$$$\";Cd(\"%s\");" + "Find(\"%Q\",\"%Q\",\"%Q\");UserTaskCont;", + dir,g->find_text,g->filemask,buf); result=PopUp(st); } Free(dir); diff --git a/Adam/Utils/HeapLog.CPP b/Adam/Utils/HeapLog.CPP index c4360ce..06520d8 100644 --- a/Adam/Utils/HeapLog.CPP +++ b/Adam/Utils/HeapLog.CPP @@ -1,4 +1,5 @@ #help_index "Debugging/Heap" +#help_file "::/Doc/HeapDbg" #define HL_CALLER_DEPTH 4 #define HL_HASH_SIZE 0x1000 @@ -121,7 +122,7 @@ public U0 HeapLogRep(Bool leave_it=OFF) for (i=0;iuser_data,tempde->name,tempde->full_name); + tempde->user_data,tempde->name,tempde->full_name); tempde=tempde->next; } } @@ -61,7 +61,7 @@ I64 SizeRep1(CDirEntry *tempde,I64 *_fuf_flags) if (tempde->attr&RS_ATTR_DIR) i=SizeRep1(tempde->sub,_fuf_flags); else if ((i=tempde->size) && Bt(_fuf_flags,FUf_EXPAND) && - FileAttr(tempde->name)&RS_ATTR_COMPRESSED) { + FileAttr(tempde->name)&RS_ATTR_COMPRESSED) { dv=Let2Drv(*tempde->full_name); RBlks(dv,buf,Cluster2Blk(dv,tempde->cluster),1); i=(&buf)(CArcCompress *)->expanded_size; @@ -76,13 +76,14 @@ U0 SizeRep2(CDoc *doc,CDirEntry *tempde) { while (tempde) { if (tempde->attr&RS_ATTR_DIR) { - DocPrint(doc,"%10,d $$TR+C,\"%s\"$$\n$$ID,2$$",tempde->user_data,tempde->name); + DocPrint(doc,"%10,d $$TR+C,\"%s\"$$\n$$ID,2$$", + tempde->user_data,tempde->name); SizeRep2(doc,tempde->sub); DocPrint(doc,"$$ID,-2$$"); } else { DocPrint(doc,"%10,d ",tempde->user_data); DocPrint(doc,"$$LK,\"%s\",A=\"FI:%s\"$$\n", - tempde->name,tempde->full_name); + tempde->name,tempde->full_name); } tempde=tempde->next; } diff --git a/Adam/Utils/MemRep.CPP b/Adam/Utils/MemRep.CPP index 67ca385..3bcc475 100644 --- a/Adam/Utils/MemRep.CPP +++ b/Adam/Utils/MemRep.CPP @@ -10,7 +10,7 @@ I64 PenBrushesSize() I64 result=0,i; for (i=0;ibd_signature==BD_SIGNATURE_VAL) { if (bd->type==BDT_RAM) "RAMDsk %C\t:%010X Unused:%010X\n", - bd->first_drv_let,(bd->max_blk+1)<first_drv_let); + bd->first_drv_let,(bd->max_blk+1)<first_drv_let); result+=MSize2(bd->dev_id_record); } } @@ -91,7 +91,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) I64 i,j,k,m,n; U8 *st; CDoc *pdoc,*ddoc,*bdoc; - CLex *lx; + CCmpCtrl *cc; CMathODE *o; CCPU *c; CTask *task1; @@ -104,8 +104,8 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) "$$GREEN$$Task:%010X$$CYAN$$ %-30ts$$FG$$\n$$ID,2$$",task,st; Free(st); "$$PURPLE$$Alloced:%010X Used:%010X$$FG$$\n", - TaskMemAlloced(task,override_validate), - TaskMemUsed(task,override_validate); + TaskMemAlloced(task,override_validate), + TaskMemUsed(task,override_validate); "HashTable\t:%010X\n",HashTableSize2(task->hash_table); i=UnusedStk(task); @@ -121,10 +121,10 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) if (bdoc=DocBorder(task)) "BorderDoc\t:%010X\n",DocSize(bdoc); - lx=task->next_lex; - while (lx!=&task->next_lex) { - "Lex\t\t:%010X\n",LexSize(lx); - lx=lx->next; + cc=task->next_lex; + while (cc!=&task->next_lex) { + "Lex\t\t:%010X\n",CmpCtrlSize(cc); + cc=cc->next; } o=task->next_ode; @@ -167,14 +167,16 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) "Drvs\t:%010X\n",DrvsSize; if (dsk.cache_base) "DskCache\t:%010X\n", - MSize2(dsk.cache_base)+MSize2(dsk.cache_hash_table)+MSize2(dsk.cache_ctrl); + MSize2(dsk.cache_base)+MSize2(dsk.cache_hash_table)+ + MSize2(dsk.cache_ctrl); "Clipboard\t:%010X\n",DocSize(sys_clipboard_doc); "AutoComplete:%010X\n",CallExtStr("AutoCompleteSize"); "gr.to_8_bits\t:%010X\n",MSize2(gr.to_8_bits); "gr.to_8_colors\t:%010X\n",MSize2(gr.to_8_colors); "gr.text_base\t:%010X\n",MSize2(gr.text_base); "gr.vga_text_cache\t:%010X\n",MSize2(gr.vga_text_cache); - "gr.win_z_buf\t:%010X\n",MSize2(gr.win_z_buf)+MSize2(gr.win_uncovered_bitmap); + "gr.win_z_buf\t:%010X\n",MSize2(gr.win_z_buf)+ + MSize2(gr.win_uncovered_bitmap); "gr.dc\t\t:%010X\n",DCSize(gr.dc); "gr.dc1\t\t:%010X\n",DCSize(gr.dc1); "gr.dc2\t\t:%010X\n",DCSize(gr.dc2); @@ -191,7 +193,7 @@ public U0 MemRep() I64 i; CTask *task; CCPU *c; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CBinFile *bfh=sys_boot_base-sizeof(CBinFile); bfh(I64)+=bfh->file_size-1; @@ -207,12 +209,12 @@ public U0 MemRep() if (sys_data_bp) { "$$BLACK$$Code Heap:%010X Used:%010X$$FG$$\n", - sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; + sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; "$$BLACK$$Data Heap:%010X Used:%010X$$FG$$\n", - sys_data_bp->alloced_u8s,sys_data_bp->used_u8s; + sys_data_bp->alloced_u8s,sys_data_bp->used_u8s; } else "$$BLACK$$Code/Data Heap:%010X Used:%010X$$FG$$\n", - sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; + sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; for (i=0;ibp->alloced_u8s,dev.uncached_heap->used_u8s; + dev.uncached_heap->bp->alloced_u8s,dev.uncached_heap->used_u8s; "$$ID,-2$$\n"; Preempt(old_preempt); } diff --git a/Adam/Utils/Merge.CPP b/Adam/Utils/Merge.CPP index e793fc6..bef4c7d 100644 --- a/Adam/Utils/Merge.CPP +++ b/Adam/Utils/Merge.CPP @@ -21,7 +21,7 @@ U0 Merge2(CDirEntry *tempde1,CDirEntry *tempde2,I64 *_fuf_flags,I64 *_df_flags) if (tempde1->attr & RS_ATTR_DIR) Merge2(tempde1->sub,tempde->sub,_fuf_flags,_df_flags); else { - if (AbsI64(tempde1->datetime-tempde->datetime)>CDATE_FREQ*2) {//Filedates can shift due to conversion + if (AbsI64(tempde1->datetime-tempde->datetime)>CDATE_FREQ*2) {//slop "%s",tempde1->full_name; '\n'; if (Bt(_fuf_flags,FUf_DIFF)) { diff --git a/Adam/Utils/Profiler.CPP b/Adam/Utils/Profiler.CPP index 371d28b..f9b5133 100644 --- a/Adam/Utils/Profiler.CPP +++ b/Adam/Utils/Profiler.CPP @@ -91,7 +91,7 @@ public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) } if (*last_buf && routine_total>=filter_cnt) "$$GREEN$$%6.2f %08X:%s\n$$FG$$",100*routine_total/total_time, - routine_total,last_buf; + routine_total,last_buf; "Total Time:%0.6fs\n",total_time/JIFFY_FREQ; if (leave_it) { cpu_structs[pf_cpu].profiler_timer_irq=&ProfTimerInt; diff --git a/Adam/Utils/S2T.CPP b/Adam/Utils/S2T.CPP deleted file mode 100644 index 122c392..0000000 --- a/Adam/Utils/S2T.CPP +++ /dev/null @@ -1,53 +0,0 @@ -#help_index "Cmd Line (Typically)" - -//$LK,"StrUtil",A="MN:StrUtil"$() operations on files - -U0 SUFile(U8 *name,I64 suf_flags,F64 indent_scale_factor) -{//String utility on a single file -//See $LK,"SU Flags",A="MN:SUF_SINGLE_SPACE"$ - U8 *dst; - Bool chged=FALSE; - I64 reduced=0; - CDoc *doc=DocRead(name,DOCF_PLAIN_TEXT_WITH_TABS | DOCF_NO_CURSOR); - CDocEntry *doc_e=doc->root.next; - while (doc_e!=doc) { - if (doc_e->type_u8==DOCT_TEXT) { - dst=MStrUtil(doc_e->tag,suf_flags,indent_scale_factor); - if (StrCmp(dst,doc_e->tag)) { - reduced+=StrLen(doc_e->tag)-StrLen(dst); - chged=TRUE; - Free(doc_e->tag); - doc_e->tag=dst; - } else - Free(dst); - } - doc_e=doc_e->next; - } - if (chged) { - "Reduced %s by %d chars\n",name,reduced; - DocWrite(doc); - } - DocDel(doc); -} -public U0 SU(U8 *files_find_mask,I64 suf_flags,U8 *fu_flags=NULL,F64 indent_scale_factor=0) -{//Apply string utilities to files -//You can convert spaces to tabs, for example -//or removing trailing spaces on lines. -//See $LK,"SUF Flags",A="MN:SUF_SINGLE_SPACE"$ - I64 fuf_flags=0; - CDirEntry *tempde,*tempde1; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+f+F+T"); - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - tempde=tempde1=FilesFind(files_find_mask,fuf_flags); - while (tempde) { - SUFile(tempde->full_name,suf_flags,indent_scale_factor); - tempde=tempde->next; - } - DirTreeDel(tempde1); -} -public U0 S2T(U8 *files_find_mask,U8 *fu_flags=NULL) -{//Spaces to tabs. -//Use "Hard Space" (SHIFT-SPACE) for spaces -//in string consts in your code. - SU(files_find_mask,SUF_S2T|SUF_REM_TRAILING,fu_flags); -} diff --git a/Adam/Utils/StrUtils.CPP b/Adam/Utils/StrUtils.CPP new file mode 100644 index 0000000..f094320 --- /dev/null +++ b/Adam/Utils/StrUtils.CPP @@ -0,0 +1,200 @@ +#help_index "Cmd Line (Typically)" + +I64 DECompare(CDocEntry *e1,CDocEntry *e2) +{ + return StrCmp(e1->tag,e2->tag); +} + +public I64 Sort(U8 *_in_name,U8 *_out_name=NULL,Bool unique=FALSE) +{//Sort lines of a text file. Removes blank lines. + U8 *in_name,*out_name,*st; + CDoc *doc; + CDocEntry *doc_e,*doc_e1,**a; + I64 i,cnt=0,result; + + if (!_in_name) return 0; + in_name=DftExt(_in_name,"TXT.Z"); + if (_out_name) + out_name=DftExt(_out_name,"TXT.Z"); + else + out_name=StrNew(in_name); + + doc=DocRead(in_name,DOCF_PLAIN_TEXT_WITH_TABS|DOCF_NO_CURSOR); + doc_e=doc->root.next; + while (doc_e!=doc) { + if (doc_e->type_u8==DOCT_TEXT) + cnt++; + doc_e=doc_e->next; + } + a=MAlloc(cnt*sizeof(CDocEntry *)); + doc_e=doc->root.next; + i=0; + while (doc_e!=doc) { + doc_e1=doc_e->next; + if (doc_e->type_u8==DOCT_TEXT) { + QueRem(doc_e); + a[i++]=doc_e; + } else + DocEntryDel(doc,doc_e); + doc_e=doc_e1; + } + QSortI64(a,cnt,&DECompare); + + result=0; + st=NULL; + for (i=0;iroot.last); + if (!unique || !st || StrCmp(a[i]->tag,st)) { + st=a[i]->tag; + doc->cur_entry=&doc->root; + doc->cur_col=0; + DocPrint(doc,"\n"); + result++; + } else + DocEntryDel(doc,a[i]); + } + StrCpy(doc->filename.name,out_name); + DocWrite(doc); + + Free(a); + DocDel(doc); + Free(in_name); + Free(out_name); + return result; //Num Lines +} + +I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) +{ + U8 *ptr,*ptr2; + I64 result=0,ch; + CDoc *doc_in=DocRead(filename); + CDocEntry *doc_e=doc_in->root.next; + while (doc_e!=doc_in) { + if (doc_e->de_flags & DOCEF_TAG) { + ptr=doc_e->tag; + while (*ptr) { + while (*ptr && !Bt(chars_bmp,*ptr)) + ptr++; + + ptr2=ptr; + while (*ptr && Bt(chars_bmp,*ptr)) + ptr++; + + ch=*ptr; + *ptr=0; + if (*ptr2) { + DocPrint(doc_out,"%s\n",ptr2); + result++; + } + *ptr=ch; + } + } + doc_e=doc_e->next; + } + DocDel(doc_in); + return result; +} +public I64 Words(U8 *files_find_mask="*",U32 *chars_bmp=chars_bmp_alpha, + U8 *fu_flags=NULL) +{//Break file into list of not-unique words. + I64 fuf_flags=0,result=0; + CDoc *doc_out=DocNew; + CDirEntry *tempde,*tempde1; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+T"); + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + tempde=tempde1=FilesFind(files_find_mask,fuf_flags); + while (tempde) { + result+=DocWordsFile(doc_out,tempde->full_name,chars_bmp); + tempde=tempde->next; + } + DirTreeDel(tempde1); + DocInsDoc(NULL,doc_out); + DocDel(doc_out); + return result; +} + +I64 LongLinesFile(U8 *filename,I64 cols) +{ + I64 result=0; + CDoc *doc=DocRead(filename); + CDocEntry *doc_e=doc->root.next; + while (doc_e!=doc) { + if (doc_e->type_u8==DOCT_NEW_LINE && doc_e->x>=cols+1) + result++; + doc_e=doc_e->next; + } + DocDel(doc); + if (result) { + "%04d ",result; + PutFileLink(filename); + '\n'; + } + return result; +} +public I64 LongLines(U8 *files_find_mask="*",I64 cols=80,U8 *fu_flags=NULL) +{//Report files with lines of too many cols. + I64 result=0,fuf_flags=0; + CDirEntry *tempde,*tempde1; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+S"); + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + tempde=tempde1=FilesFind(files_find_mask,fuf_flags); + while (tempde) { + if (LongLinesFile(tempde->full_name,cols)) + result++; + tempde=tempde->next; + } + DirTreeDel(tempde1); + return result; +} + +U0 SUFile(U8 *filename,I64 suf_flags,F64 indent_scale_factor) +{//String utility on a single file +//See $LK,"SU Flags",A="MN:SUF_SINGLE_SPACE"$ + U8 *dst; + Bool chged=FALSE; + I64 reduced=0; + CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT_WITH_TABS | DOCF_NO_CURSOR); + CDocEntry *doc_e=doc->root.next; + while (doc_e!=doc) { + if (doc_e->type_u8==DOCT_TEXT) { + dst=MStrUtil(doc_e->tag,suf_flags,indent_scale_factor); + if (StrCmp(dst,doc_e->tag)) { + reduced+=StrLen(doc_e->tag)-StrLen(dst); + chged=TRUE; + Free(doc_e->tag); + doc_e->tag=dst; + } else + Free(dst); + } + doc_e=doc_e->next; + } + if (chged) { + "Reduced %s by %d chars\n",filename,reduced; + DocWrite(doc); + } + DocDel(doc); +} +public U0 SU(U8 *files_find_mask,I64 suf_flags,U8 *fu_flags=NULL, + F64 indent_scale_factor=0) +{//Apply $LK,"StrUtil",A="MN:StrUtil"$() on files +//You can convert spaces to tabs, for example, + //or removing trailing spaces on lines. + //See $LK,"SUF Flags",A="MN:SUF_SINGLE_SPACE"$. + I64 fuf_flags=0; + CDirEntry *tempde,*tempde1; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+f+F+T"); + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + tempde=tempde1=FilesFind(files_find_mask,fuf_flags); + while (tempde) { + SUFile(tempde->full_name,suf_flags,indent_scale_factor); + tempde=tempde->next; + } + DirTreeDel(tempde1); +} + +public U0 S2T(U8 *files_find_mask,U8 *fu_flags=NULL) +{//Spaces to tabs. +//Use "Hard Space" (SHIFT-SPACE) for spaces + //in string consts in your code. + SU(files_find_mask,SUF_S2T|SUF_REM_TRAILING,fu_flags); +} diff --git a/Adam/Utils/ToHtml.CPP b/Adam/Utils/ToHtml.CPP index a21af6f..1057df6 100644 --- a/Adam/Utils/ToHtml.CPP +++ b/Adam/Utils/ToHtml.CPP @@ -2,18 +2,22 @@ //See $LK,"::/Doc/Credits.TXT"$. -U0 HtmlPutS(CDoc *doc,I64 u32_attr,I64 *_old_u32_attr,U8 *st,I64 *_col,U8 *style_bitmap=NULL) +U0 HtmlPutS(CDoc *doc,I64 u32_attr,I64 *_old_u32_attr, + U8 *st,I64 *_col,U8 *style_bitmap=NULL) { U8 *ch,*ptr; + u32_attr&=0xFFFFFF00; if (u32_attr&DOCET_INVERT) u32_attr.u8[1]=(u32_attr.u8[1]&15)<<4|u32_attr.u8[1]>>4; if (u32_attr!=*_old_u32_attr) { - if (!(u32_attr&DOCET_BLINK) && *_old_u32_attr&DOCET_BLINK) + if (!(u32_attr&DOCET_BLINK) && + *_old_u32_attr!=-1 && *_old_u32_attr&DOCET_BLINK) DocPrint(doc,""); if (*_old_u32_attr!=-1) DocPrint(doc,""); DocPrint(doc,"",u32_attr.u8[1]); - if (u32_attr&DOCET_BLINK && !(*_old_u32_attr&DOCET_BLINK)) + if (u32_attr&DOCET_BLINK && + (*_old_u32_attr==-1 || !(*_old_u32_attr&DOCET_BLINK))) DocPrint(doc,""); *_old_u32_attr=u32_attr; if (style_bitmap) @@ -120,11 +124,11 @@ public CDoc *Doc2Html(CDoc *doc_in, U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1) {//Cvt $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ doc to HTML file. CDocEntry *doc_e,*style,*doc_e2; - I64 i,y,old_y=MIN_I64,col,_old_u32_attr=-1,old_attr; + I64 i,y,old_y=MIN_I64,col,old_u32_attr=-1,old_attr; U32 *hl,*src; U8 *st,st_2[2],*link_st,*style_bitmap=CAlloc(256/8); - CBGR p[16]; - GetVGAPalette4(p); + CBGR48 p[NUM_COLORS]; + GrPaletteGet(p); CDoc *doc_out=DocNew; Bool unlock_doc_in=DocLock(doc_in),no_bwd; @@ -142,19 +146,20 @@ public CDoc *Doc2Html(CDoc *doc_in, if (!body_header) body_header=""; if (!body_footer) body_footer=""; DocPrint(doc_out, - "\n" - "\n" - "\n" - "\n" - "%s" - "\n" - "\n" - "\n" - "\n" - "
\n");
+	"\n"
+	"\n"
+	"\n"
+	"
\n");
   DocPrint(doc_out,"%s",body_header);
 
   doc_e=doc_in->root.next;
@@ -167,7 +172,8 @@ public CDoc *Doc2Html(CDoc *doc_in,
 	old_y=y;
       }
       while (yy) {
-	HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,"\n",&col,style_bitmap);
+	HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+	      &old_u32_attr,"\n",&col,style_bitmap);
 	if (line_anchors && ++y!=old_y) {
 	  DocPrint(doc_out,"",y+1);
 	  old_y=y;
@@ -186,7 +192,8 @@ public CDoc *Doc2Html(CDoc *doc_in,
       }
       if (no_bwd)
 	while (colx)
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr," ",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+		&old_u32_attr," ",&col,style_bitmap);
 
       link_st=NULL;
       if (doc_e->de_flags&DOCEF_HTML_LINK)
@@ -197,9 +204,9 @@ public CDoc *Doc2Html(CDoc *doc_in,
       }
 
       if (link_st) {
-	if (_old_u32_attr!=-1) {
+	if (old_u32_attr!=-1) {
 	  DocPrint(doc_out,"");
-	  _old_u32_attr=-1;
+	  old_u32_attr=-1;
 	}
 	DocPrint(doc_out,"",link_st);
       }
@@ -208,40 +215,49 @@ public CDoc *Doc2Html(CDoc *doc_in,
 	case DOCT_TEXT:
 	  if (doc_e->de_flags&DOCEF_HIGHLIGHT) {
 	    if (doc_e->last==doc_in)
-	      MemCpy(&doc_e->settings,&doc_in->settings_root,sizeof(CDocSettings));
+	      MemCpy(&doc_e->settings,&doc_in->settings_root,
+		    sizeof(CDocSettings));
 	    else
-	      MemCpy(&doc_e->settings,&doc_e->last->settings,sizeof(CDocSettings));
-	    src=hl=DocHighlight(doc_e,doc_e->tag,StrLen(doc_e->tag),doc_e->type&0xFF00);
+	      MemCpy(&doc_e->settings,&doc_e->last->settings,
+		    sizeof(CDocSettings));
+	    src=hl=DocHighlight(doc_e,doc_e->tag,StrLen(doc_e->tag),
+		  doc_e->type&0xFF00);
 	    while (*src) {
 	      st_2[0]=*src&0xFF;
-	      HtmlPutS(doc_out,*src++,&_old_u32_attr,st_2,&col,style_bitmap);
+	      HtmlPutS(doc_out,*src++,&old_u32_attr,st_2,&col,style_bitmap);
 	    }
 	    Free(hl);
 	  } else
-	    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,doc_e->tag,&col,style_bitmap);
+	    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+		  &old_u32_attr,doc_e->tag,&col,style_bitmap);
 	  break;
 	case DOCT_TAB:
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,"\t",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+		&old_u32_attr,"\t",&col,style_bitmap);
 	  break;
 	case DOCT_HTML_CODE:
-	  if (_old_u32_attr!=-1) {
+	  if (old_u32_attr!=-1) {
 	    DocPrint(doc_out,"");
-	    _old_u32_attr=-1;
+	    old_u32_attr=-1;
 	  }
 	  DocPrint(doc_out,"%s",doc_e->tag);
 	  break;
 	case DOCT_SPRITE:
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,doc_e->tag,&col,style_bitmap);
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,"/* Graphics Not Rendered in HTML */",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+		&old_u32_attr,doc_e->tag,&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+		&old_u32_attr,"/* Graphics Not Rendered in HTML */",
+		&col,style_bitmap);
 	  break;
 	default:
 	  if (doc_e->de_flags&DOCEF_TAG)
-	    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,doc_e->tag,&col,style_bitmap);
+	    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+		  &old_u32_attr,doc_e->tag,&col,style_bitmap);
       }
       if (link_st) {
-	if (_old_u32_attr!=-1) {
+	if (old_u32_attr!=-1) {
 	  DocPrint(doc_out,"");
-	  _old_u32_attr=-1;
+	  old_u32_attr=-1;
 	}
 	DocPrint(doc_out,"");
 	Free(link_st);
@@ -250,14 +266,15 @@ public CDoc *Doc2Html(CDoc *doc_in,
     doc_e=doc_e->next;
   }
   while (y++y) {
-    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&_old_u32_attr,"\n",&col,style_bitmap);
+    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
+	  &old_u32_attr,"\n",&col,style_bitmap);
     col=0;
   }
-  if (_old_u32_attr!=-1) {
-    if (_old_u32_attr&DOCET_BLINK)
+  if (old_u32_attr!=-1) {
+    if (old_u32_attr&DOCET_BLINK)
       DocPrint(doc_out,"");
     DocPrint(doc_out,"");
-    _old_u32_attr=-1;
+    old_u32_attr=-1;
   }
   DocPrint(doc_out,"%s",body_footer);
   DocPrint(doc_out,"
\n\n"); @@ -265,7 +282,10 @@ public CDoc *Doc2Html(CDoc *doc_in, doc_out->cur_entry=style->next; for (i=0;i<256;i++) if (Bt(style_bitmap,i)) - DocPrint(doc_out,".c%02X{color:#%02x%02x%02x;background-color:#%02x%02x%02x;}\n",i,p[i&15].r,p[i&15].g,p[i&15].b,p[i/16].r,p[i/16].g,p[i/16].b); + DocPrint(doc_out, + ".c%02X{color:#%02x%02x%02x;background-color:#%02x%02x%02x;}\n", + i,p[i&15].r>>8,p[i&15].g>>8,p[i&15].b>>8, + p[i/16].r>>8,p[i/16].g>>8,p[i/16].b>>8); doc_out->cur_entry=&doc_out->root; DocRecalc(doc_out); @@ -289,13 +309,14 @@ public U0 ToHtml(U8 *_in_name,U8 *_out_name=NULL,U8 *html_header=NULL, WinHorz(0,width-1); //Sets doc width for word wrap. in_name=DftExt(_in_name,"CPP.Z"), - if (_out_name) - out_name=DftExt(_out_name,"html"); + if (_out_name) + out_name=DftExt(_out_name,"html"); else - out_name=ChgExt(_in_name,"html"); + out_name=ChgExt(_in_name,"html"); doc_in=DocRead(in_name); - doc_out=Doc2Html(doc_in,html_header,body_header,body_footer,line_anchors,link_cvt); + doc_out=Doc2Html(doc_in,html_header,body_header, + body_footer,line_anchors,link_cvt); StrCpy(&doc_out->filename.name,out_name); SettingsPop; diff --git a/Adam/Utils/ToTXT.CPP b/Adam/Utils/ToTXT.CPP index a56617a..e2fce74 100644 --- a/Adam/Utils/ToTXT.CPP +++ b/Adam/Utils/ToTXT.CPP @@ -111,10 +111,10 @@ public U0 ToTXT(U8 *_in_name,U8 *_out_name=NULL,I64 width=70) WinHorz(0,width-1); //Sets doc width for word wrap. in_name=DftExt(_in_name,"TXT.Z"), - if (_out_name) - out_name=DftExt(_out_name,"TXT"); + if (_out_name) + out_name=DftExt(_out_name,"TXT"); else - out_name=ChgExt(_in_name,"TXT"); + out_name=ChgExt(_in_name,"TXT"); doc_in=DocRead(in_name); doc_out=Doc2TXT(doc_in); diff --git a/Adam/WallPaper.CPP b/Adam/WallPaper.CPP index b914c2d..86e499a 100644 Binary files a/Adam/WallPaper.CPP and b/Adam/WallPaper.CPP differ diff --git a/Adam/WinA.CPP b/Adam/WinA.CPP index d6122bd..c53b087 100644 --- a/Adam/WinA.CPP +++ b/Adam/WinA.CPP @@ -1,9 +1,10 @@ #help_index "Windows" CIPStateGlbls old_ip={IP_NULL,{-1000,-1000,0},{-1000,-1000,0},{-1000,-1000,0}, - {0,0,0},{1.0,1.0,1.0}, - 0,(MAX_I32+1)>>3,0.0,GetTSC,0.350,0,0, - FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE}; + {0,0,0},{1.0,1.0,1.0}, + 0,(MAX_I32+1)>>3,0.0,GetTSC,0.350,0,0, + FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE +}; public CWinMgrGlbls winmgr={0,0,0,WMG_FPS,tS,NULL,NULL,FALSE,FALSE,FALSE}; winmgr.t=CAlloc(sizeof(CWinMgrTimingGlbls)); @@ -20,19 +21,19 @@ U0 DrawProgressBars(CDC *dc) if (m=sys_progresses[i].max) { dc->color=BLACK; GrRect(dc, - (GR_WIDTH-PROGRESS_BAR_WIDTH)/2, - (GR_HEIGHT-(NUM_PROGRESS_BARS*2-1-i*4)*PROGRESS_BAR_HEIGHT)/2, - PROGRESS_BAR_WIDTH,PROGRESS_BAR_HEIGHT); + (GR_WIDTH-PROGRESS_BAR_WIDTH)/2, + (GR_HEIGHT-(NUM_PROGRESS_BARS*2-1-i*4)*PROGRESS_BAR_HEIGHT)/2, + PROGRESS_BAR_WIDTH,PROGRESS_BAR_HEIGHT); dc->color=LTGREEN; n=sys_progresses[i].val; if (n>m) n=m; GrRect(dc, - (GR_WIDTH-PROGRESS_BAR_WIDTH)/2+2, - (GR_HEIGHT-(NUM_PROGRESS_BARS*2-1-i*4)*PROGRESS_BAR_HEIGHT)/2+2, - n*(PROGRESS_BAR_WIDTH-4)/m, - PROGRESS_BAR_HEIGHT-4); + (GR_WIDTH-PROGRESS_BAR_WIDTH)/2+2, + (GR_HEIGHT-(NUM_PROGRESS_BARS*2-1-i*4)*PROGRESS_BAR_HEIGHT)/2+2, + n*(PROGRESS_BAR_WIDTH-4)/m, + PROGRESS_BAR_HEIGHT-4); if (m>1) { dc->color=BLACK; @@ -40,10 +41,14 @@ U0 DrawProgressBars(CDC *dc) if (k>19) k=19; for (j=0;j<=k;j++) GrLine(dc, - (GR_WIDTH-PROGRESS_BAR_WIDTH)/2+1+j*(PROGRESS_BAR_WIDTH-4)/ToF64(k+1), - (GR_HEIGHT-(NUM_PROGRESS_BARS*2-1-i*4)*PROGRESS_BAR_HEIGHT)/2+4, - (GR_WIDTH-PROGRESS_BAR_WIDTH)/2+1+j*(PROGRESS_BAR_WIDTH-4)/ToF64(k+1), - (GR_HEIGHT-(NUM_PROGRESS_BARS*2-3-i*4)*PROGRESS_BAR_HEIGHT)/2-4); + (GR_WIDTH-PROGRESS_BAR_WIDTH)/2+1+j* + (PROGRESS_BAR_WIDTH-4)/ToF64(k+1), + (GR_HEIGHT-(NUM_PROGRESS_BARS*2-1-i*4)* + PROGRESS_BAR_HEIGHT)/2+4, + (GR_WIDTH-PROGRESS_BAR_WIDTH)/2+1+j* + (PROGRESS_BAR_WIDTH-4)/ToF64(k+1), + (GR_HEIGHT-(NUM_PROGRESS_BARS*2-3-i*4)* + PROGRESS_BAR_HEIGHT)/2-4); } dc->color=WHITE; @@ -52,8 +57,8 @@ U0 DrawProgressBars(CDC *dc) else st=MStrPrint("%d/%d",n,m); GrPrint(dc,(GR_WIDTH-FONT_WIDTH*StrLen(st))/2, - (GR_HEIGHT-FONT_HEIGHT- - (NUM_PROGRESS_BARS*2-2-i*4)*PROGRESS_BAR_HEIGHT)/2,"%s",st); + (GR_HEIGHT-FONT_HEIGHT- + (NUM_PROGRESS_BARS*2-2-i*4)*PROGRESS_BAR_HEIGHT)/2,"%s",st); Free(st); } } @@ -193,13 +198,14 @@ U0 WinIPUpdate() ip.has_wheel=mouse.has_wheel; if (mouse.evt) { ip.throttle+=ip.throttle_step*SignI64(mouse.pos.z-ip.pos.z); - IPVarsUpdate(mouse.pos.x,mouse.pos.y,mouse.pos.z,mouse.buttons[0],mouse.buttons[1]); + IPVarsUpdate(mouse.pos.x,mouse.pos.y,mouse.pos.z, + mouse.buttons[0],mouse.buttons[1]); mouse.evt=FALSE; set=TRUE; } } else if (ip.dev==IP_NULL && mouse.installed) ip.dev=IP_MOUSE; - + if (set) { if (ip.dev==IP_MOUSE) { ip.speed=mouse.speed; @@ -255,7 +261,7 @@ I64 WinOnTopWindows() return result; } if (Bt(&task->display_flags,DISPLAYf_WIN_ON_TOP) && - task!=sys_winmgr_task->last_task) { + task!=sys_winmgr_task->last_task) { TaskQueRem(task); TaskQueIns(task,sys_winmgr_task); result++; @@ -300,7 +306,7 @@ public I64 WinToTop(CTask *task=NULL,Bool update_z_buf=TRUE) task1=task1->next_sibling_task; } if (task->popup_task && - task->popup_task->parent_task==task) + task->popup_task->parent_task==task) result+=WinToTop(task->popup_task,FALSE); } POPFD diff --git a/Adam/WinB.CPP b/Adam/WinB.CPP index 628b4db..e8fc1e4 100644 --- a/Adam/WinB.CPP +++ b/Adam/WinB.CPP @@ -2,13 +2,13 @@ public U0 WinMgrSync(I64 cnt=1,Bool force=FALSE) {//Wait for win manager to start and finish updating screen. -//0 Cnt Sync to WinMgr. (not used) -//1 Cnt Wait and Pump Msgs. -//2 Cnt Make Sure to do a Full Refresh -// and Set Cur Pos. - Bool old_preempt=Preempt(OFF), - old_full_refresh, - old_idle=LBts(&Fs->task_flags,TASKf_IDLE); + //0 Cnt Sync to WinMgr. (not used) + //1 Cnt Wait and Pump Msgs. + //2 Cnt Make Sure to do a Full Refresh + // and Set Cur Pos. + Bool old_preempt=Preempt, + old_full_refresh, + old_idle=LBts(&Fs->task_flags,TASKf_IDLE); CDoc *old_doc=DocPut; I64 update_cnt; while (Bt(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0)) { @@ -51,24 +51,24 @@ I64 WinQueIPMsgs(Bool que) if (old_ip.presnap.x!=ip.presnap.x || old_ip.presnap.y!=ip.presnap.y) { if (que) TaskMsg(task_focus,0, - MSG_IP_MOVE,a1,a2,0); + MSG_IP_MOVE,a1,a2,0); msg_code=MSG_IP_MOVE; } - //TODO que msg for ip.pos.z? +//TODO que msg for ip.pos.z? if (ip.left_dbl_time) { if (time>ip.left_dbl_time) { if (ip.left_dbl) { if (!ip.left_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_D_DOWN,a1,a2,0); + MSG_IP_L_D_DOWN,a1,a2,0); ip.left_down_sent=TRUE; msg_code=MSG_IP_L_D_DOWN; } if (!ip.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_D_UP,a1,a2,0); + MSG_IP_L_D_UP,a1,a2,0); ip.left_dbl_time=0; msg_code=MSG_IP_L_D_UP; } @@ -76,14 +76,14 @@ I64 WinQueIPMsgs(Bool que) if (!ip.left_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_DOWN,single_a1,single_a2,0); + MSG_IP_L_DOWN,single_a1,single_a2,0); ip.left_down_sent=TRUE; msg_code=MSG_IP_L_DOWN; } if (!ip.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_UP,a1,a2,0); + MSG_IP_L_UP,a1,a2,0); ip.left_dbl_time=0; msg_code=MSG_IP_L_UP; } @@ -96,16 +96,16 @@ I64 WinQueIPMsgs(Bool que) } } else { if (TaskValidate(task_focus) && - Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_L_D)) { + Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_L_D)) { if (ip.lb && !ip_last.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_DOWN,a1,a2,0); + MSG_IP_L_DOWN,a1,a2,0); msg_code=MSG_IP_L_DOWN; } else if (!ip.lb && ip_last.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_UP,a1,a2,0); + MSG_IP_L_UP,a1,a2,0); msg_code=MSG_IP_L_UP; } } else { @@ -125,14 +125,14 @@ I64 WinQueIPMsgs(Bool que) if (!ip.right_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_D_DOWN,a1,a2,0); + MSG_IP_R_D_DOWN,a1,a2,0); ip.right_down_sent=TRUE; msg_code=MSG_IP_R_D_DOWN; } if (!ip.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_D_UP,a1,a2,0); + MSG_IP_R_D_UP,a1,a2,0); ip.right_dbl_time=0; msg_code=MSG_IP_R_D_UP; } @@ -140,14 +140,14 @@ I64 WinQueIPMsgs(Bool que) if (!ip.right_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_DOWN,single_a1,single_a2,0); + MSG_IP_R_DOWN,single_a1,single_a2,0); ip.right_down_sent=TRUE; msg_code=MSG_IP_R_DOWN; } if (!ip.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_UP,a1,a2,0); + MSG_IP_R_UP,a1,a2,0); ip.right_dbl_time=0; msg_code=MSG_IP_R_UP; } @@ -160,16 +160,16 @@ I64 WinQueIPMsgs(Bool que) } } else { if (TaskValidate(task_focus) && - Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_R_D)) { + Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_R_D)) { if (ip.rb && !ip_last.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_DOWN,a1,a2,0); + MSG_IP_R_DOWN,a1,a2,0); msg_code=MSG_IP_R_DOWN; } else if (!ip.rb && ip_last.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_UP,a1,a2,0); + MSG_IP_R_UP,a1,a2,0); msg_code=MSG_IP_R_UP; } } else { @@ -196,7 +196,8 @@ U0 WinCalcIdles() CCPU *c; CWinMgrTimingGlbls *t=winmgr.t; - if ((t->calc_idle_delta_time=(calc_idle_time=tS)-t->last_calc_idle_time)>.25) { + if ((t->calc_idle_delta_time= + (calc_idle_time=tS)-t->last_calc_idle_time)>.25) { PUSHFD CLI total_jiffies=cpu_structs[0].total_jiffies; @@ -247,7 +248,7 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) que=TRUE; if (TaskValidate(sys_focus_task) && - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS)) { c=sys_focus_task->next_ctrl; while (c!=&sys_focus_task->next_ctrl) { if (CtrlInside(c,ip.pos.x,ip.pos.y)) { @@ -290,12 +291,14 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) do { KbdMouseHandler(FALSE,TRUE); SleepUntil(MinI64(timeout_val,cnts.jiffies+JIFFY_FREQ/500)); - } while (cnts.jiffieswin_top <=ip_text_y<=task->win_bottom && - task->win_left<=ip_text_x<=task->win_right) { + task->win_left<=ip_text_x<=task->win_right) { if ((result=DocDisplay(task)) && result->flags&DOCF_DONT_SHOW) result=NULL; else if (set_cursor) { @@ -312,7 +315,7 @@ CDoc *WinCursorPosSet(CTask *task,I64 ip_text_x,I64 ip_text_y,Bool set_cursor=TR result=NULL; else { x0=result->line_start_col; - y0=result->cur_top_line_num; + y0=result->top_line_num; DocRecalc(result,TRUE); result->x=ip_text_x-task->win_left-task->scroll_x/FONT_WIDTH +x0; result->y=ip_text_y-task->win_top -task->scroll_y/FONT_HEIGHT+y0; @@ -334,9 +337,10 @@ U0 WinChkMoveSize(CTask *task) if (task->win_left!=task->win_old_left || task->win_top!=task->win_old_top) TaskMsg(task,0,MSG_MOVE,task->win_left,task->win_top,0); if (task->win_right-task->win_left!=task->win_old_right-task->win_old_left || - task->win_bottom-task->win_top!=task->win_old_bottom-task->win_old_top) + task->win_bottom-task->win_top!=task->win_old_bottom-task->win_old_top) TaskMsg(task,0, - MSG_RESIZE,task->win_right-task->win_left+1,task->win_bottom-task->win_top+1,0); + MSG_RESIZE,task->win_right-task->win_left+1, + task->win_bottom-task->win_top+1,0); task->win_old_left =task->win_left; task->win_old_right =task->win_right; task->win_old_top =task->win_top; @@ -404,11 +408,9 @@ Bool WinKeyNavMenu() if (!sys_cur_submenu_entry) ip.pos.y=new_pos.y=0; } - if (sys_cur_submenu_entry) { + if (sys_cur_submenu_entry) TaskMsg(sys_focus_task,0,sys_cur_submenu_entry->msg_code, - sys_cur_submenu_entry->a1,sys_cur_submenu_entry->a2,0); - Noise(30,6000,8000); - } + sys_cur_submenu_entry->a1,sys_cur_submenu_entry->a2,0); winmgr.show_menu=FALSE; ip.pos.x=old_pos.x; ip.pos.y=old_pos.y; return TRUE; @@ -439,7 +441,7 @@ U0 WinMgrTask(I64) try { wmt_start: WinMgrSleep; - //We delay freeing in case lingering +//We delay freeing in case lingering //references are made to task's. TaskFinishOffDying; @@ -497,13 +499,11 @@ wmt_start: winmgr.show_menu=TRUE; while (ip.lb) WinMgrSleep(TRUE); - if (sys_cur_submenu_entry) { + if (sys_cur_submenu_entry) TaskMsg(sys_focus_task,0, sys_cur_submenu_entry->msg_code, sys_cur_submenu_entry->a1, sys_cur_submenu_entry->a2,0); - Noise(30,6000,8000); - } winmgr.show_menu=FALSE; old_ip.lb=FALSE; goto wmt_start; @@ -513,7 +513,8 @@ wmt_start: //grab scroll if (!Bt(&task->win_inhibit,WIf_SELF_GRAB_SCROLL) && - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_GRAB_SCROLL)) && + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_GRAB_SCROLL)) && kbd.scan_code&SCF_CTRL && TaskValidate(task)) { winmgr.grab_scroll_closed=FALSE; winmgr.grab_scroll=TRUE; @@ -543,7 +544,8 @@ wmt_start: winmgr.grab_scroll=FALSE; if (!Bt(&task->win_inhibit,WIf_SELF_CTRLS) && - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS))) { if (ip.lb && !old_ip.lb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { @@ -661,7 +663,8 @@ wmt_start: goto wmt_start; if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { if (!old_ip.lb && ip.lb) { if (doc=WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y)) { DocLock(doc); @@ -679,7 +682,8 @@ wmt_start: } } if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { if (!old_ip.rb && ip.rb) { if (WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y)) { old_ip.rb=TRUE; @@ -688,7 +692,8 @@ wmt_start: } } if (!Bt(&task->win_inhibit,WIf_SELF_BORDER) && has_border && - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { if (old_ip.lb && !ip.lb) { if (ip.pos_text.y==task->win_top-1) { if (task->win_left<=ip.pos_text.xwin_left+4) { @@ -707,7 +712,8 @@ wmt_start: } } if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { if (old_ip.lb && !ip.lb) { if (doc=WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y,FALSE)) { do msg_code=WinMgrSleep; @@ -723,7 +729,8 @@ wmt_start: if (doc_e!=doc) { if (doc_e->de_flags & DOCEF_HAS_BORDER) doc_e->de_flags&=~DOCEF_SOLID_BORDER; - if (doc_e->de_flags & (DOCEF_TREE|DOCEF_LST|DOCEF_LINK|DOCEF_CHECK_COLLAPSABLE| + if (doc_e->de_flags & (DOCEF_TREE|DOCEF_LST| + DOCEF_LINK|DOCEF_CHECK_COLLAPSABLE| DOCEF_LEFT_CB|DOCEF_LEFT_MACRO|DOCEF_LEFT_EXP)) TaskMsg(task,0,MSG_KEY_DOWN,CH_SPACE,0,0); } @@ -741,7 +748,8 @@ wmt_start: } if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { if (old_ip.rb && !ip.rb) { if (doc=WinCursorPosSet(task,ip.pos_text.x,ip.pos_text.y,FALSE)) { do msg_code=WinMgrSleep; @@ -773,7 +781,8 @@ wmt_start: } if (!Bt(&task->win_inhibit,WIf_SELF_BORDER) && has_border && - (!TaskValidate(sys_focus_task)||!Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { + (!TaskValidate(sys_focus_task)|| + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { if (ip.lb && !old_ip.lb) { if (task->win_top==ip.pos_text.y+1 && task->win_left-1<=ip.pos_text.x<=task->win_right+1) { @@ -805,7 +814,8 @@ wmt_start: WinToTop(task); while (ip.lb && TaskValidate(task)) { WinHorz(ip.pos_text.x+1,task->win_width+ip.pos_text.x,task); - WinVert(ip.pos_text.y-y,task->win_height-1+ip.pos_text.y-y,task); + WinVert(ip.pos_text.y-y, + task->win_height-1+ip.pos_text.y-y,task); WinChkMoveSize(task); WinMgrSleep; } @@ -813,7 +823,8 @@ wmt_start: old_ip.lb=FALSE; goto wmt_start; } - if (task->win_right+1==ip.pos_text.x && task->win_bottom+1==ip.pos_text.y) { + if (task->win_right+1==ip.pos_text.x && + task->win_bottom+1==ip.pos_text.y) { if (ip.lb) { WinToTop(task); while (ip.lb && TaskValidate(task)) { diff --git a/AdamKeyPlugIns.CPP b/AdamKeyPlugIns.CPP index 644fed7..d8bc5d8 100644 --- a/AdamKeyPlugIns.CPP +++ b/AdamKeyPlugIns.CPP @@ -11,24 +11,24 @@ U0 InsTime() Bool MyPutKey(I64 ch,I64 sc) {//ch=ASCII; sc=scan_code -//See $LK,"Char",A="HI:Char"$ for definition of scan codes. -//See $LK,"Key Allocations",A="FI:::/Doc/KeyAlloc.TXT"$. -//See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. + //See $LK,"Char",A="HI:Char"$ for definition of scan codes. + //See $LK,"Key Allocations",A="FI:::/Doc/KeyAlloc.TXT"$. + //See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. -//You can customize keys. This routine -//is called before the main editor -//key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). -//You can intercept any key. + //You can customize keys. This routine + //is called before the main editor + //key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). + //You can intercept any key. -//Return TRUE if you completely -//handled the key. + //Return TRUE if you completely + //handled the key. I64 i,sc2=sc.u8[0]; U8 *st1,*st2; if (SC_F1<=sc2<=SC_F10 && - sc&SCF_ALT && - !(sc & SCF_CTRL)) { + sc&SCF_ALT && + !(sc & SCF_CTRL)) { switch (sc2) { case SC_F1: if (sc&SCF_KEY_DESC) { @@ -141,7 +141,7 @@ Bool MyPutKey(I64 ch,I64 sc) DocPrint(sys_clipboard_doc,"$$LK,\"BF:%s\"$$",st1); } else DocPrint(sys_clipboard_doc,"$$LK,\"FL:%s,%d\"$$", - st2,DocPut->cur_entry->y+1); + st2,DocPut->cur_entry->y+1); Free(st1); Free(st2); } @@ -153,7 +153,7 @@ Bool MyPutKey(I64 ch,I64 sc) i=RandU32; ClipboardDel; DocPrint(sys_clipboard_doc,"$$LK,\"\",A=\"FA:%s,ANC%d\"$$", - DocPut->filename.name,i); + DocPut->filename.name,i); "$$AN,\"\",A=\"ANC%d\"$$",i; } return TRUE; diff --git a/AdamPkgs.CPP b/AdamPkgs.CPP index 3d537a2..bb2a600 100644 --- a/AdamPkgs.CPP +++ b/AdamPkgs.CPP @@ -4,18 +4,18 @@ Cd("/Adam/Boot");; #include "Boot" Cd("/Adam/Utils");; -#include "Profiler" #include "Diff" +#include "FileBMP" #include "Find" -#include "LineRep" -#include "Merge" -#include "S2T" -#include "LinkChk" #include "HeapLog" +#include "LineRep" +#include "LinkChk" #include "MemRep" +#include "Merge" +#include "Profiler" +#include "StrUtils" #include "ToHtml" #include "ToTXT" -#include "FileBMP" MapFileLoad("::/Kernel/Kernel"); MapFileLoad("::/Compiler/Compiler"); diff --git a/AdamWrappers.CPP b/AdamWrappers.CPP index f3a39eb..f2735f8 100644 --- a/AdamWrappers.CPP +++ b/AdamWrappers.CPP @@ -6,21 +6,21 @@ //These are customized quick commands. //Feel free to add more or change. public I64 F(U8 *needle_str,U8 *fu_flags=NULL) -{//Find (Find) all text files. +{//Find text in all text files. return Find(needle_str,"/*",fu_flags); } public I64 R(U8 *needle_str,U8 *replace_text=NULL,U8 *fu_flags="+l-i") -{//Find (Find) and replace string with string in all files. +{//Find text and replace in all text files. return Find(needle_str,"/*",fu_flags,replace_text); } public I64 FD(U8 *needle_str,U8 *fu_flags=NULL) -{//Find (Find) text files in cur dir. +{//Find text in cur dir text files. return Find(needle_str,"*",fu_flags); } public I64 RD(U8 *needle_str,U8 *replace_text=NULL,U8 *fu_flags="+l-i") -{//Find (Find) and replace string with string in cur dir. +{//Find text and replace in cur dir text files. return Find(needle_str,"*",fu_flags,replace_text); } diff --git a/Apps/AfterEgypt/AfterEgypt.CPP b/Apps/AfterEgypt/AfterEgypt.CPP index ee16000..3d45e6a 100644 --- a/Apps/AfterEgypt/AfterEgypt.CPP +++ b/Apps/AfterEgypt/AfterEgypt.CPP @@ -20,10 +20,13 @@ U0 HoldCourt() DocDblBufStart; '\n'; accused=RandU32%3; - "%s",LstSub(accused,"A man \0A woman \0A child \0"); + "%s",LstSub(accused, + "A man \0A woman \0A child \0"); crime=RandU32&3; - "%s",LstSub(crime,"commits murder\0commits adultery\0commits blasphemy\0commits idolatry\0"); + "%s",LstSub(crime, + "commits murder\0commits adultery\0" + "commits blasphemy\0commits idolatry\0"); if (crime<=1) { '' CH_SPACE; @@ -35,13 +38,13 @@ U0 HoldCourt() else '.'; "\n\n\n\n" - "$$LM,4$$" - "\n\n$$BT,\"Show Mercy\",LE=0$$\n\n" - "\n\n$$BT,\"Punish\",LE=1$$\n\n" - "\n\n$$BT,\"Really Punish\",LE=2$$\n\n" - "$$LM,0$$"; + "$$LM,4$$" + "\n\n$$BT,\"Show Mercy\",LE=0$$\n\n" + "\n\n$$BT,\"Punish\",LE=1$$\n\n" + "\n\n$$BT,\"Really Punish\",LE=2$$\n\n" + "$$LM,0$$"; DocDblBufEnd; - DocMenuDo(DocPut); + DocMenu(DocPut); LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); DocBottom; @@ -73,7 +76,7 @@ Bool TakeTurn() Kill(Fs->song_task); DocDblBufStart; - "$$LM,4$$" + "$$LM,4$$" "\n\n$$BT,\"Break Camp\",LE=T_BREAK_CAMP$$\n\n" "\n\n$$BT,\"Talk with God\",LE=T_TALK_WITH_GOD$$\n\n" "\n\n$$BT,\"View Clouds\",LE=T_VIEW_CLOUDS$$\n\n" @@ -87,7 +90,7 @@ Bool TakeTurn() "\n\n$$BT,\"Quit\",LE=T_QUIT$$\n\n" "$$LM,0$$"; DocDblBufEnd; - i=DocMenuDo(DocPut,DOF_DONT_TEXT_ATTR); + i=DocMenu(DocPut,DOF_DONT_TEXT_ATTR); LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); DocBottom; @@ -146,7 +149,8 @@ U0 TMsg(CDC *dc,U8 *msg) dc->color=BLACK; GrRect(dc,2,GR_HEIGHT-FONT_HEIGHT*3+2,GR_WIDTH-4,FONT_HEIGHT*2-4); dc->color=YELLOW; - GrPrint(dc,(GR_WIDTH-StrLen(msg)*FONT_WIDTH)/2,GR_HEIGHT-5*FONT_HEIGHT/2,"%s",msg); + GrPrint(dc,(GR_WIDTH-StrLen(msg)*FONT_WIDTH)/2, + GR_HEIGHT-5*FONT_HEIGHT/2,"%s",msg); WinMgrSync; if (ScanChar) throw; diff --git a/Apps/AfterEgypt/Battle.CPP b/Apps/AfterEgypt/Battle.CPP index 111df06..6cd8124 100644 Binary files a/Apps/AfterEgypt/Battle.CPP and b/Apps/AfterEgypt/Battle.CPP differ diff --git a/Apps/AfterEgypt/Comics/Moses83.TXT b/Apps/AfterEgypt/Comics/Moses83.TXT new file mode 100644 index 0000000..2a385a1 Binary files /dev/null and b/Apps/AfterEgypt/Comics/Moses83.TXT differ diff --git a/Apps/AfterEgypt/Comics/Moses84.TXT b/Apps/AfterEgypt/Comics/Moses84.TXT new file mode 100644 index 0000000..4a726ac Binary files /dev/null and b/Apps/AfterEgypt/Comics/Moses84.TXT differ diff --git a/Apps/AfterEgypt/Comics/Moses85.TXT b/Apps/AfterEgypt/Comics/Moses85.TXT new file mode 100644 index 0000000..8940533 Binary files /dev/null and b/Apps/AfterEgypt/Comics/Moses85.TXT differ diff --git a/Apps/AfterEgypt/Comics/Moses86.TXT b/Apps/AfterEgypt/Comics/Moses86.TXT new file mode 100644 index 0000000..f14f941 Binary files /dev/null and b/Apps/AfterEgypt/Comics/Moses86.TXT differ diff --git a/Apps/AfterEgypt/Comics/Moses87.TXT b/Apps/AfterEgypt/Comics/Moses87.TXT new file mode 100644 index 0000000..8deebe9 Binary files /dev/null and b/Apps/AfterEgypt/Comics/Moses87.TXT differ diff --git a/Apps/AfterEgypt/HorebBMP.CPP b/Apps/AfterEgypt/HorebBMP.CPP index a206e93..de37028 100644 --- a/Apps/AfterEgypt/HorebBMP.CPP +++ b/Apps/AfterEgypt/HorebBMP.CPP @@ -9,16 +9,17 @@ U0 MPDrawHoreb(CDC *dc2) F64 s,m,a,x1,y1,x2,y2; Obj *tempo; - GrIdentEqu(r); - GrRotYEqu(r,-é); - GrRotXEqu(r,77*ã/180); + Mat4x4IdentEqu(r); + Mat4x4RotY(r,-é); + Mat4x4RotX(r,77*ã/180); for (i=Gs->num;ix1=tempo->x+vx; tempo->y1=tempo->y; tempo->z1=tempo->z+vz; - GrRot(r,&tempo->x1,&tempo->y1,&tempo->z1); - if (tempo->type==OT_SHEEP || tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { + Mat4x4MulXYZ(r,&tempo->x1,&tempo->y1,&tempo->z1); + if (tempo->type==OT_SHEEP || + tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { dx=100*tempo->dx; dy=100*tempo->dy; dz=100*tempo->dz; - GrRot(r,&dx,&dy,&dz); + Mat4x4MulXYZ(r,&dx,&dy,&dz); if (dx<0) tempo->sym=TRUE; else @@ -27,13 +28,14 @@ U0 MPDrawHoreb(CDC *dc2) if (tempo->z1>=0) { s=100.0/(AbsI64(tempo->z1)+50); if (tempo->type) { - GrIdentEqu(dc->r); - GrScaleEqu(dc->r,s*2); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4Scale(dc->r,s*2); + DCMat4x4Set(dc,dc->r); dc->flags|=DCF_TRANSFORMATION; if (tempo->sym) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,s*tempo->x1+cx,s*tempo->y1+h,s*tempo->x1+cx,s*tempo->y1+h+10); + DCSymmetrySet(dc,s*tempo->x1+cx,s*tempo->y1+h, + s*tempo->x1+cx,s*tempo->y1+h+10); } Sprite3B(dc,s*tempo->x1+cx,s*tempo->y1+h,tempo->z1,imgs[tempo->type]); } else { @@ -69,12 +71,12 @@ U0 DrawHoreb(CTask *task,CDC *dc) { I64 i,x,y,z,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1,cy=h>>1; F64 s; - GrIdentEqu(r); - GrRotYEqu(r,-é); - GrRotXEqu(r,77*ã/180); - //Sun + Mat4x4IdentEqu(r); + Mat4x4RotY(r,-é); + Mat4x4RotX(r,77*ã/180); +//Sun x=vx; y=0; z=1000000+vz; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); s=100.0/(AbsI64(z)+50); if (y<0) { dc->color=BROWN; @@ -82,7 +84,7 @@ U0 DrawHoreb(CTask *task,CDC *dc) dc->color=YELLOW; GrFloodFill(dc,s*x+cx,15); } - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); mp_not_done_flags=1<pix_width, - h=task->pix_height,r[16], - cx=w>>1,cy=h>>1; + w=task->pix_width, + h=task->pix_height,r[16], + cx=w>>1,cy=h>>1; F64 s,m,a,x1,y1,x2,y2; Obj *o_sort[O_NUM_OBJS+O_NUM_PEBBLES],*tempo; - GrIdentEqu(r); - GrRotYEqu(r,-é); - GrRotXEqu(r,77*ã/180); + Mat4x4IdentEqu(r); + Mat4x4RotY(r,-é); + Mat4x4RotX(r,77*ã/180); //Sun x=vx; y=0; z=1000000+vz; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); s=100.0/(AbsI64(z)+50); if (y<0) { dc->color=BROWN; @@ -33,10 +33,11 @@ U0 DrawHoreb(CTask *task,CDC *dc) tempo=&objs[i]; o_sort[i]=tempo; tempo->x1=tempo->x+vx; tempo->y1=tempo->y; tempo->z1=tempo->z+vz; - GrRot(r,&tempo->x1,&tempo->y1,&tempo->z1); - if (tempo->type==OT_SHEEP || tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { + Mat4x4MulXYZ(r,&tempo->x1,&tempo->y1,&tempo->z1); + if (tempo->type==OT_SHEEP || + tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { dx=100*tempo->dx; dy=100*tempo->dy; dz=100*tempo->dz; - GrRot(r,&dx,&dy,&dz); + Mat4x4MulXYZ(r,&dx,&dy,&dz); if (dx<0) tempo->sym=TRUE; else @@ -50,13 +51,14 @@ U0 DrawHoreb(CTask *task,CDC *dc) if (tempo->z1<0) break; s=100.0/(AbsI64(tempo->z1)+50); if (tempo->type) { - GrIdentEqu(dc->r); - GrScaleEqu(dc->r,s*2); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4Scale(dc->r,s*2); + DCMat4x4Set(dc,dc->r); dc->flags|=DCF_TRANSFORMATION; if (tempo->sym) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,s*tempo->x1+cx,s*tempo->y1+h,s*tempo->x1+cx,s*tempo->y1+h+10); + DCSymmetrySet(dc,s*tempo->x1+cx,s*tempo->y1+h, + s*tempo->x1+cx,s*tempo->y1+h+10); } Sprite3B(dc,s*tempo->x1+cx,s*tempo->y1+h,0,imgs[tempo->type]); } else { diff --git a/Apps/AfterEgypt/HorebC.CPP b/Apps/AfterEgypt/HorebC.CPP index 4c896d5..488da06 100644 --- a/Apps/AfterEgypt/HorebC.CPP +++ b/Apps/AfterEgypt/HorebC.CPP @@ -7,7 +7,8 @@ U0 AnimateTask(I64) t=tS; for (i=0;itype==OT_SHEEP || tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { + if (tempo->type==OT_SHEEP || + tempo->type==OT_GOAT1 || tempo->type==OT_GOAT2) { tempo->x+=tempo->dx; tempo->y+=tempo->dy; tempo->z+=tempo->dz; @@ -97,11 +98,12 @@ U0 Horeb() SettingsPush(Fs,TSF_SAME_SONG); //See $LK,"SettingsPush",A="MN:SettingsPush"$ try { Fs->text_attr=YELLOW<<4+BLUE; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; AutoComplete; WinMax; WinBorder; - Preempt(OFF); + Preempt; DocClear; "$$BG,LTCYAN$$%h6c",'\n'; diff --git a/Apps/AfterEgypt/Map.CPP b/Apps/AfterEgypt/Map.CPP index 02130fa..07bc555 100644 --- a/Apps/AfterEgypt/Map.CPP +++ b/Apps/AfterEgypt/Map.CPP @@ -24,14 +24,14 @@ U0 DrawMap(CTask *,CDC *dc) U0 AEMap() { I64 i=0, - cx=Fs->pix_width>>1, - cy=Fs->pix_height>>1, - c_min=MinI64(cx,cy), - *r=NULL, - x1=0,y1=0,z1=0, - x_last=x1,y_last=y1; + cx=Fs->pix_width>>1, + cy=Fs->pix_height>>1, + c_min=MinI64(cx,cy), + *r=NULL, + x1=0,y1=0,z1=0, + x_last=x1,y_last=y1; F64 a,a1=(AE1_MAX+AE1_MIN)/2,a2=(AE2_MAX+AE2_MIN)/2,a2_total=a2, - x_scale=ToF64(cx)/c_min,y_scale=ToF64(cy)/c_min; + x_scale=ToF64(cx)/c_min,y_scale=ToF64(cy)/c_min; CDC *dc=DCAlias; SettingsPush(Fs,TSF_SAME_SONG); //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -48,8 +48,9 @@ U0 AEMap() if ( 0.0<=a<=AE1_MIN) a=AE1_MIN; if (-AE1_MIN<=a<=0.0) a=-AE1_MIN; Free(r); - r=GrRotZNew(a); - GrRot(r,&x1,&y1,&z1); + r=Mat4x4IdentNew; + Mat4x4RotZ(r,a); + Mat4x4MulXYZ(r,&x1,&y1,&z1); a2=Clamp(Wrap(a2+(AE2_MAX+AE2_MIN)/5.0*(Rand-0.5)),-AE2_MAX,AE2_MAX); a=a2; diff --git a/Apps/AfterEgypt/WaterRock.CPP b/Apps/AfterEgypt/WaterRock.CPP index 821ba69..c68d2d0 100644 Binary files a/Apps/AfterEgypt/WaterRock.CPP and b/Apps/AfterEgypt/WaterRock.CPP differ diff --git a/Apps/Budget/BgtAccts.CPP b/Apps/Budget/BgtAccts.CPP index b5e90a3..23fb934 100644 --- a/Apps/Budget/BgtAccts.CPP +++ b/Apps/Budget/BgtAccts.CPP @@ -5,15 +5,19 @@ U0 BgtAcctsUpdate() tempb=b_root.next; while (tempb!=&b_root) { if (tempb->type!=BE_TEMPLATE_COPY) { - tempb->credit_index =StrFileAdd(tempb->credit,&accts_table_strs,accts_table); - tempb->debit_index =StrFileAdd(tempb->debit,&accts_table_strs,accts_table); + tempb->credit_index=StrFileAdd(tempb->credit, + &accts_table_strs,accts_table); + tempb->debit_index =StrFileAdd(tempb->debit, + &accts_table_strs,accts_table); } tempb=tempb->next; } tempt=t_root.next; while (tempt!=&t_root) { - tempt->b.credit_index =StrFileAdd(tempt->b.credit,&accts_table_strs,accts_table); - tempt->b.debit_index =StrFileAdd(tempt->b.debit,&accts_table_strs,accts_table); + tempt->b.credit_index=StrFileAdd(tempt->b.credit, + &accts_table_strs,accts_table); + tempt->b.debit_index =StrFileAdd(tempt->b.debit, + &accts_table_strs,accts_table); tempt=tempt->next; } } @@ -71,7 +75,7 @@ U8 *BgtPopUpAcct(U8 *header=NULL,U8 *dft=NULL) if (doc_dft) { doc->cur_entry=doc_dft; - doc->cur_data_col=0; + doc->cur_col=0; } result=PopUpMenu(doc,DOF_DONT_HOME); DocDel(doc); diff --git a/Apps/Budget/BgtMain.CPP b/Apps/Budget/BgtMain.CPP index e980382..b458cd5 100644 --- a/Apps/Budget/BgtMain.CPP +++ b/Apps/Budget/BgtMain.CPP @@ -9,7 +9,8 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) U8 *st; switch (ch) { case '\n': - if ((doc_ce=doc->cur_entry) && doc_ce!=doc && doc_ce->type_u8==DOCT_MENU_VAL) { + if ((doc_ce=doc->cur_entry) && doc_ce!=doc && + doc_ce->type_u8==DOCT_MENU_VAL) { tempb=doc_ce->user_data; if (tempt=tempb->template) { if (tempt1=BgtTemplatePmt(tempt)) { @@ -32,7 +33,8 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) } return TRUE; case CH_CTRLY: - if ((doc_ce=doc->cur_entry) && doc_ce!=doc && doc_ce->type_u8==DOCT_MENU_VAL) { + if ((doc_ce=doc->cur_entry) && doc_ce!=doc && + doc_ce->type_u8==DOCT_MENU_VAL) { tempb=doc_ce->user_data; if (tempt=tempb->template) { QueRem(tempt); @@ -48,8 +50,8 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) return TRUE; case 'a': PopUpOk( "Set the name and color of your accounts.\n" - "To delete accounts, manually edit\n" - "$$GREEN$$/Home/Budget/Accts.TXT.Z$$FG$$."); + "To delete accounts, manually edit\n" + "$$GREEN$$/Home/Budget/Accts.TXT.Z$$FG$$."); if (PopUpEd(BGT_ACCTS_FILE,Fs)) { BgtAcctsRead; BgtRegen; @@ -75,7 +77,8 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) } return TRUE; case 'c': - if ((doc_ce=doc->cur_entry) && doc_ce!=doc && doc_ce->type_u8==DOCT_MENU_VAL) + if ((doc_ce=doc->cur_entry) && doc_ce!=doc && + doc_ce->type_u8==DOCT_MENU_VAL) tempb=doc_ce->user_data; else tempb=NULL; @@ -107,7 +110,8 @@ U0 BgtRegen() color=c; DocPrint(doc,"$$FG,%d$$",color); } - tempb->doc_e=DocPrint(doc,"$$MU-UL,\"%D %8ts %8ts:%8.2f %8.2f:%Q\",U=0x%X$$\n", + tempb->doc_e=DocPrint(doc, + "$$MU-UL,\"%D %8ts %8ts:%8.2f %8.2f:%Q\",U=0x%X$$\n", tempb->date,tempb->credit,tempb->debit,balance, tempb->amount,tempb->desc,tempb); tempb=tempb->next; @@ -116,7 +120,7 @@ U0 BgtRegen() if (pdoc=Fs->put_doc) { DocLock(pdoc); - //Now, we want to preserve old position in doc, using ugly brute force. +//Now, we want to preserve old position in doc, using ugly brute force. //It's tricky -- can't use old line num because of editor filters. //The price we pay for using the standard document editor is this kludge. @@ -134,7 +138,7 @@ U0 BgtRegen() while (tempb!=&b_root) { if (tempb==tempb_ce) { doc->cur_entry=tempb->doc_e; - doc->cur_data_col=0; + doc->cur_col=0; DocCenter(doc); goto br_cont; } @@ -144,7 +148,7 @@ U0 BgtRegen() } } -br_cont: + br_cont: ddoc=Fs->display_doc; Fs->put_doc =doc; Fs->display_doc=doc; @@ -165,22 +169,22 @@ U0 Budget() WinBorder; AutoComplete; MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Edit {" -" NewEntry(,'n');" -" CopyEntry(,'c');" -" EditEntry(,'\n');" -" DeleteEntry(,CH_CTRLY);" -" NewTemplate(,'t');" -" AcctsFile(,'a');" -"}" -"View {" -" ViewAcct(,'v');" -"}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Edit {" + " NewEntry(,'n');" + " CopyEntry(,'c');" + " EditEntry(,'\n');" + " DeleteEntry(,CH_CTRLY);" + " NewTemplate(,'t');" + " AcctsFile(,'a');" + "}" + "View {" + " ViewAcct(,'v');" + "}" + ); StrCpy(view_acct,"BANK"); DocMax; old_put =Fs->put_doc; diff --git a/Apps/Budget/BgtStrs.CPP b/Apps/Budget/BgtStrs.CPP index f660b20..3d88220 100644 --- a/Apps/Budget/BgtStrs.CPP +++ b/Apps/Budget/BgtStrs.CPP @@ -1,6 +1,7 @@ #define SFT_GENERIC 1 -public U8 **StrFileRead(U8 *name,I64 *_max_num=NULL,U8 **_colors=NULL,Bool no_nums=FALSE) +public U8 **StrFileRead(U8 *name,I64 *_max_num=NULL, + U8 **_colors=NULL,Bool no_nums=FALSE) { CDoc *doc=DocRead(name,DOCF_DBL_DOLLARS|DOCF_NO_CURSOR); CDocEntry *doc_e=doc->root.next; @@ -53,7 +54,8 @@ public U0 StrFileArrDel(U8 **a,I64 max_num) Free(a); } -public I64 StrFileAdd(U8 *st,I64 *_num,CHashTable *table,I64 color=COLOR_INVALID) +public I64 StrFileAdd(U8 *st,I64 *_num, + CHashTable *table,I64 color=COLOR_INVALID) { CHashGeneric *temph; if (!st) return 0; diff --git a/Apps/Budget/BgtTemplate.CPP b/Apps/Budget/BgtTemplate.CPP index da8ae96..ea060fd 100644 --- a/Apps/Budget/BgtTemplate.CPP +++ b/Apps/Budget/BgtTemplate.CPP @@ -133,7 +133,7 @@ CBgtTemplate *BgtTemplatePmt(CBgtTemplate *dft_t=NULL) } while (TRUE) if (PopUpForm(&t) && ((t.type==BT_INTERVAL && t.period>0) || - t.type>BT_INTERVAL)) { + t.type>BT_INTERVAL)) { if (tempb=BgtEntryPmt(dft_b)) { tempt=CAlloc(sizeof(CBgtTemplate)); MemCpy(&tempt->start,&t.start,BT_SIZE); diff --git a/Apps/GrModels/BallGen.CPP b/Apps/GrModels/BallGen.CPP index c06e359..d549713 100644 --- a/Apps/GrModels/BallGen.CPP +++ b/Apps/GrModels/BallGen.CPP @@ -59,8 +59,9 @@ U8 *Ball2CSprite() { //See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ for how CSprite are stored. U8 *result=MAlloc(sizeof(CSpriteMeshU8s)+ - b->vertex_cnt*sizeof(CD3I32)+b->tri_cnt*sizeof(CMeshTri)+sprite_elem_base_sizes[SPT_END]), - *dst=result; + b->vertex_cnt*sizeof(CD3I32)+b->tri_cnt*sizeof(CMeshTri) + +sprite_elem_base_sizes[SPT_END]), + *dst=result; *dst++ =SPT_MESH; *dst(I32 *)++ =b->vertex_cnt; *dst(I32 *)++ =b->tri_cnt; @@ -82,7 +83,7 @@ public U8 *BallGen() BDInit(&bd1); while (TRUE) { - if (!DocFormDo(&bd1)) + if (!DocForm(&bd1)) return NULL; MemCpy(&bd2,&bd1,sizeof(BallDefineStruct)); BDCorrect(&bd2); @@ -110,7 +111,7 @@ public U8 *BallGen() AddTri(&bd2,c,p3,p2,p4); } } - + result=Ball2CSprite; "%h7c",'\n'; Sprite(result,"\t\t$$SP,\"<1>\",BI=%d$$"); diff --git a/Apps/GrModels/ManGen.CPP b/Apps/GrModels/ManGen.CPP index 06fc7d5..b4a3c78 100644 --- a/Apps/GrModels/ManGen.CPP +++ b/Apps/GrModels/ManGen.CPP @@ -13,39 +13,67 @@ class Man class ManDefineStruct { - F64 head_rad fmtstr "$$DA-TRM,32,RT=F64,A=\"Head Radius :%8.3f\"$$\n"; + F64 head_rad fmtstr + "$$DA-TRM,32,RT=F64,A=\"Head Radius :%8.3f\"$$\n"; - F64 torso_len fmtstr "$$DA-TRM,32,RT=F64,A=\"Torso Length :%8.3f\"$$\n"; - F64 arm_len fmtstr "$$DA-TRM,32,RT=F64,A=\"Arm Length :%8.3f\"$$\n"; - F64 hand_len fmtstr "$$DA-TRM,32,RT=F64,A=\"Hand Length :%8.3f\"$$\n"; - F64 leg_len fmtstr "$$DA-TRM,32,RT=F64,A=\"Leg Length :%8.3f\"$$\n"; - F64 foot_len fmtstr "$$DA-TRM,32,RT=F64,A=\"Foot Length :%8.3f\"$$\n"; - F64 torso_width fmtstr "$$DA-TRM,32,RT=F64,A=\"Torso Width :%8.3f\"$$\n"; - F64 torso_depth fmtstr "$$DA-TRM,32,RT=F64,A=\"Torso Depth :%8.3f\"$$\n"; - F64 arm_rad fmtstr "$$DA-TRM,32,RT=F64,A=\"Arm Radius :%8.3f\"$$\n"; - F64 hand_rad fmtstr "$$DA-TRM,32,RT=F64,A=\"Hand Radius :%8.3f\"$$\n"; - F64 leg_rad fmtstr "$$DA-TRM,32,RT=F64,A=\"Leg Radius :%8.3f\"$$\n"; - F64 foot_rad fmtstr "$$DA-TRM,32,RT=F64,A=\"Foot Radius :%8.3f\"$$\n\n"; + F64 torso_len fmtstr + "$$DA-TRM,32,RT=F64,A=\"Torso Length :%8.3f\"$$\n"; + F64 arm_len fmtstr + "$$DA-TRM,32,RT=F64,A=\"Arm Length :%8.3f\"$$\n"; + F64 hand_len fmtstr + "$$DA-TRM,32,RT=F64,A=\"Hand Length :%8.3f\"$$\n"; + F64 leg_len fmtstr + "$$DA-TRM,32,RT=F64,A=\"Leg Length :%8.3f\"$$\n"; + F64 foot_len fmtstr + "$$DA-TRM,32,RT=F64,A=\"Foot Length :%8.3f\"$$\n"; + F64 torso_width fmtstr + "$$DA-TRM,32,RT=F64,A=\"Torso Width :%8.3f\"$$\n"; + F64 torso_depth fmtstr + "$$DA-TRM,32,RT=F64,A=\"Torso Depth :%8.3f\"$$\n"; + F64 arm_rad fmtstr + "$$DA-TRM,32,RT=F64,A=\"Arm Radius :%8.3f\"$$\n"; + F64 hand_rad fmtstr + "$$DA-TRM,32,RT=F64,A=\"Hand Radius :%8.3f\"$$\n"; + F64 leg_rad fmtstr + "$$DA-TRM,32,RT=F64,A=\"Leg Radius :%8.3f\"$$\n"; + F64 foot_rad fmtstr + "$$DA-TRM,32,RT=F64,A=\"Foot Radius :%8.3f\"$$\n\n"; - F64 r_shoulder_a1 fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Shoulder Front/Back Angle:%8.3f\"$$\n"; - F64 l_shoulder_a1 fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Shoulder Front/Back Angle:%8.3f\"$$\n"; - F64 r_hip_a1 fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Hip Front/Back Angle :%8.3f\"$$\n"; - F64 l_hip_a1 fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Hip Front/Back Angle :%8.3f\"$$\n"; + F64 r_shoulder_a1 fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Shoulder Front/Back Angle:%8.3f\"$$\n"; + F64 l_shoulder_a1 fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Shoulder Front/Back Angle:%8.3f\"$$\n"; + F64 r_hip_a1 fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Hip Front/Back Angle :%8.3f\"$$\n"; + F64 l_hip_a1 fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Hip Front/Back Angle :%8.3f\"$$\n"; - F64 r_shoulder_a2 fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Shoulder Side Angle :%8.3f\"$$\n"; - F64 l_shoulder_a2 fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Shoulder Side Angle :%8.3f\"$$\n"; - F64 r_hip_a2 fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Hip Side Angle :%8.3f\"$$\n"; - F64 l_hip_a2 fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Hip Side Angle :%8.3f\"$$\n"; + F64 r_shoulder_a2 fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Shoulder Side Angle :%8.3f\"$$\n"; + F64 l_shoulder_a2 fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Shoulder Side Angle :%8.3f\"$$\n"; + F64 r_hip_a2 fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Hip Side Angle :%8.3f\"$$\n"; + F64 l_hip_a2 fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Hip Side Angle :%8.3f\"$$\n"; - F64 r_elbow_a fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Elbow Angle :%8.3f\"$$\n"; - F64 l_elbow_a fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Elbow Angle :%8.3f\"$$\n"; - F64 r_knee_a fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Knee Angle :%8.3f\"$$\n"; - F64 l_knee_a fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Knee Angle :%8.3f\"$$\n"; + F64 r_elbow_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Elbow Angle :%8.3f\"$$\n"; + F64 l_elbow_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Elbow Angle :%8.3f\"$$\n"; + F64 r_knee_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Knee Angle :%8.3f\"$$\n"; + F64 l_knee_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Knee Angle :%8.3f\"$$\n"; - F64 r_wrist_a fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Wrist Angle :%8.3f\"$$\n"; - F64 l_wrist_a fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Wrist Angle :%8.3f\"$$\n"; - F64 r_ankle_a fmtstr "$$DA-TRM,32,RT=F64,A=\"R.Ankle Angle :%8.3f\"$$\n"; - F64 l_ankle_a fmtstr "$$DA-TRM,32,RT=F64,A=\"L.Ankle Angle :%8.3f\"$$\n"; + F64 r_wrist_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Wrist Angle :%8.3f\"$$\n"; + F64 l_wrist_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Wrist Angle :%8.3f\"$$\n"; + F64 r_ankle_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"R.Ankle Angle :%8.3f\"$$\n"; + F64 l_ankle_a fmtstr + "$$DA-TRM,32,RT=F64,A=\"L.Ankle Angle :%8.3f\"$$\n"; }; @@ -131,23 +159,25 @@ I64 AddTri(ManDefineStruct *,I64 c,I64 n0,I64 n1,I64 n2) return result; } -U0 AddBox(ManDefineStruct *md,I64 c,I64 x1,I64 y1,I64 z1,F64 w,F64 h,F64 d,F64 h2,F64 h3,F64 az,F64 ay,F64 ax, - I64 *ox,I64 *oy,I64 *oz) +U0 AddBox(ManDefineStruct *md,I64 c,I64 x1,I64 y1,I64 z1, + F64 w,F64 h,F64 d,F64 h2,F64 h3,F64 az,F64 ay,F64 ax, + I64 *ox,I64 *oy,I64 *oz) { I64 *r; I64 p1a,p2a,p3a,p4a; I64 p1b,p2b,p3b,p4b; - I64 wx=w/2,wy=0,wz=0,hx=0,hy=h,hz=0,h2x=0,h2y=h2,h2z=0,h3x=0,h3y=h3,h3z=0,dx=0,dy=0,dz=d/2; + I64 wx=w/2,wy=0,wz=0,hx=0,hy=h,hz=0,h2x=0,h2y=h2,h2z=0, + h3x=0,h3y=h3,h3z=0,dx=0,dy=0,dz=d/2; - r=GrIdentNew; - GrRotZEqu(r,az*ã/180.0); - GrRotYEqu(r,ay*ã/180.0); - GrRotXEqu(r,ax*ã/180.0); - GrRot(r,&wx,&wy,&wz); - GrRot(r,&hx,&hy,&hz); - GrRot(r,&h2x,&h2y,&h2z); - GrRot(r,&h3x,&h3y,&h3z); - GrRot(r,&dx,&dy,&dz); + r=Mat4x4IdentNew; + Mat4x4RotZ(r,az*ã/180.0); + Mat4x4RotY(r,ay*ã/180.0); + Mat4x4RotX(r,ax*ã/180.0); + Mat4x4MulXYZ(r,&wx,&wy,&wz); + Mat4x4MulXYZ(r,&hx,&hy,&hz); + Mat4x4MulXYZ(r,&h2x,&h2y,&h2z); + Mat4x4MulXYZ(r,&h3x,&h3y,&h3z); + Mat4x4MulXYZ(r,&dx,&dy,&dz); p1a=AddVertex(md,x1+dx -wx+h2x,y1+dy -wy+h2y,z1+dz -wz+h2z); p2a=AddVertex(md,x1+dx +wx+h2x,y1+dy +wy+h2y,z1+dz +wz+h2z); @@ -183,8 +213,9 @@ U8 *Man2CSprite() { //See $LK,"::/Adam/Gr/GrSpritePlot.CPP",A="FL:::/Adam/Gr/GrSpritePlot.CPP,1"$ for how CSprite are stored. U8 *result=MAlloc(sizeof(CSpriteMeshU8s)+ - m->vertex_cnt*sizeof(CD3I32)+m->tri_cnt*sizeof(CMeshTri)+sprite_elem_base_sizes[SPT_END]), - *dst=result; + m->vertex_cnt*sizeof(CD3I32)+m->tri_cnt*sizeof(CMeshTri)+ + sprite_elem_base_sizes[SPT_END]), + *dst=result; *dst++ =SPT_MESH; *dst(I32 *)++ =m->vertex_cnt; *dst(I32 *)++ =m->tri_cnt; @@ -204,7 +235,7 @@ public U8 *ManGen() MDInit(&md1); while (TRUE) { - if (!DocFormDo(&md1)) + if (!DocForm(&md1)) return NULL; MemCpy(&md2,&md1,sizeof(ManDefineStruct)); MDCorrect(&md2); @@ -222,57 +253,57 @@ public U8 *ManGen() //Head AddBox(&md2,c3,0,md2.torso_len+md2.head_rad*2,0, - md2.head_rad*2,-md2.head_rad*2,md2.head_rad*2,0,0, 0,0,0, - &x,&y,&z); + md2.head_rad*2,-md2.head_rad*2,md2.head_rad*2,0,0, 0,0,0, + &x,&y,&z); - //Torso + //Torso AddBox(&md2,c1,0,md2.torso_len,0, - md2.torso_width,-md2.torso_len,md2.torso_depth,0,0, 0,0,0, - &x,&y,&z); + md2.torso_width,-md2.torso_len,md2.torso_depth,0,0, 0,0,0, + &x,&y,&z); - //Right Arm + //Right Arm AddBox(&md2,c1,-md2.torso_width/2-md2.arm_rad,md2.torso_len-md2.arm_rad,0, - md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,md2.arm_rad,0, - md2.r_shoulder_a2,0,md2.r_shoulder_a1,&x,&y,&z); + md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,md2.arm_rad,0, + md2.r_shoulder_a2,0,md2.r_shoulder_a1,&x,&y,&z); AddBox(&md2,c3,x,y,z, - md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,0,0, - md2.r_shoulder_a2,0,md2.r_elbow_a,&x,&y,&z); + md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,0,0, + md2.r_shoulder_a2,0,md2.r_elbow_a,&x,&y,&z); AddBox(&md2,c3,x,y,z, - md2.arm_rad*2,-md2.hand_len,md2.hand_rad*2,0,0, - md2.r_shoulder_a2,0,md2.r_wrist_a,&x,&y,&z); + md2.arm_rad*2,-md2.hand_len,md2.hand_rad*2,0,0, + md2.r_shoulder_a2,0,md2.r_wrist_a,&x,&y,&z); - //Left Arm + //Left Arm AddBox(&md2,c1,md2.torso_width/2+md2.arm_rad,md2.torso_len-md2.arm_rad,0, - md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,md2.arm_rad,0, - md2.l_shoulder_a2,0,md2.l_shoulder_a1,&x,&y,&z); + md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,md2.arm_rad,0, + md2.l_shoulder_a2,0,md2.l_shoulder_a1,&x,&y,&z); AddBox(&md2,c3,x,y,z, - md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,0,0, - md2.l_shoulder_a2,0,md2.l_elbow_a,&x,&y,&z); + md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,0,0, + md2.l_shoulder_a2,0,md2.l_elbow_a,&x,&y,&z); AddBox(&md2,c3,x,y,z, - md2.arm_rad*2,-md2.hand_len,md2.hand_rad*2,0,0, - md2.l_shoulder_a2,0,md2.l_wrist_a,&x,&y,&z); + md2.arm_rad*2,-md2.hand_len,md2.hand_rad*2,0,0, + md2.l_shoulder_a2,0,md2.l_wrist_a,&x,&y,&z); - //Right Leg + //Right Leg AddBox(&md2,c2,-md2.torso_width/2+md2.leg_rad,0,0, - md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,0, - md2.r_hip_a2,0,md2.r_hip_a1,&x,&y,&z); + md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,0, + md2.r_hip_a2,0,md2.r_hip_a1,&x,&y,&z); AddBox(&md2,c3,x,y,z, - md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,md2.foot_rad, - md2.r_hip_a2,0,md2.r_knee_a,&x,&y,&z); + md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,md2.foot_rad, + md2.r_hip_a2,0,md2.r_knee_a,&x,&y,&z); AddBox(&md2,c4,x,y,z, - md2.leg_rad*2,-md2.foot_len,md2.foot_rad*2,md2.leg_rad,0, - md2.r_hip_a2,0,md2.r_ankle_a,&x,&y,&z); + md2.leg_rad*2,-md2.foot_len,md2.foot_rad*2,md2.leg_rad,0, + md2.r_hip_a2,0,md2.r_ankle_a,&x,&y,&z); - //Left Leg + //Left Leg AddBox(&md2,c2,md2.torso_width/2-md2.leg_rad,0,0, - md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,0, - md2.l_hip_a2,0,md2.l_hip_a1,&x,&y,&z); + md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,0, + md2.l_hip_a2,0,md2.l_hip_a1,&x,&y,&z); AddBox(&md2,c3,x,y,z, - md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,md2.foot_rad, - md2.l_hip_a2,0,md2.l_knee_a,&x,&y,&z); + md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,md2.foot_rad, + md2.l_hip_a2,0,md2.l_knee_a,&x,&y,&z); AddBox(&md2,c4,x,y,z, - md2.leg_rad*2,-md2.foot_len,md2.foot_rad*2,md2.leg_rad,0, - md2.l_hip_a2,0,md2.l_ankle_a,&x,&y,&z); + md2.leg_rad*2,-md2.foot_len,md2.foot_rad*2,md2.leg_rad,0, + md2.l_hip_a2,0,md2.l_ankle_a,&x,&y,&z); result=Man2CSprite; "%h7c",'\n'; diff --git a/Apps/GrModels/Models.CPP b/Apps/GrModels/Models.CPP index 6106f75..085b461 100644 --- a/Apps/GrModels/Models.CPP +++ b/Apps/GrModels/Models.CPP @@ -11,7 +11,7 @@ U0 Models() "\n\n$$BT,\"Man\",LE=T_MAN$$\n\n"; "\n\n$$BT,\"Ball\",LE=T_BALL$$\n\n"; "$$LM,0$$"; - i=DocMenuDo(DocPut); + i=DocMenu(DocPut); LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); DocBottom; switch (i) { diff --git a/Apps/KeepAway/KeepAway.CPP b/Apps/KeepAway/KeepAway.CPP index 159459e..72a4658 100644 --- a/Apps/KeepAway/KeepAway.CPP +++ b/Apps/KeepAway/KeepAway.CPP @@ -194,7 +194,8 @@ This is just a video game. Relax. #define HEAD_Z_OFFSET 200 #define HAND_X_OFFSET 30 #define HAND_Y_OFFSET 20 -#define HAND_SQR_OFFSET (HAND_X_OFFSET*HAND_X_OFFSET+HAND_Y_OFFSET*HAND_Y_OFFSET) +#define HAND_SQR_OFFSET \ + (HAND_X_OFFSET*HAND_X_OFFSET+HAND_Y_OFFSET*HAND_Y_OFFSET) #define HAND_Z_OFFSET 110 #define FIRST_STANDING 0 @@ -213,19 +214,26 @@ This is just a video game. Relax. #define NUM_STOPPED_DRIBBLING_IMGS 2 #define FIRST_STOPPED_DRIBBLING (LAST_DRIBBLING+1) -#define LAST_STOPPED_DRIBBLING (FIRST_STOPPED_DRIBBLING+NUM_STOPPED_DRIBBLING_IMGS-1) +#define LAST_STOPPED_DRIBBLING \ + (FIRST_STOPPED_DRIBBLING+NUM_STOPPED_DRIBBLING_IMGS-1) Frame imgs[LAST_STOPPED_DRIBBLING+1]={ -{{$IB,"<6>",BI=6$,$IB,"<7>",BI=7$},2*DRIBBLE_T/NUM_RUNNING_IMGS},{{$IB,"<2>",BI=2$,$IB,"<3>",BI=3$},2*DRIBBLE_T/NUM_RUNNING_IMGS}, -{{$IB,"<6>",BI=6$,$IB,"<7>",BI=7$},2*DRIBBLE_T/NUM_RUNNING_IMGS},{{$IB,"<4>",BI=4$,$IB,"<5>",BI=5$},2*DRIBBLE_T/NUM_RUNNING_IMGS}, -{{$IB,"<8>",BI=8$,$IB,"<9>",BI=9$},0.1},{{$IB,"<10>",BI=10$,$IB,"<11>",BI=11$},0.2},{{$IB,"<12>",BI=12$,$IB,"<13>",BI=13$},0.2},{{$IB,"<12>",BI=12$,$IB,"<13>",BI=13$},0.1},{{$IB,"<14>",BI=14$,$IB,"<15>",BI=15$},0.1}, -{{$IB,"<20>",BI=20$,$IB,"<21>",BI=21$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS},{{$IB,"<16>",BI=16$,$IB,"<17>",BI=17$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS}, -{{$IB,"<20>",BI=20$,$IB,"<21>",BI=21$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS},{{$IB,"<18>",BI=18$,$IB,"<19>",BI=19$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS}, -{{$IB,"<20>",BI=20$,$IB,"<21>",BI=21$},DRIBBLE_T/NUM_STOPPED_DRIBBLING_IMGS},{{$IB,"<22>",BI=22$,$IB,"<23>",BI=23$},DRIBBLE_T/NUM_STOPPED_DRIBBLING_IMGS}, + {{$IB,"<6>",BI=6$,$IB,"<7>",BI=7$},2*DRIBBLE_T/NUM_RUNNING_IMGS}, + {{$IB,"<2>",BI=2$,$IB,"<3>",BI=3$},2*DRIBBLE_T/NUM_RUNNING_IMGS}, + {{$IB,"<6>",BI=6$,$IB,"<7>",BI=7$},2*DRIBBLE_T/NUM_RUNNING_IMGS}, + {{$IB,"<4>",BI=4$,$IB,"<5>",BI=5$},2*DRIBBLE_T/NUM_RUNNING_IMGS}, + {{$IB,"<8>",BI=8$,$IB,"<9>",BI=9$},0.1},{{$IB,"<10>",BI=10$,$IB,"<11>",BI=11$},0.2}, + {{$IB,"<12>",BI=12$,$IB,"<13>",BI=13$},0.2},{{$IB,"<12>",BI=12$,$IB,"<13>",BI=13$},0.1},{{$IB,"<14>",BI=14$,$IB,"<15>",BI=15$},0.1}, + {{$IB,"<20>",BI=20$,$IB,"<21>",BI=21$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS}, + {{$IB,"<16>",BI=16$,$IB,"<17>",BI=17$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS}, + {{$IB,"<20>",BI=20$,$IB,"<21>",BI=21$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS}, + {{$IB,"<18>",BI=18$,$IB,"<19>",BI=19$},2*DRIBBLE_T/NUM_DRIBBLING_IMGS}, + {{$IB,"<20>",BI=20$,$IB,"<21>",BI=21$},DRIBBLE_T/NUM_STOPPED_DRIBBLING_IMGS}, + {{$IB,"<22>",BI=22$,$IB,"<23>",BI=23$},DRIBBLE_T/NUM_STOPPED_DRIBBLING_IMGS}, }; -AcctRegSetDftEntry("TempleOS/KeepAway","I64 best_score0=0,best_score1=9999;\n"); -AcctRegExeBranch("TempleOS/KeepAway"); +RegSetDftEntry("TempleOS/KeepAway","I64 best_score0=0,best_score1=9999;\n"); +RegExeBranch("TempleOS/KeepAway"); F64 game_t_end,foul_t_end; I64 score0,score1; @@ -272,8 +280,8 @@ U0 DrawObj(CDC *dc,Obj *o,F64 tt) Sprite3(dc,o->x,(o->y-o->z)/2,GR_Z_ALL-o->y,$IB,"<1>",BI=1$); else { temps=SpriteInterpolate(imgs[o->last_img].img[o->team], - imgs[o->next_img].img[o->team], - (tt-o->last_t0)/(o->next_t0-o->last_t0)); + imgs[o->next_img].img[o->team], + (tt-o->last_t0)/(o->next_t0-o->last_t0)); SpriteY3B(dc,o->x,(o->y-o->z)/2,GR_Z_ALL-o->y,temps,o->ay); Free(temps); } @@ -290,7 +298,7 @@ U0 DrawIt(CTask *task,CDC *dc) I64 i; Obj *o_sort[NUM_OBJS],*o; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); dc->ls.x=10000; dc->ls.y=60000; dc->ls.z=10000; @@ -302,14 +310,14 @@ U0 DrawIt(CTask *task,CDC *dc) dc->pen_width=2; dc->color=RED; GrBorder(dc,COURT_BORDER,COURT_BORDER, - task->pix_width -1-COURT_BORDER, - task->pix_height-1-COURT_BORDER); + task->pix_width -1-COURT_BORDER, + task->pix_height-1-COURT_BORDER); for (i=0;ihas_ball) { ball->x=o->x+HAND_X_OFFSET*Cos(o->ay-ã/2)+HAND_Y_OFFSET*Cos(o->ay); - //The factor 2 is because the man is not transformed. +//The factor 2 is because the man is not transformed. ball->y=o->y+HAND_X_OFFSET*Sin(o->ay-ã/2)/2+HAND_Y_OFFSET*Sin(o->ay)/2; if (ball->z+ball->radius*2>o->z+HAND_Z_OFFSET) ball->z=o->z+HAND_Z_OFFSET-ball->radius*2; @@ -319,15 +327,19 @@ U0 DrawIt(CTask *task,CDC *dc) ball->z=o->z+HEAD_Z_OFFSET; } if (tt>o->next_t0) { - if (o->has_ball && (ball->z+ball->radius*2>=o->z+HAND_Z_OFFSET || Abs(ball->DzDt)<30)) { - //This is an approximation. My instinct tells me the viscosity term needs an $LK,"Exp",A="MN:Exp"$(). - //However, we should be syncronized to img frames, so we don't have to be perfect. + if (o->has_ball && (ball->z+ball->radius*2>=o->z+HAND_Z_OFFSET || + Abs(ball->DzDt)<30)) { +//This is an approximation. My instinct tells me the viscosity term + //needs an $LK,"Exp",A="MN:Exp"$(). However, we should be syncronized to img frames, + //so we don't have to be perfect. d_down=1.0; - d_up =1.0/COLLISION_DAMP; //Up bounce takes higher percentage because speed lost in collision. - ball->DzDt=-((d_down+d_up)*(o->z+HAND_Z_OFFSET-ball->radius*4)/(1.0-AIR_VISCOSITY)+ - 0.5*GRAVITY_ACCELERATION*( - Sqr(DRIBBLE_T*d_up/(d_down+d_up))- - Sqr(DRIBBLE_T*d_down/(d_down+d_up)) ))/DRIBBLE_T; + d_up =1.0/COLLISION_DAMP; +//Up bounce takes higher % because speed lost in collision. + ball->DzDt=-((d_down+d_up)* + (o->z+HAND_Z_OFFSET-ball->radius*4)/(1.0-AIR_VISCOSITY)+ + 0.5*GRAVITY_ACCELERATION*( + Sqr(DRIBBLE_T*d_up/(d_down+d_up))- + Sqr(DRIBBLE_T*d_down/(d_down+d_up)) ))/DRIBBLE_T; } o->last_t0=tt; o->last_img=o->next_img++; @@ -379,13 +391,13 @@ U0 DrawIt(CTask *task,CDC *dc) tt=0; if (Blink) GrPrint(dc,(task->pix_width-FONT_WIDTH*9)>>1, - (task->pix_height-FONT_HEIGHT)>>1,"Game Over"); + (task->pix_height-FONT_HEIGHT)>>1,"Game Over"); } else { if (tScolor=LTRED; if (Blink) GrPrint(dc,(task->pix_width-FONT_WIDTH*4)>>1, - (task->pix_height-FONT_HEIGHT)>>1,"Foul"); + (task->pix_height-FONT_HEIGHT)>>1,"Foul"); } dc->color=BLACK; } @@ -506,7 +518,8 @@ U0 AnimateTask(CTask *parent_task) if (t0>o->foul_t0+0.15) { d=(dx-objs[j].DxDt)*dx2+(dy-objs[j].DyDt)*dy2; if (o==human && t0>o->foul_t0+1.0 && - dt && d/dt>FOUL_VELOCITY_THRESHOLD && objs[j].team) { + dt && d/dt>FOUL_VELOCITY_THRESHOLD && + objs[j].team) { Noise(250,500,500); score1+=1; foul_t_end=t0+1.0; @@ -572,7 +585,7 @@ U0 AnimateTask(CTask *parent_task) } } - WinMgrSync; + WinMgrSync; } } @@ -608,29 +621,29 @@ U0 KeepAway() I64 msg_code,a1,a2; PopUpOk( - "$$RED$$Pass or hand-off to score points.$$FG$$\n\n" - "Left-Click to pass.\n" - "Right-Click to jump.\n"); + "$$RED$$Pass or hand-off to score points.$$FG$$\n\n" + "Left-Click to pass.\n" + "Right-Click to jump.\n"); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->text_attr=BLACK+YELLOW<<4; WinMax; WinBorder; - Preempt(OFF); + Preempt; Fs->win_inhibit|=WIG_DBL_CLICK; AutoComplete; MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Play {" -" Restart(,'\n');" -" Shoot(,CH_SPACE);" -" Jump(,'j');" -"}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Shoot(,CH_SPACE);" + " Jump(,'j');" + "}" + ); Init; DocCursor; @@ -640,7 +653,8 @@ U0 KeepAway() try { while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<color=YELLOW; + GrCircle(dc,X,Y,10); + GrFloodFill(dc,X,Y,10); + dc->color=BROWN; + GrCircle(dc,X,Y,10); + dc->color=YELLOW; + for (i=0;itext_attr=LTCYAN<<4+BLACK; + Fs->draw_it=&DrawIt; + Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; + music.tempo= 2.480; + music.stacatto_factor= 0.902; + for (i=0;iwin_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + "$$BG+H,LTCYAN$$$$FD+H,BLACK$$"; + while (!ScanKey) { + "$$WHITE$$To God...\n$$FG$$"; + Play("3etCFEsDDDDD2G3D2G3qC2eG3EqEetAAF2qG", + "I \0am \0a\0biding \0 \0 \0 \0in \0 \0Your \0 \0" + "presence.\n\0 \0 \0 \0 \0 \0 \0 \0"); + Play("3etCFEsDDDDD2G3D2G3qC2eG3EqEetAAF2qG", + "I \0am \0a\0biding \0 \0 \0 \0in \0 \0Your \0 \0" + "presence.\n\0 \0 \0 \0 \0 \0 \0 \0"); + Play("3DBsFGFG2eG3FRDqEGeBE", + "What \0a \0joy!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("qDBsFGFG2eG3FRDqEGeBE", + "I'm \0so \0coy!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + } + } catch + PutExcept; + SettingsPop; +} + +Song; diff --git a/Apps/Psalmody/Examples/abyss.CPP b/Apps/Psalmody/Examples/abyss.CPP index c406980..e9577e0 100644 --- a/Apps/Psalmody/Examples/abyss.CPP +++ b/Apps/Psalmody/Examples/abyss.CPP @@ -1,7 +1,39 @@ -//7 has words +//7 has graphics + +F64 t0=Beat; + +U0 DrawIt(CTask *task,CDC *dc) +{ + I64 i,j,w=task->pix_width,h=task->pix_height; + F64 dt=Beat-t0,num; + + num=MinI64(Exp(0.9*dt),3000); + dc->color=LTGRAY; + for (i=0;icolor=DKGRAY; + for (i=0;icolor=BLACK; + for (i=0;idraw_it=&DrawIt; Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; music.tempo= 2.480; @@ -20,6 +52,7 @@ U0 Song() WinHorz(Fs->win_left,Fs->win_right,task); WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { + t0=Beat; Play("3sBBBBqCq.BeAqBh.A", "Can't \0 \0 \0 \0get \0there, \0from \0he\0re.\n\0"); Play("M2/4"); @@ -29,13 +62,15 @@ U0 Song() Play("M2/4"); Play("eDDqDM4/4"); Play("DeEDqGCeF2G3qGsFGFGeDC", - "Oh, \0my \0 \0God, \0some\0thing's... \0 \0 \0ver\0 \0y \0 \0wrong!\n\0 \0"); + "Oh, \0my \0 \0God, \0some\0thing's... \0 \0 \0" + "ver\0 \0y \0 \0wrong!\n\0 \0"); Play("qDeEDqGCeF2G3qGsFGFGeDC", - "Oh, \0my \0 \0God, \0some\0thing's... \0 \0 \0ver\0 \0y \0 \0wrong!\n\0 \0"); + "Oh, \0my \0 \0God, \0some\0thing's... \0 \0 \0" + "ver\0 \0y \0 \0wrong!\n\0 \0"); } } catch PutExcept; - Snd(0); + SettingsPop; } Song; diff --git a/Apps/Psalmody/Examples/advantage.CPP b/Apps/Psalmody/Examples/advantage.CPP index 7d09354..d366695 100644 --- a/Apps/Psalmody/Examples/advantage.CPP +++ b/Apps/Psalmody/Examples/advantage.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3eCsAAeCsAAeDABRCqEsBBeEDFE"); - Play("CAqCsDDAAeBRCDsCCBBeEAFsEE"); - Play("G2G3G2G3qGeBBBFsD2G3eDsB2G3B2G3eBAsGF2eG"); - Play("3sG2G3G2G3qGeBBBFsD2G3eDsB2G3B2G3eBAsGF2eG"); - } + while (!ScanKey) { + Play("3eCsAAeCsAAeDABRCqEsBBeEDFE"); + Play("CAqCsDDAAeBRCDsCCBBeEAFsEE"); + Play("G2G3G2G3qGeBBBFsD2G3eDsB2G3B2G3eBAsGF2eG"); + Play("3sG2G3G2G3qGeBBBFsD2G3eDsB2G3B2G3eBAsGF2eG"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/almighty.CPP b/Apps/Psalmody/Examples/almighty.CPP index ce831ee..9ee2988 100644 --- a/Apps/Psalmody/Examples/almighty.CPP +++ b/Apps/Psalmody/Examples/almighty.CPP @@ -5,16 +5,16 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("2qG3etC2GG3qARR2etG3FBqEeFE", - "All \0righ\0 \0 \0ty.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("2qG3etC2GG3qARR2etG3FBqEeFE", - "All \0migh\0 \0 \0ty.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("qFFEEeEBqFCB", - "Al\0read\0y, \0 \0I've \0 \0seen \0en\0ough.\n\0"); - Play("FFEEeEBqFCB", - "Oh \0bo\0y, \0 \0was \0 \0that \0rough.\n\0 \0"); - } + while (!ScanKey) { + Play("2qG3etC2GG3qARR2etG3FBqEeFE", + "All \0righ\0 \0 \0ty.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("2qG3etC2GG3qARR2etG3FBqEeFE", + "All \0migh\0 \0 \0ty.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("qFFEEeEBqFCB", + "Al\0read\0y, \0 \0I've \0 \0seen \0en\0ough.\n\0"); + Play("FFEEeEBqFCB", + "Oh \0bo\0y, \0 \0was \0 \0that \0rough.\n\0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/alone.CPP b/Apps/Psalmody/Examples/alone.CPP index ab83cb9..c64e871 100644 --- a/Apps/Psalmody/Examples/alone.CPP +++ b/Apps/Psalmody/Examples/alone.CPP @@ -6,16 +6,20 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("2q.GeGqG3sBBCB2q.GeGqG3sBBCB", - "I'm \0a\0lone.\n\0$$RED$$No, \0you're \0 \0not.\n$$FG$$\0I'm \0a\0lone.\n\0$$RED$$No, \0you're \0 \0not.\n\0"); - Play("q.C2eG3CsDC2eGG3qC2G3eCsDC2eGG", - "You \0are \0not \0a\0lone.\n\0 \0 \0Def\0inately, \0not \0a\0lone.\n\0 \0 \0"); - Play("3sEAEAeCsCReRsDAe.GsBFFFFeEsAGeCsGDeDG", - "If \0 \0you \0 \0on\0ly \0 \0 \0 \0 \0knew.\n\0 \0His \0 \0 \0 \0Spir\0it \0 \0 \0is \0 \0with \0you.\n\0"); - Play("sEAEAeCsCReRsDAe.GsBFFFFeEsAGeCsGDeDG", - "If \0 \0you \0 \0on\0ly \0 \0 \0 \0 \0knew.\n\0 \0His \0 \0 \0 \0Spir\0it \0 \0 \0is \0 \0with \0you.\n$$FG$$\0"); - } + while (!ScanKey) { + Play("2q.GeGqG3sBBCB2q.GeGqG3sBBCB", + "I'm \0a\0lone.\n\0$$RED$$No, \0you're \0 \0not.\n$$FG$$\0" + "I'm \0a\0lone.\n\0$$RED$$No, \0you're \0 \0not.\n\0"); + Play("q.C2eG3CsDC2eGG3qC2G3eCsDC2eGG", + "You \0are \0not \0a\0lone.\n\0 \0 \0Def\0inately, \0" + "not \0a\0lone.\n\0 \0 \0"); + Play("3sEAEAeCsCReRsDAe.GsBFFFFeEsAGeCsGDeDG", + "If \0 \0you \0 \0on\0ly \0 \0 \0 \0 \0knew.\n\0 \0" + "His \0 \0 \0 \0Spir\0it \0 \0 \0is \0 \0with \0you.\n\0"); + Play("sEAEAeCsCReRsDAe.GsBFFFFeEsAGeCsGDeDG", + "If \0 \0you \0 \0on\0ly \0 \0 \0 \0 \0knew.\n\0 \0" + "His \0 \0 \0 \0Spir\0it \0 \0 \0is \0 \0with \0you.\n$$FG$$\0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/appreciate.CPP b/Apps/Psalmody/Examples/appreciate.CPP index 6f60104..6bc38ca 100644 --- a/Apps/Psalmody/Examples/appreciate.CPP +++ b/Apps/Psalmody/Examples/appreciate.CPP @@ -5,16 +5,20 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("3etDGDqGeCGetAE2G3eEFsGBGBqEG", - "Thanks, \0 \0 \0God! \0 \0 \0You \0 \0are \0might\0y \0 \0good \0 \0to \0me.\n\0 \0"); - Play("etDGDqGeCGetAE2G3eEFsGBGBqEG", - "Thanks, \0 \0 \0God! \0 \0 \0You \0 \0are \0might\0y \0 \0good \0 \0to \0me.\n\0 \0"); - Play("EsBGBGeEC2G3AqF2G3sC2G3C2GqG", - " \0 \0 \0 \0 \0 \0 \0I \0won't \0tell.\n\0 \0 \0 \0 \0 \0 \0"); - Play("3EsBGBGeEC2G3AqF2G3sC2G3C2GqG", - " \0 \0 \0 \0 \0 \0 \0I \0won't \0tell.\n\0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3etDGDqGeCGetAE2G3eEFsGBGBqEG", + "Thanks, \0 \0 \0God! \0 \0 \0" + "You \0 \0are \0might\0y \0 \0good \0 \0to \0me.\n\0 \0"); + Play("etDGDqGeCGetAE2G3eEFsGBGBqEG", + "Thanks, \0 \0 \0God! \0 \0 \0" + "You \0 \0are \0might\0y \0 \0good \0 \0to \0me.\n\0 \0"); + Play("EsBGBGeEC2G3AqF2G3sC2G3C2GqG", + " \0 \0 \0 \0 \0 \0 \0" + "I \0won't \0tell.\n\0 \0 \0 \0 \0 \0 \0"); + Play("3EsBGBGeEC2G3AqF2G3sC2G3C2GqG", + " \0 \0 \0 \0 \0 \0 \0" + "I \0won't \0tell.\n\0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/awake.CPP b/Apps/Psalmody/Examples/awake.CPP index 812aa80..7f0984b 100644 --- a/Apps/Psalmody/Examples/awake.CPP +++ b/Apps/Psalmody/Examples/awake.CPP @@ -54,13 +54,17 @@ U0 Song() while (!ScanKey) { "$$GREEN$$Jesus talking...$$FG$$\n"; Play("3eBCqB2sG3D2G3DetCGFsCBCBetCGBeBGsBCBC", - "Stay \0a\0wake.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Stay \0a\0wake.\n\0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("eBCqB2sG3D2G3DetCGFsCBCBetCGBeBGsBCBC", - "Stay \0a\0wake.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Stay \0a\0wake.\n\0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("qDsDBDBetA2G3GqB2G3sADADqDetGFD", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0am \0a \0dead \0 \0man.\n\0"); + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + "I \0 \0am \0a \0dead \0 \0man.\n\0"); Play("qDsDBDBetA2G3GqB2G3sADADqDetGFD", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0am \0a \0dead \0 \0man.\n\0"); + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + "I \0 \0am \0a \0dead \0 \0man.\n\0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/bedewed.CPP b/Apps/Psalmody/Examples/bedewed.CPP index 45db7c7..38f83d7 100644 Binary files a/Apps/Psalmody/Examples/bedewed.CPP and b/Apps/Psalmody/Examples/bedewed.CPP differ diff --git a/Apps/Psalmody/Examples/born.CPP b/Apps/Psalmody/Examples/born.CPP index cf6d046..7daf0d6 100644 --- a/Apps/Psalmody/Examples/born.CPP +++ b/Apps/Psalmody/Examples/born.CPP @@ -37,13 +37,17 @@ U0 Song() while (!ScanKey) { t0=Beat; Play("3qBeB2G3qAeFAsFAFAqC2sG3A2G3ARBRB", - "New \0day \0is \0born.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "New \0day \0is \0born.\n\0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("qBeB2G3qAeFAsFAFAqC2sG3A2G3ARBRB", - "Though \0it's \0the \0mourn',\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Though \0it's \0the \0mourn',\n\0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("eDDRCqG2eGR3qEetEAFqCsDGDG", - "cheer-\0up \0 \0the \0heart\n\0 \0 \0 \0 \0 \0 \0 \0 \0as \0 \0you \0"); + "cheer-\0up \0 \0the \0heart\n\0 \0 \0 \0 \0 \0" + " \0 \0 \0as \0 \0you \0"); Play("eDDRCqG2eGR3qEetEAFqCsDGDG", - "hitch-\0up \0 \0the \0cart.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "hitch-\0up \0 \0the \0cart.\n\0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/childish.CPP b/Apps/Psalmody/Examples/childish.CPP index a5f4bea..a7db1f4 100644 --- a/Apps/Psalmody/Examples/childish.CPP +++ b/Apps/Psalmody/Examples/childish.CPP @@ -6,14 +6,16 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qEsCDCDqCDeEGsEBEBeCBsDADA", - "Be \0like \0 \0a \0 \0child \0 \0 \0 \0some \0 \0re\0 \0spect.\n\0 \0 \0 \0 \0 \0"); - Play("qEsCDCDqCDeEGsEBEBeCBsDADA", - "Ma\0tur\0 \0i\0 \0ty \0 \0 \0 \0don't \0 \0ne\0 \0glect.\n\0 \0 \0 \0 \0 \0"); - Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); - Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); - } + while (!ScanKey) { + Play("3qEsCDCDqCDeEGsEBEBeCBsDADA", + "Be \0like \0 \0a \0 \0child \0 \0 \0 \0" + "some \0 \0re\0 \0spect.\n\0 \0 \0 \0 \0 \0"); + Play("qEsCDCDqCDeEGsEBEBeCBsDADA", + "Ma\0tur\0 \0i\0 \0ty \0 \0 \0 \0don't \0 \0" + "ne\0 \0glect.\n\0 \0 \0 \0 \0 \0"); + Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); + Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/compassions.CPP b/Apps/Psalmody/Examples/compassions.CPP index 103ac28..449bf17 100644 --- a/Apps/Psalmody/Examples/compassions.CPP +++ b/Apps/Psalmody/Examples/compassions.CPP @@ -6,16 +6,20 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qBAeEEqAeAEDB2qG3F", - "$$RED$$You \0need \0help!\n\0 \0 \0 \0Po\0-o\0-o\0r \0dear.\n\0"); - Play("BAeEEqAeAEDB2qG3F", - "You \0need \0help!\n\0 \0 \0 \0Po\0-o\0-o\0r \0dear.\n$$FG$$\0"); - Play("4eFGqDetFEDeDEetADEC3G4GqD3G", - "Pat\0ron\0ize? \0No, \0 \0thank \0you!\n\0 \0Too \0 \0man\0y \0strings \0a\0ttach\0ed.\n\0"); - Play("4eFGqDetFEDeDEetADEC3G4GqD3G", - "Pat\0ron\0ize? \0No, \0 \0thank \0you!\n\0 \0Too \0 \0man\0y \0strings \0a\0ttach\0ed.\n\0"); - } + while (!ScanKey) { + Play("3qBAeEEqAeAEDB2qG3F", + "$$RED$$You \0need \0help!\n\0 \0 \0 \0" + "Po\0-o\0-o\0r \0dear.\n\0"); + Play("BAeEEqAeAEDB2qG3F", + "You \0need \0help!\n\0 \0 \0 \0" + "Po\0-o\0-o\0r \0dear.\n$$FG$$\0"); + Play("4eFGqDetFEDeDEetADEC3G4GqD3G", + "Pat\0ron\0ize? \0No, \0 \0thank \0you!\n\0 \0" + "Too \0 \0man\0y \0strings \0a\0ttach\0ed.\n\0"); + Play("4eFGqDetFEDeDEetADEC3G4GqD3G", + "Pat\0ron\0ize? \0No, \0 \0thank \0you!\n\0 \0" + "Too \0 \0man\0y \0strings \0a\0ttach\0ed.\n\0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/completed.CPP b/Apps/Psalmody/Examples/completed.CPP index 92b3661..b3ca81c 100644 Binary files a/Apps/Psalmody/Examples/completed.CPP and b/Apps/Psalmody/Examples/completed.CPP differ diff --git a/Apps/Psalmody/Examples/cosam.CPP b/Apps/Psalmody/Examples/cosam.CPP index e3b3380..7d354c4 100644 --- a/Apps/Psalmody/Examples/cosam.CPP +++ b/Apps/Psalmody/Examples/cosam.CPP @@ -6,22 +6,22 @@ U0 Song() music.tempo= 3.966; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qABeCCqABAAR", - "What \0makes \0You \0 \0 \0think \0You're \0God?\n\0 \0"); - Play("ABeCCqABAAR", - "What \0makes \0You \0 \0 \0think \0You're \0God?\n\0 \0"); - Play("DeCCCCqCDCCR", - "Do \0You \0 \0think \0 \0 \0I'll \0app\0laud?\n\0 \0"); - Play("ABeCCqABAAR", - "What \0makes \0You \0 \0 \0think \0You're \0God?\n\0 \0"); - Play("GDGeGA2G3FqFeDRqB", - "$$RED$$Be\0-e-\0cause \0 \0 \0 \0I \0 \0a\0 \0m.\n\0"); - Play("GDGeGA2G3FqFeDRqB", - "Are \0 \0you \0 \0 \0 \0a \0 \0fan?\n$$FG$$\0 \0 \0"); - "$$GREEN$$(If God talks, how can you be sure it's not Him?\n" - "You can't, so harden not your heart.)\n$$FG$$"; - } + while (!ScanKey) { + Play("3qABeCCqABAAR", + "What \0makes \0You \0 \0 \0think \0You're \0God?\n\0 \0"); + Play("ABeCCqABAAR", + "What \0makes \0You \0 \0 \0think \0You're \0God?\n\0 \0"); + Play("DeCCCCqCDCCR", + "Do \0You \0 \0think \0 \0 \0I'll \0app\0laud?\n\0 \0"); + Play("ABeCCqABAAR", + "What \0makes \0You \0 \0 \0think \0You're \0God?\n\0 \0"); + Play("GDGeGA2G3FqFeDRqB", + "$$RED$$Be\0-e-\0cause \0 \0 \0 \0I \0 \0a\0 \0m.\n\0"); + Play("GDGeGA2G3FqFeDRqB", + "Are \0 \0you \0 \0 \0 \0a \0 \0fan?\n$$FG$$\0 \0 \0"); + "$$GREEN$$(If God talks, how can you be sure it's not Him?\n" + "You can't, so harden not your heart.)\n$$FG$$"; + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/depending.CPP b/Apps/Psalmody/Examples/depending.CPP index 4e74f01..7bf9194 100644 --- a/Apps/Psalmody/Examples/depending.CPP +++ b/Apps/Psalmody/Examples/depending.CPP @@ -16,9 +16,11 @@ U0 Song() Play("etGREqDDBRGCB", "If \0 \0we \0reach \0 \0the \0 \0end \0ev\0er.\n\0"); Play("2sG3E2G3EqGsGBGBqDsFCFCqBRsCBCB", - "Hand \0 \0of \0 \0God, \0 \0just \0 \0might, \0 \0in\0 \0ter\0 \0cedes.\n\0 \0 \0 \0 \0 \0"); + "Hand \0 \0of \0 \0God, \0 \0just \0 \0might, \0 \0" + "in\0 \0ter\0 \0cedes.\n\0 \0 \0 \0 \0 \0"); Play("2G3E2G3EqGsGBGBqDsFCFCqBRsCBCB", - "If \0 \0it's \0 \0not \0 \0deemed \0 \0right, \0 \0won't \0 \0suc\0 \0ceed.\n\0 \0 \0 \0 \0 \0"); + "If \0 \0it's \0 \0not \0 \0deemed \0 \0right, \0 \0" + "won't \0 \0suc\0 \0ceed.\n\0 \0 \0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/despairing.CPP b/Apps/Psalmody/Examples/despairing.CPP index 91e0d38..a5ba2c1 100644 --- a/Apps/Psalmody/Examples/despairing.CPP +++ b/Apps/Psalmody/Examples/despairing.CPP @@ -6,16 +6,16 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("M9/8"); - Play("3hDeFhDeFhDC"); - Play("FeDhFeDhFE"); - Play("M4/4"); - Play("qD2G3AeBFFE2qG3DA", - "Hold \0 \0on!\n\0 \0It's \0gon\0na \0be \0fine.\n\0 \0"); - Play("D2G3AeBFFE2qG3DA", - "Hold \0 \0on!\n\0 \0It's \0gon\0na \0be \0fine.\n\0 \0"); - } + while (!ScanKey) { + Play("M9/8"); + Play("3hDeFhDeFhDC"); + Play("FeDhFeDhFE"); + Play("M4/4"); + Play("qD2G3AeBFFE2qG3DA", + "Hold \0 \0on!\n\0 \0It's \0gon\0na \0be \0fine.\n\0 \0"); + Play("D2G3AeBFFE2qG3DA", + "Hold \0 \0on!\n\0 \0It's \0gon\0na \0be \0fine.\n\0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/determination.CPP b/Apps/Psalmody/Examples/determination.CPP index 79e1284..8e65b35 100644 --- a/Apps/Psalmody/Examples/determination.CPP +++ b/Apps/Psalmody/Examples/determination.CPP @@ -5,14 +5,16 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("3sEAEAeFFsA2G3A2G3FGFGqCCBA", - "All \0 \0 \0 \0hell \0 \0breaks \0 \0 \0 \0loose.\n\0 \0 \0 \0I \0will \0get \0through.\n\0"); - Play("sEAEAeFFsA2G3A2G3FGFGqCCBA", - "All \0 \0 \0 \0hell \0 \0breaks \0 \0 \0 \0loose.\n\0 \0 \0 \0I \0will \0get \0through.\n\0"); - Play("ACeCCsBBBBqEsCCCCqAE"); - Play("ACeCCsBBBBqEsCCCCqAE"); - } + while (!ScanKey) { + Play("3sEAEAeFFsA2G3A2G3FGFGqCCBA", + "All \0 \0 \0 \0hell \0 \0breaks \0 \0 \0 \0" + "loose.\n\0 \0 \0 \0I \0will \0get \0through.\n\0"); + Play("sEAEAeFFsA2G3A2G3FGFGqCCBA", + "All \0 \0 \0 \0hell \0 \0breaks \0 \0 \0 \0" + "loose.\n\0 \0 \0 \0I \0will \0get \0through.\n\0"); + Play("ACeCCsBBBBqEsCCCCqAE"); + Play("ACeCCsBBBBqEsCCCCqAE"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/dialogue.CPP b/Apps/Psalmody/Examples/dialogue.CPP index 40c96a4..fad0e28 100644 Binary files a/Apps/Psalmody/Examples/dialogue.CPP and b/Apps/Psalmody/Examples/dialogue.CPP differ diff --git a/Apps/Psalmody/Examples/disputing.CPP b/Apps/Psalmody/Examples/disputing.CPP index 819a6c9..b0afacd 100644 --- a/Apps/Psalmody/Examples/disputing.CPP +++ b/Apps/Psalmody/Examples/disputing.CPP @@ -6,18 +6,20 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("M3/4"); - Play("3eECqAAeECqAA", - "I \0hate \0you.\n\0 \0I \0hate \0you.\n\0 \0"); - Play("eDCqAAeECqAR", - " \0 \0 \0 \0I \0hate \0you.\n\0 \0"); - Play("M6/8"); - Play("etABGqCsGEGEetGBDqCsCDCD", - "$$RED$$Don't \0 \0 \0smile.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("etABGqCsGEGEetGBDqCsCDCD", - "Don't \0 \0 \0smile.$$FG$$\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("M3/4"); + Play("3eECqAAeECqAA", + "I \0hate \0you.\n\0 \0I \0hate \0you.\n\0 \0"); + Play("eDCqAAeECqAR", + " \0 \0 \0 \0I \0hate \0you.\n\0 \0"); + Play("M6/8"); + Play("etABGqCsGEGEetGBDqCsCDCD", + "$$RED$$Don't \0 \0 \0smile.\n\0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0"); + Play("etABGqCsGEGEetGBDqCsCDCD", + "Don't \0 \0 \0smile.$$FG$$\n\0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/doing.CPP b/Apps/Psalmody/Examples/doing.CPP index 9ab1e50..fd79f92 100644 Binary files a/Apps/Psalmody/Examples/doing.CPP and b/Apps/Psalmody/Examples/doing.CPP differ diff --git a/Apps/Psalmody/Examples/downfall.CPP b/Apps/Psalmody/Examples/downfall.CPP index f7389a8..c019866 100644 --- a/Apps/Psalmody/Examples/downfall.CPP +++ b/Apps/Psalmody/Examples/downfall.CPP @@ -4,14 +4,19 @@ U0 Song() Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; music.tempo=2.5; - while (TRUE) { - Play("et2G32G3Gq2G3qCq2G3sFAFAq2G3etGDAqA", - "Don't \0 \0need \0 \0help. \0 \0Got \0 \0it \0 \0all \0figured \0 \0 \0out.\n\0"); - Play("et2G32G3Gq2G3qCq2G3sFAFAq2G3etGDAqA", - "Don't \0 \0need \0 \0help. \0 \0Got \0 \0it \0 \0all \0figured \0 \0 \0out.\n\0"); - Play("etCCCq2G3qDeDFetCF2G3qBeGFsAGAG"); - Play("etCCCq2G3qDeDFetCF2G3qBeGFsAGAG"); - } + try { + while (TRUE) { + Play("et2G32G3Gq2G3qCq2G3sFAFAq2G3etGDAqA", + "Don't \0 \0need \0 \0help. \0 \0Got \0 \0it \0 \0all \0" + "figured \0 \0 \0out.\n\0"); + Play("et2G32G3Gq2G3qCq2G3sFAFAq2G3etGDAqA", + "Don't \0 \0need \0 \0help. \0 \0Got \0 \0it \0 \0all \0" + "figured \0 \0 \0out.\n\0"); + Play("etCCCq2G3qDeDFetCF2G3qBeGFsAGAG"); + Play("etCCCq2G3qDeDFetCF2G3qBeGFsAGAG"); + } + } catch + PutExcept; } Song; diff --git a/Apps/Psalmody/Examples/dream.CPP b/Apps/Psalmody/Examples/dream.CPP index 6037e06..f988aec 100644 --- a/Apps/Psalmody/Examples/dream.CPP +++ b/Apps/Psalmody/Examples/dream.CPP @@ -1,24 +1,65 @@ -//8 has words +//8 has graphics + +#define NUM 10 +#define RAD_PROP 60 +#define RAD_PRISM 8 +I32 rainbow_10[NUM]={ +RED,LTRED,BROWN,YELLOW,GREEN,LTGREEN,BLUE,LTBLUE,PURPLE,LTPURPLE}; + +#define X 320 +#define Y 35 + +F64 t0=Beat; +U0 DrawIt(CTask *,CDC *dc) +{ + I64 i; + F64 dt=16*Sin(ã*(Beat-t0)/8),é; + dc->color=WHITE; + é=ã*dt+0.5; + GrLine(dc,X+RAD_PRISM*Cos(é) ,Y+RAD_PRISM*Sin(é), + X+RAD_PRISM*Cos(é+2*ã/3),Y+RAD_PRISM*Sin(é+2*ã/3)); + GrLine(dc,X+RAD_PRISM*Cos(é+2*ã/3),Y+RAD_PRISM*Sin(é+2*ã/3), + X+RAD_PRISM*Cos(é+4*ã/3),Y+RAD_PRISM*Sin(é+4*ã/3)); + GrLine(dc,X+RAD_PRISM*Cos(é+4*ã/3),Y+RAD_PRISM*Sin(é+4*ã/3), + X+RAD_PRISM*Cos(é),Y+RAD_PRISM*Sin(é)); + for (i=0;icolor=WHITE; + GrLine(dc,X,Y,X-RAD_PROP*Cos(é),Y-RAD_PROP*Sin(é)); + dc->color=rainbow_10[i]; + GrLine(dc,X,Y,X+RAD_PROP*Cos(é),Y+RAD_PROP*Sin(é)); + } +} + U0 Song() { + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Fs->text_attr=BLACK<<4+WHITE; + Fs->draw_it=&DrawIt; Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qAsDGDGqAsCACAeCBsFDFDetCGAsADAD", - " \0I\0mag\0 \0ine.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("qAsDGDGqAsCACAeCBsFDFDetCGAsADAD", - " \0 \0Fa\0 \0thom.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("GFGFEBEBeCB2qG3sFAFAqCEA", - "Hi-\0 \0i-\0gh \0as \0 \0your \0 \0thoughts \0will \0go.\n\0 \0 \0 \0 \0 \0 \0 \0"); - Play("sGFGFEBEBeCB2qG3sFAFAqCEA", - "Deep \0 \0 \0as \0 \0 \0we \0 \0ought \0to \0know.\n\0 \0 \0 \0 \0 \0 \0 \0"); - } + "$$BG+H,BLACK$$$$FD+H,WHITE$$"; + while (!ScanKey) { + t0=Beat; + Play("3qAsDGDGqAsCACAeCBsFDFDetCGAsADAD", + " \0I\0mag\0 \0ine.\n\0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("qAsDGDGqAsCACAeCBsFDFDetCGAsADAD", + " \0 \0Fa\0 \0thom.\n\0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("GFGFEBEBeCB2qG3sFAFAqCEA", + "Hi-\0 \0i-\0gh \0as \0 \0your \0 \0thoughts \0" + "will \0go.\n\0 \0 \0 \0 \0 \0 \0 \0"); + Play("sGFGFEBEBeCB2qG3sFAFAqCEA", + "Deep \0 \0 \0as \0 \0 \0we \0 \0ought \0to \0" + "know.\n\0 \0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; - Snd(0); + SettingsPop; } Song; diff --git a/Apps/Psalmody/Examples/efforts.CPP b/Apps/Psalmody/Examples/efforts.CPP index e333e43..22b776e 100644 --- a/Apps/Psalmody/Examples/efforts.CPP +++ b/Apps/Psalmody/Examples/efforts.CPP @@ -5,14 +5,16 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("2qG3sDADAeF2G3etFDCBA2G3qAetGFC2eG3E", - " \0Let's \0 \0try. \0 \0 \0 \0O\0oh\0 \0h. \0 \0 \0 \0Didn't \0 \0 \0work.\n\0 \0"); - Play("2qG3sDADAeF2G3etFDCBA2G3qAetGFC2eG3E", - " \0Let's \0 \0try. \0 \0 \0 \0O\0oh\0 \0h. \0 \0 \0 \0Didn't \0 \0 \0work.\n\0 \0"); - Play("sA2G3A2G3eBCsE2G3E2G3qGsFEFEDBDBeAG2etG3B2G"); - Play("3sA2G3A2G3eBCsE2G3E2G3qGsFEFEDBDBeAG2etG3B2G"); - } + while (!ScanKey) { + Play("2qG3sDADAeF2G3etFDCBA2G3qAetGFC2eG3E", + " \0Let's \0 \0try. \0 \0 \0 \0O\0oh\0 \0h. \0" + " \0 \0 \0Didn't \0 \0 \0work.\n\0 \0"); + Play("2qG3sDADAeF2G3etFDCBA2G3qAetGFC2eG3E", + " \0Let's \0 \0try. \0 \0 \0 \0O\0oh\0 \0h. \0" + " \0 \0 \0Didn't \0 \0 \0work.\n\0 \0"); + Play("sA2G3A2G3eBCsE2G3E2G3qGsFEFEDBDBeAG2etG3B2G"); + Play("3sA2G3A2G3eBCsE2G3E2G3qGsFEFEDBDBeAG2etG3B2G"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/elijah.CPP b/Apps/Psalmody/Examples/elijah.CPP index 2f75df0..2b4f802 100644 Binary files a/Apps/Psalmody/Examples/elijah.CPP and b/Apps/Psalmody/Examples/elijah.CPP differ diff --git a/Apps/Psalmody/Examples/environeth.CPP b/Apps/Psalmody/Examples/environeth.CPP index 4506e92..81ca5de 100644 --- a/Apps/Psalmody/Examples/environeth.CPP +++ b/Apps/Psalmody/Examples/environeth.CPP @@ -6,14 +6,15 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - "$$GREEN$$To God...$$FG$$\n"; - Play("M5/4"); - Play("3eEqCeEFEDCqBeEqCeEFEDCqB", - "Fa\0ther, \0for\0give \0them \0if \0you \0must.\n\0I'd \0like \0to \0see \0them \0turn \0to \0dust.\n\0"); - Play("M4/4"); - Play("sGBGBetAF2G3eEFsEGEGqDsBDBDGFGF2etG3GB"); - } + while (!ScanKey) { + "$$GREEN$$To God...$$FG$$\n"; + Play("M5/4"); + Play("3eEqCeEFEDCqBeEqCeEFEDCqB", + "Fa\0ther, \0for\0give \0them \0if \0you \0must.\n\0" + "I'd \0like \0to \0see \0them \0turn \0to \0dust.\n\0"); + Play("M4/4"); + Play("sGBGBetAF2G3eEFsEGEGqDsBDBDGFGF2etG3GB"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/epicurus.CPP b/Apps/Psalmody/Examples/epicurus.CPP index 84c90af..d20a571 100644 --- a/Apps/Psalmody/Examples/epicurus.CPP +++ b/Apps/Psalmody/Examples/epicurus.CPP @@ -9,11 +9,15 @@ U0 Song() try { task=PopUpViewPrint( "$$WW+H,1$$You get what you pray for. " - "Most people are fools like King Midas. People have laughable notions of Heaven. " - "You'd be surprised -- I can't imagine things being much better than Earth " + "Most people are fools like King Midas." + " People have laughable notions of Heaven. " + "You'd be surprised -- I can't imagine things being " + "much better than Earth " "because we need a sense of purpose. " - "Don't ask for stuff, let God pick, but He might get annoyed at that. " - "God wants us to be happy. He tries hard. If you do get what you pray for, you damn " + "Don't ask for stuff, let God pick, but He might get " + "annoyed at that. " + "God wants us to be happy. He tries hard. If you do get what " + "you pray for, you damn " "well better be happy, lil' sonfabitch!\n\n" "$LK,"Ecclesiastes,3:13",A="BF:Ecclesiastes,3:13"$\n" "$LK,"John,16:24",A="BF:John,16:24"$\n" @@ -24,13 +28,17 @@ U0 Song() DocRecalc(DocPut(task)); //Reformat word-wrap with new window size. while (!ScanKey) { Play("3qBeCDqCAetAACeECsF2G3F2GqG", - "I'm \0on \0a \0mis\0sion \0from \0 \0 \0my \0 \0God.\n\0 \0 \0 \0 \0"); + "I'm \0on \0a \0mis\0sion \0from \0 \0 \0my \0 \0" + "God.\n\0 \0 \0 \0 \0"); Play("3BeCDqCAetAACeECsF2G3F2GqG", - "I'm \0on \0a \0mis\0sion \0from \0 \0 \0my \0 \0God.\n\0 \0 \0 \0 \0"); + "I'm \0on \0a \0mis\0sion \0from \0 \0 \0my \0 \0" + "God.\n\0 \0 \0 \0 \0"); Play("3etEDDDGABG2GeG3E2G3GqF2G3etGCD", - "He \0 \0 \0told \0 \0 \0me \0 \0 \0 \0to \0 \0be \0hap\0py.\n\0 \0 \0 \0"); + "He \0 \0 \0told \0 \0 \0me \0 \0 \0 \0to \0 \0" + "be \0hap\0py.\n\0 \0 \0 \0"); Play("EDDDGABG2GeG3E2G3GqF2G3etGCD", - "He \0 \0 \0said \0 \0 \0to \0 \0 \0 \0make \0 \0it \0snap\0py.\n\0 \0 \0 \0"); + "He \0 \0 \0said \0 \0 \0to \0 \0 \0 \0make \0 \0" + "it \0snap\0py.\n\0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/exalt.CPP b/Apps/Psalmody/Examples/exalt.CPP index 9ce9d58..f5fd914 100644 --- a/Apps/Psalmody/Examples/exalt.CPP +++ b/Apps/Psalmody/Examples/exalt.CPP @@ -23,13 +23,17 @@ U0 Song() DocClear; "$$BG,LTCYAN$$$$BLACK$$"; Play("3eEDsBABA2qG3etGECFDBECFCBReBE", - "Come \0and \0sing \0 \0a\0 \0long. \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0\n\0 \0 \0 \0"); + "Come \0and \0sing \0 \0a\0 \0long. \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0\n\0 \0 \0 \0"); Play("EDsBABA2qG3etGECFDBECFCBReBE", - "Of\0fer \0praise \0 \0to \0 \0God. \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0\n\0 \0 \0 \0"); + "Of\0fer \0praise \0 \0to \0 \0God. \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0\n\0 \0 \0 \0"); Play("qBeDF2qG3eFRqBetFFGeACDF", - "Up \0in \0His \0hea\0ven \0 \0He \0is \0 \0 \0glor\0i\0ous.\n\0 \0"); + "Up \0in \0His \0hea\0ven \0 \0He \0is \0 \0" + " \0glor\0i\0ous.\n\0 \0"); Play("qBeDF2qG3eFRqBetFFGeACDF", - "Break \0in\0to \0song. \0 \0 \0Strike-\0up \0 \0 \0the \0chor\0us.\n\0 \0"); + "Break \0in\0to \0song. \0 \0 \0Strike-\0up \0 \0 \0" + "the \0chor\0us.\n\0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/exiled.CPP b/Apps/Psalmody/Examples/exiled.CPP index b1bc5b4..8208a27 100644 --- a/Apps/Psalmody/Examples/exiled.CPP +++ b/Apps/Psalmody/Examples/exiled.CPP @@ -4,15 +4,15 @@ U0 DrawIt(CTask *,CDC *dc) I64 i; F64 dt=Beat%8.0,z,w,x1,y1,z1,x2,y2,z2; Bool first=TRUE; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); dc->flags|=DCF_TRANSFORMATION; dc->x=30*dt+20.0*Sin(dt)+25; dc->y=10*dt-15; dc->z=GR_Z_ALL; - GrRotXEqu(dc->r,0.75*dt); - GrRotYEqu(dc->r,0.45*dt); - GrRotZEqu(dc->r,0.50*dt); - GrScaleEqu(dc->r,0.5); + Mat4x4RotX(dc->r,0.75*dt); + Mat4x4RotY(dc->r,0.45*dt); + Mat4x4RotZ(dc->r,0.50*dt); + Mat4x4Scale(dc->r,0.5); for (i=-50;i<40;i+=2) { if (i&2) dc->color=LTGRAY; @@ -46,13 +46,15 @@ U0 Song() try { "$$BG+H,LTCYAN$$"; while (!ScanKey) { - Play("3qEAAetF2G3GqDFetFED2eG3G", - "A\0dam... \0 \0no \0 \0 \0long\0er \0sees \0Your \0face.\n\0 \0 \0"); - Play("qEAAetF2G3GqDFetFED2eG3G", - "Oh! \0 \0 \0What \0 \0a \0wretch\0ed \0bar\0ren \0waste!\n\0 \0 \0"); - Play("qACFeBCB2GqG3ED", - " \0 \0 \0 \0 \0 \0 \0 \0Ex\0iled.\n\0"); - Play("ACFeBCB2GqG3ED"); + Play("3qEAAetF2G3GqDFetFED2eG3G", + "A\0dam... \0 \0no \0 \0 \0long\0er \0sees \0" + "Your \0face.\n\0 \0 \0"); + Play("qEAAetF2G3GqDFetFED2eG3G", + "Oh! \0 \0 \0What \0 \0a \0wretch\0ed \0bar\0" + "ren \0waste!\n\0 \0 \0"); + Play("qACFeBCB2GqG3ED", + " \0 \0 \0 \0 \0 \0 \0 \0Ex\0iled.\n\0"); + Play("ACFeBCB2GqG3ED"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/exodus.CPP b/Apps/Psalmody/Examples/exodus.CPP index a9e987d..b402565 100644 --- a/Apps/Psalmody/Examples/exodus.CPP +++ b/Apps/Psalmody/Examples/exodus.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3e.C2sG3qEe.FsBeCCsFGeBAAetAREeEsCB"); - Play("e.C2sG3qEe.FsBeCCsFGeBAAetAREeEsCB"); - Play("eGE2qG3sCDCDe.EsGqCsDCDCe.AsReGE"); - Play("GE2qG3sCDCDe.EsGqCsDCDCe.AsReGE"); - } + while (!ScanKey) { + Play("3e.C2sG3qEe.FsBeCCsFGeBAAetAREeEsCB"); + Play("e.C2sG3qEe.FsBeCCsFGeBAAetAREeEsCB"); + Play("eGE2qG3sCDCDe.EsGqCsDCDCe.AsReGE"); + Play("GE2qG3sCDCDe.EsGqCsDCDCe.AsReGE"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/expedition.CPP b/Apps/Psalmody/Examples/expedition.CPP index 3e507eb..b538979 100644 Binary files a/Apps/Psalmody/Examples/expedition.CPP and b/Apps/Psalmody/Examples/expedition.CPP differ diff --git a/Apps/Psalmody/Examples/fairness.CPP b/Apps/Psalmody/Examples/fairness.CPP index 2f765c5..3a672ae 100644 --- a/Apps/Psalmody/Examples/fairness.CPP +++ b/Apps/Psalmody/Examples/fairness.CPP @@ -18,14 +18,17 @@ U0 Song() "$$WW+H,1$$"; while (!ScanKey) { Play("3qGGsEAEAqAsF2G3F2G3qCeEFqD", - "Life, \0life, \0isn't \0 \0 \0 \0fair. \0Isn't \0 \0 \0 \0fair.\n\0 \0 \0 \0"); + "Life, \0life, \0isn't \0 \0 \0 \0fair. \0" + "Isn't \0 \0 \0 \0fair.\n\0 \0 \0 \0"); Play("GGsEAEAqAsF2G3F2G3qCeEFqD", - "Waaa, \0waaa, \0isn't \0 \0 \0 \0fair. \0Isn't \0 \0 \0 \0fair.\n\0 \0 \0 \0"); + "Waaa, \0waaa, \0isn't \0 \0 \0 \0fair. \0" + "Isn't \0 \0 \0 \0fair.\n\0 \0 \0 \0"); Play("eFCqEBDBE2eG3EsFEFE", " \0 \0I \0 \0ne\0ver \0sin.\n\0 \0 \0 \0 \0 \0 \0"); Play("eFCqEBDBE2eG3EsFEFE", " \0 \0I \0 \0ne\0ver \0win.\n\0 \0 \0 \0 \0 \0 \0"); - "$$GREEN$$(A warning on presumption. 'Who loves more man -- forgiven big debt or little?' See prodigal son.)$$FG$$\n"; + "$$GREEN$$(A warning on presumption. 'Who loves more man --" + " forgiven big debt or little?' See prodigal son.)$$FG$$\n"; } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/feigned.CPP b/Apps/Psalmody/Examples/feigned.CPP index 9dbb937..124a7e0 100644 --- a/Apps/Psalmody/Examples/feigned.CPP +++ b/Apps/Psalmody/Examples/feigned.CPP @@ -6,17 +6,21 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.857; try { - while (!ScanKey) { - Play("3eEDEFqDDeEDEDqCC", - "$$CL$$Sit\0ting \0in \0a \0church\n\0 \0wond\0ering \0to \0my\0self,\n\0 \0"); - Play("eD2G3BCqDsGGGGeD2G3BCqDsGGGG", - "\"Is \0 \0God \0 \0real?\"\n\0 \0 \0 \0 \0\"At \0 \0the \0 \0wheel?\"\n\0 \0 \0 \0 \0"); - "$$GREEN$$God talking...\n$$FG$$"; - Play("qFFFetREAqGsGFGFGEGEqC", - "$$RED$$Oh, \0Hell \0yes!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("FFFetREAqGsGFGFGEGEqC", - "Pass \0the \0test.$$FG$$\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3eEDEFqDDeEDEDqCC", + "$$CL$$Sit\0ting \0in \0a \0church\n\0 \0" + "wond\0ering \0to \0my\0self,\n\0 \0"); + Play("eD2G3BCqDsGGGGeD2G3BCqDsGGGG", + "\"Is \0 \0God \0 \0real?\"\n\0 \0 \0 \0 \0" + "\"At \0 \0the \0 \0wheel?\"\n\0 \0 \0 \0 \0"); + "$$GREEN$$God talking...\n$$FG$$"; + Play("qFFFetREAqGsGFGFGEGEqC", + "$$RED$$Oh, \0Hell \0yes!\n\0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("FFFetREAqGsGFGFGEGEqC", + "Pass \0the \0test.$$FG$$\n\0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/finger.CPP b/Apps/Psalmody/Examples/finger.CPP index a35e2ac..27a7189 100644 Binary files a/Apps/Psalmody/Examples/finger.CPP and b/Apps/Psalmody/Examples/finger.CPP differ diff --git a/Apps/Psalmody/Examples/first.CPP b/Apps/Psalmody/Examples/first.CPP index ce545c5..0cb8995 100644 Binary files a/Apps/Psalmody/Examples/first.CPP and b/Apps/Psalmody/Examples/first.CPP differ diff --git a/Apps/Psalmody/Examples/fishermen.CPP b/Apps/Psalmody/Examples/fishermen.CPP index 7f4a173..d4e4f3e 100644 Binary files a/Apps/Psalmody/Examples/fishermen.CPP and b/Apps/Psalmody/Examples/fishermen.CPP differ diff --git a/Apps/Psalmody/Examples/fixing.CPP b/Apps/Psalmody/Examples/fixing.CPP index 185fdcf..6298db1 100644 --- a/Apps/Psalmody/Examples/fixing.CPP +++ b/Apps/Psalmody/Examples/fixing.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.758; try { - while (!ScanKey) { - Play("3sDDeBCsAAeB2G3A2F3sCCeDsFFeEsFFEEeDE"); - Play("sDDeBCsAAeB2G3A2F3sCCeDsFFeEsFFEEeDE"); - Play("sGBGB2etG3EGqFED2G3eBADG"); - Play("sGBGB2etG3EGqFED2G3eBADG"); - } + while (!ScanKey) { + Play("3sDDeBCsAAeB2G3A2F3sCCeDsFFeEsFFEEeDE"); + Play("sDDeBCsAAeB2G3A2F3sCCeDsFFeEsFFEEeDE"); + Play("sGBGB2etG3EGqFED2G3eBADG"); + Play("sGBGB2etG3EGqFED2G3eBADG"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/flung.CPP b/Apps/Psalmody/Examples/flung.CPP index f902fa8..89f970e 100644 --- a/Apps/Psalmody/Examples/flung.CPP +++ b/Apps/Psalmody/Examples/flung.CPP @@ -6,14 +6,16 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.714; try { - while (!ScanKey) { - Play("3sBBBBEBDBeEBqDeBBEDEBqD", - " \0 \0 \0 \0Had \0 \0a \0 \0pass\0ing \0thought.\n\0 \0 \0Not \0a \0thought \0I \0ought.\n\0"); - Play("sFEFEeFEDBqDeEFEBABqD", - "Can't \0 \0 \0 \0clear \0my \0head \0of \0thought.\n\0In \0this \0trap \0my \0mind \0is \0caught.\n\0"); - Play("eDGqEeBAABqFeBDqEA"); - Play("eDGqEeBAABqFeBDqEA"); - } + while (!ScanKey) { + Play("3sBBBBEBDBeEBqDeBBEDEBqD", + " \0 \0 \0 \0Had \0 \0a \0 \0pass\0ing \0" + "thought.\n\0 \0 \0Not \0a \0thought \0I \0ought.\n\0"); + Play("sFEFEeFEDBqDeEFEBABqD", + "Can't \0 \0 \0 \0clear \0my \0head \0of \0" + "thought.\n\0In \0this \0trap \0my \0mind \0is \0caught.\n\0"); + Play("eDGqEeBAABqFeBDqEA"); + Play("eDGqEeBAABqFeBDqEA"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/fog.CPP b/Apps/Psalmody/Examples/fog.CPP index 29fefaf..3ac4695 100644 Binary files a/Apps/Psalmody/Examples/fog.CPP and b/Apps/Psalmody/Examples/fog.CPP differ diff --git a/Apps/Psalmody/Examples/forasmuch.CPP b/Apps/Psalmody/Examples/forasmuch.CPP index 82dda0a..384083d 100644 Binary files a/Apps/Psalmody/Examples/forasmuch.CPP and b/Apps/Psalmody/Examples/forasmuch.CPP differ diff --git a/Apps/Psalmody/Examples/freaks.CPP b/Apps/Psalmody/Examples/freaks.CPP index d1acfb8..101dc9b 100644 --- a/Apps/Psalmody/Examples/freaks.CPP +++ b/Apps/Psalmody/Examples/freaks.CPP @@ -6,16 +6,20 @@ U0 Song() music.tempo= 1.930; music.stacatto_factor= 0.604; try { - while (!ScanKey) { - Play("3sEqAsDeCqAsEqAsDeCqAsDeEqEsE", - "Jes\0us \0kind \0of \0freaks,\n\0Jes\0us \0kind \0of \0freaks,\n\0are \0dif\0ferent \0 \0"); - Play("eDqCsDeCqBsBeBqAetBEDqBeCB", - "from \0 \0oth\0er\n\0 \0 \0peo\0ple.\n\0 \0 \0 \0 \0They \0don't \0"); - Play("2qGeG3FsCDCDqFetBACBEDqBeCB", - "care,\n\0for \0God \0 \0is \0their \0 \0joy!\n\0 \0 \0 \0 \0 \0 \0 \0They \0don't \0"); - Play("2qGeG3FsCDCDqFetBAC", - "care,\n\0for \0God \0 \0is \0their \0 \0joy!\n\0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3sEqAsDeCqAsEqAsDeCqAsDeEqEsE", + "Jes\0us \0kind \0of \0freaks,\n\0" + "Jes\0us \0kind \0of \0freaks,\n\0are \0dif\0ferent \0 \0"); + Play("eDqCsDeCqBsBeBqAetBEDqBeCB", + "from \0 \0oth\0er\n\0 \0 \0" + "peo\0ple.\n\0 \0 \0 \0 \0They \0don't \0"); + Play("2qGeG3FsCDCDqFetBACBEDqBeCB", + "care,\n\0for \0God \0 \0is \0" + "their \0 \0joy!\n\0 \0 \0 \0 \0 \0 \0 \0They \0don't \0"); + Play("2qGeG3FsCDCDqFetBAC", + "care,\n\0for \0God \0 \0is \0" + "their \0 \0joy!\n\0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/free.CPP b/Apps/Psalmody/Examples/free.CPP index 3233b66..34f46c0 100644 --- a/Apps/Psalmody/Examples/free.CPP +++ b/Apps/Psalmody/Examples/free.CPP @@ -24,10 +24,10 @@ U0 DrawIt(CTask *,CDC *dc) return; dc->flags|=DCF_TRANSFORMATION; - GrRotXEqu(dc->r,ã/4); + Mat4x4RotX(dc->r,ã/4); é=Wrap(ã-Windé); - GrRotZEqu(dc->r,-ã/2+é/10); + Mat4x4RotZ(dc->r,-ã/2+é/10); dc->color=BLUE; dc->x=x; @@ -42,10 +42,10 @@ U0 DrawIt(CTask *,CDC *dc) r=tempb->radius*Min(1.0,0.25+2*(Beat-tempb->t0)); for (é=0;é<2*ã;é+=ã/2) { x1=10*Cos(é);y1=10*Sin(é);z1=0; - GrTransform(dc,&x1,&y1,&z1); + DCTransform(dc,&x1,&y1,&z1); x2=r*Cos(é);y2=r*Sin(é);z2=0; - GrTransform(dc,&x2,&y2,&z2); + DCTransform(dc,&x2,&y2,&z2); GrLine(dc,x1,y1,tempb->x-x+x2,tempb->y-y+y2); } @@ -57,7 +57,7 @@ U0 DrawIt(CTask *,CDC *dc) GrCircle(dc,tempb->x,tempb->y,tempb->radius); dc->color=LTGRAY; GrCircle(dc,tempb->x+0.65*tempb->radius*Cos(5*ã/8), - tempb->y-0.65*tempb->radius*Sin(5*ã/8),1.0+0.2*tempb->radius); + tempb->y-0.65*tempb->radius*Sin(5*ã/8),1.0+0.2*tempb->radius); tempb=tempb->last; } LBtr(&flags,0); @@ -103,7 +103,7 @@ U0 AnimateTask(I64) tempb->y +=-dt*(20*Sin(é)+tempb->dy); if (!(0<=tempb->xpix_width) || - !(0<=tempb->ypix_height) ) { + !(0<=tempb->ypix_height) ) { QueRem(tempb); Free(tempb); } @@ -133,7 +133,7 @@ U0 Song() { CTask *task; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Preempt(OFF); + Preempt; Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Fs->draw_it=&DrawIt; @@ -148,11 +148,14 @@ U0 Song() WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3qEEBeBDsBBBBqDsBFBFD2G3D2G", - "Free \0will... \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0 \0 \0fail.\n\0 \0 \0 \0"); + "Free \0will... \0 \0 \0 \0 \0 \0 \0 \0 \0" + "I \0 \0 \0 \0fail.\n\0 \0 \0 \0"); Play("3qEEBeBDsBBBBqDsBFBFD2G3D2G", - "God \0still... \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0 \0 \0hail.\n\0 \0 \0 \0"); + "God \0still... \0 \0 \0 \0 \0 \0 \0 \0 \0" + "I \0 \0 \0 \0hail.\n\0 \0 \0 \0"); Play("3qD2G3eA2G3qCetECAqBsACACqA", - "All \0things \0work \0for \0good... \0to \0the \0Lord.\n\0 \0 \0 \0 \0 \0 \0"); + "All \0things \0work \0for \0good... \0" + "to \0the \0Lord.\n\0 \0 \0 \0 \0 \0 \0"); Play("D2G3eA2G3qCetECAqBsACACqA", "It's \0all \0good... \0 \0 \0as\0 \0sured.\n\0 \0 \0 \0 \0 \0 \0"); } diff --git a/Apps/Psalmody/Examples/furnishing.CPP b/Apps/Psalmody/Examples/furnishing.CPP index e06bb4b..2b33ddf 100644 Binary files a/Apps/Psalmody/Examples/furnishing.CPP and b/Apps/Psalmody/Examples/furnishing.CPP differ diff --git a/Apps/Psalmody/Examples/good.CPP b/Apps/Psalmody/Examples/good.CPP index f80a076..723a8ea 100644 Binary files a/Apps/Psalmody/Examples/good.CPP and b/Apps/Psalmody/Examples/good.CPP differ diff --git a/Apps/Psalmody/Examples/gutenberg.CPP b/Apps/Psalmody/Examples/gutenberg.CPP index cd9dd51..439446b 100644 Binary files a/Apps/Psalmody/Examples/gutenberg.CPP and b/Apps/Psalmody/Examples/gutenberg.CPP differ diff --git a/Apps/Psalmody/Examples/happy.CPP b/Apps/Psalmody/Examples/happy.CPP index 1390fff..2e338b0 100644 Binary files a/Apps/Psalmody/Examples/happy.CPP and b/Apps/Psalmody/Examples/happy.CPP differ diff --git a/Apps/Psalmody/Examples/hearsay.CPP b/Apps/Psalmody/Examples/hearsay.CPP index 9e46427..b3a0811 100644 --- a/Apps/Psalmody/Examples/hearsay.CPP +++ b/Apps/Psalmody/Examples/hearsay.CPP @@ -6,16 +6,18 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qAeCDqEAeCDECDECsCC", - "I \0don't \0 \0know.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("qAeCDqEAeCDECDECsCC", - "Let's \0go \0 \0slow.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("eDAGAqDsECECCBCBeAFsDCeGDE", - "You \0 \0say \0 \0that, \0God?\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("DAGAqDsECECCBCBeAFsDCeGDE", - "It \0 \0sounds \0 \0odd.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3qAeCDqEAeCDECDECsCC", + "I \0don't \0 \0know.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("qAeCDqEAeCDECDECsCC", + "Let's \0go \0 \0slow.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("eDAGAqDsECECCBCBeAFsDCeGDE", + "You \0 \0say \0 \0that, \0God?\n\0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("DAGAqDsECECCBCBeAFsDCeGDE", + "It \0 \0sounds \0 \0odd.\n\0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/honestly.CPP b/Apps/Psalmody/Examples/honestly.CPP index 6919dd7..f05494a 100644 --- a/Apps/Psalmody/Examples/honestly.CPP +++ b/Apps/Psalmody/Examples/honestly.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.758; try { - while (!ScanKey) { - Play("3qBeABqA2G3AB2hG"); - Play("3sCCCCqBsAAAA2qG3sCCCCqE2GR"); - Play("3sBDBDA2G3A2G3etAAEsGCGCetFFEqDFeE2G"); - Play("3sBDBDA2G3A2G3etAAEsGCGCetFFEqDFeE2G"); - } + while (!ScanKey) { + Play("3qBeABqA2G3AB2hG"); + Play("3sCCCCqBsAAAA2qG3sCCCCqE2GR"); + Play("3sBDBDA2G3A2G3etAAEsGCGCetFFEqDFeE2G"); + Play("3sBDBDA2G3A2G3etAAEsGCGCetFFEqDFeE2G"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/hope.CPP b/Apps/Psalmody/Examples/hope.CPP index 6b0d214..ab4889d 100644 Binary files a/Apps/Psalmody/Examples/hope.CPP and b/Apps/Psalmody/Examples/hope.CPP differ diff --git a/Apps/Psalmody/Examples/image.CPP b/Apps/Psalmody/Examples/image.CPP index 12ec034..59d704d 100644 --- a/Apps/Psalmody/Examples/image.CPP +++ b/Apps/Psalmody/Examples/image.CPP @@ -1,6 +1,75 @@ -//7 has words +//7 has graphics + +#define WIDTH 17.0 +#define X 290 +#define Y 25 + +F64 t0=Beat; +U0 DrawIt(CTask *,CDC *dc) +{ + F64 dt=Beat-t0,d,y,x1,y1,x2,y2; + I64 i,j; + + dc->color=BLACK; + dc->pen_width=7; + for (i=0;i<4;i++) { + y=0; + d=dt%4; + if (d<1) { + d+=0.25*i; + if (d<1.0) + y=Tri(d,1)`2.0; + } + x1=X+(i-2.5)*WIDTH; + y1=50-20*y; + GrLine3(dc,x1,y1,0,(X*3+x1)/4,Y,0); + } + + x1=X+1.3*WIDTH; + y1=37; + GrLine3(dc,x1,y1,0,(X*3+x1)/4,Y,0); + + for (i=0;i<4;i++) { + y=0; + d=dt%4; + if (d<1) { + d+=0.25*i; + if (d<1.0) + y=Tri(d,1)`2.0; + } + x1=X+(i-2.5)*WIDTH; + y1=50-20*y; + dc->color=YELLOW; + dc->pen_width=5; + GrLine3(dc,x1,y1,0,(X*3+x1)/4,Y,0); + + dc->color=BLACK; + for (j=0;j<4;j++) { + x2=(x1*(4-j)+(X*3+x1)/4*j)/4; + y2=(y1*(4-j)+Y*j)/4; + GrLine(dc,x2-2,y2,x2,y2-1); + GrLine(dc,x2,y2-1,x2+1,y2); + } + } + + x1=X+1.3*WIDTH; + y1=37; + dc->color=YELLOW; + dc->pen_width=5; + GrLine3(dc,x1,y1,0,(X*3+x1)/4,Y,0); + dc->color=BLACK; + x2=0.6*x1+0.4*(X*3+x1)/4; + y2=0.6*y1+0.4*Y; + GrLine(dc,x2,y2-1,x2-1,y2+1); + x2=0.2*x1+0.8*(X*3+x1)/4; + y2=0.2*y1+0.8*Y; + GrLine(dc,x2-1,y2,x2-1,y2+2); +} + U0 Song() { + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Fs->draw_it=&DrawIt; CTask *task; Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; @@ -16,18 +85,20 @@ U0 Song() WinHorz(Fs->win_left,Fs->win_right,task); WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { + t0=Beat; Play("3qBBE2GG3FFC", "We \0are \0in \0the \0image \0of \0God.\n\0 \0"); Play("BBE2GG3FFC", "Some \0people's \0prayer \0is \0ver\0y \0odd.\n\0 \0"); Play("eGDqCB2G3eGEqEC2G", - "They \0don't \0love \0Him.\n\0 \0They \0love \0their \0neigh\0bor.\n\0"); + "They \0don't \0love \0Him.\n\0 \0" + "They \0love \0their \0neigh\0bor.\n\0"); Play("3eGDqCB2G3eGEqEC2G", "Pest\0er\0ing \0Him.\n\0 \0Ask\0ing \0for \0fav\0ors.\n\0"); } } catch PutExcept; - Snd(0); + SettingsPop; } Song; diff --git a/Apps/Psalmody/Examples/josh.CPP b/Apps/Psalmody/Examples/josh.CPP index 73f6690..2e0c01f 100644 Binary files a/Apps/Psalmody/Examples/josh.CPP and b/Apps/Psalmody/Examples/josh.CPP differ diff --git a/Apps/Psalmody/Examples/keeping.CPP b/Apps/Psalmody/Examples/keeping.CPP index 2a76371..9e3e664 100644 Binary files a/Apps/Psalmody/Examples/keeping.CPP and b/Apps/Psalmody/Examples/keeping.CPP differ diff --git a/Apps/Psalmody/Examples/kept.CPP b/Apps/Psalmody/Examples/kept.CPP index 8a18630..4e530c8 100644 --- a/Apps/Psalmody/Examples/kept.CPP +++ b/Apps/Psalmody/Examples/kept.CPP @@ -12,9 +12,11 @@ U0 Song() "$$WW+H,1$$"; while (!ScanKey) { Play("3eGAetCCCFFDqAeAAFAAFqG", - "I \0 \0have \0 \0 \0kept \0 \0 \0 \0 \0 \0the \0 \0 \0com\0mands.\n\0"); + "I \0 \0have \0 \0 \0kept \0 \0 \0 \0 \0 \0" + "the \0 \0 \0com\0mands.\n\0"); Play("eGAetCCCFFDqAeAAFAAFqG", - "I \0 \0have \0 \0 \0kept \0 \0 \0 \0 \0 \0the \0 \0 \0com\0mands.\n\0"); + "I \0 \0have \0 \0 \0kept \0 \0 \0 \0 \0 \0" + "the \0 \0 \0com\0mands.\n\0"); Play("EeEGqEeEEqDBetCCGqC", "What \0 \0 \0else \0 \0 \0must \0I \0do?\n\0 \0 \0 \0"); Play("EeEGqEeEEqDBetCCGqC", diff --git a/Apps/Psalmody/Examples/killed.CPP b/Apps/Psalmody/Examples/killed.CPP index 6d93cd4..8f6206c 100644 --- a/Apps/Psalmody/Examples/killed.CPP +++ b/Apps/Psalmody/Examples/killed.CPP @@ -1,29 +1,87 @@ -//7 has words +//9 has graphics + +#define RAD 20 +#define WIDTH 16 + +F64 t0=Beat; +U0 DrawIt(CTask *,CDC *dc) +{ + F64 dt=Beat-t0,x1,y1,x2,y2,z,dé; + I64 i; + + DCDepthBufAlloc(dc); + dc->x=200; + dc->y=70; + dc->z=GR_Z_ALL; + dc->flags|=DCF_TRANSFORMATION; + Mat4x4RotX(dc->r,ã/4); + Mat4x4RotY(dc->r,Sin(ã*dt/23)/5); + + if (dt<28) + dé=-2*ã/8+(dt+16)*Sin(-ã*dt)/3000; + else if (dt<32) + dé=-2*ã/8-2*ã/8*(dt-28)/4; + else + dé=-2*ã/4; + + z=WIDTH*3; + x1=-12; y1=0; + x2=x1-RAD/2*Cos(dé); + y2=y1+RAD*Sin(dé); + dc->color=BLACK; + dc->pen_width=14; + GrLine3(dc,x1,y1,z,x2,y2,z); + dc->color=YELLOW; + dc->pen_width=12; + GrLine3(dc,x1,y1,z,x2,y2,z); + + + for (z=0;zcolor=BLACK; + dc->pen_width=10; + GrLine3(dc,x1,y1,z,x2,y2,z); + dc->color=YELLOW; + dc->pen_width=8; + GrLine3(dc,x1,y1,z,x2,y2,z); + x1=x2; y1=y2; + } + } +} + U0 Song() { + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Fs->draw_it=&DrawIt; Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("M4/4"); - Play("3qBsEGeBDe.AsCeA2qF3sBBeACBBsBB", - "I \0could \0 \0 \0die.\n\0 \0 \0 \0 \0 \0 \0 \0Could \0I \0kill?\n\0 \0 \0"); - Play("qBsEGeBDe.AsCeA2qF3sBBeACBBsBB", - "I'm \0not \0 \0 \0spry.\n\0 \0 \0 \0 \0 \0 \0 \0I \0best \0chill.\n\0 \0 \0"); - Play("eDDsGFGFeEBqGM5/4", - "If \0 \0God \0 \0 \0 \0 \0 \0asked,\n\0"); - Play("eBGF4A3e.FsEqAAM4/4", - " \0\"$$RED$$Can \0 \0 \0you \0 \0Kill?$$FG$$\"\n\0 \0"); - Play("eDDsGFGFeEBqGM5/4", - "I \0 \0think, \0 \0 \0 \0 \0 \0\"Yeah.\"\n\0"); - Play("eBGF4A3e.FsEqAA", - " \0\"Right \0 \0 \0my \0 \0will.\"\n\0 \0"); - } + while (!ScanKey) { + t0=Beat; + Play("M4/4"); + Play("3qBsEGeBDe.AsCeA2qF3sBBeACBBsBB", + "I \0could \0 \0 \0die.\n\0 \0 \0" + " \0 \0 \0 \0 \0Could \0I \0kill?\n\0 \0 \0"); + Play("qBsEGeBDe.AsCeA2qF3sBBeACBBsBB", + "I'm \0not \0 \0 \0spry.\n\0 \0 \0 \0 \0 \0" + " \0 \0I \0best \0chill.\n\0 \0 \0"); + Play("eDDsGFGFeEBqGM5/4", + "If \0 \0God \0 \0 \0 \0 \0 \0asked,\n\0"); + Play("eBGF4A3e.FsEqAAM4/4", + " \0\"$$RED$$Can \0 \0 \0you \0 \0Kill?$$FG$$\"\n\0 \0"); + Play("eDDsGFGFeEBqGM5/4", + "I \0 \0think, \0 \0 \0 \0 \0 \0\"Yeah.\"\n\0"); + Play("eBGF4A3e.FsEqAA", + " \0\"Right \0 \0 \0my \0 \0will.\"\n\0 \0"); + } } catch PutExcept; - Snd(0); + SettingsPop; } Song; diff --git a/Apps/Psalmody/Examples/limit.CPP b/Apps/Psalmody/Examples/limit.CPP index a744632..a5c8e9d 100644 Binary files a/Apps/Psalmody/Examples/limit.CPP and b/Apps/Psalmody/Examples/limit.CPP differ diff --git a/Apps/Psalmody/Examples/mary.CPP b/Apps/Psalmody/Examples/mary.CPP index 6c7f584..3ddb236 100644 --- a/Apps/Psalmody/Examples/mary.CPP +++ b/Apps/Psalmody/Examples/mary.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.976; music.stacatto_factor= 0.538; try { - while (!ScanKey) { - Play("3qEDCDeEEqEeDDqD"); - Play("EDCDeEEqEeDDqD"); - Play("eDAsFDFDqFsFBFB2qG3etBBBqFC"); - Play("eDAsFDFDqFsFBFB2qG3etBBBqFC"); - } + while (!ScanKey) { + Play("3qEDCDeEEqEeDDqD"); + Play("EDCDeEEqEeDDqD"); + Play("eDAsFDFDqFsFBFB2qG3etBBBqFC"); + Play("eDAsFDFDqFsFBFB2qG3etBBBqFC"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/mightest.CPP b/Apps/Psalmody/Examples/mightest.CPP index ab8f9b7..b0971fc 100644 --- a/Apps/Psalmody/Examples/mightest.CPP +++ b/Apps/Psalmody/Examples/mightest.CPP @@ -2,7 +2,7 @@ U0 DrawIt(CTask *task,CDC *dc) { F64 x1,x2,y1,y2,x3,y3,radius,pedals,é,t=Beat, - cx=335,cy=task->pix_height>>1; + cx=335,cy=task->pix_height>>1; Bool first=TRUE; radius=cy*(1.0+Sin(2*ã*t)); @@ -36,13 +36,13 @@ U0 Song() try { while (TRUE) { Play("qBq2G3sGAGAetCBBqAq2G3sBBBBeFE", - "I \0am \0feeling \0 \0 \0 \0 \0 \0brave.\n\0"); + "I \0am \0feeling \0 \0 \0 \0 \0 \0brave.\n\0"); Play("qBq2G3sGAGAetCBBqAq2G3sBBBBeFE", - "I \0am \0feeling \0 \0 \0 \0 \0 \0brave.\n\0"); + "I \0am \0feeling \0 \0 \0 \0 \0 \0brave.\n\0"); Play("qCsDEDEq2G3qDqBqAqGq2G3", - "Test \0me \0 \0 \0 \0Lord. \0See \0if \0I'm \0wor\0thy.\n\0"); + "Test \0me \0 \0 \0 \0Lord. \0See \0if \0I'm \0wor\0thy.\n\0"); Play("qCsDEDEq2G3qDqBqAqGq2G3", - "Test \0me \0 \0 \0 \0Lord. \0See \0if \0I'm \0wor\0thy.\n\0"); + "Test \0me \0 \0 \0 \0Lord. \0See \0if \0I'm \0wor\0thy.\n\0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/mildly.CPP b/Apps/Psalmody/Examples/mildly.CPP index d6aab0d..aa83f32 100644 Binary files a/Apps/Psalmody/Examples/mildly.CPP and b/Apps/Psalmody/Examples/mildly.CPP differ diff --git a/Apps/Psalmody/Examples/nay.CPP b/Apps/Psalmody/Examples/nay.CPP index 81b5692..0145892 100644 --- a/Apps/Psalmody/Examples/nay.CPP +++ b/Apps/Psalmody/Examples/nay.CPP @@ -5,17 +5,21 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - "$$WW+H,1$$"; - while (!ScanKey) { - Play("3qAAsG2G3G2G3qGF2eG3FqEetCBA", - "Let's \0ask \0Mike\0 \0 \0 \0y; \0Hates \0 \0every\0thing.\n\0 \0 \0 \0"); - Play("qAAsG2G3G2G3qGF2eG3FqEetCBA", - "Let's \0ask \0Mike\0 \0 \0 \0y; \0Hates \0 \0every\0thing.\n\0 \0 \0 \0"); - Play("2eG3GqE2eG3FqF2sG3G2G3GqAetGEBqD", - "What \0do \0YOU \0 \0 \0know. \0 \0 \0 \0 \0 \0It's \0 \0kosh\0er!\n\0"); - Play("2eG3GqE2eG3FqF2sG3G2G3GqAetGEBqD", - "What \0do \0YOU \0 \0 \0know. \0 \0 \0 \0 \0 \0It's \0 \0kosh\0er!\n\0"); - } + "$$WW+H,1$$"; + while (!ScanKey) { + Play("3qAAsG2G3G2G3qGF2eG3FqEetCBA", + "Let's \0ask \0Mike\0 \0 \0 \0y; \0" + "Hates \0 \0every\0thing.\n\0 \0 \0 \0"); + Play("qAAsG2G3G2G3qGF2eG3FqEetCBA", + "Let's \0ask \0Mike\0 \0 \0 \0y; \0" + "Hates \0 \0every\0thing.\n\0 \0 \0 \0"); + Play("2eG3GqE2eG3FqF2sG3G2G3GqAetGEBqD", + "What \0do \0YOU \0 \0 \0know. \0" + " \0 \0 \0 \0 \0It's \0 \0kosh\0er!\n\0"); + Play("2eG3GqE2eG3FqF2sG3G2G3GqAetGEBqD", + "What \0do \0YOU \0 \0 \0know. \0" + " \0 \0 \0 \0 \0It's \0 \0kosh\0er!\n\0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/night.CPP b/Apps/Psalmody/Examples/night.CPP index ac0bf3b..b712774 100644 Binary files a/Apps/Psalmody/Examples/night.CPP and b/Apps/Psalmody/Examples/night.CPP differ diff --git a/Apps/Psalmody/Examples/o.CPP b/Apps/Psalmody/Examples/o.CPP index 55dd680..4c70dc7 100644 --- a/Apps/Psalmody/Examples/o.CPP +++ b/Apps/Psalmody/Examples/o.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3sCGCGetADD2sG3G2G3GFAFADDDDqGsB2G3B2G3qG"); - Play("sCGCGetADD2sG3G2G3GFAFADDDDqGsB2G3B2G3qG"); - Play("eG2G3qEeAsA2G3qAsEAEADEDEqFeA2G"); - Play("3G2G3qEeAsA2G3qAsEAEADEDEqFeA2G"); - } + while (!ScanKey) { + Play("3sCGCGetADD2sG3G2G3GFAFADDDDqGsB2G3B2G3qG"); + Play("sCGCGetADD2sG3G2G3GFAFADDDDqGsB2G3B2G3qG"); + Play("eG2G3qEeAsA2G3qAsEAEADEDEqFeA2G"); + Play("3G2G3qEeAsA2G3qAsEAEADEDEqFeA2G"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/partake.CPP b/Apps/Psalmody/Examples/partake.CPP index 7d43b8b..b44a6a5 100644 Binary files a/Apps/Psalmody/Examples/partake.CPP and b/Apps/Psalmody/Examples/partake.CPP differ diff --git a/Apps/Psalmody/Examples/permitted.CPP b/Apps/Psalmody/Examples/permitted.CPP index 794e135..2c26530 100644 --- a/Apps/Psalmody/Examples/permitted.CPP +++ b/Apps/Psalmody/Examples/permitted.CPP @@ -5,14 +5,14 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("2eG3DGDqGetA2G3B2qG3GCE", - " \0 \0 \0 \0 \0 \0 \0 \0 \0It's \0ko\0sher.\n\0"); - Play("2eG3DGDqGetA2G3B2qG3GCE", - " \0 \0 \0 \0 \0 \0 \0 \0 \0It's \0ko\0sher.\n\0"); - Play("C2G3sGFGFDCDCetE2G3CGFAqDeFC"); - Play("qC2G3sGFGFDCDCetE2G3CGFAqDeFC"); - } + while (!ScanKey) { + Play("2eG3DGDqGetA2G3B2qG3GCE", + " \0 \0 \0 \0 \0 \0 \0 \0 \0It's \0ko\0sher.\n\0"); + Play("2eG3DGDqGetA2G3B2qG3GCE", + " \0 \0 \0 \0 \0 \0 \0 \0 \0It's \0ko\0sher.\n\0"); + Play("C2G3sGFGFDCDCetE2G3CGFAqDeFC"); + Play("qC2G3sGFGFDCDCetE2G3CGFAqDeFC"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/personal.CPP b/Apps/Psalmody/Examples/personal.CPP index 7c97475..25d61b7 100644 --- a/Apps/Psalmody/Examples/personal.CPP +++ b/Apps/Psalmody/Examples/personal.CPP @@ -5,16 +5,20 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("qRsR2GRGeGR3qA2etG3EEqEeDCB2G", - " \0 \0He \0 \0is \0 \0 \0our \0 \0 \0 \0per\0son\0al \0sav\0ior.\n\0"); - Play("qRsRGRGeGR3qA2etG3EEqEeDCB2G", - " \0 \0We \0 \0can \0ne\0 \0ver \0 \0 \0 \0re\0turn \0the \0fav\0or.\n\0"); - Play("3CBBGsF2G3F2G3qBsBBBB2eG3AetBBGeBF", - " \0 \0 \0That's \0 \0O.\0 \0K. \0 \0 \0 \0 \0 \0 \0 \0works \0 \0 \0for \0me.\n\0"); - Play("CBBGsF2G3F2G3qBsBBBB2eG3AetBBGeBF", - " \0 \0 \0That's \0 \0O.\0 \0K. \0 \0 \0 \0 \0 \0It's \0 \0works \0 \0 \0for \0me.\n\0"); - } + while (!ScanKey) { + Play("qRsR2GRGeGR3qA2etG3EEqEeDCB2G", + " \0 \0He \0 \0is \0 \0 \0our \0 \0 \0 \0" + "per\0son\0al \0sav\0ior.\n\0"); + Play("qRsRGRGeGR3qA2etG3EEqEeDCB2G", + " \0 \0We \0 \0can \0ne\0 \0ver \0 \0 \0 \0" + "re\0turn \0the \0fav\0or.\n\0"); + Play("3CBBGsF2G3F2G3qBsBBBB2eG3AetBBGeBF", + " \0 \0 \0That's \0 \0O.\0 \0K. \0 \0 \0 \0" + " \0 \0 \0 \0works \0 \0 \0for \0me.\n\0"); + Play("CBBGsF2G3F2G3qBsBBBB2eG3AetBBGeBF", + " \0 \0 \0That's \0 \0O.\0 \0K. \0 \0 \0 \0" + " \0 \0It's \0 \0works \0 \0 \0for \0me.\n\0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/population.CPP b/Apps/Psalmody/Examples/population.CPP index f7908a2..a8be10f 100644 --- a/Apps/Psalmody/Examples/population.CPP +++ b/Apps/Psalmody/Examples/population.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.780; try { - while (!ScanKey) { - Play("3eCDBCA2FFF3C2F3E2F3A2F3sEEeD"); - Play("F2FFF3qCeF2F3F2FFF3qCeF2F"); - Play("3qGsEAEAqBetDCF2qG3DsGDGDetCRC"); - Play("qGsEAEAqBetDCF2qG3DsGDGDetCRC"); - } + while (!ScanKey) { + Play("3eCDBCA2FFF3C2F3E2F3A2F3sEEeD"); + Play("F2FFF3qCeF2F3F2FFF3qCeF2F"); + Play("3qGsEAEAqBetDCF2qG3DsGDGDetCRC"); + Play("qGsEAEAqBetDCF2qG3DsGDGDetCRC"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/project.CPP b/Apps/Psalmody/Examples/project.CPP index 22f7a8d..8e37fa7 100644 --- a/Apps/Psalmody/Examples/project.CPP +++ b/Apps/Psalmody/Examples/project.CPP @@ -6,16 +6,20 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qGsARARCBCBeACACGCGBAsEA", - "I'm \0mak\0 \0ing \0 \0some\0 \0thing \0 \0 \0 \0 \0 \0for \0 \0God.\n\0 \0 \0 \0 \0"); - Play("qGsARARCBCBeACACGCGBAsEA", - "I'm \0mak\0 \0ing \0 \0some\0 \0thing \0 \0 \0 \0 \0 \0for \0 \0God.\n\0 \0 \0 \0 \0"); - Play("eAsCEqEsDECEqAsDACAeAGFsBDeCB", - " \0 \0 \0I \0hope \0 \0He \0 \0 \0likes \0 \0it.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("AsCEqEsDECEqAsDACAeAGFsBDeCB", - " \0 \0 \0I \0hope \0 \0He \0 \0 \0likes \0 \0it.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3qGsARARCBCBeACACGCGBAsEA", + "I'm \0mak\0 \0ing \0 \0some\0 \0thing \0" + " \0 \0 \0 \0 \0for \0 \0God.\n\0 \0 \0 \0 \0"); + Play("qGsARARCBCBeACACGCGBAsEA", + "I'm \0mak\0 \0ing \0 \0some\0 \0thing \0" + " \0 \0 \0 \0 \0for \0 \0God.\n\0 \0 \0 \0 \0"); + Play("eAsCEqEsDECEqAsDACAeAGFsBDeCB", + " \0 \0 \0I \0hope \0 \0He \0 \0 \0likes \0" + " \0it.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("AsCEqEsDECEqAsDACAeAGFsBDeCB", + " \0 \0 \0I \0hope \0 \0He \0 \0 \0likes \0" + " \0it.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/proponent.CPP b/Apps/Psalmody/Examples/proponent.CPP index 2da7a88..8cc4c58 100644 --- a/Apps/Psalmody/Examples/proponent.CPP +++ b/Apps/Psalmody/Examples/proponent.CPP @@ -1,17 +1,55 @@ -//8 has words +//8 has graphics + +#define X 25 +#define H 5 + +F64 t0=Beat; +U0 DrawIt(CTask *,CDC *dc) +{ + I64 i; + F64 dt=Beat-t0; + dc->x=325; + dc->y=40; + dc->z=GR_Z_ALL; + dc->flags|=DCF_TRANSFORMATION; + Mat4x4RotZ(dc->r,ã*dt/8); + Mat4x4RotX(dc->r,3*ã/8); + + for (i=0;i<=2*H;i+=H) { + GrLine3(dc,-X,-X,i,X,-X,i); + GrLine3(dc,X,-X,i,X,X,i); + GrLine3(dc,X,X,i,-X,X,i); + GrLine3(dc,-X,X,i,-X,-X,i); + } + + GrLine3(dc,-X,-X,0,-X,-X,2*H); + GrLine3(dc,X,-X,0,X,-X,2*H); + GrLine3(dc,-X,X,0,-X,X,2*H); + GrLine3(dc,X,X,0,X,X,2*H); +} + U0 Song() { + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Fs->draw_it=&DrawIt; Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; music.tempo=2.5; - while (TRUE) { - Play("qCqAqAsEDEDqBqBetGGEs2G3C2G3C"); - Play("qCqAqAsEDEDqBqBetGGEs2G3C2G3C"); - Play("etCD2G3etEE2G3qFqFqAsACACsAFAFetECC", - "In \0my \0 \0corn\0 \0 \0er? \0 \0 \0 \0 \0 \0 \0Hope \0we're \0right.\n\0"); - Play("etCD2G3etEE2G3qFqFqAsACACsAFAFetECC", - "In \0my \0 \0corn\0 \0 \0er? \0 \0 \0 \0 \0 \0 \0Hope \0we're \0right.\n\0"); - } + try { + while (TRUE) { + t0=Beat; + Play("qCqAqAsEDEDqBqBetGGEs2G3C2G3C"); + Play("qCqAqAsEDEDqBqBetGGEs2G3C2G3C"); + Play("etCD2G3etEE2G3qFqFqAsACACsAFAFetECC", + "In \0my \0 \0corn\0 \0 \0er? \0 \0 \0 \0 \0 \0 \0" + "Hope \0we're \0right.\n\0"); + Play("etCD2G3etEE2G3qFqFqAsACACsAFAFetECC", + "In \0my \0 \0corn\0 \0 \0er? \0 \0 \0 \0 \0 \0 \0" + "Hope \0we're \0right.\n\0"); + } + } catch + PutExcept; + SettingsPop; } Song; diff --git a/Apps/Psalmody/Examples/prosper.CPP b/Apps/Psalmody/Examples/prosper.CPP index 7e4d17c..50a8e32 100644 Binary files a/Apps/Psalmody/Examples/prosper.CPP and b/Apps/Psalmody/Examples/prosper.CPP differ diff --git a/Apps/Psalmody/Examples/psalm.CPP b/Apps/Psalmody/Examples/psalm.CPP index 2364e64..5da41a1 100644 --- a/Apps/Psalmody/Examples/psalm.CPP +++ b/Apps/Psalmody/Examples/psalm.CPP @@ -6,17 +6,18 @@ U0 Song() music.tempo= 3.360; music.stacatto_factor= 0.846; try { - while (!ScanKey) { - Play("M5/4"); - Play("2qGGG3qtCBA2qGGG3qtCetBBqtA", - "Hymn's \0not \0long.\n\0 \0 \0 \0Nor \0this \0song.\n\0 \0 \0 \0 \0"); - Play("qEeCCqDqtCBAM4/4", - "For\0 \0 \0give!\n\0 \0 \0 \0"); - Play("qDeA2G3DG2G3DFFAC2qG3eAE", - "That's \0 \0 \0all \0 \0I \0 \0say.\n\0 \0 \0 \0 \0 \0 \0"); - Play("qDeA2G3DG2G3DFFAC2qG3eAE", - "This \0 \0 \0I \0 \0 \0 \0pray.\n\0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("M5/4"); + Play("2qGGG3qtCBA2qGGG3qtCetBBqtA", + "Hymn's \0not \0long.\n\0 \0 \0 \0" + "Nor \0this \0song.\n\0 \0 \0 \0 \0"); + Play("qEeCCqDqtCBAM4/4", + "For\0 \0 \0give!\n\0 \0 \0 \0"); + Play("qDeA2G3DG2G3DFFAC2qG3eAE", + "That's \0 \0 \0all \0 \0I \0 \0say.\n\0 \0 \0 \0 \0 \0 \0"); + Play("qDeA2G3DG2G3DFFAC2qG3eAE", + "This \0 \0 \0I \0 \0 \0 \0pray.\n\0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/purpose.CPP b/Apps/Psalmody/Examples/purpose.CPP index c7a1c56..cdd76ed 100644 Binary files a/Apps/Psalmody/Examples/purpose.CPP and b/Apps/Psalmody/Examples/purpose.CPP differ diff --git a/Apps/Psalmody/Examples/readier.CPP b/Apps/Psalmody/Examples/readier.CPP index f1ea54d..ba94f17 100644 --- a/Apps/Psalmody/Examples/readier.CPP +++ b/Apps/Psalmody/Examples/readier.CPP @@ -6,14 +6,15 @@ U0 Song() music.tempo= 2.646; music.stacatto_factor= 0.989; try { - while (!ScanKey) { - Play("2q.G3sCCqAeBB2qG3CeAAqB"); - Play("q.CsCCeCCCCBDDDDDqB", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0Go!\n\0"); - Play("e.AsADCeAetDDDeAsEGeBFsFDFDeEsFACGeC", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0Go!\n\0"); - Play("e.AsADCeAetDDDeAsEGeBFsFDFDeEsFACGeC"); - } + while (!ScanKey) { + Play("2q.G3sCCqAeBB2qG3CeAAqB"); + Play("q.CsCCeCCCCBDDDDDqB", + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0Go!\n\0"); + Play("e.AsADCeAetDDDeAsEGeBFsFDFDeEsFACGeC", + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0Go!\n\0"); + Play("e.AsADCeAetDDDeAsEGeBFsFDFDeEsFACGeC"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/reasoning.CPP b/Apps/Psalmody/Examples/reasoning.CPP index 7be0042..2249854 100644 --- a/Apps/Psalmody/Examples/reasoning.CPP +++ b/Apps/Psalmody/Examples/reasoning.CPP @@ -5,16 +5,20 @@ U0 Song() MusicSettingsRst; music.tempo=2.5; try { - while (!ScanKey) { - Play("3sF2G3F2G3eGDA2GqG3eEDsAAAA2eG3FsFGFG", - "In \0 \0the \0 \0twi\0light \0zone,\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("F2G3F2G3eGDA2GqG3eEDsAAAA2eG3FsFGFG", - "keep \0 \0a \0 \0friend\0ly \0tone.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("C2G3C2G3qFG2GG3sGDGDqGsDCDC", - "Mind \0 \0in \0 \0knots? \0 \0 \0 \0Skip \0 \0de \0 \0bait.\n\0 \0 \0 \0 \0"); - Play("C2G3C2G3qFG2GG3sGDGDqGsDCDC", - "Watch \0 \0those \0 \0thoughts. \0 \0 \0 \0Head \0 \0on \0 \0straight.\n\0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3sF2G3F2G3eGDA2GqG3eEDsAAAA2eG3FsFGFG", + "In \0 \0the \0 \0twi\0light \0zone,\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("F2G3F2G3eGDA2GqG3eEDsAAAA2eG3FsFGFG", + "keep \0 \0a \0 \0friend\0ly \0tone.\n\0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("C2G3C2G3qFG2GG3sGDGDqGsDCDC", + "Mind \0 \0in \0 \0knots? \0 \0 \0 \0Skip \0" + " \0de \0 \0bait.\n\0 \0 \0 \0 \0"); + Play("C2G3C2G3qFG2GG3sGDGDqGsDCDC", + "Watch \0 \0those \0 \0thoughts. \0 \0 \0 \0" + "Head \0 \0on \0 \0straight.\n\0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/reliance.CPP b/Apps/Psalmody/Examples/reliance.CPP index 16abaec..e94cd17 100644 --- a/Apps/Psalmody/Examples/reliance.CPP +++ b/Apps/Psalmody/Examples/reliance.CPP @@ -22,13 +22,17 @@ U0 Song() DocRecalc(DocPut(task)); //Reformat word-wrap with new window size. while (!ScanKey) { Play("3qGsB2G3B2G3eF2G3sGGGGeRFC2G3qFC", - "Where's \0my \0 \0 \0next \0 \0 \0meal!!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Where's \0my \0 \0 \0next \0 \0 \0meal!!\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("GsB2G3B2G3eF2G3sGGGGeRFC2G3qFC", - "God, \0we \0 \0 \0had \0 \0a \0deal!!\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "God, \0we \0 \0 \0had \0 \0a \0deal!!\n\0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0"); Play("B2GsG3A2G3AeCCsCECEqACsGFGF", - "Day \0old \0bread?\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Day \0old \0bread?\n\0 \0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0"); Play("qB2GsG3A2G3AeCCsCECEqACsGFGF", - "'Dai\0ly' \0I \0 \0 \0 \0said.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "'Dai\0ly' \0I \0 \0 \0 \0said.\n\0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/reposes.CPP b/Apps/Psalmody/Examples/reposes.CPP index e3e67e9..d7bc165 100644 --- a/Apps/Psalmody/Examples/reposes.CPP +++ b/Apps/Psalmody/Examples/reposes.CPP @@ -6,16 +6,20 @@ U0 Song() music.tempo= 1.820; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3eC2G3DDEDqCeEEGFGFqE", - "Sit\0ting \0 \0 \0on \0the \0fence,\n\0is \0 \0 \0 \0no \0de\0fence.\n\0"); - Play("sFFeGFEFEqDsCCeDCBqBB", - "Is \0this \0seat \0 \0 \0tak\0 \0en?\n\0An\0 \0y\0one \0op\0 \0pose?\n\0"); - Play("etB2GG3qE2eG3FEEetFBAqFDetFCC", - "Take \0 \0a \0step.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("B2GG3qE2eG3FEEetFBAqFDetFCC", - "Take \0 \0the \0step,\n\0 \0 \0 \0 \0 \0 \0 \0not \0back.\n\0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3eC2G3DDEDqCeEEGFGFqE", + "Sit\0ting \0 \0 \0on \0the \0fence,\n\0is \0" + " \0 \0 \0no \0de\0fence.\n\0"); + Play("sFFeGFEFEqDsCCeDCBqBB", + "Is \0this \0seat \0 \0 \0tak\0 \0en?\n\0An\0" + " \0y\0one \0op\0 \0pose?\n\0"); + Play("etB2GG3qE2eG3FEEetFBAqFDetFCC", + "Take \0 \0a \0step.\n\0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0"); + Play("B2GG3qE2eG3FEEetFBAqFDetFCC", + "Take \0 \0the \0step,\n\0 \0 \0 \0 \0 \0 \0" + " \0not \0back.\n\0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/restless.CPP b/Apps/Psalmody/Examples/restless.CPP index 8940786..bd831cb 100644 --- a/Apps/Psalmody/Examples/restless.CPP +++ b/Apps/Psalmody/Examples/restless.CPP @@ -13,11 +13,14 @@ U0 Song() WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("3sDDDACCADDACCAe.DsCCC2G3FD2G3FD2G3CCAe.D", - "I \0 \0 \0 \0got \0 \0 \0paid, \0 \0 \0to\0 \0 \0day.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "I \0 \0 \0 \0got \0 \0 \0paid, \0 \0 \0to\0 \0 \0" + "day.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("qD2sG3G2G3GetGDAeF2GqG3etFBAEACECE", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0 \0can't \0 \0 \0get \0 \0to \0"); + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0I \0 \0 \0" + "can't \0 \0 \0get \0 \0to \0"); Play("qD2sG3G2G3GetGDAeF2GqG3etFBAEACECE", - "sleep.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "sleep.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/risen.CPP b/Apps/Psalmody/Examples/risen.CPP index 3119c8b..a8448ed 100644 --- a/Apps/Psalmody/Examples/risen.CPP +++ b/Apps/Psalmody/Examples/risen.CPP @@ -27,7 +27,7 @@ U0 Bird(CDC *dc,F64 wing_ p[1].x=0; p[1].y=0; p[1].z=BODY; p[2].x=WING*Cos(wing_é); p[2].y=-WING*Sin(wing_é); p[2].z=0; GrFillPoly3(dc,3,p); - + dc->color=ROPF_DITHER+WHITE<<16+LTGRAY; GrLine3(dc,0,0,-BODY,0,0,BODY); } @@ -41,7 +41,7 @@ U0 DrawIt(CTask *,CDC *dc) { I64 i; F64 é,dt=Beat-t0; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); dc->x=325; dc->y=95; dc->z=GR_Z_ALL; @@ -50,11 +50,12 @@ U0 DrawIt(CTask *,CDC *dc) bx[i]=Clamp(bx[i]+0.25*SignI64(RandI16),-RANGE,RANGE); by[i]=Clamp(by[i]+0.25*SignI64(RandI16),-RANGE,RANGE); é=ã/2*i/NUM_BIRDS+0.2*ã*dt+ã/2; - GrIdentEqu(dc->r); - GrRotXEqu(dc->r,ã/2); - GrRotZEqu(dc->r,é); - GrSetTranslation(dc->r,50*Cos(é)+bx[i],50*Sin(é)+by[i],30*i/NUM_BIRDS+4*dt); - GrRotXEqu(dc->r,0.35*ã); + Mat4x4IdentEqu(dc->r); + Mat4x4RotX(dc->r,ã/2); + Mat4x4RotZ(dc->r,é); + Mat4x4TranslationEqu(dc->r,50*Cos(é)+bx[i],50*Sin(é)+by[i], + 30*i/NUM_BIRDS+4*dt); + Mat4x4RotX(dc->r,0.35*ã); Bird(dc,Sin(2*ã*dt+i*2*ã/NUM_BIRDS)); } } @@ -76,11 +77,11 @@ U0 Song() try { "$$BG+H,LTCYAN$$"; while (!ScanKey) { - t0=Beat; - Play("3eDEqFFetEEFqDeCDDEetCGF"); - Play("eDEqFFetEEFqDeCDDEetCGF"); - Play("eDCqDEeAAetEEFEDGBDCqF"); - Play("eDCqDEeAAetEEFEDGBDCqF"); + t0=Beat; + Play("3eDEqFFetEEFqDeCDDEetCGF"); + Play("eDEqFFetEEFqDeCDDEetCGF"); + Play("eDCqDEeAAetEEFEDGBDCqF"); + Play("eDCqDEeAAetEEFEDGBDCqF"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/sang.CPP b/Apps/Psalmody/Examples/sang.CPP index db1a902..2c817ee 100644 --- a/Apps/Psalmody/Examples/sang.CPP +++ b/Apps/Psalmody/Examples/sang.CPP @@ -6,12 +6,12 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG"); - Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG"); - Play("3eGECGCAFCsCBCBe.GsG2qG3B"); - Play("eGECGCAFCsCBCBe.GsG2qG3B"); - } + while (!ScanKey) { + Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG"); + Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG"); + Play("3eGECGCAFCsCBCBe.GsG2qG3B"); + Play("eGECGCAFCsCBCBe.GsG2qG3B"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/satisfaction.CPP b/Apps/Psalmody/Examples/satisfaction.CPP index af7a9fd..f8fac8d 100644 Binary files a/Apps/Psalmody/Examples/satisfaction.CPP and b/Apps/Psalmody/Examples/satisfaction.CPP differ diff --git a/Apps/Psalmody/Examples/savour.CPP b/Apps/Psalmody/Examples/savour.CPP index 6e5873e..1d372ed 100644 --- a/Apps/Psalmody/Examples/savour.CPP +++ b/Apps/Psalmody/Examples/savour.CPP @@ -6,22 +6,23 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qFCeEAEAqDeCEqBA", - "This \0 \0 \0 \0 \0 \0sand\0wich \0is \0bland.\n\0 \0"); - Play("eCCqDeDDqEeAECECEqA", - "God \0 \0damn, \0my \0 \0tastes \0 \0 \0 \0sure \0 \0are \0grand.\n\0"); - Play("M6/8"); - Play("FEB2G3sAGeCqE", - "Ho \0hum. \0 \0 \0 \0How \0 \0rude!\n\0"); - Play("FEB2G3sAGeCqE", - "That \0bum \0 \0 \0 \0likes \0his \0food.\n\0"); - Play("2G3sAGeDqGFEB", - " \0 \0Likes \0his \0food!\n\0 \0 \0 \0"); - Play("2G3sAAeEqD2G3sDBDB2eGG"); - Play("3AsEDqAeAsBGEBEB2qG3sDBDB"); - Play("2eGG3AsEDqAeAsBGEBEB"); - } + while (!ScanKey) { + Play("3qFCeEAEAqDeCEqBA", + "This \0 \0 \0 \0 \0 \0sand\0wich \0is \0bland.\n\0 \0"); + Play("eCCqDeDDqEeAECECEqA", + "God \0 \0damn, \0my \0 \0tastes \0 \0 \0 \0" + "sure \0 \0are \0grand.\n\0"); + Play("M6/8"); + Play("FEB2G3sAGeCqE", + "Ho \0hum. \0 \0 \0 \0How \0 \0rude!\n\0"); + Play("FEB2G3sAGeCqE", + "That \0bum \0 \0 \0 \0likes \0his \0food.\n\0"); + Play("2G3sAGeDqGFEB", + " \0 \0Likes \0his \0food!\n\0 \0 \0 \0"); + Play("2G3sAAeEqD2G3sDBDB2eGG"); + Play("3AsEDqAeAsBGEBEB2qG3sDBDB"); + Play("2eGG3AsEDqAeAsBGEBEB"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/science.CPP b/Apps/Psalmody/Examples/science.CPP new file mode 100644 index 0000000..3c4cddf --- /dev/null +++ b/Apps/Psalmody/Examples/science.CPP @@ -0,0 +1,94 @@ +//7 has graphics + +F64 t0=Beat; + +U0 MyCircle3(CDC *dc,I64 x,I64 y,I64 z,I64 r) +{ + F64 é,dé=1.0/r; + for (é=0;é<2*ã;é+=dé) + GrPlot3(dc,x+r*Cos(é),y+r*Sin(é),z); +} + +U0 MyCylinder(CDC *dc,I64 x,I64 y,I64 z1,I64 z2,I64 r) +{ + I64 z; + for (z=z1;zx=300; + dc->y=35; + dc->z=GR_Z_ALL; + dc->flags|=DCF_TRANSFORMATION; + Mat4x4RotX(dc->r,Sin(ã*dt/4)/8); + Mat4x4RotY(dc->r,ã*dt/16); + + w1+=3*Sin(ã*dt/3); + + dc->color=BROWN; + MyCylinder(dc,0,0,-w3,w3,r2); + + dc->color=YELLOW; + MyCylinder(dc,0,0,-w1-w2/2+0,-w1-w2/2+1,r1); + dc->color=BLACK; + MyCylinder(dc,0,0,-w1-w2/2+1,-w1-w2/2+2,r1); + dc->color=LTGRAY; + MyCylinder(dc,0,0,-w1-w2/2+2,-w1+w2/2-2,r1); + dc->color=BLACK; + MyCylinder(dc,0,0,-w1+w2/2-2,-w1+w2/2-1,r1); + dc->color=YELLOW; + MyCylinder(dc,0,0,-w1+w2/2-1,-w1+w2/2,r1); + + dc->color=BLACK; + GrLine3(dc,r1,0,-w1-w2/2+1, r1,0,-w1-w2/2+w2-2); + + dc->color=YELLOW; + MyCylinder(dc,0,0,w1-w2/2+0,w1-w2/2+1,r1); + dc->color=BLACK; + MyCylinder(dc,0,0,w1-w2/2+1,w1-w2/2+2,r1); + dc->color=LTGRAY; + MyCylinder(dc,0,0,w1-w2/2+2,w1+w2/2-2,r1); + dc->color=BLACK; + MyCylinder(dc,0,0,w1+w2/2-2,w1+w2/2-1,r1); + dc->color=YELLOW; + MyCylinder(dc,0,0,w1+w2/2-1,w1+w2/2,r1); + + dc->color=BLACK; + GrLine3(dc,r1,0,w1-w2/2+1, r1,0,w1-w2/2+w2-2); +} + +U0 Song() +{ + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + Fs->draw_it=&DrawIt; + Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; + music.tempo= 2.480; + music.stacatto_factor= 0.824; + try { + while (!ScanKey) { + t0=Beat; + Play("2eG3sEAeADDG2qG3sFGeCGBsDE2eG3EB", + "Was \0 \0Ga\0li\0le\0o \0 \0wrong?\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("2G3sEAeADsDDeG2qG3sFGeCGBsDE2eG3EB", + "His \0 \0brain \0 \0was \0might\0 \0y \0strong.\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("etEDE4A3GFeEGqDsDGeAsAGAGqAeEC", + "Did \0you \0 \0real\0ly \0want \0to \0 \0win?\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("etEDE4A3GFeEGqDsDGeAsAGAGqAeEC", + "We \0have \0 \0us, \0a \0real \0Huck \0 \0Finn.\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + } + } catch + PutExcept; + SettingsPop; +} + +Song; diff --git a/Apps/Psalmody/Examples/scriptures.CPP b/Apps/Psalmody/Examples/scriptures.CPP index 9408e76..9098f81 100644 Binary files a/Apps/Psalmody/Examples/scriptures.CPP and b/Apps/Psalmody/Examples/scriptures.CPP differ diff --git a/Apps/Psalmody/Examples/shield.CPP b/Apps/Psalmody/Examples/shield.CPP index 82cd4e1..fed4e91 100644 Binary files a/Apps/Psalmody/Examples/shield.CPP and b/Apps/Psalmody/Examples/shield.CPP differ diff --git a/Apps/Psalmody/Examples/signifies.CPP b/Apps/Psalmody/Examples/signifies.CPP index 0119c55..b968edd 100644 --- a/Apps/Psalmody/Examples/signifies.CPP +++ b/Apps/Psalmody/Examples/signifies.CPP @@ -15,11 +15,14 @@ U0 Song() Play("3hDeDA2qG3hDeD2GqF", "It \0sig\0ni\0fies\n\0a \0big \0sur\0prise.\n\0"); Play("3hDeD2sFG3qAhDeDA2qG", - "Why \0 \0im\0pro\0vise?\n\0$$RED$$\"Be\0cause,\"$$FG$$ \0re\0plies.\n\0"); + "Why \0 \0im\0pro\0vise?\n\0$$RED$$\"Be\0cause,\"$$FG$$ \0" + "re\0plies.\n\0"); Play("3eCEsACACeD2G3qAAFeE2G3etFCC", - "If \0 \0you \0 \0 \0 \0love \0your \0god,\n\0 \0don't \0bore \0 \0Him!\n\0 \0 \0"); + "If \0 \0you \0 \0 \0 \0love \0your \0god,\n\0 \0" + "don't \0bore \0 \0Him!\n\0 \0 \0"); Play("eCEsACACeD2G3qAAFeE2G3etFCC", - "If \0 \0you \0 \0 \0 \0love \0your \0god,\n\0 \0sur\0prise \0 \0Him!\n\0 \0 \0"); + "If \0 \0you \0 \0 \0 \0love \0your \0god,\n\0 \0" + "sur\0prise \0 \0Him!\n\0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/silver.CPP b/Apps/Psalmody/Examples/silver.CPP index 4e1795d..ed9ffb8 100644 --- a/Apps/Psalmody/Examples/silver.CPP +++ b/Apps/Psalmody/Examples/silver.CPP @@ -6,16 +6,18 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qF2GsGGGG3GFGFqAeD2G3etDBEsFCFC", - "Love \0 \0 \0 \0 \0 \0ev\0 \0ery \0 \0sec\0ond.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("qF2GsGGGG3GFGFqAeD2G3etDBEsFCFC", - "World -- \0 \0 \0 \0 \0 \0all \0 \0that \0 \0beck\0ons.\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("qBGFsEAEAqEFGeFC", - " \0Life \0is \0too \0 \0 \0 \0prec\0i\0ous.\n\0 \0 \0"); - Play("qBGFsEAEAqEFGeFC", - " \0Can \0be \0 \0 \0 \0 \0worr\0i\0ous.\n\0 \0 \0"); - } + while (!ScanKey) { + Play("3qF2GsGGGG3GFGFqAeD2G3etDBEsFCFC", + "Love \0 \0 \0 \0 \0 \0ev\0 \0ery \0 \0sec\0ond.\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0"); + Play("qF2GsGGGG3GFGFqAeD2G3etDBEsFCFC", + "World -- \0 \0 \0 \0 \0 \0all \0 \0that \0 \0beck\0ons.\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0"); + Play("qBGFsEAEAqEFGeFC", + " \0Life \0is \0too \0 \0 \0 \0prec\0i\0ous.\n\0 \0 \0"); + Play("qBGFsEAEAqEFGeFC", + " \0Can \0be \0 \0 \0 \0 \0worr\0i\0ous.\n\0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/small.CPP b/Apps/Psalmody/Examples/small.CPP index 034a2f5..3282878 100644 Binary files a/Apps/Psalmody/Examples/small.CPP and b/Apps/Psalmody/Examples/small.CPP differ diff --git a/Apps/Psalmody/Examples/spokest.CPP b/Apps/Psalmody/Examples/spokest.CPP index 99e1275..5bc3b6f 100644 --- a/Apps/Psalmody/Examples/spokest.CPP +++ b/Apps/Psalmody/Examples/spokest.CPP @@ -6,17 +6,21 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3qB2e.G3sADCeDsGEeBqGe.DsGeE2G3GsBC", - "God \0spoke.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0How \0 \0'bout \0that!\n\0 \0 \0"); - Play("qB2e.G3sADCeDsGEeBqGe.DsGeE2G3GsBC", - "God \0spoke.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0Where's \0 \0He \0at?\n\0 \0 \0"); - "$$GREEN$$God talking...\n$$FG$$"; - Play("eFBBsDAECeCqB2e.G3sAF2G3eFe.GsBeDD", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0$$RED$$I'm \0 \0right \0here.\n\0 \0 \0 \0"); - Play("FBBsDAECeCqB2e.G3sAF2G3eFe.GsBeDD", - " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0You \0 \0can \0hear!$$FG$$\n\0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3qB2e.G3sADCeDsGEeBqGe.DsGeE2G3GsBC", + "God \0spoke.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + "How \0 \0'bout \0that!\n\0 \0 \0"); + Play("qB2e.G3sADCeDsGEeBqGe.DsGeE2G3GsBC", + "God \0spoke.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + "Where's \0 \0He \0at?\n\0 \0 \0"); + "$$GREEN$$God talking...\n$$FG$$"; + Play("eFBBsDAECeCqB2e.G3sAF2G3eFe.GsBeDD", + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + "$$RED$$I'm \0 \0right \0here.\n\0 \0 \0 \0"); + Play("FBBsDAECeCqB2e.G3sAF2G3eFe.GsBeDD", + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + "You \0 \0can \0hear!$$FG$$\n\0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/struggles.CPP b/Apps/Psalmody/Examples/struggles.CPP index 2c6b49c..de0d630 100644 Binary files a/Apps/Psalmody/Examples/struggles.CPP and b/Apps/Psalmody/Examples/struggles.CPP differ diff --git a/Apps/Psalmody/Examples/sustain.CPP b/Apps/Psalmody/Examples/sustain.CPP index 2bd7d11..78fd51c 100644 Binary files a/Apps/Psalmody/Examples/sustain.CPP and b/Apps/Psalmody/Examples/sustain.CPP differ diff --git a/Apps/Psalmody/Examples/teachings.CPP b/Apps/Psalmody/Examples/teachings.CPP index 41a709d..ad19f57 100644 --- a/Apps/Psalmody/Examples/teachings.CPP +++ b/Apps/Psalmody/Examples/teachings.CPP @@ -13,13 +13,17 @@ U0 Song() WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); while (!ScanKey) { Play("2eG3CDAqEsACACGEGEqDsAAAAetCDD", - "Ple\0ase \0te\0ach \0me.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Ple\0ase \0te\0ach \0me.\n\0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("2eG3CDAqEsACACGEGEqDsAAAAetCDD", - "Wa\0ter \0thi\0s \0tree.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Wa\0ter \0thi\0s \0tree.\n\0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("2qGG3eEBqAGeFEsFGFGetDBD", - " \0 \0$$RED$$I \0will \0teach \0thee.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + " \0 \0$$RED$$I \0will \0teach \0thee.\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0"); Play("2qGG3eEBqAGeFEsFGFGetDBD", - " \0 \0Wat\0er \0that \0tree.$$FG$$\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + " \0 \0Wat\0er \0that \0tree.$$FG$$\n\0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/thereupon.CPP b/Apps/Psalmody/Examples/thereupon.CPP index e6f8007..11c4d74 100644 --- a/Apps/Psalmody/Examples/thereupon.CPP +++ b/Apps/Psalmody/Examples/thereupon.CPP @@ -57,7 +57,8 @@ U0 Song() Play("2qG3eCB2hGqG3eCB2qG3A", "Umm... \0God?\n\0 \0 \0Let \0Your \0 \0 \0 \0"); Play("CeBA2G3DqEeDCBA2qG3A", - "face \0shine \0on \0down\n\0on \0us, \0Your \0 \0luck\0y \0 \0peo\0"); + "face \0shine \0on \0down\n\0on \0us, \0" + "Your \0 \0luck\0y \0 \0peo\0"); Play("eBA2h.G3qECAF", " \0ple.\n\0 \0Fath\0e\0r \0a\0"); Play("FDAeEDqECAF", diff --git a/Apps/Psalmody/Examples/thither.CPP b/Apps/Psalmody/Examples/thither.CPP index 601e7ff..fbded27 100644 --- a/Apps/Psalmody/Examples/thither.CPP +++ b/Apps/Psalmody/Examples/thither.CPP @@ -6,16 +6,24 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3sC#C#D#D#C#C#CCC#C#D#D#C#C#CCEEDDC#C#DDEEDDC#C#DD", - "Still \0 \0 \0 \0there.\n\0 \0 \0 \0Still \0 \0 \0 \0there.\n\0 \0 \0 \0Not \0 \0 \0 \0fair.\n\0 \0 \0 \0Not \0 \0 \0 \0fair.\n\0 \0 \0 \0"); - Play("C#C#D#D#C#C#CCC#C#D#D#C#C#CCEEDDC#C#DDEEDDC#C#DD", - "Un\0 \0 \0 \0aware!\n\0 \0 \0 \0Un\0 \0 \0 \0aware!\n\0 \0 \0 \0Every\0 \0 \0 \0where!\n\0 \0 \0 \0Every\0 \0 \0 \0where!\n\0 \0 \0 \0"); - Play("eBDetFGAeFEBEetEFEqCeFEDA", - "$$RED$$Running \0 \0 \0a\0way \0 \0 \0 \0 \0 \0from \0the \0Lord \0won't \0 \0work.\n\0 \0"); - Play("BDetFGAeFEBEetEFEqCeFEDA", - "Running \0 \0 \0a\0way \0 \0 \0 \0 \0 \0from \0the \0Lord \0won't \0 \0work.$$FG$$\n\0 \0"); - } + while (!ScanKey) { + Play("3sC#C#D#D#C#C#CCC#C#D#D#C#C#CCEEDDC#C#DDEEDDC#C#DD", + "Still \0 \0 \0 \0there.\n\0 \0 \0 \0" + "Still \0 \0 \0 \0there.\n\0 \0 \0 \0" + "Not \0 \0 \0 \0fair.\n\0 \0 \0 \0" + "Not \0 \0 \0 \0fair.\n\0 \0 \0 \0"); + Play("C#C#D#D#C#C#CCC#C#D#D#C#C#CCEEDDC#C#DDEEDDC#C#DD", + "Un\0 \0 \0 \0aware!\n\0 \0 \0 \0" + "Un\0 \0 \0 \0aware!\n\0 \0 \0 \0" + "Every\0 \0 \0 \0where!\n\0 \0 \0 \0" + "Every\0 \0 \0 \0where!\n\0 \0 \0 \0"); + Play("eBDetFGAeFEBEetEFEqCeFEDA", + "$$RED$$Running \0 \0 \0a\0way \0 \0 \0 \0 \0 \0" + "from \0the \0Lord \0won't \0 \0work.\n\0 \0"); + Play("BDetFGAeFEBEetEFEqCeFEDA", + "Running \0 \0 \0a\0way \0 \0 \0 \0 \0 \0" + "from \0the \0Lord \0won't \0 \0work.$$FG$$\n\0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/tookest.CPP b/Apps/Psalmody/Examples/tookest.CPP index 8c2078d..64f9bb9 100644 --- a/Apps/Psalmody/Examples/tookest.CPP +++ b/Apps/Psalmody/Examples/tookest.CPP @@ -17,9 +17,11 @@ U0 Song() Play("qDeDq.CqBABAR", "Has \0the \0rap\0ture \0come \0and \0gone?\n\0 \0"); Play("EeD2sG3DeB2G3qFCeCsC2G3etGB2G3qE", - "Dear \0God, \0 \0 \0am \0I \0here?\n\0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Dear \0God, \0 \0 \0am \0I \0here?\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0"); Play("EeG2sG3EeCA2qG3CeCsC2G3EEAAeEE", - "Dear \0God, \0 \0 \0am \0I \0here?\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "Dear \0God, \0 \0 \0am \0I \0here?\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); } } catch PutExcept; diff --git a/Apps/Psalmody/Examples/tormenting.CPP b/Apps/Psalmody/Examples/tormenting.CPP index 4adeb82..f16fe48 100644 --- a/Apps/Psalmody/Examples/tormenting.CPP +++ b/Apps/Psalmody/Examples/tormenting.CPP @@ -6,17 +6,21 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("3eCBBCBCCEEAGGAAsEAAE", - "I'm \0 \0 \0in \0 \0trou\0ble.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("eCBBCBCCEEAGGAAsEAAE", - "Bursted \0 \0 \0my \0 \0bub\0ble.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - "$$GREEN$$God talking...\n$$FG$$"; - Play("2qG3eDDsCECE2qGG3eFAetEEEsCAAC", - " \0$$RED$$Yep, \0 \0you're \0 \0 \0 \0screwed.\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - Play("2qG3eDDsCECE2qGG3eFAetEEEsCAAC", - " \0Re\0 \0pent, \0 \0 \0 \0dude.$$FG$$\n\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); - } + while (!ScanKey) { + Play("3eCBBCBCCEEAGGAAsEAAE", + "I'm \0 \0 \0in \0 \0trou\0ble.\n\0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("eCBBCBCCEEAGGAAsEAAE", + "Bursted \0 \0 \0my \0 \0bub\0ble.\n\0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + "$$GREEN$$God talking...\n$$FG$$"; + Play("2qG3eDDsCECE2qGG3eFAetEEEsCAAC", + " \0$$RED$$Yep, \0 \0you're \0 \0 \0 \0screwed.\n\0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0"); + Play("2qG3eDDsCECE2qGG3eFAetEEEsCAAC", + " \0Re\0 \0pent, \0 \0 \0 \0dude.$$FG$$\n\0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/twins.CPP b/Apps/Psalmody/Examples/twins.CPP index d37fc2e..5ee3c9d 100644 --- a/Apps/Psalmody/Examples/twins.CPP +++ b/Apps/Psalmody/Examples/twins.CPP @@ -6,17 +6,19 @@ U0 Song() music.tempo= 2.260; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - "$$GREEN$$As I look back on my sinful past...$$FG$$\n"; - Play("3qCAABAeAECEqB", - "Who \0was \0that \0per\0son? \0 \0It \0wasn't \0 \0me?\n\0"); - Play("CAABAeAECEqB", - "Who \0was \0that \0per\0son? \0 \0It \0wasn't \0 \0me?\n\0"); - Play("etDEDqFetBEDeAFGEqFDE", - "Sad \0to \0say, \0 \0I \0guess \0 \0it \0 \0was \0 \0 \0me.\n\0 \0"); - Play("etDEDqFetBEDeAFGEqFDE", - "Sad \0to \0say, \0 \0I \0guess \0 \0it \0 \0was \0 \0 \0me.\n\0 \0"); - } + while (!ScanKey) { + "$$GREEN$$As I look back on my sinful past...$$FG$$\n"; + Play("3qCAABAeAECEqB", + "Who \0was \0that \0per\0son? \0 \0It \0wasn't \0 \0me?\n\0"); + Play("CAABAeAECEqB", + "Who \0was \0that \0per\0son? \0 \0It \0wasn't \0 \0me?\n\0"); + Play("etDEDqFetBEDeAFGEqFDE", + "Sad \0to \0say, \0 \0I \0guess \0 \0" + "it \0 \0was \0 \0 \0me.\n\0 \0"); + Play("etDEDqFetBEDeAFGEqFDE", + "Sad \0to \0say, \0 \0I \0guess \0 \0" + "it \0 \0was \0 \0 \0me.\n\0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/valued.CPP b/Apps/Psalmody/Examples/valued.CPP index 8ea231c..b2af8af 100644 Binary files a/Apps/Psalmody/Examples/valued.CPP and b/Apps/Psalmody/Examples/valued.CPP differ diff --git a/Apps/Psalmody/Examples/vengeance.CPP b/Apps/Psalmody/Examples/vengeance.CPP index 48dba21..751a5b6 100644 Binary files a/Apps/Psalmody/Examples/vengeance.CPP and b/Apps/Psalmody/Examples/vengeance.CPP differ diff --git a/Apps/Psalmody/Examples/villa.CPP b/Apps/Psalmody/Examples/villa.CPP index 02da677..91883c4 100644 --- a/Apps/Psalmody/Examples/villa.CPP +++ b/Apps/Psalmody/Examples/villa.CPP @@ -6,14 +6,14 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.902; try { - while (!ScanKey) { - Play("4etEEEqBetDDqtDqBetCCqtCqBhB"); - Play("etEEEqBetDDqtDqBetCCqtCqBhB"); - Play("etABCqDetBCCqDetDCBqAhA"); - Play("etABCqDetBCCqDetDCBqAhA"); - Play("qAetCAEsGCGCetBC3G4ADAqAGetDAD"); - Play("qAetCAEsGCGCetBC3G4ADAqAGetDAD"); - } + while (!ScanKey) { + Play("4etEEEqBetDDqtDqBetCCqtCqBhB"); + Play("etEEEqBetDDqtDqBetCCqtCqBhB"); + Play("etABCqDetBCCqDetDCBqAhA"); + Play("etABCqDetBCCqDetDCBqAhA"); + Play("qAetCAEsGCGCetBC3G4ADAqAGetDAD"); + Play("qAetCAEsGCGCetBC3G4ADAqAGetDAD"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/whos.CPP b/Apps/Psalmody/Examples/whos.CPP new file mode 100644 index 0000000..949f462 --- /dev/null +++ b/Apps/Psalmody/Examples/whos.CPP @@ -0,0 +1,31 @@ +//7 has words +U0 Song() +{ + CTask *task; + Fs->task_end_cb=&SndTaskEndCB; + MusicSettingsRst; + music.tempo= 2.480; + music.stacatto_factor= 0.902; + try { + task=PopUpViewPrint("$LK,"Luke,13:25",A="BF:Luke,13:25"$\n"); + TaskWait(task); + WinHorz(Fs->win_left,Fs->win_right,task); + WinVert(Fs->win_bottom+3,Fs->win_bottom+15,task); + while (!ScanKey) { + Play("3qGeEFqEBCGqtBD4A", + "God, \0let \0me \0in!\n\0 \0 \0 \0 \0 \0 \0"); + Play("3qGeEFqEBCGqtBDF", + "God, \0did \0I \0sin?\n\0 \0 \0 \0 \0 \0 \0"); + "$$GREEN$$God talking...\n$$FG$$"; + Play("qE2eG3FqDEeBEqCeCDBC", + "$$RED$$Who's \0 \0 \0 \0there?\n\0 \0 \0 \0 \0 \0 \0 \0"); + Play("qBeAsBAqE2eG3FqDEeBEqC", + " \0 \0 \0 \0Who's \0 \0 \0 \0where?$$FG$$\n\0 \0 \0 \0"); + Play("eCDBCqBeAB"); + } + } catch + PutExcept; + Snd(0); +} + +Song; diff --git a/Apps/Psalmody/Examples/wisdom.CPP b/Apps/Psalmody/Examples/wisdom.CPP index f215842..91333f4 100644 Binary files a/Apps/Psalmody/Examples/wisdom.CPP and b/Apps/Psalmody/Examples/wisdom.CPP differ diff --git a/Apps/Psalmody/Examples/worship.CPP b/Apps/Psalmody/Examples/worship.CPP index 97579d0..d4d78d8 100644 Binary files a/Apps/Psalmody/Examples/worship.CPP and b/Apps/Psalmody/Examples/worship.CPP differ diff --git a/Apps/Psalmody/Examples/you.CPP b/Apps/Psalmody/Examples/you.CPP index 4ea931f..7ff0b71 100644 --- a/Apps/Psalmody/Examples/you.CPP +++ b/Apps/Psalmody/Examples/you.CPP @@ -6,18 +6,22 @@ U0 Song() music.tempo= 2.480; music.stacatto_factor= 0.802; try { - while (!ScanKey) { - DocClear; - Play("3qDsCCCCeBBCCqDsCCCCeBBCC", - "I'm \0 \0 \0 \0 \0on \0my \0way.\n\0 \0Got \0a \0 \0 \0 \0bus\0y \0day.\n\0 \0"); - Play("sBBBBeAAsBA2G3AqAsBBBBeAAsBA2G3AqA", - "Woe, \0 \0 \0 \0I \0for\0got \0 \0to \0 \0pray.\n\0What's \0 \0 \0 \0God \0 \0have \0 \0to \0 \0say?\n\0"); - "$$GREEN$$God talking...\n$$FG$$"; - Play("AeB2G3GGqE2etG3FBeFGqFeEC", - "$$RED$$Oh, \0 \0 \0hi-\0a \0you!\n\0What\0ch\0u \0been \0 \0do\0ing?\n\0 \0"); - Play("qAeB2G3GGqE2etG3FBeFGqFeEC", - "Oh, \0 \0 \0hi-\0a \0you!\n\0What\0ch\0u \0been \0 \0do\0ing?$$FG$$\n\0 \0"); - } + while (!ScanKey) { + DocClear; + Play("3qDsCCCCeBBCCqDsCCCCeBBCC", + "I'm \0 \0 \0 \0 \0on \0my \0way.\n\0" + " \0Got \0a \0 \0 \0 \0bus\0y \0day.\n\0 \0"); + Play("sBBBBeAAsBA2G3AqAsBBBBeAAsBA2G3AqA", + "Woe, \0 \0 \0 \0I \0for\0got \0 \0to \0 \0pray.\n\0" + "What's \0 \0 \0 \0God \0 \0have \0 \0to \0 \0say?\n\0"); + "$$GREEN$$God talking...\n$$FG$$"; + Play("AeB2G3GGqE2etG3FBeFGqFeEC", + "$$RED$$Oh, \0 \0 \0hi-\0a \0you!\n\0What\0ch\0u \0been \0" + " \0do\0ing?\n\0 \0"); + Play("qAeB2G3GGqE2etG3FBeFGqFeEC", + "Oh, \0 \0 \0hi-\0a \0you!\n\0What\0ch\0u \0been \0 \0" + "do\0ing?$$FG$$\n\0 \0"); + } } catch PutExcept; Snd(0); diff --git a/Apps/Psalmody/Examples/zip.CPP b/Apps/Psalmody/Examples/zip.CPP index 1056a7f..1a07758 100644 Binary files a/Apps/Psalmody/Examples/zip.CPP and b/Apps/Psalmody/Examples/zip.CPP differ diff --git a/Apps/Psalmody/JukeBox.CPP b/Apps/Psalmody/JukeBox.CPP index a2e36fd..65df739 100644 --- a/Apps/Psalmody/JukeBox.CPP +++ b/Apps/Psalmody/JukeBox.CPP @@ -1,6 +1,6 @@ CTask *SingleSong(U8 *msg,U8 *name) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CTask *task=Spawn(&SrvCmdLine,NULL,name,,Fs); StrCpy(task->task_title,name); task->title_src=TTS_LOCKED_CONST; @@ -23,7 +23,7 @@ Bool JBPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) CDirEntry *tempde; CDoc *s; if (!(sc&(SCF_ALT|SCF_CTRL|SCF_SHIFT)) - && doc_ce->type_u8==DOCT_MENU_VAL && doc_ce->left_exp>=0) { + && doc_ce->type_u8==DOCT_MENU_VAL && doc_ce->left_exp>=0) { tempde=doc_ce->left_exp; if (sc.u8[0]==SC_DELETE ) { Beep; @@ -45,8 +45,8 @@ Bool JBPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) return TRUE; } else if (ch==CH_SPACE||ch==CH_ESC) tempde->user_data++; //JB_RUN_LEVEL++ - // is followed by --> JB_RUN_LEVEL_TWO - //Actual just exits --> JB_RUN_LEVEL_ONE +// is followed by --> JB_RUN_LEVEL_TWO + //Actual just exits --> JB_RUN_LEVEL_ONE } return FALSE; } @@ -71,10 +71,10 @@ public U0 JukeBox(U8 *dirname=NULL,U8 **_filename=NULL) Free(dirname); doc->user_put_key=&JBPutKey; DocPrint(doc, - "Key: $$GREEN$$Graphics $$BLUE$$Words $$RED$$No Nothing " - "$$BLACK$$Incomplete $$CYAN$$Special$$FG$$\n\n" - "$$GREEN$$$$FG$$ to delete a song.\n" - "Press a number to rate a song.\n"); + "Key: $$GREEN$$Graphics $$BLUE$$Words $$RED$$No Nothing " + "$$BLACK$$Incomplete $$CYAN$$Special$$FG$$\n\n" + "$$GREEN$$$$FG$$ to delete a song.\n" + "Press a number to rate a song.\n"); while (tempde) { if (!(i++%5)) DocPrint(doc,"\n"); @@ -101,7 +101,7 @@ public U0 JukeBox(U8 *dirname=NULL,U8 **_filename=NULL) DocPrint(doc,"$$RED$$"); if (FileOcc("\\0",tempde->full_name,"")) { s->cur_entry=doc_e->next; - s->cur_data_col=0; + s->cur_col=0; DocEntryDel(s,doc_e); DocPrint(s,"//0 has words\n"); DocWrite(s); diff --git a/Apps/Psalmody/Psalmody.CPP b/Apps/Psalmody/Psalmody.CPP index 5e496f8..4289c64 100644 --- a/Apps/Psalmody/Psalmody.CPP +++ b/Apps/Psalmody/Psalmody.CPP @@ -19,7 +19,7 @@ This uses four types of output 4) The Fs->next_ctrl for the tempo/stacatto sliders. -See $LK,"GrUpdateWins",A="MN:GrUpdateWins"$() and $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$(). +See $LK,"GrUpdateTaskWin",A="MN:GrUpdateTaskWin"$(), $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$() and $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$(). $WW,1$$WW,0$*/ #define NOTE_REST MIN_I64 @@ -42,12 +42,12 @@ class PsmNote U8 *word; I64 type,flags; union { - I64 note; - I64 meter_top; + I64 note; + I64 meter_top; }; union { - I64 octave; - I64 meter_bottom; + I64 octave; + I64 meter_bottom; } I64 duration,width; U8 ascii[32]; @@ -63,7 +63,7 @@ class PsmCtrl PsmNote clipboard; CMenuEntry *incomplete_entry,*record_entry; I64 screen_x, - tool; + tool; PsmNote *cur_note; CDC *dc2; Bool playing; diff --git a/Apps/Psalmody/PsalmodyCtrls.CPP b/Apps/Psalmody/PsalmodyCtrls.CPP index a14ea05..641ebed 100644 --- a/Apps/Psalmody/PsalmodyCtrls.CPP +++ b/Apps/Psalmody/PsalmodyCtrls.CPP @@ -15,27 +15,34 @@ U0 DrawTempoCtrl(CDC *dc,CCtrl *c) GrRect(dc, c->left,c->top,TEMPO_SPACING*3+2,TEMPO_SPACING*2+TEMPO_RANGE); dc->color=BLACK; GrRect(dc, c->left+TEMPO_BORDER,c->top+TEMPO_BORDER, - TEMPO_SPACING*3+2-2*TEMPO_BORDER,TEMPO_SPACING*2+TEMPO_RANGE-2*TEMPO_BORDER); + TEMPO_SPACING*3+2-2*TEMPO_BORDER, + TEMPO_SPACING*2+TEMPO_RANGE-2*TEMPO_BORDER); dc->color=WHITE; GrLine(dc,c->left+TEMPO_SPACING,c->top+TEMPO_SPACING, - c->left+TEMPO_SPACING,c->top+TEMPO_SPACING+TEMPO_RANGE-1); + c->left+TEMPO_SPACING,c->top+TEMPO_SPACING+TEMPO_RANGE-1); GrLine(dc,c->left+2*TEMPO_SPACING+1,c->top+TEMPO_SPACING, - c->left+2*TEMPO_SPACING+1,c->top+TEMPO_SPACING+TEMPO_RANGE-1); + c->left+2*TEMPO_SPACING+1,c->top+TEMPO_SPACING+TEMPO_RANGE-1); dc->color=LTGREEN; GrPrint(dc,c->left+TEMPO_SPACING-FONT_WIDTH/2, - c->top+TEMPO_SPACING+TEMPO_RANGE+3,"%d",s->tempo*10/TEMPO_RANGE); + c->top+TEMPO_SPACING+TEMPO_RANGE+3,"%d",s->tempo*10/TEMPO_RANGE); GrPrint(dc,c->left+2*TEMPO_SPACING+1-FONT_WIDTH/2, - c->top+TEMPO_SPACING+TEMPO_RANGE+3,"%d",s->stacatto*10/TEMPO_RANGE); - GrRect(dc,c->left+TEMPO_SPACING-3, c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->tempo-2 ,7,5); - GrRect(dc,c->left+2*TEMPO_SPACING+1-3,c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->stacatto-2,7,5); + c->top+TEMPO_SPACING+TEMPO_RANGE+3,"%d", + s->stacatto*10/TEMPO_RANGE); + GrRect(dc,c->left+TEMPO_SPACING-3, + c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->tempo-2 ,7,5); + GrRect(dc,c->left+2*TEMPO_SPACING+1-3, + c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->stacatto-2,7,5); dc->color=YELLOW; - GrRect(dc,c->left+TEMPO_SPACING-2, c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->tempo-1 ,5,3); - GrRect(dc,c->left+2*TEMPO_SPACING+1-2,c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->stacatto-1,5,3); + GrRect(dc,c->left+TEMPO_SPACING-2, + c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->tempo-1 ,5,3); + GrRect(dc,c->left+2*TEMPO_SPACING+1-2, + c->top+TEMPO_SPACING+TEMPO_RANGE-1-s->stacatto-1,5,3); dc->color=GREEN; GrVPrint(dc,c->left+TEMPO_BORDER+2,c->top+TEMPO_SPACING+2,"Tempo"); - GrVPrint(dc,c->right-TEMPO_BORDER-2-FONT_WIDTH,c->top+TEMPO_SPACING+2,"Stacatto"); + GrVPrint(dc,c->right-TEMPO_BORDER-2-FONT_WIDTH, + c->top+TEMPO_SPACING+2,"Stacatto"); } U0 UpdateDerivedTempoCtrl(CCtrl *c) @@ -71,7 +78,7 @@ CCtrl *TempoNew() c->update_derived_vals=&UpdateDerivedTempoCtrl; c->left=396; c->top=96; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; Preempt(old_preempt); @@ -80,7 +87,7 @@ CCtrl *TempoNew() U0 TempoDel(CCtrl *c) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(c); Preempt(old_preempt); Free(c); diff --git a/Apps/Psalmody/PsalmodyDraw.CPP b/Apps/Psalmody/PsalmodyDraw.CPP index e371392..9e20e8f 100644 --- a/Apps/Psalmody/PsalmodyDraw.CPP +++ b/Apps/Psalmody/PsalmodyDraw.CPP @@ -115,7 +115,7 @@ U0 PsmSetWidth(PsmNote *tempo) U0 PsmSetOctave(I64 octave) { I64 i; - U8 buf[136]; + U8 buf[STR_LEN]; CMenuEntry *tempse; for (i=0;i<=6;i++) { StrPrint(buf,"Snd/Octave%d",i); @@ -196,9 +196,9 @@ U0 DrawIt(CTask *task,CDC *dc) { PsmNote *tempo; I64 i,x,y, - w=task->pix_width; + w=task->pix_width; F64 measure_len=4,measure_left=measure_len; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; dc->color=BLACK; for (i=1;i<6;i++) @@ -215,7 +215,7 @@ U0 DrawIt(CTask *task,CDC *dc) oc.screen_x+=128; PsmRecalcNoteXY; } - + tempo=oc.root.next; while (tempo!=&oc.root) { x=tempo->x; @@ -319,7 +319,7 @@ U0 DrawPickTools() else oc.dc2->color=ROPF_DITHER+WHITE<<16+BLACK; GrBorder(oc.dc2,PSM_TOOLS_X,PSM_TOOLS_Y, - PSM_TOOLS_X+10,PSM_TOOLS_Y+10); + PSM_TOOLS_X+10,PSM_TOOLS_Y+10); if (oc.tool==PSMTT_PTR_TOOL) oc.dc2->color=RED; @@ -332,7 +332,7 @@ U0 DrawPickTools() Bool PsmGetPickToolBox(I64 xx,I64 yy) { if (PSM_TOOLS_X<=xxcolor=BLACK; for (i=0;i$$FG$$\t\tRest\n" - "$$LTGREEN$$$$FG$$\tDeletes Last Note\n" - "$$LTGREEN$$Left Mouse$$FG$$\tDrag note or shift word\n" - "$$LTGREEN$$Right Mouse$$FG$$\tChange duration or set word\n"; - Sprite($IB,"<6>",BI=6$,"$$SP+LA,\"\",LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_LEFT);\",BI=%d$$"); + "$$LTGREEN$$$$FG$$\tDeletes Last Note\n" + "$$LTGREEN$$Left Mouse$$FG$$\tDrag note or shift word\n" + "$$LTGREEN$$Right Mouse$$FG$$\tChange duration or set word\n"; + Sprite($IB,"<6>",BI=6$,"$$SP+LA,\"\"," + "LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_LEFT);\",BI=%d$$"); " "; if (oc.playing) Sprite($IB,"<9>",BI=9$,"$$SP,\"\",LM=\"x\",BI=%d$$"); @@ -412,7 +414,8 @@ U0 PsmMenu(I64 psm_octave) } else Sprite($IB,"<11>",BI=11$,"$$SP,\"\",LM=\"z\",BI=%d$$"); " "; - Sprite($IB,"<7>",BI=7$,"$$SP+LA,\"\",LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_RIGHT);\",BI=%d$$"); + Sprite($IB,"<7>",BI=7$,"$$SP+LA,\"\"," + "LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_RIGHT);\",BI=%d$$"); "$$CM+LX,0,6$$"; PsmSetOctave(psm_octave); WinMgrSync(2); diff --git a/Apps/Psalmody/PsalmodyFile.CPP b/Apps/Psalmody/PsalmodyFile.CPP index 2fa97a8..ef05f0e 100644 --- a/Apps/Psalmody/PsalmodyFile.CPP +++ b/Apps/Psalmody/PsalmodyFile.CPP @@ -23,7 +23,7 @@ U0 PsmSongDel(PsmNote *root) PsmNoteDel(tempo); tempo=tempo1; } - root->next=root->last=root; + QueInit(root); } U0 PsmCutToClipboard() @@ -202,22 +202,22 @@ U0 PsmLoadSong(U8 *filename,I64 *psm_octave,F64 *psm_duration) { U8 *st; PsmNote *tempo; - CLex *lx=LexNew(MStrPrint("#include \"%s\"",filename)); + CCmpCtrl *cc=CmpCtrlNew(MStrPrint("#include \"%s\"",filename)); if (FileOcc("incomplete",filename,"")) oc.incomplete_entry->checked=TRUE; else oc.incomplete_entry->checked=FALSE; - while (Lex(lx)) { - if (lx->token==TK_IDENT) - if (!StrCmp(lx->cur_str,"Play")) { - if (Lex(lx)=='(') - if (Lex(lx)==TK_STR) { + while (Lex(cc)) { + if (cc->token==TK_IDENT) + if (!StrCmp(cc->cur_str,"Play")) { + if (Lex(cc)=='(') + if (Lex(cc)==TK_STR) { tempo=oc.root.last; - st=LexExtStr(lx); + st=LexExtStr(cc); PsmLoadSongStr(st,psm_octave,psm_duration); - if (lx->token==',') { - if (Lex(lx)==TK_STR) { - st=LexExtStr(lx); + if (cc->token==',') { + if (Lex(cc)==TK_STR) { + st=LexExtStr(cc); do { do tempo=tempo->next; while (tempo!=&oc.root && tempo->type==PSMT_METER); @@ -228,19 +228,23 @@ U0 PsmLoadSong(U8 *filename,I64 *psm_octave,F64 *psm_duration) } } } - } else if (!StrCmp(lx->cur_str,"music.tempo")) { - if (Lex(lx)=='=' && Lex(lx)==TK_F64) { - music.tempo=lx->cur_f64-0.0005; - tempo_state.tempo=Round(TEMPO_RANGE*(music.tempo-0.5)/4.4); - } - } else if (!StrCmp(lx->cur_str,"music.stacatto_factor")) { - if (Lex(lx)=='=' && Lex(lx)==TK_F64) { - music.stacatto_factor=lx->cur_f64-0.0005; - tempo_state.stacatto=Round(TEMPO_RANGE*(music.stacatto_factor-0.12)/0.88); + } else if (!StrCmp(cc->cur_str,"music") && + Lex(cc)=='.' && Lex(cc)==TK_IDENT) { + if (!StrCmp(cc->cur_str,"tempo")) { + if (Lex(cc)=='=' && Lex(cc)==TK_F64) { + music.tempo=cc->cur_f64-0.0005; + tempo_state.tempo=Round(TEMPO_RANGE*(music.tempo-0.5)/4.4); + } + } else if (!StrCmp(cc->cur_str,"stacatto_factor")) { + if (Lex(cc)=='=' && Lex(cc)==TK_F64) { + music.stacatto_factor=cc->cur_f64-0.0005; + tempo_state.stacatto= + Round(TEMPO_RANGE*(music.stacatto_factor-0.12)/0.88); + } } } } - LexDel(lx); + CmpCtrlDel(cc); } U8 *PsmCvtSong() @@ -327,7 +331,7 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) F64 measure_len=4,two_measure_left=2*measure_len; I64 ch; U8 *ptr; - + Free(PsmCvtSong); //set tempo->ascii; music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; @@ -347,15 +351,15 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) DocPrint(doc,"//0 no nothing\n"); DocPrint(doc, -"U0 Song()\n" -"{\n" -" Fs->task_end_cb=&SndTaskEndCB;\n" -" MusicSettingsRst;\n" -" music.tempo=%6.3f;\n" -" music.stacatto_factor=%6.3f;\n" -" try {\n" -" while (!ScanKey) {\n" -"\tPlay(\"",music.tempo+0.0005,music.stacatto_factor+0.0005); + "U0 Song()\n" + "{\n" + " Fs->task_end_cb=&SndTaskEndCB;\n" + " MusicSettingsRst;\n" + " music.tempo=%6.3f;\n" + " music.stacatto_factor=%6.3f;\n" + " try {\n" + " while (!ScanKey) {\n" + "\tPlay(\"",music.tempo+0.0005,music.stacatto_factor+0.0005); tempo=oc.root.next; tempo1=tempo; @@ -388,7 +392,7 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) } } DocPrint(doc,"\");\n" - "\tPlay(\""); + "\tPlay(\""); two_measure_left=2*measure_len; tempo1=tempo; has_words=FALSE; @@ -412,13 +416,13 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) } } DocPrint(doc,"\");\n" -" }\n" -" } catch\n" -" PutExcept;\n" -" Snd(0);\n" -"}\n" -"\n" -"Song;\n"); + " }\n" + " } catch\n" + " PutExcept;\n" + " Snd(0);\n" + "}\n" + "\n" + "Song;\n"); DocRecalc(doc); if (full_filename) Free(full_filename); diff --git a/Apps/Psalmody/PsalmodyMain.CPP b/Apps/Psalmody/PsalmodyMain.CPP index ad79d2b..8c0a2e1 100644 --- a/Apps/Psalmody/PsalmodyMain.CPP +++ b/Apps/Psalmody/PsalmodyMain.CPP @@ -100,7 +100,8 @@ U0 PsmRightClick(I64 x,I64 y) Free(st); } else tempo->word=StrNew(" "); - if (DocPut) DocPut->flags=DocPut->flags&~DOCF_FORM|old_doc_flags&DOCF_FORM; + if (DocPut) DocPut->flags=DocPut->flags& + ~DOCF_FORM|old_doc_flags&DOCF_FORM; } break; case PSMR_INS_NOTE: @@ -115,7 +116,8 @@ U0 PsmRightClick(I64 x,I64 y) } } PsmSetWidth(oc.cur_note); - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; } } @@ -320,31 +322,28 @@ class PsmKey #define PSM_B_W 8 #define PSM_B_H 20 -PsmKey psm_kbd[PSM_NUM_KEYS]= -{ - -{ 2*PSM_W_W-4,PSM_B_W,PSM_B_H,'e' }, -{ 3*PSM_W_W-4,PSM_B_W,PSM_B_H,'r' }, -{ 4*PSM_W_W-4,PSM_B_W,PSM_B_H,'t' }, -{ 6*PSM_W_W-4,PSM_B_W,PSM_B_H,'u' }, -{ 7*PSM_W_W-4,PSM_B_W,PSM_B_H,'i' }, -{ 9*PSM_W_W-4,PSM_B_W,PSM_B_H,'p' }, -{10*PSM_W_W-4,PSM_B_W,PSM_B_H,'[' }, -{11*PSM_W_W-4,PSM_B_W,PSM_B_H,']' }, - -{ 0*PSM_W_W,PSM_W_W,PSM_W_H,'a' }, -{ 1*PSM_W_W,PSM_W_W,PSM_W_H,'s' }, -{ 2*PSM_W_W,PSM_W_W,PSM_W_H,'d' }, -{ 3*PSM_W_W,PSM_W_W,PSM_W_H,'f' }, -{ 4*PSM_W_W,PSM_W_W,PSM_W_H,'g' }, -{ 5*PSM_W_W,PSM_W_W,PSM_W_H,'h' }, -{ 6*PSM_W_W,PSM_W_W,PSM_W_H,'j' }, -{ 7*PSM_W_W,PSM_W_W,PSM_W_H,'k' }, -{ 8*PSM_W_W,PSM_W_W,PSM_W_H,'l' }, -{ 9*PSM_W_W,PSM_W_W,PSM_W_H,';' }, -{10*PSM_W_W,PSM_W_W,PSM_W_H,'\'' }, -{11*PSM_W_W,PSM_W_W,PSM_W_H,'\n'}, +PsmKey psm_kbd[PSM_NUM_KEYS]={ + { 2*PSM_W_W-4,PSM_B_W,PSM_B_H,'e' }, + { 3*PSM_W_W-4,PSM_B_W,PSM_B_H,'r' }, + { 4*PSM_W_W-4,PSM_B_W,PSM_B_H,'t' }, + { 6*PSM_W_W-4,PSM_B_W,PSM_B_H,'u' }, + { 7*PSM_W_W-4,PSM_B_W,PSM_B_H,'i' }, + { 9*PSM_W_W-4,PSM_B_W,PSM_B_H,'p' }, + {10*PSM_W_W-4,PSM_B_W,PSM_B_H,'[' }, + {11*PSM_W_W-4,PSM_B_W,PSM_B_H,']' }, + { 0*PSM_W_W,PSM_W_W,PSM_W_H,'a' }, + { 1*PSM_W_W,PSM_W_W,PSM_W_H,'s' }, + { 2*PSM_W_W,PSM_W_W,PSM_W_H,'d' }, + { 3*PSM_W_W,PSM_W_W,PSM_W_H,'f' }, + { 4*PSM_W_W,PSM_W_W,PSM_W_H,'g' }, + { 5*PSM_W_W,PSM_W_W,PSM_W_H,'h' }, + { 6*PSM_W_W,PSM_W_W,PSM_W_H,'j' }, + { 7*PSM_W_W,PSM_W_W,PSM_W_H,'k' }, + { 8*PSM_W_W,PSM_W_W,PSM_W_H,'l' }, + { 9*PSM_W_W,PSM_W_W,PSM_W_H,';' }, + {10*PSM_W_W,PSM_W_W,PSM_W_H,'\'' }, + {11*PSM_W_W,PSM_W_W,PSM_W_H,'\n'}, }; U0 PsmDownKey(I64 x,I64 y) @@ -383,7 +382,8 @@ U0 PsmUpKey(I64 x,I64 y) U0 PsmPushMode(I64 psm_octave) { - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; PsmMenu(psm_octave); } @@ -413,7 +413,7 @@ U0 Psalmody(U8 *dirname=NULL) SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinBorder; AutoComplete; - Preempt(OFF); + Preempt; MkDir("::/Home/Psalmody"); MusicSettingsRst; @@ -489,10 +489,12 @@ U0 Psalmody(U8 *dirname=NULL) was_playing=FALSE; mo_start: if (ip.pos_text.y-Fs->win_top<18) - msg_code=GetMsg(&a1,&a2,1<$$FG$$ to load it into Psalmody.\n\n" ST_WARN_ST " Graphics and other embelishments\n" @@ -702,15 +704,18 @@ mo_got_msg: if (tempo->type!=PSMT_METER) { timeout_val=cnts.jiffies; if (ip.pos_text.y-Fs->win_top<18) - msg_code=ScanMsg(&a1,&a2,1<win_top>=18 && msg_code==MSG_IP_L_DOWN) + if (ip.pos_text.y-Fs->win_top>=18 && + msg_code==MSG_IP_L_DOWN) goto mo_start; else goto mo_got_msg; @@ -731,7 +736,8 @@ mo_got_msg: psm_play_f=0; music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; - music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; + music.stacatto_factor= + 0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; d=JIFFY_FREQ*psm_durations[tempo->duration]/music.tempo; if (Bt(&tempo->flags,PSMf_TIE)) { timeout_val+=d; @@ -801,7 +807,8 @@ mo_got_msg: if (a2>18*FONT_HEIGHT) Fs->win_inhibit=WIG_USER_TASK_DFT; else - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER + -WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; break; case MSG_IP_L_DOWN: PsmDownKey(a1,a2); @@ -829,7 +836,8 @@ mo_got_msg: music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; - tempo->duration=PsmCvtDuration(music.tempo*(evt_time-note_down_time)); + tempo->duration=PsmCvtDuration( + music.tempo*(evt_time-note_down_time)); PsmSetWidth(tempo); QueIns(tempo,oc.cur_note->last); } diff --git a/Apps/Span/Span.HPP b/Apps/Span/Span.HPP index db78202..1a47a4f 100644 --- a/Apps/Span/Span.HPP +++ b/Apps/Span/Span.HPP @@ -2,24 +2,24 @@ class SpanHeader { - F64 version; - I32 num_masses,num_springs; +F64 version; +I32 num_masses,num_springs; }; class MyMass:CMass { - F64 radius,cost,load_t; - CColorROPU32 color; +F64 radius,cost,load_t; +CColorROPU32 color; } *cursor_mass; class MySpring:CSpring { - F64 compression_strength,tensile_strength,cost; - F64 base_compression_strength,base_tensile_strength, - base_const,base_cost; - - CColorROPU32 color; - I32 pen_width; +F64 compression_strength,tensile_strength,cost; +F64 base_compression_strength,base_tensile_strength, +base_const,base_cost; + +CColorROPU32 color; +I32 pen_width; }; CMathODE *ode=NULL; @@ -37,11 +37,11 @@ CColorROPU32 run_colors[2]={RED,GREEN}; #define MD_NUM_MODES 6 CColorROPU32 mode_colors[MD_NUM_MODES]= {BROWN,LTGRAY,DKGRAY,RED,PURPLE,RED}; -DefineLstLoad("ST_SPAN_MODES","Mass\0Concrete\0Steel\0Wire\0Move\0Delete\0"); + DefineLstLoad("ST_SPAN_MODES","Mass\0Concrete\0Steel\0Wire\0Move\0Delete\0"); -class SpanAnimateStruct -{ - U8 *saved_ode; + class SpanAnimateStruct + { + U8 *saved_ode; F64 elapsed_t,start_wall_t; } a; diff --git a/Apps/Span/SpanBridge.CPP b/Apps/Span/SpanBridge.CPP index 5de014f..00ae2bc 100644 --- a/Apps/Span/SpanBridge.CPP +++ b/Apps/Span/SpanBridge.CPP @@ -39,7 +39,7 @@ U0 SpanBridge1Init(CMathODE *) for (i=0;iload_t=(i+1.0)/LOAD_WEIGHTS; tempm->color=RED; } diff --git a/Apps/Span/SpanDerive.CPP b/Apps/Span/SpanDerive.CPP index af21adc..bbe68d3 100644 --- a/Apps/Span/SpanDerive.CPP +++ b/Apps/Span/SpanDerive.CPP @@ -1,9 +1,9 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) { //The forces due to springs and drag are -//automatically handled by the -//ode code. We can add new forces -//here. + //automatically handled by the + //ode code. We can add new forces + //here. CTask *task=ode->win_task; F64 d,dd; CD3 p,p2; diff --git a/Apps/Span/SpanMain.CPP b/Apps/Span/SpanMain.CPP index 05cbca3..02417e8 100644 --- a/Apps/Span/SpanMain.CPP +++ b/Apps/Span/SpanMain.CPP @@ -26,20 +26,16 @@ F64 Cost(CMathODE *ode) U0 DrawIt(CTask *task,CDC *dc) { - Bool old_suspend1,old_suspend2; - I64 i,j; MyMass *tempm; MySpring *temps; - old_suspend1=Suspend(task); - old_suspend2=Suspend(task->animate_task); temps=ode->next_spring; while (temps!=&ode->next_spring) { if (!(temps->flags&SSF_INACTIVE)) { dc->color=temps->color; dc->pen_width=temps->pen_width; GrLine3(dc,temps->end1->x,temps->end1->y,0, - temps->end2->x,temps->end2->y,0); + temps->end2->x,temps->end2->y,0); } temps=temps->next; } @@ -47,8 +43,9 @@ U0 DrawIt(CTask *task,CDC *dc) if (cursor_mass) { dc->color=RED; dc->pen_width=2; - GrLine3(dc,ip.pos.x-task->pix_left-task->scroll_x,ip.pos.y-task->pix_top-task->scroll_y,0, - cursor_mass->x,cursor_mass->y,0); + GrLine3(dc,ip.pos.x-task->pix_left-task->scroll_x, + ip.pos.y-task->pix_top-task->scroll_y,0, + cursor_mass->x,cursor_mass->y,0); } tempm=ode->next_mass; @@ -69,8 +66,6 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=BLACK; GrPrint(dc,90,0,"Cost:%12.2,f",Cost(ode)); GrPrint(dc,90,FONT_HEIGHT,"Time:%12.2f",SpanTime); - Suspend(task,old_suspend1); - Suspend(task->animate_task,old_suspend2); } MyMass PlaceMass(I64 x, I64 y) @@ -91,7 +86,8 @@ U0 NullSpring(MySpring *temps,F64 scale) { F64 d=D3Dist(&temps->end1->x,&temps->end2->x); temps->rest_len=d*scale; - temps->compression_strength=temps->base_compression_strength/(temps->rest_len+1.0); + temps->compression_strength= + temps->base_compression_strength/(temps->rest_len+1.0); temps->tensile_strength=temps->base_tensile_strength/(temps->rest_len+1.0); temps->const=temps->base_const/(temps->rest_len+1.0); temps->cost=temps->base_cost*temps->rest_len; @@ -203,8 +199,10 @@ U0 AnimateTask(SpanAnimateStruct *a) while (temps!=&ode->next_spring) { temps1=temps->next; f=temps->f; - if (f>0 && f>temps->compression_strength && !(temps->flags&SSF_NO_COMPRESSION)|| - f<0 && -f>temps->tensile_strength && !(temps->flags&SSF_NO_TENSION)) + if (f>0 && f>temps->compression_strength && + !(temps->flags&SSF_NO_COMPRESSION)|| + f<0 && -f>temps->tensile_strength && + !(temps->flags&SSF_NO_TENSION)) temps->flags|=SSF_INACTIVE; temps=temps1; } @@ -250,10 +248,10 @@ U0 SongTask(I64) music.tempo= 3.636; music.stacatto_factor= 0.902; while (TRUE) { - Play("3q.EeDqED2G3DhE"); - Play("q.EeDqED2G3DhE"); - Play("q.FeEFEqF2G3EhF"); - Play("q.FeEFEqF2G3EhF"); + Play("3q.EeDqED2G3DhE"); + Play("q.EeDqED2G3DhE"); + Play("q.FeEFEqF2G3EhF"); + Play("q.FeEFEqF2G3EhF"); } } @@ -271,22 +269,17 @@ U0 Span() WinMax; Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - bt_run =CtrlButtonNew(0,0, 80,,2,"Stopped\0Running\0",run_colors,&run_button); - bt_mode=CtrlButtonNew(0,3.0*FONT_HEIGHT,80,,MD_NUM_MODES,Define("ST_SPAN_MODES"),mode_colors,&mode_button); + bt_run =CtrlButtonNew(0,0, 80,, + 2,"Stopped\0Running\0",run_colors,&run_button); + bt_mode=CtrlButtonNew(0,3.0*FONT_HEIGHT,80,, + MD_NUM_MODES,Define("ST_SPAN_MODES"),mode_colors,&mode_button); a.saved_ode=NULL; -//Preempt(OFF) eliminates a lot of hassles. -//The concern is about changing -//que links while the winmgr task -//is updating the ode or screen. - -//The Window mgr suspends this -//task while updating the ode. It -//will not be interrupted and with this -//preempt, we will not be interrupted. -//There is little downside to Preempt() -//since we will yield during GetMsg(). - Preempt(OFF); + //Preempt eliminates a lot of hassles. + //The concern is about changing + //que links while the winmgr task + //is updating the ode or screen. + Preempt; DocCursor; WinBorder; @@ -294,24 +287,24 @@ U0 Span() Fs->win_inhibit|=WIG_DBL_CLICK; MenuPush( -"File {" -" New(,CH_CTRLN);" -" Open(,CH_CTRLO);" -" SaveAs(,CH_CTRLA);" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Play {" -" Restart(,'\n');" -" RunStop(,CH_SPACE);" -" Mass(,'m');" -" Concrete(,'c');" -" Steel(,'s');" -" Wire(,'w');" -" Move(,'v');" -" Delete(,'d');" -"}" - ); + "File {" + " New(,CH_CTRLN);" + " Open(,CH_CTRLO);" + " SaveAs(,CH_CTRLA);" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " RunStop(,CH_SPACE);" + " Mass(,'m');" + " Concrete(,'c');" + " Steel(,'s');" + " Wire(,'w');" + " Move(,'v');" + " Delete(,'d');" + "}" + ); ode=NULL; Init(&a); @@ -336,7 +329,8 @@ U0 Span() try { while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<flags|=DCF_TRANSFORMATION; - GrScaleEqu(dc->r,zoom); + Mat4x4Scale(dc->r,zoom); switch (main_mode_button.state) { case MMD_EDIT: @@ -118,18 +117,16 @@ U0 DrawIt(CTask *,CDC *dc) } } - old_suspend=Suspend(task); - temps=ode->next_spring; while (temps!=&ode->next_spring) { if (temps->type==EMD_SPRING) { dc->color=LTCYAN; GrLine3(dc,temps->end1->x,temps->end1->y,0, - temps->end2->x,temps->end2->y,0); + temps->end2->x,temps->end2->y,0); } else if (temps->type==EMD_CONNECTOR) { dc->color=CYAN; GrLine3(dc,temps->end1->x,temps->end1->y,0, - temps->end2->x,temps->end2->y,0); + temps->end2->x,temps->end2->y,0); } temps=temps->next; } @@ -149,7 +146,7 @@ U0 DrawIt(CTask *,CDC *dc) é=Arg(x2-x1,y2-y1); if (Bt(kbd.down_bitmap,action_scan_codes[temps->action_key-'0'])) { dc->flags|=DCF_SYMMETRY; - GrSetSymmetry3(dc,x1,y1,256,x1,y1,0,x1-256*Cos(é),y1-256*Sin(é),0); + DCSymmetry3Set(dc,x1,y1,256,x1,y1,0,x1-256*Cos(é),y1-256*Sin(é),0); for (i=0;i<8;i++) { d=20*Rand+6; if (d<10) @@ -159,11 +156,11 @@ U0 DrawIt(CTask *,CDC *dc) else dc->color=YELLOW; GrLine3(dc,x1-3*Cos(é),y1-3*Sin(é),0, - x1-d*Cos(é)+0.5*d*Sin(é), - y1-d*Sin(é)-0.5*d*Cos(é),0); + x1-d*Cos(é)+0.5*d*Sin(é), + y1-d*Sin(é)-0.5*d*Cos(é),0); GrLine3(dc,x1-2*d*Cos(é),y1-2*d*Sin(é),0, - x1-d*Cos(é)+0.5*d*Sin(é), - y1-d*Sin(é)-0.5*d*Cos(é),0); + x1-d*Cos(é)+0.5*d*Sin(é), + y1-d*Sin(é)-0.5*d*Cos(é),0); } dc->flags&=~DCF_SYMMETRY; } @@ -180,16 +177,14 @@ U0 DrawIt(CTask *,CDC *dc) } temps=temps->next; } - - Suspend(task,old_suspend); } U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) { //The forces due to springs and drag are -//automatically handled by the -//ode code. We can add new forces -//here. + //automatically handled by the + //ode code. We can add new forces + //here. F64 d,dd; CD3 p; MyMass *tempm1,*tempm2; @@ -216,7 +211,7 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) temps=ode->next_spring; while (temps!=&ode->next_spring) { if (main_mode_button.state==MMD_PLAY && temps->type==EMD_THRUSTER && - Bt(kbd.down_bitmap,action_scan_codes[temps->action_key-'0'])) { + Bt(kbd.down_bitmap,action_scan_codes[temps->action_key-'0'])) { D3Sub(&temps->end2->state->x,&temps->end1->state->x,&p); D3Unit(&p); D3MulEqu(&p,2000); @@ -284,7 +279,7 @@ U0 BreakConnectors() while (temps!=&ode->next_spring) { temps1=temps->next; if (temps->type==EMD_CONNECTOR && - Bt(kbd.down_bitmap,action_scan_codes[temps->action_key-'0'])) { + Bt(kbd.down_bitmap,action_scan_codes[temps->action_key-'0'])) { QueRem(temps); Free(temps); } @@ -330,32 +325,32 @@ U0 PlayShip() Bool okay; ode->flags&=~ODEF_PAUSED; MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Edit {" -" EditShip(,CH_SPACE);" -"}" -"Play {" -" Center(,'c');" -" Damp(,'d');" -" Action0(,'0');" -" Action1(,'1');" -" Action2(,'2');" -" Action3(,'3');" -" Action4(,'4');" -" Action5(,'5');" -" Action6(,'6');" -" Action7(,'7');" -" Action8(,'8');" -" Action9(,'9');" -"}" -"View {" -" ZoomIn(,'z');" -" ZoomOut(,'Z');" -"}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Edit {" + " EditShip(,CH_SPACE);" + "}" + "Play {" + " Center(,'c');" + " Damp(,'d');" + " Action0(,'0');" + " Action1(,'1');" + " Action2(,'2');" + " Action3(,'3');" + " Action4(,'4');" + " Action5(,'5');" + " Action6(,'6');" + " Action7(,'7');" + " Action8(,'8');" + " Action9(,'9');" + "}" + "View {" + " ZoomIn(,'z');" + " ZoomOut(,'Z');" + "}" + ); DocClear; try { while (main_mode_button.state==MMD_PLAY) { @@ -421,45 +416,46 @@ U0 EditShip() Bool okay; MyMass *tempm1=NULL,*tempm2=NULL; CCtrl *bt_edit_mode=CtrlButtonNew(0,5*FONT_HEIGHT+4,80,,EMD_NUM_MODES, - Define("ST_EDIT_MODES"),edit_mode_colors,&edit_mode_button); + Define("ST_EDIT_MODES"),edit_mode_colors,&edit_mode_button); ode->flags|=ODEF_PAUSED; MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Play {" -" PlayShip(,CH_SPACE);" -" Center(,'c');" -" Damp(,'d');" -"}" -"Edit {" -" Move(,'v');" -" Mass(,'m');" -" Spring(,'s');" -" Connector(,'n');" -" Thruster(,'t');" -" Restart(,'\n');" -" Action0(,'0');" -" Action1(,'1');" -" Action2(,'2');" -" Action3(,'3');" -" Action4(,'4');" -" Action5(,'5');" -" Action6(,'6');" -" Action7(,'7');" -" Action8(,'8');" -" Action9(,'9');" -"}" -"View {" -" ZoomIn(,'z');" -" ZoomOut(,'Z');" -"}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " PlayShip(,CH_SPACE);" + " Center(,'c');" + " Damp(,'d');" + "}" + "Edit {" + " Move(,'v');" + " Mass(,'m');" + " Spring(,'s');" + " Connector(,'n');" + " Thruster(,'t');" + " Restart(,'\n');" + " Action0(,'0');" + " Action1(,'1');" + " Action2(,'2');" + " Action3(,'3');" + " Action4(,'4');" + " Action5(,'5');" + " Action6(,'6');" + " Action7(,'7');" + " Action8(,'8');" + " Action9(,'9');" + "}" + "View {" + " ZoomIn(,'z');" + " ZoomOut(,'Z');" + "}" + ); DocClear; try { while (main_mode_button.state==MMD_EDIT) { - switch (ScanMsg(&a1,&a2,1<$$FG$$ to run the game. Press digits to operate " - "thrusters and break connectors.\n\n" - "Press $$GREEN$$$$FG$$ or $$GREEN$$$$FG$$ to zoom in/out.\n\n"; + "Select mass mode.\tLeft-click to place masses.\n" + "Select spring mode.\tLeft-drag to make members.\n" + "Select thruster mode.\tPress a digit, 0-9. Drag to make thruster.\n" + "Select connector mode.\tPress a digit, 0-9. " + "Drag to make breakable connector.\n\n" + "Press $$GREEN$$$$FG$$ to run the game. Press digits to operate " + "thrusters and break connectors.\n\n" + "Press $$GREEN$$$$FG$$ or $$GREEN$$$$FG$$ to zoom in/out.\n\n"; PressAKey; - bt_main_mode=CtrlButtonNew((GR_WIDTH-4*FONT_WIDTH-16)>>1,1*FONT_HEIGHT+4,80,,MMD_NUM_MODES, - Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_button); + bt_main_mode=CtrlButtonNew( + (GR_WIDTH-4*FONT_WIDTH-16)>>1,1*FONT_HEIGHT+4,80,,MMD_NUM_MODES, + Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_button); WinBorder; - Preempt(OFF); + Preempt; AutoComplete; DocCursor; DocClear; diff --git a/Apps/TimeOut/TimeOut.CPP b/Apps/TimeOut/TimeOut.CPP index 4c1b4f0..7e4d6ca 100644 --- a/Apps/TimeOut/TimeOut.CPP +++ b/Apps/TimeOut/TimeOut.CPP @@ -1,5 +1,5 @@ -AcctRegSetDftEntry("TempleOS/TimeOut","I64 best_score=0;\n"); -AcctRegExeBranch("TempleOS/TimeOut"); +RegSetDftEntry("TempleOS/TimeOut","I64 best_score=0;\n"); +RegExeBranch("TempleOS/TimeOut"); #define MAP_HEIGHT 4096 #define BULLET_LEN 10 @@ -127,19 +127,19 @@ U0 DrawIt(CTask *task,CDC *dc) dc->pen_width=3; dc->color=BROWN; GrLine3(dc,0, (finish_line-scroll_y)&(MAP_HEIGHT-1),0, - GR_WIDTH,(finish_line-scroll_y)&(MAP_HEIGHT-1),0); + GR_WIDTH,(finish_line-scroll_y)&(MAP_HEIGHT-1),0); dc->color=LTRED; for (i=0,tempb=b;idead) GrLine(dc,tempb->x>>32,tempb->y>>32, - (tempb->x+tempb->dx*BULLET_LEN)>>32, - (tempb->y+tempb->dy*BULLET_LEN)>>32); + (tempb->x+tempb->dx*BULLET_LEN)>>32, + (tempb->y+tempb->dy*BULLET_LEN)>>32); for (i=0,tempm=m;iy-scroll_y)&(MAP_HEIGHT-1); if (-32<=yy<=Fs->pix_bottom+32) { if (tempm->dead && - tScorpse_timeout) + tScorpse_timeout) if (!(RandU16&15)) { if (tempm->friendly) temps=$IB,"<5>",BI=5$; @@ -147,7 +147,7 @@ U0 DrawIt(CTask *task,CDC *dc) temps=$IB,"<9>",BI=9$; SpriteZ3B(dc,tempm->x,yy,0,temps,tempm->é); } - } + } } for (i=0,tempm=m;iy-scroll_y)&(MAP_HEIGHT-1); @@ -171,17 +171,18 @@ U0 DrawIt(CTask *task,CDC *dc) t1=tf; dc->color=RED; if (game_over && Blink) - GrPrint(dc,task->pix_width/2-9*FONT_WIDTH/2,task->pix_height/2,"Game Over"); + GrPrint(dc,task->pix_width/2-9*FONT_WIDTH/2,task->pix_height/2, + "Game Over"); } else { t1=tS; if (!enemy_left || !friendly_left) - game_over=TRUE; + game_over=TRUE; } dc->color=BROWN; GrPrint(dc,0,0,"Enemy:%d Friends:%d Friendly Fire:%d Time:%6.2f Bullets:%d", - enemy_left,friendly_left,friendly_fire,t1-t0,bullets_fired); + enemy_left,friendly_left,friendly_fire,t1-t0,bullets_fired); GrPrint(dc,0,8,"Total Score:%,d High Score:%,d", - total_score,best_score); + total_score,best_score); } U0 CheckCollisions() @@ -194,8 +195,8 @@ U0 CheckCollisions() for (i=0,tempb=b;idead) GrLine(dc2,tempb->x>>32,tempb->y>>32, - (tempb->x+tempb->dx*BULLET_LEN)>>32, - (tempb->y+tempb->dy*BULLET_LEN)>>32); + (tempb->x+tempb->dx*BULLET_LEN)>>32, + (tempb->y+tempb->dy*BULLET_LEN)>>32); dc2->color =ROP_COLLISION; dc2->bkcolor=BLACK; @@ -247,7 +248,7 @@ U0 Init() dx=0; dy=0; é=0; - + for (i=0;ipix_width-100)*RandU32/MAX_U32+50; ls[i].y=(MAP_HEIGHT-100)*RandU32/MAX_U32+50; @@ -422,34 +423,34 @@ U0 TimeOut() I64 next_update_jiffy; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Preempt(OFF); + Preempt; WinBorder; AutoComplete; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Play {" - " Restart(,'\n');" - " Fire(,CH_SPACE);" - " Left(,,SC_CURSOR_LEFT);" - " Right(,,SC_CURSOR_RIGHT);" - "}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Fire(,CH_SPACE);" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + "}" + ); WinMax; DocClear; "\n\nYou're sent back through time " - "to help fight some bad guys. ($$LTPURPLE$$Purple$$FG$$)\n\n" - "Scoring:\n" - " Enemy Killed\t\t+5\n" - " Enemy by Friendly\t+10\n" - " Friendly Fire\t\t-200\n" - " Bullets Fired\t\t-1\n" - " Game Time\t\t-10 per second\n" - " Surviving Friendlies\t+500\n\n" - "Sweep side-to-side while shooting.\n\n"; + "to help fight some bad guys. ($$LTPURPLE$$Purple$$FG$$)\n\n" + "Scoring:\n" + " Enemy Killed\t\t+5\n" + " Enemy by Friendly\t+10\n" + " Friendly Fire\t\t-200\n" + " Bullets Fired\t\t-1\n" + " Game Time\t\t-10 per second\n" + " Surviving Friendlies\t+500\n\n" + "Sweep side-to-side while shooting.\n\n"; PressAKey; Fs->text_attr=YELLOW<<4+CYAN; @@ -464,7 +465,7 @@ U0 TimeOut() while (TRUE) { next_update_jiffy=cnts.jiffies+JIFFY_FREQ/100; while (msg_code=ScanMsg(&a1,&a2, - 1<>32>=Fs->pix_width|| - b[i].y>>32>=Fs->pix_height) + b[i].x>>32>=Fs->pix_width|| + b[i].y>>32>=Fs->pix_height) b[i].dead=TRUE; } } @@ -522,7 +523,7 @@ U0 TimeOut() while (x<0) x+=Fs->pix_width; - //It takes too much CPU do do all these all the time. + //It takes too much CPU do do all these all the time. nobound_switch (main_loop_pass&7) { case 0: nobound_switch (main_loop_pass>>3&7) { @@ -561,10 +562,10 @@ U0 TimeOut() SleepUntil(next_update_jiffy); total_score=5*(MAX_ENEMY-enemy_left) - +10*enemy_by_friendly - -200*friendly_fire - -10*(tS-t0) - -bullets_fired; + +10*enemy_by_friendly + -200*friendly_fire + -10*(tS-t0) + -bullets_fired; if (game_over) { tf=tS; Sleep(750); @@ -588,11 +589,11 @@ U0 TimeOut() to_done: GetMsg(,,1<player==enemy_player || tempu->fired || !tempu->indirect_fire) + if (tempu->player==enemy_player || tempu->fired || + !tempu->indirect_fire) tempu=NULL; else { RowCol2XY(&fire_radius_x,&fire_radius_y,tempu->row,tempu->col); @@ -34,7 +35,8 @@ U0 TanksPlot() if (!tempu) Beep; else { - if (Sqrt(Sqr(fire_radius_x-target_x)+Sqr(fire_radius_y-target_y))>fire_radius) + if (Sqrt(Sqr(fire_radius_x-target_x)+Sqr(fire_radius_y-target_y))> + fire_radius) Beep; else PlotShot(tempu,cursor_row,cursor_col); @@ -60,8 +62,8 @@ U0 TanksMove() if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); msg_code=GetMsg(&a1,&a2,1<horz_scroll.pos, - a2+Fs->vert_scroll.pos); + a2+Fs->vert_scroll.pos); break; } } @@ -109,8 +111,8 @@ U0 TanksFire() if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); msg_code=GetMsg(&a1,&a2,1<player==enemy_player || tempu->fired || tempu->indirect_fire) + if (tempu->player==enemy_player || tempu->fired || + tempu->indirect_fire) tempu=NULL; else { RVSetUp(cur_player); @@ -137,7 +140,8 @@ U0 TanksFire() if (!tempu) Beep; else { - if (!target || target->player!=enemy_player || !Bt(&target->visible,0)) + if (!target || target->player!=enemy_player || + !Bt(&target->visible,0)) Beep; else FireShot(tempu,target); diff --git a/Apps/ToTheFront/AIs/SimpleAI.CPP b/Apps/ToTheFront/AIs/SimpleAI.CPP index 45c0adb..7ce490c 100644 --- a/Apps/ToTheFront/AIs/SimpleAI.CPP +++ b/Apps/ToTheFront/AIs/SimpleAI.CPP @@ -31,7 +31,8 @@ U0 TanksPlot() CheckUser; tempu=&units[cur_player][i]; if (tempu->life>0 && tempu->indirect_fire && - (target=FindNearestUnit(tempu->row,tempu->col,enemy_player,TRUE,tempu->range*2*HEX_RADIUS))) + (target=FindNearestUnit(tempu->row,tempu->col,enemy_player,TRUE, + tempu->range*2*HEX_RADIUS))) PlotShot(tempu,target->row,target->col); } throw('PhaseOvr',TRUE); @@ -46,7 +47,7 @@ U0 TanksMove() CheckUser; tempu=&units[cur_player][i]; if (tempu->life>0) { - //Cheats because it violates Line-of-Sight +//Cheats because it violates Line-of-Sight if (target=FindNearestUnit(tempu->row,tempu->col,enemy_player,FALSE)) { RowCol2XY(&x,&y,target->row,target->col); if (!MoveUnit(tempu,x,y)) { @@ -67,7 +68,8 @@ U0 TanksFire() CheckUser; tempu=&units[cur_player][i]; if (tempu->life>0 && !tempu->indirect_fire && - (target=FindNearestUnit(tempu->row,tempu->col,enemy_player,TRUE,tempu->range*2*HEX_RADIUS))) { + (target=FindNearestUnit(tempu->row,tempu->col,enemy_player,TRUE, + tempu->range*2*HEX_RADIUS))) { FireShot(tempu,target); Sleep(250*ANIMATION_DELAY); } diff --git a/Apps/ToTheFront/ToTheFront.CPP b/Apps/ToTheFront/ToTheFront.CPP index 5a479eb..2ab5f13 100644 --- a/Apps/ToTheFront/ToTheFront.CPP +++ b/Apps/ToTheFront/ToTheFront.CPP @@ -34,14 +34,15 @@ is you can't use the compile chk feature. */ #define HEX_SIDE 11 -#exe { +U0 InitDefines1() +{ CTask *rotate_tank_task; F64 d; PopUpFile("/Demo/Graphics/RotateTank.CPP",FALSE,NULL,&rotate_tank_task); PopUpOk("This aspires to be a rip-off of\n" - "the Perfect General, but has tank\n" - "facing like the board game,\n" - "Stalin's Tanks.\n"); + "the Perfect General, but has tank\n" + "facing like the board game,\n" + "Stalin's Tanks.\n"); if (!PopUpNoYes("Tournament Settings")) { d=PopUpRangeF64Log(300,2000,20,"%4f","Map Width In Pixs\n"); DefinePrint("MAP_WIDTH","%f",d); @@ -57,14 +58,18 @@ is you can't use the compile chk feature. } DefinePrint("DCOS","%12.9f",HEX_SIDE*Cos(60.0/180*ã)); DefinePrint("DSIN","%12.9f",HEX_SIDE*Sin(60.0/180*ã)); - DefinePrint("HEX_RADIUS","%12.9f",DSIN+0.01); //slop d=PopUpRangeF64(0,100,25,"%3f% %%","Animation Delay\n"); DefinePrint("ANIMATION_DELAY","%5.3f",d/100.0); Seed(PopUpGetI64("Seed(0x%X):",Seed)); XTalk(rotate_tank_task," "); TaskWait(rotate_tank_task); Kill(rotate_tank_task); -} +} InitDefines1; + +U0 InitDefines2() +{ + DefinePrint("HEX_RADIUS","%12.9f",DSIN+0.01); //slop +} InitDefines2; I64 map_cols=(MAP_WIDTH-DCOS)/(2*HEX_SIDE+2*DCOS), map_rows=ToI64((MAP_HEIGHT-DSIN)/DSIN)&~1, @@ -101,7 +106,7 @@ movement_costs[MOUNTAINS]=10; F64 fire_radius,fire_radius_x,fire_radius_y; //These display "phase", "turn" and "game over". -U8 msg_buf[136]; +U8 msg_buf[STR_LEN]; I64 msg_off_timeout; //Jiffies. Goes away after a time. /*I got tricky by not defining a color @@ -137,9 +142,9 @@ class Unit { U8 *img; I64 num,row,col, - armored_attack,unarmored_attack,armor; + armored_attack,unarmored_attack,armor; I8 type,player,facing,movement,life, - range,remaining_movement,accuracy; + range,remaining_movement,accuracy; Bool visible[2],fired,infantry,indirect_fire,pad[3]; }; @@ -160,8 +165,9 @@ U8 visible_unit_bitmap[2][(((MAX_UNITS+7)&~7)*MAX_UNITS)>>3]; #define PHASE_FIRE1 5 #define PHASE_END 6 -I64 phase,cur_player,enemy_player,view_player,turn,cursor_row,cursor_col,alive_cnt[2], - plot_routines[2],move_routines[2],fire_routines[2]; +I64 phase,cur_player,enemy_player,view_player,turn, + cursor_row,cursor_col,alive_cnt[2], + plot_routines[2],move_routines[2],fire_routines[2]; U0 Toward(I64 *_row,I64 *_col,I64 direction) { @@ -228,8 +234,8 @@ Unit *FindUnit(I64 row,I64 col) for (j=0;j<2;j++) for (i=0;i0 && - units[j][i].row==row && - units[j][i].col==col) + units[j][i].row==row && + units[j][i].col==col) return &units[j][i]; return NULL; } @@ -237,7 +243,7 @@ Unit *FindUnit(I64 row,I64 col) Bool CursorInWindow(CTask *task,I64 x,I64 y) { if (0<=x+task->scroll_xpix_width && - 0<=y+task->scroll_ypix_height) + 0<=y+task->scroll_ypix_height) return TRUE; else return FALSE; @@ -246,7 +252,8 @@ Bool CursorInWindow(CTask *task,I64 x,I64 y) U0 UpdateCursor(CTask *task,I64 x,I64 y) { if (CursorInWindow(task,x,y)) - XY2RowCol(&cursor_row,&cursor_col,x+task->horz_scroll.pos,y+task->vert_scroll.pos); + XY2RowCol(&cursor_row, + &cursor_col,x+task->horz_scroll.pos,y+task->vert_scroll.pos); } class LOSCtrl @@ -259,8 +266,8 @@ Bool LOSPlot(LOSCtrl *l,I64 x,I64 y,I64 z) I64 row,col; XY2RowCol(&row,&col,x,y); if ((row!=l->r1 || col!=l->c1) && - (row!=l->r2 || col!=l->c2) && - terrain[row][col]!=PLAINS) { + (row!=l->r2 || col!=l->c2) && + terrain[row][col]!=PLAINS) { if (terrain[l->r1][l->c1]==MOUNTAINS) { if (terrain[row][col]==MOUNTAINS || z>l->distance>>1) return FALSE; @@ -349,8 +356,8 @@ Bool MPRecalcVisible(MPCtrl1 *job) for (i=job->lo;ihi;i++,ut1++) { seen=FALSE; if (ut1->life>0 && - LOS(row,col,ut1->row,ut1->col)) { - RowCol2XY(&x2,&y2,ut1->row,ut1->col); + LOS(row,col,ut1->row,ut1->col)) { + RowCol2XY(&x2,&y2,ut1->row,ut1->col); dd=Sqr(x2-x1)+Sqr(y2-y1); if (ddmode==RV_UPDATE_FRIENDLY_UNIT) - LBEqu(&visible_unit_bitmap[cur_player],i+job->tempu->num*((MAX_UNITS+7)&~7),seen); + LBEqu(&visible_unit_bitmap[cur_player], + i+job->tempu->num*((MAX_UNITS+7)&~7),seen); } break; case RV_ONE_ENEMY_UNIT: RowCol2XY(&x1,&y1,row,col); for (i=job->lo;ihi;i++,ut1++) if (ut1->life>0 && - LOS(row,col,ut1->row,ut1->col)) { - LBts(&visible_unit_bitmap[enemy_player],job->tempu->num+i*((MAX_UNITS+7)&~7)); + LOS(row,col,ut1->row,ut1->col)) { + LBts(&visible_unit_bitmap[enemy_player], + job->tempu->num+i*((MAX_UNITS+7)&~7)); result=TRUE; } else - LBtr(&visible_unit_bitmap[enemy_player],job->tempu->num+i*((MAX_UNITS+7)&~7)); + LBtr(&visible_unit_bitmap[enemy_player], + job->tempu->num+i*((MAX_UNITS+7)&~7)); break; case RV_ALL_UNITS: ut0=&units[cur_player][0]; @@ -379,7 +389,7 @@ Bool MPRecalcVisible(MPCtrl1 *job) ut1=&units[enemy_player][job->lo]; for (j=job->lo;jhi;j++,ut1++) { if (ut1->life>0 && - LOS(ut0->row,ut0->col,ut1->row,ut1->col)) { + LOS(ut0->row,ut0->col,ut1->row,ut1->col)) { LBts(&ut1->visible[cur_player],0); LBts(&visible_unit_bitmap[cur_player],j+i*((MAX_UNITS+7)&~7)); } else @@ -395,7 +405,7 @@ Bool MPRecalcVisible(MPCtrl1 *job) ut1=&units[cur_player][job->lo]; for (j=job->lo;jhi;j++,ut1++) { if (ut1->life>0 && - LOS(ut0->row,ut0->col,ut1->row,ut1->col)) { + LOS(ut0->row,ut0->col,ut1->row,ut1->col)) { LBts(&ut1->visible[enemy_player],0); LBts(&visible_unit_bitmap[enemy_player],j+i*((MAX_UNITS+7)&~7)); } else @@ -425,7 +435,8 @@ $LK,"MAlloc",A="MN:MAlloc"$() would probably be the better choice. CSrvCmd *cmd[mp_cnt]; if (mode==RV_FRIENDLY_UNIT_DIED) { - MemSet((&visible_unit_bitmap[enemy_player])(U8 *)+(tempu->num*((MAX_UNITS+7)&~7))>>3,0,(MAX_UNITS+7)>>3); + MemSet((&visible_unit_bitmap[enemy_player])(U8 *)+ + (tempu->num*((MAX_UNITS+7)&~7))>>3,0,(MAX_UNITS+7)>>3); RVMerge(enemy_player); return 0; //Return any value--don't care } @@ -455,7 +466,7 @@ $LK,"MAlloc",A="MN:MAlloc"$() would probably be the better choice. for (i=0;irow=r; tempu->col=c; RecalcVisible(RV_UPDATE_FRIENDLY_UNIT,tempu); - LBEqu(&tempu->visible[enemy_player],0,RecalcVisible(RV_ONE_ENEMY_UNIT,tempu)); + LBEqu(&tempu->visible[enemy_player],0, + RecalcVisible(RV_ONE_ENEMY_UNIT,tempu)); } else break; } @@ -662,8 +674,8 @@ Bool FirePlot(U0,I64 x,I64 y,I64) U0 FireShot(Unit *tempu,Unit *target) { I64 r,c,facing, - t1=terrain[tempu->row][tempu->col], - t2=terrain[target->row][target->col]; + t1=terrain[tempu->row][tempu->col], + t2=terrain[target->row][target->col]; F64 x1,y1,x2,y2,d,a,dammage=0,range_factor; Bool hit; @@ -729,21 +741,21 @@ U0 FireShot(Unit *tempu,Unit *target) if (target->armor) { d=target->armor/100.0*(5-facing)/5.0; "Armor:%d-FacingAdjustment(%z) Yields:%5.2f Defense\n", - target->armor,facing,"Front\0Side\0Rear\0",100*d; + target->armor,facing,"Front\0Side\0Rear\0",100*d; if (d>=0) { dammage*=(tempu->armored_attack/100.0)/d; "Armored Attack:%d\nRaw*Attack/Defense=%5.2f Dammage\n", - tempu->armored_attack,dammage; + tempu->armored_attack,dammage; } else dammage=0; } else { d=1.0-range_factor; if (d>0) { "Range:%5.2f%% --> %5.2f%% Remaining\n", - 100*range_factor,100*d; + 100*range_factor,100*d; dammage*=(tempu->unarmored_attack/100.0)*d; "Unarmored Attack:%d\nRaw*Attack*Remaining=%5.2f Dammage\n", - tempu->unarmored_attack,dammage; + tempu->unarmored_attack,dammage; } else dammage=0; } @@ -843,28 +855,28 @@ U0 IndirectFireResolve() c=tempi->col+col_offsets_even[i]; r=tempi->row+row_offsets[i]; if (0<=rarmor) { d=target->armor/100.0*(5-facing)/5.0; "Armor:%d-FacingAdjustment(%z) Yields:%5.2f Defense\n", - target->armor,facing,"Front\0Side\0Rear\0",100*d; + target->armor,facing,"Front\0Side\0Rear\0",100*d; if (d>=0) { dammage*=(tempu->armored_attack/100.0)/d; "Armored Attack:%d\nRaw*Attack/Defense=%5.2f Dammage\n", - tempu->armored_attack,dammage; + tempu->armored_attack,dammage; } else dammage=0; } else { d=1.0-range_factor; if (d>0) { "Range:%5.2f%% --> %5.2f%% Remaining\n", - 100*range_factor,100*d; + 100*range_factor,100*d; dammage*=(tempu->unarmored_attack/100.0)*d; "Unarmored Attack:%d\nRaw*Attack*Remaining=%5.2f Dammage\n", - tempu->unarmored_attack,dammage; + tempu->unarmored_attack,dammage; } else dammage=0; } @@ -906,7 +918,7 @@ U0 IndirectFireResolve() U0 DrawHexes() { F64 dx=2*HEX_SIDE+2*DCOS,dy=2*DSIN, - x,y,x1,y1,x2,y2; + x,y,x1,y1,x2,y2; I64 i,j; map_dc->color=WHITE; GrRect(map_dc,0,0,map_dc->width,map_dc->height); @@ -1030,7 +1042,7 @@ U0 DrawRivers() r=j;c=i; Toward(&r,&c,k); if (0<=rcolor=LTBLUE; map_dc->pen_width=4; @@ -1058,7 +1070,7 @@ U0 DrawRoads() r=j;c=i; Toward(&r,&c,k); if (0<=rfacing=RandU16%6; if (!j) { if (i>=Round(MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0)) { - if (Round(i-MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0)>=Round(0.85*(MAX_UNITS-MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0))) + if (Round(i-MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0)>= + Round(0.85*(MAX_UNITS-MAX_UNITS*P1_TO_P2_ODDS* + PLAYER_1_ARMOR_PERCENT/100.0))) type=UT_ARTILLERY; else type=UT_INFANTRY; } else { - if (i>=Round(0.5*MAX_UNITS*P1_TO_P2_ODDS*PLAYER_1_ARMOR_PERCENT/100.0)) + if (i>=Round(0.5*MAX_UNITS*P1_TO_P2_ODDS* + PLAYER_1_ARMOR_PERCENT/100.0)) type=UT_MD_TANK; else type=UT_LT_TANK; } } else { if (i>=Round(MAX_UNITS*PLAYER_2_ARMOR_PERCENT/100.0)) { - if (Round(i-MAX_UNITS*PLAYER_2_ARMOR_PERCENT/100.0)>=Round(0.85*(MAX_UNITS-MAX_UNITS*PLAYER_2_ARMOR_PERCENT/100.0))) + if (Round(i-MAX_UNITS*PLAYER_2_ARMOR_PERCENT/100.0)>= + Round(0.85*(MAX_UNITS-MAX_UNITS*PLAYER_2_ARMOR_PERCENT/100.0))) type=UT_ARTILLERY; else type=UT_INFANTRY; @@ -1386,24 +1402,29 @@ U0 PickAI(U8 *dirname,I64 player) DirTreeDel(tempde); DirTreeDel(tempde2); ExePrint("plot_routines[%d]=&TanksPlot;" - "move_routines[%d]=&TanksMove;" - "fire_routines[%d]=&TanksFire;",player,player,player); + "move_routines[%d]=&TanksMove;" + "fire_routines[%d]=&TanksFire;",player,player,player); } U0 DrawUnit(CTask *task,CDC *dc,Unit *tempu,I64 x,I64 y,F64 f) { if (tempu->infantry) - Sprite3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0,tempu->img); + Sprite3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0, + tempu->img); else - SpriteZ3B(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0,tempu->img,f); - if (phase&~1==PHASE_PLOT && tempu->indirect_fire && !tempu->fired && tempu->player==cur_player) { + SpriteZ3B(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0, + tempu->img,f); + if (phase&~1==PHASE_PLOT && tempu->indirect_fire && + !tempu->fired && tempu->player==cur_player) { dc->pen_width=2; if (cur_player) dc->color=PURPLE; else dc->color=CYAN; - GrCircle3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0,20*Saw(4*tS,2.0)); - GrCircle3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0,20*Saw(4*tS+1.0,2.0)); + GrCircle3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0, + 20*Saw(4*tS,2.0)); + GrCircle3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0, + 20*Saw(4*tS+1.0,2.0)); dc->pen_width=1; } } @@ -1427,12 +1448,13 @@ U0 DrawUnits(CTask *task,CDC *dc) else dc->color=LTCYAN; } - if (tempu->life>0 && Bt(&tempu->visible[view_player],0) && tempu!=moving_unit) { + if (tempu->life>0 && Bt(&tempu->visible[view_player],0) && + tempu!=moving_unit) { RowCol2XY(&x,&y,tempu->row,tempu->col); if (phase&~1==PHASE_MOVE && tempu->remaining_movement || - (phase&~1==PHASE_PLOT&& tempu->indirect_fire|| - phase&~1==PHASE_FIRE&&!tempu->indirect_fire) && !tempu->fired || - Blink(5)) + (phase&~1==PHASE_PLOT&& tempu->indirect_fire|| + phase&~1==PHASE_FIRE&&!tempu->indirect_fire) && !tempu->fired || + Blink(5)) DrawUnit(task,dc,tempu,x,y,tempu->facing*60.0*ã/180.0); } } @@ -1443,9 +1465,9 @@ U0 DrawIt(CTask *task,CDC *dc) { F64 x,y; I64 h,v,i,j,r,c; - U8 buf[128]; + U8 buf[STR_LEN]; IndirectOrders *tempi; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; task->horz_scroll.min=0; task->horz_scroll.max=map_width-task->pix_width; @@ -1464,7 +1486,7 @@ U0 DrawIt(CTask *task,CDC *dc) UpdateCursor(task,i,j); RowCol2XY(&x,&y,cursor_row,cursor_col); -//Roads require multiple cursor fills + //Roads require multiple cursor fills dc->color=YELLOW; c=terrain[cursor_row][cursor_col]; for (i=-(HEX_SIDE+DCOS)/2;i<=(HEX_SIDE+DCOS)/2;i++) { @@ -1494,7 +1516,8 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=LTRED; else dc->color=YELLOW; - GrCircle(dc,x+RandU16%HEX_SIDE-HEX_SIDE/2-h,y+RandU16%HEX_SIDE-HEX_SIDE/2-v,2); + GrCircle(dc,x+RandU16%HEX_SIDE-HEX_SIDE/2-h, + y+RandU16%HEX_SIDE-HEX_SIDE/2-v,2); } } } @@ -1551,18 +1574,18 @@ U0 DrawIt(CTask *task,CDC *dc) if (i=StrLen(msg_buf)*FONT_WIDTH) { dc->color=BLACK; GrRect(dc,(task->pix_width-i)>>1-10-task->scroll_x, - (task->pix_height-FONT_HEIGHT)>>1-10-task->scroll_y, - i+20,FONT_HEIGHT+20); + (task->pix_height-FONT_HEIGHT)>>1-10-task->scroll_y, + i+20,FONT_HEIGHT+20); dc->color=YELLOW; GrRect(dc,(task->pix_width-i)>>1-7-task->scroll_x, - (task->pix_height-FONT_HEIGHT)>>1-7-task->scroll_y, - i+14,FONT_HEIGHT+14); + (task->pix_height-FONT_HEIGHT)>>1-7-task->scroll_y, + i+14,FONT_HEIGHT+14); dc->color=RED; GrPrint(dc,(task->pix_width-i)>>1-task->scroll_x, - (task->pix_height-FONT_HEIGHT)>>1-task->scroll_y, - msg_buf); + (task->pix_height-FONT_HEIGHT)>>1-task->scroll_y, + msg_buf); if (msg_off_timeout) { if (msg_off_timeout-cnts.jiffies<3*JIFFY_FREQ/2*ANIMATION_DELAY) Snd(0); @@ -1572,7 +1595,8 @@ U0 DrawIt(CTask *task,CDC *dc) } dc->color=WHITE; - GrRect(dc,-task->scroll_x,-task->scroll_y,(13+7+10+10)*FONT_WIDTH,FONT_HEIGHT); + GrRect(dc,-task->scroll_x,-task->scroll_y, + (13+7+10+10)*FONT_WIDTH,FONT_HEIGHT); if (phase&~1==PHASE_PLOT) { dc->color=PURPLE; @@ -1656,7 +1680,7 @@ U0 ToTheFront() WinMax; AutoComplete; WinBorder(ON); - Preempt(OFF); + Preempt; Init; PickAI("AIs",0); PickAI("AIs",1); diff --git a/Apps/Vocabulary/VocabQuiz.CPP b/Apps/Vocabulary/VocabQuiz.CPP index 681bf3b..ac3eb7c 100644 --- a/Apps/Vocabulary/VocabQuiz.CPP +++ b/Apps/Vocabulary/VocabQuiz.CPP @@ -32,7 +32,7 @@ U0 VocabQuiz() "$$WW,1$$$$CM-LE,5$$$$RED$$$$BK,1$$%s$$BK,0$$:$$FG$$$$LM,4$$\n",right_word; for (i=0;i<4;i++) "\n\n$$GREEN$$$$BT-X,\"%d\",LM=\"%d\"$$$$FG$$" - "$$LM,7$$%s\n$$LM,4$$",i+1,i+1,ACDDefGet(words[i]); + "$$LM,7$$%s\n$$LM,4$$",i+1,i+1,ACDDefGet(words[i]); "\n\n$$LTBLUE$$Answer:$$FG$$"; do { ch=GetKey(,TRUE); diff --git a/Apps/X-Caliber/X-Caliber.CPP b/Apps/X-Caliber/X-Caliber.CPP index 39a37d2..286227d 100644 --- a/Apps/X-Caliber/X-Caliber.CPP +++ b/Apps/X-Caliber/X-Caliber.CPP @@ -30,11 +30,11 @@ public isn't interested in realism. */ #define XMSGF_ANTISPIN 0 -AcctRegSetDftEntry("TempleOS/XCaliber", +RegSetDftEntry("TempleOS/XCaliber", "I64 best_score=0;\n" "I64 msg_flags=0;\n" ); -AcctRegExeBranch("TempleOS/XCaliber"); +RegExeBranch("TempleOS/XCaliber"); class MyMass:CMass { @@ -185,7 +185,8 @@ Ship *ShipNew(I64 x,I64 y,I64 type) tempsp->s[6].end2=&tempsp->p[4]; for (i=0;isprings;i++) { - tempsp->s[i].rest_len=D3Dist(&tempsp->s[i].end1->x,&tempsp->s[i].end2->x); + tempsp->s[i].rest_len= + D3Dist(&tempsp->s[i].end1->x,&tempsp->s[i].end2->x); tempsp->s[i].const=10000; tempsp->s[i].strength =30000; if (i<=2) @@ -223,7 +224,8 @@ Ship *ShipNew(I64 x,I64 y,I64 type) tempsp->s[2].end2=&tempsp->p[0]; for (i=0;isprings;i++) { - tempsp->s[i].rest_len=D3Dist(&tempsp->s[i].end1->x,&tempsp->s[i].end2->x); + tempsp->s[i].rest_len= + D3Dist(&tempsp->s[i].end1->x,&tempsp->s[i].end2->x); tempsp->s[i].const=10000; tempsp->s[i].strength =20000; tempsp->s[i].color=BLACK; @@ -270,7 +272,8 @@ Ship *ShipNew(I64 x,I64 y,I64 type) tempsp->s[6].end2=&tempsp->p[4]; for (i=0;isprings;i++) { - tempsp->s[i].rest_len=D3Dist(&tempsp->s[i].end1->x,&tempsp->s[i].end2->x); + tempsp->s[i].rest_len= + D3Dist(&tempsp->s[i].end1->x,&tempsp->s[i].end2->x); tempsp->s[i].const= 40000; tempsp->s[i].strength =75000; if (i>=3) @@ -305,7 +308,8 @@ U0 PlaceShip(I64 type) if (CheckOverlap) return; while (TRUE) { - tempsp=ShipNew(RandU16%(Fs->pix_width-20)+10,RandU16%(Fs->pix_height-20)+10,type); + tempsp=ShipNew(RandU16%(Fs->pix_width-20)+10, + RandU16%(Fs->pix_height-20)+10,type); if (CheckOverlap) ShipDel(tempsp); else @@ -382,11 +386,11 @@ U0 DrawIt(CTask *task,CDC *dc) if (game_over) { if (Blink) GrPrint(dc,(task->pix_width-9*FONT_WIDTH)/2, - (task->pix_height-FONT_HEIGHT)/2,"Game Over"); + (task->pix_height-FONT_HEIGHT)/2,"Game Over"); } else if (show_level_msg) { if (Blink) GrPrint(dc,(task->pix_width-8*FONT_WIDTH)/2, - (task->pix_height-FONT_HEIGHT)/2+50,"Level %d",level); + (task->pix_height-FONT_HEIGHT)/2+50,"Level %d",level); } for (i=0;iflags&SSF_INACTIVE)) { dc->color=tempsps->color; GrLine(dc,tempsps->end1->x,tempsps->end1->y, - tempsps->end2->x,tempsps->end2->y); + tempsps->end2->x,tempsps->end2->y); } tempsps=tempsps->next; } @@ -417,7 +421,8 @@ U0 DrawIt(CTask *task,CDC *dc) spin=p.z/d; } else spin=0; - t_left =Clamp(human_t_left+SPIN_GAIN*spin*human_antispin,0,MAX_THRUST); + t_left =Clamp(human_t_left+SPIN_GAIN*spin*human_antispin, + 0,MAX_THRUST); if (d=D3Norm(D3Sub(&tempsp->p[0].x,&tempsp->p[2].x,&p1))) { D3Sub(&tempsp->p[0].DxDt,&tempsp->p[2].DxDt,&p2); @@ -425,7 +430,8 @@ U0 DrawIt(CTask *task,CDC *dc) spin=p.z/d; } else spin=0; - t_right=Clamp(human_t_right-SPIN_GAIN*spin*human_antispin,0,MAX_THRUST); + t_right=Clamp(human_t_right-SPIN_GAIN*spin*human_antispin, + 0,MAX_THRUST); } D3Sub(&tempsp->p[1].x,&tempsp->p[0].x,&p1); @@ -485,12 +491,16 @@ U0 DrawIt(CTask *task,CDC *dc) } else { if (d<0.5) { d=d*2; - x=tempsp->p[0].x*(1.0-d)+tempsp->p[tempsp->spacewalk_side].x*(d); - y=tempsp->p[0].y*(1.0-d)+tempsp->p[tempsp->spacewalk_side].y*(d); + x=tempsp->p[0].x*(1.0-d)+ + tempsp->p[tempsp->spacewalk_side].x*(d); + y=tempsp->p[0].y*(1.0-d)+ + tempsp->p[tempsp->spacewalk_side].y*(d); } else { d=(d-0.5)*2; - x=tempsp->p[tempsp->spacewalk_side].x*(1.0-d)+tempsp->p[0].x*(d); - y=tempsp->p[tempsp->spacewalk_side].y*(1.0-d)+tempsp->p[0].y*(d); + x=tempsp->p[tempsp->spacewalk_side].x*(1.0-d)+ + tempsp->p[0].x*(d); + y=tempsp->p[tempsp->spacewalk_side].y*(1.0-d)+ + tempsp->p[0].y*(d); } SpriteZ3B(dc,x,y,0,$IB,"",BI=4$,arg+0.75*Sin(tS*2)); } @@ -511,7 +521,7 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=WHITE; GrCircle(dc,tempsp->p[i].x,tempsp->p[i].y,tempsp->p[i].radius); } - case ST_ENEMY1: + case ST_ENEMY1: D3DivEqu(D3Sub(&tempsp->p[1].x,&tempsp->p[0].x,&p1),2.0); D3DivEqu(D3Sub(&tempsp->p[2].x,&tempsp->p[0].x,&p2),2.0); D3Unit(D3Add(&p1,&p2,&p)); @@ -522,13 +532,16 @@ U0 DrawIt(CTask *task,CDC *dc) arg=Arg(p.x,p.y); SpriteZ3B(dc,tempsp->p[0].x,tempsp->p[0].y,0,img,arg); arg=Arg(p1.x,p1.y); - SpriteZ3B(dc,tempsp->p[0].x+p1.x,tempsp->p[0].y+p1.y,0,$IB,"",BI=5$,arg); + SpriteZ3B(dc,tempsp->p[0].x+p1.x,tempsp->p[0].y+p1.y,0, + $IB,"",BI=5$,arg); arg=Arg(p2.x,p2.y); - SpriteZ3B(dc,tempsp->p[0].x+p2.x,tempsp->p[0].y+p2.y,0,$IB,"",BI=5$,arg); + SpriteZ3B(dc,tempsp->p[0].x+p2.x,tempsp->p[0].y+p2.y,0, + $IB,"",BI=5$,arg); for (i=0;imasses;i++) { dc->color=YELLOW; if (tempsp->p[i].temperature>=1.0) - GrCircle(dc,tempsp->p[i].x,tempsp->p[i].y,tempsp->p[i].temperature); + GrCircle(dc,tempsp->p[i].x,tempsp->p[i].y, + tempsp->p[i].temperature); } break; } @@ -559,7 +572,7 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=LTRED; GrCircle(dc,temps->p.x,temps->p.y,i); } - } else { + } else { if (temps->radius<1.0) { dc->color=LTGREEN; GrPlot(dc,temps->p.x,temps->p.y); @@ -580,7 +593,8 @@ U0 DrawIt(CTask *task,CDC *dc) D3Sub(&human->p[2].x,&human->p[0].x,&p2); D3Unit(D3Add(&p1,&p2,&p)); dc->color=LTBLUE; - Line(dc,human->p[0].x-10*p.x,human->p[0].y-10*p.y,0,human->p[0].x-800*p.x,human->p[0].y-800*p.y,0,&LaserPlot); + Line(dc,human->p[0].x-10*p.x,human->p[0].y-10*p.y,0, + human->p[0].x-800*p.x,human->p[0].y-800*p.y,0,&LaserPlot); } } @@ -678,21 +692,25 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) } } } else { - if (d=D3Norm(D3Sub(&tempsp->p[0].state->x,&tempsp->p[1].state->x,&p1))) { + if (d=D3Norm(D3Sub(&tempsp->p[0].state->x, + &tempsp->p[1].state->x,&p1))) { D3Sub(&tempsp->p[0].state->DxDt,&tempsp->p[1].state->DxDt,&p2); D3Cross(&p1,&p2,&p); spin=p.z/d; } else spin=0; - t_left =Clamp(human_t_left+SPIN_GAIN*spin*human_antispin,0,MAX_THRUST); + t_left =Clamp(human_t_left+SPIN_GAIN*spin*human_antispin, + 0,MAX_THRUST); - if (d=D3Norm(D3Sub(&tempsp->p[0].state->x,&tempsp->p[2].state->x,&p1))) { + if (d=D3Norm(D3Sub(&tempsp->p[0].state->x, + &tempsp->p[2].state->x,&p1))) { D3Sub(&tempsp->p[0].state->DxDt,&tempsp->p[2].state->DxDt,&p2); D3Cross(&p1,&p2,&p); spin=p.z/d; } else spin=0; - t_right=Clamp(human_t_right-SPIN_GAIN*spin*human_antispin,0,MAX_THRUST); + t_right=Clamp(human_t_right-SPIN_GAIN*spin*human_antispin, + 0,MAX_THRUST); D3Sub(&tempsp->p[0].state->x,&tempsp->p[1].state->x,&p1); D3Sub(&tempsp->p[0].state->x,&tempsp->p[2].state->x,&p2); @@ -758,7 +776,7 @@ U0 CheckDamage() while (tempm!=&ode->next_mass) { D3Sub(&human->p[0].x,&tempm->x,&p1); if (Abs(D3Dot(&p1,&p2))radius && - D3Dot(&p1,&p)<0.0) { + D3Dot(&p1,&p)<0.0) { d=D3NormSqr(&p1); if (dexploding) { if (tS>tempsp->die_timeout) { @@ -852,7 +870,8 @@ U0 FireOneGun(Ship *tempsp,I64 g,F64 r,F64 fuse_time) D3Sub(&tempsp->p[0].x,&tempsp->p[1].x,&p1); D3Sub(&tempsp->p[0].x,&tempsp->p[2].x,&p2); D3Add(&p1,&p2,&p); - D3AddEqu(&temps->p.x,D3MulEqu(D3Copy(&p1,D3Unit(&p)),r+tempsp->p[0].radius+5)); + D3AddEqu(&temps->p.x, + D3MulEqu(D3Copy(&p1,D3Unit(&p)),r+tempsp->p[0].radius+5)); D3AddEqu(D3MulEqu(&p,1000/(r+1)),&tempsp->p[g].DxDt); D3Copy(&temps->p.DxDt,&p); D3MulEqu(&p,temps->p.mass/tempsp->p[g].mass/100.0); @@ -866,7 +885,7 @@ U0 FireOneGun(Ship *tempsp,I64 g,F64 r,F64 fuse_time) U0 HumanFireBegin() { F64 r=3.0*ctrl_panel.shot_radius/CTRL_PANEL_RANGE+0.5, - fuse_time=ToF64(ctrl_panel.fuse_time+1)/CTRL_PANEL_RANGE; + fuse_time=ToF64(ctrl_panel.fuse_time+1)/CTRL_PANEL_RANGE; if (human) { if (!human->exploding && !human->spacewalk_side && tS>human->reload_timeout) switch (level) { @@ -934,7 +953,7 @@ U0 AI() D3Add(&p1,&p2,&p); D3Sub(&human->p[0].x,&tempsp->p[0].x,&p1); if (D3Dot(D3Unit(&p),D3Unit(&p1))>0.995 && - tS>tempsp->reload_timeout) { + tS>tempsp->reload_timeout) { FireOneGun(tempsp,0,1.5+.5,.4); } tempsp=tempsp->next; @@ -948,7 +967,7 @@ U0 InitLevel() I64 i; if (level==4) OneTimePopUp(&msg_flags,XMSGF_ANTISPIN, - "Press $$GREEN$$$$FG$$ for anti-spin stabilizer.\n"); + "Press $$GREEN$$$$FG$$ for anti-spin stabilizer.\n"); human=ShipNew(Fs->pix_width/2,Fs->pix_height/2,ST_HUMAN1); for (i=0;itext_attr=BLACK<<4+WHITE; - Preempt(OFF); + Preempt; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Play {" - " Restart(,'\n');" - " Fire(,CH_SPACE);" - " Thrust(,,SC_CURSOR_UP);" - " StopSpin(,,SC_CURSOR_DOWN);" - " Left(,,SC_CURSOR_LEFT);" - " Right(,,SC_CURSOR_RIGHT);" - " Spackwalk(,'w');" - " LongerFuse(,,SC_CURSOR_RIGHT|SCF_SHIFT);" - " ShorterFuse(,,SC_CURSOR_LEFT|SCF_SHIFT);" - " LargerShot(,,SC_CURSOR_UP|SCF_SHIFT);" - " SmallerShot(,,SC_CURSOR_DOWN|SCF_SHIFT);" - "}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Fire(,CH_SPACE);" + " Thrust(,,SC_CURSOR_UP);" + " StopSpin(,,SC_CURSOR_DOWN);" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + " Spackwalk(,'w');" + " LongerFuse(,,SC_CURSOR_RIGHT|SCF_SHIFT);" + " ShorterFuse(,,SC_CURSOR_LEFT|SCF_SHIFT);" + " LargerShot(,,SC_CURSOR_UP|SCF_SHIFT);" + " SmallerShot(,,SC_CURSOR_DOWN|SCF_SHIFT);" + "}" + ); WinMax; AutoComplete; WinBorder(ON); - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; DocCursor; DocClear; Fs->draw_it=&DrawIt; @@ -1024,7 +1044,7 @@ U0 XCaliber() ch=0; do { while (!game_over && !show_level_msg && - (msg_code=ScanMsg(&a1,&a2,1<color=LTRED; - GrRect(dc, c->left,c->top,CTRL_PANEL_SPACING*3+2,CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); + GrRect(dc, c->left,c->top,CTRL_PANEL_SPACING*3+2, + CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); dc->color=DKGRAY; GrRect(dc, c->left+CTRL_PANEL_BORDER,c->top+CTRL_PANEL_BORDER, - CTRL_PANEL_SPACING*3+2-2*CTRL_PANEL_BORDER, - CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE-2*CTRL_PANEL_BORDER); + CTRL_PANEL_SPACING*3+2-2*CTRL_PANEL_BORDER, + CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE + -2*CTRL_PANEL_BORDER); dc->color=BLACK; - GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING, - c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); - GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING, - c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); + GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BUTTON_SIZE)+ + CTRL_PANEL_SPACING,c->left+CTRL_PANEL_SPACING, + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); + GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BUTTON_SIZE)+ + CTRL_PANEL_SPACING,c->left+2*CTRL_PANEL_SPACING+1, + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); dc->color=BLACK; GrRect(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2-3, - c->top+CTRL_PANEL_BORDER+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2, - 9*FONT_WIDTH+6,FONT_HEIGHT+6); + c->top+CTRL_PANEL_BORDER+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2, + 9*FONT_WIDTH+6,FONT_HEIGHT+6); if (s->spacewalk) dc->color=YELLOW; else dc->color=DKGRAY; GrRect(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2-2, - c->top+CTRL_PANEL_BORDER+1+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2, - 9*FONT_WIDTH+4,FONT_HEIGHT+4); + c->top+CTRL_PANEL_BORDER+1+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2, + 9*FONT_WIDTH+4,FONT_HEIGHT+4); dc->color=RED; GrPrint(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2, - c->top+CTRL_PANEL_BORDER+3+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2,"SpaceWalk"); + c->top+CTRL_PANEL_BORDER+3+ + (CTRL_PANEL_SPACING-FONT_HEIGHT)/2,"SpaceWalk"); GrPrint(dc,c->left+CTRL_PANEL_SPACING-4*FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Size"); + (c->top+CTRL_PANEL_BUTTON_SIZE)+ + CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Size"); GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-4*FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Fuse"); + (c->top+CTRL_PANEL_BUTTON_SIZE)+ + CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Fuse"); dc->color=LTRED; GrPrint(dc,c->left+CTRL_PANEL_SPACING-FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, - "%d",s->shot_radius*10/CTRL_PANEL_RANGE); + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, + "%d",s->shot_radius*10/CTRL_PANEL_RANGE); GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, - "%d",s->fuse_time*10/CTRL_PANEL_RANGE); - GrRect(dc,c->left+CTRL_PANEL_SPACING-3, (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1-s->shot_radius-2 ,7,5); - GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-3,(c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1-s->fuse_time-2,7,5); + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, + "%d",s->fuse_time*10/CTRL_PANEL_RANGE); + GrRect(dc,c->left+CTRL_PANEL_SPACING-3, + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + CTRL_PANEL_RANGE-1-s->shot_radius-2 ,7,5); + GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-3, + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + CTRL_PANEL_RANGE-1-s->fuse_time-2,7,5); dc->color=YELLOW; - GrRect(dc,c->left+CTRL_PANEL_SPACING-2, (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1-s->shot_radius-1 ,5,3); - GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-2,(c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1-s->fuse_time-1,5,3); + GrRect(dc,c->left+CTRL_PANEL_SPACING-2, + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + CTRL_PANEL_RANGE-1-s->shot_radius-1 ,5,3); + GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-2, + (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + CTRL_PANEL_RANGE-1-s->fuse_time-1,5,3); d_range=c->right-c->left-5-5; d=s->laser_temperature*d_range/LASER_MAX_TEMP; @@ -75,7 +90,8 @@ U0 DrawCtrlPanelCtrl(CDC *dc,CCtrl *c) GrRect(dc,c->left+5,c->bottom+TMP_Y-1,Min(d,d_range/3),2); if (d>=d_range/3) { dc->color=YELLOW; - GrRect(dc,c->left+5+d_range/3,c->bottom+TMP_Y-1,Min(d,2*d_range/3)-d_range/3,2); + GrRect(dc,c->left+5+d_range/3,c->bottom+TMP_Y-1, + Min(d,2*d_range/3)-d_range/3,2); if (d>=2*d_range/3) { dc->color=RED; GrRect(dc,c->left+5+2*d_range/3,c->bottom+TMP_Y-1,d-2*d_range/3,2); @@ -89,7 +105,8 @@ U0 UpdateDerivedCtrlPanelCtrl(CCtrl *c) CtrlPanelState *s=c->state; c->left=c->win_task->pix_width-(CTRL_PANEL_SPACING*3+2); c->right=c->left+CTRL_PANEL_SPACING*3+2; - c->top=c->win_task->pix_height-(CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); + c->top=c->win_task->pix_height-(CTRL_PANEL_SPACING*2+ + CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); c->bottom=c->top+CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE; s->shot_radius =ClampI64(s->shot_radius,0,CTRL_PANEL_RANGE-1); @@ -99,13 +116,16 @@ U0 UpdateDerivedCtrlPanelCtrl(CCtrl *c) U0 LeftClickCtrlPanel(CCtrl *c,I64 x,I64 y,Bool) { CtrlPanelState *s=c->state; - if (ytop+CTRL_PANEL_BORDER+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2+FONT_HEIGHT+6) + if (ytop+CTRL_PANEL_BORDER+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2+ + FONT_HEIGHT+6) s->spacewalk=TRUE; else { if (x<(c->right+c->left)/2) - s->shot_radius=CTRL_PANEL_RANGE-1-(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); + s->shot_radius=CTRL_PANEL_RANGE-1 + -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); else - s->fuse_time=CTRL_PANEL_RANGE-1-(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); + s->fuse_time=CTRL_PANEL_RANGE-1 + -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); } if (c->update_derived_vals) (*c->update_derived_vals)(c); @@ -123,7 +143,7 @@ CCtrl *CtrlPanelNew() c->draw_it=&DrawCtrlPanelCtrl; c->left_click=&LeftClickCtrlPanel; c->update_derived_vals=&UpdateDerivedCtrlPanelCtrl; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; Preempt(old_preempt); @@ -132,7 +152,7 @@ CCtrl *CtrlPanelNew() U0 CtrlPanelDel(CCtrl *c) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(c); Preempt(old_preempt); Free(c); diff --git a/Compiler/Asm.CPP b/Compiler/Asm.CPP index 68bd64c..a3a1b8c 100644 --- a/Compiler/Asm.CPP +++ b/Compiler/Asm.CPP @@ -1,433 +1,38 @@ -U0 AsmUnresolvedAdd(CLex *lx,U8 *ex,I64 type,I64 ip,I64 rel_ip, - CLexUndef *undef_local,CLexUndef *undef_glbl,I64 line_num, - Bool U8_avail) -{ - CAsmUnresolvedRef *tempu=MAlloc(sizeof(CAsmUnresolvedRef)); - tempu->ex=ex; - tempu->type=type; - tempu->ip=ip; - tempu->rel_ip=rel_ip; - tempu->exe=lx->exe; - tempu->imm_flag=FALSE; - tempu->line_num=line_num; - tempu->U8_avail=U8_avail; - tempu->str=NULL; - if (undef_local) { - tempu->undef_hash=undef_local; - tempu->next=lx->a->local_unresolved; - lx->a->local_unresolved=tempu; - } else { - tempu->undef_hash=undef_glbl; - tempu->next=lx->a->glbl_unresolved; - lx->a->glbl_unresolved=tempu; - if (undef_glbl->hash->type & HTF_IMPORT) { - tempu->str=StrNew(undef_glbl->hash->str); - if (undef_glbl->hash->type & HTF_IMM) - tempu->imm_flag=TRUE; - } - } -} - -U0 AsmLineLst(CLex *lx) -{ - CAOTCtrl *a=lx->a; - CLexFile *tempf=lx->cur_lfn; - CDocEntry *doc_e=tempf->line_start,*doc_e2; - if (a->lst && a->last_lfn==tempf && doc_e) { - if (doc_e2=a->last_line_lsted) { - if (tempf->flags& LFSF_DOC) { - while (doc_e2->yy) { - "%h*c%08X ",24-a->display_col,CH_SPACE,a->last_ip; - a->display_col=0; - doc_e2=LexPutLine(lx,doc_e2); - } - } else { - while (*doc_e2(U8 *) && doc_e2!=doc_e) { - "%h*c%08X ",24-a->display_col,CH_SPACE,a->last_ip; - a->display_col=0; - doc_e2=LexPutLine(lx,doc_e2); - } - } - a->last_line_lsted=doc_e2; - } else - a->last_line_lsted=doc_e; - } else { - a->last_line_lsted=NULL; - a->last_lfn=tempf; - } - a->last_ip=a->ip; -} - -U0 AsmStoreCodeU8(CLex *lx,U8 b) -{ - CAOTCtrl *a=lx->a; - I64 i=a->ip>>ASM_CODE_BLK_BITS; - CAsmCodeBlk *tempc=a->cb; - while (i--) - if (!(tempc=tempc->next)) { - i=a->ip>>ASM_CODE_BLK_BITS+1; - tempc=&a->cb; - while (i--) { - if (!tempc->next) - tempc->next=CAlloc(sizeof(CAsmCodeBlk)); - tempc=tempc->next; - } - break; - } - tempc->body[a->ip++ & (ASM_CODE_BLK_SIZE-1)]=b; - if (a->lst) { - if (a->display_col>=24) { - '\n'; - a->display_col=0; - } - "%02X ",b; - a->display_col+=3; - } - if (a->ip>a->num_ex_U8s) - a->num_ex_U8s=a->ip; -} - -U0 AsmStoreCodeU32(CLex *lx,U32 d) -{ - CAOTCtrl *a=lx->a; - I64 i=a->ip>>ASM_CODE_BLK_BITS, - j=(a->ip+sizeof(U32))>>ASM_CODE_BLK_BITS; - U32 *_d; - CAsmCodeBlk *tempc; - if (i!=j) - for (i=0;icb; - while (i--) - if (!(tempc=tempc->next)) { - i=a->ip>>ASM_CODE_BLK_BITS+1; - tempc=&a->cb; - while (i--) { - if (!tempc->next) - tempc->next=CAlloc(sizeof(CAsmCodeBlk)); - tempc=tempc->next; - } - break; - } - _d=tempc->body+ a->ip&(ASM_CODE_BLK_SIZE-1); - *_d=d; - a->ip+=sizeof(U32); - if (a->lst) { - if (a->display_col>=24) { - '\n'; - a->display_col=0; - } - "%08X ",d; - a->display_col+=9; - } - if (a->ip>a->num_ex_U8s) - a->num_ex_U8s=a->ip; - } -} - -U0 AsmStoreCodeU64(CLex *lx,U64 q) -{ - CAOTCtrl *a=lx->a; - I64 i=a->ip>>ASM_CODE_BLK_BITS, - j=(a->ip+sizeof(I64))>>ASM_CODE_BLK_BITS, - *_q; - CAsmCodeBlk *tempc; - if (i!=j) - for (i=0;icb; - while (i--) - if (!(tempc=tempc->next)) { - i=a->ip>>ASM_CODE_BLK_BITS+1; - tempc=&a->cb; - while (i--) { - if (!tempc->next) - tempc->next=CAlloc(sizeof(CAsmCodeBlk)); - tempc=tempc->next; - } - break; - } - _q=tempc->body+ a->ip&(ASM_CODE_BLK_SIZE-1); - *_q=q; - a->ip+=sizeof(I64); - if (a->lst) { - if (a->display_col>=24) { - '\n'; - a->display_col=0; - } - "%016X ",q; - a->display_col+=17; - } - if (a->ip>a->num_ex_U8s) - a->num_ex_U8s=a->ip; - } -} - -U0 AsmStoreCodeU8At(CLex *lx,I64 ip,...) -{ - CAOTCtrl *a=lx->a; - CAsmCodeBlk *tempc; - I64 i,j; - for (j=0;j>ASM_CODE_BLK_BITS+1; - tempc=&a->cb; - while (i--) { - if (!tempc->next) { - tempc->next=CAlloc(sizeof(CAsmCodeBlk)); - tempc->next->next=NULL; - } - tempc=tempc->next; - } - tempc->body[ip++ & (ASM_CODE_BLK_SIZE-1)]=argv[j]; - } - if (ip>a->num_ex_U8s) - a->num_ex_U8s=ip; -} - -I64 AsmLexExpression(CLex *lx) -{ - U8 *ex; - I64 result=0; - lx->undef_hash_entry=NULL; - lx->flags&=~(LF_UNRESOLVED+LF_LOCAL); - lx->abs_cnts=0; - if (!IsLexExpression2Bin(lx,&ex)) - LexSkipEol(lx); - else { - if (lx->abs_cnts.externs) - LexExcept(lx,"Extern Not Allowed at "); - if (lx->flags & LF_UNRESOLVED) - LexExcept(lx,"undefined sym at "); - result=Call(ex); - Free(ex); - } - return result; -} - -U0 AsmResolve(CLex *lx,CAsmUnresolvedRef *tempu,U8 *label,Bool undefined) -{ - CExeImportExport *tempe; - CLexUndef *templu; - I64 r=Call(tempu->ex); - if (undefined) { - templu=tempu->undef_hash; - while (templu) { - if (templu->hash->type & HTF_UNRESOLVED) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->next=templu->hash->ie_lst; - templu->hash->ie_lst=tempe; - tempe->ip=tempu->ip; - tempe->exe=lx->exe; - tempe->type=tempu->type; - } - templu=templu->next; //Technically, more than one won't work. - } - } else if (!(tempu->type&1)) {//Rel? - r-=tempu->rel_ip; - if (tempu->type==EIT_REL_I8 && !(MIN_I8<=r<=MAX_I8) || - tempu->type==EIT_REL_I16 && !(MIN_I16<=r<=MAX_I16)) { - PrintErr("branch out of range at line:%04d %s\n", - tempu->line_num,label); - LexExcept(lx); - } - if (tempu->U8_avail && tempu->type>EIT_IMM_U8 && -124<=r<=123) - PrintWarn("could use I8 displacement at line:%04d %s %s\n", - tempu->line_num,lx->a->last_label,label); - } - AsmStoreCodeU8At(lx,tempu->ip,r.u8[0]); - if (tempu->type>=EIT_REL_I16) { - AsmStoreCodeU8At(lx,tempu->ip+1,r.u8[1]); - if (tempu->type>=EIT_REL_I32) { - AsmStoreCodeU8At(lx,tempu->ip+2,r.u8[2],r.u8[3]); - if (tempu->type>=EIT_REL_I64) - AsmStoreCodeU8At(lx,tempu->ip+4,r.u8[4],r.u8[5],r.u8[6],r.u8[7]); - } - } -} - -U0 AsmLocalsResolve(CLex *lx) -{ - CAOTCtrl *a=lx->a; - CAsmUnresolvedRef *tempu=a->local_unresolved,*tempu1; - CLexUndef *templu; - Bool undefined; - U8 *label=NULL; - - while (tempu) { - undefined=FALSE; - tempu1=tempu->next; - templu=tempu->undef_hash; - while (templu) { - if (templu->hash->type & HTF_UNRESOLVED) { - PrintErr("undefined sym at line:%04d %s %s\n", - tempu->line_num,a->last_label,templu->hash->str); - LexExcept(lx); - } - label=templu->hash->str; - templu=templu->next; - } - if (!undefined) - AsmResolve(lx,tempu,label,FALSE); - Free(tempu->ex); - LinkedLstDel(tempu->undef_hash); - Free(tempu); - tempu=tempu1; - } - HashTableDel(lx->htc.local_hash_table); - lx->htc.hash_table_lst=lx->htc.local_hash_table=HashTableNew(16); - lx->htc.local_hash_table->next=lx->htc.glbl_hash_table; - a->local_unresolved=NULL; -} - -U0 AsmGlblsResolve(CLex *lx,CExe *tempx) -{ - CAOTCtrl *a=lx->a; - CHashFun *tempf; - CAsmUnresolvedRef *tempu=a->glbl_unresolved,*tempu1; - I64 i,j; - CExeImportExport *tempe,*tempe1; - CLexUndef *templu; - CHashExport *tempex; - U8 *label; - Bool undefined; - CExternUsage *tempeu,*tempeu8; - - while (tempu) { - label=NULL; - undefined=FALSE; - tempu1=tempu->next; - templu=tempu->undef_hash; - while (templu) { - if (templu->hash->type & HTF_UNRESOLVED) { - tempex=templu->hash; - if (tempex->type & HTT_EXPORT_SYS_SYM && - tempex->type & HTF_UNRESOLVED && - !(tempex->type & HTF_IMPORT) && - (tempf=HashFind(tempex->str,lx->htc.hash_table_lst,HTT_FUN)) && - !Bt(&tempf->flags,Cf_EXTERN)) { - tempex->val=tempf->executable_addr; - tempex->type&=~HTF_UNRESOLVED; - label=templu->hash->str; - } else { - if (!(tempex->type & HTF_IMPORT)) { - if (lx->htc.local_var_lst) { - tempex->type|=HTF_GOTO_LABEL; - tempex->use_cnt++; - } else { - PrintErr("undefined sym at line:%04d %s\n", - tempu->line_num,tempex->str); - LexExcept(lx); - } - } else if (undefined) { - PrintErr("Two imports in same expression not allowed at line:%04d %s\n", - tempu->line_num,tempex->str); - LexExcept(lx); - } - undefined=TRUE; - } - } else - label=templu->hash->str; - templu=templu->next; - } - AsmResolve(lx,tempu,label,undefined); - Free(tempu->ex); - LinkedLstDel(tempu->undef_hash); - Free(tempu); - tempu=tempu1; - } - - for (i=0;i<=lx->htc.glbl_hash_table->mask;i++) { - tempex=lx->htc.glbl_hash_table->body[i]; - while (tempex) { - if (tempex->type & (HTF_IMPORT|HTF_GOTO_LABEL)) { - if (tempex->use_cnt && (tempe=tempex->ie_lst)) { - if (tempex->type&HTF_GOTO_LABEL) - tempe->flags|=EIF_GOTO_LABEL; - if (tempex->import_name) - tempe->str=StrNew(tempex->import_name); - else - tempe->str=StrNew(tempex->str); - do { - tempe1=tempe->next; - QueIns(tempe,tempx->last_ie); - } while (tempe=tempe1); - tempex->ie_lst=NULL; - } - } else if (tempex->type & (HTF_EXPORT|HTF_RESOLVE)) { - if (tempex->type & HTF_UNRESOLVED) { - PrintErr("undefined sym at %s\n",tempex->str); - LexExcept(lx); - } - if (tempex->type & HTF_RESOLVE) { - tempf=tempex; - tempeu=tempf->ext_lst; - while (tempeu) { - tempeu8=tempeu->next; - j=tempf->executable_addr-(tempeu->ip+4); - AsmStoreCodeU8At(lx,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); - Free(tempeu); - tempeu=tempeu8; - } - } - if (tempex->type & HTF_EXPORT) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_REL32_EXPORT; - if (tempex->type & HTT_FUN) - tempe->ip=tempf->executable_addr; - else if (tempex->type & HTT_GLBL_VAR) - tempe->ip=tempex(CHashGlblVar *)->data_addr_ip; - else - tempe->ip=tempex->val; - tempe->exe=lx->exe; - if (tempex->type & HTF_IMM) - tempe->type++; - tempe->str=StrNew(tempex->str); - tempe->src_link=StrNew(tempex->src_link); - QueIns(tempe,tempx->last_ie); - } - } - tempex=tempex->next; - } - } -} - -Bool PrsAsmImm(CLex *lx,CAsmArg *arg) +Bool PrsAsmImm(CCmpCtrl *cc,CAsmArg *arg) { if (arg->imm_or_off_present) - LexExcept(lx,"already one immediate at "); + LexExcept(cc,"already one immediate at "); arg->imm_or_off_present=TRUE; - arg->num.undef_local=NULL; - arg->num.undef_glbl=NULL; - lx->undef_hash_entry=NULL; - lx->abs_cnts=0; - lx->flags&=~(LF_UNRESOLVED+LF_LOCAL); - if (!IsLexExpression2Bin(lx,&arg->num.ex)) - LexSkipEol(lx); + arg->num.local_asm_undef_hash=NULL; + arg->num.glbl_asm_undef_hash=NULL; + cc->asm_undef_hash=NULL; + cc->abs_cnts=0; + cc->flags&=~(CCF_UNRESOLVED+CCF_LOCAL); + if (!IsLexExpression2Bin(cc,&arg->num.machine_code)) + LexSkipEol(cc); else { - if (lx->abs_cnts.externs) - LexExcept(lx,"Extern Not Allowed at "); - if (lx->flags & LF_UNRESOLVED) { - if (lx->flags & LF_LOCAL) { - arg->num.undef_local=lx->undef_hash_entry; - lx->undef_hash_entry=NULL; + if (cc->abs_cnts.externs) + LexExcept(cc,"Extern Not Allowed at "); + if (cc->flags & CCF_UNRESOLVED) { + if (cc->flags & CCF_LOCAL) { + arg->num.local_asm_undef_hash=cc->asm_undef_hash; + cc->asm_undef_hash=NULL; } else { - arg->num.undef_glbl=lx->undef_hash_entry; - lx->undef_hash_entry=NULL; + arg->num.glbl_asm_undef_hash=cc->asm_undef_hash; + cc->asm_undef_hash=NULL; } } else { - arg->num.i=Call(arg->num.ex); - arg->num.undef_glbl=lx->undef_hash_entry; - lx->undef_hash_entry=NULL; - Free(arg->num.ex); - arg->num.ex=NULL; + arg->num.i=Call(arg->num.machine_code); + arg->num.glbl_asm_undef_hash=cc->asm_undef_hash; + cc->asm_undef_hash=NULL; + Free(arg->num.machine_code); + arg->num.machine_code=NULL; } } return TRUE; } -U0 PrsAsmArg(CLex *lx,CAsmArg *arg,Bool rel) +U0 PrsAsmArg(CCmpCtrl *cc,CAsmArg *arg,Bool rel) { CHashGeneric *temph,*temph1; CHashReg *tempr; @@ -438,8 +43,8 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg,Bool rel) arg->fstk=REG_NONE; arg->scale=1; while (TRUE) { - if (lx->token==TK_IDENT) { - if (temph=lx->hash_entry) { + if (cc->token==TK_IDENT) { + if (temph=cc->hash_entry) { if (temph->type&HTG_TYPE_MASK==HTT_REG) { tempr=temph; switch (tempr->reg_type) { @@ -458,26 +63,26 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg,Bool rel) break; sub_switch_end: arg->reg1=tempr->reg_num; - Lex(lx); + Lex(cc); return; case REGT_SEG: arg->seg=tempr->reg_num; - if (Lex(lx)!=':') { + if (Lex(cc)!=':') { arg->just_seg=TRUE; return; } else - Lex(lx); //skip ":" + Lex(cc); //skip ":" break; case REGT_FSTK: arg->size=8; arg->fstk=tempr->reg_num; - Lex(lx); + Lex(cc); return; } } else { if ((temph->type&HTG_TYPE_MASK==HTT_CLASS|| - temph->type&HTG_TYPE_MASK==HTT_INTERNAL_TYPE) && - (temph1=HashFind(lx->cur_str,cmp.asm_hash,HTT_ASM_KEYWORD))) + temph->type&HTG_TYPE_MASK==HTT_INTERNAL_TYPE) && + (temph1=HashFind(cc->cur_str,cmp.asm_hash,HTT_ASM_KEYWORD))) temph=temph1; if (temph->type&HTG_TYPE_MASK==HTT_ASM_KEYWORD) { switch (temph->user_data0) { @@ -498,31 +103,31 @@ U0 PrsAsmArg(CLex *lx,CAsmArg *arg,Bool rel) arg->size=8; break; default: - LexExcept(lx,"syntax error at "); + LexExcept(cc,"syntax error at "); } - Lex(lx); //skip keyword + Lex(cc); //skip keyword } else goto pa_asm_direct_imm; } } else { pa_asm_direct_imm: - PrsAsmImm(lx,arg); - arg->num.abs_cnts=lx->abs_cnts; + PrsAsmImm(cc,arg); + arg->num.abs_cnts=cc->abs_cnts; if (arg->size<=1 && !rel && arg->num.abs_cnts&1) { - if (lx->a->seg_size==16) + if (cc->aotc->seg_size==16) arg->size=2; else arg->size=4; } - if (lx->token!='[') + if (cc->token!='[') return; } - } else if (lx->token=='[') { + } else if (cc->token=='[') { arg->indirect=TRUE; - Lex(lx); // skip [ - while (lx->token && lx->token!=']') { - if (lx->token==TK_IDENT) { - if (temph=lx->hash_entry) { + Lex(cc); // skip [ + while (cc->token && cc->token!=']') { + if (cc->token==TK_IDENT) { + if (temph=cc->hash_entry) { if (temph->type&HTG_TYPE_MASK==HTT_REG && REGT_R16<=temph(CHashReg *)->reg_type<=REGT_R64) { tempr=temph; @@ -534,239 +139,245 @@ pa_asm_direct_imm: arg->reg1=tempr->reg_num; } else arg->reg2=tempr->reg_num; - Lex(lx); + Lex(cc); } else goto pa_asm_indirect_imm; } else goto pa_asm_indirect_imm; - } else if (lx->token=='*') { - Lex(lx); - if (lx->token!=TK_INTEGER) - LexExcept(lx,"expecting scale factor at "); - arg->scale=lx->cur_i64; - Lex(lx); //skip scale + } else if (cc->token=='*') { + Lex(cc); + if (cc->token!=TK_INTEGER) + LexExcept(cc,"expecting scale factor at "); + arg->scale=cc->cur_i64; + Lex(cc); //skip scale if (arg->reg2!=REG_NONE) SwapI64(&arg->reg1,&arg->reg2); - } else if (lx->token=='+') { - Lex(lx); //skip '+' + } else if (cc->token=='+') { + Lex(cc); //skip '+' } else { pa_asm_indirect_imm: - PrsAsmImm(lx,arg); - arg->num.abs_cnts=lx->abs_cnts; + PrsAsmImm(cc,arg); + arg->num.abs_cnts=cc->abs_cnts; } } - if (lx->token!=']') - LexExcept(lx,"missing ']' at "); - Lex(lx); //skip ] + if (cc->token!=']') + LexExcept(cc,"missing ']' at "); + Lex(cc); //skip ] return; } else goto pa_asm_direct_imm; } } -U0 AsmMakeArgMask(CLex *lx,CAsmArg *arg,I64 *_mask) +I64 AsmMakeArgMask(CCmpCtrl *cc,CAsmArg *arg) { - CAOTCtrl *a=lx->a; + CAOTCtrl *aotc=cc->aotc; + I64 result; if (arg->just_seg) { switch (arg->seg) { - case 0: *_mask=1<fstk!=REG_NONE) { if (arg->fstk) - *_mask=1<size) { - case 0: *_mask=0x3FF0FFFFFE; break; - case 1: *_mask=0x1110111112; break; - case 2: *_mask=0x2220222224; break; - case 4: *_mask=0x0440444448; break; - case 8: *_mask=0x0880888880; break; - } - if (a->seg_size==64) - *_mask&=0xFF0FFFFFFF; + result=cmp.size_arg_mask[arg->size]; + if (aotc->seg_size==64) + result&=0xFF0FFFFFFF; if (arg->reg1!=REG_NONE && arg->imm_or_off_present && !arg->num.i && - !arg->num.undef_glbl && !arg->num.undef_local) - arg->imm_or_off_present=FALSE; //Zero displacement + !arg->num.glbl_asm_undef_hash && !arg->num.local_asm_undef_hash) + arg->imm_or_off_present=FALSE; //Zero displacement if (arg->reg2!=REG_NONE || arg->scale!=1) { - *_mask&=0x0000FF0000; - return; + result&=0x0000FF0000; + goto mm_done; } if (arg->indirect) { if (arg->imm_or_off_present) - *_mask&=0x00FFFF0000; + result&=0x00FFFF0000; else - *_mask&=0x000FFF0000; + result&=0x000FFF0000; } else { if (arg->imm_or_off_present) - *_mask&=0x000F000FFE; + result&=0x000F000FFE; else - *_mask&=0x3F0FFFF000; + result&=0x3F0FFFF000; } if (arg->seg!=REG_NONE) - *_mask&=0x00FFFF0000; + result&=0x00FFFF0000; if (arg->reg1==REG_NONE) { if (arg->indirect) - *_mask&=0x00FFFF0000; + result&=0x00FFFF0000; else if (arg->num.i<0) { if (arg->num.i>=MIN_I8) - *_mask&=0x8FE; + result&=0x8FE; else if (arg->num.i>=MIN_I16) - *_mask&=0x8EE; + result&=0x8EE; else if (arg->num.i>=MIN_I32) - *_mask&=0x8CE; + result&=0x8CE; else - *_mask&=0x88E; + result&=0x88E; } else { if (arg->num.i<=MAX_I8) - *_mask&=0xFFE; + result&=0xFFE; else if (arg->num.i<=MAX_U8) - *_mask&=0xFEE; + result&=0xFEE; else if (arg->num.i<=MAX_I16) - *_mask&=0xEEE; + result&=0xEEE; else if (arg->num.i<=MAX_U16) - *_mask&=0xECE; + result&=0xECE; else if (arg->num.i<=MAX_I32) - *_mask&=0xCCE; + result&=0xCCE; else if (arg->num.i<=MAX_U32) - *_mask&=0xC8E; + result&=0xC8E; else - *_mask&=0x88E; + result&=0x88E; } } else { - *_mask&= 0x3F00FFF000; + result&= 0x3F00FFF000; if (!arg->indirect) //M8-M64 - *_mask&=0xFFFF0FFFFF; + result&=0xFFFF0FFFFF; } switch (arg->reg1) { - case REG_RAX: *_mask&=~0x3000000000; break; - case REG_RCX: *_mask&=~0x2F00000000; break; - case REG_RDX: *_mask&=~0x1F00000000; break; - default: *_mask&=~0x3F00000000; + case REG_RAX: result&=~0x3000000000; break; + case REG_RCX: result&=~0x2F00000000; break; + case REG_RDX: result&=~0x1F00000000; break; + default: result&=~0x3F00000000; } +mm_done: + return result; } -Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) +Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) { - CAOTCtrl *a=lx->a; + CAOTCtrl *aotc=cc->aotc; I64 i; - CExeAbsAddr *tempa; + CAOTAbsAddr *tempa; if (!num2->imm_flag) num2->num.i-=num2->rel; for (i=0;iU8_cnt==1) { - if (num2->num.undef_local||num2->num.undef_glbl) - AsmUnresolvedAdd(lx,num2->num.ex,EIT_REL_I8+num2->imm_flag,a->ip,num2->rel, - num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail); + if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) + AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I8+num2->imm_flag, + aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, + U8_avail); else if (!num2->imm_flag && !(MIN_I8<=num2->num.i<=MAX_I8)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); if (num2->imm_flag) { if (num2->num.abs_cnts.abs_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_ADD_U8; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_ADD_U8; } } else { if (num2->num.abs_cnts.c_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_SUB_U8; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_SUB_U8; } } - AsmStoreCodeU8(lx,num2->num.i); + AOTStoreCodeU8(cc,num2->num.i); } else { if (num2->U8_cnt==2) { - if (num2->num.undef_local||num2->num.undef_glbl) - AsmUnresolvedAdd(lx,num2->num.ex,EIT_REL_I16+num2->imm_flag,a->ip,num2->rel, - num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail); + if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) + AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I16+num2->imm_flag, + aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, + U8_avail); else if (!num2->imm_flag && !(MIN_I16<=num2->num.i<=MAX_I16)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); if (num2->imm_flag) { if (num2->num.abs_cnts.abs_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_ADD_U16; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_ADD_U16; } } else { if (num2->num.abs_cnts.c_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_SUB_U16; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_SUB_U16; } } - AsmStoreCodeU8(lx,num2->num.i.u8[0]); - AsmStoreCodeU8(lx,num2->num.i.u8[1]); + AOTStoreCodeU8(cc,num2->num.i.u8[0]); + AOTStoreCodeU8(cc,num2->num.i.u8[1]); } else if (num2->U8_cnt==4) { - if (num2->num.undef_local||num2->num.undef_glbl) - AsmUnresolvedAdd(lx,num2->num.ex,EIT_REL_I32+num2->imm_flag,a->ip,num2->rel, - num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail); + if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) + AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I32+num2->imm_flag, + aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, + U8_avail); else if (!num2->imm_flag && !(MIN_I32<=num2->num.i<=MAX_I32)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); if (num2->imm_flag) { if (num2->num.abs_cnts.abs_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_ADD_U32; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_ADD_U32; } } else { if (num2->num.abs_cnts.c_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_SUB_U32; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_SUB_U32; } } - AsmStoreCodeU32(lx,num2->num.i); + AOTStoreCodeU32(cc,num2->num.i); } else if (num2->U8_cnt==8) { - if (num2->num.undef_local||num2->num.undef_glbl) - AsmUnresolvedAdd(lx,num2->num.ex,EIT_REL_I64+num2->imm_flag,a->ip,num2->rel, - num2->num.undef_local,num2->num.undef_glbl,lx->cur_lfn->line_num,U8_avail); + if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) + AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I64+num2->imm_flag, + aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, + U8_avail); if (num2->imm_flag) { if (num2->num.abs_cnts.abs_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_ADD_U64; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_ADD_U64; } } else { if (num2->num.abs_cnts.c_addres&1) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - a->abss=tempa; - tempa->ip=a->ip; - tempa->type=EAT_SUB_U64; + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + aotc->abss=tempa; + tempa->ip=aotc->ip; + tempa->type=AAT_SUB_U64; } } - AsmStoreCodeU64(lx,num2->num.i); + AOTStoreCodeU64(cc,num2->num.i); } - if (U8_avail && !num2->num.undef_local && !num2->num.undef_glbl && + if (U8_avail && !num2->num.local_asm_undef_hash && + !num2->num.glbl_asm_undef_hash && !num2->imm_flag && -124<=num2->num.i<=123) { - LexWarn(lx,"could use I8 displacement at "); + LexWarn(cc,"could use I8 displacement at "); return FALSE; } } @@ -776,9 +387,9 @@ Bool AsmStoreNum(CLex *lx,CAsmNum2 *num2,I64 cnt,Bool U8_avail) U8 asm_seg_prefixes[6]={0x26,0x2E,0x36,0x3E,0x64,0x65}; -Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) +Bool PrsAsmInstruction(CCmpCtrl *cc,CHashOpcode *tempo,I64 argcnt) { - CAOTCtrl *a=lx->a; + CAOTCtrl *aotc=cc->aotc; I64 i,j,a1,a2,om,seg,arg1mask,arg2mask; CAsmArg *tempa1,*tempa2; Bool ModrM_complete,U8_avail=FALSE,found_second_possible=FALSE; @@ -788,26 +399,27 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) best.U8_cnt=255; if (argcnt>0) - AsmMakeArgMask(lx,&a->arg1,&arg1mask); + arg1mask=AsmMakeArgMask(cc,&aotc->arg1); else arg1mask=1; if (argcnt>1) - AsmMakeArgMask(lx,&a->arg2,&arg2mask); + arg2mask=AsmMakeArgMask(cc,&aotc->arg2); else arg2mask=1; for (i=0;iinstruction_entry_cnt;i++) { tempi=&tempo->ins[i]; if (tempi->arg1==ARGT_REL8 || tempi->arg2==ARGT_REL8) U8_avail=TRUE; - if (Bt(&arg1mask,tempi->arg1) && Bt(&arg2mask,tempi->arg2)) { + if (Bt(&arg1mask,tempi->arg1) && Bt(&arg2mask,tempi->arg2) && + (!(tempi->flags&IEF_NOT_IN_64_BIT) || aotc->seg_size!=64)) { MemSet(&cur,0,sizeof(CAsmIns)); cur.tempi=tempi; ModrM_complete=FALSE; cur.is_dft=ToBool(tempi->flags & IEF_DFT); - if (a->seg_size==64) { + if (aotc->seg_size==64) { if (tempi->flags & IEF_48_REX) cur.REX=0x48; - else if (!(tempi->flags & IEF_NO_REX)) + else cur.REX=0x40; } cur.disp.imm_flag=TRUE; @@ -815,8 +427,8 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) om=tempi->opcode_modifier; a1=tempi->arg1; a2=tempi->arg2; - tempa1=&a->arg1; - tempa2=&a->arg2; + tempa1=&aotc->arg1; + tempa2=&aotc->arg2; cur.last_opcode_U8=tempi->opcode[tempi->opcode_cnt-1]; if (tempi->slash_val<8) { @@ -824,8 +436,8 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) cur.has_ModrM=TRUE; } - if (a->seg_size==16 && tempi->flags & IEF_OP_SIZE32 || - a->seg_size!=16 && tempi->flags & IEF_OP_SIZE16) + if (aotc->seg_size==16 && tempi->flags & IEF_OP_SIZE32 || + aotc->seg_size!=16 && tempi->flags & IEF_OP_SIZE16) cur.has_operand_prefix=TRUE; if (om==OM_IB) cur.imm.U8_cnt=1; @@ -846,9 +458,10 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) if (argcnt==1) { if (best.U8_cnt!=255 && !found_second_possible && !best.is_dft) { found_second_possible=TRUE; - if (!a->arg1.size) + if (!aotc->arg1.size) PrintWarn("no size specified at %s,%04d\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num-1); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num-1); } if (tempi->flags & IEF_PLUS_OPCODE) { if (tempi->slash_val==SV_R_REG) { @@ -865,15 +478,16 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) if (a1==ARGT_R64 || a1==ARGT_RM64 || a1==ARGT_M64) cur.REX|=8; if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_M8<=a1<=ARGT_M64) { - if (a->seg_size==16) + if (aotc->seg_size==16) cur.has_addr_prefix=TRUE; cur.has_ModrM=TRUE; - if (tempa1->imm_or_off_present && tempa1->indirect && tempa1->reg1==REG_NONE) { + if (tempa1->imm_or_off_present && tempa1->indirect && + tempa1->reg1==REG_NONE) { cur.ModrM=cur.ModrM+5; MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); cur.disp.U8_cnt=4; - if (a->seg_size==64) + if (aotc->seg_size==64) cur.disp.imm_flag=FALSE; } else { if (tempa1->reg2==REG_NONE && tempa1->scale==1) { @@ -912,7 +526,8 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) cur.REX|=1; if (tempa1->reg2>=20) //RBPu8,RSPu8,RSIu8,RDIu8? cur.has_REX=TRUE; - if (tempa1->reg2&7==REG_RBP && !tempa1->imm_or_off_present && tempa1->indirect) { + if (tempa1->reg2&7==REG_RBP && + !tempa1->imm_or_off_present && tempa1->indirect) { cur.ModrM|=0x40; cur.disp.U8_cnt=1; ModrM_complete=TRUE; @@ -922,10 +537,11 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) if (!ModrM_complete) { if (tempa1->imm_or_off_present) { MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); - if (!cur.disp.num.ex && MIN_I8<=cur.disp.num.i<=MAX_I8) { + if (!cur.disp.num.machine_code && + MIN_I8<=cur.disp.num.i<=MAX_I8) { cur.ModrM|=0x40; cur.disp.U8_cnt=1; - } else if (a->seg_size==16) { + } else if (aotc->seg_size==16) { cur.ModrM|=0x80; cur.disp.U8_cnt=2; } else { @@ -944,8 +560,8 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) } } } else if (ARGT_REL8<=a1<=ARGT_REL32 || - ARGT_IMM8<=a1<=ARGT_IMM64 || - ARGT_UIMM8<=a1<=ARGT_UIMM64) { + ARGT_IMM8<=a1<=ARGT_IMM64 || + ARGT_UIMM8<=a1<=ARGT_UIMM64) { if (a1==ARGT_IMM64 || a2==ARGT_UIMM64) cur.REX|=8; MemCpy(&cur.imm.num,&tempa1->num,sizeof(CAsmNum)); @@ -953,9 +569,10 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) } else if (argcnt==2) { if (best.U8_cnt!=255 && !found_second_possible && !best.is_dft) { found_second_possible=TRUE; - if (!a->arg1.size && !a->arg2.size) + if (!aotc->arg1.size && !aotc->arg2.size) PrintWarn("no size specified at %s,%04d\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num-1); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num-1); } if (tempi->flags & IEF_PLUS_OPCODE) { if (tempi->slash_val==SV_R_REG) { @@ -980,17 +597,17 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) } } if (a1==ARGT_RM64 || a2==ARGT_RM64 || - a1==ARGT_M64 || a2==ARGT_M64 || - a1==ARGT_R64 || a2==ARGT_R64) + a1==ARGT_M64 || a2==ARGT_M64 || + a1==ARGT_R64 || a2==ARGT_R64) cur.REX|=8; if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_RM8<=a2<=ARGT_RM64 || - ARGT_M8 <=a1<=ARGT_M64 || ARGT_M8 <=a2<=ARGT_M64) { - if (a->seg_size==16) + ARGT_M8 <=a1<=ARGT_M64 || ARGT_M8 <=a2<=ARGT_M64) { + if (aotc->seg_size==16) cur.has_addr_prefix=TRUE; cur.has_ModrM=TRUE; if (ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { - tempa1=&a->arg2; - tempa2=&a->arg1; + tempa1=&aotc->arg2; + tempa2=&aotc->arg1; } if (tempi->slash_val==SV_R_REG) { if (tempa2->just_seg) @@ -1030,46 +647,49 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) cur.SIB=0x80; else if (tempa1->scale==8) cur.SIB=0xC0; - if (tempa1->reg2==REG_NONE) { + if (tempa1->reg2==REG_NONE) { + ModrM_complete=TRUE; + cur.SIB|=(tempa1->reg1&7)<<3+5; + if (tempa1->reg1&15>7) + cur.REX|=2; + if (tempa1->reg1>=20) //RBPu8,RSPu8,RSIu8,RDIu8? + cur.has_REX=TRUE; + MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); + cur.disp.U8_cnt=4; + } else { + cur.SIB|=(tempa1->reg1&7)<<3+tempa1->reg2&7; + if (tempa1->reg1&15>7) + cur.REX|=2; + if (tempa1->reg1>=20) //RBPu8,RSPu8,RSIu8,RDIu8? + cur.has_REX=TRUE; + if (tempa1->reg2&15>7) + cur.REX|=1; + if (tempa1->reg2>=20) //RBPu8,RSPu8,RSIu8,RDIu8? + cur.has_REX=TRUE; + if (tempa1->reg2&7==REG_RBP && + !tempa1->imm_or_off_present && tempa1->indirect) { + cur.ModrM|=0x40; + cur.disp.U8_cnt=1; ModrM_complete=TRUE; - cur.SIB|=(tempa1->reg1&7)<<3+5; - if (tempa1->reg1&15>7) - cur.REX|=2; - if (tempa1->reg1>=20) //RBPu8,RSPu8,RSIu8,RDIu8? - cur.has_REX=TRUE; - MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); - cur.disp.U8_cnt=4; - } else { - cur.SIB|=(tempa1->reg1&7)<<3+tempa1->reg2&7; - if (tempa1->reg1&15>7) - cur.REX|=2; - if (tempa1->reg1>=20) //RBPu8,RSPu8,RSIu8,RDIu8? - cur.has_REX=TRUE; - if (tempa1->reg2&15>7) - cur.REX|=1; - if (tempa1->reg2>=20) //RBPu8,RSPu8,RSIu8,RDIu8? - cur.has_REX=TRUE; - if (tempa1->reg2&7==REG_RBP && !tempa1->imm_or_off_present && tempa1->indirect) { - cur.ModrM|=0x40; - cur.disp.U8_cnt=1; - ModrM_complete=TRUE; - } } + } } if (!ModrM_complete) { - if (tempa1->imm_or_off_present && tempa1->indirect && tempa1->reg1==REG_NONE) { + if (tempa1->imm_or_off_present && + tempa1->indirect && tempa1->reg1==REG_NONE) { cur.ModrM=cur.ModrM&0xF8+5; MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); cur.disp.U8_cnt=4; - if (a->seg_size==64) + if (aotc->seg_size==64) cur.disp.imm_flag=FALSE; } else { if (tempa1->imm_or_off_present) { MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); - if (!cur.disp.num.ex && MIN_I8<=cur.disp.num.i<=MAX_I8) { + if (!cur.disp.num.machine_code && + MIN_I8<=cur.disp.num.i<=MAX_I8) { cur.ModrM|=0x40; cur.disp.U8_cnt=1; - } else if (a->seg_size==16) { + } else if (aotc->seg_size==16) { cur.ModrM|=0x80; cur.disp.U8_cnt=2; } else { @@ -1089,20 +709,20 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) } } else if (ARGT_MOFFS8<=a1<=ARGT_MOFFS64) { MemCpy(&cur.disp.num,&tempa1->num,sizeof(CAsmNum)); - if (a->seg_size==16) + if (aotc->seg_size==16) cur.disp.U8_cnt=2; else cur.disp.U8_cnt=4; cur.has_addr_prefix=FALSE; } else if (ARGT_MOFFS8<=a2<=ARGT_MOFFS64) { MemCpy(&cur.disp.num,&tempa2->num,sizeof(CAsmNum)); - if (a->seg_size==16) + if (aotc->seg_size==16) cur.disp.U8_cnt=2; else cur.disp.U8_cnt=4; cur.has_addr_prefix=FALSE; } else if (ARGT_IMM8<=a1<=ARGT_IMM64 || - ARGT_UIMM8<=a1<=ARGT_UIMM64) { + ARGT_UIMM8<=a1<=ARGT_UIMM64) { MemCpy(&cur.imm.num,&tempa1->num,sizeof(CAsmNum)); if (a1==ARGT_IMM8 || a1==ARGT_UIMM8) cur.imm.U8_cnt=1; else if (a1==ARGT_IMM16 || a1==ARGT_UIMM16) cur.imm.U8_cnt=2; @@ -1113,7 +733,7 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) } } if (ARGT_IMM8<=a2<=ARGT_IMM64 || - ARGT_UIMM8<=a2<=ARGT_UIMM64) { + ARGT_UIMM8<=a2<=ARGT_UIMM64) { MemCpy(&cur.imm.num,&tempa2->num,sizeof(CAsmNum)); if (a2==ARGT_IMM8 || a2==ARGT_UIMM8) cur.imm.U8_cnt=1; else if (a2==ARGT_IMM16 || a2==ARGT_UIMM16) cur.imm.U8_cnt=2; @@ -1130,63 +750,65 @@ Bool PrsAsmInstruction(CLex *lx,CHashOpcode *tempo,I64 argcnt) cur.U8_cnt=tempi->opcode_cnt+cur.disp.U8_cnt+cur.imm.U8_cnt; if (cur.has_ModrM) cur.U8_cnt++; if (cur.has_SIB) cur.U8_cnt++; - if (a->seg_size==64 && cur.REX&0x40==0x40 && - (cur.REX!=0x40 || tempi->flags&IEF_40_REX || cur.has_REX) && - (cur.REX&7 || !(tempi->flags&IEF_REX_ONLY_R8_R15 || - tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && cur.ModrM&0xC0==0xC0))) + if (aotc->seg_size==64 && cur.REX&0x40==0x40 && + (cur.REX!=0x40 || cur.has_REX) && + (cur.REX&7 || !(tempi->flags&IEF_REX_ONLY_R8_R15 || + tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && + cur.ModrM&0xC0==0xC0))) cur.U8_cnt++; if (cur.U8_cntflags & IEF_DONT_SWITCH_MODES && - (cur.has_addr_prefix || cur.has_operand_prefix))) + !(tempi->flags & IEF_DONT_SWITCH_MODES && + (cur.has_addr_prefix || cur.has_operand_prefix))) MemCpy(&best,&cur,sizeof(CAsmIns)); } } if (best.U8_cnt<255) { tempi=best.tempi; seg=REG_NONE; - if (argcnt>1 && a->arg2.seg!=REG_NONE && !a->arg2.just_seg) - seg=a->arg2.seg; - else if (argcnt>0 && a->arg1.seg!=REG_NONE && !a->arg1.just_seg) - seg=a->arg1.seg; + if (argcnt>1 && aotc->arg2.seg!=REG_NONE && !aotc->arg2.just_seg) + seg=aotc->arg2.seg; + else if (argcnt>0 && aotc->arg1.seg!=REG_NONE && !aotc->arg1.just_seg) + seg=aotc->arg1.seg; if (seg!=REG_NONE) - AsmStoreCodeU8(lx,asm_seg_prefixes[seg]); + AOTStoreCodeU8(cc,asm_seg_prefixes[seg]); if (best.has_operand_prefix) - AsmStoreCodeU8(lx,OC_OP_SIZE_PREFIX); //Operand size override - if (best.has_addr_prefix || a->seg_size==16 && cur.has_SIB) - AsmStoreCodeU8(lx,OC_ADDR_SIZE_PREFIX); //Operand size override - if (a->seg_size==64 && best.REX&0x40==0x40 && - (best.REX!=0x40 || tempi->flags&IEF_40_REX || best.has_REX) && - (best.REX&7||!(tempi->flags&IEF_REX_ONLY_R8_R15 || - tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && best.ModrM&0xC0==0xC0))) - AsmStoreCodeU8(lx,best.REX); + AOTStoreCodeU8(cc,OC_OP_SIZE_PREFIX); //Operand size override + if (best.has_addr_prefix || aotc->seg_size==16 && cur.has_SIB) + AOTStoreCodeU8(cc,OC_ADDR_SIZE_PREFIX); //Operand size override + if (aotc->seg_size==64 && best.REX&0x40==0x40 && + (best.REX!=0x40 || best.has_REX) && + (best.REX&7||!(tempi->flags&IEF_REX_ONLY_R8_R15 || + tempi->flags&IEF_REX_XOR_LIKE && tempa1->reg1==tempa2->reg1 && + best.ModrM&0xC0==0xC0))) + AOTStoreCodeU8(cc,best.REX); for (j=0;jopcode_cnt-1;j++) - AsmStoreCodeU8(lx,tempi->opcode[j]); - AsmStoreCodeU8(lx,best.last_opcode_U8); + AOTStoreCodeU8(cc,tempi->opcode[j]); + AOTStoreCodeU8(cc,best.last_opcode_U8); if (best.has_ModrM) - AsmStoreCodeU8(lx,best.ModrM); + AOTStoreCodeU8(cc,best.ModrM); if (best.has_SIB) - AsmStoreCodeU8(lx,best.SIB); + AOTStoreCodeU8(cc,best.SIB); if (best.disp.U8_cnt) { - best.disp.rel=a->ip+best.disp.U8_cnt+best.imm.U8_cnt; - if (!AsmStoreNum(lx,&best.disp,1,U8_avail)) + best.disp.rel=aotc->ip+best.disp.U8_cnt+best.imm.U8_cnt; + if (!AsmStoreNum(cc,&best.disp,1,U8_avail)) return FALSE; } if (best.imm.U8_cnt) { - best.imm.rel=a->ip+best.imm.U8_cnt; - if (!AsmStoreNum(lx,&best.imm,1,U8_avail)) + best.imm.rel=aotc->ip+best.imm.U8_cnt; + if (!AsmStoreNum(cc,&best.imm,1,U8_avail)) return FALSE; } if (tempi->flags&IEF_ENDING_ZERO) //ENTER instruction - AsmStoreCodeU8(lx,0); + AOTStoreCodeU8(cc,0); return TRUE; } - LexExcept(lx,"invalid instruction at "); + LexExcept(cc,"invalid instruction at "); } -U0 PrsAsmDefine(CLex *lx,I64 U8_cnt) +U0 PrsAsmDefine(CCmpCtrl *cc,I64 U8_cnt) { Bool is_dup; I64 i,dup_val; @@ -1194,295 +816,295 @@ U0 PrsAsmDefine(CLex *lx,I64 U8_cnt) CAsmNum2 num2; num2.U8_cnt=U8_cnt; - while (lx->token && lx->token!=';') { - num2.num.undef_local=NULL; - num2.num.undef_glbl=NULL; - if (lx->token==TK_STR) { - ptr=lx->cur_str; - i=lx->cur_str_len-1; + while (cc->token && cc->token!=';') { + num2.num.local_asm_undef_hash=NULL; + num2.num.glbl_asm_undef_hash=NULL; + if (cc->token==TK_STR) { + ptr=cc->cur_str; + i=cc->cur_str_len-1; while (i--) - AsmStoreCodeU8(lx,*ptr++); - Lex(lx); //Skip Str + AOTStoreCodeU8(cc,*ptr++); + Lex(cc); //Skip Str } else { is_dup=FALSE; - lx->abs_cnts=0; - lx->undef_hash_entry=NULL; - lx->flags&=~(LF_UNRESOLVED+LF_LOCAL); - if (!IsLexExpression2Bin(lx,&num2.num.ex)) - LexSkipEol(lx); + cc->abs_cnts=0; + cc->asm_undef_hash=NULL; + cc->flags&=~(CCF_UNRESOLVED+CCF_LOCAL); + if (!IsLexExpression2Bin(cc,&num2.num.machine_code)) + LexSkipEol(cc); else { - if (lx->abs_cnts.externs) - LexExcept(lx,"Extern Not Allowed at "); - if (lx->flags & LF_UNRESOLVED) { - if (lx->flags & LF_LOCAL) { - num2.num.undef_local=lx->undef_hash_entry; - lx->undef_hash_entry=NULL; + if (cc->abs_cnts.externs) + LexExcept(cc,"Extern Not Allowed at "); + if (cc->flags & CCF_UNRESOLVED) { + if (cc->flags & CCF_LOCAL) { + num2.num.local_asm_undef_hash=cc->asm_undef_hash; + cc->asm_undef_hash=NULL; } else { - num2.num.undef_glbl=lx->undef_hash_entry; - lx->undef_hash_entry=NULL; + num2.num.glbl_asm_undef_hash=cc->asm_undef_hash; + cc->asm_undef_hash=NULL; } } else { - i=Call(num2.num.ex); - Free(num2.num.ex); + i=Call(num2.num.machine_code); + Free(num2.num.machine_code); } } - if (lx->token==TK_IDENT && lx->hash_entry) { - if (lx->hash_entry->type & HTT_ASM_KEYWORD && lx->hash_entry->user_data0==AKW_DUP) { + if (cc->token==TK_IDENT && cc->hash_entry) { + if (cc->hash_entry->type & HTT_ASM_KEYWORD && + cc->hash_entry->user_data0==AKW_DUP) { is_dup=TRUE; - if (Lex(lx)!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); //skip ( - dup_val=AsmLexExpression(lx); - if (lx->token!=')') - LexExcept(lx,"expecting ')' at "); - Lex(lx); //SKIP ) + if (Lex(cc)!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); //skip ( + dup_val=AsmLexExpression(cc); + if (cc->token!=')') + LexExcept(cc,"expecting ')' at "); + Lex(cc); //SKIP ) } } num2.rel=0; num2.imm_flag=TRUE; - num2.num.abs_cnts=lx->abs_cnts; + num2.num.abs_cnts=cc->abs_cnts; if (is_dup) { - if (num2.num.undef_local || num2.num.undef_glbl) - LexExcept(lx,"undefined DUP cnt at "); + if (num2.num.local_asm_undef_hash || num2.num.glbl_asm_undef_hash) + LexExcept(cc,"undefined DUP cnt at "); num2.num.i=dup_val; - AsmStoreNum(lx,&num2,i,FALSE); + AsmStoreNum(cc,&num2,i,FALSE); } else { num2.num.i=i; - AsmStoreNum(lx,&num2,1,FALSE); + AsmStoreNum(cc,&num2,1,FALSE); } } - if (lx->token==',') - Lex(lx); + if (cc->token==',') + Lex(cc); } - if (lx->token!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); + if (cc->token!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); } -U0 PrsBinFile(CLex *lx) +U0 PrsBinFile(CCmpCtrl *cc) { I64 i,size; U8 *buf,*st; - if (lx->token!=TK_STR) - LexExcept(lx,"expecting string at "); - st=DftExt(lx->cur_str,"BIN"); + if (cc->token!=TK_STR) + LexExcept(cc,"expecting string at "); + st=DftExt(cc->cur_str,"BIN"); buf=FileRead(st,&size); Free(st); for (i=0;ia; + CAOTCtrl *aotc=cc->aotc; I64 i,j,k,argcnt, - old_flags=lx->flags & LF_ASM_EXPRESSIONS; + old_flags=cc->flags & CCF_ASM_EXPRESSIONS; CHashOpcode *tempo; CHashExport *tempex; U8 *next_last_label; - CLexCodeMisc *g_lb; + CCodeMisc *g_lb; - a->seg_size=64; - lx->flags|=LF_ASM_EXPRESSIONS; + aotc->seg_size=64; + cc->flags|=CCF_ASM_EXPRESSIONS; if (!(cmp_flags&CMPF_ONE_ASM_INS)) { - if (lx->token!='{') - LexExcept(lx,"expecting '{' at "); - Lex(lx); + if (cc->token!='{') + LexExcept(cc,"expecting '{' at "); + Lex(cc); } - while (lx->token && lx->token!='}') { - AsmLineLst(lx); - if (lx->token==TK_IDENT && lx->hash_entry) { - if (lx->hash_entry->type&HTT_ASM_KEYWORD) { - i=lx->hash_entry->user_data0; - Lex(lx); //skip keyword + while (cc->token && cc->token!='}') { + AsmLineLst(cc); + if (cc->token==TK_IDENT && cc->hash_entry) { + if (cc->hash_entry->type&HTT_ASM_KEYWORD) { + i=cc->hash_entry->user_data0; + Lex(cc); //skip keyword switch (i) { case AKW_IMPORT: - while (lx->token && lx->token!=';') { - if (lx->token!=TK_IDENT) - LexExcept(lx,"expecting identifier at "); + while (cc->token && cc->token!=';') { + if (cc->token!=TK_IDENT) + LexExcept(cc,"expecting identifier at "); else { tempex=NULL; tempex=CAlloc(sizeof(CHashExport)); - tempex->str=lx->cur_str; - lx->cur_str=0; + tempex->str=cc->cur_str; + cc->cur_str=0; tempex->type=HTT_EXPORT_SYS_SYM|HTF_UNRESOLVED; - HashAdd(tempex,lx->htc.glbl_hash_table); + HashAdd(tempex,cc->htc.glbl_hash_table); tempex->type|=HTF_IMPORT; - if (Lex(lx)==',') - Lex(lx); //skip ',' + if (Lex(cc)==',') + Lex(cc); //skip ',' } } - if (lx->token!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); //skip ';'; + if (cc->token!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); //skip ';'; break; case AKW_MODULE_ORG: - if (lx->htc.local_var_lst) - LexExcept(lx,"ORG not allowed in fun asm blk "); - if (a->module_org!=INVALID_PTR) - LexExcept(lx,"Just one org allowed "); - if (a->ip) - LexExcept(lx,"ORG must be at beginning "); - a->module_org=AsmLexExpression(lx); + if (cc->htc.local_var_lst) + LexExcept(cc,"ORG not allowed in fun asm blk "); + if (aotc->module_org!=INVALID_PTR) + LexExcept(cc,"Just one org allowed "); + if (aotc->ip) + LexExcept(cc,"ORG must be at beginning "); + aotc->module_org=AsmLexExpression(cc); break; case AKW_ALIGN: - if (lx->htc.local_var_lst) - LexExcept(lx,"ALIGN not allowed in fun asm blk "); - i=AsmLexExpression(lx); + if (cc->htc.local_var_lst) + LexExcept(cc,"ALIGN not allowed in fun asm blk "); + i=AsmLexExpression(cc); j=Bsf(i); if (!i || j!=Bsr(i)) - LexExcept(lx,"ALIGN must be power of two at "); - if (!(lx->flags&LF_AOT_COMPILE) && i>8) - LexExcept(lx,"In JIT mode, max ALIGN is 8 "); - if (j>a->max_align_bits) a->max_align_bits=j; - i=CeilU64(a->ip,i); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); - k=AsmLexExpression(lx); - for (j=a->ip;jflags&CCF_AOT_COMPILE) && i>8) + LexExcept(cc,"In JIT mode, max ALIGN is 8 "); + if (j>aotc->max_align_bits) aotc->max_align_bits=j; + i=CeilU64(aotc->ip,i); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); + k=AsmLexExpression(cc); + for (j=aotc->ip;jlst=TRUE; + aotc->lst=TRUE; break; case AKW_NOLIST: - a->lst=FALSE; + aotc->lst=FALSE; break; case AKW_USE16: - a->seg_size=16; + aotc->seg_size=16; break; case AKW_USE32: - a->seg_size=32; + aotc->seg_size=32; break; case AKW_USE64: - a->seg_size=64; + aotc->seg_size=64; break; default: - LexExcept(lx,"syntax error at "); + LexExcept(cc,"syntax error at "); } - } else if (lx->hash_entry->type & HTT_OPCODE) { - tempo=lx->hash_entry; - Lex(lx); //skip opcode + } else if (cc->hash_entry->type & HTT_OPCODE) { + tempo=cc->hash_entry; + Lex(cc); //skip opcode argcnt=0; if (tempo->ins[0].arg1) { argcnt++; if (ARGT_REL8<=tempo->ins[0].arg1<=ARGT_REL32) - PrsAsmArg(lx,&a->arg1,TRUE); + PrsAsmArg(cc,&aotc->arg1,TRUE); else - PrsAsmArg(lx,&a->arg1,FALSE); + PrsAsmArg(cc,&aotc->arg1,FALSE); if (tempo->ins[0].arg2) { argcnt++; - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); else { - Lex(lx); //skip ',' + Lex(cc); //skip ',' if (ARGT_REL8<=tempo->ins[0].arg2<=ARGT_REL32) - PrsAsmArg(lx,&a->arg2,TRUE); + PrsAsmArg(cc,&aotc->arg2,TRUE); else - PrsAsmArg(lx,&a->arg2,FALSE); + PrsAsmArg(cc,&aotc->arg2,FALSE); } } } - PrsAsmInstruction(lx,tempo,argcnt); - } else if (lx->hash_entry->type & HTT_EXPORT_SYS_SYM) { - if (Btr(&lx->hash_entry->type,HTf_UNRESOLVED)) { - if (lx->hash_entry->type & HTF_LOCAL) { - lx->hash_entry(CHashExport *)->val=a->ip; - if (Lex(lx)!=':') - LexExcept(lx,"expecting ':' at "); - Lex(lx); + PrsAsmInstruction(cc,tempo,argcnt); + } else if (cc->hash_entry->type & HTT_EXPORT_SYS_SYM) { + if (Btr(&cc->hash_entry->type,HTf_UNRESOLVED)) { + if (cc->hash_entry->type & HTF_LOCAL) { + cc->hash_entry(CHashExport *)->val=aotc->ip; + if (Lex(cc)!=':') + LexExcept(cc,"expecting ':' at "); + Lex(cc); } else { - if (lx->hash_entry->type & HTF_IMPORT) - LexExcept(lx,"attempt to define import at "); - lx->hash_entry(CHashExport *)->val=a->ip; - next_last_label=lx->hash_entry->str; - Lex(lx); //Skip cur_str - if (lx->token!=':' && lx->token!=TK_DBL_COLON) - LexExcept(lx,"expecting ':' at "); - if (lx->token==TK_DBL_COLON) { - lx->hash_entry->type|=HTF_EXPORT; - HashSrcFileSet(lx,lx->hash_entry); + if (cc->hash_entry->type & HTF_IMPORT) + LexExcept(cc,"attempt to define import at "); + cc->hash_entry(CHashExport *)->val=aotc->ip; + next_last_label=cc->hash_entry->str; + Lex(cc); //Skip cur_str + if (cc->token!=':' && cc->token!=TK_DBL_COLON) + LexExcept(cc,"expecting ':' at "); + if (cc->token==TK_DBL_COLON) { + cc->hash_entry->type|=HTF_EXPORT; + HashSrcFileSet(cc,cc->hash_entry); - AsmLocalsResolve(lx); - a->last_label=next_last_label; + AOTLocalsResolve(cc); + aotc->last_label=next_last_label; } - Lex(lx); + Lex(cc); } - } else if (lx->hash_entry(CHashExport *)->val==a->ip) { - Lex(lx); //Skip cur_str - if (lx->token!=':' && lx->token!=TK_DBL_COLON) - LexExcept(lx,"expecting ':' at "); - Lex(lx); + } else if (cc->hash_entry(CHashExport *)->val==aotc->ip) { + Lex(cc); //Skip cur_str + if (cc->token!=':' && cc->token!=TK_DBL_COLON) + LexExcept(cc,"expecting ':' at "); + Lex(cc); } else - LexExcept(lx,"redefinition at "); + LexExcept(cc,"redefinition at "); } else - LexExcept(lx,"syntax error at "); - } else if (lx->token==TK_IDENT) { + LexExcept(cc,"syntax error at "); + } else if (cc->token==TK_IDENT) { tempex=CAlloc(sizeof(CHashExport)); - tempex->str=lx->cur_str; - lx->cur_str=0; + tempex->str=cc->cur_str; + cc->cur_str=0; tempex->type=HTT_EXPORT_SYS_SYM; - tempex->val=a->ip; - Lex(lx); //Skip cur_str - if (lx->token!=':' && lx->token!=TK_DBL_COLON) - LexExcept(lx,"expecting ':' at "); + tempex->val=aotc->ip; + Lex(cc); //Skip cur_str + if (cc->token!=':' && cc->token!=TK_DBL_COLON) + LexExcept(cc,"expecting ':' at "); else { if (*tempex->str=='@' && tempex->str[1]=='@') { - if (lx->token==TK_DBL_COLON) - LexExcept(lx,"no local glbl exports at "); - HashAdd(tempex,lx->htc.local_hash_table); + if (cc->token==TK_DBL_COLON) + LexExcept(cc,"no local glbl exports at "); + HashAdd(tempex,cc->htc.local_hash_table); } else - HashAdd(tempex,lx->htc.glbl_hash_table); - if (lx->htc.local_var_lst) {//AsmBlk in fun? Also add goto-like label. - if (!(g_lb=LCCGoToLabelFind(lx,tempex->str))) { - g_lb=LCCMiscNew(lx,CMT_ASM_LABEL); + HashAdd(tempex,cc->htc.glbl_hash_table); + if (cc->htc.local_var_lst) {//AsmBlk in fun? Also add goto-like label. + if (!(g_lb=COCGoToLabelFind(cc,tempex->str))) { + g_lb=COCMiscNew(cc,CMT_ASM_LABEL); g_lb->str=StrNew(tempex->str); } else if (g_lb->flags&CMF_DEFINED) - LexExcept(lx,"Duplicate goto label at "); + LexExcept(cc,"Duplicate goto label at "); g_lb->type=CMT_ASM_LABEL; g_lb->flags|=CMF_DEFINED; - g_lb->ip=a->ip; + g_lb->ip=aotc->ip; g_lb->use_cnt++; //Disable warning on unused labels. - LCCAdd(lx,IC_LABEL,g_lb,0); + ICAdd(cc,IC_LABEL,g_lb,0); } - if (lx->token==TK_DBL_COLON) { + if (cc->token==TK_DBL_COLON) { tempex->type|=HTF_EXPORT; - HashSrcFileSet(lx,tempex); + HashSrcFileSet(cc,tempex); - AsmLocalsResolve(lx); - a->last_label=tempex->str; + AOTLocalsResolve(cc); + aotc->last_label=tempex->str; } - Lex(lx); + Lex(cc); } - } else if (lx->token==';') - Lex(lx); + } else if (cc->token==';') + Lex(cc); else - LexExcept(lx,"syntax error at "); - if (cmp_flags&CMPF_ONE_ASM_INS && (lx->token!=TK_IDENT || - !(tempo=lx->hash_entry) || !(tempo->type&HTT_OPCODE))) + LexExcept(cc,"syntax error at "); + if (cmp_flags&CMPF_ONE_ASM_INS && (cc->token!=TK_IDENT || + !(tempo=cc->hash_entry) || !(tempo->type&HTT_OPCODE))) break; } - AsmLocalsResolve(lx); - a->lst=FALSE; - lx->flags&=lx->flags&~LF_ASM_EXPRESSIONS|old_flags; + AOTLocalsResolve(cc); + aotc->lst=FALSE; + cc->flags&=cc->flags&~CCF_ASM_EXPRESSIONS|old_flags; } - diff --git a/Compiler/AsmInit.CPP b/Compiler/AsmInit.CPP new file mode 100644 index 0000000..8c1bcdf --- /dev/null +++ b/Compiler/AsmInit.CPP @@ -0,0 +1,200 @@ +U0 AsmPrsInsFlags(CCmpCtrl *cc,CInstruction *tempi) +{ + I64 i; + while (TRUE) { + switch (cc->token) { + case TK_IDENT: + if ((i=DefineMatch(cc->cur_str,"ST_OPCODE_MODIFIERS"))>=0) { + tempi->opcode_modifier=i; + break; + } else + return; + case TK_INTEGER: + if (cc->cur_i64==16) + tempi->flags|=IEF_OP_SIZE16; + else if (cc->cur_i64==32) + tempi->flags|=IEF_OP_SIZE32; + else + return; + break; + case '+': + tempi->flags|=IEF_PLUS_OPCODE; + case '/': + if (Lex(cc)==TK_INTEGER && cc->cur_i64<8) + tempi->slash_val=cc->cur_i64; + else if (cc->token==TK_IDENT) { + if (!StrCmp(cc->cur_str,"R")) + tempi->slash_val=SV_R_REG; + else if (!StrCmp(cc->cur_str,"I")) + tempi->slash_val=SV_I_REG; + else + return; + } else + return; + break; + case '!': tempi->flags|=IEF_DONT_SWITCH_MODES; break; + case '&': tempi->flags|=IEF_DFT; break; + case '%': tempi->flags|=IEF_NOT_IN_64_BIT; break; + case '=': tempi->flags|=IEF_48_REX; break; + case '`': tempi->flags|=IEF_REX_ONLY_R8_R15; break; + case '^': tempi->flags|=IEF_REX_XOR_LIKE; break; + case ':': tempi->flags|=IEF_STI; break; + case '$$': tempi->flags|=IEF_ENDING_ZERO; break; + default: + return; + } + Lex(cc); + } +} + +U0 AsmHashLoad() +{//See $LK,"::/Compiler/OpCodes.TXT.Z"$. + I64 i,j,size,size1; + CInternalType *tempit; + CCmpCtrl *cc; + CHashGeneric *temph; + CHashReg *tempr; + CHashOpcode *tempo,*tempo1; + CInstruction *tempi; + CHashClass *tempc; + + cmp.size_arg_mask[0]=0x3FF0FFFFFE; + cmp.size_arg_mask[1]=0x1110111112; + cmp.size_arg_mask[2]=0x2220222224; + cmp.size_arg_mask[4]=0x0440444448; + cmp.size_arg_mask[8]=0x0880888880; + + cmp.asm_hash=HashTableNew(1024); + size1=offset(CHashOpcode.ins)+sizeof(CInstruction)<<5; + tempo=MAlloc(size1); + + cc=CmpCtrlNew(FileRead("OpCodes.TXT"),,"OpCodes.TXT.Z"); + cc->htc.hash_table_lst=NULL; + Lex(cc); + while (cc->token) { + if (cc->token!=TK_IDENT) + LexExcept(cc,"expecting identifier at "); + i=LstMatch(cc->cur_str,"R8\0R16\0R32\0R64\0SEG\0FSTK\0" + "MM\0XMM\0OPCODE\0KEYWORD\0ASM_KEYWORD\0"); + if (i<0) + LexExcept(cc,"Unknown Statement"); + Lex(cc); //skip keyword + if (cc->token!=TK_IDENT) + LexExcept(cc,"expecting identifier at "); + switch (i) { + case 8: //OPCODE + MemSet(tempo,0,size1); + tempo->type=HTT_OPCODE; + tempo->instruction_entry_cnt=0; + tempo->str=cc->cur_str; + cc->cur_str=0; + Lex(cc); //Skip OPCODE + while (cc->token && cc->token!=';') { + tempi=&tempo->ins[tempo->instruction_entry_cnt]; + tempi->ins_entry_num=tempo->instruction_entry_cnt++; + tempi->slash_val=SV_NONE; //Not zero!! + while (cc->token==TK_INTEGER) { + tempi->opcode[tempi->opcode_cnt++]=cc->cur_i64; + Lex(cc); + } + if (cc->token==',') + Lex(cc); + else if (cc->token!=';') + LexExcept(cc,"expecting ',' at "); + + AsmPrsInsFlags(cc,tempi); + + tempi->arg1=tempi->arg2=tempi->size1=tempi->size2=0; + if (cc->token==TK_IDENT) { + j=DefineMatch(cc->cur_str,"ST_ARG_TYPES"); + tempi->arg1=j; + if (Bt(&cmp.size_arg_mask[1],j)) + tempi->size1=8; + else if (Bt(&cmp.size_arg_mask[2],j)) + tempi->size1=16; + else if (Bt(&cmp.size_arg_mask[4],j)) + tempi->size1=32; + else if (Bt(&cmp.size_arg_mask[8],j)) + tempi->size1=64; + + if (Lex(cc)==TK_IDENT) { + j=DefineMatch(cc->cur_str,"ST_ARG_TYPES"); + Lex(cc); + tempi->arg2=j; + if (Bt(&cmp.size_arg_mask[1],j)) + tempi->size2=8; + else if (Bt(&cmp.size_arg_mask[2],j)) + tempi->size2=16; + else if (Bt(&cmp.size_arg_mask[4],j)) + tempi->size2=32; + else if (Bt(&cmp.size_arg_mask[8],j)) + tempi->size2=64; + } + } + } + size=offset(CHashOpcode.ins)+ + sizeof(CInstruction)*tempo->instruction_entry_cnt; + + tempo1=MAlloc(size); + MemCpy(tempo1,tempo,size); + tempo1->use_cnt=0; + if (HashFind(tempo1->str,cmp.asm_hash,HTT_OPCODE)) + LexExcept(cc,"Duplicate OPCODE entry "); + HashAdd(tempo1,cmp.asm_hash); + break; + case 9: //KEYWORD + case 10: //ASM_KEYWORD + temph=CAlloc(sizeof(CHashGeneric)); + temph->str=cc->cur_str; + cc->cur_str=NULL; + Lex(cc); //skip keyword name + if (cc->token!=TK_INTEGER) + LexExcept(cc,"expecting integer at "); + temph->user_data0=cc->cur_i64; + if (i==9) + temph->type=HTT_KEYWORD; + else + temph->type=HTT_ASM_KEYWORD; + HashAdd(temph,cmp.asm_hash); + Lex(cc); //Skip INT + break; + case REGT_R8: + case REGT_R16: + case REGT_R32: + case REGT_R64: + case REGT_SEG: + case REGT_FSTK: + case REGT_MM: + case REGT_XMM: + tempr=CAlloc(sizeof(CHashReg)); + tempr->str=cc->cur_str; + cc->cur_str=NULL; + Lex(cc); //skip keyword name + if (cc->token!=TK_INTEGER) + LexExcept(cc,"expecting integer at "); + tempr->type=HTT_REG; + tempr->reg_type=i; + tempr->reg_num=cc->cur_i64; + HashAdd(tempr,cmp.asm_hash); + Lex(cc); //Skip INT + break; + } + if (cc->token!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); //Skip ';' + } + Free(tempo); + CmpCtrlDel(cc); + for (i=0;itype=HTT_INTERNAL_TYPE; + tempc->raw_type=tempit->type; + Bts(&tempc->flags,Cf_INTERNAL_TYPE); + tempc->size=tempit->size; + tempc->str=AStrNew(tempit->name); + HashAdd(tempc,cmp.asm_hash); + cmp.internal_types[tempc->raw_type]=tempc; + } + adam_task->hash_table->next=cmp.asm_hash; +} diff --git a/Compiler/AsmLib.CPP b/Compiler/AsmLib.CPP new file mode 100644 index 0000000..875cd76 --- /dev/null +++ b/Compiler/AsmLib.CPP @@ -0,0 +1,177 @@ +U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) +{ + CAOTCtrl *aotc=cc->aotc; + I64 i=aotc->ip>>AOT_BIN_BLK_BITS; + CAOTBinBlk *tempbin=aotc->bin; + while (i--) + if (!(tempbin=tempbin->next)) { + i=aotc->ip>>AOT_BIN_BLK_BITS+1; + tempbin=&aotc->bin; + while (i--) { + if (!tempbin->next) + tempbin->next=CAlloc(sizeof(CAOTBinBlk)); + tempbin=tempbin->next; + } + break; + } + tempbin->body[aotc->ip++ & (AOT_BIN_BLK_SIZE-1)]=b; + if (aotc->lst) { + if (aotc->lst_col>=24) { + '\n'; + aotc->lst_col=0; + } + "%02X ",b; + aotc->lst_col+=3; + } + if (aotc->ip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->ip; +} + +U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) +{ + CAOTCtrl *aotc=cc->aotc; + I64 i=aotc->ip>>AOT_BIN_BLK_BITS, + j=(aotc->ip+sizeof(U32))>>AOT_BIN_BLK_BITS; + U32 *_d; + CAOTBinBlk *tempbin; + if (i!=j) + for (i=0;ibin; + while (i--) + if (!(tempbin=tempbin->next)) { + i=aotc->ip>>AOT_BIN_BLK_BITS+1; + tempbin=&aotc->bin; + while (i--) { + if (!tempbin->next) + tempbin->next=CAlloc(sizeof(CAOTBinBlk)); + tempbin=tempbin->next; + } + break; + } + _d=tempbin->body+ aotc->ip&(AOT_BIN_BLK_SIZE-1); + *_d=d; + aotc->ip+=sizeof(U32); + if (aotc->lst) { + if (aotc->lst_col>=24) { + '\n'; + aotc->lst_col=0; + } + "%08X ",d; + aotc->lst_col+=9; + } + if (aotc->ip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->ip; + } +} + +U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) +{ + CAOTCtrl *aotc=cc->aotc; + I64 i=aotc->ip>>AOT_BIN_BLK_BITS, + j=(aotc->ip+sizeof(I64))>>AOT_BIN_BLK_BITS, + *_q; + CAOTBinBlk *tempbin; + if (i!=j) + for (i=0;ibin; + while (i--) + if (!(tempbin=tempbin->next)) { + i=aotc->ip>>AOT_BIN_BLK_BITS+1; + tempbin=&aotc->bin; + while (i--) { + if (!tempbin->next) + tempbin->next=CAlloc(sizeof(CAOTBinBlk)); + tempbin=tempbin->next; + } + break; + } + _q=tempbin->body+ aotc->ip&(AOT_BIN_BLK_SIZE-1); + *_q=q; + aotc->ip+=sizeof(I64); + if (aotc->lst) { + if (aotc->lst_col>=24) { + '\n'; + aotc->lst_col=0; + } + "%016X ",q; + aotc->lst_col+=17; + } + if (aotc->ip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->ip; + } +} + +U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 ip,...) +{ + CAOTCtrl *aotc=cc->aotc; + CAOTBinBlk *tempbin; + I64 i,j; + for (j=0;j>AOT_BIN_BLK_BITS+1; + tempbin=&aotc->bin; + while (i--) { + if (!tempbin->next) { + tempbin->next=CAlloc(sizeof(CAOTBinBlk)); + tempbin->next->next=NULL; + } + tempbin=tempbin->next; + } + tempbin->body[ip++ & (AOT_BIN_BLK_SIZE-1)]=argv[j]; + } + if (ip>aotc->num_bin_U8s) + aotc->num_bin_U8s=ip; +} + +I64 AsmLexExpression(CCmpCtrl *cc) +{ + U8 *machine_code; + I64 result=0; + cc->asm_undef_hash=NULL; + cc->flags&=~(CCF_UNRESOLVED+CCF_LOCAL); + cc->abs_cnts=0; + if (!IsLexExpression2Bin(cc,&machine_code)) + LexSkipEol(cc); + else { + if (cc->abs_cnts.externs) + LexExcept(cc,"Extern Not Allowed at "); + if (cc->flags & CCF_UNRESOLVED) + LexExcept(cc,"undefined sym at "); + result=Call(machine_code); + Free(machine_code); + } + return result; +} + +U0 AsmLineLst(CCmpCtrl *cc) +{ + CAOTCtrl *aotc=cc->aotc; + CLexFile *tempf=cc->lex_include_stk; + CDocEntry *doc_e=tempf->line_start,*doc_e2; + if (aotc->lst && aotc->lst_last_lfn==tempf && doc_e) { + if (doc_e2=aotc->lst_last_line) { + if (tempf->flags& LFSF_DOC) { + while (doc_e2->yy) { + "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_ip; + aotc->lst_col=0; + doc_e2=LexPutLine(cc,doc_e2); + } + } else { + while (*doc_e2(U8 *) && doc_e2!=doc_e) { + "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_ip; + aotc->lst_col=0; + doc_e2=LexPutLine(cc,doc_e2); + } + } + aotc->lst_last_line=doc_e2; + } else + aotc->lst_last_line=doc_e; + } else { + aotc->lst_last_line=NULL; + aotc->lst_last_lfn=tempf; + } + aotc->lst_last_ip=aotc->ip; +} diff --git a/Compiler/AsmResolve.CPP b/Compiler/AsmResolve.CPP new file mode 100644 index 0000000..3cb2e95 --- /dev/null +++ b/Compiler/AsmResolve.CPP @@ -0,0 +1,217 @@ +U0 AsmResolve(CCmpCtrl *cc,CAsmUnresolvedRef *tempu,U8 *label,Bool undefined) +{ + CAOTImportExport *tempie; + CAsmUndefHash *tempauh; + I64 r=Call(tempu->machine_code); + if (undefined) { + tempauh=tempu->asm_undef_hash; + while (tempauh) { + if (tempauh->hash->type & HTF_UNRESOLVED) { + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->next=tempauh->hash->ie_lst; + tempauh->hash->ie_lst=tempie; + tempie->ip=tempu->ip; + tempie->aot=cc->aot; + tempie->type=tempu->type; + } + tempauh=tempauh->next; //Technically, more than one won't work. + } + } else if (!(tempu->type&1)) {//Rel? + r-=tempu->rel_ip; + if (tempu->type==IET_REL_I8 && !(MIN_I8<=r<=MAX_I8) || + tempu->type==IET_REL_I16 && !(MIN_I16<=r<=MAX_I16)) { + PrintErr("branch out of range at line:%04d %s\n", + tempu->line_num,label); + LexExcept(cc); + } + if (tempu->U8_avail && tempu->type>IET_IMM_U8 && -124<=r<=123) + PrintWarn("could use I8 displacement at line:%04d %s %s\n", + tempu->line_num,cc->aotc->last_label,label); + } + AOTStoreCodeU8At(cc,tempu->ip,r.u8[0]); + if (tempu->type>=IET_REL_I16) { + AOTStoreCodeU8At(cc,tempu->ip+1,r.u8[1]); + if (tempu->type>=IET_REL_I32) { + AOTStoreCodeU8At(cc,tempu->ip+2,r.u8[2],r.u8[3]); + if (tempu->type>=IET_REL_I64) + AOTStoreCodeU8At(cc,tempu->ip+4,r.u8[4],r.u8[5],r.u8[6],r.u8[7]); + } + } +} + +U0 AOTLocalsResolve(CCmpCtrl *cc) +{ + CAOTCtrl *aotc=cc->aotc; + CAsmUnresolvedRef *tempu=aotc->local_unresolved,*tempu1; + CAsmUndefHash *tempauh; + Bool undefined; + U8 *label=NULL; + + while (tempu) { + undefined=FALSE; + tempu1=tempu->next; + tempauh=tempu->asm_undef_hash; + while (tempauh) { + if (tempauh->hash->type & HTF_UNRESOLVED) { + PrintErr("undefined sym at line:%04d %s %s\n", + tempu->line_num,aotc->last_label,tempauh->hash->str); + LexExcept(cc); + } + label=tempauh->hash->str; + tempauh=tempauh->next; + } + if (!undefined) + AsmResolve(cc,tempu,label,FALSE); + Free(tempu->machine_code); + LinkedLstDel(tempu->asm_undef_hash); + Free(tempu); + tempu=tempu1; + } + HashTableDel(cc->htc.local_hash_table); + cc->htc.hash_table_lst=cc->htc.local_hash_table=HashTableNew(16); + cc->htc.local_hash_table->next=cc->htc.glbl_hash_table; + aotc->local_unresolved=NULL; +} + +U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tempaot) +{ + CAOTCtrl *aotc=cc->aotc; + CHashFun *tempf; + CAsmUnresolvedRef *tempu=aotc->glbl_unresolved,*tempu1; + I64 i,j; + CAOTImportExport *tempie,*tempie1; + CAsmUndefHash *tempauh; + CHashExport *tempex; + U8 *label; + Bool undefined; + CExternUsage *tempeu,*tempeu8; + + while (tempu) { + label=NULL; + undefined=FALSE; + tempu1=tempu->next; + tempauh=tempu->asm_undef_hash; + while (tempauh) { + if (tempauh->hash->type & HTF_UNRESOLVED) { + tempex=tempauh->hash; + if (tempex->type & HTT_EXPORT_SYS_SYM && + tempex->type & HTF_UNRESOLVED && + !(tempex->type & HTF_IMPORT) && + (tempf=HashFind(tempex->str,cc->htc.hash_table_lst,HTT_FUN)) && + !Bt(&tempf->flags,Cf_EXTERN)) { + tempex->val=tempf->executable_addr; + tempex->type&=~HTF_UNRESOLVED; + label=tempauh->hash->str; + } else { + if (!(tempex->type & HTF_IMPORT)) { + if (cc->htc.local_var_lst) { + tempex->type|=HTF_GOTO_LABEL; + tempex->use_cnt++; + } else { + PrintErr("undefined sym at line:%04d %s\n", + tempu->line_num,tempex->str); + LexExcept(cc); + } + } else if (undefined) { + PrintErr("Two imports in same expression " + "not allowed at line:%04d %s\n", + tempu->line_num,tempex->str); + LexExcept(cc); + } + undefined=TRUE; + } + } else + label=tempauh->hash->str; + tempauh=tempauh->next; + } + AsmResolve(cc,tempu,label,undefined); + Free(tempu->machine_code); + LinkedLstDel(tempu->asm_undef_hash); + Free(tempu); + tempu=tempu1; + } + + for (i=0;i<=cc->htc.glbl_hash_table->mask;i++) { + tempex=cc->htc.glbl_hash_table->body[i]; + while (tempex) { + if (tempex->type & (HTF_IMPORT|HTF_GOTO_LABEL)) { + if (tempex->use_cnt && (tempie=tempex->ie_lst)) { + if (tempex->type&HTF_GOTO_LABEL) + tempie->flags|=IEF_GOTO_LABEL; + if (tempex->import_name) + tempie->str=StrNew(tempex->import_name); + else + tempie->str=StrNew(tempex->str); + do { + tempie1=tempie->next; + QueIns(tempie,tempaot->last_ie); + } while (tempie=tempie1); + tempex->ie_lst=NULL; + } + } else if (tempex->type & (HTF_EXPORT|HTF_RESOLVE)) { + if (tempex->type & HTF_UNRESOLVED) { + PrintErr("undefined sym at %s\n",tempex->str); + LexExcept(cc); + } + if (tempex->type & HTF_RESOLVE) { + tempf=tempex; + tempeu=tempf->ext_lst; + while (tempeu) { + tempeu8=tempeu->next; + j=tempf->executable_addr-(tempeu->ip+4); + AOTStoreCodeU8At(cc,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); + Free(tempeu); + tempeu=tempeu8; + } + } + if (tempex->type & HTF_EXPORT) { + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_REL32_EXPORT; + if (tempex->type & HTT_FUN) + tempie->ip=tempf->executable_addr; + else if (tempex->type & HTT_GLBL_VAR) + tempie->ip=tempex(CHashGlblVar *)->data_addr_ip; + else + tempie->ip=tempex->val; + tempie->aot=cc->aot; + if (tempex->type & HTF_IMM) + tempie->type++; + tempie->str=StrNew(tempex->str); + tempie->src_link=StrNew(tempex->src_link); + QueIns(tempie,tempaot->last_ie); + } + } + tempex=tempex->next; + } + } +} + +U0 AsmUnresolvedAdd(CCmpCtrl *cc,U8 *machine_code,I64 type,I64 ip,I64 rel_ip, + CAsmUndefHash *local_asm_undef_hash,CAsmUndefHash *glbl_asm_undef_hash, + I64 line_num,Bool U8_avail) +{ + CAsmUnresolvedRef *tempu=MAlloc(sizeof(CAsmUnresolvedRef)); + tempu->machine_code=machine_code; + tempu->type=type; + tempu->ip=ip; + tempu->rel_ip=rel_ip; + tempu->aot=cc->aot; + tempu->imm_flag=FALSE; + tempu->line_num=line_num; + tempu->U8_avail=U8_avail; + tempu->str=NULL; + if (local_asm_undef_hash) { + tempu->asm_undef_hash=local_asm_undef_hash; + tempu->next=cc->aotc->local_unresolved; + cc->aotc->local_unresolved=tempu; + } else { + tempu->asm_undef_hash=glbl_asm_undef_hash; + tempu->next=cc->aotc->glbl_unresolved; + cc->aotc->glbl_unresolved=tempu; + if (glbl_asm_undef_hash->hash->type & HTF_IMPORT) { + tempu->str=StrNew(glbl_asm_undef_hash->hash->str); + if (glbl_asm_undef_hash->hash->type & HTF_IMM) + tempu->imm_flag=TRUE; + } + } +} diff --git a/Compiler/BackA.CPP b/Compiler/BackA.CPP index 371fb2d..4d41bd8 100644 --- a/Compiler/BackA.CPP +++ b/Compiler/BackA.CPP @@ -10,7 +10,7 @@ U0 ICAddEct(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, SwapI64(&d2,&d3); } if (t2&RT_MASK>=RT_I64 && r2!=result_reg && - TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) { + TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) { if (t1&TY_MASK==TY_REG && !(r2==r1 && TY_REG<=t2&TY_MASK<=TY_SIB)) result_reg=r1; ICMov(tempi,TY_REG+RT_I64,result_reg,0,t3,r3,d3,ip); @@ -75,7 +75,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, else i=0x48; if (!d && - (op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) + (op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) return; else if (d==1 && op.u8[0]==0x03) { ICU24(tempi,0xC0FF00+op.u8[1]<<19+i+(r1&7)<<16); @@ -94,7 +94,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, } } if (op.u8[0]==0x03 && MIN_I32<=d<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,r2)) { + !Bt(&cmp.non_ptr_vars_mask,r2)) { i=ICModr1(r1,TY_DISP+RT_I64,r2,d); i.u8[1]|=0x48; ICU24(tempi,i.u8[2]<<16+0x8D00+i.u8[1]); @@ -115,7 +115,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, } if (!d && - (op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) + (op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) return; r=op.u8[1]; //not a reg but a slash val if (op.u8[0]==0x03 && d==-1) //add -1 @@ -215,8 +215,9 @@ U0 ICSub(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, SwapI64(&r2,&r3); SwapI64(&d2,&d3); } - if (t2&RT_MASK>=RT_I64 && r2.u8[0]!=REG_RAX && (t2&TY_MASK!=TY_SIB || r2.u8[1]&15!=REG_RAX) && - TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) { + if (t2&RT_MASK>=RT_I64 && r2.u8[0]!=REG_RAX && + (t2&TY_MASK!=TY_SIB || r2.u8[1]&15!=REG_RAX) && + TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); if (!swap) { op=0x03; @@ -296,9 +297,10 @@ U0 ICMul(CIntermediateCode *tempi,I64 ip) } i=a2->disp; if (!(tempi->ic_class->raw_type&1) && - a2->type&TY_MASK==TY_IMM && MIN_I32<=i<=MAX_I32) { + a2->type&TY_MASK==TY_IMM && MIN_I32<=i<=MAX_I32) { if (tempi->r.type==TY_REG+RT_I64) { - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,a1->type,a1->reg,a1->disp,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + a1->type,a1->reg,a1->disp,ip); r=tempi->r.reg; } else ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a1->type,a1->reg,a1->disp,ip); @@ -324,7 +326,7 @@ U0 ICMul(CIntermediateCode *tempi,I64 ip) } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); if (a1->type&TY_MASK!=TY_REG || - a1->type&RT_MASKtype&RT_MASKtype,a1->reg,a1->disp,ip); r2=REG_RCX; } else @@ -343,12 +345,14 @@ U0 ICMulEqual(CIntermediateCode *tempi,I64 ip) { I64 i=tempi->a2.disp,r=REG_RAX,j; if (!(tempi->ic_class->raw_type&1) && - tempi->a2.type&TY_MASK==TY_IMM && MIN_I32<=i<=MAX_I32) { + tempi->a2.type&TY_MASK==TY_IMM && MIN_I32<=i<=MAX_I32) { if (tempi->ic_flags & ICF_NOT_ADDR) { if (tempi->a1.type==TY_REG+RT_I64) r=tempi->a1.reg; else - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); if (r>7) j=0xC0004D; else @@ -359,11 +363,13 @@ U0 ICMulEqual(CIntermediateCode *tempi,I64 ip) ICU24(tempi,0x6900+j+(r&7)<<16+(r&7)<<19); ICU32(tempi,i); } - ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,r,0,ip); + ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,TY_REG+RT_I64,r,0,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, + TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); r=REG_RBX; if (MIN_I8<=i<=MAX_I8) ICU32(tempi,i<<24+0xDB6B48); @@ -371,7 +377,8 @@ U0 ICMulEqual(CIntermediateCode *tempi,I64 ip) ICU24(tempi,0xDB6948); ICU32(tempi,i); } - ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0,TY_REG+RT_I64,REG_RBX,0,ip); + ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0, + TY_REG+RT_I64,REG_RBX,0,ip); } } else { if (tempi->ic_class->raw_type&1) @@ -380,26 +387,38 @@ U0 ICMulEqual(CIntermediateCode *tempi,I64 ip) i=0xEBF748; if (tempi->ic_flags & ICF_NOT_ADDR) { if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); } ICU24(tempi,i); - ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,TY_REG+RT_I64,REG_RAX,0,ip); } else { if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } - ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, + TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); ICU24(tempi,i); - ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0, + TY_REG+RT_I64,REG_RAX,0,ip); } } if (tempi->r.type&TY_MASK) @@ -409,11 +428,15 @@ U0 ICMulEqual(CIntermediateCode *tempi,I64 ip) U0 ICDiv(CIntermediateCode *tempi,I64 ip) { if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } if (tempi->ic_class->raw_type&1) { ICZero(tempi,REG_RDX); @@ -422,18 +445,25 @@ U0 ICDiv(CIntermediateCode *tempi,I64 ip) ICU16(tempi,0x9948); ICU24(tempi,0xF9F748); } - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip); } U0 ICDivEqual(CIntermediateCode *tempi,Bool is_mod,I64 ip) { if (tempi->ic_flags & ICF_NOT_ADDR) { if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); } if (tempi->ic_class->raw_type&1) { ICZero(tempi,REG_RDX); @@ -443,22 +473,27 @@ U0 ICDivEqual(CIntermediateCode *tempi,Bool is_mod,I64 ip) ICU24(tempi,0xF9F748); } if (is_mod) - ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,REG_RDX,0,ip); + ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,TY_REG+RT_I64,REG_RDX,0,ip); else - ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,TY_REG+RT_I64,REG_RAX,0,ip); } else { if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); ICU24(tempi,0xD98748); //xchg bx,cx } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } - //dangerous might clobber RBX in Mov, but it doesn't - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,TY_DISP+tempi->a1.type_pointed,REG_RBX,0,ip); +//dangerous might clobber RBX in Mov, but it doesn't + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,TY_DISP+tempi->a1.type_pointed, + REG_RBX,0,ip); if (tempi->ic_class->raw_type&1) { ICZero(tempi,REG_RDX); ICU24(tempi,0xF1F748); @@ -467,26 +502,34 @@ U0 ICDivEqual(CIntermediateCode *tempi,Bool is_mod,I64 ip) ICU24(tempi,0xF9F748); } if (is_mod) - ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RBX,0,TY_REG+RT_I64,REG_RDX,0,ip); + ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RBX,0, + TY_REG+RT_I64,REG_RDX,0,ip); else - ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RBX,0,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RBX,0, + TY_REG+RT_I64,REG_RAX,0,ip); } if (tempi->r.type&TY_MASK) { if (is_mod) - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RDX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RDX,0,ip); else - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip); } } U0 ICMod(CIntermediateCode *tempi,I64 ip) { if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } if (tempi->ic_class->raw_type&1) { ICZero(tempi,REG_RDX); @@ -495,18 +538,21 @@ U0 ICMod(CIntermediateCode *tempi,I64 ip) ICU16(tempi,0x9948); ICU24(tempi,0xF9F748); } - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RDX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RDX,0,ip); } -U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 d1, - I64 t2,I64 r2,I64 d2,I64 t3,I64 r3,I64 d3,I64 op,I64 ip) +U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed, + I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2, + I64 t3,I64 r3,I64 d3,I64 op,I64 ip) { Bool done; I64 result_reg,temp,i; if (tempi->ic_flags & ICF_NOT_ADDR) { if (t3&TY_MASK==TY_IMM) { ICAddSubEctImm(tempi, - t2&TY_MASK+type_pointed,r2,d2,t2&TY_MASK+type_pointed,r2,d2,d3,op,ip); + t2&TY_MASK+type_pointed,r2,d2,t2&TY_MASK+ + type_pointed,r2,d2,d3,op,ip); if (t1&TY_MASK) ICMov(tempi,t1,r1,d1,t2&TY_MASK+type_pointed,r2,d2,ip); return; @@ -514,7 +560,7 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 done=FALSE; if (type_pointed>=RT_I64) { if (!(t1&TY_MASK) && - TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) { + TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) { if (t3&TY_MASK==TY_REG) temp=r3; else { @@ -530,7 +576,7 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 return; } if (t3&RT_MASK>=RT_I64 && - TY_REG<=t3&TY_MASK<=TY_RIP_DISP32) { + TY_REG<=t3&TY_MASK<=TY_RIP_DISP32) { if (t2&TY_MASK==TY_REG) result_reg=r2; else { @@ -543,7 +589,8 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 ICRex(tempi,i.u8[1]); ICU16(tempi,i.u8[2]<<8+op.u8[0]); ICModr2(tempi,i,d3,ip+4); - ICMov(tempi,t2&TY_MASK+type_pointed,r2,d2,TY_REG+RT_I64,result_reg,0,ip); + ICMov(tempi,t2&TY_MASK+type_pointed,r2,d2, + TY_REG+RT_I64,result_reg,0,ip); done=TRUE; } } @@ -553,7 +600,8 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 result_reg=r2; else { result_reg=REG_RCX; - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,t2&TY_MASK+type_pointed,r2,d2,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + t2&TY_MASK+type_pointed,r2,d2,ip); } ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); } else { @@ -562,7 +610,8 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 result_reg=r2; else { result_reg=REG_RCX; - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,t2&TY_MASK+type_pointed,r2,d2,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + t2&TY_MASK+type_pointed,r2,d2,ip); } } if (tempi->ic_flags&ICF_LOCK) @@ -572,7 +621,8 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 else ICU8(tempi,0x48); ICU16(tempi,0xC000+op.u8[0]+(result_reg&7)<<11); - ICMov(tempi,t2&TY_MASK+type_pointed,r2,d2,TY_REG+RT_I64,result_reg,0,ip); + ICMov(tempi,t2&TY_MASK+type_pointed,r2,d2, + TY_REG+RT_I64,result_reg,0,ip); } } } else { @@ -580,23 +630,26 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 if (t3&TY_MASK==TY_IMM && op.u8[2]) { if (!d3.u32[1]) { if (tempi->ic_flags&ICF_NO_DEPEND_RESULT && - t2&TY_MASK==TY_REG && d3(U64)<=MAX_I8) { + t2&TY_MASK==TY_REG && d3(U64)<=MAX_I8) { ICSlashOp(tempi,TY_DISP+type_pointed,r2,0,0x838000+op.u8[4],ip); ICU8(tempi,d3); done=TRUE; } else if (op.u8[2]==0x24) {//AND ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,TY_DISP+type_pointed,REG_RCX,0,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + TY_DISP+type_pointed,REG_RCX,0,ip); result_reg=REG_RAX; if (tempi->ic_flags&ICF_LOCK) ICU8(tempi,OC_LOCK_PREFIX); ICU16(tempi,op.u8[3]<<8+0x40); ICU32(tempi,d3); - ICMov(tempi,TY_DISP+type_pointed,REG_RCX,0,TY_REG+RT_I64,result_reg,0,ip); + ICMov(tempi,TY_DISP+type_pointed,REG_RCX,0, + TY_REG+RT_I64,result_reg,0,ip); done=TRUE; } else if (type_pointed&RT_MASKic_flags&ICF_LOCK) ICU8(tempi,OC_LOCK_PREFIX); @@ -610,7 +663,8 @@ U0 ICAddSubEctEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 ICU16(tempi,op.u8[2]<<8+0x40); ICU8(tempi,d3); } - ICMov(tempi,TY_DISP+type_pointed,REG_RCX,0,TY_REG+RT_I64,result_reg,0,ip); + ICMov(tempi,TY_DISP+type_pointed,REG_RCX,0, + TY_REG+RT_I64,result_reg,0,ip); done=TRUE; } } @@ -670,7 +724,7 @@ U0 ICShift(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1, } U0 ICShiftEqual(CIntermediateCode *tempi,I64 type_pointed,I64 t1,I64 r1,I64 d1, - I64 t2,I64 r2,I64 d2,I64 t3,I64 r3,I64 d3,I64 us,I64 is,I64 ip) + I64 t2,I64 r2,I64 d2,I64 t3,I64 r3,I64 d3,I64 us,I64 is,I64 ip) { I64 result_reg; if (tempi->ic_class->raw_type&1 || tempi->ic_flags & ICF_USE_UNSIGNED) diff --git a/Compiler/BackB.CPP b/Compiler/BackB.CPP index 9094f63..1d8a511 100644 --- a/Compiler/BackB.CPP +++ b/Compiler/BackB.CPP @@ -1,48 +1,51 @@ U0 ICUnaries(CIntermediateCode *tempi,I64 op,I64 ip) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICSlashOp(tempi,TY_REG+RT_I64,REG_RAX,0,op,ip); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } U0 ICNot(CIntermediateCode *tempi,I64 ip) { I64 i; if (tempi->a1.type&RT_MASK<=RT_U8 && - TY_DISP<=tempi->a1.type&TY_MASK<=TY_RIP_DISP32) { + TY_DISP<=tempi->a1.type&TY_MASK<=TY_RIP_DISP32) { i=ICModr1(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp); ICRex(tempi,i.u8[1]); ICU16(tempi,i.u8[2]<<8+0xF6); //TEST ?,0xFF ICModr2(tempi,i,tempi->a1.disp,ip+5); ICU8(tempi,0xFF); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICTest(tempi,REG_RAX); } ICU24(tempi,0xC0940F); //SETZ AL ICU32(tempi,0xC0B60F48); //MOVZX RAX,AL ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_U64,REG_RAX,0,ip); + TY_REG+RT_U64,REG_RAX,0,ip); } U0 ICAndAnd(CIntermediateCode *tempi,I64 ip) { I64 r2; if (tempi->ic_flags & ICF_A1_FIRST) { - if (tempi->a1.type&TY_MASK!=TY_REG || - tempi->a1.reg==REG_RAX) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + if (tempi->a1.type&TY_MASK!=TY_REG || tempi->a1.reg==REG_RAX) { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r2=REG_RDX; } else r2=tempi->a1.reg; - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - if (tempi->a1.type&TY_MASK!=TY_REG || - tempi->a1.reg==REG_RAX) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + if (tempi->a1.type&TY_MASK!=TY_REG || tempi->a1.reg==REG_RAX) { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r2=REG_RDX; } else r2=tempi->a1.reg; @@ -53,30 +56,33 @@ U0 ICAndAnd(CIntermediateCode *tempi,I64 ip) ICTest(tempi,REG_RCX); ICU16(tempi,0x0374); ICU24(tempi,0xC0FF48); - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip); } U0 ICOrOr(CIntermediateCode *tempi,I64 ip) { I64 i=0x48,r2; if (tempi->ic_flags & ICF_A1_FIRST) { - if (tempi->a1.type&TY_MASK!=TY_REG || - tempi->a1.reg==REG_RAX) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + if (tempi->a1.type&TY_MASK!=TY_REG || tempi->a1.reg==REG_RAX) { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r2=REG_RDX; } else r2=tempi->a1.reg; - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - if (tempi->a1.type&TY_MASK!=TY_REG || - tempi->a1.reg==REG_RAX) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + if (tempi->a1.type&TY_MASK!=TY_REG || tempi->a1.reg==REG_RAX) { + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r2=REG_RDX; } else r2=tempi->a1.reg; } - + if (r2>7) { i++; r2&=7; @@ -85,7 +91,8 @@ U0 ICOrOr(CIntermediateCode *tempi,I64 ip) ICU24(tempi,0xC80B00+i+r2<<16); ICU16(tempi,0x0374); ICU24(tempi,0xC0FF48); - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip); } U0 ICXorXor(CIntermediateCode *tempi,I64 ip) @@ -93,15 +100,19 @@ U0 ICXorXor(CIntermediateCode *tempi,I64 ip) I64 r2; if (tempi->ic_flags & ICF_A1_FIRST) { if (tempi->a1.type&TY_MASK!=TY_REG) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r2=REG_RDX; } else r2=tempi->a1.reg; - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->a1.type&TY_MASK!=TY_REG) { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r2=REG_RDX; } else r2=tempi->a1.reg; @@ -115,10 +126,11 @@ U0 ICXorXor(CIntermediateCode *tempi,I64 ip) ICTest(tempi,REG_RCX); ICU16(tempi,0x0374); ICU24(tempi,0xC0FF48); - + ICU24(tempi,0xC33348); - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip); } U0 ICCmp(CIntermediateCode *tempi,I64 us,I64 is,I64 ip) @@ -126,8 +138,8 @@ U0 ICCmp(CIntermediateCode *tempi,I64 us,I64 is,I64 ip) I64 r1,d1,r2,i=0x48,j=tempi->a2.disp; if (tempi->a2.type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) { if (!(tempi->ic_flags&(ICF_POP_CMP|ICF_PUSH_CMP)) && - tempi->a1.type&TY_MASK==TY_DISP && //TODO - tempi->a1.type&RT_MASK>=RT_I64 && tempi->a1.reg!=REG_RAX) { + tempi->a1.type&TY_MASK==TY_DISP && //TODO + tempi->a1.type&RT_MASK>=RT_I64 && tempi->a1.reg!=REG_RAX) { r1=tempi->a1.reg; d1=tempi->a1.disp; ICZero(tempi,REG_RAX); @@ -155,11 +167,11 @@ U0 ICCmp(CIntermediateCode *tempi,I64 us,I64 is,I64 ip) ICPopRegs(tempi,1<a1.type&TY_MASK==TY_REG && - tempi->a1.reg!=REG_RAX) + if (tempi->a1.type&TY_MASK==TY_REG && tempi->a1.reg!=REG_RAX) r1=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r1=REG_RCX; } } @@ -181,45 +193,45 @@ U0 ICCmp(CIntermediateCode *tempi,I64 us,I64 is,I64 ip) ICU16(tempi,0x300+is); ICU24(tempi,0xC0FF48); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else { if (tempi->ic_flags & ICF_A1_FIRST) { if (tempi->ic_flags & ICF_POP_CMP) { ICPopRegs(tempi,1<a1.type&TY_MASK==TY_REG && - tempi->a1.reg!=REG_RAX) + if (tempi->a1.type&TY_MASK==TY_REG && tempi->a1.reg!=REG_RAX) r1=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r1=REG_RCX; } } - if (tempi->a2.type&TY_MASK==TY_REG && - tempi->a2.reg!=REG_RAX) + if (tempi->a2.type&TY_MASK==TY_REG && tempi->a2.reg!=REG_RAX) r2=tempi->a2.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); r2=REG_RDX; } } else { - if (tempi->a2.type&TY_MASK==TY_REG && - tempi->a2.reg!=REG_RAX) + if (tempi->a2.type&TY_MASK==TY_REG && tempi->a2.reg!=REG_RAX) r2=tempi->a2.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); r2=REG_RCX; } if (tempi->ic_flags & ICF_POP_CMP) { ICPopRegs(tempi,1<a1.type&TY_MASK==TY_REG && - tempi->a1.reg!=REG_RAX) + if (tempi->a1.type&TY_MASK==TY_REG && tempi->a1.reg!=REG_RAX) r1=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r1=REG_RDX; } } @@ -237,12 +249,12 @@ U0 ICCmp(CIntermediateCode *tempi,I64 us,I64 is,I64 ip) ICU16(tempi,0x300+is); ICU24(tempi,0xC0FF48); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } } -U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *tempi2, - I64 op,I64 op_imm,I64 ip) +U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2, + CIntermediateCode *tempi2,I64 op,I64 op_imm,I64 ip) {//TODO:not fully utilizing Modr Bool no_depend=ToBool(tempi2->ic_flags&ICF_NO_DEPEND_RESULT); I64 r1,t2,r2,d2,i=0x48; @@ -251,8 +263,7 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *te r2=a2->reg; d2=a2->disp; if (tempi->ic_flags & ICF_A1_FIRST) { - if (a1->type&TY_MASK==TY_REG && - (a1->reg!=REG_RAX||no_depend)) + if (a1->type&TY_MASK==TY_REG && (a1->reg!=REG_RAX||no_depend)) r1=a1->reg; else if (a1->type&TY_MASK!=TY_IMM || a1->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); @@ -260,7 +271,8 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *te } else r1=0; if (!(TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) || - !(r2.u8[0]!=REG_RAX&&(t2&TY_MASK!=TY_SIB||r2.u8[1]&15!=REG_RAX)||no_depend)) { + !(r2.u8[0]!=REG_RAX&&(t2&TY_MASK!=TY_SIB||r2.u8[1]&15!=REG_RAX)|| + no_depend)) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,t2,r2,d2,ip); t2=TY_REG+RT_I64; r2=REG_RDX; @@ -268,14 +280,14 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *te } } else { if (!(TY_REG<=t2&TY_MASK<=TY_RIP_DISP32) || - !(r2.u8[0]!=REG_RAX&&(t2&TY_MASK!=TY_SIB||r2.u8[1]&15!=REG_RAX)||no_depend)) { + !(r2.u8[0]!=REG_RAX&&(t2&TY_MASK!=TY_SIB||r2.u8[1]&15!=REG_RAX)|| + no_depend)) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); t2=TY_REG+RT_I64; r2=REG_RCX; d2=0; } - if (a1->type&TY_MASK==TY_REG && - (a1->reg!=REG_RAX||no_depend)) + if (a1->type&TY_MASK==TY_REG && (a1->reg!=REG_RAX||no_depend)) r1=a1->reg; else if (a1->type&TY_MASK!=TY_IMM || a1->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); @@ -287,31 +299,27 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *te t2=TY_DISP+RT_I64; d2=0; if (tempi->ic_flags & ICF_A1_FIRST) { - if (a1->type&TY_MASK==TY_REG && - (a1->reg!=REG_RAX||no_depend)) + if (a1->type&TY_MASK==TY_REG && (a1->reg!=REG_RAX||no_depend)) r1=a1->reg; else if (a1->type&TY_MASK!=TY_IMM || a1->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); r1=REG_RCX; } else r1=0; - if (a2->type&TY_MASK==TY_REG && - (a2->reg!=REG_RAX||no_depend)) + if (a2->type&TY_MASK==TY_REG && (a2->reg!=REG_RAX||no_depend)) r2=a2->reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a2->type,a2->reg,a2->disp,ip); r2=REG_RDX; } } else { - if (a2->type&TY_MASK==TY_REG && - (a2->reg!=REG_RAX||no_depend)) + if (a2->type&TY_MASK==TY_REG && (a2->reg!=REG_RAX||no_depend)) r2=a2->reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip); r2=REG_RCX; } - if (a1->type&TY_MASK==TY_REG && - (a1->reg!=REG_RAX||no_depend)) + if (a1->type&TY_MASK==TY_REG && (a1->reg!=REG_RAX||no_depend)) r1=a1->reg; else if (a1->type&TY_MASK!=TY_IMM || a1->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); @@ -322,10 +330,8 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *te } if (!no_depend) ICZero(tempi,REG_RAX); - if (tempi->ic_flags&ICF_LOCK) { - if (op!=0xA30F) - ICU8(tempi,OC_LOCK_PREFIX); - } + if (tempi->ic_flags&ICF_LOCK && op!=0xA30F) + ICU8(tempi,OC_LOCK_PREFIX); if (a1->type&TY_MASK==TY_IMM && a1->disp<32) t2=t2&TY_MASK+RT_U32; i=ICModr1(r1,t2,r2,d2); @@ -341,7 +347,8 @@ U0 ICBitOps(CIntermediateCode *tempi,CICArg *a1,CICArg *a2,CIntermediateCode *te if (!no_depend) { ICU32(tempi,0xD08348); if (tempi->r.type&TY_MASK) - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,REG_RAX,0,ip); } } @@ -359,7 +366,8 @@ U0 ICPreempt(CIntermediateCode *tempi,I64 ip) ICU24(tempi,0x73BA0F); ICU16(tempi,CTask.task_flags+TASKf_PREEMPT<<8); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); if (!(tempi2->ic_flags&ICF_NO_DEPEND_RESULT)) ICZero(tempi,REG_RAX); ICZero(tempi,REG_RBX); @@ -379,7 +387,7 @@ U0 ICPreempt(CIntermediateCode *tempi,I64 ip) U0 ICToUpper(CIntermediateCode *tempi,I64 ip) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICU32(tempi,0x61F88348); ICU16(tempi,0x0A7C); ICU32(tempi,0x7AF88348); @@ -387,24 +395,26 @@ U0 ICToUpper(CIntermediateCode *tempi,I64 ip) ICU32(tempi,0xE0C08348); } -U0 ICToI64(CLex *lx,CIntermediateCode *tempi,I64 ip) +U0 ICToI64(CCmpCtrl *cc,CIntermediateCode *tempi,I64 ip) { - ICFCvt(lx,tempi,REG_RAX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_MAIN,ip); + ICFCvt(cc,tempi,REG_RAX, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_MAIN,ip); } -U0 ICToF64(CLex *lx,CIntermediateCode *tempi,I64 ip) +U0 ICToF64(CCmpCtrl *cc,CIntermediateCode *tempi,I64 ip) { - ICFCvt(lx,tempi,REG_RAX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_MAIN,ip); + ICFCvt(cc,tempi,REG_RAX, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_MAIN,ip); } -U0 ICToBool(CLex *,CIntermediateCode *tempi,I64 ip) +U0 ICToBool(CCmpCtrl *,CIntermediateCode *tempi,I64 ip) { I64 r; if (tempi->a1.type&TY_MASK==TY_REG) r=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RAX; } ICTest(tempi,r); @@ -418,33 +428,38 @@ U0 ICPreIncDec(CIntermediateCode *tempi,I64 op,I64 ip) CHashClass *tempc=tempi->ic_class,*tempc1=tempc-1; if (tempi->ic_flags & ICF_NOT_ADDR) { if (tempc->ptr_stars_cnt && tempc1->size!=1) { - ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - tempc1->size,op.u16[3],ip); + ICAddSubEctImm(tempi, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,tempc1->size,op.u16[3],ip); } else ICSlashOp(tempi, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,op,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,op,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); } else { if (tempi->a1.type&TY_MASK==TY_REG) r=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RCX; } if (tempc->ptr_stars_cnt && - tempc1->size!=1) { + tempc1->size!=1) { ICAddSubEctImm(tempi,TY_DISP+tempi->a1.type_pointed,r,0, - TY_DISP+tempi->a1.type_pointed,r,0, - tempc1->size,op.u16[3],ip); + TY_DISP+tempi->a1.type_pointed,r,0, + tempc1->size,op.u16[3],ip); } else ICSlashOp(tempi, - TY_DISP+tempi->a1.type_pointed,r,0,op,ip); + TY_DISP+tempi->a1.type_pointed,r,0,op,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_DISP+tempi->a1.type_pointed,r,0,ip); + TY_DISP+tempi->a1.type_pointed,r,0,ip); } } @@ -453,38 +468,37 @@ U0 ICPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip) I64 r; CHashClass *tempc=tempi->ic_class,*tempc1=tempc-1; if (tempi->ic_flags & ICF_NOT_ADDR) { - if (tempi->r.type&TY_MASK) { + if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); - } - if (tempc->ptr_stars_cnt && - tempc1->size!=1) { - ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - tempc1->size,op.u16[3],ip); - } else + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); + if (tempc->ptr_stars_cnt && tempc1->size!=1) + ICAddSubEctImm(tempi, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp, + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,tempc1->size,op.u16[3],ip); + else ICSlashOp(tempi, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,op,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,op,ip); } else { if (tempi->a1.type&TY_MASK==TY_REG && - !(tempi->r.type&TY_MASK==TY_REG && tempi->r.reg==tempi->a1.reg)) + !(tempi->r.type&TY_MASK==TY_REG && tempi->r.reg==tempi->a1.reg)) r=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RCX; } - if (tempi->r.type&TY_MASK) { + if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_DISP+tempi->a1.type_pointed,r,0,ip); - } - if (tempc->ptr_stars_cnt && - tempc1->size!=1) { + TY_DISP+tempi->a1.type_pointed,r,0,ip); + if (tempc->ptr_stars_cnt && tempc1->size!=1) ICAddSubEctImm(tempi,TY_DISP+tempi->a1.type_pointed,r,0, - TY_DISP+tempi->a1.type_pointed,r,0, - tempc1->size,op.u16[3],ip); - } else - ICSlashOp(tempi, - TY_DISP+tempi->a1.type_pointed,r,0,op,ip); + TY_DISP+tempi->a1.type_pointed,r,0,tempc1->size,op.u16[3],ip); + else + ICSlashOp(tempi,TY_DISP+tempi->a1.type_pointed,r,0,op,ip); } } @@ -499,35 +513,36 @@ U0 ICDerefPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip) if (tempi->a1.type&TY_MASK==TY_REG) r=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RDX; } ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_DISP+t,r,0,ip); - if (tempc1->size!=1) { - ICAddSubEctImm(tempi,tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp, - tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp, - tempc1->size,op.u16[3],ip); - } else + TY_DISP+t,r,0,ip); + if (tempc1->size!=1) + ICAddSubEctImm(tempi, + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp, + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp, + tempc1->size,op.u16[3],ip); + else ICSlashOp(tempi, - tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,op,ip); + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,op,ip); } else { if (tempi->a1.type&TY_MASK==TY_REG) r=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RCX; } - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_DISP+RT_I64,r,0,ip); - if (tempc1->size!=1) { - ICAddSubEctImm(tempi,TY_DISP+RT_I64,r,0, - TY_DISP+RT_I64,r,0, - tempc1->size,op.u16[3],ip); - } else + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,TY_DISP+RT_I64,r,0,ip); + if (tempc1->size!=1) + ICAddSubEctImm(tempi,TY_DISP+RT_I64,r,0,TY_DISP+RT_I64,r,0, + tempc1->size,op.u16[3],ip); + else ICSlashOp(tempi,TY_DISP+RT_I64,r,0,op,ip); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_DISP+t,REG_RDX,0,ip); + TY_DISP+t,REG_RDX,0,ip); } } @@ -539,46 +554,43 @@ U0 ICAssignPostIncDec(CIntermediateCode *tempi,I64 op,I64 ip) if (tempi->a1.type&TY_MASK==TY_REG) r=tempi->a1.reg; else { - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); r=REG_RDX; } ICMov(tempi,TY_DISP+tempi->a1.type_pointed,r,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - if (tempc1->size!=1 || tempi->a1.type&TY_MASK==TY_STK) { + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + if (tempc1->size!=1 || tempi->a1.type&TY_MASK==TY_STK) ICAddSubEctImm(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,r,0, - tempc1->size,op.u16[3],ip); - } else + TY_REG+RT_I64,r,0,tempc1->size,op.u16[3],ip); + else ICSlashOp(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,op,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, - TY_DISP+RT_I64,REG_RDX,0,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,TY_DISP+RT_I64,REG_RDX,0,ip); ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - if (tempc1->size!=1) { + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + if (tempc1->size!=1) ICAddSubEctImm(tempi,TY_DISP+RT_I64,REG_RDX,0, - TY_REG+RT_I64,REG_RCX,0, - tempc1->size,op.u16[3],ip); - } else + TY_REG+RT_I64,REG_RCX,0,tempc1->size,op.u16[3],ip); + else ICSlashOp(tempi,TY_DISP+RT_I64,REG_RDX,0,op,ip); } } U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip, - I64 us,I64 is,I64 not_us,I64 not_is, - U8 *buf,I64 ip2) + I64 us,I64 is,I64 not_us,I64 not_is,U8 *buf,I64 ip2) { I64 r1,r2,i=0x48,j,t1,t2,result_reg; Bool short_jmp,swap,done; - CLexCodeMisc *lb; + CCodeMisc *lb; CICArg *a1=&tempi->a1,*a2=&tempi->a2; j=a1->disp; @@ -596,7 +608,7 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip, if (a2->type&TY_MASK==TY_IMM && MIN_I32<=j<=MAX_I32) { if (!has_result && TY_REG<=a1->type&TY_MASK<=TY_RIP_DISP32) ICAddSubEctImm(tempi,a1->type,a1->reg,a1->disp, - a1->type,a1->reg,a1->disp,j,0x073B,ip2); + a1->type,a1->reg,a1->disp,j,0x073B,ip2); else { if (a1->type&TY_MASK==TY_REG) r1=a1->reg; @@ -655,8 +667,7 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip, ICU16(tempi,i.u8[2]<<8+0x3B); ICModr2(tempi,i,a2->disp,ip2+4); done=TRUE; - } else if (t1&RT_MASK>=RT_I64 && - TY_REG<=t1&TY_MASK<=TY_RIP_DISP32) { + } else if (t1&RT_MASK>=RT_I64 && TY_REG<=t1&TY_MASK<=TY_RIP_DISP32) { if (t2&TY_MASK!=TY_REG || t2&RT_MASKtype,a2->reg,a2->disp,ip2); @@ -750,14 +761,15 @@ U0 ICCmpAndBranch(CIntermediateCode *tempi,Bool has_result,I64 ip, ICU32(tempi,i); } if (has_result) - ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,TY_REG+RT_I64,result_reg,0,ip2); + ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, + TY_REG+RT_I64,result_reg,0,ip2); } U0 ICTestAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2) { I64 i; Bool short_jmp; - CLexCodeMisc *lb; + CCodeMisc *lb; if (tempi->a1.type&TY_MASK!=TY_REG) { if (tempi->a1.type&RT_MASK<=RT_U8 && @@ -768,7 +780,8 @@ U0 ICTestAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2) ICModr2(tempi,i,tempi->a1.disp,ip2+5); ICU8(tempi,0xFF); } else { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); ICTest(tempi,REG_RAX); } } else @@ -805,7 +818,7 @@ U0 ICFlagBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf) { I64 i; Bool short_jmp; - CLexCodeMisc *lb; + CCodeMisc *lb; ip+=tempi->ic_cnt; lb=OptLabelFwd(tempi->ic_data); diff --git a/Compiler/BackC.CPP b/Compiler/BackC.CPP index c46fc20..844c61d 100644 --- a/Compiler/BackC.CPP +++ b/Compiler/BackC.CPP @@ -3,7 +3,7 @@ U0 ICAndBranch(CIntermediateCode *tempi,I64 ip,I64 is,U8 *buf,I64 ip2) U64 i; I64 it,t1,r1,d1,r2; Bool short_jmp,swap,override; - CLexCodeMisc *lb; + CCodeMisc *lb; CICArg *a1,*a2; if (tempi->a1.type&TY_MASK==TY_IMM) { @@ -160,36 +160,40 @@ U0 ICAssign(CIntermediateCode *tempi,I64 ip) { CIntermediateCode *tempi1; if (tempi->ic_flags & ICF_NOT_ADDR) { - ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, + ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->r.type&TY_MASK) { if (tempi->a1.type&TY_MASK==TY_REG) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); else ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } } else { if (tempi->a1.type&TY_MASK==TY_REG) { if (!(tempi1=OptLag1(tempi)) || - tempi1->ic_code!=IC_ADD_CONST || - tempi1->r.type!=TY_REG+RT_I64 || tempi1->r.reg!=tempi->a1.reg || - tempi1->a1.type!=TY_REG+RT_I64 || tempi1->a1.reg!=tempi->a1.reg || - (tempi->a2.type&TY_MASK==TY_REG||tempi->a2.type&TY_MASK==TY_DISP) && - tempi->a2.reg==tempi->a1.reg || - tempi->r.type&TY_MASK || - tempi1->ic_flags&~ICG_NO_CVT_MASK) { + tempi1->ic_code!=IC_ADD_CONST || + tempi1->r.type!=TY_REG+RT_I64 || tempi1->r.reg!=tempi->a1.reg || + tempi1->a1.type!=TY_REG+RT_I64 || tempi1->a1.reg!=tempi->a1.reg || + (tempi->a2.type&TY_MASK==TY_REG||tempi->a2.type&TY_MASK==TY_DISP) && + tempi->a2.reg==tempi->a1.reg || + tempi->r.type&TY_MASK || + tempi1->ic_flags&~ICG_NO_CVT_MASK) { ICMov(tempi,TY_DISP+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { - tempi->ic_flags=(tempi->ic_flags|tempi1->ic_flags)&~ICF_CODE_FINAL|ICF_DONT_RESTORE; + tempi->ic_flags=(tempi->ic_flags|tempi1->ic_flags)& + ~ICF_CODE_FINAL|ICF_DONT_RESTORE; tempi->a1.disp=tempi1->ic_data; OptSetNOP1(tempi1); //This better not be last pass! - ICMov(tempi,TY_DISP+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, + ICMov(tempi,TY_DISP+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } } else { @@ -199,23 +203,25 @@ U0 ICAssign(CIntermediateCode *tempi,I64 ip) tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } } } -U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I64 ip2) +U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip, + I64 op,I64 op_imm,I64 is,U8 *buf,I64 ip2) { I64 i,t,r1,r2,d1,d2,t1,t2; CICArg *a1=&tempi->a1,*a2=&tempi->a2; Bool short_jmp; - CLexCodeMisc *lb; + CCodeMisc *lb; if (tempi->ic_flags & ICF_NOT_ADDR) { if (tempi->ic_flags & ICF_A1_FIRST) { - if (!(tempi->ic_flags&ICF_SWAP) && a1->type&TY_MASK!=TY_REG && (a1->type&TY_MASK!=TY_IMM || a1->disp>63) || - tempi->ic_flags&ICF_SWAP && a1->type&TY_MASK==TY_IMM && a1->disp<64 || - a1->type&TY_MASK==TY_STK) { + if (!(tempi->ic_flags&ICF_SWAP) && a1->type&TY_MASK!=TY_REG && + (a1->type&TY_MASK!=TY_IMM || a1->disp>63) || + tempi->ic_flags&ICF_SWAP && a1->type&TY_MASK==TY_IMM && + a1->disp<64 || a1->type&TY_MASK==TY_STK) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip2); t1=TY_REG+RT_I64; r1=REG_RCX; @@ -228,9 +234,10 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I r1=a1->reg; d1=a1->disp; } - if (tempi->ic_flags&ICF_SWAP && a2->type&TY_MASK!=TY_REG && (a2->type&TY_MASK!=TY_IMM || a2->disp>63) || - !(tempi->ic_flags&ICF_SWAP) && a2->type&TY_MASK==TY_IMM && a2->disp<64 || - a2->type&TY_MASK==TY_STK) { + if (tempi->ic_flags&ICF_SWAP && a2->type&TY_MASK!=TY_REG && + (a2->type&TY_MASK!=TY_IMM || a2->disp>63) || + !(tempi->ic_flags&ICF_SWAP) && a2->type&TY_MASK==TY_IMM && + a2->disp<64 || a2->type&TY_MASK==TY_STK) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a2->type,a2->reg,a2->disp,ip2); t2=TY_REG+RT_I64; r2=REG_RDX; @@ -244,9 +251,10 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I d2=a2->disp; } } else { - if (tempi->ic_flags&ICF_SWAP && a2->type&TY_MASK!=TY_REG && (a2->type&TY_MASK!=TY_IMM ||a2->disp>63)|| - !(tempi->ic_flags&ICF_SWAP) && a2->type&TY_MASK==TY_IMM && a2->disp<64 || - a2->type&TY_MASK==TY_STK) { + if (tempi->ic_flags&ICF_SWAP && a2->type&TY_MASK!=TY_REG && + (a2->type&TY_MASK!=TY_IMM ||a2->disp>63)|| + !(tempi->ic_flags&ICF_SWAP) && a2->type&TY_MASK==TY_IMM && + a2->disp<64 || a2->type&TY_MASK==TY_STK) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip2); t2=TY_REG+RT_I64; r2=REG_RCX; @@ -259,9 +267,10 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I r2=a2->reg; d2=a2->disp; } - if (!(tempi->ic_flags&ICF_SWAP) && a1->type&TY_MASK!=TY_REG && (a1->type&TY_MASK!=TY_IMM || a1->disp>63) || - tempi->ic_flags&ICF_SWAP && a1->type&TY_MASK==TY_IMM && a1->disp<64|| - a1->type&TY_MASK==TY_STK) { + if (!(tempi->ic_flags&ICF_SWAP) && a1->type&TY_MASK!=TY_REG && + (a1->type&TY_MASK!=TY_IMM || a1->disp>63) || + tempi->ic_flags&ICF_SWAP && a1->type&TY_MASK==TY_IMM && + a1->disp<64 || a1->type&TY_MASK==TY_STK) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); t1=TY_REG+RT_I64; r1=REG_RDX; @@ -283,14 +292,16 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I if (tempi->ic_flags & ICF_A1_FIRST) { if (a1->type&TY_MASK==TY_REG) r1=a1->reg; - else if (tempi->ic_flags&ICF_SWAP || a1->type&TY_MASK!=TY_IMM || a1->disp>63) { + else if (tempi->ic_flags&ICF_SWAP || a1->type&TY_MASK!=TY_IMM || + a1->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip2); r1=REG_RCX; } else r1=0; if (a2->type&TY_MASK==TY_REG) r2=a2->reg; - else if (!(tempi->ic_flags&ICF_SWAP) || a2->type&TY_MASK!=TY_IMM || a2->disp>63) { + else if (!(tempi->ic_flags&ICF_SWAP) || a2->type&TY_MASK!=TY_IMM || + a2->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a2->type,a2->reg,a2->disp,ip2); r2=REG_RDX; } else @@ -298,14 +309,16 @@ U0 ICBrBitOps(CIntermediateCode *tempi,I64 ip,I64 op,I64 op_imm,I64 is,U8 *buf,I } else { if (a2->type&TY_MASK==TY_REG) r2=a2->reg; - else if (!(tempi->ic_flags&ICF_SWAP) || a2->type&TY_MASK!=TY_IMM || a2->disp>63) { + else if (!(tempi->ic_flags&ICF_SWAP) || a2->type&TY_MASK!=TY_IMM || + a2->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip2); r2=REG_RCX; } else r2=0; if (a1->type&TY_MASK==TY_REG) r1=a1->reg; - else if (tempi->ic_flags&ICF_SWAP || a1->type&TY_MASK!=TY_IMM || a1->disp>63) { + else if (tempi->ic_flags&ICF_SWAP || a1->type&TY_MASK!=TY_IMM || + a1->disp>63) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); r1=REG_RDX; } else @@ -388,7 +401,7 @@ U0 ICQueInit(CIntermediateCode *tempi,I64 ip2) r1=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RAX; } ICMov(tempi,TY_DISP+RT_I64,r1,0,TY_REG+RT_I64,r1,0,ip2); @@ -403,14 +416,14 @@ U0 ICQueIns(CIntermediateCode *tempi,I64 ip2) r1=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RDX; } if (tempi->a2.type==TY_REG+RT_I64) r2=tempi->a2.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); r2=REG_RAX; } } else { @@ -418,14 +431,14 @@ U0 ICQueIns(CIntermediateCode *tempi,I64 ip2) r2=tempi->a2.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); r2=REG_RAX; } if (tempi->a1.type==TY_REG+RT_I64) r1=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RDX; } } @@ -444,14 +457,14 @@ U0 ICQueInsRev(CIntermediateCode *tempi,I64 ip2) r1=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RDX; } if (tempi->a2.type==TY_REG+RT_I64) r2=tempi->a2.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); r2=REG_RAX; } } else { @@ -459,14 +472,14 @@ U0 ICQueInsRev(CIntermediateCode *tempi,I64 ip2) r2=tempi->a2.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); r2=REG_RAX; } if (tempi->a1.type==TY_REG+RT_I64) r1=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RDX; } } @@ -484,7 +497,7 @@ U0 ICQueRem(CIntermediateCode *tempi,I64 ip2) r1=tempi->a1.reg; else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RAX; } ICMov(tempi,TY_REG+RT_I64,REG_RBX,0,TY_DISP+RT_I64,r1,0,ip2); @@ -504,17 +517,17 @@ U0 ICMinMax(CIntermediateCode *tempi,I64 op,I64 ip2) r1&=7; } ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); } else { if (tempi->a2.reg==REG_RAX && TY_REG<=tempi->a2.type&TY_MASK<=TY_SIB) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); r1=REG_RDX; ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); if (tempi->a2.type==TY_REG+RT_I64) { r1=tempi->a2.reg; if (r1>7) { @@ -524,7 +537,7 @@ U0 ICMinMax(CIntermediateCode *tempi,I64 op,I64 ip2) } else { r1=REG_RDX; ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); } } } @@ -536,17 +549,17 @@ U0 ICMinMax(CIntermediateCode *tempi,I64 op,I64 ip2) r1&=7; } ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); } else { if (tempi->a1.reg==REG_RAX && TY_REG<=tempi->a1.type&TY_MASK<=TY_SIB) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); r1=REG_RDX; ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); if (tempi->a1.type==TY_REG+RT_I64) { r1=tempi->a1.reg; if (r1>7) { @@ -556,7 +569,7 @@ U0 ICMinMax(CIntermediateCode *tempi,I64 op,I64 ip2) } else { r1=REG_RDX; ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); } } } @@ -576,8 +589,9 @@ U0 ICModU64(CIntermediateCode *tempi,I64 ip2) { I64 t1,r1,d1; if (tempi->ic_flags & ICF_A1_FIRST) { - if (tempi->a1.reg!=REG_RAX && tempi->a1.reg!=REG_RDX && TY_REG<=tempi->a1.type&TY_MASK<=TY_SIB && - tempi->a1.type&RT_MASK>=RT_I64) { + if (tempi->a1.reg!=REG_RAX && tempi->a1.reg!=REG_RDX && + TY_REG<=tempi->a1.type&TY_MASK<=TY_SIB && + tempi->a1.type&RT_MASK>=RT_I64) { t1=tempi->a1.type; r1=tempi->a1.reg; d1=tempi->a1.disp; @@ -586,15 +600,16 @@ U0 ICModU64(CIntermediateCode *tempi,I64 ip2) r1=REG_RBX; d1=0; ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); } ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); } else { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - if (tempi->a1.reg!=REG_RAX && tempi->a1.reg!=REG_RDX && TY_REG<=tempi->a1.type&TY_MASK<=TY_SIB && - tempi->a1.type&RT_MASK>=RT_I64) { + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + if (tempi->a1.reg!=REG_RAX && tempi->a1.reg!=REG_RDX && + TY_REG<=tempi->a1.type&TY_MASK<=TY_SIB && + tempi->a1.type&RT_MASK>=RT_I64) { t1=tempi->a1.type; r1=tempi->a1.reg; d1=tempi->a1.disp; @@ -603,7 +618,7 @@ U0 ICModU64(CIntermediateCode *tempi,I64 ip2) r1=REG_RBX; d1=0; ICMov(tempi,TY_REG+RT_I64,REG_RBX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); } } ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,TY_DISP+RT_I64,REG_RCX,0,ip2); @@ -611,7 +626,7 @@ U0 ICModU64(CIntermediateCode *tempi,I64 ip2) ICSlashOp(tempi,t1,r1,d1,SLASH_OP_DIV,ip2); ICMov(tempi,TY_DISP+RT_I64,REG_RCX,0,TY_REG+RT_I64,REG_RAX,0,ip2); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_REG+RT_I64,REG_RDX,0,ip2); + TY_REG+RT_I64,REG_RDX,0,ip2); } U0 ICSwap(CIntermediateCode *tempi,I64 ip2) @@ -632,8 +647,10 @@ U0 ICSwap(CIntermediateCode *tempi,I64 ip2) else r1=REG_RAX; } - ICMov(tempi,TY_REG+RT_I64,r1,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,r2,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,r1,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,r2,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); } else { if (r1==r2) { if (r1==REG_RAX) @@ -641,8 +658,10 @@ U0 ICSwap(CIntermediateCode *tempi,I64 ip2) else r2=REG_RAX; } - ICMov(tempi,TY_REG+RT_I64,r2,0,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); - ICMov(tempi,TY_REG+RT_I64,r1,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,r2,0, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); + ICMov(tempi,TY_REG+RT_I64,r1,0, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); } switch (tempi->ic_code) { case IC_SWAP_U8: @@ -675,17 +694,15 @@ U0 ICSwap(CIntermediateCode *tempi,I64 ip2) U0 ICAndEqual(CIntermediateCode *tempi,I64 ip2) { I64 i,bit; - if (tempi->a2.type&TY_MASK==TY_IMM && - tempi->a1.type&TY_MASK!=TY_STK && - tempi->ic_flags&ICF_NO_DEPEND_RESULT) { + if (tempi->a2.type&TY_MASK==TY_IMM && tempi->a1.type&TY_MASK!=TY_STK && + tempi->ic_flags&ICF_NO_DEPEND_RESULT) { i=~tempi->a2.disp; bit=Bsf(i); if (0<=bit==Bsr(i)) { tempi->a2.disp=bit; tempi->a2.reg=0; tempi->a1.type=tempi->a1.type&TY_MASK+RT_I64; - ICBitOps(tempi,&tempi->a2,&tempi->a1,tempi, - 0xB30F,0x30BA0F,ip2); + ICBitOps(tempi,&tempi->a2,&tempi->a1,tempi,0xB30F,0x30BA0F,ip2); return; } } @@ -698,17 +715,15 @@ U0 ICAndEqual(CIntermediateCode *tempi,I64 ip2) U0 ICOrEqual(CIntermediateCode *tempi,I64 ip2) { I64 i,bit; - if (tempi->a2.type&TY_MASK==TY_IMM && - tempi->a1.type&TY_MASK!=TY_STK && - tempi->ic_flags&ICF_NO_DEPEND_RESULT) { + if (tempi->a2.type&TY_MASK==TY_IMM && tempi->a1.type&TY_MASK!=TY_STK && + tempi->ic_flags&ICF_NO_DEPEND_RESULT) { i=tempi->a2.disp; bit=Bsf(i); if (0<=bit==Bsr(i) && i>MAX_I8) { tempi->a2.disp=bit; tempi->a2.reg=0; tempi->a1.type=tempi->a1.type&TY_MASK+RT_I64; - ICBitOps(tempi,&tempi->a2,&tempi->a1,tempi, - 0xAB0F,0x28BA0F,ip2); + ICBitOps(tempi,&tempi->a2,&tempi->a1,tempi,0xAB0F,0x28BA0F,ip2); return; } } @@ -721,17 +736,15 @@ U0 ICOrEqual(CIntermediateCode *tempi,I64 ip2) U0 ICXorEqual(CIntermediateCode *tempi,I64 ip2) { I64 i,bit; - if (tempi->a2.type&TY_MASK==TY_IMM && - tempi->a1.type&TY_MASK!=TY_STK && - tempi->ic_flags&ICF_NO_DEPEND_RESULT) { + if (tempi->a2.type&TY_MASK==TY_IMM && tempi->a1.type&TY_MASK!=TY_STK && + tempi->ic_flags&ICF_NO_DEPEND_RESULT) { i=tempi->a2.disp; bit=Bsf(i); if (0<=bit==Bsr(i)) { tempi->a2.disp=bit; tempi->a2.reg=0; tempi->a1.type=tempi->a1.type&TY_MASK+RT_I64; - ICBitOps(tempi,&tempi->a2,&tempi->a1,tempi, - 0xBB0F,0x38BA0F,ip2); + ICBitOps(tempi,&tempi->a2,&tempi->a1,tempi,0xBB0F,0x38BA0F,ip2); return; } } @@ -741,12 +754,13 @@ U0 ICXorEqual(CIntermediateCode *tempi,I64 ip2) tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x310635340633,ip2); } -U0 ICSwitch(CIntermediateCode *tempi,I64 ip,Bool nobound,CLex *lx,U8 *buf,I64 ip2) +U0 ICSwitch(CIntermediateCode *tempi,I64 ip, + Bool nobound,CCmpCtrl *cc,U8 *buf,I64 ip2) { I64 i,j,cnt,min,max,begin,r; - CLexCodeMisc *lb; + CCodeMisc *lb; Bool short_jmp; - CExeAbsAddr *tempa; + CAOTAbsAddr *tempa; if (tempi->a1.type&TY_MASK!=TY_REG || tempi->a1.reg&7==REG_RSP) r=REG_RDX; else @@ -794,7 +808,7 @@ U0 ICSwitch(CIntermediateCode *tempi,I64 ip,Bool nobound,CLex *lx,U8 *buf,I64 ip } ip+=tempi->ic_cnt; - lb=tempi->ic_data(CLexCodeMisc *)->dft; + lb=tempi->ic_data(CCodeMisc *)->dft; short_jmp=ToBool(tempi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { i=lb->addr-(ip+2); @@ -876,25 +890,26 @@ U0 ICSwitch(CIntermediateCode *tempi,I64 ip,Bool nobound,CLex *lx,U8 *buf,I64 ip } ICU24(tempi,0x851C8B+(r&7)<<19); } - if (buf && lx->flags&LF_AOT_COMPILE) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=lx->a->abss; - tempa->type=EAT_ADD_U32; - lx->a->abss=tempa; + if (buf && cc->flags&CCF_AOT_COMPILE) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=cc->aotc->abss; + tempa->type=AAT_ADD_U32; + cc->aotc->abss=tempa; tempa->ip=ip2+tempi->ic_cnt; - ICU32(tempi,lb->addr+lx->a->ip); + ICU32(tempi,lb->addr+cc->aotc->ip); } else ICU32(tempi,lb->addr+buf); - if (lb->flags&(CMF_I8_JMP_TABLE|CMF_U8_JMP_TABLE|CMF_I16_JMP_TABLE|CMF_U16_JMP_TABLE)) { + if (lb->flags&(CMF_I8_JMP_TABLE|CMF_U8_JMP_TABLE| + CMF_I16_JMP_TABLE|CMF_U16_JMP_TABLE)) { ICU16(tempi,0xC381); //ADD EBX,0x12345678 - if (buf && lx->flags&LF_AOT_COMPILE) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=lx->a->abss; - tempa->type=EAT_ADD_U32; - lx->a->abss=tempa; + if (buf && cc->flags&CCF_AOT_COMPILE) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=cc->aotc->abss; + tempa->type=AAT_ADD_U32; + cc->aotc->abss=tempa; tempa->ip=ip2+tempi->ic_cnt; - ICU32(tempi,begin+lx->a->ip); + ICU32(tempi,begin+cc->aotc->ip); } else ICU32(tempi,begin+buf); } else diff --git a/Compiler/BackFA.CPP b/Compiler/BackFA.CPP index bbfd2d1..d31c9cd 100644 --- a/Compiler/BackFA.CPP +++ b/Compiler/BackFA.CPP @@ -3,22 +3,24 @@ #define CN_MAIN 2 #define CN_R 3 -U0 CmpNoteFloatOp(CLex *lx,CIntermediateCode *tempi,Bool dont_pushable,Bool dont_popable,I64 pos) +U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tempi, + Bool dont_pushable,Bool dont_popable,I64 pos) { Bool link=FALSE; - if (lx->pass==7 && lx->last_float_op_ic && lx->last_dont_popable && dont_pushable) { + if (cc->pass==7 && cc->last_float_op_ic && + cc->last_dont_popable && dont_pushable) { nobound_switch (pos) { case CN_A2: - if (lx->last_float_op_ic!=tempi && lx->dont_push_float) + if (cc->last_float_op_ic!=tempi && cc->dont_push_float) link=TRUE; break; case CN_A1: - if (lx->last_float_op_ic!=tempi && lx->dont_push_float) + if (cc->last_float_op_ic!=tempi && cc->dont_push_float) link=TRUE; break; case CN_MAIN: - if (lx->last_float_op_ic!=tempi) { - if (lx->dont_push_float) { + if (cc->last_float_op_ic!=tempi) { + if (cc->dont_push_float) { if (!(tempi->ic_flags & ICF_A1_FIRST)) tempi->ic_flags|=ICF_ALTERNATE_TEMPLATE; else @@ -26,7 +28,7 @@ U0 CmpNoteFloatOp(CLex *lx,CIntermediateCode *tempi,Bool dont_pushable,Bool dont link=TRUE; } } else { - if (lx->last_float_op_pos==CN_A1 ^^ !(tempi->ic_flags & ICF_A1_FIRST)) + if (cc->last_float_op_pos==CN_A1 ^^ !(tempi->ic_flags & ICF_A1_FIRST)) tempi->ic_flags|=ICF_ALTERNATE_TEMPLATE; else tempi->ic_flags&=~ICF_ALTERNATE_TEMPLATE; @@ -34,39 +36,43 @@ U0 CmpNoteFloatOp(CLex *lx,CIntermediateCode *tempi,Bool dont_pushable,Bool dont } break; case CN_R: - if (lx->last_float_op_ic==tempi && lx->last_float_op_pos==CN_MAIN) + if (cc->last_float_op_ic==tempi && cc->last_float_op_pos==CN_MAIN) link=TRUE; break; } if (link) { - if (!Bts(&lx->last_float_op_ic->ic_flags,ICf_DONT_POP_FLOAT0+lx->last_ic_float_op_num)) - lx->last_float_op_ic->ic_flags&=~ICF_CODE_FINAL; - if (!Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+lx->cur_ic_float_op_num)) + if (!Bts(&cc->last_float_op_ic->ic_flags, + ICf_DONT_POP_FLOAT0+cc->last_ic_float_op_num)) + cc->last_float_op_ic->ic_flags&=~ICF_CODE_FINAL; + if (!Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+cc->cur_ic_float_op_num)) tempi->ic_flags&=~ICF_CODE_FINAL; } } - lx->last_float_op_ic=tempi; - lx->last_dont_pushable=dont_pushable; - lx->last_dont_popable=dont_popable; - lx->last_ic_float_op_num=lx->cur_ic_float_op_num++; - lx->last_float_op_pos=pos; - if (lx->cur_ic_float_op_num>4) + cc->last_float_op_ic=tempi; + cc->last_dont_pushable=dont_pushable; + cc->last_dont_popable=dont_popable; + cc->last_ic_float_op_num=cc->cur_ic_float_op_num++; + cc->last_float_op_pos=pos; + if (cc->cur_ic_float_op_num>4) throw('Compiler'); } -U0 CmpSetFloatOpPushPop(CLex *lx,CIntermediateCode *tempi,Bool *dont_push_float,Bool *dont_pop_float) +U0 CmpSetFloatOpPushPop(CCmpCtrl *cc,CIntermediateCode *tempi, + Bool *dont_push_float,Bool *dont_pop_float) { - if (lx->pass==7) { + if (cc->pass==7) { *dont_push_float=FALSE; *dont_pop_float =FALSE; tempi->ic_flags&=~ICF_CODE_FINAL; } else { - *dont_push_float=Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+lx->cur_ic_float_op_num); - *dont_pop_float=Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+lx->cur_ic_float_op_num); + *dont_push_float=Bt(&tempi->ic_flags, + ICf_DONT_PUSH_FLOAT0+cc->cur_ic_float_op_num); + *dont_pop_float=Bt(&tempi->ic_flags, + ICf_DONT_POP_FLOAT0+cc->cur_ic_float_op_num); } } -U0 ICCopyTemplate(CLex *lx,CIntermediateCode *tempi,I64 op, +U0 ICCopyTemplate(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op, Bool off_the_record,Bool dont_pushable,Bool dont_popable,I64 pos) { Bool dont_push_float,dont_pop_float,alt; @@ -77,7 +83,7 @@ U0 ICCopyTemplate(CLex *lx,CIntermediateCode *tempi,I64 op, alt=TRUE; else alt=FALSE; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); } else { dont_push_float=FALSE; dont_pop_float=FALSE; @@ -108,11 +114,12 @@ U0 ICCopyTemplate(CLex *lx,CIntermediateCode *tempi,I64 op, } MemCpy(&tempi->ic_body[tempi->ic_cnt],ptr,i); if (!off_the_record) - CmpNoteFloatOp(lx,tempi,dont_pushable,dont_popable,pos); + CmpNoteFloatOp(cc,tempi,dont_pushable,dont_popable,pos); tempi->ic_cnt+=i; } -U0 ICFCvt(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to_int,I64 pos,I64 ip) +U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tempi, + I64 r1,I64 t2,I64 r2,I64 d2,Bool to_int,I64 pos,I64 ip) { I64 rsp_size=0,op1,op2; Bool dont_push_float,dont_pop_float; @@ -125,12 +132,12 @@ U0 ICFCvt(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to_ op2=SLASH_OP_FSTP; } - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (!dont_push_float) { if (!(t2&RT_MASK>=RT_I64 && - (t2&TY_MASK==TY_DISP || - t2&TY_MASK==TY_RIP_DISP32 || - t2&TY_MASK==TY_SIB))) { + (t2&TY_MASK==TY_DISP || + t2&TY_MASK==TY_RIP_DISP32 || + t2&TY_MASK==TY_SIB))) { ICPush(tempi,t2,r2,d2,ip); t2=TY_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size=8; @@ -148,9 +155,9 @@ U0 ICFCvt(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to_ } } if (to_int) - CmpNoteFloatOp(lx,tempi,TRUE,FALSE,pos); + CmpNoteFloatOp(cc,tempi,TRUE,FALSE,pos); else - CmpNoteFloatOp(lx,tempi,FALSE,TRUE,pos); + CmpNoteFloatOp(cc,tempi,FALSE,TRUE,pos); if (dont_pop_float) { if (rsp_size) ICAddRSP(tempi,rsp_size); @@ -160,7 +167,8 @@ U0 ICFCvt(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to_ } } -U0 ICFCvt2(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to_int,I64 ip) +U0 ICFCvt2(CCmpCtrl *cc,CIntermediateCode *tempi, + I64 r1,I64 t2,I64 r2,I64 d2,Bool to_int,I64 ip) { I64 rsp_size=0,op1,op2; if (to_int) { @@ -171,9 +179,9 @@ U0 ICFCvt2(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to op2=SLASH_OP_FSTP; } if (!(t2&RT_MASK>=RT_I64 && - (t2&TY_MASK==TY_DISP || - t2&TY_MASK==TY_RIP_DISP32 || - t2&TY_MASK==TY_SIB))) { + (t2&TY_MASK==TY_DISP || + t2&TY_MASK==TY_RIP_DISP32 || + t2&TY_MASK==TY_SIB))) { ICPush(tempi,t2,r2,d2,ip); t2=TY_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size=8; @@ -184,24 +192,24 @@ U0 ICFCvt2(CLex *lx,CIntermediateCode *tempi,I64 r1,I64 t2,I64 r2,I64 d2,Bool to ICSlashOp(tempi,t2,r2,d2,op1,ip); ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,ip); ICPop(tempi,TY_REG+RT_I64,r1,0,ip); - lx->last_dont_pushable=lx->last_dont_popable=FALSE; //TODO: might improve this + cc->last_dont_pushable=cc->last_dont_popable=FALSE; //TODO: improve this } -U0 ICFUnaryMinus(CLex *lx,CIntermediateCode *tempi,U8 *buf2,I64 ip) +U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tempi,U8 *buf2,I64 ip) { CICArg *a1=&tempi->a1; I64 rsp_size=0,builtin1=0,t1,r1,d1; Bool dont_push_float,dont_pop_float; - if (lx->flags&LF_AOT_COMPILE) - buf2=lx->a->ip; + if (cc->flags&CCF_AOT_COMPILE) + buf2=cc->aotc->ip; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (!dont_push_float) { if (a1->type&RT_MASK>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || + a1->type&TY_MASK==TY_SIB)) { t1=a1->type; r1=a1->reg; d1=a1->disp; @@ -210,7 +218,7 @@ U0 ICFUnaryMinus(CLex *lx,CIntermediateCode *tempi,U8 *buf2,I64 ip) if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { t1=TY_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=LCCFloatConstFind(lx,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; } } else { ICPush(tempi,a1->type,a1->reg,a1->disp,ip); @@ -228,7 +236,7 @@ U0 ICFUnaryMinus(CLex *lx,CIntermediateCode *tempi,U8 *buf2,I64 ip) ICAddRSP(tempi,-8); } ICU16(tempi,0xE0D9); //FCHS - CmpNoteFloatOp(lx,tempi,TRUE,TRUE,CN_MAIN); + CmpNoteFloatOp(cc,tempi,TRUE,TRUE,CN_MAIN); if (dont_pop_float) { if (rsp_size) ICAddRSP(tempi,rsp_size); @@ -238,81 +246,83 @@ U0 ICFUnaryMinus(CLex *lx,CIntermediateCode *tempi,U8 *buf2,I64 ip) } } -U0 ICFMod(CLex *lx,CIntermediateCode *tempi,I64 ip) +U0 ICFMod(CCmpCtrl *cc,CIntermediateCode *tempi,I64 ip) {//for MOD Bool dont_push_float,dont_pop_float; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (dont_push_float) { if (tempi->ic_flags&ICF_ALTERNATE_TEMPLATE) ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); else ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { if (tempi->ic_flags & ICF_A1_FIRST) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } } - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); //TODO: unpushable,unpop? Not sure +//TODO: unpushable,unpop? Not sure + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); if (!dont_pop_float) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } -U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) +U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tempi,U8 *buf,I64 ip) {//for POW I64 i; - CExeImportExport *tempe; - CHashExport *tempex=HashFind("SYS_POW",lx->htc.hash_table_lst,HTT_EXPORT_SYS_SYM); + CAOTImportExport *tempie; + CHashExport *tempex=HashFind("SYS_POW", + cc->htc.hash_table_lst,HTT_EXPORT_SYS_SYM); if (tempi->ic_flags & ICF_A1_FIRST) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } - if (lx->flags&LF_AOT_COMPILE) { + if (cc->flags&CCF_AOT_COMPILE) { if (!tempex) { tempex=CAlloc(sizeof(CHashExport)); tempex->str=StrNew("SYS_POW"); tempex->type=HTT_EXPORT_SYS_SYM|HTF_UNRESOLVED|HTF_IMPORT; - HashAdd(tempex,lx->htc.glbl_hash_table); + HashAdd(tempex,cc->htc.glbl_hash_table); } if (tempex->type&HTF_IMPORT) { if (GetOpt(OPTf_USE_IMM64)) { ICU16(tempi,0xBB48); ICU64(tempi,0); if (buf) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_IMM_I64; - tempe->ip=ip+tempi->ic_cnt-8; - tempe->next=tempex->ie_lst; - tempex->ie_lst=tempe; + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_IMM_I64; + tempie->ip=ip+tempi->ic_cnt-8; + tempie->next=tempex->ie_lst; + tempex->ie_lst=tempie; } ICU16(tempi,0xD3FF); } else { ICU8(tempi,0xE8); ICU32(tempi,-(ip+tempi->ic_cnt+4)); if (buf) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_REL_I32; - tempe->ip=ip+tempi->ic_cnt-4; - tempe->next=tempex->ie_lst; - tempex->ie_lst=tempe; + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_REL_I32; + tempie->ip=ip+tempi->ic_cnt-4; + tempie->next=tempex->ie_lst; + tempex->ie_lst=tempie; } } } else {//Kernel @@ -323,8 +333,8 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) if (!(MIN_I32<=i<=MAX_I32)) { throw('Compiler'); // ICU16(tempi,0xBB48); -// ICU64(tempi,tempex->val); -// ICU16(tempi,0xD3FF); + // ICU64(tempi,tempex->val); + // ICU16(tempi,0xD3FF); } else { ICU8(tempi,0xE8); ICU32(tempi,i); @@ -344,15 +354,15 @@ U0 ICFPow(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) } tempi->ic_flags&=~ICF_CODE_FINAL; ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } -U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) +U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) {//for ADD,SUB,DIV,MUL CICArg *a1,*a2; Bool dont_push_float,dont_pop_float,alt; I64 rsp_size=0,builtin1=0,builtin2=0, - t1,r1,d1,t2,r2,d2; + t1,r1,d1,t2,r2,d2; if (tempi->ic_flags&ICF_ALTERNATE_TEMPLATE) { a1=&tempi->a2; @@ -364,15 +374,13 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) alt=FALSE; } - if (lx->flags&LF_AOT_COMPILE) - buf2=lx->a->ip; + if (cc->flags&CCF_AOT_COMPILE) + buf2=cc->aotc->ip; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (dont_push_float) { - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -381,7 +389,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -392,10 +400,8 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } else { if (tempi->ic_flags & ICF_A1_FIRST^^alt) { if (a2->type&TY_MASK!=TY_STK) { - if (a1->type&RT_MASK>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type&RT_MASK>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type; r1=a1->reg; d1=a1->disp; @@ -404,7 +410,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { t1=TY_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=LCCFloatConstFind(lx,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; } } else { ICPush(tempi,a1->type,a1->reg,a1->disp,ip); @@ -412,10 +418,8 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) rsp_size+=8; } } - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -424,7 +428,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -436,9 +440,9 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } } else { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - a1->type,a1->reg,a1->disp,ip); + a1->type,a1->reg,a1->disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip); + a2->type,a2->reg,a2->disp,ip); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -446,10 +450,8 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } } else { if (a1->type&TY_MASK!=TY_STK) { - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -458,7 +460,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -466,10 +468,8 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) rsp_size+=8; } } - if (a1->type&RT_MASK>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type&RT_MASK>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type; r1=a1->reg; d1=a1->disp; @@ -478,7 +478,7 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { t1=TY_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=LCCFloatConstFind(lx,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; } } else { ICPush(tempi,a1->type,a1->reg,a1->disp,ip); @@ -489,10 +489,8 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } } } else { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - a1->type,a1->reg,a1->disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -519,136 +517,144 @@ U0 ICFOp(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } if (alt) switch (op.u8[0]) { - case 4: //FSUB - op=SLASH_OP_FSUBR; - break; - case 6: //FDIV - op=SLASH_OP_FDIVR; - break; + case 4: op=SLASH_OP_FSUBR; break; + case 6: op=SLASH_OP_FDIVR; break; } if (builtin2) { ICU16(tempi,builtin2); ICU16(tempi,op.u16[2]); } else ICSlashOp(tempi,t2,r2,d2,op,ip); - CmpNoteFloatOp(lx,tempi,TRUE,TRUE,CN_MAIN); + CmpNoteFloatOp(cc,tempi,TRUE,TRUE,CN_MAIN); if (dont_pop_float) { if (rsp_size) ICAddRSP(tempi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0, + SLASH_OP_FSTP,ip); else if (rsp_size>8) { - ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, + SLASH_OP_FSTP,ip); ICAddRSP(tempi,rsp_size-8); } ICPop(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp,ip); } } -U0 ICFCmp(CLex *lx,CIntermediateCode *tempi,I64 op,I64 ip) +U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op,I64 ip) { Bool dont_push_float,dont_pop_float; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (dont_push_float) { if (tempi->ic_flags&ICF_ALTERNATE_TEMPLATE) { if (tempi->ic_flags&ICF_POP_CMP) ICPopRegs(tempi,1<a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } else ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { if (tempi->ic_flags & ICF_A1_FIRST) { if (tempi->ic_flags&ICF_POP_CMP) ICPopRegs(tempi,1<a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); if (tempi->ic_flags&ICF_POP_CMP) ICPopRegs(tempi,1<a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } } if (tempi->ic_flags&ICF_PUSH_CMP) ICPushRegs(tempi,1<r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } -U0 ICFModEqual(CLex *lx,CIntermediateCode *tempi,I64 ip) +U0 ICFModEqual(CCmpCtrl *cc,CIntermediateCode *tempi,I64 ip) { Bool dont_push_float,dont_pop_float; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (tempi->ic_flags & ICF_NOT_ADDR) { if (dont_push_float) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); } else if (tempi->ic_flags & ICF_A1_FIRST) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); } - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); //TODO: unpushable,unpop? Not sure +//TODO: unpushable,unpop? Not sure + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); + ICMov(tempi,tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,TY_REG+RT_I64,REG_RAX,0,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type&TY_MASK+tempi->a1.type_pointed,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+tempi->a1.type_pointed, + tempi->a1.reg,tempi->a1.disp,ip); } else { if (dont_push_float) { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type, + tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); + TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); } else if (tempi->ic_flags & ICF_A1_FIRST) { - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type, + tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); + TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,tempi->a1.type, + tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); + TY_DISP+tempi->a1.type_pointed,REG_RCX,0,ip); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); } - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); //TODO: unpushable,unpop? Not sure +//TODO: unpushable,unpop? Not sure + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); if (tempi->a1.type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0,TY_REG+RT_I64,REG_RAX,0,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); + ICMov(tempi,TY_DISP+tempi->a1.type_pointed,REG_RCX,0, + TY_REG+RT_I64,REG_RAX,0,ip); if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } } diff --git a/Compiler/BackFB.CPP b/Compiler/BackFB.CPP index 7da0274..f6eaac3 100644 --- a/Compiler/BackFB.CPP +++ b/Compiler/BackFB.CPP @@ -1,15 +1,15 @@ -U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) +U0 ICFOpEqual(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) {//for ADD,SUB,DIV,MUL CICArg *a1=&tempi->a1, - *a2=&tempi->a2; + *a2=&tempi->a2; Bool dont_push_float,dont_pop_float,p1_mem; I64 rsp_size=0,builtin2=0, - t1,r1,d1,t2,r2,d2; + t1,r1,d1,t2,r2,d2; - if (lx->flags&LF_AOT_COMPILE) - buf2=lx->a->ip; + if (cc->flags&CCF_AOT_COMPILE) + buf2=cc->aotc->ip; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (dont_pop_float) throw('Compiler'); @@ -18,16 +18,14 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (dont_push_float) { if (a1->type_pointed!=RT_F64) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); + a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); ICPush(tempi,TY_REG+RT_I64,REG_RAX,0,ip); t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (a1->type_pointed>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type_pointed>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type_pointed+a1->type&TY_MASK; r1=a1->reg; d1=a1->disp; @@ -41,21 +39,19 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } else if (tempi->ic_flags & ICF_A1_FIRST) { if (a1->type_pointed!=RT_F64 || a2->type&TY_MASK==TY_STK) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); + a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); if (a1->type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip); + a2->type,a2->reg,a2->disp,ip); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=TY_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a1->type_pointed>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type_pointed>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type_pointed+a1->type&TY_MASK; r1=a1->reg; d1=a1->disp; @@ -65,10 +61,8 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -77,7 +71,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -90,21 +84,18 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } } else { if (a1->type_pointed!=RT_F64 || a1->type&TY_MASK==TY_STK) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); + a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); if (a1->type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=TY_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -113,7 +104,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -121,10 +112,8 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) rsp_size+=8; } } - if (a1->type_pointed>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type_pointed>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type_pointed+a1->type&TY_MASK; r1=a1->reg; d1=a1->disp; @@ -149,37 +138,35 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) ICSlashOp(tempi,t2,r2,d2,SLASH_OP_FLD,ip); } switch (op.u8[0]) { - case 4: //FSUB - op=SLASH_OP_FSUBR; - break; - case 6: //FDIV - op=SLASH_OP_FDIVR; - break; + case 4: op=SLASH_OP_FSUBR; break; + case 6: op=SLASH_OP_FDIVR; break; } ICSlashOp(tempi,t1,r1,d1,op,ip); - CmpNoteFloatOp(lx,tempi,TRUE,FALSE,CN_MAIN); + CmpNoteFloatOp(cc,tempi,TRUE,FALSE,CN_MAIN); if (p1_mem && a1->type_pointed==RT_F64) { ICSlashOp(tempi,t1,r1,d1,SLASH_OP_FSTP,ip); if (rsp_size) ICAddRSP(tempi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0, + SLASH_OP_FSTP,ip); else if (rsp_size>8) { - ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, + SLASH_OP_FSTP,ip); ICAddRSP(tempi,rsp_size-8); } if (a1->type_pointed!=RT_F64) { ICPop(tempi,TY_REG+RT_I64,REG_RAX,0,ip); - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); ICMov(tempi,a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else ICPop(tempi,a1->type_pointed+a1->type&TY_MASK,a1->reg,a1->disp,ip); } if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); + a1->type&TY_MASK+a1->type_pointed,a1->reg,a1->disp,ip); } else { if (a1->type_pointed>=RT_I64) p1_mem=TRUE; @@ -189,8 +176,8 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); if (a1->type_pointed!=RT_F64) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_DISP+a1->type_pointed,REG_RCX,0,ip); - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); + TY_DISP+a1->type_pointed,REG_RCX,0,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,FALSE,ip); ICPush(tempi,TY_REG+RT_I64,REG_RAX,0,ip); } else ICPush(tempi,a1->type_pointed+TY_DISP,REG_RCX,0,ip); @@ -200,11 +187,10 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); if (a1->type_pointed!=RT_F64 || a2->type&TY_MASK==TY_STK) { ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_DISP+a1->type_pointed,REG_RCX,0,ip); + TY_DISP+a1->type_pointed,REG_RCX,0,ip); if (a1->type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; @@ -214,10 +200,8 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) ICPush(tempi,TY_DISP+a1->type_pointed,REG_RCX,0,ip); t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -226,7 +210,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -239,22 +223,19 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } } else { if (a1->type_pointed!=RT_F64 || a1->type&TY_MASK==TY_STK) { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_DISP+a1->type_pointed,REG_RCX,0,ip); + TY_DISP+a1->type_pointed,REG_RCX,0,ip); if (a1->type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); + ICFCvt2(cc,tempi,REG_RDX,TY_REG+RT_I64,REG_RDX,0,FALSE,ip); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=TY_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -263,7 +244,7 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip); @@ -291,45 +272,44 @@ U0 ICFOpEqual(CLex *lx,CIntermediateCode *tempi,I64 op,U8 *buf2,I64 ip) } switch (op.u8[0]) { - case 4: //FSUB - op=SLASH_OP_FSUBR; - break; - case 6: //FDIV - op=SLASH_OP_FDIVR; - break; + case 4: op=SLASH_OP_FSUBR; break; + case 6: op=SLASH_OP_FDIVR; break; } ICSlashOp(tempi,t1,r1,d1,op,ip); - CmpNoteFloatOp(lx,tempi,TRUE,FALSE,CN_MAIN); + CmpNoteFloatOp(cc,tempi,TRUE,FALSE,CN_MAIN); if (p1_mem && a1->type_pointed==RT_F64) { - ICSlashOp(tempi,TY_DISP+a1->type_pointed,REG_RCX,0,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_DISP+a1->type_pointed,REG_RCX,0, + SLASH_OP_FSTP,ip); if (rsp_size) ICAddRSP(tempi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,0, + SLASH_OP_FSTP,ip); else if (rsp_size>8) { - ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8,SLASH_OP_FSTP,ip); + ICSlashOp(tempi,TY_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, + SLASH_OP_FSTP,ip); ICAddRSP(tempi,rsp_size-8); } ICPop(tempi,TY_REG+RT_I64,REG_RAX,0,ip); if (a1->type_pointed!=RT_F64) - ICFCvt2(lx,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tempi,TY_DISP+a1->type_pointed,REG_RCX,0,TY_REG+RT_I64,REG_RAX,0,ip); + ICFCvt2(cc,tempi,REG_RAX,TY_REG+RT_I64,REG_RAX,0,TRUE,ip); + ICMov(tempi,TY_DISP+a1->type_pointed,REG_RCX,0, + TY_REG+RT_I64,REG_RAX,0,ip); } if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } } -U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, +U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tempi,I64 ip, I64 us,I64 not_us,U8 *buf,I64 ip2) { CICArg *a1,*a2; Bool dont_push_float,dont_pop_float,alt,short_jmp; - I64 i,rsp_size=0,builtin1=0,builtin2=0, - t1,r1,d1,t2,r2,d2; - CLexCodeMisc *lb; + I64 i,rsp_size=0,builtin1=0,builtin2=0,t1,r1,d1,t2,r2,d2; + CCodeMisc *lb; U8 *buf2; if (tempi->ic_flags&ICF_ALTERNATE_TEMPLATE) { @@ -342,21 +322,19 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, alt=FALSE; } - if (lx->flags&LF_AOT_COMPILE) - buf2=lx->a->ip; + if (cc->flags&CCF_AOT_COMPILE) + buf2=cc->aotc->ip; else buf2=buf; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (dont_push_float) { if (tempi->ic_flags&ICF_POP_CMP && alt) { t2=TY_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } else { - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -366,7 +344,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, tempi->ic_flags&ICF_PUSH_CMP) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip2); @@ -382,10 +360,8 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (a1->type&RT_MASK>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type&RT_MASK>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type; r1=a1->reg; d1=a1->disp; @@ -394,7 +370,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { t1=TY_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=LCCFloatConstFind(lx,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; } } else { ICPush(tempi,a1->type,a1->reg,a1->disp,ip2); @@ -403,10 +379,8 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, } } } - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -416,7 +390,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, tempi->ic_flags&ICF_PUSH_CMP) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip2); @@ -430,10 +404,8 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, if (tempi->ic_flags&ICF_POP_CMP) ICPopRegs(tempi,1<type,a1->reg,a1->disp,ip2); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -441,10 +413,8 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, } } else { if (a1->type&TY_MASK!=TY_STK) { - if (a2->type&RT_MASK>=RT_I64 && - (a2->type&TY_MASK==TY_DISP || - a2->type&TY_MASK==TY_RIP_DISP32 || - a2->type&TY_MASK==TY_SIB)) { + if (a2->type&RT_MASK>=RT_I64 && (a2->type&TY_MASK==TY_DISP || + a2->type&TY_MASK==TY_RIP_DISP32 || a2->type&TY_MASK==TY_SIB)) { t2=a2->type; r2=a2->reg; d2=a2->disp; @@ -454,7 +424,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, tempi->ic_flags&ICF_PUSH_CMP) { t2=TY_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=LCCFloatConstFind(lx,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; } } else { ICPush(tempi,a2->type,a2->reg,a2->disp,ip2); @@ -468,10 +438,8 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, if (r2==REG_RSP+REG_RSP<<8) d1+=8; } else { - if (a1->type&RT_MASK>=RT_I64 && - (a1->type&TY_MASK==TY_DISP || - a1->type&TY_MASK==TY_RIP_DISP32 || - a1->type&TY_MASK==TY_SIB)) { + if (a1->type&RT_MASK>=RT_I64 && (a1->type&TY_MASK==TY_DISP || + a1->type&TY_MASK==TY_RIP_DISP32 || a1->type&TY_MASK==TY_SIB)) { t1=a1->type; r1=a1->reg; d1=a1->disp; @@ -480,7 +448,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { t1=TY_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=LCCFloatConstFind(lx,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; } } else { ICPush(tempi,a1->type,a1->reg,a1->disp,ip2); @@ -492,13 +460,11 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, } } } else { - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - a2->type,a2->reg,a2->disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); if (tempi->ic_flags&ICF_POP_CMP) ICPopRegs(tempi,1<type,a1->reg,a1->disp,ip2); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); ICU16(tempi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=TY_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -538,7 +504,7 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, ICU16(tempi,0xF1DF); //FCOMIP ICU32(tempi,0xF7D9C0DD); //FFREE,FINCSTP } - CmpNoteFloatOp(lx,tempi,TRUE,FALSE,CN_MAIN); + CmpNoteFloatOp(cc,tempi,TRUE,FALSE,CN_MAIN); if (tempi->ic_flags&ICF_PUSH_CMP) { if (r2.u8[0]==REG_RSP) { @@ -600,159 +566,150 @@ U0 ICFCmpAndBranch(CLex *lx,CIntermediateCode *tempi,I64 ip, } } -U0 ICFMul(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) +U0 ICFMul(CCmpCtrl *cc,CIntermediateCode *tempi,U8 *buf,I64 ip) { if (tempi->a1.type&TY_MASK==TY_IMM && - tempi->a1.type_pointed&RT_MASK==RT_F64 && - tempi->a1.disp(F64)==1.0) { - CmpNoteFloatOp(lx,tempi,FALSE,FALSE,CN_MAIN); + tempi->a1.type_pointed&RT_MASK==RT_F64 && + tempi->a1.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tempi,FALSE,FALSE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } else if (tempi->a2.type&TY_MASK==TY_IMM && - tempi->a2.type_pointed&RT_MASK==RT_F64 && - tempi->a2.disp(F64)==1.0) { - CmpNoteFloatOp(lx,tempi,FALSE,FALSE,CN_MAIN); + tempi->a2.type_pointed&RT_MASK==RT_F64 && + tempi->a2.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tempi,FALSE,FALSE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } else - ICFOp(lx,tempi,SLASH_OP_FMUL,buf,ip); + ICFOp(cc,tempi,SLASH_OP_FMUL,buf,ip); } -U0 ICFDiv(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) +U0 ICFDiv(CCmpCtrl *cc,CIntermediateCode *tempi,U8 *buf,I64 ip) { if (tempi->a2.type&TY_MASK==TY_IMM && - tempi->a2.type_pointed&RT_MASK==RT_F64 && - tempi->a2.disp(F64)==1.0) { - CmpNoteFloatOp(lx,tempi,FALSE,FALSE,CN_MAIN); + tempi->a2.type_pointed&RT_MASK==RT_F64 && + tempi->a2.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tempi,FALSE,FALSE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); } else - ICFOp(lx,tempi,SLASH_OP_FDIV,buf,ip); + ICFOp(cc,tempi,SLASH_OP_FDIV,buf,ip); } -U0 ICFAdd(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) +U0 ICFAdd(CCmpCtrl *cc,CIntermediateCode *tempi,U8 *buf,I64 ip) { Bool dont_push_float,dont_pop_float; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); - if (tempi->a1.type&TY_MASK==TY_IMM && - !tempi->a1.disp) { + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); + if (tempi->a1.type&TY_MASK==TY_IMM && !tempi->a1.disp) { if (dont_push_float) { - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else if (dont_pop_float) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); } else { - CmpNoteFloatOp(lx,tempi,TRUE,TRUE,CN_MAIN); + CmpNoteFloatOp(cc,tempi,TRUE,TRUE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip); } - } else if (tempi->a2.type&TY_MASK==TY_IMM && - !tempi->a2.disp) { + } else if (tempi->a2.type&TY_MASK==TY_IMM && !tempi->a2.disp) { if (dont_push_float) { - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else if (dont_pop_float) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); } else { ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - CmpNoteFloatOp(lx,tempi,TRUE,TRUE,CN_MAIN); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + CmpNoteFloatOp(cc,tempi,TRUE,TRUE,CN_MAIN); } } else - ICFOp(lx,tempi,SLASH_OP_FADD,buf,ip); + ICFOp(cc,tempi,SLASH_OP_FADD,buf,ip); } -U0 ICFSub(CLex *lx,CIntermediateCode *tempi,U8 *buf,I64 ip) +U0 ICFSub(CCmpCtrl *cc,CIntermediateCode *tempi,U8 *buf,I64 ip) { Bool dont_push_float,dont_pop_float; - if (tempi->a2.type&TY_MASK==TY_IMM && - !tempi->a2.disp) { - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + if (tempi->a2.type&TY_MASK==TY_IMM && !tempi->a2.disp) { + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (dont_push_float) { - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else if (dont_pop_float) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); } else { ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - CmpNoteFloatOp(lx,tempi,TRUE,TRUE,CN_MAIN); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + CmpNoteFloatOp(cc,tempi,TRUE,TRUE,CN_MAIN); } } else - ICFOp(lx,tempi,SLASH_OP_FSUB,buf,ip); + ICFOp(cc,tempi,SLASH_OP_FSUB,buf,ip); } -U0 ICFPreIncDec(CLex *lx,CIntermediateCode *tempi,I64 op,I64 ip) +U0 ICFPreIncDec(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op,I64 ip) { if (tempi->ic_flags & ICF_NOT_ADDR) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); - ICCopyTemplate(lx,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); + ICCopyTemplate(cc,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); ICMov(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_DISP+RT_I64,REG_RCX,0,ip); - ICCopyTemplate(lx,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tempi,TY_DISP+RT_I64,REG_RCX,0, - TY_REG+RT_I64,REG_RAX,0,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,TY_DISP+RT_I64,REG_RCX,0,ip); + ICCopyTemplate(cc,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); + ICMov(tempi,TY_DISP+RT_I64,REG_RCX,0,TY_REG+RT_I64,REG_RAX,0,ip); } if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } -U0 ICFPostIncDec(CLex *lx,CIntermediateCode *tempi,I64 op,I64 ip) +U0 ICFPostIncDec(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op,I64 ip) { if (tempi->ic_flags & ICF_NOT_ADDR) { ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type&TY_MASK+RT_I64,tempi->a1.reg,tempi->a1.disp,ip); if (tempi->r.type&TY_MASK) - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_REG+RT_I64,REG_RAX,0,ip); - ICCopyTemplate(lx,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,TY_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); ICMov(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } else { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - TY_DISP+RT_I64,REG_RCX,0,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RAX,0,TY_DISP+RT_I64,REG_RCX,0,ip); if (tempi->r.type&TY_MASK) - ICMov(tempi,TY_REG+RT_I64,REG_RDX,0, - TY_REG+RT_I64,REG_RAX,0,ip); - ICCopyTemplate(lx,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tempi,TY_DISP+RT_I64,REG_RCX,0, - TY_REG+RT_I64,REG_RAX,0,ip); + ICMov(tempi,TY_REG+RT_I64,REG_RDX,0,TY_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); + ICMov(tempi,TY_DISP+RT_I64,REG_RCX,0,TY_REG+RT_I64,REG_RAX,0,ip); } if (tempi->r.type&TY_MASK) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RDX,0,ip); + TY_REG+RT_I64,REG_RDX,0,ip); } -U0 ICFTemplateFun(CLex *lx,CIntermediateCode *tempi,I64 op,I64 ip) +U0 ICFTemplateFun(CCmpCtrl *cc,CIntermediateCode *tempi,I64 op,I64 ip) { Bool dont_push_float,dont_pop_float; - CmpSetFloatOpPushPop(lx,tempi,&dont_push_float,&dont_pop_float); + CmpSetFloatOpPushPop(cc,tempi,&dont_push_float,&dont_pop_float); if (!dont_push_float) ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); - ICCopyTemplate(lx,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); + ICCopyTemplate(cc,tempi,op,FALSE,TRUE,TRUE,CN_MAIN); if (tempi->r.type&TY_MASK && !(tempi->ic_flags & ICF_R_TO_F64) && - !(tempi->ic_flags & ICF_R_TO_INT)) + !(tempi->ic_flags & ICF_R_TO_INT)) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_REG+RT_I64,REG_RAX,0,ip); + TY_REG+RT_I64,REG_RAX,0,ip); } diff --git a/Compiler/BackLib.CPP b/Compiler/BackLib.CPP index 11a4c17..3ec55c1 100644 --- a/Compiler/BackLib.CPP +++ b/Compiler/BackLib.CPP @@ -73,8 +73,8 @@ U0 ICAddRSP(CIntermediateCode *tempi,I64 i,Bool optimize=TRUE) if (optimize && (tempil1=ICLastIns(tempi))) { j=tempil1->ic_cnt; if (tempil1->ic_last_cnt==j-4 && - tempil1->ic_body[j-3]==0x83 && - tempil1->ic_body[j-4]==0x48) { + tempil1->ic_body[j-3]==0x83 && + tempil1->ic_body[j-4]==0x48) { if (tempil1->ic_body[j-2]==0xEC) j=-tempil1->ic_body[j-1](I8); else if (tempil1->ic_body[j-2]==0xC4) @@ -82,8 +82,8 @@ U0 ICAddRSP(CIntermediateCode *tempi,I64 i,Bool optimize=TRUE) else j=0; } else if (tempil1->ic_last_cnt==j-7 && - tempil1->ic_body[j-6]==0x81 && - tempil1->ic_body[j-7]==0x48) { + tempil1->ic_body[j-6]==0x81 && + tempil1->ic_body[j-7]==0x48) { if (tempil1->ic_body[j-5]==0xEC) j=-tempil1->ic_body[j-4](I32); else if (tempil1->ic_body[j-5]==0xC4) @@ -126,7 +126,8 @@ U0 ICAddRSP(CIntermediateCode *tempi,I64 i,Bool optimize=TRUE) tempi->ic_last_cnt=last_cnt; } -extern U0 ICMov(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,I64 ip); +extern U0 ICMov(CIntermediateCode *tempi, + I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,I64 ip); #define MDR_REG 0 #define MDR_INDIRECT_REG 1 @@ -139,9 +140,9 @@ extern U0 ICMov(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 I64 ICModr1(I64 r,I64 t2,I64 r2,I64 d2) {//result.u8[0] is type - //result.u8[1] is REX - //result.u8[2] is ModR - //result.u8[3] is SIB +//result.u8[1] is REX + //result.u8[2] is ModR + //result.u8[3] is SIB I64 result=0; if (t2&TY_MASK>TY_RIP_DISP32) { "Callers:%P;%P\n",Caller,Caller(2); @@ -163,9 +164,7 @@ I64 ICModr1(I64 r,I64 t2,I64 r2,I64 d2) } result.u8[2]=0xC0+r<<3+r2; result.u8[0]=MDR_REG; - if (result.u8[1]==0x40 && - (t2&RT_MASK>=RT_I16 || - r<4 && r2<4)) + if (result.u8[1]==0x40 && (t2&RT_MASK>=RT_I16 || r<4 && r2<4)) result.u8[1]=0; break; case TY_DISP>>4: @@ -183,9 +182,7 @@ I64 ICModr1(I64 r,I64 t2,I64 r2,I64 d2) result.u8[2]=0x80+r<<3+r2; result.u8[0]=MDR_D32_INDIRECT_REG; } - if (result.u8[1]==0x40 && - (t2&RT_MASK>=RT_I16 || - r<4)) + if (result.u8[1]==0x40 && (t2&RT_MASK>=RT_I16 || r<4)) result.u8[1]=0; break; case TY_SIB>>4: @@ -210,17 +207,13 @@ I64 ICModr1(I64 r,I64 t2,I64 r2,I64 d2) result.u8[0]=MDR_SIB_D32_INDIRECT_REG; } } - if (result.u8[1]==0x40 && - (t2&RT_MASK>=RT_I16 || - r<4)) + if (result.u8[1]==0x40 && (t2&RT_MASK>=RT_I16 || r<4)) result.u8[1]=0; break; case TY_RIP_DISP32>>4: result.u8[2]=0x05+r<<3; result.u8[0]=MDR_RIP_REL; - if (result.u8[1]==0x40 && - (t2&RT_MASK>=RT_I16 || - r<4)) + if (result.u8[1]==0x40 && (t2&RT_MASK>=RT_I16 || r<4)) result.u8[1]=0; break; } @@ -439,7 +432,8 @@ I64 ICBuiltInFloatConst(F64 d) return 0; } -U0 ICMov(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,I64 ip) +U0 ICMov(CIntermediateCode *tempi, + I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,I64 ip) { I64 i,j,last_cnt=tempi->ic_cnt; CIntermediateCode *tempil1; @@ -509,10 +503,9 @@ U0 ICMov(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,I64 i=tempil1->ic_cnt; j=0x48+(r1>7); if (r2>7) j+=4; - if (tempil1->ic_last_cnt==i-3 && - tempil1->ic_body[i-2]==0x8B && - tempil1->ic_body[i-1]==0xC0+r1&7+(r2&7)<<3 && - tempil1->ic_body[i-3]==j ) { + if (tempil1->ic_last_cnt==i-3 && tempil1->ic_body[i-2]==0x8B && + tempil1->ic_body[i-1]==0xC0+r1&7+(r2&7)<<3 && + tempil1->ic_body[i-3]==j) { goto move_done; } } @@ -553,8 +546,8 @@ U0 ICMov(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,I64 case TY_DISP>>4: case TY_RIP_DISP32>>4: case TY_SIB>>4: - if (t2&TY_MASK==TY_IMM && - (t1&RT_MASKic_last_cnt=last_cnt; } -U0 ICLea(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,CLex *lx,U8 *buf,I64 ip) +U0 ICLea(CIntermediateCode *tempi, + I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,CCmpCtrl *cc,U8 *buf,I64 ip) { I64 i; - CExeAbsAddr *tempa; + CAOTAbsAddr *tempa; switch (t1>>4) { case TY_REG>>4: i=ICModr1(r1,t2,r2,d2); @@ -634,21 +628,18 @@ U0 ICLea(CIntermediateCode *tempi,I64 t1,I64 r1,I64 d1,I64 t2,I64 r2,I64 d2,CLex if (t2&TY_MASK==TY_RIP_DISP32) { ICU8(tempi,0x68); ICU32(tempi,d2); - if (lx->flags&LF_AOT_COMPILE && buf && !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=lx->a->abss; - tempa->type=EAT_ADD_U32; - lx->a->abss=tempa; + if (cc->flags&CCF_AOT_COMPILE && buf && !(cc->flags&CCF_NO_ABSS)) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=cc->aotc->abss; + tempa->type=AAT_ADD_U32; + cc->aotc->abss=tempa; tempa->ip=ip+tempi->ic_cnt-4; } tempi->ic_flags&=~ICF_CODE_FINAL; - } else { - ICLea(tempi,TY_REG+RT_I64,REG_RCX,0,t2,r2,d2,lx,buf,ip); - ICMov(tempi,t1,r1,d1,TY_REG+RT_I64,REG_RCX,0,ip); - } - break; + break; + } // Fall thru default: - ICLea(tempi,TY_REG+RT_I64,REG_RCX,0,t2,r2,d2,lx,buf,ip); + ICLea(tempi,TY_REG+RT_I64,REG_RCX,0,t2,r2,d2,cc,buf,ip); ICMov(tempi,t1,r1,d1,TY_REG+RT_I64,REG_RCX,0,ip); } } @@ -659,13 +650,12 @@ U0 ICDeref(CIntermediateCode *tempi,I64 ip) t=tempi->r.type&RT_MASK; if (t>tempi->a1.type_pointed) t=tempi->a1.type_pointed; - if (tempi->a1.type&TY_MASK==TY_REG) ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, TY_DISP+t,tempi->a1.reg,tempi->a1.disp,ip); else { ICMov(tempi,TY_REG+RT_I64,REG_RCX,0, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, TY_DISP+t,REG_RCX,0,ip); } diff --git a/Compiler/CExcept.CPP b/Compiler/CExcept.CPP new file mode 100644 index 0000000..e37a893 --- /dev/null +++ b/Compiler/CExcept.CPP @@ -0,0 +1,251 @@ +U0 LexPutToken(CCmpCtrl *cc) +{//Print cur token to StdOut. (Crude) + '"'; + if (cc->token==TK_IDENT || cc->token==TK_STR) + "%s",cc->cur_str; + else if (cc->token==TK_INTEGER) + "INT:%X",cc->cur_i64; + else if (cc->token==TK_CHAR_CONST) + "U8:%X",cc->cur_i64; + else if (cc->token==TK_F64) + "FLOAT:%e",cc->cur_f64; + else if (cc->token=='\n') + ""; + else if (Bt(chars_bmp_displayable,cc->token)) + '' cc->token; + else { + "T:%X",cc->token; + } + "\" "; +} + +U8 *LexPutLine(CCmpCtrl *cc,U8 *start) +{//Print cur pos to end of line to StdOut. + I64 ch; + U8 *ptr; + if (!start) return NULL; + if (cc->lex_include_stk->flags&LFSF_DOC) + return DocPutLine(cc->lex_include_stk->doc,start); + else { + ptr=start; + while (ch=*ptr++) { + if (ch=='\n') { + if (*ptr=='\r') + ptr++; + break; + } else if (ch=='\r') { + if (*ptr=='\n') + ptr++; + break; + } + '' ch; + } + if (!ch) ptr--; + '\n'; + return ptr; + } + return NULL; +} + +U0 LexPutPos(CCmpCtrl *cc) +{//Print token, line link and, then, $LK,"LexPutLine",A="MN:LexPutLine"$(). + LexPutToken(cc); + FixSet(cc->lex_include_stk->full_name,cc->lex_include_stk->line_num); + if (IsRaw) + "%s,%d ",cc->lex_include_stk->full_name,cc->lex_include_stk->line_num; + else { + PutFileLink(cc->lex_include_stk->full_name,cc->lex_include_stk->line_num); + AdamErr("%s,%d\n", + cc->lex_include_stk->full_name,cc->lex_include_stk->line_num); + '' CH_SPACE; + } + LexPutLine(cc,cc->lex_include_stk->line_start); +} + +U0 LexWarn(CCmpCtrl *cc,U8 *str=NULL) +{//Print warn msg, then, $LK,"LexPutPos",A="MN:LexPutPos"$(). + if (str) PrintWarn(str); + if (cc->htc.fun) { + "in fun '%s'.\n",cc->htc.fun->str; + if (IsRaw) + "%s\n",cc->htc.fun->src_link; + else { + "$$LK,\"%s\"$$\n",cc->htc.fun->src_link; + AdamErr("%s\n",cc->htc.fun->src_link); + } + } else + LexPutPos(cc); + cc->warning_cnt++; +} + +U0 LexExcept(CCmpCtrl *cc,U8 *str=NULL) +{//Print err msg, $LK,"LexPutPos",A="MN:LexPutPos"$() and throw exception. + if (!Bt(&sys_run_level,RLf_ADAM_SERVER)) { + Preempt; + Raw(ON); + "Note: Still in boot phase.\n"; + } + if (str) PrintErr(str); + if (!IsRaw) + AdamErr("Task:%08X %s\n",Fs,str); + LexPutPos(cc); + cc->error_cnt++; + FlushMsgs; + if (!Bt(&sys_run_level,RLf_ADAM_SERVER)) + Dbg("Type \"Fix;\""); + throw('Compiler'); +} + +U0 UndefinedExtern() +{ + PrintErr("Undefined Extern\nat %P\n",Caller); + throw('UndefExt'); +} + +U0 UnusedExternWarning(CCmpCtrl *cc,CHashClass *tempc) +{ + PrintWarn("Unused extern '%s'\n",tempc->str); + cc->warning_cnt++; +} + +U0 ParenWarning(CCmpCtrl *cc) +{ + if (Bt(&cc->opts,OPTf_WARN_PAREN) && + !(cc->lex_include_stk->flags&LFSF_DEFINE)) + LexWarn(cc,"Unnecessary parenthesis "); +} + +U0 ICClassPut(CHashClass *c) +{ + I64 i; + if (!c) return; + if (c->ptr_stars_cnt>4) { + PrintErr("put_class ptrcnt=%d\n",c->ptr_stars_cnt); + while (TRUE) +//TODO: + Yield; + } + for (i=0;iptr_stars_cnt;i++) + '*'; + c-=c->ptr_stars_cnt; + if (c->str) + "%s",c->str; + else { + PrintErr("put_class str=NULL\n"); + while (TRUE) +//TODO: + Yield; + } + '' CH_SPACE; +} + +U0 ICArgPut(CICArg *a) +{ + if (a->type_pointed) + "%Z %Z %Z ", + a->type&RT_MASK,"ST_RAW_TYPES", + a->type_pointed&RT_MASK,"ST_RAW_TYPES", + a->type>>4,"ST_TY_TYPES"; + else + "%Z %Z ", + a->type&RT_MASK,"ST_RAW_TYPES", + a->type>>4,"ST_TY_TYPES"; + switch (a->type>>4) { + case TY_STK>>4: + "STK"; + break; + case TY_IMM>>4: + "#%X",a->disp; + break; + case TY_REG>>4: + "%Z",a->reg,"ST_U64_REGS"; + break; + case TY_DISP>>4: + "%X[%Z]",a->disp,a->reg,"ST_U64_REGS"; + break; + case TY_RIP_DISP32>>4: + "[%X]",a->disp; + break; + case TY_SIB>>4: + if (a->disp) + "%X",a->disp; + if (a->reg==REG_RIP) + '['; + else + "[%Z+",a->reg&15,"ST_U64_REGS"; + "%Z",a->reg>>8&15,"ST_U64_REGS"; + switch (a->reg>>14) { + case 0: "]"; break; + case 1: "*2]"; break; + case 2: "*4]"; break; + case 3: "*8]"; break; + } + break; + } +} + +U0 ICPut(CCmpCtrl *cc,CIntermediateCode *tempi) +{ + I64 opcode=tempi->ic_code,i; + if (opcode>=IC_END_EXP && opcode!=IC_NOP2) { + "%15ts %016X ",intermediate_code_table[opcode].name,tempi->ic_data; + if (cc->pass) { + if (tempi->r.type&TY_MASK) { + ICArgPut(&tempi->r); + "<-"; + } + if (tempi->a1.type&TY_MASK) + ICArgPut(&tempi->a1); + ','; + if (tempi->a2.type&TY_MASK) + ICArgPut(&tempi->a2); + '' CH_SPACE; + } + ICClassPut(tempi->ic_class); + if (tempi->ic_flags & ICF_LOCK) + "$$BROWN$$lock$$FG$$ "; + if (tempi->ic_flags & ICF_A2_TO_F64) + "$$LTBLUE$$a2d$$FG$$ "; + if (tempi->ic_flags & ICF_A2_TO_INT) + "$$GREEN$$a2i$$FG$$ "; + if (tempi->ic_flags & ICF_A1_TO_F64) + "$$LTBLUE$$a1d$$FG$$ "; + if (tempi->ic_flags & ICF_A1_TO_INT) + "$$GREEN$$a1i$$FG$$ "; + if (tempi->ic_flags & ICF_R_TO_F64) + "$$LTBLUE$$rd$$FG$$ "; + if (tempi->ic_flags & ICF_R_TO_INT) + "$$GREEN$$ri$$FG$$ "; + if (tempi->ic_flags & ICF_USE_F64) + "[F64] "; + if (tempi->ic_flags & ICF_USE_UNSIGNED) + "[unsigned] "; + if (tempi->ic_flags & ICF_USE_INT) + "[int] "; + if (tempi->ic_flags & ICF_NO_DEPEND_RESULT) + "-DEP "; + if (tempi->ic_flags & ICF_DEPEND_RESULT) + "+DEP "; + if (tempi->ic_flags & ICF_NOT_ADDR) + "NOT_ADDR "; + if (tempi->ic_flags & ICF_PUSH_RESULT) + "PUSH "; + if (tempi->ic_flags & ICF_PUSH_CMP) + "PUSH_CMP "; + if (tempi->ic_flags & ICF_POP_CMP) + "POP_CMP "; + if (tempi->ic_flags & ICF_DEL_PREVIOUS_INS) + "DELPREV "; + if (tempi->ic_flags & ICF_PREVIOUS_DELETED) + "PREVDEL "; + for (i=0;i<3;i++) { + if (Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+i)) + "DONT_PUSH#%d ",i; + if (Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+i)) + "DONT_POP#%d ",i; + } + if (tempi->ic_flags & ICF_ALTERNATE_TEMPLATE) + "ALT_TEMP "; + '\n'; + } +} diff --git a/Compiler/CExts.CPP b/Compiler/CExts.CPP index fd3b645..9373045 100644 --- a/Compiler/CExts.CPP +++ b/Compiler/CExts.CPP @@ -1,40 +1,48 @@ import U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e); +import U0 DocBinsValidate(CDoc *doc); import U0 DocDel(CDoc *doc); import U0 DocLoad(CDoc *doc,U8 *src2,I64 size); import CDoc *DocNew(U8 *filename=NULL,CTask *task=NULL); +import CDocEntry *DocPrint(CDoc *doc,U8 *fmt,...); import CDocEntry *DocPutLine(CDoc *doc,CDocEntry *doc_e); import I64 DocSize(CDoc *doc); -import U0 Who(U8 *flags=NULL,CHashTable *h=NULL, - U8 *outname=NULL,U8 mapfile_drv=0,U8 *index=NULL,CDoc *_doc=NULL); -extern U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx); -extern U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx); -extern CExe *CmpJoin(CLex *lx,I64 cmp_flags,U8 *map_name=NULL,U8 mapfile_drv=0); +import Bool DocWrite(CDoc *doc,Bool prompt=FALSE); +extern U8 *CmdLinePmt(); +extern U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tempaot); +extern U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tempaot); +extern CAOT *CmpJoin( + CCmpCtrl *cc,I64 cmp_flags,U8 *map_name=NULL,U8 mapfile_drv_let=0); extern I64 HashEntrySize2(CHashSrcSym *temph); -extern Bool IsLexExpression2Bin(CLex *lx,U8 **_ex); -extern U0 LexExcept(CLex *lx,U8 *str=NULL); -extern I64 LexExpression(CLex *lx); -extern U0 LexWarn(CLex *lx,U8 *str=NULL); -extern CLexCodeMisc *OptLabelFwd(CLexCodeMisc *lb); -extern CIntermediateCode *OptPass012(CLex *lx); -extern U0 OptPass3(CLex *lx,COptReg *reg_offsets); -extern U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type); -extern U0 OptPass5(CLex *lx); -extern U0 OptPass6(CLex *lx); -extern I64 OptPass789A(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg); -extern CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern); -extern CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags); -extern I64 PrsKeyWord(CLex *lx); -extern Bool PrsStatement(CLex *lx,I64 try_cnt=0, - CLexCodeMisc *lb_break=NULL,I64 cmp_flags=CMPF_PRS_SEMICOLON); -extern U0 PrsStreamBlk(CLex *lx); -extern CHashClass *PrsType(CLex *lx,CHashClass **tempc1, +extern Bool IsLexExpression2Bin(CCmpCtrl *cc,U8 **_machine_code); +extern I64 Lex(CCmpCtrl *cc); +extern I64 LexExpression(CCmpCtrl *cc); +extern I64 LexGetChar(CCmpCtrl *cc); +extern CCodeMisc *OptLabelFwd(CCodeMisc *lb); +extern CIntermediateCode *OptPass012(CCmpCtrl *cc); +extern U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets); +extern U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type); +extern U0 OptPass5(CCmpCtrl *cc); +extern U0 OptPass6(CCmpCtrl *cc); +extern I64 OptPass789A( + CCmpCtrl *cc,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg); +extern CHashClass *PrsClass( + CCmpCtrl *cc,I64 keyword,I64 fsp_flags,Bool is_extern); +extern CHashFun *PrsFunJoin( + CCmpCtrl *cc,CHashClass *temp_return,U8 *name,I64 fsp_flags); +extern I64 PrsKeyWord(CCmpCtrl *cc); +extern Bool PrsStatement(CCmpCtrl *cc,I64 try_cnt=0, + CCodeMisc *lb_break=NULL,I64 cmp_flags=CMPF_PRS_SEMICOLON); +extern U0 PrsStreamBlk(CCmpCtrl *cc); +extern CHashClass *PrsType(CCmpCtrl *cc,CHashClass **tempc1, I64 *_mode,CMemberLst *tempm,U8 **_ident,CHashFun **_fun_ptr, CHashExport **_tempex,CArrayDim *tempad,I64 fsp_flags); -extern I64 PrsUnaryModifier(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad,I64 *unary_post_prec); -extern I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad, +extern I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps, + CMemberLst **_local_var,CArrayDim **_tempad,I64 *unary_post_prec); +extern I64 PrsUnaryTerm( + CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad, I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec); -extern U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass); -extern U0 StreamPrint(U8 *fmt,...); +extern U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc, + CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass); _extern CMP_TEMPLATES U32 cmp_templates[1]; _extern CMP_TEMPLATES_DONT_POP U32 cmp_templates_dont_pop[1]; _extern CMP_TEMPLATES_DONT_PUSH2 U32 cmp_templates_dont_push2[1]; diff --git a/Compiler/CHash.CPP b/Compiler/CHash.CPP index d2ee4f8..91919ed 100644 --- a/Compiler/CHash.CPP +++ b/Compiler/CHash.CPP @@ -11,7 +11,8 @@ I64 HashEntrySize(CHashSrcSym *temph) return temph(CHashClass *)->size; case HTt_FUN: if (dbg_info=temph->dbg_info) - return dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]-dbg_info->body[0]; + return dbg_info->body[dbg_info->max_line+1-dbg_info->min_line] + -dbg_info->body[0]; else return -1; case HTt_FILE: @@ -47,8 +48,9 @@ I64 HashEntrySize2(CHashSrcSym *temph) else if (temph->type & HTT_FUN) { result+=MemberLstSize(temph); if (dbg_info=temph->dbg_info) - //This should be $LK,"MSize",A="MN:MSize"$() but it would crash on AOT .BIN.Z file funs. - result+=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]-dbg_info->body[0]; +//This should be $LK,"MSize",A="MN:MSize"$() but it would crash on AOT .BIN.Z file funs. + result+=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line] + -dbg_info->body[0]; } else if (temph->type&HTT_DEFINE_STR) result+=MSize2(temph(CHashDefineStr *)->data); else if (temph->type & HTT_GLBL_VAR) { @@ -56,12 +58,13 @@ I64 HashEntrySize2(CHashSrcSym *temph) if (!(temph(CHashGlblVar *)->flags&GVF_ALIAS)) result+=MSize2(temph(CHashGlblVar *)->data_addr); if (temph(CHashGlblVar *)->fun_ptr) - result+=HashEntrySize2(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt); + result+=HashEntrySize2(temph(CHashGlblVar *)->fun_ptr + -temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt); } } else if (temph->type & HTT_FILE) result+=MSize2(temph(CHashGeneric *)->user_data0); else if (temph->type & HTT_MODULE && - StrCmp(temph->str,KERNEL_MODULE_NAME)) + StrCmp(temph->str,KERNEL_MODULE_NAME)) result+=MSize2(temph(CHashGeneric *)->user_data0); return result; } @@ -83,3 +86,56 @@ I64 HashTableSize2(CHashTable *table) result+=MSize2(table); return result; } + +U0 MapFileWrite(CHashTable *h,U8 *map_name,U8 drv_let) +{ + CHashSrcSym *temph; + I64 i,size; + U8 *src_link; + CDoc *doc; + CDocBin *tempb; + CDbgInfo *dbg_info; + + doc=DocNew(map_name); + doc->flags|=DOCF_NO_CURSOR; + for (i=0;i<=h->mask;i++) { + temph=h->body[i]; + while (temph) { + if (temph->src_link && !(temph->type & (HTF_IMPORT | HTF_PRIVATE))) { + src_link=StrNew(temph->src_link); + if (drv_let && StrLen(src_link)>=4) + src_link[3]=drv_let; + if (dbg_info=temph->dbg_info) { + size=offset(CDbgInfo.body)+ + sizeof(U32)*(dbg_info->max_line+2-dbg_info->min_line); + if (size>MSize(dbg_info)) { + "Corrupt Map Entry\n"; + dbg_info=NULL; + } else { + if (dbg_info->min_line<=dbg_info->max_line) { + tempb=CAlloc(sizeof(CDocBin)); + tempb->size=size; + tempb->data=MAlloc(size); + MemCpy(tempb->data,dbg_info,size); + tempb->num=doc->cur_bin_num++; + tempb->use_cnt=1; + QueIns(tempb,doc->bin_root.last); + } else + dbg_info=NULL; + } + } + if (dbg_info) + DocPrint(doc,"$$LK,\"%s\",A=\"%s\",BI=%d$$\n", + temph->str,src_link,tempb->num); + else + DocPrint(doc,"$$LK,\"%s\",A=\"%s\"$$\n",temph->str,src_link); + + Free(src_link); + } + temph=temph->next; + } + } + DocBinsValidate(doc); + DocWrite(doc); + DocDel(doc); +} diff --git a/Compiler/CInit.CPP b/Compiler/CInit.CPP index 808a857..932ccf7 100644 --- a/Compiler/CInit.CPP +++ b/Compiler/CInit.CPP @@ -3,204 +3,206 @@ class CInternalType { U8 type,size,name[8]; +} internal_types_table[NUM_INTERNAL_TYPES]={ + {RT_I0,0,"I0i"},{RT_I0,0,"I0"},{RT_U0,0,"U0i"},{RT_U0,0,"U0"}, + {RT_I8,1,"I8i"},{RT_I8,1,"I8"},{RT_I8,1,"Bool"}, + {RT_U8,1,"U8i"},{RT_U8,1,"U8"}, + {RT_I16,2,"I16i"},{RT_U16,2,"U16i"}, + {RT_I32,4,"I32i"},{RT_U32,4,"U32i"}, + {RT_I64,8,"I64i"},{RT_U64,8,"U64i"}, + {RT_F64,8,"F64i"},{RT_F64,8,"F64"}, }; -CInternalType internal_types_table[NUM_INTERNAL_TYPES]={ -{RT_I0,0,"I0i"},{RT_I0,0,"I0"},{RT_U0,0,"U0i"},{RT_U0,0,"U0"}, -{RT_I8,1,"I8i"},{RT_I8,1,"I8"},{RT_I8,1,"Bool"}, -{RT_U8,1,"U8i"},{RT_U8,1,"U8"}, -{RT_I16,2,"I16i"},{RT_U16,2,"U16i"}, -{RT_I32,4,"I32i"},{RT_U32,4,"U32i"}, -{RT_I64,8,"I64i"},{RT_U64,8,"U64i"}, -{RT_F64,8,"F64i"},{RT_F64,8,"F64"}, +CIntermediateStruct intermediate_code_table[IC_NUM_ENTRIES]={ + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP1"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END_EXP"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP2"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LABEL"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_START"}, + {IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END2"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL2"}, + {IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_I64"}, + {IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_F64"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"STR_CONST"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ABS_ADDR"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR_IMPORT"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"HEAP_GLBL"}, + {IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SIZEOF"}, + {IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"TYPE"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"GET_LABEL"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RBP"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"REG"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"FS"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_FS"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GS"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_GS"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"LEA"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_I64"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_F64"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_BOOL"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TOUPPER"}, + {IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"HOLYC_TYPECAST"}, + {IS_1_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR"}, + {IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"COM"}, + {IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"NOT"}, + {IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"UNARY_MINUS"}, + {IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF"}, + {IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_PP"}, + {IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_MM"}, + {IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_PP"}, + {IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_MM"}, + {IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"PP_"}, + {IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"MM_"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHL"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHR"}, + {IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHL_CONST"}, + {IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHR_CONST"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"POWER"}, + {IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"MUL"}, + {IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"DIV"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"MOD"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR"}, + {IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ADD"}, + {IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SUB"}, + {IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"ADD_CONST"}, + {IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SUB_CONST"}, + {IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"EQUAL_EQUAL"}, + {IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"NOT_EQUAL"}, + {IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS"}, + {IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER_EQUAL"}, + {IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER"}, + {IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS_EQUAL"}, + {IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"PUSH_CMP"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND_AND"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR_OR"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR_XOR"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_PP"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_MM"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHL_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHR_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MUL_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"DIV_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MOD_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"AND_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"OR_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"XOR_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ADD_EQUAL"}, + {IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SUB_EQUAL"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"JMP"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SUB_CALL"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SWITCH"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOBOUND_SWITCH"}, + {IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP"}, + {IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP1"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ENTER"}, + {IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"PUSH_REGS"}, + {IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"POP_REGS"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LEAVE"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RET"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT2"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_IMPORT"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_EXTERN"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"ASM"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PREEMPT"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PUSH"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"POP"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CLFLUSH"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"INVLPG"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U8"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U16"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U32"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U8"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U16"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U32"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RFLAGS"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CARRY"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RFLAGS"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RAX"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RAX"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RBP"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RBP"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RSP"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RSP"}, + {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RIP"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"RDTSC"}, + {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"HPET"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BT"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTS"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTR"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTC"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTS"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTR"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTC"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSF"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSR"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INIT"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS_REV"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_REM"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"STRLEN"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_ZERO"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_ZERO"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_CARRY"}, + {IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_CARRY"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_EQUAL_EQUAL"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_EQUAL"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER_EQUAL"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS_EQUAL"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2EQUAL_EQUAL"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2NOT_EQUAL"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER_EQUAL"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER"}, + {IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS_EQUAL"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_ZERO"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_NOT_ZERO"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_ZERO"}, + {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_NOT_ZERO"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_ZERO"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_NOT_ZERO"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_ZERO"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_NOT_ZERO"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BT"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTS"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTR"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTC"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BT"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTS"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTR"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTC"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U8"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U16"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U32"}, + {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U64"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ABS_I64"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SIGN_I64"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_I64"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_U64"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_I64"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_U64"}, + {IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MOD_U64"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRI64"}, + {IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRU64"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQR"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ABS"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQRT"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SIN"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"COS"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"TAN"}, + {IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ATAN"}, }; -U0 AsmPrsInsFlags(CLex *lx,CInstruction *tempi) -{ - I64 i; - while (TRUE) { - switch (lx->token) { - case TK_IDENT: - if ((i=DefineMatch(lx->cur_str,"ST_OPCODE_MODIFIERS"))>=0) { - tempi->opcode_modifier=i; - break; - } else - return; - case TK_INTEGER: - if (lx->cur_i64==16) - tempi->flags|=IEF_OP_SIZE16; - else if (lx->cur_i64==32) - tempi->flags|=IEF_OP_SIZE32; - else - return; - break; - case '+': - tempi->flags|=IEF_PLUS_OPCODE; - case '/': - if (Lex(lx)==TK_INTEGER && lx->cur_i64<8) - tempi->slash_val=lx->cur_i64; - else if (lx->token==TK_IDENT) { - if (!StrCmp(lx->cur_str,"R")) - tempi->slash_val=SV_R_REG; - else if (!StrCmp(lx->cur_str,"I")) - tempi->slash_val=SV_I_REG; - else - return; - } else - return; - break; - case '!': tempi->flags|=IEF_DONT_SWITCH_MODES; break; - case '&': tempi->flags|=IEF_DFT; break; - case ':': tempi->flags|=IEF_STI; break; - case '-': tempi->flags|=IEF_NO_REX; break; - case '~': tempi->flags|=IEF_40_REX; break; - case '=': tempi->flags|=IEF_48_REX; break; - case '`': tempi->flags|=IEF_REX_ONLY_R8_R15; break; - case '^': tempi->flags|=IEF_REX_XOR_LIKE; break; - case '$$': tempi->flags|=IEF_ENDING_ZERO; break; - default: - return; - } - Lex(lx); - } -} - -U0 AsmHashLoad() -{ - I64 i,j,size,size1; - CInternalType *tempit; - CLex *lx; - CHashGeneric *temph; - CHashReg *tempr; - CHashOpcode *tempo,*tempo1; - CInstruction *tempi; - CHashClass *tempc; - - cmp.asm_hash=HashTableNew(1024); - size1=offset(CHashOpcode.ins)+sizeof(CInstruction)<<5; - tempo=MAlloc(size1); - - lx=LexNew(FileRead("OpCodes.TXT"),,"OpCodes.TXT.Z"); - lx->htc.hash_table_lst=NULL; - Lex(lx); - while (lx->token) { - if (lx->token!=TK_IDENT) - LexExcept(lx,"expecting identifier at "); - i=LstMatch(lx->cur_str,"R8\0R16\0R32\0R64\0SEG\0FSTK\0MM\0XMM\0OPCODE\0KEYWORD\0ASM_KEYWORD\0"); - if (i<0) - LexExcept(lx,"Unknown Statement"); - Lex(lx); //skip keyword - if (lx->token!=TK_IDENT) - LexExcept(lx,"expecting identifier at "); - switch (i) { - case 8: //OPCODE - MemSet(tempo,0,size1); - tempo->type=HTT_OPCODE; - tempo->instruction_entry_cnt=0; - tempo->str=lx->cur_str; - lx->cur_str=0; - Lex(lx); //Skip OPCODE - while (lx->token && lx->token!=';') { - tempi=&tempo->ins[tempo->instruction_entry_cnt]; - tempi->ins_entry_num=tempo->instruction_entry_cnt++; - tempi->slash_val=SV_NONE; //Not zero!! - while (lx->token==TK_INTEGER) { - tempi->opcode[tempi->opcode_cnt++]=lx->cur_i64; - Lex(lx); - } - if (lx->token==',') - Lex(lx); - else if (lx->token!=';') - LexExcept(lx,"expecting ',' at "); - - AsmPrsInsFlags(lx,tempi); - - tempi->arg1=0; - tempi->arg2=0; - if (lx->token==TK_IDENT) { - j=DefineMatch(lx->cur_str,"ST_ARG_TYPES"); - tempi->arg1=j; - if (ARGT_REL8<=j<=ARGT_REL32 || - ARGT_MOFFS8<=j<=ARGT_MOFFS64) - tempi|=IEF_NO_REX; - - if (Lex(lx)==TK_IDENT) { - j=DefineMatch(lx->cur_str,"ST_ARG_TYPES"); - Lex(lx); - tempi->arg2=j; - if (ARGT_REL8<=j<=ARGT_REL32 || - ARGT_MOFFS8<=j<=ARGT_MOFFS64) - tempi|=IEF_NO_REX; - } - } - } - size=offset(CHashOpcode.ins)+ - sizeof(CInstruction)*tempo->instruction_entry_cnt; - - tempo1=MAlloc(size); - MemCpy(tempo1,tempo,size); - tempo1->use_cnt=0; - if (HashFind(tempo1->str,cmp.asm_hash,HTT_OPCODE)) - LexExcept(lx,"Duplicate OPCODE entry "); - HashAdd(tempo1,cmp.asm_hash); - break; - case 9: //KEYWORD - case 10: //ASM_KEYWORD - temph=CAlloc(sizeof(CHashGeneric)); - temph->str=lx->cur_str; - lx->cur_str=NULL; - Lex(lx); //skip keyword name - if (lx->token!=TK_INTEGER) - LexExcept(lx,"expecting integer at "); - temph->user_data0=lx->cur_i64; - if (i==9) - temph->type=HTT_KEYWORD; - else - temph->type=HTT_ASM_KEYWORD; - HashAdd(temph,cmp.asm_hash); - Lex(lx); //Skip INT - break; - case REGT_R8: - case REGT_R16: - case REGT_R32: - case REGT_R64: - case REGT_SEG: - case REGT_FSTK: - case REGT_MM: - case REGT_XMM: - tempr=CAlloc(sizeof(CHashReg)); - tempr->str=lx->cur_str; - lx->cur_str=NULL; - Lex(lx); //skip keyword name - if (lx->token!=TK_INTEGER) - LexExcept(lx,"expecting integer at "); - tempr->type=HTT_REG; - tempr->reg_type=i; - tempr->reg_num=lx->cur_i64; - HashAdd(tempr,cmp.asm_hash); - Lex(lx); //Skip INT - break; - } - if (lx->token!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); //Skip ';' - } - Free(tempo); - LexDel(lx); - for (i=0;itype=HTT_INTERNAL_TYPE; - tempc->raw_type=tempit->type; - Bts(&tempc->flags,Cf_INTERNAL_TYPE); - tempc->size=tempit->size; - tempc->str=AStrNew(tempit->name); - HashAdd(tempc,cmp.asm_hash); - cmp.internal_types[tempc->raw_type]=tempc; - } - adam_task->hash_table->next=cmp.asm_hash; -} - U0 CmpLoadDefines() { DefineLstLoad("ST_RAW_TYPES", @@ -208,26 +210,27 @@ U0 CmpLoadDefines() "F32\0UF32\0F64\0UF64\0"); DefineLstLoad("ST_TY_TYPES","NULL\0IMM\0REG\0DISP\0SIB\0RIP\0STK\0"); DefineLstLoad("ST_U8_REGS","AL\0CL\0DL\0BL\0AH\0CH\0DH\0BH\0" - "R8u8\0R9u8\0R10u8\0R11u8\0R12u8\0R13u8\0R14u8\0R15u8\0"); + "R8u8\0R9u8\0R10u8\0R11u8\0R12u8\0R13u8\0R14u8\0R15u8\0"); DefineLstLoad("ST_U8_REX_REGS","AL\0CL\0DL\0BL\0RSPu8\0RBPu8\0RSIu8\0RDIu8\0" - "R8u8\0R9u8\0R10u8\0R11u8\0R12u8\0R13u8\0R14u8\0R15u8\0"); + "R8u8\0R9u8\0R10u8\0R11u8\0R12u8\0R13u8\0R14u8\0R15u8\0"); DefineLstLoad("ST_U16_REGS","AX\0CX\0DX\0BX\0SP\0BP\0SI\0DI\0" - "R8u16\0R9u16\0R10u16\0R11u16\0R12u16\0R13u16\0R14u16\0R15u16\0"); + "R8u16\0R9u16\0R10u16\0R11u16\0R12u16\0R13u16\0R14u16\0R15u16\0"); DefineLstLoad("ST_U32_REGS","EAX\0ECX\0EDX\0EBX\0ESP\0EBP\0ESI\0EDI\0" - "R8u32\0R9u32\0R10u32\0R11u32\0R12u32\0R13u32\0R14u32\0R15u32\0"); + "R8u32\0R9u32\0R10u32\0R11u32\0R12u32\0R13u32\0R14u32\0R15u32\0"); DefineLstLoad("ST_U64_REGS","RAX\0RCX\0RDX\0RBX\0RSP\0RBP\0RSI\0RDI\0" - "R8\0R9\0R10\0R11\0R12\0R13\0R14\0R15\0"); + "R8\0R9\0R10\0R11\0R12\0R13\0R14\0R15\0"); DefineLstLoad("ST_MM_REGS","MM0\0MM1\0MM2\0MM3\0MM4\0MM5\0MM6\0MM7\0"); - DefineLstLoad("ST_XMM_REGS","XMM0\0XMM1\0XMM2\0XMM3\0XMM4\0XMM5\0XMM6\0XMM7\0"); + DefineLstLoad("ST_XMM_REGS", + "XMM0\0XMM1\0XMM2\0XMM3\0XMM4\0XMM5\0XMM6\0XMM7\0"); DefineLstLoad("ST_OPCODE_MODIFIERS","NO\0CB\0CW\0CD\0CP\0IB\0IW\0ID\0"); DefineLstLoad("ST_ARG_TYPES","NO\0REL8\0REL16\0REL32\0" - "IMM8\0IMM16\0IMM32\0IMM64\0UIMM8\0UIMM16\0UIMM32\0UIMM64\0" - "R8\0R16\0R32\0R64\0RM8\0RM16\0RM32\0RM64\0" - "M8\0M16\0M32\0M64\0M1632\0M16N32\0M16N16\0M32N32\0" - "MOFFS8\0MOFFS16\0MOFFS32\0MOFFS64\0" - "AL\0AX\0EAX\0RAX\0CL\0DX\0 \0SREG\0" - "SS\0DS\0ES\0FS\0GS\0CS\0ST0\0STI\0" - "MM\0MM32\0MM64\0XMM\0XMM32\0XMM64\0XMM128\0XMM0\0"); + "IMM8\0IMM16\0IMM32\0IMM64\0UIMM8\0UIMM16\0UIMM32\0UIMM64\0" + "R8\0R16\0R32\0R64\0RM8\0RM16\0RM32\0RM64\0" + "M8\0M16\0M32\0M64\0M1632\0M16N32\0M16N16\0M32N32\0" + "MOFFS8\0MOFFS16\0MOFFS32\0MOFFS64\0" + "AL\0AX\0EAX\0RAX\0CL\0DX\0 \0SREG\0" + "SS\0DS\0ES\0FS\0GS\0CS\0ST0\0STI\0" + "MM\0MM32\0MM64\0XMM\0XMM32\0XMM64\0XMM128\0XMM0\0"); DefineLstLoad("ST_SEG_REGS","ES\0CS\0SS\0DS\0FS\0GS\0"); DefineLstLoad("ST_FSTK_REGS","ST0\0ST1\0ST2\0ST3\0ST4\0ST5\0ST6\0ST7\0"); } @@ -239,19 +242,19 @@ U0 CmpFillTables() cmp.to_reg_vars_map=CAlloc(NUM_REGS*sizeof(U8)); cmp.num_reg_vars=0; - cmp.reg_vars_mask=REG_VARS_MASK; + cmp.reg_vars_mask=REGG_C_LOCAL_VARS; for (i=0;ilast_lex; - CStreamBlk *tempe=lx->last_stream_blk; - if (tempe!=&lx->next_stream_blk) { - st=MStrPrint("%s%s",tempe->body,buf); - Free(tempe->body); - tempe->body=st; - } else - PrintErr("No exe{} blk\n"); - Free(buf); -} - -U8 *LexStatement2Bin(CLex *lx,I64 *_type,I64 cmp_flags=0) -{//Compile one lx statement to bin code. +U8 *LexStatement2Bin(CCmpCtrl *cc,I64 *_type,I64 cmp_flags=0) +{//Compile one cc statement to bin code. I64 size,i,j,k,*result=INVALID_PTR; - CLexCodeCtrl *tempcbh; + CCodeCtrl *tempcbh; if (_type) *_type=RT_I64; - Btr(&lx->flags,Lf_OPT_TRACE_PRESENT); - if (lx->a_depth==2) - LCCPush(lx); - LCCInit(lx); - if (!PrsStatement(lx,,,cmp_flags)) { - if (lx->lcc.lcc_root.next!=&lx->lcc.lcc_root) { - lx->lcc.lcc_root.last->ic_flags&=~ICF_NO_DEPEND_RESULT; - LCCAdd(lx,IC_RETURN_VAL2,0,0); - LCCAdd(lx,IC_RET,0,0); - if (result=LCCCompile(lx,&size,NULL,_type)) { - if (lx->flags&LF_AOT_COMPILE) { - j=lx->a->ip; + Btr(&cc->flags,CCf_OPT_TRACE_PRESENT); + if (cc->aot_depth==2) + COCPush(cc); + COCInit(cc); + if (!PrsStatement(cc,,,cmp_flags)) { + if (cc->coc.coc_root.next!=&cc->coc.coc_root) { + cc->coc.coc_root.last->ic_flags&=~ICF_NO_DEPEND_RESULT; + ICAdd(cc,IC_RETURN_VAL2,0,0); + ICAdd(cc,IC_RET,0,0); + if (result=COCCompile(cc,&size,NULL,_type)) { + if (cc->flags&CCF_AOT_COMPILE) { + j=cc->aotc->ip; k=(size+7)>>3; for (i=0;ilcc.lcc_root.next); - if (lx->a_depth==2) { - tempcbh=LCCPopNoFree(lx); - LCCAppend(lx,tempcbh); + QueDel(&cc->coc.coc_root.next); + if (cc->aot_depth==2) { + tempcbh=COCPopNoFree(cc); + COCAppend(cc,tempcbh); } return result; } -CExe *CmpJoin(CLex *lx,I64 cmp_flags,U8 *map_name=NULL,U8 mapfile_drv=0) +CAOT *CmpJoin(CCmpCtrl *cc,I64 cmp_flags,U8 *map_name=NULL,U8 mapfile_drv_let=0) { - CAOTCtrl *a,*old_a=lx->a; + CAOTCtrl *aotc,*old_aot=cc->aotc; I64 i,j,l; U8 *buf; - CAsmCodeBlk *tempc; - CExeImportExport *tempe; + CAOTBinBlk *tempbin; + CAOTImportExport *tempie; Bool okay=TRUE; CLexHashTableContext *htc=MAlloc(sizeof(CLexHashTableContext)); - CExe *result=CAlloc(sizeof(CExe)),*parent; - if (parent=lx->exe) { - result->parent_exe=parent; + CAOT *result=CAlloc(sizeof(CAOT)),*parent; + if (parent=cc->aot) { + result->parent_aot=parent; QueIns(result,parent->last); } else QueInit(result); - lx->exe=result; + cc->aot=result; result->next_ie=result->last_ie=&result->next_ie; - lx->a=a=CAlloc(sizeof(CAOTCtrl)); - lx->a_depth++; + cc->aotc=aotc=CAlloc(sizeof(CAOTCtrl)); + cc->aot_depth++; - a->cb=CAlloc(sizeof(CAsmCodeBlk)); - a->max_align_bits=0; - a->module_org=INVALID_PTR; + aotc->bin=CAlloc(sizeof(CAOTBinBlk)); + aotc->max_align_bits=0; + aotc->module_org=INVALID_PTR; - MemCpy(htc,&lx->htc,sizeof(CLexHashTableContext)); - if (lx->htc.fun) - lx->htc.glbl_hash_table=HashTableNew(128); + MemCpy(htc,&cc->htc,sizeof(CLexHashTableContext)); + if (cc->htc.fun) + cc->htc.glbl_hash_table=HashTableNew(128); else - lx->htc.glbl_hash_table=HashTableNew(1024); - if (lx->flags&LF_AOT_COMPILE) { - lx->htc.define_hash_table=lx->htc.glbl_hash_table; - if (lx->a_depth<=1) - lx->htc.glbl_hash_table->next=cmp.asm_hash; + cc->htc.glbl_hash_table=HashTableNew(1024); + if (cc->flags&CCF_AOT_COMPILE) { + cc->htc.define_hash_table=cc->htc.glbl_hash_table; + if (cc->aot_depth<=1) + cc->htc.glbl_hash_table->next=cmp.asm_hash; else - lx->htc.glbl_hash_table->next=htc->glbl_hash_table; + cc->htc.glbl_hash_table->next=htc->glbl_hash_table; } else - lx->htc.glbl_hash_table->next=Fs->hash_table; - lx->htc.hash_table_lst=lx->htc.local_hash_table=HashTableNew(16); - lx->htc.local_hash_table->next=lx->htc.glbl_hash_table; - lx->htc.local_var_lst=lx->htc.fun; //HolyC local vars - lx->htc.fun=NULL; + cc->htc.glbl_hash_table->next=Fs->hash_table; + cc->htc.hash_table_lst=cc->htc.local_hash_table=HashTableNew(16); + cc->htc.local_hash_table->next=cc->htc.glbl_hash_table; + cc->htc.local_var_lst=cc->htc.fun; //HolyC local vars + cc->htc.fun=NULL; try { if (cmp_flags&CMPF_LEX_FIRST) - Lex(lx); + Lex(cc); if (!(cmp_flags&CMPF_ONE_ASM_INS)) cmp_flags|=CMPF_PRS_SEMICOLON; - if (lx->flags&LF_AOT_COMPILE) { - while (lx->token!=TK_EOF) { - buf=LexStatement2Bin(lx,NULL,cmp_flags); + if (cc->flags&CCF_AOT_COMPILE) { + while (cc->token!=TK_EOF) { + buf=LexStatement2Bin(cc,NULL,cmp_flags); if (buf!=INVALID_PTR) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_MAIN; - tempe->ip=buf; - QueIns(tempe,result->last_ie); + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_MAIN; + tempie->ip=buf; + QueIns(tempie,result->last_ie); } if (cmp_flags&CMPF_ASM_BLK) break; } } else - PrsStatement(lx,,,cmp_flags); - AsmGlblsResolve(lx,result); + PrsStatement(cc,,,cmp_flags); + AOTGlblsResolve(cc,result); } catch { if (Fs->except_ch=='Compiler' && !(cmp_flags&CMPF_ASM_BLK)) { - LexPutPos(lx); + LexPutPos(cc); Fs->catch_except=TRUE; } okay=FALSE; } if (!okay) { - if (lx->error_cnt<1) - lx->error_cnt=1; - lx->exe=result->parent_exe; + if (cc->error_cnt<1) + cc->error_cnt=1; + cc->aot=result->parent_aot; Free(result); - LinkedLstDel(a->cb); + LinkedLstDel(aotc->bin); result=NULL; } else { - if (map_name && !cmp.dont_write_to_dsk) - Who("-r",lx->htc.glbl_hash_table,map_name,mapfile_drv); - HashTableDel(lx->htc.local_hash_table); - HashTableDel(lx->htc.glbl_hash_table); + if (map_name) + MapFileWrite(cc->htc.glbl_hash_table,map_name,mapfile_drv_let); + HashTableDel(cc->htc.local_hash_table); + HashTableDel(cc->htc.glbl_hash_table); - if (!a->num_ex_U8s) + if (!aotc->num_bin_U8s) result->buf=NULL; else { - if (lx->flags&LF_AOT_COMPILE) - result->buf=MAlloc(a->num_ex_U8s); + if (cc->flags&CCF_AOT_COMPILE) + result->buf=MAlloc(aotc->num_bin_U8s); else { - if (a->module_org==INVALID_PTR) - result->buf=MAlloc(a->num_ex_U8s,Fs->code_heap); + if (aotc->module_org==INVALID_PTR) + result->buf=MAlloc(aotc->num_bin_U8s,Fs->code_heap); else - result->buf=a->module_org; + result->buf=aotc->module_org; } - result->ex_U8s=a->num_ex_U8s; - tempc=a->cb; + result->aot_U8s=aotc->num_bin_U8s; + tempbin=aotc->bin; j=0; - l=a->num_ex_U8s; - while (tempc) { + l=aotc->num_bin_U8s; + while (tempbin) { i=l; - if (i>ASM_CODE_BLK_SIZE) - i=ASM_CODE_BLK_SIZE; - MemCpy(result->buf+j,tempc->body,i); + if (i>AOT_BIN_BLK_SIZE) + i=AOT_BIN_BLK_SIZE; + MemCpy(result->buf+j,tempbin->body,i); j+=i; l-=i; - tempc=tempc->next; + tempbin=tempbin->next; } } - LinkedLstDel(a->cb); - result->abss=a->abss; - result->heap_glbls=a->heap_glbls; - result->max_align_bits=a->max_align_bits; - result->module_org=a->module_org; + LinkedLstDel(aotc->bin); + result->abss=aotc->abss; + result->heap_glbls=aotc->heap_glbls; + result->max_align_bits=aotc->max_align_bits; + result->module_org=aotc->module_org; } - lx->exe=parent; - MemCpy(&lx->htc,htc,sizeof(CLexHashTableContext)); + cc->aot=parent; + MemCpy(&cc->htc,htc,sizeof(CLexHashTableContext)); Free(htc); - Free(a); - lx->a=old_a; - lx->a_depth--; + Free(aotc); + cc->aotc=old_aot; + cc->aot_depth--; return result; } -CExe *CmpBuf(U8 *buf,U8 *map_name=NULL, - I64 *error_cnt=NULL, I64 *warning_cnt=NULL,U8 mapfile_drv=0) +CAOT *CmpBuf(U8 *buf,U8 *map_name=NULL, + I64 *error_cnt=NULL, I64 *warning_cnt=NULL,U8 mapfile_drv_let=0) { - CLex *lx; - CExe *result=NULL; - lx=LexNew(buf,LF_DONT_FREE_BUF); - lx->flags|=LF_AOT_COMPILE; - QueIns(lx,Fs->last_lex); - result=CmpJoin(lx,CMPF_LEX_FIRST,map_name,mapfile_drv); - if (error_cnt) *error_cnt=lx->error_cnt; - if (warning_cnt) *warning_cnt=lx->warning_cnt; - QueRem(lx); + CCmpCtrl *cc; + CAOT *result=NULL; + cc=CmpCtrlNew(buf,CCF_DONT_FREE_BUF); + cc->flags|=CCF_AOT_COMPILE; + QueIns(cc,Fs->last_lex); + result=CmpJoin(cc,CMPF_LEX_FIRST,map_name,mapfile_drv_let); + if (error_cnt) *error_cnt=cc->error_cnt; + if (warning_cnt) *warning_cnt=cc->warning_cnt; + QueRem(cc); if (result) - LexDel(lx); + CmpCtrlDel(cc); return result; } -U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx) +U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tempaot) { - I64 i,ip2=tempx->buf+tempx->ip,*str=NULL; + I64 i,ip2=tempaot->buf+tempaot->ip,*str=NULL; U8 *ptr; - CLexCodeMisc *g_lb; - CExeAbsAddr *tempa,*tempa1; - CExeImportExport *tempe,*tempe1; + CCodeMisc *g_lb; + CAOTAbsAddr *tempa,*tempa1; + CAOTImportExport *tempie,*tempie1; CHashExport *tempex; - tempa=tempx->abss; + tempa=tempaot->abss; while (tempa) { tempa1=tempa->next; ptr=ip2+tempa->ip; nobound_switch (tempa->type) { - case EAT_ADD_U8: *ptr(U8 *) +=ip2; break; - case EAT_SUB_U8: *ptr(U8 *) -=ip2; break; - case EAT_ADD_U16: *ptr(U16 *)+=ip2; break; - case EAT_SUB_U16: *ptr(U16 *)-=ip2; break; - case EAT_ADD_U32: *ptr(U32 *)+=ip2; break; - case EAT_SUB_U32: *ptr(U32 *)-=ip2; break; - case EAT_ADD_U64: *ptr(I64 *)+=ip2; break; - case EAT_SUB_U64: *ptr(I64 *)-=ip2; break; + case AAT_ADD_U8: *ptr(U8 *) +=ip2; break; + case AAT_SUB_U8: *ptr(U8 *) -=ip2; break; + case AAT_ADD_U16: *ptr(U16 *)+=ip2; break; + case AAT_SUB_U16: *ptr(U16 *)-=ip2; break; + case AAT_ADD_U32: *ptr(U32 *)+=ip2; break; + case AAT_SUB_U32: *ptr(U32 *)-=ip2; break; + case AAT_ADD_U64: *ptr(I64 *)+=ip2; break; + case AAT_SUB_U64: *ptr(I64 *)-=ip2; break; } Free(tempa); tempa=tempa1; } - tempe=tempx->next_ie; - while (tempe!=&tempx->next_ie) { - tempe1=tempe->next; - if (tempe->str) { + tempie=tempaot->next_ie; + while (tempie!=&tempaot->next_ie) { + tempie1=tempie->next; + if (tempie->str) { Free(str); - str=tempe->str; + str=tempie->str; } - switch (tempe->type) { - case EIT_REL32_EXPORT: - case EIT_IMM32_EXPORT: - case EIT_REL64_EXPORT: - case EIT_IMM64_EXPORT: + switch (tempie->type) { + case IET_REL32_EXPORT: + case IET_IMM32_EXPORT: + case IET_REL64_EXPORT: + case IET_IMM64_EXPORT: tempex=CAlloc(sizeof(CHashExport)); tempex->str=str; str=NULL; tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; - if (tempe->type==EIT_IMM32_EXPORT||tempe->type==EIT_IMM64_EXPORT) - tempex->val=tempe->ip; + if (tempie->type==IET_IMM32_EXPORT||tempie->type==IET_IMM64_EXPORT) + tempex->val=tempie->ip; else - tempex->val=tempe->ip+ip2; - tempex->src_link=tempe->src_link; - tempe->src_link=NULL; + tempex->val=tempie->ip+ip2; + tempex->src_link=tempie->src_link; + tempie->src_link=NULL; HashAdd(tempex,Fs->hash_table); SysSymImportsResolve(tempex->str); break; - case EIT_REL_I0...EIT_IMM_I64: - if (tempe->str) { - if (tempe->flags&EIF_GOTO_LABEL) { - if(!(g_lb=LCCGoToLabelFind(lx,str))) + case IET_REL_I0...IET_IMM_I64: + if (tempie->str) { + if (tempie->flags&IEF_GOTO_LABEL) { + if(!(g_lb=COCGoToLabelFind(cc,str))) "Unresolved Reference:%s\n",str; else { g_lb->use_cnt++; g_lb=OptLabelFwd(g_lb); - i=g_lb->addr+tempx->buf; + i=g_lb->addr+tempaot->buf; } tempex=NULL; } else { - if (!(tempex=HashFind(str,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) + if (!(tempex=HashFind(str,Fs->hash_table, + HTG_ALL-HTT_IMPORT_SYS_SYM))) "Unresolved Reference:%s\n",str; else { if (tempex->type & HTT_FUN) @@ -262,94 +249,94 @@ U0 CmpFixUpJITAsm(CLex *lx,CExe *tempx) } } if (tempex || g_lb) { - ptr=tempe->ip+ip2; - nobound_switch (tempe->type) { - case EIT_REL_I0: - case EIT_IMM_U0: + ptr=tempie->ip+ip2; + nobound_switch (tempie->type) { + case IET_REL_I0: + case IET_IMM_U0: break; - case EIT_REL_I8: + case IET_REL_I8: if (!(MIN_I8<=i-ptr-1<=MAX_I8)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); *ptr(U8 *) =i-ptr-1; break; - case EIT_IMM_U8: + case IET_IMM_U8: *ptr(U8 *) =i; break; - case EIT_REL_I16: + case IET_REL_I16: if (!(MIN_I16<=i-ptr-2<=MAX_I16)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); *ptr(U16 *)=i-ptr-2; break; - case EIT_IMM_U16: + case IET_IMM_U16: *ptr(U16 *)=i; break; - case EIT_REL_I32: + case IET_REL_I32: if (!(MIN_I32<=i-ptr-4<=MAX_I32)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); *ptr(U32 *)=i-ptr-4; break; - case EIT_IMM_U32: + case IET_IMM_U32: *ptr(U32 *)=i; break; - case EIT_REL_I64: + case IET_REL_I64: *ptr(I64 *)=i-ptr-8; break; - case EIT_IMM_I64: + case IET_IMM_I64: *ptr(I64 *)=i; break; } } break; } - Free(tempe->src_link); - Free(tempe); - tempe=tempe1; + Free(tempie->src_link); + Free(tempie); + tempie=tempie1; } Free(str); - if (!lx->a_depth && Bt(&lx->opts,OPTf_COMPILE_TRACE)) - Un(ip2,tempx->ex_U8s,64); - QueRem(tempx); - Free(tempx); + if (!cc->aot_depth && Bt(&cc->opts,OPTf_COMPILE_TRACE)) + Un(ip2,tempaot->aot_U8s,64); + QueRem(tempaot); + Free(tempaot); } -U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx) +U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tempaot) { - CAOTCtrl *a=lx->a; - I64 i,ip2=tempx->ip+lx->a->ip; + CAOTCtrl *aotc=cc->aotc; + I64 i,ip2=tempaot->ip+cc->aotc->ip; U8 *ptr; - CLexCodeMisc *g_lb=NULL; - CExeAbsAddr *tempa,*tempa1; - CExeImportExport *tempe,*tempe1; + CCodeMisc *g_lb=NULL; + CAOTAbsAddr *tempa,*tempa1; + CAOTImportExport *tempie,*tempie1; - tempa=tempx->abss; + tempa=tempaot->abss; while (tempa) { tempa1=tempa->next; - tempa->next=a->abss; - ptr=tempx->buf+tempx->ip+tempa->ip; + tempa->next=aotc->abss; + ptr=tempaot->buf+tempaot->ip+tempa->ip; nobound_switch (tempa->type) { - case EAT_ADD_U8: *ptr(U8 *)+=ip2; break; - case EAT_SUB_U8: *ptr(U8 *)-=ip2; break; - case EAT_ADD_U16: *ptr(U16 *)+=ip2; break; - case EAT_SUB_U16: *ptr(U16 *)-=ip2; break; - case EAT_ADD_U32: *ptr(U32 *)+=ip2; break; - case EAT_SUB_U32: *ptr(U32 *)-=ip2; break; - case EAT_ADD_U64: *ptr(I64 *)+=ip2; break; - case EAT_SUB_U64: *ptr(I64 *)-=ip2; break; + case AAT_ADD_U8: *ptr(U8 *)+=ip2; break; + case AAT_SUB_U8: *ptr(U8 *)-=ip2; break; + case AAT_ADD_U16: *ptr(U16 *)+=ip2; break; + case AAT_SUB_U16: *ptr(U16 *)-=ip2; break; + case AAT_ADD_U32: *ptr(U32 *)+=ip2; break; + case AAT_SUB_U32: *ptr(U32 *)-=ip2; break; + case AAT_ADD_U64: *ptr(I64 *)+=ip2; break; + case AAT_SUB_U64: *ptr(I64 *)-=ip2; break; } - a->abss=tempa; + aotc->abss=tempa; tempa->ip+=ip2; tempa=tempa1; } - tempe=tempx->next_ie; - while (tempe!=&tempx->next_ie) { - tempe1=tempe->next; - QueRem(tempe); - if (EIT_REL_I0<=tempe->type<=EIT_IMM_I64) { - if (tempe->str) { - if (tempe->flags&EIF_GOTO_LABEL) { - if(!(g_lb=LCCGoToLabelFind(lx,tempe->str))) - "Unresolved Reference:%s\n",tempe->str; + tempie=tempaot->next_ie; + while (tempie!=&tempaot->next_ie) { + tempie1=tempie->next; + QueRem(tempie); + if (IET_REL_I0<=tempie->type<=IET_IMM_I64) { + if (tempie->str) { + if (tempie->flags&IEF_GOTO_LABEL) { + if(!(g_lb=COCGoToLabelFind(cc,tempie->str))) + "Unresolved Reference:%s\n",tempie->str; else { g_lb->use_cnt++; g_lb=OptLabelFwd(g_lb); @@ -360,108 +347,108 @@ U0 CmpFixUpAOTAsm(CLex *lx,CExe *tempx) } else g_lb=NULL; - ptr=tempx->buf+tempx->ip+tempe->ip; + ptr=tempaot->buf+tempaot->ip+tempie->ip; if (g_lb) { - i=g_lb->addr+tempx->buf; - nobound_switch (tempe->type) { - case EIT_REL_I0: - case EIT_IMM_U0: + i=g_lb->addr+tempaot->buf; + nobound_switch (tempie->type) { + case IET_REL_I0: + case IET_IMM_U0: break; - case EIT_REL_I8: + case IET_REL_I8: if (!(MIN_I8<=i-ptr-1<=MAX_I8)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); *ptr(U8 *) =i-ptr-1; break; - case EIT_IMM_U8: + case IET_IMM_U8: *ptr(U8 *) =i; break; - case EIT_REL_I16: + case IET_REL_I16: if (!(MIN_I16<=i-ptr-2<=MAX_I16)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); *ptr(U16 *)=i-ptr-2; break; - case EIT_IMM_U16: + case IET_IMM_U16: *ptr(U16 *)=i; break; - case EIT_REL_I32: + case IET_REL_I32: if (!(MIN_I32<=i-ptr-4<=MAX_I32)) - LexExcept(lx,"branch out of range at "); + LexExcept(cc,"branch out of range at "); *ptr(U32 *)=i-ptr-4; break; - case EIT_IMM_U32: + case IET_IMM_U32: *ptr(U32 *)=i; break; - case EIT_REL_I64: + case IET_REL_I64: *ptr(I64 *)=i-ptr-8; break; - case EIT_IMM_I64: + case IET_IMM_I64: *ptr(I64 *)=i; break; } - Free(tempe->src_link); - Free(tempe); + Free(tempie->src_link); + Free(tempie); } else { - switch (tempe->type) { + switch (tempie->type) { sub_switch_start: - case EIT_REL32_EXPORT: - case EIT_IMM32_EXPORT: - case EIT_REL64_EXPORT: - case EIT_IMM64_EXPORT: - case EIT_IMM_U0: - case EIT_IMM_U8: - case EIT_IMM_U16: - case EIT_IMM_U32: - case EIT_IMM_I64: - case EIT_REL_I0: + case IET_REL32_EXPORT: + case IET_IMM32_EXPORT: + case IET_REL64_EXPORT: + case IET_IMM64_EXPORT: + case IET_IMM_U0: + case IET_IMM_U8: + case IET_IMM_U16: + case IET_IMM_U32: + case IET_IMM_I64: + case IET_REL_I0: break; - case EIT_REL_I8: *ptr(U8 *) -=ip2; break; - case EIT_REL_I16: *ptr(U16 *)-=ip2; break; - case EIT_REL_I32: *ptr(U32 *)-=ip2; break; - case EIT_REL_I64: *ptr(I64 *)-=ip2; break; + case IET_REL_I8: *ptr(U8 *) -=ip2; break; + case IET_REL_I16: *ptr(U16 *)-=ip2; break; + case IET_REL_I32: *ptr(U32 *)-=ip2; break; + case IET_REL_I64: *ptr(I64 *)-=ip2; break; sub_switch_end: - tempe->ip+=ip2; + tempie->ip+=ip2; break; } - tempe->exe=NULL; - QueIns(tempe,tempx->parent_exe->last_ie); + tempie->aot=NULL; + QueIns(tempie,tempaot->parent_aot->last_ie); } - tempe=tempe1; + tempie=tempie1; } } -I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0) +I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) {//AOT Compile CPP or PRJ file a and output BIN file. Returns err_cnt. U8 *ptr,*fbuf=NULL,*fbuf2=NULL,*fbuf3=NULL, - *patch_table=MAlloc(0x20000); - CExe *tempx; - I64 i,cnt,size=0,error_cnt=0,warning_cnt=0,ex_U8s=0; + *patch_table=MAlloc(0x20000); + CAOT *tempaot; + I64 i,cnt,size=0,error_cnt=0,warning_cnt=0,aot_U8s=0; CBinFile *bfh; - CExeImportExport *tempe,*tempe1; - CExeAbsAddr *tempa,*tempa1; - CExeHeapGlblRef *temphgr,*temphgr1; - CExeHeapGlbl *temphg,*temphg1; + CAOTImportExport *tempie,*tempie1; + CAOTAbsAddr *tempa,*tempa1; + CAOTHeapGlblRef *temphgr,*temphgr1; + CAOTHeapGlbl *temphg,*temphg1; fbuf=DftExt(filename,"PRJ.Z"); fbuf2=MStrPrint("#include \"%s\"",fbuf); if (map_name) fbuf3=DftExt(map_name,"MAP.Z"); - if (tempx=CmpBuf(fbuf2,fbuf3,&error_cnt,&warning_cnt,mapfile_drv)) { - ex_U8s=tempx->ex_U8s; + if (tempaot=CmpBuf(fbuf2,fbuf3,&error_cnt,&warning_cnt,mapfile_drv_let)) { + aot_U8s=tempaot->aot_U8s; ptr=patch_table; - //See $LK,"Load",A="MN:Load"$() +//See $LK,"Load",A="MN:Load"$() cnt=0; - tempa=tempx->abss; + tempa=tempaot->abss; while (tempa) { if (!(tempa->type&1)) cnt++; tempa=tempa->next; } if (cnt) { - *ptr++=EIT_ABS_ADDR; + *ptr++=IET_ABS_ADDR; *ptr(U32 *)++=cnt; *ptr++=0; - tempa=tempx->abss; + tempa=tempaot->abss; while (tempa) { tempa1=tempa->next; if (!(tempa->type&1)) @@ -470,7 +457,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0) tempa=tempa1; } } - temphg=tempx->heap_glbls; + temphg=tempaot->heap_glbls; while (temphg) { temphg1=temphg->next; cnt=0; @@ -480,7 +467,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0) temphgr=temphgr->next; } if (cnt) { - *ptr++=EIT_DATA_HEAP; + *ptr++=IET_DATA_HEAP; *ptr(U32 *)++=cnt; if (temphg->str) { i=StrLen(temphg->str); @@ -502,106 +489,108 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv=0) temphg=temphg1; } -//Do exports first - tempe=tempx->next_ie; - while (tempe!=&tempx->next_ie) { - tempe1=tempe->next; - if (!tempe->type || EIT_REL32_EXPORT<=tempe->type<=EIT_IMM64_EXPORT) { - QueRem(tempe); - *ptr++=tempe->type; - *ptr(U32 *)++=tempe->ip; - if (tempe->str) { - i=StrLen(tempe->str); - MemCpy(ptr,tempe->str,i+1); - Free(tempe->str); + //Do exports first + tempie=tempaot->next_ie; + while (tempie!=&tempaot->next_ie) { + tempie1=tempie->next; + if (!tempie->type || IET_REL32_EXPORT<=tempie->type<=IET_IMM64_EXPORT) { + QueRem(tempie); + *ptr++=tempie->type; + *ptr(U32 *)++=tempie->ip; + if (tempie->str) { + i=StrLen(tempie->str); + MemCpy(ptr,tempie->str,i+1); + Free(tempie->str); ptr+=i+1; } else *ptr++=0; - Free(tempe->src_link); - Free(tempe); + Free(tempie->src_link); + Free(tempie); } - tempe=tempe1; + tempie=tempie1; } -//Do imports second - tempe=tempx->next_ie; - while (tempe!=&tempx->next_ie) { - tempe1=tempe->next; - QueRem(tempe); - *ptr++=tempe->type; - if (tempe->exe) - tempe->ip+=tempe->exe->ip2; - *ptr(U32 *)++=tempe->ip; - if (tempe->str) { - i=StrLen(tempe->str); - MemCpy(ptr,tempe->str,i+1); - Free(tempe->str); + //Do imports second + tempie=tempaot->next_ie; + while (tempie!=&tempaot->next_ie) { + tempie1=tempie->next; + QueRem(tempie); + *ptr++=tempie->type; + if (tempie->aot) + tempie->ip+=tempie->aot->ip2; + *ptr(U32 *)++=tempie->ip; + if (tempie->str) { + i=StrLen(tempie->str); + MemCpy(ptr,tempie->str,i+1); + Free(tempie->str); ptr+=i+1; } else *ptr++=0; - Free(tempe->src_link); - Free(tempe); - tempe=tempe1; + Free(tempie->src_link); + Free(tempie); + tempie=tempie1; } - *ptr++=EIT_END; + *ptr++=IET_END; MemSet(ptr,0,16); i=ptr-patch_table; - //Needs 16 ALIGN - size=(sizeof(CBinFile)+ex_U8s+i+15)&-16; +//Needs 16 ALIGN + size=(sizeof(CBinFile)+aot_U8s+i+15)&-16; bfh=MAlloc(size); bfh->jmp=0xEB+256*(sizeof(CBinFile)-2); #assert sizeof(CBinFile)-2<=MAX_I8 bfh->reserved=0; bfh->bin_signature=BIN_SIGNATURE_VAL; - bfh->module_org=tempx->module_org; - bfh->module_align_bits=tempx->max_align_bits; - bfh->patch_table_offset=sizeof(CBinFile)+ex_U8s; + bfh->module_org=tempaot->module_org; + bfh->module_align_bits=tempaot->max_align_bits; + bfh->patch_table_offset=sizeof(CBinFile)+aot_U8s; bfh->file_size=size; - MemCpy(bfh(U8 *)+sizeof(CBinFile),tempx->buf,ex_U8s); - MemCpy(bfh(U8 *)+sizeof(CBinFile)+ex_U8s,patch_table,size-ex_U8s-sizeof(CBinFile)); + MemCpy(bfh(U8 *)+sizeof(CBinFile),tempaot->buf,aot_U8s); + MemCpy(bfh(U8 *)+sizeof(CBinFile)+aot_U8s,patch_table, + size-aot_U8s-sizeof(CBinFile)); Free(fbuf2); if (out_name) fbuf2=DftExt(out_name,"BIN.Z"); else fbuf2=ChgExt(fbuf,"BIN.Z"); - if (!cmp.dont_write_to_dsk) - FileWrite(fbuf2,bfh,size); + FileWrite(fbuf2,bfh,size); Free(bfh); - Free(tempx->buf); - QueDel(tempx); - Free(tempx); + Free(tempaot->buf); + QueDel(tempaot); + Free(tempaot); } Free(patch_table); Free(fbuf); Free(fbuf2); Free(fbuf3); - Print("Errs:%d Warns:%d Code:%X Size:%X\n",error_cnt,warning_cnt,ex_U8s,size); + Print("Errs:%d Warns:%d Code:%X Size:%X\n", + error_cnt,warning_cnt,aot_U8s,size); return error_cnt; } -I64 ExePutS(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE,CLexHashTableContext *htc=NULL) +I64 ExePutS(U8 *buf,U8 *filename=NULL, + Bool just_load=FALSE,CLexHashTableContext *htc=NULL) {//JIT Compile and execute text from a puts(""). I64 result; Bool okay=TRUE; - CLex *lx; + CCmpCtrl *cc; if (!filename) filename=dsk.temp_filename; - lx=LexNew(buf,LF_DONT_FREE_BUF,filename); + cc=CmpCtrlNew(buf,CCF_DONT_FREE_BUF,filename); if (just_load) - lx->flags|=LF_JUST_LOAD; + cc->flags|=CCF_JUST_LOAD; if (Fs->last_lex!=&Fs->next_lex) { - lx->opts=Fs->last_lex->opts; + cc->opts=Fs->last_lex->opts; if (htc) { - lx->flags=lx->flags &~LF_ASM_EXPRESSIONS | - htc->old_flags&LF_ASM_EXPRESSIONS; - MemCpy(&lx->htc,htc,sizeof(CLexHashTableContext)); + cc->flags=cc->flags &~CCF_ASM_EXPRESSIONS | + htc->old_flags&CCF_ASM_EXPRESSIONS; + MemCpy(&cc->htc,htc,sizeof(CLexHashTableContext)); } } - QueIns(lx,Fs->last_lex); + QueIns(cc,Fs->last_lex); try { - Lex(lx); - result=ExeCmdLine(lx); + Lex(cc); + result=ExeCmdLine(cc); } catch { if (Fs->except_ch=='Compiler' || Fs->except_ch=='Break') { Fs->catch_except=TRUE; @@ -609,9 +598,9 @@ I64 ExePutS(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE,CLexHashTableContext result=0; } } - QueRem(lx); + QueRem(cc); if (okay) - LexDel(lx); //TODO: can crash + CmpCtrlDel(cc); //TODO: can crash return result; } @@ -628,7 +617,7 @@ I64 ExeFile(U8 *name,Bool just_load=FALSE) {//JIT Compile and execute a file. I64 result; U8 *name2=DftExt(name,"CPP.Z"), - *st=MStrPrint("#include \"%s\";",name2); + *st=MStrPrint("#include \"%s\";",name2); result=ExePutS(st,name,just_load); Free(st); Free(name2); @@ -638,19 +627,19 @@ I64 ExeFile(U8 *name,Bool just_load=FALSE) I64 ExePutS2(U8 *buf,U8 *filename=NULL,Bool just_load=FALSE) {//throws exceptions I64 result; - CLex *lx; + CCmpCtrl *cc; if (!filename) filename=dsk.temp_filename; - lx=LexNew(buf,LF_DONT_FREE_BUF,filename); + cc=CmpCtrlNew(buf,CCF_DONT_FREE_BUF,filename); if (just_load) - lx->flags|=LF_JUST_LOAD; + cc->flags|=CCF_JUST_LOAD; if (Fs->last_lex!=&Fs->next_lex) - lx->opts=Fs->last_lex->opts; - QueIns(lx,Fs->last_lex); - Lex(lx); - result=ExeCmdLine(lx); - QueRem(lx); - LexDel(lx); + cc->opts=Fs->last_lex->opts; + QueIns(cc,Fs->last_lex); + Lex(cc); + result=ExeCmdLine(cc); + QueRem(cc); + CmpCtrlDel(cc); return result; } @@ -667,7 +656,7 @@ I64 ExeFile2(U8 *name,Bool just_load=FALSE) {//throws exceptions I64 result; U8 *name2=DftExt(name,"CPP.Z"), - *st=MStrPrint("#include \"%s\";",name2); + *st=MStrPrint("#include \"%s\";",name2); result=ExePutS2(st,name,just_load); Free(st); Free(name2); @@ -675,17 +664,17 @@ I64 ExeFile2(U8 *name,Bool just_load=FALSE) } I64 StreamExePrint(U8 *fmt,...) -{//Suppose you want a value from the stream to be used in an #exe{} block... +{//Causes value from stream to be used in an #exe{} block. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); I64 result=0; CLexHashTableContext *htc; - CLex *lx=Fs->last_lex; - if (lx==&Fs->next_lex) + CCmpCtrl *cc=Fs->last_lex; + if (cc==&Fs->next_lex) PrintErr("Not Compiling\n"); else { - if (!(lx->flags&LF_EXE_BLK)) - LexExcept(lx,"StreamExePrint only allowed in AOT compiled #exe{} mode."); - if (htc=lx->htc.next) + if (!(cc->flags&CCF_EXE_BLK)) + LexExcept(cc,"StreamExePrint only allowed in AOT compiled #exe{} mode."); + if (htc=cc->htc.next) result=ExePutS(buf,,,htc); } Free(buf); @@ -694,18 +683,13 @@ I64 StreamExePrint(U8 *fmt,...) U0 CInit() { - cmp.compiled_lines=0; - cmp.dont_write_to_dsk=FALSE; CmpLoadDefines; CmpFillTables; - - MemSet(&cmp.ic_nop,0,sizeof(CIntermediateCode)); QueInit(&cmp.ic_nop); cmp.ic_nop.ic_class=cmp.internal_types[RT_I64]; cmp.ic_nop.ic_code=IC_NOP1; - AsmHashLoad; - UasmHashLoad; + UAsmHashLoad; } CInit; diff --git a/Compiler/CMisc.CPP b/Compiler/CMisc.CPP index 773faae..5fb2191 100644 --- a/Compiler/CMisc.CPP +++ b/Compiler/CMisc.CPP @@ -40,583 +40,97 @@ Bool Echo(Bool val) return OptEqu(OPTf_ECHO,val); } +U0 StreamPrint(U8 *fmt,...) +{//Injects text into the compile stream. Used in #exe{} blocks. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st; + CCmpCtrl *cc=Fs->last_lex; + CStreamBlk *tempe=cc->last_stream_blk; + if (tempe!=&cc->next_stream_blk) { + st=MStrPrint("%s%s",tempe->body,buf); + Free(tempe->body); + tempe->body=st; + } else + PrintErr("No exe{} blk\n"); + Free(buf); +} + U0 StreamDir() { U8 *dirname; - if (dirname=DirFile(Fs->last_lex->cur_lfn->full_name)) { + if (dirname=DirFile(Fs->last_lex->lex_include_stk->full_name)) { StreamPrint("\"%s\"",dirname); Free(dirname); } } -CIntermediateStruct intermediate_code_table[IC_NUM_ENTRIES]= -{ -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP1"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"END_EXP"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOP2"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LABEL"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_START"}, -{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"CALL_END2"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RETURN_VAL2"}, -{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_I64"}, -{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"IMM_F64"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"STR_CONST"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ABS_ADDR"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR_IMPORT"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"HEAP_GLBL"}, -{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SIZEOF"}, -{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"TYPE"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"GET_LABEL"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RBP"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"REG"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"FS"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_FS"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GS"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV_GS"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"LEA"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"MOV"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_I64"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_F64"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TO_BOOL"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"TOUPPER"}, -{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"HOLYC_TYPECAST"}, -{IS_1_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"ADDR"}, -{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"COM"}, -{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"NOT"}, -{IS_1_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"UNARY_MINUS"}, -{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF"}, -{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_PP"}, -{IS_1_ARG,1,IST_DEREF,FALSE,TRUE,0,0,0,"DEREF_MM"}, -{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_PP"}, -{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"_MM"}, -{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"PP_"}, -{IS_1_ARG,1,IST_DEREF,TRUE,TRUE,0,0,0,"MM_"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHL"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"SHR"}, -{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHL_CONST"}, -{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SHR_CONST"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"POWER"}, -{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"MUL"}, -{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"DIV"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"MOD"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR"}, -{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ADD"}, -{IS_2_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SUB"}, -{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"ADD_CONST"}, -{IS_1_ARG,1,IST_ASSIGN,FALSE,FALSE,0,0,0,"SUB_CONST"}, -{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"EQUAL_EQUAL"}, -{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"NOT_EQUAL"}, -{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS"}, -{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER_EQUAL"}, -{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"GREATER"}, -{IS_2_ARG,1,IST_CMP,FALSE,FALSE,0,0,0,"LESS_EQUAL"}, -{IS_0_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"PUSH_CMP"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"AND_AND"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"OR_OR"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"XOR_XOR"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_PP"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ASSIGN_MM"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHL_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SHR_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MUL_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"DIV_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"MOD_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"AND_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"OR_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"XOR_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"ADD_EQUAL"}, -{IS_2_ARG,1,IST_ASSIGN,FALSE,TRUE,0,0,0,"SUB_EQUAL"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"JMP"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SUB_CALL"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SWITCH"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"NOBOUND_SWITCH"}, -{IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP"}, -{IS_V_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ADD_RSP1"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ENTER"}, -{IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"PUSH_REGS"}, -{IS_0_ARG,0,IST_ASSIGN,FALSE,FALSE,0,0,0,"POP_REGS"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"LEAVE"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"RET"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_INDIRECT2"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_IMPORT"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CALL_EXTERN"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"ASM"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PREEMPT"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"PUSH"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"POP"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CLFLUSH"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"INVLPG"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U8"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U16"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"IN_U32"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U8"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U16"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"OUT_U32"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RFLAGS"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"CARRY"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RFLAGS"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RAX"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RAX"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RBP"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RBP"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"GET_RSP"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RSP"}, -{IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RIP"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"RDTSC"}, -{IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"HPET"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BT"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTS"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTR"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTC"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTS"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTR"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"LBTC"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSF"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BSR"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INIT"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_INS_REV"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"QUE_REM"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"STRLEN"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_ZERO"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_ZERO"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_CARRY"}, -{IS_0_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_CARRY"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_EQUAL_EQUAL"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_NOT_EQUAL"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER_EQUAL"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_GREATER"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_LESS_EQUAL"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2EQUAL_EQUAL"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2NOT_EQUAL"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER_EQUAL"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2GREATER"}, -{IS_2_ARG,1,IST_NULL,FALSE,FALSE,0,0,0,"BR_2LESS_EQUAL"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_ZERO"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_NOT_ZERO"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_ZERO"}, -{IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_MM_NOT_ZERO"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_ZERO"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_AND_AND_NOT_ZERO"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_ZERO"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"BR_OR_OR_NOT_ZERO"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BT"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTS"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTR"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_BTC"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BT"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTS"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTR"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BR_NOT_BTC"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U8"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U16"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U32"}, -{IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SWAP_U64"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"ABS_I64"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SIGN_I64"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_I64"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MIN_U64"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_I64"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MAX_U64"}, -{IS_2_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"MOD_U64"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRI64"}, -{IS_1_ARG,0,IST_NULL,FALSE,FALSE,0,0,0,"SQRU64"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQR"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ABS"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SQRT"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"SIN"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"COS"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"TAN"}, -{IS_1_ARG,1,IST_NULL,TRUE,FALSE,0,0,0,"ATAN"}, -}; +CD2I32 *LexD2I32(CCmpCtrl *cc,CD2I32 *p) +{//Not HolyC. Sprite-like lex 2D point. + if (cc->token!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); //Skip ( + p->x=LexExpressionI64(cc); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + p->y=LexExpressionI64(cc); + if (cc->token!=')') + LexExcept(cc,"expecting ')' at "); + Lex(cc); //Skip ) + return p; +} -U0 ICClassPut(CHashClass *c) +CD3I32 *LexD3I32(CCmpCtrl *cc,CD3I32 *p) +{//Not HolyC. Sprite-like lex 3D point. + if (cc->token!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); //Skip ( + p->x=LexExpressionI64(cc); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + p->y=LexExpressionI64(cc); + if (cc->token!=',') + LexExcept(cc,"expecting ',' at "); + Lex(cc); //Skip , + p->z=LexExpressionI64(cc); + if (cc->token!=')') + LexExcept(cc,"expecting ')' at "); + Lex(cc); //Skip ) + return p; +} + +U8 *CmdLinePmt() { I64 i; - if (!c) return; - if (c->ptr_stars_cnt>4) { - PrintErr("put_class ptrcnt=%d\n",c->ptr_stars_cnt); - while (TRUE) -//TODO: - Yield; + U8 *result,*st; + if (Fs->new_answer) { + if (Fs->answer_type==RT_F64) + "%8.6fs ansf=%15.7g\n",Fs->answer_time,Fs->answer; + else + "%8.6fs ans=0x%08X=%d\n",Fs->answer_time,Fs->answer,Fs->answer; + Fs->new_answer=FALSE; } - for (i=0;iptr_stars_cnt;i++) - '*'; - c-=c->ptr_stars_cnt; - if (c->str) - "%s",c->str; - else { - PrintErr("put_class str=NULL\n"); - while (TRUE) -//TODO: - Yield; + if (st=CurDir) { + "%s",st; + Free(st); } - '' CH_SPACE; -} + '>'; + if (IsDbg&&IsRaw) + RawDr; + st=GetStr(,,GSF_SHIFT_ESC_EXIT); -U0 ICArgPut(CICArg *a) -{ - if (a->type_pointed) - "%Z %Z %Z ", - a->type&RT_MASK,"ST_RAW_TYPES", - a->type_pointed&RT_MASK,"ST_RAW_TYPES", - a->type>>4,"ST_TY_TYPES"; - else - "%Z %Z ", - a->type&RT_MASK,"ST_RAW_TYPES", - a->type>>4,"ST_TY_TYPES"; - switch (a->type>>4) { - case TY_STK>>4: - "STK"; - break; - case TY_IMM>>4: - "#%X",a->disp; - break; - case TY_REG>>4: - "%Z",a->reg,"ST_U64_REGS"; - break; - case TY_DISP>>4: - "%X[%Z]",a->disp,a->reg,"ST_U64_REGS"; - break; - case TY_RIP_DISP32>>4: - "[%X]",a->disp; - break; - case TY_SIB>>4: - if (a->disp) - "%X",a->disp; - if (a->reg==REG_RIP) - '['; - else - "[%Z+",a->reg&15,"ST_U64_REGS"; - "%Z",a->reg>>8&15,"ST_U64_REGS"; - switch (a->reg>>14) { - case 0: "]"; break; - case 1: "*2]"; break; - case 2: "*4]"; break; - case 3: "*8]"; break; - } - break; - } -} + i=StrLen(st); + result=MAlloc(i+1+2); + MemCpy(result,st,i+1); + i--; + while (i>=0 && Bt(chars_bmp_white_space,result[i])) + i--; + i++; + if (i>0 && result[i-1]==';') + result[i++]=';'; //The Lex goes one beyond + result[i++]='\n';//#define goes to '\n' + result[i]=0; -U0 ICPut(CLex *lx,CIntermediateCode *tempi) -{ - I64 opcode=tempi->ic_code,i; - if (opcode>=IC_END_EXP && opcode!=IC_NOP2) { - "%15ts %016X ",intermediate_code_table[opcode].name,tempi->ic_data; - if (lx->pass) { - if (tempi->r.type&TY_MASK) { - ICArgPut(&tempi->r); - "<-"; - } - if (tempi->a1.type&TY_MASK) - ICArgPut(&tempi->a1); - ','; - if (tempi->a2.type&TY_MASK) - ICArgPut(&tempi->a2); - '' CH_SPACE; - } - ICClassPut(tempi->ic_class); - if (tempi->ic_flags & ICF_LOCK) - "$$BROWN$$lock$$FG$$ "; - if (tempi->ic_flags & ICF_A2_TO_F64) - "$$LTBLUE$$a2d$$FG$$ "; - if (tempi->ic_flags & ICF_A2_TO_INT) - "$$GREEN$$a2i$$FG$$ "; - if (tempi->ic_flags & ICF_A1_TO_F64) - "$$LTBLUE$$a1d$$FG$$ "; - if (tempi->ic_flags & ICF_A1_TO_INT) - "$$GREEN$$a1i$$FG$$ "; - if (tempi->ic_flags & ICF_R_TO_F64) - "$$LTBLUE$$rd$$FG$$ "; - if (tempi->ic_flags & ICF_R_TO_INT) - "$$GREEN$$ri$$FG$$ "; - if (tempi->ic_flags & ICF_USE_F64) - "[F64] "; - if (tempi->ic_flags & ICF_USE_UNSIGNED) - "[unsigned] "; - if (tempi->ic_flags & ICF_USE_INT) - "[int] "; - if (tempi->ic_flags & ICF_NO_DEPEND_RESULT) - "-DEP "; - if (tempi->ic_flags & ICF_DEPEND_RESULT) - "+DEP "; - if (tempi->ic_flags & ICF_NOT_ADDR) - "NOT_ADDR "; - if (tempi->ic_flags & ICF_PUSH_RESULT) - "PUSH "; - if (tempi->ic_flags & ICF_PUSH_CMP) - "PUSH_CMP "; - if (tempi->ic_flags & ICF_POP_CMP) - "POP_CMP "; - if (tempi->ic_flags & ICF_DEL_PREVIOUS_INS) - "DELPREV "; - if (tempi->ic_flags & ICF_PREVIOUS_DELETED) - "PREVDEL "; - for (i=0;i<3;i++) { - if (Bt(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0+i)) - "DONT_PUSH#%d ",i; - if (Bt(&tempi->ic_flags,ICf_DONT_POP_FLOAT0+i)) - "DONT_POP#%d ",i; - } - if (tempi->ic_flags & ICF_ALTERNATE_TEMPLATE) - "ALT_TEMP "; - '\n'; - } -} - -U0 LCCQuePut(CLex *lx) -{ - CIntermediateCode *tempi=lx->lcc.lcc_root.next; - while (tempi->ic_code) { - if (tempi->ic_flags&ICF_TRACE) - ICPut(lx,tempi); - tempi=tempi->next; - } -} - -U0 LCCInit(CLex *lx) -{ - CLexCodeCtrl *tempcbh=&lx->lcc; - QueInit(&tempcbh->lcc_root.next); - QueInit(&tempcbh->lcc_next_misc); - tempcbh->lcc_root.ic_code=IC_END; -} - -CIntermediateCode *LCCAdd(CLex *lx, - I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0) -{ - CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode)); - tempi->ic_code=opcode_and_precedence.u16[0]; - tempi->ic_precedence=opcode_and_precedence.u16[1]; - tempi->ic_data=arg; - tempi->ic_class=c; - if (Bt(&lx->opts,OPTf_OPT_TRACE)) { - Bts(&lx->flags,Lf_OPT_TRACE_PRESENT); - flags|=ICF_TRACE; - } - if (lx->lock_cnt) - flags|=ICF_LOCK; - tempi->ic_flags=flags; - tempi->ic_line=lx->last_line_num; - QueIns(tempi,lx->lcc.lcc_root.last); - return tempi; -} - -U0 LCCPush(CLex *lx) -{ - CLexCodeCtrl *tempcbh=MAlloc(sizeof(CLexCodeCtrl)); - MemCpy(tempcbh,&lx->lcc,sizeof(CLexCodeCtrl)); - lx->lcc.lcc_next=tempcbh; -} - -CLex *LCCPopNoFree(CLex *lx) -{ - CLexCodeCtrl *tempcbh=lx->lcc.lcc_next; - MemCpy(&lx->lcc,tempcbh,sizeof(CLexCodeCtrl)); - return tempcbh; -} - -U0 LCCPop(CLex *lx) -{ - Free(LCCPopNoFree(lx)); -} - -U0 LCCAppend(CLex *lx, CLexCodeCtrl *tempcbh) -{ - if (tempcbh->lcc_root.next!=&lx->lcc.lcc_root.next) { - lx->lcc.lcc_root.last->next=tempcbh->lcc_root.next; - tempcbh->lcc_root.next->last=lx->lcc.lcc_root.last; - lx->lcc.lcc_root.last=tempcbh->lcc_root.last; - tempcbh->lcc_root.last->next=&lx->lcc.lcc_root.next; - } - if (tempcbh->lcc_next_misc!=&lx->lcc.lcc_next_misc) { - lx->lcc.lcc_last_misc->next=tempcbh->lcc_next_misc; - tempcbh->lcc_next_misc->last=lx->lcc.lcc_last_misc; - lx->lcc.lcc_last_misc=tempcbh->lcc_last_misc; - tempcbh->lcc_last_misc->next=&lx->lcc.lcc_next_misc; - } - Free(tempcbh); -} - -CLexCodeMisc *LCCMiscNew(CLex *lx,I64 ty) -{ - CLexCodeMisc *result=CAlloc(sizeof(CLexCodeMisc)); - result->addr=INVALID_PTR; - result->type=ty; - QueIns(result,lx->lcc.lcc_last_misc); - return result; -} - -CLexCodeMisc *LCCGoToLabelFind(CLex *lx,U8 *name) -{ - CLexCodeMisc *mc=lx->lcc.lcc_next_misc; - while (mc!=&lx->lcc.lcc_next_misc) { - if ((mc->type==CMT_GOTO_LABEL||mc->type==CMT_ASM_LABEL) && - !StrCmp(mc->str,name)) - return mc; - mc=mc->next; - } - return NULL; -} - -I64 LCCFloatConstFind(CLex *lx,F64 d) -{ - I64 i; - CLexCodeMisc *mc=lx->lcc.lcc_next_misc; - while (mc!=&lx->lcc.lcc_next_misc) { - if (mc->type==CMT_FLOAT_CONSTS) { - for (i=0;inum_consts;i++) - if (mc->float_consts[i]==d) - return mc->addr+i*sizeof(F64); - if (mc->num_constsfloat_consts[mc->num_consts++]=d; - return mc->addr+i*sizeof(F64); - } - } - mc=mc->next; - } - mc=LCCMiscNew(lx,CMT_FLOAT_CONSTS); - mc->float_consts=MAlloc(CM_MAX_CONSTS*sizeof(F64)); - mc->float_consts[mc->num_consts++]=d; - return mc->addr; -} - -U0 LCCDel(CLex *lx,CLexCodeCtrl *lcc) -{ - CLexCodeMisc *mc,*mc1; - U8 *undef=NULL; - QueDel(&lcc->lcc_root.next); - mc=lcc->lcc_next_misc; - while (mc!=&lcc->lcc_next_misc) { - mc1=mc->next; - switch (mc->type) { - case CMT_GOTO_LABEL: - case CMT_ASM_LABEL: - if (!(mc->flags&CMF_DEFINED)) { - undef=mc->str; - mc->str=NULL; - } else if (!mc->use_cnt) { - PrintWarn("Unused label %s\n",mc->str); - LexWarn(lx,"Unused label at "); - } - break; - case CMT_JMP_TABLE: - Free(mc->jmp_table); - break; - case CMT_FLOAT_CONSTS: - Free(mc->float_consts); - break; - case CMT_ARRAY_DIM: - LinkedLstDel(mc->dim); - break; - case CMT_HASH_ENTRY: - HashDel(mc->h); - break; - } - Free(mc->str); - Free(mc); - mc=mc1; - } - if (undef) { - PrintErr("Undefined goto label %s\n",undef); - Free(undef); - LexExcept(lx,"Undefined goto label at "); - } -} - -U0 LCCHeaderPut(CLex *lx,I64 pass,Bool put) -{ - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) { - if (put) { - if (Bt(&lx->otrace_mask,pass-1)) { - "$$IV,1$$Pass %d:$$IV,0$$\n",pass-1; - LCCQuePut(lx); - } - } else if (Bt(&lx->otrace_mask,pass)) - "$$IV,1$$Pass %d:$$IV,0$$\n",pass; - } - lx->pass=pass; -} - -U8 *LCCCompile(CLex *lx,I64 *_code_size,CDbgInfo **_dbg,I64 *_type) -{ - U8 *result; - CLexCodeMisc *lb; - I64 i,code_size,last_code_size; - - COptReg reg_offsets[NUM_REGS]; - if (_dbg) *_dbg=NULL; - lx->pass=0; - LCCHeaderPut(lx,1,TRUE); - OptPass012(lx); - LCCHeaderPut(lx,2,TRUE); - OptPass012(lx); - LCCHeaderPut(lx,3,TRUE); - OptPass3(lx,reg_offsets); - LCCHeaderPut(lx,4,TRUE); - OptPass4(lx,reg_offsets,_type); - LCCHeaderPut(lx,5,TRUE); - OptPass5(lx); - LCCHeaderPut(lx,6,TRUE); - OptPass6(lx); - LCCHeaderPut(lx,7,TRUE); - - lb=lx->lcc.lcc_next_misc; - while (lb!=&lx->lcc.lcc_next_misc) { - if (lb->type==CMT_JMP_TABLE) { - for (i=0;irange;i++) - lb->jmp_table[i]=OptLabelFwd(lb->jmp_table[i]); - lb->dft=OptLabelFwd(lb->dft); - } - lb=lb->next; - } - - LCCHeaderPut(lx,7,FALSE); - OptPass789A(lx,reg_offsets,NULL,NULL); - LCCHeaderPut(lx,8,FALSE); - OptPass789A(lx,reg_offsets,NULL,NULL); - LCCHeaderPut(lx,9,FALSE); - code_size=OptPass789A(lx,reg_offsets,NULL,NULL); - do { - last_code_size=code_size; - LCCHeaderPut(lx,9,FALSE); - code_size=OptPass789A(lx,reg_offsets,NULL,NULL); - if (code_size>last_code_size) { - "Pass:9 Code Size\n"; - LexExcept(lx,"Compiler Optimization Error at "); - } - } while (code_sizeflags&LF_AOT_COMPILE) - result=MAlloc(code_size); - else - result=MAlloc(code_size,Fs->code_heap); - LCCHeaderPut(lx,10,FALSE); - code_size=OptPass789A(lx,reg_offsets,result,_dbg); - - LCCDel(lx,&lx->lcc); - if (Bt(&lx->opts,OPTf_COMPILE_TRACE)) { - if (lx->flags&LF_AOT_COMPILE) { - if (lx->a->seg_size==16) - Un(result,code_size,16); - else if (lx->a->seg_size==64) - Un(result,code_size,64); - else - Un(result,code_size,32); - } else - Un(result,code_size,64); - } - if (_code_size) *_code_size=code_size; + Free(st); return result; } diff --git a/Compiler/Compiler.BIN b/Compiler/Compiler.BIN index 51d4aa9..3d77a9a 100644 Binary files a/Compiler/Compiler.BIN and b/Compiler/Compiler.BIN differ diff --git a/Compiler/Compiler.MAP b/Compiler/Compiler.MAP index 90c6936..7bfc706 100644 --- a/Compiler/Compiler.MAP +++ b/Compiler/Compiler.MAP @@ -1,451 +1,437 @@ -$LK,"AsmGlblsResolve ",A="FL:C:/Compiler/Asm.CPP.Z,284",BI=1$0000008E88 0001 0000000432 Funct Export Res -$LK,"AsmHashLoad ",A="FL:C:/Compiler/CInit.CPP.Z,68",BI=2$000002A482 0001 00000005BD Funct Export Res -$LK,"AsmLexExpression ",A="FL:C:/Compiler/Asm.CPP.Z,189",BI=3$0000008A60 0004 00000000B7 Funct Export Res -$LK,"AsmLineLst ",A="FL:C:/Compiler/Asm.CPP.Z,31",BI=4$00000084C8 0001 0000000148 Funct Export Res -$LK,"AsmLocalsResolve ",A="FL:C:/Compiler/Asm.CPP.Z,250",BI=5$0000008D60 0003 0000000127 Funct Export Res -$LK,"AsmMakeArgMask ",A="FL:C:/Compiler/Asm.CPP.Z,567",BI=6$00000097F8 0002 0000000444 Funct Export Res -$LK,"AsmPrsInsFlags ",A="FL:C:/Compiler/CInit.CPP.Z,18",BI=7$000002A242 0001 000000023B Funct Export Res -$LK,"AsmResolve ",A="FL:C:/Compiler/Asm.CPP.Z,209",BI=8$0000008B18 0002 0000000245 Funct Export Res -$LK,"AsmStoreCodeU32 ",A="FL:C:/Compiler/Asm.CPP.Z,90",BI=9$0000008718 0001 0000000145 Funct Export Res -$LK,"AsmStoreCodeU64 ",A="FL:C:/Compiler/Asm.CPP.Z,129",BI=10$0000008860 0005 0000000146 Funct Export Res -$LK,"AsmStoreCodeU8 ",A="FL:C:/Compiler/Asm.CPP.Z,61",BI=11$0000008610 001D 0000000103 Funct Export Res -$LK,"AsmStoreCodeU8At ",A="FL:C:/Compiler/Asm.CPP.Z,168",BI=12$00000089A8 0007 00000000B7 Funct Export Res -$LK,"AsmStoreNum ",A="FL:C:/Compiler/Asm.CPP.Z,661",BI=13$0000009C40 0004 00000004A6 Funct Export Res -$LK,"AsmUnresolvedAdd ",A="FL:C:/Compiler/Asm.CPP.Z,1",BI=14$00000083B8 0004 000000010C Funct Export Res -$LK,"CInit ",A="FL:C:/Compiler/CMain.CPP.Z,695",BI=15$000002CF52 0001 000000006B Funct Export Res -$LK,"CInternalType ",A="FL:C:/Compiler/CInit.CPP.Z,3"$007FCC2180 0002 000000000A Class -$LK,"CMP_TEMPLATES ",A="FL:C:/Compiler/Templates.CPP.Z,5"$0000000000 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_POP",A="FL:C:/Compiler/Templates.CPP.Z,179"$000000018B 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:C:/Compiler/Templates.CPP.Z,268"$0000000257 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:C:/Compiler/Templates.CPP.Z,459"$0000000421 0001 ExportSysSym Export -$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:C:/Compiler/Templates.CPP.Z,395"$0000000391 0001 ExportSysSym Export -$LK,"CN_A1 ",A="FL:C:/Compiler/BackFA.CPP.Z,2"$1 0006 0000000008 DefineStr -$LK,"CN_A2 ",A="FL:C:/Compiler/BackFA.CPP.Z,1"$0 0005 0000000008 DefineStr -$LK,"CN_MAIN ",A="FL:C:/Compiler/BackFA.CPP.Z,3"$2 0022 0000000008 DefineStr -$LK,"CN_R ",A="FL:C:/Compiler/BackFA.CPP.Z,4"$3 0003 0000000008 DefineStr -$LK,"COptMemberVar ",A="FL:C:/Compiler/OptLib.CPP.Z,544"$007FD8D750 0005 0000000028 Class -$LK,"CSubSwitch ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1343"$007FD98150 0004 0000000020 Class -$LK,"CSwitchCase ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1348"$007FD868F0 0004 0000000020 Class -$LK,"CTrace ",A="FL:C:/Compiler/CMisc.CPP.Z,33",BI=16$0000002818 0000 0000000017 Funct Export Res -$LK,"CVI2 ",A="FL:C:/Compiler/PrsStmt.CPP.Z,177"$007FD9A0C0 0003 0000000010 Class -$LK,"Cmp ",A="FL:C:/Compiler/CMain.CPP.Z,432",BI=17$000002C4AA 0000 000000059A Funct Export Res -$LK,"CmpBuf ",A="FL:C:/Compiler/CMain.CPP.Z,171",BI=18$000002BB72 0001 00000000B6 Funct Export Res -$LK,"CmpF1PushPop ",A="FL:C:/Compiler/OptLib.CPP.Z,527",BI=19$000000CCE6 0002 0000000042 Funct Export Res -$LK,"CmpF2PushPop ",A="FL:C:/Compiler/OptLib.CPP.Z,533",BI=20$000000CD2E 0005 0000000096 Funct Export Res -$LK,"CmpFillTables ",A="FL:C:/Compiler/CInit.CPP.Z,235",BI=21$000002AF3A 0001 00000003C3 Funct Export Res -$LK,"CmpFixUpAOTAsm ",A="FL:C:/Compiler/CMain.CPP.Z,315",BI=22$000002C0BA 0000 00000003EA Funct Export Res -$LK,"CmpFixUpJITAsm ",A="FL:C:/Compiler/CMain.CPP.Z,188",BI=23$000002BC2A 0000 000000048C Funct Export Res -$LK,"CmpJoin ",A="FL:C:/Compiler/CMain.CPP.Z,49",BI=24$000002B4EA 0001 0000000682 Funct Export Res -$LK,"CmpLoadDefines ",A="FL:C:/Compiler/CInit.CPP.Z,204",BI=25$000002AA42 0001 00000004F1 Funct Export Res -$LK,"CmpNoteFloatOp ",A="FL:C:/Compiler/BackFA.CPP.Z,6",BI=26$000001C43E 000E 000000020D Funct Export Res -$LK,"CmpOffset2Reg ",A="FL:C:/Compiler/OptLib.CPP.Z,83",BI=27$000000C05E 0005 0000000046 Funct Export Res -$LK,"CmpPrompt ",A="FL:C:/Compiler/Lex.CPP.Z,1",BI=28$0000004A69 0001 00000001B5 Funct Export Res -$LK,"CmpRawType ",A="FL:C:/Compiler/OptLib.CPP.Z,507",BI=29$000000CC8E 0006 0000000025 Funct Export Res -$LK,"CmpRawTypePointed ",A="FL:C:/Compiler/OptLib.CPP.Z,516",BI=30$000000CCB6 0005 0000000030 Funct Export Res -$LK,"CmpSetFloatOpPushPop",A="FL:C:/Compiler/BackFA.CPP.Z,57",BI=31$000001C64E 000C 0000000075 Funct Export Res -$LK,"Echo ",A="FL:C:/Compiler/CMisc.CPP.Z,38",BI=32$0000002830 0000 0000000017 Funct Export Res -$LK,"ExeFile ",A="FL:C:/Compiler/CMain.CPP.Z,627",BI=33$000002CC4A 0000 000000007B Funct Export Res -$LK,"ExeFile2 ",A="FL:C:/Compiler/CMain.CPP.Z,666",BI=34$000002CDE2 0000 0000000079 Funct Export Res -$LK,"ExePrint ",A="FL:C:/Compiler/CMain.CPP.Z,618",BI=35$000002CBFA 0000 0000000049 Funct Export Res -$LK,"ExePrint2 ",A="FL:C:/Compiler/CMain.CPP.Z,657",BI=36$000002CD9A 0000 0000000047 Funct Export Res -$LK,"ExePutS ",A="FL:C:/Compiler/CMain.CPP.Z,583",BI=37$000002CA4A 0003 00000001A9 Funct Export Res -$LK,"ExePutS2 ",A="FL:C:/Compiler/CMain.CPP.Z,638",BI=38$000002CCCA 0002 00000000CC Funct Export Res -$LK,"FBO1_F64 ",A="FL:C:/Compiler/OptLib.CPP.Z,94"$2 0002 0000000008 DefineStr -$LK,"FBO1_INT ",A="FL:C:/Compiler/OptLib.CPP.Z,93"$1 0013 0000000008 DefineStr -$LK,"FBO1_NOT_CONST ",A="FL:C:/Compiler/OptLib.CPP.Z,92"$0 0005 0000000008 DefineStr -$LK,"GetOpt ",A="FL:C:/Compiler/CMisc.CPP.Z,16",BI=39$0000002790 0004 000000002C Funct Export Res -$LK,"HashEntrySize ",A="FL:C:/Compiler/CHash.CPP.Z,1",BI=40$0000008098 0000 0000000103 Funct Export Res -$LK,"HashEntrySize2 ",A="FL:C:/Compiler/CHash.CPP.Z,32",BI=41$00000081A0 0002 00000001A1 Funct Export Res -$LK,"HashTableSize2 ",A="FL:C:/Compiler/CHash.CPP.Z,69",BI=42$0000008348 0000 000000006F Funct Export Res -$LK,"ICAddEct ",A="FL:C:/Compiler/BackA.CPP.Z,1",BI=43$00000200A6 0005 00000002F3 Funct Export Res -$LK,"ICAddRSP ",A="FL:C:/Compiler/BackLib.CPP.Z,69",BI=44$000001ADD6 0017 00000002A7 Funct Export Res -$LK,"ICAddSubEctEqual ",A="FL:C:/Compiler/BackA.CPP.Z,501",BI=45$00000219AE 0005 0000000673 Funct Export Res -$LK,"ICAddSubEctImm ",A="FL:C:/Compiler/BackA.CPP.Z,57",BI=46$000002039E 000D 0000000685 Funct Export Res -$LK,"ICAndAnd ",A="FL:C:/Compiler/BackB.CPP.Z,30",BI=47$000002264E 0001 000000014B Funct Export Res -$LK,"ICAndBranch ",A="FL:C:/Compiler/BackC.CPP.Z,1",BI=48$00000249C6 0002 00000006E6 Funct Export Res -$LK,"ICAndEqual ",A="FL:C:/Compiler/BackC.CPP.Z,675",BI=49$00000268A6 0001 000000010D Funct Export Res -$LK,"ICArgPut ",A="FL:C:/Compiler/CMisc.CPP.Z,267",BI=50$0000003B19 0003 00000002D6 Funct Export Res -$LK,"ICAssign ",A="FL:C:/Compiler/BackC.CPP.Z,159",BI=51$00000250AE 0001 0000000301 Funct Export Res -$LK,"ICAssignPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,534",BI=52$0000023C9E 0002 000000020D Funct Export Res -$LK,"ICBitOps ",A="FL:C:/Compiler/BackB.CPP.Z,244",BI=53$0000022F46 0007 00000004F1 Funct Export Res -$LK,"ICBrBitOps ",A="FL:C:/Compiler/BackC.CPP.Z,207",BI=54$00000253B6 0008 00000009FB Funct Export Res -$LK,"ICBuiltInFloatConst ",A="FL:C:/Compiler/BackLib.CPP.Z,420",BI=55$000001B916 000F 00000000BD Funct Export Res -$LK,"ICClassPut ",A="FL:C:/Compiler/CMisc.CPP.Z,243",BI=56$0000003A49 0001 00000000D0 Funct Export Res -$LK,"ICCmp ",A="FL:C:/Compiler/BackB.CPP.Z,124",BI=57$0000022A5E 0006 00000004E6 Funct Export Res -$LK,"ICCmpAndBranch ",A="FL:C:/Compiler/BackB.CPP.Z,575",BI=58$0000023EAE 000C 000000081A Funct Export Res -$LK,"ICCopyTemplate ",A="FL:C:/Compiler/BackFA.CPP.Z,69",BI=59$000001C6C6 0013 000000021D Funct Export Res -$LK,"ICDeref ",A="FL:C:/Compiler/BackLib.CPP.Z,656",BI=60$000001C37E 0001 00000000B9 Funct Export Res -$LK,"ICDerefPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,491",BI=61$0000023AA6 0002 00000001F1 Funct Export Res -$LK,"ICDiv ",A="FL:C:/Compiler/BackA.CPP.Z,409",BI=62$00000214DE 0001 00000000F1 Funct Export Res -$LK,"ICDivEqual ",A="FL:C:/Compiler/BackA.CPP.Z,428",BI=63$00000215D6 0002 00000002DE Funct Export Res -$LK,"ICFAdd ",A="FL:C:/Compiler/BackFB.CPP.Z,633",BI=64$000001FA66 0001 00000001FF Funct Export Res -$LK,"ICFCmp ",A="FL:C:/Compiler/BackFA.CPP.Z,549",BI=65$000001DA3E 0004 000000018B Funct Export Res -$LK,"ICFCmpAndBranch ",A="FL:C:/Compiler/BackFB.CPP.Z,325",BI=66$000001EE9E 0004 00000009F7 Funct Export Res -$LK,"ICFCvt ",A="FL:C:/Compiler/BackFA.CPP.Z,115",BI=67$000001C8E6 000C 000000017F Funct Export Res -$LK,"ICFCvt2 ",A="FL:C:/Compiler/BackFA.CPP.Z,163",BI=68$000001CA66 0010 0000000116 Funct Export Res -$LK,"ICFDiv ",A="FL:C:/Compiler/BackFB.CPP.Z,621",BI=69$000001F9B6 0001 00000000A9 Funct Export Res -$LK,"ICFMod ",A="FL:C:/Compiler/BackFA.CPP.Z,241",BI=70$000001CD5E 0001 0000000145 Funct Export Res -$LK,"ICFModEqual ",A="FL:C:/Compiler/BackFA.CPP.Z,589",BI=71$000001DBCE 0001 00000003D7 Funct Export Res -$LK,"ICFMul ",A="FL:C:/Compiler/BackFB.CPP.Z,603",BI=72$000001F896 0001 000000011B Funct Export Res -$LK,"ICFOp ",A="FL:C:/Compiler/BackFA.CPP.Z,350",BI=73$000001D19E 0004 000000089D Funct Export Res -$LK,"ICFOpEqual ",A="FL:C:/Compiler/BackFB.CPP.Z,1",BI=74$000001DFA6 0004 0000000EF7 Funct Export Res -$LK,"ICFPostIncDec ",A="FL:C:/Compiler/BackFB.CPP.Z,716",BI=75$000001FE9E 0002 0000000151 Funct Export Res -$LK,"ICFPow ",A="FL:C:/Compiler/BackFA.CPP.Z,271",BI=76$000001CEA6 0001 00000002F7 Funct Export Res -$LK,"ICFPreIncDec ",A="FL:C:/Compiler/BackFB.CPP.Z,694",BI=77$000001FD8E 0002 000000010A Funct Export Res -$LK,"ICFSub ",A="FL:C:/Compiler/BackFB.CPP.Z,671",BI=78$000001FC66 0001 0000000124 Funct Export Res -$LK,"ICFTemplateFun ",A="FL:C:/Compiler/BackFB.CPP.Z,744",BI=79$000001FFF6 0007 00000000AA Funct Export Res -$LK,"ICFUnaryMinus ",A="FL:C:/Compiler/BackFA.CPP.Z,190",BI=80$000001CB7E 0001 00000001E0 Funct Export Res -$LK,"ICFlagBranch ",A="FL:C:/Compiler/BackB.CPP.Z,804",BI=81$00000248BE 0004 0000000106 Funct Export Res -$LK,"ICLastIns ",A="FL:C:/Compiler/BackLib.CPP.Z,59",BI=82$000001AD96 0002 0000000040 Funct Export Res -$LK,"ICLea ",A="FL:C:/Compiler/BackLib.CPP.Z,622",BI=83$000001C1CE 0004 00000001AA Funct Export Res -$LK,"ICLocalVarInit ",A="FL:C:/Compiler/BackC.CPP.Z,908",BI=84$00000272C6 0001 0000000078 Funct Export Res -$LK,"ICMinMax ",A="FL:C:/Compiler/BackC.CPP.Z,496",BI=85$000002617E 0004 00000002AB Funct Export Res -$LK,"ICMod ",A="FL:C:/Compiler/BackA.CPP.Z,482",BI=86$00000218B6 0001 00000000F1 Funct Export Res -$LK,"ICModU64 ",A="FL:C:/Compiler/BackC.CPP.Z,575",BI=87$000002647E 0001 00000001B7 Funct Export Res -$LK,"ICModr1 ",A="FL:C:/Compiler/BackLib.CPP.Z,140",BI=88$000001B07E 0017 00000002FE Funct Export Res -$LK,"ICModr2 ",A="FL:C:/Compiler/BackLib.CPP.Z,230",BI=89$000001B37E 0016 00000000A6 Funct Export Res -$LK,"ICMov ",A="FL:C:/Compiler/BackLib.CPP.Z,442",BI=90$000001B9D6 019A 00000007F4 Funct Export Res -$LK,"ICMul ",A="FL:C:/Compiler/BackA.CPP.Z,285",BI=91$0000020E1E 0001 00000002B8 Funct Export Res -$LK,"ICMulEqual ",A="FL:C:/Compiler/BackA.CPP.Z,342",BI=92$00000210D6 0001 0000000406 Funct Export Res -$LK,"ICNot ",A="FL:C:/Compiler/BackB.CPP.Z,10",BI=93$000002254E 0001 00000000FF Funct Export Res -$LK,"ICOpSizeRex ",A="FL:C:/Compiler/BackLib.CPP.Z,28",BI=94$000001ACAE 0006 0000000040 Funct Export Res -$LK,"ICOrEqual ",A="FL:C:/Compiler/BackC.CPP.Z,698",BI=95$00000269B6 0001 000000010D Funct Export Res -$LK,"ICOrOr ",A="FL:C:/Compiler/BackB.CPP.Z,59",BI=96$000002279E 0001 0000000162 Funct Export Res -$LK,"ICPop ",A="FL:C:/Compiler/BackLib.CPP.Z,361",BI=97$000001B71E 0009 00000000EA Funct Export Res -$LK,"ICPopRegs ",A="FL:C:/Compiler/BackLib.CPP.Z,388",BI=98$000001B80E 000C 0000000057 Funct Export Res -$LK,"ICPostIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,451",BI=99$00000238A6 0002 00000001FC Funct Export Res -$LK,"ICPreIncDec ",A="FL:C:/Compiler/BackB.CPP.Z,415",BI=100$00000236CE 0004 00000001D8 Funct Export Res -$LK,"ICPreempt ",A="FL:C:/Compiler/BackB.CPP.Z,348",BI=101$000002343E 0001 0000000122 Funct Export Res -$LK,"ICPush ",A="FL:C:/Compiler/BackLib.CPP.Z,310",BI=102$000001B56E 001F 0000000152 Funct Export Res -$LK,"ICPushRegs ",A="FL:C:/Compiler/BackLib.CPP.Z,348",BI=103$000001B6C6 0006 0000000054 Funct Export Res -$LK,"ICPut ",A="FL:C:/Compiler/CMisc.CPP.Z,312",BI=104$0000003DF1 0008 00000003DD Funct Export Res -$LK,"ICQueInit ",A="FL:C:/Compiler/BackC.CPP.Z,384",BI=105$0000025DB6 0001 0000000070 Funct Export Res -$LK,"ICQueIns ",A="FL:C:/Compiler/BackC.CPP.Z,398",BI=106$0000025E26 0001 0000000162 Funct Export Res -$LK,"ICQueInsRev ",A="FL:C:/Compiler/BackC.CPP.Z,439",BI=107$0000025F8E 0001 0000000162 Funct Export Res -$LK,"ICQueRem ",A="FL:C:/Compiler/BackC.CPP.Z,480",BI=108$00000260F6 0001 0000000088 Funct Export Res -$LK,"ICRex ",A="FL:C:/Compiler/BackLib.CPP.Z,22",BI=109$000001AC7E 0016 000000002D Funct Export Res -$LK,"ICShift ",A="FL:C:/Compiler/BackA.CPP.Z,639",BI=110$0000022026 0004 00000001A3 Funct Export Res -$LK,"ICShiftEqual ",A="FL:C:/Compiler/BackA.CPP.Z,672",BI=111$00000221CE 0002 000000030E Funct Export Res -$LK,"ICSlashOp ",A="FL:C:/Compiler/BackLib.CPP.Z,282",BI=112$000001B426 0027 0000000145 Funct Export Res -$LK,"ICSqr ",A="FL:C:/Compiler/BackC.CPP.Z,568",BI=113$000002642E 0002 000000004A Funct Export Res -$LK,"ICSub ",A="FL:C:/Compiler/BackA.CPP.Z,207",BI=114$0000020A26 0001 00000003F5 Funct Export Res -$LK,"ICSwap ",A="FL:C:/Compiler/BackC.CPP.Z,617",BI=115$0000026636 0001 000000026E Funct Export Res -$LK,"ICSwitch ",A="FL:C:/Compiler/BackC.CPP.Z,744",BI=116$0000026BCE 0002 00000006F2 Funct Export Res -$LK,"ICTest ",A="FL:C:/Compiler/BackLib.CPP.Z,410",BI=117$000001B8C6 000C 000000004E Funct Export Res -$LK,"ICTestAndBranch ",A="FL:C:/Compiler/BackB.CPP.Z,756",BI=118$00000246CE 0002 00000001EC Funct Export Res -$LK,"ICToBool ",A="FL:C:/Compiler/BackB.CPP.Z,400",BI=119$0000023656 0001 0000000075 Funct Export Res -$LK,"ICToF64 ",A="FL:C:/Compiler/BackB.CPP.Z,395",BI=120$0000023616 0001 000000003D Funct Export Res -$LK,"ICToI64 ",A="FL:C:/Compiler/BackB.CPP.Z,390",BI=121$00000235D6 0001 000000003D Funct Export Res -$LK,"ICToUpper ",A="FL:C:/Compiler/BackB.CPP.Z,379",BI=122$0000023566 0001 000000006B Funct Export Res -$LK,"ICU16 ",A="FL:C:/Compiler/BackLib.CPP.Z,35",BI=123$000001ACEE 0092 0000000029 Funct Export Res -$LK,"ICU24 ",A="FL:C:/Compiler/BackLib.CPP.Z,41",BI=124$000001AD1E 0063 0000000026 Funct Export Res -$LK,"ICU32 ",A="FL:C:/Compiler/BackLib.CPP.Z,47",BI=125$000001AD46 0054 0000000026 Funct Export Res -$LK,"ICU64 ",A="FL:C:/Compiler/BackLib.CPP.Z,53",BI=126$000001AD6E 0009 0000000028 Funct Export Res -$LK,"ICU8 ",A="FL:C:/Compiler/BackLib.CPP.Z,17",BI=127$000001AC56 0063 0000000028 Funct Export Res -$LK,"ICUnaries ",A="FL:C:/Compiler/BackB.CPP.Z,1",BI=128$00000224DE 0002 0000000069 Funct Export Res -$LK,"ICXorEqual ",A="FL:C:/Compiler/BackC.CPP.Z,721",BI=129$0000026AC6 0001 0000000107 Funct Export Res -$LK,"ICXorXor ",A="FL:C:/Compiler/BackB.CPP.Z,91",BI=130$0000022906 0001 0000000155 Funct Export Res -$LK,"ICZero ",A="FL:C:/Compiler/BackLib.CPP.Z,401",BI=131$000001B866 0017 000000005E Funct Export Res -$LK,"InstEntriesCompare ",A="FL:C:/Compiler/UAsm.CPP.Z,1",BI=132$00000006F0 0001 00000002A9 Funct Export Res -$LK,"InstEntryFind ",A="FL:C:/Compiler/UAsm.CPP.Z,72",BI=133$00000009A0 0002 00000003C9 Funct Export Res -$LK,"IsLexExpression2Bin ",A="FL:C:/Compiler/PrsExp.CPP.Z,1153",BI=134$000000FCCE 0000 0000000029 Funct Export Res -$LK,"LCCAdd ",A="FL:C:/Compiler/CMisc.CPP.Z,396",BI=135$0000004249 00A9 000000009F Funct Export Res -$LK,"LCCAppend ",A="FL:C:/Compiler/CMisc.CPP.Z,435",BI=136$0000004371 0003 00000000A6 Funct Export Res -$LK,"LCCCompile ",A="FL:C:/Compiler/CMisc.CPP.Z,552",BI=137$00000047A1 0006 00000002C7 Funct Export Res -$LK,"LCCDel ",A="FL:C:/Compiler/CMisc.CPP.Z,495",BI=138$0000004591 0001 0000000164 Funct Export Res -$LK,"LCCFloatConstFind ",A="FL:C:/Compiler/CMisc.CPP.Z,473",BI=139$00000044C9 000F 00000000C6 Funct Export Res -$LK,"LCCGoToLabelFind ",A="FL:C:/Compiler/CMisc.CPP.Z,461",BI=140$0000004471 0006 0000000057 Funct Export Res -$LK,"LCCHeaderPut ",A="FL:C:/Compiler/CMisc.CPP.Z,538",BI=141$00000046F9 000C 00000000A2 Funct Export Res -$LK,"LCCInit ",A="FL:C:/Compiler/CMisc.CPP.Z,388",BI=142$0000004209 000A 000000003A Funct Export Res -$LK,"LCCMiscNew ",A="FL:C:/Compiler/CMisc.CPP.Z,452",BI=143$0000004419 0021 0000000055 Funct Export Res -$LK,"LCCPop ",A="FL:C:/Compiler/CMisc.CPP.Z,430",BI=144$0000004351 0008 000000001A Funct Export Res -$LK,"LCCPopNoFree ",A="FL:C:/Compiler/CMisc.CPP.Z,423",BI=145$0000004321 0003 000000002E Funct Export Res -$LK,"LCCPush ",A="FL:C:/Compiler/CMisc.CPP.Z,416",BI=146$00000042E9 000E 0000000037 Funct Export Res -$LK,"LCCQuePut ",A="FL:C:/Compiler/CMisc.CPP.Z,378",BI=147$00000041D1 0001 0000000038 Funct Export Res -$LK,"Lex ",A="FL:C:/Compiler/Lex.CPP.Z,694",BI=148$0000006548 00ED 0000001746 Funct Export Res -$LK,"LexAttachDoc ",A="FL:C:/Compiler/Lex.CPP.Z,389",BI=149$0000005BC8 0001 0000000163 Funct Export Res -$LK,"LexBackupLastChar ",A="FL:C:/Compiler/Lex.CPP.Z,131",BI=150$0000004FE0 0003 0000000041 Funct Export Res -$LK,"LexD2I32 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1198",BI=151$000000FDEE 0000 00000000A6 Funct Export Res -$LK,"LexD3I32 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1214",BI=152$000000FE96 0000 00000000D9 Funct Export Res -$LK,"LexDel ",A="FL:C:/Compiler/Lex.CPP.Z,66",BI=153$0000004D61 0004 00000000A5 Funct Export Res -$LK,"LexDocRead ",A="FL:C:/Compiler/Lex.CPP.Z,368",BI=154$0000005B38 0001 0000000085 Funct Export Res -$LK,"LexDollar ",A="FL:C:/Compiler/Lex.CPP.Z,142",BI=155$0000005028 0003 0000000070 Funct Export Res -$LK,"LexExcept ",A="FL:C:/Compiler/Lex.CPP.Z,1532",BI=156$0000007FA8 00B8 00000000ED Funct Export Res -$LK,"LexExpression ",A="FL:C:/Compiler/PrsExp.CPP.Z,1186",BI=157$000000FDAE 0002 000000003F Funct Export Res -$LK,"LexExpression2Bin ",A="FL:C:/Compiler/PrsExp.CPP.Z,1135",BI=158$000000FC36 0006 0000000094 Funct Export Res -$LK,"LexExpressionF64 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1172",BI=159$000000FD56 0000 0000000054 Funct Export Res -$LK,"LexExpressionI64 ",A="FL:C:/Compiler/PrsExp.CPP.Z,1158",BI=160$000000FCFE 000A 0000000054 Funct Export Res -$LK,"LexExtStr ",A="FL:C:/Compiler/Lex.CPP.Z,1449",BI=161$0000007C90 0004 00000000C5 Funct Export Res -$LK,"LexFirstRem ",A="FL:C:/Compiler/Lex.CPP.Z,328",BI=162$00000059E0 0000 00000000BC Funct Export Res -$LK,"LexGetChar ",A="FL:C:/Compiler/Lex.CPP.Z,156",BI=163$0000005098 002C 0000000915 Funct Export Res -$LK,"LexInStr ",A="FL:C:/Compiler/Lex.CPP.Z,624",BI=164$00000062E8 0001 000000025B Funct Export Res -$LK,"LexIncludeStr ",A="FL:C:/Compiler/Lex.CPP.Z,350",BI=165$0000005AA0 0003 0000000098 Funct Export Res -$LK,"LexNew ",A="FL:C:/Compiler/Lex.CPP.Z,35",BI=166$0000004C21 0004 000000013D Funct Export Res -$LK,"LexPop ",A="FL:C:/Compiler/Lex.CPP.Z,446",BI=167$0000005DB8 0004 0000000074 Funct Export Res -$LK,"LexPush ",A="FL:C:/Compiler/Lex.CPP.Z,434",BI=168$0000005D30 000F 0000000081 Funct Export Res -$LK,"LexPutLine ",A="FL:C:/Compiler/Lex.CPP.Z,1474",BI=169$0000007D58 0003 000000009B Funct Export Res -$LK,"LexPutPos ",A="FL:C:/Compiler/Lex.CPP.Z,1502",BI=170$0000007DF8 0003 00000000CA Funct Export Res -$LK,"LexPutToken ",A="FL:C:/Compiler/Lex.CPP.Z,108",BI=171$0000004EA9 0001 000000012B Funct Export Res -$LK,"LexSize ",A="FL:C:/Compiler/Lex.CPP.Z,88",BI=172$0000004E09 0000 000000009B Funct Export Res -$LK,"LexSkipEol ",A="FL:C:/Compiler/Lex.CPP.Z,321",BI=173$00000059B0 0004 000000002B Funct Export Res -$LK,"LexStatement2Bin ",A="FL:C:/Compiler/CMain.CPP.Z,15",BI=174$000002B3AA 0001 0000000140 Funct Export Res -$LK,"LexWarn ",A="FL:C:/Compiler/Lex.CPP.Z,1516",BI=175$0000007EC8 0009 00000000D9 Funct Export Res -$LK,"MDR_D32_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,134"$3 0002 0000000008 DefineStr -$LK,"MDR_D8_INDIRECT_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,133"$2 0002 0000000008 DefineStr -$LK,"MDR_INDIRECT_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,132"$1 0002 0000000008 DefineStr -$LK,"MDR_REG ",A="FL:C:/Compiler/BackLib.CPP.Z,131"$0 0002 0000000008 DefineStr -$LK,"MDR_RIP_REL ",A="FL:C:/Compiler/BackLib.CPP.Z,138"$7 0004 0000000008 DefineStr -$LK,"MDR_SIB_D32_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,137"$6 0003 0000000008 DefineStr -$LK,"MDR_SIB_D8_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,136"$5 0002 0000000008 DefineStr -$LK,"MDR_SIB_INDIRECT_REG",A="FL:C:/Compiler/BackLib.CPP.Z,135"$4 0002 0000000008 DefineStr -$LK,"MemberAdd ",A="FL:C:/Compiler/Lex.CPP.Z,515",BI=176$0000005F68 0004 00000001B7 Funct Export Res -$LK,"MemberFind ",A="FL:C:/Compiler/Lex.CPP.Z,480",BI=177$0000005EB8 0005 0000000064 Funct Export Res -$LK,"MemberFind2 ",A="FL:C:/Compiler/Lex.CPP.Z,500",BI=178$0000005F20 0001 0000000044 Funct Export Res -$LK,"MemberLstDel ",A="FL:C:/Compiler/Lex.CPP.Z,563",BI=179$0000006120 0001 00000000F3 Funct Export Res -$LK,"MemberLstNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,38",BI=180$0000010046 0003 000000002A Funct Export Res -$LK,"MemberLstSize ",A="FL:C:/Compiler/Lex.CPP.Z,597",BI=181$0000006218 0002 00000000CF Funct Export Res -$LK,"MemberMetaData ",A="FL:C:/Compiler/Lex.CPP.Z,458",BI=182$0000005E30 0000 0000000041 Funct Export Res -$LK,"MemberMetaFind ",A="FL:C:/Compiler/Lex.CPP.Z,469",BI=183$0000005E78 0000 0000000040 Funct Export Res -$LK,"NUM_INTERNAL_TYPES ",A="FL:C:/Compiler/CInit.CPP.Z,1"$17 0002 0000000008 DefineStr -$LK,"OTrace ",A="FL:C:/Compiler/CMisc.CPP.Z,21",BI=184$00000027C0 0000 0000000017 Funct Export Res -$LK,"OTraceMask ",A="FL:C:/Compiler/CMisc.CPP.Z,26",BI=185$00000027D8 0000 0000000039 Funct Export Res -$LK,"OptBrNotZero ",A="FL:C:/Compiler/OptLib.CPP.Z,357",BI=186$000000C83E 0004 00000003B5 Funct Export Res -$LK,"OptBrZero ",A="FL:C:/Compiler/OptLib.CPP.Z,230",BI=187$000000C476 0006 00000003C4 Funct Export Res -$LK,"OptClassFwd ",A="FL:C:/Compiler/OptLib.CPP.Z,9",BI=188$000000BEC6 0013 0000000028 Funct Export Res -$LK,"OptEqu ",A="FL:C:/Compiler/CMisc.CPP.Z,1",BI=189$0000002730 0005 000000002E Funct Export Res -$LK,"OptFixSizeOf ",A="FL:C:/Compiler/OptLib.CPP.Z,484",BI=190$000000CBF6 0003 0000000098 Funct Export Res -$LK,"OptFixupBinaryOp1 ",A="FL:C:/Compiler/OptLib.CPP.Z,96",BI=191$000000C0A6 0013 00000002B0 Funct Export Res -$LK,"OptFixupBinaryOp2 ",A="FL:C:/Compiler/OptLib.CPP.Z,181",BI=192$000000C356 0001 0000000054 Funct Export Res -$LK,"OptFixupUnaryOp ",A="FL:C:/Compiler/OptLib.CPP.Z,195",BI=193$000000C3AE 0003 00000000C8 Funct Export Res -$LK,"OptFree ",A="FL:C:/Compiler/OptLib.CPP.Z,33",BI=194$000000BF6E 0024 0000000024 Funct Export Res -$LK,"OptIC4 ",A="FL:C:/Compiler/OptPass4.CPP.Z,1",BI=195$0000018AAE 0001 00000005CD Funct Export Res -$LK,"OptIC6 ",A="FL:C:/Compiler/OptPass6.CPP.Z,1",BI=196$000001A3EE 0001 0000000128 Funct Export Res -$LK,"OptLabelFwd ",A="FL:C:/Compiler/OptLib.CPP.Z,1",BI=197$000000BE9E 0010 0000000028 Funct Export Res -$LK,"OptLag ",A="FL:C:/Compiler/OptLib.CPP.Z,40",BI=198$000000BF96 000E 000000002A Funct Export Res -$LK,"OptLag1 ",A="FL:C:/Compiler/OptLib.CPP.Z,51",BI=199$000000BFC6 0006 0000000031 Funct Export Res -$LK,"OptLag2 ",A="FL:C:/Compiler/OptLib.CPP.Z,62",BI=200$000000BFFE 0003 000000002A Funct Export Res -$LK,"OptLead1 ",A="FL:C:/Compiler/OptLib.CPP.Z,73",BI=201$000000C02E 0003 0000000030 Funct Export Res -$LK,"OptMVCompare ",A="FL:C:/Compiler/OptLib.CPP.Z,550",BI=202$000000CDC6 0001 000000001A Funct Export Res -$LK,"OptOff ",A="FL:C:/Compiler/CMisc.CPP.Z,11",BI=203$0000002778 0000 0000000016 Funct Export Res -$LK,"OptOn ",A="FL:C:/Compiler/CMisc.CPP.Z,6",BI=204$0000002760 0000 0000000016 Funct Export Res -$LK,"OptPass012 ",A="FL:C:/Compiler/OptPass012.CPP.Z,23",BI=205$0000014BAE 0000 00000027E8 Funct Export Res -$LK,"OptPass3 ",A="FL:C:/Compiler/OptPass3.CPP.Z,1",BI=206$0000017396 0000 0000001717 Funct Export Res -$LK,"OptPass4 ",A="FL:C:/Compiler/OptPass4.CPP.Z,171",BI=207$000001907E 0000 0000000F16 Funct Export Res -$LK,"OptPass5 ",A="FL:C:/Compiler/OptPass5.CPP.Z,1",BI=208$0000019F96 0000 0000000457 Funct Export Res -$LK,"OptPass6 ",A="FL:C:/Compiler/OptPass6.CPP.Z,111",BI=209$000001A84E 0000 0000000402 Funct Export Res -$LK,"OptPass6Lag ",A="FL:C:/Compiler/OptPass6.CPP.Z,28",BI=210$000001A516 0001 0000000338 Funct Export Res -$LK,"OptPass789A ",A="FL:C:/Compiler/OptPass789A.CPP.Z,1",BI=211$000002733E 0000 0000002E58 Funct Export Res -$LK,"OptSetNOP1 ",A="FL:C:/Compiler/OptLib.CPP.Z,17",BI=212$000000BEEE 0079 000000003A Funct Export Res -$LK,"OptSetNOP2 ",A="FL:C:/Compiler/OptLib.CPP.Z,25",BI=213$000000BF2E 000D 000000003C Funct Export Res -$LK,"PE_CHECK_BINARY_OPS1",A="FL:C:/Compiler/PrsExp.CPP.Z,43"$5 0001 0000000008 DefineStr -$LK,"PE_CHECK_BINARY_OPS2",A="FL:C:/Compiler/PrsExp.CPP.Z,44"$6 0001 0000000008 DefineStr -$LK,"PE_DEREFERENCE ",A="FL:C:/Compiler/PrsExp.CPP.Z,42"$4 0003 0000000008 DefineStr -$LK,"PE_DO_BINARY_OP ",A="FL:C:/Compiler/PrsExp.CPP.Z,46"$8 0001 0000000008 DefineStr -$LK,"PE_DO_UNARY_OP ",A="FL:C:/Compiler/PrsExp.CPP.Z,45"$7 0001 0000000008 DefineStr -$LK,"PE_MAYBE_MODIFIERS ",A="FL:C:/Compiler/PrsExp.CPP.Z,40"$2 000A 0000000008 DefineStr -$LK,"PE_POP_ALL1 ",A="FL:C:/Compiler/PrsExp.CPP.Z,49"$11 0001 0000000008 DefineStr -$LK,"PE_POP_ALL2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,50"$12 0001 0000000008 DefineStr -$LK,"PE_POP_HIGHER ",A="FL:C:/Compiler/PrsExp.CPP.Z,47"$9 0001 0000000008 DefineStr -$LK,"PE_PUSH_LOWER ",A="FL:C:/Compiler/PrsExp.CPP.Z,48"$10 0001 0000000008 DefineStr -$LK,"PE_UNARY_MODIFIERS ",A="FL:C:/Compiler/PrsExp.CPP.Z,41"$3 0009 0000000008 DefineStr -$LK,"PE_UNARY_TERM1 ",A="FL:C:/Compiler/PrsExp.CPP.Z,38"$0 0001 0000000008 DefineStr -$LK,"PE_UNARY_TERM2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,39"$1 0003 0000000008 DefineStr -$LK,"ParenWarning ",A="FL:C:/Compiler/PrsExp.CPP.Z,1",BI=214$000000CDE6 0004 000000004C Funct Export Res -$LK,"PrsAddOp ",A="FL:C:/Compiler/PrsExp.CPP.Z,52",BI=215$000000CF2E 0002 00000001EB Funct Export Res -$LK,"PrsArrayDims ",A="FL:C:/Compiler/PrsStmt.CPP.Z,305",BI=216$0000010ADE 0001 000000012D Funct Export Res -$LK,"PrsAsmArg ",A="FL:C:/Compiler/Asm.CPP.Z,430",BI=217$00000093F8 0004 00000003FE Funct Export Res -$LK,"PrsAsmBlk ",A="FL:C:/Compiler/Asm.CPP.Z,1278",BI=218$000000B55E 0002 000000093F Funct Export Res -$LK,"PrsAsmDefine ",A="FL:C:/Compiler/Asm.CPP.Z,1189",BI=219$000000B1FE 0004 000000029D Funct Export Res -$LK,"PrsAsmImm ",A="FL:C:/Compiler/Asm.CPP.Z,396",BI=220$00000092C0 0002 0000000131 Funct Export Res -$LK,"PrsAsmInstruction ",A="FL:C:/Compiler/Asm.CPP.Z,779",BI=221$000000A0EE 0001 0000001110 Funct Export Res -$LK,"PrsBinFile ",A="FL:C:/Compiler/Asm.CPP.Z,1262",BI=222$000000B49E 0001 00000000B9 Funct Export Res -$LK,"PrsClass ",A="FL:C:/Compiler/PrsStmt.CPP.Z,786",BI=223$0000011B9E 0002 0000000261 Funct Export Res -$LK,"PrsClassNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1",BI=224$000000FF76 0003 0000000068 Funct Export Res -$LK,"PrsDoWhile ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1283",BI=225$0000012F46 0001 0000000137 Funct Export Res -$LK,"PrsDotDotDot ",A="FL:C:/Compiler/PrsStmt.CPP.Z,342",BI=226$0000010C0E 0001 0000000111 Funct Export Res -$LK,"PrsExpression ",A="FL:C:/Compiler/PrsExp.CPP.Z,298",BI=227$000000D7DE 0010 000000014C Funct Export Res -$LK,"PrsExpression2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,102",BI=228$000000D11E 0001 00000006BB Funct Export Res -$LK,"PrsFor ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1306",BI=229$000001307E 0001 0000000162 Funct Export Res -$LK,"PrsFun ",A="FL:C:/Compiler/PrsStmt.CPP.Z,915",BI=230$0000011FEE 0001 00000003C9 Funct Export Res -$LK,"PrsFunCall ",A="FL:C:/Compiler/PrsExp.CPP.Z,409",BI=231$000000DC7E 0003 000000082D Funct Export Res -$LK,"PrsFunJoin ",A="FL:C:/Compiler/PrsStmt.CPP.Z,852",BI=232$0000011E06 0005 00000001E8 Funct Export Res -$LK,"PrsFunNew ",A="FL:C:/Compiler/PrsStmt.CPP.Z,22",BI=233$000000FFDE 0001 0000000068 Funct Export Res -$LK,"PrsGlblInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,265",BI=234$0000010926 0002 0000000076 Funct Export Res -$LK,"PrsGlblVarLst ",A="FL:C:/Compiler/PrsStmt.CPP.Z,981",BI=235$00000123BE 0007 0000000967 Funct Export Res -$LK,"PrsIf ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1236",BI=236$0000012D26 0001 000000012C Funct Export Res -$LK,"PrsKeyWord ",A="FL:C:/Compiler/PrsStmt.CPP.Z,45",BI=237$0000010076 000C 0000000040 Funct Export Res -$LK,"PrsNoUnusedWarn ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1554",BI=238$0000013A76 0001 000000008F Funct Export Res -$LK,"PrsOffsetOf ",A="FL:C:/Compiler/PrsExp.CPP.Z,379",BI=239$000000DB36 0002 0000000148 Funct Export Res -$LK,"PrsPop ",A="FL:C:/Compiler/PrsExp.CPP.Z,13",BI=240$000000CE5E 0016 0000000022 Funct Export Res -$LK,"PrsPop2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,23",BI=241$000000CEBE 0001 000000002D Funct Export Res -$LK,"PrsPopDeref ",A="FL:C:/Compiler/PrsExp.CPP.Z,28",BI=242$000000CEEE 0004 000000003F Funct Export Res -$LK,"PrsPush ",A="FL:C:/Compiler/PrsExp.CPP.Z,8",BI=243$000000CE36 0017 0000000028 Funct Export Res -$LK,"PrsPush2 ",A="FL:C:/Compiler/PrsExp.CPP.Z,18",BI=244$000000CE86 0004 0000000033 Funct Export Res -$LK,"PrsSizeOf ",A="FL:C:/Compiler/PrsExp.CPP.Z,331",BI=245$000000D92E 0001 0000000207 Funct Export Res -$LK,"PrsStatement ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1665",BI=246$0000013F7E 0004 0000000C2C Funct Export Res -$LK,"PrsStaticInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,274",BI=247$000001099E 0002 000000013E Funct Export Res -$LK,"PrsStreamBlk ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1568",BI=248$0000013B06 0000 00000001B2 Funct Export Res -$LK,"PrsSwitch ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1355",BI=249$00000131E6 0002 000000088F Funct Export Res -$LK,"PrsTryBlk ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1604",BI=250$0000013CBE 0001 00000002BD Funct Export Res -$LK,"PrsType ",A="FL:C:/Compiler/PrsStmt.CPP.Z,377",BI=251$0000010D26 0002 0000000391 Funct Export Res -$LK,"PrsUnaryModifier ",A="FL:C:/Compiler/PrsExp.CPP.Z,980",BI=252$000000F3E6 0000 000000084A Funct Export Res -$LK,"PrsUnaryTerm ",A="FL:C:/Compiler/PrsExp.CPP.Z,617",BI=253$000000E4AE 0000 0000000F38 Funct Export Res -$LK,"PrsVarInit ",A="FL:C:/Compiler/PrsStmt.CPP.Z,66",BI=254$0000010146 0001 00000004DA Funct Export Res -$LK,"PrsVarInit2 ",A="FL:C:/Compiler/PrsStmt.CPP.Z,183",BI=255$0000010626 0004 00000002FE Funct Export Res -$LK,"PrsVarLst ",A="FL:C:/Compiler/PrsStmt.CPP.Z,471",BI=256$00000110BE 0006 0000000AD9 Funct Export Res -$LK,"PrsWhile ",A="FL:C:/Compiler/PrsStmt.CPP.Z,1263",BI=257$0000012E56 0001 00000000EF Funct Export Res -$LK,"SLASH_OP_DEC ",A="FL:C:/Compiler/BackLib.CPP.Z,262"$0x052B0000 0006 0000000018 DefineStr -$LK,"SLASH_OP_DIV ",A="FL:C:/Compiler/BackLib.CPP.Z,267"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_FADD ",A="FL:C:/Compiler/BackLib.CPP.Z,271"$0x0000C1DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FDIV ",A="FL:C:/Compiler/BackLib.CPP.Z,275"$0x0000F9DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FDIVR ",A="FL:C:/Compiler/BackLib.CPP.Z,276"$0x0000F1DE 0003 0000000018 DefineStr -$LK,"SLASH_OP_FILD ",A="FL:C:/Compiler/BackLib.CPP.Z,280"$0x00000000 0002 0000000018 DefineStr -$LK,"SLASH_OP_FISTTP ",A="FL:C:/Compiler/BackLib.CPP.Z,279"$0x00000000 0002 0000000018 DefineStr -$LK,"SLASH_OP_FLD ",A="FL:C:/Compiler/BackLib.CPP.Z,277"$0x00000000 0008 0000000018 DefineStr -$LK,"SLASH_OP_FMUL ",A="FL:C:/Compiler/BackLib.CPP.Z,274"$0x0000C9DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FSTP ",A="FL:C:/Compiler/BackLib.CPP.Z,278"$0x00000000 000D 0000000018 DefineStr -$LK,"SLASH_OP_FSUB ",A="FL:C:/Compiler/BackLib.CPP.Z,272"$0x0000E9DE 0002 0000000018 DefineStr -$LK,"SLASH_OP_FSUBR ",A="FL:C:/Compiler/BackLib.CPP.Z,273"$0x0000E1DE 0003 0000000018 DefineStr -$LK,"SLASH_OP_IMUL ",A="FL:C:/Compiler/BackLib.CPP.Z,266"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_INC ",A="FL:C:/Compiler/BackLib.CPP.Z,261"$0x00030000 0004 0000000018 DefineStr -$LK,"SLASH_OP_MOV ",A="FL:C:/Compiler/BackLib.CPP.Z,268"$0x00000000 0002 0000000018 DefineStr -$LK,"SLASH_OP_MUL ",A="FL:C:/Compiler/BackLib.CPP.Z,265"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_NEG ",A="FL:C:/Compiler/BackLib.CPP.Z,264"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_NOT ",A="FL:C:/Compiler/BackLib.CPP.Z,263"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_POP ",A="FL:C:/Compiler/BackLib.CPP.Z,270"$0x00000000 0001 0000000018 DefineStr -$LK,"SLASH_OP_PUSH ",A="FL:C:/Compiler/BackLib.CPP.Z,269"$0x00000000 0001 0000000018 DefineStr -$LK,"StrMatchBits ",A="FL:C:/Compiler/UAsm.CPP.Z,229",BI=258$0000000EC8 0002 0000000073 Funct Export Res -$LK,"StreamDir ",A="FL:C:/Compiler/CMisc.CPP.Z,43",BI=259$0000002848 0000 000000004E Funct Export Res -$LK,"StreamExePrint ",A="FL:C:/Compiler/CMain.CPP.Z,677",BI=260$000002CE62 0000 00000000EC Funct Export Res -$LK,"StreamPrint ",A="FL:C:/Compiler/CMain.CPP.Z,1",BI=261$000002B302 0000 00000000A8 Funct Export Res -$LK,"U ",A="FL:C:/Compiler/UAsm.CPP.Z,640",BI=262$0000002580 0000 00000000CF Funct Export Res -$LK,"UasmHashLoad ",A="FL:C:/Compiler/UAsm.CPP.Z,187",BI=263$0000000D70 0001 0000000154 Funct Export Res -$LK,"Ui ",A="FL:C:/Compiler/UAsm.CPP.Z,242",BI=264$0000000F40 0002 000000163B Funct Export Res -$LK,"Un ",A="FL:C:/Compiler/UAsm.CPP.Z,655",BI=265$0000002650 0008 00000000DA Funct Export Res -$LK,"UndefinedExtern ",A="FL:C:/Compiler/PrsStmt.CPP.Z,54",BI=266$00000100B6 0001 0000000048 Funct Export Res -$LK,"UnusedExternWarning ",A="FL:C:/Compiler/PrsStmt.CPP.Z,60",BI=267$00000100FE 0004 0000000043 Funct Export Res -$LK,"asm_seg_prefixes ",A="FL:C:/Compiler/Asm.CPP.Z,777"$000000A0E8 0001 0000000006 GlbVar Export -$LK,"cmp ",A="FL:C:/Compiler/Compiler.PRJ.Z,16"$00000004E0 00C0 00000001E1 GlbVar Export -$LK,"cmp_templates ",A="FL:C:/Compiler/CExts.CPP.Z,38"$0000000000 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_pop",A="FL:C:/Compiler/CExts.CPP.Z,39"$000000018B 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_push",A="FL:C:/Compiler/CExts.CPP.Z,41"$0000000257 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_push2",A="FL:C:/Compiler/CExts.CPP.Z,40"$0000000421 0002 0000000004 GlbVar Export -$LK,"cmp_templates_dont_push_pop",A="FL:C:/Compiler/CExts.CPP.Z,42"$0000000391 0002 0000000004 GlbVar Export -$LK,"cmp_type_flags_src_code",A="FL:C:/Compiler/Lex.CPP.Z,386"$0000005BC0 0001 0000000008 GlbVar Export -$LK,"intermediate_code_table",A="FL:C:/Compiler/CMisc.CPP.Z,52"$0000002898 0014 0000000BB0 GlbVar Export -$LK,"internal_types_table",A="FL:C:/Compiler/CInit.CPP.Z,8"$000002A198 0001 00000000AA GlbVar Export -$LK,"lex_zeros ",A="FL:C:/Compiler/Lex.CPP.Z,129"$0000004FDC 000A 0000000004 GlbVar Export -$LK,"uasm ",A="FL:C:/Compiler/Compiler.PRJ.Z,17"$00000006C8 001C 0000000028 GlbVar Export -Ì‹ˆŽˆŽ¢Ž­Ž¸ŽÁŽÉŽÌŽÓŽ×ŽàŽñŽõŽûŽ �%�,�7�<�H�M�T�`�e�h�r�j�‚�‹�š�’�ª�³�¹�¹�Ç�Ê�Þ�ç�ð�÷�û���/�8�F�b�n�n�†�—�—�ž�º�Æ�Î�á�è�ü�‘‘‘‘'‘2‘L‘}‘†‘Ž‘�‘›‘§‘«‘¼‘¾‘ϑّä‘î‘ý‘ ’(’(’+’3’8’º’,DË‚¤‚¤˜¤«¤³¤Á¤ߤê¤ð¤ý¤¥%¥6¥<¥Q¥o¥o¥„¥‰¥‘¥™¥Ÿ¥·¥Ê¥Õ¥Ù¥ã¥ø¥þ¥¦ ¦¦!¦!¦(¦,¦0¦>¦Q¦U¦^¦s¦w¦w¦Ц�¦£¦§¦°¦ͦѦѦѦѦÖ¦è¦÷¦§§/§?§O§T§T§T§`§h§p§v§‹§“§¡§«§¹§¿§Á§Á§Á§Á§Á§Á§Á§Á§Á§ͧÕ§ݧã§ø§¨¨ ¨¨ ¨ ¨ ¨2¨8¨D¨J¨W¨r¨‚¨ލ”¨¡¨³¨Á¨à¨©?ª\½Ð`Š`ŠnŠpŠ{ŠƒŠŽŠ™Š¤Š¦Š¾Š¾ŠÐŠÜŠåŠèŠ‹„ <ȄȄ܄ã„ê„î„…%…,…=…b…m…x…z………ª…µ…À…Â…É…Ò…Ô…ß…æ…ð…†”ú`�`�x��†�‰�’�•�˜�œ�¡�Á�®�Ñ�Ù�á�ä�æ�ö�ÿ�ŽŽŽ"Ž9ŽJŽUއŽ„7”ø—ø—˜˜$˜C˜U˜g˜y˜‹˜�˜ª˜ª˜¯˜¶˜Ì˜Þ˜ã˜þ˜ ™™+™:™G™G™G™g™g™}™�™“™¡™°™µ™µ™¼™Ò™ã™å™û™ššš)š4šJšUšjšoš‡šŒš¤š¸š½šÒš×šïšôš ››)›.›F›H›a›r›r›t›Š›‘›§›§›Â›Ú›ò› -œ œ œ<œÔCB¢B¢V¢V¢|¢|¢™¢�¢¢¢¢¢¢¢®¢³¢âȢȢȢ͢͢ã¢ê¢ý¢ ££$£-£/£/£/£/£6£=£D£K£R£Y£`£g£n£n£p£p£v£{£}¤°Ñù‹‹;‹H‹M‹Q‹Z‹g‹s‹~‹‰‹‘‹œ‹¤‹§‹³‹»‹Õ‹û‹õ‹ ŒŒIŒ5ŒYŒYŒqŒ|Œ˜ŒŸŒÃŒüŒüŒüŒüŒ]� ¨Z€‡‡.‡5‡<‡J‡[‡m‡o‡v‡|‡Œ‡—‡¡‡¬‡Ã‡Æ‡È‡Ú‡à‡ð‡ú‡ˆ ˆˆ+ˆ3ˆ3ˆIˆIˆIˆ]ˆ -¨�§`ˆ`ˆvˆ}ˆ„ˆ’ˆ£ˆµˆ·ˆ¾ˆÄˆÔˆßˆéˆôˆ ‰‰‰"‰)‰9‰C‰M‰T‰_‰s‰{‰{‰‘‰‘‰‘‰¦‰ €=Y††)†0†7†>†D†T†_†i†t†‹†Ž†�†«†µ†¿†Æ†Ñ†ã†ë†ë†‡‡‡ `¨¼¨‰¨‰È‰Ï‰×‰â‰ì‰÷‰ÿ‰ŠŠŠ?ŠAŠQŠQŠ_Š Ü•@œ@œeœlœƒœ�œšœ¬œ¬œÝœøœ� ���'�.�5�9�;�A�M�W�^�e�i�i�s�x�ƒ�•�•�Æ�ç�ó�ú�ž žžž$ž(ž*ž0ž<žFžMžTžXžXžežsžƒž•ž•žÆžçžóžúžŸ ŸŸŸ$Ÿ(Ÿ*Ÿ0Ÿ<ŸFŸMŸTŸXŸXŸbŸrŸ„Ÿ„ŸµŸ¼ŸÂŸÎŸØŸßŸæŸêŸìŸòŸþŸ     $ ; T ` d d g p æ „¸ƒ¸ƒëƒ÷ƒÿƒ„ „„„„"„&„.„3„7„H„Y„[„_„p„�„Ž„¡„¨„²„²„²„²„Ä„L·ÆRÏRÏVÏaÏhÏmÏrÏ‰ÏšÏ¨Ï±Ï¶Ï»Ï½Ï !%(("(*(/(h°FªÄªÄÃÄÛÄëÄ ÅÅ5ÅPÅPÅzłņʼnÅ�ŒŜşŦŬųŹŽÅÂÅÌÅÝÅäÅëÅíÅñÅúÅÆÆÆÆ!Æ2Æ=ÆCÆJÆSÆlÆ}ƆÆ�ƗƢƭƹÆÊÆÛÆçÆõÆ÷ÆþÆÇ -ÇÇÇ"ÇEÇSÇ]ÇgÇpljǚǣǬǴǽÇÃÇÇÇÌÇÐÇÝÇäÇòÇüÇÈÈ$È=ÈNÈWÈ`ÈhÈqÈwÈ{ȀȆÈ�ȚȶÈÄÈÊÈÏÈ×ÈßÈçÈôÈüÈÉ-É6ÉQÉeÉeɂɉɒɛɢɫɴɽɯɿÉêÉDÊP«»r»r»›»�»«»±»Ï»Þ»í»ü» -¼¼¼(¼$æÌæÌôÌÍ"Í"Í(Í8 .Í.ÍBÍPÍVÍͅͰͶͼͼÍÄÍ8ëu:¯:¯F¯V¯l¯t¯~¯–¯›¯«¯Á¯ɯÓ¯ë¯ð¯°°&°.°8°P°\°d°n°~°ƒ°™°£°­°·°Á°˰Õ°ß°é°ó°ý°±±±1±;±E±O±Y±c±m±w±�±—±¡±«±Á±˱ձ߱é±ó±ý±²²²%²/²9²C²M²W²a²k²u²²‰²“²�²§²±²»²ŲϲÙ²ã²í²ý²à;¯ºÀºÀØÀãÀôÀ÷ÀûÀÁ ÁÁ(Á>ÁOÁ`ÁrÁ„Á“Á¢Á³ÁÂÁÂÁÐÁÔÁØÁÝÁáÁîÁõÁ Â&Â4ÂMÂOÂSÂ]Â]ÂbÂbÂbÂgÂgÂv‡Â�Â�Â�¢¢·ÂÃÂÎÂÓÂÓÂÖÂÛÂÛÂ÷ÂÃÃÃÃÃÃÃ4Ã@ÃLÃNÃNÃQÃSÃSÃ`ÃbÃbÃeÃeÃnÃtÃyÕÕÕÕÕÕÕÕÕÕÕÕ×èúÃÉÃØÃØÃÜÃÜÃäÃÄÄ Ä¤Ä¼:*¼*¼D¼O¼S¼\¼c¼j¼€¼‘¼¢¼´¼ƼÕ¼ä¼õ¼½½ ½½½%½,½5½<½@½`½`½`½`½`½l½p½s½{½‰½‘½ž½¦½®½¿½ʽϽϽܽâ½ñ½¾ -¾¾"¾1¾4¾6¾N¾e¾g¾u¾w¾‚¾ˆ¾ˆ¾�¾�¾¢¾©¾¿¾¿¾¿¾ľľÙ¾ç¾ò¾÷¾÷¾ú¾ÿ¾ÿ¾¿)¿6¿8¿8¿<¿>¿>¿Z¿h¿t¿v¿v¿y¿{¿{¿ˆ¿Š¿Š¿�¿�¿�¿�¿�¿–¿œ¿ ¿¬¿Ì¿Ù¿ç¿î¿¶Àô1ªê´ê´ò´µµµ µ3µBµbµoµ�µ£µõѵíµÿµ¶.¶9¶Z¶x¶‡¶¢¶­¶ȶá¶á¶ü¶%·?·Z·l·{·Š·Š·•·¨·¹·Ì·Ü·é·ô·¸#¸#¸/¸/¸/¸@¸M¸T¸s¸|¸‰¸�¸•¸ ¸¸¸иÙ¸é¸ñ¸ö¸ ¹-¹=¹M¹X¹l¹q¹y¹Ÿ¹¡¹¬¹ß¹ù¹ù¹º º(º7º@ºHºZºyº�º‰º”º–º¦º¾ºÖºîº»»/»8»A»S»a»e»l»ˆÌêBªBªKªFªFªUªdªdªsªsª‚ª‚ª‘ª‘ª ª ª¯ª¾ªͪܪܪëªúª «3¯Ø8>Ä>ÄfÄiĞįįÄÊÄÐÄÕÄÕÄðÄöÄûÄûÄÅÅÅ%Å+Å0ÅsÅ}Å„ÅŠÅŒÅŒÅŸÅ¥Å¥Å¥ÅªÅÆÅÕÅçÅìÅìÅìÅóÅúÅÆÆÆ9Æ9ÆKÆ0S[^À^ÀrÀzÀ‡À‘À¤À”"iJiJ|J‡J±JáJòJK KK&K-K;KDK\KkKxK{K”K—KœK³K¿KËKÏKÝKäKçKL0ûŽÌŽÌ—̜̥̬̮̳Ì8¶Ì¶Ì¿ÌÄÌÏÌØÌßÌáÌæÌ <9DNÆNÆhÆrÆvÆzÆÆ�Æ�ƹƹÆÃÆ &*0(0(:(B(G(!8s}JÌJÌcÌr̡̛̤̆̕ÌÅÌ"8š¤âÍâÍûÍ -ÎÎ+Î1Î7Î:Î[Î#0jrúËúËÌ#Ì2Ì8Ì;ÌCÌ$0‘™šÍšÍ°ÍÃÍÐÍÖÍÙÍáÍ%˜GiJÊJÊRÊVÊsʆʙʶÊ×ÊàÊñÊË/Ë/ËQË`ËiËvË}˯˼ËÀËÈËÈËÛËëËïËóË&X~�ÊÌÊÌçÌûÌÍÍ)ÍFÍdÍjÍsÍ�͇͖͊Í' �'�'™'·'¼'(ˆ ˜€˜€¨€É€É€×€×€×€×€à€à€ç€���%�%�3�C�C�Q�W�W�o�o�u�›�)  D � �°�¹�Ì�Ù�å�ñ�ý� ‚ ‚ ‚/‚:‚C‚J‚S‚}‚‚‚”‚£‚¯‚Á‚Á‚ê‚ê‚ì‚ÿ‚ƒƒ'ƒ*ƒAƒ*TEVHƒHƒZƒ]ƒfƒoƒ}ƒ‚ƒ‹ƒŽƒ“ƒ¡ƒªƒ·ƒ+ì8¦¦ÐÓÖÜáø&8^…ˆ¡¸Ê×êý -#,,7_y˜±³ÍÓì ""4r‡™,üE€Ö­Ö­õ­®®7®U®d®‚®–®®®µ®º®Û®ù®¯%¯6¯M¯Q¯Q¯U¯Z¯_¯i¯l¯v¯|¯™¯œ¯œ¯œ¯¡¯§¯ïѯݯæ¯ú¯° °'°2°>°G°[°[°j°o°o°}°-4õ~®®àëø$RWW[eqŒ“¡£«Åàòÿ+07\clnt‡¥·ÄÜò$69;A]uw�¡¤¦¬ÈÈÈÚÚèò//48T`{˜¢¦¶Éàãõ *.DWnqƒ�¡«´ËÕ×ëõ     " 5 M O g z ‘ — © ± Ò é é é   ! .d9ΞžÔÛãìý - "%)2@JOw|‰µºÇçìû'/4Iu}‚‚•¨¸¼Ûìññ#8;>BBGot}Š’­¿Ì×õõõ(?AANeev{›­¿ÝÝÝê'))6MM^fk‘£µÓÓÓà÷ùù   2 4 ; ] { € ‡ • Ÿ ¡ ¡ ¡ ½ Å Ç Ç é # -/€:N&N&b&i&u&…&¤&ª&±&Ð&Ò&ñ&ý& ','2'9'9'A'I'T'\'g'r'‘'™'0„žÆIÆIäIöIüIJ -J JJJJJ9J=JCJCJ[JoJ€J€JˆJ¬JÌJíJòJKK$K/K4KAKDK{KŒK‘K—K™KŸK¢K³K¸K»KÃKÌKçKLL1L6L:L\LoLtL‹LžL£L§LÉLäLMMM-M2M5M7M=MCMTMYM_MgMgMqMzM‘M¤M©M­MÏMêM -NN"N=N]NtN‡NŒN�N²NÅNÅNàNàNàNîNOOOOO.O0O0O>OVOVOhOhOqO~O”O´OÎOÕOßOòOöOöOöOýOPP$P.PFPHPNPhPoPyP‡P’P’P¬P1h£¹¦h¦h¼hÈhÞhëhõhii!i'iFi:iWiYiYiŠixiYi©i³i2À 7;;";I;7;);j;z;l;›;¾;¾;Î;Ó;Ó;ç;ì;ì;< < <-<2<2<F<K<K<h<h<v<š<À<à<ò<==&=&=&=&=&=ï=3̟ήP®PÂPáPÍPQQ Q&Q`QeQ‘Q‘Q–Q¬Q¾QÔQêQR,RdRPRRŒR¸R½RäRìRSòR!S:S&SZSFSnS{S§S§S§S§S¯S4°>ž<ž<´<¼<Ç<Ó<Þ<à< ===6=C=n=™=“=‡=±=Ó=ë=Ø=þ=÷=> ->1>>>i>‚>|>p>Ž>¡>¡>¡>«>5¬ô[F/F/l/Œ/”/Ÿ/®/·/»/Æ/Ñ/æ/ë/0$0*0/0B0x0Ž0”0œ0Ÿ0¤0·0á0÷0ý0111(1-1J1i1o1w1w1|1‚1…1�1›1°1µ1Ï1î1ô1ù122"2'2F2N2S2^2s2|2~2�2¥2°2Å2Ê2ä23 333333"37373O3Z3m3z3’3¦3·3Á3Ã3×3è3í3ø3%4%4%4746Ð϶S¶SÔSäSïSúS?TfT„T®T´TºTÂTÄTÌTçTêTõTUFUmU‹UµU»UÁUÉUÎUÖUñUôUÿU VVUV|VšVÄVÊVÐVØVÚVâVýVW WW\WƒW¡WËWÑW×WßWäWìWX -XX!X!X&X,X2X:XBXMX_XnX�XÇXÍXÒXäXóX%YOYUY]YbYtYƒY²YÜYâYçYùYZ7ZaZgZlZlZlZ}ZˆZ“Z¹ZÑZÜZäZñZñZöZ [ [%[K[c[n[v[ƒ[ƒ[ˆ[›[¨[²[Æ[Ý[ö[\\@\T\k\y\{\�\¦\¦\¯\»\Ñ\ê\ý\ ]] ] ] ]'],]?]K]b]d]i]|]ˆ]•]Ÿ]Ÿ]±]7d¤¹¹¹¹-¹-¹G¹N¹Z¹Z¹q¹q¹ˆ¹ˆ¹Ÿ¹Ÿ¹¶¹¶¹͹ϹϹÓ¹8ló -I:I:W:a:h:::„:†:’:œ:ª:Ç:É:Ù:Ù:Þ:à:ç:;9ì|ó^*^*€*Š*½*Ì*â*+ +++ +/+6+?+D+Y+j+‰+‘+“+²+º+É+Ð+Ü+á+è+ð+ö+ø+,,,,;,A,A,I,R,a,€,‡,‰,¨,¯,¯,¯,Ã,×,Û,é,ü,ô,--$-+-3-9-;-G-W-\-^-~-„-„-�- -¥-ª-Ê-Ð-Õ-á-ñ-ö-ø-..%.-.3.5.A.Q.V.X.x.~.~.~.†.�.�.™.™.±.á.õ.ù.///2/2/D/:à?ó®>®>Ñ>Ù>é>ñ>?5?9?A?I?O?c?k?k?s?¬?ô?Ï?@@.@=@?@i@o@x@@‡@�@›@£@«@¾@Æ@Ë@Õ@õ@ý@ÿ@ AA8A@ABAbAjAjAjAsAzA�A•AžAžA£A§A¯A¸AÁAÍAèABBHBKBdBqB…BœB B¬BÑBíBÿB)C/C1C[C^C^CuC‚C–C­C¶CºCÅCÐCâCñCóCD D2DADFDpDvD{D�DœDžDÈDËDÝDìDîDEEEE(E(E3EdEmEmEmEmEvE‚E˜E±EÄEËE×EÞEÞEñEõEõEõEüEFFF'F.F.FEFGFLF_FfFrFyFyF†F�F�F¶F¶FÈF;ÄErÆÆÆÆòÆõÆúÆÇ ÇÇ Ç$Ç(Ç+Ç>ÇWÇyÇ‚Ç�ǔǭÇÏÇÔÇíÇÈÈÈ4ÈVÈXÈqȓȓȓȨÈÂÈÑÈãÈ<T�¡~Ã~ÒßîîúÃÀÃêÃÄìÃÄ Ä/Ä7Ä=¸ë¦:¦:¾:Â:Ð:ß:ê:ö:;;,;2;2;T;ƒ;g;[;¥;ª;Ñ;Ö;â;í;ï;<<<1<J<D<8<V<i<i<‹<‹<—<>X™«ÞÞìó13Rq‡’”ŸªÉÏ?ä¬áÖÖëöý*IKj—¥­¸ºÅÐÐÕ49@_~‰‹ªÉÉäòú=ZZg‹¬¬¬´@¤yžfúfú„ú•ú¡ú¸ú¿úØúÐúðúûüúû-û2ûSû?ûkû|û“ûšû³û«ûËûëû×û÷ûüü -ü6üCüCü[ü[üeüA¬%L>Ú>Ú\ÚnÚuÚ|Ú‹Ú�Ú¯Ú¯Ú´ÚÓÚØÚßÚîÚðÚÛÛ.ÛCÛ0ÛOÛ^Û`ÛÛÛÛÛŽÛ§Û Û¿ÛÉÛBdEZžîžî¼îÏîÖîÝîäîèîêîñîøîüîüîïï'ï'ï;ïFïTïeïiïnïyïŠï›ï²ï¶ï¿ïÃïÈïÙïöïöïððð6ðGðKðKðKðPð~ð“ðšð­ð±ð¶ðÁðÒðãðúðñ ñññ%ñ7ñGñ[ñ]ñvñ‰ñ�ñ�ñ�ñ˜ñ©ñºñÑñÕñÞñâñçñøñòò#ò7ò<òUòfòjò|ò|ò|ò�ò�ò’ò±ò±òÐòÛòáò÷òó ó"ó-ó>óOófójósówó|ó�ó¦ó¦ó´óÈóÊóãóôóøóøóÿóôô(ô-ô8ôIôZôqôyô‚ô†ô‹ôœô²ôÂôÖôÛôôôõ õõõõõ5õ"õAõPõRõqõ|õ‚õ˜õ©õ©õ©õ°õÃõÜõÜõÜõëõëõþõö ö1ö6ö<öFöHöTöTö[öfö{ö}öˆö�ö©ö«ö¶öÂöÒöÙöàöêöòöööúöüö÷ ÷ ÷ ÷!÷&÷.÷2÷4÷4÷=÷J÷`÷€÷š÷¦÷²÷¹÷¹÷Ì÷Ð÷Ð÷Ð÷×÷Ü÷ö÷øøøø,ø.ø3øMøYøeøløløyøƒøƒø•øCÌs¢æÈæÈÉÉÉ É&É(É.É4É4ÉFÉQÉXÉeÉrɅɔɨɮɰɷɽÉÇÉÇÉØÉÚÉáÉçÉñÉñÉñÉÊÊ!Ê0Ê2ÊDÊSÊSÊeÊDx£½fÊfÊ�ʓʚʠʦʨʮʴʻÊÈÊÕÊèÊõÊË -Ë ËËË+Ë=ËLËjË|ËE<mx¶ù¶ùÐùÜùîùú%úú=úUúUú_úF„ñ^Í^Ív͈Í�͖͵ͺÍÙÍÞÍøÍåÍÎÎ#Î8Î%ÎWÎDÎcÎcÎuÎ|ΛΛΣÎGM�ÎÛÎÛæÛøÛÜ+Ü -Ü7ÜUÜ‚Üa܎ܨܨÜÇÜÜÜÉÜ ÝèÜÝ/Ý/ÝAÝ[Ý[݈ݕÝÎÝÓÝÚÝÞùÝÞ2Þ>ÞpÞ]Þ‹Þ|Þ—ÞµÞÊÞ·ÞÖÞßõÞß*ß*ß<ßVßqß~ß�ß�ߥßHT[l–ø–ø°ø¼øÎøäøùòøù.ù@ùVùwùdù�ù§ù§ù±ùI(^$žÑžÑÄÑ×ÑßÑæÑíÑóÑõÑüÑÒÒÒÒÒ+Ò6ÒAÒRÒcÒzÒ‚Ò‹Ò“Ò˜Ò©Ò¿ÒÏÒáÒæÒÓÓÓÓ!ÓMÓbÓmÓ~Ó�Ó¦Ó®Ó·Ó¿ÓÄÓÕÓçÓ÷Ó Ô Ô%Ô=ÔAÔAÔLÔ]ÔnÔ…Ô�Ô–ÔžÔ£Ô´ÔÊÔÚÔìÔñÔ Õ#Õ'Õ:Õ:Õ:ÕRÕ?ÕrÕ_ÕÕ‹Õ‘Õ©ÕÁÕÆÕÛÕæÕ÷ÕÖ Ö'Ö0Ö8Ö=ÖNÖ`ÖpÖ‚Ö„ÖžÖ¶ÖºÖºÖÅÖÖÖçÖþÖ××××-×C×S×e×jׄלנ׳׳׳×Ë׸×ëר׸ר -Ø"Ø:Ø:Ø:ØFØLØWØbØt؄؛زØÉØàØàØôØÙÙÙ1Ù1Ù?ÙAÙAÙOÙOÙXÙcÙqٌٛ٢ٲٴÙÑÙÙÙöÙÚ"Ú"Ú;ÚJD¦ß¦ßÄßËßÒßÝßåßþßþßà+à+à6à:àEàmàLàyà�à�à³à·à¼àÎàßàöà áááá#áJá`ádádátá±á�á½áÚáÚáùáâ -â â1â6âHâYâpâ‡âŒâ”â˜âšâÁâ×âÛâæâ÷âã ã'ã,ã0ã5ãFã\ãjã~ãƒãœã­ã±ãÃãÃãÃãÃãÈã÷ãäã$ää0äMäXä^ätä…äŠä•ä¦ä·äÎäÖäÛäßäääõäåå)å+åDåUåYåYåYåkå|å“åªå¯å·å»å½åäåúåþå æ æ æ ææ$æ.æ5æHæ_æ_æ{æ{æ‰æ‹æ‹æ™æ™æ¯æ¿æÍæäæ÷æüæç ç<çLçSçaççwç¤çÍçÍçÍçÚçèè#è)è4èSèjèZèvèŒèšè²èÈèÌèÜèûè'éé3éPéPéoézé€é–é§é¬éÂéØéÜéçéøé ê ê(ê-ê1ê6êGê]êkêê„ê�ê®ê²êÄêÄêÄêÄêÉêøêåêë3ë#ë?ë\ëgëmëƒë”ë™ë¤ëµëÆëÝëåëêëîëóëìì$ì8ì:ìSìdìhìhì‡ì�ì³ì·ìÄìÄìÄì×ìÝìçìîìíííí4í4íBíDíDíRíRíhíxí†í¡í´í¹íÕíÝíùí îî4îPîPî]î}î}î}î�îK|Ìçžþžþ¸þàþÃþìþùþ ÿ%ÿÿ=ÿUÿBÿhÿaÿtÿ�ÿ”ÿ­ÿ¦ÿ¹ÿ¹ÿÆÿåÿåÿïÿLH]¦Î¦ÎÊÎâÎýÎéÎÏ Ï)Ï?Ï+Ï_ÏKÏkÏwÏ|ψϘϟϬϷÏÃÏÎÏÖÏÛÏçÏìÏÐÐ ÐÐÐ&Ð?ÐHÐTÐYÐmÐtÐxÐxÐ}ЖЛдÐÉÐÛÐàÐëÐóÐóÐóÐõÐÑ#Ñ.Ñ8ÑCÑEÑPÑXÑXÑeÑ]Ñ}Ñ�ÑMd¶ËŽýŽý¨ýÌý¯ýØýñýêý þþ þ1þ*þ=þVþOþbþbþoþŽþŽþ˜þNhŸµfüfü„ü�ü§ü¸ü¿üØüÐüðüýüüý-ýCý/ý[ýhýhý€ý€ýŠýOLè÷öÿöÿ&-LL^q~w– Pؾð~Ë~ˠ˧˲ËÈËÈËÚËåËðËÌÌ)Ì-Ì2Ì6Ì8ÌIÌ[ÌgÌyÌ{̧̧̧̣̺̔ÌÏÌÏÌÛÌáÌëÌöÌÍ ÍÍÍ2ÍLÍLÍ^ÍQ�$D¾H¾HÜHäHðHII)I4ICIIIIIIINISIaIlI‚I„I‰I—I¢I¯I¶IÄIR4;D–­–­Ÿ­«­Ê­Ï­Ñ­Ñ­Ö­S”n�ÎÁÎÁÂ#Â#Â6Â:ÂYÂmÂrÂr‡Â�¤°ÂÁÂÆÂ×ÂëÂðÂò Ã#Ã%Ã%Ã>ÃVÃVÃxÃT<Œ—ÆrÆrÏrÚrårðrûrs#s.s>sU,ð7~a~aša a«a¼aÁaÇaÊaÎaÎaîaóa)bb5bNb:bZbsb_bb†b‹b•b˜bœb¡bºb¦bÆbÆbÆbËbÜbábçbêbîbîbccIc5cUcncZczc�c|cœc£c¨c®c±cµc·cÐc¼cÜcÜcÜcÜcôcd)dVXâô¶¶ÄËê  *IW_jlw‚¡§W´?h~d~d–d¡dÄdÜdádædêdìdòdødeûdee9eQe>e]e€e˜e�e¢e¦e¨e®e´eÊe·eÖeÖeéeñefff)f5fXtŒå~°~°–°ž°«°˰ݰä°î°ô°ú°þ°±$±$±+±.±3±B±F±X±s±w±|±|±ƒ±†±‹±—±¥±©±º±ɱͱϱÞ±â±â±ô±²² ² ²!²$²0²:²A²g²r²v²{²±²ȲÓ²ײè²ó²÷²ù²³³³³³"³&³(³(³3³7³E³Q³U³U³U³Y³|³Yˆæ~³~³’³¨³¨³¨³ª³ª³±³³³³³º³¼³¼³ɳ˳˳سß³á³á³î³õ³÷³÷³´´´$´ZܺmÖ¹Ö¹ ºº#ºEºEºVºcº�º‰º¶º»ºäº»»#»'»J»p»u»ž»¸»Þ»õ»û»ÿ»¼ ¼%¼6¼>¼]¼c¼g¼€¼ˆ¼§¼¬¼½¼żä¼é¼ñ¼÷¼û¼ÿ¼½½%½9½>½P½U½f½k½~½‹½Ÿ½ª½³½×½ ¾4¾9¾9¾9¾I¾P¾^¾k¾�¾�¾¤¾©¾©¾À¾¾¾Ö¾ؾؾï¾ñ¾ñ¾¿ -¿ -¿!¿!¿2¿7¿7¿G¿l¿~¿ƒ¿ƒ¿ƒ¿ƒ¿Š¿¾¿Ï¿í¿í¿í¿ú¿ÀÀÀÀ À7À9À9ÀFÀ]À]ÀrÀtÀ�À«À«À«À¯À±À±À±À¶À¸À¸À½À½ÀÇÀÌÀÌÀêÀêÀêÀòÀôÀôÀôÀüÀþÀþÀÁÁÁÁ+Á-Á@ÁTÁTÁTÁTÁTÁgÁÁ‡Á‡ÁÊÁ[ðU<?QX_dfmtxмÃîó (7qv£«°¹ÄÌÓòø8CZy††Œ�“¤ÄÖ\V˜ÖÖîõ:EQ€€Œ”£Ýß AFe€†•ª¬·¿Úßèóû :Y[z§¶¯Üáè&(Gf�‰¤¤¤ÐÐÜ]\ -N%N%`%l%Š%¦%³%Ê%Ý%è%ê% &&&/&(&G&M&^("®¬®¬½¬Ьè¬è¬î¬_hºÐ¶i¶iÌiØiîiûiÿij-j1j7jVjJjgjijijšjˆjij¹jÃj`Œ;Zž'ž'´'º'Á'Í'Ý'ý'( ()(+(K(W(g(‡(Œ(“(“(“(™(œ( (¨(À(Ë(Ö(ö()axiƒ··>·`·`·j·o·o·Ž·›·�·�·�·�·ª·²·Å·Ù·Û·Û·ã·ö·ö·¸b@„�¸¸¸'¸.¸M¸Z¸Z¸]¸_¸e¸c¬Ãê¦8¦8¾8Æ8Ñ8ÿ8Þ899Q919%9w9|9§9¬9¸9ß9ä9æ9: :'::?:F:g:Y:M:{:}:–:–:–:¢:dœŸÂÎ6Î6æ6î6ù63777Y7[7†7†7“7Ì7Ñ7Ý7è7ê7 88878)88K8M8f8f8s8š8š8š8¦8eˆ\z>4>4R4U4g4o4z4‰4‰4�4ª4µ4º4Ú4é4ñ4ü4555%505;5F5F5X5X5`5f¤6[nµnµ޵°µ°µϵßµäµäµóµ¶ ¶'¶.¶0¶C¶K¶K¶K¶M¶M¶M¶M¶k¶k¶k¶k¶}¶¶¶¶¶’¶�¶À¶g@\hƶƶÔ¶ܶã¶······h8yñ=ñ=> > >O>[>h>r>‚>‚>™> >·>¾>Ç>Þ>Þ>ô>ô> -? -? ? ?6?6?L?L?b?b?x?x?Ž?Ž?¥?¥?¼?¼?Ó?Ó?ê?ê?@@@@/@/@G@G@_@g@r@ƒ@Ž@Ÿ@¢@¤@»@Â@Â@ÎAiD€�¶]¶]Ê]Ö]ì]Ø]ø]ú] ^^&^j°Ž¶&^&^<^C^T^Y^n^[^z^€^€^Œ^¤^‘^°^³^µ^Ã^È^Ý^Ê^é^ì^ì^ø^ _ú^_ _ _2_E_X_k_~_ˆ_k°·ßŽ_Ž_¤_«_¼_Á_Ö_Ã_â_è_è_ô_ `ù_```+`0`E`2`Q`T`T```u`b`�`‡`‡`š`­`À`Ó`æ`ð`lLàïö`ö` -aa,aa8a:aMa`akava~am$~¬~¬�¬¥¬¥¬«¬n�Ÿ& & T Y m u ƒ ‡ � � • ¢ ¸ â ç  !!! !5!K!M!c!y!�!·!É!o ãÎ!Î!"""'"."5">"@"C"b"i"„"†"�"¨"¯"¸"º"½"Ü"Ü"Ü"ê"ô"#!###=#E#E#a#€#…#Œ#¢#©#Ä#Æ#Í#è#þ#$$ $-$M$O$i$q$q$�$¤$¤$Ê$Ü$p|5&´&´J´^´i´~´œ´§´Å´Å´Å´Ò´ê´ì´ì´ì´ù´µµµ!µ.µFµFµWµkµq(8>.d.dUdBdadpdxdrDÏ& -& -N -[ -^ -g -m -„ -› -² -ò - ( - 2 = T f s † œ ° µ À à å è   $ , 1 K e m u z ” œ ¡ Á Æ É ã ý    ) C K S U o w w | � Œ Œ — — £ £ µ õ   sôi¢6f6fLfXfcfhftff„f‹f�f›f f f¿fÞfàfåfðfõfõfg3gZgZgmg€g“g¦g«g«g¾gÑgäg÷gügügh"h5hHhJhJh]hphƒh–h–h–h¤htœè‹ÎkÎkìkllll$lDlIl_lwlclƒl’l¤l­lµl½l×lélòlúlmmm'm9mCmKmPmkmWm‹mwm—m­m™mÍm¹mÙmëmõmýmýmnn$n=nOn^nbnbninnnŒnŽn“nžn´n´n´n¸nÄnånónoo/o=oKoMoMofouo„o‡o«o¯oÕoÙopp'p+p+p+p1p?pIpbphpspp�p‰p�p¨p³pÁpËpäpçpïpûpýpqq!q#q/q1q9q?qXqpq|q‘q–q¨q·qÐqáqáqìq÷qrr0r5rGrVror€r€r†r‘r™r§r®rÀru4š£ƸƸÚ¸߸å¸é¸í¸ ¹¹vÌô#ÎFÎFðFGG0GLGYGpGƒGŽG�G°G¸G¸GÇGÇGÏGÛGñGHH H3H9H9H9H>HCHRH]HtHvH{HŠH•H¢H¬H¬HºHwH�žV6V6j6v6�6—6ƒ6£6¥6¬6·6Ã6Ë6x ‹�66*6K6S6y †ŠÖ5Ö5ê5 66z8{…f5f5‡5t5“5ž5©5´5¿5Ë5Ñ5{$#(î¬î¬ý¬ ­­­|$).­­+­9­>­D­}$/4F­F­S­a­f­l­~$5:n­n­|­‹­�­–­ V¬V¬e¬x¬~¬€0 Þ$Þ$%ò$%'% %?%G%�hÑçÆjÆjÜjèjþj kkk7k;kAk`kTkqksksk¤k’kskÃkÍk‚�[{)))!)3)R)X)_)~)€)Ÿ)±)Ð)Ö)Ý)Ý)å)í)ø)* ***)*4*S*[*ƒ0‘™f¸f¸t¸z¸~¸�¸¾¸¾¸ĸ„ð9ðð((22<N[^`ivv�——±¸ÎÎÜëú  22@Ndd�Öììú   N � ‡ ‡ ‡ ™ …ØHº    º ½ Ì Ì Ù ê í ð ð õ ú  - - -# -6 -; -P -[ -e -e -Ž -™ -¤ -Í -á -ÿ - -  3 : ? S � ’ ˜ ž ¥ ª ª ° ¶ » » Ó ù ÿ  " ) ) ) . 1 7 = D I I O U Z Z p Š ˜ ­ ³ Ã Ï Õ ã ê ì      ! , 8 ; = A A F F W i † �…ÎüÎüÜüñü÷ü‡\ŒŸIBIBiBxB�BŠBŽB’B›B B¥B¥B¶BºBÁBÙBÜBèBˆP³ÃqCqCCŒCšC¬C·CÅCÒCàCòCýC DDD‰,(o¡G¡GÆGÒGÝGçGíG÷GýGHH H1H;HAHKHQH[HbHnHtH}H¨H·HºH¼HÆHØHâHôHþHIII I5I:IJIUIZInI�I‹I I®I·I¿IÍIÞIîIÿI J JJJ!JhJЏï‘E‘E©E«E·E»EÈEËEåEåEåEëEïE÷EFF"F$F$F-F/F/F8F:F:FCFEFEFNFNFWF]F`FjF{F�F�F�FõF‹dÙîÉDÉDÙDàDìDòDúDEE'E>EKEKENE\ElEƒE‡E�EŒ<ÍØqDqD…DŒD˜D¤D´D¹D¼DÀDÈD�D'ùFùFGGG(G=GCGOG`G`GgG›GŽ,„‹ B BB!B,B7B=BCB�0ÄÌDD-D9DGDKDcDfDnD� ®²QCQCZCfCkC‘(§­!C!C/C6CFCICOC’( ¦éBéB÷BCCC C“4zƒÑAÑAßAæAðAþABB B”Ø ¶¨HeHeeeteteteŽeŽe�e�e£e¥e¥e«e­e­e³eµeµe¼eÀeÅeÅeÅeÅeÅeÅeÍeâeâeìeñeúeff&f(fCfEf`fef€f…f‹f‹f f£fÊf×fÿfïfgggg;g)gAgPgUg\gegxg€gˆg�g�g�g–g¯gµgµgÎgÜgög hhhh$h)h)h/h/h8hIhKh`hbhjhphxh}h}h}h}h‹hŸh¡hµhµh½hÃhËhÐhÙháhêhðhöhøhøhøhiii"i&i(i4i6iQiWi_idimixi{i�i‡i�i“i“i¡i¯i±iÔiñi÷iÿij jjjjjjj9jKjPj\jbjej|j~j�j‘j•jœj¥j´jÂjÈjÐjÕjÝjâjâjëjøjýjkk&kNkNkTkYkYk_kdkdkjkokokukzkzk€k…k…k‹k�k�k–k›k›k¡k¦k¦k¦k®k®kÇkÕkïklllllllll$l$l,l5l;lGlGlNlbldlgllltl|l�l�l‡l‹l�lŸl¤l®l¸l¸lÅlìlìlòlmmm$m2mAmWm]mbmbmgmzm†mŽmžm¨m±m¿mÆmÈmÑmÑm×måmñmnn+n1n3nFnKnKnhnhnzn€n‰n�n˜n¦n«n«n¾nÄnÆnÑnãnönön -oo(o-o9o?oBoYo[o^onoxo{o{oŠo�o¯o´oÀoÆoÉoàoâoåoõoùoppppp p'p,p,p2p2p@pFpLpVp`pƒp†pˆp’p’p”pœp¡p¦p«p«p±p¹p¾p¾pÃpÎpÓpØpãpèpqqqq q$q)q.q3q3q8q=qYq‹q‘q™q™q§q­q³q½qÇqêqíqïqùqr r r rrr#r#r(r(r.r6r;r;r@rKrPrUrZririrzr€r€rŽr”ršr¤r®rÑrÔrÖràrïrôrôrôrürs -sssss"s"s's2s7s\S\U\X\\\c\w\{\‡\Ž\’\™\¡\£\«\¸\Æ\Î\Ð\Ó\á\í\û\] ]]]+]–8ƒ�àOàOîOõOPPPPPP!P—L®½îýîýüýþþþ.þ4þ=þOþUþXþ”þ˜\¾Ñ–þ–þ¤þ¶þ¼þÄþÖþÜþåþ÷þýþÿÿÿoÿ™dBWaMaMqMxM„M‹M—MŸM¨M¬MºMÃMÑMÝMæMïMøMþMNšPp€8[8[N[Z[b[f[w[…[‹[—[Ÿ[ª[°[³[½[›DŽ›(P(PBPIPRP^PsP{P�P‡P‰P‰P˜PœTü ¨¨¶ÄÏÖæ÷ü€ €&€-€;€G€•€�<¢­®ý®ý¾ýÏýØýÞýâýåýíýžTo€6ü6üLüZü`üfüwü…ü“ü¥ü©ü¯ü½üÀüÊüŸD”¡VýVýfýzýƒý‰ý›ý›ýŸý¢ýªý D†“þüþüý"ý+ý1ýCýCýGýJýRý¡p©Á�|�|®|²|¶|¾|È|Ë|Î|Ý|á|å|í|ö|}}(}/}6}6}@}C}U}¢dH]àYàYZ ZZZZ,Z.Z;Z=ZHZ\ZdZtZyZZ‡ZŠZœZ£ œ@˜P˜P®PºPºPÐP×PÙPõPõPõPüPQ -QQQQQQ4Q4QjQvQ‡Q—Q­Q²QµQºQºQºQÒQÙQæQíQõQúQúQRR&R+R+RCRPRXR]R]RuR�RŠR’RšR¦R¼RÇRêRîRüRS S S!S;SESQSYS^S^S}S‰SšSŸS·SÃSÒS×SæSóSøSøSøSûSTTT T+TTATFTFTFTPTbTiTxT�T‰T�TœT¥T­TµT¼TÀTËTÖTÜTêTôTôTúTUU U U3U;U;U=U=U=UBUBUIUOUSUZU^U^U^U^UmUmU’U›U›UŸU­Y¤$pµèbèb ccc c)c4c@cHcRczczc†cˆcˆc”c™c™c¥cªcªc¶c»c»cÇcÌcÌcØcÝcÝcécîcîcúcÿcÿcÿcddd)d=dMdMdOdOd[dadfdfdldxdxdƒd�dœd±d¹d¿d¿dÐdÐdÙdÜdCe¥T^o Z ZÁZÈZ×ZÚZÞZæZêZîZöZ[%[,[8[¦ˆ#A!L!L=LLLVLcLjLyL�LµLËLÜLãLñLM M M2MGMOMRM^M§<¾É¸]¸]È]Ï]î]ù]^^^$^,^¨<²½0]0]@]G]f]{]�]Ž]˜]±]©|ÂÝX}X}n}w}‚}›}›}ž}­}³}¼}¾}Ä}Í}Ï}Õ}ß}æ}é}é}ó}ªDÞëø}ø}~~"~'~R~T~q~—~ž~¯~Â~«`l€©N©N²N¹NÍNáNæNO O'O)OGOIO`OtO}OO“O£OÔO¬\Xk N NN"N$N0N7NFNQN]NaNoN�N�N—NšN¤N­(AG°Y°Y¾YÇYÕYÛY®”0ª³ª³̳Ö³â³ç³÷³ý³´&´5´C´Q´h´p´z´‰´‘´ž´¦´©´©´©´«´º´Ä´Í´Õ´Ø´ê´¯LìûÈ~È~Ö~ç~ó~35Pkksz¡°Ì2h_h_ˆ_Œ_Í_Û_á_ø_`%`%`*`.`5`@`K`X`a`a`f`k`r`}`Š`Œ`™`›`�`�`�`¥`¥`¥`­`µ`½`Å`É`Ó` a±\àó¸^¸^Î^Î^Ò^×^ê^í^ò^ò^ü^_____²Hô _ _4_8_=_H_H_R_X_X_\_d_³”3T a a4a8aAaDaMaVahaha‘a•aša�a¦a¶a½aÀaÈaËaØaàaèaða÷abbb´(&,FFTcgjpµxUobb*b,b0b9bEbQbfbfb’b–b›b§bºbÄbÇbÒbÕbÝbçb¶8ÊÔ0^0^D^H^M^W^b^e^i^q^·8Õßx^x^Œ^�^•^Ÿ^©^¬^°^¸^¸ À'À'Ê'Ò'×'¹( Ø'Ø'æ'÷'( ((ºeã>È>ÈXÈaÈ�È�ȇÈ�ȗȟȧȭȺȺÈÈÈÍÈÍÈÓÈØÈØÈÞÈãÈãÈéÈîÈîÈÉÉ É$É$É-ÉMÉMÉMÉTÉVÉVÉ]É_É_ÉeÉeÉlÉnÉnÉtÉtÉ{É}É}ɃɃɊɊɒɘɞɦɦɦɦɲɺÉÂÉÊÉÒÉÚÉâÉèÉÊÊÊÊÊ&Ê,Ê2Ê2Ê6Ê>ÊEÊMÊUÊYÊ_ÊgÊnÊvÊ~ʂʈʓʙʦʲʸÊÀÊÄÊËÊÓÊÛÊßÊåÊíÊôÊüÊËËËËË4ËEËJËMËóË»ædvÄvÄ�ęĹĹĿÄÇÄÏÄ×ÄßÄåÄòÄòÄÅÅÅÅ Å Å%Å*Å*Å0Å5Å5ÅMÅ`ÅfÅkÅkÅtŔŔŔśÅ�Å�ŤŦŦŬŬųŵŵŻŻÅÂÅÄÅÄÅÊÅÊÅÑÅÑÅÙÅßÅåÅíÅíÅíÅíÅùÅÆ ÆÆÆ!Æ)Æ/ÆGÆVÆ`ÆcÆcÆmÆsÆyÆyÆ}Æ…ÆŒÆ�ƘƠƦƮƵƽÆÅÆÉÆÏÆÚÆàÆíÆùÆÿÆÇ ÇÇÇ"Ç&Ç,Ç4Ç;ÇCÇKÇOÇUÇ`ÇeÇ{njǑǔÇ:ȼ, ƾƾԾ۾ã¾è¾î¾½ 0'0'?'X'^'¾häúöËöË -Ì Ì-Ì8Ì<ÌCÌGÌPÌ_ÌaÌaÌuÌẁ̆̆̆̆̎̿``´¦À¦ÀÄÀÈÀÕÀ×ÀäÀæÀòÀòÀÿÀÁÁÁÁÁ2Á;Á;ÁFÁMÁ\ÁgÁmÁrÁtÁ€Á‡Á–Á¡Á§Á¬Á®ÁºÁêÁ Â0Â@ÂBÂRÂbÂrÂrÂw‘˜ŸŸŸŸ¦¼ÂÈÂÎÂÔÂÚÂÞÂÞÂÞ ÃÃ(Ã4Ã:Ã@ÃFÃHÃHÃVÃÀDµÂVÃVÃlÃoÃrÃÅÒÕØÞàêÃÁ�Ãã®Ã®ÃÊÃÖÃÚÃÞÃåÃìÃûÃÄ ÄÄÄ Ä&Ä.Ä4Ä:Ä>Ä>ÄMÄTÄ\ÄbÄhÄjÄjÄvÄÂ(!'n¿n¿w¿…¿‹¿�¿’¿Ã´ª®Š®ŠÈŠ׊׊ÚŠãŠïŠïŠûŠ‹1‹C‹U‹Y‹i‹‰‹›‹¡‹´‹½‹Á‹Ç‹ЋЋñ‹õ‹ŒŒ0ŒBŒHŒ[ŒmŒyŒ{Œ‡Œ�Œ“Œ™Œ¢Œ¢Œ¢Œ¢Œ´ŒÊŒÐŒÜŒñŒøŒ� �!�(�(�(�6�D�N�Q�_�i�l�~�ƒ�ˆ�˜�›� �°�³�·�À�È�Ú�â�ë�ŽŽŽ(Ž/Ž7ŽIŽOŽ^ŽoŽoŽvŽvŽvŽ„Ž’ŽœŽŸŽ­Ž·ŽºŽÌŽÑŽÖŽæŽéŽîŽþŽ����(�0�9�9�D�[�s�w�ƒ�›�£�©�µ�¾�Â�Ê�Ó�Ó�Ó�ì�ô�ú���"�(�.�.�.�5�G�S�[�a�g�g�i�{�Äxî£î£ü£¤¤#¤E¤y¤•¤§¤»¤Á¤ͤÖ¤Þ¤æ¤è¤î¤ô¤¥¥¥¥¥Å,ž¾ž¾¬¾³¾»¾À¾Æ¾Æ8(2–¿–¿Ÿ¿Ÿ¿­¿±¿¸¿»¿À¿Ç83=ƿƿϿϿݿá¿ï¿ò¿÷¿È8>Hþ¿þ¿ÀÀÀÀ À#À(ÀÉ4IR.À.À7À7À:ÀHÀVÀYÀ^ÀÊ &*ÆÍÆÍÔÍàÍË  x'x'�'‰'Ž'Ì  -`'`'i'q'v'ÍØ ®K®KiqËKÓKåKL LL%L6L>LFLILWLƒLƒL˜LšLšL¦L®L²L¿L¿LËLÓL×LäLäLäLM MMM!M9MHMMMSM^McMcMhM€M�M”MšM¥MªMªM¸MÁMÍMÕMÝMåMèMîMóMüMNN(N8N8N=NENMNPNVNVN[N[N[NaNdNkNvN°NÇNÔNÜNäNðNüNO OOOO%O+O2O7O7OEOUOUObObOjOrO{OŠO�O�O–O¡O§O¯OµOÀOÅOÅOÔOßOñO÷OÿOP -PP'P-P5P;P@P@PTPZPePkPmP}PƒPƒP¥PÌPÑPÑPåPëPQQQQ6Q^V^^^€^œ^¤^§^­^³^³^Ä^Í^Ù^á^ä^ë^ñ^ö^__ _:_B_E_L_R_j_r_”_±_¹_¼_Ã_É_É_É_É_É_Î_Î_ä_ê_ö_ü_````,`8`A`M`U`X`_`e`j`|`‹`“`«`³`¶`½`Ã`Û`ã`aa$a'a.a4a4a4aEaNaZabaealarawa‰a˜a¤a¿aÇaÊaÑa×aïaûab:bBbEbLbRbRbRbRbRbWbWbjb…b‹b–b›b›b®bÄbÊbÕb×b×bêb cccc0c9cJcOcacqcqcvcvc‰cŸc¥c³cÂcÇcÇcÚcðcöcdddd.d4dQdidid“d™dždªd³dÂdÂdÇdÇdÝdãdeeeBeHeMeYebeqeqeveveŒe’e¯eÇeÇeñe÷eüeff f f%f%f;fAf^fvfvf f¦f¨f´f½fÈfÈfÈfÈfÍfÛfäfõf÷f gggg&g6g;g_gkglgqg†g£g³g×gçgígígígòg÷g h h]hmhshuhzh‹hšhÌhÔhÚhÜháhèhèhñhii i.i.i3i8iGiPi[i]ifiqiqi’i™iŸi§i²i¸iÈiÎiÖiáiçiçiìiñiøiÿij jj%j%j%j*j*j*jkGkJkJkUkWkikpkvk…k�k›k¡kªk®k®kºkÃkÆkÆkÑkÓkåkìkòkúklll l#l'l'l/l6l9l;lFlJlSlVlVlalcl{l‚l�l˜l›l¡l¦l¦l­l±l±l½lÆlÉlÉlÔlÖlèlïlõlmmm m)m-m-m9mBmEmEmPmRmdmkmqmym„m�m•mŸm¢m¦m¦m®mµm¸mºmÅmÉmÒmÕmÕmàmâmúmn nnn n%n%n7n;n;nGnPnSnSn^n`nrnynn‘nœn§n­n²n²n½nÂnÂnÍnÒnÒnÝnànänënðnõnúnúnooo o$o5o=oAoUo\o`o`omoyo�o‡o—o›o¬o¾oÉoÍoÍoÚoâoêoðoðoðoðoðoòoòoppp p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p0p0pGpOp[p[p|pŠp¢p¤p°p½p½pàpípøpq -qqqq&q&q)q;qYqeqeq–sÎÀ m–s–s³s»s¾sÌsÚsïsøst&t8tCtTtXtjtmtxt�t�t tÑt¬tátõtuu u>uPutu…u‡uŽuÃuÃuÆuËuÎuÎuÕuìuóuvvv!v4v4vHvLvyvyv‘v–v–v¦v®v¾vÈvØvâvòvþvwwww+w5wEwOw_wkwpwpwpw’w wªw¯w¼wÑwÑwÖwàwïwôwúwÿwÿwxxx"x(x-x-x3x9x>x>xMx`xlxyx…x˜x x¦x¯xÆxÚxëxøxýxy(y?yLyTygyoyuy~y‡y‡yŒyŒyŒyŒyŒy˜y˜y˜y¡yºyÏy×yòyzzz&z+z+z+z6zDzIzIzPz^zcz{z‡z™z¥z«zºz¾zÇzÐzízùzÿz{{ {({U{f{s{u{ƒ{ƒ{ˆ{ˆ{�{�{¢{µ{Á{Í{Ó{×{à{å{å{å{å{å{ý{||||||||||||||||5|J|R|m|~|‹|�|¡|­|²|²|²|»|Õ|á|}}}}}}}}}}}.}3}3}3}D}O}T}T}_}q}‰}›}¼}Ü}ç}ø}ý}ý}ý}(~1~B~F~^~n~v~~~³~¼~À~Ø~è~è~è~è~è~ -CLPV[dmrrrr�•³¾ÃÉÎÎáõ€&€.€4€4€9€9€H€\€z€…€Š€�€•€•€¨€¼€â€í€õ€û€û€��� �"�7�?�Z�k�x�z�‰�‹�‹�‹�‹�‹�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�®�½�È�Ê�Ê�Ó�Õ�Õ�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�é�ë�ë�‚ -‚‚‚‚ ‚/‚_‚n‚z‚�‚ª‚­‚·‚Âé‚ ƒ)ƒMƒOƒbƒhƒ«ƒ«ƒ®ƒ¾ƒƃáƒòƒõƒ„„)„A„A„l„o„~„’„³„Ä„à„Ì„ü„…,…_…]…G…8…m…m…m…p…u…x…’… …Î…ð…ð…††-†A†b†s†�†{†«†Ɇü†ú†ä†Õ† -‡ -‡ -‡ ‡‡‡‡)‡J‡V‡­ŠÏœ«Î~�~�”�˜�£�ª�µ�É�É�Ô�å�ì�ù�‘‘‘+‘+‘4‘9‘A‘Q‘_‘n‘y‘Œ‘Œ‘Ÿ‘Ÿ‘µ‘á‘á‘õ‘÷‘÷‘’ ’ ’’’’’,’,’,’0’8’>’C’C’G’O’S’Y’^’^’j’’�’™’¬’±’¹’¹’¾’¾’Å’Ñ’æ’ö’“““!“&“.“4“4“9“@“K“s“~“�“—“Ÿ“¥“·“½““““““““““͓ٓæ“ö“ü“”””$”)”1”6”6”6”>”F”O”W”\”d”i”p”{”£”®”¶”Å”Ï”á”æ”ì”ñ”ñ”ø” -••%•-•5•J•L•W•_•t•t•�•˜•Ÿ•¥•©•­•¼•Í•ã•ï•÷• –––)–4–9–9–Z–t–y–�–�–˜– –µ–º–Å–Í–â–ç–ó– ———2—>—C—O—Z—_—_—_—_—_—_—j—j—j—j—j—j—j—j—j—j—j—j—u—•—²——È—Зã—è—ð—ø—ú—˜˜˜#˜+˜-˜M˜U˜^˜f˜n˜s˜x˜˜Š˜²˜½˜ŘÔ˜Þ˜÷˜ü˜™ ™ ™ ™™™™(™6™H™J™\™n™n™n™y™~™›™ ™ ™©™®™®™®™®™®™®™®™®™®™®™®™®™®™®™®™®™¹™Å™Ñ™ñ™š š,š1š9š@šMšUš^šfšmšršršzš‚šžš¦š©š«š»šÅšÅšÅšÇšÚšëšîšñšùšþšþš› ›››(›A›H›M›e›o›Š›£›«›¸›Ñ›Ø›Ø›Ý›Ý›Ý›Ý›Ý›Ý›Ý›å›ð›û› -œœœœ œ,œ1œ1œ1œ5œ:œ:œJœOœOœOœ[œbœhœxœ‰œ¥œ¸œ¾œÆœÛœâœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœêœìœìœ�� � �$�/�6�R�_�_�_�c�n�Œ�š�”ŸÐø{–Ÿ–Ÿ¬Ÿ·Ÿ¾ŸÉŸÔŸëŸöŸýŸ    * * F ` g p w z † � – ™ ž ´ ¾ РÖ â ÷ þ ¡¡'¡.¡.¡.¡<¡J¡T¡W¡e¡o¡r¡„¡‰¡Ž¡ž¡¡¡¦¡¶¡¹¡½¡Æ¡Ρà¡è¡è¡è¡þ¡¢¢ ¢,¢A¢H¢P¢b¢h¢w¢ˆ¢ˆ¢�¢�¢�¢�¢«¢µ¢¸¢Æ¢ТÓ¢å¢ê¢ï¢ÿ¢£££££'£/£A£I£I£b£j£j£m£x£–£¤£í£Ñ\oÂN¨N¨h¨{¨‚¨‰¨”¨§¨ª¨³¨º¨½¨ͨÛ¨æ¨ñ¨ô¨ -©©+©6©A©W©b©y©…©œ©¤©­©µ©Ý©à©æ©ë©þ©ª ª ª%ª-ª-ª;ªMªZªmªsª{ªŽª”ªœªœªŪʪéªìªìªóª«««)«5«E«e«�«•«�«§«Æ«Ú«Ú«P¬ÒXn¥¥<¥N¥S¥j¥|¥†¥�¥ž¥¦¥µ¥Ë¥Í¥Ö¥ì¥ú¥¦ -¦ ¦¦"¦"¦*¦2¦<¦D¦N¦W¦_¦b¦k¦†¦—¦©¦¬¦±¦Ħܦð¦ø¦ø¦ -§ §§%§=§Q§Y§Y§z§}§‚§•§›§°§Ƨȧݧó§û§û§¨%¨,¨7¨N¨Ó¤¦>s>s_sqs|s…s§s±s¿sÙsæsæsðsðsttt#t-t3t9tzCzCzRzWzWzhzmzmz~zƒzƒz–z¥zªzªz½zÌzÑzÑzózøzøz{ { {A{F{F{h{m{m{Š{±{¶{¶{Ø{Ý{Ý{ú{!|&|&|H|M|M|j|‘|–|–|¸|½|½|Ú|}}}(}-}-}H}M}M}h}m}m}ˆ}�}�}¨}­}­}È}Í}Í}è}í}í}~ ~ ~(~-~-~>~C~C~T~Y~Y~e~p~…~Š~Š~–~¯~´~×~Þ~è~í~þ~(->IQVVZ^eoyyŒ‘‘‘•«´´×ÜÜäø€€(€3€>€I€[€g€p€u€u€u€†€£€®€¸€ÀÈ€Ó€Û€à€à€ë€ó€ü€��/�G�[�`�`�k�~�ˆ�“�´�À�Î�Ó�á�å�ê�ê�ú�‚ ‚‚‚*‚5‚O‚a‚s‚~‚ƒ‚Ž‚–‚›‚¦‚³‚¾‚Ø‚ê‚ü‚ü‚ü‚ü‚ƒƒƒƒ#ƒIƒgƒgƒqƒ…ƒ�ƒ‘ƒ�ƒ¥ƒƒÓƒ݃èƒ „-„>„I„a„q„v„v„�„†„†„Ž„™„ž„ž„¦„±„¶„¶„¾„܄Ƅô„ù„ù„… … …7…<…P…<…h…m…m…z………‡…Œ…Œ…˜…©…»…À…À…Ô…À…ì…ñ…ñ…ù…þ…þ…†††)†.†.†H†X†]†]†w†‡†Œ†Œ†¦†¶†»†»†Õ†å†ê†‡ê†‡‡‡)‡.‡j‡X‡.‡‚‡‡‡Ç±‡‡‡Û‡à‡à‡ï‡ÿ‡ˆˆˆ#ˆ(ˆ(ˆ7ˆEˆJˆrˆ`ˆJˆŠˆ�ˆ·ˆ¥ˆ�ˆψÔˆüˆêˆÔˆ‰‰‰6‰ ‰`‰p‰u‰u‰�‰|‰º‰ʉωωÛ‰à‰à‰ì‰ñ‰ñ‰ŠŠŠŠ,Š<ŠAŠAŠTŠdŠiŠiŠ|ŠŒŠ‘Š‘Š™ŠžŠžŠ¦Š«Š«Š³Š¸Š¸ŠÀŠÅŠÅŠØŠÝŠÝŠðŠõŠC‹1‹ ‹õŠP‹U‹£‹‘‹‹U‹°‹µ‹µ‹Ä‹ß‹ä‹ä‹õ‹ŒŒŒ&Œ4Œ9Œ9ŒAŒFŒFŒNŒSŒSŒ[Œ`Œ`Œ˜Œ†ŒgŒ·ŒÒŒ׌׌�ýŒÞŒ.�I�N�€�n�N�˜���Ï�½���ç�ì�Žì�Ž#Ž@Ž#ŽXŽ]Ž]ŽiނޒޣŽÉŽËŽáŽçŽ��A�ƒ�`���—�—�—�£�¨�¨�»�Æ�Ð�Õ�à�ê�ï�ï� �����/��;�F�K�_�K�k�v�{�{�†�”�™�™�¤�¯�´�´�Å�Ê�Ê�Û�à�à�ú�‘ -‘‘ -‘‘#‘7‘#‘C‘H‘P‘H‘\‘a‘u‘a‘�‘†‘†‘𑆑¦‘¦‘¦‘«‘·‘«‘ʑϑϑۑϑî‘ó‘ó‘ÿ‘ó‘’’’#’’6’;’O’;’[’g’r’}’‚’–’‚’¢’®’¹’Ä’É’Ý’É’é’ú’ÿ’ÿ’“ “ ““““"“'“'“0“5“5“>“C“C“N“S“S“^“c“c“n“s“s“~“ƒ“ƒ“Ž“““““ž“£“£“®“³“Ç“³“Ó“Þ“é“ô“ù“ù“””””””!”&”&”0”5”5”=”B”B”O”T”T”a”f”f”f”f”f”n”s”s”{”€”€”ˆ”�”�”•”š”š”¢”§”»”§”ǔؔݔݔï”ú”• •5•@•Y•E•e•p•{•€•€•’•�•½••Ø•ã•ü•è•–––#–#–5–@–`–e–{–†–Ÿ–‹–«–¶–Á–Æ–Æ–ì–Ø–ø–——3—>—C—^—J—~—j—Š— —Œ—À—¬—Ì—×—Ü—Ü—˜î—˜.˜3˜I˜T˜Y˜t˜`˜”˜€˜ ˜¶˜¢˜Ö˜˜â˜í˜ò˜ò˜™™$™D™I™_™j™o™Š™v™ª™–™¶™Ì™¸™ì™Ø™ø™šššššš+š0š0š0š6š;š;š;šEšGšGšQš^š~š€š€šŠšŠšŠšŠšŠšŒšŒš£šªšµšµššÈšÏšÚšåšðšûš›)›!›A›I›r›j›Š›Š›Š›“›››®›´››Õ›Õ›í›÷› œ%œ%œFœVœkœ}œ�œ�œµœ¼œËœÝœÝœáœæœíœýœ�� �7�>�C�C�G�R�^�l�™�¢�³�Á�ô�žžž/ž;žIžNž\žxž£žÉžÌžÜžÞžÞžâžŸ Ÿ ŸŸŸHŸhŸhŸhŸ–¡Ô,î¾î¾÷¾ý¾¿¿#¿(¿Õ, .¿.¿<¿B¿F¿U¿d¿j¿Ö(æÍæÍïÍùÍ ÎÎÎ2Î×Ô4e.Ï.ÏDÏKÏNÏrÏrÏ�ϢϵÏÈÏÍÏÍÏëÏùÏ Ð Ð'Ð'Ð)Ð)Ð)Ð<Ð>Ð>Ð>ÐEÐXÐkÐkÐkÐ}ЉМвзлÐÂÐ×ÐêÐñÐñÐôÐÑØ 1UÞ -Þ -ø -þ -    # 7 > A C L ] ] ` h ~ � � ’ • œ   ¨ ¶ È Î Ö  Ù0®6ø“ø“”A”I”I”W”j”ƒ”†”¢”¢”¢”ª”¬”¬”´”¶”¶”¾”À”À”ȔȔєהܔܔå”ñ”õ”ú”••• •••!•!•&•2•J•i•l•�• • • •¨•ª•ª•ª•²•´•´•´•¼•¾•¾•¾•ƕȕȕӕӕٕޕޕޕޕå•ð•–––(–(–(–8–8–?–C–I–a–o–‚–Ž–·–º–Á–Ó–Û–ä–ï–ï–ú–———— ——'—/—5—W—c—i—n—n—u—€—€—…———�—�—�—�—ö—ÚXþÐ^µ^µxµµŒµ—µœµ¢µ´µºµÒµØµöµ -¶¶¶=¶=¶M¶b¶d¶g¶s¶{¶ƒ¶‹¶™¶Ÿ¶¥¶±¶±¶³¶Å¶Ë¶Ð¶Ð¶ç¶ç¶···%·*·*·A·J·Y·o·z·ˆ·“·£·°·Â·È·Ò·Þ·ë·í·í·õ·ú·ú·¸¸¸¸¸¸¸!¸!¸'¸,¸,¸3¸8¸8¸?¸D¸D¸O¸T¸T¸_¸d¸d¸o¸t¸t¸¸¸˜¸Ÿ¸¥¸¨¸³¸¶¸Ê¸×¸æ¸í¸ð¸¹¹ -¹¹+¹:¹:¹:¹:¹D¹\¹q¹�¹’¹˜¹©¹¯¹´¹¾¹Ï¹à¹ï¹õ¹ººº*º9º?ºJºPºeºkº|º‡º�º�º�º­ºÀºÌºÔºäºëºñº» »»/»D»R»b»n»€»‹»š»œ»®»¶»»»Â»Æ»Ô»Þ»ä»î»ô»ÿ»¼¼¼!¼+¼P¼P¼V¼]¼�¾Û0¥íþ±þ±²²4²<²D²N²R²Y²_²s²{²€²ƒ²Ž²™²¡²¬²·²¹²Ñ²Ø²ß²ê²õ²÷²³ ³³³$³$³:³[³a³g³x³~³‡³™³Ÿ³Ÿ³§³«³¶³»³Í³Ø³Ü³ê³ì³ð³ÿ³ÿ³ÿ³´´´'´-´›´Ü”Œ­À’À’Î’à’ä’ì’ô’ÿ’ -“““(“-“E“L“S“^“i“k“v“�“ƒ“�“𓥓®“¶“¶“º“ñ“Ýt ¤î î  ¡¡¡%¡=¡G¡G¡_¡i¡„¡š¡¨¡¬¡Ì¡à¡ç¡ê¡¢ ¢¢ ¢1¢1¢8¢?¢H¢M¢R¢Y¢`¢z¢�¢‘¢•¢•¢Ÿ¢µ¢¹¢¹¢Ë¢ß¢ó¢ó¢ú¢£ ££ £'£0£;£B£B£M£k£o£x£¢£¢£¨£¯£¾£Æ£Ô£Û£ß£á£ó£ó£ó£¤ ¤3¤A¤A¤E¤Z¤b¤r¤}¤’¤—¤¥¤´¤¼¤Ê¤Õ¤Ù¤Þ¤æ¤ê¤ù¤û¤ -¥ ¥¥¥,¥3¥9¥M¥U¥c¥j¥n¥~¥‰¥Ž¥¬¥´¥Â¥É¥Í¥Õ¥ã¥ê¥î¥ -¦¦¦#¦#¦#¦,¦7¦G¦i¦q¦|¦‹¦“¦ž¦£¦«¦¶¦Â¦Æ¦Ñ¦Ö¦è¦ð¦û¦û¦û¦û¦ §§5§A§I§Y§i§‡§‹§º§ §Ê§Ê§Ô§Û§ê§ù§¨¨¨¨¨+¨3¨A¨H¨L¨L¨N¨`¨`¨r¨r¨r¨x¨„¨–¨ž¨¶¨â¨ð¨ô¨©© ©+©A©C©J©]©e©s©z©~©€©“©›©©©°©´©´©´©´©Â©Í©Ü©ä©ò©ý©ªªªªª!ª#ª2ª4ªCªEªTª[ªaªuª}ª‹ª’ª–ª¦ª±ª¶ªÔªÜªêªñªõªýª «««2«:«E«K«K«K«T«i«ƒ«“«ž«³«¸«Ã«Ó«õ«ý«¬¬ ¬*¬/¬7¬B¬N¬R¬]¬b¬t¬|¬‡¬‡¬‡¬‡¬›¬«¬À¬Í¬Ñ¬å¬ö¬ ­­­*­?­O­f­­˜­š­¥­­­­­¶­Ó­ä­û­®"®-®:®B®D®O®W®W®W®q®®�®¢®¿®Î®ú®¯¯¯%¯?¯?¯C¯Y¯h¯ƒ¯Ž¯¥¯­¯­¯Ï¯Ï¯â¯ý¯°°;°J°v°„°š°³°Ã°Û°Û°ó°ó°ÿ°±/±8±8±8±D±U±m±v±v±}±†±Œ±˜±þ±ÞLîýž´ž´°´Å´Ö´ç´î´ö´µµ µ%µWµßSžžÁÖÛãëó">DFHUUWsy{}ŠŠŠ�˜ ©±³»ÃËØÞéð 5<GM^bjj~Ž–™ÿà`vÿvÿ‚ÿ™ÿ­ÿµÿ¹ÿÃÿÍÿÕÿØÿÞÿáhF/F/\/g/r/€/‹/‘/¢/¨/¹/¿/Ë/â/â/ô/000)0/0}0â˜Vx  * / 6 @ F Q a i q v � ‹ ‘ œ ¬ ´ Ä Ë Ó Û ã ë ð û    ã�*JÞ×Þ׿×ê×öר ØØ$Ø6ØAØLØsØsØŒØ�Ø�Ø�اخØÁØÊØØØìØÙ Ù*Ùäf)ÑÑ@ÑHÑNÑVÑXÑXÑiÑiÑiÑqÑyыыѯѱѱÑËÑÍÑÍÑØÑÝÑ÷ÑüÑüÑüÑÒÒ Ò"Ò/Ò1Ò>ÒFÒNÒUÒdÒqÒsÒ„Ò‘Ò‘Ò‘ÒšÒ¬Ò¿ÒÅÒÍÒÏÒÜÒÜÒñÒñÒñÒüÒÓÓ#Ó#Ó#Ó1Ó7Ó<ÓDÓOÓaÓlÓqÓqÓxÓ|ÓŠÓŽÓ—ÓžÓ¼ÓÉÓÐÓÙÓõÓúÓúÓúÓúÓÔ ÔÔÔ;Ô;Ô;ÔBÔPÔ_ÔrÔ…Ô‡Ô‡Ô‡ÔšÔšÔ¡Ô¨Ô­Ô³ÔÅÔÏÔêÔÕÕÕ-Õ2ÕVÕ]ÕiÕ‡ÕšÕ¥Õ¬Õ°Õ°Õ°Õ°Õ»ÕÅÕÓÕõÕÖÖ'Ö'Ö5ÖƒÖ–Ö§Ö¾ÖÑÖÖÖÖÖÖÖÞÖéÖûÖ× × × ××J×P×P×P×[×e×q×|×~×~×~׃×�×�×Ù×å >~0~0–0¨0®0º0Å0Ó0ß0ö011#1)1/151H1N1W1]1o1u1€1ˆ1–1£1à1æ“Ôî î   - 2 P V [ a o v … Š – ¨ ¨ Æ Ñ ä ë !"!.!I!a!}!†!•!�!ª!³!¸!É!÷!ü!""/"?"E"P"Y"_"¥"€"µ"ð"Ë"####·#çL™h~Ü~ܜܢܥܮܸÜÐÜàÜéÜïÜóÜ÷ÜùÜÝ!Ý.Ý4Ý8Ý<Ý>ÝBÝFÝFÝiÝmÝsÝsÝzݜݱÝÄÝ×ÝÝÝäÝïÝùÝýÝÞÞ ÞÞÞ)Þ/Þ4Þ;ÞHÞJÞ\Þ^ÞcÞpÞrÞ„Þ„Þ„Þ„Þ„Þ¦Þ±Þ½ÞÔÞÔÞéÞõÞß6ßPßUßlßqßߖߛߡ߲ßÇßÍßÝßêßà àà à-à9à9à9à?àBàEà^àdàxà~à…à�à�à•à¢à¯à¯àµàÃàÚàààãàæàíàôàûàûàá ááá á.áEáKáNáQáXáXáiáná{áˆáˆá�á™á á¦á­á¸áÌáÌáæáëáòáúáââââ5â:âcânâuâ}â–âªâªâÅâÅâßâôâûâã0ãTãVã`ã‚ã‚ã‚ã›ã©ãºãÒãÖã«äèT’*16>XacpprŒ’”–££££§¶¿ÇÐØßåç   , 2 F K X X l s z ƒ ‘ š º À Ä É Î Ñ Û Þ î éL%ÞÿÞÿêÿ!+5=@Fê0 & & > € t H F ” œ ëÕÓ¾#¾#Û#æ#ù#æ#$!$!$1$:$A$E$N$N$V$Z$x$„$�$–$¡$Ã$Ã$Ö$á$ç$î$ó$ó$%%%#%+%8%8%J%O%O%_%d%d%d%w%|%�%•%œ%±%Å%Å%Ê%Ê%Ú%ß%ß%ä%ë%ó%ú%ü%& & && &-&4&7&Y&Y&a&p&{&‚&„&˜&§&¬&±&±&±&Ä&É&Ø&ß&æ&û&'''''2'7'K'R'W'W'c'r'„'“'¦'ª'¹'Ç'Õ'ä'( (( (4(;(B(R(T(b(r(t(‚(�(Ÿ(¦(»(Â(Î(ß(ö(ø()))))0)=)E)G)[)m)t)„)�)±)¸)Ä)â)â)â)ê)õ)ù)** **$*/*I*N*U*`*i*q*v*v*…*’* *«*¶*Ä*Ê*Ð*Ö*ß*æ*õ*+ -++$+;+=+F+Q+S+_+}+ƒ+‰+�+˜+©+Ð+Ù+ã+ð+,,,*,?,?,L,Q,c,i,i,i,i,%-ìxÔî&-&-D-V-\-h---‘-—-¢-²-¾-Ç-Í-Ó-Þ-ì-ù-..".".R.í0-5vv„¤ª°°¶îD v:v:„:Ž:˜:¨:­:³:¿:Á:Ó:Ó:Õ:;ï„{˜6Û6ÛHÛ]ÛgÛpÛrÛyÛ‰Û”Û–Û Û Û¦Û·ÛºÛºÛÛÛæÛèÛÜÜ ÜÜ+Ü~Üð  ^Î^ÎgÎ{΀Îñ ¾Î¾ÎÇÎæÎëÎò4%îÎîÎüÎÏÏÏÏ'Ï-Ïó  6Î6ÎDÎXÎ^Îô †Î†Î”γιÎõÌKz.Ù.ÙBÙWÙfÙjÙxÙ~Ù�Ù�ٜ٧ٲٽÙÄÙÔÙþÙÚ Ú ÚÚÚ3Ú5Ú?Ú`ÚkÚmÚ†ÚŠÚ˜Ú�Ú�Ú¤Ú°Ú¸ÚËÚ5Ûö�½~?~?œ?Ÿ?¥?¹?Á?Ò?ß?å?ê?ê?÷?@@@$@&@E@V@]@i@y@y@‡@š@¥@©@º@º@º@¿@¿@Ë@Ú@í@ó@ø@ AAA,A2A4ACAPAVA\AaAgAmAtA€A‡A‰AŽA–A˜A�A©A«A°A¸AºA¿AÇAÉAÎAÖAØAÝAçAéAîAøAøAøABBB B%B+B6B;BCB\BbBmBqBwB‚B›B¦B±B·BÄBÉBÎBÎBãBëBóBCC'C-CÙ>ÙXÙbÙfÙjÙoÙqÙ�٩٩ٳÙ|ªÅVÝV݂݀݉Ý�ݕݗÝ�ݣݪݷÝÄÝ×ÝåÝôÝùÝûÝÞ +ÞÞ-Þ=Þ[ÞmÞ8fßfßoßtß߈ß�ߑߖßd`µVÓVÓtÓxÓ…Ó‡Ó”Ó–Ó¢Ó¢Ó¯Ó±Ó¾ÓÀÓÌÓÌÓâÓëÓëÓöÓýÓ ÔÔÔ"Ô$Ô0Ô7ÔFÔQÔWÔ\Ô^ÔjÔšÔÀÔÐÔàÔðÔòÔÕÕ"Õ"Õ'ÕAÕHÕOÕOÕOÕOÕVÕlÕxÕ~Õ„ÕŠÕŽÕŽÕŽÕ»ÕÂÕØÕäÕêÕðÕöÕøÕøÕÖD¶ÃÖÖÖ Ö"Ö/Ö5ÖBÖEÖHÖNÖPÖZÖ,cj@‡@‡N‡X‡c‡n‡t‡z‡ jn66DY_ +P ©6©6·6Æ6Þ6ä6ö6ö67 +7777 œ;^îÊîÊöÊúÊË*Ë=ËZË{˄˕˼ËÓËÓËõËÌ ÌÌ!ÌSÌ`ÌdÌlÌlÌÌ�Ì“Ì—Ì Œ×ö¦¦ÆÎÒàæìì/CQhnz�¬µÅÇÎÎÔÔä |1‘#‘#§#°#»#Ô#Ô#×#æ#ì#õ#÷#ý#$$$$ $"$"$,$0 '�…�…ž…¾…Ä…Ê…Ê…Ð…„•²°œ°œÄœËœÒœÖœúœ ��%�J�U�`�b�m�’���¨�ª�±�º�¼�Ç�Î�ø�("î¿î¿ý¿À(À(À.À –¿–¿¥¿¸¿¾¿ƒ¯¯%¯,¯C¯O¯Z¯l¯}¯n¯l¯�¯¸¯Ä¯Ë¯Ñ¯Ý¯ç¯î¯õ¯ù¯û¯° °°°%°)°)°3°8°C°U°f°W°U°†°§°³°º°À°Ì°Ö°Ý°ä°è°ê°ð°ü°± ±±±±%±3±C±U±f±W±U±†±§±³±º±À±Ì±Ö±Ý±ä±è±ê±ð±ü±² ²²²²"²2²D²U²F²D²u²|²‚²Ž²˜²Ÿ²¦²ª²¬²²²¾²È²Ï²Ö²Ú²Ú²ä²ò²û²³ ³$³$³'³0³¦³ðî^î^ _©„_%_A_L_^_e_v_~_†_‰_—_Ã_Ã_Ø_Ú_Ú_æ_î_ò_ÿ_ÿ_ ```$`$`$`@`K`\`\`a`y`ˆ`�`“`ž`£`£`¨`À`Ï`Ô`Ú`å`ê`ê`ø`a aaa%a(a.a3ah>hJhRhUh[hahfhfhŠh’hšhªh°h¶h¶hÇhåhåhêhêhöhþhiiiii3i;iKiQiXivi…i�i¥i­i°i·i½iÕiÝiõiýijj j j j,jb>bPbPbYbfb|bœb¶b½bÇbÚbÞbÞbÞbåbëbc cc.c0c6cPcWcacoczczc”cHš¨°}°}Ç}Ý}í}ô} ~&~8~<~~LíüÞsÞsòsþstt t"t5tHtSt^tft`¶ÊŽ{Ž{¤{Æ{Ó{Ý{ì{| ||"|?|A|A|r|`|A|‘|›|4IRÞÒÞÒçÒçÒêÒøÒÓ ÓÓä;.×.×V×Y×w׎ןן׺×À×Å×Å×à׿×ë×ë×ô×ØØØØ ØcØmØtØzØ|Ø|Ø�ؕؕؕإؚضØÅØרÜØÜØÜØãØêØñØÙ Ù)Ù)Ù;ÙÐL¼h¡h¡‚¡�¡˜¡¡¡©¡¬¡³¡·¡À¡Ñ¡Õ¡Û¡é¡¢¢"¢'¢3¢8¢?¢K¢P¢S¢]¢U¢m¢v¢‡¢…¢}¢•¢ž¢¤¢¤¢²¢µ¢É¢Ò¢Û¢â¢æ¢ë¢££#£1£M£Y£Y£q£‚£‚£‰£¥£±£¹£Ì£Ó£ç£ð£÷£û£¤ ¤¤/¤\¤c¤g¤i¤t¤€¤„¤™¤›¤¬¤¶¤Á¤Ë¤Ú¤é¤¥¥¥¥¥—¥Xs…nÍn͋ͬ͟ͶÍÍÍêÍÎÎÎ%Î+Î.Î:ÎŒ ``p‘‘ŸŸŸŸ¨¨¯ÉÚââííû € €€ € €7€7€=€c€ (kq€‡€‡Ž‡š‡ª‡±‡·‡ @UaÊÊÊÊ#ÊBÊOÊOÊRÊTÊZÊ!$/4†À†À“À¡À¦À¬À"$).^À^ÀkÀyÀ~À„À#$#(.À.À=ÀLÀQÀWÀ$8îx™™¥µËÓÝõú + ( 2 J O _ o … � — ¯ » Ã Í Ý â ø   * 4 > H R \ f p z � š ¤ ® ¸ Â Ì Ö à ö ! +! !*!4!>!H!R!\!f!p!z!„!Ž!˜!¢!¬!¶!À!Ê!Ô!Þ!è!ò!ü!"""$"."8"B"L"\"%¨D°˜°˜Æ˜Í˜Ô˜â˜ó˜™™™™$™/™9™D™[™^™`™r™x™ˆ™’™œ™£™®™Ã™Ë™Ë™á™á™á™õ™&Ð1–ò–ò´ò»òÂòÍòÕòîòîòóóó&ó*ó5ó]ó<óióó�ó£ó§ó¬ó¾óæóýóô +ôôô:ôPôTôTôdô¡ô€ô­ôÊôÊôéôôôúôõ!õ&õ8õ`õwõ|õ„õˆõŠõ±õÇõËõçõööö ö%ö6öLöZönösöŒö�ö¡ö³ö³ö³ö³ö¸öÔö÷óö ÷=÷H÷N÷d÷u÷z÷–÷¾÷Æ÷Ë÷Ï÷Ô÷å÷÷÷øøø4øEøIøIø[øƒøšøŸø§ø«ø­øÔøêøîøûøûøûøûøùùù%ù8ùOùOùkù{ù‰ù‰ùŸù¯ù½ùÔùçùìùòùúúú,ú<úCúQúoúgú”ú½ú½ú½úÊúûûûû$ûCûZûJûfû|ûŠû¢û¸û¼ûÌûëûüü#ü@ü_üjüpü†ü—üœü²üÈüÌüèüýýý!ý&ý7ýMý[ýoýtý�ýžý¢ý´ý´ý´ý´ý¹ýÕýôý#þþ/þLþWþ]þsþ„þ‰þ¥þÍþÕþÚþÞþãþôþÿÿ(ÿ*ÿCÿTÿXÿXÿwÿ�ÿ£ÿ§ÿ´ÿ´ÿ´ÿÇÿÍÿ×ÿÞÿñÿ$4BBXh}v‘¤©¯ÅÔÍéù$$@@Mmmm�'$5:®À®À¼ÀËÀÐÀÖÀ(¨Ekø™ø™ššš*š;šMšOšVš\šlšwš�šŒš£š¦š¨šºšÁšÑšÛšåšìš÷š ›››)›)›)›>›)(&,I0I0W0^0h0n0t0*0_gžÌžÌ´ÌÇÌÖÌÜÌßÌçÌ+ �ܾ¾àèîû  $ $ $ 1 3 > H O [ f l v } Ž Ž ™ £ £ µ » Ë Ñ Ö Ý Ý þ   & , / 5 5 7 = C E E E V ` e e z „ „ ˜ ¡ § ­ à È Ï â æ æ î ô ú ! !!!-!-!R!V!\!b!q!„!Š!Ž!”!š! ! !¢!¦!¬!²!¸!½!½!½!½!è!ù!ù!""!")">"^"^"d"g"k"q"q"ƒ"”"©"½"Å"Ö"Ú"ë"ï"õ"#####%#1#O#U#`#ƒ#Ž#”#š# #©#¯#Ä#Ò#Ú#Þ#ï#ó#ù#$$$'$)$5$S$Y$_$e$n$t$‘$„$«$´$º$º$Ï$Ô$Ô$Û$â$ô$ù$ù$ù$%%/%1%K%Q%Y%]%d%‡%�%“%Ÿ%¶%½%Ã%Î%Ó%Ó%Ú%Þ%å%ó%õ%ý%& +&&&'&,&2&7&?&D&S&n&~&‹&š&¶&¸&Ô&Ô&Û&ð&õ&þ& '''''"'&'-';'='E'I'M'W'c'j'n'v'~'†'•'£'¨'´'´'¼'¼'ß'ß'í'ó'ø'ü'((((( ( (,(2(8(?(U(W(W(W(b(b(b(g(�),4+t®Ä®ÄÈÄÌÄäÄìÄôÄþÄÅ ÅÅ#Å+Å0Å3Å>ÅIÅQÅ\ÅgÅiÅņÅ�ŘţťŰŻŽÅÉÅÒÅÒÅèÅòÅ ÆÆÆ&Æ,Æ5ÆGÆMÆMÆUÆYÆdÆiÆ{ƆƊƘƚƞƭƭƭƾƾÆÃÆÕÆÛÆIÇ-Ô@–à–à¬à³à¶àÚàÚà÷à +áá0á5á5áSáaátá‡á�á�á‘á‘á‘á¤á¦á¦á¦á­áÀáÓáÓáÓáæáñáââ â#â*â?âRâYâYâ\â�â.LAP%%% %,%G%L%l%n%‰%¤%¤%¬%³%Ú%/P~Žˆˆˆ#ˆ1ˆCˆNˆ\ˆiˆwˆ‰ˆ”ˆ¢ˆ¨ˆ®ˆ04 +Q6Q6_6k6|6Ž6—6¡6§61|¼WNNpw†‘··ÀÂÂÉð÷÷*55AHX^|‡‰¢¨³ÃÕÞéîôû %3<<CRiix~’™ ¥°¶¾äíôù 38@L^^u|„”¦¬µµÄÊÞç÷  ! 1 D L ` � ˜ œ ¨ ¿ Û í ó þ  + + +* +/ +8 +8 +J +N +Z +q +� +Ÿ +¥ +° +¼ Ì Ü -øœ C;;;";.;>;V;\;j;{;ƒ;Š; ;Æ;à;í;ú; -<<<#<E<L<R<`<h<~<‰<�<•<¸<ù(Kæ1æ12 22&282>2I2`2o2z2~2‰2•2 2¬2Ã2Ú2í233)3)3;3A3R3X3h3h3€3€3¥3¥3ª3ª3°3¼3É3Õ3ê3444-494P4h4‰4‰4’4—4—4—4—4§4°4¸4½4Ë4Ù4é4î4î455 5 55 52585D5T5_5i5m5v5�5’5¢5¯5¿5Ï5Ö5Ü5è5ð5û5666 6,676=6M6]6]6Š6¬6¸6À6Ë6Ò6Ý6ß6ê6ê6ú6ÿ6ÿ6 77&7,7:7G7T7^7b7k7„7‡7—7ž7£7£7·7·7¼7À7Ð7Ù7ë7ñ7ó7ó788 88$808@8@8@8E8]8]8l8o8ƒ8¡8¬8Õ8ç8ò899 99&969N9U9Y9_9g9r9u:úD€¾<¾<Ú<á<ù<==&=&=+=6=B=M=[=k={=‚=‰=ž=³=³=Ç=ß=ì=û=>>*>8>F>M>T>i>~>~>’>Ÿ>°>À>Æ>×>×>Ý>ë>ü> ??{?û„yÖ& & H S Z b e e u € € ƒ Š ‘ ˜ ž ¤ « ±   Ä Í Ù ß   $))06GMS^oox}‡Ž•�£¥³ÊÍÜèõõõõû $EVjq{ƒŠŠ“š¦¶ÁÁÁÕéùü·üxÔnæóæóôôô)ôOôOôXôZôZôaôˆô�ô�ôžô­ôÂôÍôÍôÙôàôðôöôõ õ!õ:õ@õKõ[õmõvõ�õ†õŒõ“õ¸õ½õËõÔõÔõÛõêõöööö*ö1ö8ö=öHöNöVö|ö…öŒö‘öœö¨ö·öËöÐöØöäööööö ÷÷÷,÷>÷D÷M÷M÷\÷b÷v÷÷�÷ž÷°÷¹÷É÷Ü÷ä÷ø÷ø0ø4ø@øWøsø…ø‹ø–ø¢ø²øÂøÇøÐøÐøâøæøòø ù%ù7ù=ùHùTùdùtù†ùŒùŒù‘ù“ù“ù˜ù˜ù§ù­ù³ù³ù·ù0üý¸iÓ®ä®äÌä×äâäåå -åå"å(å9åHåWådådåjåoåtå‡åšå¥å©å»åÌåÔåÛåöåææææ+ææ<æ3æFæHædæPælæzæzæ|æ˜æ˜æŸæ¥æ®æµæ¸æÏæÚæîæáæöæüæçççççç%ç%ç0çEçNçNçNçNçjç�ç‡çŒçŒç¡ç§ç¬ç¬ç¸çÕçóçøçýçýç è&è5èDèLèQèWè\è\ècèjè�èªè¬èÉèÞèÞèäèäèñèúèúè'é2é7éDéOéWé_éoé†é†é–é–é¨é®éÖéßéßéáéèéíéíéúéê êêê'ê4êFêQê_êhêmê”ê�ê¨ê­ê´ê¼êÏêäêéêðêýêëë+ë2ë8ëAëAëdëkëpë~ëŽëœëœë¢ë©ë²ë²ëÅë×ëÚëÚëëëóëûëì$ì+ì8ì:ìAìUìdìdìdì‹ì‹ì‹ì˜ì˜ì­ì¸ìÊì×ìâìðìûì -íí+í>í@íOídífítí‰í‰í�í˜í˜í¥í«í½í½íÊíÍíØíêíñíüíî îîî î5î7îQîfîfîfîhîoîvî‡î•î§î§î­î´î½îÂîãîìîìîòîûîûîïï'ï*ï0ï9ïAïLï^ïdïoïoï|ïï…ïŽï–ï¡ï³ï¹ïÄïÄïÑïÔïÚïãïåïðð/ð5ð@ðRðXð`ð`ð`ð`ðkðæóþÈB°FFhszƒ“¥¬²¸½âïòû ;NRXov„Š– ¥¬ÅÏØèêñöþ+7Qpw��–œ¢¨¾ßóÿ!0=LYiw’Ÿª¿âô &+2ITahhv…‡•¤¶¶¾áì ÿT·&&Q[ny‹™ ¯¶¾ÔÜï 0@IOT[bhny„‡Ž¨°Êßìï÷û '/F_cls…�”˜¡£µÌÚàäæóóóõ   $ ø×¾¾àèîû$$$13>HO[flv}ŽŽ™££µ»ËÑÖÝÝþ&,/557=CEEEV`eez„„˜¡§­ÃÈÏâææîôú --RV]cr…‹�–œ¢¢¤¨¯µ»ÀÀÀÀëüü $,Aaagjntt†—¬ÀÈÙÝîòø&(4RYd‡’˜ž¤­´É×ßãôøþ ,.:X^djszбºÀÀÕÚÚáèúÿÿÿ57QW_cj�“™¥¼ÃÉÕÚÚáåìúü ".39>FKZu…’¡½¿ÛÛâ÷ü##*.5CEMQU_krv~†Ž�©®ººÃÃææôúÿ39?\^^^iiin‘—\ïV.V.l.~.„.�.�.©.À.À.Ò.Ø.ã.ó.þ. //E/@åñÈÈÑÜçòý)+;0+3H(H(Q(w(ˆ(Ž(Ž(–(T¥¶bÎbÎ|Î�ΑΛΨνοÎÑÎÛÎðÎðÎ÷ÎúÎNÏD³³³/³9³@³L³e³n³r³„³‹³ª³H€Ž€%€%—%­%½%Ä%Û%ö%& &O&´»äp p ‚ … � › ¬ · Â Ô ì ñ  -,>V[dkxŒ“•˜�Ÿ¸ÄDò@@Ydt½ÄØßçïø -!(G_hh�ÇÐò )S_�ƒŠ‘‘·÷7w·÷77FSXXgtvv~~~�¦¿ØÚÚááïòÿ 1lsss{˜¦ÄÍÖò666Sa}›››¦©ÖØïõ -/<<`bizƒ…“•£¥³³ÓÓÓÓàó'4MUYaes�ƒ‹�“›©··ÑÜò$;FPWp|ƒœœ®³µ»ÌÝìó  -/===aa~…Œ�›ž¬°¾ÂÐÔÔíôù 5UhwyˆŠ™££±ºÐ×ü*Z_mo}† ¢¤«¼ÅÇÕ×åçõõ444?[€™žžžÀÅÅÅåêêê  !!((+0OeЦº¿¿Úçéø"CEEH†††¥¥¥ÆËËËíòòò    6 ; ; V d f u ~ ˜ š š Ÿ š À   Š     8 8 b z ’ � ³ Ã Ø ð !! !1!K!b!i!{% L�žP&P&i&k&r&ˆ&˜&ž&µ&Í&Ð&â&*' -$6;¶¶ºÒäþ $<Aþþ  'A \ No newline at end of file +î +ô +ô +ù +û +û +       ˜ 2�Ää^Ö^Özֆ֊֎ֶּ֕֜֫ÖÁÖÃÖÏÖÖÖÞÖäÖêÖîÖîÖýÖ× ×××××&×38 �/�/�/•/¡/¬/½/Ç/Î/Ô/4@}‰NËNË\ËgËnË�˚˚Ë�ËŸË¥Ë5ðh ŽäŽä´äÇäÏäÖäÝäãäåäìäóäöäöäååå&åBåjårå{åƒåˆå™å¯å¿åÑåÖåðåæ æ ææ=æRænæ–æžæ§æ¯æ´æÅæ׿çæùæûæç-ç1ç1çMçuç}ç†çŽç“ç¤çºçÊçÜçáçûçèè*è*è*èBè/èbèOèoè{è�è™è±è¶èËèçèéé é(é-é>éPé`érétéŽé¦éªéªéÆéîéöéÿéê êê3êCêUêZêtêŒê�ê£ê£ê£ê¨êÈêèêôêúêë*ë*ë*ë6ë<ëGëRëdëtë‹ë¢ë¹ëÐëÐëäëììì!ì1ì?ì?ìHìSìaì|ì‹ì’ì¢ì¤ìªìÁìÐìÉìæì÷ìíí+í6D}о¾Îâëñ +7\Ob † †À†Ï†Ø†á†å†é†ò†÷†ü†ü† ‡‡‡0‡3‡?‡80ý>ß>ßGßLßUß\ß^ßcß9Do|ffvŠ“™««¯²º:°ÄìvrvrŒr“r¤r©r¾r«rÊrÐrÐrÜrôrársssss-ss9sd(=Ð…Ð…Ü…ð…󅆆††'†/†2†8†?$q¶¨E¨EÌEÏEÓEàEéEôEFFF:F:FFFHFHFTFYFYFeFjFjFvF{F{F‡FŒFŒF˜F�F�F©F®F®FºF¿F¿F¿FÂFÂFÛFéFýF G GGGG!G&G&G,G8G8GCGOG\GqGyGGG�G�G™GœGH@ì xÖ†Ö†ó†û†þ† ‡‡/‡8‡P‡f‡x‡ƒ‡”‡˜‡ª‡­‡¸‡Á‡͇à‡ˆˆì‡!ˆ5ˆFˆRˆ`ˆ~ˆ�ˆ´ˆňLjèˆΈ‰‰‰ ‰‰‰‰,‰3‰@‰E‰T‰a‰t‰t‰ˆ‰Œ‰¹‰¹‰щÖ‰Ö‰æ‰î‰þ‰ŠŠ"Š2Š>ŠCŠCŠSŠ[ŠkŠuŠ…Š�ŠŸŠ«Š°Š°Š°ŠÒŠàŠêŠïŠüŠ‹‹‹ ‹/‹4‹:‹?‹?‹D‹N‹]‹b‹h‹m‹m‹s‹y‹~‹~‹�‹ ‹¬‹¹‹Å‹Ø‹à‹æ‹ï‹ŒŒ+Œ8Œ=ŒUŒhŒŒŒŒ”Œ§Œ¯ŒµŒ¾ŒÇŒÇŒÌŒÌŒÌŒÌŒÌŒØŒØŒØŒáŒúŒ��2�C�P�R�f�k�k�k�v�„�‰�‰���ž�£�»�Ç�Ù�å�ë�ú�þ�ŽŽ-Ž9Ž?ŽEŽXŽ`Žhޕަ޳޵ŽÃŽÃŽÈŽÈŽÏŽÝŽâŽõŽ� ��� �%�%�%�%�%�=�B�B�B�B�B�S�S�S�S�S�S�S�S�S�S�\�u�Š�’�­�¾�Ë�Í�á�í�ò�ò�ò�û��!�&�H�T�T�Y�Y�Y�Y�Y�Y�Y�Y�n�s�s�s�„���”�”�Ÿ�±�É�Û�ü�‘'‘8‘=‘=‘=‘F‘h‘q‘‚‘†‘ž‘®‘¶‘¾‘É‘ó‘ü‘’’(’(’(’(’(’J’ƒ’Œ’�’–’›’¤’­’²’²’²’²’Á’Õ’ó’þ’“ “““!“5“[“f“n“t“t“y“y“ˆ“œ“º“œʓГÕ“Õ“è“ü“"”-”5”;”;”@”@”@”I”b”w””𔫔¸”º”ɔ˔˔˔˔˔ߔߔߔߔߔߔߔߔߔߔߔߔߔߔߔߔî”ý”• +• +••••)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•)•+•+•B•J•V•V•Z•_•o•Š•Ÿ•®•º•Еê•í•÷•–)–I–i–�–�–¢–Ж¨–ë–ë–î–þ–—!—2—5—O—]—i—�—�—¬—¯—¾—Ò—ó—˜ ˜ ˜<˜N˜l˜Ÿ˜�˜’˜‡˜x˜­˜­˜­˜°˜µ˜¸˜Ò˜à˜™0™0™[™^™m™�™¢™³™Ï™»™ë™ë™ š<š:š/š$ššJšJšJšMšRšRšYšišŠš–ší�A´«Ô¾£¾£Ô£Ø£ã£ê£õ£ ¤ ¤¤%¤,¤9¤E¤R¤Z¤k¤k¤t¤y¤�¤‘¤Ÿ¤®¤¹¤̤̤ߤߤõ¤!¥!¥5¥7¥7¥A¥I¥I¥S¥[¥[¥[¥l¥l¥l¥p¥x¥~¥ƒ¥ƒ¥‡¥�¥“¥™¥ž¥ž¥ª¥¿¥Ï¥Ù¥ì¥ñ¥ù¥ù¥þ¥þ¥¦¦&¦6¦@¦H¦N¦a¦f¦n¦t¦t¦y¦€¦‹¦³¦¾¦ͦצߦå¦÷¦ý¦§§§§§§§§§ §§&§6§<§D§W§\§d§i§q§v§v§v§~§†§�§—§œ§¤§©§°§»§ã§î§ö§¨¨!¨&¨,¨1¨1¨8¨J¨R¨e¨m¨u¨ЍŒ¨—¨Ÿ¨´¨´¨¼¨Шبߨå¨é¨í¨ü¨© ©#©/©7©L©X©]©i©t©y©y©y©š©´©¹©Á©ЩØ©à©õ©ú©ª ª"ª'ª'ª3ªIªUª]ªrª~ªƒª�ªšªŸªŸªŸªŸªŸªŸªªªªªªªªªªªªªªªªªªªªªªªªªµªÕªòª«««#«(«0«8«:«B«U«[«c«k«m«�«•«ž«¦«®«³«¸«¿«Ê«ò«ý«¬¬¬7¬<¬D¬I¬I¬I¬R¬[¬^¬h¬v¬ˆ¬Ьœ¬®¬®¬®¬¹¬¾¬Û¬à¬à¬é¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬î¬ù¬­­1­D­L­l­q­y­€­�­•­ž­¦­­­²­²­º­­Þ­æ­é­ë­û­®®®®®+®.®1®9®>®>®G®L®T®[®h®�®ˆ®�®¥®¯®Ê®ã®ë®ø®¯¯¯¯¯¯¯¯¯¯%¯0¯;¯J¯O¯O¯W¯_¯l¯q¯q¯q¯u¯z¯z¯Н�¯�¯�¯›¯¢¯¨¯¸¯ɯ坸¯þ¯°°"°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°,°,°G°Q°_°_°d°o°v°’°Ÿ°Ÿ°Ÿ°£°®°̰Ú°Ô²Bü|Ö²Ö²ì²÷²þ² ³³+³6³=³M³`³j³j³†³ ³§³°³·³º³ƳϳÖ³Ù³Þ³ô³þ³´´"´7´>´F´R´g´n´n´n´|´Š´”´—´¥´¯´²´Ä´É´δÞ´á´æ´ö´ù´ý´µµ µ(µ(µ(µ>µHµZµ`µlµ�µˆµ�µ¢µ¨µ·µȵȵϵϵϵݵëµõµøµ¶¶¶%¶*¶/¶?¶B¶G¶W¶Z¶^¶g¶o¶�¶‰¶‰¶•¶¢¶ª¶ª¶­¶¸¶Ö¶ä¶-·ChoÅŽ»Ž»¨»»»»É»Ô»ç»ê»ó»ú»ý» ¼¼&¼1¼4¼J¼V¼k¼v¼�¼Œ¼—¼¢¼¹¼żܼä¼í¼õ¼½½ ½&½+½>½D½L½_½e½m½m½{½�½š½­½³½»½νÔ½ܽܽ¾ +¾)¾,¾,¾3¾@¾D¾O¾i¾u¾…¾¥¾Á¾Õ¾ݾ羿¿¿�¿D &*–*–* *¨*­*EÉÇþ6þ67&797&7S7a7a7q7z7�7…7Ž7Ž7–7š7¸7Ä7Ð7Ö7á7888!8'8.83838F8Q8\8c8k8x8x8Š8�8�8Ÿ8¤8¤8¤8·8¼8Ï8Õ8Ü8ñ899 +9 +99 9 9$9+939:9<9D9K9K9Z9`9m9t9w9™9™9¡9°9»9Â9Ä9Ø9ç9ì9ñ9ñ9ñ9: :: :&:;:O:O:T:T:\:r:w:‹:’:—:—:£:²:Ä:Ó:æ:ê:ù:;;$;A;L;Q;`;t;{;‚;’;”;¢;²;´;Â;Ï;ß;æ;û;<< <6<8<D<O<Q<Q<\<p<}<…<‡<›<­<´<Ä<Ð<ñ<ø<="="="=*=5=9=A=E=M=T=d=o=‰=Ž=•= =©=±=¶=¶=Å=Ò=à=ë=ö=> +>>> >%>4>A>I>U>c>z>|>…>�>’>ž>¼>Â>È>Î>×>è>??!?.?F?M?Y?h?}?}?Š?�?¡?§?§?§?§?c@FD�šžpžp²p¾pÔpÀpàpâpôpqqGìˆÿN=N=p=z=­=¼=Ò=ö=û=ÿ=>> >&>/>4>I>Z>y>�>ƒ>¢>ª>¹>À>Ì>Ñ>Ø>à>æ>è>? ? ? ?+?1?1?9?B?Q?p?w?y?˜?Ÿ?Ÿ?Ÿ?³?Ç?Ë?Ù?ì?ä?@ @@@#@)@+@G@L@b@N@n@t@t@�@•@®@š@º@À@Å@á@æ@ü@è@AAAA#A%AAAFA\AHAhAnAnAnAvAAA‰A‰A¡AÑAåAéA÷A +BB"B"B4BHüE€ÁÁ5ÁQÁVÁwÁ•Á¤ÁÂÁÖÁîÁõÁúÁÂ9ÂHÂeÂvÂ�‘‘•šŸ©¬¶¼ÂÙÂÜÂÜÂÜÂáÂçÂÃÃÃ&Ã:ÃBÃKÃgÃrÃ~ÇÛÛêïïýÃIl¬ÃÎ'Î'Ü'ö'ã'((!(6(#(U(B(a(o(w(‚(„(�(š(š(¹(¿(JP‡—nÖnÖ‚Ö�ÖžÖªÖ°ÖÚÖðÖÜÖ×üÖ ×'×KŒg†þÔþÔ0ÕSÕSÕfÕjÕ‰Õ�Õ¢Õ¢Õ¯Õ·Õ¿ÕÔÕàÕñÕöÕÖÖ Ö"Ö"Ö"Ö;ÖSÖSÖmÖLP�­&¼&¼O¼Q¼_¼e¼ƒ¼’¼¡¼°¼¾¼ɼ̼ܼMì8––ÀÃÆÌÑèÿ(Nux‘¨ºÇÚíòú  'Oioˆ¡£½ÃÜõý$bw‰N$”™II1II;ICIOLu„NÇNÇ`ÇudžǗǞǦǶǾÇÏÇÕÇÈPTHY‚‚"‚$‚-‚6‚D‚I‚R‚U‚Z‚h‚r‚u‚‚Q¨!Gh€h€x€�€”€¡€­€¹€Å€Ñ€è€è€÷€� ���2�E�J�\�k�w�‰�‰�’�²�²�´�Ç�É�ã�ï�ò� ‚Rxÿ™�g�g©g´gÄg hh(h/h7h?hHhPhXhZhbhjhqhxh—h¯h¸h¸híhi iBi\iyi£i¯iÑiÓiÚiáiáijjDj]j„j�jÄjÝjkkDk]k„k„k“k k¥k¥k´kÁkÆkÆkÍkØkêkll5l7l7l7l>l>lKlPlPlPlalol‚l—lÑlØlØlØlàlýl m)m2m;mHmVmpmŒmŒmŒmŸm­mÉmçmçmçmòmõm"n$n;nAnRn[n]njnlnyn{nˆnˆn¬n®nµnÆnÏnÑnßnánïnñnÿnÿn o o o o,o?oRoso€o™o¡o¥o­o±o¿oÍoÏo×oÛoßoçoõoppp(p>pPppp‡p’pœp£p¼pÈpÏpèpèpúpÿpqqq)q8q?qPqYq[qiqkqyq{q‰q‰q‰q­q­qÊqÑqØqÛqçqêqøqüq +rrr r r9r@rErSrdrkr�r¡r´rÃrÅrÔrÖrårïrïrýrss#sHsMsvs¦s«s¹s»sÉsÒsìsîsðs÷sttt!t#t1t3tAtAtatatatatat€t€t€t‹t§tÌtåtêtêtêt uuuu1u6u6u6uUuZuZuaucucukumumututuwu|u›u±uÖuòuv v v&v3v5vDvMvgvivivnviv�v‘v‘v™v”vÒvÒvÒvñvñvñvwwww9w>w>w>w^wcwcwcw‚w‡w‡w¢w°w²wÁwÊwäwæwæwëwæw xxxxxOxOxOxZxZx„x„x®xÆxÞxéxÿxy$y’E’O’Y’Y’l’q’q’q’u’‹’”’”’·’¼’¼’Ä’Ø’á’û’“““)“;“G“P“U“U“U“f“ƒ“Ž“˜“£“¨“³“»“À“À“˓ӓܓç“÷“”'”;”@”@”K”^”h”s””” ”®”³”Á”Ŕʔʔڔå”í”ò”ý” +••/•A•S•^•c•n•v•{•†•“•ž•¸•Ê•Ü•Ü•Ü•Ü•á•æ•æ•ò•––)–+–G–G–Q–e–o–q–}–…–¢–³–½–È–ë–ü– ——)—A—Q—V—V—a—f—f—n—y—~—~—†—‘—–—–—ž—¼—¦—ԗٗٗá—ÿ—é—˜˜0˜˜H˜M˜M˜Z˜_˜_˜g˜l˜l˜x˜‰˜›˜ ˜ ˜´˜ ˜̘јјÙ˜Þ˜Þ˜ñ˜ö˜ö˜ ™™™(™8™=™=™W™g™l™l™†™–™›™›™µ™Å™Ê™á™Ê™ù™þ™þ™ ššJš8š&ššbšgš£š‘ššgš»šÀšÀšÏšßšäšäšóš››››%›*›R›@›*›j›o›—›…›o›¯›´›Ü›Ê›´›ô›ù›ù›œœ@œPœUœUœpœ\œšœªœ¯œ¯œ»œÀœÀœÌœÑœÑœäœôœùœùœ ��!�!�4�D�I�I�\�l�q�q�y�~�~�†�‹�‹�“�˜�˜� �¥�¥�¸�½�½�Ð�Õ�#žžÿ�í�Õ�0ž5žƒžqž_žMž5ž�ž•ž•ž¤ž¿žÄžÄžÕžðžõžõžŸŸŸŸ!Ÿ&Ÿ&Ÿ.Ÿ3Ÿ3Ÿ;Ÿ@Ÿ@ŸxŸfŸTŸGŸ—Ÿ²Ÿ·Ÿ·ŸïŸÝŸËŸ¾Ÿ ) . ` N F . x } ¯ � • } Ç Ì æ РÌ þ ¡ ¡ +¡¡8¡=¡=¡I¡b¡r¡ƒ¡ƒ¡©¡«¡Á¡Ç¡Ç¡ã¡ð¡!¢c¢R¢@¢o¢w¢w¢w¢ƒ¢ˆ¢ˆ¢›¢¦¢°¢µ¢À¢Ê¢Ï¢Ï¢é¢î¢î¢ö¢û¢£û¢£&£+£?£+£K£V£[£[£f£t£y£y£„£�£”£”£¥£ª£ª£»£À£À£Ú£å£ê£ò£ê£þ£¤¤¤#¤(¤0¤(¤<¤A¤U¤A¤a¤f¤f¤z¤f¤†¤†¤†¤‹¤—¤‹¤ª¤¯¤¯¤»¤¯¤ΤÓ¤Ó¤ߤÓ¤ò¤÷¤÷¤¥÷¤¥¥/¥¥;¥G¥R¥]¥b¥v¥b¥‚¥Ž¥™¥¤¥©¥½¥©¥Ñ¥É¥Ú¥ߥߥç¥ì¥ì¥ô¥ù¥ù¥¦¦¦¦¦¦¦#¦#¦.¦3¦3¦>¦C¦C¦N¦S¦S¦^¦c¦c¦n¦s¦s¦~¦ƒ¦ƒ¦ަ“¦§¦“¦³¦¾¦ɦԦ٦٦ã¦è¦è¦ò¦÷¦÷¦§§§§§§§"§"§/§4§4§A§F§F§F§F§F§N§S§S§[§`§`§h§m§m§u§z§z§‚§‡§›§‡§§§¸§½§½§ϧÚ§ú§ÿ§¨ ¨9¨%¨E¨P¨[¨`¨`¨r¨}¨�¨¢¨¸¨èܨȨè¨ó¨þ¨©©© ©@©E©[©f©©k©‹©–©¡©¦©¦©Ì©¸©Ø©ø©ý©ªª#ª>ª*ª^ªJªjª€ªlª ªŒª¬ª·ª¼ª¼ªâªΪ«)«4«9«T«@«t«`«€«–«‚«¶«¢««Í«Ò«Ò«ø«ä«¬$¬)¬?¬J¬O¬j¬V¬Ьv¬–¬¬¬˜¬̬¸¬جã¬è¬è¬÷¬ü¬ü¬ ­­­­­­­­%­'­'­1­>­^­`­`­j­j­j­j­j­l­l­ƒ­Š­•­•­¢­¨­¯­º­Å­ЭÛ­æ­à­ ®®!®/®)®R®J®j®j®j®s®{®Ž®”®¢®µ®µ®Í®×®ë®¯¯&¯6¯K¯]¯m¯m¯•¯œ¯«¯½¯½¯Á¯Ưͯݯü¯ü¯°°°#°#°'°2°>°L°y°‚°“°¡°Ô°à°å°û°±±)±.±<±X±ƒ±©±¬±¼±¾±¾±±á±ì±ì±ï±ý±(²H²H²H²v´\, ÞÑÞÑìÑòÑöÑÒÒÒ]8ƒ�VHVHwHdHƒHŽH™H¤H¯H»HÁH^\�”ø›ø›œœœœ&œ1œ<œ>œTœTœfœrœ{œ~œ­œ_ܳfÍÍHÍQÍ_Í�Í�͒͟ͽÍÅÍòÍ÷Í Î=ÎYÎ_ÎcΆάαÎÚÎôÎÏ1Ï7Ï;ÏTÏ\ÏaÏrÏzϙϟϣϼÏÄÏãÏèÏùÏÐ Ð%Ð-Ð3Ð7Ð;ÐMÐUÐaÐwÐ|ЎГФЩлÐÄÐØÐãÐÑ8Ñ]ÑbÑbÑbÑrÑyчєѶѶÑÍÑÒÑÒÑéÑëÑëÑÿÑÒÒÒÒÒ1Ò3Ò3ÒJÒJÒ[Ò`Ò`ÒpÒ•Ò§Ò¬Ò¬Ò¬Ò¬ÒÄÒçÒúÒÓÓÓ%Ó<Ó>Ó>Ó>ÓKÓbÓdÓdÓqÓˆÓˆÓŸÓ¡Ó»ÓÙÓÙÓÙÓÝÓßÓßÓßÓäÓæÓæÓëÓëÓõÓúÓúÓÔÔÔ Ô"Ô"Ô"Ô*Ô,Ô,Ô4Ô4Ô6Ô=Ô[Ô]ÔpÔ†Ô†Ô†Ô†Ô†Ô™Ô±Ô¹Ô¹ÔüÔ`` +>8>8P8\8z8–8£8º8Í8Ø8í8Ú8ù89 9 9979=9aôW!!,!/!A!H!O!T!V!]!d!h!z!¬!Æ!³!Þ!ã!""""'"a"f"“"›" "©"´"¼"Ã"â"è"# #(#3#J#i#o#v#v#|##ƒ#”#´#Æ#b$¾¿¾¿Í¿å¿å¿ë¿cxb|^Ê^Ê~ʠʠʪʯʯÊÎÊÛÊÝÊÝÊÝÊÝÊêÊòÊËËËË#Ë6Ë6ËHËdHÏ>KNW]t‹¢´âþ"-DVcvŒ ¥°ÐÕØò   ! ; U ] e j „ Œ ‘ ± ¶ ¹ Ó í õ ý ÿ  3 ; C E _ g g l q | | ‡ ‡ “ “ ¥ å û û  !eŒc‚.G.GBGEGWG_GjGyGyG�GšG¥G¾GªGÊGÙGáGìGôGÿG +HH H+H6H6HHHHHPHfd¤¹`‰`‰p‰w‰ƒ‰‰‰‘‰Ÿ‰²‰¾‰Õ‰â‰â‰å‰ó‰ŠŠŠ&Šg»üY+Y+o+t+ˆ+·+Ã+Ð+Ú+ê+ê+,, ,&,/,F,F,\,\,r,r,ˆ,ˆ,ž,ž,´,´,Ê,Ê,à,à,ö,ö, - -$-$-;-;-R-R-i-i-€-€-—-—-¯-¯-Ç-Ï-Ú-ë-ö-. +. .#.*.6/h ÷ææ  +?FIKTeehp†‰—š�¤¨°¾ÐÖÞi(EKww=w*wIwXw`wjCÞ.Þ.///#/+/3/@/F/O/U/Z/b/~/„/†/ˆ/•/•/¢/—/³/¹/»/½/Ê/Ê/Ê/Ï/Ø/à/é/ñ/ó/û/0 000)000@0K0W0u0|0‡0�0ž0¢0ª0ª0¾0Î0Ö0Ù0?1k8-7y0y0�0‘0–0¡0¬0¯0³0»0l¤õš¶~¶~Ô~ø~þ~ ,1GcOo‚”�¥¯Íßèðú€ÿ €1€;€C€H€c€O€ƒ€o€�€¥€‘€Å€±€Ñ€ã€í€õ€õ€þ€��5�G�V�Z�Z�a�f�„�†�‹�–�¬�¬�¬�°�¼�Ý�ë�õ�‚#‚1‚;‚=‚=‚W‚j‚x‚{‚›‚Ÿ‚¾‚‚å‚邃 ƒ ƒ ƒƒ ƒ*ƒCƒIƒTƒ`ƒbƒjƒpƒ‰ƒ”ƒ¢ƒ¬ƒŃȃЃ܃Þƒæƒéƒ„„„„„ „9„Q„]„r„w„‰„˜„±„„„̈́؄ð„ü„……(…7…P…a…a…g…r…z…ˆ…�…¡…mfäîÚîÚÛÛ1Û1Û7Û?ÛGÛOÛWÛ]ÛjÛjÛxÛ}Û}ÛƒÛˆÛˆÛŽÛ“Û“Û™ÛžÛžÛ¶ÛÉÛÏÛÔÛÔÛÝÛýÛýÛýÛÜÜÜ ÜÜÜÜÜÜÜÜ$Ü$Ü+Ü-Ü-Ü3Ü3Ü:Ü:ÜBÜHÜNÜVÜVÜVÜVÜbÜjÜrÜz܂܊ܒܘܰܿÜÉÜÌÜÌÜÖÜÜÜâÜâÜæÜîÜõÜýÜÝ ÝÝÝÝ&Ý.Ý2Ý8ÝCÝIÝVÝbÝhÝpÝtÝ{݃݋Ý�Ý•Ý�ݤݬݴݸݾÝÉÝÎÝäÝõÝúÝýÝ£ÞnÖ¾4¾4ð45 555%5.50535Q5X5s5u5|5—5ž5§5©5¬5Ê5Ê5Ê5Ø5â5ï566+63636O6m6r6y6�6”6¯6±6¸6Ó6ç677 77:7<7V7^7^7z7•7•7»7Í7o &*&*0*8*=*p`a"a"j"q"…"™"ž"¼"Á"ß"á"ÿ"##,#5#7#K#[#Œ#q ö)ö)ÿ)*"*rl2ÉP‘P‘f‘w‘ˆ‘™‘ª‘»‘Α֑ä‘’ ’’ ’5’5’H’Y’_’t’�’�’¤’©’±’¹’¿’×’ê’õ’ù’“““ “-“/“A“A“H“W“e“x“|“†“Š“–“𓦓ª“¶“º“º“Í“à“æ“ê“ô“ø“” ”””1”5”5”5”5”:”L”[”j”x”“”£”³”¸”¸”¸”Ĕ̔Ԕڔï”÷”•••#•%•%•%•%•%•%•%•%•%•1•9•A•G•\•d•h•p•~•„•„•„•–•œ•¨•®•»•Ö•æ•ò•ø•––%–D–£—sÔÍþ°e°eÂeÓeÞeéeÿef)f.f7f>fKfRf`fgfiflfqfsfyf“f­fÃfÛfàféfðfýfg,g3g5g8g=g`g~gŠgt$in'''';'B'\'u¤b‡ö;ö; +<<7<#<C<H<O<O<o<…<q<‘<·<£<Ã<È<Ï<Ï<×<Þ<é<ô<ü<===-=%=E=M=v9vþOþOP!P9PQP[PfPfPkPvP‚P�P›P«P»PÂPÈPÝPòPòPQQQ+Q:QGQXQiQwQ…QŒQ’Q§Q¼Q¼QÐQÝQîQþQRRRR)R:RGRWR¹Rw8¬¶öÏöÏúÏÿÏÐÐ#Ð,Ð1Ð6Ð8Ðx88BÁ0Á0Õ0Ù0Þ0é0ó0ö0ú01y0†Ž>Î>ÎTÎgÎtÎzÎ}Î…ÎzÜtVVxƒŽ—§¹¿ÅËáÐõ  %*M`dj�‡—�©·¼Êãñú +  ?MYs’™£²¸¾ÄÊà!8CR_n{‹™°¼ÁÏî &16<S^krr€�‘Ÿ®ÀÀÈëö*{T�޾þÃÖÃÞÃëà ÄÄ$Ä.Ä4Ä:Ä>ÄBÄdÄdÄkÄnÄsĂĆijķļļÄÃÄÆÄËÄ×ÄåÄéÄúÄ Å ÅÅÅ"ÅDÅHÅMÅMÅaÅdÅpÅzÅ�ŧŲŶŻÅñÅÆÆÆ(Æ3Æ7Æ9ÆDÆHÆHÆbÆfÆhÆhÆsÆwƑƕƕƕƙƼÆ|ˆßý¾Æ¾ÆÒÆèÆèÆèÆêÆêÆñÆóÆóÆúÆüÆüÆ Ç Ç ÇÇ Ç!Ç!Ç.Ç5Ç7Ç7ÇOÇTÇTÇdÇ}°©Ñ¾I¾IÖIÞIéICJ.J#JJ÷IIJ[JKJvJvJ�JƒJ¼JÁJÍJØJíJÚJùJÿJK'KK K;K=KVKVKcKŠKŠKŠK–K~ †*®³®³Ë³Ò³Ú³å³ü³´´´'´B´X´f´j´Š´ž´²´¹´½´Ö´à´ñ´þ´þ´µ µµµµ"µ)µCµJµZµ^µ^µhµ~µ‚µ‚µ“µ¦µ¹µ¹µ¿µÊµÑµÙµäµëµóµþµ¶¶¶.¶2¶J¶;¶e¶e¶k¶r¶�¶‰¶—¶ž¶¢¶¤¶¶¶¶¶¶¶È¶Ð¶ö¶····%·5·@·U·Z·h·w··�·˜·œ·¡·©·­·¼·¾·Í·Ï·Þ·à·ï·ö·ú·¸¸$¸+¸/¸?¸J¸O¸m¸u¸ƒ¸Š¸Ž¸–¸¤¸«¸¯¸·¸Ë¸Ó¸Þ¸â¸â¸â¸í¸ø¸¹¹*¹2¹=¹L¹T¹_¹d¹l¹w¹ƒ¹‡¹’¹—¹©¹±¹¼¹¼¹¼¹¼¹Ê¹Ù¹ö¹º +ºº*ºHºLº{ºpºaº‹º‹º•ºœº«ºººÂºÐº×ºÛºÝºìºôº» » » »»!»!»3»3»3»9»E»W»_»w»£»±»µ»Ó»Ú»á»ì»¼¼ ¼¼&¼4¼;¼?¼A¼T¼\¼j¼q¼u¼u¼u¼u¼ƒ¼Ž¼�¼¥¼³¼¾¼Â¼Â¼Ç¼Ï¼Ó¼â¼ä¼ó¼õ¼½½½½ ½4½<½J½Q½U½e½p½u½“½›½©½°½´½¼½Ê½Ñ½Õ½Ý½ñ½ù½¾¾¾¾¾¾(¾B¾R¾]¾r¾w¾‚¾’¾ž¾´¾¼¾Ç¾Ö¾Þ¾é¾î¾ö¾¿ ¿¿¿!¿3¿;¿F¿F¿F¿F¿Z¿j¿¿Œ¿�¿¤¿µ¿Ê¿×¿Û¿é¿þ¿À%À>ÀWÀYÀdÀlÀlÀuÀ’À£ÀºÀÓÀáÀìÀøÀÁÁ ÁÁÁÁ/Á=ÁKÁ`ÁwÁ†Á“Á±Á¸Á¸ÁÈÁÜÁöÁöÁúÁ Â:ÂEÂ\ÂdÂd††™´½ÂÒÂìÂûÂÃ&Ã4ÃJÃcÃsËËããïÃÇÃßÃèÃèÃèÃôÃÄÄ&Ä&Ä-Ä6Ä<ÄHÄ®ÄÌL»öö4ö?öJöpöpörööŠö�ö¡ö°ö¿öÌöÌöÒö×öÜöïö÷ ÷÷#÷0÷8÷C÷?÷Z÷h÷h÷h÷s÷Ž÷y÷Ÿ÷–÷©÷«÷Ç÷³÷Ï÷Ý÷Ý÷ß÷û÷û÷øøøøø=øQøDøYø_øhøhøhø{ø€ø€øˆøˆø“ø¨ø±ø±ø±ø±øÍøäøêøïøïøù +ùùùù8ùXù]ùbùbùnù‹ùšù©ù±ù¶ù¼ùÁùÁùÈùÏùòùúú.úCúCúIúIúVú_ú_úzúŒú—úœú©ú´ú¼úÄúÔúëúëúûúûú ûû;ûDûDûFûMûRûRû_ûjûpûyûyûŒû™û«û¶ûÄûÍûÒûùûü üüü!ü4üIüNüUübüiü{ü�ü—ü�ü¦ü¦ü¯üÉüÐüÕüãüóüýýýýýý*ý<ý?ý?ýPýXý`ýlý‰ý�ý�ýŸý¦ýºýÉýÉýÉýðýðýðýýýýýþþ/þ<þGþUþ`þoþvþvþ�þ£þ¥þ´þÉþËþÙþîþîþôþýþýþ +ÿÿ"ÿ"ÿ/ÿ2ÿ=ÿOÿVÿaÿfÿnÿuÿ€ÿ…ÿšÿœÿ¶ÿËÿËÿËÿÍÿÔÿÚÿëÿùÿ  !&GPPV__~~‹Ž”�¥°ÂÈÓÓàãéòú((58>GIk~“™¤¶¼ÄÄÄÄÏJ€@I•¾î¾îÖîèîóîïïúî'ïEïrï]ïQï~ï˜ï˜ï·ïÌï¹ïùïäïØïð ð ð ð1ðKðKðxð‘ð…ð¾ðÃðÖðÊðøðéðñ"ñ:ñ.ñ`ñMñ{ñlñ‡ñ¥ñºñ§ñÒñÆñôñåñòòòò,òFòFòaònò�ò�ò•ò�”ž¿¡3¡3µ3¹3Â3Å3Î3×3é3é34444'474>4A4I4L4Y4a4i4q4x4ˆ4ˆ4”4‚Œ >>9>9R9Y9‰9u9•9š9¡9¡9Á9×9Ã9ã9:ÿ9 :$:+:+:3:::E:M:X:k:c:ƒ:‹:ƒø;8_8_V_f_p_p_z_z_„_–_£_¦_¨_±_¾_¾_Ø_ß_ß_ù_```$`3`B`X`X`X`h`h`z`z`ˆ`–`¬`¬`Â`å`û`a4a4aBaPacaca–aÉaÏaÏaÏaáa„¸ºä(Š(Š@ŠBŠNŠRŠ_ŠbŠ|Š|Š|Š‚Š†ŠŽŠ™Š­Š¹Š»Š»ŠÄŠÆŠÆŠÏŠÑŠÑŠÚŠÜŠÜŠåŠåŠîŠôŠ÷Š‹‹‹$‹$‹Œ‹…œWzV V t … ¨ ¯ È À à ì  "C/[ƒŠ£›»ÛÇçøú&33KKU†œf‰.-.-:-J-U--¯-¼-Í-ß-æ-í-.....=.J.M.f.i.n.….‘.�.¡.¨.Þ.‡x¬ثثî«õ«ü«¬*¬9¬H¬W¬f¬p¬p¬u¬|¬�¬ž¬£¬¾¬Ø¬Ø¬î¬­­­­­­%­7­@­B­P­b­b­b­t­­‘­œ­©­®­¾­Ã­Ó­ß­ä­ñ­ö­® ®®®-®/®?®A®R®[®[®]®m®t®„®„®Ÿ®±®Ã®Õ®å®å®å®è®û®ˆ\åø�‹�‹«‹²‹·‹Å‹Ú‹á‹ë‹ù‹ü‹þ‹ŒŒŒ!ŒWŒ‰0ÎÖ..Fˆ|PNœ¤ŠLBQ¦+¦+´+Æ+Ì+Ô+æ+ì+õ+, ,,L,‹(—�q3q33Ž3’3•3›3Œ\ReN,N,\,n,t,|,Ž,”,�,¯,µ,¾,Ð,Ö,Ù,'-�, vÑvфыѓјўю¬!H.í.íLí^íeílí{í€íŸíŸí¤íÃíÈíÏíÞíàíÿíÿíî3î î?îNîPîoîoîoîoî~î—î�î¯î¹î�(?&E&ECEKEREfExE~E‰E E¯EºE¾EÉEÕEàEìEFF-FDFYFiFiF{F�F’F˜F¨F¨FÀFÀFåFåFêFêFðFüF GG*GAGPG[GmGyG�G¨GÉGÉGÒG×G×G×G×GçGðGøGýG HH)H.H.HFHFHKHKHUH`HrHxH„H”HŸH©H­H¶HÏHÒHâHïHÿHIII(I0I;IBIFIYI_IlIwI}I�I�I�IÊIìIøIJ JJJ J*J*J:J?J?JIJTJfJlJzJ‡J”JžJ¢J«JÄJÇJ×JÞJãJãJ÷J÷JüJKKK+K1K3K3KAKGKMK^KdKpK€K€K€K…K�K�K¬K¯KÃKáKìKL'L2LDLHLMLTLfLvLŽL•L™LŸL§L²LµM�<KV¦ ¦ À Ì Þ ô   - E E O ‘`l€@›@›`›g›o›z›„›�›—›¦›°›³›×›Ù›é›é›÷›’`àô®}®}Ä}æ}ó}÷}~ ~#~)~<~Y~[~[~Œ~z~[~«~µ~“XnV¸V¸|¸ޏ“¸ª¸¼¸ƸиÞ¸æ¸õ¸ ¹ ¹¹,¹:¹B¹J¹L¹W¹b¹b¹j¹r¹|¹„¹޹—¹Ÿ¹¢¹«¹ƹ×¹é¹ì¹ñ¹ºº0º8º8ºJºMºRºeº}º‘º™º™ººº½ººÕºÛºðº»»»3»;»;»F»e»l»w»Ž»”HWeq1q1…1‰1Ž1™1™1£1©1©1­1µ1•83=vÒvÒÒÒ�Ò‘ÒŸÒ¢Ò§Ò–8>H®Ò®Ò·Ò·ÒÅÒÉÒÐÒÓÒØÒ—D+8®*®*È*Û*å*ì*ø*+++/+5+T+˜Ðy©ÖÛÖÛÜÜ +ÜÜÜÜÜ$Ü$Ü6ÜAÜHÜUÜbÜu܄ܘܞܠܧܭܷܷÜÈÜÊÜÑÜ×ÜáÜáÜáÜøÜ +ÝÝ Ý"Ý4ÝCÝCÝUÝ™09AV+V+_+…+–+œ+œ+¤+š„\yžìžì°ìÅìÏìØìÚìáìñìüìþìííí í"í"íCíNíPíiípítí€í“íæí›”"v´v´˜´¢´®´³´ôÉ´Þ´ò´µµµ4µ<µFµUµ]µjµrµuµuµuµwµ†µ�µ™µ¡µ¤µ¶µœh÷ †B†BœB§B²BÀBËBÑBâBèBùBÿB C"C"C4CECRCXCiCoC½C��µÕ33D3I3]3e3s3w3€3€3…3’3¨3Ò3×3û3444%4;4=4S4i4�4§4¹4žˆùNàNàfàxàà†à¥àªàÉàÎàèàÕàáôàá(ááGá4áSáSáSáeálá‹á‹á“០y}è‡è‡ñ‡ý‡ˆ (A†â†â¨â°â¶â¾âÀâÀâÑâÑâÑâÙâáâóâãóâããã3ã5ã5ã@ãEã_ãdãdãdãyã{ãˆãŠã—ã™ã¦ã®ã¶ã½ãÌãÙãÛãìãùãùãùãää'ä-ä5ä7äDäDäYäYäYädänä†ä‹ä‹ä‹ä™äŸä¤ä¬ä·äÉäÔäÙäÙäàäääòäöäÿäå$å1å8åAå]åbåbåbåbåjåuåƒåƒå£å£å£åªå¸åÇåÚåíåïåïåïåææ ææææ-æ7æRæ{æ�æ�æ•æšæ¾æÅæÑæïæç çççççç#ç-ç;ç]çhç…ç�ç�ç�ç»çëçþçè&è9è>è>è>èFèQècènèsèsèsè…è²è¸è¸è¸èÃèÍèÙèäèæèæèæèëè÷è÷èAé¡H%Ù/Ù/ç/î/ù/000020<0B0H0¢0 Î7Î7õ7â7888/878£T9J† †   ¬ ¾ Ô õ â   0 F g T  — — ¡ ¤TXiž ž ´  È Î ß í û  %(2¥Lg–á–áÅáºáÒáíáÙá âùáâ/ââOâ;â[âgâlâxâˆâ�âœâ§â³â¾âÆâËâ×âÜâðâ÷âûâã ãã/ã8ãDãIã]ãdãhãhãmã†ã‹ã¤ã¹ãËãÐãÛãããããããåãþãää(ä3ä5ä@äHäHäUäMämä�ä¦àZŽ€‚€‚š‚¨‚­‚º‚Ȃтì‚ú‚ƒ%ƒ5ƒOƒZƒjƒlƒnƒxƒ„ƒˆƒ•ƒ¡ƒ³ƒ»ƒÓƒ×ƒ×ƒ×ƒ×ƒÜƒúƒ„„„„&„2„;„‘„§d{�VVt—¨¯ÈÀàì 3 KXXppz¨(–ߖߤßÇßÍßÒßÒߨߩ(!'ÒÒ'Ò5Ò;Ò=ÒBÒªD^kP9P9j9q9z9†9›9£9©9¯9±9±9À9«„½Ú˜¥˜¥Ë¥×¥Û¥ã¥ë¥ï¥ú¥þ¥¦¦¦¦¦(¦9¦;¦?¦P¦a¦n¦�¦ˆ¦’¦’¦’¦¤¦¬€¨—¨—Á—È—Ï—Ö—Ü—ì—÷—˜ ˜#˜&˜(˜C˜M˜W˜^˜i˜{˜ƒ˜ƒ˜™˜™˜«˜­˜b6B6B\B|B„B�BžB§B«B¶BÖBÛBõBCC C2C_ChC~C„CŒC�C”C§CÌCÑCçCíCõCøCDD:DYD_DgDgDlDrDuD€D D¥D¿DÞDäDéD EEE6E>ECEcElEnE�E•EµEºEÔEóEùEþEþEþEþE FF'F?FJF]FjF‚F–F§F±F³FÇFØFÝFèFõFGGG'G®°)ø�ø�ž(ž-ž1ž:žGžSž^žižqž|ž„ž‡ž“ž›žµžÛžÕžëžôž)ŸŸ9Ÿ9ŸQŸ\ŸxŸŸ£ŸÜŸÜŸÜŸÜŸ= ¯,ù@XŒXŒ}Œ‰Œ”ŒžŒ¤Œ®Œ´Œ¾ŒÌŒÖŒèŒòŒøŒ����%�+�4�_�n�q�s�}���™�«�µ�Ê�Ê�Í�×�ì�ñ�Ž ŽŽ%Ž8ŽBŽWŽeŽnŽvބޕޥ޶ŽÃŽÃŽÐŽÐŽØŽ �°l£:^Å^ÅwÅ�ÅŸÅ¿ÅÑÅéÅÆÆ.Æ6Æ:Æ=ÆAÆFÆPÆSÆZÆ`ÆgÆmÆqÆvÆ€Æ‘Æ˜ÆŸÆ¡Æ¥Æ®Æ¸Æ»ÆÆÆÒÆÕÆæÆñÆ÷ÆþÆÇ Ç1Ç:ÇCÇKÇVÇaÇmÇ~Ç�ǛǩǫDzǹǾÇÂÇÏÇÖÇùÇÈÈÈ$È=ÈNÈWÈ`ÈhÈqÈwÈ{ȀȄȑȘȦȰÈÅÈÏÈØÈñÈÉ ÉÉÉ%É+É/É4É:ÉDÉNÉjÉxÉ~ɃɋɓɛɨɰÉÏÉÂÉáÉêÉÊÊ,Ê3Ê<ÊEÊLÊUÊ^ÊgÊ€ÊpÊ�Ê”Êîʱ  è„è„ö„……²ÀŽº�(�(Š(±(Ÿ(‘(Ò(â(Ô()&)&)6););)O)T)T)p)u)u)•)š)š)®)³)³)Ð)Ð)Þ)*(*H*Z*l*~*Ž*Ž*Ž*Ž*Ž*W+³$chÑ&Ñ&Õ&í&ÿ&'´´ªî�î�žžžž#ž/ž/ž;žPžqžƒž•ž™ž©žÉžÛžážôžýžŸŸŸŸ1Ÿ5ŸEŸRŸpŸ‚ŸˆŸ›Ÿ­Ÿ¹Ÿ»ŸÇŸÏŸÓŸÙŸâŸâŸâŸâŸôŸ +   1 8 @ L a h h h v „ Ž ‘ Ÿ © ¬ ¾ àÈ Ø Û à ð ó ÷ ¡¡¡"¡+¡A¡G¡S¡h¡o¡w¡‰¡�¡ž¡¯¡¯¡¶¡¶¡¶¡Ä¡Ò¡Ü¡ß¡í¡÷¡ú¡ ¢¢¢&¢)¢.¢>¢A¢E¢N¢V¢h¢p¢y¢y¢„¢›¢³¢·¢âÛ¢ã¢é¢õ¢þ¢£ +££££,£4£:£Q£Z£b£h£n£n£n£u£‡£“£›£¡£§£§£©£»£µx.·.·<·Q·X·c·…·¹·Õ·ç·û·¸ ¸¸¸&¸(¸.¸4¸@¸H¸N¸P¸V¸¶ÜLÿžQžQ¼QÄQÔQÜQ R R$R,R4R:RNRVRVR^R—RáR¼RS SS*S,SVS\SeSlStS|SˆS�S˜S«S³S¸SÂSâSêSìSöST%T-T/TOTWTWTWTbTiT|T„T�T�T’T–TžT§T°T¸TÔTïT U3U6UMUZUnU…U‰UºUÔUæUVVVBVEVEV\ViV}V”VŸV£V®V¹VËVÚVÜVW WW*W/WYW_WdWvW…W‡W±W´WÆWÕW×WXXXXXXXMXXXXXXXXXaXmXƒXœX¯X¶XÂXÉXÉXÜXàXàXàXçXìXÿXYYYY0Y2Y7YJYQY]YdYdYqY{Y{Y‚Y£Y£YµY·w¸¾R¾RÜRßRåRùRSS S%S*S*S7S@SFSVSdSfS…S–S�S©S¹S¹SÇSÚSåSéSúSúSúSÿSÿS TT-T3T8TLTRTZTlTrTtTƒT�T–TœT¡T§T­T´TÀTÇTÉTÎTÖTØTÝTéTëTðTøTúTÿTU UUUUU'U)U.U8U8U8UHUHUHU_UeUkUvU{UƒUœU¢U­U±U·UÂUÛUæUñU÷UV VVV#V+V3VQV\VgVsVmV|V…VŠV�V¤V«V´VÀVÆVÒVÖVÛVàVëVöVWW WWW W9WDWOWOWUWbWdWiWrW‹W–W¡W§W´W´W¸W½W½WÎWÐWÐWãWåWåWøWúWúW XXX"X$X$X6X6XBLBYB…B¹(28ŽŽ¬¿ÆÍÔØÚáèììô +6DUY^z¢¦¯³¸Éææô &7;;;@nƒŠ�¡¦Âêòûÿ'7KMfy}}}™ÁÅÎÒ×è',EVZlllq€¡ÀËÑçøý.VZcgl}––¤¸ºÓäèèï9airv{Œ¢²ÆËä÷û    1@alrˆ™™™ ³ÌÌÌÛÛî  ! & , 6 8 D D K V k m x � ™ › ¦ ²  É Ð Ú â æ ê ì ñ ù ý  + + + +" +$ +$ +- +: +P +p +Š +– +¢ +© +© +¼ +À +À +À +Ç +Ì +æ +ò +þ +    # = I U \ \ i s s … º¤ ·œHH%H4H4H4HNHNH]H]HcHeHeHkHmHmHsHuHuH|H€H…H…H…H…H…H…H�H¢H¢H¬H±HºHÄHÑHæHèHII I%I@IEIKIKI`IcIŠI—I¯IÏIÏIØIÝIûIéIJJJJ%J8J@JHJMJMJMJVJoJuJuJŽJœJ¶JÌJÎJÖJÜJäJéJéJïJïJøJ K K K"K*K0K8K=K=K=K=KKK_KaKuKuK}KƒK‹K�K™K¡KªK°K¶K¸K¸K¸KÀKÀKÎKâKæKèKôKöKLL L$L-L8L;LALGLPLSLSLaLoLqL”L±L·L¿LÄLÍLÏLÏLÔLÖLÞLÞLùL MMM"M%MMAMQMUM\MeMtM‚MˆM�M•M�M¢M¢M«M¸M½MÅMÜMæMNN$N/N:NENPN[NfNfNfNnNnN‡N•N¯NÅNÅNÇNÇNÐNÖNØNØNÞNäNäNìNõNûNOOO"O$O'O,O4OYFYLYNYWYfYnYsYyYyY�Y‡Y•Y Y¥Y«Y³Y¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸Y¸YÑY×YàYæYîYóYøYZ ZZZ"Z"Z"Z(Z0Z5Z5Z9Z>Z>ZGZUZaZnZtZtZ}Z‘Z‘Z—Z Z´Z´Z½Z¿ZÅZÎZâZâZëZëZëZðZõZõZýZ[[ [-[9[B[H[R[Z[_[_[_[s[|[‚[”[ž[ž[¦[¦[®[°[°[É[Ó[Ü[Þ[Þ[Þ[ä[è[ê[ê[ê[ê[ï[õ[û[5_»Ð0¶Y¶YØYîYúYZ4ZAZXZkZvZŒZxZ˜Z Z Z¯Z¯Z·ZÃZÙZîZýZ[[![![![&[+[:[E[\[^[c[r[}[Š[”[”[¢[¼”*K@ @ X _ f i r u x | � ¡ Ž ± ¹ Á Ä Æ Ö ß è î ñ ¡¡*¡5¡g¡½à.¢nÁnÁŒÁ—Á¨Á«Á¯Á¸Á¿ÁÍÁÜÁòÁÂÂ&Â8ÂGÂVÂgÂvÂv„ˆŒ‘•¢©·ÂËÂÔÂÚÂèÂÃÃÃÃÃÃÃÃÃÃ*Ã3Ã;ÃQÃQÃQÃVÃVÃkÃwÂÇÇÊÃ�Ã�ë÷ÃÄÃÆÃÆÃÊÃÌÃÌÃèÃôÃÄÄÄÄÄÄÄÄÄÄÄ"Ä(Ä-ÄIÄIÄIÄIÄIÄIÄIÄIÄIÄIÄIÄIÄKÄ\ÄnÄ}ČČÄ�Ä�ĘĴĸĽÄXž,NÑNÑ\ÑcÑkÑpÑvÑ¿˜?aŽ:Ž:¤:ª:±:á:Í:í:ò:ù:ù:;/;;;;k;W;w;|;ƒ;ƒ;ƒ;‰;Œ;�;˜;°;»;Î;Æ;æ;ð;ÀTQbá%á%ï%ý%&& &0&5&R&X&_&f&t&€&’&Î&ÁD%ÞßÞßòßàà)à/à5àZà`àfàlàlàtàÂô#œ¶µ¶µ¾µ͵ѵÞµëµÿµ¶.¶;¶M¶o¶�¶�¶¹¶˶ã¶ú¶·&·D·S·n·y·”·­·­·È·ñ· ¸&¸8¸G¸V¸V¸a¸t¸…¸˜¸¨¸µ¸À¸ϸï¸ï¸û¸û¸û¸ ¹¹ ¹?¹H¹U¹Y¹a¹l¹„¹œ¹¥¹µ¹½¹¹æ¹ö¹ºº%º*º2ºXºZºeº˜º²º²ºʺÙºáºðºùº»»2»:»B»M»O»_»w»�»§»¿»Ñ»è»ñ»ú» ¼¼¼"¼à  … …)…H…M…ÄX…WÈÈ(È/È<ÈGÈLÈRÈdÈjȂȈȦȺÈÅÈËÈíÈíÈýÈÉÉÉ#É+É3É;ÉIÉOÉUÉaÉaÉcÉuÉ{ɀɀɗɗɵɵÉÈÉÕÉÚÉÚÉñÉúÉ Ê Ê*Ê8ÊCÊSÊ`ÊrÊxʂʎʛÊ�Ê�ʥʪʪʲʷʷʿÊÄÊÄÊÌÊÑÊÑÊ×ÊÜÊÜÊãÊèÊèÊïÊôÊôÊÿÊËËËËË Ë$Ë$Ë/Ë/ËHËOËUËXËcËfËzˇ˖Ë�ˠ˲˴˺ËÎËÛËêËêËêËêËôË Ì!Ì1ÌBÌHÌYÌ_ÌdÌnÌÌ�̶̟̥ÌÁÌËÌÚÌéÌïÌúÌÍÍÍ,Í7Í=ÍMÍMÍ]ÍpÍ|͔̈́͛͡ͲͽÍÂÍßÍôÍÎÎÎ0Î;ÎJÎLÎ^ÎfÎkÎrÎv΄ΎΔΞΤίεηÎÄÎÑÎÛÎÏÏÏ ÏMÑÅ0#«Ø§Ø§÷§!¨)¨)¨7¨J¨c¨f¨‚¨‚¨‚¨Š¨Œ¨Œ¨”¨–¨–¨ž¨ ¨ ¨¨¨¨¨±¨·¨¼¨¼¨Å¨Ñ¨Õ¨Ú¨à¨å¨å¨í¨ö¨ü¨©©©©*©I©L©a©€©€©€©ˆ©Š©Š©Š©’©”©”©”©œ©ž©ž©ž©¦©¨©¨©³©³©¹©¾©¾©¾©¾©Å©Ð©â©ð©þ©ªªªªª ª#ª)ªAªOªbªnª—ªšª¡ª³ª»ªÄªÏªÏªÚªàªåªåªåªìªòª«««7«C«I«N«N«U«`«`«e«w«}«}«}«}«Ö«Æd%ˆBˆBªB´B·B·BÁBÔBÖBãBåBðBC CC!C'C/C2CDCÇ\CV 1 1 1 1#1(1;1>1C1C1M1S1S1a1c1m1È8(2FÒFÒOÒOÒ]ÒaÒhÒkÒpÒɨÒø–K–K®K¶KÁKÚKÎKLaLLLAL,LLgL|LlL—LœL¨LÏLÔLéLÖLõLûLûLM/MWM=MkM†M†M†M’MÊ ÄÆ(Æ(Û(æ()ù(í(-))9)N);){)f)Z)‡)•)�)¨)ª)µ)À)À)Å)ò)÷)$*)*C*0*b*O*n*y*Ž*{*­*š*¹*¾*¹*Ô*â*ê*õ*÷*+ + ++-+/+J+J+W+\+{+}+œ+œ+œ+¤+Ël¥¼ŽŽ¨Ð³Üü-E2Qd„–©©¶ÕÕßÌ4“œÌÌÌ Ì%Ì)Ì-ÌLÌTÌͼLwfwfw~w‰w“w¬wÄwÉwÎwÒwÔwÚwàwöwãwxx!x9x&xExOxhx€x…xŠxŽx�x–xœx²xŸx¾x¾xÑxÙxëxyþxyyÎ4;DÖÀÖÀßÀëÀ +ÁÁÁÁÁÏ”"¨¦¨¦¶¦È¦Ì¦Ô¦Ü¦ç¦ò¦ú¦§§§+§2§9§D§O§Q§\§g§i§u§€§‹§”§œ§œ§ §×§Ð€Û÷i5i5‡5‹5�5—5¥5¨5«5¾5Ä5Æ5Õ5Ù5Ý5å5í5ù56 6&6-6-6:6O6Ñ –)–)¥)¾)Ä)Òd9ÎŽŽÄËÓÜíú"0:?gly¥ª·×Üë $9emrr…˜¨¬ËÜáá(+.227_dmz‚�¯¼Çåååò    /11>UUfk‹�¯ÍÍÍÚñóóó&==NV[�“¥ÃÃÃÐçééö  "$+Mkpw…�‘‘‘­µ··ÙÓ  Þ)Þ)ç)ï)ô)Ô¤/T®È®ÈÎÈðÈðÈÉ É$É$É3ÉEÉ_ÉgÉnÉpɃɋɋɋÉ�É�É�É�ɫɫɫɫɽɿɿɿɿÉÒÉÝÉÊÕxµyy4y@yKyPy\ygylysyxyƒyˆyˆyˆyºy§yÆyÈyÍyØyÝyÝyÝyzüyzBzBzUzhz{zŽz“z“z¦z¹zÌzßzäzäz÷z +{{0{2{2{E{X{k{~{~{~{Œ{Ö0Š’¦Ë¦Ë´ËºË¾ËÝËþËþËÌ×<;FQ8Q8Z8e8s88‹8”8�8¦8¬8±8Ølv�±'±'¿'É'Ð'ç'ç'ì'î'ú'((/(1(A(A(F(H(O(�(ÙÜŸÒ–c–cªcÔcÉcµcïcücdddHdMdydyd~d”d¦d¼dÒdeeLe8egete e¥e­eÌeÔeùeîeÚe f"ffBf.fVfcf�f�f�f�f—fÚL½Ìææ<<Nang†�ÛÐf–¹1¹1Ù1Ý1ü12,222I2h2v2v2{22†2‘2œ2©2²2²2·2¼2Ã2Î2Û2Ý2ê2ì2î2î2î2ö2ö2ö2þ23333$3p3Ü ˜„˜„¦„º„À„Ý`G[±8±8Á8È8Ê8Ï8Þ8ä8ù8ù89999 9-979:9B9Þ<›¦¦…¦…¯…º…Å…Ð…Û…å…†††ß 2¾C¾CÖCèCîCúCDD D6DADQDcDiDoDuDˆDŽD—D�D¯DµDÀDÈDÖDãD Eà4P…P…^…h…q…x……‰…‰…�…áÄKx¶Ù¶ÙâÙåÙêÙ÷ÙüÙÚÚÚÚÚ.ÚGÚiÚrÚ}Ú„Ú�Ú¿ÚÄÚÝÚÿÚÛ Û$ÛFÛHÛaÛƒÛƒÛƒÛ˜Û²ÛÁÛÓÛâ „È.3.3L3Z3m3r3�3–3›3¡3¯3¶3Å3Ê3Ö3è3è344$4+4E4b4n4‰4¡4½4Æ4Õ4Ý4ê4ó4ø4 5575<5D5]5o55…5�5™5Ÿ5å5Ï5À5õ5066 6@6C6c6÷6ã( >*>*L*]*n*q*w*ä<&1HCHCiCoCxCŠC§C¯CÅCÑCå„y8CJRUUeppsz�‡�“š ±±³¼ÈÎôøû  %6<BM^^glv}„Œ’”¢¹¼Ë×ääääêü4EY`jryy‚‰•¥°°°ÄØèë¦æˆ:!7!7=7L7S7b7x7ž7´7Å7Î7Ü7î7 8 8838;8>8J8çX{Í..Ycv�“¡§¸¿ÇÝåø ')9IRX]djpv�Œ�–°¸Òçô÷ÿ$/7Ngkt{�•œ ©«½Ôâèìîûûûý,è  +À„À„Ʉ݄â„é  +Æ)Æ)Ï)×)Ü)ê,ýDftft‚tˆt“t¤t©t¯t²t¶t¶tÖtÛtuýtu6u"uBu[uGugunusu}u€u„u‰u¢uŽu®u®u®u³uÄuÉuÏuÒuÖuÖuöuûu1vv=vVvBvbvxvdv„v‹v�v–v™v�vŸv¸v¤vÄvÄvÄvÄvÜvwwëŒÎí¡¡ª¥¥´ÃÃÒÒááððÿÿ",;;JYh’ìxÈâf@f@„@–@œ@¨@¿@¿@Ñ@×@â@ò@þ@A AAA,A9AEASAbAbA’Aíd�²VÌVÌZÌmÌṁ̱̱̎̚̚ÌÈÌÈÌßÌßÌöÌöÌ ÍÍÍÍîØÆønÞnÞ�Þ—Þ¢Þ¸Þ¸ÞÊÞÕÞàÞñÞßßß"ß&ß(ß9ßKßWßißk߄ߓߗߗߗߪ߿߿ßËßÑßÛßæßôßûß +à à"à<à<àNàï`Ëßž|ž|´|Ö|ã|ç|ö|}} }2}O}Q}Q}‚}p}Q}¡}«}ðP2BØCØCîCúCDDD%D+D7D?DJDPDSD]Dñ(rx¸‡¸‡Æ‡Í‡Ý‡à‡æ‡ò ®-Þ¼Þ¼ø¼½½½½½4½E½V½h½z½‰½˜½©½¸½¸½¿½ý̽Ù½à½é½ð½ô½¾¾¾¾¾ ¾$¾'¾/¾=¾E¾R¾Z¾b¾s¾~¾ƒ¾ƒ¾�¾–¾¥¾¼¾¾¾ɾÖ¾å¾è¾î¾ê¾¿¿¿)¿+¿6¿<¿<¿D¿D¿V¿]¿s¿s¿s¿x¿x¿�¿›¿¦¿«¿«¿®¿³¿³¿Ï¿Ý¿ê¿ì¿ì¿ð¿ò¿ò¿ÀÀ(À*À*À-À/À/À<À>À>ÀAÀAÀAÀAÀAÀJÀPÀTÀ`À€À�À›À¢ÀjÁó(oua'a'j't'„'�'�'­'ôTzKæíæíî +î îî î8îHîQîWîZî^î`îxîˆî•î›îŸî¥î§îªî®î®îÑîÕîÛîÛîâîïï,ï?ïEïLïWïaïeïhïoïuïyïï�ï–ï›ï ï­ï¯ïÁïÃïÊï×ïÙïëïëïëïëïëïðð&ð=ð=ðRð^ð{ðŸð¹ð¾ðÕðÚðèðÿðñ +ññ0ñ6ñFñSñkñrñ~ñ–ñ¢ñ¢ñ¢ñ¨ñ«ñ®ñÇñÍñáñçñìñ÷ñ÷ñüñ òòòò*òAòGòJòMòTò]òdòdòiòvòƒòƒò‰ò—ò®ò´ò·òºòÁòÁòÒòÙòæòóòóòúòó óóó#ó7ó7óQóVó]óeóló{óóˆó ó¥ó¬óÎóÙóßóçóôôô/ô/ôIôWô^ôeô‡ôšô¾ôÀôÊôìôìôìôõõ"õ:õ>õöõ¼ù$–M–M®M²MÀMÏMÚMæMñMNóMN"N"NDNtNXNKN–N›NÃNÈNÔNßNÿNáN OO#O*OGOZOZO}O}O‰Oö8�™†Î†ÎŸÎ®ÎÂÎÏÎÕÎÛÎÞÎÿÎ÷8 9/9/G/N/Y/a/h/n/t/t/z/øôÓŒžfžf¼fÌf×fâfûf'g@glg–gœg¢gªg¬g´gÏgÒgÝgégh.hGhsh�h£h©h±h¶h¾hÙhÜhçhóhøhi=iVi‚i¬i²i¸iÀiÂiÊiåièióiÿijDj]j‰j³j¹j¿jÇjÌjÔjïjòjýj k kkkk"k*k5kGkVkqk…k¯kµkºkÌkÛkùk l7l=lElJl\lkl†lšlÄlÊlÏlálðl m mImOmTmTmTmempm{m¡m¹mÄmÌmÙmÙmÞmñmn n3nKnVn^nknknpnƒn�nšn®nÅnÞnðnýn(o=@=C=H=H=H=R=Z=a=i=r=}=ƒ=‘=›=›=¡=ª=Â=Ç=Ç=Ú=â=â=ä=ä=ä=é=é=ð=ö=ú=>>>>>>>9>B>B>F>TBú( XBXBfBoB}BƒBû�1Q¦[¦[Ä[Ì[Ø[î[\\\+\1\1\1\6\;\I\T\j\l\q\\Š\—\ž\¬\ü\‘¤~~˜¼ŸÈáÚùû-?RR_~~ˆý8hrîÌîÌÍÍ*Í9Í?ÍEÍHÍiÍþ0�—°ˆ°ˆÄˆÐˆÞˆáˆùˆüˆ‰ÿ0S[ÓÓ"Ó*Ó7ÓAÓTÓP>N8†8†D†X†[†o†w†{†…†�†—†š† †Tš«ÏÏ Ï3Ï6Ï@ÏMÏbÏdÏvπϔϔϚÏ�ÏñÏ<˜£‰‰‰#‰/‰;‰K‰P‰S‰W‰_‰ ,0vàvà„à�àHš¨FIFIZIfIqI‡IsI“I•IœI§I³I»I DƒF1F1j1q1v1~1˜1¡1£1°1°1²1Ì1Ò1Ô1Ö1ã1ã1ã1ã1ç1ö1ÿ1222 2%2'2C2G2Y2l2r2†2‹2˜2˜2¬2³2º2Ã2Ñ2Ú2ú233 33333.3D¶M¶MÄMÎMØMèMíMóMÿMNNNNENlåü¦Þ¦ÞºÞÐÞÝÞèÞìÞóÞ÷Þßßßß%ß'ß0ß6ß6ß6ß6ß>ß !%~*~*ˆ*�*•* ´GphDhDŽDŸD¤D«DµDµD½DÐDÔDÙDîDðDóD÷DþDEEE*E1E5E=E?EGEUE]E_EbEwEE‡E•E™E§E + 8FNFNVNbNnN~N–NœNªN»NÃNÊNàNO O-O:OJOPOROcO…OŒO’O O¨O¾OÉOÏOÕOøO PÌèaèabb bb&b(b3bBbBbOb]b`bcbcbhbmbvb�b‡b�b£b¨b½bÈbÒbÒbûbcc4cHc]ccchcoc„c‹c�c¤cØcÝcäcêcñcöcöcücdddd6d@dFdKd_didpdpdpdudxdd…dŒd‘d‘d—d�d¢d¢d¹dÍdÓdádödüd eee,e3e5eIeOeVeVeVeVeVeVe\eaeeegejeue�e„e†eŠeŠe�e�e�e¯e ˜zœ¦¦ÂÇÎØÞéù #)4DL\cks{ƒˆ“¡¡· Ð1 � �4�4�Z�Z�w�{�€�€�€�Œ�‘�¡�¦�¦�¦�«�«�Á�È�×�å�î�þ�� � � � ����%�,�3�:�A�A�C�C�I�N�P‘ \ No newline at end of file diff --git a/Compiler/Compiler.PRJ b/Compiler/Compiler.PRJ index 5dbcf64..09c285d 100644 --- a/Compiler/Compiler.PRJ +++ b/Compiler/Compiler.PRJ @@ -5,8 +5,8 @@ OptOn(OPTf_KEEP_PRIVATE); } #include "/Kernel/KernelA.HPP" -#exe {OptOn(OPTf_EXTERNS_TO_IMPORTS);}; #include "/Compiler/CompilerA.HPP" +#exe {OptOn(OPTf_EXTERNS_TO_IMPORTS);}; #include "/Kernel/KernelB.HPP" #include "/Kernel/KernelC.HPP" #exe {OptOff(OPTf_EXTERNS_TO_IMPORTS);}; @@ -14,14 +14,22 @@ #include "Templates" #include "CExts" CCmpGlbls cmp; -CUasmGlbls uasm; -#include "UAsm" -#include "CMisc" +CUAsmGlbls uasm; +#include "CInit" +#include "CExcept" +#include "LexLib" #include "Lex" +#include "UAsm" #include "CHash" +#include "PrsLib" +#include "AsmInit" +#include "AsmLib" +#include "AsmResolve" #include "Asm" #include "OptLib" #include "PrsExp" +#include "PrsVar" +#include "CMisc" #include "PrsStmt" #include "OptPass012" #include "OptPass3" @@ -35,5 +43,4 @@ CUasmGlbls uasm; #include "BackB" #include "BackC" #include "OptPass789A" -#include "CInit" #include "CMain" diff --git a/Compiler/CompilerA.HPP b/Compiler/CompilerA.HPP index 93053a0..554f080 100644 --- a/Compiler/CompilerA.HPP +++ b/Compiler/CompilerA.HPP @@ -1,3 +1,4 @@ +#help_index "Compiler/Internal" //Intermediate compiler codes #define IS_0_ARG 0 #define IS_1_ARG 1 @@ -366,8 +367,8 @@ class CIntermediateStruct #define FSF_HASERRCODE (1<answer_type==RT_F64) - "%8.6fs ansf=%15.7g\n",Fs->answer_time,Fs->answer; +CLexFile *LexFilePush(CCmpCtrl *cc) +{//#include file push. + CLexFile *result=CAlloc(sizeof(CLexFile)); + if (result->next=cc->lex_include_stk) + result->depth=result->next->depth+1; else - "%8.6fs ans=0x%08X=%d\n",Fs->answer_time,Fs->answer,Fs->answer; - if (st=CurDir) { - "%s",st; - Free(st); - } - '>'; - if (IsDbg&&IsRaw) - RawDr; - st=GetStr(,,GSF_SHIFT_ESC_EXIT); - if (dbl_semicolon) { - i=StrLen(st); - result=MAlloc(i+1+2); - MemCpy(result,st,i+1); - i--; - while (i>=0 && Bt(chars_bitmap_white_space,result[i])) - i--; - i++; - if (i>0 && result[i-1]==';') - result[i++]=';'; //The Lex goes one beyond - result[i++]='\n';//#define goes to '\n' - result[i]=0; - } else - result=StrNew(st); //Fit exact size - Free(st); - return result; + result->depth=-1; //Include depth starts with -1. + return cc->lex_include_stk=result; } -CLex *LexNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL) -{//MAlloc new lex ctrl node. -//Frees buf in $LK,"LexDel",A="MN:LexDel"$ unless $LK,"LF_DONT_FREE_BUF",A="MN:LF_DONT_FREE_BUF"$ flag is set. -//FileName is for error reporting. If files are #included, new names are used. -//See $LK,"Psalmody LexNew",A="FF:::/Apps/Psalmody/PsalmodyFile.CPP,LexNew"$. - CLex *lx=MAlloc(sizeof(CLex)); - CLexFile *tempf=&lx->lfns[0]; - MemSet(lx,0,offset(CLex.end_zeroed)+sizeof(CLexFile)); - QueInit(lx); - lx->flags=flags; - lx->opts=1<otrace_mask=0b10001111101; - lx->htc.hash_mask=HTG_TYPE_MASK-HTT_IMPORT_SYS_SYM; - lx->htc.define_hash_table=lx->htc.hash_table_lst=lx->htc.glbl_hash_table=lx->htc.local_hash_table=Fs->hash_table; - if (flags&LF_KEEP_AT_SIGN) - lx->chars_bitmap_alpha_numeric=chars_bitmap_alpha_numeric_no_at; +CLexFile *LexFilePop(CCmpCtrl *cc) +{//#include file pop. + CLexFile *tempf; + if (tempf=cc->lex_include_stk) { + if ((cc->lex_include_stk=tempf->next) || !(cc->flags & CCF_DONT_FREE_BUF)) { + if (tempf->flags & LFSF_DOC) { + if (tempf->doc) + DocDel(tempf->doc); + } else + Free(tempf->buf);; + } + Free(tempf->full_name); + Free(tempf); + } + return cc->lex_include_stk; +} + +CCmpCtrl *CmpCtrlNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL) +{//MAlloc and Init CCmpCtrl. +//Frees buf in $LK,"CmpCtrlDel",A="MN:CmpCtrlDel"$ unless $LK,"CCF_DONT_FREE_BUF",A="MN:CCF_DONT_FREE_BUF"$ flag is set. + //FileName is for error reporting. If files are #included, + //new names are used. See $LK,"Psalmody CmpCtrlNew",A="FF:::/Apps/Psalmody/PsalmodyFile.CPP,CmpCtrlNew"$. + CCmpCtrl *cc=CAlloc(sizeof(CCmpCtrl)); + CLexFile *tempf; + QueInit(cc); + cc->flags=flags; + cc->opts=1<otrace_mask=0b10001111101; + cc->htc.hash_mask=HTG_TYPE_MASK-HTT_IMPORT_SYS_SYM; + cc->htc.define_hash_table=cc->htc.hash_table_lst= + cc->htc.glbl_hash_table=cc->htc.local_hash_table=Fs->hash_table; + if (flags&CCF_KEEP_AT_SIGN) + cc->chars_bmp_alpha_numeric=chars_bmp_alpha_numeric_no_at; else - lx->chars_bitmap_alpha_numeric=chars_bitmap_alpha_numeric; - lx->cur_lfn=tempf; - QueInit(&lx->next_stream_blk); + cc->chars_bmp_alpha_numeric=chars_bmp_alpha_numeric; + tempf=LexFilePush(cc); + QueInit(&cc->next_stream_blk); if (filename) tempf->full_name=FileNameAbs(filename); else tempf->full_name=StrNew(dsk.temp_filename); - if (flags & LF_PMT) - buf=CAlloc(4); - tempf->buf=tempf->buf_ptr=tempf->line_start=lx->cur_buf_ptr=buf; + if (flags & CCF_PMT) + buf=CAlloc(8); + tempf->buf=tempf->buf_ptr=tempf->line_start=cc->cur_buf_ptr=buf; tempf->line_num=1; - return lx; + return cc; } -U0 LexDel(CLex *lx) -{//Free lx. - CLexFile *tempf=lx->cur_lfn; - CDoc *doc; - while (tempf!=&lx->lfns[0]) { - if (doc=tempf->doc) - DocDel(doc); - Free(tempf->buf); - Free(tempf->full_name); - tempf--; - } - LinkedLstDel(lx->htc.next); - Free(tempf->full_name); - if (!(lx->flags & LF_DONT_FREE_BUF)) - Free(tempf->buf); - Free(lx->ps); - Free(lx->cur_str); - Free(lx->cur_help_index); - Free(lx->dollar_buf); - Free(lx); +U0 CmpCtrlDel(CCmpCtrl *cc) +{//Free CCmpCtrl. + while (LexFilePop(cc)); + LinkedLstDel(cc->lex_prs_stk); + LinkedLstDel(cc->htc.next); + Free(cc->ps); + Free(cc->cur_str); + Free(cc->cur_help_index); + Free(cc->dollar_buf); + Free(cc); } -I64 LexSize(CLex *lx) -{//Mem size of lex ctrl node and its members. - CLexFile *tempf=lx->cur_lfn; - CDoc *doc; +I64 CmpCtrlSize(CCmpCtrl *cc) +{//Mem size of CCmpCtrl and its members. + CLexFile *tempf=cc->lex_include_stk; I64 result=0; - while (tempf!=&lx->lfns[0]) { - if (doc=tempf->doc) - result+=DocSize(doc); - result+=MSize2(tempf->buf); + while (tempf) { + if (tempf->next || !(cc->flags & CCF_DONT_FREE_BUF)) { + if (tempf->flags & LFSF_DOC) { + if (tempf->doc) + result+=DocSize(tempf->doc); + } else + result+=MSize2(tempf->buf); + } result+=MSize2(tempf->full_name); - tempf--; + result+=MSize2(tempf); + tempf=tempf->next; } - result+=MSize2(tempf->full_name); - if (!(lx->flags & LF_DONT_FREE_BUF)) - result+=MSize2(tempf->buf); - result+=MSize2(lx->cur_str); - result+=MSize2(lx); + result+=MSize2(cc->cur_str); + result+=MSize2(cc); return result; } -U0 LexPutToken(CLex *lx) -{//Print cur token to StdOut. (Crude) - '"'; - if (lx->token==TK_IDENT || lx->token==TK_STR) - "%s",lx->cur_str; - else if (lx->token==TK_INTEGER) - "INT:%X",lx->cur_i64; - else if (lx->token==TK_CHAR_CONST) - "U8:%X",lx->cur_i64; - else if (lx->token==TK_F64) - "FLOAT:%e",lx->cur_f64; - else if (lx->token=='\n') - ""; - else if (Bt(chars_bitmap_displayable,lx->token)) - '' lx->token; - else { - "T:%X",lx->token; - } - "\" "; -} - U32 lex_zeros=0; -U0 LexBackupLastChar(CLex *lx) -{ - CLexFile *tempf=lx->cur_lfn; - tempf->buf_ptr=lx->cur_buf_ptr; - if (lx->flags & LF_USE_LAST_U16) { - tempf->last_U16=lx->last_U16; - lx->flags&=~LF_USE_LAST_U16; - } else - tempf->last_U16=0; -} - -Bool LexDollar(CLex *lx,CDoc *doc,CDocEntry *doc_e) +Bool LexDollar(CCmpCtrl *cc,CDoc *doc,CDocEntry *doc_e) { U8 *st; - if (lx->flags&LF_IN_QUOTES) { - Free(lx->dollar_buf); + if (cc->flags&CCF_IN_QUOTES) { + Free(cc->dollar_buf); st=Doc2PlainText(doc,doc_e); - lx->dollar_buf=MStrPrint("$$%Q$$",st); - lx->dollar_cnt=2; + cc->dollar_buf=MStrPrint("$$%Q$$",st); + cc->dollar_cnt=2; Free(st); return TRUE; } else return FALSE; } -I64 LexGetChar(CLex *lx) +I64 LexGetChar(CCmpCtrl *cc) {//Get one char from stream. Allow put-back one. U8 *ptr,*src; - CLexFile *tempf,*tempf1; + CLexFile *tempf; CDoc *doc; CDocEntry *doc_e; - if (!Btr(&lx->flags,Lf_USE_LAST_U16)) { + if (!Btr(&cc->flags,CCf_USE_LAST_U16)) { lgc_start1: - if (!(src=lx->cur_buf_ptr++)) { - lx->cur_buf_ptr--; + if (!(src=cc->cur_buf_ptr++)) { + cc->cur_buf_ptr=NULL; goto lgc_here; } - nobound_switch (lx->last_U16=*src++) { + nobound_switch (cc->last_U16=*src++) { case 0: lgc_here: - tempf=lx->cur_lfn; + tempf=cc->lex_include_stk; if (tempf->flags & LFSF_DOC) { doc=tempf->doc; doc_e=tempf->cur_entry; @@ -179,72 +131,73 @@ lgc_start2: nobound_switch (doc_e->type_u8) { case DOCT_TEXT: if (doc_e->de_flags & ~(DOCEF_TAG|DOCEF_DEFINE|DOCEF_TAG_CB| - DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT| - DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP) && - LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) { + DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT| + DOCEF_SKIP|DOCEF_HARD_SKIP|DOCEF_FILTER_SKIP) && + LexDollar(cc,doc,doc_e) && *(src=cc->dollar_buf)) { tempf->line_num=doc_e->y+1; - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; + tempf->buf_ptr=cc->cur_buf_ptr=src; } else if (*(src=doc_e->tag)) - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; + tempf->buf_ptr=cc->cur_buf_ptr=src; else { doc_e=doc_e->next; goto lgc_start2; } break; case DOCT_NEW_LINE: - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=&lex_zeros; + tempf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; tempf->line_start=doc_e->next; - tempf->line_num=doc_e->y+2; //+1 because NEW_LINE is on previous line, +1 because doc y starts at zero + tempf->line_num=doc_e->y+2;//+1 because NEW_LINE is on prev line +//+1 because doc y starts at zero cmp.compiled_lines++; - lx->last_U16='\n'; + cc->last_U16='\n'; goto lgc_done; case DOCT_TAB: - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=&lex_zeros; + tempf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; tempf->line_num=doc_e->y+1; - lx->last_U16='\t'; + cc->last_U16='\t'; goto lgc_done; case DOCT_PAGE_BREAK: - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=&lex_zeros; - tempf->line_num=doc_e->y+2; //TODO: should be a page down - lx->last_U16=CH_FORM_FEED; + tempf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; + tempf->line_num=doc_e->y+2; //TODO: should be a page down + cc->last_U16=CH_FORM_FEED; goto lgc_done; case DOCT_INS_BINARY: - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=&lex_zeros; + tempf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; tempf->line_num=doc_e->y+1; - Free(lx->cur_str); - lx->cur_str=NULL; - lx->cur_str_len=0; + Free(cc->cur_str); + cc->cur_str=NULL; + cc->cur_str_len=0; if (doc_e->bin_data) { ptr=MAlloc(doc_e->bin_data->size); if (doc_e->bin_data->data) MemCpy(ptr,doc_e->bin_data->data,doc_e->bin_data->size); - lx->cur_str=ptr; - lx->cur_str_len=doc_e->bin_data->size; + cc->cur_str=ptr; + cc->cur_str_len=doc_e->bin_data->size; } - lx->last_U16=TK_INS_BINARY; + cc->last_U16=TK_INS_BINARY; goto lgc_done; case DOCT_INS_BINARY_SIZE: - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=&lex_zeros; + tempf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; if (doc_e->bin_data) - lx->cur_i64=doc_e->bin_data->size; + cc->cur_i64=doc_e->bin_data->size; else - lx->cur_i64=0; + cc->cur_i64=0; tempf->line_num=doc_e->y+1; - lx->last_U16=TK_INS_BINARY_SIZE; + cc->last_U16=TK_INS_BINARY_SIZE; goto lgc_done; case DOCT_SHIFTED_Y: - if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) { + if (LexDollar(cc,doc,doc_e) && *(src=cc->dollar_buf)) { tempf->line_num=doc_e->y+1; - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; + tempf->buf_ptr=cc->cur_buf_ptr=src; } else { - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=&lex_zeros; + tempf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; tempf->line_num=doc_e->y+1; if (doc_e->attr<0) - lx->last_U16=TK_SUPERSCRIPT; + cc->last_U16=TK_SUPERSCRIPT; else if (doc_e->attr>0) - lx->last_U16=TK_SUBSCRIPT; + cc->last_U16=TK_SUBSCRIPT; else - lx->last_U16=TK_NORMALSCRIPT; + cc->last_U16=TK_NORMALSCRIPT; goto lgc_done; } break; @@ -253,9 +206,9 @@ lgc_start2: goto lgc_start2; case 0xFF: //nobound_switch default: - if (LexDollar(lx,doc,doc_e) && *(src=lx->dollar_buf)) { + if (LexDollar(cc,doc,doc_e) && *(src=cc->dollar_buf)) { tempf->line_num=doc_e->y+1; - tempf->buf=tempf->buf_ptr=lx->cur_buf_ptr=src; + tempf->buf_ptr=cc->cur_buf_ptr=src; } else { doc_e=doc_e->next; goto lgc_start2; @@ -264,34 +217,25 @@ lgc_start2: } if (doc_e!=doc) goto lgc_start1; - if (tempf!=&lx->lfns[0] || !(lx->flags&LF_DONT_FREE_BUF)) - DocDel(doc); - tempf->doc=tempf->buf=NULL; - Free(tempf->full_name); - tempf->full_name=NULL; + tempf->cur_entry=doc->root.last; //When take next, will still be end. } - tempf=lx->cur_lfn; - if (tempf!=&lx->lfns[0]) { - Free(tempf->full_name); - tempf->full_name=NULL; - Free(tempf->buf); - tempf->buf=NULL; - tempf1=tempf; - lx->cur_lfn=--tempf; - lx->cur_buf_ptr=tempf->buf_ptr; - lx->flags&=~LF_USE_LAST_U16; - if (!(lx->last_U16=tempf->last_U16)) + tempf=cc->lex_include_stk; + if (tempf->next) { + tempf=LexFilePop(cc); + cc->cur_buf_ptr=tempf->buf_ptr; + cc->flags&=~CCF_USE_LAST_U16; + if (!(cc->last_U16=tempf->last_U16)) goto lgc_start1; } else { - if (lx->flags & LF_PMT) { + if (cc->flags & CCF_PMT) { Free(tempf->buf); - lx->cur_buf_ptr=tempf->line_start= - tempf->buf_ptr=tempf->buf=CmpPrompt(TRUE); + tempf->buf=tempf->buf_ptr=tempf->line_start= + cc->cur_buf_ptr=CmdLinePmt; goto lgc_start1; } else { if (src) - lx->cur_buf_ptr=src-1; - lx->last_U16=TK_EOF; + cc->cur_buf_ptr=src-1; + cc->last_U16=TK_EOF; } } break; @@ -299,7 +243,7 @@ lgc_start2: case CH_FORM_FEED: goto lgc_start1; case '\n': - tempf=lx->cur_lfn; + tempf=cc->lex_include_stk; if (!(tempf->flags & LFSF_DOC)) { tempf->line_num++; cmp.compiled_lines++; @@ -309,35 +253,35 @@ lgc_start2: case 0xFF: //nobound_switch } lgc_done: - if (lx->last_U16==CH_SHIFT_SPACE) - lx->last_U16=CH_SPACE; - if (lx->opts & OPTF_ECHO && - lx->last_U16<256 && Bt(chars_bitmap_printable,lx->last_U16)) - '' lx->last_U16; + if (cc->last_U16==CH_SHIFT_SPACE) + cc->last_U16=CH_SPACE; + if (cc->opts & OPTF_ECHO && + cc->last_U16<256 && Bt(chars_bmp_printable,cc->last_U16)) + '' cc->last_U16; } - return lx->last_U16; + return cc->last_U16; } -U0 LexSkipEol(CLex *lx) +U0 LexSkipEol(CCmpCtrl *cc) {//$LK,"LexGetChar",A="MN:LexGetChar"$ to NULL until end-of-line. I64 ch; - do ch=$WW,0$LexGetChar(lx); - while (Bt(chars_bitmap_non_eol,ch)); + do ch=$WW,0$LexGetChar(cc); + while (Bt(chars_bmp_non_eol,ch)); } -U8 *LexFirstRem(CLex *lx,U8 *marker,I64 _len=NULL) +U8 *LexFirstRem(CCmpCtrl *cc,U8 *marker,I64 _len=NULL) {//$LK,"LexGetChar",A="MN:LexGetChar"$() chars making str until marker. U8 *result,*ptr; CQueVectU8 *tempv=QueVectU8New; I64 i,len=0; while (TRUE) { - i=LexGetChar(lx); + i=LexGetChar(cc); if (!i||StrOcc(marker,i)) break; QueVectU8Put(tempv,len++,i); } if (i) - Bts(&lx->flags,Lf_USE_LAST_U16); + Bts(&cc->flags,CCf_USE_LAST_U16); result=ptr=MAlloc(len+1); for (i=0;icur_lfn; - tempf->buf=src; - tempf->buf_ptr=src; - tempf->line_num=1; - tempf->line_start=src; - tempf->last_U16=0; - tempf->flags=0; + LexBackupLastChar(cc); + CLexFile *tempf=LexFilePush(cc); if (actual_file) tempf->full_name=StrNew(abs_filename); else tempf->full_name=StrNew(dsk.temp_filename); - lx->cur_buf_ptr=src; + tempf->line_num=1; + tempf->buf=tempf->buf_ptr=tempf->line_start=cc->cur_buf_ptr=src; } CDoc *LexDocRead(U8 *abs_filename,I64 flags) @@ -383,17 +321,17 @@ CDoc *LexDocRead(U8 *abs_filename,I64 flags) } -I64 cmp_type_flags_src_code[(DOCT_NUM_TYPES+63)/64]= -{1<cur_lfn; + LexBackupLastChar(cc); + tempf=LexFilePush(cc); } if (!doc_e) doc_e=doc->root.next; @@ -408,230 +346,37 @@ U0 LexAttachDoc(CLex *lx,CLexFile *tempf=NULL, if (doc_e!=doc) { col=ClampI64(col,doc_e->min_col,doc_e->max_col); tempf->line_start=doc_e; + tempf->buf=NULL; tempf->line_num=doc_e->y+1; if (doc_e->type_u8==DOCT_TEXT) { tempf->cur_entry=doc_e; - tempf->buf=doc_e->tag; tempf->buf_ptr=doc_e->tag; } else { - tempf->cur_entry=doc_e->last; //TODO: might be problem at begining of file - tempf->buf=&lex_zeros; + tempf->cur_entry=doc_e->last; //TODO: might be problem at begin of file tempf->buf_ptr=&lex_zeros; } tempf->flags=LFSF_DOC; } else {//TODO: DocDel(doc)? col=0; - tempf->line_start=&lex_zeros; - tempf->buf=CAlloc(1); - tempf->buf_ptr=&lex_zeros; + tempf->buf=tempf->buf_ptr=tempf->line_start=CAlloc(1); tempf->line_num=1; tempf->flags=0; } - lx->cur_buf_ptr=tempf->buf_ptr+col; + cc->cur_buf_ptr=tempf->buf_ptr+col; tempf->last_U16=0; } -U0 LexPush(CLex *lx) -{//Create token-stream save point. - CLexFile *tempf=lx->cur_lfn, - *tempf1=&lx->stk[lx->stk_ptr++]; - if (lx->stk_ptr>=LFN_STK_CNT) - LexExcept(lx,"Lex Stk overflow"); - LexBackupLastChar(lx); - if (tempf->last_U16) - lx->flags|=LF_USE_LAST_U16; - MemCpy(tempf1,tempf,sizeof(CLexFile)); -} - -U0 LexPop(CLex *lx) -{//Restore token-stream saved-point. - CLexFile *tempf=lx->cur_lfn, - *tempf1=&lx->stk[--lx->stk_ptr]; - lx->cur_buf_ptr=tempf1->buf_ptr; - if (lx->last_U16=tempf1->last_U16) - lx->flags|=LF_USE_LAST_U16; - else - lx->flags&=~LF_USE_LAST_U16; - MemCpy(tempf,tempf1,sizeof(CLexFile)); -} - -I64 MemberMetaData(U8 *needle_str,CMemberLst *haystack_member_lst) -{//Find meta data name, return meta data val. See $LK,"::/Demo/ClassMeta.CPP"$. - CMemberLstMeta *meta=haystack_member_lst->meta; - while (meta) { - if (!StrCmp(meta->str,needle_str)) - return meta->user_data; - meta=meta->next; - } - return 0; -} - -CMemberLstMeta *MemberMetaFind(U8 *needle_str,CMemberLst *haystack_member_lst) -{//Find meta data name, return meta data struct. See $LK,"::/Demo/ClassMeta.CPP"$. - CMemberLstMeta *meta=haystack_member_lst->meta; - while (meta) { - if (!StrCmp(meta->str,needle_str)) - return meta; - meta=meta->next; - } - return NULL; -} - -CMemberLst *MemberFind(U8 *needle_str,CHashClass *haystack_class) -{//Find class member. See $LK,"ClassRep",A="MN:ClassRep"$() and $LK,"DocFormDo",A="MN:DocFormDo"$(). - I64 i; - CMemberLst *tempm; - do { - tempm=haystack_class->member_lst; - while (tempm) { - if (!(i=StrCmp(tempm->str,needle_str))) { - tempm->use_cnt++; - return tempm; - } - if (i<=0) - tempm=tempm->left; - else - tempm=tempm->right; - } - } while (haystack_class=haystack_class->base_class); - return NULL; -} - -CMemberLst *MemberFind2(CHashClass *needle_class,CHashClass *haystack_class) -{//Find class member, just offset<0. See $LK,"ClassRep",A="MN:ClassRep"$() and $LK,"DocFormDo",A="MN:DocFormDo"$(). - CMemberLst *tempm; - tempm=haystack_class->member_lst2; - while (tempm) { - if (needle_class==tempm->member_class2) - return tempm; - if (needle_classmember_class2) - tempm=tempm->left2; - else - tempm=tempm->right2; - } - return NULL; -} - -U0 MemberAdd(CLex *lx,CMemberLst *tempm,CHashClass *tempc,I64 mode) -{ - U8 *st=tempm->str; - CMemberLst **tempm1,*tempm2; - CHashClass *tempc2; - if (MemberFind(st,tempc) && StrCmp(st,"pad") && StrCmp(st,"reserved") && StrCmp(st,"_anon_")) - LexExcept(lx,"Duplicate member at "); - if (mode==PRS1B_LOCAL_VAR) { - tempc2=tempm->member_class-tempm->member_class->ptr_stars_cnt; - if (Bt(&lx->opts,OPTf_WARN_DUP_TYPES) && MemberFind2(tempc2,tempc)) - LexWarn(lx,"Duplicate type at "); - } else - tempc2=NULL; - tempm->member_class2=tempc2; - - tempm1=&tempc->member_lst; - while (tempm2=*tempm1) { - if (StrCmp(tempm2->str,st)<=0) - tempm1=&tempm2->left; - else - tempm1=&tempm2->right; - } - *tempm1=tempm; - - if (tempc2) { - tempm1=&tempc->member_lst2; - while (tempm2=*tempm1) { - if (tempc2member_class2) - tempm1=&tempm2->left2; - else if (tempc2>tempm2->member_class2) - tempm1=&tempm2->right2; - else { - tempm1=NULL; - break; - } - } - if (tempm1) - *tempm1=tempm; - } - - tempm->left=NULL; - tempm->right=NULL; - tempm->left2=NULL; - tempm->right2=NULL; - tempm2=tempc->last_in_member_lst; - tempm2->next=tempc->last_in_member_lst=tempm; -} - -U0 MemberLstDel(CHashClass *tempc) -{ - CMemberLst *tempm,*tempm1; - CMemberLstMeta *temp_meta,*temp_meta1; - tempm=tempc->member_lst; - while (tempm) { - tempm1=tempm->next; - Free(tempm->str); - LinkedLstDel(tempm->dim.next); - if (tempm->flags & MLF_STR_DFT_AVAILABLE) - Free(tempm->dft_val); - if (tempm->flags & MLF_FUN) - HashDel(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); - temp_meta=tempm->meta; - while (temp_meta) { - temp_meta1=temp_meta->next; - Free(temp_meta->str); - if (temp_meta->flags&MLMF_IS_STR) - Free(temp_meta->user_data); - Free(temp_meta); - temp_meta=temp_meta1; - } - Free(tempm); - tempm=tempm1; - } - tempc->size=0; - tempc->last_in_member_lst=&tempc->member_lst; - tempc->member_lst=NULL; - tempc->member_lst2=NULL; - tempc->member_cnt=0; - if (tempc->type&HTT_FUN) - tempc(CHashFun *)->arg_cnt=0; -} - -I64 MemberLstSize(CHashClass *tempc) -{ - CMemberLst *tempm; - CMemberLstMeta *temp_meta; - I64 result=0; - tempm=tempc->member_lst; - while (tempm) { - result+=MSize2(tempm->str); - result+=LinkedLstSize(tempm->dim.next); - if (tempm->flags & MLF_STR_DFT_AVAILABLE) - result+=MSize2(tempm->dft_val); - if (tempm->flags & MLF_FUN) - result+=HashEntrySize2(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); - temp_meta=tempm->meta; - while (temp_meta) { - result+=MSize2(temp_meta->str); - if (temp_meta->flags&MLMF_IS_STR) - result+=MSize2(temp_meta->user_data); - result+=MSize2(temp_meta); - temp_meta=temp_meta->next; - } - result+=MSize2(tempm); - tempm=tempm->next; - } - return result; -} - -I64 LexInStr(CLex *lx,U8 *buf,I64 size,Bool *done) +I64 LexInStr(CCmpCtrl *cc,U8 *buf,I64 size,Bool *done) { I64 i=0,j,ch; *done=TRUE; while (iflags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; break; default: - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; buf[i++]='\\'; } } else if (ch=='$$') { buf[i++]='$$'; - if (lx->dollar_cnt) - lx->dollar_cnt--; - else if (LexGetChar(lx)!='$$') { - lx->dollar_cnt=1; - lx->flags|=LF_USE_LAST_U16; + if (cc->dollar_cnt) + cc->dollar_cnt--; + else if (LexGetChar(cc)!='$$') { + cc->dollar_cnt=1; + cc->flags|=CCF_USE_LAST_U16; } } else buf[i++]=ch; @@ -691,18 +436,18 @@ I64 LexInStr(CLex *lx,U8 *buf,I64 size,Bool *done) return i; } -I64 Lex(CLex *lx) +I64 Lex(CCmpCtrl *cc) {//Fetch next token. I64 i,j,k,ch; CHash *temph; Bool str_done,neg_e; U8 *fbuf,*buf2,*buf3,buf[LEX_MAX_IDENT]; - lx->last_line_num=lx->cur_lfn->line_num; + cc->last_line_num=cc->lex_include_stk->line_num; while (TRUE) { lex_cont: - nobound_switch (ch=LexGetChar(lx)) { + nobound_switch (ch=LexGetChar(cc)) { case 0: - return lx->token=TK_EOF; + return cc->token=TK_EOF; case TK_SUPERSCRIPT: ch='>'; goto lex_ident; @@ -713,8 +458,8 @@ lex_cont: ch='='; goto lex_ident; case '@': - if (lx->flags&LF_KEEP_AT_SIGN) { - lx->token=ch; + if (cc->flags&CCF_KEEP_AT_SIGN) { + cc->token=ch; goto lex_end; } case 'A'...'Z': @@ -727,9 +472,9 @@ lex_ident: while (TRUE) { if (i>=LEX_MAX_IDENT-1) //1 for terminator break; - else if (!(ch=LexGetChar(lx))) + else if (!(ch=LexGetChar(cc))) break; - else if (Bt(lx->chars_bitmap_alpha_numeric,ch)) + else if (Bt(cc->chars_bmp_alpha_numeric,ch)) buf[i++]=ch; else if (ch==TK_SUPERSCRIPT) buf[i++]='>'; @@ -738,133 +483,132 @@ lex_ident: else if (ch==TK_NORMALSCRIPT) buf[i++]='='; else { - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; break; } } buf[i++]=0; temph=NULL; - if (lx->htc.local_var_lst) - lx->local_var_entry=MemberFind(buf,lx->htc.local_var_lst); + if (cc->htc.local_var_lst) + cc->local_var_entry=MemberFind(buf,cc->htc.local_var_lst); else - lx->local_var_entry=NULL; - if (!lx->local_var_entry && lx->htc.hash_table_lst) - temph=HashFind(buf, - lx->htc.hash_table_lst,lx->htc.hash_mask); + cc->local_var_entry=NULL; + if (!cc->local_var_entry && cc->htc.hash_table_lst) + temph=HashFind(buf,cc->htc.hash_table_lst,cc->htc.hash_mask); if (temph) j=temph->type; else j=0; - if (j & HTT_DEFINE_STR && !(lx->flags & LF_NO_DEFINES)) { - LexIncludeStr(lx, - temph->str,StrNew(temph(CHashDefineStr *)->data),FALSE); - lx->cur_lfn->flags|=LFSF_DEFINE; + if (j & HTT_DEFINE_STR && !(cc->flags & CCF_NO_DEFINES)) { + LexIncludeStr(cc, + temph->str,StrNew(temph(CHashDefineStr *)->data),FALSE); + cc->lex_include_stk->flags|=LFSF_DEFINE; } else { - lx->hash_entry=temph; - Free(lx->cur_str); - lx->cur_str=StrNew(buf); - lx->cur_str_len=i; - lx->token=TK_IDENT; + cc->hash_entry=temph; + Free(cc->cur_str); + cc->cur_str=StrNew(buf); + cc->cur_str_len=i; + cc->token=TK_IDENT; goto lex_end; } break; case '0'...'9': i=ch-'0'; - ch=ToUpper(LexGetChar(lx)); + ch=ToUpper(LexGetChar(cc)); if (ch=='X') { while (TRUE) { - ch=ToUpper(LexGetChar(lx)); - if (Bt(chars_bitmap_hex_numeric,ch)) { + ch=ToUpper(LexGetChar(cc)); + if (Bt(chars_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else i=i<<4+ch-'A'+10; } else { - lx->cur_i64=i; - lx->flags|=LF_USE_LAST_U16; - lx->token=TK_INTEGER; + cc->cur_i64=i; + cc->flags|=CCF_USE_LAST_U16; + cc->token=TK_INTEGER; goto lex_end; } } } else if (ch=='B') { while (TRUE) { - ch=LexGetChar(lx); + ch=LexGetChar(cc); if (ch=='0') i=i<<1; else if (ch=='1') i=i<<1+1; else { - lx->cur_i64=i; - lx->flags|=LF_USE_LAST_U16; - lx->token=TK_INTEGER; + cc->cur_i64=i; + cc->flags|=CCF_USE_LAST_U16; + cc->token=TK_INTEGER; goto lex_end; } } } while (TRUE) { - if (Bt(chars_bitmap_dec_numeric,ch)) + if (Bt(chars_bmp_dec_numeric,ch)) i=i*10+ch-'0'; else { if (ch=='.' || ch=='e' || ch=='E') break; lex_is_int: - lx->cur_i64=i; - lx->flags|=LF_USE_LAST_U16; - lx->token=TK_INTEGER; + cc->cur_i64=i; + cc->flags|=CCF_USE_LAST_U16; + cc->token=TK_INTEGER; goto lex_end; } - ch=LexGetChar(lx); + ch=LexGetChar(cc); } if (ch=='.') { - ch=LexGetChar(lx); + ch=LexGetChar(cc); if (ch=='.') { - lx->flags|=LF_LAST_WAS_DOT; + cc->flags|=CCF_LAST_WAS_DOT; goto lex_is_int; } } lex_float_start: k=0; while (TRUE) { - if (Bt(chars_bitmap_dec_numeric,ch)) { + if (Bt(chars_bmp_dec_numeric,ch)) { i=i*10+ch-'0'; k++; } else { if (ch=='e' || ch=='E') break; - lx->cur_f64=i*Pow10I64(-k); - lx->flags|=LF_USE_LAST_U16; - lx->token=TK_F64; + cc->cur_f64=i*Pow10I64(-k); + cc->flags|=CCF_USE_LAST_U16; + cc->token=TK_F64; goto lex_end; } - ch=LexGetChar(lx); + ch=LexGetChar(cc); } - ch=LexGetChar(lx); + ch=LexGetChar(cc); neg_e=FALSE; if (ch=='-') { neg_e=TRUE; - ch=LexGetChar(lx); + ch=LexGetChar(cc); } j=0; while (TRUE) { - if (Bt(chars_bitmap_dec_numeric,ch)) + if (Bt(chars_bmp_dec_numeric,ch)) j=j*10+ch-'0'; else { if (neg_e) - lx->cur_f64=i*Pow10I64(-j-k); + cc->cur_f64=i*Pow10I64(-j-k); else - lx->cur_f64=i*Pow10I64(j-k); - lx->flags|=LF_USE_LAST_U16; - lx->token=TK_F64; + cc->cur_f64=i*Pow10I64(j-k); + cc->flags|=CCF_USE_LAST_U16; + cc->token=TK_F64; goto lex_end; } - ch=LexGetChar(lx); + ch=LexGetChar(cc); } break; case '"': - lx->flags|=LF_IN_QUOTES; + cc->flags|=CCF_IN_QUOTES; buf2=NULL; i=0; do { - j=LexInStr(lx,buf,LEX_MAX_IDENT,&str_done); + j=LexInStr(cc,buf,LEX_MAX_IDENT,&str_done); buf3=MAlloc(i+j); if (buf2) { MemCpy(buf3,buf2,i); @@ -877,53 +621,37 @@ lex_float_start: } i+=j; } while (!str_done); - Free(lx->cur_str); - lx->cur_str=MAlloc(i); - MemCpy(lx->cur_str,buf2,i); + Free(cc->cur_str); + cc->cur_str=MAlloc(i); + MemCpy(cc->cur_str,buf2,i); Free(buf2); - lx->cur_str_len=i; - lx->flags&=~LF_IN_QUOTES; - lx->token=TK_STR; + cc->cur_str_len=i; + cc->flags&=~CCF_IN_QUOTES; + cc->token=TK_STR; goto lex_end; case '\'': - if (!(ch=LexGetChar(lx))) + if (!(ch=LexGetChar(cc))) k='\''; else { k=0; if (ch!='\'') for (j=0;j<8;j++) { if (ch=='\\') { - switch (ch=LexGetChar(lx)) { - case 'n': - k.u8[j]='\n'; - break; - case 'r': - k.u8[j]='\r'; - break; - case '"': - k.u8[j]='"'; - break; - case '\'': - k.u8[j]='\''; - break; - case '\`': - k.u8[j]='\`'; - break; - case '\\': - k.u8[j]='\\'; - break; - case 't': - k.u8[j]='\t'; - break; - case '0': - k.u8[j]=0; - break; + switch (ch=LexGetChar(cc)) { + case 'n': k.u8[j]='\n'; break; + case 'r': k.u8[j]='\r'; break; + case '"': k.u8[j]='"'; break; + case '\'': k.u8[j]='\''; break; + case '\`': k.u8[j]='\`'; break; + case '\\': k.u8[j]='\\'; break; + case 't': k.u8[j]='\t'; break; + case '0': k.u8[j]=0; break; case 'x': case 'X': i=0; while (TRUE) { - ch=ToUpper(LexGetChar(lx)); - if (Bt(chars_bitmap_hex_numeric,ch)) { + ch=ToUpper(LexGetChar(cc)); + if (Bt(chars_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else @@ -932,73 +660,73 @@ lex_float_start: break; } k.u8[j]=i; - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; break; default: k.u8[j]='\\'; - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; } } else if (ch=='$$') { - ch=LexGetChar(lx); + ch=LexGetChar(cc); k.u8[j]='$$'; if (ch!='$$') - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; } else k.u8[j]=ch; - if (!(ch=LexGetChar(lx)) || ch=='\'') + if (!(ch=LexGetChar(cc)) || ch=='\'') break; } } - lx->cur_i64=k; - lx->token=TK_CHAR_CONST; + cc->cur_i64=k; + cc->token=TK_CHAR_CONST; goto lex_end; case '#': - if (lx->flags&LF_KEEP_NUM_SIGN) { - lx->token=ch; + if (cc->flags&CCF_KEEP_NUM_SIGN) { + cc->token=ch; goto lex_end; } - if (Lex(lx)!=TK_IDENT) //skip '#' + if (Lex(cc)!=TK_IDENT) //skip '#' goto lex_end; - if (!(temph=lx->hash_entry)) + if (!(temph=cc->hash_entry)) goto lex_end; if (!(temph->type & HTT_KEYWORD)) goto lex_end; switch (i=temph(CHashGeneric *)->user_data0) { case KW_INCLUDE: - if (Lex(lx)!=TK_STR) + if (Lex(cc)!=TK_STR) goto lex_end; - fbuf=DftExt(lx->cur_str,"CPP.Z"); + fbuf=DftExt(cc->cur_str,"CPP.Z"); buf2=FileNameAbs(fbuf); Free(fbuf); if (Bt(&sys_run_level,RLf_DOC)) - LexAttachDoc(lx,,,buf2); + LexAttachDoc(cc,,,buf2); else - LexIncludeStr(lx,buf2,FileRead(buf2),TRUE); + LexIncludeStr(cc,buf2,FileRead(buf2),TRUE); Free(buf2); break; case KW_DEFINE: - lx->flags|=LF_NO_DEFINES; - if (Lex(lx)==TK_IDENT) { + cc->flags|=CCF_NO_DEFINES; + if (Lex(cc)==TK_IDENT) { temph=CAlloc(sizeof(CHashDefineStr)); - temph->str=lx->cur_str; - lx->cur_str=0; + temph->str=cc->cur_str; + cc->cur_str=0; temph->type=HTT_DEFINE_STR; - HashSrcFileSet(lx,temph); + HashSrcFileSet(cc,temph); - do ch=LexGetChar(lx); //skip space between define name and start - while (Bt(chars_bitmap_non_eol_white_space,ch)); + do ch=LexGetChar(cc); //skip space between define name and start + while (Bt(chars_bmp_non_eol_white_space,ch)); i=j=0; buf2=NULL; if (ch) { do { if (ch=='\\') { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch!='\r' && ch!='\n') { buf[j++]='\\'; buf[j++]=ch; - } else if (ch=='\r' && LexGetChar(lx)!='\n') - lx->flags|=LF_USE_LAST_U16; + } else if (ch=='\r' && LexGetChar(cc)!='\n') + cc->flags|=CCF_USE_LAST_U16; } else { buf[j++]='\\'; break; @@ -1007,20 +735,20 @@ lex_float_start: buf[j++]=ch; else break; - while (ch=LexGetChar(lx)) { + while (ch=LexGetChar(cc)) { if (ch=='/') { - ch=LexGetChar(lx); + ch=LexGetChar(cc); if (ch=='/') { - do ch=LexGetChar(lx); - while (Bt(chars_bitmap_non_eol,ch)); + do ch=LexGetChar(cc); + while (Bt(chars_bmp_non_eol,ch)); break; } else { buf[j++]='/'; - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; } } else if (ch=='\\') break; - else if (Bt(chars_bitmap_non_eol,ch)) + else if (Bt(chars_bmp_non_eol,ch)) buf[j++]=ch; else break; @@ -1055,49 +783,50 @@ lex_float_start: } temph(CHashDefineStr *)->data=buf2; temph(CHashDefineStr *)->cnt=-1; - HashAdd(temph,lx->htc.define_hash_table); + HashAdd(temph,cc->htc.define_hash_table); } - lx->flags&=~LF_NO_DEFINES; + cc->flags&=~CCF_NO_DEFINES; break; case KW_ELSE: - if (lx->flags & LF_IN_IF) { - lx->token=TK_ELSE; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_ELSE; goto lex_end; } lex_else: j=1; do { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch=='#') { - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - i=PrsKeyWord(lx); - if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || i==KW_IFAOT || i==KW_IFJIT) + i=PrsKeyWord(cc); + if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || + i==KW_IFAOT || i==KW_IFJIT) j++; else if (i==KW_ENDIF) j--; } } else { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } } while (j); break; case KW_IF: - if (lx->flags & LF_IN_IF) { - lx->token=TK_IF; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_IF; goto lex_end; } lex_if: - lx->flags|=LF_IN_IF; - if (!Lex(lx)) { - lx->flags&=~LF_IN_IF; + cc->flags|=CCF_IN_IF; + if (!Lex(cc)) { + cc->flags&=~CCF_IN_IF; goto lex_end; } - if (LexExpression(lx)) { - lx->flags&=~LF_IN_IF; - switch (lx->token) { + if (LexExpression(cc)) { + cc->flags&=~CCF_IN_IF; + switch (cc->token) { case TK_IF: goto lex_if; case TK_IFDEF: goto lex_ifdef; case TK_IFNDEF: goto lex_ifndef; @@ -1108,19 +837,22 @@ lex_if: default: goto lex_end; } } else { - lx->flags&=~LF_IN_IF; - if (lx->token!=TK_ENDIF && lx->token!=TK_ELSE) { - if (lx->token==TK_IF || lx->token==TK_IFDEF || lx->token==TK_IFNDEF|| lx->token==TK_IFAOT || lx->token==TK_IFJIT) + cc->flags&=~CCF_IN_IF; + if (cc->token!=TK_ENDIF && cc->token!=TK_ELSE) { + if (cc->token==TK_IF || cc->token==TK_IFDEF || + cc->token==TK_IFNDEF || cc->token==TK_IFAOT || + cc->token==TK_IFJIT) j=2; else j=1; do { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch=='#') { - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - i=PrsKeyWord(lx); - if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || i==KW_IFAOT || i==KW_IFJIT) + i=PrsKeyWord(cc); + if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || + i==KW_IFAOT || i==KW_IFJIT) j++; else if (i==KW_ENDIF) j--; @@ -1128,7 +860,7 @@ lex_if: break; } } else { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } } while (j); @@ -1136,29 +868,30 @@ lex_if: } break; case KW_IFDEF: - if (lx->flags & LF_IN_IF) { - lx->token=TK_IFDEF; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_IFDEF; goto lex_end; } lex_ifdef: - lx->flags|=LF_NO_DEFINES; - if (!Lex(lx)) { - lx->flags&=~LF_NO_DEFINES; + cc->flags|=CCF_NO_DEFINES; + if (!Lex(cc)) { + cc->flags&=~CCF_NO_DEFINES; goto lex_end; } - lx->flags&=~LF_NO_DEFINES; - if (lx->token!=TK_IDENT) + cc->flags&=~CCF_NO_DEFINES; + if (cc->token!=TK_IDENT) goto lex_end; - if (lx->hash_entry) + if (cc->hash_entry) goto lex_cont; j=1; do { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch=='#') { - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - i=PrsKeyWord(lx); - if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || i==KW_IFAOT || i==KW_IFJIT) + i=PrsKeyWord(cc); + if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || + i==KW_IFAOT || i==KW_IFJIT) j++; else if (i==KW_ENDIF) j--; @@ -1166,35 +899,36 @@ lex_ifdef: break; } } else { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } } while (j); break; case KW_IFNDEF: - if (lx->flags & LF_IN_IF) { - lx->token=TK_IFNDEF; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_IFNDEF; goto lex_end; } lex_ifndef: - lx->flags|=LF_NO_DEFINES; - if (!Lex(lx)) { - lx->flags&=~LF_NO_DEFINES; + cc->flags|=CCF_NO_DEFINES; + if (!Lex(cc)) { + cc->flags&=~CCF_NO_DEFINES; goto lex_end; } - lx->flags&=~LF_NO_DEFINES; - if (lx->token!=TK_IDENT) + cc->flags&=~CCF_NO_DEFINES; + if (cc->token!=TK_IDENT) goto lex_end; - if (!lx->hash_entry) + if (!cc->hash_entry) goto lex_cont; j=1; do { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch=='#') { - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - i=PrsKeyWord(lx); - if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || i==KW_IFAOT || i==KW_IFJIT) + i=PrsKeyWord(cc); + if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || + i==KW_IFAOT || i==KW_IFJIT) j++; else if (i==KW_ENDIF) j--; @@ -1202,27 +936,28 @@ lex_ifndef: break; } } else { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } } while (j); break; case KW_IFAOT: - if (lx->flags & LF_IN_IF) { - lx->token=TK_IFAOT; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_IFAOT; goto lex_end; } lex_ifaot: - if (lx->flags & LF_AOT_COMPILE) + if (cc->flags & CCF_AOT_COMPILE) goto lex_cont; j=1; do { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch=='#') { - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - i=PrsKeyWord(lx); - if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || i==KW_IFAOT || i==KW_IFJIT) + i=PrsKeyWord(cc); + if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || + i==KW_IFAOT || i==KW_IFJIT) j++; else if (i==KW_ENDIF) j--; @@ -1230,27 +965,28 @@ lex_ifaot: break; } } else { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } } while (j); break; case KW_IFJIT: - if (lx->flags & LF_IN_IF) { - lx->token=TK_IFAOT; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_IFAOT; goto lex_end; } lex_ifjit: - if (!(lx->flags & LF_AOT_COMPILE)) + if (!(cc->flags & CCF_AOT_COMPILE)) goto lex_cont; j=1; do { - if (ch=LexGetChar(lx)) { + if (ch=LexGetChar(cc)) { if (ch=='#') { - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - i=PrsKeyWord(lx); - if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || i==KW_IFAOT || i==KW_IFJIT) + i=PrsKeyWord(cc); + if (i==KW_IF || i==KW_IFDEF || i==KW_IFNDEF || + i==KW_IFAOT || i==KW_IFJIT) j++; else if (i==KW_ENDIF) j--; @@ -1258,82 +994,78 @@ lex_ifjit: break; } } else { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } } while (j); break; case KW_ENDIF: - if (lx->flags & LF_IN_IF) { - lx->token=TK_ENDIF; + if (cc->flags & CCF_IN_IF) { + cc->token=TK_ENDIF; goto lex_end; } break; case KW_ASSERT: - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - if (!LexExpression(lx)) - LexWarn(lx,"Assert Failed "); + if (!LexExpression(cc)) + LexWarn(cc,"Assert Failed "); goto lex_end; case KW_EXE: - if (!Lex(lx)) + if (!Lex(cc)) goto lex_end; - PrsStreamBlk(lx); + PrsStreamBlk(cc); goto lex_end; case KW_HELP_INDEX: - if (Lex(lx)!=TK_STR) + if (Lex(cc)!=TK_STR) goto lex_end; - Free(lx->cur_help_index); - if (*lx->cur_str) - lx->cur_help_index=lx->cur_str; - else - lx->cur_help_index=NULL; - lx->cur_str=NULL; + Free(cc->cur_help_index); + cc->cur_help_index=LexExtStr(cc,,FALSE); break; case KW_HELP_FILE: - if (Lex(lx)!=TK_STR) + if (Lex(cc)!=TK_STR) goto lex_end; temph=CAlloc(sizeof(CHashSrcSym)); - fbuf=DftExt(lx->cur_str,"TXT.Z"); + fbuf=DftExt(cc->cur_str,"TXT.Z"); temph->str=FileNameAbs(fbuf); Free(fbuf); temph->type=HTT_HELP_FILE|HTF_PUBLIC; - HashSrcFileSet(lx,temph); - HashAdd(temph,lx->htc.glbl_hash_table); + HashSrcFileSet(cc,temph); + HashAdd(temph,cc->htc.glbl_hash_table); break; } break; case '\n': - if (!(lx->flags&LF_KEEP_NEW_LINES)) + if (!(cc->flags&CCF_KEEP_NEW_LINES)) break; //else fall through case TK_INS_BINARY: case TK_INS_BINARY_SIZE: - lx->token=ch; + cc->token=ch; goto lex_end; case '.': - if (lx->flags&LF_KEEP_DOT) { - lx->token=ch; + if (cc->flags&CCF_KEEP_DOT) { + cc->token=ch; goto lex_end; } - if (lx->flags&LF_LAST_WAS_DOT) { - lx->flags&=~LF_LAST_WAS_DOT; + if (cc->flags&CCF_LAST_WAS_DOT) { + cc->flags&=~CCF_LAST_WAS_DOT; goto lex_dot_dot; } - ch=LexGetChar(lx); + ch=LexGetChar(cc); if ('0'<=ch<='9') { i=0; goto lex_float_start; } else if (ch=='.') { lex_dot_dot: - lx->token=TK_DOT_DOT; - if (LexGetChar(lx)=='.') - lx->token=TK_DOT_DOT_DOT; + cc->token=TK_DOT_DOT; + if (LexGetChar(cc)=='.') + cc->token=TK_DOT_DOT_DOT; else - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; goto lex_end; } - lx->flags|=LF_USE_LAST_U16; - lx->token='.'; + cc->flags|=CCF_USE_LAST_U16; + cc->token='.'; goto lex_end; case '!': case '$$'...'&': @@ -1346,47 +1078,47 @@ lex_dot_dot: case '`': if (!(i=cmp.dual_U16_tokens1[ch])) { if (ch=='$$') { - ch=LexGetChar(lx); + ch=LexGetChar(cc); if (ch=='$$') { - lx->token='$$'; + cc->token='$$'; goto lex_end; } else if (ch) { - do ch=LexGetChar(lx); + do ch=LexGetChar(cc); while (ch && ch!='$$'); if (!ch) { - lx->token=TK_EOF; + cc->token=TK_EOF; goto lex_end; } else goto lex_cont; } else { - lx->flags|=LF_USE_LAST_U16; - lx->token='$$'; + cc->flags|=CCF_USE_LAST_U16; + cc->token='$$'; goto lex_end; } } else { - lx->token=ch; + cc->token=ch; goto lex_end; } } else { - j=LexGetChar(lx); + j=LexGetChar(cc); if (i.u16[0]==j) { i>>=16; if (!i) {// "/*" j=1; do { - if (!(ch=LexGetChar(lx))) - return lx->token=TK_EOF; + if (!(ch=LexGetChar(cc))) + return cc->token=TK_EOF; lex_check_comment: if (ch=='*') { - if (!(ch=LexGetChar(lx))) - return lx->token=TK_EOF; + if (!(ch=LexGetChar(cc))) + return cc->token=TK_EOF; if (ch=='/') j--; else goto lex_check_comment; } else if (ch=='/') { - if (!(ch=LexGetChar(lx))) - return lx->token=TK_EOF; + if (!(ch=LexGetChar(cc))) + return cc->token=TK_EOF; if (ch=='*') j++; else @@ -1395,7 +1127,7 @@ lex_check_comment: } while (j); goto lex_cont; } else { - lx->token=i; + cc->token=i; goto lex_end; } } @@ -1403,146 +1135,45 @@ lex_check_comment: if (i.u16[0]==j) { i>>=16; if (!i) {// "//" - LexSkipEol(lx); - if (lx->flags&LF_KEEP_NEW_LINES) { - lx->token='\n'; + LexSkipEol(cc); + if (cc->flags&CCF_KEEP_NEW_LINES) { + cc->token='\n'; goto lex_end; } else goto lex_cont; } else { if (i==TK_SHL || i==TK_SHR) { - j=LexGetChar(lx); + j=LexGetChar(cc); if (j=='=') { if (i==TK_SHL) i=TK_SHL_EQUAL; else i=TK_SHR_EQUAL; } else - lx->flags|=LF_USE_LAST_U16; + cc->flags|=CCF_USE_LAST_U16; } - lx->token=i; + cc->token=i; goto lex_end; } } if (i=cmp.dual_U16_tokens3[ch]) { if (i.u16[0]==j) { - lx->token=i.u16[1]; + cc->token=i.u16[1]; goto lex_end; } } } - lx->flags|=LF_USE_LAST_U16; - lx->token=ch; + cc->flags|=CCF_USE_LAST_U16; + cc->token=ch; goto lex_end; - } + } case TK_NUM_TK: default: break; } } lex_end: - LexGetChar(lx); //Do this so WAS_NEW_LINE is right - lx->flags|=LF_USE_LAST_U16; - return lx->token; -} - -U8 *LexExtStr(CLex *lx,I64 *_size=NULL) -{//Lex $LK,"TK_STR",A="MN:TK_STR"$'s to one combined str. _size includes terminator. - I64 len=lx->cur_str_len,len1,len2; - U8 *st=lx->cur_str,*st1,*st2; - lx->cur_str=NULL; - while (lx->token==TK_STR) { - st1=st; - len1=len; - if (Lex(lx)==TK_STR) { - len2=lx->cur_str_len; - st2=lx->cur_str; - lx->cur_str=NULL; - len=len1+len2-1; - st=MAlloc(len); - if (len1>1) - MemCpy(st,st1,len1-1); - MemCpy(st+len1-1,st2,len2); - Free(st1); - Free(st2); - } - } - if (_size) *_size=len; - return st; -} - -U8 *LexPutLine(CLex *lx,U8 *start) -{//Print cur pos to end of line to StdOut. - I64 ch; - U8 *ptr; - if (!start) return NULL; - if (lx->cur_lfn->flags&LFSF_DOC) - return DocPutLine(lx->cur_lfn->doc,start); - else { - ptr=start; - while (ch=*ptr++) { - if (ch=='\n') { - if (*ptr=='\r') - ptr++; - break; - } else if (ch=='\r') { - if (*ptr=='\n') - ptr++; - break; - } - '' ch; - } - if (!ch) ptr--; - '\n'; - return ptr; - } - return NULL; -} - -U0 LexPutPos(CLex *lx) -{//Print token, line link and, then, $LK,"LexPutLine",A="MN:LexPutLine"$(). - LexPutToken(lx); - FixSet(lx->cur_lfn->full_name,lx->cur_lfn->line_num); - if (IsRaw) - "%s,%d ",lx->cur_lfn->full_name,lx->cur_lfn->line_num; - else { - PutFileLink(lx->cur_lfn->full_name,lx->cur_lfn->line_num); - AdamErr("%s,%d\n",lx->cur_lfn->full_name,lx->cur_lfn->line_num); - '' CH_SPACE; - } - LexPutLine(lx,lx->cur_lfn->line_start); -} - -U0 LexWarn(CLex *lx,U8 *str=NULL) -{//Print warn msg, then, $LK,"LexPutPos",A="MN:LexPutPos"$(). - if (str) PrintWarn(str); - if (lx->htc.fun) { - "in fun '%s'.\n",lx->htc.fun->str; - if (IsRaw) - "%s\n",lx->htc.fun->src_link; - else { - "$$LK,\"%s\"$$\n",lx->htc.fun->src_link; - AdamErr("%s\n",lx->htc.fun->src_link); - } - } else - LexPutPos(lx); - lx->warning_cnt++; -} - -U0 LexExcept(CLex *lx,U8 *str=NULL) -{//Print err msg, $LK,"LexPutPos",A="MN:LexPutPos"$() and throw exception. - if (!Bt(&sys_run_level,RLf_ADAM_SERVER)) { - Preempt(OFF); - Raw(ON); - "Note: Still in boot phase.\n"; - } - if (str) PrintErr(str); - if (!IsRaw) - AdamErr("Task:%08X %s\n",Fs,str); - LexPutPos(lx); - lx->error_cnt++; - FlushMsgs; - if (!Bt(&sys_run_level,RLf_ADAM_SERVER)) - Dbg("Type \"Fix;\""); - throw('Compiler'); + LexGetChar(cc); //Do this so WAS_NEW_LINE is right + cc->flags|=CCF_USE_LAST_U16; + return cc->token; } diff --git a/Compiler/LexLib.CPP b/Compiler/LexLib.CPP new file mode 100644 index 0000000..cd53159 --- /dev/null +++ b/Compiler/LexLib.CPP @@ -0,0 +1,246 @@ +U0 LexBackupLastChar(CCmpCtrl *cc) +{ + CLexFile *tempf=cc->lex_include_stk; + tempf->buf_ptr=cc->cur_buf_ptr; + if (cc->flags & CCF_USE_LAST_U16) { + tempf->last_U16=cc->last_U16; + cc->flags&=~CCF_USE_LAST_U16; + } else + tempf->last_U16=0; +} + +U0 LexPush(CCmpCtrl *cc) +{//Create token-stream save point. + CLexFile *tempf; + LexBackupLastChar(cc); + if (cc->lex_include_stk->last_U16) + cc->flags|=CCF_USE_LAST_U16; + tempf=MAllocIdentical(cc->lex_include_stk); + tempf->next=cc->lex_prs_stk; + cc->lex_prs_stk=tempf; +} + +U0 LexPopRestore(CCmpCtrl *cc) +{//Restore token-stream saved-point. +//Bad things can happen if you cross an #include file boundary. + CLexFile *tempf=cc->lex_prs_stk; + cc->cur_buf_ptr=tempf->buf_ptr; + if (cc->last_U16=tempf->last_U16) + cc->flags|=CCF_USE_LAST_U16; + else + cc->flags&=~CCF_USE_LAST_U16; + MemCpy(cc->lex_include_stk(U8 *)+sizeof(U8 *),tempf(U8 *)+sizeof(U8 *), + sizeof(CLexFile)-sizeof(U8 *)); + cc->lex_prs_stk=tempf->next; + Free(tempf); +} + +U0 LexPopNoRestore(CCmpCtrl *cc) +{//Don't restore token-stream saved-point. + CLexFile *tempf=cc->lex_prs_stk; + cc->lex_prs_stk=tempf->next; + Free(tempf); +} + +I64 MemberMetaData(U8 *needle_str,CMemberLst *haystack_member_lst) +{//Find meta data name, return meta data val. See $LK,"::/Demo/ClassMeta.CPP"$. + CMemberLstMeta *meta=haystack_member_lst->meta; + while (meta) { + if (!StrCmp(meta->str,needle_str)) + return meta->user_data; + meta=meta->next; + } + return 0; +} + +CMemberLstMeta *MemberMetaFind(U8 *needle_str,CMemberLst *haystack_member_lst) +{//Find meta data name, return meta data struct. See $LK,"::/Demo/ClassMeta.CPP"$. + CMemberLstMeta *meta=haystack_member_lst->meta; + while (meta) { + if (!StrCmp(meta->str,needle_str)) + return meta; + meta=meta->next; + } + return NULL; +} + +CMemberLst *MemberFind(U8 *needle_str,CHashClass *haystack_class) +{//Find class member. See $LK,"ClassRep",A="MN:ClassRep"$() and $LK,"DocForm",A="MN:DocForm"$(). + I64 i; + CMemberLst *tempm; + do { + tempm=haystack_class->member_lst; + while (tempm) { + if (!(i=StrCmp(tempm->str,needle_str))) { + tempm->use_cnt++; + return tempm; + } + if (i<=0) + tempm=tempm->left; + else + tempm=tempm->right; + } + } while (haystack_class=haystack_class->base_class); + return NULL; +} + +CMemberLst *MemberFind2(CHashClass *needle_class,CHashClass *haystack_class) +{//Find class member, just offset<0. See $LK,"ClassRep",A="MN:ClassRep"$() and $LK,"DocForm",A="MN:DocForm"$(). + CMemberLst *tempm; + tempm=haystack_class->member_lst2; + while (tempm) { + if (needle_class==tempm->member_class2) + return tempm; + if (needle_classmember_class2) + tempm=tempm->left2; + else + tempm=tempm->right2; + } + return NULL; +} + +U0 MemberAdd(CCmpCtrl *cc,CMemberLst *tempm,CHashClass *tempc,I64 mode) +{ + U8 *st=tempm->str; + CMemberLst **tempm1,*tempm2; + CHashClass *tempc2; + if (MemberFind(st,tempc) && StrCmp(st,"pad") && + StrCmp(st,"reserved") && StrCmp(st,"_anon_")) + LexExcept(cc,"Duplicate member at "); + if (mode==PRS1B_LOCAL_VAR) { + tempc2=tempm->member_class-tempm->member_class->ptr_stars_cnt; + if (Bt(&cc->opts,OPTf_WARN_DUP_TYPES) && MemberFind2(tempc2,tempc)) + LexWarn(cc,"Duplicate type at "); + } else + tempc2=NULL; + tempm->member_class2=tempc2; + + tempm1=&tempc->member_lst; + while (tempm2=*tempm1) { + if (StrCmp(tempm2->str,st)<=0) + tempm1=&tempm2->left; + else + tempm1=&tempm2->right; + } + *tempm1=tempm; + + if (tempc2) { + tempm1=&tempc->member_lst2; + while (tempm2=*tempm1) { + if (tempc2member_class2) + tempm1=&tempm2->left2; + else if (tempc2>tempm2->member_class2) + tempm1=&tempm2->right2; + else { + tempm1=NULL; + break; + } + } + if (tempm1) + *tempm1=tempm; + } + + tempm->left=NULL; + tempm->right=NULL; + tempm->left2=NULL; + tempm->right2=NULL; + tempm2=tempc->last_in_member_lst; + tempm2->next=tempc->last_in_member_lst=tempm; +} + +CMemberLst *MemberLstNew(I64 _reg) +{ + CMemberLst *result=CAlloc(sizeof(CMemberLst)); + result->reg=_reg; + return result; +} + +U0 MemberLstDel(CHashClass *tempc) +{ + CMemberLst *tempm,*tempm1; + CMemberLstMeta *temp_meta,*temp_meta1; + tempm=tempc->member_lst; + while (tempm) { + tempm1=tempm->next; + Free(tempm->str); + LinkedLstDel(tempm->dim.next); + if (tempm->flags & MLF_STR_DFT_AVAILABLE) + Free(tempm->dft_val); + if (tempm->flags & MLF_FUN) + HashDel(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); + temp_meta=tempm->meta; + while (temp_meta) { + temp_meta1=temp_meta->next; + Free(temp_meta->str); + if (temp_meta->flags&MLMF_IS_STR) + Free(temp_meta->user_data); + Free(temp_meta); + temp_meta=temp_meta1; + } + Free(tempm); + tempm=tempm1; + } + tempc->size=0; + tempc->last_in_member_lst=&tempc->member_lst; + tempc->member_lst=NULL; + tempc->member_lst2=NULL; + tempc->member_cnt=0; + if (tempc->type&HTT_FUN) + tempc(CHashFun *)->arg_cnt=0; +} + +I64 MemberLstSize(CHashClass *tempc) +{ + CMemberLst *tempm; + CMemberLstMeta *temp_meta; + I64 result=0; + tempm=tempc->member_lst; + while (tempm) { + result+=MSize2(tempm->str); + result+=LinkedLstSize(tempm->dim.next); + if (tempm->flags & MLF_STR_DFT_AVAILABLE) + result+=MSize2(tempm->dft_val); + if (tempm->flags & MLF_FUN) + result+=HashEntrySize2(tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); + temp_meta=tempm->meta; + while (temp_meta) { + result+=MSize2(temp_meta->str); + if (temp_meta->flags&MLMF_IS_STR) + result+=MSize2(temp_meta->user_data); + result+=MSize2(temp_meta); + temp_meta=temp_meta->next; + } + result+=MSize2(tempm); + tempm=tempm->next; + } + return result; +} + +U8 *LexExtStr(CCmpCtrl *cc,I64 *_size=NULL,Bool lex_next=TRUE) +{//Lex $LK,"TK_STR",A="MN:TK_STR"$'s to one combined str. _size includes terminator. + I64 len=cc->cur_str_len,len1,len2; + U8 *st=cc->cur_str,*st1,*st2; + cc->cur_str=NULL; + while (cc->token==TK_STR) { + st1=st; + len1=len; + if (!lex_next && LexGetChar(cc)!='\\') { + cc->flags|=CCF_USE_LAST_U16; + break; + } + if (Lex(cc)==TK_STR) { + len2=cc->cur_str_len; + st2=cc->cur_str; + cc->cur_str=NULL; + len=len1+len2-1; + st=MAlloc(len); + if (len1>1) + MemCpy(st,st1,len1-1); + MemCpy(st+len1-1,st2,len2); + Free(st1); + Free(st2); + } + } + if (_size) *_size=len; + return st; +} diff --git a/Compiler/OpCodes.TXT b/Compiler/OpCodes.TXT index d5571d8..a542be0 100644 --- a/Compiler/OpCodes.TXT +++ b/Compiler/OpCodes.TXT @@ -1,9 +1,9 @@ -/* +/* See $LK,"AsmHashLoad",A="MN:AsmHashLoad"$(). + '!'= don't switch modes '&'= default - '-'= NoRex - '='= Rex 0x48 only if 64-bit code segment - '~'= Rex 0x40 + '%'= Not allowed in 64-bit mode + '='= Rex 0x48 only if 64-bit mode '`'= Rex only R8-R15 '^'= Rex xor-like ':'= floating sti-like for disassembly @@ -16,8 +16,8 @@ The assembler will not report certain invalid forms. Get an Intel datasheet and learn which forms are valid. - */ + R8 AL 0; R8 CL 1; R8 DL 2; @@ -218,10 +218,10 @@ OPCODE PUSH 0x6A, &IB IMM8 0x68, 16 !IW IMM16 0x68, 32 !ID IMM32 - 0x50,+R 16 R16 + 0x50,+R 16 % R16 0x50,+R 32 R32 0x50,+R 32 ` R64 - 0xFF,/6 16 RM16 + 0xFF,/6 16 % RM16 0xFF,/6 32 RM32 0xFF,/6 32 RM64; OPCODE PUSHAW 0x60, 16; @@ -765,15 +765,15 @@ OPCODE JZ 0x0F 0x84, 32 !CD REL32; OPCODE INC -// 0x40,+R 16 R16 -// 0x40,+R 32 R32 + 0x40,+R 16 % R16 + 0x40,+R 32 % R32 0xFE,/0 RM8 0xFF,/0 16 RM16 0xFF,/0 32 RM32 0xFF,/0 32 RM64; OPCODE DEC -// 0x48,+R 16 R16 -// 0x48,+R 32 R32 + 0x48,+R 16 % R16 + 0x48,+R 32 % R32 0xFE,/1 RM8 0xFF,/1 16 RM16 0xFF,/1 32 RM32 diff --git a/Compiler/OptLib.CPP b/Compiler/OptLib.CPP index 3092ed7..afd37d6 100644 --- a/Compiler/OptLib.CPP +++ b/Compiler/OptLib.CPP @@ -1,6 +1,6 @@ -CLexCodeMisc *OptLabelFwd(CLexCodeMisc *lb) +CCodeMisc *OptLabelFwd(CCodeMisc *lb) { - CLexCodeMisc *lb1; + CCodeMisc *lb1; while (lb1=lb->fwd) lb=lb1; return lb; @@ -140,7 +140,7 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tempi, tempi2->ic_flags|=ICF_R_TO_F64; if (IC_LESS<=tempi->ic_code<=IC_GREATER_EQUAL && (tempii=OptLead1(tempi)) && tempii->ic_code!=IC_PUSH_CMP && tempii->ic_code!=IC_AND_AND) { - //We are looking for float comparisons to zero to convert to int. +//We are looking for float comparisons to zero to convert to int. if (tempi1->ic_code==IC_IMM_F64 && !tempi1->ic_data && tempi2->ic_code==IC_DEREF && tempc2==cmp.internal_types[RT_F64]) { tempi1->ic_code==IC_IMM_I64; @@ -150,7 +150,8 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tempi, tempi2->ic_code==IC_IMM_I64; fb_here1: tempi1->ic_flags&=~ICF_R_TO_F64; - tempi->ic_class=tempi1->ic_class=tempi2->ic_class=cmp.internal_types[RT_I64]; + tempi->ic_class=tempi1->ic_class=tempi2->ic_class= + cmp.internal_types[RT_I64]; *is_unsigned=FALSE; return FBO1_NOT_CONST; } @@ -181,7 +182,7 @@ fb_here2: Bool OptFixupBinaryOp2(CIntermediateCode **tempi1,CIntermediateCode **tempi2) { CIntermediateCode *tempii1=*tempi1, - *tempii2=*tempi2; + *tempii2=*tempi2; if (tempii1->ic_code==IC_IMM_I64 && !(tempii1->ic_flags & ICF_R_TO_F64)) return TRUE; if (tempii2->ic_code==IC_IMM_I64 && !(tempii2->ic_flags & ICF_R_TO_F64)) { @@ -208,7 +209,7 @@ Bool OptFixupUnaryOp(CIntermediateCode *tempi, tempi1->ic_flags&=~ICF_R_TO_F64; } else if (tempc1->raw_type!=RT_F64) - tempi1->ic_flags|=ICF_R_TO_F64; + tempi1->ic_flags|=ICF_R_TO_F64; if (tempi1->ic_code==IC_IMM_F64) { tempi->ic_flags|=tempi1->ic_flags; OptSetNOP1(tempi1); @@ -225,11 +226,11 @@ Bool OptFixupUnaryOp(CIntermediateCode *tempi, return FBO1_NOT_CONST; } -extern U0 OptBrNotZero(CLex *lx,CIntermediateCode *tempi); +extern U0 OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tempi); -CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) +CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tempi) { - CLexCodeMisc *lb_true,*lb_false; + CCodeMisc *lb_true,*lb_false; CIntermediateCode *tempii=OptLag(tempi),*tempii2; switch (tempii->ic_code) { case IC_NOT: @@ -239,7 +240,7 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) tempi->t.a1c=tempii->t.a1c; tempi->t.a1t=tempii->t.a1t; OptFree(tempii); - return OptBrNotZero(lx,tempi); + return OptBrNotZero(cc,tempi); case IC_EQUAL_EQUAL...IC_LESS_EQUAL: tempi->ic_code=(tempii->ic_code-IC_EQUAL_EQUAL)^1+IC_BR_EQUAL_EQUAL; break; @@ -253,7 +254,7 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) tempi->ic_code=IC_BR_AND_ZERO; break; case IC_MM_: - if (lx->pass==2 && !(tempii->ic_flags&ICF_R_TO_F64) && + if (cc->pass==2 && !(tempii->ic_flags&ICF_R_TO_F64) && tempii->ic_class->raw_type!=RT_F64) tempi->ic_code=IC_BR_MM_ZERO; break; @@ -318,16 +319,16 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) tempii->t.a1t=tempi->t.a1t; tempii->t.a1c=tempi->t.a1c; tempii->ic_code=IC_BR_ZERO; - OptBrZero(lx,tempii); + OptBrZero(cc,tempii); tempii=tempi->t.a2t->next; tempii->t.a1t=tempi->t.a2t; tempii->t.a1c=tempi->t.a2c; tempii->ic_data=lb_true; tempii->ic_code=IC_BR_ZERO; - tempii=OptBrZero(lx,tempii); + tempii=OptBrZero(cc,tempii); OptSetNOP1(tempi); } else if (tempi->ic_code==IC_BR_OR_OR_ZERO) { - lb_false=LCCMiscNew(lx,CMT_LABEL); + lb_false=COCMiscNew(cc,CMT_LABEL); tempi->ic_code=IC_LABEL; tempi->ic_flags=0; tempi->ic_data=lb_false; @@ -336,13 +337,13 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) tempii->t.a1c=tempi->t.a1c; tempii->ic_data=lb_false; tempii->ic_code=IC_BR_NOT_ZERO; - OptBrNotZero(lx,tempii); + OptBrNotZero(cc,tempii); tempii=tempi->t.a2t->next; tempii->t.a1t=tempi->t.a2t; tempii->t.a1c=tempi->t.a2c; tempii->ic_data=lb_true; tempii->ic_code=IC_BR_ZERO; - tempii=OptBrZero(lx,tempii); + tempii=OptBrZero(cc,tempii); } else tempii=tempi; if (tempi->ic_flags&ICF_POP_CMP && tempi->t.a1t->ic_code==IC_NOP1) { @@ -354,9 +355,9 @@ CIntermediateCode *OptBrZero(CLex *lx,CIntermediateCode *tempi) return tempi; } -CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) +CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tempi) { - CLexCodeMisc *lb_true,*lb_false; + CCodeMisc *lb_true,*lb_false; CIntermediateCode *tempii=OptLag(tempi),*tempii2; switch (tempii->ic_code) { case IC_NOT: @@ -366,7 +367,7 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) tempi->t.a1c=tempii->t.a1c; tempi->t.a1t=tempii->t.a1t; OptFree(tempii); - return OptBrZero(lx,tempi); + return OptBrZero(cc,tempi); case IC_EQUAL_EQUAL...IC_LESS_EQUAL: tempi->ic_code=tempii->ic_code+IC_BR_EQUAL_EQUAL-IC_EQUAL_EQUAL; break; @@ -380,7 +381,7 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) tempi->ic_code=IC_BR_AND_NOT_ZERO; break; case IC_MM_: - if (lx->pass==2 && !(tempii->ic_flags&ICF_R_TO_F64) && + if (cc->pass==2 && !(tempii->ic_flags&ICF_R_TO_F64) && tempii->ic_class->raw_type!=RT_F64) tempi->ic_code=IC_BR_MM_NOT_ZERO; break; @@ -445,16 +446,16 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) tempii->t.a1c=tempi->t.a1c; tempii->ic_data=lb_true; tempii->ic_code=IC_BR_NOT_ZERO; - OptBrNotZero(lx,tempii); + OptBrNotZero(cc,tempii); tempii=tempi->t.a2t->next; tempii->t.a1t=tempi->t.a2t; tempii->t.a1c=tempi->t.a2c; tempii->ic_data=lb_true; tempii->ic_code=IC_BR_NOT_ZERO; - tempii=OptBrNotZero(lx,tempii); + tempii=OptBrNotZero(cc,tempii); OptSetNOP1(tempi); } else if (tempi->ic_code==IC_BR_AND_AND_NOT_ZERO) { - lb_false=LCCMiscNew(lx,CMT_LABEL); + lb_false=COCMiscNew(cc,CMT_LABEL); tempi->ic_code=IC_LABEL; tempi->ic_flags=0; tempi->ic_data=lb_false; @@ -463,13 +464,13 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) tempii->t.a1c=tempi->t.a1c; tempii->ic_data=lb_false; tempii->ic_code=IC_BR_ZERO; - OptBrZero(lx,tempii); + OptBrZero(cc,tempii); tempii=tempi->t.a2t->next; tempii->t.a1t=tempi->t.a2t; tempii->t.a1c=tempi->t.a2c; tempii->ic_data=lb_true; tempii->ic_code=IC_BR_NOT_ZERO; - tempii=OptBrNotZero(lx,tempii); + tempii=OptBrNotZero(cc,tempii); } else tempii=tempi; if (tempi->ic_flags&ICF_POP_CMP && tempi->t.a1t->ic_code==IC_NOP1) { @@ -481,7 +482,8 @@ CIntermediateCode *OptBrNotZero(CLex *lx,CIntermediateCode *tempi) return tempi; } -U0 OptFixSizeOf(CIntermediateCode *tempi1,CIntermediateCode *tempi_push,CHashClass *tempcc) +U0 OptFixSizeOf(CIntermediateCode *tempi1, + CIntermediateCode *tempi_push,CHashClass *tempcc) { if (tempi1->ic_code==IC_MUL && tempi1->t.a2t->ic_code==IC_SIZEOF) { tempi1->t.a2t->ic_code=IC_IMM_I64; @@ -526,18 +528,22 @@ I64 CmpRawTypePointed(CHashClass *tempc) U0 CmpF1PushPop(CIntermediateCode *tempi,CIntermediateCode *tempi2) { - if (intermediate_code_table[tempi2->ic_code].fpop|| tempi2->ic_flags&ICF_R_TO_F64) + if (intermediate_code_table[tempi2->ic_code].fpop|| + tempi2->ic_flags&ICF_R_TO_F64) Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); } -U0 CmpF2PushPop(CIntermediateCode *tempi,CIntermediateCode *tempi1,CIntermediateCode *tempi2) +U0 CmpF2PushPop(CIntermediateCode *tempi, + CIntermediateCode *tempi1,CIntermediateCode *tempi2) { if ((tempi2->ic_code==IC_MOV || tempi2->ic_code==IC_IMM_F64) && - !(tempi2->ic_flags&ICF_R_TO_F64) && - (intermediate_code_table[tempi1->ic_code].fpop || tempi1->ic_flags&ICF_R_TO_F64)) + !(tempi2->ic_flags&ICF_R_TO_F64) && + (intermediate_code_table[tempi1->ic_code].fpop || + tempi1->ic_flags&ICF_R_TO_F64)) Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); - else if ((intermediate_code_table[tempi2->ic_code].fpop || tempi2->ic_flags&ICF_R_TO_F64)&& - !(tempi1->ic_flags&ICF_R_TO_F64)) + else if ((intermediate_code_table[tempi2->ic_code].fpop || + tempi2->ic_flags&ICF_R_TO_F64)&& + !(tempi1->ic_flags&ICF_R_TO_F64)) Bts(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); } diff --git a/Compiler/OptPass012.CPP b/Compiler/OptPass012.CPP index 99f7192..071ffd3 100644 --- a/Compiler/OptPass012.CPP +++ b/Compiler/OptPass012.CPP @@ -20,7 +20,7 @@ logic. 3-Arg comparisons are established. */ -CIntermediateCode *OptPass012(CLex *lx) +CIntermediateCode *OptPass012(CCmpCtrl *cc) {/*Simplify CONST arithmetic. Sets the class throughout Expression trees. Returns the type of an Expression for use @@ -32,13 +32,13 @@ args. CHashClass *tempc,*tempc1,*tempc2; CIntermediateCode *tempi,*tempi1,*tempi2,*tempi3,*tempi_push, *last_with_class=NULL; - CLexCodeMisc *lb,*lb1,*lb2; + CCodeMisc *lb,*lb1,*lb2; CPrsStk *ps; - if (!(ps=lx->ps)) - ps=lx->ps=MAlloc(sizeof(CPrsStk)); + if (!(ps=cc->ps)) + ps=cc->ps=MAlloc(sizeof(CPrsStk)); ps->ptr=0; ps->ptr2=0; - tempi=lx->lcc.lcc_root.next; + tempi=cc->coc.coc_root.next; while (code=tempi->ic_code) { tempc=tempi->ic_class; tempi->ic_class2=tempc; @@ -63,11 +63,11 @@ args. break; } if (intermediate_code_table[code].not_const) - lx->flags|=LF_NOT_CONST; + cc->flags|=CCF_NOT_CONST; nobound_switch (code) { case IC_IMM_F64: tempi->ic_flags&=~ICF_R_TO_F64; - if (lx->pass==2 && tempi->ic_flags&ICF_R_TO_INT) { + if (cc->pass==2 && tempi->ic_flags&ICF_R_TO_INT) { tempi->ic_data=ToI64(tempi->ic_data(F64)); tempi->ic_flags&=~ICF_R_TO_INT; tempi->ic_code=IC_IMM_I64; @@ -76,7 +76,7 @@ args. break; case IC_IMM_I64: tempi->ic_flags&=~ICF_R_TO_INT; - if (lx->pass==2 && tempi->ic_flags&ICF_R_TO_F64) { + if (cc->pass==2 && tempi->ic_flags&ICF_R_TO_F64) { tempi->ic_data(F64)=ToF64(tempi->ic_data); tempi->ic_flags&=~ICF_R_TO_F64; tempi->ic_code=IC_IMM_F64; @@ -116,7 +116,8 @@ args. tempi2=tempi1->next; //ADD tempi3=tempi2->next; //DEREF if (tempi1->ic_code==IC_IMM_I64 && tempi2->ic_code==IC_ADD && - tempi3->ic_code==IC_DEREF && !(tempi3->ic_flags&~ICG_NO_CVT_MASK)) { + tempi3->ic_code==IC_DEREF && + !(tempi3->ic_flags&~ICG_NO_CVT_MASK)) { tempi->ic_flags|=tempi1->ic_flags|tempi2->ic_flags|tempi3->ic_flags; if (tempi->ic_code==IC_FS) tempi->ic_code=IC_MOV_FS; @@ -271,9 +272,9 @@ args. } break; case IC_DEREF: - if (lx->pass==2) { + if (cc->pass==2) { if (!tempc->size) - LexWarn(lx,"Dereference U0 "); + LexWarn(cc,"Dereference U0 "); if (tempi1->ic_class->raw_type!=RT_F64) { if (tempi1->ic_code==IC__PP) { tempi->ic_code=IC_DEREF_PP; @@ -291,8 +292,8 @@ args. case IC__MM: case IC_PP_: case IC_MM_: - if (lx->pass==2 && !tempc->size) - LexWarn(lx,"Dereference U0 "); + if (cc->pass==2 && !tempc->size) + LexWarn(cc,"Dereference U0 "); break; case IC_POWER: tempc=tempi->ic_class=cmp.internal_types[RT_F64]; @@ -316,7 +317,7 @@ args. tempi->ic_code=IC_IMM_F64; } } else { - if (tempi1->ic_code==IC_IMM_I64 && lx->pass==2) { + if (tempi1->ic_code==IC_IMM_I64 && cc->pass==2) { switch (i=tempi1->ic_data) { case 0: break; @@ -353,7 +354,7 @@ args. tempi->ic_data=Bsf(i); tempi->ic_code=IC_SHL_CONST; OptSetNOP1(tempi2); - } else if (tempi1->ic_code==IC_MUL && lx->pass==2) { + } else if (tempi1->ic_code==IC_MUL && cc->pass==2) { if (tempi1->t.a1t->ic_code==IC_IMM_I64) { tempi1->ic_flags|=tempi->ic_flags; tempi1->t.a1t->ic_data*=tempi2->ic_data; @@ -371,7 +372,7 @@ args. } } } - } else if (tempi2->ic_code==IC_IMM_F64 && lx->pass==2) { + } else if (tempi2->ic_code==IC_IMM_F64 && cc->pass==2) { if (tempi2->ic_data(F64)==1.0) { tempi1->ic_flags|=tempi->ic_flags|tempi2->ic_flags; tempi1->ic_class2=tempi->ic_class2; @@ -399,7 +400,8 @@ args. } break; case IC_DIV: - if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && tempi2->ic_code!=IC_IMM_F64) && + if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && + tempi2->ic_code!=IC_IMM_F64) && (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned))) { if (i==FBO1_INT) { if (is_unsigned) @@ -430,7 +432,8 @@ args. } break; case IC_MOD: - if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && tempi2->ic_code!=IC_IMM_F64) && + if ((tempi2->ic_data || tempi2->ic_code!=IC_IMM_I64 && + tempi2->ic_code!=IC_IMM_F64) && (i=OptFixupBinaryOp1(tempi,tempi1,tempi2,&is_unsigned))) { if (i==FBO1_INT) { if (is_unsigned) @@ -443,8 +446,9 @@ args. tempi2->ic_data(F64); tempi->ic_code=IC_IMM_F64; } - } else if (lx->pass==2 && tempi2->ic_code==IC_IMM_I64 && - (i=tempi2->ic_data) && Bsf(i)==Bsr(i) && tempi_push->ic_class->raw_type!=RT_F64 && + } else if (cc->pass==2 && tempi2->ic_code==IC_IMM_I64 && + (i=tempi2->ic_data) && Bsf(i)==Bsr(i) && + tempi_push->ic_class->raw_type!=RT_F64 && tempi_push->ic_class->raw_type&1) {//do only unsigned tempi2->ic_data=i-1; tempi->ic_code=IC_AND; @@ -494,7 +498,7 @@ args. tempi->ic_code=IC_ABS_ADDR; OptSetNOP1(tempi1); OptSetNOP1(tempi2); - } else if (lx->pass==2) { + } else if (cc->pass==2) { if (tempi1->ic_code==IC_IMM_I64) { if (!tempi1->ic_data) { tempi2->ic_flags|=tempi1->ic_flags|tempi->ic_flags; @@ -622,7 +626,7 @@ args. tempi->ic_code=IC_IMM_F64; } } else { - if (lx->pass==2) { + if (cc->pass==2) { if (tempi2->ic_code==IC_IMM_I64) { if (!tempi2->ic_data) { tempi1->ic_flags|=tempi2->ic_flags|tempi->ic_flags; @@ -818,8 +822,8 @@ args. tempi->ic_class=cmp.internal_types[RT_I64]; break; sub_switch_start: - if (lx->pass==2 && (!tempc->size||!tempc2->size)) - LexWarn(lx,"Assign U0 "); + if (cc->pass==2 && (!tempc->size||!tempc2->size)) + LexWarn(cc,"Assign U0 "); sub_switch_start: case IC_MUL_EQUAL: if (tempi2->ic_code==IC_IMM_I64 && @@ -870,7 +874,7 @@ args. if (tempc2->raw_type==RT_F64) tempi2->ic_flags|=ICF_R_TO_INT; } - if (lx->pass==2 && tempi1->ic_class->raw_type!=RT_F64) { + if (cc->pass==2 && tempi1->ic_class->raw_type!=RT_F64) { if (tempi1->ic_code==IC__PP) { tempi->ic_code=IC_ASSIGN_PP; tempi->ic_flags|=tempi1->ic_flags; @@ -896,7 +900,7 @@ args. break; case IC_ENTER: case IC_LEAVE: - tempi->ic_data=-lx->htc.fun->size; + tempi->ic_data=-cc->htc.fun->size; break; case IC_ADD_RSP: if (tempi1=OptLag(tempi)) { @@ -990,7 +994,8 @@ args. while (tempi2->ic_code!=IC_CALL_END) tempi2=tempi2->next; - tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_F64|ICF_PUSH_RESULT)|tempi2->ic_flags; + tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags& + ~(ICF_R_TO_F64|ICF_PUSH_RESULT)|tempi2->ic_flags; OptSetNOP1(tempi2); tempi1->ic_class=cmp.internal_types[RT_I64]; @@ -1054,7 +1059,8 @@ args. while (tempi2->ic_code!=IC_CALL_END) tempi2=tempi2->next; - tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags&~(ICF_R_TO_INT|ICF_PUSH_RESULT)|tempi2->ic_flags; + tempi1->ic_flags=tempi->ic_flags|tempi1->ic_flags& + ~(ICF_R_TO_INT|ICF_PUSH_RESULT)|tempi2->ic_flags; OptSetNOP1(tempi2); tempi1->ic_class=cmp.internal_types[RT_F64]; @@ -1085,10 +1091,10 @@ args. } break; case IC_BR_ZERO: - tempi_push=OptBrZero(lx,tempi); + tempi_push=OptBrZero(cc,tempi); break; case IC_BR_NOT_ZERO: - tempi_push=OptBrNotZero(lx,tempi); + tempi_push=OptBrNotZero(cc,tempi); break; case IC_NOP1: if (tempi->ic_flags&ICF_PUSH_RESULT) { @@ -1251,9 +1257,9 @@ args. case IC_ASM: break; default: - "Pass:%d Missing IC handler\n",lx->pass; - ICPut(lx,tempi); - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Missing IC handler\n",cc->pass; + ICPut(cc,tempi); + LexExcept(cc,"Compiler Optimization Error at "); } if (intermediate_code_table[code].arg_cnt==IS_2_ARG) { if (tempi_push->ic_precedence.u8[0]&~ASSOC_MASK==PREC_ASSIGN) @@ -1278,8 +1284,8 @@ args. tempi=tempi->next; } if (ps->ptr>2) { - "Pass:%d Stk:%08X\n",lx->pass,ps->ptr; - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Stk:%08X\n",cc->pass,ps->ptr; + LexExcept(cc,"Compiler Optimization Error at "); } /*This is for determining type conversions for passing args to funs. diff --git a/Compiler/OptPass3.CPP b/Compiler/OptPass3.CPP index 5b72ace..ec5ab72 100644 --- a/Compiler/OptPass3.CPP +++ b/Compiler/OptPass3.CPP @@ -1,15 +1,15 @@ -U0 OptPass3(CLex *lx,COptReg *reg_offsets) +U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) { CHashClass *tempc,*tempc1,*tempc2; - CLexCodeMisc *lb; + CCodeMisc *lb; CIntermediateCode *tempi,*tempi1,*tempi2,*tempi_next, *tempil1,*tempil2; I64 code,i,j,l,member_cnt,used_reg_mask=0; CMemberLst *tempm; COptMemberVar *mv=NULL; - CExe *tempx; - CExeImportExport *tempe; - CPrsStk *ps=lx->ps; + CAOT *tempaot; + CAOTImportExport *tempie; + CPrsStk *ps=cc->ps; ps->ptr=0; ps->ptr2=0; @@ -17,19 +17,20 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) reg_offsets[i].offset=MAX_I64; reg_offsets[i].m=NULL; } - if (lx->htc.fun) { - member_cnt=lx->htc.fun->member_cnt; - if (Bt(&lx->htc.fun->flags,Ff_DOT_DOT_DOT)) + if (cc->htc.fun) { + member_cnt=cc->htc.fun->member_cnt; + if (Bt(&cc->htc.fun->flags,Ff_DOT_DOT_DOT)) member_cnt+=2; mv=CAlloc(member_cnt*sizeof(COptMemberVar)); member_cnt=0; - tempm=lx->htc.fun->member_lst; + tempm=cc->htc.fun->member_lst; while (tempm) { tempc=OptClassFwd(tempm->member_class); if (0<=tempm->regreg)) PrintWarn("Reg in use\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num,tempm->str,cc->htc.fun->str); reg_offsets[tempm->reg].offset=tempm->offset; reg_offsets[tempm->reg].m=tempm; } else if (tempc->raw_type!=RT_F64 && tempm->reg!=REG_NONE || @@ -42,14 +43,15 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) } else { if (tempm->reg==REG_ALLOC) PrintWarn("Can't reg var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num,tempm->str,cc->htc.fun->str); } tempm=tempm->next; } } else member_cnt=0; - tempi=lx->lcc.lcc_root.next; + tempi=cc->coc.coc_root.next; while (code=tempi->ic_code) { tempi_next=tempi->next; if (code==IC_NOP1) @@ -256,7 +258,8 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) if (tempc) { if (tempc->raw_type==RT_F64 && tempil1->ic_class->raw_type!=RT_F64) tempil1->ic_flags|=ICF_R_TO_F64; - else if (tempc->raw_type!=RT_F64 && tempil1->ic_class->raw_type==RT_F64) + else if (tempc->raw_type!=RT_F64 && + tempil1->ic_class->raw_type==RT_F64) tempil1->ic_flags|=ICF_R_TO_INT; } break; @@ -272,23 +275,24 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) break; case IC_NOBOUND_SWITCH: case IC_SWITCH: - lb=OptLabelFwd(tempi->ic_data(CLexCodeMisc *)->dft); + lb=OptLabelFwd(tempi->ic_data(CCodeMisc *)->dft); lb->use_cnt++; break; case IC_ASM: - tempx=tempi->ic_data; - tempe=tempx->next_ie; - while (tempe!=&tempx->next_ie) { - if (EIT_REL_I0<=tempe->type<=EIT_IMM_I64 && - tempe->str && tempe->flags&EIF_GOTO_LABEL && - (lb=LCCGoToLabelFind(lx,tempe->str))) + tempaot=tempi->ic_data; + tempie=tempaot->next_ie; + while (tempie!=&tempaot->next_ie) { + if (IET_REL_I0<=tempie->type<=IET_IMM_I64 && + tempie->str && tempie->flags&IEF_GOTO_LABEL && + (lb=COCGoToLabelFind(cc,tempie->str))) lb->use_cnt++; //Prevent deadcode elimination. - tempe=tempe->next; + tempie=tempie->next; } break; case IC_BR_NOT_EQUAL: case IC_BR_EQUAL_EQUAL: - if ((tempi1->ic_code==IC_IMM_I64 || tempi1->ic_code==IC_IMM_F64) && !tempi1->ic_data) { + if ((tempi1->ic_code==IC_IMM_I64 || + tempi1->ic_code==IC_IMM_F64) && !tempi1->ic_data) { OptFree(tempi1); MemCpy(&tempi->a1,&tempi->a2,sizeof(CICArg)); tempi->a2.type=TY_NULL; @@ -298,7 +302,8 @@ U0 OptPass3(CLex *lx,COptReg *reg_offsets) code=tempi->ic_code=IC_BR_NOT_ZERO; tempi1=tempi2; tempc1=tempc2; - } else if ((tempi2->ic_code==IC_IMM_I64 || tempi2->ic_code==IC_IMM_F64) && !tempi2->ic_data) { + } else if ((tempi2->ic_code==IC_IMM_I64 || + tempi2->ic_code==IC_IMM_F64) && !tempi2->ic_data) { OptFree(tempi2); tempi->a2.type=TY_NULL; if (code==IC_BR_EQUAL_EQUAL) @@ -509,9 +514,9 @@ here1: case IC_LABEL: break; default: - "Pass:%d Missing IC handler\n",lx->pass; - ICPut(lx,tempi); - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Missing IC handler\n",cc->pass; + ICPut(cc,tempi); + LexExcept(cc,"Compiler Optimization Error at "); } } tempi=tempi_next; @@ -521,8 +526,8 @@ here1: We just scored num occurrences of each [RBP] offset in the code to help decide which variables should be assigned to register variables. -We counted the times each offset was added to RBP as a plus LEA and we subtract the -times the offset is dereferenced. If the address was calculated more times +We counted the times each offset was added to RBP as a plus LEA and we subtract +the times the offset is dereferenced. If the address was calculated more times than the offset was dereferenced, the variable's address was passed or assigned and we cannot use a register because you can't take address of a reg var. @@ -535,10 +540,11 @@ have a unusual ModR addressing mode in the x86_64 architecture, so I only use R12 and R13 as non-pointer register variables, such as index variables i,j,k. */ - if (lx->htc.fun) { - lx->htc.fun->used_reg_mask=lx->htc.fun->used_reg_mask&~(REG_VARS_MASK|REG_NON_PTR_MASK)|used_reg_mask; - if (!Bt(&lx->opts,OPTf_NO_REG_VAR) && - !(lx->flags & LF_NO_REG_OPT)) { + if (cc->htc.fun) { + cc->htc.fun->used_reg_mask=cc->htc.fun->used_reg_mask& + ~(REGG_C_LOCAL_VARS|REGG_C_LOCAL_NON_PTR_VARS)|used_reg_mask; + if (!Bt(&cc->opts,OPTf_NO_REG_VAR) && + !(cc->flags & CCF_NO_REG_OPT)) { QSort(mv,member_cnt,sizeof(COptMemberVar),&OptMVCompare); while (member_cnt && !mv[member_cnt-1].score) member_cnt--; @@ -551,12 +557,13 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. } else { if (mv[i].m->reg==REG_ALLOC) PrintWarn("Can't reg var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num,mv[i].m->str,lx->htc.fun->str); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num,mv[i].m->str,cc->htc.fun->str); } } if (j>0) { - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) - "Fun:%s\n",lx->htc.fun->str; + if (Bt(&cc->flags,CCf_OPT_TRACE_PRESENT)) + "Fun:%s\n",cc->htc.fun->str; if (j>cmp.num_reg_vars) { l=0; for (i=0;imember_class); if (!tempc->ptr_stars_cnt && !tempm->dim.next) { while (lhtc.fun->used_reg_mask,cmp.non_ptr_vars_map[l])) + Bts(&cc->htc.fun->used_reg_mask,cmp.non_ptr_vars_map[l])) l++; if (lreg=cmp.non_ptr_vars_map[l++]; reg_offsets[tempm->reg].offset=mv[i].offset_start; reg_offsets[tempm->reg].m=tempm; - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) + if (Bt(&cc->flags,CCf_OPT_TRACE_PRESENT)) "Reg %Z Var \"%-15ts\" %016X[RBP]\n",tempm->reg,"ST_U64_REGS", tempm->str,reg_offsets[tempm->reg].offset; mv[i].offset_start=0; //flag as reg var - if (tempm->size<8 && !StrIMatch("Bool",tempm->member_class->str) && + if (tempm->size<8 && + !StrIMatch("Bool",tempm->member_class->str) && tempm->member_class->type&HTT_INTERNAL_TYPE) PrintWarn("Using 64-bit reg var.\n " "$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num, - tempm->str,lx->htc.fun->str); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num, + tempm->str,cc->htc.fun->str); } } } @@ -591,21 +600,23 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. if (mv[i].offset_start && (!mv[i].m->dim.next|| tempm->offset>0 && StrCmp(tempm->str,"argv"))) { while (lhtc.fun->used_reg_mask,cmp.to_reg_vars_map[l])) + Bts(&cc->htc.fun->used_reg_mask,cmp.to_reg_vars_map[l])) l++; if (lreg=cmp.to_reg_vars_map[l++]; reg_offsets[tempm->reg].offset=mv[i].offset_start; reg_offsets[tempm->reg].m=tempm; - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT)) + if (Bt(&cc->flags,CCf_OPT_TRACE_PRESENT)) "Reg %Z Var \"%-15ts\" %016X[RBP]\n",tempm->reg,"ST_U64_REGS", tempm->str,reg_offsets[tempm->reg].offset; - if (tempm->size<8 && !StrIMatch("Bool",tempm->member_class->str) && + if (tempm->size<8 && + !StrIMatch("Bool",tempm->member_class->str) && tempm->member_class->type&HTT_INTERNAL_TYPE) PrintWarn("Using 64-bit reg var.\n " "$$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num, - tempm->str,lx->htc.fun->str); + cc->lex_include_stk->full_name, + cc->lex_include_stk->line_num, + tempm->str,cc->htc.fun->str); } } } @@ -614,8 +625,8 @@ R12 and R13 as non-pointer register variables, such as index variables i,j,k. Free(mv); } if (ps->ptr>2) { - "Pass:%d Stk:%08X\n",lx->pass,ps->ptr; - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Stk:%08X\n",cc->pass,ps->ptr; + LexExcept(cc,"Compiler Optimization Error at "); } } diff --git a/Compiler/OptPass4.CPP b/Compiler/OptPass4.CPP index 06e4a69..abf1994 100644 --- a/Compiler/OptPass4.CPP +++ b/Compiler/OptPass4.CPP @@ -10,15 +10,15 @@ Bool OptIC4(CIntermediateCode *tempi) return FALSE; if (tempil2->r.type&TY_MASK==TY_STK && - !(tempil2->ic_flags&ICF_PUSH_RESULT)) { + !(tempil2->ic_flags&ICF_PUSH_RESULT)) { if (tempil1->ic_code==IC_ADD_CONST && - tempil1->a1.type&TY_MASK==TY_STK) { + tempil1->a1.type&TY_MASK==TY_STK) { if ((tempil2->ic_code==IC_REG || - tempil2->ic_code==IC_MOV) && - tempil2->a1.type&TY_MASK==TY_REG) { + tempil2->ic_code==IC_MOV) && + tempil2->a1.type&TY_MASK==TY_REG) { i=tempil1->ic_data; - if (MIN_I32<=i<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tempil2->a1.reg)) { + if (MIN_I32<=i<=MAX_I32 && + !Bt(&cmp.non_ptr_vars_mask,tempil2->a1.reg)) { tempil1->ic_flags|=tempil2->ic_flags&ICG_NO_CVT_MASK; tempil1->ic_code=IC_LEA; tempil1->a1.type=TY_DISP+tempil1->a1.type&RT_MASK; @@ -28,11 +28,11 @@ Bool OptIC4(CIntermediateCode *tempi) return TRUE; } } else if (tempil2->ic_code==IC_SHL_CONST && - tempil2->a1.type&TY_MASK==TY_REG) { + tempil2->a1.type&TY_MASK==TY_REG) { i=tempil1->ic_data; - if (MIN_I32<=i<=MAX_I32 && - tempil2->a1.reg!=REG_RSP && - 1<=tempil2->ic_data<=3) { + if (MIN_I32<=i<=MAX_I32 && + tempil2->a1.reg!=REG_RSP && + 1<=tempil2->ic_data<=3) { tempil1->ic_flags|=tempil2->ic_flags&ICG_NO_CVT_MASK; tempil1->ic_code=IC_LEA; tempil1->a1.type=TY_SIB+tempil1->a1.type&RT_MASK; @@ -50,7 +50,7 @@ Bool OptIC4(CIntermediateCode *tempi) } } if (tempil2->ic_code==IC_MOV || - tempil2->ic_code==IC_REG) { + tempil2->ic_code==IC_REG) { if (tempil1->a2.type&TY_MASK==TY_STK) { if (tempil2->ic_flags & ICF_R_TO_INT) { if (tempil2->a1.type&TY_MASK==TY_IMM) @@ -131,11 +131,11 @@ Bool OptIC4(CIntermediateCode *tempi) } if (tempil1->ic_code==IC_DEREF) { if (tempil2->ic_code==IC_ADD_CONST && - tempil2->a1.type&TY_MASK==TY_REG && - tempil1->a1.type&TY_MASK==TY_STK) { + tempil2->a1.type&TY_MASK==TY_REG && + tempil1->a1.type&TY_MASK==TY_STK) { i=tempil2->ic_data; - if (MIN_I32<=i<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tempil2->a1.reg)) { + if (MIN_I32<=i<=MAX_I32 && + !Bt(&cmp.non_ptr_vars_mask,tempil2->a1.reg)) { tempil1->ic_flags|=tempil2->ic_flags; tempil1->ic_code=IC_MOV; tempil1->a1.type=TY_DISP+tempil1->a1.type_pointed; @@ -146,7 +146,7 @@ Bool OptIC4(CIntermediateCode *tempi) } } if (tempil2->ic_code==IC_LEA && - tempil1->a1.type&TY_MASK==TY_STK) { + tempil1->a1.type&TY_MASK==TY_STK) { tempil1->ic_flags|=tempil2->ic_flags; tempil1->ic_code=IC_MOV; tempil1->a1.type=tempil2->a1.type&TY_MASK+tempil1->a1.type_pointed; @@ -168,21 +168,22 @@ Bool OptIC4(CIntermediateCode *tempi) return FALSE; } -U0 OptPass4(CLex *lx,COptReg *reg_offsets,I64 *_type) +U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) { CHashClass *tempc,*tempc1,*tempc2; - CIntermediateCode *tempi,*tempi1,*tempi2,*tempil1,*tempil2,*tempil3,*tempi_next; + CIntermediateCode *tempi,*tempi1,*tempi2,*tempil1,*tempil2,*tempil3, + *tempi_next; I64 code,i; Bool dead_code=FALSE; - CLexCodeMisc *lb; - CPrsStk *ps=lx->ps; + CCodeMisc *lb; + CPrsStk *ps=cc->ps; ps->ptr=0; ps->ptr2=0; if (_type) *_type=RT_I64; - tempi=lx->lcc.lcc_root.next; + tempi=cc->coc.coc_root.next; while (code=tempi->ic_code) { tempi_next=tempi->next; if (dead_code&&code!=IC_LABEL) { @@ -331,7 +332,8 @@ p4_lea_gone: tempi->a1.disp=0; tempi->a1.reg=tempi2->a1.reg+tempi1->a1.reg<<8; p4_sib: - tempi->ic_flags|=(tempi1->ic_flags|tempi2->ic_flags)&ICG_NO_CVT_MASK; + tempi->ic_flags|=(tempi1->ic_flags|tempi2->ic_flags) + &ICG_NO_CVT_MASK; OptSetNOP2(tempi1); OptFree(tempi2); @@ -341,7 +343,8 @@ p4_sib: tempi->a2.type=TY_NULL+tempi->a2.type&RT_MASK; } - } else if (tempi2->ic_code==IC_SHL_CONST && tempi2->a1.type==TY_REG+RT_I64 && + } else if (tempi2->ic_code==IC_SHL_CONST && + tempi2->a1.type==TY_REG+RT_I64 && tempi2->ic_data<=3) { if (tempi2->a1.reg!=REG_RSP) { tempi->a1.disp=0; @@ -355,8 +358,10 @@ p4_sib: goto p4_sib; } } - } else if (tempi1->ic_code==IC_LEA && tempi1->a1.type&TY_MASK==TY_DISP) { - if (tempi1->a1.reg==REG_RBP && CmpOffset2Reg(tempi1->a1.disp,reg_offsets)>=0) + } else if (tempi1->ic_code==IC_LEA && + tempi1->a1.type&TY_MASK==TY_DISP) { + if (tempi1->a1.reg==REG_RBP && + CmpOffset2Reg(tempi1->a1.disp,reg_offsets)>=0) break; if (tempi2->ic_code==IC_MOV && tempi2->a1.type==TY_REG+RT_I64 || tempi2->ic_code==IC_REG) { @@ -369,7 +374,8 @@ p4_sib: tempi->a1.reg=tempi2->a1.reg+tempi1->a1.reg<<8; goto p4_sib; } - } else if (tempi2->ic_code==IC_SHL_CONST && tempi2->a1.type==TY_REG+RT_I64 && + } else if (tempi2->ic_code==IC_SHL_CONST && + tempi2->a1.type==TY_REG+RT_I64 && tempi2->ic_data<=3) { if (tempi2->a1.reg!=REG_RSP) { tempi->a1.disp=tempi1->a1.disp; @@ -575,7 +581,7 @@ p4_sib: tempil1->ic_flags|=ICF_NO_DEPEND_RESULT; tempil1->r.type=TY_NULL+tempil1->r.type&RT_MASK; } else if (tempi->a1.type&TY_MASK==TY_STK && - tempil1->r.type&TY_MASK==TY_STK) { + tempil1->r.type&TY_MASK==TY_STK) { tempi->a1.type=TY_REG+tempi->a1.type&RT_MASK; tempi->a1.reg=REG_RAX; tempi->a1.disp=0; @@ -697,9 +703,9 @@ p4_sib: case IC_CALL_END2: break; default: - "Pass:%d Missing IC handler\n",lx->pass; - ICPut(lx,tempi); - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Missing IC handler\n",cc->pass; + ICPut(cc,tempi); + LexExcept(cc,"Compiler Optimization Error at "); } if (tempi) { while (OptIC4(tempi)); @@ -711,7 +717,7 @@ p4_sib: tempi=tempi_next; } if (ps->ptr>2) { - "Pass:%d Stk:%08X\n",lx->pass,ps->ptr; - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Stk:%08X\n",cc->pass,ps->ptr; + LexExcept(cc,"Compiler Optimization Error at "); } } diff --git a/Compiler/OptPass5.CPP b/Compiler/OptPass5.CPP index 945b4be..838fbe0 100644 --- a/Compiler/OptPass5.CPP +++ b/Compiler/OptPass5.CPP @@ -1,18 +1,18 @@ -U0 OptPass5(CLex *lx) +U0 OptPass5(CCmpCtrl *cc) { CIntermediateCode *tempi,*tempi1; I64 code,i,ty,pt,ty1,pt1; - CPrsStk *ps=lx->ps; + CPrsStk *ps=cc->ps; ps->ptr=0; ps->ptr2=0; - tempi=lx->lcc.lcc_root.next; + tempi=cc->coc.coc_root.next; while (code=tempi->ic_code) { if (code>IC_NOP2) { if (tempi->ic_flags&ICF_TRACE) { - if (Bt(&lx->otrace_mask,5)) { + if (Bt(&cc->otrace_mask,5)) { "%2d:",ps->ptr; - ICPut(lx,tempi); + ICPut(cc,tempi); } } if (intermediate_code_table[code].arg_cnt==IS_V_ARG) @@ -29,7 +29,7 @@ U0 OptPass5(CLex *lx) if (tempi->a2.type&TY_MASK==TY_STK) { tempi1=PrsPop(ps); if (tempi1->ic_code==IC_MOV || - tempi1->ic_code==IC_REG) { + tempi1->ic_code==IC_REG) { if (tempi1->ic_flags & ICF_R_TO_INT) { if (tempi1->a1.type&TY_MASK==TY_IMM) tempi1->a1.disp=tempi1->a1.disp(F64); @@ -70,7 +70,7 @@ U0 OptPass5(CLex *lx) if (tempi->a1.type&TY_MASK==TY_STK) { tempi1=PrsPop(ps); if (tempi1->ic_code==IC_MOV || - tempi1->ic_code==IC_REG) { + tempi1->ic_code==IC_REG) { if (tempi1->ic_flags & ICF_R_TO_INT) { if (tempi1->a1.type&TY_MASK==TY_IMM) tempi1->a1.disp=tempi1->a1.disp(F64); @@ -110,13 +110,14 @@ U0 OptPass5(CLex *lx) OptSetNOP2(tempi1); } } - if (tempi->r.type&TY_MASK==TY_STK && !(tempi->ic_flags&ICF_NO_DEPEND_RESULT)) + if (tempi->r.type&TY_MASK==TY_STK && + !(tempi->ic_flags&ICF_NO_DEPEND_RESULT)) PrsPush(ps,tempi); } tempi=tempi->next; } if (ps->ptr>2) { - "Pass:%d Stk:%08X\n",lx->pass,ps->ptr; - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Stk:%08X\n",cc->pass,ps->ptr; + LexExcept(cc,"Compiler Optimization Error at "); } } diff --git a/Compiler/OptPass6.CPP b/Compiler/OptPass6.CPP index 0858792..05e5d0c 100644 --- a/Compiler/OptPass6.CPP +++ b/Compiler/OptPass6.CPP @@ -4,9 +4,9 @@ Bool OptIC6(CIntermediateCode *tempi) if (tempi->ic_codeic_code==IC_ADD_CONST && tempi->ic_code==IC_DEREF && - tempi->ic_flags&ICF_A1_WAS_STK && tempi->a1.type&TY_MASK==TY_REG && - tempil1->r.type&TY_MASK==TY_REG && MIN_I32<=tempil1->ic_data<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tempil1->a1.reg)) { + tempi->ic_flags&ICF_A1_WAS_STK && tempi->a1.type&TY_MASK==TY_REG && + tempil1->r.type&TY_MASK==TY_REG && MIN_I32<=tempil1->ic_data<=MAX_I32 && + !Bt(&cmp.non_ptr_vars_mask,tempil1->a1.reg)) { if (tempil1->a1.type&TY_MASK==TY_REG) { tempi->ic_flags=tempi->ic_flags&~ICF_A1_WAS_STK | tempil1->ic_flags; tempi->ic_code=IC_MOV; @@ -25,20 +25,20 @@ Bool OptIC6(CIntermediateCode *tempi) return FALSE; } -U0 OptPass6Lag(CLex *lx,CPrsStk *ps,CIntermediateCode *tempi, +U0 OptPass6Lag(CCmpCtrl *cc,CPrsStk *ps,CIntermediateCode *tempi, I64 *i_,I64 num_stk,I64 *_clobbered_reg_mask,I64 fun_num) { I64 i=*i_,j,k,l,code,clobbered_reg_mask=*_clobbered_reg_mask; CHashFun *tempf; code=tempi->ic_code; - if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,6)) { + if (tempi->ic_flags&ICF_TRACE && Bt(&cc->otrace_mask,6)) { "%2d:",i; - ICPut(lx,tempi); + ICPut(cc,tempi); } if (code==IC_CALL_START) { k=MinI64(i,num_stk); j=0; - //See $LK,"STK TEMP ALLOCATION",A="FF:::/Compiler/CInit.CPP,STK TEMP ALLOCATION"$ +//See $LK,"STK TEMP ALLOCATION",A="FF:::/Compiler/CInit.CPP,STK TEMP ALLOCATION"$ if (fun_num&1) for (l=0;lps; + I64 i=0,num_stk,clobbered_reg_mask=REGG_C_CLOBBERED,fun_num=0; + CPrsStk *ps=cc->ps; ps->ptr=0; ps->ptr2=0; - if (Bt(&lx->opts,OPTf_NO_REG_VAR) || lx->flags&LF_NO_REG_OPT) + if (Bt(&cc->opts,OPTf_NO_REG_VAR) || cc->flags&CCF_NO_REG_OPT) num_stk=0; else num_stk=cmp.num_stk_temps; - tempi=lx->lcc.lcc_root.next; + tempi=cc->coc.coc_root.next; old_tempil2=NULL; tempil1=tempil2=&cmp.ic_nop; while (tempi->ic_code) { @@ -132,7 +132,8 @@ U0 OptPass6(CLex *lx) !(tempil2->ic_flags&ICF_PUSH_RESULT)) { if (tempi->ic_code==IC_ASSIGN && tempi->ic_flags&ICF_NOT_ADDR && tempi->ic_flags&ICF_NO_DEPEND_RESULT && - tempil2->ic_code!=IC_CALL_END && tempil2->ic_code!=IC_CALL_END2 && + tempil2->ic_code!=IC_CALL_END && + tempil2->ic_code!=IC_CALL_END2 && tempil2->ic_code!=IC_SET_RAX && !(tempi->ic_flags&(ICF_A2_TO_F64|ICF_A2_TO_INT)) && !(tempil2->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT))) { @@ -140,8 +141,10 @@ U0 OptPass6(CLex *lx) tempil2->r.type_pointed=tempi->a1.type_pointed; tempil2->r.reg =tempi->a1.reg; tempil2->r.disp =tempi->a1.disp; - tempil2->ic_flags=tempil2->ic_flags&~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK)| - tempi->ic_flags&~(ICF_NOT_ADDR|ICF_A1_WAS_STK|ICF_A2_WAS_STK)|ICF_DEPEND_RESULT; + tempil2->ic_flags=tempil2->ic_flags + &~(ICF_NO_DEPEND_RESULT|ICF_R_WAS_STK) + |tempi->ic_flags&~(ICF_NOT_ADDR|ICF_A1_WAS_STK|ICF_A2_WAS_STK) + |ICF_DEPEND_RESULT; old_tempil2=NULL; OptSetNOP1(tempi); } else { @@ -167,7 +170,7 @@ U0 OptPass6(CLex *lx) tempi->r.type==TY_STK+tempi->r.type&RT_MASK; if (old_tempil2!=tempil2) { if (tempil2->ic_code>IC_NOP2) - OptPass6Lag(lx,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num); + OptPass6Lag(cc,ps,tempil2,&i,num_stk,&clobbered_reg_mask,fun_num); old_tempil2=tempil2; } } @@ -177,16 +180,16 @@ U0 OptPass6(CLex *lx) tempi=tempi_next; } if (ps->ptr>2) { - "Pass:%d Stk:%08X\n",lx->pass,ps->ptr; - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Stk:%08X\n",cc->pass,ps->ptr; + LexExcept(cc,"Compiler Optimization Error at "); } - if (lx->htc.fun) { - lx->htc.fun->used_reg_mask&=~REG_STK_TEMPS_MASK; - lx->htc.fun->used_reg_mask|=clobbered_reg_mask; - lx->htc.fun->clobbered_reg_mask=clobbered_reg_mask; - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT) && - Bt(&lx->otrace_mask,6)) { - "Used Reg Mask:%04X\n",lx->htc.fun->used_reg_mask; + if (cc->htc.fun) { + cc->htc.fun->used_reg_mask&=~REGG_C_TEMP_CLOBBERED; + cc->htc.fun->used_reg_mask|=clobbered_reg_mask; + cc->htc.fun->clobbered_reg_mask=clobbered_reg_mask; + if (Bt(&cc->flags,CCf_OPT_TRACE_PRESENT) && + Bt(&cc->otrace_mask,6)) { + "Used Reg Mask:%04X\n",cc->htc.fun->used_reg_mask; "Clobbered Reg Mask:%04X\n",clobbered_reg_mask; } } diff --git a/Compiler/OptPass789A.CPP b/Compiler/OptPass789A.CPP index 81aa5ab..ccc09ed 100644 --- a/Compiler/OptPass789A.CPP +++ b/Compiler/OptPass789A.CPP @@ -1,22 +1,22 @@ -I64 OptPass789A(CLex *lx,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg) -{/*lx->pass==7 is first time -lx->pass==8 is second time -lx->pass==9 is third time -lx->pass==9 is fourth time and repeated until size stops shrinking +I64 OptPass789A(CCmpCtrl *cc,COptReg *reg_offsets,U8 *buf,CDbgInfo **_dbg) +{/*cc->pass==7 is first time +cc->pass==8 is second time +cc->pass==9 is third time +cc->pass==9 is fourth time and repeated until size stops shrinking size is now known -lx->pass==10 is final pass, code is placed into buf. +cc->pass==10 is final pass, code is placed into buf. */ CIntermediateCode *tempi,*tempi_next; - I64 i,cnt,num_lines=lx->max_line+1-lx->min_line,ip=0,ip2; + I64 i,cnt,num_lines=cc->max_line+1-cc->min_line,ip=0,ip2; U8 *ptr; - CLexCodeMisc *lb; - CExe *tempx; - CExeAbsAddr *tempa; - CExeImportExport *tempe; - CExeHeapGlbl *temphg; - CExeHeapGlblRef *temphgr; + CCodeMisc *lb; + CAOT *tempaot; + CAOTAbsAddr *tempa; + CAOTImportExport *tempie; + CAOTHeapGlbl *temphg; + CAOTHeapGlblRef *temphgr; CDbgInfo *dbg_info; - CAOTCtrl *a=lx->a; + CAOTCtrl *aotc=cc->aotc; Bool short_jmp; CICArg saved_p123[3]; CHashClass *tempc; @@ -26,53 +26,57 @@ lx->pass==10 is final pass, code is placed into buf. if (_dbg) { *_dbg=dbg_info=CAlloc(offset(CDbgInfo.body)+sizeof(U32)*(num_lines+1)); - dbg_info->min_line=lx->min_line; - dbg_info->max_line=lx->max_line; - if (lx->flags&LF_AOT_COMPILE) - dbg_info->body[0]=a->ip; + dbg_info->min_line=cc->min_line; + dbg_info->max_line=cc->max_line; + if (cc->flags&CCF_AOT_COMPILE) + dbg_info->body[0]=aotc->ip; else dbg_info->body[0]=buf; } else dbg_info=NULL; - if (Bt(&lx->flags,Lf_OPT_TRACE_PRESENT) && Bt(&lx->otrace_mask,lx->pass)) - "$$BK,1$$$$LTRED$$$$IV,1$$This code gets merged together and patched.\n$$FG$$$$IV,0$$$$BK,0$$"; + if (Bt(&cc->flags,CCf_OPT_TRACE_PRESENT) && Bt(&cc->otrace_mask,cc->pass)) + "$$BK,1$$$$LTRED$$$$IV,1$$This code gets merged together and patched.\n" + "$$FG$$$$IV,0$$$$BK,0$$"; - lx->last_float_op_ic=NULL; - tempi=&lx->lcc.lcc_root; + cc->last_float_op_ic=NULL; + tempi=&cc->coc.coc_root; tempi->ic_cnt=0; tempi->ic_last_cnt=-1; tempi=tempi->next; while (tempi->ic_code) { tempi_next=tempi->next; - if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,lx->pass)) - ICPut(lx,tempi); + if (tempi->ic_flags&ICF_TRACE && Bt(&cc->otrace_mask,cc->pass)) + ICPut(cc,tempi); ip2=ip; - if (lx->flags&LF_AOT_COMPILE) - ip2+=a->ip; + if (cc->flags&CCF_AOT_COMPILE) + ip2+=aotc->ip; else ip2+=buf; - lx->cur_ic_float_op_num=0; + cc->cur_ic_float_op_num=0; if (!(tempi->ic_flags &ICF_CODE_FINAL)) { - tempi->ic_flags=tempi->ic_flags&~(ICF_PREVIOUS_DELETED|ICF_DONT_RESTORE)|ICF_CODE_FINAL; - if (lx->pass==7) - lx->dont_push_float=Btr(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); + tempi->ic_flags=tempi->ic_flags& + ~(ICF_PREVIOUS_DELETED|ICF_DONT_RESTORE)|ICF_CODE_FINAL; + if (cc->pass==7) + cc->dont_push_float=Btr(&tempi->ic_flags,ICf_DONT_PUSH_FLOAT0); MemCpy(saved_p123,&tempi->a1,3*sizeof(CICArg)); - if (intermediate_code_table[tempi->ic_code].arg_cnt==IS_2_ARG && tempi->a1.type&TY_MASK==TY_REG && - tempi->a1.reg==REG_RAX) + if (intermediate_code_table[tempi->ic_code].arg_cnt==IS_2_ARG && + tempi->a1.type&TY_MASK==TY_REG && tempi->a1.reg==REG_RAX) tempi->ic_flags|=ICF_A1_FIRST; tempi->ic_cnt=0; tempi->ic_last_cnt=-1; if (tempi->ic_flags & ICF_A1_FIRST) { if (tempi->a1.type&TY_MASK) { if (tempi->ic_flags & ICF_A1_TO_F64) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); + ICFCvt(cc,tempi,REG_RDX, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); tempi->a1.type=TY_REG+RT_I64; tempi->a1.reg=REG_RDX; tempi->a1.disp=0; tempi->ic_flags&=~ICF_A1_FIRST; } else if (tempi->ic_flags & ICF_A1_TO_INT) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); + ICFCvt(cc,tempi,REG_RDX, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); tempi->a1.type=TY_REG+RT_I64; tempi->a1.reg=REG_RDX; tempi->a1.disp=0; @@ -89,7 +93,8 @@ lx->pass==10 is final pass, code is placed into buf. tempi->a1.disp=0; tempi->ic_flags&=~ICF_A1_FIRST; } - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); + ICFCvt(cc,tempi,REG_RAX, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); tempi->a2.type=TY_REG+RT_I64; tempi->a2.reg=REG_RAX; tempi->a2.disp=0; @@ -102,7 +107,8 @@ lx->pass==10 is final pass, code is placed into buf. tempi->a1.disp=0; tempi->ic_flags&=~ICF_A1_FIRST; } - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); + ICFCvt(cc,tempi,REG_RAX, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); tempi->a2.type=TY_REG+RT_I64; tempi->a2.reg=REG_RAX; tempi->a2.disp=0; @@ -111,12 +117,14 @@ lx->pass==10 is final pass, code is placed into buf. } else { if (tempi->a2.type&TY_MASK) { if (tempi->ic_flags & ICF_A2_TO_F64) { - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); + ICFCvt(cc,tempi,REG_RAX, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,FALSE,CN_A2,ip2); tempi->a2.type=TY_REG+RT_I64; tempi->a2.reg=REG_RAX; tempi->a2.disp=0; } else if (tempi->ic_flags & ICF_A2_TO_INT) { - ICFCvt(lx,tempi,REG_RAX,tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); + ICFCvt(cc,tempi,REG_RAX, + tempi->a2.type,tempi->a2.reg,tempi->a2.disp,TRUE,CN_A2,ip2); tempi->a2.type=TY_REG+RT_I64; tempi->a2.reg=REG_RAX; tempi->a2.disp=0; @@ -124,12 +132,14 @@ lx->pass==10 is final pass, code is placed into buf. } if (tempi->a1.type&TY_MASK) { if (tempi->ic_flags & ICF_A1_TO_F64) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); + ICFCvt(cc,tempi,REG_RDX, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,FALSE,CN_A1,ip2); tempi->a1.type=TY_REG+RT_I64; tempi->a1.reg=REG_RDX; tempi->a1.disp=0; } else if (tempi->ic_flags & ICF_A1_TO_INT) { - ICFCvt(lx,tempi,REG_RDX,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); + ICFCvt(cc,tempi,REG_RDX, + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,TRUE,CN_A1,ip2); tempi->a1.type=TY_REG+RT_I64; tempi->a1.reg=REG_RDX; tempi->a1.disp=0; @@ -142,12 +152,12 @@ lx->pass==10 is final pass, code is placed into buf. case IC_ABS_ADDR: ICU16(tempi,0xB848); ICU64(tempi,tempi->ic_data); - if (buf && lx->flags&LF_AOT_COMPILE && - !(lx->flags&(LF_NO_ABSS|LF_ASM_EXPRESSIONS))) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; + if (buf && cc->flags&CCF_AOT_COMPILE && + !(cc->flags&(CCF_NO_ABSS|CCF_ASM_EXPRESSIONS))) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + tempa->type=AAT_ADD_U64; + aotc->abss=tempa; tempa->ip=ip2+tempi->ic_cnt-8; } break; @@ -155,9 +165,10 @@ lx->pass==10 is final pass, code is placed into buf. ICU16(tempi,0xB848); ICU64(tempi,0); temphg=tempi->ic_data; - if (buf && lx->flags&LF_AOT_COMPILE && - !(lx->flags&(LF_NO_ABSS|LF_ASM_EXPRESSIONS))) {//is this necessary--flags? - temphgr=CAlloc(sizeof(CExeHeapGlblRef)); + if (buf && cc->flags&CCF_AOT_COMPILE && +//TODO:is this necessary--flags? + !(cc->flags&(CCF_NO_ABSS|CCF_ASM_EXPRESSIONS))) { + temphgr=CAlloc(sizeof(CAOTHeapGlblRef)); temphgr->next=temphg->references; temphg->references=temphgr; temphgr->ip=ip2+tempi->ic_cnt-8; @@ -166,24 +177,25 @@ lx->pass==10 is final pass, code is placed into buf. case IC_ADDR_IMPORT: ICU8(tempi,0xB8); ICU32(tempi,0); - if (buf && !(lx->flags&LF_NO_ABSS)) { + if (buf && !(cc->flags&CCF_NO_ABSS)) { tempg=tempi->ic_data; - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_IMM_U32; - tempe->ip=ip2+tempi->ic_cnt-4; - tempe->next=tempg->ie_lst; - tempg->ie_lst=tempe; + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_IMM_U32; + tempie->ip=ip2+tempi->ic_cnt-4; + tempie->next=tempg->ie_lst; + tempg->ie_lst=tempie; } ICU24(tempi,0xC06348); break; case IC_RIP: ICU16(tempi,0xB848); ICU64(tempi,ip2+tempi->ic_cnt-2); - if (lx->flags&LF_AOT_COMPILE && buf && !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; + if (cc->flags&CCF_AOT_COMPILE && buf && + !(cc->flags&CCF_NO_ABSS)) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + tempa->type=AAT_ADD_U64; + aotc->abss=tempa; tempa->ip=ip2+tempi->ic_cnt-8; } break; @@ -212,52 +224,64 @@ lx->pass==10 is final pass, code is placed into buf. ICFlagBranch(tempi,ip,0x75850F,buf); break; case IC_BR_EQUAL_EQUAL: - ICCmpAndBranch(tempi,FALSE,ip,0x74840F,0x74840F,0x74840F,0x74840F,buf,ip2); + ICCmpAndBranch(tempi,FALSE,ip,0x74840F,0x74840F, + 0x74840F,0x74840F,buf,ip2); break; case IC_BR_EQUAL_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x74840F,0x74840F,0x74840F,0x74840F,buf,ip2); + ICCmpAndBranch(tempi,TRUE,ip,0x74840F,0x74840F, + 0x74840F,0x74840F,buf,ip2); break; case IC_BR_NOT_EQUAL: - ICCmpAndBranch(tempi,FALSE,ip,0x75850F,0x75850F,0x75850F,0x75850F,buf,ip2); + ICCmpAndBranch(tempi,FALSE,ip,0x75850F,0x75850F, + 0x75850F,0x75850F,buf,ip2); break; case IC_BR_NOT_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x75850F,0x75850F,0x75850F,0x75850F,buf,ip2); + ICCmpAndBranch(tempi,TRUE,ip,0x75850F,0x75850F, + 0x75850F,0x75850F,buf,ip2); break; case IC_BR_LESS: if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x72820F,0x77870F,buf,ip2); + ICFCmpAndBranch(cc,tempi, ip,0x72820F,0x77870F,buf,ip2); else - ICCmpAndBranch(tempi,FALSE,ip,0x72820F,0x7C8C0F,0x77870F,0x7F8F0F,buf,ip2); + ICCmpAndBranch(tempi,FALSE,ip,0x72820F,0x7C8C0F, + 0x77870F,0x7F8F0F,buf,ip2); break; case IC_BR_LESS2: - ICCmpAndBranch(tempi,TRUE,ip,0x72820F,0x7C8C0F,0x77870F,0x7F8F0F,buf,ip2); + ICCmpAndBranch(tempi,TRUE,ip,0x72820F,0x7C8C0F, + 0x77870F,0x7F8F0F,buf,ip2); break; case IC_BR_GREATER_EQUAL: if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x73830F,0x76860F,buf,ip2); + ICFCmpAndBranch(cc,tempi, ip,0x73830F,0x76860F,buf,ip2); else - ICCmpAndBranch(tempi,FALSE,ip,0x73830F,0x7D8D0F,0x76860F,0x7E8E0F,buf,ip2); + ICCmpAndBranch(tempi,FALSE,ip,0x73830F,0x7D8D0F, + 0x76860F,0x7E8E0F,buf,ip2); break; case IC_BR_GREATER_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x73830F,0x7D8D0F,0x76860F,0x7E8E0F,buf,ip2); + ICCmpAndBranch(tempi,TRUE,ip,0x73830F,0x7D8D0F, + 0x76860F,0x7E8E0F,buf,ip2); break; case IC_BR_GREATER: if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x77870F,0x72820F,buf,ip2); + ICFCmpAndBranch(cc,tempi, ip,0x77870F,0x72820F,buf,ip2); else - ICCmpAndBranch(tempi,FALSE,ip,0x77870F,0x7F8F0F,0x72820F,0x7C8C0F,buf,ip2); + ICCmpAndBranch(tempi,FALSE,ip,0x77870F,0x7F8F0F, + 0x72820F,0x7C8C0F,buf,ip2); break; case IC_BR_GREATER2: - ICCmpAndBranch(tempi,TRUE,ip,0x77870F,0x7F8F0F,0x72820F,0x7C8C0F,buf,ip2); + ICCmpAndBranch(tempi,TRUE,ip,0x77870F,0x7F8F0F, + 0x72820F,0x7C8C0F,buf,ip2); break; case IC_BR_LESS_EQUAL: if (tempi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(lx,tempi, ip,0x76860F,0x73830F,buf,ip2); + ICFCmpAndBranch(cc,tempi, ip,0x76860F,0x73830F,buf,ip2); else - ICCmpAndBranch(tempi,FALSE,ip,0x76860F,0x7E8E0F,0x73830F,0x7D8D0F,buf,ip2); + ICCmpAndBranch(tempi,FALSE,ip,0x76860F,0x7E8E0F, + 0x73830F,0x7D8D0F,buf,ip2); break; case IC_BR_LESS_EQUAL2: - ICCmpAndBranch(tempi,TRUE,ip,0x76860F,0x7E8E0F,0x73830F,0x7D8D0F,buf,ip2); + ICCmpAndBranch(tempi,TRUE,ip,0x76860F,0x7E8E0F, + 0x73830F,0x7D8D0F,buf,ip2); break; case IC_BR_BT: ICBrBitOps(tempi,ip,0xA30F,0x20BA0F,0x72820F,buf,ip2); @@ -326,33 +350,33 @@ lx->pass==10 is final pass, code is placed into buf. case IC_STR_CONST: case IC_GET_LABEL: lb=tempi->ic_data; - if (lx->flags&LF_AOT_COMPILE) - i=lb->addr+a->ip; + if (cc->flags&CCF_AOT_COMPILE) + i=lb->addr+aotc->ip; else i=lb->addr+buf; ICLea(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - TY_RIP_DISP32+RT_PTR,0,i,lx,buf,ip2); + TY_RIP_DISP32+RT_PTR,0,i,cc,buf,ip2); break; case IC_ASM: - tempx=tempi->ic_data; - tempi->ic_cnt+=tempx->ex_U8s; + tempaot=tempi->ic_data; + tempi->ic_cnt+=tempaot->aot_U8s; if (buf) { - MemCpy(buf+ip,tempx->buf,tempx->ex_U8s); - Free(tempx->buf); - tempx->buf=buf; - tempx->ip=ip; - tempx->ip2=ip2; - if (lx->flags&LF_AOT_COMPILE) - CmpFixUpAOTAsm(lx,tempx); + MemCpy(buf+ip,tempaot->buf,tempaot->aot_U8s); + Free(tempaot->buf); + tempaot->buf=buf; + tempaot->ip=ip; + tempaot->ip2=ip2; + if (cc->flags&CCF_AOT_COMPILE) + CmpFixUpAOTAsm(cc,tempaot); else - CmpFixUpJITAsm(lx,tempx); + CmpFixUpJITAsm(cc,tempaot); cnt=tempi->ic_cnt; goto op789A_skip_copy; } break; case IC_CALL: i=tempi->ic_data-(ip2+5); - if (!(MIN_I32<=i<=MAX_I32) && !(lx->flags&LF_AOT_COMPILE)) { + if (!(MIN_I32<=i<=MAX_I32) && !(cc->flags&CCF_AOT_COMPILE)) { ICU16(tempi,0xBB48); ICU64(tempi,tempi->ic_data); ICU16(tempi,0xD3FF); @@ -374,14 +398,14 @@ lx->pass==10 is final pass, code is placed into buf. break; case IC_CALL_INDIRECT2: ICU16(tempi,0xBB48); - if (lx->flags&LF_AOT_COMPILE) i=ip2+tempi->ic_cnt; + if (cc->flags&CCF_AOT_COMPILE) i=ip2+tempi->ic_cnt; ICU64(tempi,tempi->ic_data); ICU16(tempi,0x13FF); - if (buf && lx->flags&LF_AOT_COMPILE&& !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; + if (buf && cc->flags&CCF_AOT_COMPILE&& !(cc->flags&CCF_NO_ABSS)) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + tempa->type=AAT_ADD_U64; + aotc->abss=tempa; tempa->ip=i; } break; @@ -391,11 +415,11 @@ lx->pass==10 is final pass, code is placed into buf. ICU64(tempi,0); if (buf) { tempf=tempi->ic_data; - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_IMM_I64; - tempe->ip=ip2+tempi->ic_cnt-8; - tempe->next=tempf->ie_lst; - tempf->ie_lst=tempe; + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_IMM_I64; + tempie->ip=ip2+tempi->ic_cnt-8; + tempie->next=tempf->ie_lst; + tempf->ie_lst=tempie; } ICU16(tempi,0xD3FF); } else { @@ -403,11 +427,11 @@ lx->pass==10 is final pass, code is placed into buf. ICU32(tempi,0); if (buf) { tempf=tempi->ic_data; - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_REL_I32; - tempe->ip=ip2+tempi->ic_cnt-4; - tempe->next=tempf->ie_lst; - tempf->ie_lst=tempe; + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_REL_I32; + tempie->ip=ip2+tempi->ic_cnt-4; + tempie->next=tempf->ie_lst; + tempf->ie_lst=tempie; } } break; @@ -415,11 +439,14 @@ lx->pass==10 is final pass, code is placed into buf. tempi->ic_flags&=~ICF_CODE_FINAL; break; case IC_LEAVE: - if (lx->htc.fun) { - if (Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) - ICPopRegs(tempi,REG_ALWAYS_CLOBBERED_MASK&~(1<htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK|REG_STK_TEMPS_MASK)); + if (cc->htc.fun) { + if (Bt(&cc->htc.fun->flags,Ff_INTERRUPT)) + ICPopRegs(tempi,REGG_C_CLOBBERED|cc->htc.fun->used_reg_mask& + (REGG_C_LOCAL_VARS|REGG_C_LOCAL_NON_PTR_VARS| + REGG_C_TEMP_CLOBBERED)); else - ICPopRegs(tempi,lx->htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK)); + ICPopRegs(tempi,cc->htc.fun->used_reg_mask& + (REGG_C_LOCAL_VARS|REGG_C_LOCAL_NON_PTR_VARS)); } if (tempi->ic_data<=MAX_I16) { if (tempi->ic_data) @@ -430,15 +457,16 @@ lx->pass==10 is final pass, code is placed into buf. ICAddRSP(tempi,tempi->ic_data); ICU8(tempi,0x5D); //POP RBP } - if (lx->htc.fun && Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) { - if (Bt(&lx->htc.fun->flags,Ff_HASERRCODE)) + if (cc->htc.fun && Bt(&cc->htc.fun->flags,Ff_INTERRUPT)) { + if (Bt(&cc->htc.fun->flags,Ff_HASERRCODE)) ICAddRSP(tempi,8); ICU16(tempi,0xCF48); - } else if (lx->htc.fun && lx->htc.fun->arg_cnt && - (Bt(&lx->htc.fun->flags,Ff_RET1) || Bt(&lx->htc.fun->flags,Ff_ARGPOP)) && - !Bt(&lx->htc.fun->flags,Ff_NOARGPOP)) { + } else if (cc->htc.fun && cc->htc.fun->arg_cnt && + (Bt(&cc->htc.fun->flags,Ff_RET1) || + Bt(&cc->htc.fun->flags,Ff_ARGPOP)) && + !Bt(&cc->htc.fun->flags,Ff_NOARGPOP)) { ICU8(tempi,0xC2); - ICU16(tempi,lx->htc.fun->arg_cnt<<3); + ICU16(tempi,cc->htc.fun->arg_cnt<<3); } else ICU8(tempi,0xC3); break; @@ -479,7 +507,7 @@ lx->pass==10 is final pass, code is placed into buf. break; case IC_UNARY_MINUS: if (tempi->r.type&RT_MASK==RT_F64) - ICFUnaryMinus(lx,tempi,buf,ip2); + ICFUnaryMinus(cc,tempi,buf,ip2); else ICUnaries(tempi,SLASH_OP_NEG,ip2); break; @@ -501,60 +529,62 @@ lx->pass==10 is final pass, code is placed into buf. if (tempi->ic_flags&ICF_USE_INT) ICPostIncDec(tempi,SLASH_OP_INC,ip2); else - ICFPostIncDec(lx,tempi,CMP_TEMPLATE_INC,ip2); + ICFPostIncDec(cc,tempi,CMP_TEMPLATE_INC,ip2); break; case IC__MM: if (tempi->ic_flags&ICF_USE_INT) ICPostIncDec(tempi,SLASH_OP_DEC,ip2); else - ICFPostIncDec(lx,tempi,CMP_TEMPLATE_DEC,ip2); + ICFPostIncDec(cc,tempi,CMP_TEMPLATE_DEC,ip2); break; case IC_PP_: if (tempi->ic_flags&ICF_USE_INT) ICPreIncDec(tempi,SLASH_OP_INC,ip2); else - ICFPreIncDec(lx,tempi,CMP_TEMPLATE_INC,ip2); + ICFPreIncDec(cc,tempi,CMP_TEMPLATE_INC,ip2); break; case IC_MM_: if (tempi->ic_flags&ICF_USE_INT) ICPreIncDec(tempi,SLASH_OP_DEC,ip2); else - ICFPreIncDec(lx,tempi,CMP_TEMPLATE_DEC,ip2); + ICFPreIncDec(cc,tempi,CMP_TEMPLATE_DEC,ip2); break; case IC_LEA: ICLea(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,lx,buf,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,cc,buf,ip2); break; case IC_POWER: - ICFPow(lx,tempi,buf,ip2); + ICFPow(cc,tempi,buf,ip2); break; case IC_SHL: ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); break; case IC_SHR: ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); break; case IC_MUL: if (tempi->ic_flags&ICF_USE_INT) ICMul(tempi,ip2); else - ICFMul(lx,tempi,buf,ip2); + ICFMul(cc,tempi,buf,ip2); break; case IC_DIV: if (tempi->ic_flags&ICF_USE_INT) ICDiv(tempi,ip2); else - ICFDiv(lx,tempi,buf,ip2); + ICFDiv(cc,tempi,buf,ip2); break; case IC_MOD: if (tempi->ic_flags&ICF_USE_INT) ICMod(tempi,ip2); else - ICFMod(lx,tempi,ip2); + ICFMod(cc,tempi,ip2); break; case IC_AND: ICAddEct(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, @@ -577,7 +607,7 @@ lx->pass==10 is final pass, code is placed into buf. tempi->a1.type,tempi->a1.reg,tempi->a1.disp, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x03,ip2); else - ICFAdd(lx,tempi,buf,ip2); + ICFAdd(cc,tempi,buf,ip2); break; case IC_SUB: if (tempi->ic_flags&ICF_USE_INT) @@ -585,7 +615,7 @@ lx->pass==10 is final pass, code is placed into buf. tempi->a1.type,tempi->a1.reg,tempi->a1.disp, tempi->a2.type,tempi->a2.reg,tempi->a2.disp,ip2); else - ICFSub(lx,tempi,buf,ip2); + ICFSub(cc,tempi,buf,ip2); break; case IC_EQUAL_EQUAL: ICCmp(tempi,0x75,0x75,ip2); @@ -597,25 +627,25 @@ lx->pass==10 is final pass, code is placed into buf. if (tempi->ic_flags&ICF_USE_INT) ICCmp(tempi,0x73,0x7D,ip2); else - ICFCmp(lx,tempi,CMP_TEMPLATE_LESS,ip2); + ICFCmp(cc,tempi,CMP_TEMPLATE_LESS,ip2); break; case IC_GREATER_EQUAL: if (tempi->ic_flags&ICF_USE_INT) ICCmp(tempi,0x72,0x7C,ip2); else - ICFCmp(lx,tempi,CMP_TEMPLATE_GREATER_EQUAL,ip2); + ICFCmp(cc,tempi,CMP_TEMPLATE_GREATER_EQUAL,ip2); break; case IC_GREATER: if (tempi->ic_flags&ICF_USE_INT) ICCmp(tempi,0x76,0x7E,ip2); else - ICFCmp(lx,tempi,CMP_TEMPLATE_GREATER,ip2); + ICFCmp(cc,tempi,CMP_TEMPLATE_GREATER,ip2); break; case IC_LESS_EQUAL: if (tempi->ic_flags&ICF_USE_INT) ICCmp(tempi,0x77,0x7F,ip2); else - ICFCmp(lx,tempi,CMP_TEMPLATE_LESS_EQUAL,ip2); + ICFCmp(cc,tempi,CMP_TEMPLATE_LESS_EQUAL,ip2); break; case IC_AND_AND: ICAndAnd(tempi,ip2); @@ -639,31 +669,33 @@ lx->pass==10 is final pass, code is placed into buf. ICShiftEqual(tempi,tempi->a1.type_pointed, tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); break; case IC_SHR_EQUAL: ICShiftEqual(tempi,tempi->a1.type_pointed, tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); break; case IC_MUL_EQUAL: if (tempi->ic_flags&ICF_USE_INT) ICMulEqual(tempi,ip2); else - ICFOpEqual(lx,tempi,SLASH_OP_FMUL,buf,ip2); + ICFOpEqual(cc,tempi,SLASH_OP_FMUL,buf,ip2); break; case IC_DIV_EQUAL: if (tempi->ic_flags&ICF_USE_INT) ICDivEqual(tempi,FALSE,ip2); else - ICFOpEqual(lx,tempi,SLASH_OP_FDIV,buf,ip2); + ICFOpEqual(cc,tempi,SLASH_OP_FDIV,buf,ip2); break; case IC_MOD_EQUAL: if (tempi->ic_flags&ICF_USE_INT) ICDivEqual(tempi,TRUE,ip2); else - ICFModEqual(lx,tempi,ip2); + ICFModEqual(cc,tempi,ip2); break; case IC_AND_EQUAL: ICAndEqual(tempi,ip2); @@ -679,54 +711,64 @@ lx->pass==10 is final pass, code is placed into buf. ICAddSubEctEqual(tempi,tempi->a1.type_pointed, tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x010000000003,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp, + 0x010000000003,ip2); else - ICFOpEqual(lx,tempi,SLASH_OP_FADD,buf,ip2); + ICFOpEqual(cc,tempi,SLASH_OP_FADD,buf,ip2); break; case IC_SUB_EQUAL: if (tempi->ic_flags&ICF_USE_INT) ICAddSubEctEqual(tempi,tempi->a1.type_pointed, tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - tempi->a2.type,tempi->a2.reg,tempi->a2.disp,0x29000000052B,ip2); + tempi->a2.type,tempi->a2.reg,tempi->a2.disp, + 0x29000000052B,ip2); else - ICFOpEqual(lx,tempi,SLASH_OP_FSUB,buf,ip2); + ICFOpEqual(cc,tempi,SLASH_OP_FSUB,buf,ip2); break; case IC_SHL_CONST: ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_IMM+RT_I64,0,tempi->ic_data,0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + TY_IMM+RT_I64,0,tempi->ic_data, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); break; case IC_SHR_CONST: ICShift(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, tempi->a1.type,tempi->a1.reg,tempi->a1.disp, - TY_IMM+RT_I64,0,tempi->ic_data,0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + TY_IMM+RT_I64,0,tempi->ic_data, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); break; case IC_ADD_CONST: ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data,0x0003,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data, + 0x0003,ip2); break; case IC_SUB_CONST: ICAddSubEctImm(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, - tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data,0x052B,ip2); + tempi->a1.type,tempi->a1.reg,tempi->a1.disp,tempi->ic_data, + 0x052B,ip2); break; case IC_ENTER: ICU32(tempi,0xEC8B4855); if (tempi->ic_data) ICAddRSP(tempi,-tempi->ic_data,FALSE); - if (lx->htc.fun) { - if (Bt(&lx->htc.fun->flags,Ff_INTERRUPT)) - ICPushRegs(tempi,REG_ALWAYS_CLOBBERED_MASK&~(1<htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK|REG_STK_TEMPS_MASK)); + if (cc->htc.fun) { + if (Bt(&cc->htc.fun->flags,Ff_INTERRUPT)) + ICPushRegs(tempi,REGG_C_CLOBBERED|cc->htc.fun->used_reg_mask& + (REGG_C_LOCAL_VARS|REGG_C_LOCAL_NON_PTR_VARS| + REGG_C_TEMP_CLOBBERED)); else { if (sys_var_init_flag&1 && i) ICLocalVarInit(tempi); - ICPushRegs(tempi,lx->htc.fun->used_reg_mask&(REG_VARS_MASK|REG_NON_PTR_MASK)); + ICPushRegs(tempi,cc->htc.fun->used_reg_mask + &(REGG_C_LOCAL_VARS|REGG_C_LOCAL_NON_PTR_VARS)); } for (i=0;i0 && reg_offsets[i].offset!=MAX_I64) { tempc=OptClassFwd(reg_offsets[i].m->member_class); ICMov(tempi,TY_REG+RT_I64,i,0, - TY_DISP+tempc->raw_type,REG_RBP,reg_offsets[i].offset,ip2); + TY_DISP+tempc->raw_type, + REG_RBP,reg_offsets[i].offset,ip2); } } break; @@ -767,10 +809,10 @@ lx->pass==10 is final pass, code is placed into buf. ICU24(tempi,0x01E083); //AND EAX,1 break; case IC_RDTSC: - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); break; case IC_HPET: - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_HPET,TRUE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_HPET,TRUE,FALSE,FALSE,CN_MAIN); break; case IC_SET_RFLAGS: ICPush(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); @@ -836,7 +878,8 @@ lx->pass==10 is final pass, code is placed into buf. case IC_SIGN_I64: ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_SIGN_I64,TRUE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_SIGN_I64, + TRUE,FALSE,FALSE,CN_MAIN); break; case IC_PREEMPT: ICPreempt(tempi,ip2); @@ -845,34 +888,34 @@ lx->pass==10 is final pass, code is placed into buf. ICToUpper(tempi,ip2); break; case IC_TO_I64: - ICToI64(lx,tempi,ip2); + ICToI64(cc,tempi,ip2); break; case IC_TO_F64: - ICToF64(lx,tempi,ip2); + ICToF64(cc,tempi,ip2); break; case IC_TO_BOOL: - ICToBool(lx,tempi,ip2); + ICToBool(cc,tempi,ip2); break; case IC_SQR: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SQR,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_SQR,ip2); break; case IC_ABS: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_ABS,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_ABS,ip2); break; case IC_SQRT: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SQRT,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_SQRT,ip2); break; case IC_SIN: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_SIN,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_SIN,ip2); break; case IC_COS: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_COS,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_COS,ip2); break; case IC_TAN: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_TAN,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_TAN,ip2); break; case IC_ATAN: - ICFTemplateFun(lx,tempi,CMP_TEMPLATE_ATAN,ip2); + ICFTemplateFun(cc,tempi,CMP_TEMPLATE_ATAN,ip2); break; case IC_ABS_I64: ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, @@ -923,7 +966,7 @@ lx->pass==10 is final pass, code is placed into buf. case IC_STRLEN: ICMov(tempi,TY_REG+RT_I64,REG_RAX,0, tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); - ICCopyTemplate(lx,tempi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tempi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_MAIN); break; case IC_IN_U32: if (tempi->a1.type&TY_MASK==TY_IMM) { @@ -1049,10 +1092,10 @@ lx->pass==10 is final pass, code is placed into buf. } break; case IC_NOBOUND_SWITCH: - ICSwitch(tempi,ip,TRUE,lx,buf,ip2); + ICSwitch(tempi,ip,TRUE,cc,buf,ip2); break; case IC_SWITCH: - ICSwitch(tempi,ip,FALSE,lx,buf,ip2); + ICSwitch(tempi,ip,FALSE,cc,buf,ip2); break; case IC_NOP1: case IC_NOP2: @@ -1077,9 +1120,9 @@ lx->pass==10 is final pass, code is placed into buf. case IC_ADD_RSP1: break; default: - "Pass:%d Missing IC handler\n",lx->pass; - ICPut(lx,tempi); - LexExcept(lx,"Compiler Optimization Error at "); + "Pass:%d Missing IC handler\n",cc->pass; + ICPut(cc,tempi); + LexExcept(cc,"Compiler Optimization Error at "); } if (tempi->r.type&TY_MASK) { if (tempi->ic_flags & ICF_R_TO_F64) { @@ -1089,12 +1132,14 @@ lx->pass==10 is final pass, code is placed into buf. ICU24(tempi,0x1BDD48); ICU8(tempi,0x9B); } else { - ICFCvt(lx,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp,FALSE,CN_R,ip2); + ICFCvt(cc,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp, + FALSE,CN_R,ip2); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, TY_REG+RT_I64,REG_RAX,0,ip2); } } else if (tempi->ic_flags & ICF_R_TO_INT) { - ICFCvt(lx,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp,TRUE,CN_R,ip2); + ICFCvt(cc,tempi,REG_RAX,tempi->r.type,tempi->r.reg,tempi->r.disp, + TRUE,CN_R,ip2); ICMov(tempi,tempi->r.type,tempi->r.reg,tempi->r.disp, TY_REG+RT_I64,REG_RAX,0,ip2); } @@ -1102,19 +1147,19 @@ lx->pass==10 is final pass, code is placed into buf. } cnt=tempi->ic_cnt; if (tempi->ic_flags&ICF_DEL_PREVIOUS_INS) { - if (lx->pass>8) + if (cc->pass>8) cnt=tempi->ic_last_cnt; tempi->ic_flags&=~ICF_DEL_PREVIOUS_INS; } if (cnt && buf) MemCpy(buf+ip,tempi->ic_body,cnt); op789A_skip_copy: - if (dbg_info && lx->min_line<=tempi->ic_line<=lx->max_line) { - i=tempi->ic_line-lx->min_line; + if (dbg_info && cc->min_line<=tempi->ic_line<=cc->max_line) { + i=tempi->ic_line-cc->min_line; if (!dbg_info->body[i]) dbg_info->body[i]=ip2; } - if (tempi->ic_flags&ICF_TRACE && Bt(&lx->otrace_mask,lx->pass) && cnt) { + if (tempi->ic_flags&ICF_TRACE && Bt(&cc->otrace_mask,cc->pass) && cnt) { "$$RED$$"; if (buf) Un(buf+ip,cnt,64); @@ -1131,8 +1176,8 @@ op789A_next: tempi=tempi_next; } - lb=lx->lcc.lcc_next_misc; - while (lb!=&lx->lcc.lcc_next_misc) { + lb=cc->coc.coc_next_misc; + while (lb!=&cc->coc.coc_next_misc) { switch (lb->type) { case CMT_STR_CONST: lb->addr=ip; @@ -1156,13 +1201,13 @@ op789A_next: } else { if (buf) for (i=0;irange;i++) { - if (lx->flags&LF_AOT_COMPILE && !(lx->flags&LF_NO_ABSS)) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U32; - a->abss=tempa; - tempa->ip=a->ip+lb->addr+i<<2; - *ptr(U32 *)++=lb->jmp_table[i]->addr+a->ip; + if (cc->flags&CCF_AOT_COMPILE && !(cc->flags&CCF_NO_ABSS)) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + tempa->type=AAT_ADD_U32; + aotc->abss=tempa; + tempa->ip=aotc->ip+lb->addr+i<<2; + *ptr(U32 *)++=lb->jmp_table[i]->addr+aotc->ip; } else *ptr(U32 *)++=lb->jmp_table[i]->addr+buf; } @@ -1179,8 +1224,8 @@ op789A_next: lb=lb->next; } if (dbg_info) { - if (lx->flags&LF_AOT_COMPILE) - dbg_info->body[num_lines]=ip+a->ip; + if (cc->flags&CCF_AOT_COMPILE) + dbg_info->body[num_lines]=ip+aotc->ip; else dbg_info->body[num_lines]=ip+buf; } diff --git a/Compiler/PrsExp.CPP b/Compiler/PrsExp.CPP index 81fc34d..6fe34aa 100644 --- a/Compiler/PrsExp.CPP +++ b/Compiler/PrsExp.CPP @@ -1,40 +1,3 @@ -U0 ParenWarning(CLex *lx) -{ - if (Bt(&lx->opts,OPTf_WARN_PAREN) && - !(lx->cur_lfn->flags&LFSF_DEFINE)) - LexWarn(lx,"Unnecessary parenthesis "); -} - -U0 PrsPush(CPrsStk *ps,I64 val) -{ - ps->stk[++ps->ptr]=val; -} - -I64 PrsPop(CPrsStk *ps) -{ - return ps->stk[ps->ptr--]; -} - -U0 PrsPush2(CPrsStk *ps,I64 val) -{ - ps->stk2[++ps->ptr2]=val; -} - -I64 PrsPop2(CPrsStk *ps) -{ - return ps->stk2[ps->ptr2--]; -} - -U0 PrsPopDeref(CPrsStk *ps) -{ - I64 i=PrsPop(ps); - CHashClass *tempc=PrsPop(ps); - if (i.u16[0]!=IC_DEREF) { - PrsPush(ps,tempc); - PrsPush(ps,i); - } -} - #define PE_UNARY_TERM1 0 #define PE_UNARY_TERM2 1 #define PE_MAYBE_MODIFIERS 2 @@ -49,57 +12,57 @@ U0 PrsPopDeref(CPrsStk *ps) #define PE_POP_ALL1 11 #define PE_POP_ALL2 12 -CIntermediateCode *PrsAddOp(CLex *lx,I64 stk_op,CHashClass *tempc) +CIntermediateCode *PrsAddOp(CCmpCtrl *cc,I64 stk_op,CHashClass *tempc) { - CIntermediateCode *tempi=lx->lcc.lcc_root.last; + CIntermediateCode *tempi=cc->coc.coc_root.last; Bool div_sizeof=FALSE; switch (stk_op.u16[0]) { case IC_ADD: if (tempc->ptr_stars_cnt && !tempi->ic_class->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { - LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_SIZEOF,1,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_MUL,0,cmp.internal_types[RT_I64]); } break; case IC_SUB: if (tempc->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { if (!tempi->ic_class->ptr_stars_cnt) { - LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_SIZEOF,1,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_MUL,0,cmp.internal_types[RT_I64]); } else div_sizeof=TRUE; } break; case IC_AND_AND: case IC_OR_OR: - LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_NOP1,0,cmp.internal_types[RT_I64]); break; case IC_ADD_EQUAL: case IC_SUB_EQUAL: if (tempc->ptr_stars_cnt) { - LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_SIZEOF,1,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_MUL,0,cmp.internal_types[RT_I64]); } break; } - tempi=LCCAdd(lx,stk_op,0,tempc); + tempi=ICAdd(cc,stk_op,0,tempc); if (stk_op.u8[3]&ECF_HAS_PUSH_CMP) { tempi->ic_flags|=ICF_POP_CMP; - LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_AND_AND,0,cmp.internal_types[RT_I64],ICF_POP_CMP); + ICAdd(cc,IC_NOP1,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_AND_AND,0,cmp.internal_types[RT_I64],ICF_POP_CMP); } if (div_sizeof) { tempc--; if (tempc->size!=1) { - LCCAdd(lx,IC_IMM_I64,tempc->size,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_DIV,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_IMM_I64,tempc->size,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_DIV,0,cmp.internal_types[RT_I64]); tempc=cmp.internal_types[RT_I64]; } } return tempi; } -U0 PrsExpression2(CLex *lx,I64 *_max_prec,CPrsStk *ps) +U0 PrsExpression2(CCmpCtrl *cc,I64 *_max_prec,CPrsStk *ps) { I64 i,cur_op,stk_op,state,max_prec=PREC_NULL,unary_pre_prec,paren_prec, unary_post_prec,left_prec=PREC_MAX; @@ -115,53 +78,55 @@ U0 PrsExpression2(CLex *lx,I64 *_max_prec,CPrsStk *ps) pe_unary_term1: unary_pre_prec=PREC_NULL; unary_post_prec=PREC_NULL; - lx->flags&=~(LF_PAREN+LF_PREINC+LF_PREDEC+LF_POSTINC+LF_POSTDEC+LF_FUN_EXP); + cc->flags&=~(CCF_PAREN+CCF_PREINC+CCF_PREDEC+CCF_POSTINC+ + CCF_POSTDEC+CCF_FUN_EXP); case PE_UNARY_TERM2: - state=PrsUnaryTerm(lx,ps,&local_var,&tempad,&max_prec,&unary_pre_prec,&paren_prec); + state=PrsUnaryTerm(cc,ps,&local_var,&tempad, + &max_prec,&unary_pre_prec,&paren_prec); break; case PE_UNARY_MODIFIERS: - state=PrsUnaryModifier(lx,ps,&local_var,&tempad,&unary_post_prec); + state=PrsUnaryModifier(cc,ps,&local_var,&tempad,&unary_post_prec); break; case PE_MAYBE_MODIFIERS: - if (lx->token=='(') { - lx->flags|=LF_RAX; - state=PrsUnaryModifier(lx,ps,&local_var,&tempad,&unary_post_prec); + if (cc->token=='(') { + cc->flags|=CCF_RAX; + state=PrsUnaryModifier(cc,ps,&local_var,&tempad,&unary_post_prec); } else goto pe_check_binary_ops1; break; case PE_DEREFERENCE: - if (!(lx->flags&(LF_PREINC|LF_PREDEC|LF_POSTINC|LF_POSTDEC))) + if (!(cc->flags&(CCF_PREINC|CCF_PREDEC|CCF_POSTINC|CCF_POSTDEC))) i=IC_DEREF+PREC_UNARY_PRE<<16; else { - if (lx->flags & LF_POSTINC) + if (cc->flags & CCF_POSTINC) i=IC__PP+PREC_UNARY_POST<<16; - else if (lx->flags & LF_POSTDEC) + else if (cc->flags & CCF_POSTDEC) i=IC__MM+PREC_UNARY_POST<<16; - else if (lx->flags & LF_PREDEC) + else if (cc->flags & CCF_PREDEC) i=IC_MM_+PREC_UNARY_PRE<<16; else i=IC_PP_+PREC_UNARY_PRE<<16; - lx->flags&=~(LF_PREINC|LF_PREDEC|LF_POSTINC|LF_POSTDEC); + cc->flags&=~(CCF_PREINC|CCF_PREDEC|CCF_POSTINC|CCF_POSTDEC); } - tempi=lx->lcc.lcc_root.last; - if (lx->flags & (LF_RAX|LF_ARRAY)) { + tempi=cc->coc.coc_root.last; + if (cc->flags & (CCF_RAX|CCF_ARRAY)) { if (tempi->ic_code==IC_DEREF) tempi->ic_code=i; } else { tempc=OptClassFwd(tempi->ic_class-1); - LCCAdd(lx,i,0,tempc); + ICAdd(cc,i,0,tempc); } case PE_CHECK_BINARY_OPS1: pe_check_binary_ops1: if (paren_prec) { if (unary_pre_prec || unary_post_prec) { if (paren_prec<=unary_pre_prec && !unary_post_prec) - ParenWarning(lx); + ParenWarning(cc); paren_prec=PREC_NULL; } else if (paren_prec<=PREC_UNARY_PRE+ASSOC_MASK) - ParenWarning(lx); + ParenWarning(cc); } - cur_op=cmp.binary_ops[lx->token]; + cur_op=cmp.binary_ops[cc->token]; case PE_CHECK_BINARY_OPS2: pe_check_binary_ops2: @@ -173,27 +138,27 @@ pe_check_binary_ops2: case PE_DO_UNARY_OP: if (cur_op.u16[0]==IC_POWER && stk_op.u16[0]==IC_UNARY_MINUS) { - Lex(lx); //skip ` op + Lex(cc); //skip ` op left_prec=cur_op.i8[2]; PrsPush(ps,tempc); PrsPush(ps,stk_op); - PrsPush(ps,lx->lcc.lcc_root.last->ic_class); + PrsPush(ps,cc->coc.coc_root.last->ic_class); PrsPush(ps,cur_op); goto pe_unary_term1; } else { - tempi=lx->lcc.lcc_root.last; + tempi=cc->coc.coc_root.last; tempc=tempi->ic_class; if (stk_op.u16[0]==IC_DEREF && tempc->ptr_stars_cnt) tempc--; else if (stk_op.u16[0]==IC_ADDR) { - lx->abs_cnts.c_addres++; + cc->abs_cnts.c_addres++; if (intermediate_code_table[tempi->ic_code].type==IST_DEREF) OptFree(tempi); tempc++; } tempc=OptClassFwd(tempc); if (stk_op) - LCCAdd(lx,stk_op,0,tempc); + ICAdd(cc,stk_op,0,tempc); goto pe_check_binary_ops2; } @@ -207,38 +172,38 @@ pe_do_binary_op: switch (cur_op.u16[0]) { case IC_ADD: case IC_SUB: - tempi=lx->lcc.lcc_root.last; + tempi=cc->coc.coc_root.last; if (!tempi->ic_class->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { - LCCAdd(lx,IC_SIZEOF,1,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_MUL,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_SIZEOF,1,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_MUL,0,cmp.internal_types[RT_I64]); } break; case IC_AND_AND: case IC_OR_OR: - LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_NOP1,0,cmp.internal_types[RT_I64]); break; } - if (lx->flags & LF_FUN_EXP) { + if (cc->flags & CCF_FUN_EXP) { ps->ptr2--; - lx->flags&=~LF_FUN_EXP; + cc->flags&=~CCF_FUN_EXP; } - Lex(lx); //skip op + Lex(cc); //skip op if (paren_prec>PREC_UNARY_PRE+ASSOC_MASK && paren_prec&~ASSOC_MASKmax_prec) max_prec=cur_op.u8[2]; left_prec=cur_op.u8[2]; if (intermediate_code_table[cur_op.u16[0]].type==IST_ASSIGN) { - tempi=lx->lcc.lcc_root.last; + tempi=cc->coc.coc_root.last; tempc=OptClassFwd(tempi->ic_class); if (intermediate_code_table[tempi->ic_code].type!=IST_DEREF || !tempc->ptr_stars_cnt && !Bt(&tempc->flags,Cf_INTERNAL_TYPE)) - LexExcept(lx,"invalid lval at "); + LexExcept(cc,"invalid lval at "); tempi->ic_code=IC_NOP1; //Important for setting class (pretty sure) cur_op.u8[2]=PREC_ASSIGN|ASSOCF_RIGHT; } @@ -255,22 +220,23 @@ pe_pop_higher: } else if (cur_op.u8[2]&~ASSOC_MASK<=stk_op.u8[2]&~ASSOC_MASK) goto pe_push_lower; - tempi=PrsAddOp(lx,stk_op,tempc); + tempi=PrsAddOp(cc,stk_op,tempc); - if (intermediate_code_table[cur_op.u16[0]].type==IST_CMP && intermediate_code_table[stk_op.u16[0]].type==IST_CMP) { + if (intermediate_code_table[cur_op.u16[0]].type==IST_CMP && + intermediate_code_table[stk_op.u16[0]].type==IST_CMP) { tempi->ic_flags|=ICF_PUSH_CMP; - LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_PUSH_CMP,0,tempc); + ICAdd(cc,IC_NOP1,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_PUSH_CMP,0,tempc); cur_op.u8[3]|=ECF_HAS_PUSH_CMP; } else if (cur_op.u16[0]==IC_AND_AND || cur_op.u16[0]==IC_OR_OR) - LCCAdd(lx,IC_NOP1,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_NOP1,0,cmp.internal_types[RT_I64]); goto pe_pop_higher; case PE_PUSH_LOWER: pe_push_lower: PrsPush(ps,tempc); PrsPush(ps,stk_op); - PrsPush(ps,lx->lcc.lcc_root.last->ic_class); + PrsPush(ps,cc->coc.coc_root.last->ic_class); PrsPush(ps,cur_op); goto pe_unary_term1; @@ -279,14 +245,14 @@ pe_pop_all1: if (paren_prec>PREC_UNARY_PRE+ASSOC_MASK && paren_prec&~ASSOC_MASK<=left_prec&~ASSOC_MASK- paren_prec&ASSOCF_LEFT-left_prec&ASSOCF_LEFT) - ParenWarning(lx); + ParenWarning(cc); case PE_POP_ALL2: pe_pop_all2: stk_op=PrsPop(ps); tempc=PrsPop(ps); if (!stk_op.u16[0]) goto pe_done; - PrsAddOp(lx,stk_op,tempc); + PrsAddOp(cc,stk_op,tempc); goto pe_pop_all2; } } @@ -295,10 +261,10 @@ pe_done: *_max_prec=max_prec; } -Bool PrsExpression(CLex *lx,I64 *_max_prec,Bool end_exp,CPrsStk *_ps=NULL) +Bool PrsExpression(CCmpCtrl *cc,I64 *_max_prec,Bool end_exp,CPrsStk *_ps=NULL) { Bool result=TRUE; - I64 old_flags=lx->flags; + I64 old_flags=cc->flags; CPrsStk *ps; if (_ps) ps=_ps; @@ -310,7 +276,8 @@ Bool PrsExpression(CLex *lx,I64 *_max_prec,Bool end_exp,CPrsStk *_ps=NULL) PrsPush(ps,0); //terminate PrsPush(ps,0); //terminate try - PrsExpression2(lx,_max_prec,ps); //try catch causes noreg vars in function +//try catch causes noreg vars in function + PrsExpression2(cc,_max_prec,ps); catch { if (Fs->except_ch=='Compiler') { result=FALSE; @@ -319,121 +286,124 @@ Bool PrsExpression(CLex *lx,I64 *_max_prec,Bool end_exp,CPrsStk *_ps=NULL) } if (!_ps) { if (ps->ptr) - LexExcept(lx,"Compiler Parse Error at "); + LexExcept(cc,"Compiler Parse Error at "); Free(ps); } if (end_exp && result) - LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); - lx->flags|=old_flags&(LF_PREINC|LF_PREDEC); + ICAdd(cc,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); + cc->flags|=old_flags&(CCF_PREINC|CCF_PREDEC); return result; } -U0 PrsSizeOf(CLex *lx) +U0 PrsSizeOf(CCmpCtrl *cc) { CHashClass *tempc; CMemberLst *tempm; CDbgInfo *dbg_info; I64 i; - if (lx->token!=TK_IDENT) - LexExcept(lx,"invalid class at "); - if (tempm=lx->local_var_entry) { + if (cc->token!=TK_IDENT) + LexExcept(cc,"invalid class at "); + if (tempm=cc->local_var_entry) { tempc=tempm->member_class; i=tempc->size*tempm->dim.total_cnt; - if (Lex(lx)=='.') + if (Lex(cc)=='.') goto pu_sizeof_member; } else { - if (!(tempc=lx->hash_entry) || !(tempc->type & - (HTT_CLASS|HTT_INTERNAL_TYPE|HTT_GLBL_VAR|HTT_FUN|HTT_EXPORT_SYS_SYM))) - LexExcept(lx,"invalid class at "); + if (!(tempc=cc->hash_entry) || !(tempc->type & + (HTT_CLASS|HTT_INTERNAL_TYPE|HTT_GLBL_VAR| + HTT_FUN|HTT_EXPORT_SYS_SYM))) + LexExcept(cc,"invalid class at "); if (tempc->type&(HTT_FUN|HTT_EXPORT_SYS_SYM)) { if (!(dbg_info=tempc(CHashFun *)->dbg_info)) - LexExcept(lx,"Size not defined at "); - i=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]-dbg_info->body[0]; - Lex(lx); + LexExcept(cc,"Size not defined at "); + i=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line] + -dbg_info->body[0]; + Lex(cc); } else { i=tempc->size; - while (Lex(lx)=='.') { + while (Lex(cc)=='.') { pu_sizeof_member: if (!(tempc->type & (HTT_CLASS|HTT_GLBL_VAR))) - LexExcept(lx,"invalid class at "); + LexExcept(cc,"invalid class at "); else if (tempc->type & HTT_GLBL_VAR) tempc=tempc(CHashGlblVar *)->var_class; - if (Lex(lx)!=TK_IDENT || !(tempm=MemberFind(lx->cur_str,tempc))) - LexExcept(lx,"invalid member at "); - else if (lx->local_var_entry) - lx->local_var_entry->use_cnt--; + if (Lex(cc)!=TK_IDENT || !(tempm=MemberFind(cc->cur_str,tempc))) + LexExcept(cc,"invalid member at "); + else if (cc->local_var_entry) + cc->local_var_entry->use_cnt--; tempc=tempm->member_class; //Probably others like this: -#assert offset(CHashClass.size)==offset(CHashGlblVar.size) + #assert offset(CHashClass.size)==offset(CHashGlblVar.size) i=tempc->size*tempm->dim.total_cnt; } } } - if (lx->token=='*') { - while (Lex(lx)=='*'); + if (cc->token=='*') { + while (Lex(cc)=='*'); i=sizeof(U8 *); } - LCCAdd(lx,IC_IMM_I64,i,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_IMM_I64,i,cmp.internal_types[RT_I64]); } -U0 PrsOffsetOf(CLex *lx) +U0 PrsOffsetOf(CCmpCtrl *cc) { CHashClass *tempc; CMemberLst *tempm; I64 i; - if (lx->token!=TK_IDENT) - LexExcept(lx,"invalid class at "); - if (tempm=lx->local_var_entry) + if (cc->token!=TK_IDENT) + LexExcept(cc,"invalid class at "); + if (tempm=cc->local_var_entry) tempc=tempm->member_class; else { - tempc=lx->hash_entry; + tempc=cc->hash_entry; if (!tempc || !(tempc->type & (HTT_CLASS|HTT_GLBL_VAR))) - LexExcept(lx,"invalid class at "); + LexExcept(cc,"invalid class at "); else if (tempc->type & HTT_GLBL_VAR) tempc=tempc(CHashGlblVar *)->var_class; } - if (Lex(lx)!='.') - LexExcept(lx,"expecting '.' at "); + if (Lex(cc)!='.') + LexExcept(cc,"expecting '.' at "); i=0; do { - if (Lex(lx)!=TK_IDENT || !(tempm=MemberFind(lx->cur_str,tempc))) - LexExcept(lx,"invalid member at "); - else if (lx->local_var_entry) - lx->local_var_entry->use_cnt--; + if (Lex(cc)!=TK_IDENT || !(tempm=MemberFind(cc->cur_str,tempc))) + LexExcept(cc,"invalid member at "); + else if (cc->local_var_entry) + cc->local_var_entry->use_cnt--; i+=tempm->offset; tempc=tempm->member_class; - } while (Lex(lx)=='.'); - LCCAdd(lx,IC_IMM_I64,i,cmp.internal_types[RT_I64]); + } while (Lex(cc)=='.'); + ICAdd(cc,IC_IMM_I64,i,cmp.internal_types[RT_I64]); } -I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) +I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tempf) { I64 i,argc_cnt,dft_val; - Bool is_first_arg=TRUE,needs_right_paren,is_str_out,is_putchars,is_template_fun; + Bool is_first_arg=TRUE,needs_right_paren,is_print,is_putchars, + is_template_fun; CHashClass *tempc2,*last_class=NULL; CMemberLst *tempm; - CLexCodeCtrl *tempcbh,*tempcbh1; - CLexCodeMisc *mc; + CCodeCtrl *tempcbh,*tempcbh1; + CCodeMisc *cm; CIntermediateCode *tempi; if (!tempf) { - if (lx->token==TK_CHAR_CONST) { - if (!(tempf=HashFind("PutChars",lx->htc.hash_table_lst,HTT_FUN))) - LexExcept(lx,"Missing header for Print() and PutChars() at "); - if (!lx->cur_i64) //empty char signals PutChars with variable - Lex(lx); - is_str_out=FALSE; + if (cc->token==TK_CHAR_CONST) { + if (!(tempf=HashFind("PutChars",cc->htc.hash_table_lst,HTT_FUN))) + LexExcept(cc,"Missing header for Print() and PutChars() at "); + if (!cc->cur_i64) //empty char signals PutChars with variable + Lex(cc); + is_print=FALSE; is_putchars=TRUE; } else { - if (!(tempf=HashFind("Print",lx->htc.hash_table_lst,HTT_FUN))) - LexExcept(lx,"Missing header for Print() and PutChars() at "); - if (!*lx->cur_str) //empty string signals Print with variable fmt_str - Lex(lx); + if (!(tempf=HashFind("Print",cc->htc.hash_table_lst,HTT_FUN))) + LexExcept(cc,"Missing header for Print() and PutChars() at "); + if (!*cc->cur_str) //empty string signals Print with variable fmt_str + Lex(cc); is_putchars=FALSE; - is_str_out=TRUE; + is_print=TRUE; } } else { - is_str_out=FALSE; + is_print=FALSE; is_putchars=FALSE; } @@ -443,179 +413,180 @@ I64 PrsFunCall(CLex *lx,CPrsStk *ps,Bool indirect,CHashFun *tempf) is_template_fun=FALSE; if (indirect) { - if (!(lx->flags & (LF_RAX | LF_ARRAY))) - LCCAdd(lx,IC_DEREF,0,cmp.internal_types[RT_PTR]); - lx->lcc.lcc_root.last->ic_class=cmp.internal_types[RT_PTR]; - LCCAdd(lx,IC_SET_RAX,0,cmp.internal_types[RT_PTR]); - LCCAdd(lx,IC_NOP2,1,cmp.internal_types[RT_PTR]); //balance the books + if (!(cc->flags & (CCF_RAX | CCF_ARRAY))) + ICAdd(cc,IC_DEREF,0,cmp.internal_types[RT_PTR]); + cc->coc.coc_root.last->ic_class=cmp.internal_types[RT_PTR]; + ICAdd(cc,IC_SET_RAX,0,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_NOP2,1,cmp.internal_types[RT_PTR]); //balance the books } - LCCPush(lx); - tempcbh=lx->lcc.lcc_next; - lx->lcc.lcc_next=NULL; + COCPush(cc); + tempcbh=cc->coc.coc_next; + cc->coc.coc_next=NULL; i=tempf->arg_cnt; tempm=tempf->member_lst; argc_cnt=0; - if (lx->token=='(') { - Lex(lx); + if (cc->token=='(') { + Lex(cc); needs_right_paren=TRUE; } else needs_right_paren=FALSE; while (i--) { - LCCInit(lx); + COCInit(cc); if (!is_first_arg) { - if (is_str_out) { - if (lx->token==',') - Lex(lx); - else if (lx->token!=';') - LexExcept(lx,"expecting ',' at "); + if (is_print) { + if (cc->token==',') + Lex(cc); + else if (cc->token!=';') + LexExcept(cc,"expecting ',' at "); } else { if (needs_right_paren) { - if (lx->token==',') - Lex(lx); - else if (lx->token!=')') - LexExcept(lx,"expecting ',' at "); + if (cc->token==',') + Lex(cc); + else if (cc->token!=')') + LexExcept(cc,"expecting ',' at "); } } } if (tempm->flags & MLF_DFT_AVAILABLE && - (lx->token==')' || lx->token==',' || !needs_right_paren)) { + (cc->token==')' || cc->token==',' || !needs_right_paren)) { dft_val=tempm->dft_val; if (tempm->flags & MLF_LASTCLASS && last_class) dft_val=(last_class-last_class->ptr_stars_cnt)->str; if (tempm->flags & (MLF_STR_DFT_AVAILABLE|MLF_LASTCLASS) && - lx->flags&LF_AOT_COMPILE) { - mc=LCCMiscNew(lx,CMT_STR_CONST); - LCCAdd(lx,IC_STR_CONST,mc,cmp.internal_types[RT_U8]+1); - mc->st_len=StrLen(dft_val)+1; - mc->str=StrNew(dft_val); - lx->flags|=LF_HAS_MISC_DATA; + cc->flags&CCF_AOT_COMPILE) { + cm=COCMiscNew(cc,CMT_STR_CONST); + ICAdd(cc,IC_STR_CONST,cm,cmp.internal_types[RT_U8]+1); + cm->st_len=StrLen(dft_val)+1; + cm->str=StrNew(dft_val); + cc->flags|=CCF_HAS_MISC_DATA; } else - LCCAdd(lx,IC_IMM_I64,dft_val,tempm->member_class); + ICAdd(cc,IC_IMM_I64,dft_val,tempm->member_class); } else { - if (!PrsExpression(lx,NULL,FALSE,ps)) + if (!PrsExpression(cc,NULL,FALSE,ps)) throw('Compiler'); else { - LCCPush(lx); - lx->pass=0; OptPass012(lx); - lx->pass=1; tempi=OptPass012(lx); - LCCPop(lx); + COCPush(cc); + cc->pass=0; OptPass012(cc); + cc->pass=1; tempi=OptPass012(cc); + COCPop(cc); last_class=OptClassFwd(tempi->ic_class); tempc2=OptClassFwd(tempm->member_class); if (tempc2->raw_type==RT_F64 && !tempm->dim.next && - last_class->raw_type!=RT_F64) + last_class->raw_type!=RT_F64) tempi->ic_flags|=ICF_R_TO_F64; else - if (tempc2->raw_type!=RT_F64 && - last_class->raw_type==RT_F64) - tempi->ic_flags|=ICF_R_TO_INT; + if (tempc2->raw_type!=RT_F64 && last_class->raw_type==RT_F64) + tempi->ic_flags|=ICF_R_TO_INT; } } - LCCPush(lx); + COCPush(cc); is_first_arg=FALSE; tempm=tempm->next; } if (tempm && tempm->flags & MLF_DOT_DOT_DOT) { - LCCInit(lx); - tempi=LCCAdd(lx,IC_IMM_I64,0,tempm->member_class); - LCCPush(lx); - if (is_str_out) { - if (lx->token!=';') { + COCInit(cc); + tempi=ICAdd(cc,IC_IMM_I64,0,tempm->member_class); + COCPush(cc); + if (is_print) { + if (cc->token!=';') { do { if (!is_first_arg) { - if (lx->token==',') - Lex(lx); + if (cc->token==',') + Lex(cc); else - LexExcept(lx,"expecting ',' at "); + LexExcept(cc,"expecting ',' at "); } - LCCInit(lx); - if (!PrsExpression(lx,NULL,FALSE,ps)) + COCInit(cc); + if (!PrsExpression(cc,NULL,FALSE,ps)) throw('Compiler'); - LCCPush(lx); + COCPush(cc); is_first_arg=FALSE; argc_cnt++; - } while (lx->token==','); + } while (cc->token==','); } } else if (needs_right_paren) { - if (lx->token!=')') { + if (cc->token!=')') { do { if (!is_first_arg) { - if (lx->token==',') - Lex(lx); + if (cc->token==',') + Lex(cc); else - LexExcept(lx,"expecting ',' at "); + LexExcept(cc,"expecting ',' at "); } - LCCInit(lx); - if (!PrsExpression(lx,NULL,FALSE,ps)) + COCInit(cc); + if (!PrsExpression(cc,NULL,FALSE,ps)) throw('Compiler'); - LCCPush(lx); + COCPush(cc); is_first_arg=FALSE; argc_cnt++; - } while (lx->token==','); + } while (cc->token==','); } } tempi->ic_data=argc_cnt++; //++ so add_esp latter works } if (needs_right_paren) { - if (lx->token==')') - Lex(lx); + if (cc->token==')') + Lex(cc); else - LexExcept(lx,"missing ')' at "); + LexExcept(cc,"missing ')' at "); } - tempcbh1=tempcbh->lcc_next; - tempcbh->lcc_next=lx->lcc.lcc_next; - lx->lcc.lcc_next=tempcbh; - LCCPop(lx); - tempcbh=lx->lcc.lcc_next; - lx->lcc.lcc_next=tempcbh1; + tempcbh1=tempcbh->coc_next; + tempcbh->coc_next=cc->coc.coc_next; + cc->coc.coc_next=tempcbh; + COCPop(cc); + tempcbh=cc->coc.coc_next; + cc->coc.coc_next=tempcbh1; if (!is_template_fun) - LCCAdd(lx,IC_CALL_START,tempf,0); + ICAdd(cc,IC_CALL_START,tempf,0); if (indirect) - LCCAdd(lx,IC_PUSH_REGS,1<return_class); + ICAdd(cc,IC_PUSH_REGS,1<return_class); while (tempcbh) { - tempcbh1=tempcbh->lcc_next; - LCCAppend(lx,tempcbh); + tempcbh1=tempcbh->coc_next; + COCAppend(cc,tempcbh); if (!Bt(&tempf->flags,Ff_INTERNAL)) - lx->lcc.lcc_root.last->ic_flags|=ICF_PUSH_RESULT; + cc->coc.coc_root.last->ic_flags|=ICF_PUSH_RESULT; tempcbh=tempcbh1; } if (Bt(&tempf->flags,Ff_INTERNAL)) - LCCAdd(lx,tempf->executable_addr,0,tempf->return_class); + ICAdd(cc,tempf->executable_addr,0,tempf->return_class); else { if (indirect) - LCCAdd(lx,IC_CALL_INDIRECT,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); + ICAdd(cc,IC_CALL_INDIRECT, + (argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); else if (Bt(&tempf->flags,Cf_EXTERN)) { - lx->abs_cnts.externs++; - if (lx->flags&LF_AOT_COMPILE) { + cc->abs_cnts.externs++; + if (cc->flags&CCF_AOT_COMPILE) { if (tempf->type&HTF_IMPORT) - LCCAdd(lx,IC_CALL_IMPORT,tempf,tempf->return_class); + ICAdd(cc,IC_CALL_IMPORT,tempf,tempf->return_class); else - LCCAdd(lx,IC_CALL_EXTERN,tempf,tempf->return_class); + ICAdd(cc,IC_CALL_EXTERN,tempf,tempf->return_class); } else - LCCAdd(lx,IC_CALL_INDIRECT2,&tempf->executable_addr,tempf->return_class); + ICAdd(cc,IC_CALL_INDIRECT2,&tempf->executable_addr,tempf->return_class); } else - LCCAdd(lx,IC_CALL,tempf->executable_addr,tempf->return_class); - if ((Bt(&tempf->flags,Ff_RET1) || Bt(&tempf->flags,Ff_ARGPOP)) && !Bt(&tempf->flags,Ff_NOARGPOP)) { + ICAdd(cc,IC_CALL,tempf->executable_addr,tempf->return_class); + if ((Bt(&tempf->flags,Ff_RET1) || Bt(&tempf->flags,Ff_ARGPOP)) && + !Bt(&tempf->flags,Ff_NOARGPOP)) { if (indirect) { - LCCAdd(lx,IC_ADD_RSP1,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); - LCCAdd(lx,IC_ADD_RSP,8,tempf->return_class); + ICAdd(cc,IC_ADD_RSP1,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); + ICAdd(cc,IC_ADD_RSP,8,tempf->return_class); } else - LCCAdd(lx,IC_ADD_RSP1,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); + ICAdd(cc,IC_ADD_RSP1,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); } else { if (indirect) argc_cnt++; - LCCAdd(lx,IC_ADD_RSP,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); + ICAdd(cc,IC_ADD_RSP,(argc_cnt+tempf->arg_cnt)<<3,tempf->return_class); } } if (!is_template_fun) - LCCAdd(lx,IC_CALL_END,tempf,tempf->return_class); - if (is_str_out||is_putchars) - LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); - lx->flags=(lx->flags|LF_RAX) & ~(LF_ARRAY|LF_FUN_EXP); + ICAdd(cc,IC_CALL_END,tempf,tempf->return_class); + if (is_print||is_putchars) + ICAdd(cc,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); + cc->flags=(cc->flags|CCF_RAX) & ~(CCF_ARRAY|CCF_FUN_EXP); return PE_UNARY_MODIFIERS; } -I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad, - I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec) +I64 PrsUnaryTerm(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, + CArrayDim **_tempad,I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec) { I64 i,j; CHashExport *tempex; @@ -623,13 +594,13 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa CHashFun *tempf; CHashGlblVar *tempg; CMemberLst *tempm; - CLexUndef *templu; - CLexCodeMisc *mc; + CAsmUndefHash *tempauh; + CCodeMisc *cm; Bool paren_warn; *_local_var=NULL; *paren_prec=PREC_NULL; - switch (lx->token) { + switch (cc->token) { sub_switch_start: if (PREC_UNARY_PRE>*max_prec) *max_prec=PREC_UNARY_PRE; @@ -640,56 +611,58 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa case '-': i=IC_UNARY_MINUS; break; case '*': i=IC_DEREF; break; sub_switch_end: - Lex(lx); //Skip op + Lex(cc); //Skip op break; case '&': - if (Lex(lx)==TK_IDENT) { - if (tempc=lx->hash_entry) { + if (Lex(cc)==TK_IDENT) { + if (tempc=cc->hash_entry) { if (tempc->type & HTT_FUN) { tempf=tempc; if (!Bt(&tempf->flags,Ff_INTERNAL)) { if (Bt(&tempf->flags,Cf_EXTERN)) { - if (lx->flags&LF_AOT_COMPILE) { - if (lx->flags&LF_ASM_EXPRESSIONS) { - if (tempex=HashFind(tempf->str,lx->htc.hash_table_lst,HTT_EXPORT_SYS_SYM)) + if (cc->flags&CCF_AOT_COMPILE) { + if (cc->flags&CCF_ASM_EXPRESSIONS) { + if (tempex=HashFind( + tempf->str,cc->htc.hash_table_lst, + HTT_EXPORT_SYS_SYM)) goto pu_export_sys_sym; else goto pu_new_sys_sym; } - LexExcept(lx,"Can't take addr of extern fun"); + LexExcept(cc,"Can't take addr of extern fun"); } - lx->abs_cnts.externs++; - LCCAdd(lx,IC_IMM_I64, + cc->abs_cnts.externs++; + ICAdd(cc,IC_IMM_I64, &tempf->executable_addr,cmp.internal_types[RT_PTR]); - LCCAdd(lx,IC_DEREF,0, + ICAdd(cc,IC_DEREF,0, cmp.internal_types[RT_PTR]); } else { - if (lx->flags&LF_AOT_COMPILE) { - LCCAdd(lx,IC_ABS_ADDR, + if (cc->flags&CCF_AOT_COMPILE) { + ICAdd(cc,IC_ABS_ADDR, tempf->executable_addr,cmp.internal_types[RT_PTR]); - if (lx->flags&LF_ASM_EXPRESSIONS) - lx->abs_cnts.abs_addres++; + if (cc->flags&CCF_ASM_EXPRESSIONS) + cc->abs_cnts.abs_addres++; } else - LCCAdd(lx,IC_IMM_I64, + ICAdd(cc,IC_IMM_I64, tempf->executable_addr,cmp.internal_types[RT_PTR]); } - lx->abs_cnts.c_addres++; - Lex(lx); + cc->abs_cnts.c_addres++; + Lex(cc); return PE_MAYBE_MODIFIERS; } } else if (tempc->type & HTT_EXPORT_SYS_SYM) { tempex=tempc; - if (lx->flags&LF_ASM_EXPRESSIONS && !(lx->flags&LF_AOT_COMPILE) && - tempex->type&HTF_IMM) { - lx->abs_cnts.c_addres++; - LCCAdd(lx,IC_IMM_I64, + if (cc->flags&CCF_ASM_EXPRESSIONS && + !(cc->flags&CCF_AOT_COMPILE) && tempex->type&HTF_IMM) { + cc->abs_cnts.c_addres++; + ICAdd(cc,IC_IMM_I64, tempex->val,cmp.internal_types[RT_PTR]); - Lex(lx); + Lex(cc); return PE_MAYBE_MODIFIERS; } else goto pu_export_sys_sym; } - } else if (lx->flags&LF_ASM_EXPRESSIONS && !lx->local_var_entry) + } else if (cc->flags&CCF_ASM_EXPRESSIONS && !cc->local_var_entry) goto pu_ident_but_not_local_var; } i=IC_ADDR; @@ -703,45 +676,45 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa case TK_INTEGER: case TK_CHAR_CONST: case TK_INS_BINARY_SIZE: - if (lx->cur_i64<0) - LCCAdd(lx,IC_IMM_I64,lx->cur_i64,cmp.internal_types[RT_U64]); + if (cc->cur_i64<0) + ICAdd(cc,IC_IMM_I64,cc->cur_i64,cmp.internal_types[RT_U64]); else - LCCAdd(lx,IC_IMM_I64,lx->cur_i64,cmp.internal_types[RT_I64]); - Lex(lx); + ICAdd(cc,IC_IMM_I64,cc->cur_i64,cmp.internal_types[RT_I64]); + Lex(cc); break; case TK_F64: - LCCAdd(lx,IC_IMM_F64,lx->cur_f64(I64),cmp.internal_types[RT_F64]); - Lex(lx); + ICAdd(cc,IC_IMM_F64,cc->cur_f64(I64),cmp.internal_types[RT_F64]); + Lex(cc); break; case TK_STR: - mc=LCCMiscNew(lx,CMT_STR_CONST); - LCCAdd(lx,IC_STR_CONST,mc,cmp.internal_types[RT_U8]+1); - mc->str=LexExtStr(lx,&mc->st_len); - lx->flags|=LF_HAS_MISC_DATA; + cm=COCMiscNew(cc,CMT_STR_CONST); + ICAdd(cc,IC_STR_CONST,cm,cmp.internal_types[RT_U8]+1); + cm->str=LexExtStr(cc,&cm->st_len); + cc->flags|=CCF_HAS_MISC_DATA; break; case TK_INS_BINARY: - mc=LCCMiscNew(lx,CMT_STR_CONST); - LCCAdd(lx,IC_STR_CONST,mc,cmp.internal_types[RT_U8]+1); - mc->str=lx->cur_str; - mc->st_len=lx->cur_str_len; - lx->cur_str=NULL; - lx->flags|=LF_HAS_MISC_DATA; - Lex(lx); + cm=COCMiscNew(cc,CMT_STR_CONST); + ICAdd(cc,IC_STR_CONST,cm,cmp.internal_types[RT_U8]+1); + cm->str=cc->cur_str; + cm->st_len=cc->cur_str_len; + cc->cur_str=NULL; + cc->flags|=CCF_HAS_MISC_DATA; + Lex(cc); break; case '$$': - if (lx->flags & LF_ASM_EXPRESSIONS) { - lx->abs_cnts.abs_addres++; - if (lx->flags&LF_AOT_COMPILE) - LCCAdd(lx,IC_ABS_ADDR,lx->a->ip,cmp.internal_types[RT_PTR]); + if (cc->flags & CCF_ASM_EXPRESSIONS) { + cc->abs_cnts.abs_addres++; + if (cc->flags&CCF_AOT_COMPILE) + ICAdd(cc,IC_ABS_ADDR,cc->aotc->ip,cmp.internal_types[RT_PTR]); else - LCCAdd(lx,IC_IMM_I64,lx->a->ip,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_IMM_I64,cc->aotc->ip,cmp.internal_types[RT_PTR]); } else { - if (lx->flags&LF_CLASS_IP) - LCCAdd(lx,IC_IMM_I64,lx->class_ip,cmp.internal_types[RT_I64]); + if (cc->flags&CCF_CLASS_IP) + ICAdd(cc,IC_IMM_I64,cc->class_ip,cmp.internal_types[RT_I64]); else - LCCAdd(lx,IC_RIP,0,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_RIP,0,cmp.internal_types[RT_PTR]); } - Lex(lx); + Lex(cc); break; sub_switch_end: if (PREC_TERM>*max_prec) @@ -749,103 +722,105 @@ I64 PrsUnaryTerm(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempa return PE_MAYBE_MODIFIERS; case '(': - if (Lex(lx)==TK_IDENT && lx->hash_entry && lx->hash_entry->type & (HTT_CLASS|HTT_INTERNAL_TYPE)) - LexExcept(lx,"Use TempleOS postfix typecasting at "); + if (Lex(cc)==TK_IDENT && cc->hash_entry && + cc->hash_entry->type & (HTT_CLASS|HTT_INTERNAL_TYPE)) + LexExcept(cc,"Use TempleOS postfix typecasting at "); else { if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; - if (lx->cur_lfn->flags&LFSF_DEFINE) + if (cc->lex_include_stk->flags&LFSF_DEFINE) paren_warn=FALSE; else paren_warn=TRUE; - if (!PrsExpression(lx,paren_prec,FALSE,ps)) + if (!PrsExpression(cc,paren_prec,FALSE,ps)) throw('Compiler'); if (!paren_warn) *paren_prec=PREC_NULL; - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); //skip ) - lx->flags= lx->flags & ~LF_ARRAY | LF_RAX | LF_PAREN; + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); //skip ) + cc->flags= cc->flags & ~CCF_ARRAY | CCF_RAX | CCF_PAREN; return PE_UNARY_MODIFIERS; } sub_switch_start: - case '+': break; - case TK_PLUS_PLUS: lx->flags|=LF_PREINC; break; - case TK_MINUS_MINUS: lx->flags|=LF_PREDEC; break; + case '+': break; + case TK_PLUS_PLUS: cc->flags|=CCF_PREINC; break; + case TK_MINUS_MINUS: cc->flags|=CCF_PREDEC; break; sub_switch_end: if (PREC_UNARY_PRE>*max_prec) *max_prec=PREC_UNARY_PRE; *unary_pre_prec=PREC_UNARY_PRE; - Lex(lx); + Lex(cc); return PE_UNARY_TERM2; case TK_IDENT: - if (tempm=lx->local_var_entry) { + if (tempm=cc->local_var_entry) { if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; - lx->flags&=~(LF_RAX|LF_ARRAY|LF_FUN_EXP); + cc->flags&=~(CCF_RAX|CCF_ARRAY|CCF_FUN_EXP); tempc=tempm->member_class+1; - if (tempm->flags & MLF_FUN && !(lx->flags&LF_ASM_EXPRESSIONS)) { + if (tempm->flags & MLF_FUN && !(cc->flags&CCF_ASM_EXPRESSIONS)) { PrsPopDeref(ps); - lx->flags|=LF_FUN_EXP; + cc->flags|=CCF_FUN_EXP; PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); } if (tempm->dim.next) { *_tempad=tempm->dim.next; - lx->flags|=LF_ARRAY; + cc->flags|=CCF_ARRAY; } if (tempm->flags&MLF_STATIC) { - if (lx->flags&LF_AOT_COMPILE) { + if (cc->flags&CCF_AOT_COMPILE) { // if (tempg->flags&GVF_DATA_HEAP) //TODO - // LCCAdd(lx,IC_HEAP_GLBL,tempm->static_data,tempc); + // ICAdd(cc,IC_HEAP_GLBL,tempm->static_data,tempc); // else - LCCAdd(lx,IC_ABS_ADDR,tempm->static_data_ip,tempc); + ICAdd(cc,IC_ABS_ADDR,tempm->static_data_ip,tempc); } else - LCCAdd(lx,IC_IMM_I64,tempm->static_data,tempc); + ICAdd(cc,IC_IMM_I64,tempm->static_data,tempc); } else { - if (lx->flags&LF_ASM_EXPRESSIONS) { + if (cc->flags&CCF_ASM_EXPRESSIONS) { i=PrsPop(ps); ps->ptr--; if (i.u16[0]!=IC_ADDR) - LexExcept(lx,"expecting '&' at "); - LCCAdd(lx,IC_IMM_I64,tempm->offset,cmp.internal_types[RT_PTR]); + LexExcept(cc,"expecting '&' at "); + ICAdd(cc,IC_IMM_I64,tempm->offset,cmp.internal_types[RT_PTR]); *_local_var=tempm; - Lex(lx); + Lex(cc); return PE_MAYBE_MODIFIERS; } else { - if (tempm->dim.next && tempm->offset>0 && StrCmp(tempm->str,"argv")) { + if (tempm->dim.next && tempm->offset>0 && + StrCmp(tempm->str,"argv")) { tempc++; - lx->flags&=~LF_ARRAY; + cc->flags&=~CCF_ARRAY; } - LCCAdd(lx,IC_RBP,0,tempc); - LCCAdd(lx,IC_IMM_I64,tempm->offset,tempc); - LCCAdd(lx,IC_ADD,0,tempc); + ICAdd(cc,IC_RBP,0,tempc); + ICAdd(cc,IC_IMM_I64,tempm->offset,tempc); + ICAdd(cc,IC_ADD,0,tempc); } } - Lex(lx); //skip var name + Lex(cc); //skip var name *_local_var=tempm; return PE_UNARY_MODIFIERS; } pu_ident_but_not_local_var: - if (!(tempex=lx->hash_entry)) { - if (!(lx->flags & LF_ASM_EXPRESSIONS)) - LexExcept(lx,"invalid lval at "); + if (!(tempex=cc->hash_entry)) { + if (!(cc->flags & CCF_ASM_EXPRESSIONS)) + LexExcept(cc,"invalid lval at "); tempc=NULL; pu_new_sys_sym: tempex=CAlloc(sizeof(CHashExport),Fs->code_heap); - tempex->str=lx->cur_str; - lx->cur_str=NULL; - if (!lx->htc.local_var_lst && - *tempex->str=='@' && tempex->str[1]=='@') { + tempex->str=cc->cur_str; + cc->cur_str=NULL; + if (!cc->htc.local_var_lst && + *tempex->str=='@' && tempex->str[1]=='@') { tempex->type=HTT_EXPORT_SYS_SYM | HTF_UNRESOLVED | HTF_LOCAL; - HashAdd(tempex,lx->htc.local_hash_table); + HashAdd(tempex,cc->htc.local_hash_table); } else { tempex->type=HTT_EXPORT_SYS_SYM | HTF_UNRESOLVED; if (tempc) - HashAddAfter(tempex,tempc,lx->htc.glbl_hash_table); + HashAddAfter(tempex,tempc,cc->htc.glbl_hash_table); else - HashAdd(tempex,lx->htc.glbl_hash_table); + HashAdd(tempex,cc->htc.glbl_hash_table); } } switch (Bsf(tempex->type)) { @@ -854,76 +829,77 @@ pu_export_sys_sym: if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; if (!(tempex->type & (HTF_IMM|HTF_IMPORT))) - lx->abs_cnts.abs_addres++; + cc->abs_cnts.abs_addres++; if (tempex->type & HTF_UNRESOLVED) { - if (!(lx->flags&LF_ASM_EXPRESSIONS)) - LexExcept(lx,"Illegal fwd ref at "); - templu=MAlloc(sizeof(CLexUndef)); - templu->hash=tempex; - templu->next=lx->undef_hash_entry; - lx->undef_hash_entry=templu; + if (!(cc->flags&CCF_ASM_EXPRESSIONS)) + LexExcept(cc,"Illegal fwd ref at "); + tempauh=MAlloc(sizeof(CAsmUndefHash)); + tempauh->hash=tempex; + tempauh->next=cc->asm_undef_hash; + cc->asm_undef_hash=tempauh; if (tempex->type & HTF_LOCAL) - lx->flags|=LF_UNRESOLVED|LF_LOCAL; + cc->flags|=CCF_UNRESOLVED|CCF_LOCAL; else - lx->flags|=LF_UNRESOLVED; - LCCAdd(lx,IC_IMM_I64,&tempex->val,cmp.internal_types[RT_PTR],ICF_NO_RIP); - LCCAdd(lx,IC_DEREF,0,cmp.internal_types[RT_PTR]); + cc->flags|=CCF_UNRESOLVED; + ICAdd(cc,IC_IMM_I64, + &tempex->val,cmp.internal_types[RT_PTR],ICF_NO_RIP); + ICAdd(cc,IC_DEREF,0,cmp.internal_types[RT_PTR]); } else { - if (lx->flags&LF_AOT_COMPILE && !(tempex->type & HTF_IMM)) - LCCAdd(lx,IC_ABS_ADDR,tempex->val,cmp.internal_types[RT_PTR]); + if (cc->flags&CCF_AOT_COMPILE && !(tempex->type & HTF_IMM)) + ICAdd(cc,IC_ABS_ADDR,tempex->val,cmp.internal_types[RT_PTR]); else { if (tempex->type&HTF_IMM) - lx->abs_cnts.c_addres++; - LCCAdd(lx,IC_IMM_I64,tempex->val,cmp.internal_types[RT_PTR]); + cc->abs_cnts.c_addres++; + ICAdd(cc,IC_IMM_I64,tempex->val,cmp.internal_types[RT_PTR]); } } - Lex(lx); + Lex(cc); return PE_MAYBE_MODIFIERS; case HTt_FUN: if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; - Lex(lx); //skip fun name - return PrsFunCall(lx,ps,FALSE,tempex); + Lex(cc); //skip fun name + return PrsFunCall(cc,ps,FALSE,tempex); case HTt_GLBL_VAR: if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; tempg=tempex; tempc=tempg->var_class+1; - lx->flags&=~(LF_RAX|LF_ARRAY|LF_FUN_EXP); + cc->flags&=~(CCF_RAX|CCF_ARRAY|CCF_FUN_EXP); if (tempg->flags&GVF_ARRAY) { *_tempad=tempg->dim.next; - lx->flags|=LF_ARRAY; + cc->flags|=CCF_ARRAY; } - if (lx->flags&LF_AOT_COMPILE) { + if (cc->flags&CCF_AOT_COMPILE) { if (tempg->flags & GVF_EXTERN) //TODO - LexExcept(lx,"Feature not implemented "); + LexExcept(cc,"Feature not implemented "); else { if (tempg->flags & GVF_IMPORT) - LCCAdd(lx,IC_ADDR_IMPORT,tempg,tempc); + ICAdd(cc,IC_ADDR_IMPORT,tempg,tempc); else { if (tempg->flags&GVF_DATA_HEAP) - LCCAdd(lx,IC_HEAP_GLBL,tempg->heap_glbl,tempc); + ICAdd(cc,IC_HEAP_GLBL,tempg->heap_glbl,tempc); else - LCCAdd(lx,IC_ABS_ADDR,tempg->data_addr_ip,tempc); + ICAdd(cc,IC_ABS_ADDR,tempg->data_addr_ip,tempc); } } } else { if (tempg->flags & GVF_EXTERN) { - lx->abs_cnts.externs++; - LCCAdd(lx,IC_IMM_I64,&tempg->data_addr,tempc); - LCCAdd(lx,IC_DEREF,0,tempc); + cc->abs_cnts.externs++; + ICAdd(cc,IC_IMM_I64,&tempg->data_addr,tempc); + ICAdd(cc,IC_DEREF,0,tempc); } else - LCCAdd(lx,IC_IMM_I64,tempg->data_addr,tempc); + ICAdd(cc,IC_IMM_I64,tempg->data_addr,tempc); } - Lex(lx); + Lex(cc); if (tempg->flags & GVF_FUN) { PrsPopDeref(ps); - lx->flags|=LF_FUN_EXP; + cc->flags|=CCF_FUN_EXP; PrsPush2(ps,tempg->fun_ptr-tempg->fun_ptr->ptr_stars_cnt); } return PE_UNARY_MODIFIERS; case HTt_CLASS: - PrsOffsetOf(lx); + PrsOffsetOf(cc); return PE_MAYBE_MODIFIERS; case HTt_KEYWORD: switch (tempex(CHashGeneric *)->user_data0) { @@ -931,237 +907,238 @@ pu_export_sys_sym: if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; j=0; - while (Lex(lx)=='(') + while (Lex(cc)=='(') j++; - PrsSizeOf(lx); + PrsSizeOf(cc); while (j--) { - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); } return PE_MAYBE_MODIFIERS; case KW_OFFSET: if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; j=0; - while (Lex(lx)=='(') + while (Lex(cc)=='(') j++; - PrsOffsetOf(lx); + PrsOffsetOf(cc); while (j--) { - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); } return PE_MAYBE_MODIFIERS; case KW_DEFINED: if (PREC_TERM>*max_prec) *max_prec=PREC_TERM; j=0; - while (Lex(lx)=='(') + while (Lex(cc)=='(') j++; - if (lx->token==TK_IDENT && - (lx->hash_entry || lx->local_var_entry)) - LCCAdd(lx,IC_IMM_I64,TRUE,cmp.internal_types[RT_I64]); + if (cc->token==TK_IDENT && + (cc->hash_entry || cc->local_var_entry)) + ICAdd(cc,IC_IMM_I64,TRUE,cmp.internal_types[RT_I64]); else - LCCAdd(lx,IC_IMM_I64,FALSE,cmp.internal_types[RT_I64]); - Lex(lx); + ICAdd(cc,IC_IMM_I64,FALSE,cmp.internal_types[RT_I64]); + Lex(cc); while (j--) { - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); } return PE_MAYBE_MODIFIERS; } } } - LexExcept(lx,"missing expression at "); + LexExcept(cc,"missing expression at "); } -I64 PrsUnaryModifier(CLex *lx,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tempad,I64 *unary_post_prec) +I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, + CArrayDim **_tempad,I64 *unary_post_prec) { CHashClass *tempc,*tempc1; CHashFun *fun_ptr; CMemberLst *tempm=*_local_var; CIntermediateCode *tempi,*tempi1; CArrayDim *tempad1,tempad2; - CLexCodeMisc *mc; + CCodeMisc *cm; I64 mode,old_flags; - Bool was_paren=Btr(&lx->flags,Lf_PAREN); + Bool was_paren=Btr(&cc->flags,CCf_PAREN); *_local_var=NULL; - switch (lx->token) { + switch (cc->token) { case '.': if (tempm) tempm->reg=REG_NONE; goto um_join; case TK_DEREFERENCE: - tempi=lx->lcc.lcc_root.last; - if (!(lx->flags & (LF_RAX | LF_ARRAY))) - LCCAdd(lx,IC_DEREF+PREC_UNARY_PRE<<16,0,tempi->ic_class-1); + tempi=cc->coc.coc_root.last; + if (!(cc->flags & (CCF_RAX | CCF_ARRAY))) + ICAdd(cc,IC_DEREF+PREC_UNARY_PRE<<16,0,tempi->ic_class-1); else tempi->ic_class--; -um_join: + um_join: if (!*unary_post_prec) *unary_post_prec=PREC_TERM; - tempc=lx->lcc.lcc_root.last->ic_class; - if (!tempc->ptr_stars_cnt && lx->token=='.') - LexExcept(lx,"Must be address, not value "); - if (!(lx->flags & LF_RAX)) + tempc=cc->coc.coc_root.last->ic_class; + if (!tempc->ptr_stars_cnt && cc->token=='.') + LexExcept(cc,"Must be address, not value "); + if (!(cc->flags & CCF_RAX)) tempc--; if (!(tempc->type & HTT_CLASS)) - LexExcept(lx,"invalid class at "); - if (Lex(lx)!=TK_IDENT || - !(tempm=MemberFind(lx->cur_str,tempc))) - LexExcept(lx,"invalid member at "); - else if (lx->local_var_entry) - lx->local_var_entry->use_cnt--; - Lex(lx); //skip member name + LexExcept(cc,"invalid class at "); + if (Lex(cc)!=TK_IDENT || + !(tempm=MemberFind(cc->cur_str,tempc))) + LexExcept(cc,"invalid member at "); + else if (cc->local_var_entry) + cc->local_var_entry->use_cnt--; + Lex(cc); //skip member name tempc1=tempm->member_class+1; - LCCAdd(lx,IC_IMM_I64,tempm->offset,tempc1); - lx->flags&=~(LF_RAX|LF_ARRAY|LF_FUN_EXP); + ICAdd(cc,IC_IMM_I64,tempm->offset,tempc1); + cc->flags&=~(CCF_RAX|CCF_ARRAY|CCF_FUN_EXP); if (tempm->dim.next) { *_tempad=tempm->dim.next; - lx->flags|=LF_ARRAY; + cc->flags|=CCF_ARRAY; } if(tempm->flags & MLF_FUN) { PrsPopDeref(ps); PrsPush2(ps,tempm->fun_ptr-tempm->fun_ptr->ptr_stars_cnt); - lx->flags|=LF_FUN_EXP; + cc->flags|=CCF_FUN_EXP; } - LCCAdd(lx,IC_ADD,0,tempc1); + ICAdd(cc,IC_ADD,0,tempc1); return PE_UNARY_MODIFIERS; case '(': - if (lx->flags & LF_FUN_EXP) { + if (cc->flags & CCF_FUN_EXP) { if (!*unary_post_prec) *unary_post_prec=PREC_TERM; - return PrsFunCall(lx,ps,TRUE,PrsPop2(ps)); + return PrsFunCall(cc,ps,TRUE,PrsPop2(ps)); } if (!*unary_post_prec) *unary_post_prec=PREC_TERM; - if (Lex(lx)!=TK_IDENT) - LexExcept(lx,"invalid class at "); - if (Btr(&lx->flags,Lf_FUN_EXP)) + if (Lex(cc)!=TK_IDENT) + LexExcept(cc,"invalid class at "); + if (Btr(&cc->flags,CCf_FUN_EXP)) ps->ptr2--; - lx->flags&=~LF_ARRAY; - tempc=lx->hash_entry; - Lex(lx); + cc->flags&=~CCF_ARRAY; + tempc=cc->hash_entry; + Lex(cc); mode=PRS0_TYPECAST|PRS1_NULL; - tempc=PrsType(lx,&tempc,&mode,NULL,NULL,&fun_ptr,NULL,&tempad2,0); + tempc=PrsType(cc,&tempc,&mode,NULL,NULL,&fun_ptr,NULL,&tempad2,0); if (fun_ptr) { PrsPopDeref(ps); - Bts(&lx->flags,Lf_FUN_EXP); + Bts(&cc->flags,CCf_FUN_EXP); PrsPush2(ps,fun_ptr); - mc=LCCMiscNew(lx,CMT_HASH_ENTRY); - mc->h=fun_ptr; + cm=COCMiscNew(cc,CMT_HASH_ENTRY); + cm->h=fun_ptr; } if (*_tempad=tempad2.next) { - lx->flags|=LF_ARRAY; + cc->flags|=CCF_ARRAY; tempc++; - mc=LCCMiscNew(lx,CMT_ARRAY_DIM); - mc->dim=*_tempad; + cm=COCMiscNew(cc,CMT_ARRAY_DIM); + cm->dim=*_tempad; } - if (!(lx->flags&(LF_RAX|LF_ARRAY))) + if (!(cc->flags&(CCF_RAX|CCF_ARRAY))) tempc++; - tempi=lx->lcc.lcc_root.last; + tempi=cc->coc.coc_root.last; tempi->ic_class=tempc; - LCCAdd(lx,IC_HOLYC_TYPECAST,was_paren,tempc); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); + ICAdd(cc,IC_HOLYC_TYPECAST,was_paren,tempc); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); return PE_UNARY_MODIFIERS; case '[': if (!*unary_post_prec) *unary_post_prec=PREC_TERM; - Lex(lx); - tempc=OptClassFwd(lx->lcc.lcc_root.last->ic_class); + Lex(cc); + tempc=OptClassFwd(cc->coc.coc_root.last->ic_class); if (!tempc->ptr_stars_cnt) - LexExcept(lx,"not array or ptr "); - if (!(lx->flags & (LF_ARRAY | LF_RAX))) { + LexExcept(cc,"not array or ptr "); + if (!(cc->flags & (CCF_ARRAY | CCF_RAX))) { tempc=OptClassFwd(tempc-1); if (!tempc->ptr_stars_cnt) - LexExcept(lx,"not array or ptr "); - LCCAdd(lx,IC_DEREF+PREC_UNARY_PRE<<16,0,tempc); + LexExcept(cc,"not array or ptr "); + ICAdd(cc,IC_DEREF+PREC_UNARY_PRE<<16,0,tempc); } tempc1=tempc-1; if (tempad1=*_tempad) { - LCCAdd(lx,IC_IMM_I64,tempad1->total_cnt*tempc1->size,tempc); + ICAdd(cc,IC_IMM_I64,tempad1->total_cnt*tempc1->size,tempc); if (*_tempad=tempad1->next) { - old_flags=lx->flags; - if (!PrsExpression(lx,NULL,FALSE,ps)) + old_flags=cc->flags; + if (!PrsExpression(cc,NULL,FALSE,ps)) throw('Compiler'); - lx->flags=lx->flags&~LF_FUN_EXP|old_flags&LF_FUN_EXP; - if (lx->token!=']') - LexExcept(lx,"missing ']' at "); - Lex(lx); //skip ] - tempi1=lx->lcc.lcc_root.last; + cc->flags=cc->flags&~CCF_FUN_EXP|old_flags&CCF_FUN_EXP; + if (cc->token!=']') + LexExcept(cc,"missing ']' at "); + Lex(cc); //skip ] + tempi1=cc->coc.coc_root.last; tempi1->ic_flags|=ICF_R_TO_INT; - LCCAdd(lx,IC_MUL,0,tempc); - LCCAdd(lx,IC_ADD,0,tempc); - lx->flags|=LF_RAX; + ICAdd(cc,IC_MUL,0,tempc); + ICAdd(cc,IC_ADD,0,tempc); + cc->flags|=CCF_RAX; return PE_UNARY_MODIFIERS; } } else - LCCAdd(lx,IC_IMM_I64,tempc1->size,tempc); - old_flags=lx->flags; - if (!PrsExpression(lx,NULL,FALSE,ps)) + ICAdd(cc,IC_IMM_I64,tempc1->size,tempc); + old_flags=cc->flags; + if (!PrsExpression(cc,NULL,FALSE,ps)) throw('Compiler'); - lx->flags=lx->flags&~LF_FUN_EXP|old_flags&LF_FUN_EXP; - if (lx->token!=']') - LexExcept(lx,"missing ']' at "); - Lex(lx); //skip ] - tempi1=lx->lcc.lcc_root.last; + cc->flags=cc->flags&~CCF_FUN_EXP|old_flags&CCF_FUN_EXP; + if (cc->token!=']') + LexExcept(cc,"missing ']' at "); + Lex(cc); //skip ] + tempi1=cc->coc.coc_root.last; tempi1->ic_flags|=ICF_R_TO_INT; - LCCAdd(lx,IC_MUL,0,tempc); - LCCAdd(lx,IC_ADD,0,tempc); - lx->flags&=~(LF_RAX|LF_ARRAY); + ICAdd(cc,IC_MUL,0,tempc); + ICAdd(cc,IC_ADD,0,tempc); + cc->flags&=~(CCF_RAX|CCF_ARRAY); return PE_UNARY_MODIFIERS; sub_switch_start: case TK_PLUS_PLUS: - lx->flags|=LF_POSTINC; + cc->flags|=CCF_POSTINC; break; case TK_MINUS_MINUS: - lx->flags|=LF_POSTDEC; + cc->flags|=CCF_POSTDEC; break; sub_switch_end: if (!*unary_post_prec) *unary_post_prec=PREC_UNARY_POST; - Lex(lx); + Lex(cc); return PE_DEREFERENCE; } return PE_DEREFERENCE; } -U8 *LexExpression2Bin(CLex *lx,I64 *_type=NULL) -{//Compile lx expression. You call code. +U8 *LexExpression2Bin(CCmpCtrl *cc,I64 *_type=NULL) +{//Compile cc expression. You call the code. U8 *result; I64 size; - Bool old_trace=Btr(&lx->flags,Lf_OPT_TRACE_PRESENT); - LCCPush(lx); - LCCInit(lx); - if (PrsExpression(lx,NULL,FALSE)) { - LCCAdd(lx,IC_RETURN_VAL,0,0); - LCCAdd(lx,IC_RET,0,0); - result=LCCCompile(lx,&size,NULL,_type); + Bool old_trace=Btr(&cc->flags,CCf_OPT_TRACE_PRESENT); + COCPush(cc); + COCInit(cc); + if (PrsExpression(cc,NULL,FALSE)) { + ICAdd(cc,IC_RETURN_VAL,0,0); + ICAdd(cc,IC_RET,0,0); + result=COCCompile(cc,&size,NULL,_type); } else result=NULL; - LCCPop(lx); - BEqu(&lx->flags,Lf_OPT_TRACE_PRESENT,old_trace); + COCPop(cc); + BEqu(&cc->flags,CCf_OPT_TRACE_PRESENT,old_trace); return result; } -Bool IsLexExpression2Bin(CLex *lx,U8 **_ex) -{//Compile lx expression to bin. Return err status. - return ToBool(*_ex=LexExpression2Bin(lx)); +Bool IsLexExpression2Bin(CCmpCtrl *cc,U8 **_machine_code) +{//Compile cc expression to bin. Return err status. + return ToBool(*_machine_code=LexExpression2Bin(cc)); } -I64 LexExpressionI64(CLex *lx) -{//Compile lx expression, forcing to I64 and eval. - U8 *ex; +I64 LexExpressionI64(CCmpCtrl *cc) +{//Compile cc expression, forcing to I64 and eval. + U8 *machine_code; I64 result,type; - if (ex=LexExpression2Bin(lx,&type)) { - result=Call(ex); - Free(ex); + if (machine_code=LexExpression2Bin(cc,&type)) { + result=Call(machine_code); + Free(machine_code); if (type==RT_F64) result=ToI64(result(F64)); } else @@ -1169,13 +1146,13 @@ I64 LexExpressionI64(CLex *lx) return result; } -F64 LexExpressionF64(CLex *lx) -{//Compile lx expression, forcing to F64 and eval. - U8 *ex; +F64 LexExpressionF64(CCmpCtrl *cc) +{//Compile cc expression, forcing to F64 and eval. + U8 *machine_code; I64 result,type; - if (ex=LexExpression2Bin(lx,&type)) { - result=Call(ex); - Free(ex); + if (machine_code=LexExpression2Bin(cc,&type)) { + result=Call(machine_code); + Free(machine_code); if (type!=RT_F64) result(F64)=ToF64(result); } else @@ -1183,50 +1160,14 @@ F64 LexExpressionF64(CLex *lx) return result(F64); } -I64 LexExpression(CLex *lx) -{//Compile lx expression and eval. Might be I64 or F64. - U8 *ex; +I64 LexExpression(CCmpCtrl *cc) +{//Compile cc expression and eval. Might be I64 or F64. + U8 *machine_code; I64 result; - if (ex=LexExpression2Bin(lx)) { - result=Call(ex); - Free(ex); + if (machine_code=LexExpression2Bin(cc)) { + result=Call(machine_code); + Free(machine_code); } else result=0; return result; } - -CD2I32 *LexD2I32(CLex *lx,CD2I32 *p) -{//Not HolyC. Sprite-like lex 2D point. - if (lx->token!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); //Skip ( - p->x=LexExpressionI64(lx); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - p->y=LexExpressionI64(lx); - if (lx->token!=')') - LexExcept(lx,"expecting ')' at "); - Lex(lx); //Skip ) - return p; -} - -CD3I32 *LexD3I32(CLex *lx,CD3I32 *p) -{//Not HolyC. Sprite-like lex 3D point. - if (lx->token!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); //Skip ( - p->x=LexExpressionI64(lx); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - p->y=LexExpressionI64(lx); - if (lx->token!=',') - LexExcept(lx,"expecting ',' at "); - Lex(lx); //Skip , - p->z=LexExpressionI64(lx); - if (lx->token!=')') - LexExcept(lx,"expecting ')' at "); - Lex(lx); //Skip ) - return p; -} diff --git a/Compiler/PrsLib.CPP b/Compiler/PrsLib.CPP new file mode 100644 index 0000000..15e21f5 --- /dev/null +++ b/Compiler/PrsLib.CPP @@ -0,0 +1,319 @@ +U0 PrsPush(CPrsStk *ps,I64 val) +{ + ps->stk[++ps->ptr]=val; +} + +I64 PrsPop(CPrsStk *ps) +{ + return ps->stk[ps->ptr--]; +} + +U0 PrsPush2(CPrsStk *ps,I64 val) +{ + ps->stk2[++ps->ptr2]=val; +} + +I64 PrsPop2(CPrsStk *ps) +{ + return ps->stk2[ps->ptr2--]; +} + +U0 PrsPopDeref(CPrsStk *ps) +{ + I64 i=PrsPop(ps); + CHashClass *tempc=PrsPop(ps); + if (i.u16[0]!=IC_DEREF) { + PrsPush(ps,tempc); + PrsPush(ps,i); + } +} + +I64 PrsKeyWord(CCmpCtrl *cc) +{//Cvt cur token to $LK,"KEYWORD",A="FF:::/Compiler/OpCodes.TXT,KEYWORD"$ or -1. + CHashGeneric *temph; + if (cc->token==TK_IDENT &&(temph=cc->hash_entry) && temph->type&HTT_KEYWORD) + return temph->user_data0; + else + return -1; +} + +CHashClass *PrsClassNew() +{/*Ptrs to classes are handled by +allocating 5 structures for each +new class and representing a pointer +to a class by advancing 1 struct fwd +for one * and two fwd for two **. +*/ + I64 i; + CHashClass *result=CAlloc(sizeof(CHashClass)*(MAX_PTR_STARS+1),Fs->code_heap), + *tempc=result; + for (i=0;i<=MAX_PTR_STARS;i++) { + tempc->type=HTT_CLASS; + tempc->raw_type=RT_PTR; + tempc->size=sizeof(U8 *); + tempc->ptr_stars_cnt=i; + tempc++; + } + result->last_in_member_lst=&result->member_lst; + result->size=0; + return result; +} + +CHashFun *PrsFunNew() +{ + I64 i; + CHashFun *result=CAlloc(sizeof(CHashFun)*(MAX_PTR_STARS+1),Fs->code_heap), + *tempf=result; + for (i=0;i<=MAX_PTR_STARS;i++) { + tempf->type=HTT_FUN; + tempf->raw_type=RT_PTR; + tempf->size=sizeof(U8 *); + tempf->ptr_stars_cnt=i; + tempf++; + } + result->last_in_member_lst=&result->member_lst; + result->size=0; + return result; +} + +CIntermediateCode *ICAdd(CCmpCtrl *cc, + I64 opcode_and_precedence,I64 arg, CHashClass *c,I64 flags=0) +{ + CIntermediateCode *tempi=MAlloc(sizeof(CIntermediateCode)); + tempi->ic_code=opcode_and_precedence.u16[0]; + tempi->ic_precedence=opcode_and_precedence.u16[1]; + tempi->ic_data=arg; + tempi->ic_class=c; + if (Bt(&cc->opts,OPTf_OPT_TRACE)) { + Bts(&cc->flags,CCf_OPT_TRACE_PRESENT); + flags|=ICF_TRACE; + } + if (cc->lock_cnt) + flags|=ICF_LOCK; + tempi->ic_flags=flags; + tempi->ic_line=cc->last_line_num; + QueIns(tempi,cc->coc.coc_root.last); + return tempi; +} + +U0 COCInit(CCmpCtrl *cc) +{ + CCodeCtrl *tempcbh=&cc->coc; + QueInit(&tempcbh->coc_root.next); + QueInit(&tempcbh->coc_next_misc); + tempcbh->coc_root.ic_code=IC_END; +} + +U0 COCPush(CCmpCtrl *cc) +{ + CCodeCtrl *tempcbh=MAlloc(sizeof(CCodeCtrl)); + MemCpy(tempcbh,&cc->coc,sizeof(CCodeCtrl)); + cc->coc.coc_next=tempcbh; +} + +CCmpCtrl *COCPopNoFree(CCmpCtrl *cc) +{ + CCodeCtrl *tempcbh=cc->coc.coc_next; + MemCpy(&cc->coc,tempcbh,sizeof(CCodeCtrl)); + return tempcbh; +} + +U0 COCPop(CCmpCtrl *cc) +{ + Free(COCPopNoFree(cc)); +} + +U0 COCAppend(CCmpCtrl *cc, CCodeCtrl *tempcbh) +{ + if (tempcbh->coc_root.next!=&cc->coc.coc_root.next) { + cc->coc.coc_root.last->next=tempcbh->coc_root.next; + tempcbh->coc_root.next->last=cc->coc.coc_root.last; + cc->coc.coc_root.last=tempcbh->coc_root.last; + tempcbh->coc_root.last->next=&cc->coc.coc_root.next; + } + if (tempcbh->coc_next_misc!=&cc->coc.coc_next_misc) { + cc->coc.coc_last_misc->next=tempcbh->coc_next_misc; + tempcbh->coc_next_misc->last=cc->coc.coc_last_misc; + cc->coc.coc_last_misc=tempcbh->coc_last_misc; + tempcbh->coc_last_misc->next=&cc->coc.coc_next_misc; + } + Free(tempcbh); +} + +CCodeMisc *COCMiscNew(CCmpCtrl *cc,I64 ty) +{ + CCodeMisc *result=CAlloc(sizeof(CCodeMisc)); + result->addr=INVALID_PTR; + result->type=ty; + QueIns(result,cc->coc.coc_last_misc); + return result; +} + +CCodeMisc *COCGoToLabelFind(CCmpCtrl *cc,U8 *name) +{ + CCodeMisc *cm=cc->coc.coc_next_misc; + while (cm!=&cc->coc.coc_next_misc) { + if ((cm->type==CMT_GOTO_LABEL||cm->type==CMT_ASM_LABEL) && + !StrCmp(cm->str,name)) + return cm; + cm=cm->next; + } + return NULL; +} + +I64 COCFloatConstFind(CCmpCtrl *cc,F64 d) +{ + I64 i; + CCodeMisc *cm=cc->coc.coc_next_misc; + while (cm!=&cc->coc.coc_next_misc) { + if (cm->type==CMT_FLOAT_CONSTS) { + for (i=0;inum_consts;i++) + if (cm->float_consts[i]==d) + return cm->addr+i*sizeof(F64); + if (cm->num_constsfloat_consts[cm->num_consts++]=d; + return cm->addr+i*sizeof(F64); + } + } + cm=cm->next; + } + cm=COCMiscNew(cc,CMT_FLOAT_CONSTS); + cm->float_consts=MAlloc(CM_MAX_CONSTS*sizeof(F64)); + cm->float_consts[cm->num_consts++]=d; + return cm->addr; +} + +U0 COCDel(CCmpCtrl *cc,CCodeCtrl *coc) +{ + CCodeMisc *cm,*cm1; + U8 *undef=NULL; + QueDel(&coc->coc_root.next); + cm=coc->coc_next_misc; + while (cm!=&coc->coc_next_misc) { + cm1=cm->next; + switch (cm->type) { + case CMT_GOTO_LABEL: + case CMT_ASM_LABEL: + if (!(cm->flags&CMF_DEFINED)) { + undef=cm->str; + cm->str=NULL; + } else if (!cm->use_cnt) { + PrintWarn("Unused label %s\n",cm->str); + LexWarn(cc,"Unused label at "); + } + break; + case CMT_JMP_TABLE: + Free(cm->jmp_table); + break; + case CMT_FLOAT_CONSTS: + Free(cm->float_consts); + break; + case CMT_ARRAY_DIM: + LinkedLstDel(cm->dim); + break; + case CMT_HASH_ENTRY: + HashDel(cm->h); + break; + } + Free(cm->str); + Free(cm); + cm=cm1; + } + if (undef) { + PrintErr("Undefined goto label %s\n",undef); + Free(undef); + LexExcept(cc,"Undefined goto label at "); + } +} + +U0 COCHeaderPut(CCmpCtrl *cc,I64 pass,Bool put) +{ + CIntermediateCode *tempi; + if (Bt(&cc->flags,CCf_OPT_TRACE_PRESENT)) { + if (put) { + if (Bt(&cc->otrace_mask,pass-1)) { + "$$IV,1$$Pass %d:$$IV,0$$\n",pass-1; + tempi=cc->coc.coc_root.next; + while (tempi->ic_code) { + if (tempi->ic_flags&ICF_TRACE) + ICPut(cc,tempi); + tempi=tempi->next; + } + } + } else if (Bt(&cc->otrace_mask,pass)) + "$$IV,1$$Pass %d:$$IV,0$$\n",pass; + } + cc->pass=pass; +} + +U8 *COCCompile(CCmpCtrl *cc,I64 *_code_size,CDbgInfo **_dbg,I64 *_type) +{ + U8 *result; + CCodeMisc *lb; + I64 i,code_size,last_code_size; + + COptReg reg_offsets[NUM_REGS]; + if (_dbg) *_dbg=NULL; + cc->pass=0; + COCHeaderPut(cc,1,TRUE); + OptPass012(cc); + COCHeaderPut(cc,2,TRUE); + OptPass012(cc); + COCHeaderPut(cc,3,TRUE); + OptPass3(cc,reg_offsets); + COCHeaderPut(cc,4,TRUE); + OptPass4(cc,reg_offsets,_type); + COCHeaderPut(cc,5,TRUE); + OptPass5(cc); + COCHeaderPut(cc,6,TRUE); + OptPass6(cc); + COCHeaderPut(cc,7,TRUE); + + lb=cc->coc.coc_next_misc; + while (lb!=&cc->coc.coc_next_misc) { + if (lb->type==CMT_JMP_TABLE) { + for (i=0;irange;i++) + lb->jmp_table[i]=OptLabelFwd(lb->jmp_table[i]); + lb->dft=OptLabelFwd(lb->dft); + } + lb=lb->next; + } + + COCHeaderPut(cc,7,FALSE); + OptPass789A(cc,reg_offsets,NULL,NULL); + COCHeaderPut(cc,8,FALSE); + OptPass789A(cc,reg_offsets,NULL,NULL); + COCHeaderPut(cc,9,FALSE); + code_size=OptPass789A(cc,reg_offsets,NULL,NULL); + do { + last_code_size=code_size; + COCHeaderPut(cc,9,FALSE); + code_size=OptPass789A(cc,reg_offsets,NULL,NULL); + if (code_size>last_code_size) { + "Pass:9 Code Size\n"; + LexExcept(cc,"Compiler Optimization Error at "); + } + } while (code_sizeflags&CCF_AOT_COMPILE) + result=MAlloc(code_size); + else + result=MAlloc(code_size,Fs->code_heap); + COCHeaderPut(cc,10,FALSE); + code_size=OptPass789A(cc,reg_offsets,result,_dbg); + + COCDel(cc,&cc->coc); + if (Bt(&cc->opts,OPTf_COMPILE_TRACE)) { + if (cc->flags&CCF_AOT_COMPILE) { + if (cc->aotc->seg_size==16) + Un(result,code_size,16); + else if (cc->aotc->seg_size==64) + Un(result,code_size,64); + else + Un(result,code_size,32); + } else + Un(result,code_size,64); + } + if (_code_size) *_code_size=code_size; + return result; +} diff --git a/Compiler/PrsStmt.CPP b/Compiler/PrsStmt.CPP index 6bf6161..d11531c 100644 --- a/Compiler/PrsStmt.CPP +++ b/Compiler/PrsStmt.CPP @@ -1,815 +1,31 @@ -CHashClass *PrsClassNew() -{/*Ptrs to classes are handled by -allocating 5 structures for each -new class and representing a pointer -to a class by advancing 1 struct fwd -for one * and two fwd for two **. -*/ - I64 i; - CHashClass *result=CAlloc(sizeof(CHashClass)*(MAX_PTR_STARS+1),Fs->code_heap),*tempc=result; - for (i=0;i<=MAX_PTR_STARS;i++) { - tempc->type=HTT_CLASS; - tempc->raw_type=RT_PTR; - tempc->size=sizeof(U8 *); - tempc->ptr_stars_cnt=i; - tempc++; - } - result->last_in_member_lst=&result->member_lst; - result->size=0; - return result; -} - -CHashFun *PrsFunNew() -{ - I64 i; - CHashFun *result=CAlloc(sizeof(CHashFun)*(MAX_PTR_STARS+1),Fs->code_heap),*tempf=result; - for (i=0;i<=MAX_PTR_STARS;i++) { - tempf->type=HTT_FUN; - tempf->raw_type=RT_PTR; - tempf->size=sizeof(U8 *); - tempf->ptr_stars_cnt=i; - tempf++; - } - result->last_in_member_lst=&result->member_lst; - result->size=0; - return result; -} - -CMemberLst *MemberLstNew(I64 _reg) -{ - CMemberLst *result=CAlloc(sizeof(CMemberLst)); - result->reg=_reg; - return result; -} - -I64 PrsKeyWord(CLex *lx) -{//Cvt cur token to $LK,"KEYWORD",A="FF:::/Compiler/OpCodes.TXT,KEYWORD"$ or -1. - CHashGeneric *temph; - if (lx->token==TK_IDENT &&(temph=lx->hash_entry) && temph->type&HTT_KEYWORD) - return temph->user_data0; - else - return -1; -} - -U0 UndefinedExtern() -{ - PrintErr("Undefined Extern\nat %P\n",Caller); - throw('UndefExt'); -} - -U0 UnusedExternWarning(CLex *lx,CHashClass *tempc) -{ - PrintWarn("Unused extern '%s'\n",tempc->str); - lx->warning_cnt++; -} - -U0 PrsVarInit(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass) -{ - U8 *dst=*_dst,*ex; - I64 i,j,r,old_flags,type,size; - CMemberLst *tempm; - CIntermediateCode *tempi; - CAOTCtrl *a=lx->a; - CExeAbsAddr *tempa; - CExeImportExport *tempe; - Bool is_str; - - tempc=OptClassFwd(tempc); - if (tempm=tempc->member_lst) { - if (lx->token!='{') - LexExcept(lx,"expecting '{' at "); - lx->stk_ptr--; //grows up - LexPush(lx); - Lex(lx); - while (tempm) { - PrsVarInit2(lx,&dst,tempm->member_class,&tempm->dim,data_addr_ip,_base,data_heap,pass); - if (lx->token==',') - Lex(lx); - tempm=tempm->next; - } - lx->stk_ptr--; //grows up - if (lx->token!='}') - LexExcept(lx,"missing '}' at "); - Lex(lx); - } else { - if (tempc->ptr_stars_cnt==1 && ((tempc-1)->raw_type==RT_I8 || (tempc-1)->raw_type==RT_U8) && - !tempad && lx->token==TK_STR) - is_str=TRUE; - else - is_str=FALSE; - if (lx->flags&LF_AOT_COMPILE && is_str) { - lx->stk_ptr--; //grows up - ex=LexExtStr(lx,&i); - if (pass==2) { - tempa=CAlloc(sizeof(CExeAbsAddr)); - tempa->next=a->abss; - tempa->type=EAT_ADD_U64; - a->abss=tempa; - tempa->ip=data_addr_ip+dst-*_base; - *dst(I64 *)=a->ip; - for (j=0;jflags; - lx->flags=LF_NO_ABSS | lx->flags & ~(LF_AOT_COMPILE|LF_HAS_MISC_DATA|LF_NOT_CONST); - ex=LexExpression2Bin(lx,&type); - if (old_flags&LF_AOT_COMPILE && - lx->flags&LF_NOT_CONST && - !Bt(&lx->opts,OPTf_GLBLS_ON_DATA_HEAP)) { - lx->flags=lx->flags&~LF_NO_ABSS|LF_AOT_COMPILE; - Free(ex); - if (pass==2) { - MemSet(dst,0,tempc->size); - LexPop(lx); - Lex(lx); - LCCPush(lx); - LCCInit(lx); - LCCAdd(lx,IC_ABS_ADDR,data_addr_ip,tempc+1); - LCCAdd(lx,IC_IMM_I64,dst-*_base,tempc+1); - LCCAdd(lx,IC_ADD,0,tempc+1); - if (!PrsExpression(lx,NULL,TRUE)) - throw('Compiler'); - tempi=lx->lcc.lcc_root.last; - if (tempi->ic_code==IC_END_EXP) { - tempi->ic_code=IC_NOP1; - tempi->ic_flags=0; - } - LCCAdd(lx,IC_ASSIGN,0,tempc); - LCCAdd(lx,IC_END_EXP,0,tempc,ICF_NO_DEPEND_RESULT); - LCCAdd(lx,IC_RET,0,0); - if (ex=LCCCompile(lx,&size,NULL,NULL)) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_MAIN; - tempe->ip=lx->a->ip; - QueIns(tempe,lx->exe->last_ie); - for (i=0;istk_ptr--; //grows up - } else { - lx->stk_ptr--; //grows up - if (!ex) - throw('Compiler'); - r=Call(ex); - if (!(lx->flags & LF_HAS_MISC_DATA)||pass==1) - Free(ex); - - if (type==RT_F64 && - tempc->raw_type!=RT_F64) - r=r(F64); - else if (type!=RT_F64 && - tempc->raw_type==RT_F64) - r(F64)=r; - MemCpy(dst,&r,tempc->size); - } - } - dst+=tempc->size; - lx->flags=lx->flags&~LF_NO_ABSS|old_flags&(LF_HAS_MISC_DATA|LF_AOT_COMPILE); - } - *_dst=dst; -} - -class CVI2 -{ - CVI2 *next,*last; - U0 base; -}; - -U0 PrsVarInit2(CLex *lx,U8 **_dst,CHashClass *tempc,CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass) -{ - I64 i,j,cnt; - U8 *st,*_b; - CVI2 root,*tempvi,*tempvi1; - CArrayDim *tempad1; - tempc=OptClassFwd(tempc); - if (tempad1=tempad->next) { - if (!tempc->ptr_stars_cnt && - (tempc->raw_type==RT_I8 || tempc->raw_type==RT_U8) && - lx->token==TK_STR) { - lx->stk_ptr--; //grows up - st=LexExtStr(lx,&i); - if (tempad1->cnt<0) {//[] - tempad1->cnt=i; - tempad->total_cnt=i*tempad1->total_cnt; - Free(*_base); - if (data_heap) - *_base=MAlloc(i); - else - *_base=MAlloc(i,Fs->code_heap); - MemCpy(*_base,st,i); - *_dst=*_base+i; - } else { - MemCpy(*_dst,st,tempad1->cnt); - *_dst+=tempad1->cnt; - } - Free(st); - LexPush(lx); - } else { - if (lx->token=='{') { - lx->stk_ptr--; //grows up - LexPush(lx); - Lex(lx); - } - if (tempad1->cnt<0) {//[] - QueInit(&root); - cnt=0; - while (lx->token!='}') { - tempvi=MAlloc(offset(CVI2.base)+tempad1->total_cnt*tempc->size); - _b=&tempvi->base; - PrsVarInit2(lx,&_b,tempc,tempad1,data_addr_ip,_base,data_heap,pass); - QueIns(tempvi,root.last); - if (lx->token==',') - Lex(lx); - cnt++; - } - Lex(lx); //skip '}' - tempad1->cnt=cnt; - tempad->total_cnt=cnt*tempad1->total_cnt; - j=tempad1->total_cnt*tempc->size; - i=cnt*j; - Free(*_base); - if (data_heap) - *_base=_b=MAlloc(i); - else - *_base=_b=MAlloc(i,Fs->code_heap); - tempvi=root.next; - while (tempvi!=&root) { - tempvi1=tempvi->next; - MemCpy(_b,&tempvi->base,j); - _b+=j; - Free(tempvi); - tempvi=tempvi1; - } - *_dst=_b; - } else { - for (i=0;icnt;i++) { - PrsVarInit2(lx,_dst,tempc,tempad1,data_addr_ip,_base,data_heap,pass); - if (tempad1->cnt>1 && lx->token==',') - Lex(lx); - } - if (lx->token=='}') - Lex(lx); - } - } - } else { - PrsVarInit(lx,_dst,tempc,tempad1,data_addr_ip,_base,data_heap,pass); - LexPush(lx); - } -} - -U0 PrsGlblInit(CLex *lx,CHashGlblVar *tempg,I64 pass) -{ - U8 *dst=tempg->data_addr; - PrsVarInit2(lx,&dst,tempg->var_class,&tempg->dim, - tempg->data_addr_ip,&tempg->data_addr, - Bt(&lx->opts,OPTf_GLBLS_ON_DATA_HEAP)|| - Bt(&lx->flags,Lf_AOT_COMPILE),pass); -} - -U0 PrsStaticInit(CLex *lx,CMemberLst *tempm,I64 pass) -{ - U8 *ex,*dst=tempm->static_data; - CHashClass *tempc=tempm->member_class; - I64 i,size; - CExeImportExport *tempe; - - if (lx->flags&LF_AOT_COMPILE && pass==2) { - LCCPush(lx); - LCCInit(lx); - } - PrsVarInit2(lx,&dst,tempc,&tempm->dim,tempm->static_data_ip,&tempm->static_data,Bt(&lx->flags,Lf_AOT_COMPILE),pass); - if (lx->flags&LF_AOT_COMPILE && pass==2) { - if (lx->lcc.lcc_root.next!=&lx->lcc.lcc_root) { - LCCAdd(lx,IC_RET,0,0); - if (ex=LCCCompile(lx,&size,NULL,NULL)) { - if (pass==2) { - tempe=CAlloc(sizeof(CExeImportExport)); - tempe->type=EIT_MAIN; - tempe->ip=lx->a->ip; - QueIns(tempe,lx->exe->last_ie); - for (i=0;inext!=0 for array - CArrayDim *tempad,*tempad1; - I64 j; - Bool result=TRUE; - dim->next=NULL; - dim->cnt=0; - dim->total_cnt=1; - tempad1=&dim->next; - while (lx->token=='[') { - if (Lex(lx)==']' && !dim->next) { - j=-1; - result=FALSE; - } else { - if ((j=LexExpressionI64(lx))<0) - LexExcept(lx,"Invalid array size at "); - } - tempad1=&dim->next; - while (tempad1->next) { - tempad1->next->total_cnt*=j; - tempad1=tempad1->next; - } - tempad=MAlloc(sizeof(CArrayDim)); - tempad1->next=tempad; - tempad1=tempad; - tempad->next=NULL; - tempad->cnt=j; - tempad->total_cnt=1; - dim->total_cnt*=j; - if (lx->token!=']') - LexExcept(lx,"missing ']' at "); - Lex(lx); - } - return result; -} - -U0 PrsDotDotDot(CLex *lx,CHashFun *tempf,I64 _reg) -{ - CMemberLst *tempm; - CArrayDim *tempad; - - Bts(&tempf->flags,Ff_DOT_DOT_DOT); - - Lex(lx); - tempm=MemberLstNew(_reg); - tempm->flags=MLF_DOT_DOT_DOT; - tempm->member_class=cmp.internal_types[RT_I64]; - tempm->str=StrNew("argc"); - tempm->offset=tempf->size; - tempm->size=8; - tempf->size+=8; - MemberAdd(lx,tempm,tempf,PRS1B_FUN_ARG); - - tempm=MemberLstNew(_reg); - tempm->flags=MLF_DOT_DOT_DOT; - tempm->member_class=cmp.internal_types[RT_I64]; - tempm->str=StrNew("argv"); - tempm->dim.total_cnt=127; //arbitrary - tempm->dim.next=tempad=MAlloc(sizeof(CArrayDim)); - tempad->next=NULL; - tempad->cnt=127; //arbitrary - tempad->total_cnt=1; - tempm->offset=tempf->size; - tempm->size=8; //Close enough - tempf->size+=8;//Close enough - MemberAdd(lx,tempm,tempf,PRS1B_FUN_ARG); - - if (lx->token==')') - Lex(lx); -} - -CHashClass *PrsType(CLex *lx,CHashClass **_tempc1, - I64 *_mode,CMemberLst *tempm,U8 **_ident,CHashFun **_fun_ptr, - CHashExport **_tempex,CArrayDim *tempad,I64 fsp_flags) -{ - I64 k,ptr_stars_cnt,mode=*_mode; - CHashClass *tempc1=*_tempc1,*tempc2; - CHashFun *fun_ptr=NULL; - CHashExport *tempex=NULL; - CArrayDim *tempad2; - -pt_start: - if (!tempc1 || !(tempc1->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"invalid class at "); - - ptr_stars_cnt=0; - while (lx->token=='*') { - if (mode.u8[1]) { - lx->stk_ptr--; //grows up - LexPush(lx); - } - Lex(lx); - tempc1++; - if (++ptr_stars_cnt>MAX_PTR_STARS) - LexExcept(lx,"Too many *'s at "); - } - - k=PrsKeyWord(lx); - if (k==KW_UNION || k==KW_CLASS) { - Lex(lx); - tempc2=PrsClass(lx,k,fsp_flags,mode&255==PRS0_EXTERN); - tempc2->fwd_class=tempc1; - tempc1=tempc2; - if (_tempc1) *_tempc1=tempc1; - mode=PRS0_NULL|PRS1_NULL; - goto pt_start; - } - - if (lx->token=='(') { - if (Lex(lx)!='*') - LexExcept(lx,"expecting '*' at "); - ptr_stars_cnt=1; //fun_ptr - while (Lex(lx)=='*') - ptr_stars_cnt++; //fun_ptr - if (ptr_stars_cnt>MAX_PTR_STARS) - LexExcept(lx,"Too many *'s at "); - } else - ptr_stars_cnt=-1; //fun_ptr - - if (_ident) { - if (lx->token==TK_IDENT) { - tempex=lx->hash_entry; - *_ident=lx->cur_str; - lx->cur_str=NULL; - Lex(lx); - } else { - if (!mode.u8[1]) - *_ident=NULL; - else if (lx->token==',' || lx->token==';' || lx->token==')') { - tempex=NULL; - *_ident=StrNew("_anon_"); - tempm->flags|=MLF_NO_UNUSED_WARN; - } else - LexExcept(lx,"expecting identifier at "); - } - } - - if (ptr_stars_cnt>=0) { //fun_ptr - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - if (Lex(lx)!='(') - LexExcept(lx,"expecting '(' at "); - fun_ptr=PrsFunJoin(lx,tempc1,NULL,fsp_flags)+ptr_stars_cnt; - tempc1=cmp.internal_types[RT_PTR]+ptr_stars_cnt; - } - if (!PrsArrayDims(lx,tempad) && lx->token!='=') { - tempc1++; - tempad2=tempad->next->next; - Free(tempad->next); - tempad->next=tempad2; - } - - tempc2=OptClassFwd(tempc1); - if (tempc2->ptr_stars_cnt) { - tempc2-=tempc2->ptr_stars_cnt; - if (tempc2->type&HTT_INTERNAL_TYPE && !tempc2->size) - LexWarn(lx,"use \"U8 *\" instead of \"U0 *\" at "); - } - - if (_mode) *_mode=mode; - if (_fun_ptr) *_fun_ptr=fun_ptr; - if (_tempex) *_tempex=tempex; - return tempc1; -} - -U0 PrsVarLst(CLex *lx,CHashClass *tempc,I64 mode,I64 union_base=0) -{ - I64 i,k,old_flags=lx->flags,old_flags2,type,_reg; - CHashClass *tempc1,*tempc2; - CHash *temph; - CMemberLst *tempm; - CMemberLstMeta *temp_meta; - U8 *ex; - Bool undef_array_size,first; - lx->flags|=LF_DONT_MAKE_RESULT; - if (mode.u8[1]==PRS1B_CLASS) - lx->flags|=LF_CLASS_IP; - if ((mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || - mode&PRSF_UNION) && (lx->token=='(' || lx->token=='{')) - Lex(lx); - while (TRUE) { - while (lx->token==';') - Lex(lx); - if (mode&PRSF_UNION) - lx->class_ip=union_base; - else - lx->class_ip=tempc->size; - while (lx->token=='$$') { - if (Lex(lx)!='=') //skip $$ - LexExcept(lx,"expecting '=' at "); - Lex(lx); //skip = - lx->class_ip=LexExpression(lx); - if (-lx->class_ip>tempc->neg_offset) - tempc->neg_offset=-lx->class_ip; - if (mode&PRSF_UNION) - union_base=lx->class_ip; - else - tempc->size=lx->class_ip; - if (lx->token!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); //skip ; - } - if (lx->token==')' || lx->token=='}') { - Lex(lx); - goto pvl_done; - } - _reg=REG_UNDEF; -pvl_restart1: - switch (PrsKeyWord(lx)) { - case KW_REG: - _reg=REG_ALLOC; - if (Lex(lx)==TK_IDENT) { - k=DefineMatch(lx->cur_str,"ST_U64_REGS"); - if (k>=0) { - _reg=k; - Lex(lx); - } - } - goto pvl_restart1; - case KW_NOREG: - _reg=REG_NONE; - Lex(lx); - goto pvl_restart1; - } - - if (lx->token==TK_DOT_DOT_DOT && mode.u8[1]==PRS1B_FUN_ARG) { - PrsDotDotDot(lx,tempc,_reg); - goto pvl_done; - } - if (lx->token==TK_IDENT) - temph=lx->hash_entry; - else - temph=NULL; - if (!temph) - LexExcept(lx,"expecting type at "); - k=PrsKeyWord(lx); - if (k==KW_UNION) { - Lex(lx); - PrsVarLst(lx,tempc,mode|PRSF_UNION,tempc->size); - } else { - if (!(temph->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"expecting type at "); - first=TRUE; -pvl_restart2: - tempc1=temph; - LexPush(lx); - Lex(lx); //skip type or ',' - tempm=MemberLstNew(_reg); - _reg=REG_UNDEF; - if (mode.u8[1]==PRS1B_STATIC_LOCAL_VAR) { - tempm->flags|=MLF_STATIC; - tempm->reg=REG_NONE; - } - if (mode.u8[1]==PRS1B_FUN_ARG || mode.u8[1]==PRS1B_LOCAL_VAR) { -pvl_restart3: - switch (PrsKeyWord(lx)) { - case KW_REG: - tempm->reg=REG_ALLOC; - lx->stk_ptr--; //grows up - LexPush(lx); - if (Lex(lx)==TK_IDENT) { - k=DefineMatch(lx->cur_str,"ST_U64_REGS"); - if (k>=0) { - tempm->reg=k; - lx->stk_ptr--; //grows up - LexPush(lx); - Lex(lx); - } - } - goto pvl_restart3; - case KW_NOREG: - tempm->reg=REG_NONE; - lx->stk_ptr--; //grows up - LexPush(lx); - Lex(lx); - goto pvl_restart3; - } - } - tempm->member_class=PrsType(lx,&tempc1,&mode,tempm,&tempm->str, - &tempm->fun_ptr,NULL,&tempm->dim,0); - if (tempm->fun_ptr) - tempm->flags|=MLF_FUN; - if (first) - MemberAdd(lx,tempm,tempc,mode.u8[1]); - else - MemberAdd(lx,tempm,tempc,PRS1B_NULL); - tempc->member_cnt++; - - tempc2=tempm->member_class; - i=tempc2->size*tempm->dim.total_cnt; - switch (mode.u8[1]) { - case PRS1B_STATIC_LOCAL_VAR: - if (i<0) { - i=0; - undef_array_size=TRUE; - } else - undef_array_size=FALSE; - if (mode&PRSF_UNION) - LexExcept(lx,"Static unions are not implemented "); - k=(i+7)&~7; - if (lx->flags&LF_AOT_COMPILE) - tempm->static_data=MAlloc(k); - else - tempm->static_data=MAlloc(k,Fs->code_heap); - if (lx->flags&LF_AOT_COMPILE) { - tempm->static_data_ip=lx->a->ip; - k>>=3; - if (sys_var_init_flag&1) { - k<<=3; - while (k--) - AsmStoreCodeU8(lx,sys_var_init_val); - } else - while (k--) - AsmStoreCodeU64(lx,0); - } else - if (sys_var_init_flag&1) - MemSet(tempm->static_data,sys_var_init_val,k); - lx->stk_ptr--; - if (lx->token=='=') { - lx->flags=lx->flags&~LF_DONT_MAKE_RESULT|old_flags&LF_DONT_MAKE_RESULT; - if (undef_array_size) { - LexPush(lx); - LexPush(lx); - Lex(lx); //skip = - PrsStaticInit(lx,tempm,1); - lx->stk_ptr--; - i=tempc2->size*tempm->dim.total_cnt; - k=(i+7)&~7; - if (lx->flags&LF_AOT_COMPILE) { - k>>=3; - if (sys_var_init_flag&1) { - k<<=3; - while (k--) - AsmStoreCodeU8(lx,sys_var_init_val); - } else - while (k--) - AsmStoreCodeU64(lx,0); - } else - if (sys_var_init_flag&1) - MemSet(tempm->static_data,sys_var_init_val,k); - LexPop(lx); - } - LexPush(lx); - Lex(lx); //skip = - PrsStaticInit(lx,tempm,2); - lx->stk_ptr--; - if (lx->flags&LF_AOT_COMPILE) - for (k=0;kstatic_data_ip+k,tempm->static_data[k]); - tempm->use_cnt=0; - lx->flags|=LF_DONT_MAKE_RESULT; - } - if (lx->flags&LF_AOT_COMPILE) - Free(tempm->static_data); - break; - case PRS1B_LOCAL_VAR: - if (mode&PRSF_UNION) { - if (union_base-tempc->sizesize; - else - i=0; - } - if (i>=8) - tempc->size=(tempc->size-i)&~7; - else if (i>=4) - tempc->size=(tempc->size-i)&~3; - else if (i>=2) - tempc->size=(tempc->size-i)&~1; - else - tempc->size-=i; - tempm->offset=tempc->size; - tempm->size=i; - if (lx->token=='=') { - lx->flags=lx->flags&~LF_DONT_MAKE_RESULT|old_flags&LF_DONT_MAKE_RESULT; - LexPop(lx); - Lex(lx); - if (!PrsExpression(lx,NULL,TRUE)) - throw('Compiler'); - tempm->use_cnt=0; - lx->flags|=LF_DONT_MAKE_RESULT; - } else - lx->stk_ptr--; - break; - case PRS1B_FUN_ARG: - if (mode&PRSF_UNION) { - tempm->offset=union_base; - if (tempc->size-union_base<8) - tempc->size=8+union_base; - } else { - tempm->offset=tempc->size; - tempc->size+=8; - } - tempm->size=8; - if (lx->token=='=') { - Lex(lx); - if (PrsKeyWord(lx)==KW_LASTCLASS) { - tempm->flags|=MLF_LASTCLASS; - Lex(lx); - } else { - old_flags2=lx->flags; - lx->flags&=~LF_HAS_MISC_DATA; - ex=LexExpression2Bin(lx,&type); - if (!ex) - throw('Compiler'); - tempm->dft_val=Call(ex); - tempc2=OptClassFwd(tempc2); - if (tempc2->raw_type==RT_F64) { - if (type!=RT_F64) - tempm->dft_val(F64)=tempm->dft_val; - } else { - if (type==RT_F64) - tempm->dft_val=tempm->dft_val(F64); - } - if (lx->flags & LF_HAS_MISC_DATA) { - tempm->dft_val=StrNew(tempm->dft_val); - tempm->flags|=MLF_STR_DFT_AVAILABLE; - } - Free(ex); - lx->flags|=old_flags2&LF_HAS_MISC_DATA; - } - tempm->flags|=MLF_DFT_AVAILABLE; - } - lx->stk_ptr--; - break; - case PRS1B_CLASS: - if (mode&PRSF_UNION) { - tempm->offset=union_base; - if (tempc->size-union_basesize=i+union_base; - } else { - tempm->offset=tempc->size; - tempc->size+=i; - } - tempm->size=i; - while (lx->token==TK_IDENT) { - temp_meta=MAlloc(sizeof(CMemberLstMeta)); - temp_meta->next=tempm->meta; - tempm->meta=temp_meta; - temp_meta->str=lx->cur_str; - temp_meta->flags=0; - lx->cur_str=NULL; - if (Lex(lx)==TK_STR) { - temp_meta->user_data=LexExtStr(lx); - temp_meta->flags|=MLMF_IS_STR; - } else - temp_meta->user_data=LexExpression(lx); - } - lx->stk_ptr--; - break; - } - switch (lx->token) { - case ',': - if (mode.u8[1]==PRS1B_FUN_ARG && !(mode&PRSF_UNION)) - Lex(lx); - else { - first=FALSE; - goto pvl_restart2; - } - break; - case ')': - case '}': - Lex(lx); - goto pvl_done; - case ';': - lx->flags=lx->flags&~LF_DONT_MAKE_RESULT|old_flags&LF_DONT_MAKE_RESULT; - Lex(lx); - lx->flags|=LF_DONT_MAKE_RESULT; - if ((mode.u8[1]==PRS1B_LOCAL_VAR||mode.u8[1]==PRS1B_STATIC_LOCAL_VAR) && !(mode&PRSF_UNION)) - goto pvl_done; - break; - default: - LexExcept(lx,"missing ';' at"); - } - } - } -pvl_done: - lx->flags=lx->flags&~(LF_CLASS_IP|LF_DONT_MAKE_RESULT)| - old_flags& (LF_CLASS_IP|LF_DONT_MAKE_RESULT); -} - -CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern) +CHashClass *PrsClass(CCmpCtrl *cc,I64 keyword,I64 fsp_flags,Bool is_extern) { CHashClass *tempc,*base_class; - if (lx->token!=TK_IDENT) - LexExcept(lx,"expecting identifier at "); + if (cc->token!=TK_IDENT) + LexExcept(cc,"expecting identifier at "); if (is_extern) { tempc=PrsClassNew; - tempc->str=lx->cur_str; - lx->cur_str=NULL; - HashAdd(tempc,lx->htc.glbl_hash_table); + tempc->str=cc->cur_str; + cc->cur_str=NULL; + HashAdd(tempc,cc->htc.glbl_hash_table); LBts(&tempc->flags,Cf_EXTERN); - HashSrcFileSet(lx,tempc); - Lex(lx); + HashSrcFileSet(cc,tempc); + Lex(cc); } else { - if (lx->flags&LF_AOT_COMPILE) { - if (tempc=HashFind(lx->cur_str,lx->htc.glbl_hash_table,HTT_CLASS)) { + if (cc->flags&CCF_AOT_COMPILE) { + if (tempc=HashFind(cc->cur_str,cc->htc.glbl_hash_table,HTT_CLASS)) { if (!Bt(&tempc->flags,Cf_EXTERN)) tempc=NULL; else if (tempc->use_cnt<3) - UnusedExternWarning(lx,tempc); + UnusedExternWarning(cc,tempc); } } else { - if (tempc=HashSingleTableFind(lx->cur_str,lx->htc.glbl_hash_table,HTT_CLASS)) { + if (tempc=HashSingleTableFind(cc->cur_str, + cc->htc.glbl_hash_table,HTT_CLASS)) { if (!Bt(&tempc->flags,Cf_EXTERN)) tempc=NULL; else if (tempc->use_cnt<3) - UnusedExternWarning(lx,tempc); + UnusedExternWarning(cc,tempc); } } if (tempc) { @@ -819,62 +35,63 @@ CHashClass *PrsClass(CLex *lx,I64 keyword,I64 fsp_flags,Bool is_extern) tempc->index=NULL; } else { tempc=PrsClassNew; - tempc->str=lx->cur_str; - lx->cur_str=NULL; - HashAdd(tempc,lx->htc.glbl_hash_table); + tempc->str=cc->cur_str; + cc->cur_str=NULL; + HashAdd(tempc,cc->htc.glbl_hash_table); } LBtr(&tempc->flags,Cf_EXTERN); if (fsp_flags&FSF_PUBLIC) tempc->type|=HTF_PUBLIC; tempc->use_cnt=0; - if (lx->last_U16=='\n') - HashSrcFileSet(lx,tempc,-1); + if (cc->last_U16=='\n') + HashSrcFileSet(cc,tempc,-1); else - HashSrcFileSet(lx,tempc,0); - if (Lex(lx)==':') { - if (Lex(lx)!=TK_IDENT || !(base_class=lx->hash_entry) || - !(base_class->type&HTT_CLASS)) - LexExcept(lx,"invalid class at "); - if (Lex(lx)==',') - LexExcept(lx,"Only one base class allowed at this time at "); + HashSrcFileSet(cc,tempc,0); + if (Lex(cc)==':') { + if (Lex(cc)!=TK_IDENT || !(base_class=cc->hash_entry) || + !(base_class->type&HTT_CLASS)) + LexExcept(cc,"invalid class at "); + if (Lex(cc)==',') + LexExcept(cc,"Only one base class allowed at this time at "); tempc->base_class=base_class; tempc->size+=base_class->size; } if (keyword==KW_UNION) - PrsVarLst(lx,tempc,PRS0_NULL|PRS1_CLASS|PRSF_UNION); + PrsVarLst(cc,tempc,PRS0_NULL|PRS1_CLASS|PRSF_UNION); else - PrsVarLst(lx,tempc,PRS0_NULL|PRS1_CLASS); + PrsVarLst(cc,tempc,PRS0_NULL|PRS1_CLASS); tempc->size+=tempc->neg_offset; } return tempc; } -CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) +CHashFun *PrsFunJoin(CCmpCtrl *cc, + CHashClass *temp_return,U8 *name,I64 fsp_flags) { CMemberLst *tempm; - CAOTCtrl *a=lx->a; + CAOTCtrl *aotc=cc->aotc; CHashFun *tempf; if (name) {//if not fun_ptr - if (lx->flags&LF_AOT_COMPILE) { - if (tempf=HashFind(name,lx->htc.glbl_hash_table,HTT_FUN)) { + if (cc->flags&CCF_AOT_COMPILE) { + if (tempf=HashFind(name,cc->htc.glbl_hash_table,HTT_FUN)) { if (tempf->type & HTF_IMPORT) tempf=NULL; else if (tempf->use_cnt<3) - UnusedExternWarning(lx,tempf); + UnusedExternWarning(cc,tempf); } } else { - if (tempf=HashSingleTableFind(name,lx->htc.glbl_hash_table,HTT_FUN)) { + if (tempf=HashSingleTableFind(name,cc->htc.glbl_hash_table,HTT_FUN)) { if (!Bt(&tempf->flags,Cf_EXTERN)) tempf=NULL; else if (tempf->use_cnt<3) - UnusedExternWarning(lx,tempf); + UnusedExternWarning(cc,tempf); } } } else tempf=NULL; if (tempf) { - tempf->used_reg_mask=REG_ALWAYS_CLOBBERED_MASK+REG_STK_TEMPS_MASK; + tempf->used_reg_mask=REGG_C_CLOBBERED+REGG_SAVED+REGG_C_TEMP_CLOBBERED; Free(tempf->src_link); tempf->src_link=NULL; Free(tempf->index); @@ -883,23 +100,23 @@ CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) MemberLstDel(tempf); } else { tempf=PrsFunNew; - tempf->used_reg_mask=REG_ALWAYS_CLOBBERED_MASK+REG_STK_TEMPS_MASK; - tempf->clobbered_reg_mask=REG_ALWAYS_CLOBBERED_MASK+REG_STK_TEMPS_MASK; + tempf->used_reg_mask=REGG_C_CLOBBERED+REGG_SAVED+REGG_C_TEMP_CLOBBERED; + tempf->clobbered_reg_mask=REGG_C_CLOBBERED+REGG_C_TEMP_CLOBBERED; tempf->str=name; - if (lx->flags&LF_AOT_COMPILE) - tempf->executable_addr=a->ip; + if (cc->flags&CCF_AOT_COMPILE) + tempf->executable_addr=aotc->ip; else tempf->executable_addr=&UndefinedExtern; LBts(&tempf->flags,Cf_EXTERN); tempf->flags|=fsp_flags&FSG_FUN_FLAGS1; if (name) //if not fun_ptr - HashAdd(tempf,lx->htc.glbl_hash_table); + HashAdd(tempf,cc->htc.glbl_hash_table); } BEqu(&tempf->type,HTf_PUBLIC,fsp_flags&FSF_PUBLIC); tempf->return_class=temp_return; tempf->use_cnt=0; - HashSrcFileSet(lx,tempf); - PrsVarLst(lx,tempf,PRS0_NULL|PRS1_FUN_ARG); + HashSrcFileSet(cc,tempf); + PrsVarLst(cc,tempf,PRS0_NULL|PRS1_FUN_ARG); tempf->arg_cnt=tempf->member_cnt; if (0arg_cnt<<3<=MAX_I16 && !Bt(&tempf->flags,Ff_DOT_DOT_DOT)) LBts(&tempf->flags,Ff_RET1); @@ -912,87 +129,90 @@ CHashFun *PrsFunJoin(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) return tempf; } -U0 PrsFun(CLex *lx,CHashClass *temp_return,U8 *name,I64 fsp_flags) +U0 PrsFun(CCmpCtrl *cc,CHashClass *temp_return,U8 *name,I64 fsp_flags) { CMemberLst *tempm; - CLexCodeMisc *saved_leave_label; + CCodeMisc *saved_leave_label; I64 i,j,size,*r; Bool old_ctrace; - lx->fun_lfn=lx->cur_lfn; - lx->min_line=lx->max_line=lx->cur_lfn->line_num; + cc->fun_lex_file=cc->lex_include_stk; + cc->min_line=cc->max_line=cc->lex_include_stk->line_num; - lx->flags&=~LF_NO_REG_OPT; - lx->htc.local_var_lst=lx->htc.fun=PrsFunJoin(lx,temp_return,name,fsp_flags); + cc->flags&=~CCF_NO_REG_OPT; + cc->htc.local_var_lst=cc->htc.fun=PrsFunJoin(cc,temp_return,name,fsp_flags); - LCCPush(lx); - Btr(&lx->flags,Lf_OPT_TRACE_PRESENT); - LCCInit(lx); - LCCAdd(lx,IC_ENTER,0,0); - saved_leave_label=lx->lb_leave; - lx->lb_leave=LCCMiscNew(lx,CMT_LABEL); - lx->flags&=~LF_HAS_RETURN; - PrsStatement(lx,,,0); + COCPush(cc); + Btr(&cc->flags,CCf_OPT_TRACE_PRESENT); + COCInit(cc); + ICAdd(cc,IC_ENTER,0,0); + saved_leave_label=cc->lb_leave; + cc->lb_leave=COCMiscNew(cc,CMT_LABEL); + cc->flags&=~CCF_HAS_RETURN; + PrsStatement(cc,,,0); - if (lx->max_linemin_line) - lx->max_line=lx->min_line; + if (cc->max_linemin_line) + cc->max_line=cc->min_line; - if (lx->htc.fun->return_class->size && !(lx->flags&LF_HAS_RETURN)) - LexWarn(lx,"Function should return val "); - LCCAdd(lx,IC_LABEL,lx->lb_leave,0); - lx->lb_leave=saved_leave_label; - LCCAdd(lx,IC_LEAVE,0,lx->htc.fun->return_class); - lx->htc.fun->size&=~7; - if (lx->flags&LF_AOT_COMPILE) { - lx->htc.fun->executable_addr=lx->a->ip; - lx->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE; - r=LCCCompile(lx,&size,&lx->htc.fun->dbg_info,NULL); + if (cc->htc.fun->return_class->size && !(cc->flags&CCF_HAS_RETURN)) + LexWarn(cc,"Function should return val "); + ICAdd(cc,IC_LABEL,cc->lb_leave,0); + cc->lb_leave=saved_leave_label; + ICAdd(cc,IC_LEAVE,0,cc->htc.fun->return_class); + cc->htc.fun->size&=~7; + if (cc->flags&CCF_AOT_COMPILE) { + cc->htc.fun->executable_addr=cc->aotc->ip; + cc->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE; + r=COCCompile(cc,&size,&cc->htc.fun->dbg_info,NULL); if (r) { j=(size+7)>>3; for (i=0;iopts,OPTf_COMPILE_TRACE); - lx->htc.fun->executable_addr=LCCCompile(lx,&size,&lx->htc.fun->dbg_info,NULL); + old_ctrace=Btr(&cc->opts,OPTf_COMPILE_TRACE); + cc->htc.fun->executable_addr=COCCompile(cc,&size, + &cc->htc.fun->dbg_info,NULL); if (old_ctrace) { - Bts(&lx->opts,OPTf_COMPILE_TRACE); - Un(lx->htc.fun->executable_addr,size,64); + Bts(&cc->opts,OPTf_COMPILE_TRACE); + Un(cc->htc.fun->executable_addr,size,64); } - SysSymImportsResolve(lx->htc.fun->str); + SysSymImportsResolve(cc->htc.fun->str); } - LBtr(&lx->htc.fun->flags,Cf_EXTERN); - LCCPop(lx); - tempm=lx->htc.fun->member_lst; + LBtr(&cc->htc.fun->flags,Cf_EXTERN); + COCPop(cc); + tempm=cc->htc.fun->member_lst; while (tempm) { if (tempm->flags & MLF_NO_UNUSED_WARN) { if (tempm->use_cnt>1&&StrCmp(tempm->str,"_anon_")) PrintWarn("Unneeded nounusedwarn\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + cc->lex_include_stk->full_name,cc->lex_include_stk->line_num, + tempm->str,cc->htc.fun->str); } else if (!tempm->use_cnt && GetOpt(OPTf_WARN_UNUSED_VAR)) PrintWarn("Unused var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - lx->cur_lfn->full_name,lx->cur_lfn->line_num,tempm->str,lx->htc.fun->str); + cc->lex_include_stk->full_name,cc->lex_include_stk->line_num, + tempm->str,cc->htc.fun->str); tempm=tempm->next; } - lx->htc.local_var_lst=lx->htc.fun=lx->fun_lfn=NULL; + cc->htc.local_var_lst=cc->htc.fun=cc->fun_lex_file=NULL; } -U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, +U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tempc, I64 saved_val,I64 fsp_flags) { I64 i,j,mode,k,val; U8 *st; CHashExport *tempex; CHashGlblVar *tempg; - CAOTCtrl *a=lx->a; - CExeHeapGlbl *temphg; + CAOTCtrl *aotc=cc->aotc; + CAOTHeapGlbl *temphg; CHashClass *tempc; CHashFun *tempf,*tempf_fun_ptr; CArrayDim tempad; Bool has_alias,undef_array_size,is_array; while (TRUE) { - tempc=PrsType(lx,&saved_tempc,&saved_mode,NULL,&st, + tempc=PrsType(cc,&saved_tempc,&saved_mode,NULL,&st, &tempf_fun_ptr,&tempex,&tempad,fsp_flags); if (!st) return; @@ -1007,38 +227,38 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, val=saved_val; mode=saved_mode; - if (tempex && mode&255==PRS0_EXTERN && !(lx->flags&LF_AOT_COMPILE) && + if (tempex && mode&255==PRS0_EXTERN && !(cc->flags&CCF_AOT_COMPILE) && tempex->type & HTT_EXPORT_SYS_SYM) { val=tempex->val; mode=PRS0__EXTERN|PRS1_NULL; } - if (lx->token=='(') { + if (cc->token=='(') { switch (mode&255) { case PRS0__INTERN: - tempf=PrsFunJoin(lx,tempc,st,fsp_flags); + tempf=PrsFunJoin(cc,tempc,st,fsp_flags); tempf->executable_addr=val; Bts(&tempf->flags,Ff_INTERNAL); LBtr(&tempf->flags,Cf_EXTERN); return; case PRS0__EXTERN: - tempf=PrsFunJoin(lx,tempc,st,fsp_flags); + tempf=PrsFunJoin(cc,tempc,st,fsp_flags); tempf->executable_addr=val; SysSymImportsResolve(tempf->str); LBtr(&tempf->flags,Cf_EXTERN); if (saved_mode&255==PRS0__EXTERN) LBts(&tempf->flags,Ff__EXTERN); - if (lx->flags&LF_AOT_COMPILE) + if (cc->flags&CCF_AOT_COMPILE) tempf->type|=HTF_RESOLVE; return; case PRS0_EXTERN: - PrsFunJoin(lx,tempc,st,fsp_flags); + PrsFunJoin(cc,tempc,st,fsp_flags); return; case PRS0_IMPORT: case PRS0__IMPORT: - if (!(lx->flags&LF_AOT_COMPILE)) - LexExcept(lx,"import not needed at "); + if (!(cc->flags&CCF_AOT_COMPILE)) + LexExcept(cc,"import not needed at "); else { - tempf=PrsFunJoin(lx,tempc,st,fsp_flags); + tempf=PrsFunJoin(cc,tempc,st,fsp_flags); tempf->type|=HTF_IMPORT; if (mode&255==PRS0__IMPORT) tempf->import_name=StrNew(val); @@ -1047,7 +267,7 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, } return; default: - PrsFun(lx,tempc,st,fsp_flags); + PrsFun(cc,tempc,st,fsp_flags); return; } } else { @@ -1067,7 +287,7 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, temphg=NULL; switch (mode&255) { case PRS0__EXTERN: - if (lx->flags&LF_AOT_COMPILE) { + if (cc->flags&CCF_AOT_COMPILE) { tempg=CAlloc(sizeof(CHashGlblVar)); tempg->data_addr_ip=val; tempg->type=HTT_GLBL_VAR | HTF_EXPORT; @@ -1080,8 +300,8 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, break; case PRS0__IMPORT: case PRS0_IMPORT: - if (!(lx->flags&LF_AOT_COMPILE)) - LexExcept(lx,"import not needed at "); + if (!(cc->flags&CCF_AOT_COMPILE)) + LexExcept(cc,"import not needed at "); else { tempg=CAlloc(sizeof(CHashGlblVar)); tempg->type=HTT_GLBL_VAR | HTF_IMPORT; @@ -1092,7 +312,7 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, } break; case PRS0_EXTERN: - if (lx->flags&LF_AOT_COMPILE) { + if (cc->flags&CCF_AOT_COMPILE) { tempg=CAlloc(sizeof(CHashGlblVar)); tempg->type=HTT_GLBL_VAR; } else { @@ -1101,46 +321,46 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, } break; default: - if (lx->flags&LF_AOT_COMPILE) { - if (Bt(&lx->opts,OPTf_GLBLS_ON_DATA_HEAP)) { - if (lx->token=='=') - LexExcept(lx,"Can't init glbl var on data heap in AOT module "); + if (cc->flags&CCF_AOT_COMPILE) { + if (Bt(&cc->opts,OPTf_GLBLS_ON_DATA_HEAP)) { + if (cc->token=='=') + LexExcept(cc,"Can't init glbl var on data heap in AOT module "); tempg=CAlloc(sizeof(CHashGlblVar)); - temphg=tempg->heap_glbl=CAlloc(sizeof(CExeHeapGlbl)); + temphg=tempg->heap_glbl=CAlloc(sizeof(CAOTHeapGlbl)); temphg->size=j; temphg->str=StrNew(st); - temphg->next=a->heap_glbls; - a->heap_glbls=temphg; + temphg->next=aotc->heap_glbls; + aotc->heap_glbls=temphg; tempg->flags=GVF_DATA_HEAP; tempg->type=HTT_GLBL_VAR; //TODO: HTF_EXPORT if (tempex && tempex->type & HTT_GLBL_VAR) //TODO!! extern - LexExcept(lx,"Feature not implemented "); + LexExcept(cc,"Feature not implemented "); } else { tempg=CAlloc(sizeof(CHashGlblVar)); - if (lx->token=='=') + if (cc->token=='=') tempg->data_addr=CAlloc(j); if (tempc->size>=8) //align - while (a->ip&7) - AsmStoreCodeU8(lx,0); + while (aotc->ip&7) + AOTStoreCodeU8(cc,0); else if (tempc->size==4) - while (a->ip&3) - AsmStoreCodeU8(lx,0); + while (aotc->ip&3) + AOTStoreCodeU8(cc,0); else if (tempc->size==2) - while (a->ip&1) - AsmStoreCodeU8(lx,0); - tempg->data_addr_ip=a->ip; + while (aotc->ip&1) + AOTStoreCodeU8(cc,0); + tempg->data_addr_ip=aotc->ip; tempg->type=HTT_GLBL_VAR | HTF_EXPORT; if (tempex && tempex->type & HTT_GLBL_VAR) has_alias=TRUE; if (sys_var_init_flag&1) for (k=0;kopts,OPTf_GLBLS_ON_DATA_HEAP)) { + if (Bt(&cc->opts,OPTf_GLBLS_ON_DATA_HEAP)) { tempg=CAlloc(sizeof(CHashGlblVar),Fs->code_heap); tempg->data_addr=MAlloc(j); tempg->flags=GVF_DATA_HEAP; @@ -1150,8 +370,8 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, } tempg->type=HTT_GLBL_VAR; if (tempex && tempex->type&HTT_GLBL_VAR && - tempex->type&HTF_UNRESOLVED && - MHeapCtrl(tempex)==MHeapCtrl(tempg)) + tempex->type&HTF_UNRESOLVED && + MHeapCtrl(tempex)==MHeapCtrl(tempg)) has_alias=TRUE; if (sys_var_init_flag&1) MemSet(tempg->data_addr,sys_var_init_val,j); @@ -1165,10 +385,10 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, tempg->size=j; tempg->dim.total_cnt=i; tempg->use_cnt=0; - if (lx->last_U16=='\n') - HashSrcFileSet(lx,tempg,-1); + if (cc->last_U16=='\n') + HashSrcFileSet(cc,tempg,-1); else - HashSrcFileSet(lx,tempg,0); + HashSrcFileSet(cc,tempg,0); if (mode&255==PRS0_IMPORT || mode&255==PRS0__IMPORT) tempg->flags|=GVF_IMPORT; if (mode&255==PRS0_EXTERN) @@ -1179,290 +399,290 @@ U0 PrsGlblVarLst(CLex *lx,I64 saved_mode,CHashClass *saved_tempc, } if (is_array) tempg->flags|=GVF_ARRAY; - HashAdd(tempg,lx->htc.glbl_hash_table); - if (!(lx->flags&LF_AOT_COMPILE) && !(tempg->flags&GVF_EXTERN)) + HashAdd(tempg,cc->htc.glbl_hash_table); + if (!(cc->flags&CCF_AOT_COMPILE) && !(tempg->flags&GVF_EXTERN)) SysSymImportsResolve(tempg->str); - if (lx->token=='=') { + if (cc->token=='=') { if (undef_array_size) { - LexPush(lx); - LexPush(lx); - Lex(lx); - PrsGlblInit(lx,tempg,1); - lx->stk_ptr--; //grows up + LexPush(cc); + LexPush(cc); + Lex(cc); + PrsGlblInit(cc,tempg,1); + LexPopNoRestore(cc); tempg->size=tempg->dim.total_cnt*tempc->size; if (temphg) temphg->size=tempg->size; - if (lx->flags&LF_AOT_COMPILE) { + if (cc->flags&CCF_AOT_COMPILE) { if (sys_var_init_flag&1) for (k=0;ksize;k++) - AsmStoreCodeU8(lx,sys_var_init_val); + AOTStoreCodeU8(cc,sys_var_init_val); else for (k=0;ksize;k++) - AsmStoreCodeU8(lx,0); + AOTStoreCodeU8(cc,0); } else if (sys_var_init_flag&1) MemSet(tempg->data_addr,sys_var_init_val,k); - LexPop(lx); + LexPopRestore(cc); } - LexPush(lx); - Lex(lx); - PrsGlblInit(lx,tempg,2); - if (lx->flags&LF_AOT_COMPILE) + LexPush(cc); + Lex(cc); + PrsGlblInit(cc,tempg,2); + if (cc->flags&CCF_AOT_COMPILE) for (k=0;ksize;k++) - AsmStoreCodeU8At(lx,tempg->data_addr_ip+k,tempg->data_addr[k]); - lx->stk_ptr--; //grows up + AOTStoreCodeU8At(cc,tempg->data_addr_ip+k,tempg->data_addr[k]); + LexPopNoRestore(cc); } if (has_alias) { if (tempex(CHashGlblVar *)->use_cnt<2) { PrintWarn("Unused extern '%s'\n",tempex(CHashGlblVar *)->str); - lx->warning_cnt++; + cc->warning_cnt++; } tempex(CHashGlblVar *)->flags|=GVF_ALIAS; tempex(CHashGlblVar *)->data_addr=tempg->data_addr; tempex(CHashGlblVar *)->data_addr_ip=tempg->data_addr_ip; } - if (lx->token==',') - Lex(lx); + if (cc->token==',') + Lex(cc); else { - if (lx->token!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); + if (cc->token!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); return; } } } } -U0 PrsIf(CLex *lx,I64 try_cnt,CLexCodeMisc *lb_break) +U0 PrsIf(CCmpCtrl *cc,I64 try_cnt,CCodeMisc *lb_break) { - CLexCodeMisc *lb,*lb1; + CCodeMisc *lb,*lb1; I64 k; - if (lx->token!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); - if (!PrsExpression(lx,NULL,FALSE)) + if (cc->token!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); + if (!PrsExpression(cc,NULL,FALSE)) throw('Compiler'); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); - lb=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_BR_ZERO,lb,0); - PrsStatement(lx,try_cnt,lb_break); - k=PrsKeyWord(lx); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); + lb=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_BR_ZERO,lb,0); + PrsStatement(cc,try_cnt,lb_break); + k=PrsKeyWord(cc); if (k==KW_ELSE) { - Lex(lx); - lb1=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_JMP,lb1,0); - LCCAdd(lx,IC_LABEL,lb,0); - PrsStatement(lx,try_cnt,lb_break); - LCCAdd(lx,IC_LABEL,lb1,0); + Lex(cc); + lb1=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_JMP,lb1,0); + ICAdd(cc,IC_LABEL,lb,0); + PrsStatement(cc,try_cnt,lb_break); + ICAdd(cc,IC_LABEL,lb1,0); } else - LCCAdd(lx,IC_LABEL,lb,0); + ICAdd(cc,IC_LABEL,lb,0); } -U0 PrsWhile(CLex *lx,I64 try_cnt) +U0 PrsWhile(CCmpCtrl *cc,I64 try_cnt) { - CLexCodeMisc *lb,*lb_done; - if (lx->token!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); - lb=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_LABEL,lb,0); - if (!PrsExpression(lx,NULL,FALSE)) + CCodeMisc *lb,*lb_done; + if (cc->token!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); + lb=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_LABEL,lb,0); + if (!PrsExpression(cc,NULL,FALSE)) throw('Compiler'); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); - lb_done=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_BR_ZERO,lb_done,0); - PrsStatement(lx,try_cnt,lb_done); - LCCAdd(lx,IC_JMP,lb,0); - LCCAdd(lx,IC_LABEL,lb_done,0); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); + lb_done=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_BR_ZERO,lb_done,0); + PrsStatement(cc,try_cnt,lb_done); + ICAdd(cc,IC_JMP,lb,0); + ICAdd(cc,IC_LABEL,lb_done,0); } -U0 PrsDoWhile(CLex *lx,I64 try_cnt) +U0 PrsDoWhile(CCmpCtrl *cc,I64 try_cnt) { - CLexCodeMisc *lb,*lb_done; - lb=LCCMiscNew(lx,CMT_LABEL); - lb_done=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_LABEL,lb,0); - PrsStatement(lx,try_cnt,lb_done); - if (PrsKeyWord(lx)!=KW_WHILE) - LexExcept(lx,"missing 'while' at"); - if (Lex(lx)!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); - if (!PrsExpression(lx,NULL,FALSE)) + CCodeMisc *lb,*lb_done; + lb=COCMiscNew(cc,CMT_LABEL); + lb_done=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_LABEL,lb,0); + PrsStatement(cc,try_cnt,lb_done); + if (PrsKeyWord(cc)!=KW_WHILE) + LexExcept(cc,"missing 'while' at"); + if (Lex(cc)!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); + if (!PrsExpression(cc,NULL,FALSE)) throw('Compiler'); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - LCCAdd(lx,IC_BR_NOT_ZERO,lb,0); - LCCAdd(lx,IC_LABEL,lb_done,0); - if (Lex(lx)!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + ICAdd(cc,IC_BR_NOT_ZERO,lb,0); + ICAdd(cc,IC_LABEL,lb_done,0); + if (Lex(cc)!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); } -U0 PrsFor(CLex *lx,I64 try_cnt) +U0 PrsFor(CCmpCtrl *cc,I64 try_cnt) { - CLexCodeCtrl *tempcbh; - CLexCodeMisc *lb,*lb_done; + CCodeCtrl *tempcbh; + CCodeMisc *lb,*lb_done; - if (lx->token!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); - PrsStatement(lx,try_cnt); + if (cc->token!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); + PrsStatement(cc,try_cnt); - lb=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_LABEL,lb,0); - if (!PrsExpression(lx,NULL,FALSE)) + lb=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_LABEL,lb,0); + if (!PrsExpression(cc,NULL,FALSE)) throw('Compiler'); - lb_done=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_BR_ZERO,lb_done,0); - if (lx->token!=';') - LexExcept(lx,"missing ';' at"); - Lex(lx); + lb_done=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_BR_ZERO,lb_done,0); + if (cc->token!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); - LCCPush(lx); - LCCInit(lx); - if (lx->token!=')') - PrsStatement(lx,try_cnt,NULL,0); - LCCPush(lx); - tempcbh=LCCPopNoFree(lx); - LCCPop(lx); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - Lex(lx); + COCPush(cc); + COCInit(cc); + if (cc->token!=')') + PrsStatement(cc,try_cnt,NULL,0); + COCPush(cc); + tempcbh=COCPopNoFree(cc); + COCPop(cc); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + Lex(cc); - PrsStatement(lx,try_cnt,lb_done); - LCCAppend(lx,tempcbh); - LCCAdd(lx,IC_JMP,lb,0); - LCCAdd(lx,IC_LABEL,lb_done,0); + PrsStatement(cc,try_cnt,lb_done); + COCAppend(cc,tempcbh); + ICAdd(cc,IC_JMP,lb,0); + ICAdd(cc,IC_LABEL,lb_done,0); } class CSubSwitch { CSubSwitch *next,*last; - CLexCodeMisc *lb_start,*lb_break; + CCodeMisc *lb_start,*lb_break; }; class CSwitchCase { CSwitchCase *next; - CLexCodeMisc *label; + CCodeMisc *label; I64 val; CSubSwitch *ss; }; -U0 PrsSwitch(CLex *lx,Bool nobound,I64 try_cnt) +U0 PrsSwitch(CCmpCtrl *cc,Bool nobound,I64 try_cnt) { CSwitchCase *header=NULL,*temps,*temps1; //Leaks on except CSubSwitch root,*tempss; //Leaks on except - CLexCodeMisc *lb_dft,*lb_fwd_case,*mc_jt,*lb_entry,**jmp_table; + CCodeMisc *lb_dft,*lb_fwd_case,*mc_jt,*lb_entry,**jmp_table; CIntermediateCode *tempi_sub,*tempi_cmp,*tempi_jmp,*tempi_start; Bool dft_found=FALSE; I64 i,k,k2,lo=MAX_I64,hi=MIN_I64,range; - if (lx->token!='(') - LexExcept(lx,"expecting '(' at "); - Lex(lx); + if (cc->token!='(') + LexExcept(cc,"expecting '(' at "); + Lex(cc); QueInit(&root); - root.last->lb_break=LCCMiscNew(lx,CMT_LABEL); + root.last->lb_break=COCMiscNew(cc,CMT_LABEL); root.last->lb_break->use_cnt++; - lb_dft=LCCMiscNew(lx,CMT_LABEL); + lb_dft=COCMiscNew(cc,CMT_LABEL); lb_dft->use_cnt++; - mc_jt=LCCMiscNew(lx,CMT_JMP_TABLE); - mc_jt->begin=LCCMiscNew(lx,CMT_LABEL); + mc_jt=COCMiscNew(cc,CMT_JMP_TABLE); + mc_jt->begin=COCMiscNew(cc,CMT_LABEL); mc_jt->begin->use_cnt++; - if (!PrsExpression(lx,NULL,FALSE)) + if (!PrsExpression(cc,NULL,FALSE)) throw('Compiler'); - tempi_sub=LCCAdd(lx,IC_IMM_I64,0,cmp.internal_types[RT_I64]); - LCCAdd(lx,IC_SUB,0,cmp.internal_types[RT_I64]); - tempi_cmp=LCCAdd(lx,IC_IMM_I64,0,cmp.internal_types[RT_I64]); + tempi_sub=ICAdd(cc,IC_IMM_I64,0,cmp.internal_types[RT_I64]); + ICAdd(cc,IC_SUB,0,cmp.internal_types[RT_I64]); + tempi_cmp=ICAdd(cc,IC_IMM_I64,0,cmp.internal_types[RT_I64]); if (nobound) - LCCAdd(lx,IC_NOBOUND_SWITCH,mc_jt,0); + ICAdd(cc,IC_NOBOUND_SWITCH,mc_jt,0); else - LCCAdd(lx,IC_SWITCH,mc_jt,0); - if (lx->token!=')') - LexExcept(lx,"missing ')' at "); - if (Lex(lx)!='{') - LexExcept(lx,"expecting '{' at "); - Lex(lx); - LCCAdd(lx,IC_LABEL,mc_jt->begin,0); + ICAdd(cc,IC_SWITCH,mc_jt,0); + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + if (Lex(cc)!='{') + LexExcept(cc,"expecting '{' at "); + Lex(cc); + ICAdd(cc,IC_LABEL,mc_jt->begin,0); while (TRUE) { - while (lx->token && lx->token!='}') { + while (cc->token && cc->token!='}') { sw_cont: - switch (PrsKeyWord(lx)) { + switch (PrsKeyWord(cc)) { case KW_SUB_SWITCH_END: goto sw_sub_end; case KW_SUB_SWITCH_START: - if (Lex(lx)==':') - Lex(lx); + if (Lex(cc)==':') + Lex(cc); else - LexExcept(lx,"expecting ':' at "); + LexExcept(cc,"expecting ':' at "); tempss=MAlloc(sizeof(CSubSwitch)); QueIns(tempss,root.last); - root.last->lb_break=LCCMiscNew(lx,CMT_LABEL); + root.last->lb_break=COCMiscNew(cc,CMT_LABEL); root.last->lb_break->use_cnt++; - lb_fwd_case=LCCMiscNew(lx,CMT_LABEL); - tempi_jmp=LCCAdd(lx,IC_JMP,lb_fwd_case,0); + lb_fwd_case=COCMiscNew(cc,CMT_LABEL); + tempi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0); - tempss->lb_start=LCCMiscNew(lx,CMT_LABEL); - tempi_start=LCCAdd(lx,IC_LABEL,tempss->lb_start,0); - while (lx->token && lx->token!='}') { - switch (PrsKeyWord(lx)) { + tempss->lb_start=COCMiscNew(cc,CMT_LABEL); + tempi_start=ICAdd(cc,IC_LABEL,tempss->lb_start,0); + while (cc->token && cc->token!='}') { + switch (PrsKeyWord(cc)) { case KW_SUB_SWITCH_END: OptFree(tempi_jmp); goto sw_sub_end; case KW_SUB_SWITCH_START: case KW_CASE: case KW_DFT: - if (lx->lcc.lcc_root.last==tempi_start) { + if (cc->coc.coc_root.last==tempi_start) { OptFree(tempi_jmp); tempss->lb_start=NULL; } else { - LCCAdd(lx,IC_RET,0,0); - LCCAdd(lx,IC_LABEL,lb_fwd_case,0); - LCCAdd(lx,IC_SUB_CALL,tempss->lb_start,0);//In case fall-through + ICAdd(cc,IC_RET,0,0); + ICAdd(cc,IC_LABEL,lb_fwd_case,0); + ICAdd(cc,IC_SUB_CALL,tempss->lb_start,0);//In case fall-thru } goto sw_cont; default: - PrsStatement(lx,try_cnt,root.last->last->lb_break); + PrsStatement(cc,try_cnt,root.last->last->lb_break); } } break; case KW_CASE: if (root.next!=&root) { - lb_fwd_case=LCCMiscNew(lx,CMT_LABEL); - tempi_jmp=LCCAdd(lx,IC_JMP,lb_fwd_case,0);//In case fall-through + lb_fwd_case=COCMiscNew(cc,CMT_LABEL); + tempi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0);//In case fall-thru } - Lex(lx); - lb_entry=LCCMiscNew(lx,CMT_LABEL); - LCCAdd(lx,IC_LABEL,lb_entry,0); + Lex(cc); + lb_entry=COCMiscNew(cc,CMT_LABEL); + ICAdd(cc,IC_LABEL,lb_entry,0); lb_entry->use_cnt++; if (root.next!=&root) { tempss=root.next; while (tempss!=&root) { if (tempss->lb_start) - LCCAdd(lx,IC_SUB_CALL,tempss->lb_start,0); + ICAdd(cc,IC_SUB_CALL,tempss->lb_start,0); tempss=tempss->next; } - LCCAdd(lx,IC_LABEL,lb_fwd_case,0); + ICAdd(cc,IC_LABEL,lb_fwd_case,0); } - k=LexExpressionI64(lx); + k=LexExpressionI64(cc); if (khi) hi=k; - if (lx->token==':') { - Lex(lx); + if (cc->token==':') { + Lex(cc); temps=MAlloc(sizeof(CSwitchCase)); temps->label=lb_entry; temps->val=k; temps->next=header; header=temps; - } else if (lx->token==TK_DOT_DOT_DOT) { - Lex(lx); - k2=LexExpressionI64(lx); - if (lx->token==':') { - Lex(lx); + } else if (cc->token==TK_DOT_DOT_DOT) { + Lex(cc); + k2=LexExpressionI64(cc); + if (cc->token==':') { + Lex(cc); if (k2hi) hi=k2; if (k>k2) @@ -1475,64 +695,64 @@ sw_cont: header=temps; } } else - LexExcept(lx,"expecting ':' at "); + LexExcept(cc,"expecting ':' at "); } else - LexExcept(lx,"expecting ':' at "); + LexExcept(cc,"expecting ':' at "); break; case KW_DFT: if (root.next!=&root) { - lb_fwd_case=LCCMiscNew(lx,CMT_LABEL); - tempi_jmp=LCCAdd(lx,IC_JMP,lb_fwd_case,0);//In case fall-through + lb_fwd_case=COCMiscNew(cc,CMT_LABEL); + tempi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0);//In case fall-thru } - Lex(lx); - LCCAdd(lx,IC_LABEL,lb_dft,0); - if (lx->token==':') - Lex(lx); + Lex(cc); + ICAdd(cc,IC_LABEL,lb_dft,0); + if (cc->token==':') + Lex(cc); else - LexExcept(lx,"expecting ':' at "); + LexExcept(cc,"expecting ':' at "); if (root.next!=&root) { tempss=root.next; while (tempss!=&root) { if (tempss->lb_start) - LCCAdd(lx,IC_SUB_CALL,tempss->lb_start,0); + ICAdd(cc,IC_SUB_CALL,tempss->lb_start,0); tempss=tempss->next; } - LCCAdd(lx,IC_LABEL,lb_fwd_case,0); + ICAdd(cc,IC_LABEL,lb_fwd_case,0); } dft_found=TRUE; break; default: - PrsStatement(lx,try_cnt,root.last->lb_break); + PrsStatement(cc,try_cnt,root.last->lb_break); } } sw_sub_end: tempss=root.last; - LCCAdd(lx,IC_LABEL,tempss->lb_break,0); + ICAdd(cc,IC_LABEL,tempss->lb_break,0); if (tempss==&root) { - if (lx->token!='}') - LexExcept(lx,"missing '}' at "); - Lex(lx); + if (cc->token!='}') + LexExcept(cc,"missing '}' at "); + Lex(cc); break; } else { QueRem(tempss); Free(tempss); - if (PrsKeyWord(lx)!=KW_SUB_SWITCH_END) - LexExcept(lx,"missing 'sub_switch_end' at "); - if (Lex(lx)==':') - Lex(lx); + if (PrsKeyWord(cc)!=KW_SUB_SWITCH_END) + LexExcept(cc,"missing 'sub_switch_end' at "); + if (Lex(cc)==':') + Lex(cc); else - LexExcept(lx,"expecting ':' at "); + LexExcept(cc,"expecting ':' at "); } } if (!dft_found) - LCCAdd(lx,IC_LABEL,lb_dft,0); + ICAdd(cc,IC_LABEL,lb_dft,0); if (0hi || !(0ic_data=lo; tempi_cmp->ic_data=range; @@ -1540,7 +760,7 @@ sw_sub_end: while (temps) { temps1=temps->next; if (jmp_table[temps->val-lo]!=lb_dft) - LexExcept(lx,"Duplicate case at "); + LexExcept(cc,"Duplicate case at "); else jmp_table[temps->val-lo]=temps->label; Free(temps); @@ -1551,150 +771,152 @@ sw_sub_end: mc_jt->range=range; } -U0 PrsNoUnusedWarn(CLex *lx) +U0 PrsNoUnusedWarn(CCmpCtrl *cc) { CMemberLst *tempm; - while (lx->token==TK_IDENT) { - if (!(tempm=lx->local_var_entry)) - LexExcept(lx,"expecting local var at "); + while (cc->token==TK_IDENT) { + if (!(tempm=cc->local_var_entry)) + LexExcept(cc,"expecting local var at "); tempm->flags|=MLF_NO_UNUSED_WARN; - if (Lex(lx)==',') - Lex(lx); - else if (lx->token!=';') - LexExcept(lx,"expecting ',' at "); + if (Lex(cc)==',') + Lex(cc); + else if (cc->token!=';') + LexExcept(cc,"expecting ',' at "); } } -U0 PrsStreamBlk(CLex *lx) +U0 PrsStreamBlk(CCmpCtrl *cc) { CLexHashTableContext *htc=MAlloc(sizeof(CLexHashTableContext)); CStreamBlk *tempe=MAlloc(sizeof(CStreamBlk)); tempe->body=StrNew(""); - QueIns(tempe,lx->last_stream_blk); - LCCPush(lx); - QueInit(&lx->lcc.lcc_next_misc); + QueIns(tempe,cc->last_stream_blk); + COCPush(cc); + QueInit(&cc->coc.coc_next_misc); - MemCpy(htc,&lx->htc,sizeof(CLexHashTableContext)); - htc->old_flags=lx->flags; - lx->htc.next=htc; - lx->htc.fun=lx->htc.local_var_lst=NULL; - lx->htc.define_hash_table=lx->htc.hash_table_lst=lx->htc.glbl_hash_table=lx->htc.local_hash_table=Fs->hash_table; - lx->flags=lx->flags & ~(LF_ASM_EXPRESSIONS|LF_AOT_COMPILE) | LF_EXE_BLK; - if (lx->token=='{') - Lex(lx); + MemCpy(htc,&cc->htc,sizeof(CLexHashTableContext)); + htc->old_flags=cc->flags; + cc->htc.next=htc; + cc->htc.fun=cc->htc.local_var_lst=NULL; + cc->htc.define_hash_table=cc->htc.hash_table_lst= + cc->htc.glbl_hash_table=cc->htc.local_hash_table=Fs->hash_table; + cc->flags=cc->flags & ~(CCF_ASM_EXPRESSIONS|CCF_AOT_COMPILE) | CCF_EXE_BLK; + if (cc->token=='{') + Lex(cc); else - LexExcept(lx,"missing '}' at "); - while (lx->token && lx->token!='}') - ExeCmdLine(lx); + LexExcept(cc,"missing '}' at "); + while (cc->token && cc->token!='}') + ExeCmdLine(cc); - MemCpy(&lx->htc,htc,sizeof(CLexHashTableContext)); - lx->flags=lx->flags&~LF_EXE_BLK | - htc->old_flags & (LF_ASM_EXPRESSIONS|LF_EXE_BLK|LF_AOT_COMPILE); + MemCpy(&cc->htc,htc,sizeof(CLexHashTableContext)); + cc->flags=cc->flags&~CCF_EXE_BLK | + htc->old_flags & (CCF_ASM_EXPRESSIONS|CCF_EXE_BLK|CCF_AOT_COMPILE); Free(htc); - LCCPop(lx); + COCPop(cc); QueRem(tempe); if (*tempe->body) - LexIncludeStr(lx,"StreamBlk",tempe->body,FALSE); + LexIncludeStr(cc,"StreamBlk",tempe->body,FALSE); else Free(tempe->body); Free(tempe); - Lex(lx); //Skip '}' + Lex(cc); //Skip '}' } -U0 PrsTryBlk(CLex *lx,I64 try_cnt) +U0 PrsTryBlk(CCmpCtrl *cc,I64 try_cnt) { - CLexCodeMisc *lb_catch,*lb_done,*lb_untry; + CCodeMisc *lb_catch,*lb_done,*lb_untry; CHashClass *tempc=cmp.internal_types[RT_PTR]; - CHashFun *temp_try=HashFind("SysTry",lx->htc.hash_table_lst,HTT_FUN), - *temp_untry=HashFind("SysUntry",lx->htc.hash_table_lst,HTT_FUN); + CHashFun *temp_try=HashFind("SysTry",cc->htc.hash_table_lst,HTT_FUN), + *temp_untry=HashFind("SysUntry",cc->htc.hash_table_lst,HTT_FUN); if (!temp_try || !temp_untry) - LexExcept(lx,"Missing header for SysTry() and SysUntry() at "); + LexExcept(cc,"Missing header for SysTry() and SysUntry() at "); - lx->flags|=LF_NO_REG_OPT; //TODO (Currently no reg vars in funs with try/catch) + cc->flags|=CCF_NO_REG_OPT; //TODO:Currently no reg vars in funs with try/catch - lb_catch=LCCMiscNew(lx,CMT_LABEL); - lb_done =LCCMiscNew(lx,CMT_LABEL); - lb_untry=LCCMiscNew(lx,CMT_LABEL); + lb_catch=COCMiscNew(cc,CMT_LABEL); + lb_done =COCMiscNew(cc,CMT_LABEL); + lb_untry=COCMiscNew(cc,CMT_LABEL); - LCCAdd(lx,IC_CALL_START,0,0); - LCCAdd(lx,IC_GET_LABEL,lb_untry,tempc,ICF_PUSH_RESULT); - LCCAdd(lx,IC_GET_LABEL,lb_catch,tempc,ICF_PUSH_RESULT); + ICAdd(cc,IC_CALL_START,0,0); + ICAdd(cc,IC_GET_LABEL,lb_untry,tempc,ICF_PUSH_RESULT); + ICAdd(cc,IC_GET_LABEL,lb_catch,tempc,ICF_PUSH_RESULT); if (Bt(&temp_try->flags,Cf_EXTERN)) { - lx->abs_cnts.externs++; - if (lx->flags&LF_AOT_COMPILE) - LCCAdd(lx,IC_CALL_IMPORT,temp_try,tempc); + cc->abs_cnts.externs++; + if (cc->flags&CCF_AOT_COMPILE) + ICAdd(cc,IC_CALL_IMPORT,temp_try,tempc); else - LCCAdd(lx,IC_CALL_INDIRECT2,&temp_try->executable_addr,tempc); + ICAdd(cc,IC_CALL_INDIRECT2,&temp_try->executable_addr,tempc); } else - LCCAdd(lx,IC_CALL,temp_try->executable_addr,tempc); - if ((Bt(&temp_try->flags,Ff_RET1) || Bt(&temp_try->flags,Ff_ARGPOP)) && !Bt(&temp_try->flags,Ff_NOARGPOP)) - LCCAdd(lx,IC_ADD_RSP1,16,tempc); + ICAdd(cc,IC_CALL,temp_try->executable_addr,tempc); + if ((Bt(&temp_try->flags,Ff_RET1) || + Bt(&temp_try->flags,Ff_ARGPOP)) && !Bt(&temp_try->flags,Ff_NOARGPOP)) + ICAdd(cc,IC_ADD_RSP1,16,tempc); else - LCCAdd(lx,IC_ADD_RSP,16,tempc); - LCCAdd(lx,IC_CALL_END,0,tempc); - LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); + ICAdd(cc,IC_ADD_RSP,16,tempc); + ICAdd(cc,IC_CALL_END,0,tempc); + ICAdd(cc,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); - PrsStatement(lx,try_cnt+1); + PrsStatement(cc,try_cnt+1); - LCCAdd(lx,IC_LABEL,lb_untry,0); - LCCAdd(lx,IC_CALL_START,0,0); + ICAdd(cc,IC_LABEL,lb_untry,0); + ICAdd(cc,IC_CALL_START,0,0); if (Bt(&temp_untry->flags,Cf_EXTERN)) { - lx->abs_cnts.externs++; - if (lx->flags&LF_AOT_COMPILE) - LCCAdd(lx,IC_CALL_IMPORT,temp_untry,tempc); + cc->abs_cnts.externs++; + if (cc->flags&CCF_AOT_COMPILE) + ICAdd(cc,IC_CALL_IMPORT,temp_untry,tempc); else - LCCAdd(lx,IC_CALL_INDIRECT2,&temp_untry->executable_addr,tempc); + ICAdd(cc,IC_CALL_INDIRECT2,&temp_untry->executable_addr,tempc); } else - LCCAdd(lx,IC_CALL,temp_untry->executable_addr,tempc); - LCCAdd(lx,IC_CALL_END,0,tempc); - LCCAdd(lx,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); + ICAdd(cc,IC_CALL,temp_untry->executable_addr,tempc); + ICAdd(cc,IC_CALL_END,0,tempc); + ICAdd(cc,IC_END_EXP,0,0,ICF_NO_DEPEND_RESULT); - LCCAdd(lx,IC_JMP,lb_done,0); + ICAdd(cc,IC_JMP,lb_done,0); - if (PrsKeyWord(lx)!=KW_CATCH) - LexExcept(lx,"missing 'catch' at"); + if (PrsKeyWord(cc)!=KW_CATCH) + LexExcept(cc,"missing 'catch' at"); - Lex(lx); - LCCAdd(lx,IC_LABEL,lb_catch,0); - PrsStatement(lx,try_cnt+1); - LCCAdd(lx,IC_RET,0,tempc); - LCCAdd(lx,IC_LABEL,lb_done,0); + Lex(cc); + ICAdd(cc,IC_LABEL,lb_catch,0); + PrsStatement(cc,try_cnt+1); + ICAdd(cc,IC_RET,0,tempc); + ICAdd(cc,IC_LABEL,lb_done,0); } -Bool PrsStatement(CLex *lx,I64 try_cnt=0, - CLexCodeMisc *lb_break=NULL,I64 cmp_flags=CMPF_PRS_SEMICOLON) +Bool PrsStatement(CCmpCtrl *cc,I64 try_cnt=0, + CCodeMisc *lb_break=NULL,I64 cmp_flags=CMPF_PRS_SEMICOLON) { I64 i,fsp_flags=0; CHashExport *tempex; - CLexCodeMisc *g_lb; + CCodeMisc *g_lb; U8 *import_name; CHashFun *temp_untry; - CExe *tempx; + CAOT *tempaot; if (cmp_flags&CMPF_ONE_ASM_INS) { - if (lx->flags&LF_AOT_COMPILE || lx->a_depth) - PrsAsmBlk(lx,CMPF_ONE_ASM_INS); - else if (tempx=CmpJoin(lx,CMPF_ASM_BLK|CMPF_ONE_ASM_INS)) - CmpFixUpJITAsm(lx,tempx); + if (cc->flags&CCF_AOT_COMPILE || cc->aot_depth) + PrsAsmBlk(cc,CMPF_ONE_ASM_INS); + else if (tempaot=CmpJoin(cc,CMPF_ASM_BLK|CMPF_ONE_ASM_INS)) + CmpFixUpJITAsm(cc,tempaot); fsp_flags=FSF_ASM; } else while (TRUE) { - while (lx->token==',') - Lex(lx); - if (lx->token=='{') { - Lex(lx); - while (lx->token!='}' && lx->token!=TK_EOF) - PrsStatement(lx,try_cnt,lb_break); - if (lx->cur_lfn==lx->fun_lfn) - lx->max_line=lx->cur_lfn->line_num; - if (Lex(lx)!=',') goto sm_done; - } else if (lx->token==';') { + while (cc->token==',') + Lex(cc); + if (cc->token=='{') { + Lex(cc); + while (cc->token!='}' && cc->token!=TK_EOF) + PrsStatement(cc,try_cnt,lb_break); + if (cc->lex_include_stk==cc->fun_lex_file) + cc->max_line=cc->lex_include_stk->line_num; + if (Lex(cc)!=',') goto sm_done; + } else if (cc->token==';') { if (cmp_flags&CMPF_PRS_SEMICOLON) - Lex(lx); - if (lx->token!=',') goto sm_done; + Lex(cc); + if (cc->token!=',') goto sm_done; } else { - if (lx->token==TK_IDENT) { - if (tempex=lx->hash_entry) { + if (cc->token==TK_IDENT) { + if (tempex=cc->hash_entry) { if (tempex->type & HTT_KEYWORD) { i=tempex(CHashGeneric *)->user_data0; nobound_switch (i) { @@ -1703,123 +925,125 @@ Bool PrsStatement(CLex *lx,I64 try_cnt=0, goto sm_not_keyword_afterall; sub_switch_start: case KW_ASM: - if (lx->htc.fun) { - if (tempx=CmpJoin(lx,CMPF_ASM_BLK)) - LCCAdd(lx,IC_ASM,tempx,0); - Lex(lx); //Skip '}' of asm{} + if (cc->htc.fun) { + if (tempaot=CmpJoin(cc,CMPF_ASM_BLK)) + ICAdd(cc,IC_ASM,tempaot,0); + Lex(cc); //Skip '}' of asm{} } else { - if (lx->flags&LF_AOT_COMPILE || lx->a_depth) { - Lex(lx); - PrsAsmBlk(lx,0); - if (lx->flags&LF_AOT_COMPILE && lx->a_depth==1) - Lex(lx); //Skip '}' of asm{} + if (cc->flags&CCF_AOT_COMPILE || cc->aot_depth) { + Lex(cc); + PrsAsmBlk(cc,0); + if (cc->flags&CCF_AOT_COMPILE && cc->aot_depth==1) + Lex(cc); //Skip '}' of asm{} } else { - if (tempx=CmpJoin(lx,CMPF_ASM_BLK)) - CmpFixUpJITAsm(lx,tempx); - Lex(lx); //Skip '}' of asm{} + if (tempaot=CmpJoin(cc,CMPF_ASM_BLK)) + CmpFixUpJITAsm(cc,tempaot); + Lex(cc); //Skip '}' of asm{} } fsp_flags=FSF_ASM; } break; sub_switch_start: - Lex(lx); + Lex(cc); case KW_LOCK: - lx->lock_cnt++; - PrsStatement(lx,try_cnt); - lx->lock_cnt--; + cc->lock_cnt++; + PrsStatement(cc,try_cnt); + cc->lock_cnt--; break; case KW_TRY: - PrsTryBlk(lx,try_cnt); + PrsTryBlk(cc,try_cnt); break; case KW_IF: - PrsIf(lx,try_cnt,lb_break); + PrsIf(cc,try_cnt,lb_break); break; case KW_FOR: - PrsFor(lx,try_cnt); + PrsFor(cc,try_cnt); break; case KW_WHILE: - PrsWhile(lx,try_cnt); + PrsWhile(cc,try_cnt); break; case KW_DO: - PrsDoWhile(lx,try_cnt); + PrsDoWhile(cc,try_cnt); break; case KW_NOBOUND_SWITCH: - PrsSwitch(lx,TRUE,try_cnt); + PrsSwitch(cc,TRUE,try_cnt); break; case KW_SWITCH: - PrsSwitch(lx,FALSE,try_cnt); + PrsSwitch(cc,FALSE,try_cnt); break; sub_switch_end: sub_switch_end: - if (lx->token!=',') goto sm_done; + if (cc->token!=',') goto sm_done; break; sub_switch_start: - if (lx->htc.fun) - LexExcept(lx,"Not allowed in fun"); - Lex(lx); + if (cc->htc.fun) + LexExcept(cc,"Not allowed in fun"); + Lex(cc); case KW__EXTERN: - if (Bt(&lx->opts,OPTf_EXTERNS_TO_IMPORTS)) + if (Bt(&cc->opts,OPTf_EXTERNS_TO_IMPORTS)) goto sm_underscore_import; - if (lx->flags&LF_AOT_COMPILE) { - if (lx->token!=TK_IDENT || !(tempex=lx->hash_entry) || + if (cc->flags&CCF_AOT_COMPILE) { + if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) || !(tempex->type & HTT_EXPORT_SYS_SYM)) - LexExcept(lx,"expecting System sym at "); + LexExcept(cc,"expecting System sym at "); i=tempex->val; - Lex(lx); + Lex(cc); } else - i=LexExpressionI64(lx); - if (lx->token!=TK_IDENT || !(tempex=lx->hash_entry) || + i=LexExpressionI64(cc); + if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) || !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"expecting type at "); - Lex(lx); - PrsGlblVarLst(lx,PRS0__EXTERN|PRS1_NULL,tempex,i,fsp_flags); + LexExcept(cc,"expecting type at "); + Lex(cc); + PrsGlblVarLst(cc,PRS0__EXTERN|PRS1_NULL,tempex,i,fsp_flags); break; case KW__IMPORT: sm_underscore_import: - if (lx->token!=TK_IDENT) - LexExcept(lx,"expecting System sym at "); - import_name=lx->cur_str; - lx->cur_str=0; - if (Lex(lx)!=TK_IDENT || !(tempex=lx->hash_entry) || + if (cc->token!=TK_IDENT) + LexExcept(cc,"expecting System sym at "); + import_name=cc->cur_str; + cc->cur_str=0; + if (Lex(cc)!=TK_IDENT || !(tempex=cc->hash_entry) || !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"expecting type at "); - Lex(lx); - PrsGlblVarLst(lx,PRS0__IMPORT|PRS1_NULL,tempex,import_name,FALSE); + LexExcept(cc,"expecting type at "); + Lex(cc); + PrsGlblVarLst(cc,PRS0__IMPORT|PRS1_NULL,tempex, + import_name,FALSE); Free(import_name); break; case KW_EXTERN: - if (lx->token!=TK_IDENT) - LexExcept(lx,"expecting type at "); - tempex=lx->hash_entry; - i=PrsKeyWord(lx); + if (cc->token!=TK_IDENT) + LexExcept(cc,"expecting type at "); + tempex=cc->hash_entry; + i=PrsKeyWord(cc); if (i==KW_CLASS||i==KW_UNION) { - Lex(lx); - PrsClass(lx,i,fsp_flags,TRUE); + Lex(cc); + PrsClass(cc,i,fsp_flags,TRUE); fsp_flags&=FSF_ASM; goto sm_semicolon; } - if (!tempex || !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"expecting type at "); - if (Bt(&lx->opts,OPTf_EXTERNS_TO_IMPORTS)) + if (!tempex || + !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) + LexExcept(cc,"expecting type at "); + if (Bt(&cc->opts,OPTf_EXTERNS_TO_IMPORTS)) goto sm_import; - Lex(lx); - PrsGlblVarLst(lx,PRS0_EXTERN|PRS1_NULL,tempex,0,fsp_flags); + Lex(cc); + PrsGlblVarLst(cc,PRS0_EXTERN|PRS1_NULL,tempex,0,fsp_flags); break; case KW_IMPORT: - if (lx->token!=TK_IDENT || !(tempex=lx->hash_entry) || + if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) || !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"expecting type at "); + LexExcept(cc,"expecting type at "); sm_import: - Lex(lx); - PrsGlblVarLst(lx,PRS0_IMPORT|PRS1_NULL,tempex,0,FALSE); + Lex(cc); + PrsGlblVarLst(cc,PRS0_IMPORT|PRS1_NULL,tempex,0,FALSE); break; case KW__INTERN: - i=LexExpressionI64(lx); - if (lx->token!=TK_IDENT || !(tempex=lx->hash_entry) || + i=LexExpressionI64(cc); + if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) || !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(lx,"expecting type at "); - Lex(lx); - PrsGlblVarLst(lx,PRS0__INTERN|PRS1_NULL,tempex,i,fsp_flags); + LexExcept(cc,"expecting type at "); + Lex(cc); + PrsGlblVarLst(cc,PRS0__INTERN|PRS1_NULL,tempex,i,fsp_flags); break; sub_switch_end: fsp_flags&=FSF_ASM; @@ -1829,7 +1053,8 @@ sm_import: fsp_flags=FSF_STATIC|fsp_flags&FSF_ASM; break; case KW_INTERRUPT: - fsp_flags=FSF_INTERRUPT|FSF_NOARGPOP|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); + fsp_flags=FSF_INTERRUPT|FSF_NOARGPOP| + fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); break; case KW_HASERRCODE: fsp_flags=FSF_HASERRCODE|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); @@ -1844,66 +1069,68 @@ sm_import: fsp_flags=FSF_PUBLIC|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); break; sub_switch_end: - Lex(lx); + Lex(cc); break; case KW_RETURN: - if (!lx->htc.fun) - LexExcept(lx,"Not in fun. Can't return a val "); + if (!cc->htc.fun) + LexExcept(cc,"Not in fun. Can't return a val "); if (try_cnt) { temp_untry=HashFind("SysUntry", - lx->htc.hash_table_lst,HTT_FUN); + cc->htc.hash_table_lst,HTT_FUN); for (i=0;iflags,Cf_EXTERN)) { - lx->abs_cnts.externs++; - if (lx->flags&LF_AOT_COMPILE) - LCCAdd(lx,IC_CALL_IMPORT, + cc->abs_cnts.externs++; + if (cc->flags&CCF_AOT_COMPILE) + ICAdd(cc,IC_CALL_IMPORT, temp_untry,cmp.internal_types[RT_PTR]); else - LCCAdd(lx,IC_CALL_INDIRECT2, - &temp_untry->executable_addr,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_CALL_INDIRECT2, + &temp_untry->executable_addr, + cmp.internal_types[RT_PTR]); } else - LCCAdd(lx,IC_CALL,temp_untry->executable_addr,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_CALL,temp_untry->executable_addr, + cmp.internal_types[RT_PTR]); } } - if (Lex(lx)!=';') { - if (!lx->htc.fun->return_class->size) - LexWarn(lx,"Function should NOT return val "); - if (!PrsExpression(lx,NULL,FALSE)) + if (Lex(cc)!=';') { + if (!cc->htc.fun->return_class->size) + LexWarn(cc,"Function should NOT return val "); + if (!PrsExpression(cc,NULL,FALSE)) throw('Compiler'); - LCCAdd(lx,IC_RETURN_VAL,0,lx->htc.fun->return_class); - lx->flags|=LF_HAS_RETURN; - } else if (lx->htc.fun->return_class->size) - LexWarn(lx,"Function should return val "); - LCCAdd(lx,IC_JMP,lx->lb_leave,0); + ICAdd(cc,IC_RETURN_VAL,0,cc->htc.fun->return_class); + cc->flags|=CCF_HAS_RETURN; + } else if (cc->htc.fun->return_class->size) + LexWarn(cc,"Function should return val "); + ICAdd(cc,IC_JMP,cc->lb_leave,0); goto sm_semicolon; case KW_GOTO: - if (Lex(lx)!=TK_IDENT) - LexExcept(lx,"expecting identifier at "); - if (!(g_lb=LCCGoToLabelFind(lx,lx->cur_str))) { - g_lb=LCCMiscNew(lx,CMT_GOTO_LABEL); - g_lb->str=lx->cur_str; - lx->cur_str=NULL; + if (Lex(cc)!=TK_IDENT) + LexExcept(cc,"expecting identifier at "); + if (!(g_lb=COCGoToLabelFind(cc,cc->cur_str))) { + g_lb=COCMiscNew(cc,CMT_GOTO_LABEL); + g_lb->str=cc->cur_str; + cc->cur_str=NULL; } g_lb->use_cnt++; - LCCAdd(lx,IC_JMP,g_lb,0); - Lex(lx); + ICAdd(cc,IC_JMP,g_lb,0); + Lex(cc); goto sm_semicolon; case KW_BREAK: - Lex(lx); + Lex(cc); if (!lb_break) - LexExcept(lx,"'break' not allowed\n"); - LCCAdd(lx,IC_JMP,lb_break,0); + LexExcept(cc,"'break' not allowed\n"); + ICAdd(cc,IC_JMP,lb_break,0); goto sm_semicolon; case KW_NOUNUSEDWARN: - Lex(lx); - PrsNoUnusedWarn(lx); + Lex(cc); + PrsNoUnusedWarn(cc); goto sm_semicolon; case KW_UNION: case KW_CLASS: - Lex(lx); - tempex=PrsClass(lx,i,fsp_flags,FALSE); - if (!lx->htc.fun && lx->token!=';') { - PrsGlblVarLst(lx,PRS0_NULL|PRS1_NULL,tempex,0,fsp_flags); + Lex(cc); + tempex=PrsClass(cc,i,fsp_flags,FALSE); + if (!cc->htc.fun && cc->token!=';') { + PrsGlblVarLst(cc,PRS0_NULL|PRS1_NULL,tempex,0,fsp_flags); fsp_flags&=FSF_ASM; break; } else { @@ -1914,63 +1141,63 @@ sm_import: } else {//Ident, found in hash table, not keyword sm_not_keyword_afterall: if (tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE)) { - if (lx->htc.fun) { + if (cc->htc.fun) { if (fsp_flags&FSF_STATIC) - PrsVarLst(lx,lx->htc.fun,PRS0_NULL|PRS1_STATIC_LOCAL_VAR); + PrsVarLst(cc,cc->htc.fun,PRS0_NULL|PRS1_STATIC_LOCAL_VAR); else - PrsVarLst(lx,lx->htc.fun,PRS0_NULL|PRS1_LOCAL_VAR); - if (lx->token=='}') goto sm_done; + PrsVarLst(cc,cc->htc.fun,PRS0_NULL|PRS1_LOCAL_VAR); + if (cc->token=='}') goto sm_done; } else { - Lex(lx); - PrsGlblVarLst(lx,PRS0_NULL|PRS1_NULL,tempex,0,fsp_flags); + Lex(cc); + PrsGlblVarLst(cc,PRS0_NULL|PRS1_NULL,tempex,0,fsp_flags); } } else { if (tempex->type & HTT_OPCODE) { - if (lx->htc.fun) { - if (tempx=CmpJoin(lx,CMPF_ASM_BLK|CMPF_ONE_ASM_INS)) - LCCAdd(lx,IC_ASM,tempx,0); + if (cc->htc.fun) { + if (tempaot=CmpJoin(cc,CMPF_ASM_BLK|CMPF_ONE_ASM_INS)) + ICAdd(cc,IC_ASM,tempaot,0); } else - LexExcept(lx,"Use Asm Blk at "); - if (lx->token!=',') goto sm_done; + LexExcept(cc,"Use Asm Blk at "); + if (cc->token!=',') goto sm_done; } else goto sm_prs_exp; } fsp_flags&=FSF_ASM; } } else {//Ident, not in hash table - if (lx->local_var_entry) + if (cc->local_var_entry) goto sm_prs_exp; - if (!(g_lb=LCCGoToLabelFind(lx,lx->cur_str))) { - g_lb=LCCMiscNew(lx,CMT_GOTO_LABEL); - g_lb->str=lx->cur_str; - lx->cur_str=NULL; + if (!(g_lb=COCGoToLabelFind(cc,cc->cur_str))) { + g_lb=COCMiscNew(cc,CMT_GOTO_LABEL); + g_lb->str=cc->cur_str; + cc->cur_str=NULL; } else if (g_lb->flags&CMF_DEFINED) - LexExcept(lx,"Duplicate goto label at "); + LexExcept(cc,"Duplicate goto label at "); g_lb->flags|=CMF_DEFINED; - LCCAdd(lx,IC_LABEL,g_lb,0); - if (Lex(lx)==':') //skip cur_str - Lex(lx); //skip colon + ICAdd(cc,IC_LABEL,g_lb,0); + if (Lex(cc)==':') //skip cur_str + Lex(cc); //skip colon else - LexExcept(lx,"undefined identifier at "); - if (!lx->htc.fun) - LexExcept(lx,"No global labels at "); - if (lx->token!=',') goto sm_done; + LexExcept(cc,"undefined identifier at "); + if (!cc->htc.fun) + LexExcept(cc,"No global labels at "); + if (cc->token!=',') goto sm_done; } - } else if (lx->token==TK_STR||lx->token==TK_CHAR_CONST) { - PrsFunCall(lx,NULL,FALSE,NULL); + } else if (cc->token==TK_STR||cc->token==TK_CHAR_CONST) { + PrsFunCall(cc,NULL,FALSE,NULL); goto sm_semicolon; - } else if (lx->token!=TK_EOF) {//Non-cur_str symbol, number or something + } else if (cc->token!=TK_EOF) {//Non-cur_str symbol, num or something sm_prs_exp: - if (!PrsExpression(lx,NULL,TRUE)) + if (!PrsExpression(cc,NULL,TRUE)) throw('Compiler'); sm_semicolon: if (cmp_flags&CMPF_PRS_SEMICOLON) { - if (lx->token==';') - Lex(lx); - else if (lx->token!=',') - LexExcept(lx,"missing ';' at"); + if (cc->token==';') + Lex(cc); + else if (cc->token!=',') + LexExcept(cc,"missing ';' at"); } - if (lx->token!=',') goto sm_done; + if (cc->token!=',') goto sm_done; } else goto sm_done; //TK_EOF } diff --git a/Compiler/PrsVar.CPP b/Compiler/PrsVar.CPP new file mode 100644 index 0000000..c400bfb --- /dev/null +++ b/Compiler/PrsVar.CPP @@ -0,0 +1,731 @@ +U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc,CArrayDim *tempad, + U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass) +{ + U8 *dst=*_dst,*machine_code; + I64 i,j,r,old_flags,type,size; + CMemberLst *tempm; + CIntermediateCode *tempi; + CAOTCtrl *aotc=cc->aotc; + CAOTAbsAddr *tempa; + CAOTImportExport *tempie; + Bool is_str; + + tempc=OptClassFwd(tempc); + if (tempm=tempc->member_lst) { + if (cc->token!='{') + LexExcept(cc,"expecting '{' at "); + LexPopNoRestore(cc); + LexPush(cc); + Lex(cc); + while (tempm) { + PrsVarInit2(cc,&dst,tempm->member_class,&tempm->dim, + data_addr_ip,_base,data_heap,pass); + if (cc->token==',') + Lex(cc); + tempm=tempm->next; + } + LexPopNoRestore(cc); + if (cc->token!='}') + LexExcept(cc,"missing '}' at "); + Lex(cc); + } else { + if (tempc->ptr_stars_cnt==1 && + ((tempc-1)->raw_type==RT_I8 || (tempc-1)->raw_type==RT_U8) && + !tempad && cc->token==TK_STR) + is_str=TRUE; + else + is_str=FALSE; + if (cc->flags&CCF_AOT_COMPILE && is_str) { + LexPopNoRestore(cc); + machine_code=LexExtStr(cc,&i); + if (pass==2) { + tempa=CAlloc(sizeof(CAOTAbsAddr)); + tempa->next=aotc->abss; + tempa->type=AAT_ADD_U64; + aotc->abss=tempa; + tempa->ip=data_addr_ip+dst-*_base; + *dst(I64 *)=aotc->ip; + for (j=0;jflags; + cc->flags=CCF_NO_ABSS | cc->flags & + ~(CCF_AOT_COMPILE|CCF_HAS_MISC_DATA|CCF_NOT_CONST); + machine_code=LexExpression2Bin(cc,&type); + if (old_flags&CCF_AOT_COMPILE && + cc->flags&CCF_NOT_CONST && + !Bt(&cc->opts,OPTf_GLBLS_ON_DATA_HEAP)) { + cc->flags=cc->flags&~CCF_NO_ABSS|CCF_AOT_COMPILE; + Free(machine_code); + if (pass==2) { + MemSet(dst,0,tempc->size); + LexPopRestore(cc); + Lex(cc); + COCPush(cc); + COCInit(cc); + ICAdd(cc,IC_ABS_ADDR,data_addr_ip,tempc+1); + ICAdd(cc,IC_IMM_I64,dst-*_base,tempc+1); + ICAdd(cc,IC_ADD,0,tempc+1); + if (!PrsExpression(cc,NULL,TRUE)) + throw('Compiler'); + tempi=cc->coc.coc_root.last; + if (tempi->ic_code==IC_END_EXP) { + tempi->ic_code=IC_NOP1; + tempi->ic_flags=0; + } + ICAdd(cc,IC_ASSIGN,0,tempc); + ICAdd(cc,IC_END_EXP,0,tempc,ICF_NO_DEPEND_RESULT); + ICAdd(cc,IC_RET,0,0); + if (machine_code=COCCompile(cc,&size,NULL,NULL)) { + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_MAIN; + tempie->ip=cc->aotc->ip; + QueIns(tempie,cc->aot->last_ie); + for (i=0;iflags & CCF_HAS_MISC_DATA)||pass==1) + Free(machine_code); + + if (type==RT_F64 && + tempc->raw_type!=RT_F64) + r=r(F64); + else if (type!=RT_F64 && + tempc->raw_type==RT_F64) + r(F64)=r; + MemCpy(dst,&r,tempc->size); + } + } + dst+=tempc->size; + cc->flags=cc->flags& + ~CCF_NO_ABSS|old_flags&(CCF_HAS_MISC_DATA|CCF_AOT_COMPILE); + } + *_dst=dst; +} + +class CVI2 +{ + CVI2 *next,*last; + U0 base; +}; + +U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc, + CArrayDim *tempad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass) +{ + I64 i,j,cnt; + U8 *st,*_b; + CVI2 root,*tempvi,*tempvi1; + CArrayDim *tempad1; + tempc=OptClassFwd(tempc); + if (tempad1=tempad->next) { + if (!tempc->ptr_stars_cnt && + (tempc->raw_type==RT_I8 || tempc->raw_type==RT_U8) && + cc->token==TK_STR) { + LexPopNoRestore(cc); + st=LexExtStr(cc,&i); + if (tempad1->cnt<0) {//[] + tempad1->cnt=i; + tempad->total_cnt=i*tempad1->total_cnt; + Free(*_base); + if (data_heap) + *_base=MAlloc(i); + else + *_base=MAlloc(i,Fs->code_heap); + MemCpy(*_base,st,i); + *_dst=*_base+i; + } else { + MemCpy(*_dst,st,tempad1->cnt); + *_dst+=tempad1->cnt; + } + Free(st); + LexPush(cc); + } else { + if (cc->token=='{') { + LexPopNoRestore(cc); + LexPush(cc); + Lex(cc); + } + if (tempad1->cnt<0) {//[] + QueInit(&root); + cnt=0; + while (cc->token!='}') { + tempvi=MAlloc(offset(CVI2.base)+tempad1->total_cnt*tempc->size); + _b=&tempvi->base; + PrsVarInit2(cc,&_b,tempc,tempad1,data_addr_ip,_base,data_heap,pass); + QueIns(tempvi,root.last); + if (cc->token==',') + Lex(cc); + cnt++; + } + Lex(cc); //skip '}' + tempad1->cnt=cnt; + tempad->total_cnt=cnt*tempad1->total_cnt; + j=tempad1->total_cnt*tempc->size; + i=cnt*j; + Free(*_base); + if (data_heap) + *_base=_b=MAlloc(i); + else + *_base=_b=MAlloc(i,Fs->code_heap); + tempvi=root.next; + while (tempvi!=&root) { + tempvi1=tempvi->next; + MemCpy(_b,&tempvi->base,j); + _b+=j; + Free(tempvi); + tempvi=tempvi1; + } + *_dst=_b; + } else { + for (i=0;icnt;i++) { + PrsVarInit2(cc,_dst,tempc,tempad1,data_addr_ip,_base,data_heap,pass); + if (tempad1->cnt>1 && cc->token==',') + Lex(cc); + } + if (cc->token=='}') + Lex(cc); + } + } + } else { + PrsVarInit(cc,_dst,tempc,tempad1,data_addr_ip,_base,data_heap,pass); + LexPush(cc); + } +} + +U0 PrsGlblInit(CCmpCtrl *cc,CHashGlblVar *tempg,I64 pass) +{ + U8 *dst=tempg->data_addr; + PrsVarInit2(cc,&dst,tempg->var_class,&tempg->dim, + tempg->data_addr_ip,&tempg->data_addr, + Bt(&cc->opts,OPTf_GLBLS_ON_DATA_HEAP)|| + Bt(&cc->flags,CCf_AOT_COMPILE),pass); +} + +U0 PrsStaticInit(CCmpCtrl *cc,CMemberLst *tempm,I64 pass) +{ + U8 *machine_code,*dst=tempm->static_data; + CHashClass *tempc=tempm->member_class; + I64 i,size; + CAOTImportExport *tempie; + + if (cc->flags&CCF_AOT_COMPILE && pass==2) { + COCPush(cc); + COCInit(cc); + } + PrsVarInit2(cc,&dst,tempc,&tempm->dim,tempm->static_data_ip, + &tempm->static_data,Bt(&cc->flags,CCf_AOT_COMPILE),pass); + if (cc->flags&CCF_AOT_COMPILE && pass==2) { + if (cc->coc.coc_root.next!=&cc->coc.coc_root) { + ICAdd(cc,IC_RET,0,0); + if (machine_code=COCCompile(cc,&size,NULL,NULL)) { + if (pass==2) { + tempie=CAlloc(sizeof(CAOTImportExport)); + tempie->type=IET_MAIN; + tempie->ip=cc->aotc->ip; + QueIns(tempie,cc->aot->last_ie); + for (i=0;inext!=0 for array + CArrayDim *tempad,*tempad1; + I64 j; + Bool result=TRUE; + dim->next=NULL; + dim->cnt=0; + dim->total_cnt=1; + tempad1=&dim->next; + while (cc->token=='[') { + if (Lex(cc)==']' && !dim->next) { + j=-1; + result=FALSE; + } else { + if ((j=LexExpressionI64(cc))<0) + LexExcept(cc,"Invalid array size at "); + } + tempad1=&dim->next; + while (tempad1->next) { + tempad1->next->total_cnt*=j; + tempad1=tempad1->next; + } + tempad=MAlloc(sizeof(CArrayDim)); + tempad1->next=tempad; + tempad1=tempad; + tempad->next=NULL; + tempad->cnt=j; + tempad->total_cnt=1; + dim->total_cnt*=j; + if (cc->token!=']') + LexExcept(cc,"missing ']' at "); + Lex(cc); + } + return result; +} + +CHashClass *PrsType(CCmpCtrl *cc,CHashClass **_tempc1, + I64 *_mode,CMemberLst *tempm,U8 **_ident,CHashFun **_fun_ptr, + CHashExport **_tempex,CArrayDim *tempad,I64 fsp_flags) +{ + I64 k,ptr_stars_cnt,mode=*_mode; + CHashClass *tempc1=*_tempc1,*tempc2; + CHashFun *fun_ptr=NULL; + CHashExport *tempex=NULL; + CArrayDim *tempad2; + + pt_start: + if (!tempc1 || !(tempc1->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) + LexExcept(cc,"invalid class at "); + + ptr_stars_cnt=0; + while (cc->token=='*') { + if (mode.u8[1]) { + LexPopNoRestore(cc); + LexPush(cc); + } + Lex(cc); + tempc1++; + if (++ptr_stars_cnt>MAX_PTR_STARS) + LexExcept(cc,"Too many *'s at "); + } + + k=PrsKeyWord(cc); + if (k==KW_UNION || k==KW_CLASS) { + Lex(cc); + tempc2=PrsClass(cc,k,fsp_flags,mode&255==PRS0_EXTERN); + tempc2->fwd_class=tempc1; + tempc1=tempc2; + if (_tempc1) *_tempc1=tempc1; + mode=PRS0_NULL|PRS1_NULL; + goto pt_start; + } + + if (cc->token=='(') { + if (Lex(cc)!='*') + LexExcept(cc,"expecting '*' at "); + ptr_stars_cnt=1; //fun_ptr + while (Lex(cc)=='*') + ptr_stars_cnt++; //fun_ptr + if (ptr_stars_cnt>MAX_PTR_STARS) + LexExcept(cc,"Too many *'s at "); + } else + ptr_stars_cnt=-1; //fun_ptr + + if (_ident) { + if (cc->token==TK_IDENT) { + tempex=cc->hash_entry; + *_ident=cc->cur_str; + cc->cur_str=NULL; + Lex(cc); + } else { + if (!mode.u8[1]) + *_ident=NULL; + else if (cc->token==',' || cc->token==';' || cc->token==')') { + tempex=NULL; + *_ident=StrNew("_anon_"); + tempm->flags|=MLF_NO_UNUSED_WARN; + } else + LexExcept(cc,"expecting identifier at "); + } + } + + if (ptr_stars_cnt>=0) { //fun_ptr + if (cc->token!=')') + LexExcept(cc,"missing ')' at "); + if (Lex(cc)!='(') + LexExcept(cc,"expecting '(' at "); + fun_ptr=PrsFunJoin(cc,tempc1,NULL,fsp_flags)+ptr_stars_cnt; + tempc1=cmp.internal_types[RT_PTR]+ptr_stars_cnt; + } + if (!PrsArrayDims(cc,tempad) && cc->token!='=') { + tempc1++; + tempad2=tempad->next->next; + Free(tempad->next); + tempad->next=tempad2; + } + + tempc2=OptClassFwd(tempc1); + if (tempc2->ptr_stars_cnt) { + tempc2-=tempc2->ptr_stars_cnt; + if (tempc2->type&HTT_INTERNAL_TYPE && !tempc2->size) + LexWarn(cc,"use \"U8 *\" instead of \"U0 *\" at "); + } + + if (_mode) *_mode=mode; + if (_fun_ptr) *_fun_ptr=fun_ptr; + if (_tempex) *_tempex=tempex; + return tempc1; +} + +U0 PrsDotDotDot(CCmpCtrl *cc,CHashFun *tempf,I64 _reg) +{ + CMemberLst *tempm; + CArrayDim *tempad; + + Bts(&tempf->flags,Ff_DOT_DOT_DOT); + + Lex(cc); + tempm=MemberLstNew(_reg); + tempm->flags=MLF_DOT_DOT_DOT; + tempm->member_class=cmp.internal_types[RT_I64]; + tempm->str=StrNew("argc"); + tempm->offset=tempf->size; + tempm->size=8; + tempf->size+=8; + MemberAdd(cc,tempm,tempf,PRS1B_FUN_ARG); + + tempm=MemberLstNew(_reg); + tempm->flags=MLF_DOT_DOT_DOT; + tempm->member_class=cmp.internal_types[RT_I64]; + tempm->str=StrNew("argv"); + tempm->dim.total_cnt=127; //arbitrary + tempm->dim.next=tempad=MAlloc(sizeof(CArrayDim)); + tempad->next=NULL; + tempad->cnt=127; //arbitrary + tempad->total_cnt=1; + tempm->offset=tempf->size; + tempm->size=8; //Close enough + tempf->size+=8;//Close enough + MemberAdd(cc,tempm,tempf,PRS1B_FUN_ARG); + + if (cc->token==')') + Lex(cc); +} + +U0 PrsVarLst(CCmpCtrl *cc,CHashClass *tempc,I64 mode,I64 union_base=0) +{ + I64 i,k,old_flags=cc->flags,old_flags2,type,_reg; + CHashClass *tempc1,*tempc2; + CHash *temph; + CMemberLst *tempm; + CMemberLstMeta *temp_meta; + U8 *machine_code; + Bool undef_array_size,first; + cc->flags|=CCF_DONT_MAKE_RESULT; + if (mode.u8[1]==PRS1B_CLASS) + cc->flags|=CCF_CLASS_IP; + if ((mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || + mode&PRSF_UNION) && (cc->token=='(' || cc->token=='{')) + Lex(cc); + while (TRUE) { + while (cc->token==';') + Lex(cc); + if (mode&PRSF_UNION) + cc->class_ip=union_base; + else + cc->class_ip=tempc->size; + while (cc->token=='$$') { + if (Lex(cc)!='=') //skip $$ + LexExcept(cc,"expecting '=' at "); + Lex(cc); //skip = + cc->class_ip=LexExpression(cc); + if (-cc->class_ip>tempc->neg_offset) + tempc->neg_offset=-cc->class_ip; + if (mode&PRSF_UNION) + union_base=cc->class_ip; + else + tempc->size=cc->class_ip; + if (cc->token!=';') + LexExcept(cc,"missing ';' at"); + Lex(cc); //skip ; + } + if (cc->token==')' || cc->token=='}') { + Lex(cc); + goto pvl_done; + } + _reg=REG_UNDEF; +pvl_restart1: + switch (PrsKeyWord(cc)) { + case KW_REG: + _reg=REG_ALLOC; + if (Lex(cc)==TK_IDENT) { + k=DefineMatch(cc->cur_str,"ST_U64_REGS"); + if (k>=0) { + _reg=k; + Lex(cc); + } + } + goto pvl_restart1; + case KW_NOREG: + _reg=REG_NONE; + Lex(cc); + goto pvl_restart1; + } + + if (cc->token==TK_DOT_DOT_DOT && mode.u8[1]==PRS1B_FUN_ARG) { + PrsDotDotDot(cc,tempc,_reg); + goto pvl_done; + } + if (cc->token==TK_IDENT) + temph=cc->hash_entry; + else + temph=NULL; + if (!temph) + LexExcept(cc,"expecting type at "); + k=PrsKeyWord(cc); + if (k==KW_UNION) { + Lex(cc); + PrsVarLst(cc,tempc,mode|PRSF_UNION,tempc->size); + } else { + if (!(temph->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) + LexExcept(cc,"expecting type at "); + first=TRUE; +pvl_restart2: + tempc1=temph; + LexPush(cc); + Lex(cc); //skip type or ',' + tempm=MemberLstNew(_reg); + _reg=REG_UNDEF; + if (mode.u8[1]==PRS1B_STATIC_LOCAL_VAR) { + tempm->flags|=MLF_STATIC; + tempm->reg=REG_NONE; + } + if (mode.u8[1]==PRS1B_FUN_ARG || mode.u8[1]==PRS1B_LOCAL_VAR) { +pvl_restart3: + switch (PrsKeyWord(cc)) { + case KW_REG: + tempm->reg=REG_ALLOC; + LexPopNoRestore(cc); + LexPush(cc); + if (Lex(cc)==TK_IDENT) { + k=DefineMatch(cc->cur_str,"ST_U64_REGS"); + if (k>=0) { + tempm->reg=k; + LexPopNoRestore(cc); + LexPush(cc); + Lex(cc); + } + } + goto pvl_restart3; + case KW_NOREG: + tempm->reg=REG_NONE; + LexPopNoRestore(cc); + LexPush(cc); + Lex(cc); + goto pvl_restart3; + } + } + tempm->member_class=PrsType(cc,&tempc1,&mode,tempm,&tempm->str, + &tempm->fun_ptr,NULL,&tempm->dim,0); + if (tempm->fun_ptr) + tempm->flags|=MLF_FUN; + if (first) + MemberAdd(cc,tempm,tempc,mode.u8[1]); + else + MemberAdd(cc,tempm,tempc,PRS1B_NULL); + tempc->member_cnt++; + + tempc2=tempm->member_class; + i=tempc2->size*tempm->dim.total_cnt; + switch (mode.u8[1]) { + case PRS1B_STATIC_LOCAL_VAR: + if (i<0) { + i=0; + undef_array_size=TRUE; + } else + undef_array_size=FALSE; + if (mode&PRSF_UNION) + LexExcept(cc,"Static unions are not implemented "); + k=(i+7)&~7; + if (cc->flags&CCF_AOT_COMPILE) + tempm->static_data=MAlloc(k); + else + tempm->static_data=MAlloc(k,Fs->code_heap); + if (cc->flags&CCF_AOT_COMPILE) { + tempm->static_data_ip=cc->aotc->ip; + k>>=3; + if (sys_var_init_flag&1) { + k<<=3; + while (k--) + AOTStoreCodeU8(cc,sys_var_init_val); + } else + while (k--) + AOTStoreCodeU64(cc,0); + } else + if (sys_var_init_flag&1) + MemSet(tempm->static_data,sys_var_init_val,k); + LexPopNoRestore(cc); + if (cc->token=='=') { + cc->flags=cc->flags& + ~CCF_DONT_MAKE_RESULT|old_flags&CCF_DONT_MAKE_RESULT; + if (undef_array_size) { + LexPush(cc); + LexPush(cc); + Lex(cc); //skip = + PrsStaticInit(cc,tempm,1); + LexPopNoRestore(cc); + i=tempc2->size*tempm->dim.total_cnt; + k=(i+7)&~7; + if (cc->flags&CCF_AOT_COMPILE) { + k>>=3; + if (sys_var_init_flag&1) { + k<<=3; + while (k--) + AOTStoreCodeU8(cc,sys_var_init_val); + } else + while (k--) + AOTStoreCodeU64(cc,0); + } else + if (sys_var_init_flag&1) + MemSet(tempm->static_data,sys_var_init_val,k); + LexPopRestore(cc); + } + LexPush(cc); + Lex(cc); //skip = + PrsStaticInit(cc,tempm,2); + LexPopNoRestore(cc); + if (cc->flags&CCF_AOT_COMPILE) + for (k=0;kstatic_data_ip+k, + tempm->static_data[k]); + tempm->use_cnt=0; + cc->flags|=CCF_DONT_MAKE_RESULT; + } + if (cc->flags&CCF_AOT_COMPILE) + Free(tempm->static_data); + break; + case PRS1B_LOCAL_VAR: + if (mode&PRSF_UNION) { + if (union_base-tempc->sizesize; + else + i=0; + } + if (i>=8) + tempc->size=(tempc->size-i)&~7; + else if (i>=4) + tempc->size=(tempc->size-i)&~3; + else if (i>=2) + tempc->size=(tempc->size-i)&~1; + else + tempc->size-=i; + tempm->offset=tempc->size; + tempm->size=i; + if (cc->token=='=') { + cc->flags=cc->flags&~CCF_DONT_MAKE_RESULT| + old_flags&CCF_DONT_MAKE_RESULT; + LexPopRestore(cc); + Lex(cc); + if (!PrsExpression(cc,NULL,TRUE)) + throw('Compiler'); + tempm->use_cnt=0; + cc->flags|=CCF_DONT_MAKE_RESULT; + } else + LexPopNoRestore(cc); + break; + case PRS1B_FUN_ARG: + if (mode&PRSF_UNION) { + tempm->offset=union_base; + if (tempc->size-union_base<8) + tempc->size=8+union_base; + } else { + tempm->offset=tempc->size; + tempc->size+=8; + } + tempm->size=8; + if (cc->token=='=') { + Lex(cc); + if (PrsKeyWord(cc)==KW_LASTCLASS) { + tempm->flags|=MLF_LASTCLASS; + Lex(cc); + } else { + old_flags2=cc->flags; + cc->flags&=~CCF_HAS_MISC_DATA; + machine_code=LexExpression2Bin(cc,&type); + if (!machine_code) + throw('Compiler'); + tempm->dft_val=Call(machine_code); + tempc2=OptClassFwd(tempc2); + if (tempc2->raw_type==RT_F64) { + if (type!=RT_F64) + tempm->dft_val(F64)=tempm->dft_val; + } else { + if (type==RT_F64) + tempm->dft_val=tempm->dft_val(F64); + } + if (cc->flags & CCF_HAS_MISC_DATA) { + tempm->dft_val=StrNew(tempm->dft_val); + tempm->flags|=MLF_STR_DFT_AVAILABLE; + } + Free(machine_code); + cc->flags|=old_flags2&CCF_HAS_MISC_DATA; + } + tempm->flags|=MLF_DFT_AVAILABLE; + } + LexPopNoRestore(cc); + break; + case PRS1B_CLASS: + if (mode&PRSF_UNION) { + tempm->offset=union_base; + if (tempc->size-union_basesize=i+union_base; + } else { + tempm->offset=tempc->size; + tempc->size+=i; + } + tempm->size=i; + while (cc->token==TK_IDENT) { + temp_meta=MAlloc(sizeof(CMemberLstMeta)); + temp_meta->next=tempm->meta; + tempm->meta=temp_meta; + temp_meta->str=cc->cur_str; + temp_meta->flags=0; + cc->cur_str=NULL; + if (Lex(cc)==TK_STR) { + temp_meta->user_data=LexExtStr(cc); + temp_meta->flags|=MLMF_IS_STR; + } else + temp_meta->user_data=LexExpression(cc); + } + LexPopNoRestore(cc); + break; + } + switch (cc->token) { + case ',': + if (mode.u8[1]==PRS1B_FUN_ARG && !(mode&PRSF_UNION)) + Lex(cc); + else { + first=FALSE; + goto pvl_restart2; + } + break; + case ')': + case '}': + Lex(cc); + goto pvl_done; + case ';': + cc->flags=cc->flags&~CCF_DONT_MAKE_RESULT| + old_flags&CCF_DONT_MAKE_RESULT; + Lex(cc); + cc->flags|=CCF_DONT_MAKE_RESULT; + if ((mode.u8[1]==PRS1B_LOCAL_VAR||mode.u8[1]== + PRS1B_STATIC_LOCAL_VAR) && !(mode&PRSF_UNION)) + goto pvl_done; + break; + default: + LexExcept(cc,"missing ';' at"); + } + } + } +pvl_done: + cc->flags=cc->flags&~(CCF_CLASS_IP|CCF_DONT_MAKE_RESULT)| + old_flags& (CCF_CLASS_IP|CCF_DONT_MAKE_RESULT); +} diff --git a/Compiler/Templates.CPP b/Compiler/Templates.CPP index 0789980..c7209fd 100644 --- a/Compiler/Templates.CPP +++ b/Compiler/Templates.CPP @@ -1,5 +1,4 @@ asm { -USE64 //************************************ CMP_TEMPLATES:: DU32 @@05,@@10,@@15,@@25,@@30, diff --git a/Compiler/UAsm.CPP b/Compiler/UAsm.CPP index 94d8261..cf2f5a6 100644 --- a/Compiler/UAsm.CPP +++ b/Compiler/UAsm.CPP @@ -22,12 +22,12 @@ I64 InstEntriesCompare(CInstruction *tempi1,CInstruction *tempi2) i2=tempi2->opcode[j]>>3&7; else i2=tempi2->slash_val; - if (result=i1-i2) return result; + if (result=i1-i2) return result; if (tempi1->flags&IEF_STI && tempi2->flags&IEF_STI) { i1=tempi1->opcode[j]&7; i2=tempi2->opcode[j]&7; - if (result=i1-i2) return result; + if (result=i1-i2) return result; } if (tempi1->flags&IEF_STI) @@ -38,15 +38,17 @@ I64 InstEntriesCompare(CInstruction *tempi1,CInstruction *tempi2) i1=tempi1->flags & IEF_OP_SIZE32; i2=tempi2->flags & IEF_OP_SIZE32; - if (result=i1-i2) return result; + if (result=i1-i2) return result; - i1=Bt(&uasm.ins64_mask,tempi1->arg1) || Bt(&uasm.ins64_mask,tempi1->arg2); - i2=Bt(&uasm.ins64_mask,tempi2->arg1) || Bt(&uasm.ins64_mask,tempi2->arg2); - if (result=i1-i2) return result; + i1=Bt(&uasm.ins64_arg_mask,tempi1->arg1) || + Bt(&uasm.ins64_arg_mask,tempi1->arg2); + i2=Bt(&uasm.ins64_arg_mask,tempi2->arg1) || + Bt(&uasm.ins64_arg_mask,tempi2->arg2); + if (result=i1-i2) return result; i1=tempi1->flags & IEF_48_REX; i2=tempi2->flags & IEF_48_REX; - if (result=i1-i2) return result; + if (result=i1-i2) return result; i1=tempi1->arg2==ARGT_IMM64 || tempi1->arg2==ARGT_UIMM64; i2=tempi2->arg2==ARGT_IMM64 || tempi2->arg2==ARGT_UIMM64; @@ -56,29 +58,41 @@ I64 InstEntriesCompare(CInstruction *tempi1,CInstruction *tempi2) } /* -U0 DumpUasmIns(CInstruction *tempi) +U0 DumpUAsmIns(CInstruction *tempi) { - CHashOpcode *tempo=tempi(U8 *)-tempi->ins_entry_num*sizeof(CInstruction)-offset(CHashOpcode.ins); - "%10s:%02d,%02d SV:%02d\n",tempo->str,tempi->arg1,tempi->arg2,tempi->slash_val; + CHashOpcode *tempo=tempi(U8 *)-tempi->ins_entry_num*sizeof(CInstruction) + -offset(CHashOpcode.ins); + "%10s:%02d,%02d SV:%02d\n",tempo->str, + tempi->arg1,tempi->arg2,tempi->slash_val; } -U0 DumpUasmTable() +U0 DumpUAsmTables() { I64 k; - for (k=0;k>1; //binary search - tempi=uasm.table[k]; -//DumpUasmIns(tempi); + tempi=table[k]; +//DumpUAsmIns(tempi); m=0; n=0; while (TRUE) { @@ -101,8 +115,8 @@ CInstruction *InstEntryFind(U8 *ip,I64 opsize) sv=tempi->slash_val; if (sv<8) { if (!(m=ip[n]>>3&7-sv)) { - if ((Bt(&uasm.mem_mask,a1) || Bt(&uasm.mem_mask,a2)) && - ip[n]&0xC0==0xC0) { + if ((Bt(&uasm.mem_arg_mask,a1) || Bt(&uasm.mem_arg_mask,a2)) && + ip[n]&0xC0==0xC0) { m=1; break; } else if (tempi->flags&IEF_STI) { @@ -125,11 +139,13 @@ CInstruction *InstEntryFind(U8 *ip,I64 opsize) break; } } - if (opsize==64||a1==ARGT_M64||a2==ARGT_M64||tempi->flags&IEF_NO_REX) { - if (!Bt(&uasm.ins64_mask,a1) && !Bt(&uasm.ins64_mask,a2) && !(tempi->flags&IEF_48_REX)) + if (opsize==64||a1==ARGT_M64||a2==ARGT_M64) { + if (!Bt(&uasm.ins64_arg_mask,a1)&& !Bt(&uasm.ins64_arg_mask,a2) && + !(tempi->flags&IEF_48_REX)) m=1; } else { - if (Bt(&uasm.ins64_mask,a1) || Bt(&uasm.ins64_mask,a2) || tempi->flags&IEF_48_REX) + if (Bt(&uasm.ins64_arg_mask,a1) || Bt(&uasm.ins64_arg_mask,a2) || + tempi->flags&IEF_48_REX) m=-1; } } @@ -147,18 +163,20 @@ CInstruction *InstEntryFind(U8 *ip,I64 opsize) } } if (opsize==64 || a1==ARGT_M64 || a2==ARGT_M64) { - if (!Bt(&uasm.ins64_mask,a1) && !Bt(&uasm.ins64_mask,a2) && !(tempi->flags&IEF_48_REX)&& - !(a2==ARGT_NO && - (ARGT_UIMM8<=a1<=ARGT_UIMM64 || - ARGT_IMM8<=a1<=ARGT_IMM64 ) )) + if (!Bt(&uasm.ins64_arg_mask,a1) && !Bt(&uasm.ins64_arg_mask,a2) && + !(tempi->flags&IEF_48_REX)&& + !(a2==ARGT_NO && + (ARGT_UIMM8<=a1<=ARGT_UIMM64 || + ARGT_IMM8<=a1<=ARGT_IMM64 ) )) m=1; else if (tempi->arg2==ARGT_IMM64 || tempi->arg2==ARGT_UIMM64) { if (a2!=ARGT_IMM64&&a2!=ARGT_UIMM64) m=1; } else if (a2==ARGT_IMM64||a2==ARGT_UIMM64) - m=-1; + m=-1; } else { - if (Bt(&uasm.ins64_mask,a1) || Bt(&uasm.ins64_mask,a2) || tempi->flags&IEF_48_REX) + if (Bt(&uasm.ins64_arg_mask,a1) || Bt(&uasm.ins64_arg_mask,a2) || + tempi->flags&IEF_48_REX) m=-1; } } @@ -181,41 +199,30 @@ CInstruction *InstEntryFind(U8 *ip,I64 opsize) } else break; } - return uasm.table[k]; + return table[k]; } -U0 UasmHashLoad() +U0 UAsmHashLoad() { CHashOpcode *temph; CInstruction *tempi; - I64 i,j,k,cnt=0; + I64 i,j1,j2,k; - uasm.table=NULL; - uasm.table_entries=0; - uasm.ins64_mask=0x0880888880+1<mask;i++) { - temph=cmp.asm_hash->body[i]; - while (temph) { - if (temph->type==HTT_OPCODE) - cnt+=temph->instruction_entry_cnt; - temph=temph->next; - } - } - uasm.table_entries=cnt; - - j=0; - uasm.table=MAlloc(cnt*sizeof(U8 *)); + uasm.table_16_32_entries=uasm.table_64_entries=0; for (i=0;i<=cmp.asm_hash->mask;i++) { temph=cmp.asm_hash->body[i]; while (temph) { if (temph->type==HTT_OPCODE) { tempi=&temph->ins; for (k=0;kinstruction_entry_cnt;k++) { - uasm.table[j++]=tempi; + uasm.table_16_32_entries++; + if (!(tempi->flags&IEF_NOT_IN_64_BIT)) + uasm.table_64_entries++; tempi++; } } @@ -223,20 +230,26 @@ U0 UasmHashLoad() } } - QSortI64(uasm.table,cnt,&InstEntriesCompare); -} - -I64 StrMatchBits(U8 *st) -{ - if (StrMatch("8",st)) - return 8; - if (StrMatch("16",st)) - return 16; - if (StrMatch("32",st)) - return 32; - if (StrMatch("64",st)) - return 64; - return 0; + j1=j2=0; + uasm.table_16_32=MAlloc(uasm.table_16_32_entries*sizeof(U8 *)); + uasm.table_64 =MAlloc(uasm.table_64_entries *sizeof(U8 *)); + for (i=0;i<=cmp.asm_hash->mask;i++) { + temph=cmp.asm_hash->body[i]; + while (temph) { + if (temph->type==HTT_OPCODE) { + tempi=&temph->ins; + for (k=0;kinstruction_entry_cnt;k++) { + uasm.table_16_32[j1++]=tempi; + if (!(tempi->flags&IEF_NOT_IN_64_BIT)) + uasm.table_64[j2++]=tempi; + tempi++; + } + } + temph=temph->next; + } + } + QSortI64(uasm.table_16_32,uasm.table_16_32_entries,&InstEntriesCompare); + QSortI64(uasm.table_64 ,uasm.table_64_entries ,&InstEntriesCompare); } U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) @@ -249,7 +262,8 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) Bool cont; CInstruction *tempi,*tempi2; CHashOpcode *tempo; - U8 *ip=*_ip,*ptr,*reloced_a1_st,*reloced_a2_st,*bin_data_area1,*bin_data_area2, + U8 *ip=*_ip,*ptr,*reloced_a1_st,*reloced_a2_st, + *bin_data_area1,*bin_data_area2, line1[512],line2[512],buf2[512],a1_st[512],a2_st[512],seg_overrides[32]; if (_jmp_dst) *_jmp_dst=-1; @@ -283,14 +297,20 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) *seg_overrides=0; cont=TRUE; - do { - switch (*ip++) { - case 0x2E: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"CS:"); break; - case 0x36: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"SS:"); break; - case 0x3E: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"DS:"); break; - case 0x26: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"ES:"); break; - case 0x64: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"FS:"); break; - case 0x65: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"GS:"); break; + while (TRUE) { + switch (*ip) { + case 0x2E: if (StrLen(seg_overrides)<24) + CatPrint(seg_overrides,"CS:"); break; + case 0x36: if (StrLen(seg_overrides)<24) + CatPrint(seg_overrides,"SS:"); break; + case 0x3E: if (StrLen(seg_overrides)<24) + CatPrint(seg_overrides,"DS:"); break; + case 0x26: if (StrLen(seg_overrides)<24) + CatPrint(seg_overrides,"ES:"); break; + case 0x64: if (StrLen(seg_overrides)<24) + CatPrint(seg_overrides,"FS:"); break; + case 0x65: if (StrLen(seg_overrides)<24) + CatPrint(seg_overrides,"GS:"); break; case OC_OP_SIZE_PREFIX: if (opsize==16) opsize=32; @@ -303,25 +323,28 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) else opadd=16; break; - sub_switch_start: - case 0x48...0x4F: - opsize=64; - case 0x40...0x47: - sub_switch_end: - REX=*(ip-1); - REX_b=Bt(&REX,0)<<3; - REX_x=Bt(&REX,1)<<3; - REX_r=Bt(&REX,2)<<3; - break; + case 0x40...0x4F: + if (seg_size==64) { + REX=*ip; + if (REX>=0x48) + opsize=64; + REX_b=Bt(&REX,0)<<3; + REX_x=Bt(&REX,1)<<3; + REX_r=Bt(&REX,2)<<3; + break; + } //Fall thru if !64 default: cont=FALSE; } - } while (cont); - ip--; + if (cont) + ip++; + else + break; + } - tempi=InstEntryFind(ip,opsize); + tempi=InstEntryFind(ip,opsize,seg_size); if (opsize==32 && seg_size==64) { - tempi2=InstEntryFind(ip,64); + tempi2=InstEntryFind(ip,64,seg_size); if (tempi2!=tempi && tempi2->flags&IEF_REX_ONLY_R8_R15 || tempi2->flags&IEF_REX_XOR_LIKE&& ip[1]>>3&7==ip[1]&7) @@ -329,7 +352,8 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) } ip+=tempi->opcode_cnt; - tempo=tempi(U8 *)-tempi->ins_entry_num*sizeof(CInstruction)-offset(CHashOpcode.ins); + tempo=tempi(U8 *)-tempi->ins_entry_num*sizeof(CInstruction) + -offset(CHashOpcode.ins); if (just_ins) *line1=0; CatPrint(line1,tempo->str); @@ -337,14 +361,14 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) a1=tempi->arg1; a2=tempi->arg2; - if (a1_size=StrMatchBits(DefineSub(a1,"ST_ARG_TYPES"))) { + if (a1_size=tempi->size1) { if (Bt(&uasm.signed_arg_mask,a1)) CatPrint(a1_st,"I%d ",a1_size); else CatPrint(a1_st,"U%d ",a1_size); } - if (a2_size=StrMatchBits(DefineSub(a2,"ST_ARG_TYPES"))) { + if (a2_size=tempi->size2) { if (Bt(&uasm.signed_arg_mask,a2)) CatPrint(a2_st,"I%d ",a2_size); else @@ -571,7 +595,8 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) break; case ARGT_STI: ip--; - CatPrint(a1_st,"%Z",*ip++ - tempi->opcode[tempi->opcode_cnt-1],"ST_FSTK_REGS"); + CatPrint(a1_st,"%Z",*ip++ - tempi->opcode[tempi->opcode_cnt-1], + "ST_FSTK_REGS"); break; } @@ -609,7 +634,8 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) break; case ARGT_STI: ip--; - CatPrint(a2_st,"%Z",*ip++ - tempi->opcode[tempi->opcode_cnt-1],"ST_FSTK_REGS"); + CatPrint(a2_st,"%Z",*ip++ -tempi->opcode[tempi->opcode_cnt-1], + "ST_FSTK_REGS"); break; } if (tempi->flags&IEF_ENDING_ZERO) diff --git a/Demo/AcctExample/AdamKeyPlugIns.CPP b/Demo/AcctExample/AdamKeyPlugIns.CPP index ec3dd93..c9c12a4 100644 --- a/Demo/AcctExample/AdamKeyPlugIns.CPP +++ b/Demo/AcctExample/AdamKeyPlugIns.CPP @@ -22,7 +22,7 @@ U0 InsDirLinks() U8 *st=PopUpPickDir,*st2; st[0]=':'; //This is my personal code, not production. LOL st2=MStrPrint("%s/*",st); - tempde=tempde1=FilesFind(st2,FUF_JUST_FILES|FUF_JUST_TXT); + tempde=tempde1=FilesFind(st2,FUF_JUST_FILES); while (tempde) { tempde->full_name[0]=':'; "$$LK,\"%s\",A=\"FI:%s\"$$\n",tempde->full_name+2,tempde->full_name; @@ -36,23 +36,23 @@ U0 InsDirLinks() Bool MyPutKey(I64 ch,I64 sc) {//ch=ASCII; sc=scan_code -//See $LK,"Char",A="HI:Char"$ for definition of scan codes. -//See $LK,"Key Allocations",A="FI:::/Doc/KeyAlloc.TXT"$. -//See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. + //See $LK,"Char",A="HI:Char"$ for definition of scan codes. + //See $LK,"Key Allocations",A="FI:::/Doc/KeyAlloc.TXT"$. + //See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. -//You can customize keys. This routine -//is called before the main editor -//key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). -//You can intercept any key. + //You can customize keys. This routine + //is called before the main editor + //key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). + //You can intercept any key. -//Return TRUE if you completely -//handled the key. + //Return TRUE if you completely + //handled the key. I64 i,sc2=sc.u8[0]; U8 *st1,*st2; if (SC_F1<=sc2<=SC_F10 && - sc&SCF_ALT && - !(sc & SCF_CTRL)) { + sc&SCF_ALT && + !(sc & SCF_CTRL)) { switch (sc2) { case SC_F1: if (sc&SCF_KEY_DESC) { @@ -123,12 +123,21 @@ Bool MyPutKey(I64 ch,I64 sc) if (sc&SCF_KEY_DESC) { if (sc & SCF_SHIFT) KeyDescSet("God Book Passage"); + else + KeyDescSet("God Doodle File"); } else { - //$LK,"::/Adam/God/HSNotes.TXT"$ - FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); - if (sc & SCF_SHIFT) +//$LK,"::/Adam/God/HSNotes.TXT"$ + if (sc & SCF_SHIFT) { + FifoU8Flush(god.fifo); + GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); GodBooksPassage("C:/Home/Wb2/Files/Text/*"); + } else { + st1=PopUpPickFile; + st2=FileRead(st1); + GodDoodle(st2); + Free(st2); + Free(st1); + } } break; case SC_F8: @@ -203,7 +212,7 @@ Bool MyPutKey(I64 ch,I64 sc) DocPrint(sys_clipboard_doc,"$$LK,\"BF:%s\"$$",st1); } else DocPrint(sys_clipboard_doc,"$$LK,\"FL:%s,%d\"$$", - st2,DocPut->cur_entry->y+1); + st2,DocPut->cur_entry->y+1); Free(st1); Free(st2); } @@ -215,12 +224,12 @@ Bool MyPutKey(I64 ch,I64 sc) i=RandU32; ClipboardDel; DocPrint(sys_clipboard_doc,"$$LK,\"\",A=\"FA:%s,ANC%d\"$$", - DocPut->filename.name,i); + DocPut->filename.name,i); "$$AN,\"\",A=\"ANC%d\"$$",i; } return TRUE; -//Ins your own ALT-key plug-ins + //Ins your own ALT-key plug-ins case 'b': if (sc&SCF_KEY_DESC) KeyDescSet("Cmd/Jump to Bad Code"); diff --git a/Demo/AcctExample/AdamLocalize.CPP b/Demo/AcctExample/AdamLocalize.CPP index 7a5f969..82d7ab7 100644 --- a/Demo/AcctExample/AdamLocalize.CPP +++ b/Demo/AcctExample/AdamLocalize.CPP @@ -7,7 +7,8 @@ OptOn(OPTf_WARN_DUP_TYPES); KbdTypeMatic(0); // Las Vegas is -7 during summer, -8 during winter -local_time_offset=-8*60*60*CDATE_FREQ; //Pacific +local_time_offset=-7*60*60*CDATE_FREQ; //Pacific +// Remember you can set the time in the BIOS. //$AN,"",A="mouse_move_scale"$adjust these to set mouse move scale mouse.scale.x=0.5; diff --git a/Demo/AcctExample/AdamPkgs.CPP b/Demo/AcctExample/AdamPkgs.CPP index 53d201e..00a6003 100644 --- a/Demo/AcctExample/AdamPkgs.CPP +++ b/Demo/AcctExample/AdamPkgs.CPP @@ -5,6 +5,7 @@ #include "::/Apps/Psalmody/Load" #include "::/Demo/WebLogExample/WebLogRep" Cd("::/Home");; +#include "::/Misc/ToDolDoc" #include "::/Home/TOSIDComputer" #include "::/Home/TOSCfg" #include "::/Home/TOSMisc" diff --git a/Demo/AcctExample/AdamSys.CPP b/Demo/AcctExample/AdamSys.CPP index b6f1e76..0822f16 100644 --- a/Demo/AcctExample/AdamSys.CPP +++ b/Demo/AcctExample/AdamSys.CPP @@ -15,7 +15,7 @@ U0 UserStartUp() "$$PURPLE$$DFT$$FG$$:"; break; } - "$TX,"79,905",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:"; + "$TX,"80,729",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:"; CPURep; } diff --git a/Demo/AcctExample/PersonalMenu.TXT b/Demo/AcctExample/PersonalMenu.TXT index 9b15842..b96c4b9 100644 Binary files a/Demo/AcctExample/PersonalMenu.TXT and b/Demo/AcctExample/PersonalMenu.TXT differ diff --git a/Demo/AcctExample/PersonalNotes.TXT b/Demo/AcctExample/PersonalNotes.TXT index 122eaa3..0155020 100644 --- a/Demo/AcctExample/PersonalNotes.TXT +++ b/Demo/AcctExample/PersonalNotes.TXT @@ -15,12 +15,7 @@ $WW,1$* Clean-up $LK,"FileNameAbs",A="MN:FileNameAbs"$(). * 1/?/2015 Macro select in Menu did not go to shell. -* Real World User Issues: - QEMU runs maximized, but slow. - If you move cursor off of bottom, macros don't work. - Stutters in QEMU doing sound. - -* $LK,"BMPRLE4To",A="MN:BMPRLE4To"$() has files_size too big by 108. +* $LK,"BMPRLE4To",A="MN:BMPRLE4To"$() has files_size too big by 108. Did I fix it? * Why is nontimer $LK,"Rand",A="MN:Rand"$() so bad? @@ -28,22 +23,26 @@ $WW,1$* Clean-up $LK,"FileNameAbs",A="MN:FileNameAbs"$(). * More $LK,"CCtrl",A="MN:CCtrl"$. +* Add Redo to editor. + +* PSect does not scan all task tables. + +* No Compiler Warning: dc->palette48.r =palette24[i].r<<8; + +* I think subswitch_start with a break in the preface fails. + +* Add editor select just visible text for with filter. + * Add change-triangle-color to mesh editor. * Add AVL binary tree support or red/black whatever that is. We have fixed-size stack. Auto-balancing binary tree is very needed. Where could we use? * Maybe let committee decide if we want intern to make binary tree look-up using PSECT symbol addresses, so we can eliminate psect cache and wall-paper kludge. All HolyC functions and glbl vars would have left-right for address search. -* QEMU $LK,"tS",A="MN:tS"$ real-time-clock, slow Wenceslas. - -* Is "GrSetSymmetry" or "GrSymmetry" better? - * DCF_TRANSFORMATION|DCF_SYMMETRY|DCF_JUST_MIRROR -- maybe not both needed at once. * DiskCache during FileRead. CTRL-ALT-C, $LK,"Kill",A="MN:Kill"$(). -* Help Index no mention of Symmetry in $LK,"GrLine",A="MN:GrLine"$() $LK,"GrLine3",A="MN:GrLine3"$(). - * Get rid of BYTE WORD DWORD in opcode and replace with U8 U16 U32. * 5/7/14:Something like AFSetIP.CPP caused hang, then reboot in TestSuite. @@ -57,6 +56,10 @@ $WW,1$* Clean-up $LK,"FileNameAbs",A="MN:FileNameAbs"$(). * FlatTop is torpedo, not bombs. * BomberGolf is weird concept? +* Maybe, 3x3 instead of 4x4 matrices. + +* Get rid of text background color. + * Make a game, S.E.T.I., with radio telescope array. Put God on air. * $LK,"Diff",A="MN:Diff"$() flags. @@ -65,6 +68,8 @@ $WW,1$* Clean-up $LK,"FileNameAbs",A="MN:FileNameAbs"$(). * MOV U8 [RSP+RCX],DL +* UAsm negative byte displacement, neg 32-bit disp. + * Might want HeapLog x Cnt * Find-and-replace text on $$PT$$ line before it. @@ -83,7 +88,7 @@ $WW,1$* Clean-up $LK,"FileNameAbs",A="MN:FileNameAbs"$(). * Might want to move kernel code out of low 2Meg. Might be faster. -* F2 Macro on TestSuite +* Add F2 Macro on TestSuite * 4/13/14 Strut or RawHide crashed when sys_var_init_flag etc was set during testsuite. @@ -103,9 +108,6 @@ Looks like task_flags,locked_flags cause problems with neg offset. --------------------- * 3/19/14: RESET during RawHide -* 2013? Wenceslas in TestSuite crashes, long time ago - -* 12/26/13: Mountain in TestSuite didn't run right. Turned yellow, did nothing. * FAQ frontloaded @@ -124,13 +126,12 @@ COMPILER * ATA/ATAPI ID in VMware, when not booted to CD? I forgot. -* I use fixed-point in $LK,"Circle",A="MN:Circle"$(), $LK,"Ellipse",A="MN:Ellipse"$(), $LK,"GrRot",A="MN:GrRot"$(), $LK,"GrMulMat",A="MN:GrMulMat"$() and others. +* I use fixed-point in $LK,"Circle",A="MN:Circle"$(), $LK,"Ellipse",A="MN:Ellipse"$(), $LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$(), $LK,"Mat4x4MulMat4x4New",A="MN:Mat4x4MulMat4x4New"$() and others. God says I might want to change to float. $LK,"::/Demo/Lectures/FixedPoint.CPP"$. $LK,"::/Demo/Lectures/FixedPointAdvanced.CPP"$. * DOCF_DBL_DOLLARS in reindention -* # in reindention * HexEdit with odd size, ASCII cannot be edited. @@ -260,7 +261,7 @@ registry-like routines... or registry I guess. * New Editor widgets -* Make use of flag potential in SysFilesFind and possibly CFileAccess +* Make use of flag potential in $LK,"FilesFind",A="MN:FilesFind"$() and possibly $LK,"DirContextNew",A="MN:DirContextNew"$() * implement fixed pos files * new HolyC language features @@ -271,7 +272,7 @@ registry-like routines... or registry I guess. * Move stuff out of Kernel module. * $LK,"ROP_XOR",A="MN:ROP_XOR"$ with pen_width>1 is broken. -* RGB wrong in BMP files. +* BGR wrong in BMP files. * use width and height in line clipping for pen_width>1 or blot. * SIMD transformation @@ -287,7 +288,7 @@ registry-like routines... or registry I guess. * support r4u8 by adding 0x40 byte * static var off of data heap. * Might want to use U32*U32 multiplication. -* could add "const" to not set LF_NOT_CONST flag for trig, etc. +* could add "const" to not set CCF_NOT_CONST flag for trig, etc. * do r,rm ICCmp like ICBrCmp * could make glblvar imports use TY_RIP_DISP32. * PUSH_CMP allocs reg R9 or whatever @@ -296,7 +297,7 @@ assignments. Is ShiftNoPush fully implemented? * NOP1 might need to have diff ic_data's * in divequal, it assumes about ebx * error/warning line nums -* ASM branch out warning of range off by 1 line--use lx->last_line_num +* ASM branch out warning of range off by 1 line--use cc->last_line_num * Switch statement with sparse cases (low priority) * maybe inline functions? @@ -310,76 +311,43 @@ assignments. Is ShiftNoPush fully implemented? * sort options for findfiles * Maybe, get rid of $LK,"0x20000",A="FF:::/Compiler/CMain.CPP,0x20000"$ in compiler. +It is love I desire: $LK,"Hosea,6:6",A="BF:Hosea,6:6"$ $TX,"Hosea 6:6",HTML="http://www.biblegateway.com/verse/en/Hosea%206:6"$ -$LK,"Hosea,6:6",A="BF:Hosea,6:6"$ +Offer a sacrifice of praise: $LK,"Hebrews,13:15",A="BF:Hebrews,13:15"$ $TX,"Hebrews 13:15",HTML="http://www.biblegateway.com/verse/en/Hebrews%2013:15"$ -$LK,"Hebrews,13:15",A="BF:Hebrews,13:15"$ - -$LK,"Psalms,50:14",A="BF:Psalms,50:14"$ +Do I drink blood of goats? Offer praise: $LK,"Psalms,50:14",A="BF:Psalms,50:14"$ $TX,"Psalms 50:14",HTML="http://www.biblegateway.com/verse/en/Psalms%2050:14"$ +Runner's Stride: $LK,"Psalms,147:10",A="BF:Psalms,147:10"$ $TX,"Psalms 147:10",HTML="http://www.biblegateway.com/verse/en/Psalms%20147:10"$ +Buckling Armor: $LK,"1 Kings,20:11",A="BF:1 Kings,20:11"$ $TX,"1 Kings 20:11",HTML="http://www.biblegateway.com/verse/en/1%20Kings%2020:11"$ >lspci -v +Size:$TX,"17594 KB",D="DD_TEMPLEOSCD_K_SIZE"$ +$TX,"Let me Google NIST Random Beacon",HTML="http://lmgtfy.com?q=NIST+random+beacon"$ -/*****************************************************************************/ -$WW,1$This is the transcript of a radio conversation of a US naval ship with Canadian authorities off the coast of Newfoundland in October, 1995. Radio conversation released by the Chief of Naval Operations 10-10-95. +Commodore 64 Basic/Assembly +$HC,""$ - Americans: Please divert your course 15 degrees to the North to avoid a Collision. - - Canadians: Recommend you divert YOUR course 15 degrees to the South to avoid a collision. - - Americans: This is the Captain of a US Navy ship. I say again, divert YOUR course. - - Canadians: No. I say again, you divert YOUR course. - - Americans: This is the aircraft carrier USS Lincoln, the second largest ship in the United States' Atlantic fleet. We are accompanied by three destroyers, three cruisers and numerous support vessels. I demand that YOU change your course 15 degrees north, that's one five degrees north, or countermeasures will be undertaken to ensure the safety of this ship. - - Canadians: This is a lighthouse. Your call.[2] -$WW,0$/*****************************************************************************/ - - - -/*****************************************************************************/ -char *words[10000]; //Single word list. No statistical weights allowed. -int i=0; - -while (true) { - while (!keyboard_hit()) - i++; - printf("%s ",words[i%10000]); -} -/*****************************************************************************/ - - -Size:$TX,"17784 KB",D="DD_TEMPLEOSCD_K_SIZE"$ - -/************************** $TX,"Perfect Coin Toss",HTML="http://hackaday.com/2014/12/19/nist-randomness-beacon/"$ ********************************/ -$TX,"NIST Randomness Beacon",HTML="http://www.nist.gov/itl/csd/ct/nist_beacon.cfm"$ is a government certified random number. You can call -the caretaker on that page, Rene Peralta 301-975-8702, $TX,"rene.peralta@nist.gov",HTML="mailto:rene.peralta@nist.gov"$. -Once every minute, they have a random lottery and post the results to their -site. You can go back and check old lottery numbers, by entering link+time. -$TX,"https:/beacon.nist.gov/rest/record/1415440980",HTML="https:/beacon.nist.gov/rest/record/1415440980"$ -$TX,"https:/beacon.nist.gov/rest/record/1415445300",HTML="https:/beacon.nist.gov/rest/record/1415445300"$ To check old numbers, enter -$TX,"https:/beacon.nist.gov/rest/record/1415529600",HTML="https:/beacon.nist.gov/rest/record/1415529600"$ Unix timestamp in the the URL. -$TX,"https:/beacon.nist.gov/rest/record/1415531580",HTML="https:/beacon.nist.gov/rest/record/1415531580"$ (Seconds since 1-JAN-1970) -$TX,"https:/beacon.nist.gov/rest/record/1415563680",HTML="https:/beacon.nist.gov/rest/record/1415563680"$ $TX,"Unix Timestamp Tool",HTML="http://www.epochconverter.com"$ -$TX,"https:/beacon.nist.gov/rest/record/1415565600",HTML="https:/beacon.nist.gov/rest/record/1415565600"$ -$TX,"https:/beacon.nist.gov/rest/record/1415566560",HTML="https:/beacon.nist.gov/rest/record/1415566560"$ They chain the numbers so they -$TX,"https:/beacon.nist.gov/rest/record/1415568120",HTML="https:/beacon.nist.gov/rest/record/1415568120"$ cannot be tampered with. -/*****************************************************************************/ +Bill Gates Predictions +$HC,""$ Cop tying shoe: (After drive-by shooting, God said kid was not innocent, LOL.) $HC,"\"\""$ $TX,"WWW.OSDEV.ORG",HTML="http://www.osdev.org"$ +$TX,"My Bookmarks",HTML="http://www.templeos.org/Wb/Home/Wb2/Files/Bookmarks"$ $TX,"Perfect Coin Toss",HTML="http://hackaday.com/2014/12/19/nist-randomness-beacon/"$ $TX,"Top 100 Movies",HTML="http://www.afi.com/100years/movies10.aspx"$ -$TX,"Dr. David Pheanis",HTML="https://webapp4.asu.edu/directory/person/77201"$ +$TX,"ASU_Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$ $TX,"ASU Course Catalog (See page 261)",HTML="https://catalog.asu.edu/files/shared/archives/1994-1996/general/UG1994-1996.pdf/1994-1996-UG-241-267.pdf"$ +$TX,"Dr. David Pheanis",HTML="https://webapp4.asu.edu/directory/person/77201"$ $TX,"Dr. Konstantinos S. Tsakalis",HTML="http://ecee.engineering.asu.edu/directory/tenured-and-tenure-track-faculty/kostantinos-s-tsakalis"$ $TX,"Dr. Walter Higgins",HTML="https://webapp4.asu.edu/directory/directorysearch?cn=Walter+Higgins"$ +$TX,"Peter Gadwa",HTML="http://www.wired.com/magazine/2010/11/mf_ticketmaster/all/1"$ +$TX,"Tom Foley",HTML="http://web.gccaz.edu/~tfoley/perspage.html"$ $TX,"KeyPeele#1",HTML="http://www.youtube.com/watch?v=Dd7FixvoKBw"$ $TX,"KeyPeele#2",HTML="http://www.youtube.com/watch?v=VHG_Gv_zLY4"$ $TX,"ThePrisoner",HTML="http://www.youtube.com/watch?v=HRPDO63rI1E"$ +$TX,"Bible with LineNums",HTML="http://www.templeos.org/files/NumBible.TXT"$ $TX,"WestWorld",HTML="http://www.youtube.com/watch?v=LcL3eP0Hfy4"$ $TX,"Picard:FourLights",HTML="http://www.youtube.com/watch?v=o_eSwq1ewsU"$ $TX,"Dwight:NerdTorture",HTML="http://www.noob.us/humor/the-office-dwight-faces-nerd-torture-of-the-highest-form"$ @@ -388,16 +356,9 @@ $TX,"Dumb Guards",HTML="http://www.youtube.com/watch?v=OdKa9bXVinE"$ $TX,"Mapping the Commodore 64",HTML="http://unusedino.de/ec64/technical/project64/mapping_c64.html"$ Holy Grail: Lmq5PxHpLNw 1:28:27 $TX,"ATA/ATAPI Spec",HTML="http://www.t13.org/Documents/UploadedDocuments/docs2007/D1532v1r4b-AT_Attachment_with_Packet_Interface_-_7_Volume_1.pdf"$ -$TX,"BBC",HTML="http://www.knpr.org/"$ +$TX,"BBC",HTML="http://www.knpr.org"$ +$TX,"BBC_News_24",HTML="http://www.wherever.tv/tv-channels/BBC-News-24.jsf"$ $TX,"BBC_Five_Live",HTML="http://www.bbc.co.uk/radio/player/bbc_radio_five_live"$ -$TX,"KNPR",HTML="http://www.knpr.org/"$ +$TX,"KNPR",HTML="http://www.knpr.org"$ $TX,"C64 Users Guide",HTML="http://www.commodore.ca/manuals/c64_users_guide/c64-users_guide.htm"$ $TX,"C64 Programmers Reference Guide",HTML="http://www.commodore.ca/manuals/c64_programmers_reference/c64-programmers_reference.htm"$ - - -1) Strings, Opcode in Compiler -2) FizzBuzz -3) Negative displacements -4) Multicore -5) Preempt -6) Graphics diff --git a/Demo/AcctExample/Registry.CPP b/Demo/AcctExample/Registry.CPP index b73b5a5..f923f6e 100644 --- a/Demo/AcctExample/Registry.CPP +++ b/Demo/AcctExample/Registry.CPP @@ -1,19 +1,27 @@ $TR-UL,"Adam"$ $ID,2$$TR,"SysMsgFlags"$ -$ID,2$sys_msg_flags[0]=0xFB; +$ID,2$sys_msg_flags[0]=0xFF; $ID,-2$$TR,"SysRegVer"$ -$ID,2$registry_version=3.030; +$ID,2$registry_version=3.070; $ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$ $ID,2$$TR,"CircleTrace"$ $ID,2$F64 best_score=4.9425; +$ID,-2$$TR,"TOS"$ +$ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46; $ID,-2$$TR,"DiningStars"$ $ID,2$F64 best_score=9999.0000; +$ID,-2$$TR,"BlackDiamond"$ +$ID,2$I64 best_score=1; +$ID,-2$$TR,"EagleDive"$ +$ID,2$I64 best_score=4; $ID,-2$$TR,"DunGen"$ $ID,2$F64 best_score=20.5295; $ID,-2$$TR,"CastleFrankenstein"$ $ID,2$F64 best_score=33.8405; $ID,-2$$TR,"ZoneOut"$ $ID,2$F64 best_score=50.3318; +$ID,-2$$TR,"Varoom"$ +$ID,2$F64 best_score=11.8623; $ID,-2$$TR,"BugBird"$ $ID,2$F64 best_score=18.2332; $ID,-2$$TR,"TimeOut"$ @@ -26,15 +34,12 @@ $ID,-2$$TR,"XCaliber"$ $ID,2$I64 best_score=248; I64 msg_flags=1; $ID,-2$$TR,"Wenceslas"$ -$ID,2$F64 best_score=62.7035; +$ID,2$F64 best_score=49.8074; $ID,-2$$TR,"BomberGolf"$ $ID,2$I64 best_score=32; -$ID,-2$$TR,"EagleDive"$ -$ID,2$I64 best_score=4; -$ID,-2$$TR,"Varoom"$ -$ID,2$F64 best_score=11.8623; -$ID,-2$$TR,"BlackDiamond"$ -$ID,2$I64 best_score=1; -$ID,-2$$TR,"TOS"$ -$ID,2$I64 tos_code_walk_thru=101,tos_after_egypt_in_action=46; -$ID,-2$$ID,-2$ \ No newline at end of file +$ID,-2$$ID,-2$$TR,"DemoCompany"$ +$ID,2$$TR,"Game1"$ +$ID,2$F64 best_score=168.62557; +$TR,"SimpleVal"$ +$ID,2$1250; +$ID,-2$$ID,-2$$ID,-2$ \ No newline at end of file diff --git a/Demo/AcctExample/TOSCfg.CPP b/Demo/AcctExample/TOSCfg.CPP index 2e34f04..9bf341d 100644 --- a/Demo/AcctExample/TOSCfg.CPP +++ b/Demo/AcctExample/TOSCfg.CPP @@ -3,17 +3,18 @@ U0 TOSBootRescueDrv1() { CBinFile *bfh=sys_boot_base-sizeof(CBinFile); bfh(I64)+=bfh->file_size-1; - DefinePrint("TOS_BOOT_RESCUE_DRV","0x%X",CeilI64(SYS_KERNEL_END+SLOP,BLK_SIZE)); + DefinePrint("TOS_BOOT_RESCUE_DRV","0x%X", + CeilI64(SYS_KERNEL_END+SLOP,BLK_SIZE)); DefinePrint("TOS_BOOT_RESCUE_DRV_END", "0x%X",FloorI64( - (BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4<<4- - (bfh(I64)-SYS_KERNEL_END)-SLOP,BLK_SIZE)); + (BOOT_RAM_LIMIT-(BOOT_STK_SIZE+CD_BOOT_LOADER_SIZE))>>4<<4- + (bfh(I64)-SYS_KERNEL_END)-SLOP,BLK_SIZE)); DefinePrint("CFG_BOOT_RESCUE_DRV_FILE","\"/Temp/BootRescueDrv.BIN.Z\""); } TOSBootRescueDrv1; U0 TOSBootRescueDrv2() { DefinePrint("CFG_BOOT_RESCUE_DRV","\"a10x%X\n0x%X\n\"",TOS_BOOT_RESCUE_DRV, - (TOS_BOOT_RESCUE_DRV_END-TOS_BOOT_RESCUE_DRV)/BLK_SIZE); + (TOS_BOOT_RESCUE_DRV_END-TOS_BOOT_RESCUE_DRV)/BLK_SIZE); DefinePrint("CFG_BOOT_RESCUE_DRV_START","\"0x%X\"",TOS_BOOT_RESCUE_DRV); } TOSBootRescueDrv2; @@ -23,9 +24,10 @@ U0 TOSInit() CBlkDev *bd; switch (tos_cid) { case CID_DFT: - DefinePrint("CFG_RAM_DRVS","\"b1\nScale2Mem(2048,0x280000,4*1024*1024*1024)\n\""); + DefinePrint("CFG_RAM_DRVS", + "\"b1\nScale2Mem(2048,0x280000,4*1024*1024*1024)\n\""); if (dsk.auto_mount_ide_cnt) { - //If AutoMount was successful, No need to manually mount in next compile +//If AutoMount was successful, No need to manually mount in next compile DefinePrint("CFG_HARD_DRVS","\"\""); DefinePrint("CFG_CDROM_DRVS","\"\""); } else { @@ -46,7 +48,7 @@ U0 TOSInit() try { bd=Let2BlkDev('C'); DefinePrint("CFG_HARD_DRVS","\"c2s0x%X\n0x%X\n%d\"", - bd->base0,bd->base1,bd->unit); + bd->base0,bd->base1,bd->unit); } catch Fs->catch_except=TRUE; try { @@ -78,7 +80,11 @@ U0 TOSDrvTextAttrSet() "HeapInit\n130\nMemInit\n131\nVarInit\n132\n\n" #define CFG_DBGZ_OPTS "AutoMountIDE\nCT"\ "HeapInit\n0\nMemInit\n0\nVarInit\n0\n\n" -#define TOS_CFG "\n" CFG_RAM_DRVS CFG_CDROM_DRVS CFG_HARD_DRVS "\n" CFG_DSK_CACHE CFG_OPTS +#define TOS_CFG "\n" CFG_RAM_DRVS CFG_CDROM_DRVS CFG_HARD_DRVS "\n"\ + CFG_DSK_CACHE CFG_OPTS #define TOS_CDROM_CFG "Tb1\n0x20000\nt3 \n\n\nAutoMountIDE\nCT\n" -#define TOS_CDROM_DBG_CFG "A" CFG_BOOT_RESCUE_DRV "b1\nScale2Mem(2048,0x40000)\n\n\n"\ - "DontProbe\nBootRescueDrv\n" "C:" CFG_BOOT_RESCUE_DRV_FILE "\n" CFG_BOOT_RESCUE_DRV_START "\n\n" +#define TOS_CDROM_DBG_CFG "A" CFG_BOOT_RESCUE_DRV\ + "b1\nScale2Mem(2048,0x40000)\n\n\n"\ + "DontProbe\nBootRescueDrv\n"\ + "C:" CFG_BOOT_RESCUE_DRV_FILE "\n"\ + CFG_BOOT_RESCUE_DRV_START "\n\n" diff --git a/Demo/AcctExample/TOSDistro.CPP b/Demo/AcctExample/TOSDistro.CPP index 80be0b9..219e4db 100644 --- a/Demo/AcctExample/TOSDistro.CPP +++ b/Demo/AcctExample/TOSDistro.CPP @@ -20,7 +20,7 @@ U0 TOSMakeOSDrvBootInstall(U8 drv_let) U0 TOSCopyDrv(U8 src,U8 dst) { - U8 buf_s[128],buf_d[128]; + U8 buf_s[STR_LEN],buf_d[STR_LEN]; src=ToUpper(src); dst=ToUpper(dst); @@ -90,7 +90,8 @@ public U0 CopySongs(U8 threshold='7') { CDoc *s; CDocEntry *doc_e; - CDirEntry *tempde=FilesFind("::/Home/Psalmody/*.CPP*",FUF_CLUSTER_ORDER),*tempde1=tempde; + CDirEntry *tempde=FilesFind("::/Home/Psalmody/*.CPP*",FUF_CLUSTER_ORDER), + *tempde1=tempde; DelTree("/Apps/Psalmody/Examples"); MkDir("/Apps/Psalmody/Examples"); while (tempde) { @@ -107,8 +108,10 @@ U0 DistroPrep() { Del("/Demo/WebLogExample/WebLogRep.TXT*"); Del("/Demo/ReverseFileExample/PoemForeward.TXT*"); + Del("/Home/NumBible.TXT.Z"); DelTree("/Home/*Temp.TXT.Z"); - CopySongs; + if (FileFind("::/Home/Psalmody")) + CopySongs; DelTree("/Temp"); MkDir("/Temp"); @@ -125,10 +128,10 @@ U0 DistroPrep() DelTree("/Demo/AcctExample/Wb2"); Del("/Demo/AcctExample/Test*"); -//Once in a while, do these: -// SortHeaders; -// DocOpt("/*"); -// DblSpaceScan("/*"); + //Once in a while, do these: + // SortHeaders; + // DocOpt("/*"); + // DblSpaceScan("/*"); CursorRem("/*"); DelTree("/Demo/*.BI*"); @@ -140,7 +143,7 @@ U0 DistroPrep() U0 MakeBootRescueDrvFile() { try - Let2Drv('A'); + Let2Drv('A'); catch { Fs->catch_except=TRUE; Auto(CFG_BOOT_RESCUE_DRV "\n"); @@ -168,7 +171,8 @@ U0 MakeBootRescueDrvFile() Copy("C:/Adam/AUtils.CPP.Z", "A:/Adam"); Copy("C:/Adam/AMathODE.CPP.Z","A:/Adam"); - FileWrite("C:" CFG_BOOT_RESCUE_DRV_FILE,bd->RAM_dsk,(bd->max_blk+1)<RAM_dsk,(bd->max_blk+1)<next,end_indent->last); doc->cur_entry=start_indent->next; - doc->cur_data_col=0; + doc->cur_col=0; DocPrint(doc,"DefinePrint(\"DD_TEMPLEOS_LOC\",\"%,d\");\n",result); DocPrint(doc,"DefinePrint(\"DD_TEMPLEOS_LOC_OFFICIAL\",\"%,d\");\n",official); @@ -270,14 +274,16 @@ website, too. MakeOSDrvBootInstall('C','T'); DelTree(TOS_DISTRO_DIR); CopyTree("C:/",TOS_DISTRO_DIR "/"); + Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); } U0 MakeTOSDistro() { TOSDistroPrep; - CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, + TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSTS_SIZE", - "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", - 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + "Download $TX,"TempleOS V3.07",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } @@ -303,15 +309,17 @@ I call $LK,"MakeBootDrvFile",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeBootRes MakeOSDrvBootInstall('C','T'); DelTree(TOS_DISTRO_DIR); CopyTree("C:/",TOS_DISTRO_DIR "/"); + Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); Del("C:" CFG_BOOT_RESCUE_DRV_FILE); } U0 MakeDbgDistro() { DbgDistroPrep; - CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, + TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSDBG_SIZE", - "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", - 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + "Download $TX,"TempleOS V3.07",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } @@ -325,18 +333,20 @@ U0 StdDistroPrep() CopyTree("C:/",TOS_DISTRO_DIR "/"); DelTree(TOS_DISTRO_DIR "/Home"); MkDir(TOS_DISTRO_DIR "/Home"); - Del(TOS_DISTRO_DIR "/0000Boot/OldMBR.BIN.C"); - Del(TOS_DISTRO_DIR "/0000Boot/BootMHD2.BIN.C"); + Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); + Del(TOS_DISTRO_DIR BOOT_DIR "/OldMBR.BIN.C"); + Del(TOS_DISTRO_DIR BOOT_DIR "/BootMHD2.BIN.C"); } U0 MakeStdDistro() { StdDistroPrep; - CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, + TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); Drv('C'); } U0 LiteDistroPrep() -{/*Missing: Dictionary, Bible and TOSZ Utility. Still 100% OpenSource. +{/*Missing: Dictionary, Bible and TOSZ Utility.Still 100% OpenSource. Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, @@ -345,6 +355,7 @@ Demos, Documentation. */ StdDistroPrep; DelTree(TOS_DISTRO_DIR "/Linux"); + Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); Del(TOS_DISTRO_DIR "/Adam/AutoComplete/ACDefs.DAT*"); Del(TOS_DISTRO_DIR "/Misc/PCIDevices.TXT.Z"); Del(TOS_DISTRO_DIR "/Misc/Bible.TXT.Z"); @@ -352,15 +363,17 @@ Demos, Documentation. U0 MakeLiteDistro() { LiteDistroPrep; - CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, + TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSLITE_SIZE", - "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)", - 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + "Download $TX,"TempleOS V3.07",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } U0 UltraDistroPrep() -{/*Missing: Apps, Demos, Dictionary, Bible and TOSZ Utility. Still 100% OpenSource. +{/* +Missing: Apps, Demos, Dictionary, Bible and TOSZ Utility. Still 100%OpenSource. Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, @@ -368,8 +381,10 @@ FileManager, WindowManager, PCSpeaker, Documentation. */ LiteDistroPrep; DelTree(TOS_DISTRO_DIR "/Apps"); + MkDir(TOS_DISTRO_DIR "/Apps"); DelTree(TOS_DISTRO_DIR "/Demo"); DelTree(TOS_DISTRO_DIR "/Misc/Tour"); + Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); Del(TOS_DISTRO_DIR "/Adam/AutoComplete/ACWords.DAT*"); Del(TOS_DISTRO_DIR "/Adam/God/Vocab.TXT.Z"); Del(TOS_DISTRO_DIR "/Misc/OSTestSuite.CPP.Z"); @@ -377,10 +392,11 @@ FileManager, WindowManager, PCSpeaker, Documentation. U0 MakeUltraDistro() { UltraDistroPrep; - CDFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); + ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, + TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSULTRA_SIZE", - "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - UltraLite Distro (%0.1f MB)", - 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); + "Download $TX,"TempleOS V3.07",D="DD_OS_NAME_VERSION"$ - UltraLite Distro (%0.1f MB)", + 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } @@ -395,9 +411,10 @@ U0 TOSWebFile(U8 *name) Touch(name,"",,de.datetime); name2=ChgExt(name,"html"); ToHtml(name,name2, - "The Temple Operating System\n" - "\n" - ); + "The Temple Operating System\n" + "\n"); Touch(name2,"",,de.datetime); Free(name2); } @@ -415,11 +432,17 @@ U0 MakeWebSite() Touch("D:/Wb/Home/Wb2/index.TXT.Z","",,Now); Touch("D:/Wb/Home/Wb2/Downloads.TXT.Z","",,Now); Touch("D:/Wb/Home/Wb2/TempleOS.TXT.Z","",,Now); - tempde=tempde1=FilesFind("*",FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER); + tempde=tempde1=FilesFind("*", + FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER); while (tempde) { TOSWebFile(tempde->full_name); tempde=tempde->next; } + Copy( "D:/Wb/Home/Wb2/Files/Bin/TempleBot", + "D:/Wb/Home/Wb2/Files/Bin/TempleBot.TXT"); + ToDolDoc("D:/Wb/Home/Wb2/Files/Bin/TempleBot.TXT"); + ToHtml("D:/Wb/Home/Wb2/Files/Bin/TempleBot.TXT"); + Del("D:/Wb/Home/Wb2/Files/Bin/TempleBot.TXT"); DirTreeDel(tempde1); Drv('C'); } @@ -456,15 +479,15 @@ U0 MakeWebSitePartial() U0 UpdateISODocDefines() { DefinePrint("DD_TEMPLEOSCD_SIZE", - "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", - 0.1*(10*Size("D:/Wb/TempleOSCD.ISO","+s")/1024/1024)); + "Download $TX,"TempleOS V3.07",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", + 0.1*(10*Size("D:/Wb/TempleOSCD.ISO","+s")/1024/1024)); DefinePrint("DD_TEMPLEOSCD_K_SIZE", - "%d KB",Size("D:/Wb/TempleOSCD.ISO","+s")/1024); + "%d KB",Size("D:/Wb/TempleOSCD.ISO","+s")/1024); DefinePrint("DD_TEMPLEOSULTRA_SIZE", - "Download $TX,"TempleOS V3.02",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.1f MB)", - 0.1*(10*Size("D:/Wb/TempleOSUltra.ISO","+s")/1024/1024)); + "Download $TX,"TempleOS V3.07",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.1f MB)", + 0.1*(10*Size("D:/Wb/TempleOSUltra.ISO","+s")/1024/1024)); DefinePrint("DD_TEMPLEOSULTRA_K_SIZE", - "%d KB",Size("D:/Wb/TempleOSUltra.ISO","+s")/1024); + "%d KB",Size("D:/Wb/TempleOSUltra.ISO","+s")/1024); } UpdateISODocDefines; @@ -473,7 +496,7 @@ public U0 MakeDistrosAndBackUp() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ progress4=*progress4_desc=0; - progress4_max=13; + progress4_max=14; AutoComplete; WinMax; WinBorder; @@ -496,9 +519,15 @@ public U0 MakeDistrosAndBackUp() UpdateISODocDefines; Cd("C:/"); + + if (LongLines) + throw; + progress4++; + if (LinkChk) throw; progress4++; + MakeSymFiles; progress4++; MakeWebSite; progress4++; @@ -507,3 +536,12 @@ public U0 MakeDistrosAndBackUp() progress4=progress4_max=0; SettingsPop; } + +public U0 PreBackUp() +{ + Copy("D:/Home/Wb2/Files/Bookmarks.html","C:/Home/Wb2/Files"); + Del("C:/Home/Wb2/Files/Bin/*"); + Copy("D:/Home/Wb2/Files/Bin/*","C:/Home/Wb2/Files/Bin"); + Copy("D:/Home/Wb2/Files/Bin/TempleBot","C:/Linux"); + Copy("D:/Home/Wb2/Files/Bin/God*","C:/Linux"); +} diff --git a/Demo/AcctExample/TOSHolySpirit.CPP b/Demo/AcctExample/TOSHolySpirit.CPP index 48062d4..ddb754c 100644 --- a/Demo/AcctExample/TOSHolySpirit.CPP +++ b/Demo/AcctExample/TOSHolySpirit.CPP @@ -1,6 +1,7 @@ U0 BadCodeJump() {//$LK,"::/Adam/God/HSNotes.TXT"$ - CDirEntry *tempde1=FilesFind("/*",FUF_JUST_FILES|FUF_RECURSE|FUF_JUST_SRC|FUF_CLUSTER_ORDER), + CDirEntry *tempde1=FilesFind("/*", + FUF_JUST_FILES|FUF_RECURSE|FUF_JUST_SRC|FUF_CLUSTER_ORDER), *tempde=tempde1; I64 cnt=0,num; CDoc *doc; @@ -38,11 +39,12 @@ public U8 *FileNameNumNext(U8 *files_find_mask,U8 *fmt) U0 DCImgWrite(CDC *dc) { U8 *st1=FileNameNumNext("::/Home/Wb2/Imgs/Img*", - "::/Home/Wb2/Imgs/Img%03d.BMP"), - *st2=MStrPrint("http://www.templeos.org/Wb%s",st1+2); + "::/Home/Wb2/Imgs/Img%03d.BMP"), + *st2=MStrPrint("http://www.templeos.org/Wb%s",st1+2); BMPWrite(st1,dc); Free(st1); - "$$HC,\"\\\"\\\"\"$$\n",st2,dc->width,dc->height; + "$$HC,\"\\\"\\\"\"$$\n",st2,dc->width,dc->height; Free(st2); } @@ -53,7 +55,7 @@ U0 BlogScreenShot() U8 *old_fp_draw_input_ptr=gr.fp_draw_input_ptr; gr.fp_draw_input_ptr=NULL; WinMgrSync(2); - dc1=DCCaptureScreen; + dc1=DCScreenCapture; dc2=DCExtract(dc1,0,FONT_HEIGHT,GR_WIDTH-1,GR_HEIGHT-1); DCImgWrite(dc2); gr.fp_draw_input_ptr=old_fp_draw_input_ptr; @@ -62,18 +64,18 @@ U0 BlogScreenShot() DocCursor(old_cursor); } -U8 *WebBookMarks(U8 *filename="::/Home/Archive/Bookmarks.html") +U8 *WebBookMarks(U8 *filename="::/Home/Wb2/Files/Bookmarks.html") { U8 *st; CDocEntry *doc_e; CDoc *doc=DocNew; - CLex *lx=LexNew(MStrPrint("#include \"%s\"",filename)); - while (Lex(lx)) - if (lx->token==TK_STR && *lx->cur_str(U32 *)=='http') { - DocPrint(doc,"$$MU-UL,\"%Q\",LE=0x%X$$\n",lx->cur_str,lx->cur_str); - lx->cur_str=NULL; + CCmpCtrl *cc=CmpCtrlNew(MStrPrint("#include \"%s\"",filename)); + while (Lex(cc)) + if (cc->token==TK_STR && *cc->cur_str(U32 *)=='http') { + DocPrint(doc,"$$MU-UL,\"%Q\",LE=0x%X$$\n",cc->cur_str,cc->cur_str); + cc->cur_str=NULL; } - LexDel(lx); + CmpCtrlDel(cc); if ((st=PopUpMenu(doc))!=DOCM_CANCEL) st=StrNew(st); @@ -122,8 +124,8 @@ U8 *TopMoviesWrite(U8 *filename="C:/Home/Wb2/Files/Movies.TXT.Z", class CTopMoviesForm { - U8 tag[136]; - U8 special[136]; + U8 tag[STR_LEN]; + U8 special[STR_LEN]; I64 timestamp; I64 cert fmtstr "$$DA,32,A=\"Movie #1-100 :%d\"$$\n"; I64 min; @@ -132,8 +134,8 @@ class CTopMoviesForm class CWebBookMarkForm { - U8 tag[136] fmtstr "$$DA-P,135,A=\"Tag Text :%s\"$$\n"; - U8 special[136]; + U8 tag[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Tag Text :%s\"$$\n"; + U8 special[STR_LEN]; I64 timestamp; I64 cert; I64 min; @@ -142,8 +144,8 @@ class CWebBookMarkForm class CWebBibleForm { - U8 tag[136] fmtstr "$$DA-P,135,A=\"Tag Text :%s\"$$\n"; - U8 special[136] fmtstr "$$DA-P,135,A=\"Bible Passage:%s\"$$\n"; + U8 tag[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Tag Text :%s\"$$\n"; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Bible Passage:%s\"$$\n"; I64 timestamp; I64 cert; I64 min; @@ -152,8 +154,8 @@ class CWebBibleForm class CYouTubeForm { - U8 tag[136]; - U8 special[136] fmtstr "$$DA-P,135,A=\"SerialNum:%s\"$$\n"; + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"SerialNum:%s\"$$\n"; I64 timestamp; I64 cert; I64 min fmtstr "$$DA,32,A=\"Minutes :%d\"$$\n"; @@ -162,8 +164,8 @@ class CYouTubeForm class CTopMoviesYouTubeForm { - U8 tag[136] fmtstr "$$DA-P,135,A=\"Movie :%s\"$$\n"; - U8 special[136] fmtstr "$$DA-P,135,A=\"SerialNum:%s\"$$\n"; + U8 tag[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Movie :%s\"$$\n"; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"SerialNum:%s\"$$\n"; I64 timestamp; I64 cert; I64 min fmtstr "$$DA,32,A=\"Minutes :%d\"$$\n"; @@ -172,8 +174,8 @@ class CTopMoviesYouTubeForm class CImgurForm { - U8 tag[136]; - U8 special[136] fmtstr "$$DA-P,135,A=\"SerialNum:%s\"$$\n"; + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"SerialNum:%s\"$$\n"; I64 timestamp; I64 cert; I64 min fmtstr "$$DA,32,A=\"Width :%d\"$$\n"; @@ -182,8 +184,8 @@ class CImgurForm class CWikipediaForm { - U8 tag[136] fmtstr "$$DA-P,135,A=\"Tag Text:%s\"$$\n"; - U8 special[136] fmtstr "$$DA-P,135,A=\"Index :%s\"$$\n"; + U8 tag[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Tag Text:%s\"$$\n"; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Index :%s\"$$\n"; I64 timestamp; I64 cert; I64 min; @@ -192,8 +194,8 @@ class CWikipediaForm class CRandDecForm { - U8 tag[136]; - U8 special[136] fmtstr "$$DA-P,135,A=\"Line (Dec):%s\"$$\n"; + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Dec):%s\"$$\n"; I64 timestamp; I64 cert; I64 min; @@ -202,8 +204,8 @@ class CRandDecForm class CRandHexForm { - U8 tag[136]; - U8 special[136] fmtstr "$$DA-P,135,A=\"Line (Hex):%s\"$$\n"; + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Hex):%s\"$$\n"; I64 timestamp; I64 cert; I64 min; @@ -212,8 +214,8 @@ class CRandHexForm class CRandCertForm { - U8 tag[136]; - U8 special[136] fmtstr "$$DA-P,135,A=\"Line (Dec) :%s\"$$\n"; + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Dec) :%s\"$$\n"; I64 timestamp; I64 cert fmtstr "$$DA,32,A=\"Certificate:%d\"$$\n"; I64 min; @@ -222,8 +224,8 @@ class CRandCertForm class CRandHexBeaconForm { - U8 tag[136]; - U8 special[136] fmtstr "$$DA-P,135,A=\"Line (Hex):%s\"$$\n"; + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Hex):%s\"$$\n"; I64 timestamp fmtstr "$$DA,32,A=\"TimeStamp :%d\"$$\n"; I64 cert; I64 min; @@ -260,7 +262,8 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) if (modulo) { if (radix==16) DocPrint(doc_out,"0x%s-->",st); - DocPrint(doc_out,"(%d remainder when divided by %d)",i,ST_BIBLE_LINES-(num_lines-1)); + DocPrint(doc_out,"(%d remainder when divided by %d)", + i,ST_BIBLE_LINES-(num_lines-1)); start=i%(ST_BIBLE_LINES-(num_lines-1)); } else { if (radix==16) @@ -275,7 +278,7 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) DocPrint(doc_out,"-->Line:%d\n",start); verse=BibleLine2Verse(start); - DocPrint(doc_out,"$TX,"KingJamesBible",HTML="http://www.templeos.org/files/BIBLE.TXT"$ (%s) God says...\n$$RED$$",verse); + DocPrint(doc_out,"$TX,"KingJamesBible",HTML="http://www.templeos.org/files/NumBible.TXT"$ (%s) God says...\n$$RED$$",verse); Free(verse); doc_in=DocNew; @@ -308,9 +311,10 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) } } -#define NIST_TIME_OFFSET 21082 +#define NIST_TIME_OFFSET (-7788-local_time_offset/CDATE_FREQ) +#define NIST_TIME_TO_SWITCH 3 -public U0 SyncNIST() +public U0 NISTSync() { I64 i,j; CDate d; @@ -330,14 +334,16 @@ U0 InsMyURL() U8 *tag,*st,*st2; CWebBibleForm *url=CAlloc(sizeof(CWebBibleForm)); url->timestamp= - FloorI64((Now-Str2Date("1/1/1970"))/CDATE_FREQ+NIST_TIME_OFFSET,60); - switch (PopUpPickLst("NISTBeacon\0WebBible\0YouTube\0Imgur\0Wikipedia\0RandomNumbers.info\0" - "Random.org\0VirtualNotary\0Nist\0HotBits\0GenerateData\0WebBookMark\0" + FloorI64((Now-Str2Date("1/1/1970"))/CDATE_FREQ+NIST_TIME_OFFSET- + NIST_TIME_TO_SWITCH,60); + switch (PopUpPickLst("NISTBeacon\0BibleGatewaySearch\0BibleGatewayVerse\0" + "YouTube\0Imgur\0Wikipedia\0RandomNumbers.info\0Random.org\0PassWord\0" + "VirtualNotary\0Nist\0HotBits\0GenerateData\0WebBookMark\0" "Roulette\0Movie\0")) { case 0: - if (DocFormDo(url(CRandHexBeaconForm *))) { + if (DocForm(url(CRandHexBeaconForm *))) { "$$TX,\"Guidelines for Talking with God.\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag=MStrPrint("https:/beacon.nist.gov/rest/record/%d",url->timestamp); "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; Free(tag); @@ -345,10 +351,11 @@ U0 InsMyURL() } break; case 1: - if (DocFormDo(url(CWebBibleForm *))) { + if (DocForm(url(CWebBibleForm *))) { tag=url->special; st2=URLPercentSpaces(url->special); - st=MStrPrint("http://www.biblegateway.com/passage/?search=%s&version=NIV",st2); + st=MStrPrint( + "http://www.biblegateway.com/passage/?search=%s&version=NIV",st2); Free(st2); if (*url->tag) tag=url->tag; @@ -357,29 +364,46 @@ U0 InsMyURL() } break; case 2: - if (DocFormDo(url(CYouTubeForm *))) { - if (url->min || url->sec) - st=MStrPrint("%s&hl=enUS&start=%d",url->special,url->min*60+url->sec); - else - st=StrNew(url->special); - "$$HC,\"\"$$\n",st,st; + if (DocForm(url(CWebBibleForm *))) { + tag=url->special; + st2=URLPercentSpaces(url->special); + st=MStrPrint( + "http://www.biblegateway.com/verse/en/%s",st2); + Free(st2); + if (*url->tag) + tag=url->tag; + "$$TX,\"%Q\",HTML=\"%Q\"$$",tag,st; Free(st); } break; case 3: - if (DocFormDo(url(CImgurForm *))) { - "$$HC,\"\\\"\\\"\"$$\n", - url->special,url->min,url->sec; + if (DocForm(url(CYouTubeForm *))) { + if (url->min || url->sec) + st=MStrPrint("%s&hl=enUS&start=%d",url->special,url->min*60+url->sec); + else + st=StrNew(url->special); + "$$HC,\"" + "\"$$\n",st,st; + Free(st); } break; case 4: - if (DocFormDo(url(CWikipediaForm *))) { + if (DocForm(url(CImgurForm *))) { + "$$HC,\"\\\"\\\"\"$$\n", + url->special,url->min,url->sec; + } + break; + case 5: + if (DocForm(url(CWikipediaForm *))) { tag=url->special; st=MStrPrint("http://en.wikipedia.org/wiki/%s",url->special); if (*url->tag) @@ -388,66 +412,76 @@ U0 InsMyURL() Free(st); } break; - case 5: - if (DocFormDo(url(CRandDecForm *))) { + case 6: + if (DocForm(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://www.randomnumbers.info"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,TRUE); } break; - case 6: - if (DocFormDo(url(CRandDecForm *))) { + case 7: + if (DocForm(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://www.random.org"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,FALSE); } break; - case 7: - if (DocFormDo(url(CRandCertForm *))) { + case 8: + if (DocForm(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="https://passed.pw"; + "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case 9: + if (DocForm(url(CRandCertForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://virtual-notary.org"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; tag="Here is the certificate"; - st=MStrPrint("http://www.templeos.org/Certs/virtual-notary-cert-randomnum-%d.p12",url->cert); + st=MStrPrint("http://www.templeos.org/Certs/virtual-notary-cert" + "-randomnum-%d.p12",url->cert); "\n$$TX,\"%Q: %d\",HTML=\"%Q\"$$.\n",tag,url->cert,st; Free(st); MyBibleLines(url->special,20,10,FALSE,FALSE); } break; - case 8: - if (DocFormDo(url(CRandHexForm *))) { + case 10: + if (DocForm(url(CRandHexForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://qrng.anu.edu.au/NIST.php"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,16,TRUE,TRUE); } break; - case 9: - if (DocFormDo(url(CRandHexForm *))) { + case 11: + if (DocForm(url(CRandHexForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="https://www.fourmilab.ch/hotbits/secure_generate.html"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,16,TRUE,TRUE); } break; - case 10: - if (DocFormDo(url(CRandDecForm *))) { + case 12: + if (DocForm(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; tag="http://www.generatedata.com"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,FALSE); } break; - case 11: - if (DocFormDo(url(CWebBookMarkForm *))) { + case 13: + if (DocForm(url(CWebBookMarkForm *))) { tag=st=WebBookMarks; if (*url->tag) tag=url->tag; @@ -455,24 +489,26 @@ U0 InsMyURL() Free(st); } break; - case 12: - if (DocFormDo(url(CRandDecForm *))) { + case 14: + if (DocForm(url(CRandDecForm *))) { "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="https://www.dublinbet.com/casino_game.html?mode=demo&game=136#gameId=136"; + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="https://www.dublinbet.com/casino_game.html" + "?mode=demo&game=136#gameId=136"; "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; MyBibleLines(url->special,20,10,FALSE,FALSE); } break; - case 13: - if (DocFormDo(url(CTopMoviesForm *)) && (st=TopMoviesRead(,url->cert*2))) { + case 15: + if (DocForm(url(CTopMoviesForm *)) && (st=TopMoviesRead(,url->cert*2))) { StrCpy(url->tag,st); Free(st); if (!(st=TopMoviesRead(,url->cert*2+1))||!*st) { Free(st); - if (DocFormDo(url(CTopMoviesYouTubeForm *)) && *url->special) { + if (DocForm(url(CTopMoviesYouTubeForm *)) && *url->special) { if (url->min || url->sec) - st=MStrPrint("%s&hl=enUS&start=%d",url->special,url->min*60+url->sec); + st=MStrPrint("%s&hl=enUS&start=%d", + url->special,url->min*60+url->sec); else st=StrNew(url->special); TopMoviesWrite(,url->cert*2+1,st); @@ -480,15 +516,20 @@ U0 InsMyURL() st=NULL; } "God's response:\n" - "$$TX,\"Top 100 Movies\",HTML=\"http://www.afi.com/100years/movies10.aspx\"$$\n" - "#%s\n",url->tag; + "$$TX,\"Top 100 Movies\"," + "HTML=\"http://www.afi.com/100years/movies10.aspx\"$$\n" + "#%s\n",url->tag; if (st) { - "$$HC,\"\"$$\n",st,st; + "$$HC,\"" + "" + "\"$$\n",st,st; Free(st); } } @@ -499,7 +540,8 @@ U0 InsMyURL() public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512) {//Make God pick a book passage. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.TXT"$ - CDirEntry *tempm=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT), + CDirEntry *tempm=FilesFind(files_find_mask, + FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT), *tempm1=tempm; I64 i=0; U8 *st,*st2=NULL; @@ -529,5 +571,5 @@ public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512) DirTreeDel(tempm1); } - -//GodInit("C:/Home/Wb2/Files/Words/Happy.TXT*"); +if (FileFind("::/Home/Wb2/Files/Words/HappyWords.TXT")) + GodInit("::/Home/Wb2/Files/Words/HappyWords.TXT"); diff --git a/Demo/AcctExample/TOSIDComputer.CPP b/Demo/AcctExample/TOSIDComputer.CPP index b34584b..f3d62ac 100644 --- a/Demo/AcctExample/TOSIDComputer.CPP +++ b/Demo/AcctExample/TOSIDComputer.CPP @@ -7,7 +7,7 @@ Bool IsDrvVMware(U8 drv_let) U8 *m=NULL; try if ((m=DrvModelNum(drv_let)) && - !MemCmp(m,"VMware",6)) + !MemCmp(m,"VMware",6)) result=TRUE; catch Fs->catch_except=TRUE; @@ -32,8 +32,8 @@ I64 IsDrvATAPI(U8 drv_let) Bool result=FALSE; CBlkDev *bd; try if ((bd=Let2BlkDev(drv_let)) && - bd->type==BDT_ATAPI) - result=TRUE; + bd->type==BDT_ATAPI) + result=TRUE; catch Fs->catch_except=TRUE; return result; diff --git a/Demo/AcctExample/TOSMisc.CPP b/Demo/AcctExample/TOSMisc.CPP index 17703c4..3f42300 100644 --- a/Demo/AcctExample/TOSMisc.CPP +++ b/Demo/AcctExample/TOSMisc.CPP @@ -3,13 +3,13 @@ #define FG_JUST_AUDIO 0 #define FG_BOOT_DRV 1 #define FG_RAM_DRV 2 -I64 fg_mode=FG_JUST_AUDIO; +I64 fg_mode=FG_RAM_DRV; Bool fg_on =FALSE; U0 FrameGrabberTask(I64) {//ffmpeg -r 8 -i VID%05d.BMP -y Movie.avi I64 frame_num=0; - U8 buf[136],buf2[136]; + U8 buf[STR_LEN],buf2[STR_LEN]; F64 end_time=tS; Silent; //no output to screen if (fg_mode==FG_RAM_DRV) { @@ -17,7 +17,7 @@ U0 FrameGrabberTask(I64) while (fg_on) { StrPrint(buf,"B:/Temp/ScreenShots/VID%05d.BMP",frame_num++); StrCpy(buf2,buf); - BMPCaptureScreen(buf); + BMPScreenCapture(buf); while (TRUE) { end_time+=1.0/VIDEO_FRAME_RATE; if (end_timeroot.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_NEW_LINE && - doc_e->next->type_u8==DOCT_NEW_LINE && - doc_e->next->next->type_u8==DOCT_NEW_LINE) { + doc_e->next->type_u8==DOCT_NEW_LINE && + doc_e->next->next->type_u8==DOCT_NEW_LINE) { i=0; while (doc_e->type_u8==DOCT_NEW_LINE) { i++; @@ -227,19 +229,20 @@ public U0 DblSpaceScan(U8 *files_find_mask="*",U8 *fu_flags=NULL) DblSpaceScanLst(FilesFind(files_find_mask,f)); } -AcctRegSetDftEntry("TempleOS/TOS", +RegSetDftEntry("TempleOS/TOS", "I64 tos_code_walk_thru=1,tos_after_egypt_in_action=1;\n"); -AcctRegExeBranch("TempleOS/TOS"); +RegExeBranch("TempleOS/TOS"); U0 TOSRegInit() { DefinePrint("DD_CODE_WALK_THRU","Episode #%d",tos_code_walk_thru); - DefinePrint("DD_AFTER_EGYPT_IN_ACTION","Episode #%d",tos_after_egypt_in_action); + DefinePrint("DD_AFTER_EGYPT_IN_ACTION","Episode #%d", + tos_after_egypt_in_action); } TOSRegInit; U0 TOSRegWrite() { - AcctRegWriteBranch("TempleOS/TOS", + RegWriteBranch("TempleOS/TOS", "I64 tos_code_walk_thru=%d,tos_after_egypt_in_action=%d;\n", tos_code_walk_thru,tos_after_egypt_in_action); TOSRegInit; @@ -247,21 +250,23 @@ U0 TOSRegWrite() class CYouTubeForm2 { - U8 special[136] fmtstr "$$DA-P,135,A=\"SerialNum:%s\"$$\n"; + U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"SerialNum:%s\"$$\n"; }; U8 *TOSYouTube() { U8 *result; CYouTubeForm2 *url=CAlloc(sizeof(CYouTubeForm2)); - if (DocFormDo(url(CYouTubeForm2 *)) && *url->special) - result=MStrPrint("$$HC,\"\"$$", - url->special,url->special); + if (DocForm(url(CYouTubeForm2 *)) && *url->special) + result=MStrPrint("$$HC,\"" + "\"$$", + url->special,url->special); else result=NULL; Free(url); @@ -299,3 +304,13 @@ U0 CodeWalkThru() tos_code_walk_thru++; TOSRegWrite; } + +U0 TOSJukeVideo(I64 start=0,I64 end=10) +{ + U8 *buf=FileRead("::/Misc/Bible.TXT.Z"); //Put in cache + Free(buf); + AutoComplete; + FrameGrabberToggle; + JukeSongsPuppet("::/Apps/Psalmody/Examples",,start,end); + FrameGrabberToggle; +} diff --git a/Demo/Asm/AsmAndC1.CPP b/Demo/Asm/AsmAndC1.CPP index 17ec145..b1dddce 100644 --- a/Demo/Asm/AsmAndC1.CPP +++ b/Demo/Asm/AsmAndC1.CPP @@ -9,12 +9,11 @@ asm { //Opcodes are slightly different to make writing my x86_64 assembler easier. //See $LK,"::/Compiler/OpCodes.TXT"$. -USE64 //Defaults to 64, but this is a good habit. - IMPORT Beep; _BEEPS:: //You can always clobber RAX,RBX,RCX,RDX,R8,R9. The compiler expects that. +//See $LK,"REGG_C_CLOBBERED",A="MN:REGG_C_CLOBBERED"$ and $LK,"REGG_C_TEMP_CLOBBERED",A="MN:REGG_C_TEMP_CLOBBERED"$. PUSH RBP MOV RBP,RSP MOV RCX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/KernelA.HPP,SF_ARG1"$ @@ -41,7 +40,7 @@ _extern _BEEPS U0 Beeps(I64 cnt); I64 AsmAndC1() { I64 noreg i; //Normally this would be stored in a reg - //Check by unassembling with $LK,"Uf",A="MN:Uf"$("AsmAndC1"). +//Check by unassembling with $LK,"Uf",A="MN:Uf"$("AsmAndC1"). i=GetI64("Num of beeps 1-5 (%d):",3,1,5); Beeps(i); @@ -49,31 +48,29 @@ I64 AsmAndC1() asm { //You can clobber RAX,RBX,RCX,RDX. The compiler expects that. -USE64 //Defaults to 64, but this is a good habit. + IMPORT Snd; //Import an not use & or don't import and use &Snd. + MOV RCX,&i[RBP] //You can clobber RAX,RBX,RCX,RDX. +//You better preserve the rest. - IMPORT Snd; //Import an not use & or don't import and use &Snd. - MOV RCX,&i[RBP] //You can clobber RAX,RBX,RCX,RDX. - //You better preserve the rest. - -@@05: PUSH RCX + @@05: PUSH RCX //U0 $LK,"Snd",A="MN:Snd"$(F64 freq); - MOV RAX,RCX //freq=loop*100.0+100.0 - IMUL2 RAX,100 //TempleOS uses nonstandard opcodes - //to avoid multiple form of the same one. - //See $LK,"::/Compiler/OpCodes.TXT"$. - ADD RAX,100 - PUSH RAX - FILD U64 [RSP] //Convert from int to floating - FSTP U64 [RSP] + MOV RAX,RCX //freq=loop*100.0+100.0 + IMUL2 RAX,100 //TempleOS uses nonstandard opcodes +//to avoid multiple form of the same one. + //See $LK,"::/Compiler/OpCodes.TXT"$. + ADD RAX,100 + PUSH RAX + FILD U64 [RSP] //Convert from int to floating + FSTP U64 [RSP] - CALL Snd + CALL Snd - MOV RCX,cnts.time_stamp_freq>>3 //JIT Const. Simple delay loop + MOV RCX,cnts.time_stamp_freq>>3 //JIT Const. Simple delay loop @@10: LOOP @@10 - POP RCX - LOOP @@05 + POP RCX + LOOP @@05 } Snd(0); return i; diff --git a/Demo/Asm/AsmAndC2.CPP b/Demo/Asm/AsmAndC2.CPP index 281aa73..41e11f8 100644 --- a/Demo/Asm/AsmAndC2.CPP +++ b/Demo/Asm/AsmAndC2.CPP @@ -13,14 +13,13 @@ asm { //Opcodes are slightly different to make writing my x86_64 assembler easier. //See $LK,"::/Compiler/OpCodes.TXT"$. -USE64 //Defaults to 64, but this is a good habit. - JIFFIES_MSG: DU8 "Jiffies:",0; //See $LK,"::/Kernel/StrA.CPP",A="FL:::/Kernel/StrA.CPP,1"$ and $LK,"::/Kernel/KUtils.CPP"$. _BEEPS2:: //You can clobber RAX,RBX,RCX,RDX,R8,R9. The compiler expects that. +//See $LK,"REGG_C_CLOBBERED",A="MN:REGG_C_CLOBBERED"$ and $LK,"REGG_C_TEMP_CLOBBERED",A="MN:REGG_C_TEMP_CLOBBERED"$. PUSH RBP MOV RBP,RSP MOV RCX,U64 SF_ARG1[RBP] //$LK,"SF_ARG1",A="FF:::/Kernel/KernelA.HPP,SF_ARG1"$ @@ -35,7 +34,7 @@ _BEEPS2:: POP RCX LOOP @@05 - PUSH RSI //See $LK,"REG_VARS_MASK",A="MN:REG_VARS_MASK"$ & $LK,"REG_NON_PTR_MASK",A="MN:REG_NON_PTR_MASK"$ + PUSH RSI //See $LK,"REGG_C_LOCAL_VARS",A="MN:REGG_C_LOCAL_VARS"$ & $LK,"REGG_C_LOCAL_NON_PTR_VARS",A="MN:REGG_C_LOCAL_NON_PTR_VARS"$ MOV RSI,JIFFIES_MSG CALL PUT_STR POP RSI @@ -63,30 +62,28 @@ U0 AsmAndC2() Beeps2(i); asm { -LIST + LIST //You can clobber RAX,RBX,RCX,RDX, but preserve the rest. -USE64 //Defaults to 64, but this is a good habit. + MOV RCX,R15 //You can clobber RAX,RBX,RCX,RDX. Preserve the rest. - MOV RCX,R15 //You can clobber RAX,RBX,RCX,RDX. Preserve the rest. - -@@05: PUSH RCX + @@05: PUSH RCX //U0 $LK,"Snd",A="MN:Snd"$(F64 freq); - MOV RAX,RCX //freq=loop*100.0+100.0 - IMUL2 RAX,glbl_hz_step //evaluated at compile ttime - ADD RAX,U64 [&glbl_hz_base] //evaluated at run time - PUSH RAX - FILD U64 [RSP] //Convert from int to floating - FSTP U64 [RSP] + MOV RAX,RCX //freq=loop*100.0+100.0 + IMUL2 RAX,glbl_hz_step //evaluated at compile ttime + ADD RAX,U64 [&glbl_hz_base] //evaluated at run time + PUSH RAX + FILD U64 [RSP] //Convert from int to floating + FSTP U64 [RSP] - CALL &Snd //We can skip IMPORT with & if JIT compiling. + CALL &Snd //We can skip IMPORT with & if JIT compiling. - MOV RCX,cnts.time_stamp_freq>>3 //JIT Const. Simple delay loop. + MOV RCX,cnts.time_stamp_freq>>3 //JIT Const. Simple delay loop. @@10: LOOP @@10 - POP RCX - LOOP @@05 + POP RCX + LOOP @@05 } Snd(0); } diff --git a/Demo/Asm/AsmAndC3.CPP b/Demo/Asm/AsmAndC3.CPP index b379273..f6076bc 100644 --- a/Demo/Asm/AsmAndC3.CPP +++ b/Demo/Asm/AsmAndC3.CPP @@ -10,11 +10,11 @@ U0 AsmAndC3() I64 i; for (i=0;i<3;i++) { "Meaning of life:"; - MOV AL,0x41 - STC - ADC AL,0 //Round-about way to make the not-special constant, 0x42. - CALL PUT_HEX_U8 - MOV RCX,cnts.time_stamp_freq>>5 //JIT Const. Simple delay loop. + MOV AL,0x41 + STC + ADC AL,0 //Round-about way to make the not-special constant, 0x42. + CALL PUT_HEX_U8 + MOV RCX,cnts.time_stamp_freq>>5 //JIT Const. Simple delay loop. @@1: LOOP @@1 '\n'; } diff --git a/Demo/Asm/AsmHelloWorld.CPP b/Demo/Asm/AsmHelloWorld.CPP index 52383bd..83d6721 100644 --- a/Demo/Asm/AsmHelloWorld.CPP +++ b/Demo/Asm/AsmHelloWorld.CPP @@ -23,8 +23,6 @@ asm { //Opcodes are slightly different to make writing my x86_64 assembler easier. //See $LK,"::/Compiler/OpCodes.TXT"$. -USE64 //Defaults to 64, but this is a good habit. - MY_WORLD_MSG: //Define U8 does not put terminating zeros //on strings. @@ -33,7 +31,7 @@ MY_WORLD_MSG: //My convention is to put an underscore //on C callable asm routines. _HELLO_WORLD:: - PUSH RSI //See $LK,"REG_VARS_MASK",A="MN:REG_VARS_MASK"$ & $LK,"REG_NON_PTR_MASK",A="MN:REG_NON_PTR_MASK"$ + PUSH RSI //See $LK,"REGG_C_LOCAL_VARS",A="MN:REGG_C_LOCAL_VARS"$ & $LK,"REGG_C_LOCAL_NON_PTR_VARS",A="MN:REGG_C_LOCAL_NON_PTR_VARS"$ MOV RCX,10 @@05: MOV RAX,RCX CALL PUT_HEX_U8 diff --git a/Demo/Asm/BuzzFizz.CPP b/Demo/Asm/BuzzFizz.CPP index cfd9593..7ce7755 100644 --- a/Demo/Asm/BuzzFizz.CPP +++ b/Demo/Asm/BuzzFizz.CPP @@ -8,7 +8,7 @@ asm { _BUZZ_FIZZ:: PUSH RBP MOV RBP,RSP //Always set-up stk frame. (Stack Gets Traced) - PUSH RSI //See $LK,"REG_VARS_MASK",A="MN:REG_VARS_MASK"$ & $LK,"REG_NON_PTR_MASK",A="MN:REG_NON_PTR_MASK"$ + PUSH RSI //See $LK,"REGG_C_LOCAL_VARS",A="MN:REGG_C_LOCAL_VARS"$ & $LK,"REGG_C_LOCAL_NON_PTR_VARS",A="MN:REGG_C_LOCAL_NON_PTR_VARS"$ PUSH RDI MOV RSI,FIZZ_SPAN-RANGE_START%FIZZ_SPAN+1 MOV RDI,BUZZ_SPAN-RANGE_START%BUZZ_SPAN+1 diff --git a/Demo/Asm/MulByHand.CPP b/Demo/Asm/MulByHand.CPP index 8138308..b72be9c 100644 --- a/Demo/Asm/MulByHand.CPP +++ b/Demo/Asm/MulByHand.CPP @@ -7,8 +7,6 @@ asm { //Opcodes are slightly different to make writing my x86_64 assembler easier. //See $LK,"::/Compiler/OpCodes.TXT"$. -USE64 //Defaults to 64, but this is a good habit. - //You can clobber RAX,RBX,RCX,RDX,R8,R9. The compiler expects that. MUL_BY_HAND_U8_U8_TO_U16: //This is only for fun. diff --git a/Demo/Asm/PutDec.CPP b/Demo/Asm/PutDec.CPP index 6c41ac9..26b075d 100644 --- a/Demo/Asm/PutDec.CPP +++ b/Demo/Asm/PutDec.CPP @@ -10,7 +10,7 @@ PUT_DEC_U64:: //but this function will be nice for ASM callers if it saves all regs. PUSH_C_REGS - PUSH RSI //See $LK,"REG_VARS_MASK",A="MN:REG_VARS_MASK"$ & $LK,"REG_NON_PTR_MASK",A="MN:REG_NON_PTR_MASK"$ + PUSH RSI //See $LK,"REGG_C_LOCAL_VARS",A="MN:REGG_C_LOCAL_VARS"$&$LK,"REGG_C_LOCAL_NON_PTR_VARS",A="MN:REGG_C_LOCAL_NON_PTR_VARS"$ LEA RSI,-1[RBP] //Load addr of end of buffer. //We picked RSI because of PUT_STR //We'll move bwd @@ -38,7 +38,7 @@ PUT_DEC_U64:: LEAVE RET -_DO_IT:: //The convention is C-callable routines have underscores. +_DO_IT:: //The convention is C-callable routines have underscores. MOV RAX,122333221 CALL PUT_DEC_U64 MOV RAX,'\n' diff --git a/Demo/ClassMeta.CPP b/Demo/ClassMeta.CPP index 71b3bc2..7940f75 100644 --- a/Demo/ClassMeta.CPP +++ b/Demo/ClassMeta.CPP @@ -40,21 +40,21 @@ U0 DumpStruct(U8 *_d,U8 *class_name=lastclass) while (ml) { "%s:",ml->str; -//All our items are I64's. If you want, you can check -//the data type of the member var. See $LK,"ClassRep",A="MN:ClassRep"$(). + //All our items are I64's. If you want, you can check + //the data type of the member var. See $LK,"ClassRep",A="MN:ClassRep"$(). q=_d+ml->offset; if (print_str=MemberMetaData("print_str",ml)) "" print_str,*q; -//This is slightly ambiguous -- if no meta is present it will return zero. + //This is slightly ambiguous -- if no meta is present it will return zero. if (dft_val=MemberMetaData("dft_val",ml)) " default:%d",dft_val; -//This corrects for the ambiguity, allowing zero percentile. + //This corrects for the ambiguity, allowing zero percentile. if (MemberMetaFind("percentile",ml)) {//check if it exists //We could use the $LK,"CMemberLstMeta",A="MN:CMemberLstMeta"$ structure returned by -//$LK,"MemberMetaFind",A="MN:MemberMetaFind"$() and save a search. + //$LK,"MemberMetaFind",A="MN:MemberMetaFind"$() and save a search. percentile=MemberMetaData("percentile",ml)(F64); " percentile: %5.2f",percentile; } diff --git a/Demo/CompileDemo.CPP b/Demo/CompileDemo.CPP index 672e70c..32649f1 100644 --- a/Demo/CompileDemo.CPP +++ b/Demo/CompileDemo.CPP @@ -3,24 +3,24 @@ F64 glbl; F64 CompileDemo(U8 *st) { I64 type; - U8 *ex; - CLex *lx=LexNew(st,LF_DONT_FREE_BUF); + U8 *machine_code; + CCmpCtrl *cc=CmpCtrlNew(st,CCF_DONT_FREE_BUF); F64 result=0; - Lex(lx); //Gotta get it started + Lex(cc); //Gotta get it started "Compile \"%s\"\n",st; do { - if (ex=LexExpression2Bin(lx,&type)) { + if (machine_code=LexExpression2Bin(cc,&type)) { if (type!=RT_F64) - result=ToF64(Call(ex)); + result=ToF64(Call(machine_code)); else - result=Call(ex)(F64); - Free(ex); + result=Call(machine_code)(F64); + Free(machine_code); } "result=%9.4f\n",result; - if (lx->token==';') - Lex(lx); - } while (lx->token!=TK_EOF); //end of file? - LexDel(lx); + if (cc->token==';') + Lex(cc); + } while (cc->token!=TK_EOF); //end of file? + CmpCtrlDel(cc); return result; } diff --git a/Demo/DolDoc/CallBack.CPP b/Demo/DolDoc/CallBack.CPP index 222f980..54c3b80 100644 --- a/Demo/DolDoc/CallBack.CPP +++ b/Demo/DolDoc/CallBack.CPP @@ -1,8 +1,8 @@ U8 *tSCB(CDoc *,CDocEntry *,CTask *mem_task) {//This is called by the window mgr. //Things would get corrupted -//if the window mgr used it's own -//heap, so we use the owning task's heap. + //if the window mgr used it's own + //heap, so we use the owning task's heap. U8 *st=MAlloc(64,mem_task); CDate cdt=tS*CDATE_FREQ; //Doesn't have to be fixed width!! @@ -30,18 +30,18 @@ U0 DoIt() doc_e=DocPrint(bdoc,"$$TX+TC,\" \"$$"); //The TC flag is "has tag callback". -//Flags are explained here: -//$LK,"::/Doc/DolDocOverview.TXT"$ $LK,"::/Doc/Widget.TXT"$ -//$LK,"Dollar Flags",A="MN:DOCEf_TAG"$ $LK,"ST_DOC_FLAGS",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$ + //Flags are explained here: + //$LK,"::/Doc/DolDocOverview.TXT"$ $LK,"::/Doc/Widget.TXT"$ + //$LK,"Dollar Flags",A="MN:DOCEf_TAG"$ $LK,"ST_DOC_FLAGS",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$ doc_e->tag_cb=&tSCB; DocPrint(bdoc,"$$FG$$"); DocUnlock(bdoc); -//$BK,1$WARNING:$BK,0$ If you use the put_doc you -//run the risk of the user pressing -// or using the clipboard, both -//of which will crash. So, you might want -//to use the border_doc. + //$BK,1$WARNING:$BK,0$ If you use the put_doc you + //run the risk of the user pressing + // or using the clipboard, both + //of which will crash. So, you might want + //to use the border_doc. DocLock(pdoc); DocPrint(pdoc,"$$LTRED$$"); @@ -50,9 +50,9 @@ U0 DoIt() DocPrint(pdoc,"$$FG$$"); DocUnlock(pdoc); -//Send carriage return, new line, so -//that the timer string is not part -//of the next cmd on the cmd line. + //Send carriage return, new line, so + //that the timer string is not part + //of the next cmd on the cmd line. '\n'; } diff --git a/Demo/DolDoc/ClickCallBack.CPP b/Demo/DolDoc/ClickCallBack.CPP index 8583408..83b132f 100644 --- a/Demo/DolDoc/ClickCallBack.CPP +++ b/Demo/DolDoc/ClickCallBack.CPP @@ -17,9 +17,9 @@ U0 ClickCallBack() doc_e=DocPrint(DocPut,"\n$$MA+LC,\"Click Me\"$$ "); //The LC flag is "has left callback". -//Flags are explained here: -//$LK,"::/Doc/DolDocOverview.TXT"$ $LK,"::/Doc/Widget.TXT"$ -//$LK,"Dollar Flags",A="MN:DOCEf_TAG"$ $LK,"ST_DOC_FLAGS",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$ + //Flags are explained here: + //$LK,"::/Doc/DolDocOverview.TXT"$ $LK,"::/Doc/Widget.TXT"$ + //$LK,"Dollar Flags",A="MN:DOCEf_TAG"$ $LK,"ST_DOC_FLAGS",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$ "(Not preserved when and back.)\n\n"; doc_e->left_cb=&MyLeftCB1; DocUnlock(DocPut); diff --git a/Demo/DolDoc/CursorMove.CPP b/Demo/DolDoc/CursorMove.CPP index b8f22d7..6c61c55 100644 --- a/Demo/DolDoc/CursorMove.CPP +++ b/Demo/DolDoc/CursorMove.CPP @@ -8,9 +8,9 @@ U0 CursorMovementDemo() "$$CM,4,-10$$"; } -//+LX is relative to left side. -//See with cursor-movement for all the flags. -//Check "Quote" to set-up a cmd for in quotes. + //+LX is relative to left side. + //See with cursor-movement for all the flags. + //Check "Quote" to set-up a cmd for in quotes. "$$CM+LX,0,+10$$\n"; } diff --git a/Demo/DolDoc/Data.CPP b/Demo/DolDoc/Data.CPP index 99f98d8..60a0bd5 100644 --- a/Demo/DolDoc/Data.CPP +++ b/Demo/DolDoc/Data.CPP @@ -29,24 +29,24 @@ U0 DataDemo() { CDocEntry *doc_e; -//This is the command line document. + //This is the command line document. CDoc *doc=DocPut; -//We do this to prevent access to -//doc_e->data before it is set. + //We do this to prevent access to + //doc_e->data before it is set. Bool unlock=DocLock(doc); -//You might set the $LK,"DOCF_FORM",A="MN:DOCF_FORM"$ flag. -// doc->flags|=DOCF_FORM -//if you wish. + //You might set the $LK,"DOCF_FORM",A="MN:DOCF_FORM"$ flag. + // doc->flags|=DOCF_FORM + //if you wish. Spawn(&UpdateGlblTask,NULL,"Update Glbl",,Fs); "Enter editor overstrike mode\n" - "and you can modify the val.\n" - "However, changes happen immediately,\n" - "so it's tricky.\n\n"; - //Use for the $$DA...$$ format. + "and you can modify the val.\n" + "However, changes happen immediately,\n" + "so it's tricky.\n\n"; +//Use for the $$DA...$$ format. doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=I16,A=\"%%7d\"$$\n"); doc_e->data=&i; diff --git a/Demo/DolDoc/FileRead.CPP b/Demo/DolDoc/FileRead.CPP index 1bd33a7..1fcb922 100644 --- a/Demo/DolDoc/FileRead.CPP +++ b/Demo/DolDoc/FileRead.CPP @@ -1,15 +1,15 @@ public U0 DocProfile(U8 *filename,I64 flags) { I64 i,*cmd_stats=CAlloc(sizeof(I64)*DOCT_NUM_TYPES), - *flags_stats=CAlloc(sizeof(I64)*64), - *type_flags_stats=CAlloc(sizeof(I64)*64); + *flags_stats=CAlloc(sizeof(I64)*64), + *type_flags_stats=CAlloc(sizeof(I64)*64); //Note: word wrap is determined by -//doc->win_task when a $LK,"CDoc",A="MN:CDoc"$ is recalculated -//use $LK,"DocRecalc",A="MN:DocRecalc"$(). + //doc->win_task when a $LK,"CDoc",A="MN:CDoc"$ is recalculated + //use $LK,"DocRecalc",A="MN:DocRecalc"$(). CDoc *doc=DocRead(filename,flags); -//doc->root which is equal to doc is the -//header of the CQue and represents the end-of-file marker. + //doc->root which is equal to doc is the + //header of the CQue and represents the end-of-file marker. CDocEntry *doc_e=doc->root.next; while (doc_e!=doc) { cmd_stats[doc_e->type_u8]++; @@ -24,23 +24,35 @@ public U0 DocProfile(U8 *filename,I64 flags) DocDel(doc); "$$PURPLE$$-------%s-------\n",filename; - "$$GREEN$$The lowest byte of the 32-bit 'doc_e->type', '$$PURPLE$$doc_e->type.u8[0]$$GREEN$$', is cmd and accessed with the union '$$PURPLE$$doc_e->type_u8$$GREEN$$'. " - "See $$LK,\"CDocEntry\",A=\"MN:CDocEntry\"$$, " - "$$LK,\"Doc Type Defines\",A=\"MN:DOCT_TEXT\"$$ and $$LK,\"Doc Type Codes\",A=\"FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_CMDS\"$$.\n$$FG$$"; + "$$GREEN$$The lowest byte of the 32-bit 'doc_e->type', " + "'$$PURPLE$$doc_e->type.u8[0]$$GREEN$$', " + "is cmd and accessed with the union " + "'$$PURPLE$$doc_e->type_u8$$GREEN$$'. " + "See $$LK,\"CDocEntry\",A=\"MN:CDocEntry\"$$, " + "$$LK,\"Doc Type Defines\",A=\"MN:DOCT_TEXT\"$$ and " + "$$LK,\"Doc Type Codes\"," + "A=\"FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_CMDS\"$$.\n" + "$$FG$$"; for (i=0;itype.u8[1]$$GREEN$$' is the screen color attr of the entry. " - "'$$PURPLE$$doc_e->type.u16[1]$$GREEN$$' is some flags for blinking and stuff. " - "See $$LK,\"Doc Type Flag Defines\",A=\"MN:DOCET_BLINK\"$$.\n$$FG$$"; + "\n$$GREEN$$'$$PURPLE$$doc_e->type.u8[1]$$GREEN$$' is " + "the screen color attr of the " + "entry. '$$PURPLE$$doc_e->type.u16[1]" + "$$GREEN$$' is some flags for blinking and " + "stuff. See $$LK,\"Doc Type Flag " + "Defines\",A=\"MN:DOCET_BLINK\"$$.\n$$FG$$"; for (i=16;i<32;i++) if (type_flags_stats[i]) "%4d:%d\n",i,type_flags_stats[i]; "$$GREEN$$\n'$$PURPLE$$doc_e->de_flags$$GREEN$$' is 64-bit. " - "See $$LK,\"Doc Flag Defines\",A=\"MN:DOCEf_TAG\"$$ and $$LK,\"Doc Flag Codes\",A=\"FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS\"$$.\n$$FG$$"; + "See $$LK,\"Doc Flag Defines\",A=\"MN:DOCEf_TAG\"$$ and " + "$$LK,\"Doc Flag Codes\"," + "A=\"FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS\"$$.\n" + "$$FG$$"; for (i=0;i<64;i++) if (flags_stats[i]) "%4Z:%d\n",i,"ST_DOC_FLAGS",flags_stats[i]; diff --git a/Demo/DolDoc/Form.CPP b/Demo/DolDoc/Form.CPP index b37464e..ff09342 100644 --- a/Demo/DolDoc/Form.CPP +++ b/Demo/DolDoc/Form.CPP @@ -1,8 +1,8 @@ class FDStruct {//Use and select "Data" to generate the fmtstrs -//The number is the field from after the ':' to the end. -//See $LK,"Data Tag Width",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$. + //The number is the field from after the ':' to the end. + //See $LK,"Data Tag Width",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$. F64 num1 fmtstr "$$DA-TRM,32,RT=F64,A=\"F64 1:%12.8f\"$$\n"; F64 num2 fmtstr "$$DA-TRM,32,RT=F64,A=\"F64 2:%12e\"$$\n"; @@ -26,7 +26,7 @@ U0 FormDemo() StrCpy(&fds.name,"John"); fds.datetime=Now; fds.check=TRUE; - if (DocFormDo(&fds)) { + if (DocForm(&fds)) { "#1\t=%e\n",fds.num1; "#2\t=%e\n",fds.num2; "#3\t=%d\n",fds.num3; @@ -41,7 +41,7 @@ U0 FormDemo() "\n\nClassRep Example\n"; ClassRep(&fds); -//See also $LK,"ClassRepD",A="MN:ClassRepD"$(). + //See also $LK,"ClassRepD",A="MN:ClassRepD"$(). } FormDemo; diff --git a/Demo/DolDoc/MenuButton.CPP b/Demo/DolDoc/MenuButton.CPP index 6fe74cb..9c1d237 100644 --- a/Demo/DolDoc/MenuButton.CPP +++ b/Demo/DolDoc/MenuButton.CPP @@ -40,9 +40,9 @@ U0 MenuButton() else "\n$$BT,\"Snd Off\",LE=MU_SND_OFF$$\n\n\n"; "\n$$BT,\"Set Freq\",LE=MU_SET_FREQ$$\n\n\n" - "\n$$BT,\"Nothing\",LE=MU_NOTHING$$\n\n\n" - "\n$$BT,\"Done\",LE=DOCM_CANCEL$$\n\n\n"; - i=DocMenuDo(DocPut); + "\n$$BT,\"Nothing\",LE=MU_NOTHING$$\n\n\n" + "\n$$BT,\"Done\",LE=DOCM_CANCEL$$\n\n\n"; + i=DocMenu(DocPut); DocBottom; switch (i) { case MU_NOTHING: @@ -67,7 +67,7 @@ U0 MenuButton() } } while (!done); DocPut->flags=DocPut->flags&~DOCF_FORM | - old_flags & DOCF_FORM; + old_flags & DOCF_FORM; DocClear; Snd(0); } diff --git a/Demo/DolDoc/MenuSprite.CPP b/Demo/DolDoc/MenuSprite.CPP index 6334108..242465c 100644 Binary files a/Demo/DolDoc/MenuSprite.CPP and b/Demo/DolDoc/MenuSprite.CPP differ diff --git a/Demo/DolDoc/NumBible.CPP b/Demo/DolDoc/NumBible.CPP new file mode 100644 index 0000000..04fa224 --- /dev/null +++ b/Demo/DolDoc/NumBible.CPP @@ -0,0 +1,28 @@ +// This makes a new Bible file +//with line numbers. + +U0 NumBible() +{ + CDoc *doc_in=DocRead("::/Misc/Bible.TXT.Z",DOCF_PLAIN_TEXT_WITH_TABS), + *doc_out=DocNew("::/Home/NumBible.TXT.Z"); + CDocEntry *doc_e=doc_in->root.next; + while (doc_e!=doc_in) { + if (doc_e->type_u8==DOCT_TEXT) { + DocPrint(doc_out,"%05d %s",doc_e->y+1,doc_e->tag); + doc_e=doc_e->next; + if (doc_e->type_u8==DOCT_NEW_LINE) { + DocPrint(doc_out,"\n"); + doc_e=doc_e->next; + } + } else if (doc_e->type_u8==DOCT_NEW_LINE) { + DocPrint(doc_out,"%05d\n",doc_e->y+1); + doc_e=doc_e->next; + } else + doc_e=doc_e->next; + } + DocWrite(doc_out); + DocDel(doc_out); + DocDel(doc_in); +} + +NumBible; \ No newline at end of file diff --git a/Demo/DolDoc/TreeDemo.CPP b/Demo/DolDoc/TreeDemo.CPP index 322fbe3..7f0fc0b 100644 --- a/Demo/DolDoc/TreeDemo.CPP +++ b/Demo/DolDoc/TreeDemo.CPP @@ -20,7 +20,7 @@ U0 TreeSub(CDoc *doc,CDirEntry *tempde) if (tempde->attr & RS_ATTR_DIR) { DocPrint(doc,"$$TR,\"\"$$"); DocPrint(doc,"$$MA,T=\"%s\",LM=\"Cd(\\\"%s\\\");Dir;\n\"$$\n", - tempde->name,tempde->full_name); + tempde->name,tempde->full_name); if (tempde->sub) { DocPrint(doc,"$$ID,+2$$"); TreeSub(doc,tempde->sub); @@ -28,10 +28,10 @@ U0 TreeSub(CDoc *doc,CDirEntry *tempde) } } else DocPrint(doc,"$$LK,\"%s\",A=\"FI:%s\"$$\n", - tempde->name,tempde->full_name); - //Note there is also a routine - //to delete an entire CDirEntry tree. - //See $LK,"DirTreeDel",A="MN:DirTreeDel"$(). + tempde->name,tempde->full_name); +//Note there is also a routine + //to delete an entire CDirEntry tree. + //See $LK,"DirTreeDel",A="MN:DirTreeDel"$(). DirEntryDel(tempde); tempde=tempde1; } diff --git a/Demo/Dsk/BlkDevRep.CPP b/Demo/Dsk/BlkDevRep.CPP index 10dc01e..5fdb42b 100644 --- a/Demo/Dsk/BlkDevRep.CPP +++ b/Demo/Dsk/BlkDevRep.CPP @@ -4,9 +4,9 @@ U0 BlkDevRep() for (i=0;iattr & RS_ATTR_DIR) { DocPrint(doc,"$$TR,\"\"$$"); DocPrint(doc,"$$MA,T=\"%s\",LM=\"Cd(\\\"%s\\\");Dir;\n\"$$\n", - tempde->name,tempde->full_name); + tempde->name,tempde->full_name); if (tempde->sub) { DocPrint(doc,"$$ID,+2$$"); TreeSub(doc,tempde->sub); @@ -20,10 +20,10 @@ U0 TreeSub(CDoc *doc,CDirEntry *tempde) } } else DocPrint(doc,"$$LK,\"%s\",A=\"FI:%s\"$$\n", - tempde->name,tempde->full_name); - //Note there is also a routine - //to delete an entire CDirEntry tree. - //See $LK,"DirTreeDel",A="MN:DirTreeDel"$(). + tempde->name,tempde->full_name); +//Note there is also a routine + //to delete an entire CDirEntry tree. + //See $LK,"DirTreeDel",A="MN:DirTreeDel"$(). DirEntryDel(tempde); tempde=tempde1; } diff --git a/Demo/Dsk/SerializeTree.CPP b/Demo/Dsk/SerializeTree.CPP index f1b5108..5223855 100644 --- a/Demo/Dsk/SerializeTree.CPP +++ b/Demo/Dsk/SerializeTree.CPP @@ -9,7 +9,7 @@ U0 SerializeTree() CDirEntry *tempde=FilesFind("/Demo/*.TXT*",FUF_RECURSE); I64 size; U8 *ptr; - CArcCompress *ac; + CArcCompress *arc; LineRep1(tempde); //We have $LK,"CDirEntry",A="MN:CDirEntry"$.fullname LineRep2(DocPut,tempde); @@ -18,13 +18,13 @@ U0 SerializeTree() DirTreeDel(tempde); D(ptr,size); "$$GREEN$$***************:%7d$$FG$$\n",size; - ac=CompressBuf(ptr,size); + arc=CompressBuf(ptr,size); Free(ptr); - D(ac,ac->compressed_size); + D(arc,arc->compressed_size); "$$GREEN$$***************:%7d$$FG$$\n",size; - ptr=ExpandBuf(ac); - size=ac->expanded_size; - Free(ac); + ptr=ExpandBuf(arc); + size=arc->expanded_size; + Free(arc); D(ptr,size); "$$GREEN$$***************:%7d$$FG$$\n",size; tempde=DirTreeUnserialize(ptr); diff --git a/Demo/Dsk/UnusedSpaceRep.CPP b/Demo/Dsk/UnusedSpaceRep.CPP index f58d49b..bf61d70 100644 --- a/Demo/Dsk/UnusedSpaceRep.CPP +++ b/Demo/Dsk/UnusedSpaceRep.CPP @@ -7,7 +7,7 @@ U0 UnusedSpaceRep() dv=Let2Drv(i+'A'); if (dv->type==DVT_FAT32 || dv->type==DVT_REDSEA) "%C: %7.3f%% Free\n", - Drv2Let(dv),UnusedDrvSpace(Drv2Let(dv))*100.0/(dv->size*BLK_SIZE); + Drv2Let(dv),UnusedDrvSpace(Drv2Let(dv))*100.0/(dv->size*BLK_SIZE); } catch Fs->catch_except=TRUE; } diff --git a/Demo/Exceptions.CPP b/Demo/Exceptions.CPP index 19579df..b46ece4 100644 --- a/Demo/Exceptions.CPP +++ b/Demo/Exceptions.CPP @@ -24,7 +24,7 @@ U0 D2() if (Prompt(4)) throw('Point4'); } catch { "D2 handler\n" - "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1; + "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1; if (Fs->except_ch=='Point1') { "Caught in D2\n"; Fs->catch_except=TRUE; @@ -39,7 +39,7 @@ U0 Demo() if (Prompt(3)) throw('Point3'); } catch { "Demo handler\n" - "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1; + "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1; Fs->catch_except=TRUE; } } diff --git a/Demo/ExtendedChars.CPP b/Demo/ExtendedChars.CPP index 3423b41..bb4021c 100644 --- a/Demo/ExtendedChars.CPP +++ b/Demo/ExtendedChars.CPP @@ -33,4 +33,4 @@ SrcExample; //See $LK,"::/Demo/ScreenCodes.CPP"$, $LK,"::/Demo/Graphics/CharGraphics.CPP"$, //and $LK,"::/Demo/Graphics/FontEd.CPP"$. -//See $LK,"chars_bitmap_alpha",A="MN:chars_bitmap_alpha"$ and $LK,"chars_bitmap_alpha_numeric",A="MN:chars_bitmap_alpha_numeric"$. +//See $LK,"chars_bmp_alpha",A="MN:chars_bmp_alpha"$ and $LK,"chars_bmp_alpha_numeric",A="MN:chars_bmp_alpha_numeric"$. diff --git a/Demo/Games/BattleLines.CPP b/Demo/Games/BattleLines.CPP index a2109d4..7d88d21 100644 Binary files a/Demo/Games/BattleLines.CPP and b/Demo/Games/BattleLines.CPP differ diff --git a/Demo/Games/BigGuns.CPP b/Demo/Games/BigGuns.CPP index e3e9305..2c6a207 100644 Binary files a/Demo/Games/BigGuns.CPP and b/Demo/Games/BigGuns.CPP differ diff --git a/Demo/Games/BlackDiamond.CPP b/Demo/Games/BlackDiamond.CPP index 63b799c..79339c7 100644 Binary files a/Demo/Games/BlackDiamond.CPP and b/Demo/Games/BlackDiamond.CPP differ diff --git a/Demo/Games/BomberGolf.CPP b/Demo/Games/BomberGolf.CPP index 8e20311..6eaddad 100644 Binary files a/Demo/Games/BomberGolf.CPP and b/Demo/Games/BomberGolf.CPP differ diff --git a/Demo/Games/BugBird.CPP b/Demo/Games/BugBird.CPP index a03ecda..e60a6fc 100644 Binary files a/Demo/Games/BugBird.CPP and b/Demo/Games/BugBird.CPP differ diff --git a/Demo/Games/CastleFrankenstein.CPP b/Demo/Games/CastleFrankenstein.CPP index 5555e98..18ef3eb 100644 --- a/Demo/Games/CastleFrankenstein.CPP +++ b/Demo/Games/CastleFrankenstein.CPP @@ -1,7 +1,7 @@ //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. -AcctRegSetDftEntry("TempleOS/CastleFrankenstein","F64 best_score=9999;\n"); -AcctRegExeBranch("TempleOS/CastleFrankenstein"); +RegSetDftEntry("TempleOS/CastleFrankenstein","F64 best_score=9999;\n"); +RegExeBranch("TempleOS/CastleFrankenstein"); //Set snap to 4 and width to 4 //if you edit this map. @@ -109,7 +109,7 @@ class Monster U0 CFTransform(CDC *dc,I64 *x,I64 *y,I64 *z) { I64 zz; - GrRot(dc->r,x,y,z); + Mat4x4MulXYZ(dc->r,x,y,z); zz=SCREEN_SCALE/3+*z; if (zz<1) zz=1; *x=SCREEN_SCALE/2* *x/zz; @@ -132,37 +132,38 @@ Bool LOSPlot(U8 *,I64 x,I64 y,I64) Bool LOS(I64 x1,I64 y1,I64 x2,I64 y2) {//Line of sight return Line(NULL,x1*LOS_SCALE/SCREEN_SCALE,y1*LOS_SCALE/SCREEN_SCALE,0, - x2*LOS_SCALE/SCREEN_SCALE,y2*LOS_SCALE/SCREEN_SCALE,0,&LOSPlot); + x2*LOS_SCALE/SCREEN_SCALE,y2*LOS_SCALE/SCREEN_SCALE,0,&LOSPlot); } U0 DrawIt(CTask *task,CDC *dc) { I64 i,j,*r1,*r2,*r3,*s2w,xx,yy,zz,x,y,x1,y1,z1, - c,x1w,y1w,x1h,y1h,xh,yh,zh, - cx=task->pix_width/2, - cy=task->pix_height/2; + c,x1w,y1w,x1h,y1h,xh,yh,zh, + cx=task->pix_width/2, + cy=task->pix_height/2; CSprite *temps; F64 tt; CD3I32 poly[4]; Monster *tempm; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); MemSet(panels_processed_bitmap,0,(map_width*map_height+7)>>3); //World to screen - GrRotZEqu(dc->r,man_é+ã/2); - GrRotXEqu(dc->r,ã/2); - GrSetRotMat(dc,dc->r); + Mat4x4RotZ(dc->r,man_é+ã/2); + Mat4x4RotX(dc->r,ã/2); + DCMat4x4Set(dc,dc->r); xh=-man_xx/SCREEN_SCALE; yh=-man_yy/SCREEN_SCALE; zh=0; - GrRot(dc->r,&xh,&yh,&zh); - GrSetTranslation(dc->r,xh,yh,zh); + Mat4x4MulXYZ(dc->r,&xh,&yh,&zh); + Mat4x4TranslationEqu(dc->r,xh,yh,zh); //Screen to world - s2w=GrRotXNew(-ã/2,task); - GrRotZEqu(s2w,-man_é-ã/2); + s2w=Mat4x4IdentNew(task); + Mat4x4RotX(s2w,-ã/2); + Mat4x4RotZ(s2w,-man_é-ã/2); xh=0; yh=0; zh=SCREEN_SCALE; - GrRot(s2w,&xh,&yh,&zh); + Mat4x4MulXYZ(s2w,&xh,&yh,&zh); //Rotate light source xx=dc->ls.x; yy=dc->ls.y; zz=-dc->ls.z; @@ -173,15 +174,17 @@ U0 DrawIt(CTask *task,CDC *dc) dc->transform=&CFTransform; dc->x=cx; dc->y=cy; - r1=GrRotXNew(-ã/2,task); - GrRotZEqu(r1,tS); - GrScaleEqu(r1,MONSTER_SCALE); + r1=Mat4x4IdentNew(task); + Mat4x4RotX(r1,-ã/2); + Mat4x4RotZ(r1,tS); + Mat4x4Scale(r1,MONSTER_SCALE); - r2=GrIdentNew(task); - GrScaleEqu(r2,MONSTER_SCALE); + r2=Mat4x4IdentNew(task); + Mat4x4Scale(r2,MONSTER_SCALE); - r3=GrRotXNew(-ã/2,task); - GrScaleEqu(r3,PLANT_SCALE); + r3=Mat4x4IdentNew(task); + Mat4x4RotX(r3,-ã/2); + Mat4x4Scale(r3,PLANT_SCALE); x1h=man_xx+yh*PLOT_GRID_WIDTH/2+xh*(PLOT_GRID_HEIGHT-1); y1h=man_yy-xh*PLOT_GRID_WIDTH/2+yh*(PLOT_GRID_HEIGHT-1); @@ -193,10 +196,10 @@ U0 DrawIt(CTask *task,CDC *dc) xx=x1w/SCREEN_SCALE; yy=y1w/SCREEN_SCALE; x=xx*SCREEN_SCALE-man_xx; y=yy*SCREEN_SCALE-man_yy; if (1<=xxcolor=DKGRAY; else @@ -218,14 +221,14 @@ U0 DrawIt(CTask *task,CDC *dc) x1=x+SCREEN_SCALE/2; y1=y+SCREEN_SCALE/2; z1=0; - GrTransform(dc,&x1,&y1,&z1); + DCTransform(dc,&x1,&y1,&z1); if (z1>0) SpriteMat3B(dc,x+SCREEN_SCALE/2,y+SCREEN_SCALE/2,0,$IB,"<5>",BI=5$,r3); } else if (c==YELLOW) { x1=x+SCREEN_SCALE/2; y1=y+SCREEN_SCALE/2; z1=0; - GrTransform(dc,&x1,&y1,&z1); + DCTransform(dc,&x1,&y1,&z1); if (z1>0) SpriteMat3B(dc,x+SCREEN_SCALE/2,y+SCREEN_SCALE/2,0,$IB,"<6>",BI=6$,r3); } @@ -313,7 +316,7 @@ U0 DrawIt(CTask *task,CDC *dc) xx=x; yy=y; zz=0; - GrTransform(dc,&xx,&yy,&zz); + DCTransform(dc,&xx,&yy,&zz); if (zz>0) { if (tempm->dead) SpriteMat3B(dc,x,y,0,$IB,"<2>",BI=2$,r2); @@ -332,11 +335,11 @@ U0 DrawIt(CTask *task,CDC *dc) //Draw Map heads-up display, scaled 2 pixs Free(dc->r); - GrSetRotMat(dc,GrIdentNew(task)); + DCMat4x4Set(dc,Mat4x4IdentNew(task)); dc->x=task->pix_width -2*map_width; dc->y=task->pix_height-2*map_height; dc->z=0; - dc->transform=&GrTransform; + dc->transform=&DCTransform; dc->pen_width=2; for (i=0;icolor=LTPURPLE; + dc->color=LTPURPLE; for (i=0,tempm=monsters;idead) - GrPlot3(dc,2*(tempm->x/SCREEN_SCALE),2*(map_height-1-tempm->y/SCREEN_SCALE),0); + GrPlot3(dc,2*(tempm->x/SCREEN_SCALE), + 2*(map_height-1-tempm->y/SCREEN_SCALE),0); dc->color=LTCYAN; GrPlot3(dc,2*(man_xx/SCREEN_SCALE),2*(map_height-1-man_yy/SCREEN_SCALE),0); @@ -363,7 +367,8 @@ U0 DrawIt(CTask *task,CDC *dc) GrLine(dc,cx,cy-5,cx,cy+5); tt=tS; } - GrPrint(dc,0,0,"Enemy:%d Time:%3.2f Best:%3.2f",monsters_left,tt-t0,best_score); + GrPrint(dc,0,0,"Enemy:%d Time:%3.2f Best:%3.2f", + monsters_left,tt-t0,best_score); Free(s2w); } @@ -378,7 +383,7 @@ U0 Fire() x=tempm->x; y=tempm->y; if (!tempm->dead && - LOS(x,y,man_xx,man_yy)) { + LOS(x,y,man_xx,man_yy)) { dx=x-man_xx; dy=man_yy-y; if (d=Sqrt(dx*dx+dy*dy)) { @@ -449,17 +454,17 @@ U0 AnimateTask(I64) else y+=dd; if (0<=x<=map_width*SCREEN_SCALE && - 0<=y<=map_height*SCREEN_SCALE && - map[(y/SCREEN_SCALE)*map_width+x/SCREEN_SCALE]) { + 0<=y<=map_height*SCREEN_SCALE && + map[(y/SCREEN_SCALE)*map_width+x/SCREEN_SCALE]) { if (!map[(y/SCREEN_SCALE)*map_width+x/SCREEN_SCALE+1] && - x-RoundI64(x,SCREEN_SCALE)>SCREEN_SCALE/2 || - !map[(y/SCREEN_SCALE)*map_width+x/SCREEN_SCALE-1] && - x-RoundI64(x,SCREEN_SCALE)SCREEN_SCALE/2 || + !map[(y/SCREEN_SCALE)*map_width+x/SCREEN_SCALE-1] && + x-RoundI64(x,SCREEN_SCALE)SCREEN_SCALE/2 || - !map[(y/SCREEN_SCALE-1)*map_width+x/SCREEN_SCALE] && - y-RoundI64(y,SCREEN_SCALE)SCREEN_SCALE/2 || + !map[(y/SCREEN_SCALE-1)*map_width+x/SCREEN_SCALE] && + y-RoundI64(y,SCREEN_SCALE)x=x; tempm->y=y; @@ -482,9 +487,9 @@ U0 SongTask(I64) Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) { - Play("2q.A#1eG2AeA#qAq.A#1eG2eAeA#qA"); - Play("q.A#1eG2A#A1qG2q.A#1eG2A#A1qG"); - Play("3eA#A2qG3eA#A2qG3eA#A2G3AA#A2qG"); + Play("2q.A#1eG2AeA#qAq.A#1eG2eAeA#qA"); + Play("q.A#1eG2A#A1qG2q.A#1eG2A#A1qG"); + Play("3eA#A2qG3eA#A2qG3eA#A2G3AA#A2qG"); } } @@ -520,23 +525,23 @@ U0 CastleFrankenstein() { I64 sc; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Play {" - " Restart(,'\n');" - " Fwd(,,SC_CURSOR_UP);" - " Bwd(,,SC_CURSOR_DOWN);" - " Left(,,SC_CURSOR_LEFT);" - " Right(,,SC_CURSOR_RIGHT);" - " Fire(,CH_SPACE);" - "}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Fwd(,,SC_CURSOR_UP);" + " Bwd(,,SC_CURSOR_DOWN);" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + " Fire(,CH_SPACE);" + "}" + ); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->text_attr=DKGRAY<<4+WHITE; - Preempt(OFF); + Preempt; WinBorder; WinMax; AutoComplete; @@ -583,7 +588,8 @@ fs_done: SettingsPop; CleanUp; MenuPop; - AcctRegWriteBranch("TempleOS/CastleFrankenstein","F64 best_score=%5.4f;\n",best_score); + RegWriteBranch("TempleOS/CastleFrankenstein","F64 best_score=%5.4f;\n", + best_score); } CastleFrankenstein; diff --git a/Demo/Games/CircleTrace.CPP b/Demo/Games/CircleTrace.CPP index 0e5e30e..8a3920f 100644 --- a/Demo/Games/CircleTrace.CPP +++ b/Demo/Games/CircleTrace.CPP @@ -2,8 +2,8 @@ //Giotto, a famous artist, drew a freehand circle as a portfolio for a job. -AcctRegSetDftEntry("TempleOS/CircleTrace","F64 best_score=999;\n"); -AcctRegExeBranch("TempleOS/CircleTrace"); +RegSetDftEntry("TempleOS/CircleTrace","F64 best_score=999;\n"); +RegExeBranch("TempleOS/CircleTrace"); I64 cx,cy; F64 avg_error=0,elapsed_time=0,total_error=0,score=999; @@ -18,7 +18,8 @@ U0 SongTask(I64) U0 DrawIt(CTask *task,CDC *dc) { - GrPrint(dc,0,0,"Error:%6.3f Time:%6.3f Score:%6.3f Best:%8.3f",avg_error,elapsed_time,score,best_score); + GrPrint(dc,0,0,"Error:%6.3f Time:%6.3f Score:%6.3f Best:%8.3f", + avg_error,elapsed_time,score,best_score); } #define CIRCLE_RADIUS 100 @@ -55,7 +56,7 @@ U0 CircleTrace() GrCircle(dc,cx,cy,CIRCLE_RADIUS); do { msg_code=GetMsg(&a1,&a2, - 1<text_attr=DKGRAY<<4+WHITE; DocClear; - //Set default background and foreground +//Set default background and foreground "$$WW,1$$$$BD,DKGRAY$$$$FD,WHITE$$" - "\nThis is a memory game. " - "Try to remember the digits and enter them. " - "They are colored based on electrical " - "engineering color codes.\n"; + "\nThis is a memory game. " + "Try to remember the digits and enter them. " + "They are colored based on electrical " + "engineering color codes.\n"; for (i=0;i<10;i++) "$$FG,%Z$$%d: %Z\n",i,"ST_RAINBOW_10",i,i,"ST_RAINBOW_10"; "$$FG$$\n"; //set to default background @@ -42,7 +42,7 @@ U0 Digits() while (TRUE) { restart: num=0; - //Set to zeros so we have terminators +//Set to zeros so we have terminators MemSet(answer,0,sizeof(answer)); while (TRUE) { DocClear; diff --git a/Demo/Games/DunGen.CPP b/Demo/Games/DunGen.CPP index 7a76be1..ba92163 100644 --- a/Demo/Games/DunGen.CPP +++ b/Demo/Games/DunGen.CPP @@ -1,5 +1,5 @@ -AcctRegSetDftEntry("TempleOS/DunGen","F64 best_score=9999;\n"); -AcctRegExeBranch("TempleOS/DunGen"); +RegSetDftEntry("TempleOS/DunGen","F64 best_score=9999;\n"); +RegExeBranch("TempleOS/DunGen"); //Set snap to 4 and width to 4 //if you edit this map. @@ -43,17 +43,11 @@ $SP,"<10>",BI=10$ $BG$//These are indexed by color #. //See $LK,"COLORS",A="MN:RED"$. -U8 *tiles1[16]= -{NULL,$IB,"<7>",BI=7$ ,$IB,"<5>",BI=5$ ,NULL, - NULL,NULL,NULL,NULL, - $IB,"<6>",BI=6$ ,NULL,NULL,NULL, - NULL,NULL,NULL,NULL}; +U8 *tiles1[16]={NULL,$IB,"<7>",BI=7$ ,$IB,"<5>",BI=5$ ,NULL,NULL,NULL,NULL,NULL, + $IB,"<6>",BI=6$ ,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; -U8 *tiles2[16]= -{NULL,$IB,"<8>",BI=8$ ,$IB,"<5>",BI=5$ ,NULL, - NULL,NULL,NULL,NULL, - $IB,"<6>",BI=6$ ,NULL,NULL,NULL, - NULL,NULL,NULL,NULL}; +U8 *tiles2[16]={NULL,$IB,"<8>",BI=8$ ,$IB,"<5>",BI=5$ ,NULL,NULL,NULL,NULL,NULL, + $IB,"<6>",BI=6$ ,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; #define SCREEN_SCALE 24 #define SCREEN_WIDTH 24 @@ -91,7 +85,7 @@ Bool LOSPlot(U8 *,I64 x,I64 y,I64) Bool LOS(I64 x1,I64 y1,I64 x2,I64 y2) {//Line of sight return Line(NULL,x1*LOS_SCALE+LOS_SCALE/2,y1*LOS_SCALE+LOS_SCALE/2,0, - x2*LOS_SCALE+LOS_SCALE/2,y2*LOS_SCALE+LOS_SCALE/2,0,&LOSPlot); + x2*LOS_SCALE+LOS_SCALE/2,y2*LOS_SCALE+LOS_SCALE/2,0,&LOSPlot); } U0 DrawIt(CTask *task,CDC *dc) @@ -110,9 +104,9 @@ U0 DrawIt(CTask *task,CDC *dc) else _tiles=tiles2; - GrRotXEqu(dc_t->r,60*2*ã/360); - GrRotZEqu(dc_t->r,15*2*ã/360); - GrSetRotMat(dc_t,dc_t->r); + Mat4x4RotX(dc_t->r,60*2*ã/360); + Mat4x4RotZ(dc_t->r,15*2*ã/360); + DCMat4x4Set(dc_t,dc_t->r); dc_t->x=task->pix_width/2; dc_t->y=task->pix_height/2; dc_t->flags|=DCF_TRANSFORMATION; @@ -133,7 +127,7 @@ U0 DrawIt(CTask *task,CDC *dc) x1=x*SCREEN_SCALE; y1=y*SCREEN_SCALE; z1=0; - GrTransform(dc_t,&x1,&y1,&z1); + DCTransform(dc_t,&x1,&y1,&z1); Sprite3(dc,x1,y1,z1,_tiles[color]); } else {//If no tile defined, do solid color. poly[0].x=x*SCREEN_SCALE; @@ -167,14 +161,14 @@ U0 DrawIt(CTask *task,CDC *dc) x1=x*SCREEN_SCALE; y1=y*SCREEN_SCALE; z1=0; - GrTransform(dc_t,&x1,&y1,&z1); + DCTransform(dc_t,&x1,&y1,&z1); Sprite3(dc,x1,y1,z1,$IB,"<9>",BI=9$); } if (xx+1",BI=10$); } } @@ -187,10 +181,10 @@ U0 DrawIt(CTask *task,CDC *dc) x1=(tempm->x-screen_x)*SCREEN_SCALE+SCREEN_SCALE/2; y1=(tempm->y-screen_y)*SCREEN_SCALE+SCREEN_SCALE/2; z1=0; - GrTransform(dc_t,&x1,&y1,&z1); + DCTransform(dc_t,&x1,&y1,&z1); if (tempm->dx<0) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,x1,y1,x1,y1+1); + DCSymmetrySet(dc,x1,y1,x1,y1+1); } else dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); Sprite3(dc,x1,y1,z1,$IB,"<4>",BI=4$); @@ -205,10 +199,10 @@ U0 DrawIt(CTask *task,CDC *dc) if (man_dy!=1) y1-=Saw(tS-man_attack_t0,0.2)*SCREEN_SCALE; } - GrTransform(dc_t,&x1,&y1,&z1); + DCTransform(dc_t,&x1,&y1,&z1); if (man_dx<0) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,x1,y1,x1,y1+1); + DCSymmetrySet(dc,x1,y1,x1,y1+1); } else dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); @@ -228,7 +222,8 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=LTGREEN; tt=tS; } - GrPrint(dc,0,0,"Enemy:%d Time:%3.2f Best:%3.2f",monsters_left,tt-t0,best_score); + GrPrint(dc,0,0,"Enemy:%d Time:%3.2f Best:%3.2f", + monsters_left,tt-t0,best_score); } U0 Attack() @@ -264,7 +259,7 @@ U0 Init() map=MAlloc(map_width*map_height*sizeof(U8)); for (y=0;ytext_attr=BLACK<<4+WHITE; - Preempt(OFF); + Preempt; WinMax; AutoComplete; Init; @@ -370,14 +365,15 @@ U0 DunGen() man_dy=0; Attack; } else - if (man_x+1SCREEN_WIDTH/2-3) { - screen_x+=SCREEN_WIDTH/2; - if (screen_x+SCREEN_WIDTH/2>map_width) - screen_x=map_width-SCREEN_WIDTH/2; + if (man_x+1SCREEN_WIDTH/2-3) { + screen_x+=SCREEN_WIDTH/2; + if (screen_x+SCREEN_WIDTH/2>map_width) + screen_x=map_width-SCREEN_WIDTH/2; + } } - } break; case SC_CURSOR_LEFT: if (man_attack) { @@ -385,14 +381,15 @@ U0 DunGen() man_dy=0; Attack; } else - if (man_x-1>=0 && map[man_y*map_width+(man_x-1)]==DKGRAY) { - man_x--; - if (man_x-screen_x<-SCREEN_WIDTH/2+3) { - screen_x-=SCREEN_WIDTH/2; - if (screen_x-SCREEN_WIDTH/2<0) - screen_x=SCREEN_WIDTH/2; + if (man_x-1>=0 && + map[man_y*map_width+(man_x-1)]==DKGRAY) { + man_x--; + if (man_x-screen_x<-SCREEN_WIDTH/2+3) { + screen_x-=SCREEN_WIDTH/2; + if (screen_x-SCREEN_WIDTH/2<0) + screen_x=SCREEN_WIDTH/2; + } } - } break; case SC_CURSOR_UP: if (man_attack) { @@ -400,14 +397,15 @@ U0 DunGen() man_dy=-1; Attack; } else - if (man_y-1>=0 && map[(man_y-1)*map_width+man_x]==DKGRAY) { - man_y--; - if (man_y-screen_y<-SCREEN_HEIGHT/2+3) { - screen_y-=SCREEN_HEIGHT/2; - if (screen_y-SCREEN_HEIGHT/2<0) - screen_y=SCREEN_HEIGHT/2; + if (man_y-1>=0 && + map[(man_y-1)*map_width+man_x]==DKGRAY) { + man_y--; + if (man_y-screen_y<-SCREEN_HEIGHT/2+3) { + screen_y-=SCREEN_HEIGHT/2; + if (screen_y-SCREEN_HEIGHT/2<0) + screen_y=SCREEN_HEIGHT/2; + } } - } break; case SC_CURSOR_DOWN: if (man_attack) { @@ -415,14 +413,15 @@ U0 DunGen() man_dy=1; Attack; } else - if (man_y+1SCREEN_HEIGHT/2-3) { - screen_y+=SCREEN_HEIGHT/2; - if (screen_y+SCREEN_HEIGHT/2>map_height) - screen_y=map_height-SCREEN_HEIGHT/2; + if (man_y+1SCREEN_HEIGHT/2-3) { + screen_y+=SCREEN_HEIGHT/2; + if (screen_y+SCREEN_HEIGHT/2>map_height) + screen_y=map_height-SCREEN_HEIGHT/2; + } } - } break; } } @@ -439,7 +438,7 @@ dg_done: PutExcept; SettingsPop; MenuPop; - AcctRegWriteBranch("TempleOS/DunGen","F64 best_score=%5.4f;\n",best_score); + RegWriteBranch("TempleOS/DunGen","F64 best_score=%5.4f;\n",best_score); CleanUp; } diff --git a/Demo/Games/EagleDive.CPP b/Demo/Games/EagleDive.CPP index 58478d6..cef6896 100644 --- a/Demo/Games/EagleDive.CPP +++ b/Demo/Games/EagleDive.CPP @@ -1,7 +1,7 @@ //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. -AcctRegSetDftEntry("TempleOS/EagleDive","I64 best_score=0;\n"); -AcctRegExeBranch("TempleOS/EagleDive"); +RegSetDftEntry("TempleOS/EagleDive","I64 best_score=0;\n"); +RegExeBranch("TempleOS/EagleDive"); //Keep these power of two so shift is used instead of multiply //to index arrays. @@ -28,7 +28,7 @@ class Panel { Panel *next; I32 n, //num polygon sides - num; //panel number + num; //panel number CD3I32 *pts; I64 color,cnt; }; @@ -68,8 +68,8 @@ Normally, just spawn a popup task, run it and kill it using an icon. */ I16 elevations[MAP_HEIGHT][MAP_WIDTH]; -I32 normals[MAP_HEIGHT][MAP_WIDTH*2]; -Panel *panels[MAP_HEIGHT][MAP_WIDTH*2]; +CD3 normals[MAP_HEIGHT][MAP_WIDTH]; +Panel *panels[MAP_HEIGHT][MAP_WIDTH]; I64 num_panels; Panel *panel_root; @@ -91,7 +91,7 @@ class MPCtrl { U0 EDTransform(CDC *dc,I64 *x,I64 *y,I64 *z) { I64 zz; - GrRot(dc->r,x,y,z); + Mat4x4MulXYZ(dc->r,x,y,z); *z=zz=-*z; if (zz>0) { *x = *x * DISPLAY_SCALE/ zz; //Foreshortening @@ -102,98 +102,48 @@ U0 EDTransform(CDC *dc,I64 *x,I64 *y,I64 *z) } U0 CalcNormals() -{ -/*The idea is that there are two tris -forming every grid square and we find the normal -vect with a curl. +{/*Find the normal vect with a curl. - i j k - 0 1 dz2 - 1 0 dz1 +i,j and k are the axis unit vectors, +not to be confused with my local index variables. -Normal: -dz1*i + dz2*j - k +i j k +0 1 dz2 +1 0 dz1 - i j k - -1 0 -dz3 - 0 -1 -dz4 - -Normal: --dz3*i - dz4*j + k - - -Basically, we want to combine grid -locations with the same normals. These -are not unit vects for one thing. - -What I came-up with is dz1/dz2 and dz3/dz4. - -It works pretty well. It combines -more than it should, but that's good -because it would result in too many -panels. +Normal: dz1*i + dz2*j - k */ - I64 i,j,k,dz1,dz2; + I64 i,j; for (j=0;j0) - normals[j][k++]=MAX_I32; - else - normals[j][k++]=MIN_I32; - } - - dz1=elevations[j+1][i+1]-elevations[j][i+1]; - dz2=elevations[j+1][i+1]-elevations[j+1][i]; - if (dz2) - normals[j][k++]=dz1<<16/dz2; - else { - if (!dz1) - normals[j][k++]=0; - else if (dz1>0) - normals[j][k++]=MAX_I32; - else - normals[j][k++]=MIN_I32; - } + normals[j][i].x=elevations[j][i+1]-elevations[j][i]; + normals[j][i].y=elevations[j+1][i]-elevations[j][i]; + normals[j][i].z=-1; + D3Unit(&normals[j][i]); } - normals[j][k++]=0; - normals[j][k++]=0; - } - k=0; - for (i=0;i.10) + return FALSE; return TRUE; } U0 MPDoPanels(CTask *task) { - I64 i,j,k,l,k1,k2,w,h,threshold,lo,hi; + I64 i,j,l,k1,k2,w,h,threshold,lo,hi; Bool cont; Panel *tempp,*start_ptr=NULL,*end_ptr=NULL; CD3I32 *poly; @@ -202,9 +152,8 @@ U0 MPDoPanels(CTask *task) hi=(Gs->num+1)*(MAP_HEIGHT-1)/mp.mp_cnt; for (threshold=8;threshold>=1;threshold--) for (j=lo;jnum=num_panels++;} l=elevations[j][i]; if (l<=WATER_ELEVATION*MAP_SCALE && - elevations[j][i+w-1]<=WATER_ELEVATION*MAP_SCALE && - elevations[j+h-1][i]<=WATER_ELEVATION*MAP_SCALE && - elevations[j+h-1][i+w-1]<=WATER_ELEVATION*MAP_SCALE) { + elevations[j][i+w-1]<=WATER_ELEVATION*MAP_SCALE && + elevations[j+h-1][i]<=WATER_ELEVATION*MAP_SCALE && + elevations[j+h-1][i+w-1]<=WATER_ELEVATION*MAP_SCALE) { tempp->color=BLUE; if (Rand<0.05) { tempf=MAlloc(sizeof(Fish),task); @@ -286,13 +235,10 @@ U0 MPDoPanels(CTask *task) if (!end_ptr) end_ptr=tempp; for (k2=0;k2pix_width>>1, - cy=task->pix_height>>1; + xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb, + x3,y3,z3, + cx=task->pix_width>>1, + cy=task->pix_height>>1; Panel reg *tempp; xx=x/(MAP_SCALE*COORDINATE_SCALE); yy=y/(MAP_SCALE*COORDINATE_SCALE); //World to screen coordinates - GrIdentEqu(dc->r); - GrRotZEqu(dc->r,é2); - GrRotXEqu(dc->r,è); - GrRotZEqu(dc->r,é1); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4RotZ(dc->r,é2); + Mat4x4RotX(dc->r,è); + Mat4x4RotZ(dc->r,é1); + DCMat4x4Set(dc,dc->r); //Screen to world coordinates -//This gives us the vects for stepping through the grid in -//the direction the plane is facing. we step horizontally and vertically -//and use the reciprocal slope principle y=mx+b and y=(-1/m)x+b are perpendicular. + //This gives us the vects for stepping through the grid in + //the direction the plane is facing. we step horizontally and vertically + //and use the reciprocal slope principle + //y=mx+b and y=(-1/m)x+b are perpendicular. - s2w=GrIdentNew; - GrRotZEqu(s2w,-é1); - GrRotXEqu(s2w,-è); - GrRotZEqu(s2w,-é2); + s2w=Mat4x4IdentNew; + Mat4x4RotZ(s2w,-é1); + Mat4x4RotX(s2w,-è); + Mat4x4RotZ(s2w,-é2); xh=0; yh=0; zh=-256; - GrRot(s2w,&xh,&yh,&zh); + Mat4x4MulXYZ(s2w,&xh,&yh,&zh); -//The layer for core#1 is not cleared automatically -//it is persistent. I have carefully syncronized to the update -//cycle initiated by core#0 to prevent flicker. + //The layer for core#1 is not cleared automatically + //it is persistent. I have carefully syncronized to the update + //cycle initiated by core#0 to prevent flicker. dc->flags|=DCF_TRANSFORMATION; dc->transform=&EDTransform; dc->x=cx; dc->y=cy; -//dc->x and the translation part of dc->r are identical in effect, -//but we use both to show-off. We could add offsets together and use one or the other. + //dc->x and the translation part of dc->r are identical in effect, + //but we use both to show-off. We could add offsets together and + //use one or the other. x1=-x>>COORDINATE_BITS; y1=-y>>COORDINATE_BITS; z1=-z>>COORDINATE_BITS; - GrRot(dc->r,&x1,&y1,&z1); - GrSetTranslation(dc->r,x1,y1,z1); + Mat4x4MulXYZ(dc->r,&x1,&y1,&z1); + Mat4x4TranslationEqu(dc->r,x1,y1,z1); //This is a refinement. if (Abs(è*180/ã)>90) { x3=0; y3=-cy; z3=0; - GrRot(s2w,&x3,&y3,&z3); + Mat4x4MulXYZ(s2w,&x3,&y3,&z3); xx+=x3; yy+=y3; } @@ -528,13 +469,14 @@ U0 MPDrawIt(CTask *task,CDC *dc) for (j=0;j>8; y1=y1h>>8; if (0<=x1num)) { - if (tempp->cnt>8*(1.1-Gs->idle_factor)) { - dc->color=tempp->color; - tempp->cnt=GrFillPoly3(dc,tempp->n,tempp->pts); - } else - tempp->cnt++; - } + if ((tempp=panels[y1][x1]) && + !LBts(panels_processed_bitmap,tempp->num)) { + if (tempp->cnt>8*(1.1-Gs->idle_factor)) { + dc->color=tempp->color; + tempp->cnt=GrFillPoly3(dc,tempp->n,tempp->pts); + } else + tempp->cnt++; + } } x1h+=xh; y1h+=yh; @@ -566,7 +508,7 @@ U0 APEagleDiveTask(CTask *master_task) MPDrawIt(master_task,dc); } -//We made an alias of this we don't want freed. + //We made an alias of this we don't want freed. dc->depth_buf=NULL; DCDel(dc); @@ -575,30 +517,30 @@ U0 APEagleDiveTask(CTask *master_task) U0 DrawHorizon(CDC *dc) { - I64 x1,y1,z1,x2,y2,z2,xh,yh,zh,*s2w=GrIdentNew, - cx=Fs->pix_width>>1, - cy=Fs->pix_height>>1; + I64 x1,y1,z1,x2,y2,z2,xh,yh,zh,*s2w=Mat4x4IdentNew, + cx=Fs->pix_width>>1, + cy=Fs->pix_height>>1; CD3I32 p[4]; I32 *old_db=dc->depth_buf; dc->depth_buf=NULL; - GrIdentEqu(dc->r); - GrRotZEqu(dc->r,é2); - GrRotXEqu(dc->r,è); - GrRotZEqu(dc->r,é1); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4RotZ(dc->r,é2); + Mat4x4RotX(dc->r,è); + Mat4x4RotZ(dc->r,é1); + DCMat4x4Set(dc,dc->r); dc->flags&=~DCF_TRANSFORMATION; dc->transform=&EDTransform; dc->x=cx; dc->y=cy; - GrRotZEqu(s2w,-é1); - GrRotXEqu(s2w,-è); - GrRotZEqu(s2w,-é2); + Mat4x4RotZ(s2w,-é1); + Mat4x4RotX(s2w,-è); + Mat4x4RotZ(s2w,-é2); xh=0; yh=0; zh=-256; - GrRot(s2w,&xh,&yh,&zh); + Mat4x4MulXYZ(s2w,&xh,&yh,&zh); Free(s2w); x1=xh+yh*32; y1=yh-xh*32; z1=0; @@ -668,8 +610,8 @@ U0 BSPEagleDive() { CDC *dc=DCAlias(main_dc,Fs); I64 i,xx,yy,height,bkcolor, - cx=Fs->pix_width>>1, - cy=Fs->pix_height>>1; + cx=Fs->pix_width>>1, + cy=Fs->pix_height>>1; F64 min_strip_width; Fish *tempf; @@ -716,7 +658,9 @@ U0 BSPEagleDive() min_strip_width=MAX_F64; for (i=0;icolor=bkcolor; GrRect(dc,0,0,dc->width,dc->height); @@ -730,19 +674,21 @@ U0 BSPEagleDive() GrLine3(dc,cx+5,cy,0,cx-5,cy,0); GrLine3(dc,cx,cy+5,0,cx,cy-5,0); GrPrint(dc,0,0,"é1:%5.1f è:%5.1f é2:%5.1f Strip:%5d", - é1*180/ã,è*180/ã,é2*180/ã,strip_height); - GrPrint(dc,0,FONT_HEIGHT,"x:%5.1f y:%5.1f z:%5.1f height:%3d score:%d high:%d", - ToF64(x)/COORDINATE_SCALE,ToF64(y)/COORDINATE_SCALE,ToF64(z)/COORDINATE_SCALE, - height,game_score,best_score); + é1*180/ã,è*180/ã,é2*180/ã,strip_height); + GrPrint(dc,0,FONT_HEIGHT, + "x:%5.1f y:%5.1f z:%5.1f height:%3d score:%d high:%d", + ToF64(x)/COORDINATE_SCALE, + ToF64(y)/COORDINATE_SCALE,ToF64(z)/COORDINATE_SCALE, + height,game_score,best_score); if (game_over && Blink) { dc->color=RED; GrPrint(dc,(Fs->pix_width-9*FONT_WIDTH)/2, - (Fs->pix_height-FONT_HEIGHT)/2,"Game Over"); + (Fs->pix_height-FONT_HEIGHT)/2,"Game Over"); } else if (tS-game_t0<5.0 && Blink) { dc->color=WHITE; GrPrint(dc,(Fs->pix_width-10*FONT_WIDTH)/2, - (Fs->pix_height-FONT_HEIGHT)/2,"Catch Fish"); + (Fs->pix_height-FONT_HEIGHT)/2,"Catch Fish"); } //We made an alias of this we don't want freed. dc->depth_buf=NULL; @@ -761,13 +707,13 @@ U0 AnimateTask(I64) mS=1000*(tS-t0); t0=tS; if (!game_over) { - //Screen to world coordinates - s2w=GrIdentNew; - GrRotZEqu(s2w,-é1); - GrRotXEqu(s2w,-è); - GrRotZEqu(s2w,-é2); +//Screen to world coordinates + s2w=Mat4x4IdentNew; + Mat4x4RotZ(s2w,-é1); + Mat4x4RotX(s2w,-è); + Mat4x4RotZ(s2w,-é2); x1=0;y1=0;z1=-speed*mS*COORDINATE_SCALE; - GrRot(s2w,&x1,&y1,&z1); + Mat4x4MulXYZ(s2w,&x1,&y1,&z1); x+=x1; y+=y1; z+=z1; @@ -779,7 +725,8 @@ U0 AnimateTask(I64) tempf=fish_root.next; while (tempf!=&fish_root) { tempf1=tempf->next; - if (SqrI64(tempf->p.x-x1)+SqrI64(tempf->p.y-y1)p.x-x1)+ + SqrI64(tempf->p.y-y1)best_score) best_score=game_score; @@ -810,7 +757,7 @@ U0 MPEnd() update_jiffy_limit=0; mp.app_not_done_flags=1<draw_it=&DrawIt; break; - } + } é1=Wrap(é1); è =Wrap(è); é2=Wrap(é2); @@ -958,7 +905,7 @@ U0 EagleDive(I64 _mp_cnt=MP_MAX_PROCESSORS) SettingsPop; CleanUp; #ifjit - AcctRegWriteBranch("TempleOS/EagleDive","I64 best_score=%d;\n",best_score); + RegWriteBranch("TempleOS/EagleDive","I64 best_score=%d;\n",best_score); #endif MenuPop; } diff --git a/Demo/Games/ElephantWalk.CPP b/Demo/Games/ElephantWalk.CPP index bdbeb56..2d0f550 100644 Binary files a/Demo/Games/ElephantWalk.CPP and b/Demo/Games/ElephantWalk.CPP differ diff --git a/Demo/Games/FlatTops.CPP b/Demo/Games/FlatTops.CPP index f332b6e..ff5eaa7 100644 --- a/Demo/Games/FlatTops.CPP +++ b/Demo/Games/FlatTops.CPP @@ -36,13 +36,13 @@ class Obj U16 flags; I16 squadron,member_num; F64 x,y,é,dé, - speed,turn_rate, - life_percent, - target_x,target_y, - ship_guns,ship_guns_range, - air_guns,air_guns_range, - fuel,max_fuel,fuel_burn_rate, - death_time,next_action_time; + speed,turn_rate, + life_percent, + target_x,target_y, + ship_guns,ship_guns_range, + air_guns,air_guns_range, + fuel,max_fuel,fuel_burn_rate, + death_time,next_action_time; I32 torpedos,max_torpedos; F64 torpedos_range; U8 fire[(FIRE_WIDTH*FIRE_HEIGHT+7)/8]; @@ -100,7 +100,7 @@ Obj *ObjFind(F64 x,F64 y, F64 dd,best_dd=MAX_F64; while (tempo!=&obj_root) { if (tempo->flags&flag_mask==flag_val && - Bt(&type_mask,tempo->type)&&Bt(&player_mask,tempo->player)) { + Bt(&type_mask,tempo->type)&&Bt(&player_mask,tempo->player)) { dd=Sqr(tempo->x-x)+Sqr(tempo->y-y); if (ddflags&OF_ACTIVE && tempo->flags&OF_SHIP) { - SpriteZ3B(dc,tempo->x,tempo->y,0,imgs[tempo->player][tempo->type],tempo->é+ã/2); + SpriteZ3B(dc,tempo->x,tempo->y,0, + imgs[tempo->player][tempo->type],tempo->é+ã/2); k=0; for (j=0;jfire,k++)) { dc->color=fire_colors[ToI64(k+10*tS)&(FIRE_COLORS-1)]; - GrPlot(dc,tempo->x+FIRE_X_SCALE*(i-FIRE_WIDTH /2+(11*tS+i)%1.7)*Cos(tempo->é)- - FIRE_Y_SCALE*(j-FIRE_HEIGHT/2+(12*tS+j)%1.7)*Sin(tempo->é), - tempo->y+FIRE_Y_SCALE*(j-FIRE_HEIGHT/2+(19*tS+j)%1.7)*Cos(tempo->é)+ - FIRE_X_SCALE*(i-FIRE_WIDTH /2+(13*tS+i)%1.7)*Sin(tempo->é)); + GrPlot(dc, + tempo->x+FIRE_X_SCALE*(i-FIRE_WIDTH /2+(11*tS+i)%1.7) + *Cos(tempo->é)- + FIRE_Y_SCALE*(j-FIRE_HEIGHT/2+(12*tS+j)%1.7)*Sin(tempo->é), + tempo->y+FIRE_Y_SCALE*(j-FIRE_HEIGHT/2+(19*tS+j)%1.7) + *Cos(tempo->é)+ + FIRE_X_SCALE*(i-FIRE_WIDTH /2+(13*tS+i)%1.7)*Sin(tempo->é)); } if (Blink) { dc->color=BLACK; @@ -197,7 +201,8 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=YELLOW; else dc->color=GREEN; - GrLine(dc,tempo->x+5,tempo->y,tempo->x+5+10*tempo->life_percent/100,tempo->y); + GrLine(dc,tempo->x+5,tempo->y, + tempo->x+5+10*tempo->life_percent/100,tempo->y); } dc->color=BLACK; @@ -220,7 +225,8 @@ U0 DrawIt(CTask *task,CDC *dc) tempo=obj_root.next; while (tempo!=&obj_root) { if (tempo->flags&OF_ACTIVE && !(tempo->flags&OF_SHIP)) - SpriteZ3B(dc,tempo->x,tempo->y,0,imgs[tempo->player][tempo->type],tempo->é+ã/2); + SpriteZ3B(dc,tempo->x,tempo->y,0, + imgs[tempo->player][tempo->type],tempo->é+ã/2); if (tempo->flags&OF_SHOOTING) { dc->color=LTRED; GrLine(dc,tempo->x,tempo->y,tempo->target_x,tempo->target_y,3); @@ -231,23 +237,29 @@ U0 DrawIt(CTask *task,CDC *dc) dc->flags|=DCF_TRANSFORMATION; if (cur_timecolor=LTGREEN; - GrArrow3(dc,launch_unit_x1,launch_unit_y1,0,launch_unit_x2,launch_unit_y2,0); + GrArrow3(dc,launch_unit_x1,launch_unit_y1,0, + launch_unit_x2,launch_unit_y2,0); } if (cur_timecolor=LTRED; - GrArrow3(dc,return_unit_x1,return_unit_y1,0,return_unit_x2,return_unit_y2,0); + GrArrow3(dc,return_unit_x1,return_unit_y1,0, + return_unit_x2,return_unit_y2,0); } if (cur_timecolor=YELLOW; - GrArrow3(dc,set_é_unit_x1,set_é_unit_y1,0,set_é_unit_x2,set_é_unit_y2,0); + GrArrow3(dc,set_é_unit_x1,set_é_unit_y1,0, + set_é_unit_x2,set_é_unit_y2,0); } dc->color=YELLOW; - GrPrint(dc,-task->scroll_x,-task->scroll_y,"Game Speed: %5.2f",game_speed); + GrPrint(dc,-task->scroll_x,-task->scroll_y, + "Game Speed: %5.2f",game_speed); dc->color=LTCYAN; - GrPrint(dc,-task->scroll_x,-task->scroll_y+ FONT_HEIGHT,"Player 1: %d",num_alive[0]); + GrPrint(dc,-task->scroll_x,-task->scroll_y+FONT_HEIGHT, + "Player 1: %d",num_alive[0]); dc->color=LTPURPLE; - GrPrint(dc,-task->scroll_x,-task->scroll_y+2*FONT_HEIGHT,"Player 2: %d",num_alive[1]); + GrPrint(dc,-task->scroll_x,-task->scroll_y+2*FONT_HEIGHT, + "Player 2: %d",num_alive[1]); if ((!num_alive[0]||!num_alive[1]) && Blink) { if (!num_alive[1]) { @@ -266,7 +278,7 @@ U0 DrawIt(CTask *task,CDC *dc) U0 Init() { I64 i,fighter,ship,player,squadron, - w=Fs->pix_width,h=Fs->pix_height; + w=Fs->pix_width,h=Fs->pix_height; Squadron *temps; Obj *tempo,*tempo1; QueInit(&obj_root); @@ -322,7 +334,8 @@ U0 Init() tempo1->next_action_time=0; QueIns(tempo1,obj_root.last); - for (squadron=0;squadronx,y-host->y); tempo=obj_root.next; while (tempo!=&obj_root) { - if (tempo->host==host && (squadron<0||tempo->squadron==squadron) && !(tempo->flags&OF_ACTIVE) && - (tempo->squadron<0||squadrons[tempo->squadron].action==SA_PARKED||squadrons[tempo->squadron].action==SA_LAUNCHING)) { - if (tempo->fuel<=0.0) //When low on fuel, not zero, gets launched and captured. + if (tempo->host==host && (squadron<0||tempo->squadron==squadron) && + !(tempo->flags&OF_ACTIVE) && + (tempo->squadron<0||squadrons[tempo->squadron].action==SA_PARKED|| + squadrons[tempo->squadron].action==SA_LAUNCHING)) { + if (tempo->fuel<=0.0) +//When low on fuel, not zero, gets launched and captured. LBts(&squadrons[tempo->squadron].dead_mask,tempo->member_num); else { tempo->flags=tempo->flags&~OF_RETURNING|OF_ACTIVE; @@ -461,7 +478,8 @@ Squadron *SquadronReturn(I64 player,F64 x,F64 y) Obj *ObjSeté(I64 player,F64 x=MAX_F64,F64 y=MAX_F64,F64 é=MAX_F64) { Obj *tempo; - if ((tempo=ObjFind(x,y,,,,1<flags&OF_ACTIVE && !(tempo->flags&OF_RETURNING)) { + if ((tempo=ObjFind(x,y,,,,1<flags&OF_ACTIVE && + !(tempo->flags&OF_RETURNING)) { if (é==MAX_F64) é=Arg(x-tempo->x,y-tempo->y); tempo->dé+=Wrap(é-(tempo->é+tempo->dé),-ã); @@ -553,7 +571,8 @@ U0 AI(I64 player,F64 period) if (tempo->player==player) { if (tempo->type==OT_CARRIER && Rand<5*period) SquadronLaunch(player,tempo->x,tempo->y); - if (tempo->flags&OF_ACTIVE && !(tempo->flags&OF_RETURNING) && Rand<10.0*period) + if (tempo->flags&OF_ACTIVE && !(tempo->flags&OF_RETURNING) && + Rand<10.0*period) SquadronSeté(player,tempo->x,tempo->y,tempo->é+pi/2*(Rand-0.5)); } tempo=tempo->next; @@ -607,7 +626,8 @@ U0 Combat(F64 period) while (tempo!=&obj_root) { tempo->flags&=~OF_SHOOTING; if (tempo->flags&OF_ACTIVE && - (tempo1=ObjFind(tempo->x,tempo->y,OF_ACTIVE,OF_ACTIVE,,1<<(tempo->player^1),&d))) { + (tempo1=ObjFind(tempo->x,tempo->y,OF_ACTIVE,OF_ACTIVE,, + 1<<(tempo->player^1),&d))) { tempo->target_x=tempo1->x; tempo->target_y=tempo1->y; if (tempo1->flags&OF_SHIP) { @@ -656,8 +676,9 @@ U0 Combat(F64 period) while (tempo!=&obj_root) { tempo1=tempo->next; if (tempo->type==OT_FIGHTER && - (tempo->life_percent<=0.0 || tempo->flags&OF_ACTIVE && tempo->fuel<=0.0 || - tempo->host && !(tempo->flags&OF_ACTIVE) && tempo->host->life_percent<=0.0)) + (tempo->life_percent<=0.0 || tempo->flags&OF_ACTIVE && + tempo->fuel<=0.0 || tempo->host && + !(tempo->flags&OF_ACTIVE) && tempo->host->life_percent<=0.0)) ObjDel(tempo); tempo=tempo1; } @@ -746,7 +767,8 @@ U0 AnimateTask(I64) } else if (d>tempo->fuel-250) tempo->flags|=OF_RETURNING; if (tempo->flags&OF_RETURNING) - tempo->dé+=Wrap(Arg(tempo->host->x-tempo->x,tempo->host->y-tempo->y)-(tempo->é+tempo->dé),-ã); + tempo->dé+=Wrap(Arg(tempo->host->x-tempo->x, + tempo->host->y-tempo->y)-(tempo->é+tempo->dé),-ã); } else if (tempo->type==OT_CARRIER) ShipFix(tempo,2.5*period); } @@ -771,28 +793,29 @@ U0 FlatTops() DocCursor; DocClear; PopUpOk("$$GREEN$${Left-Mouse}$$FG$$\t\tChange Course\n" - "$$GREEN$${Right-Mouse}$$FG$$\t\tLaunch Squadron\n" - "$$GREEN$${Right-Double-Mouse}$$FG$$\tReturn Squadron\n" - "$$GREEN$${Ctrl-Left Grab}$$FG$$\tScroll Screen\n"); - Preempt(OFF), - MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Play {" -" Restart(,'\n');" -" Faster(,'+');" -" Slower(,'-');" -"}" -); + "$$GREEN$${Right-Mouse}$$FG$$\t\tLaunch Squadron\n" + "$$GREEN$${Right-Double-Mouse}$$FG$$\tReturn Squadron\n" + "$$GREEN$${Ctrl-Left Grab}$$FG$$\tScroll Screen\n"); + Preempt, + MenuPush( + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Faster(,'+');" + " Slower(,'-');" + "}" + ); Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R; Init; Fs->draw_it=&DrawIt; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); try { while (TRUE) - switch(GetMsg(&a1,&a2,1<pix_width,h=task->pix_height; I64 i,x,y,xx; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; xx=w>>1-car_x+road_x[road_ptr&(NUM_ROAD-1)]; dc->color=LTGRAY; @@ -24,7 +24,7 @@ U0 DrawIt(CTask *task,CDC *dc) GrPlot(dc,x-ROAD_WIDTH_BY_2+0.4*i,y); } dc->color=WHITE; - + x=w>>1-CAR_WIDTH_BY_2; if (x1.0) { road_trend=ClampI64(road_trend+SignI64(RandU16%3-1),-5,5); road_x[road_ptr&(NUM_ROAD-1)]= - road_x[(road_ptr-1)&(NUM_ROAD-1)]+=road_trend/3; + road_x[(road_ptr-1)&(NUM_ROAD-1)]+=road_trend/3; road_ptr++; distance-=1.0; } @@ -82,19 +82,19 @@ U0 Halogen() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->text_attr=BLACK<<4+WHITE; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Play {" - " Restart(,'\n');" - " Accelerate(,,SC_CURSOR_UP);" - " Deccellerate(,,SC_CURSOR_DOWN);" - " Left(,,SC_CURSOR_LEFT);" - " Right(,,SC_CURSOR_RIGHT);" - "}" - ); - Preempt(OFF); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " Accelerate(,,SC_CURSOR_UP);" + " Deccellerate(,,SC_CURSOR_DOWN);" + " Left(,,SC_CURSOR_LEFT);" + " Right(,,SC_CURSOR_RIGHT);" + "}" + ); + Preempt; AutoComplete; WinMax; Init; diff --git a/Demo/Games/MassSpring.CPP b/Demo/Games/MassSpring.CPP index 6de5e35..93e16d2 100644 --- a/Demo/Games/MassSpring.CPP +++ b/Demo/Games/MassSpring.CPP @@ -9,18 +9,16 @@ class MySpring:CSpring CMathODE *ode=NULL; -U0 DrawIt(CTask *task,CDC *dc) +U0 DrawIt(CTask *,CDC *dc) { - Bool old_suspend; MyMass *tempm; MySpring *temps; - old_suspend=Suspend(task); dc->color=RED; temps=ode->next_spring; while (temps!=&ode->next_spring) { GrLine(dc,temps->end1->x,temps->end1->y, - temps->end2->x,temps->end2->y); + temps->end2->x,temps->end2->y); temps=temps->next; } @@ -30,13 +28,12 @@ U0 DrawIt(CTask *task,CDC *dc) GrCircle(dc,tempm->x,tempm->y,tempm->radius); tempm=tempm->next; } - Suspend(task,old_suspend); } U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) {//The forces due to springs and drag are //automatically handled by the ode code. -//We can add new forces here. + //We can add new forces here. F64 d,dd; CD3 p; MyMass *tempm1,*tempm2; @@ -106,13 +103,13 @@ U0 MassSpringDemo() MyMass *tempm1=NULL,*tempm2=NULL; PopUpOk("Left-Click to place mas\n" - "Right-Click and drag to\n" - "connect with spring.\n\n" - "Springs are 100 pixs long.\n"); + "Right-Click and drag to\n" + "connect with spring.\n\n" + "Springs are 100 pixs long.\n"); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; -/*Preempt(OFF) eliminates a lot of hassles. + /*Preempt eliminates a lot of hassles. The concern is about changing que links while the winmgr task is updating the ode or screen. @@ -124,20 +121,20 @@ preempt, we will not be interrupted. There is little downside to Preempt() since we will yield during GetMsg(). */ - Preempt(OFF); + Preempt; Fs->win_inhibit|=WIG_DBL_CLICK; AutoComplete; MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Play {" -" Restart(,'\n');" -"}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + "}" + ); Init; DocCursor; @@ -146,7 +143,8 @@ since we will yield during GetMsg(). try { while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<>8,"Draw a maze with left button."); TextPrint(task,0,1,ATTR>>8,"Solve maze starting at right click."); @@ -43,7 +43,7 @@ U0 SolveMaze(I64 x,I64 y) stk_dir[stk_ptr++]=dir; while (TRUE) { if (!(0<=xwin_width,TEXT_COLS)) || - !(0<=ywin_height,TEXT_ROWS)) ) { + !(0<=ywin_height,TEXT_ROWS)) ) { Beep;Beep; break; } @@ -51,7 +51,7 @@ U0 SolveMaze(I64 x,I64 y) text[y][x]='.'+ATTR; x+=dir_x[dir]; y+=dir_y[dir]; - //u8.[0] is the ASCII +//u8.[0] is the ASCII if (text[y][x].u8[0]) { x-=dir_x[dir]; y-=dir_y[dir]; @@ -91,7 +91,7 @@ U0 Maze() do { MemSet(text,0,sizeof(text)); while (!(ch=ScanChar)) { - //Input Ptr (mouse) text x,y coordinates. +//Input Ptr (mouse) text x,y coordinates. x=ip.pos_text.x-Fs->win_left-Fs->scroll_x/FONT_WIDTH; y=ip.pos_text.y-Fs->win_top-Fs->scroll_y/FONT_HEIGHT; if (ip.lb&&!winmgr.grab_scroll) diff --git a/Demo/Games/RainDrops.CPP b/Demo/Games/RainDrops.CPP index 837d95c..c3b1646 100644 --- a/Demo/Games/RainDrops.CPP +++ b/Demo/Games/RainDrops.CPP @@ -12,7 +12,7 @@ CDC *cur_dc; U0 DrawFrame(CTask *task,CDC *dc) { I64 w=task->pix_width,h=task->pix_height, - cx=w>>1,cy=h>>1; + cx=w>>1,cy=h>>1; dc->color=LTRED; GrLine(dc,cx-20,cy-50,cx,cy-150); @@ -56,10 +56,11 @@ U0 DrawDrops(CTask *,CDC *dc) U0 UpdateCurBase(CTask *task,CDC *dc) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; cur_dc->color=ROP_EQU; dc->flags|=DCF_NO_TRANSPARENTS; - GrBlot(cur_dc,-task->pix_left-task->scroll_x,-task->pix_top-task->scroll_y,dc); + GrBlot(cur_dc,-task->pix_left-task->scroll_x, + -task->pix_top-task->scroll_y,dc); dc->flags&=~DCF_NO_TRANSPARENTS; Preempt(old_preempt); } @@ -87,7 +88,7 @@ U0 AnimateTask(I64) break; j++; } while (j<=NUM_DROPS); - + drops[cur_drop].x=RandU32%w; drops[cur_drop].y=0; } @@ -150,16 +151,16 @@ U0 RainDrops() { I64 ch,sc; MenuPush( - "File {" - " Abort(,CH_SHIFT_ESC);" - " Exit(,CH_ESC);" - "}" - "Play {" - " Restart(,'\n');" - " OpenUpper(,'1');" - " OpenLower(,'2');" - "}" - ); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + " OpenUpper(,'1');" + " OpenLower(,'2');" + "}" + ); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; cur_dc=DCNew(GR_WIDTH,GR_HEIGHT); diff --git a/Demo/Games/RawHide.CPP b/Demo/Games/RawHide.CPP index a13b3a6..f8b3da5 100644 --- a/Demo/Games/RawHide.CPP +++ b/Demo/Games/RawHide.CPP @@ -1,7 +1,7 @@ //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$. -AcctRegSetDftEntry("TempleOS/RawHide","F64 best_score=9999;\n"); -AcctRegExeBranch("TempleOS/RawHide"); +RegSetDftEntry("TempleOS/RawHide","F64 best_score=9999;\n"); +RegExeBranch("TempleOS/RawHide"); F64 t0,tf; I64 outside_cnt; @@ -62,7 +62,7 @@ U0 RiverNew() U0 RiverMake() { I64 i,x,y,dx,dy,w,old_x,old_y; - //Plan lower course of river +//Plan lower course of river old_x=-1;old_y=-1; x=MAP_WIDTH<<32/2; y=MAP_HEIGHT<<32/2; dx=0; dy=1<<32; @@ -79,7 +79,7 @@ U0 RiverMake() x+=dx; y+=dy; w=ClampI64(w+RandI32*2,10*MAX_U32,150*MAX_U32); } - //Plan upper course of river +//Plan upper course of river old_x=-1;old_y=-1; x=MAP_WIDTH<<32/2; y=MAP_HEIGHT<<32/2; dx=0; dy=-1<<32; @@ -154,12 +154,17 @@ U0 RiverDropsNext(CTask *mem_task) } else { do { if (RandU16&1 && - GrPeek(map_dc,r_x[tempr->index]+tempr->dx,r_y[tempr->index]+tempr->dy)==BLUE) + GrPeek(map_dc,r_x[tempr->index]+tempr->dx, + r_y[tempr->index]+tempr->dy)==BLUE) break; - tempr->dx=ClampI64(tempr->dx+RandU16%3-1,-r_width[tempr->index]/2,r_width[tempr->index]/2); - tempr->dy=ClampI64(tempr->dy+RandU16%3-1,-r_width[tempr->index]/2,r_width[tempr->index]/2); - } while (GrPeek(map_dc,r_x[tempr->index]+tempr->dx,r_y[tempr->index]+tempr->dy)!=BLUE && - GrPeek(map_dc,r_x[tempr->index] ,r_y[tempr->index]) ==BLUE); //Might be reinitializing + tempr->dx=ClampI64(tempr->dx+RandU16%3-1,-r_width[tempr->index]/2, + r_width[tempr->index]/2); + tempr->dy=ClampI64(tempr->dy+RandU16%3-1,-r_width[tempr->index]/2, + r_width[tempr->index]/2); + } while (GrPeek(map_dc,r_x[tempr->index]+tempr->dx, + r_y[tempr->index]+tempr->dy)!=BLUE && + GrPeek(map_dc,r_x[tempr->index], + r_y[tempr->index])==BLUE); //Might be reinitializing } tempr=tempr1; } @@ -192,8 +197,8 @@ U0 DrawIt(CTask *task,CDC *dc) static Bool left=TRUE; F64 t; I64 i, - cx=(MAP_WIDTH -task->pix_width)/2, - cy=(MAP_HEIGHT-task->pix_height)/2; + cx=(MAP_WIDTH -task->pix_width)/2, + cy=(MAP_HEIGHT-task->pix_height)/2; if (task->scroll_x+cx<0) task->scroll_x=-cx; if (task->scroll_x+cx>MAP_WIDTH-task->pix_width) @@ -212,7 +217,7 @@ U0 DrawIt(CTask *task,CDC *dc) if (!a[i].dead) { if (a[i].dx<0) { dc->flags|=DCF_JUST_MIRROR|DCF_SYMMETRY; - GrSetSymmetry(dc,a[i].x.i32[1]-cx,0,a[i].x.i32[1]-cx,1); + DCSymmetrySet(dc,a[i].x.i32[1]-cx,0,a[i].x.i32[1]-cx,1); } Sprite3(dc,a[i].x.i32[1]-cx,a[i].y.i32[1]-cy,0,a[i].ge->img); dc->flags&=~(DCF_JUST_MIRROR|DCF_SYMMETRY); @@ -224,11 +229,12 @@ U0 DrawIt(CTask *task,CDC *dc) left=TRUE; if (left) { dc->flags|=DCF_JUST_MIRROR|DCF_SYMMETRY; - GrSetSymmetry(dc,ip.pos.x-task->pix_left-task->scroll_x,0,ip.pos.x-task->pix_left-task->scroll_x,1); + DCSymmetrySet(dc,ip.pos.x-task->pix_left-task->scroll_x,0, + ip.pos.x-task->pix_left-task->scroll_x,1); } Sprite3(dc, - ip.pos.x-task->pix_left-task->scroll_x, - ip.pos.y-task->pix_top -task->scroll_y,0,rh_sprite[GE_HORSE].img); + ip.pos.x-task->pix_left-task->scroll_x, + ip.pos.y-task->pix_top -task->scroll_y,0,rh_sprite[GE_HORSE].img); dc->flags&=~(DCF_JUST_MIRROR|DCF_SYMMETRY); last_pos_x=ip.pos.x; @@ -237,14 +243,15 @@ U0 DrawIt(CTask *task,CDC *dc) t=tf-t0; if (Blink) GrPrint(dc,(task->pix_width-FONT_WIDTH*14)>>1-task->scroll_x, - (task->pix_height-FONT_HEIGHT)>>1-task->scroll_y, - "Game Completed"); + (task->pix_height-FONT_HEIGHT)>>1-task->scroll_y, + "Game Completed"); } else { dc->color=BLACK; t=tS-t0; } - GrPrint(dc,-task->scroll_x,-task->scroll_y,"Outside:%03d Time:%7.2fs Best:%7.2fs", - outside_cnt,t,best_score); + GrPrint(dc,-task->scroll_x,-task->scroll_y, + "Outside:%03d Time:%7.2fs Best:%7.2fs", + outside_cnt,t,best_score); } U0 BuddySelect(I64 i) @@ -253,8 +260,8 @@ U0 BuddySelect(I64 i) for (b=0;bpix_width)/2, - cy=(MAP_HEIGHT-parent->pix_height)/2; + cy=(MAP_HEIGHT-parent->pix_height)/2; cursor_x=ip.pos.x+cx-parent->pix_left-parent->scroll_x; cursor_y=ip.pos.y+cy-parent->pix_top -parent->scroll_y; cnt=0;stress=0; @@ -293,14 +300,14 @@ U0 AnimateTask(CTask *parent) tempa->dy+=f*dy; } -//Reselect buddy about every NUM_ANIMALS*10ms=5.12 seconds + //Reselect buddy about every NUM_ANIMALS*10ms=5.12 seconds tempa1=&a[tempa->buddy]; if (tempa1->dead || i==updates%NUM_ANIMALS) { BuddySelect(i); tempa1=&a[tempa->buddy]; } -//Move toward buddy + //Move toward buddy ddx=tempa->x.i32[1]-tempa1->x.i32[1]; ddy=tempa->y.i32[1]-tempa1->y.i32[1]; if (dd=SqrI64(ddx)+SqrI64(ddy)) { @@ -314,31 +321,34 @@ U0 AnimateTask(CTask *parent) tempa->dy+=f*dy; } -//Make velocity similar to buddy + //Make velocity similar to buddy tempa->dx+=0.1*(tempa1->dx-tempa->dx); tempa->dy+=0.1*(tempa1->dy-tempa->dy); -//Add random movement, limit speed and dampen speed + //Add random movement, limit speed and dampen speed tempa->dx=0.995*ClampI64(tempa->dx+RandI32/32,-max_speed,max_speed); tempa->dy=0.995*ClampI64(tempa->dy+RandI32/32,-max_speed,max_speed); -//Slow in river + //Slow in river if (GrPeek(map_dc,tempa->x.i32[1],tempa->y.i32[1])!=LTGREEN) { tempa->dx/=2; tempa->dy/=2; } - if (GrPeek(map_dc,(tempa->x+tempa->dx)>>32,(tempa->y+tempa->dy)>>32)!=LTGRAY) { + if (GrPeek(map_dc,(tempa->x+tempa->dx)>>32,(tempa->y+tempa->dy)>>32) + !=LTGRAY) { tempa->x+=tempa->dx; tempa->y+=tempa->dy; } -//Keep on map - if (!(MAP_BORDER-tempa->ge->min_x<=tempa->x.i32[1]ge->max_x)) { + //Keep on map + if (!(MAP_BORDER-tempa->ge->min_x + <=tempa->x.i32[1]ge->max_x)) { tempa->x -=tempa->dx; tempa->dx=-tempa->dx; } - if (!(MAP_BORDER-tempa->ge->min_y<=tempa->y.i32[1]ge->max_y)) { + if (!(MAP_BORDER-tempa->ge->min_y + <=tempa->y.i32[1]ge->max_y)) { tempa->y -=tempa->dy; tempa->dy=-tempa->dy; } @@ -384,10 +394,10 @@ U0 SongTask(I64) Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) { - Play("3qC2etG3DCBDCECFqFCsADADqB"); - Play("C2etG3DCBDCECFqFCsADADqB"); - Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE"); - Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE"); + Play("3qC2etG3DCBDCECFqFCsADADqB"); + Play("C2etG3DCBDCECFqFCsADADqB"); + Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE"); + Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE"); } } @@ -416,7 +426,8 @@ U0 ReInit() map_dc->pen_width=MAP_BORDER; map_dc->color=RED; - GrBorder(map_dc,MAP_BORDER/2,MAP_BORDER/2,MAP_WIDTH-(MAP_BORDER+1)/2,MAP_HEIGHT-(MAP_BORDER+1)/2); + GrBorder(map_dc,MAP_BORDER/2,MAP_BORDER/2, + MAP_WIDTH-(MAP_BORDER+1)/2,MAP_HEIGHT-(MAP_BORDER+1)/2); for (i=river_lo;i<=river_hi;i++) RiverDropsNext(Fs); @@ -475,19 +486,20 @@ U0 RawHide() "upper-left corner if you scroll.\n\n" "Scroll with $$GREEN$${CTRL-Left Grab}$$FG$$.\n"); MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -"Play {" -" Restart(,'\n');" -"}" -); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + "Play {" + " Restart(,'\n');" + "}" + ); Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; WinMax; AutoComplete; - Preempt(OFF); + Preempt; Init; Fs->animate_task=Spawn(&AnimateTask,Fs,"Animate",,Fs); DocCursor; @@ -495,7 +507,8 @@ U0 RawHide() Fs->draw_it=&DrawIt; try { while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<pix_left,ip.pos.y-Fs->pix_top); else diff --git a/Demo/Games/TreeCheckers.CPP b/Demo/Games/TreeCheckers.CPP index 6344046..dc4eb0a 100644 --- a/Demo/Games/TreeCheckers.CPP +++ b/Demo/Games/TreeCheckers.CPP @@ -1,7 +1,19 @@ -#define BORDER 16 -#define NUM_UNITS 64 -#define CIRCLE_RAD 8 -#define MOVE_CIRCLES 5 +U0 InitDefines() +{ + I64 w=GR_WIDTH,h=GR_HEIGHT-FONT_HEIGHT,cols,rows, + size=PopUpRangeI64(1,9,,"Size\n"),rad=16-size; + if (size<0) throw; + DefinePrint("NUM_UNITS","%d",4096/SqrI64(rad)&~1); + DefinePrint("CIRCLE_RAD","%d",rad); + DefinePrint("MOVE_CIRCLES","%d",40/rad); + + cols=(w-8-rad)/(2*rad)&~1-1; + DefinePrint("BORDER_X","%d",(w+rad-cols*2*rad)/2); + + rows=(h-8)/(2*rad)&~1; + DefinePrint("BORDER_Y","%d",(h-rows*2*rad)/2); + +} InitDefines; class Unit { @@ -16,11 +28,11 @@ Bool show_start; U0 S2Circle(I64 *_x,I64 *_y) { I64 i,j; - j=(*_y-BORDER)/(CIRCLE_RAD*2); + j=(*_y-BORDER_Y)/(CIRCLE_RAD*2); if (j&1) - i=(*_x-CIRCLE_RAD-BORDER)/(CIRCLE_RAD*2); + i=(*_x-CIRCLE_RAD-BORDER_X)/(CIRCLE_RAD*2); else - i=(*_x-BORDER)/(CIRCLE_RAD*2); + i=(*_x-BORDER_X)/(CIRCLE_RAD*2); *_y=j; *_x=i; } @@ -28,8 +40,8 @@ U0 S2Circle(I64 *_x,I64 *_y) U0 Circle2S(I64 *_x,I64 *_y) { I64 j=*_y,i=*_x; - *_y=j*CIRCLE_RAD*2+CIRCLE_RAD+BORDER; - *_x=i*CIRCLE_RAD*2+CIRCLE_RAD+BORDER; + *_y=j*CIRCLE_RAD*2+CIRCLE_RAD+BORDER_Y; + *_x=i*CIRCLE_RAD*2+CIRCLE_RAD+BORDER_X; if (j&1) *_x+=CIRCLE_RAD; } @@ -80,7 +92,7 @@ U0 DrawIt(CTask *task,CDC *dc) if ((num_alive[0]==1 || num_alive[1]==1) && Blink(4)) { dc->color=BLACK; GrPrint(dc,(task->pix_width-FONT_WIDTH*9)>>1, - (task->pix_height-FONT_HEIGHT)>>1,"Game Over"); + (task->pix_height-FONT_HEIGHT)>>1,"Game Over"); } } @@ -117,7 +129,7 @@ U0 CheckForKills(I64 x1,I64 y1,I64 player) found=FALSE; for (j=0;jwidth-BORDER*2-CIRCLE_RAD)/(CIRCLE_RAD*2); - *_h=(dc->height-BORDER*2)/(CIRCLE_RAD*2); + *_w=(dc->width-BORDER_X*2-CIRCLE_RAD)/(CIRCLE_RAD*2); + *_h=(dc->height-BORDER_Y*2)/(CIRCLE_RAD*2); DCFill(dc,WHITE); dc->color=LTGRAY; for (j=0;j<*_h;j++) { for (i=0;i<*_w;i++) { - y=j*CIRCLE_RAD*2+BORDER+CIRCLE_RAD; - x=i*CIRCLE_RAD*2+BORDER+CIRCLE_RAD; + x=i*CIRCLE_RAD*2+BORDER_X+CIRCLE_RAD; + y=j*CIRCLE_RAD*2+BORDER_Y+CIRCLE_RAD; if (j&1) x+=CIRCLE_RAD; S2W(&x,&y); GrCircle(dc,x,y,CIRCLE_RAD); @@ -191,30 +203,31 @@ CDC *DrawHexMap(I64 *_w,I64 *_h) U0 Init() { - I64 i,j,dd,best_dd,best,w=Fs->pix_width,h=Fs->pix_height; + I64 i,j,j1,j2,dd,best_dd,best,w=Fs->pix_width,h=Fs->pix_height; map_dc=DrawHexMap(&w,&h); cur_player=0; for (i=0;iwin_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU; + PopUpOk("Step on the link mid points.\n"); + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_BORDER-WIF_FOCUS_TASK_MENU; try { cn_start: Init; @@ -295,7 +307,8 @@ cn_start: show_start=FALSE; Fs->draw_it=&DrawIt; while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<win_task; I64 i,j,x,y,z,lo,hi, - w=task->pix_width, - h=task->pix_height,r[16], - cx=w>>1; + w=task->pix_width, + h=task->pix_height,r[16], + cx=w>>1; F64 s,dip_é=Dipé(c[0].p.x,c[0].p.z,c[0].é); Car *tempc; Bool draw; @@ -197,9 +197,9 @@ U0 MPUpdateWin(CDC *dc2) TrackPoly *tempt; CDC *dc=DCAlias(gr.dc2,task); - GrIdentEqu(r); - GrRotYEqu(r,ã-c[0].é); - GrRotXEqu(r,75*ã/180-dip_é); + Mat4x4IdentEqu(r); + Mat4x4RotY(r,ã-c[0].é); + Mat4x4RotX(r,75*ã/180-dip_é); dc->depth_buf=dc2->depth_buf; @@ -210,8 +210,10 @@ U0 MPUpdateWin(CDC *dc2) dc->color=tempt->c; draw=TRUE; for (j=0;j<4;j++) { - x=tempt->p[j].x-c[0].p.x; y=tempt->p[j].y-c[0].p.y; z=tempt->p[j].z-c[0].p.z; - GrRot(r,&x,&y,&z); + x=tempt->p[j].x-c[0].p.x; + y=tempt->p[j].y-c[0].p.y; + z=tempt->p[j].z-c[0].p.z; + Mat4x4MulXYZ(r,&x,&y,&z); s=100.0/(AbsI64(z)+50); poly[j].y=s*y+h; if (z<-200 || !(-hflags|=DCF_TRANSFORMATION; for (i=Gs->num;i0) { s=100.0/(AbsI64(z)+50); - GrIdentEqu(dc->r); - GrScaleEqu(dc->r,s*2); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4Scale(dc->r,s*2); + DCMat4x4Set(dc,dc->r); if (b[i].sym) { dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - GrSetSymmetry(dc,s*x+cx,s*y+h,s*x+cx,s*y+h+10); + DCSymmetrySet(dc,s*x+cx,s*y+h,s*x+cx,s*y+h+10); } Sprite3B(dc,s*x+cx,s*y+h,z+GR_Z_ALL,b[i].img); dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); @@ -245,14 +247,14 @@ U0 MPUpdateWin(CDC *dc2) for (i=Gs->num+1;ip.x-c[0].p.x; y=tempc->p.y-c[0].p.y; z=tempc->p.z-c[0].p.z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); if (z>0) { s=100.0/(AbsI64(z)+50); - GrIdentEqu(dc->r); - GrScaleEqu(dc->r,s*2); - GrRotXEqu(dc->r,Dipé(tempc->p.x,tempc->p.z,-tempc->é)); - GrRotYEqu(dc->r,tempc->é-c[0].é); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4Scale(dc->r,s*2); + Mat4x4RotX(dc->r,Dipé(tempc->p.x,tempc->p.z,-tempc->é)); + Mat4x4RotY(dc->r,tempc->é-c[0].é); + DCMat4x4Set(dc,dc->r); Sprite3B(dc,s*x+cx,s*y+h,z+GR_Z_ALL,tempc->img); } } @@ -264,7 +266,7 @@ U0 MPUpdateWin(CDC *dc2) U0 VRTransform(CDC *dc,I64 *x,I64 *y,I64 *z) { I64 zz; - GrRot(dc->r,x,y,z); + Mat4x4MulXYZ(dc->r,x,y,z); zz=400+*z; if (zz<1) zz=1; *x=400* *x/zz; @@ -285,15 +287,15 @@ U0 DrawIt(CTask *task,CDC *dc) dc->color=LTCYAN; GrRect(dc,0,0,w,HORIZON_DIP*Sin(dip_é)+FONT_HEIGHT*4.5); - GrIdentEqu(r); - GrRotYEqu(r,ã-c[0].é); - GrRotXEqu(r,75*ã/180-dip_é); + Mat4x4IdentEqu(r); + Mat4x4RotY(r,ã-c[0].é); + Mat4x4RotX(r,75*ã/180-dip_é); - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); //Sun x=c[0].p.x; y=0; z=1000000-c[0].p.z; - GrRot(r,&x,&y,&z); + Mat4x4MulXYZ(r,&x,&y,&z); s=100.0/(AbsI64(z)+50); if (y<0) { dc->color=BROWN; @@ -314,9 +316,9 @@ U0 DrawIt(CTask *task,CDC *dc) è=0.5; else è=0; - GrIdentEqu(r); - GrRotYEqu(r,è); - GrRotXEqu(r,0.4-8*dip_é); //Made this up + Mat4x4IdentEqu(r); + Mat4x4RotY(r,è); + Mat4x4RotX(r,0.4-8*dip_é); //Made this up dc->transform=&VRTransform; dc->x=task->pix_width>>1; dc->y=task->pix_height-150; @@ -328,7 +330,8 @@ U0 DrawIt(CTask *task,CDC *dc) GrRect(dc,w-64,h-64,64,64); dc->color=LTGREEN; for (i=0;ipen_width=2; for (i=0;icolor=LTPURPLE; else dc->color=LTCYAN; - GrPlot3(dc,w-64+64*(0x5000-c[i].p.x)/0xA000,h-64*(-c[i].p.z+0x5000)/0xA000,0); + GrPlot3(dc,w-64+64*(0x5000-c[i].p.x)/0xA000, + h-64*(-c[i].p.z+0x5000)/0xA000,0); } if (game_over) { @@ -354,7 +358,8 @@ U0 DrawIt(CTask *task,CDC *dc) s=tS-t0; dc->color=BLACK; GrPrint(dc,0,0,"é:%0.1f %0.1f%% Time:%0.2f Best:%0.2f", - 180+180/ã*Arg(c[0].p.x,c[0].p.z),100.0*distance/(2*ã*TRACK_INNER),s,best_score); + 180+180/ã*Arg(c[0].p.x,c[0].p.z), + 100.0*distance/(2*ã*TRACK_INNER),s,best_score); } U0 AnimateTask(I64) @@ -417,7 +422,7 @@ U0 Init() tempb->p.x=RandU32&0x7FFF-0x4000; tempb->p.z=RandU32&0x7FFF-0x4000; } while (TRACK_INNER-SHOULDER<= - Sqrt(SqrI64(tempb->p.x)+SqrI64(tempb->p.z))<=TRACK_OUTER+SHOULDER); + Sqrt(SqrI64(tempb->p.x)+SqrI64(tempb->p.z))<=TRACK_OUTER+SHOULDER); tempb->p.y=DipY(tempb->p.x,tempb->p.z); tempb->sym=RandU16&1; tempb->img=imgs[i&7]; @@ -462,11 +467,12 @@ U0 Varoom() SettingsPush(,TSF_SAME_SONG); //See $LK,"SettingsPush",A="MN:SettingsPush"$ try { Fs->text_attr=YELLOW<<4+BLUE; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS + -WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; AutoComplete; WinMax; WinBorder; - Preempt(OFF); + Preempt; Init; DocCursor; DocClear; @@ -502,7 +508,7 @@ vr_done: //Don't goto out of try Fs->catch_except=TRUE; SettingsPop(,TSF_SAME_SONG); MenuPop; - AcctRegWriteBranch("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score); + RegWriteBranch("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score); } Varoom; diff --git a/Demo/Games/Wenceslas.CPP b/Demo/Games/Wenceslas.CPP index 177a722..93b6c7f 100644 --- a/Demo/Games/Wenceslas.CPP +++ b/Demo/Games/Wenceslas.CPP @@ -1,5 +1,5 @@ -AcctRegSetDftEntry("TempleOS/Wenceslas","F64 best_score=9999;\n"); -AcctRegExeBranch("TempleOS/Wenceslas"); +RegSetDftEntry("TempleOS/Wenceslas","F64 best_score=9999;\n"); +RegExeBranch("TempleOS/Wenceslas"); #define BORDER 5 #define KING_STEP 6 @@ -8,7 +8,8 @@ AcctRegExeBranch("TempleOS/Wenceslas"); - $SP,"<1>",BI=1$ + $SP,"<1>",BI=1$ //See $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$ for making 3D men. + @@ -127,7 +128,7 @@ U0 DrawIt(CTask *task,CDC *dc) Step *tempst; Peasant *tempp; F64 tt; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; dc->pen_width=1; for (i=0;inext; } - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); dc->flags|=DCF_TRANSFORMATION; dc->pen_width=1; tempp=peasant_root.next; while (tempp!=&peasant_root) { - GrIdentEqu(r); - GrRotYEqu(r,tempp->é+ã/2); - GrRotXEqu(r,ã/6); + Mat4x4IdentEqu(r); + Mat4x4RotY(r,tempp->é+ã/2); + Mat4x4RotX(r,ã/6); if (tempp->stopped) SpriteMat3B(dc,tempp->x,tempp->y,GR_Z_ALL,peasant_imgs[0],r); else { @@ -193,9 +194,9 @@ U0 DrawIt(CTask *task,CDC *dc) } dc->pen_width=1; - GrIdentEqu(r); - GrRotYEqu(r,king_é+ã/2); - GrRotXEqu(r,ã/6); + Mat4x4IdentEqu(r); + Mat4x4RotY(r,king_é+ã/2); + Mat4x4RotX(r,ã/6); if (tS>king_timeout) SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,king_imgs[0],r); else { @@ -268,7 +269,7 @@ U0 StepNew(CTask *task,I64 x,I64 y,F64 U0 Init() { I64 i,min_x,max_x,min_y,max_y, - w=Fs->pix_width,h=Fs->pix_height; + w=Fs->pix_width,h=Fs->pix_height; Peasant *tempp; snow_x=0; snow_y=0; @@ -324,7 +325,7 @@ U0 Follow(CTask *,Peasant *tempp) F64 d,best_d=MAX_F64; while (temps!=&king_step_root) { if ((d=Sqr(temps->x-tempp->x)+Sqr(temps->y-tempp->y)) && - d<15*15) { + d<15*15) { d+=1000*Sqr(tS-temps->t0); if (ddoor_opened_t0=door_open_t0=tS; } for (i=0;ix-trees[i].x)+Sqr(tempp->y-trees[i].y)<20*20) { + if (trees[i].fire_frame_index && + Sqr(tempp->x-trees[i].x)+Sqr(tempp->y-trees[i].y)<20*20) { tempp->stopped=TRUE; break; } @@ -386,13 +388,15 @@ U0 AnimateTask(I64) Follow(Fs->parent_task,tempp); tempp->x+=Cos(tempp->é)/100; tempp->y+=Sin(tempp->é)/100; - if (!(BORDER/2<=tempp->xyxyé+=ã; tempp->x+=3*Cos(tempp->é)/100; tempp->y+=3*Sin(tempp->é)/100; } if (!animate_mS && animate_phase&1) - StepNew(Fs->parent_task,tempp->x,tempp->y,tempp->é,animate_phase&2,FALSE); + StepNew(Fs->parent_task,tempp->x,tempp->y,tempp->é, + animate_phase&2,FALSE); not_stopped_cnt++; } } @@ -442,9 +446,9 @@ U0 SongTask(I64) music.tempo= 2.480; music.stacatto_factor= 0.902; while (TRUE) { - Play("3eCCCDCC2qG3eA2G3ABqCC"); - Play("eCCCDCC2qG3eA2G3ABqCC"); - Play("eGFEDEDqCeA2G3ABqCC"); + Play("3eCCCDCC2qG3eA2G3ABqCC"); + Play("eCCCDCC2qG3eA2G3ABqCC"); + Play("eGFEDEDqCeA2G3ABqCC"); } } @@ -469,7 +473,7 @@ U0 Wenceslas() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; - Preempt(OFF); + Preempt; Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); PopUpOk(" @@ -588,7 +592,7 @@ ws_done: SettingsPop; MenuPop; CleanUp; - AcctRegWriteBranch("TempleOS/Wenceslas","F64 best_score=%5.4f;\n",best_score); + RegWriteBranch("TempleOS/Wenceslas","F64 best_score=%5.4f;\n",best_score); } Wenceslas; diff --git a/Demo/Games/Whap.CPP b/Demo/Games/Whap.CPP index f610194..609f57b 100644 --- a/Demo/Games/Whap.CPP +++ b/Demo/Games/Whap.CPP @@ -13,8 +13,8 @@ F64 collision_t; U0 DrawIt(CTask *task,CDC *dc) { I64 i, - cx=task->pix_width>>1, - cy=task->pix_height>>1; + cx=task->pix_width>>1, + cy=task->pix_height>>1; Bool snd_on=FALSE; dc->color=BLACK; GrPrint(dc,0,0,"Protect your base."); @@ -23,11 +23,11 @@ U0 DrawIt(CTask *task,CDC *dc) GrRect(dc,cx-BASE_SIZE+2,cy-BASE_SIZE+2,BASE_SIZE*2-4,BASE_SIZE*2-4); dc->color=YELLOW; GrLine(dc,balls[0].x,balls[0].y, - ip.pos.x-task->pix_left-task->scroll_x, - ip.pos.y-task->pix_top-task->scroll_y); + ip.pos.x-task->pix_left-task->scroll_x, + ip.pos.y-task->pix_top-task->scroll_y); for (i=0;ix,springs[i].end1->y, - springs[i].end2->x,springs[i].end2->y); + springs[i].end2->x,springs[i].end2->y); dc->color=LTCYAN; GrCircle(dc,balls[0].x,balls[0].y,BALL_RADIUS); @@ -40,7 +40,7 @@ U0 DrawIt(CTask *task,CDC *dc) GrCircle(dc,balls[i].x,balls[i].y,BALL_RADIUS); GrFloodFill(dc,balls[i].x,balls[i].y,TRUE); if (cx-BASE_SIZE-BALL_RADIUS<=balls[i].x<=cx+BASE_SIZE+BALL_RADIUS && - cy-BASE_SIZE-BALL_RADIUS<=balls[i].y<=cy+BASE_SIZE+BALL_RADIUS) + cy-BASE_SIZE-BALL_RADIUS<=balls[i].y<=cy+BASE_SIZE+BALL_RADIUS) snd_on=TRUE; dc->color=BLACK; GrCircle(dc,balls[i].x,balls[i].y,BALL_RADIUS); @@ -58,15 +58,17 @@ U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *) CD3 p,p2; CTask *task=ode->win_task; - D3SubEqu(D3Equ(&p2,ip.pos.x-task->pix_left-task->scroll_x,ip.pos.y-task->pix_top-task->scroll_y,0), - &balls[0].state->x); + D3SubEqu(D3Equ(&p2, + ip.pos.x-task->pix_left-task->scroll_x, + ip.pos.y-task->pix_top-task->scroll_y,0), + &balls[0].state->x); D3AddEqu(&balls[0].DstateDt->DxDt,D3MulEqu(&p2,STRETCH)); D3Equ(&p2,task->pix_width>>1,task->pix_height>>1,0); for (i=1;ix,&p); if (d=D3Norm(&p)) { - //Gravity would be /(d*d*d), but that's too exponential. +//Gravity would be /(d*d*d), but that's too exponential. D3MulEqu(&p,GRAVITY/d); D3AddEqu(&balls[i].DstateDt->DxDt,&p); } @@ -110,14 +112,14 @@ U0 Whap() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ WinMax; AutoComplete; - Preempt(OFF); + Preempt; MenuPush( -"File {" -" Abort(,CH_SHIFT_ESC);" -" Exit(,CH_ESC);" -"}" -); + "File {" + " Abort(,CH_SHIFT_ESC);" + " Exit(,CH_ESC);" + "}" + ); ode->derivative=&MyDerivative; ode->drag_v2=0.002; ode->drag_v3=0.00001; @@ -126,7 +128,7 @@ U0 Whap() D3Equ(&balls[0].x,100,100,0); for (i=1;ipix_width>>1,RandI16%500+Fs->pix_height>>1,0); + RandI16%500+Fs->pix_width>>1,RandI16%500+Fs->pix_height>>1,0); balls[0].x=ip.pos.x-Fs->pix_left-Fs->scroll_x; balls[0].y=ip.pos.y-Fs->pix_top-Fs->scroll_y; for (i=0;iflags|=DCF_TRANSFORMATION|DCF_SYMMETRY; try { while (!ScanChar) { DCDepthBufRst(dc); - GrSetSymmetry(dc,Fs->pix_width/2,Fs->pix_height/2, - ip.pos.x-Fs->pix_left-Fs->scroll_x, - ip.pos.y-Fs->pix_top-Fs->scroll_y); + DCSymmetrySet(dc,Fs->pix_width/2,Fs->pix_height/2, + ip.pos.x-Fs->pix_left-Fs->scroll_x, + ip.pos.y-Fs->pix_top-Fs->scroll_y); dc->color=LTBLUE; GrLine(dc,Fs->pix_width/2,Fs->pix_height/2, - ip.pos.x-Fs->pix_left-Fs->scroll_x, - ip.pos.y-Fs->pix_top-Fs->scroll_y); - - GrIdentEqu(dc->r); - GrRotXEqu(dc->r,ê); - GrRotYEqu(dc->r,è); - GrRotZEqu(dc->r,é); - GrSetRotMat(dc,dc->r); + ip.pos.x-Fs->pix_left-Fs->scroll_x, + ip.pos.y-Fs->pix_top-Fs->scroll_y); + + Mat4x4IdentEqu(dc->r); + Mat4x4RotX(dc->r,ê); + Mat4x4RotY(dc->r,è); + Mat4x4RotZ(dc->r,é); + DCMat4x4Set(dc,dc->r); dc->x=Fs->pix_width/2; dc->y=Fs->pix_height/2; dc->z=500; - + dc->color=GREEN; poly[0].x=50; poly[0].y=150; diff --git a/Demo/Graphics/Balloon.CPP b/Demo/Graphics/Balloon.CPP index 490ed22..72ae19a 100644 --- a/Demo/Graphics/Balloon.CPP +++ b/Demo/Graphics/Balloon.CPP @@ -12,24 +12,24 @@ U0 Balloon() CLI - OutU8(VGAP_INDEX,VGAR_MAP_MASK); - OutU8(VGAP_DATA,0xF); - MemSetI64(0xA0000,0,640*480/64); + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,0xF); + MemSetI64(0xA0000,0,640*480/64); - OutU8(VGAP_INDEX,VGAR_MAP_MASK); - OutU8(VGAP_DATA,RED+GREEN+8); - for (k=100;k<150;k++) { + OutU8(VGAP_INDEX,VGAR_MAP_MASK); + OutU8(VGAP_DATA,RED+GREEN+8); + for (k=100;k<150;k++) { - for (i=0;i<20;i++) - for (j=0;j<3;j++) - *(0xA0000+0x1000+(i+k)*640/8+j)(U8 *)=a[i*3+j]; + for (i=0;i<20;i++) + for (j=0;j<3;j++) + *(0xA0000+0x1000+(i+k)*640/8+j)(U8 *)=a[i*3+j]; - BusyWait(40000); + BusyWait(40000); - for (i=0;i<20;i++) - for (j=0;j<3;j++) - *(0xA0000+0x1000+(i+k)*640/8+j)(U8 *)=0; - } + for (i=0;i<20;i++) + for (j=0;j<3;j++) + *(0xA0000+0x1000+(i+k)*640/8+j)(U8 *)=0; + } STI VGAFlush; diff --git a/Demo/Graphics/Box.CPP b/Demo/Graphics/Box.CPP index 7330e25..25ad1b5 100644 --- a/Demo/Graphics/Box.CPP +++ b/Demo/Graphics/Box.CPP @@ -2,7 +2,7 @@ CDC *dc; U0 DrawIt(CTask *,CDC *) {//This technique is weird, but clever. In Box() we - //created an alias of the system $LK,"gr.dc2",A="MN:CGrGlbls"$. +//created an alias of the system $LK,"gr.dc2",A="MN:CGrGlbls"$. dc->pen_width=2; dc->color=RED; GrLine3(dc,-100,-100,-100, -100, 100,-100); @@ -27,18 +27,18 @@ U0 Box() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ DocClear; Fs->draw_it=&DrawIt; - Preempt(OFF); //We don't want matrix used while we're changing it. + Preempt; //We don't want matrix used while we're changing it. dc->x=200; dc->y=200; dc->flags|=DCF_TRANSFORMATION; while (!ScanChar) { - GrIdentEqu(dc->r); - GrRotZEqu(dc->r,é); - GrRotXEqu(dc->r,è); - GrRotZEqu(dc->r,ê); - GrScaleEqu(dc->r,s); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4RotZ(dc->r,é); + Mat4x4RotX(dc->r,è); + Mat4x4RotZ(dc->r,ê); + Mat4x4Scale(dc->r,s); + DCMat4x4Set(dc,dc->r); Sleep(20); é+=2*ã/70; diff --git a/Demo/Graphics/Camp.CPP b/Demo/Graphics/Camp.CPP index 88e9a6d..03c8b6d 100644 Binary files a/Demo/Graphics/Camp.CPP and b/Demo/Graphics/Camp.CPP differ diff --git a/Demo/Graphics/Cartesian.CPP b/Demo/Graphics/Cartesian.CPP index 5a0d0b8..1ebf2af 100644 --- a/Demo/Graphics/Cartesian.CPP +++ b/Demo/Graphics/Cartesian.CPP @@ -12,8 +12,8 @@ U0 Cartesian() do { DocClear; "Enter algebraic equation to graph.\n" - "Example: y=2*x\n" - "y="; + "Example: y=2*x\n" + "y="; if (st=GetStr) { if (*st) { h=Fs->pix_width/2; @@ -35,7 +35,7 @@ U0 Cartesian() ch=CH_SHIFT_ESC; Free(st); } else - ch=CH_SHIFT_ESC; + ch=CH_SHIFT_ESC; DCFill; } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC); DCDel(dc); diff --git a/Demo/Graphics/Collision.CPP b/Demo/Graphics/Collision.CPP index 610d95a..5e056cc 100644 Binary files a/Demo/Graphics/Collision.CPP and b/Demo/Graphics/Collision.CPP differ diff --git a/Demo/Graphics/CommonAncestor.CPP b/Demo/Graphics/CommonAncestor.CPP index 254d9ee..4bc139e 100644 --- a/Demo/Graphics/CommonAncestor.CPP +++ b/Demo/Graphics/CommonAncestor.CPP @@ -20,7 +20,8 @@ U0 ShowTree(CDC *dc,Node *tempn,I64 *_node_x,I64 *_tree_x,I64 y) if (tempn->left) { ShowTree(dc,tempn->left,&node_x,_tree_x,y+Y_SPACING); dc->color=BLUE; - GrArrow3(dc,*_tree_x,y,0,node_x+ARROW_SPACING,y+Y_SPACING-ARROW_SPACING,0); + GrArrow3(dc,*_tree_x,y,0, + node_x+ARROW_SPACING,y+Y_SPACING-ARROW_SPACING,0); } if (tempn->n==n1 || tempn->n==n2) { if (tempn->n==common_ancestor) @@ -31,15 +32,16 @@ U0 ShowTree(CDC *dc,Node *tempn,I64 *_node_x,I64 *_tree_x,I64 y) dc->color=GREEN; else dc->color=BLUE; - + *_node_x=*_tree_x; GrPrint(dc,*_node_x,y,"%d",tempn->n); *_tree_x+=X_SPACING; - + if (tempn->right) { ShowTree(dc,tempn->right,&node_x,_tree_x,y+Y_SPACING); dc->color=BLUE; - GrArrow3(dc,*_node_x,y,0,node_x-ARROW_SPACING,y+Y_SPACING-ARROW_SPACING,0); + GrArrow3(dc,*_node_x,y,0, + node_x-ARROW_SPACING,y+Y_SPACING-ARROW_SPACING,0); } } } @@ -70,12 +72,12 @@ U0 TreeNew() for (i=0;in=RandU16%N; - + if (i==N-1) n1=tempn->n; else if (i==N-2) n2=tempn->n; - + TreeAdd(&root,tempn); Sleep(50); } @@ -96,7 +98,7 @@ U0 TreeCommonAncestor() {//Make tree and find common ancestor to n1 & n2. root=NULL; n1=n2=common_ancestor=0; - + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->draw_it=&DrawIt; DocClear; diff --git a/Demo/Graphics/Doodle.CPP b/Demo/Graphics/Doodle.CPP index 10f2216..a37336d 100644 --- a/Demo/Graphics/Doodle.CPP +++ b/Demo/Graphics/Doodle.CPP @@ -4,7 +4,7 @@ U0 Doodle() { I64 msg_code,i,x1,y1,x2,y2,a1,a2,color=BLACK; CDC *dc=DCAlias; - + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; @@ -15,8 +15,8 @@ U0 Doodle() DocClear; do { msg_code=GetMsg(&a1,&a2, - 1<color=BLUE; GrRect(dc,BLOW_UP_CHAR_X+j*FONT_WIDTH, - BLOW_UP_CHAR_Y+i*FONT_HEIGHT, - FONT_WIDTH,FONT_HEIGHT); + BLOW_UP_CHAR_Y+i*FONT_HEIGHT, + FONT_WIDTH,FONT_HEIGHT); } } @@ -51,11 +53,10 @@ U0 FESave(Bool pmt) { U8 old_draw_it=Fs->draw_it; CDoc *doc=DocNew; - I64 i,j,k=0; + I64 i; for (i=0;i<256;i++) { - for (j=0;jdraw_it=&DrawIt; while (TRUE) { - switch (msg_code=GetMsg(&a1,&a2,1<pen_width=1; + dc->flags&=~(DCF_TRANSFORMATION|DCF_SYMMETRY); + GrRect(dc,x,y,GRID,GRID); +} + +U0 GridDemo() +{ + CGridGlbls old_grid; + U0 (*old_draw_input_ptr)(CDC *dc,I64 x,I64 y); //Can't init this type of var. + MemCpy(&old_grid,&ip_grid,sizeof(CGridGlbls)); + GridInit; + ip_grid.snap=TRUE; //You can set other $LK,"stuff",A="MN:CGridGlbls"$. + ip_grid.x=GRID; + ip_grid.y=GRID; + old_draw_input_ptr=gr.fp_draw_input_ptr; + gr.fp_draw_input_ptr=&DrawMyInputPtr; + while (!ip.lb) //Left button to exit. + GrPlot(,ip.pos.x,ip.pos.y); + DCFill; + gr.fp_draw_input_ptr=old_draw_input_ptr; + MemCpy(&ip_grid,&old_grid,sizeof(CGridGlbls)); +} + +GridDemo; diff --git a/Demo/Graphics/Hanoi.CPP b/Demo/Graphics/Hanoi.CPP index 2f8709b..30455b8 100644 --- a/Demo/Graphics/Hanoi.CPP +++ b/Demo/Graphics/Hanoi.CPP @@ -34,7 +34,8 @@ U0 SetDisksRestXY() I64 i; for (i=0;ipix_height-PEDESTAL_HEIGHT-(DISK_HEIGHT+1)/2-1-(DISK_HEIGHT+1)*PosInStk(disks_pole[i],i); + disks_y[i]=Fs->pix_height-PEDESTAL_HEIGHT + -(DISK_HEIGHT+1)/2-1-(DISK_HEIGHT+1)*PosInStk(disks_pole[i],i); } } @@ -46,22 +47,30 @@ U0 DrawIt(CTask *task,CDC *dc) poles_x[i]=(1+i)*task->pix_width/4; dc->color=BLACK; - GrRect(dc,poles_x[0]-50,task->pix_height-PEDESTAL_HEIGHT,poles_x[2]-poles_x[0]+100,PEDESTAL_HEIGHT-FONT_HEIGHT); + GrRect(dc,poles_x[0]-50,task->pix_height-PEDESTAL_HEIGHT, + poles_x[2]-poles_x[0]+100,PEDESTAL_HEIGHT-FONT_HEIGHT); dc->color=DKGRAY; - GrRect(dc,poles_x[0]-49,task->pix_height-PEDESTAL_HEIGHT+1,poles_x[2]-poles_x[0]+98,PEDESTAL_HEIGHT-FONT_HEIGHT-2); + GrRect(dc,poles_x[0]-49,task->pix_height-PEDESTAL_HEIGHT+1, + poles_x[2]-poles_x[0]+98,PEDESTAL_HEIGHT-FONT_HEIGHT-2); for (i=0;i<3;i++) { dc->color=BLACK; - GrRect(dc,poles_x[i]-3,task->pix_height-PEDESTAL_HEIGHT-(NUM_DISKS+1)*(DISK_HEIGHT+1),7,(NUM_DISKS+1)*(DISK_HEIGHT+1)); + GrRect(dc,poles_x[i]-3, + task->pix_height-PEDESTAL_HEIGHT-(NUM_DISKS+1)*(DISK_HEIGHT+1), + 7,(NUM_DISKS+1)*(DISK_HEIGHT+1)); dc->color=YELLOW; - GrRect(dc,poles_x[i]-2,task->pix_height-PEDESTAL_HEIGHT+1-(NUM_DISKS+1)*(DISK_HEIGHT+1),5,(NUM_DISKS+1)*(DISK_HEIGHT+1)-1); + GrRect(dc,poles_x[i]-2, + task->pix_height-PEDESTAL_HEIGHT+1-(NUM_DISKS+1)*(DISK_HEIGHT+1), + 5,(NUM_DISKS+1)*(DISK_HEIGHT+1)-1); } for (i=0;icolor=BLACK; - GrRect(dc,disks_x[i]-(i+1)*DISK_UNIT_WIDTH,disks_y[i]-DISK_HEIGHT/2,(i+1)*(DISK_UNIT_WIDTH*2)+1,DISK_HEIGHT); + GrRect(dc,disks_x[i]-(i+1)*DISK_UNIT_WIDTH, + disks_y[i]-DISK_HEIGHT/2,(i+1)*(DISK_UNIT_WIDTH*2)+1,DISK_HEIGHT); dc->color=gr_rainbow_10[i]; - GrRect(dc,disks_x[i]-(i+1)*DISK_UNIT_WIDTH+1,disks_y[i]-DISK_HEIGHT/2+1,(i+1)*(DISK_UNIT_WIDTH*2)-1,DISK_HEIGHT-2); + GrRect(dc,disks_x[i]-(i+1)*DISK_UNIT_WIDTH+1, + disks_y[i]-DISK_HEIGHT/2+1,(i+1)*(DISK_UNIT_WIDTH*2)-1,DISK_HEIGHT-2); } } @@ -81,23 +90,27 @@ U0 MoveDisks(I64 src_pole,I64 dst_pole,I64 num) "$$CM+BY,0,0$$Disk:%d from %d to %d\n",TopDisk(src_pole),src_pole,dst_pole; top=TopDisk(src_pole); - for (y=disks_y[top];y>Fs->pix_height-PEDESTAL_HEIGHT-(DISK_HEIGHT+1)/2-(DISK_HEIGHT+1)*(NUM_DISKS+2);y--) { + for (y=disks_y[top]; + y>Fs->pix_height-PEDESTAL_HEIGHT-(DISK_HEIGHT+1)/2 + -(DISK_HEIGHT+1)*(NUM_DISKS+2);y--) { disks_y[top]=y; MySleep; } if (src_pole=poles_x[dst_pole];x--) { - disks_x[top]=x; - MySleep; + disks_x[top]=x; + MySleep; } disks_pole[top]=dst_pole; - for (y=disks_y[top];ypix_height-PEDESTAL_HEIGHT-(DISK_HEIGHT+1)/2-1-(DISK_HEIGHT+1)*PosInStk(dst_pole,top);y++) { + for (y=disks_y[top]; + ypix_height-PEDESTAL_HEIGHT-(DISK_HEIGHT+1)/2-1 + -(DISK_HEIGHT+1)*PosInStk(dst_pole,top);y++) { disks_y[top]=y; MySleep; } diff --git a/Demo/Graphics/InputPointer.CPP b/Demo/Graphics/InputPointer.CPP index 42dc65b..e40a6bd 100644 --- a/Demo/Graphics/InputPointer.CPP +++ b/Demo/Graphics/InputPointer.CPP @@ -1,6 +1,7 @@ U0 InputPointer() { - while (!ip.lb) //Left Button + "Press left mouse button to exit.\n"; + while (!ip.lb) //Left button to exit. GrPlot(,ip.pos.x,ip.pos.y); DCFill; } diff --git a/Demo/Graphics/Lattice.CPP b/Demo/Graphics/Lattice.CPP index 27fefc6..e1f0be2 100644 --- a/Demo/Graphics/Lattice.CPP +++ b/Demo/Graphics/Lattice.CPP @@ -28,7 +28,7 @@ U0 TurtlePlot(CDC *dc,Turtle *t,CColorROPU16 edge,CColorROPU16 middle) if (w<0) w=0; dc->color=middle; GrLine3(dc,t->x+w*Cos(t->é+ã/2),t->y+w*Sin(t->é+ã/2),t->z, - t->x+w*Cos(t->é-ã/2),t->y+w*Sin(t->é-ã/2),t->z); + t->x+w*Cos(t->é-ã/2),t->y+w*Sin(t->é-ã/2),t->z); w=t->w/2.0; dc->color=edge; GrPlot3(dc,t->x+w*Cos(t->é+ã/2),t->y+w*Sin(t->é+ã/2),t->z); @@ -113,7 +113,7 @@ U0 DrawIt(CTask *,CDC *dc) U0 SetMenu() { I64 i; - U8 buf[64]; + U8 buf[STR_LEN]; CMenuEntry *tempse; for (i=0;i<=9;i++) { StrPrint(buf,"Settings/Layer%d",i); @@ -137,7 +137,7 @@ U0 Lattice() Bool aim=FALSE; I64 a1,a2; CDC *dc=DCAlias; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); MenuPush( "File {" " Abort(,CH_SHIFT_ESC);" @@ -169,7 +169,7 @@ U0 Lattice() "}" ); SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Preempt(OFF); + Preempt; WinMax; AutoComplete; WinBorder; @@ -177,7 +177,8 @@ U0 Lattice() DocCursor; TurtleInit(&tt); SetMenu; - Fs->win_inhibit=WIG_TASK_DFT-WIF_FOCUS_TASK_MENU-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; + Fs->win_inhibit=WIG_TASK_DFT-WIF_FOCUS_TASK_MENU + -WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; Fs->draw_it=&DrawIt; try { while (TRUE) { diff --git a/Demo/Graphics/Life.CPP b/Demo/Graphics/Life.CPP index e686024..f92f520 100644 --- a/Demo/Graphics/Life.CPP +++ b/Demo/Graphics/Life.CPP @@ -6,8 +6,8 @@ Bool restart; U0 DrawIt(CTask *,CDC *dc2) { - dc[cur_dc]->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc2,0,0,dc[cur_dc]); +dc[cur_dc]->flags|=DCF_NO_TRANSPARENTS; +GrBlot(dc2,0,0,dc[cur_dc]); } U0 AnimateTask(I64) diff --git a/Demo/Graphics/MathAudioDemo.CPP b/Demo/Graphics/MathAudioDemo.CPP index 16fdf41..f3bd36a 100644 --- a/Demo/Graphics/MathAudioDemo.CPP +++ b/Demo/Graphics/MathAudioDemo.CPP @@ -13,7 +13,8 @@ U0 FunDraw1(CDC *dc,F64 (*f)(F64 t)) I64 i,w=Fs->pix_width,h=Fs->pix_height; F64 scale=h/5.0; for (i=-w/2;i<=w/2;i++) - GrLine(dc,w/2+i,h/2-scale*f(i/scale*2*ã),w/2+i+1,h/2-scale*f((i+1)/scale*2*ã)); + GrLine(dc,w/2+i,h/2-scale*f(i/scale*2*ã), + w/2+i+1,h/2-scale*f((i+1)/scale*2*ã)); } U0 FunDraw2(CDC *dc,F64 (*f)(F64 t,F64 p),F64 T) @@ -46,7 +47,8 @@ U0 Init(CDC *dc) GrLine(dc,w/2+scale*i,h/2-3,w/2+scale*i,h/2+3); if (i) { dc->color=DKGRAY; - GrPrint(dc,w/2+scale*i-7*FONT_WIDTH/2,h/2+5+FONT_HEIGHT,"%5.1f*T",ToF64(i)); + GrPrint(dc, + w/2+scale*i-7*FONT_WIDTH/2,h/2+5+FONT_HEIGHT,"%5.1f*T",ToF64(i)); } } } diff --git a/Demo/Graphics/Palette.CPP b/Demo/Graphics/Palette.CPP index 36d5050..850db55 100644 --- a/Demo/Graphics/Palette.CPP +++ b/Demo/Graphics/Palette.CPP @@ -1,26 +1,26 @@ U0 PaletteDemo() { I64 i,j; - CBGR bgr; - for (i=0;i<16;i++) + CBGR48 bgr; + for (i=0;ipix_width,h=task->pix_height,cx=w/2,cy=h/2, - lo=Gs->num*h/mp_cnt,hi=(Gs->num+1)*h/mp_cnt; + lo=Gs->num*h/mp_cnt,hi=(Gs->num+1)*h/mp_cnt; F64 yy,y_total=0; CDC *dc=DCAlias(,task); for (y=lo;ywin_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; - SetVGAPalette4(vga_palette4_gray); - SetVGAPaletteColor(15,0xFF0000); //White is red + GrPaletteSet(gr_palette_gray); + GrPaletteColorSet(15,0xFFFF00000000); //White is red WinMax; AutoComplete; @@ -119,7 +119,8 @@ U0 PoleZeros() try { Draw; while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<pix_width/2; cy=Fs->pix_height/2; @@ -130,8 +131,10 @@ pz_msg: case MSG_IP_MOVE: if (tempc) { p11=a1;p22=a2; - //get to last mouse move - while (msg_code=ScanMsg(&a1,&a2,1<x+vn_y*ls->y+vn_z*ls->z)>>16; //The dot product of the light source -//vect and the surface normal -//gives an illumination number. + //vect and the surface normal + //gives an illumination number. -//TempleOS will generate a random U16 -//and compare to dither_probability_u16 and -//will pick from two colors. -//Probability dithering does not work with pen_width>1 at this time. + //TempleOS will generate a random U16 + //and compare to dither_probability_u16 and + //will pick from two colors. + //Probability dithering does not work with pen_width>1 at this time. if (i<0) { dc->color=ROPF_PROBABILITY_DITHER+BLACK<<16+color; dc->dither_probability_u16=-i; @@ -58,19 +58,19 @@ U0 DrawIt(CTask *task,CDC *dc) CCtrl *c=CtrlFindUnique(task,CTRLT_VIEWING_ANGLES); CViewAngles *s=c->state; F64 tt=0.5*(Sin(ã*2*(tS%10.0)/10.0)+2.0), - é,é2,è,è2,radius,d; + é,é2,è,è2,radius,d; I64 i,j,cx=task->pix_width/2,cy=task->pix_height/2; CD3I32 poly[3],ls; dc->flags|=DCF_TRANSFORMATION; - DCAllocDepthBuf(dc); + DCDepthBufAlloc(dc); - GrIdentEqu(dc->r); - GrRotZEqu(dc->r,s->az); - GrRotYEqu(dc->r,s->ay); - GrRotXEqu(dc->r,s->ax+ã); - GrScaleEqu(dc->r,tt); - GrSetRotMat(dc,dc->r); + Mat4x4IdentEqu(dc->r); + Mat4x4RotZ(dc->r,s->az); + Mat4x4RotY(dc->r,s->ay); + Mat4x4RotX(dc->r,s->ax+ã); + Mat4x4Scale(dc->r,tt); + DCMat4x4Set(dc,dc->r); ls.x=-(ip.pos.x-task->pix_left-task->scroll_x-cx); ls.y=-(ip.pos.y-task->pix_top-task->scroll_y-cy); diff --git a/Demo/Graphics/Shadow.CPP b/Demo/Graphics/Shadow.CPP index a3262fa..a5fff27 100644 Binary files a/Demo/Graphics/Shadow.CPP and b/Demo/Graphics/Shadow.CPP differ diff --git a/Demo/Graphics/Slider.CPP b/Demo/Graphics/Slider.CPP index 8f9d28e..1a026e0 100644 --- a/Demo/Graphics/Slider.CPP +++ b/Demo/Graphics/Slider.CPP @@ -24,24 +24,29 @@ U0 DrawCtrlSlider(CDC *dc,CCtrl *c) GrRect(dc, c->left,c->top,SLIDER_SPACING*3+2,SLIDER_SPACING*2+SLIDER_RANGE); dc->color=BLUE; GrRect(dc, c->left+SLIDER_BORDER,c->top+SLIDER_BORDER, - SLIDER_SPACING*3+2-2*SLIDER_BORDER,SLIDER_SPACING*2+SLIDER_RANGE-2*SLIDER_BORDER); + SLIDER_SPACING*3+2-2*SLIDER_BORDER, + SLIDER_SPACING*2+SLIDER_RANGE-2*SLIDER_BORDER); dc->color=BLACK; GrLine(dc,c->left+1*SLIDER_SPACING+0,c->top+SLIDER_SPACING, - c->left+1*SLIDER_SPACING+0,c->top+SLIDER_SPACING+SLIDER_RANGE-1); + c->left+1*SLIDER_SPACING+0,c->top+SLIDER_SPACING+SLIDER_RANGE-1); GrLine(dc,c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING, - c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING+SLIDER_RANGE-1); + c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING+SLIDER_RANGE-1); dc->color=LTRED; GrPrint(dc,c->left+1*SLIDER_SPACING+0-FONT_WIDTH/2, - c->top+SLIDER_SPACING+SLIDER_RANGE+3, - "%d",s->left_pos*10/SLIDER_RANGE); + c->top+SLIDER_SPACING+SLIDER_RANGE+3, + "%d",s->left_pos*10/SLIDER_RANGE); GrPrint(dc,c->left+2*SLIDER_SPACING+1-FONT_WIDTH/2, - c->top+SLIDER_SPACING+SLIDER_RANGE+3, - "%d",s->right_pos*10/SLIDER_RANGE); - GrRect(dc,c->left+1*SLIDER_SPACING+0-3,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-2,7,5); - GrRect(dc,c->left+2*SLIDER_SPACING+1-3,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-2,7,5); + c->top+SLIDER_SPACING+SLIDER_RANGE+3, + "%d",s->right_pos*10/SLIDER_RANGE); + GrRect(dc,c->left+1*SLIDER_SPACING+0-3, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-2,7,5); + GrRect(dc,c->left+2*SLIDER_SPACING+1-3, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-2,7,5); dc->color=YELLOW; - GrRect(dc,c->left+1*SLIDER_SPACING+0-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-1,5,3); - GrRect(dc,c->left+2*SLIDER_SPACING+1-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-1,5,3); + GrRect(dc,c->left+1*SLIDER_SPACING+0-2, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-1,5,3); + GrRect(dc,c->left+2*SLIDER_SPACING+1-2, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-1,5,3); } U0 UpdateDerivedCtrlSlider(CCtrl *c) @@ -78,7 +83,7 @@ CCtrl *SliderNew() c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; c->update_derived_vals=&UpdateDerivedCtrlSlider; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; Preempt(old_preempt); @@ -87,7 +92,7 @@ CCtrl *SliderNew() U0 SliderDel(CCtrl *c) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(c); Preempt(old_preempt); Free(c); @@ -101,8 +106,8 @@ U0 Main() CCtrl *c=SliderNew; PressAKey; "Left: %d Right: %d\n", - sld.left_pos*10/SLIDER_RANGE, - sld.right_pos*10/SLIDER_RANGE; + sld.left_pos*10/SLIDER_RANGE, + sld.right_pos*10/SLIDER_RANGE; SliderDel(c); DocBottom; } diff --git a/Demo/Graphics/Speedline.CPP b/Demo/Graphics/Speedline.CPP index 54d12ec..35aefbe 100644 --- a/Demo/Graphics/Speedline.CPP +++ b/Demo/Graphics/Speedline.CPP @@ -16,8 +16,8 @@ public U0 SpeedLineDemo() DocClear; do { msg_code=GetMsg(&a1,&a2, - 1<pen_width=0.04*ip.speed; GrLine3(dc,x1,y1,0,x2,y2,0); msg_code=GetMsg(&a1,&a2, - 1<text_attr=BLACK<<4+WHITE; //Current $LK,"CTask",A="MN:CTask"$ is Fs segment register. for (i=0;i<0x8000;i+=0x200) { - //Sun +//Sun x=0.2*GR_WIDTH; y=0.5*GR_HEIGHT; radius=120; gr.dc->color=DKGRAY; GrCircle(gr.dc,x,y,radius); @@ -25,7 +25,7 @@ U0 SunMoon() x=0.8*GR_WIDTH-i/0x200; y=0.5*GR_HEIGHT; radius=75; gr.dc->color=DKGRAY; GrCircle(gr.dc,x,y,radius); - // for the "ã" character. +// for the "ã" character. GrCircle(gr.dc,x+0.5*radius,y,1.2*radius,,ã-.31*ã,0.62*ã); gr.dc->color=ROPF_PROBABILITY_DITHER+LTGRAY<<16+BLACK; gr.dc->dither_probability_u16=i; //U16 can be [0,65535] diff --git a/Demo/Graphics/Symmetry.CPP b/Demo/Graphics/Symmetry.CPP index 317e5c3..dc715bb 100644 --- a/Demo/Graphics/Symmetry.CPP +++ b/Demo/Graphics/Symmetry.CPP @@ -15,11 +15,11 @@ U0 SymmetryDemo() DCFill; DocClear; dc->flags|=DCF_SYMMETRY; - GrSetSymmetry(dc,Fs->pix_width/2,0,Fs->pix_width/2,1); + DCSymmetrySet(dc,Fs->pix_width/2,0,Fs->pix_width/2,1); do { msg_code=GetMsg(&a1,&a2, - 1<flags&=~DCF_SYMMETRY; @@ -29,12 +29,12 @@ U0 SymmetryDemo() while (msg_code!=MSG_IP_R_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); msg_code=GetMsg(&a1,&a2, - 1<flags|=DCF_SYMMETRY; break; case MSG_IP_L_DOWN: @@ -44,7 +44,7 @@ U0 SymmetryDemo() while (msg_code!=MSG_IP_L_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); msg_code=GetMsg(&a1,&a2, - 1<left,c->top,SLIDER_SPACING*3+2,SLIDER_SPACING*2+SLIDER_RANGE); dc->color=BLUE; GrRect(dc, c->left+SLIDER_BORDER,c->top+SLIDER_BORDER, - SLIDER_SPACING*3+2-2*SLIDER_BORDER,SLIDER_SPACING*2+SLIDER_RANGE-2*SLIDER_BORDER); + SLIDER_SPACING*3+2-2*SLIDER_BORDER, + SLIDER_SPACING*2+SLIDER_RANGE-2*SLIDER_BORDER); dc->color=BLACK; GrLine(dc,c->left+1*SLIDER_SPACING+0,c->top+SLIDER_SPACING, - c->left+1*SLIDER_SPACING+0,c->top+SLIDER_SPACING+SLIDER_RANGE-1); + c->left+1*SLIDER_SPACING+0,c->top+SLIDER_SPACING+SLIDER_RANGE-1); GrLine(dc,c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING, - c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING+SLIDER_RANGE-1); + c->left+2*SLIDER_SPACING+1,c->top+SLIDER_SPACING+SLIDER_RANGE-1); dc->color=LTRED; GrPrint(dc,c->left+1*SLIDER_SPACING+0-FONT_WIDTH/2, - c->top+SLIDER_SPACING+SLIDER_RANGE+3, - "%d",s->left_pos*10/SLIDER_RANGE); + c->top+SLIDER_SPACING+SLIDER_RANGE+3, + "%d",s->left_pos*10/SLIDER_RANGE); GrPrint(dc,c->left+2*SLIDER_SPACING+1-FONT_WIDTH/2, - c->top+SLIDER_SPACING+SLIDER_RANGE+3, - "%d",s->right_pos*10/SLIDER_RANGE); - GrRect(dc,c->left+1*SLIDER_SPACING+0-3,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-2,7,5); - GrRect(dc,c->left+2*SLIDER_SPACING+1-3,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-2,7,5); + c->top+SLIDER_SPACING+SLIDER_RANGE+3, + "%d",s->right_pos*10/SLIDER_RANGE); + GrRect(dc,c->left+1*SLIDER_SPACING+0-3, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-2,7,5); + GrRect(dc,c->left+2*SLIDER_SPACING+1-3, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-2,7,5); dc->color=YELLOW; - GrRect(dc,c->left+1*SLIDER_SPACING+0-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-1,5,3); - GrRect(dc,c->left+2*SLIDER_SPACING+1-2,c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-1,5,3); + GrRect(dc,c->left+1*SLIDER_SPACING+0-2, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->left_pos-1,5,3); + GrRect(dc,c->left+2*SLIDER_SPACING+1-2, + c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->right_pos-1,5,3); } U0 UpdateDerivedCtrlSlider(CCtrl *c) @@ -78,7 +83,7 @@ CCtrl *SliderNew() CCtrl *c; if (Fs!=adam_task) { "Must be Adam Included with SHIFT-F5.\n" - "(Would crash when code mem was freed.)\n"; + "(Would crash when code mem was freed.)\n"; return NULL; } c=ACAlloc(sizeof(CCtrl)); @@ -89,7 +94,7 @@ CCtrl *SliderNew() c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; c->update_derived_vals=&UpdateDerivedCtrlSlider; - old_preempt=Preempt(OFF); + old_preempt=Preempt; QueIns(c,sys_winmgr_task->last_ctrl); TaskDerivedValsUpdate; Preempt(old_preempt); @@ -98,7 +103,7 @@ CCtrl *SliderNew() U0 SliderDel(CCtrl *c) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(c); Preempt(old_preempt); Free(c->state); diff --git a/Demo/Graphics/WallPaperFish.CPP b/Demo/Graphics/WallPaperFish.CPP index 79abaed..1c45ca5 100644 Binary files a/Demo/Graphics/WallPaperFish.CPP and b/Demo/Graphics/WallPaperFish.CPP differ diff --git a/Demo/KeyBitMap.CPP b/Demo/KeyBitMap.CPP index f4f1c09..2ad1064 100644 Binary files a/Demo/KeyBitMap.CPP and b/Demo/KeyBitMap.CPP differ diff --git a/Demo/LastClass.CPP b/Demo/LastClass.CPP index 5db96c7..5efad38 100644 --- a/Demo/LastClass.CPP +++ b/Demo/LastClass.CPP @@ -30,4 +30,4 @@ PressAKey; ClassRep(Fs); -//See also $LK,"DocFormDo",A="MN:DocFormDo"$(), $LK,"::/Demo/Dsk/BlkDevRep.CPP"$ and $LK,"::/Demo/ClassMeta.CPP"$. +//See also $LK,"DocForm",A="MN:DocForm"$(), $LK,"::/Demo/Dsk/BlkDevRep.CPP"$ and $LK,"::/Demo/ClassMeta.CPP"$. diff --git a/Demo/Lectures/AndNotMod.CPP b/Demo/Lectures/AndNotMod.CPP index 71ef6db..cec4f73 100644 --- a/Demo/Lectures/AndNotMod.CPP +++ b/Demo/Lectures/AndNotMod.CPP @@ -6,34 +6,34 @@ U0 TimeIns() { I64 start1,end1,start2,end2,overhead_time,test_time; I64 reg i,reg temp; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CPURep; -//Measure Loop Overhead + //Measure Loop Overhead start1=GetTSC; for (i=0;i>32 =%X\n",i>>32; -/* Standard integer types are declared - with a special compiler feature which - allows a structure to be accessed as a - whole. That's why the i variable can - be accessed normally in addition to - structure member access $LK,"I64",A="MN:I64"$. The actual - intrinsic compiler type is U64i. + /* Standard integer types are declared +with a special compiler feature which +allows a structure to be accessed as a +whole. That's why the i variable can +be accessed normally in addition to +structure member access $LK,"I64",A="MN:I64"$. The actual +intrinsic compiler type is U64i. public U64i union I64 { @@ -65,10 +65,10 @@ public U64i union I64 U32 u32[2]; }; - It's not quite as great as it seems - because the compiler decides it cannot - place i into a reg, so there is a - penalty. +It's not quite as great as it seems +because the compiler decides it cannot +place i into a reg, so there is a +penalty. For a complete lst of nonstandard compiler features, see $LK,"::/Doc/HolyC.TXT"$. diff --git a/Demo/Lectures/FixedPointAdvanced.CPP b/Demo/Lectures/FixedPointAdvanced.CPP index 5a87d5e..9bdd62a 100644 --- a/Demo/Lectures/FixedPointAdvanced.CPP +++ b/Demo/Lectures/FixedPointAdvanced.CPP @@ -78,7 +78,7 @@ U0 Main() I64 start,end,overhead_time,test_time; F64 d1,fsum; I64 reg i,temp,reg d2,reg sum; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CPURep; @@ -86,18 +86,18 @@ U0 Main() for (i=0;i<65536;i++) coordinates[i]=RandU32; -//Measure Loop Overhead + //Measure Loop Overhead start=GetTSC; for (i=SAMPLE_SIZE-1;i>=0;i--) { } end=GetTSC; overhead_time=end-start; "$$RED$$Overhead Cycles :%10.5f$$FG$$\n", - ToF64(overhead_time)/SAMPLE_SIZE; + ToF64(overhead_time)/SAMPLE_SIZE; -//Measure F64 arithmetic -// (Some of this is due to crappy -// compiler code.) + //Measure F64 arithmetic + // (Some of this is due to crappy + // compiler code.) d1=Sin(1.0); fsum=0; start=GetTSC; @@ -107,39 +107,39 @@ U0 Main() test_time=end-start; "Float Sum :%X\n",ToI64(fsum); "$$RED$$Float Cycles :%10.5f$$FG$$\n", - ToF64(test_time)/SAMPLE_SIZE; + ToF64(test_time)/SAMPLE_SIZE; -//Measure fixed point arithmetic + //Measure fixed point arithmetic d2=Sin(1.0)*0x100000000; sum=0; start=GetTSC; for (i=SAMPLE_SIZE-1;i>=0;i--) { - temp=d2*coordinates[i&65535]; + temp=d2*coordinates[i&65535]; sum+=temp.i32[1]; } end=GetTSC; test_time=end-start; "Fixed-Point Sum :%X\n",sum; "$$RED$$Fixed-Point Cycles :%10.5f$$FG$$\n", - ToF64(test_time)/SAMPLE_SIZE; + ToF64(test_time)/SAMPLE_SIZE; -//Measure fixed point arithmetic + //Measure fixed point arithmetic start=GetTSC; sum=AsmFixedPt; end=GetTSC; test_time=end-start; "Asm Fixed-Point Sum :%X\n",sum; "$$RED$$Asm Fixed-Point Cycles:%10.5f$$FG$$\n", - ToF64(test_time)/SAMPLE_SIZE; + ToF64(test_time)/SAMPLE_SIZE; -//Measure float arithmetic + //Measure float arithmetic start=GetTSC; sum=AsmFloat; end=GetTSC; test_time=end-start; "Asm Float Sum :%X\n",sum; "$$RED$$Asm Float Cycles :%10.5f$$FG$$\n", - ToF64(test_time)/SAMPLE_SIZE; + ToF64(test_time)/SAMPLE_SIZE; Preempt(old_preempt); } diff --git a/Demo/Lectures/GraphicsCPULoad.CPP b/Demo/Lectures/GraphicsCPULoad.CPP index b25492a..3710e19 100644 --- a/Demo/Lectures/GraphicsCPULoad.CPP +++ b/Demo/Lectures/GraphicsCPULoad.CPP @@ -18,15 +18,15 @@ U0 GrDemo() { I64 i; F64 t; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CPURep; for (i=0;i<16;i++) { t=VGAPattern(0x5555555555555555); "$$GREEN$$Rate:$$RED$$%5.1f FPS$$FG$$" - " $$GREEN$$Load@30Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*30.0; + " $$GREEN$$Load@30Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*30.0; t=VGAPattern(0x3333333333333333); "$$GREEN$$Rate:$$RED$$%5.1f FPS$$FG$$" - " $$GREEN$$Load@30Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*30.0; + " $$GREEN$$Load@30Hz:$$RED$$%5.1f%%$$FG$$\n",1/t,100*t*30.0; } Preempt(old_preempt); // will flush screen VGA cache. diff --git a/Demo/Lectures/InterruptDemo.CPP b/Demo/Lectures/InterruptDemo.CPP index 234e042..7e60581 100644 --- a/Demo/Lectures/InterruptDemo.CPP +++ b/Demo/Lectures/InterruptDemo.CPP @@ -55,22 +55,22 @@ U0 TimeIns() { I64 start,end; I64 i,old_irq; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CPURep; old_irq=IntEntrySet(I_F_UNARY_MINUS,F_UNARY_MINUS_INT,IDTET_TRAP); -//Measure interrupt time + //Measure interrupt time start=GetTSC; for (i=0;icode_heap); while (TRUE) { "This will compile an expression\n" - "consisting of integers, parentheses\n" - "and the operators +,-,* and /.\n"; + "consisting of integers, parentheses\n" + "and the operators +,-,* and /.\n"; src=GetStr; if (*src) { src2=src; @@ -217,7 +217,7 @@ U0 Main() "$$RED$$This code is not efficient, but the compiler is simple.$$FG$$\n"; Un(code,dst-code); //Unassemble the code we created. //$LK,"Call",A="MN:Call"$() is a function. See $LK,"_CALL",A="FF:::/Kernel/KUtils.CPP,_CALL"$:: -//See also $LK,"CallInd",A="MN:CallInd"$(). See $LK,"_CALLIND",A="FF:::/Kernel/KUtils.CPP,_CALLIND"$:: + //See also $LK,"CallInd",A="MN:CallInd"$(). See $LK,"_CALLIND",A="FF:::/Kernel/KUtils.CPP,_CALLIND"$:: "$$LTBLUE$$Answer:%d$$FG$$\n",Call(code); } catch { "$$RED$$Error$$FG$$\n"; diff --git a/Demo/Lectures/MiniGrLib.CPP b/Demo/Lectures/MiniGrLib.CPP index 7d69a3a..d04c270 100644 --- a/Demo/Lectures/MiniGrLib.CPP +++ b/Demo/Lectures/MiniGrLib.CPP @@ -17,7 +17,7 @@ U0 MGInit() U0 MGUpdate() {//Copy image to VGA memory - //For better performance we could only write what's changed. +//For better performance we could only write what's changed. //0xA0000 is slower than normal RAM. OutU8(VGAP_INDEX,VGAR_MAP_MASK); OutU8(VGAP_DATA,0xF);//All color planes at once -- Black and White @@ -32,7 +32,7 @@ U0 MGPlot(I64 x,I64 y) U0 MGHLine(I64 x1,I64 x2,I64 y) {//Warning! No clipping - //For performance, we do as many whole-bytes as possible. +//For performance, we do as many whole-bytes as possible. U8 *ptr; I64 i,w,leading,trailing,whole_bytes; if (x2=0) { -//m1@a1 * m2@a2 = m1*m2@(a1+a2) + //m1@a1 * m2@a2 = m1*m2@(a1+a2) -//(x1+y1i)*(x2+y2i) = x1*x2+(x1*y1+x2*y2)i-y1*y2 + //(x1+y1i)*(x2+y2i) = x1*x2+(x1*y1+x2*y2)i-y1*y2 -// me$SY,-3$ti$SY,0$=mCos(t)+imSin(t) + // me$SY,-3$ti$SY,0$=mCos(t)+imSin(t) x2=x1; y2=y1; x1=c*x2-s*y2; @@ -108,7 +108,7 @@ U0 MiniGrLibDemo() Bool old_preempt; MGInit; - old_preempt=Preempt(OFF); + old_preempt=Preempt; for (i=0;i<100;i++) MGHLine(200+i,400+i,300+i); for (i=0;i<500;i+=10) @@ -124,7 +124,7 @@ It is not normal to by-pass the TempleOS graphcis routines. The TempleOS graphics don't know VGA has changed. This bit tells TempleOS to update whole screen. */ -// will flush screen VGA cache. + // will flush screen VGA cache. VGAFlush; } diff --git a/Demo/Lectures/NegDisp.CPP b/Demo/Lectures/NegDisp.CPP index 02b9c6c..a26b504 100644 --- a/Demo/Lectures/NegDisp.CPP +++ b/Demo/Lectures/NegDisp.CPP @@ -33,12 +33,12 @@ This example uses 8-bit negative displacements. class Person { $$=-128; - U8 first [32]; - U8 last [32]; - U8 address1 [64]; - U8 address2 [64]; - U8 city [32]; - U8 state_zip[32]; +U8 first [32]; +U8 last [32]; +U8 address1 [64]; +U8 address2 [64]; +U8 city [32]; +U8 state_zip[32]; }; U0 OffsetDemo2() diff --git a/Demo/Lectures/Optimization.CPP b/Demo/Lectures/Optimization.CPP index df37d2d..d49ae03 100644 --- a/Demo/Lectures/Optimization.CPP +++ b/Demo/Lectures/Optimization.CPP @@ -61,7 +61,7 @@ _WELL_OPTIMIZED3:: XOR RAX,RAX MOV RCX,SAMPLES-1 @@05: ADD RAX,RCX - LOOP @@05 //This instruction sucks, speedwise, but it saves code size + LOOP @@05 //Instruction sucks in speed, but saves code size. RET } diff --git a/Demo/Lectures/PCIInterrupts.CPP b/Demo/Lectures/PCIInterrupts.CPP index b359d85..230f6ce 100644 --- a/Demo/Lectures/PCIInterrupts.CPP +++ b/Demo/Lectures/PCIInterrupts.CPP @@ -11,25 +11,25 @@ interrupt U0 MyVect40() { lock {progress1++;} - *LAPIC_EOI(U32 *)=0; +*LAPIC_EOI(U32 *)=0; } interrupt U0 MyVect41() { lock {progress2++;} - *LAPIC_EOI(U32 *)=0; +*LAPIC_EOI(U32 *)=0; } interrupt U0 MyVect42() { lock {progress3++;} - *LAPIC_EOI(U32 *)=0; +*LAPIC_EOI(U32 *)=0; } interrupt U0 MyVect43() { lock {progress4++;} - *LAPIC_EOI(U32 *)=0; +*LAPIC_EOI(U32 *)=0; } I64 vect[4]={&MyVect40,&MyVect41,&MyVect42,&MyVect43}; @@ -44,8 +44,8 @@ U0 Main() for (i=I_USER;i will flush screen VGA cache. + // will flush screen VGA cache. VGAFlush; PressAKey; @@ -37,7 +37,7 @@ U0 PageTableDemo1() InvlPg(VGAM_GRAPHICS); InvlPg(VGAM_GRAPHICS+0x1000); -// will flush screen VGA cache. + // will flush screen VGA cache. VGAFlush; } diff --git a/Demo/Lectures/PageTableEntries2.CPP b/Demo/Lectures/PageTableEntries2.CPP index 8023d0a..bd1f1e8 100644 --- a/Demo/Lectures/PageTableEntries2.CPP +++ b/Demo/Lectures/PageTableEntries2.CPP @@ -18,7 +18,7 @@ interrupt haserrcode U0 PageFault() *pte_addr|=1; InvlPg(addr); err_code=rbp[1]; - MOV_RAX_CR2 + MOV_RAX_CR2 reported_fault_addr=GetRAX; } diff --git a/Demo/Lectures/Ring3.CPP b/Demo/Lectures/Ring3.CPP index 2e94cf8..941a8c4 100644 --- a/Demo/Lectures/Ring3.CPP +++ b/Demo/Lectures/Ring3.CPP @@ -33,39 +33,39 @@ U0 Ring3Demo() TSSBusy(Gs->tss->tr_ring3,OFF); SetRAX(Gs->tss->tr_ring3+3); - LTR AX + LTR AX -asm { - MOV U64 [&old_stk],RSP + asm { + MOV U64 [&old_stk],RSP - LEA RAX,[R3_CALLBACK] - MOV U64 [&new_rip],RAX - - MOV AX,CGDT.ds_ring3+3 - MOV DS,AX - MOV ES,AX + LEA RAX,[R3_CALLBACK] + MOV U64 [&new_rip],RAX - PUSH U32 CGDT.ds_ring3+3 //STKSEG - PUSH U64 [&old_stk] - PUSH U32 0 //FLAGS--interrupts off - PUSH U32 CGDT.cs64_ring3+3 - LEA RAX,[R3_START] - PUSH RAX - IRET + MOV AX,CGDT.ds_ring3+3 + MOV DS,AX + MOV ES,AX -R3_START: - INC U64 [SYS_PROGRESS1] - CLI //This causes general protection fault #13 + PUSH U32 CGDT.ds_ring3+3 //STKSEG + PUSH U64 [&old_stk] + PUSH U32 0 //FLAGS--interrupts off + PUSH U32 CGDT.cs64_ring3+3 + LEA RAX,[R3_START] + PUSH RAX + IRET -R3_CALLBACK: - MOV AX,CGDT.ds - MOV DS,AX - MOV ES,AX + R3_START: + INC U64 [SYS_PROGRESS1] + CLI //This causes general protection fault #13 + + R3_CALLBACK: + MOV AX,CGDT.ds + MOV DS,AX + MOV ES,AX } TSSBusy(Gs->tss->tr,OFF); SetRAX(Gs->tss->tr); - LTR AX + LTR AX IntEntrySet(0x0D,old_vect,IDTET_IRQ,0); STI diff --git a/Demo/Lectures/ScreenMemory.CPP b/Demo/Lectures/ScreenMemory.CPP index 007cc16..6da4315 100644 --- a/Demo/Lectures/ScreenMemory.CPP +++ b/Demo/Lectures/ScreenMemory.CPP @@ -3,16 +3,16 @@ U0 PlotXY(I64 x,I64 y) { - //Screen bits are reversed +//Screen bits are reversed LBts(VGAM_GRAPHICS,y*GR_WIDTH+x^7); } U0 Main() { I64 i; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; -//This makes all 4 color planes active. + //This makes all 4 color planes active. OutU8(VGAP_INDEX,VGAR_MAP_MASK); OutU8(VGAP_DATA,WHITE); MemSet(VGAM_GRAPHICS,0,GR_WIDTH*GR_HEIGHT/8); @@ -41,12 +41,13 @@ That means no read-modify-writes, too. Preempt(old_preempt); -//TempleOS has a 4 plane memory duplicate of the screen, $LK,"gr.screen_image",A="MN:CGrGlbls"$, -//and only writes actual changes. See $LK,"GrUpdateVGAGraphics",A="MN:GrUpdateVGAGraphics"$(). -// will flush screen VGA cache. + //TempleOS has a 4 plane memory duplicate of the screen, $LK,"gr.screen_image",A="MN:CGrGlbls"$, + //and only writes actual changes. See $LK,"GrUpdateVGAGraphics",A="MN:GrUpdateVGAGraphics"$(). + // will flush screen VGA cache. VGAFlush; } Main; //See $LK,"::/Demo/Lectures/GraphicsCPULoad.CPP"$. + diff --git a/Demo/Lectures/Spinning.CPP b/Demo/Lectures/Spinning.CPP index d63142f..fe5b300 100644 --- a/Demo/Lectures/Spinning.CPP +++ b/Demo/Lectures/Spinning.CPP @@ -3,8 +3,8 @@ U0 LoadTask(I64) { I64 i,j=100; //Preemption is ctrlled on a per task basis. -//Preemption is OFF by default on new tasks. -//It is turned on for user terminal tasks. + //Preemption is OFF by default on new tasks. + //It is turned on for user terminal tasks. Preempt(ON); while (TRUE) { for (i=0;i<10000;i++) @@ -29,13 +29,13 @@ U0 SpinningNoPreempt() Bool old_preempt; "Spinning with no preemption...\n"; -//Put on screen before it starts. Text lags by one refresh -//and we might catch it in the middle of an update. + //Put on screen before it starts. Text lags by one refresh + //and we might catch it in the middle of an update. WinMgrSync; WinMgrSync; WinMgrSync; - old_preempt=Preempt(OFF); + old_preempt=Preempt; for (i=0;i<3000000;i++) InU8(0x21); Preempt(old_preempt); @@ -69,7 +69,7 @@ U0 CooperativeMultitaskingPreempt() U0 CooperativeMultitaskingNoPreempt() { F64 timeout=tS+3.0; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; "Cooperative multitasking with no preemption...\n"; while (tSsf==(1+p1) ? - 2)n==p1*p1 ->sf==(1+p1+p1^2) ? - 3)n==p1*p2 ->sf==(p1+1)*(p2+1) ? +/* At this point we have three possible cases to test +1)n==p1 ->sf==(1+p1) ? +2)n==p1*p1 ->sf==(1+p1+p1^2) ? +3)n==p1*p2 ->sf==(p1+1)*(p2+1) ? - */ +*/ if (1+n==target_sf) { while (i++ sf==(p1+1)*(p2+1) ? where p1!=1 && p2!=1 -// if p1==1 || p2==1, it is FALSE because we checked a single prime above. + // if p1==1 || p2==1, it is FALSE because we checked a single prime above. -// sf==(p1+1)*(n/p1+1) -// sf==n+p1+n/p1+1 -// sf*p1==n*p1+p1^2+n+p1 -// p1^2+(n+1-sf)*p1+n=0 -// x=(-b+/-sqrt(b^2-4ac))/2a -// a=1 -// x=(-b+/-sqrt(b^2-4c))/2 -// b=n+1-sf;c=n + // sf==(p1+1)*(n/p1+1) + // sf==n+p1+n/p1+1 + // sf*p1==n*p1+p1^2+n+p1 + // p1^2+(n+1-sf)*p1+n=0 + // x=(-b+/-sqrt(b^2-4ac))/2a + // a=1 + // x=(-b+/-sqrt(b^2-4c))/2 + // b=n+1-sf;c=n b=n+1-target_sf; // x=(-b+/-sqrt(b^2-4n))/2 disc=b*b-4*n; @@ -264,8 +264,8 @@ class RangeJob I64 TestCoreSubRange(RangeJob *r) { I64 i,j,m,n,n2,sf,result=0,range=r->hi-r->lo, - *sumfacts=MAlloc(range*sizeof(I64)), - *residue =MAlloc(range*sizeof(I64)); + *sumfacts=MAlloc(range*sizeof(I64)), + *residue =MAlloc(range*sizeof(I64)); U16 *pow_cnt =MAlloc(range*sizeof(U16)); Prime *p=r->primes; PowPrime *pp; @@ -301,7 +301,7 @@ I64 TestCoreSubRange(RangeJob *r) n2=sf-n-1; if (nN) { if (r->lo<=n2hi && sumfacts[n2-r->lo]-n2-1==n || - TestSumFact(n2,sf,r->sqrt_primes,r->cbrt_primes,r->primes)) { + TestSumFact(n2,sf,r->sqrt_primes,r->cbrt_primes,r->primes)) { DocPrint(r->doc,"%u:%u\n",n,sf-n-1); result++; } @@ -335,11 +335,11 @@ I64 MagicPairs(I64 N) F64 t0=tS; I64 result=0; I64 sqrt_primes,cbrt_primes,num_powprimes, - i,k,n=(N-1)/mp_cnt+1; + i,k,n=(N-1)/mp_cnt+1; Prime *primes=PrimesNew(N,&sqrt_primes,&cbrt_primes); PowPrime *powprimes=PowPrimesNew(N,sqrt_primes,primes,&num_powprimes); "N:%u SqrtPrimes:%u CbrtPrimes:%u PowersOfPrimes:%u\n", - N,sqrt_primes,cbrt_primes,num_powprimes; + N,sqrt_primes,cbrt_primes,num_powprimes; k=2; for (i=0;i to Exit\n"; + " to Exit\n"; //We don't want the mouse buttons to reposition the cursor, //so we inhibit the window mgr from processing them. diff --git a/Demo/MultiCore/Clouds.CPP b/Demo/MultiCore/Clouds.CPP index 1b7403c..0b954b3 100644 --- a/Demo/MultiCore/Clouds.CPP +++ b/Demo/MultiCore/Clouds.CPP @@ -116,8 +116,8 @@ U0 Init() Cloud *c=clouds; CloudPen *cp=cloud_pens; I64 i,j,k,l, - w=Fs->pix_width, - h=SKY_LINES*FONT_HEIGHT; + w=Fs->pix_width, + h=SKY_LINES*FONT_HEIGHT; for (i=0;ix=ToI64(w/2+Rand*w/2-w/4)<<32; @@ -162,7 +162,7 @@ U0 CleanUp() U0 SongTask(I64) {//Song by the Holy Spirit //This specifies a callback routine -//to be called when the task dies. + //to be called when the task dies. Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) { @@ -191,7 +191,7 @@ U0 CloudScene() "$$BG,YELLOW$$%h5c",'\n'; BibleVerse(,"Exodus,14:19",7); - Preempt(OFF); + Preempt; Fs->draw_it=&DrawIt; GetChar; WinMgrSync; diff --git a/Demo/MultiCore/Lock.CPP b/Demo/MultiCore/Lock.CPP index 943f53f..896f2fb 100644 --- a/Demo/MultiCore/Lock.CPP +++ b/Demo/MultiCore/Lock.CPP @@ -24,8 +24,8 @@ U0 UnlockedInc() glbl=0; tempm0=JobQue(&MPUnlockedInc,NULL,0,0); tempm1=JobQue(&MPUnlockedInc,NULL,1,0); - GetResult(tempm0); - GetResult(tempm1); + JobResultGet(tempm0); + JobResultGet(tempm1); "Correct Cnt:%X Actual Cnt:%X\n",CNT*2,glbl; } @@ -34,7 +34,7 @@ U0 MPLockedInc(I64) I64 i; for (i=0;inum/my_mp_cnt, - hi=mp_n*(Gs->num+1)/my_mp_cnt, - result=0,i; + hi=mp_n*(Gs->num+1)/my_mp_cnt, + result=0,i; for (i=lo;ipix_width, - v=Fs->pix_height; + h=Fs->pix_width, + v=Fs->pix_height; F64 t1,t2,results[NUM_TESTS]; CDC *dc=DCAlias; @@ -71,7 +71,7 @@ U0 MPAdd() dc->color=RED; dc->pen_width=2; GrLine3(dc,i*h/(NUM_TESTS-1), v-results[i ]/MAX_PERCENT*v,0, - (i+1)*h/(NUM_TESTS-1),v-results[i+1]/MAX_PERCENT*v,0); + (i+1)*h/(NUM_TESTS-1),v-results[i+1]/MAX_PERCENT*v,0); dc->color=GREEN; GrPrint(dc,i*h/(NUM_TESTS-1),v-FONT_HEIGHT,"10e%d",i+MIN_TEST); GrLine(dc,i*h/(NUM_TESTS-1),0,i*h/(NUM_TESTS-1),v); diff --git a/Demo/MultiCore/Palindrome.CPP b/Demo/MultiCore/Palindrome.CPP index 49d87dc..d7531b7 100644 --- a/Demo/MultiCore/Palindrome.CPP +++ b/Demo/MultiCore/Palindrome.CPP @@ -7,7 +7,7 @@ CDoc *doc; U0 PDNormalize() { U8 *r=MAlloc(size+2*BORDER_CHARS), - *src=buf,*dst=r; + *src=buf,*dst=r; I64 ch; *dst++='['; //Border while (size--) { @@ -38,12 +38,12 @@ U0 MPPalindrome(I64 dummy=0) { nounusedwarn dummy; U8 *src=buf+BORDER_CHARS+size*Gs->num/mp_cnt, - *f,*b; + *f,*b; I64 len,best=0, - my_size=(size+mp_cnt-1)/mp_cnt; + my_size=(size+mp_cnt-1)/mp_cnt; while (my_size--) { -//Odd + //Odd f=src+1; b=src-1; while (*f==*b) { @@ -56,7 +56,7 @@ U0 MPPalindrome(I64 dummy=0) PDAnswer(src,len); } -//Even + //Even f=src+1; b=src; while (*f==*b) { diff --git a/Demo/MultiCore/Primes.CPP b/Demo/MultiCore/Primes.CPP index 17b07c2..606fec4 100644 --- a/Demo/MultiCore/Primes.CPP +++ b/Demo/MultiCore/Primes.CPP @@ -4,10 +4,10 @@ I64 prime_range,my_mp_cnt,pending; U0 PrimesJob(I64 i) { I64 j,k,l=Sqrt(prime_range), - lo=i*prime_range/my_mp_cnt, - hi=(i+1)*prime_range/my_mp_cnt, - lo2=lo+sys_cache_line_width, - hi2=hi-sys_cache_line_width; + lo=i*prime_range/my_mp_cnt, + hi=(i+1)*prime_range/my_mp_cnt, + lo2=lo+sys_cache_line_width, + hi2=hi-sys_cache_line_width; if (lo2>hi2) lo2=hi2; for (j=2;j<=l;j++) { if (!Bt(master_bitmap,j)) { @@ -62,8 +62,8 @@ I64 Primes(I64 range,I64 _my_mp_cnt) if (!Bt(master_bitmap,i)) "%d ",i; - "\n$$RED$$CPUs:%d PrimeRange:%,d PrimeCnt:%,d Time:%9.6,f$$FG$$\n", - my_mp_cnt,prime_range,prime_cnt,tf-t0; + "\n$$RED$$CPUs:%d PrimeRange:%,d PrimeCnt:%,d Time:%9.7,f$$FG$$\n", + my_mp_cnt,prime_range,prime_cnt,tf-t0; Free(master_bitmap); return prime_cnt; diff --git a/Demo/MultiCore/RadixSort.CPP b/Demo/MultiCore/RadixSort.CPP index d024b0e..6e0bcc4 100644 --- a/Demo/MultiCore/RadixSort.CPP +++ b/Demo/MultiCore/RadixSort.CPP @@ -38,7 +38,7 @@ U0 QSortU32(I32 *base,I64 num) i=less-base; if (i==num) {//All less or equal to pivot - //Point greater to first less + //Point greater to first less do greater--; while (--i && *greater==pivot); @@ -94,7 +94,7 @@ U0 MPRadixSortDemo(I64 dummy=0) D(a2+NUM/4); for (i=0;i$$FG$$ keeps default.\n\n"; + "$$GREEN$$$$FG$$ keeps default.\n\n"; i=GetI64("Enter int expression(%d):",123); "Int=%d\n",i; diff --git a/Demo/PullDownMenu.CPP b/Demo/PullDownMenu.CPP index 8d7a78e..fd54772 100644 --- a/Demo/PullDownMenu.CPP +++ b/Demo/PullDownMenu.CPP @@ -9,28 +9,28 @@ U0 PullDownMenuDemo() CMenuEntry *tempse; MenuPush( - "File {" - " Open(,'O');" - " Save(,'S');" - " Exit(,CH_SHIFT_ESC);" - "}" - "Edit {" - " Cut(,,SC_DELETE|SCF_SHIFT);" - " Paste(,,SC_INS|SCF_SHIFT);" - "}" - "Misc {" - " Beep(,CH_SPACE);" - " Opt1(MSG_CMD,M_OPTION1);" - " Opt2(MSG_CMD,M_OPTION2);" - "}" - "Help {" - " Help(,,0x3B0000003B);" - " About(,,0x23B0000023B);" - "}"); + "File {" + " Open(,'O');" + " Save(,'S');" + " Exit(,CH_SHIFT_ESC);" + "}" + "Edit {" + " Cut(,,SC_DELETE|SCF_SHIFT);" + " Paste(,,SC_INS|SCF_SHIFT);" + "}" + "Misc {" + " Beep(,CH_SPACE);" + " Opt1(MSG_CMD,M_OPTION1);" + " Opt2(MSG_CMD,M_OPTION2);" + "}" + "Help {" + " Help(,,0x3B0000003B);" + " About(,,0x23B0000023B);" + "}"); "A pull-down menu will appear " - "if you move the mouse to the top " - "of the screen.\n\n"; + "if you move the mouse to the top " + "of the screen.\n\n"; do { msg_code=GetMsg(&a1,&a2,1<tag_cb=&MorseTimes; Preempt(old_preempt); diff --git a/Demo/Snd/OhGreat.CPP b/Demo/Snd/OhGreat.CPP index 2748d46..0abb739 100644 --- a/Demo/Snd/OhGreat.CPP +++ b/Demo/Snd/OhGreat.CPP @@ -4,34 +4,34 @@ U0 Song() MusicSettingsRst; try //Catch exit while (!ScanChar) { - Play("4hEqDCBCDhE", + Play("4hEqDCBCDhE", "God \0is \0a \0g\0od \0of \0love.\n\0"); - Play("3GqFEFhG4E", + Play("3GqFEFhG4E", " \0 \0 \0 \0 \0He \0"); - Play("qDCBCDhE3G", + Play("qDCBCDhE3G", "wat\0ches \0us \0from \0a\0bove.\n\0 \0"); - Play("qFEFhG4BqC", + Play("qFEFhG4BqC", " \0 \0 \0 \0Our \0world \0"); - Play("DhCeDChB3G", + Play("DhCeDChB3G", "is\0n't \0al\0ways \0nice.\n\0 \0"); - Play("qFEFhG4EqD", + Play("qFEFhG4EqD", " \0 \0 \0 \0Be\0fore \0"); - Play("CBCDhE3G", + Play("CBCDhE3G", "you \0gr\0ipe \0think \0twice.\n\0 \0"); - Play("qFEFhG4EqD", + Play("qFEFhG4EqD", " \0 \0 \0 \0He \0wat\0"); - Play("CBCDhE3G", + Play("CBCDhE3G", "ches \0us \0from \0a\0bove.\n\0 \0"); - Play("qFEFhG4EqD", + Play("qFEFhG4EqD", " \0 \0 \0 \0He'll \0smack \0"); - Play("CBCDhE3G", + Play("CBCDhE3G", "you \0with \0out \0a \0glove.\n\0 \0"); - Play("qFEFhG4BqC", + Play("qFEFhG4BqC", " \0 \0 \0 \0Our \0world \0"); - Play("DhCeDChB3G", + Play("DhCeDChB3G", "is\0n't \0al\0ways \0nice.\n\0 \0"); - Play("qFEFhG"); - } + Play("qFEFhG"); + } catch PutExcept; '\n'; diff --git a/Demo/Snd/WaterFowl.CPP b/Demo/Snd/WaterFowl.CPP index c381cc1..b78a688 100644 Binary files a/Demo/Snd/WaterFowl.CPP and b/Demo/Snd/WaterFowl.CPP differ diff --git a/Demo/SortFileExample/F64FileSort.CPP b/Demo/SortFileExample/F64FileSort.CPP index e576e8f..14ee829 100644 --- a/Demo/SortFileExample/F64FileSort.CPP +++ b/Demo/SortFileExample/F64FileSort.CPP @@ -11,28 +11,28 @@ I64 Compare(F64 e1,F64 e2) U0 F64FileSortTXT(U8 *in_name,U8 *out_name) { - CLex *lx; + CCmpCtrl *cc; I64 i,n; F64 *a; CDoc *doc; //Pass1: Count the number of F64s. n=0; - lx=LexNew(MStrPrint("#include \"%s\"",in_name)); - while (Lex(lx)) - if (lx->token==TK_F64) + cc=CmpCtrlNew(MStrPrint("#include \"%s\"",in_name)); + while (Lex(cc)) + if (cc->token==TK_F64) n++; - LexDel(lx); + CmpCtrlDel(cc); a=MAlloc(n*sizeof(F64)); //Pass2: Read F64s. i=0; - lx=LexNew(MStrPrint("#include \"%s\"",in_name)); - while (Lex(lx)) - if (lx->token==TK_F64) - a[i++]=lx->cur_f64; - LexDel(lx); + cc=CmpCtrlNew(MStrPrint("#include \"%s\"",in_name)); + while (Lex(cc)) + if (cc->token==TK_F64) + a[i++]=cc->cur_f64; + CmpCtrlDel(cc); QSortI64(a,n,&Compare); //Sort 64-bit sized values diff --git a/Demo/SortFileExample/SortedF64.DAT b/Demo/SortFileExample/SortedF64.DAT index 11721f2..ac846b3 100644 --- a/Demo/SortFileExample/SortedF64.DAT +++ b/Demo/SortFileExample/SortedF64.DAT @@ -1 +1 @@ -rºí²æQ¡?mÊw@ˤ?‘±*Œû!§?˜ÙÂþôÿÕ?(ýX w×?ç›¶‹U—â?å6L¼âå?Ää³QAæç?•³Pa0"è?;Y¨­€é? \ No newline at end of file +ÖÚ�t7p¾?ì•Xu}Æ?0s)§Q_È?|û²´$ˆË?µiwiþËÕ?2HËþv Ø?l}öèÔúà?BYÀ#*Öé?¨adUÌê?òGzgÍ ï? \ No newline at end of file diff --git a/Demo/SortFileExample/SortedF64.TXT b/Demo/SortFileExample/SortedF64.TXT index fd0c33d..e0d983c 100644 --- a/Demo/SortFileExample/SortedF64.TXT +++ b/Demo/SortFileExample/SortedF64.TXT @@ -1,11 +1,11 @@ //This is sorted. - 0.015695 - 0.069258 - 0.086463 - 0.097748 - 0.217038 - 0.273096 - 0.523637 - 0.712252 - 0.938419 - 0.995018 + 0.085632 + 0.163161 + 0.182332 + 0.249695 + 0.422056 + 0.452876 + 0.529350 + 0.670680 + 0.871274 + 0.985883 diff --git a/Demo/SortFileExample/UnsortedF64.DAT b/Demo/SortFileExample/UnsortedF64.DAT index 3537a13..ff1785f 100644 --- a/Demo/SortFileExample/UnsortedF64.DAT +++ b/Demo/SortFileExample/UnsortedF64.DAT @@ -1 +1 @@ -Ää³QAæç?•³Pa0"è?;Y¨­€é?ç›¶‹U—â?å6L¼âå?‘±*Œû!§?rºí²æQ¡?(ýX w×?mÊw@ˤ?˜ÙÂþôÿÕ? \ No newline at end of file +0s)§Q_È?ì•Xu}Æ?µiwiþËÕ?|û²´$ˆË?BYÀ#*Öé?òGzgÍ ï?l}öèÔúà?¨adUÌê?ÖÚ�t7p¾?2HËþv Ø? \ No newline at end of file diff --git a/Demo/SortFileExample/UnsortedF64.TXT b/Demo/SortFileExample/UnsortedF64.TXT index 049c512..f00898b 100644 --- a/Demo/SortFileExample/UnsortedF64.TXT +++ b/Demo/SortFileExample/UnsortedF64.TXT @@ -1,11 +1,11 @@ //This is unsorted. - 0.015695 - 0.938419 - 0.523637 - 0.273096 - 0.217038 - 0.097748 - 0.069258 - 0.086463 - 0.712252 - 0.995018 + 0.422056 + 0.670680 + 0.085632 + 0.985883 + 0.529350 + 0.452876 + 0.249695 + 0.871274 + 0.163161 + 0.182332 diff --git a/Demo/Spy.CPP b/Demo/Spy.CPP index 7dd8ded..abdcb8e 100644 --- a/Demo/Spy.CPP +++ b/Demo/Spy.CPP @@ -3,7 +3,7 @@ U0 SpyStkRep(CTask *task) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CDoc *doc=DocDblBufStart; while (!ScanChar && TaskValidate(task)) { StkRep(task); @@ -19,7 +19,7 @@ U0 SpyStkRep(CTask *task) U0 SpyCallerRep(CTask *task) { - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CDoc *doc=DocDblBufStart; while (!ScanChar && TaskValidate(task)) { CallerRep(task->rbp,task); @@ -41,14 +41,15 @@ U0 Spy() while (TRUE) { task=Fs->next_task; while (task!=Fs) { - "$$MA+X,T=\"Task:%08X:%16ts\",LM=\"0x%08X\n\"$$\n",task,task->task_name,task; + "$$MA+X,T=\"Task:%08X:%16ts\",LM=\"0x%08X\n\"$$\n", + task,task->task_name,task; task=task->next_task; } '\n'; task=GetI64("Task Addr: ",0); if (TaskValidate(task)) { "\n\n\t$$BT,\"StkRep\",LM=\"1\n\"$$\n\n\n" - "\n\n\t$$BT,\"CallerRep\",LM=\"2\n\"$$\n\n\n"; + "\n\n\t$$BT,\"CallerRep\",LM=\"2\n\"$$\n\n\n"; i=GetI64("",0); if (i==1) SpyStkRep(task); diff --git a/Demo/StkGrow.CPP b/Demo/StkGrow.CPP index 5141741..b8bd81b 100644 --- a/Demo/StkGrow.CPP +++ b/Demo/StkGrow.CPP @@ -44,7 +44,7 @@ U0 StkGrowDemo() //$LK,"CallStkGrow",A="MN:CallStkGrow"$() works with multiple args. t0=tS; "%X:%X\n",DEPTH,CallStkGrow(DEPTH*32+0x800,DEPTH*32+0x800, - &Recurse3,DEPTH,1000,2000); + &Recurse3,DEPTH,1000,2000); "Time:%7.5fs\n",tS-t0; } diff --git a/Demo/SuggestSpelling.CPP b/Demo/SuggestSpelling.CPP index 73c72ec..6961ef8 100644 --- a/Demo/SuggestSpelling.CPP +++ b/Demo/SuggestSpelling.CPP @@ -30,11 +30,11 @@ U8 *SuggestMatchForm(U8 *src) U0 SuggestSpelling(U8 *word) { U8 *dict=acd.word_lst, - *pf=SuggestMatchForm(word), - *wf; + *pf=SuggestMatchForm(word), + *wf; I64 len=StrLen(pf), - num_cols=Fs->win_width/16, - col=0; + num_cols=Fs->win_width/16, + col=0; while (*dict) { wf=SuggestMatchForm(dict+1); if (!StrNCmp(pf,wf,len)) { @@ -70,7 +70,7 @@ U0 SuggestSpellingDemo() U0 CtrlAltL(I64) { //$LK,"ac.cur_word",A="MN:CAutoCompleteGlbls"$ is only set if AutoComplete -//is running. + //is running. PopUp("SuggestSpelling(ac.cur_word);View;"); } diff --git a/Demo/TimeIns.CPP b/Demo/TimeIns.CPP index c43fbea..f348570 100644 --- a/Demo/TimeIns.CPP +++ b/Demo/TimeIns.CPP @@ -9,7 +9,7 @@ U0 TimeIns() { I64 i,start,end,overhead_time,test_time; F64 d=5.0; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; //Measure Loop Overhead start=GetTSC; @@ -20,10 +20,10 @@ U0 TimeIns() start=GetTSC; for (i=0;inext,*templg1; QueInit(&blocked_root); + + BlockedStructAdd(&blocked_root,70<<24+173<<16+110<<8+214); BlockedStructAdd(&blocked_root,68<<24+224<<16+130<<8+96); BlockedStructAdd(&blocked_root,68<<24+96<<16+100<<8+126); BlockedStructAdd(&blocked_root,68<<24+96<<16+110<<8+213); @@ -183,11 +185,11 @@ U0 BlockIPNums(LogStruct *root) //pass 1: collect robot lst while (templg!=root) { if (StrIMatch("ROBOT",templg->file) && - !IsBlocked(&blocked_root,templg->ip_num)) + !IsBlocked(&blocked_root,templg->ip_num)) BlockedStructAdd(&blocked_root,templg->ip_num); templg=templg->next; } - + //pass 2: removed blocked ip_nums templg=root->next; while (templg!=root) { @@ -198,15 +200,16 @@ U0 BlockIPNums(LogStruct *root) } templg=templg1; } - + QueDel(&blocked_root); } Bool IsDownLoad(LogStruct *templg) { - if ( - StrMatch(DOWNLOAD_FILE1,templg->file) && templg->size>=DOWNLOAD_FILE1_SIZE || - StrMatch(DOWNLOAD_FILE2,templg->file) && templg->size>=DOWNLOAD_FILE2_SIZE ) + if (StrMatch(DOWNLOAD_FILE1,templg->file)&&templg->size>= + DOWNLOAD_FILE1_SIZE || + StrMatch(DOWNLOAD_FILE2,templg->file)&&templg->size>= + DOWNLOAD_FILE2_SIZE ) return TRUE; else return FALSE; @@ -215,8 +218,8 @@ Bool IsDownLoad(LogStruct *templg) Bool IsIndex(LogStruct *templg) { if (!StrCmp(templg->file,"/index.html") || - !StrNCmp(templg->file+StrLen(templg->file)-14,"/TempleOS.html",14) || - !StrCmp(templg->file,"/")) + !StrNCmp(templg->file+StrLen(templg->file)-14,"/TempleOS.html",14) || + !StrCmp(templg->file,"/")) return TRUE; else return FALSE; @@ -329,8 +332,8 @@ U0 FileTreeTraverse(LinkStruct *root) U0 DownLoadRep(LogStruct *root,CDate start,CDate end) { I64 i,j,cnt,dups, - hours_start,hours_end,*hour_cnts,*dup_cnts, - days_start,days_end,*day_cnts,*day_dup_cnts; + hours_start,hours_end,*hour_cnts,*dup_cnts, + days_start,days_end,*day_cnts,*day_dup_cnts; LogStruct *templg=root->next,*dup_root=NULL; LinkStruct *link_root=NULL; CDateStruct ds; @@ -365,10 +368,10 @@ U0 DownLoadRep(LogStruct *root,CDate start,CDate end) "\n\nDownloads of /TempleOSCD.ISO\n"; for (i=start;i<=end;i+=1<<32) "%D:%5d%5d\n",i,day_dup_cnts[(i+local_time_offset)>>32-days_start], - day_cnts[(i+local_time_offset)>>32-days_start]; + day_cnts[(i+local_time_offset)>>32-days_start]; "\n\nDownloads of /TempleOSCD.ISO\n" - "'-' is a dup. '+' is not a dup.\n"; + "'-' is a dup. '+' is not a dup.\n"; if (hours_end-hours_start>=MAX_HOURS) i=hours_end-MAX_HOURS+1; else @@ -413,8 +416,8 @@ U0 FileRep(LogStruct *root,CDate start,CDate end) U0 IndexRep(LogStruct *root,CDate start,CDate end) { I64 i,j,cnt,dups, - hours_start,hours_end,*hour_cnts,*dup_cnts, - days_start,days_end,*day_cnts,*day_dup_cnts; + hours_start,hours_end,*hour_cnts,*dup_cnts, + days_start,days_end,*day_cnts,*day_dup_cnts; LogStruct *templg=root->next,*dup_root=NULL; LinkStruct *link_root=NULL; CDateStruct ds; @@ -447,10 +450,10 @@ U0 IndexRep(LogStruct *root,CDate start,CDate end) } "\n\nHits on /index.html\n" - "'-' is a dup. '+' is not a dup.\n"; + "'-' is a dup. '+' is not a dup.\n"; for (i=start;i<=end;i+=1<<32) "%D:%5d%5d\n",i,day_dup_cnts[(i+local_time_offset)>>32-days_start], - day_cnts[(i+local_time_offset)>>32-days_start]; + day_cnts[(i+local_time_offset)>>32-days_start]; "\n\nHits on /index.html\n"; if (hours_end-hours_start>=MAX_HOURS) diff --git a/Demo/WebLogExample/WebLogScramble.CPP b/Demo/WebLogExample/WebLogScramble.CPP index 0074a78..4b9b5b4 100644 --- a/Demo/WebLogExample/WebLogScramble.CPP +++ b/Demo/WebLogExample/WebLogScramble.CPP @@ -29,11 +29,12 @@ U0 LogScrambleFile(U8 *name) StrFirstRem(st,".",st2); num.u8[i]=key[i][Str2I64(st2)&255]; } - + Free(st); Free(st2); - st=MStrPrint("%d.%d.%d.%d %s",num.u8[3],num.u8[2],num.u8[1],num.u8[0],doc_e->tag); + st=MStrPrint("%d.%d.%d.%d %s",num.u8[3],num.u8[2], + num.u8[1],num.u8[0],doc_e->tag); Free(doc_e->tag); doc_e->tag=st; } @@ -44,7 +45,8 @@ U0 LogScrambleFile(U8 *name) } U0 WebLogScramble(U8 *files_find_mask) { - CDirEntry *tempde=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_FILES),*tempde1=tempde; + CDirEntry *tempde=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_FILES), + *tempde1=tempde; InitKey; while (tempde) { LogScrambleFile(tempde->full_name); diff --git a/Demo/WebLogExample/access_150211.LOG b/Demo/WebLogExample/access_150211.LOG index edf5f8d..464a9fc 100644 --- a/Demo/WebLogExample/access_150211.LOG +++ b/Demo/WebLogExample/access_150211.LOG @@ -492,7 +492,7 @@ 222.58.71.125 - - [10/Feb/2015:11:31:59 -0800] "GET /Wb/Home/Wb2/Files/Text/ HTTP/1.1" 200 5751 "http://www.templeos.org/Wb/Home/Wb2/Files/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" 222.58.71.125 - - [10/Feb/2015:11:32:03 -0800] "GET /Wb/Home/Wb2/Files/VanGogh/ HTTP/1.1" 200 1007 "http://www.templeos.org/Wb/Home/Wb2/Files/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" 222.58.71.125 - - [10/Feb/2015:11:32:55 -0800] "GET /Wb/Kernel/Dsk/FileSysRedSea.html HTTP/1.1" 200 342512 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" -222.58.71.125 - - [10/Feb/2015:11:33:41 -0800] "GET /Wb/Adam/Boot/DskCDDVD.html HTTP/1.1" 200 360031 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" +222.58.71.125 - - [10/Feb/2015:11:33:41 -0800] "GET /Wb/Adam/Boot/DskISOFile.html HTTP/1.1" 200 360031 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" 222.178.105.52 - - [10/Feb/2015:11:34:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" 177.106.234.227 - - [10/Feb/2015:11:35:02 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" 58.71.218.57 - - [10/Feb/2015:11:35:37 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" diff --git a/Demo/WebLogExample/access_150212.LOG b/Demo/WebLogExample/access_150212.LOG index bcc0ba9..e823384 100644 --- a/Demo/WebLogExample/access_150212.LOG +++ b/Demo/WebLogExample/access_150212.LOG @@ -620,7 +620,7 @@ 88.167.200.22 - - [11/Feb/2015:13:16:38 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" 182.97.104.222 - - [11/Feb/2015:13:18:16 -0800] "GET /Wb/Home/Wb2/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org" 101.237.12.144 - - [11/Feb/2015:13:18:39 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org" -183.7.224.95 - - [11/Feb/2015:13:18:59 -0800] "GET /Wb/Kernel/Dsk/DskC.html HTTP/1.1" 200 185918 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" +183.7.224.95 - - [11/Feb/2015:13:18:59 -0800] "GET /Wb/Kernel/Dsk/DskDel.html HTTP/1.1" 200 185918 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" 183.7.224.95 - - [11/Feb/2015:13:19:26 -0800] "GET /Wb/Kernel/KbdMouse/Keyboard.html HTTP/1.1" 200 297077 "http://www.templeos.org/Wb/Home/Wb2/LineRep.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org" 240.76.155.0 - - [11/Feb/2015:13:21:01 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" 240.76.155.0 - - [11/Feb/2015:13:21:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org" diff --git a/Demo/WebLogExample/access_150213.LOG b/Demo/WebLogExample/access_150213.LOG index 48130c1..6816d6a 100644 --- a/Demo/WebLogExample/access_150213.LOG +++ b/Demo/WebLogExample/access_150213.LOG @@ -374,7 +374,7 @@ 154.119.160.119 - - [12/Feb/2015:08:00:14 -0800] "GET /Wb/Accts/TS/Wb2/TempleOS.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org" 8.177.213.37 - - [12/Feb/2015:08:08:59 -0800] "GET /Wb/Home/Wb2/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org" 147.203.164.194 - - [12/Feb/2015:08:11:06 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22" "www.templeos.org" -52.209.6.68 - - [12/Feb/2015:08:22:10 -0800] "GET /Wb/Kernel/BIOS32.html HTTP/1.1" 200 132777 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" +52.209.6.68 - - [12/Feb/2015:08:22:10 -0800] "GET /Wb/Kernel/PCIBIOS.html HTTP/1.1" 200 132777 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org" 64.124.225.255 - - [12/Feb/2015:08:32:33 -0800] "GET /Wb/Kernel/Dsk/DskCFile.html HTTP/1.1" 200 138681 "-" "Mozilla/5.0 (compatible; SeznamBot/3.2; +http://fulltext.sblog.cz/)" "www.templeos.org" 34.168.143.76 - - [12/Feb/2015:08:39:43 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "www.templeos.org" 91.143.212.182 - - [12/Feb/2015:08:49:30 -0800] "GET /Wb/Accts/TS/Wb2/TAD/TADRants2014.html HTTP/1.1" 404 89 "http://www.reddit.com/r/TempleOS_Official/comments/2pdlh3/post_what_god_said_ill_help_interpret/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org" diff --git a/Demo/WordSearch.CPP b/Demo/WordSearch.CPP index 8df9852..3d30e94 100644 --- a/Demo/WordSearch.CPP +++ b/Demo/WordSearch.CPP @@ -49,7 +49,7 @@ U0 Search(I64 dx,I64 dy) for (i=n;i>2;i--) { buf[i]=0; if ((ptr=ACDWordPtAt(buf)) && *ptr++==ACD_WORD_CHAR && - !StrICmp(ptr,buf)) { + !StrICmp(ptr,buf)) { "%s ",buf; } } diff --git a/DoOnce.CPP b/DoOnce.CPP index e261a51..d2193c1 100644 --- a/DoOnce.CPP +++ b/DoOnce.CPP @@ -11,18 +11,23 @@ U0 DoOnce() { if (sys_boot_src.u16[0]==BOOT_SRC_CDROM) { "\nIf you answer 'No' you can play with\n" - "the live CD without installing.\n\n" - "Install onto hard drive "; + "the live CD without installing.\n\n" + "Install onto hard drive "; if (YorN) { DocBottom; ExeFile("::/Misc/OSInstall"); } + } else { + "$$PURPLE$$$$TX+CX,\"Tip of the Day\"$$$$FG$$\n"; + TipOfDay; } Type("::/Doc/Customize.TXT"); - "\nTake Tour"; - if (YorN) { - Cd("::/Misc/Tour"); - AutoFile("Tour"); + if (FileFind("::/Misc/Tour")) { + "\nTake Tour"; + if (YorN) { + Cd("::/Misc/Tour"); + AutoFile("Tour"); + } } } diff --git a/Doc/AboutTempleOS.TXT b/Doc/AboutTempleOS.TXT index a702fe3..4ff36f2 100644 --- a/Doc/AboutTempleOS.TXT +++ b/Doc/AboutTempleOS.TXT @@ -1,19 +1,33 @@ $WW,1$$FG,5$$TX+CX,"TempleOS"$$FG$ -$FG,5$Website:$FG$ +$FG,5$Websites:$FG$ $TX,"www.templeos.org",HTML="http://www.templeos.org"$ $FG,5$Owner/President:$FG$ Terry A. Davis -$TX,"ASU Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$ + +$HC,"\"\""$ + 8144 Sickle Lane Las Vegas, NV 89128 (702)254-4223 + $TX,"tdavis@templeos.org",HTML="mailto:tdavis@templeos.org"$ + $FG,5$About Me:$FG$ -I was a National Merit Scholar with a 1440 SAT at Arizona State University. Here are my $TX,"ASU Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$. I have a bachelor's in Computer System Engineering from ASU, basically, embedded systems, and a master's in Electrical Engineering from ASU, control systems. I worked as a software, hardware and mechanical engineer at Ticketmaster from 1990-1996. I designed a 3 axis stepper-motor-driven milling machine 1996-1997 with a CAD/CAM package for a company I started called Home Automation and Robotic Equipment. I worked for a company named Xytec Corp. 1997-1999. We made FPGA-based image processing equipment. I wrote $FG,2$$TX,"SimStructure",HTML="http://www.templeos.org/files/SimStrSetUp.zip"$$FG$ from 2000-2001 for H.A.R.E. I worked as head software/electrical engineer for a company called Graphic Technologies, 2001-2002, making replacement chips for toner printer cartridges so they could be refilled. + +$TX,"ASU_Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$ $TX,"ASU Course Catalog (See page 261)",HTML="https://catalog.asu.edu/files/shared/archives/1994-1996/general/UG1994-1996.pdf/1994-1996-UG-241-267.pdf"$ $TX,"Dr. David Pheanis",HTML="https://webapp4.asu.edu/directory/person/77201"$ + +I was a National Merit Scholar with a 1440 SAT at Arizona State University. I have a bachelor's in Computer System Engineering from ASU, basically, embedded systems, and a master's in Electrical Engineering from ASU, control systems. I worked as a software, hardware and mechanical engineer at Ticketmaster from 1990-1996. + +I designed a 3 axis stepper-motor-driven milling machine 1996-1997 with a CAD/CAM package for a company I started called Home Automation and Robotic Equipment. + +$HC,"\"\""$ + +I worked for a company named Xytec Corp. 1997-1999. We made FPGA-based image processing equipment. I wrote $FG,2$$TX,"SimStructure",HTML="http://www.templeos.org/files/SimStrSetUp.zip"$$FG$ from 2000-2001 for H.A.R.E. I worked as head software/electrical engineer for a company called Graphic Technologies, 2001-2002, making replacement chips for toner printer cartridges so they could be refilled. $FG,5$Credits:$FG$ See $LK,"::/Doc/Credits.TXT"$. + diff --git a/Doc/Boot.TXT b/Doc/Boot.TXT index af003d0..5db5166 100644 Binary files a/Doc/Boot.TXT and b/Doc/Boot.TXT differ diff --git a/Doc/ChangeLog.TXT b/Doc/ChangeLog.TXT index a5522f2..3016cf2 100644 --- a/Doc/ChangeLog.TXT +++ b/Doc/ChangeLog.TXT @@ -2,7 +2,194 @@ Use $LK,"R",A="MN:R"$() to rename if I change a label. -$IV,1$----02/16/15 09:42:32----$IV,0$ +$IV,1$----07/20/15 11:24:35----$IV,0$ +* Added args to $LK,"Del",A="MN:Del"$(). +* Rearranged disk code. +* $LK,"R",A="MN:R"$("$FG,4$CFileAccess$FG$","$LK,"CDirContext",A="MN:CDirContext"$"); +* $LK,"R",A="MN:R"$("$FG,4$IsDrvWritable$FG$","$LK,"DrvIsWritable",A="MN:DrvIsWritable"$"); +* $LK,"R",A="MN:R"$("$FG,4$CDFileCreate$FG$","$LK,"ISOFileCreate",A="MN:ISOFileCreate"$"); + +$IV,1$----07/10/15 05:05:41----$IV,0$ +* Turned-off preemption in $LK,"WinMgrTask",A="MN:WinMgrTask"$(). + +$IV,1$----07/04/15 00:56:18----$IV,0$ +* Added hex record option to $LK,"GodDoodle",A="MN:GodDoodle"$(). +* Added $LK,"GodHexIns",A="MN:GodHexIns"$(). + +$IV,1$----06/30/15 15:35:31----$IV,0$ +* Added $LK,"Words",A="MN:Words"$(). +* Added $LK,"LongLines",A="MN:LongLines"$(). + +$IV,1$----06/26/15 12:54:41----$IV,0$ +* $BK,1$TempleOS version 3.07 Released$BK,0$ + +$IV,1$----06/19/15 18:16:11----$IV,0$ +* Added $LK,"::/Apps/Psalmody/Examples/science.CPP.Z"$. +* Added $LK,"::/Apps/AfterEgypt/Comics/Moses84.TXT.Z"$. +* Added $LK,"::/Apps/AfterEgypt/Comics/Moses85.TXT.Z"$. + +$IV,1$----06/13/15 07:36:01----$IV,0$ +* Improved $LK,"::/Demo/Games/EagleDive.CPP.Z"$. + +$IV,1$----06/11/15 19:26:27----$IV,0$ +* Fixed bug in $FG,2$$FG$ macros. +* Added $LK,"STR_LEN",A="MN:STR_LEN"$. + +$IV,1$----06/04/15 08:31:15----$IV,0$ +* Improved assembler and unassembler. +* Added $LK,"::/Doc/HelloWorld.TXT.Z"$. + +$IV,1$----05/26/15 21:10:30----$IV,0$ +* Added $LK,"DCF_PALETTE",A="MN:DCF_PALETTE"$. +* $LK,"R",A="MN:R"$("$FG,4$VGAPaletteColorGet$FG$","$LK,"GrPaletteColorGet",A="MN:GrPaletteColorGet"$"); +* $LK,"R",A="MN:R"$("$FG,4$VGAPaletteColorSet$FG$","$LK,"GrPaletteColorSet",A="MN:GrPaletteColorSet"$"); + +$IV,1$----05/23/15 09:46:51----$IV,0$ +* Cleaned-up $LK,"::/Linux/TOSZ.CPP"$. +* $LK,"R",A="MN:R"$("$FG,4$CaptureScreen$FG$","$FG,4$ScreenCapture$FG$"); +* Converted from 24 to 48 bit palette. +* $LK,"R",A="MN:R"$("$FG,4$VGAPalette4Get$FG$","$LK,"GrPaletteGet",A="MN:GrPaletteGet"$"); +* $LK,"R",A="MN:R"$("$FG,4$VGAPalette4Set$FG$","$LK,"GrPaletteSet",A="MN:GrPaletteSet"$"); +* Added flags to $LK,"DCSave",A="MN:DCSave"$() and $LK,"GRAWrite",A="MN:GRAWrite"$(). +* Added palettes to $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$. + +$IV,1$----05/19/15 21:28:19----$IV,0$ +* Fixed bug in $LK,"::/Apps/Psalmody/PsalmodyFile.CPP.Z"$. + +$IV,1$----05/18/15 09:05:45----$IV,0$ +* $BK,1$TempleOS version 3.06 Released$BK,0$ +* $LK,"R",A="MN:R"$("$FG,4$BIOS32$FG$","$FG,4$PCIBIOS$FG$"); + +$IV,1$----05/14/15 15:39:41----$IV,0$ +* Enhanced $LK,"::/Apps/Psalmody/Examples/abyss.CPP.Z"$. + +$IV,1$----05/13/15 07:51:00----$IV,0$ +* Fixed bug in $LK,"ToHtml",A="MN:ToHtml"$(). +* Added $FG,2$'\'$FG$ line continuation for $FG,2$#help_index$FG$. +* Expanded $LK,"LexExtStr",A="MN:LexExtStr"$(). +* Reindented everything. + +$IV,1$----05/10/15 18:31:46----$IV,0$ +* $LK,"R",A="MN:R"$("$FG,4$SendMsg$FG$","$LK,"PostMsgWait",A="MN:PostMsgWait"$"); + +$IV,1$----05/09/15 08:32:05----$IV,0$ +* Got rid of $FG,4$TASK_IN_QUE_SIGNATURE_VAL$FG$. +* Broke-up long text file lines. + +$IV,1$----05/08/15 16:58:46----$IV,0$ +* Cleaned-up Compiler. +* $LK,"R",A="MN:R"$("$FG,4$CLex$FG$","$LK,"CCmpCtrl",A="MN:CCmpCtrl"$"); +* $LK,"R",A="MN:R"$("$FG,4$LexNew$FG$","$LK,"CmpCtrlNew",A="MN:CmpCtrlNew"$"); +* $LK,"R",A="MN:R"$("$FG,4$LexDel$FG$","$LK,"CmpCtrlDel",A="MN:CmpCtrlDel"$"); +* $LK,"R",A="MN:R"$("$FG,4$LexSize$FG$","$LK,"CmpCtrlSize",A="MN:CmpCtrlSize"$"); + +$IV,1$----05/06/15 21:31:40----$IV,0$ +* Fixed bug in $LK,"QSort",A="MN:QSort"$() and $LK,"QSortI64",A="MN:QSortI64"$(). +* Added $LK,"Sort",A="MN:Sort"$(). + +$IV,1$----05/06/15 11:19:25----$IV,0$ +* $LK,"R",A="MN:R"$("$FG,4$GetResult$FG$","$LK,"JobResultGet",A="MN:JobResultGet"$"); +* $LK,"R",A="MN:R"$("$FG,4$ScanResult$FG$","$LK,"JobResultScan",A="MN:JobResultScan"$"); + +$IV,1$----05/06/15 10:13:27----$IV,0$ +* $LK,"R",A="MN:R"$("$FG,4$DCAllocDepthBuf$FG$", "$LK,"DCDepthBufAlloc",A="MN:DCDepthBufAlloc"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrAddTranslation$FG$", "$LK,"Mat4x4TranslationAdd",A="MN:Mat4x4TranslationAdd"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrSetTranslation$FG$", "$LK,"Mat4x4TranslationEqu",A="MN:Mat4x4TranslationEqu"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrSetSymmetry$FG$", "$LK,"DCSymmetrySet",A="MN:DCSymmetrySet"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrSetSymmetry3$FG$", "$LK,"DCSymmetry3Set",A="MN:DCSymmetry3Set"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrSetRotMat$FG$", "$LK,"DCMat4x4Set",A="MN:DCMat4x4Set"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrReflect$FG$", "$LK,"DCReflect",A="MN:DCReflect"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrScalePenWidth$FG$", "$LK,"DCPenWidthScale",A="MN:DCPenWidthScale"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrTransform$FG$", "$LK,"DCTransform",A="MN:DCTransform"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrLighting$FG$", "$LK,"DCLighting",A="MN:DCLighting"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrRot$FG$", "$LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrRotXEqu$FG$", "$LK,"Mat4x4RotX",A="MN:Mat4x4RotX"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrRotYEqu$FG$", "$LK,"Mat4x4RotY",A="MN:Mat4x4RotY"$"); +* $LK,"R",A="MN:R"$("$FG,4$GrRotZEqu$FG$", "$LK,"Mat4x4RotZ",A="MN:Mat4x4RotZ"$"); +* $LK,"R",A="MN:R"$("$FG,4$SetStdPalette$FG$", "$LK,"PaletteSetStd",A="MN:PaletteSetStd"$"); +* $LK,"R",A="MN:R"$("$FG,4$GetGrPalette4$FG$", "$LK,"GrPaletteGet",A="MN:GrPaletteGet"$"); +* $LK,"R",A="MN:R"$("$FG,4$GetGrPaletteColor$FG$", "$LK,"GrPaletteColorGet",A="MN:GrPaletteColorGet"$"); +* $LK,"R",A="MN:R"$("$FG,4$SetGrPalette4$FG$", "$LK,"GrPaletteSet",A="MN:GrPaletteSet"$"); +* $LK,"R",A="MN:R"$("$FG,4$SetGrPaletteColor$FG$", "$LK,"GrPaletteColorSet",A="MN:GrPaletteColorSet"$"); + +$IV,1$----05/03/15 05:11:31----$IV,0$ +* $BK,1$TempleOS version 3.05 Released$BK,0$ +* Added $LK,"Mat4x4MulMat4x4Equ",A="MN:Mat4x4MulMat4x4Equ"$(). +* $LK,"R",A="MN:R"$("$FG,4$GrMulMat$FG$","$LK,"Mat4x4MulMat4x4New",A="MN:Mat4x4MulMat4x4New"$"). +* Added $LK,"Mat4x4Equ",A="MN:Mat4x4Equ"$() and $LK,"Mat4x4New",A="MN:Mat4x4New"$(). +* Got rid of $FG,4$GrScaleNew$FG$(), $FG,4$GrRotXNew$FG$(), $FG,4$GrRotYNew$FG$() and $FG,4$GrRotZNew$FG$(). + +$IV,1$----04/30/15 19:13:07----$IV,0$ +* Added $LK,"CDrv",A="MN:CDrv"$.fat32_local_time_offset. +* Cleaned-up $LK,"Who",A="MN:Who"$() and compiler mapfiles. + +$IV,1$----04/11/15 05:48:05----$IV,0$ +* Fixed bug in $LK,"DrvMapBlkClean",A="MN:DrvMapBlkClean"$(). + +$IV,1$----04/09/15 04:42:31----$IV,0$ +* Improved $LK,"::/Demo/Games/TreeCheckers.CPP.Z"$. + +$IV,1$----04/08/15 15:24:27----$IV,0$ +* $LK,"R",A="MN:R"$("DocDo","DocEd"); + +$IV,1$----04/07/15 05:27:38----$IV,0$ +* Added $LK,"::/Apps/Psalmody/Examples/whos.CPP.Z"$. + +$IV,1$----04/04/15 14:27:07----$IV,0$ +* Enhanced $LK,"::/Apps/Psalmody/Examples/proponent.CPP.Z"$. + +$IV,1$----03/30/15 10:29:57----$IV,0$ +* $LK,"R",A="MN:R"$("cur_data_col","cur_col"); +* $LK,"R",A="MN:R"$("cur_top_line_num","top_line_num"); +* Fixed bug in $LK,"EdLineDown",A="MN:EdLineDown"$(). + +$IV,1$----03/28/15 02:41:15----$IV,0$ +* Fixed $LK,"::/Demo/Snd/WaterFowl.CPP.Z"$. +* Added $LK,"::/Demo/Graphics/Grid.CPP.Z"$. +* Enhanced $LK,"::/Apps/Psalmody/Examples/image.CPP.Z"$. +* Enhanced $LK,"::/Apps/Psalmody/Examples/dream.CPP.Z"$. +* Enhanced $LK,"::/Apps/Psalmody/Examples/killed.CPP.Z"$. +* Enhanced $LK,"::/Apps/Psalmody/Examples/worship.CPP.Z"$. + +$IV,1$----03/23/15 07:21:26----$IV,0$ +* Updated $LK,"::/Demo/Graphics/Pick.CPP.Z"$. +* Modified $LK,"DCF_LOCATE_NEAREST",A="MN:DCF_LOCATE_NEAREST"$. + +$IV,1$----03/21/15 09:10:58----$IV,0$ +* Fixed bug in sprite edit of ellipses & polygons. + +$IV,1$----03/18/15 02:00:15----$IV,0$ +* $LK,"R",A="MN:R"$("DocFormDo","DocForm"); +* $LK,"R",A="MN:R"$("DocMenuDo","DocMenu"); + +$IV,1$----03/14/15 07:08:05----$IV,0$ +* $BK,1$TempleOS version 3.04 Released$BK,0$ +* Reformatted $LK,"::/Kernel/Font8x8.CPP.Z"$. +* Added $LK,"PopUpGetF64",A="MN:PopUpGetF64"$(). + +$IV,1$----03/14/15 04:48:50----$IV,0$ +* $LK,"R",A="MN:R"$("AcctReg...","Reg..."); +* Overhauled $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$(). +* Overhauled $LK,"::/Doc/GraphicsOverview.TXT.Z"$. + +$IV,1$----03/09/15 06:07:25----$IV,0$ +* Dict now has extended ASCII chars. + +$IV,1$----03/02/15 04:40:55----$IV,0$ +* Added help on $LK,"StdIn",A="HI:StdIn"$ and $LK,"StdOut",A="HI:StdOut"$. + +$IV,1$----02/25/15 02:51:45----$IV,0$ +* Added IRC ChatBot $LK,"::/Linux/TempleBot",A="PI:::/Linux/TempleBot"$. + +$IV,1$----02/21/15 19:07:32----$IV,0$ +* Added $LK,"::/Demo/DolDoc/NumBible.CPP.Z"$. + +$IV,1$----02/19/15 18:39:53----$IV,0$ +* Fixed bug in $FG,2$$FG$ $LK,"GodDoodle",A="MN:GodDoodle"$(). +* Made default arg for $LK,"Preempt",A="MN:Preempt"$() into "OFF". + +$IV,1$----02/17/15 21:32:26----$IV,0$ +* Made so cmd line doesn't print answer line unless a new answer occurs. $IV,1$----02/14/15 05:12:45----$IV,0$ * Added $LK,"Dump",A="MN:Dump"$(). @@ -33,9 +220,9 @@ $IV,1$----01/29/15 02:58:45----$IV,0$ * Added $LK,"::/Demo/Directives.CPP"$. $HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} #define __TIME__ #exe{StreamPrint("\"%T\"",Now);} -#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} -#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} -#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->depth);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->lex_include_stk->full_name);} #define __DIR__ #exe{StreamDir;} $HL,0$$WW,1$ $IV,1$----01/28/15 11:40:37----$IV,0$ @@ -63,7 +250,7 @@ $IV,1$----01/10/15 15:12:30----$IV,0$ * $LK,"R",A="MN:R"$("Grep","Find"); $IV,1$----01/08/15 17:40:37----$IV,0$ -* Undid "Improved $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$()" from 12/27/14. (It didn't work.) +* Undid "Improved $LK,"DCScreenCapture",A="MN:DCScreenCapture"$()" from 12/27/14. (It didn't work.) $IV,1$----01/06/15 18:58:16----$IV,0$ * Reorganized $MA-X+PU,"::/Apps/Psalmody",LM="Cd(\"::/Apps/Psalmody\");Dir;View;\n"$. @@ -75,203 +262,3 @@ $IV,1$----01/02/15 04:46:36----$IV,0$ * Changed Sprite format. Download $FG,2$Cvt300.CPP.Z$FG$ from $FG,4$$TX,"http://www.templeos.org/Wb/Home/Wb2/Files",HTML="http://www.templeos.org/Wb/Home/Wb2/Files"$$FG$. * Cleaned-up the $LK,"CSprite",A="MN:CSprite"$ code. - -$IV,1$----12/31/14 15:13:08----$IV,0$ -* $BK,1$TempleOS version 3.00 Released$BK,0$ - -$IV,1$----12/30/14 21:18:04----$IV,0$ -* Added $LK,"::/Demo/RandDemo.CPP"$. - -$IV,1$----12/30/14 00:38:42----$IV,0$ -* $LK,"R",A="MN:R"$("ptr_cnt","ptr_stars_cnt"); -* Moved $LK,"DOCEF_UPDATE_DATA",A="MN:DOCEF_UPDATE_DATA"$ to be next to $LK,"DOCEF_REFRESH_DATA",A="MN:DOCEF_REFRESH_DATA"$. -* Refreshed the $LK,"PCI Device File",A="FI:::/Misc/PCIDevices.TXT"$. - -$IV,1$----12/27/14 18:59:16----$IV,0$ -* Improved $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$(). - -$IV,1$----12/26/14 22:13:51----$IV,0$ -* Improved $LK,"::/Demo/Games/RawHide.CPP"$. - -$IV,1$----12/25/14 21:08:51----$IV,0$ -* Improved $LK,"::/Demo/Games/BlackDiamond.CPP"$. -* Improved $LK,"::/Demo/Games/DunGen.CPP"$. - -$IV,1$----12/23/14 15:00:28----$IV,0$ -* Changed from many $FG,2$/Accts$FG$ subdirectories to just one directory named $FG,2$/Home$FG$ with default files in root. - -$IV,1$----12/20/14 21:43:31----$IV,0$ -* Changed $FG,4$text.font$FG$ from $FG,2$U8 *$FG$ to $FG,2$U64 *$FG$. - -$IV,1$----12/18/14 18:49:46----$IV,0$ -* Renamed all the files. - -$IV,1$----12/18/14 09:40:06----$IV,0$ -* I got rid of my Logo. I like no logo. -* I got rid of my company name, Trivial Solutions. Instead of "TS", I use "TOS" for Temple Operating System. -* I got rid of all my rants on my website. Now, just one rant. -* I changed from having "TAD" as one of many employees to no different employees. - -$IV,1$----12/15/14 10:05:06----$IV,0$ -* Added $FG,4$$TX,"http://www.reddit/r/TempleOS_Official",HTML="http://www.reddit.com/r/TempleOS_Official"$$FG$. - -$IV,1$----12/15/14 07:23:32----$IV,0$ -* $BK,1$TempleOS version 2.19 Released$BK,0$ -* $LK,"R",A="MN:R"$("SliderCtrl","CtrlSlider"); -* $LK,"R",A="MN:R"$("Set...","...Set"); -* Changed $LK,"DrvMapBlkClean",A="MN:DrvMapBlkClean"$() and $LK,"DrvMapBlkAlloc",A="MN:DrvMapBlkAlloc"$(). - -$IV,1$----12/15/14 02:50:32----$IV,0$ -* Changed AutoComplete colors. -* Got rid of splash screen. -* Added AutoComplete $LK,"StandBy",A="FI:::/Doc/StandBy.TXT"$. - -$IV,1$----12/14/14 12:54:56----$IV,0$ -* Fixed new bug in random routines. - -$IV,1$----12/12/14 08:58:10----$IV,0$ -* $LK,"R",A="MN:R"$("DocGRAFile","DocGRA"); - -$IV,1$----12/04/14 11:00:43----$IV,0$ -* Improved $FG,4$lx->max_line$FG$. - -$IV,1$----12/04/14 05:02:20----$IV,0$ -* Cleaned-up mem code. -* $LK,"R",A="MN:R"$("Allocate","Alloc"); - -$IV,1$----12/03/14 10:05:36----$IV,0$ -* Cleaned-up compiler conditionals. -* Got rid of $FG,4$IC_BR_LBTS$FG$ family in the compiler. - -$IV,1$----11/27/14 18:48:07----$IV,0$ -* $LK,"R",A="MN:R"$("Randomize","Seed"); -* Got rid of $FG,4$Rand2$FG$(). Use $LK,"Seed",A="MN:Seed"$() with non-zero and timer-based will be turned-off. - -$IV,1$----11/21/14 08:25:38----$IV,0$ -* $BK,1$TempleOS version 2.18 Released$BK,0$ -* Improved $LK,"::/Demo/Games/TreeCheckers.CPP"$. - -$IV,1$----11/19/14 22:25:28----$IV,0$ -* Fixed reindent bug. -* $LK,"R",A="MN:R"$("$FG,4$ST_BIBLE_FILE$FG$","$LK,"BIBLE_FILENAME",A="MN:BIBLE_FILENAME"$"); -* Fixed bug with $LK,"DOCG_BL_IV_UL",A="MN:DOCG_BL_IV_UL"$. - -$IV,1$----11/17/14 23:34:09----$IV,0$ -* I got rid of octal and binary char specification in strings. -* Got rid of octal all-together. - -$IV,1$----11/09/14 21:37:49----$IV,0$ -* Changed default plug-in for $FG,2$$FG$ and $FG,2$$FG$. -* Added $FG,2$$FG$ and $FG,2$$FG$ on my personal version $LK,"::/Demo/AcctExample/AdamKeyPlugIns.CPP"$. - -$IV,1$----11/07/14 08:02:04----$IV,0$ -* Improved $LK,"Ui",A="MN:Ui"$(). - -$IV,1$----10/29/14 12:06:42----$IV,0$ -* Changed $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ from relative cluster num to absolute blk num. -* Improved compiler. $LK,"IC_RETURN_VAL",A="MN:IC_RETURN_VAL"$, $LK,"IC_END_EXP",A="MN:IC_END_EXP"$, $LK,"ICF_NO_DEPEND_RESULT",A="MN:ICF_NO_DEPEND_RESULT"$ -* $LK,"R",A="MN:R"$("Partition","Drive"); - -$IV,1$----10/27/14 05:06:15----$IV,0$ -* Overhauled $LK,"KbdBuildSC",A="MN:KbdBuildSC"$(). - -$IV,1$----10/19/14 11:42:47----$IV,0$ -* Updated $LK,"::/Doc/Charter.TXT"$. -* Improved $LK,"::/Demo/Games/FlatTops.CPP"$. - -$IV,1$----10/09/14 21:04:25----$IV,0$ -* Added $FG,2$dither_probability$FG$ to $LK,"DocBMP",A="MN:DocBMP"$() and $LK,"BMPRead",A="MN:BMPRead"$(). - -$IV,1$----09/27/14 22:11:45----$IV,0$ -* $BK,1$TempleOS version 2.17 Released$BK,0$ -* Changed compression format. Uncompress with the old version by $LK,"Move",A="MN:Move"$ing() to a name without $FG,2$.Z$FG$. Then, recompress with the new version of $FG,2$TempleOS$FG$. -* Fixed rare bug in compression. -* $LK,"R",A="MN:R"$("BMPFile","BMP"); -* Added $FG,2$include_zoom$FG$ arg to $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$(), $LK,"GRACaptureScreen",A="MN:GRACaptureScreen"$() and $LK,"BMPCaptureScreen",A="MN:BMPCaptureScreen"$(). -* Added eye-dropper to sprite $FG,2$$FG$ editor. Press $FG,2$'c'$FG$. -* Improved $LK,"::/Demo/Games/Wenceslas.CPP"$, made it 3D. -* Added pebbles to $LK,"::/Apps/AfterEgypt/HorebBMP.CPP"$ and $LK,"::/Apps/AfterEgypt/HorebBSP.CPP"$. - -$IV,1$----09/21/14 13:07:09----$IV,0$ -* Changed "bit" to "pixel" in $LK,"::/Adam/Gr/GrBitMap.CPP"$. - -$IV,1$----09/19/14 09:43:29----$IV,0$ -* $LK,"R",A="MN:R"$("SpawnUser","User"); -* $LK,"R",A="MN:R"$("SrvUser","PopUpPrint"); -* Added $LK,"::/Doc/TaskSrv.TXT"$. - -$IV,1$----09/17/14 19:51:53----$IV,0$ -* Fixed bug in kernel usage of $LK,"FileRead",A="MN:FileRead"$() and $LK,"FileWrite",A="MN:FileWrite"$(). - -$IV,1$----09/17/14 08:03:33----$IV,0$ -* Cleaned-up $LK,"::/Adam/AUtils.CPP"$. - -$IV,1$----09/15/14 19:49:17----$IV,0$ -* Made assembler size for PUSH IMM into a I32 if it is a label, so you don't have to specify size. - -$IV,1$----09/15/14 15:36:49----$IV,0$ -* $BK,1$TempleOS version 2.16 Released$BK,0$ -* Got rid of auto-fps adjust. More stable. - -$IV,1$----09/11/14 11:58:40----$IV,0$ -* Overhauled $LK,"compiler init tables",A="MN:intermediate_code_table"$. - -$IV,1$----08/29/14 15:45:55----$IV,0$ -* $BK,1$TempleOS version 2.15 Released$BK,0$ - -$IV,1$----08/24/14 22:23:25----$IV,0$ -* Added $LK,"CSysLimitBase",A="MN:CSysLimitBase"$. -* $LK,"R",A="MN:R"$("SYS_BOOT_CODE","SYS_BOOT_SRC"); -* $LK,"R",A="MN:R"$("SoftBoot","RAMReboot"); -* Replaced $FG,4$SYS_GR_MODE$FG$ with $LK,"RLF_VGA",A="MN:RLF_VGA"$. -* Improved $LK,"RAMReboot",A="MN:RAMReboot"$(). - -$IV,1$----08/23/14 07:50:44----$IV,0$ -* Changed key cmd $FG,2$$FG$ to $FG,2$$FG$. - -$IV,1$----08/22/14 12:11:29----$IV,0$ -* $LK,"R",A="MN:R"$("VGA_SC_INDEX","VGAP_INDEX"); - -$IV,1$----08/18/14 16:25:32----$IV,0$ -* $BK,1$TempleOS version 2.14 Released$BK,0$ - -$IV,1$----08/11/14 16:13:49----$IV,0$ -* $LK,"R",A="MN:R"$("BOOT_HIGH_LOC","BOOT_HIGH_LOC_CD"); - -$IV,1$----08/10/14 11:54:16----$IV,0$ -* Added $LK,"GrRotNormSqr65536",A="MN:GrRotNormSqr65536"$(). -* Improved $LK,"::/Demo/Games/BugBird.CPP"$. - -$IV,1$----08/08/14 18:02:04----$IV,0$ -* Added ::/Apps/Psalmody/Examples/lob.CPP" - -$IV,1$----08/08/14 11:03:13----$IV,0$ -* Improved $LK,"::/Demo/Snd/WaterFowl.CPP"$. -* Added 24-Bit to $LK,"BMPRead",A="MN:BMPRead"$(). - -$IV,1$----08/06/14 05:14:23----$IV,0$ -* Fixed compiler bug in "yoda conditionals". -* Optimized compiler on float comparisons to zero. - -$IV,1$----08/05/14 14:12:02----$IV,0$ -* $BK,1$TempleOS version 2.13 Released$BK,0$ - -$IV,1$----08/04/14 05:06:02----$IV,0$ -* Got rid of markov matrix in AutoComplete. Renamed "WordStat", "AutoComplete". - -$IV,1$----07/30/14 20:27:02----$IV,0$ -* Added symmetry to $LK,"GodDoodleSprite",A="MN:GodDoodleSprite"$(). - -$IV,1$----07/26/14 11:19:00----$IV,0$ -* Got rid of "raw" arg on disk I/O routines for uncompressed data. - -$IV,1$----07/22/14 08:31:58----$IV,0$ -* $BK,1$TempleOS version 2.12 Released$BK,0$ -* Fixed bug in assembler in - MOV R8-R15,UIMM32 - -$IV,1$----07/12/14 02:06:10----$IV,0$ -* Fixed bug clicking on icon. - -$IV,1$----07/08/14 04:33:20----$IV,0$ -* I changed $LK,"GodDoodleSprite",A="MN:GodDoodleSprite"$(). diff --git a/Doc/Charter.TXT b/Doc/Charter.TXT index 623dc42..926172a 100644 --- a/Doc/Charter.TXT +++ b/Doc/Charter.TXT @@ -1,6 +1,6 @@ $FG,5$$WW,1$$TX+CX,"TempleOS Charter"$$FG$ -Why did they make Solomon's Temple? It was a direction to look, to focus on, a special place for meditation, to do offerings, a community center, a home to God's beauty, that encouraged love of God. People cherished God's temple, beautifying it with gold and all fine things to show love of God, as great cathedrals were decorated with astounding, awe-striking intricate art and gargoyles, incredible devotion to God with hours of effort, toiling and slaving-away for the glory of God, for families with children to see stained-glass windows and tomes with ridiculously elaborate calligraphy to show love of God from a people who did little else but show love toward God, lived in dire conditions by today's standards, yet with so much difficulty scraping-by, found the time to devote even all free-time to God! +Why did they make Solomon's Temple? It was a direction to look, to focus on, a special place for meditation, to do offerings, a community center, a home to God's beauty, that encouraged love of God. People cherished God's temple, beautifying it with gold and all fine things to show love of God, as great $TX,"cathedrals",HTML="https://www.youtube.com/watch?v=xkfmK-CLvcc"$ were decorated with astounding, awe-striking intricate art and gargoyles, incredible devotion to God with hours of effort, toiling and slaving-away for the glory of God, for families with children to see $TX,"stained-glass",HTML="https://www.youtube.com/watch?v=t8g1e-JLrhM"$ windows and tomes with ridiculously elaborate $TX,"calligraphy",HTML="https://www.youtube.com/watch?v=Oa8gMb0YC68"$ to show love of God, from a people who did little else but show love toward God, lived in dire conditions by today's standards, yet with so much difficulty scraping-by, found the time to devote $TX,"even all free-time",HTML="https://www.youtube.com/watch?v=tZw5V4XuUIo"$ to God! 1 Kings 6:21 (King James) @@ -21,7 +21,7 @@ $LM,0$ * God said $FG,2$640x480 16 color$FG$ graphics is a covenant like circumcision. Children will do offerings. Think of 16 colors like the Simpson's cartoons. In the future, even if one GPU were universal, we would keep 640x480 16 color and not use GPU acceleration. Graphics operations should be transparent, not hidden in a GPU. -* God said to use a single audio voice -- a single frequency with waveforms. +* God said to use a single audio voice -- a single frequency with waveforms and, maybe, amplitude envelope. * God said His temple must be perfect. $FG,4$We don't think twice about breaking compatibility.$FG$ God said we do a seven year release cycle. I say the PC hardware follows a 49 year, jubilee cycle, like broadcast TV upgrades. @@ -31,17 +31,19 @@ $LM,0$ * Low line count is the highest good, so it is easy to learn the whole thing. Users should see the light at the end of the tunnel. One file system, for example, is better than many file systems. -* There is a limit of 100,000 lines of code for all time, not including applications and demos. $FG,4$Code comments count$FG$, however. $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit. The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications. Currently, there are $TX,"79,959",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code. +* There is a limit of 100,000 lines of code for all time, not including applications and demos. $FG,4$Code comments count$FG$, however. $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit. The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications. Currently, there are $TX,"80,860",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code. * Minimal abstraction is a goal. Sheep are fools. They always respect a design that is more complicated than another. Any genius can make it complicated. Like in physics, it takes a supra-genius to make it simple. -* One platform. $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatibles. Desk-tops are all we design for, but lap-tops can tag-along. +* One platform. $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatibles. Desk-tops are all we design for, but laptops can tag along. + +* All hardware access will be done through x86 IN/OUT instructions, not PCI drivers. A frame buffer for VGA is an exception. * One driver for each class of device. Limited exceptions are allowed. With divergent device capabilities, it is a nightmare for user applications and what is gained? A three button mouse is like a leg you cannot put weight on. * $FG,2$Ring-0-only$FG$. Everything runs in kernel mode, including user applications. -* Full access to everything. All memory, I/O ports, instructions, and similar things must never be off-limits. All functions, variables and class members will be accessible. There are no C++ $FG,2$public$FG$/$FG,2$private$FG$ protections and all functions, even secondary ones in the kernel, can be called. +* Full access to everything. All memory, I/O ports, instructions, and similar things must never be off limits. All functions, variables and class members will be accessible. There are no C++ $FG,2$public$FG$/$FG,2$private$FG$ protections and all functions, even secondary ones in the kernel, can be called. * $FG,2$Single-address-map$FG$ as though paging is not used. Long mode requires paging, however, so the nearest thing is keeping all memory $FG,2$identity-mapped$FG$. diff --git a/Doc/CompilerOverview.TXT b/Doc/CompilerOverview.TXT index f1eab32..b2fde21 100644 --- a/Doc/CompilerOverview.TXT +++ b/Doc/CompilerOverview.TXT @@ -16,9 +16,9 @@ $FG,2$#help_index$FG$, $FG,2$#help_file$FG$ See $LK,"Help System",A="FI:::/Doc/H $HL,1$$WW,0$ #define __DATE__ #exe{StreamPrint("\"%D\"",Now);} #define __TIME__ #exe{StreamPrint("\"%T\"",Now);} -#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} -#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} -#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->depth);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->lex_include_stk->full_name);} #define __DIR__ #exe{StreamDir;} $HL,0$$WW,1$ See $LK,"::/Demo/Directives.CPP"$, $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$ and $LK,"Compiler Options",A="FI:::/Doc/Options.TXT"$. diff --git a/Doc/Confuse.TXT b/Doc/Confuse.TXT index 611f59a..e041bbc 100644 --- a/Doc/Confuse.TXT +++ b/Doc/Confuse.TXT @@ -1,12 +1,12 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$ -* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"121,138",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"11.0",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders. +* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"120,912",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"11.6",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders. See $LK,"::/Doc/Credits.TXT.Z"$. -* TempleOS does not execute code not written by me and any time except for a few $FG,2$BIOS$FG$ calls for configuration. +* TempleOS does not execute code not written by me and any time except for a few $FG,2$BIOS$FG$ calls for configuration. See $LK,"::/Doc/Credits.TXT.Z"$. * TempleOS is 100% independent -- it does not access the files of your primary operating system. It will work as the only operating system on your computer. -* TempleOS is 100% written from scratch. There is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in TempleOS. Yes, I wrote the compiler from scratch. (I probably need to repeat that a few times.) +* TempleOS is 100% written from scratch. There is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in TempleOS. Yes, I wrote the compiler from scratch. (I probably need to repeat that a few times.) See $LK,"::/Doc/Credits.TXT.Z"$. * TempleOS is an operating system, not a browser. The cmd line has active links. They link to local files. diff --git a/Doc/Credits.TXT b/Doc/Credits.TXT index 4fe625c..29a98b9 100644 --- a/Doc/Credits.TXT +++ b/Doc/Credits.TXT @@ -12,7 +12,7 @@ $WW,1$$FG,5$$TX+CX,"Credits"$$FG$ 6) The random number generator is from the book, $UL,1$Numeric Recipies in C$UL,0$. -7) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. +7) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. I took watermarked photos and converted to 16 color. 8) The $FG,2$FAT32$FG$ file system is owned by MicroSoft. @@ -40,7 +40,9 @@ $WW,1$$FG,5$$TX+CX,"Credits"$$FG$ 20) Bill Gates inspired me to add comments to my $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$. -In short, I wrote every one of the $TX,"120,532",D="DD_TEMPLEOS_LOC"$ lines myself, no $FG,2$GPL$FG$ code, no linkage or dependence on other code. Anyone who says otherwise is being an ass. +21) I hired and artist, Cody Rigby, for $$3,000 worth of pixel art. + +22) Erik van der Karbargenbok made $LK,"TempleBot",A="PI:::/Linux/TempleBot",HTML="http://www.templeos.org/Wb/Home/Wb2/Files/Bin/TempleBot.html"$. $FG,8$ * "MSDOS", "Windows", "MovieMaker" "MS Paint" and "FAT32" are trademarks of MicroSoft Corp. * "SiteBuilder" is a trademark of Yahoo! Inc. diff --git a/Doc/CutCorners.TXT b/Doc/CutCorners.TXT index 7e620c6..2861a67 100644 --- a/Doc/CutCorners.TXT +++ b/Doc/CutCorners.TXT @@ -8,6 +8,13 @@ There are a few places where I cut corners in the interest of not junking-up cod * I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Asm.CPP"$ simpler and I did minimal 16-bit asm support, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/Adam/Boot/BootCD.CPP"$. -* There are no file-sharing locks of any kind. You're on your own. +* There are no user-controlled file-sharing locks. However, the drive and file system have locks and concurrent operations should be fine. * A hidden window is never refreshed. Certain tasks are never done, therefore. During refresh, the entry count limit of the document buffer is, normally, checked and enforced. If you print to the command-line in a task whose window is covered, no limit on buffer exists and it will alloc memory for the document buffer until the system runs out of memory and crashes. + +* Even if a local function variable is declared less than 64 bits, the compiler does calculations with 64-bit. + +* $LK,"Print",A="FI:::/Doc/Print.TXT"$() uses $LK,"StrPrintJoin",A="MN:StrPrintJoin"$(). You cannot use vastly over-sized fields for %f. + +* $LK,"GrEllipse3",A="MN:GrEllipse3"$() is broken on transformations. + \ No newline at end of file diff --git a/Doc/Define.TXT b/Doc/Define.TXT index b3db349..68aec93 100644 --- a/Doc/Define.TXT +++ b/Doc/Define.TXT @@ -1,6 +1,8 @@ $WW,1$TempleOS has a string indirection feature implemented with the same hash symbol table entry as $FG,2$#define$FG$ macros, $LK,"HTT_DEFINE_STR",A="MN:HTT_DEFINE_STR"$. Support for string lists is also provided, but it's not very efficient, though, you can make a hash table with a list using $LK,"HashDefineLstAdd",A="MN:HashDefineLstAdd"$(). See $LK,"::/Adam/DolDoc/DocInit.CPP",A="FF:::/Adam/DolDoc/DocInit.CPP,HashDefineLstAdd"$. -Each task can load it's own Define strings. Remember, when a $LK,"Hash",A="HI:Hash"$ table is searched for a string, if it is not found, the parent task's table is searched. +If you have an $FG,2$@$FG$ as the first char of a define list entry, it is an alias for the previous entry num. + +Each task can load its own Define strings. Remember, when a $LK,"Hash",A="HI:Hash"$ table is searched for a string, if it is not found, the parent task's table is searched. The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ framework supports text that changes based on entries in the task's symbol table. Set a text entry with a $FG,2$D=$FG$ arg, as in $FG,2$$$TX,"",D="DD_MYSTRING"$$$FG$. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/ADefine.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$. diff --git a/Doc/Demands.TXT b/Doc/Demands.TXT index a795cc3..6e44e44 100644 --- a/Doc/Demands.TXT +++ b/Doc/Demands.TXT @@ -1,53 +1,59 @@ $WW,1$$FG,5$$TX+CX,"Demands"$$FG$ -When God publically claims this operating system as His temple, here's what I want: - +I, Terry Davis, am High Priest of God's official temple, TempleOS. TempleOS is an operating system for PC desktops that dual boots along-side Windows or Linux. I am in charge of the core 100,000 lines of TempleOS code and I do continual offerings to keep God entertained. I have divine authority to command companies in the computer industry to do anything to make God's temple more beautiful or perfect. I have authority similar to the Americans with Disability Act -- I make commands with God signing-off by creating miraculous authenticated oracles. $HC,""$ -* VMware to again support PC Speaker and provide emulation if no PC Speaker is present. +* VMware must again support PC Speaker and provide emulation if no PC Speaker is present. -* Windows, Linux and VMware to support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad. +* VMware must again support full screen 640x480 16 color mode. + +* Windows, Linux and VMware (because of mounted drives) must support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad. $LK,"::/Kernel/Dsk/FileSysRedSea.CPP"$ -$LK,"::/Kernel/Dsk/FileSysFAT.CPP"$ :965 -$LK,"::/Kernel/Dsk/FileSysISO.CPP"$ :284 -$LK,"::/Adam/Boot/DskCDDVD.CPP"$ :536 -$LK,"RClustersBlks",A="MN:RClustersBlks"$() +$LK,"::/Kernel/Dsk/FileSysFAT.CPP"$ :965 lines for FAT32 gets eliminated. +$LK,"::/Kernel/Dsk/FileSysISO.CPP"$ :284 lines for ISO9660 gets eliminated. +$LK,"::/Adam/Boot/DskISOFile.CPP"$ :536 lines for making ISO files gets reduced. +$LK,"::/Kernel/Dsk/DskCluster.CPP.Z"$ :152 All the cluster operations become blk. -* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot because it has no networking. Real hardware as opposed to $FG,2$VMware$FG$ is like the difference between looking in a telescope eye piece and some link to a photo on the Internet. God said the C64 generation owned ancestral lands and $FG,2$VMware$FG$ is like being moved on a reservation. It will not stand. +* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot because it has no networking. Real hardware as opposed to $FG,2$VMware$FG$ is like the difference between looking in a telescope eye piece or not. God said the C64 generation owned ancestral lands and $FG,2$VMware$FG$ is like being moved onto a reservation, but in this case it will not stand. -* PC hardware manufacturers: ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master 1F0/3F6. CDROM/DVD should be secondary master 170/376. See what you can do to make flash memory sticks with ATA/ATAPI. -$LK,"/Kernel/Dsk/DskATAId.CPP",A="FI:::/Kernel/Dsk/DskATAId.CPP"$ :280 lines to figure-out I/O ports -$LK,"/Kernel/BIOS32.CPP",A="FI:::/Kernel/BIOS32.CPP"$ :290 +* PC hardware manufacturers? ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master 1F0/3F6. CDROM/DVD should be secondary master 170/376. See what you can do to make flash memory sticks with ATA/ATAPI. +$LK,"/Kernel/Dsk/DskATAId.CPP",A="FI:::/Kernel/Dsk/DskATAId.CPP"$ :280 lines to figure-out I/O ports is gone. +$LK,"/Kernel/PCIBIOS.CPP",A="FI:::/Kernel/PCIBIOS.CPP"$ :290 could eliminate,but people can play with. * PS/2 emulated keyboard and mouse must work. The BIOS must enable these. -* VMware must allow ATAPI interface to real CD/DVD hardware. +* VMware must allow ATAPI interface to be routed to real CD/DVD hardware. -* Perhaps, VMware+Intel can enable faster-than-standard x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad. $LK,"ATAGetResult",A="MN:ATAGetResult"$(). +* Perhaps, VMware+Intel can enable faster x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad. $LK,"ATAGetResult",A="MN:ATAGetResult"$(). -* Since I practically don't use paging, perhaps, Intel could add optimizations to long (64-bit) mode for no paging. +* Perhaps, Intel can make a fast software interrupt, the same as a CALL REL32? -* Computers should have a RESET switch and a fast boot option, skipping diagnostics. What the heck, replace UEFI with TempleOS. Poetic justice. +* Since I don't use paging (for anything), Intel should have an option for no-paging long mode, and optimize it. +$LK,"::/Kernel/MemA.CPP.Z"$ :153 lines to identity-map gets eliminated. -* VMware and others should list TempleOS as an official 64-bit operating system. +* Desktop computers must have a RESET switch and a fast reboot option, skipping diagnostics. Build UEFI on a TempleOS layer. Intel must burn TempleOS into a ROM at the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle. A new ROM version is released every seven years. -* Windows and Linux must support TempleOS $FG,2$.GRA$FG$ graphics files. $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$ are much cleaner than $FG,2$.BMP$FG$ files. +* VMware and others must list TempleOS as an official 64-bit operating system. -* I want a nice dictionary. Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.CPP"$. +* Windows Paint and Linux Gimp must support TempleOS $FG,2$.GRA$FG$ graphics files. $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$ are much cleaner than $FG,2$$TX,"BMP files",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$$FG$. -* We want the ultimate Bible search engine. +* We must have a nice dictionary. Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.CPP"$. -* I would like the Intel architecture manuals in $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ TXT format so we can put links in the code. +* We must have the ultimate Bible search engine. -* We want serial ports with software interface more like old style serial ports, but hardware and speed of USB3. They should have big TX and RX FIFOs and allow flow control to jump the queue. We do not want end-point shit -- just put lots of ports on the PC. (I am just interested in desk-tops.) We need two baud rates, fast and slow. Use PIC IRQ3 and IRQ4 (with big FIFOs we could do without IRQs.) We want two joysticks, easy to set-up. We want it to be easy to connect a microcontroller for general purpose communication. +* Once every 49 years is a jubile year and all hardware gets thrown-out and upgraded to become perfect. The first jubile year is in 2024. It works the same as how broadcast TV got upgraded. God still wants 640x480 16 color, but make it a linear frame buffer one-byte-per-pixel and only 16 color. -* Once in a blue moon, perhaps 49 year jubilee, the hardware gets upgraded and perfected, the same way broadcast TV get upgraded. God still wants 640x480 16 color. +* TempleOS only uses x86 I/O ports for hardware. (It also uses VGA memory.) The industry has matured and we can, now, allocate I/O ports in a beautiful, consecutive, perfect pattern for all the devices. + +* The year, 2024, is the first jubile year. We want 8-channel, modern-speed, OCTART serial ports, with a simple software interface, more like old-style RS232 serial ports, to replace USB. It should have big TX and RX FIFOs and allow flow control to jump the queue. There will be no USB end-point nonsense -- just put 8 ports on the PC. (I am just interested in desktops.) We want keyboards, mice and joysticks to have a single, simple, uniform ASCII text packet command. Hyperterm can be used to easily debug all devices. We want to be able to connect microcontrollers for simple, general purpose send-byte/receive-byte communication. You will buy a PCI card if you need legacy USB or more ports. -Device Simple Hardware Interface Complicate Interface +As it stands, there is a simple and deluxe hardware mode... + +Device Simple Hardware Interface Deluxe Interface --------------- ------------------------------- ----------------------------- 1040-EZ Tax Form 1040 Regular Video VGA 640x480 16 Color 20 Differnet GPUs @@ -57,8 +63,13 @@ CDROM ATAPI Port I/O PCI AHCI SATA Keyboard/Mouse PS/2 Port I/O USB -During the 49 years jubilee, we do a perfect version of hardware with advances in both simple and complicated interfaces. ATAPI/ATA should be merged and made blemish-free. We want flash memory sticks to interface like hard drives. Design it like the 1040EZ tax form. You do not add extra boxes to get your jollies. +During the 49 years jubile, we do a perfect version of hardware with advances in both the simple and deluxe interfaces. ATAPI/ATA, SSD and NV memory should be merged and made blemish-free. For the simple interface, we want just block-read, block-write and get capacity. We want flash memory sticks to interface like hard drives. When you design the simple mode, imagine you are creating the 1040EZ tax form -- do not just add extra boxes. +A new TempleOS ROM is released every seven years. It gets burned into all new x86 chips in the Intel factory, for tamper-proof certainty in oracles and just because it's God's official temple and deserves the honor! (The reset switch should trigger booting the ROM TempleOS.) Development will take place between releases, obviously. With the limit of 100,000 lines of code, it is supposed to crystalize into a perfected, unchanging diamond that lasts over centuries. I want an $TX,"ACM",HTML="http://www.acm.org"$ committee to work with me on this ROM until 2017, the year the first official version is released. We allow boot-legs to freely circulate. The users can copy ROM and RAM and play with it, or boot a hard disk versions. + +In the meantime, BIOS makers must take the TempleOS code and modify it for their existing customers, as a product recall. A PCI hard drive driver must be written if the BIOS you created does not work with the standard TempleOS ATA/ATAPI port IO. You must also bypass SecureBoot and make sure the keyboard and mouse work if you do not support legacy PS/2, by writing a USB driver. + +I want to offer "Knuth-bucks" for changes that reduce lines of code (other than trivial reformatting). I want to offer Knuth bucks for pointing-out spelling and other imperfections. Some imperfections are by design, however. The original Bible generously mentioned even temple personel who were porters, so we can generously list $LK,"credits",A="FI:::/Doc/Credits.TXT.Z"$. $FG,8$ * "VMware" is a trademark of VMware, Inc. * "Linux" is probably a trademark owned by Linus Torvalds. diff --git a/Doc/DemoIndex.TXT b/Doc/DemoIndex.TXT index 60a9661..5bdb17a 100644 --- a/Doc/DemoIndex.TXT +++ b/Doc/DemoIndex.TXT @@ -4,6 +4,8 @@ $WW,1$These are arranged in increasing order of difficulty, more or less. This $FG,2$$FG$ to edit a file and $FG,2$F5$FG$ to run it. +$LK,"::/Doc/HelloWorld.TXT.Z"$ + $WW,0$$TR,"Games: Beginner"$ $ID,2$$LK,"::/Demo/Graphics/NetOfDots.CPP"$ $LK,"::/Demo/Graphics/InputPointer.CPP"$ @@ -32,7 +34,7 @@ $LK,"::/Demo/Games/Digits.CPP"$ $LK,"::/Demo/Progress.CPP"$ //has some ASM, just ignore $LK,"::/Demo/Graphics/Symmetry.CPP"$ $LK,"::/Demo/Graphics/Blot.CPP"$ -$LK,"::/Demo/Graphics/CaptureScreen.CPP"$ +$LK,"::/Demo/Graphics/ScreenCapture.CPP"$ $LK,"::/Demo/Graphics/EdSprite.CPP"$ $LK,"::/Demo/PullDownMenu.CPP"$ $MA-X+PU,"::/Demo/Games/Stadium",LM="Cd(\"::/Demo/Games/Stadium\");Dir;View;\n"$ @@ -45,7 +47,6 @@ $LK,"::/Demo/Snd/MorseCode.CPP"$ $LK,"::/Demo/Graphics/Lattice.CPP"$ $LK,"::/Demo/Graphics/Collision.CPP"$ $LK,"::/Demo/Games/BlackDiamond.CPP"$ -$LK,"::/Demo/Games/Wenceslas.CPP"$ $ID,-2$$TR,"Games: Intermediate"$ $ID,2$$LK,"::/Demo/Graphics/Box.CPP"$ $LK,"::/Demo/Graphics/Pick.CPP"$ @@ -55,6 +56,7 @@ $LK,"::/Demo/Graphics/Extents.CPP"$ $LK,"::/Demo/Graphics/SpritePlot3D.CPP"$ $LK,"::/Demo/Graphics/Balloon.CPP"$ $LK,"::/Demo/Graphics/RotateTank.CPP"$ +$LK,"::/Demo/Games/Wenceslas.CPP"$ $LK,"::/Demo/ScreenCodes.CPP"$ $LK,"::/Demo/Graphics/PanText.CPP"$ $LK,"::/Demo/Graphics/CharGraphics.CPP"$ @@ -70,6 +72,7 @@ $LK,"::/Demo/Graphics/Cartesian.CPP"$ $LK,"::/Demo/Graphics/Hanoi.CPP"$ $LK,"::/Demo/Graphics/Life.CPP"$ $LK,"::/Demo/Games/Zing.CPP"$ +$LK,"::/Demo/Graphics/Grid.CPP.Z"$ $LK,"::/Demo/Games/TreeCheckers.CPP"$ $LK,"::/Demo/MultiCore/Palindrome.CPP"$ $LK,"::/Demo/MultiCore/MPAdd.CPP"$ @@ -154,6 +157,7 @@ $LK,"::/Demo/CompileDemo.CPP"$ $LK,"::/Demo/Prompt.CPP"$ $LK,"::/Demo/ClassMeta.CPP"$ $LK,"::/Demo/LastClass.CPP"$ +$LK,"::/Demo/DolDoc/NumBible.CPP.Z"$ $LK,"::/Demo/DolDoc/Form.CPP"$ $LK,"::/Demo/DolDoc/MenuButton.CPP"$ $LK,"::/Demo/DolDoc/MenuSprite.CPP"$ diff --git a/Doc/Directives.TXT b/Doc/Directives.TXT index 25e3f6e..f788fd0 100644 --- a/Doc/Directives.TXT +++ b/Doc/Directives.TXT @@ -1,8 +1,8 @@ $HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} #define __TIME__ #exe{StreamPrint("\"%T\"",Now);} -#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);} -#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} -#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->depth);} +#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->lex_include_stk->full_name);} #define __DIR__ #exe{StreamDir;} See $LK,"::/Demo/Directives.CPP"$.$HL,0$$WW,1$ diff --git a/Doc/DolDoc.TXT b/Doc/DolDoc.TXT index cd181ae..2caec96 100644 --- a/Doc/DolDoc.TXT +++ b/Doc/DolDoc.TXT @@ -1,5 +1,3 @@ $WW,1$A $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ in memory is a $LK,"Circular Queue",A="HI:Data Types/Circular Queue"$ of cmds and graphics. See $LK,"CDocEntry",A="MN:CDocEntry"$ for the entry structure. See $LK,"TipOfDay",A="MN:TipOfDay"$() for a nice example. $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$'s are used for the editor, viewer, browser, and cmd line. - -There is one $LK,"CDoc",A="MN:CDoc"$ for the task's border: $FG,2$Fs->border_doc$FG$. There is a pair for the task's client area: $FG,2$Fs->put_doc$FG$ and $FG,2$Fs->display_doc$FG$. You can, optionally, do double buffering, otherwise $FG,2$Fs->put_doc$FG$ is the same as $FG,2$Fs->display_doc$FG$. See $LK,"::/Demo/Spy.CPP"$. diff --git a/Doc/DolDocOverview.TXT b/Doc/DolDocOverview.TXT index 75146d6..80610a9 100644 --- a/Doc/DolDocOverview.TXT +++ b/Doc/DolDocOverview.TXT @@ -1,6 +1,6 @@ $WW,1$$FG,5$$TX+CX,"DolDoc Overview"$$FG$ -DolDoc is a propriatary TempleOS document type supported by $LK,"DolDoc Routines",A="HI:DolDoc"$. In a document, commands are bracketed with '$FG,2$$$$FG$'s. Use $FG,2$$FG$ to experiment inserting a command. Then, use $FG,2$$FG$ to toggle to plain text to see it. +DolDoc is a TempleOS document type supported by $LK,"DolDoc Routines",A="HI:DolDoc"$. In a document, commands are bracketed with '$FG,2$$$$FG$'s. Use $FG,2$$FG$ to experiment inserting a command. Then, use $FG,2$$FG$ to toggle to plain text to see it. Here is the grammar: @@ -8,7 +8,7 @@ Here is the grammar: := $FG,2$+$FG$|$FG,2$-$FG$ <$LK,"FlagCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$>[$FG$] - := <$LK,"ArgCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$>$FG,2$=$FG$$FG,2$,$FG$ | <$LK,"ArgCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$>$FG,2$=$FG$ + := <$LK,"ArgCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$>$FG,2$=$FG$[$FG,2$,$FG$] The format of DolDoc cmds is a two character code, +/-flags, a comma and args separated by commas. Some commands have mandatory args. Optional args are indicated with <$LK,"ArgCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$>$FG,2$=$FG$. A $LK,"ColorName",A="MN:ST_COLORS"$ bracked by dollars, will change the foreground color. @@ -18,9 +18,9 @@ See $LK,"::/Doc/Widget.TXT"$ and $LK,"::/Demo/DolDoc/DemoDoc.TXT"$. <$LK,"TwoLetterCmd",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_CMDS"$> See $LK,"Type Defines",A="MN:DOCT_TEXT"$ and $LK,"PrsDollarCmd",A="MN:PrsDollarCmd"$(). $TR,"TX Text"$ $ID,2$Normally, text is not bracketed with '$FG,2$$$$FG$', but if you wish to specify flag attr, such as centering text, you can bracket them with '$FG,2$$$$FG$' and enter flags such as "$FG,2$+CX$FG$". You can't edit them normally if they are bracketed by '$FG,2$$$$FG$' unless you toggle to plain text mode with $FG,2$$FG$. -$ID,-2$$TR,"CR Hard Carriage Return (New Line)"$ +$ID,-2$$TR,"CR Hard New Line"$ $ID,2$New lines are normally not bracketed with '$FG,2$$$$FG$'. -$ID,-2$$TR,"SR Soft Carriage Return (New Line)"$ +$ID,-2$$TR,"SR Soft New Line"$ $ID,2$Word wrap uses temporary soft new lines. Users never place soft new lines. $ID,-2$$TR,"CU Cursor pos"$ $ID,2$The cursor pos is stored as a ASCII#5 character and is not bracketed with '$FG,2$$$$FG$'. Users normally do not enter cursor pos. @@ -30,14 +30,6 @@ $ID,-2$$TR,"CL Clear"$ $ID,2$Clear all previous entries except ones with hold($FG,2$+H$FG$) flags. You might want $FG,2$+H$FG$ on word wrap entries. Alternatively, you can use $LK,"DocClear",A="MN:DocClear"$(). $ID,-2$$TR,"PB Page Break"$ $ID,2$Page break. -$ID,-2$$TR,"DA Data"$ -$ID,2$Used for forms that prompt for data. Use $FG,2$$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocFormDo",A="MN:DocFormDo"$() and $LK,"::/Demo/DolDoc/Form.CPP"$. - -The default data-type for the $FG,2$$$DA...$$$FG$ command is $FG,2$I64$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, $FG,2$U64$FG$, or $FG,2$F64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$(). - -The $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str arg $FG,2$A=""$FG$ is used for the format string. - -If there is a ':', the space after the first ':' in the format string marks the first valid cursor pos. See $LK,"Data Tag Width",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$. $ID,-2$$TR,"PL Page Length"$ $ID,2$Page length. $ID,-2$$TR,"LM Left Margin"$ @@ -124,16 +116,28 @@ Examples: to see 8)$LK,"File anchor link -- to see anchor after you click",A="FA:::/Kernel/KEnd.CPP,Independent HeapCtrl Example"$ 9)$LK,"Bible Link",A="BF:Acts,2:3"$ The chapter:verse actually just does a text search. 10) $LK,"Help Index Link",A="HI:Doc"$. -11) $LK,"Address Link",A="AD:0x10000"$. +11) $LK,"Address Link",A="AD:0x11000"$. 12) For in-memory document address links, see $LK,"SpriteEdText",A="MN:SpriteEdText"$(). $ID,-2$$TR,"BT Button"$ $ID,2$See $LK,"::/Demo/DolDoc/MenuButton.CPP"$. +$ID,-2$$TR,"DA Data"$ +$ID,2$Used for forms that prompt for data. Use $FG,2$$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/DolDoc/Form.CPP"$. + +The default data-type for the $FG,2$$$DA...$$$FG$ command is $FG,2$I64$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, $FG,2$U64$FG$, or $FG,2$F64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$(). + +The $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str arg $FG,2$A=""$FG$ is used for the format string. + +If there is a ':', the space after the first ':' in the format string marks the first valid cursor pos. See $LK,"Data Tag Width",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$. $ID,-2$$TR,"CB Check Box"$ -$ID,2$Used for forms. Use $FG,2$$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocFormDo",A="MN:DocFormDo"$(), $LK,"CEdFindText",A="MN:CEdFindText"$ and $LK,"::/Demo/DolDoc/Form.CPP"$. +$ID,2$Used for forms. Use $FG,2$$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$(), $LK,"CEdFindText",A="MN:CEdFindText"$ and $LK,"::/Demo/DolDoc/Form.CPP"$. The default data-type for the $FG,2$$$CB...$$$FG$ command is $FG,2$I8$FG$ which is $FG,2$Bool$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, or $FG,2$U64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$(). +$ID,-2$$TR,"LS List Widget"$ +$ID,2$Used for forms that prompt for data. You must specify a define list, $FG,2$D=""$FG$. Use $FG,2$$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/DolDoc/Form.CPP"$. + +The default data-type for the $FG,2$$$LS...$$$FG$ command is $FG,2$I64$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, or $FG,2$U64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$(). $ID,-2$$TR,"MA Macro"$ $ID,2$A left macro arg, $FG,2$LM=""$FG$, will send text when the left mouse is clicked. @@ -152,10 +156,6 @@ $ID,2$A tree widget is a branch in a collapsable tree. The domain of the branch You might want to use $LK,"DocPrintAtomic",A="MN:DocPrintAtomic"$(). See $LK,"::/Demo/DolDoc/TreeDemo.CPP"$. -$ID,-2$$TR,"LS List Widget"$ -$ID,2$Used for forms that prompt for data. You must specify a define list, $FG,2$D=""$FG$. Use $FG,2$$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocFormDo",A="MN:DocFormDo"$() and $LK,"::/Demo/DolDoc/Form.CPP"$. - -The default data-type for the $FG,2$$$LS...$$$FG$ command is $FG,2$I64$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, or $FG,2$U64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$(). $ID,-2$$TR,"SP Sprite"$ $ID,2$Insert a sprite into text with $FG,2$$FG$. The cursor location at the time you press $FG,2$$FG$ is critical because the sprite will be offset from that location. This is important when adding images to programs. Numbers for sprites are automatically chosen because copying to and from the clipboard requires this. You can insert another sprite with the same image by hitting $FG,2$$FG$ and manually adding a $FG,2$$$SP...$$$FG$ entry with the same $FG,2$BI=$FG$ num. @@ -180,7 +180,7 @@ $ID,2$The $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$() rou $ID,-2$$TR,"ER Error"$ $ID,2$When errors are detected in DolDoc cmds, an $FG,2$ER$FG$ entry is generated. $ID,-2$ -<$LK,"FlagCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$> See $LK,"Flag Defines",A="MN:DOCEf_LEFT_CB"$ and $LK,"DocInit",A="MN:DocInit"$(). +<$LK,"FlagCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$> See $LK,"Flag Defines",A="MN:DOCEf_LEFT_CB"$ and $LK,"Simple Flags",A="FI:::/Doc/Widget.TXT.Z"$. $TR,"+H Hold"$ $ID,2$Causes not to delete this cmd when cleared with $FG,2$CL$FG$ or when the doc->max_entries is exceeded. Word wrap is a good to hold. There is no way to delete these entries, at this point. $ID,-2$$TR,"+L Link"$ @@ -205,6 +205,8 @@ $ID,-2$$TR,"+RD Refresh Data"$ $ID,2$The Refresh Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value on the screen updated continuously. $ID,-2$$TR,"+UD Update Data"$ $ID,2$The Update Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value in the $LK,"CDocEntry",A="MN:CDocEntry"$ updated when keys are typed on it. +$ID,-2$$TR,"+TC Tag CallBack"$ +$ID,2$See $LK,"::/Demo/DolDoc/CallBack.CPP"$. $ID,-2$$TR,"+LC Left CallBack"$ $ID,2$See $LK,"::/Demo/DolDoc/ClickCallBack.CPP"$. $ID,-2$$TR,"+RC Right CallBack"$ diff --git a/Doc/GRAFiles.TXT b/Doc/GRAFiles.TXT index 4625511..ffa365f 100644 --- a/Doc/GRAFiles.TXT +++ b/Doc/GRAFiles.TXT @@ -1,6 +1,7 @@ $WW,1$GRA graphics files are 8-bits-per-pixels but only 4-bits of color, with transparency and no palette. Compression is the standard TempleOS$FG$ LZW compression. $HL,1$ #define DCF_COMPRESSED 1 //This is the only saved flag. +#define DCF_PALETTE 2 #define TRANSPARENT 0xFF #define BLACK 0 @@ -20,12 +21,24 @@ $HL,1$ #define YELLOW 14 #define WHITE 15 +class CBGR48 +{ + U16 r,g,b,pad; +}; + +CBGR48 gr_palette_std[16]={ +0x000000000000,0x00000000AAAA,0x0000AAAA0000,0x0000AAAAAAAA, +0xAAAA00000000,0xAAAA0000AAAA,0xAAAA55550000,0xAAAAAAAAAAAA, +0x555555555555,0x55555555FFFF,0x5555FFFF5555,0x5555FFFFFFFF, +0xFFFF55555555,0xFFFF5555FFFF,0xFFFFFFFF5555,0xFFFFFFFFFFFF}; + class GRAFile { I32 width; I32 width_internal; //Rounded-up to multiple of 8. I32 height; I32 flags; //DCF_COMPRESSED? See $LK,"::/Kernel/Compress.CPP"$. + CBGR48 palette[16]; //Included if DCF_PALETTE. U8 body[]; };$HL,0$ diff --git a/Doc/Glossary.TXT b/Doc/Glossary.TXT index 8a8b205..859c0e4 100644 --- a/Doc/Glossary.TXT +++ b/Doc/Glossary.TXT @@ -16,6 +16,7 @@ $FG,2$Aux$FG$ Auxilliary $FG,2$BG$FG$ Backround $FG,2$Bin$FG$ Binary $FG,2$Blk$FG$ Block +$FG,2$Bmp$FG$ BitMap $FG,2$BSP$FG$ Boot-strap Processor(CPU#0) $FG,2$Buf$FG$ Buffer $FG,2$Bwd$FG$ Backward @@ -91,6 +92,7 @@ $FG,2$Pix$FG$ Pixel $FG,2$$FG,2$Pkg$FG$ Package $FG,2$Poly$FG$ Polygon $FG,2$Pos$FG$ Position +$FG,2$Pow$FG$ Power $FG,2$Prec$FG$ Precedence $FG,2$Pri$FG$ Primary $FG,2$Prod$FG$ Product, Production @@ -122,11 +124,13 @@ $FG,2$Std$FG$ Standard $FG,2$Stk$FG$ Stack $FG,2$Str$FG$ String $FG,2$Sym$FG$ Symbol +$FG,2$Sync$FG$ Synchronization $FG,2$Sys$FG$ System +$FG,2$Tbl$FG$ Table $FG,2$Term$FG$ Terminal $FG,2$Tri$FG$ Triangle $FG,2$Tx$FG$ Transmit -$FG,2$Uasm$FG$ Unassemble +$FG,2$UAsm$FG$ Unassemble $FG,2$Val$FG$ Value $FG,2$Var$FG$ Variable $FG,2$Vect$FG$ Vector diff --git a/Doc/GraphicsOverview.TXT b/Doc/GraphicsOverview.TXT index d0360df..d20e3cd 100644 Binary files a/Doc/GraphicsOverview.TXT and b/Doc/GraphicsOverview.TXT differ diff --git a/Doc/GuideLines.TXT b/Doc/GuideLines.TXT index 458fc36..57f9d15 100644 --- a/Doc/GuideLines.TXT +++ b/Doc/GuideLines.TXT @@ -14,6 +14,8 @@ $FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot. +$FG,2$/0000Boot$FG$ Misc boot files go here. Stage 2 of the TempleOS hard drive master boot loader, the old hard drive master boot record which is just blk#0, and the CD/DVD $FG,2$0000Kernel.BIN.C$FG$ file go here. ASCII $FG,2$0000$FG$ is near the top, alphabetically, in case you use $TX,"MagicISO",HTML="http://www.magiciso.com"$. + $FG,5$$TX+CX,"::/Home Files"$$FG$ @@ -50,6 +52,8 @@ $FG,5$$TX+CX,"Programming Guidelines"$$FG$ * Virtual mem/Paging is not used -- it is identity mapped in $FG,2$x86_64$FG$ mode. The stk does not grow, so alloc enough when the task (process) is $LK,"Spawn",A="MN:Spawn"$ed and use the heap for most things. (The $FG,2$heap$FG$ refers to $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().) +* You can $LK,"Free",A="MN:Free"$($FG,2$NULL$FG$)$FG$. + * See $LK,"Naming Convention",A="FF:::/Doc/Glossary.TXT,Naming Convention"$ and $LK,"Abbreviations",A="FF:::/Doc/Glossary.TXT,Abbreviations"$. * There are two modes of compiling, $LK,"AOT Compile Mode",A="FF:::/Doc/Glossary.TXT,AOT Compile Mode"$ and $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$. Compilation is done in both -- neither is "interpreted". Use $FG,2$$LK,"JIT Mode",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$$FG$. @@ -58,10 +62,22 @@ $FG,5$$TX+CX,"Programming Guidelines"$$FG$ * Use $FG,2$I64$FG$ instead of smaller int sizes because the compiler converts everything to 64-bit. Don't use unsigned$FG$ unless it actually breaks. A policy of signed keeps it simple so you don't have to agonize over choices. -* In-order, short circuit logic is used, in fact required. +$LM,5$$HL,1$U32 DistDist(U16 x1, U16 y1, U16 x2, U16 y2) +{//This requires zero-extend when fetching args. + return SqrI64(x1-x2)+SqrI64(y1-y2); +} + +I64 DistDist(I64 x1, I64 y1, I64 x2, I64 y2) +{ + return SqrI64(x1-x2)+SqrI64(y1-y2); +}$HL,0$ +$LM,0$ +* In-order, short circuit logic is assumed. * Avoid boolean expression assignments. Boolean assignments don't have short circuit logic and are not compiled efficiently. The $FG,2$Bool$FG$ type is just an alias for a 1 byte signed int -- nothing forces it to $FG,2$1$FG$ or $FG,2$0$FG$. There is a $LK,"ToBool",A="MN:ToBool"$() function that will for to $FG,2$1$FG$ ot $FG,2$0$FG$, however. +* Glbl vars in $FG,2$AOT$FG$ BIN modules are initialized to zero. They occupy space in BIN files. + * If you use floats in your interrupt routine, save and restore the fpu state with $LK,"Fxsave",A="MN:Fxsave"$() and $LK,"Fxrstor",A="MN:Fxrstor"$(). The timer interrupt does this. The keyboard and mouse don't use floats. * Bracketing code with $FG,2$PUSHFD CLI$FG$ and $FG,2$POPFD$FG$ will protect against simultaneous accesses from tasks on $UL,1$one$UL,0$ core. To protect against multiple cores, you need a locked semaphore. I think semiphores need to be in their own cache line, but I'm not sure. I use lock bits in a lot of places not aligned. @@ -70,7 +86,7 @@ $FG,5$$TX+CX,"Programming Guidelines"$$FG$ * I don't use $FG,2$U0 *$FG$ because the size is zero for ptr arithmetic. -* Use $FG,2$$LK,"CH_SHIFT_SPACE",A="MN:CH_SHIFT_SPACE"$$FG$ for spaces in quotes in source code because I run $LK,"Spaces-to-Tabs",A="FF:::/Adam/Utils/S2T.CPP,S2T"$ on source code. +* Use $FG,2$$LK,"CH_SHIFT_SPACE",A="MN:CH_SHIFT_SPACE"$$FG$ for spaces in quotes in source code because I run $LK,"Spaces-to-Tabs",A="FF:::/Adam/Utils/StrUtils.CPP,S2T"$ on source code. @@ -94,7 +110,7 @@ $FG,5$$TX+CX,"Assembly Language"$$FG$ * Don't change the segment regs unless interrupts are off. It's hard to do, anyway. $LK,"SET_FS_BASE",A="MN:SET_FS_BASE"$ and $LK,"SET_GS_BASE",A="MN:SET_GS_BASE"$. -* When interacting with $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REG_VARS_MASK"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$ +* When interacting with $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REGG_C_LOCAL_VARS"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$ * I recommend using the standard stk frame for functions because $LK,"Caller",A="MN:Caller"$() is used to display the call stk, such as for the wallpaper. $FG,2$ PUSH RBP @@ -111,3 +127,5 @@ $FG$ * No args are passed in regs. * RAX holds function return values, of course. +$FG,8$ +* "MagicISO" is a trademark of MagicISO Corp. diff --git a/Doc/HeapDbg.TXT b/Doc/HeapDbg.TXT new file mode 100644 index 0000000..cd621d7 --- /dev/null +++ b/Doc/HeapDbg.TXT @@ -0,0 +1 @@ +$WW,1$Recompile the kernel with $LK,"_CFG_HEAP_DBG",A="MN:_CFG_HEAP_DBG"$=TRUE if you want more heap debugging. You are on your own. diff --git a/Doc/HelloWorld.TXT b/Doc/HelloWorld.TXT new file mode 100644 index 0000000..c311ccd --- /dev/null +++ b/Doc/HelloWorld.TXT @@ -0,0 +1,99 @@ +$HL,1$//Press F5 in the editor to compile and run. + +--------Hello.CPP.Z--------- +"Hello World\n"; + + +--------Hello.CPP.Z--------- +U0 Main() +{ + "Hello World\n"; +} +Main; + + +--------Hello.CPP.Z--------- +U0 MyPrint(U8 *st) +{ + "%s",st; +} +MyPrint("Hello World\n"); + + +--------Hello.CPP.Z--------- +U0 MyPrint2(U8 *st1,U8 *st2) //Any number of args. +{ + "%s %s\n",st1,st2; //Any number of args. +} +MyPrint2("Hello","World"); + + +--------Hello.CPP.Z--------- +U0 MyPrint(U8 *st) +{ + "" st; //Empty with no comma means first is fmt str. +} +MyPrint("Hello World\n"); + + +--------Hello.CPP.Z--------- +asm { +MSG: DU8 "Hello World\n",0; + +//The convention is underscore on C callable. +//Two colons means exported symbol. +_HELLO_WORLD:: +//You can only clobber RAX,RBX,RCX,RDX + PUSH RSI + MOV RSI,MSG + CALL PUT_STR + POP RSI + RET +} +Call(_HELLO_WORLD); + + +--------Hello.CPP.Z--------- +asm { +_HELLO_WORLD:: +//You can only clobber RAX,RBX,RCX,RDX + MOV RAX,'Hello ' + CALL PUT_CHARS //Up to 8 chars packed into one 64-bit integer. + MOV RAX,'World\n' + CALL PUT_CHARS + RET +} +Call(_HELLO_WORLD); + + +--------Hello.CPP.Z--------- +asm { +_MY_PRINT:: +//You can only clobber RAX,RBX,RCX,RDX + PUSH RBP + MOV RBP,RSP + PUSH RSI + MOV RSI,U64 SF_ARG1[RBP] + CALL PUT_STR + POP RSI + POP RBP + RET1 8 //Callee pops the stack to clear args. +} +_extern _MY_PRINT U0 MyPrint(U8 *st); +MyPrint("Hello World\n"); + + +--------Hello.CPP.Z--------- +asm { +_MY_PRINT:: +//You can only clobber RAX,RBX,RCX,RDX + PUSH RBP + MOV RBP,RSP + PUSH U64 SF_ARG1[RBP] + CALL &PutS //Callee pops the stack to clear args. + POP RBP + RET1 8 +} +_extern _MY_PRINT U0 MyPrint(U8 *st); +MyPrint("Hello World\n"); +$HL,0$ diff --git a/Doc/HelpIndex.TXT b/Doc/HelpIndex.TXT index efadf0d..11116f3 100644 Binary files a/Doc/HelpIndex.TXT and b/Doc/HelpIndex.TXT differ diff --git a/Doc/HolyC.TXT b/Doc/HolyC.TXT index 812ccb0..7781c08 100644 --- a/Doc/HolyC.TXT +++ b/Doc/HolyC.TXT @@ -144,7 +144,7 @@ $ID,-2$ $ID,2$$FG,2$U0 Main() { - //Only use $LK,"REG_VARS_MASK",A="MN:REG_VARS_MASK"$ or $LK,"REG_NON_PTR_MASK",A="MN:REG_NON_PTR_MASK"$ for reg vars or else clobbered. + //Only use $LK,"REGG_C_LOCAL_VARS",A="MN:REGG_C_LOCAL_VARS"$ or $LK,"REGG_C_LOCAL_NON_PTR_VARS",A="MN:REGG_C_LOCAL_NON_PTR_VARS"$ for reg vars or else clobbered. I64 reg R15 i=5, noreg j=4; nounusedwarn i; asm { @@ -214,9 +214,9 @@ $FG$$ID,-2$ * $FG,2$union$FG$ is more like a class, so you don't reference it with a $FG,2$union$FG$ label after you define it. Some common unions are declared in $LK,"KernelA.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$. -* $FG,2$class$FG$ member vars can have meta data. $FG,2$fmtstr$FG$ and $FG,2$fmtdata$FG$ are two meta data types now used. All compiler structures are saved and you can access the compiler's info about classes and vars. See $LK,"::/Demo/ClassMeta.CPP"$ and $LK,"DocFormDo",A="MN:DocFormDo"$(). +* $FG,2$class$FG$ member vars can have meta data. $FG,2$fmtstr$FG$ and $FG,2$fmtdata$FG$ are two meta data types now used. All compiler structures are saved and you can access the compiler's info about classes and vars. See $LK,"::/Demo/ClassMeta.CPP"$ and $LK,"DocForm",A="MN:DocForm"$(). -* There is a keyword $FG,2$lastclass$FG$ you use as a dft arg. It is set to the class name of the previous arg. See $LK,"::/Demo/LastClass.CPP"$, $LK,"ClassRep",A="MN:ClassRep"$(), $LK,"DocFormDo",A="MN:DocFormDo"$() and $LK,"::/Demo/Dsk/BlkDevRep.CPP"$. +* There is a keyword $FG,2$lastclass$FG$ you use as a dft arg. It is set to the class name of the previous arg. See $LK,"::/Demo/LastClass.CPP"$, $LK,"ClassRep",A="MN:ClassRep"$(), $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/Dsk/BlkDevRep.CPP"$. * See $LK,"::/Demo/Exceptions.CPP"$. $FG,2$try{} catch{}$FG$ and $FG,2$throw$FG$ are different from C++. $FG,2$throw$FG$ is a function with an 8-byte or less char arg. The char string passed in $FG,2$throw()$FG$ can be accessed from within a $FG,2$catch{}$FG$ using the $FG,2$Fs->except_ch$FG$. Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a handler. Use $LK,"PutExcept",A="MN:PutExcept"$() as a handler, if you like. diff --git a/Doc/Lex.TXT b/Doc/Lex.TXT index 8cea6b3..1c628c5 100644 --- a/Doc/Lex.TXT +++ b/Doc/Lex.TXT @@ -1,3 +1,3 @@ -$WW,1$The compiler's lexical analyzer can be used in your programs to simplify parsing. See $LK,"Doc Parsing",A="FF:::/Adam/DolDoc/DocPlain.CPP,LexNew"$ or $LK,"Parse Opcode File",A="FF:::/Compiler/CInit.CPP,Opcodes.TXT"$. +$WW,1$The compiler's lexical analyzer can be used in your programs to simplify parsing. See $LK,"Doc Parsing",A="FF:::/Adam/DolDoc/DocPlain.CPP,CmpCtrlNew"$ or $LK,"Parse Opcode File",A="FF:::/Compiler/AsmInit.CPP,Opcodes.TXT"$. See $LK,"Tokens",A="MN:TK_IDENT"$. diff --git a/Doc/MultiCore.TXT b/Doc/MultiCore.TXT index 5f83822..7b019b8 100644 --- a/Doc/MultiCore.TXT +++ b/Doc/MultiCore.TXT @@ -4,7 +4,7 @@ Only tasks on core#0 can have windows, but other cores can help render them. Each core has a $GREEN$seth task$FG$ which is the father of all tasks on that core. Adam is the seth task on core 0. -You give a job to a seth task with $LK,"JobQue",A="MN:JobQue"$() and get the result with $LK,"GetResult",A="MN:GetResult"$(). You spawn a task on another core with $LK,"Spawn",A="MN:Spawn"$(). +You give a job to a seth task with $LK,"JobQue",A="MN:JobQue"$() and get the result with $LK,"JobResultGet",A="MN:JobResultGet"$(). You spawn a task on another core with $LK,"Spawn",A="MN:Spawn"$(). Note: You must use the $GREEN$LOCK$FG$ asm prefix when changing shared structures in a multicore environment. The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() instructions have $GREEN$LOCK$FG$ prefixes. The compiler has a $GREEN$lock{}$FG$ feature but it doesn't work well. See $LK,"::/Demo/MultiCore/Lock.CPP"$. diff --git a/Doc/Mysteries.TXT b/Doc/Mysteries.TXT index df8f941..67c7c71 100644 --- a/Doc/Mysteries.TXT +++ b/Doc/Mysteries.TXT @@ -16,7 +16,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$ * The boot-loaders must be patched by you running $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() or $LK,"MasterBootIntall",A="MN:MasterBootIntall"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it. -* TempleOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. TempleOS calls $LK,"that",A="FI:::/Kernel/BIOS32.CPP"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking. +* TempleOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. TempleOS calls $LK,"that",A="FI:::/Kernel/PCIBIOS.CPP"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking. * $FG,2$PUSH EAX$FG$ : All stack operations in 64-bit mode are 64-bits. diff --git a/Doc/Print.TXT b/Doc/Print.TXT index 21e6abe..8d019f9 100644 --- a/Doc/Print.TXT +++ b/Doc/Print.TXT @@ -31,7 +31,7 @@ $FG,2$"%h*c",25,'\n';$FG$ 25 new-lines. $FG,2$"%F"$FG$ text file. -$FG,2$"%dv"$FG$ ptr. +$FG,2$"%p"$FG$ ptr. $FG,2$"%P"$FG$ link to ptr. diff --git a/Doc/RedSea.TXT b/Doc/RedSea.TXT index 408f10d..3dac1f6 100644 --- a/Doc/RedSea.TXT +++ b/Doc/RedSea.TXT @@ -6,14 +6,14 @@ $HL,1$#define CDIR_FILENAME_LEN 38 //Must include terminator zero The following bit field shows valid 8-Bit ASCII filename characters. -U32 chars_bitmap_filename[8]= +U32 chars_bmp_filename[8]= {0x0000000, 0x03FF73FB, 0xEFFFFFFF, 0x2FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}; public class CDirEntry //64-byte fixed-size { U16 attr; //See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$. I would like to change these. - U8 name[CDIR_FILENAME_LEN]; //See $LK,"chars_bitmap_filename",A="MN:chars_bitmap_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$ - I64 cluster; //One sector per cluster. I might change origin, let's talk. + U8 name[CDIR_FILENAME_LEN]; //See $LK,"chars_bmp_filename",A="MN:chars_bmp_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$ + I64 cluster; (blk) //One sector per cluster. I64 size; //In bytes CDate datetime; //See $LK,"DateTime",A="::/Doc/TimeDate.TXT"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/Date.CPP"$ }; @@ -24,7 +24,7 @@ public class CRedSeaBoot //RedSea is type FAT32 in partition table to fool BIOS. U8 signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32. I64 base_offset; //For CD/DVD image copy. I64 sects; - I64 root_cluster; + I64 root_cluster; (root_blk) I64 bitmap_sects; I64 unique_id; U8 code[462]; @@ -36,6 +36,6 @@ See $LK,"implementation of RedSea file system",A="::/Kernel/Dsk/FileSysRedSea.CP File with names ending in .Z are stored compressed. See $LK,"implementation of LZW compression",A="::/Kernel/Compress.CPP"$. -I hope to do a ISO9660 replacement that consists of a hard-drive partition image copied onto a CD/DVD starting at about sector 20 with EL TORITO booting. 512-byte sectors will be placed on top of 2048-byte CD/DCD sectors, so there will be four blocks per CD/DVD sector. +To replace ISO9660, make hard-drive partition image of a measured size and copy onto a CD/DVD starting at about sector 20, with EL TORITO booting. 512-byte sectors will be placed on top of 2048-byte CD/DCD sectors, so there will be four blocks per CD/DVD sector. -There is no bad block table and no redundant allocation table. +RedSea file system has no bad block table and no redundant allocation table. diff --git a/Doc/StdOutTask.TXT b/Doc/StdOutTask.TXT new file mode 100644 index 0000000..872897a --- /dev/null +++ b/Doc/StdOutTask.TXT @@ -0,0 +1 @@ +$WW,1$There is one $LK,"CDoc",A="MN:CDoc"$ for the task's border: $GREEN$Fs->border_doc$FG$. There is a pair for the task's client area: $GREEN$Fs->put_doc$FG$ and $GREEN$Fs->display_doc$FG$. You can, optionally, do double buffering, otherwise $GREEN$Fs->put_doc$FG$ is the same as $GREEN$Fs->display_doc$FG$. See $LK,"::/Demo/Spy.CPP"$. diff --git a/Doc/Streams.TXT b/Doc/Streams.TXT new file mode 100644 index 0000000..edb7b91 --- /dev/null +++ b/Doc/Streams.TXT @@ -0,0 +1,7 @@ +$WW,1$There are no streams in the traditional sense. The cmd line output gets sent to the cursor location of a document being edited and by using cursor keys, text can be injected all over the document. $LK,"Sprites",A="HI:Sprites"$ can be injected and are not serialized! Furthermore, the input can come from triggering macro widgets. See $LK,"Doc Overview",A="FI:::/Doc/DolDocOverview.TXT"$ and $LK,"Doc Routines",A="HI:DolDoc"$. + +If you had a remote term and sent key $LK,"Scan Codes",A="MN:SC_INS"$, the user would press $FG,2$$FG$ to access his $FG,2$Personal Menu$FG$ to trigger his macros. However, the local $LK,"::/Home/PersonalMenu.TXT"$ might differ from the remote, causing loss of sync between local and remote sessions. Also, the window size of local and remote might differ, so word-wrapped text would be different. Injecting output text with different windows sizes would cause remote and local documents to not be in sync. + +See $LK,"Char Overview",A="FI:::/Doc/CharOverview.TXT"$ and $LK,"Char Routines",A="HI:Char"$. + +You can send characters into $FG,2$StdIn$FG$. See $LK,"Auto",A="MN:Auto"$(), $LK,"XTalk",A="MN:XTalk"$() and $LK,"AutoFile",A="HI:AutoFile"$. diff --git a/Doc/TextBase.TXT b/Doc/TextBase.TXT index f75dae4..224f4c0 100644 --- a/Doc/TextBase.TXT +++ b/Doc/TextBase.TXT @@ -10,6 +10,6 @@ Bit 29 $LK,"Invert",A="MN:ATTRF_INVERT"$ed (Swap foreground and background) Bit 30 $LK,"Selected",A="MN:ATTRF_SELECTED"$ (XOR colors with FF) Bit 31 $LK,"Underline",A="MN:ATTRF_UNDERLINE"$ -$LK,"GrUpdateWins",A="MN:GrUpdateWins"$() calls $LK,"DocUpdateTaskDocs",A="MN:DocUpdateTaskDocs"$() which calls $LK,"DocRecalc",A="MN:DocRecalc"$() where the document text is plotted into $LK,"gr.text_base",A="MN:CGrGlbls"$. Then, $LK,"GrUpdateTextBG",A="MN:GrUpdateTextBG"$() and $LK,"GrUpdateTextFG",A="MN:GrUpdateTextFG"$() render the $LK,"gr.text_base",A="MN:CGrGlbls"$ onto $LK,"gr.dc2",A="MN:CGrGlbls"$, a raw graphic bitmap. +$LK,"GrUpdateTaskWin",A="MN:GrUpdateTaskWin"$() calls $LK,"DocUpdateTaskDocs",A="MN:DocUpdateTaskDocs"$() which calls $LK,"DocRecalc",A="MN:DocRecalc"$() where the document text is plotted into $LK,"gr.text_base",A="MN:CGrGlbls"$. Then, $LK,"GrUpdateTextBG",A="MN:GrUpdateTextBG"$() and $LK,"GrUpdateTextFG",A="MN:GrUpdateTextFG"$() render the $LK,"gr.text_base",A="MN:CGrGlbls"$ onto $LK,"gr.dc2",A="MN:CGrGlbls"$, a raw graphic bitmap. See $LK,"::/Demo/Games/Maze.CPP"$. diff --git a/Doc/Tips.TXT b/Doc/Tips.TXT index 614eec1..96c8a3b 100644 --- a/Doc/Tips.TXT +++ b/Doc/Tips.TXT @@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Tips"$$FG$ * Turn-off or reboot ($FG,2$$FG$) at any time, except during disk writes. Writes are not cached. -* Use $LK,"Seed",A="MN:Seed"$() and the cmd-line to switch $LK,"Rand",A="MN:Rand"$() to non-timer mode and replay games you like. +* Use $LK,"Seed",A="MN:Seed"$() and the cmd line to switch $LK,"Rand",A="MN:Rand"$() to non-timer mode and replay games you like. * 64-bit values are most efficient for the compiler. diff --git a/Doc/Transform.TXT b/Doc/Transform.TXT index 3912494..09e986e 100644 --- a/Doc/Transform.TXT +++ b/Doc/Transform.TXT @@ -2,12 +2,12 @@ $WW,1$$LK,"CDC",A="MN:CDC"$'s have a 4x4 matrix for rotating, scaling, skewing a The matrix consists of integers that have been scaled 32 bits ($LK,"GR_SCALE",A="MN:GR_SCALE"$). See $LK,"::/Demo/Lectures/FixedPoint.CPP"$ to learn why. -See $LK,"GrRotXNew",A="MN:GrRotXNew"$(), $LK,"GrRotYNew",A="MN:GrRotYNew"$(), $LK,"GrRotZNew",A="MN:GrRotZNew"$(), $LK,"GrScaleNew",A="MN:GrScaleNew"$(), $LK,"GrRotXEqu",A="MN:GrRotXEqu"$(), $LK,"GrRotYEqu",A="MN:GrRotYEqu"$(), $LK,"GrRotZEqu",A="MN:GrRotZEqu"$() and $LK,"GrScaleEqu",A="MN:GrScaleEqu"$() to rotate about axes and scale. Combine them with $LK,"GrMulMat",A="MN:GrMulMat"$() and assign them to the $LK,"CDC",A="MN:CDC"$.$FG,2$dc$FG$ with $LK,"GrSetRotMat",A="MN:GrSetRotMat"$(). See $LK,"::/Demo/Graphics/Box.CPP"$. +See $LK,"Mat4x4IdentEqu",A="MN:Mat4x4IdentEqu"$(), $LK,"Mat4x4IdentNew",A="MN:Mat4x4IdentNew"$(), $LK,"Mat4x4Equ",A="MN:Mat4x4Equ"$() and $LK,"Mat4x4New",A="MN:Mat4x4New"$(). See $LK,"Mat4x4RotX",A="MN:Mat4x4RotX"$(), $LK,"Mat4x4RotY",A="MN:Mat4x4RotY"$(), $LK,"Mat4x4RotZ",A="MN:Mat4x4RotZ"$() and $LK,"Mat4x4Scale",A="MN:Mat4x4Scale"$() to rotate about axes and scale. Combine them with $LK,"Mat4x4MulMat4x4Equ",A="MN:Mat4x4MulMat4x4Equ"$()/$LK,"Mat4x4MulMat4x4New",A="MN:Mat4x4MulMat4x4New"$() and assign them to the $LK,"CDC",A="MN:CDC"$.$FG,2$dc$FG$ with $LK,"DCMat4x4Set",A="MN:DCMat4x4Set"$(). See $LK,"::/Demo/Graphics/Box.CPP"$. -You can rotate single points using $LK,"GrRot",A="MN:GrRot"$(). +You can rotate single points using $LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$(). -The 4th dimension allows a neat trick where you can place pos shifts (translations), into the matrix and $LK,"GrMulMat",A="MN:GrMulMat"$ them to combine rotation/shift operations. Normally, you can't combine pos shift operations. See $LK,"GrSetTranslation",A="MN:GrSetTranslation"$() and $LK,"::/Demo/Graphics/Transform.CPP"$. +The 4th dimension allows a neat trick where you can place pos shifts (translations), into the matrix and $LK,"Mat4x4MulMat4x4Equ",A="MN:Mat4x4MulMat4x4Equ"$/$LK,"Mat4x4MulMat4x4New",A="MN:Mat4x4MulMat4x4New"$ them to combine rotation/shift operations. Normally, you can't combine pos shift operations. See $LK,"Mat4x4TranslationEqu",A="MN:Mat4x4TranslationEqu"$() and $LK,"::/Demo/Graphics/Transform.CPP"$. Finally, $LK,"CDC",A="MN:CDC"$'s have an $FG,2$x$FG$, $FG,2$y$FG$ and $FG,2$z$FG$ which is an additional shift (translation). -The transformation is implemented as a callback on the $LK,"CDC",A="MN:CDC"$'s $FG,2$transform()$FG$ member. The default $FG,2$transfrom()$FG$ callback is $LK,"GrTransform",A="MN:GrTransform"$(). See $LK,"::/Demo/Games/EagleDive.CPP"$ or $LK,"::/Demo/Games/CastleFrankenstein.CPP"$ to see how to change the $FG,2$transfrom()$FG$ callback for foreshortening. +The transformation is implemented as a callback on the $LK,"CDC",A="MN:CDC"$'s $FG,2$transform()$FG$ member. The default $FG,2$transform()$FG$ callback is $LK,"DCTransform",A="MN:DCTransform"$(). See $LK,"::/Demo/Games/EagleDive.CPP"$ or $LK,"::/Demo/Games/CastleFrankenstein.CPP"$ to see how to change the $FG,2$transform()$FG$ callback for foreshortening. diff --git a/Doc/Welcome.TXT b/Doc/Welcome.TXT index f63fbe5..057b795 100644 --- a/Doc/Welcome.TXT +++ b/Doc/Welcome.TXT @@ -7,7 +7,7 @@ $ID,2$* Professionals doing hobby projects * Teenagers doing projects * Non-professional, older-persons projects $ID,-2$ -Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"120,471",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program! +Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"122,766",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program! It's a kayak, not a Titanic -- it will crash if you do something wrong. You quickly reboot, however. DOS and the 8-bit home computers of the 80's worked fine without memory protection and most computers in the world -- the embedded ones -- operate without protection. The resulting simplicity of no protections is why TempleOS has value. In facts, that's the point of TempleOS. See the $LK,"TempleOS Charter",A="FI:::/Doc/Charter.TXT"$. @@ -15,7 +15,9 @@ Conventional thinking is "failure is not an option" for general purpose operatin Two things to know about TempleOS are that $UL,1$tasks$UL,0$ have $LK,"MAlloc",A="MN:MAlloc"$/$LK,"Free",A="MN:Free"$ heap memory, not applications, and tasks have compiler symbol tables that persist at a scope like environment variables in other operating systems, and the symbols can include functions. -In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it. During the boot process, many files get $LK,"compiled",A="FI:::/Adam.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$. +In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it. See $LK,"::/Doc/HelloWorld.TXT.Z"$. + +During the boot process, many files get $LK,"compiled",A="FI:::/Adam.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$. Statements at the global scope -- outside the scope of functions -- execute immediately. There is no $FG,2$main()$FG$ function. Instead, you give meaningful names to what would be $FG,2$main()$FG$ functions and you invoke them by calling them with a statement in the global scope, usually at the bottom of your file. @@ -84,5 +86,6 @@ Use the $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$ or $LK,"Demo Index",A="F $MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$ $FG,8$ +* "Linux" is probably a trademark owned by Linus Torvalds. * "Windows" is a trademark of MicroSoft Corp. $FG$ \ No newline at end of file diff --git a/Doc/Widget.TXT b/Doc/Widget.TXT index d671569..83bfe18 100644 --- a/Doc/Widget.TXT +++ b/Doc/Widget.TXT @@ -1,6 +1,6 @@ $WW,1$$FG,5$$TX+CX,"DolDoc Widget Help"$$FG$ -$LK,"DolDoc",A="::/Doc/DolDocOverview.TXT"$ is a propriatary TempleOS document type. +$LK,"DolDoc",A="::/Doc/DolDocOverview.TXT"$ is a TempleOS document type. $FG,2$"Expression"$FG$ a num or HolyC algebraic term with operators and HolyC syms can be entered. $FG,2$"Macro"$FG$ Most entries can behave like macro entries if you assign them macro strs. @@ -33,7 +33,7 @@ $FG,5$Quote$FG$ Make the result suitable for including in a program, in quotes, $FG,5$X Expression$FG$ For cursor movements, the horizontal value. $FG,5$Y Expression$FG$ For cursor movements, the vertical value. -$FG,5$$BK,1$PopUp$BK,0$$FG$ For macro's, run the macro in a PopUp window. Do this when making a macro to run a program, so it doesn't tie-up memory. +$FG,5$PopUp$FG$ For macro's, run the macro in a PopUp window. Do this when making a macro to run a program, so it doesn't tie-up memory. $FG,5$Escape$FG$ For macro's, send an $FG,2$$FG$ char to exit before running the macro. Without this, the macro runs in the wrong window, usually. diff --git a/Kernel.BIN.C b/Kernel.BIN.C deleted file mode 100644 index 280a565..0000000 Binary files a/Kernel.BIN.C and /dev/null differ diff --git a/Kernel/Compress.CPP b/Kernel/Compress.CPP index dc78e3e..7cee1b7 100644 --- a/Kernel/Compress.CPP +++ b/Kernel/Compress.CPP @@ -2,9 +2,8 @@ //See $LK,"CArcCompress",A="MN:CArcCompress"$, $LK,"CArcEntry",A="MN:CArcEntry"$, and $LK,"CArcCtrl",A="MN:CArcCtrl"$ asm { -USE64 /**** -U0 ArcGetEntry(CArcCtrl *c) +U0 ArcEntryGet(CArcCtrl *c) { I64 i; CArcEntry *temp,*temp1; @@ -23,7 +22,7 @@ U0 ArcGetEntry(CArcCtrl *c) } } else { do if (++i==c->free_limit) - i=c->min_table_entry; + i=c->min_table_entry; while (c->hash[i]); temp=&c->compress[i]; c->next_entry=temp; @@ -40,7 +39,7 @@ U0 ArcGetEntry(CArcCtrl *c) } } ****/ -_ARC_GET_ENTRY:: +_ARC_ENTRY_GET:: PUSH RBP MOV RBP,RSP PUSH RSI @@ -98,7 +97,7 @@ _ARC_GET_ENTRY:: RET1 8 } -_extern _ARC_GET_ENTRY U0 ArcGetEntry(CArcCtrl *c); +_extern _ARC_ENTRY_GET U0 ArcEntryGet(CArcCtrl *c); I64 ArcDetermineCompressionType(U8 *src,I64 size) { @@ -123,7 +122,7 @@ U0 ArcCompressBuf(CArcCtrl *c) basecode=c->saved_basecode; while (src_ptrdst_pos+c->cur_bits_in_use<=c->dst_size) { - ArcGetEntry(c); + ArcEntryGet(c); ac_start: if (src_ptr>=src_limit) goto ac_done; ch=*src_ptr++; @@ -178,16 +177,16 @@ U0 ArcExpandBuf(CArcCtrl *c) if (c->stk_ptr==c->stk_base && dst_ptrsaved_basecode==MAX_U32) { lastcode=BFieldExtU32(c->src_buf,c->src_pos, - c->next_bits_in_use); + c->next_bits_in_use); c->src_pos+=c->next_bits_in_use; *dst_ptr++=lastcode; - ArcGetEntry(c); + ArcEntryGet(c); c->last_ch=lastcode; } else lastcode=c->saved_basecode; while (dst_ptrsrc_pos+c->next_bits_in_use<=c->src_size) { basecode=BFieldExtU32(c->src_buf,c->src_pos, - c->next_bits_in_use); + c->next_bits_in_use); c->src_pos+=c->next_bits_in_use; if (c->cur_entry==&c->compress[basecode]) { *c->stk_ptr++=c->last_ch; @@ -209,7 +208,7 @@ U0 ArcExpandBuf(CArcCtrl *c) temp->next=temp1->next; temp1->next=temp; - ArcGetEntry(c); + ArcEntryGet(c); while (dst_ptrstk_ptr!=c->stk_base) *dst_ptr++ = * -- c->stk_ptr; lastcode=basecode; @@ -237,7 +236,7 @@ CArcCtrl *ArcCtrlNew(Bool expand,I64 compression_type=CT_8_BIT) c->free_limit=1<next_bits_in_use; c->saved_basecode=MAX_U32; c->entry_used=TRUE; - ArcGetEntry(c); + ArcEntryGet(c); c->entry_used=TRUE; return c; } @@ -248,36 +247,40 @@ U0 ArcCtrlDel(CArcCtrl *c) Free(c); } -U8 *ExpandBuf(CArcCompress *r,CTask *mem_task=NULL) +U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL) {//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$. CArcCtrl *c; - U8 *result=MAlloc(r->expanded_size+1,mem_task); - result[r->expanded_size]=0; //terminate - switch (r->compression_type) { + U8 *result; + + if (!(CT_NONE<=arc->compression_type<=CT_8_BIT) || + arc->expanded_size>MEM_MAPPED_SPACE) + throw('Compress'); + + result=MAlloc(arc->expanded_size+1,mem_task); + result[arc->expanded_size]=0; //terminate + nobound_switch (arc->compression_type) { case CT_NONE: - MemCpy(result,&r->body,r->expanded_size); + MemCpy(result,&arc->body,arc->expanded_size); break; case CT_7_BIT: case CT_8_BIT: - c=ArcCtrlNew(TRUE,r->compression_type); - c->src_size=r->compressed_size<<3; + c=ArcCtrlNew(TRUE,arc->compression_type); + c->src_size=arc->compressed_size<<3; c->src_pos=sizeof(CArcCompress)<<3; - c->src_buf=r; - c->dst_size=r->expanded_size; + c->src_buf=arc; + c->dst_size=arc->expanded_size; c->dst_buf=result; c->dst_pos=0; ArcExpandBuf(c); ArcCtrlDel(c); break; - default: - throw('Compress'); } return result; } CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL) {//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$. - CArcCompress *result; + CArcCompress *arc; I64 size_out,compression_type=ArcDetermineCompressionType(src,size); CArcCtrl *c=ArcCtrlNew(FALSE,compression_type); c->src_size=size; @@ -288,18 +291,18 @@ CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL) ArcCompressBuf(c); if (ArcFinishCompression(c) && c->src_pos==c->src_size) { size_out=(c->dst_pos+7)>>3; - result=MAlloc(size_out,mem_task); - MemCpy(result,c->dst_buf,size_out); - result->compression_type=compression_type; - result->compressed_size=size_out; + arc=MAlloc(size_out,mem_task); + MemCpy(arc,c->dst_buf,size_out); + arc->compression_type=compression_type; + arc->compressed_size=size_out; } else { - result=MAlloc(size+sizeof(CArcCompress),mem_task); - MemCpy(&result->body,src,size); - result->compression_type=CT_NONE; - result->compressed_size=size+sizeof(CArcCompress); + arc=MAlloc(size+sizeof(CArcCompress),mem_task); + MemCpy(&arc->body,src,size); + arc->compression_type=CT_NONE; + arc->compressed_size=size+sizeof(CArcCompress); } - result->expanded_size=size; + arc->expanded_size=size; Free(c->dst_buf); ArcCtrlDel(c); - return result; + return arc; } diff --git a/Kernel/Date.CPP b/Kernel/Date.CPP index 311acf0..2376e1d 100644 --- a/Kernel/Date.CPP +++ b/Kernel/Date.CPP @@ -18,11 +18,12 @@ CDate Struct2Date(CDateStruct *_ds) i1=YearStartDate(_ds->year); i2=YearStartDate(_ds->year+1); if (i2-i1==365) - i1+=mon_start_days1[_ds->mon-1]; - else - i1+=mon_start_days2[_ds->mon-1]; + i1+=mon_start_days1[_ds->mon-1]; + else + i1+=mon_start_days2[_ds->mon-1]; cdt.date=i1+_ds->day_of_mon-1; - cdt.time=(_ds->sec10000+100*(_ds->sec100+100*(_ds->sec+60*(_ds->min+60*_ds->hour))))<<21/(15*15*3*625); + cdt.time=(_ds->sec10000+100*(_ds->sec100+100*(_ds->sec + +60*(_ds->min+60*_ds->hour))))<<21/(15*15*3*625); return cdt; } diff --git a/Kernel/Display.CPP b/Kernel/Display.CPP index a9f9e86..ddc5de9 100644 --- a/Kernel/Display.CPP +++ b/Kernel/Display.CPP @@ -6,7 +6,7 @@ the normal screen text output routine. See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$(). */ - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; I64 i,row,col; U8 *ptr,*ptr1,*ptr2; @@ -44,13 +44,13 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$(). while (text.raw_col % text.cols) RawPutChar(CH_SPACE); - } else if (Bt(chars_bitmap_displayable,ch)) { + } else if (Bt(chars_bmp_displayable,ch)) { row=text.raw_col/text.cols%text.rows; col=text.raw_col%text.cols; if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) { MemCpy(VGAM_TEXT,VGAM_TEXT+text.cols, - text.cols*(text.rows-1)*2); + text.cols*(text.rows-1)*2); MemSet(VGAM_TEXT+text.cols*(text.rows-1)*2,0,text.cols*2); text.raw_col-=text.cols; row=text.rows-1; @@ -62,10 +62,12 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$(). OutU8(VGAP_INDEX,VGAR_MAP_MASK); OutU8(VGAP_DATA,0x0F); //All planes -- WHITE if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) { - //Scroll cached image - MemCpy(text.raw_screen_image,text.raw_screen_image+GR_WIDTH*FONT_HEIGHT>>3, - GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3); - MemSet(text.raw_screen_image+GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3,0,GR_WIDTH*FONT_HEIGHT>>3); +//Scroll cached image + MemCpy(text.raw_screen_image, + text.raw_screen_image+GR_WIDTH*FONT_HEIGHT>>3, + GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3); + MemSet(text.raw_screen_image+GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3,0, + GR_WIDTH*FONT_HEIGHT>>3); MemCpy(VGAM_GRAPHICS,text.raw_screen_image,GR_WIDTH*GR_HEIGHT>>3); text.raw_col-=text.cols; @@ -98,13 +100,13 @@ U0 WinDerivedValsUpdate(CTask *task=NULL) {//Those things calculated from other variables. if (!task) task=Fs; -//Assert: This is called with TASKLf_TASK_LOCK set + //Assert: This is called with TASKLf_TASK_LOCK set PUSHFD CLI task->win_width =task->win_right-task->win_left+1; task->win_height=task->win_bottom-task->win_top+1; -//Inside the Border + //Inside the Border task->pix_left =FONT_WIDTH*task->win_left; task->pix_right =FONT_WIDTH*(task->win_right+1)-1; task->pix_width =task->pix_right-task->pix_left+1; @@ -112,7 +114,7 @@ U0 WinDerivedValsUpdate(CTask *task=NULL) task->pix_bottom =FONT_HEIGHT*(task->win_bottom+1)-1; task->pix_height =task->pix_bottom-task->pix_top+1; -//Outside the border + //Outside the border if (Bt(&task->display_flags,DISPLAYf_NO_BORDER)) { task->border_pix_left =task->pix_left; task->border_pix_right =task->pix_right; diff --git a/Kernel/Dsk/Dsk.CPP b/Kernel/Dsk/Dsk.CPP new file mode 100644 index 0000000..d87a908 --- /dev/null +++ b/Kernel/Dsk/Dsk.CPP @@ -0,0 +1,22 @@ +#include "DskStrA" +#include "DskCache" +#include "DskATA" +#include "DskATAId" +#include "DskBlkDev" +#include "DskDrv" +#include "DskBlk" +#include "DskCluster" +#include "DskStrB" +#include "DskAddDev" +#include "DskDirA" +#include "FileSysISO" +#include "FileSysRedSea" +#include "FileSysFAT" +#include "DskDirContext" +#include "DskFind" +#include "DskDirB" +#include "DskFile" +#include "DskCFile" +#include "DskCopy" +#include "DskCDDVD" +#include "DskFmt" diff --git a/Kernel/Dsk/DskA.CPP b/Kernel/Dsk/DskA.CPP deleted file mode 100644 index 6dce1e7..0000000 --- a/Kernel/Dsk/DskA.CPP +++ /dev/null @@ -1,731 +0,0 @@ -Bool BlkDevLock(CBlkDev *bd) -{//Make this task have exclusive access to BlkDev. - BlkDevChk(bd); - while (bd->lock_fwding) - bd=bd->lock_fwding; //If two blkdevs on same controller, use just one lock - if (!Bt(&bd->locked_flags,BDlf_LOCKED) || bd->owning_task!=Fs) { - while (LBts(&bd->locked_flags,BDlf_LOCKED)) - Yield; - bd->owning_task=Fs; - return TRUE; - } else - return FALSE; -} - -Bool DrvLock(CDrv *dv) -{//Make this task have exclusive access to drv & BlkDev. - DrvChk(dv); - BlkDevLock(dv->bd); - if (!Bt(&dv->locked_flags,DVlf_LOCKED) || dv->owning_task!=Fs) { - while (LBts(&dv->locked_flags,DVlf_LOCKED)) - Yield; - dv->owning_task=Fs; - return TRUE; - } else - return FALSE; -} - -Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE) -{//Release exclusive lock on access to BlkDev. - BlkDevChk(bd); - while (bd->lock_fwding) - bd=bd->lock_fwding; //If two blkdevs on same controller, use just one lock - if (Bt(&bd->locked_flags,BDlf_LOCKED) && bd->owning_task==Fs) { - if (rst) - bd->flags&=~(BDF_INITIALIZED|BDF_INIT_IN_PROGRESS); - bd->owning_task=NULL; - LBtr(&bd->locked_flags,BDlf_LOCKED); - Yield; //Prevent deadlock - return TRUE; - } else - return FALSE; -} - -Bool DrvUnlock(CDrv *dv,Bool rst=FALSE) -{//Release exclusive lock on access to drv & BlkDev. - DrvChk(dv); - if (Bt(&dv->locked_flags,DVlf_LOCKED) && dv->owning_task==Fs) { - BlkDevUnlock(dv->bd,rst); - dv->owning_task=NULL; - LBtr(&dv->locked_flags,DVlf_LOCKED); - Yield; //Prevent deadlock - return TRUE; - } else - return FALSE; -} - -Bool BlkDevInit(CBlkDev *bd) -{ - CDrv *dv=Let2Drv(bd->first_drv_let); - Bool old_preempt=Preempt(OFF),result=FALSE; - - if (!LBts(&bd->flags,BDf_INITIALIZED)) { - bd->flags|=BDF_INIT_IN_PROGRESS; - switch(bd->type) { - case BDT_RAM: - if (!bd->RAM_dsk) { - bd->RAM_dsk=AMAlloc((bd->max_blk+1)<max_blk=MSize(bd->RAM_dsk)>>BLK_SIZE_BITS-1; - } - dv->type=DVT_REDSEA; - dv->size=bd->max_blk+1; - if (RedSeaDrvValidate(bd->first_drv_let)) - RedSeaDrvInit(dv); - else - RedSeaFmt(bd->first_drv_let); - result=TRUE; - break; - case BDT_ATA: - bd->max_reads=128; - bd->max_writes=1; - result=ATAInit(bd); - break; - case BDT_ATAPI: - //0xFFFF*4 is too big for my taste - bd->max_reads=0x800*4; - //max of maybe a quarter of disk cache - if (bd->max_reads>dsk.cache_size/BLK_SIZE/4) - bd->max_reads=dsk.cache_size/BLK_SIZE/4 & ~3; - if (bd->max_reads<128) - bd->max_reads=128; - bd->max_writes=0xFFFF*4; - if (result=ATAInit(bd)) - dv->size=bd->max_blk+1; - break; - } - if (result && bd->flags & BDF_READ_CACHE) - DskCacheInvalidate(dv); - bd->flags&=~BDF_INIT_IN_PROGRESS; - } else - result=TRUE; - Preempt(old_preempt); - return result; -} - -U0 BlkDevsRelease() -{//When task dies, release all owned BlkDevs. - I64 i; - CBlkDev *bd; - for (i=0;iowning_task==Fs && bd->bd_signature==BD_SIGNATURE_VAL) - BlkDevUnlock(bd,TRUE); - } -} - -U0 DrvsRelease() -{//When task dies, release all owned drvs. - I64 i; - CDrv *dv; - for (i=0;iowning_task==Fs && dv->dv_signature==DRV_SIGNATURE_VAL) - DrvUnlock(dv,TRUE); - } -} - -CDrv *DrvMakeFree(U8 drv_let) -{//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$(). -//!!! drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv. - I64 i=ToUpper(drv_let)-'A'; - CDrv *result; - if (!(0<=idrv_let='A'+i; - return result; -} - -CDrv *DrvNextFree(U8 first_drv_let='C') -{//Locate free slot for new drv, like during $LK,"Mount",A="MN:Mount"$(). -//!!! first_drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv. - I64 i=ToUpper(first_drv_let)-'A'; - if (!(0<=ibd_signature!=BD_SIGNATURE_VAL) { - MemSet(result,0,sizeof(CBlkDev)); - result->first_drv_let=first_drv_let; - result->type=type; - if (type==BDT_ATAPI) - result->flags=BDF_REMOVABLE; - else - result->flags=0; - if (type!=BDT_RAM) - result->flags|=BDF_READ_CACHE; - - if (type==BDT_ATAPI) { - result->blk_size=CD_BLK_SIZE; - result->flags|=BDF_READ_ONLY; - } else - result->blk_size=BLK_SIZE; - - result->max_blk=0xEFFFFFFF; - return result; - } - } while (++icur_map_blk); - dv->cur_map_blk=AMAlloc(BLK_SIZE); - dv->cur_map_blk_num=0; - dv->map_blk_dirty=0; - RBlks(dv,dv->cur_map_blk,dv->map1,1); -} - -U0 DrvMapBlkClean(CDrv *dv,I64 map_select=3) -{ - if (dv->type==DVT_FAT32 || dv->type==DVT_REDSEA) { - if ((map_select==3 || !map_select) && dv->map1!=dv->map2 && - Bt(&dv->map_blk_dirty,0)) - WBlks(dv,dv->cur_map_blk(I64),dv->map1+dv->cur_map_blk_num,1); - if (map_select==3 || map_select==1 || dv->map1==dv->map2 && - LBtr(&dv->map_blk_dirty,0)) - WBlks(dv,dv->cur_map_blk(I64),dv->map2+dv->cur_map_blk_num,1); - } -} - -U0 DrvMapBlkSet(CDrv *dv,I64 c,I64 map_select=3) -{ - I64 map_blk_num; - if (c==INVALID_CLUSTER) - throw('Drv'); - switch (dv->type) { - case DVT_FAT32: - map_blk_num=c>>(BLK_SIZE_BITS-2); - break; - case DVT_REDSEA: - map_blk_num=(c-dv->data_area)>>(BLK_SIZE_BITS+3); - break; - default: - throw('Drv'); - } - if (map_blk_num!=dv->cur_map_blk_num) { - DrvMapBlkClean(dv,map_select); - dv->cur_map_blk_num=map_blk_num; - if (map_select==3 || !map_select) - RBlks(dv,dv->cur_map_blk,dv->map1+dv->cur_map_blk_num,1); - else - RBlks(dv,dv->cur_map_blk,dv->map2+dv->cur_map_blk_num,1); - } -} - -#define ZERO_BUF_SIZE 2048 -U0 WZeroBlks(CDrv *dv,I64 blk,I64 cnt) -{//Fill blk cnt with zeros in Drv. - I64 n; - U8 *z=CAlloc(ZERO_BUF_SIZE<ZERO_BUF_SIZE && dv->bd->type!=BDT_RAM) { - progress1=0; progress1_max=cnt; - StrCpy(progress1_desc,"Zeroing"); - show_progress=TRUE; - } else - show_progress=FALSE; - while (cnt>0) { - n=cnt; - if (n>ZERO_BUF_SIZE) - n=ZERO_BUF_SIZE; - WBlks(dv,z,blk,n); - blk+=n; - cnt-=n; - if (show_progress) - progress1+=n; - Yield; //Prevent locking - } - Free(z); - if (show_progress) { - *progress1_desc=0; - progress1=progress1_max=0; - } -} - -Bool DrvTypeSet(U8 drv_let,I64 type=DVT_REDSEA) -{//Very dangerous - I64 i,j,ext_base,drv_num,offset,cur_type; - CMasterBoot mbr; - CBlkDev *bd=Let2BlkDev(drv_let); - drv_num=bd->first_drv_let-'A'; - switch (bd->type) { - case BDT_ATA: - offset=0; - ext_base=INVALID_CLUSTER; - while (TRUE) { - ATAReadBlks(bd,&mbr,offset,1); - j=-1; - for (i=0;i<4;i++) { - cur_type=mbr.p[i].type; - if (cur_type) { - if (cur_type==5 || cur_type==15) - j=i; - else { - if (drv_num+'A'==ToUpper(drv_let)) { - switch (type) { - case DVT_REDSEA: - mbr.p[i].type=MBR_PT_REDSEA; - break; - case DVT_FAT32: - mbr.p[i].type=MBR_PT_FAT32a; - break; - default: - throw('Drv'); - } - mbr.p[i].active=0x80; - ATAWriteBlks(bd,&mbr,offset,1); - return TRUE; - } - drv_num++; - } - } - } - if (j<0) - break; - if (!mbr.p[j].offset) - break; - if (ext_base==INVALID_CLUSTER) { - offset=mbr.p[j].offset; - ext_base=offset; - } else - offset=mbr.p[j].offset+ext_base; - } - break; - } -} - -Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) -{//Read blk cnt from Drv to buf. - Bool result=TRUE,unlock; - CBlkDev *bd=dv->bd; - if (cnt<=0) return TRUE; - DrvChk(dv); - try { - unlock=DrvLock(dv); - BlkDevInit(bd); - if (dv->base_offset && blkbase_offset || blk+cnt>dv->base_offset+dv->size) - throw('Drv'); - - if (bd->flags & BDF_READ_CACHE) - RCache(dv,&buf,&blk,&cnt); - if (cnt>0) { - switch (bd->type) { - case BDT_RAM: - MemCpy(buf,bd->RAM_dsk+blk<last_time=tS; - if (bd->flags & BDF_READ_CACHE) - DskCacheAdd(dv,buf,blk,cnt); - } - if (unlock) - DrvUnlock(dv); - } catch - if (unlock) - DrvUnlock(dv); - return result; -} - -Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) -{//Write blk cnt from buf to Drv. - Bool result=TRUE,unlock; - CBlkDev *bd=dv->bd; - if (cnt<=0) return TRUE; - DrvChk(dv); - try { - unlock=DrvLock(dv); - BlkDevInit(bd); - if (bd->flags&BDF_READ_ONLY && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) - throw('BlkDev'); - if (dv->base_offset && blkbase_offset || blk+cnt>dv->base_offset+dv->size) - throw('Drv'); - if (cnt>0) { - switch (bd->type) { - case BDT_RAM: - MemCpy(bd->RAM_dsk+blk<last_time=tS; - if (bd->flags & BDF_READ_CACHE) - DskCacheAdd(dv,buf,blk,cnt); - } - if (unlock) - DrvUnlock(dv); - } catch - if (unlock) - DrvUnlock(dv); - return result; -} - -U0 DskCacheInvalidate(CDrv *dv) -{//Needed for removable media. Called by $LK,"ChgDsk",A="MN:ChgDsk"$(). - Bool unlock; - CBlkDev *bd=dv->bd; - DrvChk(dv); - try { - unlock=DrvLock(dv); - BlkDevInit(bd); - if (bd->flags & BDF_READ_CACHE) - DskCacheInvalidate2(dv); - if (dv->type==DVT_ISO9660 && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) - ISODrvInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); - if (unlock) - DrvUnlock(dv); - } catch - if (unlock) - DrvUnlock(dv); -} - -U0 ChgDsk(U8 drv_let=0) -{//Change disk. (Needed for removable media.) - CDrv *dv=Let2Drv(drv_let); - CBlkDev *bd=dv->bd; - Bool old_preempt=Preempt(OFF); - if (!(bd->flags&BDF_INITIALIZED)) - BlkDevInit(bd); - else if (bd->flags&BDF_REMOVABLE) - DskCacheInvalidate(dv); - Drv(drv_let); - RedSeaFreeFreeLst(dv); - Preempt(old_preempt); -} - -U8 *DrvSerialNum(U8 drv_let=0) -{//20 bytes max. - CBlkDev *bd=Let2BlkDev(drv_let); - U16 *st,*result=NULL; - I64 i; - if (bd->dev_id_record) { - st=CAlloc(20+1); - for (i=0;i<10;i++) - st[i]=EndianU16(bd->dev_id_record[10+i]); - result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); - Free(st); - } - return result; -} - -U8 *DrvModelNum(U8 drv_let=0) -{//40 bytes max. - CBlkDev *bd=Let2BlkDev(drv_let); - U16 *st,*result=NULL; - I64 i; - if (bd->dev_id_record) { - st=CAlloc(40+1); - for (i=0;i<20;i++) - st[i]=EndianU16(bd->dev_id_record[27+i]); - result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); - Free(st); - } - return result; -} - -U0 DrvRep() -{//Drive report. - CDrv *dv; - CBlkDev *bd; - I64 i,drv_let; - U8 *st; - "\nDefined Drives:\n\n"; - for (i=0,dv=dsk.drvs;idv_signature==DRV_SIGNATURE_VAL) { - bd=dv->bd; - drv_let=Drv2Let(dv); - if (Bt(&dv->type,DVTf_DISABLE)) - "$$RED$$X"; - else if (drv_let==dsk.boot_drv_let) - "$$GREEN$$:"; - else - '' CH_SPACE; - "$$PURPLE$$%C %-8Z %-9Z %04X %04X %02X$$FG$$\n", - drv_let,dv->type.u16[0],"ST_DRV_TYPES", - bd->type,"ST_BLKDEV_TYPES",bd->base0,bd->base1,bd->unit; - if (st=DrvModelNum(drv_let)) { - " $$CYAN$$Model# :%s$$FG$$\n",st; - Free(st); - } - if (st=DrvSerialNum(drv_let)) { - " $$CYAN$$Serial#:%s$$FG$$\n",st; - Free(st); - } - " %016X-%016X\n", - dv->base_offset,dv->base_offset+dv->size-1; - dv->base_offset,dv->base_offset+dv->size-1; - } - } -} - -I64 ClusterNumNext(CDrv *dv,I64 c,I64 cnt=1) -{//Return next cnt'th cluster in chain. - Bool unlock; - DrvChk(dv); - if (cnt<=0) return c; - try { - unlock=DrvLock(dv); - switch (dv->type) { - case DVT_ISO9660: - case DVT_REDSEA: - c+=cnt; - break; - case DVT_FAT32: - while (cnt-->0 && 0cur_map_blk[c & (BLK_SIZE/4-1)]; - } - if (!(0type) { - case DVT_REDSEA: - return c; - case DVT_ISO9660: - case DVT_FAT32: - return dv->data_area+c*dv->spc; - default: - throw('Drv'); - } -} - -I64 RClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks) -{//Accepts blk count, so padding on last cluster is not read. - I64 i; - Bool unlock; - DrvChk(dv); - if (blks<=0) return c; - try { - unlock=DrvLock(dv); - switch (dv->type) { - case DVT_ISO9660: - RBlks(dv,buf,dv->data_area+c*dv->spc,blks); - c+=(blks+dv->spc-1)/dv->spc; - break; - case DVT_REDSEA: - RBlks(dv,buf,c,blks); - c+=blks; - break; - case DVT_FAT32: - while (blks && 0dv->spc) - i=dv->spc; - RBlks(dv,buf,dv->data_area+c*dv->spc,i); - buf+=i<spc); -} - -Bool CFileNameTo(U8 *dst,U8 *src) -{ - MemSet(dst,0,CDIR_FILENAME_LEN); - if (!FileNameChk(src)) - return FALSE; - StrCpy(dst,src); - return TRUE; -} - -I64 Name2DirCluster(CDrv *dv,U8 *dirname) -{ - Bool cont=TRUE,unlock; - I64 cur_dir_cluster; - CDirEntry de; - U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); - DrvChk(dv); - try { - unlock=DrvLock(dv); - cur_dir_cluster=dv->root_cluster; - while (*buf && cont) { - StrFirstRem(buf,"/",buf2); - if (*buf2) { - switch (dv->type) { - case DVT_REDSEA: - cont=RedSeaFileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case DVT_FAT32: - cont=FAT32FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case DVT_ISO9660: - cont=ISO1FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - default: - throw('Drv'); - } - cur_dir_cluster=de.cluster; - } - } - if (!cont) { - "%s ",dirname; - PrintErr("File not found.\n"); - cur_dir_cluster=0; - } - if (unlock) - DrvUnlock(dv); - } catch - if (unlock) - DrvUnlock(dv); - Free(buf); - Free(buf2); - return cur_dir_cluster; -} - -I64 Name2ParentDirCluster(CDrv *dv,U8 *dirname) -{ - Bool cont=TRUE,unlock; - I64 cur_dir_cluster,cur_dir_cluster2; - CDirEntry de; - U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); - DrvChk(dv); - try { - unlock=DrvLock(dv); - cur_dir_cluster=cur_dir_cluster2=dv->root_cluster; - while (*buf && cont) { - cur_dir_cluster2=cur_dir_cluster; - StrFirstRem(buf,"/",buf2); - if (*buf2) { - switch (dv->type) { - case DVT_REDSEA: - cont=RedSeaFileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case DVT_FAT32: - cont=FAT32FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - case DVT_ISO9660: - cont=ISO1FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); - break; - default: - throw('Drv'); - } - cur_dir_cluster=de.cluster; - } - } - if (!cont) { - "%s ",dirname; - PrintErr("File not found.\n"); - cur_dir_cluster2=0; - } - if (unlock) - DrvUnlock(dv); - } catch - if (unlock) - DrvUnlock(dv); - Free(buf); - Free(buf2); - return cur_dir_cluster2; -} - -I64 WClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks) -{//Accepts blk count, so padding on last cluster is not written. - I64 i; - Bool unlock; - DrvChk(dv); - if (blks<=0) return c; - try { - unlock=DrvLock(dv); - switch (dv->type) { - case DVT_REDSEA: - WBlks(dv,buf,c,blks); - c=0; - break; - case DVT_FAT32: - while (blks) { - if (!(0dv->spc) - i=dv->spc; - WBlks(dv,buf,dv->data_area+c*dv->spc,i); - buf+=i<spc); -} - -I64 ClustersAlloc(CDrv *dv,I64 c=0,I64 cnt=1,Bool contiguous=FALSE) -{//Alloc cluster cnt into chain. -//c=0 means first cluster in chain - DrvChk(dv); - if (cnt<=0) return c; - switch (dv->type) { - case DVT_REDSEA: - return RedSeaAllocClusters(dv,cnt); - case DVT_FAT32: - if (contiguous) { - if (c) throw('File'); - return FAT32AllocContiguousClusters(dv,cnt); - } else - return FAT32AllocClusters(dv,c,cnt); - default: - throw('Drv'); - } -} diff --git a/Kernel/Dsk/DskATA.CPP b/Kernel/Dsk/DskATA.CPP index e86a2ca..59decb6 100644 --- a/Kernel/Dsk/DskATA.CPP +++ b/Kernel/Dsk/DskATA.CPP @@ -64,7 +64,8 @@ U0 ATACmd(CBlkDev *bd,U8 cmd) PortNop; } -Bool ATAGetResult(CBlkDev *bd,F64 timeout,U8 *buf,I64 cnt,I64 _avail,Bool one_read) +Bool ATAGetResult(CBlkDev *bd,F64 timeout,U8 *buf,I64 cnt, + I64 _avail,Bool one_read) { I64 avail,overflow; bd->flags&=~BDF_LAST_WAS_WRITE; @@ -152,7 +153,7 @@ Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start) else OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4); ATACmd(bd,ATA_PACKET); - //Start/Stop +//Start/Stop if (ATAPIWritePktWord(bd,timeout,0x1B00,0,i,0,0,0)) return ATAWaitNotBUSY(bd,timeout); else @@ -227,7 +228,7 @@ I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) result.u8[3]=InU8(bd->base0+ATAR0_SECT); result.u8[4]=InU8(bd->base0+ATAR0_LCYL); result.u8[5]=InU8(bd->base0+ATAR0_HCYL); - + if (result>>24==result&0xFFFFFF) {//Kludge to make qemu-kvm work bd->flags&=~BDF_EXT_SIZE; result&=0xFFFFFF; @@ -286,7 +287,7 @@ CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bd,I64 blk) OutU8(bd->base0+ATAR0_HCYL,sizeof(CATAPITrack)>>8); ATACmd(bd,ATA_PACKET); ATAPIWritePktWord(bd,0,0x5200,blk.u16[1],blk.u16[0], - (sizeof(CATAPITrack)&0xFF00)>>8,(sizeof(CATAPITrack)&0x00FF)<<8,0); + (sizeof(CATAPITrack)&0xFF00)>>8,(sizeof(CATAPITrack)&0x00FF)<<8,0); if (!ATAGetResult(bd,0,result,sizeof(CATAPITrack),0,TRUE)) { Free(result); result=NULL; @@ -334,12 +335,12 @@ Bool ATAPIWaitReady(CBlkDev *bd,F64 timeout) { do { if (!ATAWaitNotBUSY(bd,timeout) || - !ATANop(bd,timeout) || - !ATAPIStartStop(bd,timeout,TRUE)) + !ATANop(bd,timeout) || + !ATAPIStartStop(bd,timeout,TRUE)) return FALSE; if (InU8(bd->base0+ATAR0_STAT) & ATAS_DRDY && - !InU8(bd->base0+ATAR0_FEAT)); - return TRUE; + !InU8(bd->base0+ATAR0_FEAT)); + return TRUE; ATAInit(bd); Yield; } while (!(0flags & BDF_EXT_SIZE) ATACmd(bd,ATA_READ_MULTI_EXT); @@ -381,7 +382,8 @@ I64 ATAProbe(I64 base0,I64 base1,I64 unit) return ATAGetDevId(&bd,tS+0.1,NULL); } -Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf, I64 native_blk, I64 cnt,Bool lock) +Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf, + I64 native_blk, I64 cnt,Bool lock) { Bool result=FALSE,unlock; if (cnt<=0) @@ -412,7 +414,7 @@ U0 ATAPIReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt) { CDrv *dv=Let2Drv(bd->first_drv_let); I64 retry,spc=bd->blk_size>>BLK_SIZE_BITS,n,blk2, - l2=bd->max_reads<<1+spc<<1; + l2=bd->max_reads<<1+spc<<1; U8 *cd_buf=MAlloc(l2<0) { if (blk<=bd->max_reads) @@ -426,7 +428,7 @@ U0 ATAPIReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt) retry=4; while (--retry) if (ATAPIReadBlks2(bd,tS+7.0+0.004*n,cd_buf,blk2/spc,n,TRUE)) - //n is 0x800 if max_reads. Up to 8 additional seconds +//n is 0x800 if max_reads. Up to 8 additional seconds break; if (!retry) ATAPIReadBlks2(bd,0,cd_buf,blk2/spc,n,TRUE); diff --git a/Kernel/Dsk/DskATAId.CPP b/Kernel/Dsk/DskATAId.CPP index 44b07e7..3829c6f 100644 --- a/Kernel/Dsk/DskATAId.CPP +++ b/Kernel/Dsk/DskATAId.CPP @@ -87,7 +87,8 @@ Bool BootCdProbeAll(CBlkDev *bd) } } -U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,CATARep **_root,I64 *num_hints) +U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg, + CATARep **_root,I64 *num_hints) { I64 type; base0&=-8; @@ -100,7 +101,8 @@ U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,CATARep **_root,I64 "$$RED$$ATA "; else "$$RED$$ATAPI "; - "$$LTBLUE$$%s$$FG$$\nBase0:0x%04X Base1:0x%04X\nIrq:0x%02X Unit:%d$$LM,0$$\n",msg,base0,base1,irq,unit; + "$$LTBLUE$$%s$$FG$$\nBase0:0x%04X Base1:0x%04X\nIrq:0x%02X Unit:%d$$LM,0$$\n", + msg,base0,base1,irq,unit; if (_root) { tempha=CAlloc(sizeof(CATARep)); tempha->next=*_root; @@ -116,7 +118,7 @@ U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,CATARep **_root,I64 Bool ATARepExitAllApplications() { - "\nWe're going to probe hardware.\n" + "\nWe're going to probe hardware.\n" "$$RED$$Exit all other applications.$$FG$$\n" "Press '$$PURPLE$$p$$FG$$' to probe or '$$PURPLE$$s$$FG$$' to skip.\n"; if (ToUpper(GetChar(,FALSE))=='S') @@ -136,7 +138,7 @@ public I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_root=NULL) if (pmt && ATARepExitAllApplications) return 0; - old_preempt=Preempt(OFF); + old_preempt=Preempt; for (i=0;icatch_except=TRUE; bd=NULL; @@ -208,20 +211,20 @@ CATARep *ATAIDDrvs(CATARep *root,I64 _sys_boot_drv,CATARep **_ata_drv,CATARep ** while (tempha) { if (!result && bd && bd->type==tempha->type) { if (bd->type==BDT_ATAPI && - bd->base0==tempha->base0 && bd->unit==tempha->unit) + bd->base0==tempha->base0 && bd->unit==tempha->unit) result=atapi_drv=tempha; else if (bd->type==BDT_ATA && bd->base0==tempha->base0 && - bd->base1==tempha->base1 && bd->unit==tempha->unit) + bd->base1==tempha->base1 && bd->unit==tempha->unit) result=ata_drv=tempha; } if (!result || result->type!=tempha->type) { if (tempha->type==BDT_ATA) { if (!ata_drv || tempha->unitunit || - tempha->unit==ata_drv->unit && tempha->numnum) + tempha->unit==ata_drv->unit && tempha->numnum) ata_drv=tempha; } else if (tempha->type==BDT_ATAPI) { if (!atapi_drv || tempha->unitunit || - tempha->unit==atapi_drv->unit && tempha->numnum) + tempha->unit==atapi_drv->unit && tempha->numnum) atapi_drv=tempha; } } @@ -236,7 +239,7 @@ CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit) { CBlkDev *result; if (0<=first_drv_let-'A'unit=unit; result->base0=base0; @@ -250,7 +253,7 @@ CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit) I64 AutoMountIDE() {//Try to mount hard drive and CD/DVD, automatically. (Kernel.Cfg option). //It uses 'C' and 'T' as first drive letters or whatever you set -//in config when compiling Kernel.BIN. + //in config when compiling Kernel.BIN. I64 result=0; CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL,*tempha; ATARep(FALSE,TRUE,&root); @@ -259,16 +262,17 @@ I64 AutoMountIDE() ata_drv->base0,ata_drv->base1,ata_drv->unit)) result++; if (atapi_drv && ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, - atapi_drv->base0,atapi_drv->base1,atapi_drv->unit)) + atapi_drv->base0,atapi_drv->base1,atapi_drv->unit)) result++; tempha=root; while (tempha) { if (tempha!=ata_drv && tempha!=atapi_drv) { if (tempha->type==BDT_ATA && ATAMount(dsk.first_hd_drv_let,BDT_ATA, - tempha->base0,tempha->base1,tempha->unit)) + tempha->base0,tempha->base1,tempha->unit)) result++; - else if (tempha->type==BDT_ATAPI && ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, - tempha->base0,tempha->base1,tempha->unit)) + else if (tempha->type==BDT_ATAPI && + ATAMount(dsk.first_cd_drv_let,BDT_ATAPI, + tempha->base0,tempha->base1,tempha->unit)) result++; } tempha=tempha->next; diff --git a/Kernel/Dsk/DskAddDev.CPP b/Kernel/Dsk/DskAddDev.CPP index e9bab07..391fad2 100644 --- a/Kernel/Dsk/DskAddDev.CPP +++ b/Kernel/Dsk/DskAddDev.CPP @@ -10,8 +10,8 @@ U0 BlkDevLockFwdingSet(CBlkDev *bd) for (i=0;ibd_signature==BD_SIGNATURE_VAL && bd!=bd1 && - (bd1->type==BDT_ATAPI || bd1->type==BDT_ATA) && - bd1->base0==bd->base0) { + (bd1->type==BDT_ATAPI || bd1->type==BDT_ATA) && + bd1->base0==bd->base0) { bd->lock_fwding=bd1; break; } @@ -39,12 +39,12 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) dv->dv_signature=DRV_SIGNATURE_VAL; dv->type=DVT_REDSEA; //This is to force creation of a RAM -//drive during boot, so it is probably -//MAlloced to the same addr and can -//be assumed to be already formatted. -//If this line is removed, RAM Drives -//will be alloced on a just-in-time -//basis. + //drive during boot, so it is probably + //MAlloced to the same addr and can + //be assumed to be already formatted. + //If this line is removed, RAM Drives + //will be alloced on a just-in-time + //basis. if (BlkDevInit(bd)) result++; else @@ -61,7 +61,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) result++; dv->type=DVT_REDSEA; dv->size=bd->max_blk+1; - //The following read is a test read. +//The following read is a test read. //if it hangs, the drive is not supported. ATAReadBlks(bd,&mbr,0,1); break; @@ -174,24 +174,24 @@ U0 Mount(Bool repartition=FALSE) {//Mount a drive. CBlkDev *bd; I64 first_drv_num,type,unit,num_hints; - U8 blks_buf[128],addr_buf[128],base0_buf[128],base1_buf[128]; + U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN]; Bool add; CATARep *root,*tempha; do { DrvRep; - "\n****** Mount Drives ******\n" - "The first drive letter is the letter\n" - "of the first partition. If adding\n" - "a hard drive, you should pick 'C'.\n" - "If more than one partition is present\n" - "they will be lettered in sequence.\n" - "\nFirst Drive Letter ($$PURPLE$$$$FG$$ to exit):"; + "\n****** Mount Drives ******\n" + "The first drive letter is the letter\n" + "of the first partition. If adding\n" + "a hard drive, you should pick 'C'.\n" + "If more than one partition is present\n" + "they will be lettered in sequence.\n" + "\nFirst Drive Letter ($$PURPLE$$$$FG$$ to exit):"; first_drv_num=ToUpper(GetChar)-'A'; '\n'; if (0<=first_drv_num$$FG$$ to MAlloc):"; - GetS(addr_buf,128); + GetS(addr_buf,STR_LEN); "Blks of 512 bytes:"; - GetS(blks_buf,128); + GetS(blks_buf,STR_LEN); } if (BDT_NULLmax_blk=Str2I64(blks_buf)-1; } if (type==BDT_ATA || - type==BDT_ATAPI) { + type==BDT_ATAPI) { bd->base0=Str2I64(base0_buf); bd->base1=Str2I64(base1_buf); } @@ -268,8 +268,8 @@ U0 Mount(Bool repartition=FALSE) I64 SysGetI64() { - U8 st[136]; - GetS(st,136,FALSE); + U8 st[STR_LEN]; + GetS(st,STR_LEN,FALSE); return Str2I64(st,16); } @@ -278,22 +278,22 @@ Bool GetBaseUnit(CBlkDev *bd) I64 ch; Bool probe; " TempleOS\n\n\n"; -#exe { - if (kernel_cfg->opts[CFG_DONT_PROBE]) - StreamPrint("probe=FALSE;"); - else - StreamPrint("probe=TRUE;"); -}; + #exe { + if (kernel_cfg->opts[CFG_DONT_PROBE]) + StreamPrint("probe=FALSE;"); + else + StreamPrint("probe=TRUE;"); + }; if (!probe || !BootCdProbeAll(bd)) { - "\nDon't worry. This is not a product\n" - "registration. TempleOS just needs the\n" - "I/O port numbers for the CD-ROM.\n" - "\nRetry the ports above or check Windows\n" - "system information under I/O ports for\n" - "'IDE', 'ATA' or 'SATA'.\n" - "In Linux, use 'lspci -v' for ports.\n" - "\n\nEnter 4-digit hex I/O Port number.\n" - "CD-ROM I/O Port Base0: 0x"; + "\nDon't worry. This is not a product\n" + "registration. TempleOS just needs the\n" + "I/O port numbers for the CD-ROM.\n" + "\nRetry the ports above or check Windows\n" + "system information under I/O ports for\n" + "'IDE', 'ATA' or 'SATA'.\n" + "In Linux, use 'lspci -v' for ports.\n" + "\n\nEnter 4-digit hex I/O Port number.\n" + "CD-ROM I/O Port Base0: 0x"; bd->base0=SysGetI64; bd->base1=0; bd->unit =0; @@ -322,12 +322,12 @@ U0 BlkDevsInitAll() for (i=0;iopts[CFG_AUTO_MOUNT_IDE]) - StreamPrint("AutoMountIDE;"); - StreamPrint("#exe {OptOff(OPTf_WARN_PAREN);}"); - StreamDoc(kernel_cfg->add_dev); - StreamPrint("#exe {OptOn(OPTf_WARN_PAREN);}"); -}; + #exe { + if (kernel_cfg->opts[CFG_AUTO_MOUNT_IDE]) + StreamPrint("AutoMountIDE;"); + StreamPrint("#exe {OptOff(OPTf_WARN_PAREN);}"); + StreamDoc(kernel_cfg->add_dev); + StreamPrint("#exe {OptOn(OPTf_WARN_PAREN);}"); + }; DrvRep; } diff --git a/Kernel/Dsk/DskB.CPP b/Kernel/Dsk/DskB.CPP deleted file mode 100644 index 72c8f0f..0000000 --- a/Kernel/Dsk/DskB.CPP +++ /dev/null @@ -1,487 +0,0 @@ -Bool MapDrv(U8 drv_let,CDrv *dv) -{//Make drive letter map to another. - drv_let=ToUpper(drv_let); - if ('A'<=drv_let<='Z') { - dsk.let_to_drv[drv_let-'A']=dv; - dv->drv_let=drv_let; - return TRUE; - } else - return FALSE; -} - -Bool Drv(U8 drv_let) -{//Set drive. You can set drive with $LK,"Cd",A="MN:Cd"$() as well. - CDrv *dv=Let2Drv(drv_let); - CBlkDev *bd=dv->bd; - BlkDevChk(bd); - if (dv!=Fs->cur_dv) { - if (bd->flags & BDF_REMOVABLE && !(bd->flags & BDF_INITIALIZED)) - ChgDsk(Drv2Let(dv)); - if (bd->type==BDT_RAM) - BlkDevInit(bd); - } - Fs->cur_dv=dv; - Free(Fs->cur_dir); - Fs->cur_dir=StrNew("/"); - switch (dv->type) { - case DVT_REDSEA: - case DVT_FAT32: - case DVT_ISO9660: - return TRUE; - default: - PrintErr("File System Not Supported\n"); - return FALSE; - } -} - -Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE) -{//Change directory. Optionally, make directories, too. - I64 maxlen,cur_dir_cluster=0; - U8 *chg_to_buf,*new_cur_dir,*buf; - CDrv *dv; - Bool result=TRUE; - if (!dirname) - dirname="::/Home"; - else if (!*dirname) - return TRUE; - if (dirname[1]==':') { - if (*dirname==':') { - if (Fs->cur_dv!=Let2Drv(':') && !Drv(*dirname)) - return FALSE; - } else if (Fs->cur_dv!=Let2Drv(*dirname) && !Drv(*dirname)) - return FALSE; - dirname+=2; - } - if (*dirname=='/' || !*dirname || !Fs->cur_dir) { - Free(Fs->cur_dir); - Fs->cur_dir=StrNew("/"); - if (*dirname=='/') - dirname++; - } - chg_to_buf=MStrUtil(dirname,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); - maxlen=StrLen(Fs->cur_dir)+1+StrLen(chg_to_buf)+1; - new_cur_dir=MAlloc(maxlen); - buf=MAlloc(maxlen); - StrCpy(new_cur_dir,Fs->cur_dir); - while (*chg_to_buf && result) { - StrFirstRem(chg_to_buf,"/",buf); - if (!*buf) - StrCpy(new_cur_dir,"/"); - else if (!StrCmp(buf,"..")) { - StrLastRem(new_cur_dir,"/"); - if (!*new_cur_dir) - StrCpy(new_cur_dir,"/"); - } else if (StrCmp(buf,".") && *buf) { - dv=Fs->cur_dv; - cur_dir_cluster=Name2DirCluster(dv,new_cur_dir); - switch (dv->type) { - case DVT_REDSEA: - result=RedSeaCd(buf,cur_dir_cluster); - break; - case DVT_FAT32: - result=FAT32Cd(buf,cur_dir_cluster); - break; - case DVT_ISO9660: - result=ISO1Cd(buf,cur_dir_cluster); - break; - default: - PrintErr("File System Not Supported\n"); - result=FALSE; - } - if (!result && make_dirs) { - Free(Fs->cur_dir); - Fs->cur_dir=StrNew(new_cur_dir); - result=MkDir(buf); - } - if (result) { - if (StrCmp(new_cur_dir,"/")) - CatPrint(new_cur_dir,"/"); - CatPrint(new_cur_dir,buf); - } - } - } - Free(Fs->cur_dir); - Fs->cur_dir=StrNew(new_cur_dir); - Free(buf); - Free(chg_to_buf); - Free(new_cur_dir); - return result; -} - -U0 FileAccessDel(CFileAccess *fa) -{//Change back to old cur_dir and drv. - CBlkDev *bd; - if (!fa) return; - bd=fa->old_dv->bd; - if (!(bd->flags & BDF_INIT_IN_PROGRESS)) { - if (fa->old_dir) { - Drv(Drv2Let(fa->old_dv)); - Cd(fa->old_dir); - } - } else { - Fs->cur_dv=fa->old_dv; - Free(Fs->cur_dir); - Fs->cur_dir=StrNew("/"); - } - Free(fa->old_dir); - Free(fa->mask); - Free(fa); -} - -CFileAccess *FileAccessNew(U8 *_mask,Bool make_mask=FALSE,Bool make_dirs=FALSE,Bool no_mask=FALSE) -{//Save cur_dir and drv. Change to new dir. - Bool valid=TRUE,old_silent; - U8 *buf,*mask,*temp_mask; - CFileAccess *fa=CAlloc(sizeof(CFileAccess)); - mask=MStrUtil(_mask,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); - temp_mask=mask; - fa->old_dir=StrNew(Fs->cur_dir); - fa->old_dv=Fs->cur_dv; - if (*mask && mask[1]==':') { - if (Fs->cur_dv!=Let2Drv(*mask) && !Drv(*mask)) - valid=FALSE; - mask+=2; - } - fa->dv=Fs->cur_dv; - DrvChk(fa->dv); - buf=MAlloc(StrLen(mask)+2); - StrCpy(buf,mask); - fa->mask=MAlloc(StrLen(mask)+2); - if (no_mask) - *fa->mask=0; - else - StrLastRem(buf,"/",fa->mask); - if (*mask=='/' && !*buf) - StrCpy(buf,"/"); - //If began with Dir, change to Dir. - if (*buf && !Cd(buf,make_dirs)) - valid=FALSE; - if (valid && make_mask) { - if (!*fa->mask) { - Free(fa->mask); - fa->mask=StrNew("*"); - } else { - if (!make_dirs || FileNameChk(fa->mask)) { - old_silent=Silent; - //Try mask to see if Dir. If Dir, change to dir and set to "*". - if (Cd(fa->mask,make_dirs)) { - Free(fa->mask); - fa->mask=StrNew("*"); - } - Silent(old_silent); - } - } - } - Free(buf); - Free(temp_mask); - if (!valid) { - FileAccessDel(fa); - fa=NULL; - } - return fa; -} - -CDirEntry *FilesFind(U8 *files_find_mask,I64 fuf_flags=0) -{/* See $LK,"::/Doc/FileUtils.TXT"$. - -Find files and make a directory tree in memory. - -When done, you free with $LK,"DirEntryDel",A="MN:DirEntryDel"$(),$LK,"DirEntryDel2",A="MN:DirEntryDel2"$(), -$LK,"DirTreeDel",A="MN:DirTreeDel"$() or $LK,"DirTreeDel2",A="MN:DirTreeDel2"$(). - -*/ - CDirEntry *result; - CFileAccess *fa; - if (fuf_flags&~FUG_FILES_FIND) - throw('FUF'); - if (fuf_flags&FUF_SINGLE) { - result=MAlloc(sizeof(CDirEntry)); - if (!FileFind(files_find_mask,result)) { - Free(result); - return NULL; - } - } else if (fa=FileAccessNew(files_find_mask,TRUE)) { - result=SysFilesFind(fa->mask,fuf_flags); - FileAccessDel(fa); - } else - return NULL; - return result; -} - -Bool IsDir(U8 *dir_name) -{//Is a str a valid, existing Dir? - U8 *mask=MStrPrint("%s/*",dir_name); - Bool result,old_silent=Silent; - CFileAccess *fa; - if (fa=FileAccessNew(mask)) { - FileAccessDel(fa); - result=TRUE; - } else - result=FALSE; - Free(mask); - Silent(old_silent); - return result; -} - -I64 Dir(U8 *files_find_mask="*",Bool full=FALSE) -{//List directory. - I64 result; - CFileAccess *fa; - if (fa=FileAccessNew(files_find_mask,TRUE)) { - result=Dir2(fa->mask,0,full); - FileAccessDel(fa); - return result; - } else - return 0; -} - -I64 Del(U8 *files_find_mask,Bool print_msg=TRUE) -{//Delete files. - I64 result=0; - CFileAccess *fa; - if (fa=FileAccessNew(files_find_mask)) { - switch (fa->dv->type) { - case DVT_REDSEA: - result=RedSeaFilesDel(fa->dv,Fs->cur_dir,fa->mask,0,FALSE,print_msg); - break; - case DVT_FAT32: - result=FAT32FilesDel(fa->dv,Fs->cur_dir,fa->mask,0,FALSE,print_msg); - break; - case DVT_ISO9660: - PrintErr("Not Writable\n"); - break; - default: - PrintErr("File System Not Supported\n"); - } - FileAccessDel(fa); - } - return result; -} - -U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL) -{//Read whole file from disk. - CHashGeneric *temph; - U8 *absname,*altname,*curname,*result=NULL; - I64 i,size=0,attr=0; - CFileAccess *fa; - CArcCompress *ac; - absname=FileNameAbs(filename); - altname=ToggleZorNotZ(absname); - if ((temph=HashFind(absname,adam_task->hash_table,HTT_FILE))|| - (temph=HashFind(altname,adam_task->hash_table,HTT_FILE))) { - size=temph->user_data1; - result=MAlloc(size+1); - MemCpy(result,temph->user_data0,size); - result[size]=0; //Terminate - attr=FileAttr(temph->str,attr); - } else { - for (i=0;i<2 && !result;i++) {//Try name, then altname - if (!i) - curname=absname; - else - curname=altname; - if (fa=FileAccessNew(curname)) { - switch (fa->dv->type) { - case DVT_REDSEA: - result=RedSeaFileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); - break; - case DVT_FAT32: - result=FAT32FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); - break; - case DVT_ISO9660: - result=ISO1FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); - break; - default: - PrintErr("File System Not Supported\n"); - } - FileAccessDel(fa); - } - } - - //Search parent directories. - for (i=0;i<2 && !result;i++) {//Try name, then altname - if (!i) - curname=absname; - else - curname=altname; - if (fa=FileAccessNew(curname)) { - while (!result && StrCmp(Fs->cur_dir,"/")) { - Cd(".."); - switch (Fs->cur_dv->type) { - case DVT_REDSEA: - result=RedSeaFileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); - break; - case DVT_FAT32: - result=FAT32FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); - break; - case DVT_ISO9660: - result=ISO1FileRead(fa->dv,Fs->cur_dir,fa->mask,&size,&attr); - break; - default: - PrintErr("File System Not Supported\n"); - } - } - FileAccessDel(fa); - } - } - if (!result) { - "%s ",filename; - PrintErr("File not found.\n"); - } - if (result && attr & RS_ATTR_RESIDENT) - HashGenericAdd(curname,HTT_FILE,AMAllocIdentical(result),size,0,adam_task); - } - if (result && attr & RS_ATTR_COMPRESSED) { - ac=result; - size=ac->expanded_size; - result=ExpandBuf(ac); - Free(ac); - } - if (_attr) *_attr=attr; - if (_size) *_size=size; - Free(absname); - Free(altname); - return result; -} - -Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0) -{//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$, $LK,"FUF_Z_OR_NOT_Z",A="MN:FUF_Z_OR_NOT_Z"$, $LK,"FUF_SCAN_PARENTS",A="MN:FUF_SCAN_PARENTS"$ -//If you pass _de, you must Free(_de->full_name); - I64 i,j,cur_dir_cluster; - U8 *altname,*curname,*full_name=NULL; - CDirEntry de; - CFileAccess *fa; - Bool result=FALSE,old_silent; - if (fuf_flags&~FUG_FILE_FIND) - throw('FUF'); - if (!filename) return FALSE; - altname=ToggleZorNotZ(filename); - if (fuf_flags&FUF_Z_OR_NOT_Z) - j=2; - else - j=1; - for (i=0;idv,Fs->cur_dir); - switch (fa->dv->type) { - case DVT_REDSEA: - result=RedSeaFileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); - break; - case DVT_FAT32: - result=FAT32FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); - break; - case DVT_ISO9660: - result=ISO1FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); - break; - default: - PrintErr("File System Not Supported\n"); - } - if (result && _de) { - if (StrCmp(Fs->cur_dir,"/")) - full_name=MStrPrint("%C:%s/%s",Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name); - else - full_name=MStrPrint("%C:/%s",Drv2Let(Fs->cur_dv),de.name); - } - FileAccessDel(fa); - } - } - for (i=0;idv,Fs->cur_dir); - while (!result && StrCmp(Fs->cur_dir,"/")) { - Cd(".."); - cur_dir_cluster=Name2DirCluster(fa->dv,Fs->cur_dir); - switch (fa->dv->type) { - case DVT_REDSEA: - result=RedSeaFileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); - break; - case DVT_FAT32: - result=FAT32FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); - break; - case DVT_ISO9660: - result=ISO1FileFind(fa->dv,cur_dir_cluster,fa->mask,&de,fuf_flags); - break; - default: - PrintErr("File System Not Supported\n"); - } - } - if (result && _de) { - if (StrCmp(Fs->cur_dir,"/")) - full_name=MStrPrint("%C:%s/%s",Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name); - else - full_name=MStrPrint("%C:/%s",Drv2Let(Fs->cur_dv),de.name); - } - FileAccessDel(fa); - } - } - if (_de) { - if (result) { - MemCpy(_de,&de,sizeof(CDirEntry)); - _de->full_name=full_name; - } else - MemSet(_de,0,sizeof(CDirEntry)); - } - Free(altname); - return result; -} - -I64 FileWrite(U8 *filename,U8 *fbuf, - I64 size,CDate cdt=0,I64 attr=0) -{//Write whole file to disk. - I64 c=0; - CHashGeneric *temph; - CFileAccess *fa; - U8 *fbuf2,*absname=FileNameAbs(filename); - if (fa=FileAccessNew(filename,FALSE,TRUE)) { - attr=FileAttr(fa->mask,attr); - if (attr&RS_ATTR_COMPRESSED) { - fbuf=CompressBuf(fbuf,size); - size=fbuf(CArcCompress *)->compressed_size; - fbuf2=fbuf; - } else - fbuf2=NULL; - if (!cdt) cdt=Now; - switch (fa->dv->type) { - case DVT_REDSEA: - c=RedSeaFileWrite(fa->dv,Fs->cur_dir,fa->mask,fbuf,size,cdt,attr); - break; - case DVT_FAT32: - c=FAT32FileWrite(fa->dv,Fs->cur_dir,fa->mask,fbuf,size,cdt,attr); - break; - case DVT_ISO9660: - PrintErr("Not Writable\n"); - break; - default: - PrintErr("File System Not Supported\n"); - } - if (temph=HashFind(absname,adam_task->hash_table,HTT_FILE)) { - if (attr & RS_ATTR_RESIDENT) { - Free(temph->user_data0); - temph->user_data0=AMAllocIdentical(fbuf); - temph->user_data1=size; - } else - HashRemDel(temph,adam_task->hash_table); - } else if (attr & RS_ATTR_RESIDENT) - HashGenericAdd(absname,HTT_FILE,AMAllocIdentical(fbuf),size,0,adam_task); - Free(fbuf2); - FileAccessDel(fa); - } - Free(absname); - return c; -} diff --git a/Kernel/Dsk/DskBlk.CPP b/Kernel/Dsk/DskBlk.CPP new file mode 100644 index 0000000..977a298 --- /dev/null +++ b/Kernel/Dsk/DskBlk.CPP @@ -0,0 +1,102 @@ +#define ZERO_BUF_SIZE 2048 +U0 WZeroBlks(CDrv *dv,I64 blk,I64 cnt) +{//Fill blk cnt with zeros in Drv. + I64 n; + U8 *z=CAlloc(ZERO_BUF_SIZE<ZERO_BUF_SIZE && dv->bd->type!=BDT_RAM) { + progress1=0; progress1_max=cnt; + StrCpy(progress1_desc,"Zeroing"); + show_progress=TRUE; + } else + show_progress=FALSE; + while (cnt>0) { + n=cnt; + if (n>ZERO_BUF_SIZE) + n=ZERO_BUF_SIZE; + WBlks(dv,z,blk,n); + blk+=n; + cnt-=n; + if (show_progress) + progress1+=n; + Yield; //Prevent locking + } + Free(z); + if (show_progress) { + *progress1_desc=0; + progress1=progress1_max=0; + } +} + +Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) +{//Read blk cnt from Drv to buf. + Bool result=TRUE,unlock; + CBlkDev *bd=dv->bd; + if (cnt<=0) return TRUE; + DrvChk(dv); + try { + unlock=DrvLock(dv); + BlkDevInit(bd); + if (dv->base_offset && blkbase_offset || + blk+cnt>dv->base_offset+dv->size) + throw('Drv'); + + if (bd->flags & BDF_READ_CACHE) + RCache(dv,&buf,&blk,&cnt); + if (cnt>0) { + switch (bd->type) { + case BDT_RAM: + MemCpy(buf,bd->RAM_dsk+blk<last_time=tS; + if (bd->flags & BDF_READ_CACHE) + DskCacheAdd(dv,buf,blk,cnt); + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + return result; +} + +Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt) +{//Write blk cnt from buf to Drv. + Bool result=TRUE,unlock; + CBlkDev *bd=dv->bd; + if (cnt<=0) return TRUE; + DrvChk(dv); + try { + unlock=DrvLock(dv); + BlkDevInit(bd); + if (bd->flags&BDF_READ_ONLY && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) + throw('BlkDev'); + if (dv->base_offset && blkbase_offset || + blk+cnt>dv->base_offset+dv->size) + throw('Drv'); + if (cnt>0) { + switch (bd->type) { + case BDT_RAM: + MemCpy(bd->RAM_dsk+blk<last_time=tS; + if (bd->flags & BDF_READ_CACHE) + DskCacheAdd(dv,buf,blk,cnt); + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + return result; +} diff --git a/Kernel/Dsk/DskBlkDev.CPP b/Kernel/Dsk/DskBlkDev.CPP new file mode 100644 index 0000000..6b4f1fb --- /dev/null +++ b/Kernel/Dsk/DskBlkDev.CPP @@ -0,0 +1,134 @@ +Bool BlkDevLock(CBlkDev *bd) +{//Make this task have exclusive access to BlkDev. + BlkDevChk(bd); + while (bd->lock_fwding) + bd=bd->lock_fwding; //If two blkdevs on same controller, use just one lock + if (!Bt(&bd->locked_flags,BDlf_LOCKED) || bd->owning_task!=Fs) { + while (LBts(&bd->locked_flags,BDlf_LOCKED)) + Yield; + bd->owning_task=Fs; + return TRUE; + } else + return FALSE; +} + +Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE) +{//Release exclusive lock on access to BlkDev. + BlkDevChk(bd); + while (bd->lock_fwding) + bd=bd->lock_fwding; //If two blkdevs on same controller, use just one lock + if (Bt(&bd->locked_flags,BDlf_LOCKED) && bd->owning_task==Fs) { + if (rst) + bd->flags&=~(BDF_INITIALIZED|BDF_INIT_IN_PROGRESS); + bd->owning_task=NULL; + LBtr(&bd->locked_flags,BDlf_LOCKED); + Yield; //Prevent deadlock + return TRUE; + } else + return FALSE; +} + +Bool BlkDevInit(CBlkDev *bd) +{ + CDrv *dv=Let2Drv(bd->first_drv_let); + Bool old_preempt=Preempt,result=FALSE; + + if (!LBts(&bd->flags,BDf_INITIALIZED)) { + bd->flags|=BDF_INIT_IN_PROGRESS; + switch(bd->type) { + case BDT_RAM: + if (!bd->RAM_dsk) { + bd->RAM_dsk=AMAlloc((bd->max_blk+1)<max_blk=MSize(bd->RAM_dsk)>>BLK_SIZE_BITS-1; + } + dv->type=DVT_REDSEA; + dv->size=bd->max_blk+1; + if (RedSeaDrvValidate(bd->first_drv_let)) + RedSeaDrvInit(dv); + else + RedSeaFmt(bd->first_drv_let); + result=TRUE; + break; + case BDT_ATA: + bd->max_reads=128; + bd->max_writes=1; + result=ATAInit(bd); + break; + case BDT_ATAPI: +//0xFFFF*4 is too big for my taste + bd->max_reads=0x800*4; +//max of maybe a quarter of disk cache + if (bd->max_reads>dsk.cache_size/BLK_SIZE/4) + bd->max_reads=dsk.cache_size/BLK_SIZE/4 & ~3; + if (bd->max_reads<128) + bd->max_reads=128; + bd->max_writes=0xFFFF*4; + if (result=ATAInit(bd)) + dv->size=bd->max_blk+1; + break; + } + if (result && bd->flags & BDF_READ_CACHE) + DskCacheInvalidate(dv); + bd->flags&=~BDF_INIT_IN_PROGRESS; + } else + result=TRUE; + Preempt(old_preempt); + return result; +} + +U0 BlkDevsRelease() +{//When task dies, release all owned BlkDevs. + I64 i; + CBlkDev *bd; + for (i=0;iowning_task==Fs && bd->bd_signature==BD_SIGNATURE_VAL) + BlkDevUnlock(bd,TRUE); + } +} + +CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type) +{//Locate free slot for new BlkDev, like during $LK,"Mount",A="MN:Mount"$(). + I64 i=0; + CBlkDev *result; + do { + result=&dsk.blkdevs[i]; + if (result->bd_signature!=BD_SIGNATURE_VAL) { + MemSet(result,0,sizeof(CBlkDev)); + result->first_drv_let=first_drv_let; + result->type=type; + if (type==BDT_ATAPI) + result->flags=BDF_REMOVABLE; + else + result->flags=0; + if (type!=BDT_RAM) + result->flags|=BDF_READ_CACHE; + + if (type==BDT_ATAPI) { + result->blk_size=CD_BLK_SIZE; + result->flags|=BDF_READ_ONLY; + } else + result->blk_size=BLK_SIZE; + + result->max_blk=0xEFFFFFFF; + return result; + } + } while (++ibd_signature!=BD_SIGNATURE_VAL || + !(BDT_NULLtypebd; + BlkDevChk(bd); + return bd; +} diff --git a/Kernel/Dsk/DskC.CPP b/Kernel/Dsk/DskC.CPP deleted file mode 100644 index 2f255c8..0000000 --- a/Kernel/Dsk/DskC.CPP +++ /dev/null @@ -1,363 +0,0 @@ -Bool CopySingleZ(U8 *f1,U8 *f2) //Just one file -{ - U8 *file_buf=NULL; - I64 size,attr=0,c; - CDirEntry de; - if (FileFind(f1,&de,FUF_JUST_FILES)) { - Free(de.full_name); - file_buf=FileRead(f1,&size,&attr); - attr=FileAttr(f2,attr); - if (file_buf) { - "Copying %s to %s\n",f1,f2; - c=FileWrite(f2,file_buf,size,de.datetime,attr); - Free(file_buf); - return ToBool(c); - } else - PrintErr("File not found.\n"); - } else - PrintErr("File not found.\n"); - return FALSE; -} - -#define COPY_BUF_BLKS 0x80 -Bool CopySingle(U8 *f1,U8 *f2) //Just one file -{ - U8 *absf1=FileNameAbs(f1),*absf2=FileNameAbs(f2),*buf; - I64 cnt,n,size,attr1=FileAttr(f1),attr2=FileAttr(f2),i,j; - CFile *in_file=NULL,*out_file=NULL; - if (!StrCmp(absf1,absf2)) {//onto self? - Free(absf1); - Free(absf2); - return FALSE; - } - Free(absf1); - Free(absf2); - if (attr1!=attr2) - return CopySingleZ(f1,f2); - buf=MAlloc(COPY_BUF_BLKS<>BLK_SIZE_BITS; - if (attr2 & RS_ATTR_CONTIGUOUS) - out_file=FOpen(f2,"wc",cnt); - else - out_file=FOpen(f2,"w",cnt); - if (out_file) { - "Copying %s to %s\n",f1,f2; - j=size; - while (cnt>0) { - if (cnt>COPY_BUF_BLKS) { - n=COPY_BUF_BLKS; - i=n<flags|=FF_USE_OLD_DATETIME; - out_file->de.datetime=in_file->de.datetime; - out_file->de.size=size; - out_file->de.attr=FileAttr(f2,in_file->de.attr); - FClose(out_file); - FClose(in_file); - Free(buf); - return TRUE; - } else - PrintErr("File not found.\n"); - FClose(in_file); - } else - PrintErr("File not found.\n"); - Free(buf); - return FALSE; -} - -Bool MkDir(U8 *filename) -{//Make directory. $LK,"Cd",A="MN:Cd"$() can also make directories. - U8 *name; - CFileAccess *fa; - Bool result=FALSE; - if (FileFind(filename,,FUF_JUST_DIRS)) - return FALSE; - if (fa=FileAccessNew(filename)) { - if (*fa->mask) { - if (!FileNameChk(fa->mask)) - PrintErr("Invalid FileName.\n"); - else { - "Make Directory:%s\n",filename; - name=MStrUtil(fa->mask,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); - switch (fa->dv->type) { - case DVT_REDSEA: - result=RedSeaMkDir(fa->dv,Fs->cur_dir,name); - break; - case DVT_FAT32: - result=FAT32MkDir(fa->dv,Fs->cur_dir,name); - break; - case DVT_ISO9660: - PrintErr("Not Writable\n"); - break; - default: - PrintErr("File System Not Supported\n"); - } - Free(name); - } - } - FileAccessDel(fa); - } - return result; -} - -I64 SysDel(U8 *wild,Bool make_mask) //this is dangerous -{ - I64 result=0; - CFileAccess *fa; - if (fa=FileAccessNew(wild,make_mask)) { - switch (fa->dv->type) { - case DVT_REDSEA: - result=RedSeaFilesDel(fa->dv,Fs->cur_dir,fa->mask,0,TRUE,TRUE); - break; - case DVT_FAT32: - result=FAT32FilesDel(fa->dv,Fs->cur_dir,fa->mask,0,TRUE,TRUE); - break; - case DVT_ISO9660: - PrintErr("Not Writable\n"); - break; - default: - PrintErr("File System Not Supported\n"); - } - FileAccessDel(fa); - } - return result; -} - -U0 Fmt(I64 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=DVT_FAT32) -{//Format hard drive or RAM drive. -//$BK,1$Warning:$BK,0$ Destroys all previous info. -//quick=FALSE means fill entire drive -//with zeros. -//Choose $LK,"DVT_FAT32",A="MN:DVT_FAT32"$ or $LK,"DVT_REDSEA",A="MN:DVT_REDSEA"$. -//You don't format a CD-ROM with this. - CDrv *dv=Let2Drv(drv_let); - Bool old_silent=IsSilent; - if (confirm && !AreYouSure) - return; - if (!dv) { - PrintErr("Invalid Drive\n"); - return; - } - switch (type) { - case DVT_REDSEA: - Silent; - Drv(drv_let); - Silent(old_silent); - RedSeaFmt(drv_let,quick); - DskCacheInvalidate(Let2Drv(drv_let)); - Drv(drv_let); - break; - case DVT_FAT32: - Silent; - Drv(drv_let); - Silent(old_silent); - FAT32Fmt(drv_let,quick); - DskCacheInvalidate(Let2Drv(drv_let)); - Drv(drv_let); - break; - case DVT_ISO9660: - PrintErr("Not Writable\n"); - break; - default: - PrintErr("File System Not Supported\n"); - } -} - -U0 CDImageRead(U8 cd_drv_let,U8 *out_name) -{//Read entire CD/DVD image into ISO file. - CBlkDev *bd=Let2BlkDev(cd_drv_let); - CDrv *dv=Let2Drv(cd_drv_let); - U8 *buf=MAlloc(COPY_BUF_BLKS<blk_size>>BLK_SIZE_BITS,blk=0,cnt,retry; - BlkDevInit(bd); - if (bd->type!=BDT_ATAPI) - throw('BlkDev'); - if (!out_name) - out_name=dsk.dft_iso_filename; - cnt=CeilU64(dv->size,spc); - while (cnt>0) { - if (cnt>COPY_BUF_BLKS) - n=COPY_BUF_BLKS; - else - n=cnt; - if (n>bd->max_reads) - n=bd->max_reads; - - retry=4; - while (--retry) - if (ATAPIReadBlks2(bd,tS+7.0+0.004*n/spc,buf,blk/spc,n/spc,TRUE)) - //n is 0x800 if max_reads. Up to 8 additional seconds - break; - - if (!retry) - ATAPIReadBlks2(bd,0,buf,blk/spc,n/spc,TRUE); - - FWBlks(f,buf,blk,n); - cnt-=n; - blk+=n; - } - FClose(f); - Free(buf); - Free(out_name2); -} - -class CDualBuf -{ - U8 *buf0,*buf1; - I64 in_buf,out_buf,cnt; - U8 *filename; - CBlkDev *cd_bd; -}; - -U0 CDImageWriteTask(CDualBuf *d) -{ - U8 *buf; - I64 n,blk=0,cnt=d->cnt; - CFile *f; - Preempt(ON); - if (FileAttr(d->filename)&RS_ATTR_CONTIGUOUS) - f=FOpen(d->filename,"rc"); - else - f=FOpen(d->filename,"r"); - while (cnt>0) { - if (cnt>COPY_BUF_BLKS) - n=COPY_BUF_BLKS; - else - n=cnt; - if (n>d->cd_bd->max_writes) - n=d->cd_bd->max_writes; - if (d->in_buf&1) - buf=d->buf1; - else - buf=d->buf0; - while (d->in_buf>d->out_buf+1) - Yield; - FRBlks(f,buf,blk,n); - d->in_buf++; - cnt-=n; - blk+=n; - } - FClose(f); -} - -U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD) -{//Write CD/DVD ISO file to disk. - CDualBuf *d=CAlloc(sizeof(CDualBuf)); - U8 *buf,*in_name2,*in_name3; - I64 i,n,spc,blk=0,cnt; - CDrv *dv=Let2Drv(cd_drv_let); - CBlkDev *bd=dv->bd,*bd2; - CTask *task; - Bool old_preempt; - CFile *f; - - if (!in_name) - in_name=dsk.dft_iso_filename; - in_name3=DftExt(in_name,"ISO"); - in_name2=FileNameAbs(in_name3); - f=FOpen(in_name2,"r"); - if (!f) { - Free(d); - return; - } - cnt=(FSize(f)+BLK_SIZE-1)>>BLK_SIZE_BITS; - FClose(f); - if (bd->type!=BDT_ATAPI) - throw('BlkDev'); - bd2=Let2BlkDev(*in_name2); - while (bd2->lock_fwding) - bd2=bd2->lock_fwding; //If two blkdevs on same controller, use just one lock - if ((bd2->type==BDT_ATA || bd2->type==BDT_ATAPI) && - bd2->base0==bd->base0) { - "Can't Burn CD on same ATA ctrller as File.\n\n"; - throw('BlkDev'); - } - - bd->flags|=BDF_READ_ONLY_OVERRIDE; - BlkDevInit(bd); - spc=bd->blk_size>>BLK_SIZE_BITS; - if (dv->sizesize=cnt; - - d->filename=in_name2; - d->cd_bd=bd; - d->buf0=MAlloc(COPY_BUF_BLKS<buf1=MAlloc(COPY_BUF_BLKS<cnt=cnt; - - old_preempt=Preempt(OFF); - task=Spawn(&CDImageWriteTask,d,"Write CD"); - - while (d->in_buf<=d->out_buf) - Yield; - - BlkDevLock(bd); - ATAPIWaitReady(bd,0); - - progress1=0; progress1_max=cnt; - StrCpy(progress1_desc,"Writing"); - while (cnt>0) { - if (cnt>COPY_BUF_BLKS) - n=COPY_BUF_BLKS; - else - n=cnt; - if (n>bd->max_writes) - n=bd->max_writes; - if (d->out_buf&1) - buf=d->buf1; - else - buf=d->buf0; - while (d->in_buf<=d->out_buf) - Yield; - ATAPIWriteBlks(bd,buf,blk/spc,(n+spc-1)/spc); - d->out_buf++; - cnt-=n; - blk+=n; - progress1+=n; - } - ATAPISync(bd); - - progress1=0; progress1_max=2; - StrCpy(progress1_desc,"Closing"); - for (i=0;i<2;i++) { - ATAPIClose(bd,0x100,i); //Close tracks - progress1++; - } - - ATAPISync(bd); - - ATAPIClose(bd,0x200); //close disk - ATAPISync(bd); - if (media_type==MT_DVD) { - ATAPIClose(bd,0x300); - ATAPISync(bd); - } - - *progress1_desc=0; - progress1=progress1_max=0; - - bd->flags&=~BDF_READ_ONLY_OVERRIDE; - BlkDevUnlock(bd); - Free(d->buf0); - Free(d->buf1); - Free(in_name2); - Free(in_name3); - Preempt(old_preempt); - Free(d); -} diff --git a/Kernel/Dsk/DskCDDVD.CPP b/Kernel/Dsk/DskCDDVD.CPP new file mode 100644 index 0000000..3cd9937 --- /dev/null +++ b/Kernel/Dsk/DskCDDVD.CPP @@ -0,0 +1,184 @@ +U0 CDImageRead(U8 cd_drv_let,U8 *out_name) +{//Read entire CD/DVD image into ISO file. + CBlkDev *bd=Let2BlkDev(cd_drv_let); + CDrv *dv=Let2Drv(cd_drv_let); + U8 *buf=MAlloc(COPY_BUF_BLKS<blk_size>>BLK_SIZE_BITS,blk=0,cnt,retry; + BlkDevInit(bd); + if (bd->type!=BDT_ATAPI) + throw('BlkDev'); + if (!out_name) + out_name=dsk.dft_iso_filename; + cnt=CeilU64(dv->size,spc); + while (cnt>0) { + if (cnt>COPY_BUF_BLKS) + n=COPY_BUF_BLKS; + else + n=cnt; + if (n>bd->max_reads) + n=bd->max_reads; + + retry=4; + while (--retry) + if (ATAPIReadBlks2(bd,tS+7.0+0.004*n/spc,buf,blk/spc,n/spc,TRUE)) +//n is 0x800 if max_reads. Up to 8 additional seconds + break; + + if (!retry) + ATAPIReadBlks2(bd,0,buf,blk/spc,n/spc,TRUE); + + FWBlks(f,buf,blk,n); + cnt-=n; + blk+=n; + } + FClose(f); + Free(buf); + Free(out_name2); +} + +class CDualBuf +{ + U8 *buf0,*buf1; + I64 in_buf,out_buf,cnt; + U8 *filename; + CBlkDev *cd_bd; +}; + +U0 CDImageWriteTask(CDualBuf *d) +{ + U8 *buf; + I64 n,blk=0,cnt=d->cnt; + CFile *f; + Preempt(ON); + if (FileAttr(d->filename)&RS_ATTR_CONTIGUOUS) + f=FOpen(d->filename,"rc"); + else + f=FOpen(d->filename,"r"); + while (cnt>0) { + if (cnt>COPY_BUF_BLKS) + n=COPY_BUF_BLKS; + else + n=cnt; + if (n>d->cd_bd->max_writes) + n=d->cd_bd->max_writes; + if (d->in_buf&1) + buf=d->buf1; + else + buf=d->buf0; + while (d->in_buf>d->out_buf+1) + Yield; + FRBlks(f,buf,blk,n); + d->in_buf++; + cnt-=n; + blk+=n; + } + FClose(f); +} + +U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD) +{//Write CD/DVD ISO file to disk. + CDualBuf *d=CAlloc(sizeof(CDualBuf)); + U8 *buf,*in_name2,*in_name3; + I64 i,n,spc,blk=0,cnt; + CDrv *dv=Let2Drv(cd_drv_let); + CBlkDev *bd=dv->bd,*bd2; + CTask *task; + Bool old_preempt; + CFile *f; + + if (!in_name) + in_name=dsk.dft_iso_filename; + in_name3=DftExt(in_name,"ISO"); + in_name2=FileNameAbs(in_name3); + f=FOpen(in_name2,"r"); + if (!f) { + Free(d); + return; + } + cnt=(FSize(f)+BLK_SIZE-1)>>BLK_SIZE_BITS; + FClose(f); + if (bd->type!=BDT_ATAPI) + throw('BlkDev'); + bd2=Let2BlkDev(*in_name2); + while (bd2->lock_fwding) + bd2=bd2->lock_fwding; //If two blkdevs on same controller, use one lock + if ((bd2->type==BDT_ATA || bd2->type==BDT_ATAPI) && + bd2->base0==bd->base0) { + "Can't Burn CD on same ATA ctrller as File.\n\n"; + throw('BlkDev'); + } + + bd->flags|=BDF_READ_ONLY_OVERRIDE; + BlkDevInit(bd); + spc=bd->blk_size>>BLK_SIZE_BITS; + if (dv->sizesize=cnt; + + d->filename=in_name2; + d->cd_bd=bd; + d->buf0=MAlloc(COPY_BUF_BLKS<buf1=MAlloc(COPY_BUF_BLKS<cnt=cnt; + + old_preempt=Preempt; + task=Spawn(&CDImageWriteTask,d,"Write CD"); + + while (d->in_buf<=d->out_buf) + Yield; + + BlkDevLock(bd); + ATAPIWaitReady(bd,0); + + progress1=0; progress1_max=cnt; + StrCpy(progress1_desc,"Writing"); + while (cnt>0) { + if (cnt>COPY_BUF_BLKS) + n=COPY_BUF_BLKS; + else + n=cnt; + if (n>bd->max_writes) + n=bd->max_writes; + if (d->out_buf&1) + buf=d->buf1; + else + buf=d->buf0; + while (d->in_buf<=d->out_buf) + Yield; + ATAPIWriteBlks(bd,buf,blk/spc,(n+spc-1)/spc); + d->out_buf++; + cnt-=n; + blk+=n; + progress1+=n; + } + ATAPISync(bd); + + progress1=0; progress1_max=2; + StrCpy(progress1_desc,"Closing"); + for (i=0;i<2;i++) { + ATAPIClose(bd,0x100,i); //Close tracks + progress1++; + } + + ATAPISync(bd); + + ATAPIClose(bd,0x200); //close disk + ATAPISync(bd); + if (media_type==MT_DVD) { + ATAPIClose(bd,0x300); + ATAPISync(bd); + } + + *progress1_desc=0; + progress1=progress1_max=0; + + bd->flags&=~BDF_READ_ONLY_OVERRIDE; + BlkDevUnlock(bd); + Free(d->buf0); + Free(d->buf1); + Free(in_name2); + Free(in_name3); + Preempt(old_preempt); + Free(d); +} diff --git a/Kernel/Dsk/DskCFile.CPP b/Kernel/Dsk/DskCFile.CPP index 3fb7eb6..2f6c1be 100644 --- a/Kernel/Dsk/DskCFile.CPP +++ b/Kernel/Dsk/DskCFile.CPP @@ -10,7 +10,7 @@ CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0) {//Allows flags "r","w","w+". "c" for contiguous. //(It uses $LK,"StrOcc",A="MN:StrOcc"$() for 'w', 'r', '+', 'c') CFile *f=CAlloc(sizeof(CFile)); - CFileAccess *fa; + CDirContext *dirc; U8 *full_name; Bool contiguous=StrOcc(flags,'c'); @@ -41,19 +41,19 @@ CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0) return f; } } else - Del(full_name,FALSE); + Del(full_name,,,FALSE); f->de.full_name=full_name; f->flags|=FF_NEW_FILE; - if (fa=FileAccessNew(full_name)) { - StrCpy(f->de.name,fa->mask); + if (dirc=DirContextNew(full_name)) { + StrCpy(f->de.name,dirc->mask); if (cnt>0) {//We pre-alloc the whole thing. f->de.cluster=ClustersAlloc(f->dv,0, - (cnt+f->dv->spc-1)/f->dv->spc,contiguous); + (cnt+f->dv->spc-1)/f->dv->spc,contiguous); f->de.size=cnt<dv,Fs->cur_dir,&f->de,TRUE); + DirNew(dirc->dv,Fs->cur_dir,&f->de,TRUE); f->flags&=~FF_NEW_FILE; } - FileAccessDel(fa); + DirContextDel(dirc); if (!contiguous || cnt>0) return f; } @@ -72,21 +72,21 @@ CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0) U0 FClose(CFile *f) {//Close CFile, updating directory. - CFileAccess *fa; + CDirContext *dirc; if (f) { if (f->flags & FF_BUF_DIRTY) { WClusters(f->dv,f->cluster_buf,f->cluster,1); f->flags&=~FF_BUF_DIRTY; } if (f->flags & FF_NEEDS_WRITE) { - if (fa=FileAccessNew(f->de.full_name)) { + if (dirc=DirContextNew(f->de.full_name)) { if (!(f->flags & FF_USE_OLD_DATETIME)) f->de.datetime=Now; if (f->flags & FF_NEW_FILE) - DirNew(fa->dv,Fs->cur_dir,&f->de,TRUE); + DirNew(dirc->dv,Fs->cur_dir,&f->de,TRUE); else - DirNew(fa->dv,Fs->cur_dir,&f->de,FALSE); - FileAccessDel(fa); + DirNew(dirc->dv,Fs->cur_dir,&f->de,FALSE); + DirContextDel(dirc); } else throw('File'); } diff --git a/Kernel/Dsk/DskCache.CPP b/Kernel/Dsk/DskCache.CPP index 9b128c2..ce038af 100644 --- a/Kernel/Dsk/DskCache.CPP +++ b/Kernel/Dsk/DskCache.CPP @@ -29,7 +29,8 @@ U0 DskCacheInit(I64 size_in_U8s) dsk.cache_hash_table=AMAlloc(DSK_CACHE_HASH_SIZE*sizeof(U8 *)*2); for (i=0;inext_hash=tempc->last_hash=tempc; } } @@ -121,7 +122,7 @@ U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) if (dsk.cache_base) { while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) Yield; - //fetch leading blks from cache +//fetch leading blks from cache while (*_cnt>0) { if (tempc=DskCacheFind(dv,*_blk)) { MemCpy(*_buf,&tempc->body,BLK_SIZE); @@ -131,7 +132,7 @@ U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) } else break; } - //fetch trailing blks from cache +//fetch trailing blks from cache while (*_cnt>0) { if (tempc=DskCacheFind(dv,*_blk+*_cnt-1)) { MemCpy(*_buf+(*_cnt-1)<body,BLK_SIZE); diff --git a/Kernel/Dsk/DskCluster.CPP b/Kernel/Dsk/DskCluster.CPP new file mode 100644 index 0000000..323e03d --- /dev/null +++ b/Kernel/Dsk/DskCluster.CPP @@ -0,0 +1,151 @@ +I64 ClusterNumNext(CDrv *dv,I64 c,I64 cnt=1) +{//Return next cnt'th cluster in chain. + Bool unlock; + DrvChk(dv); + if (cnt<=0) return c; + try { + unlock=DrvLock(dv); + switch (dv->type) { + case DVT_ISO9660: + case DVT_REDSEA: + c+=cnt; + break; + case DVT_FAT32: + while (cnt-->0 && 0cur_map_blk[c & (BLK_SIZE/4-1)]; + } + if (!(0type) { + case DVT_REDSEA: + return c; + case DVT_ISO9660: + case DVT_FAT32: + return dv->data_area+c*dv->spc; + default: + throw('Drv'); + } +} + +I64 RClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks) +{//Accepts blk count, so padding on last cluster is not read. + I64 i; + Bool unlock; + DrvChk(dv); + if (blks<=0) return c; + try { + unlock=DrvLock(dv); + switch (dv->type) { + case DVT_ISO9660: + RBlks(dv,buf,dv->data_area+c*dv->spc,blks); + c+=(blks+dv->spc-1)/dv->spc; + break; + case DVT_REDSEA: + RBlks(dv,buf,c,blks); + c+=blks; + break; + case DVT_FAT32: + while (blks && 0dv->spc) + i=dv->spc; + RBlks(dv,buf,dv->data_area+c*dv->spc,i); + buf+=i<spc); +} + +I64 WClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks) +{//Accepts blk count, so padding on last cluster is not written. + I64 i; + Bool unlock; + DrvChk(dv); + if (blks<=0) return c; + try { + unlock=DrvLock(dv); + switch (dv->type) { + case DVT_REDSEA: + WBlks(dv,buf,c,blks); + c=0; + break; + case DVT_FAT32: + while (blks) { + if (!(0dv->spc) + i=dv->spc; + WBlks(dv,buf,dv->data_area+c*dv->spc,i); + buf+=i<spc); +} + +I64 ClustersAlloc(CDrv *dv,I64 c=0,I64 cnt=1,Bool contiguous=FALSE) +{//Alloc cluster cnt into chain. +//c=0 means first cluster in chain + DrvChk(dv); + if (cnt<=0) return c; + switch (dv->type) { + case DVT_REDSEA: + return RedSeaAllocClusters(dv,cnt); + case DVT_FAT32: + if (contiguous) { + if (c) throw('File'); + return FAT32AllocContiguousClusters(dv,cnt); + } else + return FAT32AllocClusters(dv,c,cnt); + default: + throw('Drv'); + } +} diff --git a/Kernel/Dsk/DskCopy.CPP b/Kernel/Dsk/DskCopy.CPP new file mode 100644 index 0000000..ed70180 --- /dev/null +++ b/Kernel/Dsk/DskCopy.CPP @@ -0,0 +1,106 @@ +Bool CopySingleZ(U8 *f1,U8 *f2) //Just one file +{ + U8 *file_buf=NULL; + I64 size,attr=0,c; + CDirEntry de; + if (FileFind(f1,&de,FUF_JUST_FILES)) { + Free(de.full_name); + file_buf=FileRead(f1,&size,&attr); + attr=FileAttr(f2,attr); + if (file_buf) { + "Copying %s to %s\n",f1,f2; + c=FileWrite(f2,file_buf,size,de.datetime,attr); + Free(file_buf); + return ToBool(c); + } else + PrintErr("File not found.\n"); + } else + PrintErr("File not found.\n"); + return FALSE; +} + +#define COPY_BUF_BLKS 0x80 +Bool CopySingle(U8 *f1,U8 *f2) //Just one file +{ + U8 *absf1=FileNameAbs(f1),*absf2=FileNameAbs(f2),*buf; + I64 cnt,n,size,attr1=FileAttr(f1),attr2=FileAttr(f2),i,j; + CFile *in_file=NULL,*out_file=NULL; + if (!StrCmp(absf1,absf2)) {//onto self? + Free(absf1); + Free(absf2); + return FALSE; + } + Free(absf1); + Free(absf2); + if (attr1!=attr2) + return CopySingleZ(f1,f2); + buf=MAlloc(COPY_BUF_BLKS<>BLK_SIZE_BITS; + if (attr2 & RS_ATTR_CONTIGUOUS) + out_file=FOpen(f2,"wc",cnt); + else + out_file=FOpen(f2,"w",cnt); + if (out_file) { + "Copying %s to %s\n",f1,f2; + j=size; + while (cnt>0) { + if (cnt>COPY_BUF_BLKS) { + n=COPY_BUF_BLKS; + i=n<flags|=FF_USE_OLD_DATETIME; + out_file->de.datetime=in_file->de.datetime; + out_file->de.size=size; + out_file->de.attr=FileAttr(f2,in_file->de.attr); + FClose(out_file); + FClose(in_file); + Free(buf); + return TRUE; + } else + PrintErr("File not found.\n"); + FClose(in_file); + } else + PrintErr("File not found.\n"); + Free(buf); + return FALSE; +} + +I64 Del(U8 *files_find_mask,Bool make_mask=FALSE, + Bool del_dir=FALSE,Bool print_msg=TRUE) +{//Delete files. + I64 result=0; + CDirContext *dirc; + if (dirc=DirContextNew(files_find_mask,make_mask)) { + switch (dirc->dv->type) { + case DVT_REDSEA: + result=RedSeaFilesDel(dirc->dv,Fs->cur_dir,dirc->mask, + 0,del_dir,print_msg); + break; + case DVT_FAT32: + result=FAT32FilesDel(dirc->dv,Fs->cur_dir,dirc->mask, + 0,del_dir,print_msg); + break; + case DVT_ISO9660: + PrintErr("Not Writable\n"); + break; + default: + PrintErr("File System Not Supported\n"); + } + DirContextDel(dirc); + } + return result; +} diff --git a/Kernel/Dsk/DskDir.CPP b/Kernel/Dsk/DskDirA.CPP similarity index 70% rename from Kernel/Dsk/DskDir.CPP rename to Kernel/Dsk/DskDirA.CPP index fca22d2..02d99f7 100644 --- a/Kernel/Dsk/DskDir.CPP +++ b/Kernel/Dsk/DskDirA.CPP @@ -62,7 +62,7 @@ U0 DirTreeDel2(CDirEntry *tempde) I64 DirEntryCompareName(CDirEntry *e1,CDirEntry *e2) { U8 buf1[CDIR_FILENAME_LEN],buf2[CDIR_FILENAME_LEN], - buf3[CDIR_FILENAME_LEN],buf4[CDIR_FILENAME_LEN]; + buf3[CDIR_FILENAME_LEN],buf4[CDIR_FILENAME_LEN]; I64 d1=0,d2=0; if (e1->attr & RS_ATTR_DIR) d1=1; @@ -164,35 +164,6 @@ CDirEntry *DirFilesFlatten(CDirEntry *tempde,CDirEntry **_result,I64 fuf_flags) return _result; } -CDirEntry *SysFilesFind(U8 *files_find_mask,I64 fuf_flags) -{ - CDrv *dv=Fs->cur_dv; - CDirEntry *result=NULL; - DrvChk(dv); - switch (dv->type) { - case DVT_REDSEA: - result=RedSeaFilesFind(files_find_mask,fuf_flags); - break; - case DVT_FAT32: - result=FAT32FilesFind(files_find_mask,fuf_flags); - break; - case DVT_ISO9660: - result=ISO1FilesFind(files_find_mask,fuf_flags); - break; - default: - PrintErr("File System Not Supported\n"); - result=NULL; - } - if (result) { - DirFilesSort(&result,SK_NAME); - if (fuf_flags&(FUF_FLATTEN_TREE|FUF_JUST_FILES)) - DirFilesFlatten(result,&result,fuf_flags); - if (fuf_flags&FUF_CLUSTER_ORDER) - DirFilesSort(&result,SK_CLUSTER); - } - return result; -} - U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE) {//Put $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ file,line link to StdOut, $LK,"DocPut",A="MN:DocPut"$. U8 *buf; @@ -203,7 +174,7 @@ U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE) else "%s",filename; } else { - //LK_DOC,LK_DOC_ANCHOR,LK_DOC_FIND,LK_DOC_LINE +//LK_DOC,LK_DOC_ANCHOR,LK_DOC_FIND,LK_DOC_LINE if (filename[0]=='A'&&filename[2]==':') { if (line) //See $LK,"SpriteEdText",A="MN:SpriteEdText"$() "$$LK,\"%s,%04d\",A=\"AL:%s,%d\"$$",filename+3,line,filename+3,line; @@ -239,58 +210,3 @@ U0 PutDirLink(U8 *dirname) Free(buf); } } - -I64 Dir2(U8 *files_find_mask,I64 fuf_flags,Bool full) -{ - CDirEntry *tempde1=NULL,*tempde2; - U8 *st; - CDateStruct ds; - I64 csize=0xFFFF,c=0xFFFF,result=0; - tempde1=SysFilesFind(files_find_mask,fuf_flags); - if (!(st=CurDir)) - PrintErr("Invalid Drive\n"); - else { - if (tempde1) { - //Find max columns - tempde2=tempde1; - while (tempde2) { - if (tempde2->size>csize) - csize=tempde2->size; - if (tempde2->cluster>c) - c=tempde2->cluster; - tempde2=tempde2->next; - } - csize=Bsr(csize)/4+1; - c=Bsr(c)/4+1; - - "$$MA,T=\"Directory\",LM=\"PopUpCd;Dir;\n\"$$ of %s\n",st; - if (full) - "__DATE__ __TIME__ %*ts %*ts\n", - csize,"SIZE",c,"CLUSTER"; - else - "DATE_ TIME_ %*ts\n",csize,"SIZE"; - while (tempde1) { - tempde2=tempde1->next; - result++; - if (full) - "%D %T %0*tX %0*tX ",tempde1->datetime,tempde1->datetime, - csize,tempde1->size,c,tempde1->cluster; - else { - Date2Struct(&ds,tempde1->datetime+local_time_offset); - "%02d/%02d %02d:%02d %0*tX ",ds.mon,ds.day_of_mon,ds.hour,ds.min, - csize,tempde1->size; - } - if (tempde1->attr & RS_ATTR_DIR) - PutDirLink(tempde1->name); - else - PutFileLink(tempde1->name); - '\n'; - DirEntryDel(tempde1); - tempde1=tempde2; - } - } else - "No matching entries\n"; - Free(st); - } - return result; -} diff --git a/Kernel/Dsk/DskDirB.CPP b/Kernel/Dsk/DskDirB.CPP new file mode 100644 index 0000000..d9a22ba --- /dev/null +++ b/Kernel/Dsk/DskDirB.CPP @@ -0,0 +1,180 @@ +Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE) +{//Change directory. Optionally, make directories, too. + I64 maxlen,cur_dir_cluster=0; + U8 *chg_to_buf,*new_cur_dir,*buf; + CDrv *dv; + Bool result=TRUE; + if (!dirname) + dirname="::/Home"; + else if (!*dirname) + return TRUE; + if (dirname[1]==':') { + if (*dirname==':') { + if (Fs->cur_dv!=Let2Drv(':') && !Drv(*dirname)) + return FALSE; + } else if (Fs->cur_dv!=Let2Drv(*dirname) && !Drv(*dirname)) + return FALSE; + dirname+=2; + } + if (*dirname=='/' || !*dirname || !Fs->cur_dir) { + Free(Fs->cur_dir); + Fs->cur_dir=StrNew("/"); + if (*dirname=='/') + dirname++; + } + chg_to_buf=MStrUtil(dirname, + SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); + maxlen=StrLen(Fs->cur_dir)+1+StrLen(chg_to_buf)+1; + new_cur_dir=MAlloc(maxlen); + buf=MAlloc(maxlen); + StrCpy(new_cur_dir,Fs->cur_dir); + while (*chg_to_buf && result) { + StrFirstRem(chg_to_buf,"/",buf); + if (!*buf) + StrCpy(new_cur_dir,"/"); + else if (!StrCmp(buf,"..")) { + StrLastRem(new_cur_dir,"/"); + if (!*new_cur_dir) + StrCpy(new_cur_dir,"/"); + } else if (StrCmp(buf,".") && *buf) { + dv=Fs->cur_dv; + cur_dir_cluster=Name2DirCluster(dv,new_cur_dir); + switch (dv->type) { + case DVT_REDSEA: + result=RedSeaCd(buf,cur_dir_cluster); + break; + case DVT_FAT32: + result=FAT32Cd(buf,cur_dir_cluster); + break; + case DVT_ISO9660: + result=ISO1Cd(buf,cur_dir_cluster); + break; + default: + PrintErr("File System Not Supported\n"); + result=FALSE; + } + if (!result && make_dirs) { + Free(Fs->cur_dir); + Fs->cur_dir=StrNew(new_cur_dir); + result=MkDir(buf); + } + if (result) { + if (StrCmp(new_cur_dir,"/")) + CatPrint(new_cur_dir,"/"); + CatPrint(new_cur_dir,buf); + } + } + } + Free(Fs->cur_dir); + Fs->cur_dir=StrNew(new_cur_dir); + Free(buf); + Free(chg_to_buf); + Free(new_cur_dir); + return result; +} + +Bool IsDir(U8 *dir_name) +{//Is a str a valid, existing Dir? + U8 *mask=MStrPrint("%s/*",dir_name); + Bool result,old_silent=Silent; + CDirContext *dirc; + if (dirc=DirContextNew(mask)) { + DirContextDel(dirc); + result=TRUE; + } else + result=FALSE; + Free(mask); + Silent(old_silent); + return result; +} + +I64 Dir(U8 *files_find_mask,Bool full) +{//List directory. + CDirEntry *tempde1=NULL,*tempde2; + U8 *st; + CDateStruct ds; + I64 csize=0xFFFF,c=0xFFFF,result=0; + tempde1=FilesFind(files_find_mask); + if (!(st=CurDir)) + PrintErr("Invalid Drive\n"); + else { + if (tempde1) { +//Find max columns + tempde2=tempde1; + while (tempde2) { + if (tempde2->size>csize) + csize=tempde2->size; + if (tempde2->cluster>c) + c=tempde2->cluster; + tempde2=tempde2->next; + } + csize=Bsr(csize)/4+1; + c=Bsr(c)/4+1; + + "$$MA,T=\"Directory\",LM=\"PopUpCd;Dir;\n\"$$ of %s\n",st; + if (full) + "__DATE__ __TIME__ %*ts %*ts\n", + csize,"SIZE",c,"CLUSTER"; + else + "DATE_ TIME_ %*ts\n",csize,"SIZE"; + while (tempde1) { + tempde2=tempde1->next; + result++; + if (full) + "%D %T %0*tX %0*tX ",tempde1->datetime,tempde1->datetime, + csize,tempde1->size,c,tempde1->cluster; + else { + Date2Struct(&ds,tempde1->datetime+local_time_offset); + "%02d/%02d %02d:%02d %0*tX ",ds.mon,ds.day_of_mon,ds.hour,ds.min, + csize,tempde1->size; + } + if (tempde1->attr & RS_ATTR_DIR) + PutDirLink(tempde1->name); + else + PutFileLink(tempde1->name); + '\n'; + DirEntryDel(tempde1); + tempde1=tempde2; + } + } else + "No matching entries\n"; + Free(st); + } + return result; +} + +Bool MkDir(U8 *filename) +{//Make directory. $LK,"Cd",A="MN:Cd"$() can also make directories. + U8 *name; + CDirContext *dirc; + Bool result=FALSE; + if (FileFind(filename,,FUF_JUST_DIRS)) + return FALSE; + if (dirc=DirContextNew(filename)) { + if (*dirc->mask) { + if (!FileNameChk(dirc->mask)) + PrintErr("Invalid FileName.\n"); + else { + "Make Directory:%s\n",filename; + name=MStrUtil(dirc->mask, + SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); + switch (dirc->dv->type) { + case DVT_REDSEA: + result=RedSeaMkDir(dirc->dv,Fs->cur_dir,name); + break; + case DVT_FAT32: + result=FAT32MkDir(dirc->dv,Fs->cur_dir,name); + break; + case DVT_ISO9660: + PrintErr("Not Writable\n"); + break; + default: + PrintErr("File System Not Supported\n"); + } + Free(name); + } + } + DirContextDel(dirc); + } + return result; +} diff --git a/Kernel/Dsk/DskDirContext.CPP b/Kernel/Dsk/DskDirContext.CPP new file mode 100644 index 0000000..5d385ec --- /dev/null +++ b/Kernel/Dsk/DskDirContext.CPP @@ -0,0 +1,73 @@ +U0 DirContextDel(CDirContext *dirc) +{//Change back to old cur_dir and drv. + CBlkDev *bd; + if (!dirc) return; + bd=dirc->old_dv->bd; + if (!(bd->flags & BDF_INIT_IN_PROGRESS)) { + if (dirc->old_dir) { + Drv(Drv2Let(dirc->old_dv)); + Cd(dirc->old_dir); + } + } else { + Fs->cur_dv=dirc->old_dv; + Free(Fs->cur_dir); + Fs->cur_dir=StrNew("/"); + } + Free(dirc->old_dir); + Free(dirc->mask); + Free(dirc); +} + +CDirContext *DirContextNew(U8 *_mask,Bool make_mask=FALSE, + Bool make_dirs=FALSE,Bool no_mask=FALSE) +{//Save cur_dir and drv. Change to new dir. + Bool valid=TRUE,old_silent; + U8 *buf,*mask,*temp_mask; + CDirContext *dirc=CAlloc(sizeof(CDirContext)); + mask=MStrUtil(_mask,SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS); + temp_mask=mask; + dirc->old_dir=StrNew(Fs->cur_dir); + dirc->old_dv=Fs->cur_dv; + if (*mask && mask[1]==':') { + if (Fs->cur_dv!=Let2Drv(*mask) && !Drv(*mask)) + valid=FALSE; + mask+=2; + } + dirc->dv=Fs->cur_dv; + DrvChk(dirc->dv); + buf=MAlloc(StrLen(mask)+2); + StrCpy(buf,mask); + dirc->mask=MAlloc(StrLen(mask)+2); + if (no_mask) + *dirc->mask=0; + else + StrLastRem(buf,"/",dirc->mask); + if (*mask=='/' && !*buf) + StrCpy(buf,"/"); +//If began with Dir, change to Dir. + if (*buf && !Cd(buf,make_dirs)) + valid=FALSE; + if (valid && make_mask) { + if (!*dirc->mask) { + Free(dirc->mask); + dirc->mask=StrNew("*"); + } else { + if (!make_dirs || FileNameChk(dirc->mask)) { + old_silent=Silent; +//Try mask to see if Dir. If Dir, change to dir and set to "*". + if (Cd(dirc->mask,make_dirs)) { + Free(dirc->mask); + dirc->mask=StrNew("*"); + } + Silent(old_silent); + } + } + } + Free(buf); + Free(temp_mask); + if (!valid) { + DirContextDel(dirc); + dirc=NULL; + } + return dirc; +} diff --git a/Kernel/Dsk/DskDrv.CPP b/Kernel/Dsk/DskDrv.CPP new file mode 100644 index 0000000..9f9cf17 --- /dev/null +++ b/Kernel/Dsk/DskDrv.CPP @@ -0,0 +1,289 @@ +Bool DrvLock(CDrv *dv) +{//Make this task have exclusive access to drv & BlkDev. + DrvChk(dv); + BlkDevLock(dv->bd); + if (!Bt(&dv->locked_flags,DVlf_LOCKED) || dv->owning_task!=Fs) { + while (LBts(&dv->locked_flags,DVlf_LOCKED)) + Yield; + dv->owning_task=Fs; + return TRUE; + } else + return FALSE; +} + +Bool DrvUnlock(CDrv *dv,Bool rst=FALSE) +{//Release exclusive lock on access to drv & BlkDev. + DrvChk(dv); + if (Bt(&dv->locked_flags,DVlf_LOCKED) && dv->owning_task==Fs) { + BlkDevUnlock(dv->bd,rst); + dv->owning_task=NULL; + LBtr(&dv->locked_flags,DVlf_LOCKED); + Yield; //Prevent deadlock + return TRUE; + } else + return FALSE; +} + +U0 DrvsRelease() +{//When task dies, release all owned drvs. + I64 i; + CDrv *dv; + for (i=0;iowning_task==Fs && dv->dv_signature==DRV_SIGNATURE_VAL) + DrvUnlock(dv,TRUE); + } +} + +CDrv *DrvMakeFree(U8 drv_let) +{//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$(). +//!!! drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv. + I64 i=ToUpper(drv_let)-'A'; + CDrv *result; + if (!(0<=idrv_let='A'+i; + return result; +} + +CDrv *DrvNextFree(U8 first_drv_let='C') +{//Locate free slot for new drv, like during $LK,"Mount",A="MN:Mount"$(). +//!!! first_drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv. + I64 i=ToUpper(first_drv_let)-'A'; + if (!(0<=icur_map_blk); + dv->cur_map_blk=AMAlloc(BLK_SIZE); + dv->cur_map_blk_num=0; + dv->map_blk_dirty=0; + RBlks(dv,dv->cur_map_blk,dv->map1,1); +} + +U0 DrvMapBlkClean(CDrv *dv,I64 map_select=3) +{ + if ((dv->type==DVT_FAT32 || dv->type==DVT_REDSEA)&&Bt(&dv->map_blk_dirty,0)) { + if (dv->map1==dv->map2) { + WBlks(dv,dv->cur_map_blk,dv->map1+dv->cur_map_blk_num,1); + LBtr(&dv->map_blk_dirty,0); + } else { + if (map_select==3 || !map_select) + WBlks(dv,dv->cur_map_blk,dv->map1+dv->cur_map_blk_num,1); + if (map_select==3 || map_select==1) { + WBlks(dv,dv->cur_map_blk,dv->map2+dv->cur_map_blk_num,1); + LBtr(&dv->map_blk_dirty,0); + } + } + } +} + +U0 DrvMapBlkSet(CDrv *dv,I64 c,I64 map_select=3) +{ + I64 map_blk_num; + if (c==INVALID_CLUSTER) + throw('Drv'); + switch (dv->type) { + case DVT_FAT32: + map_blk_num=c>>(BLK_SIZE_BITS-2); + break; + case DVT_REDSEA: + map_blk_num=(c-dv->data_area)>>(BLK_SIZE_BITS+3); + break; + default: + throw('Drv'); + } + if (map_blk_num!=dv->cur_map_blk_num) { + DrvMapBlkClean(dv,map_select); + dv->cur_map_blk_num=map_blk_num; + if (map_select==3 || !map_select) + RBlks(dv,dv->cur_map_blk,dv->map1+dv->cur_map_blk_num,1); + else + RBlks(dv,dv->cur_map_blk,dv->map2+dv->cur_map_blk_num,1); + } +} + +U0 DrvChk(CDrv *dv) +{//Check for valid drv. Throw exception. + if (!dv || dv->dv_signature!=DRV_SIGNATURE_VAL) + throw('Drv'); +} + +U8 Drv2Let(CDrv *dv=NULL) +{//Drv ptr to Drv letter. + if (!dv) + dv=Fs->cur_dv; + DrvChk(dv); + return dv->drv_let; +} + +CDrv *Let2Drv(U8 drv_let=0) +{//Drv letter to Drv ptr. + CDrv *dv; + if (!drv_let) + dv=Fs->cur_dv; + else { + if (drv_let==':') + drv_let=dsk.boot_drv_let; + drv_let=ToUpper(drv_let); + if (!('A'<=drv_let<='Z')) + throw('Drv'); + dv=dsk.let_to_drv[drv_let-'A']; + } + DrvChk(dv); + return dv; +} + +Bool DrvIsWritable(U8 drv_let=0) +{//Is drive writable? + CBlkDev *bd=Let2BlkDev(drv_let); + if (bd->flags & BDF_READ_ONLY) + return FALSE; + else + return TRUE; +} + +U0 DskCacheInvalidate(CDrv *dv) +{//Needed for removable media. Called by $LK,"ChgDsk",A="MN:ChgDsk"$(). + Bool unlock; + CBlkDev *bd=dv->bd; + DrvChk(dv); + try { + unlock=DrvLock(dv); + BlkDevInit(bd); + if (bd->flags & BDF_READ_CACHE) + DskCacheInvalidate2(dv); + if (dv->type==DVT_ISO9660 && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) + ISODrvInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); +} + +U0 ChgDsk(U8 drv_let=0) +{//Change disk. (Needed for removable media.) + CDrv *dv=Let2Drv(drv_let); + CBlkDev *bd=dv->bd; + Bool old_preempt=Preempt; + if (!(bd->flags&BDF_INITIALIZED)) + BlkDevInit(bd); + else if (bd->flags&BDF_REMOVABLE) + DskCacheInvalidate(dv); + Drv(drv_let); + RedSeaFreeFreeLst(dv); + Preempt(old_preempt); +} + +Bool MapDrv(U8 drv_let,CDrv *dv) +{//Make drive letter map to another. + drv_let=ToUpper(drv_let); + if ('A'<=drv_let<='Z') { + dsk.let_to_drv[drv_let-'A']=dv; + dv->drv_let=drv_let; + return TRUE; + } else + return FALSE; +} + +Bool Drv(U8 drv_let) +{//Set drive. You can set drive with $LK,"Cd",A="MN:Cd"$() as well. + CDrv *dv=Let2Drv(drv_let); + CBlkDev *bd=dv->bd; + BlkDevChk(bd); + if (dv!=Fs->cur_dv) { + if (bd->flags & BDF_REMOVABLE && !(bd->flags & BDF_INITIALIZED)) + ChgDsk(Drv2Let(dv)); + if (bd->type==BDT_RAM) + BlkDevInit(bd); + } + Fs->cur_dv=dv; + Free(Fs->cur_dir); + Fs->cur_dir=StrNew("/"); + switch (dv->type) { + case DVT_REDSEA: + case DVT_FAT32: + case DVT_ISO9660: + return TRUE; + default: + PrintErr("File System Not Supported\n"); + return FALSE; + } +} + +U8 *DrvSerialNum(U8 drv_let=0) +{//20 bytes max. + CBlkDev *bd=Let2BlkDev(drv_let); + U16 *st,*result=NULL; + I64 i; + if (bd->dev_id_record) { + st=CAlloc(20+1); + for (i=0;i<10;i++) + st[i]=EndianU16(bd->dev_id_record[10+i]); + result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); + Free(st); + } + return result; +} + +U8 *DrvModelNum(U8 drv_let=0) +{//40 bytes max. + CBlkDev *bd=Let2BlkDev(drv_let); + U16 *st,*result=NULL; + I64 i; + if (bd->dev_id_record) { + st=CAlloc(40+1); + for (i=0;i<20;i++) + st[i]=EndianU16(bd->dev_id_record[27+i]); + result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING); + Free(st); + } + return result; +} + +U0 DrvRep() +{//Drive report. + CDrv *dv; + CBlkDev *bd; + I64 i,drv_let; + U8 *st; + "\nDefined Drives:\n\n"; + for (i=0,dv=dsk.drvs;idv_signature==DRV_SIGNATURE_VAL) { + bd=dv->bd; + drv_let=Drv2Let(dv); + if (Bt(&dv->type,DVTf_DISABLE)) + "$$RED$$X"; + else if (drv_let==dsk.boot_drv_let) + "$$GREEN$$:"; + else + '' CH_SPACE; + "$$PURPLE$$%C %-8Z %-9Z %04X %04X %02X$$FG$$\n", + drv_let,dv->type.u16[0],"ST_DRV_TYPES", + bd->type,"ST_BLKDEV_TYPES",bd->base0,bd->base1,bd->unit; + if (st=DrvModelNum(drv_let)) { + " $$CYAN$$Model# :%s$$FG$$\n",st; + Free(st); + } + if (st=DrvSerialNum(drv_let)) { + " $$CYAN$$Serial#:%s$$FG$$\n",st; + Free(st); + } + " %016X-%016X\n", + dv->base_offset,dv->base_offset+dv->size-1; + dv->base_offset,dv->base_offset+dv->size-1; + } + } +} diff --git a/Kernel/Dsk/DskFile.CPP b/Kernel/Dsk/DskFile.CPP new file mode 100644 index 0000000..04d3ec6 --- /dev/null +++ b/Kernel/Dsk/DskFile.CPP @@ -0,0 +1,139 @@ +U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL) +{//Read whole file from disk. + CHashGeneric *temph; + U8 *absname,*altname,*curname,*result=NULL; + I64 i,size=0,attr=0; + CDirContext *dirc; + CArcCompress *arc; + absname=FileNameAbs(filename); + altname=ToggleZorNotZ(absname); + if ((temph=HashFind(absname,adam_task->hash_table,HTT_FILE))|| + (temph=HashFind(altname,adam_task->hash_table,HTT_FILE))) { + size=temph->user_data1; + result=MAlloc(size+1); + MemCpy(result,temph->user_data0,size); + result[size]=0; //Terminate + attr=FileAttr(temph->str,attr); + } else { + for (i=0;i<2 && !result;i++) {//Try name, then altname + if (!i) + curname=absname; + else + curname=altname; + if (dirc=DirContextNew(curname)) { + switch (dirc->dv->type) { + case DVT_REDSEA: + result=RedSeaFileRead(dirc->dv,Fs->cur_dir,dirc->mask, + &size,&attr); + break; + case DVT_FAT32: + result=FAT32FileRead(dirc->dv,Fs->cur_dir,dirc->mask, + &size,&attr); + break; + case DVT_ISO9660: + result=ISO1FileRead(dirc->dv,Fs->cur_dir,dirc->mask, + &size,&attr); + break; + default: + PrintErr("File System Not Supported\n"); + } + DirContextDel(dirc); + } + } + + //Search parent directories. + for (i=0;i<2 && !result;i++) {//Try name, then altname + if (!i) + curname=absname; + else + curname=altname; + if (dirc=DirContextNew(curname)) { + while (!result && StrCmp(Fs->cur_dir,"/")) { + Cd(".."); + switch (Fs->cur_dv->type) { + case DVT_REDSEA: + result=RedSeaFileRead(dirc->dv,Fs->cur_dir,dirc->mask, + &size,&attr); + break; + case DVT_FAT32: + result=FAT32FileRead(dirc->dv,Fs->cur_dir,dirc->mask, + &size,&attr); + break; + case DVT_ISO9660: + result=ISO1FileRead(dirc->dv,Fs->cur_dir,dirc->mask, + &size,&attr); + break; + default: + PrintErr("File System Not Supported\n"); + } + } + DirContextDel(dirc); + } + } + if (!result) { + "%s ",filename; + PrintErr("File not found.\n"); + } + if (result && attr & RS_ATTR_RESIDENT) + HashGenericAdd(curname,HTT_FILE, + AMAllocIdentical(result),size,0,adam_task); + } + if (result && attr & RS_ATTR_COMPRESSED) { + arc=result; + size=arc->expanded_size; + result=ExpandBuf(arc); + Free(arc); + } + if (_attr) *_attr=attr; + if (_size) *_size=size; + Free(absname); + Free(altname); + return result; +} + +I64 FileWrite(U8 *filename,U8 *fbuf, + I64 size,CDate cdt=0,I64 attr=0) +{//Write whole file to disk. + I64 c=0; + CHashGeneric *temph; + CDirContext *dirc; + U8 *fbuf2,*absname=FileNameAbs(filename); + if (dirc=DirContextNew(filename,FALSE,TRUE)) { + attr=FileAttr(dirc->mask,attr); + if (attr&RS_ATTR_COMPRESSED) { + fbuf=CompressBuf(fbuf,size); + size=fbuf(CArcCompress *)->compressed_size; + fbuf2=fbuf; + } else + fbuf2=NULL; + if (!cdt) cdt=Now; + switch (dirc->dv->type) { + case DVT_REDSEA: + c=RedSeaFileWrite(dirc->dv,Fs->cur_dir,dirc->mask,fbuf, + size,cdt,attr); + break; + case DVT_FAT32: + c=FAT32FileWrite(dirc->dv,Fs->cur_dir,dirc->mask,fbuf, + size,cdt,attr); + break; + case DVT_ISO9660: + PrintErr("Not Writable\n"); + break; + default: + PrintErr("File System Not Supported\n"); + } + if (temph=HashFind(absname,adam_task->hash_table,HTT_FILE)) { + if (attr & RS_ATTR_RESIDENT) { + Free(temph->user_data0); + temph->user_data0=AMAllocIdentical(fbuf); + temph->user_data1=size; + } else + HashRemDel(temph,adam_task->hash_table); + } else if (attr & RS_ATTR_RESIDENT) + HashGenericAdd(absname,HTT_FILE,AMAllocIdentical(fbuf),size,0,adam_task); + Free(fbuf2); + DirContextDel(dirc); + } + Free(absname); + return c; +} diff --git a/Kernel/Dsk/DskFind.CPP b/Kernel/Dsk/DskFind.CPP new file mode 100644 index 0000000..0368519 --- /dev/null +++ b/Kernel/Dsk/DskFind.CPP @@ -0,0 +1,161 @@ +CDirEntry *FilesFind2(U8 *files_find_mask,I64 fuf_flags) +{ + CDrv *dv=Fs->cur_dv; + CDirEntry *result=NULL; + DrvChk(dv); + switch (dv->type) { + case DVT_REDSEA: + result=RedSeaFilesFind(files_find_mask,fuf_flags); + break; + case DVT_FAT32: + result=FAT32FilesFind(files_find_mask,fuf_flags); + break; + case DVT_ISO9660: + result=ISO1FilesFind(files_find_mask,fuf_flags); + break; + default: + PrintErr("File System Not Supported\n"); + result=NULL; + } + if (result) { + DirFilesSort(&result,SK_NAME); + if (fuf_flags&(FUF_FLATTEN_TREE|FUF_JUST_FILES)) + DirFilesFlatten(result,&result,fuf_flags); + if (fuf_flags&FUF_CLUSTER_ORDER) + DirFilesSort(&result,SK_CLUSTER); + } + return result; +} + +CDirEntry *FilesFind(U8 *files_find_mask,I64 fuf_flags=0) +{/* See $LK,"::/Doc/FileUtils.TXT"$. + +Find files and make a directory tree in memory. + +When done, you free with $LK,"DirEntryDel",A="MN:DirEntryDel"$(),$LK,"DirEntryDel2",A="MN:DirEntryDel2"$(), +$LK,"DirTreeDel",A="MN:DirTreeDel"$() or $LK,"DirTreeDel2",A="MN:DirTreeDel2"$(). + +*/ + CDirEntry *result; + CDirContext *dirc; + if (fuf_flags&~FUG_FILES_FIND) + throw('FUF'); + if (fuf_flags&FUF_SINGLE) { + result=MAlloc(sizeof(CDirEntry)); + if (!FileFind(files_find_mask,result)) { + Free(result); + return NULL; + } + } else if (dirc=DirContextNew(files_find_mask,TRUE)) { + result=FilesFind2(dirc->mask,fuf_flags); + DirContextDel(dirc); + } else + return NULL; + return result; +} + +Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0) +{//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$, $LK,"FUF_Z_OR_NOT_Z",A="MN:FUF_Z_OR_NOT_Z"$, $LK,"FUF_SCAN_PARENTS",A="MN:FUF_SCAN_PARENTS"$ +//If you pass _de, you must Free(_de->full_name); + I64 i,j,cur_dir_cluster; + U8 *altname,*curname,*full_name=NULL; + CDirEntry de; + CDirContext *dirc; + Bool result=FALSE,old_silent; + if (fuf_flags&~FUG_FILE_FIND) + throw('FUF'); + if (!filename) return FALSE; + altname=ToggleZorNotZ(filename); + if (fuf_flags&FUF_Z_OR_NOT_Z) + j=2; + else + j=1; + for (i=0;idv,Fs->cur_dir); + switch (dirc->dv->type) { + case DVT_REDSEA: + result=RedSeaFileFind(dirc->dv,cur_dir_cluster,dirc->mask, + &de,fuf_flags); + break; + case DVT_FAT32: + result=FAT32FileFind(dirc->dv,cur_dir_cluster,dirc->mask, + &de,fuf_flags); + break; + case DVT_ISO9660: + result=ISO1FileFind(dirc->dv,cur_dir_cluster,dirc->mask, + &de,fuf_flags); + break; + default: + PrintErr("File System Not Supported\n"); + } + if (result && _de) { + if (StrCmp(Fs->cur_dir,"/")) + full_name=MStrPrint("%C:%s/%s", + Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name); + else + full_name=MStrPrint("%C:/%s",Drv2Let(Fs->cur_dv),de.name); + } + DirContextDel(dirc); + } + } + for (i=0;idv,Fs->cur_dir); + while (!result && StrCmp(Fs->cur_dir,"/")) { + Cd(".."); + cur_dir_cluster=Name2DirCluster(dirc->dv,Fs->cur_dir); + switch (dirc->dv->type) { + case DVT_REDSEA: + result=RedSeaFileFind(dirc->dv,cur_dir_cluster, + dirc->mask,&de,fuf_flags); + break; + case DVT_FAT32: + result=FAT32FileFind(dirc->dv,cur_dir_cluster, + dirc->mask,&de,fuf_flags); + break; + case DVT_ISO9660: + result=ISO1FileFind(dirc->dv,cur_dir_cluster, + dirc->mask,&de,fuf_flags); + break; + default: + PrintErr("File System Not Supported\n"); + } + } + if (result && _de) { + if (StrCmp(Fs->cur_dir,"/")) + full_name=MStrPrint("%C:%s/%s", + Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name); + else + full_name=MStrPrint("%C:/%s", + Drv2Let(Fs->cur_dv),de.name); + } + DirContextDel(dirc); + } + } + if (_de) { + if (result) { + MemCpy(_de,&de,sizeof(CDirEntry)); + _de->full_name=full_name; + } else + MemSet(_de,0,sizeof(CDirEntry)); + } + Free(altname); + return result; +} diff --git a/Kernel/Dsk/DskFmt.CPP b/Kernel/Dsk/DskFmt.CPP new file mode 100644 index 0000000..18cae53 --- /dev/null +++ b/Kernel/Dsk/DskFmt.CPP @@ -0,0 +1,90 @@ +Bool DrvTypeSet(U8 drv_let,I64 type=DVT_REDSEA) +{//Very dangerous + I64 i,j,ext_base,drv_num,offset,cur_type; + CMasterBoot mbr; + CBlkDev *bd=Let2BlkDev(drv_let); + drv_num=bd->first_drv_let-'A'; + switch (bd->type) { + case BDT_ATA: + offset=0; + ext_base=INVALID_CLUSTER; + while (TRUE) { + ATAReadBlks(bd,&mbr,offset,1); + j=-1; + for (i=0;i<4;i++) { + cur_type=mbr.p[i].type; + if (cur_type) { + if (cur_type==5 || cur_type==15) + j=i; + else { + if (drv_num+'A'==ToUpper(drv_let)) { + switch (type) { + case DVT_REDSEA: + mbr.p[i].type=MBR_PT_REDSEA; + break; + case DVT_FAT32: + mbr.p[i].type=MBR_PT_FAT32a; + break; + default: + throw('Drv'); + } + mbr.p[i].active=0x80; + ATAWriteBlks(bd,&mbr,offset,1); + return TRUE; + } + drv_num++; + } + } + } + if (j<0) + break; + if (!mbr.p[j].offset) + break; + if (ext_base==INVALID_CLUSTER) { + offset=mbr.p[j].offset; + ext_base=offset; + } else + offset=mbr.p[j].offset+ext_base; + } + break; + } +} + +U0 Fmt(I64 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=DVT_FAT32) +{//Format hard drive or RAM drive. +//$BK,1$Warning:$BK,0$ Destroys all previous info. + //quick=FALSE means fill entire drive with zeros. + //Choose $LK,"DVT_FAT32",A="MN:DVT_FAT32"$ or $LK,"DVT_REDSEA",A="MN:DVT_REDSEA"$. + //You don't format a CD-ROM with this. + CDrv *dv=Let2Drv(drv_let); + Bool old_silent=IsSilent; + if (confirm && !AreYouSure) + return; + if (!dv) { + PrintErr("Invalid Drive\n"); + return; + } + switch (type) { + case DVT_REDSEA: + Silent; + Drv(drv_let); + Silent(old_silent); + RedSeaFmt(drv_let,quick); + DskCacheInvalidate(Let2Drv(drv_let)); + Drv(drv_let); + break; + case DVT_FAT32: + Silent; + Drv(drv_let); + Silent(old_silent); + FAT32Fmt(drv_let,quick); + DskCacheInvalidate(Let2Drv(drv_let)); + Drv(drv_let); + break; + case DVT_ISO9660: + PrintErr("Not Writable\n"); + break; + default: + PrintErr("File System Not Supported\n"); + } +} diff --git a/Kernel/Dsk/DskStr.CPP b/Kernel/Dsk/DskStrA.CPP similarity index 79% rename from Kernel/Dsk/DskStr.CPP rename to Kernel/Dsk/DskStrA.CPP index b5bc7b2..0d6f3f4 100644 --- a/Kernel/Dsk/DskStr.CPP +++ b/Kernel/Dsk/DskStrA.CPP @@ -40,7 +40,7 @@ Bool IsDotC(U8 *filename) Bool FilesFindMatch(U8 *test_filename,U8 *files_find_mask,I64 fuf_flags=0) {//Does filename meet $LK,"Files Find",A="FI:::/Doc/FileUtils.TXT"$ mask? U8 *st1=StrNew(files_find_mask), - *st2=MAlloc(StrLen(files_find_mask)+1); + *st2=MAlloc(StrLen(files_find_mask)+1); Bool result=FALSE; while (TRUE) { StrFirstRem(st1,";",st2); @@ -52,19 +52,24 @@ Bool FilesFindMatch(U8 *test_filename,U8 *files_find_mask,I64 fuf_flags=0) } } else { if (WildMatch(test_filename,st2)) { - if (Bt(&fuf_flags,FUf_JUST_TXT) && !FilesFindMatch(test_filename,FILEMASK_TXT)) { + if (Bt(&fuf_flags,FUf_JUST_TXT) && + !FilesFindMatch(test_filename,FILEMASK_TXT)) { result=FALSE; break; - } else if (Bt(&fuf_flags,FUf_JUST_SRC) && !FilesFindMatch(test_filename,FILEMASK_SRC)) { + } else if (Bt(&fuf_flags,FUf_JUST_SRC) && + !FilesFindMatch(test_filename,FILEMASK_SRC)) { result=FALSE; break; - } else if (Bt(&fuf_flags,FUf_JUST_AOT) && !FilesFindMatch(test_filename,FILEMASK_AOT)) { + } else if (Bt(&fuf_flags,FUf_JUST_AOT) && + !FilesFindMatch(test_filename,FILEMASK_AOT)) { result=FALSE; break; - } else if (Bt(&fuf_flags,FUf_JUST_JIT) && !FilesFindMatch(test_filename,FILEMASK_JIT)) { + } else if (Bt(&fuf_flags,FUf_JUST_JIT) && + !FilesFindMatch(test_filename,FILEMASK_JIT)) { result=FALSE; break; - } else if (Bt(&fuf_flags,FUf_JUST_GRA) && !FilesFindMatch(test_filename,FILEMASK_GRA)) { + } else if (Bt(&fuf_flags,FUf_JUST_GRA) && + !FilesFindMatch(test_filename,FILEMASK_GRA)) { result=FALSE; break; } else @@ -79,74 +84,6 @@ Bool FilesFindMatch(U8 *test_filename,U8 *files_find_mask,I64 fuf_flags=0) return result; } -U0 DrvChk(CDrv *dv) -{//Check for valid drv. Throw exception. - if (!dv || dv->dv_signature!=DRV_SIGNATURE_VAL) - throw('Drv'); -} - -U8 Drv2Let(CDrv *dv=NULL) -{//Drv ptr to Drv letter. - if (!dv) - dv=Fs->cur_dv; - DrvChk(dv); - return dv->drv_let; -} - -CDrv *Let2Drv(U8 drv_let=0) -{//Drv letter to Drv ptr. - CDrv *dv; - if (!drv_let) - dv=Fs->cur_dv; - else { - if (drv_let==':') - drv_let=dsk.boot_drv_let; - drv_let=ToUpper(drv_let); - if (!('A'<=drv_let<='Z')) - throw('Drv'); - dv=dsk.let_to_drv[drv_let-'A']; - } - DrvChk(dv); - return dv; -} - -U0 BlkDevChk(CBlkDev *bd) -{//Check for valid BlkDev. Throw exception. - if (!bd || bd->bd_signature!=BD_SIGNATURE_VAL || - !(BDT_NULLtypebd; - BlkDevChk(bd); - return bd; -} - -Bool IsDrvWritable(U8 drv_let=0) -{//Is drive writable? - CBlkDev *bd=Let2BlkDev(drv_let); - if (bd->flags & BDF_READ_ONLY) - return FALSE; - else - return TRUE; -} - -U8 *CurDir(CTask *task=NULL,CTask *mem_task=NULL) -{//MAlloc copy of cur dir with drv letter. - U8 *st; - if (!task) task=Fs; - if (!task->cur_dir) - return NULL; - st=MAlloc(StrLen(task->cur_dir)+3,mem_task); - *st=Drv2Let(task->cur_dv); - st[1]=':'; - StrCpy(st+2,task->cur_dir); - return st; -} - U8 *DirNameAbs(U8 *_dirname) {//MAlloc absolute dir string with drv letter. I64 maxlen; @@ -229,7 +166,7 @@ U8 *FileNameAbs(U8 *_filename,I64 fuf_flags=0) Free(buf_file); Free(buf_dir); Free(free_filename); - if (fuf_flags&&FileFind(result,&de,fuf_flags|FUF_JUST_FILES)) { + if (fuf_flags && FileFind(result,&de,fuf_flags|FUF_JUST_FILES)) { Free(result); result=de.full_name; } @@ -260,7 +197,7 @@ CDirEntry *Cd2DirEntry(CDirEntry *tempde,U8 *abs_name) while (tempde) { i=StrLen(tempde->full_name); if (StrNCmp(tempde->full_name,abs_name,i)|| - i && tempde->full_name[i-1]!='/' && abs_name[i] && abs_name[i]!='/') + i && tempde->full_name[i-1]!='/' && abs_name[i] && abs_name[i]!='/') tempde=tempde->next; else if (StrLen(abs_name)==i) @@ -293,11 +230,40 @@ Bool FileNameChk(U8 *filename) } if (StrLen(filename)>=CDIR_FILENAME_LEN) return FALSE; while (*ptr) - if (!Bt(chars_bitmap_filename,*ptr++)) + if (!Bt(chars_bmp_filename,*ptr++)) return FALSE; return TRUE; } +U8 *ToggleZorNotZ(U8 *name) +{//MAlloc name with Z if not Z or vice versa. + U8 *result; + if (IsDotZ(name)) { + result=StrNew(name); + result[StrLen(name)-2]=0; + } else + result=MStrPrint("%s.Z",name); + return result; +} + +U8 *FileNameTempTxt() +{//Make pretty-safe temp filename in home dir. + return MStrPrint("::/Home/SysTemp%X.TXT.Z",GetTSC>>8&0xFFFFFFFF); +} + +U8 *CurDir(CTask *task=NULL,CTask *mem_task=NULL) +{//MAlloc copy of cur dir with drv letter. + U8 *st; + if (!task) task=Fs; + if (!task->cur_dir) + return NULL; + st=MAlloc(StrLen(task->cur_dir)+3,mem_task); + *st=Drv2Let(task->cur_dv); + st[1]=':'; + StrCpy(st+2,task->cur_dir); + return st; +} + U8 *DirFile(U8 *dirname,U8 *name=NULL,U8 *_extension=NULL) {/*Strips file from dirname, scans for file upward until found or returns default. @@ -321,7 +287,7 @@ returns default. st2=StrNew(st); st3=StrNew(st); StrLastRem(st2,"/",st3); - + if (name) result=MStrPrint("%s/%s%s",st,name,ext); else { @@ -332,7 +298,7 @@ returns default. } if (!dft) dft=StrNew(result); - if (!*ext&&(!name||!*name)||FileFind(result)) { + if (!*ext && (!name||!*name) || FileFind(result)) { Free(st3); Free(st2); Free(st); @@ -348,19 +314,3 @@ returns default. Free(ext); return dft; } - -U8 *ToggleZorNotZ(U8 *name) -{//MAlloc name with Z if not Z or vice versa. - U8 *result; - if (IsDotZ(name)) { - result=StrNew(name); - result[StrLen(name)-2]=0; - } else - result=MStrPrint("%s.Z",name); - return result; -} - -U8 *FileNameTempTxt() -{//Make pretty-safe temp filename in home dir. - return MStrPrint("::/Home/SysTemp%X.TXT.Z",GetTSC>>8&0xFFFFFFFF); -} diff --git a/Kernel/Dsk/DskStrB.CPP b/Kernel/Dsk/DskStrB.CPP new file mode 100644 index 0000000..9a07eb5 --- /dev/null +++ b/Kernel/Dsk/DskStrB.CPP @@ -0,0 +1,97 @@ +Bool CFileNameTo(U8 *dst,U8 *src) +{ + MemSet(dst,0,CDIR_FILENAME_LEN); + if (!FileNameChk(src)) + return FALSE; + StrCpy(dst,src); + return TRUE; +} + +I64 Name2DirCluster(CDrv *dv,U8 *dirname) +{ + Bool cont=TRUE,unlock; + I64 cur_dir_cluster; + CDirEntry de; + U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); + DrvChk(dv); + try { + unlock=DrvLock(dv); + cur_dir_cluster=dv->root_cluster; + while (*buf && cont) { + StrFirstRem(buf,"/",buf2); + if (*buf2) { + switch (dv->type) { + case DVT_REDSEA: + cont=RedSeaFileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_FAT32: + cont=FAT32FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_ISO9660: + cont=ISO1FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + default: + throw('Drv'); + } + cur_dir_cluster=de.cluster; + } + } + if (!cont) { + "%s ",dirname; + PrintErr("File not found.\n"); + cur_dir_cluster=0; + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + Free(buf); + Free(buf2); + return cur_dir_cluster; +} + +I64 Name2ParentDirCluster(CDrv *dv,U8 *dirname) +{ + Bool cont=TRUE,unlock; + I64 cur_dir_cluster,cur_dir_cluster2; + CDirEntry de; + U8 *buf=StrNew(dirname),*buf2=StrNew(dirname); + DrvChk(dv); + try { + unlock=DrvLock(dv); + cur_dir_cluster=cur_dir_cluster2=dv->root_cluster; + while (*buf && cont) { + cur_dir_cluster2=cur_dir_cluster; + StrFirstRem(buf,"/",buf2); + if (*buf2) { + switch (dv->type) { + case DVT_REDSEA: + cont=RedSeaFileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_FAT32: + cont=FAT32FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + case DVT_ISO9660: + cont=ISO1FileFind(dv,cur_dir_cluster,buf2,&de,FUF_JUST_DIRS); + break; + default: + throw('Drv'); + } + cur_dir_cluster=de.cluster; + } + } + if (!cont) { + "%s ",dirname; + PrintErr("File not found.\n"); + cur_dir_cluster2=0; + } + if (unlock) + DrvUnlock(dv); + } catch + if (unlock) + DrvUnlock(dv); + Free(buf); + Free(buf2); + return cur_dir_cluster2; +} diff --git a/Kernel/Dsk/FileSysFAT.CPP b/Kernel/Dsk/FileSysFAT.CPP index b13d33a..8d9a188 100644 --- a/Kernel/Dsk/FileSysFAT.CPP +++ b/Kernel/Dsk/FileSysFAT.CPP @@ -1,7 +1,7 @@ U0 CDate2Dos(U16 *t,U16 *d,CDate cdt) { CDateStruct ds; - Date2Struct(&ds,cdt+local_time_offset); + Date2Struct(&ds,cdt); *d=ds.day_of_mon+(ds.mon+(ds.year-1980)<<4)<<5; *t=ds.sec>>1+(ds.min+ds.hour<<6)<<5; } @@ -16,7 +16,7 @@ CDate Dos2CDate(U16 t,U16 d) ds.sec=(t&0x1F)*2; t=t>>5; ds.min=t&0x3F; ds.hour=t>>6; - return Struct2Date(&ds)-local_time_offset; + return Struct2Date(&ds); } U0 FAT32DrvInit(CDrv *dv) @@ -30,7 +30,8 @@ U0 FAT32DrvInit(CDrv *dv) dv->file_system_info_sect=dv->base_offset+br32.file_system_info_sect; dv->map1=dv->base_offset+br32.reserved_sects; dv->map2=dv->map1+br32.sects_per_fat; - dv->data_area=dv->map2+br32.sects_per_fat-2*br32.sects_per_cluster; //Starts at Cluster 2 + dv->data_area=dv->map2+br32.sects_per_fat + -2*br32.sects_per_cluster; //Starts at Cluster 2 dv->spc=br32.sects_per_cluster; dv->root_cluster=br32.root_cluster; DrvMapBlkAlloc(dv); @@ -52,9 +53,9 @@ Bool FAT32DrvValidate(U8 drv_let) try { dv=Let2Drv(drv_let); if (dv->type==DVT_FAT32 && - RBlks(dv,&br,dv->base_offset,1) && - br.signature==0xAA55 && - br.sects==dv->size) + RBlks(dv,&br,dv->base_offset,1) && + br.signature==0xAA55 && + br.sects==dv->size) result=TRUE; } catch Fs->catch_except=TRUE; @@ -90,7 +91,7 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) br->sects_per_cluster=32; else br->sects_per_cluster=64; - + br->reserved_sects=32; br->copies_of_fat=2; br->media_desc=0xF8; @@ -110,13 +111,13 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) fis->free_clusters=-1; fis->most_recently_alloced=0; fis->signature3=0xAA550000; - + if (quick) i=br->reserved_sects+2*l+4*br->sects_per_cluster; else i=dv->size; WZeroBlks(dv,dv->base_offset,i); - + WBlks(dv,fis,dv->base_offset+br->file_system_info_sect,1); WBlks(dv,br,dv->base_offset,1); FAT32DrvInit(dv); @@ -227,7 +228,8 @@ Bool DirLongNameFill(CDirEntry *tempde,CFAT32DirEntryLong *de,I64 *xsum) return TRUE; } -Bool FAT32CDirFill(CDirEntry *tempde,CFAT32DirEntry *de) +Bool FAT32CDirFill(CDirEntry *tempde, + CFAT32DirEntry *de,CDate _local_time_offset) { Bool result; if (*tempde->name) @@ -237,11 +239,12 @@ Bool FAT32CDirFill(CDirEntry *tempde,CFAT32DirEntry *de) tempde->cluster=de->cluster_lo+de->cluster_hi<<16; tempde->size=de->size; tempde->attr=de->attr; - tempde->datetime=Dos2CDate(de->WrtTime,de->WrtDate); + tempde->datetime=Dos2CDate(de->WrtTime,de->WrtDate)-_local_time_offset; return result; } -Bool FAT32DirFill(CFAT32DirEntry *de,CDirEntry *tempde,I64 *_de_cnt=NULL) +Bool FAT32DirFill(CFAT32DirEntry *de, + CDirEntry *tempde,I64 *_de_cnt,CDate _local_time_offset) {//Fill up to 3 entries and store cnt of entries. I64 de_cnt=0,i,l,xsum,ord; U8 *ptr,dname[16]; @@ -290,13 +293,15 @@ Bool FAT32DirFill(CFAT32DirEntry *de,CDirEntry *tempde,I64 *_de_cnt=NULL) de[de_cnt].attr=tempde->attr; if (!tempde->datetime) tempde->datetime=Now; - CDate2Dos(&de[de_cnt].WrtTime,&de[de_cnt].WrtDate,tempde->datetime); + CDate2Dos(&de[de_cnt].WrtTime,&de[de_cnt].WrtDate, + tempde->datetime+_local_time_offset); if (_de_cnt) *_de_cnt=de_cnt+1; return result; } -Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) +Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster, + U8 *name,CDirEntry *_result,I64 fuf_flags=0) {//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$ Bool result=FALSE,unlock; CFAT32DirEntry *buf; @@ -332,7 +337,8 @@ Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 MemSet(_result,0,sizeof(CDirEntry)); if (!(fuf_flags&FUF_JUST_DIRS && !(attr & RS_ATTR_DIR)) && !(fuf_flags&FUF_JUST_FILES && attr & RS_ATTR_DIR) && - FAT32CDirFill(_result,&buf[cur_dir_entry]) && + FAT32CDirFill(_result,&buf[cur_dir_entry], + dv->fat32_local_time_offset) && !StrCmp(dname,_result->name)) { result=TRUE; goto fff_done; @@ -430,7 +436,7 @@ U0 FAT32FreeClusters(CDrv *dv,I64 c) c=next; } while (0cur_map_blk[c&(BLK_SIZE/4-1)]=0x0FFFFFFF; LBts(&dv->map_blk_dirty,0); } DrvMapBlkClean(dv); - + dv->fis->most_recently_alloced=j; dv->fis->free_clusters=-1; WBlks(dv,dv->fis,dv->file_system_info_sect,1); @@ -514,7 +520,7 @@ I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt) { I64 i,first=1; Bool cont,unlock,unlock_break; - + if (cnt<=0) return 0x0FFFFFFF; try { unlock_break=BreakLock; @@ -536,7 +542,7 @@ I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt) first=first+i; else { DrvMapBlkClean(dv); - + for (i=0;imap_blk_dirty,0); } DrvMapBlkClean(dv,0); - + for (i=0;ifat32_local_time_offset); MemSet(&long_name,0,sizeof(CDirEntry)); try { unlock_break=BreakLock; @@ -598,7 +604,8 @@ Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) if (ch!=0xE5 && attr&RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) DirLongNameFill(&long_name,&buf[cur_dir_entry],&xsum); else { - avail_cnt=FAT32_ENTRIES_PER_BLK-cur_dir_entry & (FAT32_ENTRIES_PER_BLK-1); + avail_cnt=FAT32_ENTRIES_PER_BLK-cur_dir_entry + &(FAT32_ENTRIES_PER_BLK-1); for (i=0;i=de_cnt) { MemCpy(&buf[cur_dir_entry],&de,de_cnt*sizeof(CFAT32DirEntry)); WBlks(dv,&buf[cur_dir_entry & -FAT32_ENTRIES_PER_BLK], - dv->data_area+cur_dir_cluster*dv->spc - +cur_dir_entry>>FAT32_ENTRIES_BITS,1); + dv->data_area+cur_dir_cluster*dv->spc + +cur_dir_entry>>FAT32_ENTRIES_BITS,1); cur_dir_entry+=de_cnt-1; //gets inc'ed written=TRUE; } else if (ch!=0xE5 && !(attr&RS_ATTR_VOL_ID)) { @@ -617,38 +624,40 @@ Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) MemSet(&long_name,0,sizeof(CDirEntry)); if (!*long_name.name) FATFromName(long_name.name,buf[cur_dir_entry].name); - //Del old entry with same name +//Del old entry with same name if (!StrCmp(long_name.name,tempde->name)) { if (free_old_chain) FAT32FreeClusters(dv,buf[cur_dir_entry].cluster_lo+ - buf[cur_dir_entry].cluster_hi<<16); + buf[cur_dir_entry].cluster_hi<<16); if (!written) { MemCpy(&buf[cur_dir_entry],&de[de_cnt-1],sizeof(CFAT32DirEntry)); WBlks(dv,&buf[cur_dir_entry & -FAT32_ENTRIES_PER_BLK], - dv->data_area+cur_dir_cluster*dv->spc - +cur_dir_entry>>FAT32_ENTRIES_BITS,1); + dv->data_area+cur_dir_cluster*dv->spc + +cur_dir_entry>>FAT32_ENTRIES_BITS,1); written=TRUE; } else { *buf[cur_dir_entry].name=0xE5; i=1; while (i<=cur_dir_entry && - buf[cur_dir_entry-i].attr&RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) + buf[cur_dir_entry-i].attr&RS_ATTR_LONG_NAME_MASK + ==RS_ATTR_LONG_NAME) *buf[cur_dir_entry-i++].name=0xE5; i--; WBlks(dv,&buf[(cur_dir_entry-i)&-FAT32_ENTRIES_PER_BLK], - dv->data_area+cur_dir_cluster*dv->spc - +(cur_dir_entry-i)>>FAT32_ENTRIES_BITS, - (i+FAT32_ENTRIES_PER_BLK)>>FAT32_ENTRIES_BITS); + dv->data_area+cur_dir_cluster*dv->spc + +(cur_dir_entry-i)>>FAT32_ENTRIES_BITS, + (i+FAT32_ENTRIES_PER_BLK)>>FAT32_ENTRIES_BITS); if (i==cur_dir_entry && 00) WBlks(dv,&buf[(entries_per_cluster-i)&-FAT32_ENTRIES_PER_BLK], - dv->data_area+last_dir_cluster*dv->spc - +(entries_per_cluster-i)>>FAT32_ENTRIES_BITS, - (i+FAT32_ENTRIES_PER_BLK-1)>>FAT32_ENTRIES_BITS); + dv->data_area+last_dir_cluster*dv->spc + +(entries_per_cluster-i)>>FAT32_ENTRIES_BITS, + (i+FAT32_ENTRIES_PER_BLK-1)>>FAT32_ENTRIES_BITS); } } break; @@ -676,8 +685,8 @@ Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) for (i=0;idata_area+cur_dir_cluster*dv->spc - +cur_dir_entry>>FAT32_ENTRIES_BITS,1); + dv->data_area+cur_dir_cluster*dv->spc + +cur_dir_entry>>FAT32_ENTRIES_BITS,1); cur_dir_entry+=avail_cnt; if (cur_dir_entry==entries_per_cluster) { last_dir_cluster=cur_dir_cluster; @@ -690,8 +699,8 @@ Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) } MemCpy(&buf[cur_dir_entry],&de,de_cnt*sizeof(CFAT32DirEntry)); WBlks(dv,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], - dv->data_area+cur_dir_cluster*dv->spc+ - cur_dir_entry>>FAT32_ENTRIES_BITS,1); + dv->data_area+cur_dir_cluster*dv->spc+ + cur_dir_entry>>FAT32_ENTRIES_BITS,1); cur_dir_entry+=de_cnt; if (cur_dir_entry==entries_per_cluster) { cur_dir_cluster=ClustersAlloc(dv,cur_dir_cluster,1); @@ -700,8 +709,8 @@ Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain) } else { MemSet(&buf[cur_dir_entry],0,sizeof(CFAT32DirEntry)); WBlks(dv,&buf[cur_dir_entry &-FAT32_ENTRIES_PER_BLK], - dv->data_area+cur_dir_cluster*dv->spc - +cur_dir_entry>>FAT32_ENTRIES_BITS,1); + dv->data_area+cur_dir_cluster*dv->spc + +cur_dir_entry>>FAT32_ENTRIES_BITS,1); } } Free(last_buf); @@ -724,7 +733,7 @@ I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, { CFAT32DirEntry *buf,*last_buf,*temp_buf; I64 i,result=0,attr,xsum=0,last_dir_cluster=INVALID_CLUSTER, - cur_dir_entry,entries_per_cluster,cur_dir_cluster; + cur_dir_entry,entries_per_cluster,cur_dir_cluster; U8 ch; Bool unlock_break; CDirEntry long_name; @@ -745,7 +754,7 @@ I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, DirLongNameFill(&long_name,&buf[cur_dir_entry],&xsum); else { if (!(attr & RS_ATTR_VOL_ID) && - (del_dir || !(attr & RS_ATTR_DIR))) { + (del_dir || !(attr & RS_ATTR_DIR))) { if (xsum!=FATNameXSum(buf[cur_dir_entry].name)) MemSet(&long_name,0,sizeof(CDirEntry)); if (!*long_name.name) @@ -757,26 +766,28 @@ I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, *buf[cur_dir_entry].name=0xE5; i=1; while (i<=cur_dir_entry && - buf[cur_dir_entry-i].attr&RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) + buf[cur_dir_entry-i].attr&RS_ATTR_LONG_NAME_MASK + ==RS_ATTR_LONG_NAME) *buf[cur_dir_entry-i++].name=0xE5; i--; WBlks(dv,&buf[(cur_dir_entry-i)&-FAT32_ENTRIES_PER_BLK], - dv->data_area+cur_dir_cluster*dv->spc - +(cur_dir_entry-i)>>FAT32_ENTRIES_BITS, - (i+FAT32_ENTRIES_PER_BLK)>>FAT32_ENTRIES_BITS); + dv->data_area+cur_dir_cluster*dv->spc + +(cur_dir_entry-i)>>FAT32_ENTRIES_BITS, + (i+FAT32_ENTRIES_PER_BLK)>>FAT32_ENTRIES_BITS); if (i==cur_dir_entry && last_dir_cluster!=INVALID_CLUSTER) { i=1; while (i<=entries_per_cluster && - last_buf[entries_per_cluster-i].attr&RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) + last_buf[entries_per_cluster-i].attr + &RS_ATTR_LONG_NAME_MASK==RS_ATTR_LONG_NAME) *last_buf[entries_per_cluster-i++].name=0xE5; if (--i>0) WBlks(dv,&buf[(entries_per_cluster-i)&-FAT32_ENTRIES_PER_BLK], - dv->data_area+last_dir_cluster*dv->spc - +(entries_per_cluster-i)>>FAT32_ENTRIES_BITS, - (i+FAT32_ENTRIES_PER_BLK-1)>>FAT32_ENTRIES_BITS); + dv->data_area+last_dir_cluster*dv->spc + +(entries_per_cluster-i)>>FAT32_ENTRIES_BITS, + (i+FAT32_ENTRIES_PER_BLK-1)>>FAT32_ENTRIES_BITS); } FAT32FreeClusters(dv,buf[cur_dir_entry].cluster_lo+ - buf[cur_dir_entry].cluster_hi<<16); + buf[cur_dir_entry].cluster_hi<<16); } } MemSet(&long_name,0,sizeof(CDirEntry)); @@ -837,12 +848,13 @@ I64 FAT32FileWrite(CDrv *dv,U8 *cur_dir,U8 *name,U8 *buf,I64 size, return c; } -CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL,I64 *_dir_size=NULL) +CDirEntry *FAT32FilesFind(U8 *files_find_mask, + I64 fuf_flags,CDirEntry *parent=NULL,I64 *_dir_size=NULL) { CDrv *dv=Fs->cur_dv; CFAT32DirEntry *buf; I64 attr,xsum=0,dir_size=0,sub_dir_size, - cur_dir_cluster,cur_dir_entry,entries_per_cluster; + cur_dir_cluster,cur_dir_entry,entries_per_cluster; U8 ch; CDirEntry *result=NULL,*tempde,long_name; if (fuf_flags&~FUG_FILES_FIND) @@ -853,8 +865,8 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU cur_dir_cluster=Name2DirCluster(dv,Fs->cur_dir); buf=MAlloc(BLK_SIZE*dv->spc); entries_per_cluster=dv->spc<cur_dv,buf,cur_dir_cluster,1); - dir_size+=Fs->cur_dv->spc*BLK_SIZE; + RClusters(dv,buf,cur_dir_cluster,1); + dir_size+=dv->spc*BLK_SIZE; cur_dir_entry=0; while (ch=*buf[cur_dir_entry].name) { attr=buf[cur_dir_entry].attr; @@ -868,22 +880,26 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU MemCpy(tempde,&long_name,sizeof(CDirEntry)); else MemSet(tempde,0,sizeof(CDirEntry)); - if (FAT32CDirFill(tempde,&buf[cur_dir_entry])) { + if (FAT32CDirFill(tempde,&buf[cur_dir_entry], + dv->fat32_local_time_offset)) { tempde->parent=parent; - if (Bt(&fuf_flags,FUf_RECURSE) && attr&RS_ATTR_DIR && *tempde->name!='.') { + if (Bt(&fuf_flags,FUf_RECURSE) && attr&RS_ATTR_DIR && + *tempde->name!='.') { tempde->next=result; result=tempde; tempde->full_name=DirNameAbs(tempde->name); DrvUnlock(dv); if (Cd(tempde->name)) { - tempde->sub=FAT32FilesFind(files_find_mask,fuf_flags,tempde,&sub_dir_size); + tempde->sub=FAT32FilesFind(files_find_mask,fuf_flags, + tempde,&sub_dir_size); tempde->size=sub_dir_size; Cd(".."); } DrvLock(dv); } else if ((attr&RS_ATTR_DIR || !Bt(&fuf_flags,FUf_JUST_DIRS)) && - !(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' && attr&RS_ATTR_DIR) && - FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { + !(Bt(&fuf_flags,FUf_RECURSE) && + *tempde->name=='.' && attr&RS_ATTR_DIR) && + FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { tempde->next=result; result=tempde; tempde->full_name=FileNameAbs(tempde->name); @@ -902,7 +918,7 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU break; else { RClusters(dv,buf,cur_dir_cluster,1); - dir_size+=Fs->cur_dv->spc*BLK_SIZE; + dir_size+=dv->spc*BLK_SIZE; cur_dir_entry=0; } } @@ -919,12 +935,12 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NU Bool FAT32MkDir(CDrv *dv,U8 *cur_dir,U8 *name) { I64 size=dv->spc<fat32_local_time_offset); dFAT++; - + MemSet(&d_native,0,sizeof(CDirEntry)); d_native.attr=RS_ATTR_DIR; *d_native.name='.'; @@ -946,7 +962,7 @@ Bool FAT32MkDir(CDrv *dv,U8 *cur_dir,U8 *name) d_native.cluster=cur_dir_cluster; d_native.size=0; d_native.datetime=Now; - FAT32DirFill(dFAT,&d_native); + FAT32DirFill(dFAT,&d_native,NULL,dv->fat32_local_time_offset); WClusters(dv,buf,c,1); Free(buf); if (unlock_break) diff --git a/Kernel/Dsk/FileSysISO.CPP b/Kernel/Dsk/FileSysISO.CPP index b1e59fd..8a2170e 100644 --- a/Kernel/Dsk/FileSysISO.CPP +++ b/Kernel/Dsk/FileSysISO.CPP @@ -21,7 +21,8 @@ Bool ISODrvInit(CDrv *dv,I64 blk) RBlks(dv,iso,i*spc,spc); buf[0](U32)=iso->id[0](U32); buf[4](U16)=iso->id[4](U8); - switch (LstMatch(buf,"CD001\0CDW02\0BEA01\0BOOT2\0NSR02\0NSR03\0TEA01\0",LMF_EXACT)) { + switch (LstMatch(buf,"CD001\0CDW02\0BEA01\0BOOT2\0NSR02\0NSR03\0TEA01\0", + LMF_EXACT)) { case 0: dv->type=DVT_ISO9660; switch (iso->type) { @@ -101,7 +102,7 @@ Bool ISO1FromName(U8 *dst,U8 *src) src++; if (*src==';') break; - if (Bt(chars_bitmap_filename,*src)) { + if (Bt(chars_bmp_filename,*src)) { if (j>=CDIR_FILENAME_LEN-1) return FALSE; dst[j++]=*src++; @@ -126,7 +127,8 @@ Bool ISO1CDirFill(CDirEntry *tempde,CISO1DirEntry *de) return result; } -Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) +Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, + CDirEntry *_result,I64 fuf_flags=0) {//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$ CISO1DirEntry *isoptr,*buf; U8 dname[CDIR_FILENAME_LEN]; @@ -141,11 +143,11 @@ Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 f try { unlock=DrvLock(dv); isoptr=MAlloc(dv->spc<cur_dv,isoptr,cur_dir_cluster,1); + RClusters(dv,isoptr,cur_dir_cluster,1); if (isoptr->name_len==1 && !isoptr->name) {//curdir i=(isoptr->size.little+dv->spc<spc<spc<cur_dv,buf,cur_dir_cluster,i); + RClusters(dv,buf,cur_dir_cluster,i); Free(isoptr); } else { buf=isoptr; @@ -163,7 +165,8 @@ Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 f if (!StrCmp(name,dname)) { result=ISO1CDirFill(_result,isoptr); if (result && - !(fuf_flags&FUF_JUST_DIRS && !(_result->attr & RS_ATTR_DIR)) && + !(fuf_flags&FUF_JUST_DIRS && + !(_result->attr & RS_ATTR_DIR)) && !(fuf_flags&FUF_JUST_FILES && _result->attr & RS_ATTR_DIR) ) goto iff_done; else @@ -227,7 +230,8 @@ Bool ISO1Cd(U8 *name,I64 cur_dir_cluster) return FALSE; } -CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL) +CDirEntry *ISO1FilesFind(U8 *files_find_mask, + I64 fuf_flags,CDirEntry *parent=NULL) { CDrv *dv=Fs->cur_dv; CISO1DirEntry *buf,*buf2,*isoptr; @@ -236,11 +240,11 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NUL if (fuf_flags&~FUG_FILES_FIND) throw('FUF'); isoptr=MAlloc(dv->spc<cur_dv,isoptr,cur_dir_cluster,1); + RClusters(dv,isoptr,cur_dir_cluster,1); if (isoptr->name_len==1 && !isoptr->name) {//curdir i=(isoptr->size.little+dv->spc<spc<spc<cur_dv,buf,cur_dir_cluster,i); + RClusters(dv,buf,cur_dir_cluster,i); Free(isoptr); } else { buf=isoptr; @@ -256,7 +260,8 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NUL tempde=MAlloc(sizeof(CDirEntry)); if (ISO1CDirFill(tempde,buf)) { tempde->parent=parent; - if (Bt(&fuf_flags,FUf_RECURSE) && tempde->attr&RS_ATTR_DIR && *tempde->name!='.') { + if (Bt(&fuf_flags,FUf_RECURSE) && tempde->attr&RS_ATTR_DIR && + *tempde->name!='.') { tempde->next=result; result=tempde; tempde->full_name=DirNameAbs(tempde->name); @@ -264,9 +269,11 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NUL tempde->sub=ISO1FilesFind(files_find_mask,fuf_flags,tempde); Cd(".."); } - } else if ((tempde->attr & RS_ATTR_DIR || !Bt(&fuf_flags,FUf_JUST_DIRS)) && - !(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' && tempde->attr&RS_ATTR_DIR) && - FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { + } else if ((tempde->attr & RS_ATTR_DIR || + !Bt(&fuf_flags,FUf_JUST_DIRS)) && + !(Bt(&fuf_flags,FUf_RECURSE) && + *tempde->name=='.' && tempde->attr&RS_ATTR_DIR) && + FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { tempde->next=result; result=tempde; tempde->full_name=FileNameAbs(tempde->name); diff --git a/Kernel/Dsk/FileSysRedSea.CPP b/Kernel/Dsk/FileSysRedSea.CPP index e2d8b4a..1959b3e 100644 --- a/Kernel/Dsk/FileSysRedSea.CPP +++ b/Kernel/Dsk/FileSysRedSea.CPP @@ -87,8 +87,8 @@ Bool RedSeaDrvValidate(U8 drv_let) try { dv=Let2Drv(drv_let); if (dv->type==DVT_REDSEA && RBlks(dv,&br,dv->base_offset,1) && - br.signature==MBR_PT_REDSEA && br.signature2==0xAA55 && - br.sects==dv->size) + br.signature==MBR_PT_REDSEA && br.signature2==0xAA55 && + br.sects==dv->size) result=TRUE; } catch Fs->catch_except=TRUE; @@ -104,7 +104,7 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) I64 i,n; try { DrvLock(dv); - // DrvTypeSet(drv_let,DVT_REDSEA); +// DrvTypeSet(drv_let,DVT_REDSEA); DrvTypeSet(drv_let,DVT_FAT32); dv->type=DVT_REDSEA; br->signature=MBR_PT_REDSEA; @@ -115,36 +115,36 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) br->bitmap_sects=n; br->unique_id=GetTSC^Now()(U64); br->root_cluster=0; - + if (quick) i=n+1; else i=dv->size; WZeroBlks(dv,dv->base_offset,i); - + WBlks(dv,br,dv->base_offset,1); RedSeaDrvInit(dv); ClustersAlloc(dv,0,1,FALSE); //Alloc #1 br->root_cluster=ClustersAlloc(dv,0,1,FALSE); WBlks(dv,br,dv->base_offset,1); root_dir=CAlloc(BLK_SIZE); - + d_native=root_dir-offset(CDirEntry.start); - + d_native->attr=RS_ATTR_DIR|RS_ATTR_CONTIGUOUS; *d_native->name='.'; d_native->cluster=br->root_cluster; d_native->size=BLK_SIZE; d_native->datetime=Now; - + d_native(U8 *)+=CDIR_SIZE; - + *d_native->name='.'; d_native->name[1]='.'; d_native->attr=RS_ATTR_DIR|RS_ATTR_CONTIGUOUS; d_native->cluster=br->root_cluster; d_native->datetime=Now; - + WBlks(dv,root_dir,br->root_cluster,1); RedSeaDrvInit(dv); DrvUnlock(dv); @@ -154,7 +154,8 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) Free(root_dir); } -Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0) +Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, + CDirEntry *_result,I64 fuf_flags=0) {//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$ CDirEntry *buf,*buf2,*ptr; U8 dname[CDIR_FILENAME_LEN]; @@ -287,7 +288,7 @@ U0 RedSeaFreeClusters(CDrv *dv,I64 c,I64 cnt) c++; } DrvMapBlkClean(dv); - + if (unlock) DrvUnlock(dv); if (unlock_break) @@ -364,11 +365,11 @@ Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) cur_dir_cluster=Name2DirCluster(dv,cur_dir); buf2=MAlloc(BLK_SIZE); RBlks(dv,buf2,cur_dir_cluster,1); - + ptr=buf2(U8 *)-offset(CDirEntry.start); buf=MAlloc(ptr->size); RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); - + dir_size=ptr->size; ptr=buf(U8 *)-offset(CDirEntry.start)+CDIR_SIZE; Free(buf2); @@ -406,7 +407,7 @@ Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) parent_dir=StrNew("/"); } if (RedSeaFileFind(dv,Name2DirCluster(dv,parent_dir), - temp,&de2,FUF_JUST_DIRS)) { + temp,&de2,FUF_JUST_DIRS)) { de2.cluster=c; de2.size=dir_size; RedSeaDirNew(dv,parent_dir,&de2,FALSE); @@ -427,12 +428,12 @@ Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *de,Bool free_old_chain) if (!StrCmp(de->name,ptr->name)) { if (free_old_chain) RedSeaFreeClusters(dv,ptr->cluster, - (ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); + (ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); if (!written) MemCpy(&ptr->start,&de->start,CDIR_SIZE); else ptr->attr|=RS_ATTR_DELETED; - WBlks(dv,buf(U8 *)+j<size); RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); Free(buf2); - + ptr=buf(U8 *)-offset(CDirEntry.start); *ptr->name='.'; ptr->name[1]=0; @@ -481,14 +482,15 @@ I64 RedSeaFilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags, if (!(ch=*ptr->name)) break; else if (!(ptr->attr & RS_ATTR_DELETED) && ch!='.' && (del_dir || - !(ptr->attr & RS_ATTR_DIR)) && - FilesFindMatch(ptr->name,files_find_mask,fuf_flags)) { + !(ptr->attr & RS_ATTR_DIR)) && + FilesFindMatch(ptr->name,files_find_mask,fuf_flags)) { if (!(ptr->attr & RS_ATTR_DIR)) result++; if (print_msg) "Del %s\n",ptr->name; ptr->attr|=RS_ATTR_DELETED; WBlks(dv,buf(U8 *)+j<cluster,(ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); + RedSeaFreeClusters(dv,ptr->cluster, + (ptr->size+BLK_SIZE-1)>>BLK_SIZE_BITS); } ptr(U8 *)+=CDIR_SIZE; if (++i>=n) { @@ -536,7 +538,8 @@ I64 RedSeaFileWrite(CDrv *dv,U8 *cur_dir,U8 *name,U8 *buf,I64 size, return c; } -CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL) +CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags, + CDirEntry *parent=NULL) { CDrv *dv=Fs->cur_dv; CDirEntry *buf,*buf2,*ptr,*result=NULL,*tempde; @@ -548,12 +551,12 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=N cur_dir_cluster=Name2DirCluster(dv,Fs->cur_dir); buf2=MAlloc(BLK_SIZE); RBlks(dv,buf2,cur_dir_cluster,1); - + ptr=buf2(U8 *)-offset(CDirEntry.start); buf=MAlloc(ptr->size); RBlks(dv,buf,cur_dir_cluster,ptr->size>>BLK_SIZE_BITS); Free(buf2); - + ptr=buf(U8 *)-offset(CDirEntry.start); *ptr->name='.'; ptr->name[1]=0; @@ -567,7 +570,8 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=N tempde=CAlloc(sizeof(CDirEntry)); MemCpy(&tempde->start,&ptr->start,CDIR_SIZE); tempde->parent=parent; - if (Bt(&fuf_flags,FUf_RECURSE) && tempde->attr&RS_ATTR_DIR && *tempde->name!='.') { + if (Bt(&fuf_flags,FUf_RECURSE) && tempde->attr&RS_ATTR_DIR && + *tempde->name!='.') { tempde->next=result; result=tempde; tempde->full_name=DirNameAbs(tempde->name); @@ -577,9 +581,11 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=N Cd(".."); } DrvLock(dv); - } else if ((tempde->attr&RS_ATTR_DIR || !Bt(&fuf_flags,FUf_JUST_DIRS)) && - !(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' && tempde->attr&RS_ATTR_DIR) && - FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { + } else if ((tempde->attr&RS_ATTR_DIR || + !Bt(&fuf_flags,FUf_JUST_DIRS)) && + !(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' && + tempde->attr&RS_ATTR_DIR) && + FilesFindMatch(tempde->name,files_find_mask,fuf_flags)) { tempde->next=result; result=tempde; tempde->full_name=FileNameAbs(tempde->name); @@ -611,7 +617,7 @@ Bool RedSeaMkDir(CDrv *dv,U8 *cur_dir,U8 *name) d_native->size=size; d_native->datetime=Now; d_native(U8 *)+=CDIR_SIZE; - + d_native->attr=RS_ATTR_DIR|RS_ATTR_CONTIGUOUS; *d_native->name='.'; d_native->name[1]='.'; diff --git a/Kernel/EdLite.CPP b/Kernel/EdLite.CPP index 6ca18c0..acf8d5a 100644 --- a/Kernel/EdLite.CPP +++ b/Kernel/EdLite.CPP @@ -232,7 +232,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0) } break; default: - if (Bt(chars_bitmap_getkey,ch)) { + if (Bt(chars_bmp_getkey,ch)) { if (cur_line==&root) { cur_line=MAlloc(sizeof(CLine)); cur_line->line=StrNew(""); diff --git a/Kernel/Font8x8.CPP b/Kernel/Font8x8.CPP index b9123bd..902d1da 100644 --- a/Kernel/Font8x8.CPP +++ b/Kernel/Font8x8.CPP @@ -1,260 +1,260 @@ //See $LK,"::/Doc/Credits.TXT"$. -U8 sys_font_8x8[256*8]= { -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,// -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// -0x18,0x3C,0x3C,0x18,0x18,0x00,0x18,0x00,//! -0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,//" -0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,//# -0x30,0xFC,0x16,0x7C,0xD0,0x7E,0x18,0x00,//$$ -0x06,0x66,0x30,0x18,0x0C,0x66,0x60,0x00,//% -0x1C,0x36,0x36,0x1C,0xB6,0x66,0xDC,0x00,//& -0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,//' -0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00,//( -0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00,//) -0x00,0x18,0x7E,0x3C,0x7E,0x18,0x00,0x00,//* -0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,//+ -0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x0C,//, -0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,//- -0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,//. -0x00,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,/// -0x3C,0x66,0x76,0x7E,0x6E,0x66,0x3C,0x00,//0 -0x18,0x1C,0x18,0x18,0x18,0x18,0x7E,0x00,//1 -0x3C,0x66,0x60,0x30,0x18,0x0C,0x7E,0x00,//2 -0x3C,0x66,0x60,0x38,0x60,0x66,0x3C,0x00,//3 -0x30,0x38,0x3C,0x36,0x7E,0x30,0x30,0x00,//4 -0x7E,0x06,0x3E,0x60,0x60,0x66,0x3C,0x00,//5 -0x38,0x0C,0x06,0x3E,0x66,0x66,0x3C,0x00,//6 -0x7E,0x60,0x30,0x18,0x0C,0x0C,0x0C,0x00,//7 -0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00,//8 -0x3C,0x66,0x66,0x7C,0x60,0x30,0x1C,0x00,//9 -0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00,//: -0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x0C,//; -0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00,//< -0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,//= -0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,//> -0x3C,0x66,0x30,0x18,0x18,0x00,0x18,0x00,//? -0x3C,0x66,0x76,0x56,0x76,0x06,0x3C,0x00,//@ -0x3C,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,//A -0x3E,0x66,0x66,0x3E,0x66,0x66,0x3E,0x00,//B -0x3C,0x66,0x06,0x06,0x06,0x66,0x3C,0x00,//C -0x1E,0x36,0x66,0x66,0x66,0x36,0x1E,0x00,//D -0x7E,0x06,0x06,0x3E,0x06,0x06,0x7E,0x00,//E -0x7E,0x06,0x06,0x3E,0x06,0x06,0x06,0x00,//F -0x3C,0x66,0x06,0x76,0x66,0x66,0x3C,0x00,//G -0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,//H -0x7E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,//I -0x7C,0x30,0x30,0x30,0x30,0x36,0x1C,0x00,//J -0x66,0x36,0x1E,0x0E,0x1E,0x36,0x66,0x00,//K -0x06,0x06,0x06,0x06,0x06,0x06,0x7E,0x00,//L -0xC6,0xEE,0xFE,0xD6,0xD6,0xC6,0xC6,0x00,//M -0x66,0x66,0x6E,0x7E,0x76,0x66,0x66,0x00,//N -0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,//O -0x3E,0x66,0x66,0x3E,0x06,0x06,0x06,0x00,//P -0x3C,0x66,0x66,0x66,0x56,0x36,0x6C,0x00,//Q -0x3E,0x66,0x66,0x3E,0x36,0x66,0x66,0x00,//R -0x3C,0x66,0x06,0x3C,0x60,0x66,0x3C,0x00,//S -0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00,//T -0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,//U -0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,//V -0xC6,0xC6,0xD6,0xD6,0xFE,0xEE,0xC6,0x00,//W -0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,//X -0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x00,//Y -0x7E,0x60,0x30,0x18,0x0C,0x06,0x7E,0x00,//Z -0x3E,0x06,0x06,0x06,0x06,0x06,0x3E,0x00,//[ -0x00,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,//\ -0x7C,0x60,0x60,0x60,0x60,0x60,0x7C,0x00,//] -0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,//^ -0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,//_ -0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,//` -0x00,0x00,0x3C,0x60,0x7C,0x66,0x7C,0x00,//a -0x06,0x06,0x3E,0x66,0x66,0x66,0x3E,0x00,//b -0x00,0x00,0x3C,0x66,0x06,0x66,0x3C,0x00,//c -0x60,0x60,0x7C,0x66,0x66,0x66,0x7C,0x00,//d -0x00,0x00,0x3C,0x66,0x7E,0x06,0x3C,0x00,//e -0x38,0x0C,0x0C,0x3E,0x0C,0x0C,0x0C,0x00,//f -0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x3C,//g -0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x00,//h -0x18,0x00,0x1C,0x18,0x18,0x18,0x3C,0x00,//i -0x18,0x00,0x1C,0x18,0x18,0x18,0x18,0x0E,//j -0x06,0x06,0x66,0x36,0x1E,0x36,0x66,0x00,//k -0x1C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,//l -0x00,0x00,0x6C,0xFE,0xD6,0xD6,0xC6,0x00,//m -0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x00,//n -0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00,//o -0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06,//p -0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0xE0,//q -0x00,0x00,0x36,0x6E,0x06,0x06,0x06,0x00,//r -0x00,0x00,0x7C,0x06,0x3C,0x60,0x3E,0x00,//s -0x0C,0x0C,0x3E,0x0C,0x0C,0x0C,0x38,0x00,//t -0x00,0x00,0x66,0x66,0x66,0x66,0x7C,0x00,//u -0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,//v -0x00,0x00,0xC6,0xD6,0xD6,0xFE,0x6C,0x00,//w -0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,//x -0x00,0x00,0x66,0x66,0x66,0x7C,0x60,0x3C,//y -0x00,0x00,0x7E,0x30,0x18,0x0C,0x7E,0x00,//z -0x30,0x18,0x18,0x0E,0x18,0x18,0x30,0x00,//{ -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,//| -0x0C,0x18,0x18,0x70,0x18,0x18,0x0C,0x00,//} -0x8C,0xD6,0x62,0x00,0x00,0x00,0x00,0x00,//~ -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, -0x1E,0x33,0x03,0x33,0x1E,0x18,0x30,0x1E,//€ -0x00,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,//� -0x38,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,//‚ -0x7E,0xC3,0x3C,0x60,0x7C,0x66,0xFC,0x00,//ƒ -0x33,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,//„ -0x07,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,//… -0x0C,0x0C,0x1E,0x30,0x3E,0x33,0x7E,0x00,//† -0x00,0x00,0x3E,0x03,0x03,0x3E,0x60,0x3C,//‡ -0x7E,0xC3,0x3C,0x66,0x7E,0x06,0x3C,0x00,//ˆ -0x33,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,//‰ -0x07,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,//Š -0x33,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,//‹ -0x3E,0x63,0x1C,0x18,0x18,0x18,0x3C,0x00,//Œ -0x07,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,//� -0x33,0x0C,0x1E,0x33,0x33,0x3F,0x33,0x00,//Ž -0x0C,0x0C,0x00,0x1E,0x33,0x3F,0x33,0x00,//� -0x38,0x00,0x3F,0x06,0x1E,0x06,0x3F,0x00,//� -0x00,0x00,0xFE,0x30,0xFE,0x33,0xFE,0x00,//‘ -0x7C,0x36,0x33,0x7F,0x33,0x33,0x73,0x00,//’ -0x1E,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,//“ -0x00,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,//” -0x00,0x07,0x00,0x1E,0x33,0x33,0x1E,0x00,//• -0x1E,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,//– -0x00,0x07,0x00,0x33,0x33,0x33,0x7E,0x00,//— -0x00,0x33,0x00,0x33,0x33,0x3F,0x30,0x1F,//˜ -0x63,0x1C,0x3E,0x63,0x63,0x3E,0x1C,0x00,//™ -0x33,0x00,0x33,0x33,0x33,0x33,0x1E,0x00,//š -0x18,0x18,0x7E,0x03,0x03,0x7E,0x18,0x18,//› -0x1C,0x36,0x26,0x0F,0x06,0x67,0x3F,0x00,//œ -0x33,0x33,0x1E,0x3F,0x0C,0x3F,0x0C,0x00,//� -0x0F,0x1B,0x1B,0x2F,0x33,0x7B,0x33,0x70,//ž -0x70,0xD8,0x18,0x7E,0x18,0x18,0x1B,0x0E,//Ÿ -0x38,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,//  -0x1C,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,//¡ -0x00,0x38,0x00,0x1E,0x33,0x33,0x1E,0x00,//¢ -0x00,0x38,0x00,0x33,0x33,0x33,0x7E,0x00,//£ -0x00,0x1F,0x00,0x1F,0x33,0x33,0x33,0x00,//¤ -0x3F,0x00,0x33,0x37,0x3F,0x3B,0x33,0x00,//¥ -0x3C,0x36,0x36,0x7C,0x00,0x7E,0x00,0x00,//¦ -0x3C,0x66,0x66,0x3C,0x00,0x7E,0x00,0x00,//§ -0x0C,0x00,0x0C,0x06,0x03,0x33,0x1E,0x00,//¨ -0x00,0x00,0x00,0x3F,0x03,0x03,0x00,0x00,//© -0x00,0x00,0x00,0x3F,0x30,0x30,0x00,0x00,//ª -0x63,0x33,0x1B,0x7C,0xC6,0x73,0x19,0xF8,//« -0x63,0x33,0x1B,0xCF,0xE6,0xF3,0xF9,0xC0,//¬ -0x00,0x18,0x00,0x18,0x18,0x3C,0x3C,0x18,//­ -0x00,0xCC,0x66,0x33,0x66,0xCC,0x00,0x00,//® -0x00,0x33,0x66,0xCC,0x66,0x33,0x00,0x00,//¯ -0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,//° -0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,//± -0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,//² -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,//³ -0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,//´ -0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,//µ -0x6C,0x6C,0x6C,0x6C,0x6F,0x6C,0x6C,0x6C,//¶ -0x00,0x00,0x00,0x00,0x7F,0x6C,0x6C,0x6C,//· -0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,//¸ -0x6C,0x6C,0x6F,0x60,0x6F,0x6C,0x6C,0x6C,//¹ -0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,//º -0x00,0x00,0x7F,0x60,0x6F,0x6C,0x6C,0x6C,//» -0x6C,0x6C,0x6F,0x60,0x7F,0x00,0x00,0x00,//¼ -0x6C,0x6C,0x6C,0x6C,0x7F,0x00,0x00,0x00,//½ -0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,//¾ -0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,//¿ -0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,//À -0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,//Á -0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,// -0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,//à -0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//Ä -0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,//Å -0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,//Æ -0x6C,0x6C,0x6C,0x6C,0xEC,0x6C,0x6C,0x6C,//Ç -0x6C,0x6C,0xEC,0x0C,0xFC,0x00,0x00,0x00,//È -0x00,0x00,0xFC,0x0C,0xEC,0x6C,0x6C,0x6C,//É -0x6C,0x6C,0xEF,0x00,0xFF,0x00,0x00,0x00,//Ê -0x00,0x00,0xFF,0x00,0xEF,0x6C,0x6C,0x6C,//Ë -0x6C,0x6C,0xEC,0x0C,0xEC,0x6C,0x6C,0x6C,//Ì -0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,//Í -0x6C,0x6C,0xEF,0x00,0xEF,0x6C,0x6C,0x6C,//Î -0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,//Ï -0x6C,0x6C,0x6C,0x6C,0xFF,0x00,0x00,0x00,//Ð -0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,//Ñ -0x00,0x00,0x00,0x00,0xFF,0x6C,0x6C,0x6C,//Ò -0x6C,0x6C,0x6C,0x6C,0xFC,0x00,0x00,0x00,//Ó -0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,//Ô -0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,//Õ -0x00,0x00,0x00,0x00,0xFC,0x6C,0x6C,0x6C,//Ö -0x6C,0x6C,0x6C,0x6C,0xEF,0x6C,0x6C,0x6C,//× -0x18,0x18,0xFF,0x00,0xFF,0x18,0x18,0x18,//Ø -0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,//Ù -0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,//Ú -0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//Û -0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,//Ü -0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,//Ý -0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,//Þ -0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,//ß -0x00,0x00,0x6E,0x3B,0x13,0x3B,0x6E,0x00,//à -0x00,0x1E,0x33,0x1F,0x33,0x1F,0x03,0x03,//á -0x00,0x7F,0x63,0x03,0x03,0x03,0x03,0x00,//â -0x00,0x7F,0x36,0x36,0x36,0x36,0x36,0x00,//ã -0x7F,0x66,0x0C,0x18,0x0C,0x66,0x7F,0x00,//ä -0x00,0x00,0x7E,0x33,0x33,0x33,0x1E,0x00,//å -0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x03,//æ -0x00,0x6E,0x3B,0x18,0x18,0x18,0x18,0x00,//ç -0x3F,0x0C,0x1E,0x33,0x33,0x1E,0x0C,0x3F,//è -0x1C,0x36,0x63,0x7F,0x63,0x36,0x1C,0x00,//é -0x1C,0x36,0x63,0x63,0x36,0x36,0x77,0x00,//ê -0x38,0x0C,0x18,0x3E,0x33,0x33,0x1E,0x00,//ë -0x00,0x00,0x7E,0xDB,0xDB,0x7E,0x00,0x00,//ì -0x60,0x30,0x7E,0xDB,0xDB,0x7E,0x06,0x03,//í -0x3C,0x06,0x03,0x3F,0x03,0x06,0x3C,0x00,//î -0x1E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,//ï -0x00,0x3F,0x00,0x3F,0x00,0x3F,0x00,0x00,//ð -0x0C,0x0C,0x3F,0x0C,0x0C,0x00,0x3F,0x00,//ñ -0x06,0x0C,0x18,0x0C,0x06,0x00,0x3F,0x00,//ò -0x18,0x0C,0x06,0x0C,0x18,0x00,0x3F,0x00,//ó -0x70,0xD8,0xD8,0x18,0x18,0x18,0x18,0x18,//ô -0x18,0x18,0x18,0x18,0x18,0x1B,0x1B,0x0E,//õ -0x0C,0x0C,0x00,0x3F,0x00,0x0C,0x0C,0x00,//ö -0x00,0x4E,0x39,0x00,0x4E,0x39,0x00,0x00,//÷ -0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00,//ø -0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,//ù -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,//ú -0xF0,0x30,0x30,0x30,0x37,0x36,0x3C,0x38,//û -0x1E,0x36,0x36,0x36,0x36,0x00,0x00,0x00,//ü -0x1E,0x30,0x1C,0x06,0x3E,0x00,0x00,0x00,//ý -0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,//þ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//ÿ +U64 sys_font_8x8[256]= { +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0000000000000000, +0x0008000000000000,// +0x0000000000000000,// +0x00180018183C3C18,//! +0x0000000000363636,//" +0x006C6CFE6CFE6C6C,//# +0x00187ED07C16FC30,//$$ +0x0060660C18306606,//% +0x00DC66B61C36361C,//& +0x0000000000181818,//' +0x0030180C0C0C1830,//( +0x000C18303030180C,//) +0x0000187E3C7E1800,//* +0x000018187E181800,//+ +0x0C18180000000000,//, +0x000000007E000000,//- +0x0018180000000000,//. +0x0000060C18306000,/// +0x003C666E7E76663C,//0 +0x007E181818181C18,//1 +0x007E0C183060663C,//2 +0x003C66603860663C,//3 +0x0030307E363C3830,//4 +0x003C6660603E067E,//5 +0x003C66663E060C38,//6 +0x000C0C0C1830607E,//7 +0x003C66663C66663C,//8 +0x001C30607C66663C,//9 +0x0018180018180000,//: +0x0C18180018180000,//; +0x0030180C060C1830,//< +0x0000007E007E0000,//= +0x000C18306030180C,//> +0x001800181830663C,//? +0x003C06765676663C,//@ +0x006666667E66663C,//A +0x003E66663E66663E,//B +0x003C66060606663C,//C +0x001E36666666361E,//D +0x007E06063E06067E,//E +0x000606063E06067E,//F +0x003C66667606663C,//G +0x006666667E666666,//H +0x007E18181818187E,//I +0x001C36303030307C,//J +0x0066361E0E1E3666,//K +0x007E060606060606,//L +0x00C6C6D6D6FEEEC6,//M +0x006666767E6E6666,//N +0x003C66666666663C,//O +0x000606063E66663E,//P +0x006C36566666663C,//Q +0x006666363E66663E,//R +0x003C66603C06663C,//S +0x001818181818187E,//T +0x003C666666666666,//U +0x00183C6666666666,//V +0x00C6EEFED6D6C6C6,//W +0x0066663C183C6666,//X +0x001818183C666666,//Y +0x007E060C1830607E,//Z +0x003E06060606063E,//[ +0x00006030180C0600,//\ +0x007C60606060607C,//] +0x000000000000663C,//^ +0xFFFF000000000000,//_ +0x000000000030180C,//` +0x007C667C603C0000,//a +0x003E6666663E0606,//b +0x003C6606663C0000,//c +0x007C6666667C6060,//d +0x003C067E663C0000,//e +0x000C0C0C3E0C0C38,//f +0x3C607C66667C0000,//g +0x00666666663E0606,//h +0x003C1818181C0018,//i +0x0E181818181C0018,//j +0x0066361E36660606,//k +0x003C18181818181C,//l +0x00C6D6D6FE6C0000,//m +0x00666666663E0000,//n +0x003C6666663C0000,//o +0x06063E66663E0000,//p +0xE0607C66667C0000,//q +0x000606066E360000,//r +0x003E603C067C0000,//s +0x00380C0C0C3E0C0C,//t +0x007C666666660000,//u +0x00183C6666660000,//v +0x006CFED6D6C60000,//w +0x00663C183C660000,//x +0x3C607C6666660000,//y +0x007E0C18307E0000,//z +0x003018180E181830,//{ +0x0018181818181818,//| +0x000C18187018180C,//} +0x000000000062D68C,//~ +0xFFFFFFFFFFFFFFFF, +0x1E30181E3303331E,//€ +0x007E333333003300,//� +0x001E033F331E0038,//‚ +0x00FC667C603CC37E,//ƒ +0x007E333E301E0033,//„ +0x007E333E301E0007,//… +0x007E333E301E0C0C,//† +0x3C603E03033E0000,//‡ +0x003C067E663CC37E,//ˆ +0x001E033F331E0033,//‰ +0x001E033F331E0007,//Š +0x001E0C0C0C0E0033,//‹ +0x003C1818181C633E,//Œ +0x001E0C0C0C0E0007,//� +0x00333F33331E0C33,//Ž +0x00333F331E000C0C,//� +0x003F061E063F0038,//� +0x00FE33FE30FE0000,//‘ +0x007333337F33367C,//’ +0x001E33331E00331E,//“ +0x001E33331E003300,//” +0x001E33331E000700,//• +0x007E33333300331E,//– +0x007E333333000700,//— +0x1F303F3333003300,//˜ +0x001C3E63633E1C63,//™ +0x001E333333330033,//š +0x18187E03037E1818,//› +0x003F67060F26361C,//œ +0x000C3F0C3F1E3333,//� +0x70337B332F1B1B0F,//ž +0x0E1B18187E18D870,//Ÿ +0x007E333E301E0038,//  +0x001E0C0C0C0E001C,//¡ +0x001E33331E003800,//¢ +0x007E333333003800,//£ +0x003333331F001F00,//¤ +0x00333B3F3733003F,//¥ +0x00007E007C36363C,//¦ +0x00007E003C66663C,//§ +0x001E3303060C000C,//¨ +0x000003033F000000,//© +0x000030303F000000,//ª +0xF81973C67C1B3363,//« +0xC0F9F3E6CF1B3363,//¬ +0x183C3C1818001800,//­ +0x0000CC663366CC00,//® +0x00003366CC663300,//¯ +0x1144114411441144,//° +0x55AA55AA55AA55AA,//± +0xEEBBEEBBEEBBEEBB,//² +0x1818181818181818,//³ +0x1818181F18181818,//´ +0x1818181F181F1818,//µ +0x6C6C6C6F6C6C6C6C,//¶ +0x6C6C6C7F00000000,//· +0x1818181F181F0000,//¸ +0x6C6C6C6F606F6C6C,//¹ +0x6C6C6C6C6C6C6C6C,//º +0x6C6C6C6F607F0000,//» +0x0000007F606F6C6C,//¼ +0x0000007F6C6C6C6C,//½ +0x0000001F181F1818,//¾ +0x1818181F00000000,//¿ +0x000000F818181818,//À +0x000000FF18181818,//Á +0x181818FF00000000,// +0x181818F818181818,//à +0x000000FF00000000,//Ä +0x181818FF18181818,//Å +0x181818F818F81818,//Æ +0x6C6C6CEC6C6C6C6C,//Ç +0x000000FC0CEC6C6C,//È +0x6C6C6CEC0CFC0000,//É +0x000000FF00EF6C6C,//Ê +0x6C6C6CEF00FF0000,//Ë +0x6C6C6CEC0CEC6C6C,//Ì +0x000000FF00FF0000,//Í +0x6C6C6CEF00EF6C6C,//Î +0x000000FF00FF1818,//Ï +0x000000FF6C6C6C6C,//Ð +0x181818FF00FF0000,//Ñ +0x6C6C6CFF00000000,//Ò +0x000000FC6C6C6C6C,//Ó +0x000000F818F81818,//Ô +0x181818F818F80000,//Õ +0x6C6C6CFC00000000,//Ö +0x6C6C6CEF6C6C6C6C,//× +0x181818FF00FF1818,//Ø +0x0000001F18181818,//Ù +0x181818F800000000,//Ú +0xFFFFFFFFFFFFFFFF,//Û +0xFFFFFFFF00000000,//Ü +0x0F0F0F0F0F0F0F0F,//Ý +0xF0F0F0F0F0F0F0F0,//Þ +0x00000000FFFFFFFF,//ß +0x006E3B133B6E0000,//à +0x03031F331F331E00,//á +0x0003030303637F00,//â +0x0036363636367F00,//ã +0x007F660C180C667F,//ä +0x001E3333337E0000,//å +0x03063E6666666600,//æ +0x00181818183B6E00,//ç +0x3F0C1E33331E0C3F,//è +0x001C36637F63361C,//é +0x007736366363361C,//ê +0x001E33333E180C38,//ë +0x00007EDBDB7E0000,//ì +0x03067EDBDB7E3060,//í +0x003C06033F03063C,//î +0x003333333333331E,//ï +0x00003F003F003F00,//ð +0x003F000C0C3F0C0C,//ñ +0x003F00060C180C06,//ò +0x003F00180C060C18,//ó +0x1818181818D8D870,//ô +0x0E1B1B1818181818,//õ +0x000C0C003F000C0C,//ö +0x0000394E00394E00,//÷ +0x000000001C36361C,//ø +0x0000001818000000,//ù +0x0000001800000000,//ú +0x383C3637303030F0,//û +0x000000363636361E,//ü +0x0000003E061C301E,//ý +0x00003C3C3C3C0000,//þ +0x0000000000000000,//ÿ }; diff --git a/Kernel/Ints.CPP b/Kernel/Ints.CPP index 74952e1..5b7555d 100644 --- a/Kernel/Ints.CPP +++ b/Kernel/Ints.CPP @@ -1,5 +1,4 @@ asm { -USE64 SYS_MP_CRASH_HANDLER_ADDR:: //Forward reference to work around compiler DU32 &MPCrash; @@ -106,7 +105,7 @@ U8 *IntEntryGet(I64 irq) U8 *IntEntrySet(I64 irq,U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0) {//Set interrupt vector. See $LK,"IDTET_IRQ",A="MN:IDTET_IRQ"$. //See $LK,"::/Demo/Lectures/InterruptDemo.CPP"$. -//See $LK,"::/Demo/MultiCore/Interrupts.CPP"$. + //See $LK,"::/Demo/MultiCore/Interrupts.CPP"$. I64 fp=fp_new_handler; U8 *result,*dst; PUSHFD @@ -170,7 +169,7 @@ U0 IntInit1() temp_ptr.limit=256*16-1; temp_ptr.base =dev.idt; SetRAX(&temp_ptr); - LIDT U64 [RAX] + LIDT U64 [RAX] } U0 IntInit2() diff --git a/Kernel/KCfg.CPP b/Kernel/KCfg.CPP index 790b230..4145d4a 100644 --- a/Kernel/KCfg.CPP +++ b/Kernel/KCfg.CPP @@ -22,19 +22,19 @@ class CKernelCfg U8 *boot_rescue_drv_file,*boot_rescue_drv_start; 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; + boot_drv_let,auto_mount_ide_hd_let,auto_mount_ide_cd_let; Bool cdrom_ports_pmt; }; CDoc *KernelCfgAddDev(CKernelCfg *c) { I64 ch,num_hints,first_drv_num,type,unit,cnt=0; - U8 blks_buf[256],addr_buf[256],base0_buf[128],base1_buf[128]; + U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN]; CATARep *root=NULL,*tempha; CDoc *doc=DocNew; Bool make_free; - "\n\nIn anticipation of the drives you will\n" + "\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) Home Drv:"; @@ -44,49 +44,49 @@ CDoc *KernelCfgAddDev(CKernelCfg *c) else c->boot_drv_let=Drv2Let(Fs->cur_dv); - "\n\n$$BK,1$$$$PURPLE$$Mount drives so they will be present when " + "\n\n$$BK,1$$$$PURPLE$$Mount drives so they will be present when " "you boot.$$FG$$$$BK,0$$\n"; do { - "\n****** Mount Drives ******\n" - "The first drive letter is the letter\n" - "of the first partition. If adding\n" - "a hard drive, you should pick 'C'.\n" - "If more than one partition is present\n" - "they will be lettered in sequence.\n" - "\nFirst Drive Letter ($$PURPLE$$$$FG$$ to exit):"; + "\n****** Mount Drives ******\n" + "The first drive letter is the letter\n" + "of the first partition. If adding\n" + "a hard drive, you should pick 'C'.\n" + "If more than one partition is present\n" + "they will be lettered in sequence.\n" + "\nFirst Drive Letter ($$PURPLE$$$$FG$$ to exit):"; first_drv_num=ToUpper(GetChar)-'A'; '\n'; if (0<=first_drv_num$$FG$$ to MAlloc):"; - GetS(addr_buf,256); + GetS(addr_buf,STR_LEN); "Blks of 512 bytes:"; - GetS(blks_buf,256); + GetS(blks_buf,STR_LEN); } else if (type==BDT_ATA || - type==BDT_ATAPI) { + type==BDT_ATAPI) { num_hints=ATARep(,,&root); if (type==BDT_ATAPI) { " to use booted CD-ROM\n"; if (num_hints) - "Enter dev number or\nport with $$PURPLE$$0x$$FG$$ prefix.\n" - "I/O Port Base0:\n"; + "Enter dev number or\nport with $$PURPLE$$0x$$FG$$ prefix.\n" + "I/O Port Base0:\n"; else - "Include $$PURPLE$$0x$$FG$$ prefix.\nI/O Port Base0:\n"; - GetS(base0_buf,128); + "Include $$PURPLE$$0x$$FG$$ prefix.\nI/O Port Base0:\n"; + GetS(base0_buf,STR_LEN); } else do { if (num_hints) - "Enter dev number or\nport with $$PURPLE$$0x$$FG$$ prefix.\n" - "I/O Port Base0:\n"; + "Enter dev number or\nport with $$PURPLE$$0x$$FG$$ prefix.\n" + "I/O Port Base0:\n"; else - "Include $$PURPLE$$0x$$FG$$ prefix.\nI/O Port Base0:\n"; - GetS(base0_buf,128); + "Include $$PURPLE$$0x$$FG$$ prefix.\nI/O Port Base0:\n"; + GetS(base0_buf,STR_LEN); } while (!Str2I64(base0_buf)); if (1<=Str2I64(base0_buf)<=num_hints) { tempha=ATARepFind(root,Str2I64(base0_buf)); @@ -98,11 +98,11 @@ CDoc *KernelCfgAddDev(CKernelCfg *c) StrCpy(base1_buf,"0"); else do { - "I/O Port Base1:\n"; - GetS(base1_buf,128); + "I/O Port Base1:\n"; + GetS(base1_buf,STR_LEN); } while (!Str2I64(base1_buf)); do { - "\t$$PURPLE$$0$$FG$$=Master\n\t$$PURPLE$$1$$FG$$=Slave\nUnit:"; + "\t$$PURPLE$$0$$FG$$=Master\n\t$$PURPLE$$1$$FG$$=Slave\nUnit:"; unit=GetChar-'0'; } while (!(0<=unit<=1)); '\n'; @@ -111,7 +111,7 @@ CDoc *KernelCfgAddDev(CKernelCfg *c) } if (BDT_NULLunit=%d;",first_drv_num+'A',type,unit); + "bd->unit=%d;",first_drv_num+'A',type,unit); if (type==BDT_RAM) { if (!*addr_buf) StrCpy(addr_buf,"0"); DocPrint(doc,"bd->RAM_dsk=%s;",addr_buf); @@ -126,7 +126,7 @@ CDoc *KernelCfgAddDev(CKernelCfg *c) make_free=TRUE; } else DocPrint(doc,"bd->base0=%s;bd->base1=%s;", - base0_buf,base1_buf); + base0_buf,base1_buf); } DocPrint(doc,"BlkDevAdd(bd,FALSE,%d);",make_free); cnt++; @@ -150,16 +150,17 @@ U0 KernelCfgOptions(CKernelCfg *c) 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$$NoMP$$FG$$ No multicore.\n" -"$$PURPLE$$TextMode$$FG$$ Text Mode (requires hard reboot).\n" -"$$PURPLE$$DontProbe$$FG$$ Just prompt CD-ROM 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"; + "\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$$NoMP$$FG$$ No multicore.\n" + "$$PURPLE$$TextMode$$FG$$ Text Mode (requires hard reboot).\n" + "$$PURPLE$$DontProbe$$FG$$ Just prompt CD-ROM 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]; @@ -223,10 +224,10 @@ CKernelCfg *KernelCfgNew() c->add_dev=KernelCfgAddDev(c); 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)"); + "Disk Cache Size in Bytes,\n" + "gets rounded-up funny,\n" + "($$PURPLE$$$$FG$$ will use default.):", + "Scale2Mem(0x80000,0x8000000)"); KernelCfgOptions(c); return c; } diff --git a/Kernel/KDataTypes.CPP b/Kernel/KDataTypes.CPP index 1e21033..801737c 100644 --- a/Kernel/KDataTypes.CPP +++ b/Kernel/KDataTypes.CPP @@ -39,7 +39,7 @@ I64 LinkedLstSize(U8 **_lst) } U0 QueDel(CQue *root,Bool querem=FALSE) -{//Free entrie queue, not root. +{//Free entries in queue, not root. CQue *tempq=root->next,*tempq1; while (tempq!=root) { tempq1=tempq->next; @@ -87,7 +87,7 @@ I64 QueSize(CQue *root) CQueVectU8 *QueVectU8New(I64 min_index=0) {//Create new queue vecter. CQueVectU8 *result=MAlloc(sizeof(CQueVectU8)); - result->next=result->last=result; + QueInit(result); result->total_cnt=result->node_cnt=0; result->min_index=min_index; return result; diff --git a/Kernel/KDbg.CPP b/Kernel/KDbg.CPP index 388bead..15db092 100644 --- a/Kernel/KDbg.CPP +++ b/Kernel/KDbg.CPP @@ -34,7 +34,8 @@ Bool ChkOnStk(U8 *ptr,CTask *task=NULL) PUSHFD CLI if (task) { - if (&task->stk->stk_base<=ptr<=(&task->stk->stk_base)(U8 *)+task->stk->stk_size) + if (&task->stk->stk_base<=ptr<= + (&task->stk->stk_base)(U8 *)+task->stk->stk_size) result=TRUE; } else if (sys_heap_base<=ptr<=sys_heap_limit) result=TRUE; @@ -103,7 +104,7 @@ U8 *TaskCaller(CTask *task=NULL,I64 num=0,Bool saved_context=FALSE) U0 StkRep(CTask *task=NULL) {//Reports whats on the stk. I64 i,j,addr, - **rbp,**rsp,*my_rsp[STK_REP_LEN]; + **rbp,**rsp,*my_rsp[STK_REP_LEN]; CHashTable *old_hash=Fs->hash_table; if (!task) task=Fs; if (!TaskValidate(task)) @@ -127,9 +128,10 @@ U0 StkRep(CTask *task=NULL) Fs->hash_table=task->hash_table; for (i=0;istk->stk_base<=rbp<(&task->stk->stk_base)(U8 *)+task->stk->stk_size)) + if (!(&task->stk->stk_base<=rbp< + (&task->stk->stk_base)(U8 *)+task->stk->stk_size)) break; j=rbp-rsp; if (j>=i) @@ -232,7 +234,7 @@ U0 RawPrint(I64 mS=100,U8 *fmt,...) U0 RawD(I64 mS=100,U8 *addr,I64 cnt=0x80) {//Dumps a block of mem using $LK,"Raw",A="MN:Raw"$ //screen output for a fixed length -//of time. + //of time. Bool old_raw,old_input_filter; PUSHFD CLI @@ -248,7 +250,7 @@ U0 RawD(I64 mS=100,U8 *addr,I64 cnt=0x80) U0 RawDm(I64 mS=100,U8 *addr,I64 cnt=0x80) {//Dumps a block of mem using $LK,"Raw",A="MN:Raw"$ //screen output for a fixed length -//of time. + //of time. Bool old_raw,old_input_filter; PUSHFD CLI @@ -451,12 +453,12 @@ U0 G(U8 *ip=INVALID_PTR,CTask *task=NULL) if (!task) task=Fs; if (ip!=INVALID_PTR) task->rip=ip; if (BptFind(task->rip,task)) - "\nDo one of the following, first:\n" - ">S;\t\t\t//Single step\n" - ">B2;\t\t\t//Clear all break points\n" - ">G2;\t\t\t//Clear all break points and Go\n\n" - "After resuming, changes focus task\n" - "After resuming, flushes screen VGA cache\n"; + "\nDo one of the following, first:\n" + ">S;\t\t\t//Single step\n" + ">B2;\t\t\t//Clear all break points\n" + ">G2;\t\t\t//Clear all break points and Go\n\n" + "After resuming, changes focus task\n" + "After resuming, flushes screen VGA cache\n"; else { LBtr(&task->task_flags,TASKf_DISABLE_BPTS); LBtr(&task->rflags,RFLAGf_TRAP);//No single step @@ -464,7 +466,7 @@ U0 G(U8 *ip=INVALID_PTR,CTask *task=NULL) if (task==Fs) { if (IsDbg && task->next_lex!=&task->next_lex) { "Exit Dbg\n"; - Btr(&task->last_lex->flags,Lf_PMT); + Btr(&task->last_lex->flags,CCf_PMT); } } else Exit; @@ -493,7 +495,7 @@ public U0 S(U8 *ip=INVALID_PTR,CTask *task=NULL) //Single-step. if (task==Fs) { if (IsDbg) { if (task->next_lex!=&task->next_lex) - Btr(&task->last_lex->flags,Lf_PMT); + Btr(&task->last_lex->flags,CCf_PMT); } } else Exit; @@ -502,37 +504,37 @@ public U0 S(U8 *ip=INVALID_PTR,CTask *task=NULL) //Single-step. U0 DbgHelp() { -"\n" -"The cmd line is basically the same as normal. Here are some common\n" -"debugging commands.\n\n" -">EdLite(\"FileName\");\t\t//Edit file.\n" -">D(0x100000);\t\t\t//Dump page tables.\n" -">Dm(0x100000);\t\t\t//Dump page tables.\n" -">Dm(Fs,sizeof(CTask));\t\t//Dump current task record.\n" -">ClassRep(Fs,\"CTask\",1);\t//Dump current task record.\n" -">ClassRep(Fs,,1);\t\t//(It knows lastclass.)\n" -">CallerRep;\t\t\t//Stack trace report.\n" -">Da(_RSP);\t\t\t//Dump stk.\n" -">Dr;\t\t\t\t//Dump Regs.\n" -">1+2*3+&Print;\t\t\t//Show calculation result.\n" -">*(0x70000)(I64 *)=0x123456789;\t//Assign value to 0x70000-0x70007.\n" -">_RAX=0x1234;\t\t\t//Set RAX to 0x1234.\n" -">_RIP=&SysThrowBreak;\t\t//Set RIP.\n" -">I64 i;\t\t\t\t//Declare variable.\n" -">i=_RCX+_RDX;\t\t\t//Assign to variable.\n" -">U(&Print+0x8);\t\t\t//Unassemble Print.\n" -">Uf(\"Print\");\t\t\t//Unassembler function \"Print\".\n" -">Man(\"Print\");\t\t\t//Edit Src for \"Print\".\n" -">E(_RIP);\t\t\t//Edit Src Code.\n" -">Fix;\t\t\t\t//Edit Last Err Src Code.\n" -">B(&Main+0x20);\t\t\t//Toggle break point.\n" -">B2;\t\t\t\t//Clear all break points.\n" -">S;\t\t\t\t//Single step.\n" -">G;\t\t\t\t//Resume execution.\n" -">G2;\t\t\t\t//B2;VGAFlush;WinFocus;G;\n" -">Exit;\t\t\t\t//Exit (kill) task.\n\n" -"After resuming, changes focus task.\n" -"After resuming, flushes screen VGA cache.\n\n"; + "\n" + "The cmd line is basically the same as normal. Here are some common\n" + "debugging commands.\n\n" + ">EdLite(\"FileName\");\t\t//Edit file.\n" + ">D(0x100000);\t\t\t//Dump page tables.\n" + ">Dm(0x100000);\t\t\t//Dump page tables.\n" + ">Dm(Fs,sizeof(CTask));\t\t//Dump current task record.\n" + ">ClassRep(Fs,\"CTask\",1);\t//Dump current task record.\n" + ">ClassRep(Fs,,1);\t\t//(It knows lastclass.)\n" + ">CallerRep;\t\t\t//Stack trace report.\n" + ">Da(_RSP);\t\t\t//Dump stk.\n" + ">Dr;\t\t\t\t//Dump Regs.\n" + ">1+2*3+&Print;\t\t\t//Show calculation result.\n" + ">*(0x70000)(I64 *)=0x123456789;\t//Assign value to 0x70000-0x70007.\n" + ">_RAX=0x1234;\t\t\t//Set RAX to 0x1234.\n" + ">_RIP=&SysThrowBreak;\t\t//Set RIP.\n" + ">I64 i;\t\t\t\t//Declare variable.\n" + ">i=_RCX+_RDX;\t\t\t//Assign to variable.\n" + ">U(&Print+0x8);\t\t\t//Unassemble Print.\n" + ">Uf(\"Print\");\t\t\t//Unassembler function \"Print\".\n" + ">Man(\"Print\");\t\t\t//Edit Src for \"Print\".\n" + ">E(_RIP);\t\t\t//Edit Src Code.\n" + ">Fix;\t\t\t\t//Edit Last Err Src Code.\n" + ">B(&Main+0x20);\t\t\t//Toggle break point.\n" + ">B2;\t\t\t\t//Clear all break points.\n" + ">S;\t\t\t\t//Single step.\n" + ">G;\t\t\t\t//Resume execution.\n" + ">G2;\t\t\t\t//B2;VGAFlush;WinFocus;G;\n" + ">Exit;\t\t\t\t//Exit (kill) task.\n\n" + "After resuming, changes focus task.\n" + "After resuming, flushes screen VGA cache.\n\n"; } U0 Dbg2() @@ -578,7 +580,7 @@ U0 Fault3(I64 fault_num,I64 fault_err_code) SysHlt; } "\n\tTempleOS Debugger\n\n" - ">Help;\t//For help.\n\n"; + ">Help;\t//For help.\n\n"; Beep(500,TRUE); if (fault_num==I_DBG) { if (dbg.msg) { @@ -616,7 +618,8 @@ U0 Fault2(I64 fault_num,I64 fault_err_code) "Task \""; "%s",Fs->task_title; "\"\n"; - "Fault:0x%02X %Z\t\tErr Code:%08X\n",fault_num,fault_num,"ST_INT_NAMES",fault_err_code; + "Fault:0x%02X %Z\t\tErr Code:%08X\n", + fault_num,fault_num,"ST_INT_NAMES",fault_err_code; "RIP:%08X",Fs->rip; //Sometimes crashes on %p, so do this first ":%p RSP:%08X\n",Fs->rip,Fs->rsp; if (fault_num==I_PAGE_FAULT) { @@ -635,7 +638,7 @@ U0 Fault2(I64 fault_num,I64 fault_err_code) } U0 Dbg(U8 *msg=NULL,I64 msg_num=0) -{//Enters the debugger. Can be used as a panic. +{//Enters the debugger.Can be used as a panic. PUSHFD CLI dbg.msg=msg; diff --git a/Kernel/KDefine.CPP b/Kernel/KDefine.CPP index 9ebd518..177721a 100644 --- a/Kernel/KDefine.CPP +++ b/Kernel/KDefine.CPP @@ -97,35 +97,34 @@ U0 DefinePrint(U8 *name,U8 *src,...) U0 SysDefinesLoad() { DefineLstLoad("ST_OFF_ON","Off\0On\0"); - DefineLstLoad("ST_HTT_TYPES","ExportSysSym\0ImportSysSym\0DefineStr\0GlbVar\0Class\0" - "IntType\0Funct\0Word\0DictWord\0KeyWord\0AsmKeyWord\0OpCode\0Reg\0" - "File\0Module\0HelpFile\0Frame Ptr\0" - " \0 \0 \0 \0 \0 \0" - "Private\0Public\0Export\0Import\0Imm\0Goto\0Res\0Unres\0Local\0"); + DefineLstLoad("ST_HTT_TYPES","ExportSysSym\0ImportSysSym\0DefineStr\0GlbVar\0" + "Class\0IntType\0Funct\0Word\0DictWord\0KeyWord\0AsmKeyWord\0OpCode\0" + "Reg\0File\0Module\0HelpFile\0Frame Ptr\0 \0 \0 \0 \0 \0 \0Private\0" + "Public\0Export\0Import\0Imm\0Goto\0Res\0Unres\0Local\0"); DefineLstLoad("ST_DAYS_OF_WEEK","Sunday\0Monday\0Tuesday\0Wednesday\0" - "Thursday\0Friday\0Saturday\0"); + "Thursday\0Friday\0Saturday\0"); DefineLstLoad("ST_MONTHS","January\0February\0March\0April\0May\0" - "June\0July\0August\0September\0October\0November\0December\0"); + "June\0July\0August\0September\0October\0November\0December\0"); DefineLstLoad("ST_FILE_ATTRS","R\0H\0S\0V\0D\0A\0 \0 \0X\0T\0Z\0C\0F\0"); DefineLstLoad("ST_FILE_UTIL_FLAGS","r\0d\0i\0a\0c\0R\0p\0m\0x\0s\0" - "D\0F\0T\0S\0A\0J\0G\0Z\0O\0P\0f\0l\0lb\0la\0"); + "D\0F\0T\0S\0A\0J\0G\0Z\0O\0P\0f\0l\0lb\0la\0"); DefineLstLoad("ST_BLKDEV_TYPES","NULL\0RAM\0ATA\0ATAPI\0"); - DefineLstLoad("ST_DRV_TYPES","NULL\0REDSEA\0FAT32\0ISO9660\0ISO13490\0ISO13346\0NTFS\0UNKNOWN\0"); + DefineLstLoad("ST_DRV_TYPES", + "NULL\0REDSEA\0FAT32\0ISO9660\0ISO13490\0ISO13346\0NTFS\0UNKNOWN\0"); DefineLstLoad("ST_COLORS","BLACK\0BLUE\0GREEN\0CYAN\0" "RED\0PURPLE\0BROWN\0LTGRAY\0DKGRAY\0LTBLUE\0LTGREEN\0" "LTCYAN\0LTRED\0LTPURPLE\0YELLOW\0WHITE\0"); - DefineLstLoad("ST_INT_NAMES", - "Divide Error\0SingleStep\0NMI\0Breakpoint\0Overflow\0BOUND Range Exceeded\0Invalid Opcode\0No Math Coprocessor\0" - "Double Fault\0Coprocessor Segment Fault\0Invalid TASK\0Segment Not Present\0Stk Segment Fault\0General Protection\0Page Fault\0 \0" - "Math Fault\0Alignment Check\0Machine Check\0SIMD Exception\0 \0 \0 \0 \0" - " \0 \0 \0 \0 \0 \0 \0 \0" - " \0 \0 \0 \0 \0 \0 \0 \0" - " \0 \0 \0 \0 \0 \0 \0 \0" - "MP Crash\0Wake\0Dbg\0"); + DefineLstLoad("ST_INT_NAMES","Divide Error\0SingleStep\0NMI\0Breakpoint\0" + "Overflow\0BOUND Range Exceeded\0Invalid Opcode\0No Math Coprocessor\0" + "Double Fault\0Coprocessor Segment Fault\0Invalid TASK\0" + "Segment Not Present\0Stk Segment Fault\0General Protection\0" + "Page Fault\0 \0Math Fault\0Alignment Check\0Machine Check\0" + "SIMD Exception\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0" + " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0MP Crash\0Wake\0Dbg\0"); } U8 *Color2Str(U8 *buf,CColorROPU32 c) -{//$LK,"CColorROPU32",A="MN:CColorROPU32"$ with flags to $LK,"GrLighting",A="MN:GrLighting"$ str. +{//$LK,"CColorROPU32",A="MN:CColorROPU32"$ with flags to $LK,"DCLighting",A="MN:DCLighting"$ str. *buf=0; if (c.c0.rop&ROPBF_TWO_SIDED) CatPrint(buf,"TWO|"); @@ -153,18 +152,20 @@ U8 *Color2Str(U8 *buf,CColorROPU32 c) return buf; } +U8 *str2color_lst="/,)}>"; + CColorROPU16 Str2ColorU16(U8 *st) -{//$LK,"GrLighting",A="MN:GrLighting"$ color str with flags to $LK,"CColorROPU16",A="MN:CColorROPU16"$. +{//$LK,"DCLighting",A="MN:DCLighting"$ color str with flags to $LK,"CColorROPU16",A="MN:CColorROPU16"$. CColorROPU16 result=COLOR_INVALID; I64 i; U8 *ptr,*ptr2,*st2; if (!st) return COLOR_INVALID; while (TRUE) { - if (!*st||StrOcc("/,)}>",*st)) + if (!*st||StrOcc(str2color_lst,*st)) return result; - if (Bt(chars_bitmap_alpha,*st)) { + if (Bt(chars_bmp_alpha,*st)) { ptr=st; - while (Bt(chars_bitmap_alpha_numeric,*ptr)) + while (Bt(chars_bmp_alpha_numeric,*ptr)) ptr++; st2=ptr2=MAlloc(ptr-st+1); while (st",st2); + StrFirstRem(st,str2color_lst,st2); result.c0=Str2ColorU16(st2); if (*st) { result.c1=Str2ColorU16(st); diff --git a/Kernel/KEnd.CPP b/Kernel/KEnd.CPP index 643f9fe..92856f4 100644 --- a/Kernel/KEnd.CPP +++ b/Kernel/KEnd.CPP @@ -13,12 +13,14 @@ U0 SysGlblsInit() dsk.dft_iso_filename="::/Temp/CDDVD.ISO"; StrCpy(dsk.temp_filename,"::/Home/Temp.TXT.Z"); dsk.cdrom_boot_is_good=TRUE; -#exe { - if (!kernel_cfg->auto_mount_ide_hd_let) kernel_cfg->auto_mount_ide_hd_let='C'; - if (!kernel_cfg->auto_mount_ide_cd_let) kernel_cfg->auto_mount_ide_cd_let='T'; - StreamPrint("dsk.first_hd_drv_let=%d;",kernel_cfg->auto_mount_ide_hd_let); - StreamPrint("dsk.first_cd_drv_let=%d;",kernel_cfg->auto_mount_ide_cd_let); -} + #exe { + if (!kernel_cfg->auto_mount_ide_hd_let) + kernel_cfg->auto_mount_ide_hd_let='C'; + if (!kernel_cfg->auto_mount_ide_cd_let) + kernel_cfg->auto_mount_ide_cd_let='T'; + StreamPrint("dsk.first_hd_drv_let=%d;",kernel_cfg->auto_mount_ide_hd_let); + StreamPrint("dsk.first_cd_drv_let=%d;",kernel_cfg->auto_mount_ide_cd_let); + } InDbg(ON); reverse_bits_table =CAlloc(256); @@ -49,7 +51,7 @@ U0 SysGlblsInit() ProgressBarsRst; -//$AN,"Independent HeapCtrl Example",A="Independent HeapCtrl Example"$ + //$AN,"Independent HeapCtrl Example",A="Independent HeapCtrl Example"$ i=1; //Rqst 1 blk, we might get more. m=Mem2MegUncachedAlloc(&i,sys_code_bp); dev.uncached_heap=HeapCtrlBPInit(m,i*0x200000/0x200); @@ -86,12 +88,12 @@ U0 TimersInit() OutU8(0x40,SYS_TIMER0_PERIOD); OutU8(0x40,SYS_TIMER0_PERIOD>>8); -// High Precision Event Timer + //High Precision Event Timer if (PCIReadU16(0,31,0,0)==0x8086) {//Intel? - //D31 F0, cfg 0xF0=RCBA of PCI-LPC Bridge +//D31 F0, cfg 0xF0=RCBA of PCI-LPC Bridge _d=PCIReadU32(0,31,0,0xF0)(U8 *)&~0x3FFF+0x3404; //HPET cfg - //7 enable - //1:0 HPET is at 0xFED00000,0xFED01000, 0xFED02000 or 0xFED03000. +//7 enable + //1:0 HPET is at 0xFED00000,0xFED01000, 0xFED02000 or 0xFED03000. *_d=*_d&3|0x80; } @@ -146,8 +148,8 @@ U0 KernelMain() BSPInit; IntInit1; -//Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"BusyWait",A="MN:BusyWait"$() -//to debug. After this point, use $LK,"RawPrint",A="MN:RawPrint"$() + //Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"BusyWait",A="MN:BusyWait"$() + //to debug. After this point, use $LK,"RawPrint",A="MN:RawPrint"$() LBts(&sys_run_level,RLf_RAW); TimersInit; if (BIOSTotalMemopts[CFG_NO_MP]) - StreamPrint("\"MultiCore Start\\n\\n\";" - "BSPStartMP;" - "LBts(&sys_run_level,RLf_MP);"); -}; + #exe { + if (!kernel_cfg->opts[CFG_NO_MP]) + StreamPrint("\"MultiCore Start\\n\\n\";" + "BSPStartMP;" + "LBts(&sys_run_level,RLf_MP);"); + }; KbdMouseVarsInit; IPVarsInit; @@ -181,10 +183,13 @@ U0 KernelMain() "BlkDevsInitAll\n"; BlkDevsInitAll; "BlkDevsInitAll Done\n"; -#exe { - if (kernel_cfg->cdrom_ports_pmt) - StreamPrint("if (dsk.boot_rescue_drv_pmt) \"%%S\",\"ST_CDROM_PORTS_PMT2\";"); -}; + + #exe { + if (kernel_cfg->cdrom_ports_pmt) + StreamPrint( + "if (dsk.boot_rescue_drv_pmt) \"%%S\",\"ST_CDROM_PORTS_PMT2\";"); + }; + ChgDsk(':'); LBts(&sys_run_level,RLf_DSK); @@ -197,7 +202,7 @@ U0 KernelMain() cnts.time_stamp_freq_initial=TimeStampFreqCal; Cd("/"); try - ExeFile("Adam"); //Continues $LK,"/Adam.CPP",A="FL:/Adam.CPP,1"$ + ExeFile("Adam"); //Continues $LK,"/Adam.CPP",A="FL:/Adam.CPP,1"$ catch { Raw(ON); PutExcept; @@ -213,7 +218,8 @@ SYS_KERNEL_END:: #exe { if (kernel_cfg->opts[CFG_BOOT_RESCUE_DRV]) StreamPrint("DU8 0x%X-(SYS_KERNEL_END-SYS_KERNEL+" - "BOOT_RAM_BASE+sizeof(CBinFile)) DUP (0);" - "BINFILE \"%s\";",kernel_cfg->boot_rescue_drv_start,kernel_cfg->boot_rescue_drv_file); + "BOOT_RAM_BASE+sizeof(CBinFile)) DUP (0);" + "BINFILE \"%s\";",kernel_cfg->boot_rescue_drv_start, + kernel_cfg->boot_rescue_drv_file); }; } diff --git a/Kernel/Except.CPP b/Kernel/KExcept.CPP similarity index 97% rename from Kernel/Except.CPP rename to Kernel/KExcept.CPP index ef04154..42d7461 100644 --- a/Kernel/Except.CPP +++ b/Kernel/KExcept.CPP @@ -1,6 +1,5 @@ asm { -USE64 -#assert !((REG_NON_PTR_MASK|REG_VARS_MASK)&~0xFCC0) +#assert !((REGG_C_LOCAL_NON_PTR_VARS|REGG_C_LOCAL_VARS)&~0xFCC0) _TEST_EXCEPT:: XOR RAX,RAX MOV RAX,FS:U64 CTask.last_except[RAX] @@ -126,7 +125,7 @@ U0 ThrowBreak(CTask *task=NULL) {//Can be used to exit an app, but not a task. if (task && task!=Fs) { if (!TaskValidate(task)) return; - //TODO: Might want lock +//TODO: Might want lock sys_focus_task=task; LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_C); } else diff --git a/Kernel/KExts.CPP b/Kernel/KExts.CPP index b4d41be..a09f743 100644 --- a/Kernel/KExts.CPP +++ b/Kernel/KExts.CPP @@ -6,17 +6,14 @@ var and check it before calling. */ import Bool DocUnlock(CDoc *doc); import Bool Ed(U8 *link_st,I64 edf_dof_flags=0); -import I64 ExeFile(U8 *name,Bool just_load=FALSE); -import I64 ExePrint(U8 *fmt,...); -import U0 MemberLstDel(CHashClass *tempc); extern U0 AdamErr(U8 *fmt,...); extern U0 AdamLog(U8 *fmt,...); extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free); +extern U0 BlkDevChk(CBlkDev *bd); extern Bool BlkDevLock(CBlkDev *bd); extern CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type); extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE); extern U0 BlkDevsRelease(); -extern Bool BptS(U8 *addr,CTask *task=NULL,Bool live=TRUE); extern U8 *Caller(I64 num=1); extern U8 *CatPrint(U8 *dst,U8 *fmt,...); extern Bool Cd(U8 *name,Bool make_dirs=FALSE); @@ -25,18 +22,23 @@ extern U0 DbgHelp(); extern U8 *Define(U8 *name); extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_name,I64 flags=0); extern U8 *DefineSub(I64 sub,U8 *name); +extern I64 Del(U8 *files_find_mask,Bool make_mask=FALSE, + Bool del_dir=FALSE,Bool print_msg=TRUE); extern U8 *DftExt(U8 *name,U8 *extension); extern Bool Drv(U8 drv_let); extern U8 Drv2Let(CDrv *dv=NULL); +extern U0 DrvChk(CDrv *dv); +extern Bool DrvTypeSet(U8 drv_let,I64 type=DVT_REDSEA); extern U0 DrvsRelease(); extern U0 DskCacheInvalidate(CDrv *dv); extern U0 Exit(); extern I64 FAT32AllocClusters(CDrv *dv,I64 c,I64 cnt); extern I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt); -extern Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee,Bool free_old_chain); +extern Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee, + Bool free_old_chain); extern U0 FAT32DrvInit(CDrv *dv); -extern Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); -extern CDirEntry *FAT32FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL,I64 *_dir_size=NULL); +extern Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, + CDirEntry *_result,I64 fuf_flags=0); extern U8 *FileExtRem(U8 *src,U8 *dst=NULL); extern Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0); extern U8 *FileNameAbs(U8 *name,I64 fuf_flags=0); @@ -45,12 +47,14 @@ extern I64 FileWrite(U8 *filename,U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0); extern I64 FlushMsgs(CTask *task=NULL); extern I64 GetChar(I64 *scan_code=NULL,Bool echo=TRUE,Bool raw_cursor=FALSE); extern I64 GetS(U8 *buf,I64 size,Bool allow_ext=TRUE); -extern Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); -extern CDirEntry *ISO1FilesFind(U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL); +extern Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, + CDirEntry *_result,I64 fuf_flags=0); extern Bool ISODrvInit(CDrv *dv,I64 blk); extern Bool IsDbg(); extern Bool IsDir(U8 *dir_name); extern Bool IsRaw(); +extern CBlkDev *Let2BlkDev(U8 drv_let=0); +extern CDrv *Let2Drv(U8 drv_let=0); extern U0 MPInt(I64 num,I64 cpu_num=1); extern U8 *MStrPrint(U8 *fmt,...); extern Bool MkDir(U8 *filename); @@ -62,11 +66,12 @@ extern U0 PutChars(U64 ch); extern U0 PutS(U8 *st); //Use $LK,"Print",A="MN:Print"$() extern Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); extern I64 RedSeaAllocClusters(CDrv *dv,I64 cnt); -extern Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee,Bool free_old_chain); +extern Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee, + Bool free_old_chain); extern U0 RedSeaDrvInit(CDrv *dv); extern Bool RedSeaDrvValidate(U8 drv_let); -extern Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,CDirEntry *_result,I64 fuf_flags=0); -extern CDirEntry *RedSeaFilesFind (U8 *files_find_mask,I64 fuf_flags,CDirEntry *parent=NULL); +extern Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, + CDirEntry *_result,I64 fuf_flags=0); extern U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE); extern U0 RedSeaFreeFreeLst(CDrv *dv); extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, @@ -79,7 +84,8 @@ extern U0 SrvCtrlInit(CSrvCtrl *ctrl); extern U8 *StrPrint(U8 *dst,U8 *fmt,...); extern U0 StrPrintPSect(U8 *buf,I64 addr,I64 field_len); extern Bool Suspend(CTask *task=NULL,Bool state=TRUE); -extern CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 code,I64 a1,I64 a2,I64 flags); +extern CSrvCmd *TaskMsg(CTask *_srv,CTask *master, + I64 code,I64 a1,I64 a2,I64 flags); extern U0 TaskRstAwaitingMsg(CTask *task=NULL); extern Bool TaskValidate(CTask *task); extern U0 TaskWait(CTask *task=NULL); @@ -88,12 +94,3 @@ extern U0 UserTaskCont(); extern Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); extern U0 XTalk(CTask *task,U8 *fmt,...); extern U0 throw(I64 ch=0,Bool no_log=FALSE); -#exe { - OptOn(OPTf_KEEP_PRIVATE); - OptOn(OPTf_EXTERNS_TO_IMPORTS); -}; -#include "/Compiler/CompilerB.HPP" -#exe { - OptOff(OPTf_EXTERNS_TO_IMPORTS); - OptOff(OPTf_KEEP_PRIVATE); -}; diff --git a/Kernel/KGlbls.CPP b/Kernel/KGlbls.CPP index ca212dc..27e2aac 100644 --- a/Kernel/KGlbls.CPP +++ b/Kernel/KGlbls.CPP @@ -10,13 +10,13 @@ I64 sys_num_spawned_tasks; CTask *sys_winmgr_task,*sys_task_being_screen_updated; U8 *reverse_bits_table, //Table with U8 bits reversed *set_bits_table; //Table with count of set bits in a U8 -CDate local_time_offset=0; +CDate local_time_offset; F64 *pow10_I64; CSndGlbls snd; CCntsGlbls cnts={1,0,2676302000,2676302,2676302000,0,0,0,FALSE}; CIPStateGlbls ip,ip_last; -CGridGlbls ip_grid; +CGridGlbls ip_grid; //See $LK,"::/Demo/Graphics/Grid.CPP.Z"$. CMouseStateGlbls mouse,mouse_last; CKbdStateGlbls kbd; CKeyDevGlbls keydev; diff --git a/Kernel/KHashA.CPP b/Kernel/KHashA.CPP index 046f143..074b24d 100644 Binary files a/Kernel/KHashA.CPP and b/Kernel/KHashA.CPP differ diff --git a/Kernel/KHashB.CPP b/Kernel/KHashB.CPP index 1b9a54b..d89a102 100644 --- a/Kernel/KHashB.CPP +++ b/Kernel/KHashB.CPP @@ -69,7 +69,7 @@ U0 HashDel(CHashSrcSym *temph) if (temph->type & (HTT_FUN | HTT_EXPORT_SYS_SYM)) Free(temph->dbg_info); if (temph->type & (HTT_FUN | HTT_CLASS)) - //Assumes code not on heap, so doesn't Free. +//Assumes code not on heap, so doesn't Free. //$LK,"MemberLstDel",A="MN:MemberLstDel"$() is an import to the Kernel module MemberLstDel(temph); else if (temph->type&HTT_DEFINE_STR) @@ -79,7 +79,8 @@ U0 HashDel(CHashSrcSym *temph) Free(temph(CHashGlblVar *)->data_addr); LinkedLstDel(temph(CHashGlblVar *)->dim.next); if (temph(CHashGlblVar *)->fun_ptr) - HashDel(temph(CHashGlblVar *)->fun_ptr-temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt); + HashDel(temph(CHashGlblVar *)->fun_ptr + -temph(CHashGlblVar *)->fun_ptr->ptr_stars_cnt); } } else if (temph->type & HTT_FILE) Free(temph(CHashGeneric *)->user_data0); @@ -108,8 +109,8 @@ I64 HashTablePurge(CHashTable *table) I64 i,result=0; CHashSrcSym *temph,*temph1,*temph2; if (!table) return 0; - PUSHFD - CLI //Precaution + PUSHFD + CLI //Precaution for (i=0;i<=table->mask;i++) { temph=table->body[i]; while (temph) { @@ -117,7 +118,8 @@ I64 HashTablePurge(CHashTable *table) if (temph->type&(HTT_FUN|HTT_GLBL_VAR)) { temph2=temph->next; //Older always later in chain while (temph2) { - if ((temph2->type&HTT_EXPORT_SYS_SYM || temph2->type&HTG_TYPE_MASK==HTT_INVALID) && + if ((temph2->type&HTT_EXPORT_SYS_SYM || + temph2->type&HTG_TYPE_MASK==HTT_INVALID) && !StrCmp(temph2->str,temph->str)) { if (temph2->type&HTG_TYPE_MASK==HTT_INVALID) temph2->type=HTT_KEYWORD;//Won't delete HTT_INVALID @@ -131,11 +133,12 @@ I64 HashTablePurge(CHashTable *table) temph=temph1; } } - POPFD + POPFD return result; } -CHashGeneric *HashGenericAdd(U8 *name,I64 type,I64 u0=0,I64 u1=0,I64 u2=0,CTask *task=NULL) +CHashGeneric *HashGenericAdd(U8 *name,I64 type, + I64 u0=0,I64 u1=0,I64 u2=0,CTask *task=NULL) {//Add any type to task hash_table, 3 user_data values. if (!task) task=Fs; CHashGeneric *result=CAlloc(sizeof(CHashGeneric),task); @@ -148,18 +151,18 @@ CHashGeneric *HashGenericAdd(U8 *name,I64 type,I64 u0=0,I64 u1=0,I64 u2=0,CTask return result; } -U0 HashSrcFileSet(CLex *lx,CHashSrcSym *h,I64 line_num_offset=0) -{//Set $LK,"CHashSrcSym",A="MN:CHashSrcSym"$ link and help_index by cur lx pos. - CLexFile *tempf=lx->cur_lfn; +U0 HashSrcFileSet(CCmpCtrl *cc,CHashSrcSym *h,I64 line_num_offset=0) +{//Set $LK,"CHashSrcSym",A="MN:CHashSrcSym"$ link and help_index by cur cc pos. + CLexFile *tempf=cc->lex_include_stk; I64 line_num=tempf->line_num+line_num_offset; if (line_num<1) line_num=1; Free(h->src_link); h->src_link=MStrPrint("FL:%s,%d",tempf->full_name,line_num); - if (Bt(&lx->opts,OPTf_KEEP_PRIVATE)) + if (Bt(&cc->opts,OPTf_KEEP_PRIVATE)) h->type|=HTF_PRIVATE; Free(h->index); - if (lx->cur_help_index) - h->index=StrNew(lx->cur_help_index); + if (cc->cur_help_index && *cc->cur_help_index) + h->index=StrNew(cc->cur_help_index); else h->index=NULL; } diff --git a/Kernel/KLoad.CPP b/Kernel/KLoad.CPP index a136b62..4aac06f 100644 --- a/Kernel/KLoad.CPP +++ b/Kernel/KLoad.CPP @@ -16,7 +16,8 @@ U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags) return; } else { first=FALSE; - if (!(tempex=HashFind(st_ptr,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) { + if (!(tempex=HashFind(st_ptr, + Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) { if (!(ld_flags & LDF_SILENT)) "Unresolved Reference:%s\n",st_ptr; tempiss=CAlloc(sizeof(CHashImport)); @@ -37,14 +38,14 @@ U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags) else i=tempex->val; switch (etype) { - case EIT_REL_I8: *ptr2(U8 *) =i-ptr2-1; break; - case EIT_IMM_U8: *ptr2(U8 *) =i; break; - case EIT_REL_I16: *ptr2(U16 *)=i-ptr2-2; break; - case EIT_IMM_U16: *ptr2(U16 *)=i; break; - case EIT_REL_I32: *ptr2(U32 *)=i-ptr2-4; break; - case EIT_IMM_U32: *ptr2(U32 *)=i; break; - case EIT_REL_I64: *ptr2(I64 *)=i-ptr2-8; break; - case EIT_IMM_I64: *ptr2(I64 *)=i; break; + case IET_REL_I8: *ptr2(U8 *) =i-ptr2-1; break; + case IET_IMM_U8: *ptr2(U8 *) =i; break; + case IET_REL_I16: *ptr2(U16 *)=i-ptr2-2; break; + case IET_IMM_U16: *ptr2(U16 *)=i; break; + case IET_REL_I32: *ptr2(U32 *)=i-ptr2-4; break; + case IET_IMM_U32: *ptr2(U32 *)=i; break; + case IET_REL_I64: *ptr2(I64 *)=i-ptr2-8; break; + case IET_IMM_I64: *ptr2(I64 *)=i; break; } } } @@ -55,7 +56,8 @@ U0 SysSymImportsResolve(U8 *st_ptr,I64 ld_flags) { CHashImport *tempiss; U8 *ptr; - while (tempiss=HashSingleTableFind(st_ptr,Fs->hash_table,HTT_IMPORT_SYS_SYM)) { + while (tempiss=HashSingleTableFind(st_ptr, + Fs->hash_table,HTT_IMPORT_SYS_SYM)) { ptr=tempiss->module_header_entry; LoadOneImport(&ptr,tempiss->module_base,ld_flags); tempiss->type=HTT_INVALID; @@ -72,25 +74,25 @@ U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags) st_ptr=src; src+=StrLen(st_ptr)+1; switch (etype) { - case EIT_REL32_EXPORT: - case EIT_IMM32_EXPORT: - case EIT_REL64_EXPORT: - case EIT_IMM64_EXPORT: + case IET_REL32_EXPORT: + case IET_IMM32_EXPORT: + case IET_REL64_EXPORT: + case IET_IMM64_EXPORT: tempex=CAlloc(sizeof(CHashExport)); tempex->str=StrNew(st_ptr); tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; - if (etype==EIT_IMM32_EXPORT||etype==EIT_IMM64_EXPORT) + if (etype==IET_IMM32_EXPORT||etype==IET_IMM64_EXPORT) tempex->val=i; else tempex->val=i+module_base; HashAdd(tempex,Fs->hash_table); SysSymImportsResolve(st_ptr,ld_flags); break; - case EIT_REL_I0...EIT_IMM_I64: + case IET_REL_I0...IET_IMM_I64: src=st_ptr-5; LoadOneImport(&src,module_base,ld_flags); break; - case EIT_ABS_ADDR: + case IET_ABS_ADDR: if (ld_flags & LDF_NO_ABSS) src+=i*sizeof(U32); else { @@ -103,10 +105,10 @@ U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags) break; sub_switch_start: - case EIT_CODE_HEAP: + case IET_CODE_HEAP: ptr3=MAlloc(*src(I32 *)++,Fs->code_heap); break; - case EIT_ZEROED_CODE_HEAP: + case IET_ZEROED_CODE_HEAP: ptr3=CAlloc(*src(I32 *)++,Fs->code_heap); break; sub_switch_end: @@ -125,10 +127,10 @@ U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags) break; sub_switch_start: - case EIT_DATA_HEAP: + case IET_DATA_HEAP: ptr3=MAlloc(*src(I64 *)++); break; - case EIT_ZEROED_DATA_HEAP: + case IET_ZEROED_DATA_HEAP: ptr3=CAlloc(*src(I64 *)++); break; sub_switch_end: @@ -158,18 +160,18 @@ U0 LoadPass2(U8 *src,U8 *module_base,I64) st_ptr=src; src+=StrLen(st_ptr)+1; switch (etype) { - case EIT_MAIN: + case IET_MAIN: Call(i+module_base); break; - case EIT_ABS_ADDR: + case IET_ABS_ADDR: src+=sizeof(U32)*i; break; - case EIT_CODE_HEAP: - case EIT_ZEROED_CODE_HEAP: + case IET_CODE_HEAP: + case IET_ZEROED_CODE_HEAP: src+=4+sizeof(U32)*i; break; - case EIT_DATA_HEAP: - case EIT_ZEROED_DATA_HEAP: + case IET_DATA_HEAP: + case IET_ZEROED_DATA_HEAP: src+=8+sizeof(U32)*i; break; } @@ -189,7 +191,7 @@ CBinFile *Load(U8 *filename,I64 ld_flags=0,CBinFile *bfh_addr=INVALID_PTR) return NULL; } - //See $LK,"Patch Table Generation",A="FF:::/Compiler/CMain.CPP,EIT_ABS_ADDR"$ + //See $LK,"Patch Table Generation",A="FF:::/Compiler/CMain.CPP,IET_ABS_ADDR"$ module_align=1<module_align_bits; if (!module_align || bfh->bin_signature!=BIN_SIGNATURE_VAL) { Free(bfh); @@ -218,7 +220,7 @@ CBinFile *Load(U8 *filename,I64 ld_flags=0,CBinFile *bfh_addr=INVALID_PTR) MemCpy(bfh_addr,bfh,size); Free(bfh); -lo_skip: + lo_skip: module_base=bfh_addr(U8 *)+sizeof(CBinFile); absname=FileNameAbs(fbuf); @@ -237,11 +239,12 @@ lo_skip: U0 LoadKernel() { - HashGenericAdd(KERNEL_MODULE_NAME,HTT_MODULE|HTF_PUBLIC,sys_boot_base-sizeof(CBinFile)); + HashGenericAdd(KERNEL_MODULE_NAME,HTT_MODULE|HTF_PUBLIC, + sys_boot_base-sizeof(CBinFile)); -//Abs patches done here $LK,"CPatchTableAbsAddr",A="FF:D:/Kernel/KStart.CPP,CPatchTableAbsAddr"$. + //Abs patches done here $LK,"CPatchTableAbsAddr",A="FF:D:/Kernel/KStart.CPP,CPatchTableAbsAddr"$. LoadPass1(sys_boot_patch_table_base,sys_boot_base,LDF_NO_ABSS|LDF_SILENT); -//No main routines -// LoadPass2(sys_boot_patch_table_base,sys_boot_base,0); + //No main routines + // LoadPass2(sys_boot_patch_table_base,sys_boot_base,0); } diff --git a/Kernel/KMathA.CPP b/Kernel/KMathA.CPP index cacbde5..976b869 100644 --- a/Kernel/KMathA.CPP +++ b/Kernel/KMathA.CPP @@ -1,5 +1,4 @@ asm { -USE64 //************************************ _D3_NORM:: PUSH RBP diff --git a/Kernel/KMisc.CPP b/Kernel/KMisc.CPP index 210d272..9b7cbf7 100644 --- a/Kernel/KMisc.CPP +++ b/Kernel/KMisc.CPP @@ -281,48 +281,3 @@ U0 ProgressBarsRst() { MemSet(sys_progresses,0,sizeof(sys_progresses)); } - -U0 CtrlAltDel(I64) -{ - LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_DEL); -} - -U0 CtrlAltC(I64) -{ - LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_C); -} - -U0 CtrlAltD(I64) -{ - if (!IsDbg) { - if (Fs==Gs->idle_task) - BptS(sys_winmgr_task->rip,sys_winmgr_task); - else - BptS(*keydev.ctrl_alt_let_ret_addr); - } -} - -U0 CtrlAltE(I64) -{ - User; -} - -U0 CtrlAltF(I64) -{ - VGAFlush; -} - -U0 CtrlAltM(I64) -{ - Mute(!IsMute); -} - -U0 CtrlAltT(I64) -{ - LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_TAB); -} - -U0 CtrlAltX(I64) -{ - LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_X); -} diff --git a/Kernel/KStart.CPP b/Kernel/KStart.CPP index 48da9d1..21eeceb 100644 --- a/Kernel/KStart.CPP +++ b/Kernel/KStart.CPP @@ -28,9 +28,9 @@ SYS_RUN_LEVEL:: DU32 0; //See $LK,"BootCdProbe",A="MN:BootCdProbe"$ #assert SYS_COMPILE_TIME+sizeof(CDate)+sizeof(CBinFile). - ch=ToUpper(ch)-'A'; - if (ch<26) { - keydev.fp_ctrl_alt_let_cbs[ch]=fp_handler; - Free(keydev.ctrl_alt_let_descs[ch]); - keydev.ctrl_alt_let_descs[ch]=AStrNew(desc); - BEqu(&keydev.ctrl_alt_let_in_irq_flags,ch,in_irq); - } -} - U0 KbdInit() { try { @@ -424,14 +419,6 @@ U0 KbdInit() } IntEntrySet(0x21,&KbdIntHandler); OutU8(0x21,InU8(0x21)&~2); - - CtrlAltLetCBSet('C',&CtrlAltC,"Sys/Break Execution",TRUE); - CtrlAltLetCBSet('D',&CtrlAltD,"Sys/Enter Debugger",TRUE); - CtrlAltLetCBSet('E',&CtrlAltE,"Sys/Spawn New User Task"); - CtrlAltLetCBSet('F',&CtrlAltF,"Sys/VGA Flush",TRUE); - CtrlAltLetCBSet('M',&CtrlAltM,"Sys/Toggle Mute"); - CtrlAltLetCBSet('T',&CtrlAltT,"Sys/Switch Focus to Next Task",TRUE); - CtrlAltLetCBSet('X',&CtrlAltX,"Sys/Kill Focused Task",TRUE); } U0 KbdHandler() diff --git a/Kernel/KbdMouse/Message.CPP b/Kernel/KbdMouse/Message.CPP index 713792b..5b8deb3 100644 --- a/Kernel/KbdMouse/Message.CPP +++ b/Kernel/KbdMouse/Message.CPP @@ -20,10 +20,10 @@ U0 InputFilterTask() SetRFlags(old_flags); Preempt(ON); try - ExePrint("%s",tempc->aux_str); + ExePrint("%s",tempc->aux_str); catch Fs->catch_except=TRUE; - Preempt(OFF); + Preempt; SrvCmdDel(tempc); } else break; @@ -66,8 +66,8 @@ Note: This delivers messages from parent down to pop-up. *_a2=tempc->aux2; SrvCmdDel(tempc); if ((result!=MSG_KEY_DOWN || !(tempc->aux2&SCF_KEY_DESC) || - Bt(&mask,MSGF_ALLOW_KEY_DESC)) && Bt(&mask,result)) - goto sm_done; + Bt(&mask,MSGF_ALLOW_KEY_DESC)) && Bt(&mask,result)) + goto sm_done; } } SetRFlags(old_flags); @@ -97,9 +97,9 @@ I64 FlushMsgs(CTask *task=NULL) I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL) {//Wait for a message of type specified by a one in the mask. //Throw-out all messages not in mask. -//Returns $LK,"msg_code",A="MN:MSG_CMD"$. See $LK,"::/Demo/MsgLoop.CPP"$. + //Returns $LK,"msg_code",A="MN:MSG_CMD"$. See $LK,"::/Demo/MsgLoop.CPP"$. I64 result; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (!task) task=Fs; LBtr(&task->task_flags,TASKf_IDLE); while (!(result=ScanMsg(_a1,_a2,mask,task))) { @@ -114,7 +114,7 @@ I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL) I64 ScanChar() {//Checks for $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$ and returns 0 immediately if no key. //Waits for $LK,"MSG_KEY_UP",A="MN:MSG_KEY_UP"$ of non-zero $LK,"ASCII",A="MN:CH_CTRLA"$ key and returns $LK,"ASCII",A="MN:CH_CTRLA"$ if key. -//$LK,"ScanMsg",A="MN:ScanMsg"$() throws away other message types. + //$LK,"ScanMsg",A="MN:ScanMsg"$() throws away other message types. I64 a1a,a2a,a1b,a2b; if (!ScanMsg(&a1a,&a2a,1<task_flags,TASKf_IDLE); if (IsDbg) { - //We don't want interrupt-driven keyboard when in debugger +//We don't want interrupt-driven keyboard when in debugger //because that could have side-effects or crash, so we poll //keyboard when in debugger with interrupts off. PUSHFD diff --git a/Kernel/KbdMouse/Mouse.CPP b/Kernel/KbdMouse/Mouse.CPP index 5570462..b822d5d 100644 --- a/Kernel/KbdMouse/Mouse.CPP +++ b/Kernel/KbdMouse/Mouse.CPP @@ -49,7 +49,7 @@ Bool MouseRst() if (*_w==0x9FC0) { _b=0x9FC00+0x30; *_b=1; //This enables my mouse. It might be for one machine. - //USB DMA packets, set-up by BIOS to make legacy PS/2? +//USB DMA packets, set-up by BIOS to make legacy PS/2? } if (!present) MemPagePresentMark(_w,FALSE); @@ -71,7 +71,7 @@ Bool MouseRst() while (tScatch_except=TRUE; @@ -98,7 +98,7 @@ Bool MouseRst() KbdMouseCmdAck(0xF4); // enable Mouse result=TRUE; -//Enable IRQ 12 + //Enable IRQ 12 KbdCmdSend(KBD_CTRL,0x20); b=KbdCmdRead; KbdCmdSend(KBD_CTRL,0x60); @@ -107,12 +107,12 @@ Bool MouseRst() } catch Fs->catch_except=TRUE; -//This is been added to override failure -//because the mouse sometimes still works. - result=TRUE; + //This is been added to override failure + //because the mouse sometimes still works. + result=TRUE; try - KbdCmdSend(KBD_CTRL,0xAE); //Enable Keyboard + KbdCmdSend(KBD_CTRL,0xAE); //Enable Keyboard catch Fs->catch_except=TRUE; if (mouse.has_wheel || mouse.has_ext_buttons) @@ -121,7 +121,7 @@ Bool MouseRst() mouse.pkt_size=3; if (!result) try - KbdCmdSend(KBD_CTRL,0xA7); //Disable Mouse + KbdCmdSend(KBD_CTRL,0xA7); //Disable Mouse catch Fs->catch_except=TRUE; return result; @@ -130,8 +130,9 @@ Bool MouseRst() U0 MouseSpeedSet() { I64 dd,temp; - if ((dd=SqrI64(mouse_last.pos.x-mouse.pos.x)+SqrI64(mouse_last.pos.y-mouse.pos.y)) && - (temp=mouse.timestamp-mouse_last.timestamp)) + if ((dd=SqrI64(mouse_last.pos.x-mouse.pos.x) + +SqrI64(mouse_last.pos.y-mouse.pos.y)) && + (temp=mouse.timestamp-mouse_last.timestamp)) mouse.speed=Sqrt(dd)*cnts.time_stamp_freq/temp; mouse_last.timestamp=mouse.timestamp; } @@ -150,7 +151,8 @@ U0 MouseUpdatePost() mouse.pos.y=mouse.prescale.y*mouse.scale.y*ip_grid.y_speed; mouse.pos.z=mouse.prescale.z*mouse.scale.z*ip_grid.z_speed; - i=Trunc(ip.scale.x*mouse.pos.x/ip_grid.x)*ip_grid.x+ip.offset.x; //TODO ip_grid.x_offset? + i=Trunc(ip.scale.x*mouse.pos.x/ip_grid.x)*ip_grid.x+ip.offset.x; +//TODO ip_grid.x_offset? if (i<0) ip.offset.x-=i; else if (i>=GR_WIDTH) @@ -162,7 +164,8 @@ U0 MouseUpdatePost() else if (i>=GR_HEIGHT) ip.offset.y+=GR_HEIGHT-1-i; - if (mouse.pos.x!=mouse_last.pos.x || mouse.pos.y!=mouse_last.pos.y || mouse.pos.z!=mouse_last.pos.z) { + if (mouse.pos.x!=mouse_last.pos.x || mouse.pos.y!=mouse_last.pos.y || + mouse.pos.z!=mouse_last.pos.z) { mouse.evt=TRUE; MouseSpeedSet; } else @@ -264,8 +267,8 @@ U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse) KbdMouseRst; else { if (poll_mouse && - mouse.installed && - !mouse.irqs_working) { + mouse.installed && + !mouse.irqs_working) { PUSHFD CLI while (InU8(KBD_CTRL)&1) diff --git a/Kernel/Kernel.MAP b/Kernel/Kernel.MAP index 58215b8..dc18e22 100644 --- a/Kernel/Kernel.MAP +++ b/Kernel/Kernel.MAP @@ -1,3213 +1,2809 @@ -$LK,"ACAlloc ",A="FL:C:/Kernel/MemB.CPP.Z,388",BI=1$0000004D7A 000A 000000001B Funct Export Res -$LK,"ADAM_STK ",A="FL:C:/Kernel/KernelA.HPP,2774"$(PAGE_SIZE 0002 0000000018 DefineStr -$LK,"AKW_ALIGN ",A="FL:C:/Compiler/CompilerA.HPP,290"$64 0000 0000000008 DefineStr -$LK,"AKW_BINFILE ",A="FL:C:/Compiler/CompilerA.HPP,314"$88 0000 0000000008 DefineStr -$LK,"AKW_DU16 ",A="FL:C:/Compiler/CompilerA.HPP,304"$78 0000 0000000008 DefineStr -$LK,"AKW_DU32 ",A="FL:C:/Compiler/CompilerA.HPP,305"$79 0000 0000000008 DefineStr -$LK,"AKW_DU64 ",A="FL:C:/Compiler/CompilerA.HPP,306"$80 0000 0000000008 DefineStr -$LK,"AKW_DU8 ",A="FL:C:/Compiler/CompilerA.HPP,303"$77 0000 0000000008 DefineStr -$LK,"AKW_DUP ",A="FL:C:/Compiler/CompilerA.HPP,307"$81 0000 0000000008 DefineStr -$LK,"AKW_F64 ",A="FL:C:/Compiler/CompilerA.HPP,302"$76 0000 0000000008 DefineStr -$LK,"AKW_I0 ",A="FL:C:/Compiler/CompilerA.HPP,292"$66 0000 0000000008 DefineStr -$LK,"AKW_I16 ",A="FL:C:/Compiler/CompilerA.HPP,294"$68 0000 0000000008 DefineStr -$LK,"AKW_I32 ",A="FL:C:/Compiler/CompilerA.HPP,295"$69 0000 0000000008 DefineStr -$LK,"AKW_I64 ",A="FL:C:/Compiler/CompilerA.HPP,296"$70 0000 0000000008 DefineStr -$LK,"AKW_I8 ",A="FL:C:/Compiler/CompilerA.HPP,293"$67 0000 0000000008 DefineStr -$LK,"AKW_IMPORT ",A="FL:C:/Compiler/CompilerA.HPP,311"$85 0000 0000000008 DefineStr -$LK,"AKW_LIST ",A="FL:C:/Compiler/CompilerA.HPP,312"$86 0000 0000000008 DefineStr -$LK,"AKW_MODULE_ORG ",A="FL:C:/Compiler/CompilerA.HPP,291"$65 0000 0000000008 DefineStr -$LK,"AKW_NOLIST ",A="FL:C:/Compiler/CompilerA.HPP,313"$87 0000 0000000008 DefineStr -$LK,"AKW_U0 ",A="FL:C:/Compiler/CompilerA.HPP,297"$71 0000 0000000008 DefineStr -$LK,"AKW_U16 ",A="FL:C:/Compiler/CompilerA.HPP,299"$73 0000 0000000008 DefineStr -$LK,"AKW_U32 ",A="FL:C:/Compiler/CompilerA.HPP,300"$74 0000 0000000008 DefineStr -$LK,"AKW_U64 ",A="FL:C:/Compiler/CompilerA.HPP,301"$75 0000 0000000008 DefineStr -$LK,"AKW_U8 ",A="FL:C:/Compiler/CompilerA.HPP,298"$72 0000 0000000008 DefineStr -$LK,"AKW_USE16 ",A="FL:C:/Compiler/CompilerA.HPP,308"$82 0000 0000000008 DefineStr -$LK,"AKW_USE32 ",A="FL:C:/Compiler/CompilerA.HPP,309"$83 0000 0000000008 DefineStr -$LK,"AKW_USE64 ",A="FL:C:/Compiler/CompilerA.HPP,310"$84 0000 0000000008 DefineStr -$LK,"AMAlloc ",A="FL:C:/Kernel/MemB.CPP.Z,376",BI=2$0000004D22 000B 000000001B Funct Export Res -$LK,"AMAllocIdentical ",A="FL:C:/Kernel/MemB.CPP.Z,404",BI=3$0000004DEA 0004 000000001B Funct Export Res -$LK,"APSethInit ",A="FL:C:/Kernel/MultiProc.CPP.Z,293",BI=4$0000026992 0001 0000000043 Funct Export Res -$LK,"APSethTask ",A="FL:C:/Kernel/MultiProc.CPP.Z,211",BI=5$000002675A 0001 0000000073 Funct Export Res -$LK,"AP_16BIT_INIT ",A="FL:C:/Kernel/MultiProc.CPP.Z,9"$00000261C0 0002 ExportSysSym Export -$LK,"AP_16BIT_INIT_END ",A="FL:C:/Kernel/MultiProc.CPP.Z,27"$00000261F1 0001 ExportSysSym Export -AP_32BIT_INIT 00000261F1 0001 ExportSysSym -AP_GDT_PTR 00000261C4 0000 ExportSysSym -$LK,"ARC_MAX_BITS ",A="FL:C:/Kernel/KernelA.HPP,3634"$12 0004 0000000008 DefineStr -$LK,"ARC_MAX_ENTRY ",A="FL:C:/Kernel/KernelA.HPP,3635"$(1<r10 0000 0000000008 DefineStr -$LK,"_R11 ",A="FL:C:/Kernel/KernelA.HPP,3326"$Fs->r11 0000 0000000008 DefineStr -$LK,"_R12 ",A="FL:C:/Kernel/KernelA.HPP,3327"$Fs->r12 0000 0000000008 DefineStr -$LK,"_R13 ",A="FL:C:/Kernel/KernelA.HPP,3328"$Fs->r13 0000 0000000008 DefineStr -$LK,"_R14 ",A="FL:C:/Kernel/KernelA.HPP,3329"$Fs->r14 0000 0000000008 DefineStr -$LK,"_R15 ",A="FL:C:/Kernel/KernelA.HPP,3330"$Fs->r15 0000 0000000008 DefineStr -$LK,"_R8 ",A="FL:C:/Kernel/KernelA.HPP,3323"$Fs->r8 0000 0000000008 DefineStr -$LK,"_R9 ",A="FL:C:/Kernel/KernelA.HPP,3324"$Fs->r9 0000 0000000008 DefineStr -$LK,"_RAX ",A="FL:C:/Kernel/KernelA.HPP,3314"$Fs->rax 0000 0000000008 DefineStr -$LK,"_RBP ",A="FL:C:/Kernel/KernelA.HPP,3320"$Fs->rbp 0000 0000000008 DefineStr -$LK,"_RBX ",A="FL:C:/Kernel/KernelA.HPP,3315"$Fs->rbx 0000 0000000008 DefineStr -$LK,"_RCX ",A="FL:C:/Kernel/KernelA.HPP,3316"$Fs->rcx 0000 0000000008 DefineStr -$LK,"_RDI ",A="FL:C:/Kernel/KernelA.HPP,3319"$Fs->rdi 0000 0000000008 DefineStr -$LK,"_RDX ",A="FL:C:/Kernel/KernelA.HPP,3317"$Fs->rdx 0000 0000000008 DefineStr -$LK,"_REP_IN_U16 ",A="FL:C:/Kernel/KUtils.CPP.Z,265"$0000002097 0001 ExportSysSym Export -$LK,"_REP_IN_U32 ",A="FL:C:/Kernel/KUtils.CPP.Z,254"$000000207F 0001 ExportSysSym Export -$LK,"_REP_IN_U8 ",A="FL:C:/Kernel/KUtils.CPP.Z,276"$00000020B0 0001 ExportSysSym Export -$LK,"_REP_OUT_U16 ",A="FL:C:/Kernel/KUtils.CPP.Z,298"$00000020E0 0001 ExportSysSym Export -$LK,"_REP_OUT_U32 ",A="FL:C:/Kernel/KUtils.CPP.Z,287"$00000020C8 0001 ExportSysSym Export -$LK,"_REP_OUT_U8 ",A="FL:C:/Kernel/KUtils.CPP.Z,309"$00000020F9 0001 ExportSysSym Export -$LK,"_RET ",A="FL:C:/Kernel/KUtils.CPP.Z,458"$0000002248 0003 ExportSysSym Export -$LK,"_RIP ",A="FL:C:/Kernel/KernelA.HPP,3322"$Fs->rip 0000 0000000008 DefineStr -$LK,"_ROUND ",A="FL:C:/Kernel/KMathA.CPP.Z,381"$00000025D7 0001 ExportSysSym Export -$LK,"_RSI ",A="FL:C:/Kernel/KernelA.HPP,3318"$Fs->rsi 0000 0000000008 DefineStr -$LK,"_RSP ",A="FL:C:/Kernel/KernelA.HPP,3321"$Fs->rsp 0000 0000000008 DefineStr -$LK,"_SAVE_EXCEPT_REGS ",A="FL:C:/Kernel/Except.CPP.Z,27"$0000010677 0001 ExportSysSym Export -$LK,"_SET_MSR ",A="FL:C:/Kernel/KUtils.CPP.Z,460"$0000002249 0001 ExportSysSym Export -$LK,"_SIGN ",A="FL:C:/Kernel/KMathA.CPP.Z,348"$000000257E 0001 ExportSysSym Export -$LK,"_SQR ",A="FL:C:/Kernel/KMathA.CPP.Z,338"$000000256A 0000 ExportSysSym Export -$LK,"_STRCMP ",A="FL:C:/Kernel/StrA.CPP.Z,87"$00000029F1 0001 ExportSysSym Export -$LK,"_STRCPY ",A="FL:C:/Kernel/StrA.CPP.Z,66"$00000029C9 0001 ExportSysSym Export -$LK,"_STRICMP ",A="FL:C:/Kernel/StrA.CPP.Z,118"$0000002A2F 0001 ExportSysSym Export -$LK,"_STRIMATCH ",A="FL:C:/Kernel/StrA.CPP.Z,263"$0000002B75 0001 ExportSysSym Export -$LK,"_STRMATCH ",A="FL:C:/Kernel/StrA.CPP.Z,224"$0000002B20 0001 ExportSysSym Export -$LK,"_STRNCMP ",A="FL:C:/Kernel/StrA.CPP.Z,155"$0000002A82 0001 ExportSysSym Export -$LK,"_STRNICMP ",A="FL:C:/Kernel/StrA.CPP.Z,184"$0000002AC4 0001 ExportSysSym Export -$LK,"_SYS_HLT ",A="FL:C:/Kernel/KUtils.CPP.Z,470"$0000002263 0005 ExportSysSym Export -$LK,"_TAKE_EXCEPT ",A="FL:C:/Kernel/Except.CPP.Z,21"$0000010665 0001 ExportSysSym Export -$LK,"_TASK_CONTEXT_RESTORE",A="FL:C:/Kernel/Sched.CPP.Z,98"$0000005506 0003 ExportSysSym Export -$LK,"_TASK_END_NOW ",A="FL:C:/Kernel/Sched.CPP.Z,154"$00000055B6 0001 ExportSysSym Export -$LK,"_TEST_EXCEPT ",A="FL:C:/Kernel/Except.CPP.Z,5"$000001062E 0001 ExportSysSym Export -$LK,"_TRUNC ",A="FL:C:/Kernel/KMathA.CPP.Z,401"$0000002608 0001 ExportSysSym Export -$LK,"_XCHG_I64 ",A="FL:C:/Kernel/KUtils.CPP.Z,185"$0000001FE5 0001 ExportSysSym Export -$LK,"_XCHG_U16 ",A="FL:C:/Kernel/KUtils.CPP.Z,201"$0000002009 0001 ExportSysSym Export -$LK,"_XCHG_U32 ",A="FL:C:/Kernel/KUtils.CPP.Z,193"$0000001FF8 0001 ExportSysSym Export -$LK,"_XCHG_U8 ",A="FL:C:/Kernel/KUtils.CPP.Z,209"$000000201D 0001 ExportSysSym Export -$LK,"_YIELD ",A="FL:C:/Kernel/Sched.CPP.Z,168"$00000055E1 0001 ExportSysSym Export -$LK,"__DATE__ ",A="FL:C:/Kernel/KernelA.HPP,1923"$#exe{Strea 0000 0000000028 DefineStr -$LK,"__DEPTH__ ",A="FL:C:/Kernel/KernelA.HPP,1926"$#exe{Strea 0000 0000000048 DefineStr -$LK,"__DIR__ ",A="FL:C:/Kernel/KernelA.HPP,1928"$#exe{Strea 0000 0000000018 DefineStr -$LK,"__FILE__ ",A="FL:C:/Kernel/KernelA.HPP,1927"$#exe{Strea 0000 0000000040 DefineStr -$LK,"__LINE__ ",A="FL:C:/Kernel/KernelA.HPP,1925"$#exe{Strea 0000 0000000040 DefineStr -$LK,"__TIME__ ",A="FL:C:/Kernel/KernelA.HPP,1924"$#exe{Strea 0000 0000000028 DefineStr -$LK,"adam_task ",A="FL:C:/Kernel/KGlbls.CPP.Z,7"$0000004210 0019 0000000008 GlbVar Export -$LK,"ans ",A="FL:C:/Kernel/KernelA.HPP,3311"$(Fs->answe 0000 0000000010 DefineStr -$LK,"ansf ",A="FL:C:/Kernel/KernelA.HPP,3312"$(Fs->answe 0000 0000000018 DefineStr -$LK,"c32_eax ",A="FL:C:/Kernel/BIOS32.CPP.Z,152"$00000166EF 0008 0000000004 GlbVar Export -$LK,"c32_ebx ",A="FL:C:/Kernel/BIOS32.CPP.Z,153"$00000166F3 0009 0000000004 GlbVar Export -$LK,"c32_ecx ",A="FL:C:/Kernel/BIOS32.CPP.Z,154"$00000166F7 0007 0000000004 GlbVar Export -$LK,"c32_edi ",A="FL:C:/Kernel/BIOS32.CPP.Z,157"$0000016703 0006 0000000004 GlbVar Export -$LK,"c32_edx ",A="FL:C:/Kernel/BIOS32.CPP.Z,155"$00000166FB 0000 0000000004 GlbVar Export -$LK,"c32_eflags ",A="FL:C:/Kernel/BIOS32.CPP.Z,158"$0000016707 0000 0000000004 GlbVar Export -$LK,"c32_esi ",A="FL:C:/Kernel/BIOS32.CPP.Z,156"$00000166FF 0001 0000000004 GlbVar Export -$LK,"chars_bitmap_alpha ",A="FL:C:/Kernel/StrA.CPP.Z,319"$0000002BE4 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_alpha_numeric",A="FL:C:/Kernel/StrA.CPP.Z,323"$0000002C24 0003 0000000040 GlbVar Export -$LK,"chars_bitmap_alpha_numeric_no_at",A="FL:C:/Kernel/StrA.CPP.Z,327"$0000002C64 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_dec_numeric",A="FL:C:/Kernel/StrA.CPP.Z,339"$0000002D24 0003 0000000040 GlbVar Export -$LK,"chars_bitmap_displayable",A="FL:C:/Kernel/StrA.CPP.Z,368"$0000002F64 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_filename",A="FL:C:/Kernel/StrA.CPP.Z,335"$0000002CE4 0002 0000000040 GlbVar Export -$LK,"chars_bitmap_getkey ",A="FL:C:/Kernel/StrA.CPP.Z,360"$0000002EE4 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_hex_numeric",A="FL:C:/Kernel/StrA.CPP.Z,342"$0000002D64 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_non_eol",A="FL:C:/Kernel/StrA.CPP.Z,376"$0000002FE4 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_non_eol_white_space",A="FL:C:/Kernel/StrA.CPP.Z,348"$0000002DE4 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_printable",A="FL:C:/Kernel/StrA.CPP.Z,364"$0000002F24 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_safe_dollar",A="FL:C:/Kernel/StrA.CPP.Z,372"$0000002FA4 0001 0000000040 GlbVar Export -$LK,"chars_bitmap_white_space",A="FL:C:/Kernel/StrA.CPP.Z,345"$0000002DA4 0007 0000000040 GlbVar Export -$LK,"chars_bitmap_word ",A="FL:C:/Kernel/StrA.CPP.Z,331"$0000002CA4 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_zero_cr_nl_cursor",A="FL:C:/Kernel/StrA.CPP.Z,351"$0000002E24 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_zero_tab_ff_cr_nl_cursor",A="FL:C:/Kernel/StrA.CPP.Z,354"$0000002E64 0000 0000000040 GlbVar Export -$LK,"chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar",A="FL:C:/Kernel/StrA.CPP.Z,357"$0000002EA4 0000 0000000040 GlbVar Export -$LK,"cnts ",A="FL:C:/Kernel/KGlbls.CPP.Z,17"$0000004280 0021 0000000041 GlbVar Export -$LK,"cpu_structs ",A="FL:C:/Kernel/KernelB.HPP,181"$00000016F8 000C 0000000008 GlbVar Public Export -$LK,"dbg ",A="FL:C:/Kernel/KGlbls.CPP.Z,25"$0000004820 001E 0000000040 GlbVar Export -$LK,"dev ",A="FL:C:/Kernel/KGlbls.CPP.Z,23"$0000004700 0020 00000000F0 GlbVar Export -$LK,"dsk ",A="FL:C:/Kernel/KGlbls.CPP.Z,26"$0000004860 0047 00000001DD GlbVar Export -$LK,"eps ",A="FL:C:/Kernel/KernelA.HPP,55"$(0x3CB0000 0000 0000000020 DefineStr -$LK,"exp_1 ",A="FL:C:/Kernel/KernelA.HPP,49"$(0x4005BF0 0000 0000000020 DefineStr -$LK,"ext ",A="FL:C:/Kernel/KernelB.HPP,36"$00000015D8 0003 0000000008 GlbVar Public Export -$LK,"fat_long_name_map ",A="FL:C:/Kernel/Dsk/FileSysFAT.CPP.Z,187"$0000020F1B 0006 000000000D GlbVar Export -$LK,"fp_doc_put ",A="FL:C:/Kernel/KGlbls.CPP.Z,30"$0000004A50 0002 0000000008 GlbVar Export -$LK,"fp_getstr2 ",A="FL:C:/Kernel/KGlbls.CPP.Z,28"$0000004A40 0005 0000000008 GlbVar Export -$LK,"fp_set_std_palette ",A="FL:C:/Kernel/KGlbls.CPP.Z,31"$0000004A58 0002 0000000008 GlbVar Export -$LK,"fp_update_ctrls ",A="FL:C:/Kernel/KGlbls.CPP.Z,29"$0000004A48 0002 0000000008 GlbVar Export -$LK,"inf ",A="FL:C:/Kernel/KernelA.HPP,45"$(0x7FF0000 0000 0000000020 DefineStr -$LK,"ip ",A="FL:C:/Kernel/KGlbls.CPP.Z,18"$00000042C8 0052 00000000C0 GlbVar Export -$LK,"ip_grid ",A="FL:C:/Kernel/KGlbls.CPP.Z,19"$0000004448 001F 0000000050 GlbVar Export -$LK,"ip_last ",A="FL:C:/Kernel/KGlbls.CPP.Z,18"$0000004388 0001 00000000C0 GlbVar Export -$LK,"kbd ",A="FL:C:/Kernel/KGlbls.CPP.Z,21"$00000045A8 003A 000000007A GlbVar Export -$LK,"keydev ",A="FL:C:/Kernel/KGlbls.CPP.Z,22"$0000004628 0015 00000000D8 GlbVar Export -$LK,"local_time_offset ",A="FL:C:/Kernel/KGlbls.CPP.Z,13"$0000004240 0009 0000000008 GlbVar Export -$LK,"log10_2 ",A="FL:C:/Kernel/KernelA.HPP,52"$(0x3FD3441 0000 0000000020 DefineStr -$LK,"log2_10 ",A="FL:C:/Kernel/KernelA.HPP,50"$(0x400A934 0000 0000000020 DefineStr -$LK,"log2_e ",A="FL:C:/Kernel/KernelA.HPP,51"$(0x3FF7154 0000 0000000020 DefineStr -$LK,"loge_2 ",A="FL:C:/Kernel/KernelA.HPP,53"$(0x3FE62E4 0000 0000000020 DefineStr -$LK,"mon_start_days1 ",A="FL:C:/Kernel/Date.CPP.Z,3"$00000093EE 0003 0000000018 GlbVar Export -$LK,"mon_start_days2 ",A="FL:C:/Kernel/Date.CPP.Z,5"$0000009406 0003 0000000018 GlbVar Export -$LK,"mouse ",A="FL:C:/Kernel/KGlbls.CPP.Z,20"$0000004498 005F 0000000083 GlbVar Export -$LK,"mouse_last ",A="FL:C:/Kernel/KGlbls.CPP.Z,20"$0000004520 000C 0000000083 GlbVar Export -$LK,"mp_cnt ",A="FL:C:/Kernel/KernelB.HPP,182"$0000001700 0011 0000000008 GlbVar Public Export -$LK,"mp_cnt_initial ",A="FL:C:/Kernel/KernelB.HPP,183"$0000001708 0003 0000000008 GlbVar Export -$LK,"mp_cnt_lock ",A="FL:C:/Kernel/KernelB.HPP,184"$0000001710 0003 0000000008 GlbVar Export -$LK,"num_lock_map ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,174"$00000116E3 0001 0000000100 GlbVar Export -$LK,"pi ",A="FL:C:/Kernel/KernelA.HPP,47"$(0x400921F 0000 0000000020 DefineStr -$LK,"pow10_I64 ",A="FL:C:/Kernel/KGlbls.CPP.Z,14"$0000004248 0003 0000000008 GlbVar Export -$LK,"progress1 ",A="FL:C:/Kernel/KernelB.HPP,162"$00000015F0 0008 0000000008 GlbVar Public Export -$LK,"progress1_desc ",A="FL:C:/Kernel/KernelB.HPP,163"$0000001600 0005 0000000030 GlbVar Public Export -$LK,"progress1_max ",A="FL:C:/Kernel/KernelB.HPP,164"$00000015F8 0005 0000000008 GlbVar Public Export -$LK,"progress2 ",A="FL:C:/Kernel/KernelB.HPP,165"$0000001630 0000 0000000008 GlbVar Public Export -$LK,"progress2_desc ",A="FL:C:/Kernel/KernelB.HPP,166"$0000001640 0000 0000000030 GlbVar Public Export -$LK,"progress2_max ",A="FL:C:/Kernel/KernelB.HPP,167"$0000001638 0000 0000000008 GlbVar Public Export -$LK,"progress3 ",A="FL:C:/Kernel/KernelB.HPP,168"$0000001670 0000 0000000008 GlbVar Public Export -$LK,"progress3_desc ",A="FL:C:/Kernel/KernelB.HPP,169"$0000001680 0000 0000000030 GlbVar Public Export -$LK,"progress3_max ",A="FL:C:/Kernel/KernelB.HPP,170"$0000001678 0000 0000000008 GlbVar Public Export -$LK,"progress4 ",A="FL:C:/Kernel/KernelB.HPP,171"$00000016B0 0000 0000000008 GlbVar Public Export -$LK,"progress4_desc ",A="FL:C:/Kernel/KernelB.HPP,172"$00000016C0 0000 0000000030 GlbVar Public Export -$LK,"progress4_max ",A="FL:C:/Kernel/KernelB.HPP,173"$00000016B8 0000 0000000008 GlbVar Public Export -$LK,"reverse_bits_table ",A="FL:C:/Kernel/KGlbls.CPP.Z,11"$0000004230 0003 0000000008 GlbVar Export -$LK,"scan_code_map ",A="FL:C:/Kernel/KbdMouse/Keyboard.CPP.Z,154"$00000115E3 0001 0000000100 GlbVar Export -$LK,"set_bits_table ",A="FL:C:/Kernel/KGlbls.CPP.Z,12"$0000004238 0003 0000000008 GlbVar Export -$LK,"snd ",A="FL:C:/Kernel/KGlbls.CPP.Z,16"$0000004250 0006 0000000029 GlbVar Export -$LK,"sqrt2 ",A="FL:C:/Kernel/KernelA.HPP,54"$(0x3FF6A09 0000 0000000020 DefineStr -$LK,"sys_boot_base ",A="FL:C:/Kernel/KernelB.HPP,24"$0000000018 0004 0000000004 GlbVar Export -$LK,"sys_boot_patch_table_base",A="FL:C:/Kernel/KernelB.HPP,25"$0000000008 0001 0000000004 GlbVar Export -$LK,"sys_boot_src ",A="FL:C:/Kernel/KernelB.HPP,26"$0000000004 0001 0000000004 GlbVar Export -$LK,"sys_cache_line_width",A="FL:C:/Kernel/KernelB.HPP,216"$0000001740 0001 0000000008 GlbVar Public Export -$LK,"sys_clipboard_doc ",A="FL:C:/Kernel/KGlbls.CPP.Z,5"$0000004208 0000 0000000008 GlbVar Export -$LK,"sys_code_bp ",A="FL:C:/Kernel/KernelB.HPP,150"$00000015E0 0009 0000000008 GlbVar Public Export -$LK,"sys_compile_time ",A="FL:C:/Kernel/KernelB.HPP,158"$0000000010 0001 0000000008 GlbVar Public Export -$LK,"sys_ctrl_alt_flags ",A="FL:C:/Kernel/KernelB.HPP,159"$00000015D0 0005 0000000008 GlbVar Export -$LK,"sys_data_bp ",A="FL:C:/Kernel/KernelB.HPP,151"$00000015E8 0007 0000000008 GlbVar Public Export -$LK,"sys_focus_task ",A="FL:C:/Kernel/KernelB.HPP,177"$00000016F0 000C 0000000008 GlbVar Public Export -$LK,"sys_font_8x8 ",A="FL:C:/Kernel/Font8x8.CPP.Z,3"$0000006261 0001 0000000800 GlbVar Export -$LK,"sys_gdt ",A="FL:C:/Kernel/KernelB.HPP,217"$00000003E0 0003 0000001080 GlbVar Export -$LK,"sys_heap_base ",A="FL:C:/Kernel/KernelB.HPP,154"$00000015B8 0003 0000000008 GlbVar Export -$LK,"sys_heap_dbg ",A="FL:C:/Kernel/KernelB.HPP,141"$00000015CE 0000 0000000001 GlbVar Export -$LK,"sys_heap_init_flag ",A="FL:C:/Kernel/KernelB.HPP,142"$00000015CA 0000 0000000001 GlbVar Export -$LK,"sys_heap_init_val ",A="FL:C:/Kernel/KernelB.HPP,143"$00000015CB 0000 0000000001 GlbVar Export -$LK,"sys_heap_limit ",A="FL:C:/Kernel/KernelB.HPP,155"$00000015C0 0003 0000000008 GlbVar Export -$LK,"sys_macro_root ",A="FL:C:/Kernel/KGlbls.CPP.Z,3"$0000004180 0002 0000000080 GlbVar Export -$LK,"sys_macro_util_task ",A="FL:C:/Kernel/KGlbls.CPP.Z,4"$0000004200 0001 0000000008 GlbVar Export -$LK,"sys_mem_init_flag ",A="FL:C:/Kernel/KernelB.HPP,144"$00000015C8 0001 0000000001 GlbVar Export -$LK,"sys_mem_init_val ",A="FL:C:/Kernel/KernelB.HPP,145"$00000015C9 0001 0000000001 GlbVar Export -$LK,"sys_neg_powers_lets ",A="FL:C:/Kernel/StrPrint.CPP.Z,211"$000000A1A0 0001 0000000008 GlbVar Export -$LK,"sys_neg_powers_lst ",A="FL:C:/Kernel/StrPrint.CPP.Z,213"$000000A1F0 0000 0000000008 GlbVar Export -$LK,"sys_num_spawned_tasks",A="FL:C:/Kernel/KGlbls.CPP.Z,8"$0000004218 0001 0000000008 GlbVar Export -$LK,"sys_pci_busses ",A="FL:C:/Kernel/KernelB.HPP,191"$000000146A 0000 0000000002 GlbVar Public Export -$LK,"sys_pci_services ",A="FL:C:/Kernel/BIOS32.CPP.Z,159"$000001665F 0007 0000000004 GlbVar Export -$LK,"sys_pos_powers_lets ",A="FL:C:/Kernel/StrPrint.CPP.Z,210"$000000A188 0001 0000000008 GlbVar Export -$LK,"sys_pos_powers_lst ",A="FL:C:/Kernel/StrPrint.CPP.Z,212"$000000A1B8 0000 0000000008 GlbVar Export -$LK,"sys_progresses ",A="FL:C:/Kernel/KernelB.HPP,174"$00000015F0 0002 0000000100 GlbVar Public Export -$LK,"sys_run_level ",A="FL:C:/Kernel/KernelB.HPP,27"$000000000C 000C 0000000004 GlbVar Export -$LK,"sys_semas ",A="FL:C:/Kernel/KernelB.HPP,185"$0000001760 003A 0000000540 GlbVar Export -$LK,"sys_task_being_screen_updated",A="FL:C:/Kernel/KGlbls.CPP.Z,10"$0000004228 0001 0000000008 GlbVar Export -$LK,"sys_var_init_flag ",A="FL:C:/Kernel/KernelB.HPP,147"$00000015CC 0000 0000000001 GlbVar Export -$LK,"sys_var_init_val ",A="FL:C:/Kernel/KernelB.HPP,146"$00000015CD 0000 0000000001 GlbVar Export -$LK,"sys_winmgr_task ",A="FL:C:/Kernel/KGlbls.CPP.Z,10"$0000004220 0004 0000000008 GlbVar Export -$LK,"tS ",A="FL:C:/Kernel/KMisc.CPP.Z,122",BI=603$000000E4CE 0020 0000000057 Funct Export Res -$LK,"text ",A="FL:C:/Kernel/KGlbls.CPP.Z,24"$00000047F0 005E 0000000030 GlbVar Export -throw 00000107DB 0000 ExportSysSym -$LK,"throw ",A="FL:C:/Kernel/Except.CPP.Z,82",BI=604$00000107DB 0035 0000000164 Funct Export Res -$LK,"ã ",A="FL:C:/Kernel/KernelA.HPP,48"$(0x400921F 0000 0000000020 DefineStr -$LK,"ì ",A="FL:C:/Kernel/KernelA.HPP,46"$(0x7FF0000 0007 0000000020 DefineStr - „ˆzMzMƒM�M•M x|"M"M+M8M=M ”˜êMêMóMNN0%-’i’i–i›iµiÎiÓiÕi`ÓçZgZgfgvgygzgg‡gŠg�g£g¨g¶g½gËgËgËgËgÍgÍg ½ÁbObOkO}Oh““œª¹ÄÔäô€€"€2€B€c€e€t€ƒ€“€£€Ì€Ì€Ñ€,;BC‚C‚R‚^‚l‚u‚z‚€‚ l¢¹S†S†g†s†�†�†�†¸†Û†æ†ð†ù†‡‡‡;‡B‡F‡N‡R‡Z‡ -¤Chƒ‚ƒ‚¬‚±‚¼‚Æ‚ЂÜ‚Ü‚ä‚ ƒƒƒ$ƒ'ƒ+ƒ+ƒDƒZƒ]ƒ`ƒfƒmƒqƒ ƒ¤ƒ¬ƒ®ƒ¹ƒ¹ƒ¾ƒ¾ƒ̓݃ ¨Äêû¢û¢£#£-£I£P£]£e£r££´£»£ñ£¤!¤W¤g¤g¤Ф˜¤±¤ç¤ï¤ÿ¤¥J¥R¥R¥R¥]¥v¥Š¥Ž¥’¥ ˆ.L‹Œ‹Œ›Œ¦Œ±Œ¸Œ¸Œ׌ãŒòŒÿŒ ���&�,�3�3�7�7�7�7�D�G�W� Hëù“¥“¥º¥Õ¥ã¥î¥ò¥ö¥ú¥¦¦¦¦¦80:Ã�Ã�Ì�ô�‚#‚0‚:‚?‚Dk”k””§”Ê”×”ä”ï” •••€›·[�[�u�„�Œ�Ÿ�±�¼�È�ß�ä�ô�‘ ‘ ‘U‘Z‘Z‘x‘x‘�‘°‘¶‘Ø‘x€š � �(�*�8�8�F�Y���¤�²�Â�å�Í�ÿ� �4�9�9�9�K�N�Z�lüSŠSŠgŠpŠ�Š©ŠÌŠÛŠèŠóŠ‹#‹6‹6‹F‹F‹S‹e‹o‹w‹t-{‹{‹‹‹—‹ ‹±‹Ù‹ü‹ ŒŒ,Œ#ŒMŒaŒgŒiŒkŒqŒsŒ€ŒƒŒ‹Œ@‚Žë„ë„ù„!…D…Q…^…i…‹…“…™…@u�;„;„D„l„�„œ„©„´„ׄß„ä„X�¡›…›…°…º…¾…¾…æ… ††2†C†E†E†M†\ó›“›“©“®“¶“½““ê“ ””'”2”O”W”^”^”a”g”LM\[�[�d�d�s�‚�“�—�¤�º�¾�¾�Ã�¼@••1•9•C•O•]•m•••¸•Ç•ò•ö•þ•–0–S–a–q–|–§–·–¼–Ä–ï–ó–— -——!—/—/—9—C—<itãƒãƒ÷ƒþƒ„„ „,„2„8„<t›Ž›Ž³ŽÁŽÈŽËŽÎŽÒŽÙŽùŽ �X¸ÊÛ‘Û‘ý‘’’ -’’’&’3’=’@’C’I’W’h]sÃ�Ã�å�ë�ô�ô�ý� ŽŽDŽOŽWŽYŽkŽkŽkŽ|Ž‰Ž‰Ž—Žºû[‡[‡i‡q‡v‡|‡¤‡LJχׇâ‡ç‡ù‡ˆˆˆCˆJˆRˆTˆ]ˆlˆsˆšˆšˆ£ˆºˆɈêˆòˆ‰‰%‰5‰D‰T‰d‰t‰މ“‰›‰›‰ ‰®‰½‰Þ‰é‰ø‰ŠŠ(Š?Š?Š?ŠKŠQŠ €Ã‹ž‹ž¥ž¸žÄžÄžÕžÜžÜžðžùž -ŸŸ4Ÿ9ŸTŸ[Ÿ[ŸqŸ}Ÿ}Ÿ¤Ÿ§ŸÆŸåŸ  ' > @ Q h  ž ½ É à ÷ ü  ¡$¡;¡;¡C¡Q¡b¡y¡�¡¡¡¸¡Ï¡Ù¡â¡é¡ÿ¡¢"¢ú¢ xZt;œ;œiœmœqœˆœ˜œ®œÄœÖœòœ÷œ� � ���� �#�#�#�¾�!8uÃ�Ã�É�Ç�×�ò�þ�žž„ž"4£¬»Ç»ÇÉÇÎÇÙÇÜÇàÇæÇ#ˆA_C—C—i—m—u—{—„—Œ—’—•—¡—¡—Ë—Ø—â—å—è—ï—÷—ý— -˜ -˜ ˜$<$/K�K�Y�a�i�v���‹�º�¼�Â�%<#Ó€Ó€á€é€ñ€þ€ ��B�D�J�&¬Ëò[’[’}’ƒ’Œ’Œ’—’¦’³’·’Á’Ó’Ó’ã’ï’ô’ô’ “““!“3“3“3“;“I“W“a“d“j“w“„“„“–“'X¡³SaSaka~a’a¡aºaÁaÃaÏaèab bbb!b(<¾É£b£b¹bÌbàbæbccc#c)c_c)4´½#b#b7bIbObibpb†bŒbŸb*Ào›Æ~Æ~Þ~å~í~  &,,6=HMWkmxx‡�šž£§²¸»¾ÃÊÔä+$õúÞ‚Þ‚ç‚ð‚ö‚û‚,hÞô‚‚3‚B‚G‚W‚_‚_‚m‚w‚†‚Ž‚š‚©‚µ‚À‚ƂтԂ܂-,gnŽ~Ž~œ~¢~®~¹~½~Ã~.ì¦Ý&€&€@€H€P€_€p€r€‰€›€—€ª€º€À€Æ€Í€Ö€ô€ð€��*�;�>�C�I�i��Œ�“�ž�¢�§�²�½�Ã�Æ�Ì�Û�ì�ñ�ý�‚‚/4œ¥ææïý€€ €!€!€&€0$mrpp -pp p/p1(ïõ[e[eqe�eŸe¥eÀe2,çîãdãdñdeÿd'e-eTe3ˆú#¦#¦-¦/¦G¦U¦r¦{¦©¦¬¦µ¦ã¦æ¦ê¦ï¦û¦§$§'§0§R§U§U§X§c§j§q§44Ýæ{d{d�d¡d°dÁdÔdÚdãd5Hœª>ù>ùYù\ùlùwù}ùˆùˆùŒù–ù6d«À–ù–ù¯ù²ùÀùÀùÉùÔùÙùÜùìù÷ùýùúúú úú7,'.ââââ"â<âAâGâ8Tó!`!`/`<`I`g`i`p`w`…`‰`‹`•`�`9pw�RlRlZlfl|l‡l•lÂlÜlñlölýlmmm:0.vÚiÚiíióij jjjj$j)j3jGjXjljnj‰j¹jÐjæjñjkkk(k3k=kHkRk]kkkrk€k€kŠk£kËkÖkÞkøkýkÿk ll$l+l-l5lPl;4zƒÎ˜Î˜Þ˜à˜è˜ü˜™™™<D¾Ëžçžç­ç»çÊçÖçÝçìçøçøçþç=$‚‡&å&å*å7ålåxå> –kÃkÃ�Ã�×íÃÀÃÄÃÐÃîÃîÃüÃÄ -ÄÄÄÄ"Ä(Ä4Ä9Ä@ÄGÄNÄXÄdÄvÄ{Ä~ąąėħĮĻÄÚÄðÄÅÅ"Å:ÅnÅnÅuÅŅŇŇŇŇŇŇҜޝŶżÅÅÅËÅÍÅÍÅÔÅÞÅàÅàÅàÅãÅåÅåÅìÅïÅöÅöÅùÅþÅ ÆÆ$Æ*Æ?ÆBÆaÆaÆfÆfÆfÆmÆwÆÆÆÆŠÆ–Æ™Æ@Ç?(qwspsp|p�pœp®p®p³p@Ì9hã¨ã¨õ¨©©&©+©I©I©R©g©|©„©�©œ©¨©¸©½©©©É©ЩÙ©Û©Û©â©í© ª ªª#ª,ª=ª=ª=ªHªOªTª[ªuªxª†ªADs§s§|§‚§‚§�§¡§©§®§º§À§§§ǧBdãÂãÂóÂÃÃÃÃÃÃ)Ã2ÃCÃOÃRÃTÃWÃYÃYÃYÃeÃCˆš¸3¬3¬J¬M¬M¬^¬g¬q¬u¬x¬…¬ެެ˜¬˜¬ž¬¥¬©¬²¬²¬»¬À¬̬Þ¬à¬ê¬DL+#¨#¨2¨8¨8¨E¨W¨c¨k¨q¨v¨|¨~¨~¨„¨EX<N;Ñ;ÑEÑXÑkÑsѤÑÒ ÒF8is‹ª‹ª•ª�ª®ªê˪ΪЪÔªGPùXùX Y/Y/Y;YFYJYQY\Y`YhYiYqYH8qYqY‡Y”Y¦YºYÈYÑYÛYIx#˜#˜5˜D˜G˜h˜ˆ˜˜˜½˜͘Ö˜™™!™'™7™7™I™L™Q™Q™a™g™j™Í™JYÓ™Ó™ç™î™þ™ššš'šNšmšŒš˜š©š­š³šÁšÅšËšÙšÙšÙšøš›+›@›D›J›X›\›b›t›t›t›t›w›|›�›‡›˜›œ›¢›­›±›·››››Ç›Í›Þ›â›è›ó›÷›ý›œœœ;œKl]t–÷–÷·÷º÷È÷È÷Ô÷Û÷à÷ã÷é÷ì÷ô÷ù÷ù÷þ÷øøøøLTŠ›¶ø¶øÚøÝøëøëøÿøùù ù+ù+ù+ù/ù=ùM`u‰øø;øAøOøOøcønørøyø|ø†ø�ø�ø¡ø¡ø¡ø¥ø±øN$ˆ�ó ó ü  - - -% -ODŽ›+ -+ -9 -G -V -^ -d -p -ƒ -ƒ -Œ -P8ˆ’~å~åŒå˜åÀåÍåÏåÖåÞåàåæåQ(}ƒBMBMVMaMjMmMuMR8£­zNzNžN¢N¸NÌNÖNàNãNóNS¬´Û [ [:[I[Y[h[x[‹[–[œ[´[´[À[Ò[Ü[ë[ð[ð[ü[ü[\\m\r\r\Ÿ\Ÿ\¬\¯\²\¾\Å\Î\ö\T´là]à]ö]^ -^^^1^C^Q^c^l^r^w^Ž^—^¯^½^½^Ê^Ø^ä^ô^__ -___%_%_)_-_<_L_P_d_‰_‰_˜_š_ _¨_º_Ï_Ù_è_í_í_ù_ù_``` `M`Q`T`X`_`j`€`•`ž`«`µ`·`½`Ê`Ð`×`ä`ê`ê`ñ`a aaa%a,a5aQaµaUˆäø\ø\]] ]+]D]Y]_]m]r]y]…]…]�]”]›]¦]´]¸]»]¾]Ç]Ú]V,ããû6YaW0>Fƒ¼ƒ¼‘¼›¼¡¼ª¼±¼µ¼»¼XHt‚rdrd†d“d–dšd¨d±dÐdÜdædêdídÿdY R–›F›F£F°F¿FÄFØFíFG G'GFGYGmG»G½GÁGZH;IÎìÎìÞìäìïìøìûìííííí í[\–©ÖïÖïêïøïýïðððð'ð3ð7ðOðVðYð[ð~ð\0wV½V½p½s½s½|½�½�½˜½]4%n77"7%7+77797H7O7U7|7ƒ7®7µ7¹7Ô7ã78 8 88U8a8m8}8�8ž8¯8Â8Ï8à8ù89 9&9&9294949@9B9B9N9P9P9`9c9c9o9~9š9¤9­9¸9Î9Ü9Ü9Ü9ð9 ::: :#:o:^P»v»vÏvØvñvw'w*wAwKwXwXwZwbw_8>HQQ Q&Q-QCQCQJQaQaQgQ`$).jPjPxPP“P™PaÈÂðããû(--?DDV[[mrr„‰‰‰‰�••§¬¬¾ÃÃÚ --4;DS¶bœa„)2?LYq…‡››£¸ÅÅÒÚéû)1ELLVcD”¡cµcµvµ€µ„µ˜µ¤µ¦µ²µ¹µ¿µÙµãµd0ï÷£u£u·uöuýuvv#v/veH†ë†ë�ë¤ë­ë¸ëºë¼ëËëËëÚëÜëÜëáëfD ,æëæëúëüëì7ì<ìSìXìXì\ìdìgHëë'ëBëKëVëXëZëiëiëxëzëzëëh0 ‚O‚O†OšOšO®O²O¶OiDºº)º/ºIºIºNºNºNº[º[ºgºgºqºjˆãó¸ó¸û¸¹¹#¹/¹Q¹Q¹Q¹Y¹^¹^¹‚¹‘¹²¹ʹÒ¹Ô¹Ô¹à¹à¹ò¹ù¹ù¹ ºººkXÊÜKÂKÂfÂlÂw‘‘ššŸ°¹ÂÄÂÄÂÐÂÝÂl€›ÓÓÓÓ)Ó)Ó@ÓTÓrÓtӌӟӪӻÓÒÓÒÓéÓýÓÔÔ5ÔHÔHÔKÔ¤Ôm€2΃΃îƒúƒ„ -„„„1„9„?„S„b„n„z„~„�„ƒ„•„£„§„±„µ„¾„ĄׄnøQèTU U:U>UPUYUbUiUrU{U“U¢UºUÍUÖUßUíUVV!V5V9V?VHVNVYV[V^VfV{V�V“VžV¤V¬V°VÂVÈVÎVÕVÛVëVñVW -W W\Wo`ØSñSóSûST!T5TCTHT[TqTwTƒT“T“T¥TåTp "&6ê6ê:êIêMêq4'0NêNêRê\êlê�ê¢ê¢ê¢ê¦êr !êê"ê1ê5ês 15¦ê¦êªê·ê»êt 6:¾ê¾êÂêÇêËêu8‘›%%/%F%L%]%s%’%¥%¥%¯%v ;?ÎêÎêÒêçêëêw @Dîêîêòêëëx EIëë -ëëy@‰•qq'q5q5qEqmqxq|q�q�q˜qzŒªÉ~ð~ðŸð¢ð«ðÇðÚðÚðåðêðòð ññ'ñ1ñ6ñBñHñOñ\ñ_ñhñkñnñsñšñ{,ÏÖ¾ñ¾ñÌñØñïñóñõñ ò|@<H;à;àMàXàeàmàuà}à…à�à•à›à}Œ&Eƕƕ֕ڕã•û• ––– –$–=–E–o–s–“–•–�–Ç–Ë–ë–õ–ü–—-—I—e—�—ˆ—�—~0%~•~•‡•‡•ž•»•»•À•4}†$-€t3^^mw…�µÊåëø((9@GPcl�˜÷¶ü¶ü¼üºüÊüW‚81;ŽÌŽÌœÌ³Ì¾Ì¾ÌÉÌÍÌÍÌÓ̃8JTFÍFÍTÍkÍvÍvÍ�͉͉Í�Í„< –ʖʪʽÊÉÊÖÊÞÊúÊ -Ë ËË…„ *ËË8Ë;ËNË[ËwËzˀˉ˕˗˪˽ËÁË×ËÚËàËíËùËûËûË ÌÌ$̆ UY–͖ͪ͹ÍÁ͇(Z`ÆÍÆÍàÍóÍúÍÎΈD<IÖÌÖÌêÌÍÍ$Í&Í(Í3Í7Í7Í?͉hî > >·>¹>Ò>ð>ð>???2?4?4?D?F?F?V?V?\?_?–?Š0ø3v3vGv†v�v“v«v®vºv‹<âíH>H>_>t>„>Š>�>‘>‘>›>Œèó)«Ù«ÙÊÙÌÙÛÙéÙõÙ -ÚÚÚÚ Ú*Ú*Ú4Ú7ÚMÚeÚaÚsÚxÚ–Ú¯Ú¸Ú»Ú¾ÚÃÚçÚéÚÛÿÚ1Û1ÛAÛQÛXÛ^ÛaÛfÛvÛ}ÛRÜ� TXkÔkÔyÔ‡ÔŽd>S«Ó«ÓÄÓÈÓÔÓÔÓàÓàÓíÓíÓüÓ ÔÔ,ÔAÔKÔZÔZÔdÔ�0ÓÒÓÒÜÒáÒêÒðÒðÒõÒ�4#ûÒûÒÓ ÓÓÓ!Ó!Ó&Ó‘Ø-_;x;xQx`xkx}x”x”x¥x½xÊxÝxéxôxy&y(yEyRyRyRycy�y–yŸy¥y¬y²y·y½yÁyÈyÓyÙyÜyz’xŒ¦ËÕËÕçÕìÕïÕüÕÖÖ ÖÖ%Ö-Ö-Ö8Ö8Ö@ÖBÖBÖIÖLÖXÖ“Ì\‹‹Ô‹Ô§ÔªÔ­Ô¶Ô¹Ô¾ÔÁÔÄÔÐÔâÔåÔèÔíÔýÔÕÕÕ'Õ)Õ)Õ=Õ=Õ@ÕCÕQÕUÕkÕqÕxÕՂՇ՜՟աանննÕÈÕ”xËå((DGLW_|‡Ž•»»Ãàëððø!,115D•ð–Λq›q¯qÑqáqáqõqÿqrrr%r.r2rArWr]rdrsrvr�r¶rÂrÎrÖràrîrÿrs s0sCsKsVslszszs†sªs¶sÁsÈsÎsÕsÞsást–L#Ò#Ò>ÒXÒXÒeÒeÒrÒrÒ‚Ò†Ò†Ò–Ò˜Ò˜ÒÏÒ—@$0+Ó+Ó9Ó>ÓAÓSÓYÓ\Ó^ÓdÓ˜@1=kÓkÓyÓ~Ó�ӓәӜӞӤә ÊΞñžñ¬ñµñ»ñš@ ccw…“�®¿ÉÓäê›0FN®ö®ö¼öÊöÒöõö÷6÷œp $66)63676=6I6U6a6a6m6m6w6†6¦6À6À6À6À6Æ6Æ6Ö6Ø6Ø67�,X_ÃoÃoÌoØoÞoãoèož$RW›o›o¤o²o¾o¾oÃoŸ<—¢CÇCÇKÇOÇ^ÇnǘǟǬDzǶǠ@˧˧Ô§Ú§ã§÷§¨¨¨¨¨¨ ¨¡@‹+«+«<«S«a«m«�«Ž«•«˜« «¢4¹Âë¬ë¬ô¬ú¬­­ ­'­:­?­£<ÃÎC­C­Q­]­h­x­�­œ­®­Æ­Æ­Æ­Ì­¤pÏçÓ­Ó­í­ÿ­®® ®"®"®0®2®2®>®>®D®L®P®[®s®�®�®š®¥H±¿c¶c¶x¶‚¶…¶޶š¶¢¶¿¶ζԶ׶㶦DŒ™£«£«²«É«׫ã«ã«÷« ¬¬$¬&¬,¬§˜Àâã¶ã¶ó¶··$·(·1·8·H·J·g·p·Ž·p·¬·»·Ì·Ò·á·ò·ø·ø·¸)¸3¸8¸í¸¨H¢°ãµãµøµ¶¶¶¶"¶?¶N¶T¶W¶c¶©Ü9‹¯‹¯©¯³¯¼¯Ú¯Ú¯ݯä¯ä¯ö¯ý¯ -°°&°2°5°:°V°q°q°ƒ°…°…°—°™°™°¥°¥°¶°ȰΰѰѰÔ°Ù°á°ò°ù°ÿ°±±0±0±5±5±5±P±ª@,8‹¨‹¨š¨ ¨´¨¾¨ƨΨӨ٨ۨۨᨫ8t~ÛªÛªåªíª«««!«#«'«¬`K_;};}[}g}r}w}…}�}Ÿ}¥}¶}º}¾}Ä}Ç}Î}Ù}Ù}å}­<?Jë|ë|} }}} }%})}-}7}®$',#|#|1|9|K|Q|¯¤&³z³zÅzÐzÕzãzïzûz{{{%{*{8{F{T{m{x{{“{²{º{Â{Í{Ï{à{ë{| | || |°X�““´“´›´§´°´¿´Ë´Ô´Û´é´µ3µ3µEµLµLµ^µ_µcµ±d`uë}ë}û}~~~$~-~1~7~=~E~M~U~t~w~‚~‚~Š~²84>“|“|£|Â|Î|Ò|Ö|Ú|â|ê|³(-3S|S|\|j|y|ˆ|�|´DÚƒÚƒöƒøƒ „„ „-„3„6„B„µà:.2o2oKoSonoyo€o�ošo§o¾oÑoîoùopp p#p-p1pLpQpXp`prpupƒp’p£p©p¯p»pÊpâpæpëpøpq$q+q2q2q9qAqNqPqbqjqlqvq}q}q}q„qŒq“qžq§qµqËq÷q÷qrr"r,rBrdririrprxrŽr°rµrµr¸r×rÚrærérìr -s -sssss s0s3sLsLsQsQsdsksus‹s©s¬s®s®sÁsÈsÐsæstt t t$t'tGtbtktttxt†tŒtŒt©t©t©t®t®t®tºtÍt×tètëtîtótótøtuu9u=uXuquzuƒu‡u•u›užu£u£u³u¶u¹uÇuÐuÖuÙuÞuÞuòuþu -vv2vWvdvhv~v˜v¦v¯v³v¶v¶vÆvÌvÞvãvëvòvþvww w1w8wDw]wjwmwtwwwyw‘w¤w«w¹w¹w¹wÀwÌwÖwäwíwówúwxxx,x;x[xdxÎx¶8<FRyRyfyvyˆy‘y”yœy·Ø9’m’m¬m³m·m»mÆm×måmùmnnnn3n8nAnDnNnVnYn\npn‡n�n¦n­n¶n¹n»nËnÎnÐn×nçnënònõnoo.o¸D&¾á¾áÆáÎáÖáÞáæáîáöáþáâ -ââ¹,^á^áfánává~á‚á†áº4†á†áŽá–ážá¦á®á¶áºá¾á»  JÓKÓKíKûKL L2L?LQLfLvLzLŠL•L¤L¯LËLËLÏLÚLæLèLèLèLîLîLñLûLûLM M M%M5MHMNMWMaMnM~M¢M¢M´M´M´MÊM×MîM÷MýM NNNNN-N¼TÃCÃCÇCàCïCDDD#D5DHD[DuD…DŠDŠDŒD½xûþ‚þ‚ƒ&ƒ-ƒIƒIƒYƒ[ƒ[ƒ[ƒlƒwƒ~ƒ‚ƒŠƒŽƒ–ƒœƒ¢ƒ¤ƒ¤ƒ¶ƒ¶ƒ¹ƒÇƒ¾ôǰ°¸¼ÄÕäîú5GYY]lv‰‘•¤ÁÆÆÜä÷'4<ATc„‘œ®ÀÛâôô#'+¿>008@Q`jvvz‚†ŸÙëÿ&/88=PU`vŠ‘Âø  / C J { ±  Ò Ò Ù ë ë ù ù ú     " ÀDæóHH\iyŽ•žµ¸ÀÁDŽ›$:T__p€‚¬Âèô*ÀÀÞáäîü %/R_jx‰–¡ÊÏÕû  $2CPXw|‚ž£·Ïâõ 0Wmr„ÃX?Ñ( ( 3 I P f w † “ ¢ ¶ Î æ ù !!.Q.i.|.„.„.’.›.¦.´.».Æ.Ô.Ô.Ù.å.ÊHH–H0H0S0^0n0v0—0¦0·0À0×0ï0ÿ01(101L1a1l1t1™1ž1¨1µ1Ç1à1ï122D2O2W2r2}2’2µ2Ä2Ð2Ù2ë23!3,343Q3\3\3g3g3x3x3‹3�3°3¹3¹3Ì3ß3ç3ç3ç3õ34444'4+424Ë$@…  # 3 C S b k y ‡ Ž ˜ £ ¸ Å Í á î  - -# -- -A -K -_ -i -} -Š -Š -— -¢ +$LK,"ARGT_R64",A="FL:::/Kernel/KernelA.HPP,1808"$ +$LK,"MAlloc",A="FL:::/Kernel/MemB.CPP.Z,372"$ +$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HPP,3785"$ +$LK,"KbdTypeMatic",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,85",BI=1$ +$LK,"PSectCacheAdd",A="FL:::/Kernel/PSect.CPP.Z,60",BI=2$ +$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HPP,261"$ +$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HPP,260"$ +$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HPP,3175"$ +$LK,"DOCM_CANCEL",A="FL:::/Kernel/KernelA.HPP,1316"$ +$LK,"chars_bmp_word",A="FL:::/Kernel/StrA.CPP.Z,340"$ +$LK,"BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,2208"$ +$LK,"ARGT_SS",A="FL:::/Kernel/KernelA.HPP,1839"$ +$LK,"BootCdProbeAll",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,28",BI=3$ +$LK,"c32_eax",A="FL:::/Kernel/PCIBIOS.CPP.Z,152"$ +$LK,"ARGT_EAX",A="FL:::/Kernel/KernelA.HPP,1832"$ +$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HPP,900"$ +$LK,"Ff__EXTERN",A="FL:::/Kernel/KernelA.HPP,842"$ +$LK,"c32_ebx",A="FL:::/Kernel/PCIBIOS.CPP.Z,153"$ +$LK,"MemPageSize",A="FL:::/Kernel/MemA.CPP.Z,165",BI=4$ +$LK,"D3Add",A="FL:::/Kernel/KernelB.HPP,147"$ +$LK,"D3NormSqr",A="FL:::/Kernel/KernelB.HPP,165"$ +$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HPP,3798"$ +$LK,"c32_ecx",A="FL:::/Kernel/PCIBIOS.CPP.Z,154"$ +$LK,"CCF_USE_LAST_U16",A="FL:::/Kernel/KernelA.HPP,2067"$ +$LK,"SYSf_CTRL_ALT_DEL",A="FL:::/Kernel/KernelA.HPP,609"$ +$LK,"SSF_INACTIVE",A="FL:::/Kernel/KernelA.HPP,221"$ +$LK,"MSF_INACTIVE",A="FL:::/Kernel/KernelA.HPP,205"$ +$LK,"ATA_READ_MULTI",A="FL:::/Kernel/KernelA.HPP,2176"$ +$LK,"c32_edx",A="FL:::/Kernel/PCIBIOS.CPP.Z,155"$ +$LK,"FUf_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,2504"$ +$LK,"CAOTBinBlk",A="FL:::/Kernel/KernelA.HPP,1712"$ +$LK,"DOCEf_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HPP,1078"$ +$LK,"KernelMain",A="FL:::/Kernel/KEnd.CPP.Z,130",BI=5$ +$LK,"KbdCmdSend",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,24",BI=6$ +$LK,"_D3_NORM_SQR",A="FL:::/Kernel/KMathA.CPP.Z,22"$ +$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HPP,3183"$ +$LK,"RS_ATTR_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,2448"$ +$LK,"CCf_USE_LAST_U16",A="FL:::/Kernel/KernelA.HPP,2068"$ +$LK,"TK_INS_BINARY_SIZE",A="FL:::/Kernel/KernelA.HPP,2021"$ +$LK,"CDocEntry",A="FL:::/Kernel/KernelA.HPP,1160"$ +$LK,"CAOT",A="FL:::/Kernel/KernelA.HPP,1908"$ +$LK,"SVCf_DISPATCHED",A="FL:::/Kernel/KernelA.HPP,3084"$ +$LK,"RLF_32BIT",A="FL:::/Kernel/KernelA.HPP,454"$ +$LK,"RLF_16BIT",A="FL:::/Kernel/KernelA.HPP,452"$ +$LK,"RLf_32BIT",A="FL:::/Kernel/KernelA.HPP,436"$ +$LK,"RLf_16BIT",A="FL:::/Kernel/KernelA.HPP,434"$ +$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.CPP.Z,141",BI=7$ +$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HPP,904"$ +$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HPP,903"$ +$LK,"CGDT",A="FL:::/Kernel/KernelA.HPP,333"$ +$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HPP,3153"$ +$LK,"ICF_PUSH_CMP",A="FL:::/Kernel/KernelA.HPP,1526"$ +$LK,"MLF_NO_UNUSED_WARN",A="FL:::/Kernel/KernelA.HPP,770"$ +$LK,"I_MP_CRASH",A="FL:::/Kernel/KernelA.HPP,292"$ +$LK,"INVALID_PTR",A="FL:::/Kernel/KernelA.HPP,38"$ +$LK,"ATAInit",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,303",BI=8$ +$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.CPP.Z,206",BI=9$ +$LK,"StrUtil",A="FL:::/Kernel/StrA.CPP.Z,524",BI=10$ +$LK,"LstMatch",A="FL:::/Kernel/StrA.CPP.Z,421",BI=11$ +$LK,"IET_REL_I32",A="FL:::/Kernel/KernelA.HPP,398"$ +$LK,"IET_REL_I16",A="FL:::/Kernel/KernelA.HPP,396"$ +$LK,"MPWake",A="FL:::/Kernel/MultiProc.CPP.Z,170",BI=12$ +$LK,"CPrsStk",A="FL:::/Kernel/KernelA.HPP,1593"$ +$LK,"CCmpCtrl",A="FL:::/Kernel/KernelA.HPP,2078"$ +$LK,"ATAWBlks",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,579",BI=13$ +$LK,"CCPU",A="FL:::/Kernel/KernelA.HPP,3345"$ +$LK,"c32_esi",A="FL:::/Kernel/PCIBIOS.CPP.Z,156"$ +$LK,"CCF_JUST_LOAD",A="FL:::/Kernel/KernelA.HPP,2044"$ +$LK,"LDF_JUST_LOAD",A="FL:::/Kernel/KernelA.HPP,366"$ +$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart.CPP.Z,229"$ +$LK,"CMF_I16_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1614"$ +$LK,"FramePtrSet",A="FL:::/Kernel/KHashB.CPP.Z,230",BI=14$ +$LK,"CMF_U16_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1615"$ +$LK,"_STRICMP",A="FL:::/Kernel/StrA.CPP.Z,117"$ +$LK,"IET_REL_I64",A="FL:::/Kernel/KernelA.HPP,400"$ +$LK,"AP_16BIT_INIT",A="FL:::/Kernel/MultiProc.CPP.Z,9"$ +$LK,"STD_DISTRO_CDROM_CFG",A="FL:::/Kernel/KernelA.HPP,3791"$ +$LK,"CFAT32Boot",A="FL:::/Kernel/KernelA.HPP,2247"$ +$LK,"DOCEF_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HPP,1013"$ +$LK,"FILEMASK_TXT",A="FL:::/Kernel/KernelA.HPP,2203"$ +$LK,"TK_EOF",A="FL:::/Kernel/KernelA.HPP,1979"$ +$LK,"SPF_NEG",A="FL:::/Kernel/StrPrint.CPP.Z,10"$ +$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HPP,2999"$ +$LK,"DOCEf_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HPP,1088"$ +$LK,"TaskFinishOffDying",A="FL:::/Kernel/Task.CPP.Z,496",BI=15$ +$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HPP,3795"$ +$LK,"ICF_USE_F64",A="FL:::/Kernel/KernelA.HPP,1513"$ +$LK,"MemPagesNotPresentMark",A="FL:::/Kernel/MemC.CPP.Z,144",BI=16$ +$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HPP,3414"$ +$LK,"FloorI64",A="FL:::/Kernel/KMathB.CPP.Z,52",BI=17$ +$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HPP,3458"$ +$LK,"FUf_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,2503"$ +$LK,"TK_LESS_EQUAL",A="FL:::/Kernel/KernelA.HPP,1996"$ +$LK,"GVF_ARRAY",A="FL:::/Kernel/KernelA.HPP,861"$ +$LK,"DirEntryCompareCluster",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,84",BI=18$ +$LK,"KbdCmdFlush",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,45",BI=19$ +$LK,"CFPU",A="FL:::/Kernel/KernelA.HPP,3071"$ +$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HPP,3189"$ +$LK,"CDIR_SIZE",A="FL:::/Kernel/KernelA.HPP,2476"$ +$LK,"ARGT_UIMM32",A="FL:::/Kernel/KernelA.HPP,1802"$ +$LK,"ARGT_UIMM16",A="FL:::/Kernel/KernelA.HPP,1801"$ +$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.CPP.Z,220",BI=20$ +$LK,"DefinePrint",A="FL:::/Kernel/KDefine.CPP.Z,90",BI=21$ +$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.CPP.Z,252",BI=22$ +$LK,"CDocUndo",A="FL:::/Kernel/KernelA.HPP,1308"$ +$LK,"BSP_32BIT_INIT",A="FL:::/Kernel/KStart.CPP.Z,234"$ +$LK,"BSP_16BIT_INIT",A="FL:::/Kernel/KStart.CPP.Z,56"$ +$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HPP,2834"$ +$LK,"FUF_JUST_FILES",A="FL:::/Kernel/KernelA.HPP,2517"$ +$LK,"ATA_SET_MAX",A="FL:::/Kernel/KernelA.HPP,2174"$ +$LK,"IEF_DFT",A="FL:::/Kernel/KernelA.HPP,1645"$ +$LK,"RT_F32",A="FL:::/Kernel/KernelA.HPP,1489"$ +$LK,"Let2BlkDev",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,128",BI=23$ +$LK,"FUf_JUST_FILES",A="FL:::/Kernel/KernelA.HPP,2492"$ +$LK,"ARGT_M1632",A="FL:::/Kernel/KernelA.HPP,1820"$ +$LK,"DOF_MIN_SIZE",A="FL:::/Kernel/KernelA.HPP,1194"$ +$LK,"DOCEF_LEFT_X",A="FL:::/Kernel/KernelA.HPP,981"$ +$LK,"RFLAGf_AUX_CARRY",A="FL:::/Kernel/KernelA.HPP,307"$ +$LK,"DEF_PROCESSED",A="FL:::/Kernel/KernelA.HPP,2459"$ +$LK,"WIf_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HPP,1421"$ +$LK,"DOCEf_LEFT_X",A="FL:::/Kernel/KernelA.HPP,1056"$ +$LK,"Mem64DevFree",A="FL:::/Kernel/MemC.CPP.Z,232",BI=24$ +$LK,"Mem32DevFree",A="FL:::/Kernel/MemC.CPP.Z,198",BI=25$ +$LK,"ARGT_UIMM64",A="FL:::/Kernel/KernelA.HPP,1803"$ +$LK,"DOCf_MIN_SIZE",A="FL:::/Kernel/KernelA.HPP,1279"$ +$LK,"DOCF_MIN_SIZE",A="FL:::/Kernel/KernelA.HPP,1244"$ +$LK,"ATARepEntry",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,90",BI=26$ +$LK,"BLUE",A="FL:::/Kernel/KernelA.HPP,2859"$ +$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HPP,209"$ +$LK,"D3Div",A="FL:::/Kernel/KernelB.HPP,158"$ +$LK,"RT_F64",A="FL:::/Kernel/KernelA.HPP,1491"$ +$LK,"EdLite",A="FL:::/Kernel/EdLite.CPP.Z,58",BI=27$ +$LK,"MBR_PT_FAT12",A="FL:::/Kernel/KernelA.HPP,2603"$ +$LK,"DVT_FAT32",A="FL:::/Kernel/KernelA.HPP,2593"$ +$LK,"FramePtr",A="FL:::/Kernel/KHashB.CPP.Z,215",BI=28$ +$LK,"ARGT_RM8",A="FL:::/Kernel/KernelA.HPP,1810"$ +$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HPP,2854"$ +$LK,"DOCEF_HAS_BORDER",A="FL:::/Kernel/KernelA.HPP,995"$ +$LK,"RT_I32",A="FL:::/Kernel/KernelA.HPP,1484"$ +$LK,"RT_I16",A="FL:::/Kernel/KernelA.HPP,1482"$ +$LK,"DOCEf_HAS_BORDER",A="FL:::/Kernel/KernelA.HPP,1070"$ +$LK,"SysTry",A="FL:::/Kernel/KExcept.CPP.Z,61",BI=29$ +$LK,"POP_REGS",A="FL:::/Kernel/KernelA.HPP,1684"$ +$LK,"IEF_OP_SIZE32",A="FL:::/Kernel/KernelA.HPP,1642"$ +$LK,"IEF_OP_SIZE16",A="FL:::/Kernel/KernelA.HPP,1641"$ +$LK,"HTT_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HPP,679"$ +$LK,"BD_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2569"$ +$LK,"DOCEf_ESC",A="FL:::/Kernel/KernelA.HPP,1067"$ +$LK,"ScanCode2Char",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,135",BI=30$ +$LK,"DFT_STK",A="FL:::/Kernel/KernelA.HPP,2789"$ +$LK,"NUM_DRVS",A="FL:::/Kernel/KernelA.HPP,2619"$ +$LK,"DVT_ISO13346",A="FL:::/Kernel/KernelA.HPP,2596"$ +$LK,"_D3_ADD",A="FL:::/Kernel/KMathA.CPP.Z,131"$ +$LK,"SYSf_CTRL_ALT_TAB",A="FL:::/Kernel/KernelA.HPP,612"$ +$LK,"RCache",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,119",BI=31$ +$LK,"DOC_ATTR_DFT_TEXT",A="FL:::/Kernel/KernelA.HPP,1114"$ +$LK,"D3Dot",A="FL:::/Kernel/KernelB.HPP,160"$ +$LK,"CSrvCmd",A="FL:::/Kernel/KernelA.HPP,3095"$ +$LK,"ARGT_RAX",A="FL:::/Kernel/KernelA.HPP,1833"$ +$LK,"EDf_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,1232"$ +$LK,"EDF_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,1226"$ +$LK,"DOCF_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HPP,1246"$ +$LK,"CDImageRead",A="FL:::/Kernel/Dsk/DskCDDVD.CPP.Z,1",BI=32$ +$LK,"KbdMsgsQue",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,449",BI=33$ +$LK,"ARGT_ST0",A="FL:::/Kernel/KernelA.HPP,1846"$ +$LK,"RT_I64",A="FL:::/Kernel/KernelA.HPP,1486"$ +$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.CPP.Z,312",BI=34$ +$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HPP,3805"$ +$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3699"$ +$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3498"$ +$LK,"_CFG_HEAP_DBG",A="FL:::/Kernel/KernelA.HPP,2700"$ +$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HPP,649"$ +$LK,"RedSeaFileWrite",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,513",BI=35$ +$LK,"AutoStr",A="FL:::/Kernel/SrvCmd.CPP.Z,478",BI=36$ +$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HPP,381"$ +$LK,"DVT_ISO13490",A="FL:::/Kernel/KernelA.HPP,2595"$ +$LK,"IET_CODE_HEAP",A="FL:::/Kernel/KernelA.HPP,408"$ +$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HPP,2836"$ +$LK,"CAsmNum2",A="FL:::/Kernel/KernelA.HPP,1739"$ +$LK,"AutoFile",A="FL:::/Kernel/SrvCmd.CPP.Z,488",BI=37$ +$LK,"AMAlloc",A="FL:::/Kernel/MemB.CPP.Z,375",BI=38$ +$LK,"ICF_R_TO_INT",A="FL:::/Kernel/KernelA.HPP,1508"$ +$LK,"B",A="FL:::/Kernel/KDbg.CPP.Z,414",BI=39$ +$LK,"chars_bmp_dec_numeric",A="FL:::/Kernel/StrA.CPP.Z,350"$ +$LK,"D3Equ",A="FL:::/Kernel/KernelB.HPP,161"$ +$LK,"FF_NEW_FILE",A="FL:::/Kernel/KernelA.HPP,2684"$ +$LK,"CMT_STR_CONST",A="FL:::/Kernel/KernelA.HPP,1604"$ +$LK,"WIf_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HPP,1423"$ +$LK,"D",A="FL:::/Kernel/KDbg.CPP.Z,172",BI=40$ +$LK,"StrPrint",A="FL:::/Kernel/StrPrint.CPP.Z,884",BI=41$ +$LK,"E",A="FL:::/Kernel/PSect.CPP.Z,273",BI=42$ +$LK,"ICF_A2_TO_INT",A="FL:::/Kernel/KernelA.HPP,1512"$ +$LK,"CEdFileName",A="FL:::/Kernel/KernelA.HPP,1217"$ +$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HPP,898"$ +$LK,"_STRNCMP",A="FL:::/Kernel/StrA.CPP.Z,154"$ +$LK,"G",A="FL:::/Kernel/KDbg.CPP.Z,451",BI=43$ +$LK,"ScaleIndent",A="FL:::/Kernel/StrB.CPP.Z,35",BI=44$ +$LK,"IET_ABS_ADDR",A="FL:::/Kernel/KernelA.HPP,407"$ +$LK,"PressAKey",A="FL:::/Kernel/StrB.CPP.Z,103",BI=45$ +$LK,"DOF_WIN_MAX",A="FL:::/Kernel/KernelA.HPP,1197"$ +$LK,"CCodeCtrl",A="FL:::/Kernel/KernelA.HPP,1927"$ +$LK,"Char2ScanCode",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,99",BI=46$ +$LK,"Mem32DevInit",A="FL:::/Kernel/MemC.CPP.Z,104",BI=47$ +$LK,"_BIT_FIELD_OR_U32",A="FL:::/Kernel/KUtils.CPP.Z,154"$ +$LK,"DOCf_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HPP,1281"$ +$LK,"SPutChar",A="FL:::/Kernel/StrPrint.CPP.Z,14",BI=48$ +$LK,"TaskQueIns",A="FL:::/Kernel/Sched.CPP.Z,347",BI=49$ +$LK,"CYAN",A="FL:::/Kernel/KernelA.HPP,2861"$ +$LK,"TK_SUPERSCRIPT",A="FL:::/Kernel/KernelA.HPP,1980"$ +$LK,"ICF_PUSH_RESULT",A="FL:::/Kernel/KernelA.HPP,1521"$ +$LK,"DVT_ISO9660",A="FL:::/Kernel/KernelA.HPP,2594"$ +$LK,"FileNameTempTxt",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,249",BI=50$ +$LK,"RS_ATTR_DELETED",A="FL:::/Kernel/KernelA.HPP,2446"$ +$LK,"CMT_ASM_LABEL",A="FL:::/Kernel/KernelA.HPP,1602"$ +$LK,"RLF_64BIT",A="FL:::/Kernel/KernelA.HPP,456"$ +$LK,"RLf_64BIT",A="FL:::/Kernel/KernelA.HPP,438"$ +$LK,"RedSeaFreeLstBuild",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,24",BI=51$ +$LK,"TK_SHL",A="FL:::/Kernel/KernelA.HPP,1992"$ +$LK,"DOCf_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,1284"$ +$LK,"DOCF_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,1249"$ +$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HPP,3387"$ +$LK,"CHashGlblVar",A="FL:::/Kernel/KernelA.HPP,863"$ +$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HPP,3388"$ +$LK,"DOCEf_TAG",A="FL:::/Kernel/KernelA.HPP,1034"$ +$LK,"S",A="FL:::/Kernel/KDbg.CPP.Z,486",BI=52$ +$LK,"VGAP_INDEX",A="FL:::/Kernel/KernelA.HPP,3629"$ +$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HPP,3389"$ +$LK,"FifoI64Ins",A="FL:::/Kernel/KDataTypes.CPP.Z,258",BI=53$ +$LK,"FloorU64",A="FL:::/Kernel/KMathB.CPP.Z,36",BI=54$ +$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HPP,3390"$ +$LK,"DOCF_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1258"$ +$LK,"DOCT_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,908"$ +$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HPP,3391"$ +$LK,"BLACK",A="FL:::/Kernel/KernelA.HPP,2858"$ +$LK,"ARGT_STI",A="FL:::/Kernel/KernelA.HPP,1847"$ +$LK,"NUM_REGS",A="FL:::/Kernel/KernelA.HPP,1687"$ +$LK,"DOCf_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1294"$ +$LK,"DOCEf_BOTTOM_Y",A="FL:::/Kernel/KernelA.HPP,1061"$ +$LK,"DOCEF_BOTTOM_Y",A="FL:::/Kernel/KernelA.HPP,986"$ +$LK,"FileNameAbs",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,144",BI=55$ +$LK,"PSECT_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HPP,3756"$ +$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HPP,3392"$ +$LK,"TK_SHR",A="FL:::/Kernel/KernelA.HPP,1993"$ +$LK,"AutoMountIDE",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,253",BI=56$ +$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HPP,3393"$ +$LK,"_HASH_REM_DEL",A="FL:::/Kernel/KHashA.CPP.Z,253"$ +$LK,"TaskQueRem",A="FL:::/Kernel/Sched.CPP.Z,361",BI=57$ +$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HPP,3394"$ +$LK,"CPalindromeU32",A="FL:::/Kernel/KernelA.HPP,2327"$ +$LK,"CPalindromeU16",A="FL:::/Kernel/KernelA.HPP,2322"$ +$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HPP,919"$ +$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HPP,3395"$ +$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.CPP.Z,240",BI=58$ +$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HPP,3396"$ +$LK,"ARGT_XMM128",A="FL:::/Kernel/KernelA.HPP,1856"$ +$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HPP,3467"$ +$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HPP,3397"$ +$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,3192"$ +$LK,"RandI32",A="FL:::/Kernel/KMathB.CPP.Z,92",BI=59$ +$LK,"RandI16",A="FL:::/Kernel/KMathB.CPP.Z,74",BI=60$ +$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HPP,3398"$ +$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HPP,3399"$ +$LK,"ICf_LOCK",A="FL:::/Kernel/KernelA.HPP,1534"$ +$LK,"ICF_LOCK",A="FL:::/Kernel/KernelA.HPP,1533"$ +$LK,"PutFileLink",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,167",BI=61$ +$LK,"BreakLock",A="FL:::/Kernel/KExcept.CPP.Z,135",BI=62$ +$LK,"HPET",A="FL:::/Kernel/KernelB.HPP,293"$ +$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HPP,3400"$ +$LK,"BDf_FMT",A="FL:::/Kernel/KernelA.HPP,2561"$ +$LK,"CCF_KEEP_DOT",A="FL:::/Kernel/KernelA.HPP,2046"$ +$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HPP,3401"$ +$LK,"TK_MOD_EQUAL",A="FL:::/Kernel/KernelA.HPP,2017"$ +$LK,"ARGT_XMM",A="FL:::/Kernel/KernelA.HPP,1852"$ +$LK,"DOCEf_WIN_REL",A="FL:::/Kernel/KernelA.HPP,1065"$ +$LK,"DOCEF_WIN_REL",A="FL:::/Kernel/KernelA.HPP,990"$ +$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.CPP.Z,275",BI=63$ +$LK,"_D3_DIV",A="FL:::/Kernel/KMathA.CPP.Z,184"$ +$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HPP,3402"$ +$LK,"chars_bmp_non_eol",A="FL:::/Kernel/StrA.CPP.Z,396"$ +$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HPP,3403"$ +$LK,"CTSS",A="FL:::/Kernel/KernelA.HPP,3309"$ +$LK,"FileNameChk",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,222",BI=64$ +$LK,"D3Mul",A="FL:::/Kernel/KernelB.HPP,162"$ +$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HPP,3404"$ +$LK,"SK_NAME",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,89"$ +$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.CPP.Z,144",BI=65$ +$LK,"CallerRep",A="FL:::/Kernel/KDbg.CPP.Z,152",BI=66$ +$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HPP,3405"$ +$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HPP,2842"$ +$LK,"DOCEf_LST",A="FL:::/Kernel/KernelA.HPP,1082"$ +$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.CPP.Z,149",BI=67$ +$LK,"RandI64",A="FL:::/Kernel/KMathB.CPP.Z,110",BI=68$ +$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HPP,3406"$ +$LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2761"$ +$LK,"CCmpGlbls",A="FL:::/Kernel/KernelA.HPP,2125"$ +$LK,"RT_U32",A="FL:::/Kernel/KernelA.HPP,1485"$ +$LK,"RT_U16",A="FL:::/Kernel/KernelA.HPP,1483"$ +$LK,"CExternUsage",A="FL:::/Kernel/KernelA.HPP,808"$ +$LK,"FAT32FreeClusters",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,418",BI=69$ +$LK,"CtrlAltE",A="FL:::/Kernel/KeyDev.CPP.Z,159",BI=70$ +$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HPP,3407"$ +$LK,"ARGT_MM32",A="FL:::/Kernel/KernelA.HPP,1850"$ +$LK,"DOCSS_COMMENT",A="FL:::/Kernel/KernelA.HPP,1109"$ +$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.CPP.Z,164",BI=71$ +$LK,"ip_grid",A="FL:::/Kernel/KGlbls.CPP.Z,19"$ +$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HPP,3408"$ +$LK,"CCodeMisc",A="FL:::/Kernel/KernelA.HPP,1619"$ +$LK,"DOF_DONT_TEXT_ATTR",A="FL:::/Kernel/KernelA.HPP,1198"$ +$LK,"DOCEf_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1027"$ +$LK,"DOCEF_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1021"$ +$LK,"ISODrvInit",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,5",BI=72$ +$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HPP,3409"$ +$LK,"FFB_NEXT_BLK",A="FL:::/Kernel/KernelA.HPP,2681"$ +$LK,"MPIntAll",A="FL:::/Kernel/MultiProc.CPP.Z,148",BI=73$ +$LK,"ISO1FromName",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,88",BI=74$ +$LK,"TaskContextRestore",A="FL:::/Kernel/Sched.CPP.Z,343"$ +$LK,"SYS_INIT_MEM",A="FL:::/Kernel/MemA.CPP.Z,8"$ +$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HPP,3429"$ +$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HPP,3410"$ +$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HPP,3411"$ +$LK,"CDoc",A="FL:::/Kernel/KernelA.HPP,1325"$ +$LK,"MemSetU8",A="FL:::/Kernel/KernelB.HPP,185"$ +$LK,"_FCLEX",A="FL:::/Kernel/KMathA.CPP.Z,646"$ +$LK,"_D3_DOT",A="FL:::/Kernel/KMathA.CPP.Z,113"$ +$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HPP,3796"$ +$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HPP,3412"$ +$LK,"CHashGeneric",A="FL:::/Kernel/KernelA.HPP,725"$ +$LK,"SYS_FIND_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.CPP.Z,8"$ +$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HPP,2995"$ +$LK,"HTF_RESOLVE",A="FL:::/Kernel/KernelA.HPP,699"$ +$LK,"BCnt",A="FL:::/Kernel/KMisc.CPP.Z,39",BI=75$ +$LK,"Mem64DevAlloc",A="FL:::/Kernel/MemC.CPP.Z,215",BI=76$ +$LK,"Mem32DevAlloc",A="FL:::/Kernel/MemC.CPP.Z,165",BI=77$ +$LK,"RT_U64",A="FL:::/Kernel/KernelA.HPP,1488"$ +$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HPP,894"$ +$LK,"HTT_FRAME_PTR",A="FL:::/Kernel/KernelA.HPP,690"$ +$LK,"HTt_FRAME_PTR",A="FL:::/Kernel/KernelA.HPP,660"$ +$LK,"ISO1FilesFind",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,233",BI=78$ +$LK,"CtrlAltM",A="FL:::/Kernel/KeyDev.CPP.Z,169",BI=79$ +$LK,"DefineLstLoad",A="FL:::/Kernel/KDefine.CPP.Z,13",BI=80$ +$LK,"SYS_EM64T",A="FL:::/Kernel/KStart.CPP.Z,318"$ +$LK,"ARGT_MM64",A="FL:::/Kernel/KernelA.HPP,1851"$ +$LK,"DOCEf_LEFT_CB",A="FL:::/Kernel/KernelA.HPP,1051"$ +$LK,"DOCEF_LEFT_CB",A="FL:::/Kernel/KernelA.HPP,976"$ +$LK,"RFLAGf_DIR",A="FL:::/Kernel/KernelA.HPP,312"$ +$LK,"ClusterNumNext",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,1",BI=81$ +$LK,"KbdMouseEvtTime",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,468",BI=82$ +$LK,"ip_last",A="FL:::/Kernel/KGlbls.CPP.Z,18"$ +$LK,"CDirEntry",A="FL:::/Kernel/KernelA.HPP,2464"$ +$LK,"TK_STR",A="FL:::/Kernel/KernelA.HPP,1984"$ +$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HPP,3806"$ +$LK,"CCF_ASM_EXPRESSIONS",A="FL:::/Kernel/KernelA.HPP,2056"$ +$LK,"D3Sub",A="FL:::/Kernel/KernelB.HPP,166"$ +$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HPP,3470"$ +$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.CPP.Z,67",BI=83$ +$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HPP,2992"$ +$LK,"_D3_EQU",A="FL:::/Kernel/KMathA.CPP.Z,226"$ +$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HPP,3627"$ +$LK,"ATA_PACKET",A="FL:::/Kernel/KernelA.HPP,2171"$ +$LK,"HTF_LOCAL",A="FL:::/Kernel/KernelA.HPP,701"$ +$LK,"HTT_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HPP,684"$ +$LK,"HTf_LOCAL",A="FL:::/Kernel/KernelA.HPP,671"$ +$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.CPP.Z,174",BI=84$ +$LK,"IsSilent",A="FL:::/Kernel/KMisc.CPP.Z,228",BI=85$ +$LK,"CBpt",A="FL:::/Kernel/KernelA.HPP,3057"$ +$LK,"IEF_STI",A="FL:::/Kernel/KernelA.HPP,1650"$ +$LK,"HTt_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HPP,654"$ +$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.CPP.Z,250",BI=86$ +$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.CPP.Z,235",BI=87$ +$LK,"CISO1DirEntry",A="FL:::/Kernel/KernelA.HPP,2369"$ +$LK,"_LXCHG_U8",A="FL:::/Kernel/KUtils.CPP.Z,244"$ +$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.CPP.Z,179",BI=88$ +$LK,"ChgDsk",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,176",BI=89$ +$LK,"UserTaskCont",A="FL:::/Kernel/Task.CPP.Z,334",BI=90$ +$LK,"RFLAGf_NESTED_TASK",A="FL:::/Kernel/KernelA.HPP,316"$ +$LK,"BEqu",A="FL:::/Kernel/KernelB.HPP,28"$ +$LK,"ISO1T_PRI_VOL_DESC",A="FL:::/Kernel/KernelA.HPP,2390"$ +$LK,"FAT32MkDir",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,935",BI=91$ +$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,3548"$ +$LK,"ICF_USE_INT",A="FL:::/Kernel/KernelA.HPP,1515"$ +$LK,"DOCT_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,891"$ +$LK,"BIN_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,369"$ +$LK,"ARGT_IMM8",A="FL:::/Kernel/KernelA.HPP,1795"$ +$LK,"SYS_HASH_SINGLE_TABLE_FIND1",A="FL:::/Kernel/KHashA.CPP.Z,75"$ +$LK,"DOC_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,1318"$ +$LK,"DOCEF_INVERT",A="FL:::/Kernel/KernelA.HPP,1023"$ +$LK,"CDateStruct",A="FL:::/Kernel/KernelA.HPP,191"$ +$LK,"CHashFun",A="FL:::/Kernel/KernelA.HPP,846"$ +$LK,"SV_I_REG",A="FL:::/Kernel/KernelA.HPP,1655"$ +$LK,"DOCEf_INVERT",A="FL:::/Kernel/KernelA.HPP,1029"$ +$LK,"DayOfWeek",A="FL:::/Kernel/Date.CPP.Z,30",BI=92$ +$LK,"CDrv",A="FL:::/Kernel/KernelA.HPP,2622"$ +$LK,"TK_MINUS_MINUS",A="FL:::/Kernel/KernelA.HPP,1989"$ +$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HPP,920"$ +$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HPP,187"$ +$LK,"FUF_CANCEL",A="FL:::/Kernel/KernelA.HPP,2510"$ +$LK,"FUf_CANCEL",A="FL:::/Kernel/KernelA.HPP,2485"$ +$LK,"FALSE",A="FL:::/Kernel/KernelA.HPP,19"$ +$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HPP,3632"$ +$LK,"CPUf_SETH_SLEEP",A="FL:::/Kernel/KernelA.HPP,3343"$ +$LK,"SVCf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HPP,3086"$ +$LK,"CUAsmGlbls",A="FL:::/Kernel/KernelA.HPP,2141"$ +$LK,"StrPrintHex",A="FL:::/Kernel/StrA.CPP.Z,1",BI=93$ +$LK,"_D3_ADD_EQU",A="FL:::/Kernel/KMathA.CPP.Z,239"$ +$LK,"DRV_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2621"$ +$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HPP,907"$ +$LK,"Cf_EXTERN",A="FL:::/Kernel/KernelA.HPP,821"$ +$LK,"HPET_GCAP_ID",A="FL:::/Kernel/KernelA.HPP,527"$ +$LK,"ATan",A="FL:::/Kernel/KernelB.HPP,94"$ +$LK,"SysBadFree",A="FL:::/Kernel/MemA.CPP.Z,155",BI=94$ +$LK,"ATA_ID_DEV",A="FL:::/Kernel/KernelA.HPP,2180"$ +$LK,"CHashReg",A="FL:::/Kernel/KernelA.HPP,739"$ +$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HPP,3437"$ +$LK,"LAPIC_LVT_ERR",A="FL:::/Kernel/KernelA.HPP,497"$ +$LK,"Scale2Mem",A="FL:::/Kernel/MemC.CPP.Z,306",BI=95$ +$LK,"RandU32",A="FL:::/Kernel/KMathB.CPP.Z,101",BI=96$ +$LK,"RandU16",A="FL:::/Kernel/KMathB.CPP.Z,83",BI=97$ +$LK,"Mem512TaskFree",A="FL:::/Kernel/MemA.CPP.Z,518",BI=98$ +$LK,"_FLDCW",A="FL:::/Kernel/KMathA.CPP.Z,625"$ +$LK,"__DIR__",A="FL:::/Kernel/KernelA.HPP,1943"$ +$LK,"ARGT_RM32",A="FL:::/Kernel/KernelA.HPP,1812"$ +$LK,"ARGT_RM16",A="FL:::/Kernel/KernelA.HPP,1811"$ +$LK,"RFLAGf_INT",A="FL:::/Kernel/KernelA.HPP,311"$ +$LK,"WIf_SELF_DOC",A="FL:::/Kernel/KernelA.HPP,1416"$ +$LK,"WIF_SELF_DOC",A="FL:::/Kernel/KernelA.HPP,1391"$ +$LK,"MLF_STATIC",A="FL:::/Kernel/KernelA.HPP,771"$ +$LK,"DVT_NTFS",A="FL:::/Kernel/KernelA.HPP,2597"$ +$LK,"ICF_A1_FIRST",A="FL:::/Kernel/KernelA.HPP,1520"$ +$LK,"ChgExt",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,176",BI=99$ +$LK,"str2color_lst",A="FL:::/Kernel/KDefine.CPP.Z,155"$ +$LK,"local_time_offset",A="FL:::/Kernel/KGlbls.CPP.Z,13"$ +$LK,"RedSeaFilesFind",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,541",BI=100$ +$LK,"_D3_MUL",A="FL:::/Kernel/KMathA.CPP.Z,167"$ +$LK,"ISO1_BASE_YEAR",A="FL:::/Kernel/KernelA.HPP,2432"$ +$LK,"TK_ELSE",A="FL:::/Kernel/KernelA.HPP,2016"$ +$LK,"RandU64",A="FL:::/Kernel/KMathB.CPP.Z,119",BI=101$ +$LK,"PostMsgWait",A="FL:::/Kernel/SrvCmd.CPP.Z,254",BI=102$ +$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.CPP.Z,43",BI=103$ +$LK,"ARGT_RM64",A="FL:::/Kernel/KernelA.HPP,1813"$ +$LK,"ATAWaitDRQ",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,36",BI=104$ +$LK,"TaskInit",A="FL:::/Kernel/Task.CPP.Z,154",BI=105$ +$LK,"DOCEf_RIGHT_CB",A="FL:::/Kernel/KernelA.HPP,1053"$ +$LK,"DOCEF_RIGHT_CB",A="FL:::/Kernel/KernelA.HPP,978"$ +$LK,"HTT_DICT_WORD",A="FL:::/Kernel/KernelA.HPP,682"$ +$LK,"HTt_DICT_WORD",A="FL:::/Kernel/KernelA.HPP,652"$ +$LK,"RLf_MP",A="FL:::/Kernel/KernelA.HPP,443"$ +$LK,"CSpring",A="FL:::/Kernel/KernelA.HPP,224"$ +$LK,"CBGR24",A="FL:::/Kernel/KernelA.HPP,2890"$ +$LK,"DVT_NULL",A="FL:::/Kernel/KernelA.HPP,2591"$ +$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HPP,3509"$ +$LK,"CHeapCtrl",A="FL:::/Kernel/KernelA.HPP,2808"$ +$LK,"LastDayOfYear",A="FL:::/Kernel/Date.CPP.Z,110",BI=106$ +$LK,"HeapCtrlBPInit",A="FL:::/Kernel/MemC.CPP.Z,41",BI=107$ +$LK,"SYS_IDLE_PT",A="FL:::/Kernel/Sched.CPP.Z,233"$ +$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HPP,235"$ +$LK,"CAbsCntsI64",A="FL:::/Kernel/KernelA.HPP,1718"$ +$LK,"JobResultGet",A="FL:::/Kernel/SrvCmd.CPP.Z,201",BI=108$ +$LK,"_D3_SUB",A="FL:::/Kernel/KMathA.CPP.Z,149"$ +$LK,"CBGR48",A="FL:::/Kernel/KernelA.HPP,2894"$ +$LK,"DOCEF_BORDER_PLOT",A="FL:::/Kernel/KernelA.HPP,997"$ +$LK,"IntCore0TimerHandler",A="FL:::/Kernel/KMisc.CPP.Z,47",BI=109$ +$LK,"__DATE__",A="FL:::/Kernel/KernelA.HPP,1935"$ +$LK,"chars_bmp_safe_dollar",A="FL:::/Kernel/StrA.CPP.Z,391"$ +$LK,"AdamErr",A="FL:::/Kernel/SrvCmd.CPP.Z,447",BI=110$ +$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HPP,203"$ +$LK,"DOCEf_BORDER_PLOT",A="FL:::/Kernel/KernelA.HPP,1072"$ +$LK,"HTT_MODULE",A="FL:::/Kernel/KernelA.HPP,688"$ +$LK,"HTt_MODULE",A="FL:::/Kernel/KernelA.HPP,658"$ +$LK,"SVCf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HPP,3081"$ +$LK,"ARGT_REL8",A="FL:::/Kernel/KernelA.HPP,1791"$ +$LK,"GridInit",A="FL:::/Kernel/KbdMouse/InputPointer.CPP.Z,1",BI=111$ +$LK,"FirstDayOfYear",A="FL:::/Kernel/Date.CPP.Z,98",BI=112$ +$LK,"CCf_PMT",A="FL:::/Kernel/KernelA.HPP,2040"$ +$LK,"WIf_SELF_ODE",A="FL:::/Kernel/KernelA.HPP,1417"$ +$LK,"WIF_SELF_ODE",A="FL:::/Kernel/KernelA.HPP,1392"$ +$LK,"MLF_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HPP,765"$ +$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HPP,3431"$ +$LK,"RS_ATTR_RESIDENT",A="FL:::/Kernel/KernelA.HPP,2447"$ +$LK,"Dbg2",A="FL:::/Kernel/KDbg.CPP.Z,540",BI=113$ +$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.CPP.Z,154",BI=114$ +$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HPP,2843"$ +$LK,"NULL",A="FL:::/Kernel/KernelA.HPP,17"$ +$LK,"BlkPoolInit",A="FL:::/Kernel/MemC.CPP.Z,18",BI=115$ +$LK,"_BIT_FIELD_EXTRACT_U32",A="FL:::/Kernel/KUtils.CPP.Z,167"$ +$LK,"BDF_EXT_SIZE",A="FL:::/Kernel/KernelA.HPP,2553"$ +$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.CPP.Z,280",BI=116$ +$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HPP,3197"$ +$LK,"BDf_EXT_SIZE",A="FL:::/Kernel/KernelA.HPP,2563"$ +$LK,"RedSeaAllocClusters",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,304",BI=117$ +$LK,"CQue",A="FL:::/Kernel/KernelA.HPP,120"$ +$LK,"DOCEF_UPDATE_DATA",A="FL:::/Kernel/KernelA.HPP,1001"$ +$LK,"AdamLog",A="FL:::/Kernel/SrvCmd.CPP.Z,437",BI=118$ +$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HPP,3186"$ +$LK,"Ff_RET1",A="FL:::/Kernel/KernelA.HPP,844"$ +$LK,"SVCT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HPP,3093"$ +$LK,"RS_ATTR_ARCHIVE",A="FL:::/Kernel/KernelA.HPP,2442"$ +$LK,"DOCEf_UPDATE_DATA",A="FL:::/Kernel/KernelA.HPP,1076"$ +$LK,"OPTf_WARN_PAREN",A="FL:::/Kernel/KernelA.HPP,1464"$ +$LK,"TaskStkNew",A="FL:::/Kernel/Task.CPP.Z,72",BI=119$ +$LK,"RT_PTR",A="FL:::/Kernel/KernelA.HPP,1487"$ +$LK,"HashTableDel",A="FL:::/Kernel/KHashB.CPP.Z,90",BI=120$ +$LK,"LBtc",A="FL:::/Kernel/KernelB.HPP,22"$ +$LK,"FUF_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HPP,2523"$ +$LK,"ClampI64",A="FL:::/Kernel/KernelB.HPP,124"$ +$LK,"FUf_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HPP,2498"$ +$LK,"B2",A="FL:::/Kernel/KDbg.CPP.Z,429",BI=121$ +$LK,"SLOP",A="FL:::/Kernel/StrPrint.CPP.Z,216"$ +$LK,"FF_BUF_DIRTY",A="FL:::/Kernel/KernelA.HPP,2685"$ +$LK,"ICF_SWAP",A="FL:::/Kernel/KernelA.HPP,1529"$ +$LK,"_STRMATCH",A="FL:::/Kernel/StrA.CPP.Z,223"$ +$LK,"MSF_FIXED",A="FL:::/Kernel/KernelA.HPP,206"$ +$LK,"PSectCacheFind",A="FL:::/Kernel/PSect.CPP.Z,85",BI=122$ +$LK,"sys_macro_util_task",A="FL:::/Kernel/KGlbls.CPP.Z,4"$ +$LK,"_CPUID",A="FL:::/Kernel/KUtils.CPP.Z,319"$ +$LK,"SYS_HEAP_BASE",A="FL:::/Kernel/KStart.CPP.Z,184"$ +$LK,"_LBEQU",A="FL:::/Kernel/KUtils.CPP.Z,104"$ +$LK,"Caller",A="FL:::/Kernel/KDbg.CPP.Z,60",BI=123$ +$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HPP,3696"$ +$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HPP,2170"$ +$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3497"$ +$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HPP,2449"$ +$LK,"HPET_MAIN_CNT",A="FL:::/Kernel/KernelA.HPP,529"$ +$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HPP,918"$ +$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HPP,3697"$ +$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HPP,3364"$ +$LK,"exp_1",A="FL:::/Kernel/KernelA.HPP,50"$ +$LK,"CTRL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,15"$ +$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.CPP.Z,85",BI=124$ +$LK,"G2",A="FL:::/Kernel/KDbg.CPP.Z,476",BI=125$ +$LK,"TSSNew",A="FL:::/Kernel/MultiProc.CPP.Z,76",BI=126$ +$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart.CPP.Z,210"$ +$LK,"LBtr",A="FL:::/Kernel/KernelB.HPP,24"$ +$LK,"DVTf_DISABLE",A="FL:::/Kernel/KernelA.HPP,2601"$ +$LK,"HTT_OPCODE",A="FL:::/Kernel/KernelA.HPP,685"$ +$LK,"HTt_OPCODE",A="FL:::/Kernel/KernelA.HPP,655"$ +$LK,"CDATE_YEAR_DAYS_INT",A="FL:::/Kernel/KernelA.HPP,182"$ +$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,519",BI=127$ +$LK,"LBts",A="FL:::/Kernel/KernelB.HPP,26"$ +$LK,"ArcEntryGet",A="FL:::/Kernel/Compress.CPP.Z,100"$ +$LK,"_LOG10",A="FL:::/Kernel/KMathA.CPP.Z,592"$ +$LK,"Adam",A="FL:::/Kernel/SrvCmd.CPP.Z,418",BI=128$ +$LK,"CTryStk",A="FL:::/Kernel/KExcept.CPP.Z,53"$ +$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HPP,3524"$ +$LK,"set_bits_table",A="FL:::/Kernel/KGlbls.CPP.Z,12"$ +$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HPP,2901"$ +$LK,"HTt_FUN",A="FL:::/Kernel/KernelA.HPP,650"$ +$LK,"RS_ATTR_LONG_NAME",A="FL:::/Kernel/KernelA.HPP,2443"$ +$LK,"TK_XOR_XOR",A="FL:::/Kernel/KernelA.HPP,2000"$ +$LK,"DOCEf_HOLD",A="FL:::/Kernel/KernelA.HPP,1080"$ +$LK,"DOCEF_HOLD",A="FL:::/Kernel/KernelA.HPP,1005"$ +$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.CPP.Z,113",BI=129$ +$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.CPP.Z,75",BI=130$ +$LK,"DOC_COLOR_ALT_TEXT",A="FL:::/Kernel/KernelA.HPP,1116"$ +$LK,"MBR_PT_FAT32a",A="FL:::/Kernel/KernelA.HPP,2604"$ +$LK,"DbgHelp",A="FL:::/Kernel/KDbg.CPP.Z,505",BI=131$ +$LK,"_FLOOR",A="FL:::/Kernel/KMathA.CPP.Z,420"$ +$LK,"MBR_PT_FAT32b",A="FL:::/Kernel/KernelA.HPP,2605"$ +$LK,"MBR_PT_FAT32c",A="FL:::/Kernel/KernelA.HPP,2606"$ +$LK,"D3Dist",A="FL:::/Kernel/KernelB.HPP,155"$ +$LK,"MBR_PT_FAT32d",A="FL:::/Kernel/KernelA.HPP,2607"$ +$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HPP,3709"$ +$LK,"MBR_PT_FAT32e",A="FL:::/Kernel/KernelA.HPP,2608"$ +$LK,"MBR_PT_FAT32f",A="FL:::/Kernel/KernelA.HPP,2609"$ +$LK,"CM_MAX_CONSTS",A="FL:::/Kernel/KernelA.HPP,1617"$ +$LK,"DOCEF_TAG_CB",A="FL:::/Kernel/KernelA.HPP,980"$ +$LK,"Str2Date",A="FL:::/Kernel/StrScan.CPP.Z,138",BI=132$ +$LK,"DOCEf_TAG_CB",A="FL:::/Kernel/KernelA.HPP,1055"$ +$LK,"HTt_REG",A="FL:::/Kernel/KernelA.HPP,656"$ +$LK,"ChkPtr",A="FL:::/Kernel/KDbg.CPP.Z,1",BI=133$ +$LK,"TaskWait",A="FL:::/Kernel/SrvCmd.CPP.Z,223",BI=134$ +$LK,"_R10",A="FL:::/Kernel/KernelA.HPP,3334"$ +$LK,"SYS_IRQ_FAULT",A="FL:::/Kernel/Ints.CPP.Z,58"$ +$LK,"SYS_MEM_INIT_VAL",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"_R11",A="FL:::/Kernel/KernelA.HPP,3335"$ +$LK,"WMG_FPS",A="FL:::/Kernel/KernelA.HPP,1437"$ +$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HPP,3782"$ +$LK,"_R12",A="FL:::/Kernel/KernelA.HPP,3336"$ +$LK,"SK_CLUSTER",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,90"$ +$LK,"SysGetI64",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,269",BI=135$ +$LK,"MemSetI64",A="FL:::/Kernel/KernelB.HPP,179"$ +$LK,"_R13",A="FL:::/Kernel/KernelA.HPP,3337"$ +$LK,"DEF_NOT_INITIALIZED",A="FL:::/Kernel/KernelA.HPP,2461"$ +$LK,"SYS_BOOT_PATCH_TABLE_BASE",A="FL:::/Kernel/KStart.CPP.Z,25"$ +$LK,"_R14",A="FL:::/Kernel/KernelA.HPP,3338"$ +$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HPP,2988"$ +$LK,"ODEF_HAS_MASSES",A="FL:::/Kernel/KernelA.HPP,238"$ +$LK,"_R15",A="FL:::/Kernel/KernelA.HPP,3339"$ +$LK,"FUG_FILES_FIND",A="FL:::/Kernel/KernelA.HPP,2531"$ +$LK,"TRUE",A="FL:::/Kernel/KernelA.HPP,18"$ +$LK,"DOC_RECALC_TO_SCREEN",A="FL:::/Kernel/KernelA.HPP,1322"$ +$LK,"chars_bmp_zero_tab_ff_cr_nl_cursor",A="FL:::/Kernel/StrA.CPP.Z,365"$ +$LK,"CEdFindText",A="FL:::/Kernel/KernelA.HPP,1203"$ +$LK,"LDF_NO_ABSS",A="FL:::/Kernel/KernelA.HPP,365"$ +$LK,"DOCEf_LINK",A="FL:::/Kernel/KernelA.HPP,1066"$ +$LK,"DOCEF_LINK",A="FL:::/Kernel/KernelA.HPP,991"$ +$LK,"D3Copy",A="FL:::/Kernel/KernelB.HPP,151"$ +$LK,"Beep",A="FL:::/Kernel/KMisc.CPP.Z,190",BI=136$ +$LK,"_STRNICMP",A="FL:::/Kernel/StrA.CPP.Z,183"$ +$LK,"_MEMSET_I64",A="FL:::/Kernel/KUtils.CPP.Z,42"$ +$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HPP,3419"$ +$LK,"TK_SUB_EQUAL",A="FL:::/Kernel/KernelA.HPP,2009"$ +$LK,"TK_DIV_EQUAL",A="FL:::/Kernel/KernelA.HPP,2004"$ +$LK,"TK_SHL_EQUAL",A="FL:::/Kernel/KernelA.HPP,2001"$ +$LK,"AAT_SUB_U8",A="FL:::/Kernel/KernelA.HPP,1880"$ +$LK,"IET_IMM64_EXPORT",A="FL:::/Kernel/KernelA.HPP,406"$ +$LK,"IET_IMM32_EXPORT",A="FL:::/Kernel/KernelA.HPP,404"$ +$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HPP,272"$ +$LK,"Call",A="FL:::/Kernel/KernelB.HPP,43"$ +$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HPP,3372"$ +$LK,"ICF_CODE_FINAL",A="FL:::/Kernel/KernelA.HPP,1517"$ +$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart.CPP.Z,213"$ +$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,1",BI=137$ +$LK,"InU8",A="FL:::/Kernel/KernelB.HPP,76"$ +$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HPP,1837"$ +$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HPP,2719"$ +$LK,"IEF_48_REX",A="FL:::/Kernel/KernelA.HPP,1647"$ +$LK,"ã",A="FL:::/Kernel/KernelA.HPP,49"$ +$LK,"Suspend",A="FL:::/Kernel/Task.CPP.Z,49",BI=138$ +$LK,"ClampU64",A="FL:::/Kernel/KernelB.HPP,126"$ +$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HPP,3643"$ +$LK,"Define",A="FL:::/Kernel/KDefine.CPP.Z,49",BI=139$ +$LK,"CInstruction",A="FL:::/Kernel/KernelA.HPP,1657"$ +$LK,"FAT32Fmt",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,65",BI=140$ +$LK,"SrvCmdLine",A="FL:::/Kernel/Task.CPP.Z,393",BI=141$ +$LK,"HashTableNew",A="FL:::/Kernel/KHashB.CPP.Z,50",BI=142$ +$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HPP,902"$ +$LK,"_ARG",A="FL:::/Kernel/KMathA.CPP.Z,366"$ +$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HPP,2888"$ +$LK,"CDualBuf",A="FL:::/Kernel/Dsk/DskCDDVD.CPP.Z,41"$ +$LK,"TaskText",A="FL:::/Kernel/SrvCmd.CPP.Z,74",BI=143$ +$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HPP,2889"$ +$LK,"BROWN",A="FL:::/Kernel/KernelA.HPP,2864"$ +$LK,"Da",A="FL:::/Kernel/KDbg.CPP.Z,209",BI=144$ +$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HPP,3691"$ +$LK,"Cd",A="FL:::/Kernel/Dsk/DskDirB.CPP.Z,1",BI=145$ +$LK,"Ceil",A="FL:::/Kernel/KernelB.HPP,122"$ +$LK,"DOCEF_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HPP,1010"$ +$LK,"CCF_DONT_FREE_BUF",A="FL:::/Kernel/KernelA.HPP,2041"$ +$LK,"IET_ZEROED_CODE_HEAP",A="FL:::/Kernel/KernelA.HPP,409"$ +$LK,"SrcEdLink",A="FL:::/Kernel/PSect.CPP.Z,241",BI=146$ +$LK,"GetRBP",A="FL:::/Kernel/KernelB.HPP,248"$ +$LK,"GREEN",A="FL:::/Kernel/KernelA.HPP,2860"$ +$LK,"ì",A="FL:::/Kernel/KernelA.HPP,47"$ +$LK,"ON",A="FL:::/Kernel/KernelA.HPP,20"$ +$LK,"_LXCHG_I64",A="FL:::/Kernel/KUtils.CPP.Z,217"$ +$LK,"DOCEt_BLINK",A="FL:::/Kernel/KernelA.HPP,942"$ +$LK,"DOCET_BLINK",A="FL:::/Kernel/KernelA.HPP,936"$ +$LK,"sys_clipboard_doc",A="FL:::/Kernel/KGlbls.CPP.Z,5"$ +$LK,"CCF_NO_DEFINES",A="FL:::/Kernel/KernelA.HPP,2042"$ +$LK,"DOCEf_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HPP,1085"$ +$LK,"CGDTEntry",A="FL:::/Kernel/KernelA.HPP,328"$ +$LK,"ARGT_XMM0",A="FL:::/Kernel/KernelA.HPP,1857"$ +$LK,"_TASK_END_NOW",A="FL:::/Kernel/Sched.CPP.Z,153"$ +$LK,"HTT_INVALID",A="FL:::/Kernel/KernelA.HPP,673"$ +$LK,"_REP_OUT_U8",A="FL:::/Kernel/KUtils.CPP.Z,308"$ +$LK,"GetRAX",A="FL:::/Kernel/KernelB.HPP,247"$ +$LK,"sys_boot_src",A="FL:::/Kernel/KernelB.HPP,39"$ +$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HPP,3450"$ +$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HPP,3436"$ +$LK,"ARGT_M32N32",A="FL:::/Kernel/KernelA.HPP,1823"$ +$LK,"ARGT_M16N16",A="FL:::/Kernel/KernelA.HPP,1822"$ +$LK,"ARGT_M16N32",A="FL:::/Kernel/KernelA.HPP,1821"$ +$LK,"ICG_NO_CVT_MASK",A="FL:::/Kernel/KernelA.HPP,1539"$ +$LK,"HTF_PRIVATE",A="FL:::/Kernel/KernelA.HPP,693"$ +$LK,"Pow10I64",A="FL:::/Kernel/KMathB.CPP.Z,26",BI=147$ +$LK,"ESTIMATED_MISC_ALLOCS",A="FL:::/Kernel/MemA.CPP.Z,126"$ +$LK,"HTf_PRIVATE",A="FL:::/Kernel/KernelA.HPP,663"$ +$LK,"Dm",A="FL:::/Kernel/KDbg.CPP.Z,204",BI=148$ +$LK,"CCF_EXE_BLK",A="FL:::/Kernel/KernelA.HPP,2053"$ +$LK,"CQueD3I32",A="FL:::/Kernel/KernelA.HPP,130"$ +$LK,"BDf_REMOVABLE",A="FL:::/Kernel/KernelA.HPP,2555"$ +$LK,"BDF_REMOVABLE",A="FL:::/Kernel/KernelA.HPP,2545"$ +$LK,"DEF_REMOVABLE",A="FL:::/Kernel/KernelA.HPP,2460"$ +$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HPP,2876"$ +$LK,"DftExt",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,185",BI=149$ +$LK,"Bt",A="FL:::/Kernel/KernelB.HPP,14"$ +$LK,"OPTf_EXTERNS_TO_IMPORTS",A="FL:::/Kernel/KernelA.HPP,1466"$ +$LK,"Dr",A="FL:::/Kernel/KDbg.CPP.Z,328",BI=150$ +$LK,"CPUId",A="FL:::/Kernel/KernelB.HPP,258"$ +$LK,"FilesFind2",A="FL:::/Kernel/Dsk/DskFind.CPP.Z,1",BI=151$ +$LK,"scan_code_map",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,156"$ +$LK,"MSize2",A="FL:::/Kernel/MemB.CPP.Z,370"$ +$LK,"REGG_C_TEMP_CLOBBERED",A="FL:::/Kernel/KernelA.HPP,1705"$ +$LK,"MemSetU32",A="FL:::/Kernel/KernelB.HPP,183"$ +$LK,"MemSetU16",A="FL:::/Kernel/KernelB.HPP,181"$ +$LK,"DirTreeDel",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,36",BI=152$ +$LK,"Fs",A="FL:::/Kernel/KernelB.HPP,286"$ +$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HPP,3444"$ +$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HPP,3430"$ +$LK,"SYS_SEMA_FAR_CALL32",A="FL:::/Kernel/KernelA.HPP,598"$ +$LK,"PAGE_BITS",A="FL:::/Kernel/KernelA.HPP,2780"$ +$LK,"Gs",A="FL:::/Kernel/KernelB.HPP,240"$ +$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart.CPP.Z,216"$ +$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HPP,3499"$ +$LK,"DrvModelNum",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,241",BI=153$ +$LK,"RepInU8",A="FL:::/Kernel/KernelB.HPP,85"$ +$LK,"MSG_FOCUS",A="FL:::/Kernel/KernelA.HPP,3137"$ +$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.CPP.Z,243",BI=154$ +$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HPP,3767"$ +$LK,"_TEST_EXCEPT",A="FL:::/Kernel/KExcept.CPP.Z,4"$ +$LK,"_FSTCW",A="FL:::/Kernel/KMathA.CPP.Z,632"$ +$LK,"MSG_IP_R_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3144"$ +$LK,"ScanFlags",A="FL:::/Kernel/StrB.CPP.Z,123",BI=155$ +$LK,"Ln",A="FL:::/Kernel/KernelB.HPP,135"$ +$LK,"GetS",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,216",BI=156$ +$LK,"_MEMSET_U32",A="FL:::/Kernel/KUtils.CPP.Z,29"$ +$LK,"_MEMSET_U16",A="FL:::/Kernel/KUtils.CPP.Z,16"$ +$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart.CPP.Z,226"$ +$LK,"SYS_COMPILE_TIME",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"GetTSC",A="FL:::/Kernel/KernelB.HPP,289"$ +$LK,"BptR",A="FL:::/Kernel/KDbg.CPP.Z,396",BI=157$ +$LK,"BptS",A="FL:::/Kernel/KDbg.CPP.Z,375",BI=158$ +$LK,"_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.CPP.Z,203"$ +$LK,"_MHEAP_CTRL",A="FL:::/Kernel/MemB.CPP.Z,353"$ +$LK,"ATAMount",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,238",BI=159$ +$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.CPP.Z,290",BI=160$ +$LK,"_EXP",A="FL:::/Kernel/KMathA.CPP.Z,558"$ +$LK,"SYS_SEMA_SYS_TIMER",A="FL:::/Kernel/KernelA.HPP,588"$ +$LK,"IET_END",A="FL:::/Kernel/KernelA.HPP,390"$ +$LK,"KbdHandler",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,424",BI=161$ +$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,3685"$ +$LK,"SPF_TRUNCATE",A="FL:::/Kernel/StrPrint.CPP.Z,3"$ +$LK,"SYS_HASH_FIND1",A="FL:::/Kernel/KHashA.CPP.Z,126"$ +$LK,"GetRSP",A="FL:::/Kernel/KernelB.HPP,250"$ +$LK,"_D3_DIST",A="FL:::/Kernel/KMathA.CPP.Z,39"$ +$LK,"ScanKey",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,127",BI=162$ +$LK,"MouseDriverInstall",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,238",BI=163$ +$LK,"mouse_last",A="FL:::/Kernel/KGlbls.CPP.Z,20"$ +$LK,"D3DistSqr",A="FL:::/Kernel/KernelB.HPP,157"$ +$LK,"_RDI",A="FL:::/Kernel/KernelA.HPP,3328"$ +$LK,"SV_R_REG",A="FL:::/Kernel/KernelA.HPP,1654"$ +$LK,"TY_IMM",A="FL:::/Kernel/KernelA.HPP,1497"$ +$LK,"ATARepExitAllApplications",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,119",BI=164$ +$LK,"CeilI64",A="FL:::/Kernel/KMathB.CPP.Z,62",BI=165$ +$LK,"_RBP",A="FL:::/Kernel/KernelA.HPP,3329"$ +$LK,"CCacheBlk",A="FL:::/Kernel/KernelA.HPP,2650"$ +$LK,"OPTf_WARN_DUP_TYPES",A="FL:::/Kernel/KernelA.HPP,1465"$ +$LK,"ATAProbe",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,373",BI=166$ +$LK,"_LXCHG_U16",A="FL:::/Kernel/KUtils.CPP.Z,235"$ +$LK,"_LXCHG_U32",A="FL:::/Kernel/KUtils.CPP.Z,226"$ +$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart.CPP.Z,208"$ +$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HPP,901"$ +$LK,"MEM_NUM_E820_ENTRIES",A="FL:::/Kernel/KernelA.HPP,354"$ +$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.CPP.Z,188",BI=167$ +$LK,"KbdIntHandler",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,394",BI=168$ +$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart.CPP.Z,211"$ +$LK,"DOCEf_SKIP",A="FL:::/Kernel/KernelA.HPP,1083"$ +$LK,"DOCEF_SKIP",A="FL:::/Kernel/KernelA.HPP,1008"$ +$LK,"SPF_COMMA",A="FL:::/Kernel/StrPrint.CPP.Z,4"$ +$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart.CPP.Z,214"$ +$LK,"CSrvCtrl",A="FL:::/Kernel/KernelA.HPP,3115"$ +$LK,"DirNew",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,1",BI=169$ +$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart.CPP.Z,217"$ +$LK,"_RAX",A="FL:::/Kernel/KernelA.HPP,3323"$ +$LK,"FAT32DirNew",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,581",BI=170$ +$LK,"HTf_RESOLVED",A="FL:::/Kernel/KernelA.HPP,669"$ +$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.CPP.Z,1",BI=171$ +$LK,"Help",A="FL:::/Kernel/StrB.CPP.Z,115",BI=172$ +$LK,"Log2",A="FL:::/Kernel/KernelB.HPP,137"$ +$LK,"_RBX",A="FL:::/Kernel/KernelA.HPP,3324"$ +$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HPP,923"$ +$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HPP,916"$ +$LK,"_D3_COPY",A="FL:::/Kernel/KMathA.CPP.Z,212"$ +$LK,"PUT_STR",A="FL:::/Kernel/StrA.CPP.Z,58"$ +$LK,"_RET",A="FL:::/Kernel/KUtils.CPP.Z,457"$ +$LK,"_RCX",A="FL:::/Kernel/KernelA.HPP,3325"$ +$LK,"BIOSTotalMem",A="FL:::/Kernel/MemC.CPP.Z,243",BI=173$ +$LK,"_RDX",A="FL:::/Kernel/KernelA.HPP,3326"$ +$LK,"RLF_FULL_HEAP",A="FL:::/Kernel/KernelA.HPP,458"$ +$LK,"RLf_FULL_HEAP",A="FL:::/Kernel/KernelA.HPP,440"$ +$LK,"ScanMsg",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,39",BI=174$ +$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart.CPP.Z,219"$ +$LK,"__FILE__",A="FL:::/Kernel/KernelA.HPP,1941"$ +$LK,"TY_REG",A="FL:::/Kernel/KernelA.HPP,1498"$ +$LK,"CDate",A="FL:::/Kernel/KernelA.HPP,184"$ +$LK,"CLFlush",A="FL:::/Kernel/KernelB.HPP,275"$ +$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart.CPP.Z,199"$ +$LK,"_RIP",A="FL:::/Kernel/KernelA.HPP,3331"$ +$LK,"IEF_REX_ONLY_R8_R15",A="FL:::/Kernel/KernelA.HPP,1648"$ +$LK,"DOCSS_SINGLE_QUOTE",A="FL:::/Kernel/KernelA.HPP,1107"$ +$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HPP,2900"$ +$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HPP,2875"$ +$LK,"_FSTSW",A="FL:::/Kernel/KMathA.CPP.Z,641"$ +$LK,"ARGT_IMM32",A="FL:::/Kernel/KernelA.HPP,1797"$ +$LK,"ARGT_IMM16",A="FL:::/Kernel/KernelA.HPP,1796"$ +$LK,"BSPInit",A="FL:::/Kernel/MultiProc.CPP.Z,373",BI=175$ +$LK,"MouseSpeedSet",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,130",BI=176$ +$LK,"Name2ParentDirCluster",A="FL:::/Kernel/Dsk/DskStrB.CPP.Z,54",BI=177$ +$LK,"Free",A="FL:::/Kernel/MemB.CPP.Z,368"$ +$LK,"DOCEf_AUX_STR",A="FL:::/Kernel/KernelA.HPP,1035"$ +$LK,"DOCEF_AUX_STR",A="FL:::/Kernel/KernelA.HPP,955"$ +$LK,"Char2KeyName",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,200",BI=178$ +$LK,"Mem512Free",A="FL:::/Kernel/MemA.CPP.Z,266",BI=179$ +$LK,"TK_NUM_TK",A="FL:::/Kernel/KernelA.HPP,2022"$ +$LK,"TY_SIB",A="FL:::/Kernel/KernelA.HPP,1500"$ +$LK,"CWinMgrGlbls",A="FL:::/Kernel/KernelA.HPP,1439"$ +$LK,"DOCEf_TREE",A="FL:::/Kernel/KernelA.HPP,1081"$ +$LK,"DOCEF_TREE",A="FL:::/Kernel/KernelA.HPP,1006"$ +$LK,"MouseUpdatePre",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,140",BI=180$ +$LK,"ISO1FileFind",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,130",BI=181$ +$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,3211"$ +$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.CPP.Z,97",BI=182$ +$LK,"Mem512TaskAlloc",A="FL:::/Kernel/MemA.CPP.Z,478",BI=183$ +$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KernelA.HPP,3365"$ +$LK,"D3Norm",A="FL:::/Kernel/KernelB.HPP,164"$ +$LK,"_POW",A="FL:::/Kernel/KMathA.CPP.Z,515"$ +$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HPP,3126"$ +$LK,"ARGT_IMM64",A="FL:::/Kernel/KernelA.HPP,1798"$ +$LK,"DOCT_BUTTON",A="FL:::/Kernel/KernelA.HPP,917"$ +$LK,"PUT_HEX_U8",A="FL:::/Kernel/StrA.CPP.Z,44"$ +$LK,"_RSI",A="FL:::/Kernel/KernelA.HPP,3327"$ +$LK,"CTRLF_CAPTURE_RIGHT_IP",A="FL:::/Kernel/KernelA.HPP,2994"$ +$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.CPP.Z,116",BI=184$ +$LK,"WIf_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1426"$ +$LK,"WIF_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1402"$ +$LK,"CIntermediateCode",A="FL:::/Kernel/KernelA.HPP,1568"$ +$LK,"DOC_COLOR_ANCHOR",A="FL:::/Kernel/KernelA.HPP,1119"$ +$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.CPP.Z,201",BI=185$ +$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.CPP.Z,157",BI=186$ +$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.CPP.Z,21",BI=187$ +$LK,"Auto",A="FL:::/Kernel/SrvCmd.CPP.Z,496",BI=188$ +$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HPP,2989"$ +$LK,"FREE_PAGE_HASH_SIZE",A="FL:::/Kernel/KernelA.HPP,2784"$ +$LK,"DOCEf_QUIT",A="FL:::/Kernel/KernelA.HPP,1068"$ +$LK,"DOCEF_QUIT",A="FL:::/Kernel/KernelA.HPP,993"$ +$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.CPP.Z,1",BI=189$ +$LK,"MaxI64",A="FL:::/Kernel/KernelB.HPP,98"$ +$LK,"SYS_GDT_PTR",A="FL:::/Kernel/KStart.CPP.Z,49"$ +$LK,"_RSP",A="FL:::/Kernel/KernelA.HPP,3330"$ +$LK,"FSetCluster",A="FL:::/Kernel/Dsk/DskCFile.CPP.Z,99",BI=190$ +$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.CPP.Z,99",BI=191$ +$LK,"HeapsInit",A="FL:::/Kernel/MemC.CPP.Z,261",BI=192$ +$LK,"fp_update_ctrls",A="FL:::/Kernel/KGlbls.CPP.Z,29"$ +$LK,"DSK_CACHE_HASH_SIZE",A="FL:::/Kernel/KernelA.HPP,2648"$ +$LK,"RS_ATTR_VOL_ID",A="FL:::/Kernel/KernelA.HPP,2440"$ +$LK,"DOCf_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,1298"$ +$LK,"DOCF_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,1262"$ +$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,909"$ +$LK,"_SQR",A="FL:::/Kernel/KMathA.CPP.Z,337"$ +$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HPP,3206"$ +$LK,"REGT_R32",A="FL:::/Kernel/KernelA.HPP,732"$ +$LK,"REGT_R16",A="FL:::/Kernel/KernelA.HPP,731"$ +$LK,"IEF_NOT_IN_64_BIT",A="FL:::/Kernel/KernelA.HPP,1646"$ +$LK,"RedSeaFileFind",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,157",BI=193$ +$LK,"SYS_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.CPP.Z,4"$ +$LK,"MouseIntHandler",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,13",BI=194$ +$LK,"tS",A="FL:::/Kernel/KMisc.CPP.Z,122",BI=195$ +$LK,"LBEqu",A="FL:::/Kernel/KernelB.HPP,34"$ +$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.CPP.Z,102",BI=196$ +$LK,"SYS_SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,594"$ +$LK,"IntInit1",A="FL:::/Kernel/Ints.CPP.Z,160",BI=197$ +$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HPP,3413"$ +$LK,"IntInit2",A="FL:::/Kernel/Ints.CPP.Z,175",BI=198$ +$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HPP,893"$ +$LK,"GetKey",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,146",BI=199$ +$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HPP,2845"$ +$LK,"CFAT32DirEntryLong",A="FL:::/Kernel/KernelA.HPP,2307"$ +$LK,"Kill",A="FL:::/Kernel/Task.CPP.Z,28",BI=200$ +$LK,"RS_ATTR_FIXED",A="FL:::/Kernel/KernelA.HPP,2450"$ +$LK,"TK_IFDEF",A="FL:::/Kernel/KernelA.HPP,2011"$ +$LK,"REGT_R64",A="FL:::/Kernel/KernelA.HPP,733"$ +$LK,"SingleUser",A="FL:::/Kernel/KMisc.CPP.Z,260",BI=201$ +$LK,"IsPreempt",A="FL:::/Kernel/KMisc.CPP.Z,233",BI=202$ +$LK,"Date2Struct",A="FL:::/Kernel/Date.CPP.Z,39",BI=203$ +$LK,"CFile",A="FL:::/Kernel/KernelA.HPP,2690"$ +$LK,"Fault2",A="FL:::/Kernel/KDbg.CPP.Z,599",BI=204$ +$LK,"Load",A="FL:::/Kernel/KLoad.CPP.Z,181",BI=205$ +$LK,"ip",A="FL:::/Kernel/KGlbls.CPP.Z,18"$ +$LK,"CFreeLst",A="FL:::/Kernel/KernelA.HPP,2613"$ +$LK,"DOCEF_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HPP,998"$ +$LK,"CHash",A="FL:::/Kernel/KernelA.HPP,615"$ +$LK,"RedSeaFreeClusters",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,252",BI=206$ +$LK,"Fault3",A="FL:::/Kernel/KDbg.CPP.Z,566",BI=207$ +$LK,"CompressBuf",A="FL:::/Kernel/Compress.CPP.Z,281",BI=208$ +$LK,"chars_bmp_hex_numeric",A="FL:::/Kernel/StrA.CPP.Z,353"$ +$LK,"CCF_NOT_CONST",A="FL:::/Kernel/KernelA.HPP,2050"$ +$LK,"CeilU64",A="FL:::/Kernel/KMathB.CPP.Z,41",BI=209$ +$LK,"BPlf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2794"$ +$LK,"BDlf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2566"$ +$LK,"sys_neg_pows_lst",A="FL:::/Kernel/StrPrint.CPP.Z,213"$ +$LK,"sys_pos_pows_lst",A="FL:::/Kernel/StrPrint.CPP.Z,212"$ +$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.CPP.Z,906",BI=210$ +$LK,"DVlf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2588"$ +$LK,"SrcFileName",A="FL:::/Kernel/PSect.CPP.Z,202",BI=211$ +$LK,"OverRideSingleUserSwap",A="FL:::/Kernel/KDbg.CPP.Z,337",BI=212$ +$LK,"RawD",A="FL:::/Kernel/KDbg.CPP.Z,234",BI=213$ +$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.CPP.Z,265",BI=214$ +$LK,"adam_task",A="FL:::/Kernel/KGlbls.CPP.Z,7"$ +$LK,"_POW10",A="FL:::/Kernel/KMathA.CPP.Z,524"$ +$LK,"SVCRf_LOCKED",A="FL:::/Kernel/KernelA.HPP,3114"$ +$LK,"BDF_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,2549"$ +$LK,"TY_STK",A="FL:::/Kernel/KernelA.HPP,1504"$ +$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,914"$ +$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HPP,3442"$ +$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HPP,3428"$ +$LK,"TK_ENDIF",A="FL:::/Kernel/KernelA.HPP,2015"$ +$LK,"RT_UF32",A="FL:::/Kernel/KernelA.HPP,1490"$ +$LK,"CCF_NO_REG_OPT",A="FL:::/Kernel/KernelA.HPP,2051"$ +$LK,"DOCEf_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,1031"$ +$LK,"DOCEF_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,1025"$ +$LK,"DOCEt_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,945"$ +$LK,"DOCET_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,939"$ +$LK,"RLf_DOC",A="FL:::/Kernel/KernelA.HPP,446"$ +$LK,"pi",A="FL:::/Kernel/KernelA.HPP,48"$ +$LK,"ICF_ALTERNATE_TEMPLATE",A="FL:::/Kernel/KernelA.HPP,1532"$ +$LK,"ATTRF_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,882"$ +$LK,"ATTRf_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,887"$ +$LK,"KbdMouseVarsInit",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,297",BI=215$ +$LK,"DOCF_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,1251"$ +$LK,"RT_MASK",A="FL:::/Kernel/KernelA.HPP,1494"$ +$LK,"SYS_SEMA_UPDATE_WIN_Z_BUF",A="FL:::/Kernel/KernelA.HPP,601"$ +$LK,"Exit",A="FL:::/Kernel/Task.CPP.Z,1",BI=216$ +$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HPP,3198"$ +$LK,"HTT_KEYWORD",A="FL:::/Kernel/KernelA.HPP,683"$ +$LK,"CopySingleZ",A="FL:::/Kernel/Dsk/DskCopy.CPP.Z,1",BI=217$ +$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HPP,3525"$ +$LK,"HTt_KEYWORD",A="FL:::/Kernel/KernelA.HPP,653"$ +$LK,"SYS_SEMA_IN_DEBUGGER",A="FL:::/Kernel/KernelA.HPP,590"$ +$LK,"RT_UF64",A="FL:::/Kernel/KernelA.HPP,1492"$ +$LK,"DOCf_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,1286"$ +$LK,"GetMsg",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,97",BI=218$ +$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HPP,3759"$ +$LK,"MEM_NUM_PML1",A="FL:::/Kernel/KernelA.HPP,3366"$ +$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HPP,2837"$ +$LK,"MEM_NUM_PML2",A="FL:::/Kernel/KernelA.HPP,3367"$ +$LK,"ICF_SHORT_JMP",A="FL:::/Kernel/KernelA.HPP,1519"$ +$LK,"IA32_FS_BASE",A="FL:::/Kernel/KernelA.HPP,516"$ +$LK,"Rand",A="FL:::/Kernel/KMathB.CPP.Z,128",BI=219$ +$LK,"MEM_NUM_PML3",A="FL:::/Kernel/KernelA.HPP,3368"$ +$LK,"FAT32_ENTRIES_BITS",A="FL:::/Kernel/KernelA.HPP,2320"$ +$LK,"TK_IDENT",A="FL:::/Kernel/KernelA.HPP,1983"$ +$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.CPP.Z,110",BI=220$ +$LK,"MEM_NUM_PML4",A="FL:::/Kernel/KernelA.HPP,3369"$ +$LK,"ToFileLine",A="FL:::/Kernel/EdLite.CPP.Z,303",BI=221$ +$LK,"D3Unit",A="FL:::/Kernel/KernelB.HPP,168"$ +$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HPP,2987"$ +$LK,"TK_IFAOT",A="FL:::/Kernel/KernelA.HPP,2013"$ +$LK,"IsDotC",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,31",BI=222$ +$LK,"BDf_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,2559"$ +$LK,"CICArg",A="FL:::/Kernel/KernelA.HPP,1545"$ +$LK,"DOCEf_CENTER_X",A="FL:::/Kernel/KernelA.HPP,1057"$ +$LK,"DOCEF_CENTER_X",A="FL:::/Kernel/KernelA.HPP,982"$ +$LK,"SYS_TIMER_FREQ",A="FL:::/Kernel/KernelA.HPP,546"$ +$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.CPP.Z,107",BI=223$ +$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HPP,3514"$ +$LK,"DOCEf_CENTER_Y",A="FL:::/Kernel/KernelA.HPP,1060"$ +$LK,"DOCEF_CENTER_Y",A="FL:::/Kernel/KernelA.HPP,985"$ +$LK,"RLf_DSK",A="FL:::/Kernel/KernelA.HPP,444"$ +$LK,"Seed",A="FL:::/Kernel/KMathB.CPP.Z,134",BI=224$ +$LK,"DrvsRelease",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,27",BI=225$ +$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HPP,3191"$ +$LK,"DOCEF_REFRESH_DATA",A="FL:::/Kernel/KernelA.HPP,1000"$ +$LK,"SYS_SEMA_FLUSH_VGA_IMAGE",A="FL:::/Kernel/KernelA.HPP,595"$ +$LK,"OPTf_NO_REG_VAR",A="FL:::/Kernel/KernelA.HPP,1468"$ +$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HPP,2991"$ +$LK,"DOCEf_REFRESH_DATA",A="FL:::/Kernel/KernelA.HPP,1075"$ +$LK,"DOCEf_LEFT_EXP",A="FL:::/Kernel/KernelA.HPP,1038"$ +$LK,"DOCEF_LEFT_EXP",A="FL:::/Kernel/KernelA.HPP,958"$ +$LK,"ISO1FileRead",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,190",BI=226$ +$LK,"ATAPIWaitReady",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,334",BI=227$ +$LK,"TK_MUL_EQUAL",A="FL:::/Kernel/KernelA.HPP,2003"$ +$LK,"TK_NOT_EQUAL",A="FL:::/Kernel/KernelA.HPP,1995"$ +$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HPP,3491"$ +$LK,"FUF_ALL",A="FL:::/Kernel/KernelA.HPP,2509"$ +$LK,"STR_LEN",A="FL:::/Kernel/KernelA.HPP,39"$ +$LK,"DskCacheQueIns",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,53",BI=228$ +$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HPP,3492"$ +$LK,"sys_semas",A="FL:::/Kernel/KernelB.HPP,237"$ +$LK,"InputFilterTask",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,1",BI=229$ +$LK,"SYS_HASH_STR",A="FL:::/Kernel/KHashA.CPP.Z,49"$ +$LK,"ATAR0_CMD",A="FL:::/Kernel/KernelA.HPP,2196"$ +$LK,"I_DBG",A="FL:::/Kernel/KernelA.HPP,294"$ +$LK,"FATNameTo",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,135",BI=230$ +$LK,"SrvCmdQueDel",A="FL:::/Kernel/SrvCmd.CPP.Z,7",BI=231$ +$LK,"MinI64",A="FL:::/Kernel/KernelB.HPP,100"$ +$LK,"MaxU64",A="FL:::/Kernel/KernelB.HPP,99"$ +$LK,"CallInd",A="FL:::/Kernel/KernelB.HPP,48"$ +$LK,"EndianI64",A="FL:::/Kernel/KMisc.CPP.Z,25",BI=232$ +$LK,"_MSIZE",A="FL:::/Kernel/MemB.CPP.Z,322"$ +$LK,"GVF_IMPORT",A="FL:::/Kernel/KernelA.HPP,857"$ +$LK,"HTF_IMPORT",A="FL:::/Kernel/KernelA.HPP,696"$ +$LK,"HTf_IMPORT",A="FL:::/Kernel/KernelA.HPP,666"$ +$LK,"NUM_BLKDEVS",A="FL:::/Kernel/KernelA.HPP,2568"$ +$LK,"IEF_PLUS_OPCODE",A="FL:::/Kernel/KernelA.HPP,1643"$ +$LK,"LAPIC_ICR_LOW",A="FL:::/Kernel/KernelA.HPP,489"$ +$LK,"mouse",A="FL:::/Kernel/KGlbls.CPP.Z,20"$ +$LK,"D3Zero",A="FL:::/Kernel/KernelB.HPP,169"$ +$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HPP,3422"$ +$LK,"FUF_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HPP,2525"$ +$LK,"DskCacheInvalidate2",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,97",BI=233$ +$LK,"CCtrl",A="FL:::/Kernel/KernelA.HPP,3013"$ +$LK,"CBlkDev",A="FL:::/Kernel/KernelA.HPP,2570"$ +$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HPP,928"$ +$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HPP,924"$ +$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HPP,214"$ +$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HPP,3176"$ +$LK,"DOCT_TEXT",A="FL:::/Kernel/KernelA.HPP,890"$ +$LK,"CMathODE",A="FL:::/Kernel/KernelA.HPP,242"$ +$LK,"RFLAGf_ALIGN_CHECK",A="FL:::/Kernel/KernelA.HPP,319"$ +$LK,"MAllocIdentical",A="FL:::/Kernel/MemB.CPP.Z,392",BI=234$ +$LK,"FUf_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HPP,2500"$ +$LK,"DOCF_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HPP,1247"$ +$LK,"CMemberLst",A="FL:::/Kernel/KernelA.HPP,788"$ +$LK,"DOCf_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HPP,1282"$ +$LK,"DskCacheQueRem",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,46",BI=235$ +$LK,"_D3_NORM",A="FL:::/Kernel/KMathA.CPP.Z,4"$ +$LK,"DOCEf_BLINK",A="FL:::/Kernel/KernelA.HPP,1028"$ +$LK,"DOCEF_BLINK",A="FL:::/Kernel/KernelA.HPP,1022"$ +$LK,"IsDotZ",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,22",BI=236$ +$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.CPP.Z,140",BI=237$ +$LK,"_TASK_CONTEXT_RESTORE",A="FL:::/Kernel/Sched.CPP.Z,97"$ +$LK,"BFieldOrU32",A="FL:::/Kernel/KernelB.HPP,32"$ +$LK,"TK_IFJIT",A="FL:::/Kernel/KernelA.HPP,2014"$ +$LK,"SYS_MP_CRASH_HANDLER_ADDR",A="FL:::/Kernel/Ints.CPP.Z,2"$ +$LK,"RedSeaFileRead",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,209",BI=238$ +$LK,"MousePktRead",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,1",BI=239$ +$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HPP,3636"$ +$LK,"ARGT_REL32",A="FL:::/Kernel/KernelA.HPP,1793"$ +$LK,"ARGT_REL16",A="FL:::/Kernel/KernelA.HPP,1792"$ +$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HPP,233"$ +$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HPP,3476"$ +$LK,"MAX_U64_F64",A="FL:::/Kernel/KernelA.HPP,43"$ +$LK,"CLine",A="FL:::/Kernel/EdLite.CPP.Z,1"$ +$LK,"REGG_C_LOCAL_VARS",A="FL:::/Kernel/KernelA.HPP,1706"$ +$LK,"REGT_SEG",A="FL:::/Kernel/KernelA.HPP,734"$ +$LK,"CMass",A="FL:::/Kernel/KernelA.HPP,207"$ +$LK,"GetStr",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,200",BI=240$ +$LK,"LTRED",A="FL:::/Kernel/KernelA.HPP,2870"$ +$LK,"StrIMatch",A="FL:::/Kernel/StrA.CPP.Z,319"$ +$LK,"HTG_TYPE_MASK",A="FL:::/Kernel/KernelA.HPP,691"$ +$LK,"Sign",A="FL:::/Kernel/KernelB.HPP,141"$ +$LK,"ExpandBuf",A="FL:::/Kernel/Compress.CPP.Z,250",BI=241$ +$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HPP,897"$ +$LK,"RLf_RAW",A="FL:::/Kernel/KernelA.HPP,441"$ +$LK,"ToggleZorNotZ",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,238",BI=242$ +$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HPP,3625"$ +$LK,"D3MulEqu",A="FL:::/Kernel/KernelB.HPP,163"$ +$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HPP,3174"$ +$LK,"MP_MAX_PROCESSORS",A="FL:::/Kernel/KernelA.HPP,301"$ +$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.CPP.Z,1",BI=243$ +$LK,"PutSrcLink",A="FL:::/Kernel/PSect.CPP.Z,258",BI=244$ +$LK,"CMenu",A="FL:::/Kernel/KernelA.HPP,3047"$ +$LK,"BDT_ATAPI",A="FL:::/Kernel/KernelA.HPP,2542"$ +$LK,"FUF_MAP",A="FL:::/Kernel/KernelA.HPP,2513"$ +$LK,"CFAT32DirEntry",A="FL:::/Kernel/KernelA.HPP,2291"$ +$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HPP,910"$ +$LK,"CMT_HASH_ENTRY",A="FL:::/Kernel/KernelA.HPP,1608"$ +$LK,"RLf_VGA",A="FL:::/Kernel/KernelA.HPP,435"$ +$LK,"ICF_TRACE",A="FL:::/Kernel/KernelA.HPP,1522"$ +$LK,"WIf_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1424"$ +$LK,"LAPIC_LVT_PERF",A="FL:::/Kernel/KernelA.HPP,494"$ +$LK,"MemLowPagesProtect",A="FL:::/Kernel/MemC.CPP.Z,132",BI=245$ +$LK,"SC_F1",A="FL:::/Kernel/KernelA.HPP,3477"$ +$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart.CPP.Z,231"$ +$LK,"SC_F2",A="FL:::/Kernel/KernelA.HPP,3478"$ +$LK,"SYS_VAR_INIT_FLAG",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"SYS_MEM_INIT_FLAG",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"SC_F3",A="FL:::/Kernel/KernelA.HPP,3479"$ +$LK,"SignI64",A="FL:::/Kernel/KernelB.HPP,103"$ +$LK,"_CALLIND",A="FL:::/Kernel/KUtils.CPP.Z,333"$ +$LK,"SC_F4",A="FL:::/Kernel/KernelA.HPP,3480"$ +$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HPP,2997"$ +$LK,"RS_ATTR_SYSTEM",A="FL:::/Kernel/KernelA.HPP,2439"$ +$LK,"SYS_SEMA_MUTE",A="FL:::/Kernel/KernelA.HPP,603"$ +$LK,"I_BPT",A="FL:::/Kernel/KernelA.HPP,287"$ +$LK,"_TAKE_EXCEPT",A="FL:::/Kernel/KExcept.CPP.Z,20"$ +$LK,"DefineCnt",A="FL:::/Kernel/KDefine.CPP.Z,74",BI=246$ +$LK,"SC_F5",A="FL:::/Kernel/KernelA.HPP,3481"$ +$LK,"WIF_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HPP,1394"$ +$LK,"RedSeaCd",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,238",BI=247$ +$LK,"C:/Doc/Bit.TXT.Z",A="FL:::/Kernel/KernelB.HPP,9"$ +$LK,"SC_F6",A="FL:::/Kernel/KernelA.HPP,3482"$ +$LK,"PAGE_SIZE",A="FL:::/Kernel/KernelA.HPP,2781"$ +$LK,"SysGrInit",A="FL:::/Kernel/KEnd.CPP.Z,65",BI=248$ +$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.CPP.Z,244",BI=249$ +$LK,"SysBadMAlloc",A="FL:::/Kernel/MemA.CPP.Z,160",BI=250$ +$LK,"SC_F7",A="FL:::/Kernel/KernelA.HPP,3483"$ +$LK,"DOCSS_NORMAL",A="FL:::/Kernel/KernelA.HPP,1106"$ +$LK,"GVF_EXTERN",A="FL:::/Kernel/KernelA.HPP,858"$ +$LK,"SPF_NEG_E",A="FL:::/Kernel/StrPrint.CPP.Z,11"$ +$LK,"SC_F8",A="FL:::/Kernel/KernelA.HPP,3484"$ +$LK,"Mute",A="FL:::/Kernel/KMisc.CPP.Z,204",BI=251$ +$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HPP,218"$ +$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HPP,3546"$ +$LK,"SC_F9",A="FL:::/Kernel/KernelA.HPP,3485"$ +$LK,"DOCEF_SOLID_BORDER",A="FL:::/Kernel/KernelA.HPP,996"$ +$LK,"KbdBuildSC",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,298",BI=252$ +$LK,"IOAPICID",A="FL:::/Kernel/KernelA.HPP,506"$ +$LK,"RFLAGf_SIGN",A="FL:::/Kernel/KernelA.HPP,309"$ +$LK,"AMAllocIdentical",A="FL:::/Kernel/MemB.CPP.Z,403",BI=253$ +$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HPP,2866"$ +$LK,"DOCEF_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HPP,989"$ +$LK,"PutDirLink",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,201",BI=254$ +$LK,"EndianU32",A="FL:::/Kernel/KMisc.CPP.Z,15",BI=255$ +$LK,"EndianU16",A="FL:::/Kernel/KMisc.CPP.Z,7",BI=256$ +$LK,"DOCEf_SOLID_BORDER",A="FL:::/Kernel/KernelA.HPP,1071"$ +$LK,"SPF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/StrPrint.CPP.Z,12"$ +$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HPP,243"$ +$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HPP,3783"$ +$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HPP,3180"$ +$LK,"CCf_FUN_EXP",A="FL:::/Kernel/KernelA.HPP,2060"$ +$LK,"CCF_FUN_EXP",A="FL:::/Kernel/KernelA.HPP,2059"$ +$LK,"LAPIC_APIC_VERSION",A="FL:::/Kernel/KernelA.HPP,474"$ +$LK,"PutS",A="FL:::/Kernel/KeyDev.CPP.Z,29",BI=257$ +$LK,"DOCEf_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HPP,1064"$ +$LK,"CDocBin",A="FL:::/Kernel/KernelA.HPP,1092"$ +$LK,"LAPIC_BASE",A="FL:::/Kernel/KernelA.HPP,471"$ +$LK,"MAX_F64",A="FL:::/Kernel/KernelA.HPP,44"$ +$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.CPP.Z,218",BI=258$ +$LK,"IA32_GS_BASE",A="FL:::/Kernel/KernelA.HPP,517"$ +$LK,"log2_e",A="FL:::/Kernel/KernelA.HPP,52"$ +$LK,"CurDir",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,254",BI=259$ +$LK,"MinU64",A="FL:::/Kernel/KernelB.HPP,101"$ +$LK,"_SYS_HLT",A="FL:::/Kernel/KUtils.CPP.Z,469"$ +$LK,"CCF_AOT_COMPILE",A="FL:::/Kernel/KernelA.HPP,2070"$ +$LK,"OPTf_KEEP_PRIVATE",A="FL:::/Kernel/KernelA.HPP,1467"$ +$LK,"MAX_I32",A="FL:::/Kernel/KernelA.HPP,31"$ +$LK,"MAX_I16",A="FL:::/Kernel/KernelA.HPP,27"$ +$LK,"HTF_EXPORT",A="FL:::/Kernel/KernelA.HPP,695"$ +$LK,"HTf_EXPORT",A="FL:::/Kernel/KernelA.HPP,665"$ +$LK,"ATAPIReadBlks2",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,385",BI=260$ +$LK,"_D3_UNIT",A="FL:::/Kernel/KMathA.CPP.Z,305"$ +$LK,"CCf_AOT_COMPILE",A="FL:::/Kernel/KernelA.HPP,2071"$ +$LK,"POP_C_REGS",A="FL:::/Kernel/KernelA.HPP,1680"$ +$LK,"_STRIMATCH",A="FL:::/Kernel/StrA.CPP.Z,262"$ +$LK,"DrvChk",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,117",BI=261$ +$LK,"CSema",A="FL:::/Kernel/KernelA.HPP,580"$ +$LK,"EXT_HEAPLOG_MALLOC",A="FL:::/Kernel/KernelA.HPP,571"$ +$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HPP,3513"$ +$LK,"DOCT_SOFT_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,892"$ +$LK,"GetBaseUnit",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,276",BI=262$ +$LK,"FixSet",A="FL:::/Kernel/EdLite.CPP.Z,327",BI=263$ +$LK,"MapDrv",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,190",BI=264$ +$LK,"DrvMakeFree",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,38",BI=265$ +$LK,"IPSet",A="FL:::/Kernel/KbdMouse/InputPointer.CPP.Z,43",BI=266$ +$LK,"SYS_SEMA_HEAPLOG_LOCK",A="FL:::/Kernel/KernelA.HPP,593"$ +$LK,"sqrt2",A="FL:::/Kernel/KernelA.HPP,55"$ +$LK,"CQueVectU8",A="FL:::/Kernel/KernelA.HPP,161"$ +$LK,"IntFaultHandlersNew",A="FL:::/Kernel/Ints.CPP.Z,146",BI=267$ +$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HPP,3190"$ +$LK,"OM_CB",A="FL:::/Kernel/KernelA.HPP,1782"$ +$LK,"MAX_I64",A="FL:::/Kernel/KernelA.HPP,35"$ +$LK,"throw",A="FL:::/Kernel/KExcept.CPP.Z,81",BI=268$ +$LK,"sys_boot_base",A="FL:::/Kernel/KernelB.HPP,37"$ +$LK,"BDF_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HPP,2548"$ +$LK,"TK_AND_AND",A="FL:::/Kernel/KernelA.HPP,1998"$ +$LK,"REG_NONE",A="FL:::/Kernel/KernelA.HPP,1699"$ +$LK,"OC_LOCK_PREFIX",A="FL:::/Kernel/KernelA.HPP,1672"$ +$LK,"WIF_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1388"$ +$LK,"Ff_INTERRUPT",A="FL:::/Kernel/KernelA.HPP,837"$ +$LK,"OM_CD",A="FL:::/Kernel/KernelA.HPP,1784"$ +$LK,"AAT_ADD_U8",A="FL:::/Kernel/KernelA.HPP,1879"$ +$LK,"REGT_XMM",A="FL:::/Kernel/KernelA.HPP,737"$ +$LK,"DOCSS_CPP_Z_COMMENT",A="FL:::/Kernel/KernelA.HPP,1110"$ +$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,912"$ +$LK,"PutExcept",A="FL:::/Kernel/KExcept.CPP.Z,45",BI=269$ +$LK,"TestExcept",A="FL:::/Kernel/KExcept.CPP.Z,41"$ +$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HPP,2883"$ +$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HPP,2879"$ +$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,913"$ +$LK,"HTT_FILE",A="FL:::/Kernel/KernelA.HPP,687"$ +$LK,"HTT_DEFINE_STR",A="FL:::/Kernel/KernelA.HPP,676"$ +$LK,"HTt_FILE",A="FL:::/Kernel/KernelA.HPP,657"$ +$LK,"Push",A="FL:::/Kernel/KernelB.HPP,252"$ +$LK,"SVCf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HPP,3085"$ +$LK,"ICF_DEL_PREVIOUS_INS",A="FL:::/Kernel/KernelA.HPP,1536"$ +$LK,"HTt_DEFINE_STR",A="FL:::/Kernel/KernelA.HPP,646"$ +$LK,"STK_REP_LEN",A="FL:::/Kernel/KDbg.CPP.Z,102"$ +$LK,"I_NMI",A="FL:::/Kernel/KernelA.HPP,286"$ +$LK,"Date2ISO1",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,61",BI=270$ +$LK,"ModU64",A="FL:::/Kernel/KernelB.HPP,102"$ +$LK,"SVCf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HPP,3079"$ +$LK,"DOCG_DBL_BUF_FLAGS",A="FL:::/Kernel/KernelA.HPP,947"$ +$LK,"WIf_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HPP,1418"$ +$LK,"WIf_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1413"$ +$LK,"CTask",A="FL:::/Kernel/KernelA.HPP,3220"$ +$LK,"SYS_PCI_BUSSES",A="FL:::/Kernel/KStart.CPP.Z,51"$ +$LK,"OC_JMP_REL8",A="FL:::/Kernel/KernelA.HPP,1676"$ +$LK,"_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.CPP.Z,188"$ +$LK,"_D3_ZERO",A="FL:::/Kernel/KMathA.CPP.Z,201"$ +$LK,"ARf_CSPRITE_PICK_GRAPHICALLY",A="FL:::/Kernel/KernelA.HPP,3797"$ +$LK,"Str2F64",A="FL:::/Kernel/StrScan.CPP.Z,55",BI=271$ +$LK,"_YIELD",A="FL:::/Kernel/Sched.CPP.Z,167"$ +$LK,"OM_IB",A="FL:::/Kernel/KernelA.HPP,1786"$ +$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HPP,222"$ +$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HPP,3530"$ +$LK,"DOCf_PLAIN_TEXT_WITH_TABS",A="FL:::/Kernel/KernelA.HPP,1271"$ +$LK,"DOCF_PLAIN_TEXT_WITH_TABS",A="FL:::/Kernel/KernelA.HPP,1236"$ +$LK,"DrvNextFree",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,51",BI=272$ +$LK,"OM_ID",A="FL:::/Kernel/KernelA.HPP,1788"$ +$LK,"OM_CP",A="FL:::/Kernel/KernelA.HPP,1785"$ +$LK,"WIF_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HPP,1396"$ +$LK,"_ROUND",A="FL:::/Kernel/KMathA.CPP.Z,380"$ +$LK,"RFLAGf_TRAP",A="FL:::/Kernel/KernelA.HPP,310"$ +$LK,"SYS_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.CPP.Z,154"$ +$LK,"FUF_RECURSE",A="FL:::/Kernel/KernelA.HPP,2506"$ +$LK,"FUf_RECURSE",A="FL:::/Kernel/KernelA.HPP,2481"$ +$LK,"MemCmp",A="FL:::/Kernel/KernelB.HPP,173"$ +$LK,"SVCf_DONE",A="FL:::/Kernel/KernelA.HPP,3083"$ +$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HPP,3471"$ +$LK,"User",A="FL:::/Kernel/Task.CPP.Z,367",BI=273$ +$LK,"WIF_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HPP,1398"$ +$LK,"DOCEf_RIGHT_EXP",A="FL:::/Kernel/KernelA.HPP,1040"$ +$LK,"DOCEF_RIGHT_EXP",A="FL:::/Kernel/KernelA.HPP,960"$ +$LK,"DirEntryDel",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,17",BI=274$ +$LK,"CLexFile",A="FL:::/Kernel/KernelA.HPP,1947"$ +$LK,"OM_CW",A="FL:::/Kernel/KernelA.HPP,1783"$ +$LK,"DOCF_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HPP,1253"$ +$LK,"IA32_LAPIC_BASE",A="FL:::/Kernel/KernelA.HPP,514"$ +$LK,"ATACmd",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,59",BI=275$ +$LK,"BusyWait",A="FL:::/Kernel/KMisc.CPP.Z,136",BI=276$ +$LK,"DOCEf_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,1045"$ +$LK,"DOCEF_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,965"$ +$LK,"DOCEf_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,1046"$ +$LK,"DOCEF_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,966"$ +$LK,"Str2I64",A="FL:::/Kernel/StrScan.CPP.Z,1",BI=277$ +$LK,"Sqrt",A="FL:::/Kernel/KernelB.HPP,108"$ +$LK,"NowDateTimeStruct",A="FL:::/Kernel/Date.CPP.Z,133",BI=278$ +$LK,"YorN",A="FL:::/Kernel/StrB.CPP.Z,87",BI=279$ +$LK,"MT_CD",A="FL:::/Kernel/KernelA.HPP,2454"$ +$LK,"ICF_NO_DEPEND_RESULT",A="FL:::/Kernel/KernelA.HPP,1516"$ +$LK,"RFLAGf_VINT",A="FL:::/Kernel/KernelA.HPP,320"$ +$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3542"$ +$LK,"DOCEF_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HPP,963"$ +$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart.CPP.Z,223"$ +$LK,"SVCT_MSG",A="FL:::/Kernel/KernelA.HPP,3089"$ +$LK,"ICF_DEPEND_RESULT",A="FL:::/Kernel/KernelA.HPP,1528"$ +$LK,"DOCf_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HPP,1288"$ +$LK,"CDocEntryBase",A="FL:::/Kernel/KernelA.HPP,1140"$ +$LK,"MLF_STR_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HPP,767"$ +$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.CPP.Z,221",BI=280$ +$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,3537"$ +$LK,"SYS_SEMA_HEAPLOG_ACTIVE",A="FL:::/Kernel/KernelA.HPP,592"$ +$LK,"DOC_SCROLL_SPEED",A="FL:::/Kernel/KernelA.HPP,1104"$ +$LK,"DOCEf_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HPP,1043"$ +$LK,"SSF_NO_TENSION",A="FL:::/Kernel/KernelA.HPP,223"$ +$LK,"I32",A="FL:::/Kernel/KernelA.HPP,85"$ +$LK,"I16",A="FL:::/Kernel/KernelA.HPP,71"$ +$LK,"MemCpy",A="FL:::/Kernel/KernelB.HPP,175"$ +$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HPP,3646"$ +$LK,"OM_IW",A="FL:::/Kernel/KernelA.HPP,1787"$ +$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HPP,3630"$ +$LK,"OM_NO",A="FL:::/Kernel/KernelA.HPP,1781"$ +$LK,"IET_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,410"$ +$LK,"GVF_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,859"$ +$LK,"DefineSub",A="FL:::/Kernel/KDefine.CPP.Z,60",BI=281$ +$LK,"WHITE",A="FL:::/Kernel/KernelA.HPP,2873"$ +$LK,"ATA_READ_MULTI_EXT",A="FL:::/Kernel/KernelA.HPP,2177"$ +$LK,"DOCEF_SCROLLING_X",A="FL:::/Kernel/KernelA.HPP,967"$ +$LK,"DOCEf_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HPP,1073"$ +$LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:::/Kernel/KernelA.HPP,2391"$ +$LK,"DOCEf_SCROLLING_X",A="FL:::/Kernel/KernelA.HPP,1047"$ +$LK,"MPInt",A="FL:::/Kernel/MultiProc.CPP.Z,131",BI=282$ +$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HPP,3786"$ +$LK,"CDskGlbls",A="FL:::/Kernel/KernelA.HPP,2660"$ +$LK,"I64",A="FL:::/Kernel/KernelA.HPP,103"$ +$LK,"MAX_U32",A="FL:::/Kernel/KernelA.HPP,33"$ +$LK,"MAX_U16",A="FL:::/Kernel/KernelA.HPP,29"$ +$LK,"PopUpPrint",A="FL:::/Kernel/SrvCmd.CPP.Z,409",BI=283$ +$LK,"IntEntryGet",A="FL:::/Kernel/Ints.CPP.Z,93",BI=284$ +$LK,"CD2",A="FL:::/Kernel/KernelA.HPP,148"$ +$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.CPP.Z,195",BI=285$ +$LK,"sys_font_8x8",A="FL:::/Kernel/Font8x8.CPP.Z,3"$ +$LK,"CCF_HAS_RETURN",A="FL:::/Kernel/KernelA.HPP,2055"$ +$LK,"CAsmArg",A="FL:::/Kernel/KernelA.HPP,1758"$ +$LK,"CD3",A="FL:::/Kernel/KernelA.HPP,154"$ +$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HPP,226"$ +$LK,"RFLAGf_ZERO",A="FL:::/Kernel/KernelA.HPP,308"$ +$LK,"DrvMapBlkClean",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,75",BI=286$ +$LK,"CCF_CLASS_IP",A="FL:::/Kernel/KernelA.HPP,2075"$ +$LK,"WIf_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HPP,1420"$ +$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.CPP.Z,163",BI=287$ +$LK,"SYS_SEMA_SYS_DATE",A="FL:::/Kernel/KernelA.HPP,589"$ +$LK,"EXT_WIN_FOCUS",A="FL:::/Kernel/KernelA.HPP,570"$ +$LK,"ClustersAlloc",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,134",BI=288$ +$LK,"WIF_SELF_IP_L",A="FL:::/Kernel/KernelA.HPP,1384"$ +$LK,"MAX_U64",A="FL:::/Kernel/KernelA.HPP,37"$ +$LK,"WIf_SELF_IP_L",A="FL:::/Kernel/KernelA.HPP,1411"$ +$LK,"CHashAC",A="FL:::/Kernel/KernelA.HPP,744"$ +$LK,"DOCf_NO_CURSOR",A="FL:::/Kernel/KernelA.HPP,1272"$ +$LK,"DOCF_NO_CURSOR",A="FL:::/Kernel/KernelA.HPP,1237"$ +$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.CPP.Z,922",BI=289$ +$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.CPP.Z,1",BI=290$ +$LK,"FOpen",A="FL:::/Kernel/Dsk/DskCFile.CPP.Z,9",BI=291$ +$LK,"CCF_LAST_WAS_DOT",A="FL:::/Kernel/KernelA.HPP,2069"$ +$LK,"CMF_DEFINED",A="FL:::/Kernel/KernelA.HPP,1611"$ +$LK,"WIf_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HPP,1422"$ +$LK,"HTG_ALL",A="FL:::/Kernel/KernelA.HPP,706"$ +$LK,"sys_var_init_val",A="FL:::/Kernel/KernelB.HPP,192"$ +$LK,"FUF_REPLACE",A="FL:::/Kernel/KernelA.HPP,2511"$ +$LK,"FUf_REPLACE",A="FL:::/Kernel/KernelA.HPP,2486"$ +$LK,"DrvRep",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,256",BI=292$ +$LK,"BlkDevUnlock",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,15",BI=293$ +$LK,"CMemUsed",A="FL:::/Kernel/KernelA.HPP,2726"$ +$LK,"WIF_SELF_IP_R",A="FL:::/Kernel/KernelA.HPP,1386"$ +$LK,"JobQue",A="FL:::/Kernel/MultiProc.CPP.Z,232",BI=294$ +$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.CPP.Z,71",BI=295$ +$LK,"DrvTypeSet",A="FL:::/Kernel/Dsk/DskFmt.CPP.Z,1",BI=296$ +$LK,"FUF_JUST_AOT",A="FL:::/Kernel/KernelA.HPP,2520"$ +$LK,"FUf_JUST_AOT",A="FL:::/Kernel/KernelA.HPP,2495"$ +$LK,"WIf_SELF_IP_R",A="FL:::/Kernel/KernelA.HPP,1412"$ +$LK,"DirNameAbs",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,87",BI=297$ +$LK,"DOF_DONT_HOME",A="FL:::/Kernel/KernelA.HPP,1196"$ +$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HPP,3416"$ +$LK,"DOCEf_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,1089"$ +$LK,"DOCEG1_DONT_EDIT",A="FL:::/Kernel/KernelA.HPP,1016"$ +$LK,"DOCEF_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,1014"$ +$LK,"CDImageWrite",A="FL:::/Kernel/Dsk/DskCDDVD.CPP.Z,80",BI=298$ +$LK,"DrvMapBlkAlloc",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,65",BI=299$ +$LK,"WildMatch",A="FL:::/Kernel/StrA.CPP.Z,656",BI=300$ +$LK,"CDC",A="FL:::/Kernel/KernelA.HPP,3557"$ +$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HPP,3469"$ +$LK,"IsMute",A="FL:::/Kernel/KMisc.CPP.Z,218",BI=301$ +$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HPP,895"$ +$LK,"MouseRst",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,37",BI=302$ +$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.CPP.Z,1",BI=303$ +$LK,"BDf_READ_ONLY",A="FL:::/Kernel/KernelA.HPP,2557"$ +$LK,"BDF_READ_ONLY",A="FL:::/Kernel/KernelA.HPP,2547"$ +$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HPP,3534"$ +$LK,"WIG_USER_TASK_DFT",A="FL:::/Kernel/KernelA.HPP,1407"$ +$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HPP,271"$ +$LK,"XchgI64",A="FL:::/Kernel/KernelB.HPP,266"$ +$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HPP,3468"$ +$LK,"DOF_DONT_WINMGR_SYNC",A="FL:::/Kernel/KernelA.HPP,1199"$ +$LK,"I_SINGLE_STEP",A="FL:::/Kernel/KernelA.HPP,285"$ +$LK,"KbdMouseRst",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,228",BI=304$ +$LK,"ATA_WRITE_MULTI",A="FL:::/Kernel/KernelA.HPP,2178"$ +$LK,"TK_OR_EQUAL",A="FL:::/Kernel/KernelA.HPP,2006"$ +$LK,"DOC_COLOR_KEYWORD",A="FL:::/Kernel/KernelA.HPP,1123"$ +$LK,"XTalkStr",A="FL:::/Kernel/SrvCmd.CPP.Z,503",BI=305$ +$LK,"FUF_JUST_GRA",A="FL:::/Kernel/KernelA.HPP,2522"$ +$LK,"FUf_JUST_GRA",A="FL:::/Kernel/KernelA.HPP,2497"$ +$LK,"CCF_IN_QUOTES",A="FL:::/Kernel/KernelA.HPP,2052"$ +$LK,"CFifoU8",A="FL:::/Kernel/KernelA.HPP,169"$ +$LK,"ATAReadNativeMax",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,187",BI=306$ +$LK,"JobResultScan",A="FL:::/Kernel/SrvCmd.CPP.Z,166",BI=307$ +$LK,"SYS_KERNEL_END",A="FL:::/Kernel/KEnd.CPP.Z,218"$ +$LK,"TakeExcept",A="FL:::/Kernel/KExcept.CPP.Z,42"$ +$LK,"_MALLOC",A="FL:::/Kernel/MemB.CPP.Z,4"$ +$LK,"CHashDefineStr",A="FL:::/Kernel/KernelA.HPP,815"$ +$LK,"MemSet",A="FL:::/Kernel/KernelB.HPP,177"$ +$LK,"SPF_SLASH",A="FL:::/Kernel/StrPrint.CPP.Z,6"$ +$LK,"_TRUNC",A="FL:::/Kernel/KMathA.CPP.Z,400"$ +$LK,"HTF_IMM",A="FL:::/Kernel/KernelA.HPP,697"$ +$LK,"FUF_IGNORE",A="FL:::/Kernel/KernelA.HPP,2508"$ +$LK,"FUf_IGNORE",A="FL:::/Kernel/KernelA.HPP,2483"$ +$LK,"AAT_SUB_U32",A="FL:::/Kernel/KernelA.HPP,1884"$ +$LK,"AAT_SUB_U16",A="FL:::/Kernel/KernelA.HPP,1882"$ +$LK,"IP_MOUSE",A="FL:::/Kernel/KernelA.HPP,2943"$ +$LK,"ATAIDDrvs",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,198",BI=308$ +$LK,"UserCmdLine",A="FL:::/Kernel/Task.CPP.Z,356",BI=309$ +$LK,"GVF_FUN",A="FL:::/Kernel/KernelA.HPP,856"$ +$LK,"IA32F_LME",A="FL:::/Kernel/KernelA.HPP,513"$ +$LK,"LAPICF_APIC_ENABLED",A="FL:::/Kernel/KernelA.HPP,483"$ +$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.CPP.Z,265",BI=310$ +$LK,"ATARep",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,130",BI=311$ +$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.CPP.Z,125",BI=312$ +$LK,"D3SubEqu",A="FL:::/Kernel/KernelB.HPP,167"$ +$LK,"FUF_JUST_JIT",A="FL:::/Kernel/KernelA.HPP,2521"$ +$LK,"FUf_JUST_JIT",A="FL:::/Kernel/KernelA.HPP,2496"$ +$LK,"CAsmIns",A="FL:::/Kernel/KernelA.HPP,1746"$ +$LK,"InU32",A="FL:::/Kernel/KernelB.HPP,75"$ +$LK,"InU16",A="FL:::/Kernel/KernelB.HPP,74"$ +$LK,"TK_IF",A="FL:::/Kernel/KernelA.HPP,2010"$ +$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HPP,911"$ +$LK,"U32",A="FL:::/Kernel/KernelA.HPP,77"$ +$LK,"U16",A="FL:::/Kernel/KernelA.HPP,65"$ +$LK,"_XCHG_I64",A="FL:::/Kernel/KUtils.CPP.Z,184"$ +$LK,"ATANop",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,48",BI=313$ +$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HPP,262"$ +$LK,"AAT_SUB_U64",A="FL:::/Kernel/KernelA.HPP,1886"$ +$LK,"HasLower",A="FL:::/Kernel/PSect.CPP.Z,1",BI=314$ +$LK,"_CALL",A="FL:::/Kernel/KUtils.CPP.Z,145"$ +$LK,"IA32F_SCE",A="FL:::/Kernel/KernelA.HPP,512"$ +$LK,"MIN_F64",A="FL:::/Kernel/KernelA.HPP,45"$ +$LK,"__LINE__",A="FL:::/Kernel/KernelA.HPP,1937"$ +$LK,"FUF_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HPP,2526"$ +$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.CPP.Z,56",BI=315$ +$LK,"U64",A="FL:::/Kernel/KernelA.HPP,93"$ +$LK,"MIN_I32",A="FL:::/Kernel/KernelA.HPP,30"$ +$LK,"MIN_I16",A="FL:::/Kernel/KernelA.HPP,26"$ +$LK,"FSize",A="FL:::/Kernel/Dsk/DskCFile.CPP.Z,1",BI=316$ +$LK,"IntEntrySet",A="FL:::/Kernel/Ints.CPP.Z,105",BI=317$ +$LK,"Mem32DevIns",A="FL:::/Kernel/MemC.CPP.Z,75",BI=318$ +$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart.CPP.Z,225"$ +$LK,"FUf_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HPP,2501"$ +$LK,"_FXRSTOR",A="FL:::/Kernel/KMathA.CPP.Z,658"$ +$LK,"_CEIL",A="FL:::/Kernel/KMathA.CPP.Z,441"$ +$LK,"INVALID_CLUSTER",A="FL:::/Kernel/KernelA.HPP,2211"$ +$LK,"TaskEnd",A="FL:::/Kernel/Task.CPP.Z,410",BI=319$ +$LK,"MIN_I64",A="FL:::/Kernel/KernelA.HPP,34"$ +$LK,"TaskCaller",A="FL:::/Kernel/KDbg.CPP.Z,75",BI=320$ +$LK,"SV_NONE",A="FL:::/Kernel/KernelA.HPP,1656"$ +$LK,"QUE_VECT_U8_CNT",A="FL:::/Kernel/KernelA.HPP,160"$ +$LK,"__DEPTH__",A="FL:::/Kernel/KernelA.HPP,1939"$ +$LK,"RT_I0",A="FL:::/Kernel/KernelA.HPP,1478"$ +$LK,"DOCEF_LEFT_MACRO",A="FL:::/Kernel/KernelA.HPP,959"$ +$LK,"TK_DEREFERENCE",A="FL:::/Kernel/KernelA.HPP,1990"$ +$LK,"ARGT_UIMM8",A="FL:::/Kernel/KernelA.HPP,1800"$ +$LK,"DOCF_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1252"$ +$LK,"DOCEf_LEFT_MACRO",A="FL:::/Kernel/KernelA.HPP,1039"$ +$LK,"SYS_GDT",A="FL:::/Kernel/KStart.CPP.Z,36"$ +$LK,"SYS_WAKE_HANDLER",A="FL:::/Kernel/Ints.CPP.Z,6"$ +$LK,"CDate2Dos",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,1",BI=321$ +$LK,"MRT_UNUSED",A="FL:::/Kernel/KernelA.HPP,2768"$ +$LK,"RedSeaFilesDel",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,460",BI=322$ +$LK,"XchgU32",A="FL:::/Kernel/KernelB.HPP,268"$ +$LK,"XchgU16",A="FL:::/Kernel/KernelB.HPP,267"$ +$LK,"CCntsGlbls",A="FL:::/Kernel/KernelA.HPP,531"$ +$LK,"TEMP_BUF_LEN",A="FL:::/Kernel/StrPrint.CPP.Z,215"$ +$LK,"LastDayOfMon",A="FL:::/Kernel/Date.CPP.Z,82",BI=323$ +$LK,"RT_I8",A="FL:::/Kernel/KernelA.HPP,1480"$ +$LK,"SVCf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HPP,3077"$ +$LK,"CAsmNum",A="FL:::/Kernel/KernelA.HPP,1731"$ +$LK,"_REP_OUT_U16",A="FL:::/Kernel/KUtils.CPP.Z,297"$ +$LK,"_REP_OUT_U32",A="FL:::/Kernel/KUtils.CPP.Z,286"$ +$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HPP,3622"$ +$LK,"TaskFinishOff",A="FL:::/Kernel/Task.CPP.Z,402",BI=324$ +$LK,"FirstDayOfMon",A="FL:::/Kernel/Date.CPP.Z,71",BI=325$ +$LK,"PutChars",A="FL:::/Kernel/KeyDev.CPP.Z,20",BI=326$ +$LK,"_BEQU",A="FL:::/Kernel/KUtils.CPP.Z,89"$ +$LK,"DOCEf_RAW_TYPE",A="FL:::/Kernel/KernelA.HPP,1044"$ +$LK,"DOCEF_RAW_TYPE",A="FL:::/Kernel/KernelA.HPP,964"$ +$LK,"ansf",A="FL:::/Kernel/KernelA.HPP,3321"$ +$LK,"BlkDevsInitAll",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,316",BI=327$ +$LK,"SysUntry",A="FL:::/Kernel/KExcept.CPP.Z,74",BI=328$ +$LK,"WIF_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HPP,1401"$ +$LK,"_MEMCMP",A="FL:::/Kernel/KUtils.CPP.Z,70"$ +$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HPP,3207"$ +$LK,"OFF",A="FL:::/Kernel/KernelA.HPP,21"$ +$LK,"DOCF_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HPP,1254"$ +$LK,"SYS_BOOT_SRC",A="FL:::/Kernel/KStart.CPP.Z,24"$ +$LK,"FUF_JUST_SRC",A="FL:::/Kernel/KernelA.HPP,2519"$ +$LK,"FUf_JUST_SRC",A="FL:::/Kernel/KernelA.HPP,2494"$ +$LK,"OC_CALL",A="FL:::/Kernel/KernelA.HPP,1675"$ +$LK,"TaskExe",A="FL:::/Kernel/SrvCmd.CPP.Z,39",BI=329$ +$LK,"ThrowBreak",A="FL:::/Kernel/KExcept.CPP.Z,124",BI=330$ +$LK,"FileWrite",A="FL:::/Kernel/Dsk/DskFile.CPP.Z,94",BI=331$ +$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HPP,3801"$ +$LK,"RFLAGf_ID",A="FL:::/Kernel/KernelA.HPP,322"$ +$LK,"PSECT_CACHE_SIZE",A="FL:::/Kernel/KernelA.HPP,3748"$ +$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HPP,3439"$ +$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HPP,3425"$ +$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,24",BI=332$ +$LK,"_XCHG_U16",A="FL:::/Kernel/KUtils.CPP.Z,200"$ +$LK,"_XCHG_U32",A="FL:::/Kernel/KUtils.CPP.Z,192"$ +$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HPP,3695"$ +$LK,"ARGT_XMM32",A="FL:::/Kernel/KernelA.HPP,1854"$ +$LK,"WIF_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1390"$ +$LK,"LDF_SILENT",A="FL:::/Kernel/KernelA.HPP,367"$ +$LK,"RED",A="FL:::/Kernel/KernelA.HPP,2862"$ +$LK,"RT_U0",A="FL:::/Kernel/KernelA.HPP,1479"$ +$LK,"SYS_SEMA_DEBUG",A="FL:::/Kernel/KernelA.HPP,586"$ +$LK,"SrvCmdDel",A="FL:::/Kernel/SrvCmd.CPP.Z,1",BI=333$ +$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HPP,3640"$ +$LK,"CAOTCtrl",A="FL:::/Kernel/KernelA.HPP,1961"$ +$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HPP,3447"$ +$LK,"TASK_CONTEXT_SAVE",A="FL:::/Kernel/Sched.CPP.Z,47"$ +$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HPP,3433"$ +$LK,"CDirContext",A="FL:::/Kernel/KernelA.HPP,2674"$ +$LK,"SysThrowBreak",A="FL:::/Kernel/KExcept.CPP.Z,110",BI=334$ +$LK,"_D3_DIST_SQR",A="FL:::/Kernel/KMathA.CPP.Z,61"$ +$LK,"_MEMCPY",A="FL:::/Kernel/KUtils.CPP.Z,55"$ +$LK,"ARGT_XMM64",A="FL:::/Kernel/KernelA.HPP,1855"$ +$LK,"ATAWriteBlks",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,461",BI=335$ +$LK,"LEX_MAX_IDENT",A="FL:::/Kernel/KernelA.HPP,2024"$ +$LK,"RT_U8",A="FL:::/Kernel/KernelA.HPP,1481"$ +$LK,"DOCEf_USER_DATA",A="FL:::/Kernel/KernelA.HPP,1048"$ +$LK,"DOCEF_USER_DATA",A="FL:::/Kernel/KernelA.HPP,968"$ +$LK,"COPY_BUF_BLKS",A="FL:::/Kernel/Dsk/DskCopy.CPP.Z,22"$ +$LK,"FAT32FileWrite",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,818",BI=336$ +$LK,"CISO1Date",A="FL:::/Kernel/KernelA.HPP,2364"$ +$LK,"EDf_BAIL",A="FL:::/Kernel/KernelA.HPP,1229"$ +$LK,"EDF_BAIL",A="FL:::/Kernel/KernelA.HPP,1223"$ +$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.CPP.Z,16",BI=337$ +$LK,"SYS_RAM_REBOOT",A="FL:::/Kernel/KStart.CPP.Z,348"$ +$LK,"ISO1T_BOOT_RECORD",A="FL:::/Kernel/KernelA.HPP,2389"$ +$LK,"FileFind",A="FL:::/Kernel/Dsk/DskFind.CPP.Z,57",BI=338$ +$LK,"SYS_FIND_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.CPP.Z,38"$ +$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HPP,3626"$ +$LK,"FUF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,2528"$ +$LK,"MIN_U32",A="FL:::/Kernel/KernelA.HPP,32"$ +$LK,"MIN_U16",A="FL:::/Kernel/KernelA.HPP,28"$ +$LK,"CFileNameTo",A="FL:::/Kernel/Dsk/DskStrB.CPP.Z,1",BI=339$ +$LK,"IntNop",A="FL:::/Kernel/Ints.CPP.Z,139",BI=340$ +$LK,"_D3_MUL_EQU",A="FL:::/Kernel/KMathA.CPP.Z,273"$ +$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HPP,3205"$ +$LK,"DOF_DONT_SHOW",A="FL:::/Kernel/KernelA.HPP,1200"$ +$LK,"HTF_PUBLIC",A="FL:::/Kernel/KernelA.HPP,694"$ +$LK,"HTf_PUBLIC",A="FL:::/Kernel/KernelA.HPP,664"$ +$LK,"SYS_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.CPP.Z,86"$ +$LK,"OC_OP_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HPP,1670"$ +$LK,"ICF_NOT_ADDR",A="FL:::/Kernel/KernelA.HPP,1518"$ +$LK,"CCF_UNRESOLVED",A="FL:::/Kernel/KernelA.HPP,2057"$ +$LK,"MLF_FUN",A="FL:::/Kernel/KernelA.HPP,768"$ +$LK,"TaskMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,122",BI=341$ +$LK,"RBlks",A="FL:::/Kernel/Dsk/DskBlk.CPP.Z,31",BI=342$ +$LK,"DOCEF_ZERO_BASED",A="FL:::/Kernel/KernelA.HPP,1004"$ +$LK,"HTF_UNRESOLVED",A="FL:::/Kernel/KernelA.HPP,700"$ +$LK,"FAT32Cd",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,404",BI=343$ +$LK,"DOCEf_ZERO_BASED",A="FL:::/Kernel/KernelA.HPP,1079"$ +$LK,"HTf_UNRESOLVED",A="FL:::/Kernel/KernelA.HPP,670"$ +$LK,"CAP16BitInit",A="FL:::/Kernel/KernelA.HPP,519"$ +$LK,"ATAPIWriteBlks",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,535",BI=344$ +$LK,"cnts",A="FL:::/Kernel/KGlbls.CPP.Z,17"$ +$LK,"chars_bmp_displayable",A="FL:::/Kernel/StrA.CPP.Z,386"$ +$LK,"SYS_HEAP_INIT_FLAG",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"FUF_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,2527"$ +$LK,"ScanChar",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,114",BI=345$ +$LK,"RepInU32",A="FL:::/Kernel/KernelB.HPP,83"$ +$LK,"RepInU16",A="FL:::/Kernel/KernelB.HPP,81"$ +$LK,"TK_GREATER_EQUAL",A="FL:::/Kernel/KernelA.HPP,1997"$ +$LK,"loge_2",A="FL:::/Kernel/KernelA.HPP,54"$ +$LK,"MIN_U64",A="FL:::/Kernel/KernelA.HPP,36"$ +$LK,"chars_bmp_white_space",A="FL:::/Kernel/StrA.CPP.Z,356"$ +$LK,"FAT32FileFind",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,303",BI=346$ +$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HPP,3684"$ +$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,3705"$ +$LK,"FUf_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,2502"$ +$LK,"DOCf_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HPP,1289"$ +$LK,"DOCf_DONT_SHOW",A="FL:::/Kernel/KernelA.HPP,1283"$ +$LK,"DOCF_DONT_SHOW",A="FL:::/Kernel/KernelA.HPP,1248"$ +$LK,"DirTreeDel2",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,49",BI=347$ +$LK,"FUF_JUST_TXT",A="FL:::/Kernel/KernelA.HPP,2518"$ +$LK,"FUf_JUST_TXT",A="FL:::/Kernel/KernelA.HPP,2493"$ +$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HPP,906"$ +$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HPP,905"$ +$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HPP,3787"$ +$LK,"HashFind",A="FL:::/Kernel/KHashA.CPP.Z,300"$ +$LK,"D3Cross",A="FL:::/Kernel/KernelB.HPP,153"$ +$LK,"MAX_PTR_STARS",A="FL:::/Kernel/KernelA.HPP,762"$ +$LK,"DOCEF_ESC",A="FL:::/Kernel/KernelA.HPP,992"$ +$LK,"_FREE",A="FL:::/Kernel/MemB.CPP.Z,209"$ +$LK,"SrcLineNum",A="FL:::/Kernel/PSect.CPP.Z,147",BI=348$ +$LK,"ATAPIClose",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,521",BI=349$ +$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HPP,921"$ +$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HPP,3417"$ +$LK,"DOCEf_HARD_SKIP",A="FL:::/Kernel/KernelA.HPP,1086"$ +$LK,"DOCEF_HARD_SKIP",A="FL:::/Kernel/KernelA.HPP,1011"$ +$LK,"InDbg",A="FL:::/Kernel/KMisc.CPP.Z,270",BI=350$ +$LK,"Dbg",A="FL:::/Kernel/KDbg.CPP.Z,640",BI=351$ +$LK,"Abs",A="FL:::/Kernel/KernelB.HPP,95"$ +$LK,"CDATE_YEAR_DAYS",A="FL:::/Kernel/KernelA.HPP,181"$ +$LK,"RFLAGf_OVERFLOW",A="FL:::/Kernel/KernelA.HPP,313"$ +$LK,"SYS_POW",A="FL:::/Kernel/KMathA.CPP.Z,462"$ +$LK,"StrNICmp",A="FL:::/Kernel/StrA.CPP.Z,315"$ +$LK,"DOCf_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1287"$ +$LK,"DOCEf_RIGHT_X",A="FL:::/Kernel/KernelA.HPP,1058"$ +$LK,"DOCEF_RIGHT_X",A="FL:::/Kernel/KernelA.HPP,983"$ +$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HPP,3540"$ +$LK,"FileAttr",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,211",BI=352$ +$LK,"_MEMSET",A="FL:::/Kernel/KUtils.CPP.Z,3"$ +$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HPP,2844"$ +$LK,"TK_PLUS_PLUS",A="FL:::/Kernel/KernelA.HPP,1988"$ +$LK,"Mem2MegWriteThruAlloc",A="FL:::/Kernel/MemA.CPP.Z,426",BI=353$ +$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HPP,188"$ +$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HPP,3633"$ +$LK,"FUF_EXPAND",A="FL:::/Kernel/KernelA.HPP,2514"$ +$LK,"FUf_EXPAND",A="FL:::/Kernel/KernelA.HPP,2489"$ +$LK,"Del",A="FL:::/Kernel/Dsk/DskCopy.CPP.Z,82",BI=354$ +$LK,"IDTET_TASK",A="FL:::/Kernel/KernelA.HPP,278"$ +$LK,"TaskValidate",A="FL:::/Kernel/Task.CPP.Z,19",BI=355$ +$LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:::/Kernel/KernelA.HPP,476"$ +$LK,"fp_set_std_palette",A="FL:::/Kernel/KGlbls.CPP.Z,31"$ +$LK,"keydev",A="FL:::/Kernel/KGlbls.CPP.Z,22"$ +$LK,"HashBucketFind",A="FL:::/Kernel/KHashA.CPP.Z,305"$ +$LK,"IC_BODY_SIZE",A="FL:::/Kernel/KernelA.HPP,1541"$ +$LK,"TY_DISP",A="FL:::/Kernel/KernelA.HPP,1499"$ +$LK,"TY_RIP_DISP32",A="FL:::/Kernel/KernelA.HPP,1501"$ +$LK,"chars_bmp_alpha_numeric",A="FL:::/Kernel/StrA.CPP.Z,330"$ +$LK,"_LOG2",A="FL:::/Kernel/KMathA.CPP.Z,603"$ +$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HPP,2835"$ +$LK,"HTT_WORD",A="FL:::/Kernel/KernelA.HPP,681"$ +$LK,"HTt_WORD",A="FL:::/Kernel/KernelA.HPP,651"$ +$LK,"FUG_FILE_FIND",A="FL:::/Kernel/KernelA.HPP,2534"$ +$LK,"I_PAGE_FAULT",A="FL:::/Kernel/KernelA.HPP,288"$ +$LK,"DrvUnlock",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,14",BI=356$ +$LK,"CProgress",A="FL:::/Kernel/KernelA.HPP,3807"$ +$LK,"Arg",A="FL:::/Kernel/KernelB.HPP,121"$ +$LK,"CallExtNum",A="FL:::/Kernel/KernelB.HPP,54"$ +$LK,"DOCEF_DATA_IS_PTR",A="FL:::/Kernel/KernelA.HPP,1002"$ +$LK,"DirFile",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,267",BI=357$ +$LK,"DOCEf_DATA_IS_PTR",A="FL:::/Kernel/KernelA.HPP,1077"$ +$LK,"DOCEF_TAG",A="FL:::/Kernel/KernelA.HPP,954"$ +$LK,"Btc",A="FL:::/Kernel/KernelB.HPP,16"$ +$LK,"CCF_KEEP_NEW_LINES",A="FL:::/Kernel/KernelA.HPP,2045"$ +$LK,"Dir",A="FL:::/Kernel/Dsk/DskDirB.CPP.Z,91",BI=358$ +$LK,"Bsf",A="FL:::/Kernel/KernelB.HPP,10"$ +$LK,"ECF_HAS_PUSH_CMP",A="FL:::/Kernel/KernelA.HPP,1543"$ +$LK,"WIf_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1415"$ +$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HPP,896"$ +$LK,"SYS_SEMA_RECORD_MACRO",A="FL:::/Kernel/KernelA.HPP,587"$ +$LK,"IPVarsUpdate",A="FL:::/Kernel/KbdMouse/InputPointer.CPP.Z,9",BI=359$ +$LK,"MLF_LASTCLASS",A="FL:::/Kernel/KernelA.HPP,766"$ +$LK,"Fxrstor",A="FL:::/Kernel/KernelB.HPP,133"$ +$LK,"_R8",A="FL:::/Kernel/KernelA.HPP,3332"$ +$LK,"_R9",A="FL:::/Kernel/KernelA.HPP,3333"$ +$LK,"FileRead",A="FL:::/Kernel/Dsk/DskFile.CPP.Z,1",BI=360$ +$LK,"DOCf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1293"$ +$LK,"DOCF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1257"$ +$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,929"$ +$LK,"_FAR_CALL32",A="FL:::/Kernel/PCIBIOS.CPP.Z,69"$ +$LK,"KbdMouseCmdAck",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,67",BI=361$ +$LK,"CAOTHeapGlblRef",A="FL:::/Kernel/KernelA.HPP,1894"$ +$LK,"FAT32DirFill",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,246",BI=362$ +$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.CPP.Z,53",BI=363$ +$LK,"Carry",A="FL:::/Kernel/KernelB.HPP,246"$ +$LK,"Cos",A="FL:::/Kernel/KernelB.HPP,97"$ +$LK,"Clamp",A="FL:::/Kernel/KMathB.CPP.Z,1",BI=364$ +$LK,"BDF_FMT",A="FL:::/Kernel/KernelA.HPP,2551"$ +$LK,"TK_SHR_EQUAL",A="FL:::/Kernel/KernelA.HPP,2002"$ +$LK,"Name2DirCluster",A="FL:::/Kernel/Dsk/DskStrB.CPP.Z,10",BI=365$ +$LK,"Bsr",A="FL:::/Kernel/KernelB.HPP,12"$ +$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart.CPP.Z,209"$ +$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HPP,3519"$ +$LK,"CMasterBoot",A="FL:::/Kernel/KernelA.HPP,2225"$ +$LK,"Fix",A="FL:::/Kernel/EdLite.CPP.Z,337",BI=366$ +$LK,"Btr",A="FL:::/Kernel/KernelB.HPP,18"$ +$LK,"_LN",A="FL:::/Kernel/KMathA.CPP.Z,614"$ +$LK,"OPTf_WARN_UNUSED_VAR",A="FL:::/Kernel/KernelA.HPP,1463"$ +$LK,"DOCF_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1266"$ +$LK,"RFLAGf_CARRY",A="FL:::/Kernel/KernelA.HPP,305"$ +$LK,"FAT32FileRead",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,372",BI=367$ +$LK,"DirFilesFlatten",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,140",BI=368$ +$LK,"FileExtDot",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,1",BI=369$ +$LK,"IsDbg",A="FL:::/Kernel/KMisc.CPP.Z,275",BI=370$ +$LK,"Bts",A="FL:::/Kernel/KernelB.HPP,20"$ +$LK,"CMemBlk",A="FL:::/Kernel/KernelA.HPP,2762"$ +$LK,"DOCEF_LST",A="FL:::/Kernel/KernelA.HPP,1007"$ +$LK,"Man",A="FL:::/Kernel/PSect.CPP.Z,287",BI=371$ +$LK,"Mem512Alloc",A="FL:::/Kernel/MemA.CPP.Z,193",BI=372$ +$LK,"TASK_TITLE_LEN",A="FL:::/Kernel/KernelA.HPP,3150"$ +$LK,"CDATE_FREQ",A="FL:::/Kernel/KernelA.HPP,545"$ +$LK,"FilesFind",A="FL:::/Kernel/Dsk/DskFind.CPP.Z,30",BI=373$ +$LK,"_HASH_FIND",A="FL:::/Kernel/KHashA.CPP.Z,174"$ +$LK,"MSize",A="FL:::/Kernel/MemB.CPP.Z,369"$ +$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HPP,3373"$ +$LK,"Fmt",A="FL:::/Kernel/Dsk/DskFmt.CPP.Z,53",BI=374$ +$LK,"ExeCmdLine",A="FL:::/Kernel/Task.CPP.Z,269",BI=375$ +$LK,"reverse_bits_table",A="FL:::/Kernel/KGlbls.CPP.Z,11"$ +$LK,"Log10",A="FL:::/Kernel/KernelB.HPP,136"$ +$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.CPP.Z,304",BI=376$ +$LK,"InvlPg",A="FL:::/Kernel/KernelB.HPP,279"$ +$LK,"CallExtStr",A="FL:::/Kernel/KernelB.HPP,45"$ +$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HPP,3621"$ +$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HPP,3536"$ +$LK,"Ff_ARGPOP",A="FL:::/Kernel/KernelA.HPP,839"$ +$LK,"DrvMapBlkSet",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,92",BI=377$ +$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HPP,3443"$ +$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HPP,3006"$ +$LK,"CArrayDim",A="FL:::/Kernel/KernelA.HPP,773"$ +$LK,"DOCEf_NUM_FLAGS",A="FL:::/Kernel/KernelA.HPP,1090"$ +$LK,"Ff_INTERNAL",A="FL:::/Kernel/KernelA.HPP,841"$ +$LK,"Drv",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,201",BI=378$ +$LK,"Fclex",A="FL:::/Kernel/KernelB.HPP,128"$ +$LK,"MEM_PROTECTED_LOW_LIMIT",A="FL:::/Kernel/KernelA.HPP,3370"$ +$LK,"TASKf_PREEMPT",A="FL:::/Kernel/KernelA.HPP,3188"$ +$LK,"Blink",A="FL:::/Kernel/KMisc.CPP.Z,130",BI=379$ +$LK,"CDbgInfo",A="FL:::/Kernel/KernelA.HPP,710"$ +$LK,"IET_ZEROED_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,411"$ +$LK,"RFLAGf_V8086",A="FL:::/Kernel/KernelA.HPP,318"$ +$LK,"IDTET_TRAP",A="FL:::/Kernel/KernelA.HPP,280"$ +$LK,"SetRBP",A="FL:::/Kernel/KernelB.HPP,254"$ +$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HPP,2868"$ +$LK,"DOCf_BLINK",A="FL:::/Kernel/KernelA.HPP,1295"$ +$LK,"DOCF_BLINK",A="FL:::/Kernel/KernelA.HPP,1259"$ +$LK,"DOCEf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1026"$ +$LK,"DOCEF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1020"$ +$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.CPP.Z,55",BI=380$ +$LK,"RS_ATTR_HIDDEN",A="FL:::/Kernel/KernelA.HPP,2438"$ +$LK,"TY_MASK",A="FL:::/Kernel/KernelA.HPP,1505"$ +$LK,"TaskEndNow",A="FL:::/Kernel/Sched.CPP.Z,345"$ +$LK,"Max",A="FL:::/Kernel/KMathB.CPP.Z,18",BI=381$ +$LK,"DOC_RECALC_FIND_CURSOR",A="FL:::/Kernel/KernelA.HPP,1321"$ +$LK,"SYS_HASH_FIND",A="FL:::/Kernel/KHashA.CPP.Z,134"$ +$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HPP,2853"$ +$LK,"WIG_DBL_CLICK",A="FL:::/Kernel/KernelA.HPP,1404"$ +$LK,"SYS_SEMA_FIX",A="FL:::/Kernel/KernelA.HPP,606"$ +$LK,"ToF64",A="FL:::/Kernel/KernelB.HPP,119"$ +$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart.CPP.Z,212"$ +$LK,"SrvCmdRun",A="FL:::/Kernel/SrvCmd.CPP.Z,270",BI=382$ +$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HPP,3418"$ +$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HPP,2839"$ +$LK,"FF_WRITE",A="FL:::/Kernel/KernelA.HPP,2683"$ +$LK,"SetRAX",A="FL:::/Kernel/KernelB.HPP,253"$ +$LK,"Min",A="FL:::/Kernel/KMathB.CPP.Z,10",BI=383$ +$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HPP,234"$ +$LK,"Exp",A="FL:::/Kernel/KernelB.HPP,127"$ +$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HPP,3541"$ +$LK,"FAT32FilesFind",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,851",BI=384$ +$LK,"ISO1Cd",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,219",BI=385$ +$LK,"_HASH_ADD_AFTER",A="FL:::/Kernel/KHashA.CPP.Z,236"$ +$LK,"QueInit",A="FL:::/Kernel/KernelB.HPP,65"$ +$LK,"ARC_MAX_ENTRY",A="FL:::/Kernel/KernelA.HPP,3644"$ +$LK,"SrvTaskCont",A="FL:::/Kernel/Task.CPP.Z,380",BI=386$ +$LK,"RS_ATTR_READ_ONLY",A="FL:::/Kernel/KernelA.HPP,2437"$ +$LK,"ICF_USE_UNSIGNED",A="FL:::/Kernel/KernelA.HPP,1514"$ +$LK,"ATAGetDevId",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,163",BI=387$ +$LK,"WBlks",A="FL:::/Kernel/Dsk/DskBlk.CPP.Z,68",BI=388$ +$LK,"DOCT_ERROR",A="FL:::/Kernel/KernelA.HPP,931"$ +$LK,"CopySingle",A="FL:::/Kernel/Dsk/DskCopy.CPP.Z,23",BI=389$ +$LK,"EXT_WIN_TO_TOP",A="FL:::/Kernel/KernelA.HPP,569"$ +$LK,"MouseIPSet",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,216",BI=390$ +$LK,"ATAPIReadCapacity",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,253",BI=391$ +$LK,"MkDir",A="FL:::/Kernel/Dsk/DskDirB.CPP.Z,146",BI=392$ +$LK,"IsDir",A="FL:::/Kernel/Dsk/DskDirB.CPP.Z,76",BI=393$ +$LK,"SetMSR",A="FL:::/Kernel/KernelB.HPP,264"$ +$LK,"ToI64",A="FL:::/Kernel/KernelB.HPP,120"$ +$LK,"IET_MAIN",A="FL:::/Kernel/KernelA.HPP,412"$ +$LK,"ScanCode2KeyName",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,247",BI=394$ +$LK,"DOCf_INVERT",A="FL:::/Kernel/KernelA.HPP,1296"$ +$LK,"DOCF_INVERT",A="FL:::/Kernel/KernelA.HPP,1260"$ +$LK,"sys_heap_limit",A="FL:::/Kernel/KernelB.HPP,200"$ +$LK,"FileExtRem",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,10",BI=395$ +$LK,"Tan",A="FL:::/Kernel/KernelB.HPP,117"$ +$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart.CPP.Z,215"$ +$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HPP,3690"$ +$LK,"OPTf_USE_IMM64",A="FL:::/Kernel/KernelA.HPP,1472"$ +$LK,"Raw",A="FL:::/Kernel/KMisc.CPP.Z,248",BI=396$ +$LK,"Mem2MegUncachedAlloc",A="FL:::/Kernel/MemA.CPP.Z,402",BI=397$ +$LK,"Msg",A="FL:::/Kernel/SrvCmd.CPP.Z,260",BI=398$ +$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,1469"$ +$LK,"KbdInit",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,407",BI=399$ +$LK,"chars_bmp_zero_tab_ff_cr_nl_cursor_dollar",A="FL:::/Kernel/StrA.CPP.Z,368"$ +$LK,"ToBool",A="FL:::/Kernel/KernelB.HPP,118"$ +$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HPP,3199"$ +$LK,"PUT_HEX_U16",A="FL:::/Kernel/StrA.CPP.Z,37"$ +$LK,"PUT_HEX_U32",A="FL:::/Kernel/StrA.CPP.Z,30"$ +$LK,"ATAPIStartStop",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,144",BI=400$ +$LK,"_SIGN",A="FL:::/Kernel/KMathA.CPP.Z,347"$ +$LK,"DVT_REDSEA",A="FL:::/Kernel/KernelA.HPP,2592"$ +$LK,"REGT_R8",A="FL:::/Kernel/KernelA.HPP,730"$ +$LK,"log10_2",A="FL:::/Kernel/KernelA.HPP,53"$ +$LK,"PrintErr",A="FL:::/Kernel/StrPrint.CPP.Z,914",BI=401$ +$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HPP,2850"$ +$LK,"BDF_READ_CACHE",A="FL:::/Kernel/KernelA.HPP,2550"$ +$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HPP,3451"$ +$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HPP,3342"$ +$LK,"BDf_READ_CACHE",A="FL:::/Kernel/KernelA.HPP,2560"$ +$LK,"TK_INS_BINARY",A="FL:::/Kernel/KernelA.HPP,2020"$ +$LK,"Snd",A="FL:::/Kernel/KMisc.CPP.Z,163",BI=402$ +$LK,"SPF_PAD_ZERO",A="FL:::/Kernel/StrPrint.CPP.Z,1"$ +$LK,"GetChar",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,189",BI=403$ +$LK,"Sin",A="FL:::/Kernel/KernelB.HPP,104"$ +$LK,"TK_OR_OR",A="FL:::/Kernel/KernelA.HPP,1999"$ +$LK,"SYS_PCIBIOS_SERVICE_CALL",A="FL:::/Kernel/PCIBIOS.CPP.Z,46"$ +$LK,"Now",A="FL:::/Kernel/Date.CPP.Z,191",BI=404$ +$LK,"Fldcw",A="FL:::/Kernel/KernelB.HPP,129"$ +$LK,"_FXSAVE",A="FL:::/Kernel/KMathA.CPP.Z,650"$ +$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HPP,3182"$ +$LK,"WIf_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HPP,1425"$ +$LK,"IA32_EFER",A="FL:::/Kernel/KernelA.HPP,515"$ +$LK,"SetRSP",A="FL:::/Kernel/KernelB.HPP,256"$ +$LK,"Pop",A="FL:::/Kernel/KernelB.HPP,251"$ +$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HPP,229"$ +$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HPP,3038"$ +$LK,"OC_NOP2",A="FL:::/Kernel/KernelA.HPP,1677"$ +$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HPP,899"$ +$LK,"PUT_HEX_U64",A="FL:::/Kernel/StrA.CPP.Z,23"$ +$LK,"SYS_KERNEL",A="FL:::/Kernel/KStart.CPP.Z,18"$ +$LK,"RFLAGf_PARITY",A="FL:::/Kernel/KernelA.HPP,306"$ +$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart.CPP.Z,218"$ +$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HPP,3694"$ +$LK,"MBR_PT_REDSEA",A="FL:::/Kernel/KernelA.HPP,2611"$ +$LK,"MBR_PT_NTFS",A="FL:::/Kernel/KernelA.HPP,2610"$ +$LK,"MouseHandler",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,179",BI=405$ +$LK,"SCF_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3448"$ +$LK,"SCf_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3434"$ +$LK,"MSG_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3129"$ +$LK,"LAPIC_TASK_PRIORITY",A="FL:::/Kernel/KernelA.HPP,475"$ +$LK,"REGT_MM",A="FL:::/Kernel/KernelA.HPP,736"$ +$LK,"DOCEf_POPUP",A="FL:::/Kernel/KernelA.HPP,1084"$ +$LK,"DOCEF_POPUP",A="FL:::/Kernel/KernelA.HPP,1009"$ +$LK,"SYS_SEMA_VGA",A="FL:::/Kernel/KernelA.HPP,600"$ +$LK,"ODEF_PAUSED",A="FL:::/Kernel/KernelA.HPP,239"$ +$LK,"FATNameXSum",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,162",BI=406$ +$LK,"SPF_DOLLAR",A="FL:::/Kernel/StrPrint.CPP.Z,5"$ +$LK,"Pow",A="FL:::/Kernel/KernelB.HPP,138"$ +$LK,"sys_boot_patch_table_base",A="FL:::/Kernel/KernelB.HPP,38"$ +$LK,"WIF_SELF_BORDER",A="FL:::/Kernel/KernelA.HPP,1389"$ +$LK,"DOCF_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HPP,1268"$ +$LK,"MStrUtil",A="FL:::/Kernel/StrB.CPP.Z,58",BI=407$ +$LK,"_D3_CROSS",A="FL:::/Kernel/KMathA.CPP.Z,82"$ +$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HPP,3637"$ +$LK,"DOCf_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HPP,1304"$ +$LK,"SYS_HEAP_LIMIT",A="FL:::/Kernel/KStart.CPP.Z,185"$ +$LK,"WIf_SELF_BORDER",A="FL:::/Kernel/KernelA.HPP,1414"$ +$LK,"text",A="FL:::/Kernel/KGlbls.CPP.Z,24"$ +$LK,"ATA_READ_NATIVE_MAX_EXT",A="FL:::/Kernel/KernelA.HPP,2173"$ +$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.CPP.Z,68",BI=408$ +$LK,"MHeapCtrl",A="FL:::/Kernel/MemB.CPP.Z,371"$ +$LK,"SYS_SEMA_SND",A="FL:::/Kernel/KernelA.HPP,591"$ +$LK,"CCF_RAX",A="FL:::/Kernel/KernelA.HPP,2066"$ +$LK,"BSPStartMP",A="FL:::/Kernel/MultiProc.CPP.Z,301",BI=409$ +$LK,"DskCacheInvalidate",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,157",BI=410$ +$LK,"DOCG_BL_IV_UL",A="FL:::/Kernel/KernelA.HPP,940"$ +$LK,"HashSingleTableFind",A="FL:::/Kernel/KHashA.CPP.Z,302"$ +$LK,"sys_data_bp",A="FL:::/Kernel/KernelB.HPP,196"$ +$LK,"sys_heap_base",A="FL:::/Kernel/KernelB.HPP,199"$ +$LK,"_CLAMP_I64",A="FL:::/Kernel/KUtils.CPP.Z,121"$ +$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HPP,3628"$ +$LK,"BDf_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HPP,2558"$ +$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.CPP.Z,477",BI=411$ +$LK,"Drv2Let",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,123",BI=412$ +$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HPP,2838"$ +$LK,"MEM_E820_ENTRY_SIZE",A="FL:::/Kernel/KernelA.HPP,355"$ +$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.CPP.Z,102",BI=413$ +$LK,"Sqr",A="FL:::/Kernel/KernelB.HPP,105"$ +$LK,"REG_RDI",A="FL:::/Kernel/KernelA.HPP,1696"$ +$LK,"REG_ALLOC",A="FL:::/Kernel/KernelA.HPP,1700"$ +$LK,"DOCf_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1302"$ +$LK,"SrvCmdsHandler",A="FL:::/Kernel/SrvCmd.CPP.Z,355",BI=414$ +$LK,"progress1_max",A="FL:::/Kernel/KernelB.HPP,215"$ +$LK,"CCF_ARRAY",A="FL:::/Kernel/KernelA.HPP,2065"$ +$LK,"REG_RBP",A="FL:::/Kernel/KernelA.HPP,1694"$ +$LK,"DOCEF_FILTER_SKIP",A="FL:::/Kernel/KernelA.HPP,1012"$ +$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.CPP.Z,219",BI=415$ +$LK,"MSG_MOVE",A="FL:::/Kernel/KernelA.HPP,3139"$ +$LK,"DOCT_INS_BINARY",A="FL:::/Kernel/KernelA.HPP,926"$ +$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart.CPP.Z,208"$ +$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HPP,3692"$ +$LK,"CCF_PMT",A="FL:::/Kernel/KernelA.HPP,2039"$ +$LK,"DOCEf_FILTER_SKIP",A="FL:::/Kernel/KernelA.HPP,1087"$ +$LK,"DskCacheHash",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,40",BI=416$ +$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HPP,3445"$ +$LK,"fp_doc_put",A="FL:::/Kernel/KGlbls.CPP.Z,30"$ +$LK,"DskCacheFind",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,64",BI=417$ +$LK,"IsRaw",A="FL:::/Kernel/KMisc.CPP.Z,255",BI=418$ +$LK,"TK_DBL_COLON",A="FL:::/Kernel/KernelA.HPP,1991"$ +$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,277",BI=419$ +$LK,"CATARep",A="FL:::/Kernel/KernelA.HPP,2162"$ +$LK,"REG_RAX",A="FL:::/Kernel/KernelA.HPP,1689"$ +$LK,"ATAReadBlks",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,350",BI=420$ +$LK,"D3AddEqu",A="FL:::/Kernel/KernelB.HPP,149"$ +$LK,"ToUpper",A="FL:::/Kernel/KernelB.HPP,57"$ +$LK,"REGG_C_LOCAL_NON_PTR_VARS",A="FL:::/Kernel/KernelA.HPP,1707"$ +$LK,"REG_RBX",A="FL:::/Kernel/KernelA.HPP,1692"$ +$LK,"SCR_DONE",A="FL:::/Kernel/SrvCmd.CPP.Z,266"$ +$LK,"Fxsave",A="FL:::/Kernel/KernelB.HPP,134"$ +$LK,"Reboot",A="FL:::/Kernel/KEnd.CPP.Z,115",BI=421$ +$LK,"TK_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,2019"$ +$LK,"REG_RCX",A="FL:::/Kernel/KernelA.HPP,1690"$ +$LK,"Ff_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,843"$ +$LK,"CHashClass",A="FL:::/Kernel/KernelA.HPP,824"$ +$LK,"ZERO_BUF_SIZE",A="FL:::/Kernel/Dsk/DskBlk.CPP.Z,1"$ +$LK,"LoadKernel",A="FL:::/Kernel/KLoad.CPP.Z,240",BI=422$ +$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3440"$ +$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3426"$ +$LK,"MSG_IP_R_D_DOWN",A="FL:::/Kernel/KernelA.HPP,3135"$ +$LK,"REG_RDX",A="FL:::/Kernel/KernelA.HPP,1691"$ +$LK,"ATAPIReadBlks",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,413",BI=423$ +$LK,"REG_RIP",A="FL:::/Kernel/KernelA.HPP,1697"$ +$LK,"DOCEF_FROM_START",A="FL:::/Kernel/KernelA.HPP,994"$ +$LK,"SEMA_STRUCT_SIZE",A="FL:::/Kernel/KernelA.HPP,577"$ +$LK,"SCR_CONT",A="FL:::/Kernel/SrvCmd.CPP.Z,267"$ +$LK,"progress2_max",A="FL:::/Kernel/KernelB.HPP,219"$ +$LK,"DOCEf_FROM_START",A="FL:::/Kernel/KernelA.HPP,1069"$ +$LK,"SYS_SEMA_TMBEAT",A="FL:::/Kernel/KernelA.HPP,605"$ +$LK,"RLF_WINMGR",A="FL:::/Kernel/KernelA.HPP,465"$ +$LK,"RLf_WINMGR",A="FL:::/Kernel/KernelA.HPP,447"$ +$LK,"CtrlAltLetCBSet",A="FL:::/Kernel/KeyDev.CPP.Z,184",BI=424$ +$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HPP,3698"$ +$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HPP,3647"$ +$LK,"PUSH_REGS",A="FL:::/Kernel/KernelA.HPP,1682"$ +$LK,"MAX_I8",A="FL:::/Kernel/KernelA.HPP,23"$ +$LK,"KbdMouseHandler",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,260",BI=425$ +$LK,"Color2Str",A="FL:::/Kernel/KDefine.CPP.Z,126",BI=426$ +$LK,"EDF_COLLAPSE",A="FL:::/Kernel/KernelA.HPP,1224"$ +$LK,"LAPIC_DFR",A="FL:::/Kernel/KernelA.HPP,480"$ +$LK,"CDATE_BASE_DAY_OF_WEEK",A="FL:::/Kernel/KernelA.HPP,183"$ +$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.CPP.Z,572",BI=427$ +$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HPP,3124"$ +$LK,"TY_NULL",A="FL:::/Kernel/KernelA.HPP,1496"$ +$LK,"EDf_COLLAPSE",A="FL:::/Kernel/KernelA.HPP,1230"$ +$LK,"MPrintq",A="FL:::/Kernel/StrPrint.CPP.Z,127",BI=428$ +$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart.CPP.Z,222"$ +$LK,"dbg",A="FL:::/Kernel/KGlbls.CPP.Z,25"$ +$LK,"CPSectCache",A="FL:::/Kernel/KernelA.HPP,3749"$ +$LK,"QSort",A="FL:::/Kernel/QSort.CPP.Z,85",BI=429$ +$LK,"OutU32",A="FL:::/Kernel/KernelB.HPP,78"$ +$LK,"OutU16",A="FL:::/Kernel/KernelB.HPP,77"$ +$LK,"TERM_ATTR_BORDER",A="FL:::/Kernel/KernelA.HPP,1113"$ +$LK,"LAPIC_ICR_HIGH",A="FL:::/Kernel/KernelA.HPP,490"$ +$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HPP,3708"$ +$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HPP,3702"$ +$LK,"HashRemDel",A="FL:::/Kernel/KHashA.CPP.Z,309"$ +$LK,"REG_RSI",A="FL:::/Kernel/KernelA.HPP,1695"$ +$LK,"HashAdd",A="FL:::/Kernel/KHashA.CPP.Z,307"$ +$LK,"Preempt",A="FL:::/Kernel/KernelB.HPP,283"$ +$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HPP,236"$ +$LK,"INTERRUPT_STK",A="FL:::/Kernel/KernelA.HPP,2788"$ +$LK,"MLF_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,769"$ +$LK,"IsSuspended",A="FL:::/Kernel/Task.CPP.Z,63",BI=430$ +$LK,"CAlloc",A="FL:::/Kernel/MemB.CPP.Z,380",BI=431$ +$LK,"BDF_INITIALIZED",A="FL:::/Kernel/KernelA.HPP,2546"$ +$LK,"ATAR0_SELECT",A="FL:::/Kernel/KernelA.HPP,2194"$ +$LK,"CAsmUnresolvedRef",A="FL:::/Kernel/KernelA.HPP,1767"$ +$LK,"BDf_INITIALIZED",A="FL:::/Kernel/KernelA.HPP,2556"$ +$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HPP,925"$ +$LK,"WClustersBlks",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,92",BI=432$ +$LK,"RClustersBlks",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,46",BI=433$ +$LK,"sys_neg_pows_lets",A="FL:::/Kernel/StrPrint.CPP.Z,211"$ +$LK,"progress3_max",A="FL:::/Kernel/KernelB.HPP,223"$ +$LK,"SqrI64",A="FL:::/Kernel/KernelB.HPP,106"$ +$LK,"BDF_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,2552"$ +$LK,"OPTF_ECHO",A="FL:::/Kernel/KernelA.HPP,1474"$ +$LK,"OPTf_ECHO",A="FL:::/Kernel/KernelA.HPP,1460"$ +$LK,"LAPIC_EOI",A="FL:::/Kernel/KernelA.HPP,478"$ +$LK,"sys_pos_pows_lets",A="FL:::/Kernel/StrPrint.CPP.Z,210"$ +$LK,"QueSize",A="FL:::/Kernel/KDataTypes.CPP.Z,76",BI=434$ +$LK,"C:/Doc/Que.TXT.Z",A="FL:::/Kernel/KernelB.HPP,64"$ +$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HPP,3648"$ +$LK,"REG_RSP",A="FL:::/Kernel/KernelA.HPP,1693"$ +$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.CPP.Z,139",BI=435$ +$LK,"CTRLF_CAPTURE_LEFT_IP",A="FL:::/Kernel/KernelA.HPP,2993"$ +$LK,"LFSF_DEFINE",A="FL:::/Kernel/KernelA.HPP,1946"$ +$LK,"BLK_SIZE_BITS",A="FL:::/Kernel/KernelA.HPP,2207"$ +$LK,"AOT_BIN_BLK_BITS",A="FL:::/Kernel/KernelA.HPP,1709"$ +$LK,"DOC_RECALC",A="FL:::/Kernel/KernelA.HPP,1320"$ +$LK,"HTT_FUN",A="FL:::/Kernel/KernelA.HPP,680"$ +$LK,"SrvCtrlInit",A="FL:::/Kernel/SrvCmd.CPP.Z,18",BI=436$ +$LK,"DOCEG1_HAS_ARG",A="FL:::/Kernel/KernelA.HPP,970"$ +$LK,"DOCEF_DEFINE",A="FL:::/Kernel/KernelA.HPP,956"$ +$LK,"SPF_LEFT_JUSTIFY",A="FL:::/Kernel/StrPrint.CPP.Z,2"$ +$LK,"DOCEf_DEFINE",A="FL:::/Kernel/KernelA.HPP,1036"$ +$LK,"HeapCtrlInit",A="FL:::/Kernel/MemC.CPP.Z,29",BI=437$ +$LK,"progress1",A="FL:::/Kernel/KernelB.HPP,212"$ +$LK,"Floor",A="FL:::/Kernel/KernelB.HPP,130"$ +$LK,"CIPStateGlbls",A="FL:::/Kernel/KernelA.HPP,2944"$ +$LK,"SYSf_CTRL_ALT_C",A="FL:::/Kernel/KernelA.HPP,610"$ +$LK,"progress2",A="FL:::/Kernel/KernelB.HPP,216"$ +$LK,"_CLAMP_U64",A="FL:::/Kernel/KUtils.CPP.Z,133"$ +$LK,"CDImageWriteTask",A="FL:::/Kernel/Dsk/DskCDDVD.CPP.Z,49",BI=438$ +$LK,"progress3",A="FL:::/Kernel/KernelB.HPP,220"$ +$LK,"MPN_VECT",A="FL:::/Kernel/KernelA.HPP,499"$ +$LK,"MAX_U8",A="FL:::/Kernel/KernelA.HPP,25"$ +$LK,"RAWDR_COL",A="FL:::/Kernel/KDbg.CPP.Z,289"$ +$LK,"progress4",A="FL:::/Kernel/KernelB.HPP,224"$ +$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.CPP.Z,61",BI=439$ +$LK,"dev",A="FL:::/Kernel/KGlbls.CPP.Z,23"$ +$LK,"MSG_IP_L_D_UP",A="FL:::/Kernel/KernelA.HPP,3132"$ +$LK,"HTT_REG",A="FL:::/Kernel/KernelA.HPP,686"$ +$LK,"StrFirstRem",A="FL:::/Kernel/StrA.CPP.Z,582",BI=440$ +$LK,"SYS_FAULT_ERR_CODE_BITMAP",A="FL:::/Kernel/Ints.CPP.Z,90"$ +$LK,"SYS_VAR_INIT_VAL",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,3523"$ +$LK,"ans",A="FL:::/Kernel/KernelA.HPP,3320"$ +$LK,"LAPIC_LDR",A="FL:::/Kernel/KernelA.HPP,481"$ +$LK,"BptFind",A="FL:::/Kernel/KDbg.CPP.Z,351",BI=441$ +$LK,"kbd",A="FL:::/Kernel/KGlbls.CPP.Z,21"$ +$LK,"progress4_max",A="FL:::/Kernel/KernelB.HPP,227"$ +$LK,"MouseUpdatePost",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,147",BI=442$ +$LK,"HashDel",A="FL:::/Kernel/KHashB.CPP.Z,59",BI=443$ +$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HPP,2902"$ +$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.CPP.Z,11",BI=444$ +$LK,"IP_NULL",A="FL:::/Kernel/KernelA.HPP,2942"$ +$LK,"SYS_SEMA_DEV_MEM",A="FL:::/Kernel/KernelA.HPP,599"$ +$LK,"ICF_A1_WAS_STK",A="FL:::/Kernel/KernelA.HPP,1524"$ +$LK,"Let2Drv",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,131",BI=445$ +$LK,"AP_16BIT_INIT_END",A="FL:::/Kernel/MultiProc.CPP.Z,27"$ +$LK,"fat_long_name_map",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,188"$ +$LK,"DskCacheInit",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,1",BI=446$ +$LK,"CCF_NO_ABSS",A="FL:::/Kernel/KernelA.HPP,2072"$ +$LK,"DOC_COLOR_MACRO",A="FL:::/Kernel/KernelA.HPP,1118"$ +$LK,"LAPIC_LOG_DST",A="FL:::/Kernel/KernelA.HPP,479"$ +$LK,"RLF_ADAM_SERVER",A="FL:::/Kernel/KernelA.HPP,468"$ +$LK,"RClusters",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,87",BI=447$ +$LK,"ISO1CDirFill",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,116",BI=448$ +$LK,"RLf_ADAM_SERVER",A="FL:::/Kernel/KernelA.HPP,450"$ +$LK,"SCR_EXIT",A="FL:::/Kernel/SrvCmd.CPP.Z,268"$ +$LK,"QueDel",A="FL:::/Kernel/KDataTypes.CPP.Z,41",BI=449$ +$LK,"ICF_DONT_RESTORE",A="FL:::/Kernel/KernelA.HPP,1538"$ +$LK,"RedSeaDirNew",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,354",BI=450$ +$LK,"TK_ADD_EQUAL",A="FL:::/Kernel/KernelA.HPP,2008"$ +$LK,"TK_XOR_EQUAL",A="FL:::/Kernel/KernelA.HPP,2007"$ +$LK,"IET_REL64_EXPORT",A="FL:::/Kernel/KernelA.HPP,405"$ +$LK,"IET_REL32_EXPORT",A="FL:::/Kernel/KernelA.HPP,403"$ +$LK,"CExcept",A="FL:::/Kernel/KernelA.HPP,3064"$ +$LK,"dsk",A="FL:::/Kernel/KGlbls.CPP.Z,26"$ +$LK,"QueInsRev",A="FL:::/Kernel/KernelB.HPP,69"$ +$LK,"SYSf_CTRL_ALT_X",A="FL:::/Kernel/KernelA.HPP,611"$ +$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart.CPP.Z,202"$ +$LK,"FUF_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HPP,2524"$ +$LK,"DOCT_HTML_CODE",A="FL:::/Kernel/KernelA.HPP,930"$ +$LK,"LAPIC_IRR",A="FL:::/Kernel/KernelA.HPP,488"$ +$LK,"chars_bmp_getkey",A="FL:::/Kernel/StrA.CPP.Z,371"$ +$LK,"sys_run_level",A="FL:::/Kernel/KernelB.HPP,40"$ +$LK,"JIFFY_FREQ",A="FL:::/Kernel/KernelA.HPP,544"$ +$LK,"COrder2D3",A="FL:::/Kernel/KernelA.HPP,199"$ +$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.CPP.Z,266",BI=451$ +$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,3545"$ +$LK,"LAPIC_ISR",A="FL:::/Kernel/KernelA.HPP,486"$ +$LK,"c32_eflags",A="FL:::/Kernel/PCIBIOS.CPP.Z,158"$ +$LK,"Pow10",A="FL:::/Kernel/KernelB.HPP,139"$ +$LK,"ATA_WRITE_MULTI_EXT",A="FL:::/Kernel/KernelA.HPP,2179"$ +$LK,"CCF_PREDEC",A="FL:::/Kernel/KernelA.HPP,2064"$ +$LK,"inf",A="FL:::/Kernel/KernelA.HPP,46"$ +$LK,"MIN_I8",A="FL:::/Kernel/KernelA.HPP,22"$ +$LK,"XTalk",A="FL:::/Kernel/SrvCmd.CPP.Z,459",BI=452$ +$LK,"DOCEf_LEFT_AUTO",A="FL:::/Kernel/KernelA.HPP,1052"$ +$LK,"DOCEF_LEFT_AUTO",A="FL:::/Kernel/KernelA.HPP,977"$ +$LK,"eps",A="FL:::/Kernel/KernelA.HPP,56"$ +$LK,"LstSub",A="FL:::/Kernel/StrA.CPP.Z,402",BI=453$ +$LK,"RLF_PATCHED",A="FL:::/Kernel/KernelA.HPP,455"$ +$LK,"FRBlks",A="FL:::/Kernel/Dsk/DskCFile.CPP.Z,129",BI=454$ +$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/Task.CPP.Z,253",BI=455$ +$LK,"_HASH_ADD",A="FL:::/Kernel/KHashA.CPP.Z,215"$ +$LK,"__TIME__",A="FL:::/Kernel/KernelA.HPP,1936"$ +$LK,"RLf_PATCHED",A="FL:::/Kernel/KernelA.HPP,437"$ +$LK,"FUf_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HPP,2499"$ +$LK,"CD_FILE_OFFSET",A="FL:::/Kernel/KernelA.HPP,2210"$ +$LK,"CCf_OPT_TRACE_PRESENT",A="FL:::/Kernel/KernelA.HPP,2049"$ +$LK,"ATTRf_BLINK",A="FL:::/Kernel/KernelA.HPP,884"$ +$LK,"ATTRF_BLINK",A="FL:::/Kernel/KernelA.HPP,879"$ +$LK,"XchgU8",A="FL:::/Kernel/KernelB.HPP,269"$ +$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HPP,3181"$ +$LK,"CKernel",A="FL:::/Kernel/KernelA.HPP,415"$ +$LK,"IET_IMM_I64",A="FL:::/Kernel/KernelA.HPP,401"$ +$LK,"log2_10",A="FL:::/Kernel/KernelA.HPP,51"$ +$LK,"TaskTotalTime",A="FL:::/Kernel/KMisc.CPP.Z,80",BI=456$ +$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HPP,2867"$ +$LK,"FAT32AllocClusters",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,461",BI=457$ +$LK,"DOCEf_TOP_Y",A="FL:::/Kernel/KernelA.HPP,1059"$ +$LK,"DOCEF_TOP_Y",A="FL:::/Kernel/KernelA.HPP,984"$ +$LK,"StrPrintPSect",A="FL:::/Kernel/PSect.CPP.Z,105",BI=458$ +$LK,"_CALLEXTNUM",A="FL:::/Kernel/KUtils.CPP.Z,362"$ +$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3452"$ +$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3438"$ +$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HPP,3125"$ +$LK,"IDTET_IRQ",A="FL:::/Kernel/KernelA.HPP,279"$ +$LK,"CCF_LOCAL",A="FL:::/Kernel/KernelA.HPP,2058"$ +$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.CPP.Z,65",BI=459$ +$LK,"chars_bmp_alpha",A="FL:::/Kernel/StrA.CPP.Z,325"$ +$LK,"SwapI64",A="FL:::/Kernel/KernelB.HPP,110"$ +$LK,"SqrU64",A="FL:::/Kernel/KernelB.HPP,107"$ +$LK,"OPTf_NO_BUILTIN_CONST",A="FL:::/Kernel/KernelA.HPP,1471"$ +$LK,"HTG_SRC_SYM",A="FL:::/Kernel/KernelA.HPP,704"$ +$LK,"LAPIC_LVT_THERMAL",A="FL:::/Kernel/KernelA.HPP,493"$ +$LK,"RFLAGf_IOPL0",A="FL:::/Kernel/KernelA.HPP,314"$ +$LK,"IntsInit",A="FL:::/Kernel/Ints.CPP.Z,125",BI=460$ +$LK,"_XCHG_U8",A="FL:::/Kernel/KUtils.CPP.Z,208"$ +$LK,"DOCEF_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HPP,999"$ +$LK,"RFLAGf_IOPL1",A="FL:::/Kernel/KernelA.HPP,315"$ +$LK,"FAT32FilesDel",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,731",BI=461$ +$LK,"SETH_STK",A="FL:::/Kernel/KernelA.HPP,2787"$ +$LK,"HEAP_HASH_SIZE",A="FL:::/Kernel/KernelA.HPP,2783"$ +$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HPP,922"$ +$LK,"Bcd2Bin",A="FL:::/Kernel/Date.CPP.Z,123",BI=462$ +$LK,"CAllocAligned",A="FL:::/Kernel/MemB.CPP.Z,419",BI=463$ +$LK,"MAllocAligned",A="FL:::/Kernel/MemB.CPP.Z,408",BI=464$ +$LK,"ext",A="FL:::/Kernel/KernelB.HPP,52"$ +$LK,"RawDm",A="FL:::/Kernel/KDbg.CPP.Z,250",BI=465$ +$LK,"TASK_HASH_SIZE",A="FL:::/Kernel/KernelA.HPP,2791"$ +$LK,"ICf_DONT_POP_FLOAT0",A="FL:::/Kernel/KernelA.HPP,1531"$ +$LK,"DskCacheAdd",A="FL:::/Kernel/Dsk/DskCache.CPP.Z,76",BI=466$ +$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.CPP.Z,158",BI=467$ +$LK,"_MSIZE2",A="FL:::/Kernel/MemB.CPP.Z,338"$ +$LK,"TERM_ATTR_TEXT",A="FL:::/Kernel/KernelA.HPP,1112"$ +$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HPP,2871"$ +$LK,"RawDr",A="FL:::/Kernel/KDbg.CPP.Z,291",BI=468$ +$LK,"StrICmp",A="FL:::/Kernel/StrA.CPP.Z,311"$ +$LK,"ATAR0_DATA",A="FL:::/Kernel/KernelA.HPP,2188"$ +$LK,"MIN_U8",A="FL:::/Kernel/KernelA.HPP,24"$ +$LK,"HTG_FLAGS_MASK",A="FL:::/Kernel/KernelA.HPP,702"$ +$LK,"DirFilesSort",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,92",BI=469$ +$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.CPP.Z,185",BI=470$ +$LK,"ACAlloc",A="FL:::/Kernel/MemB.CPP.Z,387",BI=471$ +$LK,"SYS_RUN_LEVEL",A="FL:::/Kernel/KStart.CPP.Z,26"$ +$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HPP,3446"$ +$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HPP,3432"$ +$LK,"CCF_DONT_MAKE_RESULT",A="FL:::/Kernel/KernelA.HPP,2076"$ +$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,2562"$ +$LK,"OC_BPT",A="FL:::/Kernel/KernelA.HPP,1674"$ +$LK,"DOCF_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HPP,1245"$ +$LK,"IOREDTAB",A="FL:::/Kernel/KernelA.HPP,509"$ +$LK,"Fstcw",A="FL:::/Kernel/KernelB.HPP,131"$ +$LK,"MSG_IP_L_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3142"$ +$LK,"OPTf_COMPILE_TRACE",A="FL:::/Kernel/KernelA.HPP,1462"$ +$LK,"LAPIC_TMR",A="FL:::/Kernel/KernelA.HPP,487"$ +$LK,"C32_EFLAGS",A="FL:::/Kernel/PCIBIOS.CPP.Z,64"$ +$LK,"Mem2MegAlloc",A="FL:::/Kernel/MemA.CPP.Z,297",BI=472$ +$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HPP,207"$ +$LK,"_D3_DIV_EQU",A="FL:::/Kernel/KMathA.CPP.Z,289"$ +$LK,"_D3_SUB_EQU",A="FL:::/Kernel/KMathA.CPP.Z,256"$ +$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HPP,3187"$ +$LK,"FUF_DIFF",A="FL:::/Kernel/KernelA.HPP,2507"$ +$LK,"FUf_DIFF",A="FL:::/Kernel/KernelA.HPP,2482"$ +$LK,"DOCf_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HPP,1280"$ +$LK,"CHashImport",A="FL:::/Kernel/KernelA.HPP,755"$ +$LK,"APSethInit",A="FL:::/Kernel/MultiProc.CPP.Z,292",BI=473$ +$LK,"CD_BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,2209"$ +$LK,"CMT_LABEL",A="FL:::/Kernel/KernelA.HPP,1601"$ +$LK,"C32_ADD",A="FL:::/Kernel/PCIBIOS.CPP.Z,122"$ +$LK,"MBS_USED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2760"$ +$LK,"HeapCtrlDel",A="FL:::/Kernel/MemC.CPP.Z,55",BI=474$ +$LK,"_CALLEXTSTR",A="FL:::/Kernel/KUtils.CPP.Z,393"$ +$LK,"FF_USE_OLD_DATETIME",A="FL:::/Kernel/KernelA.HPP,2688"$ +$LK,"CCf_PAREN",A="FL:::/Kernel/KernelA.HPP,2074"$ +$LK,"CCF_PAREN",A="FL:::/Kernel/KernelA.HPP,2073"$ +$LK,"CSysLimitBase",A="FL:::/Kernel/KernelA.HPP,347"$ +$LK,"QueIns",A="FL:::/Kernel/KernelB.HPP,67"$ +$LK,"CGrSym",A="FL:::/Kernel/KernelA.HPP,3550"$ +$LK,"ATAR0_FEAT",A="FL:::/Kernel/KernelA.HPP,2189"$ +$LK,"RLF_HOME",A="FL:::/Kernel/KernelA.HPP,467"$ +$LK,"RLf_HOME",A="FL:::/Kernel/KernelA.HPP,449"$ +$LK,"snd",A="FL:::/Kernel/KGlbls.CPP.Z,16"$ +$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HPP,3460"$ +$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HPP,2869"$ +$LK,"FUF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,2529"$ +$LK,"CCF_PREINC",A="FL:::/Kernel/KernelA.HPP,2063"$ +$LK,"HTT_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,675"$ +$LK,"HTT_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,674"$ +$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HPP,2986"$ +$LK,"CCF_KEEP_AT_SIGN",A="FL:::/Kernel/KernelA.HPP,2048"$ +$LK,"RS_ATTR_DIR",A="FL:::/Kernel/KernelA.HPP,2441"$ +$LK,"CCF_POSTDEC",A="FL:::/Kernel/KernelA.HPP,2062"$ +$LK,"KbdSetLEDs",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,52",BI=475$ +$LK,"DirContextDel",A="FL:::/Kernel/Dsk/DskDirContext.CPP.Z,1",BI=476$ +$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.CPP.Z,177",BI=477$ +$LK,"TK_IFNDEF",A="FL:::/Kernel/KernelA.HPP,2012"$ +$LK,"CMT_FLOAT_CONSTS",A="FL:::/Kernel/KernelA.HPP,1606"$ +$LK,"CBinFile",A="FL:::/Kernel/KernelA.HPP,370"$ +$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.CPP.Z,264",BI=478$ +$LK,"LAPIC_SVR",A="FL:::/Kernel/KernelA.HPP,484"$ +$LK,"CMouseStateGlbls",A="FL:::/Kernel/KernelA.HPP,2922"$ +$LK,"ISO1_ATTR_DIR",A="FL:::/Kernel/KernelA.HPP,2433"$ +$LK,"HashVal",A="FL:::/Kernel/KHashB.CPP.Z,9",BI=479$ +$LK,"C:/Doc/MultiCore.TXT.Z",A="FL:::/Kernel/KernelB.HPP,233"$ +$LK,"IET_IMM_U32",A="FL:::/Kernel/KernelA.HPP,399"$ +$LK,"IET_IMM_U16",A="FL:::/Kernel/KernelA.HPP,397"$ +$LK,"QueRem",A="FL:::/Kernel/KernelB.HPP,71"$ +$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HPP,3194"$ +$LK,"BDT_NULL",A="FL:::/Kernel/KernelA.HPP,2539"$ +$LK,"FarCall32",A="FL:::/Kernel/PCIBIOS.CPP.Z,161"$ +$LK,"ARGT_MOFFS32",A="FL:::/Kernel/KernelA.HPP,1827"$ +$LK,"ARGT_MOFFS16",A="FL:::/Kernel/KernelA.HPP,1826"$ +$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HPP,186"$ +$LK,"FUF_SINGLE",A="FL:::/Kernel/KernelA.HPP,2515"$ +$LK,"FUf_SINGLE",A="FL:::/Kernel/KernelA.HPP,2490"$ +$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HPP,2865"$ +$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.CPP.Z,132",BI=480$ +$LK,"SwapU32",A="FL:::/Kernel/KernelB.HPP,114"$ +$LK,"SwapU16",A="FL:::/Kernel/KernelB.HPP,112"$ +$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HPP,3800"$ +$LK,"CAsmUndefHash",A="FL:::/Kernel/KernelA.HPP,1725"$ +$LK,"HTt_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,645"$ +$LK,"HTt_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,644"$ +$LK,"C32_EDI",A="FL:::/Kernel/PCIBIOS.CPP.Z,63"$ +$LK,"pow10_I64",A="FL:::/Kernel/KGlbls.CPP.Z,14"$ +$LK,"sys_num_spawned_tasks",A="FL:::/Kernel/KGlbls.CPP.Z,8"$ +$LK,"LAPIC_LVT_LINT0",A="FL:::/Kernel/KernelA.HPP,495"$ +$LK,"Cluster2Blk",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,32",BI=481$ +$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.CPP.Z,155",BI=482$ +$LK,"LAPIC_LVT_LINT1",A="FL:::/Kernel/KernelA.HPP,496"$ +$LK,"sys_winmgr_task",A="FL:::/Kernel/KGlbls.CPP.Z,10"$ +$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HPP,3464"$ +$LK,"SYS_RAM_REBOOT_END",A="FL:::/Kernel/KStart.CPP.Z,373"$ +$LK,"CMT_ARRAY_DIM",A="FL:::/Kernel/KernelA.HPP,1607"$ +$LK,"REGT_FSTK",A="FL:::/Kernel/KernelA.HPP,735"$ +$LK,"ARGT_MOFFS64",A="FL:::/Kernel/KernelA.HPP,1828"$ +$LK,"DOCF_COLOR_NAMES",A="FL:::/Kernel/KernelA.HPP,1240"$ +$LK,"CRAXRBCRCXRDX",A="FL:::/Kernel/KernelA.HPP,562"$ +$LK,"_SAVE_EXCEPT_REGS",A="FL:::/Kernel/KExcept.CPP.Z,26"$ +$LK,"DOCf_COLOR_NAMES",A="FL:::/Kernel/KernelA.HPP,1275"$ +$LK,"RoundI64",A="FL:::/Kernel/KMathB.CPP.Z,47",BI=483$ +$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HPP,3740"$ +$LK,"EXT_HEAPLOG_FREE",A="FL:::/Kernel/KernelA.HPP,572"$ +$LK,"DrvSerialNum",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,226",BI=484$ +$LK,"Fstsw",A="FL:::/Kernel/KernelB.HPP,132"$ +$LK,"BDT_ATA",A="FL:::/Kernel/KernelA.HPP,2541"$ +$LK,"RFLAGf_RESUME",A="FL:::/Kernel/KernelA.HPP,317"$ +$LK,"C32_EAX",A="FL:::/Kernel/PCIBIOS.CPP.Z,58"$ +$LK,"PortNop",A="FL:::/Kernel/KMisc.CPP.Z,1",BI=485$ +$LK,"StrNCmp",A="FL:::/Kernel/StrA.CPP.Z,313"$ +$LK,"FUF_PUBLIC",A="FL:::/Kernel/KernelA.HPP,2512"$ +$LK,"FUf_PUBLIC",A="FL:::/Kernel/KernelA.HPP,2487"$ +$LK,"CFAT32FileInfoSect",A="FL:::/Kernel/KernelA.HPP,2280"$ +$LK,"SYS_HEAP_INIT_VAL",A="FL:::/Home/Temp.TXT.Z,1"$ +$LK,"CATAPITrack",A="FL:::/Kernel/KernelA.HPP,2332"$ +$LK,"C32_EBX",A="FL:::/Kernel/PCIBIOS.CPP.Z,59"$ +$LK,"CCF_HAS_MISC_DATA",A="FL:::/Kernel/KernelA.HPP,2054"$ +$LK,"LFSF_DOC",A="FL:::/Kernel/KernelA.HPP,1945"$ +$LK,"C32_ECX",A="FL:::/Kernel/PCIBIOS.CPP.Z,60"$ +$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.CPP.Z,205",BI=486$ +$LK,"C32_EDX",A="FL:::/Kernel/PCIBIOS.CPP.Z,61"$ +$LK,"LoadPass1",A="FL:::/Kernel/KLoad.CPP.Z,67",BI=487$ +$LK,"LoadPass2",A="FL:::/Kernel/KLoad.CPP.Z,154",BI=488$ +$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HPP,3802"$ +$LK,"CSndData",A="FL:::/Kernel/KernelA.HPP,3733"$ +$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HPP,3472"$ +$LK,"OC_NOP",A="FL:::/Kernel/KernelA.HPP,1673"$ +$LK,"SPF_AUX_FMT_NUM",A="FL:::/Kernel/StrPrint.CPP.Z,8"$ +$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3127"$ +$LK,"SYS_SEMA_SINGLE_USER",A="FL:::/Kernel/KernelA.HPP,596"$ +$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.CPP.Z,85",BI=489$ +$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.CPP.Z,140",BI=490$ +$LK,"DOCF_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HPP,1238"$ +$LK,"PostMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,243",BI=491$ +$LK,"SVCT_CALL",A="FL:::/Kernel/KernelA.HPP,3092"$ +$LK,"ATAPISeek",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,131",BI=492$ +$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.CPP.Z,61",BI=493$ +$LK,"SC_F10",A="FL:::/Kernel/KernelA.HPP,3486"$ +$LK,"SC_F11",A="FL:::/Kernel/KernelA.HPP,3487"$ +$LK,"SYS_SEMA_TT",A="FL:::/Kernel/KernelA.HPP,602"$ +$LK,"Silent",A="FL:::/Kernel/KMisc.CPP.Z,223",BI=494$ +$LK,"SC_F12",A="FL:::/Kernel/KernelA.HPP,3488"$ +$LK,"WIF_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HPP,1395"$ +$LK,"BOOT_SRC_CDROM",A="FL:::/Kernel/KernelA.HPP,3788"$ +$LK,"CCF_POSTINC",A="FL:::/Kernel/KernelA.HPP,2061"$ +$LK,"CCF_IN_IF",A="FL:::/Kernel/KernelA.HPP,2043"$ +$LK,"I_DIVIDE_BY_ZERO",A="FL:::/Kernel/KernelA.HPP,284"$ +$LK,"APSethTask",A="FL:::/Kernel/MultiProc.CPP.Z,211",BI=495$ +$LK,"HashStr",A="FL:::/Kernel/KHashA.CPP.Z,299"$ +$LK,"CHashExport",A="FL:::/Kernel/KernelA.HPP,750"$ +$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.CPP.Z,167",BI=496$ +$LK,"DrvIsWritable",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,148",BI=497$ +$LK,"FWBlks",A="FL:::/Kernel/Dsk/DskCFile.CPP.Z,181",BI=498$ +$LK,"chars_bmp_printable",A="FL:::/Kernel/StrA.CPP.Z,381"$ +$LK,"RLF_COMPILER",A="FL:::/Kernel/KernelA.HPP,463"$ +$LK,"RLf_COMPILER",A="FL:::/Kernel/KernelA.HPP,445"$ +$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HPP,3212"$ +$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HPP,2887"$ +$LK,"C32_ESI",A="FL:::/Kernel/PCIBIOS.CPP.Z,62"$ +$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart.CPP.Z,205"$ +$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HPP,3634"$ +$LK,"ATAR0_HCYL",A="FL:::/Kernel/KernelA.HPP,2193"$ +$LK,"sys_code_bp",A="FL:::/Kernel/KernelB.HPP,195"$ +$LK,"RepOutU32",A="FL:::/Kernel/KernelB.HPP,89"$ +$LK,"RepOutU16",A="FL:::/Kernel/KernelB.HPP,87"$ +$LK,"TK_SUBSCRIPT",A="FL:::/Kernel/KernelA.HPP,1981"$ +$LK,"WIG_TASK_DFT",A="FL:::/Kernel/KernelA.HPP,1405"$ +$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HPP,3799"$ +$LK,"DOCEf_HTML_LINK",A="FL:::/Kernel/KernelA.HPP,1037"$ +$LK,"DOCEF_HTML_LINK",A="FL:::/Kernel/KernelA.HPP,957"$ +$LK,"NORMAL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,3"$ +$LK,"LinkedLstSize",A="FL:::/Kernel/KDataTypes.CPP.Z,31",BI=499$ +$LK,"SSF_NO_COMPRESSION",A="FL:::/Kernel/KernelA.HPP,222"$ +$LK,"TASKf_NOT_RAW",A="FL:::/Kernel/KernelA.HPP,3193"$ +$LK,"DirContextNew",A="FL:::/Kernel/Dsk/DskDirContext.CPP.Z,21",BI=500$ +$LK,"_SET_MSR",A="FL:::/Kernel/KUtils.CPP.Z,459"$ +$LK,"HClf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2805"$ +$LK,"SPF_QUESTION",A="FL:::/Kernel/StrPrint.CPP.Z,7"$ +$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HPP,255"$ +$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HPP,249"$ +$LK,"DOCEF_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HPP,961"$ +$LK,"MSG_IP_MOVE",A="FL:::/Kernel/KernelA.HPP,3128"$ +$LK,"SVCT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HPP,3088"$ +$LK,"DOClf_LOCKED",A="FL:::/Kernel/KernelA.HPP,1307"$ +$LK,"CallStkGrow",A="FL:::/Kernel/Task.CPP.Z,82",BI=501$ +$LK,"ATAR0_NSECT",A="FL:::/Kernel/KernelA.HPP,2190"$ +$LK,"DOCEf_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HPP,1041"$ +$LK,"RLF_DOC",A="FL:::/Kernel/KernelA.HPP,464"$ +$LK,"chars_bmp_macro",A="FL:::/Kernel/StrA.CPP.Z,376"$ +$LK,"OutU8",A="FL:::/Kernel/KernelB.HPP,79"$ +$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HPP,3538"$ +$LK,"Ff_HASERRCODE",A="FL:::/Kernel/KernelA.HPP,838"$ +$LK,"TASKLf_TASK_LOCK",A="FL:::/Kernel/KernelA.HPP,3203"$ +$LK,"DOCF_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HPP,1235"$ +$LK,"RawPutChar",A="FL:::/Kernel/Display.CPP.Z,1",BI=502$ +$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.CPP.Z,227",BI=503$ +$LK,"C:/Doc/TimeHPET.TXT.Z",A="FL:::/Kernel/KernelB.HPP,293"$ +$LK,"DOCf_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HPP,1270"$ +$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HPP,3649"$ +$LK,"AOT_BIN_BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,1710"$ +$LK,"DOCf_FORM",A="FL:::/Kernel/KernelA.HPP,1278"$ +$LK,"DOCF_FORM",A="FL:::/Kernel/KernelA.HPP,1243"$ +$LK,"CHashTable",A="FL:::/Kernel/KernelA.HPP,634"$ +$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.CPP.Z,87",BI=504$ +$LK,"BDT_RAM",A="FL:::/Kernel/KernelA.HPP,2540"$ +$LK,"CMF_POP_CMP",A="FL:::/Kernel/KernelA.HPP,1610"$ +$LK,"ICF_POP_CMP",A="FL:::/Kernel/KernelA.HPP,1527"$ +$LK,"DOCf_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HPP,1273"$ +$LK,"MLMF_IS_STR",A="FL:::/Kernel/KernelA.HPP,779"$ +$LK,"SYS_TIMER0_PERIOD",A="FL:::/Kernel/KernelA.HPP,547"$ +$LK,"SET_FS_BASE",A="FL:::/Kernel/KUtils.CPP.Z,446"$ +$LK,"CISO1PriDesc",A="FL:::/Kernel/KernelA.HPP,2395"$ +$LK,"DOCT_INS_BINARY_SIZE",A="FL:::/Kernel/KernelA.HPP,927"$ +$LK,"PutHex",A="FL:::/Kernel/StrA.CPP.Z,12",BI=505$ +$LK,"PopUp",A="FL:::/Kernel/SrvCmd.CPP.Z,385",BI=506$ +$LK,"SCF_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3449"$ +$LK,"SCf_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3435"$ +$LK,"MSG_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3133"$ +$LK,"SVCT_EXE_STR",A="FL:::/Kernel/KernelA.HPP,3090"$ +$LK,"DOCF_OVERSTRIKE",A="FL:::/Kernel/KernelA.HPP,1264"$ +$LK,"IOAPICARB",A="FL:::/Kernel/KernelA.HPP,508"$ +$LK,"DOCf_OVERSTRIKE",A="FL:::/Kernel/KernelA.HPP,1300"$ +$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HPP,3441"$ +$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HPP,3427"$ +$LK,"WIF_SELF_FOCUS",A="FL:::/Kernel/KernelA.HPP,1381"$ +$LK,"SYS_TIMER_HANDLER",A="FL:::/Kernel/Ints.CPP.Z,12"$ +$LK,"StrLastOcc",A="FL:::/Kernel/StrA.CPP.Z,599",BI=507$ +$LK,"WIf_SELF_FOCUS",A="FL:::/Kernel/KernelA.HPP,1409"$ +$LK,"FClose",A="FL:::/Kernel/Dsk/DskCFile.CPP.Z,73",BI=508$ +$LK,"IEF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,1868"$ +$LK,"CMT_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,1603"$ +$LK,"mon_start_days1",A="FL:::/Kernel/Date.CPP.Z,3"$ +$LK,"HTF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,698"$ +$LK,"RLF_DSK",A="FL:::/Kernel/KernelA.HPP,462"$ +$LK,"mon_start_days2",A="FL:::/Kernel/Date.CPP.Z,5"$ +$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HPP,3510"$ +$LK,"SVCf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HPP,3078"$ +$LK,"HTf_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,668"$ +$LK,"DFT_CACHE_LINE_WIDTH",A="FL:::/Kernel/KernelA.HPP,576"$ +$LK,"MSGF_ALLOW_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3147"$ +$LK,"ATAR0_LCYL",A="FL:::/Kernel/KernelA.HPP,2192"$ +$LK,"MemPagePresentMark",A="FL:::/Kernel/MemA.CPP.Z,181",BI=509$ +$LK,"ICf_DONT_PUSH_FLOAT0",A="FL:::/Kernel/KernelA.HPP,1530"$ +$LK,"Sleep",A="FL:::/Kernel/KMisc.CPP.Z,155",BI=510$ +$LK,"RedSeaMkDir",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,604",BI=511$ +$LK,"PutKey",A="FL:::/Kernel/KeyDev.CPP.Z,1",BI=512$ +$LK,"_HASH_STR",A="FL:::/Kernel/KHashA.CPP.Z,165"$ +$LK,"FUf_ALL",A="FL:::/Kernel/KernelA.HPP,2484"$ +$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HPP,3675"$ +$LK,"CHashOpcode",A="FL:::/Kernel/KernelA.HPP,1860"$ +$LK,"FifoU8Ins",A="FL:::/Kernel/KDataTypes.CPP.Z,173",BI=513$ +$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HPP,2969"$ +$LK,"FATFromName",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,173",BI=514$ +$LK,"AAT_ADD_U32",A="FL:::/Kernel/KernelA.HPP,1883"$ +$LK,"AAT_ADD_U16",A="FL:::/Kernel/KernelA.HPP,1881"$ +$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HPP,3489"$ +$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HPP,2857"$ +$LK,"XTalkStrWait",A="FL:::/Kernel/SrvCmd.CPP.Z,510",BI=515$ +$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HPP,3657"$ +$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HPP,3462"$ +$LK,"RS_ATTR_LONG_NAME_MASK",A="FL:::/Kernel/KernelA.HPP,2445"$ +$LK,"ATAR1_CTRL",A="FL:::/Kernel/KernelA.HPP,2197"$ +$LK,"ICF_A1_TO_F64",A="FL:::/Kernel/KernelA.HPP,1509"$ +$LK,"DOC_COLOR_BIN",A="FL:::/Kernel/KernelA.HPP,1122"$ +$LK,"Ff_NOARGPOP",A="FL:::/Kernel/KernelA.HPP,840"$ +$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.CPP.Z,316",BI=516$ +$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.CPP.Z,155",BI=517$ +$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HPP,3473"$ +$LK,"Mount",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,173",BI=518$ +$LK,"ATAPIWritePktWord",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,106",BI=519$ +$LK,"FilesFindMatch",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,40",BI=520$ +$LK,"BlkDevsRelease",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,79",BI=521$ +$LK,"DOC_COLOR_LINK",A="FL:::/Kernel/KernelA.HPP,1117"$ +$LK,"TK_EQUAL_EQUAL",A="FL:::/Kernel/KernelA.HPP,1994"$ +$LK,"AAT_ADD_U64",A="FL:::/Kernel/KernelA.HPP,1885"$ +$LK,"HTT_CLASS",A="FL:::/Kernel/KernelA.HPP,678"$ +$LK,"HTt_CLASS",A="FL:::/Kernel/KernelA.HPP,648"$ +$LK,"Cd2DirEntry",A="FL:::/Kernel/Dsk/DskStrA.CPP.Z,194",BI=522$ +$LK,"IET_IMM_U0",A="FL:::/Kernel/KernelA.HPP,393"$ +$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.CPP.Z,190",BI=523$ +$LK,"StrLastRem",A="FL:::/Kernel/StrA.CPP.Z,609",BI=524$ +$LK,"RedSeaDrvInit",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,58",BI=525$ +$LK,"BlkDevAdd",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,23",BI=526$ +$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HPP,2849"$ +$LK,"DirLongNameFill",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,204",BI=527$ +$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.CPP.Z,96",BI=528$ +$LK,"StrFind",A="FL:::/Kernel/StrA.CPP.Z,624",BI=529$ +$LK,"CMemRange",A="FL:::/Kernel/KernelA.HPP,2772"$ +$LK,"WIf_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HPP,1419"$ +$LK,"PSectFind",A="FL:::/Kernel/PSect.CPP.Z,10",BI=530$ +$LK,"C32_RSP",A="FL:::/Kernel/PCIBIOS.CPP.Z,66"$ +$LK,"OutStr",A="FL:::/Kernel/StrPrint.CPP.Z,32",BI=531$ +$LK,"DOCEf_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HPP,1074"$ +$LK,"DOCEF_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HPP,988"$ +$LK,"TimersInit",A="FL:::/Kernel/KEnd.CPP.Z,82",BI=532$ +$LK,"ATAR0_SECT",A="FL:::/Kernel/KernelA.HPP,2191"$ +$LK,"WIF_SELF_CTRLS",A="FL:::/Kernel/KernelA.HPP,1383"$ +$LK,"DOCEf_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HPP,1063"$ +$LK,"IET_IMM_U8",A="FL:::/Kernel/KernelA.HPP,395"$ +$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HPP,3463"$ +$LK,"ARGT_MOFFS8",A="FL:::/Kernel/KernelA.HPP,1825"$ +$LK,"WIf_SELF_CTRLS",A="FL:::/Kernel/KernelA.HPP,1410"$ +$LK,"EXT_NUM_ENTRIES",A="FL:::/Kernel/KernelA.HPP,573"$ +$LK,"DefineMatch",A="FL:::/Kernel/KDefine.CPP.Z,85",BI=533$ +$LK,"CLexHashTableContext",A="FL:::/Kernel/KernelA.HPP,2026"$ +$LK,"RLF_RAW",A="FL:::/Kernel/KernelA.HPP,459"$ +$LK,"WZeroBlks",A="FL:::/Kernel/Dsk/DskBlk.CPP.Z,2",BI=534$ +$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,118",BI=535$ +$LK,"StkRep",A="FL:::/Kernel/KDbg.CPP.Z,104",BI=536$ +$LK,"Mem2MegFree",A="FL:::/Kernel/MemA.CPP.Z,450",BI=537$ +$LK,"SwapU8",A="FL:::/Kernel/KernelB.HPP,116"$ +$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HPP,3527"$ +$LK,"FF_CONTIGUOUS",A="FL:::/Kernel/KernelA.HPP,2687"$ +$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HPP,3179"$ +$LK,"ISO1T_VOL_DRV_DESC",A="FL:::/Kernel/KernelA.HPP,2392"$ +$LK,"SaveExceptRegs",A="FL:::/Kernel/KExcept.CPP.Z,43"$ +$LK,"SC_END",A="FL:::/Kernel/KernelA.HPP,3474"$ +$LK,"CAOTHeapGlbl",A="FL:::/Kernel/KernelA.HPP,1900"$ +$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.CPP.Z,165",BI=538$ +$LK,"FUf_MAP",A="FL:::/Kernel/KernelA.HPP,2488"$ +$LK,"DOCf_MORE",A="FL:::/Kernel/KernelA.HPP,1285"$ +$LK,"DOCF_MORE",A="FL:::/Kernel/KernelA.HPP,1250"$ +$LK,"chars_bmp_non_eol_white_space",A="FL:::/Kernel/StrA.CPP.Z,359"$ +$LK,"CISO1PathEntry",A="FL:::/Kernel/KernelA.HPP,2380"$ +$LK,"REGG_SAVED",A="FL:::/Kernel/KernelA.HPP,1704"$ +$LK,"SF_ARG1",A="FL:::/Kernel/KernelA.HPP,553"$ +$LK,"RLF_VGA",A="FL:::/Kernel/KernelA.HPP,453"$ +$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HPP,2877"$ +$LK,"WIF_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1400"$ +$LK,"DOCET_INVERT",A="FL:::/Kernel/KernelA.HPP,937"$ +$LK,"SF_ARG2",A="FL:::/Kernel/KernelA.HPP,554"$ +$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HPP,3466"$ +$LK,"DOCEt_INVERT",A="FL:::/Kernel/KernelA.HPP,943"$ +$LK,"ATTRf_INVERT",A="FL:::/Kernel/KernelA.HPP,885"$ +$LK,"ATTRF_INVERT",A="FL:::/Kernel/KernelA.HPP,880"$ +$LK,"SF_ARG3",A="FL:::/Kernel/KernelA.HPP,555"$ +$LK,"SF_ARG4",A="FL:::/Kernel/KernelA.HPP,556"$ +$LK,"SF_ARG5",A="FL:::/Kernel/KernelA.HPP,557"$ +$LK,"ODEF_STARTED",A="FL:::/Kernel/KernelA.HPP,240"$ +$LK,"Print",A="FL:::/Kernel/StrPrint.CPP.Z,898",BI=539$ +$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,3703"$ +$LK,"CAOTAbsAddr",A="FL:::/Kernel/KernelA.HPP,1887"$ +$LK,"SF_ARG6",A="FL:::/Kernel/KernelA.HPP,558"$ +$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HPP,3457"$ +$LK,"SF_ARG7",A="FL:::/Kernel/KernelA.HPP,559"$ +$LK,"FAT32DrvValidate",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,48",BI=540$ +$LK,"StrCmp",A="FL:::/Kernel/StrA.CPP.Z,309"$ +$LK,"MSG_RESIZE",A="FL:::/Kernel/KernelA.HPP,3138"$ +$LK,"DOF_INTERCEPT_TASK_END",A="FL:::/Kernel/KernelA.HPP,1195"$ +$LK,"SF_ARG8",A="FL:::/Kernel/KernelA.HPP,560"$ +$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HPP,3421"$ +$LK,"BlkDevChk",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,121",BI=541$ +$LK,"MSG_IP_L_UP",A="FL:::/Kernel/KernelA.HPP,3130"$ +$LK,"CPCIDev",A="FL:::/Kernel/KernelA.HPP,2152"$ +$LK,"RepOutU8",A="FL:::/Kernel/KernelB.HPP,91"$ +$LK,"DOCEF_RIGHT_AUTO",A="FL:::/Kernel/KernelA.HPP,979"$ +$LK,"sys_macro_root",A="FL:::/Kernel/KGlbls.CPP.Z,3"$ +$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HPP,3631"$ +$LK,"DOCEf_RIGHT_AUTO",A="FL:::/Kernel/KernelA.HPP,1054"$ +$LK,"NUM_SYS_SEMAS",A="FL:::/Kernel/KernelA.HPP,607"$ +$LK,"ATAPISync",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,501",BI=542$ +$LK,"TO_UPPER",A="FL:::/Kernel/StrA.CPP.Z,110"$ +$LK,"RFLAGG_NORMAL",A="FL:::/Kernel/KernelA.HPP,325"$ +$LK,"KERNEL_MODULE_NAME",A="FL:::/Kernel/KernelA.HPP,708"$ +$LK,"SYS_SEMA_DSK_CACHE",A="FL:::/Kernel/KernelA.HPP,597"$ +$LK,"SleepUntil",A="FL:::/Kernel/KMisc.CPP.Z,147",BI=543$ +$LK,"Spawn",A="FL:::/Kernel/Task.CPP.Z,209",BI=544$ +$LK,"MSG_IP_R_D_UP",A="FL:::/Kernel/KernelA.HPP,3136"$ +$LK,"CRedSeaBoot",A="FL:::/Kernel/KernelA.HPP,2234"$ +$LK,"SET_GS_BASE",A="FL:::/Kernel/KUtils.CPP.Z,434"$ +$LK,"RFLAGf_VINT_PENDING",A="FL:::/Kernel/KernelA.HPP,321"$ +$LK,"DirEntryDel2",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,26",BI=545$ +$LK,"DefineLoad",A="FL:::/Kernel/KDefine.CPP.Z,1",BI=546$ +$LK,"ICF_NO_RIP",A="FL:::/Kernel/KernelA.HPP,1535"$ +$LK,"OPTf_OPT_TRACE",A="FL:::/Kernel/KernelA.HPP,1461"$ +$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HPP,3689"$ +$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HPP,3461"$ +$LK,"ATA_SET_MAX_EXT",A="FL:::/Kernel/KernelA.HPP,2175"$ +$LK,"StrOcc",A="FL:::/Kernel/StrA.CPP.Z,467",BI=547$ +$LK,"StrCpy",A="FL:::/Kernel/StrA.CPP.Z,321"$ +$LK,"StrMatch",A="FL:::/Kernel/StrA.CPP.Z,317"$ +$LK,"FlushMsgs",A="FL:::/Kernel/KbdMouse/Message.CPP.Z,89",BI=548$ +$LK,"CMT_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1605"$ +$LK,"RLF_MP",A="FL:::/Kernel/KernelA.HPP,461"$ +$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HPP,3490"$ +$LK,"RLF_INTERRUPTS",A="FL:::/Kernel/KernelA.HPP,460"$ +$LK,"StrLen",A="FL:::/Kernel/KernelB.HPP,60"$ +$LK,"ATA_READ_NATIVE_MAX",A="FL:::/Kernel/KernelA.HPP,2172"$ +$LK,"PUSH_C_REGS",A="FL:::/Kernel/KernelA.HPP,1679"$ +$LK,"IEF_REX_XOR_LIKE",A="FL:::/Kernel/KernelA.HPP,1649"$ +$LK,"RLf_INTERRUPTS",A="FL:::/Kernel/KernelA.HPP,442"$ +$LK,"ISO1DateStruct2CDate",A="FL:::/Kernel/Dsk/FileSysISO.CPP.Z,74",BI=549$ +$LK,"RLF_REGISTRY",A="FL:::/Kernel/KernelA.HPP,466"$ +$LK,"RLf_REGISTRY",A="FL:::/Kernel/KernelA.HPP,448"$ +$LK,"SC_INS",A="FL:::/Kernel/KernelA.HPP,3475"$ +$LK,"TK_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,2018"$ +$LK,"RT_NUM_IT",A="FL:::/Kernel/KernelA.HPP,1493"$ +$LK,"AbsI64",A="FL:::/Kernel/KernelB.HPP,96"$ +$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HPP,3459"$ +$LK,"SPF_DECIMAL",A="FL:::/Kernel/StrPrint.CPP.Z,9"$ +$LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HPP,507"$ +$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HPP,492"$ +$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HPP,189"$ +$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3496"$ +$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3209"$ +$LK,"RedSeaFmt",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,98",BI=550$ +$LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HPP,191"$ +$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HPP,504"$ +$LK,"SysGetStr2",A="FL:::/Kernel/KDbg.CPP.Z,344",BI=551$ +$LK,"fp_getstr2",A="FL:::/Kernel/KGlbls.CPP.Z,28"$ +$LK,"KDRawPutKey",A="FL:::/Kernel/KeyDev.CPP.Z,93",BI=552$ +$LK,"DOCF_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1267"$ +$LK,"Dos2CDate",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,9",BI=553$ +$LK,"ATABlkSelect",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,1",BI=554$ +$LK,"SYS_START_CR0",A="FL:::/Kernel/KernelA.HPP,303"$ +$LK,"QSortI64",A="FL:::/Kernel/QSort.CPP.Z,1",BI=555$ +$LK,"RawPrint",A="FL:::/Kernel/KDbg.CPP.Z,217",BI=556$ +$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HPP,3501"$ +$LK,"CDevGlbls",A="FL:::/Kernel/KernelA.HPP,2821"$ +$LK,"chars_bmp_zero_cr_nl_cursor",A="FL:::/Kernel/StrA.CPP.Z,362"$ +$LK,"AreYouSure",A="FL:::/Kernel/StrB.CPP.Z,109",BI=557$ +$LK,"C:/Doc/D3.TXT.Z",A="FL:::/Kernel/KernelB.HPP,146"$ +$LK,"DOCf_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,1301"$ +$LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,1265"$ +$LK,"_REP_IN_U16",A="FL:::/Kernel/KUtils.CPP.Z,264"$ +$LK,"_REP_IN_U32",A="FL:::/Kernel/KUtils.CPP.Z,253"$ +$LK,"CH_FORM_FEED",A="FL:::/Kernel/KernelA.HPP,3415"$ +$LK,"ADAM_STK",A="FL:::/Kernel/KernelA.HPP,2786"$ +$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HPP,500"$ +$LK,"I_WAKE",A="FL:::/Kernel/KernelA.HPP,293"$ +$LK,"Yield",A="FL:::/Kernel/Sched.CPP.Z,344"$ +$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HPP,3721"$ +$LK,"MRT_DEV",A="FL:::/Kernel/KernelA.HPP,2770"$ +$LK,"CMBRPrt",A="FL:::/Kernel/KernelA.HPP,2213"$ +$LK,"StrNew",A="FL:::/Kernel/MemB.CPP.Z,431",BI=558$ +$LK,"HTT_GLBL_VAR",A="FL:::/Kernel/KernelA.HPP,677"$ +$LK,"HTt_GLBL_VAR",A="FL:::/Kernel/KernelA.HPP,647"$ +$LK,"REGG_C_CLOBBERED",A="FL:::/Kernel/KernelA.HPP,1703"$ +$LK,"WIF_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HPP,1397"$ +$LK,"HTT_HELP_FILE",A="FL:::/Kernel/KernelA.HPP,689"$ +$LK,"HTt_HELP_FILE",A="FL:::/Kernel/KernelA.HPP,659"$ +$LK,"Round",A="FL:::/Kernel/KernelB.HPP,140"$ +$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,25",BI=559$ +$LK,"MSG_IP_L_D_DOWN",A="FL:::/Kernel/KernelA.HPP,3131"$ +$LK,"ATAR0_STAT",A="FL:::/Kernel/KernelA.HPP,2195"$ +$LK,"DOC_COLOR_PMT",A="FL:::/Kernel/KernelA.HPP,1121"$ +$LK,"HPET_GEN_CONF",A="FL:::/Kernel/KernelA.HPP,528"$ +$LK,"MPHalt",A="FL:::/Kernel/MultiProc.CPP.Z,163",BI=560$ +$LK,"UnusedStk",A="FL:::/Kernel/KDbg.CPP.Z,46",BI=561$ +$LK,"DirEntryCompareName",A="FL:::/Kernel/Dsk/DskDirA.CPP.Z,62",BI=562$ +$LK,"BFieldExtU32",A="FL:::/Kernel/KernelB.HPP,30"$ +$LK,"DOCf_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1303"$ +$LK,"ATAS_DF",A="FL:::/Kernel/KernelA.HPP,2184"$ +$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HPP,2840"$ +$LK,"StrScan",A="FL:::/Kernel/StrScan.CPP.Z,212",BI=563$ +$LK,"CONSERVATIVE_16MEG_SIZE",A="FL:::/Kernel/MemA.CPP.Z,125"$ +$LK,"ICF_PREVIOUS_DELETED",A="FL:::/Kernel/KernelA.HPP,1537"$ +$LK,"ATARepFind",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,163",BI=564$ +$LK,"QSort2a",A="FL:::/Kernel/QSort.CPP.Z,32",BI=565$ +$LK,"num_lock_map",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,178"$ +$LK,"QSort2b",A="FL:::/Kernel/QSort.CPP.Z,55",BI=566$ +$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HPP,3712"$ +$LK,"CBlkPool",A="FL:::/Kernel/KernelA.HPP,2795"$ +$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HPP,3465"$ +$LK,"BootCdProbe",A="FL:::/Kernel/Dsk/DskATAId.CPP.Z,1",BI=567$ +$LK,"MSG_IP_R_UP",A="FL:::/Kernel/KernelA.HPP,3134"$ +$LK,"IEF_DONT_SWITCH_MODES",A="FL:::/Kernel/KernelA.HPP,1644"$ +$LK,"I_TIMER",A="FL:::/Kernel/KernelA.HPP,290"$ +$LK,"DOC_COLOR_TREE",A="FL:::/Kernel/KernelA.HPP,1120"$ +$LK,"DOCEf_HAS_BIN",A="FL:::/Kernel/KernelA.HPP,1042"$ +$LK,"DOCEF_HAS_BIN",A="FL:::/Kernel/KernelA.HPP,962"$ +$LK,"SYS_BOOT_BASE",A="FL:::/Kernel/KStart.CPP.Z,31"$ +$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HPP,3635"$ +$LK,"BlkDevNextFree",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,90",BI=568$ +$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,3704"$ +$LK,"CDIR_FILENAME_LEN",A="FL:::/Kernel/KernelA.HPP,2463"$ +$LK,"CFifoI64",A="FL:::/Kernel/KernelA.HPP,174"$ +$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.CPP.Z,201",BI=569$ +$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.CPP.Z,182",BI=570$ +$LK,"YearStartDate",A="FL:::/Kernel/Date.CPP.Z,8",BI=571$ +$LK,"_REP_IN_U8",A="FL:::/Kernel/KUtils.CPP.Z,275"$ +$LK,"SHIFT_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,9"$ +$LK,"DOCF_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HPP,1255"$ +$LK,"REG_UNDEF",A="FL:::/Kernel/KernelA.HPP,1701"$ +$LK,"VGAFlush",A="FL:::/Kernel/Display.CPP.Z,94",BI=572$ +$LK,"FILEMASK_AOT",A="FL:::/Kernel/KernelA.HPP,2201"$ +$LK,"SysDbg",A="FL:::/Kernel/KMisc.CPP.Z,238",BI=573$ +$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.CPP.Z,225",BI=574$ +$LK,"DCF_SCREEN_BITMAP",A="FL:::/Kernel/KernelA.HPP,3539"$ +$LK,"FF_NEEDS_WRITE",A="FL:::/Kernel/KernelA.HPP,2686"$ +$LK,"WIF_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HPP,1399"$ +$LK,"DOCF_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HPP,1239"$ +$LK,"LAPIC_APIC_ID",A="FL:::/Kernel/KernelA.HPP,473"$ +$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.CPP.Z,54",BI=575$ +$LK,"CatPrint",A="FL:::/Kernel/StrPrint.CPP.Z,889",BI=576$ +$LK,"TK_CHAR_CONST",A="FL:::/Kernel/KernelA.HPP,1986"$ +$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HPP,3195"$ +$LK,"ICF_A1_TO_INT",A="FL:::/Kernel/KernelA.HPP,1510"$ +$LK,"TY_RIP_DISP32_IMPORT",A="FL:::/Kernel/KernelA.HPP,1503"$ +$LK,"DOCf_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HPP,1274"$ +$LK,"EDF_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HPP,1225"$ +$LK,"CHashSrcSym",A="FL:::/Kernel/KernelA.HPP,716"$ +$LK,"HashPublic",A="FL:::/Kernel/KHashB.CPP.Z,170",BI=577$ +$LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2807"$ +$LK,"EDf_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HPP,1231"$ +$LK,"CDocSettings",A="FL:::/Kernel/KernelA.HPP,1128"$ +$LK,"BlkDevInit",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,31",BI=578$ +$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HPP,3213"$ +$LK,"CWinMgrTimingGlbls",A="FL:::/Kernel/KernelA.HPP,1428"$ +$LK,"FAT32_ENTRIES_PER_BLK",A="FL:::/Kernel/KernelA.HPP,2319"$ +$LK,"ATARBlks",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,442",BI=579$ +$LK,"GVF_ALIAS",A="FL:::/Kernel/KernelA.HPP,860"$ +$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HPP,3154"$ +$LK,"IEF_ENDING_ZERO",A="FL:::/Kernel/KernelA.HPP,1651"$ +$LK,"PUT_CHARS",A="FL:::/Kernel/StrA.CPP.Z,51"$ +$LK,"CMemE820",A="FL:::/Kernel/KernelA.HPP,356"$ +$LK,"ATAGetResult",A="FL:::/Kernel/Dsk/DskATA.CPP.Z,67",BI=580$ +$LK,"FILEMASK_GRA",A="FL:::/Kernel/KernelA.HPP,2204"$ +$LK,"ATAS_DRQ",A="FL:::/Kernel/KernelA.HPP,2183"$ +$LK,"DOCF_BORDER_DOC",A="FL:::/Kernel/KernelA.HPP,1242"$ +$LK,"DrvEnable",A="FL:::/Kernel/Dsk/DskAddDev.CPP.Z,151",BI=581$ +$LK,"BlkDevLock",A="FL:::/Kernel/Dsk/DskBlkDev.CPP.Z,1",BI=582$ +$LK,"BDT_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,2543"$ +$LK,"DOCf_BORDER_DOC",A="FL:::/Kernel/KernelA.HPP,1277"$ +$LK,"MRT_RAM",A="FL:::/Kernel/KernelA.HPP,2769"$ +$LK,"DVT_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,2599"$ +$LK,"ATAS_BSY",A="FL:::/Kernel/KernelA.HPP,2186"$ +$LK,"DOCf_SELECTED",A="FL:::/Kernel/KernelA.HPP,1297"$ +$LK,"DOCF_SELECTED",A="FL:::/Kernel/KernelA.HPP,1261"$ +$LK,"HTt_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,661"$ +$LK,"ICF_R_WAS_STK",A="FL:::/Kernel/KernelA.HPP,1523"$ +$LK,"DOCf_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HPP,1290"$ +$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HPP,190"$ +$LK,"SYS_SEMA_FORCE_WINMGR",A="FL:::/Kernel/KernelA.HPP,604"$ +$LK,"MPCrash",A="FL:::/Kernel/MultiProc.CPP.Z,399",BI=583$ +$LK,"ATAS_ERR",A="FL:::/Kernel/KernelA.HPP,2182"$ +$LK,"Struct2Date",A="FL:::/Kernel/Date.CPP.Z,14",BI=584$ +$LK,"ISO1T_TERMINATOR",A="FL:::/Kernel/KernelA.HPP,2393"$ +$LK,"SF_RBP",A="FL:::/Kernel/KernelA.HPP,551"$ +$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart.CPP.Z,224"$ +$LK,"CMF_U8_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1613"$ +$LK,"CMF_I8_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1612"$ +$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.CPP.Z,7",BI=585$ +$LK,"_ARC_ENTRY_GET",A="FL:::/Kernel/Compress.CPP.Z,43"$ +$LK,"DOCT_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,933"$ +$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart.CPP.Z,201"$ +$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HPP,3781"$ +$LK,"MT_DVD",A="FL:::/Kernel/KernelA.HPP,2455"$ +$LK,"DOCEf_SELECTED",A="FL:::/Kernel/KernelA.HPP,1030"$ +$LK,"DOCEF_SELECTED",A="FL:::/Kernel/KernelA.HPP,1024"$ +$LK,"DOCEt_SELECTED",A="FL:::/Kernel/KernelA.HPP,944"$ +$LK,"DOCET_SELECTED",A="FL:::/Kernel/KernelA.HPP,938"$ +$LK,"ATTRF_SELECTED",A="FL:::/Kernel/KernelA.HPP,881"$ +$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.CPP.Z,240",BI=586$ +$LK,"chars_bmp_filename",A="FL:::/Kernel/StrA.CPP.Z,345"$ +$LK,"ICF_A2_WAS_STK",A="FL:::/Kernel/KernelA.HPP,1525"$ +$LK,"ATTRf_SELECTED",A="FL:::/Kernel/KernelA.HPP,886"$ +$LK,"DVT_UNKNOWN",A="FL:::/Kernel/KernelA.HPP,2598"$ +$LK,"FILEMASK_JIT",A="FL:::/Kernel/KernelA.HPP,2200"$ +$LK,"ATAS_DRDY",A="FL:::/Kernel/KernelA.HPP,2185"$ +$LK,"ARGT_AL",A="FL:::/Kernel/KernelA.HPP,1830"$ +$LK,"CIntermediateCodeBase",A="FL:::/Kernel/KernelA.HPP,1559"$ +$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart.CPP.Z,204"$ +$LK,"WClusters",A="FL:::/Kernel/Dsk/DskCluster.CPP.Z,129",BI=587$ +$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HPP,259"$ +$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3141"$ +$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HPP,3200"$ +$LK,"ARGT_CL",A="FL:::/Kernel/KernelA.HPP,1835"$ +$LK,"ARGT_M8",A="FL:::/Kernel/KernelA.HPP,1815"$ +$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.CPP.Z,31",BI=588$ +$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.CPP.Z,374",BI=589$ +$LK,"TK_AND_EQUAL",A="FL:::/Kernel/KernelA.HPP,2005"$ +$LK,"TK_F64",A="FL:::/Kernel/KernelA.HPP,1987"$ +$LK,"RLF_BOOT_HEAP",A="FL:::/Kernel/KernelA.HPP,457"$ +$LK,"RLf_BOOT_HEAP",A="FL:::/Kernel/KernelA.HPP,439"$ +$LK,"I_USER",A="FL:::/Kernel/KernelA.HPP,299"$ +$LK,"FAT32CDirFill",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,231",BI=590$ +$LK,"BlkPoolAdd",A="FL:::/Kernel/MemC.CPP.Z,1",BI=591$ +$LK,"sys_task_being_screen_updated",A="FL:::/Kernel/KGlbls.CPP.Z,10"$ +$LK,"TK_INTEGER",A="FL:::/Kernel/KernelA.HPP,1985"$ +$LK,"TK_NORMALSCRIPT",A="FL:::/Kernel/KernelA.HPP,1982"$ +$LK,"SF_RIP",A="FL:::/Kernel/KernelA.HPP,552"$ +$LK,"IOAPIC_REG",A="FL:::/Kernel/KernelA.HPP,503"$ +$LK,"Complex",A="FL:::/Kernel/KernelA.HPP,114"$ +$LK,"Trunc",A="FL:::/Kernel/KernelB.HPP,142"$ +$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HPP,2833"$ +$LK,"HTf_IMM",A="FL:::/Kernel/KernelA.HPP,667"$ +$LK,"sys_pci_services",A="FL:::/Kernel/PCIBIOS.CPP.Z,159"$ +$LK,"CStreamBlk",A="FL:::/Kernel/KernelA.HPP,1921"$ +$LK,"ARGT_M32",A="FL:::/Kernel/KernelA.HPP,1817"$ +$LK,"ARGT_M16",A="FL:::/Kernel/KernelA.HPP,1816"$ +$LK,"ARGT_CS",A="FL:::/Kernel/KernelA.HPP,1845"$ +$LK,"ICF_R_TO_F64",A="FL:::/Kernel/KernelA.HPP,1507"$ +$LK,"DOC_COLOR_QUOTE",A="FL:::/Kernel/KernelA.HPP,1126"$ +$LK,"DOCSS_DBL_QUOTE",A="FL:::/Kernel/KernelA.HPP,1108"$ +$LK,"SYS_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.CPP.Z,5"$ +$LK,"_STRCMP",A="FL:::/Kernel/StrA.CPP.Z,86"$ +$LK,"ARGT_AX",A="FL:::/Kernel/KernelA.HPP,1831"$ +$LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:::/Kernel/KernelA.HPP,477"$ +$LK,"ARGT_DS",A="FL:::/Kernel/KernelA.HPP,1840"$ +$LK,"ARGT_R8",A="FL:::/Kernel/KernelA.HPP,1805"$ +$LK,"AStrNew",A="FL:::/Kernel/MemB.CPP.Z,446",BI=592$ +$LK,"ARGT_ES",A="FL:::/Kernel/KernelA.HPP,1841"$ +$LK,"ICF_A2_TO_F64",A="FL:::/Kernel/KernelA.HPP,1511"$ +$LK,"Cf_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HPP,822"$ +$LK,"FAT32DrvInit",A="FL:::/Kernel/Dsk/FileSysFAT.CPP.Z,22",BI=593$ +$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HPP,915"$ +$LK,"KbdPktRead",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,371",BI=594$ +$LK,"KbdCmdRead",A="FL:::/Kernel/KbdMouse/Keyboard.CPP.Z,36",BI=595$ +$LK,"D3DivEqu",A="FL:::/Kernel/KernelB.HPP,159"$ +$LK,"ARGT_FS",A="FL:::/Kernel/KernelA.HPP,1842"$ +$LK,"ARGT_DX",A="FL:::/Kernel/KernelA.HPP,1836"$ +$LK,"ARGT_M64",A="FL:::/Kernel/KernelA.HPP,1818"$ +$LK,"DOC_COLOR_KEYWORD2",A="FL:::/Kernel/KernelA.HPP,1124"$ +$LK,"CD2I32",A="FL:::/Kernel/KernelA.HPP,136"$ +$LK,"DrvLock",A="FL:::/Kernel/Dsk/DskDrv.CPP.Z,1",BI=596$ +$LK,"ARGT_GS",A="FL:::/Kernel/KernelA.HPP,1844"$ +$LK,"CICTreeLinks",A="FL:::/Kernel/KernelA.HPP,1552"$ +$LK,"DOC_COLOR_COMMENT",A="FL:::/Kernel/KernelA.HPP,1125"$ +$LK,"SYS_MEM_E801",A="FL:::/Kernel/KStart.CPP.Z,32"$ +$LK,"ATA_NOP",A="FL:::/Kernel/KernelA.HPP,2169"$ +$LK,"SVCf_DONT_FILTER",A="FL:::/Kernel/KernelA.HPP,3080"$ +$LK,"IET_REL_I0",A="FL:::/Kernel/KernelA.HPP,392"$ +$LK,"OC_ADDR_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HPP,1671"$ +$LK,"SYS_MEM_E820",A="FL:::/Kernel/KStart.CPP.Z,33"$ +$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HPP,3693"$ +$LK,"RFLAGG_START",A="FL:::/Kernel/KernelA.HPP,324"$ +$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HPP,3713"$ +$LK,"MSG_IP_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3145"$ +$LK,"MSG_IP_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3143"$ +$LK,"XTalkWait",A="FL:::/Kernel/SrvCmd.CPP.Z,468",BI=597$ +$LK,"MemPageTable",A="FL:::/Kernel/MemA.CPP.Z,173",BI=598$ +$LK,"CCF_KEEP_NUM_SIGN",A="FL:::/Kernel/KernelA.HPP,2047"$ +$LK,"ARGT_MM",A="FL:::/Kernel/KernelA.HPP,1849"$ +$LK,"chars_bmp_alpha_numeric_no_at",A="FL:::/Kernel/StrA.CPP.Z,335"$ +$LK,"SysHlt",A="FL:::/Kernel/KernelB.HPP,265"$ +$LK,"FUF_JUST_DIRS",A="FL:::/Kernel/KernelA.HPP,2516"$ +$LK,"CD2I64",A="FL:::/Kernel/KernelA.HPP,140"$ +$LK,"CD3I32",A="FL:::/Kernel/KernelA.HPP,126"$ +$LK,"_STRCPY",A="FL:::/Kernel/StrA.CPP.Z,65"$ +$LK,"RedSeaDrvValidate",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,82",BI=599$ +$LK,"YELLOW",A="FL:::/Kernel/KernelA.HPP,2872"$ +$LK,"FUf_JUST_DIRS",A="FL:::/Kernel/KernelA.HPP,2491"$ +$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/Dsk/FileSysRedSea.CPP.Z,3",BI=600$ +$LK,"IPVarsInit",A="FL:::/Kernel/KbdMouse/InputPointer.CPP.Z,70",BI=601$ +$LK,"ARGT_NO",A="FL:::/Kernel/KernelA.HPP,1790"$ +$LK,"IET_REL_I8",A="FL:::/Kernel/KernelA.HPP,394"$ +$LK,"MouseGetDevType",A="FL:::/Kernel/KbdMouse/Mouse.CPP.Z,26",BI=602$ +$LK,"ARGT_R32",A="FL:::/Kernel/KernelA.HPP,1807"$ +$LK,"ARGT_R16",A="FL:::/Kernel/KernelA.HPP,1806"$ +$LK,"DOC_DFT",A="FL:::/Kernel/KernelA.HPP,1138"$ +$LK,"CMemberLstMeta",A="FL:::/Kernel/KernelA.HPP,780"$ +$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3208"$ +$LK,"CAOTImportExport",A="FL:::/Kernel/KernelA.HPP,1869"$ +$LK,"DOCEF_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HPP,1003"$ +$LK,"CD3I64",A="FL:::/Kernel/KernelA.HPP,144"$ +$LK,"c32_edi",A="FL:::/Kernel/PCIBIOS.CPP.Z,157"$ +$LK,"PURPLE",A="FL:::/Kernel/KernelA.HPP,2863"$ +$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HPP,3196"$ +$LK,"FILEMASK_SRC",A="FL:::/Kernel/KernelA.HPP,2202"$ +DUb  *6BP\chuvzp<T²x²xÌxÕxðxyy(y.y6yXyfyŠyšy y©yÃyÃyÑyYá•á•õ•ü• –––)–5–\–{–š–¦–·–»–Á–Ï–Ó–Ù–ç–ç–ç–—%—9—N—R—X—f—j—p—‚—‚—‚—‚—…—Š—�—•—¦—ª—°—»—¿—Å—ЗЗЗÕ—Û—ì—ð—ö—˜˜ ˜˜˜˜I˜,¥¬Ç9Ç9Ð9à9å9å9ê9d‚×â…â…æ…ó…ø…†† ††††2†S†`†z†‡†�†•†š†Ÿ†¨†­†²†ІІÕ†å†ë†õ†ú†‡‡1‡6‡;‡@‡i‡ЇЇš‡Ÿ‡··Õ‡à‡Þ‡î‡ú‡ˆˆ!ˆ-ˆ9ˆ[ˆ[ˆbˆiˆrˆsˆ|ˆ�ˆB‰<#««¾ÔéòùûûD�š“ “ ¡ ¯ ¾ Æ Ì Ø ë ë ô ˆ/M‘ˆ‘ˆ¡ˆ¬ˆ·ˆ¾ˆ¾ˆ݈éˆøˆ‰‰‰‰,‰2‰9‰9‰=‰=‰=‰=‰J‰M‰]‰ 0ÎֽнŠ×ŠïŠ‹‹‹‹ +Ì ;8383P3V3p3s33”3š3 3¦3Å3Ê3Ò3Ò3à3æ3ë3444'4+4:4@4C4E4T4X4g4m4p4r4‚4†4š4�4 4¢4±4´4À4 Ä¥ÒÀ0À0â0ì0ï0ÿ01!1'1*1-101l1o1r1t1‡1Š1�1•1›1 1 1¦1²1´1½1½1½1½1Ã1Æ1Ë1Î1Ö1è1 Tª»’b’b›b´bÐbíbíbc +c c9cVcVcWcWc\c ˆCaQ“Q“w“{“ƒ“‰“’“š“ “£“¯“¯“Ù“æ“ð“ó“ö“ý“” ”””.”4æï•‹•‹¯‹½‹Õ‹è‹ê‹ê‹ô‹<ðûQQ Q'Q'Q.Q4Q7QsGsKsNsNs^sdsvs{sƒsŠs–s³s¶s¸sÉsÐsÜsõstt ttt)t>D |w’™z™z¹zÉzÔzÙzÛzázóz{{&{6{8{8{8{>{W{t{„{†{†{�{›{ ¬(¦T¦TÀTÏTßTîTþTUU#U;U;UGUYUcUrUwUwUƒUƒU‰U‰UðUõUõUVV+V.V1V?VEVNVvV!XÁÓ;);)G)I)X)n)z)�)˜)š)±)±)³)¶)¼)"@8DÌ}Ì}Ú}Ü}þ} ~ ~~#|¹ù¹ùêùíùûùúúú+ú@úEúXú\úmú€ú‰ú™ú¡ú±úÀúÃúøú$4Þç+b+b?bQb`bqb„bŠb“b%,èï“b“b¡bÇb¯b×bÝbc& w{rMrM{MˆM�M'Hž¬¶ó¶óÑóÓóäóðóõóôôôô(Œ¬Ëöêöêëë#ë?ëRëRë]ëbëjë„ëŒëŸë©ë®ëºëÀëÇëÔë×ëàëãëæëëëì) tx®½®½Â½Ð½Ö½*Dr€r€Ž€�€£€¨€¸€Å€Ë€΀Ú€+pÃÛ–ô–ô¤ô²ôÈô×ôÜôìôîôôôýôõõ*õ:õIõIõPõPõPõDö,h#9•m•m«m­m¼mÐmÒmÛmÝmÝmàmüm£`£c£c£f£q£x££9@iu¥X¥XµX¾XÅXÌXÓXÔXÜX:<ðûD|D|X|f|q|‚|Š|’|š|�|¥|;0\dzRzR‚RŸR¯RÀRÑRÕR×R<0JRºQºQÂQßQïQRRRR=”§È¡Ó¡Ó¼ÓÆÓÐÓçÓýÓÔÔÔ0ÔOÔTÔ_ÔdÔ~Ô“Ô•Ô¯ÔÄÔÄÔËÔËÔËÔpÕ>$‡Œ[ [ d r ˆ � ?H!}}*}6};};}L}[}`}`}f}@LÞí)s)s7s:sFsPsVscswsws–s–s³s·s»sÁsA �”..2AEB\˜«NêNêbêpêuê{ê†ê�ê�êŸê«ê¯êÇêÎêÑêÓêöêC4•žFFJTd…šššžD0nv:S:SCS[SkS{SœS»S¾SE¸¢ÌFFNV_~…›¯¹ÅÐÐß!.6LW__n�°½ÅÛæøø   --.AF Ÿ£žž¢¯³G ¤¨¶¶º¿ÃHì<ñÕñÕùÕÖ%Ö9Ö=ÖLÖXÖfÖuÖ­Ö­ÖÜÖùÖ×××<×<×J×p×p×׎ע×Ç×Ë×Í×Í×Ù×Ù×Û×Û×ë×÷×÷×ûר ØØ"Ø0Ø?ØjØs؅؅؋ØÖÙI4”�"b"b,b.b5b;bMbNbSbJ|Xs¡Ú¡Ú¹ÚÃÚÊÚÖÚÙÚçÚêÚîÚðÚóÚöÚþÚÛ ÛÛ'Û=ÛCÛFÛHÛNÛZÛK,'.†Ý†Ý�ݒݚݴݹݿÝLP×çu_u_‡_Š_•_š_§_²_Á_×_á_ê_ó_ö_`M�¥Å%^%^?^J^O^X^k^ƒ^‹^“^ ^ª^±^¸^¼^À^Ë^Ñ^Ú^Þ^ç^í^ð^þ^__Nøé#IàIàcàjà~à�à¢àµàÂàÐàùàá!á(á*á-á3á7áHáRáXá[á^á`álá|á„áŠá—ášá�á«á¼áÌáØáÚáçáíáúáâââ%â-â-â5â<âCâCâQâiâO ©­ÆÆÊßãP„ *žËžË¸Ë»ËÎËÛË÷ËúËÌ ÌÌÌ*Ì=ÌAÌWÌZÌ`ÌmÌyÌ{Ì{̤̋̎ÌQˆ 9¶9¶A¶J¶Z¶i¶u¶—¶—¶—¶Ÿ¶¤¶¤¶ȶ×¶ø¶····&·&·8·?·?·Q·V·^·R,ÔÛÃ)Ã)Ç)à)ç)é)STCT¶¶Ûïö  3MP`T ®²ææêùýU äèää +ä!ä#äVHú±h±hÑhÞhãhïh iii"i+i,i8iWHëù)h)hIhVh[hgh�h‡h�hšh£h¤h°hX ³·þþYD°½!­!­4­>­B­V­b­d­p­w­}­—­¡­ZdNcãKãKëKïKïKþK L/L8LALYLkLtL{LžL§L®LºL¼L[°§ÏÖ-Ö-á-ñ-...+.8.Q.h.l.p.x.€.‰.§.¯.Æ.Ê.Î.Ò.Ú.â.ë. //%/6/=/=/N/W/\0&þ•þ•–––;–;–@–]8 p(p(Š(Ž(‘(œ(º(¾(Ã(Þ(^ ›Ÿw9w9€9‹9š9_D2?%b%b?bVbcbcbmb‡b‘b`0emÚRÚRâRÿRS S1S4S6Sa0S[RR"R?ROR`RqRvRxRbL_A_AmArAtAƒA…A“AžA¬A¬A­A³Ac0°¸)q)q=q|qƒq‰q–q©qµqd[ùúùúû ûû5ûDûMûdûtû‡û”û§ûÅûÎûÛûæûñûöûüüü(ü2üEüRüküzü�ü©ü´ü¼ü×üâü÷üý!ý*ý8ýDýSýgý‚ý�ý•ý²ý½ý½ýÂýÐýÛýâýíýòýùýe0wÂSÂSËSãSóST$TCTFTf$þ‹X‹X«X¸X¾XÊXg$+0¦Ì¦Ì¯ÌÀÌÒÌÍh<$/Y}Y}g}o}w}„}�}™}È}Ê}Ð}ièšÐkEkEEŽE§E§EÉEÞEéEðE FF'F5FCFQFqFgF}F�FšF¬F»FÂFÉFÐF×FßFïF÷FGGHGZGbGeGsGj@nzþ˜þ˜ ™™™$™(™,™/™=™D™I™kD)6uZuZ�ZšZ­Z¿ZÓZáZêZíZùZldÉÞ+W+W9W>WNWSWbWgWiWoW~WƒW…W”WŸW£W©WmD/<ÆÝÆÝÏÝäÝðÝûÝÞÞÞ%Þ*Þn<¿ÊS`S`i`|`�`–`°`·`Í`Ó`Ù`ao,û û ÿ ( C l z | p<bm¶˜¶˜Ã˜Ë˜Î˜Ü˜à˜ä˜ò˜ö˜û˜qt5ÞûÞûíû÷ûüü5üJüeülüyü†ü‘ü˜ü©ü©üºüÁüÈüÒüåüîürLš©ýˆýˆ‰ ‰'‰3‰<‰V‰a‰f‰o‰…‰”‰ž‰ž‰³‰s8¥Y¥Y»YÈYÚYîYüYZZt våvåzå“åuÔ0a‘ï‘ï™ï¡ï¯ïÂïÑïÛïçïòïðð ð<ðDðPðXð`ð`ðkðmð‚ðŽð ð´ðæð÷ðñ ñ<ñ>ñPñYñYñkñkñyñ€ñ’ñ’ñ ñ ñ¥ñ©ñv4µ¾Ó_Ó_ç_ù_ÿ_` `6`<`O`w0HPãCãCëCD DD5D=DxPZj=‡=‡O‡V‡_‡m‡r‡u‡{‡~‡ƒ‡Ž‡”‡ž‡yd­Âôô/ô2ô@ô@ôIôTôYô\ôlôwô}ô€ôƒô…ô‰ô•ôz\UhÒyÒyèyïyþyzzz$z/z7zKzTzZzezezƒz{H<JFçFçVç\çgçpçsç€ç‰ç‰ç�ç�ç˜ç|,U\fftˆ–°¶¼}4ÜåFöFöTöböjöuöŽö“öšö ö~¬LsB_B_T_c_i_}_�_§_º_Ñ_ä_û_`)`A`E`L`R`V`h`�`Ž`”`¬`°`·`½`Á`Ó`ì`ù`ÿ`a aDÆÆÎÖçö  5o�•¼ÅÎÎÓæëö  'XŽŸ¯ÅÙàGXhho�����¢¢°´¸€X¢´___._B_Q_j_q_s__˜_²_½_Ã_Ç_Ñ_�<q|&&:I]iƒ‰‹‹“‚<KV o oo o0o2oeolololoooƒ˜ù6÷6÷<÷:÷J÷×û„4ŠÓŽÃŽÃ¦Ã®Ã¼ÃÇÃËÃÑÃ×ÃåÃúÃÿÃÄÄ!Ä'Ä>ÄCÄIÄ`ÄeÄkÄyÄ}ęĬļÄÁÄÐÄÝÄíÄüÄ ÅÅ"Å)Å+Å>ÅUÅ\ÅjÅ|Å|Å�őŤŦŹŻÅÎÅÎÅêÅÆÆ ÆÆ<Æ…H–å–åŸåºåÃåÎåÐåÒåáåáåðåòåòå÷å†\ßò«W«W»WÉWÔWÖWÝWçWýWX +XXXXXX‡( !Ì!Ì,Ì@ÌQÌS̈D¾Ëãã%ã3ãBãNãUãdãpãpãvã‰d)À)À9ÀTÀTÀVÀVÀVÀ^ÀoÀxÀ‰À•À˜ÀšÀ�ÀŸÀŸÀŸÀ«ÀŠD1>SCSChCvCvC~C”C˜C˜CœC¤C‹81;ÍÍÍ3Í>Í>ÍIÍMÍMÍSÍŒ$A†‘‘™©¹ÉØáïý.;CWdx…™£·ÁÕßó #7^lz‡’�®ÃØèò%6iwŒ±ÈÑàû&-8BK[�0‰‘3N3N7NDN`NuNzN”NŽ02:†††$†6†>†A†I†�ÌJySS9SMSnS€SšS¡S®SºSÂSÍSÕSàSëSTT%T,T=T?TGTRT]TlTsTvTxT~T„TœT¥T¥TÀTÃTÞT�,ÑØ6ì6ìDìPìgìkìmì�ì‘8Kf8f8€8ƒ8‰8•8—8¦8­8³8Ú8á8 99929A9a9j9j9j9w9³9¿9Ë9Û9î9ü9 : :-:>:W:^:i:„:„:�:’:’:ž: : :¬:®:®:¾:Á:Á:Í:Ü:ø:; ;;,;:;:;:;N;j;q;x;~;�;Í;’Pñ::Zmy…›¡¬²·¹Ò“4#JPJPSPhPhPuPŠPŠP�P” ÌÐìì$ì-ì3ì•0¹Á¹q¹qÍq rrr1r4r@r–0HP&ñ&ñ4ñBñJñmñ†ñ®ñ—€222292A2G2a2a2o2q2q2�2ƒ2ƒ2‘2“2“2£2«2«2´2À2Ý2Ý2ï2ï2ó23˜@$0qÐqÐЄЇЙПТФЪЙHñÿy¯y¯ޝ˜¯›¯¤¯°¯¸¯Õ¯ä¯ê¯í¯ù¯š ó÷nänärä€ä‚ä›ä{°ÍpÍpëpôpq!q3q6q>qAqGqJqVqhquq{qˆq“q˜qžq°q°q¿qÂqÌqÏqÛqíqúqr rrr#r5r5r5r5r@r@rNrœ Øü³<³<Ò<Ô<å<ê<ø<='=1=<=T=[=]=]=o=u={=}=ƒ=‰=Œ=’=”=�=©=¯=¯=¯=¶=Ç=�TŒ�.ó.óRóUócócówó‡ó’ó˜ó£ó£ó£ó§óµóž`w‹–ò–ò³ò¹òÇòÇòÛòæòêòñòôòþòóóóóóó)óŸHîü¡¡¡¡È¡ã¡ñ¡ü¡¢¢¢¢¢¢¢,¢ D"/l}l}z}†}‹}‹}œ}¡}¡}§}¡p¨À((#(4(X(_(p(”(¢(«(¾(Å(Ï(Ý(ó( ) )!)7)7)7)9)¢X‘³9³9Ì9Ü9ô9: : ::$:$:0:<:>:>:F:£dîË2Õ2Ý2è2ï2ÿ2 3#3+3>3H3_3d3k3y3€3š3¢3¨3¤8w�љљיՙ噚 ššš’š¥8>HbQbQpQvQ}Q“Q“QšQ±Q±Q·Q¦<u€¡Š¡Š¹ŠÇŠΊÒŠÕŠÙŠàŠ‹‹§`¼Ðbcbcfcoc—c½cÈc×cæcëcñcóc¨@Š–#'#'1'8'?'I'P'R'd'i'v'©LiÏiτϞϞϫϫϸϸÏÈÏÌÏÌÏÜÏÞÏÞÏЪdEÚ¾¾Éßæ$1@Tl„—­¸Úõ5:ShˆŸ¯±ç> ]nu•ªÄÄëë +M[»ŒŠÚáæø%5R˜emXÁóûû 0 M W n v a Ê Ê Ê Ï Ï à û  ! : S n † œ ´  Í Í à ù  !"!!Ž!œ!¬!º!Ò!í!ø!"&"&"}"N"L"œ"ª"º"Õ"í"##O# ##n#n#w#€#•#•#¦#­#Â#Â#Ó#Ó#Ö#Ú#«4 +ÜvÜvêvïvòvøvûvývw¬,sz}p}p�p†p�p p pÌp­TóU`U`c`p`}`›`ž`¥`¬`º`¾`À`Ê`Ò`®Ô'Xk7k7‹7™7ž7¨7¨7®7º7º7¾7Å7Å7Ì7Ú7Ý7á7í7í7ù7ÿ7 88888 8%81818=8\8_8u8u8x8{8‹8¯tuŽêhêhòhþhi i-i;iZiti‰iŽi•išišiœi°4‚‹»-»-Å-Å-õ- .G.U.Y.±À6b)¾)¾4¾8¾\¾e¾t¾€¾�¾¯¾·¾Ͼß¾¿¿%¿'¿'¿K¿M¿M¿q¿s¿s¿¿¿‡¿‡¿“¿§¿·¿¿¿¿¿Ñ¿Ø¿Ø¿ê¿÷¿À&À²ÈÈöKKcm~~�••§¬¬¾ÃÃÕÚÚìññññøýý&++Brƒƒ•œ£¬»³ˆ +(ï;ï; <<<<&<1<5<@<I<Q<V<X<\<k<v<~<†<‡<‡<‘<´(Œ’[.[.d.k.‹.’.•.µü‚½ÙÛÙÛáÛåÛÜÜÜ,Ü@ÜLÜdÜwܘÜÎÜðÜÝÝÝÝ Ý7Ý?ÝJÝWÝ[Ý_ÝaÝtÝ{ݎݞݥݺÝÏÝÑÝÕÝÕÝÕÝáÝíÝíÝòÝûÝ ÞÞÞ&Þ,ÞAÞ¶€a}ŽÎŽÎ’ΡΡΰΰοοÎÎÎÝÎÝÎìÎÏûÎ +Ï +ÏÏÏ(ÏÓ·¬Þ�@�@©@Á@Ö@Þ@í@ó@ó@ö@ý@A AAA!A'A*A,A/A2A2A7AFAIA[A¸Ht‚aa&a3a6a:aHaQapa|a†aŠa�aŸa¹TÉÚ××××&×I×W×a×g×q×vׄ׊×�ד׺¼�È6Õ6ÕHÕNÕ\Õ\ÕyÕƒÕ›ÕŸÕ·Õ»ÕÕÕÕÕèÕñÕüÕÖÖÖ-Ö7ÖDÖMÖOÖUÖ^Öd։֌ִ֤ÖÅÖÉÖÍÖØÖØÖÜÖÜÖÜÖ×»4LwLwZw\wawdwgwlwrw¼(ðö c c!c=cOcUcpc½”"ulul�l®lºlÍlÓlälìlðlül mm m#m&m)m.m0m4m@mQm`mfmimlmomomym|mŽm¾„c€JJ1J5JBJGJKJ^JJ‰J‰JŸJ«J²JÅJÊJÎJáJK K K K K#K1K¿�cƒVÛVÛ_ÛmÛmÛ…Û›ÛªÛÃÛßÛîÛÜ#Ü)Ü7ÜEÜSÜaÜcÜyÜ�ܥܻܻÜÁÜÀÀ1Õ`Õ`é`ö`ü`aaa)a1a1a;aTabakava�a„a‹a�a˜a�aªa¯aÁaÈaîaña b b bbbb#bÁÜ�Ðéééé>éKéTé[éqé„é™é­é¹éÉéÜéééüéê#ê0ê;êFêFêSê]êlê�ê–ê®êÇêËêÍêÒê×êàêòêùêùê ëë8ëÂ@ ‹*‹*—*ž*¤*«*¿*Æ*È*Í*Ø*Ã,z�FàFàJà€à“à“à�àÄ,fmÝ~Ý~ë~ñ~ý~ ÅH ®ÄuÄuÍuÙuìu÷uvvv"v&v*v-vÆ`¯Ã4v4v=vGvcvev{v‘v¤vºvÔvØvǸ’¼K:K:i::™:¨:Ë:Õ:Ú:ÿ:;;;;!;,;1;?;D;F;U;Z;i;‚;‰;£;µ;Á;Å;Ñ;È`0{B{B’B¦BºBÅBÚBáBìBñBöBC!C'C'CACCCMCÉ öäöäåååÊ éí&ä&ä*äAäCäËŒ'FF–F–V–Z–c–{–‰–Ž–‘–Ÿ–¤–½–Å–ï–ó–———G—K—k—u—|—’—­—É—å—˜˜˜Ì°W^þ^þzþ�þ†þ þ²þ¼þÁþÔþßþõþÿþ ÿÿÿ!ÿ?ÿZÿOÿjÿ„ÿ¨ÿ®ÿµÿÉÿÒÿØÿßÿæÿíÿþÿ�Íøµï5’5’S’d’y’’†’†’”’£’ª’°’Â’Â’Õ’å’ì’û’““1“3“K“M“P“R“R“V“V“b“i“i“m“x“~“Š“’“´“ʓۓò“ù“ÿ“””ÎÜü/AíAíIíMíVídíkí�í•íŸí«í¶íÄíÓíóí î%î)îBîZîiîmîxî„î�îžî­îÐîÞîíîï#ï'ï4ïFïFïTï[ïmïmï{ï{ï|ï�ïÏ�6Vîüîüüüý ý+ý@ýPýeýzýƒýˆýˆý˜ý¤ýªý¶ýÍýðýþþ þþþþZþЀ55„5„U„a„m„q„u„„„˜„ „¦„º„ɄՄá„å„è„ê„ü„ +…………%…+…>…Ñ$).ºPºPÈPÏPãPéPÒ,Š‘V¾V¾l¾¾Š¾�¾“¾›¾Ó¨Êð~~~ ~7~B~R~d~h~v~~¡~§~§~³~¾~Ì~Ö~Þ~â~â~â~å~ç~ë~ë~ð~þ~  !!7Ô(QW®ñ®ñ·ñÁñÆñÌñÏñÕLêù.í.íJíVíqí|í‰í�í£í¯íÖ   åå"å0å2å×`)=ƒ4ƒ4‡4›4«4»4Î4Õ4ì4ü4 55.5?5`5�5˜5£5®5è5ØTsAsAwA�AŸA±A¶AÌAÓAåAøA B%B5B:B:BÝFÝNÝVÝ^ÝfÝnÝvÝ~݂݆Ýédavùyùy zz z%z2z;z?zEzKzSz[zcz‚z…z�z�z˜zê8ˆ’êMêMN NNN'N*N4Në(.4axaxjxxx‡x–x›xì0yjyj‡jŸjØjÞjàjàjæjíDŒ™uˆuˆ¡ˆ¯ˆºˆ¾ˆÂˆÆˆÊˆÖˆãˆæˆöˆî€Ñí9ë9ëDëLëUë`ëkërëˆëœë¥ë¹ëàëöëìì4ì?ìJìbìmìtìì„ì˜ìï< ë)ë)ó)*"*2*C*O*i*�*ƒ*…*ðLÈ×3<3<M<`<u<{<�<�<ž<ž<¡<¬<ñˆúMƒMƒcƒ‡ƒ™ƒ™ƒ«ƒ²ƒÈƒÈƒØƒÚƒÚƒÚƒëƒöƒýƒ„ „ „„„!„!„$„2„ò8îøÁsÁsÏsÚsåsttt(tó @r�r�|�ˆ�˜�¥�¶�Ä�Ù�î�õ�‚‚-‚5‚S‚g‚j‚r‚‚‚“‚º‚͂߂ƒƒ'ƒ3ƒ8ƒ@ƒTƒnƒ�ƒ£ƒ¯ƒ؃ôHÒÒìÿ€-€3€9€9€A€C€o€õ<„�-]-]>]@]E]N]o]x]}]…]ö8JTÆÍÆÍÔÍëÍöÍöÍÎ Î ÎÎ÷Dîû™ì™ì«ìµìËìåìðìðìííí>íøPAQÚƒÚƒÞƒïƒøƒ„„/„1„<„G„P„Y„j„}„}„„ù$ôù-ƒ-ƒ6ƒ?ƒEƒJƒú  ¤Ÿ9Ÿ9¨9³9Ä9ûDÌÙvãvã…ãŠã“ã¥ã¦ãºã½ãÃãü0*r»"»"Þ"à"é"ì"ñ"ñ"õ"#(#+#:#>#E#^#g#i#‚#‹#‹#‹#½#Ç#Ñ#Ø#ß#æ#ò#þ#$$$)$0$7$>$E$J$J$J$O$g$}$ˆ$�$Ÿ$¤$¬$¸$Â$Î$á$ô$%%+%M%o%o%o%o%o%{%„%‹% &ý “—:N:NCNPNUNþ@ÉÕqÕqÕÕ†Õ‹Õ¡Õ£Õ¬Õ¾ÕÄÕïÕÿ4þÜþÜÝÝÝÝ&Ý.Ý2Ý6Ý,ÖÜÖÜÞÜæÜîÜöÜúÜþÜx7vvŠ�™ ³ÌÌÛñú 3:<?AAMt +Ús¦¢¦¢Ç¢É¢à¢é¢ô¢ÿ¢££"£-£8£L£W£Z£`£d£g£m£q£t£w£Š£Ÿ£§£ª£Â£Ò£Õ£Û£Þ£ñ£¤¤¤)¤9¤>¤>¤F¤F¤i¤i¤i¤m¤o¤o¤s¤u¤u¤y¤{¤{¤¤¤¤‚¤„¤„¤‡¤Œ¤’¤•¤™¤›¤¡¤¤¤¼¤Ð¤Õ¤Û¤Þ¤ã¤ö¤¥¥)¥)¥)¥.¥.¥0¥0¥5¥8¥^¥^¥^¥v¥–¥›¥›¥³¥Ñ¥Ö¥Ö¥î¥ ¦¦¦&¦B¦D¦D¦\¦x¦x¦–¦¢¦§¦§¦¿¦Ö¦Û¦Û¦ó¦§§§§0§N§R§T§T§X§p§Ž§’§’§°§µ§µ§Í§ä§ë§ð§ð§¨ ¨&¨4¨D¨h¨o¨q¨q¨¨‡¨°¨²¨²¨Ê¨Ê¨ï¨©/©4©4©L©L©e©z©œ©�©´©Ó©ô©÷©ü©ü©ª(ª/ª4ª?ª?ªEªPªbªgªqª�ª�ª´ª¿ªÅªØªàªéªéªõªùªùª««««#«-«I«^«{«Š«�«¥«­«¹«Ã«Ã«Û«Ý«è«¬¬"¬"¬'¬'¬Z¬e¬n¬n¬z¬~¬~¬‡¬–¬Ÿ¬Ÿ¬¨¬®¬Ê¬Õ¬í¬ï¬ú¬­­0­0­0­@­a­c­c­{­�­”­”­¬­Ã­Í­Ò­è­è­ÿ­ÿ­ ®®®®-®6®6®?®J®b®d®€®‹®¦®¨®¨®±®É®Ô®ê®÷®ÿ® ¯"¯*¯D¯G¯P¯U¯v¯€¯€¯˜¯¢¯­¯É¯Ü¯ï¯÷¯°° +°°!°V°a°a°a°u°~°‚°•°Ê°Ê°Ì°Ì°ä°î°ö°ö°ÿ°±±K±Y±_±r±z±‡±Œ±Œ±•±™±¬±á±ï±ø±ý±ý±² ²$²;²E²J²`²x²x²¢²¬²¬²É²Í²à²è²ï²ú²ÿ²³³ ³>³R³l³³‰³“³“³£³É³Ù³ë³÷³û³´'´3´7´7´7´7´;´@´@´K´O´g´~´ˆ´�´£´»´»´å´ï´µµµµ!µ%µ=µTµ^µcµyµyµ‘µ‘µÃµÍµêµñµüµ¶&¶,¶F¶X¶`¶b¶x¶†¶£¶³¶³¶à¶â¶ ··&·1·;·E·L·f·o·o·˜·°·³·Î·Î·Î·Ó·Ø· ¸ ¸9¸L¸Q¸[¸e¸Ž¸¢¸¥¸¼¸¼¸¼¸¼¸Æ¸Ü¸ï¸ù¸þ¸þ¸¹*¹4¹D¹D¹]¹q¹t¹€¹Ž¹”¹§¹¯¹¸¹½¹½¹½¹Ö¹ê¹í¹ù¹ººº,º@ºJºZºZºsº‡ºŠº–º¤ºªº½ºÅºÎºÓºÓºÓºìº»»»%»*»*»*»B»V»\»l»l»Ž»™»§»­»À»È»Ñ»Ö»Ö»Ö»ø»¼¼¼¼3¼3¼3¼O¼O¼i¼p¼­½@þ +qtqt…t“t“t£tËtÖtÚtëtîtöt|�œ‹‹.‹0‹>‹>‹L‹_‹‡‹ª‹¸‹È‹ë‹Ó‹Œ%Œ:Œ?Œ?Œ?ŒQŒTŒ`Œ$uzI«I«R«`«l«l«q«¬;YÌYÌiỊ̶̫̲̀̓̾̕ÌÎÌÜÌëÌñÌùÌÍ Í ÍÍÍÍÍÎ4GP:v:vNvdvovtv‚v�v˜v©v8¾È¡­¡­°­Æ­Õ­ð­ô­ú­ü­ü­® @&2a¨a¨r¨‰¨—¨£¨·¨Ĩ˨ΨÖ¨ +x+EKKq…–�®µµËËÙáï÷÷=`m‹‹˜˜²Â D’Ÿ\u\uhuuŠu�u–uœu¯u¶u»uÁu xQkC +C +Z +d +q +Œ +§ +º +Ç +ò +   ( 5 ? M S _ f r §  $-2   = c @=IÙÙÙÙëÙöÙÚ ÚÚÚ#Ú+Ú3Ú9ÚX7‰^Á^Á|Á‚Á‰Á™Á Á¨Á®ÁµÁËÁÙÁÝÁâÁèÁöÁùÁþÁ Â!Â3Â5ÂBÂGÂNÂPÂ]Â_Â_ÂoÂ}€‚ŽÂ�°µ¼ÂÅÂËÂÑÂØÂÛÂÛÂëÂùÂûÂ#ÃEÃGÃNÃPÃ\Ã\ÃpÃtÃtÊÃD3@٨٨è¨ÿ¨ ©©©-©B©N©Z©\©b©@o{CMCMYM{M�M†M™M¦M¬M¯M·M0ÐÐ"Ð'Ð0Ð6Ð6Ð;Ð,;BQ~Q~`~l~z~ƒ~ˆ~Ž~8ˆ’öàöàáá8áEáGáNáVáXá^áä6~¿~¿œ¿Ÿ¿¢¿¶¿¾¿Å¿Ù¿Ü¿Þ¿ÀÀÀÀÀÀÀÀÀÀ5ÀJÀeÀoÀyÀ�À�À�ÀƒÀƒÀˆÀ§À­À¼ÀÉÀÝÀêÀìÀþÀ ÁÁÁÁÁ)Á,Á,ÁWÁô…¾–™–™¨™«™µ™Â™Æ™Ì™Ì™Ð™Õ™Ù™Ý™ä™ê™ñ™÷™þ™š šššš%š+š2š8šAšGšKšSš[š[šdšešvš‰š‹š›š¢š­š¸šÃšÎšÙšäšäšîšLWfuouo~oŽoŽo¬o²oÂoÈoÎoÞoàoàoàophÝóm‚m‚‚‚‘‚–‚¦‚®‚®‚¼‚Æ‚Õ‚Ý‚é‚ø‚ƒƒƒ ƒ#ƒ+ƒD<IVÍVÍj͔͆ͤͦͨͳͷͷͿÍPƒ“¢a¢a±aºaÄaÆaØaØaØaÚaáaçabbbb0™¡³^³^É^Ü^î^ô^÷^ÿ^<]hôsôsttt t+t0t4t:tTÃÔ¶¶ºÍàëÿ2Tm†Ÿ¸Ñê–PK[Á©Á©Ï©é©ó©ªªª!ª<ªHªcªiªiªiªiªoª X£µÙeÙeùef ff1f7fDfQfXfafefqf X†˜q»q»Œ»’»�»·»·»À»À»Å»Ö»ß»ê»ê»ö»¼!,š¡¿¿"¿4¿9¿J¿w¿"ä6]Œ]ŒwŒzŒ}ŒƒŒ—ŒžŒ¡Œ¼ŒÆŒËŒÒŒ×Œ×ŒèŒÚŒöŒ ��-�6�>�O�O�O�X�_�m�o�z�€�Ÿ�¯�·�É�Ò�ã�ë�ý�ŽŽŽŽ ŽOŽ#  HžFžF¾FÍFÙFäFïFGG!G-G°G°N°^°`°}°†°¤°†°°Ѱâ°è°÷°±±±.±?±I±²%L٣٣è£î£î£û£ ¤¤!¤'¤,¤2¤4¤4¤:¤&Œèrdrd d±dÃdÐdàdädèdìdðdødee'e1e6eMeSe[e^epe' GK__!_;_A_(Ü4F[F[d[n[w[•[•[—[ž[ž[¯[¶[Ã[Ö[ß[ë[î[ó[\*\*\<\>\>\P\R\R\^\^\o\€\†\‰\‰\Œ\‘\™\ª\±\·\È\Ë\ç\ç\ì\ì\ì\])ðW�!m!m5mWmgmgm{m…m‰m�mšm«m´m¸mÇmÝmãmêmùmümn~H~M~:0 "w"w0w:wNwTwVw\w;88BNNdwˆ–œ¤®¶<,~F~F‡F’F”F”F™F=\i|€KgU[U[e[l[[‹[²[¼[Æ[Î[Ö[Þ[ê[ü[\(\4\=\K\Q\W\Z\a\i\?dšïËNËN×NàNéNïNûNOOOO#O1OøIøIøVø`ø…ø—ø¶øÈøÈøèøôø)ùù:ù?ùQùUù]ù]ùkùvù„ù‹ù–ù¤ù¤ù©ùµùCLRa^˜^˜k˜s˜v˜„˜‡˜Ž˜’˜•˜™˜§˜®˜³˜D,’™›N›N¤N­NÀNÆNËNE8GQ˜˜#˜+˜.˜<˜@˜N˜R˜W˜F0NNW\koqvGX<N�Î�΋ΞαιÎêÎ\ÏeÏH(JP + + +! +3 +< +> +I˜'IRR-RNR`RgRtR€RˆR“RžR«RºRÁRÅRÅRËRÑRéRòRøRSSSS +SSJ8|†   , 9 9 @ O V V [ KÈ^Œ†D†D¬D¯D½DØDæDíDúDýDE EE6EUEURU^UmUqUuU}U‡U–UŸU¸U¸U¿UÅUÌUÙUäUóUùUûUýUV V!V*V*V1VLVOVaVV  Cù²ù²³³³!³*³9³E³N³c³Œ³˜³˜³Ÿ³¼³dzå³å³ ´´´´&´&´8´?´Y´Y´Y´k´r´r´„´Š´’´WD”¡žž°ºÐêõõBX¼B)‘)‘?‘G‘Q‘]‘k‘{‘£‘ƑՑ’’ ’’>’a’o’’Š’µ’Å’Ê’Ò’ý’“““%“/“=“=“G“Q“Y@r~c9c9k9Œ9�9£9¬9°9²9Z /s  ! % - N [ l u | ’ ¥ º Î Ú ò 9NYa†‹•§ÀÏÜñé $(-->>QcvŒŽŽ¡©©©»»ÄÖÝÝïõ[@1=±Ð±Ð¿ÐÄÐÇÐÙÐßÐâÐäÐêÐ\è“ÉB|B|\|t|€|�|¢|¦|©|²|µ|Æ|Æ|Æ|Í|Ú|Ý|â|ß|<}S}V}X}o}r}t}|}Œ}Œ}•}¤}²}Â}Ð}Ù}à}å}å}å}ë}ÿ}]D y�y���µ�Ø�å�ò�ý�‘!‘)‘^ 6å6å@åSåXå_4€‰††”�¤­`8ÓÝérér÷rýrs ssss$salªÁ????[?^?n?q?t?�?†?�?¥?«?´?¶?¹?É?btRkžSžSÃSÅSÞSüSTüSTT$TT>T@T@TPTRTRTbTbThT¦Tc0CBCBLB^BlBpBtBtByBd@¹§¹§ȧΧâ§ì§ô§ü§¨¨ ¨ ¨¨eØ =ùtùtuu)u;uRuRucu{uˆu›u§u²uÂuäuæuvvvv!vMvTv]vcvjvpvuv{vv†v‘v—vÁvfè[‘F<F<e<g<v<‚<Ž<£<¨<±<´<¹<Ã<Ã<Í<Ð<æ<þ<ú< ==/=H=Q=T=W=\=€=‚=ž=˜=Ê=Ê=Ú=ê=ñ=÷=ú=ÿ=>>>ë>g” *ƒ ƒ ¥ Ê ï "_œÙÛé÷ 9Vhx�¦¸ÈÝöý <Hh€]n@n@‚@„@”@¢@¬@Ð@ô@ü@AA&A7A;J;Z;];r;|;‰;´;·;»;Æ;Ï;ó;û; <,<><J<V<V<j<m<}<Š<“<£<¥<¸<Â<Ò<Û<ë<ò<ò<ò<ù<== = ==*=é8cwcwqwww€w†wŒw•w˜wžwê0 clclql{l’l˜lšl lë< -£l£l·lÆlÖlÙlÛlãlælîlì�[»°C°CÑCÔC×CôCDD D*D@DMDWDaDsDD„D‹D¡D¿D¿DÚDÜDÜD÷DùDùDEEE&E&E0EDExEŸEŸE¥E¨EÎEÛEåEïEF FFF/FUFaFwF•F•F°FµFµFÐFÕFÕFðFõFõFGGG(G\GƒGƒG‰GŒG–G›G¬G°G½G½GÆGÉGBHíŒÏî t t*t&t9tItVtZt^t�tŽtšt¥t±tºtùtu u7uEuLuSuZu{u�uˆu‹u¡uîL,£w£w±w´wÀwÊwÐwÝwñwñwxx-x1x5x;xï kokzkzoz¯zðdZ˜?˜?¬?®?¾?Ì?Ö?ú?@&@8@F@P@a@f@|@„@‰@¢@Ä@Ä@è@ê@ê@AAA4A6A6AFAFALAOATAjArAwA�A¶AÂAçAçA BBB4B9B9B]BbBbBrBrB}B€BŠBžB®BºBÚBÚBæBêBöBC C!C5CI>INIPIPI`I`I„I‹I”IžI¢I»I½IâIëIñIøI:Jòx¸Ò0=0=F=c=i=u=„=Š=Ž=£=°=·=½=À=Ê=ó´(QÓmÓmëm÷mnnn)n3n9nJnLnQnQn^nxnznn™n›n�n·n¹n»nÕn×nÙnónõn÷nününününooooo–oô8FP–—–—£—«—®—¼—À—Ηҗחõ<al6˜6˜C˜K˜N˜\˜`˜d˜r˜v˜{˜ö\Qdzz"z$z/z4zGzPzUzZzjzwzwz}zˆz÷4GP¢y¢y¶yÌy×yÜyêy÷yzzø44=ÂPÂPÐPìPìPïPQQ Qù $(BPBPPPdPjPú,Y`8888%8-82888û¬Œ³ØYØYüYZ ZZ!Z&Z6Z;ZVZVZ]ZcZiZqZ}ZƒZ…Z…ZŒZ’Z˜Z Z¬Z²Z´Z´ZÄZÆZÆZÖZÖZ [ü4ÔÝ–Š–ŠªŠ¸ŠÐŠÛŠÝŠÝŠåŠý ÞâæŠæŠúŠ ‹‹þ<íøv‹v‹Œ‹�‹�‹º‹¾‹Í‹Ú‹ÿ4ãì‹‹0‹>‹V‹i‹k‹k‹u‹pÁÙúú$ú2úHúWú\úlúnútú}ú…ú�úªúºúÉúÉúÐúÐúÐúÄû4ÚãÆûÆûÔûâûêûõûüüü ü¬;ÏÏ#Ï9ÏOÏMÏ]ÏeÏlÏpÏxψϖϥϫϳϿÏÅÏÅÏÌÏÐÏÐÏÒÏ9Ñ8½ÇK;K;g;t;y;�;’;§;¸’¼Ã9Ã9á9÷9: :C:M:R:w:~:€:€:�:™:¤:©:·:¼:¾:Í:Ò:á:ú:;;-;9;=;I;Paq;8;8]8q88…8™8Ÿ8¤8¬8Æ8É8×8<KVÆnÆnÏnÙnénëno%o%o%o(odÉÞ{Y{Y‰YŽYžY£Y²Y·Y¹Y¿YÎYÓYÕYäYïYóYùY Øü+<+<J<L<]<b<p<‘<ž<¨<²<Ê<Ñ<Ó<Ó<å<ë<ò<ô<ú<== -= ==!=(=(=(=.=?= LÈ׫;«;Å;Ø;í;ó;ù;<<<<$< -,“ -“ -— -À -Û -    0 ŠzŠz˜z¢z¶z¼z¾zÄz 0ËÓ>Š>ŠXŠoŠƒŠ…Š…Š�Š „;Xæ…æ…ï…ù…ù… †† †(†1†:†N†N†Y†_†a†p†x†‡†�†¶†¶†¸†È†Î†Ó†@Š–ˆˆ:ˆHˆSˆWˆ[ˆ_ˆcˆoˆ|ˆˆ�ˆ`¶Ê¶‰¶‰Ò‰Õ‰Ú‰à‰é‰î‰ú‰ŠŠŠŠ&Š(Š(Š+Š7ŠH§µ>‰>‰Y‰u‰‰†‰†‰¥‰ª‰¬‰¬‰¶‰L—¦–ˆ–ˆ²ˆ¹ˆÀˆËˆÔˆíˆøˆýˆ‰‰(‰(‰=‰PYiÖ†Ö†è†ï†ø†‡ ‡‡‡‡‡'‡-‡7‡02:ž…ž…²…¾…Ñ…Ù…Ü…ä…Œj‰>‡>‡T‡W‡c‡c‡e‡r‡€‡…‡ˆ‡“‡–‡›‡±‡Ã‡Î‡Ú‡ä‡ç‡é‡ì‡î‡ñ‡ö‡û‡ÿ‡ ˆ,Þ„Þ„ç„……… …° 1………1…1…7…7…=…=…=…=…=…=…=…=…B…B…N…T…T…Z…_…h…h…{…{…{…{…{…{…�…�…�…�…ƒ…ƒ…›…D)6AZAZYZfZyZ‹ZŸZ­Z¶Z¹ZÅZ\7JÉZÉZÙZÞZèZðZùZüZ[[[[[[<(áYáYõYZZZZ Z0Z3Z;ZÀ1¡`¡`µ`Â`È`Ð`Ý`ß`õ`ý`ý`a a.a7aBaMaPaWa\adaiava{a�a”aºa½aØaØaØaÜaáaáaïa,sz6p6p:p?pIpYpYp…px+Eã ã  .5FMMccqy‡��²Õø##00JZTFW[[_v�˜£¾çò &6GN” *  = a … ª ¸ õ 2 o q  � › › µ Ï ì þ  # < N ^ s Œ “ š ¶ Ò Þ  Ds€ÃáÃá×áááóáúáâââ*â-â5â DØå æ ææ'æ=æWæbæbæsæƒæ…æ±æ!DIV›à›à¨à¶à¾àÆàÔàÜàäàìàôàþàá"ô�º;â;âCâGâhâqâxâŽâ¢â®âÆâÜâýâ3ãUãmãvãxã€ãˆãŸã§ã²ã¿ãÃãÇãÉãÜãããöãä ä"ä7ä9ä=ä=ä=äIäUäUäZäcäuä|ä|äŽä”ä©ä#€»×«ä«ä¶ä¾äÇäÒäÝäääúäåå+åRåhå‚åŠå¦å±å¼åÔåßåæåñåöå æ$èæ³æ³æÍæÔæèæëæ ç ç1ç?çhç„ç•çœçžç¡ç§ç«ç¼çÆçÌçÏçÒçÔçàçðçøç èèè è0è@èLè[ènèƒè†è‰è™è¡è¡è©è°è·è·èÅèÝè%|Wrááá%á,á8á;áIáLáPáRáUáXá`ácákáá‰áŸá¥á¨áªá°á¼á&è;SÜSÜ[Üg܇ܛܟܮܺÜÈÜ×ÜÝÝ>Ý[ÝeÝrݞݞݬÝÒÝÒÝáÝðÝÞ)Þ-Þ/Þ/Þ;Þ;Þ=Þ=ÞMÞYÞYÞ]ÞbÞkÞ}Þ„Þ’Þ¡ÞÌÞÕÞçÞçÞíÞ8à' ¾é¾éÈéÛéàé(¤&c5c5k5q5~5�5¬5Å5Å5Ì5Þ5é5ø5ø5666'6N6U6b6n6w6|6|6|6œ6¼6Ö6Û6à6)D/<NâNâWâlâxâƒâŒâšâ¥â­â²â*<^i­s­s»sÌsÔsØsäsésísós+\j}õsõstt't8tDtMtltxt�t‡t‹t™t,D“  u uu0u;uAuGuMu`uguluru-H¡¯uuuu~uŠu�u¨uÀuÂuÈuÓu×uÛuÞu.`°Äåuåuîuøuvv,vBvUvkv…v‰v/(Œ’åtåtítótùtu u0D~‹�t�t¡t§t­t³t¹t¿tÅtËtÑt×tÝtßt1 æéæéêéøéúé2HÓáÐ=Ð=ä=ù=>>>#>'>->4>7>H>30 'cmcmqm‰mÂmÈmÊmÊmÐm40ólólmmRmXmZmZm`m50€ˆãpãpòpûpq q qq6 ÚÞNèNèRè`èbè7 éí®è®è²èÉèËè8 ÿVéVéZé{é}é9 äèŽèŽè’è©è«è:   ¦é¦éªé¸éºé;0?GFF FF F2F4F4F9F< ó÷öèöèúèé -é=ŒèÒgÒghh#h0h@hDhLhThXh\h`hdh‡h‘h–h­h³h»h¾hÐh><ny¾ß¾ßÒßáßõßàà!à#à#à+à?Dz‡.à.à>àMàaàkà|à˜àžà à à¨à@0ZbVßVß_ßißoßußwßwß|ßA8cm~ß~ߌߖߠ߫߳ߵߵ߻ßB0$lS S { } † ‰ Ž Ž ’ ± Å È × ß æ ÿ ! -!#!,!,!,!^!h!r!y!€!‡!“!Ÿ!©!©!©!Ê!Ñ!Ø!ß!æ!ë!ë!ë!ð! " "*"2"A"F"N"Z"d"p"ƒ"–"¨"³"Í"ê" # # # # ## #&#¦#C(+1 !&:<FD0"*««³ÉÎâíöE<!CCVl�Š‘““œªFpµÍ“'“'›'¬'Ð'×'è' ((#(6(=(G(U(k(�(ƒ(™(¯(¯(¯(±(Gpœ´³%³%·%Æ%Ë%×%ã%ï%ø%& &&&4&F&_&x&‘&ª&Ã&Ü&õ&ˆ'H@„�Ã$Ã$Ï$Ö$Ý$ç$î$ð$%%%ITAR##+:FT]div‡™™�J,áè;);)?)X)_)a)K %#3#333=3B3G3G3V3[3`3j3t3z3„3†3‡3‡3�3š3œ3«3­3¹3Ã3Ñ3Ö3å3ì3î3î3î3ô3L4áêû1û1ÿ1222(232:2<2M`&:û3û3ÿ34#434F4M4d4t4„4•4¦4·4Ø4ù455&5`5NXÎà³(³(¿(Á(Ð(æ(ò(ù())))))+).)4)Ohmƒ»#»#Ã#á#ò#$ $-$>$Q$X$i$�$ƒ$ƒ$–$§$¿$Á$Á$Ã$PH2@KKSgkƒ›³ÂÎÜãð QDS`££§¶ÂÎÚèôû RX€ÒR‰R‰V‰c‰h‰q‰v‰{‰€‰…‰Љ¢‰ÉЉê‰÷‰ŠŠ -ŠŠŠŠ"Š@Š@ŠEŠUŠ[ŠeŠjŠsŠxСЦЫаŠÙŠúŠúŠ -‹‹>‹>‹E‹P‹N‹^‹j‹�‹Š‹‘‹�‹©‹Ë‹Ë‹Ò‹Ù‹â‹ã‹ì‹ñ‹²ŒS86@æÝæÝüÝÞ Þ.Þ4Þ<ÞFÞNÞTPAQNÞNÞsއގޘޜޠޤޮޮ޸ÞËÞåÞèÞøÞU8ˆ’®à®à²àÅàØàãà÷àá*áNáV,RYþÞþÞ ß ß.ßHßNßTßW`0ÓDÓDêDþDEE2E9EDEIENE_EyEEE™E›E¥EXLQ`Þ—Þ—ë—ó—ö—˜˜˜˜˜˜'˜.˜3˜Y@my~˜~˜‹˜“˜–˜¤˜¨˜¬˜¯˜½˜Ä˜É˜Z,x³p³pÄpÎpÒpØpÛpãp[P`pëoëoúoppp,p;pGpbphpkpqp\4ývýv w wwwww#w]4 µvµvÉvØvÝvëvîvôvüv^4 -�v�v›v v£v©v¬v®v´v_4 (%w%w3w5w:wCwFwKwQw`ø³í¶‘¶‘Ô‘å‘ú‘’’’’$’+’1’C’C’V’f’m’|’�’›’²’´’Ì’Î’Ñ’Ó’Ó’×’×’ã’ê’ê’î’ù’ÿ’ ““5“K“\“s“z“€“ƒ“›“a8îøž“ž“¢““ê“bà5Þ‹Þ‹ø‹û‹ý‹ŒŒŒ!Œ<ŒFŒKŒRŒWŒWŒZŒwŒ�Œ›Œ°Œ¹ŒÁŒÒŒÒŒÒŒÛŒâŒïŒñŒûŒ� �0�8�J�S�d�l�~�����������Ð�chA—6Ž6ŽPŽRŽkŽwŽ{ޗ޲޲޲޲޲޾ŽÊŽÑŽßŽãŽîŽþŽ� � ��&�+�+�<�A�D�P�a�q�s�s�s���’�’�¯�¯�µ�Á�Í�Ô�Ø�è�ë�÷�����1�3�3�I�I�O�[�g�n�r�‚�…�‘�¢�´�¶�¶�¶�»�ÿ�dx˜²‘‘‘-‘3‘6‘Q‘l‘l‘v‘x‘x‘‚‘„‘„‘„‘�‘‘‘‘‘‘‘œ‘œ‘œ‘¡‘³‘eÄ�¼„0„0¦0°0³0Ã0Û0å0ë0î0ñ0ô001316181K1N1Q1Y1_1d1d1j1v1x1�1�1�1�1‡1Š1�1’1š1¬1fX|Ž$0$020;0G0M0P0U0[0^0c0c0p0t0w0w0}0g4™¢ -N -N.N2NHN\NfNiNyNh8‰“šMšM°M¹MÂMÍMÖMÙMãMi`¼ÐÂfÂfÆfÏf÷fg(g7gFgKgQgSgj8�š -m -mmm$m+m3mXm’mk(£©ÒeÒeÖeáeæeðeòelPƒ“eeee$e&e8e8e8e:eAeGegeueve|em4”�‚e‚eŒeŽe•e›e­e®e³en ž¢ºeºe¾eÉeËeoTª»òeòeûef0fMfMfbfjff™f¶f¶f·f·f¼fp(=Cfœfœsœˆœ´œÈœqøD~ÎœÎœèœøœÿœ��*�E�E�K�T�]�f�o�q�z�ƒ�…�…�Ž���¢�¢�«�´�¹�¹�Â�Ë�Ð�Ð�Ù�â�ç�ç�ç�ð�ù�þ�þ� -žžž/ž3ž3žMžOžOž]žažÓžr(6<œœœ(œMœaœsXÑÖžÖžòžŸ ŸŸŸ4Ÿ8ŸZŸZŸ|Ÿ|Ÿ|Ÿ…Ÿ‡Ÿ‡Ÿ�Ÿ’Ÿ’Ÿ›Ÿ�Ÿ�Ÿ¦Ÿ¨Ÿ¨Ÿ±Ÿ³Ÿ³Ÿ¼Ÿ¾Ÿ¾ŸÇŸÉŸÉŸÒŸÒŸÕŸÚŸÚŸÚŸÝŸàŸàŸúŸ -  . . 0 0 9 < A A J J O O X e j j s ‡ Š � � ˜ ˜ ¦ ª ƒ¡t,‡ŽÖ½Ö½ì½ÿ½ -¾¾¾¾uP:JNnNnfnrnynnˆnŽn‘n‘n¤n±n·nºnÆnvL .B„B„Z„\„f„�„�„Ÿ„´„À„DŽ܄w8 °5°5¿5Õ5ä5ÿ56 6 6 66x,ÚOÚOÞOòOöOöOúOy°(�[<[<y<|<~<Š<Š<–<ž<¥<¥<«<²<²<½<¿<Ç<Í<Ò<Ò<Þ<è<ì<ñ<ñ<ñ<ñ<ø<ø<=== = ==="=3=5=;=@=@=X=c=g=r=€=Œ=–=š=œ=œ=Ÿ=©=­=º=Ç=Ë=Ñ=Ô=Û=Ý=Ý=í=ó=ü=>>>>>>>>>>> >%>/>B>H>Q>[>_>q>z|ÁÜ“?“?±?º?Æ?É?Ö?Û?å?ñ?÷?@@@@$@/@6@:@B@C@C@Q@{l‘¨s>s>�>’>£>¦>©>¶>»>Ä>Ú>à>é>ë>î>þ>|l©À?? ?"?3?6?9?F?K?T?j?p?y?{?~?Ž?}�¥Åñ]ñ] ^^^$^7^O^W^_^l^v^}^„^ˆ^Œ^—^�^¦^ª^³^¹^¼^Ê^Ì^Ú^~PÆÖá^á^ï^ö^____$_+_-_0_;_A_|hƒ9\9\C\P\a\k\r\y\‚\Š\¢\©\°\º\Â\É\Ð\Ø\Þ\é\í\ï\ï\ó\€€Kg![![1[8[K[W[~[ˆ[’[š[¢[ª[¶[È[Ú[ô[\ \\\#\&\-\5\�0ÀS:S:m:o:r:~:~:Š:—:¤:¬:±:·:¹:½:Í:Û:ë:ö:û:û:;; ; ;,;:;E;G;M;O;Q;S;S;^;`;h;n;p;p;|;†;‰;‰;‰;‰;Œ;—;Ÿ;£;±;‚ˆ '³;³;Í;Ò;Þ;Þ;ê;ö;ú;<<<<<!<0<;<C<K<L<L<V<ƒ¬ÝS@S@m@…@š@¢@±@·@·@º@Á@Ì@Ð@Õ@Û@å@ë@î@ð@ó@ö@ö@û@ -A A A„L#A#A1A6A8AGAIAWAbApApAqAwA…P×çA_A_S_V_a_f_s_~_�_£_­_¶_¿_Â_Ì_†8èòÑ_Ñ_ß_æ_ñ_ö_ø_````‡<„�ù\ù\ -] ]]];]D]I]Q]ˆ<´¿ó9ó9 -:::+:9:?:B:L:‰,¤«‹9‹9”9¤9©9©9®9Š,¬³³9³9¼9Ù9ë9ë9ð9‹`�¤Q]Q]_]a]n]{]‚]‰]�]˜]œ]³]Å]Ô]Ü]å]ç]ç]ï]Œ, -ºOºO¾OÒOÖOÖOÚO�˜Rt`W`WrWuWƒW�W¨W¹WÂW×WÜWîWþWXX3X5X5XLXNXNX^X`X`XpXpXvXvX|XXÜXŽŒ­ ëÇëÇ È ÈÈÈÈ=ÈDÈ\ÈZÈjÈyȀȃȓȧȧȬȼÈÎÈâÈøÈÉ5ÉQÉmÉqÉvÉŽÉ�É É´ÉÊÉÊÉÚÉéÉ÷ÉþÉ -ÊÊ Ê4ÊDÊXÊXʅʔʘʞʺÊÏÊèÊèÊôÊËË"Ë-Ë=ËGËQËfË˂˂˖˦˦˸˸ËÊËÙÎ�dëC2M2U2`2g2w2…2›2£2¶2À2×2Ü2ã2ñ2ø233 3�8$S*S*\*f*n*{*}*Š*Š*�*‘ °Ôû/û/ 0000+0=0G0L0^0s0‰0Ÿ0µ0Ç0Î0Î0ä0ñ0ñ01111%1,11191’<Õà;1;1[1k1p1“1¶1Ú1á1è1í1ù1“@ ** ***!*5*<*>*C*L*”< c)c)k)‰)š)ª)»)Ç)á)ù)û)ý)•€%�“*“*›*Ÿ*¦*­*µ*Ã*Ô*Ü*ã*ã*õ*õ*+ ++!+++A+P+U+]+d+q+‡+›+¢+¯+°+º+Ä+Î+Õ+ß+æ+ë+õ+ü+, ,,,&,-,7,;,D,L,U,r,y,†,‡,‹,­,º,Ï,Ú,ç,ç,î,--#---–0‚Š3-3-=-m-ƒ-¿-Í-Ñ-—„’¯...E.n.—.á.î.ð.//R/_/a/y/y/©/°/µ/¿/æ/í/ï/ô/÷/˜(‹‘Ó-Ó-Ü-ã-. -. .™$ -[[5[Q[šDÌÙþçþç èèè-è.èBèEèK蛼Gr»¼»¼Ƽʼî¼÷¼½½½=½U½e½ƒ½ƒ½¤½¦½¦½ǽɽɽê½ì½ì½ø½ø½¾¾ ¾ ¾0¾8¾8¾J¾Q¾Q¾c¾p¾|¾€¾Ÿ¾œÀsŸ£¾£¾®¾²¾Ö¾ß¾î¾ú¾ -¿)¿1¿I¿Y¿{¿{¿Ÿ¿¡¿¡¿Å¿Ç¿Ç¿ë¿í¿í¿ù¿ù¿ÀÀ À!À1À9À9ÀKÀRÀRÀdÀqÀ}À�À À�(¾Änšnšvš€š“šžô„½™™(™+™5™B™F™L™L™P™U™Y™]™d™j™q™w™~™„™‹™‘™˜™ž™¥™«™²™¸™Á™Ç™Ë™Ó™Û™Û™ä™å™ö™ š šš"š-š8šCšNšYšdšdšnšŸd 5››>›F›`›k›n›t›|›‘›¡›¯›±›¿›Í›Ý›ò›ô›ô›œ (OU6÷6÷?÷I÷N÷T÷W÷¡p !³k³kÇkÔkÙkåkìkòklDlMlVlbl¢X¶ÈËhËhëhøhýh i#i*i7iDiKiTiXidi£XÉÛkiki‹i˜i�i©iÃiÊi×iâiéiòiöij¤X£µ+h+hKhXh]hihƒhŠh—h¤h«h´h¸hÄh¥Hëù“j“j³jÀjÅjÑjëjòjùjkkkk¦Hú#k#kCkPkUkak{k‚k‰k–kŸk k¬k§HÜêjj#j0j5jAj[jbjijvjj€jŒj¨p<T||,|5|O|c|r|‡|Ž|–|º|È|ì|ü|} }%}%}3}©\Uh:}:}P}W}f}m}v}v}Œ}—}Ÿ}³}¼}Â}Í}Í}ë}ªÔ -;ÊzÊzäzçzêzôzúz{ {{{({6{?{B{H{N{U{\{^{h{m{w{…{‹{š{¦{©{¬{´{¹{Ï{Û{Þ{á{á{á{á{ä{ì{ô{ü{ÿ{|«l€—ã_ã_``:`?`N`V`p`t`t`�`�`˜`¤`µ`½`É`ã`ç`ç`ý`¬0˜ aaa,a>aDaGaOa­$NáNáRáVáXá®8óýkZkZ‹Z–Z¤ZœZ·ZÈZÈZÈZÔZ¯4#úOúOPPP%P:P:P?P°$glÆoÆoÊoÚoåop±(€†ž½ž½²½Ä½Ê½Ð½Ö½²,�–¾¾2¾D¾I¾Z¾`¾‡¾³,—ž޾޾¢¾´¾¹¾Ê¾÷¾´ þéþéêêêµ,æÜæÜïÜôÜÝÝ Ýݶ@æò+Ù+Ù9Ù@ÙEÙ[Ù]ÙfÙxÙ~Ù~٩ٷ$.3££§Õû¸”Äå[×[×v׀׊ס׷׼×É×Î×ê× ØØØØ8ØMØOØiØ~Ø~؅؅؅Ø*Ù¹, ç(ç(ù())()1)ºXFÜFÜZÜdÜkÜzܓܓܤܳܿÜÔÜÖÜÙÜÛÜÛÜÛÜãÜ»t5ÝÝ"Ý(Ý2Ý9ÝLÝeÝeÝt݊ݓݡݨݨݫݵÝËÝÓÝÕÝØÝÚÝÚÝæÝ¼H:ƒ:ƒTƒgƒ€ƒ•ƒ›ƒ¡ƒ¡ƒ©ƒ«ƒ׃½Œ‰è A A1ADANANAQAUAiAnA€AŠAŒA�AœAœA«A°A´AÐAÙAéAúAýAÿA -BBB!B#B)B>BABKBPBaBiBiBlBxB–B›B¬BµB·BºBÄBÍB×B×BêBïBòB CC+C0C:CCCMCPCRC]CrCuCxCzC€C™CœC¦C­C­C¿C¾´0Yc>c>�>�>„>ˆ>œ>¡>´>¾>À>Ä>Ð>Ð>ß>ä>è>? -??+?.?0?;?K?N?Q?S?Y?o?r?|?Š?¿ÈZˆ‹?‹?±?µ?µ?¸?Ä?à?å?õ?þ?@@ @@ @ @3@8@;@U@^@s@x@‚@‹@•@˜@š@¥@¼@¿@Â@Ä@Ê@å@è@ò@AÀÈ/C=C=c=m=m=p=t=„=‰=š=¤=¦=ª=¶=¶=Å=Ê=Î=é=î=þ=>>> >*>->0>2>A>D>N>N>^>Á8AK x xx x"x'x*x-x2x:xÂ<5@¥w¥w½wÌwÓwØwãwøwûwx xÃ<)4UwUwlwowtwwwŠw�w“w•wŸwÄ8LV=x=xMxPxRxWx`xcxhxpxÅ,„‹¥y¥y®y³y»yÁyÁyÆyÆHŒšÍyÍyáyèyúyýyýyzz!z&z(z0zÇ0W_uxuxƒx’xœx¬x°x³x¹xÈœ`ƒ½x½xØxßxêxðxóxóxúxyyyyy'y'y'y+y5yDyLyayly~y‚y„y–yšyšyšy¤yÉœ:]S±S±[±_±k±{±„±“±Ÿ±¨±æ±ò±ò±ù±²!²?²?²f²h²h²h²€²€²’²™²³²³²³²Ų̲̲Þ²ä²ì²Ê|v‘‹~‹~«~»~Æ~Ë~Í~Ó~å~÷~(***0Ifvxx��Ë 9=K¼K¼e¼v¼€¼Ì°8sºsº{º„º”º£º¯ºѺѺþº#»(»(»=»E»J»J»q»y»�»“»À»Ì»ß»ç»ì»¼¼¼¼¼!¼(¼(¼:¼?¼K¼Í$€…úSúSTT#T.TÎ0JRjQjQrQ�QŸQ°QÁQÆQÈQÏ0\d*R*R2ROR_RpR�R…R‡RÐ0nvêRêRóR SS+SLSkSnSÑ0S[ÊQÊQÒQïQÿQR!R&R(RÒ0emŠRŠR’R¯R¿RÐRáRäRæRÓ0wrSrS{S“S£S³SÔSóSöSÔ(øþééé"éLéQéÕLè÷¶ò¶òÒòÞòùòóó%ó+ó7óÖLø>ó>óZófó�óŠó—ó«ó±ó½ó× !Ežôžô³ôºôÄôÒôÒôÚôóôõõ:õQõsõ™õ»õÅõÏõÝõõõ ööö/ö9öRö`öböiöpö©öØP×çòò,ò?òKòfòwò„ò˜òŸò¥ò´òÙx[××0×D×Q×W×`×h×q×yדטטנ׺׿׿×Ç×Ð×ê×ï×ï×õ×ü×üרØ!Ø(Ø/Ø:ØAØWØgØiØ}؟صØÂØÙíØÙOÙ]ÙgÙ~Ù�ميٜٓÙÄÙ¿ÙßÙúÙÚÚ(Ú(Ú=ÚDÚNÚcÚlÚƒÚ‡ÚŽÚ�Ú‘Ú˜Ú²ÚÄÚÚHqúˆúˆ‰‰ ‰‰ ‰%‰+‰/‰3‰C‰H‰K‰ÛÔ/` ö ööö)ö<öKöUöaölözö‰öšö¶ö¾öÊöÒöÚöÚöåöçöüö÷÷.÷`÷q÷~÷™÷¶÷¸÷Ê÷Ó÷Ó÷å÷å÷ó÷ú÷ ø øøø ø#øÜDíúóó%ó/óEó_ójójó{ó‹ó�ó¸óÝ´aÊ#ø#ø.øOøVøeørø~ø�ø¡ø±øÇøÔøçøùù$ù-ù-ùFùiù‡ùºù¿ùÙùíù úú4ú=úEúRúdúvú–ú«ú¾úØúíúûû%û*û<ûNûfûvû‚û•û•ûÈûÓûÞûøûüüüü#ü2ü@üYüƒüŠü�ü¯ü¶üÛüÛüþü ý6ý8ý8ý=ýXý_ýjýjýxý�ý�ýžý¥ýºýºýËýËýÎýÖýÞl:Q ë ëë%ë4ëOëaëmë{ë„ë“ë¥ëÁëÓëøëìììì2ì3ì7ìßLRa;ì;ìFìMì\ìlì™ì£ì¼ìÃìÊì×ìàìäìàØ�Ï‹ï‹ï“ï—ï¸ïÅïÎïÕïëïþïð'ð3ðCðVðcðvð”ð�ðªðµðÀðÀðÍð×ðæðûðñ(ñAñEñGñLñQñZñlñsñsñ…ñ‹ñ²ñá€Ðì³ñ³ñ¾ñÆñÏñÚñåñìñòò ò3òZòpòŠò’ò®ò¹òÄòÜòçòîòùòþòóâ|ÿ33dgu}}“¤¹¾ÑÕã÷'69nãÜËþÛýÛýãýþþþ%þ6þFþYþfþyþ—þ þ­þ¸þÃþÃþÐþÚþÿþÿ0ÿBÿBÿbÿnÿ�ÿ´ÿ¹ÿËÿÏÿ×ÿ×ÿåÿðÿþÿ#/äøUss{†Ž¯¾ÇÞî!?HU`kp�••¢¬¿Ìåô#.6Q\q�›¤¾áü,77<JU\glsåøbœëìëìóìíí"í+í9íGíRíbíwíŒí£í²íÒíáíôíîî.î7îFîbîyî‰î–î£î®îÃîÒîäîéîôîÿî ï!ï3ïJïSï^ïeïpïzïƒï‡ïæÜû.»ó»óÃóÇóÐóÞóåóûóôô%ô0ô>ôMômô‡ôŸô£ô¼ôÔôãôçôòôþô õõ'õJõXõgõ�õ�õ¡õ®õÀõÀõÎõÕõçõçõõõõõöõ -öç`ãèãèëèúèéé+é6é?éGéIé[émétété†é‡é‹éè”9‹é‹é“é·éÆéÒéÝéëéýé êê!ê5êhêjênênêyê„ê“ê¢êÅêÐêÕêçêîêîêëëëé”Vwss{”£°¿Éâï 16CNYds‚”§°¾ÅÅÓÜê /3šPšP¨P¼PÂPëXäö&ü4üBüBüZü`üiüqü|ü†ü�ü¥ü¥ü¥ü¬ü¬ü­ü³üìT –š–šµš¸š½šÀšÉšÔšçšòšöšùšùšÿš››íD2?ñaña b"b/b/b9bSb]bîh#9VmVmlmnm}m‘m“mœmžmžm¡m½mým -nn$n.n9næ>æGæQætætæyæû,“šæåæåôåæææ1æ7æüx£½~æ~æ‡æ”æ£æ´æ¿æåæúæçç çç6ç6çJçTç\çeç}ç†ç†ç›çýÈÇõô1ô122 2#2#2,272A2K2W2Y2_2f2i2l2t2€2†2‹2‘2”2–2¡2§2­2¶2¶2¾2Ç2Í2Ö2Ö2Ö2Ö2Ü2ä2ç2÷2þ¼ÏúËIËI÷IJ.J5JAJMJTJbJ�J�J JªJ²J¹JÁJËJÓJçJøJ KK%K.K4K‚F‚J‚J‚J‚M‚O‚S‚S‚X‚f‚t‚‚‚‡‚‰‚‰‚Ÿ‚è“ɪªÄÜèø -€€€€€.€.€.€5€B€E€J€G€¤€»€¾€À€×€Ú€Ü€ä€ô€ô€ý€ ��*�8�A�H�M�M�M�S�g�$“S“SœS¥S«S°S0†ŽƒPƒP‡P”P°PÅPÊPäP8³S³SÃSÆSËSÎSÜSâSåSçSïSXaS[S[[[g[o[{[�[‰[“[¶[¶[È[Õ[é[ö[þ[G\�\’\’\¤\±\Å\Ò\×\æ\]"]/]5]:]:]L]Y]m]z]]Ž]Â]É]Ö]Ü]Þ]Þ]æ]æ]ó]^^!^H^U^e^j^p^}^ˆ^Ž^™^™^Ÿ^¨^³^Ã^È^ê^÷^_ _ _%_)_B_„bC_C_W_^_l_l_x_†_‰_�_°_°_³_µ_µ_º_º_¼_¼_¼_¾_Ç_Ê_Í_Ü_(óSóSüSTTTT @y… P PPPP3PVP]PlP{P€P‚P‚P -Èg•îíîí îî!î'î1î1î>îDîHîKîMîTî[îeîqîzîŽî£îÀî°îÕîÕî ï ïï ï6ïBïJïLïfï�ï�ïšïÐï ¼œÇ¦Ô¦Ô¸Ô¾ÔÌÔÌÔçÔñÔ Õ Õ%Õ)ÕCÕCÕVÕ_ÕjÕsÕ€Õ‰Õ›Õ¥Õ²Õ»Õ½ÕÃÕÌÕÒÕ÷ÕúÕÖ"Ö3Ö7Ö;ÖFÖFÖJÖJÖJÖyÖ TÈÙ~Ö~֌֓֞ÖÁÖÍÖ×ÖÝÖçÖìÖúÖ××× 4ŠÓÃÃ&Ã.Ã<ÃGÃKÃQÃWÃeÃzÃÅÜáçþÃÃÃÉÃàÃåÃëÃùÃýÃÄ,Ä<ÄAÄPÄ]ÄmÄ|ĉĜĢĩīľÄÕÄÜÄêÄüÄüÄÅÅ$Å&Å9Å;ÅNÅNÅjÅ�ŇÅ�ŘżÅX7‰ÞÀÞÀüÀÁ ÁÁ Á(Á.Á5ÁKÁYÁ]ÁbÁhÁvÁyÁ~Á�Á�Á‘ÁŸÁ¡Á³ÁµÁÂÁÇÁÎÁÐÁÝÁßÁßÁïÁýÁÂÂÂÂ0Â5Â<ÂEÂKÂQÂXÂ[Â[ÂkÂyÂ{£ÂÅÂÇÂÎÂÐÂÜÂÜÂðÂôÂô -Ãä6þ¾þ¾¿ ¿"¿6¿>¿E¿Y¿\¿^¿�¿�¿„¿”¿–¿–¿™¿›¿›¿ž¿µ¿Ê¿å¿ï¿ù¿ÀÀÀÀÀÀ'À-À<ÀIÀ]ÀjÀlÀ~À‹À�À�ÀœÀœÀ©À¬À¬À×À˜Z| 6 6*6-6E6E6G6X6e6p6u6�6�6›6Ÿ6Ÿ6Ÿ6Ÿ6ª6¿6Â6Í6Ñ6Ñ6Ñ6Ú6Ý6ë64&/„4„4˜4´4¶4Á4Ã4Ã4Ë4P0@Ì4Ì4ê4ð4õ4555:5<5J5P5S5a54AJd5d5z5|5†5“5œ5¡5«5HKY¬5¬5Æ5Ö5æ5ê5ì5ø5û5þ56H®¼úNúNOO.O:OCOEOQOTOWOaO4½Æ¬1¬1À1Â1Ë1Ë1Ø1à1å1í1 rv.½.½B½P½V½<¯ºrr"r%r.r>rCrWrhr8 w(w(‘(•(˜(£(Á(Å(Ê(å(l -Úq&¢&¢G¢I¢`¢i¢t¢¢�¢”¢¢¢­¢¸¢Ì¢×¢Ú¢à¢ä¢ç¢í¢ñ¢ô¢÷¢ -£ £'£*£B£R£U£[£^£q£†£Ž£‘£©£¹£¾£¾£Æ£Æ£é£é£é£í£ï£ï£ó£õ£õ£ù£û£û£ÿ£ÿ£ÿ£¤¤¤¤ ¤¤¤¤¤!¤$¤<¤P¤U¤[¤^¤c¤v¤‘¤“¤©¤©¤©¤®¤®¤°¤°¤µ¤¸¤Þ¤Þ¤Þ¤ö¤¥¥¥3¥Q¥V¥V¥n¥Œ¥Ž¥Ž¥¦¥Â¥Ä¥Ä¥Ü¥ø¥ø¥¦"¦'¦'¦?¦V¦[¦[¦s¦�¦”¦”¦˜¦°¦Î¦Ò¦Ô¦Ô¦Ø¦ð¦§§§0§5§5§M§d§k§p§p§ˆ§Ÿ§¦§´§Ä§è§ï§ñ§ñ§ÿ§¨0¨2¨2¨J¨J¨o¨�¨¯¨´¨´¨Ì¨Ì¨å¨ú¨©4©S©t©w©|©|©”©¨©¯©´©¿©¿©Å©Ð©â©ç©ñ©ªª4ª?ªEªXª`ªiªiªuªyªyª‚ª‘ªšªšª£ª­ªÉªûª -««%«-«9«C«C«[«]«h«€«‚«¢«¢«§«§«Ú«å«î«î«ú«þ«þ«¬¬ ¬ ¬(¬.¬J¬U¬m¬o¬z¬’¬”¬°¬°¬°¬À¬á¬ã¬ã¬û¬­­­,­C­M­R­h­h­­­‹­�­•­ž­­­¶­¶­¿­Ê­â­ä­® ®&®(®(®1®I®T®j®w®® ®¢®ª®Ä®Ç®Ð®Õ®ö®¯¯¯"¯-¯I¯\¯o¯w¯�¯�¯Š¯Ž¯¡¯Ö¯á¯á¯á¯õ¯þ¯°°J°J°L°L°d°n°v°v°°ƒ°–°Ë°Ù°ß°ò°ú°± ± ±±±,±a±o±x±}±}±ˆ±Œ±¤±»±Å±Ê±à±ø±ø±"²,²,²I²M²`²h²o²z²²†²†²‹²¾²Ò²ì²ÿ² ³³³#³I³Y³k³w³{³•³§³³³·³·³·³·³»³À³À³Ë³Ï³ç³þ³´ ´#´;´;´e´o´‘´–´–´–´¡´¥´½´Ô´Þ´ã´ù´ù´µµCµMµjµqµ|µ�µ¦µ¬µÆµØµàµâµøµ¶#¶3¶3¶`¶b¶Œ¶Ž¶¦¶±¶»¶Å¶Ì¶æ¶ï¶ï¶·0·3·N·N·N·S·X·‹·Ÿ·¹·Ì·Ñ·Û·å·¸"¸%¸<¸<¸<¸<¸F¸\¸o¸y¸~¸~¸–¸ª¸´¸Ä¸Ä¸Ý¸ñ¸ô¸¹¹¹'¹/¹8¹=¹=¹=¹V¹j¹m¹y¹�¹”¹”¹¬¹À¹Ê¹Ú¹Ú¹ó¹º -ºº$º*º=ºEºNºSºSºSºlº€ºƒº�º¥ºªºªºªºÂºÖºÜºìºìº»»'»-»@»H»Q»V»V»V»x»ƒ»™»ž»ž»³»³»³»Ï»Ï»é»ð»-½´i’ò}ò}~~~2~<~G~I~]~j~s~w~w~€~’~—~«~Ð~é~ð~ò~..000J__§ÔT¾Å¾ÅÜÅàÅãÅôÅÆÆÆÆÆ Æ&Æ*Æ-Æ3Æ6ÆIÆaÆiÆlÆ}ƑƘƢƦƹƼÆÈÆÍÆÓÆÛÆîÆÇÇÇ$Ç<ÇCÇCÇRÇ`ÇzdžǥǥǶÇÎÇÛÇàÇàÇñÇÈ ÈÈÈ"È6ÈMÈRÈRÈXÈiÈ}ȜȡȡȧȸÈÌÈëÈðÈðÈÉÉ"É'É'É8ÉLÉYÉ^É^ÉoɃÉ�ɒɒɒɒɒɣɻÉÊÉÌÉÌÉÝÉñÉúÉúÉÊÊ Ê Ê’ÊÌö%ü2ü2334373C3X3^3d3j3‰3Ž3–3–3¤3ª3¯3Ô3Ú3Ü3ë3ï3þ344 444+4144464F4J4^4a4d4f4u4x4„4H–”–”¦”´”Ĕǔò”•'•l•p•x• D1>«E«EÀEÎEÎEÖEìEðEðEôEüE  šž;9;9D9O9^9! Ÿ£c9c9l9w9ˆ9" îòÎèÎèØèëèðè#„a~ÎÎÎ!Î!Î0Î0Î?Î?ÎNÎ]Î]ÎlÎ{ΊΊΞΙΙΨÎÿÒ$hu‹àX÷XùXY0Y0YPYRYRYrYtYtY„Y†Y†Y–Y–YœYŸYÖY%€§Ã[Ö[ÖoÖvÖ~Ö…Ö Ö Ö­Ö¯Ö¯Ö¾ÖÀÖÀÖÍÖÏÖÏÖßÖçÖçÖðÖüÖ××+×+×/×V×&( ÛÎÛÎæÎúÎ Ï Ï'(V\^÷^÷i÷}÷Œ÷�÷(>â„â„ì„ø„……&…4…I…^…e…x…‹…�…¥…Ã…×…Ú…â…ò…†*†=†O†„†††—†£†¨†°†ĆÞ†‡‡ ‡H‡)P?OJ‡J‡N‡_‡h‡s‡~‡Ÿ‡¡‡¬‡·‡À‡ɇÚ‡í‡í‡ï‡*86@Ö�Ö�ê�ŽŽŽ%Ž'Ž/Ž+Do|C C G W m o } „ ‰ Ž • § § © ,X=O¶â¶âÀâÂâ×âßâýâã ã ã!ã*ã.ã2ã-@>Jûû -&5J^mv˜œ.(KQ££«¹ËÔÖ/ GKrbrb�b›b¡b0¬Ls¢b¢b´bÃbÉbÝbðbcc1cDc[crc‰c¡c¥c«c²c¶cÈcácïcöcddd d#d5dNd\dcdfdpd1”">l>lXlwlƒl–lœl­lµlºlÆl×lãlélìlïlòl÷lùlýl mm(m.m1m4m7m7mAmDmVm2|Je&í&íEíSícíoíuí~í…íŒí‘í�í¡í«í«í²íµí»í»íÅíÓíÚíÚíÚíèí3Lû -cKcKrK€K€KŠK”K±K¼KÅKËKÌKÒK4d—ìQQ'Q0Q9Q?QKQWQ_QeQkQsQ�QŒQ”Q³QÈQÖQâQâQçQìQúQRRR RRR$R,R5R5R=RLRPR]RjRoRyRyR‚R‰R•R R¼R¼R¼RÄRËRÒRÙRàRçRîRõRüRS SSS$S2SD&#T#T,T:T:TÂHÂQ  Ä£À£À«À´ÀÄÀÓÀßÀÁÁÁÁ#Á#Á0ÁFÁRÁZÁbÁtÁ¡Á­ÁÀÁÈÁÍÁÍÁÙÁÙÁëÁòÁòÁ ÂÂR€é›®›®¹®È®Þ®ð®¯ ¯¯¯¯'¯3¯6¯9¯E¯J¯S¯X¯_¯u¯u¯‹¯S }¡ì6ì67 7 77'7.74747>7G7G7M7Q7T7^7i7i7x7�7�7Œ7‘7”7—7š7�7¤7¤7¤7¤7¤7²7T�a�ÖÚÖÚßÚíÚíÚÛÛ*ÛCÛ_ÛnÛ‡Û£Û©Û·ÛÅÛÓÛáÛãÛùÛÜ%Ü;Ü;ÜAÜU0ÊÒcccc�c�c²c¿cÆcÌcëcV(öüÃeÃeÝeðeûef fW,ý f f%f8fCfIfWfX4ÓÜëcëc d%d:dGdNdTd[dzdY$ ””4”n”„”’”ZLWf.o.o7oGoGoeoko{o�o‡o—o™o™o™oÀo[,z�ÎäÎäÒäååå%å\xRlÛÛòü $?R_‰¥ªµ¿ÌÖäêöý ?  \ No newline at end of file +· +Ú +ç +ò +   ) R W ] ƒ � “ – £ ® ¼ Í Ý å    + 0 D \ o ‚ ™ « ½ ½ é ÿ   k<5@ôwôw xx"x'x2xGxJxOx[xl0 ÒOÒOÖOêOêOþOPPm¼ +5A¼A¼L¼P¼t¼}¼Œ¼˜¼¤¼üÛ¼ë¼ ½ ½*½,½,½M½O½O½p½r½r½~½~½†½†½’½¦½¶½¾½¾½н×½×½é½ö½¾¾%¾n\Qdªvªvºv¼vÇvÌvßvèvívòvwwww woŒt“)1:EPWm�ŠžÅÛõý9DOgry„‰œpxŒ¦ÓÓ-Ó2Ó5ÓBÓHÓKÓSÓ\ÓkÓsÓsÓ~Ó~Ó†ÓˆÓˆÓ�Ó’ÓžÓq0 éiéi÷ijjj j&jr ^å^åbåpåråsL .Ú€Ú€ò€ô€þ€'�5�7�L�W�]�r�t0Á �:�:©:«:®:º:º:Æ:Ó:à:è:í:ó:õ:ù: ;;';2;7;7;>;>;I;I;h;v;�;ƒ;‰;‹;�;�;�;š;œ;¤;ª;¬;¬;¸;Â;Å;Å;Å;Å;È;Ó;Û;ß;í;ux83343Q3X3d3s3y3}3’3 3¦3¬3¯3¹3v¨5[]]2];]C]R]W]\]l]q]Œ]Œ]“]™]Ÿ]§]³]¹]»]»]Â]È]Î]Ö]â]è]ê]ê]ú]ü]ü] ^V^w M{I{I•I£I¼IÇIÚIçIùIJJ"J2J=JLJWJsJsJwJ‚JŽJ�J�J�J–J–J™J£J£J¾JÈJÈJÍJÝJðJöJÿJ KK&KJKWKWKiKiKiKKŒK£K¬K²KÂKÆKÆKËKËKâKx,07¬}¬}µ}¿}À}Å}yp\tqªqª‹ª�ª·ª·ª¾ªÀªÀªΪЪЪܪܪåªíªôªÿª«7«7«7«D«zpÉá ® ®®$®(®.®:®F®R®R®^®^®h®w®—®±®±®±®±®·®·®Ç®É®É®ò®{$‚‡žàžà¢à¯àäàðà|<7BUŽUŽiŽiŽ…Ž�Ž�ޤަޮŽ},*P*P.PBPFPFPJP~`bYY YY Y+Y1Y9YCYfYfYxY…Y™Y¦Y®Y¼Y÷YZ=ZBZBZTZaZuZ‚Z‡Z–ZËZÒZßZåZêZêZüZ [[*[/[>[r[y[†[Œ[Ž[Ž[–[–[£[¸[¾[Ñ[ø[\\\ \-\8\>\I\I\O\X\c\s\x\š\§\´\¹\¹\Õ\Ù\ò\, + +P +PP"P&P&P*P€\S¦æ)æ)ñ)ü) **5*D*U*^*u*�*�*°*À*È*ä*ù*+ +1+6+@+M+_+x+‡+‡+®+½+Ç+ä+ï+÷+,,2,;,U,d,p,y,‹,‘,¦,Á,Ì,Ô,ñ,ü,ü,----+-=-P-Y-Y-l-|-„-„-„-’-�-¤-¯-°-Ä-È-Ï-�DÛè¡ß¡ß³ß½ßÓßíßøßøß àààGà‚@|ˆ»M»M¿MÆMÆMãMN NN+N0N2N2Nƒl£ºY‚Y‚m‚y‚‡‚–‚–‚¾‚á‚ì‚ö‚ÿ‚ ƒƒ$ƒ@ƒFƒJƒRƒVƒ^ƒ„œDg™´™´¡´¥´±´Á´Ê´Ù´å´î´µµ-µVµbµmµ‹µ‹µ²µ´µ´µ´µ̵̵Þµåµÿµÿµÿµ¶¶¶*¶8¶…øQ&QDQ^QxQ|QŽQ—Q Q§Q°Q¹QÑQàQøQ RRR+RCRVR_RsRwR}R†RŒR—R™RœR¤R¹RÎRÑRÜRâRêRîRSS SSS)S/SASHSJSšS†<ØãÃ1Ã1ã1ó1ø12@2d2k2r2w2ƒ2‡lýY†Y†m†v†‡†¯†Ò†á†î†ù†‡)‡<‡<‡L‡L‡Y‡k‡u‡}‡ˆœ’µî>î>????5?F?O?d?i??{?‹?©?©?Á?Ã?Ã?Û?Ý?Ý?í?ï?ï?ÿ?ÿ?@@ @l@‰HLZÎ;Î;â;÷;<<<!<%<+<2<5<F<ŠØ÷)##6=[[yy—¬¸âèí/Li†£ÀÝú4Qn‹¨Åâÿ 9 V s � ­ Ê ä þ  2 J J J Y º"‹< +)j)j=jLj\j_jajijljtjŒ(øþ†ä†ä�äšäÄäÉä�l’©¯>¯>Ë>Î>Þ>á>ä>ñ>ö>ÿ>??$?&?)?9?Ž$ ËXËXåXY�P—§{'{''Ž'“'Ÿ'«'·'À'Ì'Ó'Ø'å'ü'((�X�¢¡�¡�¶�À�Ä�Ä�ì�‚‚8‚I‚K‚K‚S‚‘,’™ž¾ž¾²¾Ä¾É¾Ú¾à¾¿’x£½öáöáÿá ââ,â7â]ârâxâ~â…â’â®â®âÂâÌâÔâÝâõâþâþâã“8½ÇÓ;Ó;ï;ü;<<</<”(¿Åîšîšöš››• ³×ƒ0ƒ0‘0–0ž0¦0³0Å0Ï0Ô0æ0û01'1=1O1V1V1l1y1y1�1ž1ž1¥1¬1³1¸1À1–8¢¬iiw‡¨¾ÇÍ—P:J�n�n¥n±n¹nÀnÉnÏnÒnÒnænónùnüno˜øD~N�N�h�x��‡�Ž�ª�Å�Å�Ë�Ô�Ý�æ�ï�ñ�ú�žžžžž"ž"ž+ž4ž9ž9žBžKžPžPžYžbžgžgžgžpžyž~ž~žŠž“ž˜ž¯ž³ž³žÍžÏžÏžÝžážSŸ™,-tzfzf�f“f¢f¬f±f±f½fÄfÉfÓfçføf gg)gYgpg†g‘g±g³g¾gÈgÓgÝgègògýg hh h h*hChkhvh�h•h—h¡hµh¼hÃhÅhÍhèhšX�¯Q¬Q¬Y¬e¬n¬}¬‰¬’¬™¬§¬À¬ñ¬ñ¬­ +­ +­­­!­›ÈÝ 0202L2R2\2_2_2h2s2}2‡2“2•2›2¢2¥2¨2°2¼2Â2Ç2Í2Ð2Ò2Ý2ã2é2ò2ò2ú23 333333 3#333œ,{‚q«q«z«†«Œ«‘«–«�8fpææôþ#ž„c€ó\ó\]]]])]7]:]A]`]`]c]e]e]j]j]l]l]l]n]w]z]}]Œ]Ÿ,ÛâÔ{Ô{Ý{ç{è{í{ $(-1x1x?xGxYx_x¡<@Kùxùxyyy"y.y3y7y;yEy¢ ÿÎäÎäÒäóäõä£t.�‡�‡‘‡�‡¦‡·‡߇ˆˆˆ2ˆ)ˆSˆgˆmˆoˆqˆwˆyˆ†ˆ‰ˆ‘ˆ¤h^tɉɉë‰ñ‰ú‰ú‰ŠŠ ŠJŠUŠ]Š_ŠqŠqŠqŠ‚Š�Š�Š�Š¥Hs�Š…Š…“…˜…™…¨…°…µ…»…¿…Ã…Ó…Ø…Û…¦<ðû””2”!”A”i”§€�¹aŒaŒŒŽŒ–Œ©Œ»ŒÆŒÑŒçŒëŒûŒ ���_�d�d�†�†���½�Ã�å�¨8¸Â2IO`v•§§±© («3«3»3Å3Ê3Ï3Ï3Þ3ã3è3ò3ü34 44444"4$43454A4K4Y4^4m4t4v4v4v4|4ª€~š†Ó†Ó�Ó’Ó©Ó©ÓÀÓÔÓòÓôÓ Ô Ô*Ô;ÔRÔRÔiÔ}Ô›Ô�ÔµÔÈÔÈÔËÔ$Õ«4<EÀ4À4Ô4ð4ò4ý4ÿ4ÿ45¬XÑVŸVŸrŸ‚Ÿ‰Ÿ‘Ÿ˜Ÿ´Ÿ¸Ÿ×Ÿ×ŸùŸùŸùŸ          # % % . 0 0 9 ; ; D F F O O R W W W Z ] ] w ‡ › « « ­ ­ ¶ ¹ ¾ ¾ Ç Ç Ì Ì Õ â ç ç ð ¡¡ ¡ ¡¡¡#¡'¡¢­`UiAA#A.A4A?AAARA_AeAeAqA®0?G«C«C´CÂCÈCÚCÜCÜCáC¯(|‚’M’M¦M±MºM½MÅM° \€É¹ɹѹÚ¹ê¹ù¹º'º'º<ºDºIºIºVºlºxº€ºˆºšºǺÓºæºîºóºóºÿºÿº»»»*»/»6»±°.V¹·¹·Á·Ê·Ú·é·õ·¸¸D¸i¸n¸n¸ƒ¸‹¸�¸�¸·¸¿¸ǸÙ¸¹¹%¹-¹2¹G¹I¹I¹U¹U¹g¹n¹n¹€¹…¹‘¹²8LVŒxŒxœxŸx¡x¦x¯x²x·x¿x³ ‹�)-´(£Q£Q¬Q¶QÁQÉQÎQµ<(ZZ)Z;ZBZFZIZTZdZgZoZ¶ˆ1OvVvVŒV“VžV©VÂV×VÝVëVðV÷VWW WWW$W2W6W9W> >>>>>)>/>8>?>C>C>C>C>C>J>N>R>U>X>\>a>k>~>„>�>—>›>­>Ù0$,2f2f6f;fUfnfsfufÚ\7JýZýZ [[[$[-[0[7[:[B[I[I[Q[ÛH4B³³»ÏÓë*6DKXuyÜ\^/^/l/v/}/ƒ/Œ/š/¥/§/´/Ã/ã/ì/õ/û/0Ý<±¼UrUrirlrur…rŠržr¯rÞ|#rere¨eœe¸e¾eÍeÒeãeçeëeõeúe +ffff,fß° 1u…u…~…˜…˜…ž…ž…¤…¤…¤…¤…¤…¤…¤…¤…©…©…µ…»…»…Á…Æ…Ï…Ï…â…â…â…â…â…â…è…è…è…è…ê…ê…†à,„‹ôyôyýyz +zzzzáD -a·a·o·u·�·�·”·”·”·¡·¡·­·­···â4›¤5€5€>€L€`€h€n€p€p€u€ã /3êPêPøP QQäHâðù®ù®¯¯¯$¯0¯8¯U¯d¯j¯m¯y¯å$ÆÜÆÜÊÜÎÜÐÜæDÍÚœ{œ{ª{¶{»{»{È{Í{Í{Ó{çhC™µŽµŽÏŽÑŽêŽöŽúŽ�1�1�1�1�1�=�I�P�^�b�m�}�‡�Œ�Œ�•�¥�ª�ª�»�À�Ã�Ï�à�ð�ò�ò�ò����.�.�4�@�L�S�W�g�j�v�‡�˜�š�š�°�²�²�È�È�Î�Ú�æ�í�ñ�‘‘‘!‘3‘5‘5‘5‘:‘~‘èxš´…‘…‘�‘¬‘²‘µ‘Бë‘ë‘õ‘÷‘÷‘’’’’’’’’’’’ ’2’é UyþÞþÞßß%ßFßXßZßx߇߇ߜߞߴßÌßÓßÓßÔßÔßâßíßüßþß +àà%à-à@àêHŒšzz0z7zIzLzLzSzmzpzuzwzzë8óýXX;XFXTXLXgXxXxXxX„Xì@ƒ�ñ€ñ€ÿ€'�J�W�d�o�‘�™�Ÿ�í(=Cæœæœóœ�4�H�î ßãÞãÞãèãûãäï`Óçúcúcdddd d'd*d>dDdIdWd^dldldldldndndð$§¬äzäzízõzûz{ñ0”œ!¬!¬0¬9¬C¬G¬G¬M¬òdµ +.M.MPMTM\MmMmMƒM‹M›M›M§M¶M»MÔM×MÜMáMñMüMNN NN-N4N>NDNGNUN[NkN‚N„N‡N‡N‰N£N¯NµN¾NÊNëNïNûNO OOO O6O6O6O;OGO_OcOnOqOtOzO}O‹O¡O¡O¡O©OµOÍOÑOÜOßOæO÷O÷OþOPó4 (twtw‚w„w‰w’w•wšw wôäJ00%0+070E0H0]0g0t0Ÿ0¢0¦0±0º0Þ0æ0 11+171C1C1W1Z1j1w1€1�1’1¥1¯1¿1È1Ø1ß1ß1ß1æ1í1ò1ø1ú12õ$R—CDCDKDXDgDlD€D•D®DÇDÏDîDEEcEeEiEö€]–×–×°×Ä×Ñ×××à×è×ñ×ù×ØØØ Ø:Ø?Ø?ØGØPØjØoØoØuØ|Ø|ؚؒءبدغØÁØ×ØçØéØýØ Ù5ÙBÙ…ÙmÙžÙÏÙÝÙçÙþÙÚÚ +ÚÚÚSÚDÚ?ÚdÚ_ÚzÚ�ÚžÚ¨Ú¨Ú½ÚÄÚÎÚãÚìÚÛÛÛÛÛÛ2ÛDÛ÷@ãïô{ô{||&|3|3|7|=|ø0W_ÄxÄxÒxáxèxøxüxÿxyù, à(à(ò(ý( )!)*)úl�˜“]“]±]Å]ê]ï]þ]^ ^$^$^1^@^H^T^e^m^y^“^—^—^­^û4W` 5 5¶5¸5Â5Ï5Ø5Ý5ç5ütIb6I6IDIMIRIkIoItI‹I™I™I¸IÔIÚIèIèIôIýIJJ Jý<µÀ/:/:F:P:X:g:u:{:~:ˆ:þ,›¢¶á¶á¿áÉáìáìáñáÿ”\}ùýùýþþ)þ6þEþOþhþuþ‡þ–þ¥þ·þ¼þÉþÔþßþêþùþÿÿ-ÿ6ÿDÿKÿKÿYÿbÿX®®ÂÌÓâûû '<>ACCCKP­½{{{){/{4{4{>{B{G{G{O{H­»ÑÑéì +4BNXky€Œ,þ»c»cÕcècócùcd8<Fêuêuþuv v)v,v4v<›¦„z„z˜z¦z±z¼zÄzÌzÔz×zßzŒ­ 1Å1ÅOÅOÅVÅTÅdÅƒÅŠÅ¢Å Å°Å¿ÅÆÅÉÅÙÅíÅíÅòÅÆÆ(Æ>ÆZÆ{ƗƳƷƼÆÔÆÖÆæÆúÆÇÇ Ç/Ç=ÇDÇPÇVÇfÇzNJǞǞÇËÇÚÇÞÇäÇÈÈ.È.È:ÈNÈbÈhÈsȃÈ�ȗȬÈÅÈÈÈÈÈÜÈìÈìÈþÈþÈÉ Ì<juééý€€€&€2€8€>€È(VYkYkqk}k k¢k¢k¯k¹k¿kÐkÒk×k×käkëkþkll l l!l#l*l=l?lAlHl[l]l_lflyl{l}l‚l‚l‚l‚l‡l‡lŽl”l—lm 8OYé¥é¥ó¥û¥ ¦!¦)¦,¦.¦2¦ +PÂÒArArUr^rwrˆr­r°rÇrÑrÞrÞràrèr H¾ÌT{T{b{n{s{s{€{�{”{”{š{ Haoè5è566#6&6(65696<6F6 l:Q‘ä‘äœä«äºäÕäçäóäå +åå+åGåYå~å‡åœå£å£å¸å¹å½å –±À±ÀÓÀÖÀÝÀóÀÁ +ÁÁ4Á4ÁBÁHÁPÁ\ÁaÁaÁhÁnÁzÁÁ†Á�Á”ÁžÁªÁ¼ÁÁÁÄÁËÁËÁÝÁíÁôÁ Â6ÂIÂMÂh€´´»ÂÅÂËÂÍÂÍÂÍÂÍÂÍÂÍÂÍÂáÂèÂëÂüÂà ÃÃÃÃÃ$Ã&Ã&Ã&Ã)Ã+Ã+Ã2Ã5Ã<Ã<Ã?ÃDÃOÃcÃjÃpÅÈççìììóýÃÅÃÅÃÅÃÐÃÜÃ߯ÄxÌæžžº½ÂÍÕòý  1 1 9 V a f f n — ¢ § § « º œ`ƒ y y'y.y9y?yByByIyOy`yeyhymyvyvyvyzy„y“y›y°y»yÍyÑyÓyåyéyéyéyóyŒp�H6H6f6i6�6�6ƒ6”6¡6¦6¬6É6Ì6×6Û6Û6à6û6þ6 7 7 777'7Ô +;bwbw|ww‚wŒw’wžw¥w¬wµwÂwÐwÙwÜwâwèwïwöwøwxxxx$x3x?xBxExMxRxhxtxwxzxzxzxzx}x…x�x™xœx®xd 5–›–›¾›Æ›à›ë›î›ô›ü›œ œ-œ/œ=œJœZœnœpœpœ€œ�Rr‚„‚„Œ„’„™„Ÿ„µ„Ú„ï„ï„ô„û„…,…E…J…N…]…_…j…u…€…€…„… UYÎÎ*Î9ÎA΀ ² ²'²6²L²^²s²y²~²„²‡²•²¡²¤²§²³²¸²Á²ƲͲã²ã²ù²@v‚A€A€J€r€•€¢€¯€º€Ý€å€ê€Ìh—fèfè�è‹è™èŸè©è©è¶è¼èÀèÃèÅèÌèÓèÝèéèòèéé8é(éMéMéXé�éƒé�é—é®éºéÂéÄéÞéùéêêHê|ÂÝÏ?Ï?í?ö?@@@@!@-@3@=@?@K@V@`@k@r@v@~@@@�@ì¥Üu€u€�€—€Ÿ€®€¿€Á€Ø€ê€æ€ù€ ����%�C�?�R�b�y�Š���’�˜�¸�Î�Û�â�í�ñ�ö�‚ ‚‚‚‚*‚;‚@‚L‚W‚i‚,‚‰¾¾2¾D¾J¾P¾V¾P0@ééôû +!Gbip}†Š(yñ¦ñ¦ú¦ÿ¦§,§,§1§\õ©�©�·�¼�Ä�Ë�Ð�ø��(�5�@�]�e�l�l�o�u� ,“š^á^álá‡á‘á–á©á¯á ¼ÑüsGsGŸG¥G¾GÖGÝGéGõGüG +H)H)HHHRHZHaHiHsH{H�H H±HÆHÍHÖHÜHäHäHèHI!4#AÐAÐJÐOÐXÐaÐgÐgÐlÐ"< ËË*Ë=ËJËVË^ËzËŠË�Ë�Ë#4ÓÜè1è1ü1þ12222!2)2$,Y`‹8‹8™8›8­8µ8º8À8%DJW9Ú9ÚFÚTÚ\ÚdÚrÚzڂڊڒڜڡÚ&øbœqæqæyæ‰æ™æ¨æ±æ¿æÍæØæèæýæç)ç8çXçgçzçˆç�ç´ç½çÌçèçÿçèè)è4èIèXèjèoèzè…è’è§è¹èÐèÙèäèëèöèé é é'(X^ÖñÖñáñõñòò(0]e¾¾ÇÑ×Ýßßä)@ áÿáÿõÿ,=GQ[a*h¡{¡{ª{¸{Ç{Ò{â{ò{||!|0|@|P|q|s|‚|‘|¡|±|Ú|Ú|ß|+ˆ Ë=Ë=ë=õ=ø=>>>!>+>>>H>J>i>n>|>Š>•>£>±>»>»>»>Ë>,PÙé†ì†ì¤ì·ìÃìÞìïìüìííí,í-$mrMpMpQpapfpvp.H¯½JOJO`OeO~O‰O’O”O O£O¦O°O/D&ÓQÓQÜQêQêQìQòQýQýQ R RR0(£©rbrbvb�b†b�b’b1D.;ÞæÞæìæúæúæç!ç;ç;ç?çEç2d>SñÐñÐ +ÑÑÑÑ&Ñ&Ñ3Ñ3ÑBÑQÑ`ÑrчёѠѠѪÑ3ÔT>Æ>Æ\Æ`ÆcÆtƇƑƗƛƞƠƦƪƭƳƶÆÉÆáÆéÆìÆýÆÇÇ"Ç&Ç9Ç<ÇHÇMÇSÇ[ÇnLjÇ�ǓǤǼÇÃÇÃÇÒÇàÇúÇÈ%È%È6ÈNÈ[È`È`ÈqȅȌȑȑȢȶÈÍÈÒÈÒÈØÈéÈýÈÉ!É!É'É8ÉLÉkÉpÉpÉ�ɕɢɧɧɸÉÌÉÙÉÞÉÞÉïÉÊÊÊÊÊÊÊ#Ê;ÊJÊLÊLÊ]ÊqÊzÊzʀʀʉʉÊË44£¬ÅÅÅÅ Å"Å&Å,Å5l 7Ë>Ë>é>ì>ô>???$?8?B?D?c?h?v?„?�?�?«?µ?µ?Ã?6ˆ7UÃ?Ã?é?í?ð?@ @ @/@8@J@S@Z@_@i@r@|@@‚@‡@™@§@¸@Ì@Ú@ê@ê@ü@7x1”1”C”R”U”v”–”¦”˔۔䔕 •/•5•E•E•W•Z•_•_•o•u•x•Û•8ˆZx9¦9¦P¦S¦S¦d¦m¦w¦{¦~¦‹¦”¦”¦ž¦ž¦¤¦«¦¯¦¸¦¸¦Á¦ƦÒ¦ä¦æ¦ð¦9XÉÛ g g)g6g;gGgagggtgg†g�g“gŸg:X¶Èqfqf‘fžf£f¯fÉfÏfÜféfðfùfýf g;$ ž”ž”´”•< ^bFÛFÛJÛSÛUÛ= îòFäFäPäcähä> áåe‹e‹y‹‹‹“‹?(6<†œ†œ“œ¨œÍœáœ@0y�Ö½Ö½ð½ó½ó½ü½ ¾¾¾AHª¸µ‰µ‰Ð‰í‰÷‰þ‰þ‰Š"Š$Š$Š.ŠBÌ NA¤A¤S¤b¤x¤„¤‰¤§¤§¤°¤ŤÚ¤â¤î¤ú¤¥¥¥ ¥ ¥'¥.¥7¥9¥9¥@¥K¥j¥j¥z¥�¥Š¥›¥›¥›¥¦¥­¥²¥¹¥Ó¥Ö¥ä¥CXºÌé�é� ŽŽŽŽ#Ž#Ž4ŽAŽKŽNŽQŽWŽeŽD¨Ci‘~‘~º~¿~É~Ó~Ý~é~é~ñ~#(1499Qfilry}¬°¸ºÅÅÊÊÙéE<—¢‰Ä‰Ä‘ĕĤĴÄÞÄåÄòÄøÄüÄFD�£�£Š£�£�£�£¯£·£¼£È£ΣУУÕ£G8�™¢i¢i¦i±i¼iÃiËiði*jHL••&•4•D•G•r•–•§•ì•ð•ø•IØ9*j*jDjKjOjSj^joj}j‘j�j j©j´jËjÐjÙjÜjæjîjñjôjk k'k>kEkNkQkSkckfkhkokkƒkŠk�k­k´kÆkJ<ðûõ‹õ‹ Œ ŒŒ8Œ<ŒLŒYŒK �…9»9»S»e»o»LH -^æ^ærætæ{æ†æ¯æ´æËæÐæÐæÔæÜæM@v‚ÝXÝXíXýXYYY Y)YNHçõ¾ ¾ Ø å õ  + + + +4 +7 +A +OP-Y-YAYcYcYoYzY~Y…Y�Y”YœY�Y¥YP ¾Â²O²O»OÍOQt/aal{Š˜³Óó"BUfo|“®ÃÊÊßàäRhs‰&&#&A&R&b&i&�&ž&±&¸&É&á&ã&ã&ö&' '!'!'#'S0$,16JU^hT@ a§a§j§p§y§�§—§œ§¨§®§°§°§µ§U4ÔÝ›a›a¹aÕaìaøaþab b*bV,­´ï9ï9ø9:':':,:WLRaÁåÁåÌåÓåâåòå æ)æBæIæPæ]æfæjæX`iâiâqâ€âŒâ â±â¼âÅâÍâÏâáâóâúâúâ ã ããYTFWÃÃÇÞõ &OZu|ƒŽž¯¶Z8$Û*Û*ä*î*ö*+++++ \ No newline at end of file diff --git a/Kernel/Kernel.PRJ b/Kernel/Kernel.PRJ index e669707..3e20318 100644 --- a/Kernel/Kernel.PRJ +++ b/Kernel/Kernel.PRJ @@ -14,7 +14,12 @@ #include "KStart" #include "KUtils" #include "KMathA" +#exe {OptOn(OPTf_KEEP_PRIVATE);}; #include "/Compiler/CompilerA.HPP" +#exe {OptOn(OPTf_EXTERNS_TO_IMPORTS);}; +#include "/Compiler/CompilerB.HPP" +#exe {OptOff(OPTf_EXTERNS_TO_IMPORTS);}; +#exe {OptOff(OPTf_KEEP_PRIVATE);}; #include "KernelB.HPP" #include "KExts" #include "StrA" @@ -37,38 +42,22 @@ #include "StrScan" #include "KDefine" #include "Display" -#include "KeyDev" #include "KMisc" #include "KDbg" -#include "Except" +#include "KeyDev" +#include "KExcept" #include "KbdMouse/InputPointer" #include "KbdMouse/Keyboard" #include "KbdMouse/Mouse" #include "KbdMouse/Message" - #include "QSort" #include "Task" #include "SrvCmd" -#include "BIOS32" - +#include "PCIBIOS" #exe {Cd("Dsk");}; -#include "DskStr" -#include "DskCache" -#include "DskATA" -#include "DskATAId" -#include "DskA" -#include "DskAddDev" -#include "DskDir" -#include "FileSysISO" -#include "FileSysRedSea" -#include "FileSysFAT" -#include "DskB" -#include "DskCFile" -#include "DskC" - +#include "Dsk" #exe {Cd("..");}; #include "MultiProc" - #include "EdLite" #include "PSect" #include "KEnd" diff --git a/Kernel/KernelA.HPP b/Kernel/KernelA.HPP index f9bc97e..746260a 100644 --- a/Kernel/KernelA.HPP +++ b/Kernel/KernelA.HPP @@ -6,10 +6,10 @@ extern class CDoc; extern class CCPU; extern class CHashClass; extern class CHashFun; -extern class CExeImportExport; +extern class CAOTImportExport; extern class CHeapCtrl; -extern class CExeHeapGlbl; -extern class CExe; +extern class CAOTHeapGlbl; +extern class CAOT; extern class CDC; extern class CSrvCtrl; extern class CIntermediateCode; @@ -36,6 +36,7 @@ extern class CIntermediateCode; #define MIN_U64 0 #define MAX_U64 0xFFFFFFFFFFFFFFFF #define INVALID_PTR MAX_I64 +#define STR_LEN 144 //(Int to F64 conversion is signed) //Turn off 80-bit float constants with $LK,"OPTf_NO_BUILTIN_CONST",A="MN:OPTf_NO_BUILTIN_CONST"$. @@ -109,7 +110,7 @@ I64i union I64 U32 u32[2]; }; -#help_index "Math/Complex" +#help_index "Math/Complex;Data Types/Complex" public class Complex { F64 x,y; @@ -121,36 +122,36 @@ public class CQue CQue *next,*last; }; -#help_index "Math/Data Types;Graphics/Data Types" -public class CD3I32 //Three dimensional pt +#help_index "Graphics/Data Types/D3I32;Math/Data Types/D3I32;Data Types/D3I32" +public class CD3I32 //Three dimensional I32 pt { I32 x,y,z; }; -public class CQueD3I32 +public class CQueD3I32 //Que of three dimensional I32 pts { CQueD3I32 *next,*last; CD3I32 p; }; -#help_index "Math/Data Types" -public class CD2I32 //two dimensional pt +#help_index "Math/Data Types;Data Types" +public class CD2I32 //Two dimensional I32 pt { I32 x,y; }; -public class CD2I64 //two dimensional pt +public class CD2I64 //Two dimensional I64 pt { I64 x,y; }; -public class CD3I64 //three dimensional pt +public class CD3I64 //Three dimensional I64 pt { I64 x,y,z; }; -public class CD2 //two dimensional pt +public class CD2 //Two dimensional F64 pt { F64 x,y; }; -#help_index "Math/Data Types;Math/CD3" -public class CD3 //three dimensional pt +#help_index "Math/CD3;Data Types/CD3" +public class CD3 //Three dimensional F64 pt { F64 x,y,z; }; @@ -320,8 +321,8 @@ public class CMathODE #define RFLAGf_VINT_PENDING 20 #define RFLAGf_ID 21 -#define SYS_START_RFLAGS 0x0000 -#define SYS_NORMAL_RFLAGS (1<, works + I32 cur_col,old_cur_col, + line_start_col,top_line_num, + ext_ascii_val,ext_ascii_cnt, //Like , dollar_buf_size,dollar_buf_ptr; - U8 *dollar_buf; //When entering $$ commands, it buffers them until the end $$. + U8 *dollar_buf; //When entering $$ cmds, it buffers them until the end $$. CTask *win_task,*mem_task,*owning_task; I32 page_line_num,undo_cnt, @@ -1341,8 +1345,9 @@ public class CDoc //Linked Text File header updates_cnt; CEdFindText *find_replace; - U8 *cur_sprite; - I64 cur_sprite_elem_num; + U8 *cur_sprite;//Set cur_sprite use (ip.pos.x,ip.pos.y) as input. +//Output is nearest. See $LK,"*_cur_elem_num=",A="FF:::/Adam/Gr/SpriteEd.CPP.Z,*_cur_elem_num=doc->"$ and $LK,"::/Demo/Graphics/Pick.CPP.Z"$. + I64 nearest_sprite_elem_num; CEdFileName filename; I64 file_attr; @@ -1357,12 +1362,12 @@ public class CDoc //Linked Text File header CDoc *parent_doc; //(When browsing deeper, opening deeper docs.) U64 desc; //8 characters. See $LK,"DocBorderLstDraw",A="MN:DocBorderLstDraw"$(). - CDocBin bin_root; - CDocSettings settings_root; - CDocUndo undo_root; + CDocBin bin_root; + CDocSettings settings_root; + CDocUndo undo_root; I64 user_data; -U0 pad;#assert !($$&7) //(compiler lags one token) + U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Windows" @@ -1397,7 +1402,8 @@ tries to do something. #define WIF_FOCUS_TASK_GRAB_SCROLL 0x02000000 #define WIG_DBL_CLICK (WIF_FOCUS_TASK_IP_L_D|WIF_FOCUS_TASK_IP_R_D) -#define WIG_TASK_DFT (WIF_FOCUS_TASK_MENU|WIG_DBL_CLICK|0xFFFF-WIF_SELF_DOC-WIF_SELF_ODE) +#define WIG_TASK_DFT (WIF_FOCUS_TASK_MENU|WIG_DBL_CLICK|\ + 0xFFFF-WIF_SELF_DOC-WIF_SELF_ODE) #define WIG_USER_TASK_DFT 0 #define WIf_SELF_FOCUS 0 @@ -1449,7 +1455,8 @@ public class CWinMgrGlbls // Use $LK,"OptOn",A="MN:OptOn"$() $LK,"OptOff",A="MN:OptOff"$() //You might need to do #exe {OptOn();} -//Note: The #exe statement is lexed-ahead, so it takes effect earlier than you might expect. +//Note: The #exe statement is lexed-ahead, +//so it takes effect earlier than you might expect. #define OPTf_ECHO 0x00 #define OPTf_OPT_TRACE 0x01 #define OPTf_COMPILE_TRACE 0x02 @@ -1492,7 +1499,8 @@ public class CWinMgrGlbls #define TY_DISP 0x30 #define TY_SIB 0x40 #define TY_RIP_DISP32 0x50 -#define TY_RIP_DISP32_IMPORT 0x60 //not implemented--requires storage for glblvar struct in intermediate code +//Not implemented. Requires storage for glblvar struct in intermediate code. +#define TY_RIP_DISP32_IMPORT 0x60 #define TY_STK 0x70 #define TY_MASK 0xF0 @@ -1515,8 +1523,8 @@ public class CWinMgrGlbls #define ICF_R_WAS_STK 0x000010000 #define ICF_A1_WAS_STK 0x000020000 #define ICF_A2_WAS_STK 0x000040000 -#define ICF_PUSH_CMP 0x000080000 //for 50last_lex->cur_lfn->line_num);} -#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);} -#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);} +#define __LINE__ #exe{StreamPrint("%d",\ + Fs->last_lex->lex_include_stk->line_num);} +#define __DEPTH__ #exe{StreamPrint("%d",\ + Fs->last_lex->lex_include_stk->depth);} +#define __FILE__ #exe{StreamPrint("\"%s\"",\ + Fs->last_lex->lex_include_stk->full_name);} #define __DIR__ #exe{StreamDir;} #define LFSF_DOC 1 #define LFSF_DEFINE 2 class CLexFile { + CLexFile *next; U8 *buf, *buf_ptr; I64 line_num,flags; @@ -1938,22 +1954,23 @@ class CLexFile *line_start; CDoc *doc; CDocEntry *cur_entry; - U8 last_U16,pad[7]; + I32 depth; + U8 last_U16,pad[3]; }; class CAOTCtrl { I64 ip; //Instruction ptr - CAsmArg arg1,arg2; - CAsmCodeBlk *cb; - I64 num_ex_U8s, + CAsmArg arg1,arg2; + CAOTBinBlk *bin; + I64 num_bin_U8s, max_align_bits,module_org; CAsmUnresolvedRef *local_unresolved,*glbl_unresolved; - CExeAbsAddr *abss; - CExeHeapGlbl *heap_glbls; - I64 display_col,last_ip; - U8 *last_label,*last_line_lsted; - CLexFile *last_lfn; + CAOTAbsAddr *abss; + CAOTHeapGlbl *heap_glbls; + I64 lst_col,lst_last_ip; + U8 *last_label,*lst_last_line; + CLexFile *lst_last_lfn; I64 seg_size; Bool lst; }; @@ -2004,67 +2021,63 @@ class CAOTCtrl #define TK_INS_BINARY_SIZE 0x126 #define TK_NUM_TK 0x127 -//Lex flags -#define LF_PMT 1 -#define Lf_PMT 0 -#define LF_DONT_FREE_BUF 2 -#define LF_NO_DEFINES 4 -#define LF_IN_IF 8 -#define LF_JUST_LOAD 16 -#define LF_KEEP_NEW_LINES 32 -#define LF_KEEP_DOT 64 -#define LF_KEEP_NUM_SIGN 128 -#define LF_KEEP_AT_SIGN 256 -#define Lf_OPT_TRACE_PRESENT 9 -#define LF_NOT_CONST 0x0000010000 -#define LF_NO_REG_OPT 0x0000020000 -#define LF_IN_QUOTES 0x0000040000 -#define LF_EXE_BLK 0x0000080000 -#define LF_HAS_MISC_DATA 0x0000100000 -#define LF_HAS_RETURN 0x0000200000 -#define LF_ASM_EXPRESSIONS 0x0000400000 -#define LF_UNRESOLVED 0x0000800000 -#define LF_LOCAL 0x0001000000 -#define LF_FUN_EXP 0x0002000000 -#define Lf_FUN_EXP 25 -#define LF_POSTINC 0x0004000000 -#define LF_POSTDEC 0x0008000000 -#define LF_PREINC 0x0010000000 -#define LF_PREDEC 0x0020000000 -#define LF_ARRAY 0x0040000000 -#define LF_RAX 0x0080000000 -#define LF_USE_LAST_U16 0x0100000000 -#define Lf_USE_LAST_U16 32 -#define LF_LAST_WAS_DOT 0x0200000000 -#define LF_AOT_COMPILE 0x0400000000 -#define Lf_AOT_COMPILE 34 -#define LF_NO_ABSS 0x0800000000 -#define LF_PAREN 0x1000000000 -#define Lf_PAREN 36 -#define LF_CLASS_IP 0x2000000000 -#define LF_DONT_MAKE_RESULT 0x4000000000 - #define LEX_MAX_IDENT 134 //Max is 132 -#define LFN_CNT 8 -#define LFN_STK_CNT 32 - -#define NUM_REGS 16 class CLexHashTableContext { CLexHashTableContext *next; I64 old_flags,hash_mask; - CHashFun *local_var_lst, - *fun; - CHashTable *hash_table_lst, - *define_hash_table, - *local_hash_table, - *glbl_hash_table; + CHashFun *local_var_lst, + *fun; + CHashTable *hash_table_lst, + *define_hash_table, + *local_hash_table, + *glbl_hash_table; }; -public class CLex +//CmpCtrl flags +#define CCF_PMT 1 +#define CCf_PMT 0 +#define CCF_DONT_FREE_BUF 2 +#define CCF_NO_DEFINES 4 +#define CCF_IN_IF 8 +#define CCF_JUST_LOAD 16 +#define CCF_KEEP_NEW_LINES 32 +#define CCF_KEEP_DOT 64 +#define CCF_KEEP_NUM_SIGN 128 +#define CCF_KEEP_AT_SIGN 256 +#define CCf_OPT_TRACE_PRESENT 9 +#define CCF_NOT_CONST 0x0000010000 +#define CCF_NO_REG_OPT 0x0000020000 +#define CCF_IN_QUOTES 0x0000040000 +#define CCF_EXE_BLK 0x0000080000 +#define CCF_HAS_MISC_DATA 0x0000100000 +#define CCF_HAS_RETURN 0x0000200000 +#define CCF_ASM_EXPRESSIONS 0x0000400000 +#define CCF_UNRESOLVED 0x0000800000 +#define CCF_LOCAL 0x0001000000 +#define CCF_FUN_EXP 0x0002000000 +#define CCf_FUN_EXP 25 +#define CCF_POSTINC 0x0004000000 +#define CCF_POSTDEC 0x0008000000 +#define CCF_PREINC 0x0010000000 +#define CCF_PREDEC 0x0020000000 +#define CCF_ARRAY 0x0040000000 +#define CCF_RAX 0x0080000000 +#define CCF_USE_LAST_U16 0x0100000000 +#define CCf_USE_LAST_U16 32 +#define CCF_LAST_WAS_DOT 0x0200000000 +#define CCF_AOT_COMPILE 0x0400000000 +#define CCf_AOT_COMPILE 34 +#define CCF_NO_ABSS 0x0800000000 +#define CCF_PAREN 0x1000000000 +#define CCf_PAREN 36 +#define CCF_CLASS_IP 0x2000000000 +#define CCF_DONT_MAKE_RESULT 0x4000000000 + +public class CCmpCtrl { - CLex *next,*last; + CCmpCtrl *next,*last; I64 token, flags, cur_i64; @@ -2078,22 +2091,21 @@ public class CLex I64 last_U16, min_line,max_line,last_line_num, lock_cnt; - U32 *chars_bitmap_alpha_numeric; + U32 *chars_bmp_alpha_numeric; CLexHashTableContext htc; - CHashGeneric *hash_entry; - CAbsCntsI64 abs_cnts; - CLexUndef *undef_hash_entry; - CMemberLst *local_var_entry; - CLexCodeMisc *lb_leave; + CHashGeneric *hash_entry; + CAbsCntsI64 abs_cnts; + CAsmUndefHash *asm_undef_hash; + CMemberLst *local_var_entry; + CCodeMisc *lb_leave; U8 *cur_buf_ptr; - CLexFile *cur_lfn,*fun_lfn; - I64 stk_ptr; + CLexFile *lex_include_stk, + *lex_prs_stk, + *fun_lex_file; CStreamBlk *next_stream_blk,*last_stream_blk; - CExe *exe; + CAOT *aot; - I64 pass, - opts, - otrace_mask, + I64 pass,opts,otrace_mask, error_cnt,warning_cnt; //For intermediate codes with multiple float ops (int<->float conversions) @@ -2102,23 +2114,18 @@ public class CLex Bool last_dont_pushable,last_dont_popable,last_float_op_pos, dont_push_float,pad[4]; - CLexCodeCtrl lcc; - CPrsStk *ps; - CAOTCtrl *a; - I64 a_depth; - - U0 end_zeroed; - CLexFile lfns[LFN_CNT]; - CLexFile stk[LFN_STK_CNT]; -U0 pad;#assert !($$&7) //(compiler lags one token) + CCodeCtrl coc; + CPrsStk *ps; + CAOTCtrl *aotc; + I64 aot_depth; + U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Compiler" public class CCmpGlbls { - CHashTable *asm_hash; - Bool dont_write_to_dsk; - CHashClass *internal_types[RT_NUM_IT]; + CHashTable *asm_hash; + CHashClass *internal_types[RT_NUM_IT]; CIntermediateCode ic_nop; U32 *dual_U16_tokens1,*dual_U16_tokens2,*dual_U16_tokens3, *binary_ops; @@ -2126,17 +2133,19 @@ public class CCmpGlbls stk_temps_mask,reg_vars_mask,non_ptr_vars_mask; U8 *to_stk_temps_map_odd,*to_stk_temps_map_even, *to_reg_vars_map,*non_ptr_vars_map; - I64 compiled_lines; + I64 size_arg_mask[9], + compiled_lines; }; #help_index "Debugging/Unassemble" -class CUasmGlbls +class CUAsmGlbls { - CInstruction **table; - I64 table_entries, - ins64_mask, + CInstruction **table_16_32,**table_64; + I64 table_16_32_entries, + table_64_entries, + ins64_arg_mask, signed_arg_mask, - mem_mask; + mem_arg_mask; }; #help_index "Devices;PCI" @@ -2362,7 +2371,7 @@ class CISO1DirEntry U8 len,ext_attr_len; CPalindromeU32 loc; CPalindromeU32 size; - CISO1Date date; + CISO1Date date; U8 flags,file_unit_size,interleave; CPalindromeU16 vol_seq_num; U8 name_len,name; @@ -2431,7 +2440,8 @@ class CISO1PriDesc #define RS_ATTR_VOL_ID 0x08 //V #define RS_ATTR_DIR 0x10 //D #define RS_ATTR_ARCHIVE 0x20 //A -#define RS_ATTR_LONG_NAME (RS_ATTR_READ_ONLY|RS_ATTR_HIDDEN|RS_ATTR_SYSTEM|RS_ATTR_VOL_ID) +#define RS_ATTR_LONG_NAME (RS_ATTR_READ_ONLY|RS_ATTR_HIDDEN|\ + RS_ATTR_SYSTEM|RS_ATTR_VOL_ID) #define RS_ATTR_LONG_NAME_MASK (RS_ATTR_LONG_NAME|RS_ATTR_DIR|RS_ATTR_ARCHIVE) #define RS_ATTR_DELETED 0x100 //X #define RS_ATTR_RESIDENT 0x200 //T @@ -2521,7 +2531,8 @@ public class CDirEntry #define FUG_FILES_FIND (FUF_RECURSE|FUF_SINGLE|FUF_CLUSTER_ORDER|\ FUF_JUST_DIRS|FUF_JUST_FILES|FUF_JUST_TXT|\ FUF_JUST_SRC|FUF_JUST_AOT|FUF_JUST_JIT|FUF_JUST_GRA|FUF_FLATTEN_TREE) -#define FUG_FILE_FIND (FUF_JUST_DIRS|FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS) +#define FUG_FILE_FIND (FUF_JUST_DIRS|FUF_JUST_FILES|FUF_Z_OR_NOT_Z|\ + FUF_SCAN_PARENTS) #help_index "File/Low Level" //See $LK,"ST_BLKDEV_TYPES",A="MN:ST_BLKDEV_TYPES"$ @@ -2611,7 +2622,7 @@ class CFreeLst public class CDrv { //Don't access ->drv_let directly in case a drive has been remapped. -//Use $LK,"Drv2Let",A="MN:Drv2Let"$(). + //Use $LK,"Drv2Let",A="MN:Drv2Let"$(). I64 locked_flags; U32 type, //Bit31 is used as a disable, since it will be unknown dv_signature; @@ -2623,6 +2634,7 @@ public class CDrv root_cluster, data_area, spc; //sectors per cluster + CDate fat32_local_time_offset; CTask *owning_task; CBlkDev *bd; @@ -2653,13 +2665,13 @@ public class CDskGlbls CBlkDev *blkdevs; CDrv *drvs,*let_to_drv[32]; I64 auto_mount_ide_cnt; - U8 temp_filename[136],boot_drv_let, + U8 temp_filename[STR_LEN],boot_drv_let, first_hd_drv_let,first_cd_drv_let; Bool boot_rescue_drv_pmt,cdrom_boot_is_good; }; #help_index "File/Internal" -public class CFileAccess +public class CDirContext { CDrv *old_dv,*dv; U8 *old_dir,*mask; @@ -2675,7 +2687,7 @@ public class CFileAccess #define FF_CONTIGUOUS 16 #define FF_USE_OLD_DATETIME 32 -public class CFile +public class CFile //See $LK,"::/Demo/Dsk/DataBase.CPP.Z"$. { I64 flags; CDirEntry de; @@ -2801,19 +2813,19 @@ public class CHeapCtrl CTask *mem_task; CMemBlk *next_mem_blk,*last_mem_blk; CMemUnused *malloc_free_lst; - CMemUsed *next_um,*last_um; + CMemUsed *next_um,*last_um; CMemUnused *heap_hash[HEAP_HASH_SIZE/sizeof(U8 *)]; }; #help_index "Devices" public class CDevGlbls { - I64 *idt; - U8 *mem64_ptr; - CHeapCtrl *uncached_heap; - U8 mp_apic_ids[MP_MAX_PROCESSORS]; - CMemRange mem32_root; - CPCIDev pci_root; + I64 *idt; + U8 *mem64_ptr; + CHeapCtrl *uncached_heap; + U8 mp_apic_ids[MP_MAX_PROCESSORS]; + CMemRange mem32_root; + CPCIDev pci_root; }; #help_index "Graphics/Color;Graphics/Device Contexts" @@ -2833,7 +2845,7 @@ public class CDevGlbls #define ROP_MONO (ROPB_MONO<<8) //These are just for $LK,"ROPF_PROBABILITY_DITHER",A="MN:ROPF_PROBABILITY_DITHER"$ -//See $LK,"GrLighting",A="MN:GrLighting"$(). +//See $LK,"DCLighting",A="MN:DCLighting"$(). #define ROPF_HALF_RANGE_COLOR 0x1000 #define ROPF_TWO_SIDED 0x2000 @@ -2875,16 +2887,16 @@ public U32 class CColorROPU32 #define COLORROP_COLORS_MASK 0x00FF00FF #define COLORROP_NO_ROP0_MASK 0xFFFF00FF #define COLORROP_BITS 16 -public U32i class CRGB +public U32 class CBGR24 { - U8 r,g,b,reserved; + U8 b,g,r,pad; }; -public U32i class CBGR +public I64 class CBGR48 { - U8 b,g,r,reserved; + U16 b,g,r,pad; }; -#help_index "Keyboard Devices;Char/Input" +#help_index "Keyboard Devices;Char/Input;StdIn" #define KBD_PORT 0x60 #define KBD_CTRL 0x64 public class CKbdStateGlbls @@ -2899,7 +2911,7 @@ public class CKbdStateGlbls //BitTest, $LK,"Bt",A="MN:Bt"$(), with a merged scan code. //(Left and right shift merged, for example.) U32 down_bitmap[8], - //BitTest, $LK,"Bt",A="MN:Bt"$(), with an unmerged scan code. +//BitTest, $LK,"Bt",A="MN:Bt"$(), with an unmerged scan code. down_bitmap2[8]; Bool rst, //Private: Reset KbdMouse @@ -3004,15 +3016,15 @@ public class CCtrl CTask *win_task; I64 type,flags; -//win pix coordinates + //win pix coordinates I64 left,right,top,bottom; -//screen pix coordinates (derived) + //screen pix coordinates (derived) I64 screen_left,screen_right,screen_top,screen_bottom; U8 *state; -//called on resize + //called on resize U0 (*update_derived_vals)(CCtrl *c); U0 (*draw_it)(CDC *dc,CCtrl *c); @@ -3082,8 +3094,8 @@ class CFPU class CSrvCmd { - CSrvCmd *next,*last; - CSrvCtrl *ctrl; + CSrvCmd *next,*last; + CSrvCtrl *ctrl; I64 cmd_code,flags, target_cpu,servant_cpu_num, msg_code; @@ -3092,7 +3104,7 @@ class CSrvCmd U8 *fun_arg; U8 *aux_str; - I64 aux1,aux2, //Sometimes called arg1 and arg2. (Windows msg param1 param2) + I64 aux1,aux2, //Sometimes called arg1 and arg2. (Windows msg param1 param2) result; CTask *spawned_task, @@ -3102,8 +3114,8 @@ class CSrvCmd #define SVCRf_LOCKED 0 class CSrvCtrl { - CSrvCmd *next_waiting,*last_waiting, - *next_done,*last_done; + CSrvCmd *next_waiting,*last_waiting, + *next_done,*last_done; I64 flags; }; @@ -3148,13 +3160,13 @@ public class CTaskSettings U0 (*task_end_cb)(); CTask *song_task,*animate_task; I64 scroll_x,scroll_y,scroll_z; - CBGR palette4[16]; + CBGR48 palette[NUM_COLORS]; U32 win_inhibit;; U8 text_attr,title_src, border_attr,border_src, task_title[TASK_TITLE_LEN+1]; Bool border,preempt,cursor,scroll,autocomplete,pad[3]; -U0 pad;#assert !($$&7) //(compiler lags one token) + U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Task" @@ -3197,11 +3209,7 @@ U0 pad;#assert !($$&7) //(compiler lags one token) #define DISPLAYf_CHILDREN_NOT_ON_TOP 4 #define TASK_SIGNATURE_VAL 'TskS' -#define TASK_IN_QUE_SIGNATURE_VAL 'TskQ' -#define TASK_COMBINED_SIGNATURE_VAL (TASK_SIGNATURE_VAL+TASK_IN_QUE_SIGNATURE_VAL<<32) - #define TASK_NAME_LEN 31 -#define TASK_WALLPAPER_DATA_SIZE 128 class CTaskStk { CTaskStk *next_stk; @@ -3212,7 +3220,7 @@ class CTaskStk public class CTask //The Fs segment reg points to current CTask. { CTask *addr; //Self-addressed ptr - U32 task_signature,task_in_que_signature; + U32 task_signature,pad; I64 task_flags,locked_flags; U32 display_flags,win_inhibit; I64 wake_jiffy; @@ -3241,8 +3249,8 @@ public class CTask //The Fs segment reg points to current CTask. scroll_x,scroll_y,scroll_z; -//These must be in this order -//for $LK,"TASK_CONTEXT_SAVE",A="FF:::/Kernel/Sched.CPP,TASK_CONTEXT_SAVE"$ and $LK,"_TASK_CONTEXT_RESTORE",A="FF:::/Kernel/Sched.CPP,_TASK_CONTEXT_RESTORE"$ + //These must be in this order + //for $LK,"TASK_CONTEXT_SAVE",A="FF:::/Kernel/Sched.CPP,TASK_CONTEXT_SAVE"$ and $LK,"_TASK_CONTEXT_RESTORE",A="FF:::/Kernel/Sched.CPP,_TASK_CONTEXT_RESTORE"$ I64 rip,rflags,rsp,rsi,rax,rcx,rdx,rbx,rbp,rdi, r8,r9,r10,r11,r12,r13,r14,r15; CCPU *gs; @@ -3255,7 +3263,7 @@ public class CTask //The Fs segment reg points to current CTask. U8 task_title[TASK_TITLE_LEN+1], task_name[TASK_NAME_LEN+1], - wallpaper_data[TASK_WALLPAPER_DATA_SIZE], + wallpaper_data[STR_LEN], title_src,border_src, text_attr,border_attr; @@ -3269,19 +3277,20 @@ public class CTask //The Fs segment reg points to current CTask. U8 *except_caller1,*except_caller2; Bool catch_except; - U8 answer_type,pad[6]; + Bool new_answer; + U8 answer_type,pad[5]; I64 answer; F64 answer_time; CBpt *bpt_lst; CCtrl *next_ctrl,*last_ctrl; CMenu *cur_menu; CTaskSettings *next_settings; - CMathODE *next_ode,*last_ode; + CMathODE *next_ode,*last_ode; F64 last_ode_time; CHashTable *hash_table; CSrvCtrl srv_ctrl; - CLex *next_lex,*last_lex; + CCmpCtrl *next_lex,*last_lex; I64 win_old_left,win_old_right,win_old_top,win_old_bottom; @@ -3294,7 +3303,7 @@ public class CTask //The Fs segment reg points to current CTask. CWinScroll horz_scroll,vert_scroll; I64 user_data; -U0 pad;#assert !($$&7) //(compiler lags one token) + U0 pad;#assert !($$&7) //(compiler lags one token) }; class CTSS @@ -3330,7 +3339,6 @@ class CTSS #define _R15 Fs->r15 #help_index "MultiCore" -#define CPU_WALLPAPER_DATA_SIZE 128 #define CPUf_RAN_A_TASK 0 #define CPUf_SETH_SLEEP 1 @@ -3348,11 +3356,8 @@ public class CCPU //The Gs segment reg points to current CCPU. U0 (*profiler_timer_irq)(CTask *task); CTask *dying_task_lst; CTSS *tss; - union { - U8 wallpaper_data[CPU_WALLPAPER_DATA_SIZE]; - I64 start_stk[16]; - } -U0 pad;#assert !($$&7) //(compiler lags one token) + I64 start_stk[16]; + U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Memory/Page Tables" @@ -3370,11 +3375,11 @@ public class CSysFixedArea U8 pml1[MEM_NUM_PML1*0x1000],pml2[MEM_NUM_PML2*0x1000], pml3[MEM_NUM_PML3*0x1000],pml4[MEM_NUM_PML4*0x1000]; $$=($$+15)&-16; - CFPU init_fpu_mmx; - CCPU boot_cpu; - CTask adam; - CBlkPool adam_bp; - CHeapCtrl adam_hc; + CFPU init_fpu_mmx; + CCPU boot_cpu; + CTask adam; + CBlkPool adam_bp; + CHeapCtrl adam_hc; $$=($$+PAGE_SIZE-1)&-PAGE_SIZE; }; @@ -3516,11 +3521,12 @@ public class CTextGlbls #help_index "Graphics/Device Contexts" //Low 8 bits reserved for flags that go into saved bitmaps #define DCF_COMPRESSED 1 -#define DCF_NO_TRANSPARENTS 2 //Can be used to optimized $LK,"GrBlot",A="MN:GrBlot"$(). +#define DCF_PALETTE 2 +#define DCF_NO_TRANSPARENTS 4 //Can be used to optimized $LK,"GrBlot",A="MN:GrBlot"$(). #define DCF_TRANSFORMATION 0x100 -//See $LK,"GrSetSymmetry",A="MN:GrSetSymmetry"$() or $LK,"GrSetSymmetry3",A="MN:GrSetSymmetry3"$() +//See $LK,"DCSymmetrySet",A="MN:DCSymmetrySet"$() or $LK,"DCSymmetry3Set",A="MN:DCSymmetry3Set"$() #define DCF_SYMMETRY 0x200 //Must be used with DCF_SYMMETRY set also. @@ -3535,12 +3541,16 @@ public class CTextGlbls #define DCF_RECORD_EXTENTS 0x10000 #define DCF_ON_TOP 0x20000 +//$LK,"DCSave",A="MN:DCSave"$() flags. +#define DCSF_COMPRESSED 1 +#define DCSF_PALETTE_GET 2 + #define DCS_SIGNATURE_VAL 'DvCS' class CGrSym { I32 sx,sy,sz,pad; - //Normal of symmetry plane +//Normal of symmetry plane I64 snx,sny,snz; }; @@ -3551,8 +3561,9 @@ public class CDC height, flags; U0 end; + CBGR48 palette[NUM_COLORS]; -//public (Change directly) + //public (Change directly) CColorROPU32 color, bkcolor, //Set for use with $LK,"ROP_COLLISION",A="MN:ROP_COLLISION"$ color2; //Internally used for $LK,"GrFloodFill",A="MN:GrFloodFill"$() @@ -3568,27 +3579,25 @@ public class CDC CDC *brush; -//Set with $LK,"GrSetRotMat",A="MN:GrSetRotMat"$(). $LK,"Free",A="MN:Free"$() before setting. - I64 *r, //rotation matrix of quads decimal in lo + //Set with $LK,"DCMat4x4Set",A="MN:DCMat4x4Set"$(). $LK,"Free",A="MN:Free"$() before setting. + I64 *r, //rotation matrix of quads decimal in lo r_norm; //shifted 32 bits. Used for scaling pen width -//public (Change directly) + //public (Change directly) I32 x,y,z, pen_width; -//Can be changed from the default $LK,"GrTransform",A="MN:GrTransform"$() + //Can be changed from the default $LK,"DCTransform",A="MN:DCTransform"$() U0 (*transform)(CDC *dc,I64 *x,I64 *y,I64 *z); -//Can be changed from the default $LK,"GrLighting",A="MN:GrLighting"$() - U0 (*lighting)(CDC *dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p3,CColorROPU32 color); +//Can be changed from the default $LK,"DCLighting",A="MN:DCLighting"$() + U0 (*lighting)(CDC *dc,CD3I32 *p1,CD3I32 *p2, + CD3I32 *p3,CColorROPU32 color); -//Set by $LK,"GrSetSymmetry",A="MN:GrSetSymmetry"$() or $LK,"GrSetSymmetry3",A="MN:GrSetSymmetry3"$() + //Set by $LK,"DCSymmetrySet",A="MN:DCSymmetrySet"$() or $LK,"DCSymmetry3Set",A="MN:DCSymmetry3Set"$() CGrSym sym; -//not document num, but num in a CSprite collection - I64 nearest_sprite_elem_num,nearest_dist, - -//not document num, but num in a CSprite collection - cur_sprite_elem_num; + I64 dist,nearest_dist, + nearest_sprite_elem_num; //num in a CSprite elem lst I32 cur_x,cur_y,cur_z,pad; I64 collision_cnt; @@ -3601,10 +3610,10 @@ public class CDC CDC *alias; U8 *body; - //Set by $LK,"DCAllocDepthBuf",A="MN:DCAllocDepthBuf"$() + //Set by $LK,"DCDepthBufAlloc",A="MN:DCDepthBufAlloc"$() I32 *depth_buf; I64 db_z; //private -U0 pad;#assert !($$&7) //(compiler lags one token) + U0 pad;#assert !($$&7) //(compiler lags one token) }; #help_index "Devices" @@ -3651,16 +3660,15 @@ public class CArcCtrl dst_pos,dst_size; U8 *src_buf,*dst_buf; I64 min_bits,min_table_entry; - CArcEntry *cur_entry; - CArcEntry *next_entry; + CArcEntry *cur_entry,*next_entry; I64 cur_bits_in_use,next_bits_in_use; U8 *stk_ptr,*stk_base; I64 free_index,free_limit, saved_basecode, entry_used, last_ch; - CArcEntry compress[ARC_MAX_ENTRY+1], - *hash[ARC_MAX_ENTRY+1]; + CArcEntry compress[ARC_MAX_ENTRY+1], + *hash[ARC_MAX_ENTRY+1]; }; #help_index "Compression" @@ -3671,7 +3679,7 @@ public class CArcCompress U0 body; }; -#define "Char/Input" +#define "Char/Input;StdIn" //GetStr flags #define GSF_SHIFT_ESC_EXIT 1 //This kills task on #define GSF_WITH_NEW_LINE 2 @@ -3717,7 +3725,7 @@ class CKeyDevGlbls I64 ctrl_alt_let_in_irq_flags, **ctrl_alt_let_ret_addr; //addr of ret addr on stack in kbd irq U8 **ctrl_alt_let_descs, - desc[128], + desc[STR_LEN], *handler; }; @@ -3743,7 +3751,7 @@ class CPSectCache I64 base,limit; F64 time_stamp; U8 str[1]; //PSECT_CACHE_STR_LEN - $$=64; +$$=64; }; #define PSECT_CACHE_STR_LEN (sizeof(CPSectCache)-offset(CPSectCache.str)) @@ -3782,8 +3790,8 @@ public class CDbgGlbls // $LK,"Auto",A="MN:Auto"$("") StdIn for call to $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). #define STD_DISTRO_CDROM_CFG "Tb1\nScale2Mem(2048,0x40000)\nt3 \n\n\n\n" -#help_index "Misc/Accts" -//Acct Registry sys_msg_flags. $LK,"AcctOneTimePopUp",A="MN:AcctOneTimePopUp"$() +#help_index "Misc/Registry" +//Registry sys_msg_flags. $LK,"RegOneTimePopUp",A="MN:RegOneTimePopUp"$() #define ARf_FLOODFILL 0 #define ARf_CSPRITE_INS_CLIPBOARD 1 #define ARf_CSPRITE_PICK_GRAPHICALLY 2 diff --git a/Kernel/KernelB.HPP b/Kernel/KernelB.HPP index d569318..947b379 100644 --- a/Kernel/KernelB.HPP +++ b/Kernel/KernelB.HPP @@ -6,19 +6,32 @@ $LK,"KernelB",A="FF:::/Adam.CPP,KernelB"$ Adam.CPP #help_index "Bit" #help_file "::/Doc/Bit" -public _intern IC_BSF I64 Bsf(I64 bit_field_val);//Scan fwd from lowest for 1st set. -1 if not found. -public _intern IC_BSR I64 Bsr(I64 bit_field_val);//Scan rev from highest for 1st set. -1 if not found. -public _intern IC_BT Bool Bt(U8 *bit_field,I64 bit); //Bit test. -public _intern IC_BTC Bool Btc(U8 *bit_field,I64 bit); //Bit test and complement (same as xor with 1). -public _intern IC_BTR Bool Btr(U8 *bit_field,I64 bit); //Bit test and reset to zero. -public _intern IC_BTS Bool Bts(U8 *bit_field,I64 bit); //Bit test and set to one. -public _intern IC_LBTC Bool LBtc(U8 *bit_field,I64 bit); //Locked Bit test and complement (same as xor with 1). -public _intern IC_LBTR Bool LBtr(U8 *bit_field,I64 bit); //Locked Bit test and reset to zero. -public _intern IC_LBTS Bool LBts(U8 *bit_field,I64 bit); //Locked Bit test and set to one. -public _extern _BEQU Bool BEqu(U8 *bit_field,I64 bit,Bool val);//Set bit equal to val. -public _extern _BIT_FIELD_EXTRACT_U32 U32 BFieldExtU32(U8 *bit_field,I64 bit,I64 size); //Extract U32 from bit field. -public _extern _BIT_FIELD_OR_U32 U0 BFieldOrU32(U8 *bit_field,I64 bit,U32 pattern); //Or U32 into bit field. -public _extern _LBEQU Bool LBEqu(U8 *bit_field,I64 bit,Bool val); //Locked Set bit equal to val. +public _intern IC_BSF I64 Bsf( + I64 bit_field_val);//Scan fwd from lowest for 1st set. -1 if not found. +public _intern IC_BSR I64 Bsr( + I64 bit_field_val);//Scan rev from highest for 1st set. -1 if not found. +public _intern IC_BT Bool Bt( + U8 *bit_field,I64 bit); //Bit test. +public _intern IC_BTC Bool Btc( + U8 *bit_field,I64 bit); //Bit test and complement (same as xor with 1). +public _intern IC_BTR Bool Btr( + U8 *bit_field,I64 bit); //Bit test and reset to zero. +public _intern IC_BTS Bool Bts( + U8 *bit_field,I64 bit); //Bit test and set to one. +public _intern IC_LBTC Bool LBtc( + U8 *bit_field,I64 bit); //Locked bit test and complement (xor with 1). +public _intern IC_LBTR Bool LBtr( + U8 *bit_field,I64 bit); //Locked bit test and reset to zero. +public _intern IC_LBTS Bool LBts( + U8 *bit_field,I64 bit); //Locked bit test and set to one. +public _extern _BEQU Bool BEqu( + U8 *bit_field,I64 bit,Bool val);//Set bit equal to val. +public _extern _BIT_FIELD_EXTRACT_U32 U32 BFieldExtU32( + U8 *bit_field,I64 bit,I64 size); //Extract U32 from bit field. +public _extern _BIT_FIELD_OR_U32 U0 BFieldOrU32( + U8 *bit_field,I64 bit,U32 pattern); //Or U32 into bit field. +public _extern _LBEQU Bool LBEqu( + U8 *bit_field,I64 bit,Bool val); //Locked Set bit equal to val. #help_index "Boot" _extern SYS_BOOT_BASE U32 sys_boot_base; @@ -27,14 +40,18 @@ _extern SYS_BOOT_SRC U32 sys_boot_src; _extern SYS_RUN_LEVEL U32 sys_run_level; #help_index "Call" -public _extern _CALL I64 Call(U8 *s); //Call addr with no args. -public _extern _CALLEXTSTR I64 CallExtStr(/*argpop*/ U8 *name,...); //Search sym table for fun name and pass it args. +public _extern _CALL I64 Call(U8 *machine_code); //Call addr with no args. +public _extern _CALLEXTSTR I64 CallExtStr( + /*argpop*/ U8 *name,...); //Search sym table for fun and pass it args. //Can have any fixed number of arguments. -public _extern _CALLIND I64 CallInd(/*argpop*/I64 (*fp_addr)(...),...); //Call with any fixed number of arguments. +public _extern _CALLIND I64 CallInd( + /*argpop*/I64 (*fp_addr)(...),...); //Call with fixed number of args. #help_index "Call/System Extern Num" -public _extern SYS_EXTERN_TABLE /*argpop*/ I64 (**ext)(...); //Array of fun ptrs. See $LK,"Extern Num Definitions",A="MN:EXT_NUM_ENTRIES"$ -public _extern _CALLEXTNUM I64 CallExtNum(I64 num,...); //Call ext num with any fixed number of args. +public _extern SYS_EXTERN_TABLE /*argpop*/ + I64 (**ext)(...); //Array of fun ptrs. See $LK,"Extern Num Definitions",A="MN:EXT_NUM_ENTRIES"$ +public _extern _CALLEXTNUM + I64 CallExtNum(I64 num,...); //Call ext num with fixed number of args. #help_index "Char/Conversion" public _intern IC_TOUPPER I64 ToUpper(U8 ch); //Cvt char to upper case. @@ -44,11 +61,14 @@ public _intern IC_STRLEN I64 StrLen(U8 *st); //String length. #help_index "Data Types/Circular Queue" #help_file "::/Doc/Que" -public _intern IC_QUE_INIT U0 QueInit(CQue *root); //Init queue root links. -public _intern IC_QUE_INS U0 QueIns(CQue *entry,CQue *pred);//Ins item into que after predecessor. -public _intern IC_QUE_INS_REV U0 QueInsRev(CQue *entry,CQue *succ);//Reversed insert into que. +public _intern IC_QUE_INIT U0 QueInit( + CQue *root); //Init queue root links. +public _intern IC_QUE_INS U0 QueIns( + CQue *entry,CQue *pred);//Insert item into que after predecessor. +public _intern IC_QUE_INS_REV U0 QueInsRev( + CQue *entry,CQue *succ);//Reversed insert into que. //Ins item into que before successor. -public _intern IC_QUE_REM U0 QueRem(CQue *entry); //Remove Item from queue. +public _intern IC_QUE_REM U0 QueRem(CQue *entry); //Remove item from queue. #help_index "I/O;Processor/IO Port" public _intern IC_IN_U16 I64 InU16(I64 port); //Read U16 from I/O port. @@ -57,12 +77,18 @@ public _intern IC_IN_U8 I64 InU8(I64 port); //Read U8 from I/O port. public _intern IC_OUT_U16 U0 OutU16(I64 port, I64 val); //Write U16 to I/O port. public _intern IC_OUT_U32 U0 OutU32(I64 port, I64 val); //Write U32 to I/O port. public _intern IC_OUT_U8 U0 OutU8(I64 port, I64 val); //Write U8 to I/O port. -public _extern _REP_IN_U16 U0 RepInU16(U8 *buf,I64 cnt,I64 port); //Repeated read U16 from I/O port. -public _extern _REP_IN_U32 U0 RepInU32(U8 *buf,I64 cnt,I64 port); //Repeated read U32 from I/O port. -public _extern _REP_IN_U8 U0 RepInU8(U8 *buf,I64 cnt,I64 port); //Repeated read U8 from I/O port. -public _extern _REP_OUT_U16 U0 RepOutU16(U8 *buf,I64 cnt,I64 port); //Repeated write U16 to I/O port. -public _extern _REP_OUT_U32 U0 RepOutU32(U8 *buf,I64 cnt,I64 port); //Repeated write U32 to I/O port. -public _extern _REP_OUT_U8 U0 RepOutU8(U8 *buf,I64 cnt,I64 port); //Repeated write U8 to I/O port. +public _extern _REP_IN_U16 U0 RepInU16( + U8 *buf,I64 cnt,I64 port); //Repeated read U16 from I/O port. +public _extern _REP_IN_U32 U0 RepInU32( + U8 *buf,I64 cnt,I64 port); //Repeated read U32 from I/O port. +public _extern _REP_IN_U8 U0 RepInU8( + U8 *buf,I64 cnt,I64 port); //Repeated read U8 from I/O port. +public _extern _REP_OUT_U16 U0 RepOutU16( + U8 *buf,I64 cnt,I64 port); //Repeated write U16 to I/O port. +public _extern _REP_OUT_U32 U0 RepOutU32( + U8 *buf,I64 cnt,I64 port); //Repeated write U32 to I/O port. +public _extern _REP_OUT_U8 U0 RepOutU8( + U8 *buf,I64 cnt,I64 port); //Repeated write U8 to I/O port. #help_index "Math" public _intern IC_ATAN F64 ATan(F64 d); //Arc Tan (Inverse Tan). @@ -73,25 +99,31 @@ public _intern IC_MAX_I64 I64 MaxI64(I64 n1,I64 n2); //Max of two I64s. public _intern IC_MAX_U64 U64 MaxU64(U64 n1,U64 n2); //Max of two U64s. public _intern IC_MIN_I64 I64 MinI64(I64 n1,I64 n2); //Min of two I64s. public _intern IC_MIN_U64 U64 MinU64(U64 n1,U64 n2); //Min of two U64s. -public _intern IC_MOD_U64 U64 ModU64(U64 *q,U64 d); //Divide and return U64 Modulo. +public _intern IC_MOD_U64 U64 ModU64(U64 *q,U64 d); //Div and return U64 Modulo. public _intern IC_SIGN_I64 I64 SignI64(I64 i); //Sign of I64: -1,0,1. public _intern IC_SIN F64 Sin(F64 d); //Sine. public _intern IC_SQR F64 Sqr(F64 d); //Square of F64. public _intern IC_SQR_I64 I64 SqrI64(I64 i); //Square of I64. public _intern IC_SQR_U64 U64 SqrU64(U64 i); //Square of U64. public _intern IC_SQRT F64 Sqrt(F64 d); //Square root of F64. -public _intern IC_SWAP_I64 U0 SwapI64(I64 *n1,I64 *n2); //Swap two I64s. Not atomic. -public _intern IC_SWAP_U16 U0 SwapU16(U16 *n1,U16 *n2); //Swap two U16s. Not atomic. -public _intern IC_SWAP_U32 U0 SwapU32(U32 *n1,U32 *n2); //Swap two U32s. Not atomic. -public _intern IC_SWAP_U8 U0 SwapU8(U8 *n1,U8 *n2); //Swap two U8s. Not atomic. +public _intern IC_SWAP_I64 U0 SwapI64( + I64 *n1,I64 *n2); //Swap two I64s. Not atomic. +public _intern IC_SWAP_U16 U0 SwapU16( + U16 *n1,U16 *n2); //Swap two U16s. Not atomic. +public _intern IC_SWAP_U32 U0 SwapU32( + U32 *n1,U32 *n2); //Swap two U32s. Not atomic. +public _intern IC_SWAP_U8 U0 SwapU8( + U8 *n1,U8 *n2); //Swap two U8s. Not atomic. public _intern IC_TAN F64 Tan(F64 d); //Tangent. public _intern IC_TO_BOOL Bool ToBool(I64 i); //Convert to Boolean. public _intern IC_TO_F64 F64 ToF64(I64 i); //Convert to F64. public _intern IC_TO_I64 I64 ToI64(F64 d); //Convert to I64. Truncates. public _extern _ARG F64 Arg(F64 x,F64 y); //Polar coordinate angle. public _extern _CEIL F64 Ceil(F64 d); //Ceiling of F64. -public _extern _CLAMP_I64 I64 ClampI64(I64 dv,I64 lo,I64 hi); //Clamp to I64 [] range. -public _extern _CLAMP_U64 U64 ClampU64(U64 dv,U64 lo,U64 hi); //Clamp to U64 [] range. +public _extern _CLAMP_I64 I64 ClampI64( + I64 dv,I64 lo,I64 hi); //Clamp to I64 [] range. +public _extern _CLAMP_U64 U64 ClampU64( + U64 dv,U64 lo,U64 hi); //Clamp to U64 [] range. public _extern _EXP F64 Exp(F64 d); //Exponential function. _extern _FCLEX U0 Fclex(); _extern _FLDCW U0 Fldcw(U16 w); @@ -109,14 +141,20 @@ public _extern _ROUND F64 Round(F64 d); //Round F64 to whole number. public _extern _SIGN F64 Sign(F64 d); //Sign of F64: -1,0,1 public _extern _TRUNC F64 Trunc(F64 d); //Truncate F64. -#help_index "Math/CD3" +#help_index "Math/CD3;Data Types/CD3" #help_file "::/Doc/D3" -public _extern _D3_ADD CD3 *D3Add(CD3 *d1,CD3 *d2,CD3 *sum); //d1+d2 -->sum -public _extern _D3_ADD_EQU CD3 *D3AddEqu(CD3 *sum,CD3 *d); //sum+=d -public _extern _D3_COPY CD3 *D3Copy(CD3 *dst,CD3 *src); //dst=src -public _extern _D3_CROSS CD3 *D3Cross(CD3 *d1,CD3 *d2,CD3 *prod); //d1 x d2 -->prod -public _extern _D3_DIST F64 D3Dist(CD3 *d1,CD3 *d2); //Dist between d1 & d2 -public _extern _D3_DIST_SQR F64 D3DistSqr(CD3 *d1,CD3 *d2); //Dist Squared between d1 & d2 +public _extern _D3_ADD CD3 *D3Add( + CD3 *d1,CD3 *d2,CD3 *sum); //d1+d2 -->sum +public _extern _D3_ADD_EQU CD3 *D3AddEqu( + CD3 *sum,CD3 *d); //sum+=d +public _extern _D3_COPY CD3 *D3Copy( + CD3 *dst,CD3 *src); //dst=src +public _extern _D3_CROSS CD3 *D3Cross( + CD3 *d1,CD3 *d2,CD3 *prod); //d1 x d2 -->prod +public _extern _D3_DIST F64 D3Dist( + CD3 *d1,CD3 *d2); //Dist between d1 & d2 +public _extern _D3_DIST_SQR F64 D3DistSqr( + CD3 *d1,CD3 *d2); //Dist Squared between d1 & d2 public _extern _D3_DIV CD3 *D3Div(F64 s,CD3 *d,CD3 *quot); //1/s * d -->quot public _extern _D3_DIV_EQU CD3 *D3DivEqu(CD3 *quot,F64 s); //quot *= 1/s public _extern _D3_DOT F64 D3Dot(CD3 *d1,CD3 *d2); //d1 dot d2 @@ -126,25 +164,32 @@ public _extern _D3_MUL_EQU CD3 *D3MulEqu(CD3 *prod,F64 s); //prod *= s public _extern _D3_NORM F64 D3Norm(CD3 *d); //Norm d public _extern _D3_NORM_SQR F64 D3NormSqr(CD3 *d); //Norm Squared d public _extern _D3_SUB CD3 *D3Sub(CD3 *d1,CD3 *d2,CD3 *diff); //d1-d2 -->diff -public _extern _D3_UNIT CD3 *D3Unit(CD3 *d); //Convert to unit vect public _extern _D3_SUB_EQU CD3 *D3SubEqu(CD3 *diff,CD3 *d); //diff-=d +public _extern _D3_UNIT CD3 *D3Unit(CD3 *d); //Convert to unit vect public _extern _D3_ZERO CD3 *D3Zero(CD3 *dst); //Convert to zero #help_index "Memory" -public _extern _MEMCMP I64 MemCmp(U8 *ptr1,U8 *ptr2,I64 cnt); //Compare chunk of memory. -public _extern _MEMCPY U8 *MemCpy(U8 *dst,U8 *src,I64 cnt); //Copy chunk of memory. Only goes fwd. -public _extern _MEMSET U8 *MemSet(U8 *dst,I64 val,I64 cnt); //Set chunk of U8s to value. -public _extern _MEMSET_I64 I64 *MemSetI64(I64 *dst,I64 val,I64 I64cnt); //Set chunk of I64s to value. -public _extern _MEMSET_U16 U16 *MemSetU16(U16 *dst,I64 val,I64 U16cnt); //Set chunk of U16s to value. -public _extern _MEMSET_U32 U32 *MemSetU32(U32 *dst,I64 val,I64 U32cnt); //Set chunk of U32s to value. -public _extern _MEMSET U8 *MemSetU8(U8 *dst,I64 val,I64 U8cnt); //Set chunk of U8s to value. +public _extern _MEMCMP I64 MemCmp( + U8 *ptr1,U8 *ptr2,I64 cnt); //Compare chunk of memory. +public _extern _MEMCPY U8 *MemCpy( + U8 *dst,U8 *src,I64 cnt); //Copy chunk of memory. Only goes fwd. +public _extern _MEMSET U8 *MemSet( + U8 *dst,I64 val,I64 cnt); //Set chunk of U8s to value. +public _extern _MEMSET_I64 I64 *MemSetI64( + I64 *dst,I64 val,I64 I64cnt); //Set chunk of I64s to value. +public _extern _MEMSET_U16 U16 *MemSetU16( + U16 *dst,I64 val,I64 U16cnt); //Set chunk of U16s to value. +public _extern _MEMSET_U32 U32 *MemSetU32( + U32 *dst,I64 val,I64 U32cnt); //Set chunk of U32s to value. +public _extern _MEMSET U8 *MemSetU8( + U8 *dst,I64 val,I64 U8cnt); //Set chunk of U8s to value. _extern SYS_HEAP_DBG_FLAG U8 sys_heap_dbg; _extern SYS_HEAP_INIT_FLAG U8 sys_heap_init_flag; _extern SYS_HEAP_INIT_VAL U8 sys_heap_init_val; _extern SYS_MEM_INIT_FLAG U8 sys_mem_init_flag; _extern SYS_MEM_INIT_VAL U8 sys_mem_init_val; -_extern SYS_VAR_INIT_VAL U8 sys_var_init_val; _extern SYS_VAR_INIT_FLAG U8 sys_var_init_flag; +_extern SYS_VAR_INIT_VAL U8 sys_var_init_val; #help_index "Memory/BlkPool" public _extern SYS_CODE_BP CBlkPool *sys_code_bp; //System's BlkPool for code. @@ -154,27 +199,34 @@ public _extern SYS_DATA_BP CBlkPool *sys_data_bp; //System's BlkPool for data. _extern SYS_HEAP_BASE U8 *sys_heap_base; _extern SYS_HEAP_LIMIT U8 *sys_heap_limit; +#help_index "Messages;Windows" +public _extern SYS_FOCUS_TASK CTask *sys_focus_task; //Current focus task. + #help_index "Misc" -public _extern SYS_COMPILE_TIME CDate sys_compile_time; //Date and time kernel was compiled. -_extern SYS_CTRL_ALT_FLAGS I64 sys_ctrl_alt_flags[1]; //Should be semiphores? +public _extern SYS_COMPILE_TIME + CDate sys_compile_time; //Date and time kernel was compiled. +_extern SYS_CTRL_ALT_FLAGS + I64 sys_ctrl_alt_flags[1]; //Should be semiphores? #help_index "Misc/Progress Bars" public _extern SYS_PROGRESS1 I64 progress1; //Current progress 1. -public _extern SYS_PROGRESS1_DESC U8 progress1_desc[PROGRESS_DESC_LEN+1]; //Progress 1 desc. +public _extern SYS_PROGRESS1_DESC + U8 progress1_desc[PROGRESS_DESC_LEN+1]; //Progress 1 desc. public _extern SYS_PROGRESS1_MAX I64 progress1_max; //Max progress 1. public _extern SYS_PROGRESS2 I64 progress2; //Current progress 2. -public _extern SYS_PROGRESS2_DESC U8 progress2_desc[PROGRESS_DESC_LEN+1]; //Progress 2 desc. +public _extern SYS_PROGRESS2_DESC + U8 progress2_desc[PROGRESS_DESC_LEN+1]; //Progress 2 desc. public _extern SYS_PROGRESS2_MAX I64 progress2_max; //Max progress 2. public _extern SYS_PROGRESS3 I64 progress3; //Current progress 3. -public _extern SYS_PROGRESS3_DESC U8 progress3_desc[PROGRESS_DESC_LEN+1]; //Progress 3 desc. +public _extern SYS_PROGRESS3_DESC + U8 progress3_desc[PROGRESS_DESC_LEN+1]; //Progress 3 desc. public _extern SYS_PROGRESS3_MAX I64 progress3_max; //Max progress 3. public _extern SYS_PROGRESS4 I64 progress4; //Current progress 4. -public _extern SYS_PROGRESS4_DESC U8 progress4_desc[PROGRESS_DESC_LEN+1]; //Progress 4 desc. +public _extern SYS_PROGRESS4_DESC + U8 progress4_desc[PROGRESS_DESC_LEN+1]; //Progress 4 desc. public _extern SYS_PROGRESS4_MAX I64 progress4_max; //Max progress 4. -public _extern SYS_PROGRESSES CProgress sys_progresses[NUM_PROGRESS_BARS]; //All progress bars. - -#help_index "Misc;Messages" -public _extern SYS_FOCUS_TASK CTask *sys_focus_task; //Current focus task. +public _extern SYS_PROGRESSES + CProgress sys_progresses[NUM_PROGRESS_BARS]; //All progress bars. #help_index "MultiCore" #help_file "::/Doc/MultiCore" @@ -202,28 +254,33 @@ public _intern IC_SET_RAX U0 SetRAX(I64 d); //Set RAX register value. public _intern IC_SET_RBP U0 SetRBP(U8 *d); //Set RBP register value. public _intern IC_SET_RFLAGS U0 SetRFlags(I64 d); //Set RFlags register value. public _intern IC_SET_RSP U0 SetRSP(U8 *d); //Set RSP register value. -public _extern _CPUID U0 CPUId(U32 rax,CRAXRBCRCXRDX *result); //Do CPUID instruction. +public _extern _CPUID U0 CPUId( + U32 rax,CRAXRBCRCXRDX *result); //Do CPUID instruction. public _extern _LXCHG_I64 I64 LXchgI64(I64 *dst,I64 d); //Locked eXchange I64s. public _extern _LXCHG_U16 U64 LXchgU16(U16 *dst,U16 d); //Locked eXchange U16s. public _extern _LXCHG_U32 U64 LXchgU32(U32 *dst,U32 d); //Locked eXchange U32s. public _extern _LXCHG_U8 U64 LXchgU8(U8 *dst,U8 d); //Locked eXchange U8s. -public _extern _SET_MSR U0 SetMSR(I64 model_specific_reg,I64 val); //Model Specific Reg See $LK,"MSRs",A="MN:IA32_EFER"$. +public _extern _SET_MSR U0 SetMSR( + I64 model_specific_reg,I64 val); //Model Specific Reg See $LK,"MSRs",A="MN:IA32_EFER"$. public _extern _SYS_HLT U0 SysHlt(); //Loops doing HLT instruction. public _extern _XCHG_I64 I64 XchgI64(I64 *dst,I64 d); //eXchange I64s. public _extern _XCHG_U16 U64 XchgU16(U16 *dst,U16 d); //eXchange U16s. public _extern _XCHG_U32 U64 XchgU32(U32 *dst,U32 d); //eXchange U32s. public _extern _XCHG_U8 U64 XchgU8(U8 *dst,U8 d); //eXchange U8s. -public _extern SYS_CACHE_LINE_WIDTH I64 sys_cache_line_width; //CPU's Cache line width. +public _extern SYS_CACHE_LINE_WIDTH + I64 sys_cache_line_width; //CPU's Cache line width. _extern SYS_GDT CGDT sys_gdt; #help_index "Processor/Cache;Memory/Cache" public _intern IC_CLFLUSH U0 CLFlush(U8 *a); //Flush cache line instruction. #help_index "Processor/Page Tables;Memory/Page Tables" -public _intern IC_INVLPG U0 InvlPg(U8 *a); //Invalidate page at addr instruction. +public _intern IC_INVLPG + U0 InvlPg(U8 *a); //Invalidate page at addr instruction. #help_index "Task" -public _intern IC_PREEMPT Bool Preempt(Bool val); //Turn mutli-tasking preemption OFF/ON. +public _intern IC_PREEMPT + Bool Preempt(Bool val=OFF); //Turn mutli-tasking preemption OFF/ON. #help_index "Task;Processor" public _intern IC_FS CTask *Fs(); //FS seg reg points to the current $LK,"CTask",A="MN:CTask"$. diff --git a/Kernel/KernelC.HPP b/Kernel/KernelC.HPP index d609350..f113e90 100644 --- a/Kernel/KernelC.HPP +++ b/Kernel/KernelC.HPP @@ -1,4 +1,4 @@ -#help_index "AutoFile" +#help_index "AutoFile;StdIn/AutoFile" #help_file "::/Doc/AutoFile" #help_index "Bit" @@ -25,15 +25,15 @@ public _extern C32_EFLAGS U32 c32_eflags; public _extern C32_ESI U32 c32_esi; #help_index "Char/BitMaps" -public extern U32 chars_bitmap_alpha[16],chars_bitmap_alpha_numeric[16], -chars_bitmap_alpha_numeric_no_at[16], chars_bitmap_word[16], -chars_bitmap_dec_numeric[16], chars_bitmap_hex_numeric[16], -chars_bitmap_white_space[16], chars_bitmap_non_eol_white_space[16], -chars_bitmap_zero_cr_nl_cursor[16], chars_bitmap_zero_tab_ff_cr_nl_cursor[16], -chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar[16],chars_bitmap_getkey[16], -chars_bitmap_printable[16], chars_bitmap_displayable[16], -chars_bitmap_safe_dollar[16], chars_bitmap_filename[16], -chars_bitmap_non_eol[16]; +public extern U32 chars_bmp_alpha[16],chars_bmp_alpha_numeric[16], +chars_bmp_alpha_numeric_no_at[16], chars_bmp_word[16], +chars_bmp_dec_numeric[16], chars_bmp_hex_numeric[16], +chars_bmp_white_space[16], chars_bmp_non_eol_white_space[16], +chars_bmp_zero_cr_nl_cursor[16], chars_bmp_zero_tab_ff_cr_nl_cursor[16], +chars_bmp_zero_tab_ff_cr_nl_cursor_dollar[16],chars_bmp_getkey[16], +chars_bmp_macro[16], chars_bmp_printable[16], +chars_bmp_displayable[16], chars_bmp_safe_dollar[16], +chars_bmp_filename[16], chars_bmp_non_eol[16]; #help_index "Char/Conversion" public extern U8 *Char2KeyName(I64 ch,Bool include_ctrl=TRUE); @@ -86,7 +86,7 @@ public extern U8 *AStrNew(U8 *buf); #help_index "Char/Operations;Memory/Heap" public extern U8 *StrNew(U8 *buf,CTask *mem_task=NULL); -#help_index "Char/Output" +#help_index "Char/Output;StdOut" public extern U0 GetOutOfDollar(); public extern Bool IsSilent(); public extern U0 Print(U8 *fmt,...); @@ -103,14 +103,16 @@ extern U8 *StrPrintHex(U8 *dst,I64 num;I64 width); public extern CTextGlbls text; #help_index "Compiler/Lex" -public extern U0 HashSrcFileSet(CLex *lx,CHashSrcSym *h,I64 line_num_offset=0); +public extern U0 HashSrcFileSet(CCmpCtrl *cc, + CHashSrcSym *h,I64 line_num_offset=0); #help_index "Compiler;Cmd Line (Typically)" -extern U8 *Load(U8 *filename,I64 ld_flags=0,CBinFile *bfh_addr=INVALID_PTR); //INVALID_PTR means don't care what load addr. +extern U8 *Load(U8 *filename,I64 ld_flags=0, + CBinFile *bfh_addr=INVALID_PTR); //INVALID_PTR=don't care what load addr #help_index "Compression" public extern CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL); -public extern U8 *ExpandBuf(CArcCompress *r,CTask *mem_task=NULL); +public extern U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL); #help_index "Compression/Piece by Piece" public extern U0 ArcCompressBuf(CArcCtrl *c); @@ -162,24 +164,30 @@ public extern Bool IsSingleUser(); public extern Bool IsSysDbg(); public extern Bool SingleUser(Bool val); public extern Bool SysDbg(Bool val); -public extern U8 *TaskCaller(CTask *task=NULL,I64 num=0,Bool saved_context=FALSE); +public extern U8 *TaskCaller(CTask *task=NULL, + I64 num=0,Bool saved_context=FALSE); public extern I64 UnusedStk(CTask *task=NULL); public extern CDbgGlbls dbg; #help_index "Debugging/Debugger" -public extern Bool B(U8 *addr,CTask *task=NULL,Bool live=TRUE) //Toggle breakpoint +public extern Bool B(U8 *addr,CTask *task=NULL,Bool live=TRUE) //Toggle bpt. public extern I64 B2(CTask *task=NULL,Bool live=TRUE); extern CBpt *BptFind(U8 *needle_addr,CTask *haystack_task=NULL,Bool rem=FALSE); public extern Bool BptR(U8 *addr,CTask *task=NULL,Bool live=TRUE,Bool rem=TRUE); public extern Bool BptS(U8 *addr,CTask *task=NULL,Bool live=TRUE); public extern Bool E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0); +public extern Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0); +extern Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0); +public extern Bool Fix(I64 edf_dof_flags=0); +public extern U0 FixSet(U8 *filename,I64 line); public extern U0 G(U8 *ip=INVALID_PTR,CTask *task=NULL); public extern U0 G2(U8 *ip=INVALID_PTR,CTask *task=NULL); public extern Bool InDbg(Bool val); public extern Bool IsDbg(); public extern U0 S(U8 *ip=INVALID_PTR,CTask *task=NULL); -#help_index "Debugging/Debugger;DolDoc/Cmd Line (Typically);Cmd Line (Typically);Training" +#help_index "Debugging/Debugger;DolDoc/Cmd Line (Typically);"\ + "Cmd Line (Typically);Help System" public extern Bool Man(U8 *st,I64 edf_dof_flags=0); #help_index "Debugging/Dump" @@ -198,7 +206,7 @@ public extern U8 *SrcEdLink(U8 *addr,I64 cnt=1,CTask *mem_task=NULL); public extern U8 *SrcFileName(U8 *addr,I64 cnt=1,CTask *mem_task=NULL); public extern I64 SrcLineNum(U8 *addr,I64 cnt=1); -#help_index "Debugging/PSect;Hash" +#help_index "Debugging/PSect;Hash/System" public extern CHash *PSectFind(U8 *addr,I64 *_offset); #help_index "Debugging/Raw Output" @@ -213,10 +221,6 @@ public extern U0 VGAFlush(); #help_index "Debugging;Debugging/Debugger" public extern U0 Dbg(U8 *msg=NULL,I64 msg_num=0); -public extern Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0); -extern Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0); -public extern Bool Fix(I64 edf_dof_flags=0); -public extern U0 FixSet(U8 *filename,I64 line); #help_index "Define;Char/Define" #help_file "::/Doc/Define" @@ -240,7 +244,8 @@ public extern CDevGlbls dev; #help_index "DolDoc/Clipboard" public extern CDoc *sys_clipboard_doc; -#help_index "DolDoc/Task" +#help_index "DolDoc/Task;StdOut/Task" +#help_file "::/Doc/StdOutTask" extern CDoc *(*fp_doc_put)(CTask *task=NULL); #help_index "Exceptions" @@ -254,7 +259,8 @@ public extern U0 throw(I64 ch=0,Bool no_log=FALSE); #help_index "File/CD DVD" public extern U0 CDImageRead(U8 cd_drv_let,U8 *out_name); -public extern U0 CDImageWrite(U8 cd_drv_let,U8 *in_name=NULL,I64 media_type=MT_CD); +public extern U0 CDImageWrite(U8 cd_drv_let, + U8 *in_name=NULL,I64 media_type=MT_CD); #help_index "File/CFile" public extern U0 FClose(CFile *f); @@ -266,12 +272,15 @@ public extern Bool FWBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1); #help_index "File/Cmd Line (Typically);Cmd Line (Typically)" public extern Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE); public extern U0 ChgDsk(U8 drv_let=0); -public extern I64 Del(U8 *wild,Bool print_msg=TRUE); -public extern I64 Dir(U8 *wild="*",Bool full=FALSE); +public extern I64 Del(U8 *files_find_mask,Bool make_mask=FALSE, + Bool del_dir=FALSE,Bool print_msg=TRUE); +public extern I64 Dir(U8 *files_find_mask="*",Bool full=FALSE); public extern Bool Drv(U8 drv_let); -public extern Bool MapDrv(U8 drv_let,CDrv *dv); public extern Bool MkDir(U8 *filename); +#help_index "File/Cmd Line (Typically);Cmd Line (Typically);Install" +public extern Bool MapDrv(U8 drv_let,CDrv *dv); + #help_index "File/FileNames" extern CDirEntry *Cd2DirEntry(CDirEntry *tempde,U8 *abs_name); public extern U8 *ChgExt(U8 *filename,U8 *extension); @@ -279,15 +288,16 @@ public extern U8 *CurDir(CTask *task=NULL,CTask *mem_task=NULL); public extern U8 *DftExt(U8 *filename,U8 *extension); public extern U8 *DirFile(U8 *dirname,U8 *name=NULL,U8 *_extension=NULL); public extern U8 *DirNameAbs(U8 *dirname); +public extern Bool DrvIsWritable(U8 drv_let=0); public extern U8 *FileExtDot(U8 *src); public extern U8 *FileExtRem(U8 *src,U8 *dst=NULL); public extern U8 *FileNameAbs(U8 *filename,I64 fuf_flags=0); public extern Bool FileNameChk(U8 *filename); -public extern Bool FilesFindMatch(U8 *test_filename,U8 *files_find_mask,I64 fuf_flags=0); +public extern Bool FilesFindMatch(U8 *test_filename, + U8 *files_find_mask,I64 fuf_flags=0); public extern Bool IsDir(U8 *dir_name); public extern Bool IsDotC(U8 *filename); public extern Bool IsDotZ(U8 *filename); -public extern Bool IsDrvWritable(U8 drv_let=0); public extern U0 PutDirLink(U8 *dirname); public extern U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE); public extern U0 ToFileLine(U8 *_fl_file_line,U8 **_filename,I64 *_linenum); @@ -297,9 +307,11 @@ public extern U8 *ToggleZorNotZ(U8 *name); public extern U8 *FileNameTempTxt(); #help_index "File/Internal" -public extern Bool DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempde,Bool free_old_chain=TRUE); -public extern U0 FileAccessDel(CFileAccess *fa); -public extern CFileAccess *FileAccessNew(U8 *mask,Bool make_mask=FALSE,Bool make_dirs=FALSE,Bool no_mask=FALSE); +public extern U0 DirContextDel(CDirContext *dirc); +public extern CDirContext *DirContextNew(U8 *mask, + Bool make_mask=FALSE,Bool make_dirs=FALSE,Bool no_mask=FALSE); +public extern Bool DirNew(CDrv *dv,U8 *cur_dir, + CDirEntry *tempde,Bool free_old_chain=TRUE); extern I64 FileAttr(U8 *name,I64 old_attr=0); #help_index "File/Low Level" @@ -310,7 +322,8 @@ public extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE); public extern U0 BlkDevsRelease(); public extern I64 Cluster2Blk(CDrv *dv,I64 c); public extern I64 ClusterNumNext(CDrv *dv,I64 c,I64 cnt=1); -public extern I64 ClustersAlloc(CDrv *dv,I64 c=0,I64 cnt=1,Bool contiguous=FALSE); +public extern I64 ClustersAlloc(CDrv *dv,I64 c=0, + I64 cnt=1,Bool contiguous=FALSE); extern Bool CopySingle(U8 *f1,U8 *f2); //Just one file public extern U8 Drv2Let(CDrv *dv=NULL); public extern U0 DrvChk(CDrv *dv); @@ -330,8 +343,6 @@ public extern Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); public extern I64 RClusters(CDrv *dv,U8 *buf,I64 c,I64 cnt); public extern I64 RClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks); extern U0 RedSeaFreeClusters(CDrv *dv,I64 c,I64 cnt); -extern I64 SysDel(U8 *wild,Bool make_mask); //this is dangerous -extern CDirEntry *SysFilesFind(U8 *files_find_mask,I64 fuf_flags); public extern Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); public extern I64 WClusters(CDrv *dv,U8 *buf,I64 c,I64 cnt); public extern I64 WClustersBlks(CDrv *dv,U8 *buf,I64 c,I64 blks); @@ -344,14 +355,17 @@ public extern U0 DirTreeDel(CDirEntry *tempde); public extern U0 DirTreeDel2(CDirEntry *tempde); public extern Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0); public extern U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL); -public extern I64 FileWrite(U8 *filename,U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0); +public extern I64 FileWrite(U8 *filename, + U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0); #help_index "File/Program Routines;File/FileNames" public extern CDirEntry *FilesFind(U8 *files_find_mask,I64 fuf_flags=0); #help_index "File/System" -public extern CATARep *ATAIDDrvs(CATARep *root,I64 _sys_boot_drv,CATARep **_ata_drv,CATARep **_atapi_drv); -extern CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit); +public extern CATARep *ATAIDDrvs(CATARep *root, + I64 _sys_boot_drv,CATARep **_ata_drv,CATARep **_atapi_drv); +extern CBlkDev *ATAMount(U8 first_drv_let, + I64 type,I64 base0,I64 base1,I64 unit); extern Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start); extern I64 ATAProbe(I64 base0,I64 base1,I64 unit); extern U0 ATAReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt); @@ -371,25 +385,16 @@ public extern CColorROPU32 Str2ColorU32(U8 *st); #help_index "Hash" #help_file "::/Doc/Hash" public _extern _HASH_ADD U0 HashAdd(CHash *temph,CHashTable *table); -public _extern _HASH_ADD_AFTER U0 HashAddAfter(CHash *temph,CHash *pred,CHashTable *table); //Add hash entry after entry. +public _extern _HASH_ADD_AFTER U0 HashAddAfter(CHash *temph, + CHash *pred,CHashTable *table); //Add hash entry after entry. public _extern _HASH_BUCKET_FIND CHash **HashBucketFind( - -U8 *needle_str,CHashTable *haystack_table); -public extern U0 HashDel(CHashSrcSym *temph); -public _extern _HASH_FIND CHash *HashFind(U8 *needle_str,CHashTable *haystack_table,I64 mask,I64 instance=1); -public extern CHashGeneric *HashGenericAdd(U8 *name,I64 type,I64 val=0,I64 u8=0,I64 u16=0,CTask *task=NULL); -public extern CHashGeneric *HashPublic(U8 *st,I64 mask,Bool val=TRUE); -public _extern _HASH_REM_DEL Bool HashRemDel(CHash *temph,CHashTable *table, - I64 instance=1);//instance must match temph's + U8 *needle_str,CHashTable *haystack_table); +public _extern _HASH_FIND CHash *HashFind(U8 *needle_str, + CHashTable *haystack_table,I64 mask,I64 instance=1); public _extern _HASH_SINGLE_TABLE_FIND CHash *HashSingleTableFind( U8 *needle_str,CHashTable *haystack_table,I64 mask,I64 instance=1); public _extern _HASH_STR I64 HashStr(U8 *st); -public extern U0 HashTableDel(CHashTable *table); public extern CHashTable *HashTableNew(I64 size,CTask *mem_task=NULL); -public extern I64 HashTablePurge(CHashTable *table); -public extern I64 HashTypeNum(CHash *temph); -public extern I64 HashVal(CHash *temph); -extern U0 SysSymImportsResolve(U8 *sptr,I64 ld_flags=0); #help_index "Hash/Frame" #help_file "::/Doc/Frame" @@ -398,19 +403,36 @@ public extern CHashGeneric *FramePtrAdd(U8 *name,I64 val=0,CTask *task=NULL); public extern I64 FramePtrDel(U8 *name,CTask *task=NULL); public extern I64 FramePtrSet(U8 *name,I64 val,CTask *task=NULL); -#help_index "Hash;Char/Lists" +#help_index "Hash/System" +public extern U0 HashDel(CHashSrcSym *temph); +public extern CHashGeneric *HashGenericAdd(U8 *name, + I64 type,I64 val=0,I64 u8=0,I64 u16=0,CTask *task=NULL); +public extern CHashGeneric *HashPublic(U8 *st,I64 mask,Bool val=TRUE); +public _extern _HASH_REM_DEL Bool HashRemDel(CHash *temph,CHashTable *table, + I64 instance=1);//instance must match temph's +public extern U0 HashTableDel(CHashTable *table); +public extern I64 HashTablePurge(CHashTable *table); +public extern I64 HashTypeNum(CHash *temph); +public extern I64 HashVal(CHash *temph); +extern U0 SysSymImportsResolve(U8 *sptr,I64 ld_flags=0); + +#help_index "Hash/System;Char/Lists" public extern I64 HashLstAdd(U8 *lst,I64 type,CHashTable *table); -#help_index "Hash;Define;Char/Define;Char/Lists" +#help_index "Hash/System;Define;Char/Define;Char/Lists" public extern I64 HashDefineLstAdd(U8 *name,I64 type,CHashTable *table); +#help_index "Help System;Debugging/Debugger" +public extern U0 Help(); + #help_index "Info;File/Cmd Line (Typically);Cmd Line (Typically);Install" public extern U0 DrvRep(); #help_index "Input Pointer" #help_file "::/Doc/InputPointer" public extern U0 GridInit(); -public extern U0 IPSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64); +public extern U0 IPSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64, + I64 l=MAX_I64,I64 r=MAX_I64); public extern CIPStateGlbls ip; public extern CGridGlbls ip_grid; extern CIPStateGlbls ip_last; @@ -429,7 +451,8 @@ extern CATARep *ATARepFind(CATARep *haystack_root,I64 needle_num); public extern Bool DrvEnable(U8 drv_let,Bool val); #help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically);" -public extern U0 Fmt(U8 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=DVT_FAT32); +public extern U0 Fmt(U8 drv_let,Bool quick=TRUE, + Bool confirm=TRUE,I64 type=DVT_FAT32); public extern U0 Mount(Bool repartition=FALSE); #help_index "Install;Memory/BlkPool" @@ -437,19 +460,23 @@ public extern I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024); #help_index "Keyboard Devices/System;Char/System" #help_file "::/Doc/KeyDev" -public extern U0 CtrlAltLetCBSet(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE); +public extern U0 CtrlAltLetCBSet(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc, + Bool in_irq=FALSE); public extern U0 KeyDescSet(U8 *fmt,...); -public extern CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE); +public extern CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc), + Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE); public extern U0 KeyDevRem(CKeyDevEntry *tempp); extern CKeyDevGlbls keydev; extern CSrvCmd sys_macro_root; extern CTask *sys_macro_util_task; -#help_index "Keyboard Devices;Char/Input" +#help_index "Keyboard Devices;Char/Input;StdIn" extern U8 *(*fp_getstr2)(I64 flags=0); //GetStr $LK,"Flags",A="MN:GSF_SHIFT_ESC_EXIT"$ public extern Bool AreYouSure(); -public extern I64 GetChar(I64 *_scan_code=NULL,Bool echo=TRUE,Bool raw_cursor=FALSE); -public extern I64 GetKey(I64 *_scan_code=NULL,Bool echo=FALSE,Bool raw_cursor=FALSE); +public extern I64 GetChar(I64 *_scan_code=NULL,Bool echo=TRUE, + Bool raw_cursor=FALSE); +public extern I64 GetKey(I64 *_scan_code=NULL,Bool echo=FALSE, + Bool raw_cursor=FALSE); public extern I64 GetS(U8 *buf,I64 size,Bool allow_ext=TRUE); public extern U8 *GetStr(U8 *msg=NULL,U8 *dft=NULL,I64 flags=0); extern U0 KbdInit(); @@ -461,9 +488,9 @@ public extern U0 KbdTypeMatic(U8 delay); extern Bool MouseDriverInstall(); public extern I64 PressAKey(); public extern I64 ScanChar(); +public extern Bool ScanKey(I64 *_ch=NULL,I64 *_scan_code=NULL,Bool echo=FALSE); public extern Bool YorN(); public extern CKbdStateGlbls kbd; -public extern Bool ScanKey(I64 *_ch=NULL,I64 *_scan_code=NULL,Bool echo=FALSE); #help_index "Math" public extern I64 CeilI64(I64 num,I64 to); @@ -501,10 +528,12 @@ public extern U0 Mem512Free(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL); #help_index "Memory/Heap" public extern U8 *CAlloc(I64 size,CTask *mem_task=NULL); -public extern U8 *CAllocAligned(I64 size,I64 alignment,CTask *mem_task=NULL,I64 misalignment=0); +public extern U8 *CAllocAligned(I64 size,I64 alignment, + CTask *mem_task=NULL,I64 misalignment=0); public _extern _FREE U0 Free(U8 *addr); public _extern _MALLOC U8 *MAlloc(I64 size,CTask *mem_task=NULL); -public extern U8 *MAllocAligned(I64 size,I64 alignment,CTask *mem_task=NULL,I64 misalignment=0); +public extern U8 *MAllocAligned(I64 size,I64 alignment, + CTask *mem_task=NULL,I64 misalignment=0); public extern U8 *MAllocIdentical(U8 *src,CTask *mem_task=NULL); public _extern _MHEAP_CTRL CHeapCtrl *MHeapCtrl(U8 *src); public _extern _MSIZE I64 MSize(U8 *src); //size of heap object @@ -513,7 +542,8 @@ public _extern _MSIZE2 I64 MSize2(U8 *src); //Internal size #help_index "Memory/HeapCtrl" public extern CHeapCtrl *HeapCtrlBPInit(CBlkPool *bp,I64 pages512); public extern U0 HeapCtrlDel(CHeapCtrl *hc); -public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,CTask *task=NULL,CBlkPool *bp); +public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL, + CTask *task=NULL,CBlkPool *bp); #help_index "Memory/Page Tables" public extern Bool MemLowPagesProtect(Bool val=TRUE); @@ -524,16 +554,20 @@ public extern I64 *MemPageTable(U8 *a); #help_index "Messages" #help_file "::/Doc/Msgs" public extern I64 FlushMsgs(CTask *task=NULL); -public extern I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL); +public extern I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL, + I64 mask=~1,CTask *task=NULL); extern U0 InputFilterTask(); -public extern I64 ScanMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL); +public extern I64 ScanMsg(I64 *_a1=NULL,I64 *_a2=NULL, + I64 mask=~1,CTask *task=NULL); #help_index "Misc" public extern I64 EndianI64(I64 d); public extern U16 EndianU16(U16 d); public extern U32 EndianU32(U32 d); -public extern U0 QSort(U8 *base,I64 num, I64 width,I64 (*fp_compare)(U8 *e1,U8 *e2)); -public extern U0 QSortI64(I64 *base,I64 num, I64 (*fp_compare)(I64 e1,I64 e2)); +public extern U0 QSort(U8 *base,I64 num, I64 width, + I64 (*fp_compare)(U8 *e1,U8 *e2)); +public extern U0 QSortI64(I64 *base,I64 num, + I64 (*fp_compare)(I64 e1,I64 e2)); #help_index "Misc/Progress Bars" public extern U0 ProgressBarsRst(); @@ -566,15 +600,19 @@ public extern U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg); public extern U0 PCIWriteU16(I64 bus,I64 dev,I64 fun,I64 rg,I64 val); public extern U0 PCIWriteU32(I64 bus,I64 dev,I64 fun,I64 rg,I64 val); public extern U0 PCIWriteU8(I64 bus,I64 dev,I64 fun,I64 rg,I64 val); -public _extern SYS_BIOS32_SERVICE_DIR U32 sys_BIOS32_service_dir;//Far call routine in the BIOS -public _extern SYS_PCI_SERVICES U32 sys_pci_services;//Far call routine in the BIOS +public _extern SYS_PCIBIOS_SERVICE_DIR + U32 sys_PCIBIOS_service_dir;//Far call routine in the BIOS +public _extern SYS_PCI_SERVICES + U32 sys_pci_services;//Far call routine in the BIOS #help_index "PCI;Info;File/System;Devices" -public extern I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_root=NULL); +public extern I64 ATARep(Bool pmt=TRUE, + Bool just_ide=FALSE,CATARep **_root=NULL); #help_index "Processor" public extern U8 *IntEntryGet(I64 irq); -public extern U8 *IntEntrySet(I64 irq,U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0); +public extern U8 *IntEntrySet(I64 irq, + U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0); #help_index "Snd" public extern U0 Beep(I64 freq=500,Bool busy=FALSE); @@ -583,6 +621,12 @@ public extern Bool Mute(Bool val); public extern U0 Snd(F64 freq); public extern CSndGlbls snd; +#help_index "StdIn" +#help_file "::/Doc/Streams" + +#help_index "StdOut" +#help_file "::/Doc/Streams" + #help_index "Task" public extern U0 Exit(); public extern Bool IsPreempt(); @@ -637,17 +681,17 @@ public extern CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags); public extern U0 TaskRstAwaitingMsg(CTask *task=NULL); #help_index "Task/Srv/Exe;Compiler" -public extern I64 ExeCmdLine(CLex *lx); +public extern I64 ExeCmdLine(CCmpCtrl *cc); public extern U0 UserTaskCont(); #help_index "Task/Srv/Exe;MultiCore" -public extern I64 GetResult(CSrvCmd *rqst=NULL); -public extern Bool ScanResult(CSrvCmd *rqst=NULL,I64 *_result=NULL); +public extern I64 JobResultGet(CSrvCmd *rqst=NULL); +public extern Bool JobResultScan(CSrvCmd *rqst=NULL,I64 *_result=NULL); #help_index "Task/Srv/Text & Msgs" public extern CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags); -#help_index "Task/Srv/Text & Msgs;AutoFile" +#help_index "Task/Srv/Text & Msgs;AutoFile;StdIn/AutoFile" public extern U0 Auto(U8 *fmt,...); public extern U0 AutoFile(U8 *filename); public extern U0 AutoStr(U8 *fmt,...); @@ -659,7 +703,8 @@ public extern U0 XTalkWait(CTask *task,U8 *fmt,...); #help_index "Task/Srv/Text & Msgs;Messages" public extern U0 Msg(I64 msg_code,I64 a1,I64 a2,I64 flags=0); public extern U0 PostMsg(CTask *task,I64 msg_code,I64 a1,I64 a2,I64 flags=0); -public extern U0 SendMsg(CTask *task,I64 msg_code,I64 a1,I64 a2,I64 flags=0); +public extern U0 PostMsgWait(CTask *task,I64 msg_code, + I64 a1,I64 a2,I64 flags=0); public extern CSrvCmd *TaskMsg(CTask *srv,CTask *master, I64 msg_code,I64 a1,I64 a2,I64 flags); @@ -705,7 +750,4 @@ public extern I64 SysTimerRead();//18.33333*65536Hz (SYS_TIMER_FREQ) public extern Bool Blink(F64 Hz=2.5); public extern F64 tS(); //From SysTimerFreq. -#help_index "Training;Debugging/Debugger" -public extern U0 Help(); - #help_index "" diff --git a/Kernel/KeyDev.CPP b/Kernel/KeyDev.CPP index 3a98684..5ac8729 100644 --- a/Kernel/KeyDev.CPP +++ b/Kernel/KeyDev.CPP @@ -18,7 +18,8 @@ U0 PutKey(I64 ch=0,I64 sc=0) } U0 PutChars(U64 ch) -{//Output chars. Can pack multiple chars into a single U64. +{//Output chars. Up to 8 chars in a single U64. +//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT.Z,DemoHolyC"$ while (ch) { PutKey(ch&255,0); ch>>=8; @@ -26,7 +27,8 @@ U0 PutChars(U64 ch) } U0 PutS(U8 *st) -{//Use $LK,"Print",A="MN:Print"$(). See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. +{//Use $LK,"Print",A="MN:Print"$(). See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. +//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT.Z,DemoHolyC"$ I64 ch; U8 *ptr; Bool cont=TRUE; @@ -62,9 +64,10 @@ U0 KeyDescSet(U8 *fmt,...) Yield; //Makes KeyMap work better. } -CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE) +CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc), + Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE) {//Places hook in StdOut chain. See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$. - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CKeyDevEntry *tempp,*tempp1=keydev.put_key_root.last; tempp=ACAlloc(sizeof(CKeyDevEntry)); tempp->put_key=fp_put_key; @@ -81,7 +84,7 @@ CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),Bool (*fp_puts)(U8 *st U0 KeyDevRem(CKeyDevEntry *tempp) {//Remove StdOut hook and free. - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; QueRem(tempp); Preempt(old_preempt); Free(tempp); @@ -111,7 +114,7 @@ Bool KDInputFilterPutKey(I64 ch,I64 scan_code) { Bool old_preempt; if (Bt(&Fs->task_flags,TASKf_INPUT_FILTER_TASK)) { - old_preempt=Preempt(OFF); + old_preempt=Preempt; Msg(MSG_KEY_DOWN,ch,scan_code); Preempt(old_preempt); return TRUE; @@ -124,7 +127,7 @@ Bool KDInputFilterPutS(U8 *st) I64 ch; Bool old_preempt; if (Bt(&Fs->task_flags,TASKf_INPUT_FILTER_TASK)) { - old_preempt=Preempt(OFF); + old_preempt=Preempt; while (ch=*st++) Msg(MSG_KEY_DOWN,ch,0); Preempt(old_preempt); @@ -133,6 +136,62 @@ Bool KDInputFilterPutS(U8 *st) return FALSE; } +U0 CtrlAltDel(I64) +{ + LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_DEL); +} + +U0 CtrlAltC(I64) +{ + LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_C); +} + +U0 CtrlAltD(I64) +{ + if (!IsDbg) { + if (Fs==Gs->idle_task) + BptS(sys_winmgr_task->rip,sys_winmgr_task); + else + BptS(*keydev.ctrl_alt_let_ret_addr); + } +} + +U0 CtrlAltE(I64) +{ + User; +} + +U0 CtrlAltF(I64) +{ + VGAFlush; +} + +U0 CtrlAltM(I64) +{ + Mute(!IsMute); +} + +U0 CtrlAltT(I64) +{ + LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_TAB); +} + +U0 CtrlAltX(I64) +{ + LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_X); +} + +U0 CtrlAltLetCBSet(U8 ch,U0 (*fp_handler)(I64 sc),U8 *desc,Bool in_irq=FALSE) +{//Set callback for . + ch=ToUpper(ch)-'A'; + if (ch<26) { + keydev.fp_ctrl_alt_let_cbs[ch]=fp_handler; + Free(keydev.ctrl_alt_let_descs[ch]); + keydev.ctrl_alt_let_descs[ch]=AStrNew(desc); + BEqu(&keydev.ctrl_alt_let_in_irq_flags,ch,in_irq); + } +} + U0 KeyDevInit() { keydev.fp_ctrl_alt_let_cbs =CAlloc(26*sizeof(U8 *)); @@ -142,4 +201,11 @@ U0 KeyDevInit() QueInit(&keydev.put_key_root); KeyDevAdd(&KDInputFilterPutKey,&KDInputFilterPutS,0x40000000,FALSE); KeyDevAdd(&KDRawPutKey,&KDRawPutS,0x60000000,FALSE); + CtrlAltLetCBSet('C',&CtrlAltC,"Sys/Break Execution",TRUE); + CtrlAltLetCBSet('D',&CtrlAltD,"Sys/Enter Debugger",TRUE); + CtrlAltLetCBSet('E',&CtrlAltE,"Sys/Spawn New User Task"); + CtrlAltLetCBSet('F',&CtrlAltF,"Sys/VGA Flush",TRUE); + CtrlAltLetCBSet('M',&CtrlAltM,"Sys/Toggle Mute"); + CtrlAltLetCBSet('T',&CtrlAltT,"Sys/Switch Focus to Next Task",TRUE); + CtrlAltLetCBSet('X',&CtrlAltX,"Sys/Kill Focused Task",TRUE); } diff --git a/Kernel/MemA.CPP b/Kernel/MemA.CPP index 6a524b6..94e701c 100644 --- a/Kernel/MemA.CPP +++ b/Kernel/MemA.CPP @@ -125,7 +125,8 @@ pain without MAlloc up-and-running. #define CONSERVATIVE_16MEG_SIZE 0xF00000 #define ESTIMATED_MISC_ALLOCS 0x100000 -#assert CONSERVATIVE_16MEG_SIZE-(SYS_FIXED_AREA+sizeof(CSysFixedArea))>ADAM_STK+ESTIMATED_MISC_ALLOCS +#assert CONSERVATIVE_16MEG_SIZE- + (SYS_FIXED_AREA+sizeof(CSysFixedArea))>ADAM_STK+ESTIMATED_MISC_ALLOCS //EBX=BASE EAX=SIZE TEST U8 [SYS_MEM_INIT_FLAG],1 @@ -162,7 +163,7 @@ U0 SysBadMAlloc(I64 *ptr) } I64 MemPageSize(U8 *a) -{//Size of page table at addr. Either 4K or 2Meg. +{//Size of page table at addr.Either 4K or 2Meg. if (amem_free_lst; while (TRUE) { if (!(result=m->next)) { - //We're probably out of luck, but lets search for a +//We're probably out of luck, but lets search for a //freed larger size block... and, screw-it, return the whole thing. do { if (result=bp->free_page_hash2[++i]) { @@ -279,10 +280,10 @@ U0 Mem512Free(CMemBlk *m,I64 pages512,CBlkPool *bp=NULL) bp->free_page_hash[pages512]=m; } else { //We'll now round-up to a power of two. -//There is some overhead on allocations and -//we wouldn't want to round to the next -//power of two if a power of two was requested. -//So we use a little more than a power of two. + //There is some overhead on allocations and + //we wouldn't want to round to the next + //power of two if a power of two was requested. + //So we use a little more than a power of two. pages512-=2; i=Bsr(pages512); m->next=bp->free_page_hash2[i]; diff --git a/Kernel/MemB.CPP b/Kernel/MemB.CPP index efda13d..a191657 100644 --- a/Kernel/MemB.CPP +++ b/Kernel/MemB.CPP @@ -1,5 +1,4 @@ asm { -USE64 //************************************ _MALLOC:: // Throws 'OutMem' @@ -15,7 +14,7 @@ _MALLOC:: MOV RDX,U64 FS:CTask.addr[RBX] @@05: CMP U32 CTask.task_signature[RDX],TASK_SIGNATURE_VAL -#assert CTask.task_signature==CHeapCtrl.hc_signature //location of signature matches +#assert CTask.task_signature==CHeapCtrl.hc_signature //location signature same JNE @@10 MOV RDX,U64 CTask.data_heap[RDX] @@ -406,21 +405,23 @@ U8 *AMAllocIdentical(U8 *src) return MAllocIdentical(src,adam_task); } -U8 *MAllocAligned(I64 size,I64 alignment,CTask *mem_task=NULL,I64 misalignment=0) +U8 *MAllocAligned(I64 size,I64 alignment, + CTask *mem_task=NULL,I64 misalignment=0) {//Only powers of two alignment. This is awful. I64 mask=alignment-1; U8 *ptr=MAlloc(size+mask+sizeof(I64)+misalignment,mem_task), - *result=(ptr+sizeof(I64)+mask)&~mask+misalignment; + *result=(ptr+sizeof(I64)+mask)&~mask+misalignment; result(I64 *)[-1]=ptr-result; #assert offset(CMemUsed.size)==offset(CMemUsed.start)-sizeof(I64) return result; } -U8 *CAllocAligned(I64 size,I64 alignment,CTask *mem_task=NULL,I64 misalignment=0) +U8 *CAllocAligned(I64 size,I64 alignment, + CTask *mem_task=NULL,I64 misalignment=0) {//Only powers of two alignment. This is awful. I64 mask=alignment-1; U8 *ptr=MAlloc(size+mask+sizeof(I64)+misalignment,mem_task), - *result=(ptr+sizeof(I64)+mask)&~mask+misalignment; + *result=(ptr+sizeof(I64)+mask)&~mask+misalignment; result(I64 *)[-1]=ptr-result; #assert offset(CMemUsed.size)==offset(CMemUsed.start)-sizeof(I64) MemSet(result,0,size); diff --git a/Kernel/MemC.CPP b/Kernel/MemC.CPP index 444a63c..96804da 100644 --- a/Kernel/MemC.CPP +++ b/Kernel/MemC.CPP @@ -77,7 +77,7 @@ Bool Mem32DevIns(CMemRange *tempmr) CMemRange *tempmr1=dev.mem32_root.next,*tempmr2; while (tempmr1!=&dev.mem32_root) { if (!tempmr1->type && tempmr->base>=tempmr1->base && - tempmr->base+tempmr->size<=tempmr1->base+tempmr1->size) { + tempmr->base+tempmr->size<=tempmr1->base+tempmr1->size) { if (tempmr->base>tempmr1->base) { tempmr2=AMAlloc(sizeof(CMemRange)); tempmr2->type=MRT_UNUSED; @@ -88,7 +88,7 @@ Bool Mem32DevIns(CMemRange *tempmr) } QueInsRev(tempmr,tempmr1); tempmr1->size=tempmr1->base+tempmr1->size- - (tempmr->base+tempmr->size); + (tempmr->base+tempmr->size); tempmr1->base=tempmr->base+tempmr->size; if (!tempmr1->size) { QueRem(tempmr1); @@ -165,7 +165,7 @@ U0 MemPagesNotPresentMark() U8 *Mem32DevAlloc(I64 size,I64 alignment) {//Alloc 32-bit addr space for device. (Doesn't work.) Not used. //For this to work the BIOS E820 map must be searched for gaps in -//the 32-bit range and the pool initialized to the gaps. + //the 32-bit range and the pool initialized to the gaps. U8 *base,*limit; CMemRange *tempmr,*tempmr1; while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) @@ -175,7 +175,7 @@ U8 *Mem32DevAlloc(I64 size,I64 alignment) base=(tempmr1->base+alignment-1)&~(alignment-1); limit=base+size-1; if (!tempmr1->type && - limitbase+tempmr1->size) { + limitbase+tempmr1->size) { tempmr=AMAlloc(sizeof(CMemRange)); tempmr->type=MRT_DEV; tempmr->flags=0; @@ -236,7 +236,7 @@ U0 Mem64DevFree(U8 *base,I64 pages2Meg) Yield; if (base==dev.mem64_ptr) dev.mem64_ptr+=pages2Meg*0x200000; - //else not freed +//else not freed LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); } diff --git a/Kernel/MultiProc.CPP b/Kernel/MultiProc.CPP index af13ba6..bfdbbf6 100644 --- a/Kernel/MultiProc.CPP +++ b/Kernel/MultiProc.CPP @@ -51,7 +51,7 @@ AP_32BIT_INIT: ADD ESI,U32 [SYS_CPU_STRUCTS] LEA ESP,U32 CCPU.start_stk+sizeof(CCPU.start_stk)[ESI] - PUSH U32 SYS_START_RFLAGS + PUSH U32 RFLAGG_START POPFD PUSH U32 0 //Return from next call will be 64-bit CALL SYS_EM64T @@ -179,7 +179,7 @@ U0 MPWake(I64 target_cpu) MPInt(I_WAKE,target_cpu); if (!target_cpu) LBtr(&adam_task->task_flags,TASKf_AWAITING_MSG); - if (Bt(&cpu_structs[target_cpu].cpu_flags,CPUf_SETH_SLEEP)) //In case went back to sleep + if (Bt(&cpu_structs[target_cpu].cpu_flags,CPUf_SETH_SLEEP))//back to sleep? cpu_structs[target_cpu].seth_task->wake_jiffy=0; POPFD } @@ -188,21 +188,21 @@ U0 MPWake(I64 target_cpu) U0 MPAPICInit() {//Called by adam during start-up //and other cores during initialization -//after $LK,"BSPStartMP",A="MN:BSPStartMP"$(). + //after $LK,"BSPStartMP",A="MN:BSPStartMP"$(). *LAPIC_SVR(U32 *)|=LAPICF_APIC_ENABLED; dev.mp_apic_ids[Gs->num]=*LAPIC_APIC_ID(U32 *)>>24; *LAPIC_LDR(U32 *)=dev.mp_apic_ids[Gs->num]<<24; *LAPIC_DFR(U32 *)=0xF0000000; -// MemSet(LAPIC_IRR,0,0x20); -// MemSet(LAPIC_ISR,0,0x20); -// MemSet(LAPIC_TMR,0,0x20); + // MemSet(LAPIC_IRR,0,0x20); + // MemSet(LAPIC_ISR,0,0x20); + // MemSet(LAPIC_TMR,0,0x20); SetRAX(Gs->tss->tr); LTR AX if (Gs->num) { IntInit1; - SetRFlags(SYS_NORMAL_RFLAGS); + SetRFlags(RFLAGG_NORMAL); } } @@ -234,7 +234,7 @@ CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL, I64 cmd_code=SVCT_CALL,U8 *aux_str=NULL,I64 aux1=0,I64 aux2=0) {//Queue multicore jobs, handled by Seth tasks. //Set flags to zero if you wish to get the result. -//See $LK,"::/Demo/MultiCore/Lock.CPP"$ + //See $LK,"::/Demo/MultiCore/Lock.CPP"$ CSrvCtrl *ctrl; CSrvCmd *tempc; if (!(0<=target_cpuflags,SVCf_DONE)) { @@ -302,7 +301,7 @@ U0 APSethInit() U0 BSPStartMP() {//Called by adam during $LK,"start-up",A="FF:::/Kernel/KEnd.CPP,BSPStartMP"$. CTask *task; - U8 buf[128]; + U8 buf[STR_LEN]; CAP16BitInit *mp=MP_VECT_ADDR; CCPU *c; I64 i,my_mp_cnt; @@ -325,9 +324,9 @@ U0 BSPStartMP() } MemSet(&cpu_structs[1],0,sizeof(CCPU)*(MP_MAX_PROCESSORS-1)); -//When you start-up other cores, they jump to an addr -//specified by a byte vect number, $LK,"MPN_VECT",A="MN:MPN_VECT"$ which corresponds -//to a location 4096*vect number, $LK,"MP_VECT_ADDR",A="MN:MP_VECT_ADDR"$$WW,0$. + //When you start-up other cores, they jump to an addr + //specified by a byte vect number, $LK,"MPN_VECT",A="MN:MPN_VECT"$ which corresponds + //to a location 4096*vect number, $LK,"MP_VECT_ADDR",A="MN:MP_VECT_ADDR"$$WW,0$. MemCpy(mp,AP_16BIT_INIT,AP_16BIT_INIT_END-AP_16BIT_INIT); MemCpy(&mp->ap_gdt_ptr,SYS_GDT_PTR,sizeof(CSysLimitBase)); mp_cnt_initial=mp_cnt=1; @@ -354,9 +353,8 @@ U0 BSPStartMP() for (i=1;irflags=SYS_START_RFLAGS; - //$LK,"CTask",A="MN:CTask"$ alloced off this core's seth_task's heap (Which is Adam) - task->task_in_que_signature=TASK_IN_QUE_SIGNATURE_VAL; + task->rflags=RFLAGG_START; +//$LK,"CTask",A="MN:CTask"$ alloced off this core's seth_task's heap (Which is Adam) CPUStructInit(i,&cpu_structs[i],task); WBINVD //Not sure why this is needed. Might just need delay. } @@ -382,17 +380,18 @@ U0 BSPInit() dbg.mp_crash=ACAlloc(sizeof(CMPCrash)); -//Must be in code heap because init code uses 32 bit addr of cpu_struct - adam_task->gs=cpu_structs=CAlloc(sizeof(CCPU)*MP_MAX_PROCESSORS,Fs->code_heap); + //Must be in code heap because init code uses 32 bit addr of cpu_struct + adam_task->gs=cpu_structs= + CAlloc(sizeof(CCPU)*MP_MAX_PROCESSORS,Fs->code_heap); adam_task->time_slice_start=GetTSC; CPUStructInit(0,cpu_structs,adam_task); asm {//RAX has GS - IMPORT SET_GS_BASE; - CALL SET_GS_BASE + IMPORT SET_GS_BASE; + CALL SET_GS_BASE } if (Bt(&ee.rdx,9)) { //Unnecessary? -// SetMSR(IA32_LAPIC_BASE,LAPIC_BASE+0x900); + // SetMSR(IA32_LAPIC_BASE,LAPIC_BASE+0x900); MPAPICInit; } } diff --git a/Kernel/BIOS32.CPP b/Kernel/PCIBIOS.CPP similarity index 91% rename from Kernel/BIOS32.CPP rename to Kernel/PCIBIOS.CPP index 5177864..64366bd 100644 --- a/Kernel/BIOS32.CPP +++ b/Kernel/PCIBIOS.CPP @@ -1,10 +1,10 @@ asm { USE32 -SYS_BIOS32_SERVICE_DIR:: DU32 0; +SYS_PCIBIOS_SERVICE_DIR:: DU32 0; SYS_PCI_SERVICES:: DU32 0; -SYS_FIND_BIOS32_SERVICE_DIR:: +SYS_FIND_PCIBIOS_SERVICE_DIR:: MOV ESI,0xE0000 MOV ECX,(0x100000-0xE0000)/4 @@05: CMP U32 [ESI],'_32_' @@ -24,26 +24,26 @@ SYS_FIND_BIOS32_SERVICE_DIR:: POP ECX TEST AL,AL JNZ @@20 - MOV U32 [SYS_BIOS32_SERVICE_DIR],ESI + MOV U32 [SYS_PCIBIOS_SERVICE_DIR],ESI MOV ESI,U32 4[ESI] - MOV U32 [SYS_BIOS32_SERVICE_CALL],ESI + MOV U32 [SYS_PCIBIOS_SERVICE_CALL],ESI RET @@20: ADD ESI,4 LOOP @@05 - MOV U32 [SYS_BIOS32_SERVICE_DIR],0 + MOV U32 [SYS_PCIBIOS_SERVICE_DIR],0 RET SYS_FIND_PCI_SERVICES:: - MOV ESI,U32 [SYS_BIOS32_SERVICE_DIR] + MOV ESI,U32 [SYS_PCIBIOS_SERVICE_DIR] TEST ESI,ESI JNZ @@05 MOV U32 [SYS_PCI_SERVICES],0 RET @@05: MOV EAX,'$$PCI' XOR EBX,EBX - DU8 0x9A; //CALL CGDT.cs32:BIOS32_SERVICE -SYS_BIOS32_SERVICE_CALL:: DU32 0; + DU8 0x9A; //CALL CGDT.cs32:PCIBIOS_SERVICE +SYS_PCIBIOS_SERVICE_CALL:: DU32 0; DU16 CGDT.cs32; TEST AL,AL JNZ @@05 @@ -158,7 +158,7 @@ _extern C32_EDI U32 c32_edi; _extern C32_EFLAGS U32 c32_eflags; _extern SYS_PCI_SERVICES U32 sys_pci_services; -_extern _FAR_CALL32 Bool FarCall32(U0 (*fp_addr)()); //Not reentrant used to call BIOS32. Takes 250uS. +_extern _FAR_CALL32 Bool FarCall32(U0 (*fp_addr)());//Not reentrant.For PCIBIOS. U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg) {//Read U8 in PCI configspace at bus,dev,fun,reg. @@ -209,9 +209,9 @@ U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg) c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; if (FarCall32(sys_pci_services)) - result=c32_ecx; - else - result=0xFFFFFFFF; + result=c32_ecx; + else + result=0xFFFFFFFF; LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); POPFD return result; @@ -268,7 +268,7 @@ I64 PCIClassFind(I64 class_code,I64 n) class_code is low three bytes n is index starting at zero Return: -1 not found - else bus,dev,fun. +else bus,dev,fun. */ I64 result; PUSHFD diff --git a/Kernel/PSect.CPP b/Kernel/PSect.CPP index fda32b6..e246e30 100644 --- a/Kernel/PSect.CPP +++ b/Kernel/PSect.CPP @@ -3,7 +3,7 @@ I64 HasLower(U8 *src) I64 ch; while (ch=*src++) if ('a'<=ch<='z') - return TRUE; + return TRUE; return FALSE; } @@ -64,22 +64,22 @@ U0 PSectCacheAdd(CHash *temps,U8 *addr) Bool old_preempt; CPSectCache *temppc; if (temps && temps->type&HTT_FUN && - (dbg_info=temps(CHashFun *)->dbg_info)) { - old_preempt=Preempt(OFF); + (dbg_info=temps(CHashFun *)->dbg_info)) { + old_preempt=Preempt; lock {i=dbg.psect_cache_index++;} - temppc=&dbg.psect_cache[i&(PSECT_CACHE_SIZE-1)]; - temppc->base=dbg_info->body[0]; - if (addrbase) - temppc->base=addr; - temppc->limit=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]; - if (addr>=temppc->limit) - temppc->limit=addr+1; - i=MinI64(StrLen(temps->str),PSECT_CACHE_STR_LEN-1); - MemCpy(temppc->str,temps->str,i); - temppc->str[i]=0; - temppc->time_stamp=tS; - Preempt(old_preempt); - } + temppc=&dbg.psect_cache[i&(PSECT_CACHE_SIZE-1)]; + temppc->base=dbg_info->body[0]; + if (addrbase) + temppc->base=addr; + temppc->limit=dbg_info->body[dbg_info->max_line+1-dbg_info->min_line]; + if (addr>=temppc->limit) + temppc->limit=addr+1; + i=MinI64(StrLen(temps->str),PSECT_CACHE_STR_LEN-1); + MemCpy(temppc->str,temps->str,i); + temppc->str[i]=0; + temppc->time_stamp=tS; + Preempt(old_preempt); +} } U8 *PSectCacheFind(U8 *addr,I64 *_offset) @@ -94,7 +94,7 @@ U8 *PSectCacheFind(U8 *addr,I64 *_offset) timeout=tS+8.0; for (i=0;ibase<=addrlimit && - temppc->time_stamp>timeout) { + temppc->time_stamp>timeout) { *_offset=addr-temppc->base; return temppc->str; } @@ -156,7 +156,7 @@ I64 SrcLineNum(U8 *addr,I64 cnt=1) if (dbg_info=temph->dbg_info) { num_lines=dbg_info->max_line-dbg_info->min_line+1; body=dbg_info->body; - + //find first nonzero first_line=0; while (!body[first_line]) { @@ -170,15 +170,15 @@ I64 SrcLineNum(U8 *addr,I64 cnt=1) while (!body[last_line] && last_line>first_line) last_line--; - //interpolate to guess line num + //interpolate to guess line num cur_line=ClampI64(ToF64(addr-body[first_line])*(last_line-first_line+1)/ - (body[last_line]-body[first_line]+1),first_line,last_line); + (body[last_line]-body[first_line]+1),first_line,last_line); //retreat while too high while ((!body[cur_line] || body[cur_line]>=addr) && cur_line>first_line) cur_line--; - //advance while to low + //advance while to low while ((!body[cur_line] || body[cur_line]1) { + left =base; + right=base+num-1; + pivot=base[num/2]; do { - less=base; - greater=base+num; - pivot=base[num/2]; - while (less1); + while ((*fp_compare)(*left,pivot)<0) + left++; + while ((*fp_compare)(*right,pivot)>0) + right--; + if (left<=right) + SwapI64(left++,right--); + } while (left<=right); + i=right+1-base; + if (11) - QSort2a(_base,i,fp_compare); - num-=i; - _base=_greater; - } else { - if (num-i>1) - QSort2a(_greater,num-i,fp_compare); - num=i; - } - } while (num>1); + while ((*fp_compare)(left,&pivot)<0) + left++; + while ((*fp_compare)(right,&pivot)>0) + right--; + if (left<=right) + SwapI64(left++,right--); + } while (left<=right); + i=right+1-base; + if (10) + right-=width; + if (left<=right) { + if (left!=right) { + MemCpy(temp,right,width); + MemCpy(right,left,width); + MemCpy(left,temp,width); } + left+=width; + right-=width; } - i=(less-base)/width; - if (i==num) {//All less or equal to pivot - //Point greater to first less - do greater-=width; - while (--i && !(*fp_compare)(greater,pivot)); - if (i) { - less=base+num/2*width; //Pivot was not moved, point to it - if (less1) - QSort2b(base,i,width,fp_compare,temp); - num-=i; - base=greater; - } else { - if (num-i>1) - QSort2b(greater,num-i,width,fp_compare,temp); - num=i; - } - } while (num>1); + } while (left<=right); + i=1+(right-base)/width; + if (11) { - if (width==sizeof(U8 *)) { //assign instead of MemCpy for width 8 - do { - less=base; - greater=base+num*sizeof(U8 *); - pivot(U8 *)=base(U8 **)[num/2]; - while (less1) - QSort2a(base,i,fp_compare); - num-=i; - base=greater; - } else { - if (num-i>1) - QSort2a(greater,num-i,fp_compare); - num=i; - } - } while (num>1); - } else { + if (width==sizeof(U8 *)) //assign instead of MemCpy for width 8 + QSort2a(base,num,fp_compare); + else { temp=MAlloc(width*2); - pivot=temp+width; - do { - less=base; - greater=base+num*width; - MemCpy(pivot,base+num/2*width,width); - while (less1) - QSort2b(base,i,width,fp_compare,temp); - num-=i; - base=greater; - } else { - if (num-i>1) - QSort2b(greater,num-i,width,fp_compare,temp); - num=i; - } - } while (num>1); + QSort2b(base,num,width,fp_compare,temp); Free(temp); } } diff --git a/Kernel/Sched.CPP b/Kernel/Sched.CPP index 602f37c..bd5314d 100644 --- a/Kernel/Sched.CPP +++ b/Kernel/Sched.CPP @@ -42,7 +42,6 @@ requests to spawn tasks. See $LK,"APSethTask",A="MN:APSethTask"$(). $HL,1$*/ asm { -USE64 //************************************ TASK_CONTEXT_SAVE:: //OUT: RSI=FS @@ -206,15 +205,14 @@ RESTORE_RSI_TASK_WITH_KEY_CHECK: RESTORE_RSI_TASK_NO_KEY_CHECK: @@20: BT U64 CTask.task_flags[RSI],TASKf_KILL_TASK JC I32 END_RSI_TASK - TEST U64 CTask.task_flags[RSI],1<next_task=pred->last_task=task; task->last_task=last; task->next_task=pred; - task->task_in_que_signature=TASK_IN_QUE_SIGNATURE_VAL; POPFD } @@ -367,7 +364,6 @@ U0 TaskQueRem(CTask *task) CTask *next,*last; PUSHFD CLI - task->task_in_que_signature=0; next=task->next_task; last=task->last_task; last->next_task=next; diff --git a/Kernel/SrvCmd.CPP b/Kernel/SrvCmd.CPP index f717e88..91ed782 100644 --- a/Kernel/SrvCmd.CPP +++ b/Kernel/SrvCmd.CPP @@ -40,7 +40,7 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) {//Queues a request to compile and execute src code text. CSrvCmd *result; if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || - srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) + srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; result=ACAlloc(sizeof(CSrvCmd)); result->master_task=master; @@ -74,10 +74,10 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) {//Post StdIn text to servant task. Tell who the master task is. CSrvCmd *result; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CTask *task; if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || - srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) { + srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) { Preempt(old_preempt); return NULL; } @@ -125,7 +125,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) CSrvCmd *tempc1,*tempc; CTask *srv=_srv; if (!TaskValidate(srv) || master && !TaskValidate(master)|| - srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) + srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; tempc=ACAlloc(sizeof(CSrvCmd)); tempc->master_task=master; @@ -136,14 +136,14 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) tempc->flags=flags; PUSHFD if (Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0) && - srv!=sys_macro_util_task && msg_code==MSG_KEY_DOWN) { + srv!=sys_macro_util_task && msg_code==MSG_KEY_DOWN) { tempc1=AMAllocIdentical(tempc); CLI QueIns(tempc1,sys_macro_root.last); } CLI while (Bt(&srv->task_flags,TASKf_FILTER_INPUT) && - !Bt(&flags,SVCf_DONT_FILTER)) + !Bt(&flags,SVCf_DONT_FILTER)) srv=srv->next_input_filter_task; tempc->ctrl=&srv->srv_ctrl; while (LBts(&srv->srv_ctrl.flags,SVCRf_LOCKED)) @@ -163,7 +163,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) return tempc; } -Bool ScanResult(CSrvCmd *rqst=NULL,I64 *_result=NULL) +Bool JobResultScan(CSrvCmd *rqst=NULL,I64 *_result=NULL) {//Check rqst complete, return with or without. CSrvCtrl *ctrl; CSrvCmd *tempc,*tempc1; @@ -198,7 +198,7 @@ Bool ScanResult(CSrvCmd *rqst=NULL,I64 *_result=NULL) return FALSE; } -I64 GetResult(CSrvCmd *rqst=NULL) +I64 JobResultGet(CSrvCmd *rqst=NULL) {//See $LK,"::/Demo/MultiCore/Lock.CPP"$ I64 result; CSrvCmd *tempc1; @@ -216,7 +216,7 @@ I64 GetResult(CSrvCmd *rqst=NULL) } LBtr(&Fs->task_flags,TASKf_IDLE); //Could get taken by someone else. - ScanResult(rqst,&result); + JobResultScan(rqst,&result); return result; } @@ -232,7 +232,7 @@ U0 TaskWait(CTask *task=NULL) task1=task->last_input_filter_task; tempc1=&task1->srv_ctrl.next_waiting; if (task1==Fs || !TaskValidate(task1) || - tempc1==tempc1->next && Bt(&task1->task_flags,TASKf_IDLE)) + tempc1==tempc1->next && Bt(&task1->task_flags,TASKf_IDLE)) break; Yield; } @@ -241,25 +241,24 @@ U0 TaskWait(CTask *task=NULL) } U0 PostMsg(CTask *task,I64 msg_code,I64 a1,I64 a2,I64 flags=0) -{//Post a message and return immediately. See $LK,"msg_code",A="MN:MSG_CMD"$. +{//Post message to a task and return immediately. See $LK,"msg_code",A="MN:MSG_CMD"$. if (TaskValidate(task)) { if (Bt(&task->task_flags,TASKf_INPUT_FILTER_TASK)) TaskMsg(task->last_input_filter_task,NULL,msg_code,a1,a2, - flags|1<servant_cpu_num=Gs->num; LBtr(&ctrl->flags,SVCRf_LOCKED); if (tempc->aux_str) - tempc->spawned_task=Spawn(tempc->addr,tempc->fun_arg,tempc->aux_str,,tempc->aux1,tempc->aux2,tempc->flags); + tempc->spawned_task=Spawn(tempc->addr,tempc->fun_arg, + tempc->aux_str,,tempc->aux1,tempc->aux2,tempc->flags); else - tempc->spawned_task=Spawn(tempc->addr,tempc->fun_arg,"Unnamed",,tempc->aux1,tempc->aux2,tempc->flags); + tempc->spawned_task=Spawn(tempc->addr,tempc->fun_arg, + "Unnamed",,tempc->aux1,tempc->aux2,tempc->flags); break; case SVCT_CALL: QueRem(tempc); @@ -297,7 +298,7 @@ I64 SrvCmdRun(CSrvCmd *tempc,I64 old_flags) SetRFlags(old_flags); LBtr(&Fs->task_flags,TASKf_IDLE); try - tempc->result=(*tempc->addr)(tempc->fun_arg); + tempc->result=(*tempc->addr)(tempc->fun_arg); catch Fs->catch_except=TRUE; SetRFlags(old_flags); @@ -310,7 +311,7 @@ I64 SrvCmdRun(CSrvCmd *tempc,I64 old_flags) SetRFlags(old_flags); LBtr(&Fs->task_flags,TASKf_IDLE); try - tempc->result=ExePrint("%s",tempc->aux_str); + tempc->result=ExePrint("%s",tempc->aux_str); catch Fs->catch_except=TRUE; SetRFlags(old_flags); @@ -385,7 +386,7 @@ I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL) {//Execute code text in PopUp win task. I64 result; CSrvCmd *tempc; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent); if (!parent) { TaskExe(task,parent,buf,1<popup_task=task; tempc=TaskExe(task,parent,buf,1<popup_task=NULL; Kill(task); if (_pu_task) *_pu_task=NULL; @@ -418,7 +419,7 @@ I64 Adam(U8 *fmt,...) {//Sends text to the adam task which gets compiled and run. I64 result; U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; CSrvCmd *tempc; if (Fs==adam_task) { tempc=TaskExe(adam_task,Fs,buf,0); @@ -428,7 +429,7 @@ I64 Adam(U8 *fmt,...) tempc=TaskExe(adam_task,Fs,buf,1<cur_dv),Fs->cur_dir,name); + Drv2Let(Fs->cur_dv),Fs->cur_dir,name); Free(name); } diff --git a/Kernel/StrA.CPP b/Kernel/StrA.CPP index df73972..5b1af8e 100644 --- a/Kernel/StrA.CPP +++ b/Kernel/StrA.CPP @@ -18,7 +18,6 @@ U0 PutHex(I64 num,I64 width) } asm { -USE64 // IN: RAX=NUM TO PRINT PUT_HEX_U64:: PUSH_C_REGS @@ -306,76 +305,99 @@ _STRIMATCH:: POP RBP RET1 16 } -_extern _STRCMP I64 StrCmp(U8 *st1,U8 *st2); //Compare two strings. -_extern _STRICMP I64 StrICmp(U8 *st1,U8 *st2); //Compare two strings, ignoring case. -_extern _STRNCMP I64 StrNCmp(U8 *st1,U8 *st2,I64 n); //Compare N bytes in two strings. -_extern _STRNICMP I64 StrNICmp(U8 *st1,U8 *st2,I64 n); //Compare N bytes in two strings, ignoring case. -_extern _STRMATCH U8 *StrMatch(U8 *needle,U8 *haystack_str); //Scan for string in string. -_extern _STRIMATCH U8 *StrIMatch(U8 *needle,U8 *haystack_str); //Scan for string in string, ignoring case. -_extern _STRCPY U0 StrCpy(U8 *dst,U8 *src); //Copy string. +_extern _STRCMP I64 StrCmp( + U8 *st1,U8 *st2); //Compare two strings. +_extern _STRICMP I64 StrICmp( + U8 *st1,U8 *st2); //Compare two strings, ignoring case. +_extern _STRNCMP I64 StrNCmp( + U8 *st1,U8 *st2,I64 n); //Compare N bytes in two strings. +_extern _STRNICMP I64 StrNICmp( + U8 *st1,U8 *st2,I64 n); //Compare N bytes in two strings, ignoring case. +_extern _STRMATCH U8 *StrMatch( + U8 *needle,U8 *haystack_str); //Scan for string in string. +_extern _STRIMATCH U8 *StrIMatch( + U8 *needle,U8 *haystack_str);//Scan for string in string, ignoring case. +_extern _STRCPY U0 StrCpy( + U8 *dst,U8 *src); //Copy string. //These bitmaps go to 0-511 so that $LK,"Lex",A="MN:Lex"$() can use them with $LK,"Token Codes",A="MN:TK_EOF"$. +U32 + chars_bmp_alpha[16]= + {0x0000000,0x00000000,0x87FFFFFF,0x07FFFFFE, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -U32 chars_bitmap_alpha[16]= -{0x0000000,0x00000000,0x87FFFFFF,0x07FFFFFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_alpha_numeric[16]= + {0x0000000,0x03FF0000,0x87FFFFFF,0x07FFFFFE, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_alpha_numeric[16]= -{0x0000000,0x03FF0000,0x87FFFFFF,0x07FFFFFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_alpha_numeric_no_at[16]= + {0x0000000,0x03FF0000,0x87FFFFFE,0x07FFFFFE, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_alpha_numeric_no_at[16]= -{0x0000000,0x03FF0000,0x87FFFFFE,0x07FFFFFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_word[16]= + {0x0000000,0x03FF0080,0x87FFFFFE,0x07FFFFFE, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_word[16]= -{0x0000000,0x03FF0080,0x87FFFFFE,0x07FFFFFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_filename[16]= + {0x0000000,0x03FF73FB,0xEFFFFFFF,0x6FFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_filename[16]= -{0x0000000,0x03FF73FB,0xEFFFFFFF,0x2FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_dec_numeric[16]= + {0x0000000,0x03FF0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_dec_numeric[16]= -{0x0000000,0x03FF0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_hex_numeric[16]= + {0x0000000,0x03FF0000,0x7E,0x7E,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_hex_numeric[16]= -{0x0000000,0x03FF0000,0x7E,0x7E,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_white_space[16]= + {0x80003600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_white_space[16]= -{0x80003600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_non_eol_white_space[16]= + {0x80001200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_non_eol_white_space[16]= -{0x80001200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_zero_cr_nl_cursor[16]= + {0x00002421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_zero_cr_nl_cursor[16]= -{0x00002421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_zero_tab_ff_cr_nl_cursor[16]= + {0x00003621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_zero_tab_ff_cr_nl_cursor[16]= -{0x00003621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_zero_tab_ff_cr_nl_cursor_dollar[16]= + {0x00003621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, -chars_bitmap_zero_tab_ff_cr_nl_cursor_dollar[16]= -{0x00003621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + chars_bmp_getkey[16]= + {0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_getkey[16]= -{0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_macro[16]= + {0x80002600,0xFFFFFFDF,0xFFFFFFFF,0x7FFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_printable[16]= -{0x80003600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_printable[16]= + {0x80003600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_displayable[16]= -{0x80000000,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0}, + chars_bmp_displayable[16]= + {0x80000000,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0}, -chars_bitmap_safe_dollar[16]= -{0x80000000,0xFFFFFFEF,0xFFFFFFFF,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0,0,0,0,0,0,0,0},//same but no dollar sign + chars_bmp_safe_dollar[16]= + {0x80000000,0xFFFFFFEF,0xFFFFFFFF,0x7FFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0,0,0,0,0,0,0,0},//same but no dollar sign -chars_bitmap_non_eol[16]= -{0xFFFFDBFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, -0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF}; + chars_bmp_non_eol[16]= + {0xFFFFDBFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF}; U8 *LstSub(I64 sub, U8 *lst) {//Point to lst entry. @@ -399,7 +421,7 @@ U8 *LstSub(I64 sub, U8 *lst) I64 LstMatch(U8 *needle, U8 *haystack_lst,I64 flags=0) {//-2 if Ambiguous // -1 if not found -// Not efficient. Use hash tables for efficiency. + // Not efficient. Use hash tables for efficiency. I64 n,sub=0,result=-1; U8 *ptr; Bool exact_match=FALSE; @@ -505,14 +527,14 @@ U8 *StrUtil(U8 *_src,I64 flags) I64 ch; if (flags & SUF_REM_LEADING) - while (Bt(chars_bitmap_white_space,*src)) + while (Bt(chars_bmp_white_space,*src)) src++; while (ch=*src++) - if (Bt(chars_bitmap_white_space,ch)) { + if (Bt(chars_bmp_white_space,ch)) { if (!(flags & SUF_REM_SPACES)) { if (flags & SUF_SINGLE_SPACE) { *dst++ = CH_SPACE; - while ((ch=*src++) && Bt(chars_bitmap_white_space,ch)); + while ((ch=*src++) && Bt(chars_bmp_white_space,ch)); src--; } else *dst++ = ch; @@ -522,7 +544,7 @@ U8 *StrUtil(U8 *_src,I64 flags) *dst=0; if (flags & SUF_REM_TRAILING) - while (dst!=_src && (!*dst || Bt(chars_bitmap_white_space,*dst))) + while (dst!=_src && (!*dst || Bt(chars_bmp_white_space,*dst))) *dst-- =0; if (flags & SUF_TO_UPPER) for (dst=_src;*dst;dst++) { @@ -539,7 +561,7 @@ U8 *StrUtil(U8 *_src,I64 flags) if (flags & SUF_SAFE_DOLLAR) for (dst=_src;*dst;dst++) { ch=*dst; - if (!Bt(chars_bitmap_safe_dollar,*dst)) + if (!Bt(chars_bmp_safe_dollar,*dst)) *dst='.'; } if (flags & SUF_S2T) @@ -610,25 +632,22 @@ U8 *StrFind(U8 *needle,U8 *haystack_str,I64 flags=0) haystack_str=StrIMatch(needle,haystack_str); else haystack_str=StrMatch(needle,haystack_str); - if (haystack_str && flags & SFF_WHOLE_LABELS_BEFORE) { - if (haystack_str!=saved_haystack_str) { - if (Bt(chars_bitmap_alpha_numeric,*(haystack_str-1))) { - haystack_str++; - if (*haystack_str) - cont=TRUE; - else - haystack_str=NULL; - } - } + if (haystack_str && flags & SFF_WHOLE_LABELS_BEFORE && + haystack_str!=saved_haystack_str && + Bt(chars_bmp_alpha_numeric,*(haystack_str-1))) { + haystack_str++; + if (*haystack_str) + cont=TRUE; + else + haystack_str=NULL; } - if (haystack_str && flags & SFF_WHOLE_LABELS_AFTER) { - if (Bt(chars_bitmap_alpha_numeric,*(haystack_str+plen))) { - haystack_str++; - if (*haystack_str) - cont=TRUE; - else - haystack_str=NULL; - } + if (haystack_str && flags & SFF_WHOLE_LABELS_AFTER && + Bt(chars_bmp_alpha_numeric,*(haystack_str+plen))) { + haystack_str++; + if (*haystack_str) + cont=TRUE; + else + haystack_str=NULL; } } while (cont); return haystack_str; diff --git a/Kernel/StrB.CPP b/Kernel/StrB.CPP index 8d657af..baec783 100644 --- a/Kernel/StrB.CPP +++ b/Kernel/StrB.CPP @@ -140,7 +140,8 @@ ScanFlags(&flags,"R\0L\0Dump\0Scan\0","+Dump-R"); //Sets Bit#2, Clears Bit#0. src++; if (*src) { ptr=buf; - while (*src && *src!='+' && *src!='-' && *src!=CH_SPACE && *src!=CH_SHIFT_SPACE) + while (*src && *src!='+' && *src!='-' && + *src!=CH_SPACE && *src!=CH_SHIFT_SPACE) *ptr++=*src++; *ptr=0; i=LstMatch(buf,lst); @@ -155,7 +156,8 @@ ScanFlags(&flags,"R\0L\0Dump\0Scan\0","+Dump-R"); //Sets Bit#2, Clears Bit#0. src++; if (*src) { ptr=buf; - while (*src && *src!='+' && *src!='-' && *src!=CH_SPACE && *src!=CH_SHIFT_SPACE) + while (*src && *src!='+' && *src!='-' && + *src!=CH_SPACE && *src!=CH_SHIFT_SPACE) *ptr++=*src++; *ptr=0; i=LstMatch(buf,lst); diff --git a/Kernel/StrPrint.CPP b/Kernel/StrPrint.CPP index afbbd5d..ea26176 100644 --- a/Kernel/StrPrint.CPP +++ b/Kernel/StrPrint.CPP @@ -69,7 +69,7 @@ U8 *MPrintQ(U8 *ptr,I64 flags) { U8 **_buf,*buf,**_dst,*dst,buf2[8],*ptr2; I64 ch; - buf=MAlloc(128); + buf=MAlloc(STR_LEN); _buf=&buf; dst=buf; _dst=&dst; @@ -128,7 +128,7 @@ U8 *MPrintq(U8 *ptr,I64 flags) { U8 **_buf,*buf,**_dst,*dst; I64 i,ch,ch1; - buf=MAlloc(128); + buf=MAlloc(STR_LEN); _buf=&buf; dst=buf; _dst=&dst; @@ -173,7 +173,7 @@ U8 *MPrintq(U8 *ptr,I64 flags) ptr++; while (TRUE) { ch1=ToUpper(*ptr++); - if (Bt(chars_bitmap_hex_numeric,ch1)) { + if (Bt(chars_bmp_hex_numeric,ch1)) { if (ch1<='9') i=i<<4+ch1-'0'; else @@ -207,15 +207,15 @@ U8 *MPrintq(U8 *ptr,I64 flags) return buf; } -U8 *sys_pos_powers_lets=" KMGTPEZY", - *sys_neg_powers_lets=" mænpfazy", - *sys_pos_powers_lst="kilo\0mega\0giga\0tera\0peta\0exa\0zetta\0yotta\0", - *sys_neg_powers_lst="milli\0micro\0nano\0pico\0femto\0atto\0zepto\0yocto\0"; +U8 *sys_pos_pows_lets=" KMGTPEZY", + *sys_neg_pows_lets=" mænpfazy", + *sys_pos_pows_lst="kilo\0mega\0giga\0tera\0peta\0exa\0zetta\0yotta\0", + *sys_neg_pows_lst="milli\0micro\0nano\0pico\0femto\0atto\0zepto\0yocto\0"; #define TEMP_BUF_LEN 256 #define SLOP 8 -U8 *StrPrintJoin(U8 *dst,U8 *src,I64 argc,I64 *argv) +U8 *StrPrintJoin(U8 *dst,U8 *fmt,I64 argc,I64 *argv) {/*$LK,"Print(\"\") Fmt Strings",A="FI:::/Doc/Print.TXT"$ In float formatting, do not exceed 18-digits before or after the decimal point @@ -230,45 +230,45 @@ to avoid this. F64 d,d1; U8 *ptr,**_buf,*buf,**_dst,temp_buf[TEMP_BUF_LEN],temp_buf2[TEMP_BUF_LEN*2]; - if (!src) + if (!fmt) throw('StrPrint'); if (dst) { _buf=NULL; buf=dst; } else { - buf=MAlloc(128); + buf=MAlloc(STR_LEN); _buf=&buf; dst=buf; } _dst=&dst; - while (ch = *src++) { + while (ch = *fmt++) { if (ch=='%') { flags=0; - if (*src=='-') { + if (*fmt=='-') { flags|=SPF_LEFT_JUSTIFY; - src++; + fmt++; } - if (*src=='0') { + if (*fmt=='0') { flags|=SPF_PAD_ZERO; - src++; + fmt++; } len=0; - while ('0'<=*src<='9') - len=len*10+ *src++ -'0'; - if (*src=='*') { - src++; + while ('0'<=*fmt<='9') + len=len*10+ *fmt++ -'0'; + if (*fmt=='*') { + fmt++; if (cur_arg>=argc) throw('StrPrint'); len=argv[cur_arg++]; } dec_len=0; - if (*src=='.') { - src++; - while ('0'<=*src<='9') - dec_len=dec_len*10+ *src++ -'0'; - if (*src=='*') { - src++; + if (*fmt=='.') { + fmt++; + while ('0'<=*fmt<='9') + dec_len=dec_len*10+ *fmt++ -'0'; + if (*fmt=='*') { + fmt++; if (cur_arg>=argc) throw('StrPrint'); dec_len=argv[cur_arg++]; @@ -278,7 +278,7 @@ to avoid this. aux_fmt_num=0; while (TRUE) { - switch (*src) { + switch (*fmt) { sub_switch_start: case '$$': flags|=SPF_DOLLAR; @@ -295,28 +295,28 @@ to avoid this. case 'l': //harmless break; sub_switch_end: - src++; + fmt++; break; case 'h': - src++; + fmt++; flags|=SPF_AUX_FMT_NUM; - if (*src=='?') { - src++; + if (*fmt=='?') { + fmt++; flags|=SPF_QUESTION; } else { - if (*src=='*') { - src++; + if (*fmt=='*') { + fmt++; if (cur_arg>=argc) throw('StrPrint'); aux_fmt_num=argv[cur_arg++]; } else { - if (*src=='-') { - src++; + if (*fmt=='-') { + fmt++; flags|=SPF_NEG_AUX_FMT_NUM; } - while ('0'<=*src<='9') - aux_fmt_num=aux_fmt_num*10+ *src++ -'0'; + while ('0'<=*fmt<='9') + aux_fmt_num=aux_fmt_num*10+ *fmt++ -'0'; if (flags&SPF_NEG_AUX_FMT_NUM) aux_fmt_num=-aux_fmt_num; } @@ -327,9 +327,9 @@ to avoid this. } } -sp_arg: + sp_arg: k=0; - switch (*src++) { + switch (*fmt++) { sub_switch_start: case 'F': if (cur_arg>=argc) @@ -430,7 +430,8 @@ sp_arg: else StrPrintPSect(temp_buf,argv[cur_arg],0); if (!IsRaw || !_buf) { - StrPrint(temp_buf2,"$$LK,\"%s\",A=\"AD:0x%X\"$$",temp_buf,argv[cur_arg]); + StrPrint(temp_buf2,"$$LK,\"%s\",A=\"AD:0x%X\"$$", + temp_buf,argv[cur_arg]); OutStr(temp_buf2,_buf,_dst,len,flags); } else OutStr(temp_buf,_buf,_dst,len,flags); @@ -474,7 +475,8 @@ sp_out_comma_num: if (flags&SPF_PAD_ZERO) { if (flags&SPF_NEG) SPutChar(_dst,'-',_buf); - comma_cnt=(len-k-i+comma_fmt_cnt-comma_cnt+1)%(comma_fmt_cnt+1)+1; + comma_cnt=(len-k-i+comma_fmt_cnt-comma_cnt+1) + %(comma_fmt_cnt+1)+1; for (;i0) - temp_buf[k++]=sys_pos_powers_lets[i]; + temp_buf[k++]=sys_pos_pows_lets[i]; else if (len!=0) temp_buf[k++]=CH_SPACE; if (!(flags&SPF_DECIMAL)) { @@ -895,8 +897,9 @@ U8 *CatPrint(U8 *_dst,U8 *fmt,...) U0 Print(U8 *fmt,...) {//$LK,"Print(\"\") Fmt Strings",A="FI:::/Doc/Print.TXT"$. See $LK,"StrPrintJoin",A="MN:StrPrintJoin"$(). +//Don't use this. $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT.Z,DemoHolyC"$ U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - PutS(buf); + PutS(buf);//Don't use PutS(). $LK,"See Print() shortcut.",A="FF:::/Doc/HolyC.TXT.Z,DemoHolyC"$ Free(buf); } diff --git a/Kernel/StrScan.CPP b/Kernel/StrScan.CPP index 968dbcf..16de541 100644 --- a/Kernel/StrScan.CPP +++ b/Kernel/StrScan.CPP @@ -1,14 +1,14 @@ I64 Str2I64(U8 *st,I64 radix=10,U8 **_end_ptr=NULL) {//String to I64. Similar to strtoul(). //Allows radix change with "0x20" "0b1010" "0d123" "0o18". -//Be careful of Str2I64("0b101",16)-->0xB101. + //Be careful of Str2I64("0b101",16)-->0xB101. Bool neg=FALSE; I64 ch,result=0; if (!st || !(2<=radix<=36)) { if (_end_ptr) *_end_ptr=st; return 0; } - while (Bt(chars_bitmap_white_space,*st)) + while (Bt(chars_bmp_white_space,*st)) st++; while (TRUE) switch (*st) { @@ -66,7 +66,7 @@ to avoid this. Bool neg=FALSE,neg_e=FALSE; ch=*src++; - while (Bt(chars_bitmap_white_space,ch)) + while (Bt(chars_bmp_white_space,ch)) ch=*src++; if (ch=='-') { neg=TRUE; @@ -84,7 +84,7 @@ to avoid this. } i=0; while (TRUE) { - if (Bt(chars_bitmap_dec_numeric,ch)) + if (Bt(chars_bmp_dec_numeric,ch)) i=i*10+ch-'0'; else { if (ch=='.' || ch=='e' || ch=='E') @@ -98,7 +98,7 @@ to avoid this. ch=*src++; k=0; while (TRUE) { - if (Bt(chars_bitmap_dec_numeric,ch)) { + if (Bt(chars_bmp_dec_numeric,ch)) { i=i*10+ch-'0'; k++; } else { @@ -116,7 +116,7 @@ to avoid this. } j=0; while (TRUE) { - if (Bt(chars_bitmap_dec_numeric,ch)) + if (Bt(chars_bmp_dec_numeric,ch)) j=j*10+ch-'0'; else { if (neg_e) @@ -138,10 +138,10 @@ a2f_end: CDate Str2Date(U8 *_src) {/*"*+nnnn", "*-nnnn", "mm/dd", "mm/dd/yy" It also supports some funs - SM() start of mon - EM() end of mon - SY() start of year - EY() end of year +SM() start of mon +EM() end of mon +SY() start of year +EY() end of year Full expressions are not implimented but you can do stuff like SM(*-7)+3 and it will return the 3rd day after @@ -151,10 +151,10 @@ today. CDate result=0; CDateStruct ds,ds_now; U8 *src=MStrUtil(_src,SUF_REM_SPACES|SUF_TO_UPPER), - *v=StrNew(src), - *ptr=src; + *v=StrNew(src), + *ptr=src; Bool start_mon=FALSE,end_mon=FALSE, - start_year=FALSE,end_year=FALSE; + start_year=FALSE,end_year=FALSE; MemSet(&ds,0,sizeof(CDateStruct)); if (!StrNCmp(ptr,"SM(",3)) { diff --git a/Kernel/Task.CPP b/Kernel/Task.CPP index bace57f..b58535e 100644 --- a/Kernel/Task.CPP +++ b/Kernel/Task.CPP @@ -19,7 +19,7 @@ U0 Exit() Bool TaskValidate(CTask *task) {//return TRUE if task looks valid. if (!(0addr!=task || - task->task_signature(I64)!=TASK_COMBINED_SIGNATURE_VAL) + task->task_signature!=TASK_SIGNATURE_VAL) return FALSE; else return TRUE; @@ -28,7 +28,7 @@ Bool TaskValidate(CTask *task) Bool Kill(CTask *task,Bool wait=TRUE) {//Terminate other task. I64 i; - Bool old_preempt=Preempt(OFF); + Bool old_preempt=Preempt; if (TaskValidate(task) && task!=sys_winmgr_task) { for (i=0;i=stk_size_threshold) { -asm { - LEAVE - POP RAX //return addr - ADD RSP,16 //pop threshold,stk_size - POP RBX // *f - ADD RSP,8 //pop ARGC - PUSH RAX - JMP RBX //CALL fp_addr() -}; + asm { + LEAVE + POP RAX //return addr + ADD RSP,16 //pop threshold,stk_size + POP RBX // *f + ADD RSP,8 //pop ARGC + PUSH RAX + JMP RBX //CALL fp_addr() + }; } else { @@ -107,43 +108,43 @@ asm { *--rsp2=*--rsp; _stk=&Fs->stk; temps->stk_ptr=rsp=GetRSP; -asm { - IMPORT _FREE; //We are in a function, not at glbl scope. - //The compiler treats these in isolation. + asm { + IMPORT _FREE; //We are in a function, not at glbl scope. +//The compiler treats these in isolation. - PUSHFD - POP RDX //flags - CLI - MOV RBX,U64 &temps2[RBP] - MOV RAX,&_stk[RBP] - MOV U64 [RAX],RBX //Fs->stk=temps2 - MOV RSP,U64 &rsp2[RBP] - PUSH RDX - POPFD + PUSHFD + POP RDX //flags + CLI + MOV RBX,U64 &temps2[RBP] + MOV RAX,&_stk[RBP] + MOV U64 [RAX],RBX //Fs->stk=temps2 + MOV RSP,U64 &rsp2[RBP] + PUSH RDX + POPFD - CALL U64 &fp_addr[RBP] - MOV U64 &result[RBP],RAX + CALL U64 &fp_addr[RBP] + MOV U64 &result[RBP],RAX - PUSHFD - POP RDX //flags - CLI - MOV RBX,U64 &temps[RBP] - MOV RAX,&_stk[RBP] - MOV U64 [RAX],RBX //Fs->stk=temps - MOV RSP,U64 &rsp[RBP] - PUSH RDX - POPFD + PUSHFD + POP RDX //flags + CLI + MOV RBX,U64 &temps[RBP] + MOV RAX,&_stk[RBP] + MOV U64 [RAX],RBX //Fs->stk=temps + MOV RSP,U64 &rsp[RBP] + PUSH RDX + POPFD - PUSH U64 &temps2[RBP] - CALL _FREE + PUSH U64 &temps2[RBP] + CALL _FREE - MOV RDX,U64 &old_stk[RBP] - MOV RBX,U64 8[RBP] - MOV RAX,U64 &result[RBP] - MOV RBP,U64 [RBP] - MOV RSP,RDX - JMP RBX //return -}; + MOV RDX,U64 &old_stk[RBP] + MOV RBX,U64 8[RBP] + MOV RAX,U64 &result[RBP] + MOV RBP,U64 [RBP] + MOV RSP,RDX + JMP RBX //return + }; } return 0; //dummy to get rid of warning } @@ -159,16 +160,16 @@ I64 TaskInit(CTask *task,I64 stk_size) QueInit(&task->data_heap->next_mem_blk); task->addr=task->next_task=task->last_task= - task->next_input_filter_task=task->last_input_filter_task= - task; + task->next_input_filter_task=task->last_input_filter_task= + task; task->task_num=sys_num_spawned_tasks++; - task->rflags=SYS_NORMAL_RFLAGS; + task->rflags=RFLAGG_NORMAL; task->win_inhibit=WIG_TASK_DFT; task->next_child_task=task->last_child_task= - (&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task); + (&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task); SrvCtrlInit(&task->srv_ctrl); QueInit(&task->next_lex); @@ -177,7 +178,8 @@ I64 TaskInit(CTask *task,I64 stk_size) QueInit(&task->next_ode); task->fpu_mmx=MAllocAligned(sizeof(CFPU),0x10,task); - MemCpy(task->fpu_mmx,SYS_FIXED_AREA+offset(CSysFixedArea.init_fpu_mmx),sizeof(CFPU)); + MemCpy(task->fpu_mmx, + SYS_FIXED_AREA+offset(CSysFixedArea.init_fpu_mmx),sizeof(CFPU)); task->hash_table=HashTableNew(TASK_HASH_SIZE,task); @@ -195,7 +197,7 @@ I64 TaskInit(CTask *task,I64 stk_size) task->win_top =13; task->win_bottom =text.rows-2; - if (dsk.boot_drv_let) //Beware Adam $LK,"TaskInit",A="FF:::/Kernel/KStart.CPP,TaskInit"$. Okay, I guess, until $LK,"ChgDsk",A="FF:::/Kernel/KEnd.CPP,ChgDsk"$(). + if (dsk.boot_drv_let) //Beware Adam $LK,"TaskInit",A="FF:::/Kernel/KStart.CPP,TaskInit"$. I guess ok until $LK,"ChgDsk",A="FF:::/Kernel/KEnd.CPP,ChgDsk"$(). task->cur_dv=dsk.let_to_drv[ToUpper(dsk.boot_drv_let)-'A']; task->cur_dir=StrNew("/Home",task); @@ -204,18 +206,18 @@ I64 TaskInit(CTask *task,I64 stk_size) return task; } -CTask *Spawn(U0 (*fp_start_addr)(U8 *data),U8 *data=NULL, - U8 *task_name=NULL, - I64 target_cpu=-1, //-1 means current CPU. See $LK,"multi-core",A="FI:::/Demo/MultiCore/LoadTest.CPP"$. - CTask *parent=NULL, //NULL means adam - I64 stk_size=0, //0=default - I64 flags=1<=0) - return SpawnQue(fp_start_addr,data,task_name,target_cpu,parent,stk_size,flags); + return SpawnQue(fp_start_addr,data,task_name,target_cpu, + parent,stk_size,flags); task=CAlloc(sizeof(CTask),adam_task->code_heap); task->task_signature=TASK_SIGNATURE_VAL; if (!task_name) task_name="Unnamed Task"; @@ -264,23 +266,23 @@ U0 TaskDerivedValsUpdate(CTask *task=NULL,Bool update_z_buf=TRUE) POPFD } -I64 ExeCmdLine(CLex *lx) -{//Terminal JIT-compile-and-execute loop for CLex. +I64 ExeCmdLine(CCmpCtrl *cc) +{//Terminal JIT-compile-and-execute loop for CCmpCtrl. I64 result=0,type,old_title_src=Fs->title_src; - U8 *ptr,*ptr2,*ptr3,*ex,*old_task_title=StrNew(Fs->task_title); + U8 *ptr,*ptr2,*ptr3,*machine_code,*old_task_title=StrNew(Fs->task_title); F64 t0; CDocEntry *doc_e; CDoc *doc; if (Fs->title_src!=TTS_LOCKED_CONST) Fs->title_src=TTS_CUR_LEX; - while (lx->token && - (lx->token!='}' || !(lx->flags & LF_EXE_BLK)) ) { + while (cc->token && + (cc->token!='}' || !(cc->flags & CCF_EXE_BLK)) ) { if (Fs->title_src==TTS_CUR_LEX) { ptr2=&Fs->task_title; ptr3=ptr2+TASK_TITLE_LEN; - if (lx->cur_lfn->flags & LFSF_DOC) { - doc_e=lx->cur_lfn->cur_entry; - doc=lx->cur_lfn->doc; + if (cc->lex_include_stk->flags & LFSF_DOC) { + doc_e=cc->lex_include_stk->cur_entry; + doc=cc->lex_include_stk->doc; while (doc_e!=doc && ptr2type_u8) { case DOCT_TEXT: @@ -297,21 +299,22 @@ I64 ExeCmdLine(CLex *lx) } if (ptr2cur_lfn->line_start) && *ptr) + if ((ptr=cc->lex_include_stk->line_start) && *ptr) MemCpy(ptr2,ptr,TASK_TITLE_LEN); } - lx->flags&=~LF_HAS_MISC_DATA; - ex=LexStatement2Bin(lx,&type); - if (ex!=INVALID_PTR) { - if (!(lx->flags&LF_JUST_LOAD)) { + cc->flags&=~CCF_HAS_MISC_DATA; + machine_code=LexStatement2Bin(cc,&type); + if (machine_code!=INVALID_PTR) { + if (!(cc->flags&CCF_JUST_LOAD)) { t0=tS; - result=Call(ex); + result=Call(machine_code); Fs->answer=result; Fs->answer_type=type; Fs->answer_time=tS-t0; + Fs->new_answer=TRUE; } - if (!(lx->flags&LF_HAS_MISC_DATA)) - Free(ex); + if (!(cc->flags&CCF_HAS_MISC_DATA)) + Free(machine_code); } } if (Fs->title_src!=TTS_LOCKED_CONST) { @@ -319,8 +322,8 @@ I64 ExeCmdLine(CLex *lx) StrCpy(Fs->task_title,old_task_title); } Free(old_task_title); - if (lx->flags&LF_JUST_LOAD) { - if (lx->error_cnt) + if (cc->flags&CCF_JUST_LOAD) { + if (cc->error_cnt) return FALSE; else return TRUE; @@ -330,18 +333,18 @@ I64 ExeCmdLine(CLex *lx) U0 UserTaskCont() {//Terminal key-input-execute loop. - CLex *lx; + CCmpCtrl *cc; CDoc *doc; Bool cont=TRUE; do { - lx=LexNew(,LF_PMT); - QueIns(lx,Fs->last_lex); + cc=CmpCtrlNew(,CCF_PMT); + QueIns(cc,Fs->last_lex); try { - Lex(lx); - ExeCmdLine(lx); - cont=Bt(&lx->flags,Lf_PMT); - QueRem(lx); - LexDel(lx); + Lex(cc); + ExeCmdLine(cc); + cont=Bt(&cc->flags,CCf_PMT); + QueRem(cc); + CmpCtrlDel(cc); } catch { if ((doc=Fs->put_doc) && doc->doc_signature==DOC_SIGNATURE_VAL) DocUnlock(doc); @@ -459,7 +462,7 @@ I64 TaskEnd() (*fp_set_std_palette)(); } -//QueRem + //QueRem task->task_signature(I64)=0; tempt =task->next_input_filter_task; @@ -484,9 +487,9 @@ I64 TaskEnd() } else TaskFinishOff(task); //dangerous (stk in use) //Never happens--winmgr exists except during boot and no tasks die during boot -//currently, though this has been different and might be different in future. -//Would have to be multicore task getting this task's memory -//because IRQs are off, so no tasks on this core run. + //currently, though this has been different and might be different in + //future. Would have to be multicore task getting this task's memory + //because IRQs are off, so no tasks on this core run. return tempt; } diff --git a/Linux/GodPassage b/Linux/GodPassage new file mode 100644 index 0000000..56e08fb --- /dev/null +++ b/Linux/GodPassage @@ -0,0 +1,14 @@ +#!/bin/bash + +#This prints a random Bible passage. + +if [ ! -f Bible.TXT ]; then + echo "Downloading Bible.TXT..." + wget http://www.templeos.org/Wb/Home/Wb2/Files/Text/Bible.TXT + echo "Done." +fi + +LINE=$(shuf -en 1 {1..100000} --random-source=/dev/urandom) +echo "Line $LINE:" +tail -n $LINE Bible.TXT | head -n 16 + diff --git a/Linux/GodWords b/Linux/GodWords new file mode 100644 index 0000000..6d63434 --- /dev/null +++ b/Linux/GodWords @@ -0,0 +1,6 @@ +#!/bin/bash + +#This prints ten random words. + +echo "$(shuf -n 10 /usr/share/dict/words --random-source=/dev/urandom | tr '\n' ' ')" + diff --git a/Linux/TOSZ.CPP b/Linux/TOSZ.CPP index f39c1db..757fd5b 100644 --- a/Linux/TOSZ.CPP +++ b/Linux/TOSZ.CPP @@ -19,39 +19,31 @@ typedef unsigned char BOOL; #define CT_7_BIT 2 #define CT_8_BIT 3 -class ArcTableEntry +class CArcEntry { public: - ArcTableEntry *next; + CArcEntry *next; WORD basecode; BYTE ch,pad; }; -class ArcCs //control structure +class CArcCtrl //control structure { public: - DWORD src_size; - DWORD src_pos; - BYTE *src_buf; - DWORD dst_size; - DWORD dst_pos; - BYTE *dst_buf; - DWORD min_bits; - DWORD min_table_entry; - ArcTableEntry *cur_entry; - DWORD cur_bits_in_use; - ArcTableEntry *next_entry; - DWORD next_bits_in_use; - BYTE *stack_ptr; - BYTE *stack_base; - DWORD free_index; - DWORD free_limit; - DWORD saved_basecode; - DWORD entry_used; - BYTE last_ch,pad1,pad2,pad3; - ArcTableEntry compress[ARC_MAX_TABLE_ENTRY+1]; - ArcTableEntry *hash[ARC_MAX_TABLE_ENTRY+1]; + DWORD src_pos,src_size, + dst_pos,dst_size; + BYTE *src_buf,*dst_buf; + DWORD min_bits,min_table_entry; + CArcEntry *cur_entry,*next_entry; + DWORD cur_bits_in_use,next_bits_in_use; + BYTE *stk_ptr,*stk_base; + DWORD free_index,free_limit, + saved_basecode, + entry_used, + last_ch; + CArcEntry compress[ARC_MAX_TABLE_ENTRY+1], + *hash[ARC_MAX_TABLE_ENTRY+1]; }; -class ArcCompressStruct +class CArcCompress { public: DWORD compressed_size,compressed_size_hi, expanded_size,expanded_size_hi; @@ -59,14 +51,14 @@ class ArcCompressStruct BYTE body[1]; }; -int bit_test(int bit_num, BYTE *bit_field) +int Bt(int bit_num, BYTE *bit_field) { bit_field+=bit_num>>3; bit_num&=7; return (*bit_field & (1<>3; @@ -76,19 +68,19 @@ int bit_test_and_set(int bit_num, BYTE *bit_field) return (result) ? 1:0; } -DWORD ExtractWORDBitField(BYTE *src,DWORD pos,DWORD bits) +DWORD BFieldExtU32(BYTE *src,DWORD pos,DWORD bits) { DWORD i,result=0; for (i=0;ientry_used) { i=c->free_index; @@ -107,7 +99,7 @@ void ArcGetTableEntry(ArcCs *c) while (c->hash[i]); temp=&c->compress[i]; c->next_entry=temp; - temp1=(ArcTableEntry *)&c->hash[temp->basecode]; + temp1=(CArcEntry *)&c->hash[temp->basecode]; while (temp1 && temp1->next!=temp) temp1=temp1->next; if (temp1) @@ -117,57 +109,55 @@ void ArcGetTableEntry(ArcCs *c) } } -void ArcExpandBuf(ArcCs *c) +void ArcExpandBuf(CArcCtrl *c) { BYTE *dst_ptr,*dst_limit; DWORD basecode,lastcode,code; - ArcTableEntry *temp,*temp1; + CArcEntry *temp,*temp1; dst_ptr=c->dst_buf+c->dst_pos; dst_limit=c->dst_buf+c->dst_size; - while (dst_ptrstack_ptr!=c->stack_base) - *dst_ptr++ = * -- c->stack_ptr; + while (dst_ptrstk_ptr!=c->stk_base) + *dst_ptr++ = * -- c->stk_ptr; - if (c->stack_ptr==c->stack_base && dst_ptrstk_ptr==c->stk_base && dst_ptrsaved_basecode==0xFFFFFFFFl) { - lastcode=ExtractWORDBitField(c->src_buf,c->src_pos, - c->next_bits_in_use); + lastcode=BFieldExtU32(c->src_buf,c->src_pos, + c->next_bits_in_use); c->src_pos=c->src_pos+c->next_bits_in_use; *dst_ptr++=lastcode; - ArcGetTableEntry(c); + ArcEntryGet(c); c->last_ch=lastcode; } else lastcode=c->saved_basecode; - while (dst_ptrsrc_pos+c->next_bits_in_use<=c->src_size) { - basecode=ExtractWORDBitField(c->src_buf,c->src_pos, - c->next_bits_in_use); + while (dst_ptrsrc_pos+c->next_bits_in_use<=c->src_size) { + basecode=BFieldExtU32(c->src_buf,c->src_pos, + c->next_bits_in_use); c->src_pos=c->src_pos+c->next_bits_in_use; if (c->cur_entry==&c->compress[basecode]) { - *c->stack_ptr++=c->last_ch; + *c->stk_ptr++=c->last_ch; code=lastcode; } else code=basecode; while (code>=c->min_table_entry) { - *c->stack_ptr++=c->compress[code].ch; + *c->stk_ptr++=c->compress[code].ch; code=c->compress[code].basecode; } - *c->stack_ptr++=code; + *c->stk_ptr++=code; c->last_ch=code; c->entry_used=TRUE; temp=c->cur_entry; temp->basecode=lastcode; temp->ch=c->last_ch; - temp1=(ArcTableEntry *)&c->hash[lastcode]; + temp1=(CArcEntry *)&c->hash[lastcode]; temp->next=temp1->next; temp1->next=temp; - ArcGetTableEntry(c); - while (dst_ptrstack_ptr!=c->stack_base) - *dst_ptr++ = * -- c->stack_ptr; + ArcEntryGet(c); + while (dst_ptrstk_ptr!=c->stk_base) + *dst_ptr++ = * -- c->stk_ptr; lastcode=basecode; } c->saved_basecode=lastcode; @@ -175,14 +165,14 @@ void ArcExpandBuf(ArcCs *c) c->dst_pos=dst_ptr-c->dst_buf; } -ArcCs *NewArcCs(DWORD expand,DWORD compression_type) +CArcCtrl *ArcCtrlNew(DWORD expand,DWORD compression_type) { - ArcCs *c; - c=(ArcCs *)malloc(sizeof(ArcCs)); - memset(c,0,sizeof(ArcCs)); + CArcCtrl *c; + c=(CArcCtrl *)malloc(sizeof(CArcCtrl)); + memset(c,0,sizeof(CArcCtrl)); if (expand) { - c->stack_base=(BYTE *)malloc(ARC_MAX_TABLE_ENTRY+1); - c->stack_ptr=c->stack_base; + c->stk_base=(BYTE *)malloc(ARC_MAX_TABLE_ENTRY+1); + c->stk_ptr=c->stk_base; } if (compression_type==CT_7_BIT) c->min_bits=7; @@ -194,52 +184,49 @@ ArcCs *NewArcCs(DWORD expand,DWORD compression_type) c->free_limit=1<next_bits_in_use; c->saved_basecode=0xFFFFFFFFl; c->entry_used=TRUE; - ArcGetTableEntry(c); + ArcEntryGet(c); c->entry_used=TRUE; return c; } -void DelArcCs(ArcCs *c) +void ArcCtrlDel(CArcCtrl *c) { - free(c->stack_base); + free(c->stk_base); free(c); } -BYTE *ExpandBuf(ArcCompressStruct *r) +BYTE *ExpandBuf(CArcCompress *arc) { - ArcCs *c; - ArcCompressStruct *r2=r; + CArcCtrl *c; BYTE *result; - if (r->compression_type>CT_8_BIT) - return NULL; - if (r2->expanded_size>0x10000000l) + if (!(CT_NONE<=arc->compression_type && arc->compression_type<=CT_8_BIT) || + arc->expanded_size>=0x20000000l) return NULL; - result=(BYTE *)malloc(r2->expanded_size+1); - result[r2->expanded_size]=0; //terminate - - if (r2->compression_type==CT_NONE) { - memcpy(result,r2->body,r2->expanded_size); - goto expand_end; + result=(BYTE *)malloc(arc->expanded_size+1); + result[arc->expanded_size]=0; //terminate + switch (arc->compression_type) { + case CT_NONE: + memcpy(result,arc->body,arc->expanded_size); + break; + case CT_7_BIT: + case CT_8_BIT: + c=ArcCtrlNew(TRUE,arc->compression_type); + c->src_size=arc->compressed_size*8; + c->src_pos=(sizeof(CArcCompress)-1)*8; + c->src_buf=(BYTE *)arc; + c->dst_size=arc->expanded_size; + c->dst_buf=result; + c->dst_pos=0; + ArcExpandBuf(c); + ArcCtrlDel(c); + break; } - c=NewArcCs(TRUE,r2->compression_type); - c->src_size=r2->compressed_size*8; - c->src_pos=(sizeof(ArcCompressStruct)-1)*8; - c->src_buf=(BYTE *)r2; - c->dst_size=r2->expanded_size; - c->dst_buf=result; - c->dst_pos=0; - ArcExpandBuf(c); - DelArcCs(c); - -expand_end: - if (r2!=r) - free(r2); return result; } -long fsize(FILE *f) +long FSize(FILE *f) { long result,original=ftell(f); fseek(f,0,SEEK_END); @@ -248,21 +235,21 @@ long fsize(FILE *f) return result; } -void convert(char *name,BOOL cvt_ascii) +void Cvt(char *name,BOOL cvt_ascii) { DWORD out_size,i,j,in_size; - ArcCompressStruct *in_buf; + CArcCompress *arc; BYTE *out_buf; FILE *io_file; - + if (io_file=fopen(name,"rb")) { - in_size=fsize(io_file); - in_buf=(ArcCompressStruct *)malloc(in_size); - fread(in_buf,1,in_size,io_file); - out_size=in_buf->expanded_size; + in_size=FSize(io_file); + arc=(CArcCompress *)malloc(in_size); + fread(arc,1,in_size,io_file); + out_size=arc->expanded_size; printf("%-45s %d-->%d\r\n",name,(DWORD) in_size,out_size); fclose(io_file); - if (out_buf=ExpandBuf(in_buf)) { + if (out_buf=ExpandBuf(arc)) { if (cvt_ascii) { j=0; for (i=0;i> $outfile & + +echo "Please wait 10 seconds while we connect to the server." +sleep 10s +echo ":j $channel" >> $infile +echo "Channel joined." + +tail -f -n 0 $outfile | \ + while read -r chan char date time nick cmd msg; do + case $cmd in + !bible|!Bible) + sleep 0.5s + LINE=$(shuf -en 1 {1..100000} --random-source=/dev/urandom) + echo "Line $LINE:" >> $infile + tail -n $LINE Bible.TXT | head -n 16 >> $infile + sleep 0.5s + echo >> $infile + ;; + !god*|!God*) + sleep 0.5s + echo "$nick: $(shuf -n 10 /usr/share/dict/words --random-source=/dev/urandom | tr '\n' ' ')" >> $infile + ;; + !help|!Help) + echo 'Oracle for IRC. Lets you talk with God. Available commands: !bible !God !help !source. This bot uses random numbers to pick lines and words from a few files. Be witty and charming, not earnest. God likes soap operas and hates arrogance.' >> $infile + ;; + !source|!Source) + echo "http://www.templeos.org/Wb/Home/Wb2/Files/Bin/TempleBot.html" >> $infile + ;; + esac + done + + diff --git a/Misc/MakeDistro.CPP b/Misc/MakeDistro.CPP index 069cf5d..484a0ca 100644 --- a/Misc/MakeDistro.CPP +++ b/Misc/MakeDistro.CPP @@ -4,7 +4,7 @@ U0 MakeMyISO(U8 *out_iso_filename) {//Does everything with current drive. - if (!IsDrvWritable) { + if (!DrvIsWritable) { "Drive must be writable. Install on Hard drive, first.\n"; return; } @@ -14,9 +14,9 @@ U0 MakeMyISO(U8 *out_iso_filename) MakeOSDrvBootInstall(,'T'); Copy("/*","/Distro"); - Del("/Distro/Kernel.BIN.C"); + Del("/Distro/" KERNEL_BIN_C); - CopyTree("/0000Boot", "/Distro/0000Boot"); + CopyTree(BOOT_DIR, "/Distro" BOOT_DIR); CopyTree("/Home", "/Distro/Home"); CopyTree("/Adam", "/Distro/Adam"); CopyTree("/Apps", "/Distro/Apps"); @@ -31,8 +31,8 @@ U0 MakeMyISO(U8 *out_iso_filename) CopyTree("/Linux","/Distro/Linux"); //You can leave this out. MkDir("/Distro/Temp"); MkDir("/Distro/Temp/ScreenShots"); - CDFileCreate(out_iso_filename,"/Distro/*",,"/Distro" BOOT_DIR_KERNEL_BIN_C); - //CDImageWrite('T',out_iso_filename,MT_CD); //Uncomment to burn a CD-ROM or (MT_DVD) + ISOFileCreate(out_iso_filename,"/Distro/*",,"/Distro" BOOT_DIR_KERNEL_BIN_C); +//CDImageWrite('T',out_iso_filename,MT_CD); //Uncmt to burn CD-ROM or (MT_DVD) //DelTree("/Distro"); } diff --git a/Misc/OSInstall.CPP b/Misc/OSInstall.CPP index 6630e4e..c4d008f 100644 --- a/Misc/OSInstall.CPP +++ b/Misc/OSInstall.CPP @@ -8,7 +8,8 @@ Bool VMPrtDsk(CTask *task,CATARep *ata_drv) return FALSE; } -U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,CATARep *ata_drv,CATARep *atapi_drv) +U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv, + CATARep *ata_drv,CATARep *atapi_drv) { U8 *st1,*st2; @@ -24,8 +25,8 @@ U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,CATARep *ata_drv,CATARep *atapi_dr Free(st1); XTalkWait(task, - "MakeOSDrvBootInstall('%C');\n" - "\nB1\n0x20000\n",drv); + "MakeOSDrvBootInstall('%C');\n" + "\nB1\n0x20000\n",drv); if (ata_drv) XTalkWait(task,"C2p%d\n",ata_drv->num); @@ -33,9 +34,9 @@ U0 VMInstallBoot(CTask *task,U8 cd_drv,U8 drv,CATARep *ata_drv,CATARep *atapi_dr XTalkWait(task,"T3p%d\n",atapi_drv->num); XTalkWait(task, - "\n" //Exit Drives - "\n" //Dsk Cache - "\n"); //Options + "\n" //Exit Drives + "\n" //Dsk Cache + "\n"); //Options } U0 VMInstallWizard() @@ -131,9 +132,9 @@ U0 RegularInstallWizard() if (YorN) { '\n'; while (TRUE) { - "$$PURPLE$$1$$FG$$) Use FAT32\n" - "$$PURPLE$$2$$FG$$) Use RedSea\n" - "\nFile System Type: "; + "$$PURPLE$$1$$FG$$) Use FAT32\n" + "$$PURPLE$$2$$FG$$) Use RedSea\n" + "\nFile System Type: "; ch=GetChar; '\n'; if ('1'<=ch<='2') @@ -153,17 +154,17 @@ U0 RegularInstallWizard() MkDir(new_home_str); Copy("::/Misc/MakeDistro.CPP.Z",new_home_str); XTalkWait(task, - "MakeOSDrvBootInstall('%C');\n" - "\nB1\n0x20000\n" - "C" - "2p" - "%s\n" - "%s\n" - "%C" - "\n" //Exit Drives - "\n" //Dsk Cache - "\n", //Options - *dst,base0,base1,'0'+unit); + "MakeOSDrvBootInstall('%C');\n" + "\nB1\n0x20000\n" + "C" + "2p" + "%s\n" + "%s\n" + "%C" + "\n" //Exit Drives + "\n" //Dsk Cache + "\n", //Options + *dst,base0,base1,'0'+unit); "$$RED$$Install Master Boot loader?$$FG$$"; if (YorN) { '\n'; @@ -197,7 +198,7 @@ U0 DoInstall() { I64 vm_install,pmt_reboot; "\n\n\n\n\nAre you installing inside VMware, QEMU, VirtualBox " - "or a similar virtual machine? "; + "or a similar virtual machine? "; vm_install=YorN; DocBottom; @@ -206,9 +207,9 @@ U0 DoInstall() pmt_reboot=TRUE; } else { "\n\nThis wizard works if you have a partition ready. " - "You can partition the drive or MakeOSDrvBootInstall() " - "with more options if you do it by hand, not using this wizard.\n\n" - "Continue Install Wizard "; + "You can partition the drive or MakeOSDrvBootInstall() " + "with more options if you do it by hand, not using this wizard.\n\n" + "Continue Install Wizard "; if (pmt_reboot=YorN) RegularInstallWizard(); } diff --git a/Misc/OSTestSuite.CPP b/Misc/OSTestSuite.CPP index 2762375..c9dade9 100644 --- a/Misc/OSTestSuite.CPP +++ b/Misc/OSTestSuite.CPP @@ -6,7 +6,7 @@ U0 TSStart() U0 TS() { progress4=ts_num++; - progress4_max=159; + progress4_max=162; *progress4_desc=0; } U0 TSEnd() @@ -23,7 +23,7 @@ U0 DoSpritePlot() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpritePlot\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -32,7 +32,7 @@ U0 DoElephant() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Elephant\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -41,7 +41,7 @@ U0 DoSpritePlot3D() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SpritePlot3D\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -123,7 +123,7 @@ U0 DoExtents() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Extents\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -132,7 +132,7 @@ U0 DoDotNet() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/NetOfDots\";\n"); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -141,7 +141,7 @@ U0 DoSunMoon() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/SunMoon\";\n"); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -150,15 +150,15 @@ U0 DoLowPassFilter() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/LowPassFilter\";\n"); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -166,20 +166,20 @@ U0 DoMathAudioDemo() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/MathAudioDemo\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -188,7 +188,7 @@ U0 DoLines() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Lines\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -197,7 +197,7 @@ U0 DoBounce() CTask *task=User; XTalk(task,"#include \"::/Demo/Graphics/Bounce\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -206,9 +206,9 @@ U0 DoMsgLoop() CTask *task=User; XTalkWait(task,"#include \"::/Demo/MsgLoop\";\n"); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -217,13 +217,13 @@ U0 DoASCIIOrgan() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Snd/ASCIIOrgan\";\n"); Sleep(100); - SendMsg(task,MSG_KEY_DOWN_UP,'A',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'A',0); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,'B',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'B',0); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,'C',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'C',0); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -231,10 +231,10 @@ U0 DoDoodle() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Doodle\";\n"); - SendMsg(task,MSG_IP_L_DOWN,10,10); - SendMsg(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_IP_L_DOWN,10,10); + PostMsgWait(task,MSG_IP_L_UP,100,200); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -243,20 +243,20 @@ U0 DoSpeedLine() I64 i=PURPLE; CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Speedline\";\n"); - SendMsg(task,MSG_IP_L_DOWN,10,10); - SendMsg(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_IP_L_DOWN,10,10); + PostMsgWait(task,MSG_IP_L_UP,100,200); PostMsg(task,MSG_IP_R_DOWN_UP,0,0); while (!TaskValidate(task->popup_task)) Yield; while (i--) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(100); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_ESC,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_ESC,0); TaskWait(task); - SendMsg(task,MSG_IP_L_DOWN,50,10); - SendMsg(task,MSG_IP_L_UP,150,200); + PostMsgWait(task,MSG_IP_L_DOWN,50,10); + PostMsgWait(task,MSG_IP_L_UP,150,200); Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -285,9 +285,9 @@ U0 DoCoach() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Coach\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -296,13 +296,13 @@ U0 DoDigits() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Digits\";\n"); Sleep(100); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(100); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(250); - SendMsg(task,MSG_KEY_DOWN_UP,'1',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'1',0); Sleep(250); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -310,16 +310,16 @@ U0 DoSymmetry() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Symmetry\";\n"); - SendMsg(task,MSG_IP_R_DOWN,100,100); - SendMsg(task,MSG_IP_R_UP,200,200); + PostMsgWait(task,MSG_IP_R_DOWN,100,100); + PostMsgWait(task,MSG_IP_R_UP,200,200); Sleep(100); - SendMsg(task,MSG_IP_L_DOWN,10,10); - SendMsg(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_IP_L_DOWN,10,10); + PostMsgWait(task,MSG_IP_L_UP,100,200); Sleep(250); - SendMsg(task,MSG_IP_L_DOWN,100,200); - SendMsg(task,MSG_IP_L_UP,400,400); + PostMsgWait(task,MSG_IP_L_DOWN,100,200); + PostMsgWait(task,MSG_IP_L_UP,400,400); Sleep(250); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -327,12 +327,12 @@ U0 DoBSpline() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/BSpline\";\n"); - SendMsg(task,MSG_IP_L_DOWN_UP,50,50); - SendMsg(task,MSG_IP_L_DOWN_UP,300,100); - SendMsg(task,MSG_IP_L_DOWN_UP,150,300); - SendMsg(task,MSG_IP_R_DOWN_UP,0,0); + PostMsgWait(task,MSG_IP_L_DOWN_UP,50,50); + PostMsgWait(task,MSG_IP_L_DOWN_UP,300,100); + PostMsgWait(task,MSG_IP_L_DOWN_UP,150,300); + PostMsgWait(task,MSG_IP_R_DOWN_UP,0,0); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -341,20 +341,20 @@ U0 DoBlot() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Blot\";\n"); Sleep(1800); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } -U0 DoCaptureScreen() +U0 DoScreenCapture() { CTask *task=User; - XTalkWait(task,"#include \"::/Demo/Graphics/CaptureScreen\";\n"); + XTalkWait(task,"#include \"::/Demo/Graphics/ScreenCapture\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); Del("/Home/ScreenShot.GRA.Z"); } @@ -365,7 +365,7 @@ U0 DoPullDownMenu() CTask *task=User; XTalkWait(task,"#include \"::/Demo/PullDownMenu\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -375,13 +375,13 @@ U0 DoStadium() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Stadium/Stadium\";\n"); Sleep(50); - SendMsg(task,MSG_IP_L_DOWN_UP,100,10); + PostMsgWait(task,MSG_IP_L_DOWN_UP,100,10); Sleep(300); - SendMsg(task,MSG_IP_L_DOWN_UP,320,20); + PostMsgWait(task,MSG_IP_L_DOWN_UP,320,20); Sleep(300); - SendMsg(task,MSG_IP_L_DOWN_UP,520,10); + PostMsgWait(task,MSG_IP_L_DOWN_UP,520,10); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -390,9 +390,9 @@ U0 DoPalette() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Palette\";\n"); Sleep(400); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(400); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -402,10 +402,10 @@ U0 DoElephantWalk() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/ElephantWalk\";\n"); for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT); Sleep(50); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -413,13 +413,13 @@ U0 DoHalogen() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Halogen\";\n"); - SendMsg(task,MSG_KEY_DOWN,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN,0,SC_CURSOR_UP); Sleep(1000); - SendMsg(task,MSG_KEY_UP,0,SC_CURSOR_UP); - SendMsg(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT); Sleep(333); - SendMsg(task,MSG_KEY_UP,0,SC_CURSOR_RIGHT); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -429,16 +429,16 @@ U0 DoTheDead() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/TheDead\";\n"); for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(50); } for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(50); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -448,15 +448,15 @@ U0 DoBomberGolf() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/BomberGolf\";\n"); for (i=0;i<7;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(100); } for (i=0;i<7;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(200); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -468,14 +468,14 @@ U0 DoZoneOut() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(100); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -485,13 +485,13 @@ U0 DoVaroom() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Varoom\";\n"); for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Sleep(50); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); Sleep(50); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -502,12 +502,12 @@ U0 DoFlatTops() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; - SendMsg(task,MSG_IP_R_DOWN_UP,RandI16%400+200,RandI16%300+150); + PostMsgWait(task,MSG_IP_R_DOWN_UP,RandI16%400+200,RandI16%300+150); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -519,39 +519,51 @@ U0 DoWenceslas() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(100); while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(100); while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(100); for (i=0;i<25;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(25); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } U0 DoTreeCheckers() { + I64 task_num; CTask *task=User; XTalk(task,"#include \"::/Demo/Games/TreeCheckers\";\n"); + while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + task_num=task->popup_task->task_num; + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + + while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) + Yield; + TaskWait(task->popup_task); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,'\n',0); + + PostMsgWait(task,MSG_KEY_DOWN_UP,'\n',0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -560,7 +572,7 @@ U0 DoRainDrops() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/RainDrops\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -593,7 +605,7 @@ U0 DoMorseCode() PostMsg(task,MSG_KEY_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -606,7 +618,7 @@ U0 DoPixCollision() h=task->pix_height>>1+task->pix_top +task->scroll_y; IPSet(w-35,h-35); AFSetIP(10,w+35,w+35); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -616,14 +628,14 @@ U0 DoBlackDiamond() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/BlackDiamond\";\n"); for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(75); } for (i=0;i<12;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(75); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -638,103 +650,103 @@ U0 DoCtrlR1() TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (i=0;i<1;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; -//Tag text + //Tag text PostMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); -//Color + //Color while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (i=0;i<1;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); for (i=0;i<2;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); task_num=task->popup_task->task_num; PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); -//Width + //Width while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (i=0;i<3;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); for (i=0;i<4;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); task_num=task->popup_task->task_num; PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); -//Line + //Line while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (i=0;i<6;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; - SendMsg(task,MSG_IP_L_DOWN,150,150); - SendMsg(task,MSG_IP_L_UP,150,95); + PostMsgWait(task,MSG_IP_L_DOWN,150,150); + PostMsgWait(task,MSG_IP_L_UP,150,95); Sleep(250); - SendMsg(task,MSG_IP_L_DOWN,150,150); - SendMsg(task,MSG_IP_L_UP,190,190); + PostMsgWait(task,MSG_IP_L_DOWN,150,150); + PostMsgWait(task,MSG_IP_L_UP,190,190); Sleep(250); - SendMsg(task,MSG_IP_L_DOWN,150,150); - SendMsg(task,MSG_IP_L_UP,110,190); + PostMsgWait(task,MSG_IP_L_DOWN,150,150); + PostMsgWait(task,MSG_IP_L_UP,110,190); Sleep(250); PostMsg(task,MSG_IP_R_DOWN_UP,100,100); -//Color + //Color while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (i=0;i<1;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); for (i=0;i<3;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); task_num=task->popup_task->task_num; PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); -//Circle + //Circle while (!TaskValidate(task->popup_task)||task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (i=0;i<9;i++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; - SendMsg(task,MSG_IP_L_DOWN,150,150); - SendMsg(task,MSG_IP_L_UP,190,190); + PostMsgWait(task,MSG_IP_L_DOWN,150,150); + PostMsgWait(task,MSG_IP_L_UP,190,190); Sleep(250); PostMsg(task,MSG_IP_R_DOWN_UP,100,100); -//Exit + //Exit while (!TaskValidate(task->popup_task)) Yield; - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN+SCF_CTRL); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN+SCF_CTRL); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; @@ -753,7 +765,7 @@ U0 DoBox() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Box\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -762,7 +774,7 @@ U0 DoShadow() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Shadow\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -773,9 +785,9 @@ U0 DoPredatorPrey() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -784,7 +796,7 @@ U0 Do3DPoly() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/3DPoly\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -793,7 +805,7 @@ U0 DoRotateTank() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/RotateTank\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -802,7 +814,7 @@ U0 DoScreenCodes() CTask *task=User; XTalkWait(task,"#include \"::/Demo/ScreenCodes\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -826,7 +838,7 @@ U0 DoCharGraphics() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/CharGraphics\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -851,7 +863,7 @@ U0 DoMaze() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Maze\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -860,7 +872,7 @@ U0 DoFontEd() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/FontEd\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -870,21 +882,21 @@ U0 DoLattice() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Lattice\";\n"); for (i=0;i<20;i++) - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); for (i=0;i<6;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,'+',0); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,'+',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); } for (i=0;i<6;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); } for (i=0;i<16;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); } Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -893,7 +905,7 @@ U0 DoTimeIns() CTask *task=User; XTalkWait(task,"#include \"::/Demo/TimeIns\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -902,7 +914,7 @@ U0 DoWaterFowl() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Snd/WaterFowl\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -912,7 +924,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Apps/Psalmody/Examples\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -932,7 +944,7 @@ U0 DoCartesian() XTalkWait(task,"#include \"::/Demo/Graphics/Cartesian\";\n"); XTalkWait(task,"0.2*x`1.5\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -941,7 +953,7 @@ U0 DoHanoi() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Hanoi\";\n"); Sleep(3000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -951,7 +963,7 @@ U0 DoLife() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Life\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -960,7 +972,7 @@ U0 DoZing() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Zing\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -971,7 +983,7 @@ U0 DoCommonAncestor() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/CommonAncestor\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -996,9 +1008,9 @@ U0 DoMPAdd() CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/MPAdd\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1015,7 +1027,7 @@ U0 DoClouds() CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/Clouds\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1025,7 +1037,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Slider\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1034,20 +1046,19 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/ScrollBars\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - XTalk(task,"Exit;\n"); -} - -U0 Do() -{ - CTask *task=User; - XTalkWait(task,"#include \"::/Demo/RegistryDemo\";\n"); - Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ +U0 DoRegistryDemo() +{ + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/RegistryDemo\";\n"); + Sleep(750); + XTalk(task,"Exit;\n"); +} + U0 DoBugFlapper() { I64 i; @@ -1056,15 +1067,15 @@ U0 DoBugFlapper() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); for (i=0;i<4;i++) { - SendMsg(task,MSG_KEY_DOWN,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN,CH_SPACE,0); Sleep(100); - SendMsg(task,MSG_KEY_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_UP,CH_SPACE,0); Sleep(100); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1075,13 +1086,13 @@ U0 DoBattleLines() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; IPSet(430,300,,TRUE); AFSetIP(10,530,400); IPSet(,,,FALSE); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1094,20 +1105,20 @@ U0 DoBigGuns() Yield; task->popup_task->user_data=Fs; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (!TaskValidate(task->popup_task)||task->popup_task->user_data==Fs) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); for (i=0;i<5;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1117,18 +1128,18 @@ U0 DoDunGen() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/DunGen\";\n"); for (i=0;i<10;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(100); } for (i=0;i<12;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(100); } for (i=0;i<6;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(100); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1138,22 +1149,22 @@ U0 DoTimeOut() CTask *task=User; XTalkWait(task,"#include \"::/Apps/TimeOut/Run\";\n"); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); for (i=0;i<3;i++) { - SendMsg(task,MSG_KEY_DOWN,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN,CH_SPACE,0); LBts(kbd.down_bitmap,SC_CURSOR_RIGHT); Sleep(200); - SendMsg(task,MSG_KEY_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_UP,CH_SPACE,0); LBtr(kbd.down_bitmap,SC_CURSOR_RIGHT); Sleep(200); - SendMsg(task,MSG_KEY_DOWN,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN,CH_SPACE,0); LBts(kbd.down_bitmap,SC_CURSOR_LEFT); Sleep(200); - SendMsg(task,MSG_KEY_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_UP,CH_SPACE,0); LBtr(kbd.down_bitmap,SC_CURSOR_LEFT); Sleep(200); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1162,7 +1173,7 @@ U0 DoCollision() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Collision\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1171,7 +1182,7 @@ U0 DoLoadTest() CTask *task=User; XTalkWait(task,"#include \"::/Demo/MultiCore/LoadTest\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); while (TaskValidate(task)) Yield; @@ -1224,9 +1235,9 @@ U0 DoSpan() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1235,76 +1246,76 @@ U0 DoStrut() CTask *task=User; XTalkWait(task,"#include \"::/Apps/Strut/Run\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); IPSet(200,200,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); WinMgrSync(2); IPSet(GR_WIDTH-200,200,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH/2,400,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); - SendMsg(task,MSG_KEY_DOWN_UP,'s',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'s',0); IPSet(200,200,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH-200,200,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(200,200,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH/2,400,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(GR_WIDTH-200,200,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH/2,400,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH-200,200,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH/2,400,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(200,200,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); - SendMsg(task,MSG_KEY_DOWN_UP,'t',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'t',0); IPSet(GR_WIDTH/2,400,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(GR_WIDTH-200,200,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(GR_WIDTH/2,400,,TRUE); - SendMsg(task,MSG_IP_L_DOWN,0,0); + PostMsgWait(task,MSG_IP_L_DOWN,0,0); IPSet(200,200,,TRUE); - SendMsg(task,MSG_IP_L_UP,0,0); + PostMsgWait(task,MSG_IP_L_UP,0,0); IPSet(,,,FALSE); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); LBts(kbd.down_bitmap,Char2ScanCode('1')); Sleep(600); LBtr(kbd.down_bitmap,Char2ScanCode('1')); - SendMsg(task,MSG_KEY_DOWN_UP,'Z',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'Z',0); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,'Z',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'Z',0); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,'Z',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'Z',0); Sleep(200); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1315,9 +1326,9 @@ U0 DoRawHide() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(2500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1328,21 +1339,21 @@ U0 DoAfterEgypt() while (!TaskValidate(task->popup_task)) Yield; Sleep(600); //It flushes messages! - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); while (TaskValidate(task->popup_task)) Yield; TaskWait(task); Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Camp - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Map + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Camp + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Map Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Map - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Camp - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Main Menu + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Map + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Camp + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Main Menu XTalk(task,"Exit;\n"); } @@ -1351,7 +1362,7 @@ U0 DoShading() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Shading\";\n"); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1362,9 +1373,9 @@ U0 DoPoleZeros() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_ESC,0); XTalk(task,"Exit;\n"); } @@ -1378,7 +1389,23 @@ U0 DoWhap() Sleep(500); AFSetIP(3,450,200); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + XTalk(task,"Exit;\n"); +} + +U0 DoGrid() +{ + CTask *task=User; + XTalk(task,"#include \"::/Demo/Graphics/Grid\";\n"); + IPSet(200,200); + Sleep(150); + AFSetIP(2,400,400); + AFSetIP(2,200,400); + AFSetIP(2,200,200); + IPSet(,,,TRUE); + Sleep(50); + IPSet(,,,FALSE); + DocBottom(DocPut(task)); XTalk(task,"Exit;\n"); } @@ -1392,7 +1419,7 @@ U0 DoPick() AFSetIP(4,400,400); IPSet(,,,FALSE); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1406,7 +1433,7 @@ U0 DoPick3D() AFSetIP(4,400,400); IPSet(,,,FALSE); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1415,7 +1442,7 @@ U0 DoTransform() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Transform\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1425,7 +1452,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Apps/ToTheFront\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -1435,20 +1462,20 @@ U0 DoGrModels() CTask *task=User; I64 i,j,task_num=-1; XTalkWait(task,"#include \"::/Apps/GrModels/Run\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); PostMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); for (i=0;i<4;i++) { while (!TaskValidate(task->popup_task) || - task->popup_task->task_num==task_num) + task->popup_task->task_num==task_num) Yield; TaskWait(task->popup_task); task_num=task->popup_task->task_num; for (j=0;j<=i;j++) - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); } Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,'n',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'n',0); XTalk(task,"Exit;\n"); } @@ -1459,12 +1486,12 @@ U0 DoKeepAway() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); IPSet(100,100); Sleep(1500); - SendMsg(task,MSG_IP_R_DOWN_UP,ip.pos.x,ip.pos.y); + PostMsgWait(task,MSG_IP_R_DOWN_UP,ip.pos.x,ip.pos.y); Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1472,16 +1499,16 @@ U0 DoRocket() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Rocket\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Bts(kbd.down_bitmap,SC_CURSOR_UP); Sleep(1000); Btr(kbd.down_bitmap,SC_CURSOR_UP); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Bts(kbd.down_bitmap,SC_CURSOR_RIGHT); Sleep(1000); Btr(kbd.down_bitmap,SC_CURSOR_RIGHT); Sleep(1000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1492,12 +1519,12 @@ U0 DoRocketScience() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(2000); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1508,27 +1535,27 @@ U0 DoMassSpring() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; - SendMsg(task,MSG_IP_L_DOWN_UP,50,50); //#1 - SendMsg(task,MSG_IP_L_DOWN_UP,50,200); //#2 - SendMsg(task,MSG_IP_L_DOWN_UP,210,50); //#3 - SendMsg(task,MSG_IP_L_DOWN_UP,310,200);//#4 + PostMsgWait(task,MSG_IP_L_DOWN_UP,50,50); //#1 + PostMsgWait(task,MSG_IP_L_DOWN_UP,50,200); //#2 + PostMsgWait(task,MSG_IP_L_DOWN_UP,210,50); //#3 + PostMsgWait(task,MSG_IP_L_DOWN_UP,310,200);//#4 Sleep(500); - SendMsg(task,MSG_IP_R_DOWN,50,50); //1-2 - SendMsg(task,MSG_IP_R_UP,50,200); + PostMsgWait(task,MSG_IP_R_DOWN,50,50); //1-2 + PostMsgWait(task,MSG_IP_R_UP,50,200); Sleep(500); - SendMsg(task,MSG_IP_R_DOWN,210,50);//3-4 - SendMsg(task,MSG_IP_R_UP,310,200); + PostMsgWait(task,MSG_IP_R_DOWN,210,50);//3-4 + PostMsgWait(task,MSG_IP_R_UP,310,200); Sleep(500); - SendMsg(task,MSG_IP_R_DOWN,50,200);//2-4 - SendMsg(task,MSG_IP_R_UP,310,200); + PostMsgWait(task,MSG_IP_R_DOWN,50,200);//2-4 + PostMsgWait(task,MSG_IP_R_UP,310,200); Sleep(500); - SendMsg(task,MSG_IP_R_DOWN,50,50); //1-3 - SendMsg(task,MSG_IP_R_UP,210,50); + PostMsgWait(task,MSG_IP_R_DOWN,50,50); //1-3 + PostMsgWait(task,MSG_IP_R_UP,210,50); Sleep(1500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1538,7 +1565,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Whap\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -1549,22 +1576,22 @@ U0 DoSquirt() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Squirt\";\n"); for (i=0;i<5;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Sleep(100); } for (i=0;i<5;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_LEFT); Sleep(100); } for (i=0;i<5;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(100); } for (i=0;i<5;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(100); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1574,17 +1601,17 @@ U0 DoXCaliber() CTask *task=User; XTalkWait(task,"#include \"::/Apps/X-Caliber/Run\";\n"); for (i=0;i<5;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SCF_SHIFT|SC_CURSOR_UP); - SendMsg(task,MSG_KEY_DOWN_UP,0,SCF_SHIFT|SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SCF_SHIFT|SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SCF_SHIFT|SC_CURSOR_RIGHT); } for (i=0;i<10;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - SendMsg(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN,0,SC_CURSOR_RIGHT,0); Sleep(100); - SendMsg(task,MSG_KEY_UP,0,SC_CURSOR_RIGHT,0); + PostMsgWait(task,MSG_KEY_UP,0,SC_CURSOR_RIGHT,0); Sleep(50); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1594,22 +1621,22 @@ U0 DoFPS() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/CastleFrankenstein\";\n"); for (i=0;i<15;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Sleep(50); } for (i=0;i<8;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(50); } for (i=0;i<9;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Sleep(50); } for (i=0;i<6;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(50); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1620,14 +1647,14 @@ U0 DoEagleDive() XTalkWait(task,"#include \"::/Demo/Games/EagleDive\";\n"); Sleep(500); for (i=0;i<10;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_UP); Sleep(50); } for (i=0;i<10;i++) { - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(50); } - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1637,7 +1664,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Apps/Psalmody\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -1665,7 +1692,7 @@ U0 DoWordSearch() CTask *task=User; XTalkWait(task,"#include \"::/Demo/WordSearch\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1674,9 +1701,9 @@ U0 DoFPrintF() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/FPrintF\";\n"); XTalkWait(task,"::/Demo/Dsk/FPrintF.TXT"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_ESC,0); XTalkWait(task,"Type(\"::/Demo/Dsk/FPrintF.TXT\");\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_CTRLO,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_CTRLO,0); XTalkWait(task,"Del(\"::/Demo/Dsk/FPrintF.TXT\");\n"); Sleep(500); XTalk(task,"Exit;\n"); @@ -1696,7 +1723,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/DataBase\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1705,7 +1732,7 @@ U0 DoRaw() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Dsk/Raw\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -1731,9 +1758,9 @@ U0 DoLastClass() CTask *task=User; XTalkWait(task,"#include \"::/Demo/LastClass\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); XTalk(task,"Exit;\n"); } @@ -1744,7 +1771,7 @@ U0 DoMiniCompiler() XTalkWait(task,"#include \"::/Demo/Lectures/MiniCompiler\";\n"); XTalkWait(task,"1+2*(3+4)\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1759,9 +1786,9 @@ U0 DoWebLog() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/WebLogExample/WebLogRep\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,'\n',0); - SendMsg(task,MSG_KEY_DOWN_UP,'\n',0); - SendMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'\n',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,'\n',0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_ESC,0); Sleep(750); XTalk(task,"Exit;\n"); } @@ -1791,7 +1818,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Apps/TimeClock\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -1802,7 +1829,7 @@ U0 DoLogic() XTalkWait(task,"#include \"::/Apps/Logic/Run\";\n"); XTalkWait(task,"NAND\nNOR\n\n0x100\n0xF0\n0xCC\n0xAA\n\n0x12\n\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1812,7 +1839,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Lectures\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1821,7 +1848,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/AutoFile\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -1867,7 +1894,7 @@ U0 DoPrompt() XTalkWait(task,"Terry Davis\n"); XTalkWait(task,"*-1\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -1879,6 +1906,14 @@ U0 DoClassMeta() XTalk(task,"Exit;\n"); } +U0 DoNumBible() +{ + CTask *task=User; + XTalkWait(task,"#include \"::/Demo/DolDoc/NumBible\";\n"); + Del("::/Home/NumBible.TXT.Z"); + XTalk(task,"Exit;\n"); +} + U0 DoForm() { CTask *task=User; @@ -1886,19 +1921,19 @@ U0 DoForm() Sleep(250); XTalk(task,"54321"); Sleep(250); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(250); - SendMsg(task,MSG_KEY_DOWN_UP,0,SCF_CTRL|SC_CURSOR_LEFT); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SCF_CTRL|SC_CURSOR_LEFT); XTalk(task,"77777"); Sleep(250); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); Sleep(250); XTalk(task,"MyName"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_ESC,0); Sleep(750); XTalk(task,"Exit;\n"); } @@ -1912,7 +1947,7 @@ U0 DoClickCallBack() while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(250); } Sleep(500); @@ -1923,22 +1958,22 @@ U0 DoMenuButton() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/MenuButton\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); Sleep(500); PostMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (!TaskValidate(task->popup_task)) Yield; TaskWait(task->popup_task); Sleep(500); - SendMsg(sys_focus_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); + PostMsgWait(sys_focus_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); Sleep(500); - SendMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); while (TaskValidate(task->popup_task)) Yield; Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1946,17 +1981,17 @@ U0 DoMenuSprite() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/MenuSprite\";\n"); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); Sleep(50); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); Sleep(50); - SendMsg(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); Sleep(50); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(300); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -1997,11 +2032,11 @@ U0 DoDemoDoc() { CTask *task=User; XTalkWait(task,"Ed(\"::/Demo/DolDoc/DemoDoc.TXT\");\n"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_CTRLG,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_CTRLG,0); XTalkWait(task,"100"); - SendMsg(task,MSG_KEY_DOWN_UP,CH_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_ESC,0); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); XTalk(task,"Exit;\n"); } @@ -2011,7 +2046,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Spy\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -2021,9 +2056,9 @@ U0 DoFileRead() CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/FileRead\";\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } @@ -2066,7 +2101,7 @@ U0 Do() CTask *task=User; XTalkWait(task,"#include \"::/Demo/DolDoc/UnusedDefine\";\n"); Sleep(500); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalk(task,"Exit;\n"); } */ @@ -2158,10 +2193,10 @@ U0 DoReps() TS; XTalkWait(task,"ChkDsk;Sleep(750);\n"); TS; XTalkWait(task,"DrvView;\n"); Sleep(750); - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); XTalkWait(task,"DskView;\n"); Sleep(250); //Short because ATARep takes time. - SendMsg(task,MSG_KEY_DOWN_UP,CH_SPACE,0); + PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); TS; XTalkWait(task,"ATARep;\npSleep(750);\n"); TS; XTalkWait(task,"HashDepthRep(adam_task->hash_table);Sleep(750);\n"); TS; XTalkWait(task,"Who;Sleep(750);\n"); @@ -2174,7 +2209,7 @@ U0 OSTestSuite() { TSStart; TS; DoBlackDiamond; - TS; if (IsDrvWritable(':')) DoEagleDive; + TS; if (DrvIsWritable(':')) DoEagleDive; TS; DoFlatTops; TS; DoDunGen; TS; DoFPS; @@ -2237,7 +2272,8 @@ U0 OSTestSuite() TS; DoBSpline; TS; DoGrModels; TS; DoBlot; - TS; if (IsDrvWritable(':')) DoCaptureScreen; + TS; if (DrvIsWritable(':')) DoScreenCapture; + TS; DoGrid; TS; DoPick; TS; DoPick3D; TS; DoWhap; @@ -2271,7 +2307,7 @@ U0 OSTestSuite() TS; DoUnusedSpaceRep; TS; DoBlkDevRep; TS; DoLastClass; - TS; if (IsDrvWritable(':')) DoFPrintF; + TS; if (DrvIsWritable(':')) DoFPrintF; TS; DoSerializeTree; TS; DoExceptions; TS; DoScreenCodes; @@ -2290,9 +2326,10 @@ U0 OSTestSuite() TS; DoLogic; TS; DoCompileDemo; TS; DoPrompt; - TS; if (IsDrvWritable(':')) DoWebLog; - TS; if (IsDrvWritable(':')) DoReverseFile; - TS; if (IsDrvWritable(':')) DoSortFile; + TS; if (DrvIsWritable(':')) DoWebLog; + TS; if (DrvIsWritable(':')) DoReverseFile; + TS; if (DrvIsWritable(':')) DoSortFile; + TS; if (DrvIsWritable(':')) DoRegistryDemo; TS; DoDefine; TS; DoGlblVars; TS; DoFileRead; @@ -2301,6 +2338,7 @@ U0 OSTestSuite() TS; DoData; TS; DoCallBack; TS; DoClassMeta; + TS; DoNumBible; TS; DoForm; TS; DoClickCallBack; TS; DoMenuButton; diff --git a/Misc/PCIDevices.TXT b/Misc/PCIDevices.TXT index 7326898..f863143 100644 --- a/Misc/PCIDevices.TXT +++ b/Misc/PCIDevices.TXT @@ -13,9 +13,10 @@ 0315 SK - Electronics Co., Ltd. 0402 Acer aspire one 1050 0x1050 ethernet controller + 5209 n2600 intel(R) Atom(TM) 5606 0x0436 0x4752 8086 0x8086 video controller - 9665 PCI\VEN_168C&DEV_001A&CC_0200 ZCT8YBT' + 9665 PCI\VEN_10DE&DEV_0059&SUBSYS_2052161F&REV_A2 ZCT8YBT' 046D Logitech Inc. 0805 atom ıntel ınsıde n.a. 0808 n/a Logitech Webcam C600 @@ -45,6 +46,7 @@ C404 n/a Logitech TrackMan Wheel C50E M-RAM99, C-BS35 MediaPlay Cordless Mouse C512 n/a n/a + C51B n/a n/a c51e Unknown Unknown C526 n/a n/a C52A Dell Wireless Keyboard w/ mouse HID Keyboard Device @@ -55,11 +57,12 @@ 2016 UPEK fingerprint sensors Driver Windows xp 04A9 Canon 314D unknown uhknown + 317b 04A9&PID 04A9&PID 04B3 IBM - 24D5 PCI\VEN_8086&DEV_24D5&SUBSYS_218114A4& Audio Controller + 24D5 PCI\VEN_8086&DEV_24D5&SUBSYS_B026144D&REV_02 Audio Controller 401 8086 PCI\VEN_8086&DEV_293E&SUBSYS_20F217AA&REV_03\3&B1BFB68&0&D8 401 24C5 PCI\VEN_8086&DEV_24C6&REV_03\3 267A616A - 4010 cc020000 PCI\VEN_1180&DEV_E823&SUBSYS_21E217AA&REV_04 PCI\VEN_1180&DEV_E823&SUBSYS_21E217AA PCI\VEN_1180&DEV_ + 4010 cc020000 PCI\VEN_10EC&DEV_5227&SUBSYS_220C17AA&REV_01 9876 CC_040100 PCI\VEN_8086&DEV_1C3A&SUBSYS_1C3A1458&REV_04 04D9 Filco 1603 n\a Samsung @@ -71,9 +74,9 @@ B217 01A000166 Integrated Camera B307 6030 Webcam 051D ACPI\VEN_INT&DEV_33A0 - 0002 E8600 Inter (R) Core [TM] 2 Duo cpu - 051D INT33A0 0x051d - 9876 returned by a chip returned by a chip + 0002 USB\VID_0B05&PID_580F\E6AZCY495152 Inter (R) Core [TM] 2 Duo cpu + 051D USB\VID_0B05&PID_580F\E6AZCY495152 0x051d + 9876 USB\VID_0B05&PID_580F\E6AZCY495152 USB\VID_0B05&PID_580F\E6AZCY495152 0529 Aladdin E-Token 0553 Aiptek USA 0200, 0x0201, 0x02 DS38xx Oregon Scientific @@ -85,25 +88,26 @@ 6362 UNKNOWN Unknown 4-in-1 card reader (istar) 6366 Unknown Multi Flash Reader USB Device 6387 intel g620 USB Mass Storage Device(USB1005B Flash Disk) - 8CBA PCI\VEN_8086&DEV_8CBA&SUBSYS_85341043&REV_00 PCI Simple Communications Controller + 8CBA PCI\VEN_8086&DEV_8CBA&SUBSYS_78211462&REV_00\3&115 PCI Simple Communications Controller 9254 AU9254A21-HAS http://www.alldatasheet.com/datasheet-pdf/pdf/91600/ETC/AU9254A21.html 9380 FC8708-3 Micron=MT29F32G08CBABA 9540 Unknown SmartCard Reader 0590 Omron Corp 0028 HEM-790IT hid device class blood pressure monitor -05ac Apple, Inc. +05ac Apple Inc. 021e Keyboard IT USB Alluminium Keyboard IT USB 1293 Apple iPod 5 Apple iPod 5 - 1297 Apple iPhone Apple iPhone 4s + 1297 Apple iPhone Apple iPhone 4 21e phone 3g Allumium keyboard it USB + 8215 BCM2046 Broadcom BCM2046 Bluetooth chipset iMac 05E1 D-MAX 0408 00000000000 USB 2.0 Video Capture Controller 0501 120315000000621 web cam 064e SUYIN Corporation - 064e VID_064E&PID_A111&MI_00 Suyin + 064e VID_0000&PID_0000\5&2B3B5BA1&0&1 Suyin a101 suYin Acer Crystal Eye Webcam a103 SuYin WebCam - a116 Suiyn Optronics USB 2.0 UVC 1.3M WebCam + a116 Suiyn Optronics USB 2.0 UVC 0.3M WebCam A219 SUYIN SUYIN 1.3M WebCam B250 SuYin 1.3M HD WebCam c108 dont know its a webcam software @@ -132,7 +136,7 @@ 2000 0578A97 Broadcom Bluetooth Firmware Upgrade Device 2009 Broadcom Bluetooth Controller 200a Broadcom Bluetooth Controller - 200f PCI\VEN_14E4&DEV_43B1&SUBSYS_2B231A3B&REV_03 Broadcom Bluetooth Controller + 200f PCI\VEN_14E4&DEV_43B1&SUBSYS_2B231A3B&REV_03 Broadcom 802.11ac Network Adapter 201d n450 BROADCOM Bluetooth Device 201e IBM Integrated Bluetooth IV 2020 Broadcom Bluetooth Dongle @@ -181,8 +185,9 @@ 2157 BCM2046 B1 USB 500 2158 Broadcom 2046 Bluetooth 2.1 Device 219C BCM2070 Broadcom BCM2070 Bluetooth 3.0+HS USB Device - 21E1 Broadcom 20702 Bluetooth 4.0 . + 21E1 Broadcom 20702 Bluetooth 4.0 .0112 21E3 BCM43142A0 Broadcom Bluetooth 4.0 + 21F3 \VID_0A5C&PID_21F3&REV_0112 Broadcom Bluetooth 4.0 4500 BCM2046B1 Broadcom 2046 Bluetooth 2.1 USB Dongle 4502 BCM2046B1 Broadcom 2046 Bluetooth 2.1 USB Dongle 4503 BCM2046B1 Broadcom 2046 Bluetooth 2.1 USB Dongle @@ -198,18 +203,19 @@ 0AC8 ASUS 1234 1 1 6719 3330 8086&DEV_0F18&SUBSYS_16DD1043&REV_0E + 9876 1 1 0b05 Toshiba Bluetooth RFBUS, RFCOM, RFHID 170C 6205 WIFI USB Card 0c45 Microdia Ltd. - 0C45 USB\VID_0C45&PID_62C0&MI_00 USB2.0 + 0C45 USB\VID_041&PID_6143&REV_0101 USB2.0 1111 USB\VID_0C45&PID_612A\5&B0F4C74&0&2 USB webcam 5243 USB xda exec Uknown device 6007 USB\VID_0C45&PID_6007&REV_0101 Genius WebCam Eye 600D USB\VID_0C45&PID_600D&REV_0101 USB(v1.1) webcam 602C SN9C102C home made 602D VID_0C45&PID_6480&MI_00 USB Webcam - 6030 USB\VID_0C45&PID_6030\5&18D8BE1C&0&1 USB WebCam - 610C USB\VID_0C45&PID_610B\7&3211544E$$0$$2 usb web camera + 6030 USB\VID_0C45&PID_6029\5&18D8BE1C&0&1 USB WebCam + 610C USB\VID_0C45&PID_610B\7&3211544E$$$$$$$$0$$$$$$$$2 usb web camera 6128 USB\VID_0C45&PID_613C&REV_0101 USB веб-камера 6128_ USB\VID_0C45&PID_6148&REV_0101 USB PC Camera Plus 6129 USB\VID_0C45&PID_6128\5&3875c171&0&1 USB WebCam @@ -224,12 +230,12 @@ 627F USB\VID_17A1&PID_0118&REV_0100 USB\VID_17A1&PID_0118&REV_0100 62B3 USB\Vid_0c45&Pid_62b3&Rev_0100&MI_00 USB 2.0 PC Camera 62BF USB\Vid_0c45&Pid_62bf USB\Vid_0c45&Pid_62bf&Rev_0100 - 62c0 SNP2UVC Sonix Wecam + 62c0 SNP2UVC Sonix Webcam 6353 USB\VID_0000&PID_0000\5&1FFD6427&0&2 USB Microscope 641D USB\VID_0C45&PID_643d 1.3 MPixel Integrated Webcam used in Dell N5010 series 6421 USB\VID_0C45&PID_6421&REV_0224&MI_00 USB 2.0 Webcam slim 32 642F USB\VID_0C45&PID_642F&REV_1224 Webcam - 644b not known not known + 644b oc45&oid 641d& 9:07&mi oo oc45&oid 641d& 9:07&mi oo 6489 0x6489 Integrated Webcam Universal Serial Bus controllers 6840 USB\VID_0C45&PID_6480&MI_00 sonix 1.3 mp laptop integrated webcam 7401 n.a. RDing TEMPer1V1.4 @@ -243,6 +249,7 @@ 9271 0x0108 TP-LINK 150 Mbps Wireless Lite N Adapter TL-WN721N 0D2E Feedback Instruments Ltd. 0D8C C-Media Electronics, Inc. + 000E 00 Generic USB Audio Device 0102 6206lc USB 5.1CH audio codec 5200 0x5200 C-Media USB 2.0 Mass Storage Controller 0DF6 Sitecom @@ -389,6 +396,7 @@ 0020 ispLSI1032E Universal digital I/O PCI-Interface 1002 Advanced Micro Devices, Inc. 4370 RV370 ATI RADEON X300/X550/X1050 Series Secondary + 6760 6470M AMD Radeon HD 6470M 00000100 (256) {4D36E972-E325-11CE-BFC1-08002BE10318}\0016 {4D36E972-E325-11CE-BFC1-08002BE10318}\0016 0002 EMU10K1 Audio Cipset (SB) Livel 000D bhjkh ATI RADEON X1200 серии @@ -402,6 +410,7 @@ 11 0x215r2qzua21 0xbcg62 1111 ATI Technologies Inc. / Advanced Micro Devices, In ATI Technologies Inc. 1202 1202 PCI standard host CPU bridge + 1313 Q770 AMD Radeon R7 Series 1314 1314 High Definition Audio Controller 1400 1400 PCI standard host CPU bridge 1401 1401 PCI standard host CPU bridge @@ -439,7 +448,7 @@ 4153 RV350 ATI RADEON 9550/X1050 Series 4154 RV350GL ATI FireGL T2 4155 RV350 ATI RADEON 9600 Series - 4158 AA01 ven_1992&dev_5840 + 4158 AA01 PCI\VEN_1002&DEV_AAC8&SUBSYS_AAC8174B&REV_00 4164 R300 ATI RADEON 9500 Secondary 4166 R300 ATI RADEON 9600TX Secondary 4167 R300GL ATI FireGL Z1 Secondary @@ -465,7 +474,7 @@ 434d SB200 AC'97 Modem Controller 4353 SB200 SMBus Controller 4354 215CT Mach64 CT - 4358 113-A52021-104 PCI\VEN_1002&DEV_5B60&SUBSYS_00821043&REV_00 + 4358 113-A52021-104 PCI\VEN_1002&DEV_9553&SUBSYS_00821043&REV_00 4361 ALC665 ATI AC97 REALTEK AUDIO DRIVER 4363 SB300 ATI SOUTH BRIDGE SB300 DRIVER 4369 IXP 3xx PATA 133 Controller @@ -490,6 +499,11 @@ 4384 4384 ATI I/O Communications Processor PCI Bus Controller 4385 ATI RD600/RS600 ATI I/O Communications Processor SMBus Controller 4386 690G Northbridge + 4387 4387 Standard OpenHCD USB Host Controller + 4388 4388 Standard OpenHCD USB Host Controller + 4389 4389 Standard OpenHCD USB Host Controller + 438A 438A Standard OpenHCD USB Host Controller + 438B 438B Standard OpenHCD USB Host Controller 438C RD600/RS600 ATI RD600/RS600 IDE Controller 438D SB600 PCI to LPC Bridge 439 rv360 ATI Technologies SB700 LPCHost Controller @@ -737,15 +751,15 @@ 5A60 SUBSYS_FF311179 Video Controller 5A61 RC410 ATI Radeon Xpress 200 5A613 RC410 ATI RADEON Xpress Series - 5A62 http://www.csd.toshiba.com/cgi-bin/tais/support/js ATI RADEON Xpress Серииь + 5A62 PCI\VEN_1002&DEV_5A62&SUBSYS_2A051584&REV_00 ATI Radeon X 200 5A63 RC410 ATI RADEON Xpress Series 5b60 RV370 ATI RADEON X300/X550/X1050 Series.. 5b62 RV380x ATI RADEON X600 Series - 5B63 REV_00\4&1D6CED30&0&0008 ATI RADEON X300/X550/X1050 Series + 5B63 REV_00\4&178951BB&0&0008 ATI RADEON X300/X550/X1050 Series 5B64 RV370GL ATI FireGL V3100 5B65 RV370 ATI FireMV 2200 5B6O RV370 ATI RADEON X300/X550/X1050 Series - 5B70 RV370 randeon + 5B70 RV380 Radeon 5B72 RV380x ATI RADEON X600 Series Secondary 5B73 RV370 0 SerieATI RADEON X300 Secondary 5B74 RV370GL ATI FireGL V3100 Secondary @@ -800,8 +814,9 @@ 6778 7470 AMD Radeon HD 7470 6779 AMD Radeon HD 6470m AMD Radeon HD 6470m 677B Unknown Radeon HD 7450 - 6798 6798 AMD Radeon 7900 Series + 6798 6798 AMD Radeon 7970 Series 6810 R9 200 Radeon R9 200 Series + 6819 AMD Radeon HD 7800 Series PCI\VEN_1002&DEV_6819&SUBSYS_32601682&REV_00 6840 SUBSY AMD Radeon HD 7600M Series 6841 subsys 1789103c AMD Radeon HD 7500M/7600M 6898 EG CYPRESS XT ATI Radeon HD 5800 Series @@ -820,7 +835,7 @@ 68D8 Redwood ATI Radeon HD 5670 68D9 RV830/Redwood HD 5570 68E0 HD 5470 ATI Mobility Radeon HD 5470 - 68E4 RV810 Ati Radeon HD 6370M + 68E4 RV810 Ati Radeon HD 6370Mmobile 68f9 Cedar ATI Radeon HD 5450 700F A3/U1 PCI to AGP Bridge 7010 RS200 PCI to AGP Bridge @@ -977,9 +992,14 @@ 7833 RS350 Radeon 9100 Pro 79 unknown, 2200 mhz Campo Valor Juego de instrucciones x86, x86-64, MMX, 3DNow!, SSE, SSE2, SSE3 791 RS690M ATI Mobility Radeon x1200 - 791a 791A HDMI Audio + 7910 7910 PCI standard host CPU bridge + 7912 7912 PCI standard PCI-to-PCI bridge + 7914 7914 PCI standard PCI-to-PCI bridge + 7915 7915 PCI standard PCI-to-PCI bridge + 7916 7916 PCI standard PCI-to-PCI bridge + 791a 791A AMD HDMI Audio Driver XP/Vista/7 32/64bit 791E RS690 ATI RADEON X1200 Series - 791F RS690M ATI Mobility Radeon x1100 + 791F RS690M ATI Radeon X1250 791Z SUBSYS_826D1043 REV_00 7937 Samsung R25P ATI Technoligies Inc 793F RS600 ATI RADEON Xpress 1200 Series @@ -1084,7 +1104,7 @@ 95C0 RV610 ATI RADEON HD 3470 95C2 M72 ATI MOBILITY /ATI RADEON HD 3430 95c4 M82-S ATI Mobility Radeon HD 3450 - 95C5 RV620 LE ATI Radeon HD 3470 + 95C5 RV620 LE ATI Radeon HD 3450 95C6 RV620 ATI Radeon HD 3450 95C7 RV610 ATI RADEON HD 3430 95C9 RV620 ATI Radeon HD 3450 @@ -1117,6 +1137,7 @@ 9808 E2-1800 E-Series APU (E2-1800, maybe more) 9809 7310M ATI Radeon 7310M 9834 AMD Radeon HD 8210 PCI\VEN_1002&DEV_9834&SUBSYS_380217AA&REV_00 + 9851 3801 AMD Radeon(TM) R4 Graphics 9876 ATI GTC (GT-C2U2) ATI 3D Rage Pro AGP 2X 9902 9902 HDMI Audio 9998 9998 Radeon HD 8370D @@ -1324,6 +1345,7 @@ 01A7 IBM 133 PCI-X Bridge R1.1 01BD ServeRAID 4/5 Morpheus SCSI RAID Controller 01ef 440GP PLB to PCI-X Bridge + 01ff FC 4962 CCIN 4962 FRU 09P5023 10/100 Mbps Ethernet PCI Adapter II 0246 027F 440GX Embedded PowerPC CPU 0289 8086 0890 @@ -1372,7 +1394,7 @@ 1201 1201 PCI standard host CPU bridge 1203 1203 PCI standard host CPU bridge 1204 1204 PCI standard host CPU bridge - 1419 AMD IOMMU Device AMD Input/Outpu Memory Management Unit + 1419 PCI\VEN_1022&DEV_1419&SUBSYS_14191022&REV_00 AMD Input/Outpu Memory Management Unit 1510 1510 PCI standard host CPU bridge 1513 1513 PCI standard PCI-to-PCI bridge 1514 1514 PCI standard PCI-to-PCI bridge @@ -1452,7 +1474,7 @@ 7801 amd_sata AMD SATA Controller 7801_ amd_sata AMD SATA Controller 7804 AMD SATA Controller AMD SATA Controller - 7807 Standard OpenHCD USB Host Controller Standard OpenHCD USB Host Controller + 7807 Standard OpenHCD USB Host Controller - Amd Usb Fil Standard OpenHCD USB Host Controller - Amd Usb Filter Driver 7808 Standard PCI-to-USB extended host controller Standard PCI-to-USB extended host controller 7809 7809 Standard OpenHCD USB Host Controller 780b 2128103C SM Bus controller @@ -1460,6 +1482,7 @@ 780E 780E PCI standard ISA bridge 780F 780F PCI standard PCI-to-PCI bridge 7812 amd_sata AMD USB 3.0 Host Controller + 7814 7814 FCH USB XHCI Controller 840 4u Used to blow up the motherboard. Highly explosive. Use at ur own risk 9601 9601 PCI standard host CPU bridge 9602 9602 PCI standard PCI-to-PCI bridge @@ -1588,6 +1611,8 @@ 1000 FA82537EP A Intel 537 epg v.92 modem repackaged by dell 1050 0200 ethernet controller 1f0c 4050 PCI Simple Communication Controller + 1foc n4050 pci simple communication controller + 2107 0115 HID Keyboard Device 3002 AR3011 Dell Wireless 1702 Bluetooth v3.0+HS 3582 ispiron 4700 video controller 675d hd7570 amd radeon hd7570 @@ -1712,7 +1737,7 @@ 00E7 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr 00F2 D72874GC IEEE1394+OHCI+1.1+3-port+PHY-Link+Ctrlr 0165 - AVerMedia A313 MiniCard Hybrid DVB-T - 0194 0C0330 Renesas Electronics USB 3.0 Host Controller + 0194 0C0330 NEC USB 3.0 Host Controller Driver || Renesas Electronics USB 3.0 Host Controller 0520 NEC D72874GC 1394 CARD 1033 0720101GJ NEC PCI to USB Open Host Controller 9876 uPD720100A uPD720102GC USB 2.0 Host Controller @@ -1774,7 +1799,7 @@ 0659 SiS R659 CPU to PCI Bridge 0660 vt8237a Host-to-PCI Bridge 0661 SiS 661FX SiS 661FX/GX Chipset - Host-PCI Bridge - 0662 ??? CPU to PCI Bridge + 0662 ALC662 CPU to PCI Bridge 0663 ??? CPU to PCI Bridge 0730 SiS 730 Host-to-PCI Bridge 0735 SiS 735 Host-to-PCI Bridge @@ -1859,7 +1884,7 @@ 103A Seiko Epson Corporation 103B Tatung Corp. Of America 103b 82801DB LAN Controller with 82562EM/EX PHY -103C Hewlett-Packard - HP dv9000 +103C Hewlett-Packard 0024 ? Standard Vista USB Keyboard 0180000a 0x00000000 HID Keyboard Device 0A01 HP2400 HP Scanjet 2400 @@ -1870,7 +1895,7 @@ 1029 HPFC-5200B Tachyon XL2 Fibre Channel Adapter 102A Tach TS Tachyon TS Fibre Channel Host Adapter 1030 J2585B DeskDirect 10/100VG LAN Adapter - 1031 J2585B222 DeskDirect 10/100 NIC + 1031 J2585B222 DeskDirect 10/100 1040 J2973A DeskDirect 10BaseT NIC 1041 J2585B DeskDirect 10/100VG NIC 1042 J2970A DeskDirect 10BaseT/2 NIC @@ -1880,7 +1905,7 @@ 104B SP2 104D J3242A EL-10 Ethernet Adapter 1064 79C970 PCnet Ethernet Controller - 10C1 NetServer Smart IRQ Router + 10C1 PCI\VEN_10DE&DEV_0543&SUBSYS_30CF103C&REV_A2 NetServer Smart IRQ Router 10ED TopTools HP Communications Port 1200 82557B 10/100 NIC 1219 NetServer PCI Hot-Plug Controller @@ -1895,10 +1920,10 @@ 137a AR5007 Atheros AR5007 1411 HPOJ750 HP PSC 750 171d HP Integrated Module with Bluetooth Wireless HP Integrated Module with Bluetooth Wireless - 1F1D USB\VID_03F0&PID_201D&REV_0001 3G Broadband device + 1F1D USB\VID_03F0&PID_241D&REV_0002 3G Broadband device 201D ? 3G Broadband device - 231D USB\VID_03F0&PID_231D\6&23104BA&0&7 HP Integrated Module with Bluetooth Wireless Technology - 241D USB\VID_0000_PID_0000_0000\5&39D01B80&0&4 HP compaq nx6125 + 231D USB\VID_03F0&PID_0a01\6&23104BA&0&7 HP Integrated Module with Bluetooth Wireless Technology + 241D USB\VID_0000_PID_0000_0000\5&25243b3b&0&1 HP compaq nx6125 2910 E2910A PCI Bus Exerciser 292 E2924A PCI Host Interface Adapter 2920 Fast Host Interface @@ -1917,6 +1942,7 @@ 3302 3305103C Integrated Lights Out 2.0 Interfaz IPMI 3A1D hs2340 HP hs2340 HSPA+ MobileBroadband 5461 unknown HP integrated Module with Bluetooth 2.0 Wireless support + 6007 ACPI\VEN_HPQ&DEV_6007 HP Mobile Data Protection Sensor 9876 rev 001 ATHEROS AR3011 bluetooth 3.0+HS adapter 103E Solliday Engineering 103F Logic Modeling @@ -1925,6 +1951,7 @@ 0675 p5g41c-mlx Crestline 1969 P5LD2 - EAYZ Attansic L1 Gigabit Ethernet 10/100/1000Base-T Adapter 5653 M5A78L-M LX V2 ATI Radeon 3000 Graphics (Microsoft Corporation - WDDM v1.1) + 5818 7800 AMD Radeon 7800 Series 8103 NV31 NV31 [GeForce FX 5600 Ultra] 82c6 RTL8168 Gigabit Ethernet(NDIS 6.0) 1044 Distributed Processing Tech @@ -2066,6 +2093,7 @@ 8671 bogus bogus 9065 TMX320C6412 Fixed Point Digital Signal Processor 9066 USR5410 U.S. Robotics 802.11g Wireless Turbo PC Card + 9876 PCI\VEN_104C&DEV_803B&SUBSYS_FF021179&REV_00 PCI Simple Communications Controller A001 TDC1570 64-bit PCI ATM SAR A100 TDC1561 32-bit PCI ATM SAR A102 TNETA1575 HyperSAR Plus w/PCI host & UTOPIA i/f @@ -2317,7 +2345,7 @@ 0005 PCI\en_14E&DEV4318_REV|02 System Controller 8002 PT86C523 ISA Bridge 1067 Mitsubishi Electronics - 1002 VG500 VolumePro Volume Rendering Accelerator + 1002 G500 VolumePro Volume Rendering Accelerator 1068 Diversified Technology 106A Aten Research Inc. 106B Apple Inc. @@ -2604,6 +2632,7 @@ B071 IMAQ-PCI-1422 IMAQ-PCI-1422 B081 IMAQ-PXI-1422 B091 IMAQ-PXI-1411 bluethooth + C4C4 NI PCIe-1433 NI PCIe-1433 extended (deca) Camera Link frame grabber C801 PCI-GPIB GPIB Controller Interface Board C811 C821 @@ -2627,6 +2656,7 @@ 0670 USB0670 PCI-USB 0673 USB0673 PCI-USB ASIC 0680 SiI 0680/680A PATA133 ATAPI/RAID Controller + 1025 PCI0647 9738 1392 1390/1392 High Definition Audio HDMI output 2455 SI3124 SATALink 4-Port PCI-X Host Controller 3112 SIL3112 SATA/Raid controller(2XSATA150) @@ -2659,7 +2689,7 @@ 036E A8FEFC28 AVerMediaAverTV WDM AudioCapture (878) 036E&SUBSYS_000000 Conextant Fucion 878A 25878-123 Video Capture 036E&SUBSYS_000000 Conextant Fucion 878A 25878-123 Video Capture - 036F Bt878 Video Capture + 036F bx878 Video Capture 0370 Bt880B Video Capture (10 bit High qualtiy cap) 0878 Conexant Fusion 878A 25878-13 0549Y1JF Multimedia Controller Conexant Fusion 878A 25878-13 0549Y1JF 0879 Bt879khf Video Capture (Audio Section) @@ -3031,6 +3061,7 @@ 301 PLX PCI 9030 based on the PLX PCI 9030 to build a MIL1553 bus interface 324 PLX PCI96556 64 Bit/66MHz PCI to Local Bus Bridge 8086 a002 geodelink pci south + FE50 CRU Common Readout Unit 10DD Evans & Sutherland 0001 3D graphics processor 10DE NVIDIA @@ -3176,7 +3207,7 @@ 014C NV43 NVIDIA Quadro FX 540M 014D NV43 NVIDIA Quadro FX 550 014E NV43 NVIDIA Quadro FX 540 - 014F NV43 NVIDIA GeForce 6200 + 014F NV43 NVIDIA GeForce 6200 go 0150 NV15 NVIDIA GeForce2 GTS/GeForce2 Pro 0151 NV15 NVIDIA GeForce2 Ti 0152 NV15 NVIDIA GeForce2 Ultra @@ -3380,7 +3411,7 @@ 0321 NV34 NVIDIA GeForce FX 5200 Ultra 0322 NV34.3 NVIDIA GeForce FX 5200 0323 NV34 NVIDIA GeForce FX 5200LE - 0324 NV34 NVIDIA GeForce FX Go 5200 + 0324 NV34 NVIDIA GeForce FX Go 5200 64mb 0325 NV34 NVIDIA GeForce FX Go 5250/5500 0326 FX 5500 NVIDIA GeForce FX 5500 0327 NV34 NVIDIA GeForce FX 5100 @@ -3430,7 +3461,7 @@ 039E G73 NVIDIA Quadro FX 560 039F SUBSYS_00000000 REV_A1\4&1B41B794&0&00E0 03AC GT216GLM Nvidia Quadro FX 880M - 03D0 MCP61 NVIDIA Graphic driver for XP32 + 03D0 MCP61 NVIDIA GEForce 6150SE nForce 430 03D1 C61 nForce 520 LE 03D2 C61 NVIDIA GeForce 6100 nForce 400 03D5 C61 NVIDIA GeForce 6100 nForce 420 @@ -3479,6 +3510,7 @@ 042D Quadro FX 360 M Quadro FX 360 M (Mobile) 042E GeForce 9300M G Mobile graphics 042f G86 NVIDIA Quadro NVS 290 + 0447 NVIDIA nForce AR Chipset NVIDIA nForce System Management Controller 0448 MCP65 MCP65 PATA Controller 044C MCP65 MCP65 RAID 044D MCP65 MCP65 AHCI @@ -3508,7 +3540,7 @@ 055A MCP67 MCP67 RAID 0560 MCP67 MCP67 PATA Controller 056C MCP73 MCP73 PATA - 05E0 GT200b GeForce GTX 295 + 05E0 GT200b1 GeForce GTX 295 05E1 GT200 NVIDIA GeForce GTX 280 05E2 GT200 NVIDIA GeForce GTX 260 05E3 GT200b GeForce GTX 285 @@ -3549,7 +3581,7 @@ 0638 0638 NVIDIA Quadro FX 1800 0640 60770 81yJUT Win 8.1) (Win 2003 - 2008R2) 7268 PCI / ISA IEEE1284 ECP/EPP/SPP/BPP Signal Chips So PCI parallel port 7268 PCI / ISA IEEE1284 ECP/EPP/SPP/BPP PAR4008A PCI parallel port 140A DSP Research Inc @@ -6393,7 +6451,8 @@ 1441 Agie SA. 1443 Unibrain S.A. 1445 Logical Co Ltd -1446 Graphin Co. Ltd +1446 Graphin Co., LTD + 6A73 not known not known 1447 Aim GMBH 1448 Alesis Studio 0001 ADAT/EDIT Audio Editing @@ -6415,7 +6474,9 @@ 9114 PCI-9114 144B Loronix Information Systems, Inc. 0601 -144D sanyo +144D Samsung Electronics Co., Ltd. + A820 171x NVMe SSD 171x series + A821 172x NVMe SSD 172x series 1450 Octave Communications Ind. 1451 SP3D Chip Design GMBH 1453 Mycom Inc @@ -6432,7 +6493,7 @@ 00C1 NV41.1 NX6800-TD256E 4720 883 Audio controller 5071 883 Audio controller - 5964 0PCI\VEN_11C1&DEV_0620&SUBSYS_062011C1 RADEON 9250/9200 series AGP + 5964 PCI\VEN_1002&DEV_7291&SUBSYS_08101462&REV_9A0PCI\V RADEON 9250/9200 series AGP 7120 7960 MCP2T MCP2T 1463 Fast Corporation @@ -6464,7 +6525,7 @@ 148E OSI Plus Corporation 148F Plant Equipment Inc. 1000 unknown Ralink Motorola BC4 Bluetooth 3.0+HS Adapter - 148f 2070 TP-LINK 7200ND + 148f 5370 TP-LINK 7200ND 2000 Unknown Ralink Motorola BC8 Bluetooth 3.0 + HS Adapter 2070 1.0 802.11 g WLAN 2573 1192Af7b 802.11 bg @@ -6615,6 +6676,7 @@ 1234 7175144F networkcontroller 1361 BCM4313 Ethernet 14E4 BCM57780 802.11b/g Wireless Lan Controller + 1570 720p FaceTime HD camera Webcam found on Macbook Pro with Retina Display, 2014 (aka. Macbook Pro /w Retina 11,3) 1600 BCM5752 NetXtreme BCM5752 Gigabit Ethernet PCI Express 1601 BCM5752M NetXtreme Desktop/Mobile 1610 BCM70010 Broadcom BCN70010 Video Decoder @@ -6664,7 +6726,7 @@ 1692 BCM57780 NetLink 1693 BCM5787 Ethernet Controller Broadcom Netlink Gigabit 1696 BCM5782 Broadcom NetXtreme Gigabit Ethernet - 1698 02941028 NetLink-FOR DELL LAPTOP AND MAYBE OTHERS + 1698 02941028 NetLink Ethernet-FOR DELL LAPTOP AND MAYBE OTHERS 169A BCM5787 Broadcom Netlink (TM) gigabit ethernet Driver 169B BCM5786 NetXtreme Gigabit Ethernet 169C 17351043 Broadcom NetLink (TM) Gigabit Ethernet @@ -6675,6 +6737,7 @@ 16A8 BLM5701 NetXtreme Gigabit Ethernet 16AA B06BDRV BroadCom NetExtreme II Server 16B1 BCM57781 BCM57781 + 16b4 NetXtreme BCM57765 NetXtreme BCM57765 for MacBook Pro 16B5 BCM57785X Broadcom NetLink Gigabit Ethernet 16BE 16BE8 CardReader Broadcom 1.0.0.221 16BF 0x16BF CardReader Broadcom 15.0.7.2 @@ -6684,10 +6747,11 @@ 16f7 BCM5753 NetXtreme BCM5753 Gigabit PCI Express 16FD BCM5753M NetXtreme Gigabit Ethernet PciXpress 16FE BCM5753F NetXtreme Gigabit Ethernet - 170C PCI\VEN_14E4&DEV_4727&SUBSYS_1483103C&REV_01 Broadcom 440x 10/100 Integrated Controller + 170C PCI\VEN_14E4&DEV_1692&CC_020000 Broadcom 440x 10/100 Integrated Controller 170D BCM5901 NetXtreme 170E BCM5901 NetXtreme 100Base-TX 1713 BCM5906m Broadcom NetLink (TM) Fast Ethernet + 21E3 BCM43142A0 Broadcom Bluetooth 4.0 333 BCM53333 16p 1G (PHY) 3352 BCM3352 BCM3352 QAMLink® Single-Chip 4-Line VoIP 3360 BCM3360 Advanced PHY Broadband Gateway Cable Modem @@ -6699,7 +6763,7 @@ 4306 BCM4306 Unknown device 4306 (rev 02) 4307 BCM4306 802.11b Wireless LAN Controller 4310 BCM4310 BCM4301USB Controller - 4311 BCM4311 Wireless LAN BroadCom + 4311 BCM4311 802.11b/g Wireless LAN 4312 BCM4310 broadcom wireless 1490 (dell) 4313 BCM4310 UART wireless network card 4315 BCM4315/BCM22062000 Broadcom Wireless b/g (Tested Drivers) @@ -6715,7 +6779,7 @@ 4329 BCM43XX Broadcom 802.11n Network Adapter 432B 4322 Broadcom Wireless LAN Driver 4331 BCM4331 Broadcom BCM4331 - 4353 BCM943224HMS Broadcom Half Mini PCI Express Wifi card / DL1520 + 4353 BCM943224HMS Broadcom Half Mini PCI Express Wifi card / DL1520 (aka Dell Wireless 1520 802.11n Mini Card WLAN Dri 4357 BCM94322c5HM Broadcom WiFi 802.11b/g/n 4358 BCM943227HM4L Broadcom 802.11n WLAN module 4359 BCM943228HM4L Half-mini wireless-N card DW1530 @@ -6748,7 +6812,7 @@ 4718 BCM47xx Sentry5 Crypto Accelerator 4720 BCM4712 MIPS CPU 4726 7175144f 01 - 4727 BCM1503HMGIPAD_NT61 Dell Wireless 1501/1503/1701 Half Mini Card Driver + 4727 BCM1503HMGIPAD_NT61 Dell Wireless 1501/1503/1701 Half Mini Card Driver (used google chrome to download file) 4728 7175144f 01 53343 BCM53343 16P 1G (PHY) 5365 BCM5365P Sentry5 PCI to SB Bridge @@ -6801,6 +6865,15 @@ 8415 BCM53415 160Gbps L2+ Ethernet Switch 8416 BCM53416 160Gbps L2+ Ethernet Switch 8418 BCM53418 160Gbps L2+ Ethernet Switch + 8433 BCM53433 L2+ Ethernet switch: 16P 1G + 8434 BCM53434 L2+ Ethernet switch: 24P 1G + 8442 BCM53442 L2+ Ethernet switch: 8P 1G + 4P 1G + 8443 BCM53443 L2+ Ethernet switch: 16P 1G + 4P 1G + 8444 BCM53444 L2+ Ethernet switch: 24P 1G + 4P 1G + 8446 BCM53446 L2+ Ethernet switch: 24P 1G +2P 1G/10G +2P 1G/10G + 8447 BCM53447 L2+ Ethernet switch: 24P 1G +2P 1G/10G +2P 1G/10G + 8448 BCM53448 L2+ Ethernet switch: 8P 1G + 8P 1G/2.5G + 4P 10G + 8449 BCM53449 L2+ Ethernet switch: 16P 1G + 8P 1G/2.5G + 4P 10G + 2P 20G 9867 900000000 900000000 9876 Texas Instruments PCI GemCore based SmartCard cont 0x14E4 A8D6 BCM6368 Broadcom 802.11n WLAN chip @@ -6810,6 +6883,9 @@ B064 BCM56064 160Gbps L2+ Ethernet Switch B150 BCM56150 Hurricane2 (Lightly Managed) 24P 1G +4P 1G/10G (PHY) b152 BCM56152 24P 1G (PHY) + B160 BCM56160 L2+ switch: 24P 1G +2P 1G/10G +2P 1G/10G + B161 BCM56161 L2+ Ethernet switch: 24P 1G +2P 1G/10G +2P 1G/10G + B162 BCM56162 L2+ Ethernet switch: 24P 1G +4P 1G B340 BCM56340 48-port multi-layer switch with embedded CPU B450 BCM56450 100G Multi-layer Ethernet Switch B640 BCM56640 260Gbps Extensible Switch with 100GE @@ -6827,14 +6903,14 @@ 16BE CardReader_Broadcom 1.0.0.222_W7x86_A 14ED Datakinetics Ltd 14EF Carry Computer Eng. Co Ltd -14F1 APOSTOLOS +14F1 Conexant 0F00 cx11252-11 HSF Generic Modem 0F30 0x14F1 0x14F1 1031 332 dfd 1033 RH56D RH56D-PCI 1033a RH56D RH56D-PCI 1035 R6795-11 RH56D/SP-PCI, R6795-11, E416921/1, 0336 Mexico - 1036 Conexant RH56D/SP-PCI unknown + 1036 Conexant RH56D/SP-PCI 1056 105614f1 subsys 1059 DI15630-5, DI5631, DI5633 SmartHCF 10B4 Conextant HFC All Conextant HFC Modems (PCI) @@ -6874,7 +6950,7 @@ 5066 Cx20561 HDAUDIO\Func_01&VEN_14F1&DEV_5069&SUBSYS_17AA214C&REV_1003 5069 20585 conexant 20585 smartAudio HD 506C 0x506C Conexant High Definition Audio - 506E 001 Conexant 20672 SmartAudio HD + 506E CX20672-21Z Conexant High-Definition Audio CX20672-21Z 50A1 CX20641/CX20651 Conexant HD Audio 50A2 Conexant CX20642 Conexant HD Audio 5B7A Belived to be a CX23416 Single-Chip MPEG-2 Encoder with Integrated Analog Video/Broadcast Audio Decoder @@ -6885,7 +6961,7 @@ 8811 CX2388x Audio Capture ike 8852 cx23885 Leadtek Winfast PxDVR3200 H (XC3028) 8880 CX23888 PCI Express Video and Broadcast Audio Decoder - 9876 PCI\VEN_14F1&DEV_2F20&SUBSYS_200C14F1&REV_00\4&CF8 f + 9876 PCI\VEN_14F1&DEV_2F20&SUBSYS_200C14F1&REV_00\4&CF8 Communication controller x27d8 A62516F3 INTEL IDT Audio 14F2 Mobility Electronics, Inc. 0001 Moselle Split Bridge @@ -6997,6 +7073,7 @@ 152C Macraigor Systems LLC 152D Quanta Computer Inc 2329 2338 J micron JM20329 + 2519 n/a JMicron Technology Corp. / JMicron USA Technology Corp 152E Melec Inc 2507 0 152F Philips - Crypto @@ -7219,7 +7296,7 @@ 0101 n2530a DX2+ FC-AL Adapter 0103 QX4 4 Port Fibre Channel Controller 0B01 SUBSYS_000015BC&REV_00 Agilen PCI-GPIB - 1200 n/a Agilent QX4 Fibre Channel Controller + 1200 0x15bc Agilent QX4 Fibre Channel Controller 2530 ??? HP Communications Port 2531 ??? HP Toptools Remote Control Adapter 2532 ??? HP Toptools Remote Control Adapter @@ -7486,7 +7563,7 @@ 167F iba AG 4634 FOB-IO Card 4C32 L2B PCI Board - 5344 SD \ VID_03 и OID_5344 и PID_SU01G и REV_8.0 FOB-SD Card + 5344 SD \ VID_03 Ã�¸ OID_5344 Ã�¸ PID_SU01G Ã�¸ REV_ FOB-SD Card 5443 FOB-TDC Card F0B1 ibaFOB-io-D ibaFOB-io-D F0B2 ibaFOB-2io-D ibaFOB-2io-D @@ -7508,7 +7585,7 @@ 168C Atheros Communications Inc. 001c AR5005GS pci\ven_10ac&dev_ooo 00027 E017105B Atheros AR5B95 Wireless LAN 802.11 a/b/g/n Controller - 00030 PCI\VEN_168C&DEV_0030&SUBSYS_3112168C&REV_01 TP-LINK 450Mbps Wireless N Adapter + 00030 PCI\VEN_168C&DEV_0030&SUBSYS_16A810CF&REV_01 TP-LINK 450Mbps Wireless N Adapter 0007 AR5007UG ROOT\MS_SSTPMINIPORT\0000 0011 11L/b/g Wireless LAN Mini PCI Adapter 11L/b/g Wireless LAN Mini PCI Adapter 0012 AR5211 PCI\VEN_1217&DEV_7130&SUBSYS_FF501179&REV_01 DELL Latitude C510 as mini-PCI board behind the larg @@ -7516,7 +7593,7 @@ 0019 AR5bmb5 802.11a Wireless Adapter 001A Atheros AR5005GS http://support1.toshiba-tro.de/tools/updates/atheros-wlan/atheros-wlan-xp-7702331.zip 001B AR5006X 802.11abg NIC - 001c VEN_14F1 DEV_2C96 + 001c AR5007EG Atheros AR5007EG Wireless Network Adapter 001C other AR5BXB63 Atheros AR5BXB63 WWAN Chip 001c_again AR5BXB61 AR5006EX AR5423a 001D TP-Link TL-WN350GD PCI\VEN_168C&DEV_002B&SUBSYS_E034105B&REV_01\4&124A40C8&0&00E1 @@ -7534,13 +7611,13 @@ 0034 DW1901 802.11a/b/g/n, BT4.0+HS 0036 AR956x Qualcomm Atheros AR956x Wireless Network Adapter 0037 AR1111 Atheros AR1111 WB-EG Wireless Network Adapter - 003e 1 1 + 003e QCA61x4 Wireless Network Adapter 007 AR5007UG Wireless Network Adapter 0280 0x002b PCI\VEN_168C&DEV_002B&SUBSYS_30AF185F 032 0x0280 Dell Wireless DW1703 802.11b/g/n, BT4.0 + HS 1014 AR9285 Atheros AR5212 802.11abg wireless Drivers 14F1 nForce6100-430 PCI\VEN_168C&DEV_001A&SUBSYS_04181468&REV_01\4&FCF0450&0&10A4 - 168C AREG9485WB- Qualcomm Atheros AR9485WB-EG Wireless Network Adapter + 168C AREG9485WB-0036 Qualcomm Atheros AR9485WB-EG Wireless Network Adapter 1a3b ar8132 802.11a/b/g/n Wireless PCI Adapte 3002 AR3011 Bluetooth 3.0 6666 AR5007UG Atheros AR5B95 Wireless LAN 802.11 a/b/g/n Controller @@ -7551,6 +7628,7 @@ 168E Hyundai MultiCAV Computer Co. Ltd. 168F KDS Innotech Corp. 1690 NetContinuum, Inc. + 0742 BCM2070 BRCM Bluetooth Controller BCM2070 1693 FERMA 0212 PLX PCI9054 EPONINE ESR-PCI Board 0213 Motorola MPC8245 EPONINE MTM120 PCI Board @@ -7597,7 +7675,7 @@ 170D SensoMotoric Instruments GmbH 170E San Valley Systems, Inc. 170F Cyberdyne Inc. -1710 Pelago Nutworks +1710 Pelago Networks 5812 5812 itech numeric small keyboard 9835 9825 2 serial, 1 LPT port PCI Card 1711 MyName Technologies, Inc. @@ -7626,6 +7704,7 @@ 0261 RV280 Sapphire Radeon 9250 - Secondary 7176 RV250 RADEON 9000 ATLANTIS PRO 7177 RV280 RADEON 9000 ATLANTIS PRO - Secondary + 71C6 RV530 ATI RADEON X1650 Series 7244 RV580 Sapphire ATI X1950 XT 7C12 RV280 RADEON 9200 ATLANTIS - Secondary 7C13 RV280 RADEON 9200 ATLANTIS @@ -7707,13 +7786,14 @@ 0601 RT2860T b/g/n Wlan 0701 RT2860T 802.11 bgn 0781 RT2790T/RT2860/RT2890/RT2700E Wireless 802.11 bgn PCI-e + 1234 802.11 wireless lan 1418 0x14FI 802.11b/g Wireless LAN 14F1 0x1814 PCI\VEN_168C&DEV_001A&SUBSYS_04181468&REV_01\4&FCF0450&0&10A4 201 25601814&REV_01 Ralink RT2500 Wireless Lan Card 3060 RT3060 Ralink corp. RT3060 Wireless 802.11n PCI adapter 3090 Ralink RT3090 Ralink RT3090 Wireless Lan Card with Bluetooth 3290 1010 802.11n Bluetooth 4.0 - 3298 -3298 Ralink Bluetooth + 3298 -3290 Ralink Bluetooth 3592 RT3592 Wireless LAN a/b/g/n plus Bluetooth 3.0 combo 5360 RT5360 http://www.wikidevi.com/wiki/D-Link_DWA-525_rev_A2 5390 ASUS X55VD VEN_1814&DEV_5390&SUBSYS_E054105B&REV00 802.11n Wireless Lan Card - Asus X55V - Win 7 64bit - Foxconn Wireless @@ -7773,8 +7853,8 @@ 1905 WIS Technology, Inc. 1910 Seaway Networks 0001 SW5000-NCA Seaway Network Content Accelerator -1912 usb 3.0 Renesas Electronics - 0014 YET-D720201-0014 usb3.0 renesas +1912 Renesas Electronics + 0014 YET-D720201-0014 Renesas/Nec uPD720201/720202 USB 3.0 Controller 0015 upd720202 nec 0015_ EC01-P Renesas Electronics USB 3.0 Host Controller 1931 Option NV @@ -7789,10 +7869,11 @@ 1063 AR8131 Atheros AR8131 PCI-E Gigabit Ethernet Controller 1073 AR8151 Atheros AR8151 1083 78161462 Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.20) - 1090 AR8162 Fast Ethernet + 1090 AR8162+ Fast Ethernet 1091 AR8161/8165 PCI-E Gigabit Ethernet Controller + 10a0 Atheros AR8172/8176/8178 Controller Ethernet Qualcomm Atheros AR8172/8176/8178 PCI-E Fast (NDIS 6.30) 168c Atheros L1 Gigabit Ethernet 10/100/1000 Base-T Controller - 1969 Atheros L1 Atheros AR815x/816x Ethernet Controller Driver + 1969 Atheros L3 Atheros AR815x/816x Ethernet Controller Driver 2048 Atheros L2 Fast Ethernet 10/100 Base-T Controller 2049 234543 der 2060 fd501179&rev-c1 AR8152 v1.1 Fast Ethernet @@ -7800,6 +7881,7 @@ 2062 FB501179 Qualcomm Atheros AR8152/8158 4747 1969 VEN_1969 9876 Atheros L2 Fast Ethernet 10/100 Base-T Controller + E091 Killer E2200 Killer E2200 Network Card R091 Killer E2200 Killer E2200 Network Card 1971 AGEIA Technologies, Inc. 0001 PCI\VEN_1971&DEV_0000&SUBSYS_0003105B&REV_00 AGEIA PhysX 100 Series PCI Express Card @@ -7871,6 +7953,7 @@ 7023 DEV_7023&REV_010 Etron USB 3.0 Extensible Host Controller 1B73 Fresco Logic Inc. 1000 1 PCI\VEN_1000&DEV_0020&SUBSYS_10301000&REV_01PCI\VEN + 1009 Unknown USB3.0 host controller 1100 n/a USB 3.0 eXtensibile Host controller 1B91 Averna 1BAD ReFLEX CES @@ -7891,7 +7974,7 @@ F103 .7D01 .driver 2646 Kingston Technology Co. 0001 12333 22323 - 2646 6.06000 22323 + 2646 6.06324 22323 270F ChainTek Computer Co. Ltd. 2EC1 Zenic Inc 3388 Hint Corp. @@ -7974,7 +8057,7 @@ 4348 wch.cn 1453 202204073 WCH353L 3253 32534348 SIE9835 PCI=>DUAL SERIAL - 5053 4348 3253 + 5053 4348 4980 7053 35255 PCI Serial Port 7173 ch350L CH35X 4680 UMAX Computer Corp. @@ -8091,6 +8174,7 @@ 5853 Citrix Systems, Inc. 0001 n/a Citrix XenServer PV SCSI Host Adapter 0002 n/a Citrix PV Bus Device + C000 N/A XenServer Device of Windows Update 6409 Logitec Corp. 6666 Decision Computer International Co. 0001 815 PCCOM4 @@ -8105,6 +8189,7 @@ 1040 VIA 82C259 rev 0 PCI\VEN_8086&DEV_0084&SUBSYS_13158086&REV_00 8086 Intel Corporation 27B8 82801GB/GR Intel(R) 82801GB/GR (ICH7 Family) LPC Interface Controller + 0004 0x05971028 IUSB3\ROOT 0008 Extended Express System Support Ctrlr 0011 0x108D Ethernet Controller 0042 Intel graphics Intel Q57/H55 Clarkdale (Onboard on D2912-A1x) @@ -8127,7 +8212,8 @@ 0111 82915 Intel Graphics Conroller 0116 intel core i3 Intel HD Graphics 3000 0123 0300 hardwareids - 0152 GT635 NVIDIA Graphics Driver Discrete GeForce GT635 2G Win8_Win7 64bit System + 0152 Intel HD Graphics 2500 3rd Generation Intel Core Processors with Intel HD Graphics 2500 + 0153 Intel® Dynamic Platform and Thermal Framework Driv Use the Link, choose Win7 64Bit -> Others -> Intel DPTF Driver -> Global. Then download, install and 0154 0x01548086 3rd Gen Core processor DRAM Controller (rev 09) 0162 Core I5, Core I7, Ivy Bridge Graphics embedded 0166 I3 Intel(R) HD Graphics 4000 @@ -8161,11 +8247,13 @@ 0374 80333 Address Translation Unit 0401 266E P040100 0402 ACPI x86-based PC HD Graphics 4200 + 0412 Intel HD Graphics 4600 ven_8086&dev_0412 0416 SUBSYS_197A103C Intel(R) HD Graphics 4600 - 0482 82375MB PCI-EISA Bridge (PCEB)hp dx 7300 microwave tower + 0482 82375MB PCI\VEN_8086&DEV_3B64&SUBSYS_20391B0A&REV_06 0483 82424TX/ZX CPU (i486) Bridge (Saturn) 0484 82378ZB/IB SIO ISA Bridge 0486 PCI\VEN_8086&DEV_1C22&SUBSYS_2AC2103C&REV_04 HP Pro 3400 XPx32/7x32 drivers + 04931028 0x1502 Intel 82579 Gigabit Network Card 04A3 82434bX/zX Mercury/Neptune Cache/DRAM Controller 0500 E8870 Processor Bus Controller 0501 E8870 Memory Controller @@ -8309,7 +8397,7 @@ 10c4 82562GT Intel 82562GT 10/100 Network Controller 10c4 82562EZ PLC Intel 82562GT 10/100 Network Controller 10c9 82576? 82576 Gigabit ET Dual Port Server Adapter - 10cd 82567 Intel gigabit Ethernet controller + 10cd 82567 Intel(R) 82567LF-2 Gigabit Network Connection 10CE 82567V-2 Intel 82567V-2 Gigabit Network Connection 10d3 82574L Intel® 82574L Gigabit Ethernet Controller 10d6 82575 82566 DM-2-gigabyte @@ -8330,6 +8418,7 @@ 1112 82815 Internal Graphics Device 1120 82815 Host-Hub Interface Bridge / DRAM Ctrlr 1121 82815 AGP Bridge + 112D 2200 pci simple controller 1130 82815/82815EM/EP Host-Hub Interface Bridge / DRAM Ctrlr 1131 82815/82815EM/EP AGP Bridge 1132 65416http://www.pcidatabase.com/update_device.php? Internal Graphics Device [810/815 chipset AGP] @@ -8360,9 +8449,10 @@ 123D 683053 Programmable Interrupt Device 123E 82466GX Integrated Hot-Plug Controller (IHPC) 123F 82466GX Integrated Hot-Plug Controller (IHPC) + 124 PCI\VEN_8086&DEV_9C22 24c6 1240 82752 AGP Graphics Accelerator 124B 293esd Mobile PCI-to-PCIsdsdsdI2) - 124B PCI\VEN_1106&DEV_3122 2815 + 124B PCI\VEN_8086&DEV_2E17&CC_070002 24c6 124C 9776 Mobile PCI-to-PCI Bridge (MPCI2) 1250 82430HX System Controller (TXC) 12D8 92XX SIGMATEL STAC 92XX C-Major HD Audio @@ -8387,7 +8477,7 @@ 1525 82567V-4 Intel 82567V-4 Gigabit Network Connection 1526 82576 Intel Gigabit ET2 Quad Port Server Adapter 1533 210 Intel I210 Gigabit Network Connection - 153A 330 Intel I217-LM Ethernet Connection + 153A USB\VID_0424&PID_2504&REV_0001 Intel I217-LM Ethernet Connection 153B I217-V Intel Gigabit Ethernet Controller I217-V 1559 0x8CBA Intel Ethernet I218-V 155a I218LM Gigabit Ethernet @@ -8406,6 +8496,7 @@ 1A30 82845G[GL/GV/GE/PE] Host-Hub Interface Bridge 1A31 82845[MP/MZ] AGP Bridge 1A38 5000P 5000 Series Chipset DMA Engine + 1A3E Z77 C216 Chipset - Platform controller hub 1c02 1C02 Intel(R) 6/C200 Series Chipset Family 6 Port SATA AHCI Controller 1c02_ 8086&dev_1c02 Intel(R) Desktop/Workstation/Server Express Chipset SATA AHCI Controller 1C03 Intel(R) Mobile Express Chipset SATA AHCI Controll Intel(R) CPT Chipset Family 6 Port SATA AHCI Controller @@ -8422,7 +8513,7 @@ 1c3a 161C103C Intel Management Engine Interface 1c3a. 161C103C Intel Management Engine Interface 1C3b 111 Series Chipset Family HECI Controller #2 - 1C3D Intel(R) 6 Series Series Chipset Family Intel(R) Active Management Technology - SOL + 1C3D Intel(R) 6 Series Series Chipset Family Intel(R) Active Management Technology - SOL | Intel Management Engine 7.1 Components Driver 1C49 FCD01179 04 1C4C Q65 Intel(R) Q65 Express Chipset Family LPC Interface Controller 1D3A X79 series chipset HECI Controller X79/C600 series chipset Management Engine Interface @@ -8432,7 +8523,7 @@ 1E03 PCI\CC_010601 Intel(R) 7 Series Chipset Family SATA AHCI Controller 1e08 Intel H77 Express Chipset 2 ports IDE Controller 1E10 C216 Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port - 1E12 c4 rev + 1E12 1E12 Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 1E16 C216 Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 1E20 1E20 High Definition Audio Controller 1E22 Intel(R) 7 SeriesC216 Chipset Family SMBus Host Co SM-Bus Controller of the Intel Z77 Chipset @@ -8442,15 +8533,20 @@ 1E3A PCI\VEN_8086&DEV_1E3A&SUBSYS Intel Management Engine Interface (MEI) 1E3A_ C216 8555555555555999999999999999999999999999999999999999999999999999999900000000000000000001222222222222 1E3A__ Z77 C216 Chipset - Platform controller hub - 1E3D 833810F7 Intel(R) AMT LMS_SOL for AMT 8.xx + 1E3D 602317 Intel(R) AMT LMS_SOL for AMT 8.xx 1E59 140889 Intel(R) HM76 Express Chipset LPC Controller + 1f41 Avoton SoC Intel Corporation Ethernet Connection I354 2000 CA 95054 505943621 2014 0x18C9 Framegrabber 2048 Atheros L2 Fast Ethernet 10/100 Base-T Controller 2124 27DA PRO/100 VE Network Connection 2125 82801G AC97 Audio Controller. website to download - http://www.intel.com/design/chipsets/manuals/29802801.p 2222 82801 Intel Management Interface + 2250 5110P Intel(R) Xeon Phi(TM) Coprocessor 2255 810D1043 02\3 + 225C SE10 Intel(R) Xeon Phi(TM) Coprocessor + 225D 3120 Intel(R) Xeon Phi(TM) Coprocessor + 225E 31S1P Intel(R) Xeon Phi(TM) Coprocessor 2406 82801 / ? AC97 Modem Controller / PCI Modem 2410 82801AA LPC Interface 2411 82801AA IDE Controller (UltraATA/66) @@ -8644,33 +8740,37 @@ 27 82801G ICH7 Family 2770 82945G/GZ/P/PL Intel(R) 945G/GZ/GC/P/PL Processor to I/O Controller 2771 82945G/GZ/P/PL Host to PCI Express Bridge - 2772 82945G/GZ Chipset Intel® 82945G Express + 2772 82945G/GZ PCI\VEN_8086&DEV_2772&SUBSYS_2A57103C&REV_02\3&11583659&0&10 2776 82945G INTEL(R) 82945G EXPRESS FAMILY 277C 82975X Intel 975X Express Chipset 2780 82915G Graphics device 2782 82915G Graphics device: 82915G/GV/910GL Express Chipset Family 2792 038000 Mobile Intel(R) 915GM/GMS/, 910GML Express Chipset Family 2794 945 Mobile chipset - 27A0 874079 i945GM Express Chipset + 27A0 874079 Mobile Intel(R) 945GM/GU/PM/GMS/940GML/943GML and Intel(R) 945GT Express Processor to DRAM Controlle 27A1 Intel 82945PM Memory Controller Intel Corporation Mobile 945PM Express PCI Express Root Port 27A2 HPQ0006 Mobile Intel(R) 945 Express Chipset Family 27A6 945GM Intel 945GM/950 + 27AC 27AC Mobile Intel(R) 945GME Express Process to DRAM Controller + 27AE 27AE Mobile Intel(R) 945 Express Chipset Family 27B8 945GL Intel(R) ICH7 Family LPC Interface Controller + 27B9 ICH7 Intel(R) ICH7M/U LPC Interface Controller 27BC NM10 NM10 Family LPC Interface Controller 27c0 82801GB/GR/GH Intel(R) N10/ICH7 Family Serial ATA Storage Controller 27C1 82801GB/GR/GH AHCI Controller 27c3 82801GR/GH Raid Controller - 27c4 82801GBM/GHM SATA IDE Controller - 27C5 82801GBM/GHM AHCI Controller + 27c4 82801GBM/GHM Intel(R) ICH7-M Family SATA Controller + 27C5 82801GBM/GHM Intel(R) ICH7/M/MDH SATA AHCI Controller 27C6 82801GHM Raid Controller 27c8 946 Intel(R) N10/ICH7 Family USB Universal Host Controller 27c9 USB UHCI Controller Intel(R) N10/ICH7 Family USB Universal Host Controller - 27CA ICH7 'Intel(R) N10/ICH7 Family USB Universal Host Controller - 27C9' + 27CA ICH7 Intel(R) N10/ICH7 Family USB Universal Host Controller 27CB ICH7 Intel(R) N10/ICH7 Family USB Universal Host Controller 27CC 82801G Intel(R) N10/ICH7 Family USB2 Enhanced Host Controller 27D0 82801G Intel(R) 82801G (ICH7 Family) PCI Express Root Port 27D2 82801G Intel(R) 82801G (ICH7 Family) PCI Express Root Port - 27d8 FF311179 Realtek High Definition Audio Driver FF311179 thequetta.com + 27D4 ICH7 Intel(R) N10/ICH7 Family PCI Express Root Port + 27d8 27D8 UAA Bus Driver for HD Audio 27d8xzx PCI\VEN_8086&DEV_2485&SUBSYS_AD021458&REV_02 Microsoft UAA Bus HD Audio 27D9 A62516F3 IDT High Definition Audio Driver 27DA 82801G Intel(R) N10/ICH7 Family SMBus Controller @@ -8691,7 +8791,7 @@ 2824 82801HB ICH8 AHCI Controller 2825 82801IIH Intel Q35 2828 82801HBM/HEM SATA IDE Controller - 2829 82801HBM AHCI Controller + 2829 82801HBM Intel(R) ICH8M SATA AHCI Controller 282A ICH8M/9M/ICH10M/i5M Raid Controller 2830 2830 Intel(R) ICH8 Family USB Universal Host Controller 2831 2831 Intel(R) ICH8 Family USB Universal Host Controller @@ -8699,13 +8799,16 @@ 2834 2834 Intel(R) ICH8 Family USB Universal Host Controller 2835 2835 Intel(R) ICH8 Family USB Universal Host Controller 2836 2836 Intel(R) ICH8 Family USB2 Enhanced Host Controller - 283A 81EC1043 (?) ICH8 Enhanced USB2 Enhanced Host Controller + 283A 81EC1043 (?) ICH8 Family USB2 Enhanced Host Controller 283E PCI\VEN_8086&DEV_283E&SUBSYS_20A917AA&REV_03\3&B1B Intel(R) ICH8 Family SMBus Controller 283F 283F Intel(R) ICH8 Family PCI Express Root Port 284 888 Microsoft UAA bus for HD audio + 2841 ICH8 Intel(R) ICH8 Family PCI Express Root Port + 2843 ICH8 Intel(R) ICH8 Family PCI Express Root Port + 2845 ICH8 Intel(R) ICH8 Family PCI Express Root Port 2847 2847 Intel(R) ICH8 Family PCI Express Root Port 284B 888 Microsoft UAA bus for HD audio - 2850 82801HBM/HEM PATA Controller + 2850 82801HBM/HEM Intel(R) ICH8M Ultra ATA Storage Controller 2880 0000000 Intel Display Audio 2888 Q945 Q945 2914 ICH9D0 LPC bridge of ICH9 @@ -8738,6 +8841,7 @@ 2940 ICH9 Intel(R) ICH9 Family PCI Express Root Port 2942 ICH9 Intel(R) ICH9 Family PCI Express Root Port 2944 ICH9 Intel(R) ICH9 Family PCI Express Root Port + 2946 ICH9 Intel(R) ICH9 Family PCI Express Root Port 2948 ICH9 Intel(R) ICH9 Family PCI Express Root Port 294C 82566DC-2 Intel(R) 82566DC-2 Gigabit Network Connection 2972 82946GZ Onboard Video Device for 82946GZ chips @@ -8751,9 +8855,10 @@ 29a0 ?(82P965) Intel P965/G965 Processor to I/O Controller 29a1 ?(82Q965, 82G965, 82P965) Intel P965/G965 PCI Express Root Port 29A2 Intel 82G965 Graphics and Memory Controller Hub (G Intel 82G965 Graphics and Memory Controller Hub (GMCH) - 29A4 86881 MRMgRH text_attr=Fs->border_attr=LTGRAY<<4+BLUE; Fs->border_src=BDS_CONST; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L + -WIF_SELF_IP_R-WIG_DBL_CLICK; doc=DocPut; doc->flags|=DOCF_FORM; DocCursor(FALSE,doc); @@ -32,7 +33,8 @@ U0 TourPutTask() } DocUnlock(doc); if (tour_okay_pressed) { - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L + -WIF_SELF_IP_R-WIG_DBL_CLICK; if (sys_focus_task==Fs) WinRefocus; } else { @@ -85,14 +87,14 @@ public I64 PopUpTourPart() "$$CM+LX,4,4$$$$BT,\"Part 11: Test Suite\",LE=11$$" "$$CM+LX,4,4$$$$BT,\"Done\",LE=DOCM_CANCEL$$\n"); doc->flags|=DOCF_FORM; - i=PopUpPrint("WinMax;DocMenuDo(0x%X,0);",doc); + i=PopUpPrint("WinMax;DocMenu(0x%X,0);",doc); DocDel(doc); return i; } U0 TourMenu() { - U8 buf[128]; + U8 buf[STR_LEN]; I64 i; tour_task=Fs; tour_okay_pressed=TRUE; diff --git a/Misc/Tour/Tour1.AUT b/Misc/Tour/Tour1.AUT index e9c64d1..16dab0e 100644 --- a/Misc/Tour/Tour1.AUT +++ b/Misc/Tour/Tour1.AUT @@ -49,7 +49,8 @@ TourPut( "The $$RED$$RED$$FG$$ filenames listed are file links. Left-clicking will " "edit/view them. Right-clicking or pressing $$GREEN$$$$FG$$ when the " "cursor is on top will bring-up a menu of options.\n\n" -"The $$LTBLUE$$BLUE$$FG$$ underline entries \"$$LTBLUE$$.$$FG$$\" and \"$$LTBLUE$$..$$FG$$\"" +"The $$LTBLUE$$BLUE$$FG$$ underline entries \"$$LTBLUE$$.$$FG$$\" " +"and \"$$LTBLUE$$..$$FG$$\"" "are macros and will change directories.\n",TRUE); TourPut( diff --git a/Misc/Tour/Tour2.AUT b/Misc/Tour/Tour2.AUT index e68e5ce..e43e1dd 100644 --- a/Misc/Tour/Tour2.AUT +++ b/Misc/Tour/Tour2.AUT @@ -92,7 +92,7 @@ TourPut("Press $$GREEN$$$$FG$$ to abort the editor.\n"); AFUntilChar(CH_ESC,CH_SHIFT_ESC); TourPut( -"Explore the $$RED$$$$TX+L+PU+UL,\"DemoIndex\",A=\"FI:::/Doc/DemoIndex.TXT\"$$$$FG$$. " +"Explore the $$RED$$$TX+L+PU+UL,"DemoIndex",A="FI:::/Doc/DemoIndex.TXT"$$$FG$$. " "You'll find it on your menu. It's arranged by difficulty. " "Hit $$GREEN$$$$FG$$ on a demo index listing " "and $$GREEN$$$$FG$$ to run from the editor.\n",TRUE);