⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tui-layout.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
static voidtui_handle_xdb_layout (struct tui_layout_def * layout_def){  if (layout_def->split)    {      tui_set_layout (SRC_DISASSEM_COMMAND, TUI_UNDEFINED_REGS);      tui_set_win_focus_to (tui_win_list[layout_def->display_mode]);    }  else    {      if (layout_def->display_mode == SRC_WIN)	tui_set_layout (SRC_COMMAND, TUI_UNDEFINED_REGS);      else	tui_set_layout (DISASSEM_DATA_COMMAND, layout_def->regs_display_type);    }}static voidtui_toggle_layout_command (char *arg, int from_tty){  struct tui_layout_def * layout_def = tui_layout_def ();  /* Make sure the curses mode is enabled.  */  tui_enable ();  if (layout_def->display_mode == SRC_WIN)    layout_def->display_mode = DISASSEM_WIN;  else    layout_def->display_mode = SRC_WIN;  if (!layout_def->split)    tui_handle_xdb_layout (layout_def);}static voidtui_toggle_split_layout_command (char *arg, int from_tty){  struct tui_layout_def * layout_def = tui_layout_def ();  /* Make sure the curses mode is enabled.  */  tui_enable ();  layout_def->split = (!layout_def->split);  tui_handle_xdb_layout (layout_def);}static voidtui_layout_command (char *arg, int from_tty){  /* Make sure the curses mode is enabled.  */  tui_enable ();  /* Switch to the selected layout.  */  if (tui_set_layout_for_display_command (arg) != TUI_SUCCESS)    warning ("Invalid layout specified.\n%s", LAYOUT_USAGE);}/* Answer the previous layout to cycle to.  */static enum tui_layout_typenext_layout (void){  enum tui_layout_type new_layout;  new_layout = tui_current_layout ();  if (new_layout == UNDEFINED_LAYOUT)    new_layout = SRC_COMMAND;  else    {      new_layout++;      if (new_layout == UNDEFINED_LAYOUT)	new_layout = SRC_COMMAND;    }  return new_layout;}/* Answer the next layout to cycle to.  */static enum tui_layout_typeprev_layout (void){  enum tui_layout_type new_layout;  new_layout = tui_current_layout ();  if (new_layout == SRC_COMMAND)    new_layout = DISASSEM_DATA_COMMAND;  else    {      new_layout--;      if (new_layout == UNDEFINED_LAYOUT)	new_layout = DISASSEM_DATA_COMMAND;    }  return new_layout;}static voidmake_command_window (struct tui_win_info * * win_info_ptr, int height, int origin_y){  init_and_make_win ((void **) win_info_ptr,		   CMD_WIN,		   height,		   tui_term_width (),		   0,		   origin_y,		   DONT_BOX_WINDOW);  (*win_info_ptr)->can_highlight = FALSE;}/*   ** make_source_window(). */static voidmake_source_window (struct tui_win_info * * win_info_ptr, int height, int origin_y){  make_source_or_disasm_window (win_info_ptr, SRC_WIN, height, origin_y);  return;}				/* make_source_window *//*   ** make_disasm_window(). */static voidmake_disasm_window (struct tui_win_info * * win_info_ptr, int height, int origin_y){  make_source_or_disasm_window (win_info_ptr, DISASSEM_WIN, height, origin_y);  return;}				/* make_disasm_window */static voidmake_data_window (struct tui_win_info * * win_info_ptr, int height, int origin_y){  init_and_make_win ((void **) win_info_ptr,		   DATA_WIN,		   height,		   tui_term_width (),		   0,		   origin_y,		   BOX_WINDOW);}/* Show the Source/Command layout.  */static voidshow_source_command (void){  show_source_or_disasm_and_command (SRC_COMMAND);}/* Show the Dissassem/Command layout.  */static voidshow_disasm_command (void){  show_source_or_disasm_and_command (DISASSEM_COMMAND);}/* Show the Source/Disassem/Command layout.  */static voidshow_source_disasm_command (void){  if (tui_current_layout () != SRC_DISASSEM_COMMAND)    {      int cmd_height, src_height, asm_height;      if (TUI_CMD_WIN != NULL)	cmd_height = TUI_CMD_WIN->generic.height;      else	cmd_height = tui_term_height () / 3;      src_height = (tui_term_height () - cmd_height) / 2;      asm_height = tui_term_height () - (src_height + cmd_height);      if (TUI_SRC_WIN == NULL)	make_source_window (&TUI_SRC_WIN, src_height, 0);      else	{	  init_gen_win_info (&TUI_SRC_WIN->generic,			   TUI_SRC_WIN->generic.type,			   src_height,			   TUI_SRC_WIN->generic.width,			   TUI_SRC_WIN->detail.source_info.execution_info->width,			   0);	  TUI_SRC_WIN->can_highlight = TRUE;	  init_gen_win_info (TUI_SRC_WIN->detail.source_info.execution_info,			   EXEC_INFO_WIN,			   src_height,			   3,			   0,			   0);	  tui_make_visible (&TUI_SRC_WIN->generic);	  tui_make_visible (TUI_SRC_WIN->detail.source_info.execution_info);	  TUI_SRC_WIN->detail.source_info.has_locator = FALSE;;	}      if (TUI_SRC_WIN != NULL)	{	  struct tui_gen_win_info * locator = tui_locator_win_info_ptr ();	  tui_show_source_content (TUI_SRC_WIN);	  if (TUI_DISASM_WIN == NULL)	    {	      make_disasm_window (&TUI_DISASM_WIN, asm_height, src_height - 1);	      init_and_make_win ((void **) & locator,			       LOCATOR_WIN,			       2 /* 1 */ ,			       tui_term_width (),			       0,			       (src_height + asm_height) - 1,			       DONT_BOX_WINDOW);	    }	  else	    {	      init_gen_win_info (locator,			       LOCATOR_WIN,			       2 /* 1 */ ,			       tui_term_width (),			       0,			       (src_height + asm_height) - 1);	      TUI_DISASM_WIN->detail.source_info.has_locator = TRUE;	      init_gen_win_info (				&TUI_DISASM_WIN->generic,				TUI_DISASM_WIN->generic.type,				asm_height,				TUI_DISASM_WIN->generic.width,			TUI_DISASM_WIN->detail.source_info.execution_info->width,				src_height - 1);	      init_gen_win_info (TUI_DISASM_WIN->detail.source_info.execution_info,			       EXEC_INFO_WIN,			       asm_height,			       3,			       0,			       src_height - 1);	      TUI_DISASM_WIN->can_highlight = TRUE;	      tui_make_visible (&TUI_DISASM_WIN->generic);	      tui_make_visible (TUI_DISASM_WIN->detail.source_info.execution_info);	    }	  if (TUI_DISASM_WIN != NULL)	    {	      TUI_SRC_WIN->detail.source_info.has_locator = FALSE;	      TUI_DISASM_WIN->detail.source_info.has_locator = TRUE;	      tui_make_visible (locator);	      tui_show_locator_content ();	      tui_show_source_content (TUI_DISASM_WIN);	      if (TUI_CMD_WIN == NULL)		make_command_window (&TUI_CMD_WIN,				    cmd_height,				    tui_term_height () - cmd_height);	      else		{		  init_gen_win_info (&TUI_CMD_WIN->generic,				   TUI_CMD_WIN->generic.type,				   TUI_CMD_WIN->generic.height,				   TUI_CMD_WIN->generic.width,				   0,				   TUI_CMD_WIN->generic.origin.y);		  TUI_CMD_WIN->can_highlight = FALSE;		  tui_make_visible (&TUI_CMD_WIN->generic);		}	      if (TUI_CMD_WIN != NULL)		tui_refresh_win (&TUI_CMD_WIN->generic);	    }	}      tui_set_current_layout_to (SRC_DISASSEM_COMMAND);    }}/* Show the Source/Data/Command or the Dissassembly/Data/Command   layout.  */static voidshow_data (enum tui_layout_type new_layout){  int total_height = (tui_term_height () - TUI_CMD_WIN->generic.height);  int src_height, data_height;  enum tui_win_type win_type;  struct tui_gen_win_info * locator = tui_locator_win_info_ptr ();  data_height = total_height / 2;  src_height = total_height - data_height;  tui_make_all_invisible ();  tui_make_invisible (locator);  make_data_window (&TUI_DATA_WIN, data_height, 0);  TUI_DATA_WIN->can_highlight = TRUE;  if (new_layout == SRC_DATA_COMMAND)    win_type = SRC_WIN;  else    win_type = DISASSEM_WIN;  if (tui_win_list[win_type] == NULL)    {      if (win_type == SRC_WIN)	make_source_window (&tui_win_list[win_type], src_height, data_height - 1);      else	make_disasm_window (&tui_win_list[win_type], src_height, data_height - 1);      init_and_make_win ((void **) & locator,		       LOCATOR_WIN,		       2 /* 1 */ ,		       tui_term_width (),		       0,		       total_height - 1,		       DONT_BOX_WINDOW);    }  else    {      init_gen_win_info (&tui_win_list[win_type]->generic,		       tui_win_list[win_type]->generic.type,		       src_height,		       tui_win_list[win_type]->generic.width,		   tui_win_list[win_type]->detail.source_info.execution_info->width,		       data_height - 1);      init_gen_win_info (tui_win_list[win_type]->detail.source_info.execution_info,		       EXEC_INFO_WIN,		       src_height,		       3,		       0,		       data_height - 1);      tui_make_visible (&tui_win_list[win_type]->generic);      tui_make_visible (tui_win_list[win_type]->detail.source_info.execution_info);      init_gen_win_info (locator,		       LOCATOR_WIN,		       2 /* 1 */ ,		       tui_term_width (),		       0,		       total_height - 1);    }  tui_win_list[win_type]->detail.source_info.has_locator = TRUE;  tui_make_visible (locator);  tui_show_locator_content ();  tui_add_to_source_windows (tui_win_list[win_type]);  tui_set_current_layout_to (new_layout);}/*   ** init_gen_win_info(). */static voidinit_gen_win_info (struct tui_gen_win_info * win_info, enum tui_win_type type,                 int height, int width, int origin_x, int origin_y){  int h = height;  win_info->type = type;  win_info->width = width;  win_info->height = h;  if (h > 1)    {      win_info->viewport_height = h - 1;      if (win_info->type != CMD_WIN)	win_info->viewport_height--;    }  else    win_info->viewport_height = 1;  win_info->origin.x = origin_x;  win_info->origin.y = origin_y;  return;}				/* init_gen_win_info *//*   ** init_and_make_win(). */static voidinit_and_make_win (void ** win_info_ptr, enum tui_win_type win_type,                 int height, int width, int origin_x, int origin_y, int box_it){  void *opaque_win_info = *win_info_ptr;  struct tui_gen_win_info * generic;  if (opaque_win_info == NULL)    {      if (tui_win_is_auxillary (win_type))	opaque_win_info = (void *) tui_alloc_generic_win_info ();      else	opaque_win_info = (void *) tui_alloc_win_info (win_type);    }  if (tui_win_is_auxillary (win_type))    generic = (struct tui_gen_win_info *) opaque_win_info;  else    generic = &((struct tui_win_info *) opaque_win_info)->generic;  if (opaque_win_info != NULL)    {      init_gen_win_info (generic, win_type, height, width, origin_x, origin_y);      if (!tui_win_is_auxillary (win_type))	{	  if (generic->type == CMD_WIN)	    ((struct tui_win_info *) opaque_win_info)->can_highlight = FALSE;	  else	    ((struct tui_win_info *) opaque_win_info)->can_highlight = TRUE;	}      tui_make_window (generic, box_it);    }  *win_info_ptr = opaque_win_info;}static voidmake_source_or_disasm_window (struct tui_win_info * * win_info_ptr, enum tui_win_type type,                             int height, int origin_y){  struct tui_gen_win_info * execution_info = (struct tui_gen_win_info *) NULL;  /*     ** Create the exeuction info window.   */  if (type == SRC_WIN)    execution_info = tui_source_exec_info_win_ptr ();  else    execution_info = tui_disassem_exec_info_win_ptr ();  init_and_make_win ((void **) & execution_info,		   EXEC_INFO_WIN,		   height,		   3,		   0,		   origin_y,		   DONT_BOX_WINDOW);  /*     ** Now create the source window.   */  init_and_make_win ((void **) win_info_ptr,		   type,		   height,		   tui_term_width () - execution_info->width,		   execution_info->width,		   origin_y,		   BOX_WINDOW);  (*win_info_ptr)->detail.source_info.execution_info = execution_info;}/* Show the Source/Command or the Disassem layout.   */static voidshow_source_or_disasm_and_command (enum tui_layout_type layout_type){  if (tui_current_layout () != layout_type)    {      struct tui_win_info * *win_info_ptr;      int src_height, cmd_height;      struct tui_gen_win_info * locator = tui_locator_win_info_ptr ();      if (TUI_CMD_WIN != NULL)	cmd_height = TUI_CMD_WIN->generic.height;      else	cmd_height = tui_term_height () / 3;      src_height = tui_term_height () - cmd_height;      if (layout_type == SRC_COMMAND)	win_info_ptr = &TUI_SRC_WIN;      else	win_info_ptr = &TUI_DISASM_WIN;      if ((*win_info_ptr) == NULL)	{	  if (layout_type == SRC_COMMAND)	    make_source_window (win_info_ptr, src_height - 1, 0);	  else	    make_disasm_window (win_info_ptr, src_height - 1, 0);	  init_and_make_win ((void **) & locator,			   LOCATOR_WIN,			   2 /* 1 */ ,			   tui_term_width (),			   0,			   src_height - 1,			   DONT_BOX_WINDOW);	}      else	{	  init_gen_win_info (locator,			   LOCATOR_WIN,			   2 /* 1 */ ,			   tui_term_width (),			   0,			   src_height - 1);	  (*win_info_ptr)->detail.source_info.has_locator = TRUE;	  init_gen_win_info (			    &(*win_info_ptr)->generic,			    (*win_info_ptr)->generic.type,			    src_height - 1,			    (*win_info_ptr)->generic.width,		      (*win_info_ptr)->detail.source_info.execution_info->width,			    0);	  init_gen_win_info ((*win_info_ptr)->detail.source_info.execution_info,			   EXEC_INFO_WIN,			   src_height - 1,			   3,			   0,			   0);	  (*win_info_ptr)->can_highlight = TRUE;	  tui_make_visible (&(*win_info_ptr)->generic);	  tui_make_visible ((*win_info_ptr)->detail.source_info.execution_info);	}      if ((*win_info_ptr) != NULL)	{	  (*win_info_ptr)->detail.source_info.has_locator = TRUE;	  tui_make_visible (locator);	  tui_show_locator_content ();	  tui_show_source_content (*win_info_ptr);	  if (TUI_CMD_WIN == NULL)	    {	      make_command_window (&TUI_CMD_WIN, cmd_height, src_height);	      tui_refresh_win (&TUI_CMD_WIN->generic);	    }	  else	    {	      init_gen_win_info (&TUI_CMD_WIN->generic,			       TUI_CMD_WIN->generic.type,			       TUI_CMD_WIN->generic.height,			       TUI_CMD_WIN->generic.width,			       TUI_CMD_WIN->generic.origin.x,			       TUI_CMD_WIN->generic.origin.y);	      TUI_CMD_WIN->can_highlight = FALSE;	      tui_make_visible (&TUI_CMD_WIN->generic);	    }	}      tui_set_current_layout_to (layout_type);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -