home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / Apps / DevTools / MachOViewer / Source / MachOView.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-12  |  4.1 KB  |  169 lines

  1.  
  2. #import <appkit/appkit.h>
  3. #import <MachOFile.h>
  4. #import <MappedFile.h>
  5. #import <Queue.h>
  6. #import <MachOViewwraps.h>
  7.  
  8. /* $Id: MachOView.h,v 1.13 94/05/29 14:59:23 ediger Exp Locker: ediger $ */
  9. /* $Log:    MachOView.h,v $
  10.  * Revision 1.13  94/05/29  14:59:23  ediger
  11.  * added support for drawing in section names
  12.  * 
  13.  * Revision 1.12  94/05/23  20:32:37  ediger
  14.  * stuff to support address bracket zoom-in
  15.  * 
  16.  * Revision 1.11  94/05/17  23:08:53  ediger
  17.  * support for stacking of zoomed address ranges, changed types of
  18.  * some instance vars from id to pointer to that kind of object.
  19.  * 
  20.  * Revision 1.10  94/05/10  22:41:28  ediger
  21.  * support for showing a "zooming box" by mouse-down dragging
  22.  * 
  23.  * Revision 1.9  94/05/04  11:20:40  ediger
  24.  * support for drawing thread's program counter(s)
  25.  * 
  26.  * Revision 1.8  94/05/01  17:33:12  ediger
  27.  * efficiency improvements
  28.  * 
  29.  * Revision 1.7  94/02/07  21:21:39  ediger
  30.  * added instance var to hold a memory-mapped file.
  31.  * added methods and change struct addressMapping so that segment names
  32.  * can be displayed.
  33.  * 
  34.  * Revision 1.6  94/01/30  21:29:39  ediger
  35.  * ditched doFont pswrap function, added theFont Font object instance
  36.  * to get the benefits of using a Font.
  37.  * 
  38.  * Revision 1.5  94/01/30  16:29:04  ediger
  39.  * some magic numbers relating to address label printing
  40.  * 
  41.  * Revision 1.4  94/01/01  23:02:51  ediger
  42.  * broke address label spacing calcs into separate method.
  43.  * 
  44.  * Revision 1.3  93/12/30  19:01:09  ediger
  45.  * support for showing upper and lower addresses of memor
  46.  * mapped segments
  47.  * 
  48.  * Revision 1.2  93/12/19  14:31:21  ediger
  49.  * corrected scaling and inclusion of mapped segments of library files
  50.  * 
  51.  * Revision 1.1  93/12/19  12:59:49  ediger
  52.  * Initial revision
  53.  * 
  54. */
  55.  
  56. struct addressMapping {
  57.     float         yCoordBaseLabel;
  58.     float         yCoordTopLabel;
  59.  
  60.     float         nameXcoord;
  61.     float         nameYcoord;
  62.  
  63.     unsigned long baseAddress;
  64.     unsigned long endAddress;
  65.     char         *segmentName;
  66.  
  67.     float         yCoordBase;
  68.     float         yCoordTop;
  69.  
  70.     struct sectionNameMapping *sectionMap;
  71. };
  72.  
  73. struct sectionNameMapping {
  74.     float nameYcoord;
  75.  
  76.     unsigned long sectionAddress;
  77.     char *sectionName;
  78. };
  79.  
  80. struct zoomAddress {
  81.     unsigned long hiAddr;
  82.     unsigned long loAddr;
  83.     unsigned long sumAddr;
  84. };
  85.  
  86. /* some magic numbers relating to drawing */
  87. #define LABEL_HT      12.0
  88. #define LABEL_LEADING  1.0
  89. #define LABEL_MARGIN   2.0
  90. #define LINE_WDTH      5.0
  91. #define LINE_STAGGER   7.0
  92. #define SEGMENT_GAP    2.0
  93. #define VERT_MARGIN    5.0
  94.  
  95. @interface MachOView:View
  96. {
  97.     // ids to store "connections" built by Interface Builder
  98.     id    theWindow;
  99.     id    theFont;
  100.     id  cpuType;
  101.     id  cpuSubtype;
  102.     id  maxAddress;
  103.     id  minAddress;
  104.     id  zoomButton;
  105.     id  unzoomButton;
  106.     id  showSectionsButton;
  107.  
  108.     // ids to store objects used by MachOView to do stuff
  109.     MachOFile  *theFile;     // represents Mach-O object file.
  110.     MappedFile *mappedFile;  // manages memory mapping/unmapping, Mach style.
  111.     Queue      *zoomStack;   // stack of addresses that have been zoomed to.
  112.  
  113.     unsigned long hiAddr, hiAddrZoom;
  114.     unsigned long loAddr, loAddrZoom;
  115.     unsigned long sumAddr;
  116.  
  117.     char *currentFileName;
  118.  
  119.     float                      scaleSlope, scaleYintercept;
  120.     float                      smashedSlope, smashedYintercept;
  121.     struct addressMapping     *addressMap;
  122.     struct sectionNameMapping *sectionNames;
  123.  
  124.     // display options boolean state variables
  125.     BOOL toScale;
  126.     BOOL showLibraries;
  127.     BOOL showAddresses;
  128.     BOOL showNames;
  129.     BOOL showThreads;
  130.     BOOL showSectionNames;
  131.  
  132.     // drag out a rectangle for address zooming
  133.     NXPoint  sMouseDown, sFirstMouseDown;
  134.     BOOL yLooping;
  135. }
  136.  
  137. - free;
  138. - freeInternals;
  139. - findSizes;
  140. - rescale;
  141. - openFileNamed:(char *)fileName;
  142. - windowWillClose:sender;
  143. - initFrame:(const NXRect *)frameRect;
  144. - drawSelf:(NXRect *)rects :(int)rectCount;
  145. - mouseDown:(NXEvent *)theEvent;
  146. - drawThreads;
  147. - drawAddresses;
  148. - drawSegmentNames;
  149. - drawSectionNames;
  150. - show:sender;
  151.  
  152. - (char *)fileType;
  153.  
  154. - toggleScaling:sender;
  155. - toggleLibraries:sender;
  156. - toggleAddresses:sender;
  157. - toggleNames:sender;
  158. - toggleThreads:sender;
  159. - toggleSections:sender;
  160.  
  161. - zoom:sender;
  162. - unzoom:sender;
  163.  
  164. - spaceLabels;
  165. - spaceNames;
  166. - spaceSectionNames;
  167.  
  168. @end
  169.