Refactor FU flags.

Remove FUF_Z_OR_NOT_Z, FUF_RISKY, FUF_EXPAND
Update Size1 and SizeRep1 accordingly
This commit is contained in:
xmm15 2020-02-23 02:36:07 -06:00
parent 5514ca2e8a
commit 5660626621
12 changed files with 772 additions and 721 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -159,8 +159,8 @@ U8 *DirNameAbs(U8 *_dirname)
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 *FileNameAbs(U8 *_filename,I64 fuf_flags=NONE)
{//Absolute filename. Accepts $LK,"FUF_SCAN_PARENTS",A="MN:FUF_SCAN_PARENTS"$.
U8 *res,*filename,*buf,*buf_file,*buf_dir,*free_filename,*free_buf;
CDirEntry de;
free_filename=filename=MStrUtil(_filename,

View File

@ -96,18 +96,102 @@ U0 DefinePrint(U8 *dname,U8 *src,...)
U0 SysDefinesLoad()
{
DefineListLoad("ST_OFF_ON","Off\0On\0");
DefineListLoad("ST_HTT_TYPES","ExportSysSym\0ImportSysSym\0DefineStr\0GlbVar\0"
"Class\0IntType\0Funct\0Word\0DictWord\0KeyWord\0AsmKeyWord\0OpCode\0"
"Reg\0File\0Module\0HelpFile\0FramePtr\0\0\0\0\0\0\0Private\0"
"Public\0Export\0Import\0Imm\0Goto\0Res\0Unres\0Local\0");
DefineListLoad("ST_DAYS_OF_WEEK","Sunday\0Monday\0Tuesday\0Wednesday\0"
"Thursday\0Friday\0Saturday\0");
DefineListLoad("ST_MONTHS","January\0February\0March\0April\0May\0"
"June\0July\0August\0September\0October\0November\0December\0");
DefineListLoad("ST_FILE_ATTRS","R\0H\0S\0V\0D\0A\0\0\0X\0T\0Z\0C\0F\0");
DefineListLoad("ST_FILE_UTIL_FLAGS","r\0d\0i\0a\0c\0R\0p\0m\0x\0s\0"
"D\0F\0T\0$$\0S\0A\0J\0G\0Z\0O\0P\0f\0l\0lb\0la\0");
DefineListLoad("ST_OFF_ON",
"Off\0"
"On\0");
DefineListLoad("ST_HTT_TYPES",
"ExportSysSym\0"
"ImportSysSym\0"
"DefineStr\0"
"GlbVar\0"
"Class\0"
"IntType\0"
"Funct\0"
"Word\0"
"DictWord\0"
"KeyWord\0"
"AsmKeyWord\0"
"OpCode\0"
"Reg\0"
"File\0"
"Module\0"
"HelpFile\0"
"FramePtr\0"
"\0\0\0\0\0\0"
"Private\0"
"Public\0"
"Export\0"
"Import\0"
"Imm\0"
"Goto\0"
"Res\0"
"Unres\0"
"Local\0");
DefineListLoad("ST_DAYS_OF_WEEK",
"Sunday\0"
"Monday\0"
"Tuesday\0"
"Wednesday\0"
"Thursday\0"
"Friday\0"
"Saturday\0");
DefineListLoad("ST_MONTHS",
"January\0"
"February\0"
"March\0"
"April\0"
"May\0"
"June\0"
"July\0"
"August\0"
"September\0"
"October\0"
"November\0"
"December\0");
DefineListLoad("ST_FILE_ATTRS",
"R\0"
"H\0"
"S\0"
"V\0"
"D\0"
"A\0"
"\0"
"\0"
"X\0"
"T\0"
"Z\0"
"C\0"
"F\0");
DefineListLoad("ST_FILE_UTIL_FLAGS",
"r\0"
"d\0"
"i\0"
"a\0"
"c\0"
"R\0"
"p\0"
"m\0"
"s\0"
"D\0"
"F\0"
"T\0"
"$$\0"
"S\0"
"A\0"
"J\0"
"G\0"
"O\0"
"P\0"
"f\0"
"l\0"
"lb\0"
"la\0");
DefineListLoad("ST_BLKDEV_TYPES",
"NULL\0RAM\0ATA\0FILE_READ\0FILE_WRITE\0ATAPI\0");
DefineListLoad("ST_DRIVE_TYPES",

File diff suppressed because one or more lines are too long

View File

@ -2716,67 +2716,59 @@ public class CDirEntry
#help_index "File/Program Routines"
//File Util Flags
//See $LK,"ST_FILE_UTIL_FLAGS",A="MN:ST_FILE_UTIL_FLAGS"$
#define FUf_RECURSE 0
#define FUf_DIFF 1
#define FUf_DEL 1
#define FUf_IGNORE 2
#define FUf_ALL 3
#define FUf_CANCEL 4
#define FUf_REPLACE 5
#define FUf_RISKY 5
#define FUf_PUBLIC 6
#define FUf_MAP 7
#define FUf_EXPAND 8
#define FUf_SINGLE 9
#define FUf_JUST_DIRS 10
#define FUf_JUST_FILES 11
#define FUf_JUST_TXT 12
#define FUf_JUST_DD 13
#define FUf_JUST_SRC 14
#define FUf_JUST_AOT 15
#define FUf_JUST_JIT 16
#define FUf_JUST_GR 17
#define FUf_Z_OR_NOT_Z 18
#define FUf_CLUS_ORDER 19
#define FUf_SCAN_PARENTS 20
#define FUf_FLATTEN_TREE 21
#define FUf_WHOLE_LABELS 22
#define FUf_WHOLE_LABELS_BEFORE 23
#define FUf_WHOLE_LABELS_AFTER 24
#define FUf_RECURSE 0 // r
#define FUf_DIFF 1 // d
#define FUf_DEL 1 // d
#define FUf_IGNORE 2 // i
#define FUf_ALL 3 // a
#define FUf_CANCEL 4 // c
#define FUf_REPLACE 5 // R
#define FUf_PUBLIC 6 // p
#define FUf_MAP 7 // m
#define FUf_SINGLE 8 // s
#define FUf_JUST_DIRS 9 // D
#define FUf_JUST_FILES 10 // F
#define FUf_JUST_TXT 11 // T
#define FUf_JUST_DD 12 // $$
#define FUf_JUST_SRC 13 // S
#define FUf_JUST_AOT 14 // A
#define FUf_JUST_JIT 15 // J
#define FUf_JUST_GR 16 // G
#define FUf_CLUS_ORDER 17 // O (Move disk head one direction)
#define FUf_SCAN_PARENTS 18 // P
#define FUf_FLATTEN_TREE 19 // f
#define FUf_WHOLE_LABELS 20 // l
#define FUf_WHOLE_LABELS_BEFORE 21 // lb
#define FUf_WHOLE_LABELS_AFTER 22 // la
#define FUF_RECURSE 0x0000001 //r
#define FUF_DIFF 0x0000002 //d
#define FUF_DEL 0x0000002 //d
#define FUF_IGNORE 0x0000004 //i
#define FUF_ALL 0x0000008 //a
#define FUF_CANCEL 0x0000010 //c
#define FUF_REPLACE 0x0000020 //R
#define FUF_RISKY 0x0000020 //R
#define FUF_PUBLIC 0x0000040 //p
#define FUF_MAP 0x0000080 //m
#define FUF_EXPAND 0x0000100 //x
#define FUF_SINGLE 0x0000200 //s
#define FUF_JUST_DIRS 0x0000400 //D
#define FUF_JUST_FILES 0x0000800 //F
#define FUF_JUST_TXT 0x0001000 //T
#define FUF_JUST_DD 0x0002000 //$$
#define FUF_JUST_SRC 0x0004000 //S
#define FUF_JUST_AOT 0x0008000 //A
#define FUF_JUST_JIT 0x0010000 //J
#define FUF_JUST_GR 0x0020000 //G
#define FUF_Z_OR_NOT_Z 0x0040000 //Z
#define FUF_CLUS_ORDER 0x0080000 //O Move disk head one direction
#define FUF_SCAN_PARENTS 0x0100000 //P
#define FUF_FLATTEN_TREE 0x0200000 //f
#define FUF_WHOLE_LABELS 0x0400000 //l
#define FUF_WHOLE_LABELS_BEFORE 0x0800000 //lb
#define FUF_WHOLE_LABELS_AFTER 0x1000000 //la
#define FUF_RECURSE (1<<FUf_RECURSE)
#define FUF_DIFF (1<<FUf_DIFF)
#define FUF_DEL (1<<FUf_DEL)
#define FUF_IGNORE (1<<FUf_IGNORE)
#define FUF_ALL (1<<FUf_ALL)
#define FUF_CANCEL (1<<FUf_CANCEL)
#define FUF_REPLACE (1<<FUf_REPLACE)
#define FUF_PUBLIC (1<<FUf_PUBLIC)
#define FUF_MAP (1<<FUf_MAP)
#define FUF_SINGLE (1<<FUf_SINGLE)
#define FUF_JUST_DIRS (1<<FUf_JUST_DIRS)
#define FUF_JUST_FILES (1<<FUf_JUST_FILES)
#define FUF_JUST_TXT (1<<FUf_JUST_TXT)
#define FUF_JUST_DD (1<<FUf_JUST_DD)
#define FUF_JUST_SRC (1<<FUf_JUST_SRC)
#define FUF_JUST_AOT (1<<FUf_JUST_AOT)
#define FUF_JUST_JIT (1<<FUf_JUST_JIT)
#define FUF_JUST_GR (1<<FUf_JUST_GR)
#define FUF_CLUS_ORDER (1<<FUf_CLUS_ORDER)
#define FUF_SCAN_PARENTS (1<<FUf_SCAN_PARENTS)
#define FUF_FLATTEN_TREE (1<<FUf_FLATTEN_TREE)
#define FUF_WHOLE_LABELS (1<<FUf_WHOLE_LABELS)
#define FUF_WHOLE_LABELS_BEFORE (1<<FUf_WHOLE_LABELS_BEFORE)
#define FUF_WHOLE_LABELS_AFTER (1<<FUf_WHOLE_LABELS_AFTER)
#define FUG_FILES_FIND (FUF_RECURSE|FUF_SINGLE|FUF_CLUS_ORDER|\
FUF_JUST_DIRS|FUF_JUST_FILES|FUF_JUST_TXT|FUF_JUST_DD|\
FUF_JUST_SRC|FUF_JUST_AOT|FUF_JUST_JIT|FUF_JUST_GR|FUF_FLATTEN_TREE)
#define FUG_FILE_FIND (FUF_JUST_DIRS|FUF_JUST_FILES|FUF_Z_OR_NOT_Z|\
FUF_SCAN_PARENTS)
#define FUG_FILES_FIND (FUF_RECURSE|FUF_SINGLE|FUF_CLUS_ORDER|FUF_JUST_DIRS|FUF_JUST_FILES|FUF_JUST_TXT|FUF_JUST_DD|\
FUF_JUST_SRC|FUF_JUST_AOT|FUF_JUST_JIT|FUF_JUST_GR|FUF_FLATTEN_TREE)
#define FUG_FILE_FIND (FUF_JUST_DIRS|FUF_JUST_FILES|FUF_SCAN_PARENTS)
#help_index "File/Low Level"
//See $LK,"ST_BLKDEV_TYPES",A="MN:ST_BLKDEV_TYPES"$

View File

@ -449,7 +449,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE)
WinVert(Fs->win_top, Fs->win_bottom,task);
if (JobResScan(tmpc,&r)) {
st=DirFile(doc->filename.name,,"PRJ");
prj_file=FileNameAbs(st,FUF_Z_OR_NOT_Z);
prj_file=FileNameAbs(st);
Free(st);
if (FileFind(prj_file)) {
st2=DirFile(prj_file),
@ -475,8 +475,8 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE)
JobResScan(tmpc,&r);
} else {
Free(prj_file);
st=DirFile(doc->filename.name,"Load","HC");
prj_file=FileNameAbs(st,FUF_Z_OR_NOT_Z);
st=DirFile(doc->filename.name,"Load","CC");
prj_file=FileNameAbs(st);
Free(st);
if (FileFind(prj_file))
st=MStrPrint("\"$$WW,1$$\";ExeFile(\"%s\",CCF_JUST_LOAD);",prj_file);

View File

@ -99,10 +99,10 @@ Bool DocFileEd(I64 _type,U8 *filename,
Silent;
if (Bt(&edf_dof_flags,EDf_BAIL)) //if bail, scan parents
res=FileFind(filename,,
FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS);
FUF_JUST_FILES|FUF_SCAN_PARENTS);
else if (!(res=FileFind(filename,,FUF_JUST_FILES)))
other_found=FileFind(filename,,
FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS);
FUF_JUST_FILES|FUF_SCAN_PARENTS);
doc=DocRead(filename,flags);
doc->desc='Edit';
Silent(old_silent);
@ -251,7 +251,7 @@ public I64 EdLinkConvert(U8 *link_st,U8 **_filename=NULL,U8 **_needle_str=NULL,
if (LK_DOC<=res<=LK_DOC_LINE)
filename=StrNew(filename2); //Holds document address as number.
else
filename=FileNameAbs(filename2,FUF_Z_OR_NOT_Z);
filename=FileNameAbs(filename2);
}
lc_done:
Free(st);
@ -284,8 +284,7 @@ public Bool DocLinkCheck(CDoc *doc,U8 *link_st)
case LK_PLAIN_LINE:
case LK_FILE:
//We don't check line number
res=FileFind(filename,,
FUF_JUST_FILES|FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS);
res=FileFind(filename,,FUF_JUST_FILES|FUF_SCAN_PARENTS);
break;
default://TODO: Need to validate HI: and DN:
if (Ed(link_st,EDF_BAIL))
@ -309,7 +308,7 @@ public U8 *DocLinkFile(U8 *link_st)
case LK_PLAIN:
case LK_PLAIN_FIND:
case LK_PLAIN_LINE:
st=FileNameAbs(filename,FUF_Z_OR_NOT_Z|FUF_SCAN_PARENTS);
st=FileNameAbs(filename,FUF_SCAN_PARENTS);
res=StrNew(st);
Free(st);
break;

View File

@ -52,21 +52,15 @@ public I64 LineRep(U8 *files_find_mask="/*",U8 *fu_flags=NULL)
return res;
}
I64 SizeRep1(CDirEntry *tmpde,I64 *_fuf_flags)
I64 SizeRep1(CDirEntry *tmpde)
{
I64 res=0,i;
U8 buf[BLK_SIZE];
CDrive *drive;
while (tmpde) {
if (tmpde->attr&RS_ATTR_DIR)
i=SizeRep1(tmpde->sub,_fuf_flags);
else if ((i=tmpde->size) && Bt(_fuf_flags,FUf_EXPAND) &&
FileAttr(tmpde->name)&RS_ATTR_COMPRESSED) {
drive=Letter2Drive(*tmpde->full_name);
BlkRead(drive,buf,Clus2Blk(drive,tmpde->clus),1);
i=(&buf)(CArcCompress *)->expanded_size;
}
tmpde->user_data=i;
i=SizeRep1(tmpde->sub);
else
i=tmpde->size;
tmpde->user_data=i; //Store size of the entry in user_data
res+=i;
tmpde=tmpde->next;
}
@ -76,28 +70,26 @@ U0 SizeRep2(CDoc *doc,CDirEntry *tmpde)
{
while (tmpde) {
if (tmpde->attr&RS_ATTR_DIR) {
DocPrint(doc,"%10,d $$TR+C,\"%s\"$$\n$$ID,2$$",
tmpde->user_data,tmpde->name);
DocPrint(doc,"%10,d $$TR+C,\"%s\"$$\n$$ID,2$$",tmpde->user_data,tmpde->name);
SizeRep2(doc,tmpde->sub);
DocPrint(doc,"$$ID,-2$$");
} else {
DocPrint(doc,"%10,d ",tmpde->user_data);
DocPrint(doc,"$$LK,\"%s\",A=\"FI:%s\"$$\n",
tmpde->name,tmpde->full_name);
DocPrint(doc,"$$LK,\"%s\",A=\"FI:%s\"$$\n",tmpde->name,tmpde->full_name);
}
tmpde=tmpde->next;
}
}
public I64 SizeRep(U8 *files_find_mask="/*",U8 *fu_flags=NULL)
{//Report file sizes. "+x" for expanded size of compressed files.
public I64 SizeRep(U8 *files_find_mask="/*", U8 *fu_flags=NONE)
{//Report file sizes.
I64 fuf_flags=0,res=0;
CDoc *doc=DocNew;
CDirEntry *tmpde1=NULL;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r");
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
if (tmpde1=FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND)) {
fuf_flags&=FUF_EXPAND;
res=SizeRep1(tmpde1,&fuf_flags);
if (tmpde1=FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND))
{
res = SizeRep1(tmpde1);
DocPrint(doc,"%10,d $$TR+C,\"%s\"$$\n$$ID,2$$",res,files_find_mask);
SizeRep2(doc,tmpde1);
DocPrint(doc,"$$ID,-2$$");

View File

@ -77,40 +77,33 @@ U0 FOFlatten(CDirEntry *tmpde,CDirEntry **a,I64 *i)
}
}
I64 Size1(CDirEntry *tmpde,I64 *_fuf_flags,I64 round_to)
I64 Size1(CDirEntry *tmpde,I64 round_to)
{
U8 buf[BLK_SIZE];
I64 res=0,i;
CDrive *drive;
while (tmpde) {
if ((i=tmpde->size) && Bt(_fuf_flags,FUf_EXPAND) &&
!(tmpde->attr&RS_ATTR_DIR) &&
FileAttr(tmpde->name)&RS_ATTR_COMPRESSED) {
drive=Letter2Drive(*tmpde->full_name);
BlkRead(drive,buf,Clus2Blk(drive,tmpde->clus),1);
i=(&buf)(CArcCompress *)->expanded_size;
}
I64 res = 0, i;
while (tmpde)
{
i=tmpde->size;
if (round_to)
i=CeilU64(tmpde->size,round_to);
if (tmpde->attr&RS_ATTR_DIR)
i+=Size1(tmpde->sub,_fuf_flags,round_to);
tmpde->user_data=i;
res+=i;
tmpde=tmpde->next;
i = CeilU64(tmpde->size, round_to);
if (tmpde->attr & RS_ATTR_DIR)
i += Size1(tmpde->sub, round_to);
tmpde->user_data=i; //Store size in user_data member
res += i;
tmpde = tmpde->next;
}
return res;
}
public I64 Size(U8 *files_find_mask="/*",U8 *fu_flags=NULL,I64 round_to=0)
{//Total size of files in mask. "+x" for expanded size.
//Does not include directory size of base directory, but
//does include size of sub directories.
{//Total size of files in mask.
//Does not include directory size of base directory, but does include size of sub directories.
I64 fuf_flags=0,res=0;
CDirEntry *tmpde1=NULL;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r");
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
if (tmpde1=FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND)) {
fuf_flags&=FUF_EXPAND;
res=Size1(tmpde1,&fuf_flags,round_to);
if (tmpde1=FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND))
{
res=Size1(tmpde1,round_to);
DirTreeDel(tmpde1);
}
return res;