📄 tuilayout.c
字号:
if (layoutDef->displayMode == SRC_WIN) tuiSetLayout (SRC_COMMAND, TUI_UNDEFINED_REGS); else tuiSetLayout (DISASSEM_DATA_COMMAND, layoutDef->regsDisplayType); } return;} /* _tuiHandleXDBLayout */static void_tuiToggleLayout_command (char *arg, int fromTTY){ TuiLayoutDefPtr layoutDef = tuiLayoutDef (); /* Make sure the curses mode is enabled. */ tui_enable (); if (layoutDef->displayMode == SRC_WIN) layoutDef->displayMode = DISASSEM_WIN; else layoutDef->displayMode = SRC_WIN; if (!layoutDef->split) _tuiHandleXDBLayout (layoutDef);}static void_tuiToggleSplitLayout_command (char *arg, int fromTTY){ TuiLayoutDefPtr layoutDef = tuiLayoutDef (); /* Make sure the curses mode is enabled. */ tui_enable (); layoutDef->split = (!layoutDef->split); _tuiHandleXDBLayout (layoutDef);}static void_tuiLayout_command (char *arg, int fromTTY){ /* Make sure the curses mode is enabled. */ tui_enable (); /* Switch to the selected layout. */ if (tui_set_layout (arg) != TUI_SUCCESS) warning ("Invalid layout specified.\n%s", LAYOUT_USAGE);}/* ** _nextLayout(). ** Answer the previous layout to cycle to. */static TuiLayoutType_nextLayout (void){ TuiLayoutType newLayout; newLayout = currentLayout (); if (newLayout == UNDEFINED_LAYOUT) newLayout = SRC_COMMAND; else { newLayout++; if (newLayout == UNDEFINED_LAYOUT) newLayout = SRC_COMMAND; } return newLayout;} /* _nextLayout *//* ** _prevLayout(). ** Answer the next layout to cycle to. */static TuiLayoutType_prevLayout (void){ TuiLayoutType newLayout; newLayout = currentLayout (); if (newLayout == SRC_COMMAND) newLayout = DISASSEM_DATA_COMMAND; else { newLayout--; if (newLayout == UNDEFINED_LAYOUT) newLayout = DISASSEM_DATA_COMMAND; } return newLayout;} /* _prevLayout *//* ** _makeCommandWindow(). */static void_makeCommandWindow (TuiWinInfoPtr * winInfoPtr, int height, int originY){ _initAndMakeWin ((Opaque *) winInfoPtr, CMD_WIN, height, termWidth (), 0, originY, DONT_BOX_WINDOW); (*winInfoPtr)->canHighlight = FALSE; return;} /* _makeCommandWindow *//* ** _makeSourceWindow(). */static void_makeSourceWindow (TuiWinInfoPtr * winInfoPtr, int height, int originY){ _makeSourceOrDisassemWindow (winInfoPtr, SRC_WIN, height, originY); return;} /* _makeSourceWindow *//* ** _makeDisassemWindow(). */static void_makeDisassemWindow (TuiWinInfoPtr * winInfoPtr, int height, int originY){ _makeSourceOrDisassemWindow (winInfoPtr, DISASSEM_WIN, height, originY); return;} /* _makeDisassemWindow *//* ** _makeDataWindow(). */static void_makeDataWindow (TuiWinInfoPtr * winInfoPtr, int height, int originY){ _initAndMakeWin ((Opaque *) winInfoPtr, DATA_WIN, height, termWidth (), 0, originY, BOX_WINDOW); return;} /* _makeDataWindow *//* ** _showSourceCommand(). ** Show the Source/Command layout */static void_showSourceCommand (void){ _showSourceOrDisassemAndCommand (SRC_COMMAND); return;} /* _showSourceCommand *//* ** _showDisassemCommand(). ** Show the Dissassem/Command layout */static void_showDisassemCommand (void){ _showSourceOrDisassemAndCommand (DISASSEM_COMMAND); return;} /* _showDisassemCommand *//* ** _showSourceDisassemCommand(). ** Show the Source/Disassem/Command layout */static void_showSourceDisassemCommand (void){ if (currentLayout () != SRC_DISASSEM_COMMAND) { int cmdHeight, srcHeight, asmHeight; if (m_winPtrNotNull (cmdWin)) cmdHeight = cmdWin->generic.height; else cmdHeight = termHeight () / 3; srcHeight = (termHeight () - cmdHeight) / 2; asmHeight = termHeight () - (srcHeight + cmdHeight); if (m_winPtrIsNull (srcWin)) _makeSourceWindow (&srcWin, srcHeight, 0); else { _initGenWinInfo (&srcWin->generic, srcWin->generic.type, srcHeight, srcWin->generic.width, srcWin->detail.sourceInfo.executionInfo->width, 0); srcWin->canHighlight = TRUE; _initGenWinInfo (srcWin->detail.sourceInfo.executionInfo, EXEC_INFO_WIN, srcHeight, 3, 0, 0); m_beVisible (srcWin); m_beVisible (srcWin->detail.sourceInfo.executionInfo); srcWin->detail.sourceInfo.hasLocator = FALSE;; } if (m_winPtrNotNull (srcWin)) { TuiGenWinInfoPtr locator = locatorWinInfoPtr (); tuiShowSourceContent (srcWin); if (m_winPtrIsNull (disassemWin)) { _makeDisassemWindow (&disassemWin, asmHeight, srcHeight - 1); _initAndMakeWin ((Opaque *) & locator, LOCATOR_WIN, 2 /* 1 */ , termWidth (), 0, (srcHeight + asmHeight) - 1, DONT_BOX_WINDOW); } else { _initGenWinInfo (locator, LOCATOR_WIN, 2 /* 1 */ , termWidth (), 0, (srcHeight + asmHeight) - 1); disassemWin->detail.sourceInfo.hasLocator = TRUE; _initGenWinInfo ( &disassemWin->generic, disassemWin->generic.type, asmHeight, disassemWin->generic.width, disassemWin->detail.sourceInfo.executionInfo->width, srcHeight - 1); _initGenWinInfo (disassemWin->detail.sourceInfo.executionInfo, EXEC_INFO_WIN, asmHeight, 3, 0, srcHeight - 1); disassemWin->canHighlight = TRUE; m_beVisible (disassemWin); m_beVisible (disassemWin->detail.sourceInfo.executionInfo); } if (m_winPtrNotNull (disassemWin)) { srcWin->detail.sourceInfo.hasLocator = FALSE; disassemWin->detail.sourceInfo.hasLocator = TRUE; m_beVisible (locator); tuiShowLocatorContent (); tuiShowSourceContent (disassemWin); if (m_winPtrIsNull (cmdWin)) _makeCommandWindow (&cmdWin, cmdHeight, termHeight () - cmdHeight); else { _initGenWinInfo (&cmdWin->generic, cmdWin->generic.type, cmdWin->generic.height, cmdWin->generic.width, 0, cmdWin->generic.origin.y); cmdWin->canHighlight = FALSE; m_beVisible (cmdWin); } if (m_winPtrNotNull (cmdWin)) tuiRefreshWin (&cmdWin->generic); } } setCurrentLayoutTo (SRC_DISASSEM_COMMAND); } return;} /* _showSourceDisassemCommand *//* ** _showData(). ** Show the Source/Data/Command or the Dissassembly/Data/Command layout */static void_showData (TuiLayoutType newLayout){ int totalHeight = (termHeight () - cmdWin->generic.height); int srcHeight, dataHeight; TuiWinType winType; TuiGenWinInfoPtr locator = locatorWinInfoPtr (); dataHeight = totalHeight / 2; srcHeight = totalHeight - dataHeight; m_allBeInvisible (); m_beInvisible (locator); _makeDataWindow (&dataWin, dataHeight, 0); dataWin->canHighlight = TRUE; if (newLayout == SRC_DATA_COMMAND) winType = SRC_WIN; else winType = DISASSEM_WIN; if (m_winPtrIsNull (winList[winType])) { if (winType == SRC_WIN) _makeSourceWindow (&winList[winType], srcHeight, dataHeight - 1); else _makeDisassemWindow (&winList[winType], srcHeight, dataHeight - 1); _initAndMakeWin ((Opaque *) & locator, LOCATOR_WIN, 2 /* 1 */ , termWidth (), 0, totalHeight - 1, DONT_BOX_WINDOW); } else { _initGenWinInfo (&winList[winType]->generic, winList[winType]->generic.type, srcHeight, winList[winType]->generic.width, winList[winType]->detail.sourceInfo.executionInfo->width, dataHeight - 1); _initGenWinInfo (winList[winType]->detail.sourceInfo.executionInfo, EXEC_INFO_WIN, srcHeight, 3, 0, dataHeight - 1); m_beVisible (winList[winType]); m_beVisible (winList[winType]->detail.sourceInfo.executionInfo); _initGenWinInfo (locator, LOCATOR_WIN, 2 /* 1 */ , termWidth (), 0, totalHeight - 1); } winList[winType]->detail.sourceInfo.hasLocator = TRUE; m_beVisible (locator); tuiShowLocatorContent (); addToSourceWindows (winList[winType]); setCurrentLayoutTo (newLayout); return;} /* _showData *//* ** _initGenWinInfo(). */static void_initGenWinInfo (TuiGenWinInfoPtr winInfo, TuiWinType type, int height, int width, int originX, int originY){ int h = height; winInfo->type = type; winInfo->width = width; winInfo->height = h; if (h > 1) { winInfo->viewportHeight = h - 1; if (winInfo->type != CMD_WIN) winInfo->viewportHeight--; } else winInfo->viewportHeight = 1; winInfo->origin.x = originX; winInfo->origin.y = originY; return;} /* _initGenWinInfo *//* ** _initAndMakeWin(). */static void_initAndMakeWin (Opaque * winInfoPtr, TuiWinType winType, int height, int width, int originX, int originY, int boxIt){ Opaque opaqueWinInfo = *winInfoPtr; TuiGenWinInfoPtr generic; if (opaqueWinInfo == (Opaque) NULL) { if (m_winIsAuxillary (winType)) opaqueWinInfo = (Opaque) allocGenericWinInfo (); else opaqueWinInfo = (Opaque) allocWinInfo (winType); } if (m_winIsAuxillary (winType)) generic = (TuiGenWinInfoPtr) opaqueWinInfo; else generic = &((TuiWinInfoPtr) opaqueWinInfo)->generic; if (opaqueWinInfo != (Opaque) NULL) { _initGenWinInfo (generic, winType, height, width, originX, originY); if (!m_winIsAuxillary (winType)) { if (generic->type == CMD_WIN) ((TuiWinInfoPtr) opaqueWinInfo)->canHighlight = FALSE; else ((TuiWinInfoPtr) opaqueWinInfo)->canHighlight = TRUE; } makeWindow (generic, boxIt); } *winInfoPtr = opaqueWinInfo;}/* ** _makeSourceOrDisassemWindow(). */static void_makeSourceOrDisassemWindow (TuiWinInfoPtr * winInfoPtr, TuiWinType type, int height, int originY){ TuiGenWinInfoPtr executionInfo = (TuiGenWinInfoPtr) NULL; /* ** Create the exeuction info window. */ if (type == SRC_WIN) executionInfo = sourceExecInfoWinPtr (); else executionInfo = disassemExecInfoWinPtr (); _initAndMakeWin ((Opaque *) & executionInfo, EXEC_INFO_WIN, height, 3, 0, originY, DONT_BOX_WINDOW); /* ** Now create the source window. */ _initAndMakeWin ((Opaque *) winInfoPtr, type, height, termWidth () - executionInfo->width, executionInfo->width, originY, BOX_WINDOW); (*winInfoPtr)->detail.sourceInfo.executionInfo = executionInfo; return;} /* _makeSourceOrDisassemWindow *//* ** _showSourceOrDisassemAndCommand(). ** Show the Source/Command or the Disassem layout */static void_showSourceOrDisassemAndCommand (TuiLayoutType layoutType){ if (currentLayout () != layoutType) { TuiWinInfoPtr *winInfoPtr; int srcHeight, cmdHeight; TuiGenWinInfoPtr locator = locatorWinInfoPtr (); if (m_winPtrNotNull (cmdWin)) cmdHeight = cmdWin->generic.height; else cmdHeight = termHeight () / 3; srcHeight = termHeight () - cmdHeight; if (layoutType == SRC_COMMAND) winInfoPtr = &srcWin; else winInfoPtr = &disassemWin; if (m_winPtrIsNull (*winInfoPtr)) { if (layoutType == SRC_COMMAND) _makeSourceWindow (winInfoPtr, srcHeight - 1, 0); else _makeDisassemWindow (winInfoPtr, srcHeight - 1, 0); _initAndMakeWin ((Opaque *) & locator, LOCATOR_WIN, 2 /* 1 */ , termWidth (), 0, srcHeight - 1, DONT_BOX_WINDOW); } else { _initGenWinInfo (locator, LOCATOR_WIN, 2 /* 1 */ , termWidth (), 0, srcHeight - 1); (*winInfoPtr)->detail.sourceInfo.hasLocator = TRUE; _initGenWinInfo ( &(*winInfoPtr)->generic, (*winInfoPtr)->generic.type, srcHeight - 1, (*winInfoPtr)->generic.width, (*winInfoPtr)->detail.sourceInfo.executionInfo->width, 0); _initGenWinInfo ((*winInfoPtr)->detail.sourceInfo.executionInfo, EXEC_INFO_WIN, srcHeight - 1, 3, 0, 0); (*winInfoPtr)->canHighlight = TRUE; m_beVisible (*winInfoPtr); m_beVisible ((*winInfoPtr)->detail.sourceInfo.executionInfo); } if (m_winPtrNotNull (*winInfoPtr)) { (*winInfoPtr)->detail.sourceInfo.hasLocator = TRUE; m_beVisible (locator); tuiShowLocatorContent (); tuiShowSourceContent (*winInfoPtr); if (m_winPtrIsNull (cmdWin)) { _makeCommandWindow (&cmdWin, cmdHeight, srcHeight); tuiRefreshWin (&cmdWin->generic); } else { _initGenWinInfo (&cmdWin->generic, cmdWin->generic.type, cmdWin->generic.height, cmdWin->generic.width, cmdWin->generic.origin.x, cmdWin->generic.origin.y); cmdWin->canHighlight = FALSE; m_beVisible (cmdWin); } } setCurrentLayoutTo (layoutType); } return;} /* _showSourceOrDisassemAndCommand */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -