TempleOSCDV4.06.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:47:19 +02:00
1 parent 6fe38d2d9d
commit b632ab9a4f
261 files changed
+6282 -5801

No files matched your search

+30 -30
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+6 -6
View File
@@ -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
View File
@@ -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');
+4 -4
View File
@@ -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;
}
+5 -5
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
+1 -1
View File
@@ -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
View File
@@ -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;
+32 -32
View File
@@ -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)
+20 -20
View File
@@ -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;
}
+15 -15
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large. Load diff
+55 -57
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+6 -53
View File
@@ -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;
}
+5 -7
View File
@@ -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
View File
@@ -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;
}
-11
View File
@@ -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
+12 -12
View File
@@ -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()
+6 -11
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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,...)