void tb_shutdown(void) { if (termw == -1) { fputs("tb_shutdown() should not be called twice.", stderr); abort(); } bytebuffer_puts(&output_buffer, funcs[T_SHOW_CURSOR]); bytebuffer_puts(&output_buffer, funcs[T_SGR0]); bytebuffer_puts(&output_buffer, funcs[T_CLEAR_SCREEN]); bytebuffer_puts(&output_buffer, funcs[T_EXIT_CA]); bytebuffer_puts(&output_buffer, funcs[T_EXIT_KEYPAD]); bytebuffer_puts(&output_buffer, funcs[T_EXIT_MOUSE]); bytebuffer_flush(&output_buffer, inout); tcsetattr(inout, TCSAFLUSH, &orig_tios); shutdown_term(); close(inout); close(winch_fds[0]); close(winch_fds[1]); cellbuf_free(&back_buffer); cellbuf_free(&front_buffer); bytebuffer_free(&output_buffer); bytebuffer_free(&input_buffer); termw = termh = -1; }
void tb_shutdown(void) { bytebuffer_puts(&output_buffer, funcs[T_SHOW_CURSOR]); bytebuffer_puts(&output_buffer, funcs[T_SGR0]); bytebuffer_puts(&output_buffer, funcs[T_CLEAR_SCREEN]); bytebuffer_puts(&output_buffer, funcs[T_EXIT_CA]); bytebuffer_puts(&output_buffer, funcs[T_EXIT_KEYPAD]); bytebuffer_flush(&output_buffer, inout); tcsetattr(inout, TCSAFLUSH, &orig_tios); shutdown_term(); close(inout); close(winch_fds[0]); close(winch_fds[1]); cellbuf_free(&back_buffer); cellbuf_free(&front_buffer); bytebuffer_free(&output_buffer); bytebuffer_free(&input_buffer); }
/******************************************************************************* * * Command buffer functions. * ******************************************************************************/ enum app_error app_init_term(struct app* app) { struct wm_window_desc win_desc; enum app_error app_err = APP_NO_ERROR; enum rdr_error rdr_err = RDR_NO_ERROR; if(!app || !app->rdr.term_font || !app->wm.window) { app_err = APP_INVALID_ARGUMENT; goto error; } app_err = app_regular_create_command_buffer(app, &app->term.cmdbuf); if(APP_NO_ERROR != app_err) goto error; WM(get_window_desc(app->wm.window, &win_desc)); rdr_err = rdr_create_term (app->rdr.system, app->rdr.term_font, win_desc.width, win_desc.height, &app->term.render_term); if(RDR_NO_ERROR != rdr_err) { app_err = rdr_to_app_error(rdr_err); goto error; } rdr_err = rdr_term_print_wstring (app->term.render_term, RDR_TERM_PROMPT, L"$ ", RDR_TERM_COLOR_GREEN); if(RDR_NO_ERROR != rdr_err) { app_err = rdr_to_app_error(rdr_err); goto error; } app->term.is_enabled = false; exit: return app_err; error: APP(shutdown_term(app)); goto exit; }