#ifndef TUI_DATA_H #define TUI_DATA_H /* Constant definitions */ #define DEFAULT_TAB_LEN 8 #define NO_SRC_STRING "[ No Source Available ]" #define NO_DISASSEM_STRING "[ No Assembly Available ]" #define NO_REGS_STRING "[ Register Values Unavailable ]" #define NO_DATA_STRING "[ No Data Values Displayed ]" #define MAX_CONTENT_COUNT 100 #define SRC_NAME "SRC" #define CMD_NAME "CMD" #define DATA_NAME "REGS" #define DISASSEM_NAME "ASM" #define TUI_NULL_STR "" #define DEFAULT_HISTORY_COUNT 25 #define BOX_WINDOW TRUE #define DONT_BOX_WINDOW FALSE #define HILITE TRUE #define NO_HILITE FALSE #define WITH_LOCATOR TRUE #define NO_LOCATOR FALSE #define EMPTY_SOURCE_PROMPT TRUE #define NO_EMPTY_SOURCE_PROMPT FALSE #define UNDEFINED_ITEM -1 #define MIN_WIN_HEIGHT 3 #define MIN_CMD_WIN_HEIGHT 3 #define FILE_PREFIX "File: " #define PROC_PREFIX "Procedure: " #define LINE_PREFIX "Line: " #define PC_PREFIX "pc: " #define TUI_FLOAT_REGS_NAME "$FREGS" #define TUI_FLOAT_REGS_NAME_LOWER "$fregs" #define TUI_GENERAL_REGS_NAME "$GREGS" #define TUI_GENERAL_REGS_NAME_LOWER "$gregs" #define TUI_SPECIAL_REGS_NAME "$SREGS" #define TUI_SPECIAL_REGS_NAME_LOWER "$sregs" #define TUI_GENERAL_SPECIAL_REGS_NAME "$REGS" #define TUI_GENERAL_SPECIAL_REGS_NAME_LOWER "$regs" /* Scroll direction enum */ typedef enum { FORWARD_SCROLL, BACKWARD_SCROLL, LEFT_SCROLL, RIGHT_SCROLL } TuiScrollDirection, *TuiScrollDirectionPtr; /* General list struct */ typedef struct _TuiList { OpaqueList list; int count; } TuiList, *TuiListPtr; /* The kinds of layouts available */ typedef enum { SRC_COMMAND, DISASSEM_COMMAND, SRC_DISASSEM_COMMAND, SRC_DATA_COMMAND, DISASSEM_DATA_COMMAND, UNDEFINED_LAYOUT } TuiLayoutType, *TuiLayoutTypePtr; /* Basic data types that can be displayed in the data window. */ typedef enum _TuiDataType { TUI_REGISTER, TUI_SCALAR, TUI_COMPLEX, TUI_STRUCT } TuiDataType, TuiDataTypePtr; /* Types of register displays */ typedef enum _TuiRegisterDisplayType { TUI_UNDEFINED_REGS, TUI_GENERAL_REGS, TUI_SFLOAT_REGS, TUI_DFLOAT_REGS, TUI_SPECIAL_REGS, TUI_GENERAL_AND_SPECIAL_REGS } TuiRegisterDisplayType, *TuiRegisterDisplayTypePtr; /* Structure describing source line or line address */ typedef union _TuiLineOrAddress { int lineNo; Opaque addr; } TuiLineOrAddress, *TuiLineOrAddressPtr; /* Current Layout definition */ typedef struct _TuiLayoutDef { TuiWinType displayMode; int split; TuiRegisterDisplayType regsDisplayType; TuiRegisterDisplayType floatRegsDisplayType; } TuiLayoutDef, *TuiLayoutDefPtr; /* Elements in the Source/Disassembly Window */ typedef struct _TuiSourceElement { char *line; TuiLineOrAddress lineOrAddr; int isExecPoint; int hasBreak; } TuiSourceElement, *TuiSourceElementPtr; /* Elements in the data display window content */ typedef struct _TuiDataElement { char *name; int itemNo; /* the register number, or data display number */ TuiDataType type; Opaque value; int highlight; } TuiDataElement, *TuiDataElementPtr; /* Elements in the command window content */ typedef struct _TuiCommandElement { char *line; } TuiCommandElement, *TuiCommandElementPtr; #define MAX_LOCATOR_ELEMENT_LEN 100 /* Elements in the locator window content */ typedef struct _TuiLocatorElement { char fileName[MAX_LOCATOR_ELEMENT_LEN]; char procName[MAX_LOCATOR_ELEMENT_LEN]; int lineNo; Opaque addr; } TuiLocatorElement, *TuiLocatorElementPtr; /* An content element in a window */ typedef union { TuiSourceElement source; /* the source elements */ TuiGenWinInfo dataWindow; /* data display elements */ TuiDataElement data; /* elements of dataWindow */ TuiCommandElement command; /* command elements */ TuiLocatorElement locator; /* locator elements */ char *simpleString; /* simple char based elements */ } TuiWhichElement, *TuiWhichElementPtr; typedef struct _TuiWinElement { int highlight; TuiWhichElement whichElement; } TuiWinElement, *TuiWinElementPtr; /* This describes the content of the window. */ typedef TuiWinElementPtr *TuiWinContent; /* This struct defines the specific information about a data display window */ typedef struct _TuiDataInfo { TuiWinContent dataContent; /* start of data display content */ int dataContentCount; TuiWinContent regsContent; /* start of regs display content */ int regsContentCount; TuiRegisterDisplayType regsDisplayType; int regsColumnCount; int displayRegs; /* Should regs be displayed at all? */ } TuiDataInfo, *TuiDataInfoPtr; typedef struct _TuiSourceInfo { int hasLocator; /* Does locator belongs to this window? */ TuiGenWinInfoPtr executionInfo; /* execution information window */ int horizontalOffset; /* used for horizontal scroll */ TuiLineOrAddress startLineOrAddr; } TuiSourceInfo, *TuiSourceInfoPtr; typedef struct _TuiCommandInfo { int curLine; /* The current line position */ int curch; /* The current cursor position */ } TuiCommandInfo, *TuiCommandInfoPtr; /* This defines information about each logical window */ typedef struct _TuiWinInfo { TuiGenWinInfo generic; /* general window information */ union { TuiSourceInfo sourceInfo; TuiDataInfo dataDisplayInfo; TuiCommandInfo commandInfo; Opaque opaque; } detail; int canHighlight; /* Can this window ever be highlighted? */ int isHighlighted; /* Is this window highlighted? */ } TuiWinInfo, *TuiWinInfoPtr; /* MACROS (prefixed with m_) */ /* Testing macros */ #define m_genWinPtrIsNull(winInfo) \ ((winInfo) == (TuiGenWinInfoPtr)NULL) #define m_genWinPtrNotNull(winInfo) \ ((winInfo) != (TuiGenWinInfoPtr)NULL) #define m_winPtrIsNull(winInfo) \ ((winInfo) == (TuiWinInfoPtr)NULL) #define m_winPtrNotNull(winInfo) \ ((winInfo) != (TuiWinInfoPtr)NULL) #define m_winIsSourceType(type) \ (type == SRC_WIN || type == DISASSEM_WIN) #define m_winIsAuxillary(winType) \ (winType > MAX_MAJOR_WINDOWS) #define m_hasLocator(winInfo) \ ( ((winInfo) != (TuiWinInfoPtr)NULL) ? \ (winInfo->detail.sourceInfo.hasLocator) : \ FALSE ) #define m_setWinHighlightOn(winInfo) \ if ((winInfo) != (TuiWinInfoPtr)NULL) \ (winInfo)->isHighlighted = TRUE #define m_setWinHighlightOff(winInfo) \ if ((winInfo) != (TuiWinInfoPtr)NULL) \ (winInfo)->isHighlighted = FALSE /* Global Data */ extern TuiWinInfoPtr winList[MAX_MAJOR_WINDOWS]; extern int tui_version; /* Macros */ #define srcWin winList[SRC_WIN] #define disassemWin winList[DISASSEM_WIN] #define dataWin winList[DATA_WIN] #define cmdWin winList[CMD_WIN] /* Data Manipulation Functions */ extern void initializeStaticData PARAMS ((void)); extern TuiGenWinInfoPtr allocGenericWinInfo PARAMS ((void)); extern TuiWinInfoPtr allocWinInfo PARAMS ((TuiWinType)); extern void initGenericPart PARAMS ((TuiGenWinInfoPtr)); extern void initWinInfo PARAMS ((TuiWinInfoPtr)); extern TuiWinContent allocContent PARAMS ((int, TuiWinType)); extern int addContentElements PARAMS ((TuiGenWinInfoPtr, int)); extern void initContentElement PARAMS ((TuiWinElementPtr, TuiWinType)); extern void freeWindow PARAMS ((TuiWinInfoPtr)); extern void freeAllWindows PARAMS ((void)); extern void freeWinContent PARAMS ((TuiGenWinInfoPtr)); extern void freeDataContent PARAMS ((TuiWinContent, int)); extern void freeAllSourceWinsContent PARAMS ((void)); extern void tuiDelWindow PARAMS ((TuiWinInfoPtr)); extern void tuiDelDataWindows PARAMS ((TuiWinContent, int)); extern TuiWinInfoPtr winByName PARAMS ((char *)); extern TuiWinInfoPtr partialWinByName PARAMS ((char *)); extern char *winName PARAMS ((TuiGenWinInfoPtr)); extern char *displayableWinContentOf PARAMS ((TuiGenWinInfoPtr, TuiWinElementPtr)); extern char *displayableWinContentAt PARAMS ((TuiGenWinInfoPtr, int)); extern int winElementHeight PARAMS ((TuiGenWinInfoPtr, TuiWinElementPtr)); extern TuiLayoutType currentLayout PARAMS ((void)); extern void setCurrentLayoutTo PARAMS ((TuiLayoutType)); extern int termHeight PARAMS ((void)); extern void setTermHeight PARAMS ((int)); extern int termWidth PARAMS ((void)); extern void setTermWidth PARAMS ((int)); extern int historyLimit PARAMS ((void)); extern void setHistoryLimit PARAMS ((int)); extern void setGenWinOrigin PARAMS ((TuiGenWinInfoPtr, int, int)); extern TuiGenWinInfoPtr locatorWinInfoPtr PARAMS ((void)); extern TuiGenWinInfoPtr sourceExecInfoWinPtr PARAMS ((void)); extern TuiGenWinInfoPtr disassemExecInfoWinPtr PARAMS ((void)); extern char *nullStr PARAMS ((void)); extern char *blankStr PARAMS ((void)); extern char *locationStr PARAMS ((void)); extern char *breakStr PARAMS ((void)); extern char *breakLocationStr PARAMS ((void)); extern TuiListPtr sourceWindows PARAMS ((void)); extern void clearSourceWindows PARAMS ((void)); extern void clearSourceWindowsDetail PARAMS ((void)); extern void clearWinDetail PARAMS ((TuiWinInfoPtr winInfo)); extern void tuiAddToSourceWindows PARAMS ((TuiWinInfoPtr)); extern int tuiDefaultTabLen PARAMS ((void)); extern void tuiSetDefaultTabLen PARAMS ((int)); extern TuiWinInfoPtr tuiWinWithFocus PARAMS ((void)); extern void tuiSetWinWithFocus PARAMS ((TuiWinInfoPtr)); extern TuiLayoutDefPtr tuiLayoutDef PARAMS ((void)); extern int tuiWinResized PARAMS ((void)); extern void tuiSetWinResizedTo PARAMS ((int)); extern TuiWinInfoPtr tuiNextWin PARAMS ((TuiWinInfoPtr)); extern TuiWinInfoPtr tuiPrevWin PARAMS ((TuiWinInfoPtr)); #endif /* TUI_DATA_H */