TempleOSCDV4.09.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:47:32 +02:00
1 parent 2d56cda5f3
commit 353eac0dbe
88 files changed
+2449 -2043

No files matched your search

Binary file not shown.
+47 -5
View File
@@ -323,7 +323,7 @@ U0 FMDelete(CDoc *doc)
} }
} }
U0 FMMount(CDoc *doc) U0 FMChgDsk(CDoc *doc)
{ {
CDocEntry *doc_ce=doc->cur_entry; CDocEntry *doc_ce=doc->cur_entry;
CDirEntry *tempde; CDirEntry *tempde;
@@ -340,6 +340,32 @@ U0 FMMount(CDoc *doc)
} }
} }
U0 FMMountISO(CDoc *doc)
{
CDocEntry *doc_ce=doc->cur_entry;
CDirEntry *tempde;
if (doc_ce->type_u8==DOCT_MENU_VAL && (tempde=doc_ce->user_data))
MountFile(tempde->full_name);
}
U0 FMUnmount(CDoc *doc)
{
CDocEntry *doc_ce=doc->cur_entry;
CDirEntry *tempde;
I64 drv_let;
if (doc_ce->type_u8==DOCT_TREE || doc_ce->type_u8==DOCT_MENU_VAL)
tempde=doc_ce->user_data;
else
tempde=NULL;
if (tempde) {
while (tempde->parent)
tempde=tempde->parent;
drv_let=*tempde->full_name;
if (Let2BlkDev(drv_let)!=Let2BlkDev(':'))
Unmount(drv_let);
}
}
U0 FMFmtDrv(CDoc *doc) U0 FMFmtDrv(CDoc *doc)
{ {
CDocEntry *doc_ce=doc->cur_entry; CDocEntry *doc_ce=doc->cur_entry;
@@ -460,9 +486,11 @@ U0 FMCopy(CDoc *doc)
#define FMR_PASTE 6 #define FMR_PASTE 6
#define FMR_CHG_DSK 7 #define FMR_CHG_DSK 7
#define FMR_FORMAT 8 #define FMR_FORMAT 8
#define FMR_MAKE_ISO 9 #define FMR_MOUNT_ISO 9
#define FMR_BURN_ISO 10 #define FMR_UNMOUNT 10
#define FMR_HELP 11 #define FMR_MAKE_ISO 11
#define FMR_BURN_ISO 12
#define FMR_HELP 13
I64 PopUpFMRight(U8 *header=NULL,U8 *footer=NULL) I64 PopUpFMRight(U8 *header=NULL,U8 *footer=NULL)
{ {
@@ -478,6 +506,8 @@ I64 PopUpFMRight(U8 *header=NULL,U8 *footer=NULL)
"$$CM+LX,1,3 $$$$BT,\"PASTE CLIPBOARD FILES \",LE=FMR_PASTE$$" "$$CM+LX,1,3 $$$$BT,\"PASTE CLIPBOARD FILES \",LE=FMR_PASTE$$"
"$$CM+LX,27,0$$$$BT,\"CHANGE DISK(MOUNT IT) \",LE=FMR_CHG_DSK$$" "$$CM+LX,27,0$$$$BT,\"CHANGE DISK(MOUNT IT) \",LE=FMR_CHG_DSK$$"
"$$CM+LX,1,3 $$$$BT,\"FORMAT \",LE=FMR_FORMAT$$" "$$CM+LX,1,3 $$$$BT,\"FORMAT \",LE=FMR_FORMAT$$"
"$$CM+LX,1,3 $$$$BT,\"MOUNT ISO.C FILE \",LE=FMR_MOUNT_ISO$$"
"$$CM+LX,27,0$$$$BT,\"UNMOUNT \",LE=FMR_UNMOUNT$$"
"$$CM+LX,1,3 $$$$BT,\"MAKE ISO (CD/DVD) FILE\",LE=FMR_MAKE_ISO$$" "$$CM+LX,1,3 $$$$BT,\"MAKE ISO (CD/DVD) FILE\",LE=FMR_MAKE_ISO$$"
"$$CM+LX,27,0$$$$BT,\"BURN ISO (CD/DVD) FILE\",LE=FMR_BURN_ISO$$" "$$CM+LX,27,0$$$$BT,\"BURN ISO (CD/DVD) FILE\",LE=FMR_BURN_ISO$$"
"$$CM+LX,1,3 $$$$BT,\"HELP \",LE=FMR_HELP$$" "$$CM+LX,1,3 $$$$BT,\"HELP \",LE=FMR_HELP$$"
@@ -518,6 +548,12 @@ U0 FMRightClick()
case FMR_FORMAT: case FMR_FORMAT:
Msg(MSG_KEY_DOWN,'f',0); Msg(MSG_KEY_DOWN,'f',0);
break; break;
case FMR_MOUNT_ISO:
Msg(MSG_KEY_DOWN,'i',0);
break;
case FMR_UNMOUNT:
Msg(MSG_KEY_DOWN,'u',0);
break;
case FMR_MAKE_ISO: case FMR_MAKE_ISO:
Msg(MSG_KEY_DOWN,'M',0); Msg(MSG_KEY_DOWN,'M',0);
break; break;
@@ -667,7 +703,13 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL)
FMDelete(doc); FMDelete(doc);
break; break;
case 'm': case 'm':
FMMount(doc); FMChgDsk(doc);
break;
case 'i':
FMMountISO(doc);
break;
case 'u':
FMUnmount(doc);
break; break;
case 'M': case 'M':
FMMakeISO(doc); FMMakeISO(doc);
+36 -5
View File
@@ -2,7 +2,8 @@
I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition)
{//If _doc, called by $LK,"::/Kernel/KCfg.CPP"$ else called by $LK,"Mount",A="MN:Mount"$(). {//If _doc, called by $LK,"::/Kernel/KCfg.CPP"$ else called by $LK,"Mount",A="MN:Mount"$().
I64 cnt,res=0,num_hints,drv_let,type,unit; I64 cnt,res=0,num_hints,drv_let,type,unit;
U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN]; U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN],
*filename=NULL,*filename2=NULL;
CATARep *root=NULL,*tempha; CATARep *root=NULL,*tempha;
Bool one_drv,make_free; Bool one_drv,make_free;
CDoc *doc; CDoc *doc;
@@ -14,7 +15,8 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition)
"\n****** Mount Drives ******\n" "\n****** Mount Drives ******\n"
"$$GREEN$$A$$FG$$-$$GREEN$$B$$FG$$ are RAM drives.\n" "$$GREEN$$A$$FG$$-$$GREEN$$B$$FG$$ are RAM drives.\n"
"$$GREEN$$C$$FG$$-$$GREEN$$L$$FG$$ are ATA hard drives.\n" "$$GREEN$$C$$FG$$-$$GREEN$$L$$FG$$ are ATA hard drives.\n"
"$$GREEN$$M$$FG$$-$$GREEN$$S$$FG$$ are file drives.\n" "$$GREEN$$M$$FG$$-$$GREEN$$P$$FG$$ are file read drives.\n"
"$$GREEN$$Q$$FG$$-$$GREEN$$S$$FG$$ are file write drives.\n"
"$$GREEN$$T$$FG$$-$$GREEN$$Z$$FG$$ are ATAPI CD/DVD drives.\n" "$$GREEN$$T$$FG$$-$$GREEN$$Z$$FG$$ are ATAPI CD/DVD drives.\n"
"\nDrive Letter ($$PURPLE$$<ENTER>$$FG$$ to exit):"; "\nDrive Letter ($$PURPLE$$<ENTER>$$FG$$ to exit):";
drv_let=ToUpper(GetChar); drv_let=ToUpper(GetChar);
@@ -34,10 +36,13 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition)
case BDT_RAM: case BDT_RAM:
"Addr of RAM disk ($$PURPLE$$<ENTER>$$FG$$ to MAlloc):"; "Addr of RAM disk ($$PURPLE$$<ENTER>$$FG$$ to MAlloc):";
GetS(addr_buf,STR_LEN); GetS(addr_buf,STR_LEN);
case BDT_FILE: case BDT_FILE_WRITE:
"Blks of 512 bytes:"; "Blks of 512 bytes:";
GetS(blks_buf,STR_LEN); GetS(blks_buf,STR_LEN);
break; break;
case BDT_FILE_READ:
filename=GetStr("File Name:");
break;
case BDT_ATA: case BDT_ATA:
case BDT_ATAPI: case BDT_ATAPI:
num_hints=ATARep(,,&root); num_hints=ATARep(,,&root);
@@ -73,16 +78,22 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition)
LinkedLstDel(root); LinkedLstDel(root);
break; break;
} }
DocPrint(doc,"bd=BlkDevNextFree(\'%C\',%d);bd->unit=%d;\n", DocPrint(doc,"bd=BlkDevNextFreeSlot(\'%C\',%d);bd->unit=%d;\n",
drv_let,type,unit); drv_let,type,unit);
switch (type) { switch (type) {
case BDT_RAM: case BDT_RAM:
if (!*addr_buf) StrCpy(addr_buf,"0"); if (!*addr_buf) StrCpy(addr_buf,"0");
DocPrint(doc,"bd->RAM_dsk=%s;\n",addr_buf); DocPrint(doc,"bd->RAM_dsk=%s;\n",addr_buf);
case BDT_FILE: case BDT_FILE_WRITE:
if (!*blks_buf) StrCpy(blks_buf,"0"); if (!*blks_buf) StrCpy(blks_buf,"0");
DocPrint(doc,"bd->max_blk=(%s)-1;\n",blks_buf); DocPrint(doc,"bd->max_blk=(%s)-1;\n",blks_buf);
break; break;
case BDT_FILE_READ:
filename2=FileNameAbs(filename);
DocPrint(doc,"bd->file_dsk_name=AStrNew(\"%s\");\n",filename2);
DocPrint(doc,"bd->drv_offset=19<<2+"
"(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;\n");
break;
case BDT_ATA: case BDT_ATA:
case BDT_ATAPI: case BDT_ATAPI:
if (type==BDT_ATAPI && !*base0_buf) { if (type==BDT_ATAPI && !*base0_buf) {
@@ -108,6 +119,8 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition)
} }
res+=cnt; res+=cnt;
} while (cnt || !res && _doc); //At least 1 if Called by $LK,"::/Kernel/KCfg.CPP"$ } while (cnt || !res && _doc); //At least 1 if Called by $LK,"::/Kernel/KCfg.CPP"$
Free(filename);
Free(filename2);
return res; return res;
} }
@@ -115,3 +128,21 @@ public I64 Mount(Bool repartition=FALSE)
{//Mount drives. {//Mount drives.
return Mount2(0,NULL,repartition); return Mount2(0,NULL,repartition);
} }
public U0 Unmount(U8 drv_let=0)
{//Unmount drive(s).
BlkDevDel(Let2BlkDev(drv_let));
}
public U8 MountFile(U8 *filename)
{//Mount ISO.C file.
U8 *filename2=DftExt(filename,"ISO.C"),*filename3=FileNameAbs(filename2);
CDrv *dv=DrvMakeFreeSlot(DrvNextFreeLet('M')); //First $LK,"BDT_FILE_READ",A="MN:BDT_FILE_READ"$
CBlkDev *bd=BlkDevNextFreeSlot(dv->drv_let,BDT_FILE_READ);
bd->drv_offset=19<<2+(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;
bd->file_dsk_name=AStrNew(filename3);
BlkDevAdd(bd,TRUE,TRUE);
Free(filename3);
Free(filename2);
return dv->drv_let;
}
+1 -1
View File
@@ -32,7 +32,7 @@ public I64 PrtDsk(U8 drv_let=0)
"make your hard drive impossible\n" "make your hard drive impossible\n"
"to repartition with other operating\n" "to repartition with other operating\n"
"until you set block zero to zero\n" "until you set block zero to zero\n"
"with $$LK,\"MasterBootZero\",\"MN:MasterBootZero\"$$()\n\n\n" "with $$LK,\"BootMHDZero\",\"MN:BootMHDZero\"$$()\n\n\n"
"Continue"; "Continue";
if (!YorN) return 0; if (!YorN) return 0;
if (drv_let && !Let2BlkDev(drv_let,FALSE)) if (drv_let && !Let2BlkDev(drv_let,FALSE))
+2 -2
View File
@@ -11,8 +11,8 @@ U0 LoadDocDefines()
//This is cut and replaced when I generate a distro. //This is cut and replaced when I generate a distro.
//See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TOSDistro.CPP,DD_TEMPLEOS_LOC"$. //See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TOSDistro.CPP,DD_TEMPLEOS_LOC"$.
$TR-C,"LineRep"$ $TR-C,"LineRep"$
$ID,4$DefinePrint("DD_TEMPLEOS_LOC","120,845"); $ID,4$DefinePrint("DD_TEMPLEOS_LOC","121,194");
DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","80,741"); DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","81,057");
$ID,-4$ $ID,-4$
DefinePrint("DD_KERNEL","%08X",bfh); DefinePrint("DD_KERNEL","%08X",bfh);
bfh(I64)+=bfh->file_size-1; bfh(I64)+=bfh->file_size-1;
+18 -3
View File
@@ -265,9 +265,9 @@ public F64 PopUpRangeF64Log(F64 lo,F64 hi,I64 steps,
return PopUpRangeF64Exp(lo,hi,Exp(Ln(hi/lo)/(steps-1)),fmt,header,footer); return PopUpRangeF64Exp(lo,hi,Exp(Ln(hi/lo)/(steps-1)),fmt,header,footer);
} }
#help_index "Task/Srv/Exe" #help_index "Task/Srv/Exe;Compiler"
public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE) public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE)
{//Tell adam task to compile and run a file. {//Make adam_task execute file.
Bool okay=TRUE; Bool okay=TRUE;
U8 *name=FileNameAbs(filename), U8 *name=FileNameAbs(filename),
*name2=DftExt(name,"CPP.Z"); *name2=DftExt(name,"CPP.Z");
@@ -285,7 +285,7 @@ public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE)
public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE, public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE,
CTask *parent=NULL,CTask **_pu_task=NULL) CTask *parent=NULL,CTask **_pu_task=NULL)
{//Run code file in PopUp win task. {//$LK,"ExeFile2",A="MN:ExeFile2"$() in $LK,"PopUp",A="MN:PopUp"$ task. Cont as User.
Bool okay=TRUE; Bool okay=TRUE;
U8 *st,*name=FileNameAbs(filename), U8 *st,*name=FileNameAbs(filename),
*name2=DftExt(name,"CPP.Z"); *name2=DftExt(name,"CPP.Z");
@@ -306,3 +306,18 @@ public I64 PopUpFile(U8 *filename,Bool warn_ext=TRUE,
Free(name); Free(name);
return res; return res;
} }
public I64 PopUpRunFile(U8 *filename,I64 ccf_flags=0,...)
{//$LK,"ExeFile",A="MN:ExeFile"$() with args using $LK,"LastFun",A="MN:LastFun"$() in $LK,"PopUp",A="MN:PopUp"$ task.
U8 *st,*name=FileNameAbs(filename),
*name2=DftExt(name,"CPP.Z");
I64 res=0;
st=MStrPrint(
"\"$$$$WW+H,1$$$$\";ExeFile2(\"%s\",0x%X);LastFun(0x%X,0x%X);",
name2,ccf_flags,argc,argv);
res=PopUp(st,Fs);
Free(st);
Free(name2);
Free(name);
return res;
}
+19 -5
View File
@@ -59,8 +59,9 @@ public U0 DocTermNew()
#define RIGHT_DELETE 4 #define RIGHT_DELETE 4
#define RIGHT_TYPE 5 #define RIGHT_TYPE 5
#define RIGHT_ED 6 #define RIGHT_ED 6
#define RIGHT_PLAIN 7 #define RIGHT_MOUNT 7
#define RIGHT_AUTOFILE 8 #define RIGHT_PLAIN 8
#define RIGHT_AUTOFILE 9
I64 PopUpTermRight(U8 *header) I64 PopUpTermRight(U8 *header)
{ {
@@ -76,9 +77,10 @@ I64 PopUpTermRight(U8 *header)
"$$CM+LX,1,3 $$$$BT,\"DELETE \",LE=RIGHT_DELETE$$" "$$CM+LX,1,3 $$$$BT,\"DELETE \",LE=RIGHT_DELETE$$"
"$$CM+LX,26,0$$$$BT,\"TYPE TXT;GRA\",LE=RIGHT_TYPE$$" "$$CM+LX,26,0$$$$BT,\"TYPE TXT;GRA\",LE=RIGHT_TYPE$$"
"$$CM+LX,1,3 $$$$BT,\"ED TXT\",LE=RIGHT_ED$$" "$$CM+LX,1,3 $$$$BT,\"ED TXT\",LE=RIGHT_ED$$"
"$$CM+LX,26,0$$$$BT,\"PLAIN ED TXT\",LE=RIGHT_PLAIN$$" "$$CM+LX,26,0$$$$BT,\"MOUNT ISO.C\",LE=RIGHT_MOUNT$$"
"$$CM+LX,1,3 $$$$BT,\"CANCEL \",LE=DOCM_CANCEL$$" "$$CM+LX,1,3 $$$$BT,\"PLAIN ED TXT\",LE=RIGHT_PLAIN$$"
"$$CM+LX,26,0$$$$BT,\"AUTOFILE AUT\",LE=RIGHT_AUTOFILE$$\n", "$$CM+LX,26,0$$$$BT,\"AUTOFILE AUT\",LE=RIGHT_AUTOFILE$$\n"
"$$CM+LX,1,3 $$$$BT,\"CANCEL \",LE=DOCM_CANCEL$$",
FILEMASK_TXT,FILEMASK_JIT,FILEMASK_GRA); FILEMASK_TXT,FILEMASK_JIT,FILEMASK_GRA);
i=PopUpMenu(doc); i=PopUpMenu(doc);
DocDel(doc); DocDel(doc);
@@ -160,6 +162,18 @@ I64 TermRightClickLink(CDoc *doc,CDocEntry *doc_e)
"Ed(\"%s\");\n$$PT$$$$FG$$$$BG$$",st; "Ed(\"%s\");\n$$PT$$$$FG$$$$BG$$",st;
res=Ed(st); res=Ed(st);
break; break;
case RIGHT_MOUNT:
if (FileExtDot(st) && !FilesFindMatch(st,"*.ISO.C")) {
if (!PopUpCancelOk(ST_WARN_ST "Not .ISO.C File\n\n")) {
send_new_line=TRUE;
break;
}
}
"MountFile(\"%s\");\n$$PT$$$$FG$$$$BG$$",st;
WinZBufUpdate;
MountFile(st);
res=TRUE;
break;
case RIGHT_PLAIN: case RIGHT_PLAIN:
"Plain(\"%s\");\n$$PT$$$$FG$$$$BG$$",st; "Plain(\"%s\");\n$$PT$$$$FG$$$$BG$$",st;
res=Plain(st); res=Plain(st);
+3 -3
View File
@@ -119,9 +119,9 @@ public I64 ExeDoc(CDoc *doc,I64 ccf_flags=0)
I64 res; I64 res;
Bool okay=TRUE,unlock_doc=DocLock(doc); Bool okay=TRUE,unlock_doc=DocLock(doc);
CCmpCtrl *cc=CmpCtrlNew(,ccf_flags|CCF_DONT_FREE_BUF); CCmpCtrl *cc=CmpCtrlNew(,ccf_flags|CCF_DONT_FREE_BUF);
if (Fs->last_lex!=&Fs->next_lex) if (Fs->last_cc!=&Fs->next_cc)
cc->opts=Fs->last_lex->opts; cc->opts=Fs->last_cc->opts;
QueIns(cc,Fs->last_lex); QueIns(cc,Fs->last_cc);
LexAttachDoc(cc,,doc); LexAttachDoc(cc,,doc);
try { try {
Lex(cc); Lex(cc);
+383 -271
View File
@@ -1396,313 +1396,425 @@ gr_done:
public I64 GrFillTri0(CDC *dc=gr.dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p4) public I64 GrFillTri0(CDC *dc=gr.dc,CD3I32 *p1,CD3I32 *p2,CD3I32 *p4)
{//3D. Returns cnt of pixs changed {//3D. Returns cnt of pixs changed
I64 x1,x2,y,z1,z2,dx1,dy1,dz1,dx2,dy2,dz2,res=0,i,y_min,y_max; I64 x1,x2,y1,y2,z1,z2,dx1,dy1,dz1,dx2,dy2,dz2,res=0,i,min,max;
CTask *win_task; CTask *win_task;
if (AbsI64(p1->y-p2->y)+AbsI64(p1->y-p4->y)<=
AbsI64(p1->x-p2->x)+AbsI64(p1->x-p4->x)) {
//p1 is min x //p1 is min x
if (p4->x<p2->x) if (p4->x<p2->x)
SwapI64(&p4,&p2); SwapI64(&p4,&p2);
if (p2->x<p1->x) if (p2->x<p1->x)
SwapI64(&p2,&p1); SwapI64(&p2,&p1);
//p2y<=p4y //p2y<=p4y
if (p4->y<p2->y) if (p4->y<p2->y)
SwapI64(&p4,&p2); SwapI64(&p4,&p2);
y_min=0; min=0;
y_max=dc->height; max=dc->height;
if (dc->flags & DCF_SCREEN_BITMAP) { if (dc->flags & DCF_SCREEN_BITMAP) {
win_task=dc->win_task; win_task=dc->win_task;
y_min-=win_task->scroll_y+win_task->pix_top; min-=win_task->scroll_y+win_task->pix_top;
y_max-=win_task->scroll_y+win_task->pix_top; max-=win_task->scroll_y+win_task->pix_top;
if (y_max>win_task->pix_bottom-(win_task->scroll_y+win_task->pix_top)) if (max>win_task->pix_bottom-(win_task->scroll_y+win_task->pix_top))
y_max=win_task->pix_bottom-(win_task->scroll_y+win_task->pix_top); max=win_task->pix_bottom-(win_task->scroll_y+win_task->pix_top);
}
if ((dy2=p4->y-p1->y)<0) {
/*
p1x<= {p2x,p4x}
p2y<=
p4y<
p1y
6
1
6
1
24
1
42
1
2
4
1
24
1
42
1
2
4
1
*/
dy1=p2->y-p1->y;
dx1=(p1->x-p2->x)<<32/dy1;
dz1=(p1->z-p2->z)<<32/dy1;
dx2=(p1->x-p4->x)<<32/dy2;
dz2=(p1->z-p4->z)<<32/dy2;
x1=x2=p1->x<<32; y=p1->y; z1=z2=p1->z<<32;
if (y+dy2<y_min) {
i=y_min-(y+dy2);
if (i>-dy2) goto ft_done;
dy2+=i;
} }
if (y>=y_max) {
i=y-y_max+1; if ((dy2=p4->y-p1->y)<0) {
if (i>-dy2) dy1=p2->y-p1->y;
i=-dy2; dx1=(p1->x-p2->x)<<32/dy1;
dy2+=i; dz1=(p1->z-p2->z)<<32/dy1;
y-=i;
x1+=dx1*i; dx2=(p1->x-p4->x)<<32/dy2;
x2+=dx2*i; dz2=(p1->z-p4->z)<<32/dy2;
z1+=dz1*i; x1=x2=p1->x<<32; y1=p1->y; z1=z2=p1->z<<32;
z2+=dz2*i; if (y1+dy2<min) {
} i=min-(y1+dy2);
while (dy2++) {
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y,z1.i32[1],z2.i32[1]);
y--;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
if (dy2=p2->y-p4->y) {
dx2=(p4->x-p2->x)<<32/dy2;
dz2=(p4->z-p2->z)<<32/dy2;
if (y+dy2<y_min) {
i=y_min-(y+dy2);
if (i>-dy2) goto ft_done; if (i>-dy2) goto ft_done;
dy2+=i; dy2+=i;
} }
if (y>=y_max) { if (y1>=max) {
i=y-y_max+1; i=y1-max+1;
if (i>-dy2) goto ft_done; if (i>-dy2)
i=-dy2;
dy2+=i; dy2+=i;
y-=i; y1-=i;
x1+=dx1*i; x1+=dx1*i;
x2+=dx2*i; x2+=dx2*i;
z1+=dz1*i; z1+=dz1*i;
z2+=dz2*i; z2+=dz2*i;
} }
} while (dy2++) {
while (dy2++<=0) { res+=GrHLine(dc,x1.i32[1],x2.i32[1],y1,z1.i32[1],z2.i32[1]);
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y,z1.i32[1],z2.i32[1]); y1--;
y--; x1+=dx1;
x1+=dx1; x2+=dx2;
x2+=dx2; z1+=dz1;
z1+=dz1; z2+=dz2;
z2+=dz2; }
} if (dy2=p2->y-p4->y) {
} else if ((dy2=p2->y-p1->y)>0) { dx2=(p4->x-p2->x)<<32/dy2;
/* dz2=(p4->z-p2->z)<<32/dy2;
p1x<= {p2x,p4x} if (y1+dy2<min) {
i=min-(y1+dy2);
if (i>-dy2) goto ft_done;
dy2+=i;
}
if (y1>=max) {
i=y1-max+1;
if (i>-dy2) goto ft_done;
dy2+=i;
y1-=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i;
z2+=dz2*i;
}
}
while (dy2++<=0) {
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y1,z1.i32[1],z2.i32[1]);
y1--;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
} else if ((dy2=p2->y-p1->y)>0) {
dy1=p4->y-p1->y;
dx1=(p4->x-p1->x)<<32/dy1;
dz1=(p4->z-p1->z)<<32/dy1;
p1y< dx2=(p2->x-p1->x)<<32/dy2;
p2y<= dz2=(p2->z-p1->z)<<32/dy2;
p4y x1=x2=p1->x<<32; y1=p1->y; z1=z2=p1->z<<32;
if (y1+dy2>=max) {
1 i=y1+dy2-max+1;
6
1
6
1
2
4
1
2
4
1
2
4
*/
dy1=p4->y-p1->y;
dx1=(p4->x-p1->x)<<32/dy1;
dz1=(p4->z-p1->z)<<32/dy1;
dx2=(p2->x-p1->x)<<32/dy2;
dz2=(p2->z-p1->z)<<32/dy2;
x1=x2=p1->x<<32; y=p1->y; z1=z2=p1->z<<32;
if (y+dy2>=y_max) {
i=y+dy2-y_max+1;
if (i>dy2) goto ft_done;
dy2-=i;
}
if (y<y_min) {
i=y_min-y;
if (i>dy2)
i=dy2;
dy2-=i;
y+=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dy2--) {
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y,z1.i32[1],z2.i32[1]);
y++;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
if (dy2=p4->y-p2->y) {
dx2=(p4->x-p2->x)<<32/dy2;
dz2=(p4->z-p2->z)<<32/dy2;
if (y+dy2>=y_max) {
i=y+dy2-y_max+1;
if (i>dy2) goto ft_done; if (i>dy2) goto ft_done;
dy2-=i; dy2-=i;
} }
if (y<y_min) { if (y1<min) {
i=y_min-y; i=min-y1;
if (i>dy2) goto ft_done; if (i>dy2)
i=dy2;
dy2-=i; dy2-=i;
y+=i; y1+=i;
x1+=dx1*i; x1+=dx1*i;
x2+=dx2*i; x2+=dx2*i;
z1+=dz1*i; z1+=dz1*i;
z2+=dz2*i; z2+=dz2*i;
} }
} while (dy2--) {
while (dy2-->=0) { res+=GrHLine(dc,x1.i32[1],x2.i32[1],y1,z1.i32[1],z2.i32[1]);
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y,z1.i32[1],z2.i32[1]); y1++;
y++; x1+=dx1;
x1+=dx1; x2+=dx2;
x2+=dx2; z1+=dz1;
z1+=dz1; z2+=dz2;
z2+=dz2; }
if (dy2=p4->y-p2->y) {
dx2=(p4->x-p2->x)<<32/dy2;
dz2=(p4->z-p2->z)<<32/dy2;
if (y1+dy2>=max) {
i=y1+dy2-max+1;
if (i>dy2) goto ft_done;
dy2-=i;
}
if (y1<min) {
i=min-y1;
if (i>dy2) goto ft_done;
dy2-=i;
y1+=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i;
z2+=dz2*i;
}
}
while (dy2-->=0) {
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y1,z1.i32[1],z2.i32[1]);
y1++;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
} else {
if (dy1=p2->y-p1->y) {
dx1=(p2->x-p1->x)<<32/dy1;
dz1=(p2->z-p1->z)<<32/dy1;
if (dy2=p2->y-p4->y) {
dx2=(p2->x-p4->x)<<32/dy2;
dz2=(p2->z-p4->z)<<32/dy2;
} else {
dx2=0;
dz2=0;
}
x1=x2=p2->x<<32; y1=p2->y; z1=z2=p2->z<<32;
if (y1<min) {
i=min-y1;
if (i>-dy1)
i=-dy1;
dy1+=i;
y1+=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dy1++<=0) {
if (y1<max)
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y1,z1.i32[1],z2.i32[1]);
y1++;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
}
if (dy1=p4->y-p1->y) {
dx1=(p1->x-p4->x)<<32/dy1;
dz1=(p1->z-p4->z)<<32/dy1;
if (dy2=p4->y-p2->y) {
dx2=(p2->x-p4->x)<<32/dy2;
dz2=(p2->z-p4->z)<<32/dy2;
} else {
dx2=0;
dz2=0;
}
x1=x2=p4->x<<32; y1=p4->y; z1=z2=p4->z<<32;
if (y1-dy1<min) {
i=min-(y1-dy1);
if (i>dy1) goto ft_done;
dy1-=i;
}
if (y1>=max) {
i=y1-max+1;
if (i>dy1) goto ft_done;
dy1-=i;
y1-=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dy1-->=0) {
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y1,z1.i32[1],z2.i32[1]);
y1--;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
}
} }
} else { } else {
/* //p1 is min y
p1x<= {p2x,p4x} if (p4->y<p2->y)
SwapI64(&p4,&p2);
if (p2->y<p1->y)
SwapI64(&p2,&p1);
p2y<= //p2x<=p4x
p1y<= if (p4->x<p2->x)
p4y SwapI64(&p4,&p2);
7 min=0;
max=dc->width;
16 if (dc->flags & DCF_SCREEN_BITMAP) {
win_task=dc->win_task;
124 min-=win_task->scroll_x+win_task->pix_left;
max-=win_task->scroll_x+win_task->pix_left;
3 if (max>win_task->pix_right-(win_task->scroll_x+win_task->pix_left))
4 max=win_task->pix_right-(win_task->scroll_x+win_task->pix_left);
2
5
3
4
2
1
4
2
1
4
2
1
4
2
1
4
*/
if (dy1=p2->y-p1->y) {
dx1=(p2->x-p1->x)<<32/dy1;
dz1=(p2->z-p1->z)<<32/dy1;
if (dy2=p2->y-p4->y) {
dx2=(p2->x-p4->x)<<32/dy2;
dz2=(p2->z-p4->z)<<32/dy2;
} else {
dx2=0;
dz2=0;
}
x1=x2=p2->x<<32; y=p2->y; z1=z2=p2->z<<32;
if (y<y_min) {
i=y_min-y;
if (i>-dy1)
i=-dy1;
dy1+=i;
y+=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dy1++<=0) {
if (y<y_max)
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y,z1.i32[1],z2.i32[1]);
y++;
x1+=dx1;
x2+=dx2;
z1+=dz1;
z2+=dz2;
}
} }
if (dy1=p4->y-p1->y) {
dx1=(p1->x-p4->x)<<32/dy1; if ((dx2=p4->x-p1->x)<0) {
dz1=(p1->z-p4->z)<<32/dy1; dx1=p2->x-p1->x;
if (dy2=p4->y-p2->y) { dy1=(p1->y-p2->y)<<32/dx1;
dx2=(p2->x-p4->x)<<32/dy2; dz1=(p1->z-p2->z)<<32/dx1;
dz2=(p2->z-p4->z)<<32/dy2;
} else { dy2=(p1->y-p4->y)<<32/dx2;
dx2=0; dz2=(p1->z-p4->z)<<32/dx2;
dz2=0; y1=y2=p1->y<<32; x1=p1->x; z1=z2=p1->z<<32;
if (x1+dx2<min) {
i=min-(x1+dx2);
if (i>-dx2) goto ft_done;
dx2+=i;
} }
x1=x2=p4->x<<32; y=p4->y; z1=z2=p4->z<<32; if (x1>=max) {
if (y-dy1<y_min) { i=x1-max+1;
i=y_min-(y-dy1); if (i>-dx2)
if (i>dy1) goto ft_done; i=-dx2;
dy1-=i; dx2+=i;
} x1-=i;
if (y>=y_max) { y1+=dy1*i;
i=y-y_max+1; y2+=dy2*i;
if (i>dy1) goto ft_done;
dy1-=i;
y-=i;
x1+=dx1*i;
x2+=dx2*i;
z1+=dz1*i; z1+=dz1*i;
z2+=dz2*i; z2+=dz2*i;
} }
while (dy1-->=0) { while (dx2++) {
res+=GrHLine(dc,x1.i32[1],x2.i32[1],y,z1.i32[1],z2.i32[1]); res+=GrVLine(dc,x1,y1.i32[1],y2.i32[1],z1.i32[1],z2.i32[1]);
y--; x1--;
x1+=dx1; y1+=dy1;
x2+=dx2; y2+=dy2;
z1+=dz1; z1+=dz1;
z2+=dz2; z2+=dz2;
} }
if (dx2=p2->x-p4->x) {
dy2=(p4->y-p2->y)<<32/dx2;
dz2=(p4->z-p2->z)<<32/dx2;
if (x1+dx2<min) {
i=min-(x1+dx2);
if (i>-dx2) goto ft_done;
dx2+=i;
}
if (x1>=max) {
i=x1-max+1;
if (i>-dx2) goto ft_done;
dx2+=i;
x1-=i;
y1+=dy1*i;
y2+=dy2*i;
z1+=dz1*i;
z2+=dz2*i;
}
}
while (dx2++<=0) {
res+=GrVLine(dc,x1,y1.i32[1],y2.i32[1],z1.i32[1],z2.i32[1]);
x1--;
y1+=dy1;
y2+=dy2;
z1+=dz1;
z2+=dz2;
}
} else if ((dx2=p2->x-p1->x)>0) {
dx1=p4->x-p1->x;
dy1=(p4->y-p1->y)<<32/dx1;
dz1=(p4->z-p1->z)<<32/dx1;
dy2=(p2->y-p1->y)<<32/dx2;
dz2=(p2->z-p1->z)<<32/dx2;
y1=y2=p1->y<<32; x1=p1->x; z1=z2=p1->z<<32;
if (x1+dx2>=max) {
i=x1+dx2-max+1;
if (i>dx2) goto ft_done;
dx2-=i;
}
if (x1<min) {
i=min-x1;
if (i>dx2)
i=dx2;
dx2-=i;
x1+=i;
y1+=dy1*i;
y2+=dy2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dx2--) {
res+=GrVLine(dc,x1,y1.i32[1],y2.i32[1],z1.i32[1],z2.i32[1]);
x1++;
y1+=dy1;
y2+=dy2;
z1+=dz1;
z2+=dz2;
}
if (dx2=p4->x-p2->x) {
dy2=(p4->y-p2->y)<<32/dx2;
dz2=(p4->z-p2->z)<<32/dx2;
if (x1+dx2>=max) {
i=x1+dx2-max+1;
if (i>dx2) goto ft_done;
dx2-=i;
}
if (x1<min) {
i=min-x1;
if (i>dx2) goto ft_done;
dx2-=i;
x1+=i;
y1+=dy1*i;
y2+=dy2*i;
z1+=dz1*i;
z2+=dz2*i;
}
}
while (dx2-->=0) {
res+=GrVLine(dc,x1,y1.i32[1],y2.i32[1],z1.i32[1],z2.i32[1]);
x1++;
y1+=dy1;
y2+=dy2;
z1+=dz1;
z2+=dz2;
}
} else {
if (dx1=p2->x-p1->x) {
dy1=(p2->y-p1->y)<<32/dx1;
dz1=(p2->z-p1->z)<<32/dx1;
if (dx2=p2->x-p4->x) {
dy2=(p2->y-p4->y)<<32/dx2;
dz2=(p2->z-p4->z)<<32/dx2;
} else {
dy2=0;
dz2=0;
}
y1=y2=p2->y<<32; x1=p2->x; z1=z2=p2->z<<32;
if (x1<min) {
i=min-x1;
if (i>-dx1)
i=-dx1;
dx1+=i;
x1+=i;
y1+=dy1*i;
y2+=dy2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dx1++<=0) {
if (x1<max)
res+=GrVLine(dc,x1,y1.i32[1],y2.i32[1],z1.i32[1],z2.i32[1]);
x1++;
y1+=dy1;
y2+=dy2;
z1+=dz1;
z2+=dz2;
}
}
if (dx1=p4->x-p1->x) {
dy1=(p1->y-p4->y)<<32/dx1;
dz1=(p1->z-p4->z)<<32/dx1;
if (dx2=p4->x-p2->x) {
dy2=(p2->y-p4->y)<<32/dx2;
dz2=(p2->z-p4->z)<<32/dx2;
} else {
dy2=0;
dz2=0;
}
y1=y2=p4->y<<32; x1=p4->x; z1=z2=p4->z<<32;
if (x1-dx1<min) {
i=min-(x1-dx1);
if (i>dx1) goto ft_done;
dx1-=i;
}
if (x1>=max) {
i=x1-max+1;
if (i>dx1) goto ft_done;
dx1-=i;
x1-=i;
y1+=dy1*i;
y2+=dy2*i;
z1+=dz1*i;
z2+=dz2*i;
}
while (dx1-->=0) {
res+=GrVLine(dc,x1,y1.i32[1],y2.i32[1],z1.i32[1],z2.i32[1]);
x1--;
y1+=dy1;
y2+=dy2;
z1+=dz1;
z2+=dz2;
}
}
} }
} }
ft_done: ft_done:
-1
View File
@@ -1,4 +1,3 @@
#define DVD_BOOT_LOADER_SIZE DVD_BLK_SIZE*1 //Max DVD_BLK_SIZE*4, I think
#define BOOT_HIGH_LOC_DVD ((BOOT_RAM_LIMIT-\ #define BOOT_HIGH_LOC_DVD ((BOOT_RAM_LIMIT-\
(BOOT_STK_SIZE+DVD_BOOT_LOADER_SIZE))>>4) (BOOT_STK_SIZE+DVD_BOOT_LOADER_SIZE))>>4)
+33
View File
@@ -0,0 +1,33 @@
//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ or $LK,"Upgrading Documentation",A="FI:::/Doc/Upgrade.TXT"$.
//Study my account examples: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$
#include "BootDVD"
#include "DskISORedSea"
#include "DskISO9660"
#help_index "Install"
#define KERNEL_BIN_C "Kernel.BIN.C"
#define BOOT_DIR "/0000Boot"
#define BOOT_DIR_KERNEL_BIN_C BOOT_DIR "/0000" KERNEL_BIN_C
U0 MakeAll()
{
if (Cmp("/Compiler/Compiler","Compiler",,':'))
throw;
if (Cmp("/Kernel/Kernel","Kernel",,':'))
throw;
}
public U0 BootDVDIns(U8 drv_let=0)
{//See $LK,"::/Misc/DoDistro.CPP"$.
try {
if (!Drv(drv_let))
throw;
MakeAll;
Move("/Kernel/Kernel.BIN.Z",BOOT_DIR_KERNEL_BIN_C);
} catch {
PutExcept;
Beep;
}
}
+2 -2
View File
@@ -48,12 +48,12 @@ BHD_GET_IP:
BHD_BIOS_DRV_NUM: DU8 0; BHD_BIOS_DRV_NUM: DU8 0;
//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). //Gets patched by $LK,"BootHDIns",A="MN:BootHDIns"$().
BHD_BLK_CNT:: DU16 0; BHD_BLK_CNT:: DU16 0;
BHD_DAP: DU8 16,0,1,0; //One blk at a time BHD_DAP: DU8 16,0,1,0; //One blk at a time
BHD_DAP_BUF: DU16 0,0; BHD_DAP_BUF: DU16 0,0;
//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). //Gets patched by $LK,"BootHDIns",A="MN:BootHDIns"$().
BHD_DAP_BLK:: //64-bit BHD_DAP_BLK:: //64-bit
BHD_DAP_BLK_LO: DU32 0; BHD_DAP_BLK_LO: DU32 0;
BHD_DAP_BLK_HI: DU32 0; BHD_DAP_BLK_HI: DU32 0;
+60
View File
@@ -0,0 +1,60 @@
//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ or $LK,"Upgrading Documentation",A="FI:::/Doc/Upgrade.TXT"$.
//Study my account examples: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$
#include "BootHD"
#help_index "Install"
#define KERNEL_BIN_C "Kernel.BIN.C"
U0 MakeAll()
{
if (Cmp("/Compiler/Compiler","Compiler",,':'))
throw;
if (Cmp("/Kernel/Kernel","Kernel",,':'))
throw;
}
public U0 BootHDIns(U8 drv_let=0)
{//$LK,"MakeAll",A="MN:MakeAll"$ and install new boot-loader.
CDrv *dv;
CFAT32Boot br;
CDirEntry de;
I64 i;
try {
if (!Drv(drv_let))
throw;
dv=Fs->cur_dv;
MakeAll;
switch (Let2BlkDevType(dv->drv_let)) {
case BDT_RAM:
case BDT_ATA:
Move("/Kernel/Kernel.BIN.Z","/" KERNEL_BIN_C);
if (!FileFind("/" KERNEL_BIN_C,&de,FUF_JUST_FILES))
"No Kernel.BIN.C\n";
else {
Free(de.full_name);
"Modifying partition boot record.\n";
RBlks(dv,&br,dv->drv_offset,1);
br.jump_and_nop[0]=OC_JMP_REL8;
br.jump_and_nop[1]=offset(CFAT32Boot.code)-2;
#assert offset(CFAT32Boot.code)>=offset(CRedSeaBoot.code)
br.jump_and_nop[2]=OC_NOP;
*BHD_BLK_CNT(U16 *)=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS;
*BHD_DAP_BLK(I64 *)=Cluster2Blk(dv,de.cluster);
for (i=0;i<BHD_END-BHD_CODE;i++)
br.code[i]=BHD_CODE(U8 *)[i];
#assert sizeof(CFAT32Boot.code)>=BHD_END-BHD_CODE
for (;i<sizeof(CFAT32Boot.code);i++)
br.code[i]=0;
WBlks(dv,&br,dv->drv_offset,1);
}
break;
default:
throw;
}
} catch {
PutExcept;
Beep;
}
}
+2 -2
View File
@@ -61,12 +61,12 @@ BMHD_GET_IP:
BMHD_BIOS_DRV_NUM: DU8 0; BMHD_BIOS_DRV_NUM: DU8 0;
BMHD_OLD_CS_IP: DU16 0,0; BMHD_OLD_CS_IP: DU16 0,0;
//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). //Gets patched by $LK,"BootHDIns",A="MN:BootHDIns"$().
BMHD_BLK_CNT:: DU16 0; BMHD_BLK_CNT:: DU16 0;
BMHD_DAP: DU8 16,0,1,0; //One blk at a time BMHD_DAP: DU8 16,0,1,0; //One blk at a time
BMHD_DAP_BUF: DU16 0,0; BMHD_DAP_BUF: DU16 0,0;
//Gets patched by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). //Gets patched by $LK,"BootHDIns",A="MN:BootHDIns"$().
BMHD_DAP_BLK:: //64-bit BMHD_DAP_BLK:: //64-bit
BMHD_DAP_BLK_LO: DU32 0; BMHD_DAP_BLK_LO: DU32 0;
BMHD_DAP_BLK_HI: DU32 0; BMHD_DAP_BLK_HI: DU32 0;
@@ -1,98 +1,18 @@
//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ or $LK,"Upgrading Documentation",A="FI:::/Doc/Upgrade.TXT"$. //See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$ or $LK,"Upgrading Documentation",A="FI:::/Doc/Upgrade.TXT"$.
//Study my account examples: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$
#include "BootMHD"
#include "BootMHD2"
#help_index "Install" #help_index "Install"
#define KERNEL_BIN_C "Kernel.BIN.C"
#define BOOT_DIR "/0000Boot" #define BOOT_DIR "/0000Boot"
#define BOOT_DIR_KERNEL_BIN_C BOOT_DIR "/0000" KERNEL_BIN_C
//Stage 2 of master boot loader //Stage 2 of master boot loader
#define BOOT_DIR_BOOTMHD2_BIN_C BOOT_DIR "/BootMHD2.BIN.C" #define BOOT_DIR_BOOTMHD2_BIN_C BOOT_DIR "/BootMHD2.BIN.C"
//Old master boot record //Old master boot record
#define BOOT_DIR_OLDMBR_BIN_C BOOT_DIR "/OldMBR.BIN.C" #define BOOT_DIR_OLDMBR_BIN_C BOOT_DIR "/OldMBR.BIN.C"
public U0 MakeAll() public U0 BootMHDOldRead(U8 src_drv,U8 dst_drv)
{//Use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$. Loader must be patched.
//These 2 modules (and bootloaders at top) are the only AOT
//compiled code in TempleOS. Everything else is JIT.
//You are doing it wrong if you make AOT compiled code.
if (Cmp("/Compiler/Compiler","Compiler",,':'))
throw;
if (Cmp("/Kernel/Kernel","Kernel",,':'))
throw;
}
public Bool MakeOSDrvBootInstall(U8 src_drv=0,U8 dst_drv=0)
{// Does $LK,"MakeAll",A="MN:MakeAll"$and installs new boot-loader.
//Normally, you just supply a src_drv. It will compile
//the code on that drive and update the boot sect.
//If you are making a bootable CD/DVD, you supply a dst_drv.
//See $LK,"::/Misc/DoDistro.CPP"$
//See $LK,"Install Documentation",A="FI:::/Doc/Install.TXT"$
//Study my account examples my technique: $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$
CBlkDev *bd;
CDrv *dv;
CFAT32Boot br;
CDirEntry de;
Bool res=FALSE;
I64 i,type;
try {
if (!src_drv) src_drv=Drv2Let(Fs->cur_dv);
src_drv=ToUpper(src_drv);
if (!dst_drv) dst_drv=src_drv;
dst_drv=ToUpper(dst_drv);
if (!Drv(src_drv))
throw;
MakeAll;
if ((dv=Let2Drv(dst_drv,FALSE)) && (bd=dv->bd))
type=bd->type;
else {
type=BDT_ATAPI;
PrintWarn("Defaulting to CD/DVD dst.\n");
}
switch (type) {
case BDT_ATAPI:
case BDT_FILE:
Move("/Kernel/Kernel.BIN.Z",BOOT_DIR_KERNEL_BIN_C);
res=TRUE;
break;
case BDT_RAM:
case BDT_ATA:
Move("/Kernel/Kernel.BIN.Z","/" KERNEL_BIN_C);
if (!FileFind("/" KERNEL_BIN_C,&de,FUF_JUST_FILES))
"No Kernel.BIN.C\n";
else {
Free(de.full_name);
"Modifying partition boot record.\n";
RBlks(dv,&br,dv->drv_offset,1);
br.jump_and_nop[0]=OC_JMP_REL8;
br.jump_and_nop[1]=offset(CFAT32Boot.code)-2;
#assert offset(CFAT32Boot.code)>=offset(CRedSeaBoot.code)
br.jump_and_nop[2]=OC_NOP;
*BHD_BLK_CNT(U16 *)=(de.size+BLK_SIZE-1)>>BLK_SIZE_BITS;
*BHD_DAP_BLK(I64 *)=Cluster2Blk(dv,de.cluster);
for (i=0;i<BHD_END-BHD_CODE;i++)
br.code[i]=BHD_CODE(U8 *)[i];
#assert sizeof(CFAT32Boot.code)>=BHD_END-BHD_CODE
for (;i<sizeof(CFAT32Boot.code);i++)
br.code[i]=0;
WBlks(dv,&br,dv->drv_offset,1);
res=TRUE;
}
break;
}
} catch {
PutExcept;
Beep;
}
return res;
}
public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv)
{//Reads MBR from disk drive containing src partition. {//Reads MBR from disk drive containing src partition.
//Writes a single blk file to dst BOOT_DIR. //Writes a single blk file to dst BOOT_DIR.
CBlkDev *bd=Let2BlkDev(src_drv); CBlkDev *bd=Let2BlkDev(src_drv);
@@ -114,7 +34,7 @@ public U0 MasterBootOldRead(U8 src_drv,U8 dst_drv)
} }
} }
public U0 MasterBootOldWrite(U8 src_drv,U8 dst_drv) public U0 BootMHDOldWrite(U8 src_drv,U8 dst_drv)
{//Reads OldMBR from src drive BOOT_DIR. {//Reads OldMBR from src drive BOOT_DIR.
//writes it to the MBR of the drive with dst partition. //writes it to the MBR of the drive with dst partition.
CBlkDev *bd=Let2BlkDev(dst_drv); CBlkDev *bd=Let2BlkDev(dst_drv);
@@ -129,7 +49,7 @@ public U0 MasterBootOldWrite(U8 src_drv,U8 dst_drv)
Free(mbr); Free(mbr);
} }
public U0 MasterBootZero(U8 dst_drv) public U0 BootMHDZero(U8 dst_drv)
{//Set MBR of disk with dst partition to zero. {//Set MBR of disk with dst partition to zero.
//This is dangerous!! //This is dangerous!!
@@ -146,7 +66,7 @@ public U0 MasterBootZero(U8 dst_drv)
BlkDevUnlock(bd); BlkDevUnlock(bd);
} }
public Bool MasterBootInstall(U8 drv_let,U8 *drv_lst=NULL) public Bool BootMHDIns(U8 drv_let,U8 *drv_lst=NULL)
{//Create new MBR on the disk that has drv_let as a partition. {//Create new MBR on the disk that has drv_let as a partition.
//Puts stage 2 in BOOT_DIR of drv_let. //Puts stage 2 in BOOT_DIR of drv_let.
CBlkDev *bd,*bd1; CBlkDev *bd,*bd1;
@@ -167,7 +87,6 @@ public Bool MasterBootInstall(U8 drv_let,U8 *drv_lst=NULL)
buf[j++]=i; buf[j++]=i;
buf[j++]=0; buf[j++]=0;
} }
Drv(drv_let); Drv(drv_let);
dv=Fs->cur_dv; dv=Fs->cur_dv;
if (dv->fs_type!=FSt_REDSEA && dv->fs_type!=FSt_FAT32) if (dv->fs_type!=FSt_REDSEA && dv->fs_type!=FSt_FAT32)
@@ -175,7 +94,7 @@ public Bool MasterBootInstall(U8 drv_let,U8 *drv_lst=NULL)
else { else {
bd=dv->bd; bd=dv->bd;
if (!FileFind(BOOT_DIR_OLDMBR_BIN_C,,FUF_JUST_FILES)) if (!FileFind(BOOT_DIR_OLDMBR_BIN_C,,FUF_JUST_FILES))
MasterBootOldRead(drv_let,drv_let); BootMHDOldRead(drv_let,drv_let);
_q=BMHD2_BLK_ARRAY; _q=BMHD2_BLK_ARRAY;
MemSet(_q,0,sizeof(I64)*8); MemSet(_q,0,sizeof(I64)*8);
@@ -30,7 +30,7 @@ _extern _HI_CALL I64 HiCall(U8 *machine_code);
_extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt); _extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt);
#help_index "Boot" #help_index "Boot"
public U0 RAMReboot(U8 *filename) public U0 BootRAM(U8 *filename)
{//Softboot Kernel Bin file. No hardware reset. {//Softboot Kernel Bin file. No hardware reset.
I64 size; I64 size;
CKernel *hi_image,*lo_image=sys_boot_base-sizeof(CBinFile), CKernel *hi_image,*lo_image=sys_boot_base-sizeof(CBinFile),
+30 -37
View File
@@ -67,40 +67,36 @@ U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0)
iso_term->type=ISO1T_TERMINATOR; iso_term->type=ISO1T_TERMINATOR;
StrCpy(iso_term->id,"CD001"); StrCpy(iso_term->id,"CD001");
iso_term->version=1; iso_term->version=1;
if (stage2_blk) {
d=iso_boot(U8 *)+0x47;
*d=20<<2>>2;
FWBlks(out_file,iso_boot,17<<2,4);
FWBlks(out_file,iso_sup,18<<2,4); d=iso_boot(U8 *)+0x47;
FWBlks(out_file,iso_term,19<<2,4); *d=20<<2>>2;
FWBlks(out_file,iso_boot,17<<2,4);
et->w[0]=1; FWBlks(out_file,iso_sup,18<<2,4);
StrCpy(&et->w[2],"TempleOS"); FWBlks(out_file,iso_term,19<<2,4);
et->w[15]=0xAA55;
j=0;
for (i=0;i<16;i++) //Checksum
j+=et->w[i];
et->w[14]=-j;
et->bootable=0x88;
et->media_type=0;//0=no emu 2=1.44meg 4=hard drive
et->sect_cnt=4; //5 seems like the limit, 4 is safer
et->load_rba=20<<2>>2+1;
FWBlks(out_file,et,20<<2,4);
MemCpy(stage1_buf,BDVD_START,BDVD_END-BDVD_START); et->w[0]=1;
*(BDVD_BLK_LO -BDVD_START+stage1_buf)(U32 *)=stage2_blk>>2; StrCpy(&et->w[2],"TempleOS");
*(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)= et->w[15]=0xAA55;
(stage2_size+DVD_BLK_SIZE-1)>>(BLK_SIZE_BITS+2); j=0;
*(BDVD_SHIFT_BLKS -BDVD_START+stage1_buf)(U16 *)=stage2_blk&3; for (i=0;i<16;i++) //Checksum
if (stage2_blk&3) j+=et->w[i];
*(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)+=1; et->w[14]=-j;
FWBlks(out_file,stage1_buf, et->bootable=0x88;
20<<2+1<<2,DVD_BOOT_LOADER_SIZE/BLK_SIZE); et->media_type=0;//0=no emu 2=1.44meg 4=hard drive
} else { et->sect_cnt=4; //5 seems like the limit, 4 is safer
FWBlks(out_file,iso_sup,17<<2,4); et->load_rba=20<<2>>2+1;
FWBlks(out_file,iso_term,18<<2,4); FWBlks(out_file,et,20<<2,4);
}
MemCpy(stage1_buf,BDVD_START,BDVD_END-BDVD_START);
*(BDVD_BLK_LO -BDVD_START+stage1_buf)(U32 *)=stage2_blk>>2;
*(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)=
(stage2_size+DVD_BLK_SIZE-1)>>(BLK_SIZE_BITS+2);
*(BDVD_SHIFT_BLKS -BDVD_START+stage1_buf)(U16 *)=stage2_blk&3;
if (stage2_blk&3)
*(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)+=1;
FWBlks(out_file,stage1_buf,
20<<2+1<<2,DVD_BOOT_LOADER_SIZE/BLK_SIZE);
FClose(out_file); FClose(out_file);
} }
Free(zero_buf); Free(zero_buf);
@@ -135,8 +131,8 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir,
I64 i,res,root_cnt,root_dir_blks,bitmap_blks,bitmap_blks1; I64 i,res,root_cnt,root_dir_blks,bitmap_blks,bitmap_blks1;
CDirEntry *tempde,de; CDirEntry *tempde,de;
U8 buf[STR_LEN],*iso_filename,*src_dir,*stage2_filename; U8 buf[STR_LEN],*iso_filename,*src_dir,*stage2_filename;
CDrv *dv=DrvNextFree('M'); //First $LK,"BDT_FILE",A="MN:BDT_FILE"$ CDrv *dv=DrvMakeFreeSlot(DrvNextFreeLet('Q')); //First $LK,"BDT_FILE_WRITE",A="MN:BDT_FILE_WRITE"$
CBlkDev *bd=BlkDevNextFree(dv->drv_let,BDT_FILE); CBlkDev *bd=BlkDevNextFreeSlot(dv->drv_let,BDT_FILE_WRITE);
if (!_iso_filename) if (!_iso_filename)
_iso_filename=blkdev.dft_iso_filename; _iso_filename=blkdev.dft_iso_filename;
@@ -155,10 +151,7 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir,
root_cnt=LinkedLstCnt(tempde)+3; root_cnt=LinkedLstCnt(tempde)+3;
root_dir_blks=CeilU64(root_cnt<<6,BLK_SIZE)>>BLK_SIZE_BITS; root_dir_blks=CeilU64(root_cnt<<6,BLK_SIZE)>>BLK_SIZE_BITS;
if (res=RedSeaISOPass1(tempde)>>BLK_SIZE_BITS) { if (res=RedSeaISOPass1(tempde)>>BLK_SIZE_BITS) {
bd->drv_offset=19<<2; bd->drv_offset=19<<2+(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;
if (stage2_filename) //preboot and bootloader
bd->drv_offset+=(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;
bitmap_blks=1; bitmap_blks=1;
do { do {
bitmap_blks1=bitmap_blks; bitmap_blks1=bitmap_blks;
+4 -8
View File
@@ -1,10 +1,6 @@
Cd(__DIR__);; Cd(__DIR__);;
#include "BootDVD" #include "BootDVDIns"
#include "BootHD" #include "BootHDIns"
#include "BootMHD" #include "BootMHDIns"
#include "BootMHD2" #include "BootRAM"
#include "DskISORedSea"
#include "DskISO9660"
#include "BootIns"
#include "Reboot"
Cd("..");; Cd("..");;
+21 -21
View File
@@ -63,15 +63,15 @@ I64 TaskQueSize(CTask *task)
I64 BlkDevsSize() I64 BlkDevsSize()
{ {
I64 i,res=MSize2(blkdev.blkdevs); I64 i,j,res=MSize2(blkdev.blkdevs);
CBlkDev *bd; CBlkDev *bd;
for (i=0;i<NUM_BLKDEVS;i++) { for (i=0;i<NUM_BLKDEVS;i++) {
bd=&blkdev.blkdevs[i]; bd=&blkdev.blkdevs[i];
if (bd->bd_signature==BD_SIGNATURE_VAL) { if (bd->bd_signature==BD_SIGNATURE_VAL) {
j=(bd->max_blk+1)<<BLK_SIZE_BITS;
if (bd->type==BDT_RAM) if (bd->type==BDT_RAM)
"RAMDsk %C\t:%010X Unused:%010X\n", "RAMDsk %C\t:%010X/%010X\n",
bd->first_drv_let,(bd->max_blk+1)<<BLK_SIZE_BITS, bd->first_drv_let,j-UnusedDrvSpace(bd->first_drv_let),j;
UnusedDrvSpace(bd->first_drv_let);
res+=MSize2(bd->dev_id_record); res+=MSize2(bd->dev_id_record);
} }
} }
@@ -101,18 +101,19 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE)
if (task==Fs) if (task==Fs)
task->rsp=GetRSP; task->rsp=GetRSP;
st=MStrUtil(task->task_title,SUF_REM_CTRL_CHARS|SUF_SAFE_DOLLAR); st=MStrUtil(task->task_title,SUF_REM_CTRL_CHARS|SUF_SAFE_DOLLAR);
"$$GREEN$$Task:%010X$$CYAN$$ %-30ts$$FG$$\n$$ID,2$$",task,st; "$$BLACK$$%-25ts %010X$$FG$$\n$$ID,2$$",st,task;
Free(st); Free(st);
"$$PURPLE$$Alloced:%010X Used:%010X$$FG$$\n", "Heap\t:%010X/%010X\n",TaskMemUsed(task,override_validate),
TaskMemAlloced(task,override_validate), TaskMemAlloced(task,override_validate);
TaskMemUsed(task,override_validate);
"HashTable\t:%010X\n",HashTableSize2(task->hash_table);
i=UnusedStk(task); i=UnusedStk(task);
j=TaskStkSize(task);
if (0<=i<=task->stk->stk_size) if (0<=i<=task->stk->stk_size)
"Stk Size\t:%010X Unused:%010X\n",TaskStkSize(task),i; "Stk\t\t:%010X/%010X\n",j-i,j;
else else
"Stk Size\t:%010X $$RED$$$$BK,1$$Overflow$$BK,0$$$$FG$$\n",TaskStkSize(task); "Stk\t\t:$$RED$$$$BK,1$$Overflow$$BK,0$$$$FG$$/%010X\n",j;
"HashTable\t:%010X\n",HashTableSize2(task->hash_table);
if (pdoc=DocPut(task)) if (pdoc=DocPut(task))
"PutDoc\t:%010X\n",DocSize(pdoc); "PutDoc\t:%010X\n",DocSize(pdoc);
@@ -121,8 +122,8 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE)
if (bdoc=DocBorder(task)) if (bdoc=DocBorder(task))
"BorderDoc\t:%010X\n",DocSize(bdoc); "BorderDoc\t:%010X\n",DocSize(bdoc);
cc=task->next_lex; cc=task->next_cc;
while (cc!=&task->next_lex) { while (cc!=&task->next_cc) {
"Lex\t\t:%010X\n",CmpCtrlSize(cc); "Lex\t\t:%010X\n",CmpCtrlSize(cc);
cc=cc->next; cc=cc->next;
} }
@@ -207,17 +208,17 @@ public U0 MemRep()
"$$ID,-2$$"; "$$ID,-2$$";
if (sys_data_bp) { if (sys_data_bp) {
"$$BLACK$$Code Heap:%010X Used:%010X$$FG$$\n", "$$BLACK$$Code Heap\t:%010X/%010X$$FG$$\n",
sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; sys_code_bp->used_u8s,sys_code_bp->alloced_u8s;
"$$BLACK$$Data Heap:%010X Used:%010X$$FG$$\n", "$$BLACK$$Data Heap\t:%010X/%010X$$FG$$\n",
sys_data_bp->alloced_u8s,sys_data_bp->used_u8s; sys_data_bp->used_u8s,sys_data_bp->alloced_u8s;
} else } else
"$$BLACK$$Code/Data Heap:%010X Used:%010X$$FG$$\n", "$$BLACK$$Code/Data Heap\t:%010X/%010X$$FG$$\n",
sys_code_bp->alloced_u8s,sys_code_bp->used_u8s; sys_code_bp->used_u8s,sys_code_bp->alloced_u8s;
for (i=0;i<mp_cnt;i++) { for (i=0;i<mp_cnt;i++) {
c=&cpu_structs[i]; c=&cpu_structs[i];
"$$GREEN$$CPU%d$$FG$$\n$$ID,2$$",i; "$$PURPLE$$CPU%d$$FG$$\n$$ID,2$$",i;
task=c->seth_task; task=c->seth_task;
do { do {
if (!MemRepTask(task)) if (!MemRepTask(task))
@@ -227,5 +228,4 @@ public U0 MemRep()
MemRepTask(c->idle_task,TRUE); MemRepTask(c->idle_task,TRUE);
"$$ID,-2$$"; "$$ID,-2$$";
} }
"$$ID,-2$$\n";
} }
+4 -4
View File
@@ -4,9 +4,9 @@ U0 TaskRepTask(CTask *task,I64 indent)
CTask *task1; CTask *task1;
U8 *st,*desc=MStrUtil(task->task_title,SUF_SAFE_DOLLAR); U8 *st,*desc=MStrUtil(task->task_title,SUF_SAFE_DOLLAR);
st=MStrPrint("$$MA,T=\"%08X\",LM=\"Kill(0x%X);\n\",$$",task,task,task); st=MStrPrint("$$MA,T=\"%08X\",LM=\"Kill(0x%X);\n\",$$",task,task,task);
"%h*c%s $$TX,\"%Q...\",SCX=16$$ Mem:%08X\n",indent,CH_SPACE, "%h*c%s $$TX,\"%Q...\",SCX=16$$\n",indent,CH_SPACE,
st,desc,TaskMemAlloced(task); st,desc;
"%h*cFlags:%04X:%04X:%08X\n",indent+2,CH_SPACE, "%h*c%08X %04X:%04X:%08X\n",indent+2,CH_SPACE,TaskMemAlloced(task),
task->task_flags,task->display_flags,task->win_inhibit; task->task_flags,task->display_flags,task->win_inhibit;
Free(st); Free(st);
Free(desc); Free(desc);
@@ -26,7 +26,7 @@ public U0 TaskRep()
CLI CLI
for (i=0;i<mp_cnt;i++) { for (i=0;i<mp_cnt;i++) {
c=&cpu_structs[i]; c=&cpu_structs[i];
"$$RED$$CPU:%d$$FG$$\n",i; "$$PURPLE$$CPU:%d$$FG$$\n",i;
TaskRepTask(c->seth_task,2); TaskRepTask(c->seth_task,2);
} }
POPFD POPFD
Binary file not shown.
+3 -3
View File
@@ -98,7 +98,7 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tempaot)
!(tempex->type & HTF_IMPORT) && !(tempex->type & HTF_IMPORT) &&
(tempf=HashFind(tempex->str,cc->htc.hash_table_lst,HTT_FUN)) && (tempf=HashFind(tempex->str,cc->htc.hash_table_lst,HTT_FUN)) &&
!Bt(&tempf->flags,Cf_EXTERN)) { !Bt(&tempf->flags,Cf_EXTERN)) {
tempex->val=tempf->executable_addr; tempex->val=tempf->exe_addr;
tempex->type&=~HTF_UNRESOLVED; tempex->type&=~HTF_UNRESOLVED;
label=tempauh->hash->str; label=tempauh->hash->str;
} else { } else {
@@ -157,7 +157,7 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tempaot)
tempeu=tempf->ext_lst; tempeu=tempf->ext_lst;
while (tempeu) { while (tempeu) {
tempeu8=tempeu->next; tempeu8=tempeu->next;
j=tempf->executable_addr-(tempeu->ip+4); j=tempf->exe_addr-(tempeu->ip+4);
AOTStoreCodeU8At(cc,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); AOTStoreCodeU8At(cc,tempeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]);
Free(tempeu); Free(tempeu);
tempeu=tempeu8; tempeu=tempeu8;
@@ -167,7 +167,7 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tempaot)
tempie=CAlloc(sizeof(CAOTImportExport)); tempie=CAlloc(sizeof(CAOTImportExport));
tempie->type=IET_REL32_EXPORT; tempie->type=IET_REL32_EXPORT;
if (tempex->type & HTT_FUN) if (tempex->type & HTT_FUN)
tempie->ip=tempf->executable_addr; tempie->ip=tempf->exe_addr;
else if (tempex->type & HTT_GLBL_VAR) else if (tempex->type & HTT_GLBL_VAR)
tempie->ip=tempex(CHashGlblVar *)->data_addr_ip; tempie->ip=tempex(CHashGlblVar *)->data_addr_ip;
else else
+22 -10
View File
@@ -161,7 +161,7 @@ CAOT *CmpBuf(U8 *buf,U8 *map_name=NULL,
CAOT *res=NULL; CAOT *res=NULL;
cc=CmpCtrlNew(buf,CCF_DONT_FREE_BUF); cc=CmpCtrlNew(buf,CCF_DONT_FREE_BUF);
cc->flags|=CCF_AOT_COMPILE; cc->flags|=CCF_AOT_COMPILE;
QueIns(cc,Fs->last_lex); QueIns(cc,Fs->last_cc);
res=CmpJoin(cc,CMPF_LEX_FIRST,map_name,mapfile_drv_let); res=CmpJoin(cc,CMPF_LEX_FIRST,map_name,mapfile_drv_let);
if (error_cnt) *error_cnt=cc->error_cnt; if (error_cnt) *error_cnt=cc->error_cnt;
if (warning_cnt) *warning_cnt=cc->warning_cnt; if (warning_cnt) *warning_cnt=cc->warning_cnt;
@@ -239,7 +239,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tempaot)
"Unresolved Reference:%s\n",str; "Unresolved Reference:%s\n",str;
else { else {
if (tempex->type & HTT_FUN) if (tempex->type & HTT_FUN)
i=tempex(CHashFun *)->executable_addr; i=tempex(CHashFun *)->exe_addr;
else if (tempex->type & HTT_GLBL_VAR) else if (tempex->type & HTT_GLBL_VAR)
i=tempex(CHashGlblVar *)->data_addr; i=tempex(CHashGlblVar *)->data_addr;
else else
@@ -577,15 +577,15 @@ I64 ExePutS(U8 *buf,U8 *filename=NULL,
if (!filename) if (!filename)
filename=blkdev.temp_filename; filename=blkdev.temp_filename;
cc=CmpCtrlNew(buf,ccf_flags|CCF_DONT_FREE_BUF,filename); cc=CmpCtrlNew(buf,ccf_flags|CCF_DONT_FREE_BUF,filename);
if (Fs->last_lex!=&Fs->next_lex) { if (Fs->last_cc!=&Fs->next_cc) {
cc->opts=Fs->last_lex->opts; cc->opts=Fs->last_cc->opts;
if (htc) { if (htc) {
cc->flags=cc->flags &~CCF_ASM_EXPRESSIONS | cc->flags=cc->flags &~CCF_ASM_EXPRESSIONS |
htc->old_flags&CCF_ASM_EXPRESSIONS; htc->old_flags&CCF_ASM_EXPRESSIONS;
MemCpy(&cc->htc,htc,sizeof(CLexHashTableContext)); MemCpy(&cc->htc,htc,sizeof(CLexHashTableContext));
} }
} }
QueIns(cc,Fs->last_lex); QueIns(cc,Fs->last_cc);
try { try {
Lex(cc); Lex(cc);
res=ExeCmdLine(cc); res=ExeCmdLine(cc);
@@ -622,6 +622,12 @@ I64 ExeFile(U8 *name,I64 ccf_flags=0)
return res; return res;
} }
I64 RunFile(U8 *name,I64 ccf_flags=0,...)
{//$LK,"ExeFile",A="MN:ExeFile"$() with args using $LK,"LastFun",A="MN:LastFun"$().
ExeFile(name,ccf_flags);
return LastFun(argc,argv);
}
I64 ExePutS2(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0) I64 ExePutS2(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0)
{//throws exceptions {//throws exceptions
I64 res; I64 res;
@@ -629,9 +635,9 @@ I64 ExePutS2(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0)
if (!filename) if (!filename)
filename=blkdev.temp_filename; filename=blkdev.temp_filename;
cc=CmpCtrlNew(buf,ccf_flags|CCF_DONT_FREE_BUF,filename); cc=CmpCtrlNew(buf,ccf_flags|CCF_DONT_FREE_BUF,filename);
if (Fs->last_lex!=&Fs->next_lex) if (Fs->last_cc!=&Fs->next_cc)
cc->opts=Fs->last_lex->opts; cc->opts=Fs->last_cc->opts;
QueIns(cc,Fs->last_lex); QueIns(cc,Fs->last_cc);
Lex(cc); Lex(cc);
res=ExeCmdLine(cc); res=ExeCmdLine(cc);
QueRem(cc); QueRem(cc);
@@ -658,13 +664,19 @@ I64 ExeFile2(U8 *name,I64 ccf_flags=0)
return res; return res;
} }
I64 RunFile2(U8 *name,I64 ccf_flags=0,...)
{//$LK,"ExeFile2",A="MN:ExeFile2"$() with args using $LK,"LastFun",A="MN:LastFun"$(). throws exceptions.
ExeFile2(name,ccf_flags);
return LastFun(argc,argv);
}
I64 StreamExePrint(U8 *fmt,...) I64 StreamExePrint(U8 *fmt,...)
{//Causes value from stream to be used in an #exe{} block. {//Causes value from stream to be used in an #exe{} block.
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
I64 res=0; I64 res=0;
CLexHashTableContext *htc; CLexHashTableContext *htc;
CCmpCtrl *cc=Fs->last_lex; CCmpCtrl *cc=Fs->last_cc;
if (cc==&Fs->next_lex) if (cc==&Fs->next_cc)
PrintErr("Not Compiling\n"); PrintErr("Not Compiling\n");
else { else {
if (!(cc->flags&CCF_EXE_BLK)) if (!(cc->flags&CCF_EXE_BLK))
+46 -7
View File
@@ -1,18 +1,57 @@
Bool Option(I64 num,Bool val) Bool Option(I64 num,Bool val)
{//Set compiler $LK,"Option",A="FI:::/Doc/Options.TXT"$ to val. {//Set compiler $LK,"Option",A="FI:::/Doc/Options.TXT"$ to val.
return BEqu(&Fs->last_lex->opts,num,val); return BEqu(&Fs->last_cc->opts,num,val);
} }
Bool GetOption(I64 num) Bool GetOption(I64 num)
{//Get state of compiler $LK,"option",A="MN:OPTf_ECHO"$. {//Get state of compiler $LK,"option",A="MN:OPTf_ECHO"$.
return Bt(&Fs->last_lex->opts,num); return Bt(&Fs->last_cc->opts,num);
} }
asm {
_LAST_FUN:: //See $LK,"_CALL_IND",A="MN:_CALL_IND"$
PUSH RBP
MOV RBP,RSP
PUSH RSI
PUSH RDI
XOR RAX,RAX
MOV RAX,FS:CTask.last_fun[RAX]
TEST RAX,RAX
JZ @@10
MOV RDX,U64 CHashFun.exe_addr[RAX]
MOV RCX,U64 SF_ARG1[RBP] //argc
MOV RSI,U64 SF_ARG2[RBP] //argv
SHL RCX,3
SUB RSP,RCX
MOV RDI,RSP
REP_MOVSB
TEST RDX,RDX
JZ @@05
CALL RDX
POP RDI
POP RSI
POP RBP
RET1 16
@@05: MOV RCX,U64 SF_ARG1[RBP] //argc
SHL RCX,3
ADD RSP,RCX
XOR RAX,RAX
@@10: POP RDI
POP RSI
POP RBP
RET1 16
}
_extern _LAST_FUN I64 LastFun(I64 argc,I64 *argv); //Execute last fun with args.
I64 PassTrace(I64 i=0b10001111101) I64 PassTrace(I64 i=0b10001111101)
{//Ctrls which optimizer passes are displayed. {//Ctrls which optimizer passes are displayed.
I64 old=Fs->last_lex->pass_trace; I64 old=Fs->last_cc->pass_trace;
if (i) Fs->last_lex->saved_pass_trace=i; if (i) Fs->last_cc->saved_pass_trace=i;
Fs->last_lex->pass_trace=i; Fs->last_cc->pass_trace=i;
return old; return old;
} }
@@ -29,7 +68,7 @@ Bool Echo(Bool val)
U0 StreamPrint(U8 *fmt,...) U0 StreamPrint(U8 *fmt,...)
{//Injects text into the compile stream. Used in #exe{} blocks. {//Injects text into the compile stream. Used in #exe{} blocks.
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st; U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st;
CCmpCtrl *cc=Fs->last_lex; CCmpCtrl *cc=Fs->last_cc;
CStreamBlk *tempe=cc->last_stream_blk; CStreamBlk *tempe=cc->last_stream_blk;
if (tempe!=&cc->next_stream_blk) { if (tempe!=&cc->next_stream_blk) {
st=MStrPrint("%s%s",tempe->body,buf); st=MStrPrint("%s%s",tempe->body,buf);
@@ -43,7 +82,7 @@ U0 StreamPrint(U8 *fmt,...)
U0 StreamDir() U0 StreamDir()
{ {
U8 *dirname; U8 *dirname;
if (dirname=DirFile(Fs->last_lex->lex_include_stk->full_name)) { if (dirname=DirFile(Fs->last_cc->lex_include_stk->full_name)) {
StreamPrint("\"%s\"",dirname); StreamPrint("\"%s\"",dirname);
Free(dirname); Free(dirname);
} }
Binary file not shown.
+214 -208
View File
@@ -8,7 +8,7 @@ $LK,"OptFixupBinaryOp1",A="FL:::/Compiler/OptLib.CPP.Z,96",BI=7$
$LK,"OptFixupBinaryOp2",A="FL:::/Compiler/OptLib.CPP.Z,182",BI=8$ $LK,"OptFixupBinaryOp2",A="FL:::/Compiler/OptLib.CPP.Z,182",BI=8$
$LK,"COCInit",A="FL:::/Compiler/PrsLib.CPP.Z,99",BI=9$ $LK,"COCInit",A="FL:::/Compiler/PrsLib.CPP.Z,99",BI=9$
$LK,"IsLexExpression2Bin",A="FL:::/Compiler/PrsExp.CPP.Z,1128",BI=10$ $LK,"IsLexExpression2Bin",A="FL:::/Compiler/PrsExp.CPP.Z,1128",BI=10$
$LK,"CSubSwitch",A="FL:::/Compiler/PrsStmt.CPP.Z,562"$ $LK,"CSubSwitch",A="FL:::/Compiler/PrsStmt.CPP.Z,566"$
$LK,"LexFilePop",A="FL:::/Compiler/Lex.CPP.Z,11",BI=11$ $LK,"LexFilePop",A="FL:::/Compiler/Lex.CPP.Z,11",BI=11$
$LK,"ExePutS",A="FL:::/Compiler/CMain.CPP.Z,571",BI=12$ $LK,"ExePutS",A="FL:::/Compiler/CMain.CPP.Z,571",BI=12$
$LK,"PrsStaticInit",A="FL:::/Compiler/PrsVar.CPP.Z,215",BI=13$ $LK,"PrsStaticInit",A="FL:::/Compiler/PrsVar.CPP.Z,215",BI=13$
@@ -26,10 +26,11 @@ $LK,"ICAndBranch",A="FL:::/Compiler/BackC.CPP.Z,1",BI=23$
$LK,"U",A="FL:::/Compiler/UAsm.CPP.Z,645",BI=24$ $LK,"U",A="FL:::/Compiler/UAsm.CPP.Z,645",BI=24$
$LK,"ICQueRem",A="FL:::/Compiler/BackC.CPP.Z,399",BI=25$ $LK,"ICQueRem",A="FL:::/Compiler/BackC.CPP.Z,399",BI=25$
$LK,"CN_R",A="FL:::/Compiler/BackFA.CPP.Z,4"$ $LK,"CN_R",A="FL:::/Compiler/BackFA.CPP.Z,4"$
$LK,"LastFun",A="FL:::/Compiler/CMisc.CPP.Z,48"$
$LK,"OptLead1",A="FL:::/Compiler/OptLib.CPP.Z,73",BI=26$ $LK,"OptLead1",A="FL:::/Compiler/OptLib.CPP.Z,73",BI=26$
$LK,"CmpNoteFloatOp",A="FL:::/Compiler/BackFA.CPP.Z,6",BI=27$ $LK,"CmpNoteFloatOp",A="FL:::/Compiler/BackFA.CPP.Z,6",BI=27$
$LK,"AOTGlblsResolve",A="FL:::/Compiler/AsmResolve.CPP.Z,76",BI=28$ $LK,"AOTGlblsResolve",A="FL:::/Compiler/AsmResolve.CPP.Z,76",BI=28$
$LK,"ExePutS2",A="FL:::/Compiler/CMain.CPP.Z,625",BI=29$ $LK,"ExePutS2",A="FL:::/Compiler/CMain.CPP.Z,631",BI=29$
$LK,"HashEntrySize",A="FL:::/Compiler/CHash.CPP.Z,1",BI=30$ $LK,"HashEntrySize",A="FL:::/Compiler/CHash.CPP.Z,1",BI=30$
$LK,"COCPush",A="FL:::/Compiler/PrsLib.CPP.Z,107",BI=31$ $LK,"COCPush",A="FL:::/Compiler/PrsLib.CPP.Z,107",BI=31$
$LK,"SLASH_OP_DEC",A="FL:::/Compiler/BackLib.CPP.Z,245"$ $LK,"SLASH_OP_DEC",A="FL:::/Compiler/BackLib.CPP.Z,245"$
@@ -86,7 +87,7 @@ $LK,"OptPass4",A="FL:::/Compiler/OptPass4.CPP.Z,132",BI=64$
$LK,"OptPass5",A="FL:::/Compiler/OptPass5.CPP.Z,1",BI=65$ $LK,"OptPass5",A="FL:::/Compiler/OptPass5.CPP.Z,1",BI=65$
$LK,"OptPass6",A="FL:::/Compiler/OptPass6.CPP.Z,96",BI=66$ $LK,"OptPass6",A="FL:::/Compiler/OptPass6.CPP.Z,96",BI=66$
$LK,"MODR_REG",A="FL:::/Compiler/BackLib.CPP.Z,126"$ $LK,"MODR_REG",A="FL:::/Compiler/BackLib.CPP.Z,126"$
$LK,"Echo",A="FL:::/Compiler/CMisc.CPP.Z,24",BI=67$ $LK,"Echo",A="FL:::/Compiler/CMisc.CPP.Z,63",BI=67$
$LK,"PrsGlblVarLst",A="FL:::/Compiler/PrsStmt.CPP.Z,201",BI=68$ $LK,"PrsGlblVarLst",A="FL:::/Compiler/PrsStmt.CPP.Z,201",BI=68$
$LK,"ICQueInit",A="FL:::/Compiler/BackC.CPP.Z,337",BI=69$ $LK,"ICQueInit",A="FL:::/Compiler/BackC.CPP.Z,337",BI=69$
$LK,"ICCmp",A="FL:::/Compiler/BackB.CPP.Z,102",BI=70$ $LK,"ICCmp",A="FL:::/Compiler/BackB.CPP.Z,102",BI=70$
@@ -141,10 +142,10 @@ $LK,"UAsmHashLoad",A="FL:::/Compiler/UAsm.CPP.Z,188",BI=111$
$LK,"UnusedExternWarning",A="FL:::/Compiler/CExcept.CPP.Z,104",BI=112$ $LK,"UnusedExternWarning",A="FL:::/Compiler/CExcept.CPP.Z,104",BI=112$
$LK,"SLASH_OP_FILD",A="FL:::/Compiler/BackLib.CPP.Z,263"$ $LK,"SLASH_OP_FILD",A="FL:::/Compiler/BackLib.CPP.Z,263"$
$LK,"ICXorXor",A="FL:::/Compiler/BackB.CPP.Z,75",BI=113$ $LK,"ICXorXor",A="FL:::/Compiler/BackB.CPP.Z,75",BI=113$
$LK,"PrsTryBlk",A="FL:::/Compiler/PrsStmt.CPP.Z,838",BI=114$ $LK,"PrsTryBlk",A="FL:::/Compiler/PrsStmt.CPP.Z,842",BI=114$
$LK,"CInit",A="FL:::/Compiler/CMain.CPP.Z,679",BI=115$ $LK,"CInit",A="FL:::/Compiler/CMain.CPP.Z,691",BI=115$
$LK,"MemberMetaFind",A="FL:::/Compiler/LexLib.CPP.Z,56",BI=116$ $LK,"MemberMetaFind",A="FL:::/Compiler/LexLib.CPP.Z,56",BI=116$
$LK,"ExePrint2",A="FL:::/Compiler/CMain.CPP.Z,642",BI=117$ $LK,"ExePrint2",A="FL:::/Compiler/CMain.CPP.Z,648",BI=117$
$LK,"FBO1_INT",A="FL:::/Compiler/OptLib.CPP.Z,93"$ $LK,"FBO1_INT",A="FL:::/Compiler/OptLib.CPP.Z,93"$
$LK,"PE_DO_UNARY_OP",A="FL:::/Compiler/PrsExp.CPP.Z,8"$ $LK,"PE_DO_UNARY_OP",A="FL:::/Compiler/PrsExp.CPP.Z,8"$
$LK,"PrsVarInit",A="FL:::/Compiler/PrsVar.CPP.Z,1",BI=118$ $LK,"PrsVarInit",A="FL:::/Compiler/PrsVar.CPP.Z,1",BI=118$
@@ -164,29 +165,30 @@ $LK,"COCDel",A="FL:::/Compiler/PrsLib.CPP.Z,186",BI=127$
$LK,"PE_UNARY_TERM1",A="FL:::/Compiler/PrsExp.CPP.Z,1"$ $LK,"PE_UNARY_TERM1",A="FL:::/Compiler/PrsExp.CPP.Z,1"$
$LK,"ICFAdd",A="FL:::/Compiler/BackFB.CPP.Z,504",BI=128$ $LK,"ICFAdd",A="FL:::/Compiler/BackFB.CPP.Z,504",BI=128$
$LK,"PE_UNARY_TERM2",A="FL:::/Compiler/PrsExp.CPP.Z,2"$ $LK,"PE_UNARY_TERM2",A="FL:::/Compiler/PrsExp.CPP.Z,2"$
$LK,"CmdLinePmt",A="FL:::/Compiler/CMisc.CPP.Z,88",BI=129$ $LK,"CmdLinePmt",A="FL:::/Compiler/CMisc.CPP.Z,127",BI=129$
$LK,"AsmMakeArgMask",A="FL:::/Compiler/Asm.CPP.Z,177",BI=130$ $LK,"AsmMakeArgMask",A="FL:::/Compiler/Asm.CPP.Z,177",BI=130$
$LK,"COCHeaderPut",A="FL:::/Compiler/PrsLib.CPP.Z,229",BI=131$ $LK,"COCHeaderPut",A="FL:::/Compiler/PrsLib.CPP.Z,229",BI=131$
$LK,"PrsGlblInit",A="FL:::/Compiler/PrsVar.CPP.Z,206",BI=132$ $LK,"PrsGlblInit",A="FL:::/Compiler/PrsVar.CPP.Z,206",BI=132$
$LK,"ICAndEqu",A="FL:::/Compiler/BackC.CPP.Z,536",BI=133$ $LK,"ICAndEqu",A="FL:::/Compiler/BackC.CPP.Z,536",BI=133$
$LK,"LexD2I32",A="FL:::/Compiler/CMisc.CPP.Z,52",BI=134$ $LK,"LexD2I32",A="FL:::/Compiler/CMisc.CPP.Z,91",BI=134$
$LK,"MemberLstNew",A="FL:::/Compiler/LexLib.CPP.Z,150",BI=135$ $LK,"MemberLstNew",A="FL:::/Compiler/LexLib.CPP.Z,150",BI=135$
$LK,"LexD3I32",A="FL:::/Compiler/CMisc.CPP.Z,68",BI=136$ $LK,"LexD3I32",A="FL:::/Compiler/CMisc.CPP.Z,107",BI=136$
$LK,"OptClassFwd",A="FL:::/Compiler/OptLib.CPP.Z,9",BI=137$ $LK,"OptClassFwd",A="FL:::/Compiler/OptLib.CPP.Z,9",BI=137$
$LK,"ICFCmp",A="FL:::/Compiler/BackFA.CPP.Z,515",BI=138$ $LK,"ICFCmp",A="FL:::/Compiler/BackFA.CPP.Z,515",BI=138$
$LK,"PrsSwitch",A="FL:::/Compiler/PrsStmt.CPP.Z,574",BI=139$ $LK,"PrsSwitch",A="FL:::/Compiler/PrsStmt.CPP.Z,578",BI=139$
$LK,"ICFDiv",A="FL:::/Compiler/BackFB.CPP.Z,493",BI=140$ $LK,"ICFDiv",A="FL:::/Compiler/BackFB.CPP.Z,493",BI=140$
$LK,"AOTStoreCodeU8At",A="FL:::/Compiler/AsmLib.CPP.Z,106",BI=141$ $LK,"AOTStoreCodeU8At",A="FL:::/Compiler/AsmLib.CPP.Z,106",BI=141$
$LK,"PE_PUSH_LOWER",A="FL:::/Compiler/PrsExp.CPP.Z,11"$ $LK,"PE_PUSH_LOWER",A="FL:::/Compiler/PrsExp.CPP.Z,11"$
$LK,"OptPass6Lag",A="FL:::/Compiler/OptPass6.CPP.Z,28",BI=142$ $LK,"OptPass6Lag",A="FL:::/Compiler/OptPass6.CPP.Z,28",BI=142$
$LK,"OptLag1",A="FL:::/Compiler/OptLib.CPP.Z,51",BI=143$ $LK,"OptLag1",A="FL:::/Compiler/OptLib.CPP.Z,51",BI=143$
$LK,"OptLag2",A="FL:::/Compiler/OptLib.CPP.Z,62",BI=144$ $LK,"OptLag2",A="FL:::/Compiler/OptLib.CPP.Z,62",BI=144$
$LK,"StreamPrint",A="FL:::/Compiler/CMisc.CPP.Z,29",BI=145$ $LK,"StreamPrint",A="FL:::/Compiler/CMisc.CPP.Z,68",BI=145$
$LK,"_LAST_FUN",A="FL:::/Compiler/CMisc.CPP.Z,12"$
$LK,"ICFCvt",A="FL:::/Compiler/BackFA.CPP.Z,123",BI=146$ $LK,"ICFCvt",A="FL:::/Compiler/BackFA.CPP.Z,123",BI=146$
$LK,"StreamDir",A="FL:::/Compiler/CMisc.CPP.Z,43",BI=147$ $LK,"StreamDir",A="FL:::/Compiler/CMisc.CPP.Z,82",BI=147$
$LK,"PrsOffsetOf",A="FL:::/Compiler/PrsExp.CPP.Z,348",BI=148$ $LK,"PrsOffsetOf",A="FL:::/Compiler/PrsExp.CPP.Z,348",BI=148$
$LK,"GetOption",A="FL:::/Compiler/CMisc.CPP.Z,6",BI=149$ $LK,"GetOption",A="FL:::/Compiler/CMisc.CPP.Z,6",BI=149$
$LK,"PrsDoWhile",A="FL:::/Compiler/PrsStmt.CPP.Z,502",BI=150$ $LK,"PrsDoWhile",A="FL:::/Compiler/PrsStmt.CPP.Z,506",BI=150$
$LK,"ICShift",A="FL:::/Compiler/BackA.CPP.Z,609",BI=151$ $LK,"ICShift",A="FL:::/Compiler/BackA.CPP.Z,609",BI=151$
$LK,"ICFMod",A="FL:::/Compiler/BackFA.CPP.Z,242",BI=152$ $LK,"ICFMod",A="FL:::/Compiler/BackFA.CPP.Z,242",BI=152$
$LK,"COCPop",A="FL:::/Compiler/PrsLib.CPP.Z,121",BI=153$ $LK,"COCPop",A="FL:::/Compiler/PrsLib.CPP.Z,121",BI=153$
@@ -211,230 +213,234 @@ $LK,"AsmUnresolvedAdd",A="FL:::/Compiler/AsmResolve.CPP.Z,188",BI=167$
$LK,"AOTStoreCodeU8",A="FL:::/Compiler/AsmLib.CPP.Z,1",BI=168$ $LK,"AOTStoreCodeU8",A="FL:::/Compiler/AsmLib.CPP.Z,1",BI=168$
$LK,"ICBitOps",A="FL:::/Compiler/BackB.CPP.Z,202",BI=169$ $LK,"ICBitOps",A="FL:::/Compiler/BackB.CPP.Z,202",BI=169$
$LK,"lex_zeros",A="FL:::/Compiler/Lex.CPP.Z,91"$ $LK,"lex_zeros",A="FL:::/Compiler/Lex.CPP.Z,91"$
$LK,"CSwitchCase",A="FL:::/Compiler/PrsStmt.CPP.Z,567"$ $LK,"CSwitchCase",A="FL:::/Compiler/PrsStmt.CPP.Z,571"$
$LK,"AsmResolve",A="FL:::/Compiler/AsmResolve.CPP.Z,1",BI=170$ $LK,"AsmResolve",A="FL:::/Compiler/AsmResolve.CPP.Z,1",BI=170$
$LK,"PrsAsmInst",A="FL:::/Compiler/Asm.CPP.Z,395",BI=171$ $LK,"PrsAsmInst",A="FL:::/Compiler/Asm.CPP.Z,395",BI=171$
$LK,"COCCompile",A="FL:::/Compiler/PrsLib.CPP.Z,249",BI=172$ $LK,"COCCompile",A="FL:::/Compiler/PrsLib.CPP.Z,249",BI=172$
$LK,"Cmp",A="FL:::/Compiler/CMain.CPP.Z,419",BI=173$ $LK,"RunFile2",A="FL:::/Compiler/CMain.CPP.Z,667",BI=173$
$LK,"PrsPush2",A="FL:::/Compiler/PrsLib.CPP.Z,11",BI=174$ $LK,"Cmp",A="FL:::/Compiler/CMain.CPP.Z,419",BI=174$
$LK,"ICArgPut",A="FL:::/Compiler/CExcept.CPP.Z,141",BI=175$ $LK,"PrsPush2",A="FL:::/Compiler/PrsLib.CPP.Z,11",BI=175$
$LK,"UndefinedExtern",A="FL:::/Compiler/CExcept.CPP.Z,98",BI=176$ $LK,"ICArgPut",A="FL:::/Compiler/CExcept.CPP.Z,141",BI=176$
$LK,"OptIC4",A="FL:::/Compiler/OptPass4.CPP.Z,1",BI=177$ $LK,"UndefinedExtern",A="FL:::/Compiler/CExcept.CPP.Z,98",BI=177$
$LK,"OptIC6",A="FL:::/Compiler/OptPass6.CPP.Z,1",BI=178$ $LK,"OptIC4",A="FL:::/Compiler/OptPass4.CPP.Z,1",BI=178$
$LK,"ICCmpAndBranch",A="FL:::/Compiler/BackB.CPP.Z,468",BI=179$ $LK,"OptIC6",A="FL:::/Compiler/OptPass6.CPP.Z,1",BI=179$
$LK,"ICDivEqu",A="FL:::/Compiler/BackA.CPP.Z,408",BI=180$ $LK,"ICCmpAndBranch",A="FL:::/Compiler/BackB.CPP.Z,468",BI=180$
$LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.CPP.Z,482",BI=181$ $LK,"ICDivEqu",A="FL:::/Compiler/BackA.CPP.Z,408",BI=181$
$LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.CPP.Z,219",BI=182$ $LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.CPP.Z,486",BI=182$
$LK,"Lex",A="FL:::/Compiler/Lex.CPP.Z,443",BI=183$ $LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.CPP.Z,219",BI=183$
$LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.CPP.Z,634",BI=184$ $LK,"Lex",A="FL:::/Compiler/Lex.CPP.Z,443",BI=184$
$LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.CPP.Z,634",BI=185$
$LK,"uasm",A="FL:::/Compiler/Compiler.PRJ.Z,21"$ $LK,"uasm",A="FL:::/Compiler/Compiler.PRJ.Z,21"$
$LK,"MODR_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,127"$ $LK,"MODR_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,127"$
$LK,"PE_MAYBE_MODIFIERS",A="FL:::/Compiler/PrsExp.CPP.Z,3"$ $LK,"PE_MAYBE_MODIFIERS",A="FL:::/Compiler/PrsExp.CPP.Z,3"$
$LK,"PE_UNARY_MODIFIERS",A="FL:::/Compiler/PrsExp.CPP.Z,4"$ $LK,"PE_UNARY_MODIFIERS",A="FL:::/Compiler/PrsExp.CPP.Z,4"$
$LK,"AOTLocalsResolve",A="FL:::/Compiler/AsmResolve.CPP.Z,42",BI=185$ $LK,"AOTLocalsResolve",A="FL:::/Compiler/AsmResolve.CPP.Z,42",BI=186$
$LK,"PE_DO_BINARY_OP",A="FL:::/Compiler/PrsExp.CPP.Z,9"$ $LK,"PE_DO_BINARY_OP",A="FL:::/Compiler/PrsExp.CPP.Z,9"$
$LK,"CmpFixUpAOTAsm",A="FL:::/Compiler/CMain.CPP.Z,302",BI=186$ $LK,"CmpFixUpAOTAsm",A="FL:::/Compiler/CMain.CPP.Z,302",BI=187$
$LK,"OptLabelFwd",A="FL:::/Compiler/OptLib.CPP.Z,1",BI=187$ $LK,"OptLabelFwd",A="FL:::/Compiler/OptLib.CPP.Z,1",BI=188$
$LK,"ICOrOr",A="FL:::/Compiler/BackB.CPP.Z,51",BI=188$ $LK,"ICOrOr",A="FL:::/Compiler/BackB.CPP.Z,51",BI=189$
$LK,"LexExcept",A="FL:::/Compiler/CExcept.CPP.Z,81",BI=189$ $LK,"LexExcept",A="FL:::/Compiler/CExcept.CPP.Z,81",BI=190$
$LK,"cmp_templates",A="FL:::/Compiler/CExts.CPP.Z,42"$ $LK,"cmp_templates",A="FL:::/Compiler/CExts.CPP.Z,42"$
$LK,"CmpF2PushPop",A="FL:::/Compiler/OptLib.CPP.Z,542",BI=190$ $LK,"CmpF2PushPop",A="FL:::/Compiler/OptLib.CPP.Z,542",BI=191$
$LK,"CmpJoin",A="FL:::/Compiler/CMain.CPP.Z,35",BI=191$ $LK,"CmpJoin",A="FL:::/Compiler/CMain.CPP.Z,35",BI=192$
$LK,"PrsPop2",A="FL:::/Compiler/PrsLib.CPP.Z,16",BI=192$ $LK,"PrsPop2",A="FL:::/Compiler/PrsLib.CPP.Z,16",BI=193$
$LK,"CMP_TEMPLATES",A="FL:::/Compiler/Templates.CPP.Z,4"$ $LK,"CMP_TEMPLATES",A="FL:::/Compiler/Templates.CPP.Z,4"$
$LK,"MODR_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,128"$ $LK,"MODR_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,128"$
$LK,"PrsAsmBlk",A="FL:::/Compiler/Asm.CPP.Z,904",BI=193$ $LK,"PrsAsmBlk",A="FL:::/Compiler/Asm.CPP.Z,904",BI=194$
$LK,"PrsAsmArg",A="FL:::/Compiler/Asm.CPP.Z,35",BI=194$ $LK,"PrsAsmArg",A="FL:::/Compiler/Asm.CPP.Z,35",BI=195$
$LK,"LexFirstRem",A="FL:::/Compiler/Lex.CPP.Z,277",BI=195$ $LK,"LexFirstRem",A="FL:::/Compiler/Lex.CPP.Z,277",BI=196$
$LK,"MemberClassBaseFind",A="FL:::/Compiler/LexLib.CPP.Z,87",BI=196$ $LK,"MemberClassBaseFind",A="FL:::/Compiler/LexLib.CPP.Z,87",BI=197$
$LK,"MemberFind",A="FL:::/Compiler/LexLib.CPP.Z,67",BI=197$ $LK,"MemberFind",A="FL:::/Compiler/LexLib.CPP.Z,67",BI=198$
$LK,"cmp",A="FL:::/Compiler/Compiler.PRJ.Z,16"$ $LK,"cmp",A="FL:::/Compiler/Compiler.PRJ.Z,16"$
$LK,"OptLag",A="FL:::/Compiler/OptLib.CPP.Z,40",BI=198$ $LK,"OptLag",A="FL:::/Compiler/OptLib.CPP.Z,40",BI=199$
$LK,"ICPostIncDec",A="FL:::/Compiler/BackB.CPP.Z,345",BI=199$ $LK,"ICPostIncDec",A="FL:::/Compiler/BackB.CPP.Z,345",BI=200$
$LK,"ICFPostIncDec",A="FL:::/Compiler/BackFB.CPP.Z,582",BI=200$ $LK,"ICFPostIncDec",A="FL:::/Compiler/BackFB.CPP.Z,582",BI=201$
$LK,"ICTest",A="FL:::/Compiler/BackLib.CPP.Z,394",BI=201$ $LK,"ICTest",A="FL:::/Compiler/BackLib.CPP.Z,394",BI=202$
$LK,"ICModU64",A="FL:::/Compiler/BackC.CPP.Z,460",BI=202$ $LK,"ICModU64",A="FL:::/Compiler/BackC.CPP.Z,460",BI=203$
$LK,"PrsAsmImm",A="FL:::/Compiler/Asm.CPP.Z,1",BI=203$ $LK,"PrsAsmImm",A="FL:::/Compiler/Asm.CPP.Z,1",BI=204$
$LK,"LexExtStr",A="FL:::/Compiler/LexLib.CPP.Z,218",BI=204$ $LK,"LexExtStr",A="FL:::/Compiler/LexLib.CPP.Z,218",BI=205$
$LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.CPP.Z,478",BI=205$ $LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.CPP.Z,478",BI=206$
$LK,"ICAddSubEctImm",A="FL:::/Compiler/BackA.CPP.Z,56",BI=206$ $LK,"ICAddSubEctImm",A="FL:::/Compiler/BackA.CPP.Z,56",BI=207$
$LK,"ICPush",A="FL:::/Compiler/BackLib.CPP.Z,293",BI=207$ $LK,"ICPush",A="FL:::/Compiler/BackLib.CPP.Z,293",BI=208$
$LK,"ICSwap",A="FL:::/Compiler/BackC.CPP.Z,487",BI=208$ $LK,"ICSwap",A="FL:::/Compiler/BackC.CPP.Z,487",BI=209$
$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:::/Compiler/Templates.CPP.Z,267"$ $LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:::/Compiler/Templates.CPP.Z,267"$
$LK,"intermediate_code_table",A="FL:::/Compiler/CInit.CPP.Z,16"$ $LK,"intermediate_code_table",A="FL:::/Compiler/CInit.CPP.Z,16"$
$LK,"ICZero",A="FL:::/Compiler/BackLib.CPP.Z,385",BI=209$ $LK,"ICZero",A="FL:::/Compiler/BackLib.CPP.Z,385",BI=210$
$LK,"CmpCtrlDel",A="FL:::/Compiler/Lex.CPP.Z,58",BI=210$ $LK,"CmpCtrlDel",A="FL:::/Compiler/Lex.CPP.Z,58",BI=211$
$LK,"ICClassPut",A="FL:::/Compiler/CExcept.CPP.Z,117",BI=211$ $LK,"ICClassPut",A="FL:::/Compiler/CExcept.CPP.Z,117",BI=212$
$LK,"ICAssign",A="FL:::/Compiler/BackC.CPP.Z,159",BI=212$ $LK,"ICAssign",A="FL:::/Compiler/BackC.CPP.Z,159",BI=213$
$LK,"ICFTemplateFun",A="FL:::/Compiler/BackFB.CPP.Z,606",BI=213$ $LK,"ICFTemplateFun",A="FL:::/Compiler/BackFB.CPP.Z,606",BI=214$
$LK,"MemberAdd",A="FL:::/Compiler/LexLib.CPP.Z,103",BI=214$ $LK,"RunFile",A="FL:::/Compiler/CMain.CPP.Z,625",BI=215$
$LK,"PrsPush",A="FL:::/Compiler/PrsLib.CPP.Z,1",BI=215$ $LK,"MemberAdd",A="FL:::/Compiler/LexLib.CPP.Z,103",BI=216$
$LK,"PrsPush",A="FL:::/Compiler/PrsLib.CPP.Z,1",BI=217$
$LK,"SLASH_OP_FDIVR",A="FL:::/Compiler/BackLib.CPP.Z,259"$ $LK,"SLASH_OP_FDIVR",A="FL:::/Compiler/BackLib.CPP.Z,259"$
$LK,"SLASH_OP_FISTTP",A="FL:::/Compiler/BackLib.CPP.Z,262"$ $LK,"SLASH_OP_FISTTP",A="FL:::/Compiler/BackLib.CPP.Z,262"$
$LK,"CmpCtrlSize",A="FL:::/Compiler/Lex.CPP.Z,70",BI=216$ $LK,"CmpCtrlSize",A="FL:::/Compiler/Lex.CPP.Z,70",BI=218$
$LK,"ICLocalVarInit",A="FL:::/Compiler/BackC.CPP.Z,758",BI=217$ $LK,"ICLocalVarInit",A="FL:::/Compiler/BackC.CPP.Z,758",BI=219$
$LK,"PrsFor",A="FL:::/Compiler/PrsStmt.CPP.Z,525",BI=218$ $LK,"PrsFor",A="FL:::/Compiler/PrsStmt.CPP.Z,529",BI=220$
$LK,"PassTrace",A="FL:::/Compiler/CMisc.CPP.Z,11",BI=219$ $LK,"PassTrace",A="FL:::/Compiler/CMisc.CPP.Z,50",BI=221$
$LK,"PrsPopDeref",A="FL:::/Compiler/PrsLib.CPP.Z,21",BI=220$ $LK,"PrsPopDeref",A="FL:::/Compiler/PrsLib.CPP.Z,21",BI=222$
$LK,"ICCopyTemplate",A="FL:::/Compiler/BackFA.CPP.Z,77",BI=221$ $LK,"ICCopyTemplate",A="FL:::/Compiler/BackFA.CPP.Z,77",BI=223$
$LK,"PrsStmt",A="FL:::/Compiler/PrsStmt.CPP.Z,900",BI=222$ $LK,"PrsStmt",A="FL:::/Compiler/PrsStmt.CPP.Z,904",BI=224$
$LK,"PrsFun",A="FL:::/Compiler/PrsStmt.CPP.Z,132",BI=223$ $LK,"PrsFun",A="FL:::/Compiler/PrsStmt.CPP.Z,132",BI=225$
$LK,"LexIncludeStr",A="FL:::/Compiler/Lex.CPP.Z,299",BI=224$ $LK,"LexIncludeStr",A="FL:::/Compiler/Lex.CPP.Z,299",BI=226$
$LK,"PrsType",A="FL:::/Compiler/PrsVar.CPP.Z,287",BI=225$ $LK,"PrsType",A="FL:::/Compiler/PrsVar.CPP.Z,287",BI=227$
$LK,"CmpCtrlNew",A="FL:::/Compiler/Lex.CPP.Z,28",BI=226$ $LK,"CmpCtrlNew",A="FL:::/Compiler/Lex.CPP.Z,28",BI=228$
$LK,"MODR_SIB_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,131"$ $LK,"MODR_SIB_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,131"$
$LK,"cmp_type_flags_src_code",A="FL:::/Compiler/Lex.CPP.Z,328"$ $LK,"cmp_type_flags_src_code",A="FL:::/Compiler/Lex.CPP.Z,328"$
$LK,"PrsVarInit2",A="FL:::/Compiler/PrsVar.CPP.Z,123",BI=227$ $LK,"PrsVarInit2",A="FL:::/Compiler/PrsVar.CPP.Z,123",BI=229$
$LK,"PrsPop",A="FL:::/Compiler/PrsLib.CPP.Z,6",BI=228$ $LK,"PrsPop",A="FL:::/Compiler/PrsLib.CPP.Z,6",BI=230$
$LK,"asm_seg_prefixes",A="FL:::/Compiler/Asm.CPP.Z,393"$ $LK,"asm_seg_prefixes",A="FL:::/Compiler/Asm.CPP.Z,393"$
$LK,"ICMinMax",A="FL:::/Compiler/BackC.CPP.Z,415",BI=229$ $LK,"ICMinMax",A="FL:::/Compiler/BackC.CPP.Z,415",BI=231$
$LK,"CmpLoadDefines",A="FL:::/Compiler/CInit.CPP.Z,205",BI=230$ $LK,"CmpLoadDefines",A="FL:::/Compiler/CInit.CPP.Z,205",BI=232$
$LK,"PrsIf",A="FL:::/Compiler/PrsStmt.CPP.Z,455",BI=231$ $LK,"PrsIf",A="FL:::/Compiler/PrsStmt.CPP.Z,459",BI=233$
$LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.CPP.Z,404",BI=232$ $LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.CPP.Z,404",BI=234$
$LK,"ICFUnaryMinus",A="FL:::/Compiler/BackFA.CPP.Z,194",BI=233$ $LK,"ICFUnaryMinus",A="FL:::/Compiler/BackFA.CPP.Z,194",BI=235$
$LK,"LexDocRead",A="FL:::/Compiler/Lex.CPP.Z,311",BI=234$ $LK,"LexDocRead",A="FL:::/Compiler/Lex.CPP.Z,311",BI=236$
$LK,"CmpFixUpJITAsm",A="FL:::/Compiler/CMain.CPP.Z,174",BI=235$ $LK,"CmpFixUpJITAsm",A="FL:::/Compiler/CMain.CPP.Z,174",BI=237$
$LK,"COCPopNoFree",A="FL:::/Compiler/PrsLib.CPP.Z,114",BI=236$ $LK,"COCPopNoFree",A="FL:::/Compiler/PrsLib.CPP.Z,114",BI=238$
$LK,"ParenWarning",A="FL:::/Compiler/CExcept.CPP.Z,110",BI=237$ $LK,"ParenWarning",A="FL:::/Compiler/CExcept.CPP.Z,110",BI=239$
$LK,"PrsFunCall",A="FL:::/Compiler/PrsExp.CPP.Z,378",BI=238$ $LK,"PrsFunCall",A="FL:::/Compiler/PrsExp.CPP.Z,378",BI=240$
$LK,"ICDerefPostIncDec",A="FL:::/Compiler/BackB.CPP.Z,384",BI=239$ $LK,"ICDerefPostIncDec",A="FL:::/Compiler/BackB.CPP.Z,384",BI=241$
$LK,"Option",A="FL:::/Compiler/CMisc.CPP.Z,1",BI=240$ $LK,"Option",A="FL:::/Compiler/CMisc.CPP.Z,1",BI=242$
$LK,"ExeFile2",A="FL:::/Compiler/CMain.CPP.Z,651",BI=241$ $LK,"ExeFile2",A="FL:::/Compiler/CMain.CPP.Z,657",BI=243$
$LK,"COptMemberVar",A="FL:::/Compiler/OptLib.CPP.Z,556"$ $LK,"COptMemberVar",A="FL:::/Compiler/OptLib.CPP.Z,556"$
$LK,"PE_CHECK_BINARY_OPS1",A="FL:::/Compiler/PrsExp.CPP.Z,6"$ $LK,"PE_CHECK_BINARY_OPS1",A="FL:::/Compiler/PrsExp.CPP.Z,6"$
$LK,"PE_CHECK_BINARY_OPS2",A="FL:::/Compiler/PrsExp.CPP.Z,7"$ $LK,"PE_CHECK_BINARY_OPS2",A="FL:::/Compiler/PrsExp.CPP.Z,7"$
$LK,"LexBackupLastChar",A="FL:::/Compiler/LexLib.CPP.Z,1",BI=242$ $LK,"LexBackupLastChar",A="FL:::/Compiler/LexLib.CPP.Z,1",BI=244$
$LK,"Trace",A="FL:::/Compiler/CMisc.CPP.Z,19",BI=243$ $LK,"Trace",A="FL:::/Compiler/CMisc.CPP.Z,58",BI=245$
$LK,"ICBrBitOps",A="FL:::/Compiler/BackC.CPP.Z,206",BI=244$ $LK,"ICBrBitOps",A="FL:::/Compiler/BackC.CPP.Z,206",BI=246$
$LK,"MODR_D32_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,129"$ $LK,"MODR_D32_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,129"$
$LK,"LexGetChar",A="FL:::/Compiler/Lex.CPP.Z,107",BI=245$ $LK,"LexGetChar",A="FL:::/Compiler/Lex.CPP.Z,107",BI=247$
$LK,"LexSkipEol",A="FL:::/Compiler/Lex.CPP.Z,270",BI=246$ $LK,"LexSkipEol",A="FL:::/Compiler/Lex.CPP.Z,270",BI=248$
$LK,"ICFlagBranch",A="FL:::/Compiler/BackB.CPP.Z,682",BI=247$ $LK,"ICFlagBranch",A="FL:::/Compiler/BackB.CPP.Z,682",BI=249$
$LK,"SLASH_OP_FSUBR",A="FL:::/Compiler/BackLib.CPP.Z,256"$ $LK,"SLASH_OP_FSUBR",A="FL:::/Compiler/BackLib.CPP.Z,256"$
$LK,"ICFPreIncDec",A="FL:::/Compiler/BackFB.CPP.Z,562",BI=248$ $LK,"ICFPreIncDec",A="FL:::/Compiler/BackFB.CPP.Z,562",BI=250$
$LK,"MODR_SIB_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,130"$ $LK,"MODR_SIB_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,130"$
$LK,"ExeFile",A="FL:::/Compiler/CMain.CPP.Z,614",BI=249$ $LK,"ExeFile",A="FL:::/Compiler/CMain.CPP.Z,614",BI=251$
$LK,"COCMiscNew",A="FL:::/Compiler/PrsLib.CPP.Z,143",BI=250$ $LK,"COCMiscNew",A="FL:::/Compiler/PrsLib.CPP.Z,143",BI=252$
$LK,"cmp_templates_dont_pop",A="FL:::/Compiler/CExts.CPP.Z,43"$ $LK,"cmp_templates_dont_pop",A="FL:::/Compiler/CExts.CPP.Z,43"$
$LK,"CmpOffset2Reg",A="FL:::/Compiler/OptLib.CPP.Z,83",BI=251$ $LK,"CmpOffset2Reg",A="FL:::/Compiler/OptLib.CPP.Z,83",BI=253$
$LK,"PrsFunNew",A="FL:::/Compiler/PrsLib.CPP.Z,62",BI=252$ $LK,"PrsFunNew",A="FL:::/Compiler/PrsLib.CPP.Z,62",BI=254$
$LK,"StreamExePrint",A="FL:::/Compiler/CMain.CPP.Z,661",BI=253$ $LK,"StreamExePrint",A="FL:::/Compiler/CMain.CPP.Z,673",BI=255$
$LK,"COCGoToLabelFind",A="FL:::/Compiler/PrsLib.CPP.Z,152",BI=254$ $LK,"COCGoToLabelFind",A="FL:::/Compiler/PrsLib.CPP.Z,152",BI=256$
$LK,"OptMVCompare",A="FL:::/Compiler/OptLib.CPP.Z,562",BI=255$ $LK,"OptMVCompare",A="FL:::/Compiler/OptLib.CPP.Z,562",BI=257$
$LK,"ICToBool",A="FL:::/Compiler/BackB.CPP.Z,289",BI=256$ $LK,"ICToBool",A="FL:::/Compiler/BackB.CPP.Z,289",BI=258$
$LK,"PrsFunJoin",A="FL:::/Compiler/PrsStmt.CPP.Z,68",BI=257$ $LK,"PrsFunJoin",A="FL:::/Compiler/PrsStmt.CPP.Z,68",BI=259$
$LK,"OptFixSizeOf",A="FL:::/Compiler/OptLib.CPP.Z,484",BI=258$ $LK,"OptFixSizeOf",A="FL:::/Compiler/OptLib.CPP.Z,484",BI=260$
$LK,"cmp_templates_dont_push",A="FL:::/Compiler/CExts.CPP.Z,45"$ $LK,"cmp_templates_dont_push",A="FL:::/Compiler/CExts.CPP.Z,45"$
$LK,"cmp_templates_dont_push_pop",A="FL:::/Compiler/CExts.CPP.Z,46"$ $LK,"cmp_templates_dont_push_pop",A="FL:::/Compiler/CExts.CPP.Z,46"$
$LK,"LexAttachDoc",A="FL:::/Compiler/Lex.CPP.Z,331",BI=259$ $LK,"LexAttachDoc",A="FL:::/Compiler/Lex.CPP.Z,331",BI=261$
$LK,"PrsStreamBlk",A="FL:::/Compiler/PrsStmt.CPP.Z,801",BI=260$ $LK,"PrsStreamBlk",A="FL:::/Compiler/PrsStmt.CPP.Z,805",BI=262$
$LK,"cmp_templates_dont_push2",A="FL:::/Compiler/CExts.CPP.Z,44"$ $LK,"cmp_templates_dont_push2",A="FL:::/Compiler/CExts.CPP.Z,44"$
$LK,"InstEntryFind",A="FL:::/Compiler/UAsm.CPP.Z,66",BI=261$ $LK,"InstEntryFind",A="FL:::/Compiler/UAsm.CPP.Z,66",BI=263$
$LK,"PrsDotDotDot",A="FL:::/Compiler/PrsVar.CPP.Z,381",BI=262$ $LK,"PrsDotDotDot",A="FL:::/Compiler/PrsVar.CPP.Z,381",BI=264$
$LK,"ICMulEqu",A="FL:::/Compiler/BackA.CPP.Z,322",BI=263$ $LK,"ICMulEqu",A="FL:::/Compiler/BackA.CPP.Z,322",BI=265$
$LK,"AsmPrsInsFlags",A="FL:::/Compiler/AsmInit.CPP.Z,1",BI=264$ $LK,"AsmPrsInsFlags",A="FL:::/Compiler/AsmInit.CPP.Z,1",BI=266$
$LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.CPP.Z,787",BI=265$ $LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.CPP.Z,791",BI=267$
H2@_#_#h#n#‰#�#¹#»#ğ#Ú#$$$+$¨­Ón`n`„`Œ`—`£`Ã`¥`Ò`Ø`Ø`a a4aBaBaoa‘a©a–a¸aäaÑaûab-b-b4bXbnbnbnbxbH>L®û®ûÈûÒûÖûÚûßûáûùûüüüp©Á¾ÿ¾ÿèÿêÿñÿ÷ÿıÿÿÿ !4CHJOYn„—¼Î(äää;ä?ä?äGä8ÖãÖãßãäãïãøãÿãääd`µ××Ôר×å×ç×ô×ö×ØØØØØ Ø,Ø,ØGØUØUØ`ØgØvØ�؇،Ø�ؚءذػØÁØÆØÈØÔØÙ*Ù:ÙJÙZÙ\ÙlÙ|ٌٌّ٤٫ٲٲٲٲٹÙÏÙÛÙáÙçÙíÙñÙñÙñÙÚ%Ú;ÚGÚMÚSÚYÚ[Ú[ÚiÚDÃnÚnÚ„Ú‡ÚŠÚ—Ú�ÚªÚ­Ú°ÚÚ¸ÚÂÚ ,cj؉؉æ‰ğ‰û‰Š ŠŠ H2@_#_#h#n#‰#�#¹#»#ğ#Ú#$$$+$¨­ÓŞaŞaôaüabb3bbBbHbHbrbyb¤b²b²bßbccc(cTcAckcrc�c�c¤cÈcŞcŞcŞcècH>Lıı8ıBıFıJıOıQıiı�ı�ı‹ıp©Á..XZagmou{‘¤³¸º¿ÉŞô,>(&ä&ä:ä[ä_ä_ägä8öãöãÿãäää ä!ä&äd`µÖ×Ö×ô׸רØØØ"Ø"Ø/Ø1Ø>Ø@ØLØLØgØuØu؀؇ؖءاجخغØÁØĞØÛØáØæØèØôØ$ÙJÙZÙjÙzÙ|ٌٜ٬٬ٱÙÄÙËÙÒÙÒÙÒÙÒÙÙÙïÙûÙÚÚ␍ÚÚÚÚ>ÚEÚ[ÚgÚmÚsÚyÚ{Ú{Ú‰ÚDÃ�Ú�Ú¤Ú§ÚªÚ·Ú½ÚÊÚÍÚĞÚÖÚØÚâÚ ,cj؉؉æ‰ğ‰û‰Š ŠŠ
hl&&4IO P Ÿ6Ÿ6­6¼6Ø6Ş6ğ6ğ6û67 hlFFTio P Ÿ6Ÿ6­6¼6Ø6Ş6ğ6ğ6û67
777 ”;\®J®J¶JºJÓJíJ 777 ”;\KK&K*KCK]KzK›K¤KµKÙKğKğKLL'L4L;LmL~L‚LŠLŠL�L­L±LµL␍Œ×ö¾¾Şæêøş0FZh…‘–¤ÀÉÙÛââèèø|1¿"¿"Õ"Ş"é"#####$#&#,#5#7#=#G#N#Q#Q#[#0 ' ˆ ˆ.ˆNˆTˆZˆZˆ`ˆ„“°È È Ü ã ê î ¡%¡,¡=¡b¡m¡x¡z¡…¡ª¡µ¡À¡Â¡É¡Ò¡Ô¡ß¡æ¡¢("®ß®ß½ßÔßïßïßõß NßNß]ßsßyß ˆP³P³u³|³“³Ÿ³ª³¼³Í³¾³¼³í³´´´!´-´7´>´E´I´K´Q´]´g´n´u´y´y´ƒ´ˆ´“´¥´¶´§´¥´Ö´÷´µ
K+K4KEKiK€K€KŸK®K·KÄKËKıKLLLL-L=LALEL␍Œ×ö��¾ÆÊØŞää&:H_eqv„ ©¹»ÂÂÈÈØ|1¿"¿"Õ"Ş"é"#####$#&#,#5#7#=#G#N#Q#Q#[#0 ' ˆ ˆ.ˆNˆTˆZˆZˆ`ˆ„“°¨ ¨ ¼ Ã Ê Î ò ¡ ¡¡B¡M¡X¡Z¡e¡Š¡•¡ ¡¢¡©¡²¡´¡¿¡Æ¡ğ¡(">Ş>ŞMŞdŞŞŞ…Ş ŞİŞİíİŞ Ş ˆ0³0³U³\³s³³Š³œ³­³�³œ³Í³è³ô³û³´␍´´´%´)´+´1´=´G´N´U´Y´Y´c´h´s´…´–´‡´…´¶´×´ã´ê´ğ´ü´µ␍µµµµ µ,µ6µ=µDµHµHµUµcµsµ…µ–µ‡µ…µ¶µ×µãµêµğµüµ␍¶,¶6¶=¶D¶H¶H¶R¶b¶t¶…¶v¶t¶¥¶¬¶²¶¾¶È¶Ï¶Ö¶Ú¶Ü¶â¶î¶ø¶ÿ¶· µµµ&µ-µ4µ8µ:µ@µLµVµ]µdµhµhµuµƒµ“µ¥µ¶µ§µ¥µÖµ÷µ
· &¶-¶4¶8¶:¶@¶L¶V¶]¶d¶h¶h¶r¶‚¶”¶¥¶–¶”¶Å¶Ì¶Ò¶Ş¶è¶ï¶ö¶ú¶ü¶··· ·&·*·*·4·B·K·d·p·t·t·w·€·ö·Ø V‚V‚s‚A¨{‚Š‚­‚¸‚ʂтâ‚ê‚î‚ñ‚ÿ‚ƒ/ƒ/ƒDƒFƒFƒRƒZƒ^ƒkƒkƒwƒƒƒƒ�ƒ�ƒ�ƒ¬ƒ·ƒȃȃ̓åƒôƒùƒÿƒ
··"·+·D·P·T·T·W·`·Ö·Ø æ€æ€�Ѧ ��=�H�Z�a�r�z�~�����“�¿�¿�Ô�Ö�Ö�â�ê�î�û�û�‚‚‚ ‚ ‚ ‚<‚G‚X‚X‚]‚u‚„‚‰‚�‚š‚Ÿ‚Ÿ‚¤‚¼‚Ë‚Ğ‚Ö‚á‚æ‚æ‚ô‚ı‚ ƒƒƒ!ƒ$ƒ*ƒ/ƒ8ƒJƒSƒdƒtƒtƒyƒ�ƒ‰ƒŒƒ’ƒ’ƒ—ƒ—ƒ—ƒ�ƒ ƒ§ƒ²ƒǃ샄„„ „,„8„>„E„N„R„U„a„g„n„s„s„�„‘„‘„�„�„¦„®„·„Ƅ˄˄݄҄ã„ë„ñ„ü„…………-…3…;…A…F…Q…c…i…q…w…|…|…�…–…¡…§…©…¹…¿…¿…ä… †††$†*†@†Q†W†\†u†{†‹†“†›†¡†¦†¦†º†À†Ö†ç†í†ò† ‡‡!‡)‡1‡7‡<‡<‡R‡X‡n‡‡…‡Ї™‡Ÿ‡°‡¸‡À‡Ƈ͇Ò‡Ò‡è‡î‡ˆˆˆˆ,ˆ2ˆ<ˆDˆLˆRˆYˆYˆYˆkˆtˆ…ˆ•ˆ•ˆšˆšˆ¨ˆ°ˆÁˆÔˆÛˆáˆéˆïˆÿˆ‰␍‰‰‰‰‰‰‰‰‰7‰C‰H‰H‰W‰`‰k‰t‰‰Љ�‰�‰¥‰«‰Á‰Ò‰؉݉ï‰õ‰ú‰Š1Š1Š6Š6ŠBŠJŠMŠSŠYŠ^Š^Š‚ŠŠŠ’Š¢Š¨Š®Š®Š¿ŠİŠİŠâŠâŠîŠöŠùŠ‹‹ ‹ ‹+‹3‹C‹I‹P‹n‹}‹…‹�‹¥‹¨‹¯‹µ‹Í‹Õ‹í‹õ‹ø‹ÿ‹ŒŒŒ$Œ4Œ@ŒHŒKŒRŒXŒhŒwŒƒŒ�Œ¦Œ©Œ°Œ¶ŒÎŒÚŒõŒıŒ��␍�␍�␍�␍����+�A�G�_�r�x�}���•�š��¼�È�Ğ�Ó�Ú�à� ��!�'�.�.�.�3�3�<�T�j�p�ˆ�›�¡�¦�Ñ�×�ê�!�3�P�X�^�c�c�}�‰�•� � �¥�¥�¿�Ë�×�â�â�ç�ç��␍��$�$�)�)�?�E�Q�W�\�n�t�y�ˆ�”� �¦�¬�³�Æ�Ñ�Ú�æ�î�ñ�÷�ı�‘‘%‘-‘E‘M‘P‘V‘\‘t‘|‘œ‘¶‘¾‘Á‘Ǒ͑͑ޑç‘ó‘û‘ş‘’ ’’"’1’9’Q’Y’\’c’i’�’‰’¨’Â’Ê’Í’Ô’Ú’Ú’ê’ó’ÿ’“ „„„„,„;„@„F„Q„V„V„d„m„y„�„‰„‘„”„š„Ÿ„¨„º„ÄÔ„ä„ä„é„ñ„ù„ü„……………␍………"…7…\…s…€…ˆ…�…œ…¨…®…µ…¾…Â…Å…Ñ…×…Ş…ã…ã…ñ…††††††'†6†;†;†B†M†S†[†a†l†q†q†€†‹†�†£†«†±††Á†Ó†Ù†á†ç†ì†ì†‡‡‡‡‡)‡/‡/‡T‡{‡€‡€‡”‡š‡°‡Á‡LJ̇å‡ë‡û‡ˆ ˆˆˆˆ*ˆ0ˆFˆWˆ]ˆbˆ{ˆ�ˆ‘ˆ™ˆ¡ˆ§ˆ¬ˆ¬ˆˆȈވïˆõˆúˆ ‰‰ ‰(‰0‰6‰=‰B‰B‰X‰^‰t‰…‰‹‰�‰œ‰¢‰¬‰´‰¼‰‰ɉɉɉÛ‰ä‰õ‰ŠŠ
““““/“>“F“`“h“k“q“w“�“—“¹“Õ“İ“à“æ“ì“ì“ı“””””$”*”/”A”P”X”s”{”~”…”‹”£”«”Í”ê”ò”õ”ü”••••••••#•/•5•:•L•R•W•e•q•z•†•�•‘•˜•�•£•µ•ĕ̕ä•ì•ï•ö•ü•––;–U–]–`–g–m–m–m–~–‡–“–›–�–¥–«––Ñ–İ–ø–—— Š
——(—4—V—s—{—~—…—‹—‹—‹—‹—‹—�—�—£—¾—Ä—Ï—Ô—Ô—ç—ı—˜˜˜˜#˜F˜L˜W˜W˜i˜r˜ƒ˜ˆ˜š˜ª˜ª˜¯˜¯˜˜ؘޘì˜û˜™™™)™/™=™L™Q™Q™g™m™Š™¢™¢™Ì™Ò™×™ã™ì™û™û™šššš9šQšQš{š�š†š’š›šªšªš¯š¯šÅšËšèš››*›0›5›A›J›Y›Y›^›^›t›z›—›¯›¯›Ù›ß›á›í›ö›œœœœœœœ.œ0œBœOœOœOœ_œoœtœ˜œ¤œ¥œªœ¿œÜœìœ� �&�&�&�+�0�E�X�–�¦�¬�®�³�Ä�Ó��␍����!�!�*�<�O�X�g�g�l�q�€�‰�”�–�Ÿ�ª�ª�Ë�Ò�Ø�à�ë�ñ�ŸŸŸŸ Ÿ Ÿ%Ÿ*Ÿ1Ÿ8Ÿ?ŸFŸOŸ^Ÿ^Ÿ^ŸcŸcŸcŸuŸzŸzŸŒŸ—ŸŸŸ§Ÿ­Ÿ­Ÿ­Ÿ²Ÿ²Ÿ½ŸΟÑŸİŸæŸòŸùŸÿŸ     # / 8 D K Q V V V V [ ` ` k o o { „ ‡ ‡ ’ ” ª ± · Æ Ñ Ü â î ò ò ş ¡ ŠŠ Š1ŠDŠKŠQŠYŠ_ŠoŠuŠ}ŠƒŠƒŠƒŠˆŠˆŠˆŠˆŠˆŠ§Š³Š¸Š¸ŠÇŠĞŠÛŠäŠïŠúŠÿŠÿŠ‹‹1‹B‹H‹M‹_‹e‹j‹ƒ‹¡‹¡‹¦‹¦‹²‹º‹½‹ËÉ‹΋΋ò‹ú‹ŒŒŒŒŒ/ŒMŒMŒRŒRŒ^ŒfŒiŒpŒvŒ{Œ{Œ›Œ£Œ³Œ¹ŒÀŒŞŒíŒõŒ␍��� �%�=�E�]�e�h�o�u�u�u�”�¤�°�¸�»�Â�È�Ø�ç�ó���� �&�>�J�e�m�p�w�}�}�}�}�‚�‚�‹�›�±�·�Ï�â�è�í�ÿ��
¡ �&�,�8�@�C�J�P�y���‘�—�������£�£�¬�Ä�Ú�à�ø� ���A�G�Z�‘�£�À�È�Î�Ó�Ó�í�ù�‘‘‘‘‘/‘;‘G‘R‘R‘W‘W‘q‘}‘‰‘”‘”‘™‘™‘¯‘µ‘Á‘Ǒ̑ޑä‘鑸‘’’’’#’6’A’J’V’^’a’g’m’r’†’•’�’µ’½’À’Æ’Ì’ä’ì’ “&“.“1“7“=“=“N“W“c“k“n“u“{“€“’“¡“©“Á“ɓ̓ӓٓñ“ù“”2”:”=”D”J”J”Z”c”o”w”z”€”†”‹”Ÿ”®”¶”Дؔ۔á”ç”ÿ”•)•E•M•P•V•\•\•m•v•‚•Š•�•”•š•Ÿ•±•À•È•ã•ë•î•õ•û•––=–Z–b–e–l–r–r–r–r–r–w–w–�–“–Ÿ–¥–ª–¼––Ç–Õ–á–ê–ö–ş–————%—4—<—T—\—_—f—l—„—Œ—«—Å—Í—Ğ—×—İ—İ—İ—î—÷—˜ ˜˜˜˜2˜A˜M˜h˜p˜s˜z˜€˜˜˜¤˜Ƙã˜ë˜î˜õ˜û˜û˜û˜û˜û˜™™™.™4™?™D™D™W™m™s™~™€™€™“™¶™¼™Ç™Ç™Ù™â™ó™ø™
¡¡¡-¡4¡:¡B¡M¡X¡^¡h¡k¡o¡o¡w¡~¡�¡ƒ¡�¡’¡›¡�¡�¡©¡«¡É¡Ğ¡Û¡æ¡é¡ï¡ô¡ô¡ÿ¡¢¢¢¢¢¢&¢(¢>¢E¢K¢Z¢e¢p¢v¢‚¢†¢†¢’¢›¢�¢�¢©¢«¢Á¢È¢΢Ö¢á¢ì¢ò¢ü¢ÿ¢££ ££££"£&£/£2£2£=£?£]£d£o£z£}£ƒ£ˆ£ˆ£š£�£�£ª£³£¶£¶£Á£ãÙ£à£æ£ø£¤¤¤¤¤$¤)¤)¤4¤9¤9¤D¤G¤K¤R¤W¤\¤a¤a¤u¤z¤z¤‡¤‹¤œ¤¤¤¨¤¼¤äǤǤÔ¤à¤è¤î¤ş¤¥¥%¥0¥4¥4¥A¥I¥Q¥W¥W¥W¥W¥W¥Y¥Y¥g¥n¥{¥‡¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥•¥—¥—¥®¥¶¥Â¥Â¥ã¥ò¥ ššš š š2šHšNš\škšpšpšƒš™šŸš­š¼šÁšÁšךİšúš››<›B›G›S›\›k›k›p›p›†›Œ›©›Á›Á›ë›ñ›ö›œ œœœ œ œ5œ;œXœpœpœšœ œ¥œ±œºœÉœÉœΜΜäœêœ� � �I�O�Q�]�f�q�q�q�q�v�„����� �²�¿�¿�¿�Ï�ß�ä�����/�L�\�€���–�–�–�›� �µ�È�ŸŸŸŸ#Ÿ4ŸCŸuŸ}ŸƒŸ…ŸŠŸ‘Ÿ‘ŸšŸ¬Ÿ¿ŸÈŸןןÜŸáŸğŸùŸ     ; B H P [ a q w  Š � � • š ¡ ¨ ¯ ¶ ¿ ΠΠΠÓ Ó Ó å ê ê ü ¡¡¡¡¡¡"¡"¡-¡>¡A¡M¡V¡b¡i¡o¡t¡t¡¡�¡“¡Ÿ¡¨¡´¡»¡Á¡Æ¡Æ¡Æ¡Æ¡Ë¡Ğ¡Ğ¡Û¡ß¡ß¡ë¡ô¡÷¡÷¡¢¢¢!¢'¢6¢A¢L¢R¢^¢b¢b¢n¢w¢z¢z¢…¢‡¢�¢¤¢ª¢²¢½¢È¢΢Ø¢Û¢ߢߢç¢î¢ñ¢ó¢ş¢£ £££££9£@£K£V£Y£_£d£d£o£s£s££ˆ£‹£‹£–£˜£®£µ£»£Ê£Õ£à£æ£ò£ö£ö£¤ ¤¤¤¤¤1¤8¤>¤F¤Q¤\¤b¤l¤o¤s¤s¤{¤‚¤…¤‡¤’¤–¤Ÿ¤¢¤¢¤­¤¯¤ͤÔ¤ߤê¤í¤ó¤ø¤ø¤
¦ ¦¦%¦%¦H¦U¦`¦i¦r¦}¦„¦„¦�¦�¦‘¦£¦Á¦ͦͦü¨x¿Ùw4w4‰4‹4�4˜4¤4°4Å4Å4ô4ø4ı4 55&5)54575?5I5l_v>|>|T|c|h|}|j|Œ|�|�|œ|±|�|À|Æ|ß|ø|}*}C}M}„�~l~lœl¤lªl±l¸lºl½lÄlËlËlÜlàlælælûlmm␍m&mImjmom�m•m¡m¬m±mÁmÄmØmŞmãmémëmñmômúmÿmn ¥¥¥¥#¥&¥&¥1¥3¥I¥P¥V¥h¥s¥~¥„¥‰¥‰¥”¥™¥™¥¤¥©¥©¥´¥·¥»¥Â¥Ç¥Ì¥Ñ¥Ñ¥å¥ê¥ê¥÷¥û¥ ¦¦¦,¦3¦7¦7¦D¦P¦X¦^¦n¦r¦ƒ¦•¦ ¦¤¦¤¦±¦¹¦Á¦ǦǦǦǦǦɦɦצަë¦÷¦§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§&§2§2§S§b§z§|§ˆ§•§•§¸§ŧЧÙ§â§í§ô§ô§ş§ş§¨¨1¨=¨=¨lªx¿Ùw4w4‰4‹4�4˜4¤4°4Å4Å4ô4ø4ı4 55&5)54575?5I5l_v®}®}Ä}Ó}Ø}í}Ú}ü}ÿ}ÿ} ~!~~0~6~O~h~�~š~³~½~„�îmîm nnn!n(n*n-n4n;n;nLnPnVnVnknunun}n–n¹nÚnßnoooo!o1o4oHoNoSoYo[oaodojooorozoƒo“o¶oÄoÜoáoåo
nn#nFnTnlnqnunšn­n²nÀnØnİnánoo9oLoQoWo\o_oaogomosoxo~o†o†o�o™o§o¿oÄoÈoíoıo p3p8pHpkpyp‘p–pšp¿pÒpÒpípípípûpqqqq#q;q=q=qKqcqcququq~q‹q¡qÁqÛqãqîqrrrr rr,r4r?rZr\rbr|r„r�r�r¨r¨rÂrH…“p…p…‡…�…­…´…Ë…æ…ø…ü…?†L��^~^~r~~•~�~¤~¦~¿~Ø~ã~î~ö~4IR>×>×G×G×J×X×f×i×n×ì=�ù�ù¶ù¹ù×ùîùÿùÿùú ú%ú%ú@úFúKúKúTúbúú—úœú£ú©ú«úÈúØúİúäúêúìúìúÿúûûûû pp"p0pHpMpQpvp†p©p¼pÁpÇpÌpÏpÑp×pİpãpèpîpöpöpq qq/q4q8q]qmq�q£q¨q¸qÛqéqrr
û&û6ûHûMûMûMûTû[ûbûwû~ûšûšû¬ûÌL»h¥h¥‚¥�¥˜¥¡¥©¥¬¥³¥·¥À¥Ó¥×¥İ¥ë¥¦¦$¦)¦5¦:¦A¦M¦R¦U¦_¦W¦o¦x¦‰¦‡¦¦—¦ ¦¦¦¦¦´¦·¦Ë¦Ô¦İ¦ä¦è¦í¦§§%§3§O§[§[§s§„§„§‹§¤§°§¸§Ë§Ò§æ§ï§ö§ú§¨ r/rBrBr]r]r]rkrƒr…r…r…r“r«r­r­r»rÓrÓrårårîrûrs1sKsSs^sqsususus|s‚sœs¤s¯sÊsÌsÒsìsôsÿs␍ttt2tH…“p…p…‡…�…­…´…Ë…æ…ø…ü…?†L��ÎÎâï€ñ€€/€H€S€^€f€4IR^×^×g×g×j×x׆׉×�×ì=şúşú&û)ûGû^ûoûoûŠû�û•û•û°û¶û»û»ûÄûÒûïûü üüüü8üHüMüTüZü\ü\üoüuüuüuü…üzü–ü¦ü¸ü½ü½ü½üÄüËüÒüçüîü
¨¨.¨[¨b¨f¨h¨s¨¨ƒ¨˜¨š¨«¨µ¨À¨Ê¨Ù¨è¨©©© ©©“©Pq�MM2MCMVMmMŠM¥M«M´MÂMÈMËM×MŒ papa€a¤a¤a²a²a²a²a»a»aÂaİaòaúaúabbb#b#b1b7b7bObObUb{b (kqŠŠ&Š2ŠBŠIŠOŠ @KW6è6èDèLèSèrèèè‚è„èŠè!$/4æŞæŞóŞß␍ßß"$).¶Ş¶ŞÃŞØŞİŞãŞ#$#(†Ş†Ş•ޫް޶Ş$€ğLWWaq‡�™´¹Éßçñ  ' 1 ; E O Y c m w � ‹ • Ÿ © ¿ É Ó İ ç ñ û  % / 9 O Y c m w � ‹ • Ÿ © ³ ½ Ç Ñ Û å ï ù !␍!!!!+!5!?!I!S!]!g!q!{!‰!%¤C¨œ¨œ¾œÅœÚœëœıœÿœ� ��'�1�<�S�V�X�j�p�€�Š�”�›�¦�»�Ã�Ã�Ù�Ù�Ù�í�&$5:ßß$ß9ß>ßDß'¤Diğ�ğ��␍�"�3�E�G�N�T�d�o�y�„�›��� �²�¹�É�Ó�İ�ä�ï�Ÿ Ÿ Ÿ!Ÿ!Ÿ!Ÿ6Ÿ((&, 0 0-040>0D0J0)0]eFLFL\LoL~L„L‡L�L*  ßş#ş# $($.$;$B$^$d$d$d$q$s$~$ˆ$�$�$©$¯$¹$¿$Ğ$Ğ$Û$å$å$÷$ı$␍%%% % %@%F%X%k%q%t%z%z%|%‚%ˆ%Š%Š%Š%›%¥%ª%ª%¿%É%É%İ%æ%ì%ò%&␍&&+&/&/&7&=&C&M&T&[&d&v&v&›&Ÿ&¥&«&½&Ğ&Ö&Ú&à&æ&ì&ì&î&ò&ø&ş&' ' ' ' '4'E'E'\'i'm'u'‡'§'§'­'°'´'º'º'Ì'İ'ò'(( (#(4(8(>(W(Y(_(l(n(z(˜(�(©(Ì(×(İ(ã(é(ò(ø( ı
))#)')8)<)B)[)])c)p)r)~)œ)¢)¨)®)·)½)Ú)Í)ô)ı)*****$*.*C*H*H*H*e*g*„*†*£*©*±*µ*¼*ß*å*ë*÷*+++&+++++2+6+@+N+P+X+]+e+p+v+…+Š+�+•+�+¢+±+È+Ø+å+ğ+ ,,*,*,1,F,K,T,a,f,l,q,q,x,|,†,”,–,�,¢,¦,°,¼,Ã,Ç,Ï,×,ß,ñ,ÿ,-----;-;-I-O-T-X-]-]-]-]-c-e-e-ˆ-�-”-›-±-³-³-³-¾-¾-¾-Ã-ì.+4.wÉÉ0É4ÉLÉTÉ\ÉfÉjÉqÉwɋɓɘɛɦɱɹÉÄÉÏÉÑÉçÉîÉõÉÊ Ê␍ÊÊ#Ê%Ê1Ê:Ê:ÊPÊ[ÊsÊyʂʓʙʢʴʺʺÊÂÊÆÊÑÊÖÊèÊóÊ÷ÊËË ËËËË+Ë+Ë0ËBËHËË,Ô@NåNådåkånå’å’å¯åÂåÕåèåíåíå ææ,æ?æGæGæIæIæIæ\æ^æ^æ^æeæxæ‹æ‹æ‹æ�æ©æ¼æÒæ×æÛæâæ÷æ ııÌL»ˆ¥ˆ¥¢¥­¥¸¥Á¥É¥Ì¥Ó¥×¥à¥ó¥÷¥ı¥ ¦(¦5¦D¦I¦U¦Z¦a¦m¦r¦u¦¦w¦�¦˜¦©¦§¦Ÿ¦·¦À¦Æ¦Æ¦Ô¦×¦ë¦ô¦ı¦§§␍§$§<§E§S§o§{§{§“§¤§¤§«§Ä§Ğ§Ø§ë§ò§¨¨¨¨%¨*¨1¨N¨{¨‚¨†¨ˆ¨“¨Ÿ¨£¨¸¨º¨Ë¨Õ¨à¨ê¨ù¨©!©!©$©,©1©³©Pw‡¶M¶MÒMãMöM␍N*NENKNTNbNhNkNwNŒ papa€a¤a¤a²a²a²a²a»a»aÂaİaòaúaúabbb#b#b1b7b7bObObUb{b (kqŠŠ&Š2ŠBŠIŠOŠ @KW¦é¦é´é¼éÃéâéïéïéòéôéúé!$/4VàVàcàxà}àƒà"$).&à&à3àHàMàSà#$#(ößößàà à&à$€ğLWWaq‡�™´¹Éßçñ  ' 1 ; E O Y c m w � ‹ • Ÿ © ¿ É Ó İ ç ñ û  % / 9 O Y c m w � ‹ • Ÿ © ³ ½ Ç Ñ Û å ï ù !␍!!!!+!5!?!I!S!]!g!q!{!‰!%¤CȜȜޜåœúœ �� �&�,�<�G�Q�\�s�v�x�Š��� �ª�´�»�Æ�Û�ã�ã�ù�ù�ù�␍�&$5:†à†à”à©à®à´à'¤Di��&�-�B�S�e�g�n�t�„���™�¤�»�¾�À�Ò�Ù�é�ó�ı�ŸŸ#Ÿ+Ÿ+ŸAŸAŸAŸVŸ((&, 0 0-040>0D0J0)0]e¶L¶LÌLßLîLôL÷LÿL*  ß$$@$H$N$[$b$~$„$„$„$‘$“$�$¨$¯$¾$É$Ï$Ù$ß$ğ$ğ$û$%%%%-%3%8%?%?%`%f%x%‹%‘%”%š%š%œ%¢%¨%ª%ª%ª%»%Å%Ê%Ê%ß%é%é%ı%& &&(&-&5&K&O&O&W&]&c&m&t&{&„&–&–&»&¿&Å&Ë&İ&ğ&ö&ú&'' ' '''''$')')')')'T'e'e'|'‰'�'•'§'Ç'Ç'Í'Ğ'Ô'Ú'Ú'ì'ı'(&(.(?(C(T(X(^(w(y((Œ(�(š(¸(¾(É(ì(÷(ı() )))*);)C)G)X)\)b){)})ƒ)�)’)�)¼)Â)È)Î)×)İ)ú)í)**#*#*8*=*=*D*N*c*h*h*h*…*‡*¤*¦*Ã*É*Ñ*Õ*Ü*ÿ*+ ++.+5+;+F+K+K+R+V+`+n+p+x+}+…+�+–+¥+ª+°+µ+½+Â+Ñ+è+ø+,,,,.,J,J,Q,f,k,t,�,†,Œ,‘,‘,˜,œ,¦,´,,¾,Â,Æ,Ğ,Ü,ã,ç,ï,÷,ÿ,- -$-0-0-8-8-[-[-i-o-t-x-}-}-}-}-ƒ-…-…-¨-®-´-»-Ñ-Ó-Ó-Ó-Ş-Ş-Ş-ã- /+4.w6É6ÉPÉTÉlÉtÉ|É†ÉŠÉ‘É—É«É³É¸É»ÉÆÉÑÉÙÉäÉïÉñÉÊÊÊ Ê+Ê-Ê8ÊCÊEÊQÊZÊZÊpÊ{ʓʙʢʳʹÊÂÊÔÊÚÊÚÊâÊæÊñÊöÊËËË%Ë'Ë+Ë:Ë:Ë:ËKËKËPËbËhËÖË,Ô@nånå„å‹å�å²å²åÏåâåõåæ␍æ␍æ+æ9æLæ_ægægæiæiæiæ|æ~æ~æ~æ…æ˜æ«æ«æ«æ¾æÉæÜæòæ÷æûæçç*ç1ç1ç4çYç-LAP/$/$=$N$Z$u$z$š$œ$·$Ò$Ò$Ú$á$%.P~� Š Š®Š»ŠÉŠÛŠæŠôŠ‹‹!‹,‹:‹@‹F‹/4
çççç9ç-LAP/$/$=$N$Z$u$z$š$œ$·$Ò$Ò$Ú$á$%.P~� Š Š®Š»ŠÉŠÛŠæŠôŠ‹‹!‹,‹:‹@‹F‹/4 ?6?6M6Y6j6|6…6“6™60|ºU^
?6?6M6Y6j6|6…6“6™60|ºU> ^
> €
` ‡
g •
u  
€ Æ
¦ Æ
¦ Ï
¯ Ñ
± Ñ
± Ø
¸ ÿ
ß    $ @ K K W _ p y — ¢ ¤ ½ Ã Î Ş ğ ù     > C Q Z Z a p ‡ ‡ – Ÿ ³ º Á Æ Ñ × ß ␍␍␍␍%␍1␍@␍T␍Y␍a␍m␍␍␍–␍�␍¥␍µ␍Ç␍Í␍Ö␍Ö␍å␍ë␍ÿ␍#5:J]ey—®²¾Õñ  0@ENN`dp‡£µ»ÆÒâò
æ 
æ %+115®1ŒÄãæÚæÚÛÛÛÛÛ$Û3Û>ÛDÛIÛKÛWÛ^ÛfÛlÛrÛvÛvۅی۔ۚ۠ۢۢۮÛ28 W/W/e/k/w/‚/“/�/¤/ª/3@t€ëëë ë&ëEëRëRëUëWë]ë4ÌS®®Ôçîõü ''9DX`iqv|’¢·¼Õíññöÿ  % . 6 ; B T d y { ” ¬ ° ° Ä Ì Õ İ â è ş 
õ #
  + + 7 ? P Y w ‚ „ � £ ® ¾ Ğ Ù ä é ï ö  # 1 : : A P g g v  “ š ¡ ¦ ± · ¿ å î õ ú ␍␍ ␍4␍9␍A␍M␍_␍_␍v␍}␍…␍•␍§␍­␍¶␍¶␍Å␍Ë␍ß␍ä␍ô␍*=EYw�’�µÑãéô %..@DPgƒ•›¦²ÂÒäêêïññöö �1ŒÄãÆÚÆÚâÚîÚòÚöÚıÚÛÛÛ$Û)Û+Û7Û>ÛFÛLÛRÛVÛVÛeÛlÛtÛzÛ€Û‚Û‚Û�Û28 W/W/e/k/w/‚/“/�/¤/ª/3@t€–é–é¤é¯é¶éÕéâéâéåéçéíé4ÌS>>dw~…Œ’”›¢¥¥··ÉÔèğù "2GLe}��†�™­µ¾ÆËÒäô  $<@@T\emrx��³¸Ñéí    ' I T Z r Š � š ® ¿ Ç É Ï á ñ  (
 A
!
9
=
=
Q
Y Y
b ]
j p
o p
v p
Œ u
œ —
± ¹
 Ä
Ï Ê
ç â
ë ú
ş ÿ
ş 
ş  & / 7 9 ? Q a v x ‘ © ­ ­ Á É Ò Ú ß æ ü  ! & ? W [ n n n s • · Â È à ø ø ø ␍
 % G R X p ˆ ˆ ˆ ” š ¤ ¯ Á Ñ è ÿ  - - @ [ [ [ | Œ š š £ ­ º Ô â é ü ş ␍,␍%␍D␍T␍n␍n␍‡␍5D{ˆ®®¾ÒÛáóó÷ú6\Ob0‰0‰P‰_‰h‰q‰u‰y‰…‰Š‰�‰�‰ ‰¤‰¬‰Ä‰Ç‰Ó‰70ü®ã®ã·ã¼ãÅãÌãÎãÓã8tÚşş '.9OOazz…‰”Á›Ğçø *BGOSeX„˜œœ¡²úÔ '28Ldi}…�–›¢´ÄÚÜõ␍&>CKO^Q}‘•¤¤¤¤·½ÇÎáüü(66JXf{�“²ÁºÙéğ'MO{{{†ÄÉÔÚå!0GXs‡‹�¡Ãøå%06Jbg{ƒŒ”™ ²ÂØÚó 1J^bqqq„Š”›®ÉÉÉåõ%>3Qdiˆ—�¯¿Ğîî:::Z9DmzVVfzƒ‰››Ÿ¢ª:lw�N}N}d}s}x}�}z}œ}Ÿ}Ÿ}¬}Á}®}Ğ}Ö}ï}~!~:~S~]~;<‰”'06:E<”)şíşíî ␍␍ ␍1␍A␍X␍o␍†␍�␍�␍°␍Ë␍Ë␍Ë␍ì␍ü␍
îî'î)î9îDîVîaîlî{îŒî“î¬î°îÁîÁîËîÒîåîîîüîï,ï1ïNï=d(=`ˆ`ˆlˆ€ˆƒˆ—ˆŸˆ£ˆ­ˆ·ˆ¿ˆÂˆÈˆ>$uºXFXF|FFƒF�F™F¤F´F¼FÆFîFîFşFGGGGG(G-G-G=GBGBGRGWGWGgGlGlG|G�G�G‘G–G–G–G™G™G²GÀG×GêGêGìGìGûGHHH HHH'H7HDH\HdHjHjH~H~H‡HŠHHI?È oş¨ş¨©#©&©4©B©W©`©{©”©¦©±©©Æ©Ø©Û©æ©ï©û©ª?ª4ªªOªfªzª†ª”ªµªʪ«%« «@«C«H«K«K«R«h«o«|«�«�«�«°«°«È«Ì«ù«ù«¬¬¬&¬*¬;¬E¬V¬`¬s¬x¬x¬ˆ¬Œ¬�¬§¬¸¬¬Õ¬á¬æ¬æ¬æ¬­­­+­@­@­E­O­^­c­i­n­n­s­}­Œ­‘­—­œ­œ­¢­¨­­­­­µ­È­Ô­á­í­ü­® ®®,®@®Q®^®c®{®�®¥®²®º®É®Ó®Ù®â®ë®ë®ğ®ğ®ğ®ğ®ğ®¯¯¯¯.¯6¯Q¯b¯o¯q¯~¯ƒ¯ƒ¯ƒ¯�¯œ¯¡¯¡¯¨¯¶¯»¯Ó¯߯ñ¯ı¯° °°°@°L°R°X°g°o°w°¤°µ°°İÒ°Ò°×°×°ްì°ñ°±±±"±(±1±6±6±6±6±6±N±S±S±S±S±S±d±d±d±d±d±d±d±d±d±d±|±’±š±µ±ƱÓ±Õ±â±ò±÷±÷±÷±²²&²+²M²Y²Y²^²^²^²^²^²^²^²^²s²x²x²x²‰²�²•²•² ²²²ʲß²³!³,³=³B³B³B³K³q³z³‹³‘³²³˳ӳ۳鳴´"´C´\´\´\´\´\´~´·´À´Æ´Ì´Ñ´Ú´ã´è´è´è´è´÷´ µ)µ9µ?µDµDµWµkµ‘µ¤µªµªµ¯µ¯µ¾µÒµğµ  2¶X¶k¶q¶q¶v¶v¶v¶�¤¶¬¶Ƕضå¶ç¶ö¶ø¶ø¶ø¶ø¶ø¶ · · · · · · · · · · · · · · · ··*·5·7·7·@·B·B·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·V·X·X·o·w·ƒ·ƒ·‡·Œ·œ·¸·Ğ·ß·ë·¸¸¸(¸4¸Z¸z¸š¸¾¸À¸Ó¸¹Ù¸¹¹ ¹/¹7¹R¹c¹f¹€¹�¹š¹²¹²¹ݹà¹ï¹º$º8ºTº@ºpº…º£ºغÖº˺Àº±ºæºæºæºéºîºñº »»G»i»i»”»—»¦»º»Û»ï» ¼÷»'¼'¼E¼z¼x¼m¼b¼S¼ˆ¼ˆ¼ˆ¼‹¼�¼�¼—¼§¼ȼÔ¼)À@Ä„±®Ä®ÄÄÄÈÄÓÄÚÄåÄùÄùÄÅÅÅ)Å5ÅBÅFÅWÅWÅ`ÅeÅmÅ}ŋŚťŸŸÅĞÅĞÅëÅÆÆ+Æ-Æ-Æ7Æ?Æ?ÆIÆQÆQÆQÆbÆbÆbÆhÆpÆvÆ{Æ{Æ�ƉÆ�ƓƘƘƮƾÆÈÆׯÜÆäÆäÆéÆéÆğÆÇÇ Ç(Ç.Ç=ÇBÇJÇPÇPÇUÇ\ÇgǛǪǴǼÇÂÇ×ÇİÇâÇâÇâÇâÇâÇâÇâÇâÇâÇíÇûÇ ÈÈÈ(È-È:ÈBÈGÈGÈGÈOÈXÈaÈnÈvÈ‚È�ÈÁÈÉÈØÈâÈüÈÉÉÉÉ!É)É>ÉFÉNÉcÉeÉpÉxÉ�É�ɕɦɮɵɻÉÁÉÅÉÎÉÓÉ÷ÉÊ Ê Ê,Ê1Ê=ÊHÊMÊMÊMÊcʀʅÊ�Ê�ʦʮÊÃÊÈÊÓÊÛÊğÊõÊõÊË%Ë-ËBËNËSË_ËjËoËoËoËoËoËoËzËzËzËzËzËzËzËzËzËzËzËz˅˔˗˥˵˻ËÃËÒË×ËßËçËéËñËÌÌÌÌÌ Ì=ÌFÌNÌVÌ]ÌqÌz̵̧̟̺̃̋̿̕ÌÑÌÍ ÍÍ&Í@ÍHÍMÍMÍMÍVÍ_ÍbÍlÍzÍŒÍ�͠ͲͲͲͽÍÂÍßÍäÍäÍíÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍòÍıÍ Î!Î4Î<ÎKÎPÎXÎ_ÎlÎuÎ~ΆÎ�ΒΒΚ΢ÎÀÎÈÎËÎÍÎİÎçÎçÎçÎéÎşÎÏÏÏÏ"Ï"Ï+Ï0Ï8Ï?ÏLÏaÏhÏyυϢϻÏĞÏåÏìÏìÏñÏñÏñÏñÏñÏñÏñÏùÏĞĞ Ğ$Ğ$Ğ,Ğ4ĞAĞFĞFĞFĞJĞOĞOĞ_ĞdĞdĞdĞpĞwĞ}ЇЌУвкĞËĞÓĞöĞüĞÑÑ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑLine truncated 
UUU U%U'U8U=USU?UbUhUhUpUyUyUƒUƒU›UËUÔUàUäUòUVıU V V2VG ;zFßFßeßnßq߃ߙߛߤߩßÊßèß÷ßà)àAàHànàŒà›à¸àÉàààäàäàèàíàòàüàÿà áá'á*á*á*á*á/á5áQá_ákátáˆá�á™áµáÀáÌáÕáéáéáøáıáıá âHP‡—@@'@@I@6@X@g@o@z@|@‡@’@’@´@º@IPÅÕŞøŞøòø÷øùù␍ù:ùPù<ùmù_ù…ù�ùJŒ¥ÄV÷V÷‰÷µ÷µ÷È÷Ì÷î÷øøøøøø3ø?øPøUøføzøø�ø�ø�ø�ø»ø»øØøKP�­Ö;Ö;ÿ;<<<0<?<N<]<k<v<y<‰<Lè7--A-D-G-M-R-i-€-—-»-×-Ú-ù-.%.2.H.[.`.k.s.s.}.}.ˆ.�.¢.¨.Ç.æ.è.ı./"/A/I/T/T/^/^/p/®/Æ/Ø/M$ ŞYŞY ZòYZZNLx‡¶Ë¶ËÈËİËîËÿËÌÌÌ)Ì:Ì@ÌrÌOTHY(d(d:d<dEdNd\dadjdmdrd€dŠd�d—dP¨!G€b€b�b™b¬b¹bÅbÑbİbébcccc#c*c3cJcacfcxc‡c“c¥c¥c®cÑcÑcÓcæcècddd(dQhî„oo1o<oLo•oœo°o·o¿oÇoĞoØoàoâoêoòoùop p7p@p@pupŸp¨pÊpäpq+q7qYq[qbqiqiqŒq¨qÏqëqr.rUrqr˜r´rÛr÷rss-s:s?s?sNs[s`s`sgsrs„sœs´sÌsÎsÎsÎsÕsÕsâsçsçsçsøstt.tjtqtqtqtyt–t¤tÂtËtÔtátït u%u%u%u7uEuauuuuŠu�u¼u¾uÕuÛuìuõu÷uvvvv"v"vFvHvOv`vivkvyv{v‰v‹v™v™v¹v¹v¹v¹vÙv␍w3w;w?wGwKwYwgwiwqwuwyw�w�w�w�w·wÂwØwìw x%x0x:xAxZxfxmx†x†x˜x�xŸx¥x¶xÇxÖxİxîx÷xùxy yyy'y'y'yKyKyjyqyxy{y‡yŠy˜yœyªy®y¼yÀyÀyÙyàyåyóyz␍z(zHz[zjzlz{z}zŒz–z–z¤z­zÃzÊzïzôz{M{R{`{b{p{y{“{•{—{�{¯{¸{º{È{Ê{Ø{Ú{è{è{|||||'|'|'|2|N|s|Œ|‘|‘|‘|³|¸|¸|¸|Ø|İ|İ|İ|ü|}}} *DRYln�œ•´ÄŞŞ÷5D{ˆÎÎŞòû"6\Ob0‰0‰P‰_‰h‰q‰u‰y‰…‰Š‰�‰�‰ ‰¤‰¬‰Ä‰Ç‰Ó‰70üÎãÎã×ãÜãåãìãîãóã8tÚnn�—�©¿¿Ñêêõù1 @Wh|€…š²·¿ÃÕÈô  "jDy—¢¨¼ÔÙíõş $4JLe}��–®³»¿ÎÁí'-7>Qllˆ˜¦¦ºÈÖëş"1*IY`q—ˆ½¿ëëëö49DJUw‘~ ·Èã÷û3hUw• ¦ºÒ×ëóü "2HJc{¡ºÎÒáááôú 999Uess‡•®£ÁÔÙø /@^^€€‡ªªªÊ9Dmzvv†š£©»»¿ÂÊ:lw�¾~¾~Ô~ã~è~ı~ê~ 1@F_x‘ªÃÍ;<‰”&&6GPVZe<”)îî&î*î6îGîIîYîdîvî�îŒî›î¬î³îÌîĞîáîáîëîòîïïï0ïLïQïnï=d(=`ˆ`ˆlˆ€ˆƒˆ—ˆŸˆ£ˆ­ˆ·ˆ¿ˆÂˆÈˆ>$uºXFXF|FFƒF�F™F¤F´F¼FÆFîFîFşFGGGGG(G-G-G=GBGBGRGWGWGgGlGlG|G�G�G‘G–G–G–G™G™G²GÀG×GêGêGìGìGûGHHH HHH'H7HDH\HdHjHjH~H~H‡HŠHHI?È onªnª‹ª“ª–ª¤ª²ªǪЪ몫«!«2«6«H«K«V«_«k«~«¯«¤«Š«¿«Ö«ê«ö«¬%¬:¬^¬r¬t¬•¬{¬°¬³¬¸¬»¬»¬¬ج߬ì¬ñ¬­␍­ ­ ­8­<­i­i­�­†­†­–­š­«­µ­Æ­Ğ­ã­è­è­ø­ü­␍®®(®2®E®Q®V®V®V®x®‰®�®›®°®°®µ®¿®ήӮٮޮޮã®í®ü®¯¯ ¯ ¯¯¯¯¯%¯8¯D¯Q¯]¯l¯v¯|¯…¯œ¯°¯Á¯ίÓ¯ë¯ş¯°"°*°9°C°I°R°[°[°`°`°`°`°`°p°p°p°ˆ°�°¦°Á°Ò°ß°á°î°ó°ó°ó°ş° ±±±±&±+±C±O±a±m±s±{±�±б°±¼±±ȱױ߱籲%²2²4²B²B²G²G²N²\²a²t²€²Œ²’²˜²¡²¦²¦²¦²¦²¦²¾²òòòòòԲԲԲԲԲԲԲԲԲԲ첳
³%³6³C³E³R³b³g³g³g³p³г–³›³½³ɳɳγγγγγγγγã³è³è³è³ù³´´´´"´:´O´p´‘´œ´­´²´²´²´»´á´ê´û´µ"µ;µCµKµYµƒµŒµ’µ³µ̵̵̵̵̵îµ'¶0¶6¶<¶A¶J¶S¶X¶X¶X¶X¶g¶{¶™¶©¶¯¶´¶´¶ǶÛ¶···· · ·.·B·`·p·v·{·{·�·¢·È·Û·á·á·æ·æ·æ·ş·¸¸7¸H¸U¸W¸f¸h¸h¸h¸h¸h¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸‹¸š¸¥¸§¸§¸°¸²¸²¸ƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸȸȸ߸ç¸ó¸ó¸÷¸ü¸ ¹(¹@¹O¹[¹q¹‹¹�¹˜¹¤¹ʹê¹
º.º0ºCºqºIºŒºŒº�ºŸº§ººÓºÖºğºşº
»"»"»M»P»_»s»”»¨»Ä»°»à»õ»¼H¼F¼;¼0¼!¼V¼V¼V¼Y¼^¼a¼{¼‰¼·¼Ù¼Ù¼½½½*½K½_½{½g½—½—½µ½ê½è½ݽÒ½ýø½ø½ø½û½¾¾¾¾8¾D¾™Á@Ä„±ÆÆ4Æ8ÆCÆJÆUÆiÆiÆtƅƌƙƥƲƶÆÇÆÇÆĞÆÕÆİÆíÆûÆ
ÇÇ(Ç(Ç@Ç@Ç[LJLJǛÇ�Ç�ǧǯǯǹÇÁÇÁÇÁÇÒÇÒÇÒÇØÇàÇæÇëÇëÇñÇùÇıÇÈÈÈÈ.È8ÈGÈLÈTÈTÈYÈYÈ`ÈvȆÈ�ȘÈ�ȭȲȺÈÀÈÀÈÅÈÌÈ×È ÉÉ$É,É2ÉGÉMÉRÉRÉRÉRÉRÉRÉRÉRÉRÉ]ÉkÉ{É�ɉɘÉ�ɪɲɷɷɷɿÉÈÉÑÉŞÉæÉòÉıÉ1Ê9ÊHÊRÊlÊrÊwÊwÊ~ʑʙʮʶʾÊÓÊÕÊàÊèÊıÊıÊËËË%Ë+Ë1Ë5Ë>ËCËgËsË{Ë�˜ˡ˭˸˽˽˽ËÓËğËõËıËÌÌÌ3Ì8ÌCÌKÌ`ÌeÌẻ̕Ì�̲̾ÌÃÌÏÌÚÌßÌßÌßÌßÌßÌßÌêÌêÌêÌêÌêÌêÌêÌêÌêÌêÌêÌêÌõÌÍÍÍ%Í+Í3ÍBÍGÍOÍWÍYÍaÍpÍvÍ~͈͆Í�Í­Í¶Í¾ÍÆÍÍÍáÍêÍóÍûÍÎÎÎ%Î*Î/ÎAÎuÎ}ÎŒÎ–Î°Î¸Î½Î½Î½ÎÆÎÏÎÒÎÜÎêÎüÎşÎÏ"Ï"Ï"Ï-Ï2ÏOÏTÏTÏ]ÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏmÏyϑϤϬϻÏÀÏÈÏÏÏÜÏåÏîÏöÏıÏĞĞ
ĞĞ0Ğ8Ğ;Ğ=ĞMĞWĞWĞWĞYĞnĞЂЅĞ�ВВЛРШЯмĞÑĞØĞéĞõĞÑ+Ñ@ÑUÑ\Ñ\ÑaÑaÑaÑaÑaÑaÑaÑiÑtÑ€Ñ�єєќѤѱѶѶѶѺѿѿÑÏÑÔÑÔÑÔÑàÑçÑíÑ÷ÑüÑÒ"Ò*Ò;ÒCÒfÒlÒsÒuÒ{Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò„Ò„ÒŸÒ©Ò·Ò·Ò¼ÒÇÒÎÒêÒ÷Ò÷Ò÷ÒûÒÓ$Ó2Ó*ÕAx[.Õ.ÕDÕKÕRÕ]ÕdÕuÕÕ†Õ�Õ£Õ«Õ«ÕÆÕàÕæÕïÕöÕùÕÖ␍ÖÖÖÖ'Ö1ÖCÖIÖ_ÖfÖnÖ„Ö‹Ö‹Ö‹Ö™ÖÀÖÉÖÑÖãÖëÖëÖëÖöÖ×××.×5×=×D×Y×j×j×q×q×q×צ׳׼×Ä×Öתתת×ì×ô×ô×÷רØ(ØmØBt`¹~Û~Û–Û¦Û­Û´Û¿ÛÒÛÕÛİÛäÛçÛ÷ÛÜÜÜÜ)Ü?ÜJÜUÜ`ÜkÜr܅ܑܮܷܿÜßÜâÜèÜíÜüÜİ
İİ İ'İ'İ3İAİPİXİgİoݒݘİ�ݠݦݬݬݬİÑİÖİóİöİöİıİ
ŞŞŞ3Ş?ŞOŞbŞ~ޓޛޥŞÄŞØŞØŞLßC ?C.0.080@0E0DÉÊæXæXYY#YY=YKYKY[YdYkYoYxYxY€Y„Y¤Y²Y¾YÄYÏYóYóYZZZZ!Z!Z4Z?ZPZ[ZfZmZwZ„Z„Z–Z›Z›Z©Z®Z®Z¿Z¿ZÒZ×ZèZîZ÷Z [ [ [%[%[3[8[8[=[D[L[S[U[][d[d[s[y[†[�[•[¹[¹[Á[Ğ[Û[â[ä[ø[\ \\\\$\)\8\?\H\]\q\q\v\v\~\”\™\­\´\¹\¹\Å\Ô\æ\õ\]]5]G]Y]h]‡]’]—]¦]º]Á]È]Û]İ]ë]ş]^^^,^3^J^Q^]^n^…^‡^“^�^ ^ ^«^¿^Ì^Ô^Ö^ê^ü^__"_D_K_W_u_u_u_}_ˆ_Œ_”_˜_ _§_·_Â_à_å_î_ù_`
````+`9`D`O`]`c`i`o`x`~`�`¥`­`¹`Ç`Ş`à`é`ô`ö`a a&a,a2a;aLasa{a…a“a«a²a¾aÍaâaâaïaôab b b b bcEDQ^.}.}B}O}e}Q}t}v}�}¦}®}FœfɦS¦SÈSÒSúS TT-T2T6T>TGTVT]TfTkT€T‘T°T¸TºTÙTáTğT÷TUUUUU U0U5UKU7UZU`U`UhUqU€UŸU¦U¨UÇUÎUÎUÎUåUîUúUşU V"VV:V?VPVUVkVWVzV€V‡V�V•V—V¨V­VÃV¯VÒVØVØVàVéVéVóVóV W;WDWPWTWbWxWmW�W�W¢WG ;z¶à¶àÕàŞàáàóà á ááá:áXágá…á™á±á¸áŞáüá â(â9âPâTâTâXâ]âbâlâoâyâ~â—âšâšâšâšâŸâ¥âÁâÏâÛâäâøâã ã%ã0ã<ãEãYãYãhãmãmã{ãHP‡—vAvA—A„A¹A¦AÈA×AßAêAìA÷ABB$B*BIPÅÕNúNúbúgúvúvú}úªúÀú¬úİúÏúõúıúJŒ¥ÄÆøÆøùø%ù%ù8ù<ù^ùrùwùwù~ù†ù�ù£ù¯ùÀùÅùÖùêùïùñùñùñù␍ú+ú+úHúKP�­F<F<o<q<<…< <¯<¾<Í<Û<æ<é<ù<Lè7†.†.±.´.·.½.Â.Ù.ğ./+/G/J/i/ƒ/•/¢/¸/Ë/Ğ/Û/ã/ã/í/í/ø/ı/0070V0X0m0s0’0±0¹0Ä0Ä0Î0Î0à0161H1M$ N[N[y[b[ƒ[‹[NLx‡ÖËÖËèËıËÌ Ì&Ì.Ì>ÌIÌZÌ`Ì’ÌOTHY(d(d:d<dEdNd\dadjdmdrd€dŠd�d—dP¨!G€b€b�b™b¬b¹bÅbÑbİbébcccc#c*c3cJcacfcxc‡c“c¥c¥c®cÑcÑcÓcæcècddd(dQhî„oo1o<oLo•oœo°o·o¿oÇoĞoØoàoâoêoòoùop p7p@p@pupŸp¨pÊpäpq+q7qYq[qbqiqiqŒq¨qÏqëqr.rUrqr˜r´rÛr÷rss-s:s?s?sNs[s`s`sgsrs„sœs´sÌsÎsÎsÎsÕsÕsâsçsçsçsøstt.tjtqtqtqtyt–t¤tÂtËtÔtátït u%u%u%u7uEuauuuuŠu�u¼u¾uÕuÛuìuõu÷uvvvv"v"vFvHvOv`vivkvyv{v‰v‹v™v™v¹v¹v¹v¹vÙv␍w3w;w?wGwKwYwgwiwqwuwyw�w�w�w�w·wÂwØwìw x%x0x:xAxZxfxmx†x†x˜x�xŸx¥x¶xÇxÖxİxîx÷xùxy yyy'y'y'yKyKyjyqyxy{y‡yŠy˜yœyªy®y¼yÀyÀyÙyàyåyóyz␍z(zHz[zjzlz{z}zŒz–z–z¤z­zÃzÊzïzôz{M{R{`{b{p{y{“{•{—{�{¯{¸{º{È{Ê{Ø{Ú{è{è{|||||'|'|'|2|N|s|Œ|‘|‘|‘|³|¸|¸|¸|Ø|İ|İ|İ|ü|}}}
} }
}}}}}}}#}B}X}}}™}­}²}²}Í}Ú}Ü}ë}ô}~~~~~6~8~8~@~;~{~{~{~š~š~š~»~À~À~À~â~ç~ç~ç~   +00KY[js���”�µ··¿ºúúú€€/€/€Y€q€‰€”€ª€¾€×€ï€�%�'�8�U�l�s�k…R| $nånåŒåšå°åÊåâåíå æ æ ææ1æ3æ3æ3æ@æ[æ]æ]ækæxæ“æ“æ£æµæSæd�Û�Û¨Û±ÛÑÛÑÛ×ÛßÛçÛïÛ÷ÛıÛ }}}}}}}#}B}X}}}™}­}²}²}Í}Ú}Ü}ë}ô}~~~~~6~8~8~@~;~{~{~{~š~š~š~»~À~À~À~â~ç~ç~ç~   +00KY[js���”�µ··¿ºúúú€€/€/€Y€q€‰€”€ª€¾€×€ï€�%�'�8�U�l�s�k…R| $ŞæŞæüæ
Ü ç ç:çRç]çyçyçyç†ç¡ç£ç£ç£ç°çËçÍçÍçÛçèçèèè%èSæd®Û®ÛÈÛÑÛñÛñÛ÷ÛÿÛÜÜÜÜ*Ü*ÜDÜIÜIÜOÜTÜTÜZÜ_Ü_ÜeÜjÜj܂ܕܛܠܠܩÜÉÜÉÜÉÜĞÜÒÜÒÜÙÜÛÜÛÜáÜáÜèÜêÜêÜğÜğÜ÷ÜùÜùÜÿÜÿÜİİİİİ"İ"İ"İ"İ.İ6İ>İFİNİVİ^İdİ|݋ݕݘݘݢݨݮݮݲݺİÁİÅİÍİÕİÛİãİêİòİúİşİŞŞŞ"Ş.Ş4Ş<Ş@ŞGŞOŞWŞ[ŞaŞiŞpŞxހބފޕޚްŞÁŞÆŞÉŞoßTL”£@†@†Y†[†b†x†ˆ†�†¦†¾†Á†Ó†‡UÔ*[nïnï‚ï—ï¦ïªï¸ïÁïĞïĞïßïêïõïğğğ.ğEğKğPğTğgğgğ}ğğ‰ğ­ğ¸ğºğÓğ×ğåğêğêğñğñññ…ñV$[[9["[C[K[WPÍİ�D�D¿D¬DáDÎDğDÿDEEE E*E*ELEREX,>Ö>ÖGÖMÖUÖ^ÖgÖlÖY„¾�¾�ß�ô���B�O�a���‘�‘�����¥�¸��Æ�Æ�Ñ�Û�á�ç�ê�ø�ÿ�‘‘!‘6‘;‘F‘Q‘k‘…‘–‘œ‘¢‘©‘Ç‘¯‘Бܑ֑䑒ì‘␍’’’!’!’(’F’.’O’U’[’c’ƒ’k’Œ’’’˜’ ’ ’ ’¶’¶’¶’¶’Á’Ë’Ô’ô’“““'“;“@“@“K“S“^“g“s“‡“—“¬“Á“Ş“ã“ã“î“ö“”””-”J”_”t””„”„”�”¥”º”Ɣהܔ픕• ••$•)•)•8•=•=•L•Q•Q•b•g•g•x•}•}•�•Ÿ•¤•¤•·•ƕ˕ٕ˕í•ò•–ò•––'––;–@–N–@–b–g–g–„–‰–«–°–¾–°–Ò–×–×–ô–ù–— —.— —B—G—G—d—i—‹—�—�—�—²—·—·—Ô—Ù—û—˜˜˜"˜'˜'˜B˜G˜G˜b˜g˜g˜‚˜‡˜‡˜¢˜§˜§˜˜ǘǘâ˜ç˜ç˜™™™"™'™'™8™=™=™N™S™S™_™j™™„™„™�™©™®™Ô™Û™å™ê™û™šš%š*š;šFšNšSšSšWš[šbšlšvšvš‰š�š�š�š’š«š´š´šÚšßšßšçšûš››+›6›A›L›^›j›s›x›x›x›‰›¦›±›»›Æ›Ë›Ö›Ş›ã›ã›î›ö›ÿ›
Ü$Ü)Ü)Ü/Ü4Ü4Ü:Ü?Ü?ÜEÜJÜJÜbÜuÜ{܀܀܉ܩܩܩܹܻܻܰܲܲÜÁÜÁÜÈÜÊÜÊÜĞÜĞÜ×ÜÙÜÙÜßÜßܿܿÜîÜôÜúÜİİİİİİİ&İ.İ6İ>İDİ\İkİuİxİx݂݈İ�İ�ݒݚݡݥݭݵݻİÃİÊİÒİÚİŞİäİïİõİŞŞŞŞ Ş'Ş/Ş7Ş;ŞAŞIŞPŞXŞ`ŞdŞjŞuŞzŞ�ޡަީŞOßTL”£@†@†Y†[†b†x†ˆ†�†¦†¾†Á†Ó†‡UÔ*[NïNïbïwï†ïŠï˜ï¡ï°ï°ï¿ïÊïÕïàïçï÷ïğ%ğ+ğ0ğ4ğGğGğ]ğ_ğiğ�ğ˜ğšğ³ğ·ğÅğÊğÊğÑğàğèğûğeñV$�Y�YÉY²YÓYÛYWPÍİ.C.COC<CqC^C€C�C—C¢C¤C¯CºCºCÜCâCX,ÖÖ'Ö-Ö5Ö>ÖGÖLÖY …N�N�o�„�’�Ÿ�Ò�ß�ñ��!�!�.�.�5�H�F�V�V�a�k�q�w�z�ˆ���§�®�±�Æ�Ë�Ö�á�û��&�,�2�9�W�?�`�f�l�t�”�|���£�©�±�±�¸�Ö�¾�ß�å�ë�ó�‘û�‘"‘(‘0‘0‘0‘F‘F‘F‘F‘Q‘[‘d‘„‘�‘¡‘¦‘·‘ˑББۑã‘î‘÷‘’’'’<’Q’n’s’s’~’†’“’�’®’½’Ú’ï’““““ “5“J“V“g“l“}“‘“‘“œ“‘“´“¹“¹“ȓ͓͓ܓá“á“ò“÷“÷“”␍”␍” ”/”4”4”G”V”[”i”[”}”‚”�”‚”¤”©”·”©”˔ДޔДò”÷”÷”••;•@•N•@•b•g•g•„•‰•«•°•¾•°•Ò•ווô•ù•– –.– –B–G–G–d–i–‹–�–�–�–²–·–·–Ò–×–×–ò–÷–÷–———2—7—7—R—W—W—r—w—w—’—————²—·—·—È—Í—Í—Ş—ã—ã—ï—ú—˜˜˜ ˜9˜>˜d˜k˜u˜z˜‹˜•˜ª˜µ˜º˜˘Ö˜ޘã˜ã˜ç˜ë˜ò˜ü˜™™™™™™"™;™D™D™j™o™o™w™‹™”™®™»™Æ™Ñ™Ü™î™ú™ššššš6šAšKšVš[šfšnšsšsš~š†š�šššªššÚšîšóšóšşš››&›G›S›d›i›z›~›ƒ›ƒ›“›�›¦›«›¶›Æ›Õ›ò›œœ'œ,œ7œ?œDœOœ_œnœ‹œ œµœµœµœµœºœ¿œ¿œËœÜœÜœ�� � �*�>�H�J�V�^�{�Œ�–�¡�Ä�Õ�æ�÷���*�/�/�:�?�?�G�R�W�W�_�j�o�o�w�˜����°�µ�µ�½�Ş�Ç�Å�ö�û�Ÿû�'Ÿ,Ÿ,Ÿ9Ÿ>Ÿ>ŸFŸKŸKŸ]ŸoŸtŸtŸˆŸtŸ Ÿ¥Ÿ¥Ÿ­Ÿ²Ÿ²ŸÅŸÊŸÊŸİŸâŸâŸüŸ    + ; @ @ Z j o o ‰ ™ � µ � Í Ò Ò İ â ¡ ¡ú â 6¡;¡w¡e¡S¡;¡�¡”¡”¡£¡³¡¸¡¸¡Ç¡סܡܡë¡ù¡ş¡&¢¢ş¡>¢C¢k¢Y¢C¢ƒ¢ˆ¢°¢�¢ˆ¢È¢Í¢Í¢ê¢Ô¢£$£)£)£D£0£n£~£ƒ£ƒ£�£”£”£ £¥£¥£¸£È£Í£Í£à£ğ£õ£õ£¤¤¤¤0¤@¤E¤E¤M¤R¤R¤Z¤_¤_¤g¤l¤l¤t¤y¤y¤Œ¤‘¤‘¤¤¤©¤÷¤å¤Ó¤Á¤©¤¥ ¥W¥E¥3¥!¥ ¥d¥i¥i¥x¥“¥˜¥˜¥©¥Ä¥É¥É¥Ú¥è¥í¥í¥õ¥ú¥ú¥¦¦¦¦¦¦L¦:¦(¦¦k¦†¦‹¦‹¦æ±¦Ÿ¦’¦â¦ı¦§7§%§§§O§T§‰§w§l§T§¡§¦§À§ª§¦§اݧú§ä§ݧ¨¨¨#¨<¨L¨]¨]¨‚¨„¨š¨ ¨ ¨½¨ʨû¨,©©O©W©W©W©c©h©h©{©†©�©•© ©ª©¯©¯©É©ΩΩÖ©Û©ï©Û©ş© ªª"ªª1ª<ªAªAªLª]ªbªbªmªxª}ª}ª�ª“ª“ª¤ª©ª©ªêΪÓªުÓªíªòª«òª««%««4«9«M«9«\«a«a«u«a«„«„«„«‰«•«‰«¨«­«­«¹«­«Ì«Ñ«Ñ«İ«Ñ«ğ«õ«õ«¬õ«¬¬-¬¬<¬H¬S¬^¬c¬w¬c¬†¬’¬�¬¨¬­¬Á¬­¬جЬá¬æ¬æ¬î¬ó¬ó¬ü¬­­ œœ2œJœ^œcœcœnœ�œ‹œ–œ·œÜԜٜêœîœóœóœ����&�6�E�b�w�Œ�—�œ�§�¯�´�¿�Ï�Ş�û��%�%�%�%�*�/�/�;�L�L�q�s�����š�®�¸�º�Æ�Î�ë�ü�ŸŸ4ŸEŸVŸgŸrŸŠŸšŸŸŸŸŸªŸ¯Ÿ¯Ÿ·ŸŸÇŸÇŸÏŸÚŸߟߟ矠ñŸïŸ  % % - N 7 5 f k  k — œ œ © ® ®  » » Í ß ä ä ø ä ¡¡¡¡"¡"¡5¡:¡:¡M¡R¡R¡l¡|¡�¡�¡›¡«¡°¡°¡Ê¡Ú¡ß¡ß¡ù¡ ¢¢%¢¢=¢B¢B¢M¢R¢�¢|¢j¢R¢¦¢«¢ç¢Õ¢â«¢ÿ¢£££#£(£(£7£G£L£L£[£i£n£–£„£n£®£³£Û£É£³£ó£ø£ ¤¤ø£8¤=¤=¤Z¤D¤„¤”¤™¤™¤´¤ ¤ޤî¤ó¤ó¤ÿ¤¥¥¥¥¥(¥8¥=¥=¥P¥`¥e¥e¥x¥ˆ¥�¥�¥ ¥°¥µ¥µ¥½¥Â¥Â¥Ê¥Ï¥Ï¥×¥Ü¥Ü¥ä¥é¥é¥ü¥¦¦¦¦g¦U¦C¦1¦¦t¦y¦Ǧµ¦£¦‘¦y¦Ô¦Ù¦Ù¦è¦§§§§4§9§9§J§X§]§]§e§j§j§r§w§w§§„§„§¼§ª§˜§‹§Û§ö§û§û§3¨!¨¨¨R¨m¨r¨§¨•¨Ѝr¨¿¨Ĩù¨ç¨ܨĨ©©0©©©H©M©j©T©M©‚©‡©‡©“©¬©¼©Í©Í©ò©ô©
­­­­­­(­-­-­8­=­=­H­M­M­X­]­]­h­m­m­x­}­}­ˆ­�­¡­�­°­»­Æ­Ñ­Ö­Ö­à­å­å­ï­ô­ô­ş­®®␍®®®® ® ®,®1®1®>®C®C®C®C®C®K®P®P®X®]®]®e®j®j®r®w®w®®„®˜®„®§®¸®½®½®Ä®Ï®ï®ô® ªªª-ª:ªkªœªŠª¿ªǪǪǪÓªتتëªöª«««« « «9«>«>«F«K«_«K«n«y«~«’«~«¡«¬«±«±«¼«Í«Ò«Ò«İ«è«í«í«ş«¬¬¬¬¬3¬>¬C¬N¬C¬]¬b¬v¬b¬…¬Ь•¬Ь¤¬©¬½¬©¬̬ѬѬå¬Ѭô¬ô¬ô¬ù¬­ù¬­­­)­­<­A­A­M­A­`­e­e­q­e­„­‰­�­‰­¬­¸­íέÓ­ç­Ó­ö­®␍®®®1®®H®@®Q®V®V®^®c®c®l®q®q®z®®®ˆ®�®�®˜®�®�®¨®­®­®¸®½®½®È®Í®Í®Ø®İ®İ®è®í®í®ø®ı®¯ı® ¯+¯6¯A¯F¯F¯P¯U¯U¯_¯d¯d¯n¯s¯s¯}¯‚¯‚¯Н�¯�¯œ¯¡¯¡¯®¯³¯³¯³¯³¯³¯»¯À¯À¯ȯͯͯÕ¯Ú¯Ú¯â¯ç¯ç¯ï¯ô¯°ô¯°(°-°-°4°?°_°d°z°…°�°а­°¸°ðȰȰϰÚ°ú°ÿ°± ±9±%±H±S±^±c±c±j±u±•±š±°±»±Ô±À±ã±î±ù±ş±ş±²²(²H²M²c²n²‡²s²ª²–²¹²IJɲɲä²вó²³³.³9³R³>³u³a³„³�³”³”³¯³›³¾³޳ã³ù³´´ ´@´,´O´Z´_´_´n´s´s´‚´‡´‡´‡´�´’´’´’´œ´�´�´¨´¯´Ò´Ô´Ô´Ş´Ş´Ş´Ş´Ş´à´à´÷´ş´ µ µµµ!µ,µ7µBµ<µ]µzµoµ’µ’µ µšµƵ»µ޵޵޵çµîµ'¶'¶F¶Q¶h¶ˆ¶ˆ¶ˆ¶©¶¹¶ζà¶ğ¶ğ¶··+·=·=·A·F·M·]·|·|·€·—·�·£·£·§·²·¾·Ì·ù·¸¸!¸T¸`¸e¸{¸“¸Ÿ¸°¸µ¸Ƹ帹<¹?¹O¹Q¹Q¹U¹t¹¹¹‚¹“¹Ĺç¹ç¹ê¹¼Z, nÖnÖ|Ö‚Ö†Ö�Ö˜Ö�Ö[`BV··ä‡ò‡ù‡ı‡ ˆ%ˆ)ˆ/ˆEˆbˆdˆdˆ•ˆƒˆdˆ´ˆ¾ˆ\8
¯¯.¯¯=¯H¯S¯X¯X¯_¯j¯Н�¯¥¯°¯ɯµ¯دã¯î¯ó¯ó¯ú¯°%°*°@°K°d°P°s°~°‰°�°�°©°•°¸°ذݰó°ş°±±:±&±I±T±Y±Y±t±`±ƒ±£±¨±¾±ɱâ±α²ñ±² ²$²$²?²+²N²n²s²‰²”²­²™²в¼²ß²ê²ï²ï²ş²³³³³³³³"³"³"³,³.³.³8³?³b³d³d³n³n³n³n³n³p³p³‡³�³™³™³¤³ª³±³¼³dzÒ³̳í³ �Z�Z¿Z¬ZÎZÙZäZïZúZ[ []\’     + 3 > I T V l l ~ Š “ – Å ^øª¤ÎìÎìóìøìí1í1í<íIígíoíœí¡íÊíêíî îî3îYî^î‡î¤îÊîáîçîëîï ïï"ï*ïIïOïSïlïtï“ï˜ï©ï±ïĞïÕïİïãïçïëïıïğ
´ÿ³"´"´0´*´V´K´n´n´n´w´~´‘´–´¤´·´·´Ö´á´ø´µµµ9µIµ^µpµ€µ€µ¥µ¬µ»µ͵͵ѵÖµݵíµ  '¶.¶3¶3¶7¶B¶N¶\¶‰¶’¶£¶±¶ä¶ğ¶õ¶ ·#·/·@·E·V·u·£·Ì·Ï·ß·á·á·å·¸¸¸¸#¸T¸w¸w¸w¸z¸£ºZ, NÖNÖ\ÖbÖfÖoÖxÖ~Ö[`BV^†^†t†‚†‰†�†œ†µ†¹†¿†Õ†ò†ô†ô†%‡‡ô†D‡N‡\8 ğ(ğ-ğ:ğ?ğ?ğLğdğsğ€ğ ğ ğ·ğ¼ğ¼ğÓğÕğÕğéğëğëğññññññ4ñ4ñIñNñNñ]ñ]ñ–ñ¯ñ¯ñÂñÇñÇñÇñÇñöñò*ò*ò*ò7òNòPòPòPò]òtòvòvòƒòšòšò±ò³òÎòêòêòêòîòğòğòğòõò÷ò÷òüòüòó ó ó'ó'ó'ó/ó4ó4ó4ó<óAóAóIóIóKóuówó—ó·ó·ó·ó·ó·óÑóÔóéóğóòóûóôôôô$ô6ô6ôBôUôlôvô�ô°ôÌôìô␍õ!õ?õdõwõ–õ¼õÕõäõúõöööOöTöTögögösö…öŠöŠö�ö¼öáöôö÷9÷Z÷i÷—÷©÷³÷Õ÷×÷×÷×÷ã÷ã÷ã÷ø1ø3ø3øBøBøGøGøGøGøGø^øcøvøÅø_\
.Y.YOY<Y^YiYtYYŠY–YœY]\’ğŸğŸşŸ     ) 4 6 L L ^ j s v ¥ ^øª¤^ë^ëƒëˆë•ëÁëÁëÌëÙë÷ëÿë,ì1ìZìzì–ìœì ìÃìéìîìí4íZíqíwí{í”íœí¡í²íºíÙíßíãíüíî#î(î9îAî`îeîmîsîwî{î�î•îšî¸î½îÊîÏîÏîÜîôîïï0ï0ïGïLïLïcïeïeïyï{ï{ï’ï”ï”ï«ï­ï­ïÄïÄïÙïŞïŞïíïíï&ğ?ğ?ğRğWğWğWğWğ†ğ�ğºğºğºğÇğŞğàğàğàğíğññññ*ñ*ñAñCñ^ñzñzñzñ~ñ€ñ€ñ€ñ…ñ‡ñ‡ñŒñŒñ–ñ›ñ›ñ·ñ·ñ·ñ¿ñÄñÄñÄñÌñÑñÑñÙñÙñÛñòò'òGòGòGòGòGòaòdòyò€ò‚ò‹ò�ò ò¬ò¬ò´òÆòÆòÒòåòüòó.ó@ó\ó|ó�ó±óÏóôóô&ôLôeôtôŠô¦ô«ô«ôßôäôäô÷ô÷ôõõõõ.õLõqõ„õ£õÉõêõùõ'ö9öCöeögögögösösösö‘öÁöÃöÃöÒöÒö×ö×ö×ö×ö×öîöóö÷U÷_\ îOîOPP2P?PVPiPtP‰PvP˜P P«PÁP·PÙPßP`øA&;&;D;G;N;U;\;`;b;i;p;t;x;‹;³;Î;»;æ;ë;<<<#<2<l<q<�<¦<«<´<À<È<Ï<ñ<÷<====I=k=q=x=x=~=�=…=–=¹=Ë=a$~ß~ß�ߨߨ߮ßb|XsşéşéêDêDêcêsêuêuêuêuê|ê„êŸê¸êºêºêºêÂêİêßêßêéêéêëc”"†4†4¨4²4¾4Ã4Ó4Ù4î455 5.5E5M5W5f5n5{5ƒ5†5†5†5ˆ5—5¡5ª5²5µ5Ç5dôÍ8878D8G8P8V8m8„8›8¦8Ü8ü8999+9=9J9`9v9�9’9¤9©9¬9Ì9ì9ô9ü9:!:A:I:Q:S:s:{:€:…:�:�:›:›:§:§:¹:ù:;;";ed¤¹ø‹ø‹ŒŒŒ!Œ)Œ7ŒJŒVŒpŒ}Œ}Œ€Œ�Œ�Œ¸Œ¼ŒÄŒf(¸şŸ*Ÿ*µ*º*Î*ı*␍++$+0+7+G+e+�+ +®+®+µ+Å+Ñ+á+ê+,,,,-,-,C,C,Y,Y,o,o,…,…,›,›,±,±,È,È,ß,ß,ö,ö,␍-␍-$-$-;-;-R-R-i-q-|-�-˜-©-¬-®-Å-Ì-/g¬÷şş%-58CUUlsvx„••˜ ¹ÇÊÍÔØàî   e h(ÅËş�ş�%‚‚4‚F‚N‚iC®P®PÑPæPëPóPûPQQQ Q%Q*Q2QNQTQVQXQeQeQrQgQƒQ‰Q‹Q�QšQšQšQŸQ¨Q°Q¹QÁQÃQËQÓQÛQèQîQùQRRR*RKRRR]RfRwR{RƒRƒR—R§R¯R²RSj8-7O0O0c0g0l0w0‚0…0‰0‘0kˆWõ¾ˆ¾ˆ؈óˆùˆ‰‰‰,‰1‰<‰Z‰D‰i‰|‰�‰—‰Ÿ‰©‰ljÙ‰â‰ê‰ô‰Šù‰Š0Š:ŠBŠZŠDŠŠiŠ�Š ŠªŠ²Š²Š»ŠÊÙŠòŠ‹‹‹‹‹#‹A‹C‹H‹S‹i‹i‹i‹m‹y‹š‹¤‹®‹·‹Ø‹â‹ì‹î‹î‹ ŒŒ'Œ*ŒCŒGŒbŒfŒ…Œ‰Œ¤Œ¨Œ¨Œ¨Œ®Œ¼ŒÆŒߌåŒğŒüŒşŒ� �%�0�>�H�a�d�l�x�z�‚�…��� �¬�®��¼�Õ�í�ù���(�8�Q�b�b�m�x���œ�±��Ë�Û�ô��� ���,�3�E�leãvßvß�ߙ߹߹߿ßÇßÏß×ßßßåßòßòßààà àààààà!à&à&à>àQàWà\à\àeà…à…à…àŒà�à�à•à—à—à�à�à¤à¦à¦à¬à¬à³àµàµà»à»àÂàÂàÊàĞàÖàŞàŞàŞàŞàêàòàúàá
~N~N�N¦NÂNÏNæNùNOOO(O0O;OQOGOiOoO`øA¶9¶9Ô9×9Ş9å9ì9ğ9ò9ù9::::C:^:K:v:{:Ÿ:Ÿ:«:³:Â:ü:;.;6;;;D;P;X;_;�;‡;©;«;Í;Ù;û;<<<<<<&<I<[<a$ŞŞŞ8Ş8Ş>Şb|Xs�è�è¨èÔèÔèóèééééé éé/éHéJéJéJéRéméoéoéyéyé‘éc”"4484B4N4S4c4i4~4’4¢4°4¾4Õ4İ4ç4ö4ş4 555555'515:5B5E5W5dôÍ�6�6Ç6Ô6×6à6æ6ı67+767l7Œ7‘7–7¡7»7Í7Ú7ğ788"84898<8\8|8„8Œ8‘8±8Ñ8Ù8á8ã89 999 9 9+9+97979I9‰9¢9¢9²9ed¤¹ø‹ø‹ŒŒŒ!Œ)Œ7ŒJŒVŒpŒ}Œ}Œ€Œ�Œ�Œ¸Œ¼ŒÄŒf(¸şŸ*Ÿ*µ*º*Î*ı*␍++$+0+7+G+e+�+ +®+®+µ+Å+Ñ+á+ê+,,,,-,-,C,C,Y,Y,o,o,…,…,›,›,±,±,È,È,ß,ß,ö,ö,␍-␍-$-$-;-;-R-R-i-q-|-�-˜-©-¬-®-Å-Ì-/g¬÷ŞŞøş␍#55LSVXduux€–™§ª­´¸ÀÎàóöE h(ÅË�€�€µ€¢€Ä€Ö€Ş€iCŞOŞOPPP#P+P3P@PFPOPUPZPbP~P„P†PˆP•P•P¢P—P³P¹P»P½PÊPÊPÊPÏPØPàPéPñPóPûPQ QQQ)Q0Q@QKQZQ{Q‚Q�Q–Q§Q«Q³Q³QÇQ×QßQâQHRj8-7O0O0c0g0l0w0‚0…0‰0‘0kˆWõN‡N‡h‡ƒ‡‰‡�‡�‡—‡¼‡Á‡̇ê‡Ô‡ù‡ ˆˆ'ˆ/ˆ9ˆWˆiˆrˆzˆ„ˆŸˆ‰ˆ®ˆÀˆʈÒˆêˆÔˆ‰ùˆ‰0‰:‰B‰B‰K‰S‰i‰‚‰”‰£‰§‰§‰®‰³‰щÓ‰؉ã‰ù‰ù‰ù‰ı‰ Š*Š4Š>ŠGŠhŠrŠ|Š~Š~Š›Š©Š·ŠºŠÓŠ׊òŠöŠ‹‹4‹8‹8‹8‹>‹L‹V‹o‹u‹€‹Œ‹�‹–‹œ‹µ‹À‹΋Ø‹ñ‹ô‹ü‹Œ ááá á8áGáQáTáTá^ádájájánává}á…á�á‘á—áŸá¦á®á¶áºáÀáËáÑáŞáêáğáøáüáâ ââââ%â,â4â<â@âFâQâVâlâ}â‚â…â+ãm`�!�!˜!Ÿ!³!Ç!Ì!ê!ï!␍""-"/"F"Z"c"e"y"‰"º"n�2Ò0”0”F”W”h”y”Š”›”®”¶”Ä”â”í”ó”•••(•9•?•T•o•o•{•ƒ•‹•‘•¦•®•²•º•ȕΕӕӕè•ı•– –––=–P–\–`–j–ƒ–‰–‹–˜–š–¬–¬–³–»–Í–Í–ş– — —#—-—1—=—A—M—Q—]—a—a—w—Š—�—”—�—¢—±—µ—Ä—È—Û—ß—ß—ß—ß—ö—˜˜˜0˜@˜N˜Y˜o˜|˜‹˜“˜ ˜»˜Ë˜Û˜à˜à˜à˜à˜í˜ü˜™
ŒŒŒ.Œ0Œ<Œ>ŒFŒLŒeŒ}Œ‰Œ�Œ£Œ¸ŒÈŒáŒòŒòŒıŒ� �,�A�F�[�k�„�•�•�›�¦�®�¼�Ã�Õ�leãVßVßpßyߙߙߟߧ߯߷߿ßÅßÒßÒßàßåßåßëßğßğßößûßûßàààà1à7à<à<àEàeàeàeàlànànàuàwàwà}à}à„à†à†àŒàŒà“à•à•à›à›à¢à¢àªà°à¶à¾à¾à¾à¾àÊàÒàÚàâàêàòàúàáá'á1á4á4á>áDáJáJáNáVá]áeámáqáwáá†á�á–ášá á«á±á¾áÊáĞáØáÜáãáëáóá÷áıáâ âââ â&â1â6âLâ]âbâeâ ãm`�!�!˜!Ÿ!³!Ç!Ì!ê!ï!␍""-"/"F"Z"c"e"y"‰"º"n�2Ò””&”7”H”Y”j”{”�”–”¤””͔Ӕà”õ”õ”•• •4•O•O•[•c•k•q•†•�•’•𕍕®•³•³•ȕݕä•ì•ô•ú•–0–<–@–J–c–i–k–x–z–Œ–Œ–“–›–­–­–Ş–ì–ÿ–—␍———!—-—1—=—A—A—W—j—p—t—~—‚—‘—•—¤—¨—»—¿—¿—¿—¿—Ö—ä—ñ—ù—˜ ˜.˜9˜O˜\˜k˜s˜€˜›˜«˜»˜À˜À˜À˜À˜Í˜Ü˜ä˜ê˜ÿ˜™#™4™D™J™J™J™\™b™n™t™�™œ™¬™¸™¾™Ë™İ™ë™␍š™›oÔ¼í(m(m:mKmVmamzmŒm¤m©m¸m¿mÌmÓmámèmêmímòmômúmn.nDn\nanpnwn„n›n¹nÀnÂnÅnÊnín oop$hm?&?&M&a&h&‚&qxKeFQFQnQZQ}Q˜Q„Q§Q¬Q³Q»QÂQÍQØQàQèQóQşQR R,R4RrFƒöqöqrr1rIrSr^r^rcrnrzr…r“r£r³rºrÀrÕrêrêrşrss#s2s?sPsasos}s„sŠsŸs´s´sÈsÕsæsösÿsttt$t5tBtRt´ts8§±�O�O’O—OœO­O»OÄOÉOÎOĞOt88B—0—0«0¯0´0¿0É0Ì0Ğ0Ø0u0‚ŠŞMŞMôMNNNN%NvÜtFFhs~‡—©¯µ»ÑÀåòõı=PTZqw‡�™§¬ºÓáêúü/=Ic‚‰“¢¨®´ºĞñ(3BP_l|Š¡­²ÀÜî $*ALY``n}�œ®®Ùäw`-A^…^…t…†…�…‘… …¿…Ã…É…ß…ü…ş…ş…/††ş…N†X†xD‡Ôââ â(â3â9â?âCâGâsâsâzâ}â‚â”â˜â¿âÃâÈâÈâÏâÒâ×âãâôâøâ ãã ã!ã3ã7ãSãWã\ã\ãpãsã�ã‹ã’ã¸ãÃãÇãÌãää&ä*ä;äFäJäLäWä[ä[äoäsäuäuä€ä„ä˜äœäœäœä äÂäyˆÕóÆäÆäÚäğäğäğäòäòäùäûäûäåååååå å'å)å)å6å=å?å?åWå\å\ålåz°0X�Z�Z¦Z®Z¹Z[[øZŞZÇZ#[5[%[U[U[l[`[�[£[¯[Ä[±[Ó[Ù[à[\ó[ç[\\9\9\@\j\j\j\v\{ÄL¹îúîú ûû"ûHûHûJûWûbûhûyûˆû—û¤û¤ûªû¯û´ûÊûİûèûìûşû üüüü5üCüCüCüNüiüTüqü„ü†ü¢ü�üªü¸ü¸üºüÖüÖüİüãüìüóüöüı,ı ı4ı:ıCıCıCıVı[ı[ıcıcınıƒıŒıŒıŒıŒı¨ı¿ıÅıÊıÊıßıåıêıêıöış3ş8ş=ş=şIşfşuş„şŒş‘ş—şœşœş£şªşÍşêşìş ÿÿÿ$ÿ$ÿ1ÿ:ÿ:ÿXÿnÿyÿ~ÿ‹ÿ–ÿŸÿ§ÿ·ÿÎÿÎÿŞÿŞÿğÿöÿ ((*166CNT]]p}�š¨±àéôù05<IPbw~„��–°·¼ÊÚèèîõşş#&&7?GSpw„†�¡°°°ÚÚÚççü&1?JY``yŒ��²´Â××İææóù  &8?JOW^inƒ…Ÿ´´´½ÃÔâôôú ™ ™.™C™T™d™j™j™j™|™‚™�™”™¡™¼™Ì™Ø™Ş™ë™ı™ š-š¹›oÔ¼í(m(m:mKmVmamzmŒm¤m©m¸m¿mÌmÓmámèmêmímòmômúmn.nDn\nanpnwn„n›n¹nÀnÂnÅnÊnín oop$hm?&?&M&a&h&‚&qxKe¶R¶RŞRÊRíRSôRSS#S+S2S=SHSPSXScSnS„SySœS¤SrJ‡VsVsrsys‘s©s³s¾s¾sÃsÎsÚsåsósttt t5tJtJt^tftvtƒt’tŸt°tÁtÏtİtätêtÿtuu(u5uFuVu_upupuvu„u•u¢u²uvs8³½^P^PbPgPlP}P‹P”P™P�P Pt88B—0—0«0¯0´0¿0É0Ì0Ğ0Ø0u0ˆ�~N~N”N§N´NºN½NÅNvÜtffˆ“�§·ÉÏÕÛñà/5:]ptz‘—§­¹ÇÌÚó
3<<BKKjjwzƒŒ”Ÿ±·ÂÂÏÒÛäì÷ '*3<>`sˆ�™«±¹¹¹¹Ä= #(0O]iƒ¢©³ÂÈÎÔÚğ%1HSbpŒœªÁÍÒàü%.4?DJaly€€��Ÿ­¼ÎÎÖù8w`-AΆΆä†ö†ı†‡‡/‡3‡9‡O‡l‡n‡n‡Ÿ‡�‡n‡¾‡ȇxD‡Ô~ã~ã�ã˜ã£ã©ã¯ã³ã·ãããããêãíãòãää/ä3ä8ä8ä?äBäGäSädähäyä‹ä�ä‘ä£ä§äÃäÇäÌäÌäàäãäñäûäå(å3å7å<årå‹å–åšå«å¶åºå¼åÇåËåËåßåãåååååğåôåæ æ æ ææ2æyˆÕó6æ6æJæ`æ`æ`æbæbæiækækærætætæ�æƒæƒæ�æ—æ™æ™æ¦æ­æ¯æ¯æÇæÌæÌæÜæz°0Xş[ş[\\)\�\s\h\N\7\“\¥\•\Å\Å\Ü\Ğ\]] ]4]!]C]I]P]t]c]W]‹]�]©]©]°]Ú]Ú]Ú]æ]{ÄL¹ûû,û7ûBûhûhûjûwû‚ûˆû™û¨û·ûÄûÄûÊûÏûÔûêûıûü üü+ü3ü>ü:üUücücücünü‰ütü‘ü¤ü¦üÂü®üÊüØüØüÚüöüöüıüı ııı8ıLı?ıTıZıcıcıcıvı{ı{ıƒıƒı�ı£ı¬ı¬ı¬ı¬ıÈıßıåıêıêıÿış
|”�¾33“3—3 3£3¬3µ3Ç3Ç3ó3÷3ü3ÿ344 4"4*4-4:4B4J4R4Y4i4i4u4}`2vOvO�OŠO­OÒO¾OáOæOíOõOüOPPP0P%PHPPP~À-°f°fÎfŞfèfèfòfòfüfggg g)g6g6gDgXgXg|g‰g‰g™g¦g¦gÉgÖgÖgëg␍h"hDhMhZhZh}h‡h‡hºhíhóhóhóhi¸ºäȌȌàŒâŒîŒòŒÿŒ����"�&�.�9�M�Y�[�[�d�f�f�o�q�q�z�|�|�…�…���”�—�¡�²�¸�Ä�Ä�,�€œøÆ&Æ&ä&õ&␍''0'%'H'h'T'w'ˆ'�'®'š'Æ'ã'ê'(û'(>(*(M(^(t(`(Œ(™(™(±(±(»(�œX{V2V2b2r2}2§2×2è2ù2 333-343B3Z3i3v3y3’3•3š3±3Á3Ñ3Õ3Ü34‚x± °°°%°,°K°Z°i°x°‡°–° ° °¥°¬°¿°Î°Ó°î°±±±0±4±B±I±N±N±U±g±p±r±€±’±’±’±¤±¯±Á±Ì±Ù±Ş±î±ó±²²²!²&²6²;²K²M²]²_²o²q²‚²‹²‹²�²�²¤²´²´²Ï²á²ó²³³³³³+³ƒ\åø0�0�K�R�W�e�z���‹�™�œ���¨�º�º�Á�÷�„0ÎÖ&&>~rHF’š…`,^„^„t„†„�„—„¦„¿„ÄɄ߄ü„ş„ş„/……ş„N…X…†L4CÎ0Î0Ü0î0ô0ü0111/15181t1‡(–œO3O3]3l3p3s3y3ˆ\DWv1v1„1–1œ1¤1¶1¼1Å1×1İ1æ1ø1ş12O2‰, öÕöÕÖ ÖÖÖÖŠ„ �␍�␍¬␍¾␍Å␍Ì␍Û␍à␍)>+M\^€€€�«¡ÃÍ‹`>~f~f›f£fªfÏfİfßfífúfg g"g1g<g@gKgWg^gjg�g˜g«gÂgÌgÚgìgîgüghhh(h.h>h>hVhVh{h{h€h€h‰h•h¢h®hÃhÚhéhôhii)iAibibikipipipipi€i‰i‘i–i¤i²iÂiÇiÇiÕiÕiÚiÚiäiïijjj#j.j8j<jEj^jajqjxj–jŸjŸj®j¾jÎjÕjÛjçjïjújkkkk+k6k<kLk\k\k‰k§k³k»kÆkÍkØkèkøkøkl␍l␍ll"l4l:lHlUlblllplyl’l•l¥l¬l±l±lÅlÅlÊlÎlŞlçlùlÿlmmmmm/m8mDmTmTmTmYmqmqm€mƒm—mµmÀmémûmnnn!n(n:nJnenlnpnvn~n‰n˜oŒ8í÷&&&&@&U&k&Œ&y&¤&¼&¼&Æ&�`j~8Ÿ8ŸXŸ_ŸgŸrŸ|Ÿ‡Ÿ�Ÿ�Ÿ¨Ÿ«ŸĞŸÒŸâŸâŸğŸ�_ØØ8Ø?ØFØKØbØtØ~؄ؖ؛ادزشؾØÈØÈØÌØÔØÜØäØîØ÷ØÿØÙ Ù&Ù7Ù>ÙAÙFÙUÙ[ÙcÙcÙjÙmÙrÙ�Ù‡Ù�Ù�Ù�٠٥ٴٿÙÇÙÇÙÒÙæÙíÙôÙ Ú�83=ÖÖÖÖßÖßÖíÖñÖÿÖ××�8>H××××%×)×0×3×8בD*Ö/Ö/ğ/0␍00 080A0E0W0]0|0’Ä{¨VşVş€şƒşŠş�ş•ş—şœş¢ş¢ş´ş»şÑşäşóşùşûşÿÿÿÿ&ÿ(ÿ/ÿ5ÿ?ÿ?ÿ?ÿVÿhÿoÿ~ÿ€ÿ–ÿ©ÿ©ÿ»ÿ“0+3~0~0‡0­0¾0Ä0Ä0Ì0”„\yfñfñxñ�ñ—ñ ñ¢ñ©ñ¹ñÄñÆñĞñĞñÙñêñíñíñòòò7ò>òBòQòdò·ò•  ş
//'/D/I/–hö ÖcÖcìc÷cddd$d5d>dOdUdadxdxdŠd›d¨d±dÂdÈde—„a~JJNJTJ]JiJqJxJ|J…J…JŠJ‘J©JÓJØJüJKKK6KZKyK‹K˜lò ~~–¨¯ØÚüş3 BBT[}}…™ y}€Š€Š‰Š•ŠšŠš(A>ç>ç`çhçnçvçxçxç‰ç‰ç‰ç‘ç™ç«çºç«çÏçÑçÑçëçíçíçøçıçèèèè1è3è@èBèOèQè^èfènèuè„è‘è“è¤è±è±è±èºèÌèßèåèíèïèüèüèéééé&é>éCéCéCéQéWé\édéoé�éŒé‘é‘é˜éœéªé®é·é¾éÜéééğéùéêêêêê"ê-ê;ê;ê[ê[ê[êbêpêê’ê¥ê§ê§ê§êºêºêÁêÈêÍêÓêåêïê ë5ë;ë;ëOëTëxëë‹ë©ë¼ëÇëÎëÒëÒëÒëÒëİëçëõëì"ì?ìIìIìWìuì¥ì¸ìÉìàìóìøìøìøìí íí(í-í-í-í?íiíoíoíoízí„í�í›í�í�í�í¢í®í®íøí›H%¯/¯/½/Ä/Ï/Ü/ç/ï/ï/0000œ0 NN-NN<NXNNNpNxN�Lİì%%0%E%[%|%i%”%™%Ä%å%Ò%ı%&& &�ğ·�K�KÃKÌKØKàKëK şş3şSşXş]ş]şiş†ş•ş¤ş¬ş±ş·ş¼ş¼şÃşÊşíş
L ÿ ÿ)ÿ>ÿ>ÿDÿDÿQÿZÿZÿxÿ�ÿ™ÿ�ÿ«ÿ¶ÿ¿ÿÇÿ×ÿîÿîÿşÿşÿ?HHJQVVcnt}}��¯ºÈÑÖ  (;PU\ip‚—�¤­­Ğ×Üêú1CFFW_gs�—¤¦­ÁĞĞĞúúú'9FQ_jy€€™¬®½ÒÔâ÷÷ı++8;FX_jow~‰�£¥¿ÔÔÔÖİãô!*/S\\bkkŠŠ—𣬴¿Ñ×ââïòû )/::GJS\^€“¨®¹ËÑÙÙÙÙä]
LLL1LL@L@LNLXL_LL�L›L¢L¢L¾L¾LåLêL M"M?MBMJMQMqMsM�M”M”M°M°MÍMÍMôMNŸTVg��¤±·½ÎÜêü! 0 |”�¾33“3—3 3£3¬3µ3Ç3Ç3ó3÷3ü3ÿ344 4"4*4-4:4B4J4R4Y4i4i4u4}`2æPæPQúPQBQ.QQQVQ]QeQlQwQQŠQ Q•Q¸QÀQ~À-°f°fÎfŞfèfèfòfòfüfggg g)g6g6gDgXgXg|g‰g‰g™g¦g¦gÉgÖgÖgëg␍h"hDhMhZhZh}h‡h‡hºhíhóhóhóhi¸ºäȌȌàŒâŒîŒòŒÿŒ����"�&�.�9�M�Y�[�[�d�f�f�o�q�q�z�|�|�…�…���”�—�¡�²�¸�Ä�Ä�,�€œø6(6(T(e(}(„( (•(¸(Ø(Ä(ç(ø(ı()
R††µªÖÂùå%5<IT`ksx„‰�¤¨³¸ÃÜåñö )6)S)Z)v)k)�)®)š)½)Î)ä)Ğ)ü) * *!*!*+*�œ¢Æ2Æ2Ò2â2í23G3X3i3{3‚3‰3�3¤3²3Ê3Ù3æ3é344
38Qfx}ˆ���’«ÀËÕàâíõõú=¡àZ�˜d˜d²dÀdÅdÒdàdédee7e@ePekeve†eˆeŠe”e e¤e±e½eÏe×eïeóeóeóeóeøef0f0f7f:fBfNfWf­f¢d1¾(¾(Ü(ô() )())@)`)L)o)€)–)‚)®)»)»)Ó)Ó)İ)£ü!\ÎÎæø0 4!414A4E4L4‚4‚x± (°(°>°E°L°k°z°‰°˜°§°¶°À°À°Å°Ì°ß°î°ó°±(±(±>±P±T±b±i±n±n±u±‡±�±’± ±²±²±²±Ä±Ï±á±ì±ù±ş±²²#²/²4²A²F²V²[²k²m²}²²�²‘²¢²«²«²­²½²Ä²Ô²Ô²ï²³³%³5³5³5³8³K³ƒ\åø0�0�K�R�W�e�z���‹�™�œ���¨�º�º�Á�÷�„0ÎÖFF^�’hf²º…`,Î…Î…ä…ö…ı…††/†3†9†O†l†n†n†Ÿ†�†n†¾†Ȇ†L[j>1>1L1^1d1l1~1„1�1Ÿ1¥1¨1ä1‡(–œO3O3]3l3p3s3y3ˆ\k~æ1æ1ô12 22&2,252G2M2V2h2n2q2¿2‰, ÖÖ$Ö+Ö3Ö8Ö>ÖŠ„ şş.5<KPrrw™®›½ÌÎğğğÿ3=‹`BŞgŞgûgh
?`ubª�„¹ÖÖÖè:QEƒˆ›�ñÒó ø&N<]zzzŒ©©ÊÑóóû¤(NäNä\ää…äŠäŠä�ä¥(!'~Ö~Ö‡Ö•Ö›Ö�Ö¢Ö¦D]j<9<9V9]9f9r9‡9�9•9›9�9�9¬9§„¼Ù˜©˜©Ë©×©Û©ã©ë©ï©ú©ş©ªªªªª(ª9ª;ª?ªPªaªpªƒª‹ª–ª–ª–ª¨ª¨€ › ›¹›À›Ç›Î›Ô›ä›ï›ù›œœœ œ;œEœOœVœaœsœ{œ{œ‘œ‘œ£œ© Ê 6V6V\VyV�VŒVœV¥V©VÄVÚVóVùVWWWW0WRWXW`WeWkWnW„W�W�W±W¹WÎWÓWâWX h/h=h?hMhZh`hkh‚h‘hœh h«h·h¾hÊháhøh i"i,i:iLiNi\ininiwiˆi�i�i�i¶i¶iÛiÛiàiàiéiõijj#j:jIjTjfjrj‰j¡jÂjÂjËjĞjĞjĞjĞjàjéjñjöjkk"k'k'k5k5k:k:kDkOkakgkskƒk�k˜kœk¥k¾kÁkÑkØkökÿkÿkll.l5l;lGlOlZlalelxl~l‹l–lœl¬l¼l¼lélmmm&m-m8mHmXmXmhmmmmmwm‚m”mšm¨mµmÂmÌmĞmÙmòmõmn nnn%n%n*n.n>nGnYn_nananonun~n�n˜n¤n´n´n´n¹nÑnÑnànãn÷no oIo[ofoxo|o�oˆošoªoÅoÌoĞoÖoŞoéoøpŒ8í÷–'–'°'Å'Û'ü'é'(,(,(6(�`j~XŸXŸxŸŸ‡Ÿ’ŸœŸ§Ÿ¯Ÿ¾ŸÈŸËŸğŸòŸ   �_†Ù†Ù¨Ù¯Ù¶Ù»ÙÒÙäÙîÙôÙÚ ÚÚ Ú"Ú$Ú.Ú8Ú8Ú<ÚDÚLÚTÚ^ÚgÚoÚrÚ{Ú–Ú§Ú®Ú±Ú¶ÚÅÚËÚÓÚÓÚÚÚİÚâÚñÚ÷ÚÿÚÿÚ␍ÛÛÛ$Û/Û7Û7ÛBÛVÛ]ÛdÛ{Û�83=öÖöÖÿÖÿÖ␍×× ×"×'×�8>H.×.×7×7×E×I×P×S×XבDDQF0F0`0s0}0„0�0¨0±0µ0Ç0Í0ì0’Ä{¨ÆÿÆÿğÿóÿúÿÿÿ $+ATcikrx‚‚–˜Ÿ¥¯¯¯ÆØßîğ+“0RZî0î0÷01.14141<1”„\y†ñ†ñ˜ñ­ñ·ñÀñÂñÉñÙñäñæñğñğñùñ
XXXXX-X8XEXQXdXqX~X•X©X³XµXÌXàXåXğX÷XYYY,Yª°)ğ¡ğ¡¢ ¢%¢)¢2¢A¢M¢X¢c¢k¢v¢~¢�¢�¢•¢¯¢Õ¢Ï¢å¢î¢#££3£3£K£V£r£y£�£Ö£Ö£Ö£Ö£7¤«˜‹-Ş·Ş·û·¸ ò␍ò␍ò1ò<ò>òWò^òbòqò„ò×ò• 
¸¸,¸6¸6¸M¸W¸r¸ˆ¸–¸š¸º¸Î¸â¸é¸í¸¹¹!¹.¹.¹5¹<¹A¹F¹K¹R¹Y¹s¹z¹Š¹�¹�¹˜¹®¹²¹²¹Ã¹Ö¹é¹é¹ï¹ú¹º ººº#º.º5º5º@º^ºbºzºkº•º•º›º¢º±º»ºÉºĞºÔºÖºèºèºèºúº»(»6»6»:»O»W»g»r»‡»Œ»š»©»³»Á»Ì»Ğ»Õ»İ»á»ğ»ò»¼¼¼¼#¼*¼.¼B¼L¼Z¼a¼e¼u¼€¼…¼£¼­¼»¼Â¼Æ¼Ğ¼Ş¼å¼é¼ó¼½½½½½½)½4½D½P½f½n½y½ˆ½�½›½ ½¨½³½¿½Ã½Î½Ó½ç½ï½ú½ú½ú½ú½¾4¾@¾H¾X¾h¾†¾Š¾¹¾®¾Ÿ¾É¾É¾Ó¾Ú¾é¾ø¾¿¿¿¿¿,¿6¿D¿K¿O¿O¿Q¿c¿c¿u¿u¿u¿‡¿™¿¡¿¹¿å¿ó¿÷¿ÀÀ#À.ÀDÀIÀPÀcÀmÀ{À‚À†ÀˆÀ›À¥À³ÀºÀ¾À¾À¾À¾ÀÌÀ×ÀæÀğÀşÀ Á␍Á␍ÁÁÁÁ-Á/Á>Á@ÁOÁQÁ`ÁgÁkÁÁ‰Á—Á�Á¢Á²Á½ÁÂÁàÁêÁøÁÿÁÂ␍ÂÂ"Â&Â0ÂDÂLÂWÂ[Â[Â[ÂfÂmÂ{•¥°ÂÅÂÊÂÕÂåÂñÂÃÃÃ)Ã1Ã<ÃAÃIÃTÃ`ÃdÃoÃtÈÃ�ÛÛÛÛïÿÃÔÃáÃåÃùà >/>/G/d/i/–hú6e6eLeWebepe{e„e•e�e¯eµeÁeØeØeêeûeff"f(fvf—„a~�K�K¾KÄKÍKÙKáKèKìKõKõKúKLLCLHLlLtLvL�L¦LÊLéLûL˜lò îî &HJl�n£�²²ÄËííõ™ y}€Š€Š‰Š•ŠšŠš(A^ç^ç€çˆç�ç–ç˜ç˜ç©ç©ç©ç±ç¹çËçÚçËçïçñçñç è␍è␍èèè7è<è<è<èQèSè`èbèoèqè~è†è�è•è¤è±è³èÄèÑèÑèÑèÚèìèÿèé␍éééé1é1é1é<éFé^écécécéqéwé|é„é�é¡é¬é±é±é¸é¼éÊéÎé×éŞéüé êêê5ê:ê:ê:ê:êBêMê[ê[ê{ê{ê{ê‚ê�êŸê²êÅêÇêÇêÇêÚêÚêáêèêíêóêëë+ëUë[ë[ëoëtë˜ëŸë«ëÉëÜëçëîëòëòëòëòëıëìì7ìBì_ìiìiìwì•ìÅìØìéìííííí í+í=íHíMíMíMí_í‰í�í�í�íší¤í°í»í½í½í½íÂíÎíÎíî›H%¯/¯/½/Ä/Ï/Ü/ç/ï/ï/0000œ0 vOvO�OŠO¬OÈO¾OàOèO�Lİì†&†& &µ&Ë&ì&Ù&' '4'U'B'm'…'…'�'�ğ·şLşL3M<MHMPM[MzMzM„M†M¡M‰M°M°M¾MÈMÏMïMñM NNN.N.NUNZNyN’N¯N²NºNÁNáNãNıNOO O O=O=OdOvOŸTVg®®ÄÑ×İîü
Ä Ä,Ä0Ä>ÄSÄcÄzēĬĮĹÄÁÄÁÄÊÄçÄøÄÅ(Å6ÅAÅMÅUÅWÅbÅjÅjÅjŇŕţźÅÑÅàÅíÅ␍ÆÆÆ$Æ8ÆRÆRÆVÆlÆ{ƖơƸÆÀÆÀÆåÆåÆøÆÇÇ3ÇMÇ\ÇiljǗǭÇÉÇÙÇñÇñÇ È ÈÈ0ÈHÈQÈQÈQÈ]ÈnȆÈ�È�ȖȟȥȱÈɬ0ùAø�ø��)�4�>�D�N�T�^�l�v�ˆ�’�˜�¢�¨�²�¹�Å�Ë�Ô�ÿ�����/�9�K�U�j�j�m�w�Œ�‘�¡�¬�±�Å�Ø�â�÷�‘‘‘$‘5‘E‘V‘c‘c‘p‘p‘x‘†‘Í‘­l£:EE/EGEWEwE‰E¡E¼E¼EæEîEòEõEùEşEF FFF F%F)F.F8FIFPFWFYF]FfFpFsF~FŠF�F�F©F¯F¶F¿FØFéFòFûFGGG%G6GGGSGaGcGjGqGvGzG‡G�G±G¿GÉGÓGÜGõGHHH H)H/H3H8H<HIHPH^HhH}H‡H�H©HºHÃHÌHÔHİHãHçHìHòHüHI%I3I9I>IFINIVIcIkIŠI}IŸI¨IÃI×IêIñIúIJ  &47A 0
JJJ%J>J.JNJRJ¬J®  x‡x‡†‡¨‡®‡¯¸�·§'§'µ'º'õ'÷',(W(W(g(l(l(€(…(…(¡(¦(¦(Æ(Ë(Ë(ß(ä(ä()))3)Y)y)‹)�)¯)¿)¿)¿)¿)Æ)Ÿ*°$bg÷%÷%û%&%&?&±ƒ.À.À@ÀOÀOÀRÀ[ÀgÀgÀ}À“À¥À¬À°ÀÀÀàÀòÀøÀÁÁÁÁ#Á9Á=ÁZÁxÁŠÁ�ÁŸÁ±Á½Á¿ÁËÁÓÁ×ÁİÁæÁæÁæÁøÁ  Â&Â.ÂDÂKÂKÂKÂY€‰‘£«´¿ÂÅÂÛÂâÂêÂñÂÃÃÃÃÃÃ,ÃSÃ`ÃiÃqÃËÔÔßæôøÃÄÃÜÃäÃêÃùÃÄÄÄÄÄ%Ä-Ä3ÄPÄYÄaÄgÄmÄmÄmÄtÄ{ĊĒĘÄ�Ä�ĠĪIJxşÖşÖ ×!×(×3×I×s×�×–×®×´×Ã×Ì×Ô×Üת×ä×ê×ù×ØØ ØØ³¤Ôy~b~b¡b©b¹bÁbåbübcccc c+c3c3c;ckcªc…cÍcÒcÚcêcìcd d)d0d8d@dLdTd\dodwd|d†d¦d­d¯d¹dÈdèdïdñdeeee!e(eAeGeOeOeTeXedemeve‚e¥e³eáeäef␍f!f;f?f^flfxf¦f¬f®fÜfßfßfûfgg6g>gBgMgUgeggg•g˜g g°g²gàgægægğgğgûg,h4h4h4h4h=hIh_hxh‹h’h�h¥h¥h¸h¼h¼h¼hÃhÈhÛhâhîhõhõhiii)i0i<iCiCiPiZiZi_i‚i‚i”i´à˜Ì¾@¾@Ó@ñ@Ş@&A AA5ADALAWAYAdAoAoAtA©A®AãAûAèAB Röö%F2iUx„‰•¥¬¹ÄĞÛãèôù␍#(3LUafz�……Š£¨ÁÖèíø0;EPR]eeuj�­¡àZ�˜d˜d²dÀdÅdÒdàdédee7e@ePekeve†eˆeŠe”e e¤e±e½eÏe×eïeóeóeóeóeøef0f0f7f:fBfNfWf­f¢d1.*.*L*d*u*|*˜*�*°*Ğ*¼*ß*ğ*+ò*+++++C+C+M+£ü!\>>Vhs †z¯ĞåÒô)FFFXuuªÁµóø ÿ3!Bc{h–о¬Íêêêü:Acck¤(nänä|äŸä¥äªäªä°ä¥(!'�Ö�Ö§ÖµÖ»Ö½ÖÂÖ¦D]j<9<9V9]9f9r9‡9�9•9›9�9�9¬9§„¼Ù¸©¸©ë©÷©û©ª ªªªª"ª&ª.ª3ª7ªHªYª[ª_ªpª�ª�ª£ª«ª¶ª¶ª¶ªÈª¨€À›À›Ù›à›ç›î›ô›œœœ$œ;œ>œ@œ[œeœoœvœ�œ“œ›œ›œ±œ±œÃœ© Ê ¦W¦WÌWéWñWüW XXX4XJXcXiXqXtX‰X�X XÂXÈXĞXÕXÛXŞXôXıXÿX!Y)Y>YCYRYtYzYYYYŒY�Y¨YµYÁYÔYáYîYZZ#Z%Z<ZPZUZ`ZgZŠZŠZŠZœZª°)¢¢3¢@¢E¢I¢R¢a¢m¢x¢ƒ¢‹¢–¢�¢¡¢­¢µ¢Ï¢õ¢ï¢££C£/£S£S£k£v£’£™£½£ö£ö£ö£ö£W¤«˜‹-ş·ş·¸"¸*¸5¸L¸V¸V¸m¸w¸’¸¨¸¶¸º¸Ú¸î¸¹ ¹␍¹&¹0¹A¹N¹N¹U¹\¹a¹f¹k¹r¹y¹“¹š¹ª¹®¹®¹¸¹Î¹Ò¹Ò¹ã¹ö¹ º ººº!º)º4º;ºCºNºUºUº`º~º‚ºšº‹ºµºµº»ºÂºÑºÛºéºğºôºöº»»»»"»H»V»V»Z»o»w»‡»’»§»¬»º»É»Ó»á»ì»ğ»õ»ı»¼¼¼!¼#¼2¼4¼C¼J¼N¼b¼l¼z¼�¼…¼•¼ ¼¥¼Ã¼Í¼Û¼â¼æ¼ğ¼ş¼½ ½½'½/½:½>½>½>½I½T½d½p½†½�½™½¨½°½»½À½È½Ó½ß½ã½î½ó½¾¾¾¾¾¾7¾T¾`¾h¾x¾ˆ¾¦¾ª¾Ù¾Î¾¿¾é¾é¾ó¾ú¾ ¿¿"¿0¿7¿;¿=¿L¿V¿d¿k¿o¿o¿q¿ƒ¿ƒ¿•¿•¿•¿§¿¹¿Á¿Ù¿ÀÀÀ5À<ÀCÀNÀdÀiÀpÀƒÀ�À›À¢À¦À¨À»ÀÅÀÓÀÚÀŞÀŞÀŞÀŞÀìÀ÷ÀÁÁÁ)Á-Á-Á2Á:Á>ÁMÁOÁ^Á`ÁoÁqÁ€Á‡Á‹ÁŸÁ©Á·Á¾ÁÂÁÒÁİÁâÁÂ
B1B,BMB\BdBoBqB|B‡B‡BŒB­B¯BĞBĞB×BÜBşBC"C"C"C*Cµ\âõæbæbübcc c-c9cPcPcbchcscƒc�cœc©cÕcÛÜ^^|�–�¤¨ª±¸¼¼Äİççû%).BFOSX^{{‰ ¥¾ÏÓÓÓØãíô $,59;BTd{}–©­­­ÁÅÎÒ×İúú  $ = N R d d d i x œ ¾ É Ï å ö û    ' + - 3 L L Z q s Œ � ¡ ¡ ¨ » ¿ Ñ Ö ê ò û ÿ ! !!!1!H!M!f!y!}!�!�!�!�!”!!Å!é!ô!ú!"!"!"!"(";"T"T"T"c"c"v"�"˜"©"®"´"¾"À"Ì"Ì"Ó"Ş"ó"õ"##!###.#:#J#Q#X#b#j#n#r#t#y#�#…#—#™#�#¦#ª#¬#¬#µ#Â#Ø#ø#$ $,$3$3$F$J$J$J$Q$V$p$~$Š$‘$‘$«$­$²$Ì$Ú$æ$í$í$ú$%%%·˜ »�HIHIeItItItI‘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  Â#Â-Â;ÂBÂFÂPÂdÂlÂwÂ{Â{Â{†Â�›µÂÅÂĞÂåÂêÂõÂÃÃ'Ã/Ã:ÃIÃQÃ\ÃaÃiÃtÀÄÃ�ÔèðûûûûÃÏÃßÃôÃÄÄÄ*Ä?ÄLÄPÄ^ÄsăĚijÄÌÄÎÄÙÄáÄáÄêÄÅÅ/ÅHÅVÅaÅmÅuÅwłŊŊŊŧŵÅÃÅÚÅñÅÆ␍Æ-Æ4Æ4ÆDÆXÆrÆrÆvƌƛƶÆÁÆØÆàÆàÆÇÇÇ3Ç<ÇSÇmÇ|ljǩǷÇÍÇéÇùÇÈÈ)È)È5ÈPÈhÈqÈqÈqÈ}È�ȦȯȯȶȿÈÅÈÑÈ0ɬ<ùDø�ø��)�4�>�D�N�T�^�l�v�ˆ�’�˜�¢�¨�²�¹�Å�Ë�Ô�ÿ�����/�9�K�U�j�j�m�w�Œ�‘�¡�¬�±�Å�Ç�Ø�û�û�‘‘(‘1‘9‘G‘X‘h‘y‘†‘†‘“‘“‘›‘©‘ğ‘­$› >O>OROZOeOkO®l£:†E†EŸE·EÇEçEùEF,F,FVF^FbFeFiFnFxF{F‚FˆF�F•F™F�F¨F¹FÀFÇFÉFÍFÖFàFãFîFúFıFGG G&G/GHGYGbGkGsG~G‰G•G¦G·GÃGÑGÓGÚGáGæGêG÷GşG!H/H9HCHLHeHvHHˆH�H™HŸH£H¨H¬H¹HÀHÎHØHíH÷HII*I3I<IDIMISIWI\IbIlIvI•I£I©I®I¶I¾IÆIÓIÛIúIíIJJ3JGJZJaJjJsJzJƒJŒJ•J®J�J¾JÂJK¯  x‡x‡†‡¨‡®‡°¸�·§'§'µ'º'õ'÷',(W(W(g(l(l(€(…(…(¡(¦(¦(Æ(Ë(Ë(ß(ä(ä()))3)Y)y)‹)�)¯)¿)¿)¿)¿)Æ)Ÿ*±$bg÷%÷%û%&%&?&²ƒ�Á�Á°Á¿Á¿ÁÂÁËÁ×Á×ÁíÁ Â0ÂPÂbÂhÂw€„Š“©­ÂÊÂèÂúÂÃÃ!Ã-Ã/Ã;ÃCÃGÃMÃVÃVÃVÃhÃsÃyÃ�ÖÃ�ôûûûÃÉÃğÃùÃÄÄÄ$Ä/Ä5ÄKÄRÄZÄaÄvććÄ�Ä�Ä�ÄœÄÃÄĞÄÙÄáÄóÄûÄÅÅÅÅ$Å(Å4ÅLÅTÅZÅiÅrÅvÅ~ŇŇŕÅ�Å£ÅÀÅÉÅÑÅ×ÅİÅİÅİÅäÅëÅúÅÆÆÆÆÆÆ³xnØnØ|ؘؑأعØãØÿØÙÙ$Ù3Ù<ÙDÙLÙNÙTÙZÙiÙqÙwÙyÙÙ´¤Ôyîcîcdd)d1dUdldpdxd€d†d�d›d£d£d«dÛdeõd=eBeJeZe\eŠe�e™e e¨e°e¼eÄeÌeßeçeìeöeff f)f8fXf_faf�fˆfˆfˆf‘f˜f±f·f¿f¿fÄfÈfÔfİfæfòfg#gQgTgpg}g‘g«g¯gÎgÜgèghhhLhOhOhkhxhŒh¦h®h²h½hÅhÕh×hiii i"iPiViVi`i`ikiœi¤i¤i¤i¤i­i¹iÏièiûijjjj(j,j,j,j3j8jKjRj^jejejj�j†j™j j¬j³j³jÀjÊjÊjÏjòjòjkµà˜Ì.B.BCBaBNB–B|BpB¥B´B¼BÇBÉBÔBßBßBäBCCSCkCXC�CzC¡CœC½CÌCÔCßCáCìC÷C÷CüCD D@D@DGDLDnDpD’D’D’DšD\æùFdFd\dndtdd�d™d°d°dÂdÈdÓdãdîdüd e5e·ÛÜÎÎìÿ␍!(,,4MWWkv„•™�²¿ÃÈÎëëù  . ? C C C H S ] d w { € ” œ ¥ © « ² Ä Ô ë í      1 5 > B G M j j x � ” ­ ¾  Ô Ô Ô Ù è  !.!9!?!U!f!k!v!Š!�!—!›!�!£!¼!¼!Ê!á!ã!ü!␍""""+"/"A"F"Z"b"k"o"t"{"‘"¡"¸"½"Ö"é"í"ÿ"ÿ"ÿ"ÿ"#&#5#Y#d#j#€#‘#‘#‘#˜#«#Ä#Ä#Ä#Ó#Ó#æ#ı#$$$$$.$0$<$<$C$N$c$e$p$…$‘$“$�$ª$º$Á$È$Ò$Ú$Ş$â$ä$é$ñ$õ$% %%%%%%%%2%H%h%‚%�%œ%£%£%¶%º%º%º%Á%Æ%à%î%ú%&&&&"&<&J&V&]&]&j&t&t&†&¸˜ »�HIHIeItItItI‘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
JJ!J9J;JZJ\J{J€JŸJ¤JªJªJÃJÆJíJúJK2K2K;K@K^KLKdKsKxKKˆK›K£K«K°K°K°K¹KÒKØKØKñKÿKL5L7L?LELMLRLRLXLXLaLrLtL‰L‹L“L™L¡L¦L¦L¦L¦L´LËLÍLáLáLéLïL÷LüLM␍MMM"M$M$M$M,M,M:MQMUMWMcMeM€M†M�M“MœM§MªM°M¶M¿MÂMÂMĞMáMãM N&N,N4N9NBNGNGNLNNNVNVNqNƒNˆN”NšN�N´N¶N¹NÉNÍNÔNİNìNúNOO␍OOOO"O/OGOLOVO~O‰O”OŸOªOµOÀOËOÖOÖOÖOŞOŞO÷OP"P;P;P=P=PFPLPNPNPTPZPZPbPkPqP}P}P„P‡P¦P±P¹PÁPÆPÆPÍPÑPÖPèPíP÷PQQQ5Q5Q>QLQ]QiQpQ~Q�Q£Q©Q®Q®Q³QÉQÕQİQíQ÷QRRRR R R*R8RDR[RqRˆR�R�R§R¬R¬RÌRÌRŞRäRíRóRüR JJ!J9J;JZJ\J{J€JŸJ¤JªJªJÃJÆJíJúJK2K2K;K@K^KLKdKsKxKKˆK›K£K«K°K°K°K¹KÒKØKØKñKÿKL5L7L?LELMLRLRLXLXLaLrLtL‰L‹L“L™L¡L¦L¦L¦L¦L´LËLÍLáLáLéLïL÷LüLM␍MMM"M$M$M$M,M,M:MQMUMWMcMeM€M†M�M“MœM§MªM°M¶M¿MÂMÂMĞMáMãM N&N,N4N9NBNGNGNLNNNVNVNqNƒNˆN”NšN�N´N¶N¹NÉNÍNÔNİNìNúNOO␍OOOO"O/OGOLOVO~O‰O”OŸOªOµOÀOËOÖOÖOÖOŞOŞO÷OP"P;P;P=P=PFPLPNPNPTPZPZPbPkPqP}P}P„P‡P¦P±P¹PÁPÆPÆPÍPÑPÖPèPíP÷PQQQ5Q5Q>QLQ]QiQpQ~Q�Q£Q©Q®Q®Q³QÉQÕQİQíQ÷QRRRR R R*R8RDR[RqRˆR�R�R§R¬R¬RÌRÌRŞRäRíRóRüR
SSS&S,S.S9SKSaSaSuS…S—SœS¨S®S±SÈSÊSÍSİSçSêSêSùST"T'T3T9T<TSTUTXThTlTtT‚T‡TŒTŒT’TšTŸTŸT¥T¥T³T¹T¿TÉTÓTáTöTùTûTUUUUUUUU$U,U1U1U6UAUFUKUVU[U�UƒUˆU�U’U—UœU¡U¦U¦U«U°UÌUÖUêUşUV V VV V&V0V:VHV]V`VbVlV{V€V€V€VˆV�V–V–V›V›V¡V©V®V®V³V¾VÃVÈVÍVÜVÜVíVóVóVWW␍WW!W/WDWGWIWSWbWgWgWgWoWtW}W‚W‚WˆW�W•W•WšW¥WªW¯W´WÃWÃWÔWÚWÚWèWîWôWşWXX+X.X0X:XIXNXNXNXVX[XdXiXiXoXwX|X|X‰X�X�X�X£X©X³X½XËXàXãXåXïXşXYYY YYYYY$Y,Y1Y1Y>YDYDYRYXY^YhYrY€Y•Y˜YšY¤Y³Y¸Y¸Y¸YÀYÅYÎYÓYÓYİYåYêYêYêYğYúYZZZZ Z)Z/Z4Z4Z=ZKZTZbZgZgZpZ~ZŠZ›Z¨Z¯Z·ZÁZÏZÏZÔZÔZßZßZßZãZèZèZïZóZøZ[[[[ [([-[3[3[;[D[R[][b[h[p[u[u[u[u[u[u[u[u[u[u[�[”[�[£[«[°[µ[¾[É[Ò[Ú[ß[ß[ß[å[í[ò[ò[ö[û[û[\\\'\-\-\6\L\L\R\[\q\q\z\|\‚\‹\¡\¡\ª\ª\ª\³\¸\¸\À\Å\Å\â\ğ\ü\]]]]]]]2];]A]S]]]]]e]e]m]o]o]ˆ]’]›]�]�]�]£]§]©]©]©]©]®]´]º]¾]7a¸Ìz©–i–i¸iÃiÙiõijj,j7jMj9j\jdjdjsjsj{j‡j�j²jÁjÌjßjåjåjåjêjïjşj k#k%k*k9kDkQk[k[kik¹”*K8¤8¤P¤W¤^¤a¤j¤m¤p¤t¤y¤›¤ˆ¤«¤³¤»¤¾¤À¤Ğ¤Ù¤â¤è¤ë¤ü¤¥+¥6¥h¥ºà.¢&A&ADAOA`AcAgApAwA…A”AªA»AÌAŞAğAÿAB B.B.B<B@BDBIBMBZBaBoBƒBŒB’B B¹B»B¿BÉBÉBÎBÎBÎBÓBÓBâBëBóB C C CCC&C2C=CBCBCECJCJCiCuC‚C„C„CˆCŠCŠC©CµCÁCÃCÃCÆCÈCÈCÕC×C×CÚCÚCãCéCîC SSS&S,S.S9SKSaSaSuS…S—SœS¨S®S±SÈSÊSÍSİSçSêSêSùST"T'T3T9T<TSTUTXThTlTtT‚T‡TŒTŒT’TšTŸTŸT¥T¥T³T¹T¿TÉTÓTáTöTùTûTUUUUUUUU$U,U1U1U6UAUFUKUVU[U�UƒUˆU�U’U—UœU¡U¦U¦U«U°UÌUÖUêUşUV V VV V&V0V:VHV]V`VbVlV{V€V€V€VˆV�V–V–V›V›V¡V©V®V®V³V¾VÃVÈVÍVÜVÜVíVóVóVWW␍WW!W/WDWGWIWSWbWgWgWgWoWtW}W‚W‚WˆW�W•W•WšW¥WªW¯W´WÃWÃWÔWÚWÚWèWîWôWşWXX+X.X0X:XIXNXNXNXVX[XdXiXiXoXwX|X|X‰X�X�X�X£X©X³X½XËXàXãXåXïXşXYYY YYYYY$Y,Y1Y1Y>YDYDYRYXY^YhYrY€Y•Y˜YšY¤Y³Y¸Y¸Y¸YÀYÅYÎYÓYÓYİYåYêYêYêYğYúYZZZZ Z)Z/Z4Z4Z=ZKZTZbZgZgZpZ~ZŠZ›Z¨Z¯Z·ZÁZÏZÏZÔZÔZßZßZßZãZèZèZïZóZøZ[[[[ [([-[3[3[;[D[R[][b[h[p[u[u[u[u[u[u[u[u[u[u[�[”[�[£[«[°[µ[¾[É[Ò[Ú[ß[ß[ß[å[í[ò[ò[ö[û[û[\\\'\-\-\6\L\L\R\[\q\q\z\|\‚\‹\¡\¡\ª\ª\ª\³\¸\¸\À\Å\Å\â\ğ\ü\]]]]]]]2];]A]S]]]]]e]e]m]o]o]ˆ]’]›]�]�]�]£]§]©]©]©]©]®]´]º]¾]7a¹Ìz©kk(k3kIkekrk‰kœk§k½k©kÌkÔkÔkãkãkëk÷k␍l"l1l<lOlUlUlUlZl_lnlyl“l•lšl©l´lÁlËlËlÙlº”*KX¤X¤p¤w¤~¤�¤Š¤�¤�¤”¤™¤»¤¨¤Ë¤Ó¤Û¤Ş¤à¤ğ¤ù¤¥¥ ¥¥:¥K¥V¥ˆ¥»à.¢–A–A´A¿AĞAÓA×AàAçAõABB+B<BNB`BoB~B�B�B�B¬B°B´B¹B½BÊBÑBßBóBüBCC)C+C/C9C9C>C>C>CCCCCRC[CcCyCyCyC~C~C–C¢C­C²C²CµCºCºCÙCåCòCôCôCøCúCúCD%D1D3D3D6D8D8DEDGDGDJDJDSDYD^DzDzDzDzDzDzDzDzDzDzDzDzD|D�DŸD®D½D½DÁDÁDÉDâDæDëD†E¼,îÕîÕüÕÖ ÖÖÖ½l3JÆQÆQÜQöQâQR*RR9R>RERERKRNRRRZRrR}R“RˆR«RµR¾PQa%%%+%2%B%S%X%u%{%‚%‰%—%£%µ%ñ%¿D+¶ä¶äÊäØäŞäåå␍å2å8å>åDåDåLåÀô#œÎ5Î5Ö5å5é5ö566&6C6P6b6„6¬6º6Ö6è677"7C7a7p7‹7–7±7Ê7Ê7å78(8C8U8d8s8s8~8‘8¢8µ8Å8Ò8Ş8í8
D 9
D 9999#90979V9_9p9t9|9‡9Ÿ9·9À9Ğ9Ø9İ9::!:,:@:E:M:s:u:€:³:Í:Í:å:ô:ü: ;;;.;P;X;`;k;m;};•;­;Å;İ;ï;<<<*<8<<<@<Á °‡°‡¹‡Ø‡İ‡Â\ˆ[–̷̖̰ÌÄÌÏÌÔÌÚÌìÌòÌ
D ÍÍ.ÍDÍOÍUÍwÍw͇͜Í�ͭ͡͵ͽÍÅÍÓÍÙÍâÍîÍîÍğÍÎÎ␍Î␍Î$Î$ÎBÎBÎUÎbÎgÎgÎ~·ΖάηÎÅÎĞÎàÎíÎÿÎÏÏÏ(Ï*Ï*Ï2Ï7Ï7Ï?ÏDÏDÏLÏQÏQÏYÏ^Ï^ÏdÏiÏiÏpÏuÏuÏ|Ï�Ï�όϑϑϜϡϡϬϱϱϼϼÏ×ÏŞÏäÏçÏòÏõÏ ĞĞ%Ğ,Ğ/ĞAĞCĞIĞ]ĞjĞyĞyĞyĞyЃĞ�вĞÄĞÕĞŞĞïĞõĞúĞÑÑ(Ñ7Ñ=ÑNÑYÑcÑsтшѓљѮѴÑÅÑĞÑÖÑæÑæÑöÑ ÒÒÒ-Ò4Ò:ÒKÒVÒ[ÒxÒ�Ò›Ò«Ò·ÒÉÒÔÒãÒåÒ÷ÒÿÒÓ ÓÓÓ'Ó-Ó7Ó=ÓHÓNÓPÓ]ÓjÓtÓ�Ó›Ó›Ó¡Ó¨ÓìÕÃD#°ø«ø«¬9¬A¬A¬O¬b¬|¬¬ˆ¬¤¬¤¬¤¬¬¬®¬®¬¶¬¸¬¸¬À¬Â¬Â¬Ê¬Ê¬Ó¬Ù¬Ş¬Ş¬ç¬ö¬ú¬ÿ¬­
D ­
D ­
D ­
D ­­­!­&­&­+­8­Q­p­s­‰­¨­¨­¨­°­²­²­²­º­¼­¼­¼­Ä­Æ­Æ­Æ­Î­Ğ­Ğ­Û­Û­á­æ­æ­æ­æ­í­ø­
D ®®&®0®0®0®@®@®G®K®Q®i®w®Š®—®À®Ã®Ì®Ó®ç®ï®ø®¯¯¯¯¯¯¯ ¯&¯;¯C¯I¯T¯k¯‚¯�¯”¯™¯™¯ ¯«¯«¯°¯Â¯È¯È¯È¯È¯$°Äd*,C,CNCXC[C[CeCxCzC‡C‰C”C¨C°CÀCÅCËCÓCÖCèCÅLWfG1G1[1_1d1o1o1y111ƒ1‹1Æ\CVß0ß0õ0õ0ù0ş01111#1)1)17191C1Ç8(2ÆÖÆÖÏÖÏÖİÖáÖèÖëÖğÖȨYæ]æ]ş]^^$^^V^º^ ^•^{^d^À^Õ^Å^õ^ú^__1__@_F_F_M_w_¢_…_¹_×_×_×_ã_ÉlF]n,n,ˆ,±,“,À,à,ü,ò,-,--;-T-t-†-Ÿ-Ÿ-¦-È-È-Ò-Ê4Š“¾ë¾ëÒë×ëİëáëåëì ìËxÌæN‚N‚y‚f‚ˆ‚’‚™‚¯‚´‚¹‚½‚¿‚ł˂á‚΂ğ‚ ƒƒ#ƒFƒ<ƒUƒaƒÌ”"ȪȪ֪èªìªôªüª«««%«0«5«K«R«Y«d«o«q«|«‡«‰«•« «««´«¼«¼«À«÷«Í€ÚöO5O5m5q5u5}5‹5�5‘5§5­5¯5Á5Å5É5Ñ5Ù5å5ú5 6666&6;6ÎŞ`VEVE†E‘E¶E˜EĞEF F FFF0F?FAFIFkFŒF�F«FÆFÚFßFùFGG
D G!GHGZGgG‚G¢G˜G¼GÂGÂGËGëG÷GúGüGHH&H&H8H8HFHPH{HqH•H•HšH�H³H¿HÔHøHIII@I/IOIQIcIwI‹I�I I¦IµIİIÌIìIîIJ
D JJ(J1JHJRJTJhJrJrJ‘J—J—J—J JÀJèJ×J÷JüJKKAK7KVKVKVK|K|K�KÏ`8ÌN1N1…1Œ1”1�1¨1¯1Ç1Ì1Ï1Ò1Û1é1ó1ø1 2%222^2c2p2�2•2¤2Ğ2Ø2İ2ò23&3+3+3>3Q3e3i3‹3œ3¡3¡3Í3Í3Í3Í3Í3á3ù3ş34441464?4L4T4o4†4”4Ÿ4»4»4»4È4ß4á4á4á4î45555+5+5;5@5g5~5�5¬5¬5¬5¹5Ğ5Ò5Ò5Ò5ß5ö5ø5ø5666,64696Y6p6‚6�6�6�6«6Â6Ä6Ä6Ñ6è6è6ü6ş6 7.7L7Q7_7m7w7y7y7y7–7�7 7 7È78Ф%J&è&è@èlèlè‹è›è è è¯èÁèÛèãèêèïè
D éééééééé0é0é0é0éGéIéIéIéIédéoé¤éÑĞçfƒfƒ|ƒˆƒ�ƒ�ƒ™ƒ�ƒ£ƒ®ƒ³ƒ³ƒ³ƒèƒÕƒ÷ƒ„„7„P„i„‚„‡„‡„ „¹„Ò„ë„ğ„ğ„ …"…;…T…V…V…o…ˆ…¡…º…º…º…Ì…Ò0�‰^ë^ëlërëvë•ë¶ë¶ë¼ëÓ<:E?8?8H8S8a8m8y8‚8‹8”8š8Ÿ8ÔluŒ×&×&å&ï&ö&␍'␍''' '*'8'U'W'g'g'l'n'u'§'ÕÈŸÍ6t6tJtttitUt”tÆt¬tŸtñtötuuu5uRu«u“uu±u¼uèuíuõuvvAv6v"vTvmvYv�v|v§v®vÚvÚvÚvÚvâvÖL^mÖ-Ö-ô-.␍././.A.N.^.T.v.€.×$qv†M†MšM¢M­M³MØÈg•�1�1³1·1Ö1ø12 22$212:2:2?2I2a2l2|2ˆ2�2š2«2­2¾2À2Â2Â2Â2Ê2Ê2Ô2Ô2Ü2ä2ì2ô2ø23O3Ù  ‡ ‡.‡E‡K‡Ú`FZŸ8Ÿ8¯8¶8¸8½8Ì8Ò8ç8ç8õ8õ89
D DD/D>DMDMDQDQDYDrDvD{DE»,ÎÕÎÕÜÕãÕëÕğÕöÕ¼l3JVPVPlP†PrP•PºP¦PÉPÎPÕPÕPÛPŞPâPêPQ␍Q#QQ;QEQ½PQa%%%+%2%B%S%X%u%{%‚%‰%—%£%µ%ñ%¾D+–ä–äªä¸ä¾äáäçäíäååå$å$å,å¿ô#œ^5^5f5u5y5†5“5§5¶5Ó5à5ò56<6J6f6x6�6§6²6Ó6ñ677&7A7Z7Z7u7�7¸7Ó7å7ô7888!828E8U8b8n8}8š8š8¢8¢8¢8³8À8Ç8æ8ï899 99/9G9P9`9h9m9‘9¡9±9¼9Ğ9Õ9İ9:::C:]:]:u:„:Œ:›:¤:¬:¾:à:è:ğ:û:ı:␍;%;=;U;m;;–;Ÿ;¨;º;È;Ì;Ğ;À °‡°‡¹‡Ø‡İ‡Á\ˆ[vÌvÌ�̴̗̤̯̺ÌÌÌÒÌêÌğÌÍ$Í/Í5ÍWÍWÍgÍ|Í~Í�Í�Í•Í�ͥͳ͹ÍÂÍÎÍÎÍĞÍâÍèÍíÍíÍÎÎ"Î"Î5ÎBÎGÎGÎ^ÎgÎvΌΗΥΰÎÀÎÍÎßÎåÎïÎûÎÏ 9␍99%9(909Û<öF�F�O�Z�e�p�{�…�£�®�¾�Ü 5vfvf�f f¦f²f½fËf×fîfùf gg!g'g-g@gFgOgUgggmgxg€g�g›gØgİ,29¾/¾/Ì/İ/ö/
Ï 0␍00Ş4à‡à‡î‡ø‡ˆˆˆˆˆ ˆßÄMz�ı�ıºı½ıÂıÏıÔıæıèıìığıóış şEşNşYş`şyşŸş¤ş½şãşèşïşÿ.ÿ0ÿIÿoÿoÿoÿ‡ÿ¡ÿ°ÿÂÿà ˆÇvv4v7v=vQvYvjvwv}v‚v‚v�v˜v�v®v¼v¾vİvñvøvwww"w5w@wDwUwUwUwZwZwfwuwˆw�w“w§w­wµwÇwÍwÏwŞwëwñw÷wüwxxxx"x$x)x1x3x8xDxFxKxSxUxZxbxdxixqxsxxx€x€x€x�x�x�x§x­x³x¾xÃxÜxâxíxõxÿxy y"y-y8y>yKyPyUyUyjyry|y„yŒy­y¸yÃyÏyÉyØyáyæyëyzzzz"z.z2z7z<zGzRz]z_zezrzwz|z•z z«z«z±z¾zÀzÅzÎzçzòzız{{{{{{*{,{,{?{A{A{T{V{V{i{k{k{~{€{€{’{’{˜{�{�{´{È{½{Õ{İ{ä{ê{ò{||| | |"|:|=|?|N|`|p|||“|­|²|Æ|Ö|é|î|î|÷| }}(}0}8}<}J}P}U}U}[}o}}„}„}Š}�}•}•}•}›}ª}½}Ê}Î}Ó}Ó}×}Ü}Ü}á}ì}ø}~(~4~4~:~G~I~V~b~q~„~„~‘~�~�~�~�~¡~¦~·~É~Ô~Ü~ä~æ~ø~ı~  --DTThtv‹¢¢¨µ·ÉÉÔÔÔÔÔP‚á „ÈUU,U:UQUVU{U�U†UŒUšU¡U°UµUÁUÓUÓUñUüUVV0VMVYVtVŒV¨V±VÀVÈVÕVŞVãVóVW!W&W.WGWYWiWoWzWƒW‰WÏW¹WªWßWXXõW*X-XRXáXâ<+6ìCìC␍DDD.DGDODiDuDã„ |f f ˆ “ š ¢ ¥ ¥ µ À À à Ê Ñ × İ ã ê ğ       C G J Z b g g n w ˆ � — ¢ ³ ³ ¼ Á Ë Ò Ù á ç é ÷ !! !-!:!:!:!:!@!R![!l!�!�!¶!½!Ç!Ï!Ö!Ö!ß!æ!ò!"␍"␍"␍"!"5"E"H"#ä„97737B7I7c7�7¦7·7À7Î7à7ù7ù7 8%8-808<8åX{Í>>is†‘£±·ÈÏ×íõ-79IYbhmtz€†‘œŸ¦ÀÈâ÷%4;C^{ˆ�¡©°´½¿Ñèöü(..@æ 
ÏÏÏÏ Ï$Ï$Ï,Ï1Ï1Ï9Ï>Ï>ÏDÏIÏIÏPÏUÏUÏ\ÏaÏaÏlÏqÏqÏ|Ï�Ï�όϑϑϜϜϷϾÏÄÏÇÏÒÏÕÏéÏöÏĞ ĞĞ!Ğ#Ğ)Ğ=ĞJĞYĞYĞYĞYĞcĞ}ВФеоĞÏĞÕĞÚĞåĞ÷ĞÑÑÑ.Ñ9ÑCÑSÑbÑhÑsÑyÑ�Ñ”Ñ¥Ñ°Ñ¶ÑÆÑÆÑÖÑéÑõÑıÑ␍ÒÒÒ+Ò6Ò;ÒXÒmÒ{Ò‹Ò—Ò©Ò´ÒÃÒÅÒ×ÒßÒäÒëÒïÒıÒÓ␍ÓÓÓ(Ó.Ó0Ó=ÓJÓTÓmÓ{Ó{Ó�ÓˆÓÌÕÂD#°Ø«Ø«÷«¬!¬!¬/¬B¬\¬_¬h¬„¬„¬„¬Œ¬�¬�¬–¬˜¬˜¬ ¬¢¬¢¬ª¬ª¬³¬¹¬¾¬¾¬Ç¬Ö¬Ú¬ß¬å¬ê¬ê¬ê¬ê¬ò¬û¬­­­ ­­1­P­S­i­ˆ­ˆ­ˆ­�­’­’­’­š­œ­œ­œ­¤­¦­¦­¦­®­°­°­»­»­Á­Æ­Æ­Æ­Æ­Í­Ø­ê­ø­®®®® ® ®'®+®1®I®W®j®w® ®£®¬®³®Ç®Ï®Ø®ã®ã®î®ô®ù®ù®ù®¯¯¯#¯)¯4¯K¯b¯n¯t¯y¯y¯€¯‹¯‹¯�¯¢¯¨¯¨¯¨¯¨¯°Ãd*,C,CNCXC[C[CeCxCzC‡C‰C”C¨C°CÀCÅCËCÓCÖCèCÄLWfG1G1[1_1d1o1o1y111ƒ1‹1Å\CVß0ß0õ0õ0ù0ş01111#1)1)17191C1Æ8(2¦Ö¦Ö¯Ö¯Ö½ÖÁÖÈÖËÖĞÖǨYv\v\�\–\¡\´\¨\æ\J]0]%] ]ô\P]e]U]…]Š]§]¬]Á]®]Ğ]Ö]Ö]İ]^2^^I^g^g^g^s^ÈlF]ş*ş*+A+#+P+p+Œ+‚+¤+¼+©+Ë+ä+,,/,/,6,X,X,b,É4Š“NêNêbêgêmêqêuê”êœêÊxÌæŞ€Ş€ �ö€�"�)�?�D�I�M�O�U�[�q�^�€�™�¡�³�Ö�Ì�å�ñ�Ë”"¨ª¨ª¶ªÈªÌªÔªÜªçªòªúª«««+«2«9«D«O«Q«\«g«i«u«€«‹«”«œ«œ« «×«Ì€ÚöO5O5m5q5u5}5‹5�5‘5§5­5¯5Á5Å5É5Ñ5Ù5å5ú5 6666&6;6ÍŞ`æCæCD!DFD(D`D–D›D›D�D¨DÀDÏDÑDÙDûDE.E;EVEjEoE‰E“E•EšE±EØEêE÷EF2F(FLFRFRF[F{F‡FŠFŒF§F‘F¶F¶FÈFÈFÖFàF GG%G%G*G-GCGOGdGˆG’G˜G¨GĞG¿GßGáGóGHHH0H6HEHmH\H|H~H�HšH®H¸HÁHØHâHäHøHII!I'I'I'I0IPIxIgI‡IŒI�I¦IÑIÇIæIæIæI J JJÎ`8ÌŞ/Ş/00$0-080?0W0\0_0b0k0y0ƒ0ˆ0°0µ0Â0î0ó01 1%141`1h1m1‚1®1¶1»1»1Î1á1õ1ù12,21212]2]2]2]2]2q2‰2�2‘2”2”2Á2Æ2Ï2Ü2ä2ÿ23$3/3K3K3K3X3o3q3q3q3~3•3—3—3¤3»3»3Ë3Ğ3÷34 4<4<4<4I4`4b4b4b4o4†4ˆ4ˆ4•4¬4¬4¼4Ä4É4é455.5.5.5;5R5T5T5a5x5x5Œ5�5œ5¾5Ü5á5ï5ı56 6 6 6&6.60606X6�6Ϥ%J¶æ¶æĞæüæüæç+ç0ç0ç?çQçkçsçzççšç¢ç¢ç¢ç¤ç¤ç¤ç¤çÀçÀçÀçÀç×çÙçÙçÙçÙçôçÿç4èĞĞçö�ö� ‚‚‚‚)‚.‚3‚>‚C‚C‚C‚x‚e‚‡‚®‚®‚Ç‚à‚ù‚ƒƒƒ0ƒIƒbƒ{ƒ€ƒ€ƒ™ƒ²ƒ˃äƒæƒæƒÿƒ„1„J„J„J„\„Ñ0�‰îéîéüéêê%êFêFêLêÒ<:E?8?8H8S8a8m8y8‚8‹8”8š8Ÿ8ÓluŒ×&×&å&ï&ö&␍'␍''' '*'8'U'W'g'g'l'n'u'§'ÔÈŸÍÆrÆrÚrsùrår$sVs<s/s�s†s‘sŸs®sÅsâs;t#ttAtLtxt}t…t¤t¬tÑtÆt²tätıtét u u7u>ujujujujuruÕL^mf,f,„,–,�,¿,¿,Ñ,Ş,î,ä,--ÖÈg•�1�1³1·1Ö1ø12 22$212:2:2?2I2a2l2|2ˆ2�2š2«2­2¾2À2Â2Â2Â2Ê2Ê2Ô2Ô2Ü2ä2ì2ô2ø23O3×  ‡ ‡.‡E‡K‡Ø`FZŸ8Ÿ8¯8¶8¸8½8Ì8Ò8ç8ç8õ8õ89 P‡P‡Y‡m‡r‡ç¤ŸÄf€f€‚€ˆ€š€Ÿ€¥€¨€¬€¬€Ï€Ô€�í€�)��8�N�:�]�e�j�p�s�w�y�’�~�¡�¡�¡�¼�ë�÷�è˜Íï'"61@OO^^mm||‹‹š®©¸¸ÇÖåPéxËåcc4cFcLcXcococ�c‡c’c¢c®c·c½cÃcÎcÜcécõcdddBdêd”©ììì%ì%ì?ìFìRìRìiìiì€ì€ì—ì—ì®ì®ìÅìÇìÇìËìëÌÂñ>>`grˆˆš¥¹½ÂÆÈÎàì+///BWWcis~Œ“¢¤½××éìP7G|D|D’D�D¦DªD»DÉDÏDÛDãDîDôD÷DEí ®-ş<ş<=#='=0=7=>=T=e=v=ˆ=š=©=¸=É=Ø=Ø=ß=ã=ì=ù=> >>>4>4>4>4>4>@>D>G>O>]>e>r>z>‚>“>�>£>£>°>¶>Å>Ü>Ş>é>ö>??
9␍99%9(909Ù<öÖ�Ö�ß�ê�õ�� ��3�>�N�Ú ␍1ee.e@eFeRe]ekewe�e™e©e»eÁeÇeÍeàeæeïeõef␍ff f.f;fxfÛ, N/N/\/m/†/š/�/£/Ü4à‡à‡î‡ø‡ˆˆˆˆˆ ˆİÄMzüüJüMüRü_üdüvüxü|ü€üƒü–ü¯üÕüŞüéüğü ı/ı4ıMısıxıı˜ı¾ıÀıÙıÿıÿıÿış1ş@şRşŞ„¶t¶tÔt×tİtñtùt ???5?7?E?G?R?X?X?`?`?r?y?�?�?�?”?”?¬?º?Å?Ê?Ê?Í?Ò?Ò?ñ?ÿ? @@@@@@3@A@M@O@O@R@T@T@a@c@c@f@f@f@f@f@o@u@y@…@¥@²@À@Ç@�Aî(rxPŠPŠ^ŠeŠuŠxŠ~Šï(nt‡&‡&�&š&«&¶&¶&Ô&ğTzKŞòŞòüòóóóó0ó@óIóOóRóVóXópó€ó�ó“ó—ó�óŸó¢ó¦ó¦óÉóÍóÓóÓóÚóüóô$ô7ô=ôDôOôYô]ô`ôgômôqôwôˆô�ô“ô˜ô¥ô§ô¹ô»ôÂôÏôÑôãôãôãôãôãôõõõ5õ5õJõVõsõ—õ±õ¶õÍõÒõàõ÷õüõöö(ö.ö>öKö_öföröŠö–ö–ö–öœöŸö¢ö»öÁöÕöÛöàöëöëöğöıö
uuu"u"u/u8u>uNu\u^u}u‘u˜u¤u´u´uÂuÕuàuäuõuõuõuúuúuvv(v.v3vGvMvUvgvmvov~v‹v‘v—vœv¢v¨v¯v»vÂvÄvÉvÑvÓvØvävævëvóvõvúvww wwww w w w0w0w0wGwMwSw^wcwkw„wŠw•w™wŸwªwÃwÎwÙwßwìwñwöwöw xxx<xGxRx^xXxgxpxuxzx�x–xŸx«x±x½xÁxÆxËxÖxáxìxîxôxyy y$y/y:y:y@yMyOyTy]yvy�yŒy’yŸyŸy£y¨y¨y¹y»y»yÎyĞyĞyãyåyåyøyúyúy␍zzz!z!z'z,z,zCzWzLzdzlzszyz�z”zŸz–z¯z¯z±zÉzÌzÎzİzïzÿz {"{<{A{U{e{x{}{}{†{š{¬{·{¿{Ç{Ë{Ù{ß{ä{ä{ê{ş{|||| |$|$|$|*|9|L|Y|]|b|b|f|k|k|p|{|‡|¡|·|Ã|Ã|É|Ö|Ø|å|ñ|}}} },},},},}0}5}F}X}c}k}s}u}‡}Œ}š}©}¯}¼}¼}Ó}ã}ã}÷}~~~~1~1~7~D~F~X~X~c~c~c~c~c~߀ß „È>T>T\TjT�T†T«T±T¶T¼TÊTÑTàTåTñTUU!U,U?UFU`U}U‰U¤U¼UØUáUğUøUVVV#V1VQVVV^VwV‰V™VŸVªV³V¹VÿVéVÚVWJW4W%WZW]W‚WXà<+6ìCìC␍DDD.DGDODiDuDá„ |F F h s z ‚ … … •     £ ª ± · ½ à Ê Ğ á á ã ì ø ş # ' * : B G G N W h n w ‚ “ “ œ ¡ « ² ¹ Á Ç É × î ñ !␍!!!!! !2!;!L!m!~!–!�!§!¯!¶!¶!¿!Æ!Ò!â!í!í!í!""%"("ã"â„97737B7I7c7�7¦7·7À7Î7à7ù7ù7 8%8-808<8ãX{ÍISfqƒ‘—¨¯·ÍÕèı␍)9BHMTZ`fq|† ¨Â×äçïó#>[_ho�‰�”�Ÿ±ÈÖÜàâïïïñ ä  ÷
P‡P‡Y‡m‡r‡å¤ŸÄö~ö~*/58<<_d‘} ¹¥ÈŞÊíõú€€€ €"€€1€1€1€L€{€‡€æ˜Íï'"61@OO^^mm||‹‹š®©¸¸ÇÖåPçxÇá¶a¶aÔaæaìaøabb!b'b2bBbNbWb]bcbnb|b‰b•b£b²b²bâbèd”©�ê�ê¢êµêµêÏêÖêâêâêùêùêëë'ë'ë>ë>ëUëWëWë[ëéÌÂñÎÎğ÷*5IMRVX^p|‘“¬»¿¿¿Òççóù#24MggyêP7G|D|D’D�D¦DªD»DÉDÏDÛDãDîDôD÷DEë ®-�<�<¨<³<·<À<Ç<Î<ä<õ<==*=9=H=Y=h=h=o=s=|=‰=�=™= =¤=Ä=Ä=Ä=Ä=Ä=Ğ=Ô=×=ß=í=õ=> ÷÷÷5÷;÷>÷A÷H÷Q÷X÷X÷]÷j÷w÷w÷}÷‹÷¢÷¨÷«÷®÷µ÷µ÷Æ÷Í÷Ú÷ç÷ç÷î÷ø÷ÿ÷ø øø+ø+øEøJøQøYø`øpøtø}ø•øšø¡øÃøÎøÔøÜøõø ù ù$ù$ù>ùLùSùZù|ù�ù³ùµù¿ùáùáùáùúùúú0ú4ú ûñÀ€¬æ_æ_ş_```!`-`N`/`]`b`b`‡`¸`›`�`Û`à` aaa;aaJaOahaoa’a¨a¨aÎaÎaÚaò ///6/</ó4‘šÆNÆNŞNOOOOO>Oô8 ///$///7/>/D/J/J/P/õ :>00 0(0-0öÎPævævww w5wRwaw…w³w¹w¿wÇwÉwÑwæwéwôwxx3xBxfx”xšx x¨x­xµxÊxÍxØxäxéxïxõxıxy␍yy5yCyqywy|y„y”yºyèyîyóyóyzzz7zOz[zczqzqzvz‰z z¢z¿z×zãzëzùzùzşz{{({?{V{o{�{�{°{Ç{Ş{ì{î{|||%|1|G|`|s|~|‘|•|•|•|œ|¡|´|¿|Ù|Û|à|ó|ş| }}}'}÷˜k␍¬9¬9Â9Î9Î9ä9ï9ñ9::::":&:*:-:-:6:::P:P:†:’:¤:´:Ë:Ğ:Ó:Ø:Ø:Ø:ô:û:;;;;;8;D;L;Q;Q;m;z;‚;‡;‡;£;¯;¸;À;È;Ô;ê;õ;<<*<2<7<7<S<m<w<ƒ<‹<�<�<¯<»<Í<Ò<î<ú< ===*=/=/=/=/=2=7=7=7=V=b=t=v=y=~=~=~=ˆ=�=—=Ÿ=¨=³=¹=Æ=Ô=Ô=Ş=ç=ï=$>*>1>@>Z>_>_>r>z>z>|>|>|>�>�>ˆ>�>’>™>�>�>�>�>¬>¬>Ñ>Ú>Ú>Ş>ùBø(üBüB
>>#>.>3>3>@>F>U>l>n>y>†>‘>”>š>–>®>Å>Ç>Õ>×>â>è>è>ğ>ğ>? ? ? ? ?$?$?<?J?U?Z?Z?]?b?b?�?�?œ?�?�?¢?¤?¤?Ã?Ñ?İ?ß?ß?â?ä?ä?ñ?ó?ó?ö?ö?ö?ö?ö?ÿ?@ @@5@B@P@W@ Aì(rxPŠPŠ^ŠeŠuŠxŠ~Ší(nt‡&‡&�&š&«&¶&¶&Ô&îTzK¾ò¾òÜòâòåòîòøòó ó)ó/ó2ó6ó8óPó`ómósówó}óó‚ó†ó†ó©ó­ó³ó³óºóÜóñóôôô$ô/ô9ô=ô@ôGôMôQôWôhônôsôxô…ô‡ô™ô›ô¢ô¯ô±ôÃôÃôÃôÃôÃôçôòôşôõõ*õ6õSõwõ‘õ–õ­õ²õÀõ×õÜõâõóõööö+ö?öFöRöjövövövö|öö‚ö›ö¡öµö»öÀöËöËöĞöİöêöêöğöşö÷÷÷!÷(÷1÷8÷8÷=÷J÷W÷W÷]÷k÷‚÷ˆ÷‹÷�÷•÷•÷¦÷­÷º÷Ç÷Ç÷Î÷Ø÷ß÷å÷ì÷÷÷ ø ø%ø*ø1ø9ø@øPøTø]øuøzø�ø£ø®ø´ø¼øÕøéøéøùùù,ù3ù:ù\ùoù“ù•ùŸùÁùÁùÁùÚùæù÷ùúúéúïÀ€¬v^v^�^’^—^¦^±^½^Ş^¿^í^ò^ò^_H_+__k_p_™_�_ª_Ë_¬_Ú_ß_ø_ÿ_"`8`8`^`^`j`ğ î.î.ı.//ñ4‹”&N&N>NaNnNtNzN}N�Nò8 ///$///7/>/D/J/J/P/ó ¦/¦/°/¸/½/ôÎPvuvu”u¤u¯uÅuâuñuvCvIvOvWvYvavvvyv„v�v¦vÃvÒvöv$w*w0w8w=wEwZw]whwtwyww…w�w•w�w­wÅwÓwxx xx$xJxxx~xƒxƒx”xŸxªxÇxßxëxóxyyyy0y2yOygysy{y‰y‰y�y¡y®y¸yÏyæyÿyzz@zWznz|z~z•z¬z¬zµzÁz×zğz{{!{%{%{%{,{1{D{O{i{k{p{ƒ{�{›{¥{¥{·{õ˜k␍¬9¬9Â9Î9Î9ä9ï9ñ9::::":&:*:-:-:6:::P:P:†:’:¤:´:Ë:Ğ:Ó:Ø:Ø:Ø:ô:û:;;;;;8;D;L;Q;Q;m;z;‚;‡;‡;£;¯;¸;À;È;Ô;ê;õ;<<*<2<7<7<S<m<w<ƒ<‹<�<�<¯<»<Í<Ò<î<ú< ===*=/=/=/=/=2=7=7=7=V=b=t=v=y=~=~=~=ˆ=�=—=Ÿ=¨=³=¹=Æ=Ô=Ô=Ş=ç=ï=$>*>1>@>Z>_>_>r>z>z>|>|>|>�>�>ˆ>�>’>™>�>�>�>�>¬>¬>Ñ>Ú>Ú>Ş>ùBö(üBüB CC!C'Cù�ªÊŞlŞlülmm&m;mImTmcmimimimnmsm�mŒm¥m§m¬mºmÅmÒmÙmçmú\2EN+N+h+�+o+œ+¸+®+Ğ+å+Ò+ô+␍, ,8,8,?,a,a,k,û8fpMMM-MAMPMVM\M_M€Mü0�—H‹H‹\‹h‹v‹y‹‘‹”‹œ‹ı0S[�×�עת׷×Á×Ô׺P>NȈȈԈèˆëˆÿˆ‰ ‰‰ ‰'‰*‰0‰ÿT¡²nOnOˆO›O�O¨OµOÊOÌOŞOèOüOüOPPYP<˜£ ‹ ‹´‹»‹Ç‹Ó‹ã‹è‹ë‹ï‹÷‹ 26NåNå\åhåH!/�[�[¢[®[Ä[°[Ó[Õ[Ü[ç[ó[û[ DƒSSBSISNSVSpSyS{SˆSˆSŠS¤SªS¬S®S»S»S»S»S¿SÎS×SßSèSğS÷SıSÿST T1TDTJT^TcTpTpT„T‹T’T›T©T²TÕTÛTßTäTéTìTöTùT Uläû.ã.ãBãXãfãqãuã|ã€ã‰ã˜ãšãšã®ã°ã¹ã¿ã¿ã¿ã¿ãÇã´KtEE6EGELESE]E]EeExE|E�E–E˜E›EŸE¦EºE¾EÆEÒEÙEİEåEçEïEıEFF
CC!C'C÷�ªÊnknkŒk”k k¶kËkÙkäkókùkùkùkşklll5l7l<lJlUlblilwlø\2EŞ)Ş)ø)*ÿ),*H*>*`*u*b*„*�*¯*È*È*Ï*ñ*ñ*û*ù8fp–L–L®L½LÑLàLæLìLïLMú0�—H‹H‹\‹h‹v‹y‹‘‹”‹œ‹û0S[n×nׂ׊חס״×üP>NȈȈԈèˆëˆÿˆ‰ ‰‰ ‰'‰*‰0‰ıT•¦�N�N¸NËNÎNØNåNúNüNOO,O,O2O5O‰Oş<˜£ ‹ ‹´‹»‹Ç‹Ó‹ã‹è‹ë‹ï‹÷‹ÿ 26.å.å<åHåH!/ZZ2Z>ZTZ@ZcZeZlZwZƒZ‹Z DƒNRNRrRyR~R†R R©R«R¸R¸RºRÔRÚRÜRŞRëRëRëRëRïRşRSSS S'S-S/SKSOSaStSzS�S“S S S´S»SÂSËSÙSâST TTTTT&T)T9Tläûãã"ã8ãFãQãUã\ã`ãiãxãzãzã�ã�ã™ãŸãŸãŸãŸã§ã´KtEE6EGELESE]E]EeExE|E�E–E˜E›EŸE¦EºE¾EÆEÒEÙEİEåEçEïEıEFF F#F+F3FAFEFSF %I–q–q¦q²q¾qÎqæqìqúq rrr3r`rzr‡r”r¤rªr¬r½rßrærìrúrss#s)s/sRsôB»ii"i%i,i7iFiHiSibibioi}i€i‚i‚i‡iŒi•i i¦i¯iÂiÇiÜiçiñiñijj4jHj_jejjjqjwj~jƒjƒj‰j�j”j”j§jµjÍjÓjØjìjöjıjıjk5k;k@k@kkkpkpk›kÂkÇkÇkÇkÊkÑk×kŞkãkãkékïkôkôk l l%lHlNl^ljlpl~l…l‡l›l¡l¨l¨lªlªlªl¯lµlºl¾lÀlÃlÎlİlàlâlælælëlëlùl#m˜}Ÿ##"#'#.#8#>#I#Y#a#i#n#y#ƒ#‰#”#¤#¬#¼#Ã#Ë#Ó#Û#ã#è#ó#$$$  B†Î=Î=æ=í=>(>3>@>N>B>w>w>ƒ>‹>š>Ô>Ö>? ? ?@?X?E?y?g?ˆ?�?�?²?´?¿?Ç?Ç?è?í?ö?@
F#F+F3FAFEFSF !E6p6pFpRp^pnp†pŒpšp«p³pºpÓpqq'q4qDqJqLq]qq†qŒqšq¢q¸qÃqÉqÏqòqôB»ii"i%i,i7iFiHiSibibioi}i€i‚i‚i‡iŒi•i i¦i¯iÂiÇiÜiçiñiñijj4jHj_jejjjqjwj~jƒjƒj‰j�j”j”j§jµjÍjÓjØjìjöjıjıjk5k;k@k@kkkpkpk›kÂkÇkÇkÇkÊkÑk×kŞkãkãkékïkôkôk l l%lHlNl^ljlpl~l…l‡l›l¡l¨l¨lªlªlªl¯lµlºl¾lÀlÃlÎlİlàlâlælælëlëlùl#m˜}Ÿæ"æ"#####)#9#A#I#N#Y#c#i#t#„#Œ#œ#£#«#³#»#Ã#È#Ó#á#á#÷# B†^<^<v<}<�<¸<Ã<Ğ<Ş<Ò<====*=d=f=“=›=›=Ğ=è=Õ= >÷=>>->B>D>O>W>W>x>}>†>’>š>¸>¥>í>Ó>Ç>ü>??9?Q?>?s?`?”?‚?£?µ?«?Ì?Ì?Ì?õ?õ?@Ğ1ББä‘ä‘ @(@@]@C@7@l@‰@t@©@Á@®@ã@Ğ@Aò@A%AA<A<A<AeAeAqA
’ Ğ1ğ‘ğ‘’’*’*’J’N’S’S’S’_’d’t’y’y’y’~’~’—’�’­’»’Ä’Ô’İ’ß’ß’ß’ß’æ’í’ô’û’“ ““““““ “$“+” D$şpşp qq q0q5q>qJqLq^q^q`q�q
’*’.’3’3’3’?’D’T’Y’Y’Y’^’^’w’~’�’›’¤’´’½’¿’¿’¿’¿’Æ’Í’Ô’Û’â’é’ğ’÷’÷’ù’ù’ÿ’“ ” D �o�o¬o¶oÀoĞoÕoŞoêoìoşoşop0p
+3
View File
@@ -361,6 +361,7 @@ class CIntermediateStruct
#define FSF_PUBLIC 0x01 #define FSF_PUBLIC 0x01
#define FSF_ASM 0x02 #define FSF_ASM 0x02
#define FSF_STATIC 0x04 #define FSF_STATIC 0x04
#define FSF__ 0x08
#define FSF_INTERRUPT (1<<Ff_INTERRUPT) #define FSF_INTERRUPT (1<<Ff_INTERRUPT)
#define FSF_HASERRCODE (1<<Ff_HASERRCODE) #define FSF_HASERRCODE (1<<Ff_HASERRCODE)
#define FSF_ARGPOP (1<<Ff_ARGPOP) #define FSF_ARGPOP (1<<Ff_ARGPOP)
@@ -388,6 +389,8 @@ class CIntermediateStruct
#define PRS1_CLASS 0x000300 #define PRS1_CLASS 0x000300
#define PRS1B_STATIC_LOCAL_VAR 4 #define PRS1B_STATIC_LOCAL_VAR 4
#define PRS1_STATIC_LOCAL_VAR 0x000400 #define PRS1_STATIC_LOCAL_VAR 0x000400
#define PRS1B__EXTERN_IMPORT 5
#define PRS1_NOT_REALLY__EXTERN 0x000500
#define PRSF_UNION 0x010000 #define PRSF_UNION 0x010000
+3
View File
@@ -7,6 +7,9 @@ public extern I64 ExePrint2(U8 *fmt,...);
public extern I64 ExePutS(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0, public extern I64 ExePutS(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0,
CLexHashTableContext *htc=NULL); CLexHashTableContext *htc=NULL);
public extern I64 ExePutS2(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0); public extern I64 ExePutS2(U8 *buf,U8 *filename=NULL,I64 ccf_flags=0);
public _extern _LAST_FUN I64 LastFun(I64 argc,I64 *argv);
public extern I64 RunFile(U8 *name,I64 ccf_flags=0,...);
public extern I64 RunFile2(U8 *name,I64 ccf_flags=0,...);
public extern CCmpGlbls cmp; public extern CCmpGlbls cmp;
#help_index "Compiler/Directive" #help_index "Compiler/Directive"
-1
View File
@@ -1151,6 +1151,5 @@ op789A_next:
else else
dbg_info->body[num_lines]=ip+buf; dbg_info->body[num_lines]=ip+buf;
} }
return ip; return ip;
} }
+7 -7
View File
@@ -407,7 +407,7 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tempf)
is_putchars=FALSE; is_putchars=FALSE;
} }
if (Bt(&tempf->flags,Ff_INTERNAL)&& IC_SQR<=tempf->executable_addr<=IC_ATAN) if (Bt(&tempf->flags,Ff_INTERNAL)&& IC_SQR<=tempf->exe_addr<=IC_ATAN)
is_template_fun=TRUE; is_template_fun=TRUE;
else else
is_template_fun=FALSE; is_template_fun=FALSE;
@@ -548,7 +548,7 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tempf)
tempcbh=tempcbh1; tempcbh=tempcbh1;
} }
if (Bt(&tempf->flags,Ff_INTERNAL)) if (Bt(&tempf->flags,Ff_INTERNAL))
ICAdd(cc,tempf->executable_addr,0,tempf->return_class); ICAdd(cc,tempf->exe_addr,0,tempf->return_class);
else { else {
if (indirect) if (indirect)
ICAdd(cc,IC_CALL_INDIRECT, ICAdd(cc,IC_CALL_INDIRECT,
@@ -561,9 +561,9 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tempf)
else else
ICAdd(cc,IC_CALL_EXTERN,tempf,tempf->return_class); ICAdd(cc,IC_CALL_EXTERN,tempf,tempf->return_class);
} else } else
ICAdd(cc,IC_CALL_INDIRECT2,&tempf->executable_addr,tempf->return_class); ICAdd(cc,IC_CALL_INDIRECT2,&tempf->exe_addr,tempf->return_class);
} else } else
ICAdd(cc,IC_CALL,tempf->executable_addr,tempf->return_class); ICAdd(cc,IC_CALL,tempf->exe_addr,tempf->return_class);
if ((Bt(&tempf->flags,Ff_RET1) || Bt(&tempf->flags,Ff_ARGPOP)) && if ((Bt(&tempf->flags,Ff_RET1) || Bt(&tempf->flags,Ff_ARGPOP)) &&
!Bt(&tempf->flags,Ff_NOARGPOP)) { !Bt(&tempf->flags,Ff_NOARGPOP)) {
if (indirect) { if (indirect) {
@@ -632,17 +632,17 @@ I64 PrsUnaryTerm(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var,
} }
cc->abs_cnts.externs++; cc->abs_cnts.externs++;
ICAdd(cc,IC_IMM_I64, ICAdd(cc,IC_IMM_I64,
&tempf->executable_addr,cmp.internal_types[RT_PTR]); &tempf->exe_addr,cmp.internal_types[RT_PTR]);
ICAdd(cc,IC_DEREF,0,cmp.internal_types[RT_PTR]); ICAdd(cc,IC_DEREF,0,cmp.internal_types[RT_PTR]);
} else { } else {
if (cc->flags&CCF_AOT_COMPILE) { if (cc->flags&CCF_AOT_COMPILE) {
ICAdd(cc,IC_ABS_ADDR, ICAdd(cc,IC_ABS_ADDR,
tempf->executable_addr,cmp.internal_types[RT_PTR]); tempf->exe_addr,cmp.internal_types[RT_PTR]);
if (cc->flags&CCF_ASM_EXPRESSIONS) if (cc->flags&CCF_ASM_EXPRESSIONS)
cc->abs_cnts.abs_addres++; cc->abs_cnts.abs_addres++;
} else } else
ICAdd(cc,IC_IMM_I64, ICAdd(cc,IC_IMM_I64,
tempf->executable_addr,cmp.internal_types[RT_PTR]); tempf->exe_addr,cmp.internal_types[RT_PTR]);
} }
cc->abs_cnts.c_addres++; cc->abs_cnts.c_addres++;
Lex(cc); Lex(cc);
+4 -1
View File
@@ -297,8 +297,11 @@ U8 *COCCompile(CCmpCtrl *cc,I64 *_code_size,CDbgInfo **_dbg,I64 *_type)
if (cc->flags&CCF_AOT_COMPILE) if (cc->flags&CCF_AOT_COMPILE)
res=MAlloc(code_size); res=MAlloc(code_size);
else else {
res=MAlloc(code_size,Fs->code_heap); res=MAlloc(code_size,Fs->code_heap);
if (cc->htc.fun)
Fs->last_fun=cc->htc.fun;
}
COCHeaderPut(cc,10,FALSE); COCHeaderPut(cc,10,FALSE);
code_size=OptPass789A(cc,reg_offsets,res,_dbg); code_size=OptPass789A(cc,reg_offsets,res,_dbg);
+31 -26
View File
@@ -104,9 +104,9 @@ CHashFun *PrsFunJoin(CCmpCtrl *cc,
tempf->clobbered_reg_mask=REGG_CLOBBERED+REGG_STK_TEMP; tempf->clobbered_reg_mask=REGG_CLOBBERED+REGG_STK_TEMP;
tempf->str=name; tempf->str=name;
if (cc->flags&CCF_AOT_COMPILE) if (cc->flags&CCF_AOT_COMPILE)
tempf->executable_addr=aotc->ip; tempf->exe_addr=aotc->ip;
else else
tempf->executable_addr=&UndefinedExtern; tempf->exe_addr=&UndefinedExtern;
LBts(&tempf->flags,Cf_EXTERN); LBts(&tempf->flags,Cf_EXTERN);
tempf->flags|=fsp_flags&FSG_FUN_FLAGS1; tempf->flags|=fsp_flags&FSG_FUN_FLAGS1;
if (name) //if not fun_ptr if (name) //if not fun_ptr
@@ -161,7 +161,7 @@ U0 PrsFun(CCmpCtrl *cc,CHashClass *temp_return,U8 *name,I64 fsp_flags)
ICAdd(cc,IC_LEAVE,0,cc->htc.fun->return_class); ICAdd(cc,IC_LEAVE,0,cc->htc.fun->return_class);
cc->htc.fun->size&=~7; cc->htc.fun->size&=~7;
if (cc->flags&CCF_AOT_COMPILE) { if (cc->flags&CCF_AOT_COMPILE) {
cc->htc.fun->executable_addr=cc->aotc->ip; cc->htc.fun->exe_addr=cc->aotc->ip;
cc->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE; cc->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE;
r=COCCompile(cc,&size,&cc->htc.fun->dbg_info,NULL); r=COCCompile(cc,&size,&cc->htc.fun->dbg_info,NULL);
if (r) { if (r) {
@@ -172,11 +172,11 @@ U0 PrsFun(CCmpCtrl *cc,CHashClass *temp_return,U8 *name,I64 fsp_flags)
} }
} else { } else {
old_trace=Btr(&cc->opts,OPTf_TRACE); old_trace=Btr(&cc->opts,OPTf_TRACE);
cc->htc.fun->executable_addr=COCCompile( cc->htc.fun->exe_addr=COCCompile(
cc,&size,&cc->htc.fun->dbg_info,NULL); cc,&size,&cc->htc.fun->dbg_info,NULL);
if (old_trace) { if (old_trace) {
Bts(&cc->opts,OPTf_TRACE); Bts(&cc->opts,OPTf_TRACE);
Un(cc->htc.fun->executable_addr,size,64); Un(cc->htc.fun->exe_addr,size,64);
} }
SysSymImportsResolve(cc->htc.fun->str); SysSymImportsResolve(cc->htc.fun->str);
} }
@@ -229,19 +229,21 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tempc,
if (tempex && mode&255==PRS0_EXTERN && !(cc->flags&CCF_AOT_COMPILE) && if (tempex && mode&255==PRS0_EXTERN && !(cc->flags&CCF_AOT_COMPILE) &&
tempex->type&HTT_EXPORT_SYS_SYM) { tempex->type&HTT_EXPORT_SYS_SYM) {
val=tempex->val; val=tempex->val;
mode=PRS0__EXTERN|PRS1_NULL; mode=PRS0__EXTERN|PRS1_NOT_REALLY__EXTERN;
} }
if (cc->token=='(') { if (cc->token=='(') {
switch (mode&255) { switch (mode&255) {
case PRS0__INTERN: case PRS0__INTERN:
tempf=PrsFunJoin(cc,tempc,st,fsp_flags); tempf=PrsFunJoin(cc,tempc,st,fsp_flags);
tempf->executable_addr=val; tempf->exe_addr=val;
Bts(&tempf->flags,Ff_INTERNAL); Bts(&tempf->flags,Ff_INTERNAL);
LBtr(&tempf->flags,Cf_EXTERN); LBtr(&tempf->flags,Cf_EXTERN);
return; return;
case PRS0__EXTERN: case PRS0__EXTERN:
if (!(fsp_flags&FSF__) && !(mode&PRS1_NOT_REALLY__EXTERN))
LexExcept(cc,"Expecting label with underscore at ");
tempf=PrsFunJoin(cc,tempc,st,fsp_flags); tempf=PrsFunJoin(cc,tempc,st,fsp_flags);
tempf->executable_addr=val; tempf->exe_addr=val;
SysSymImportsResolve(tempf->str); SysSymImportsResolve(tempf->str);
LBtr(&tempf->flags,Cf_EXTERN); LBtr(&tempf->flags,Cf_EXTERN);
if (saved_mode&255==PRS0__EXTERN) if (saved_mode&255==PRS0__EXTERN)
@@ -252,8 +254,10 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tempc,
case PRS0_EXTERN: case PRS0_EXTERN:
PrsFunJoin(cc,tempc,st,fsp_flags); PrsFunJoin(cc,tempc,st,fsp_flags);
return; return;
case PRS0_IMPORT:
case PRS0__IMPORT: case PRS0__IMPORT:
if (!(fsp_flags&FSF__))
LexExcept(cc,"Expecting label with underscore at ");
case PRS0_IMPORT:
if (!(cc->flags&CCF_AOT_COMPILE)) if (!(cc->flags&CCF_AOT_COMPILE))
LexExcept(cc,"import not needed at "); LexExcept(cc,"import not needed at ");
else { else {
@@ -859,9 +863,9 @@ U0 PrsTryBlk(CCmpCtrl *cc,I64 try_cnt)
if (cc->flags&CCF_AOT_COMPILE) if (cc->flags&CCF_AOT_COMPILE)
ICAdd(cc,IC_CALL_IMPORT,temp_try,tempc); ICAdd(cc,IC_CALL_IMPORT,temp_try,tempc);
else else
ICAdd(cc,IC_CALL_INDIRECT2,&temp_try->executable_addr,tempc); ICAdd(cc,IC_CALL_INDIRECT2,&temp_try->exe_addr,tempc);
} else } else
ICAdd(cc,IC_CALL,temp_try->executable_addr,tempc); ICAdd(cc,IC_CALL,temp_try->exe_addr,tempc);
if ((Bt(&temp_try->flags,Ff_RET1) || if ((Bt(&temp_try->flags,Ff_RET1) ||
Bt(&temp_try->flags,Ff_ARGPOP)) && !Bt(&temp_try->flags,Ff_NOARGPOP)) Bt(&temp_try->flags,Ff_ARGPOP)) && !Bt(&temp_try->flags,Ff_NOARGPOP))
ICAdd(cc,IC_ADD_RSP1,16,tempc); ICAdd(cc,IC_ADD_RSP1,16,tempc);
@@ -879,9 +883,9 @@ U0 PrsTryBlk(CCmpCtrl *cc,I64 try_cnt)
if (cc->flags&CCF_AOT_COMPILE) if (cc->flags&CCF_AOT_COMPILE)
ICAdd(cc,IC_CALL_IMPORT,temp_untry,tempc); ICAdd(cc,IC_CALL_IMPORT,temp_untry,tempc);
else else
ICAdd(cc,IC_CALL_INDIRECT2,&temp_untry->executable_addr,tempc); ICAdd(cc,IC_CALL_INDIRECT2,&temp_untry->exe_addr,tempc);
} else } else
ICAdd(cc,IC_CALL,temp_untry->executable_addr,tempc); ICAdd(cc,IC_CALL,temp_untry->exe_addr,tempc);
ICAdd(cc,IC_CALL_END,0,tempc); ICAdd(cc,IC_CALL_END,0,tempc);
ICAdd(cc,IC_END_EXP,0,0,ICF_RES_NOT_USED); ICAdd(cc,IC_END_EXP,0,0,ICF_RES_NOT_USED);
@@ -992,14 +996,13 @@ Bool PrsStmt(CCmpCtrl *cc,I64 try_cnt=0,
case KW__EXTERN: case KW__EXTERN:
if (Bt(&cc->opts,OPTf_EXTERNS_TO_IMPORTS)) if (Bt(&cc->opts,OPTf_EXTERNS_TO_IMPORTS))
goto sm_underscore_import; goto sm_underscore_import;
if (cc->flags&CCF_AOT_COMPILE) { if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) ||
if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) || !(tempex->type & HTT_EXPORT_SYS_SYM))
!(tempex->type & HTT_EXPORT_SYS_SYM)) LexExcept(cc,"Expecting system sym at ");
LexExcept(cc,"Expecting System sym at "); if (*cc->cur_str=='_')
i=tempex->val; fsp_flags|=FSF__;
Lex(cc); i=tempex->val;
} else Lex(cc);
i=LexExpressionI64(cc);
if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) || if (cc->token!=TK_IDENT || !(tempex=cc->hash_entry) ||
!(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) !(tempex->type & (HTT_CLASS|HTT_INTERNAL_TYPE)))
LexExcept(cc,"Expecting type at "); LexExcept(cc,"Expecting type at ");
@@ -1009,7 +1012,9 @@ Bool PrsStmt(CCmpCtrl *cc,I64 try_cnt=0,
case KW__IMPORT: case KW__IMPORT:
sm_underscore_import: sm_underscore_import:
if (cc->token!=TK_IDENT) if (cc->token!=TK_IDENT)
LexExcept(cc,"Expecting System sym at "); LexExcept(cc,"Expecting system sym at ");
if (*cc->cur_str=='_')
fsp_flags|=FSF__;
import_name=cc->cur_str; import_name=cc->cur_str;
cc->cur_str=0; cc->cur_str=0;
if (Lex(cc)!=TK_IDENT || !(tempex=cc->hash_entry) || if (Lex(cc)!=TK_IDENT || !(tempex=cc->hash_entry) ||
@@ -1017,7 +1022,7 @@ sm_underscore_import:
LexExcept(cc,"Expecting type at "); LexExcept(cc,"Expecting type at ");
Lex(cc); Lex(cc);
PrsGlblVarLst(cc,PRS0__IMPORT|PRS1_NULL,tempex, PrsGlblVarLst(cc,PRS0__IMPORT|PRS1_NULL,tempex,
import_name,FALSE); import_name,fsp_flags);
Free(import_name); Free(import_name);
break; break;
case KW_EXTERN: case KW_EXTERN:
@@ -1045,7 +1050,7 @@ sm_underscore_import:
LexExcept(cc,"Expecting type at "); LexExcept(cc,"Expecting type at ");
sm_import: sm_import:
Lex(cc); Lex(cc);
PrsGlblVarLst(cc,PRS0_IMPORT|PRS1_NULL,tempex,0,FALSE); PrsGlblVarLst(cc,PRS0_IMPORT|PRS1_NULL,tempex,0,fsp_flags);
break; break;
case KW__INTERN: case KW__INTERN:
i=LexExpressionI64(cc); i=LexExpressionI64(cc);
@@ -1095,10 +1100,10 @@ sm_import:
temp_untry,cmp.internal_types[RT_PTR]); temp_untry,cmp.internal_types[RT_PTR]);
else else
ICAdd(cc,IC_CALL_INDIRECT2, ICAdd(cc,IC_CALL_INDIRECT2,
&temp_untry->executable_addr, &temp_untry->exe_addr,
cmp.internal_types[RT_PTR]); cmp.internal_types[RT_PTR]);
} else } else
ICAdd(cc,IC_CALL,temp_untry->executable_addr, ICAdd(cc,IC_CALL,temp_untry->exe_addr,
cmp.internal_types[RT_PTR]); cmp.internal_types[RT_PTR]);
} }
} }
+3 -3
View File
@@ -16,8 +16,7 @@ U0 DoOnce()
"Install onto hard drive "; "Install onto hard drive ";
if (YorN) { if (YorN) {
DocBottom; DocBottom;
ExeFile("::/Misc/OSInstall"); if (RunFile("::/Misc/OSInstall",,FALSE)) {
if (ExePrint("OSInstall(FALSE);")) {
*sys_registry_doc->filename.name='C'; *sys_registry_doc->filename.name='C';
"\n\n1) TAD\n\n"; "\n\n1) TAD\n\n";
switch (GetI64("Staff Member Number:")) { switch (GetI64("Staff Member Number:")) {
@@ -40,7 +39,8 @@ U0 DoOnce()
} }
if (FileFind("D:/Temp/Logs/access.log")) { if (FileFind("D:/Temp/Logs/access.log")) {
Auto("\n\n%C",CH_ESC); Auto("\n\n%C",CH_ESC);
WebLogRep("D:/Temp/Logs/*.log","D:/Temp/LogRep.TXT"); RunFile("::/Demo/WebLogDemo/WebLogRep",,
"D:/Temp/Logs/*.log","D:/Temp/LogRep.TXT");
Del("D:/Temp/Logs/*.log"); Del("D:/Temp/Logs/*.log");
} }
} }
-1
View File
@@ -10,7 +10,6 @@ MapFileLoad("::/Kernel/Kernel");
MapFileLoad("::/Compiler/Compiler"); MapFileLoad("::/Compiler/Compiler");
#include "::/Apps/Psalmody/Load" #include "::/Apps/Psalmody/Load"
#include "::/Demo/WebLogDemo/WebLogRep"
#include "~/TOSCfg" #include "~/TOSCfg"
#include "~/TOSMisc" #include "~/TOSMisc"
#include "~/TOSToHtml" #include "~/TOSToHtml"
Binary file not shown.
+6 -2
View File
@@ -48,7 +48,7 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$
* $LK,"::/Demo/Games/FlatTops.CPP"$ is torpedo, not bombs. * $LK,"::/Demo/Games/FlatTops.CPP"$ is torpedo, not bombs.
* $LK,"::/Demo/Games/EagleDive.CPP"$ doesn't make sense or look real. Bad. * $LK,"::/Demo/Games/EagleDive.CPP"$ foreground clipping issues.
* Reset MPs with $LK,"Core0StartMP",A="MN:Core0StartMP"$() after boot. Free old task memory? * Reset MPs with $LK,"Core0StartMP",A="MN:Core0StartMP"$() after boot. Free old task memory?
@@ -333,6 +333,8 @@ $ID,-5$
$FG,5$$TX+CX,"Test"$$FG$ $FG,5$$TX+CX,"Test"$$FG$
* $LK,"SpriteBitMap",A="FI:::/Adam/Gr/SpriteBitMap.CPP"$: Grabscroll? * $LK,"SpriteBitMap",A="FI:::/Adam/Gr/SpriteBitMap.CPP"$: Grabscroll?
* $LK,"DrvMap",A="MN:DrvMap"$() in $LK,"MountFile",A="MN:MountFile"$().
* Return ress for $LK,"GrBlot",A="MN:GrBlot"$, $LK,"GrRect",A="MN:GrRect"$, $LK,"GrPutChar",A="MN:GrPutChar"$? * Return ress for $LK,"GrBlot",A="MN:GrBlot"$, $LK,"GrRect",A="MN:GrRect"$, $LK,"GrPutChar",A="MN:GrPutChar"$?
* Collision cnts for $LK,"GrBlot",A="MN:GrBlot"$, $LK,"GrRect",A="MN:GrRect"$, $LK,"GrPutChar",A="MN:GrPutChar"$? * Collision cnts for $LK,"GrBlot",A="MN:GrBlot"$, $LK,"GrRect",A="MN:GrRect"$, $LK,"GrPutChar",A="MN:GrPutChar"$?
@@ -404,11 +406,13 @@ Moses gets Aaron $TX,"Exodus 4:10-16",HTML="http://www.biblegateway.com/passag
There is no council against the Lord $TX,"Proverbs 21:30",HTML="http://www.biblegateway.com/verse/en/Proverbs%2021:30"$ There is no council against the Lord $TX,"Proverbs 21:30",HTML="http://www.biblegateway.com/verse/en/Proverbs%2021:30"$
Human help is worthless $TX,"Psalm 108:12",HTML="http://www.biblegateway.com/verse/en/Psalm%20108:12"$ Human help is worthless $TX,"Psalm 108:12",HTML="http://www.biblegateway.com/verse/en/Psalm%20108:12"$
Do not seek your own wealth $TX,"1 Corinthians 10:24",HTML="http://www.biblegateway.com/verse/en/1%20Corinthians%2010:24"$ Do not seek your own wealth $TX,"1 Corinthians 10:24",HTML="http://www.biblegateway.com/verse/en/1%20Corinthians%2010:24"$
The stone rejected is conrerstone $TX,"Matthew 21:42",HTML="http://www.biblegateway.com/verse/en/Matthew%2021:42"$
New wineskins $TX,"Mark 2:22",HTML="http://www.biblegateway.com/verse/en/Mark%202:22"$
$FG,5$$TX+CX,"Misc Notes"$$FG$ $FG,5$$TX+CX,"Misc Notes"$$FG$
Intel CEO's name: Brian Krzanich Intel CEO's name: Brian Krzanich
>$FG,2$lspci -v$FG$ >$FG,2$lspci -v$FG$
Size:$TX,"17400 KB",D="DD_TEMPLEOSCD_K_SIZE"$ Size:$TX,"17408 KB",D="DD_TEMPLEOSCD_K_SIZE"$
$FG,5$$TX+CX,"My Web Bookmarks"$$FG$$WW,0$ $FG,5$$TX+CX,"My Web Bookmarks"$$FG$$WW,0$
$TX,"My FireFox Bookmarks",HTML="http://www.templeos.org/Wb/Home/Downloads/Blog/Bookmarks"$ $TX,"My FireFox Bookmarks",HTML="http://www.templeos.org/Wb/Home/Downloads/Blog/Bookmarks"$
+20 -20
View File
@@ -2,7 +2,7 @@ $TR-UL,"Adam"$
$ID,2$$TR,"SysMsgFlags"$ $ID,2$$TR,"SysMsgFlags"$
$ID,2$sys_msg_flags[0]=0xFF; $ID,2$sys_msg_flags[0]=0xFF;
$ID,-2$$TR,"SysRegVer"$ $ID,-2$$TR,"SysRegVer"$
$ID,2$registry_version=4.080; $ID,2$registry_version=4.090;
$ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$ $ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$
$ID,2$$TR,"TOS"$ $ID,2$$TR,"TOS"$
$ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46; $ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46;
@@ -10,36 +10,36 @@ $ID,-2$$TR,"CircleTrace"$
$ID,2$F64 best_score=4.9425; $ID,2$F64 best_score=4.9425;
$ID,-2$$TR,"DiningStars"$ $ID,-2$$TR,"DiningStars"$
$ID,2$F64 best_score=9999.0000; $ID,2$F64 best_score=9999.0000;
$ID,-2$$TR,"DunGen"$
$ID,2$F64 best_score=20.5295;
$ID,-2$$TR,"Staff"$ $ID,-2$$TR,"Staff"$
$ID,2$#define PERSONAL_INITIALS "TAD" $ID,2$#define PERSONAL_INITIALS "TAD"
#define MACHINE_CFG 0 #define MACHINE_CFG 0
$ID,-2$$TR,"BlackDiamond"$
$ID,2$I64 best_score=9;
$ID,-2$$TR,"EagleDive"$
$ID,2$I64 best_score=8;
$ID,-2$$TR,"DunGen"$
$ID,2$F64 best_score=20.5295;
$ID,-2$$TR,"CastleFrankenstein"$
$ID,2$F64 best_score=33.8405;
$ID,-2$$TR,"ZoneOut"$
$ID,2$F64 best_score=8.1373;
$ID,-2$$TR,"Varoom"$
$ID,2$F64 best_score=46.2643;
$ID,-2$$TR,"FlapBat"$
$ID,2$F64 best_score=16.4090;
$ID,-2$$TR,"TimeOut"$
$ID,2$I64 best_score=22202;
$ID,-2$$TR,"RawHide"$ $ID,-2$$TR,"RawHide"$
$ID,2$F64 best_score=96.1279; $ID,2$F64 best_score=96.1279;
$ID,-2$$TR,"XCaliber"$ $ID,-2$$TR,"BlackDiamond"$
$ID,2$I64 best_score=248; $ID,2$I64 best_score=9;
I64 msg_flags=1; $ID,-2$$TR,"FlapBat"$
$ID,2$F64 best_score=16.4090;
$ID,-2$$TR,"Wenceslas"$ $ID,-2$$TR,"Wenceslas"$
$ID,2$F64 best_score=43.9944; $ID,2$F64 best_score=43.9944;
$ID,-2$$TR,"BomberGolf"$ $ID,-2$$TR,"BomberGolf"$
$ID,2$I64 best_score=175; $ID,2$I64 best_score=175;
$ID,-2$$TR,"TimeOut"$
$ID,2$I64 best_score=22202;
$ID,-2$$TR,"ZoneOut"$
$ID,2$F64 best_score=8.1373;
$ID,-2$$TR,"KeepAway"$ $ID,-2$$TR,"KeepAway"$
$ID,2$I64 best_score0=68,best_score1=30; $ID,2$I64 best_score0=68,best_score1=30;
$ID,-2$$TR,"Varoom"$
$ID,2$F64 best_score=46.2643;
$ID,-2$$TR,"CastleFrankenstein"$
$ID,2$F64 best_score=33.8405;
$ID,-2$$TR,"XCaliber"$
$ID,2$I64 best_score=248;
I64 msg_flags=1;
$ID,-2$$TR,"EagleDive"$
$ID,2$I64 best_score=8;
$ID,-2$$ID,-2$$TR,"DemoCompany"$ $ID,-2$$ID,-2$$TR,"DemoCompany"$
$ID,2$ $ID,2$
$TR,"Game1"$ $TR,"Game1"$
+18 -18
View File
@@ -11,13 +11,13 @@ U8 TOSGetDrv()
return res; return res;
} }
U0 TOSMakeOSDrvBootInstall(U8 drv_let) U0 TOSBootHDIns(U8 drv_let)
{ {
drv_let=ToUpper(drv_let); drv_let=ToUpper(drv_let);
Auto(TOS_CFG); Auto(TOS_CFG);
MakeOSDrvBootInstall(drv_let); BootHDIns(drv_let);
if (StrOcc(TOS_MASTER_BOOT_DRVS,drv_let)) if (StrOcc(TOS_MASTER_BOOT_DRVS,drv_let))
MasterBootInstall(drv_let); BootMHDIns(drv_let);
} }
U0 TOSCopyDrv(U8 src,U8 dst) U0 TOSCopyDrv(U8 src,U8 dst)
@@ -34,7 +34,7 @@ U0 TOSCopyDrv(U8 src,U8 dst)
DocClear; DocClear;
Drv(dst); Drv(dst);
TOSMakeOSDrvBootInstall(dst); TOSBootHDIns(dst);
} }
U0 TOSPromptAndCopyDrv() U0 TOSPromptAndCopyDrv()
@@ -229,7 +229,7 @@ install this on top.
Drv('C'); Drv('C');
DistroPrep; DistroPrep;
Auto(TOS_DVD_CFG); Auto(TOS_DVD_CFG);
MakeOSDrvBootInstall('C','T'); BootDVDIns('C');
Fmt('B',,FALSE,FSt_REDSEA); Fmt('B',,FALSE,FSt_REDSEA);
DelTree(TOS_DISTRO_DIR); DelTree(TOS_DISTRO_DIR);
CopyTree("C:/",TOS_DISTRO_DIR "/"); CopyTree("C:/",TOS_DISTRO_DIR "/");
@@ -241,7 +241,7 @@ U0 MakeStaffDistro()
ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSSTAFF_SIZE", DefinePrint("DD_TEMPLEOSSTAFF_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -264,7 +264,7 @@ I call $LK,"MakeBootDrvFile",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeBootRes
DistroPrep; DistroPrep;
MakeBootRescueDrvFile; MakeBootRescueDrvFile;
Auto(TOS_DVD_DBG_CFG); Auto(TOS_DVD_DBG_CFG);
MakeOSDrvBootInstall('C','T'); BootDVDIns('C');
Fmt('B',,FALSE,FSt_REDSEA); Fmt('B',,FALSE,FSt_REDSEA);
DelTree(TOS_DISTRO_DIR); DelTree(TOS_DISTRO_DIR);
CopyTree("C:/",TOS_DISTRO_DIR "/"); CopyTree("C:/",TOS_DISTRO_DIR "/");
@@ -277,7 +277,7 @@ U0 MakeDbgDistro()
ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSDBG_SIZE", DefinePrint("DD_TEMPLEOSDBG_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -287,7 +287,7 @@ U0 StdDistroPrep()
Drv('C'); Drv('C');
DistroPrep; DistroPrep;
Auto(STD_DISTRO_DVD_CFG); Auto(STD_DISTRO_DVD_CFG);
MakeOSDrvBootInstall('C','T'); BootDVDIns('C');
Fmt('B',,FALSE,FSt_REDSEA); Fmt('B',,FALSE,FSt_REDSEA);
DelTree(TOS_DISTRO_DIR); DelTree(TOS_DISTRO_DIR);
CopyTree("C:/",TOS_DISTRO_DIR "/"); CopyTree("C:/",TOS_DISTRO_DIR "/");
@@ -303,7 +303,7 @@ U0 MakeStdDistro()
ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSCD_SIZE", DefinePrint("DD_TEMPLEOSCD_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -312,7 +312,7 @@ U0 MakeStdRedSeaDistro()
StdDistroPrep; StdDistroPrep;
RedSeaISO(TOS_ISO_C_NAME,TOS_DISTRO_DIR,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); RedSeaISO(TOS_ISO_C_NAME,TOS_DISTRO_DIR,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSCD_RS_SIZE", DefinePrint("DD_TEMPLEOSCD_RS_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_C_NAME,"+s")/1024/1024)); 0.1*(10*Size(TOS_ISO_C_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -338,7 +338,7 @@ U0 MakeLiteDistro()
ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSLITE_SIZE", DefinePrint("DD_TEMPLEOSLITE_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)",
0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -371,7 +371,7 @@ U0 MakeUltraDistro()
ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",,
TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSULTRA_SIZE", DefinePrint("DD_TEMPLEOSULTRA_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)",
0.01*(100*Size(TOS_ISO_NAME,"+s")/1024/1024)); 0.01*(100*Size(TOS_ISO_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -380,7 +380,7 @@ U0 MakeUltraRedSeaDistro()
UltraDistroPrep; UltraDistroPrep;
RedSeaISO(TOS_ISO_C_NAME,TOS_DISTRO_DIR,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); RedSeaISO(TOS_ISO_C_NAME,TOS_DISTRO_DIR,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C);
DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE", DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)",
0.01*(100*Size(TOS_ISO_C_NAME,"+s")/1024/1024)); 0.01*(100*Size(TOS_ISO_C_NAME,"+s")/1024/1024));
Drv('C'); Drv('C');
} }
@@ -389,25 +389,25 @@ U0 UpdateISODocDefines()
{ {
try { try {
DefinePrint("DD_TEMPLEOSCD_SIZE", DefinePrint("DD_TEMPLEOSCD_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)",
0.1*(10*Size("D:/Wb/TempleOSCD.ISO","+s")/1024/1024)); 0.1*(10*Size("D:/Wb/TempleOSCD.ISO","+s")/1024/1024));
DefinePrint("DD_TEMPLEOSCD_K_SIZE", DefinePrint("DD_TEMPLEOSCD_K_SIZE",
"%d KB",Size("D:/Wb/TempleOSCD.ISO","+s")/1024); "%d KB",Size("D:/Wb/TempleOSCD.ISO","+s")/1024);
DefinePrint("DD_TEMPLEOSCD_RS_SIZE", DefinePrint("DD_TEMPLEOSCD_RS_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)",
0.1*(10*Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024/1024)); 0.1*(10*Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024/1024));
DefinePrint("DD_TEMPLEOSCD_RS_K_SIZE", DefinePrint("DD_TEMPLEOSCD_RS_K_SIZE",
"%d KB",Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024); "%d KB",Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024);
DefinePrint("DD_TEMPLEOSULTRA_SIZE", DefinePrint("DD_TEMPLEOSULTRA_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)",
0.01*(100*Size("D:/Wb/TempleOSUltra.ISO","+s")/1024/1024)); 0.01*(100*Size("D:/Wb/TempleOSUltra.ISO","+s")/1024/1024));
DefinePrint("DD_TEMPLEOSULTRA_K_SIZE", DefinePrint("DD_TEMPLEOSULTRA_K_SIZE",
"%d KB",Size("D:/Wb/TempleOSUltra.ISO","+s")/1024); "%d KB",Size("D:/Wb/TempleOSUltra.ISO","+s")/1024);
DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE", DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE",
"Download $TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)", "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)",
0.01*(100*Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024/1024)); 0.01*(100*Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024/1024));
DefinePrint("DD_TEMPLEOSULTRA_RS_K_SIZE", DefinePrint("DD_TEMPLEOSULTRA_RS_K_SIZE",
"%d KB",Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024); "%d KB",Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024);
+4 -2
View File
@@ -682,5 +682,7 @@ U0 InsMyURL()
Free(url); Free(url);
} }
if (FileFind("~/Downloads/Words/LinuxDict.TXT")) //if (FileFind("~/Downloads/Words/LinuxDict.TXT"))
GodInit("~/Downloads/Words/LinuxDict.TXT"); // GodInit("~/Downloads/Words/LinuxDict.TXT");
if (FileFind("~/Downloads/Words/HappyWords.TXT"))
GodInit("~/Downloads/Words/HappyWords.TXT");
+2 -2
View File
@@ -171,7 +171,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
"<head>\n" "<head>\n"
"<meta http-equiv=\"Content-Type\" " "<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n" "content=\"text/html;charset=US-ASCII\">\n"
"<meta name=\"generator\" content=\"$TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$\">\n"; "<meta name=\"generator\" content=\"$TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$\">\n";
if (!body_header) body_header= if (!body_header) body_header=
"<body>\n" "<body>\n"
"<pre style=\"font-family:courier;font-size:10pt\">\n"; "<pre style=\"font-family:courier;font-size:10pt\">\n";
@@ -393,7 +393,7 @@ U0 TOSWebFile(U8 *name)
"<meta name=\"keywords\" " "<meta name=\"keywords\" "
"content=\"Operating System,64-Bit,64 Bit," "content=\"Operating System,64-Bit,64 Bit,"
"Temple,OS,TempleOS,Free,Open Source,Public Domain,x86_64\">\n" "Temple,OS,TempleOS,Free,Open Source,Public Domain,x86_64\">\n"
"<meta name=\"generator\" content=\"$TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$\">\n", "<meta name=\"generator\" content=\"$TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$\">\n",
"<body style=\"background-color:#55FFFF; border-style:solid; "<body style=\"background-color:#55FFFF; border-style:solid;
border-width:8px; border-color:#0000AA; border-width:8px; border-color:#0000AA;
+2 -2
View File
@@ -1,5 +1,5 @@
asm { asm {
DIV_U64_BY_U64:: _DIV_U64_BY_U64::
PUSH RBP PUSH RBP
MOV RBP,RSP MOV RBP,RSP
XOR RDX,RDX XOR RDX,RDX
@@ -17,6 +17,6 @@ DIV_U64_BY_U64::
RET1 16 RET1 16
} }
_extern DIV_U64_BY_U64 I64 DivU64ByU64(I64 dividend,I64 divisor); _extern _DIV_U64_BY_U64 I64 DivU64ByU64(I64 dividend,I64 divisor);
"123456/10=%d\n",DivU64ByU64(123456,10); "123456/10=%d\n",DivU64ByU64(123456,10);
+70 -41
View File
@@ -73,7 +73,6 @@ I64 strip_height,x,y,z,game_score;
Bool game_over; Bool game_over;
class MPCtrl { class MPCtrl {
I64 mp_cnt;
I64 init_not_done_flags,update_not_done_flags,app_not_done_flags; I64 init_not_done_flags,update_not_done_flags,app_not_done_flags;
I64 strip_width[MP_MAX_PROCESSORS]; I64 strip_width[MP_MAX_PROCESSORS];
Bool app_done; Bool app_done;
@@ -139,8 +138,8 @@ U0 MPDoPanels(CTask *task)
Panel *tempp,*start_ptr=NULL,*end_ptr=NULL; Panel *tempp,*start_ptr=NULL,*end_ptr=NULL;
CD3I32 *poly; CD3I32 *poly;
Fish *tempf; Fish *tempf;
lo=Gs->num*(MAP_HEIGHT-1)/mp.mp_cnt; lo=Gs->num*(MAP_HEIGHT-1)/mp_cnt;
hi=(Gs->num+1)*(MAP_HEIGHT-1)/mp.mp_cnt; hi=(Gs->num+1)*(MAP_HEIGHT-1)/mp_cnt;
for (threshold=8;threshold>=1;threshold--) for (threshold=8;threshold>=1;threshold--)
for (j=lo;j<hi;j++) { for (j=lo;j<hi;j++) {
for (i=0;i<MAP_WIDTH-1;i++) { for (i=0;i<MAP_WIDTH-1;i++) {
@@ -280,22 +279,14 @@ U0 InitMap()
and convert it to panels. "panels[][]" holds the panels and convert it to panels. "panels[][]" holds the panels
for each spot. for each spot.
*/ */
I64 i,x,y,xx,yy; I64 i;
InitElevations; InitElevations;
MemSet(panels,0,sizeof(panels)); MemSet(panels,0,sizeof(panels));
xx=x/(MAP_SCALE*COORDINATE_SCALE);
yy=y/(MAP_SCALE*COORDINATE_SCALE);
z+=elevations[yy][xx]*COORDINATE_SCALE;
CalcNormals; CalcNormals;
panel_root=NULL; panel_root=NULL;
num_panels=0; num_panels=0;
mp.init_not_done_flags=1<<mp_cnt-1;
mp.init_not_done_flags=1<<mp.mp_cnt-1; for (i=0;i<mp_cnt;i++)
for (i=0;i<mp.mp_cnt;i++)
Spawn(&MPDoPanels,Fs,"Do Panels",i); Spawn(&MPDoPanels,Fs,"Do Panels",i);
while (mp.init_not_done_flags) while (mp.init_not_done_flags)
Sleep(1); Sleep(1);
@@ -434,10 +425,11 @@ U0 MPDrawIt(CTask *task,CDC *dc)
{ {
I64 j,strip_width,*s2w,x1,y1,z1, xx,yy, I64 j,strip_width,*s2w,x1,y1,z1, xx,yy,
xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb, xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb,
x3,y3,z3, x3,y3,z3,dd,dd_old,
cx=task->pix_width>>1, cx=task->pix_width>>1,
cy=task->pix_height>>1; cy=task->pix_height>>1;
Panel reg *tempp; Panel reg *tempp;
Bool w_on_map,h_on_map;
xx=x/(MAP_SCALE*COORDINATE_SCALE); xx=x/(MAP_SCALE*COORDINATE_SCALE);
yy=y/(MAP_SCALE*COORDINATE_SCALE); yy=y/(MAP_SCALE*COORDINATE_SCALE);
@@ -514,9 +506,12 @@ U0 MPDrawIt(CTask *task,CDC *dc)
//Take half steps to cover whole grid. //Take half steps to cover whole grid.
xh>>=1; yh>>=1; xh>>=1; yh>>=1;
xh2>>=1; yh2>>=1; xh2>>=1; yh2>>=1;
w_on_map=FALSE;
dd_old=MAX_I64;
for (strip_width=0;cnts.jiffies<update_jiffy_limit;strip_width++) { for (strip_width=0;cnts.jiffies<update_jiffy_limit;strip_width++) {
x1h=x1wa; x1h=x1wa;
y1h=y1wa; y1h=y1wa;
h_on_map=FALSE;
for (j=0;j<strip_height && cnts.jiffies<update_jiffy_limit;j++) { for (j=0;j<strip_height && cnts.jiffies<update_jiffy_limit;j++) {
x1=x1h>>8; y1=y1h>>8; x1=x1h>>8; y1=y1h>>8;
if (0<=x1<MAP_WIDTH && 0<=y1<MAP_HEIGHT) { if (0<=x1<MAP_WIDTH && 0<=y1<MAP_HEIGHT) {
@@ -528,10 +523,18 @@ U0 MPDrawIt(CTask *task,CDC *dc)
} else } else
tempp->cnt++; tempp->cnt++;
} }
} h_on_map=TRUE;
} else if (h_on_map)
break;
x1h+=xh; x1h+=xh;
y1h+=yh; y1h+=yh;
} }
if (h_on_map)
w_on_map=TRUE;
else if (w_on_map) {
strip_width=MAX_I64;
break;
}
x1wb-=yh2; x1wb-=yh2;
y1wb+=xh2; y1wb+=xh2;
if (strip_width&1) { if (strip_width&1) {
@@ -541,6 +544,12 @@ U0 MPDrawIt(CTask *task,CDC *dc)
x1wa+=x1wb; x1wa+=x1wb;
y1wa+=y1wb; y1wa+=y1wb;
} }
if (!w_on_map) {
dd=SqrI64(x1wa>>8-MAP_WIDTH>>1)+SqrI64(y1wa>>8-MAP_HEIGHT>>1);
if (dd>dd_old)
break;
dd_old=dd;
}
} }
Free(s2w); Free(s2w);
@@ -573,6 +582,12 @@ U0 DrawHorizon(CDC *dc)
CD3I32 p[4]; CD3I32 p[4];
I32 *old_db=dc->depth_buf; I32 *old_db=dc->depth_buf;
dc->depth_buf=NULL; dc->depth_buf=NULL;
CColorROPU32 ground_color;
if (z/COORDINATE_SCALE<(WATER_ELEVATION+3)*MAP_SCALE)
ground_color=BLUE;
else
ground_color=LTGREEN;
Mat4x4IdentEqu(dc->r); Mat4x4IdentEqu(dc->r);
Mat4x4RotZ(dc->r,é2); Mat4x4RotZ(dc->r,é2);
@@ -616,12 +631,12 @@ U0 DrawHorizon(CDC *dc)
if (-ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2) if (-ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2)
dc->color=LTCYAN; dc->color=LTCYAN;
else else
dc->color=LTGREEN; dc->color=ground_color;
GrFillPoly3(dc,4,p); GrFillPoly3(dc,4,p);
p[0].y=dc->height-1; p[0].y=dc->height-1;
p[1].y=dc->height-1; p[1].y=dc->height-1;
if (-ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2) if (-ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2)
dc->color=LTGREEN; dc->color=ground_color;
else else
dc->color=LTCYAN; dc->color=LTCYAN;
GrFillPoly3(dc,4,p); GrFillPoly3(dc,4,p);
@@ -642,12 +657,12 @@ U0 DrawHorizon(CDC *dc)
if (x1<x2 ^^ -ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2) if (x1<x2 ^^ -ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2)
dc->color=LTCYAN; dc->color=LTCYAN;
else else
dc->color=LTGREEN; dc->color=ground_color;
GrFillPoly3(dc,4,p); GrFillPoly3(dc,4,p);
p[0].x=dc->width-1; p[0].x=dc->width-1;
p[1].x=dc->width-1; p[1].x=dc->width-1;
if (x1<x2 ^^ -ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2) if (x1<x2 ^^ -ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2)
dc->color=LTGREEN; dc->color=ground_color;
else else
dc->color=LTCYAN; dc->color=LTCYAN;
GrFillPoly3(dc,4,p); GrFillPoly3(dc,4,p);
@@ -659,7 +674,7 @@ U0 DrawHorizon(CDC *dc)
U0 Core0EagleDive() U0 Core0EagleDive()
{ {
CDC *dc=DCAlias(main_dc,Fs); CDC *dc=DCAlias(main_dc,Fs);
I64 i,xx,yy,height,bkcolor,cx=Fs->pix_width>>1,cy=Fs->pix_height>>1; I64 i,xx,yy,elev,height,bkcolor,cx=Fs->pix_width>>1,cy=Fs->pix_height>>1;
F64 min_strip_width,roll,pitch,heading; F64 min_strip_width,roll,pitch,heading;
Fish *tempf; Fish *tempf;
@@ -668,9 +683,14 @@ U0 Core0EagleDive()
xx=x/(MAP_SCALE*COORDINATE_SCALE); xx=x/(MAP_SCALE*COORDINATE_SCALE);
yy=y/(MAP_SCALE*COORDINATE_SCALE); yy=y/(MAP_SCALE*COORDINATE_SCALE);
height=z/COORDINATE_SCALE-elevations[yy][xx]; if (0<=xx<MAP_WIDTH && 0<=yy<MAP_HEIGHT)
elev=elevations[yy][xx];
else
elev=MAX_I64;
height=z/COORDINATE_SCALE-elev;
if (height<0) { if (height<0) {
if (elevations[yy][xx]>WATER_ELEVATION*MAP_SCALE) { if (elev>WATER_ELEVATION*MAP_SCALE) {
dc->color=bkcolor=BLACK; dc->color=bkcolor=BLACK;
if (!game_over) { if (!game_over) {
GrRect(dc,0,0,dc->width,dc->height); GrRect(dc,0,0,dc->width,dc->height);
@@ -688,7 +708,7 @@ U0 Core0EagleDive()
DrawHorizon(dc); DrawHorizon(dc);
DCDepthBufRst(dc); DCDepthBufRst(dc);
mp.update_not_done_flags=1<<mp.mp_cnt-1; mp.update_not_done_flags=1<<mp_cnt-1;
MPDrawIt(Fs,dc); MPDrawIt(Fs,dc);
xx=x/COORDINATE_SCALE; xx=x/COORDINATE_SCALE;
@@ -704,7 +724,7 @@ U0 Core0EagleDive()
Sleep(1); Sleep(1);
min_strip_width=MAX_F64; min_strip_width=MAX_F64;
for (i=0;i<mp.mp_cnt;i++) for (i=0;i<mp_cnt;i++)
min_strip_width=Min(min_strip_width,32.0*mp.strip_width[i]/(i+32.0)); min_strip_width=Min(min_strip_width,32.0*mp.strip_width[i]/(i+32.0));
strip_height=ClampI64( strip_height=ClampI64(
strip_height*Clamp(0.25*min_strip_width/strip_height,0.9,1.1), strip_height*Clamp(0.25*min_strip_width/strip_height,0.9,1.1),
@@ -772,7 +792,7 @@ Fish *FishFind(I64 x1,I64 y1,I64 *_dd)
U0 AnimateTask(I64) U0 AnimateTask(I64)
{//Steadily moves the airplane fwd. {//Steadily moves the airplane fwd.
I64 *s2w,x1,y1,z1,dx,dy,dz,dd; I64 *s2w,x1,y1,z1,dx,dy,dz,dd;
F64 t0=tS,mS,é,d; F64 t0=tS,mS,é,d,pitch;
Fish *tempf; Fish *tempf;
while (TRUE) { while (TRUE) {
mS=1000*(tS-t0); mS=1000*(tS-t0);
@@ -792,7 +812,17 @@ U0 AnimateTask(I64)
x1=x/COORDINATE_SCALE; y1=y/COORDINATE_SCALE; z1=z/COORDINATE_SCALE; x1=x/COORDINATE_SCALE; y1=y/COORDINATE_SCALE; z1=z/COORDINATE_SCALE;
if (z1<(WATER_ELEVATION+3)*MAP_SCALE) { if (z1<(WATER_ELEVATION+3)*MAP_SCALE) {
speed=0.5; if (z1<WATER_ELEVATION*MAP_SCALE) {
z=WATER_ELEVATION*MAP_SCALE*COORDINATE_SCALE;
pitch=Wrap(-è-ã/2,-ã);
if (Abs(pitch)>ã/2) {
pitch=Wrap(ã-pitch,-ã);
if (pitch<-ã/8)
è+=mS/1000.0*Sign(3*ã/8-è);
} else if (pitch<-ã/8)
è+=mS/1000.0*Sign(-3*ã/8-è);
}
speed=1.0;
if (tempf=FishFind(x1,y1,&dd)) { if (tempf=FishFind(x1,y1,&dd)) {
d=Sqrt(dd); d=Sqrt(dd);
x1-=tempf->p.x; x1-=tempf->p.x;
@@ -831,7 +861,7 @@ U0 AnimateTask(I64)
U0 MPEnd() U0 MPEnd()
{ {
update_jiffy_limit=0; update_jiffy_limit=0;
mp.app_not_done_flags=1<<mp.mp_cnt-1-1; mp.app_not_done_flags=1<<mp_cnt-1-1;
mp.app_done=TRUE; mp.app_done=TRUE;
//Wait for all cores to exit //Wait for all cores to exit
while (mp.app_not_done_flags) while (mp.app_not_done_flags)
@@ -855,18 +885,15 @@ U0 SongTask(I64)
} }
} }
U0 Init(I64 _mp_cnt) U0 Init()
{ {
I64 i; I64 i,xx,yy;
main_dc=DCNew(GR_WIDTH,GR_HEIGHT); main_dc=DCNew(GR_WIDTH,GR_HEIGHT);
critical_section_flag=0; critical_section_flag=0;
game_over=FALSE; game_over=FALSE;
game_score=0; game_score=0;
MemSet(&mp,0,sizeof(MPCtrl)); MemSet(&mp,0,sizeof(MPCtrl));
if (_mp_cnt<=mp_cnt)
mp.mp_cnt=_mp_cnt;
else
mp.mp_cnt=mp_cnt;
QueInit(&fish_root); QueInit(&fish_root);
InitMap; InitMap;
DCDepthBufAlloc(main_dc); DCDepthBufAlloc(main_dc);
@@ -876,13 +903,17 @@ U0 Init(I64 _mp_cnt)
é1= 0.0*ã/180.0; é1= 0.0*ã/180.0;
é2= 0.0*ã/180.0; é2= 0.0*ã/180.0;
speed = 2.5; speed = 2.5;
claws_down=0;
x=MAP_WIDTH>>1 *COORDINATE_SCALE*MAP_SCALE; x=MAP_WIDTH>>1 *COORDINATE_SCALE*MAP_SCALE;
y=MAP_HEIGHT>>1*COORDINATE_SCALE*MAP_SCALE; y=MAP_HEIGHT>>1*COORDINATE_SCALE*MAP_SCALE;
z=64 *COORDINATE_SCALE*MAP_SCALE; z=64 *COORDINATE_SCALE*MAP_SCALE;
claws_down=0;
for (i=1;i<mp.mp_cnt;i++) xx=x/(MAP_SCALE*COORDINATE_SCALE);
yy=y/(MAP_SCALE*COORDINATE_SCALE);
z+=elevations[yy][xx]*COORDINATE_SCALE;
for (i=1;i<mp_cnt;i++)
Spawn(&CoreAPEagleDiveTask,Fs,"AP EagleDive",i); Spawn(&CoreAPEagleDiveTask,Fs,"AP EagleDive",i);
Fs->task_end_cb=&TaskEndCB; Fs->task_end_cb=&TaskEndCB;
game_t0=tS; game_t0=tS;
@@ -911,7 +942,7 @@ U0 CleanUp()
DCDel(main_dc); DCDel(main_dc);
} }
U0 EagleDive(I64 _mp_cnt=MP_MAX_PROCESSORS) U0 EagleDive()
{ {
I64 ch,sc; I64 ch,sc;
F64 pp,tt1,tt2; F64 pp,tt1,tt2;
@@ -937,7 +968,7 @@ U0 EagleDive(I64 _mp_cnt=MP_MAX_PROCESSORS)
DocClear; DocClear;
"Initializing...\n"; "Initializing...\n";
Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs);
Init(_mp_cnt); Init;
Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs);
Fs->draw_it=&DrawIt; Fs->draw_it=&DrawIt;
try //in case <CTRL-ALT-c> is pressed. try //in case <CTRL-ALT-c> is pressed.
@@ -967,7 +998,7 @@ U0 EagleDive(I64 _mp_cnt=MP_MAX_PROCESSORS)
Fs->draw_it=NULL; Fs->draw_it=NULL;
CleanUp; CleanUp;
WinMgrSync; WinMgrSync;
Init(_mp_cnt); Init;
Fs->draw_it=&DrawIt; Fs->draw_it=&DrawIt;
break; break;
} }
@@ -981,9 +1012,7 @@ U0 EagleDive(I64 _mp_cnt=MP_MAX_PROCESSORS)
PutExcept; PutExcept;
SettingsPop; SettingsPop;
CleanUp; CleanUp;
#ifjit
RegWriteBranch("TempleOS/EagleDive","I64 best_score=%d;\n",best_score); RegWriteBranch("TempleOS/EagleDive","I64 best_score=%d;\n",best_score);
#endif
MenuPop; MenuPop;
} }
+1 -1
View File
@@ -12,7 +12,7 @@ You can load it with:
If you want to change the system font permanently, If you want to change the system font permanently,
save to a file with this font editor program save to a file with this font editor program
and cut and paste the code into $LK,"::/Kernel/FontStd.CPP"$. and cut and paste the code into $LK,"::/Kernel/FontStd.CPP"$.
You will need to recompile Kernel by calling $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). You will need to recompile Kernel by calling $LK,"BootHDIns",A="MN:BootHDIns"$().
See $LK,"::/Demo/ExtendedChars.CPP"$, $LK,"::/Demo/Games/CharDemo.CPP"$, See $LK,"::/Demo/ExtendedChars.CPP"$, $LK,"::/Demo/Games/CharDemo.CPP"$,
$LK,"::/Demo/Graphics/CharAnimation.CPP"$ and $LK,"::/Demo/ScreenCodes.CPP"$. $LK,"::/Demo/Graphics/CharAnimation.CPP"$ and $LK,"::/Demo/ScreenCodes.CPP"$.
+1 -1
View File
@@ -217,7 +217,7 @@ U0 Main()
"$$RED$$This code is not efficient, but the compiler is simple.$$FG$$\n"; "$$RED$$This code is not efficient, but the compiler is simple.$$FG$$\n";
Un(code,dst-code); //Unassemble the code we created. Un(code,dst-code); //Unassemble the code we created.
//$LK,"Call",A="MN:Call"$() is a function. See $LK,"_CALL",A="FF:::/Kernel/KUtils.CPP,_CALL"$:: //$LK,"Call",A="MN:Call"$() is a function. See $LK,"_CALL",A="FF:::/Kernel/KUtils.CPP,_CALL"$::
//See also $LK,"CallInd",A="MN:CallInd"$(). See $LK,"_CALLIND",A="FF:::/Kernel/KUtils.CPP,_CALLIND"$:: //See also $LK,"CallInd",A="MN:CallInd"$(). See $LK,"_CALL_IND",A="FF:::/Kernel/KUtils.CPP,_CALL_IND"$::
"$$LTBLUE$$Answer:%d$$FG$$\n",Call(code); "$$LTBLUE$$Answer:%d$$FG$$\n",Call(code);
} catch { } catch {
"$$RED$$Error$$FG$$\n"; "$$RED$$Error$$FG$$\n";
+1
View File
@@ -326,6 +326,7 @@ I64 TestCoreRange(RangeJob *r)
if (rj.hi>r->hi) if (rj.hi>r->hi)
rj.hi=r->hi; rj.hi=r->hi;
res+=TestCoreSubRange(&rj); res+=TestCoreSubRange(&rj);
Yield;
} }
return res; return res;
} }
+1 -1
View File
@@ -148,7 +148,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
"<head>\n" "<head>\n"
"<meta http-equiv=\"Content-Type\" " "<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n" "content=\"text/html;charset=US-ASCII\">\n"
"<meta name=\"generator\" content=\"$TX,"TempleOS V4.08",D="DD_OS_NAME_VERSION"$\">\n"; "<meta name=\"generator\" content=\"$TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$\">\n";
if (!body_header) body_header= if (!body_header) body_header=
"<body>\n" "<body>\n"
"<pre style=\"font-family:courier;font-size:10pt\">\n"; "<pre style=\"font-family:courier;font-size:10pt\">\n";
+1 -2
View File
@@ -23,8 +23,7 @@ U0 DoOnce()
"Install onto hard drive "; "Install onto hard drive ";
if (YorN) { if (YorN) {
DocBottom; DocBottom;
ExeFile("::/Misc/OSInstall"); RunFile("::/Misc/OSInstall",,TRUE);
ExePrint("OSInstall(TRUE);");
} }
if (FileFind("::/Misc/Tour")) { if (FileFind("::/Misc/Tour")) {
"\nTake Tour"; "\nTake Tour";
+1 -1
View File
@@ -4,4 +4,4 @@ When an $FG,2$AutoFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed w
See $LK,"::/Demo/AutoFile/AFDir.AUT"$. See $LK,"::/Demo/AutoFile/AFDir.AUT"$.
Note: $LK,"Auto",A="MN:Auto"$("") can be used if all you need is to send ASCII characters. It differs from $LK,"AutoStr",A="MN:AutoStr"$(). You'll probably use $LK,"Auto",A="MN:Auto"$() a lot and not $LK,"AutoStr",A="MN:AutoStr"$(). With $LK,"Auto",A="MN:Auto"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). Note: $LK,"Auto",A="MN:Auto"$("") can be used if all you need is to send ASCII characters. It differs from $LK,"AutoStr",A="MN:AutoStr"$(). You'll probably use $LK,"Auto",A="MN:Auto"$() a lot and not $LK,"AutoStr",A="MN:AutoStr"$(). With $LK,"Auto",A="MN:Auto"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"BootHDIns",A="MN:BootHDIns"$().
BIN
View File
Binary file not shown.
+22 -3
View File
@@ -2,7 +2,26 @@ $WW,1$$FG,5$$TX+CX,"Change Log"$$FG$
Use $LK,"R",A="MN:R"$() to rename if I change a label. Use $LK,"R",A="MN:R"$() to rename if I change a label.
$IV,1$----06/24/16 21:56:10----$IV,0$ $IV,1$----07/04/16 14:13:54----$IV,0$
* $BK,1$TempleOS version 4.09 Released$BK,0$
* Improved $LK,"::/Demo/Games/EagleDive.CPP"$.
* Improved $LK,"GrFillTri0",A="MN:GrFillTri0"$().
$IV,1$----07/03/16 04:30:05----$IV,0$
* Added $LK,"Unmount",A="MN:Unmount"$().
* Made BootLoader mandatory in $LK,"RedSeaISO",A="MN:RedSeaISO"$().
* Added $LK,"BDT_FILE_READ",A="MN:BDT_FILE_READ"$.
$IV,1$----07/01/16 05:29:08----$IV,0$
* Made underscore mandatory on $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ callable asm functions.
$IV,1$----06/28/16 13:15:08----$IV,0$
* Changed $LK,"TaskRep",A="MN:TaskRep"$() and $LK,"MemRep",A="MN:MemRep"$().
* Changed $LK,"::/Adam/WallPaper.CPP"$.
$IV,1$----06/26/16 14:01:16----$IV,0$
* Added $LK,"LastFun",A="MN:LastFun"$(), $LK,"RunFile",A="MN:RunFile"$(), $LK,"RunFile2",A="MN:RunFile2"$() and $LK,"PopUpRunFile",A="MN:PopUpRunFile"$().
* Made boot code modular.
$IV,1$----06/24/16 14:15:13----$IV,0$ $IV,1$----06/24/16 14:15:13----$IV,0$
* Added A.I. to $LK,"::/Apps/KeepAway/KeepAway.CPP"$ and changed scoring. * Added A.I. to $LK,"::/Apps/KeepAway/KeepAway.CPP"$ and changed scoring.
@@ -48,7 +67,7 @@ $IV,1$----05/23/16 01:30:28----$IV,0$
* $LK,"R",A="MN:R"$("ISOFileCreate","$LK,"ISO9660ISO",A="MN:ISO9660ISO"$"); * $LK,"R",A="MN:R"$("ISOFileCreate","$LK,"ISO9660ISO",A="MN:ISO9660ISO"$");
$IV,1$----05/19/16 02:16:09----$IV,0$ $IV,1$----05/19/16 02:16:09----$IV,0$
* Added $LK,"BDT_FILE",A="MN:BDT_FILE"$. * Added $LK,"BDT_FILE_WRITE",A="MN:BDT_FILE_WRITE"$.
$IV,1$----05/17/16 07:16:38----$IV,0$ $IV,1$----05/17/16 07:16:38----$IV,0$
* Worked on compiler $LK,"CICArg",A="MN:CICArg"$.a1_type_pointed_to. * Worked on compiler $LK,"CICArg",A="MN:CICArg"$.a1_type_pointed_to.
@@ -246,7 +265,7 @@ $IV,1$----01/12/16 19:17:12----$IV,0$
$IV,1$----01/12/16 10:06:18----$IV,0$ $IV,1$----01/12/16 10:06:18----$IV,0$
* $BK,1$TempleOS version 4.01 Released$BK,0$ * $BK,1$TempleOS version 4.01 Released$BK,0$
* Standardized drive letters. Your $LK,"Auto",A="MN:Auto"$() config scripts for compiling the kernel with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() must be changed. * Standardized drive letters. Your $LK,"Auto",A="MN:Auto"$() config scripts for compiling the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$() must be changed.
* Added $LK,"CCF_QUESTION_HELP",A="MN:CCF_QUESTION_HELP"$. * Added $LK,"CCF_QUESTION_HELP",A="MN:CCF_QUESTION_HELP"$.
$IV,1$----01/11/16 00:04:38----$IV,0$ $IV,1$----01/11/16 00:04:38----$IV,0$
+1 -1
View File
@@ -39,4 +39,4 @@ $ID,-2$
* You can define handler functions for $FG,2$<CTRL-ALT-letter>$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg. * You can define handler functions for $FG,2$<CTRL-ALT-letter>$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting. * If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"BootHDIns",A="MN:BootHDIns"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
+3 -3
View File
@@ -1,8 +1,8 @@
$HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} $HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
#define __TIME__ #exe{StreamPrint("\"%T\"",Now);} #define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->line_num);} #define __LINE__ #exe{StreamPrint("%d",Fs->last_cc->lex_include_stk->line_num);}
#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_lex->flags&CCF_CMD_LINE && Fs->last_lex->lex_include_stk->depth<2);} #define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE && Fs->last_cc->lex_include_stk->depth<2);}
#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->lex_include_stk->full_name);} #define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_cc->lex_include_stk->full_name);}
#define __DIR__ #exe{StreamDir;} #define __DIR__ #exe{StreamDir;}
See $LK,"::/Demo/Directives.CPP"$.$HL,0$$WW,1$ See $LK,"::/Demo/Directives.CPP"$.$HL,0$$WW,1$
+2 -2
View File
@@ -31,7 +31,7 @@ $ID,2$The term $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode
$ID,-2$$TR,"Why do files end in .Z? Are they encrypted?"$ $ID,-2$$TR,"Why do files end in .Z? Are they encrypted?"$
$ID,2$Files with names ending in $FG,2$.Z$FG$ are individually compressed using $LK,"TempleOS Compression",A="FI:::/Kernel/Compress.CPP"$. They are not encrypted. $LK,"Copy",A="MN:Copy"$() or rename them with $LK,"Move",A="MN:Move"$() to a name without $FG,2$.Z$FG$ and they will be stored in an uncompressed form. See $LK,"TOSZ",A="FI:::/Doc/TOSZ.TXT"$ for Linux or Windows uncompress C/C++ code. $ID,2$Files with names ending in $FG,2$.Z$FG$ are individually compressed using $LK,"TempleOS Compression",A="FI:::/Kernel/Compress.CPP"$. They are not encrypted. $LK,"Copy",A="MN:Copy"$() or rename them with $LK,"Move",A="MN:Move"$() to a name without $FG,2$.Z$FG$ and they will be stored in an uncompressed form. See $LK,"TOSZ",A="FI:::/Doc/TOSZ.TXT"$ for Linux or Windows uncompress C/C++ code.
$ID,-2$$TR,"Is it open source? How do I build it?"$ $ID,-2$$TR,"Is it open source? How do I build it?"$
$ID,2$TempleOS is 100% open src. All the src code is included in the distro. Use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to compile the kernel and compiler. The rest is $LK,"JIT Compiled",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$ during boot. See $LK,"::/StartOS.CPP"$. $ID,2$TempleOS is 100% open src. All the src code is included in the distro. Use $LK,"BootHDIns",A="MN:BootHDIns"$() to compile the kernel and compiler. The rest is $LK,"JIT Compiled",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$ during boot. See $LK,"::/StartOS.CPP"$.
$ID,-2$$TR,"Where are object files? How do I link?"$ $ID,-2$$TR,"Where are object files? How do I link?"$
$ID,2$TempleOS does not use object files or a linker. $LK,"AOT Compile Mode",A="FF:::/Doc/Glossary.TXT,AOT Compile Mode"$ is used to directly create flat binary files, $FG,2$/Kernel.BIN.C$FG$ and $FG,2$/Compiler/Compiler.BIN.Z$FG$ with no object files and linking.$FG$ $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$ place code in memory, ready to run, with no object files or linking. Linking is done when $FG,2$BIN$FG$ modules are $LK,"Load",A="MN:Load"$()ed. $ID,2$TempleOS does not use object files or a linker. $LK,"AOT Compile Mode",A="FF:::/Doc/Glossary.TXT,AOT Compile Mode"$ is used to directly create flat binary files, $FG,2$/Kernel.BIN.C$FG$ and $FG,2$/Compiler/Compiler.BIN.Z$FG$ with no object files and linking.$FG$ $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$ place code in memory, ready to run, with no object files or linking. Linking is done when $FG,2$BIN$FG$ modules are $LK,"Load",A="MN:Load"$()ed.
$ID,-2$$TR,"What is the FPS refresh rate?"$ $ID,-2$$TR,"What is the FPS refresh rate?"$
@@ -57,7 +57,7 @@ $ID,2$There is no $FG,2$PATH$FG$. You do not enter filenames at the command-lin
$ID,-2$$TR,"How do I boot it with Grub?"$ $ID,-2$$TR,"How do I boot it with Grub?"$
$ID,2$If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows. See $LK,"Boot",A="FI:::/Doc/Boot.TXT"$. You can use the TempleOS boot-loader. $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Opt/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Opt/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootDVD.CPP"$. $ID,2$If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows. See $LK,"Boot",A="FI:::/Doc/Boot.TXT"$. You can use the TempleOS boot-loader. $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Opt/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Opt/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootDVD.CPP"$.
$ID,-2$$TR,"How do I get Kernel.BIN to boot?"$ $ID,-2$$TR,"How do I get Kernel.BIN to boot?"$
$ID,2$The boot-loaders must be patched by you running $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() or $LK,"MasterBootInstall",A="MN:MasterBootInstall"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it. $ID,2$The boot-loaders must be patched by you running $LK,"BootHDIns",A="MN:BootHDIns"$() or $LK,"BootMHDIns",A="MN:BootMHDIns"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it.
$ID,-2$$TR,"Why is there some 16-Bit code?"$ $ID,-2$$TR,"Why is there some 16-Bit code?"$
$ID,2$TempleOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. TempleOS calls $LK,"that",A="FI:::/Kernel/PCIBIOS.CPP"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking. $ID,2$TempleOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. TempleOS calls $LK,"that",A="FI:::/Kernel/PCIBIOS.CPP"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking.
$ID,-2$$TR,"Why are you pushing 32-bit values on the stack?"$ $ID,-2$$TR,"Why are you pushing 32-bit values on the stack?"$
+6
View File
@@ -42,6 +42,12 @@ $ID,-2$
$FG,2$'f'$FG$ $FG,2$'f'$FG$
$ID,2$Format drive. $ID,2$Format drive.
$ID,-2$ $ID,-2$
$FG,2$'i'$FG$
$ID,2$Mount ISO.C file.
$ID,-2$
$FG,2$'u'$FG$
$ID,2$Unmount drive(s).
$ID,-2$
$FG,2$'M'$FG$ $FG,2$'M'$FG$
$ID,2$Make CD/DVD ISO file. This creates a file image of the dir the cursor is on. The name of the ISO file is $LK,"blkdev.dft_iso_filename",A="MN:CBlkDevGlbls"$ and can be redefined in your start-up scripts. You may wish to place it on a different drive. $ID,2$Make CD/DVD ISO file. This creates a file image of the dir the cursor is on. The name of the ISO file is $LK,"blkdev.dft_iso_filename",A="MN:CBlkDevGlbls"$ and can be redefined in your start-up scripts. You may wish to place it on a different drive.
$ID,-2$ $ID,-2$
+4 -4
View File
@@ -66,7 +66,7 @@ $FG,2$Ident$FG$ Identifier, Identity, Identical
$FG,2$IDT$FG$ Interrupt Descriptor Table $FG,2$IDT$FG$ Interrupt Descriptor Table
$FG,2$Idx$FG$ Index $FG,2$Idx$FG$ Index
$FG,2$Init$FG$ Initialize $FG,2$Init$FG$ Initialize
$FG,2$Ins$FG$ Insert $FG,2$Ins$FG$ Insert, Install
$FG,2$Inst$FG$ Instruction $FG,2$Inst$FG$ Instruction
$FG,2$Int$FG$ Interrupt, Integer $FG,2$Int$FG$ Interrupt, Integer
$FG,2$ip_$FG$ Input Pointer. See $LK,"InputPointer.CPP",A="FI:::/Kernel/SerialDev/InputPointer.CPP"$. $FG,2$ip_$FG$ Input Pointer. See $LK,"InputPointer.CPP",A="FI:::/Kernel/SerialDev/InputPointer.CPP"$.
@@ -165,7 +165,7 @@ $ID,2$$FG,2$Ahead-of-Time$FG$ compiling is conventional compilation mode. Do no
In $FG,2$AOT$FG$ mode, $FG,2$.PRJ$FG$ files are compiled to $FG,2$.BIN$FG$ files, skipping $FG,2$.OBJ$FG$ files. After compiling, $FG,2$.BIN$FG$ files are $LK,"Load",A="MN:Load"$()ed. In $FG,2$AOT$FG$ mode, $FG,2$.PRJ$FG$ files are compiled to $FG,2$.BIN$FG$ files, skipping $FG,2$.OBJ$FG$ files. After compiling, $FG,2$.BIN$FG$ files are $LK,"Load",A="MN:Load"$()ed.
There is no $FG,2$main()$FG$ routine. Instead, stmts outside functions are automatically executed upon loading. There is no way to unload except by killing the task. To invoke $FG,2$AOT Compiled Mode$FG$, $LK,"Cmp",A="MN:Cmp"$() is used. The $FG,2$Kernel$FG$ module and compiler are made in $FG,2$AOT$FG$ compiled mode. See $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() which calls $LK,"MakeAll",A="MN:MakeAll"$() where $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$ are created. There is no $FG,2$main()$FG$ routine. Instead, stmts outside functions are automatically executed upon loading. There is no way to unload except by killing the task. To invoke $FG,2$AOT Compiled Mode$FG$, $LK,"Cmp",A="MN:Cmp"$() is used. The $FG,2$Kernel$FG$ module and compiler are made in $FG,2$AOT$FG$ compiled mode. See $LK,"BootHDIns",A="MN:BootHDIns"$() which calls $LK,"MakeAll",A="MN:MakeAll"$() where $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$ are created.
$ID,-2$$TR,"JIT Compile Mode"$ $ID,-2$$TR,"JIT Compile Mode"$
$ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory alloced from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string. $ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory alloced from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string.
$ID,-2$$TR,"Compiler Intermediate Code"$ $ID,-2$$TR,"Compiler Intermediate Code"$
@@ -222,14 +222,14 @@ $LK,"FILEMASK_SRC",A="MN:FILEMASK_SRC"$
$LK,"FILEMASK_AOT",A="MN:FILEMASK_AOT"$ $LK,"FILEMASK_AOT",A="MN:FILEMASK_AOT"$
$LK,"FILEMASK_JIT",A="MN:FILEMASK_JIT"$ $LK,"FILEMASK_JIT",A="MN:FILEMASK_JIT"$
$LK,"FILEMASK_GRA",A="MN:FILEMASK_GRA"$ $LK,"FILEMASK_GRA",A="MN:FILEMASK_GRA"$
$ID,-2$$TR,"Naming Convention"$ $ID,-2$$TR-C,"Naming Convention"$
$ID,2$Since there are no $FG,2$namespaces$FG$ and I don't plan to implement name spaces, I highly recommend putting a 2-3 character module code prefix on syms. e.g. $FG,2$WS$FG$, $FG,2$Doc$FG$, $FG,2$Lex$FG$ $ID,2$Since there are no $FG,2$namespaces$FG$ and I don't plan to implement name spaces, I highly recommend putting a 2-3 character module code prefix on syms. e.g. $FG,2$WS$FG$, $FG,2$Doc$FG$, $FG,2$Lex$FG$
$FG,5$ALL_CAPS$FG$ $FG,5$ALL_CAPS$FG$
Assembly Language labels are capitalized with underscores between words. So are $FG,2$#define$FG$'s. Assembly Language labels are capitalized with underscores between words. So are $FG,2$#define$FG$'s.
$FG,5$_ALL_CAPS$FG$ $FG,5$_ALL_CAPS$FG$
Asm routines which are $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ callible should have a leading underscore. Asm routines which are $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ callable must have a leading underscore.
$FG,5$MixedCaps$FG$ $FG,5$MixedCaps$FG$
$LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ Functions and class names are MixedCaps. $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ Functions and class names are MixedCaps.
+1 -1
View File
@@ -2,7 +2,7 @@ $FG,5$$TX+CX,"The Grub Master Bootloader"$$FG$
$WW,1$Here are my $FG,2$grub.cfg$FG$ file entries for my TempleOS partitions. I don't have the patience to do it correctly and GRUB obfuscates. Chain loading is just the normal way an operating system like Windows boots. They do drives, zero-based, and partitions on drives, one-based. They call traditional partitioning a "msdos" partition and I presume, if there is a new way to partition drives, it has a new name. $WW,1$Here are my $FG,2$grub.cfg$FG$ file entries for my TempleOS partitions. I don't have the patience to do it correctly and GRUB obfuscates. Chain loading is just the normal way an operating system like Windows boots. They do drives, zero-based, and partitions on drives, one-based. They call traditional partitioning a "msdos" partition and I presume, if there is a new way to partition drives, it has a new name.
In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ ident by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$. In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ ident by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"BootHDIns",A="MN:BootHDIns"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$.
menuentry "TempleOS D" { menuentry "TempleOS D" {
insmod chain insmod chain
+2 -2
View File
@@ -8,9 +8,9 @@ $FG,2$/Demo$FG$ Here you can find lots of sample code to do various things.
$FG,2$/Doc$FG$ Here you can find documentation. $FG,2$/Doc$FG$ Here you can find documentation.
$FG,2$/Kernel$FG$ The core of the operating system is found here. Since priviledge levels are not used, calling it a $FG,2$kernel$FG$ is deceptive. It is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). It is loaded by the boot loader and must fit in 640K. $FG,2$/Kernel$FG$ The core of the operating system is found here. Since priviledge levels are not used, calling it a $FG,2$kernel$FG$ is deceptive. It is $FG,2$AOT$FG$ compiled by $LK,"BootHDIns",A="MN:BootHDIns"$(). It is loaded by the boot loader and must fit in 640K.
$FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). $FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"BootHDIns",A="MN:BootHDIns"$().
$FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot. The $LK,"Adam Task",A="FF:::/Doc/Glossary.TXT,Adam Task"$ is the father of all tasks, like Adam and Eve. $FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot. The $LK,"Adam Task",A="FF:::/Doc/Glossary.TXT,Adam Task"$ is the father of all tasks, like Adam and Eve.
BIN
View File
Binary file not shown.
+4 -4
View File
@@ -21,7 +21,7 @@ $ID,2$This will perform a special $LK,"Mount",A="MN:Mount"$() automatically.
$BK,1$WARNING:$BK,0$ This command erases everything on a hard drive. It repartitions a whole drive and formats the partitions$FG$. This command should be skipped if you already have your hard drive partitioned. $BK,1$WARNING:$BK,0$ This command erases everything on a hard drive. It repartitions a whole drive and formats the partitions$FG$. This command should be skipped if you already have your hard drive partitioned.
$BK,1$WARNING:$BK,0$ This command doesn't play well with other operating systems. You'll need to do a $LK,"MasterBootZero",A="MN:MasterBootZero"$() to restore your drive to a state where other operating systems can partition it. $BK,1$WARNING:$BK,0$ This command doesn't play well with other operating systems. You'll need to do a $LK,"BootMHDZero",A="MN:BootMHDZero"$() to restore your drive to a state where other operating systems can partition it.
$ID,-2$ $ID,-2$
$ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,FSt_FAT32$FG$) $ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,FSt_FAT32$FG$)
$ID,2$This command formats a drive with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$. $ID,2$This command formats a drive with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
@@ -31,12 +31,12 @@ $BK,1$WARNING:$BK,0$ If you are upgrading, be sure not to lose the file, $FG,2$
$ID,-2$3) $LK,"CopyTree",A="MN:CopyTree"$($FG,2$"T:/"$FG$,$FG,2$"D:/"$FG$) $ID,-2$3) $LK,"CopyTree",A="MN:CopyTree"$($FG,2$"T:/"$FG$,$FG,2$"D:/"$FG$)
$ID,2$This command is used to copy files onto a hard drive partition from the CD/DVD. Use the drive letter of the partition in place of $FG,2$'D'$FG$. $ID,2$This command is used to copy files onto a hard drive partition from the CD/DVD. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
$ID,-2$4) $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$($FG,2$'D'$FG$) $ID,-2$4) $LK,"BootHDIns",A="MN:BootHDIns"$($FG,2$'D'$FG$)
$ID,2$This command recompiles the source code on a drive and writes to the $UL,1$drive's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel. $ID,2$This command recompiles the source code on a drive and writes to the $UL,1$drive's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel.
$ID,-2$5) Use Linux's $LK,"Grub",A="FI:::/Doc/Grub.TXT"$ or TempleOS' $LK,"MasterBootInstall",A="MN:MasterBootInstall"$($FG,2$'D'$FG$) $ID,-2$5) Use Linux's $LK,"Grub",A="FI:::/Doc/Grub.TXT"$ or TempleOS' $LK,"BootMHDIns",A="MN:BootMHDIns"$($FG,2$'D'$FG$)
$ID,2$ $ID,2$
The $LK,"MasterBootInstall",A="MN:MasterBootInstall"$() command places a boot loader on a drive. It saves the old master boot record to $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the drive. The $LK,"BootMHDIns",A="MN:BootMHDIns"$() command places a boot loader on a drive. It saves the old master boot record to $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the drive.
Delete $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ if you want to get a fresh copy of a mbr, like if installing from your own custom CD containing it's own $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ onto a system with a non-TempleOS boot loader. Delete $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ if you want to get a fresh copy of a mbr, like if installing from your own custom CD containing it's own $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ onto a system with a non-TempleOS boot loader.
+2 -2
View File
@@ -29,9 +29,9 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
* You can use $FG,2$filter_lines$FG$ in the editor text search form ($FG,2$<CTRL-f>$FG$) to temporarily display just lines near each match. A value of $FG,2$filter lines$FG$ set to $FG,2$5$FG$ will display lines within 5 lines of matches. Then, you can do another find to a different string and achieve a $FG,2$AND$FG$ search. When finished, press $FG,2$<ESC>$FG$. * You can use $FG,2$filter_lines$FG$ in the editor text search form ($FG,2$<CTRL-f>$FG$) to temporarily display just lines near each match. A value of $FG,2$filter lines$FG$ set to $FG,2$5$FG$ will display lines within 5 lines of matches. Then, you can do another find to a different string and achieve a $FG,2$AND$FG$ search. When finished, press $FG,2$<ESC>$FG$.
* You can recompile and reinstall the kernel with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). You'll probably want to make a function for recompiling that uses the $LK,"Auto",A="MN:Auto"$() function to answer the cfg questions. See my technique $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$. * You can recompile and reinstall the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$(). You'll probably want to make a function for recompiling that uses the $LK,"Auto",A="MN:Auto"$() function to answer the cfg questions. See my technique $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$.
* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$. * $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"BootHDIns",A="MN:BootHDIns"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$.
* You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/HomeSys.CPP,ACInit"$() in $LK,"~/HomeSys.CPP",A="FF:/Home/HomeSys.CPP,ACInit"$. * You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/HomeSys.CPP,ACInit"$() in $LK,"~/HomeSys.CPP",A="FF:/Home/HomeSys.CPP,ACInit"$.
+1 -1
View File
@@ -1,5 +1,5 @@
$WW,1$$FG,5$$TX+CX,"Upgrading TempleOS"$$FG$ $WW,1$$FG,5$$TX+CX,"Upgrading TempleOS"$$FG$
To upgrade, you generally boot the new TempleOS CD/DVD, install on top of your drive, modify your files and set it to boot your account by executing $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). Often, your code will have to be modified to work with the new version. See $LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$. You might have to boot an alternate drive or the CD and modify your code until it boots okay. To upgrade, you generally boot the new TempleOS CD/DVD, install on top of your drive, modify your files and set it to boot your account by executing $LK,"BootHDIns",A="MN:BootHDIns"$(). Often, your code will have to be modified to work with the new version. See $LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$. You might have to boot an alternate drive or the CD and modify your code until it boots okay.
See the $LK,"Installing",A="FI:::/Doc/Install.TXT"$ documentation. See the $LK,"Installing",A="FI:::/Doc/Install.TXT"$ documentation.
+1 -1
View File
@@ -241,7 +241,7 @@ CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit)
CBlkDev *res; CBlkDev *res;
if (0<=first_drv_let-'A'<NUM_DRVS && (type==BDT_ATA || type==BDT_ATAPI) && if (0<=first_drv_let-'A'<NUM_DRVS && (type==BDT_ATA || type==BDT_ATAPI) &&
0<=unit<=1) { 0<=unit<=1) {
res=BlkDevNextFree(first_drv_let,type); res=BlkDevNextFreeSlot(first_drv_let,type);
res->unit=unit; res->unit=unit;
res->base0=base0; res->base0=base0;
res->base1=base1; res->base1=base1;
+9 -7
View File
@@ -5,7 +5,8 @@ U0 BlkDevLockFwdingSet(CBlkDev *bd)
switch (bd->type) { switch (bd->type) {
case BDT_RAM: case BDT_RAM:
break; break;
case BDT_FILE: case BDT_FILE_READ:
case BDT_FILE_WRITE:
bd->lock_fwding=Let2BlkDev(*bd->file_dsk_name); bd->lock_fwding=Let2BlkDev(*bd->file_dsk_name);
break; break;
case BDT_ATA: case BDT_ATA:
@@ -32,15 +33,16 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
bd->bd_signature=BD_SIGNATURE_VAL; bd->bd_signature=BD_SIGNATURE_VAL;
if (make_free) if (make_free)
dv=DrvMakeFree(bd->first_drv_let+res); dv=DrvMakeFreeSlot(bd->first_drv_let+res);
else else
dv=DrvNextFree(bd->first_drv_let+res); dv=DrvMakeFreeSlot(DrvNextFreeLet(bd->first_drv_let+res));
dv->bd=bd; dv->bd=bd;
dv->drv_offset=bd->drv_offset; dv->drv_offset=bd->drv_offset;
dv->size=bd->max_blk+1-bd->drv_offset; dv->size=bd->max_blk+1-bd->drv_offset;
switch (bd->type) { switch (bd->type) {
case BDT_RAM: case BDT_RAM:
case BDT_FILE: case BDT_FILE_READ:
case BDT_FILE_WRITE:
dv->dv_signature=DRV_SIGNATURE_VAL; dv->dv_signature=DRV_SIGNATURE_VAL;
dv->fs_type=FSt_REDSEA; dv->fs_type=FSt_REDSEA;
//This is to force creation of a RAM //This is to force creation of a RAM
@@ -81,9 +83,9 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
for (i=0;i<4;i++) { for (i=0;i<4;i++) {
if (mbr.p[i].type) { if (mbr.p[i].type) {
if (make_free) if (make_free)
dv=DrvMakeFree(bd->first_drv_let+res); dv=DrvMakeFreeSlot(bd->first_drv_let+res);
else else
dv=DrvNextFree(bd->first_drv_let+res); dv=DrvMakeFreeSlot(DrvNextFreeLet(bd->first_drv_let+res));
dv->bd=bd; dv->bd=bd;
dv->drv_offset=mbr.p[i].offset+offset; dv->drv_offset=mbr.p[i].offset+offset;
dv->size =mbr.p[i].size; dv->size =mbr.p[i].size;
@@ -151,7 +153,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
if (res) if (res)
BlkDevLockFwdingSet(bd); BlkDevLockFwdingSet(bd);
else else
MemSet(bd,0,sizeof(CBlkDev)); BlkDevDel(bd);
return res; return res;
} }
+4 -2
View File
@@ -47,7 +47,8 @@ Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
case BDT_RAM: case BDT_RAM:
MemCpy(buf,bd->RAM_dsk+blk<<BLK_SIZE_BITS,cnt<<BLK_SIZE_BITS); MemCpy(buf,bd->RAM_dsk+blk<<BLK_SIZE_BITS,cnt<<BLK_SIZE_BITS);
break; break;
case BDT_FILE: case BDT_FILE_READ:
case BDT_FILE_WRITE:
FRBlks(bd->file_dsk,buf,blk,cnt); FRBlks(bd->file_dsk,buf,blk,cnt);
break; break;
case BDT_ATA: case BDT_ATA:
@@ -86,7 +87,8 @@ Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
case BDT_RAM: case BDT_RAM:
MemCpy(bd->RAM_dsk+blk<<BLK_SIZE_BITS,buf,cnt<<BLK_SIZE_BITS); MemCpy(bd->RAM_dsk+blk<<BLK_SIZE_BITS,buf,cnt<<BLK_SIZE_BITS);
break; break;
case BDT_FILE: case BDT_FILE_READ:
case BDT_FILE_WRITE:
FWBlks(bd->file_dsk,buf,blk,cnt); FWBlks(bd->file_dsk,buf,blk,cnt);
break; break;
case BDT_ATA: case BDT_ATA:
+53 -39
View File
@@ -33,41 +33,53 @@ Bool BlkDevInit(CBlkDev *bd)
CDirEntry de; CDirEntry de;
U8 buf[STR_LEN]; U8 buf[STR_LEN];
CDrv *dv=Let2Drv(bd->first_drv_let); CDrv *dv=Let2Drv(bd->first_drv_let);
Bool res=FALSE,invalid=FALSE; Bool res=FALSE;
if (!LBts(&bd->flags,BDf_INITIALIZED)) { if (!LBts(&bd->flags,BDf_INITIALIZED)) {
bd->flags|=BDF_INIT_IN_PROGRESS; bd->flags|=BDF_INIT_IN_PROGRESS;
switch (bd->type) { switch (bd->type) {
start: case BDT_RAM:
case BDT_RAM: if (!bd->RAM_dsk) {
if (!bd->RAM_dsk) { bd->RAM_dsk=AMAlloc((bd->max_blk+1)<<BLK_SIZE_BITS);
bd->RAM_dsk=AMAlloc((bd->max_blk+1)<<BLK_SIZE_BITS); bd->max_blk=MSize(bd->RAM_dsk)>>BLK_SIZE_BITS-1;
bd->max_blk=MSize(bd->RAM_dsk)>>BLK_SIZE_BITS-1; }
}
break;
case BDT_FILE:
if (!bd->file_dsk_name) {
StrPrint(buf,"%C:/Drv%C.DRV.C",
blkdev.boot_drv_let,bd->first_drv_let);
bd->file_dsk_name=AStrNew(buf);
}
if (FileFind(bd->file_dsk_name,&de,FUF_JUST_FILES))
bd->max_blk=de.size>>BLK_SIZE_BITS-1;
else {
invalid=TRUE;
if (bd->max_blk<7)
bd->max_blk=7;
}
bd->file_dsk=FOpen(bd->file_dsk_name,"wc+",bd->max_blk+1);
break;
end:
dv->fs_type=FSt_REDSEA; dv->fs_type=FSt_REDSEA;
dv->size=bd->max_blk+1-bd->drv_offset; dv->size=bd->max_blk+1-bd->drv_offset;
if (!invalid && RedSeaDrvValidate(bd->first_drv_let)) if (RedSeaDrvValidate(bd->first_drv_let))
RedSeaDrvInit(dv); RedSeaDrvInit(dv);
else else
RedSeaFmt(bd->first_drv_let); RedSeaFmt(bd->first_drv_let);
res=TRUE; res=TRUE;
break; break;
case BDT_FILE_READ:
if (FileFind(bd->file_dsk_name,&de,FUF_JUST_FILES)) {
bd->max_blk=de.size>>BLK_SIZE_BITS-1;
try bd->file_dsk=FOpen(bd->file_dsk_name,"rc",bd->max_blk+1);
catch
Fs->catch_except=TRUE;
if (bd->file_dsk) {
dv->fs_type=FSt_REDSEA;
dv->size=bd->max_blk+1-bd->drv_offset;
if (RedSeaDrvValidate(bd->first_drv_let)) {
RedSeaDrvInit(dv);
res=TRUE;
}
}
}
break;
case BDT_FILE_WRITE:
if (!bd->file_dsk_name) {
StrPrint(buf,"%C:/Drv%C.DRV.C",
blkdev.boot_drv_let,bd->first_drv_let);
bd->file_dsk_name=AStrNew(buf);
}
if (bd->max_blk<7)
bd->max_blk=7;
bd->file_dsk=FOpen(bd->file_dsk_name,"wc",bd->max_blk+1);
dv->fs_type=FSt_REDSEA;
dv->size=bd->max_blk+1-bd->drv_offset;
RedSeaFmt(bd->first_drv_let);
res=TRUE;
break;
case BDT_ATA: case BDT_ATA:
bd->max_reads=128; bd->max_reads=128;
bd->max_writes=1; bd->max_writes=1;
@@ -105,7 +117,7 @@ U0 BlkDevsRelease()
} }
} }
CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type) CBlkDev *BlkDevNextFreeSlot(U8 first_drv_let,I64 type)
{//Locate free slot for new BlkDev, like during $LK,"Mount",A="MN:Mount"$(). {//Locate free slot for new BlkDev, like during $LK,"Mount",A="MN:Mount"$().
I64 i=0; I64 i=0;
CBlkDev *res; CBlkDev *res;
@@ -117,20 +129,21 @@ CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type)
MemSet(res,0,sizeof(CBlkDev)); MemSet(res,0,sizeof(CBlkDev));
res->first_drv_let=first_drv_let; res->first_drv_let=first_drv_let;
res->type=type; res->type=type;
if (type==BDT_ATAPI) res->flags=BDF_READ_CACHE;
res->flags=BDF_REMOVABLE; res->blk_size=BLK_SIZE;
else
res->flags=0;
if (type!=BDT_RAM)
res->flags|=BDF_READ_CACHE;
if (type==BDT_ATAPI) {
res->blk_size=DVD_BLK_SIZE;
res->flags|=BDF_READ_ONLY;
} else
res->blk_size=BLK_SIZE;
res->max_blk=0xEFFFFFFF; res->max_blk=0xEFFFFFFF;
switch (type) {
case BDT_RAM:
res->flags&=~BDF_READ_CACHE;
break;
case BDT_FILE_READ:
res->flags|=BDF_READ_ONLY;
break;
case BDT_ATAPI:
res->flags|=BDF_REMOVABLE|BDF_READ_ONLY;
res->blk_size=DVD_BLK_SIZE;
break;
}
return res; return res;
} }
} while (++i<NUM_BLKDEVS); } while (++i<NUM_BLKDEVS);
@@ -140,6 +153,7 @@ CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type)
U0 BlkDevDel(CBlkDev *bd) U0 BlkDevDel(CBlkDev *bd)
{//Delete BlkDev {//Delete BlkDev
DrvBlkDevDel(bd);
FClose(bd->file_dsk); FClose(bd->file_dsk);
Free(bd->file_dsk_name); Free(bd->file_dsk_name);
Free(bd->dev_id_record); Free(bd->dev_id_record);
+31 -11
View File
@@ -35,7 +35,7 @@ U0 DrvsRelease()
} }
} }
CDrv *DrvMakeFree(U8 drv_let) CDrv *DrvMakeFreeSlot(U8 drv_let)
{//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$(). {//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$().
//!!! drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv. //!!! drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv.
I64 i=ToUpper(drv_let)-'A'; I64 i=ToUpper(drv_let)-'A';
@@ -48,18 +48,22 @@ CDrv *DrvMakeFree(U8 drv_let)
return res; return res;
} }
CDrv *DrvNextFree(U8 first_drv_let='C') U8 DrvNextFreeLet(U8 first_drv_let='C')
{//Locate free slot for new drv, like during $LK,"Mount",A="MN:Mount"$(). {//Locate free slot for new drv, like during $LK,"Mount",A="MN:Mount"$().
//!!! first_drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv. //!!! first_drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv.
I64 i=ToUpper(first_drv_let)-'A'; I64 i=ToUpper(first_drv_let)-'A',type=Let2BlkDevType(first_drv_let);
if (!(0<=i<NUM_DRVS)) if (!(0<=i<NUM_DRVS))
throw('Drv'); throw('Drv');
do do
if (blkdev.drvs[i].dv_signature!=DRV_SIGNATURE_VAL) if (blkdev.drvs[i].dv_signature!=DRV_SIGNATURE_VAL) {
return DrvMakeFree(i+'A'); if (Let2BlkDevType(i+'A')!=type)
throw('Drv');
else
return i+'A';
}
while (++i<NUM_DRVS); while (++i<NUM_DRVS);
throw('Drv'); throw('Drv');
return NULL; //never gets here return 0; //Never gets here.
} }
U0 DrvDel(CDrv *dv) U0 DrvDel(CDrv *dv)
@@ -71,6 +75,17 @@ U0 DrvDel(CDrv *dv)
MemSet(dv,0,sizeof(CDrv)); MemSet(dv,0,sizeof(CDrv));
} }
U0 DrvBlkDevDel(CBlkDev *bd)
{//Delete drv's of BlkDev
I64 i;
CDrv *dv;
for (i=0;i<NUM_DRVS;i++) {
dv=&blkdev.drvs[i];
if (dv->bd==bd)
DrvDel(dv);
}
}
U0 DrvFATBlkAlloc(CDrv *dv) U0 DrvFATBlkAlloc(CDrv *dv)
{ {
DrvChk(dv); DrvChk(dv);
@@ -150,8 +165,10 @@ I64 Let2BlkDevType(U8 drv_let)
return BDT_RAM; return BDT_RAM;
if ('C'<=drv_let<='L') if ('C'<=drv_let<='L')
return BDT_ATA; return BDT_ATA;
if ('M'<=drv_let<='S') if ('M'<=drv_let<='P')
return BDT_FILE; return BDT_FILE_READ;
if ('Q'<=drv_let<='S')
return BDT_FILE_WRITE;
if ('T'<=drv_let<='Z') if ('T'<=drv_let<='Z')
return BDT_ATAPI; return BDT_ATAPI;
return BDT_NULL; return BDT_NULL;
@@ -241,7 +258,8 @@ Bool Drv(U8 drv_let)
if (dv!=Fs->cur_dv) { if (dv!=Fs->cur_dv) {
if (bd->flags & BDF_REMOVABLE && !(bd->flags & BDF_INITIALIZED)) if (bd->flags & BDF_REMOVABLE && !(bd->flags & BDF_INITIALIZED))
ChgDsk(Drv2Let(dv)); ChgDsk(Drv2Let(dv));
if (bd->type==BDT_RAM || bd->type=BDT_FILE) if (bd->type==BDT_RAM ||
bd->type==BDT_FILE_READ || bd->type==BDT_FILE_WRITE)
BlkDevInit(bd); BlkDevInit(bd);
} }
Fs->cur_dv=dv; Fs->cur_dv=dv;
@@ -288,7 +306,7 @@ U8 *DrvModelNum(U8 drv_let=0)
return res; return res;
} }
U8 blkdev_text_attr[BDT_NUM_TYPES]={BLACK,LTCYAN,WHITE,LTGREEN,LTBLUE}; U8 blkdev_text_attr[BDT_NUM_TYPES]={BLACK,LTCYAN,WHITE,LTGREEN,LTRED,LTBLUE};
U8 drv_text_attr[3]={BLACK,BLUE,RED}; U8 drv_text_attr[3]={BLACK,BLUE,RED};
U8 DrvTextAttrGet(U8 drv_let=0) U8 DrvTextAttrGet(U8 drv_let=0)
@@ -325,7 +343,7 @@ U0 DrvRep()
else else
ch='+'; ch='+';
attr=DrvTextAttrGet(drv_let); attr=DrvTextAttrGet(drv_let);
"$$FG,%d$$$$BG,%d$$%C %-8Z %-9Z %04X %04X %02X\n", "$$FG,%d$$$$BG,%d$$%C %-8Z %-10Z %04X %04X %02X\n",
attr&15,attr>>4,drv_let,dv->fs_type&FSG_TYPE_MASK,"ST_DRV_TYPES", attr&15,attr>>4,drv_let,dv->fs_type&FSG_TYPE_MASK,"ST_DRV_TYPES",
bd->type,"ST_BLKDEV_TYPES",bd->base0,bd->base1,bd->unit; bd->type,"ST_BLKDEV_TYPES",bd->base0,bd->base1,bd->unit;
if (st=DrvModelNum(drv_let)) { if (st=DrvModelNum(drv_let)) {
@@ -336,6 +354,8 @@ U0 DrvRep()
" Serial#:%s\n",st; " Serial#:%s\n",st;
Free(st); Free(st);
} }
if (bd->type==BDT_FILE_READ || bd->type==BDT_FILE_WRITE)
" File=\"%s\"\n",bd->file_dsk_name;
" %016X-%016X\n$$FG$$$$BG$$",dv->drv_offset,dv->drv_offset+dv->size-1; " %016X-%016X\n$$FG$$$$BG$$",dv->drv_offset,dv->drv_offset+dv->size-1;
} }
} }
+17 -9
View File
@@ -21,7 +21,7 @@ U0 HashFunSegFind(CHashTable *h,U8 *addr,
if (tempex->type&HTT_FUN) { if (tempex->type&HTT_FUN) {
if (!Bt(&tempex(CHashFun *)->flags,Cf_EXTERN) && if (!Bt(&tempex(CHashFun *)->flags,Cf_EXTERN) &&
!Bt(&tempex(CHashFun *)->flags,Ff_INTERNAL)) !Bt(&tempex(CHashFun *)->flags,Ff_INTERNAL))
j=tempex(CHashFun *)->executable_addr; j=tempex(CHashFun *)->exe_addr;
} else if (tempex->type&HTT_EXPORT_SYS_SYM) } else if (tempex->type&HTT_EXPORT_SYS_SYM)
j=tempex->val; j=tempex->val;
if (j) { if (j) {
@@ -131,12 +131,14 @@ U8 *FunSegCacheFind(U8 *addr,I64 *_offset)
} }
} }
U0 StrPrintFunSeg(U8 *buf,I64 addr,I64 field_len) U0 StrPrintFunSeg(U8 *buf,I64 addr,I64 field_len,I64 flags)
{ {
I64 offset; I64 offset;
CHashExport *tempex; CHashExport *tempex;
U8 *str,*str2; U8 *str,*str2;
Bool is_fun=FALSE; Bool is_fun=FALSE;
if (!(flags&SPF_TRUNCATE))
field_len=0;
if (addr) { if (addr) {
if (str=FunSegCacheFind(addr,&offset)) { if (str=FunSegCacheFind(addr,&offset)) {
if (addr!=SYS_IDLE_PT) if (addr!=SYS_IDLE_PT)
@@ -153,21 +155,27 @@ U0 StrPrintFunSeg(U8 *buf,I64 addr,I64 field_len)
if (offset>0xFFFF) offset=0xFFFF; if (offset>0xFFFF) offset=0xFFFF;
if (is_fun) { if (is_fun) {
str2=MStrPrint("&%s",str); str2=MStrPrint("&%s",str);
if (field_len>7) if (field_len>7) {
StrPrint(buf,"%*ts+0x%04X",field_len-7,str2,offset); if (flags&SPF_LEFT_JUSTIFY && StrLen(str2)<field_len-7)
else StrPrint(buf,"%s+0x%04X",str2,offset);
else
StrPrint(buf,"%*ts+0x%04X",field_len-7,str2,offset);
} else
StrPrint(buf,"%s+0x%04X",str2,offset); StrPrint(buf,"%s+0x%04X",str2,offset);
Free(str2); Free(str2);
} else { } else {
if (field_len>7) if (field_len>7) {
StrPrint(buf,"%*ts+0x%04X",field_len-7,str,offset); if (flags&SPF_LEFT_JUSTIFY && StrLen(str)<field_len-7)
else StrPrint(buf,"%s+0x%04X",str,offset);
else
StrPrint(buf,"%*ts+0x%04X",field_len-7,str,offset);
} else
StrPrint(buf,"%s+0x%04X",str,offset); StrPrint(buf,"%s+0x%04X",str,offset);
} }
return; return;
} }
} }
if (field_len) if (flags&SPF_TRUNCATE)
StrPrint(buf,"%*tX",field_len,addr); StrPrint(buf,"%*tX",field_len,addr);
else else
StrPrint(buf,"%X",addr); StrPrint(buf,"%X",addr);
+4 -4
View File
@@ -457,9 +457,9 @@ U0 G(U8 *ip=INVALID_PTR,CTask *task=NULL)
LBtr(&task->rflags,RFLAGf_TRAP);//No single step LBtr(&task->rflags,RFLAGf_TRAP);//No single step
Suspend(task,FALSE); Suspend(task,FALSE);
if (task==Fs) { if (task==Fs) {
if (IsDbg && task->next_lex!=&task->next_lex) { if (IsDbg && task->next_cc!=&task->next_cc) {
"Exit Dbg\n"; "Exit Dbg\n";
Btr(&task->last_lex->flags,CCf_PMT); Btr(&task->last_cc->flags,CCf_PMT);
} }
} else } else
Exit; Exit;
@@ -487,8 +487,8 @@ public U0 S(U8 *ip=INVALID_PTR,CTask *task=NULL) //Single-step.
Suspend(task,FALSE); Suspend(task,FALSE);
if (task==Fs) { if (task==Fs) {
if (IsDbg) { if (IsDbg) {
if (task->next_lex!=&task->next_lex) if (task->next_cc!=&task->next_cc)
Btr(&task->last_lex->flags,CCf_PMT); Btr(&task->last_cc->flags,CCf_PMT);
} }
} else } else
Exit; Exit;
+2 -1
View File
@@ -108,7 +108,8 @@ U0 SysDefinesLoad()
DefineLstLoad("ST_FILE_ATTRS","R\0H\0S\0V\0D\0A\0 \0 \0X\0T\0Z\0C\0F\0"); DefineLstLoad("ST_FILE_ATTRS","R\0H\0S\0V\0D\0A\0 \0 \0X\0T\0Z\0C\0F\0");
DefineLstLoad("ST_FILE_UTIL_FLAGS","r\0d\0i\0a\0c\0R\0p\0m\0x\0s\0" DefineLstLoad("ST_FILE_UTIL_FLAGS","r\0d\0i\0a\0c\0R\0p\0m\0x\0s\0"
"D\0F\0T\0S\0A\0J\0G\0Z\0O\0P\0f\0l\0lb\0la\0"); "D\0F\0T\0S\0A\0J\0G\0Z\0O\0P\0f\0l\0lb\0la\0");
DefineLstLoad("ST_BLKDEV_TYPES","NULL\0RAM\0ATA\0FILE\0ATAPI\0"); DefineLstLoad("ST_BLKDEV_TYPES",
"NULL\0RAM\0ATA\0FILE_READ\0FILE_WRITE\0ATAPI\0");
DefineLstLoad("ST_DRV_TYPES", DefineLstLoad("ST_DRV_TYPES",
"NULL\0REDSEA\0FAT32\0ISO9660\0ISO13490\0ISO13346\0NTFS\0UNKNOWN\0"); "NULL\0REDSEA\0FAT32\0ISO9660\0ISO13490\0ISO13346\0NTFS\0UNKNOWN\0");
DefineLstLoad("ST_COLORS","BLACK\0BLUE\0GREEN\0CYAN\0" DefineLstLoad("ST_COLORS","BLACK\0BLUE\0GREEN\0CYAN\0"
+3 -2
View File
@@ -13,7 +13,7 @@ extern I64 BIOSTotalMem();
extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free); extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free);
extern CBlkDev *BlkDevChk(CBlkDev *bd,Bool except=TRUE); extern CBlkDev *BlkDevChk(CBlkDev *bd,Bool except=TRUE);
extern Bool BlkDevLock(CBlkDev *bd); extern Bool BlkDevLock(CBlkDev *bd);
extern CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type); extern CBlkDev *BlkDevNextFreeSlot(U8 first_drv_let,I64 type);
extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE); extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE);
extern U0 BlkDevsRelease(); extern U0 BlkDevsRelease();
extern U8 *Caller(I64 num=1); extern U8 *Caller(I64 num=1);
@@ -29,6 +29,7 @@ extern I64 Del(U8 *files_find_mask,Bool make_mask=FALSE,
extern U8 *DftExt(U8 *name,U8 *extension); extern U8 *DftExt(U8 *name,U8 *extension);
extern Bool Drv(U8 drv_let); extern Bool Drv(U8 drv_let);
extern U8 Drv2Let(CDrv *dv=NULL); extern U8 Drv2Let(CDrv *dv=NULL);
extern U0 DrvBlkDevDel(CBlkDev *bd);
extern CDrv *DrvChk(CDrv *dv,Bool except=TRUE); extern CDrv *DrvChk(CDrv *dv,Bool except=TRUE);
extern U8 DrvTextAttrGet(U8 drv_let=0); extern U8 DrvTextAttrGet(U8 drv_let=0);
extern Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA); extern Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA);
@@ -92,7 +93,7 @@ extern U0 SrvCmdQueDel(CSrvCmd *root);
extern I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL); extern I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL);
extern U0 SrvCtrlInit(CSrvCtrl *ctrl); extern U0 SrvCtrlInit(CSrvCtrl *ctrl);
extern U8 *StrPrint(U8 *dst,U8 *fmt,...); extern U8 *StrPrint(U8 *dst,U8 *fmt,...);
extern U0 StrPrintFunSeg(U8 *buf,I64 addr,I64 field_len); extern U0 StrPrintFunSeg(U8 *buf,I64 addr,I64 field_len,I64 flags);
extern Bool Suspend(CTask *task=NULL,Bool state=TRUE); extern Bool Suspend(CTask *task=NULL,Bool state=TRUE);
extern CSrvCmd *TaskMsg(CTask *_srv,CTask *master, extern CSrvCmd *TaskMsg(CTask *_srv,CTask *master,
I64 code,I64 a1,I64 a2,I64 flags); I64 code,I64 a1,I64 a2,I64 flags);
+2 -2
View File
@@ -30,7 +30,7 @@ I64 HashVal(CHash *temph)
if (Bt(&temph(CHashFun *)->flags,Cf_EXTERN)) if (Bt(&temph(CHashFun *)->flags,Cf_EXTERN))
return temph; return temph;
else else
return temph(CHashFun *)->executable_addr; return temph(CHashFun *)->exe_addr;
case HTt_REG: case HTt_REG:
return temph(CHashReg *)->reg_num|temph(CHashReg *)->reg_type<<8; return temph(CHashReg *)->reg_num|temph(CHashReg *)->reg_type<<8;
case HTt_KEYWORD: case HTt_KEYWORD:
@@ -176,7 +176,7 @@ CHashGeneric *HashPublic(U8 *st,I64 mask,Bool val=TRUE)
else else
res->type&=~HTF_PUBLIC; res->type&=~HTF_PUBLIC;
if (res->type&HTG_SRC_SYM) if (res->type&HTG_SRC_SYM)
HashSrcFileSet(Fs->last_lex,res); HashSrcFileSet(Fs->last_cc,res);
return res; return res;
} else } else
return NULL; return NULL;
+1 -1
View File
@@ -32,7 +32,7 @@ U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags)
if (tempex) { if (tempex) {
ptr2=module_base+i; ptr2=module_base+i;
if (tempex->type & HTT_FUN) if (tempex->type & HTT_FUN)
i=tempex(CHashFun *)->executable_addr; i=tempex(CHashFun *)->exe_addr;
else if (tempex->type & HTT_GLBL_VAR) else if (tempex->type & HTT_GLBL_VAR)
i=tempex(CHashGlblVar *)->data_addr; i=tempex(CHashGlblVar *)->data_addr;
else else
+5 -5
View File
@@ -55,12 +55,12 @@ GDT_TR_RING3: DU8 MP_MAX_PROCESSORS*16 DUP(0);
//************************************ //************************************
CORE0_16BIT_INIT:: CORE0_16BIT_INIT::
//EAX is $LK,"SYS_BOOT_SRC",A="FF:::/Kernel/KStart.CPP,[SYS_BOOT_SRC]"$. (Val passed from boot blk, $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$, & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/Reboot.CPP,BOOT_SRC_RAM"$.) //EAX is $LK,"SYS_BOOT_SRC",A="FF:::/Kernel/KStart.CPP,[SYS_BOOT_SRC]"$. (Val passed from boot blk, $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$, & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,BOOT_SRC_RAM"$.)
MOV ECX,EAX MOV ECX,EAX
MOV AX,(BOOT_RAM_LIMIT-BOOT_STK_SIZE)/16 MOV AX,(BOOT_RAM_LIMIT-BOOT_STK_SIZE)/16
MOV SS,AX MOV SS,AX
MOV SP,BOOT_STK_SIZE MOV SP,BOOT_STK_SIZE
PUSH ECX //Will be $LK,"SYS_BOOT_SRC",A="FF:::/Kernel/KStart.CPP,[SYS_BOOT_SRC]"$. See $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$ & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/Reboot.CPP,BOOT_SRC_RAM"$. PUSH ECX //Will be $LK,"SYS_BOOT_SRC",A="FF:::/Kernel/KStart.CPP,[SYS_BOOT_SRC]"$. See $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$ & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,BOOT_SRC_RAM"$.
PUSH EBX PUSH EBX
MOV AX,VGAM_TEXT/16 MOV AX,VGAM_TEXT/16
MOV ES,AX MOV ES,AX
@@ -139,7 +139,7 @@ GET_IP: POP BX
OUT 0x92,AL OUT 0x92,AL
POP U32 [SYS_BOOT_BLK] POP U32 [SYS_BOOT_BLK]
POP U32 [SYS_BOOT_SRC] //See $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$, & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/Reboot.CPP,BOOT_SRC_RAM"$. POP U32 [SYS_BOOT_SRC] //See $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$, & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,BOOT_SRC_RAM"$.
CLD CLD
XOR EAX,EAX XOR EAX,EAX
@@ -236,7 +236,7 @@ SYS_CACHE_LINE_WIDTH:: DU64 DFT_CACHE_LINE_WIDTH;
SYS_SEMAS:: DU8 NUM_SYS_SEMAS*SEMA_STRUCT_SIZE DUP(0); SYS_SEMAS:: DU8 NUM_SYS_SEMAS*SEMA_STRUCT_SIZE DUP(0);
//************************************ //************************************
ALIGN 16,OC_NOP ALIGN 16,OC_NOP
CORE0_32BIT_INIT:: //Entry point for $LK,"RAMReboot",A="MN:RAMReboot"$. CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$.
PUSH U32 RFLAGG_START PUSH U32 RFLAGG_START
POPFD POPFD
MOV EAX,SYS_START_CR0 MOV EAX,SYS_START_CR0
@@ -350,7 +350,7 @@ USE64
RET RET
//************************************ //************************************
SYS_RAM_REBOOT:: //This gets copied high. $LK,"SYS_RAM_REBOOT",A="FF:::/Adam/Opt/Boot/Reboot.CPP,SYS_RAM_REBOOT:2"$ SYS_RAM_REBOOT:: //This gets copied high. $LK,"SYS_RAM_REBOOT",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,SYS_RAM_REBOOT:2"$
PUSH U32 CGDT.ds //stk seg PUSH U32 CGDT.ds //stk seg
PUSH U32 BOOT_RAM_LIMIT //stk PUSH U32 BOOT_RAM_LIMIT //stk
PUSH U32 0 //flags PUSH U32 0 //flags
+2 -2
View File
@@ -171,7 +171,7 @@ I64 TaskInit(CTask *task,I64 stk_size)
(&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task); (&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task);
SrvCtrlInit(&task->srv_ctrl); SrvCtrlInit(&task->srv_ctrl);
QueInit(&task->next_lex); QueInit(&task->next_cc);
QueInit(&task->next_except); QueInit(&task->next_except);
QueInit(&task->next_ctrl); QueInit(&task->next_ctrl);
QueInit(&task->next_ode); QueInit(&task->next_ode);
@@ -356,7 +356,7 @@ U0 UserTaskCont()
Bool cont=TRUE; Bool cont=TRUE;
do { do {
cc=CmpCtrlNew(,CCF_CMD_LINE|CCF_PMT|CCF_QUESTION_HELP); cc=CmpCtrlNew(,CCF_CMD_LINE|CCF_PMT|CCF_QUESTION_HELP);
QueIns(cc,Fs->last_lex); QueIns(cc,Fs->last_cc);
try { try {
Lex(cc); Lex(cc);
ExeCmdLine(cc); ExeCmdLine(cc);
+5 -6
View File
@@ -329,7 +329,7 @@ _CPUID::
POP RSI POP RSI
POP RBP POP RBP
RET1 16 RET1 16
_CALLIND:: _CALL_IND:: //See $LK,"_LAST_FUN",A="MN:_LAST_FUN"$
PUSH RBP PUSH RBP
MOV RBP,RSP MOV RBP,RSP
PUSH RSI PUSH RSI
@@ -350,10 +350,10 @@ _CALLIND::
POP RBP POP RBP
RET RET
@@05: XOR RAX,RAX @@05: MOV RCX,U64 SF_ARG2[RBP] //argc
MOV RCX,U64 SF_ARG2[RBP] //argc
SHL RCX,3 SHL RCX,3
ADD RSP,RCX ADD RSP,RCX
XOR RAX,RAX
POP RDI POP RDI
POP RSI POP RSI
POP RBP POP RBP
@@ -381,8 +381,7 @@ _CALLEXTNUM::
POP RBP POP RBP
RET RET
@@05: XOR RAX,RAX @@05: MOV RCX,U64 SF_ARG2[RBP] //argc
MOV RCX,U64 SF_ARG2[RBP] //argc
SHL RCX,3 SHL RCX,3
ADD RSP,RCX ADD RSP,RCX
POP RDI POP RDI
@@ -411,7 +410,7 @@ _CALLEXTSTR::
TEST U32 CHash.type[RAX],HTT_FUN TEST U32 CHash.type[RAX],HTT_FUN
JZ @@05 JZ @@05
MOV RAX,U64 CHashFun.executable_addr[RAX] MOV RAX,U64 CHashFun.exe_addr[RAX]
JMP @@10 JMP @@10
@@05: MOV RAX,U64 CHashExport.val[RAX] @@05: MOV RAX,U64 CHashExport.val[RAX]
@@10: TEST RAX,RAX @@10: TEST RAX,RAX
+1063 -1047
View File
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -1,5 +1,5 @@
//Compile this by calling $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). //Compile this by calling $LK,"BootHDIns",A="MN:BootHDIns"$().
//Don't do it directly. See $LK,"Cmp(\"/Kernel/Kernel\")",A="FF:::/Adam/Opt/Boot/BootIns.CPP,Cmp(\"/Kernel/Kernel\""$. //Don't do it directly. See $LK,"Cmp(\"/Kernel/Kernel\")",A="FF:::/Adam/Opt/Boot/BootHDIns.CPP,Cmp(\"/Kernel/Kernel\""$.
#exe { #exe {
Cd(__DIR__);; Cd(__DIR__);;
+27 -10
View File
@@ -858,7 +858,7 @@ public class CHashFun:CHashClass
CHashClass *return_class; CHashClass *return_class;
U32 arg_cnt,pad, U32 arg_cnt,pad,
used_reg_mask,clobbered_reg_mask; used_reg_mask,clobbered_reg_mask;
U8 *executable_addr; U8 *exe_addr;
CExternUsage *ext_lst; CExternUsage *ext_lst;
}; };
@@ -2025,11 +2025,11 @@ class CCodeCtrl
#define __DATE__ #exe{StreamPrint("\"%D\"",Now);} #define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
#define __TIME__ #exe{StreamPrint("\"%T\"",Now);} #define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
#define __LINE__ #exe{StreamPrint("%d",\ #define __LINE__ #exe{StreamPrint("%d",\
Fs->last_lex->lex_include_stk->line_num);} Fs->last_cc->lex_include_stk->line_num);}
#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_lex->flags&CCF_CMD_LINE &&\ #define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE &&\
Fs->last_lex->lex_include_stk->depth<2);} Fs->last_cc->lex_include_stk->depth<2);}
#define __FILE__ #exe{StreamPrint("\"%s\"",\ #define __FILE__ #exe{StreamPrint("\"%s\"",\
Fs->last_lex->lex_include_stk->full_name);} Fs->last_cc->lex_include_stk->full_name);}
#define __DIR__ #exe{StreamDir;} #define __DIR__ #exe{StreamDir;}
#define LFSF_DOC 1 #define LFSF_DOC 1
@@ -2296,6 +2296,7 @@ public class CATARep
#define BLK_SIZE_BITS 9 #define BLK_SIZE_BITS 9
#define BLK_SIZE (1<<BLK_SIZE_BITS) #define BLK_SIZE (1<<BLK_SIZE_BITS)
#define DVD_BLK_SIZE (4*BLK_SIZE) #define DVD_BLK_SIZE (4*BLK_SIZE)
#define DVD_BOOT_LOADER_SIZE DVD_BLK_SIZE*1
#define INVALID_CLUSTER (-1) #define INVALID_CLUSTER (-1)
class CMBRPrt class CMBRPrt
@@ -2628,9 +2629,10 @@ public class CDirEntry
#define BDT_NULL 0 #define BDT_NULL 0
#define BDT_RAM 1 #define BDT_RAM 1
#define BDT_ATA 2 #define BDT_ATA 2
#define BDT_FILE 3 #define BDT_FILE_READ 3
#define BDT_ATAPI 4 #define BDT_FILE_WRITE 4
#define BDT_NUM_TYPES 5 #define BDT_ATAPI 5
#define BDT_NUM_TYPES 6
#define BDF_REMOVABLE 0x001 #define BDF_REMOVABLE 0x001
#define BDF_INITIALIZED 0x002 #define BDF_INITIALIZED 0x002
@@ -3386,7 +3388,8 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy)
CHashTable *hash_table; CHashTable *hash_table;
CSrvCtrl srv_ctrl; CSrvCtrl srv_ctrl;
CCmpCtrl *next_lex,*last_lex; CCmpCtrl *next_cc,*last_cc;
CHashFun *last_fun;
I64 win_old_left,win_old_right,win_old_top,win_old_bottom; I64 win_old_left,win_old_right,win_old_top,win_old_bottom;
@@ -3889,7 +3892,7 @@ public class CDbgGlbls
#define BOOT_SRC_HARDDRV 3 #define BOOT_SRC_HARDDRV 3
#define BOOT_SRC_DVD 4 #define BOOT_SRC_DVD 4
// $LK,"Auto",A="MN:Auto"$("") StdIn for call to $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). // $LK,"Auto",A="MN:Auto"$("") StdIn for call to $LK,"BootHDIns",A="MN:BootHDIns"$().
#define STD_DISTRO_DVD_CFG "Tb\nScale2Mem(2048,0x40000)\nt \n\n\n\n" #define STD_DISTRO_DVD_CFG "Tb\nScale2Mem(2048,0x40000)\nt \n\n\n\n"
#help_index "Misc/Registry" #help_index "Misc/Registry"
@@ -3911,4 +3914,18 @@ class CProgress
U8 desc[PROGRESS_DESC_LEN]; U8 desc[PROGRESS_DESC_LEN];
}; };
#help_index "Char/Operations"
#define SPF_PAD_ZERO 0x001
#define SPF_LEFT_JUSTIFY 0x002
#define SPF_TRUNCATE 0x004
#define SPF_COMMA 0x008
#define SPF_DOLLAR 0x010
#define SPF_SLASH 0x020
#define SPF_QUESTION 0x040
#define SPF_AUX_FMT_NUM 0x080
#define SPF_DECIMAL 0x100
#define SPF_NEG 0x200
#define SPF_NEG_E 0x400
#define SPF_NEG_AUX_FMT_NUM 0x800
#help_index "" #help_index ""
+1 -1
View File
@@ -45,7 +45,7 @@ public _extern _CALL I64 Call(U8 *machine_code); //Call addr with no args.
public _extern _CALLEXTSTR I64 CallExtStr( public _extern _CALLEXTSTR I64 CallExtStr(
/*argpop*/ U8 *name,...); //Search sym table for fun and pass it args. /*argpop*/ U8 *name,...); //Search sym table for fun and pass it args.
//Can have any fixed number of arguments. //Can have any fixed number of arguments.
public _extern _CALLIND I64 CallInd( public _extern _CALL_IND I64 CallInd(
/*argpop*/I64 (*fp_addr)(...),...); //Call with fixed number of args. /*argpop*/I64 (*fp_addr)(...),...); //Call with fixed number of args.
#help_index "Call/System Extern Num" #help_index "Call/System Extern Num"
+9 -9
View File
@@ -195,7 +195,6 @@ public extern U0 S(U8 *ip=INVALID_PTR,CTask *task=NULL);
#help_index "Debugging/Debugger;DolDoc/Cmd Line (Typically);"\ #help_index "Debugging/Debugger;DolDoc/Cmd Line (Typically);"\
"Cmd Line (Typically);Help System" "Cmd Line (Typically);Help System"
public extern Bool Man(U8 *st,I64 edf_dof_flags=0); public extern Bool Man(U8 *st,I64 edf_dof_flags=0);
#help_index "Debugging/Dump" #help_index "Debugging/Dump"
public extern U0 CallerRep(U8 **rbp=NULL,CTask *task=NULL); public extern U0 CallerRep(U8 **rbp=NULL,CTask *task=NULL);
public extern U0 D(U8 *addr,I64 cnt=0x80,Bool show_offset=TRUE); public extern U0 D(U8 *addr,I64 cnt=0x80,Bool show_offset=TRUE);
@@ -327,7 +326,7 @@ extern I64 FileAttr(U8 *name,I64 old_attr=0);
public extern CBlkDev *BlkDevChk(CBlkDev *bd,Bool except=TRUE); public extern CBlkDev *BlkDevChk(CBlkDev *bd,Bool except=TRUE);
public extern U0 BlkDevDel(CBlkDev *bd); public extern U0 BlkDevDel(CBlkDev *bd);
public extern Bool BlkDevLock(CBlkDev *bd); public extern Bool BlkDevLock(CBlkDev *bd);
public extern CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type); public extern CBlkDev *BlkDevNextFreeSlot(U8 first_drv_let,I64 type);
public extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE); public extern Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE);
public extern U0 BlkDevsRelease(); public extern U0 BlkDevsRelease();
public extern I64 Cluster2Blk(CDrv *dv,I64 c); public extern I64 Cluster2Blk(CDrv *dv,I64 c);
@@ -339,9 +338,9 @@ public extern U8 Drv2Let(CDrv *dv=NULL);
public extern CDrv *DrvChk(CDrv *dv,Bool except=TRUE); public extern CDrv *DrvChk(CDrv *dv,Bool except=TRUE);
public extern U0 DrvDel(CDrv *dv); public extern U0 DrvDel(CDrv *dv);
public extern Bool DrvLock(CDrv *dv); public extern Bool DrvLock(CDrv *dv);
public extern CDrv *DrvMakeFree(U8 drv_let); public extern CDrv *DrvMakeFreeSlot(U8 drv_let);
public extern U8 *DrvModelNum(U8 drv_let=0); public extern U8 *DrvModelNum(U8 drv_let=0);
public extern CDrv *DrvNextFree(U8 first_drv_let='C'); public extern U8 DrvNextFreeLet(U8 first_drv_let='C');
public extern U8 *DrvSerialNum(U8 drv_let=0); public extern U8 *DrvSerialNum(U8 drv_let=0);
public extern U8 DrvTextAttrGet(U8 drv_let=0); public extern U8 DrvTextAttrGet(U8 drv_let=0);
public extern Bool DrvUnlock(CDrv *dv,Bool rst=FALSE); public extern Bool DrvUnlock(CDrv *dv,Bool rst=FALSE);
@@ -394,6 +393,7 @@ extern U0 (*fp_set_std_palette)();
public extern U8 *Color2Str(U8 *buf,CColorROPU32 c); public extern U8 *Color2Str(U8 *buf,CColorROPU32 c);
public extern CColorROPU16 Str2ColorU16(U8 *st); public extern CColorROPU16 Str2ColorU16(U8 *st);
public extern CColorROPU32 Str2ColorU32(U8 *st); public extern CColorROPU32 Str2ColorU32(U8 *st);
#help_index "Hash" #help_index "Hash"
#help_file "::/Doc/Hash" #help_file "::/Doc/Hash"
public _extern _HASH_ADD U0 HashAdd(CHash *temph,CHashTable *table); public _extern _HASH_ADD U0 HashAdd(CHash *temph,CHashTable *table);
@@ -668,21 +668,21 @@ public extern U0 WinDerivedValsUpdate(CTask *task=NULL);
#help_file "::/Doc/TaskSrv" #help_file "::/Doc/TaskSrv"
#help_index "Task/Srv/Exe" #help_index "Task/Srv/Exe"
public extern I64 Adam(U8 *fmt,...);
public extern U0 AdamErr(U8 *fmt,...); public extern U0 AdamErr(U8 *fmt,...);
public extern U0 AdamLog(U8 *fmt,...); public extern U0 AdamLog(U8 *fmt,...);
public extern I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL); public extern I64 ExeCmdLine(CCmpCtrl *cc);
public extern I64 PopUpPrint(U8 *fmt,...);
public extern U0 SrvCmdDel(CSrvCmd *tempc); public extern U0 SrvCmdDel(CSrvCmd *tempc);
extern U0 SrvCmdLine(); extern U0 SrvCmdLine();
public extern I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL); public extern I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL);
public extern U0 SrvTaskCont(); public extern U0 SrvTaskCont();
public extern CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags); public extern CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags);
public extern U0 TaskRstAwaitingMsg(CTask *task=NULL); public extern U0 TaskRstAwaitingMsg(CTask *task=NULL);
public extern U0 UserTaskCont();
#help_index "Task/Srv/Exe;Compiler" #help_index "Task/Srv/Exe;Compiler"
public extern I64 ExeCmdLine(CCmpCtrl *cc); public extern I64 Adam(U8 *fmt,...);
public extern U0 UserTaskCont(); public extern I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL);
public extern I64 PopUpPrint(U8 *fmt,...);
#help_index "Task/Srv/Exe;MultiCore" #help_index "Task/Srv/Exe;MultiCore"
public extern I64 JobResGet(CSrvCmd *rqst=NULL); public extern I64 JobResGet(CSrvCmd *rqst=NULL);
+1 -1
View File
@@ -181,7 +181,7 @@ I64 BIOSTotalMem()
I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024) I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024)
{//Helps pick DiskCache and RAMDisk sizes. {//Helps pick DiskCache and RAMDisk sizes.
//Can be used in $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() config scripts. //Can be used in $LK,"BootHDIns",A="MN:BootHDIns"$() config scripts.
I64 i; I64 i;
if (sys_data_bp) if (sys_data_bp)
i=sys_data_bp->alloced_u8s; i=sys_data_bp->alloced_u8s;
+5 -5
View File
@@ -375,7 +375,7 @@ sch_done:
} }
I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL) I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL)
{//Execute code text in PopUp win task. {//Execute code in $LK,"PopUp",A="MN:PopUp"$ task.
I64 res; I64 res;
CSrvCmd *tempc; CSrvCmd *tempc;
CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent); CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent);
@@ -396,7 +396,7 @@ I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL)
} }
I64 PopUpPrint(U8 *fmt,...) I64 PopUpPrint(U8 *fmt,...)
{//Execute code text in PopUp win task. {//Execute code in $LK,"PopUp",A="MN:PopUp"$ task.
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
I64 res; I64 res;
res=PopUp(buf,Fs); res=PopUp(buf,Fs);
@@ -405,7 +405,7 @@ I64 PopUpPrint(U8 *fmt,...)
} }
I64 Adam(U8 *fmt,...) I64 Adam(U8 *fmt,...)
{//Sends text to the adam task which gets compiled and run. {//Make adam_task execute code.
I64 res; I64 res;
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
CSrvCmd *tempc; CSrvCmd *tempc;
@@ -422,7 +422,7 @@ I64 Adam(U8 *fmt,...)
} }
U0 AdamLog(U8 *fmt,...) U0 AdamLog(U8 *fmt,...)
{//Sends text to the adam task which gets displayed. {//Display text in adam_task.
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
if (Fs==adam_task) if (Fs==adam_task)
"%s",buf; "%s",buf;
@@ -432,7 +432,7 @@ U0 AdamLog(U8 *fmt,...)
} }
U0 AdamErr(U8 *fmt,...) U0 AdamErr(U8 *fmt,...)
{//Sends text to the adam task which gets displayed as red and blinking. {//Display red blinking Err text in adam_task.
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv), U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),
*st=MStrPrint(ST_ERR_ST "%s",buf); *st=MStrPrint(ST_ERR_ST "%s",buf);
if (Fs==adam_task) if (Fs==adam_task)
+2 -21
View File
@@ -1,16 +1,3 @@
#define SPF_PAD_ZERO 0x001
#define SPF_LEFT_JUSTIFY 0x002
#define SPF_TRUNCATE 0x004
#define SPF_COMMA 0x008
#define SPF_DOLLAR 0x010
#define SPF_SLASH 0x020
#define SPF_QUESTION 0x040
#define SPF_AUX_FMT_NUM 0x080
#define SPF_DECIMAL 0x100
#define SPF_NEG 0x200
#define SPF_NEG_E 0x400
#define SPF_NEG_AUX_FMT_NUM 0x800
U0 SPutChar(U8 **_dst,U8 ch,U8 **_buf) U0 SPutChar(U8 **_dst,U8 ch,U8 **_buf)
{ {
I64 i; I64 i;
@@ -425,19 +412,13 @@ to avoid this.
case 'p': case 'p':
if (cur_arg>=argc) if (cur_arg>=argc)
throw('StrPrint'); throw('StrPrint');
if (flags&SPF_TRUNCATE) StrPrintFunSeg(temp_buf,argv[cur_arg++],len,flags);
StrPrintFunSeg(temp_buf,argv[cur_arg++],len);
else
StrPrintFunSeg(temp_buf,argv[cur_arg++],0);
OutStr(temp_buf,_buf,_dst,len,flags); OutStr(temp_buf,_buf,_dst,len,flags);
break; break;
case 'P': case 'P':
if (cur_arg>=argc) if (cur_arg>=argc)
throw('StrPrint'); throw('StrPrint');
if (flags&SPF_TRUNCATE) StrPrintFunSeg(temp_buf,argv[cur_arg],len,flags);
StrPrintFunSeg(temp_buf,argv[cur_arg],len);
else
StrPrintFunSeg(temp_buf,argv[cur_arg],0);
if (!IsRaw || !_buf) { if (!IsRaw || !_buf) {
StrPrint(temp_buf2,"$$LK,\"%s\",A=\"AD:0x%X\"$$", StrPrint(temp_buf2,"$$LK,\"%s\",A=\"AD:0x%X\"$$",
temp_buf,argv[cur_arg]); temp_buf,argv[cur_arg]);
+5 -3
View File
@@ -2,9 +2,10 @@
#define STD_DISTRO_DVD_CFG "Tb\nScale2Mem(2048,0x40000)\nt \n\n\n\n" #define STD_DISTRO_DVD_CFG "Tb\nScale2Mem(2048,0x40000)\nt \n\n\n\n"
U0 MakeMyISO(U8 *out_iso_filename) U0 MakeMyISO(U8 *_out_iso_filename)
{//Does everything with current drive. {//Does everything with current drive.
//If you have not recompiled $FG,2$Kernel$FG$ and defined your CD/DVD drive, use $LK,"Mount",A="MN:Mount"$. //If you have not recompiled $FG,2$Kernel$FG$ and defined your CD/DVD drive, use $LK,"Mount",A="MN:Mount"$.
U8 *out_iso_filename=FileNameAbs(_out_iso_filename);
if (!DrvIsWritable) { if (!DrvIsWritable) {
"Drive must be writable. Install on Hard drive, first.\n"; "Drive must be writable. Install on Hard drive, first.\n";
return; return;
@@ -14,7 +15,7 @@ U0 MakeMyISO(U8 *out_iso_filename)
MkDir("/Distro"); MkDir("/Distro");
Auto(STD_DISTRO_DVD_CFG); Auto(STD_DISTRO_DVD_CFG);
MakeOSDrvBootInstall(,'T'); BootDVDIns;
Copy("/*","/Distro"); Copy("/*","/Distro");
Del("/Distro/" KERNEL_BIN_C); Del("/Distro/" KERNEL_BIN_C);
@@ -43,8 +44,9 @@ U0 MakeMyISO(U8 *out_iso_filename)
//DVDImageWrite('T',out_iso_filename,MT_DVD); //Uncomment to burn. //DVDImageWrite('T',out_iso_filename,MT_DVD); //Uncomment to burn.
//DelTree("/Distro"); //DelTree("/Distro");
Free(out_iso_filename);
} }
MakeMyISO("/MyDistro.ISO"); MakeMyISO("/Temp/MyDistro.ISO");
// Study my account examples $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$. // Study my account examples $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$.
+5 -5
View File
@@ -31,7 +31,7 @@ U0 VMInstallDrv(CTask *task,U8 drv_let,
CATARep *ata_drv,CATARep *atapi_drv) CATARep *ata_drv,CATARep *atapi_drv)
{ {
InstallDrv(drv_let); InstallDrv(drv_let);
XTalkWait(task,"MakeOSDrvBootInstall('%C');\n\nB\n0x20000\n",drv_let); XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n",drv_let);
if (ata_drv) if (ata_drv)
XTalkWait(task,"Cp%d\n",ata_drv->num); XTalkWait(task,"Cp%d\n",ata_drv->num);
if (atapi_drv) if (atapi_drv)
@@ -62,7 +62,7 @@ U0 VMInstallWiz()
if (VMPrtDsk(task,ata_drv)) { if (VMPrtDsk(task,ata_drv)) {
VMInstallDrv(task,'C',ata_drv,atapi_drv); VMInstallDrv(task,'C',ata_drv,atapi_drv);
VMInstallDrv(task,'D',ata_drv,atapi_drv); VMInstallDrv(task,'D',ata_drv,atapi_drv);
MasterBootInstall('C'); BootMHDIns('C');
} }
LinkedLstDel(root); LinkedLstDel(root);
WinVert(task->win_top,Fs->win_bottom); WinVert(task->win_top,Fs->win_bottom);
@@ -147,13 +147,13 @@ U0 RegularInstallWiz()
Fmt(drv_let,,FALSE,FSt_REDSEA); Fmt(drv_let,,FALSE,FSt_REDSEA);
} }
InstallDrv(drv_let); InstallDrv(drv_let);
XTalkWait(task,"MakeOSDrvBootInstall('%C');\n\nB\n0x20000\n" XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n"
"Cs%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options "Cs%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options
drv_let,base0,base1,'0'+unit); drv_let,base0,base1,'0'+unit);
"$$RED$$Install Master Boot loader?$$FG$$"; "$$RED$$Install Master Boot loader?$$FG$$";
if (YorN) { if (YorN) {
'\n'; '\n';
MasterBootInstall(drv_let); BootMHDIns(drv_let);
} }
Free(base0); Free(base0);
Free(base1); Free(base1);
@@ -189,7 +189,7 @@ Bool DoInstall(Bool pmt_reboot)
res=TRUE; res=TRUE;
} else { } else {
"\n\nThis wizard works if you have a partition ready. " "\n\nThis wizard works if you have a partition ready. "
"You can partition the drive or MakeOSDrvBootInstall() " "You can partition the drive or BootHDIns() "
"with more options if you do it by hand, not using this wizard.\n\n" "with more options if you do it by hand, not using this wizard.\n\n"
"Continue Install Wizard "; "Continue Install Wizard ";
if (YorN) { if (YorN) {
+2 -2
View File
@@ -13,10 +13,10 @@ TourPut(
"We will now place some text on the command line and jump to source code.\n", "We will now place some text on the command line and jump to source code.\n",
TRUE); TRUE);
"MakeOS"; "BootHD";
TourPut( TourPut(
"Look at the $$GREEN$$MakeOSDrvBootInstall$$FG$$ entry in the AutoComplete " "Look at the $$GREEN$$BootHDIns$$FG$$ entry in the AutoComplete "
"window. Notice it is underlined. This means a source code link is " "window. Notice it is underlined. This means a source code link is "
"available.\n\n" "available.\n\n"
"Press $$GREEN$$<CTRL-SHIFT-F1>$$FG$$ to jump to source code.\n"); "Press $$GREEN$$<CTRL-SHIFT-F1>$$FG$$ to jump to source code.\n");
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -17,7 +17,7 @@ HashTablePurge(adam_task->hash_table);
#help_index "Misc" #help_index "Misc"
//Use Dbg("Type 'G;'"); to debug before window mgr is running. //Use Dbg("Type 'G;'"); to debug before window mgr is running.
public F64 os_version=4.080;//Operating system version. public F64 os_version=4.090;//Operating system version.
#include "/Adam/MakeAdam" #include "/Adam/MakeAdam"