TempleOSCDV4.03.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:47:01 +02:00
1 parent 1541d7328d
commit 0f1a4a5d65
115 files changed
+5618 -4863

No files matched your search

Binary file not shown.
+9 -7
View File
@@ -67,26 +67,28 @@ public Bool Copy(U8 *src_files_find_mask,U8 *dst_files_find_mask=".")
CDirContext *dirc;
CDirEntry *tempde,*tempde1;
U8 *st;
if (!(tempde=FilesFind(src_files_find_mask,FUF_CLUSTER_ORDER)))
if (!(tempde1=FilesFind(src_files_find_mask,FUF_CLUSTER_ORDER)))
return FALSE;
if (IsDir(dst_files_find_mask)) {
if (dirc=DirContextNew(dst_files_find_mask,TRUE)) {
tempde=tempde1;
while (tempde) {
tempde1=tempde->next;
if (!(tempde->attr & RS_ATTR_DIR)) {
st=FileNameAbs(tempde->name);
if (!CopySingle(tempde->full_name,st))
result=FALSE;
Free(st);
}
DirEntryDel(tempde);
tempde=tempde1;
tempde=tempde->next;
}
DirContextDel(dirc);
}
DirTreeDel(tempde1);
return result;
} else
} else {
DirTreeDel(tempde1);
return CopySingle(src_files_find_mask,dst_files_find_mask);
}
}
public Bool Move(U8 *f1,U8 *f2)
@@ -206,8 +208,7 @@ U0 TouchFile(U8 *filename,U8 *attr,CDate cdt=MIN_I64)
{
CDrv *dv=Let2Drv(*filename);
CDirEntry de;
U8 *cur_dir=StrNew(filename),
buf[STR_LEN];
U8 *cur_dir=StrNew(filename),buf[STR_LEN];
if (FileFind(filename,&de,FUF_JUST_FILES)) {
Free(de.full_name);
if (!StrCmp(attr,"+?"))
@@ -226,6 +227,7 @@ U0 TouchFile(U8 *filename,U8 *attr,CDate cdt=MIN_I64)
}
} else
PrintErr("File not found.\n");
Free(cur_dir);
}
public U0 Touch(U8 *files_find_mask="*",U8 *attr="+?",
U8 *fu_flags=NULL,CDate cdt=MIN_I64)
+11 -11
View File
@@ -35,7 +35,7 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,
ptr=*ptr;
if (ChkPtr(ptr)) {
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM-P+RD,64,A=\"%%40ts\"$$\n");
doc_e=DocPrint(doc,"$$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$$\n");
doc_e->data=ptr;
DocDataFmt(doc,doc_e);
} else
@@ -46,13 +46,13 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,
if (tempc2->raw_type==RT_I8 || tempc2->raw_type==RT_U8) {
if (j==1) {
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=U8,A=\"%%c\"$$\n");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U8,A=\"%%c\"$$\n");
doc_e->data=ptr;
} else
DocPrint(doc,"%c\n",*ptr(U8 *));
} else {
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM-P+RD,64,A=\"%%40ts\"$$\n");
doc_e=DocPrint(doc,"$$DA-TRM-P+RD,LEN=64,A=\"%%40ts\"$$\n");
doc_e->data=ptr;
DocDataFmt(doc,doc_e);
} else
@@ -66,56 +66,56 @@ Bool ClassRep2(CDoc *doc,U8 *_d,U8 *class_name=lastclass,
break;
case RT_I8:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=I8,A=\"%%02X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I8,A=\"%%02X\"$$ ");
doc_e->data=ptr(I8 *)++;
} else
DocPrint(doc,"%02X ",*ptr(I8 *)++);
break;
case RT_U8:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=U8,A=\"%%02X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U8,A=\"%%02X\"$$ ");
doc_e->data=ptr(U8 *)++;
} else
DocPrint(doc,"%02X ",*ptr(U8 *)++);
break;
case RT_I16:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=I16,A=\"%%04X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I16,A=\"%%04X\"$$ ");
doc_e->data=ptr(I16 *)++;
} else
DocPrint(doc,"%04X ",*ptr(I16 *)++);
break;
case RT_U16:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=U16,A=\"%%04X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U16,A=\"%%04X\"$$ ");
doc_e->data=ptr(U16 *)++;
} else
DocPrint(doc,"%04X ",*ptr(U16 *)++);
break;
case RT_I32:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=I32,A=\"%%08X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I32,A=\"%%08X\"$$ ");
doc_e->data=ptr(I32 *)++;
} else
DocPrint(doc,"%08X ",*ptr(I32 *)++);
break;
case RT_U32:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=U32,A=\"%%08X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=U32,A=\"%%08X\"$$ ");
doc_e->data=ptr(U32 *)++;
} else
DocPrint(doc,"%08X ",*ptr(U32 *)++);
break;
case RT_F64:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=F64,A=\"%%16g\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=F64,A=\"%%16g\"$$ ");
doc_e->data=ptr(F64 *)++;
} else
DocPrint(doc,"%16g ",*ptr(I64 *)++);
break;
default:
if (dynamic) {
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,A=\"%%016X\"$$ ");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,A=\"%%016X\"$$ ");
doc_e->data=ptr(I64 *)++;
} else
DocPrint(doc,"%016X ",*ptr(I64 *)++);
+2 -2
View File
@@ -11,8 +11,8 @@ U0 LoadDocDefines()
//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","118,999");
DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","80,991");
$ID,4$DefinePrint("DD_TEMPLEOS_LOC","119,687");
DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","80,688");
$ID,-4$
DefinePrint("DD_KERNEL","%08X",bfh);
bfh(I64)+=bfh->file_size-1;
+4 -2
View File
@@ -16,7 +16,7 @@ extern U0 DocBMP(CDoc *doc=NULL,U8 *filename,
extern U0 DocBinDel(CDoc *doc,CDocBin *b);
extern U0 DocBinsValidate(CDoc *doc);
extern U0 DocBottom(CDoc *doc=NULL);
extern U0 DocCenter(CDoc *doc=NULL,I64 recalc=DOC_RECALC);
extern U0 DocCenter(CDoc *doc=NULL,I64 recalc=RECALCt_NORMAL);
extern U0 DocClear(CDoc *doc=NULL);
extern Bool DocCursor(Bool show=OFF,CDoc *doc=NULL);
extern U0 DocD(U8 *buf,I64 cnt=0x80);
@@ -25,9 +25,11 @@ extern U0 DocDel(CDoc *doc);
extern CDoc *DocDisplay(CTask *task=NULL);
extern U0 DocDump(CDoc *doc,I64 uS_delay=0);
extern CDocEntry *DocEntryCopy(CDoc *doc,CDocEntry *doc_e);
extern U0 DocEntryDel(CDoc *doc,CDocEntry *doc_e);
extern Bool DocForm(U8 *_d,U8 *class_name=lastclass,
I64 dof_flags=0,U8 *header=NULL,U8 *footer=NULL);
extern U0 DocHelpIndex(CDoc *doc,U8 *index);
extern Bool DocHighlightCursor(Bool show=OFF,CDoc *doc=NULL);
extern U0 DocInsDoc(CDoc *doc,CDoc *doc2);
extern U0 DocInsEntry(CDoc *doc,CDocEntry *doc_e);
extern Bool DocLock(CDoc *doc);
@@ -36,7 +38,7 @@ extern CDoc *DocNew(U8 *filename=NULL,CTask *task=NULL);
extern CDocEntry *DocPrint(CDoc *doc,U8 *src,...);
extern CDoc *DocPut(CTask *task=NULL);
extern CDoc *DocRead(U8 *name=NULL,I64 flags=0);
extern Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC);
extern Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL);
extern U0 DocRst(CDoc *doc,Bool is_old);
extern CDocEntry *DocSprite(CDoc *doc,U8 *elems,U8 *fmt=NULL);
extern U0 DocTop(CDoc *doc=NULL);
+1 -1
View File
@@ -96,7 +96,7 @@ public Bool IsInHeapCtrl(U8 *a,CHeapCtrl *hc,Bool lock=TRUE)
PAUSE
m=hc->next_mem_blk;
while (m!=&hc->next_mem_blk) {
if (a>=m && a<m(U8 *)+m->pages*MEM_PAGE_SIZE) {
if (a>=m && a<m(U8 *)+m->pages<<MEM_PAGE_BITS) {
if (lock)
LBtr(&hc->locked_flags,HClf_LOCKED);
POPFD
+2
View File
@@ -129,6 +129,7 @@ public U0 ACInit(U8 *mask=NULL)
Bool start_flag;
CBlkDev *bd=Let2BlkDev;
LBtr(&sys_run_level,RLf_AUTO_COMPLETE);
AutoComplete;
while (LBts(&ac.flags,ACf_INIT_IN_PROGRESS))
Yield;
@@ -155,6 +156,7 @@ public U0 ACInit(U8 *mask=NULL)
ACDWordsLoad;
LBtr(&ac.flags,ACf_INIT_IN_PROGRESS);
LBts(&sys_run_level,RLf_AUTO_COMPLETE);
AutoComplete(ON);
}
+10 -8
View File
@@ -263,16 +263,19 @@ public Bool AutoComplete(Bool val=OFF)
while (Bt(&ac.flags,ACf_INIT_IN_PROGRESS))
Sleep(10);
if (val) {
if (TaskValidate(ac.task))
old_autocomplete=TRUE;
else {
ac.task=Spawn(&ACTask,NULL,"AutoComplete");
TaskWait(ac.task);
if (Bt(&sys_run_level,RLf_AUTO_COMPLETE)) {
if (TaskValidate(ac.task))
old_autocomplete=TRUE;
else {
ac.task=Spawn(&ACTask,NULL,"AutoComplete");
TaskWait(ac.task);
}
WinToTop(ac.task);
}
WinToTop(ac.task);
} else {
if (TaskValidate(ac.task)) {
old_autocomplete=TRUE;
if (Bt(&sys_run_level,RLf_AUTO_COMPLETE))
old_autocomplete=TRUE;
Kill(ac.task);
while (TaskValidate(ac.task))
Yield;
@@ -280,4 +283,3 @@ public Bool AutoComplete(Bool val=OFF)
}
return old_autocomplete;
}
+56 -50
View File
@@ -35,7 +35,7 @@ public U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64)
if (cc>doc_ce->min_col) {
if (IsEditableText(doc_ce) && cc<doc_ce->max_col) {
dst=doc_ce->tag+cc;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ce->max_col=cc;
QueIns(doc_ne,doc_ce);
@@ -43,7 +43,7 @@ public U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64)
cc--;
if (IsEditableText(doc_ce) && cc>doc_ce->min_col) {
dst=doc_ce->tag+cc;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ce->max_col=cc;
QueIns(doc_ne,doc_ce);
@@ -68,7 +68,7 @@ public U0 EdCursorLeft(CDoc *doc,I64 sc=MIN_I64)
cc=doc_ce->max_col-1;
if (IsEditableText(doc_ce) && cc>doc_ce->min_col) {
dst=doc_ce->tag+cc;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ce->max_col=cc;
QueIns(doc_ne,doc_ce);
@@ -112,7 +112,7 @@ public U0 EdCursorRight(CDoc *doc,I64 sc=MIN_I64)
if (cc<doc_ce->max_col) {
if (IsEditableText(doc_ce) && cc>doc_ce->min_col) {
dst=doc_ce->tag+cc;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ce->max_col=cc;
QueIns(doc_ne,doc_ce);
@@ -126,7 +126,7 @@ public U0 EdCursorRight(CDoc *doc,I64 sc=MIN_I64)
BEqu(&doc_ce->type,DOCEt_SELECTED,sc&SCF_SHIFT);
if (IsEditableText(doc_ce) && cc<doc_ce->max_col) {
dst=doc_ce->tag+cc;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ne->type=DOCT_TEXT | old_color & -0x100;
doc_ne->de_flags=old_de_flags|doldoc.dft_de_flags[DOCT_TEXT];
@@ -188,7 +188,7 @@ public U0 EdLineUp(CDoc *doc,I64 sc=MIN_I64)
if (IsEditableText(doc_ce)) {
if (doc_ce->min_col<doc->cur_col<doc_ce->max_col-1) {
dst=doc_ce->tag+doc->cur_col;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ne->x=doc_ce->x+doc->cur_col;
doc_ce->max_col=doc->cur_col;
@@ -255,7 +255,7 @@ public U0 EdLineUp(CDoc *doc,I64 sc=MIN_I64)
if (IsEditableText(doc_ce) && doc_ce->x<x) {
if (doc->cur_col<doc_ce->max_col-1) {
dst=doc_ce->tag+doc->cur_col;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
if (sc>=0) {
if (sc&SCF_SHIFT)
@@ -301,7 +301,7 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64)
if (IsEditableText(doc_ce)) {
if (doc->cur_col>doc_ce->min_col && doc->cur_col<doc_ce->max_col-1) {
dst=doc_ce->tag+doc->cur_col;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
if (sc>=0) {
if (sc&SCF_SHIFT)
@@ -362,7 +362,7 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64)
doc->cur_col=doc_ce->min_col;
if (IsEditableText(doc_ce)&&doc_ce->min_col<doc->cur_col<doc_ce->max_col-1) {
dst=doc_ce->tag+doc->cur_col;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ne->type=DOCT_TEXT | old_color & -0x100;
doc_ne->de_flags=old_de_flags|doldoc.dft_de_flags[DOCT_TEXT];
@@ -385,7 +385,7 @@ public U0 EdLineDown(CDoc *doc,I64 sc=MIN_I64)
DocUnlock(doc);
}
U0 EdDelChar(CDoc *doc)
U0 EdCharDel(CDoc *doc)
{
Bool unlock=DocLock(doc);
CDocEntry *doc_ce=doc->cur_entry;
@@ -435,10 +435,10 @@ U0 ChkDollarBufSize(CDoc *doc)
}
}
U0 EdInsChar(I64 ch,I64 sc,CDoc *doc)
U0 EdCharIns(I64 ch,I64 sc,CDoc *doc)
{
Bool unlock=DocLock(doc);
U8 *b,*src,*dst;
U8 *st,*src,*dst;
CDocEntry *doc_ce=doc->cur_entry,*doc_ne;
I64 i,j,m,y=doc_ce->y;
@@ -470,7 +470,7 @@ U0 EdInsChar(I64 ch,I64 sc,CDoc *doc)
}
if (ch=='\r') goto ic_done;
ic_cont:
ic_cont:
if ((ch==CH_SPACE || ch=='\n') &&
!(sc & (SCF_CTRL|SCF_SHIFT)) &&
doc_ce->de_flags &
@@ -483,15 +483,16 @@ ic_cont:
goto ic_done;
}
if (doc_ce->type_u8==DOCT_HEX_ED) {
if (doc_ce->de_flags & DOCEF_DATA_IS_PTR)
b=doc_ce->data;
if (doc_ce->de_flags&DOCEF_DEREF_DATA &&
!(doc_ce->de_flags&DOCEF_REMALLOC_DATA))
st=doc_ce->data;
else
b=&doc_ce->data;
st=&doc_ce->data;
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)
b[j-doc_ce->hex_ed_width<<1+m]=ch;
st[j-doc_ce->hex_ed_width<<1+m]=ch;
else {
ch=ToUpper(ch)-'0';
if (ch>9) {
@@ -501,16 +502,16 @@ ic_cont:
}
m=j>>1+m;
if (j & 1)
b[m]=b[m] & 0xF0| ch;
st[m]=st[m] & 0xF0| ch;
else
b[m]=b[m] & 0xF | ch<<4;
st[m]=st[m] & 0xF | ch<<4;
}
doc->cur_col++;
goto ic_done;
}
if (doc->flags & DOCF_OVERSTRIKE) {
if (Bt(chars_bmp_displayable,ch)) {
ic_overstrike_char:
ic_overstrike:
if (IsEditableText(doc_ce)) {
if (doc->cur_col<doc_ce->max_col) {
if (doc_ce->tag[doc->cur_col]) {
@@ -521,7 +522,7 @@ ic_overstrike_char:
doc_ce=doc_ce->next;
doc->cur_entry=doc_ce;
doc->cur_col=doc_ce->min_col;
goto ic_overstrike_char;
goto ic_overstrike;
}
} else if (doc_ce->type_u8==DOCT_DATA) {
if (doc_ce->de_flags & DOCEF_HAS_TERMINATOR) {
@@ -532,15 +533,13 @@ ic_overstrike_char:
doc_ce->tag[doc->cur_col]='_';
doc_ce->tag[doc->cur_col+1]=0;
}
}
} else if (doc_ce->de_flags & DOCEF_REMALLOC_DATA)
goto ic_not_overstrike;
} else if (doc_ce->tag[doc->cur_col])
doc_ce->tag[doc->cur_col++]=ch;
goto ic_done;
}
b=MAlloc(2,doc->mem_task);
*b=ch;
b[1]=0;
doc_ne=DocEntryNew(doc,doc_ce,b);
doc_ne=DocEntryNewTag(doc,doc_ce,&ch);
doc_ne->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
QueIns(doc_ne,doc_ce->last);
@@ -554,14 +553,14 @@ ic_overstrike_char:
}
goto ic_done;
}
ic_not_overstrike:
if (ch=='\n') {
doc_ne=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
if (sc&SCF_CTRL && !(sc&SCF_SHIFT)) {
doc_ne->type=DOCT_PAGE_BREAK | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_PAGE_BREAK];
doc_ne=DocEntryNewBase(doc,
DOCT_PAGE_BREAK|doc->settings_root.dft_text_attr<<8);
} else {
doc_ne->type=DOCT_NEW_LINE | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_NEW_LINE];
doc_ne=DocEntryNewBase(doc,
DOCT_NEW_LINE|doc->settings_root.dft_text_attr<<8);
}
DocInsEntry(doc,doc_ne);
} else if (ch=='\t') {
@@ -575,26 +574,36 @@ ic_form_tab:
DocFormFwd(doc);
goto ic_done;
} else {
doc_ne=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_ne->type=DOCT_TAB | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TAB];
doc_ne=DocEntryNewBase(doc,DOCT_TAB|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_ne);
}
} else {
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)
i++;
if (i>doc_ce->max_col) {
b=doc_ce->tag;
doc_ce->max_col++;
for (i=doc_ce->max_col;i>doc->cur_col;i--)
b[i]=b[i-1];
b[doc->cur_col++]=ch;
while (TRUE) {
i=doc_ce->len+doc_ce->min_col;
if (doc_ce->de_flags & DOCEF_HAS_TERMINATOR)
i++;
if (doc_ce->max_col<i) {
st=doc_ce->tag;
doc_ce->max_col++;
for (i=doc_ce->max_col;i>doc->cur_col;i--)
st[i]=st[i-1];
st[doc->cur_col++]=ch;
break;
} else if (doc_ce->de_flags & DOCEF_REMALLOC_DATA) {
st=MAlloc(doc_ce->max_col+8,doc->mem_task);
MemCpy(st,doc_ce->tag,doc_ce->max_col+1);
Free(doc_ce->tag);
doc_ce->tag=st;
doc_ce->len=MSize(st)-doc_ce->min_col-2; //See $LK,"DataTagWidth",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$
Free(doc_ce->data);
doc_ce->data=MAlloc(doc_ce->len+2,doc->mem_task);
} else
break;
}
} else if (IsEditableText(doc_ce)) {
dst=b=MAlloc(doc_ce->max_col+2,doc->mem_task);
dst=st=MAlloc(doc_ce->max_col+2,doc->mem_task);
src=doc_ce->tag;
i=doc->cur_col;
while (i-->0)
@@ -602,14 +611,11 @@ ic_form_tab:
*dst++=ch;
while (*dst++=*src++);
Free(doc_ce->tag);
doc_ce->tag=b;
doc_ce->tag=st;
doc_ce->max_col++;
doc->cur_col++;
} else {
b=MAlloc(2,doc->mem_task);
*b=ch;
b[1]=0;
doc_ne=DocEntryNew(doc,doc_ce,b);
doc_ne=DocEntryNewTag(doc,doc_ce,&ch);
doc_ne->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
doc_ne->x=doc_ce->x+1;
@@ -627,7 +633,7 @@ ic_done:
DocUnlock(doc);
}
U0 EdDelLine(CDoc *doc)
U0 EdLineDel(CDoc *doc)
{
CDocEntry *doc_ce=doc->cur_entry,*doc_ce2;
I64 y;
+8 -14
View File
@@ -272,7 +272,7 @@ U0 EdRemFunLeadingSpace(CDoc *doc)
do {
doc_e2=doc_e->next;
if (doc_e!=doc && doc_e!=doc->cur_entry &&
!(doc_e->de_flags&(DOCEG1_DONT_EDIT-DOCEF_SCROLLING_X)))
!(doc_e->de_flags&(DOCEG_DONT_EDIT-DOCEF_SCROLLING_X)))
switch (doc_e->type_u8) {
case DOCT_TEXT:
ptr=doc_e->tag;
@@ -511,7 +511,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE)
end_y=start_y+indent->total_cnt;
while (start_y<=doc_e->y<end_y) {
if (doc_e!=doc && doc_e!=doc->cur_entry &&
!(doc_e->de_flags&(DOCEG1_DONT_EDIT-DOCEF_SCROLLING_X))) {
!(doc_e->de_flags&(DOCEG_DONT_EDIT-DOCEF_SCROLLING_X))) {
if (doc_e->type_u8==DOCT_NEW_LINE||
doc_e->type_u8==DOCT_SOFT_NEW_LINE)
start_of_line=TRUE;
@@ -520,12 +520,9 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE)
i=QueVectU8Get(indent,doc_e->y)*C_INDENT_SPACES;
x=doc_e->x+1;
while (i>8) {
doc_ne=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_ne->type=DOCT_TAB | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TAB];
doc_ne->x=x;
doc_ne->y=doc_e->y;
doc_ne->page_line_num=doc_e->page_line_num;
doc_ne=DocEntryNewBase(doc,
DOCT_TAB|doc->settings_root.dft_text_attr<<8,,
x,doc_e->y,doc_e->page_line_num);
MemCpy(&doc_ne->settings,
&doc_e->settings,sizeof(CDocSettings));
QueIns(doc_ne,doc_e->last);
@@ -536,14 +533,11 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE)
b=MAlloc(i+1,doc->mem_task);
MemSet(b,CH_SPACE,i);
b[i]=0;
doc_ne=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_ne->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
doc_ne=DocEntryNewBase(doc,
DOCT_TEXT|doc->settings_root.dft_text_attr<<8,,
x,doc_e->y,doc_e->page_line_num);
doc_ne->tag=b;
doc_ne->max_col=1;
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));
QueIns(doc_ne,doc_e->last);
+6 -5
View File
@@ -95,15 +95,16 @@ public Bool DocEd(CDoc *doc,I64 dof_flags=0)
old_task_title=StrNew(Fs->task_title);
if (Fs->title_src!=TTS_LOCKED_CONST) {
Fs->title_src=TTS_ED_FILENAME;
MemCpy(Fs->task_title,doc->filename.name,TASK_TITLE_LEN);
MemCpy(Fs->task_title,doc->filename.name,STR_LEN-1);
}
doc_e=DocPrint(bdoc,"$$DA-TRM-P+BD+RD+CX+IV,140,A=\"%%s...\",SCX=16$$");
doc_e=DocPrint(bdoc,"$$DA-TRM-P+BD+RD+CX+IV,LEN=STR_LEN-1,"
"A=\"%%s...\",SCX=16$$");
doc_e->data=&Fs->task_title;
DocDataFmt(bdoc,doc_e);
if (doc->flags & DOCF_ALLOW_UNDO) {
DocPrint(bdoc,"$$CM+BY+LX+NC,1,1$$");
doc_e=DocPrint(bdoc,"$$DA+BD+RD-TRM,32,RT=U32,A=\"Undo:%%03d\"$$\n");
doc_e=DocPrint(bdoc,"$$DA+BD+RD-TRM,RT=U32,A=\"Undo:%%03d\"$$\n");
doc_e->data=&doc->undo_cnt;
DocDataFmt(bdoc,doc_e);
}
@@ -124,10 +125,10 @@ public Bool DocEd(CDoc *doc,I64 dof_flags=0)
doc_e=DocPrint(bdoc,"$$TX+BD+TC,\" \"$$");
doc_e->user_data=doc;
doc_e->tag_cb=&EdDollarCB;
doc_e=DocPrint(bdoc,"$$DA+BD+RD-TRM,32,A=\"Line:%%04d \"$$");
doc_e=DocPrint(bdoc,"$$DA+BD+RD-TRM,A=\"Line:%%04d \"$$");
doc_e->data=&doc->line;
DocDataFmt(bdoc,doc_e);
doc_e=DocPrint(bdoc,"$$DA+BD+RD-TRM,32,A=\"Col:%%04d\"$$\n");
doc_e=DocPrint(bdoc,"$$DA+BD+RD-TRM,A=\"Col:%%04d\"$$\n");
doc_e->data=&doc->col;
DocDataFmt(bdoc,doc_e);
+63 -72
View File
@@ -27,8 +27,7 @@ public U0 DocLoad(CDoc *doc,U8 *src2,I64 size)
}
if (!(doc->flags & (DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS)))
DocBinsValidate(doc);
DocTop(doc); //DOCT_CURSOR will set it in recalc
DocRecalc(doc);
DocTop(doc); //Calls $LK,"DocRecalc",A="MN:DocRecalc"$(). DOCT_CURSOR will be set.
if (unlock)
DocUnlock(doc);
}
@@ -53,24 +52,27 @@ public CDoc *DocRead(U8 *name=NULL,I64 flags=0)
public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
{//Store doc to raw mem buf.
CDocEntry *doc_e;
CDocEntry *doc_e,*doc_e1;
CDocBin *b;
Bool unlock=DocLock(doc);
I64 ch,i,cnt;
I64 ch,cnt=1;//terminator
U8 *st,*result,*dst,*src;
if (!(doc->flags & (DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS)))
DocBinsValidate(doc);
DocRecalc(doc);
if (doc->flags&DOCF_NO_CURSOR || doc->root.next==doc)
cnt=1; //terminator
else
cnt=2; //cursor + terminator
if (doc->flags&DOCF_NO_CURSOR)
DocRecalc(doc);
else {
DocRecalc(doc,RECALCF_ADD_CURSOR);
if (doc->root.next->type_u8==DOCT_CURSOR)
DocEntryDel(doc,doc->root.next); //If no cursor, $LK,"DocLoad",A="MN:DocLoad"$() puts at top.
}
for (doc_e=doc->root.next;doc_e!=doc;doc_e=doc_e->next) {
if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) {
switch (doc_e->type_u8) {
case DOCT_TAB:
case DOCT_PAGE_BREAK:
case DOCT_CURSOR:
cnt++;
break;
case DOCT_NEW_LINE:
@@ -81,12 +83,12 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
break;
case DOCT_SOFT_NEW_LINE:
break;
case DOCT_TEXT://$BK,1$Update $LK,"DOCT_TEXT",A="FF:D:/Compiler/Lex.CPP,DOCT_TEXT"$$BK,0$
case DOCT_TEXT:
if (!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|
DOCEF_HIGHLIGHT|DOCEF_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_TABS)) ||
if (!(doc->flags & (DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS)) ||
doc->flags&DOCF_DBL_DOLLARS)
cnt+=StrOcc(doc_e->tag,'$$');
break;
@@ -98,72 +100,57 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
}
}
}
for (b=doc->bin_root.next;b!=&doc->bin_root;b=b->next) {
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;
}
cnt+=offset(CDocBin.end)-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_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_col &&
!(doc->flags&DOCF_NO_CURSOR))
*dst++=CH_CURSOR;
*dst++=ch;
if (ch=='$$') {
if (!(doc->flags & (DOCF_PLAIN_TEXT | DOCF_PLAIN_TEXT_TABS)) ||
doc->flags&DOCF_DBL_DOLLARS)
doc_e=doc->root.next;
while (doc_e!=doc) {
doc_e1=doc_e->next;
if (!Bt(doldoc.type_flags_data,doc_e->type_u8))
switch (doc_e->type_u8) {
case DOCT_CURSOR:
DocEntryDel(doc,doc_e);
*dst++=CH_CURSOR;
break;
case DOCT_TAB:
*dst++='\t';
break;
case DOCT_PAGE_BREAK:
*dst++=CH_FORM_FEED;
break;
case DOCT_NEW_LINE:
if (doc->flags&DOCF_CARRIAGE_RETURN)
*dst++='\r';
*dst++='\n';
break;
case DOCT_SOFT_NEW_LINE:
break;
case DOCT_TEXT:
if (!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|
DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_FILTER_SKIP)) &&
!(doc_e->type&DOCG_BL_IV_UL)) {
src=doc_e->tag;
while (ch=*src++) {
*dst++=ch;
if (ch=='$$' && (!(doc->flags & (DOCF_PLAIN_TEXT|
DOCF_PLAIN_TEXT_TABS)) || doc->flags&DOCF_DBL_DOLLARS))
*dst++=ch;
}
break;
}
}
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))
*dst++=CH_CURSOR;
switch (doc_e->type_u8) {
case DOCT_TAB:
*dst++='\t';
break;
case DOCT_PAGE_BREAK:
*dst++=CH_FORM_FEED;
break;
case DOCT_NEW_LINE:
if (doc->flags&DOCF_CARRIAGE_RETURN)
*dst++='\r';
*dst++='\n';
break;
case DOCT_SOFT_NEW_LINE:
break;
default:
*dst++='$$';
st=Doc2PlainText(doc,doc_e);
StrCpy(dst,st);
dst+=StrLen(st);
*dst++='$$';
Free(st);
}
default:
*dst++='$$';
st=Doc2PlainText(doc,doc_e);
StrCpy(dst,st);
dst+=StrLen(st);
*dst++='$$';
Free(st);
}
}
doc_e=doc_e1;
}
if (doc->cur_entry==doc && doc->root.next!=doc &&
!(doc->flags&DOCF_NO_CURSOR))
*dst++=CH_CURSOR;
*dst++=0;
if (*result==CH_CURSOR) {
MemCpy(result,result+1,dst-result-1);
cnt--;
dst--;
}
b=doc->bin_root.next;
if (b!=&doc->bin_root) {
do {
@@ -210,7 +197,7 @@ public U0 DocInsDoc(CDoc *doc=NULL,CDoc *doc2)
if (doc_ce->type_u8==DOCT_TEXT && doc->cur_col>doc_ce->min_col) {
if (doc->cur_col<doc_ce->max_col) {
dst=doc_ce->tag+doc->cur_col;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ne->type=DOCT_TEXT | doc_ce->type & 0xFFFFFF00;
doc_ce->max_col=doc->cur_col;
@@ -258,7 +245,7 @@ public U0 StreamDoc(CDoc *doc)
Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE)
{
Bool result=FALSE,unlock;
I64 time_stamp;
I64 time_stamp,flags;
CDocUndo *u;
if (doc->flags&DOCF_ALLOW_UNDO) {
unlock=DocLock(doc);
@@ -268,7 +255,10 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE)
force) {
u=CAlloc(sizeof(CDocUndo),doc->mem_task);
u->time_stamp=time_stamp;
flags=doc->flags;
doc->flags&=~DOCF_NO_CURSOR;
u->body=DocSave(doc,&u->size);
doc->flags=flags;
QueIns(u,doc->undo_root.last);
doc->flags&=~DOCF_UNDO_DIRTY;
doc->undo_cnt++;
@@ -291,8 +281,9 @@ U0 DocUndoRestore(CDoc *doc)
u_last=doc->undo_root.last;
QueInit(&doc->undo_root);
DocRst(doc,TRUE);
doc->flags=u->doc_flags;
doc->flags=u->doc_flags&~DOCF_NO_CURSOR;
DocLoad(doc,u->body,u->size);
doc->flags=u->doc_flags;
DocUndoDel(doc,u);
doc->undo_root.next=u_next;
doc->undo_root.last=u_last;
+4 -4
View File
@@ -7,7 +7,7 @@ public Bool DocLineNumGoTo(CDoc *doc,I64 line_num) //one based
unlock=DocLock(doc);
doc->x=0;
doc->y=line_num-1;
DocRecalc(doc,FALSE,DOC_RECALC_FIND_CURSOR);
DocRecalc(doc,RECALCt_FIND_CURSOR);
DocCenter(doc);
if (doc->cur_entry->y==line_num-1)
result=TRUE;
@@ -105,7 +105,7 @@ 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_FILTER_SKIP))) {
!(doc_e->de_flags&(DOCEG_DONT_EDIT|DOCEF_FILTER_SKIP))) {
if (doc_e->type & DOCET_SELECTED ||
!doc->find_replace->scan_selected_text) {
if (doc->find_replace->scan_fwd) {
@@ -473,7 +473,7 @@ I64 EdFindReplace(CDoc *doc)
break;
}
if (doc_e->type_u8==DOCT_TEXT &&
!(doc_e->de_flags&(DOCEG1_DONT_EDIT|DOCEF_FILTER_SKIP)) &&
!(doc_e->de_flags&(DOCEG_DONT_EDIT|DOCEF_FILTER_SKIP)) &&
(doc_e->type & DOCET_SELECTED ||
!doc->find_replace->scan_selected_text&&
!doc->find_replace->local_var)) {
@@ -571,7 +571,7 @@ Bool selected=TRUE,Bool match_case=TRUE,Bool whole_labels=FALSE)
class CEdLineGoTo
{
I64 line fmtstr "$$DA,256,A=\"Go to Line:%d\"$$";
I64 line fmtstr "$$DA,A=\"Go to Line:%d\"$$";
};
U0 EdGoToLine(CDoc *doc)
+48 -8
View File
@@ -59,12 +59,13 @@ U0 DocFormBwd(CDoc *doc,Bool giveup=FALSE)
U0 DocDataFmt(CDoc *doc,CDocEntry *doc_e,I64 d=DOCM_CANCEL)
{
I64 i;
U8 *ptr;
U8 *ptr,*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) {
if (d==DOCM_CANCEL) {
if (doc_e->de_flags & DOCEF_DATA_IS_PTR) {
if (doc_e->de_flags&DOCEF_DEREF_DATA &&
!(doc_e->de_flags&DOCEF_REMALLOC_DATA)) {
if (!(ptr=doc_e->data)) return;
} else
ptr=&doc_e->data;
@@ -81,13 +82,32 @@ U0 DocDataFmt(CDoc *doc,CDocEntry *doc_e,I64 d=DOCM_CANCEL)
}
}
if (doc_e->type_u8==DOCT_DATA) {
StrPrint(doc_e->tag,doc_e->aux_str,d,doc_e->my_fmt_data);
if (doc_e->de_flags & DOCEF_HAS_TERMINATOR) {
if (doc_e->de_flags & DOCEF_REMALLOC_DATA) {
ptr=MStrPrint(doc_e->aux_str,d,doc_e->my_fmt_data);
i=StrLen(ptr);
if (!doc_e->data) {
doc_e->data=CAlloc(2,doc->mem_task);
doc_e->len=MSize(doc_e->data)-2;
}
if (doc_e->len+doc_e->min_col>i)
MemCpy(doc_e->tag,ptr,i+1);
else {
ptr2=MAlloc(i+8,doc->mem_task);
doc_e->len=MSize(ptr2)-doc_e->min_col-2; //See $LK,"DataTagWidth",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$
MemCpy(ptr2,ptr,i+1);
Free(doc_e->tag);
doc_e->tag=ptr2;
}
Free(ptr);
} else {
StrPrint(doc_e->tag,doc_e->aux_str,d,doc_e->my_fmt_data);
i=StrLen(doc_e->tag);
}
if (doc_e->de_flags & DOCEF_HAS_TERMINATOR) {
doc_e->tag[i++]='_';
doc_e->tag[i]=0;
}
doc_e->max_col=StrLen(doc_e->tag);
doc_e->max_col=i;
} 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<=d<temph->cnt) {
@@ -115,7 +135,8 @@ U0 DocDataScan(CDoc *doc,CDocEntry *doc_e)
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) {
if (doc_e->de_flags & DOCEF_DATA_IS_PTR) {
if (doc_e->de_flags&DOCEF_DEREF_DATA &&
!(doc_e->de_flags&DOCEF_REMALLOC_DATA)) {
if (!(ptr=doc_e->data)) return;
} else
ptr=&doc_e->data;
@@ -130,7 +151,14 @@ U0 DocDataScan(CDoc *doc,CDocEntry *doc_e)
if (doc_e->de_flags & DOCEF_HAS_TERMINATOR)
doc_e->tag[i]='_';
} else if (RT_I64<=doc_e->raw_type<=RT_UF64) {
StrScan(doc_e->tag,doc_e->aux_str,ptr,doc_e->my_fmt_data);
if (doc_e->de_flags & DOCEF_REMALLOC_DATA) {
ptr=MAlloc(i-doc_e->min_col+8,doc->mem_task);
MemCpy(ptr,doc_e->tag+doc_e->min_col,i-doc_e->min_col+1);
Free(doc_e->data);
doc_e->data=ptr;
doc_e->len=MSize(ptr)-1;
} else
StrScan(doc_e->tag,doc_e->aux_str,ptr,doc_e->my_fmt_data);
if (doc_e->de_flags & DOCEF_HAS_TERMINATOR)
doc_e->tag[i]='_';
return;
@@ -201,7 +229,11 @@ public Bool DocForm(U8 *_d,U8 *class_name=lastclass,
while (ml) {
if (fmtstr=MemberMetaData("fmtstr",ml)) {
doc_e=DocPrint(doc,"%s",fmtstr);
doc_e->data=_d+ml->offset;
if (doc_e->de_flags&DOCEF_REMALLOC_DATA) {
doc_e->user_data=_d+ml->offset;
doc_e->data=*doc_e->user_data(U8 **);
} else
doc_e->data=_d+ml->offset;
doc_e->my_fmt_data=MemberMetaData("fmtdata",ml);
DocDataFmt(doc,doc_e);
}
@@ -221,6 +253,14 @@ public Bool DocForm(U8 *_d,U8 *class_name=lastclass,
}
}
}
doc_e=doc->root.next;
while (doc_e!=doc) {
if (doc_e->de_flags&DOCEF_REMALLOC_DATA) {
*doc_e->user_data(U8 **)=doc_e->data;
doc_e->data=NULL;
}
doc_e=doc_e->next;
}
DocDel(doc);
Fs->border_src=old_border_src;
return result;
+9 -9
View File
@@ -53,16 +53,16 @@ public I64 PopUpColorLighting(U8 *header=NULL)
class CTransformForm
{
F64 x_scale fmtstr "$$DA-TRM,32,RT=F64,A=\"X Scale :%12.6f\"$$\n";
F64 y_scale fmtstr "$$DA-TRM,32,RT=F64,A=\"Y Scale :%12.6f\"$$\n";
F64 z_scale fmtstr "$$DA-TRM,32,RT=F64,A=\"Z Scale :%12.6f\"$$\n";
F64 x_scale fmtstr "$$DA-TRM,RT=F64,A=\"X Scale :%12.6f\"$$\n";
F64 y_scale fmtstr "$$DA-TRM,RT=F64,A=\"Y Scale :%12.6f\"$$\n";
F64 z_scale fmtstr "$$DA-TRM,RT=F64,A=\"Z Scale :%12.6f\"$$\n";
F64 é_z fmtstr
"\nAngles are in degrees\n$$DA-TRM,32,RT=F64,A=\"Z-Axis :%12.6f\"$$\n";
F64 é_y fmtstr "$$DA-TRM,32,RT=F64,A=\"Y-Axis :%12.6f\"$$\n";
F64 é_x fmtstr "$$DA-TRM,32,RT=F64,A=\"X-Axis :%12.6f\"$$\n";
F64 x_offset fmtstr "\n$$DA-TRM,32,RT=F64,A=\"X Offset:%12.6f\"$$\n";
F64 y_offset fmtstr "$$DA-TRM,32,RT=F64,A=\"Y Offset:%12.6f\"$$\n";
F64 z_offset fmtstr "$$DA-TRM,32,RT=F64,A=\"Z Offset:%12.6f\"$$\n";
"\nAngles are in degrees\n$$DA-TRM,RT=F64,A=\"Z-Axis :%12.6f\"$$\n";
F64 é_y fmtstr "$$DA-TRM,RT=F64,A=\"Y-Axis :%12.6f\"$$\n";
F64 é_x fmtstr "$$DA-TRM,RT=F64,A=\"X-Axis :%12.6f\"$$\n";
F64 x_offset fmtstr "\n$$DA-TRM,RT=F64,A=\"X Offset:%12.6f\"$$\n";
F64 y_offset fmtstr "$$DA-TRM,RT=F64,A=\"Y Offset:%12.6f\"$$\n";
F64 z_offset fmtstr "$$DA-TRM,RT=F64,A=\"Z Offset:%12.6f\"$$\n";
};
Bool PopUpTransform(I64 *r)
+1 -1
View File
@@ -1,7 +1,7 @@
#help_index "DolDoc/Misc"
U32 *DocHighlight(CDocEntry *doc_e,U8 *src,I64 len,I64 _temp_u32_attr)
{//Be aware of $LK,"::/Adam/Opt/Utils/ToHtml.CPP"$.
{//Be aware of $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
U32 *result=MAlloc((len+1)*sizeof(U32)),*dst=result;
U8 *ptr;
CDocSettings *s=&doc_e->settings;
+4 -4
View File
@@ -11,11 +11,11 @@ U0 DocInit()
"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"
"T\0LEN\0A\0D\0HTML\0LE\0LM\0RE\0RM\0BI\0BP\0RT\0SX\0SY\0SCX\0U\0"
"LC\0LA\0RC\0RA\0LX\0CX\0RX\0TY\0CY\0BY\0"
"HL\0WW\0BK\0IV\0SEL\0UL\0"
"PRY\0MRX\0WR\0L\0X\0Q\0FST\0B\0S\0BD\0C\0CA\0RD\0UD\0P\0TRM\0Z\0H\0"
"TR\0LS\0SK\0PU\0SIF\0FS\0NC\0DD\0");
"TC\0PRY\0MRX\0WR\0L\0X\0Q\0FST\0B\0S\0BD\0C\0CA\0RD\0UD\0P\0M\0"
"TRM\0Z\0H\0TR\0LS\0SK\0PU\0SIF\0FS\0NC\0DD\0");
DefineLstLoad("ST_LINK_TYPES",
"FI\0FA\0FF\0FL\0MN\0PI\0PF\0PL\0BF\0DN\0HI\0AD\0AI\0AA\0AF\0AL\0");
+2 -2
View File
@@ -141,11 +141,11 @@ I64 PopUpMacroMenu()
U8 buf[STR_LEN];
CSrvCmd *tempc;
CDoc *doc=DocNew;
CDocEntry *doc_e=DocPrint(doc,"$$DA-P,STR_LEN-1,A=\"Name:%%s\"$$");
CDocEntry *doc_e=DocPrint(doc,"$$DA-P,LEN=STR_LEN-1,A=\"Name:%%s\"$$");
doc_e->data=captured_macro_name;
DocDataFmt(doc,doc_e);
doc_e=DocPrint(doc,"\n$$DA,32,A=\"Repeat N:%%d\"$$");
doc_e=DocPrint(doc,"\n$$DA,A=\"Repeat N:%%d\"$$");
doc_e->data=&sys_macro_repeat_n;
DocDataFmt(doc,doc_e);
+36 -19
View File
@@ -29,22 +29,33 @@ public Bool DocUnlock(CDoc *doc)
Bool IsEditableText(CDocEntry *doc_e)
{
if (doc_e->type_u8==DOCT_TEXT&&!(doc_e->de_flags&DOCEG1_DONT_EDIT))
if (doc_e->type_u8==DOCT_TEXT&&!(doc_e->de_flags&DOCEG_DONT_EDIT))
return TRUE;
else
return FALSE;
}
CDocEntry *DocEntryNew(CDoc *doc,CDocEntry *doc_ce,U8 *tag)
{
CDocEntry *DocEntryNewBase(CDoc *doc,I64 type,I64 de_flags=0,
I64 x=0,I64 y=0,I64 page_line_num=0)
{//See also $LK,"MAllocIdentical",A="FF:::/Adam/DolDoc/DocRecalc.CPP,MAllocIdentical"$ and $MA-X+PU,"CDocEntry",LM="F(\"sizeof(CDocEntry)\");View;"$.
CDocEntry *result=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
result->type=doc_ce->type;
result->de_flags=doc_ce->de_flags;
result->tag=tag;
result->max_col=StrLen(tag);
result->x=doc_ce->x;
result->y=doc_ce->y;
result->page_line_num=doc_ce->page_line_num;
result->type=type;
result->de_flags=de_flags|doldoc.dft_de_flags[type.u8[0]];
result->x=x;
result->y=y;
result->page_line_num=page_line_num;
return result;
}
CDocEntry *DocEntryNewTag(CDoc *doc,CDocEntry *doc_ce,U8 *tag)
{
I64 l=StrLen(tag);
CDocEntry *result=DocEntryNewBase(doc,doc_ce->type,doc_ce->de_flags,
doc_ce->x,doc_ce->y,doc_ce->page_line_num);
result->de_flags=doc_ce->de_flags; //Override
result->max_col=l;
result->tag=MAlloc(l+1,doc->mem_task);
MemCpy(result->tag,tag,l+1);
MemCpy(&result->settings,&doc_ce->settings,sizeof(CDocSettings));
return result;
}
@@ -59,20 +70,22 @@ public U0 DocEntryDel(CDoc *doc,CDocEntry *doc_e)
QueRem(doc_e);
if (doc_e->de_flags & DOCEF_TAG)
Free(doc_e->tag);
if (doc_e->de_flags & DOCEF_LEFT_MACRO)
Free(doc_e->left_macro);
if (doc_e->de_flags & DOCEF_RIGHT_MACRO)
Free(doc_e->right_macro);
if (doc_e->de_flags & DOCEF_AUX_STR)
Free(doc_e->aux_str);
if (doc_e->de_flags & DOCEF_DEFINE)
Free(doc_e->define_str);
if (doc_e->de_flags & DOCEF_HTML_LINK)
Free(doc_e->html_link);
if (doc_e->de_flags & DOCEF_LEFT_MACRO)
Free(doc_e->left_macro);
if (doc_e->de_flags & DOCEF_RIGHT_MACRO)
Free(doc_e->right_macro);
if (doc_e->de_flags & DOCEF_BIN_PTR_LINK)
Free(doc_e->bin_ptr_link);
if (doc_e->de_flags & DOCEF_HAS_BIN)
DocBinDel(doc,doc_e->bin_data);
if (doc_e->de_flags & DOCEF_REMALLOC_DATA)
Free(doc_e->data);
Free(doc_e);
}
}
@@ -90,12 +103,14 @@ public I64 DocEntrySize(CDoc *,CDocEntry *doc_e)
result+=MSize2(doc_e->define_str);
if (doc_e->de_flags & DOCEF_HTML_LINK)
result+=MSize2(doc_e->html_link);
if (doc_e->de_flags & DOCEF_BIN_PTR_LINK)
result+=MSize2(doc_e->bin_ptr_link);
if (doc_e->de_flags & DOCEF_LEFT_MACRO)
result+=MSize2(doc_e->left_macro);
if (doc_e->de_flags & DOCEF_RIGHT_MACRO)
result+=MSize2(doc_e->right_macro);
if (doc_e->de_flags & DOCEF_BIN_PTR_LINK)
result+=MSize2(doc_e->bin_ptr_link);
if (doc_e->de_flags & DOCEF_REMALLOC_DATA)
result+=MSize2(doc_e->data);
return result;
}
@@ -134,12 +149,12 @@ public CDocEntry *DocEntryCopy(CDoc *doc,CDocEntry *doc_e)
doc_ne->define_str=MAllocIdentical(doc_e->define_str,task);
if (doc_e->de_flags & DOCEF_HTML_LINK)
doc_ne->html_link=MAllocIdentical(doc_e->html_link,task);
if (doc_e->de_flags & DOCEF_BIN_PTR_LINK)
doc_ne->bin_ptr_link=MAllocIdentical(doc_e->bin_ptr_link,task);
if (doc_e->de_flags & DOCEF_LEFT_MACRO)
doc_ne->left_macro=MAllocIdentical(doc_e->left_macro,task);
if (doc_e->de_flags & DOCEF_RIGHT_MACRO)
doc_ne->right_macro=MAllocIdentical(doc_e->right_macro,task);
if (doc_e->de_flags & DOCEF_BIN_PTR_LINK)
doc_ne->bin_ptr_link=MAllocIdentical(doc_e->bin_ptr_link,task);
if (doc_e->de_flags & DOCEF_HAS_BIN) {
tempb=MAllocIdentical(doc_e->bin_data,task);
tempb->data=MAllocIdentical(doc_e->bin_data->data,task);
@@ -152,6 +167,8 @@ public CDocEntry *DocEntryCopy(CDoc *doc,CDocEntry *doc_e)
tempb->tag=NULL;
QueIns(tempb,doc->bin_root.last);
}
if (doc_e->de_flags & DOCEF_REMALLOC_DATA)
doc_ne->data=MAllocIdentical(doc_e->data,task);
return doc_ne;
}
@@ -195,7 +212,7 @@ public U0 DocInsEntry(CDoc *doc,CDocEntry *doc_e)
DOCEF_HTML_LINK|DOCEF_BIN_PTR_LINK)) &&
doc->cur_col<doc_ce->max_col) {
dst=doc_ce->tag+doc->cur_col;
doc_ne=DocEntryNew(doc,doc_ce,StrNew(dst,doc->mem_task));
doc_ne=DocEntryNewTag(doc,doc_ce,dst);
*dst=0;
doc_ne->type=DOCT_TEXT|doc_ce->type&0xFFFFFF00;
doc_ce->max_col=doc->cur_col;
+19 -24
View File
@@ -61,7 +61,7 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e)
for (i=0;i<DOCEf_NUM_FLAGS;i++)
if (Bt(&f1,i)!=Bt(&de_flags,i)) {
if (Bt(&de_flags,i)) {
if (!(1<<i&DOCEG1_HAS_ARG)) {
if (!(1<<i&DOCEG_HAS_ARG)) {
buf2=MStrPrint("%s+%Z",buf,i,"ST_DOC_FLAGS");
Free(buf); buf=buf2;
}
@@ -82,19 +82,12 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e)
buf2=MStrPrint("%s,",buf);
Free(buf); buf=buf2;
nobound_switch (doc_e->type_u8) {
sub_switch_start:
case DOCT_DATA:
buf2=MStrPrint("%s%d,",buf,doc_e->len);
break;
case DOCT_HEX_ED:
buf2=MStrPrint("%s%d,",buf,doc_e->len);
Free(buf); buf=buf2;
buf2=MStrPrint("%s%d,",buf,doc_e->hex_ed_width);
break;
sub_switch_end:
case DOCT_HEX_ED:
buf2=MStrPrint("%s%d,",buf,doc_e->len);
Free(buf); buf=buf2;
buf2=MStrPrint("%s%d,",buf,doc_e->hex_ed_width);
Free(buf); buf=buf2;
break;
case DOCT_FOREGROUND:
case DOCT_BACKGROUND:
case DOCT_DFT_FOREGROUND:
@@ -124,7 +117,7 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e)
case DOCT_NUM_TYPES-1: //nobound_switch
break;
}
de_flags=doc_e->de_flags & DOCEG1_HAS_ARG;
de_flags=doc_e->de_flags & DOCEG_HAS_ARG;
while (de_flags) {
j=Bsf(de_flags);
Btr(&de_flags,j);
@@ -158,6 +151,9 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e)
buf2=MStrPrint("%sT=\"%$$Q\",",buf,buf2);
}
break;
case DOCEf_LEN:
buf2=MStrPrint("%sLEN=%d,",buf,doc_e->len);
break;
case DOCEf_AUX_STR:
buf2=MStrPrint("%sA=\"%$$Q\",",buf,doc_e->aux_str);
break;
@@ -244,17 +240,10 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st)
doc_e->de_flags=doldoc.dft_de_flags[i];
doc_e->type|=doldoc.dft_type_flags[i];
doc_e->raw_type=RT_I64;
doc_e->len=DOCE_LEN_DFT;
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 (cc->token==',')
Lex(cc);
if (cc->token)
doc_e->len=LexExpressionI64(cc);
else
goto pd_err;
break;
case DOCT_CHECK_BOX:
doc_e->raw_type=RT_I8;
break;
@@ -308,7 +297,7 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st)
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))
if (!(de_flags=~processed_flags & doc_e->de_flags & DOCEG_HAS_ARG))
break;
if (cc->token=='=')
Lex(cc);
@@ -348,6 +337,12 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st)
goto pd_err;
}
break;
case DOCEf_LEN:
if (cc->token)
doc_e->len=LexExpression(cc);
else
goto pd_err;
break;
case DOCEf_AUX_STR:
if (cc->token==TK_STR) {
st2=LexExtStr(cc);
@@ -474,8 +469,8 @@ 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_REMALLOC_DATA ||
!(doc_e->de_flags&DOCEF_DEREF_DATA))) {
DocDataScan(doc,doc_e);
DocDataFmt(doc,doc_e);
}
+16 -22
View File
@@ -22,7 +22,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
KeyDescSet("Char /'%s'",st);
Free(st);
} else
EdInsChar(ch,sc,doc);
EdCharIns(ch,sc,doc);
} else {
doc_ce=doc->cur_entry;
x=doc->x; y=doc->y;
@@ -189,7 +189,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
if (sc&SCF_SHIFT)
EdCutToClipboard(doc);
else
EdDelChar(doc);
EdCharDel(doc);
}
}
break;
@@ -435,11 +435,11 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
doc->cur_col=doc_ce->max_col;
if (doc->cur_col>doc_ce->min_col)
doc->cur_col--;
EdDelChar(doc);
EdCharDel(doc);
}
} else {
doc->cur_col--;
EdDelChar(doc);
EdCharDel(doc);
}
}
}
@@ -448,12 +448,12 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
if (sc.u8[0]!=SC_TAB) {
if (sc&SCF_SHIFT) {
if (sc&SCF_KEY_DESC)
KeyDescSet("Dol /Indent Out");
KeyDescSet("Dol /Unindent 2");
else
DocPrint(doc,"$$ID,-2$$");
} else {
if (sc&SCF_KEY_DESC)
KeyDescSet("Dol /Indent In");
KeyDescSet("Dol /Indent 2");
else
DocPrint(doc,"$$ID,2$$");
}
@@ -466,7 +466,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
else
KeyDescSet("Char /Page Break");
} else
EdInsChar(ch,sc,doc);
EdCharIns(ch,sc,doc);
break;
case CH_CTRLK:
if (sc&SCF_SHIFT) {
@@ -556,20 +556,16 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
if (!(sc&SCF_SHIFT)) {
if (sc&SCF_KEY_DESC)
KeyDescSet("Cmd /Sprite Graphic Resource");
else {
if (!(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS))) {
else
if (!(doc->flags&DOCF_FORM) &&
!(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS))) {
DocUnlock(doc);
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->top_line_num)*FONT_HEIGHT);
EdSpriteEd(doc);
else
EdSpriteIns(doc,
(doc_ce->x+doc->cur_col-doc->line_start_col)*FONT_WIDTH,
(doc_ce->y-doc->top_line_num)*FONT_HEIGHT);
EdSpriteIns(doc);
DocLock(doc);
}
}
}
break;
case CH_CTRLS:
@@ -589,15 +585,13 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
if (sc&SCF_SHIFT) {
if (sc&SCF_KEY_DESC)
KeyDescSet("Edit/Single Entry Toggle Plain Text");
else
else if (!(doc->flags&DOCF_FORM))
DocEntryToggle(doc);
} else {
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_TABS))
DocFlagsToggle(doc,DOCF_PLAIN_TEXT);
else if (!(doc->flags&DOCF_FORM))
DocFlagsToggle(doc,DOCF_PLAIN_TEXT);
}
break;
case CH_CTRLU:
@@ -647,7 +641,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)
if (sc&SCF_KEY_DESC)
KeyDescSet("Edit/Delete Line");
else
EdDelLine(doc);
EdLineDel(doc);
}
break;
case CH_CTRLZ:
+26 -39
View File
@@ -26,9 +26,8 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st)
ptr--;
if (!ch) {
if (j=ptr-ptr2) {
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
doc_e=DocEntryNewBase(doc,
DOCT_TEXT|doc->settings_root.dft_text_attr<<8);
if (doc->flags & DOCF_NO_CURSOR) {
src=MAlloc(j+1);
MemCpy(src,ptr2,j+1);
@@ -46,9 +45,8 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st)
} else {
if (j=ptr-ptr2) {
*ptr=0;
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
doc_e=DocEntryNewBase(doc,
DOCT_TEXT|doc->settings_root.dft_text_attr<<8);
if (doc->flags & DOCF_NO_CURSOR) {
src=MAlloc(j+1);
MemCpy(src,ptr2,j+1);
@@ -73,23 +71,20 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st)
}
switch (ch) {
case CH_CURSOR:
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_CURSOR | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_CURSOR];
doc_e=DocEntryNewBase(doc,
DOCT_CURSOR|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_e);
ptr++;
break;
case 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->de_flags=doldoc.dft_de_flags[DOCT_PAGE_BREAK];
doc_e=DocEntryNewBase(doc,
DOCT_PAGE_BREAK|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_e);
ptr++;
break;
case '\t':
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_TAB | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_TAB];
doc_e=DocEntryNewBase(doc,
DOCT_TAB|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_e);
ptr++;
break;
@@ -101,21 +96,19 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st)
if (*ptr) {
*ptr=0; //zero second dollar
if (ptr-1==ptr2 && *ptr2==CH_CURSOR) {
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_CURSOR | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_CURSOR];
doc_e=DocEntryNewBase(doc,
DOCT_CURSOR|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_e);
ptr2++;
}
if (ptr==ptr2) {
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_e=DocEntryNewBase(doc,
DOCT_TEXT|doc->settings_root.dft_text_attr<<8);
doc_e->max_col=1;
if (doc->flags & DOCF_DBL_DOLLARS)
doc_e->tag=StrNew("$$$$",doc->mem_task);
else
doc_e->tag=StrNew("$$",doc->mem_task);
doc_e->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
DocInsEntry(doc,doc_e);
} else {
st2=MAlloc(ptr-ptr2+1);
@@ -123,15 +116,12 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st)
ptr4=st2;
while (ch=*ptr3++) {
if (ch==CH_CURSOR) {
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_CURSOR | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_CURSOR];
doc_e=DocEntryNewBase(doc,
DOCT_CURSOR|doc->settings_root.dft_text_attr<<8);
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->de_flags=doldoc.dft_de_flags[DOCT_PAGE_BREAK];
doc_e=DocEntryNewBase(doc,
DOCT_PAGE_BREAK|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_e);
} else
*ptr4++=ch;
@@ -147,9 +137,8 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st)
}
break;
default:
doc_e=CAlloc(sizeof(CDocEntryBase),doc->mem_task);
doc_e->type=DOCT_NEW_LINE | doc->settings_root.dft_text_attr<<8;
doc_e->de_flags=doldoc.dft_de_flags[DOCT_NEW_LINE];
doc_e=DocEntryNewBase(doc,
DOCT_NEW_LINE|doc->settings_root.dft_text_attr<<8);
DocInsEntry(doc,doc_e);
if (ch=='\r')
while (*ptr=='\r')
@@ -176,7 +165,7 @@ public CDocEntry *DocPrint(CDoc *doc,U8 *fmt,...)
public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...)
{//Lets you print half a doc cmd, if you like.
U8 *buf,*b,*src,*dst,*ptr,*ptr2;
U8 *buf,*st,*src,*dst,*ptr,*ptr2;
Bool unlock;
CDocEntry *doc_ce,*doc_ne;
I64 ch,i,j;
@@ -195,7 +184,7 @@ public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...)
else
while (ch=*ptr) {
if (!Bt(chars_bmp_safe_dollar,ch) ||
doc->flags & (DOCF_OVERSTRIKE | DOCF_IN_DOLLAR)) {
doc->flags & (DOCF_OVERSTRIKE|DOCF_IN_DOLLAR)) {
DocPutKey(doc,ch,0);
ptr++;
} else {
@@ -210,7 +199,7 @@ public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...)
doc_ce=doc->cur_entry;
j=ptr-ptr2;
if (IsEditableText(doc_ce)) {
dst=b=MAlloc(doc_ce->max_col+j+1,doc->mem_task);
dst=st=MAlloc(doc_ce->max_col+j+1,doc->mem_task);
src=doc_ce->tag;
i=doc->cur_col;
doc->cur_col+=j;
@@ -221,12 +210,10 @@ public U0 DocPrintPartial(CDoc *doc,U8 *fmt,...)
*dst++=*ptr2++;
while (*dst++=*src++);
Free(doc_ce->tag);
doc_ce->tag=b;
doc_ce->tag=st;
} else {
dst=MAlloc(j+1,doc->mem_task);
MemCpy(dst,ptr2,j+1);
doc_ne=DocEntryNew(doc,doc_ce,dst);
doc_ne->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8;
doc_ne=DocEntryNewTag(doc,doc_ce,ptr2);
doc_ne->type=DOCT_TEXT|doc->settings_root.dft_text_attr<<8;
doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT];
QueIns(doc_ne,doc_ce->last);
doc->cur_entry=doc_ne;
+109 -74
View File
@@ -128,14 +128,34 @@ U0 DocRecalcXY(CDoc *doc,CDocEntry *doc_e,
*_y=y;
}
CDocEntry *DocSplitTag(CDoc *doc,CDocEntry *doc_e,I64 i,I64 x,I64 y,I64 type_u8)
{//Split tag at i, insert DOCT_SOFT_NEW_LINE or DOCT_CURSOR
U8 *ptr;
CDocEntry *doc_e2=MAllocIdentical(doc_e,doc->mem_task);
doc_e2->tag=StrNew(doc_e->tag+i,doc->mem_task);
doc_e2->de_flags=doc_e->de_flags&~DOCEG_HAS_ALLOC|DOCEF_TAG;
QueIns(doc_e2,doc_e);
if (doc->cur_entry==doc_e && doc->cur_col>=i) {
doc->cur_entry=doc_e2;
doc->cur_col=doc->cur_col-i;
}
doc_e->tag[i]=0;
ptr=StrNew(doc_e->tag,doc->mem_task);
Free(doc_e->tag);
doc_e->tag=ptr;
doc_e2=DocEntryNewBase(doc,type_u8|doc_e->type & 0xFFFFFF00,
doc_e->de_flags&~DOCEG_HAS_ARG,x,y,doc_e->page_line_num);
MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));
QueIns(doc_e2,doc_e);
return doc_e2;
}
CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e,
I64 *_k,I64 left,I64 right_margin,I64 x,I64 y)
{
CDocEntry *doc_e2;
U8 *ptr;
I64 i,ii,j;
i=right_margin+1-(x+left); //Space left on line
ii=x+1-doc_e->settings.left_margin;
I64 j,i=right_margin+1-(x+left), //Space left on line
ii=x+1-doc_e->settings.left_margin;
if (IsEditableText(doc_e)) {
if (doc->cur_entry==doc_e->next) {
if (doc->cur_col==doc_e->next->min_col)
@@ -146,32 +166,12 @@ CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e,
}
if (*_k>i) {
for (j=i;j>8-ii && j>=0;j--)
if (doc_e->tag[j]==CH_SPACE ||
doc_e->tag[j]==CH_SHIFT_SPACE) {
if (doc_e->tag[j]==CH_SPACE || doc_e->tag[j]==CH_SHIFT_SPACE) {
i=j+1;
break;
}
if (*_k>i && i>0) {
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_col>=i) {
doc->cur_entry=doc_e2;
doc->cur_col=doc->cur_col-i;
}
doc_e->tag[i]=0;
ptr=StrNew(doc_e->tag,doc->mem_task);
Free(doc_e->tag);
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->x=x;
doc_e2->y=y;
doc_e2->page_line_num=doc_e->page_line_num;
MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));
QueIns(doc_e2,doc_e);
if (0<i<*_k) {
DocSplitTag(doc,doc_e,i,x,y,DOCT_SOFT_NEW_LINE);
*_k=StrLen(doc_e->tag);
return NULL;
}
@@ -184,14 +184,9 @@ CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e,
if (doc_e2->type_u8!=DOCT_SOFT_NEW_LINE &&
doc_e2->type_u8!=DOCT_NEW_LINE &&
doc_e2->type_u8!=DOCT_CURSOR_MOVEMENT) {
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_FILTER_SKIP);
doc_e2->x=x;
doc_e2->y=y;
doc_e2->page_line_num=doc_e->last->page_line_num;
doc_e2=DocEntryNewBase(doc,DOCT_SOFT_NEW_LINE|doc_e->type&0xFFFFFF00,
DOCEF_WORD_WRAP|doc_e->de_flags&(DOCEF_HIGHLIGHT|DOCG_BL_IV_UL|
DOCEF_SKIP|DOCEF_FILTER_SKIP),x,y,doc_e->last->page_line_num);
MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));
QueIns(doc_e2,doc_e->last);
return doc_e2;
@@ -245,19 +240,21 @@ I64 DocTempAttr(CDoc *doc,CDocEntry *doc_e,I64 cur_u8_attr)
}
doc_e->type.u8[1]=temp_u32_attr.u8[1];
temp_u32_attr|=doc_e->type&0xFFFF0000;
if (doc_e==doc->cur_entry && doc_e->type_u8!=DOCT_TEXT)
if (doc_e==doc->cur_entry && !(doc->flags&DOCF_DONT_HIGHLIGHT_CURSOR) &&
doc_e->type_u8!=DOCT_TEXT)
temp_u32_attr^=0xFF00;
doc_e->settings.final_u32_attr=temp_u32_attr;
return temp_u32_attr;
}
public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL)
{//Recalc and fmt. Also used by WinMgr to draw on screen.
I64 i,ii,j,k,x,x0,y,y0,D,d2,col,col2,best_col=0,best_d=MAX_I64,xx,yy,zz,
num_entries=0,ijif,cur_u8_attr,temp_u32_attr,
cursor_y=MIN_I64,left_margin,right_margin,y_plot_top,y_plot_bottom,
top,left,bottom,right,width,height,scroll_x,scroll_y,pix_top,pix_left;
CDocEntry reg *doc_e,reg *doc_e2,*best_doc_e,*next_clear_found=NULL;
CDocEntry reg *doc_e,reg *doc_e2,*best_doc_e,*next_clear_found=NULL,
*added_cursor=NULL;
CDocBin *tempb;
CDocSettings *s;
Bool del_cl,skipped_update,tree_collapsed,same_win,more=FALSE,
@@ -273,7 +270,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
if (!doc || doc->doc_signature!=DOC_SIGNATURE_VAL) return FALSE;
if (recalc==DOC_RECALC_TO_SCREEN && doc->owning_task!=Fs) {
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN && doc->owning_task!=Fs) {
ijif=cnts.jiffies+JIFFY_FREQ/240;
while (Bt(&doc->locked_flags,DOClf_LOCKED)) {
if (cnts.jiffies>=ijif)
@@ -292,13 +289,13 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
mem_task=doc->mem_task;
blink_flag=Blink;
dc=NULL;
nobound_switch (recalc) {
case DOC_RECALC_FIND_CURSOR:
nobound_switch (recalc_flags&RECALCG_MASK) {
case RECALCt_FIND_CURSOR:
find_cursor=TRUE;
if (win_task)
dc=DCAlias(gr.dc2,win_task); //Necessary for sprites
break;
case DOC_RECALC_TO_SCREEN:
case RECALCt_TO_SCREEN:
if (doc->updates_cnt++%(ToI64(winmgr.fps/10)+1) &&
!Bt(&doc->flags,DOCf_DO_FULL_REFRESH) &&
!(doc->flags&DOCF_BWD_MOVEMENT))
@@ -347,12 +344,12 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
if (doc->flags&DOCF_BORDER_DOC) {
doc->top_line_num=0;
doc->line_start_col=0;
has_cursor=FALSE;
if (recalc==DOC_RECALC_TO_SCREEN)
recalc_flags&=~RECALCF_HAS_CURSOR;
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN)
doc->settings_root.cur_text_attr=
doc->settings_root.dft_text_attr=win_task->border_attr;
} else {
if (has_cursor && full_refresh) {
if (recalc_flags&RECALCF_HAS_CURSOR && full_refresh) {
if (Bt(&hss->flags,WSSf_SET_TO_POS)||Bt(&vss->flags,WSSf_SET_TO_POS)) {
if (!(doc->flags&DOCF_NO_SCROLL_BARS)) {
if (Bt(&hss->flags,WSSf_SET_TO_POS)) {
@@ -369,7 +366,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
find_cursor=TRUE;
}
}
if (recalc==DOC_RECALC_TO_SCREEN)
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN)
doc->settings_root.cur_text_attr=
doc->settings_root.dft_text_attr=win_task->text_attr;
}
@@ -381,7 +378,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
right ==doc->old_win_right &&
doc->cur_entry==doc->old_cur_entry &&
doc->cur_col==doc->old_cur_col;
if (recalc==DOC_RECALC_TO_SCREEN) {
if (recalc_flags&RECALCG_MASK==RECALCt_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) &&
@@ -402,7 +399,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
cur_u8_attr=s->cur_text_attr;
if (doc_e==doc->root.next) {
doc->flags&=~DOCF_BWD_MOVEMENT;
if (recalc==DOC_RECALC_TO_SCREEN && full_refresh)
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN && full_refresh)
doc->flags&=~DOCF_HAS_SONG;
} else
doc->flags=doc_e->de_flags& DOCEF_HIGHLIGHT |
@@ -480,8 +477,27 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
col2=0;
temp_u32_attr=DocTempAttr(doc,doc_e,cur_u8_attr);
if (doc_e==doc->cur_entry)
if (doc_e==doc->cur_entry) {
cursor_y=doc_e->y;
if (recalc_flags&RECALCF_ADD_CURSOR && doc_e!=added_cursor) {
if (doc_e->type_u8==DOCT_TEXT && 0<doc->cur_col<k &&
!(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|
DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_FILTER_SKIP)) &&
!(doc_e->type&DOCG_BL_IV_UL)) {
added_cursor=DocSplitTag(doc,doc_e,doc->cur_col,x,y,DOCT_CURSOR);
k=StrLen(doc_e->tag);
} else {
added_cursor=doc_e2=DocEntryNewBase(doc,
DOCT_CURSOR|doc_e->type&0xFFFFFF00,
doc_e->de_flags&~DOCEG_HAS_ARG,x,y,doc->page_line_num);
MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));
if (doc_e->type_u8==DOCT_TEXT && doc->cur_col>=k)
QueIns(doc_e2,doc_e);
else
QueInsRev(doc_e2,doc_e);
}
}
}
if (doc_e->de_flags & DOCEF_REFRESH_DATA &&
(doc_e->type_u8==DOCT_DATA || doc_e->type_u8==DOCT_CHECK_BOX ||
@@ -504,7 +520,9 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
if (*ptr=='<' && full_refresh && '0'<=ptr[1]<='9') {
ptr=MStrPrint("<%d>",doc_e->bin_num);
Free(doc_e->tag);
ptr=doc_e->tag=StrNew(ptr,mem_task);
doc_e->tag=StrNew(ptr,mem_task);
Free(ptr);
ptr=doc_e->tag;
k=StrLen(ptr);
}
} else if (doc_e->type_u8==DOCT_CHECK_BOX) {
@@ -530,7 +548,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
for (k=0;k<doc_e->scroll_len;k++) {
ch=ptr[(ijif+k)%j];
if (!Bt(chars_bmp_displayable,ch)) ch='.';
if (recalc==DOC_RECALC_TO_SCREEN &&
if (recalc_flags&RECALCG_MASK==RECALCt_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))
@@ -550,7 +568,7 @@ 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 &&
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN &&
!(doc_e->de_flags&DOCEF_DONT_DRAW))
TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+ch);
else
@@ -569,7 +587,7 @@ 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 &&
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN &&
!(doc_e->de_flags&DOCEF_DONT_DRAW)) {
//Technically we should do this for scrolling_x, too.
if (y>y_plot_bottom)
@@ -610,7 +628,8 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
del_cl=TRUE;
break;
case DOCT_HEX_ED:
if (doc_e->de_flags & DOCEF_DATA_IS_PTR)
if (doc_e->de_flags&DOCEF_DEREF_DATA &&
!(doc_e->de_flags&DOCEF_REMALLOC_DATA))
bptr=doc_e->data;
else
bptr=&doc_e->data;
@@ -622,7 +641,7 @@ 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 &&
if (recalc_flags&RECALCG_MASK==RECALCt_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))
@@ -644,7 +663,7 @@ 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 &&
if (recalc_flags&RECALCG_MASK==RECALCt_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))
@@ -669,7 +688,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
for (j=0;j<k;j++) {
ch=*bptr++;
if (!Bt(chars_bmp_displayable,ch)) ch='.';
if (recalc==DOC_RECALC_TO_SCREEN &&
if (recalc_flags&RECALCG_MASK==RECALCt_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))
@@ -696,7 +715,7 @@ 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 (x<k) {
if (recalc==DOC_RECALC_TO_SCREEN &&
if (recalc_flags&RECALCG_MASK==RECALCt_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) {
@@ -708,7 +727,7 @@ public Bool DocRecalc(CDoc *doc,Bool has_cursor=FALSE,I64 recalc=DOC_RECALC)
}
} else {
k-=x;
if (recalc==DOC_RECALC_TO_SCREEN &&
if (recalc_flags&RECALCG_MASK==RECALCt_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," ");
@@ -728,13 +747,12 @@ 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)&&
if (recalc_flags&RECALCG_MASK==RECALCt_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)
s->state=DOCSS_NORMAL;
}
if (doc_e->de_flags&DOCEF_HIGHLIGHT && s->state==DOCSS_CPP_Z_COMMENT)
s->state=DOCSS_NORMAL;
y++;
doc->page_line_num++;
rc_start_of_line:
@@ -919,7 +937,8 @@ rc_adjust_xy:
doc->cur_entry=doc_e->next;
doc->cur_col=doc->cur_entry->min_col;
}
del_cl=TRUE;
if (doc_e!=added_cursor)
del_cl=TRUE;
break;
case DOCT_SPRITE:
if (!doc_e->bin_data && doc->flags&DOCEF_HAS_BIN)
@@ -930,7 +949,8 @@ rc_adjust_xy:
if (tempb && dc) {
DCRst(dc);
dc->flags&=~(DCF_DONT_DRAW|DCF_LOCATE_NEAREST);
if (recalc!=DOC_RECALC_TO_SCREEN || doc_e->de_flags&DOCEF_DONT_DRAW)
if (recalc_flags&RECALCG_MASK!=RECALCt_TO_SCREEN ||
doc_e->de_flags&DOCEF_DONT_DRAW)
dc->flags|=DCF_DONT_DRAW;
bptr=tempb->data;
ii=SpriteTypeMask(bptr);
@@ -953,7 +973,8 @@ rc_adjust_xy:
dc->color=i;
if (find_cursor)
dc->flags|=DCF_LOCATE_NEAREST;
if (recalc==DOC_RECALC_TO_SCREEN && doc->cur_sprite==bptr) {
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN &&
doc->cur_sprite==bptr) {
dc->flags|=DCF_LOCATE_NEAREST;
dc->cur_x=ip.pos.x;
dc->cur_y=ip.pos.y;
@@ -990,7 +1011,8 @@ rc_adjust_xy:
}
Sprite3(dc,xx,yy,zz,bptr);
dc->depth_buf=NULL;
if (recalc==DOC_RECALC_TO_SCREEN && doc->cur_sprite==bptr)
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN &&
doc->cur_sprite==bptr)
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) {
@@ -1000,7 +1022,8 @@ rc_adjust_xy:
}
break;
case DOCT_SONG:
if (sys_focus_task==win_task && recalc==DOC_RECALC_TO_SCREEN &&
if (sys_focus_task==win_task &&
recalc_flags&RECALCG_MASK==RECALCt_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))) {
@@ -1014,6 +1037,11 @@ rc_adjust_xy:
case DOCT_CLEAR:
next_clear_found=doc_e;
break;
case DOCT_HTML_CODE:
if (recalc_flags&RECALCF_TO_HTML &&
doc_e->de_flags&DOCEF_TAG && doc_e->tag)
x-=StrLen(doc_e->tag);
break;
case DOCT_NUM_TYPES-1: //nobound_switch
default:
break;
@@ -1119,6 +1147,12 @@ rc_skip:
}
if (full_refresh) {
if (doc->cur_entry==doc && recalc_flags&RECALCF_ADD_CURSOR) {
doc_e2=DocEntryNewBase(doc,DOCT_CURSOR,,x,y,doc->page_line_num);
MemCpy(&doc_e2->settings,s,sizeof(CDocSettings));
QueInsRev(doc_e2,doc);
}
if (doc->min_x>doc->max_x) {
doc->max_x=0;
doc->min_x=0;
@@ -1200,8 +1234,8 @@ rc_skip:
doc->line=doc->y+1;
doc->col=doc->x+1;
if (has_cursor) {
if (recalc==DOC_RECALC_TO_SCREEN) {
if (recalc_flags&RECALCF_HAS_CURSOR) {
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN) {
x=0;
y=0;
} else {
@@ -1229,7 +1263,8 @@ rc_skip:
doc->line_start_col=doc->x+x;
}
}
if (recalc==DOC_RECALC_TO_SCREEN && has_cursor) {
if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN &&
recalc_flags&RECALCF_HAS_CURSOR) {
x=doc->x-doc->line_start_col+left +scroll_x/FONT_WIDTH;
y=doc->y-doc->top_line_num+top+scroll_y/FONT_HEIGHT;
if (0<=x<=right && 0<=y<=bottom &&
@@ -1275,10 +1310,10 @@ rc_skip:
i=num_entries-doc->max_entries;
if (next_clear_found) {
DocDelToEntry(doc,next_clear_found);
DocRecalc(doc,has_cursor,recalc);
DocRecalc(doc,recalc_flags);
} else if (i>1024) {
DocDelToNum(doc,i);
DocRecalc(doc,has_cursor,recalc);
DocRecalc(doc,recalc_flags);
}
}
DCDel(dc);
+12 -5
View File
@@ -89,7 +89,7 @@ public U0 DocTop(CDoc *doc=NULL)
DocUnlock(doc);
}
public U0 DocCenter(CDoc *doc=NULL,I64 recalc=DOC_RECALC)
public U0 DocCenter(CDoc *doc=NULL,I64 recalc_flags=RECALCt_NORMAL)
{//Center win on doc cursor, cur_entry.
Bool unlock;
CTask *task;
@@ -97,7 +97,7 @@ public U0 DocCenter(CDoc *doc=NULL,I64 recalc=DOC_RECALC)
return;
unlock=DocLock(doc);
task=doc->win_task;
DocRecalc(doc,FALSE,recalc);
DocRecalc(doc,recalc_flags);
if (!(doc->flags&DOCF_BORDER_DOC))
doc->top_line_num=doc->y-(task->win_height+1)>>1;
if (unlock)
@@ -137,6 +137,13 @@ public Bool DocCursor(Bool show=OFF,CDoc *doc=NULL)
return !LBEqu(&doc->flags,DOCf_HIDE_CURSOR,!show);
}
public Bool DocHighlightCursor(Bool show=OFF,CDoc *doc=NULL)
{//Highlight or Don't highlight cursor.
if (!doc && !(doc=DocPut))
return FALSE;
return !LBEqu(&doc->flags,DOCf_DONT_HIGHLIGHT_CURSOR,!show);
}
public Bool DocScroll(Bool val=OFF,CDoc *doc=NULL)
{//Turn scroll bars OFF/ON.
if (!doc && !(doc=DocPut))
@@ -192,12 +199,12 @@ U0 DocUpdateTaskDocs(CTask *task)
if (task->border_src==BDS_ED_FILENAME_DRV)
task->border_attr=DrvTextAttrGet(*doc->filename.name);
if (task->title_src==TTS_ED_FILENAME)
MemCpy(task->task_title,doc->filename.name,TASK_TITLE_LEN);
DocRecalc(doc,TRUE,DOC_RECALC_TO_SCREEN);
MemCpy(task->task_title,doc->filename.name,STR_LEN-1);
DocRecalc(doc,RECALCt_TO_SCREEN|RECALCF_HAS_CURSOR);
}
if ((doc=DocBorder(task)) && !(doc->flags&DOCF_DONT_SHOW)) {
WinScrollNull(task,&saved_scroll);
DocRecalc(doc,FALSE,DOC_RECALC_TO_SCREEN);
DocRecalc(doc,RECALCt_TO_SCREEN);
WinScrollRestore(task,&saved_scroll);
}
}
+2 -1
View File
@@ -26,7 +26,8 @@ public CDoc *DocBorderNew(CDoc *pdoc)
doc_e->tag_cb=&EdDollarTypeCB;
}
DocPrint(bdoc,"$$CM+H+TY+NC,0,-1$$");
doc_e=DocPrint(bdoc,"$$DA+H-TRM-P+BD+RD+CX+IV,140,A=\"%%s...\",SCX=15$$");
doc_e=DocPrint(bdoc,"$$DA+H-TRM-P+BD+RD+CX+IV,LEN=STR_LEN-1,"
"A=\"%%s...\",SCX=15$$");
doc_e->data=&Fs->task_title;
DocDataFmt(bdoc,doc_e);
DocPrint(bdoc,"$$CM+H+NC,1,0$$$$TX+H+BD+IV,\"%X\"$$",Fs);
+150 -127
View File
@@ -31,12 +31,12 @@ I64 PopUpLinkType(Bool include_anchor)
class CEdFileLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,511,A=\"File :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,LEN=511,A=\"File :%s\"$$\n";
I64 book;
U8 aux[512];
I64 num;
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -44,12 +44,12 @@ class CEdFileLink
class CEdFileAnchorLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,511,A=\"File :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,LEN=511,A=\"File :%s\"$$\n";
I64 book;
U8 aux[512] fmtstr "$$DA-P,511,A=\"Anchor Label :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Anchor Label :%s\"$$\n";
I64 num;
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -57,12 +57,12 @@ class CEdFileAnchorLink
class CEdFileFindLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,511,A=\"File :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,LEN=511,A=\"File :%s\"$$\n";
I64 book;
U8 aux[512] fmtstr "$$DA-P,511,A=\"Str :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,511,A=\"Occurrence Num:%04d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Str :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,A=\"Occurrence Num:%04d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -70,12 +70,12 @@ class CEdFileFindLink
class CEdFileLineLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,511,A=\"File :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,LEN=511,A=\"File :%s\"$$\n";
I64 book;
U8 aux[512];
I64 num fmtstr "$$DA-TRM,511,A=\"Line Num :%04d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,A=\"Line Num :%04d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -83,12 +83,12 @@ class CEdFileLineLink
class CEdManPageLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512];
I64 book;
U8 aux[512] fmtstr "$$DA-P,511,A=\"Label :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Label :%s\"$$\n";
I64 num;
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -96,12 +96,12 @@ class CEdManPageLink
class CEdAddrLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512];
I64 book;
U8 aux[512] fmtstr "$$DA-P,511,A=\"Addr Exp :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,511,A=\"Bin Size :%04d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Addr Exp :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,A=\"Bin Size :%04d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -109,12 +109,12 @@ class CEdAddrLink
class CEdPlaceAnchor
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512];
I64 book;
U8 aux[512] fmtstr "$$DA-P,511,A=\"Anchor Label :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Anchor Label :%s\"$$\n";
I64 num;
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up,
quote fmtstr "$$CB,\"Quote\"$$\n",
hide fmtstr "$$CB,\"Hide\"$$\n";
@@ -122,13 +122,13 @@ class CEdPlaceAnchor
class CEdBibleLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512];
I64 book fmtstr "$$LS,D=\"ST_BIBLE_BOOKS\"$$\n";
U8 aux[512] fmtstr "$$DA-P,511,A=\"Chapter Verse :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Chapter Verse :%s\"$$\n";
I64 num;
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -136,12 +136,12 @@ class CEdBibleLink
class CEdDefLink
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512];
I64 book;
U8 aux[512] fmtstr "$$DA-P,511,A=\"Word :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,511,A=\"Def Num :%4d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 aux[512] fmtstr "$$DA-P,LEN=511,A=\"Word :%s\"$$\n";
I64 num fmtstr "$$DA-TRM,A=\"Def Num :%4d\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -149,12 +149,12 @@ class CEdDefLink
class CEdProject
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,511,A=\"File :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
file[512] fmtstr "$$DA-P,LEN=511,A=\"File :%s\"$$\n";
I64 book;
U8 aux[512];
I64 num;
U8 html_link[512] fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
U8 html_link[512] fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
Bool pop_up fmtstr "$$CB,\"PopUp\"$$\n",
quote fmtstr "$$CB,\"Quote\"$$\n",
hide;
@@ -433,13 +433,13 @@ U0 EdInsColor()
class CEdPageSetting1
{
U8 val[512] fmtstr "$$DA-P,511,A=\"Setting Val:%s\"$$\n";
U8 val[512] fmtstr "$$DA-P,LEN=511,A=\"Setting Val:%s\"$$\n";
Bool winrel;
};
class CEdPageSetting2
{
U8 val[512] fmtstr "$$DA-P,511,A=\"Setting Val:%s\"$$\n";
U8 val[512] fmtstr "$$DA-P,LEN=511,A=\"Setting Val:%s\"$$\n";
Bool winrel fmtstr "$$CB,\"Win Relative\"$$\n";
};
@@ -474,6 +474,9 @@ U0 EdInsPageSetting()
Free(e);
}
#define WIZ_HIGHLIGHT_ON (DOCT_ERROR+1)
#define WIZ_HIGHLIGHT_OFF (DOCT_ERROR+2)
I64 PopUpWidgetType()
{
I64 i;
@@ -492,7 +495,8 @@ I64 PopUpWidgetType()
"$$MU,\"Menu Val\",LE=DOCT_MENU_VAL$$\n"
"$$MU,\"Data\",LE=DOCT_DATA$$\n"
"$$MU,\"Hex Edit\",LE=DOCT_HEX_ED$$\n"
"$$MU,\"Syntax Highlighting\",LE=DOCT_HIGHLIGHT$$\n"
"$$MU,\"Syntax Highlight ON\",LE=WIZ_HIGHLIGHT_ON$$\n"
"$$MU,\"Syntax Highlight OFF\",LE=WIZ_HIGHLIGHT_OFF$$\n"
"$$MU,\"HTML\",LE=DOCT_HTML_CODE$$\n"
"$$MU,\"Song\",LE=DOCT_SONG$$\n"
"%s",ctrl_L_footer);
@@ -503,7 +507,7 @@ I64 PopUpWidgetType()
class CEdText
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n";
Bool left_x fmtstr "$$CB,\"Left X\"$$\n",
center_x fmtstr "$$CB,\"Center X\"$$\n",
right_x fmtstr "$$CB,\"Right X\"$$\n",
@@ -514,15 +518,15 @@ class CEdText
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",
fmtstr "$$DA-P,LEN=511,A=\"Scroll X Length Expression:%s\"$$\n",
shift_x [512]
fmtstr "$$DA-P,511,A=\"X Offset Expression :%s\"$$\n",
fmtstr "$$DA-P,LEN=511,A=\"X Offset Expression :%s\"$$\n",
shift_y [512]
fmtstr "$$DA-P,511,A=\"Y Offset Expression :%s\"$$\n",
fmtstr "$$DA-P,LEN=511,A=\"Y Offset Expression :%s\"$$\n",
define_str[512]
fmtstr "$$DA-P,511,A=\"Define Str :%s\"$$\n",
fmtstr "$$DA-P,LEN=511,A=\"Define Str :%s\"$$\n",
html_link[512]
fmtstr "$$DA-P,511,A=\"Html Link :%s\"$$\n";
fmtstr "$$DA-P,LEN=511,A=\"Html Link :%s\"$$\n";
};
U0 EdInsText()
@@ -566,8 +570,8 @@ U0 EdInsText()
class CEdSong
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
song[512] fmtstr "$$DA-P,511,A=\"Song :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
song[512] fmtstr "$$DA-P,LEN=511,A=\"Song :%s\"$$\n";
};
U0 EdInsSong()
@@ -578,22 +582,9 @@ U0 EdInsSong()
Free(e);
}
class CEdHighlight
{
Bool highlight_on fmtstr "$$CB,\"Highlight On\"$$\n";
};
U0 EdInsHighlight()
{
CEdHighlight *e=CAlloc(sizeof(CEdHighlight));
if (DocForm(e,,,,ctrl_L_footer))
"$$HL,%d$$",e->highlight_on;
Free(e);
}
class CEdHtmlCode
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Html Code:%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Html Code:%s\"$$\n";
};
U0 EdInsHtml()
@@ -607,11 +598,11 @@ U0 EdInsHtml()
class CEdMacroMenu
{
U8 tag[512]
fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
left_macro[512]
fmtstr "$$DA-P,511,A=\"Left Click Macro :%s\"$$\n",
fmtstr "$$DA-P,LEN=511,A=\"Left Click Macro :%s\"$$\n",
left_exp[512]
fmtstr "$$DA-P,511,A=\"Left Click Expression :%s\"$$\n";
fmtstr "$$DA-P,LEN=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",
@@ -623,11 +614,11 @@ class CEdMacroMenu
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",
fmtstr "$$DA-P,LEN=511,A=\"Scroll X Length Expression:%s\"$$\n",
shift_x[512]
fmtstr "$$DA-P,511,A=\"X Offset Expression :%s\"$$\n",
fmtstr "$$DA-P,LEN=511,A=\"X Offset Expression :%s\"$$\n",
shift_y[512]
fmtstr "$$DA-P,511,A=\"Y Offset Expression :%s\"$$\n";
fmtstr "$$DA-P,LEN=511,A=\"Y Offset Expression :%s\"$$\n";
};
U0 EdInsMacroMenu(Bool is_macro)
@@ -682,16 +673,17 @@ U0 EdInsMacroMenu(Bool is_macro)
class CEdButton
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n";
Bool popup fmtstr "$$CB,\"PopUp\"$$\n",
left_x fmtstr "$$CB,\"Left X \"$$\n",
center_x fmtstr "$$CB,\"Center X \"$$\n",
right_x fmtstr "$$CB,\"Right X \"$$\n",
margin_rel fmtstr "$$CB,\"Margin Rel X\"$$\n",
escape fmtstr "$$CB,\"Escape\"$$\n";
U8 left_macro[512] fmtstr "$$DA-P,511,A=\"Left Click Macro:%s\"$$\n";
U8 left_macro[512] fmtstr "$$DA-P,LEN=511,A=\"Left Click Macro:%s\"$$\n";
Bool left_is_auto fmtstr "$$CB,\"Left is AutoStr\"$$\n";
U8 left_exp[512] fmtstr "$$DA-P,511,A=\"Left Click Expression:%s\"$$\n";
U8 left_exp[512] fmtstr "$$DA-P,LEN=511,"
"A=\"Left Click Expression:%s\"$$\n";
Bool quote fmtstr "$$CB,\"Quote\"$$\n";
};
@@ -742,8 +734,8 @@ U0 EdInsButton()
class CEdCursorMovement
{
U8 left_exp[512] fmtstr "$$DA-P,511,A=\"X Expression (LE):%s\"$$\n",
right_exp[512] fmtstr "$$DA-P,511,A=\"Y Expression (RE):%s\"$$\n";
U8 left_exp[512] fmtstr "$$DA-P,LEN=511,A=\"X Expression (LE):%s\"$$\n",
right_exp[512] fmtstr "$$DA-P,LEN=511,A=\"Y Expression (RE):%s\"$$\n";
Bool left_x fmtstr "$$CB,\"Left X \"$$\n",
center_x fmtstr "$$CB,\"Center X \"$$\n",
right_x fmtstr "$$CB,\"Right X \"$$\n",
@@ -785,56 +777,87 @@ U0 EdInsCursorMovement()
Free(e);
}
class CEdData
class CEdDataNum
{
U8 fmt_str[512] fmtstr "$$DA-P,511,A=\"Format Str:%s\"$$\n";
I64 len fmtstr "$$DA,512,A=\"Length:%d\"$$\n";
Bool term fmtstr "$$CB,\"Terminator\"$$\n",
str fmtstr "$$CB,\"Str\"$$\n",
refresh fmtstr "$$CB,\"Refresh Data\"$$\n",
update fmtstr "$$CB,\"Update Data\"$$\n";
I64 type fmtstr "$$LS,D=\"ST_RAW_TYPES\"$$\n";
U8 fmt_str[512] fmtstr "$$DA-P,LEN=511,A=\"Format Str:%s\"$$\n";
I64 len;
Bool term fmtstr "$$CB,\"Form Field Terminator\"$$\n",
remalloc,
refresh fmtstr "$$CB,\"Refresh Data\"$$\n",
update fmtstr "$$CB,\"Update Data\"$$\n";
};
class CEdDataStr
{
U8 fmt_str[512] fmtstr "$$DA-P,LEN=511,A=\"Format Str:%s\"$$\n";
I64 len fmtstr "$$DA,A=\"Length:%d\"$$\n";
Bool term fmtstr "$$CB,\"Zero Terminator\"$$\n",
remalloc fmtstr "$$CB,\"Remalloc for Unlimited Length\"$$\n",
refresh fmtstr "$$CB,\"Refresh Data\"$$\n",
update fmtstr "$$CB,\"Update Data\"$$\n";
};
U0 EdInsData()
{
I64 i,type=RT_I64;
U8 *st,buf[512],raw_type[16];
CEdData *e=CAlloc(sizeof(CEdData));
CEdDataNum *e=CAlloc(sizeof(CEdDataNum));
e->term=TRUE;
e->len=512;
e->type=RT_I64;
if (DocForm(e,,,,ctrl_L_footer)) {
e->len=DOCE_LEN_DFT;
if ((i=PopUpPickDefineSub("ST_NATURAL_TYPES"))>=0) {
*buf=0;
if (e->type==RT_I64)
*raw_type=0;
else
StrPrint(raw_type,",RT=%Z",e->type,"ST_RAW_TYPES");
if (e->str) CatPrint(buf,"-P");
if (!e->term) CatPrint(buf,"-TRM");
if (e->refresh) CatPrint(buf,"+RD");
if (e->update) CatPrint(buf,"+UD");
i+=RT_I8;
if (i==RT_F32)
i=RT_F64;
if (i==RT_UF32) {//U8 *
i=DocForm(e(CEdDataStr *),,,,ctrl_L_footer);
if (e->remalloc) {
CatPrint(buf,"+M");
e->term=TRUE;
} else
CatPrint(buf,"-P");
} else {
type=i;
i=DocForm(e,,,,ctrl_L_footer);
}
if (i) {
if (type==RT_I64)
*raw_type=0;
else
StrPrint(raw_type,",RT=%Z",type,"ST_RAW_TYPES");
st=MStrPrint("%q",e->fmt_str);
"$$$$DA%s,%d%s,A=\\\"%Q\\\"$$$$",buf,e->len,raw_type,st;
Free(st);
if (!e->term) CatPrint(buf,"-TRM");
if (e->refresh) CatPrint(buf,"+RD");
if (e->update) CatPrint(buf,"+UD");
st=MStrPrint("%q",e->fmt_str);
if (e->remalloc)
"$$$$DA%s,A=\\\"%Q\\\"$$$$",buf,st;
else if (e->len==DOCE_LEN_DFT)
"$$$$DA%s%s,A=\\\"%Q\\\"$$$$",buf,raw_type,st;
else
"$$$$DA%s,LEN=%d%s,A=\\\"%Q\\\"$$$$",buf,e->len,raw_type,st;
Free(st);
}
}
Free(e);
}
class CEdCheckBox
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n";
Bool refresh fmtstr "$$CB,\"Refresh Data\"$$\n";
I64 type fmtstr "$$LS,D=\"ST_RAW_TYPES\"$$\n";
I64 type fmtstr "$$LS,D=\"ST_INT_SIZE_TYPES\"$$\n";
};
U0 EdInsCheckBox()
{
U8 *st,buf[512],raw_type[16];
CEdCheckBox *e=CAlloc(sizeof(CEdCheckBox));
e->type=RT_I8;
e->type=RT_I8-RT_I8;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
e->type+=RT_I8;
if (e->type==RT_I8)
*raw_type=0;
else
@@ -849,19 +872,20 @@ U0 EdInsCheckBox()
class CEdLst
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Dft Select :%s\"$$\n",
define_str[512] fmtstr "$$DA-P,511,A=\"Define Str :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Dft Select :%s\"$$\n",
define_str[512] fmtstr "$$DA-P,LEN=511,A=\"Define Str :%s\"$$\n";
Bool refresh fmtstr "$$CB,\"Refresh Data\"$$\n";
I64 type fmtstr "$$LS,D=\"ST_RAW_TYPES\"$$\n";
I64 type fmtstr "$$LS,D=\"ST_INT_SIZE_TYPES\"$$\n";
};
U0 EdInsLst()
{
U8 *st1,*st2,buf[512],raw_type[16];
CEdLst *e=CAlloc(sizeof(CEdLst));
e->type=RT_I64;
e->type=RT_I64-RT_I8;
if (DocForm(e,,,,ctrl_L_footer)) {
*buf=0;
e->type+=RT_I8;
if (e->type==RT_I64)
*raw_type=0;
else
@@ -884,8 +908,8 @@ U0 EdInsLst()
class CEdHexEd
{
I64 cnt fmtstr "$$DA,512,A=\"Count:%d\"$$\n",
cols fmtstr "$$DA,512,A=\"Columns:%d\"$$\n";
I64 cnt fmtstr "$$DA,A=\"Count:%d\"$$\n",
cols fmtstr "$$DA,A=\"Columns:%d\"$$\n";
Bool zero fmtstr "$$CB,\"Zero Based\"$$\n",
refresh fmtstr "$$CB,\"Refresh Data\"$$\n";
};
@@ -908,11 +932,12 @@ U0 EdInsHexEd()
class CEdBin
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n";
I64 bin_num fmtstr "$$DA,512,A=\"Bin Num:%d\"$$\n";
U8 bin_ptr_link_file[512] fmtstr "$$DA-P,511,A=\"File:%s\"$$\n";
I64 bin_ptr_link_bin_num fmtstr "$$DA,512,A=\"File Bin Num:%d\"$$\n";
U8 bin_ptr_link_tag[512] fmtstr "$$DA-P,511,A=\"File Bin Tag:%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,"
"A=\"Tag Text :%s\"$$\n";
I64 bin_num fmtstr "$$DA,A=\"Bin Num:%d\"$$\n";
U8 bin_ptr_link_file[512] fmtstr "$$DA-P,LEN=511,A=\"File:%s\"$$\n";
I64 bin_ptr_link_bin_num fmtstr "$$DA,A=\"File Bin Num:%d\"$$\n";
U8 bin_ptr_link_tag[512] fmtstr "$$DA-P,LEN=511,A=\"File Bin Tag:%s\"$$\n";
};
U0 EdInsBin(I64 bin_num,I64 type)
@@ -945,8 +970,8 @@ U0 EdInsBin(I64 bin_num,I64 type)
class CEdTree
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n";
I64 indent fmtstr "$$DA,511,A=\"Indention:%d\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n";
I64 indent fmtstr "$$DA,A=\"Indention:%d\"$$\n";
Bool collapsed fmtstr "$$CB,\"Collapsed\"$$\n";
};
@@ -1015,8 +1040,11 @@ U0 EdInsWidgetWiz()
case DOCT_SONG:
EdInsSong;
break;
case DOCT_HIGHLIGHT:
EdInsHighlight;
case WIZ_HIGHLIGHT_ON:
"$$HL,1$$";
break;
case WIZ_HIGHLIGHT_OFF:
"$$HL,0$$";
break;
case DOCT_HTML_CODE:
EdInsHtml;
@@ -1057,15 +1085,10 @@ I64 PopUpSpriteType()
return i;
}
class CEdJustSprite
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n";
};
class CEdMacroSprite
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
exp[512] fmtstr "$$DA-P,511,A=\"Macro :%s\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
exp[512] fmtstr "$$DA-P,LEN=511,A=\"Macro :%s\"$$\n";
Bool escape fmtstr "$$CB,\"Escape\"$$\n",
popup fmtstr "$$CB,\"PopUp\"$$\n",
is_auto fmtstr "$$CB,\"AutoStr\"$$\n";
@@ -1073,9 +1096,11 @@ class CEdMacroSprite
class CEdMenuSprite
{
U8 tag[512] fmtstr "$$DA-P,511,A=\"Tag Text :%s\"$$\n",
exp[512] fmtstr "$$DA-P,511,A=\"Expression :%s\"$$\n";
Bool escape fmtstr "$$CB,\"Escape\"$$\n";
U8 tag[512] fmtstr "$$DA-P,LEN=511,A=\"Tag Text :%s\"$$\n",
exp[512] fmtstr "$$DA-P,LEN=511,A=\"Expression :%s\"$$\n";
Bool escape fmtstr "$$CB,\"Escape\"$$\n",
popup,
is_auto;
};
U8 *EdSpriteLink(Bool *_pop_up,U8 **_html_link)
@@ -1100,15 +1125,13 @@ U8 *EdSprite(I64 bin_num)
*buf=0;
switch (type) {
case EST_SPRITE:
StrPrint(e->tag,"<%d>",bin_num);
if (DocForm(e,"CEdJustSprite",,,ctrl_L_footer))
st1=MStrPrint("\"%Q\"",e->tag);
st1=MStrPrint("\"<%d>\"",bin_num);
break;
case EST_SPRITE_MACRO:
e->escape=TRUE;
if (DocForm(e,,,,ctrl_L_footer)) {
CatPrint(buf,"+UL");
if (e->is_auto)CatPrint(buf,"+LA");
if (e->is_auto) CatPrint(buf,"+LA");
if (e->popup) CatPrint(buf,"+PU");
if (e->escape) CatPrint(buf,"+X");
st=MStrPrint("%q",e->exp);
+1 -1
View File
@@ -7,7 +7,7 @@ class MakeSongSettings
I64 complexity fmtstr "$$LS,D=\"ST_RHYTHM_COMPLEXITY\"$$\n";
Bool rests fmtstr "$$CB,\"Rests\"$$\n";
Bool six_eight fmtstr "$$CB,\"Six Eight\"$$\n";
I64 octave fmtstr "$$DA-TRM,32,A=\"Octave:%d\"$$\n";
I64 octave fmtstr "$$DA-TRM,A=\"Octave:%d\"$$\n";
};
U0 InsNote(MakeSongSettings *mss,U8 *buf,I64 k,I64 *j)
+1 -1
View File
@@ -88,7 +88,7 @@ Favorite animal? $FG,4$"Elephant two"$FG$
Favorite animal? $FG,4$"Bears"$FG$
Favorite color? $FG,4$"Jude" (Jade Blue?)$FG$
Favorite color? $FG,4$"Gold"$FG$
Favorite color? $FG,4$$TX,"\"Iceberg\" blue",HTML="http://en.wikipedia.org/wiki/Blue_iceberg"$$FG$
Favorite color? $FG,4$$TX,"\"Iceberg\" blue",HTML="https://upload.wikimedia.org/wikipedia/commons/3/38/Blue_ice_in_South_Greenland_-_Visit_Greenland.jpg"$$FG$
Money? $FG,4$"Enough vehemently better"$FG$
$FG,4$"Pride [or] money, choose_one"$FG$
Favorite car? $FG,4$Beamer$FG$
+1
View File
@@ -153,6 +153,7 @@ public class CSpritePtMeshU8s : CSpriteBase
public class CSprite
{
CSprite *next,*last;
Bool selected;
U0 start;
union {
U8 type;
+50 -18
View File
@@ -4,11 +4,16 @@ 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;
I64 d,dist;
CColorROPU32 c,color=dc->color,bkcolor=dc->bkcolor;
if (dc->flags & DCF_LOCATE_NEAREST)
dc->dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y);
if (dc->flags & DCF_LOCATE_NEAREST) {
dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_RECORD_EXTENTS) {
if (x<dc->min_x) dc->min_x=x;
if (x>dc->max_x) dc->max_x=x;
@@ -65,7 +70,7 @@ 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,
I64 i,j,k,k1,kk,kk1,w1,h1,w2,h2,dist,
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,
@@ -95,8 +100,13 @@ 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)
dc->dist=DistSqrI64(x+img->width>>1,y+img->height>>1,dc->cur_x,dc->cur_y);
if (dc->flags & DCF_LOCATE_NEAREST) {
dist=DistSqrI64(x+img->width>>1,y+img->height>>1,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_SCREEN_BITMAP) {
if (x+w1<0) w1=-x;
if (x+w2>win_task->pix_right+1)
@@ -632,7 +642,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,reg color_mask;
j,k1,kk1,w1,h1,w2,h2,reg bit_shift,reg color_mask,dist;
CColorROPU32 color,c;
CTask *win_task;
@@ -657,8 +667,13 @@ 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)
dc->dist=DistSqrI64(x+w2>>1,y+h2>>1,dc->cur_x,dc->cur_y);
if (dc->flags & DCF_LOCATE_NEAREST) {
dist=DistSqrI64(x+w2>>1,y+h2>>1,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_SCREEN_BITMAP) {
if (x+w1<0) w1=-x;
if (x+w2>win_task->pix_right+1)
@@ -910,7 +925,7 @@ 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,
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,
win_z_buf_line_inc,win_z_buf_line_dec,win_z_num,color_mask;
@@ -943,9 +958,13 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h)
}
if (dc->flags & DCF_LOCATE_NEAREST) {//TODO:Untested
if (x<=dc->cur_x<=x+w && y<=dc->cur_y<=y+h)
dc->dist=0;
dist=0;
else
dc->dist=DistSqrI64(x+w>>1,y+h>>1,dc->cur_x,dc->cur_y);
dist=DistSqrI64(x+w>>1,y+h>>1,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_SCREEN_BITMAP) {
if (x+w1<0) w1=-x;
@@ -1418,7 +1437,7 @@ 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;
I64 result=0,d,x=*x1,x2,x3,y3,dist;
Bool plot,dither,probability_dither,
not_color=ToBool(dc->flags&DCF_FILL_NOT_COLOR);
U8 *dst,*dst2;
@@ -1494,8 +1513,13 @@ 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)
dc->dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y);
if (dc->flags & DCF_LOCATE_NEAREST) {
dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_RECORD_EXTENTS) {
if (x3<dc->min_x) dc->min_x=x3;
if (x3>dc->max_x) dc->max_x=x3;
@@ -1566,8 +1590,13 @@ 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)
dc->dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y);
if (dc->flags & DCF_LOCATE_NEAREST) {
dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_RECORD_EXTENTS) {
if (x3<dc->min_x) dc->min_x=x3;
if (x3>dc->max_x) dc->max_x=x3;
@@ -1692,7 +1721,10 @@ 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);
dc->dist=dist;
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_DONT_DRAW)
goto gr_done;
+8 -3
View File
@@ -305,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;
I64 _x,_y,_z,i,j,w,dist;
CColorROPU32 old_color=dc->color;
Bool record,was_transform=FALSE,was_symmetry=FALSE;
CTask *win_task;
@@ -382,8 +382,13 @@ 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)
dc->dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y);
if (dc->flags & DCF_LOCATE_NEAREST) {
dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y);
if (dist<dc->nearest_dist) {
dc->nearest_dist=dist;
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
}
}
if (dc->flags & DCF_RECORD_EXTENTS) {
if (x-w<dc->min_x) dc->min_x=x-w;
if (y-w<dc->min_y) dc->min_y=y-w;
+6 -10
View File
@@ -31,9 +31,10 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,
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;
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;
@@ -248,10 +249,6 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,
}
break;
}
if (dc->flags & DCF_LOCATE_NEAREST && dc->dist<dc->nearest_dist) {
dc->nearest_dist=dc->dist;
dc->nearest_sprite_elem_num=cur_sprite_elem_num;
}
cur_sprite_elem_num++;
if (just_one_elem) break;
tempg(U8 *)+=SpriteElemSize(tempg);
@@ -276,15 +273,14 @@ 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 r[16],*old_r=dc->r,old_m[16],
I64 r[16],*old_r=dc->r,new_m[16],
old_flags=dc->flags&DCF_TRANSFORMATION;
MemCpy(old_m,m,16*sizeof(I64));
MemCpy(new_m,m,16*sizeof(I64));
dc->flags|=DCF_TRANSFORMATION;
Mat4x4TranslationAdd(m,x,y,z);
dc->r=Mat4x4MulMat4x4Equ(r,old_r,m);
Mat4x4TranslationAdd(new_m,x,y,z);
dc->r=Mat4x4MulMat4x4Equ(r,old_r,new_m);
Sprite3(dc,0,0,0,elems);
dc->r=old_r;
MemCpy(m,old_m,16*sizeof(I64));
dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags;
}
+1 -15
View File
@@ -54,7 +54,6 @@ I64 PopUpSpriteBitMap(CColorROPU32 color,I64 width)
st1=buf;
st2="";
}
DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite BitMap Menu\"$$\n"
"$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/SpriteBitMap.TXT.Z\"$$\n"
"\n$$LTBLUE$$$$MU-UL,\"Color %s\",LE=GBM_COLOR$$\n"
@@ -262,12 +261,10 @@ bm_menu:
case GBM_MAIN_MENU:
result=GE_CONT;
goto bm_done;
case GBM_COLOR:
i=PopUpColor(,,FALSE);
if (i>=0) color=i;
goto bm_menu;
case GBM_FIND_AND_REPLACE:
i=PopUpColor("Find Color\n",,FALSE);
if (i>=0) {
@@ -278,12 +275,10 @@ bm_menu:
}
}
goto bm_menu;
case GBM_TRIM_TO_EXTENTS:
GrBitMapEdTrimToExtents(&img,&xx1,&yy1,&xx2,&yy2,bkcolor);
GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img);
goto bm_menu;
case GBM_ADD_OUTLINE:
i=PopUpRangeI64(1,16,1,"Outline Width\n");
if (i>=0) {
@@ -291,7 +286,6 @@ bm_menu:
GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img);
}
goto bm_menu;
case GBM_ETCH:
i=PopUpRangeI64(1,16,1,"Etch Width\n");
if (i>=0) {
@@ -299,39 +293,33 @@ bm_menu:
GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img);
}
goto bm_menu;
case GBM_SAVE_BMP:
*filename.name=0;
if (DocForm(&filename) && *filename.name)
BMPWrite(filename.name,img);
goto bm_menu;
case GBM_SAVE_GRA:
*filename.name=0;
if (DocForm(&filename) && *filename.name)
GRAWrite(filename.name,img,DCSF_COMPRESSED|DCSF_PALETTE_GET);
goto bm_menu;
case GBM_DITHER_COLOR:
i=PopUpColorDither;
if (i>=0) color=i;
goto bm_menu;
case GBM_WIDTH:
i=PopUpRangeI64(1,16,1,"Pen Width\n");
if (i>=0) width=i;
goto bm_menu;
case GBM_UNDO:
if (undo) {
Beep;
DCFill(img,bkcolor);
img->color=ROP_EQU;
GrBlot(img,0,0,undo);
DCDel(undo);
undo=NULL;
}
goto bm_menu;
case GBM_PT:
case GBM_LINE:
case GBM_ARROW:
@@ -347,7 +335,6 @@ bm_menu:
case GBM_PASTE_TRANSPARENT:
mode=i;
break;
case GBM_TEXT:
case GBM_TEXT_BOX:
case GBM_TEXT_DIAMOND:
@@ -358,7 +345,6 @@ bm_menu:
else
goto bm_menu;
break;
}
DCDel(undo);
undo=DCExtract(img,0,0,img->width-1,img->height-1);
+404 -345
View File
@@ -1,5 +1,54 @@
#help_index "Graphics/Sprite;Sprites"
CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *root,I64 elem_num,
I64 x=0,I64 y=0,CColorROPU32 *_color=NULL,I64 *_width=NULL,
I64 *_xx=NULL,I64 *_yy=NULL)
{
CSprite *result=root->next;
I64 width=1,xx=0,yy=0;
CColorROPU32 color=BLACK;
if (dc) DCRst(dc);
while (elem_num-->0 && result!=root) {
switch (result->type) {
case SPT_COLOR:
color=result->c.color;
if (dc) dc->color=color;
break;
case SPT_DITHER_COLOR:
color=result->d.dither_color.u8[0]|
result->d.dither_color.u8[1]<<COLORROP_BITS|ROPF_DITHER;
if (dc) dc->color=color;
break;
case SPT_WIDTH:
width=result->w.width;
if (dc) dc->pen_width=width;
break;
case SPT_SHIFT:
xx+=result->p.x1;
yy+=result->p.y1;
x+=result->p.x1;
y+=result->p.y1;
break;
case SPT_PLANAR_SYMMETRY:
if (dc) {
if (DCSymmetry3Set(dc,result->pp.x1+x,result->pp.y1+y,0,
result->pp.x2+x,result->pp.y2+y,0,
result->pp.x2+x,result->pp.y2+y,1))
dc->flags|=DCF_SYMMETRY;
else
dc->flags&=~DCF_SYMMETRY;
}
break;
}
result=result->next;
}
if (_color) *_color=color;
if (_width) *_width=width;
if (_xx) *_xx=xx;
if (_yy) *_yy=yy;
return result;
}
Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64)
{
CSprite *tempg=CAlloc(SpriteElemQuedBaseSize(SPT_PT));
@@ -10,23 +59,6 @@ Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64)
return TRUE;
}
CSprite *SpriteElemNum2QueEntry(CSprite *root,I64 elem_num,
I64 *_x=NULL,I64 *_y=NULL)
{
I64 xx=0,yy=0;
CSprite *result=root->next;
while (result!=root && elem_num--) {
if (result->type==SPT_SHIFT) {
xx+=result->p.x1;
yy+=result->p.y1;
}
result=result->next;
}
if (_x) *_x=xx;
if (_y) *_y=yy;
return result;
}
CSprite *Sprite2SpriteQue(U8 *elems)
{
I64 s;
@@ -37,6 +69,7 @@ CSprite *Sprite2SpriteQue(U8 *elems)
tempg1=MAlloc(SpriteElemSize(tempg)+offset(CSprite.start));
s=SpriteElemSize(tempg);
MemCpy(&tempg1->start,&tempg->start,s);
tempg1->selected=FALSE;
QueIns(tempg1,result->last);
tempg(U8 *)+=s;
}
@@ -65,8 +98,9 @@ U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL)
return result;
}
U0 SpriteEdUpdate(CDoc *doc,CDocBin *tempb,CSprite *root)
U0 SpriteEdUpdate(CDoc *doc,CDocEntry *doc_ce,CSprite *root)
{
CDocBin *tempb=doc_ce->bin_data;
I64 size;
Bool unlock=DocLock(doc);
Free(tempb->data);
@@ -83,63 +117,64 @@ U0 SpriteSetOrigin(CSprite *root,I64 dx,I64 dy,I64 dz)
CD3I32 *p;
CSprite *tempg=root->next;
while (tempg!=root) {
switch (tempg->type) {
case SPT_ARROW:
case SPT_LINE:
case SPT_PLANAR_SYMMETRY:
case SPT_RECT:
case SPT_ROTATED_RECT:
tempg->pp.x2+=dx;
tempg->pp.y2+=dy;
case SPT_PT:
case SPT_FLOOD_FILL:
case SPT_FLOOD_FILL_NOT:
case SPT_TEXT:
case SPT_TEXT_BOX:
case SPT_TEXT_DIAMOND:
case SPT_CIRCLE:
case SPT_BITMAP:
case SPT_ELLIPSE:
case SPT_POLYGON:
tempg->p.x1+=dx;
tempg->p.y1+=dy;
break;
case SPT_POLYLINE:
ptr=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++) {
ptr[i<<1]+=dx;
ptr[i<<1+1]+=dy;
}
break;
case SPT_POLYPT:
tempg->npu.x+=dx;
tempg->npu.y+=dy;
break;
case SPT_BSPLINE2:
case SPT_BSPLINE3:
case SPT_BSPLINE2_CLOSED:
case SPT_BSPLINE3_CLOSED:
p=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++,p++) {
p->x+=dx;
p->y+=dy;
p->z+=dz;
}
break;
case SPT_MESH:
p=&tempg->mu.u;
for (i=0;i<tempg->mu.vertex_cnt;i++,p++) {
p->x+=dx;
p->y+=dy;
p->z+=dz;
}
break;
case SPT_SHIFTABLE_MESH:
tempg->pmu.x+=dx;
tempg->pmu.y+=dy;
tempg->pmu.z+=dz;
break;
}
if (tempg->selected)
switch (tempg->type) {
case SPT_ARROW:
case SPT_LINE:
case SPT_PLANAR_SYMMETRY:
case SPT_RECT:
case SPT_ROTATED_RECT:
tempg->pp.x2+=dx;
tempg->pp.y2+=dy;
case SPT_PT:
case SPT_FLOOD_FILL:
case SPT_FLOOD_FILL_NOT:
case SPT_TEXT:
case SPT_TEXT_BOX:
case SPT_TEXT_DIAMOND:
case SPT_CIRCLE:
case SPT_BITMAP:
case SPT_ELLIPSE:
case SPT_POLYGON:
tempg->p.x1+=dx;
tempg->p.y1+=dy;
break;
case SPT_POLYLINE:
ptr=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++) {
ptr[i<<1]+=dx;
ptr[i<<1+1]+=dy;
}
break;
case SPT_POLYPT:
tempg->npu.x+=dx;
tempg->npu.y+=dy;
break;
case SPT_BSPLINE2:
case SPT_BSPLINE3:
case SPT_BSPLINE2_CLOSED:
case SPT_BSPLINE3_CLOSED:
p=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++,p++) {
p->x+=dx;
p->y+=dy;
p->z+=dz;
}
break;
case SPT_MESH:
p=&tempg->mu.u;
for (i=0;i<tempg->mu.vertex_cnt;i++,p++) {
p->x+=dx;
p->y+=dy;
p->z+=dz;
}
break;
case SPT_SHIFTABLE_MESH:
tempg->pmu.x+=dx;
tempg->pmu.y+=dy;
tempg->pmu.z+=dz;
break;
}
tempg=tempg->next;
}
}
@@ -168,6 +203,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tempg)
tempg1->pwha.height=ToI64(m2)/0x10000;
tempg1->pwha.angle=-a1;
tempg1->selected=tempg->selected;
return tempg1;
}
@@ -208,6 +244,7 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tempg)
if (tempg1->pwha.height<1) tempg1->pwha.height=1;
tempg1->pwha.angle=-a1;
tempg1->selected=tempg->selected;
return tempg1;
}
@@ -249,12 +286,13 @@ CSprite *SpriteTransformRect(I64 *r,CSprite *tempg,F64
tempg1->ppa.y2=tempg1->ppa.y1+h;
tempg1->ppa.angle=-a1;
tempg1->selected=tempg->selected;
return tempg1;
}
CSprite *SpriteTransformBitmap(I64 *r,CSprite *tempg)
CSprite *SpriteTransformBitMap(I64 *r,CSprite *tempg)
{
CDC *img,*tempb;
CDC *img,*dc3;
U8 *elems;
I64 x,y,z,minx,maxx,miny,maxy,minz,maxz;
CSprite *tempg1;
@@ -292,7 +330,7 @@ CSprite *SpriteTransformBitmap(I64 *r,CSprite *tempg)
if (z<minx) minz=z;
if (z>maxx) maxz=z;
tempb=DCNew(maxx-minx+1,maxy-miny+1);
dc3=DCNew(maxx-minx+1,maxy-miny+1);
img=CAlloc(sizeof(CDC));
img->width=tempg->pwhu.width;
@@ -301,22 +339,22 @@ CSprite *SpriteTransformBitmap(I64 *r,CSprite *tempg)
img->body=&tempg->pwhu.u;
img->dc_signature=DCS_SIGNATURE_VAL;
tempb->color=TRANSPARENT;
GrRect(tempb,0,0,maxx-minx+1,maxy-miny+1);
dc3->color=TRANSPARENT;
GrRect(dc3,0,0,maxx-minx+1,maxy-miny+1);
Free(tempb->r);
DCMat4x4Set(tempb,r);
tempb->flags|=DCF_TRANSFORMATION;
Free(dc3->r);
DCMat4x4Set(dc3,r);
dc3->flags|=DCF_TRANSFORMATION;
tempb->x=-minx;
tempb->y=-miny;
tempb->z=-minz;
GrBlot3(tempb,0,0,0,img);
dc3->x=-minx;
dc3->y=-miny;
dc3->z=-minz;
GrBlot3(dc3,0,0,0,img);
Free(img);
elems=DC2Sprite(tempb);
tempb->r=NULL;
DCDel(tempb);
elems=DC2Sprite(dc3);
dc3->r=NULL;
DCDel(dc3);
tempg1=CAlloc(offset(CSprite.start)+MSize(elems));
MemCpy(tempg1(U8 *)+offset(CSprite.start),elems,MSize(elems));
tempg1->type=tempg->type;
@@ -342,177 +380,204 @@ U0 SpriteTransform(I64 *r,CSprite *root)
CD3I32 *p;
CSprite *tempg=root->next,root2,*tempg1,*tempg2,*tempg3;
while (tempg!=root) {
switch (tempg->type) {
case SPT_WIDTH:
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;
Mat4x4MulXYZ(r,&x,&y,&z);
tempg->pp.x2=x;
tempg->pp.y2=y;
case SPT_PT:
case SPT_FLOOD_FILL:
case SPT_FLOOD_FILL_NOT:
case SPT_TEXT:
case SPT_TEXT_BOX:
case SPT_TEXT_DIAMOND:
x=tempg->p.x1; y=tempg->p.y1; z=0;
Mat4x4MulXYZ(r,&x,&y,&z);
tempg->p.x1=x;
tempg->p.y1=y;
break;
case SPT_BITMAP:
tempg1=SpriteTransformBitmap(r,tempg);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_ROTATED_RECT:
tempg1=SpriteTransformRect(r,tempg,tempg->ppa.angle);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_RECT:
tempg1=SpriteTransformRect(r,tempg,0);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_CIRCLE:
tempg1=SpriteTransformCircle(r,tempg);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_ELLIPSE:
case SPT_POLYGON:
tempg1=SpriteTransformEllipse(r,tempg);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_POLYLINE:
ptr=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++) {
x=ptr[i<<1]; y=ptr[i<<1+1]; z=0;
if (tempg->selected)
switch (tempg->type) {
case SPT_WIDTH:
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;
Mat4x4MulXYZ(r,&x,&y,&z);
ptr[i<<1]=x;
ptr[i<<1+1]=y;
}
break;
case SPT_POLYPT:
QueInit(&root2);
x=tempg->npu.x; y=tempg->npu.y; z=0;
x1=x; y1=y; z1=z; //unrotated cur coordinates
Mat4x4MulXYZ(r,&x,&y,&z);
ptr=&tempg->npu.u;
k=tempg->npu.num*3;
x2=x; y2=y; z2=z; //rotated start coordinates
x3=x; y3=y; z3=z; //lag 1 rotated coordinates
for (i=0;i<k;i+=3) {
j=BFieldExtU32(ptr,i,3);
x1+=gr_x_offsets[j];
y1+=gr_y_offsets[j];
x=x1; y=y1; z=z1;
tempg->pp.x2=x;
tempg->pp.y2=y;
case SPT_PT:
case SPT_FLOOD_FILL:
case SPT_FLOOD_FILL_NOT:
case SPT_TEXT:
case SPT_TEXT_BOX:
case SPT_TEXT_DIAMOND:
x=tempg->p.x1; y=tempg->p.y1; z=0;
Mat4x4MulXYZ(r,&x,&y,&z);
Line(&root2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot);
x3=x; y3=y; z3=z;
}
tempg->p.x1=x;
tempg->p.y1=y;
break;
case SPT_BITMAP:
tempg1=SpriteTransformBitMap(r,tempg);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_ROTATED_RECT:
tempg1=SpriteTransformRect(r,tempg,tempg->ppa.angle);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_RECT:
tempg1=SpriteTransformRect(r,tempg,0);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_CIRCLE:
tempg1=SpriteTransformCircle(r,tempg);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_ELLIPSE:
case SPT_POLYGON:
tempg1=SpriteTransformEllipse(r,tempg);
QueIns(tempg1,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg1;
break;
case SPT_POLYLINE:
ptr=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++) {
x=ptr[i<<1]; y=ptr[i<<1+1]; z=0;
Mat4x4MulXYZ(r,&x,&y,&z);
ptr[i<<1]=x;
ptr[i<<1+1]=y;
}
break;
case SPT_POLYPT:
QueInit(&root2);
x=tempg->npu.x; y=tempg->npu.y; z=0;
x1=x; y1=y; z1=z; //unrotated cur coordinates
Mat4x4MulXYZ(r,&x,&y,&z);
ptr=&tempg->npu.u;
k=tempg->npu.num*3;
x2=x; y2=y; z2=z; //rotated start coordinates
x3=x; y3=y; z3=z; //lag 1 rotated coordinates
for (i=0;i<k;i+=3) {
j=BFieldExtU32(ptr,i,3);
x1+=gr_x_offsets[j];
y1+=gr_y_offsets[j];
x=x1; y=y1; z=z1;
Mat4x4MulXYZ(r,&x,&y,&z);
Line(&root2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot);
x3=x; y3=y; z3=z;
}
num=0;
tempg1=root2.next;
x3=0; y3=0; z3=0;
while (tempg1!=&root2) {
tempg2=tempg1->next;
if (tempg1->p.x1==x3 && tempg1->p.y1==y3) {
num=0;
tempg1=root2.next;
x3=0; y3=0; z3=0;
while (tempg1!=&root2) {
tempg2=tempg1->next;
if (tempg1->p.x1==x3 && tempg1->p.y1==y3) {
QueRem(tempg1);
Free(tempg1);
} else {
num++;
x3=tempg1->p.x1;
y3=tempg1->p.y1;
}
tempg1=tempg2;
}
tempg3=CAlloc(SpriteElemQuedBaseSize(SPT_POLYPT)+(num*3+7)>>3);
tempg3->npu.x=x2;
tempg3->npu.y=y2;
ptr=&tempg3->npu.u;
x3=0;y3=0; z3=0;
i=0;
tempg1=root2.next;
while (tempg1!=&root2) {
tempg2=tempg1->next;
BFieldOrU32(ptr,i,
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);
Free(tempg1);
} else {
num++;
x3=tempg1->p.x1;
y3=tempg1->p.y1;
tempg1=tempg2;
}
tempg1=tempg2;
}
tempg3=CAlloc(SpriteElemQuedBaseSize(SPT_POLYPT)+(num*3+7)>>3);
tempg3->npu.x=x2;
tempg3->npu.y=y2;
ptr=&tempg3->npu.u;
x3=0;y3=0; z3=0;
i=0;
tempg1=root2.next;
while (tempg1!=&root2) {
tempg2=tempg1->next;
BFieldOrU32(ptr,i,
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);
Free(tempg1);
tempg1=tempg2;
}
tempg3->type=SPT_POLYPT;
tempg3->npu.num=num;
QueIns(tempg3,tempg);
QueRem(tempg);
Free(tempg);
tempg=tempg3;
break;
case SPT_BSPLINE2:
case SPT_BSPLINE3:
case SPT_BSPLINE2_CLOSED:
case SPT_BSPLINE3_CLOSED:
p=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++,p++) {
x=p->x; y=p->y; z=p->z;
tempg3->type=SPT_POLYPT;
tempg3->npu.num=num;
QueIns(tempg3,tempg);
QueRem(tempg);
tempg3->selected=tempg->selected;
Free(tempg);
tempg=tempg3;
break;
case SPT_BSPLINE2:
case SPT_BSPLINE3:
case SPT_BSPLINE2_CLOSED:
case SPT_BSPLINE3_CLOSED:
p=&tempg->nu.u;
for (i=0;i<tempg->nu.num;i++,p++) {
x=p->x; y=p->y; z=p->z;
Mat4x4MulXYZ(r,&x,&y,&z);
p->x=x;
p->y=y;
p->z=z;
}
break;
case SPT_SHIFTABLE_MESH:
x=tempg->pmu.x; y=tempg->pmu.y; z=tempg->pmu.z;
Mat4x4MulXYZ(r,&x,&y,&z);
p->x=x;
p->y=y;
p->z=z;
}
break;
case SPT_SHIFTABLE_MESH:
x=tempg->pmu.x; y=tempg->pmu.y; z=tempg->pmu.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;i<tempg->pmu.vertex_cnt;i++,p++) {
x=p->x; y=p->y; z=p->z;
Mat4x4MulXYZ(r,&x,&y,&z);
p->x=x;
p->y=y;
p->z=z;
}
break;
case SPT_MESH:
p=&tempg->mu.u;
for (i=0;i<tempg->mu.vertex_cnt;i++,p++) {
x=p->x; y=p->y; z=p->z;
Mat4x4MulXYZ(r,&x,&y,&z);
p->x=x;
p->y=y;
p->z=z;
}
break;
}
tempg->pmu.x=x;
tempg->pmu.y=y;
tempg->pmu.z=z;
p=&tempg->pmu.u;
for (i=0;i<tempg->pmu.vertex_cnt;i++,p++) {
x=p->x; y=p->y; z=p->z;
Mat4x4MulXYZ(r,&x,&y,&z);
p->x=x;
p->y=y;
p->z=z;
}
break;
case SPT_MESH:
p=&tempg->mu.u;
for (i=0;i<tempg->mu.vertex_cnt;i++,p++) {
x=p->x; y=p->y; z=p->z;
Mat4x4MulXYZ(r,&x,&y,&z);
p->x=x;
p->y=y;
p->z=z;
}
break;
}
tempg=tempg->next;
}
}
I64 SpriteQueSelectCnt(CSprite *root,Bool val=TRUE)
{
I64 result=0;
CSprite *tempg=root->next;
val=ToBool(val);
while (tempg!=root) {
if (ToBool(tempg->selected)==val)
result++;
tempg=tempg->next;
}
return result;
}
I64 SpriteQueSelectAll(CSprite *root,Bool val=TRUE)
{
I64 result=0;
CSprite *tempg=root->next;
while (tempg!=root) {
tempg->selected=val;
result++;
tempg=tempg->next;
}
return result;
}
CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num)
{//For the side-bar
CSprite *result=CAlloc(sizeof(CSprite)),*tempg;
@@ -522,9 +587,10 @@ CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num)
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);
tempg=SpriteSetSettings(,root,doc_e->left_exp);
if (tempg!=root) {
tempg=MAllocIdentical(tempg);
tempg->selected=Bt(&doc_e->type,DOCEt_SELECTED);
if (*_cur_elem_num==doc_e->left_exp) {
*_cur_elem_num=num;
found=TRUE;
@@ -545,36 +611,36 @@ CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num)
U0 SpriteSideBarPickNew(CDoc *doc,CSprite *root,I64 old_num)
{
CSprite *tempg;
CDocEntry *doc_e=NULL;
CDocEntry *doc_cur_e=NULL,*doc_e;
I64 cur_elem_num=0;
U8 *st;
DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite SideBar\"$$\n"
"$$LK+PU+CX,\"Click for Help\","
"A=\"FI:::/Doc/SpriteSideBar.TXT.Z\"$$\n\n");
tempg=root->next;
while (tempg!=root) {
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++);
doc_e=doc_cur_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++);
} else {
DocPrint(doc,"$$LTBLUE$$");
DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++);
doc_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++);
}
BEqu(&doc_e->de_flags,DOCEf_SELECTED,tempg->selected);
BEqu(&doc_e->type,DOCEt_SELECTED,tempg->selected);
Free(st);
tempg=tempg->next;
}
if (cur_elem_num==old_num) {
DocPrint(doc,"$$LTRED$$");
doc_e=DocPrint(doc,"$$MU-UL,\"END\",LE=%d$$\n",cur_elem_num);
doc_cur_e=DocPrint(doc,"$$MU-UL,\"END\",LE=%d$$\n",cur_elem_num);
} else {
DocPrint(doc,"$$LTBLUE$$");
DocPrint(doc,"$$MU-UL,\"END\",LE=%d$$\n",cur_elem_num);
}
if (doc_e)
doc->cur_entry=doc_e;
if (doc_cur_e)
doc->cur_entry=doc_cur_e;
}
U0 SpriteSideBarTask2(CTask *grand_parent)
@@ -601,6 +667,7 @@ U0 SpriteSideBarTask(CTask *parent,CSprite **_root,I64 *_cur_elem_num)
doc->flags|=DOCF_MIN_SIZE|DOCF_FORM;
while (TRUE) {
SpriteSideBarPickNew(doc,*_root,*_cur_elem_num);
DocHighlightCursor(,doc);
View;
doc_e=doc->cur_entry;
if (doc_e->type_u8==DOCT_MENU_VAL)
@@ -648,24 +715,26 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num)
return result;
}
#define GED_SHIFT_PTS 0
#define GED_SHIFT_RECTS 1
#define GED_TEXT_ED 2
#define GED_TRANSFORM 3
#define GED_SET_ORIGIN 4
#define GED_SHIFT_ORIGIN 5
#define GED_SHIFT_SUB_ORIGIN 6
#define GED_PICK_GRAPHICALLY 7
#define GED_DELETE 8
#define GED_INS_CLIPBOARD 9
#define GED_MAIN_MENU 10
#define GED_EXIT 11
#define GED_SELECT_UNSELECT_ALL 0
#define GED_SELECT 1
#define GED_UNSELECT 2
#define GED_SHIFT_PTS 3
#define GED_SHIFT_RECTS 4
#define GED_SHIFT_SELECTED 5
#define GED_TRANSFORM_SELECTED 6
#define GED_SET_ORIGIN 7
#define GED_SHIFT_SUB_ORIGIN 8
#define GED_TEXT_ED 9
#define GED_INS_CLIPBOARD 10
#define GED_MAIN_MENU 11
#define GED_EXIT 12
U0 GrInit3()
{
DefineLstLoad("ST_SPRITE_ED_MENU","Shift Points\0Shift Rects\0"
"Edit as Text\0Transform\0Set Origin\0Shift Origin\0Shift SubOrigin\0"
"Pick Graphically\0Delete Object\0Insert Clipboard\0Main Menu\0");
DefineLstLoad("ST_SPRITE_ED_MENU","Select/Unslesct All\0"
"Select\0Unselect\0Shift Points\0Shift Rects\0Shift Selected\0"
"Transform Selected\0Set Origin\0Insert Shift SubOrigin\0"
"Edit as Text\0Insert Clipboard\0Main Menu\0");
}
GrInit3;
@@ -677,18 +746,18 @@ I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num)
CDoc *doc=DocNew;
DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite Edit Menu\"$$\n"
"$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/SpriteEd.TXT.Z\"$$\n\n"
"$$LTBLUE$$$$MU-UL,\"Shift Points\",LE=GED_SHIFT_PTS$$\n"
"$$LTBLUE$$$$MU-UL,\"Select/Unselect All\",LE=GED_SELECT_UNSELECT_ALL$$\n"
"$$MU-UL,\"Select Elems\",LE=GED_SELECT$$\n"
"$$MU-UL,\"Unselect Elems\",LE=GED_UNSELECT$$\n\n"
"$$MU-UL,\"Shift Points\",LE=GED_SHIFT_PTS$$\n"
"$$MU-UL,\"Shift Points with Rects\",LE=GED_SHIFT_RECTS$$\n"
"$$MU-UL,\"Edit as Text\",LE=GED_TEXT_ED$$\n"
"$$MU-UL,\"Transform\",LE=GED_TRANSFORM$$\n"
"$$MU-UL,\"Shift Selected Elems\",LE=GED_SHIFT_SELECTED$$\n"
"$$MU-UL,\"Transform Selected Elems\",LE=GED_TRANSFORM_SELECTED$$\n\n"
"$$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,\"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"
"$$MU-UL,\"Insert Shift SubOrigin\",LE=GED_SHIFT_SUB_ORIGIN$$\n\n"
"$$MU-UL,\"Edit as Text\",LE=GED_TEXT_ED$$\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"
"$$MU-UL,\"Exit Sprite\",LE=GED_EXIT$$\n"
"$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$");
st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_root,_cur_elem_num);
@@ -1007,72 +1076,64 @@ gs_done:
return result;
}
I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,
I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
CSprite **_root,I64 *_cur_elem_num)
{
CDocEntry *doc_e2;
CDocBin *tempb;
Bool unlock,del_down;
Bool unlock;
I64 i,r[16],msg_code,a1,a2,xx,yy,
old_de_flags;
CSprite *cur_elem,*root2,*next,*last,*tempg,*insert_pt;
old_de_flags=doc_e->de_flags;
tempb=doc_e->bin_data;
old_de_flags=doc_ce->de_flags;
tempb=doc_ce->bin_data;
DocUnlock(doc);
SpriteQueSelectAll(*_root,FALSE);
do {
if (winmgr.fps<10)
doc_e->de_flags|=DOCEF_DONT_DRAW;
doc_ce->de_flags|=DOCEF_DONT_DRAW;
StrCpy(Fs->task_title,"Sprite Edit Menu");
i=PopUpSpriteEd(_root,_cur_elem_num);
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
if (0<=i<GED_EXIT) {
StrCpy(Fs->task_title,DefineSub(i,"ST_SPRITE_ED_MENU"));
switch (i) {
case GED_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;
case GED_SELECT_UNSELECT_ALL:
if (!SpriteQueSelectCnt(*_root))
SpriteQueSelectAll(*_root);
else
SpriteQueSelectAll(*_root,FALSE);
break;
case GED_SELECT:
case GED_UNSELECT:
doc_ce->de_flags=old_de_flags;
doc->cur_sprite=tempb->data;
doc->nearest_sprite_elem_num=0;
del_down=FALSE;
do {
msg_code=GetMsg(&a1,&a2,
1<<MSG_IP_L_UP|1<<MSG_IP_R_UP|1<<MSG_KEY_DOWN|1<<MSG_KEY_UP);
if (a2.u8[0]==SC_DELETE&& !(a2&SCF_IP_L_DOWN)) {
if (msg_code==MSG_KEY_DOWN)
del_down=TRUE;
else if (msg_code==MSG_KEY_UP)
del_down=FALSE;
}
if (msg_code==MSG_IP_L_UP && kbd.scan_code&SCF_DELETE ||
msg_code==MSG_KEY_DOWN && a2&SCF_IP_L_DOWN &&
a2.u8[0]==SC_DELETE) {
doc->nearest_sprite_elem_num=0;
msg_code=GetMsg(&a1,&a2,1<<MSG_IP_L_DOWN|1<<MSG_IP_R_UP);
WinMgrSync(2);
if (msg_code==MSG_IP_L_DOWN) {
*_cur_elem_num=doc->nearest_sprite_elem_num;
cur_elem=SpriteElemNum2QueEntry(*_root,*_cur_elem_num);
if (cur_elem!=*_root) {
QueRem(cur_elem);
Free(cur_elem);
SpriteEdUpdate(doc,tempb,*_root);
}
doc->cur_sprite=tempb->data;
doc->nearest_sprite_elem_num=0;
if (msg_code==MSG_KEY_DOWN)
GetMsg(&a1,&a2,1<<MSG_IP_L_UP);
cur_elem=SpriteSetSettings(,*_root,*_cur_elem_num);
cur_elem->selected=ToBool(i==GED_SELECT);
GetMsg(,,1<<MSG_IP_L_UP);
}
} while (del_down || msg_code!=MSG_IP_L_UP && msg_code!=MSG_IP_R_UP);
*_cur_elem_num=doc->nearest_sprite_elem_num;
} while (msg_code!=MSG_IP_R_UP);
doc->cur_sprite=NULL;
break;
case GED_SET_ORIGIN:
doc_e->de_flags=old_de_flags;
SpriteQueSelectAll(*_root);
doc_ce->de_flags=old_de_flags;
GetMsg(&a1,&a2,1<<MSG_IP_L_UP);
SpriteSetOrigin(*_root,x-a1,y-a2,0);
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
SpriteQueSelectAll(*_root,FALSE);
break;
case GED_SHIFT_ORIGIN:
doc_e->de_flags=old_de_flags;
case GED_SHIFT_SELECTED:
if (!SpriteQueSelectCnt(*_root))
SpriteQueSelectAll(*_root);
doc_ce->de_flags=old_de_flags;
GetMsg(&a1,&a2,1<<MSG_IP_L_DOWN);
xx=a1; yy=a2;
do {
@@ -1080,8 +1141,10 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,
1<<MSG_IP_L_UP+1<<MSG_IP_MOVE);
SpriteSetOrigin(*_root,a1-xx,a2-yy,0);
xx=a1; yy=a2;
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
} while (msg_code!=MSG_IP_L_UP);
if (!SpriteQueSelectCnt(*_root,FALSE))
SpriteQueSelectAll(*_root,FALSE);
break;
case GED_SHIFT_PTS:
case GED_SHIFT_RECTS:
@@ -1090,24 +1153,28 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,
"and rectangles with '$$GREEN$$p$$FG$$' and '$$GREEN$$r$$FG$$'.\n"
"Press '$$GREEN$$r$$FG$$' after one rectangle\n"
"to OR another rectangle.\n");
doc_e->de_flags=old_de_flags;
doc_ce->de_flags=old_de_flags;
if (SpriteShiftPts(tempb->data,x,y,_cur_elem_num,i)) {
QueDel(*_root);
Free(*_root);
*_root=Sprite2SpriteQue(tempb->data);
} else
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
break;
case GED_TRANSFORM:
case GED_TRANSFORM_SELECTED:
if (!SpriteQueSelectCnt(*_root))
SpriteQueSelectAll(*_root);
if (PopUpTransform(r)) {
SpriteTransform(r,*_root);
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
}
if (!SpriteQueSelectCnt(*_root,FALSE))
SpriteQueSelectAll(*_root,FALSE);
break;
case GED_SHIFT_SUB_ORIGIN:
doc_e->de_flags=old_de_flags;
insert_pt=SpriteElemNum2QueEntry(*_root,*_cur_elem_num);
tempg=MAlloc(SpriteElemQuedBaseSize(SPT_SHIFT));
doc_ce->de_flags=old_de_flags;
insert_pt=SpriteSetSettings(,*_root,*_cur_elem_num);
tempg=CAlloc(SpriteElemQuedBaseSize(SPT_SHIFT));
tempg->type=SPT_SHIFT;
tempg->p.x1=0;
tempg->p.y1=0;
@@ -1119,7 +1186,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,
1<<MSG_IP_L_UP+1<<MSG_IP_MOVE);
tempg->p.x1=a1-xx;
tempg->p.y1=a2-yy;
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
} while (msg_code!=MSG_IP_L_UP);
*_cur_elem_num+=1;
break;
@@ -1130,7 +1197,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,
"'Insert shift sub-origin' after picking the\n"
"element to insert before. Or,\n"
"use 'shift points'.\n");
insert_pt=SpriteElemNum2QueEntry(*_root,*_cur_elem_num);
insert_pt=SpriteSetSettings(,*_root,*_cur_elem_num);
unlock=DocLock(sys_clipboard_doc);
doc_e2=sys_clipboard_doc->root.next;
while (doc_e2!=sys_clipboard_doc) {
@@ -1155,24 +1222,16 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_e,I64 x,I64 y,
}
if (unlock)
DocUnlock(sys_clipboard_doc);
SpriteEdUpdate(doc,tempb,*_root);
break;
case GED_DELETE:
cur_elem=SpriteElemNum2QueEntry(*_root,*_cur_elem_num);
if (cur_elem!=*_root) {
QueRem(cur_elem);
Free(cur_elem);
SpriteEdUpdate(doc,tempb,*_root);
}
SpriteEdUpdate(doc,doc_ce,*_root);
break;
case GED_TEXT_ED:
if (SpriteEdText(_root,_cur_elem_num))
SpriteEdUpdate(doc,tempb,*_root);
SpriteEdUpdate(doc,doc_ce,*_root);
break;
}
}
} while (i!=DOCM_CANCEL && i!=GED_EXIT && i!=GED_MAIN_MENU);
doc_e->de_flags=old_de_flags;
doc_ce->de_flags=old_de_flags;
switch (i) {
case DOCM_CANCEL: return GE_ABORT;
+910 -864
View File
File diff suppressed because it is too large. Load diff
+5 -3
View File
@@ -197,12 +197,14 @@ public I64 FileOcc(U8 *needle_str,
class CFind
{
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";
U8 find_text[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,"
"A=\"FIND :%s\"$$\n";
U8 replace_text[STR_LEN] fmtstr "$$DA-P,LEN=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[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"FILE MASK :%s\"$$\n";
U8 filemask[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"FILE MASK :%s\"$$\n";
Bool recurse fmtstr "$$CB,\"RECURSE\"$$\n";
};
+1 -1
View File
@@ -1,7 +1,7 @@
#help_index "Debugging/Heap"
#help_file "::/Doc/HeapDbg"
#define HL_CALLER_DEPTH 4
#define HL_CALLER_DEPTH 5 //Feel free to change this.
#define HL_HASH_SIZE 0x1000
class CHeapLog
-1
View File
@@ -10,6 +10,5 @@ Cd(__DIR__);;
#include "Profiler"
#include "StrUtils"
#include "ToDolDoc"
#include "ToHtml"
#include "ToTXT"
Cd("..");;
-4
View File
@@ -227,9 +227,5 @@ public U0 MemRep()
MemRepTask(c->idle_task,TRUE);
"$$ID,-2$$";
}
"$$GREEN$$Independent Heaps$$FG$$\n$$ID,2$$";
"$$BLACK$$dev.uncached_heap:%010X Used:%010X$$FG$$\n",
dev.uncached_heap->bp->alloced_u8s,dev.uncached_heap->used_u8s;
"$$ID,-2$$\n";
}
+4 -2
View File
@@ -28,7 +28,8 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0)
task->animate_task=NULL;
if (doc=DocPut(task)) {
tempse->cursor=!Bt(&doc->flags,DOCf_HIDE_CURSOR);
tempse->hide_cursor=!Bt(&doc->flags,DOCf_HIDE_CURSOR);
tempse->highlight_cursor=!Bt(&doc->flags,DOCf_DONT_HIGHLIGHT_CURSOR);
tempse->scroll=!Bt(&doc->flags,DOCf_NO_SCROLL_BARS);
}
@@ -63,7 +64,8 @@ U0 SettingsPop2(CTask *task,CTaskSettings *tempse)
CDoc *doc;
if (doc=DocPut(task)) {
LBEqu(&doc->flags,DOCf_HIDE_CURSOR,!tempse->cursor);
LBEqu(&doc->flags,DOCf_HIDE_CURSOR,!tempse->hide_cursor);
LBEqu(&doc->flags,DOCf_DONT_HIGHLIGHT_CURSOR,!tempse->highlight_cursor);
LBEqu(&doc->flags,DOCf_NO_SCROLL_BARS,!tempse->scroll);
}
+4 -5
View File
@@ -316,10 +316,10 @@ CDoc *WinCursorPosSet(CTask *task,I64 ipx,I64 ipy,Bool set_cursor=TRUE)
else {
x0=result->line_start_col;
y0=result->top_line_num;
DocRecalc(result,TRUE);
DocRecalc(result,RECALCF_HAS_CURSOR);
result->x=(ipx-task->pix_left-task->scroll_x)/FONT_WIDTH +x0;
result->y=(ipy-task->pix_top -task->scroll_y)/FONT_HEIGHT+y0;
DocRecalc(result,FALSE,DOC_RECALC_FIND_CURSOR);
DocRecalc(result,RECALCt_FIND_CURSOR);
task->scroll_x=0;
task->scroll_y=0;
task->scroll_z=0;
@@ -440,10 +440,9 @@ U0 WinMgrTask(I64)
while (TRUE) {
try {
wmt_start:
if (Bt(&sys_run_level,RLf_ADAM_SERVER))
TaskKillDying;
WinMgrSleep;
//We delay freeing in case lingering
//references are made to task's.
TaskFinishOffDying;
task=Fs->last_task;
while (TRUE) {
+5 -5
View File
@@ -23,11 +23,11 @@ U0 BgtIns(CBgtEntry *tempb)
class CBgtEntryForm
{
U8 date[512] fmtstr "$$DA-P,511,A=\"Date :%s\"$$\n";
F64 amount fmtstr "Amount $$$$$$DA,511,A=\"%6.2f\"$$\n";
U8 credit[512] fmtstr "$$DA-P,511,A=\"Credit Acct:%s\"$$\n";
U8 debit [512] fmtstr "$$DA-P,511,A=\"Debit Acct:%s\"$$\n";
U8 desc [512] fmtstr "$$DA-P,511,A=\"Desc :%s\"$$\n";
U8 date[512] fmtstr "$$DA-P,LEN=511,A=\"Date :%s\"$$\n";
F64 amount fmtstr "Amount $$$$$$DA,A=\"%6.2f\"$$\n";
U8 credit[512] fmtstr "$$DA-P,LEN=511,A=\"Credit Acct:%s\"$$\n";
U8 debit [512] fmtstr "$$DA-P,LEN=511,A=\"Debit Acct:%s\"$$\n";
U8 desc [512] fmtstr "$$DA-P,LEN=511,A=\"Desc :%s\"$$\n";
};
CBgtEntry *BgtEntryPmt(CBgtEntry *dft=NULL)
+3 -3
View File
@@ -44,9 +44,9 @@ class CBgtTemplate
U0 start;
U16 type fmtstr "$$LS,RT=U16,D=\"ST_BGT_TEMPLATE_TYPES\"$$\n";
U16 flags;
U8 start_date[16] fmtstr "$$DA-P,15,A=\"Start Date:%s\"$$\n";
U8 end_date[16] fmtstr "$$DA-P,15,A=\"End Date :%s\"$$\n";
F64 period fmtstr "$$DA,511, A=\"Period :%6.2f\"$$\n";
U8 start_date[16] fmtstr "$$DA-P,LEN=15,A=\"Start Date:%s\"$$\n";
U8 end_date[16] fmtstr "$$DA-P,LEN=15,A=\"End Date :%s\"$$\n";
F64 period fmtstr "$$DA,A=\"Period :%6.2f\"$$\n";
U0 end;
CBgtEntry b;
+3 -3
View File
@@ -13,9 +13,9 @@ class Ball
class BallDefineStruct
{
F64 radius fmtstr "$$DA-TRM,32,RT=F64,A=\"Radius :%8.3f\"$$\n";
I64 n_longitude fmtstr "$$DA-TRM,32,A=\"Longitude Faces:%5d\"$$\n";
I64 n_lattitude fmtstr "$$DA-TRM,32,A=\"Lattitude Rings:%5d\"$$\n";
F64 radius fmtstr "$$DA-TRM,RT=F64,A=\"Radius :%8.3f\"$$\n";
I64 n_longitude fmtstr "$$DA-TRM,A=\"Longitude Faces:%5d\"$$\n";
I64 n_lattitude fmtstr "$$DA-TRM,A=\"Lattitude Rings:%5d\"$$\n";
};
U0 BDInit(BallDefineStruct *bd)
+28 -28
View File
@@ -14,66 +14,66 @@ class Man
class ManDefineStruct
{
F64 head_rad fmtstr
"$$DA-TRM,32,RT=F64,A=\"Head Radius :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Head Radius :%8.3f\"$$\n";
F64 torso_len fmtstr
"$$DA-TRM,32,RT=F64,A=\"Torso Length :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Torso Length :%8.3f\"$$\n";
F64 arm_len fmtstr
"$$DA-TRM,32,RT=F64,A=\"Arm Length :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Arm Length :%8.3f\"$$\n";
F64 hand_len fmtstr
"$$DA-TRM,32,RT=F64,A=\"Hand Length :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Hand Length :%8.3f\"$$\n";
F64 leg_len fmtstr
"$$DA-TRM,32,RT=F64,A=\"Leg Length :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Leg Length :%8.3f\"$$\n";
F64 foot_len fmtstr
"$$DA-TRM,32,RT=F64,A=\"Foot Length :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Foot Length :%8.3f\"$$\n";
F64 torso_width fmtstr
"$$DA-TRM,32,RT=F64,A=\"Torso Width :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Torso Width :%8.3f\"$$\n";
F64 torso_depth fmtstr
"$$DA-TRM,32,RT=F64,A=\"Torso Depth :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Torso Depth :%8.3f\"$$\n";
F64 arm_rad fmtstr
"$$DA-TRM,32,RT=F64,A=\"Arm Radius :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Arm Radius :%8.3f\"$$\n";
F64 hand_rad fmtstr
"$$DA-TRM,32,RT=F64,A=\"Hand Radius :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Hand Radius :%8.3f\"$$\n";
F64 leg_rad fmtstr
"$$DA-TRM,32,RT=F64,A=\"Leg Radius :%8.3f\"$$\n";
"$$DA-TRM,RT=F64,A=\"Leg Radius :%8.3f\"$$\n";
F64 foot_rad fmtstr
"$$DA-TRM,32,RT=F64,A=\"Foot Radius :%8.3f\"$$\n\n";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,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";
"$$DA-TRM,RT=F64,A=\"L.Ankle Angle :%8.3f\"$$\n";
};
+1 -1
View File
@@ -388,7 +388,7 @@ $SP,"<17>",BI=17$
U0 PsmMenu(I64 psm_octave)
{
DocClear;
"$$BD,WHITE$$$$FD,GREEN$$$$CM,0,12$$\n";
"$$BG,WHITE$$$$FD,GREEN$$$$CM,0,12$$\n";
Sprite($IB,"<17>",BI=17$);
'\n\n\n\n\n';
+4 -2
View File
@@ -336,6 +336,7 @@ U0 Init()
ls[1].img=landscape_imgs[LANDSCAPE_TYPES-2]; //mountain
ls[2].img=landscape_imgs[LANDSCAPE_TYPES-1]; //castle
MemSet(m,0,sizeof(m));
for (i=0,tempm=m;i<MAX_MAN;i++,tempm++) {
if (i<MAX_FRIENDLY) {
tempm->friendly=TRUE;
@@ -353,9 +354,10 @@ U0 Init()
tempm->dead=FALSE;
tempm->x=xx+64*RandI32/MAX_I32+100;
tempm->y=yy+64*RandU32/MAX_I32-64+100;
tempm->corpse_timeout=0;
tempm->phase=2*ã*Rand;
tempm->best_dd=MAX_I64;
tempm->é=0;
tempm->phase=2*ã*Rand;
tempm->corpse_timeout=0;
}
for (i=0;i<MAX_BULLETS;i++)
b[i].dead=TRUE;
+4
View File
@@ -207,6 +207,10 @@ U0 CmpLoadDefines()
DefineLstLoad("ST_RAW_TYPES",
" \0 \0I0\0U0\0I8\0U8\0I16\0U16\0I32\0U32\0I64\0U64\0"
"F32\0UF32\0F64\0UF64\0");
DefineLstLoad("ST_NATURAL_TYPES",
"I8\0U8\0I16\0U16\0I32\0U32\0I64\0U64\0F64\0String\0");
DefineLstLoad("ST_INT_SIZE_TYPES",
"I8\0U8\0I16\0U16\0I32\0U32\0I64\0U64\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");
Binary file not shown.
+105 -98
View File
@@ -41,7 +41,7 @@ $LK,"ICU32",A="FL:::/Compiler/BackLib.CPP.Z,47",BI=32$
$LK,"ICU24",A="FL:::/Compiler/BackLib.CPP.Z,41",BI=33$
$LK,"ICU16",A="FL:::/Compiler/BackLib.CPP.Z,35",BI=34$
$LK,"SLASH_OP_DIV",A="FL:::/Compiler/BackLib.CPP.Z,260"$
$LK,"CmpFillTables",A="FL:::/Compiler/CInit.CPP.Z,236",BI=35$
$LK,"CmpFillTables",A="FL:::/Compiler/CInit.CPP.Z,240",BI=35$
$LK,"AOTStoreCodeU32",A="FL:::/Compiler/AsmLib.CPP.Z,30",BI=36$
$LK,"ICU64",A="FL:::/Compiler/BackLib.CPP.Z,53",BI=37$
$LK,"SLASH_OP_INC",A="FL:::/Compiler/BackLib.CPP.Z,254"$
@@ -334,102 +334,109 @@ $LK,"InstEntryFind",A="FL:::/Compiler/UAsm.CPP.Z,66",BI=262$
$LK,"PrsDotDotDot",A="FL:::/Compiler/PrsVar.CPP.Z,381",BI=263$
$LK,"ICMulEqu",A="FL:::/Compiler/BackA.CPP.Z,344",BI=264$
$LK,"AsmPrsInsFlags",A="FL:::/Compiler/AsmInit.CPP.Z,1",BI=265$
H2@o#o#x#~#™#ž#É#Ë#þ#è#$$&$9$¨+†j†jœj¤j¯j»jÆjåjÈjñj÷j÷jk+kVkokok™k»kÓkÀkßklòkl&lQlQlXlvl‰l‰l‰l“lH<J^õ^õxõ‚õ†õŠõ�õ‘õ­õÉõÉõÓõ|ªÅvùvù ù¢ù©ù¯ùµù·ù½ùÃùÊù×ùäù÷ùúúúú ú*ú:úMú]ú{ú�ú8~ß~߇ߌߗߠߧߩ߮ßd`µnÓnÓŒÓ�Ó�ÓŸÓ¬Ó®ÓºÓºÓÇÓÉÓÖÓØÓäÓäÓúÓÔÔÔÔ$Ô/Ô5Ô:Ô<ÔHÔOÔ^ÔiÔoÔtÔvÔ‚Ô²ÔØÔèÔøÔÕ
ÕÕ*Õ:Õ:Õ?ÕYÕ`ÕgÕgÕgÕgÕnÕ„Õ�Ֆ՜բզզզÕÓÕÚÕðÕüÕÖÖÖÖÖÖDÃÖÖ4Ö7Ö:ÖGÖMÖZÖ]Ö`ÖfÖhÖrÖ,cj(‡(‡6‡@‡K‡V‡\‡b‡ jnVVdy
P ç5ç5õ566"64646?6H6N6U6[6 œ;^vEvE~E‚E›E®EÁEÞEÿEFF@FWFWFyFˆF‘FžF¥F×FäFèFðFðFGGGG Œ×öÆÆæîò  9OcqˆŽšŸ­ÌÕåçîîôô |1Ï"Ï"å"î"ù"###$#*#3#5#;#D#F#L#V#]#`#`#j#0 'p…p…~…ž…¤…ª…ª…°…„•²ÀœÀœÔœÛœâœæœ
��$�5�Z�e�p�r�}�¢�­�¸�º�Á�Ê�Ì�×�Þ�ž("ÜÜÜ0ÜHÜHÜNÜ ¶Û¶ÛÅÛØÛÞÛƒ¯¯5¯<¯S¯_¯j¯|¯�¯~¯|¯­¯È¯Ô¯Û¯á¯í¯÷¯þ¯° ° °°°'°.°5°9°9°C°H°S°e°v°g°e°–°·°Ã°Ê°Ð°Ü°æ°í°ô°ø°ú°± ±±±$±(±(±5±C±S±e±v±g±e±–±·±Ã±Ê±Ð±Ü±æ±í±ô±ø±ú±² ²²²$²(²(²2²B²T²e²V²T²…²Œ²’²ž²¨²¯²¶²º²¼²Â²Î²Ø²ß²æ²ê²ê²ô²³ ³$³0³4³4³7³@³¶³ì{{+{É 3{E{a{l{~{…{–{ž{¦{©{·{ã{ã{ø{ú{ú{||| | |+|3|7|D|D|D|`|k|||||�|™|¨|­|³|¾|Ã|Ã|È|à|ï|ô|ú|}
}
}}!}-}5}=}E}H}N}S}\}n}w}ˆ}˜}˜}�}¥}­}°}¶}¶}»}»}»}Á}Ä}Ë}Ö}ë}~'~4~<~D~P~\~b~i~r~v~y~…~‹~’~—~—~¥~µ~µ~Â~Â~Ê~Ò~Û~ê~ï~ï~ö~ %%4?QW_eju‡�•›  ´ºÅËÍÝãã€,€1€1€E€K€a€r€x€}€–€œ€¬€´€¼€€Ç€Ç€Û€á€÷€���,�2�B�J�R�X�]�]�s�y��� �¦�«�º�À�Ñ�Ù�á�ç�î�ó�ó� ‚‚%‚6‚<‚>‚M‚S‚]‚e‚m‚s‚z‚z‚z‚Œ‚•‚¦‚¶‚¶‚»‚»‚ɂтâ‚õ‚ü‚ƒ
ƒƒ ƒ&ƒ.ƒ4ƒ4ƒ4ƒ9ƒ9ƒ9ƒ9ƒ9ƒXƒdƒiƒiƒƒˆƒ“ƒœƒ§ƒ²ƒ·ƒ·ƒ̓Óƒéƒúƒ„„„„"„;„Y„Y„^„^„j„r„u„{„�„†„†„ª„²„º„Ê„ЄÖ„Ö„ç„……
…
………!…(….…3…3…S…[…k…q…x…–…¥…­…Å…Í…Ð…×…Ý…õ…ý…†† †'†-†-†-†L†\†h†p†s†z†€†�†Ÿ†«†ƆΆц؆Þ†ö†‡‡%‡(‡/‡5‡5‡5‡5‡:‡:‡C‡S‡i‡o‡‡‡š‡ ‡¥‡·‡½‡‡Þ‡ä‡ð‡ø‡û‡ˆˆ1ˆ9ˆIˆOˆVˆVˆVˆ[ˆ[ˆdˆ|ˆ’ˆ˜ˆ°ˆÈɈΈùˆÿˆ‰I‰[‰w‰‰…‰ЉЉ¤‰°‰¼‰ljlj̉̉æ‰ò‰þ‰ Š ŠŠŠ(Š4Š@ŠKŠKŠPŠPŠfŠlŠxŠ~ŠƒŠ•Š›Š Š¯Š»ŠÇŠÍŠÓŠÚŠíŠøŠ‹ ‹‹‹‹$‹)‹=‹L‹T‹l‹t‹w‹}‹ƒ‹›‹£‹ËÝ‹å‹è‹î‹ô‹ô‹ŒŒŒ"Œ%Œ,Œ2Œ7ŒIŒXŒ`ŒxŒ€ŒƒŒŠŒ�Œ¨Œ°ŒÏŒéŒñŒôŒûŒ����&�.�1�7�=�B�V�e�m�‡���’�˜�ž��¾�à�ü�ŽŽ ŽŽŽ$Ž-Ž9ŽAŽDŽKŽQŽVŽhŽwŽŽšŽ¢Ž¥Ž¬Ž²ŽÊŽÒŽôŽ���#�)�)�)�)�)�.�.�D�J�V�\�a�s�y�~�Œ�˜�¡�­�µ�¸�¿�Å�Ê�Ü�ë�ó� ����#�;�C�b�|�„�‡�Ž�”�”�”�¥�®�º�Â�Å�Ì�Ò�×�é�ø�‘ ‘'‘*‘1‘7‘O‘[‘}‘𑢑¥‘¬‘²‘²‘²‘²‘²‘·‘·‘Ê‘å‘ë‘ö‘û‘û‘’$’*’5’7’7’J’m’s’~’~’�’™’ª’¯’Á’Ñ’Ñ’Ö’Ö’é’ÿ’““"“'“'“:“P“V“d“s“x“x“Ž“”“±“ɓɓó“ù“þ“
””"”"”'”'”=”C”`”x”x”¢”¨”­”¹””єє֔֔ì”ò”•'•'•Q•W•\•h•q•€•€•…•…•›•¡•¾•Ö•Ö•–––––(–(–(–(–-–;–D–U–W–i–v–v–v–†–––›–¿–Ë–Ì–Ñ–æ–——7—G—M—M—M—R—W—l——½—Í—Ó—Õ—Ú—ë—ú—,˜4˜:˜<˜A˜H˜H˜Q˜c˜v˜˜Ž˜Ž˜“˜˜˜§˜°˜»˜½˜Ƙјјò˜ù˜ÿ˜™™™(™.™6™A™G™G™L™Q™X™_™f™m™v™…™…™…™Š™Š™Š™œ™¡™¡™³™¾™Æ™ΙÔ™Ô™Ô™Ù™Ù™ä™õ™ø™š šš š&š+š+š6šGšJšVš_škšršxš}š}š}š}š‚š‡š‡šŽš’š’šžš§šªšªšµš·šÉšКÖšåšðšûš›
››››#›&›&›1›3›E›L›R›Z›e›p›v›€›ƒ›‡›‡›�›–›™›››¦›ª›³›¶›¶›Á›ÛÛ›â›í›ø›û›œœœ œœœœ&œ)œ)œ4œ6œHœOœUœdœoœzœ€œ‰œ�œ�œ™œ¢œ¥œ¥œ°œ²œÄœËœÑœÙœäœïœõœÿœ�������%�)�2�5�5�@�B�Z�a�l�w�z�€�…�…�—�›�›�§�°�³�³�¾�À�Ò�Ù�ß�ñ�ü�ž žžžž"ž"ž-ž2ž2ž=ž@žDžKžPžUžZžZžnžsžsž€ž„ž•ž�ž¡žµž¼žÀžÀžÍžÙžážçž÷žûž ŸŸ)Ÿ-Ÿ-Ÿ:ŸBŸJŸPŸPŸPŸPŸPŸRŸRŸ`ŸgŸtŸ€ŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸŽŸ�Ÿ�Ÿ§Ÿ¯Ÿ»Ÿ»ŸÜŸêŸ     @ M X a j u | | † † ‰ › ¹ Å Å ô¢x¿Ù×3×3é3ë3ï3ø344%4%4Q4U4Z4f4y4ƒ4†4‘4”4œ4¦4°›ÃŒŒŒ#Œ4Œ9ŒNŒ;ŒZŒ`Œ`ŒlŒ„ŒqŒ�Œ“Œ•Œ£Œ¨Œ½ŒªŒÉŒÌŒÌŒØŒíŒÚŒùŒÿŒÿŒ�%�8�K�^�h�„ž¦w¦wÄwÖwÜwãwêwìwïwöwýwýwxx#x#x;xOx`x`xhxŒx¬xÍxÒxóxøxyyy!y$y[ylyqywyyyy‚y“y˜y›y£y¬yÇyçyþyzzz<zOzTzkz~zƒz‡z©zÄzäz÷züz {{{{{#{4{9{?{G{G{Q{Z{q{„{‰{�{¯{Ê{ê{ý{||=|T|g|l|p|’|¥|¥|À|À|À|Î|æ|è|è|è|ö|}}}}6}6}H}H}Q}^}t}”}®}µ}¿}Ò}Ö}Ö}Ö}Ý}ã}ý}~~&~(~.~H~O~Y~g~r~r~Œ~H‰—ȂȂ߂õ‚ƒ ƒ#ƒ>ƒPƒTƒ—ƒLíüÖŽÖŽêŽöŽ �øŽ��-�@�K�V�^�4IRöÒöÒÿÒÿÒÓÓÓ!Ó&Óä;NóNóvóyó—ó®ó¿ó¿óÚóàóåóåóôô ô ôô"ô.ô5ô;ô@ôƒô�ô”ôšôœôœô¯ôµôµôµôÅôºôÖôåô÷ôüôüôüôõ
õõ&õ-õIõIõ[õÐL¼x¡x¡’¡�¡¨¡±¡¹¡¼¡Ã¡Ç¡Ð¡á¡å¡ë¡ù¡¢#¢2¢7¢C¢H¢O¢[¢`¢c¢m¢e¢}¢†¢—¢•¢�¢¥¢®¢´¢´¢Â¢Å¢Ù¢â¢ë¢ò¢ö¢û¢£*£3£A£]£i£i£�£’£’£™£µ£Á£É£Ü£ã£÷£¤¤ ¤¤¤"¤?¤l¤s¤w¤y¤„¤�¤”¤©¤«¤¼¤Æ¤Ñ¤Û¤ê¤ù¤¥¥¥ ¥%¥§¥Xs…îGîG HH)H3HJHgH…H‹H”H¢H¨H«H·HŒ X_X_h_‰_‰_—_—_—_—_ _ _§_Á_Ò_Ú_Ú_å_å_ó_`````/`/`5`[`(kqh‡h‡v‡‚‡’‡™‡Ÿ‡ @Ua&æ&æ4æ<æCæbæoæoærætæzæ $/4¦Ü¦Ü³ÜÁÜÆÜÌÜ!$).~Ü~܋ܙܞܤÜ"$#(NÜNÜ]ÜlÜqÜwÜ#4ìu××ãó 38H^fpˆ��­ÃËÕíù  6 @ J T ^ h r | † � š ¤ ® ¸ Î Ø â ì ö
  4 > H ^ h r | † � š ¤ ® ¸ Â Ì Ö à ê ô þ !!!&!0!:!D!N!X!b!l!v!€!Š!š!$¨DÀ˜À˜Ö˜Ý˜ä˜ò˜™™™™$™4™?™I™T™k™n™p™‚™ˆ™˜™¢™¬™³™¾™Ó™Û™Û™ñ™ñ™ñ™š%$5:ÎÜÎÜÜÜëÜðÜöÜ&¨Ekššš%š,š:šKš]š_šfšlš|š‡š‘šœš³š¶š¸šÊšÑšášëšõšüš››#›#›9›9›9›N›'(&,//�/”/ž/¤/ª/(0_gGG4GGGVG\G_GgG)  ß  8 @ F S Z v | | | ‰ ‹ –   § ³ ¾ Ä Î Õ æ æ ñ û û   # ) . 5 5 V \ k ~ „ ‡ � � � • › � � � ® ¸ ½ ½ Ò Ü Ü ð ù ÿ !! !'!:!>!>!F!L!R!\!c!j!s!…!…!ª!®!´!º!É!Ü!â!æ!ì!ò!ø!ø!ú!þ!"
""""""@"Q"Q"h"u"y"�"–"¶"¶"¼"¿"Ã"É"É"Û"ì"###.#2#C#G#M#f#h#n#{#}#‰#§#­#¸#Û#æ#ì#ò#ø#$$$*$2$6$G$K$Q$j$l$r$$�$�$«$±$·$½$Æ$Ì$é$Ü$% %%%'%,%,%3%:%L%Q%Q%Q%k%m%‡%‰%£%©%±%µ%¼%ß%å%ë%÷%&&&&&+&+&2&6&=&K&M&U&Z&b&m&s&&„&Š&�&—&œ&«&Æ&Ö&ã&ò&'',','3'H'M'V'c'h'n's's'z'~'…'“'•'�'¡'¥'¯'»'Â'Æ'Î'Ö'Þ'í'û'( ( (((7(7(E(K(P(T(Y(Y(Y(Y(_(a(a(„(Š(�(—(­(¯(¯(¯(º(º(º(¿(è)*4+t¾Ä¾ÄØÄÜÄôÄüÄÅÅÅÅ Å3Å;Å@ÅCÅNÅYÅaÅlÅwÅyÅ�Å–Å�ŨųŵÅÀÅËÅÍÅÙÅâÅâÅøÅÆÆ Æ%Æ6Æ<ÆEÆWÆ]Æ]ÆeÆiÆtÆyƋƖƚƨƪƮƽƽƽÆÎÆÎÆÓÆåÆëÆYÇ+Ô@®à®àÄàËàÎàòàòàá"á5áHáMáMákáyáŒáŸá§á§á©á©á©á¼á¾á¾á¾áÅáØáëáëáëáþá ââ2â7â;âBâWâjâqâqâtâ™â,LAP?$?$M$^$j$…$Š$ª$¬$Ç$â$â$ê$ñ$%-P~Žð‡ð‡þ‡ ˆˆ+ˆ6ˆDˆQˆ_ˆqˆ|ˆŠˆ�ˆ–ˆ.4
�5�5�5©5º5Ì5Õ5ß5å5/|¼Wffˆ�ž©ÏÏØÚÚá-ITT`gw}›¦¨ÁÇÒâôý ?DR[[bqˆˆ—�±¸¿ÄÏÕÝ #/>RW_k}}”›£³ÅËÔÔãéý  % 7 @ P c k    · » Ç Þ ú 


)
9
I
N
W
W
i
m
y
�
¬
¾
Ä
Ï
Û
ë
û
        . 4 : : > · 0�ÄävÖvÖ’ÖžÖ¢Ö¦Ö­Ö´ÖÃÖÎÖÔÖÙÖÛÖçÖîÖöÖüÖ×××××$×*×0×2×2×>×18 ·.·.Å.Ë.×.â.ó.ý./
/2@}‰nçnç|ç‡çŽç­çºçºç½ç¿çÅç3ðh ®®Ôçïöý ((;FbŠ’›£¨¹Ïßñö(,,1]r޾ÇÏÔå÷5MQQm•�¦®³ÄÚêü37JJJbO‚o�›¡¹ÑÖë/7@HM^p€’”®ÆÊÊæ ',=Scuz”¬°ÃÃÃÈè2JJJV\gr„”«ÂÙðð   AQ__hs�œ«²ÂÄÊáðé  2 2 K 4D}ŠÞÞî ##'*25\Ob€†€† †¯†¸†Á†Å†É†Õ†Ú†ß†ß†ð†ô†û†‡‡"‡60ýVßVß_ßdßmßtßvß{ß7Ð1ÔÛâíõ";;FJU}\‰Ÿ­ÃÇÌÞ"*.3Zptt„Á Íêê 0AFX€—œ¤¨ªÑçë/7<@EVlzŽ“¬½ÁÓÓÓÓØô4@]hn„•šÞæëïô%9;Teii{£º¿ÇËÍô
.4>EXoo‹›©©¿ÏÝô (70L\cq�‡´ÝÝÝê#(39Dczj†œªÂØÜì 7'C`Š�¦·¼Òèì08=AFWm{�”­¾ÂÔÔÔÔÙõC3Olw}“¤©Åíõúþ&4HJctxx—­ÃÇÔÔÔçí÷þ(((DTbbxˆ�–±ÄÉÏåôí 'DD``m���­8Do|††–ª³¹ËËÏÒÚ9°Äìn�n�„�‹�œ�¡��£�Â�È�È�Ô�ì�Ù�ø�û�ý� ŽŽ%ŽŽ1Ž4Ž4Ž@ŽUŽBŽaŽgŽgŽzŽ�ޠ޳ޯŽÐŽ:<‹–66FW`fju;”)^é^éféjévé‡é‰é™é¤é¶éÁéÌéÛéìéóé êêêê'ê.êAêJêXêlêˆê�êªê<d(=°…°…¼…Ð…Ó…ç…ï…ó…ý…††††=$t¹8E8E\E_EcEpEyE„E�E˜E¢EÊEÊEÖEØEØEäEéEéEõEúEúEF F FFFF(F-F-F9F>F>FJFOFOFOFRFRFkFyF�F�F�FŸFŸF«F±F¶F¶F¼FÈFÈFÓFßFìFG GGG G G)G,G“G>è wö¢ö¢£££,£:£O£X£p£†£˜£££´£¸£Ê£Í£Ø£á£í£¤1¤&¤ ¤A¤U¤f¤r¤€¤ž¤°¤Ô¤å¤ç¤¥î¤#¥#¥&¥+¥.¥.¥5¥L¥S¥`¥e¥t¥�¥”¥”¥¨¥¬¥Ù¥Ù¥ñ¥ö¥ö¥¦¦¦(¦8¦B¦R¦^¦c¦c¦s¦{¦‹¦•¦¥¦¯¦¿¦˦ЦЦЦò¦§
§§§1§1§6§@§O§T§Z§_§_§d§n§}§‚§ˆ§�§�§“§™§ž§ž§­§À§̧Ù§å§ø§¨¨¨&¨:¨K¨X¨]¨u¨ˆ¨Ÿ¨¬¨´¨ǨϨÕ¨Þ¨ç¨ç¨ì¨ì¨ì¨ì¨ì¨ø¨ø¨ø¨©©/©7©R©c©p©r©†©‹©‹©‹©–©¤©©©©©°©¾©éÛ©ç©ù©ª ªªª'ª0ªMªYª_ªeªxª€ªˆªµªƪÓªÕªãªãªèªèªïªýª««!«-«3«7«@«E«E«E«E«E«]«b«b«b«b«b«s«s«s«s«s«s«s«s«s«s«|«•«ª«²«Í«Þ«ë«í«¬ ¬¬¬¬¬5¬A¬F¬h¬t¬t¬y¬y¬y¬y¬y¬y¬y¬y¬ެ“¬“¬“¬¤¬¯¬´¬´¬¿¬Ѭé¬û¬­<­G­X­]­]­]­f­ˆ­‘­¢­¦­¾­έÖ­Þ­é­®® ®8®H®H®H®H®H®j®£®¬®°®¶®»®Ä®Í®Ò®Ò®Ò®Ò®á®õ®¯¯#¯)¯.¯.¯A¯U¯{¯†¯ޝ”¯”¯™¯™¯¨¯¼¯Ú¯å¯ê¯ð¯õ¯õ¯°°B°M°U°[°[°`°`°`°i°‚°—°Ÿ°º°˰ذÚ°é°ë°ë°ë°ë°ë°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°ÿ°±±(±*±*±3±5±5±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±I±K±K±b±j±v±v±z±±�±ª±¿±αÚ±ð±
² ²²#²I²i²‰²­²¯²²ð²Ȳ ³ ³³³&³A³R³U³o³}³‰³¡³¡³̳ϳÞ³ò³´$´@´,´\´n´Œ´¿´½´²´§´˜´Í´Í´Í´дÕ´Ø´ò´µ.µPµPµ{µ~µ�µ¡µµÓµïµÛµ  )¶\¶Z¶O¶D¶5¶j¶j¶j¶m¶r¶r¶y¶‰¶ª¶¶¶ º?°«ÓÞ¿Þ¿ô¿ø¿À
ÀÀ)À)À4ÀEÀLÀYÀeÀrÀzÀ‹À‹À”À™À¡À±À¿ÀÎÀÙÀìÀìÀÿÀÿÀÁAÁAÁUÁWÁWÁaÁiÁiÁsÁ{Á{Á{ÁŒÁŒÁŒÁ�Á˜ÁžÁ£Á£Á§Á¯Á³Á¹Á¾Á¾ÁÊÁßÁïÁùÁ ÂÂÂÂÂÂ%Â1ÂFÂVÂ`ÂhÂnÂ�†Ž””™ «ÂÓÂÞÂíÂ÷ÂÿÂÃÃÃ"Ã"Ã"Ã"Ã"Ã"Ã"Ã"Ã"Ã-Ã9ÃFÃVÃ\ÃdÃwÃ|ÄÉÑÖÖÖÞæï÷üÃÄÃÉÃÐÃÛÃÄÄÄ%Ä/ÄAÄFÄLÄQÄQÄXÄjÄrÄ…Ä�ĕĪĬķĿÄÔÄÔÄÜÄðÄøÄÿÄÅ Å ÅÅ!Å-ÅCÅOÅWÅlÅxÅ}ʼnŔřřřźÅÔÅÙÅáÅðÅøÅÆÆÆ%Æ-ÆBÆGÆGÆSÆiÆuÆ}ƒƞƣƯƺƿƿƿƿƿƿÆÊÆÊÆÊÆÊÆÊÆÊÆÊÆÊÆÊÆÊÆÊÆÊÆÕÆõÆÇ"Ç(Ç0ÇCÇHÇPÇXÇZÇbÇuÇ{ǃNjÇ�Ç­ÇµÇ¾ÇÆÇÎÇÓÇØÇßÇêÇÈÈ%È4È>ÈWÈ\ÈdÈiÈiÈiÈrÈ{È~ȈȖȨȪȼÈÎÈÎÈÎÈÙÈÞÈûÈÉÉ ÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉ%É1ÉQÉdÉlÉŒÉ‘É™É É­ÉµÉ¾ÉÆÉÍÉÒÉÒÉÚÉâÉþÉÊ Ê ÊÊ%Ê%Ê%Ê'Ê:ÊKÊNÊQÊYÊ^Ê^ÊgÊlÊtÊ{ʈʡʨʭÊÅÊÏÊêÊË ËË1Ë8Ë8Ë=Ë=Ë=Ë=Ë=Ë=Ë=ËEËPË[ËjËoËoËwËˌˑˑˑ˕˚˚˪˯˯˯˻ËÂËÈËØËéËÌÌÌ&Ì;ÌBÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌJÌLÌLÌgÌqÌÌÌ„Ì�̖̲̿̿̿ÌÃÌÎÌìÌúÌòÎ@ü|öÎöÎ ÏÏÏ)Ï4ÏKÏVÏ]ÏmπϊϊϦÏÀÏÇÏÐÏ×ÏÚÏæÏïÏöÏùÏþÏÐÐ0Ð6ÐBÐWÐ^ÐfÐrЇЎЎЎМЪдзÐÅÐÏÐÒÐäÐéÐîÐþÐÑÑÑÑÑ&Ñ.Ñ@ÑHÑHÑHÑ^ÑhÑzрьѡѨѰÑÂÑÈÑ×ÑèÑèÑïÑïÑïÑýÑ ÒÒÒ&Ò0Ò3ÒEÒJÒOÒ_ÒbÒgÒwÒzÒ~Ò‡Ò�Ò¡Ò©Ò©ÒµÒÂÒÊÒÊÒÍÒØÒöÒÓMÓAhoÅ®×®×È×Û×â×é×ôר
ØØØØ-Ø;ØFØQØTØjØv؋ؖءجطØÂØÙØåØüØÙ ÙÙ"Ù=Ù@ÙFÙKÙ^ÙdÙlÙÙ…Ù�Ù�ٛ٭ٺÙÍÙÓÙÛÙîÙôÙüÙüÙ%Ú*ÚIÚLÚLÚSÚ`ÚdÚoÚ‰Ú•Ú¥ÚÅÚáÚõÚýÚÛ&Û:Û:Û°ÛB ¶*¶*À*È*Í*CÉÇæRæRSS!SS;SISISYSbSiSmSvSvS~S‚S S¬S¸S¾SÉSëSëSþS TTTTT.T9TDTKTST`T`TrTwTwT‡TŒTŒTŒTŸT¤T·T½TÄTÙTíTíTòTòTUUU UUU"U$U,U3U3UBUHUUU\U_U�U�U‰U˜U£UªU¬UÀUÏUÔUÙUÙUÙUìUñUVVV#V7V7V<V<VDVZV_VsVzVVV‹VšV¬V»VÎVÒVáVïVýV W)W4W9WHW\WcWjWzW|WŠWšWœWªW·WÇWÎWãWêWöWXX X,X7X9X9XDXXXeXmXoXƒX•XœX¬X¸XÙXàXìX
Y
Y
YYY!Y)Y-Y5Y<YLYWYqYvY}YˆY‘Y™YžYžY­YºYÈYÓYÞYìYòYøYþYZ ZZ)Z1Z=ZKZbZdZmZxZzZ†Z¤ZªZ°Z¶Z¿ZÐZ÷ZÿZ [[.[5[A[P[e[e[r[w[‰[�[�[�[�[K\DD�š–‹–‹ª‹¶‹Ì‹¸‹Ø‹Ú‹ì‹þ‹ŒEìˆÿnYnY�YšYÍYÜYòYZZ Z'Z0Z?ZFZOZTZiZzZ™Z¡Z£ZÂZÊZÙZàZìZñZøZ[[[$[)[?[+[K[Q[Q[Y[b[q[�[—[™[¸[¿[¿[¿[Ó[ç[ë[ù[ \\$\)\4\;\C\I\K\g\l\‚\n\Ž\”\”\°\µ\Î\º\Ú\à\å\]]]](].]5]=]C]E]a]f]|]h]ˆ]Ž]Ž]Ž]–]Ÿ]Ÿ]©]©]Á]ñ]^ ^^*^"^B^B^T^FüE€6Ý6ÝUÝqÝvݗݵÝÄÝâÝöÝÞÞÞ;ÞYÞhÞ…Þ–Þ­Þ±Þ±ÞµÞºÞ¿ÞÉÞÌÞÖÞÜÞùÞüÞüÞüÞßß#ß1ß=ßFßZßbßk߇ߒߞߧ߻߻ßÊßÏßÏßÝßGl¬ÃîCîCüCDD5D"DADVDCDuDbD�D�D—D¢D¤D¯DºDºDÙDßDHP‡—ŽòŽò¢ò¯ò¾òÊòÐòúòóüò'óó?óGóIŒg†ññPñsñsñ†ñŠñ©ñ½ñÂñÂñÏñ×ñßñôñòòò'ò;ò@òBòBòBò[òsòsò�òJP�­®6®6×6Ù6ç6í6 77)787F7Q7T7d7Kì8¶/¶/à/ã/æ/ì/ñ/0 060H0n0•0˜0±0È0Ú0ç0ú0 111$1,1,131<1<1G1o1‰1�1¨1Á1Ã1Ý1ã1ü122(2(22222D2‚2—2©2L$tyþcþc)dd3d;dMLu„^Ç^ÇpÇ…Ç–Ç§Ç®Ç¶ÇÆÇÎÇßÇåÇÈNTHYbbbb%b.b<bAbJbMbRb`bjbmbwbO¨!G````p`y`Œ`™`¥`±`½`É`à`à`ï`ú`a
aa*a=aBaTacaoa�a�aŠaªaªa¬a¿aÁaÛaçaêabPxl¨lÁlÌlÜl%m,m@mGmOmWm`mhmpmrmzm‚m‰m�m¯mÇmÐmÐmn/n8nZntn‘n»nÇnénënònùnùno5o\ouoœoµoÜoõop5p\pupœpœp«p¸p½p½pÌpÙpÞpÞpåpðpqq4qMqOqOqOqVqVqcqhqhqhqyq‡qšq¯qéqðqðqðqøqr#rArJrSr`rnrˆr¤r¤r¤r·rÅrárÿrÿrÿr
s s:s<sSsYsjsssus‚s„s‘s“s s sÄsÆsÍsÞsçsés÷sùst ttt7t7t7t7tDtWtjt‹t˜t±t¹t½tÅtÉt×tåtçtïtót÷tÿt uuu5u@uVuhuˆuŸuªu´u»uÔuàuçuvvvvv v0vAvPvWvhvqvsv�vƒv‘v“v¡v¡v¡vÅvÅvâvévðvóvÿvwww"w&w4w8w8wQwXw]wkw|wƒw™w¹wÌwÛwÝwìwîwýwxxxx4x;x`xexŽx¾xÃxÑxÓxáxêxyyyy y)y+y9y;yIyKyYyYyyyyyyyyyyy˜y˜y˜y£y¿yäyýyzzz$z)z)z)zIzNzNzNzmzrzrzyz{z{zƒz…z…zŒzŒz�z”z³zÉzîz
{{#{#{>{K{M{\{e{{�{�{†{�{§{©{©{±{¬{ê{ê{ê{ | | |*|/|/|/|Q|V|V|V|v|{|{|{|š|Ÿ|Ÿ|º|È|Ê|Ù|â|ü|þ|þ|}þ|$}&}&}.})}g}g}g}r}r}œ}œ}Æ}Þ}ö}~~'~<~T~h~‚~„~•~¯~Æ~Í~Å‚Q|.†ã†ãªã¾ãÉãÞãüãä%ä%ä%ä2äJäLäLäLäYäqäsäsä�äŽä¦ä¦ä·äËäRçe>×>×X×a×�×�ׇ×�חןק׭׺׺×××Ü×Ü×â×ç×ç×í×ò×ò×ø×ý×ýר(Ø.Ø3Ø3Ø<Ø\Ø\Ø\ØcØeØeØlØnØnØtØtØ{Ø}Ø}؃؃؊،،ؙؙؒؒءاحصصصصØÁØÉØÑØÙØáØéØñØ÷ØÙÙ(Ù+Ù+Ù5Ù;ÙAÙAÙEÙMÙTÙXÙ`ÙhÙnÙvÙ}Ù…Ù�ّٗ٢٨ٵÙÁÙÇÙÏÙÓÙÚÙâÙêÙîÙôÙüÙÚ ÚÚÚÚ(Ú-ÚCÚTÚYÚ\ÚÛSL˜§˜ƒ˜ƒ±ƒ³ƒºƒÐƒàƒæƒþƒ„„+„s„TÔ*[®ê®êÂê×êæêêêøêþê ë ëë'ë2ë=ëDëTëkë~ë„ë‰ë�ë�ë�ë³ëµë¿ëàëëëíëì
ìììì$ì0ì8ìKìµìU$ns¾c¾cécÒcócûcVl  ÆGÆGÔGîGÛG HúGH.HHMH:HYHgHoHzH|H‡H’H’H±H·HW,¶Ñ¶Ñ¿ÑÅÑÍÑÜÑëÑðÑXTÒ¡¡7¡I¡T¡]¡¡‰¡—¡±¡¾¡¾¡È¡È¡Ï¡â¡à¡ð¡ð¡û¡¢ ¢¢¢"¢)¢A¢H¢K¢]¢b¢m¢x¢’¢­¢Á¢Þ¢££ £££)£G£/£P£T£Z£b£g£‡£o£�£”£š£¢£§£§£´£º£Õ£Á£á£å£ë£ó£ø£ø£¤¤#¤+¤:¤U¤A¤a¤e¤k¤s¤x¤x¤™¤�¤£¤«¤«¤°¤½¤Û¤ää¤è¤î¤ö¤¥þ¤ ¥#¥)¥1¥1¥>¥\¥D¥e¥i¥o¥w¥—¥¥ ¥¤¥ª¥²¥²¥²¥È¥È¥È¥È¥Ó¥Ý¥æ¥¦¦ ¦%¦3¦G¦L¦L¦W¦_¦g¦p¦|¦�¦�¦¬¦»¦Õ¦Ú¦Ú¦å¦í¦ú¦§§§7§I§[§f§k§k§v§Œ§™§¡§­§»§À§Χâ§â§ê§â§¨¨¨¨¨¨*¨/¨/¨@¨E¨E¨V¨[¨[¨n¨}¨‚¨‚¨•¨¤¨©¨·¨©¨˨ШÞ¨Шò¨÷¨©÷¨©©,©©@©E©E©b©g©‰©Ž©œ©Ž©°©µ©µ©Ò©שù©þ© ªþ© ª%ª%ªBªGªiªnª|ªnª�ª•ª•ª²ª·ªÙªÞªìªÞª««« «%«%«@«E«E«`«e«e«€«…«…« «¥«¥«À«Å«Å«à«å«å«¬¬¬¬¬¬,¬1¬1¬=¬H¬]¬b¬b¬n¬‡¬Œ¬¯¬¶¬À¬ŬÖ¬à¬õ¬­­­!­)­.­.­2­6­=­G­Q­Q­d­i­i­i­m­ƒ­Œ­Œ­¯­´­´­¼­ЭÙ­ó­® ®®!®3®?®H®M®M®M®^®{®†®�®›® ®«®³®¸®¸®îˮԮ߮ﮯ ¯3¯8¯8¯C¯V¯`¯k¯Œ¯˜¯¦¯«¯¹¯½¯¯¯Ò¯ݯå¯ê¯õ¯° °'°9°K°V°[°f°n°s°~°‹°–°°°°Ô°Ô°Ô°Ô°Ù°Þ°Þ°ê°û°û°!±#±?±?±I±]±g±i±u±}±š±«±µ±À±ã±ô±²²!²9²I²N²N²Y²^²^²f²q²v²v²~²‰²޲޲–²´²ž²̲ѲѲÙ²÷²á²³³(³³@³E³E³R³W³W³_³d³d³p³�³“³˜³˜³¬³˜³ijɳɳѳÖ³Ö³é³î³î³´´´ ´0´5´5´O´_´d´d´~´Ž´“´“´­´½´´Ù´´ñ´ö´ö´µµBµ0µµµZµ_µ›µ‰µwµ_µ³µ¸µ¸µǵ×µܵܵëµûµ"¶J¶8¶"¶b¶g¶�}¶g¶§¶¬¶Ô¶¶¬¶ì¶ñ¶ñ¶·ø¶8·H·M·M·h·T·’·¢·§·§·³·¸·¸·Ä·É·É·Ü·ì·ñ·ñ·¸¸¸¸,¸<¸A¸A¸T¸d¸i¸i¸q¸v¸v¸~¸ƒ¸ƒ¸‹¸�¸�¸˜¸�¸�¸°¸µ¸µ¸ȸ͸¹ ¹÷¸å¸͸(¹-¹{¹i¹W¹E¹-¹ˆ¹�¹�¹œ¹·¹¼¹¼¹͹è¹í¹í¹þ¹ ºººººº&º+º+º3º8º8ºpº^ºLº?º�ºªº¯º¯ºçºÕºú¶º»!»&»X»F»>»&»p»u»§»•»�»u»¿»Ä»Þ»È»Ä»ö»û»¼¼û»0¼5¼5¼A¼Z¼j¼{¼{¼¡¼£¼¹¼¿¼¿¼Û¼è¼½[½J½8½g½o½o½o½{½€½€½“½ž½¨½­½¸½½ǽǽá½æ½æ½î½ó½¾ó½¾¾#¾7¾#¾C¾N¾S¾S¾^¾l¾q¾q¾|¾‡¾Œ¾Œ¾�¾¢¾¢¾³¾¸¾¸¾Ò¾ݾâ¾ê¾â¾ö¾û¾¿û¾¿ ¿(¿ ¿4¿9¿M¿9¿Y¿^¿^¿r¿^¿~¿~¿~¿ƒ¿�¿ƒ¿¢¿§¿§¿³¿§¿Æ¿Ë¿Ë¿׿Ë¿ê¿ï¿ï¿û¿ï¿ÀÀ'ÀÀ3À?ÀJÀUÀZÀnÀZÀzÀ†À‘ÀœÀ¡ÀµÀ¡ÀÉÀÁÀÒÀ×À×ÀßÀäÀäÀíÀòÀòÀûÀÁÁ ÁÁÁÁÁÁ)Á.Á.Á9Á>Á>ÁIÁNÁNÁYÁ^Á^ÁiÁnÁnÁyÁ~Á’Á~ÁžÁ©Á´Á¿ÁÄÁÄÁÎÁÓÁÓÁÝÁâÁâÁìÁñÁñÁûÁ  Â  Â,Â1Â1Â1Â1Â1Â9Â>Â>ÂFÂKÂKÂSÂXÂXÂ`ÂeÂeÂmÂr†Âr’£¨¨ºÂÅÂåÂêÂà Ã$ÃÃ0Ã;ÃFÃKÃKÃ]ÃhÈÃ�ãîÃÇóÃÓÃÞÃéÃîÃîÃÄ Ä+Ä0ÄFÄQÄjÄVÄvÄ�ČđđķģÄÃÄãÄèÄþÄ ÅÅ)ÅÅIÅ5ÅUÅkÅWÅ‹ÅwŗŢŧŧÅÍŹÅÙÅùÅþÅÆ Æ$Æ?Æ+Æ_ÆKÆkÆ�ÆmÆ¡Æ�ƭƸƽƽÆãÆÏÆïÆÇÇ*Ç5Ç:ÇUÇAÇuÇaÇ�ǗǃǷǣÇÃÇÎÇÓÇÓÇâÇçÇçÇöÇûÇûÇûÇÈÈÈÈÈÈÈÈ)ÈIÈKÈKÈUÈUÈUÈUÈUÈWÈWÈnÈuȀȀÈ�È“ÈšÈ¥È°È»ÈÆÈÑÈËÈôÈìÈ ÉÉÉ=É5ÉUÉUÉUÉ^ÉfÉyÉÉ�ɠɠɸÉÂÉÖÉðÉðÉðÉÊ!Ê6ÊHÊXÊXʀʇʖʨʨÊLine truncated
ÒÒÒ,Ò2ÒZ`àô¦˜¦˜¼˜Þ˜ë˜ï˜þ˜™™!™4™Q™S™S™„™r™S™£™­™[8cmNcNcoc\c{c†c‘cœc§c³c¹c\\�”œœœœ#œ+œ6œAœLœNœdœdœvœ‚œ‹œŽœ½œ]ܳf6é6éhéqéé¡é¡é²é¿éÝéåéêê@ê]êyêêƒê¦êÌêÑêúêë:ëQëWë[ëtë|ë�ë’ëšë¹ë¿ëÃëÜëäëììì!ì@ìEìMìSìWì[ìmìuì�ì—ìœì®ì³ìÄìÉìÛìäìøìí(íXí}í‚í‚í‚í’í™í§í´íÖíÖíííòíòí î î î î!î!î8î:î:îQîSîSîjîjî{î€î€î�îµîÇîÌîÌîÌîÌîäîïï8ï8ï8ïEï\ï^ï^ï^ïkï‚ï„ï„ï‘ï¨ï¨ï¿ïÁïÛïùïùïùïýïÿïÿïÿïððð ð ðððð8ð8ð8ð@ðBðBðBðJðLðLðTðTðVð]ð{ð}ð�ð¦ð¦ð¦ð¦ð¦ð¹ðÑðÙðÙðñ^`
^T^TpT|TšT¶TÃTÚTíTøT UúTU!U,U?U8UWU]U_ôW.=.=L=O=a=h=o=t=v=}=„=ˆ=š=Ì=æ=Ó=þ=>$>$>0>8>G>�>†>³>»>À>É>Ô>Ü>ã>??'?)?H?S?j?‰?�?–?–?œ?Ÿ?£?´?Ô?æ?`$ÞÛÞÛíÛÜÜ Üaxb|~æ~æžæÀæÀæÊæÏæÏæîæûæýæýæýæýæ
çç%ç9ç;ç;çCçVçVçhçb”"þ.þ. /*/6/;/K/Q/f/z/‰/—/¥/¼/Ä/Î/Ý/å/ò/ú/ý/ý/ý/ÿ/00!0)0,0>0cHÏ6969^9k9n9w9}9”9«9Â9Ô9::8:=:B:M:d:v:ƒ:–:¬:À:Å:Ð:ð:õ:ø:;,;4;<;A;[;u;};…;Š;¤;¬;±;Ñ;Ö;Ù;ó; <<< <9<S<[<c<e<<‡<‡<Œ<‘<œ<œ<§<§<³<³<Å<===+=dd¤¹H‰H‰X‰_‰k‰q‰y‰‡‰š‰¦‰½‰Ê‰Ê‰Í‰Û‰ë‰ŠŠŠeºû�*�*¥*ª*¾*í*ù*++ + +7+>+U+\+e+|+|+’+’+¨+¨+¾+¾+Ô+Ô+ê+ê+,,,,,,,,C,C,Z,Z,q,q,ˆ,ˆ,Ÿ,Ÿ,¶,¶,Í,Í,å,å,ý,--!-,-=-@-B-Y-`-l.f¬÷ &-5=@K]]qx{}†——𢏻ÉÌÏÖÚâðdg(EK’’5’"’A’P’X’hCÆJÆJéJþJK KKK(K.K7K=KBKJKfKlKnKpK}K}KŠKK›K¡K£K¥K²K²K²K·KÀKÈKÑKÙKÛKãKëKóKLLLL(L3L?L]LdLoLuL†LŠL’L’L¦L¶L¾LÁL'Mi8-7¯/¯/Ã/Ç/Ì/×/â/å/é/ñ/j¤õš®™®™Ì™ð™ö™ý™ý™š$š)š?š[šGšgšzšŒš•š�š§šÅšךàšèšòš ›÷š›)›3›;›@›[›G›{›g›‡›�›‰›½›©›É›Û›å›í›í›ö›þ›œ-œ?œNœRœRœYœ^œ|œ~œƒœŽœ¤œ¤œ¤œ¨œ´œÕœãœíœúœ�)�3�5�5�O�b�p�s�“�—��º�Ý�á�žžžž
žž"ž;žAžLžXžZžbžhž�žŒžšž¤ž½žÀžÈžÔžÖžÞžážúžüžŸ
ŸŸŸ1ŸIŸUŸjŸoŸ�Ÿ�Ÿ©ŸºŸºŸÅŸПèŸôŸ     / H Y Y _ j r € ‡ ™ kfäÛÛ Û)ÛIÛIÛOÛWÛ_ÛgÛoÛuÛ‚Û‚Û�Û•Û•Û›Û Û Û¦Û«Û«Û±Û¶Û¶ÛÎÛáÛçÛìÛìÛõÛÜÜÜÜÜÜ%Ü'Ü'Ü-Ü-Ü4Ü6Ü6Ü<Ü<ÜCÜEÜEÜKÜKÜRÜRÜZÜ`ÜfÜnÜnÜnÜnÜz܂܊ܒܚܢܪܰÜÈÜ×ÜáÜäÜäÜîÜôÜúÜúÜþÜÝ ÝÝÝ!Ý'Ý/Ý6Ý>ÝFÝJÝPÝ[ÝaÝnÝz݈݀݌ݓݛݣݧݭݵݼÝÄÝÌÝÐÝÖÝáÝæÝüÝ ÞÞÞ»Þl`Ÿ!Ÿ!¨!¯!Ã!×!Ü!ú!ÿ!" "="?"V"j"s"u"‰"™"Ê"m|2ÍP‘P‘f‘w‘ˆ‘™‘ª‘»‘Α֑ä‘’ ’’ ’5’5’H’Y’_’t’�’�’¤’©’±’¹’¿’×’ê’õ’ù’“““ “-“/“A“A“H“P“b“b“q““’“–“ “¤“°“´“À“ēГԓԓç“ú“””””!”%”4”8”K”O”O”O”O”T”f”u”„”’”­”½”͔ҔҔҔޔæ”î”ô” •• •)•7•=•?•?•?•?•?•?•?•?•?•K•S•[•a•v•~•‚•Š•˜•ž•ž•ž•°•¶••ȕՕ𕖠–– –1–?–^–¸—nÔ¼íÈjÈjÚjëjöjkk)kAkFkOkVkckjkxkk�k„k‰k‹k‘k«kÅkÛkókøklll)lDlKlMlPlUlxl–l¢lo$hmO&O&]&q&x&’&p¤b‡XX*X1XWXCXcXhXoXoX�X¥X‘X±X×XÃXãXèXïXïX÷XþX YYY$Y/Y:YMYEYeYmYq?|ll:lAlYlql{l†l†l‹l–l¢l­l»lËlÛlâlèlýlmm&m.m>mKmZmgmxm‰m—m¥m¬m²mÇmÜmÜmðmýmnn$n5n5n;nInZngnwnÙnr8¬vJvJzJJ„J•J£J¬J±J¶J¸Js88B÷/÷/ 000 0)0,00080t0†Ž¾H¾HÔHçHôHúHýHIuÜtvv˜£®·ÇÙßåëð"%-?EJm€„Š¡§·½É×Üê*,38@_my“²¹ÃÒØÞäê!5AXcrŽ›«¹ÐÜáï 7@FQV\s~‹’’ ¯±¿Îààè Jv`Ëß–—–—¬—ΗÛ—ß—î— ˜˜˜*˜G˜I˜I˜z˜h˜I˜™˜£˜wT�ÞÞßÞßößþß à+à=àDàNàTàZà^àbà„à„à‹àŽà“à¢à¦àÓà×àÜàÜàãàæàëà÷àá áá)á-á/á>áBádáhámámá�á„á�ášá¡áÇáÒáÖáÛáâ(â3â7âHâSâWâYâdâhâhâ‚â†âˆâˆâ“â—â±âµâµâµâ¹âÜâxˆßýÞâÞâòâããã
ã
ããããããã)ã+ã+ã8ã?ãAãAãNãUãWãWãoãtãtã„ãy°‰±¶d¶dÎdÖdád;e&eeeïdAeSeCenene‡e{e´e¹eÅeÐeåeÒeñe÷eþe fff3f5fNfNf[f‚f‚f‚fŽfz †*¾³¾³Û³â³ê³õ³ ´´´-´7´R´h´v´z´š´®´Â´É´Í´æ´ð´µµµµµ!µ&µ+µ2µ9µSµZµjµnµnµxµŽµ’µ’µ£µ¶µÉµÉµÏµÚµáµéµôµûµ>¶B¶Z¶K¶u¶u¶{¶‚¶‘¶™¶§¶®¶²¶´¶Æ¶Æ¶Æ¶Ø¶à¶····-·5·E·P·e·j·x·‡·�·�·¨·¬·±·¹·½·Ì·Î·Ý·ß·î·ð·ÿ·¸
¸¸&¸4¸;¸?¸O¸Z¸_¸}¸…¸“¸š¸ž¸¦¸´¸»¸¿¸Ç¸Û¸ã¸î¸ò¸ò¸ò¸ý¸¹¹$¹:¹B¹M¹\¹d¹o¹t¹|¹‡¹“¹—¹¢¹§¹¹¹Á¹Ì¹Ì¹Ì¹Ì¹Ú¹é¹ººº*º:ºXº\º‹º€ºqº›º›º¥º¬º»ºÊºÒºàºçºëºíºüº»»»»» »1»1»C»C»C»I»U»g»o»‡»³»Á»Å»ã»ê»ñ»ü»¼¼¼.¼6¼D¼K¼O¼Q¼d¼l¼z¼�¼…¼…¼…¼…¼“¼ž¼­¼µ¼Ã¼Î¼Ò¼Ò¼×¼ß¼ã¼ò¼ô¼½½½½%½,½0½D½L½Z½a½e½u½€½…½£½«½¹½À½Ä½Ì½Ú½á½å½í½¾ ¾¾¾¾¾#¾*¾8¾R¾b¾m¾‚¾‡¾’¾¢¾®¾Ä¾Ì¾×¾æ¾î¾ù¾þ¾¿¿¿!¿,¿1¿C¿K¿V¿V¿V¿V¿j¿z¿�¿œ¿ ¿´¿Å¿Ú¿ç¿ë¿ù¿ÀÀ5ÀNÀgÀiÀtÀ|À|À…À¢À³ÀÊÀãÀñÀüÀÁÁÁÁ%Á%Á%Á?ÁMÁ[ÁpÁ‡Á–Á£ÁÁÁÈÁÈÁØÁìÁÂÂ
 Â/ÂJÂUÂlÂtÂt––©ÂÄÂÍÂâÂü ÃÃ6ÃDÃZÃsÃÛÛóóÿÃ×ÃïÃøÃøÃøÃÄÄ-Ä6Ä6Ä=ÄFÄLÄXľÄ{ÌL».ö.öLöWöböˆöˆöŠö—ö¢ö¨ö¹öÈö×öäöäöêöïöôö÷÷%÷)÷;÷H÷P÷[÷W÷r÷€÷€÷€÷‹÷¦÷‘÷·÷®÷Á÷Ã÷ß÷Ë÷ç÷õ÷õ÷÷÷øøø ø)ø0ø3øUøiø\øqøwø€ø€ø€ø“ø˜ø˜ø ø ø«øÀøÉøÉøÉøÉøåøüøùùùù"ù'ù'ù3ùPùpùuùzùzù†ù£ù²ùÁùÉùÎùÔùÙùÙùàùçù
ú'ú)úFú[ú[úaúaúnúwúwú’ú¤ú¯ú´úÁúÌúÔúÜúìúûûûû%û+ûSû\û\û^ûeûjûjûwû‚ûˆû‘û‘û¤û±ûÃûÎûÜûåûêûüü%ü*ü1ü9üLüaüfümüzü�ü“ü¨ü¯üµü¾ü¾üÇüáüèüíüûü ýýý ý&ý/ý/ýBýTýWýWýhýpýxý„ý¡ý¨ýµý·ý¾ýÒýáýáýáýþþþþþ*þ5þGþTþ_þmþxþ‡þŽþŽþ¨þ»þ½þÌþáþãþñþÿÿ ÿÿÿ"ÿ(ÿ:ÿ:ÿGÿJÿUÿgÿnÿyÿ~ÿ†ÿ�ÿ˜ÿ�ÿ²ÿ´ÿÎÿãÿãÿãÿåÿìÿòÿ##)09>_hhnww––£¦¬µ½ÈÚàëëøû
/5@@MPV_aƒ–«±¼ÎÔÜÜÜÜçb|”�¾ß2ß2ó2÷233 33'3'3P3T3Y3\3e3u3|33‡3Š3—3Ÿ3§3¯3¶3Æ3Æ3Ò3}Œ >^U^UrUyU©U•UµUºUÁUÁUáU÷UãUV3V V?VDVKVKVSVZVeVmVxV‹VƒV£V«V~À-�d�d®d¾dÈdÈdÒdÒdÜdîdûdþde eee$e8e8e\eieieye†e†e©e¶e¶eÌeïef(f1f>f>fafkfkfžfÑf×f×f×féf¸ºäŠŠ(Š*Š6Š:ŠGŠJŠdŠdŠdŠjŠnŠvŠ�ЕСУУЬЮЮзййŠÂŠÄŠÄŠÍŠÍŠÖŠÜŠßŠéŠúŠ‹ ‹ ‹t‹€œWzv)v)”)¥)È)Ï)è)à)* * *,*=*B*c*O*{*£*ª*Ã*»*Û*û*ç*++.++F+S+S+k+k+u+�œX{N-N-Z-j-u-Ÿ-Ï-Ü-í-ÿ-. .!.(.6.N.].j.m.†.‰.Ž.¥.±.½.Á.È.þ.‚x¬è«è«þ«¬ ¬+¬:¬I¬X¬g¬v¬€¬€¬…¬Œ¬Ÿ¬®¬³¬Î¬è¬è¬þ¬­­"­)­.­.­5­G­P­R­`­r­r­r­„­�­¡­¬­¹­¾­Î­Ó­ã­ï­ô­®®®®+®-®=®?®O®Q®b®k®k®m®}®„®”®”®¯®Á®Ó®å®õ®õ®õ®ø® ¯ƒ\åøx‹x‹“‹š‹Ÿ‹­‹Â‹É‹Ó‹á‹ä‹æ‹ð‹ŒŒ Œ?Œ„0ÎÖNNf¨œpn¼Ä…`ʆ–†–œ–¾–Ë–Õ–ä–ý–———7—9—9—j—X—9—‰—“—†L4CÆ+Æ+Ô+æ+ì+ô+, ,,',-,0,l,‡(–œ¯2¯2½2Ì2Ð2Ó2Ù2ˆ\DWn,n,|,Ž,”,œ,®,´,½,Ï,Õ,Þ,ð,ö,ù,G-‰, ŽÑŽÑœÑ£Ñ«Ñ°Ñ¶ÑЬ!HN N l ~ … Œ ›   ¿ ¿ Ä ã è ï þ 


>
S
@
_
n
H2@÷#÷#$$!$&$Q$S$†$p$–$�$®$Á$¨+kk$k,k7kCkNkmkPkykkk¦k³kÞk÷k÷k!lCl[lHlgl�lzl¡l®lÙlÙlàlþlmmmmH<Jæõæõö
ööööö5öQöQö[ö|ªÅþùþù(ú*ú1ú7ú=ú?úEúKúRú_úlúú�úœú¡ú£ú¨ú²úÂúÕúåúûû8àààà à(à/à1à6àd`µöÓöÓÔÔ%Ô'Ô4Ô6ÔBÔBÔOÔQÔ^Ô`ÔlÔlÔ‚Ô‹Ô‹Ô–Ô�Ô¬Ô·Ô½ÔÂÔÄÔÐÔ×ÔæÔñÔ÷ÔüÔþÔ
Õ:Õ`ÕpÕ€Õ�Õ’Õ¢Õ²ÕÂÕÂÕÇÕáÕèÕïÕïÕïÕïÕöÕ ÖÖÖ$Ö*Ö.Ö.Ö.Ö[ÖbÖxÖ„ÖŠÖ�Ö–Ö˜Ö˜Ö¦ÖDæּֿ֦ÖÂÖÏÖÕÖâÖåÖèÖîÖðÖúÖ,cj°‡°‡¾‡È‡Ó‡Þ‡ä‡ê‡ jnÞÞì
P o6o6}6Œ6¤6ª6¼6¼6Ç6Ð6Ö6Ý6ã6 œ;^þEþEF
F#F6FIFfF‡F�F¡FÈFßFßFGGG&G-G_GlGpGxGxG‹G›GŸG£G Œ×öNNnvzˆŽ””Á×ëù"'5T]movv||Œ |1W#W#m#v#�#š#š#�#¬#²#»#½#Ã#Ì#Î#Ô#Þ#å#è#è#ò#0 'ø…ø…†&†,†2†2†8†„•²H�H�\�c�j�n�’�¥�¬�½�â�í�ø�ú�ž*ž5ž@žBžIžRžTž_žfž�ž("–ܖܥܸÜÐÜÐÜÖÜ >Ü>ÜMÜ`Üf܃˜¯˜¯½¯Ä¯Û¯ç¯ò¯°°°°5°P°\°c°i°u°°†°�°‘°“°™°¥°¯°¶°½°Á°Á°Ë°Ð°Û°í°þ°ï°í°±?±K±R±X±d±n±u±|±€±‚±ˆ±”±ž±¥±¬±°±°±½±Ë±Û±í±þ±ï±í±²?²K²R²X²d²n²u²|²€²‚²ˆ²”²ž²¥²¬²°²°²º²Ê²Ü²í²Þ²Ü² ³³³&³0³7³>³B³D³J³V³`³g³n³r³r³|³Š³“³¬³¸³¼³¼³¿³È³>´ì–{–{³{Q¡»{Í{é{ô{| ||&|.|1|?|k|k|€|‚|‚|Ž|–|š|§|§|³|»|¿|Ì|Ì|Ì|è|ó|}} }!}0}5};}F}K}K}P}h}w}|}‚}�}’}’} }©}µ}½}Å}Í}Ð}Ö}Û}ä}ö}ÿ}~ ~ ~%~-~5~8~>~>~C~C~C~I~L~S~^~s~˜~¯~¼~Ä~Ì~Ø~ä~ê~ñ~ú~þ~   -==JJRZcrww~‰�—�¨­­¼ÇÙßçíòý€€€#€(€(€<€B€M€S€U€e€k€k€�€´€¹€¹€Í€Ó€é€ú€���$�4�<�D�J�O�O�c�i����–�›�´�º�Ê�Ò�Ú�à�å�å�û�‚‚(‚.‚3‚B‚H‚Y‚a‚i‚o‚v‚{‚{‚‘‚—‚­‚¾‚ĂƂՂۂå‚í‚õ‚û‚ƒƒƒƒƒ.ƒ>ƒ>ƒCƒCƒQƒYƒjƒ}ƒ„ƒŠƒ’ƒ˜ƒ¨ƒ®ƒ¶ƒ¼ƒ¼ƒ¼ƒÁƒÁƒÁƒÁƒÁƒàƒìƒñƒñƒ„„„$„/„:„?„?„U„[„q„‚„ˆ„�„Ÿ„¥„ª„Äá„á„æ„æ„ò„ú„ý„… ………2…:…B…R…X…^…^…o…�…�…’…’…ž…¦…©…°…¶…»…»…Û…ã…ó…ù…††-†5†M†U†X†_†e†}†…†�†¥†¨†¯†µ†µ†µ†Ô†ä†ð†ø†û†‡‡‡'‡3‡N‡V‡Y‡`‡f‡~‡Ї¥‡­‡°‡·‡½‡½‡½‡½‡‡‡ˇÛ‡ñ‡÷‡ˆ"ˆ(ˆ-ˆ?ˆEˆJˆfˆlˆxˆ€ˆƒˆŠˆ�ˆ¹ˆÁˆш׈ÞˆÞˆÞˆãˆãˆìˆ‰‰ ‰8‰K‰Q‰V‰�‰‡‰š‰щã‰ÿ‰Š ŠŠŠ,Š8ŠDŠOŠOŠTŠTŠnŠzІББЖЖамŠÈŠÓŠÓŠØŠØŠîŠôŠ‹‹ ‹‹#‹(‹7‹C‹O‹U‹[‹b‹u‹€‹‰‹•‹�‹ ‹¦‹¬‹±‹Å‹Ô‹Ü‹ô‹ü‹ÿ‹Œ Œ#Œ+ŒKŒeŒmŒpŒvŒ|Œ|Œ�Œ–Œ¢ŒªŒ­Œ´ŒºŒ¿ŒÑŒàŒèŒ�� ���0�8�W�q�y�|�ƒ�‰�‰�™�¢�®��¹�¿�Å�Ê�Þ�í�õ�ŽŽŽ Ž&Ž>ŽFŽhŽ„ŽŒŽ�ޕޛޛެ޵ŽÁŽÉŽÌŽÓŽÙŽÞŽðŽÿŽ�"�*�-�4�:�R�Z�|�™�¡�¤�«�±�±�±�±�±���Ì�Ò�Þ�ä�é�û���� �)�5�=�@�G�M�R�d�s�{�“�›�ž�¥�«�Ã�Ë�ê�‘ ‘‘‘‘‘‘-‘6‘B‘J‘M‘T‘Z‘_‘q‘€‘Œ‘§‘¯‘²‘¹‘¿‘בã‘’"’*’-’4’:’:’:’:’:’?’?’R’m’s’~’ƒ’ƒ’–’¬’²’½’¿’¿’Ò’õ’û’“““!“2“7“I“Y“Y“^“^“q“‡“�“›“ª“¯“¯““ؓޓì“û“””””9”Q”Q”{”�”†”’”›”ª”ª”¯”¯”Ŕ˔蔕•*•0•5•A•J•Y•Y•^•^•t•z•—•¯•¯•Ù•ß•ä•ð•ù•–– – –#–)–F–^–^–ˆ–Ž–�–œ–¥–°–°–°–°–µ–ÖÌ–Ý–ß–ñ–þ–þ–þ–——#—G—S—T—Y—n—‹—›—¿—Ï—Õ—Õ—Õ—Ú—ß—ô—˜E˜U˜[˜]˜b˜s˜‚˜´˜¼˜˜ĘɘИИÙ˜ë˜þ˜™™™™ ™/™8™C™E™N™Y™Y™z™�™‡™�™š™ ™°™¶™¾™É™Ï™Ï™Ô™Ù™à™ç™î™õ™þ™ š š šššš$š)š)š;šFšNšVš\š\š\šašašlš}š€šŒš•š¡š¨š®š³š³š¾šÏšÒšÞšçšóšúš›››››
››››››&›/›2›2›=›?›Q›X›^›m›x›ƒ›‰›’›–›–›¢›«›®›®›¹›»›Í›Ô›Ú›â›í›ø›þ›œ œœœœœ!œ#œ.œ2œ;œ>œ>œIœKœcœjœuœ€œƒœ‰œŽœŽœ•œ™œ™œ¥œ®œ±œ±œ¼œ¾œМלÝœìœ÷œ�����!�*�-�-�8�:�L�S�Y�a�l�w�}�‡�Š�Ž�Ž�–��� �¢�­�±�º�½�½�È�Ê�â�é�ô�ÿ�žž ž ž ž#ž#ž/ž8ž;ž;žFžHžZžažgžyž„ž�ž•žšžšž¥žªžªžµžºžºžÅžÈžÌžÓžØžÝžâžâžöžûžûžŸ ŸŸ%Ÿ)Ÿ=ŸDŸHŸHŸUŸaŸiŸoŸŸƒŸ”Ÿ¦Ÿ±ŸµŸµŸŸÊŸÒŸØŸØŸØŸØŸØŸÚŸÚŸèŸïŸüŸ                                                                                                             / 7 C C d r Š Œ ˜ ¥ ¥ È Õ à é ò ý ¡¡¡¡¡#¡A¡M¡M¡|£x¿Ù_4_4q4s4w4€4Œ4˜4­4­4Ù4Ý4â4î45 5555$5.5°›ÃŽŒŽŒ¤Œ«Œ¼ŒÁŒÖŒÃŒâŒèŒèŒôŒ �ùŒ���+�0�E�2�Q�T�T�`�u�b���‡�‡�š�­�À�Ó�æ�ð�„ž.x.xLx^xdxkxrxtxwx~x…x…x¡x¥x«x«xÃx×xèxèxðxy4yUyZy{y€yŒy—yœy©y¬yãyôyùyÿyzz
zz z#z+z4zOzoz†z™zžz¢zÄz×zÜzóz{ {{1{L{l{{„{•{š{�{Ÿ{¥{«{¼{Á{Ç{Ï{Ï{Ù{â{ù{ |||7|R|r|…|Š|¥|Å|Ü|ï|ô|ø|}-}-}H}H}H}V}n}p}p}p}~}–}˜}˜}¦}¾}¾}Ð}Ð}Ù}æ}ü}~6~=~G~Z~^~^~^~e~k~…~Œ~–~®~°~¶~Ð~×~á~ï~ú~ú~H‰—PƒPƒgƒ}ƒ�ƒ”ƒ«ƒÆƒØƒÜƒ „Líü^�^�r�~�”�€� �¢�µ�È�Ó�Þ�æ�4IR~Ó~Ó‡Ó‡ÓŠÓ˜Ó¦Ó©Ó®Óä;ÖóÖóþóô ô6ôGôGôbôhômômôˆôŽô“ô“ôœôªô¶ô½ôÃôÈô õõõ"õ$õ$õ7õ=õ=õ=õMõBõ^õmõõ„õ„õ„õ‹õ’õ™õ®õµõÑõÑõãõÐL¼¢¢¢%¢0¢9¢A¢D¢K¢O¢X¢i¢m¢s¢�¢ž¢«¢º¢¿¢Ë¢Ð¢×¢ã¢è¢ë¢õ¢í¢££ £££-£6£<£<£J£M£a£j£s£z£~£ƒ£š£²£»£É£å£ñ£ñ£ ¤¤¤!¤=¤I¤Q¤d¤k¤¤ˆ¤�¤“¤ž¤£¤ª¤Ç¤ô¤û¤ÿ¤¥ ¥¥¥1¥3¥D¥N¥Y¥c¥r¥�¥�¥�¥ ¥¨¥­¥/¦Xs…vHvH“H¤H±H»HÒHïH III*I0I3I?IŒ à_à_ð_`` ` ` ` `(`(`/`I`Z`b`b`m`m`{`‹`‹`™`Ÿ`Ÿ`·`·`½`ã`(kqð‡ð‡þ‡
ˆˆ!ˆ'ˆ @Ua®æ®æ¼æÄæËæêæ÷æ÷æúæüæç $/4.Ý.Ý;ÝIÝNÝTÝ!$).ÝÝÝ!Ý&Ý,Ý"$#(ÖÜÖÜåÜôÜùÜÿÜ#4ðy__k{‘™£»ÀÐæîø  % 5 K S ] u � ‰ “ £ ¨ ¾ È Ò Ü æ ð ú    " , 6 @ V ` j t ~ ˆ ’ œ ¦ ¼ Æ Ð æ ð ú !!!"!,!6!@!J!T!^!h!r!|!†!�!š!¤!®!¸!Â!Ì!Ö!à!ê!ô!þ!""""$¨DH™H™^™e™l™z™‹™�™Ÿ™¦™¬™¼™Ç™Ñ™Ü™ó™ö™ø™
šš š*š4š;šFš[šcšcšyšyšyš�š%$5:VÝVÝdÝsÝxÝ~Ý&¨Ek�š�š¦š­š´šÂšÓšåšçšîšôš›››$›;›>›@›R›Y›i›s›}›„›�›£›«›«›Á›Á›Á›Ö›'(&,0000&0,020(0_g¦G¦G¼GÏGÞGäGçGïG)  ßž ž À È Î Û â þ       ( / ; F L V ] n n y ƒ ƒ • › « ± ½ ½ Þ ä ó ! !!!!!!#!%!%!%!6!@!E!E!Z!d!d!x!�!‡!�!£!¨!¯!Â!Æ!Æ!Î!Ô!Ú!ä!ë!ò!û! " "2"6"<"B"Q"d"j"n"t"z"€"€"‚"†"Œ"’"˜"�"�"�"�"È"Ù"Ù"ð"ý"# ##>#>#D#G#K#Q#Q#c#t#‰#�#¥#¶#º#Ë#Ï#Õ#î#ð#ö#$$$/$5$@$c$n$t$z$€$‰$�$¤$²$º$¾$Ï$Ó$Ù$ò$ô$ú$% %%3%9%?%E%N%T%q%d%‹%”%š%š%¯%´%´%»%Â%Ô%Ù%Ù%Ù%ó%õ%&&+&1&9&=&D&g&m&s&&–&�&£&®&³&³&º&¾&Å&Ó&Õ&Ý&â&ê&õ&û&' ''' '$'3'N'^'k'z'–'˜'´'´'»'Ð'Õ'Þ'ë'ð'ö'û'û'(( (((%()(-(7(C(J(N(V(^(f(u(ƒ(ˆ(”(”(œ(œ(¿(¿(Í(Ó(Ø(Ü(á(á(á(á(ç(é(é( ))) )5)7)7)7)B)B)B)G)p**4+tFÅFÅ`ÅdÅ|ńŌŖŚšŧŻÅÃÅÈÅËÅÖÅáÅéÅôÅÿÅÆÆÆ%Æ0Æ;Æ=ÆHÆSÆUÆaÆjÆjƀƊơƧƭƾÆÄÆÍÆßÆåÆåÆíÆñÆüÆÇÇÇ"Ç0Ç2Ç6ÇEÇEÇEÇVÇVÇ[ÇmÇsÇáÇ+Ô@6á6áLáSáVázázá—áªá½áÐáÕáÕáóáââ'â/â/â1â1â1âDâFâFâFâMâ`âsâsâsâ†â‘â¤âºâ¿âÃâÊâßâòâùâùâüâ!ã,LAPÇ$Ç$Õ$æ$ò$ %%2%4%O%j%j%r%y% %-P~Žxˆxˆ†ˆ“ˆ¡ˆ³ˆ¾ˆÌˆÙˆçˆùˆ‰‰‰‰.4
66%616B6T6]6g6m6/|¼Wîî&1WW`bbi�——¦µÑÜÜèïÿ#.0IOZj|…�•›¢ÇÌÚããêù %9@GLW]e‹”› «·ÆÚßçó   # + ; M S \ \ k q … Ž ž ­ ¿ È Ø ë ó 
(
?
C
O
f
‚
”
š
¥
±
Á
Ñ
Ö
ß
ß
ñ
õ
  4 F L W c s ƒ • › ›   ¢ ¢ § §  ¼   Æ ?0�ÄäþÖþÖ×&×*×.×5×<×K×V×\×a×c×o×v×~ׄ׊׎׎×�×¤×¬×²×¸×º×º×Æ×18 ?/?/M/S/_/j/{/…/Œ/’/2@}‰öçöçèèè5èBèBèEèGèMè3ðh 66\ow~…‹�”›žž°°ÃÎê#+0AWgy~˜°´´¹åú>FOW\m�¡£½ÕÙÙõ%.6;Lbr„‰£»¿ÒÒÒê×
÷#)AY^s�·¿ÈÐÕæø6NRRn–ž§¯´ÅÛëý48KKKPp�œ¢ºÒÒÒÞäïú 3JaxxŒ¨¨¨ÉÙççðû $ 3 : J L R i x q Ž Ÿ º º Ó 4D}ŠffvŠ“™««¯²º5\Ob‡‡(‡7‡@‡I‡M‡Q‡]‡b‡g‡g‡x‡|‡ƒ‡›‡ž‡ª‡60ýÞßÞßçßìßõßüßþßà7Ð1>>\cju}––ªÃÃÎÒÝä'5KOTfŽ¥ª²»âøüü I(Urr‘œ¢¸ÉÎà $,02Yos�·¿ÄÈÍÞô4EI[[[[`|¼›Èåðö ">fnsw|�Ÿ­ÁÃÜíññ+BGOSU|’–££££¼ÆÍà÷÷#11GWe|�”š°¿¸Ôäëù<eeer«°»ÁÌëò$2J`dt“¿¯Ëè.?DZpt�¸ÀÅÉÎßõ5FJ\\\\a}œË»×ôÿ,1Mu}‚†‹œ®¼ÐÒëü 5KO\\\ou†™°°°ÌÜêê%9LQWm|u‘¡¯ÌÌèèõ58Do|2;ASSWZb9°Äìö�ö� ŽŽ$Ž)Ž>Ž+ŽJŽPŽPŽ\ŽtŽaŽ€ŽƒŽ…Ž“Ž˜Ž­ŽšŽ¹Ž¼Ž¼ŽÈŽÝŽÊŽéŽïŽïŽ��(�;�N�X�:<‹–¾¾Îßèîòý;”)æéæéîéòéþéêê!ê,ê>êIêTêcêtê{ê”ê˜ê¥ê¥ê¯ê¶êÉêÒêàêôêëë2ë<d(=8†8†D†X†[†o†w†{†…†�†—†š† †=$t¹ÀEÀEäEçEëEøEF FF F*FRFRF^F`F`FlFqFqF}F‚F‚FŽF“F“FŸF¤F¤F°FµFµFÁFÆFÆFÒF×F×F×FÚFÚFóFGG%G%G'G'G3G9G>G>GDGPGPG[GgGtG‰G‘G—G—G¨G¨G±G´GH>è w~£~£›£££¦£´££×£à£ø£¤ ¤+¤<¤@¤R¤U¤`¤i¤u¤ˆ¤¹¤®¤”¤ɤݤî¤ú¤¥&¥8¥\¥m¥o¥�¥v¥«¥«¥®¥³¥¶¥¶¥½¥Ô¥Û¥è¥í¥ü¥ ¦¦¦0¦4¦a¦a¦y¦~¦~¦ަ–¦¦¦°¦À¦ʦÚ¦æ¦ë¦ë¦û¦§§§-§7§G§S§X§X§X§z§ˆ§’§—§¤§¹§¹§¾§ȧ×§ܧâ§ç§ç§ì§ö§¨
¨¨¨¨¨!¨&¨&¨5¨H¨T¨a¨m¨€¨ˆ¨ލ—¨®¨¨Ó¨à¨å¨ý¨©'©4©<©O©W©]©f©o©o©t©t©t©t©t©€©€©€©‰©¢©·©¿©Ú©ë©ø©ú©ªªªªª,ª1ª1ª8ªFªKªcªoª�ª�ª“ª¢ª¦ª¯ª¸ªÕªáªçªíª«««=«N«[«]«k«k«p«p«w«…«Š«�«©«µ«»«¿«È«Í«Í«Í«Í«Í«å«ê«ê«ê«ê«ê«û«û«û«û«û«û«û«û«û«û«¬¬2¬:¬U¬f¬s¬u¬‰¬•¬š¬š¬š¬£¬½¬ɬάð¬ü¬ü¬­­­­­­­­­­­­,­7­<­<­G­Y­q­ƒ­¤­Ä­Ï­à­å­å­å­î­®®*®.®F®V®^®f®q®›®¤®¨®À®ЮЮЮЮЮò®+¯4¯8¯>¯C¯L¯U¯Z¯Z¯Z¯Z¯i¯}¯›¯¦¯«¯±¯¶¯¶¯ɯݯ°°°°°!°!°0°D°b°m°r°x°}°}°�°¤°ʰÕ°ݰã°ã°è°è°è°ñ°
± ±'±B±S±`±b±q±s±s±s±s±s±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±‡±–±¥±°±²±²±»±½±½±ѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱѱÓ±Ó±ê±ò±þ±þ±²²²2²G²V²b²x²’²•²Ÿ²«²Ѳñ²³5³7³J³x³P³“³“³–³¦³®³ɳÚ³ݳ÷³´´)´)´T´W´f´z´›´¬´È´´´ä´ö´µGµEµ:µ/µ µUµUµUµXµ]µ`µzµˆµ¶µصص)¶J¶[¶w¶c¶“¶“¶±¶ä¶â¶×¶̶½¶ò¶ò¶ò¶õ¶ú¶ú¶··2·>·“º?°«ÓfÀfÀ|À€À‹À’À�À±À±À¼ÀÍÀÔÀáÀíÀúÀÁÁÁÁ!Á)Á9ÁGÁVÁaÁtÁtÁ‡Á‡Á�ÁÉÁÉÁÝÁßÁßÁéÁñÁñÁûÁ Â&Â+Â+Â/Â7Â;ÂAÂFÂFÂRÂgÂwÂ�”™¡¡¦¦­¹ÂÎÂÞÂèÂðÂö ÃÃÃÃÃ!Ã(Ã3Ã[ÃfÃuÃÇÃ�ßåêêêêêêêêêõÃÁÃÎÃÞÃäÃìÃÿÃÄ ÄÄÄÄÄÄ&Ä.Ä7Ä?ÄDÄLÄQÄXÄcċĖĞĭķÄÉÄÎÄÔÄÙÄÙÄàÄòÄúÄ ÅÅÅ2Å4Å?ÅGÅ\Å\ÅdÅxŀŇÅ�őŕŤũŵÅËÅ×ÅßÅôÅÆÆÆÆ!Æ!Æ!ÆBÆ\ÆaÆiÆxƀƈÆ�ƢƭƵÆÊÆÏÆÏÆÛÆñÆýÆÇÇ&Ç+Ç7ÇBÇGÇGÇGÇGÇGÇGÇRÇRÇRÇRÇRÇRÇRÇRÇRÇRÇRÇRÇ]Ç}ǚǪǰǸÇËÇÐÇØÇàÇâÇêÇýÇÈ ÈÈÈ5È=ÈFÈNÈVÈ[È`ÈgÈrÈšÈ¥È­È¼ÈÆÈßÈäÈìÈñÈñÈñÈúÈÉÉÉÉ0É2ÉDÉVÉVÉVÉaÉfɃɈɈɑɖɖɖɖɖɖɖɖɖɖɖɖɖɖɖɖɡɭɹÉÙÉìÉôÉÊÊ!Ê(Ê5Ê=ÊFÊNÊUÊZÊZÊbÊjʆʎʑʓʣʭʭʭʯÊÂÊÓÊÖÊÙÊáÊæÊæÊïÊôÊüÊËË)Ë0Ë5ËMËWËrˋ˓ˠ˹ËÀËÀËÅËÅËÅËÅËÅËÅËÅËÍËØËãËòË÷Ë÷ËÿËÌÌÌÌÌÌ"Ì"Ì2Ì7Ì7Ì7ÌCÌJÌPÌ`ÌqÌ�̠̦̮ÌÃÌÊÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÒÌÔÌÔÌïÌùÌÍÍ ÍÍÍ:ÍGÍGÍGÍKÍVÍtÍ‚ÍzÏ@ü|~Ï~ϔϟϦϱϼÏÓÏÞÏåÏõÏÐÐÐ.ÐHÐOÐXÐ_ÐbÐnÐwÐ~Ð�ІМЦиоÐÊÐßÐæÐîÐúÐÑÑÑÑ$Ñ2Ñ<Ñ?ÑMÑWÑZÑlÑqÑvцщюўѡѥѮѶÑÈÑÐÑÐÑÐÑæÑðÑÒÒÒ)Ò0Ò8ÒJÒPÒ_ÒpÒpÒwÒwÒwÒ…Ò“Ò�Ò Ò®Ò¸Ò»ÒÍÒÒÒ×ÒçÒêÒïÒÿÒÓÓÓÓ)Ó1Ó1Ó=ÓJÓRÓRÓUÓ`Ó~ÓŒÓÕÓAhoÅ6Ø6ØPØcØjØqØ|Ø�ؒ؛آإصØÃØÎØÙØÜØòØþØÙÙ)Ù4Ù?ÙJÙaÙmلٌٕÙ�ÙªÙÅÙÈÙÎÙÓÙæÙìÙôÙÚ ÚÚÚ#Ú5ÚBÚUÚ[ÚcÚvÚ|Ú„Ú„Ú­Ú²ÚÑÚÔÚÔÚÛÚèÚìÚ÷ÚÛÛ-ÛMÛiÛ}Û…Û�Û®ÛÂÛÂÛ8ÜB >+>+H+P+U+CÉÇnSnS‹S–S©S–SÃSÑSÑSáSêSñSõSþSþST
T(T4T@TFTQTsTsT†T‘T—TžT£T£T¶TÁTÌTÓTÛTèTèTúTÿTÿTUUUU'U,U?UEULUaUuUuUzUzUŠU�U�U”U›U£UªU¬U´U»U»UÊUÐUÝUäUçU V VV V+V2V4VHVWV\VaVaVaVtVyVˆV�V–V«V¿V¿VÄVÄVÌVâVçVûVWWWW"W4WCWVWZWiWwW…W”W±W¼WÁWÐWäWëWòWXXX"X$X2X?XOXVXkXrX~X�X¦X¨X´X¿XÁXÁXÌXàXíXõX÷X YY$Y4Y@YaYhYtY’Y’Y’YšY¥Y©Y±YµY½YÄYÔYßYùYþYZZZ!Z&Z&Z5ZBZPZ[ZfZtZzZ€Z†Z�Z•Z¤Z±Z¹ZÅZÓZêZìZõZ[[[,[2[8[>[G[X[[‡[‘[ž[¶[½[É[Ø[í[í[ú[ÿ[\\\\\Ó\DD�šŒŒ2Œ>ŒTŒ@Œ`ŒbŒtŒ†ŒŽŒEìˆÿöYöYZ"ZUZdZzZžZ£Z§Z¯Z¸ZÇZÎZ×ZÜZñZ[![)[+[J[R[a[h[t[y[€[ˆ[Ž[�[¬[±[Ç[³[Ó[Ù[Ù[á[ê[ù[\ \!\@\G\G\G\[\o\s\�\”\Œ\¬\±\¼\Ã\Ë\Ñ\Ó\ï\ô\
]ö\]]]8]=]V]B]b]h]m]‰]Ž]¤]�]°]¶]½]Å]Ë]Í]é]î]^ð]^^^^^'^'^1^1^I^y^�^‘^Ÿ^²^ª^Ê^Ê^Ü^FüE€¾Ý¾ÝÝÝùÝþÝ Þ=ÞLÞjÞ~Þ–Þ�Þ¢ÞÃÞáÞðÞ ßß5ß9ß9ß=ßBßGßQßTß^ßdß�߄߄߄߉ß�߫߹ßÅßÎßâßêßóßàà&à/àCàCàRàWàWàeàGl¬ÃvDvD„DžD‹D½DªDÉDÞDËDýDêD EE E*E,E7EBEBEaEgEHP‡—óó*ó7óFóRóXó‚ó˜ó„ó¯ó¤óÇóÏóIŒg†¦ñ¦ñØñûñûñòò1òEòJòJòWò_ògò|òˆò™òžò¯òÃòÈòÊòÊòÊòãòûòûòóJP�­6767_7a7o7u7“7¢7±7À7Î7Ù7Ü7ì7Kì8>0>0h0k0n0t0y0�0§0¾0Ð0ö01 191P1b1o1‚1•1š1¢1¬1´1´1»1Ä1Ä1Ï1÷12202I2K2e2k2„2�2¥2°2°2º2º2Ì2
3 313L$ty†d†d±dšd»dÃdMLu„æÇæÇøÇ ÈÈ/È6È>ÈNÈVÈgÈmÈŸÈNTHY�b�b¢b¤b­b¶bÄbÉbÒbÕbÚbèbòbõbÿbO¨!Gè`è`ø`aa!a-a9aEaQahahawa‚a‹a’a›a²aÅaÊaÜaëa÷a b bb2b2b4bGbIbcbobrb‰bPxîˆ0m0mImTmdm­m´mÈmÏm×mßmèmðmømúmn
nnn7nOnXnXn�n·nÀnânünoCoOoqosozo�o�o¤o½oäoýo$p=pdp}p¤p½päpýp$q$q3q@qEqEqTqaqfqfqmqxqŠq£q¼qÕq×q×q×qÞqÞqëqðqðqðqrr"r7rqrxrxrxr€r�r«rÉrÒrÛrèrörs,s,s,s?sMsis‡s‡s‡s’s•sÂsÄsÛsásòsûsýs
t ttt(t(tLtNtUtftotqtt�t�t‘tŸtŸt¿t¿t¿t¿tÌtßtòtu u9uAuEuMuQu_umuouwu{uu‡u•u£u£u½uÈuÞuðuv'v2v<vCv\vhvovˆvˆvšvŸv¡v§v¸vÉvØvßvðvùvûv w www)w)w)wMwMwjwqwxw{w‡wŠw˜wœwªw®w¼wÀwÀwÙwàwåwówx x!xAxTxcxextxvx…x�x�x�x¦x¼xÃxèxíxyFyKyYy[yiyryŒyŽy�y—y¨y±y³yÁyÃyÑyÓyáyáyzzzzz z z z+zGzlz…zŠzŠzŠz¬z±z±z±zÑzÖzÖzÖzõzúzúz{{{ { { {{{{{;{Q{v{’{¦{«{«{Æ{Ó{Õ{ä{í{| | || |/|1|1|9|4|r|r|r|‘|‘|‘|²|·|·|·|Ù|Þ|Þ|Þ|þ|}}}"}'}'}B}P}R}a}j}„}†}†}‹}†}¬}®}®}¶}±}ï}ï}ï}ú}ú}$~$~N~f~~~‰~Ÿ~¯~Ä~Ü~ð~
 7NUMƒQ|.ää2äFäQäfä„ä�ä­ä­ä­äºäÒäÔäÔäÔäáäùäûäûä åå.å.å?åSåRçeÆ×Æ×à×é× Ø ØØØ Ø'Ø/Ø5ØBØBØ_ØdØdØjØoØoØuØzØz؀؅؅Ø�ذضػػØÄØäØäØäØëØíØíØôØöØöØüØüØÙÙÙ Ù ÙÙÙÙÙÙ!Ù!Ù)Ù/Ù5Ù=Ù=Ù=Ù=ÙIÙQÙYÙaÙiÙqÙyÙٗ٦ٰٳٳٽÙÃÙÉÙÉÙÍÙÕÙÜÙàÙèÙðÙöÙþÙÚ ÚÚÚ Ú*Ú0Ú=ÚIÚOÚWÚ[ÚbÚjÚrÚvÚ|Ú„Ú‹Ú“Ú›ÚŸÚ¥Ú°ÚµÚËÚÜÚáÚäÚŠÛSL˜§ „ „9„;„B„X„h„n„†„ž„¡„³„û„TÔ*[6ë6ëJë_ënërë€ë†ë•ë•ë¤ë¯ëºëÅëÌëÜëóëì ììì%ì%ì;ì=ìGìhìsìuìŽì’ì ì¥ì¥ì¬ì¸ìÀìÓì=íU$nsFdFdqdZd{dƒdVl  NHNH\HvHcH•H‚H¡H¶H£HÕHÂHáHïH÷HIIIII9I?IW,>Ò>ÒGÒMÒUÒdÒsÒxÒXTÒž¡ž¡¿¡Ñ¡Ü¡å¡¢¢ ¢9¢F¢F¢P¢P¢W¢j¢h¢x¢x¢ƒ¢�¢“¢™¢œ¢ª¢±¢É¢ТÓ¢å¢ê¢õ¢££5£I£f£ˆ£�£“£™£¤£±£Ï£·£Ø£Ü£â£ê£ï£¤÷£¤¤"¤*¤/¤/¤<¤B¤]¤I¤i¤m¤s¤{¤€¤€¤¡¤¥¤«¤³¤¤ݤɤé¤í¤ó¤û¤¥¥!¥%¥+¥3¥3¥8¥E¥c¥K¥l¥p¥v¥~¥ž¥†¥§¥«¥±¥¹¥¹¥Æ¥ä¥Ì¥í¥ñ¥÷¥ÿ¥ ¦¦(¦,¦2¦:¦:¦:¦P¦P¦P¦P¦[¦e¦n¦ަ𦍦­¦»¦ϦÔ¦Ô¦ߦç¦ï¦ø¦§§%§4§C§]§b§b§m§u§‚§�§š§¥§¿§ѧã§î§ó§ó§þ§¨!¨)¨5¨C¨H¨V¨j¨j¨r¨j¨Ѝ�¨�¨ž¨£¨£¨²¨·¨·¨ȨͨͨÞ¨ã¨ã¨ö¨©
©
©©,©1©?©1©S©X©f©X©z©©�©©¡©¦©´©¦©È©Í©Í©ê©ï©ªª$ªª8ª=ª=ªZª_ª�ª†ª”ª†ª¨ª­ª­ªʪϪñªöª«öª«««:«?«a«f«t«f«ˆ«�«�«¨«­«­«È«Í«Í«è«í«í«¬ ¬ ¬(¬-¬-¬H¬M¬M¬h¬m¬m¬ˆ¬�¬�¬ž¬£¬£¬´¬¹¬¹¬ŬЬå¬ê¬ê¬ö¬­­7­>­H­M­^­h­}­ˆ­�­ž­©­±­¶­¶­º­¾­Å­Ï­Ù­Ù­ì­ñ­ñ­ñ­õ­ ®®®7®<®<®D®X®a®{®ˆ®“®ž®©®»®Ç®Юծծծ殯¯¯#¯(¯3¯;¯@¯@¯K¯S¯\¯g¯w¯�¯§¯»¯À¯À¯˯Þ¯è¯ó¯° °.°3°A°E°J°J°Z°e°m°r°}°а•°¯°Á°Ó°Þ°ã°î°ö°û°±±±8±J±\±\±\±\±a±f±f±r±ƒ±ƒ±©±«±DZDZѱå±ï±ñ±ý±²"²3²=²H²k²|²�²ž²©²Á²ѲÖ²Ö²á²æ²æ²î²ù²þ²þ²³³³³³<³&³T³Y³Y³a³³i³—³œ³°³œ³ȳͳͳڳ߳߳ç³ì³ì³ø³ ´´ ´ ´4´ ´L´Q´Q´Y´^´^´q´v´v´‰´Ž´Ž´¨´¸´½´½´×´ç´ì´ì´µµµµ5µEµJµaµJµyµ~µ~µ‰µ޵ʵ¸µ¦µ޵âµçµ#¶ÿµçµ;¶@¶@¶O¶_¶d¶d¶s¶ƒ¶ˆ¶ˆ¶—¶¥¶ª¶Ò¶À¶ª¶ê¶ï¶··ï¶/·4·\·J·4·t·y·y·–·€·À·зÕ·Õ·ð·Ü·¸*¸/¸/¸;¸@¸@¸L¸Q¸Q¸d¸t¸y¸y¸Œ¸œ¸¡¸¡¸´¸ĸɸɸܸì¸ñ¸ñ¸ù¸þ¸þ¸¹ ¹ ¹¹¹¹ ¹%¹%¹8¹=¹=¹P¹U¹£¹‘¹¹m¹U¹°¹µ¹ºñ¹ß¹͹µ¹ººº$º?ºDºDºUºpºuºuº†º”º™º™º¡º¦º¦º®º³º³º»ºÀºÀºøºæºÔºǺ»2»7»7»o»]»K»>»Ž»©»®»à»λÆ»®»ø»ý»/¼¼¼ý»G¼L¼f¼P¼L¼~¼ƒ¼ ¼мƒ¼¸¼½¼½¼ɼâ¼ò¼½½)½+½A½G½G½c½p½¡½ã½Ò½À½ï½÷½÷½÷½¾¾¾¾&¾0¾5¾@¾J¾O¾O¾i¾n¾n¾v¾{¾�¾{¾›¾¦¾«¾¿¾«¾˾Ö¾Û¾Û¾æ¾ô¾ù¾ù¾¿¿¿¿%¿*¿*¿;¿@¿@¿Z¿e¿j¿r¿j¿~¿ƒ¿—¿ƒ¿£¿¨¿°¿¨¿¼¿Á¿Õ¿Á¿á¿æ¿æ¿ú¿æ¿ÀÀÀ ÀÀ À*À/À/À;À/ÀNÀSÀSÀ_ÀSÀrÀwÀwÀƒÀwÀ–À›À¯À›À»ÀÇÀÒÀÝÀâÀöÀâÀÁÁÁ$Á)Á=Á)ÁQÁIÁZÁ_Á_ÁgÁlÁlÁuÁzÁzÁƒÁˆÁˆÁ‘Á–Á–Á¡Á¦Á¦Á±Á¶Á¶ÁÁÁÆÁÆÁÑÁÖÁÖÁáÁæÁæÁñÁöÁöÁÂÂÂÂ&Â1Â<ÂGÂLÂLÂVÂ[Â[ÂeÂjÂjÂtÂyÂyƒˆˆÂ�••¢§§´¹¹¹¹¹ÂÁÂÆÂÆÂÎÂÓÂÓÂÛÂàÂàÂèÂíÂíÂõÂúÂÃúÂÃ+Ã0Ã0ÃBÃMÃmÃrÈÓìØøÃÃÃÎÃÓÃÓÃåÃðÃÄÄ+Ä6ÄOÄ;Ä[ÄfÄqÄvÄvĈēijĸÄÎÄÙÄòÄÞÄþÄ ÅÅÅÅ?Å+ÅKÅkÅpņőŖűÅ�ÅÑŽÅÝÅóÅßÅÆÿÅ Æ*Æ/Æ/ÆUÆAÆaÆ�ƆƜƧƬÆÇƳÆçÆÓÆóÆ ÇõÆ)ÇÇ5Ç@ÇEÇEÇkÇWÇwǗǜDzǽÇÂÇÝÇÉÇýÇéÇ È È È?È+ÈKÈVÈ[È[ÈjÈoÈoÈ~ȃȃȃȉȎȎȎȘȚȚȤȱÈÑÈÓÈÓÈÝÈÝÈÝÈÝÈÝÈßÈßÈöÈýÈÉÉÉÉ"É-É8ÉCÉNÉYÉSÉ|ÉtɔɢɜÉÅɽÉÝÉÝÉÝÉæÉîÉÊÊÊ(Ê(Ê@ÊJÊ^ÊxÊxÊxʙʩʾÊÐÊàÊàÊËËË0Ë0Ë4Ë9Ë@ËPËoËoËsˊˑ˖˖˚˥˱˿ËìËõËÌÌGÌSÌXÌn̡̜̯̂̎ÌËÌöÌÍ Í/Í1Í1Í5ÍTÍ_Í_ÍbÍp͛ͻͻͻ;ÍçÏY, ~Ò~ҌҒҖҥҴҺÒZ`àô.™.™D™f™s™w™†™Ÿ™£™©™¼™Ù™Û™Û™ šú™Û™+š5š[8cmÖcÖc÷cäcddd$d/d;dAd\\�”�œ�œžœ œ«œ³œ¾œÉœÔœÖœìœìœþœ
���E�]ܳf¾é¾éðéùéê)ê)ê:êGêeêmêšêŸêÈêåêëë ë.ëTëYë‚ëœëÂëÙëßëãëüëì ìì"ìAìGìKìdìlì‹ì�ì¡ì©ìÈìÍìÕìÛìßìãìõìýì í í$í6í;íLíQícílí€í‹í°íàíî
î
î
îî!î/î<î^î^îuîzîzî‘î“î“î§î©î©îÀîÂîÂîÙîÛîÛîòîòîïïïï=ïOïTïTïTïTïlï�ï¢ïÀïÀïÀïÍïäïæïæïæïóï
ð ð ðð0ð0ðGðIðcð�ð�ð�ð…ð‡ð‡ð‡ðŒðŽðŽð“ð“ð�ð¢ð¢ðÀðÀðÀðÈðÊðÊðÊðÒðÔðÔðÜðÜðÞðåðñññ.ñ.ñ.ñ.ñ.ñAñYñañañ¤ñ^`
æTæTøTU"U>UKUbUuU€U•U‚U¡U©U´UÇUÀUßUåU_ôW¶=¶=Ô=×=é=ð=÷=ü=þ=> >>">T>n>[>†>‹>¬>¬>¸>À>Ï> ??;?C?H?Q?\?d?k?Š?�?¯?±?Ð?Û?ò?@@@@$@'@+@<@\@n@`$fÜfÜuÜ�Ü�Ü“Üaxb|çç&çHçHçRçWçWçvçƒç…ç…ç…ç…ç’çšç­çÁçÃçÃçËçÞçÞçðçb”"†/†/¨/²/¾/Ã/Ó/Ù/î/00 0-0D0L0V0e0m0z0‚0…0…0…0‡0–0 0©0±0´0Æ0cHϾ9¾9æ9ó9ö9ÿ9::3:J:\:Š:¦:À:Å:Ê:Õ:ì:þ: ;;4;H;M;X;x;};€;š;´;¼;Ä;É;ã;ý;< <<,<4<9<Y<^<a<{<•<�<¥<§<Á<Û<ã<ë<í<=====$=$=/=/=;=;=M=�=£=£=³=dd¤¹Ð‰Ð‰à‰ç‰ó‰ù‰ŠŠ"Š.ŠEŠRŠRŠUŠcŠsŠŠŠŽŠ–Šeºû++-+2+F+u+�+Ž+˜+¨+¨+¿+Æ+Ý+ä+í+,,,,0,0,F,F,\,\,r,r,ˆ,ˆ,ž,ž,´,´,Ë,Ë,â,â,ù,ù,--'-'->->-U-U-m-m-…-�-˜-©-´-Å-È-Ê-á-è-ô.f¬÷ŽŽ¨®µ½ÅÈÓååù  "*@CQTW^bjxŠš�ìg(EK–’–’½’ª’É’Ø’à’hCNKNKqK†K‹K“K›K£K°K¶K¿KÅKÊKÒKîKôKöKøKLLLL#L)L+L-L:L:L:L?LHLPLYLaLcLkLsL{LˆLŽL™L L°L»LÇLåLìL÷LýLMMMM.M>MFMIM¯Mi8-77070K0O0T0_0j0m0q0y0j¤õš6š6šTšxš~š…š…šŒš¬š±šÇšãšÏšïš›››%›/›M›_›h›p›z›“››Ÿ›±›»›ÛÈ›ã›Ï›œï›œ%œœEœ1œQœcœmœuœuœ~œ†œœœµœÇœÖœÚœÚœáœæœ�� ��,�,�,�0�<�]�k�u�‚�£�±�»�½�½�×�ê�ø�û�ž ž>žBžežižˆžŒžŒžŒž’ž žªžÞÉžÔžàžâžêžðž ŸŸ"Ÿ,ŸEŸHŸPŸ\Ÿ^ŸfŸiŸ‚Ÿ„Ÿ�Ÿ’ŸšŸ Ÿ¹ŸÑŸÝŸòŸ÷Ÿ   1 B B M X p | ‘ – ¨ · Рá á ç ò ú ¡¡!¡kfäŽÛŽÛ¨Û±ÛÑÛÑÛ×ÛßÛçÛïÛ÷ÛýÛ
Ü
ÜÜÜÜ#Ü(Ü(Ü.Ü3Ü3Ü9Ü>Ü>ÜVÜiÜoÜtÜtÜ}Ü�Ü�Ü�ܤܦܦܭܯܯܼܾܾܵܵÜÄÜÄÜËÜÍÜÍÜÓÜÓÜÚÜÚÜâÜèÜîÜöÜöÜöÜöÜÝ
ÝÝÝ"Ý*Ý2Ý8ÝPÝ_ÝiÝlÝlÝvÝ|݂݂݆ݎݕÝ�Ý¥Ý©Ý¯Ý·Ý¾ÝÆÝÎÝÒÝØÝãÝéÝöÝÞÞÞÞÞ#Þ+Þ/Þ5Þ=ÞDÞLÞTÞXÞ^ÞiÞnÞ„Þ•ÞšÞ�ÞCßl`'"'"0"7"K"_"d"‚"‡"¥"§"Å"Ç"Þ"ò"û"ý"#!#R#m|2ÍØ‘Ø‘î‘ÿ‘’!’2’C’V’^’l’Š’•’›’¨’½’½’Ð’á’ç’ü’““,“1“9“A“G“_“r“}“�“‹“ “¦“¨“µ“·“ɓɓГؓê“ê“ù“”””(”,”8”<”H”L”X”\”\”o”‚”ˆ”Œ”–”𔩔­”¼”À”Ӕההההܔî”ý” ••5•E•U•Z•Z•Z•f•n•v•|•‘•™•§•±•¿•ŕǕǕǕǕǕǕǕǕǕӕەã•é•þ•–
–– –&–&–&–8–>–J–P–]–x–ˆ–”–š–§–¹–Ç–æ–@˜nÔ¼íPkPkbksk~k‰kŸk±kÉkÎk×kÞkëkòkll l llll3lMlcl{l€l‰l�l�l±lÌlÓlÕlØlÝlmm*mo$hm×&×&å&ù&''p¤b‡žXžX²X¹XßXËXëXðX÷X÷XY-YY9Y_YKYkYpYwYwYY†Y‘YœY¤Y¬Y·YÂYÕYÍYíYõYq?|¦l¦lÂlÉlálùlmmmmm*m5mCmSmcmjmpm…mšmšm®m¶mÆmÓmâmïmnn n-n4n:nOndndnxn…n–n¦n¬n½n½nÃnÑnânïnÿnaor8¬þJþJKK KK+K4K9K>K@Ks88B00“0—0œ0§0±0´0¸0À0t0†ŽFIFI\IoI|I‚I…I�IuÜtþþ +6?Oagms‰x�ª­µÇÍÒõ )/?EQ_dr‹™¢²´»ÀÈçõ:AKZ`flrˆ©½Éàëú#3AXdiw–¨¿ÈÎÙÞäû(79GVhhp“žÒv`Ëߘ˜4˜V˜c˜g˜v˜•˜™˜Ÿ˜²˜Ϙјј™ð˜ј!™+™wT�Þfàfà~à†à“à³àÅàÌàÖàÜàâàæàêà á áááá*á.á[á_ádádákánásáá�á‘á¢á±áµá·áÆáÊáìáðáõáõá â ââ"â)âOâZâ^âcâ™â°â»â¿âÐâÛâßâáâìâðâðâ
ããããã ã9ã=ã=ã=ãAãdãxˆßýfãfãzã�ã�ã�ã’ã’ã™ã›ã›ã¢ã¤ã¤ã±ã³ã³ãÀãÇãÉãÉãÖãÝãßãßã÷ãüãüã äy°‰±>e>eVe^eieÃe®e£eŽeweÉeÛeËeöeöeff<fAfMfXfmfZfyff†f§f™f�f»f½fÖfÖfãf
g
g
ggz †*F´F´c´j´r´}´”´ž´ž´µ´¿´Ú´ð´þ´µ"µ6µJµQµUµnµxµ‰µ–µ–µ�µ¤µ©µ®µ³µºµÁµÛµâµòµöµöµ+¶>¶Q¶Q¶W¶b¶i¶q¶|¶ƒ¶‹¶–¶��¨¶Æ¶Ê¶â¶Ó¶ý¶ý¶·
··!·/·6·:·<·N·N·N·`·h·Ž·œ·œ· ·µ·½·Í·Ø·í·ò·¸¸¸%¸0¸4¸9¸A¸E¸T¸V¸e¸g¸v¸x¸‡¸Ž¸’¸¦¸®¸¼¸Ã¸Ç¸×¸â¸ç¸¹ ¹¹"¹&¹.¹<¹C¹G¹O¹c¹k¹v¹z¹z¹z¹…¹�¹ ¹¬¹Â¹Ê¹Õ¹ä¹ì¹÷¹ü¹ººº º*º/ºAºIºTºTºTºTºbºqºŽºšº¢º²ºÂºàºäº»»ùº#»#»-»4»C»R»Z»h»o»s»u»„»Œ»š»¡»¥»¥»§»¹»¹»Ë»Ë»Ë»Ñ»Ý»ï»÷»¼;¼I¼M¼k¼r¼y¼„¼š¼œ¼£¼¶¼¾¼Ì¼Ó¼×¼Ù¼ì¼ô¼½ ½ ½ ½ ½ ½½&½5½=½K½V½Z½Z½_½g½k½z½|½‹½�½œ½ž½­½´½¸½Ì½Ô½â½é½í½ý½¾ ¾+¾3¾A¾H¾L¾T¾b¾i¾m¾u¾‰¾‘¾œ¾ ¾ ¾ ¾«¾²¾À¾Ú¾ê¾õ¾
¿¿¿*¿6¿L¿T¿_¿n¿v¿�¿†¿Ž¿™¿¥¿©¿´¿¹¿Ë¿Ó¿Þ¿Þ¿Þ¿Þ¿ò¿ÀÀ$À(À<ÀMÀbÀoÀsÀ�À–À¦À½ÀÖÀïÀñÀüÀÁÁ Á*Á;ÁRÁkÁyÁ„Á�Á˜ÁšÁ¥Á­Á­Á­ÁÇÁÕÁãÁøÁÂÂ+ÂIÂPÂPÂ`ÂtŽŽ’¨·ÂÒÂÝÂôÂüÂüÂÃÃ1ÃLÃUÃjÄÓàþÃÌÃâÃûà Ä#Ä#Ä;Ä;ÄGÄ_ÄwĀĀĀČÄ�ĵľľÄÅÄÎÄÔÄàÄFÅ{ÌL»¶ö¶öÔößöêö÷÷÷ ÷*÷0÷A÷P÷_÷l÷l÷r÷w÷|÷�÷¢÷­÷±÷Ã÷Ð÷Ø÷ã÷ß÷ú÷øøøø.øø?ø6øIøKøgøSøoø}ø}øø›ø›ø¢ø¨ø±ø¸ø»øÝøñøäøùøÿøùùùù ù ù(ù(ù3ùHùQùQùQùQùmù„ùŠù�ù�ù¤ùªù¯ù¯ù»ùØùøùýùúúú+ú:úIúQúVú\úaúaúhúoú’ú¯ú±úÎúãúãúéúéúöúÿúÿúû,û7û<ûIûTû\ûdûtû‹û‹û›û›û­û³ûÛûäûäûæûíûòûòûÿû
üüüü,ü9üKüVüdümürü™ü¢ü­ü²ü¹üÁüÔüéüîüõüý ýý0ý7ý=ýFýFýOýiýpýuýƒý“ý¡ý¡ý§ý®ý·ý·ýÊýÜýßýßýðýøýþ þ)þ0þ=þ?þFþZþiþiþiþ�þ�þ�þ�þ�þ²þ½þÏþÜþçþõþÿÿÿÿ0ÿCÿEÿTÿiÿkÿyÿŽÿŽÿ”ÿ�ÿ�ÿªÿ°ÿÂÿÂÿÏÿÒÿÝÿïÿöÿ %:<Vkkkmtz‹™««±¸ÁÆçððöÿÿ+.4=EPbhss€ƒ‰’𥷽ÈÈÕØÞçé 39DV\ddddoê|”�¾g3g3{33ˆ3‹3”3�3¯3¯3Ø3Ü3á3ä3í3ý34444 4'4/474>4N4N4Z4}Œ >æUæUúUV1VV=VBVIVIViVVkV‹V»V§VÇVÌVÓVÓVÛVâVíVõVWW W+W3W~À-ee6eFePePeZeZedeveƒe†eˆe‘ežeže¬eÀeÀeäeñeñefff1f>f>fTfwf�f°f¹fÆfÆféfófóf&gYg_g_g_gqg¸ºä˜Š˜Š°Š²Š¾ŠÂŠÏŠÒŠìŠìŠìŠòŠöŠþŠ ‹‹)‹+‹+‹4‹6‹6‹?‹A‹A‹J‹L‹L‹U‹U‹^‹d‹g‹q‹‚‹ˆ‹”‹”‹ü‹€œWzþ)þ)*-*P*W*p*h*ˆ*¨*”*´*Å*Ê*ë*×*+++2+K+C+c+ƒ+o+�+ +¶+¢+Î+Û+Û+ó+ó+ý+�œX{Ö-Ö-â-ò-ý-'.W.d.u.‡.Ž.•.©.°.¾.Ö.å.ò.õ.///-/9/E/I/P/†/‚x¬p¬p¬†¬�¬”¬³¬Â¬Ñ¬à¬ï¬þ¬­­ ­­'­6­;­V­p­p­†­˜­œ­ª­±­¶­¶­½­Ï­Ø­Ú­è­ú­ú­ú­ ®®)®4®A®F®V®[®k®w®|®‰®Ž®ž®£®³®µ®Å®Ç®×®Ù®ê®ó®ó®õ®¯ ¯¯¯7¯I¯[¯m¯}¯}¯}¯€¯“¯ƒ\åøŒŒŒ"Œ'Œ5ŒJŒQŒ[ŒiŒlŒnŒxŒŠŒŠŒ‘ŒÇŒ„0ÎÖÖÖî0$øöDL…`Ê——$—F—S—]—l—…—‰—�—¢—¿—Á—Á—ò—à—Á—˜˜†L4CN,N,\,n,t,|,Ž,”,�,¯,µ,¸,ô,‡(–œ7373E3T3X3[3a3ˆ\DWö,ö,---$-6-<-E-W-]-f-x-~-�-Ï-‰, ÒÒ$Ò+Ò3Ò8Ò>ÒŠ¬!HÖ Ö ô 


#
(
G
G
L
k
p
�
�
�
�
ž
·
°
Ï
Ù
‹@? aa+a3a:a_aqawa‚a™a¨a³a·aÂaÎaÙaåaüab&b=bRbbbbbtbzb‹b‘b¡b¡b¹b¹bÞbÞbãbãbébõbcc#c:cIcTcfcrc‰c¡cÂcÂcËcÐcÐcÐcÐcàcécñcöcdd"d'd'd5d5d:d:dDdOdadgdsdƒdŽd˜dœd¥d¾dÁdÑdØdödÿdÿdee.e5e;eGeOeZeaeeexe~e‹e–eœe¬e¼e¼eée ff f*f1f<f>fIfIfYf^f^fhfsf…f‹f™f¦f³f½fÁfÊfãfæföfýfggggg g/g8gJgPgRgRg`gfglg}gƒg�gŸgŸgŸg¤g¼g¼gËgÎgâgh h4hFhQhchghlhsh…h•h­h´h¸h¾hÆhÑhÔiŒ<KVÆ(Æ(à(ì(þ()5)")M)e)e)o)�`l€P›P›p›w››Š›”›Ÿ›§›¶›À›Ã›ç›é›ù›ù›œŽXnvÔvԜԮԳÔÊÔÜÔæÔðÔþÔÕÕ+Õ-Õ6ÕLÕZÕbÕjÕlÕwՂՂՊՒ՜դծշտÕÂÕËÕæÕ÷Õ Ö ÖÖ$Ö<ÖPÖXÖXÖjÖmÖrÖ…Ö�Ö±Ö¹Ö¹ÖÚÖÝÖâÖõÖûÖ×&×(×=×S×[×[×fׅ׌ח׮×�83=ŽÒŽÒ—Ò—Ò¥Ò©Ò·ÒºÒ¿Ò�8>HÆÒÆÒÏÒÏÒÝÒáÒèÒëÒðÒ‘D*Î*Î*è*û*+ ++0+9+=+O+U+t+’Ðy©ö÷ö÷ ø#ø*ø0ø6ø8ø>øDøDøVøaøhøuø‚ø•ø¤ø¸ø¾øÀøÇøÍø×ø×øèøêøñø÷øùùùù*ù1ù@ùBùTùcùcùuù“0+3v+v++¥+¶+¼+¼+Ä+”„\y¶ì¶ìÈìÝìçìðìòìùì ííí í í&í7í:í:í[ífíhí�íˆíŒí˜í«íþí• 
**'*E*J*–h÷ n^n^„^�^š^¨^³^¹^Ê^Ð^á^ç^ó^
_
__-_:_@_Q_W_¥_—�µÕ6O6OdOiO}O…O“O—O O O¥O²OÈOòO÷OP#P(P/PEP[P]PsP‰P­PÇPÙP˜ˆùnünü†ü˜üŸü¦üÅüÊüéüîüýõü'ýý3ýHý5ýgýTýsýsýsý…ýŒý«ý«ý³ý™ y}ЇЇهå‡ê‡š(AžâžâÀâÈâÎâÖâØâØâéâéâéâñâùâ ãã ã/ã1ã1ãKãMãMãXã]ãwã|ã|ã|ã‘ã“ã ã¢ã¯ã±ã¾ãÆãÎãÕãäãñãóãäääää,ä?äEäMäOä\ä\äqäqäqä|ä†äžä£ä£ä£ä±ä·ä¼äÄäÏäáäìäñäñäøäüä
åååå<åIåPåYåuåzåzåzåzå‚å�å›å›å»å»å»åÂåÐåßåòåææææææ!æ(æ-æ3æEæOæjæ“æ™æ™æ­æ²æÖæÝæéæçç%ç,ç0ç0ç0ç0ç;çEçSçuç€ç�ç§ç§çµçÓçèè'è>èQèVèVèVè^èiè{è†è‹è‹è‹è�èÊèÐèÐèÐèÛèåèñèüèþèþèþèéééYé›H%///$///=/H/P/P/h/r/x/~/œ0 îSîSTT!T7T0TOTWT�T9J¦'¦'À'Ì'Þ'ô'((-(>(P(f(‡(t(Ÿ(·(·(Á(žÖÞPÞPQ$Q,Q7Q>QEQNQPQSQqQxQ“Q•QœQ·Q¾QÇQÉQÌQêQêQêQøQRR/R1RKRSRSRoR�R’R™R­R´RÏRÑRØRóRS"S%S-S:SZS\SvS~S~SšSµSµSÛSíSŸTXi¾ ¾ Ô â è î ÿ  -17EHR Lg¶ý¶ýåýÚýòý þùý-þþ9þOþ;þoþ[þ{þ‡þŒþ˜þ¨þ¯þ¼þÇþÓþÞþæþëþ÷þüþÿÿÿ&ÿ+ÿ6ÿOÿXÿdÿiÿ}ÿ„ÿˆÿˆÿ�ÿ¦ÿ«ÿÄÿÙÿëÿðÿûÿ3>HSU`hhum�­¡àZŽxbxb’b b¥b²bÀbÉbäbòbcc-cGcRcbcdcfcpc|c€c�c™c«c³cËcÏcÏcÏcÏcÔcòc d dddd*d3d‰d¢d{�v+v+”+·+È+Ï+è+à+, , ,,,=,S,?,k,x,x,�,�,š,£@I•Þ
Þ
w
†
ˆ
§
§
Æ
Û
È
ç
ö
  ; &  G e ’ } q ž ¸ ¸ × ì Ù   ø % ? ? ? Q k k ˜ ± ¥ Þ ã ö ê   $ B Z N € m › Œ § Å Ú Ç ò æ  :::Lff�Ž­­µ¤(®ß®ß¼ßßßåßêßêßðߥ(!'6Ò6Ò?ÒMÒSÒUÒZÒ¦D]j|8|8–8�8¦8²8Ç8Ï8Õ8Û8Ý8Ý8ì8§„½Ú¨¥¨¥Û¥ç¥ë¥ó¥û¥ÿ¥
¦¦¦¦¦#¦'¦8¦I¦K¦O¦`¦q¦~¦‘¦˜¦¢¦¢¦¢¦´¦¨€¸—¸—Ñ—Ø—ß—æ—ì—ü—˜˜˜3˜6˜8˜S˜]˜g˜n˜y˜‹˜“˜“˜©˜©˜»˜©˜bV^V^|^œ^¤^¯^¾^Ç^Ë^Ö^ö^û^_4_:_?_R__ˆ_ž_¤_¬_¯_´_Ç_ì_ñ_` ```8`=`Z`y``‡`‡`Œ`’`•` `À`Å`ß`þ`a a)a2a7aVa^acaƒaŒaŽa­aµaÕaÚaôabbbbbb+b<bGb_bjb}bŠb¢b¶bÇbÑbÓbçbøbýbcc5c5c5cGcª°)žž+ž8ž=žAžJžWžcžnžyž�žŒž”ž—ž£ž«žÅžëžåžûžŸ9Ÿ%ŸIŸIŸaŸlŸˆŸ�Ÿ³ŸìŸìŸìŸìŸM «0ùA@Œ@ŒeŒqŒ|Œ†ŒŒŒ–ŒœŒ¦Œ´Œ¾ŒÐŒÚŒàŒêŒðŒúŒ� ���G�V�Y�[�e�w���“���²�²�µ�¿�Ô�Ù�é�ô�ù� Ž Ž*Ž?ŽMŽVŽ^ŽlŽ}Ž�ŽžŽ«Ž«Ž¸Ž¸ŽÀŽÎŽ�¬l£:æ?æ?ÿ?@'@G@Y@q@Œ@Œ@¶@¾@Â@Å@É@Î@Ø@Û@â@è@ï@õ@ù@þ@AA A'A)A-A6A@ACANAZA]AnAyAA†A�A¨A¹AÂAËAÓAÞAéAõABB#B1B3B:BABFBJBWB^B�B�B™B£B¬BÅBÖBßBèBðBùBÿBCC CC C.C8CMCWC`CyCŠC“CœC¤C­C³C·C¼CÂCÌCÖCòCDD DDD#D0D8DWDJDiDrD�D¡D´D»DÄDÍDÔDÝDæDïDEøDEEvE­  ȄȄքõ„û„®À�¹·'·'À'ç'Õ'Ç'((
(9(\(\(l(q(q(…(Š(Š(¦(«(«(Ë(Ð(Ð(ä(é(é()))8)^)~)�)¢)´)Ä)Ä)Ä)Ä)Ä)�*¯$bg&& &#&5&O&°´ªºº(º7º7º:ºCºOºOº[ºpº‘º£ºµº¹ºɺéºûº»»»!»'»0»0»Q»U»e»r»�»¢»¨»»»Í»Ù»Û»ç»ï»ó»ù»¼¼¼¼¼*¼0¼<¼Q¼X¼`¼l¼�¼ˆ¼ˆ¼ˆ¼–¼¤¼®¼±¼¿¼ɼ̼Þ¼ã¼è¼ø¼û¼½½½½ ½(½:½B½K½a½g½s½ˆ½�½—½©½¯½¾½ϽϽÖ½Ö½Ö½ä½ò½ü½ÿ½ ¾¾¾,¾1¾6¾F¾I¾N¾^¾a¾e¾n¾v¾ˆ¾�¾™¾™¾¤¾»¾Ó¾×¾ã¾û¾¿ ¿¿¿"¿*¿3¿3¿3¿L¿T¿Z¿q¿z¿‚¿ˆ¿Ž¿Ž¿Ž¿•¿§¿³¿»¿Á¿Ç¿Ç¿É¿Û¿±xNÓNÓ\ÓqÓxÓƒÓ¥ÓÙÓõÓÔÔ!Ô-Ô6Ô>ÔFÔHÔNÔTÔ`ÔhÔnÔpÔvÔ²Ü,ß–l–l´l¼lÌlÔlmmm$m,m2mFmNmNmVm�mÙm´mümnn"n$nNnTn]ndnlntn€nˆn�n£n«n°nºnÚnânänînýno%o'oGoOoOoOoZoaoto|o…o…oŠoŽo–oŸo¨o°oÌoçop+p.pEpRpfp}p�p²pÌpÞpqqq:q=q=qTqaquqŒq—q›q¦q±qÃqÒqÔqþqrr"r'rQrWr\rnr}rr©r¬r¾rÍrÏrùrÿrÿrÿr s ssEsPsPsPsPsYses{s”s§s®sºsÁsÁsÔsØsØsØsßsäs÷sþs
ttt(t*t/tBtItUt\t\titststzt›t›t­t³ ÄæDæDûDE.EE EME:EYEnE[E›E†EzE§EµE½EÈEÊEÕEàEàEåEFFDFIFcFPF‚FoFŽF™F®F›FÍFºFÙFÞFÙFôFG
GGG"G-G-G2GMGOGjGjGwG|G›G�G¼G¼G¼GÄG´\ãö~]~]”]¦]¬]·]Å]Ñ]è]è]ú]^ ^^&^4^A^m^µ(28®®Ìßæíôøú  -77KVduy~šÂÆÏÓØé   ( - F W [ [ [ ` Ž £ ª ½ Á Æ â 
   $ 5 G W k m † ™ � � � ¹ á å î ò ÷ !%!%!3!G!L!e!v!z!Œ!Œ!Œ!‘! !Á!à!ë!ñ!"""2"N"v"z"ƒ"‡"Œ"�"¶"¶"Ä"Ø"Ú"ó"####"#&#8#=#Y#�#‰#’#–#›#¬#Â#Ò#æ#ë#$$$-$-$-$-$2$Q$`$�$Œ$’$¨$¹$¹$¹$À$Ó$ì$ì$ì$û$û$%%%0%A%F%L%V%X%d%d%k%v%‹%�%˜%­%¹%»%Æ%Ò%â%é%ð%ú%&&
& &&&&/&1&6&>&B&D&D&M&Z&p&�&ª&¶&Â&É&É&Ü&à&à&à&ç&ì&'''%'%'<'>'C']'i'u'|'|'‰'“'“'¥'˜ ºœ˜G˜GµGÄGÄGÄGÞGÞGíGíGóGõGõGûGýGýGHHH HHHHHHHHH2H2HGHRH\HiH~H€H›H�H¸H½HØHÝHãHãHøHûH"I/IGIgIgIpIuI“I�I™I¨I­I´I½IÐIØIàIåIåIåIîIJ J J&J4JNJdJfJnJtJ|J�J�J‡J‡J�J¡J£J¸JºJÂJÈJÐJÕJÕJÕJÕJãJ÷JùJ K KKK#K(K1K9KBKHKNKPKPKPKXKXKfKzK~K€KŒKŽK©K¯K·K¼KÅKÐKÓKÙKßKèKëKëKùKL L,LILOLWL\LeLgLgLlLnLvLvL‘L£L¨L´LºL½LÔLÖLÙLéLíLôLýL MM M(M-M5M:M:MBMOMgMlMvMžM©M´M¿MÊMÕMàMëMöMöMöMþMþMN%N?NUNUNWNWN`NfNhNhNnNtNtN|N…N‹N—N—NžN¡NÀNËNÓNÛNàNàNçNëNðNÿNOOOO%OLOLORO`OqO}O„O’O¡O·O½OÂOÂOÇOÚOæOîOþOPP P&P(P1P1P7PEPQPdPwP‹P‘P“P¦P«P«PÈPÈPÚPàPéPïPøPQ Q QQ$Q&Q1QCQVQVQjQvQˆQ�Q™QŸQ¢Q¹Q»Q¾QÎQØQÛQÛQêQýQRR R&R)R@RBRERURYRaRoRtRyRyRR‡RŒRŒR’R’R R¦R¬R¶RÀRÎRãRæRèRòRòRôRüRSS S SSSSS#S.S3S8SCSHSnSpSuSzSS„S‰SŽS“S“S˜S�S¹SÃS×SëSñSùSùST TTT'T5TJTMTOTYThTmTmTmTuTzTƒTƒTˆTˆTŽT–T›T›T T«T°TµTºTÉTÉTÚTàTàTîTôTúTUUU1U4U6U@UOUTUTUTU\UaUjUoUoUuU}U‚U‚U‡U’U—UœU¡U°U°UÁUÇUÇUÕUÛUáUëUõUVVVV'V6V;V;V;VCVHVQVVVVV\VdViViVvV|V|VŠV�V–V VªV¸VÍVÐVÒVÜVëVðVðVðVøVýVW W WWWWW+W1W1W?WEWKWUW_WmW‚W…W‡W‘W W¥W¥W¥W­W²W»WÀWÀWÊWÒW×W×W×WÝWçWíWXXX XXX!X!X'X5X>XLXQXQXWXeXqX‚X�X–XžX¨X¶X¶X»X»XÆXÆXÆXÊXÏXÏXÕXÙXÞXæXìXîX÷XYYYYY!Y'Y5Y@YEYKYSYXYXYXYXYXYXYXYXYXYXYqYwY€Y†YŽY“Y˜Y¡Y¬YµY½YÂYÂYÂYÈYÐYÕYÕYÙYÞYÞYçYõYZZZZZ1Z1Z7Z@ZTZTZ]Z_ZeZnZ‚Z‚Z‹Z‹Z‹Z�Z•Z•Z�Z¢Z¢Z¿ZÍZÙZâZèZòZúZÿZÿZÿZ[["[4[>[>[F[F[N[P[P[i[s[|[~[~[~[„[ˆ[Š[Š[Š[Š[�[•[›[Ÿ[_·Ðà®t®tÐtætòtu,u9uPucunu„upu�u˜u˜u§u§u¯u»uÑuæuõuvvvvvv#v2v=vTvVv[vjvuv‚vŒvŒvšv¸”*KP P h o v y ‚ … ˆ Œ ‘ ± ž Á É Ñ Ô Ö æ ï ø þ ¡¡)¡:¡E¡w¡¹à.¢ö;ö;< <0<3<7<@<G<U<d<z<‹<œ<®<À<Ï<Þ<ï<þ<þ< =====*=1=?=S=\=b=p=‰=‹=�=™=™=ž=ž=ž=£=£=²=»=Ã=Ù=Ù=Ù=Þ=Þ=ó=ÿ=
>>>>>>3>?>L>N>N>R>T>T>p>|>ˆ>Š>Š>�>�>�>œ>ž>ž>¡>¡>ª>°>µ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ñ>Ó>ä>ö>????? ?<?@?E?à?º,fÑfÑtÑ{ушюѻ˜?a®V®VÄVÊVÑVWíV WWWW9WOW;W[W‹WwW—WœW£W£W£W©W¬W°W¸WÐWÛWîWæWXX¼PQa % %-%;%B%R%c%h%…%‹%’%™%§%³%Å%&½D%ößöß
àààAàGàMàràxà~à„à„àŒà¾ô#œ>0>0F0U0Y0f0s0‡0–0¶0Ã0Õ0÷01%1A1S1k1‚1�1®1Ì1Û1ö1225252P2y2“2®2À2Ï2Þ2Þ2é2ü2 3 303=3H3W3w3w3ƒ3ƒ3ƒ3”3¡3¨3Ç3Ð3Ý3á3é3ô3 4$4-4=4E4J4n4~4Ž4™4­4²4º4à4â4í4 5:5:5R5a5i5x5�5‰5›5º5Â5Ê5Õ5×5ç5ÿ56/6G6Y6p6y6‚6”6¢6¦6ª6¿ …… …(…-…À\…XÈÈ8È?ÈLÈWÈ\ÈbÈtÈzȒȘȶÈÊÈÕÈÛÈýÈýÈ É"É$É'É3É;ÉCÉKÉYÉ_ÉeÉqÉqÉsÉ…É‹É�É�ɧɧÉÅÉÅÉØÉåÉêÉêÉÊ
ÊÊ/Ê:ÊHÊSÊcÊpʂʈʒʞʫʭʭʵʺʺÊÂÊÇÊÇÊÏÊÔÊÔÊÜÊáÊáÊçÊìÊìÊóÊøÊøÊÿÊËËËËË Ë$Ë$Ë/Ë4Ë4Ë?Ë?ËXË_ËeËhËsËvˊ˗˦˭˰ËÂËÄËÊËÞËëËúËúËúËúËÌÌ1ÌAÌRÌXÌiÌoÌtÌ~Ì�Ì Ì¯ÌµÌÆÌÑÌÛÌêÌùÌÿÌ
ÍÍ%Í+Í<ÍGÍMÍ]Í]Ím͔̀͌ͤͫͱÍÂÍÍÍÒÍïÍÎÎ"Î.Î@ÎKÎZÎ\ÎnÎvÎ{΂ΆΔΞΤήδοÎÅÎÇÎÔÎáÎëÎÏÏÏÏ Ï_ÑÁ0#«è§è§¨1¨9¨9¨G¨Z¨s¨v¨’¨’¨’¨š¨œ¨œ¨¤¨¦¨¦¨®¨°¨°¨¸¨¸¨Á¨Ç¨Ì¨Ì¨Õ¨á¨å¨ê¨ð¨õ¨õ¨ý¨© ©©©©"©:©Y©\©q©�©�©�©˜©š©š©š©¢©¤©¤©¤©¬©®©®©®©¶©¸©¸©Ã©Ã©É©Î©Î©Î©Î©Õ©à©ò©ªªªªª(ª(ª/ª3ª9ªQª_ªrª~ª§ªªª±ªÃªËªÔªßªßªêªðªõªõªõªüª«« «%«G«S«Y«^«^«e«p«p«u«‡«�«�«�«�«æ«Âd)BB>BHBKBKBUBhBjBwByB„B˜B B°BµB»BÃBÆBØBÃLWf§0§0»0¿0Ä0Ï0Ï0Ù0ß0ß0ã0ë0Ä\CV?0?0U0U0Y0^0q0t0y0y0ƒ0‰0‰0—0™0£0Å8(2^Ò^ÒgÒgÒuÒyÒ€ÒƒÒˆÒÆ¨²ØŽfŽf¦f®f¹fÒfÆfÿfYgDg9g$g g_gtgdg�g”g gÇgÌgágÎgígógógh'hOh5hch~h~h~hŠhÇl¥¼®-®-È-ð-Ó-ü-.5...M.e.R.q.„.¤.¶.É.É.Ö.õ.õ.ÿ.È4“œ&è&è:è?èEèIèMèlètèɼLw^’^’v’�’‹’¤’¼’Á’Æ’Ê’Ì’Ò’Ø’î’Û’ú’ú’“1““=“G“`“x“}“‚“†“ˆ“Ž“”“ª“—“¶“¶“ɓѓã“ý“ö“ ””Ê4;DöÜöÜÿÜ Ý*Ý/Ý1Ý1Ý6ÝË”"¸¦¸¦Æ¦Ø¦Ü¦ä¦ì¦÷¦§
§§ §%§;§B§I§T§_§a§l§w§y§…§�§›§¤§¬§¬§°§ç§Ì€Úö§4§4Å4É4Í4Õ4ã4æ4é4ü455555#5+575L5]5d5k5k5x5�5Í\!´¾H¾HðHûH0I!II6IeIjIjInIxI„IŸI¦I´I¶I¾IØIôIJJ+J?JDJKJpJwJ€J‚J‡J›J¸JÊJ×JïJ KK!K%K%K0K7KIKLKNKdKSKpKˆKŠK¢K´K·K¹KÏK¾KÛKÛKÛKíKíKûKL-L&LBLBLGLKLgLsLŽL¬L¶LºLÊLéLÞLõL÷L MM.M'M=MAMWMvMkM‚M„M–M M´M¾MÇMÞMèMêMþMNNN"N"N"N-N4NHN`NbNzNŽN¥NªN¼NÄNåNûNûNûN O O2OÎd9ή2®2ä2ë2ó2ü2 33/3235393B3P3Z3_3‡3Œ3™3Å3Ê3×3÷3ü3 474?4D4Y4…4�4’4’4¥4¸4È4Ì4ë4ü455#5#5#5#5#535H5K5N5R5R5W55„5�5š5¢5½5Ï5Ü5ç56666)6+6+6+686O6Q6Q6^6u6u6†6‹6«6½6Ï6í6í6í6ú67777 7779797F7]7]7n7v7{7¡7³7Å7ã7ã7ã7ð78 8 88-8-8B8D8K8m8‹8�8—8¥8¯8±8±8±8Í8Õ8×8×8ù839Ϥ/TÎäÎäîäåå/å?åDåDåSåeåå‡åŽå�å£å«å«å«å­å­å­å­åËåËåËåËåÝåßåßåßåßåòåýå æÐxµ””,”8”C”H”T”_”d”k”p”{”€”€”€”²”Ÿ”¾”À”Å”ДÕ”Õ”Õ”•ô”•:•:•M•`•s•†•‹•‹•ž•±•Ä•וܕܕ–(–*–*–=–P–c–v–v–v–„–Ñ0Š’ÆçÆçÔçÚçÞçýçèè$èÒ<:E77ˆ7“7¡7­7¹7Â7Ë7Ô7Ú7ß7ÓluŒç&ç&õ&ÿ&'''"'$'0':'H'e'g'w'w'|'~'…'·'ÔÜŸÒŽ~Ž~¢~Ì~Á~­~ç~ô~@EqqvŒž´Êý €D€0€_€l€˜€�€¥€Ä€Ì€ñ€æ€Ò€���:�&�N�[�‡�‡�‡�‡���ÕL½Ì//$/6/=/\/\/n/�/Ž/‡/¦/°/ÖÈg•ï0ï01161X1d1k1v1�1Ž1—1—1œ1¦1¾1É1Ù1å1ì1÷12
222 2 2 2'2'2121292A2I2Q2U2_2«2× x„x„†„š„ „Ø`FZß7ß7ï7ö7ø7ý7 88'8'85858A8J8M8[8e8h8p8Ù<›¦ž ž § ² ½ È Ó Ý û ¡¡Ú 2¦_¦_¾_Ð_Ö_â_í_û_``)`9`K`Q`W`]`p`v``…`—`�`¨`°`¾`Ë`aÛ, N*N*\*m*ƒ*”*—*�*Ü40…0…>…H…Q…X…_…i…i…o…ÝÄKxÖõÖõöö
ööö.ö0ö4ö8ö;öNögö‰ö’ö�ö¤ö½ößöäöýö ÷$÷+÷D÷f÷h÷�÷£÷£÷£÷¸÷Ò÷á÷ó÷Þ}¾ÞnÞnünÿnoo!o2o?oEoJoJoWo`ofovo„o†o¥o¶o½oÉoÙoÙoçoúop pppp p p+p:pMpSpXplprpzpŒp’p”p£p°p¶p¼pÁpÇpÍpÔpàpçpépîpöpøpýp q qqqq q'q)q.q6q8q=qGqIqNqXqXqXqhqhqhqq…q‹q–q›q£q¼qÂqÍqÑq×qâqûqrrr$r)r.r.rCrKrSrqr|r‡r“r�rœr¥rªr¯rÄrËrÔràræròrörûrs ss!s#s)s6s;s@sYsdsososus‚s„s‰s’s«s¶sÁsÇsÔsÔsØsÝsÝsîsðsðstttttt-t/t/tBtDtDtVtVt\tatatxtŒt�t™t¡t¨t®t¶tÉtÔtËtätätætþtuuu!u1u=uTunusu‡u—uªu¯u¯uµuÉuÛuæuîuöuúuvvvvv-v=vBvBvHvNvSvSvSvYvhv{vˆvŒv‘v‘v•všvšvŸvªv¶vÐvævòvòvøvwww w/wBwBwOw[w[w[w[w_wdwuw‡w’wšw¢w¤w¶w»wÉwÕwÛwèwèwÿwxx#x/x1x:xFx]x]xcxpxrx„x„x�x�x�x�x�x {ß „ÈOO4OBOUOZOxO~OƒO‰O—OžO­O²O¾OÐOÐOîOùO PP-PJPVPqP‰P¥P®P½PÅPÒPÛPàPñPÿP Q$Q,QEQWQgQmQxQ�Q‡QÍQ·Q¨QÝQRRóQ(R+RKRßRà<*5ÜBÜBýBC CC7C?CUCaCá„ |ffˆ“𢥥µÀÀÃÊÑ×Ýãêð DHK[chhou†Œ’�®®·¼ÆÍÔÜâäò  '4444:LRc„•­´¾ÆÍÍÖÝéù,<?úâ„9_6_6{6Š6‘6«6Ñ6ç6ø677!7:7:7L7b7j7m7y7ãX{ÍNNyƒ–¡³ÁÇØßçý-=GIYirx}„Š�–¡¬¯ÐØò #5DOWn‡‹”›­µ¼ÀÉËÝô 4::Lä 
 „ „©„½„„å,ýD^�^�z�€�‹�œ�¡�§�ª�®�®�Î�Ó� �õ��.��:�S�?�_�f�k�u�x�|���š�†�¦�¦�¦�«�¼�Á�Ç�Ê�Î�Î�î�ó�)‘‘5‘N‘:‘Z‘p‘\‘|‘ƒ‘ˆ‘Ž‘‘‘•‘—‘°‘œ‘¼‘¼‘¼‘¼‘Ô‘ý‘ ’æˆÍë  (##2AAPP__nn}}Œ ›ªª¹È×ÔçxÈâN\N\l\~\„\�\§\§\¹\¿\Ê\Ú\æ\ï\õ\û\]]!]-];]J]J]z]èd�²vèvèzè�è�è§è®èºèºèÑèÑèèèèèÿèÿèéé-é/é/é3é騯øŽúŽú°ú·úÂúØúØúêúõúûû"û9û=ûBûFûHûYûkûwû‰û‹û¤û³û·û·û·ûÊûßûßûëûñûûûüüü*ü,üBü\ü\ünüêP6FdCdCzC†CŽC’C£C±C·CÃCËCÖCÜCßCéCë ®-f7f7€7‹7�7˜7Ÿ7¦7¼7Í7Þ7ð788 818@8@8G8K8T8a8h8q8x8|8œ8œ8œ8œ8œ8¨8¬8¯8·8Å8Í8Ú8â8ê8û89 9 999-9D9F9Q9^9m9p9v9r9Š9¡9£9±9³9¾9Ä9Ä9Ì9Ì9Þ9å9û9û9û9:::#:.:3:3:6:;:;:W:e:r:t:t:x:z:z:–:¤:°:²:²:µ:·:·:Ä:Æ:Æ:É:É:É:É:É:Ò:Ø:Ü:è:;;#;*;ò;ì(rx ‡ ‡®‡µ‡Å‡È‡Î‡í(nt—&—& &ª&º&Å&Å&ã&îTzKþíþíî"î%î.î8îPî`îiîoîrîvîxî�î î­î³î·î½î¿îÂîÆîÆîéîíîóîóîúîï1ïDïWï]ïdïoïyï}ï€ï‡ï�ï‘ï—ï¨ï®ï³ï¸ïÅïÇïÙïÛïâïïïñïððððð'ð2ð>ðUðUðjðvð“ð·ðÑðÖðíðòðñññ"ñ3ñHñNñ^ñkñƒñŠñ–ñ®ñºñºñºñÀñÃñÆñßñåñùñÿñòòòò!ò.ò.ò4òBòYò_òbòeòlòuò|ò|ò�òŽò›ò›ò¡ò¯òÆòÌòÏòÒòÙòÙòêòñòþò ó óóó#ó)ó0ó;óOóOóiónóuó}ó„ó“ó—ó ó¸ó½óÄóæóñó÷óÿóô,ô,ôGôGôaôoôvô}ôŸô²ôÖôØôâôõõõõ)õ:õRõVõ+öï¼ÙŽhŽh¦hªh¸hÇhÒhÞhéh iëhiii<iliPiCiŽi“i»iÀiÌi×i÷iÙijjj"j?jRjRjujuj�jð î)î)ý)**ñ8�™II I.IBIOIUI[I^IIò8 o.o.}.„.�.—.ž.¤.ª.ª.°.ó ž*ž*¨*°*µ*ôôÓŒ–�–�´�Ä�Ï�Ú�ó� ‚8‚d‚Ž‚”‚š‚¢‚¤‚¬‚ǂʂՂá‚ú‚&ƒ?ƒkƒ•ƒ›ƒ¡ƒ©ƒ®ƒ¶ƒуÔƒ߃ëƒðƒ „5„N„z„¤„ª„°„¸„º„„Ý„à„ë„÷„…<…U…�…«…±…·…¿…Ä…Ì…ç…ê…õ…††† †††"†-†?†N†i†}†§†­†²†ĆÓ†ñ†‡/‡5‡=‡B‡T‡c‡~‡’‡¼‡‡LJه臈ˆAˆGˆLˆLˆLˆ]ˆhˆsˆ™ˆ±ˆ¼ˆĈшшֈ鈉‰+‰C‰N‰V‰c‰c‰h‰{‰ˆ‰’‰¦‰½‰Ö‰è‰õ‰ Š4ŠKŠYŠ[ŠoІІŠ�ЛбŠÊŠÝŠéŠüŠ‹‹‹‹ ‹ ‹+‹B‹D‹I‹\‹h‹u‹‹‹‘‹õ”k ì8ì8999$9/919M9M9M9T9^9b9f9i9i9r9v9Œ9Œ9Â9Î9Ù9é9ù9þ9:::::":/:6:>:C:C:X:d:l:q:q:†:“:›: : :µ:Á:Ê:Ò:Ú:æ:ü:;*;.;<;D;I;I;^;x;‚;Ž;–;›;›;º;Æ;Ñ;Ö;ë;÷;< <<'<,<,<,</<4<4<4<S<_<j<l<o<t<t<t<~<†<�<•<ž<©<¯<½<Ë<Ë<Õ<Þ<æ<=!=(=7=M=R=R=e=m=m=o=o=o=t=t={=�=…=Œ=�=�=�=�=Ÿ=Ÿ=Ä=Í=Í=Ñ=ìAö( ìAìAúABBB÷�1žvžv¼vÄvÐvævûv ww#w)w)w)w.w3wAwLwbwdwiwww‚w�w–w¤wø\‘¤ž,ž,¸,Ü,¿,è,-ú,-.--:-M-_-r-r--ž-ž-¨-ù8hrnGnG‡G–GªG¹G¿GÅGÈGéGú0�—˜ˆ˜ˆ¬ˆ¸ˆÆˆÉˆáˆäˆìˆû0S[&Ó&Ó:ÓBÓOÓYÓLine truncated
g gg g.g0g;gJgJgWgeghgjgjgogtg}gˆgŽg—gªg¯gÄgÏgÙgÙgïgïgh0hEhKhPhWh]hdhihihohuhzhzh�h›h³h¹h¾hÒhÜhãhãhãhèhèhiii?ifikikikiniui{i‚i‡i‡i�i“i˜i˜i¯i¹iÃiÉiìiòijjj"j)j+j?jEjLjLjNjNjNjSjYj^jbjdjgjrj~j�jƒj‡j‡jŒjŒjšjÄj˜}Ÿþþ &06AQYafq{�Œœ¤´»ÃËÓÛàëùù \X«æ?æ?þ?@@J@U@a@o@c@�@�@œ@¤@³@í@ï@A$A$AQAiAVA„AuA�A–A¥AºA¼AÇAÏAÏAêAïAøAB BB>B)BB]BJBiB~BkB«B–BŠB·BÑB¿BìBñB CøB*CC6CKC8CjCWCvCvC‘C C™C´C´C´CàCàCìC Ð1��,�,�R�R�o�s�x�x�x�„�‰�™�ž�ž�ž�£�£�¹�À�Ï�Ý�æ�ö�ÿ���������$�+�2�9�9�;�;�A�F�M‘
ø
    & ? 8 W a ‹@? –a–a³a»aÂaçaùaÿa
b!b0b;b?bJbVbabmb„b›b®bÅbÚbêbêbübccc)c)cAcAcfcfckckcqc}cŠc–c«cÂcÑcÜcîcúcd)dJdJdSdXdXdXdXdhdqdyd~dŒdšdªd¯d¯d½d½dÂdÂdÌd×dédïdûd ee e$e-eFeIeYe`e~e‡e‡e–e¦e¶e½eÃeÏe×eâeéeíeffff$f4fDfDfqf“fŸf§f²f¹fÄfÆfÑfÑfáfæfæfðfûf gg!g.g;gEgIgRgkgng~g…gŠgŠgžgžg£g§g·gÀgÒgØgÚgÚgègîgôgh hh'h'h'h,hDhDhShVhjhˆh“h¼hÎhÙhëhïhôhûh ii5i<i@iFiNiYi\jŒ<KVN)N)h)t)†)œ)½)ª)Õ)í)í)÷)�`l€Ø›Ø›ø›ÿ›œœœ'œ/œ>œHœKœoœqœ�œ�œ�œŽXnþÔþÔ$Õ6Õ;ÕRÕdÕnÕxÕ†ÕŽÕ�Õ³ÕµÕ¾ÕÔÕâÕêÕòÕôÕÿÕ
Ö
ÖÖÖ$Ö,Ö6Ö?ÖGÖJÖSÖnÖÖ‘Ö”Ö™Ö¬ÖÄÖØÖàÖàÖòÖõÖúÖ ×%×9×A×A×b×e×j×}׃ט׮װ×Å×Û×ã×ã×î× ØØ Ø6Ø�83=ÓÓ Ó Ó-Ó1Ó?ÓBÓGÓ�8>HNÓNÓWÓWÓeÓiÓpÓsÓxÓ‘D*V+V+p+ƒ+�+”+ +¸+Á+Å+×+Ý+ü+’Ðy©~ø~ø¨ø«ø²ø¸ø¾øÀøÆøÌøÌøÞøéøðøýø
ùù,ù@ùFùHùOùUù_ù_ùpùrùyùù‰ù‰ù‰ù ù²ù¹ùÈùÊùÜùëùëùýù“0+3þ+þ+,-,>,D,D,L,”„\y>í>íPíeíoíxízí�í‘íœíží¨í¨í®í¿íÂíÂíãíîíðí îîî î3î†î• 
¦*¦*¯*Í*Ò*–h÷ ö^ö^ __"_0_;_A_R_X_i_o_{_’_’_¤_µ_Â_È_Ù_ß_-`—�µÕ¾O¾OìOñOP PP P(P(P-P:PPPzPP£P«P°P·PÍPãPåPûPQ5QOQaQ˜ˆùöüöüý ý'ý.ýMýRýqývý�ý}ý¯ýœý»ýÐý½ýïýÜýûýûýûý þþ3þ3þ;þ™ y}XˆXˆaˆmˆrˆš(A&ã&ãHãPãVã^ã`ã`ãqãqãqãyã�ã“ã¢ã“ã·ã¹ã¹ãÓãÕãÕãàãåãÿãäääää(ä*ä7ä9äFäNäVä]äläyä{äŒä™ä™ä™ä¢ä´äÇäÍäÕä×äääääùäùäùäåå&å+å+å+å9å?åDåLåWåiåtåyåyå€å„å’å–åŸå¦åÄåÑåØåáåýåææææ
ææ#æ#æCæCæCæJæXægæzæ�æ�æ�æ�æ¢æ¢æ©æ°æµæ»æÍæ×æòæç!ç!ç5ç:ç^çeçqç�ç¢ç­ç´ç¸ç¸ç¸ç¸çÃçÍçÛçýçè%è/è/è=è[è‹èžè¯èÆèÙèÞèÞèÞèæèñèééééé%éRéXéXéXécéméyé„é†é†é†é‹é—é—éáé›H%—/—/¥/¬/·/Å/Ð/Ø/Ø/ð/ú/00œ0 vTvT�TŠT©T¿T¸T×TßT�T9J.(.(H(T(f(|(�(Š(µ(Æ(Ø(î()ü(')?)?)I)žÖfQfQ˜Q¬Q´Q¿QÆQÍQÖQØQÛQùQRRR$R?RFRORQRTRrRrRrR€RŠR—R·R¹RÓRÛRÛR÷RSS!S5S<SWSYS`S{S�SªS­SµSÂSâSäSþSTT"T=T=TcTuTŸTXiFF\jpv‡•£µ¹¿ÍÐÚ Lg>þ>þmþbþzþ•þ�þµþ¡þÁþ×þÃþ÷þãþÿÿÿ ÿ0ÿ7ÿDÿOÿ[ÿfÿnÿsÿÿ„ÿ˜ÿŸÿ£ÿ®ÿ³ÿ¾ÿ×ÿàÿìÿñÿ .3Lasxƒ‹‹‹�¦»ÆÐÛÝèððýõ5¡àZŽccc(c-c:cHcQclczcœc¥cµcÏcÚcêcìcîcøcddd!d3d;dSdWdWdWdWd\dzd”d”d›džd¦d²d»de¢d{�þ+þ+,?,P,W,p,h,ˆ,¨,”,´,Å,Û,Ç,ó,----"-£@I•f f ~ � › à ® ¢ Ï í   ù & @ @ _ t a ¡ Œ € ­ Ç Ç Ç Ù ó ó  9 - f k ~ r   ‘ ¬ Ê â Ö õ #/MbOznœ�¨ÂÂÂÔîî 55=¤(6à6àDàgàmàràràxà¥(!'¾Ò¾ÒÇÒÕÒÛÒÝÒâÒ¦D]j999%9.9:9O9W9]9c9e9e9t9§„½Ú0¦0¦c¦o¦s¦{¦ƒ¦‡¦’¦–¦š¦ž¦¦¦«¦¯¦À¦Ñ¦Ó¦×¦è¦ù¦§§ §*§*§*§<§¨€@˜@˜Y˜`˜g˜n˜t˜„˜�˜™˜¤˜»˜¾˜À˜Û˜å˜ï˜ö˜™™™™1™1™C™©˜bÞ^Þ^_$_,_7_F_O_S_^_~_ƒ_�_¼_Â_Ç_Ú_``&`,`4`7`<`O`t`y`�`•`�` `À`Å`â`aaaaaaa(aHaMaga†aŒa‘a±aºa¿aÞaæaëa bbb5b=b]bbb|b›b¡b¦b¦b¦b¦b³bÄbÏbçbòbcc*c>cOcYc[coc€c…c�c�c½c½c½cÏcª°)�ž�ž³žÀžÅžÉžÒžßžëžöžŸ ŸŸŸ Ÿ+Ÿ3ŸMŸsŸmŸƒŸŒŸÁŸ­ŸÑŸÑŸéŸôŸ  ; t t t t Õ «0ùAȌȌíŒùŒ����$�.�<�F�X�b�h�r�x�‚�‰�•�›�¤�Ï�Þ�á�ã�í�ÿ� ŽŽ%Ž:Ž:Ž=ŽGŽ\ŽaŽqŽ|Ž�ޕލ޲ŽÇŽÕŽÞŽæŽôŽ��&�3�3�@�@�H�V���¬l£:n@n@‡@Ÿ@¯@Ï@á@ù@AA>AFAJAMAQAVA`AcAjApAwA}A�A†A�A¡A¨A¯A±AµA¾AÈAËAÖAâAåAöABBBB0BABJBSB[BfBqB}BŽBŸB«B¹B»BÂBÉBÎBÒBßBæB CC!C+C4CMC^CgCpCxC�C‡C‹C�C”C¡C¨C¶CÀCÕCßCèCDDD$D,D5D;D?DDDJDTD^DzDˆDŽD“D›D£D«D¸DÀDßDÒDñDúDE)E<ECELEUE\EeEnEwE�E€E E¤EþE­  P…P…^…}…ƒ…®À�¹?(?(H(o(](O(�( (’(Á(ä(ä(ô(ù(ù( ))).)3)3)S)X)X)l)q)q)Ž)Ž)œ)À)æ)****<*L*L*L*L*L*+¯$bg�&�&“&«&½&×&°´ª–º–º°º¿º¿ºº˺׺׺ãºøº»+»=»A»Q»q»ƒ»‰»œ»¥»©»¯»¸»¸»Ù»Ý»í»ú»¼*¼0¼C¼U¼a¼c¼o¼w¼{¼�¼ммммœ¼²¼¸¼ļÙ¼à¼è¼ô¼ ½½½½½,½6½9½G½Q½T½f½k½p½€½ƒ½ˆ½˜½›½Ÿ½¨½°½½ʽÓ½é½ï½û½¾¾ ¾1¾7¾F¾W¾W¾^¾^¾^¾l¾z¾„¾‡¾•¾Ÿ¾¢¾´¾¹¾¾¾ξѾÖ¾æ¾é¾í¾ö¾þ¾¿¿!¿!¿Line truncated
ÀÀÀÀÀÀ/À;ÀCÀIÀOÀOÀQÀcÀ±xÖÓÖÓäÓùÓÔ Ô-ÔaÔ}Ô�Ô£Ô©ÔµÔ¾ÔÆÔÎÔÐÔÖÔÜÔèÔðÔöÔøÔþÔ²Ü,ßmm<mDmTm\m‰m m¤m¬m´mºmÎmÖmÖmÞmnan<n„n‰n›nªn¬nÖnÜnånìnônünooo+o3o8oBobojolovo…o¥o­o¯oÏo×o×o×oâoéoüop p pppp'p0p8pTpop‰p³p¶pÍpÚpîpq q:qTqfq�q–q˜qÂqÅqÅqÜqéqýqr r#r.r9rKrZr\r†r‰r›rªr¯rÙrßrärörss1s4sFsUsWs�s‡s‡s‡s‘s‘sœsÍsØsØsØsØsásístt/t6tBtItIt\t`t`t`tgtltt†t’t™t™t°t²t·tÊtÑtÝtätätñtûtûtu#u#u5u³ ÄnEnEƒEŽE¶E¡E•EÕEÂEáEöEãE#FFF/F=FEFPFRF]FhFhFmFšFŸFÌFÑFëFØF
G÷FG!G6G#GUGBGaGfGaG|GŠG’G�GŸGªGµGµGºGÕG×GòGòGÿGH#H%HDHDHDHLH´\ãö^^^.^4^?^M^Y^p^p^‚^ˆ^“^£^®^¼^É^õ^µ(2866Tgnu|€‚‰�””œµ¿¿ÓÞìý  " J N W [ ` q Ž Ž œ ° µ Î ß ã ã ã è  + 2 E I N j ’ š £ § ¬ ½ Ï ß ó õ !!!%!%!%!A!i!m!v!z!!�!­!­!»!Ï!Ô!í!þ!"""""("I"h"s"y"�" "¥"º"Ö"þ"# ###%#>#>#L#`#b#{#Œ#�#�#—#ª#®#À#Å#á# $$$$#$4$J$Z$n$s$Œ$Ÿ$£$µ$µ$µ$µ$º$Ù$è$ %%%0%A%A%A%H%[%t%t%t%ƒ%ƒ%–%­%¸%É%Î%Ô%Þ%à%ì%ì%ó%þ%&& &5&A&C&N&Z&j&q&x&‚&Š&Ž&’&”&™&¡&¥&·&¹&¾&Æ&Ê&Ì&Ì&Õ&â&ø&'2'>'J'Q'Q'd'h'h'h'o't'Ž'š'¦'­'­'Ä'Æ'Ë'å'ñ'ý'(((((-(˜ ºœ H H=HLHLHLHfHfHuHuH{H}H}HƒH…H…H‹H�H�H”H˜H�H�H�H�H�H�H¥HºHºHÏHÚHäHñHII#I%I@IEI`IeIkIkI€IƒIªI·IÏIïIïIøIýIJ J!J0J5J<JEJXJ`JhJmJmJmJvJ�J•J•J®J¼JÖJìJîJöJüJK K KKKK)K+K@KBKJKPKXK]K]K]K]KkKK�K•K•K�K£K«K°K¹KÁKÊKÐKÖKØKØKØKàKàKîKLLLLL1L7L?LDLMLXL[LaLgLpLsLsL�L�L‘L´LÑL×LßLäLíLïLïLôLöLþLþLM+M0M<MBMEM\M^MaMqMuM|M…M”M¢M¨M°MµM½MÂMÂMÊM×MïMôMþM&N1N<NGNRN]NhNsN~N~N~N†N†NŸN­NÇNÝNÝNßNßNèNîNðNðNöNüNüNO OO O O&O)OHOSO[OcOhOhOoOsOxO‡OŒO–O O O­OÔOÔOÚOèOùOP PP)P?PEPJPJPOPbPnPvP†P�P™P§P®P°P¹P¹P¿PÍPÙPìPÿPQQQ.Q3Q3QPQPQbQhQqQwQ€QŽQ“Q“Q¦Q¬Q®Q¹QËQÞQÞQòQþQRR!R'R*RARCRFRVR`RcRcRrR…R—RœR¨R®R±RÈRÊRÍRÝRáRéR÷RüRSSSSSSSS(S.S4S>SHSVSkSnSpSzSzS|S„S‰SŽS“S“S™S¡S¦S¦S«S¶S»SÀSËSÐSöSøSýSTT TTTTT T%TATKT_TsTyT�T�T�T•T›T¥T¯T½TÒTÕT×TáTðTõTõTõTýTU U UUUUU#U#U(U3U8U=UBUQUQUbUhUhUvU|U‚UŒU–U¤U¹U¼U¾UÈU×UÜUÜUÜUäUéUòU÷U÷UýUV
V
VVV V$V)V8V8VIVOVOV]VcViVsV}V‹V V£V¥V¯V¾VÃVÃVÃVËVÐVÙVÞVÞVäVìVñVñVþVWWWWW(W2W@WUWXWZWdWsWxWxWxW€W…WŽW“W“W™W¡W¦W¦W³W¹W¹WÇWÍWÓWÝWçWõW
X XXX(X-X-X-X5X:XCXHXHXRXZX_X_X_XeXoXuX‰XŽXŽX”XžX¤X©X©X¯X½XÆXÔXÙXÙXßXíXùX
YYY&Y0Y>Y>YCYCYNYNYNYRYWYWY]YaYfYnYtYvYYŽY–Y›Y¡Y¡Y©Y¯Y½YÈYÍYÓYÛYàYàYàYàYàYàYàYàYàYàYùYÿYZZZZ Z)Z4Z=ZEZJZJZJZPZXZ]Z]ZaZfZfZoZ}Z‰Z–ZœZœZ¥Z¹Z¹Z¿ZÈZÜZÜZåZçZíZöZ
[
[[[[[[[%[*[*[G[U[a[j[p[z[‚[‡[‡[‡[›[¤[ª[¼[Æ[Æ[Î[Î[Ö[Ø[Ø[ñ[û[\\\\ \\\\\\\\#\'\¢_·Ðà6u6uXunuzu˜u´uÁuØuëuöu vøuv v v/v/v7vCvYvnv}vˆv›v¡v¡v¡v¦v«vºvÅvÜvÞvãvòvýv
www"w¸”*Kؠؠð ÷ þ ¡
¡ ¡¡¡¡9¡&¡I¡Q¡Y¡\¡^¡n¡w¡€¡†¡‰¡š¡±¡Â¡Í¡ÿ¡¹à.¢~<~<œ<§<¸<»<¿<È<Ï<Ý<ì<==$=6=H=W=f=w=†=†=”=˜=œ=¡=¥=²=¹=Ç=Û=ä=ê=ø=>>>!>!>&>&>&>+>+>:>C>K>a>a>a>f>f>{>‡>’>—>—>š>Ÿ>Ÿ>»>Ç>Ô>Ö>Ö>Ú>Ü>Ü>ø>???????$?&?&?)?)?2?8?=?Y?Y?Y?Y?Y?Y?Y?Y?Y?Y?Y?Y?[?l?~?�?œ?œ? ? ?¨?Ä?È?Í?h@º,îÑîÑüÑÒ ÒÒÒ»˜?a6W6WLWRWYW‰WuW•WšW¡W¡WÁW×WÃWãWXÿW X$X+X+X+X1X4X8X@XXXcXvXnXŽX˜X¼PQa§%§%µ%Ã%Ê%Ú%ë%ð% &&&!&/&;&M&‰&½D%~à~à’à à¦àÉàÏàÕàúàáá á áá¾ô#œÆ0Æ0Î0Ý0á0î0û011>1K1]11Ÿ1­1É1Û1ó1
2262T2c2~2‰2¤2½2½2Ø23363H3W3f3f3q3„3•3¨3¸3Å3Ð3ß3ÿ3ÿ3 4 4 44)404O4X4e4i4q4|4”4¬4µ4Å4Í4Ò4ö455!555:5B5h5j5u5¨5Â5Â5Ú5é5ñ56 66#6B6J6R6]6_6o6‡6Ÿ6·6Ï6á6ø67
77*7.727¿ ˆ…ˆ…‘…°…µ…À\…X¦È¦ÈÀÈÇÈÔÈßÈäÈêÈüÈÉÉ É>ÉRÉ]ÉcɅɅɕɪɬɯɻÉÃÉËÉÓÉáÉçÉíÉùÉùÉûÉ ÊÊÊÊ/Ê/ÊMÊMÊ`ÊmÊrÊrʉʒʡʷÊÂÊÐÊÛÊëÊøÊ
ËËË&Ë3Ë5Ë5Ë=ËBËBËJËOËOËWË\Ë\ËdËiËiËoËtËtË{ˀˀˇˌˌ˗˜˜˧ˬˬ˷˼˼ËÇËÇËàËçËíËðËûËþËÌ Ì.Ì5Ì8ÌJÌLÌRÌfÌŝ̤̹̂̂̂̌ÌÉÌÚÌàÌñÌ÷ÌüÌÍÍ(Í7Í=ÍNÍYÍcÍrÍ�͇͒ͭ͘ͳÍÄÍÏÍÕÍåÍåÍõÍÎÎÎ,Î3Î9ÎJÎUÎZÎwΌΚΪζÎÈÎÓÎâÎäÎöÎþÎÏ
ÏÏÏ&Ï,Ï6Ï<ÏGÏMÏOÏ\ÏiÏsόϚϚϠϧÏçÑÁ0#«p¨p¨�¨¹¨Á¨Á¨Ï¨â¨û¨þ¨©©©"©$©$©,©.©.©6©8©8©@©@©I©O©T©T©]©i©m©r©x©}©}©…©Ž©”©™©™©ž©ª©Â©á©ä©ù©ªªª ª"ª"ª"ª*ª,ª,ª,ª4ª6ª6ª6ª>ª@ª@ªKªKªQªVªVªVªVª]ªhªzªˆª–ª ª ª ª°ª°ª·ª»ªÁªÙªçªúª«/«2«9«K«S«\«g«g«r«x«}«}«}«„«Š«Ÿ«§«­«Ï«Û«á«æ«æ«í«ø«ø«ý«¬¬¬¬¬n¬Âd)¤B¤BÆBÐBÓBÓBÝBðBòBÿBC C C(C8C=CCCKCNC`CÃLWf/1/1C1G1L1W1W1a1g1g1k1s1Ä\CVÇ0Ç0Ý0Ý0á0æ0ù0ü011 111 1!1+1Å8(2æÒæÒïÒïÒýÒÓÓ ÓÓÆ¨²Øgg.g6gAgZgNg‡gágÌgÁg¬g•gçgügìghh(hOhThihVhuh{h{hˆh¯h×h½hëhiiiiÇl¥¼6.6.P.x.[.„.¤.½.¶.Õ.í.Ú.ù. /,/>/Q/Q/^/}/}/‡/È4“œ®è®èÂèÇèÍèÑèÕèôèüèɼLwæ’æ’þ’ ““,“D“I“N“R“T“Z“`“v“c“‚“‚“¡“¹“¦“œϓ蓔”
”””””2” ”>”>”Q”Y”k”…”~”‘”�”Ê4;D~Ý~݇ݓݲݷݹݹݾÝË”"@§@§N§`§d§l§t§§Š§’§�§¨§­§Ã§Ê§Ñ§Ü§ç§é§ô§ÿ§¨ ¨¨#¨,¨4¨4¨8¨o¨Ì€Úö/5/5M5Q5U5]5k5n5q5„5Š5Œ5›5Ÿ5£5«5³5¿5Ô5å5ì5ó5ó566Í\!´FIFIxIƒI¸I©I�I¾IíIòIòIöIJ J'J.J<J>JFJ`J|JŽJ›J³JÇJÌJÓJøJÿJK
KK#K@KRK_KwK”K�K©K­K­K¸K¿KÑKÔKÖKìKÛKøKLL*L<L?LALWLFLcLcLcLuLuLƒL�LµL®LÊLÊLÏLÓLïLûLM4M>MBMRMqMfM}MM‘M¥M¶M¯MÅMÉMßMþMóM
N NN(N<NFNONfNpNrN†N�N�N¦NªNªNªNµN¼NÐNèNêNOO-O2ODOLOmOƒOƒOƒO¨O¨OºOÎd9Î6363l3s3{3„3•3¢3·3º3½3Á3Ê3Ø3â3ç344!4M4R4_44„4“4¿4Ç4Ì4á4 5555-5@5P5T5s5„5‰5‰5«5«5«5«5«5»5Ð5Ó5Ö5Ú5Ú5ß56 66"6*6E6W6d6o6�6�6�6š6±6³6³6³6À6×6Ù6Ù6æ6ý6ý67737E7W7u7u7u7‚7™7›7›7›7¨7¿7Á7Á7Î7å7å7ö7þ78)8;8M8k8k8k8x8�8‘8‘8ž8µ8µ8Ê8Ì8Ó8õ899 9-979999999U9]9_9_9�9»9Ϥ/TVåVåvå˜å˜å·åÇåÌåÌåÛåíåææææ+æ3æ3æ3æ5æ5æ5æ5æSæSæSæSæeægægægægæzæ…æ¨æÐxµž”ž”´”À”Ë”ДÜ”ç”ì”ó”ø”••••:•'•F•H•M•X•]•]•]•�•|•›•••Õ•è•û•–––&–9–L–_–d–d–w–Š–�–°–²–²–Å–Ø–ë–þ–þ–þ– —Ñ0Š’NèNè\èbèfè…è¦è¦è¬èÒ<:E8888)858A8J8S8\8b8g8ÓluŒo'o'}'‡'Ž'¥'¥'ª'¬'¸'Â'Ð'í'ï'ÿ'ÿ'(( (?(ÔÜŸÒ*TI5o|ˆ›ŽÈÍùùþ€&€<€R€…€”€Ì€¸€ç€ô€ �%�-�L�T�y�n�Z�‰�¢�Ž�Â�®�Ö�ã�‚‚‚‚‚ÕL½ÌŽ/Ž/¬/¾/Å/ä/ä/ö/ 000.080ÖÈg•w1w1›1Ÿ1¾1à1ì1ó1þ1 22 2 2$2.2F2Q2a2m2t22�2’2£2¥2§2§2§2¯2¯2¹2¹2Á2É2Ñ2Ù2Ý2ç233× ………"…(…Ø`FZg8g8w8~8€8…8”8š8¯8¯8½8½8É8Ò8Õ8ã8í8ð8ø8Ù<›¦&¡&¡/¡:¡E¡P¡[¡e¡ƒ¡Ž¡ž¡Ú 2.`.`F`X`^`j`u`ƒ`�`¦`±`Á`Ó`Ù`ß`å`ø`þ`a a a%a0a8aFaSa�aÛ, Ö*Ö*ä*õ* ++ +%+Ü4¸…¸…Æ…Ð…Ù…à…ç…ñ…ñ…÷…ÝÄKx^ö^öŠö�ö’öŸö¤ö¶ö¸ö¼öÀöÃöÖöïö÷÷%÷,÷E÷g÷l÷…÷§÷¬÷³÷Ì÷î÷ð÷ ø+ø+ø+ø@øZøiø{øÞ}¾fofo„o‡o�o¡o©oºoÇoÍoÒoÒoßoèoîoþo pp-p>pEpQpapapop‚p�p‘p¢p¢p¢p§p§p³pÂpÕpÛpàpôpúpqqqq+q8q>qDqIqOqUq\qhqoqqqvq~q€q…q‘q“q˜q q¢q§q¯q±q¶q¾qÀqÅqÏqÑqÖqàqàqàqðqðqðqr rrr#r+rDrJrUrYr_rjrƒrŽr™rŸr¬r±r¶r¶rËrÓrÛrùrssss$s-s2s7sLsSs\shsnszs~sƒsˆs“sžs©s«s±s¾sÃsÈsásìs÷s÷sýs
t ttt3t>tItOt\t\t`tetetvtxtxt‹t�t�t t¢t¢tµt·t·tÊtÌtÌtÞtÞtätététuu u!u)u0u6u>uQu\uSululunu†u‰u‹u—u©u¹uÅuÜuöuûuv v2v7v7v=vQvcvnvvv~v‚v�v–v›v›v¡vµvÅvÊvÊvÐvÖvÛvÛvÛvávðvwwwwww"w"w'w2w>wXwnwzwzw€w�w�wœw¨w·wÊwÊw×wãwãwãwãwçwìwýwxx"x*x,x>xCxQx]xcxpxpx‡x—x—x«x·x¹xÂxÎxåxåxëxøxúx y yyyyyy“{ß „ÈžOžO¼OÊOÝOâOPP PP P&P5P:PFPXPXPvP�P”P›PµPÒPÞPùPQ-Q6QEQMQZQcQhQyQ‡Q§Q¬Q´QÍQßQïQõQR RRUR?R0ReR RŠR{R°R³RÓRgSà<*5dCdC…C‹C”C¦C¿CÇCÝCéCá„ |îî"*--=HHKRY_ekrx‰‰‹” ¦ÌÐÓãëðð÷ý%66?DNU\djlz‘”£¯¼¼¼¼ÂÔÚë 5<FNUU^eq�ŒŒŒ ´ÄÇ‚â„9ç6ç677737Y7o7€7‰7—7©7Â7Â7Ô7ê7ò7õ78ãX{ÍÖÖ );IO`go…� µÅÏÑáñú )47>X`z�œŸ§«½Ì×ßö#5=DHQSe|Š�”–£££¥¼ÂÂÔä 
(…(…1…E…J…å,ýDæ�æ����$�)�/�2�6�6�V�[�‘�}����¢�Â�Û�Ç�ç�î�ó�ý�‘‘ ‘"‘‘.‘.‘.‘3‘D‘I‘O‘R‘V‘V‘v‘{‘±‘�‘½‘Ö‘‘â‘ø‘ä‘’ ’’’’’ ’8’$’D’D’D’D’\’…’‘’æ˜Íï  (##72FAP__nn}}ŒŒ››ª¾¹ÈÈ׿õ^çxÈâÖ\Ö\ô\] ]]/]/]A]G]R]b]n]w]}]ƒ]Ž]œ]©]µ]Ã]Ò]Ò]^èd�²þèþèééé/é6éBéBéYéYépépé‡é‡éžéžéµé·é·é»é騯øûû8û?ûJû`û`ûrû}ûˆû™ûªûÁûÅûÊûÎûÐûáûóûÿûüü,ü;ü?ü?ü?üRügügüsüyüƒüŽüœü£ü²ü´üÊüäüäüöüêP6FìCìCDDDD+D9D?DKDSD^DdDgDqDë ®-î7î7888 8'8.8D8U8f8x8Š8™8¨8¹8È8È8Ï8Ó8Ü8é8ð8ù899$9$9$9$9$9094979?9M9U9b9j9r9ƒ9Ž9“9“9 9¦9µ9Ì9Î9Ù9æ9õ9ø9þ9ú9:):+:9:;:F:L:L:T:T:f:m:ƒ:ƒ:ƒ:ˆ:ˆ:�:«:¶:»:»:¾:Ã:Ã:ß:í:ú:ü:ü:;;;;,;8;:;:;=;?;?;L;N;N;Q;Q;Q;Q;Q;Z;`;d;p;�;�;«;²;z<ì(rx(ˆ(ˆ6ˆ=ˆMˆPˆVˆí(nt ' '('2'B'M'M'k'îTzK†î†î¤îªî­î¶îÀîØîèîñî÷îúîþîïï(ï5ï;ï?ïEïGïJïNïNïqïuï{ï{ï‚ï¤ï¹ïÌïßïåïìï÷ïðððððð ð0ð6ð;ð@ðMðOðaðcðjðwðyð‹ð‹ð‹ð‹ð‹ð¯ðºðÆðÝðÝðòðþðñ?ñYñ^ñuñzñˆñŸñ¤ñªñ»ñÐñÖñæñóñ òòò6òBòBòBòHòKòNògòmò�ò‡òŒò—ò—òœò©ò¶ò¶ò¼òÊòáòçòêòíòôòýòóó óó#ó#ó)ó7óNóTóWóZóaóaóróyó†ó“ó“óšó¤ó«ó±ó¸óÃó×ó×óñóöóýóô ôô ô(ô@ôEôLônôyôô‡ô ô´ô´ôÏôÏôéô÷ôþôõ'õ:õ^õ`õjõŒõŒõŒõ¥õ±õÂõÚõÞõ³öï¼Ùii.i2i@iOiZifiqi‘isi�i¢i¢iÄiôiØiËijjCjHjTj_jjaj‹j�j£jªjÇjÚjÚjýjýj kð v*v*…*ž*¤*ñ8�™ŽIŽI§I¶IÊI×IÝIãIæIJò8 ÷.÷./ // /&/,/2/2/8/ó &+&+0+8+=+ôôÓŒ‚‚<‚L‚W‚b‚{‚§‚À‚삃ƒ"ƒ*ƒ,ƒ4ƒOƒRƒ]ƒiƒ‚ƒ®ƒǃóƒ„#„)„1„6„>„Y„\„g„s„x„‘„½„Ö„…,…2…8…@…B…J…e…h…s……˜…Ä…Ý… †3†9†?†G†L†T†o†r†}†‰†‰†ކ”†š†¢†ª†µ†džÖ†ñ†‡/‡5‡:‡L‡[‡y‡�‡·‡½‡Ňʇ܇뇈ˆDˆJˆOˆaˆpˆ‹ˆŸˆɈψÔˆÔˆÔˆåˆðˆûˆ!‰9‰D‰L‰Y‰Y‰^‰q‰ˆ‰�‰³‰ˉÖ‰Þ‰ë‰ë‰ð‰ŠŠŠ.ŠEŠ^ŠpŠ}ЍмŠÓŠáŠãŠ÷Š‹‹‹#‹9‹R‹e‹q‹„‹ˆ‹ˆ‹ˆ‹�‹”‹§‹³‹Ê‹Ì‹Ñ‹ä‹ð‹ý‹ŒŒŒõ”k t9t9Š9–9–9¬9·9¹9Õ9Õ9Õ9Ü9æ9ê9î9ñ9ñ9ú9þ9::J:V:a:q:�:†:‰:Ž:Ž:Ž:£:ª:·:¾:Æ:Ë:Ë:à:ì:ô:ù:ù:;;#;(;(;=;I;R;Z;b;n;„;�;²;¶;Ä;Ì;Ñ;Ñ;æ;<
<<<#<#<B<N<Y<^<s<<Ž<“<¢<¯<´<´<´<·<¼<¼<¼<Û<ç<ò<ô<÷<ü<ü<ü<====&=1=7=E=S=S=]=f=n=£=©=°=¿=Õ=Ú=Ú=í=õ=õ=÷=÷=÷=ü=ü=> > >>>>>>'>'>L>U>U>Y>tBö( tBtB‚B‹B™BŸB÷�1&w&wDwLwXwnwƒw‘wœw«w±w±w±w¶w»wÉwÔwêwìwñwÿw
xxx,xø\‘¤&-&-@-d-G-p-‰-‚-¡-¶-£-Â-Õ-ç-ú-ú-.&.&.0.ù8hröGöGHH2HAHGHMHPHqHú0�— ‰ ‰4‰@‰N‰Q‰i‰l‰t‰û0S[®Ó®ÓÂÓÊÓ×ÓáÓôÓüP>N † †¬†À†Ã†×†ß†ã†í†÷†ÿ†‡‡ýTš«JJ(J;J>JHJUJjJlJ~JˆJœJœJ¢J¥JùJþ<˜£x‰x‰Œ‰“‰Ÿ‰«‰»‰À‰Ã‰Ç‰Ï‰ÿ ,0áá$á0áHzˆÆdÆdÚdædñdeódeee'e3e;e Dƒ¶M¶MÚMáMæMîMNNN N N"N<NBNDNFNSNSNSNSNWNfNoNwN€NˆN�N•N—N³N·NÉNÜNâNöNûNOOO#O*O3OAOJOjOpOtOyO~O�O‹OŽOžOD ^j^jljvj€j�j•j›j§j©j»j»j½jíjlåüFßFßZßpß}߈ߌߓߗߠ߯߱߱ßÅßÇßÐßÖßÖßÖßÖßÞß´Js€D€D¦D·D¼DÃDÍDÍDÕDèDìDñDEE EEE*E.E6EBEIEMEUEWE_EmEuEwEzE�E—EŸE­E±E¿E >îjîjþj
kk&k>kDkRkckkkrkˆk®kÈkÕkâkòkøkúk l-l4l:lHlPlflqlwl}l lôB»xgxg’g•gœg§g¶g¸gÃgÒgÒgßgígðgògòg÷güghhh h2h7hLhWhahahwhwh¤h¸hÍhÓhØhßhåhìhñhñh÷hýhiii#i;iAiFiZidikikikipipi™ižižiÇiîióióióiöiýij
jjjjj j j7jAjKjQjtjzjŠj–jœjªj±j³jÇjÍjÔjÔjÖjÖjÖjÛjájæjêjìjïjújk k kkkkk"kLk˜}Ÿ††¢§®¸¾ÉÙáéîù   $ , < C K S [ c h s � � — \X«n@n@†@�@Ÿ@Ò@Ý@é@÷@ë@AA$A,A;AuAwA¤A¬A¬AÙAñAÞA BýABB-BBBDBOBWBWBrBwB€B‹B“BžBÆB±B¥BåBÒBñBCóB3CCC?CYCGCtCyC“C€C²CŸC¾CÓCÀCòCßCþCþCD(D!D<D<D<DhDhDtD Ð1 � �´�´�Ú�Ú�÷�û���� ��!�&�&�&�+�+�A�H�W�e�n�~�‡�‰�‰�‰�‰���—�ž�¥�¬�³�º�Á�Á�Ã�Ã�É�Î�Õ‘
+1
View File
@@ -57,6 +57,7 @@ public extern I64 MemberMetaData(U8 *st,CMemberLst *ml);
public extern CMemberLstMeta *MemberMetaFind(U8 *st,CMemberLst *ml);
public extern CHashClass *OptClassFwd(CHashClass *tempc);
public extern I64 PrsKeyWord(CCmpCtrl *cc);
#help_index "Compiler;Cmd Line (Typically)"
extern I64 Cmp(U8 *filename,
U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0);
+2 -2
View File
@@ -172,8 +172,8 @@ U0 PrsFun(CCmpCtrl *cc,CHashClass *temp_return,U8 *name,I64 fsp_flags)
}
} else {
old_trace=Btr(&cc->opts,OPTf_TRACE);
cc->htc.fun->executable_addr=COCCompile(cc,&size,
&cc->htc.fun->dbg_info,NULL);
cc->htc.fun->executable_addr=COCCompile(
cc,&size,&cc->htc.fun->dbg_info,NULL);
if (old_trace) {
Bts(&cc->opts,OPTf_TRACE);
Un(cc->htc.fun->executable_addr,size,64);
+3 -3
View File
@@ -295,13 +295,13 @@ Bool MyPutKey(I64 ch,I64 sc)
return TRUE;
case '9':
if (sc&SCF_KEY_DESC)
KeyDescSet("Dol /---->");
KeyDescSet("Dol /Indent 5");
else
"$$ID,5$$";
return TRUE;
case '0':
if (sc&SCF_KEY_DESC)
KeyDescSet("Dol /<----");
KeyDescSet("Dol /Unindent 5");
else
"$$ID,-5$$";
return TRUE;
@@ -319,7 +319,7 @@ Bool MyPutKey(I64 ch,I64 sc)
return TRUE;
case 'p':
if (sc&SCF_KEY_DESC)
KeyDescSet("Cmd /JukeBox(TAD)");
KeyDescSet("Cmd /JukeBox(Home/Downloads)");
else
JukeBox("::/Home/Downloads/Psalmody");
return TRUE;
+2
View File
@@ -7,6 +7,8 @@
Cd("::/Home");;
#include "::/Home/TOSCfg"
#include "::/Home/TOSMisc"
#include "::/Home/TOSToHtml"
#include "::/Home/TOSDistro"
#include "::/Home/TOSBlog"
#include "::/Home/TOSHolySpirit"
Cd("::/Home");;
+1 -1
View File
@@ -9,7 +9,7 @@ U0 UserStartUp()
WinToTop;
WinZBufUpdate;
Dir;
"$TX,"80,916",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:";
"$TX,"81,095",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:";
CPURep;
}
Binary file not shown.
+17 -15
View File
@@ -4,8 +4,6 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$
* Add AVL or red/black binary tree library support. We have fixed-size stack. Auto-balancing binary tree is very needed. I've done everything myself. I don't want to ruin a perfect record. I'm in no hurry.
* In <CTRL-r> menu, transform individual elements.
* $LK,"SpriteEd",A="FI:::/Adam/Gr/SpriteEd.CPP"$ shift pts, Ctrl pt for ellipse/polygon w,h is off when rotated.
* $LK,"SpriteMesh",A="FI:::/Adam/Gr/SpriteMesh.CPP"$: $LK,"R",A="MN:R"$("Mesh",...);?
@@ -27,19 +25,19 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$
* Cannot include ':' in $LK,"Document Links",A="FF:::/Adam/DolDoc/DocLink.CPP,AD"$ search string.
* $LK,"DOCEF_REMALLOC_DATA",A="FF:::/Adam/DolDoc/DocChar.CPP,DOCEF_REMALLOC_DATA"$ HexEdit Remalloc.
* No way to clear $LK,"DOCEf_HOLD",A="MN:DOCEf_HOLD"$ entries.
* $LK,"DOCF_DBL_DOLLARS",A="MN:DOCF_DBL_DOLLARS"$ in $LK,"Reindention",A="MN:EdCodeTools2"$.
* Compiler: Warn unnecessary typecast.
* Compiler Optimization: Local array vars --> reg. Might exist.
* Compiler Optimization: heap_glbls with added offset. Might exist.
* AfterEgypt: $LK,"Numbers,13:33",A="BF:Numbers,13:33"$ scouts? $LK,"Numbers,21:8",A="BF:Numbers,21:8"$ snakes?
* Find-and-replace text on $$PT$$ line before it.
* Bug: Find-and-replace text on $$PT$$ line before it.
* 12/25/2015 Copy-Paste index.html glitch if source window 40 columns.
* 01/10/2016 find-replace editor hung on $LK,"CounterRenaissance",A="FI:::/Home/Web/TAD/CounterRenaissance.TXT"$ "Rennaisance"
* 01/06/2016 Editor filter "str" applied to output from LineRep looks broken.
@@ -83,10 +81,10 @@ $FG,5$$TX+CX,"TODO? Meh"$$FG$
* Clean-up ASCII #127 delete char? (No. Maybe, we want a new usage for 127 in future centuries.)
* $LK,"DocSave",A="MN:DocSave"$() $LK,"*result==CH_CURSOR",A="FF:::/Adam/DolDoc/DocFile.CPP,*result==CH_CURSOR"$ is ugly.
* Compiler: Exceptions don't free $LK,"CCmpCtrl",A="MN:CCmpCtrl"$ stuff.
* $LK,"::/Adam/DolDoc/DocHighlight.CPP"$ for code comments at top of documents.
* Unhandled exception msgs from MP's get overwritten by WinMgr.
* $LK,"Diff",A="MN:Diff"$("C:/Misc/Bible.TXT","D:/Misc/Bible.TXT"); Takes too long.
@@ -126,6 +124,8 @@ $ID,-5$$HL,0$
$FG,5$$TX+CX,"Bugs"$$FG$
* 1/28/16 $LK,"::/Demo/Graphics/Pick3D.CPP"$ crashed in TestSuite.
* 1/12/16 make RAM drive 2288 blks, $FG,2$CopyTree("C:/Home","B:/Home"); $FG$ Disk runs-out of space and hangs instead of reporting errors.
* Bug introduced around 11/1/15. Changed $LK,"::/Kernel/Sched.CPP"$ and now $LK,"WinToTop",A="MN:WinToTop"$ is called on Adam task at start-up, sometimes. Might be user's fault because of bad keys pressed during VMware power-on init. Might be fixed by $LK,"ACf_INIT_IN_PROGRESS",A="MN:ACf_INIT_IN_PROGRESS"$.
@@ -273,6 +273,8 @@ $FG,5$$TX+CX,"Inspirational Ideas"$$FG$
* Use standard terminology from "the literature".
* Striped and other dither patterns. Brushes?
* Get rid of BYTE, WORD, DWORD in opcode and replace with U8, U16, U32.
* Get rid of "Char".
@@ -314,7 +316,7 @@ $FG,5$$TX+CX,"Inspirational Ideas"$$FG$
$ID,5$$$=-CTASK_NEG_OFFSET
offset(CTask.addr)==0
Spawn(): CAlloc()
TaskFinishOff(): Free()
TaskDel(): Free()
CSysFixedArea.adam
Looks like task_flags,locked_flags cause problems with neg offset.
$ID,-5$
@@ -395,15 +397,15 @@ Meek and humble of heart $TX,"Matthew 11:29",HTML="http://www.biblegateway.com/
$FG,5$$TX+CX,"Misc Notes"$$FG$
Intel CEO's name: Brian Krzanich
>$FG,2$lspci -v$FG$
Size:$TX,"17344 KB",D="DD_TEMPLEOSCD_K_SIZE"$
Size:$TX,"17358 KB",D="DD_TEMPLEOSCD_K_SIZE"$
$FG,5$$TX+CX,"My Web Bookmarks"$$FG$$WW,0$
$TX,"My FireFox Bookmarks",HTML="http://www.templeos.org/Wb/Home/Downloads/Blog/Bookmarks"$
Machine $HC,"<img src=\"http://www.templeos.org/images/Machine.jpg\" width=\"600\" height=\"400\" alt=\"\">"$
Frosting $HC,"<img src=\"http://www.templeos.org/images/Frosting.jpg\" width=\"600\" height=\"400\" alt=\"\">"$
Soap Carvings $HC,"<img src=\"http://www.templeos.org/images/SoapCarvings.jpg\" width=\"640\" height=\"480\" alt=\"\">"$
CottonTail $HC,"<img src=\"http://www.templeos.org/images/CttnTail.jpg\" width=\"644\" height=\"1113\" alt=\"\">"$
TempleOS Logo $HC,"<img src=\"http://www.templeos.org/images/Logo128x152.jpg\" width=\"640\" height=\"760\" alt=\"\">"$
Machine $HC,"<center><img src=\"http://www.templeos.org/images/Machine.jpg\" width=\"600\" height=\"400\" alt=\"\"></center>"$
Frosting $HC,"<center><img src=\"http://www.templeos.org/images/Frosting.jpg\" width=\"600\" height=\"400\" alt=\"\"></center>"$
Soap Carvings $HC,"<center><img src=\"http://www.templeos.org/images/SoapCarvings.jpg\" width=\"640\" height=\"480\" alt=\"\"></center>"$
CottonTail $HC,"<center><img src=\"http://www.templeos.org/images/CttnTail.jpg\" width=\"644\" height=\"1113\" alt=\"\"></center>"$
TempleOS Logo $HC,"<center><img src=\"http://www.templeos.org/images/Logo128x152.jpg\" width=\"640\" height=\"760\" alt=\"\"></center>"$
$TX,"SimStructure",HTML="http://www.templeos.org/files/SimStrSetUp.zip"$
$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"$
@@ -412,7 +414,7 @@ $TX,"Tom Foley",HTML="http://web.gccaz.edu/~tfoley/perspage.html"$
$FG,5$$TX+CX,"Web Bookmarks"$$FG$
Cop tying shoe $HC,"<img src=\"https://goodtimestories.files.wordpress.com/2013/04/cop-tying-shoe-cambridge-county-pd.jpg\" width=\"480\" height=\"376\" alt=\"\">"$
Cop tying shoe $HC,"<center><img src=\"https://goodtimestories.files.wordpress.com/2013/04/cop-tying-shoe-cambridge-county-pd.jpg\" width=\"480\" height=\"376\" alt=\"\"></center>"$
$TX,"Good Time Bad Times Lyrics",HTML="https://www.google.com/#q=led+zep+good+times+bad+times+lyrics"$
$TX,"Unikernels",HTML="https://ma.ttias.be/what-is-a-unikernel"$
$TX,"Handford school",HTML="https:/pinterest.com/pin/255368241346360278"$
+3 -3
View File
@@ -2,7 +2,7 @@ $TR-UL,"Adam"$
$ID,2$$TR,"SysMsgFlags"$
$ID,2$sys_msg_flags[0]=0xFF;
$ID,-2$$TR,"SysRegVer"$
$ID,2$registry_version=4.020;
$ID,2$registry_version=4.030;
$ID,-2$$ID,-2$$TR-UL,"TempleOS"$
$ID,2$$TR,"TOS"$
$ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46;
@@ -39,7 +39,7 @@ $ID,-2$$TR,"BomberGolf"$
$ID,2$I64 best_score=175;
$ID,-2$$ID,-2$$TR,"DemoCompany"$
$ID,2$$TR,"Game1"$
$ID,2$F64 best_score=197.26500;
$ID,2$F64 best_score=166.32939;
$TR,"SimpleVal"$
$ID,2$1279;
$ID,2$1298;
$ID,-2$$ID,-2$$ID,-2$
+107
View File
@@ -0,0 +1,107 @@
U8 *BlogLocalDir(CDate cdt=0)
{
static U8 dir[STR_LEN];
CDateStruct ds;
if (!cdt) cdt=Now+local_time_offset;
Date2Struct(&ds,cdt);
StrPrint(dir,"::/Home/Web/" PERSONAL_INITIALS "/Blog/%d%Z",
ds.year,ds.mon-1,"ST_MONTHS");
if (!FileFind(dir,,FUF_JUST_DIRS))
MkDir(dir);
return dir;
}
U8 *BlogLocalFile(CDate cdt=0)
{
static U8 file[STR_LEN];
CDateStruct ds;
if (!cdt) cdt=Now+local_time_offset;
Date2Struct(&ds,cdt);
StrPrint(file,"%s/" PERSONAL_INITIALS "%02d%02d%02d.TXT.Z",
BlogLocalDir(cdt),ds.year%100,ds.mon,ds.day_of_mon);
return file;
}
U8 *BlogWebDir(CDate cdt=0)
{
static U8 dir[STR_LEN];
CDateStruct ds;
if (!cdt) cdt=Now+local_time_offset;
Date2Struct(&ds,cdt);
StrPrint(dir,PERSONAL_WEB "/Home/Web/" PERSONAL_INITIALS "/Blog/%d%Z",
ds.year,ds.mon-1,"ST_MONTHS");
return dir;
}
U8 *BlogWebFile(CDate cdt=0)
{
static U8 file[STR_LEN];
CDateStruct ds;
if (!cdt) cdt=Now+local_time_offset;
Date2Struct(&ds,cdt);
StrPrint(file,"%s/" PERSONAL_INITIALS "%02d%02d%02d.TXT.Z",
BlogWebDir(cdt),ds.year%100,ds.mon,ds.day_of_mon);
return file;
}
public U8 *FileNameNumNext(U8 *files_find_mask,U8 *fmt)
{
CDirEntry *tempde=FilesFind(files_find_mask);
U8 *result=MStrPrint(fmt,FileCnt(tempde));
DirTreeDel(tempde);
return result;
}
U0 BlogDCImgWrite(CDC *dc,CDate cdt=0)
{
U8 file_mask[STR_LEN],file_name[STR_LEN],*st1,*st2;
if (!cdt) cdt=Now+local_time_offset;
StrPrint(file_mask,"%s/Img*",BlogLocalDir(cdt));
StrPrint(file_name,"%s/Img%%03d.BMP",BlogLocalDir(cdt));
st1=FileNameNumNext(file_mask,file_name);
st2=MStrPrint("http://www.templeos.org/Wb%s",st1+2);
BMPWrite(st1,dc);
Free(st1);
"$$HC,\"<img src=\\\"%s\\\" width=\\\"%d\\\" "
"height=\\\"%d\\\" alt=\\\"\\\">\"$$\n",st2,dc->width,dc->height;
Free(st2);
}
U0 BlogScreenShot()
{
Bool old_cursor=DocCursor;
CDC *dc1,*dc2;
U8 *old_fp_draw_input_ptr=gr.fp_draw_input_ptr;
gr.fp_draw_input_ptr=NULL;
WinMgrSync(2);
dc1=DCScreenCapture;
dc2=DCExtract(dc1,0,FONT_HEIGHT,GR_WIDTH-1,GR_HEIGHT-1);
BlogDCImgWrite(dc2);
gr.fp_draw_input_ptr=old_fp_draw_input_ptr;
DCDel(dc1);
DCDel(dc2);
DocCursor(old_cursor);
}
public U0 MakeWebSitePartial()
{
FreshenWebDir("/Home/Web");
FreshenWebDir("/Home/Web/" PERSONAL_INITIALS);
FreshenWebDir(BlogLocalDir+2);
Drv('C');
}
U0 Blog()
{
if (!FileFind(BlogLocalFile,,FUF_JUST_FILES))
Copy("::/Home/Downloads/Blog/DailyBlogHeader.TXT.Z",BlogLocalFile);
WinMax;
AutoComplete;
Msg(MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN|SCF_CTRL);
Msg(MSG_KEY_DOWN_UP,0,SC_F6|SCF_ALT);
Msg(MSG_KEY_DOWN_UP,'\n',0);
if (Ed(BlogLocalFile,EDF_WAS_WRITE)) {
Copy(BlogLocalFile,"::Home/Web/" PERSONAL_INITIALS "/DailyBlog.TXT.Z");
MakeWebSitePartial;
}
}
+5
View File
@@ -1,3 +1,8 @@
#help_index "TOS"
#define PERSONAL_WEB "http:/" "/www.templeos.org/Wb"
#define PERSONAL_INITIALS "TAD"
#define SLOP BLK_SIZE
U0 TOSBootRescueDrv1()
{
+13 -129
View File
@@ -1,5 +1,7 @@
//The CFG defines are $LK,"::/Home/TOSCfg.CPP",A="FI:::/Demo/AcctExample/TOSCfg.CPP"$.
#help_index "TOS"
U8 TOSGetDrv()
{
I64 result;
@@ -45,61 +47,20 @@ U0 TOSPromptAndCopyDrv()
TOSCopyDrv(src,dst);
}
public U0 CursorRemFile(U8 *filename)
{
CDoc *doc;
doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR);
DocWrite(doc);
DocDel(doc);
}
public U0 CursorRem(U8 *files_find_mask="*")
{
I64 fuf_flags=0;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O");
CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde;
while (tempde) {
CursorRemFile(tempde->full_name);
Touch(tempde->full_name,"",,tempde->datetime);
tempde=tempde->next;
}
DirTreeDel(tempde1);
}
U0 UncollapseFile(U8 *filename,I64 *)
{
CDoc *doc=DocRead(filename,DOCF_NO_CURSOR);
DocCollapse(FALSE,doc);
DocWrite(doc);
DocDel(doc);
}
U0 Uncollapse(U8 *files_find_mask="*",U8 *fu_flags=NULL)
{
I64 fuf_flags=0;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+T+O");
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde;
while (tempde && !Bt(&fuf_flags,FUf_CANCEL)) {
UncollapseFile(tempde->full_name,&fuf_flags);
Touch(tempde->full_name,"",,tempde->datetime);
tempde=tempde->next;
}
DirTreeDel(tempde1);
}
public U0 CopySongs(U8 threshold='7')
{
CDoc *s;
CDoc *doc;
CDocEntry *doc_e;
CDirEntry *tempde=FilesFind("/Home/Downloads/Psalmody/*.CPP*",
FUF_CLUSTER_ORDER),
*tempde1=tempde;
FUF_CLUSTER_ORDER),*tempde1=tempde;
DelTree("/Apps/Psalmody/Examples");
MkDir("/Apps/Psalmody/Examples");
while (tempde) {
s=DocRead(tempde->full_name);
doc_e=s->root.next;
doc=DocRead(tempde->full_name);
doc_e=doc->root.next;
if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[2]>=threshold)
Copy(tempde->full_name,"/Apps/Psalmody/Examples");
DocDel(doc);
tempde=tempde->next;
}
DirTreeDel(tempde1);
@@ -288,7 +249,7 @@ U0 MakeTOSDistro()
ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSTS_SIZE",
"Download $TX,"TempleOS V4.01",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)",
"Download $TX,"TempleOS V4.03",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');
}
@@ -323,7 +284,7 @@ U0 MakeDbgDistro()
ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSDBG_SIZE",
"Download $TX,"TempleOS V4.01",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)",
"Download $TX,"TempleOS V4.03",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C');
}
@@ -371,7 +332,7 @@ U0 MakeLiteDistro()
ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSLITE_SIZE",
"Download $TX,"TempleOS V4.01",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)",
"Download $TX,"TempleOS V4.03",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C');
}
@@ -404,98 +365,21 @@ U0 MakeUltraDistro()
ISOFileCreate(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSULTRA_SIZE",
"Download $TX,"TempleOS V4.01",D="DD_OS_NAME_VERSION"$ - UltraLite Distro (%0.1f MB)",
"Download $TX,"TempleOS V4.03",D="DD_OS_NAME_VERSION"$ - UltraLite Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C');
}
U0 TOSWebFile(U8 *name)
{
U8 *name2;
CDirEntry de;
if (FileFind(name,&de)) {
Free(de.full_name);
"File:%s\n",name;
UncollapseFile(name,NULL);
Touch(name,"",,de.datetime);
name2=ChgExt(name,"html");
ToHtml(name,name2,
"<title>The Temple Operating System</title>\n"
"<meta name=\"keywords\" "
"content=\"Operating System,64-Bit,64 Bit,"
"Temple,OS,TempleOS,Free,Open Source,Public Domain,x86_64\">\n");
Touch(name2,"",,de.datetime);
Free(name2);
}
}
U0 MakeWebSite()
{
CDirEntry *tempde,*tempde1;
DocClear;
Cd("D:/Wb");
DelTree("D:/Wb/Home/Budget");
DelTree("D:/Wb/Home/Private");
Del("D:/Wb/Home/*");
Touch("D:/Wb/Home/Web/index.TXT.Z","");
Touch("D:/Wb/Home/Web/Downloads.TXT.Z","");
Touch("D:/Wb/Home/Web/TempleOS.TXT.Z","");
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/Downloads/Bin/TempleBot",
"D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
ToDolDoc("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
ToHtml("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
Del("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
DirTreeDel(tempde1);
Drv('C');
}
U0 FreshenWebDir(U8 *dirname)
{//No recurse
CDirEntry *tempde,*tempde1;
U8 *src,*dst;
src=MStrPrint("D:/Wb%s/*",dirname);
Del(src);
Free(src);
src=MStrPrint("C:%s/*",dirname);
dst=MStrPrint("D:/Wb%s",dirname);
Copy(src,dst);
Free(src);
Free(dst);
src=MStrPrint("D:/Wb%s/*",dirname);
tempde=tempde1=FilesFind(src,FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER);
while (tempde) {
TOSWebFile(tempde->full_name);
tempde=tempde->next;
}
DirTreeDel(tempde1);
}
U0 MakeWebSitePartial()
{
FreshenWebDir("/Home/Web");
FreshenWebDir("/Home/Web/TAD");
FreshenWebDir("/Home/Web/Imgs");
Drv('C');
}
U0 UpdateISODocDefines()
{
try {
DefinePrint("DD_TEMPLEOSCD_SIZE",
"Download $TX,"TempleOS V4.01",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)",
"Download $TX,"TempleOS V4.03",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);
DefinePrint("DD_TEMPLEOSULTRA_SIZE",
"Download $TX,"TempleOS V4.01",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.1f MB)",
"Download $TX,"TempleOS V4.03",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);
+29 -61
View File
@@ -1,3 +1,5 @@
#help_index "TOS"
U0 BadCodeJump()
{//$LK,"::/Adam/God/HSNotes.TXT"$
CDirEntry *tempde1=FilesFind("/*",
@@ -28,42 +30,6 @@ U0 BadCodeJump()
Free(st);
}
public U8 *FileNameNumNext(U8 *files_find_mask,U8 *fmt)
{
CDirEntry *tempde=FilesFind(files_find_mask);
U8 *result=MStrPrint(fmt,FileCnt(tempde));
DirTreeDel(tempde);
return result;
}
U0 DCImgWrite(CDC *dc)
{
U8 *st1=FileNameNumNext("::/Home/Web/Imgs/Img*",
"::/Home/Web/Imgs/Img%03d.BMP"),
*st2=MStrPrint("http://www.templeos.org/Wb%s",st1+2);
BMPWrite(st1,dc);
Free(st1);
"$$HC,\"<img src=\\\"%s\\\" width=\\\"%d\\\" "
"height=\\\"%d\\\" alt=\\\"\\\">\"$$\n",st2,dc->width,dc->height;
Free(st2);
}
U0 BlogScreenShot()
{
Bool old_cursor=DocCursor;
CDC *dc1,*dc2;
U8 *old_fp_draw_input_ptr=gr.fp_draw_input_ptr;
gr.fp_draw_input_ptr=NULL;
WinMgrSync(2);
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;
DCDel(dc1);
DCDel(dc2);
DocCursor(old_cursor);
}
U8 *WebBookMarks(U8 *filename="::/Home/Downloads/Blog/Bookmarks.html")
{
U8 *st;
@@ -149,7 +115,7 @@ class CTopMoviesForm
U8 tag[STR_LEN];
U8 special[STR_LEN];
I64 timestamp;
I64 cert fmtstr "$$DA-TRM,2,A=\"Movie #1-100:%02d\"$$\n";
I64 cert fmtstr "$$DA-TRM,LEN=2,A=\"Movie #1-100:%02d\"$$\n";
I64 min;
I64 sec;
};
@@ -159,14 +125,14 @@ class CMetallicaForm
U8 tag[STR_LEN];
U8 special[STR_LEN];
I64 timestamp;
I64 cert fmtstr "$$DA-TRM,2,A=\"Song #1-99:%02d\"$$\n";
I64 cert fmtstr "$$DA-TRM,LEN=2,A=\"Song #1-99:%02d\"$$\n";
I64 min;
I64 sec;
};
class CWebBookMarkForm
{
U8 tag[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Tag Text:%s\"$$\n";
U8 tag[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Tag Text:%s\"$$\n";
U8 special[STR_LEN];
I64 timestamp;
I64 cert;
@@ -176,8 +142,8 @@ class CWebBookMarkForm
class CWebBibleForm
{
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";
U8 tag[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Tag Text:%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Bible Passage:%s\"$$\n";
I64 timestamp;
I64 cert;
I64 min;
@@ -186,28 +152,28 @@ class CWebBibleForm
class CYouTubeForm
{
U8 tag[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Title:%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P-TRM,11,A=\"SerialNum:%11s\"$$\n";
U8 tag[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Title:%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P-TRM,LEN=11,A=\"SerialNum:%11s\"$$\n";
I64 timestamp;
I64 cert;
I64 min fmtstr "$$DA,32,A=\"Minutes :%d\"$$\n";
I64 sec fmtstr "$$DA,32,A=\"Seconds :%d\"$$\n";
I64 min fmtstr "$$DA,A=\"Minutes :%d\"$$\n";
I64 sec fmtstr "$$DA,A=\"Seconds :%d\"$$\n";
};
class CImgurForm
{
U8 tag[STR_LEN];
U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"SerialNum:%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"SerialNum:%s\"$$\n";
I64 timestamp;
I64 cert;
I64 min fmtstr "$$DA,32,A=\"Width :%d\"$$\n";
I64 sec fmtstr "$$DA,32,A=\"Height :%d\"$$\n";
I64 min fmtstr "$$DA,A=\"Width :%d\"$$\n";
I64 sec fmtstr "$$DA,A=\"Height :%d\"$$\n";
};
class CWikipediaForm
{
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";
U8 tag[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Tag Text:%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Index :%s\"$$\n";
I64 timestamp;
I64 cert;
I64 min;
@@ -217,7 +183,7 @@ class CWikipediaForm
class CRandDecForm
{
U8 tag[STR_LEN];
U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Dec):%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Line (Dec):%s\"$$\n";
I64 timestamp;
I64 cert;
I64 min;
@@ -227,7 +193,7 @@ class CRandDecForm
class CRandHexForm
{
U8 tag[STR_LEN];
U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Hex):%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Line (Hex):%s\"$$\n";
I64 timestamp;
I64 cert;
I64 min;
@@ -237,9 +203,9 @@ class CRandHexForm
class CRandCertForm
{
U8 tag[STR_LEN];
U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"Line (Dec) :%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"Line (Dec) :%s\"$$\n";
I64 timestamp;
I64 cert fmtstr "$$DA,32,A=\"Certificate:%d\"$$\n";
I64 cert fmtstr "$$DA,A=\"Certificate:%d\"$$\n";
I64 min;
I64 sec;
};
@@ -248,8 +214,9 @@ class CRandHexBeacon5Form
{
U8 tag[STR_LEN];
U8 special[STR_LEN]
fmtstr "$$DA-P-TRM,5,A=\"Line (5-Digit Hex):%5s\"$$\n";
I64 timestamp fmtstr "$$DA,32,A=\"TimeStamp :%d\"$$\n";
fmtstr "$$DA-P-TRM,LEN=5,"
"A=\"Line (5-Digit Hex):%5s\"$$\n";
I64 timestamp fmtstr "$$DA,A=\"TimeStamp :%d\"$$\n";
I64 cert;
I64 min;
I64 sec;
@@ -259,8 +226,9 @@ class CRandHexBeacon8Form
{
U8 tag[STR_LEN];
U8 special[STR_LEN]
fmtstr "$$DA-P-TRM,8,A=\"Line (8-Digit Hex):%8s\"$$\n";
I64 timestamp fmtstr "$$DA,32,A=\"TimeStamp :%d\"$$\n";
fmtstr "$$DA-P-TRM,LEN=8,"
"A=\"Line (8-Digit Hex):%8s\"$$\n";
I64 timestamp fmtstr "$$DA,A=\"TimeStamp :%d\"$$\n";
I64 cert;
I64 min;
I64 sec;
@@ -456,7 +424,7 @@ public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512,
DirTreeDel(tempde1);
}
#define NIST_TIME_OFFSET (-7879-local_time_offset/CDATE_FREQ)
#define NIST_TIME_OFFSET (-7884-local_time_offset/CDATE_FREQ)
#define NIST_TIME_TO_SWITCH 3
public U0 NISTSync()
@@ -569,8 +537,8 @@ U0 InsMyURL()
break;
case:
if (DocForm(url(CImgurForm *))) {
"$$HC,\"<img src=\\\"http://i.imgur.com/%s\\\" "
"width=\\\"%d\\\" height=\\\"%d\\\" alt=\\\"\\\">\"$$\n",
"$$HC,\"<center><img src=\\\"http://i.imgur.com/%s\\\" "
"width=\\\"%d\\\" height=\\\"%d\\\" alt=\\\"\\\"></center>\"$$\n",
url->special,url->min,url->sec;
}
break;
+44 -1
View File
@@ -1,3 +1,46 @@
#help_index "TOS"
public U0 CursorRemFile(U8 *filename)
{
CDoc *doc;
doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR);
DocWrite(doc);
DocDel(doc);
}
public U0 CursorRem(U8 *files_find_mask="*")
{
I64 fuf_flags=0;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O");
CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde;
while (tempde) {
CursorRemFile(tempde->full_name);
Touch(tempde->full_name,"",,tempde->datetime);
tempde=tempde->next;
}
DirTreeDel(tempde1);
}
U0 UncollapseFile(U8 *filename,I64 *)
{
CDoc *doc=DocRead(filename,DOCF_NO_CURSOR);
DocCollapse(FALSE,doc);
DocWrite(doc);
DocDel(doc);
}
public U0 Uncollapse(U8 *files_find_mask="*",U8 *fu_flags=NULL)
{
I64 fuf_flags=0;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+T+O");
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
CDirEntry *tempde=FilesFind(files_find_mask,fuf_flags),*tempde1=tempde;
while (tempde && !Bt(&fuf_flags,FUf_CANCEL)) {
UncollapseFile(tempde->full_name,&fuf_flags);
Touch(tempde->full_name,"",,tempde->datetime);
tempde=tempde->next;
}
DirTreeDel(tempde1);
}
#define VIDEO_FRAME_RATE 8
#define FG_JUST_AUDIO 0
@@ -198,7 +241,7 @@ U0 TOSRegWrite()
class CYouTubeForm2
{
U8 special[STR_LEN] fmtstr "$$DA-P,STR_LEN-1,A=\"SerialNum:%s\"$$\n";
U8 special[STR_LEN] fmtstr "$$DA-P,LEN=STR_LEN-1,A=\"SerialNum:%s\"$$\n";
};
U8 *TOSYouTube()
+441
View File
@@ -0,0 +1,441 @@
//This is a customized version of $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
#help_index "DolDoc/Conversion"
//See $LK,"::/Doc/Credits.TXT"$.
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!=-1 && *_old_u32_attr&DOCET_BLINK)
DocPrint(doc,"</blink>");
if (*_old_u32_attr!=-1)
DocPrint(doc,"</span>");
DocPrint(doc,"<span class=c%02X>",u32_attr.u8[1]);
if (u32_attr&DOCET_BLINK &&
(*_old_u32_attr==-1 || !(*_old_u32_attr&DOCET_BLINK)))
DocPrint(doc,"<blink>");
*_old_u32_attr=u32_attr;
if (style_bitmap)
LBts(style_bitmap,u32_attr.u8[1]);
}
while (ch=*st++) {
switch (ch) {
case '\t':
do {
DocPutKey(doc,CH_SPACE,0);
*_col=*_col+1;
} while (*_col&7);
break;
sub_switch_start:
case 'ã': ptr="pi"; break;
case 'é': ptr="theta"; break;
case 'è': ptr="phi"; break;
case 'ê': ptr="omega"; break;
case 'ì': ptr="inf"; break;
case 'æ': ptr="u"; break;
sub_switch_end:
DocPrint(doc,ptr);
*_col=*_col+StrLen(ptr);
break;
sub_switch_start:
case CH_SHIFT_SPACE: ptr=" "; break;
case '&': ptr="&amp;"; break;
case '<': ptr="&lt;"; break;
case '>': ptr="&gt;"; break;
case '"': ptr="&quot;"; break;
sub_switch_end:
DocPrint(doc,ptr);
*_col=*_col+1;
break;
default:
if (CH_SPACE<=ch<0x7F || ch=='\n')
DocPutKey(doc,ch,0);
else
DocPrint(doc,".");
*_col=*_col+1;
}
}
}
U8 *TOSLinkCvt2(U8 *filename,I64 line_num)
{// ::/ --> http://www.templeos.org/Wb/
//Make your own LinkCvt routine
U8 *result=NULL,*st;
if (filename) {
st=ChgExt(filename,"html");
if (st && StrLen(st)>3 && !StrNCmp(st+1,":/",2))
result=MStrPrint(PERSONAL_WEB "/%s#l%d",st+3,line_num);
Free(st);
}
return result;
}
U8 *TOSLinkCvt1(U8 *link_st)
{
static CDoc *bible=NULL;
static I64 locks=0;
U8 *result=NULL,*filename,*needle;
I64 i,num;
if (link_st) {
switch (i=EdLinkCvt(link_st,&filename,&needle,&num)) {
case LK_FILE_LINE:
case LK_PLAIN_LINE:
case LK_FILE:
result=TOSLinkCvt2(filename,num);
break;
case -1:
case LK_DEF:
case LK_HELP_INDEX:
case LK_DOC:
case LK_DOC_ANCHOR:
case LK_DOC_FIND:
case LK_DOC_LINE:
break;
case LK_BIBLE_FIND:
while (LBts(&locks,0))
Yield;
if (!bible)
bible=Adam("DocRead(\"%s\");",filename);
if (DocFind(bible,num,needle))
result=TOSLinkCvt2(filename,bible->cur_entry->y+1);
LBtr(&locks,0);
break;
default:
if (DocFileEd(i,filename,needle,&num,EDF_UNCOLLAPSE|EDF_BAIL))
result=TOSLinkCvt2(filename,num);
}
Free(filename);
Free(needle);
}
return result;
}
public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
U8 *body_footer=NULL,U8 *html_footer=NULL,Bool line_anchors=TRUE,
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;
U32 *hl,*src;
U8 *st,st_2[2],*link_st,*style_bitmap=CAlloc(256/8);
CBGR48 p[NUM_COLORS];
GrPaletteGet(p);
CDoc *doc_out=DocNew;
Bool unlock_doc_in=DocLock(doc_in),no_bwd;
old_attr=doc_in->win_task->text_attr;
doc_in->win_task->text_attr=DOC_ATTR_DFT_TEXT;
for (i=0xF0;i<=0xFF;i++)
LBts(style_bitmap,i);
DocRecalc(doc_in,RECALCt_NORMAL|RECALCF_TO_HTML);
st_2[0]=0; st_2[1]=0;
doc_out->flags|=DOCF_PLAIN_TEXT|DOCF_NO_CURSOR;
if (!html_header) html_header=
"<!DOCTYPE HTML>\n"
"<html>\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n"
"<meta name=\"generator\" content=\"$TX,"TempleOS V4.03",D="DD_OS_NAME_VERSION"$\">\n";
if (!body_header) body_header=
"<body>\n"
"<pre style=\"font-family:courier;font-size:10pt\">\n";
if (!body_footer) body_footer=
"</pre></body>\n</html>\n";
if (!html_footer) html_footer=
"</html>\n";
DocPrint(doc_out,"%s",html_header);
DocPrint(doc_out,"<style type=\"text/css\">\n");
style=doc_out->cur_entry->last;
DocPrint(doc_out,
"</style>\n"
"</head>\n");
DocPrint(doc_out,"%s",body_header);
doc_e=doc_in->root.next;
col=doc_e->x;
y=doc_e->y;
while (doc_e!=doc_in) {
if (!(doc_e->de_flags&DOCEF_SKIP)) {
if (line_anchors && y!=old_y) {
DocPrint(doc_out,"<a name=\"l%d\"></a>",y+1);
old_y=y;
}
while (y<doc_e->y) {
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,"<a name=\"l%d\"></a>",y+1);
old_y=y;
}
col=0;
}
no_bwd=TRUE;
doc_e2=doc_e->next;
while (doc_e2!=doc_in && doc_e2->y==doc_e->y) {
if (doc_e2->x<doc_e->x) {
no_bwd=FALSE;
break;
}
doc_e2=doc_e2->next;
}
if (no_bwd)
while (col<doc_e->x)
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)
link_st=StrNew(doc_e->html_link);
else if (st=DocEntryLink(doc_in,doc_e)) {
link_st=link_cvt(st);
Free(st);
}
if (link_st) {
if (old_u32_attr!=-1) {
DocPrint(doc_out,"</span>");
old_u32_attr=-1;
}
DocPrint(doc_out,"<a href=\"%s\">",link_st);
}
switch (doc_e->type_u8) {
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));
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);
while (*src) {
st_2[0]=*src&0xFF;
HtmlPutS(doc_out,*src++,&old_u32_attr,st_2,&col,style_bitmap);
}
Free(hl);
} else {
if (doc_e->de_flags&DOCEF_CENTER_X && //$BK,1$Nonstandard$BK,0$
doc_e->settings.final_u32_attr&0xF00==PURPLE<<8)
DocPrint(doc_out,"<h1><center>");
HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
&old_u32_attr,doc_e->tag,&col,style_bitmap);
if (doc_e->de_flags&DOCEF_CENTER_X && //$BK,1$Nonstandard$BK,0$
doc_e->settings.final_u32_attr&0xF00==PURPLE<<8)
DocPrint(doc_out,"</center></h1>");
}
break;
case DOCT_TAB:
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) {
DocPrint(doc_out,"</span>");
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);
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);
}
if (link_st) {
if (old_u32_attr!=-1) {
DocPrint(doc_out,"</span>");
old_u32_attr=-1;
}
DocPrint(doc_out,"</a>");
Free(link_st);
}
}
doc_e=doc_e->next;
}
while (y++<doc_e->y) {
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)
DocPrint(doc_out,"</blink>");
DocPrint(doc_out,"</span>");
old_u32_attr=-1;
}
DocPrint(doc_out,"%s",body_footer);
DocPrint(doc_out,"%s",html_footer);
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>>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);
doc_in->win_task->text_attr=old_attr;
if (unlock_doc_in)
DocUnlock(doc_in);
return doc_out;
}
#help_index "Cmd Line (Typically);DolDoc/Conversion;DolDoc/Cmd Line (Typically)"
public U0 TOSToHtml(U8 *_in_name,U8 *_out_name=NULL,U8 *html_header=NULL,
U8 *body_header=NULL,U8 *body_footer=NULL,U8 *html_footer=NULL,
I64 width=80,Bool line_anchors=TRUE,
U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1)
{//Convert $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$file to HTML.
//Supply your own link_cvt routine.
U8 *in_name,*out_name;
CDoc *doc_in,*doc_out;
SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
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");
else
out_name=ChgExt(_in_name,"html");
doc_in=DocRead(in_name);
DocTop(doc_in);
DocPrint(doc_in,"$$BD,LTCYAN$$"); //$BK,1$Nonstandard$BK,0$
doc_out=Doc2Html(doc_in,html_header,body_header,body_footer,html_footer,
line_anchors,link_cvt);
StrCpy(&doc_out->filename.name,out_name);
SettingsPop;
DocWrite(doc_out);
DocDel(doc_in);
DocDel(doc_out);
Free(in_name);
Free(out_name);
}
#help_index "TOS"
U0 TOSWebFile(U8 *name)
{
U8 *name2;
CDirEntry de;
if (FileFind(name,&de)) {
Free(de.full_name);
"File:%s\n",name;
UncollapseFile(name,NULL);
Touch(name,"",,de.datetime);
name2=ChgExt(name,"html");
TOSToHtml(name,name2,
"<!DOCTYPE HTML>\n"
"<html style=\"background-color:#FFFFFF;\">\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n"
"<title>The Temple Operating System</title>\n"
"<meta name=\"keywords\" "
"content=\"Operating System,64-Bit,64 Bit,"
"Temple,OS,TempleOS,Free,Open Source,Public Domain,x86_64\">\n"
"<meta name=\"generator\" content=\"$TX,"TempleOS V4.03",D="DD_OS_NAME_VERSION"$\">\n",
"<body style=\"background-color:#55FFFF; border-style:solid;
border-width:8px; border-color:#0000AA;
margin-left:auto; margin-right:auto; width:800px; \">\n"
"<pre style=\"font-family:courier;font-size:10pt\">\n"
"<div style=\"margin-left:auto; margin-right:auto;"
" width: 640px;\">\n",
"</div></pre></body>\n",
"</html>\n");
Touch(name2,"",,de.datetime);
Free(name2);
}
}
public U0 MakeWebSite()
{
CDirEntry *tempde,*tempde1;
DocClear;
Cd("D:/Wb");
DelTree("D:/Wb/Home/Budget");
DelTree("D:/Wb/Home/Private");
Del("D:/Wb/Home/*");
Touch("D:/Wb/Home/Web/index.TXT.Z","");
Touch("D:/Wb/Home/Web/Downloads.TXT.Z","");
Touch("D:/Wb/Home/Web/TempleOS.TXT.Z","");
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/Downloads/Bin/TempleBot",
"D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
ToDolDoc("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
TOSToHtml("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
Del("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
DirTreeDel(tempde1);
Drv('C');
}
U0 FreshenWebDir(U8 *dirname)
{//No recurse
CDirEntry *tempde,*tempde1;
U8 *src,*dst;
MkDir("D:/Wb");
MkDir("D:/Wb/Home");
MkDir("D:/Wb/Home/Web");
MkDir("D:/Wb/Home/Web/TAD");
MkDir("D:/Wb/Home/Web/TAD/Blog");
src=MStrPrint("D:/Wb%s",dirname);
MkDir(src);
Free(src);
src=MStrPrint("D:/Wb%s/*",dirname);
Del(src);
Free(src);
src=MStrPrint("C:%s/*",dirname);
dst=MStrPrint("D:/Wb%s",dirname);
Copy(src,dst);
Free(src);
Free(dst);
src=MStrPrint("D:/Wb%s/*",dirname);
tempde=tempde1=FilesFind(src,FUF_JUST_FILES|FUF_JUST_TXT|FUF_CLUSTER_ORDER);
while (tempde) {
TOSWebFile(tempde->full_name);
tempde=tempde->next;
}
DirTreeDel(tempde1);
}
+2 -2
View File
@@ -47,11 +47,11 @@ U0 DataDemo()
"However, changes happen immediately,\n"
"so it's tricky.\n\n";
//Use <CTRL-l> for the $$DA...$$ format.
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,32,RT=I16,A=\"%%7d\"$$\n");
doc_e=DocPrint(doc,"$$DA-TRM+RD+UD,RT=I16,A=\"%%7d\"$$\n");
doc_e->data=&i;
StrCpy(buf,"Terry");
doc_e=DocPrint(doc,"$$DA-P+RD+UD,7,A=\"Str:%%s\"$$\n");
doc_e=DocPrint(doc,"$$DA-P+RD+UD,LEN=7,A=\"Str:%%s\"$$\n");
doc_e->data=buf;
if (unlock)
+15 -8
View File
@@ -4,13 +4,15 @@ class FDStruct
//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";
I64 num3 fmtstr "$$DA-TRM,32,A=\"I64 1:0x%016X\"$$\n";
I64 num4 fmtstr "$$DA-TRM,32,A=\"I64 2:%12d\"$$\n";
F64 num1 fmtstr "$$DA-TRM,RT=F64,A=\"F64 1:%12.8f\"$$\n";
F64 num2 fmtstr "$$DA-TRM,RT=F64,A=\"F64 2:%12e\"$$\n";
I64 num3 fmtstr "$$DA-TRM,A=\"I64 1:0x%016X\"$$\n";
I64 num4 fmtstr "$$DA-TRM,A=\"I64 2:%12d\"$$\n";
I64 type fmtstr "$$LS,D=\"ST_PERSON_TYPE\"$$\n";
U8 name[32] fmtstr "$$DA-P,31,A=\"Name :%s\"$$\n";
CDate datetime fmtstr "$$DA-TRM,32,A=\"Date :%8D\"$$\n";
U8 name[32] fmtstr "$$DA-P,LEN=31,A=\"Name :%s\"$$\n";
U8 *address1 fmtstr "$$DA+M,A=\"Address:%s\"$$\n"; //+M is unlimited len U8 *.
U8 *address2 fmtstr "$$DA+M,A=\"Address:%s\"$$\n"; //+M is unlimited len U8 *.
CDate datetime fmtstr "$$DA-TRM,A=\"Date :%8D\"$$\n";
Bool check fmtstr "$$CB,\"Check\"$$\n";
};
@@ -18,12 +20,14 @@ U0 FormDemo()
{
FDStruct fds;
DefineLstLoad("ST_PERSON_TYPE","Child\0Teen\0Adult\0");
fds.num1=12.3e-4; //Set defaults
fds.num1=12.3e-4; //Set defaults
fds.num2=4.5e3;
fds.num3=0x1234;
fds.num4=-567;
fds.type=1;
StrCpy(&fds.name,"John");
fds.address1=StrNew("1234 Pine St.");
fds.address2=NULL; //Init to NULL if empty.
fds.datetime=Now;
fds.check=TRUE;
if (DocForm(&fds)) {
@@ -33,6 +37,8 @@ U0 FormDemo()
"#4\t=%d\n",fds.num4;
"Type\t=%s\n",DefineSub(fds.type,"ST_PERSON_TYPE");
"Name\t=%s\n",fds.name;
"Address1=%s\n",fds.address1;
"Address2=%s\n",fds.address2;
"Date\t=%D\n",fds.datetime;
"Check\t=%d\n",fds.check;
} else
@@ -40,7 +46,8 @@ U0 FormDemo()
"\n\nClassRep Example\n";
ClassRep(&fds);
Free(fds.address1);
Free(fds.address2);
//See also $LK,"ClassRepD",A="MN:ClassRepD"$().
}
+2 -2
View File
@@ -4,8 +4,8 @@
class Acct
{//Use <CTRL-l> to help generate fmtstrs.
U8 name[32] fmtstr "$$DA-P,32,A=\"Name:%s\"$$\n";
U8 addr[64] fmtstr "$$DA-P,64,A=\"Addr:%s\"$$\n";
U8 name[32] fmtstr "$$DA-P,LEN=32,A=\"Name:%s\"$$\n";
U8 addr[64] fmtstr "$$DA-P,LEN=64,A=\"Addr:%s\"$$\n";
U8 pad[DB_ACCT_BLKS*BLK_SIZE-64-32];
};
+3 -3
View File
@@ -29,7 +29,7 @@ U0 Digits()
Fs->text_attr=DKGRAY<<4+WHITE;
DocClear;
//Set default background and foreground
"$$WW,1$$$$BD,DKGRAY$$$$FD,WHITE$$"
"$$WW,1$$$$BG,DKGRAY$$$$FD,WHITE$$"
"\nThis is a memory game. "
"Try to remember the digits and enter them. "
"They are colored based on electrical "
@@ -46,14 +46,14 @@ restart:
MemSet(answer,0,sizeof(answer));
while (TRUE) {
DocClear;
"$$WW,1$$$$BD,DKGRAY$$$$FD,WHITE$$\n";
"$$WW,1$$$$BG,DKGRAY$$$$FD,WHITE$$\n";
"Pattern\nLength:%d\n\n",num+1;
answer[num++]=RandU32%10+'0';
PrintPattern(answer);
ch=PressAKey;
if (ch==CH_ESC||ch==CH_SHIFT_ESC) goto dg_done;
DocClear;
"$$WW,1$$$$BD,DKGRAY$$$$FD,WHITE$$\n";
"$$WW,1$$$$BG,DKGRAY$$$$FD,WHITE$$\n";
"Guess\nLength:%d\n\n",num;
for (i=0;i<num;i++) {
ch=GetChar(,FALSE);
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,5 @@
//This file is required by $LK,"::/Demo/Lectures/Mem/Uncached.CPP"$.
U8 *Mem2MegAlloc(I64 *_pages2Meg,CBlkPool *bp=NULL)
{/*Alloc 2Meg pages from BlkPool. Don't link to task.
(Linking to a task means they will be freed when the task dies.)
@@ -178,3 +180,23 @@ U0 Mem2MegFree(CMemBlk *m,I64 pages2Meg,CBlkPool *bp=NULL)
POPFD
}
}
CHeapCtrl *HeapCtrlBPInit(CBlkPool *bp,I64 pages512)
{//Make mem chunk into HeapCtrl and BlkPool.
I64 num;
CMemBlk *m;
CHeapCtrl *hc;
MemSet(bp,0,sizeof(CBlkPool)+sizeof(CHeapCtrl));
hc=HeapCtrlInit(bp(U8 *)+sizeof(CBlkPool),,bp);
m=(bp(U8 *)+sizeof(CBlkPool)+sizeof(CHeapCtrl)+MEM_PAGE_SIZE-1)&
~(MEM_PAGE_SIZE-1);
num=(bp(U8 *)+pages512<<MEM_PAGE_BITS-m(U8 *))>>MEM_PAGE_BITS;
bp->alloced_u8s=(pages512-num)<<MEM_PAGE_BITS;
BlkPoolAdd(bp,m,num);
return hc;
}
/* PCI hardware devices, when they require uncached memory buffers, need
this code. TempleOS, however, has a law requiring only IN/OUT port hardware
access except VGA, handled here: $LK,"::/Kernel/Mem/PageTables.CPP"$.
*/
@@ -43,6 +43,5 @@ U0 PageTableDemo1()
PageTableDemo1;
//See $LK,"Mem2MegAlloc",A="MN:Mem2MegAlloc"$(), $LK,"Mem2MegFree",A="MN:Mem2MegFree"$() for page aligned allocations.
//See $LK,"CBlkPool",A="MN:CBlkPool"$, $LK,"CHeapCtrl",A="MN:CHeapCtrl"$, $LK,"sys_code_bp",A="MN:sys_code_bp"$ and $LK,"sys_data_bp",A="MN:sys_data_bp"$.
//See $LK,"Memory Overview",A="FI:::/Doc/MemOverview.TXT"$ and $LK,"Memory Routines",A="HI:Memory"$.
File renamed without changes.
@@ -1,5 +1,9 @@
#define SAMPLE_SIZE 100000
// Requires $LK,"::/Demo/Lectures/Mem/Mem2Meg.CPP"$.
Cd(__DIR__);;
#include "Mem2Meg"
#define SAMPLE_SIZE 100000
U0 TimeIns()
{
I64 i,start,end;
@@ -40,12 +44,3 @@ U0 TimeIns()
}
TimeIns;
/*Program Output$HL,0$$WW+H,1$$FD,1$
8 Cores 2.660GHz
Cached Cycles: 202,220
Uncached Cycles: 14,357,016
$FG,2$The difference is even greater
because the loop overhead was not subtracted.
$HL,1$*/
+1 -1
View File
@@ -1 +1 @@
╡▓H╝+5╫?кO╓╨█mц?Ч≥Qфк?ЧeХмЦ?═<н╪$╫Д?ph─┐h║Ф?┼┤3ЖЖ╦И?T3 Д≈eЙ?рp1й М?' GХЖ"О?
rZÅ¡Jþ‘?¨È³a©h·?£û(JéqÌ?»±wÌݧÖ?Œ@ð­ß?•¡âŽ@Pà?@55¼Ã;â?ÉSä[}Pä?vŽ’)é?¯B5´´Õï?
+10 -10
View File
@@ -1,11 +1,11 @@
//This is sorted.
0.095336
0.105530
0.318999
0.412453
0.621226
0.711749
0.960501
0.965063
0.981767
0.988804
0.167187
0.196175
0.280106
0.366963
0.403184
0.591110
0.726180
0.749633
0.795656
0.926049
+1 -1
View File
@@ -1 +1 @@
�‡3צצ¸י? <־¼$½ה?‏eטֽד?‏™Qֶֻ?ֻO₪÷�mֳ?' Gטצ"ן?ph€ƒh¡ז?²’H®+5½?T3 ה—eך?ׂp1ֺ ם?
¯B5´´Õï?¨È³a©h·?@55¼Ã;â?vŽ’)é?»±wÌݧÖ?£û(JéqÌ?•¡âŽ@Pà?Œ@ð­ß?ÉSä[}Pä?rZÅ¡Jþ‘?
+10 -10
View File
@@ -1,11 +1,11 @@
//This is unsorted.
0.711749
0.988804
0.095336
0.318999
0.965063
0.105530
0.621226
0.960501
0.412453
0.981767
0.926049
0.591110
0.196175
0.749633
0.403184
0.280106
0.366963
0.726180
0.167187
0.795656
+9 -8
View File
@@ -4,21 +4,22 @@ an html document named "OutPage.html".
Notice that an entry like $$TX,"GOOGLE",HTML="http://www.google.com"$$
will be converted to text in the html with an html link.
I cheated by hardcoding $LK,"www.templeos.org",A="FF:::/Adam/Opt/Utils/ToHtml.CPP,www.templeos.org"$ as the website
for $LK,"TempleOS Links",A="MN:LK_FILE"$. Why don't you copy $LK,"::/Adam/Opt/Utils/ToHtml.CPP"$
to your /Home directory and modify it? You are welcome
to link to http://www.templeos.org if you want file
that come on the TempleOS distribution.
I cheated by hardcoding $LK,"www.templeos.org",A="FF:::/Demo/ToHtmlToTXTExample/ToHtml.CPP,www.templeos.org"$ as the website
for $LK,"TempleOS Links",A="MN:LK_FILE"$. Why don't you copy
$LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$ to your /Home directory
and modify it? You are welcome to link to
http://www.templeos.org if you want file that come on the
TempleOS distribution.
You can pass html meta data as args to $LK,"ToHtml",A="MN:ToHtml"$().
You can pass html meta data as args to $LK,"ToHtml",A="FF:::/Demo/ToHtmlToTXTExample/ToHtml.CPP,ToHtml"$().
If you want to blog like I do, see these files...
$LK,"::/Demo/AcctExample/TOSToHtml.CPP"$
$LK,"::/Demo/AcctExample/HomeKeyPlugIns.CPP"$
$LK,"::/Demo/AcctExample/TOSHolySpirit.CPP"$
$LK,"MakeWebSite",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeWebSite"$()
*/
Cd(__DIR__);;
#include "ToHtml"
ToHtml("InPage.TXT.Z","OutPage.html");
@@ -118,11 +118,10 @@ U8 *TOSLinkCvt1(U8 *link_st)
return result;
}
public CDoc *Doc2Html(CDoc *doc_in,
U8 *html_header=NULL,
U8 *body_header=NULL,U8 *body_footer=NULL,Bool line_anchors=TRUE,
U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1)
{//Cvt $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ doc to HTML file.
public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
U8 *body_footer=NULL,U8 *html_footer=NULL,Bool line_anchors=TRUE,
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;
U32 *hl,*src;
@@ -138,28 +137,33 @@ public CDoc *Doc2Html(CDoc *doc_in,
for (i=0xF0;i<=0xFF;i++)
LBts(style_bitmap,i);
DocRecalc(doc_in);
DocRecalc(doc_in,RECALCt_NORMAL|RECALCF_TO_HTML);
st_2[0]=0; st_2[1]=0;
doc_out->flags|=DOCF_PLAIN_TEXT|DOCF_NO_CURSOR;
if (!html_header) html_header="";
if (!body_header) body_header="";
if (!body_footer) body_footer="";
DocPrint(doc_out,
"<!DOCTYPE HTML>\n"
"<html>\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n"
"%s"
"<meta name=\"generator\" content=\"TempleOS V%4.2f\">\n"
"<style type=\"text/css\">\n",html_header,os_version);
if (!html_header) html_header=
"<!DOCTYPE HTML>\n"
"<html>\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n"
"<meta name=\"generator\" content=\"$TX,"TempleOS V4.03",D="DD_OS_NAME_VERSION"$\">\n";
if (!body_header) body_header=
"<body>\n"
"<pre style=\"font-family:courier;font-size:10pt\">\n";
if (!body_footer) body_footer=
"</pre></body>\n</html>\n";
if (!html_footer) html_footer=
"</html>\n";
DocPrint(doc_out,"%s",html_header);
DocPrint(doc_out,"<style type=\"text/css\">\n");
style=doc_out->cur_entry->last;
DocPrint(doc_out,
"</style>\n"
"</head>\n"
"<body>\n"
"<pre style=\"font-family:courier;font-size:10pt\">\n");
"</head>\n");
DocPrint(doc_out,"%s",body_header);
doc_e=doc_in->root.next;
@@ -277,7 +281,7 @@ public CDoc *Doc2Html(CDoc *doc_in,
old_u32_attr=-1;
}
DocPrint(doc_out,"%s",body_footer);
DocPrint(doc_out,"</pre></body>\n</html>\n");
DocPrint(doc_out,"%s",html_footer);
doc_out->cur_entry=style->next;
for (i=0;i<256;i++)
@@ -298,8 +302,9 @@ public CDoc *Doc2Html(CDoc *doc_in,
#help_index "Cmd Line (Typically);DolDoc/Conversion;DolDoc/Cmd Line (Typically)"
public U0 ToHtml(U8 *_in_name,U8 *_out_name=NULL,U8 *html_header=NULL,
U8 *body_header=NULL,U8 *body_footer=NULL,I64 width=80,
Bool line_anchors=TRUE,U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1)
U8 *body_header=NULL,U8 *body_footer=NULL,U8 *html_footer=NULL,
I64 width=80,Bool line_anchors=TRUE,
U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1)
{//Convert $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$file to HTML.
//Supply your own link_cvt routine.
U8 *in_name,*out_name;
@@ -315,8 +320,8 @@ public U0 ToHtml(U8 *_in_name,U8 *_out_name=NULL,U8 *html_header=NULL,
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,html_footer,
line_anchors,link_cvt);
StrCpy(&doc_out->filename.name,out_name);
SettingsPop;
+1 -1
View File
@@ -723,7 +723,7 @@
34.222.78.124 - - [11/Feb/2015:15:14:30 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
88.41.4.142 - - [11/Feb/2015:15:14:51 -0800] "GET /Wb/Demo/Graphics/LowPassFilter.html HTTP/1.1" 200 31098 "http://www.templeos.org/Wb/Home/Web/LineRep.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
229.137.198.53 - - [11/Feb/2015:15:16:43 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
228.141.141.213 - - [11/Feb/2015:15:18:24 -0800] "GET /Wb/Demo/Lectures/Uncached.html HTTP/1.1" 200 25539 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
228.141.141.213 - - [11/Feb/2015:15:18:24 -0800] "GET /Wb/Demo/Lectures/Mem/Uncached.html HTTP/1.1" 200 25539 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
115.195.71.92 - - [11/Feb/2015:15:20:23 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=59a235bdb0503729dbf2f256a99267ac&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 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
115.195.71.92 - - [11/Feb/2015:15:20:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
115.195.71.92 - - [11/Feb/2015:15:20:48 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
+2 -2
View File
@@ -7,7 +7,7 @@ $TX,"www.templeos.org",HTML="http://www.templeos.org"$
$FG,5$Owner/President:$FG$
$TX,"Terry A. Davis",HTML="mailto:tdavis@templeos.org"$
$HC,"<img src=\"http://www.templeos.org/images/140414TerryADavis.jpg\" width=\"432\" height=\"324\" alt=\"\">"$
$HC,"<center><img src=\"http://www.templeos.org/images/140414TerryADavis.jpg\" width=\"432\" height=\"324\" alt=\"\"></center>"$
8144 Sickle Lane
Las Vegas, NV 89128
@@ -24,7 +24,7 @@ I was a National Merit Scholar with a 1440 SAT at Arizona State University. I h
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,"<img src=\"http://www.templeos.org/images/Machine.jpg\" width=\"600\" height=\"400\" alt=\"\">"$
$HC,"<center><img src=\"http://www.templeos.org/images/Machine.jpg\" width=\"600\" height=\"400\" alt=\"\"></center>"$
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.
+45 -1
View File
@@ -1,7 +1,51 @@
$WW,1$$FG,5$$TX+CX,"Change Log"$$FG$
$WW,1$$FG,5$$TX+CX,"Change Log"$$FG$
Use $LK,"R",A="MN:R"$() to rename if I change a label.
$IV,1$----02/10/16 13:51:44----$IV,0$
$IV,1$----02/10/16 08:56:49----$IV,0$
* Improved $FG,2$<CTRL-l>$FG$ prompting.
$IV,1$----02/09/16 23:54:23----$IV,0$
* Created $LK,"DOCEF_LEN",A="MN:DOCEF_LEN"$ with arg. $LK,"DOCT_DATA",A="MN:DOCT_DATA"$ has default 64 len.
$IV,1$----02/09/16 09:34:32----$IV,0$
* $BK,1$TempleOS version 4.03 Released$BK,0$
* Added $LK,"DOCEF_REMALLOC_DATA",A="MN:DOCEF_REMALLOC_DATA"$.
$IV,1$----02/05/16 23:00:53----$IV,0$
* Moved $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
* Added $LK,"::/Demo/AcctExample/TOSToHtml.CPP"$.
$IV,1$----02/03/16 18:47:00----$IV,0$
* Refactored $LK,"SpriteMainEd",A="MN:SpriteMainEd"$().
* Added tag edit to main sprite edit menu.
$IV,1$----02/01/16 21:01:15----$IV,0$
* Cleaned-up $LK,"TaskKillDying",A="MN:TaskKillDying"$().
* Made multicore more professional.
$IV,1$----02/01/16 06:02:41----$IV,0$
* Moved $LK,"Mem2Meg.CPP",A="FI:::/Demo/Lectures/Mem/Mem2Meg.CPP"$ out of kernel.
$IV,1$----01/31/16 04:07:50----$IV,0$
* Fixed scheduler, so doesn't idle so high.
* Fixed many memory leaks.
* Changed args to $LK,"Mem512Alloc",A="MN:Mem512Alloc"$(), $LK,"Mem512Free",A="MN:Mem512Free"$(), and $LK,"Mem512TaskAlloc",A="MN:Mem512TaskAlloc"$().
$IV,1$----01/30/16 11:14:29----$IV,0$
* Changed arg in $LK,"DocEntryNewTag",A="MN:DocEntryNewTag"$().
* Added $LK,"DocEntryNewBase",A="MN:DocEntryNewBase"$().
$IV,1$----01/29/16 02:44:38----$IV,0$
* Overhauled $LK,"DocSave",A="MN:DocSave"$() and $LK,"DocRecalc",A="MN:DocRecalc"$().
$IV,1$----01/28/16 20:45:35----$IV,0$
* Fixed bug in locate sprite elem code.
* Overhauled $FG,2$<CTRL-r>$FG$ sprite editor.
* Added $LK,"DocHighlightCursor",A="MN:DocHighlightCursor"$() and $LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="MN:DOCf_DONT_HIGHLIGHT_CURSOR"$.
$IV,1$----01/28/16 14:05:52----$IV,0$
* Fixed bug in $LK,"AutoComplete",A="MN:AutoComplete"$() init.
* Added $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$().
+1 -1
View File
@@ -18,7 +18,7 @@ $WW,1$$FG,5$$TX+CX,"Credits"$$FG$
9) I included $LK,"PCIDevice Lst File",A="FI:::/Misc/PCIDevices.TXT",HTML="http://www.pcidatabase.com/reports.php?type=tab-delimeted"$.
10) Thanks to whoever wrote this $FG,4$$TX,"CppHtml.CPP.Z",HTML="http://web.archive.org/web/20100325153025/http://home.scarlet.be/zoetrope/cpphtml.htm"$$FG$. I'm a novice on web stuff and you helped me with html. See $LK,"ToHtml",A="FI:::/Adam/Opt/Utils/ToHtml.CPP"$.
10) Thanks to whoever wrote this $FG,4$$TX,"CppHtml.CPP.Z",HTML="http://web.archive.org/web/20100325153025/http://home.scarlet.be/zoetrope/cpphtml.htm"$$FG$. I'm a novice on web stuff and you helped me with html. See $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
11) I used $FG,4$$TX,"MagicISO",HTML="http://www.magiciso.com"$$FG$ to burn test CD's to help me understand the ISO9660 file system format. I mostly used the $FG,4$$TX,"ISO9660",HTML="http://users.telenet.be/it3.consultants.bvba/handouts/ISO9960.html"$$FG$ spec.
+3 -3
View File
@@ -116,7 +116,7 @@ Examples: <CTRL-t> to see
8)$LK,"File anchor link -- <CTRL-t> 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:0x11000"$.
11) $LK,"Address Link",A="AD:0x12000"$.
12) For in-memory document address links, see $LK,"SpriteEdText",A="MN:SpriteEdText"$().
@@ -176,7 +176,7 @@ $ID,2$Include a $FG,2$1$FG$ or $FG,2$0$FG$.
$FG,2$$$HL,1$$$FG$ will turn syntax highlighting on.
$ID,-2$$TR,"HC html"$
$ID,2$The $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$() routines will generate a html version of a document. You can cause html code to be injected with $FG,2$HC$FG$. Use the $FG,2$+HTML$FG$ flag to inject a html link.
$ID,2$See $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$ to generate a html version of a document. You can cause html code to be injected with $FG,2$HC$FG$. Use the $FG,2$+HTML$FG$ flag to inject a html link.
$ID,-2$$TR,"ER Error"$
$ID,2$When errors are detected in DolDoc cmds, an $FG,2$ER$FG$ entry is generated.
$ID,-2$
@@ -224,7 +224,7 @@ For indirection, the tag will be regenerated by substituting the value of a syst
For $FG,2$LS$FG$ widgets, see $LK,"::/Demo/DolDoc/Form.CPP"$.
$ID,-2$$TR,"HTML=\"\""$
$ID,2$The $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$() routines will generate a html version of a document. You can cause html link on an item with $FG,2$HTML=""$FG$.
$ID,2$See $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$ to generate a html version of a document. You can cause html link on an item with $FG,2$HTML=""$FG$.
$ID,-2$$TR,"LE=<Exp> Left Expression"$
$ID,2$Left expression. $FG,2$CM$FG$ has this by default for X offset and you can leave-off the $FG,2$LE=$FG$, just putting the $FG,2$<Exp>$FG$.
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -168,7 +168,7 @@ $ID,2$$FG,2$U0 Main()
}
}
$FG$$ID,-2$
* $FG,2$interrupt$FG$, $FG,2$haserrcode$FG$, $FG,2$public$FG$, $FG,2$argpop$FG$ or $FG,2$noargpop$FG$ are function flags. See $LK,"::/Demo/Lectures/PageTableEntries2.CPP"$.
* $FG,2$interrupt$FG$, $FG,2$haserrcode$FG$, $FG,2$public$FG$, $FG,2$argpop$FG$ or $FG,2$noargpop$FG$ are function flags. See $LK,"::/Demo/Lectures/Mem/PageTableEntries2.CPP"$.
* A single quote can encompass multiple characters. $FG,2$'ABC'$FG$ is equ to $FG,2$0x434241$FG$. $LK,"PutChars",A="MN:PutChars"$() takes multiple characters.
@@ -237,7 +237,7 @@ $FG$$ID,-2$
* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object alloced off the heap. For larger size allocations, the system rounds-up to a power of two, so $FG,2$MSize()$FG$ lets you know the real size and you can take full advantage of it.
* You can $LK,"Free",A="MN:Free"$() a $FG,2$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $FG,2$MAlloc$FG$ and $FG,2$Free$FG$ off of other task's heaps, or make an independent heap with $LK,"HeapCtrlBPInit",A="MN:HeapCtrlBPInit"$().
* You CAN $LK,"Free",A="MN:Free"$() a $FG,2$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $FG,2$MAlloc$FG$ and $FG,2$Free$FG$ off-of other task's heaps, or make an independent heap with $LK,"HeapCtrlInit",A="MN:HeapCtrlInit"$(). See $LK,"HeapLog",A="MN:HeapLog"$() for an example.
* The stk does not grow because virtual mem is not used. I recommend allocating large local vars from the heap. You can change $LK,"MEM_DFT_STK",A="MN:MEM_DFT_STK"$ and recompile $FG,2$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$(). You can use $LK,"CallStkGrow",A="MN:CallStkGrow"$(), but it's odd. See $LK,"::/Demo/StkGrow.CPP"$.
+3 -3
View File
@@ -4,7 +4,7 @@ Paging is practically not used. 64-bit mode requires paging, however, so it is
In TempleOS, the lowest 2 Gig of memory is called the $FG,2$code heap$FG$. TempleOS's compiler always uses 32-bit signed relative JMP & CALL instructions because 64-bit CALLs take two instructions. With signed +/- 32-bit values, code can only call a function within 2 Gig distance. Therefore, TempleOS keeps all code in the lowest 2 Gig memory addresses including what would normally be called "the kernel". Two Gig is plenty for code, don't worry.
You can create new, independent heaps by first allocating mem with $LK,"Mem2MegUncachedAlloc",A="MN:Mem2MegUncachedAlloc"$() or $LK,"Mem512Alloc",A="MN:Mem512Alloc"$(), then calling $LK,"HeapCtrlBPInit",A="MN:HeapCtrlBPInit"$() and, then, using $LK,"MAlloc",A="MN:MAlloc"$().
You can create new, independent heaps using $LK,"HeapCtrlInit",A="MN:HeapCtrlInit"$(). Then, use the $LK,"CHeapCtrl",A="MN:CHeapCtrl"$ as the 2nd arg to $LK,"MAlloc",A="MN:MAlloc"$(). See $LK,"HeapLog",A="MN:HeapLog"$() for an example.
Memory alloced by a task will be freed when the task is killed.
@@ -17,7 +17,7 @@ $FG,5$$TX+CX,"Single System-wide Mem Map"$
$FG,2$ 0x0000000000- 0x00$TX,"00006FFF",D="DD_PROTECTED_LOW"$$FG$
$ID,2$Pages marked not present so NULL ptr dereference causes a fault.
$ID,-2$
$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"00034E7F",D="DD_KERNEL_END"$$FG$
$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"0003460F",D="DD_KERNEL_END"$$FG$
$ID,2$Kernel module, placed here by the boot-loader, $LK,"BOOT_RAM_BASE",A="MN:BOOT_RAM_BASE"$.
$ID,-2$
$FG,2$ 0x00$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$- 0x00$TX,"00096FFF",D="DD_BOOT_HIGH_LOC_DVD_END"$$FG$
@@ -35,7 +35,7 @@ $ID,-2$
$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"001845FF",D="DD_SYS_FIXED_AREA_END"$$FG$
$ID,2$$LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for page tables and misc. $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ of address space mapped.
$ID,-2$
$FG,2$ 0x00$TX,"00184600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"7FFFFFFF",D="DD_SYS_HEAP_LIMIT"$$FG$
$FG,2$ 0x00$TX,"00184600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"3FFE3DFF",D="DD_SYS_HEAP_LIMIT"$$FG$
$ID,2$Code Heap mem.
$ID,-2$
$FG,2$ - 0x007FFFFFFF$FG$
+1 -1
View File
@@ -1,5 +1,5 @@
$WW,1$$FG,5$$TX+CX,"Sprite BitMap Menu Help"$$FG$
Bitmaps have a background color. If you delete to the clipboard, what's left will be background colored.
BitMaps have a background color. If you delete to the clipboard, what's left will be background colored.
While drawing, you can usually press $FG,2$'c'$FG$ to eye-dropper the color under the mouse. Press $FG,2$'t'$FG$ for transparent.
+3 -5
View File
@@ -1,9 +1,7 @@
$WW,1$$FG,5$$TX+CX,"Sprite Edit Menu Help"$$FG$
Order of elements matters. They are executed in the order they appear in the side-bar. You can set the current element by clicking the element in the side-bar and making it RED.
Order of elements matters. They are executed in the order they appear in the side-bar. You can select or unselect elements graphically, or with text in the sidebar. Then, cut, copy, paste, shift or transform them.
DELETE will delete the RED element in the side-bar. You can just delete elements directly in the side-bar as long as you click another element to update things.
You can set the current insert point element by clicking the element in the side-bar and making it RED.
You can delete or select elements graphically.
You can insert an element which shifts around all subsequent other elements. Perhaps, you inserted a sprite's elements from the clip-board and want to chift it around. This command is also useful if you interpolate in programs.
$FG,2$Insert Shift Suborigin$FG$ is an element which shifts subsequent elements. Perhaps, you inserted a sprite's elements from the clipboard and want to shift it around? This command is also useful if you call $LK,"SpriteInterpolate",A="MN:SpriteInterpolate"$() in programs.
+1 -1
View File
@@ -4,4 +4,4 @@ $WW,1$You can cut and paste elements in this side-bar to reorder, delete or dupl
You can click on an element to make it the insert point for new elements.
The RED element is the current element and it is the insert point for new elements.
The RED element is the current insert point for new elements.
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -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,"80,940",D="DD_TEMPLEOS_LOC_OFFICIAL"$ 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 $LK,"Hello World",A="FI:::/Doc/HelloWorld.TXT"$ 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,"80,590",D="DD_TEMPLEOS_LOC_OFFICIAL"$ 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 $LK,"Hello World",A="FI:::/Doc/HelloWorld.TXT"$ 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"$.
@@ -39,7 +39,7 @@ Once I was no longer using standard C/C++ syntax, I decided to change everything
There are no object files in TempleOS and, normally, you don't make executable files either, but you can. That's known as $LK,"Ahead-of-Time",A="FF:::/Doc/Glossary.TXT,AOT Compile Mode"$ compilation. Instead, you $LK,"Just in Time",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$ compile.
Tasks have no priority and are never removed from the queue. Instead, they often poll whatever they are waiting on and swap-out. (Swapping tasks takes half a microsecond and does not involve disk activity or memory maps.) See $LK,"Scheduler",A="FL:::/Kernel/Sched.CPP,1"$. Polling keeps it simple. It's might be a problem if you had lots of tasks busy, which rarely happens on a home computer. The order of the tasks in the queue determines front-to-back window order.
Tasks have no priority and are never removed from the queue. Instead, they often poll whatever they are waiting on and swap-out. (Swapping tasks takes half a microsecond and does not involve disk activity or memory maps.) See $LK,"Scheduler",A="FL:::/Kernel/Sched.CPP,1"$. Polling keeps it simple. It might be a problem if you had lots of tasks busy, which rarely happens on a home computer. The order of the tasks in the queue determines front-to-back window order.
The $FG,2$FAT32$FG$ filesystem is supported to makes exchanging files with a dual booted other operating system easy and there is the simple, 64-bit TempleOS $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ filesystem. The $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ has allocation bitmap for clusters and all files are stored contiguously. You can't grow files.
+1 -1
View File
@@ -39,4 +39,4 @@ $FG,5$Escape$FG$ For macro's, send an $FG,2$<ESC>$FG$ char to exit before runnin
$FG,5$Refresh Data$FG$ updates $FG,2$$$DA...$$$FG$ entry continuously.
$FG,5$Html Link$FG$ stores a link which will be embedded if you generate a html version of a document with $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$().
$FG,5$Html Link$FG$ stores a link which will be embedded if you generate a html version of a document with $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
+2 -2
View File
@@ -179,13 +179,13 @@ Bool MyPutKey(I64 ch,I64 sc)
return TRUE;
case '9':
if (sc&SCF_KEY_DESC)
KeyDescSet("Dol /---->");
KeyDescSet("Dol /Indent 5");
else
"$$ID,5$$";
return TRUE;
case '0':
if (sc&SCF_KEY_DESC)
KeyDescSet("Dol /<----");
KeyDescSet("Dol /Unindent 5");
else
"$$ID,-5$$";
return TRUE;
+2 -6
View File
@@ -91,14 +91,10 @@ I64 DirEntryCompareCluster(CDirEntry *e1,CDirEntry *e2)
U0 DirFilesSort(CDirEntry **_tempde,I64 key)
{
I64 i,cnt=0;
I64 i,cnt;
CDirEntry *tempde=*_tempde,*tempde1,**sort_buf;
if (tempde) {
tempde1=tempde;
while (tempde1) {
cnt++;
tempde1=tempde1->next;
}
cnt=LinkedLstCnt(tempde);
if (cnt>1) {
sort_buf=MAlloc(cnt*sizeof(U8 *));
i=0;
+1 -7
View File
@@ -1,7 +1,6 @@
U0 SysGlblsInit()
{
I64 i,j;
U8 *m;
CRAXRBCRCXRDX ee;
CPUId(0x1,&ee);
@@ -55,8 +54,6 @@ U0 SysGlblsInit()
//$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);
QueInit(&dev.pci_root);
dev.mem64_ptr=MEM_MAPPED_SPACE;
@@ -187,10 +184,7 @@ U0 KernelMain()
KbdMouseVarsInit;
IPVarsInit;
KbdInit;
if (mp_cnt<2)
Spawn(&MouseDriverInstall);
else
Spawn(&MouseDriverInstall,,,1);
Spawn(&MouseDriverInstall);
"Loading Compiler\n";
Cd("/Compiler");
+4 -1
View File
@@ -46,7 +46,10 @@ IRQ_TIMER:: //I_TIMER
MOV U32 [RAX],0
JMP @@25
@@20: CALL &IntCore0TimerHandler //Only Core 0 calls this.
@@25: JMP I32 RESTORE_RSI_TASK
@@25: XOR RAX,RAX
CMP RSI,U64 GS:CCPU.idle_task[RAX]
JE I32 RESTORE_SETH_TASK_IF_READY
JMP I32 RESTORE_RSI_TASK
//************************************
INT_FAULT::
PUSH RBX
+4 -4
View File
@@ -207,16 +207,16 @@ SYS_DATA_BP:: DU64 0;
SYS_PROGRESSES::
SYS_PROGRESS1:: DU64 0;
SYS_PROGRESS1_MAX:: DU64 0;
SYS_PROGRESS1_DESC:: DU8 PROGRESS_DESC_LEN+1 DUP(0);
SYS_PROGRESS1_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);
SYS_PROGRESS2:: DU64 0;
SYS_PROGRESS2_MAX:: DU64 0;
SYS_PROGRESS2_DESC:: DU8 PROGRESS_DESC_LEN+1 DUP(0);
SYS_PROGRESS2_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);
SYS_PROGRESS3:: DU64 0;
SYS_PROGRESS3_MAX:: DU64 0;
SYS_PROGRESS3_DESC:: DU8 PROGRESS_DESC_LEN+1 DUP(0);
SYS_PROGRESS3_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);
SYS_PROGRESS4:: DU64 0;
SYS_PROGRESS4_MAX:: DU64 0;
SYS_PROGRESS4_DESC:: DU8 PROGRESS_DESC_LEN+1 DUP(0);
SYS_PROGRESS4_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);
#assert $$-SYS_PROGRESSES==sizeof(CProgress)*4
SYS_FOCUS_TASK:: DU64 0;
+55 -48
View File
@@ -152,8 +152,11 @@ I64 TaskInit(CTask *task,I64 stk_size)
CTaskStk *temps;
QueInit(&task->code_heap->next_mem_blk);
if (task->code_heap!=task->data_heap)
task->code_heap->last_mergable=NULL;
if (task->code_heap!=task->data_heap) {
QueInit(&task->data_heap->next_mem_blk);
task->data_heap->last_mergable=NULL;
}
task->addr=task->next_task=task->last_task=
task->next_input_filter_task=task->last_input_filter_task=
@@ -233,7 +236,7 @@ CTask *Spawn(U0 (*fp_start_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL,
task->rsp(U8 *)-=8;
*task->rsp=&Exit;
task->hash_table->next=parent->hash_table;
MemCpy(task->task_name,task_name,TASK_NAME_LEN+1);
MemCpy(task->task_name,task_name,TASK_NAME_LEN);
StrCpy(task->task_title,task->task_name);
task->title_src=TTS_TASK_NAME;
PUSHFD
@@ -275,7 +278,7 @@ I64 ExeCmdLine(CCmpCtrl *cc)
(cc->token!='}' || !(cc->flags & CCF_EXE_BLK)) ) {
if (Fs->title_src==TTS_CUR_LEX) {
ptr2=&Fs->task_title;
ptr3=ptr2+TASK_TITLE_LEN;
ptr3=ptr2+STR_LEN-1;
if (cc->lex_include_stk->flags & LFSF_DOC) {
doc_e=cc->lex_include_stk->cur_entry;
doc=cc->lex_include_stk->doc;
@@ -296,7 +299,7 @@ I64 ExeCmdLine(CCmpCtrl *cc)
if (ptr2<ptr3) *ptr2=0;
} else
if ((ptr=cc->lex_include_stk->line_start) && *ptr)
MemCpy(ptr2,ptr,TASK_TITLE_LEN);
MemCpy(ptr2,ptr,STR_LEN-1);
}
cc->flags&=~CCF_HAS_MISC_DATA;
machine_code=LexStmt2Bin(cc,&type);
@@ -328,6 +331,22 @@ I64 ExeCmdLine(CCmpCtrl *cc)
return result;
}
U0 SrvTaskCont()
{//Act as server task in a loop handling commands.
I64 old_flags=GetRFlags;
FlushMsgs;
while (TRUE) {
CLI
if (SrvCmdsHandler(old_flags) && Fs->title_src==TTS_TASK_NAME)
MemCpy(Fs->task_title,Fs->task_name,TASK_NAME_LEN);
FlushMsgs;
LBts(&Fs->task_flags,TASKf_IDLE);
LBts(&Fs->task_flags,TASKf_AWAITING_MSG);
Yield;
SetRFlags(old_flags);
}
}
U0 UserTaskCont()
{//Terminal key-input-execute loop.
CCmpCtrl *cc;
@@ -350,6 +369,15 @@ U0 UserTaskCont()
} while (cont);
}
U0 SrvCmdLine(I64 dummy=0)
{
nounusedwarn dummy;
Fs->win_inhibit=WIG_USER_TASK_DFT;
if (HashFind("SrvStartUp",adam_task->hash_table,HTT_FUN))
CallExtStr("SrvStartUp");
SrvTaskCont;
}
U0 UserCmdLine(I64 dummy=0)
{//A user task ends-up calling this.
nounusedwarn dummy;
@@ -374,32 +402,7 @@ CTask *User(U8 *fmt=NULL,...)
return task;
}
U0 SrvTaskCont()
{//Act as server task in a loop handling commands.
I64 old_flags=GetRFlags;
FlushMsgs;
while (TRUE) {
CLI
if (SrvCmdsHandler(old_flags) && Fs->title_src==TTS_TASK_NAME)
MemCpy(Fs->task_title,Fs->task_name,TASK_NAME_LEN+1);
FlushMsgs;
LBts(&Fs->task_flags,TASKf_IDLE);
LBts(&Fs->task_flags,TASKf_AWAITING_MSG);
Yield;
SetRFlags(old_flags);
}
}
U0 SrvCmdLine(I64 dummy=0)
{
nounusedwarn dummy;
Fs->win_inhibit=WIG_USER_TASK_DFT;
if (HashFind("SrvStartUp",adam_task->hash_table,HTT_FUN))
CallExtStr("SrvStartUp");
SrvTaskCont;
}
U0 TaskFinishOff(CTask *task)
U0 TaskDel(CTask *task)
{//We delay freeing in case lingering ptr to reincarnated.
HeapCtrlDel(task->code_heap);
if (task->data_heap!=task->code_heap)
@@ -481,26 +484,30 @@ I64 TaskEnd()
LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED);
LBtr(&task->task_flags,TASKf_TASK_LOCK);
if (sys_winmgr_task) {
task->next_task=Gs->dying_task_lst;
Gs->dying_task_lst=task;
} 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.
task->wake_jiffy=cnts.jiffies+DYING_JIFFIES;
while (LBts(&Gs->cpu_flags,CPUf_DYING_TASK_QUE))
PAUSE
QueIns(task,Gs->last_dying);
LBtr(&Gs->cpu_flags,CPUf_DYING_TASK_QUE);
return tempt;
}
U0 TaskFinishOffDying()
{//Called by Seth tasks. Delay freeing in case lingering ptr to reincarnated.
CTask *task1,*task2;
if (task1=XchgI64(&Gs->dying_task_lst,NULL)) {
do {
task2=task1->next_task;
TaskFinishOff(task1);
task1=task2;
} while (task1);
U0 TaskKillDying()
{//Delay freeing to prevent asking for trouble with quick reincarnations.
//What if the user is doing this: $LK,"DoTreeCheckers",A="FF:::/Misc/OSTestSuite.CPP,DoTreeCheckers"$.
CTaskDying *task,*task1;
if (Gs->kill_jiffy<cnts.jiffies) {//Avoid doing as many lock operations.
while (LBts(&Gs->cpu_flags,CPUf_DYING_TASK_QUE))
PAUSE
task=Gs->next_dying;
while (task!=&Gs->next_dying && task->wake_jiffy<cnts.jiffies) {
task1=task->next;
QueRem(task);
TaskDel(task);
task=task1;
}
LBtr(&Gs->cpu_flags,CPUf_DYING_TASK_QUE);
Gs->kill_jiffy=cnts.jiffies+DYING_JIFFIES;
}
}
Loaded 100 of 115 files, more files were not shown because too many files have changed in this diff. Show more