// module line info internal interfaces #ifndef __MLI_INCLUDED__ #define __MLI_INCLUDED__ struct SrcFile; typedef SrcFile* pSrcFile; struct SectInfo; typedef SectInfo* pSectInfo; struct Lines; typedef Lines *pLines; struct MLI { MLI() : cfiles(0), pSrcFiles(0), csect(0), pSectInfos(0) { } BOOL AddLines(SZ_CONST szSrc, ISECT isect, OFF offCon, CB cbCon, OFF doff, LINE lineStart, IMAGE_LINENUMBER *plnumCoff, CB cb); pSrcFile AddSrcFile(SZ_CONST szfilename); BOOL Emit(Buffer& buffer); void EmitSecContribs(Mod1* pmod1); BOOL EmitFileInfo(Mod1* pmod1); BOOL CollectSections(); BOOL Dump(const Buffer& buffer) const; POOL pool; Mod1* pmod1; USHORT cfiles; pSrcFile pSrcFiles; USHORT csect; pSectInfo pSectInfos; }; struct SrcFile { SrcFile(SZ_CONST szFile_) : pNext(0), cbName(szFile_ ? strlen(szFile_) : 0), size(0), szFile(szFile_), csect(0), pSectInfos(0) { } pSectInfo AddSectInfo(ISECT isect, OFF offMin, OFF offMax, POOL& pool); OFF Size(); BOOL Emit(Buffer& buffer, OFF off) const; pSrcFile pNext; OFF size; USHORT cbName; SZ_CONST szFile; USHORT csect; pSectInfo pSectInfos; }; struct SectInfo { SectInfo(ISECT isect_, OFF offMin_, OFF offMax_) : pNext(0), isect(isect_), cPair(0), pHead(0), ppTail(&pHead), size(0), offMin(offMin_), offMax(offMax_) { } BOOL AddLineNumbers(int linenumber, int offset, POOL& pool); BOOL Emit(Buffer& buffer) const; pSectInfo pNext; USHORT isect; USHORT cPair; pLines pHead; pLines* ppTail; OFF size; OFF offMin; OFF offMax; }; struct Lines { Lines(OFF off_, ULONG line_) : pNext(0), off(off_), line(line_) { } pLines pNext; OFF off; ULONG line; }; #endif // !__MLI_INCLUDED__