TempleOSCDV4.06.ISO
This commit is contained in:
1 parent
6fe38d2d9d
commit
b632ab9a4f
261 files changed
+6282
-5801
No files matched your search
+30
-30
@@ -64,7 +64,7 @@ U0 ATACmd(CBlkDev *bd,U8 cmd)
|
||||
PortNop;
|
||||
}
|
||||
|
||||
Bool ATAGetResult(CBlkDev *bd,F64 timeout,U8 *buf,I64 cnt,
|
||||
Bool ATAGetRes(CBlkDev *bd,F64 timeout,U8 *buf,I64 cnt,
|
||||
I64 _avail,Bool one_read)
|
||||
{
|
||||
I64 avail,overflow;
|
||||
@@ -176,7 +176,7 @@ I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record)
|
||||
if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR)
|
||||
return BDT_ATAPI;
|
||||
id_record=ACAlloc(512);
|
||||
if (!ATAGetResult(bd,timeout,id_record,512,512,FALSE)) {
|
||||
if (!ATAGetRes(bd,timeout,id_record,512,512,FALSE)) {
|
||||
Free(id_record);
|
||||
return BDT_NULL;
|
||||
}
|
||||
@@ -186,7 +186,7 @@ I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record)
|
||||
|
||||
I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout)
|
||||
{//Returns zero on err
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
Bool okay=TRUE;
|
||||
|
||||
if (bd->type==BDT_ATAPI) {
|
||||
@@ -220,18 +220,18 @@ I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout)
|
||||
OutU8(bd->base0+ATAR0_SELECT,0xEF|bd->unit<<4);
|
||||
ATACmd(bd,ATA_READ_NATIVE_MAX_EXT);
|
||||
if (ATAWaitNotBUSY(bd,timeout)) {
|
||||
result.u8[0]=InU8(bd->base0+ATAR0_SECT);
|
||||
result.u8[1]=InU8(bd->base0+ATAR0_LCYL);
|
||||
result.u8[2]=InU8(bd->base0+ATAR0_HCYL);
|
||||
res.u8[0]=InU8(bd->base0+ATAR0_SECT);
|
||||
res.u8[1]=InU8(bd->base0+ATAR0_LCYL);
|
||||
res.u8[2]=InU8(bd->base0+ATAR0_HCYL);
|
||||
|
||||
OutU8(bd->base1+ATAR1_CTRL,0x80);
|
||||
result.u8[3]=InU8(bd->base0+ATAR0_SECT);
|
||||
result.u8[4]=InU8(bd->base0+ATAR0_LCYL);
|
||||
result.u8[5]=InU8(bd->base0+ATAR0_HCYL);
|
||||
res.u8[3]=InU8(bd->base0+ATAR0_SECT);
|
||||
res.u8[4]=InU8(bd->base0+ATAR0_LCYL);
|
||||
res.u8[5]=InU8(bd->base0+ATAR0_HCYL);
|
||||
|
||||
if (result>>24==result&0xFFFFFF) {//Kludge to make qemu-kvm work
|
||||
if (res>>24==res&0xFFFFFF) {//Kludge to make qemu-kvm work
|
||||
bd->flags&=~BDF_EXT_SIZE;
|
||||
result&=0xFFFFFF;
|
||||
res&=0xFFFFFF;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -240,18 +240,18 @@ I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout)
|
||||
OutU8(bd->base0+ATAR0_SELECT,0xE0|bd->unit<<4);
|
||||
ATACmd(bd,ATA_READ_NATIVE_MAX);
|
||||
if (ATAWaitNotBUSY(bd,timeout)) {
|
||||
result.u8[0]=InU8(bd->base0+ATAR0_SECT);
|
||||
result.u8[1]=InU8(bd->base0+ATAR0_LCYL);
|
||||
result.u8[2]=InU8(bd->base0+ATAR0_HCYL);
|
||||
result.u8[3]=InU8(bd->base0+ATAR0_SELECT) & 0xF;
|
||||
res.u8[0]=InU8(bd->base0+ATAR0_SECT);
|
||||
res.u8[1]=InU8(bd->base0+ATAR0_LCYL);
|
||||
res.u8[2]=InU8(bd->base0+ATAR0_HCYL);
|
||||
res.u8[3]=InU8(bd->base0+ATAR0_SELECT) & 0xF;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bd->max_blk=result;
|
||||
return bd->max_blk=res;
|
||||
}
|
||||
|
||||
I64 ATAPIReadCapacity(CBlkDev *bd,I64 *_blk_size=NULL)
|
||||
{//Supposedly this can return a result +/- 75 sects.
|
||||
{//Supposedly this can return a res +/- 75 sects.
|
||||
//Error might just be for music.
|
||||
Bool unlock=BlkDevLock(bd);
|
||||
U32 buf[2];
|
||||
@@ -264,7 +264,7 @@ I64 ATAPIReadCapacity(CBlkDev *bd,I64 *_blk_size=NULL)
|
||||
OutU8(bd->base0+ATAR0_HCYL,0);
|
||||
ATACmd(bd,ATA_PACKET);
|
||||
ATAPIWritePktWord(bd,0,0x2500,0,0,0,0,0);
|
||||
if (!ATAGetResult(bd,0,buf,8,0,TRUE))
|
||||
if (!ATAGetRes(bd,0,buf,8,0,TRUE))
|
||||
buf[0]=buf[1]=0;
|
||||
} else
|
||||
buf[0]=buf[1]=0;
|
||||
@@ -276,7 +276,7 @@ I64 ATAPIReadCapacity(CBlkDev *bd,I64 *_blk_size=NULL)
|
||||
|
||||
CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bd,I64 blk)
|
||||
{
|
||||
CATAPITrack *result=CAlloc(sizeof(CATAPITrack));
|
||||
CATAPITrack *res=CAlloc(sizeof(CATAPITrack));
|
||||
Bool unlock=BlkDevLock(bd);
|
||||
if (ATAWaitNotBUSY(bd,0)) {
|
||||
if (bd->flags & BDF_EXT_SIZE)
|
||||
@@ -288,16 +288,16 @@ CATAPITrack *ATAPIReadTrackInfo(CBlkDev *bd,I64 blk)
|
||||
ATACmd(bd,ATA_PACKET);
|
||||
ATAPIWritePktWord(bd,0,0x5200,blk.u16[1],blk.u16[0],
|
||||
(sizeof(CATAPITrack)&0xFF00)>>8,(sizeof(CATAPITrack)&0x00FF)<<8,0);
|
||||
if (!ATAGetResult(bd,0,result,sizeof(CATAPITrack),0,TRUE)) {
|
||||
Free(result);
|
||||
result=NULL;
|
||||
if (!ATAGetRes(bd,0,res,sizeof(CATAPITrack),0,TRUE)) {
|
||||
Free(res);
|
||||
res=NULL;
|
||||
}
|
||||
} else {
|
||||
Free(result);
|
||||
result=NULL;
|
||||
Free(res);
|
||||
res=NULL;
|
||||
}
|
||||
if (unlock) BlkDevUnlock(bd);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool ATAInit(CBlkDev *bd)
|
||||
@@ -358,7 +358,7 @@ U0 ATAReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt)
|
||||
ATACmd(bd,ATA_READ_MULTI_EXT);
|
||||
else
|
||||
ATACmd(bd,ATA_READ_MULTI);
|
||||
if (!ATAGetResult(bd,tS+1.0,buf,cnt*bd->blk_size,BLK_SIZE,FALSE)) {
|
||||
if (!ATAGetRes(bd,tS+1.0,buf,cnt*bd->blk_size,BLK_SIZE,FALSE)) {
|
||||
if (retries--) {
|
||||
ATAWaitNotBUSY(bd,0);
|
||||
goto retry;
|
||||
@@ -385,7 +385,7 @@ I64 ATAProbe(I64 base0,I64 base1,I64 unit)
|
||||
Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf,
|
||||
I64 native_blk, I64 cnt,Bool lock)
|
||||
{
|
||||
Bool result=FALSE,unlock;
|
||||
Bool res=FALSE,unlock;
|
||||
if (cnt<=0)
|
||||
return FALSE;
|
||||
if (lock)
|
||||
@@ -400,14 +400,14 @@ Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf,
|
||||
ATACmd(bd,ATA_PACKET);
|
||||
if (ATAPIWritePktWord(bd,timeout,0xA800,
|
||||
native_blk.u16[1],native_blk,cnt.u16[1],cnt,0) &&
|
||||
ATAGetResult(bd,timeout,buf,cnt*bd->blk_size,0,FALSE)) {
|
||||
ATAGetRes(bd,timeout,buf,cnt*bd->blk_size,0,FALSE)) {
|
||||
blkdev.read_cnt+=(cnt*bd->blk_size)>>BLK_SIZE_BITS;
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
}
|
||||
}
|
||||
// ATAPIStartStop(bd,0,FALSE);
|
||||
if (lock && unlock) BlkDevUnlock(bd);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 ATAPIReadBlks(CBlkDev *bd,U8 *buf, I64 blk, I64 cnt)
|
||||
|
||||
+22
-22
@@ -2,7 +2,7 @@ Bool BootDVDProve(CBlkDev *bd)
|
||||
{
|
||||
CKernel *img=CAlloc(DVD_BLK_SIZE);
|
||||
I64 i;
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
"Port: %04X,%04X Unit: %02X ",bd->base0,bd->base1,bd->unit;
|
||||
if (ATAProbe(bd->base0,bd->base1,bd->unit)==BDT_ATAPI) {
|
||||
" ATAPI";
|
||||
@@ -22,7 +22,7 @@ Bool BootDVDProve(CBlkDev *bd)
|
||||
}
|
||||
" Nope\n";
|
||||
Free(img);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool BootDVDProbeAll(CBlkDev *bd)
|
||||
@@ -204,21 +204,21 @@ CATARep *ATARepFind(CATARep *haystack_root,I64 needle_num)
|
||||
CATARep *ATAIDDrvs(CATARep *root,I64 _sys_boot_drv,
|
||||
CATARep **_ata_drv,CATARep **_atapi_drv)
|
||||
{//This is for when trying to sort-out main hard drives and CD/DVD drives.
|
||||
CATARep *result=NULL,*tempha=root,*ata_drv=NULL,*atapi_drv=NULL;
|
||||
CATARep *res=NULL,*tempha=root,*ata_drv=NULL,*atapi_drv=NULL;
|
||||
CBlkDev *bd;
|
||||
Bool was_silent=Silent;
|
||||
bd=Let2BlkDev(_sys_boot_drv,FALSE);
|
||||
Silent(was_silent);
|
||||
while (tempha) {
|
||||
if (!result && bd && bd->type==tempha->type) {
|
||||
if (!res && bd && bd->type==tempha->type) {
|
||||
if (bd->type==BDT_ATAPI &&
|
||||
bd->base0==tempha->base0 && bd->unit==tempha->unit)
|
||||
result=atapi_drv=tempha;
|
||||
res=atapi_drv=tempha;
|
||||
else if (bd->type==BDT_ATA && bd->base0==tempha->base0 &&
|
||||
bd->base1==tempha->base1 && bd->unit==tempha->unit)
|
||||
result=ata_drv=tempha;
|
||||
res=ata_drv=tempha;
|
||||
}
|
||||
if (!result || result->type!=tempha->type) {
|
||||
if (!res || res->type!=tempha->type) {
|
||||
if (tempha->type==BDT_ATA) {
|
||||
if (!ata_drv || tempha->unit<ata_drv->unit ||
|
||||
tempha->unit==ata_drv->unit && tempha->num<ata_drv->num)
|
||||
@@ -233,20 +233,20 @@ CATARep *ATAIDDrvs(CATARep *root,I64 _sys_boot_drv,
|
||||
}
|
||||
if (_ata_drv) *_ata_drv =ata_drv;
|
||||
if (_atapi_drv) *_atapi_drv=atapi_drv;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit)
|
||||
{
|
||||
CBlkDev *result;
|
||||
CBlkDev *res;
|
||||
if (0<=first_drv_let-'A'<NUM_DRVS && (type==BDT_ATA || type==BDT_ATAPI) &&
|
||||
0<=unit<=1) {
|
||||
result=BlkDevNextFree(first_drv_let,type);
|
||||
result->unit=unit;
|
||||
result->base0=base0;
|
||||
result->base1=base1;
|
||||
if (BlkDevAdd(result,FALSE,FALSE))
|
||||
return result;
|
||||
res=BlkDevNextFree(first_drv_let,type);
|
||||
res->unit=unit;
|
||||
res->base0=base0;
|
||||
res->base1=base1;
|
||||
if (BlkDevAdd(res,FALSE,FALSE))
|
||||
return res;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -255,30 +255,30 @@ I64 AutoMountIDE()
|
||||
{//Try to mount hard drive and CD/DVD, automatically. (Kernel.Cfg option).
|
||||
//It uses 'C' and 'T' as first drive letters or whatever you set
|
||||
//in config when compiling Kernel.BIN.
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL,*tempha;
|
||||
ATARep(FALSE,TRUE,&root);
|
||||
ATAIDDrvs(root,blkdev.boot_drv_let,&ata_drv,&atapi_drv);
|
||||
if (ata_drv && ATAMount(blkdev.first_hd_drv_let,BDT_ATA,
|
||||
ata_drv->base0,ata_drv->base1,ata_drv->unit))
|
||||
result++;
|
||||
res++;
|
||||
if (atapi_drv && ATAMount(blkdev.first_dvd_drv_let,BDT_ATAPI,
|
||||
atapi_drv->base0,atapi_drv->base1,atapi_drv->unit))
|
||||
result++;
|
||||
res++;
|
||||
tempha=root;
|
||||
while (tempha) {
|
||||
if (tempha!=ata_drv && tempha!=atapi_drv) {
|
||||
if (tempha->type==BDT_ATA && ATAMount(blkdev.first_hd_drv_let,BDT_ATA,
|
||||
tempha->base0,tempha->base1,tempha->unit))
|
||||
result++;
|
||||
res++;
|
||||
else if (tempha->type==BDT_ATAPI &&
|
||||
ATAMount(blkdev.first_dvd_drv_let,BDT_ATAPI,
|
||||
tempha->base0,tempha->base1,tempha->unit))
|
||||
result++;
|
||||
res++;
|
||||
}
|
||||
tempha=tempha->next;
|
||||
}
|
||||
LinkedLstDel(root);
|
||||
blkdev.auto_mount_ide_cnt=result;
|
||||
return result;
|
||||
blkdev.auto_mount_ide_cnt=res;
|
||||
return res;
|
||||
}
|
||||
+14
-14
@@ -22,16 +22,16 @@ U0 BlkDevLockFwdingSet(CBlkDev *bd)
|
||||
|
||||
I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
{
|
||||
I64 i,j,ext_base,offset,result=0;
|
||||
I64 i,j,ext_base,offset,res=0;
|
||||
CDrv *dv;
|
||||
CRedSeaBoot br;
|
||||
CMasterBoot mbr;
|
||||
|
||||
bd->bd_signature=BD_SIGNATURE_VAL;
|
||||
if (make_free)
|
||||
dv=DrvMakeFree(bd->first_drv_let+result);
|
||||
dv=DrvMakeFree(bd->first_drv_let+res);
|
||||
else
|
||||
dv=DrvNextFree(bd->first_drv_let+result);
|
||||
dv=DrvNextFree(bd->first_drv_let+res);
|
||||
dv->bd=bd;
|
||||
dv->size=bd->max_blk+1;
|
||||
switch (bd->type) {
|
||||
@@ -46,7 +46,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
//will be alloced on a just-in-time
|
||||
//basis.
|
||||
if (BlkDevInit(bd))
|
||||
result++;
|
||||
res++;
|
||||
else
|
||||
dv->dv_signature=0;
|
||||
break;
|
||||
@@ -58,7 +58,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
dv->dv_signature=0; //Revoke validation
|
||||
if (one_drv) {
|
||||
dv->dv_signature=DRV_SIGNATURE_VAL;
|
||||
result++;
|
||||
res++;
|
||||
dv->fs_type=FSt_REDSEA;
|
||||
dv->size=bd->max_blk+1;
|
||||
//The following read is a test read.
|
||||
@@ -76,16 +76,16 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
for (i=0;i<4;i++) {
|
||||
if (mbr.p[i].type) {
|
||||
if (make_free)
|
||||
dv=DrvMakeFree(bd->first_drv_let+result);
|
||||
dv=DrvMakeFree(bd->first_drv_let+res);
|
||||
else
|
||||
dv=DrvNextFree(bd->first_drv_let+result);
|
||||
dv=DrvNextFree(bd->first_drv_let+res);
|
||||
dv->bd=bd;
|
||||
dv->base_offset=mbr.p[i].offset+offset;
|
||||
dv->size =mbr.p[i].size;
|
||||
switch (mbr.p[i].type) {
|
||||
case MBR_PT_REDSEA:
|
||||
dv->dv_signature=DRV_SIGNATURE_VAL;
|
||||
result++;
|
||||
res++;
|
||||
dv->fs_type=FSt_REDSEA;
|
||||
RedSeaDrvInit(dv);
|
||||
break;
|
||||
@@ -97,7 +97,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
case MBR_PT_FAT32f:
|
||||
ATAReadBlks(bd,&br,dv->base_offset,1);
|
||||
dv->dv_signature=DRV_SIGNATURE_VAL;
|
||||
result++;
|
||||
res++;
|
||||
if (br.signature==MBR_PT_REDSEA) {
|
||||
dv->fs_type=FSt_REDSEA;
|
||||
RedSeaDrvInit(dv);
|
||||
@@ -108,7 +108,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
break;
|
||||
case MBR_PT_NTFS:
|
||||
dv->dv_signature=DRV_SIGNATURE_VAL;
|
||||
result++;
|
||||
res++;
|
||||
dv->fs_type=FSt_NTFS;
|
||||
break;
|
||||
case 5:
|
||||
@@ -117,7 +117,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
break;
|
||||
default:
|
||||
dv->dv_signature=DRV_SIGNATURE_VAL;
|
||||
result++;
|
||||
res++;
|
||||
dv->fs_type=FSt_UNKNOWN;
|
||||
}
|
||||
}
|
||||
@@ -136,16 +136,16 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free)
|
||||
break;
|
||||
case BDT_ATAPI:
|
||||
dv->dv_signature=DRV_SIGNATURE_VAL;
|
||||
result++;
|
||||
res++;
|
||||
dv->fs_type=FSt_ISO9660; //Start with this
|
||||
dv->size =0;
|
||||
break;
|
||||
}
|
||||
if (result)
|
||||
if (res)
|
||||
BlkDevLockFwdingSet(bd);
|
||||
else
|
||||
MemSet(bd,0,sizeof(CBlkDev));
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool DrvEnable(U8 drv_let,Bool val)
|
||||
|
||||
@@ -30,7 +30,7 @@ U0 WZeroBlks(CDrv *dv,I64 blk,I64 cnt)
|
||||
|
||||
Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
|
||||
{//Read blk cnt from Drv to buf.
|
||||
Bool result=TRUE,unlock;
|
||||
Bool res=TRUE,unlock;
|
||||
CBlkDev *bd=dv->bd;
|
||||
if (cnt<=0) return TRUE;
|
||||
DrvChk(dv);
|
||||
@@ -50,7 +50,7 @@ Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
|
||||
break;
|
||||
case BDT_ATA:
|
||||
case BDT_ATAPI:
|
||||
result=ATARBlks(dv,buf,blk,cnt);
|
||||
res=ATARBlks(dv,buf,blk,cnt);
|
||||
break;
|
||||
}
|
||||
bd->last_time=tS;
|
||||
@@ -62,12 +62,12 @@ Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
|
||||
} catch
|
||||
if (unlock)
|
||||
DrvUnlock(dv);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
|
||||
{//Write blk cnt from buf to Drv.
|
||||
Bool result=TRUE,unlock;
|
||||
Bool res=TRUE,unlock;
|
||||
CBlkDev *bd=dv->bd;
|
||||
if (cnt<=0) return TRUE;
|
||||
DrvChk(dv);
|
||||
@@ -86,7 +86,7 @@ Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
|
||||
break;
|
||||
case BDT_ATA:
|
||||
case BDT_ATAPI:
|
||||
result=ATAWBlks(dv,buf,blk,cnt);
|
||||
res=ATAWBlks(dv,buf,blk,cnt);
|
||||
break;
|
||||
}
|
||||
bd->last_time=tS;
|
||||
@@ -98,5 +98,5 @@ Bool WBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt)
|
||||
} catch
|
||||
if (unlock)
|
||||
DrvUnlock(dv);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+21
-21
@@ -31,7 +31,7 @@ Bool BlkDevUnlock(CBlkDev *bd,Bool rst=FALSE)
|
||||
Bool BlkDevInit(CBlkDev *bd)
|
||||
{
|
||||
CDrv *dv=Let2Drv(bd->first_drv_let);
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
if (!LBts(&bd->flags,BDf_INITIALIZED)) {
|
||||
bd->flags|=BDF_INIT_IN_PROGRESS;
|
||||
switch (bd->type) {
|
||||
@@ -46,12 +46,12 @@ Bool BlkDevInit(CBlkDev *bd)
|
||||
RedSeaDrvInit(dv);
|
||||
else
|
||||
RedSeaFmt(bd->first_drv_let);
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
break;
|
||||
case BDT_ATA:
|
||||
bd->max_reads=128;
|
||||
bd->max_writes=1;
|
||||
result=ATAInit(bd);
|
||||
res=ATAInit(bd);
|
||||
break;
|
||||
case BDT_ATAPI:
|
||||
//0xFFFF*4 is too big for my taste
|
||||
@@ -62,16 +62,16 @@ Bool BlkDevInit(CBlkDev *bd)
|
||||
if (bd->max_reads<128)
|
||||
bd->max_reads=128;
|
||||
bd->max_writes=0xFFFF*4;
|
||||
if (result=ATAInit(bd))
|
||||
if (res=ATAInit(bd))
|
||||
dv->size=bd->max_blk+1;
|
||||
break;
|
||||
}
|
||||
if (result && bd->flags & BDF_READ_CACHE)
|
||||
if (res && bd->flags & BDF_READ_CACHE)
|
||||
DskCacheInvalidate(dv);
|
||||
bd->flags&=~BDF_INIT_IN_PROGRESS;
|
||||
} else
|
||||
result=TRUE;
|
||||
return result;
|
||||
res=TRUE;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 BlkDevsRelease()
|
||||
@@ -88,28 +88,28 @@ U0 BlkDevsRelease()
|
||||
CBlkDev *BlkDevNextFree(U8 first_drv_let,I64 type)
|
||||
{//Locate free slot for new BlkDev, like during $LK,"Mount",A="MN:Mount"$().
|
||||
I64 i=0;
|
||||
CBlkDev *result;
|
||||
CBlkDev *res;
|
||||
do {
|
||||
result=&blkdev.blkdevs[i];
|
||||
if (result->bd_signature!=BD_SIGNATURE_VAL) {
|
||||
MemSet(result,0,sizeof(CBlkDev));
|
||||
result->first_drv_let=first_drv_let;
|
||||
result->type=type;
|
||||
res=&blkdev.blkdevs[i];
|
||||
if (res->bd_signature!=BD_SIGNATURE_VAL) {
|
||||
MemSet(res,0,sizeof(CBlkDev));
|
||||
res->first_drv_let=first_drv_let;
|
||||
res->type=type;
|
||||
if (type==BDT_ATAPI)
|
||||
result->flags=BDF_REMOVABLE;
|
||||
res->flags=BDF_REMOVABLE;
|
||||
else
|
||||
result->flags=0;
|
||||
res->flags=0;
|
||||
if (type!=BDT_RAM)
|
||||
result->flags|=BDF_READ_CACHE;
|
||||
res->flags|=BDF_READ_CACHE;
|
||||
|
||||
if (type==BDT_ATAPI) {
|
||||
result->blk_size=DVD_BLK_SIZE;
|
||||
result->flags|=BDF_READ_ONLY;
|
||||
res->blk_size=DVD_BLK_SIZE;
|
||||
res->flags|=BDF_READ_ONLY;
|
||||
} else
|
||||
result->blk_size=BLK_SIZE;
|
||||
res->blk_size=BLK_SIZE;
|
||||
|
||||
result->max_blk=0xEFFFFFFF;
|
||||
return result;
|
||||
res->max_blk=0xEFFFFFFF;
|
||||
return res;
|
||||
}
|
||||
} while (++i<NUM_BLKDEVS);
|
||||
throw('BlkDev');
|
||||
|
||||
@@ -82,16 +82,16 @@ Bool CopySingle(U8 *f1,U8 *f2) //Just one file
|
||||
I64 Del(U8 *files_find_mask,Bool make_mask=FALSE,
|
||||
Bool del_dir=FALSE,Bool print_msg=TRUE)
|
||||
{//Delete files.
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
CDirContext *dirc;
|
||||
if (dirc=DirContextNew(files_find_mask,make_mask)) {
|
||||
switch (dirc->dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaFilesDel(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=RedSeaFilesDel(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
0,del_dir,print_msg);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32FilesDel(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=FAT32FilesDel(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
0,del_dir,print_msg);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
@@ -102,5 +102,5 @@ I64 Del(U8 *files_find_mask,Bool make_mask=FALSE,
|
||||
}
|
||||
DirContextDel(dirc);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
@@ -133,7 +133,7 @@ U0 DirFilesSort(CDirEntry **_tempde,I64 key)
|
||||
}
|
||||
}
|
||||
|
||||
CDirEntry *DirFilesFlatten(CDirEntry *tempde,CDirEntry **_result,I64 fuf_flags)
|
||||
CDirEntry *DirFilesFlatten(CDirEntry *tempde,CDirEntry **_res,I64 fuf_flags)
|
||||
{//Returns last node
|
||||
CDirEntry *tempde1;
|
||||
Bool del;
|
||||
@@ -141,12 +141,12 @@ CDirEntry *DirFilesFlatten(CDirEntry *tempde,CDirEntry **_result,I64 fuf_flags)
|
||||
while (TRUE) {
|
||||
tempde1=tempde->next;
|
||||
if (!(tempde->attr&RS_ATTR_DIR)||!(fuf_flags&FUF_JUST_FILES)) {
|
||||
_result=*_result=tempde;
|
||||
_res=*_res=tempde;
|
||||
del=FALSE;
|
||||
} else
|
||||
del=TRUE;
|
||||
if (tempde->sub) {
|
||||
_result=DirFilesFlatten(tempde->sub,_result,fuf_flags);
|
||||
_res=DirFilesFlatten(tempde->sub,_res,fuf_flags);
|
||||
tempde->sub=NULL;
|
||||
}
|
||||
if (del)
|
||||
@@ -156,8 +156,8 @@ CDirEntry *DirFilesFlatten(CDirEntry *tempde,CDirEntry **_result,I64 fuf_flags)
|
||||
else
|
||||
break;
|
||||
}
|
||||
*_result=NULL;
|
||||
return _result;
|
||||
*_res=NULL;
|
||||
return _res;
|
||||
}
|
||||
|
||||
U0 PutFileLink(U8 *filename,I64 line=0,Bool plain_text=FALSE)
|
||||
|
||||
+21
-21
@@ -3,7 +3,7 @@ Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE)
|
||||
I64 maxlen,cur_dir_cluster=0;
|
||||
U8 *chg_to_buf,*new_cur_dir,*buf;
|
||||
CDrv *dv;
|
||||
Bool result=TRUE;
|
||||
Bool res=TRUE;
|
||||
if (!dirname)
|
||||
dirname="::/Home";
|
||||
else if (!*dirname)
|
||||
@@ -28,7 +28,7 @@ Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE)
|
||||
new_cur_dir=MAlloc(maxlen);
|
||||
buf=MAlloc(maxlen);
|
||||
StrCpy(new_cur_dir,Fs->cur_dir);
|
||||
while (*chg_to_buf && result) {
|
||||
while (*chg_to_buf && res) {
|
||||
StrFirstRem(chg_to_buf,"/",buf);
|
||||
if (!*buf)
|
||||
StrCpy(new_cur_dir,"/");
|
||||
@@ -41,24 +41,24 @@ Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE)
|
||||
cur_dir_cluster=Name2DirCluster(dv,new_cur_dir);
|
||||
switch (dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaCd(buf,cur_dir_cluster);
|
||||
res=RedSeaCd(buf,cur_dir_cluster);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32Cd(buf,cur_dir_cluster);
|
||||
res=FAT32Cd(buf,cur_dir_cluster);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
result=ISO1Cd(buf,cur_dir_cluster);
|
||||
res=ISO1Cd(buf,cur_dir_cluster);
|
||||
break;
|
||||
default:
|
||||
PrintErr("File System Not Supported\n");
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
}
|
||||
if (!result && make_dirs) {
|
||||
if (!res && make_dirs) {
|
||||
Free(Fs->cur_dir);
|
||||
Fs->cur_dir=StrNew(new_cur_dir);
|
||||
result=MkDir(buf);
|
||||
res=MkDir(buf);
|
||||
}
|
||||
if (result) {
|
||||
if (res) {
|
||||
if (StrCmp(new_cur_dir,"/"))
|
||||
CatPrint(new_cur_dir,"/");
|
||||
CatPrint(new_cur_dir,buf);
|
||||
@@ -70,22 +70,22 @@ Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE)
|
||||
Free(buf);
|
||||
Free(chg_to_buf);
|
||||
Free(new_cur_dir);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool IsDir(U8 *dir_name)
|
||||
{//Is a str a valid, existing Dir?
|
||||
U8 *mask=MStrPrint("%s/*",dir_name);
|
||||
Bool result,old_silent=Silent;
|
||||
Bool res,old_silent=Silent;
|
||||
CDirContext *dirc;
|
||||
if (dirc=DirContextNew(mask)) {
|
||||
DirContextDel(dirc);
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
} else
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
Free(mask);
|
||||
Silent(old_silent);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 Dir(U8 *files_find_mask,Bool full)
|
||||
@@ -93,7 +93,7 @@ I64 Dir(U8 *files_find_mask,Bool full)
|
||||
CDirEntry *tempde1=NULL,*tempde2;
|
||||
U8 *st;
|
||||
CDateStruct ds;
|
||||
I64 csize=0xFFFF,c=0xFFFF,result=0;
|
||||
I64 csize=0xFFFF,c=0xFFFF,res=0;
|
||||
tempde1=FilesFind(files_find_mask);
|
||||
if (!(st=CurDir))
|
||||
PrintErr("Invalid Drive\n");
|
||||
@@ -119,7 +119,7 @@ I64 Dir(U8 *files_find_mask,Bool full)
|
||||
"DATE_ TIME_ %*ts\n",csize,"SIZE";
|
||||
while (tempde1) {
|
||||
tempde2=tempde1->next;
|
||||
result++;
|
||||
res++;
|
||||
if (full)
|
||||
"%D %T %0*tX %0*tX ",tempde1->datetime,tempde1->datetime,
|
||||
csize,tempde1->size,c,tempde1->cluster;
|
||||
@@ -140,14 +140,14 @@ I64 Dir(U8 *files_find_mask,Bool full)
|
||||
"No matching entries\n";
|
||||
Free(st);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool MkDir(U8 *filename)
|
||||
{//Make directory. $LK,"Cd",A="MN:Cd"$() can also make directories.
|
||||
U8 *name;
|
||||
CDirContext *dirc;
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
if (FileFind(filename,,FUF_JUST_DIRS))
|
||||
return FALSE;
|
||||
if (dirc=DirContextNew(filename)) {
|
||||
@@ -160,10 +160,10 @@ Bool MkDir(U8 *filename)
|
||||
SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);
|
||||
switch (dirc->dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaMkDir(dirc->dv,Fs->cur_dir,name);
|
||||
res=RedSeaMkDir(dirc->dv,Fs->cur_dir,name);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32MkDir(dirc->dv,Fs->cur_dir,name);
|
||||
res=FAT32MkDir(dirc->dv,Fs->cur_dir,name);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
PrintErr("Not Writable\n");
|
||||
@@ -176,5 +176,5 @@ Bool MkDir(U8 *filename)
|
||||
}
|
||||
DirContextDel(dirc);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+14
-14
@@ -37,20 +37,20 @@ U0 DrvsRelease()
|
||||
|
||||
CDrv *DrvMakeFree(U8 drv_let)
|
||||
{//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$().
|
||||
//!!! drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv.
|
||||
//!!! drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv.
|
||||
I64 i=ToUpper(drv_let)-'A';
|
||||
CDrv *result;
|
||||
CDrv *res;
|
||||
if (!(0<=i<NUM_DRVS))
|
||||
throw('Drv');
|
||||
result=&blkdev.drvs[i];
|
||||
MemSet(result,0,sizeof(CDrv));
|
||||
result->drv_let='A'+i;
|
||||
return result;
|
||||
res=&blkdev.drvs[i];
|
||||
MemSet(res,0,sizeof(CDrv));
|
||||
res->drv_let='A'+i;
|
||||
return res;
|
||||
}
|
||||
|
||||
CDrv *DrvNextFree(U8 first_drv_let='C')
|
||||
{//Locate free slot for new drv, like during $LK,"Mount",A="MN:Mount"$().
|
||||
//!!! first_drv_let is not a $LK,"remapped",A="MN:MapDrv"$ drv.
|
||||
//!!! first_drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv.
|
||||
I64 i=ToUpper(first_drv_let)-'A';
|
||||
if (!(0<=i<NUM_DRVS))
|
||||
throw('Drv');
|
||||
@@ -209,7 +209,7 @@ U0 ChgDsk(U8 drv_let=0)
|
||||
RedSeaFreeFreeLst(dv);
|
||||
}
|
||||
|
||||
Bool MapDrv(U8 drv_let,CDrv *dv)
|
||||
Bool DrvMap(U8 drv_let,CDrv *dv)
|
||||
{//Make drive letter map to another.
|
||||
drv_let=ToUpper(drv_let);
|
||||
if ('A'<=drv_let<='Z') {
|
||||
@@ -248,31 +248,31 @@ Bool Drv(U8 drv_let)
|
||||
U8 *DrvSerialNum(U8 drv_let=0)
|
||||
{//20 bytes max.
|
||||
CBlkDev *bd=Let2BlkDev(drv_let);
|
||||
U16 *st,*result=NULL;
|
||||
U16 *st,*res=NULL;
|
||||
I64 i;
|
||||
if (bd->dev_id_record) {
|
||||
st=CAlloc(20+1);
|
||||
for (i=0;i<10;i++)
|
||||
st[i]=EndianU16(bd->dev_id_record[10+i]);
|
||||
result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING);
|
||||
res=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING);
|
||||
Free(st);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *DrvModelNum(U8 drv_let=0)
|
||||
{//40 bytes max.
|
||||
CBlkDev *bd=Let2BlkDev(drv_let);
|
||||
U16 *st,*result=NULL;
|
||||
U16 *st,*res=NULL;
|
||||
I64 i;
|
||||
if (bd->dev_id_record) {
|
||||
st=CAlloc(40+1);
|
||||
for (i=0;i<20;i++)
|
||||
st[i]=EndianU16(bd->dev_id_record[27+i]);
|
||||
result=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING);
|
||||
res=MStrUtil(st,SUF_REM_LEADING|SUF_REM_TRAILING);
|
||||
Free(st);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 blkdev_text_attr[BDT_NUM_TYPES]={BLACK,LTCYAN,WHITE,LTBLUE};
|
||||
|
||||
+22
-22
@@ -1,7 +1,7 @@
|
||||
U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL)
|
||||
{//Read whole file from disk.
|
||||
CHashGeneric *temph;
|
||||
U8 *absname,*altname,*curname,*result=NULL;
|
||||
U8 *absname,*altname,*curname,*res=NULL;
|
||||
I64 i,size=0,attr=0;
|
||||
CDirContext *dirc;
|
||||
CArcCompress *arc;
|
||||
@@ -10,12 +10,12 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL)
|
||||
if ((temph=HashFind(absname,adam_task->hash_table,HTT_FILE))||
|
||||
(temph=HashFind(altname,adam_task->hash_table,HTT_FILE))) {
|
||||
size=temph->user_data1;
|
||||
result=MAlloc(size+1);
|
||||
MemCpy(result,temph->user_data0,size);
|
||||
result[size]=0; //Terminate
|
||||
res=MAlloc(size+1);
|
||||
MemCpy(res,temph->user_data0,size);
|
||||
res[size]=0; //Terminate
|
||||
attr=FileAttr(temph->str,attr);
|
||||
} else {
|
||||
for (i=0;i<2 && !result;i++) {//Try name, then altname
|
||||
for (i=0;i<2 && !res;i++) {//Try name, then altname
|
||||
if (!i)
|
||||
curname=absname;
|
||||
else
|
||||
@@ -23,15 +23,15 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL)
|
||||
if (dirc=DirContextNew(curname)) {
|
||||
switch (dirc->dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaFileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=RedSeaFileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
&size,&attr);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=FAT32FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
&size,&attr);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
result=ISO1FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=ISO1FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
&size,&attr);
|
||||
break;
|
||||
default:
|
||||
@@ -42,25 +42,25 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL)
|
||||
}
|
||||
|
||||
//Search parent directories.
|
||||
for (i=0;i<2 && !result;i++) {//Try name, then altname
|
||||
for (i=0;i<2 && !res;i++) {//Try name, then altname
|
||||
if (!i)
|
||||
curname=absname;
|
||||
else
|
||||
curname=altname;
|
||||
if (dirc=DirContextNew(curname)) {
|
||||
while (!result && StrCmp(Fs->cur_dir,"/")) {
|
||||
while (!res && StrCmp(Fs->cur_dir,"/")) {
|
||||
Cd("..");
|
||||
switch (Fs->cur_dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaFileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=RedSeaFileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
&size,&attr);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=FAT32FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
&size,&attr);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
result=ISO1FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
res=ISO1FileRead(dirc->dv,Fs->cur_dir,dirc->mask,
|
||||
&size,&attr);
|
||||
break;
|
||||
default:
|
||||
@@ -70,25 +70,25 @@ U8 *FileRead(U8 *filename,I64 *_size=NULL,I64 *_attr=NULL)
|
||||
DirContextDel(dirc);
|
||||
}
|
||||
}
|
||||
if (!result) {
|
||||
if (!res) {
|
||||
"%s ",filename;
|
||||
PrintErr("File not found.\n");
|
||||
}
|
||||
if (result && attr & RS_ATTR_RESIDENT)
|
||||
if (res && attr & RS_ATTR_RESIDENT)
|
||||
HashGenericAdd(curname,HTT_FILE,
|
||||
AMAllocIdentical(result),size,0,adam_task);
|
||||
AMAllocIdent(res),size,0,adam_task);
|
||||
}
|
||||
if (result && attr & RS_ATTR_COMPRESSED) {
|
||||
arc=result;
|
||||
if (res && attr & RS_ATTR_COMPRESSED) {
|
||||
arc=res;
|
||||
size=arc->expanded_size;
|
||||
result=ExpandBuf(arc);
|
||||
res=ExpandBuf(arc);
|
||||
Free(arc);
|
||||
}
|
||||
if (_attr) *_attr=attr;
|
||||
if (_size) *_size=size;
|
||||
Free(absname);
|
||||
Free(altname);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 FileWrite(U8 *filename,U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0)
|
||||
@@ -124,12 +124,12 @@ I64 FileWrite(U8 *filename,U8 *fbuf,I64 size,CDate cdt=0,I64 attr=0)
|
||||
if (temph=HashFind(absname,adam_task->hash_table,HTT_FILE)) {
|
||||
if (attr & RS_ATTR_RESIDENT) {
|
||||
Free(temph->user_data0);
|
||||
temph->user_data0=AMAllocIdentical(fbuf);
|
||||
temph->user_data0=AMAllocIdent(fbuf);
|
||||
temph->user_data1=size;
|
||||
} else
|
||||
HashRemDel(temph,adam_task->hash_table);
|
||||
} else if (attr & RS_ATTR_RESIDENT)
|
||||
HashGenericAdd(absname,HTT_FILE,AMAllocIdentical(fbuf),size,0,adam_task);
|
||||
HashGenericAdd(absname,HTT_FILE,AMAllocIdent(fbuf),size,0,adam_task);
|
||||
Free(fbuf2);
|
||||
DirContextDel(dirc);
|
||||
}
|
||||
|
||||
+30
-30
@@ -1,30 +1,30 @@
|
||||
CDirEntry *FilesFind2(U8 *files_find_mask,I64 fuf_flags)
|
||||
{
|
||||
CDrv *dv=Fs->cur_dv;
|
||||
CDirEntry *result=NULL;
|
||||
CDirEntry *res=NULL;
|
||||
DrvChk(dv);
|
||||
switch (dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaFilesFind(files_find_mask,fuf_flags);
|
||||
res=RedSeaFilesFind(files_find_mask,fuf_flags);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32FilesFind(files_find_mask,fuf_flags);
|
||||
res=FAT32FilesFind(files_find_mask,fuf_flags);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
result=ISO1FilesFind(files_find_mask,fuf_flags);
|
||||
res=ISO1FilesFind(files_find_mask,fuf_flags);
|
||||
break;
|
||||
default:
|
||||
PrintErr("File System Not Supported\n");
|
||||
result=NULL;
|
||||
res=NULL;
|
||||
}
|
||||
if (result) {
|
||||
DirFilesSort(&result,SK_NAME);
|
||||
if (res) {
|
||||
DirFilesSort(&res,SK_NAME);
|
||||
if (fuf_flags&(FUF_FLATTEN_TREE|FUF_JUST_FILES))
|
||||
DirFilesFlatten(result,&result,fuf_flags);
|
||||
DirFilesFlatten(res,&res,fuf_flags);
|
||||
if (fuf_flags&FUF_CLUSTER_ORDER)
|
||||
DirFilesSort(&result,SK_CLUSTER);
|
||||
DirFilesSort(&res,SK_CLUSTER);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CDirEntry *FilesFind(U8 *files_find_mask,I64 fuf_flags=0)
|
||||
@@ -36,22 +36,22 @@ When done, you free with $LK,"DirEntryDel",A="MN:DirEntryDel"$(),$LK,"DirEntryDe
|
||||
$LK,"DirTreeDel",A="MN:DirTreeDel"$() or $LK,"DirTreeDel2",A="MN:DirTreeDel2"$().
|
||||
|
||||
*/
|
||||
CDirEntry *result;
|
||||
CDirEntry *res;
|
||||
CDirContext *dirc;
|
||||
if (fuf_flags&~FUG_FILES_FIND)
|
||||
throw('FUF');
|
||||
if (fuf_flags&FUF_SINGLE) {
|
||||
result=MAlloc(sizeof(CDirEntry));
|
||||
if (!FileFind(files_find_mask,result)) {
|
||||
Free(result);
|
||||
res=MAlloc(sizeof(CDirEntry));
|
||||
if (!FileFind(files_find_mask,res)) {
|
||||
Free(res);
|
||||
return NULL;
|
||||
}
|
||||
} else if (dirc=DirContextNew(files_find_mask,TRUE)) {
|
||||
result=FilesFind2(dirc->mask,fuf_flags);
|
||||
res=FilesFind2(dirc->mask,fuf_flags);
|
||||
DirContextDel(dirc);
|
||||
} else
|
||||
return NULL;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
@@ -61,7 +61,7 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
U8 *altname,*curname,*full_name=NULL;
|
||||
CDirEntry de;
|
||||
CDirContext *dirc;
|
||||
Bool result=FALSE,old_silent;
|
||||
Bool res=FALSE,old_silent;
|
||||
if (fuf_flags&~FUG_FILE_FIND)
|
||||
throw('FUF');
|
||||
if (!filename || *filename && filename[1]==':' && !Let2Drv(*filename,FALSE))
|
||||
@@ -71,7 +71,7 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
j=2;
|
||||
else
|
||||
j=1;
|
||||
for (i=0;i<j && !result;i++) {
|
||||
for (i=0;i<j && !res;i++) {
|
||||
if (!i)
|
||||
curname=filename;
|
||||
else
|
||||
@@ -84,21 +84,21 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
cur_dir_cluster=Name2DirCluster(dirc->dv,Fs->cur_dir);
|
||||
switch (dirc->dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaFileFind(dirc->dv,cur_dir_cluster,dirc->mask,
|
||||
res=RedSeaFileFind(dirc->dv,cur_dir_cluster,dirc->mask,
|
||||
&de,fuf_flags);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32FileFind(dirc->dv,cur_dir_cluster,dirc->mask,
|
||||
res=FAT32FileFind(dirc->dv,cur_dir_cluster,dirc->mask,
|
||||
&de,fuf_flags);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
result=ISO1FileFind(dirc->dv,cur_dir_cluster,dirc->mask,
|
||||
res=ISO1FileFind(dirc->dv,cur_dir_cluster,dirc->mask,
|
||||
&de,fuf_flags);
|
||||
break;
|
||||
default:
|
||||
PrintErr("File System Not Supported\n");
|
||||
}
|
||||
if (result && _de) {
|
||||
if (res && _de) {
|
||||
if (StrCmp(Fs->cur_dir,"/"))
|
||||
full_name=MStrPrint("%C:%s/%s",
|
||||
Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name);
|
||||
@@ -108,7 +108,7 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
DirContextDel(dirc);
|
||||
}
|
||||
}
|
||||
for (i=0;i<j && !result && fuf_flags&FUF_SCAN_PARENTS;i++) {
|
||||
for (i=0;i<j && !res && fuf_flags&FUF_SCAN_PARENTS;i++) {
|
||||
if (!i)
|
||||
curname=filename;
|
||||
else
|
||||
@@ -119,27 +119,27 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
else {
|
||||
Silent(old_silent);
|
||||
cur_dir_cluster=Name2DirCluster(dirc->dv,Fs->cur_dir);
|
||||
while (!result && StrCmp(Fs->cur_dir,"/")) {
|
||||
while (!res && StrCmp(Fs->cur_dir,"/")) {
|
||||
Cd("..");
|
||||
cur_dir_cluster=Name2DirCluster(dirc->dv,Fs->cur_dir);
|
||||
switch (dirc->dv->fs_type) {
|
||||
case FSt_REDSEA:
|
||||
result=RedSeaFileFind(dirc->dv,cur_dir_cluster,
|
||||
res=RedSeaFileFind(dirc->dv,cur_dir_cluster,
|
||||
dirc->mask,&de,fuf_flags);
|
||||
break;
|
||||
case FSt_FAT32:
|
||||
result=FAT32FileFind(dirc->dv,cur_dir_cluster,
|
||||
res=FAT32FileFind(dirc->dv,cur_dir_cluster,
|
||||
dirc->mask,&de,fuf_flags);
|
||||
break;
|
||||
case FSt_ISO9660:
|
||||
result=ISO1FileFind(dirc->dv,cur_dir_cluster,
|
||||
res=ISO1FileFind(dirc->dv,cur_dir_cluster,
|
||||
dirc->mask,&de,fuf_flags);
|
||||
break;
|
||||
default:
|
||||
PrintErr("File System Not Supported\n");
|
||||
}
|
||||
}
|
||||
if (result && _de) {
|
||||
if (res && _de) {
|
||||
if (StrCmp(Fs->cur_dir,"/"))
|
||||
full_name=MStrPrint("%C:%s/%s",
|
||||
Drv2Let(Fs->cur_dv),Fs->cur_dir,de.name);
|
||||
@@ -151,12 +151,12 @@ Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0)
|
||||
}
|
||||
}
|
||||
if (_de) {
|
||||
if (result) {
|
||||
if (res) {
|
||||
MemCpy(_de,&de,sizeof(CDirEntry));
|
||||
_de->full_name=full_name;
|
||||
} else
|
||||
MemSet(_de,0,sizeof(CDirEntry));
|
||||
}
|
||||
Free(altname);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
@@ -52,7 +52,7 @@ Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA)
|
||||
|
||||
U0 Fmt(I64 drv_let,Bool quick=TRUE,Bool confirm=TRUE,I64 type=FSt_FAT32)
|
||||
{//Format hard drive or RAM drive.
|
||||
//$BK,1$Warning:$BK,0$ Destroys all previous info.
|
||||
//$BK,1$Warning:$BK,0$ Destroys all prev info.
|
||||
//quick=FALSE means fill entire drive with zeros.
|
||||
//Choose $LK,"FSt_FAT32",A="MN:FSt_FAT32"$ or $LK,"FSt_REDSEA",A="MN:FSt_REDSEA"$.
|
||||
//You don't format a CD/DVD with this.
|
||||
|
||||
+44
-44
@@ -42,7 +42,7 @@ Bool FilesFindMatch(U8 *_test_name,U8 *files_find_mask,I64 fuf_flags=0)
|
||||
I64 tn_len=StrLen(_test_name),mask_len=StrLen(files_find_mask);
|
||||
U8 *mask1=MAlloc(mask_len+1),*mask2=MAlloc(mask_len+1),
|
||||
*ptr,*test_name1,*test_name2;
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
StrCpy(mask1,files_find_mask);
|
||||
if (StrOcc(_test_name,'/')) {
|
||||
test_name1=MAlloc(tn_len+1);
|
||||
@@ -62,33 +62,33 @@ Bool FilesFindMatch(U8 *_test_name,U8 *files_find_mask,I64 fuf_flags=0)
|
||||
if (*mask2) {
|
||||
if (*mask2=='~') {
|
||||
if (WildMatch(ptr,mask2+1)) {
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (WildMatch(ptr,mask2)) {
|
||||
if (Bt(&fuf_flags,FUf_JUST_TXT) &&
|
||||
!FilesFindMatch(_test_name,FILEMASK_TXT)) {
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
break;
|
||||
} else if (Bt(&fuf_flags,FUf_JUST_SRC) &&
|
||||
!FilesFindMatch(_test_name,FILEMASK_SRC)) {
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
break;
|
||||
} else if (Bt(&fuf_flags,FUf_JUST_AOT) &&
|
||||
!FilesFindMatch(_test_name,FILEMASK_AOT)) {
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
break;
|
||||
} else if (Bt(&fuf_flags,FUf_JUST_JIT) &&
|
||||
!FilesFindMatch(_test_name,FILEMASK_JIT)) {
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
break;
|
||||
} else if (Bt(&fuf_flags,FUf_JUST_GRA) &&
|
||||
!FilesFindMatch(_test_name,FILEMASK_GRA)) {
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
break;
|
||||
} else
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
}
|
||||
}
|
||||
} else
|
||||
@@ -98,13 +98,13 @@ Bool FilesFindMatch(U8 *_test_name,U8 *files_find_mask,I64 fuf_flags=0)
|
||||
Free(test_name2);
|
||||
Free(mask1);
|
||||
Free(mask2);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *DirNameAbs(U8 *_dirname)
|
||||
{//MAlloc absolute dir string with drv letter.
|
||||
I64 maxlen;
|
||||
U8 drv[3],*result,*buf,*buf2,*buf3,*buf4,*dirname,*free_dirname;
|
||||
U8 drv[3],*res,*buf,*buf2,*buf3,*buf4,*dirname,*free_dirname;
|
||||
if (!Fs->cur_dir || !*Fs->cur_dir)
|
||||
return StrNew(_dirname);
|
||||
free_dirname=dirname=MStrUtil(_dirname,
|
||||
@@ -148,19 +148,19 @@ U8 *DirNameAbs(U8 *_dirname)
|
||||
}
|
||||
}
|
||||
Free(buf);
|
||||
result=MAlloc(StrLen(buf3)+3);
|
||||
StrCpy(result,drv);
|
||||
StrCpy(result+2,buf3);
|
||||
res=MAlloc(StrLen(buf3)+3);
|
||||
StrCpy(res,drv);
|
||||
StrCpy(res+2,buf3);
|
||||
Free(buf2);
|
||||
Free(buf3);
|
||||
Free(buf4);
|
||||
Free(free_dirname);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *FileNameAbs(U8 *_filename,I64 fuf_flags=0)
|
||||
{//Absolute filename. Accepts $LK,"FUF_Z_OR_NOT_Z",A="MN:FUF_Z_OR_NOT_Z"$, $LK,"FUF_SCAN_PARENTS",A="MN:FUF_SCAN_PARENTS"$.
|
||||
U8 *result,*filename,*buf,*buf_file,*buf_dir,*free_filename,*free_buf;
|
||||
U8 *res,*filename,*buf,*buf_file,*buf_dir,*free_filename,*free_buf;
|
||||
CDirEntry de;
|
||||
free_filename=filename=MStrUtil(_filename,
|
||||
SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);
|
||||
@@ -175,37 +175,37 @@ U8 *FileNameAbs(U8 *_filename,I64 fuf_flags=0)
|
||||
StrCpy(buf,"/");
|
||||
buf_dir=DirNameAbs(free_buf);
|
||||
Free(free_buf);
|
||||
result=MAlloc(StrLen(buf_dir)+1+StrLen(buf_file)+1);
|
||||
StrCpy(result,buf_dir);
|
||||
if (result[StrLen(result)-1]!='/')
|
||||
CatPrint(result,"/");
|
||||
CatPrint(result,buf_file);
|
||||
res=MAlloc(StrLen(buf_dir)+1+StrLen(buf_file)+1);
|
||||
StrCpy(res,buf_dir);
|
||||
if (res[StrLen(res)-1]!='/')
|
||||
CatPrint(res,"/");
|
||||
CatPrint(res,buf_file);
|
||||
Free(buf_file);
|
||||
Free(buf_dir);
|
||||
Free(free_filename);
|
||||
if (fuf_flags && FileFind(result,&de,fuf_flags|FUF_JUST_FILES)) {
|
||||
Free(result);
|
||||
result=de.full_name;
|
||||
if (fuf_flags && FileFind(res,&de,fuf_flags|FUF_JUST_FILES)) {
|
||||
Free(res);
|
||||
res=de.full_name;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *ChgExt(U8 *filename,U8 *extension)
|
||||
{//Change filename extension.
|
||||
U8 *result=MAlloc(StrLen(filename)+1+StrLen(extension)+1);
|
||||
StrCpy(result,filename);
|
||||
U8 *res=MAlloc(StrLen(filename)+1+StrLen(extension)+1);
|
||||
StrCpy(res,filename);
|
||||
if (FileExtDot(filename))
|
||||
FileExtRem(result);
|
||||
return CatPrint(result,".%s",extension);
|
||||
FileExtRem(res);
|
||||
return CatPrint(res,".%s",extension);
|
||||
}
|
||||
|
||||
U8 *DftExt(U8 *filename,U8 *extension)
|
||||
{//Give extension if has none.
|
||||
U8 *result=MAlloc(StrLen(filename)+1+StrLen(extension)+1);
|
||||
StrCpy(result,filename);
|
||||
U8 *res=MAlloc(StrLen(filename)+1+StrLen(extension)+1);
|
||||
StrCpy(res,filename);
|
||||
if (!FileExtDot(filename))
|
||||
CatPrint(result,".%s",extension);
|
||||
return result;
|
||||
CatPrint(res,".%s",extension);
|
||||
return res;
|
||||
}
|
||||
|
||||
CDirEntry *Cd2DirEntry(CDirEntry *tempde,U8 *abs_name)
|
||||
@@ -254,13 +254,13 @@ Bool FileNameChk(U8 *filename)
|
||||
|
||||
U8 *ToggleZorNotZ(U8 *name)
|
||||
{//MAlloc name with Z if not Z or vice versa.
|
||||
U8 *result;
|
||||
U8 *res;
|
||||
if (IsDotZ(name)) {
|
||||
result=StrNew(name);
|
||||
result[StrLen(name)-2]=0;
|
||||
res=StrNew(name);
|
||||
res[StrLen(name)-2]=0;
|
||||
} else
|
||||
result=MStrPrint("%s.Z",name);
|
||||
return result;
|
||||
res=MStrPrint("%s.Z",name);
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *FileNameTempTxt()
|
||||
@@ -290,7 +290,7 @@ returns default.
|
||||
("/Kernel/BlkDev",NULL,"PRJ.Z") returns "D:/Kernel/Kernel.PRJ.Z"
|
||||
("/Apps/Psalmody","Load","CPP.Z") returns "D:/Apps/Psalmody/Load.CPP.Z"
|
||||
*/
|
||||
U8 *st=DirNameAbs(dirname),*st2,*st3,*result,*dft=NULL,*ext;
|
||||
U8 *st=DirNameAbs(dirname),*st2,*st3,*res,*dft=NULL,*ext;
|
||||
if (_extension && *_extension) {
|
||||
if (*_extension=='.')
|
||||
ext=StrNew(_extension);
|
||||
@@ -306,22 +306,22 @@ returns default.
|
||||
StrLastRem(st2,"/",st3);
|
||||
|
||||
if (name)
|
||||
result=MStrPrint("%s/%s%s",st,name,ext);
|
||||
res=MStrPrint("%s/%s%s",st,name,ext);
|
||||
else {
|
||||
if (*ext)
|
||||
result=MStrPrint("%s/%s%s",st,st3,ext);
|
||||
res=MStrPrint("%s/%s%s",st,st3,ext);
|
||||
else
|
||||
result=StrNew(st);
|
||||
res=StrNew(st);
|
||||
}
|
||||
if (!dft)
|
||||
dft=StrNew(result);
|
||||
if (!*ext && (!name||!*name) || FileFind(result)) {
|
||||
dft=StrNew(res);
|
||||
if (!*ext && (!name||!*name) || FileFind(res)) {
|
||||
Free(st3);
|
||||
Free(st2);
|
||||
Free(st);
|
||||
Free(dft);
|
||||
Free(ext);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
Free(st);
|
||||
st=st2;
|
||||
|
||||
@@ -156,13 +156,13 @@ Bool FATNameTo(U8 *dst,U8 *src)
|
||||
|
||||
I64 FATNameXSum(U8 *src)
|
||||
{
|
||||
I64 i,result=0;
|
||||
I64 i,res=0;
|
||||
for (i=0;i<11;i++)
|
||||
if (result&1)
|
||||
result.u8[0]=0x80+result>>1+*src++;
|
||||
if (res&1)
|
||||
res.u8[0]=0x80+res>>1+*src++;
|
||||
else
|
||||
result.u8[0]=result>>1+*src++;
|
||||
return result;
|
||||
res.u8[0]=res>>1+*src++;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool FATFromName(U8 *dst,U8 *src)
|
||||
@@ -226,16 +226,16 @@ Bool DirLongNameFill(CDirEntry *tempde,CFAT32DirEntryLong *de,I64 *xsum)
|
||||
Bool FAT32CDirFill(CDirEntry *tempde,
|
||||
CFAT32DirEntry *de,CDate _local_time_offset)
|
||||
{
|
||||
Bool result;
|
||||
Bool res;
|
||||
if (*tempde->name)
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
else
|
||||
result=FATFromName(tempde->name,de->name);
|
||||
res=FATFromName(tempde->name,de->name);
|
||||
tempde->cluster=de->cluster_lo+de->cluster_hi<<16;
|
||||
tempde->size=de->size;
|
||||
tempde->attr=de->attr;
|
||||
tempde->datetime=Dos2CDate(de->WrtTime,de->WrtDate)-_local_time_offset;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool FAT32DirFill(CFAT32DirEntry *de,
|
||||
@@ -244,10 +244,10 @@ Bool FAT32DirFill(CFAT32DirEntry *de,
|
||||
I64 de_cnt=0,i,l,xsum,ord;
|
||||
U8 *ptr,dname[16];
|
||||
CFAT32DirEntryLong *ld=de;
|
||||
Bool result;
|
||||
Bool res;
|
||||
|
||||
MemSet(de,0,sizeof(CFAT32DirEntry));
|
||||
result=FATNameTo(de->name,tempde->name);
|
||||
res=FATNameTo(de->name,tempde->name);
|
||||
FATFromName(dname,de->name);
|
||||
if (StrCmp(dname,tempde->name)) {
|
||||
ord=0x41;
|
||||
@@ -279,7 +279,7 @@ Bool FAT32DirFill(CFAT32DirEntry *de,
|
||||
ptr[fat_long_name_map[i]](U16)=0xFFFF;
|
||||
de_cnt++;
|
||||
MemSet(&de[de_cnt],0,sizeof(CFAT32DirEntry));
|
||||
result=FATNameTo(de[de_cnt].name,tempde->name);
|
||||
res=FATNameTo(de[de_cnt].name,tempde->name);
|
||||
}
|
||||
de[de_cnt].cluster_lo=tempde->cluster.u16[0];
|
||||
de[de_cnt].cluster_hi=tempde->cluster.u16[1];
|
||||
@@ -292,20 +292,20 @@ Bool FAT32DirFill(CFAT32DirEntry *de,
|
||||
tempde->datetime+_local_time_offset);
|
||||
if (_de_cnt)
|
||||
*_de_cnt=de_cnt+1;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,
|
||||
U8 *name,CDirEntry *_result,I64 fuf_flags=0)
|
||||
U8 *name,CDirEntry *_res,I64 fuf_flags=0)
|
||||
{//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$
|
||||
Bool result=FALSE,unlock;
|
||||
Bool res=FALSE,unlock;
|
||||
CFAT32DirEntry *buf;
|
||||
I64 xsum=0,attr,cur_dir_entry,entries_per_cluster;
|
||||
U8 dname[CDIR_FILENAME_LEN],ch;
|
||||
CDirEntry long_name;
|
||||
if (fuf_flags&~FUG_FILE_FIND)
|
||||
throw('FUF');
|
||||
MemSet(_result,0,sizeof(CDirEntry));
|
||||
MemSet(_res,0,sizeof(CDirEntry));
|
||||
MemSet(&long_name,0,sizeof(CDirEntry));
|
||||
DrvChk(dv);
|
||||
if (dv->fs_type!=FSt_FAT32)
|
||||
@@ -327,15 +327,15 @@ Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,
|
||||
else {
|
||||
if (!(attr&RS_ATTR_VOL_ID)) {
|
||||
if (xsum==FATNameXSum(buf[cur_dir_entry].name))
|
||||
MemCpy(_result,&long_name,sizeof(CDirEntry));
|
||||
MemCpy(_res,&long_name,sizeof(CDirEntry));
|
||||
else
|
||||
MemSet(_result,0,sizeof(CDirEntry));
|
||||
MemSet(_res,0,sizeof(CDirEntry));
|
||||
if (!(fuf_flags&FUF_JUST_DIRS && !(attr & RS_ATTR_DIR)) &&
|
||||
!(fuf_flags&FUF_JUST_FILES && attr & RS_ATTR_DIR) &&
|
||||
FAT32CDirFill(_result,&buf[cur_dir_entry],
|
||||
FAT32CDirFill(_res,&buf[cur_dir_entry],
|
||||
dv->fat32_local_time_offset) &&
|
||||
!StrCmp(dname,_result->name)) {
|
||||
result=TRUE;
|
||||
!StrCmp(dname,_res->name)) {
|
||||
res=TRUE;
|
||||
goto fff_done;
|
||||
}
|
||||
}
|
||||
@@ -353,7 +353,7 @@ Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,
|
||||
}
|
||||
}
|
||||
}
|
||||
MemSet(_result,0,sizeof(CDirEntry));
|
||||
MemSet(_res,0,sizeof(CDirEntry));
|
||||
fff_done:
|
||||
Free(buf);
|
||||
if (unlock)
|
||||
@@ -361,7 +361,7 @@ fff_done:
|
||||
} catch
|
||||
if (unlock)
|
||||
DrvUnlock(dv);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *FAT32FileRead(CDrv *dv,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr)
|
||||
@@ -727,7 +727,7 @@ I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags,
|
||||
Bool del_dir,Bool print_msg)
|
||||
{
|
||||
CFAT32DirEntry *buf,*last_buf,*temp_buf;
|
||||
I64 i,result=0,attr,xsum=0,last_dir_cluster=INVALID_CLUSTER,
|
||||
I64 i,res=0,attr,xsum=0,last_dir_cluster=INVALID_CLUSTER,
|
||||
cur_dir_entry,entries_per_cluster,cur_dir_cluster;
|
||||
U8 ch;
|
||||
Bool unlock_break;
|
||||
@@ -755,7 +755,7 @@ I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags,
|
||||
if (!*long_name.name)
|
||||
FATFromName(long_name.name,buf[cur_dir_entry].name);
|
||||
if (FilesFindMatch(long_name.name,files_find_mask,fuf_flags)) {
|
||||
if (!(attr & RS_ATTR_DIR)) result++;
|
||||
if (!(attr & RS_ATTR_DIR)) res++;
|
||||
if (print_msg)
|
||||
"Del %s\n",long_name.name;
|
||||
*buf[cur_dir_entry].name=0xE5;
|
||||
@@ -807,7 +807,7 @@ I64 FAT32FilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags,
|
||||
if (unlock_break)
|
||||
BreakUnlock;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 FAT32FileWrite(CDrv *dv,U8 *cur_dir,U8 *name,U8 *buf,I64 size,
|
||||
@@ -851,7 +851,7 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,
|
||||
I64 attr,xsum=0,dir_size=0,sub_dir_size,
|
||||
cur_dir_cluster,cur_dir_entry,entries_per_cluster;
|
||||
U8 ch;
|
||||
CDirEntry *result=NULL,*tempde,long_name;
|
||||
CDirEntry *res=NULL,*tempde,long_name;
|
||||
if (fuf_flags&~FUG_FILES_FIND)
|
||||
throw('FUF');
|
||||
try {
|
||||
@@ -880,8 +880,8 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,
|
||||
tempde->parent=parent;
|
||||
if (Bt(&fuf_flags,FUf_RECURSE) && attr&RS_ATTR_DIR &&
|
||||
*tempde->name!='.') {
|
||||
tempde->next=result;
|
||||
result=tempde;
|
||||
tempde->next=res;
|
||||
res=tempde;
|
||||
tempde->full_name=DirNameAbs(tempde->name);
|
||||
DrvUnlock(dv);
|
||||
if (Cd(tempde->name)) {
|
||||
@@ -898,8 +898,8 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,
|
||||
*tempde->name=='.' && attr&RS_ATTR_DIR) &&
|
||||
FilesFindMatch(tempde->full_name,files_find_mask,
|
||||
fuf_flags)) {
|
||||
tempde->next=result;
|
||||
result=tempde;
|
||||
tempde->next=res;
|
||||
res=tempde;
|
||||
} else
|
||||
DirEntryDel(tempde);
|
||||
}
|
||||
@@ -927,7 +927,7 @@ CDirEntry *FAT32FilesFind(U8 *files_find_mask,
|
||||
DrvUnlock(dv);
|
||||
if (_dir_size)
|
||||
*_dir_size=dir_size;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool FAT32MkDir(CDrv *dv,U8 *cur_dir,U8 *name)
|
||||
|
||||
@@ -8,7 +8,7 @@ Bool ISODrvInit(CDrv *dv,I64 blk)
|
||||
I64 spc=bd->blk_size>>BLK_SIZE_BITS,i=blk/spc;
|
||||
CISO1PriDesc *iso=MAlloc(bd->blk_size);
|
||||
CISO1DirEntry *de;
|
||||
Bool unlock,result=FALSE;
|
||||
Bool unlock,res=FALSE;
|
||||
U8 buf[8];
|
||||
|
||||
try {
|
||||
@@ -31,7 +31,7 @@ Bool ISODrvInit(CDrv *dv,I64 blk)
|
||||
de=&iso->root_dir_record;
|
||||
dv->root_cluster=de->loc.little;
|
||||
dv->size=iso->vol_space_size.little*bd->blk_size>>BLK_SIZE_BITS;
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
goto ipi_done;
|
||||
case ISO1T_TERMINATOR:
|
||||
throw('Drv');
|
||||
@@ -55,7 +55,7 @@ ipi_done:
|
||||
if (unlock)
|
||||
DrvUnlock(dv);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 Date2ISO1(CISO1Date *dst,CDate cdt)
|
||||
@@ -115,24 +115,24 @@ Bool ISO1FromName(U8 *dst,U8 *src)
|
||||
|
||||
Bool ISO1CDirFill(CDirEntry *tempde,CISO1DirEntry *de)
|
||||
{
|
||||
Bool result;
|
||||
Bool res;
|
||||
MemSet(tempde,0,sizeof(CDirEntry));
|
||||
result=ISO1FromName(tempde->name,&de->name_len);
|
||||
res=ISO1FromName(tempde->name,&de->name_len);
|
||||
tempde->cluster=de->loc.little;
|
||||
tempde->size=de->size.little;
|
||||
tempde->attr=FileAttr(tempde->name);
|
||||
if (de->flags & ISO1_ATTR_DIR)
|
||||
tempde->attr|=RS_ATTR_DIR;
|
||||
tempde->datetime=ISO1DateStruct2CDate(&de->date);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
CDirEntry *_result,I64 fuf_flags=0)
|
||||
CDirEntry *_res,I64 fuf_flags=0)
|
||||
{//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$
|
||||
CISO1DirEntry *isoptr,*buf;
|
||||
U8 dname[CDIR_FILENAME_LEN];
|
||||
Bool result=FALSE,unlock;
|
||||
Bool res=FALSE,unlock;
|
||||
I64 i;
|
||||
if (fuf_flags&~FUG_FILE_FIND)
|
||||
throw('FUF');
|
||||
@@ -163,14 +163,14 @@ Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
ISO1FromName(dname,&isoptr->name_len);
|
||||
if (*dname) {
|
||||
if (!StrCmp(name,dname)) {
|
||||
result=ISO1CDirFill(_result,isoptr);
|
||||
if (result &&
|
||||
res=ISO1CDirFill(_res,isoptr);
|
||||
if (res &&
|
||||
!(fuf_flags&FUF_JUST_DIRS &&
|
||||
!(_result->attr & RS_ATTR_DIR)) &&
|
||||
!(fuf_flags&FUF_JUST_FILES && _result->attr & RS_ATTR_DIR) )
|
||||
!(_res->attr & RS_ATTR_DIR)) &&
|
||||
!(fuf_flags&FUF_JUST_FILES && _res->attr & RS_ATTR_DIR) )
|
||||
goto iff_done;
|
||||
else
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
}
|
||||
}
|
||||
i-=isoptr->len;
|
||||
@@ -184,7 +184,7 @@ iff_done:
|
||||
} catch
|
||||
if (unlock)
|
||||
DrvUnlock(dv);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *ISO1FileRead(CDrv *dv,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr)
|
||||
@@ -236,7 +236,7 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,
|
||||
CDrv *dv=Fs->cur_dv;
|
||||
CISO1DirEntry *buf,*buf2,*isoptr;
|
||||
I64 i,cur_dir_cluster=Name2DirCluster(dv,Fs->cur_dir);
|
||||
CDirEntry *result=NULL,*tempde;
|
||||
CDirEntry *res=NULL,*tempde;
|
||||
if (fuf_flags&~FUG_FILES_FIND)
|
||||
throw('FUF');
|
||||
isoptr=MAlloc(dv->spc<<BLK_SIZE_BITS);
|
||||
@@ -262,8 +262,8 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,
|
||||
tempde->parent=parent;
|
||||
if (Bt(&fuf_flags,FUf_RECURSE) && tempde->attr&RS_ATTR_DIR &&
|
||||
*tempde->name!='.') {
|
||||
tempde->next=result;
|
||||
result=tempde;
|
||||
tempde->next=res;
|
||||
res=tempde;
|
||||
tempde->full_name=DirNameAbs(tempde->name);
|
||||
if (Cd(tempde->name)) {
|
||||
tempde->sub=ISO1FilesFind(files_find_mask,fuf_flags,tempde);
|
||||
@@ -276,8 +276,8 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,
|
||||
!(Bt(&fuf_flags,FUf_RECURSE) &&
|
||||
*tempde->name=='.' && tempde->attr&RS_ATTR_DIR) &&
|
||||
FilesFindMatch(tempde->full_name,files_find_mask,fuf_flags)) {
|
||||
tempde->next=result;
|
||||
result=tempde;
|
||||
tempde->next=res;
|
||||
res=tempde;
|
||||
} else
|
||||
DirEntryDel(tempde);
|
||||
}
|
||||
@@ -288,5 +288,5 @@ CDirEntry *ISO1FilesFind(U8 *files_find_mask,
|
||||
}
|
||||
}
|
||||
Free(buf2);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
@@ -151,15 +151,15 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE)
|
||||
}
|
||||
|
||||
Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
CDirEntry *_result,I64 fuf_flags=0)
|
||||
CDirEntry *_res,I64 fuf_flags=0)
|
||||
{//$LK,"FUF_JUST_DIRS",A="MN:FUF_JUST_DIRS"$, $LK,"FUF_JUST_FILES",A="MN:FUF_JUST_FILES"$
|
||||
CDirEntry *buf,*buf2,*ptr;
|
||||
U8 dname[CDIR_FILENAME_LEN];
|
||||
I64 ch;
|
||||
Bool result=FALSE,unlock;
|
||||
Bool res=FALSE,unlock;
|
||||
if (fuf_flags&~FUG_FILE_FIND)
|
||||
throw('FUF');
|
||||
MemSet(_result,0,sizeof(CDirEntry));
|
||||
MemSet(_res,0,sizeof(CDirEntry));
|
||||
DrvChk(dv);
|
||||
if (dv->fs_type!=FSt_REDSEA)
|
||||
PrintErr("Not RedSea Drv\n");
|
||||
@@ -186,8 +186,8 @@ Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
!(fuf_flags&FUF_JUST_DIRS && !(ptr->attr & RS_ATTR_DIR)) &&
|
||||
!(fuf_flags&FUF_JUST_FILES && ptr->attr & RS_ATTR_DIR) &&
|
||||
!StrCmp(dname,ptr->name)) {
|
||||
MemCpy(&_result->attr,&ptr->attr,CDIR_SIZE);
|
||||
result=TRUE;
|
||||
MemCpy(&_res->attr,&ptr->attr,CDIR_SIZE);
|
||||
res=TRUE;
|
||||
goto rsff_done;
|
||||
}
|
||||
ptr(U8 *)+=CDIR_SIZE;
|
||||
@@ -199,7 +199,7 @@ rsff_done:
|
||||
} catch
|
||||
if (unlock)
|
||||
DrvUnlock(dv);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *RedSeaFileRead(CDrv *dv,U8 *cur_dir,U8 *filename,I64 *_size,I64 *_attr)
|
||||
@@ -457,7 +457,7 @@ I64 RedSeaFilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags,
|
||||
Bool del_dir,Bool print_msg)
|
||||
{
|
||||
CDirEntry *buf,*buf2,*ptr;
|
||||
I64 i=0,result=0,ch,j=0,n=BLK_SIZE/CDIR_SIZE,cur_dir_cluster;
|
||||
I64 i=0,res=0,ch,j=0,n=BLK_SIZE/CDIR_SIZE,cur_dir_cluster;
|
||||
Bool unlock_break;
|
||||
try {
|
||||
unlock_break=BreakLock;
|
||||
@@ -480,7 +480,7 @@ I64 RedSeaFilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags,
|
||||
else if (!(ptr->attr & RS_ATTR_DELETED) && ch!='.' && (del_dir ||
|
||||
!(ptr->attr & RS_ATTR_DIR)) &&
|
||||
FilesFindMatch(ptr->name,files_find_mask,fuf_flags)) {
|
||||
if (!(ptr->attr & RS_ATTR_DIR)) result++;
|
||||
if (!(ptr->attr & RS_ATTR_DIR)) res++;
|
||||
if (print_msg)
|
||||
"Del %s\n",ptr->name;
|
||||
ptr->attr|=RS_ATTR_DELETED;
|
||||
@@ -503,7 +503,7 @@ I64 RedSeaFilesDel(CDrv *dv,U8 *cur_dir,U8 *files_find_mask,I64 fuf_flags,
|
||||
if (unlock_break)
|
||||
BreakUnlock;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 RedSeaFileWrite(CDrv *dv,U8 *cur_dir,U8 *name,U8 *buf,I64 size,
|
||||
@@ -538,7 +538,7 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,
|
||||
CDirEntry *parent=NULL)
|
||||
{
|
||||
CDrv *dv=Fs->cur_dv;
|
||||
CDirEntry *buf,*buf2,*ptr,*result=NULL,*tempde;
|
||||
CDirEntry *buf,*buf2,*ptr,*res=NULL,*tempde;
|
||||
I64 ch,cur_dir_cluster;
|
||||
if (fuf_flags&~FUG_FILES_FIND)
|
||||
throw('FUF');
|
||||
@@ -568,8 +568,8 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,
|
||||
tempde->parent=parent;
|
||||
if (Bt(&fuf_flags,FUf_RECURSE) && tempde->attr&RS_ATTR_DIR &&
|
||||
*tempde->name!='.') {
|
||||
tempde->next=result;
|
||||
result=tempde;
|
||||
tempde->next=res;
|
||||
res=tempde;
|
||||
tempde->full_name=DirNameAbs(tempde->name);
|
||||
DrvUnlock(dv);
|
||||
if (Cd(tempde->name)) {
|
||||
@@ -584,8 +584,8 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,
|
||||
!(Bt(&fuf_flags,FUf_RECURSE) && *tempde->name=='.' &&
|
||||
tempde->attr&RS_ATTR_DIR) &&
|
||||
FilesFindMatch(tempde->full_name,files_find_mask,fuf_flags)) {
|
||||
tempde->next=result;
|
||||
result=tempde;
|
||||
tempde->next=res;
|
||||
res=tempde;
|
||||
} else
|
||||
DirEntryDel(tempde);
|
||||
}
|
||||
@@ -596,7 +596,7 @@ CDirEntry *RedSeaFilesFind(U8 *files_find_mask,I64 fuf_flags,
|
||||
DrvUnlock(dv);
|
||||
} catch
|
||||
DrvUnlock(dv);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool RedSeaMkDir(CDrv *dv,U8 *cur_dir,U8 *name)
|
||||
|
||||
+11
-11
@@ -9,7 +9,7 @@ U0 ArcEntryGet(CArcCtrl *c)
|
||||
CArcEntry *temp,*temp1;
|
||||
|
||||
if (c->entry_used) {
|
||||
i=c->free_index;
|
||||
i=c->free_idx;
|
||||
|
||||
c->entry_used=FALSE;
|
||||
c->cur_entry=c->next_entry;
|
||||
@@ -35,7 +35,7 @@ U0 ArcEntryGet(CArcCtrl *c)
|
||||
temp1=temp1->next;
|
||||
}
|
||||
}
|
||||
c->free_index=i;
|
||||
c->free_idx=i;
|
||||
}
|
||||
}
|
||||
****/
|
||||
@@ -47,7 +47,7 @@ _ARC_ENTRY_GET::
|
||||
MOV RSI,U64 SF_ARG1[RBP]
|
||||
BTR U64 CArcCtrl.entry_used[RSI],0
|
||||
JNC I32 @@30
|
||||
MOV RDX,U64 CArcCtrl.free_index[RSI]
|
||||
MOV RDX,U64 CArcCtrl.free_idx[RSI]
|
||||
MOV RAX,U64 CArcCtrl.next_entry[RSI]
|
||||
MOV U64 CArcCtrl.cur_entry[RSI],RAX
|
||||
MOV RCX,U64 CArcCtrl.next_bits_in_use[RSI]
|
||||
@@ -90,7 +90,7 @@ _ARC_ENTRY_GET::
|
||||
JMP @@25
|
||||
@@20: MOV RCX,RAX
|
||||
JMP @@15
|
||||
@@25: MOV U64 CArcCtrl.free_index[RSI],RDX
|
||||
@@25: MOV U64 CArcCtrl.free_idx[RSI],RDX
|
||||
@@30: POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
@@ -231,7 +231,7 @@ CArcCtrl *ArcCtrlNew(Bool expand,I64 compression_type=CT_8_BIT)
|
||||
else
|
||||
c->min_bits=8;
|
||||
c->min_table_entry=1<<c->min_bits;
|
||||
c->free_index=c->min_table_entry;
|
||||
c->free_idx=c->min_table_entry;
|
||||
c->next_bits_in_use=c->min_bits+1;
|
||||
c->free_limit=1<<c->next_bits_in_use;
|
||||
c->saved_basecode=MAX_U32;
|
||||
@@ -250,17 +250,17 @@ U0 ArcCtrlDel(CArcCtrl *c)
|
||||
U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL)
|
||||
{//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$.
|
||||
CArcCtrl *c;
|
||||
U8 *result;
|
||||
U8 *res;
|
||||
|
||||
if (!(CT_NONE<=arc->compression_type<=CT_8_BIT) ||
|
||||
arc->expanded_size>MEM_MAPPED_SPACE)
|
||||
throw('Compress');
|
||||
|
||||
result=MAlloc(arc->expanded_size+1,mem_task);
|
||||
result[arc->expanded_size]=0; //terminate
|
||||
res=MAlloc(arc->expanded_size+1,mem_task);
|
||||
res[arc->expanded_size]=0; //terminate
|
||||
switch [arc->compression_type] {
|
||||
case CT_NONE:
|
||||
MemCpy(result,&arc->body,arc->expanded_size);
|
||||
MemCpy(res,&arc->body,arc->expanded_size);
|
||||
break;
|
||||
case CT_7_BIT:
|
||||
case CT_8_BIT:
|
||||
@@ -269,13 +269,13 @@ U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL)
|
||||
c->src_pos=sizeof(CArcCompress)<<3;
|
||||
c->src_buf=arc;
|
||||
c->dst_size=arc->expanded_size;
|
||||
c->dst_buf=result;
|
||||
c->dst_buf=res;
|
||||
c->dst_pos=0;
|
||||
ArcExpandBuf(c);
|
||||
ArcCtrlDel(c);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL)
|
||||
|
||||
+3
-3
@@ -54,7 +54,7 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
|
||||
ptr[0]=ch;
|
||||
ptr[1]=BLACK<<4+WHITE;
|
||||
} else {
|
||||
OutU8(VGAP_INDEX,VGAR_MAP_MASK);
|
||||
OutU8(VGAP_IDX,VGAR_MAP_MASK);
|
||||
OutU8(VGAP_DATA,0x0F); //All planes -- WHITE
|
||||
if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) {
|
||||
//Scroll cached image
|
||||
@@ -64,14 +64,14 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
|
||||
MemSet(text.raw_screen_image+GR_WIDTH*(GR_HEIGHT-FONT_HEIGHT)>>3,0,
|
||||
GR_WIDTH*FONT_HEIGHT>>3);
|
||||
|
||||
MemCpy(VGAM_GRAPHICS,text.raw_screen_image,GR_WIDTH*GR_HEIGHT>>3);
|
||||
MemCpy(text.vga_alias,text.raw_screen_image,GR_WIDTH*GR_HEIGHT>>3);
|
||||
text.raw_col-=text.cols;
|
||||
row=text.rows-1;
|
||||
}
|
||||
PUSHFD
|
||||
CLI
|
||||
ptr=ptr1=col+row*GR_WIDTH*FONT_HEIGHT>>3;
|
||||
ptr+=VGAM_GRAPHICS;
|
||||
ptr+=text.vga_alias;
|
||||
ptr1+=text.raw_screen_image; //Write to cached image as well
|
||||
ptr2=&text.font[ch&255];
|
||||
for (i=0;i<FONT_HEIGHT;i++) {
|
||||
|
||||
+14
-14
@@ -61,7 +61,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||
I64 i,cnt=0,ch,sc,size,bin_size=0,line_start_col=0,cur_col=0,
|
||||
old_raw_flags=text.raw_flags;
|
||||
CLine root,*templ,*templ1,*cur_line;
|
||||
Bool result=FALSE,
|
||||
Bool res=FALSE,
|
||||
old_raw=Raw(ON),
|
||||
old_debug=InDbg(ON),
|
||||
old_single=SingleUser(ON);
|
||||
@@ -104,19 +104,19 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||
MemCpy(bin_data,src,bin_size);
|
||||
}
|
||||
Free(buf);
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
}
|
||||
|
||||
cur_line=root.next;
|
||||
if (--num<0)
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
else {
|
||||
if (num<=cnt)
|
||||
while (num--)
|
||||
cur_line=cur_line->next;
|
||||
else {
|
||||
cur_line=&root;
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
}
|
||||
}
|
||||
do {
|
||||
@@ -254,7 +254,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||
|
||||
if (ch!=CH_ESC) {
|
||||
if (edf_dof_flags&EDF_WAS_WRITE)
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
} else {
|
||||
size=bin_size;
|
||||
|
||||
@@ -279,7 +279,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||
Free(buf);
|
||||
|
||||
if (edf_dof_flags&EDF_WAS_WRITE)
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
}
|
||||
|
||||
templ=root.next;
|
||||
@@ -297,7 +297,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||
SingleUser(old_single);
|
||||
text.raw_flags=text.raw_flags&~RWF_SHOW_DOLLAR|old_raw_flags&RWF_SHOW_DOLLAR;
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 ToFileLine(U8 *_fl_file_line,U8 **_filename,I64 *_linenum)
|
||||
@@ -315,13 +315,13 @@ U0 ToFileLine(U8 *_fl_file_line,U8 **_filename,I64 *_linenum)
|
||||
|
||||
Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0)
|
||||
{
|
||||
Bool result;
|
||||
Bool res;
|
||||
U8 *filename;
|
||||
I64 linenum;
|
||||
ToFileLine(fl_file_line,&filename,&linenum);
|
||||
result=EdLite(filename,linenum,edf_dof_flags);
|
||||
res=EdLite(filename,linenum,edf_dof_flags);
|
||||
Free(filename);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 FixSet(U8 *filename,I64 line)
|
||||
@@ -337,7 +337,7 @@ U0 FixSet(U8 *filename,I64 line)
|
||||
Bool Fix(I64 edf_dof_flags=0)
|
||||
{//Jump to last err src code to fix it.
|
||||
U8 *st;
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
|
||||
while (LBts(&sys_semas[SYS_SEMA_FIX],0))
|
||||
Yield;
|
||||
@@ -346,10 +346,10 @@ Bool Fix(I64 edf_dof_flags=0)
|
||||
|
||||
if (st) {
|
||||
if (IsRaw)
|
||||
result=EdLiteFileLine(st,edf_dof_flags);
|
||||
res=EdLiteFileLine(st,edf_dof_flags);
|
||||
else
|
||||
result=Ed(st,edf_dof_flags);
|
||||
res=Ed(st,edf_dof_flags);
|
||||
}
|
||||
Free(st);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+77
-45
@@ -7,54 +7,86 @@ I64 HasLower(U8 *src)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
U0 HashFunSegFind(CHashTable *h,U8 *addr,
|
||||
Bool *_has_lower,U64 *_best,CHash **_res)
|
||||
{
|
||||
Bool *has_lower=*_has_lower;
|
||||
CHashExport *tempex;
|
||||
U64 i,j,best=*_best;
|
||||
CHash *res=*_res;
|
||||
for (i=0;i<=h->mask;i++) {
|
||||
tempex=h->body[i];
|
||||
while (tempex) {
|
||||
j=0;
|
||||
if (tempex->type&HTT_FUN) {
|
||||
if (!Bt(&tempex(CHashFun *)->flags,Cf_EXTERN) &&
|
||||
!Bt(&tempex(CHashFun *)->flags,Ff_INTERNAL))
|
||||
j=tempex(CHashFun *)->executable_addr;
|
||||
} else if (tempex->type&HTT_EXPORT_SYS_SYM)
|
||||
j=tempex->val;
|
||||
if (j) {
|
||||
j=addr(I64)-j;
|
||||
if (0<=j<=best) {
|
||||
if (tempex->type&HTT_EXPORT_SYS_SYM) {
|
||||
if (j<best || j==best && !has_lower) {
|
||||
has_lower=HasLower(tempex->str);
|
||||
best=j;
|
||||
res=tempex;
|
||||
}
|
||||
} else if (tempex->type&HTT_FUN) {
|
||||
if (j<best || j==best &&
|
||||
(res && res->type&HTT_EXPORT_SYS_SYM||!has_lower)) {
|
||||
has_lower=HasLower(tempex->str);
|
||||
best=j;
|
||||
res=tempex;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tempex=tempex->next;
|
||||
}
|
||||
}
|
||||
*_has_lower=has_lower;
|
||||
*_best=best;
|
||||
*_res =res;
|
||||
}
|
||||
|
||||
CHash *FunSegFind(U8 *addr,I64 *_offset)
|
||||
{//See $LK,"Hash",A="HI:Hash"$.
|
||||
CHash *result=NULL;
|
||||
CHashExport *tempex;
|
||||
CHash *res=NULL;
|
||||
Bool has_lower=FALSE;
|
||||
CHashTable *h=Fs->hash_table;
|
||||
U64 i,j,best=0xFFFF;
|
||||
CTask *task;
|
||||
CHashTable *h;
|
||||
CCPU *c;
|
||||
U64 i,best=0xFFFF;
|
||||
if (!ChkCodePtr(addr)) {
|
||||
*_offset=best;
|
||||
return NULL;
|
||||
}
|
||||
while (h) {
|
||||
for (i=0;i<=h->mask;i++) {
|
||||
tempex=h->body[i];
|
||||
while (tempex) {
|
||||
j=0;
|
||||
if (tempex->type&HTT_FUN) {
|
||||
if (!Bt(&tempex(CHashFun *)->flags,Cf_EXTERN) &&
|
||||
!Bt(&tempex(CHashFun *)->flags,Ff_INTERNAL))
|
||||
j=tempex(CHashFun *)->executable_addr;
|
||||
} else if (tempex->type&HTT_EXPORT_SYS_SYM)
|
||||
j=tempex->val;
|
||||
if (j) {
|
||||
j=addr(I64)-j;
|
||||
if (0<=j<=best) {
|
||||
if (tempex->type&HTT_EXPORT_SYS_SYM) {
|
||||
if (j<best || j==best && !has_lower) {
|
||||
has_lower=HasLower(tempex->str);
|
||||
best=j;
|
||||
result=tempex;
|
||||
}
|
||||
} else if (tempex->type&HTT_FUN) {
|
||||
if (j<best || j==best &&
|
||||
(result && result->type&HTT_EXPORT_SYS_SYM||!has_lower)) {
|
||||
has_lower=HasLower(tempex->str);
|
||||
best=j;
|
||||
result=tempex;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (IsDbg)
|
||||
for (i=0;i<mp_cnt;i++) {
|
||||
c=&cpu_structs[i];
|
||||
task=c->seth_task;
|
||||
do {
|
||||
if (!TaskValidate(task)) goto fs_abort_task;
|
||||
h=task->hash_table;
|
||||
while (h) {
|
||||
HashFunSegFind(h,addr,&has_lower,&best,&res);
|
||||
h=h->next;
|
||||
}
|
||||
tempex=tempex->next;
|
||||
}
|
||||
task=task->next_task;
|
||||
} while (task!=c->seth_task);
|
||||
fs_abort_task:
|
||||
}
|
||||
else {
|
||||
h=Fs->hash_table;
|
||||
while (h) {
|
||||
HashFunSegFind(h,addr,&has_lower,&best,&res);
|
||||
h=h->next;
|
||||
}
|
||||
h=h->next;
|
||||
}
|
||||
*_offset=best;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 FunSegCacheAdd(CHash *temps,U8 *addr)
|
||||
@@ -270,29 +302,29 @@ Bool PutSrcLink(U8 *addr,I64 cnt=1,U8 *buf=NULL)
|
||||
Bool E(U8 *addr,I64 cnt=512,I64 edf_dof_flags=0)
|
||||
{//Edit src at addr.
|
||||
U8 *st;
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
if (st=SrcEdLink(addr,cnt)) {
|
||||
if (IsRaw)
|
||||
result=EdLiteFileLine(st,edf_dof_flags);
|
||||
res=EdLiteFileLine(st,edf_dof_flags);
|
||||
else
|
||||
result=Ed(st,edf_dof_flags);
|
||||
res=Ed(st,edf_dof_flags);
|
||||
Free(st);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool Man(U8 *st,I64 edf_dof_flags=0)
|
||||
{//Owner's manual for symbol. Edit src code for symbol.
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
U8 **st2;
|
||||
CHashSrcSym *temph;
|
||||
if (IsRaw) {
|
||||
if ((temph=HashFind(st,Fs->hash_table,HTG_SRC_SYM)) && temph->src_link)
|
||||
result=EdLiteFileLine(temph->src_link,edf_dof_flags);
|
||||
res=EdLiteFileLine(temph->src_link,edf_dof_flags);
|
||||
} else {
|
||||
st2=MStrPrint("MN:%s",st);
|
||||
result=Ed(st2,edf_dof_flags);
|
||||
res=Ed(st2,edf_dof_flags);
|
||||
Free(st2);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+53
-53
@@ -9,33 +9,33 @@ U0 LinkedLstDel(U8 **_lst)
|
||||
}
|
||||
|
||||
U8 *LinkedLstCopy(U8 **_lst,CTask *mem_task=NULL)
|
||||
{//MAlloc identical copy of entire linked-list.
|
||||
U8 *result=NULL,**templ=&result;
|
||||
{//MAlloc ident copy of entire linked-list.
|
||||
U8 *res=NULL,**templ=&res;
|
||||
while (_lst) {
|
||||
templ=*templ=MAllocIdentical(_lst,mem_task);
|
||||
templ=*templ=MAllocIdent(_lst,mem_task);
|
||||
_lst=*_lst;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 LinkedLstCnt(U8 **_lst)
|
||||
{//Count of nodes in linked-list.
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
while (_lst) {
|
||||
result++;
|
||||
res++;
|
||||
_lst=*_lst;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 LinkedLstSize(U8 **_lst)
|
||||
{//Mem size of all nodes in linked-list.
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
while (_lst) {
|
||||
result+=MSize2(_lst);
|
||||
res+=MSize2(_lst);
|
||||
_lst=*_lst;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 QueDel(CQue *root,Bool querem=FALSE)
|
||||
@@ -51,65 +51,65 @@ U0 QueDel(CQue *root,Bool querem=FALSE)
|
||||
}
|
||||
|
||||
CQue *QueCopy(CQue *root,CTask *mem_task=NULL)
|
||||
{//MAlloc identical copy of entire queue and root.
|
||||
CQue *result=MAllocIdentical(root,mem_task),*tempq=root->next,*tempq1;
|
||||
QueInit(result);
|
||||
{//MAlloc ident copy of entire queue and root.
|
||||
CQue *res=MAllocIdent(root,mem_task),*tempq=root->next,*tempq1;
|
||||
QueInit(res);
|
||||
while (tempq!=root) {
|
||||
tempq1=MAllocIdentical(tempq,mem_task);
|
||||
QueIns(tempq1,result->last);
|
||||
tempq1=MAllocIdent(tempq,mem_task);
|
||||
QueIns(tempq1,res->last);
|
||||
tempq=tempq->next;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 QueCnt(CQue *root)
|
||||
{//Count of nodes in queue, not root.
|
||||
CQue *tempq=root->next;
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
while (tempq!=root) {
|
||||
result++;
|
||||
res++;
|
||||
tempq=tempq->next;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 QueSize(CQue *root)
|
||||
{//Mem size of all nodes in queue, not root.
|
||||
CQue *tempq=root->next;
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
while (tempq!=root) {
|
||||
result+=MSize2(tempq);
|
||||
res+=MSize2(tempq);
|
||||
tempq=tempq->next;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CQueVectU8 *QueVectU8New(I64 min_index=0)
|
||||
CQueVectU8 *QueVectU8New(I64 min_idx=0)
|
||||
{//Create new queue vecter.
|
||||
CQueVectU8 *result=MAlloc(sizeof(CQueVectU8));
|
||||
QueInit(result);
|
||||
result->total_cnt=result->node_cnt=0;
|
||||
result->min_index=min_index;
|
||||
return result;
|
||||
CQueVectU8 *res=MAlloc(sizeof(CQueVectU8));
|
||||
QueInit(res);
|
||||
res->total_cnt=res->node_cnt=0;
|
||||
res->min_idx=min_idx;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 QueVectU8Put(CQueVectU8 *v,I64 index,U8 ch)
|
||||
{//Put U8 at index i.
|
||||
U0 QueVectU8Put(CQueVectU8 *v,I64 idx,U8 ch)
|
||||
{//Put U8 at idx i.
|
||||
CQueVectU8 *tempv;
|
||||
index-=v->min_index;
|
||||
if (index<0) return;
|
||||
if (index<v->total_cnt) {
|
||||
idx-=v->min_idx;
|
||||
if (idx<0) return;
|
||||
if (idx<v->total_cnt) {
|
||||
tempv=v;
|
||||
do {
|
||||
index-=tempv->node_cnt;
|
||||
if (index<0) {
|
||||
tempv->body[index+tempv->node_cnt]=ch;
|
||||
idx-=tempv->node_cnt;
|
||||
if (idx<0) {
|
||||
tempv->body[idx+tempv->node_cnt]=ch;
|
||||
return;
|
||||
}
|
||||
tempv=tempv->next;
|
||||
} while (tempv!=v);
|
||||
} else
|
||||
index-=v->total_cnt;
|
||||
idx-=v->total_cnt;
|
||||
|
||||
while (TRUE) {
|
||||
tempv=v->last;
|
||||
@@ -118,7 +118,7 @@ U0 QueVectU8Put(CQueVectU8 *v,I64 index,U8 ch)
|
||||
tempv->node_cnt=0;
|
||||
QueIns(tempv,v->last);
|
||||
}
|
||||
if (index--) {
|
||||
if (idx--) {
|
||||
tempv->body[tempv->node_cnt++]=0;
|
||||
v->total_cnt++;
|
||||
} else {
|
||||
@@ -137,16 +137,16 @@ U0 QueVectU8Del(CQueVectU8 *v)
|
||||
}
|
||||
}
|
||||
|
||||
I64 QueVectU8Get(CQueVectU8 *v,I64 index)
|
||||
{//Get U8 at index i.
|
||||
I64 QueVectU8Get(CQueVectU8 *v,I64 idx)
|
||||
{//Get U8 at idx i.
|
||||
CQueVectU8 *tempv;
|
||||
index-=v->min_index;
|
||||
if (!(0<=index<v->total_cnt)) return 0;
|
||||
idx-=v->min_idx;
|
||||
if (!(0<=idx<v->total_cnt)) return 0;
|
||||
tempv=v;
|
||||
do {
|
||||
index-=tempv->node_cnt;
|
||||
if (index<0)
|
||||
return tempv->body[index+tempv->node_cnt];
|
||||
idx-=tempv->node_cnt;
|
||||
if (idx<0)
|
||||
return tempv->body[idx+tempv->node_cnt];
|
||||
tempv=tempv->next;
|
||||
} while (tempv!=v);
|
||||
return 0;
|
||||
@@ -226,15 +226,15 @@ U0 FifoU8Flush(CFifoU8 *f)
|
||||
|
||||
I64 FifoU8Cnt(CFifoU8 *f)
|
||||
{//Count of U8's in fifo.
|
||||
I64 result;
|
||||
I64 res;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (f->out_ptr>f->in_ptr)
|
||||
result=f->mask+1-(f->out_ptr-f->in_ptr);
|
||||
res=f->mask+1-(f->out_ptr-f->in_ptr);
|
||||
else
|
||||
result=f->in_ptr-f->out_ptr;
|
||||
res=f->in_ptr-f->out_ptr;
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CFifoI64 *FifoI64New(I64 size,CTask *mem_task=NULL)
|
||||
@@ -311,13 +311,13 @@ U0 FifoI64Flush(CFifoI64 *f)
|
||||
|
||||
I64 FifoI64Cnt(CFifoI64 *f)
|
||||
{//Count of I64's in fifo.
|
||||
I64 result;
|
||||
I64 res;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (f->out_ptr>f->in_ptr)
|
||||
result=f->mask+1-(f->out_ptr-f->in_ptr);
|
||||
res=f->mask+1-(f->out_ptr-f->in_ptr);
|
||||
else
|
||||
result=f->in_ptr-f->out_ptr;
|
||||
res=f->in_ptr-f->out_ptr;
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+3
-3
@@ -122,12 +122,12 @@ I64 LastDayOfYear(I64 i)
|
||||
|
||||
I64 Bcd2Bin(U64 b)
|
||||
{
|
||||
I64 i,result=0;
|
||||
I64 i,res=0;
|
||||
for (i=0;i<16;i++) {
|
||||
result=result*10+b>>60;
|
||||
res=res*10+b>>60;
|
||||
b<<=4;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 NowDateTimeStruct(CDateStruct *_ds)
|
||||
|
||||
+27
-29
@@ -30,31 +30,31 @@ Bool ChkCodePtr(U8 *ptr)
|
||||
|
||||
Bool ChkOnStk(U8 *ptr,CTask *task=NULL)
|
||||
{//Check if addr is valid stk addr.
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (task) {
|
||||
if (&task->stk->stk_base<=ptr<=
|
||||
(&task->stk->stk_base)(U8 *)+task->stk->stk_size)
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
} else if (sys_heap_base<=ptr<=sys_heap_limit)
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 UnusedStk(CTask *task=NULL)
|
||||
{//Count of usused bytes in task's stk.
|
||||
I64 result;
|
||||
I64 res;
|
||||
if (!task) task=Fs;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (task==Fs)
|
||||
result=GetRSP()(U8 *)-(&task->stk->stk_base)(U8 *);
|
||||
res=GetRSP()(U8 *)-(&task->stk->stk_base)(U8 *);
|
||||
else
|
||||
result=task->rsp(U8 *)-(&task->stk->stk_base)(U8 *);
|
||||
res=task->rsp(U8 *)-(&task->stk->stk_base)(U8 *);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *Caller(I64 num=1)
|
||||
@@ -343,7 +343,7 @@ U8 *SysGetStr2(I64)
|
||||
|
||||
CBpt *BptFind(U8 *needle_addr,CTask *haystack_task=NULL,Bool rem=FALSE)
|
||||
{
|
||||
CBpt *result=NULL,*tempb,*tempb1,*tempb2;
|
||||
CBpt *res=NULL,*tempb,*tempb1,*tempb2;
|
||||
if (!haystack_task) haystack_task=Fs;
|
||||
PUSHFD
|
||||
CLI
|
||||
@@ -352,7 +352,7 @@ CBpt *BptFind(U8 *needle_addr,CTask *haystack_task=NULL,Bool rem=FALSE)
|
||||
while (tempb) {
|
||||
tempb2=tempb->next;
|
||||
if (tempb->addr==needle_addr) {
|
||||
result=tempb;
|
||||
res=tempb;
|
||||
if (rem)
|
||||
tempb1->next=tempb2;
|
||||
else
|
||||
@@ -362,13 +362,13 @@ CBpt *BptFind(U8 *needle_addr,CTask *haystack_task=NULL,Bool rem=FALSE)
|
||||
tempb=tempb2;
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool BptS(U8 *addr,CTask *task=NULL,Bool live=TRUE)
|
||||
{//Set breakpoint.
|
||||
CBpt *tempb;
|
||||
Bool result=TRUE;
|
||||
Bool res=TRUE;
|
||||
if (!task) task=Fs;
|
||||
PUSHFD
|
||||
CLI
|
||||
@@ -376,53 +376,53 @@ Bool BptS(U8 *addr,CTask *task=NULL,Bool live=TRUE)
|
||||
tempb=CAlloc(sizeof(CBpt),task);
|
||||
tempb->addr=addr;
|
||||
tempb->val=*addr;
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
tempb->next=task->bpt_lst;
|
||||
task->bpt_lst=tempb;
|
||||
if (task==Fs && live)
|
||||
*addr=OC_BPT;
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool BptR(U8 *addr,CTask *task=NULL,Bool live=TRUE,Bool rem=TRUE)
|
||||
{//Rem breakpoint.
|
||||
CBpt *tempb;
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
if (!task) task=Fs;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (tempb=BptFind(addr,task,rem)) {
|
||||
if (task==Fs && live)
|
||||
*tempb->addr=tempb->val;
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
if (rem)
|
||||
Free(tempb);
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool B(U8 *addr,CTask *task=NULL,Bool live=TRUE)
|
||||
{//Toggle breakpoint.
|
||||
//Return: TRUE if removed.
|
||||
Bool result=FALSE;
|
||||
Bool res=FALSE;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (BptFind(addr,task,FALSE)) {
|
||||
BptR(addr,task,live,TRUE);
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
} else
|
||||
BptS(addr,task,live);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 B2(CTask *task=NULL,Bool live=TRUE)
|
||||
{//Rem all breakpoints.
|
||||
//Return: cnt of removed.
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
CBpt *tempb,*tempb1;
|
||||
if (!task) task=Fs;
|
||||
PUSHFD
|
||||
@@ -435,10 +435,10 @@ I64 B2(CTask *task=NULL,Bool live=TRUE)
|
||||
*tempb->addr=tempb->val;
|
||||
Free(tempb);
|
||||
tempb=tempb1;
|
||||
result++;
|
||||
res++;
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 G(U8 *ip=INVALID_PTR,CTask *task=NULL)
|
||||
@@ -509,7 +509,7 @@ U0 DbgHelp()
|
||||
">CallerRep;\t\t\t//Stack trace report.\n"
|
||||
">Da(_RSP);\t\t\t//Dump stk.\n"
|
||||
">Dr;\t\t\t\t//Dump Regs.\n"
|
||||
">1+2*3+&Print;\t\t\t//Show calculation result.\n"
|
||||
">1+2*3+&Print;\t\t\t//Show calculation res.\n"
|
||||
">*(0x70000)(I64 *)=0x123456789;\t//Assign value to 0x70000-0x70007.\n"
|
||||
">_RAX=0x1234;\t\t\t//Set RAX to 0x1234.\n"
|
||||
">_RIP=&SysThrowBreak;\t\t//Set RIP.\n"
|
||||
@@ -561,10 +561,8 @@ U0 Dbg2()
|
||||
U0 Fault3(I64 fault_num,I64 fault_err_code)
|
||||
{
|
||||
nounusedwarn fault_err_code;
|
||||
Bool was_in_dbg;
|
||||
PUSHFD
|
||||
CLI
|
||||
was_in_dbg=InDbg(ON);
|
||||
if (Gs->num && dbg.mp_crash) {
|
||||
mp_cnt=1;
|
||||
dbg.mp_crash->cpu_num=Gs->num;
|
||||
@@ -588,14 +586,13 @@ U0 Fault3(I64 fault_num,I64 fault_err_code)
|
||||
}
|
||||
CallerRep;
|
||||
Dbg2;
|
||||
InDbg(was_in_dbg);
|
||||
POPFD
|
||||
}
|
||||
|
||||
U0 Fault2(I64 fault_num,I64 fault_err_code)
|
||||
{//Called from $LK,"Fault2",A="FF:::/Kernel/KInts.CPP,Fault2"$.
|
||||
//$BK,1$Be careful not to swap-out and ruin the saved context$BK,0$
|
||||
Bool was_raw,was_single_user,was_silent;
|
||||
Bool was_raw,was_single_user,was_silent,was_in_dbg;
|
||||
I64 i,old_raw_flags=text.raw_flags;
|
||||
was_single_user=SingleUser(ON);
|
||||
if (!IsDbg)
|
||||
@@ -615,6 +612,7 @@ U0 Fault2(I64 fault_num,I64 fault_err_code)
|
||||
"\"\n";
|
||||
"Fault:0x%02X %Z\t\tErr Code:%08X\n",
|
||||
fault_num,fault_num,"ST_INT_NAMES",fault_err_code;
|
||||
was_in_dbg=InDbg(ON);
|
||||
"RIP:%08X",Fs->rip; //Sometimes crashes on %p, so do this first
|
||||
":%p RSP:%08X\n",Fs->rip,Fs->rsp;
|
||||
if (fault_num==I_PAGE_FAULT) {
|
||||
@@ -623,7 +621,7 @@ U0 Fault2(I64 fault_num,I64 fault_err_code)
|
||||
"Fault Addr:%08X:%p\n",i,i;
|
||||
}
|
||||
Fault3(fault_num,fault_err_code);
|
||||
|
||||
InDbg(was_in_dbg);
|
||||
Silent(was_silent);
|
||||
Raw(was_raw);
|
||||
text.raw_flags=old_raw_flags;
|
||||
|
||||
+43
-43
@@ -1,8 +1,8 @@
|
||||
CHashDefineStr *DefineLoad(U8 *name,U8 *st)
|
||||
CHashDefineStr *DefineLoad(U8 *dname,U8 *st)
|
||||
{//Create DEFINE hash entry with string.
|
||||
CHashDefineStr *temph=CAlloc(sizeof(CHashDefineStr));
|
||||
temph->type=HTT_DEFINE_STR;
|
||||
temph->str=StrNew(name);
|
||||
temph->str=StrNew(dname);
|
||||
temph->data=StrNew(st);
|
||||
temph->cnt=-1;
|
||||
temph->src_link=MStrPrint("AD:0x%X",Caller);
|
||||
@@ -10,29 +10,29 @@ CHashDefineStr *DefineLoad(U8 *name,U8 *st)
|
||||
return temph;
|
||||
}
|
||||
|
||||
CHashDefineStr *DefineLstLoad(U8 *name,U8 *st)
|
||||
CHashDefineStr *DefineLstLoad(U8 *dname,U8 *lst)
|
||||
{//Create DEFINE list. Not efficient, but handy.
|
||||
I64 cnt=0;
|
||||
U8 *ptr,**lst;
|
||||
U8 *ptr,**idx;
|
||||
CHashDefineStr *temph=CAlloc(sizeof(CHashDefineStr));
|
||||
temph->type=HTT_DEFINE_STR;
|
||||
temph->str=StrNew(name);
|
||||
temph->str=StrNew(dname);
|
||||
temph->src_link=MStrPrint("AD:0x%X",Caller);
|
||||
ptr=st;
|
||||
ptr=lst;
|
||||
while (*ptr) {
|
||||
if (*ptr!='@')
|
||||
cnt++;
|
||||
while (*ptr++);
|
||||
}
|
||||
temph->data=MAlloc(ptr+1-st);
|
||||
MemCpy(temph->data,st,ptr+1-st);
|
||||
temph->data=MAlloc(ptr+1-lst);
|
||||
MemCpy(temph->data,lst,ptr+1-lst);
|
||||
temph->cnt=cnt;
|
||||
|
||||
lst=temph->sub_lst=MAlloc(cnt*sizeof(U8 *));
|
||||
ptr=st;
|
||||
idx=temph->sub_idx=MAlloc(cnt*sizeof(U8 *));
|
||||
ptr=lst;
|
||||
while (*ptr) {
|
||||
if (*ptr!='@')
|
||||
*lst++=ptr;
|
||||
*idx++=ptr;
|
||||
while (*ptr++);
|
||||
}
|
||||
|
||||
@@ -40,57 +40,57 @@ CHashDefineStr *DefineLstLoad(U8 *name,U8 *st)
|
||||
return temph;
|
||||
}
|
||||
|
||||
U0 UndefinedDefine(U8 *name)
|
||||
U0 UndefinedDefine(U8 *dname)
|
||||
{
|
||||
ST_ERR_ST "Undefined Define: '%s'.\n",name;
|
||||
ST_ERR_ST "Undefined Define: '%s'.\n",dname;
|
||||
throw('UndefDef');
|
||||
}
|
||||
|
||||
U8 *Define(U8 *name)
|
||||
U8 *Define(U8 *dname)
|
||||
{//Look for DEFINE named in hash table, return ptr string.
|
||||
CHashDefineStr *temph;
|
||||
if (temph=HashFind(name,Fs->hash_table,HTT_DEFINE_STR))
|
||||
if (temph=HashFind(dname,Fs->hash_table,HTT_DEFINE_STR))
|
||||
return temph->data;
|
||||
else if (name)
|
||||
UndefinedDefine(name);
|
||||
else if (dname)
|
||||
UndefinedDefine(dname);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
U8 *DefineSub(I64 sub,U8 *name)
|
||||
U8 *DefineSub(I64 sub,U8 *dname)
|
||||
{//Return DEFINE list entry indexed by number.
|
||||
CHashDefineStr *temph;
|
||||
if (temph=HashFind(name,Fs->hash_table,HTT_DEFINE_STR)) {
|
||||
if (temph=HashFind(dname,Fs->hash_table,HTT_DEFINE_STR)) {
|
||||
if (0<=sub<temph->cnt)
|
||||
return temph->sub_lst[sub];
|
||||
return temph->sub_idx[sub];
|
||||
else
|
||||
return NULL;
|
||||
} else if (name)
|
||||
UndefinedDefine(name);
|
||||
} else if (dname)
|
||||
UndefinedDefine(dname);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
I64 DefineCnt(U8 *name)
|
||||
I64 DefineCnt(U8 *dname)
|
||||
{//Return cnt of entries in define list.
|
||||
CHashDefineStr *temph;
|
||||
if (temph=HashFind(name,Fs->hash_table,HTT_DEFINE_STR))
|
||||
if (temph=HashFind(dname,Fs->hash_table,HTT_DEFINE_STR))
|
||||
return temph->cnt;
|
||||
else if (name)
|
||||
UndefinedDefine(name);
|
||||
else if (dname)
|
||||
UndefinedDefine(dname);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
I64 DefineMatch(U8 *needle,U8 *haystack_lst_name,I64 flags=0)
|
||||
I64 DefineMatch(U8 *needle,U8 *haystack_lst_dname,I64 flags=0)
|
||||
{//Find match for string in define list.
|
||||
return LstMatch(needle,Define(haystack_lst_name),flags);
|
||||
return LstMatch(needle,Define(haystack_lst_dname),flags);
|
||||
}
|
||||
|
||||
U0 DefinePrint(U8 *name,U8 *src,...)
|
||||
U0 DefinePrint(U8 *dname,U8 *src,...)
|
||||
{//Create DEFINE entry with $LK,"Print",A="FI:::/Doc/Print.TXT"$()ed string.
|
||||
U8 *buf=StrPrintJoin(NULL,src,argc,argv);
|
||||
DefineLoad(name,buf);
|
||||
DefineLoad(dname,buf);
|
||||
Free(buf);
|
||||
}
|
||||
|
||||
@@ -156,13 +156,13 @@ U8 *str2color_lst="/,)}>";
|
||||
|
||||
CColorROPU16 Str2ColorU16(U8 *st)
|
||||
{//$LK,"DCLighting",A="MN:DCLighting"$ color str with flags to $LK,"CColorROPU16",A="MN:CColorROPU16"$.
|
||||
CColorROPU16 result=COLOR_INVALID;
|
||||
CColorROPU16 res=COLOR_INVALID;
|
||||
I64 i;
|
||||
U8 *ptr,*ptr2,*st2;
|
||||
if (!st) return COLOR_INVALID;
|
||||
while (TRUE) {
|
||||
if (!*st||StrOcc(str2color_lst,*st))
|
||||
return result;
|
||||
return res;
|
||||
if (Bt(chars_bmp_alpha,*st)) {
|
||||
ptr=st;
|
||||
while (Bt(chars_bmp_alpha_numeric,*ptr))
|
||||
@@ -172,13 +172,13 @@ CColorROPU16 Str2ColorU16(U8 *st)
|
||||
*ptr2++=*st++;
|
||||
*ptr2++=0;
|
||||
if (!StrICmp(st2,"TWO"))
|
||||
result.rop|=ROPBF_TWO_SIDED;
|
||||
res.rop|=ROPBF_TWO_SIDED;
|
||||
else if (!StrICmp(st2,"HALF"))
|
||||
result.rop|=ROPBF_HALF_RANGE_COLOR;
|
||||
res.rop|=ROPBF_HALF_RANGE_COLOR;
|
||||
else if ((i=DefineMatch(st2,"ST_COLORS",LMF_IGNORE_CASE))>=0)
|
||||
result.color=i;
|
||||
res.color=i;
|
||||
else if (!StrICmp(st2,"TRANSPARENT"))
|
||||
result.color=TRANSPARENT;
|
||||
res.color=TRANSPARENT;
|
||||
else {
|
||||
Free(st2);
|
||||
return COLOR_INVALID;
|
||||
@@ -189,7 +189,7 @@ CColorROPU16 Str2ColorU16(U8 *st)
|
||||
else if ('0'<=*st<='9') {
|
||||
i=Str2I64(st,10,&ptr);
|
||||
if (0<=i<=0xFF) {
|
||||
result.color=i;
|
||||
res.color=i;
|
||||
st=ptr;
|
||||
} else
|
||||
return COLOR_INVALID;
|
||||
@@ -201,17 +201,17 @@ CColorROPU16 Str2ColorU16(U8 *st)
|
||||
CColorROPU32 Str2ColorU32(U8 *st)
|
||||
{//$LK,"DCLighting",A="MN:DCLighting"$ color str with flags to $LK,"CColorROPU32",A="MN:CColorROPU32"$.
|
||||
U8 *st2;
|
||||
CColorROPU32 result=0;
|
||||
CColorROPU32 res=0;
|
||||
if (!st) return COLOR_INVALID;
|
||||
st2=MAlloc(StrLen(st)+1);
|
||||
StrFirstRem(st,str2color_lst,st2);
|
||||
result.c0=Str2ColorU16(st2);
|
||||
res.c0=Str2ColorU16(st2);
|
||||
if (*st) {
|
||||
result.c1=Str2ColorU16(st);
|
||||
result|=ROPF_DITHER;
|
||||
res.c1=Str2ColorU16(st);
|
||||
res|=ROPF_DITHER;
|
||||
}
|
||||
if (result.c0.color==COLOR_INVALID||result.c1.color==COLOR_INVALID)
|
||||
if (res.c0.color==COLOR_INVALID||res.c1.color==COLOR_INVALID)
|
||||
return COLOR_INVALID;
|
||||
else
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+4
-5
@@ -66,6 +66,7 @@ U0 SysGrInit()
|
||||
text.font=sys_font_8x8;
|
||||
text.aux_font=MAlloc(256*FONT_HEIGHT);
|
||||
MemCpy(text.aux_font,text.font,256*FONT_HEIGHT);
|
||||
text.vga_alias=MemVGAAlloc+VGAM_GRAPHICS;
|
||||
if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode
|
||||
text.cols=80;
|
||||
text.rows=25;
|
||||
@@ -73,9 +74,9 @@ U0 SysGrInit()
|
||||
} else { //if 640x480 16 color
|
||||
text.cols=GR_WIDTH/FONT_WIDTH;
|
||||
text.rows=GR_HEIGHT/FONT_HEIGHT;
|
||||
OutU8(VGAP_INDEX,VGAR_MAP_MASK);
|
||||
OutU8(VGAP_IDX,VGAR_MAP_MASK);
|
||||
OutU8(VGAP_DATA,0x0F);
|
||||
MemSet(VGAM_GRAPHICS,0,GR_WIDTH*GR_HEIGHT>>3);
|
||||
MemSet(text.vga_alias,0,GR_WIDTH*GR_HEIGHT>>3);
|
||||
text.raw_screen_image=CAlloc(GR_WIDTH*GR_HEIGHT/8);
|
||||
}
|
||||
}
|
||||
@@ -115,12 +116,10 @@ U0 TimersInit()
|
||||
|
||||
U0 Reboot()
|
||||
{//Hardware reset.
|
||||
U16 *_w=0x472;
|
||||
CLI
|
||||
if (mp_cnt>1)
|
||||
MPHalt;
|
||||
MemPagePresentMark(_w,TRUE);
|
||||
*_w=0;
|
||||
*0x472(U16 *)=0;
|
||||
OutU8(0x70,0x8F);
|
||||
OutU8(0x71,0x00);
|
||||
OutU8(0x70,0x00);
|
||||
|
||||
+3
-3
@@ -141,14 +141,14 @@ Bool BreakLock(CTask *task=NULL)
|
||||
|
||||
Bool BreakUnlock(CTask *task=NULL)
|
||||
{//Reenables <CTRL-ALT-c> and issues any pending breaks.
|
||||
Bool result;
|
||||
Bool res;
|
||||
if (!task) task=Fs;
|
||||
result=LBtr(&task->task_flags,TASKf_BREAK_LOCKED);
|
||||
res=LBtr(&task->task_flags,TASKf_BREAK_LOCKED);
|
||||
if (LBtr(&task->task_flags,TASKf_PENDING_BREAK)) {
|
||||
if (task==Fs)
|
||||
ThrowBreak;
|
||||
else
|
||||
task->rip=&ThrowBreak;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+6
-6
@@ -21,9 +21,9 @@ extern U8 *CatPrint(U8 *dst,U8 *fmt,...);
|
||||
extern Bool Cd(U8 *name,Bool make_dirs=FALSE);
|
||||
extern U0 Dbg(U8 *msg=NULL,I64 msg_num=0);
|
||||
extern U0 DbgHelp();
|
||||
extern U8 *Define(U8 *name);
|
||||
extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_name,I64 flags=0);
|
||||
extern U8 *DefineSub(I64 sub,U8 *name);
|
||||
extern U8 *Define(U8 *dname);
|
||||
extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_dname,I64 flags=0);
|
||||
extern U8 *DefineSub(I64 sub,U8 *dname);
|
||||
extern I64 Del(U8 *files_find_mask,Bool make_mask=FALSE,
|
||||
Bool del_dir=FALSE,Bool print_msg=TRUE);
|
||||
extern U8 *DftExt(U8 *name,U8 *extension);
|
||||
@@ -41,7 +41,7 @@ extern Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee,
|
||||
Bool free_old_chain);
|
||||
extern U0 FAT32DrvInit(CDrv *dv);
|
||||
extern Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
CDirEntry *_result,I64 fuf_flags=0);
|
||||
CDirEntry *_res,I64 fuf_flags=0);
|
||||
extern U8 *FileExtRem(U8 *src,U8 *dst=NULL);
|
||||
extern Bool FileFind(U8 *filename,CDirEntry *_de=NULL,I64 fuf_flags=0);
|
||||
extern U8 *FileNameAbs(U8 *name,I64 fuf_flags=0);
|
||||
@@ -53,7 +53,7 @@ extern I64 GetS(U8 *buf,I64 size,Bool allow_ext=TRUE);
|
||||
extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,
|
||||
CTask *task=NULL,CBlkPool *bp);
|
||||
extern Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
CDirEntry *_result,I64 fuf_flags=0);
|
||||
CDirEntry *_res,I64 fuf_flags=0);
|
||||
extern Bool ISODrvInit(CDrv *dv,I64 blk);
|
||||
extern Bool IsDbg();
|
||||
extern Bool IsDir(U8 *dir_name);
|
||||
@@ -76,7 +76,7 @@ extern Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tempdee,
|
||||
extern U0 RedSeaDrvInit(CDrv *dv);
|
||||
extern Bool RedSeaDrvValidate(U8 drv_let);
|
||||
extern Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name,
|
||||
CDirEntry *_result,I64 fuf_flags=0);
|
||||
CDirEntry *_res,I64 fuf_flags=0);
|
||||
extern U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE);
|
||||
extern U0 RedSeaFreeFreeLst(CDrv *dv);
|
||||
extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,
|
||||
|
||||
+28
-28
@@ -63,7 +63,7 @@ U0 HashDel(CHashSrcSym *temph)
|
||||
Free(temph->str);
|
||||
if (temph->type & HTG_SRC_SYM) {
|
||||
Free(temph->src_link);
|
||||
Free(temph->index);
|
||||
Free(temph->idx);
|
||||
Free(temph->import_name);
|
||||
LinkedLstDel(temph->ie_lst);
|
||||
if (temph->type & (HTT_FUN | HTT_EXPORT_SYS_SYM))
|
||||
@@ -106,7 +106,7 @@ U0 HashTableDel(CHashTable *table)
|
||||
|
||||
I64 HashTablePurge(CHashTable *table)
|
||||
{//Eliminate ExportSysSyms that have been usurped.
|
||||
I64 i,result=0;
|
||||
I64 i,res=0;
|
||||
CHashSrcSym *temph,*temph1,*temph2;
|
||||
if (!table) return 0;
|
||||
PUSHFD
|
||||
@@ -124,7 +124,7 @@ I64 HashTablePurge(CHashTable *table)
|
||||
if (temph2->type&HTG_TYPE_MASK==HTT_INVALID)
|
||||
temph2->type=HTT_KEYWORD;//Won't delete HTT_INVALID
|
||||
HashRemDel(temph2,table);
|
||||
result++;
|
||||
res++;
|
||||
break;
|
||||
}
|
||||
temph2=temph2->next;
|
||||
@@ -134,21 +134,21 @@ I64 HashTablePurge(CHashTable *table)
|
||||
}
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CHashGeneric *HashGenericAdd(U8 *name,I64 type,
|
||||
I64 u0=0,I64 u1=0,I64 u2=0,CTask *task=NULL)
|
||||
{//Add any type to task hash_table, 3 user_data values.
|
||||
if (!task) task=Fs;
|
||||
CHashGeneric *result=CAlloc(sizeof(CHashGeneric),task);
|
||||
result->type=type;
|
||||
result->user_data0=u0;
|
||||
result->user_data1=u1;
|
||||
result->user_data2=u2;
|
||||
result->str=StrNew(name,task);
|
||||
HashAdd(result,task->hash_table);
|
||||
return result;
|
||||
CHashGeneric *res=CAlloc(sizeof(CHashGeneric),task);
|
||||
res->type=type;
|
||||
res->user_data0=u0;
|
||||
res->user_data1=u1;
|
||||
res->user_data2=u2;
|
||||
res->str=StrNew(name,task);
|
||||
HashAdd(res,task->hash_table);
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 HashSrcFileSet(CCmpCtrl *cc,CHashSrcSym *h,I64 line_num_offset=0)
|
||||
@@ -160,24 +160,24 @@ U0 HashSrcFileSet(CCmpCtrl *cc,CHashSrcSym *h,I64 line_num_offset=0)
|
||||
h->src_link=MStrPrint("FL:%s,%d",tempf->full_name,line_num);
|
||||
if (Bt(&cc->opts,OPTf_KEEP_PRIVATE))
|
||||
h->type|=HTF_PRIVATE;
|
||||
Free(h->index);
|
||||
if (cc->cur_help_index && *cc->cur_help_index)
|
||||
h->index=StrNew(cc->cur_help_index);
|
||||
Free(h->idx);
|
||||
if (cc->cur_help_idx && *cc->cur_help_idx)
|
||||
h->idx=StrNew(cc->cur_help_idx);
|
||||
else
|
||||
h->index=NULL;
|
||||
h->idx=NULL;
|
||||
}
|
||||
|
||||
CHashGeneric *HashPublic(U8 *st,I64 mask,Bool val=TRUE)
|
||||
{//Mark a hash entry as public and $LK,"HashSrcFileSet",A="MN:HashSrcFileSet"$().
|
||||
CHashGeneric *result;
|
||||
if (result=HashFind(st,Fs->hash_table,mask)) {
|
||||
CHashGeneric *res;
|
||||
if (res=HashFind(st,Fs->hash_table,mask)) {
|
||||
if (val)
|
||||
result->type|=HTF_PUBLIC;
|
||||
res->type|=HTF_PUBLIC;
|
||||
else
|
||||
result->type&=~HTF_PUBLIC;
|
||||
if (result->type&HTG_SRC_SYM)
|
||||
HashSrcFileSet(Fs->last_lex,result);
|
||||
return result;
|
||||
res->type&=~HTF_PUBLIC;
|
||||
if (res->type&HTG_SRC_SYM)
|
||||
HashSrcFileSet(Fs->last_lex,res);
|
||||
return res;
|
||||
} else
|
||||
return NULL;
|
||||
}
|
||||
@@ -203,10 +203,10 @@ I64 HashLstAdd(U8 *lst,I64 type,CHashTable *table)
|
||||
return i;
|
||||
}
|
||||
|
||||
I64 HashDefineLstAdd(U8 *name,I64 type,CHashTable *table)
|
||||
I64 HashDefineLstAdd(U8 *dname,I64 type,CHashTable *table)
|
||||
{//Add define list to a hash table. See $LK,"::/Adam/DolDoc/DocInit.CPP",A="FF:::/Adam/DolDoc/DocInit.CPP,HashDefineLstAdd"$.
|
||||
CHashDefineStr *temph;
|
||||
if (temph=HashFind(name,Fs->hash_table,HTT_DEFINE_STR))
|
||||
if (temph=HashFind(dname,Fs->hash_table,HTT_DEFINE_STR))
|
||||
return HashLstAdd(temph->data,type,table);
|
||||
else
|
||||
return 0;
|
||||
@@ -240,11 +240,11 @@ I64 FramePtrSet(U8 *name,I64 val,CTask *task=NULL)
|
||||
I64 FramePtrDel(U8 *name,CTask *task=NULL)
|
||||
{//Remove entry and delete.
|
||||
CHashGeneric *temph;
|
||||
I64 result=0;
|
||||
I64 res=0;
|
||||
if (!task) task=Fs;
|
||||
if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) {
|
||||
result=temph->user_data0;
|
||||
res=temph->user_data0;
|
||||
HashRemDel(temph,task->hash_table);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
+10
-10
@@ -89,14 +89,14 @@ INT_FAULT_ERR_CODE_BITMAP::
|
||||
|
||||
U8 *IntEntryGet(I64 irq)
|
||||
{//Get interrupt vector.
|
||||
U8 *result;
|
||||
U8 *res;
|
||||
I64 *src;
|
||||
src=dev.idt(U8 *)+irq*16;
|
||||
result(I64).u16[0]=*src(U16 *);
|
||||
res(I64).u16[0]=*src(U16 *);
|
||||
src(U8 *)+=6;
|
||||
result(I64).u16[1]=*src(U16 *)++;
|
||||
result(I64).u32[1]=*src(U32 *);
|
||||
return result;
|
||||
res(I64).u16[1]=*src(U16 *)++;
|
||||
res(I64).u32[1]=*src(U32 *);
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *IntEntrySet(I64 irq,U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0)
|
||||
@@ -104,10 +104,10 @@ U8 *IntEntrySet(I64 irq,U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0)
|
||||
//See $LK,"::/Demo/Lectures/InterruptDemo.CPP"$.
|
||||
//See $LK,"::/Demo/MultiCore/Interrupts.CPP"$.
|
||||
I64 fp=fp_new_handler;
|
||||
U8 *result,*dst;
|
||||
U8 *res,*dst;
|
||||
PUSHFD
|
||||
CLI
|
||||
result=IntEntryGet(irq);
|
||||
res=IntEntryGet(irq);
|
||||
dst=dev.idt(U8 *)+irq*16;
|
||||
*dst(U16 *)++=fp.u16[0];
|
||||
*dst(U16 *)++=offset(CGDT.cs64);
|
||||
@@ -116,7 +116,7 @@ U8 *IntEntrySet(I64 irq,U0 (*fp_new_handler)(),I64 type=IDTET_IRQ,I64 dpl=0)
|
||||
*dst(U32 *)++=fp.u32[1];
|
||||
*dst(U32 *)=0;
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 IntsInit()
|
||||
@@ -159,7 +159,7 @@ interrupt U0 IntDivZero()
|
||||
U8 *IntFaultHandlersNew()
|
||||
{
|
||||
I64 i;
|
||||
U8 *result=MAlloc(256*7,Fs->code_heap),*dst=result;
|
||||
U8 *res=MAlloc(256*7,Fs->code_heap),*dst=res;
|
||||
for (i=0;i<256;i++) {
|
||||
*dst++=0x6A; //PUSH I8 xx
|
||||
*dst(I8 *)++=i;
|
||||
@@ -167,7 +167,7 @@ U8 *IntFaultHandlersNew()
|
||||
*dst(I32 *)=INT_FAULT-dst-4;
|
||||
dst+=4;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 IntInit1()
|
||||
|
||||
+18
-18
@@ -81,9 +81,9 @@ _D3_DIST_SQR::
|
||||
_D3_CROSS::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RDX,U64 SF_ARG1[RBP]
|
||||
MOV RBX,U64 SF_ARG2[RBP]
|
||||
MOV RAX,U64 SF_ARG3[RBP]
|
||||
MOV RAX,U64 SF_ARG1[RBP]
|
||||
MOV RDX,U64 SF_ARG2[RBP]
|
||||
MOV RBX,U64 SF_ARG3[RBP]
|
||||
|
||||
FLD U64 8[RDX]
|
||||
FMUL ST0,U64 16[RBX]
|
||||
@@ -130,9 +130,9 @@ _D3_DOT::
|
||||
_D3_ADD::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RDX,U64 SF_ARG1[RBP]
|
||||
MOV RBX,U64 SF_ARG2[RBP]
|
||||
MOV RAX,U64 SF_ARG3[RBP]
|
||||
MOV RAX,U64 SF_ARG1[RBP]
|
||||
MOV RDX,U64 SF_ARG2[RBP]
|
||||
MOV RBX,U64 SF_ARG3[RBP]
|
||||
FLD U64 [RDX]
|
||||
FADD ST0,U64 [RBX]
|
||||
FSTP U64 [RAX]
|
||||
@@ -148,9 +148,9 @@ _D3_ADD::
|
||||
_D3_SUB::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RDX,U64 SF_ARG1[RBP]
|
||||
MOV RBX,U64 SF_ARG2[RBP]
|
||||
MOV RAX,U64 SF_ARG3[RBP]
|
||||
MOV RAX,U64 SF_ARG1[RBP]
|
||||
MOV RDX,U64 SF_ARG2[RBP]
|
||||
MOV RBX,U64 SF_ARG3[RBP]
|
||||
FLD U64 [RDX]
|
||||
FSUB ST0,U64 [RBX]
|
||||
FSTP U64 [RAX]
|
||||
@@ -166,9 +166,9 @@ _D3_SUB::
|
||||
_D3_MUL::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RBX,U64 SF_ARG2[RBP]
|
||||
MOV RAX,U64 SF_ARG3[RBP]
|
||||
FLD U64 SF_ARG1[RBP]
|
||||
MOV RAX,U64 SF_ARG1[RBP]
|
||||
MOV RBX,U64 SF_ARG3[RBP]
|
||||
FLD U64 SF_ARG2[RBP]
|
||||
FLD ST0
|
||||
FMUL ST0,U64 [RBX]
|
||||
FSTP U64 [RAX]
|
||||
@@ -183,9 +183,9 @@ _D3_MUL::
|
||||
_D3_DIV::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U64 SF_ARG1[RBP]
|
||||
MOV RBX,U64 SF_ARG2[RBP]
|
||||
MOV RAX,U64 SF_ARG3[RBP]
|
||||
FLD U64 SF_ARG1[RBP]
|
||||
FLD U64 SF_ARG3[RBP]
|
||||
FLD ST0
|
||||
FDIVR ST0,U64 [RBX]
|
||||
FSTP U64 [RAX]
|
||||
@@ -304,13 +304,13 @@ _D3_DIV_EQU::
|
||||
_D3_UNIT::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RDX,U64 SF_ARG1[RBP]
|
||||
FLD U64 [RDX]
|
||||
MOV RAX,U64 SF_ARG1[RBP]
|
||||
FLD U64 [RAX]
|
||||
FMUL ST0,ST0
|
||||
FLD U64 8[RDX]
|
||||
FLD U64 8[RAX]
|
||||
FMUL ST0,ST0
|
||||
FADDP ST1,ST0
|
||||
FLD U64 16[RDX]
|
||||
FLD U64 16[RAX]
|
||||
FMUL ST0,ST0
|
||||
FADDP ST1,ST0
|
||||
FSQRT
|
||||
|
||||
+6
-6
@@ -1,10 +1,10 @@
|
||||
F64 Clamp(F64 num,F64 lo,F64 hi)
|
||||
F64 Clamp(F64 d,F64 lo,F64 hi)
|
||||
{//Clamp to F64 [] range.
|
||||
if (num<lo)
|
||||
if (d<lo)
|
||||
return lo;
|
||||
if (num>hi)
|
||||
if (d>hi)
|
||||
return hi;
|
||||
return num;
|
||||
return d;
|
||||
}
|
||||
|
||||
F64 Min(F64 n1,F64 n2)
|
||||
@@ -121,8 +121,8 @@ U64 RandU64()
|
||||
|
||||
F64 Rand()
|
||||
{//Random F64.
|
||||
I64 result=RandI64&0x3FFFFFFFFFFFFFFF;
|
||||
return result/ToF64(0x4000000000000000);
|
||||
I64 res=RandI64&0x3FFFFFFFFFFFFFFF;
|
||||
return res/ToF64(0x4000000000000000);
|
||||
}
|
||||
|
||||
I64 Seed(I64 seed=0,CTask *task=NULL)
|
||||
|
||||
+30
-35
@@ -6,42 +6,42 @@ U0 PortNop()
|
||||
|
||||
U16 EndianU16(U16 d)
|
||||
{//Swap big<-->little endian.
|
||||
I64 result=0;
|
||||
result.u8[1]=d.u8[0];
|
||||
result.u8[0]=d.u8[1];
|
||||
return result;
|
||||
I64 res=0;
|
||||
res.u8[1]=d.u8[0];
|
||||
res.u8[0]=d.u8[1];
|
||||
return res;
|
||||
}
|
||||
|
||||
U32 EndianU32(U32 d)
|
||||
{//Swap big<-->little endian.
|
||||
I64 result=0;
|
||||
result.u8[3]=d.u8[0];
|
||||
result.u8[2]=d.u8[1];
|
||||
result.u8[1]=d.u8[2];
|
||||
result.u8[0]=d.u8[3];
|
||||
return result;
|
||||
I64 res=0;
|
||||
res.u8[3]=d.u8[0];
|
||||
res.u8[2]=d.u8[1];
|
||||
res.u8[1]=d.u8[2];
|
||||
res.u8[0]=d.u8[3];
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 EndianI64(I64 d)
|
||||
{//Swap big<-->little endian.
|
||||
U64 result;
|
||||
result.u8[7]=d.u8[0];
|
||||
result.u8[6]=d.u8[1];
|
||||
result.u8[5]=d.u8[2];
|
||||
result.u8[4]=d.u8[3];
|
||||
result.u8[3]=d.u8[4];
|
||||
result.u8[2]=d.u8[5];
|
||||
result.u8[1]=d.u8[6];
|
||||
result.u8[0]=d.u8[7];
|
||||
return result;
|
||||
U64 res;
|
||||
res.u8[7]=d.u8[0];
|
||||
res.u8[6]=d.u8[1];
|
||||
res.u8[5]=d.u8[2];
|
||||
res.u8[4]=d.u8[3];
|
||||
res.u8[3]=d.u8[4];
|
||||
res.u8[2]=d.u8[5];
|
||||
res.u8[1]=d.u8[6];
|
||||
res.u8[0]=d.u8[7];
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 BCnt(I64 d)
|
||||
{//Count set bits in I64.
|
||||
I64 result=0,i;
|
||||
I64 res=0,i;
|
||||
for (i=0;i<8;i++)
|
||||
result+=set_bits_table[d.u8[i]];
|
||||
return result;
|
||||
res+=set_bits_table[d.u8[i]];
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 IntCore0TimerHandler(CTask *)
|
||||
@@ -60,7 +60,7 @@ U0 IntCore0TimerHandler(CTask *)
|
||||
|
||||
I64 SysTimerRead()
|
||||
{//System timer count with overflow already handled.
|
||||
I64 i,result;
|
||||
I64 i,res;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (mp_cnt>1)
|
||||
@@ -71,15 +71,10 @@ I64 SysTimerRead()
|
||||
if (InU8(0x20) & 1)
|
||||
i=-1;
|
||||
}
|
||||
result=cnts.timer+SYS_TIMER0_PERIOD-i;
|
||||
res=cnts.timer+SYS_TIMER0_PERIOD-i;
|
||||
LBtr(&sys_semas[SYS_SEMA_SYS_TIMER],0);
|
||||
POPFD
|
||||
return result;
|
||||
}
|
||||
|
||||
I64 TaskTotalTime()
|
||||
{//Total CPU cycles given to current task.
|
||||
return GetTSC-Fs->time_slice_start+Fs->total_time;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 TimeStampFreqCal()
|
||||
@@ -203,16 +198,16 @@ U0 Beep(I64 freq=500,Bool busy=FALSE)
|
||||
|
||||
Bool Mute(Bool val)
|
||||
{//Turn-off or on sound.
|
||||
Bool result;
|
||||
Bool res;
|
||||
if (val) {
|
||||
PUSHFD
|
||||
CLI
|
||||
Snd(0);
|
||||
result=LBts(&sys_semas[SYS_SEMA_MUTE],0);
|
||||
res=LBts(&sys_semas[SYS_SEMA_MUTE],0);
|
||||
POPFD
|
||||
} else
|
||||
result=LBtr(&sys_semas[SYS_SEMA_MUTE],0);
|
||||
return result;
|
||||
res=LBtr(&sys_semas[SYS_SEMA_MUTE],0);
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool IsMute()
|
||||
|
||||
+3
-3
@@ -269,10 +269,10 @@ CORE0_32BIT_INIT:: //Entry point for $LK,"RAMReboot",A="MN:RAMReboot"$.
|
||||
CALL SYS_FIND_PCI_SERVICES
|
||||
|
||||
MOV U32 [SYS_HEAP_BASE],SYS_FIXED_AREA+sizeof(CSysFixedArea)
|
||||
CALL SYS_INIT_MEM
|
||||
CALL SYS_INIT_PAGE_TABLES
|
||||
|
||||
PUSH U32 0 //Return from next call will be 64-bit
|
||||
CALL SYS_EM64T
|
||||
CALL SYS_ENTER_LONG_MODE
|
||||
USE64
|
||||
BTS U32 [SYS_RUN_LEVEL],RLf_64BIT
|
||||
|
||||
@@ -315,7 +315,7 @@ USE64
|
||||
|
||||
//************************************
|
||||
USE32
|
||||
SYS_EM64T:: //Switch to long 64-bit mode
|
||||
SYS_ENTER_LONG_MODE:: //Switch to long 64-bit mode
|
||||
MOV_EAX_CR4
|
||||
OR EAX,0xB0
|
||||
MOV_CR4_EAX
|
||||
|
||||
+11
-11
@@ -44,16 +44,16 @@ Bool Kill(CTask *task,Bool wait=TRUE)
|
||||
|
||||
Bool Suspend(CTask *task=NULL,Bool state=TRUE)
|
||||
{//Tell scheduler to skip task.
|
||||
Bool result;
|
||||
Bool res;
|
||||
if (!task) task=Fs;
|
||||
PUSHFD
|
||||
CLI
|
||||
if (TaskValidate(task))
|
||||
result=LBEqu(&task->task_flags,TASKf_SUSPENDED,state);
|
||||
res=LBEqu(&task->task_flags,TASKf_SUSPENDED,state);
|
||||
else
|
||||
result=FALSE;
|
||||
res=FALSE;
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool IsSuspended(CTask *task=NULL)
|
||||
@@ -80,7 +80,7 @@ argpop I64 CallStkGrow(I64 stk_size_threshold,I64 stk_size,
|
||||
{//Grow stk in call with any fixed num of args.
|
||||
//See $LK,"::/Demo/StkGrow.CPP"$.
|
||||
CTaskStk *temps,*temps2,**_stk;
|
||||
I64 result,*rsp,*rsp2,*old_stk;
|
||||
I64 res,*rsp,*rsp2,*old_stk;
|
||||
|
||||
if (UnusedStk>=stk_size_threshold) {
|
||||
|
||||
@@ -119,7 +119,7 @@ argpop I64 CallStkGrow(I64 stk_size_threshold,I64 stk_size,
|
||||
POPFD
|
||||
|
||||
CALL U64 &fp_addr[RBP]
|
||||
MOV U64 &result[RBP],RAX
|
||||
MOV U64 &res[RBP],RAX
|
||||
|
||||
PUSHFD
|
||||
POP RDX //flags
|
||||
@@ -136,7 +136,7 @@ argpop I64 CallStkGrow(I64 stk_size_threshold,I64 stk_size,
|
||||
|
||||
MOV RDX,U64 &old_stk[RBP]
|
||||
MOV RBX,U64 8[RBP]
|
||||
MOV RAX,U64 &result[RBP]
|
||||
MOV RAX,U64 &res[RBP]
|
||||
MOV RBP,U64 [RBP]
|
||||
MOV RSP,RDX
|
||||
JMP RBX //return
|
||||
@@ -267,7 +267,7 @@ U0 TaskDerivedValsUpdate(CTask *task=NULL,Bool update_z_buf=TRUE)
|
||||
|
||||
I64 ExeCmdLine(CCmpCtrl *cc)
|
||||
{//Terminal JIT-compile-and-execute loop for CCmpCtrl.
|
||||
I64 result=0,type,old_title_src=Fs->title_src;
|
||||
I64 res=0,type,old_title_src=Fs->title_src;
|
||||
U8 *ptr,*ptr2,*ptr3,*machine_code,*old_task_title=StrNew(Fs->task_title);
|
||||
F64 t0;
|
||||
CDocEntry *doc_e;
|
||||
@@ -306,8 +306,8 @@ I64 ExeCmdLine(CCmpCtrl *cc)
|
||||
if (machine_code!=INVALID_PTR) {
|
||||
if (!(cc->flags&CCF_JUST_LOAD)) {
|
||||
t0=tS;
|
||||
result=Call(machine_code);
|
||||
Fs->answer=result;
|
||||
res=Call(machine_code);
|
||||
Fs->answer=res;
|
||||
Fs->answer_type=type;
|
||||
Fs->answer_time=tS-t0;
|
||||
Fs->new_answer=TRUE;
|
||||
@@ -328,7 +328,7 @@ I64 ExeCmdLine(CCmpCtrl *cc)
|
||||
else
|
||||
return TRUE;
|
||||
} else
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 SrvTaskCont()
|
||||
|
||||
+2259
-2250
File diff suppressed because it is too large.
Load diff
+55
-57
@@ -161,7 +161,7 @@ public class CD3 //Three dimensional F64 pt
|
||||
public class CQueVectU8
|
||||
{
|
||||
CQueVectU8 *next,*last;
|
||||
I64 total_cnt,node_cnt,min_index;
|
||||
I64 total_cnt,node_cnt,min_idx;
|
||||
U8 body[QUE_VECT_U8_CNT];
|
||||
};
|
||||
|
||||
@@ -207,7 +207,8 @@ public class COrder2D3
|
||||
public class CMass
|
||||
{
|
||||
CMass *next,*last;
|
||||
COrder2D3 *state,*DstateDt;
|
||||
COrder2D3 *state, //Point to entries in $LK,"CMathODE",A="MN:CMathODE"$.state[]
|
||||
*DstateDt; //Point to entries in $LK,"CMathODE",A="MN:CMathODE"$.DstateDt[]
|
||||
|
||||
U0 start;
|
||||
U32 flags,num;
|
||||
@@ -721,7 +722,7 @@ class CDbgInfo
|
||||
public class CHashSrcSym:CHash
|
||||
{
|
||||
U8 *src_link,
|
||||
*index;
|
||||
*idx;
|
||||
CDbgInfo *dbg_info;
|
||||
U8 *import_name;
|
||||
CAOTImportExport *ie_lst;
|
||||
@@ -732,14 +733,15 @@ public class CHashGeneric:CHash
|
||||
I64 user_data0,user_data1,user_data2;
|
||||
};
|
||||
|
||||
#define REGT_R8 0
|
||||
#define REGT_R16 1
|
||||
#define REGT_R32 2
|
||||
#define REGT_R64 3
|
||||
#define REGT_SEG 4
|
||||
#define REGT_FSTK 5
|
||||
#define REGT_MM 6
|
||||
#define REGT_XMM 7
|
||||
#define REGT_NONE 0
|
||||
#define REGT_R8 1
|
||||
#define REGT_R16 2
|
||||
#define REGT_R32 3
|
||||
#define REGT_R64 4
|
||||
#define REGT_SEG 5
|
||||
#define REGT_FSTK 6
|
||||
#define REGT_MM 7
|
||||
#define REGT_XMM 8
|
||||
|
||||
public class CHashReg:CHash
|
||||
{
|
||||
@@ -819,7 +821,7 @@ class CExternUsage
|
||||
#help_index "Hash/System;Compiler/Internal"
|
||||
public class CHashDefineStr:CHashSrcSym
|
||||
{
|
||||
U8 *data,**sub_lst;
|
||||
U8 *data,**sub_idx;
|
||||
I64 cnt;
|
||||
};
|
||||
|
||||
@@ -1031,7 +1033,7 @@ public class CHashGlblVar:CHashSrcSym
|
||||
#define DOCEG_DONT_EDIT (DOCEF_DEFINE|DOCEF_HTML_LINK|\
|
||||
DOCEF_AUX_STR|DOCEF_BIN_PTR_LINK|DOCEF_SCROLLING_X|DOCEF_TAG_CB)
|
||||
|
||||
//These are identical to Doc flags
|
||||
//These are ident to Doc flags
|
||||
#define DOCEF_HIGHLIGHT 0x4000000
|
||||
#define DOCEF_WORD_WRAP 0x8000000
|
||||
#define DOCEF_BLINK ATTRF_BLINK
|
||||
@@ -1460,7 +1462,7 @@ class CWinMgrTimingGlbls
|
||||
I64 calc_idle_cnt;
|
||||
};
|
||||
|
||||
#define WMG_FPS 30
|
||||
#define WINMGR_FPS 30
|
||||
|
||||
public class CWinMgrGlbls
|
||||
{
|
||||
@@ -1593,29 +1595,28 @@ public class CAutoCompleteDictGlbls
|
||||
#define ICF_USE_F64 0x000000040
|
||||
#define ICF_USE_UNSIGNED 0x000000080
|
||||
#define ICF_USE_INT 0x000000100 //highest priority
|
||||
#define ICF_NO_DEPEND_RESULT 0x000000200
|
||||
#define ICF_RES_NOT_USED 0x000000200
|
||||
#define ICF_CODE_FINAL 0x000000400
|
||||
#define ICF_BY_VAL 0x000000800 //By value, not ref.
|
||||
#define ICF_SHORT_JMP 0x000001000
|
||||
#define ICF_PUSH_RESULT 0x000002000
|
||||
#define ICF_PUSH_RES 0x000002000
|
||||
#define ICF_PASS_TRACE 0x000004000
|
||||
#define ICF_R_WAS_STK 0x000008000
|
||||
#define ICF_A1_WAS_STK 0x000010000
|
||||
#define ICF_A2_WAS_STK 0x000020000
|
||||
#define ICF_PUSH_CMP 0x000040000 //for 50<i<j<=100 exps
|
||||
#define ICF_POP_CMP 0x000080000 //for 50<i<j<=100 exps
|
||||
#define ICF_DEPEND_RESULT 0x000100000
|
||||
#define ICF_SWAP 0x000200000
|
||||
#define ICf_DONT_PUSH_FLOAT0 22 // 3bits
|
||||
#define ICf_DONT_POP_FLOAT0 25 // 3bits
|
||||
#define ICF_ALT_TEMPLATE 0x010000000
|
||||
#define ICF_LOCK 0x020000000
|
||||
#define ICf_LOCK 29
|
||||
#define ICF_NO_RIP 0x040000000
|
||||
#define ICF_DEL_PREVIOUS_INS 0x080000000
|
||||
#define ICF_PREVIOUS_DELETED 0x100000000
|
||||
#define ICF_DONT_RESTORE 0x200000000
|
||||
#define ICG_NO_CVT_MASK 0x3FFFFFF00
|
||||
#define ICF_SWAP 0x000100000
|
||||
#define ICf_DONT_PUSH_FLOAT0 21 // 3bits
|
||||
#define ICf_DONT_POP_FLOAT0 24 // 3bits
|
||||
#define ICF_ALT_TEMPLATE 0x008000000
|
||||
#define ICF_LOCK 0x010000000
|
||||
#define ICf_LOCK 28
|
||||
#define ICF_NO_RIP 0x020000000
|
||||
#define ICF_DEL_PREV_INS 0x040000000
|
||||
#define ICF_PREV_DELETED 0x080000000
|
||||
#define ICF_DONT_RESTORE 0x100000000
|
||||
#define ICG_NO_CVT_MASK 0x1FFFFFF00
|
||||
|
||||
#define IC_BODY_SIZE 0x80
|
||||
|
||||
@@ -1661,7 +1662,7 @@ class CIntermediateCode:CIntermediateCodeBase
|
||||
U8 ic_body[IC_BODY_SIZE];
|
||||
//Tree Links are created in OptPass012. An ADD opcode, for exmaple,
|
||||
//points back to its two earlier addend insts, not MAlloced,
|
||||
//just pointers to previous CIntermediate codes in the array.
|
||||
//just pointers to prev CIntermediate codes in the array.
|
||||
|
||||
//Tree links get destroyed during Pass789A when they get overwrites
|
||||
//by machine code. (Saves room to union the output machine code buffer
|
||||
@@ -1844,7 +1845,8 @@ class CAsmArg
|
||||
{
|
||||
CAsmNum num;
|
||||
I64 seg,size, //Size in bytes
|
||||
reg1,reg2,fstk,
|
||||
reg1,reg2,
|
||||
reg1_type,reg2_type,
|
||||
scale;
|
||||
Bool indirect,imm_or_off_present,just_seg,pad[5];
|
||||
};
|
||||
@@ -1872,7 +1874,7 @@ class CAsmUnresolvedRef
|
||||
#define OM_IW 6
|
||||
#define OM_ID 7
|
||||
|
||||
#define ARGT_NO 0
|
||||
#define ARGT_NONE 0
|
||||
#define ARGT_REL8 1
|
||||
#define ARGT_REL16 2
|
||||
#define ARGT_REL32 3
|
||||
@@ -2068,7 +2070,7 @@ class CAOTCtrl
|
||||
#define TK_NORMALSCRIPT 0x003
|
||||
#define TK_IDENT 0x100
|
||||
#define TK_STR 0x101
|
||||
#define TK_INT 0x102
|
||||
#define TK_I64 0x102
|
||||
#define TK_CHAR_CONST 0x103
|
||||
#define TK_F64 0x104
|
||||
#define TK_PLUS_PLUS 0x105
|
||||
@@ -2158,7 +2160,7 @@ class CLexHashTableContext
|
||||
#define CCF_PAREN 0x1000000000
|
||||
#define CCf_PAREN 36
|
||||
#define CCF_CLASS_IP 0x2000000000
|
||||
#define CCF_DONT_MAKE_RESULT 0x4000000000
|
||||
#define CCF_DONT_MAKE_RES 0x4000000000
|
||||
|
||||
public class CCmpCtrl
|
||||
{
|
||||
@@ -2172,7 +2174,7 @@ public class CCmpCtrl
|
||||
class_ip;
|
||||
U8 *dollar_buf;
|
||||
I64 dollar_cnt;
|
||||
U8 *cur_help_index;
|
||||
U8 *cur_help_idx;
|
||||
I64 last_U16,
|
||||
min_line,max_line,last_line_num,
|
||||
lock_cnt;
|
||||
@@ -2821,22 +2823,21 @@ class CMemUsed
|
||||
#endif
|
||||
|
||||
#help_index "Memory/BlkPool"
|
||||
/*TempleOS does not mess with page tables after it
|
||||
identity-maps them during boot -- $LK,"SYS_INIT_MEM",A="MN:SYS_INIT_MEM"$.
|
||||
$LK,"MEM_PAGE_SIZE",A="MN:MEM_PAGE_SIZE"$ is arbitrary, and is not related to CPU hardware.
|
||||
I need some unit for memory allocation so I invented "$LK,"MEM_PAGE_SIZE",A="MN:MEM_PAGE_SIZE"$".
|
||||
/*TempleOS does not mess with page tables after setting them up
|
||||
during boot -- $LK,"SYS_INIT_PAGE_TABLES",A="MN:SYS_INIT_PAGE_TABLES"$.
|
||||
|
||||
$LK,"MEM_PAGE_SIZE",A="MN:MEM_PAGE_SIZE"$, the unit size for alloications, is arbitrary,
|
||||
and is not related to CPU hardware.
|
||||
|
||||
All virtual addresses are ident to physical at all times.
|
||||
text.vga_alias is not identity-mapped, however.
|
||||
|
||||
All virtual addresses are identical to physical, always.
|
||||
There is no high kernel memory because RAM's physical
|
||||
addresses are low. (All motherboards that I know of
|
||||
put RAM in low addresses of 64-bit address space.)
|
||||
It's ring-0-only so all (or none) is kernel, remember.
|
||||
|
||||
2 Meg hardware pages are use except the first 2 Meg.
|
||||
0xA0000-0xBFFFF must be write thru. Hardware pages
|
||||
don't matter except the caching bit. Remember, it is ring-0-only
|
||||
and identity-mapped! Do I need to repeat?
|
||||
Ring-0-only and 100% identity-mapped, all the time.
|
||||
2 Meg hardware pages are used. Only the caching bits matter.
|
||||
Remember, it is ring-0-only and identity-mapped!
|
||||
|
||||
All code is placed in just the lowest 2 Gig, so the CALL REL32
|
||||
inst always works. It never changes out of ring-0, remember,
|
||||
@@ -2869,7 +2870,7 @@ class CMemRange
|
||||
#define MEM_HEAP_HASH_SIZE 1024
|
||||
#define MEM_FREE_PAGE_HASH_SIZE 0x100
|
||||
//It is common to $LK,"MAlloc",A="MN:MAlloc"$() exact powers of two. There is some overhead.
|
||||
//We add $TX,"2",D="MEM_EXTRA_HASH2_PAGES"$ pages, so a request is not rounded-up to next power of two.
|
||||
//We add 2 pages, so a request is not rounded-up to next power of two.
|
||||
#define MEM_EXTRA_HASH2_PAGES 2
|
||||
|
||||
#define MEM_ADAM_STK (MEM_PAGE_SIZE*512) //Like 16384*MEM_PAGE_SIZE
|
||||
@@ -3196,7 +3197,7 @@ class CSrvCmd
|
||||
|
||||
U8 *aux_str;
|
||||
I64 aux1,aux2, //Sometimes called arg1 and arg2. (Windows msg param1 param2)
|
||||
result;
|
||||
res;
|
||||
|
||||
CTask *spawned_task,
|
||||
*master_task;
|
||||
@@ -3247,7 +3248,7 @@ public class CTaskSettings
|
||||
CTask *song_task,*animate_task;
|
||||
I64 scroll_x,scroll_y,scroll_z;
|
||||
CBGR48 palette[NUM_COLORS];
|
||||
U32 win_inhibit;;
|
||||
U32 win_inhibit;
|
||||
U8 text_attr,title_src,
|
||||
border_attr,border_src,
|
||||
task_title[STR_LEN];
|
||||
@@ -3346,9 +3347,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy)
|
||||
r8,r9,r10,r11,r12,r13,r14,r15;
|
||||
CCPU *gs;
|
||||
CFPU *fpu_mmx;
|
||||
I64 time_slice_start,
|
||||
total_time, //Cycles
|
||||
swap_cnter;
|
||||
I64 swap_cnter;
|
||||
|
||||
U0 (*draw_it)(CTask *task,CDC *dc);
|
||||
|
||||
@@ -3456,17 +3455,15 @@ public class CCPU //The Gs segment reg points to current CCPU.
|
||||
#help_index "Memory/Page Tables"
|
||||
#define MEM_MIN_MEG 512 //512 Meg minimum.
|
||||
#define MEM_MAPPED_SPACE 0x2000000000 //Arbitrarily set to 128 Gig.
|
||||
#define MEM_NUM_PML1 1 //First 2 Meg are 4K resolution.
|
||||
#define MEM_NUM_PML2 (MEM_MAPPED_SPACE>>(9+21))
|
||||
#define MEM_NUM_PML3 1
|
||||
#define MEM_NUM_PML4 1
|
||||
#define MEM_PROTECTED_LOW_LIMIT 0x6FFF
|
||||
|
||||
#define SYS_FIXED_AREA 0x100000
|
||||
public class CSysFixedArea
|
||||
{
|
||||
U8 pml1[MEM_NUM_PML1*0x1000],pml2[MEM_NUM_PML2*0x1000],
|
||||
pml3[MEM_NUM_PML3*0x1000],pml4[MEM_NUM_PML4*0x1000];
|
||||
U8 pml2[MEM_NUM_PML2*0x1000],pml3[MEM_NUM_PML3*0x1000],
|
||||
pml4[MEM_NUM_PML4*0x1000];
|
||||
$$=($$+15)&-16;
|
||||
CFPU init_fpu_mmx;
|
||||
CCPU boot_cpu;
|
||||
@@ -3599,6 +3596,7 @@ public class CTextGlbls
|
||||
U8 *raw_screen_image;
|
||||
I64 rows,cols; //Use TEXT_ROWS,TEXT_COLS
|
||||
U64 *font,*aux_font;
|
||||
U8 *vga_alias;
|
||||
};
|
||||
|
||||
#define FONT_WIDTH 8
|
||||
@@ -3722,7 +3720,7 @@ public class CDC
|
||||
#define VGAP_ATTR_DATA_WRITE 0x03C0 //alias
|
||||
#define VGAP_ATTR_DATA_READ 0x03C1
|
||||
#define VGAP_MISC_OUTPUT 0x03C2
|
||||
#define VGAP_INDEX 0x03C4
|
||||
#define VGAP_IDX 0x03C4
|
||||
#define VGAP_DATA 0x03C5
|
||||
#define VGAP_PALETTE_MASK 0x03C6
|
||||
#define VGAP_REG_READ 0x03C7
|
||||
@@ -3758,7 +3756,7 @@ public class CArcCtrl
|
||||
CArcEntry *cur_entry,*next_entry;
|
||||
I64 cur_bits_in_use,next_bits_in_use;
|
||||
U8 *stk_ptr,*stk_base;
|
||||
I64 free_index,free_limit,
|
||||
I64 free_idx,free_limit,
|
||||
saved_basecode,
|
||||
entry_used,
|
||||
last_ch;
|
||||
|
||||
+20
-25
@@ -121,9 +121,9 @@ public _intern IC_TO_I64 I64 ToI64(F64 d); //Convert to I64. Truncates.
|
||||
public _extern _ARG F64 Arg(F64 x,F64 y); //Polar coordinate angle.
|
||||
public _extern _CEIL F64 Ceil(F64 d); //Ceiling of F64.
|
||||
public _extern _CLAMP_I64 I64 ClampI64(
|
||||
I64 dv,I64 lo,I64 hi); //Clamp to I64 [] range.
|
||||
I64 num,I64 lo,I64 hi); //Clamp to I64 [] range.
|
||||
public _extern _CLAMP_U64 U64 ClampU64(
|
||||
U64 dv,U64 lo,U64 hi); //Clamp to U64 [] range.
|
||||
U64 num,U64 lo,U64 hi); //Clamp to U64 [] range.
|
||||
public _extern _EXP F64 Exp(F64 d); //Exponential function.
|
||||
_extern _FCLEX U0 Fclex();
|
||||
_extern _FLDCW U0 Fldcw(U16 w);
|
||||
@@ -143,30 +143,24 @@ public _extern _TRUNC F64 Trunc(F64 d); //Truncate F64.
|
||||
|
||||
#help_index "Math/CD3;Data Types/CD3"
|
||||
#help_file "::/Doc/D3"
|
||||
public _extern _D3_ADD CD3 *D3Add(
|
||||
CD3 *d1,CD3 *d2,CD3 *sum); //d1+d2 -->sum
|
||||
public _extern _D3_ADD_EQU CD3 *D3AddEqu(
|
||||
CD3 *sum,CD3 *d); //sum+=d
|
||||
public _extern _D3_COPY CD3 *D3Copy(
|
||||
CD3 *dst,CD3 *src); //dst=src
|
||||
public _extern _D3_CROSS CD3 *D3Cross(
|
||||
CD3 *d1,CD3 *d2,CD3 *prod); //d1 x d2 -->prod
|
||||
public _extern _D3_DIST F64 D3Dist(
|
||||
CD3 *d1,CD3 *d2); //Dist between d1 & d2
|
||||
public _extern _D3_DIST_SQR F64 D3DistSqr(
|
||||
CD3 *d1,CD3 *d2); //Dist Squared between d1 & d2
|
||||
public _extern _D3_DIV CD3 *D3Div(F64 s,CD3 *d,CD3 *quot); //1/s * d -->quot
|
||||
public _extern _D3_DIV_EQU CD3 *D3DivEqu(CD3 *quot,F64 s); //quot *= 1/s
|
||||
public _extern _D3_ADD CD3 *D3Add(CD3 *sum,CD3 *d1,CD3 *d2); //sum=d1+d2
|
||||
public _extern _D3_ADD_EQU CD3 *D3AddEqu(CD3 *sum,CD3 *d); //sum+=d
|
||||
public _extern _D3_COPY CD3 *D3Copy(CD3 *dst,CD3 *src); //dst=src
|
||||
public _extern _D3_CROSS CD3 *D3Cross(CD3 *prod,CD3 *d1,CD3 *d2); //prod=d1xd2
|
||||
public _extern _D3_DIST F64 D3Dist(CD3 *d1,CD3 *d2); //Distance
|
||||
public _extern _D3_DIST_SQR F64 D3DistSqr(CD3 *d1,CD3 *d2); //Distance Squared
|
||||
public _extern _D3_DIV CD3 *D3Div(CD3 *quot,CD3 *d,F64 s); //quot=d/s
|
||||
public _extern _D3_DIV_EQU CD3 *D3DivEqu(CD3 *quot,F64 s); //quot/=s
|
||||
public _extern _D3_DOT F64 D3Dot(CD3 *d1,CD3 *d2); //d1 dot d2
|
||||
public _extern _D3_EQU CD3 *D3Equ(CD3 *dst,F64 x,F64 y,F64 z); // dst=x,y,z
|
||||
public _extern _D3_MUL CD3 *D3Mul(F64 s,CD3 *d,CD3 *prod); //s * d -->prod
|
||||
public _extern _D3_MUL_EQU CD3 *D3MulEqu(CD3 *prod,F64 s); //prod *= s
|
||||
public _extern _D3_NORM F64 D3Norm(CD3 *d); //Norm d
|
||||
public _extern _D3_NORM_SQR F64 D3NormSqr(CD3 *d); //Norm Squared d
|
||||
public _extern _D3_SUB CD3 *D3Sub(CD3 *d1,CD3 *d2,CD3 *diff); //d1-d2 -->diff
|
||||
public _extern _D3_EQU CD3 *D3Equ(CD3 *dst,F64 x,F64 y,F64 z); //dst=(x,y,z)
|
||||
public _extern _D3_MUL CD3 *D3Mul(CD3 *prod,F64 s,CD3 *d); //prod=s*d
|
||||
public _extern _D3_MUL_EQU CD3 *D3MulEqu(CD3 *prod,F64 s); //prod*=s
|
||||
public _extern _D3_NORM F64 D3Norm(CD3 *d); //Norm
|
||||
public _extern _D3_NORM_SQR F64 D3NormSqr(CD3 *d); //Norm Squared
|
||||
public _extern _D3_SUB CD3 *D3Sub(CD3 *diff,CD3 *d1,CD3 *d2); //diff=d1-d2
|
||||
public _extern _D3_SUB_EQU CD3 *D3SubEqu(CD3 *diff,CD3 *d); //diff-=d
|
||||
public _extern _D3_UNIT CD3 *D3Unit(CD3 *d); //Convert to unit vect
|
||||
public _extern _D3_ZERO CD3 *D3Zero(CD3 *dst); //Convert to zero
|
||||
public _extern _D3_UNIT CD3 *D3Unit(CD3 *d); //To unit vect
|
||||
public _extern _D3_ZERO CD3 *D3Zero(CD3 *dst); //To zero
|
||||
|
||||
#help_index "Memory"
|
||||
public _extern _MEMCMP I64 MemCmp(
|
||||
@@ -255,7 +249,7 @@ public _intern IC_SET_RBP U0 SetRBP(U8 *d); //Set RBP register value.
|
||||
public _intern IC_SET_RFLAGS U0 SetRFlags(I64 d); //Set RFlags register value.
|
||||
public _intern IC_SET_RSP U0 SetRSP(U8 *d); //Set RSP register value.
|
||||
public _extern _CPUID U0 CPUId(
|
||||
U32 rax,CRAXRBCRCXRDX *result); //Do CPUID inst.
|
||||
U32 rax,CRAXRBCRCXRDX *res); //Do CPUID inst.
|
||||
public _extern _LXCHG_I64 I64 LXchgI64(I64 *dst,I64 d); //Locked eXchange I64s.
|
||||
public _extern _LXCHG_U16 U16 LXchgU16(U16 *dst,U16 d); //Locked eXchange U16s.
|
||||
public _extern _LXCHG_U32 U32 LXchgU32(U32 *dst,U32 d); //Locked eXchange U32s.
|
||||
@@ -282,6 +276,7 @@ public _intern IC_INVLPG
|
||||
public _intern IC_FS CTask *Fs(); //FS seg reg points to the current $LK,"CTask",A="MN:CTask"$.
|
||||
|
||||
#help_index "Time/CPU Cycles"
|
||||
#help_file "::/Doc/TimeCycles"
|
||||
public _intern IC_RDTSC I64 GetTSC(); //Get time stamp counter.
|
||||
|
||||
#help_index "Time/HPET"
|
||||
|
||||
+18
-25
@@ -155,9 +155,9 @@ public extern I64 LinkedLstSize(U8 **_lst);
|
||||
|
||||
#help_index "Data Types/Queue Vector"
|
||||
public extern U0 QueVectU8Del(CQueVectU8 *v);
|
||||
public extern I64 QueVectU8Get(CQueVectU8 *v,I64 index);
|
||||
public extern CQueVectU8 *QueVectU8New(I64 min_index=0);
|
||||
public extern U0 QueVectU8Put(CQueVectU8 *v,I64 index,U8 ch);
|
||||
public extern I64 QueVectU8Get(CQueVectU8 *v,I64 idx);
|
||||
public extern CQueVectU8 *QueVectU8New(I64 min_idx=0);
|
||||
public extern U0 QueVectU8Put(CQueVectU8 *v,I64 idx,U8 ch);
|
||||
|
||||
#help_index "Debugging"
|
||||
public extern U8 *Caller(I64 num=1);
|
||||
@@ -228,17 +228,17 @@ public extern U0 Dbg(U8 *msg=NULL,I64 msg_num=0);
|
||||
|
||||
#help_index "Define;Char/Define"
|
||||
#help_file "::/Doc/Define"
|
||||
public extern U8 *Define(U8 *name);
|
||||
public extern CHashDefineStr *DefineLoad(U8 *name,U8 *st);
|
||||
public extern U0 DefinePrint(U8 *name,U8 *src,...);
|
||||
public extern U8 *Define(U8 *dname);
|
||||
public extern CHashDefineStr *DefineLoad(U8 *dname,U8 *st);
|
||||
public extern U0 DefinePrint(U8 *dname,U8 *src,...);
|
||||
|
||||
#help_index "Define;Char/Define;Char/Lists"
|
||||
public extern I64 DefineCnt(U8 *name);
|
||||
public extern CHashDefineStr *DefineLstLoad(U8 *name,U8 *st);
|
||||
public extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_name,I64 flags=0);
|
||||
public extern U8 *DefineSub(I64 sub,U8 *name);
|
||||
public extern I64 DefineCnt(U8 *dname);
|
||||
public extern CHashDefineStr *DefineLstLoad(U8 *dname,U8 *lst);
|
||||
public extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_dname,I64 flags=0);
|
||||
public extern U8 *DefineSub(I64 sub,U8 *dname);
|
||||
|
||||
#help_index "Devices"
|
||||
#help_index "Devices;Memory/Page Tables"
|
||||
public extern U8 *Mem32DevAlloc(I64 size,I64 alignment);
|
||||
public extern U0 Mem32DevFree(U8 *base);
|
||||
public extern U8 *Mem64DevAlloc(I64 *_pages2Meg);
|
||||
@@ -283,7 +283,7 @@ public extern Bool Drv(U8 drv_let);
|
||||
public extern Bool MkDir(U8 *filename);
|
||||
|
||||
#help_index "File/Cmd Line (Typically);Cmd Line (Typically);Install"
|
||||
public extern Bool MapDrv(U8 drv_let,CDrv *dv);
|
||||
public extern Bool DrvMap(U8 drv_let,CDrv *dv);
|
||||
|
||||
#help_index "File/FileNames"
|
||||
extern CDirEntry *Cd2DirEntry(CDirEntry *tempde,U8 *abs_name);
|
||||
@@ -402,7 +402,6 @@ public _extern _HASH_SINGLE_TABLE_FIND CHash *HashSingleTableFind(
|
||||
U8 *needle_str,CHashTable *haystack_table,I64 mask,I64 instance=1);
|
||||
public _extern _HASH_STR I64 HashStr(U8 *st);
|
||||
public extern CHashTable *HashTableNew(I64 size,CTask *mem_task=NULL);
|
||||
|
||||
#help_index "Hash/Frame"
|
||||
#help_file "::/Doc/Frame"
|
||||
public extern I64 FramePtr(U8 *name,CTask *task=NULL);
|
||||
@@ -427,7 +426,7 @@ extern U0 SysSymImportsResolve(U8 *sptr,I64 ld_flags=0);
|
||||
public extern I64 HashLstAdd(U8 *lst,I64 type,CHashTable *table);
|
||||
|
||||
#help_index "Hash/System;Define;Char/Define;Char/Lists"
|
||||
public extern I64 HashDefineLstAdd(U8 *name,I64 type,CHashTable *table);
|
||||
public extern I64 HashDefineLstAdd(U8 *dname,I64 type,CHashTable *table);
|
||||
|
||||
#help_index "Help System;Debugging/Debugger"
|
||||
public extern U0 Help();
|
||||
@@ -501,7 +500,7 @@ public extern CKbdStateGlbls kbd;
|
||||
#help_index "Math"
|
||||
public extern I64 CeilI64(I64 num,I64 to);
|
||||
public extern U64 CeilU64(U64 num,U64 to);
|
||||
public extern F64 Clamp(F64 num,F64 lo,F64 hi);
|
||||
public extern F64 Clamp(F64 d,F64 lo,F64 hi);
|
||||
public extern I64 FloorI64(I64 num,I64 to);
|
||||
public extern U64 FloorU64(U64 num,U64 to);
|
||||
public extern F64 Max(F64 n1,F64 n2);
|
||||
@@ -520,7 +519,7 @@ public extern I64 Seed(I64 seed=0,CTask *task=NULL);
|
||||
#help_index "Memory/Adam Heap"
|
||||
public extern U8 *ACAlloc(I64 size);
|
||||
public extern U8 *AMAlloc(I64 size);
|
||||
public extern U8 *AMAllocIdentical(U8 *src);
|
||||
public extern U8 *AMAllocIdent(U8 *src);
|
||||
|
||||
#help_index "Memory/BlkPool"
|
||||
public extern U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pages512);
|
||||
@@ -536,7 +535,7 @@ public _extern _FREE U0 Free(U8 *addr);
|
||||
public _extern _MALLOC U8 *MAlloc(I64 size,CTask *mem_task=NULL);
|
||||
public extern U8 *MAllocAligned(I64 size,I64 alignment,
|
||||
CTask *mem_task=NULL,I64 misalignment=0);
|
||||
public extern U8 *MAllocIdentical(U8 *src,CTask *mem_task=NULL);
|
||||
public extern U8 *MAllocIdent(U8 *src,CTask *mem_task=NULL);
|
||||
public _extern _MHEAP_CTRL CHeapCtrl *MHeapCtrl(U8 *src);
|
||||
public _extern _MSIZE I64 MSize(U8 *src); //size of heap object
|
||||
public _extern _MSIZE2 I64 MSize2(U8 *src); //Internal size
|
||||
@@ -547,9 +546,7 @@ public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,
|
||||
CTask *task=NULL,CBlkPool *bp);
|
||||
|
||||
#help_index "Memory/Page Tables"
|
||||
public extern Bool MemLowPagesProtect(Bool val=TRUE);
|
||||
public extern Bool MemPagePresentMark(U8 *a,Bool val);
|
||||
public extern I64 MemPageSize(U8 *a)
|
||||
public extern I64 *MemPageTable(U8 *a);
|
||||
|
||||
#help_index "Messages"
|
||||
@@ -682,8 +679,8 @@ public extern I64 ExeCmdLine(CCmpCtrl *cc);
|
||||
public extern U0 UserTaskCont();
|
||||
|
||||
#help_index "Task/Srv/Exe;MultiCore"
|
||||
public extern I64 JobResultGet(CSrvCmd *rqst=NULL);
|
||||
public extern Bool JobResultScan(CSrvCmd *rqst=NULL,I64 *_result=NULL);
|
||||
public extern I64 JobResGet(CSrvCmd *rqst=NULL);
|
||||
public extern Bool JobResScan(CSrvCmd *rqst=NULL,I64 *_res=NULL);
|
||||
|
||||
#help_index "Task/Srv/Text & Msgs"
|
||||
public extern CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags);
|
||||
@@ -711,10 +708,6 @@ public extern CTask *Spawn(U0 (*fp_addr)(U8 *data),U8 *data=NULL,
|
||||
CTask *parent=NULL, //NULL means adam
|
||||
I64 stk_size=0,I64 flags=1<<SVCf_ADD_TO_QUE);
|
||||
|
||||
#help_index "Time/CPU Cycles"
|
||||
#help_file "::/Doc/TimeCycles"
|
||||
public extern I64 TaskTotalTime();
|
||||
|
||||
#help_index "Time/CPU Cycles;Time/HPET;Time/Jiffies"
|
||||
public extern CCntsGlbls cnts;
|
||||
|
||||
|
||||
+25
-25
@@ -145,7 +145,7 @@ _MALLOC::
|
||||
@@75: ADD RSI,U64 CMemUnused.size[RSI]
|
||||
|
||||
MALLOC_ALMOST_DONE:
|
||||
//RSI=result-CMemUsed.size
|
||||
//RSI=res-CMemUsed.size
|
||||
//RAX=size+CMemUsed.size
|
||||
//RDX=HeapCtrl
|
||||
ADD U64 CHeapCtrl.used_u8s[RDX],RAX
|
||||
@@ -394,9 +394,9 @@ U8 *AMAlloc(I64 size)
|
||||
|
||||
U8 *CAlloc(I64 size,CTask *mem_task=NULL)
|
||||
{//Accepts a $LK,"CTask",A="MN:CTask"$ or $LK,"CHeapCtrl",A="MN:CHeapCtrl"$. NULL allocs off current task's heap.
|
||||
U8 *result=MAlloc(size,mem_task);
|
||||
MemSet(result,0,size);
|
||||
return result;
|
||||
U8 *res=MAlloc(size,mem_task);
|
||||
MemSet(res,0,size);
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *ACAlloc(I64 size)
|
||||
@@ -404,20 +404,20 @@ U8 *ACAlloc(I64 size)
|
||||
return CAlloc(size,adam_task);
|
||||
}
|
||||
|
||||
U8 *MAllocIdentical(U8 *src,CTask *mem_task=NULL)
|
||||
U8 *MAllocIdent(U8 *src,CTask *mem_task=NULL)
|
||||
{//Accepts a $LK,"CTask",A="MN:CTask"$ or $LK,"CHeapCtrl",A="MN:CHeapCtrl"$. NULL allocs off current task's heap.
|
||||
U8 *result;
|
||||
U8 *res;
|
||||
I64 size;
|
||||
if (!src) return NULL;
|
||||
size=MSize(src);
|
||||
result=MAlloc(size,mem_task);
|
||||
MemCpy(result,src,size);
|
||||
return result;
|
||||
res=MAlloc(size,mem_task);
|
||||
MemCpy(res,src,size);
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *AMAllocIdentical(U8 *src)
|
||||
{//Alloc in Adam's heap, identical copy of heap node.
|
||||
return MAllocIdentical(src,adam_task);
|
||||
U8 *AMAllocIdent(U8 *src)
|
||||
{//Alloc in Adam's heap, ident copy of heap node.
|
||||
return MAllocIdent(src,adam_task);
|
||||
}
|
||||
|
||||
U8 *MAllocAligned(I64 size,I64 alignment,
|
||||
@@ -425,10 +425,10 @@ U8 *MAllocAligned(I64 size,I64 alignment,
|
||||
{//Only powers of two alignment. This is awful.
|
||||
I64 mask=alignment-1;
|
||||
U8 *ptr=MAlloc(size+mask+sizeof(I64)+misalignment,mem_task),
|
||||
*result=(ptr+sizeof(I64)+mask)&~mask+misalignment;
|
||||
result(I64 *)[-1]=ptr-result;
|
||||
*res=(ptr+sizeof(I64)+mask)&~mask+misalignment;
|
||||
res(I64 *)[-1]=ptr-res;
|
||||
#assert offset(CMemUsed.size)==offset(CMemUsed.start)-sizeof(I64)
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *CAllocAligned(I64 size,I64 alignment,
|
||||
@@ -436,26 +436,26 @@ U8 *CAllocAligned(I64 size,I64 alignment,
|
||||
{//Only powers of two alignment. This is awful.
|
||||
I64 mask=alignment-1;
|
||||
U8 *ptr=MAlloc(size+mask+sizeof(I64)+misalignment,mem_task),
|
||||
*result=(ptr+sizeof(I64)+mask)&~mask+misalignment;
|
||||
result(I64 *)[-1]=ptr-result;
|
||||
*res=(ptr+sizeof(I64)+mask)&~mask+misalignment;
|
||||
res(I64 *)[-1]=ptr-res;
|
||||
#assert offset(CMemUsed.size)==offset(CMemUsed.start)-sizeof(I64)
|
||||
MemSet(result,0,size);
|
||||
return result;
|
||||
MemSet(res,0,size);
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *StrNew(U8 *buf,CTask *mem_task=NULL)
|
||||
{//Accepts a $LK,"CTask",A="MN:CTask"$ or $LK,"CHeapCtrl",A="MN:CHeapCtrl"$. NULL allocs off current task's heap.
|
||||
U8 *result;
|
||||
U8 *res;
|
||||
I64 size;
|
||||
if (buf) {
|
||||
size=StrLen(buf)+1;
|
||||
result=MAlloc(size,mem_task);
|
||||
MemCpy(result,buf,size);
|
||||
res=MAlloc(size,mem_task);
|
||||
MemCpy(res,buf,size);
|
||||
} else {
|
||||
result=MAlloc(1,mem_task);
|
||||
*result=0;
|
||||
res=MAlloc(1,mem_task);
|
||||
*res=0;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *AStrNew(U8 *buf)
|
||||
|
||||
+23
-23
@@ -16,7 +16,7 @@ so a ptr to a page count is passed.
|
||||
|
||||
Return: NULL if out of memory.
|
||||
*/
|
||||
CMemBlk *result=NULL,*m;
|
||||
CMemBlk *res=NULL,*m;
|
||||
I64 i;
|
||||
if (!bp) bp=sys_code_bp;
|
||||
PUSHFD
|
||||
@@ -24,8 +24,8 @@ Return: NULL if out of memory.
|
||||
while (LBts(&bp->locked_flags,BPlf_LOCKED))
|
||||
PAUSE
|
||||
if (pages512<MEM_FREE_PAGE_HASH_SIZE) {
|
||||
if (result=bp->free_page_hash[pages512]) {
|
||||
bp->free_page_hash[pages512]=result->next;
|
||||
if (res=bp->free_page_hash[pages512]) {
|
||||
bp->free_page_hash[pages512]=res->next;
|
||||
goto at_done;
|
||||
}
|
||||
i=Bsr(MEM_FREE_PAGE_HASH_SIZE)+1;
|
||||
@@ -38,37 +38,37 @@ Return: NULL if out of memory.
|
||||
pages512-=MEM_EXTRA_HASH2_PAGES;
|
||||
i=Bsr(pages512)+1;
|
||||
pages512=1<<i+MEM_EXTRA_HASH2_PAGES;
|
||||
if (result=bp->free_page_hash2[i]) {
|
||||
bp->free_page_hash2[i]=result->next;
|
||||
if (res=bp->free_page_hash2[i]) {
|
||||
bp->free_page_hash2[i]=res->next;
|
||||
goto at_done;
|
||||
}
|
||||
}
|
||||
m=&bp->mem_free_lst;
|
||||
while (TRUE) {
|
||||
if (!(result=m->next)) {
|
||||
if (!(res=m->next)) {
|
||||
//We're probably out of luck, but lets search for a
|
||||
//freed larger size block... and, screw-it, return the whole thing.
|
||||
do {
|
||||
if (result=bp->free_page_hash2[++i]) {
|
||||
if (res=bp->free_page_hash2[++i]) {
|
||||
pages512=1<<i+MEM_EXTRA_HASH2_PAGES;
|
||||
bp->free_page_hash2[i]=result->next;
|
||||
bp->free_page_hash2[i]=res->next;
|
||||
goto at_done;
|
||||
}
|
||||
} while (i<64-MEM_PAGE_BITS-1);
|
||||
pages512=0;
|
||||
result=NULL; //Out of memory
|
||||
res=NULL; //Out of memory
|
||||
goto at_done;
|
||||
}
|
||||
if (result->pages<pages512)
|
||||
m=result;
|
||||
if (res->pages<pages512)
|
||||
m=res;
|
||||
else {
|
||||
if (result->pages==pages512) {
|
||||
m->next=result->next;
|
||||
if (res->pages==pages512) {
|
||||
m->next=res->next;
|
||||
goto at_done;
|
||||
} else {
|
||||
result->pages-=pages512;
|
||||
result(U8 *)+=result->pages<<MEM_PAGE_BITS;
|
||||
result->pages=pages512;
|
||||
res->pages-=pages512;
|
||||
res(U8 *)+=res->pages<<MEM_PAGE_BITS;
|
||||
res->pages=pages512;
|
||||
goto at_done;
|
||||
}
|
||||
}
|
||||
@@ -77,7 +77,7 @@ at_done:
|
||||
bp->used_u8s+=pages512<<MEM_PAGE_BITS;
|
||||
LBtr(&bp->locked_flags,BPlf_LOCKED);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 Mem512Free(CMemBlk *m,CBlkPool *bp=NULL)
|
||||
@@ -116,13 +116,13 @@ CMemBlk *Mem512TaskAlloc(I64 pages512,CHeapCtrl *hc)
|
||||
Currently, this is only called from $LK,"MAlloc",A="MN:MAlloc"$().
|
||||
Return: NULL if out of memory.
|
||||
*/
|
||||
CMemBlk *result;
|
||||
CMemBlk *res;
|
||||
I64 threshold,cnt,size;
|
||||
CMemUnused *uum,**_uum,**_ptr;
|
||||
if (result=Mem512Alloc(pages512,hc->bp)) {
|
||||
QueIns(result,hc->last_mem_blk);
|
||||
result->mb_signature=MBS_USED_SIGNATURE_VAL;
|
||||
hc->alloced_u8s+=result->pages<<MEM_PAGE_BITS;
|
||||
if (res=Mem512Alloc(pages512,hc->bp)) {
|
||||
QueIns(res,hc->last_mem_blk);
|
||||
res->mb_signature=MBS_USED_SIGNATURE_VAL;
|
||||
hc->alloced_u8s+=res->pages<<MEM_PAGE_BITS;
|
||||
|
||||
//Tidy-up free lst (Move into heap hash)
|
||||
//because if free lst gets long, delay causes crash
|
||||
@@ -147,7 +147,7 @@ Return: NULL if out of memory.
|
||||
threshold<<=1;
|
||||
} while (cnt>8 && threshold<=MEM_HEAP_HASH_SIZE);
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 Mem512TaskFree(CMemBlk *m,CHeapCtrl *hc)
|
||||
|
||||
+12
-17
@@ -55,24 +55,11 @@ U0 Mem32DevInit()
|
||||
}
|
||||
}
|
||||
|
||||
Bool MemLowPagesProtect(Bool val=TRUE)
|
||||
{//Mark low memory not present. Catch NULL deref.
|
||||
//Returns: FALSE if any were not protected.
|
||||
U8 *a=0;
|
||||
Bool result=TRUE;
|
||||
while (a<=MEM_PROTECTED_LOW_LIMIT) {
|
||||
result&=!MemPagePresentMark(a,!val);
|
||||
a+=MemPageSize(a);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
U0 MemPagesNotPresentMark()
|
||||
{
|
||||
U8 *a,*max_physical=NULL;
|
||||
U16 *m01=SYS_MEM_E801;
|
||||
CMemE820 *m20=SYS_MEM_E820;
|
||||
MemLowPagesProtect;
|
||||
while (m20->type) {
|
||||
a=m20->base+m20->len;
|
||||
if (a>max_physical)
|
||||
@@ -83,7 +70,7 @@ U0 MemPagesNotPresentMark()
|
||||
a=(max_physical+0x1FFFFF)&~0x1FFFFF;
|
||||
while (a<MEM_MAPPED_SPACE) {
|
||||
MemPagePresentMark(a,FALSE);
|
||||
a+=MemPageSize(a);
|
||||
a+=0x200000;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -140,7 +127,7 @@ U0 Mem32DevFree(U8 *base)
|
||||
|
||||
U8 *Mem64DevAlloc(I64 *_pages2Meg)
|
||||
{//Alloc 64-bit addr space for device.
|
||||
U8 *result;
|
||||
U8 *res;
|
||||
I64 i=*_pages2Meg,*pte;
|
||||
while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0))
|
||||
Yield;
|
||||
@@ -150,9 +137,9 @@ U8 *Mem64DevAlloc(I64 *_pages2Meg)
|
||||
*pte=*pte&~0x18 |0x11; //Uncached and present
|
||||
InvlPg(dev.mem64_ptr);
|
||||
}
|
||||
result=dev.mem64_ptr;
|
||||
res=dev.mem64_ptr;
|
||||
LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 Mem64DevFree(U8 *base,I64 pages2Meg)
|
||||
@@ -166,6 +153,14 @@ U0 Mem64DevFree(U8 *base,I64 pages2Meg)
|
||||
LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0);
|
||||
}
|
||||
|
||||
U8 *MemVGAAlloc()
|
||||
{
|
||||
I64 i=1,*a=Mem64DevAlloc(&i),*pte=MemPageTable(a);
|
||||
*pte=0x18F;
|
||||
InvlPg(a);
|
||||
return a;
|
||||
}
|
||||
|
||||
I64 BIOSTotalMem()
|
||||
{
|
||||
I64 r01,r20;
|
||||
|
||||
@@ -2,54 +2,18 @@ asm {
|
||||
// $LK,"::/Doc/MemOverview.TXT"$
|
||||
|
||||
USE32
|
||||
SYS_INIT_MEM::
|
||||
SYS_INIT_PAGE_TABLES::
|
||||
//Set page tables to identity map everything.
|
||||
MOV EDI,SYS_FIXED_AREA
|
||||
XOR EAX,EAX
|
||||
MOV ECX,sizeof(CSysFixedArea)/4
|
||||
REP_STOSD //Init entire SYS_FIXED_AREA to zero
|
||||
|
||||
//PML1
|
||||
MOV EAX,0x107
|
||||
XOR EDX,EDX
|
||||
MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml1
|
||||
MOV ECX,MEM_NUM_PML1*0x200
|
||||
@@05: MOV U32 [EDI],EAX
|
||||
ADD EDI,4
|
||||
MOV U32 [EDI],EDX
|
||||
ADD EDI,4
|
||||
ADD EAX,0x1000
|
||||
ADC EDX,0
|
||||
LOOP @@05
|
||||
|
||||
//0xA0000-0xBFFFF: video ram=write thru
|
||||
MOV EAX,0xF
|
||||
XOR EDX,EDX
|
||||
MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml1+0xA0*8
|
||||
MOV ECX,0xC0-0xA0
|
||||
@@10: OR U32 [EDI],EAX
|
||||
ADD EDI,4
|
||||
OR U32 [EDI],EDX
|
||||
ADD EDI,4
|
||||
LOOP @@10
|
||||
|
||||
//PML2
|
||||
MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml1+7
|
||||
MOV EAX,0x87 //bit 7 is page size (1==2Meg)
|
||||
XOR EDX,EDX
|
||||
MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml2
|
||||
MOV ECX,MEM_NUM_PML1
|
||||
@@15: MOV U32 [EDI],EAX
|
||||
ADD EDI,4
|
||||
MOV U32 [EDI],EDX
|
||||
ADD EDI,4
|
||||
ADD EAX,0x1000
|
||||
ADC EDX,0
|
||||
LOOP @@15
|
||||
|
||||
MOV EAX,MEM_NUM_PML1*0x200000+0x87 //bit 7 is page size (1==2Meg)
|
||||
XOR EDX,EDX
|
||||
MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml2+8*MEM_NUM_PML1
|
||||
MOV ECX,MEM_NUM_PML2*0x200-MEM_NUM_PML1
|
||||
MOV ECX,MEM_NUM_PML2*0x200
|
||||
@@20: MOV U32 [EDI],EAX
|
||||
ADD EDI,4
|
||||
MOV U32 [EDI],EDX
|
||||
@@ -151,31 +115,20 @@ pain without MAlloc up-and-running.
|
||||
RET
|
||||
}
|
||||
|
||||
I64 MemPageSize(U8 *a)
|
||||
{//Size of page table at addr.Either 4K or 2Meg.
|
||||
if (a<MEM_NUM_PML1*0x1000*0x200)
|
||||
return 0x1000;
|
||||
else
|
||||
return 0x200000;
|
||||
}
|
||||
|
||||
I64 *MemPageTable(U8 *a)
|
||||
{//Point to page table entry for addr.
|
||||
if (a<MEM_NUM_PML1*0x1000*0x200)
|
||||
return SYS_FIXED_AREA+offset(CSysFixedArea.pml1)+a>>12*8;
|
||||
else
|
||||
return SYS_FIXED_AREA+offset(CSysFixedArea.pml2)+a>>21*8;
|
||||
return SYS_FIXED_AREA+offset(CSysFixedArea.pml2)+a>>21*8;
|
||||
}
|
||||
|
||||
Bool MemPagePresentMark(U8 *a,Bool val)
|
||||
{//Mark an addr's page present or not-present.
|
||||
I64 *pte=MemPageTable(a);
|
||||
Bool result=*pte&1;
|
||||
Bool res=*pte&1;
|
||||
if (val)
|
||||
*pte=*pte|1; //Mark present
|
||||
else
|
||||
*pte=*pte&~1; //Mark not present
|
||||
InvlPg(a);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ AP_32BIT_INIT:
|
||||
PUSH U32 RFLAGG_START
|
||||
POPFD
|
||||
PUSH U32 0 //Return from next call will be 64-bit
|
||||
CALL SYS_EM64T
|
||||
CALL SYS_ENTER_LONG_MODE
|
||||
USE64
|
||||
FNINIT
|
||||
MOV RAX,RSI
|
||||
@@ -214,7 +214,7 @@ CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL,
|
||||
I64 target_cpu=1,I64 flags=1<<SVCf_FREE_ON_COMPLETE,
|
||||
I64 cmd_code=SVCT_CALL,U8 *aux_str=NULL,I64 aux1=0,I64 aux2=0)
|
||||
{//Queue multicore jobs, handled by Seth tasks.
|
||||
//Set flags to zero if you wish to get the result.
|
||||
//Set flags to zero if you wish to get the res.
|
||||
//See $LK,"::/Demo/MultiCore/Lock.CPP"$
|
||||
CSrvCtrl *ctrl;
|
||||
CSrvCmd *tempc;
|
||||
@@ -249,7 +249,7 @@ CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL,
|
||||
I64 target_cpu, CTask *parent=NULL, //NULL means adam
|
||||
I64 stk_size=0,I64 flags=1<<SVCf_ADD_TO_QUE)
|
||||
{
|
||||
CTask *result;
|
||||
CTask *res;
|
||||
CSrvCmd *tempc=JobQue(fp_addr,data,target_cpu,
|
||||
flags,SVCT_SPAWN_TASK,task_name,parent,stk_size);
|
||||
CSrvCtrl *ctrl;
|
||||
@@ -260,7 +260,7 @@ CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL,
|
||||
}
|
||||
LBtr(&Fs->task_flags,TASKf_IDLE);
|
||||
|
||||
result=tempc->spawned_task;
|
||||
res=tempc->spawned_task;
|
||||
ctrl=tempc->ctrl;
|
||||
PUSHFD
|
||||
CLI
|
||||
@@ -270,7 +270,7 @@ CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL,
|
||||
LBtr(&ctrl->flags,SVCRf_LOCKED);
|
||||
POPFD
|
||||
SrvCmdDel(tempc);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 CoreAPSethInit()
|
||||
@@ -278,7 +278,6 @@ U0 CoreAPSethInit()
|
||||
//as the first thing a CPU does before waiting for jobs.
|
||||
MPAPICInit;
|
||||
Fs->rip=&CoreAPSethTask;
|
||||
Fs->time_slice_start=GetTSC;
|
||||
TaskContextRestore;
|
||||
}
|
||||
|
||||
@@ -365,7 +364,6 @@ U0 Core0Init()
|
||||
//Must be in code heap because init code uses 32 bit addr of cpu_struct
|
||||
adam_task->gs=cpu_structs=
|
||||
CAlloc(sizeof(CCPU)*MP_MAX_PROCESSORS,Fs->code_heap);
|
||||
adam_task->time_slice_start=GetTSC;
|
||||
CPUStructInit(0,cpu_structs,adam_task);
|
||||
asm {//RAX has GS
|
||||
IMPORT SET_GS_BASE;
|
||||
|
||||
+17
-17
@@ -133,7 +133,7 @@ C32_ADD:: DU32 0;
|
||||
MOV U32 [C32_EDI],EDI
|
||||
|
||||
PUSH U32 0 //Return from next call will be 64-bit
|
||||
CALL SYS_EM64T
|
||||
CALL SYS_ENTER_LONG_MODE
|
||||
|
||||
USE64 MOV RSP,U64 [C32_RSP]
|
||||
POP RAX
|
||||
@@ -162,7 +162,7 @@ _extern _FAR_CALL32 Bool FarCall32(U0 (*fp_addr)());//Not reentrant.For PCIBIOS.
|
||||
|
||||
U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg)
|
||||
{//Read U8 in PCI configspace at bus,dev,fun,reg.
|
||||
I64 result;
|
||||
I64 res;
|
||||
PUSHFD
|
||||
CLI
|
||||
while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0))
|
||||
@@ -171,17 +171,17 @@ U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg)
|
||||
c32_ebx=bus<<8+dev<<3+fun;
|
||||
c32_edi=rg;
|
||||
if (FarCall32(sys_pci_services))
|
||||
result=c32_ecx.u8[0];
|
||||
res=c32_ecx.u8[0];
|
||||
else
|
||||
result=0xFF;
|
||||
res=0xFF;
|
||||
LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U16 PCIReadU16(I64 bus,I64 dev,I64 fun,I64 rg)
|
||||
{//Read U16 in PCI configspace at bus,dev,fun,reg.
|
||||
I64 result;
|
||||
I64 res;
|
||||
PUSHFD
|
||||
CLI
|
||||
while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0))
|
||||
@@ -190,17 +190,17 @@ U16 PCIReadU16(I64 bus,I64 dev,I64 fun,I64 rg)
|
||||
c32_ebx=bus<<8+dev<<3+fun;
|
||||
c32_edi=rg;
|
||||
if (FarCall32(sys_pci_services))
|
||||
result=c32_ecx.u16[0];
|
||||
res=c32_ecx.u16[0];
|
||||
else
|
||||
result=0xFFFF;
|
||||
res=0xFFFF;
|
||||
LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg)
|
||||
{//Read U32 in PCI configspace at bus,dev,fun,reg.
|
||||
I64 result;
|
||||
I64 res;
|
||||
PUSHFD
|
||||
CLI
|
||||
while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0))
|
||||
@@ -209,12 +209,12 @@ U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg)
|
||||
c32_ebx=bus<<8+dev<<3+fun;
|
||||
c32_edi=rg;
|
||||
if (FarCall32(sys_pci_services))
|
||||
result=c32_ecx;
|
||||
res=c32_ecx;
|
||||
else
|
||||
result=0xFFFFFFFF;
|
||||
res=0xFFFFFFFF;
|
||||
LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 PCIWriteU8(I64 bus,I64 dev,I64 fun,I64 rg,I64 val)
|
||||
@@ -270,7 +270,7 @@ n is index starting at zero
|
||||
Return: -1 not found
|
||||
else bus,dev,fun.
|
||||
*/
|
||||
I64 result;
|
||||
I64 res;
|
||||
PUSHFD
|
||||
CLI
|
||||
while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0))
|
||||
@@ -279,11 +279,11 @@ else bus,dev,fun.
|
||||
c32_esi=n;
|
||||
c32_ecx=class_code;
|
||||
if (FarCall32(sys_pci_services) && !c32_eax.u8[1])
|
||||
result=c32_ebx.u8[1]<<16+(c32_ebx&0xF8)<<5+c32_ebx&7;
|
||||
res=c32_ebx.u8[1]<<16+(c32_ebx&0xF8)<<5+c32_ebx&7;
|
||||
else
|
||||
result=-1;
|
||||
res=-1;
|
||||
LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0);
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -83,12 +83,6 @@ It's a little faster.
|
||||
PUSH RCX
|
||||
MOV RSP,RAX
|
||||
|
||||
RDTSC
|
||||
SHL RDX,32
|
||||
ADD RAX,RDX
|
||||
SUB RAX,U64 CTask.time_slice_start[RSI]
|
||||
ADD U64 CTask.total_time[RSI],RAX
|
||||
|
||||
MOV RAX,U64 CTask.fpu_mmx[RSI]
|
||||
FXSAVE U64 [RAX]
|
||||
|
||||
@@ -124,11 +118,6 @@ _TASK_CONTEXT_RESTORE::
|
||||
MOV RAX,U64 CTask.fpu_mmx[RSI]
|
||||
FXRSTOR U64 [RAX]
|
||||
|
||||
RDTSC
|
||||
SHL RDX,32
|
||||
ADD RAX,RDX
|
||||
MOV U64 CTask.time_slice_start[RSI],RAX
|
||||
|
||||
MOV RAX,RSP
|
||||
LEA RSP,U64 CTask.rcx[RSI]
|
||||
POP RCX
|
||||
|
||||
@@ -41,7 +41,7 @@ If no message fit mask, return NULL immediately.
|
||||
Remove desired message, return $LK,"msg_code",A="MN:MSG_CMD"$.
|
||||
Note: This delivers messages from parent down to pop-up.
|
||||
*/
|
||||
I64 result,old_flags;
|
||||
I64 res,old_flags;
|
||||
CSrvCmd *tempc,*tempc1;
|
||||
if (!task) task=Fs;
|
||||
old_flags=GetRFlags;
|
||||
@@ -57,20 +57,20 @@ Note: This delivers messages from parent down to pop-up.
|
||||
if (tempc->cmd_code==SVCT_MSG) {
|
||||
QueRem(tempc);
|
||||
SetRFlags(old_flags);
|
||||
result=tempc->msg_code;
|
||||
res=tempc->msg_code;
|
||||
if (_a1)
|
||||
*_a1=tempc->aux1;
|
||||
if (_a2)
|
||||
*_a2=tempc->aux2;
|
||||
SrvCmdDel(tempc);
|
||||
if ((result!=MSG_KEY_DOWN || !(tempc->aux2&SCF_KEY_DESC) ||
|
||||
!Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) && Bt(&mask,result))
|
||||
if ((res!=MSG_KEY_DOWN || !(tempc->aux2&SCF_KEY_DESC) ||
|
||||
!Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) && Bt(&mask,res))
|
||||
goto sm_done;
|
||||
}
|
||||
}
|
||||
SetRFlags(old_flags);
|
||||
}
|
||||
result=MSG_NULL;
|
||||
res=MSG_NULL;
|
||||
if (_a1)
|
||||
*_a1=0;
|
||||
if (_a2)
|
||||
@@ -81,30 +81,30 @@ Note: This delivers messages from parent down to pop-up.
|
||||
}
|
||||
sm_done:
|
||||
SetRFlags(old_flags);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 FlushMsgs(CTask *task=NULL)
|
||||
{//Throw away all messages. Return count.
|
||||
I64 result=0,a1,a2;
|
||||
I64 res=0,a1,a2;
|
||||
while (ScanMsg(&a1,&a2,~1,task))
|
||||
result++;
|
||||
return result;
|
||||
res++;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL)
|
||||
{//Wait for a message of type specified by a one in the mask.
|
||||
//Throw-out all messages not in mask.
|
||||
//Returns $LK,"msg_code",A="MN:MSG_CMD"$. See $LK,"::/Demo/MsgLoop.CPP"$.
|
||||
I64 result;
|
||||
I64 res;
|
||||
if (!task) task=Fs;
|
||||
LBtr(&task->task_flags,TASKf_IDLE);
|
||||
while (!(result=ScanMsg(_a1,_a2,mask,task))) {
|
||||
while (!(res=ScanMsg(_a1,_a2,mask,task))) {
|
||||
LBts(&task->task_flags,TASKf_IDLE);
|
||||
Yield;
|
||||
}
|
||||
LBtr(&task->task_flags,TASKf_IDLE);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 ScanChar()
|
||||
|
||||
@@ -37,22 +37,17 @@ U0 MouseGetDevType()
|
||||
Bool MouseRst()
|
||||
{
|
||||
U8 b,*_b;
|
||||
U16 *_w;
|
||||
F64 timeout;
|
||||
Bool result=FALSE,present;
|
||||
Bool res=FALSE;
|
||||
|
||||
mouse.has_wheel=FALSE;
|
||||
mouse.has_ext_buttons=FALSE;
|
||||
|
||||
_w=0x40E;
|
||||
present=MemPagePresentMark(_w,TRUE);
|
||||
if (*_w==0x9FC0) {
|
||||
if (*0x40E(U16 *)==0x9FC0) {
|
||||
_b=0x9FC00+0x30;
|
||||
*_b=1; //This enables my mouse. It might be for one machine.
|
||||
//USB DMA packets, set-up by BIOS to make legacy PS/2?
|
||||
}
|
||||
if (!present)
|
||||
MemPagePresentMark(_w,FALSE);
|
||||
|
||||
try {
|
||||
KbdCmdFlush;
|
||||
@@ -80,7 +75,7 @@ Bool MouseRst()
|
||||
KbdMouseCmdAck(0xF3,10);
|
||||
MouseGetDevType;
|
||||
KbdMouseCmdAck(0xE8,0x03,0xE6,0xF3,100,0xF4);
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
|
||||
//Enable IRQ 12
|
||||
KbdCmdSend(KBD_CTRL,0x20);
|
||||
@@ -93,7 +88,7 @@ Bool MouseRst()
|
||||
|
||||
//This is been added to override failure
|
||||
//because the mouse sometimes still works.
|
||||
result=TRUE;
|
||||
res=TRUE;
|
||||
|
||||
try
|
||||
KbdCmdSend(KBD_CTRL,0xAE); //Enable Keyboard
|
||||
@@ -103,12 +98,12 @@ Bool MouseRst()
|
||||
mouse.pkt_size=4;
|
||||
else
|
||||
mouse.pkt_size=3;
|
||||
if (!result)
|
||||
if (!res)
|
||||
try
|
||||
KbdCmdSend(KBD_CTRL,0xA7); //Disable Mouse
|
||||
catch
|
||||
Fs->catch_except=TRUE;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 MouseSpeedSet()
|
||||
|
||||
+48
-48
@@ -38,16 +38,16 @@ U0 TaskRstAwaitingMsg(CTask *task=NULL)
|
||||
|
||||
CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags)
|
||||
{//Queues a request to compile and execute src code text.
|
||||
CSrvCmd *result;
|
||||
CSrvCmd *res;
|
||||
if (!data || !TaskValidate(srv) || master && !TaskValidate(master) ||
|
||||
srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT))
|
||||
return NULL;
|
||||
result=ACAlloc(sizeof(CSrvCmd));
|
||||
result->master_task=master;
|
||||
result->cmd_code=SVCT_EXE_STR;
|
||||
result->flags=flags;
|
||||
result->aux_str=AStrNew(data);
|
||||
result->ctrl=&srv->srv_ctrl;
|
||||
res=ACAlloc(sizeof(CSrvCmd));
|
||||
res->master_task=master;
|
||||
res->cmd_code=SVCT_EXE_STR;
|
||||
res->flags=flags;
|
||||
res->aux_str=AStrNew(data);
|
||||
res->ctrl=&srv->srv_ctrl;
|
||||
|
||||
PUSHFD
|
||||
CLI
|
||||
@@ -56,12 +56,12 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags)
|
||||
if (!TaskValidate(srv)) {
|
||||
LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED);
|
||||
POPFD
|
||||
SrvCmdDel(result);
|
||||
SrvCmdDel(res);
|
||||
return NULL;
|
||||
} else {
|
||||
LBtr(&srv->task_flags,TASKf_IDLE);
|
||||
TaskRstAwaitingMsg(srv);
|
||||
QueIns(result,srv->srv_ctrl.last_waiting);
|
||||
QueIns(res,srv->srv_ctrl.last_waiting);
|
||||
LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED);
|
||||
if (Bt(&flags,SVCf_WAKE_MASTER)) {
|
||||
Suspend(master);
|
||||
@@ -69,21 +69,21 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags)
|
||||
}
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags)
|
||||
{//Post StdIn text to servant task. Tell who the master task is.
|
||||
CSrvCmd *result;
|
||||
CSrvCmd *res;
|
||||
CTask *task;
|
||||
if (!data || !TaskValidate(srv) || master && !TaskValidate(master) ||
|
||||
srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT))
|
||||
return NULL;
|
||||
result=ACAlloc(sizeof(CSrvCmd));
|
||||
result->master_task=master; //in case somebody cares
|
||||
result->cmd_code=SVCT_TEXT_INPUT;
|
||||
result->flags=flags;
|
||||
result->aux_str=AStrNew(data);
|
||||
res=ACAlloc(sizeof(CSrvCmd));
|
||||
res->master_task=master; //in case somebody cares
|
||||
res->cmd_code=SVCT_TEXT_INPUT;
|
||||
res->flags=flags;
|
||||
res->aux_str=AStrNew(data);
|
||||
|
||||
PUSHFD
|
||||
task=srv->last_input_filter_task;
|
||||
@@ -100,20 +100,20 @@ CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags)
|
||||
CLI
|
||||
task=srv->next_input_filter_task;
|
||||
}
|
||||
result->ctrl=&task->srv_ctrl;
|
||||
res->ctrl=&task->srv_ctrl;
|
||||
while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED))
|
||||
PAUSE
|
||||
if (!TaskValidate(task)) {
|
||||
SrvCmdDel(result);
|
||||
result=NULL;
|
||||
SrvCmdDel(res);
|
||||
res=NULL;
|
||||
} else {
|
||||
LBtr(&task->task_flags,TASKf_IDLE);
|
||||
TaskRstAwaitingMsg(task);
|
||||
QueIns(result,task->srv_ctrl.last_waiting);
|
||||
QueIns(res,task->srv_ctrl.last_waiting);
|
||||
LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED);
|
||||
}
|
||||
POPFD
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags)
|
||||
@@ -134,7 +134,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags)
|
||||
PUSHFD
|
||||
if (Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0) &&
|
||||
srv!=sys_macro_task && msg_code==MSG_KEY_DOWN) {
|
||||
tempc1=AMAllocIdentical(tempc);
|
||||
tempc1=AMAllocIdent(tempc);
|
||||
CLI
|
||||
QueIns(tempc1,sys_macro_root.last);
|
||||
}
|
||||
@@ -160,7 +160,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags)
|
||||
return tempc;
|
||||
}
|
||||
|
||||
Bool JobResultScan(CSrvCmd *rqst=NULL,I64 *_result=NULL)
|
||||
Bool JobResScan(CSrvCmd *rqst=NULL,I64 *_res=NULL)
|
||||
{//Check rqst complete, return with or without.
|
||||
CSrvCtrl *ctrl;
|
||||
CSrvCmd *tempc,*tempc1;
|
||||
@@ -180,8 +180,8 @@ Bool JobResultScan(CSrvCmd *rqst=NULL,I64 *_result=NULL)
|
||||
QueRem(tempc);
|
||||
LBtr(&ctrl->flags,SVCRf_LOCKED);
|
||||
POPFD
|
||||
if (_result)
|
||||
*_result=tempc->result;
|
||||
if (_res)
|
||||
*_res=tempc->res;
|
||||
SrvCmdDel(tempc);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -190,14 +190,14 @@ Bool JobResultScan(CSrvCmd *rqst=NULL,I64 *_result=NULL)
|
||||
LBtr(&ctrl->flags,SVCRf_LOCKED);
|
||||
POPFD
|
||||
}
|
||||
if (_result)
|
||||
*_result=0;
|
||||
if (_res)
|
||||
*_res=0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
I64 JobResultGet(CSrvCmd *rqst=NULL)
|
||||
I64 JobResGet(CSrvCmd *rqst=NULL)
|
||||
{//See $LK,"::/Demo/MultiCore/Lock.CPP"$
|
||||
I64 result;
|
||||
I64 res;
|
||||
CSrvCmd *tempc1;
|
||||
if (!rqst) {
|
||||
tempc1=&Fs->srv_ctrl.next_done;
|
||||
@@ -213,8 +213,8 @@ I64 JobResultGet(CSrvCmd *rqst=NULL)
|
||||
}
|
||||
LBtr(&Fs->task_flags,TASKf_IDLE);
|
||||
//Could get taken by someone else.
|
||||
JobResultScan(rqst,&result);
|
||||
return result;
|
||||
JobResScan(rqst,&res);
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 TaskWait(CTask *task=NULL)
|
||||
@@ -268,11 +268,11 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl)
|
||||
{//Called with ctrl->flags,SVCRf_LOCKED.
|
||||
CSrvCmd *tempc=ctrl->next_waiting;
|
||||
CTask *master;
|
||||
I64 result,flags=tempc->flags,old_flags=GetRFlags;
|
||||
I64 res,flags=tempc->flags,old_flags=GetRFlags;
|
||||
if (Bt(&flags,SVCf_EXIT_ON_COMPLETE))
|
||||
result=SCR_EXIT;
|
||||
res=SCR_EXIT;
|
||||
else
|
||||
result=SCR_CONT;
|
||||
res=SCR_CONT;
|
||||
switch (tempc->cmd_code) {
|
||||
case SVCT_SPAWN_TASK:
|
||||
QueRem(tempc);
|
||||
@@ -294,7 +294,7 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl)
|
||||
SetRFlags(run_flags);
|
||||
LBtr(&Fs->task_flags,TASKf_IDLE);
|
||||
try
|
||||
tempc->result=(*tempc->addr)(tempc->fun_arg);
|
||||
tempc->res=(*tempc->addr)(tempc->fun_arg);
|
||||
catch
|
||||
Fs->catch_except=TRUE;
|
||||
SetRFlags(old_flags);
|
||||
@@ -307,15 +307,15 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl)
|
||||
SetRFlags(run_flags);
|
||||
LBtr(&Fs->task_flags,TASKf_IDLE);
|
||||
try
|
||||
tempc->result=ExePrint("%s",tempc->aux_str);
|
||||
tempc->res=ExePrint("%s",tempc->aux_str);
|
||||
catch
|
||||
Fs->catch_except=TRUE;
|
||||
SetRFlags(old_flags);
|
||||
break;
|
||||
default:
|
||||
result=SCR_DONE;
|
||||
res=SCR_DONE;
|
||||
}
|
||||
if (result) {
|
||||
if (res) {
|
||||
if (master=tempc->master_task) {
|
||||
if (!Bt(&flags,SVCf_FREE_ON_COMPLETE)) {
|
||||
CLI
|
||||
@@ -344,7 +344,7 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl)
|
||||
SetRFlags(old_flags);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL)
|
||||
@@ -376,7 +376,7 @@ sch_done:
|
||||
|
||||
I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL)
|
||||
{//Execute code text in PopUp win task.
|
||||
I64 result;
|
||||
I64 res;
|
||||
CSrvCmd *tempc;
|
||||
CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent);
|
||||
if (!parent) {
|
||||
@@ -387,26 +387,26 @@ I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL)
|
||||
Fs->popup_task=task;
|
||||
tempc=TaskExe(task,parent,buf,1<<SVCf_WAKE_MASTER|1<<SVCf_FOCUS_MASTER);
|
||||
if (_pu_task) *_pu_task=task;
|
||||
JobResultScan(tempc,&result);
|
||||
JobResScan(tempc,&res);
|
||||
Fs->popup_task=NULL;
|
||||
Kill(task);
|
||||
if (_pu_task) *_pu_task=NULL;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
I64 PopUpPrint(U8 *fmt,...)
|
||||
{//Execute code text in PopUp win task.
|
||||
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
|
||||
I64 result;
|
||||
result=PopUp(buf,Fs);
|
||||
I64 res;
|
||||
res=PopUp(buf,Fs);
|
||||
Free(buf);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 Adam(U8 *fmt,...)
|
||||
{//Sends text to the adam task which gets compiled and run.
|
||||
I64 result;
|
||||
I64 res;
|
||||
U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);
|
||||
CSrvCmd *tempc;
|
||||
if (Fs==adam_task) {
|
||||
@@ -416,9 +416,9 @@ I64 Adam(U8 *fmt,...)
|
||||
TaskWait(adam_task);
|
||||
tempc=TaskExe(adam_task,Fs,buf,1<<SVCf_WAKE_MASTER);
|
||||
}
|
||||
JobResultScan(tempc,&result);
|
||||
JobResScan(tempc,&res);
|
||||
Free(buf);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 AdamLog(U8 *fmt,...)
|
||||
|
||||
+13
-13
@@ -1,12 +1,12 @@
|
||||
U8 *StrPrintHex(U8 *dst,I64 num;I64 width)
|
||||
{
|
||||
U8 *result=dst+width;
|
||||
dst=result;
|
||||
U8 *res=dst+width;
|
||||
dst=res;
|
||||
while (width--) {
|
||||
*--dst="0123456789ABCDEF"(U8 *)[num&15];
|
||||
num>>=4;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 PutHex(I64 num,I64 width)
|
||||
@@ -422,7 +422,7 @@ I64 LstMatch(U8 *needle, U8 *haystack_lst,I64 flags=0)
|
||||
{//-2 if Ambiguous
|
||||
// -1 if not found
|
||||
// Not efficient. Use hash tables for efficiency.
|
||||
I64 n,sub=0,result=-1;
|
||||
I64 n,sub=0,res=-1;
|
||||
U8 *ptr;
|
||||
Bool exact_match=FALSE;
|
||||
if (!haystack_lst) return -1;
|
||||
@@ -447,12 +447,12 @@ I64 LstMatch(U8 *needle, U8 *haystack_lst,I64 flags=0)
|
||||
if (!*haystack_lst) //Did we reach end of haystack_lst?
|
||||
return sub; //Found Exact match
|
||||
else {
|
||||
if (result!=-1) {
|
||||
if (res!=-1) {
|
||||
if (!exact_match)
|
||||
result=-2; //Ambiguous unless later exact match.
|
||||
res=-2; //Ambiguous unless later exact match.
|
||||
} else {
|
||||
if (!(flags & LMF_EXACT))
|
||||
result=sub;
|
||||
res=sub;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -461,7 +461,7 @@ I64 LstMatch(U8 *needle, U8 *haystack_lst,I64 flags=0)
|
||||
haystack_lst++; //Skip trailing zero
|
||||
sub++;
|
||||
}
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 StrOcc(U8 *src, I64 ch)
|
||||
@@ -582,7 +582,7 @@ U8 *StrFirstOcc(U8 *src,U8 *marker)
|
||||
U8 *StrFirstRem(U8 *src,U8 *marker,U8 *dst=NULL)
|
||||
{//Remove first str segment and place in dst buf or NULL.
|
||||
I64 ch;
|
||||
U8 *ptr=src,*result=dst;
|
||||
U8 *ptr=src,*res=dst;
|
||||
if (dst) {
|
||||
while ((ch=*ptr++) && !StrOcc(marker,ch))
|
||||
*dst++=ch;
|
||||
@@ -593,17 +593,17 @@ U8 *StrFirstRem(U8 *src,U8 *marker,U8 *dst=NULL)
|
||||
StrCpy(src,ptr);
|
||||
else
|
||||
*src=0;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *StrLastOcc(U8 *src,U8 *marker)
|
||||
{//Point to last occurrence of market set in str.
|
||||
I64 ch;
|
||||
U8 *result=NULL;
|
||||
U8 *res=NULL;
|
||||
while (ch=*src++)
|
||||
if (StrOcc(marker,ch))
|
||||
result=src-1;
|
||||
return result;
|
||||
res=src-1;
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *StrLastRem(U8 *src,U8 *marker,U8 *dst=NULL)
|
||||
|
||||
+3
-3
@@ -914,10 +914,10 @@ U0 Print(U8 *fmt,...)
|
||||
|
||||
U8 *MStrPrint(U8 *fmt,...)
|
||||
{//MAlloc StrPrint. See $LK,"StrPrintJoin",A="MN:StrPrintJoin"$().
|
||||
U8 *result,*buf=StrPrintJoin(NULL,fmt,argc,argv);
|
||||
result=StrNew(buf);
|
||||
U8 *res,*buf=StrPrintJoin(NULL,fmt,argc,argv);
|
||||
res=StrNew(buf);
|
||||
Free(buf);
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 PrintErr(U8 *fmt,...)
|
||||
|
||||
+16
-16
@@ -3,7 +3,7 @@ I64 Str2I64(U8 *st,I64 radix=10,U8 **_end_ptr=NULL)
|
||||
//Allows radix change with "0x20" "0b1010" "0d123" "0o18".
|
||||
//Be careful of Str2I64("0b101",16)-->0xB101.
|
||||
Bool neg=FALSE;
|
||||
I64 ch,result=0;
|
||||
I64 ch,res=0;
|
||||
if (!st || !(2<=radix<=36)) {
|
||||
if (_end_ptr) *_end_ptr=st;
|
||||
return 0;
|
||||
@@ -35,21 +35,21 @@ ai_cont:
|
||||
while (ch=ToUpper(*st++)) {
|
||||
if (radix>10) {
|
||||
if ('0'<=ch<='9')
|
||||
result=result*radix+ch-'0';
|
||||
res=res*radix+ch-'0';
|
||||
else if ('A'<=ch<='A'+radix-11)
|
||||
result=result*radix+ch-'A'+10;
|
||||
res=res*radix+ch-'A'+10;
|
||||
else
|
||||
break;
|
||||
} else if ('0'<=ch<='0'+radix-1)
|
||||
result=result*radix+ch-'0';
|
||||
res=res*radix+ch-'0';
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (_end_ptr) *_end_ptr=st-1;
|
||||
if (neg)
|
||||
return -result;
|
||||
return -res;
|
||||
else
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
F64 Str2F64(U8 *src,U8 **_end_ptr=NULL)
|
||||
@@ -148,7 +148,7 @@ and it will return the 3rd day after
|
||||
the start of mon for seven days before
|
||||
today.
|
||||
*/
|
||||
CDate result=0;
|
||||
CDate res=0;
|
||||
CDateStruct ds,ds_now;
|
||||
U8 *src=MStrUtil(_src,SUF_REM_SPACES|SUF_TO_UPPER),
|
||||
*v=StrNew(src),
|
||||
@@ -173,8 +173,8 @@ today.
|
||||
if (*ptr=='*') {
|
||||
ptr++;
|
||||
if (*ptr=='+' || *ptr=='-')
|
||||
result.date=Str2I64(ptr,,&ptr);
|
||||
result+=Now+local_time_offset;
|
||||
res.date=Str2I64(ptr,,&ptr);
|
||||
res+=Now+local_time_offset;
|
||||
} else {
|
||||
StrFirstRem(ptr,"/",v); //Put mon into v
|
||||
ds.mon=Str2I64(v);
|
||||
@@ -189,24 +189,24 @@ today.
|
||||
Date2Struct(&ds_now,Now+local_time_offset);
|
||||
ds.year=ds_now.year;
|
||||
}
|
||||
result=Struct2Date(&ds);
|
||||
res=Struct2Date(&ds);
|
||||
}
|
||||
if (*ptr==')') ptr++;
|
||||
|
||||
if (start_mon)
|
||||
result.date=FirstDayOfMon(result.date);
|
||||
res.date=FirstDayOfMon(res.date);
|
||||
else if (end_mon)
|
||||
result.date=LastDayOfMon(result.date);
|
||||
res.date=LastDayOfMon(res.date);
|
||||
else if (start_year)
|
||||
result.date=FirstDayOfYear(result.date);
|
||||
res.date=FirstDayOfYear(res.date);
|
||||
else if (end_year)
|
||||
result.date=LastDayOfYear(result.date);
|
||||
res.date=LastDayOfYear(res.date);
|
||||
|
||||
if (*ptr=='+' || *ptr=='-')
|
||||
result.date+=Str2I64(ptr);
|
||||
res.date+=Str2I64(ptr);
|
||||
Free(src);
|
||||
Free(v);
|
||||
return result-local_time_offset;
|
||||
return res-local_time_offset;
|
||||
}
|
||||
|
||||
U8 *StrScan(U8 *src,U8 *fmt,...)
|
||||
|
||||
Reference in new issue
Block a user