Files
TempleOS-Rijn/TempleOS/Adam/Utils/Merge.CPP
T
2018-09-08 21:45:52 +02:00

80 lines
2.2 KiB
C++

#help_index "Utils;Cmd Line (Typically)"
CDirEntry MCMatchFind(CDirEntry *pattern,CDirEntry *lst)
{
while (lst) {
if (!StrCmp(pattern->name,lst->name))
return lst;
lst=lst->next;
}
return NULL;
}
U0 MergeChkLst(CDirEntry *tempde1,CDirEntry *tempde2,I64 *_fuf_flags,I64 *_df_flags)
{
I64 i;
CDirEntry *tempde;
while (tempde1 && !(*_df_flags & DF_ABORT_ALL_FILES)) {
tempde=MCMatchFind(tempde1,tempde2);
if (!tempde)
"$$FG,BROWN$$Does Not Exist:%s$$FG$$\n",tempde1->full_name;
else {
if (tempde1->attr & _ATTR_DIR)
MergeChkLst(tempde1->sub,tempde->sub,_fuf_flags,_df_flags);
else {
i=tempde1->datetime-tempde->datetime;
if (AbsI64(i)>CDATE_FREQ*2) { //Filedates can shift due to conversion
"%s",tempde1->full_name;
NewLine;
if (Bt(_fuf_flags,FUf_DIFF)) {
if (FilesFindMatch(tempde1->full_name,FILEMASK_TXT))
Diff(tempde->full_name,tempde1->full_name,_df_flags);
}
}
}
}
tempde1=tempde1->next;
}
}
public U0 MergeChk(
U8 *dst_files_find_mask="/TempleOS/*",
U8 *src_files_find_mask="/TempleOS/*",
U8 *fu_flags=NULL)
//"+d"=Do $LK,"Diff","MN:Diff"$() on files
{
I64 df_flags=0,fuf_flags=0;
CDirEntry *tempde1=NULL,*tempde2=NULL;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r");
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
if (fuf_flags&~(FUG_FILES_FIND|FUF_DIFF))
throw(EXCEPT_FUF,3);
PrintWarn("This is based strictly on file dates.\n");
tempde1=FilesFind(src_files_find_mask,fuf_flags&FUG_FILES_FIND);
tempde2=FilesFind(dst_files_find_mask,fuf_flags&FUG_FILES_FIND);
fuf_flags&=FUF_DIFF;
MergeChkLst(tempde1,tempde2,&fuf_flags,&df_flags);
DirLstDel(tempde1);
DirLstDel(tempde2);
}
#help_index "Utils;Cmd Line (Typically)"
public U0 NewFiles(U8 *files_find_mask="/TempleOS/*",CDate cdt=0,U8 *fu_flags=NULL)
{//List new files
I64 fuf_flags=0;
CDirEntry *tempde,*tempde1;
if (!cdt) cdt=sys_compile_time;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F");
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
tempde=tempde1=FilesFind(files_find_mask,fuf_flags);
while (tempde) {
if (tempde->datetime>cdt)
"%s\n",tempde->full_name;
tempde=tempde->next;
}
DirLstDel(tempde1);
}
#help_index ""