| /* TUI data manipulation routines. |
| Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. |
| Contributed by Hewlett-Packard Company. |
| |
| This file is part of GDB. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place - Suite 330, |
| Boston, MA 02111-1307, USA. */ |
| |
| #ifndef TUI_DATA_H |
| #define TUI_DATA_H |
| |
| #if defined (HAVE_NCURSES_H) |
| #include <ncurses.h> |
| #elif defined (HAVE_CURSES_H) |
| #include <curses.h> |
| #endif |
| |
| /* Generic window information */ |
| typedef struct _TuiGenWinInfo |
| { |
| WINDOW *handle; /* window handle */ |
| TuiWinType type; /* type of window */ |
| int width; /* window width */ |
| int height; /* window height */ |
| TuiPoint origin; /* origin of window */ |
| OpaquePtr content; /* content of window */ |
| int contentSize; /* Size of content (# of elements) */ |
| int contentInUse; /* Can it be used, or is it already used? */ |
| int viewportHeight; /* viewport height */ |
| int lastVisibleLine; /* index of last visible line */ |
| int isVisible; /* whether the window is visible or not */ |
| } |
| TuiGenWinInfo, *TuiGenWinInfoPtr; |
| |
| /* 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; |
| CORE_ADDR 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; |
| CORE_ADDR 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 */ |
| int start_line; |
| } |
| 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 (void); |
| extern TuiGenWinInfoPtr allocGenericWinInfo (void); |
| extern TuiWinInfoPtr allocWinInfo (TuiWinType); |
| extern void initGenericPart (TuiGenWinInfoPtr); |
| extern void initWinInfo (TuiWinInfoPtr); |
| extern TuiWinContent allocContent (int, TuiWinType); |
| extern int addContentElements (TuiGenWinInfoPtr, int); |
| extern void initContentElement (TuiWinElementPtr, TuiWinType); |
| extern void freeWindow (TuiWinInfoPtr); |
| extern void freeAllWindows (void); |
| extern void freeWinContent (TuiGenWinInfoPtr); |
| extern void freeDataContent (TuiWinContent, int); |
| extern void freeAllSourceWinsContent (void); |
| extern void tuiDelWindow (TuiWinInfoPtr); |
| extern void tuiDelDataWindows (TuiWinContent, int); |
| extern TuiWinInfoPtr winByName (char *); |
| extern TuiWinInfoPtr partialWinByName (char *); |
| extern char *winName (TuiGenWinInfoPtr); |
| extern char *displayableWinContentOf (TuiGenWinInfoPtr, TuiWinElementPtr); |
| extern char *displayableWinContentAt (TuiGenWinInfoPtr, int); |
| extern int winElementHeight (TuiGenWinInfoPtr, TuiWinElementPtr); |
| extern TuiLayoutType currentLayout (void); |
| extern void setCurrentLayoutTo (TuiLayoutType); |
| extern int termHeight (void); |
| extern void setTermHeightTo (int); |
| extern int termWidth (void); |
| extern void setTermWidthTo (int); |
| extern int historyLimit (void); |
| extern void setHistoryLimit (int); |
| extern void setGenWinOrigin (TuiGenWinInfoPtr, int, int); |
| extern TuiGenWinInfoPtr locatorWinInfoPtr (void); |
| extern TuiGenWinInfoPtr sourceExecInfoWinPtr (void); |
| extern TuiGenWinInfoPtr disassemExecInfoWinPtr (void); |
| extern char *nullStr (void); |
| extern char *blankStr (void); |
| extern char *locationStr (void); |
| extern char *breakStr (void); |
| extern char *breakLocationStr (void); |
| extern TuiListPtr sourceWindows (void); |
| extern void clearSourceWindows (void); |
| extern void clearSourceWindowsDetail (void); |
| extern void clearWinDetail (TuiWinInfoPtr winInfo); |
| extern void tuiAddToSourceWindows (TuiWinInfoPtr); |
| extern int tuiDefaultTabLen (void); |
| extern void tuiSetDefaultTabLen (int); |
| extern TuiWinInfoPtr tuiWinWithFocus (void); |
| extern void tuiSetWinWithFocus (TuiWinInfoPtr); |
| extern TuiLayoutDefPtr tuiLayoutDef (void); |
| extern int tuiWinResized (void); |
| extern void tuiSetWinResizedTo (int); |
| |
| extern TuiWinInfoPtr tuiNextWin (TuiWinInfoPtr); |
| extern TuiWinInfoPtr tuiPrevWin (TuiWinInfoPtr); |
| |
| extern void addToSourceWindows (TuiWinInfoPtr winInfo); |
| |
| #endif /* TUI_DATA_H */ |