#help_index "Compiler" I8 LFLineAdd(I1 *fn,I8 line,ClassStruct **hint) { I1 buf[256]; I8 i; DbgInfo *dbg; ClassStruct *tempc; SysHashTable *tempht=Fs->hash_table; if (tempc=*hint) { if (line>=dbg->min_line && line<=dbg->max_line) return dbg->body[line-dbg->min_line]; } while (tempht) { for (i=0;i<=tempht->mask;i++) { tempc=tempht->body[i]; while (tempc) { if (tempc->type&(HTT_FUNCTION|HTT_SYS_SYMBOL) && tempc->source_link) { StrCpy(buf,tempc->source_link); RemoveFirstSeg(buf,":"); RemoveLastSeg(buf,","); if (*buf==':') *buf=default_drive; if (!StrCmp(fn,buf)) { if (dbg=tempc->debug) { if (line>=dbg->min_line && line<=dbg->max_line) { *hint=tempc; return dbg->body[line-dbg->min_line]; } } } } tempc=tempc->next; } } tempht=tempht->next; } return 0; } public void ListFile(I1 *filename,I1 *flags=NULL) //This works on files Loaded into memory. //flag $FG,2$+s$FG$ means size instead of address. { I8 i,f=0,last_i=0; I1 *fn=DefaultExtension(filename,"CPZ"),*fn2; Ltf *l; LtfEntry *cl; ClassStruct *hint=NULL; GetFFlags(&f,"s\0",flags); fn2=AbsoluteFileName(fn); l=LtfRead(fn2); cl=l->dummy.next; while (cl!=l) { i=LFLineAdd(fn2,cl->y+1,&hint); if (!last_i) last_i=i; if (i) { if (f&1) PrintF("$$FG,RED$$%04X$$FG$$ ",i-last_i); else PrintF("$$FG,RED$$%08X$$FG$$ ",i); } else { if (f&1) PutS(" "); else PutS(" "); } cl=LtfPutLine(cl); if (i) last_i=i; } LtfDel(l); Free(fn); Free(fn2); } #help_index ""