Files
TempleOS-Rijn/LT/Utils/LinkChk.APZ
T
2018-09-08 21:45:20 +02:00

73 lines
1.5 KiB
Plaintext

#help_index "Debugging;Utils"
void LinkChkLtf(Ltf *l,U8 *flags)
{
I1 *st,buf[4];
Ltf *old_l=Fs->cur_ltf;
LtfEntry *ll=l->dummy.next;
BoolU4 found;
PrintF("File:%s\r\n",l->filename.name);
while (ll!=l) {
if (ScanKey) {
Bts(flags,FUf_CANCEL);
break;
}
if (ll->btype==LTFT_LINK) {
if (ll->flags & LTFLF_AUX_STR)
st=ll->aux_str;
else
st=ll->display;
buf[0]=CH_CTRLQ;
buf[1]=0;
Auto(buf);
Fs->cur_ltf=l;
found=Edit(st);
Fs->cur_ltf=old_l;
if (!found) {
PutFileLink(l->filename.name,ll->y);
PutS("$$FG,RED$$");
PrintF(" %04d:%s\r\n",ll->y,st);
PutS("$$FG$$");
}
}
ll=ll->next;
}
}
void LinkChkFile(I1 *filename,U8 *flags)
{
Ltf *l=LtfRead(filename,LTFF_NO_CURSOR);
LinkChkLtf(l,flags);
LtfDel(l);
}
void LinkChkList(LTDirEntry *tempm1,U8 *flags)
{
LTDirEntry *tempm2;
while (tempm1 && !Bt(flags,FUf_CANCEL)) {
tempm2=tempm1->next;
if (tempm1->attr & LT_ATTR_DIR) {
if (tempm1->sub) {
PrintF("%S %s\r\n","ST_SCANNING_DIRECTORY",tempm1->full_name);
LinkChkList(tempm1->sub,flags);
}
} else
LinkChkFile(tempm1->full_name,flags);
DelLTDirEntry(tempm1);
tempm1=tempm2;
}
}
public void LinkChk(I1 *wild=TEXT_FILE_MASK,I1 *flags=NULL)
//"+r"=recurse
//Checks for broken file links.
{
U8 f=0;
GetFFlags(&f,SysText("ST_FILE_UTIL_FLAGS"),"+r");
GetFFlags(&f,SysText("ST_FILE_UTIL_FLAGS"),flags);
LinkChkList(FindFiles(wild,f),&f);
}
#help_index ""