struct macro_scope * default_macro_scope (void) { struct symtab_and_line sal; struct macro_scope *ms; struct frame_info *frame; /* If there's a selected frame, use its PC. */ frame = deprecated_safe_get_selected_frame (); if (frame) sal = find_pc_line (get_frame_pc (frame), 0); /* Fall back to the current listing position. */ else { /* Don't call select_source_symtab here. That can raise an error if symbols aren't loaded, but GDB calls the expression evaluator in all sorts of contexts. For example, commands like `set width' call the expression evaluator to evaluate their numeric arguments. If the current language is C, then that may call this function to choose a scope for macro expansion. If you don't have any symbol files loaded, then get_current_or_default would raise an error. But `set width' shouldn't raise an error just because it can't decide which scope to macro-expand its argument in. */ struct symtab_and_line cursal = get_current_source_symtab_and_line (); sal.symtab = cursal.symtab; sal.line = cursal.line; } return sal_macro_scope (sal); }
/* Enter in the tui mode (curses). When in normal mode, it installs the tui hooks in gdb, redirects the gdb output, configures the readline to work in tui mode. When in curses mode, it does nothing. */ void tui_enable (void) { if (tui_active) return; /* To avoid to initialize curses when gdb starts, there is a defered curses initialization. This initialization is made only once and the first time the curses mode is entered. */ if (tui_finish_init) { WINDOW *w; w = initscr (); cbreak (); noecho (); /* timeout (1); */ nodelay(w, FALSE); nl(); keypad (w, TRUE); rl_initialize (); tui_set_term_height_to (LINES); tui_set_term_width_to (COLS); def_prog_mode (); tui_show_frame_info (0); tui_set_layout (SRC_COMMAND, TUI_UNDEFINED_REGS); tui_set_win_focus_to (TUI_SRC_WIN); keypad (TUI_CMD_WIN->generic.handle, TRUE); wrefresh (TUI_CMD_WIN->generic.handle); tui_finish_init = 0; } else { /* Save the current gdb setting of the terminal. Curses will restore this state when endwin() is called. */ def_shell_mode (); clearok (stdscr, TRUE); } /* Install the TUI specific hooks. */ tui_install_hooks (); rl_startup_hook = tui_rl_startup_hook; tui_update_variables (); tui_setup_io (1); tui_active = 1; if (deprecated_safe_get_selected_frame ()) tui_show_frame_info (deprecated_safe_get_selected_frame ()); /* Restore TUI keymap. */ tui_set_key_mode (tui_current_key_mode); tui_refresh_all_win (); /* Update gdb's knowledge of its terminal. */ target_terminal_save_ours (); tui_update_gdb_sizes (); }