#help_index "Debugging;Cmd Line (Typically)" I64 LinkCheckDoc(CDoc *doc, I64 *_fuf_flags) { U8 *st; Bool found, unlock = DocLock(doc); CDoc *old_doc; CDocEntry *doc_e = doc->head.next; I64 res = 0; while (doc_e != doc) { if (KeyScan) { LBts(_fuf_flags, FUf_CANCEL); break; } if (st = DocEntryLink(doc, doc_e)) { old_doc = DocPut; DocLock(old_doc); Fs->put_doc = doc; found = DocLinkCheck(doc, st); Fs->put_doc = old_doc; DocUnlock(old_doc); if (!found) { PutFileLink(doc->filename.name,, doc_e->y); "$RED$ %04d:%s\n$FG$", doc_e->y, st; res++; } Free(st); } else if (doc_e->type_u8 == DOCT_ERROR) { PutFileLink(doc->filename.name,, doc_e->y); "$RED$ Doc Error\n$FG$"; res++; } doc_e = doc_e->next; } if (unlock) DocUnlock(doc); return res; } I64 LinkCheckFile(U8 *filename, I64 *_fuf_flags) { I64 res; CDoc *doc = DocRead(filename, DOCF_NO_CURSOR); res = LinkCheckDoc(doc, _fuf_flags); DocDel(doc); return res; } public I64 LinkCheck(U8 *files_find_mask="/*", U8 *fu_flags=NULL) {//Check documents for broken file links. I64 fuf_flags = 0, res = 0; CDirEntry *tmpde, *tmpde1; U8 *st; progress2_max = 1; FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), "+r+$+f+F+O"); FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), fu_flags); tmpde = tmpde1 = FilesFind(files_find_mask, fuf_flags); while (tmpde && !Bt(&fuf_flags, FUf_CANCEL)) { st = MStrPrint("Before %s Broke:%d", tmpde->full_name, res); if (StrLen(st) > PROGRESS_DESC_LEN - 1) st[PROGRESS_DESC_LEN - 1] = 0; StrCopy(progress2_desc, st); Free(st); Yield; res += LinkCheckFile(tmpde->full_name, &fuf_flags); st = MStrPrint("After %s Broke:%d", tmpde->full_name, res); if (StrLen(st) > PROGRESS_DESC_LEN - 1) st[PROGRESS_DESC_LEN - 1] = 0; StrCopy(progress2_desc, st); Free(st); Yield; tmpde = tmpde->next; } DirTreeDel(tmpde1); progress2_max = 0; return res; }