void ui_progress__update(u64 curr, u64 total, const char *title) { int bar, y; /* * FIXME: We should have a per UI backend way of showing progress, * stdio will just show a percentage as NN%, etc. */ if (use_browser <= 0) return; if (total == 0) return; ui__refresh_dimensions(true); pthread_mutex_lock(&ui__lock); y = SLtt_Screen_Rows / 2 - 2; SLsmg_set_color(0); SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols); SLsmg_gotorc(y++, 1); SLsmg_write_string((char *)title); SLsmg_set_color(HE_COLORSET_SELECTED); bar = ((SLtt_Screen_Cols - 2) * curr) / total; SLsmg_fill_region(y, 1, 1, bar, ' '); SLsmg_refresh(); pthread_mutex_unlock(&ui__lock); }
/* displays a table containing 256 characters in a single character set, starting a column col. The 'label' is displayed over the table, and the alternate character set is displayed iff isAlternate is nonzero */ static void drawCharSet(int col, int isAlternate, char * label) { int i, j; int n = 0; /* draw the box */ SLsmg_draw_box(0, col, 20, 38); /* center the label */ SLsmg_gotorc(0, col + 2); SLsmg_write_string(label); /* draw the horizontal legend */ SLsmg_gotorc(2, col + 4); SLsmg_write_string("0 1 2 3 4 5 6 7 8 9 A B C D E F"); /* set the character set to use */ SLsmg_set_char_set(isAlternate); /* this iterates over the 4 most significant bits */ for (i = 0; i < 16; i++) { SLsmg_gotorc(3 + i, 2 + col); SLsmg_write_char(i < 10 ? i + '0' : (i - 10) + 'A'); /* this iterates over the 4 least significant bits */ for (j = 0; j < 16; j++) { SLsmg_gotorc(3 + i, col + 4 + (j * 2)); SLsmg_write_char(n++); } } SLsmg_set_char_set(0); }
int ui__question_window(const char *title, const char *text, const char *exit_msg, int delay_secs) { int x, y; int max_len = 0, nr_lines = 0; const char *t; t = text; while (1) { const char *sep = strchr(t, '\n'); int len; if (sep == NULL) sep = strchr(t, '\0'); len = sep - t; if (max_len < len) max_len = len; ++nr_lines; if (*sep == '\0') break; t = sep + 1; } pthread_mutex_lock(&ui__lock); max_len += 2; nr_lines += 4; y = SLtt_Screen_Rows / 2 - nr_lines / 2, x = SLtt_Screen_Cols / 2 - max_len / 2; SLsmg_set_color(0); SLsmg_draw_box(y, x++, nr_lines, max_len); if (title) { SLsmg_gotorc(y, x + 1); SLsmg_write_string((char *)title); } SLsmg_gotorc(++y, x); nr_lines -= 2; max_len -= 2; SLsmg_write_wrapped_string((unsigned char *)text, y, x, nr_lines, max_len, 1); SLsmg_gotorc(y + nr_lines - 2, x); SLsmg_write_nstring((char *)" ", max_len); SLsmg_gotorc(y + nr_lines - 1, x); SLsmg_write_nstring((char *)exit_msg, max_len); SLsmg_refresh(); pthread_mutex_unlock(&ui__lock); return ui__getch(delay_secs); }
void newtDrawBox(int left, int top, int width, int height, int shadow) { if (currentWindow) { top += currentWindow->top; left += currentWindow->left; } SLsmg_draw_box(top, left, height, width); if (shadow) { SLsmg_set_color(NEWT_COLORSET_SHADOW); SLsmg_fill_region(top + height, left + 1, 1, width - 1, ' '); SLsmg_fill_region(top + 1, left + width, height, 1, ' '); } }
bool SLangConsole::place(SLangWidget *wid, int hx, int hy, int lx, int ly) { wid->orig_x = hx; wid->orig_y = hy; // boundaries where lower right coord // get converted into WxH if( lx > this->w ) wid->w = this->w - hx; else wid->w = lx - hx; if( ly > this->h ) wid->h = this->h - hy; else wid->h = ly - hy; // save a reference of the console in the widget wid->console = this; // append the new widget in our linklist widgets.append( wid ); func("s-lang widget %s sized %ux%u placed at %u,%u", wid->name, wid->w, wid->h, wid->orig_x, wid->orig_y); // draw border if requested if(wid->border) /* S-Lang has a coordinate system which is very * different from the typical approach in computer graphics; * the draw_box function works as follows: SLsmg_draw_box (int r, int c, int dr, int dc); Draw a box whose right corner is at row r and column c. The box spans dr rows and dc columns. The current position will be left at row r and column c. */ SLsmg_draw_box(wid->orig_y, wid->orig_x, wid->h, wid->w); // wid->refresh(); // focus the first widget if(!focused) focused = wid; return true; }
int SLcurses_wnoutrefresh (SLcurses_Window_Type *w) { unsigned int len; unsigned int r, c; unsigned int i, imax; if (SLcurses_Is_Endwin) { if (TTY_State) init_tty (TTY_State - 1); SLsmg_resume_smg (); SLcurses_Is_Endwin = 0; } if (w == NULL) { SLsmg_refresh (); return -1; } if (w->modified == 0) return 0; r = w->_begy; c = w->_begx; len = w->ncols; imax = w->nrows; for (i = 0; i < imax; i++) { SLsmg_gotorc (r, c); write_color_chars (w->lines[i], len); r++; } if (w->has_box) SLsmg_draw_box(w->_begy, w->_begx, w->nrows, w->ncols); SLsmg_gotorc (w->_begy + w->_cury, w->_begx + w->_curx); w->modified = 0; return 0; }
void RainbruRPG::Terminal::ListBox::draw( int x, int y ){ int xp= (x+this->x)-2; int yp= (y+this->y)-1; // Sets the draw color according to the focus state of the widget if (this->hasFocus) SLsmg_set_color (6); else SLsmg_set_color (0); // Draw the frame of the widget SLsmg_draw_box ( yp, xp, height, width ); // Draws the caption if enabled if (drawCaption) this->drawTheCaption(xp, yp); // Draw the item list SLsmg_set_color (0); this->drawItems(xp+1, yp+1); }
/** Create graphically the window * * It draws the box according to the window stateand call the * layout's draw() method. * * It finally the Layout::draw() method. */ void RainbruRPG::Terminal::Window::draw( ){ int x, y, h, w; if (state==NORMAL){ x=this->x; y=this->y; h=this->height; w=this->width; } else if(state==MAXIMIZED){ x=0; y=1; h=SLtt_Screen_Rows-2; w=SLtt_Screen_Cols; } if (focusWindow&&selected){ SLsmg_set_color (6); } // Border SLsmg_draw_box ( y, x, h, w ); // Title SLsmg_gotorc ( y, x+2); SLsmg_set_char_set (1); SLsmg_write_char( SLSMG_RTEE_CHAR ); SLsmg_set_char_set (0); // cast to char* to avoid deprecated converion warning SLsmg_printf( (char*)" %s ", caption ); SLsmg_set_char_set (1); SLsmg_write_char( SLSMG_LTEE_CHAR ); SLsmg_set_char_set (0); SLsmg_set_color (0); layout->draw(); };
static void smg_draw_box (int *r, int *c,int *dr, int *dc) { if (Smg_Initialized <= 0) return; SLsmg_draw_box (*r, *c, *dr, *dc); }
int ui__popup_menu(int argc, char * const argv[]) { struct ui_browser menu = { .entries = (void *)argv, .refresh = ui_browser__argv_refresh, .seek = ui_browser__argv_seek, .write = ui_browser__argv_write, .nr_entries = argc, }; return popup_menu__run(&menu); } int ui_browser__input_window(const char *title, const char *text, char *input, const char *exit_msg, int delay_secs) { int x, y, len, key; int max_len = 60, nr_lines = 0; static char buf[50]; const char *t; t = text; while (1) { const char *sep = strchr(t, '\n'); if (sep == NULL) sep = strchr(t, '\0'); len = sep - t; if (max_len < len) max_len = len; ++nr_lines; if (*sep == '\0') break; t = sep + 1; } pthread_mutex_lock(&ui__lock); max_len += 2; nr_lines += 8; y = SLtt_Screen_Rows / 2 - nr_lines / 2; x = SLtt_Screen_Cols / 2 - max_len / 2; SLsmg_set_color(0); SLsmg_draw_box(y, x++, nr_lines, max_len); if (title) { SLsmg_gotorc(y, x + 1); SLsmg_write_string((char *)title); } SLsmg_gotorc(++y, x); nr_lines -= 7; max_len -= 2; SLsmg_write_wrapped_string((unsigned char *)text, y, x, nr_lines, max_len, 1); y += nr_lines; len = 5; while (len--) { SLsmg_gotorc(y + len - 1, x); SLsmg_write_nstring((char *)" ", max_len); } SLsmg_draw_box(y++, x + 1, 3, max_len - 2); SLsmg_gotorc(y + 3, x); SLsmg_write_nstring((char *)exit_msg, max_len); SLsmg_refresh(); pthread_mutex_unlock(&ui__lock); x += 2; len = 0; key = ui__getch(delay_secs); while (key != K_TIMER && key != K_ENTER && key != K_ESC) { pthread_mutex_lock(&ui__lock); if (key == K_BKSPC) { if (len == 0) { pthread_mutex_unlock(&ui__lock); goto next_key; } SLsmg_gotorc(y, x + --len); SLsmg_write_char(' '); } else { buf[len] = key; SLsmg_gotorc(y, x + len++); SLsmg_write_char(key); } SLsmg_refresh(); pthread_mutex_unlock(&ui__lock); /* XXX more graceful overflow handling needed */ if (len == sizeof(buf) - 1) { ui_helpline__push("maximum size of symbol name reached!"); key = K_ENTER; break; } next_key: key = ui__getch(delay_secs); } buf[len] = '\0'; strncpy(input, buf, len+1); return key; }
/** * Open a new window. * @param left. int Size; _not_ including border * @param top: int size, _not_ including border * @param width unsigned int * @param height unsigned int * @param title - title string * @return zero on success */ int newtOpenWindow(int left, int top, unsigned int width, unsigned int height, const char * title) { int j, row, col; int n; int i; newtFlushInput(); if (currentWindow && currentWindow - windowStack + 1 >= sizeof (windowStack) / sizeof (struct Window)) return 1; if (!currentWindow) { currentWindow = windowStack; } else { currentWindow++; } currentWindow->left = left; currentWindow->top = top; currentWindow->width = width; currentWindow->height = height; currentWindow->title = title ? strdup(title) : NULL; currentWindow->buffer = malloc(sizeof(SLsmg_Char_Type) * (width + 5) * (height + 3)); row = top - 1; col = left - 2; /* clip to the current screen bounds - msw */ if (row < 0) row = 0; if (col < 0) col = 0; if (left + width > SLtt_Screen_Cols) width = SLtt_Screen_Cols - left; if (top + height > SLtt_Screen_Rows) height = SLtt_Screen_Rows - top; n = 0; for (j = 0; j < height + 3; j++, row++) { SLsmg_gotorc(row, col); SLsmg_read_raw(currentWindow->buffer + n, currentWindow->width + 5); n += currentWindow->width + 5; } newtTrashScreen(); SLsmg_set_color(NEWT_COLORSET_BORDER); SLsmg_set_char_set(1); SLsmg_draw_box(top - 1, left - 1, height + 2, width + 2); SLsmg_set_char_set(0); if (currentWindow->title) { trim_string (currentWindow->title, width-4); i = wstrlen(currentWindow->title,-1) + 4; i = ((width - i) / 2) + left; SLsmg_gotorc(top - 1, i); SLsmg_set_char_set(1); SLsmg_write_char(SLSMG_RTEE_CHAR); SLsmg_set_char_set(0); SLsmg_write_char(' '); SLsmg_set_color(NEWT_COLORSET_TITLE); SLsmg_write_string((char *)currentWindow->title); SLsmg_set_color(NEWT_COLORSET_BORDER); SLsmg_write_char(' '); SLsmg_set_char_set(1); SLsmg_write_char(SLSMG_LTEE_CHAR); SLsmg_set_char_set(0); } SLsmg_set_color(NEWT_COLORSET_WINDOW); SLsmg_fill_region(top, left, height, width, ' '); SLsmg_set_color(NEWT_COLORSET_SHADOW); SLsmg_fill_region(top + height + 1, left, 1, width + 2, ' '); SLsmg_fill_region(top, left + width + 1, height + 1, 1, ' '); for (i = top; i < (top + height + 1); i++) { SLsmg_gotorc(i, left + width + 1); SLsmg_write_string(" "); } return 0; }
static int sl_output(int port, char *buf, int len) { int x,y,z,v,w; char *str, *t1, *t2, *t3; int ret; char ch; /* check for signals */ if (signal_cought != 0) { /* async out signal */ char xxx[5]; xxx[0] = 0; put_int32(signal_cought, xxx+1); driver_output(port, xxx, 5); signal_cought = 0; } switch (*buf++) { case INIT_TTY: { int abort_char, flow_ctl, opost; abort_char = get_int32(buf); buf+=4; flow_ctl = get_int32(buf); buf+= 4; opost = get_int32(buf); buf+= 4; ret = SLang_init_tty (abort_char,flow_ctl, opost); return ret_int(port, ret); } case SET_ABORT_FUNCTION: { SLang_set_abort_signal (NULL); return ret_int(port, 0); } case GETKEY: { unsigned int key; if (SLang_input_pending (0) == 0) { wait_for = GETKEY; driver_select(port, 0, DO_READ, 1); return 0; } x = SLang_getkey (); return ret_int(port, x); } /* read a symbol */ case KP_GETKEY: { if (SLang_input_pending (0) == 0) { wait_for = KP_GETKEY; driver_select(port, 0, DO_READ, 1); return 0; } x = SLkp_getkey (); return ret_int(port, x); } case UNGETKEY: { unsigned char key = (unsigned char) *buf; SLang_ungetkey (key); return 0; } case RESET_TTY: { SLang_reset_tty(); return 0; } case KP_INIT: { return ret_int(port, SLkp_init ()); } case SETVAR: { x = get_int32(buf);buf+= 4; y = get_int32(buf); switch (x) { case esl_baud_rate: SLang_TT_Baud_Rate = y; return 0; case esl_read_fd: return 0; case esl_abort_char: SLang_Abort_Char = y; return 0; case esl_ignore_user_abort: SLang_Ignore_User_Abort=y; return 0; case esl_input_buffer_len : SLang_Input_Buffer_Len=y; return 0; case esl_keyboard_quit: SLKeyBoard_Quit=y; return 0; case esl_last_key_char: SLang_Last_Key_Char=y; return 0; case esl_rl_eof_char: SLang_RL_EOF_Char=y; return 0; case esl_rline_quit: SLang_Rline_Quit=y; return 0; case esl_screen_rows: case esl_screen_cols : return 0; case esl_tab_width: SLsmg_Tab_Width=y; return 0; case esl_newline_behaviour: SLsmg_Newline_Behavior=y; return 0; case esl_error: SLang_Error=y; return 0; case esl_version: return 0; case esl_backspace_moves : SLsmg_Backspace_Moves=y; return 0; case esl_display_eight_bit: SLsmg_Display_Eight_Bit=y; return 0; default: return 0; } } case GETVAR: { x = get_int32(buf); switch (x) { case esl_baud_rate: return ret_int(port, SLang_TT_Baud_Rate); case esl_read_fd: return ret_int(port, SLang_TT_Read_FD); case esl_abort_char: return (ret_int(port, SLang_Abort_Char)); case esl_ignore_user_abort: return ret_int(port, SLang_Ignore_User_Abort); case esl_input_buffer_len : return ret_int(port, SLang_Input_Buffer_Len); case esl_keyboard_quit: return ret_int(port, SLKeyBoard_Quit); case esl_last_key_char: return ret_int(port, SLang_Last_Key_Char); case esl_rl_eof_char: return ret_int(port, SLang_RL_EOF_Char); case esl_rline_quit: return ret_int(port, SLang_Rline_Quit); case esl_screen_rows: return ret_int(port, SLtt_Screen_Rows); case esl_screen_cols : return ret_int(port, SLtt_Screen_Cols); case esl_tab_width: return ret_int(port, SLsmg_Tab_Width); case esl_newline_behaviour: return ret_int(port, SLsmg_Newline_Behavior); case esl_error: return ret_int(port, SLang_Error); case esl_version: return ret_int(port, SLang_Version); case esl_backspace_moves : return ret_int(port, SLsmg_Backspace_Moves); case esl_display_eight_bit: return ret_int(port, SLsmg_Display_Eight_Bit); default: return ret_int(port, -1); } } /*{{{ SLsmg Screen Management Functions */ case SMG_FILL_REGION: { x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; z = get_int32(buf); buf+= 4; v = get_int32(buf); buf+= 4; ch = *buf; SLsmg_fill_region(x, y,z,v,ch); return 0; } case SMG_SET_CHAR_SET: { x = get_int32(buf); buf+= 4; SLsmg_set_char_set(x); return 0; } case SMG_SUSPEND_SMG: { return ret_int(port, SLsmg_suspend_smg()); } case SMG_RESUME_SMG: { ret_int(port, SLsmg_resume_smg()); } case SMG_ERASE_EOL: { SLsmg_erase_eol(); return 0; } case SMG_GOTORC: { x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; SLsmg_gotorc(x, y); return 0; } case SMG_ERASE_EOS: { SLsmg_erase_eos(); return 0; } case SMG_REVERSE_VIDEO: { SLsmg_reverse_video(); return 0; } case SMG_SET_COLOR: { x = get_int32(buf); buf+= 4; SLsmg_set_color(x); return 0; } case SMG_NORMAL_VIDEO: { SLsmg_normal_video(); return 0; } case SMG_WRITE_STRING: { SLsmg_write_string(buf); return 0; } case SMG_WRITE_CHAR: { ch = *buf; SLsmg_write_char(ch); return 0; } case SMG_WRITE_WRAPPED_STRING: { t1 = buf; buf += strlen(t1) + 1; x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; z = get_int32(buf); buf+= 4; v = get_int32(buf); buf+= 4; w = get_int32(buf); buf+= 4; SLsmg_write_wrapped_string(t1, x,y,z,v,w); return 0; } case SMG_CLS: { SLsmg_cls(); return 0; } case SMG_REFRESH: { SLsmg_refresh(); return 0; } case SMG_TOUCH_LINES: { x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; SLsmg_touch_lines(x, y); return 0; } case SMG_TOUCH_SCREEN: { #if (SLANG_VERSION < 10400 ) return ret_int(port, -1); #else SLsmg_touch_screen(); #endif return 0; } case SMG_INIT_SMG: { return ret_int(port, SLsmg_init_smg()); } case SMG_REINIT_SMG: { #if (SLANG_VERSION < 10400 ) return ret_int(port, -1); #else return ret_int(port, SLsmg_reinit_smg()); #endif } case SMG_RESET_SMG: { SLsmg_reset_smg(); return 0; } case SMG_CHAR_AT: { return ret_int(port, SLsmg_char_at()); } case SMG_SET_SCREEN_START: { int *ip1, *ip2; *ip1 = get_int32(buf); buf+= 4; *ip2 = get_int32(buf); buf+= 4; SLsmg_set_screen_start(ip1, ip2); return ret_int_int(port, *ip1, *ip2); } case SMG_DRAW_HLINE: { x = get_int32(buf); buf+= 4; SLsmg_draw_hline(x); return 0; } case SMG_DRAW_VLINE: { x = get_int32(buf); buf+= 4; SLsmg_draw_vline(x); return 0; } case SMG_DRAW_OBJECT: { x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; x = get_int32(buf); buf+= 4; SLsmg_draw_object(x, y,z); return 0; } case SMG_DRAW_BOX: { x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; z = get_int32(buf); buf+= 4; v = get_int32(buf); buf+= 4; SLsmg_draw_box(x, y,z,v); return 0; } case SMG_GET_COLUMN: { return ret_int(port, SLsmg_get_column()); } case SMG_GET_ROW: { return ret_int(port, SLsmg_get_row()); } case SMG_FORWARD: { x = get_int32(buf); buf+= 4; SLsmg_forward(x); return 0; } case SMG_WRITE_COLOR_CHARS: { SLsmg_Char_Type * sl; sl = decode_smg_char_type(&buf); x = get_int32(buf); buf+= 4; SLsmg_write_color_chars(sl, x); return 0; } case SMG_READ_RAW: { x = get_int32(buf); buf+= 4; t1 = malloc((2*x) + 2 + 1); y = SLsmg_read_raw((unsigned short*)t1 +1, x); t1[1] = 1; driver_output(port, t1, y+1); free(t1); return 0; } case SMG_WRITE_RAW: { SLsmg_Char_Type * sl; sl = decode_smg_char_type(&buf); x = get_int32(buf); y = SLsmg_write_raw(sl, x); return ret_int(port, y); } case SMG_SET_COLOR_IN_REGION: { x = get_int32(buf); buf+= 4; y = get_int32(buf); buf+= 4; z = get_int32(buf); buf+= 4; v = get_int32(buf); buf+= 4; w = get_int32(buf); buf+= 4; SLsmg_set_color_in_region(x, y,z,v,w); return 0; } /* all the tt_functions */ case TT_FLUSH_OUTPUT: { ret = SLtt_flush_output(); return ret_int(port, ret); } case TT_SET_SCROLL_REGION: { x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; SLtt_set_scroll_region(x, y); return 0; } case TT_RESET_SCROLL_REGION: { SLtt_reset_scroll_region(); return 0; } case TT_REVERSE_VIDEO: { SLtt_reverse_video (get_int32(buf)); return 0; } case TT_BOLD_VIDEO: { SLtt_begin_insert(); return 0; } case TT_BEGIN_INSERT: { SLtt_begin_insert(); return 0; } case TT_END_INSERT: { SLtt_end_insert(); return 0; } case TT_DEL_EOL: { SLtt_del_eol(); return 0; } case TT_GOTO_RC: { x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; SLtt_goto_rc (x, y); return 0; } case TT_DELETE_NLINES: { SLtt_delete_nlines(get_int32(buf)); return 0; } case TT_DELETE_CHAR: { SLtt_delete_char(); return 0; } case TT_ERASE_LINE: { SLtt_erase_line(); return 0; } case TT_NORMAL_VIDEO: { SLtt_normal_video(); return 0; } case TT_CLS: { SLtt_cls(); return 0; } case TT_BEEP: { SLtt_beep(); return 0; } case TT_REVERSE_INDEX: { SLtt_reverse_index(get_int32(buf)); return 0; } case TT_SMART_PUTS: { SLsmg_Char_Type *t1 ; SLsmg_Char_Type *t2; t1 = decode_smg_char_type(&buf); t2 = decode_smg_char_type(&buf); x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; SLtt_smart_puts(t1, t2,x,y); return 0; } case TT_WRITE_STRING: { SLtt_write_string (buf); return 0; } case TT_PUTCHAR: { SLtt_putchar((char) get_int32(buf)); return 0; } case TT_INIT_VIDEO: { ret = SLtt_init_video (); return ret_int(port, ret); } case TT_RESET_VIDEO: { SLtt_reset_video (); return 0; } case TT_GET_TERMINFO: { SLtt_get_terminfo(); return 0; } case TT_GET_SCREEN_SIZE: { SLtt_get_screen_size (); return 0; } case TT_SET_CURSOR_VISIBILITY: { ret = SLtt_set_cursor_visibility (get_int32(buf)); return ret_int(port, ret); } case TT_SET_MOUSE_MODE: { x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; ret = SLtt_set_mouse_mode (x,y); return ret_int(port, ret); } case TT_INITIALIZE: { ret =SLtt_initialize (buf); return ret_int(port, ret); } case TT_ENABLE_CURSOR_KEYS: { SLtt_enable_cursor_keys(); return 0; } case TT_SET_TERM_VTXXX: { return 0; } case TT_SET_COLOR_ESC: { x = get_int32(buf); buf+=4; SLtt_set_color_esc (x, buf); return 0; } case TT_WIDE_WIDTH: { SLtt_narrow_width(); return 0; } case TT_NARROW_WIDTH: { SLtt_narrow_width(); return 0; } case TT_SET_ALT_CHAR_SET: { SLtt_set_alt_char_set (get_int32(buf)); return 0; } case TT_WRITE_TO_STATUS_LINE: { x = get_int32(buf); buf+=4; SLtt_write_to_status_line (buf, x); return 0; } case TT_DISABLE_STATUS_LINE: { SLtt_disable_status_line (); return 0; } case TT_TGETSTR: { str = SLtt_tgetstr (buf); return ret_string(port, str); } case TT_TGETNUM: { x = SLtt_tgetnum (buf); return ret_int(port, x); } case TT_TGETFLAG: { x = SLtt_tgetflag (buf); return ret_int(port, x); } case TT_TIGETENT: { str = SLtt_tigetent (buf); return ret_string(port, str); } case TT_TIGETSTR: { return 0; } case TT_TIGETNUM: { return 0; } case SLTT_GET_COLOR_OBJECT: { x = get_int32(buf); buf+=4; y = SLtt_get_color_object (x); return ret_int(port, y); return 0; } case TT_SET_COLOR_OBJECT: { x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; SLtt_set_color_object (x, y); return 0; } case TT_SET_COLOR: { x = get_int32(buf); buf+=4; t1 = buf; t2 = buf + (strlen(t1) + 1); t3 = buf + (strlen(t1) + strlen(t2) + 2); SLtt_set_color (x, t1, t2, t3); return 0; } case TT_SET_MONO: { x = get_int32(buf); buf+=4; t1 = buf; buf += strlen(t1) + 1; y = get_int32(buf); SLtt_set_mono (x, t1, y); return 0; } case TT_ADD_COLOR_ATTRIBUTE: { x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; SLtt_add_color_attribute (x, y); return 0; } case TT_SET_COLOR_FGBG: { x = get_int32(buf); buf+=4; y = get_int32(buf); buf+=4; z = get_int32(buf); buf+=4; SLtt_set_color_fgbg (x, y, z); return 0; } case ISATTY: { x = get_int32(buf); buf+=4; return ret_int(port, isatty(x)); } case EFORMAT: { fprintf(stderr, "%s", buf); fflush(stderr); return 0; } case SIGNAL: { x = get_int32(buf); buf+=4; SLsignal(x_to_sig(x), sig_handler); return 0; } case SIGNAL_CHECK: { /* polled */ if (signal_cought != 0) signal_cought = 0; return ret_int(port, signal_cought); } default: return 0; } }