/*Scans the sym table and checks
each HTT_DEFINE_STR entry to see if
it only occurs once in files.

It's a brute force solution, but
gets the job done... slowly.

Find() returns a count of matches.

FileOcc() is Find() with
output Silent().
*/

U0 UnusedDefineScan()
{
CDoc *old_put_doc,*old_display_doc,*doc;
I64 i,cnt=0;
CHashTable *table;
CHash *tmph;
CDocEntry *doc_e,*doc_e2;
Bool old_silent=IsSilent;

try {
table=Fs->hash_table;
while (table) {
for (i=0;i<=table->mask;i++) {
tmph=table->body[i];
while (tmph) {
if (tmph->type&HTT_DEFINE_STR)
cnt++;
tmph=tmph->next;
}
}
table=table->next;
}

progress1=0;
progress1_max=cnt;
StrCpy(progress1_desc,"Define Scan");

table=Fs->hash_table;
while (table) {
for (i=0;i<=table->mask;i++) {
tmph=table->body[i];
while (tmph) {
if (tmph->type&HTT_DEFINE_STR) {
progress1++;
if (FileOcc(tmph->str,"/*","+l-i+$")==1) {
doc=DocNew;
old_put_doc=DocPut;
old_display_doc=DocDisplay;
Fs->put_doc=Fs->display_doc=doc;
Find(tmph->str,"/*","+l-i+$");
Fs->put_doc=old_put_doc;
Fs->display_doc=old_display_doc;
doc_e=doc->head.next;
while (doc_e!=doc) {
if (doc_e->type_u8==DOCT_LINK) {
"%s",tmph->str;
doc_e2=DocEntryCopy(doc,doc_e);
DocInsEntry(old_put_doc,doc_e2);
'\n';
}
doc_e=doc_e->next;
}
DocDel(doc);
}
}
tmph=tmph->next;
}
}
table=table->next;
}
} catch
PutExcept;

Silent(old_silent);
'\n';
ProgressBarsRst;
}

UnusedDefineScan;