/*Scans the symbol 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, count = 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) count++; tmph = tmph->next; } } table = table->next; } progress1 = 0; progress1_max = count; StrCopy(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'; ProgressBarsReset; } UnusedDefineScan;