SLcurses_Window_Type *SLcurses_newwin (unsigned int nrows, unsigned int ncols, unsigned int r, unsigned int c) { SLcurses_Window_Type *win; SLcurses_Cell_Type **lines; if (r >= (unsigned int) SLtt_Screen_Rows) return NULL; if (c >= (unsigned int) SLtt_Screen_Cols) return NULL; if (NULL == (win = (SLcurses_Window_Type *) SLmalloc (sizeof (SLcurses_Window_Type)))) return NULL; SLMEMSET ((char *) win, 0, sizeof (SLcurses_Window_Type)); if (nrows == 0) nrows = (unsigned int) SLtt_Screen_Rows - r; if (ncols == 0) ncols = (unsigned int) SLtt_Screen_Cols - c; lines = (SLcurses_Cell_Type **) SLmalloc (nrows * sizeof (SLcurses_Cell_Type *)); if (lines == NULL) { SLcurses_delwin (win); return NULL; } SLMEMSET ((char *) lines, 0, nrows * sizeof (SLcurses_Cell_Type *)); win->lines = lines; win->scroll_max = win->nrows = nrows; win->ncols = ncols; win->_begy = r; win->_begx = c; win->_maxx = (c + ncols) - 1; win->_maxy = (r + nrows) - 1; win->modified = 1; win->delay_off = -1; for (r = 0; r < nrows; r++) { SLcurses_Cell_Type *b; b = (SLcurses_Cell_Type *) SLmalloc (ncols * sizeof (SLcurses_Cell_Type)); if (b == NULL) { SLcurses_delwin (win); return NULL; } lines [r] = b; blank_line (b, ncols, 0); } return win; }
SLcurses_Window_Type *SLcurses_subwin (SLcurses_Window_Type *orig, unsigned int nlines, unsigned int ncols, unsigned int begin_y, unsigned int begin_x) { SLcurses_Window_Type *sw; int r, c; unsigned int i; if (orig == NULL) return NULL; sw = (SLcurses_Window_Type *) SLmalloc (sizeof (SLcurses_Window_Type)); if (sw == NULL) return NULL; SLMEMSET ((char *)sw, 0, sizeof (SLcurses_Window_Type)); #if 1 r = begin_y - orig->_begy; #else r = 1 + ((int)orig->nrows - (int)nlines) / 2; #endif if (r < 0) r = 0; if (r + nlines > orig->nrows) nlines = orig->nrows - r; c = ((int)orig->ncols - (int)ncols) / 2; if (c < 0) c = 0; if (c + ncols > orig->ncols) ncols = orig->ncols - c; sw->scroll_min = 0; sw->scroll_max = sw->nrows = nlines; sw->ncols = ncols; sw->_begy = begin_y; sw->_begx = begin_x; sw->_maxx = (begin_x + ncols) - 1; sw->_maxy = (begin_y + nlines) - 1; sw->lines = (SLcurses_Cell_Type **) SLmalloc (nlines * sizeof (SLcurses_Cell_Type *)); if (sw->lines == NULL) { SLcurses_delwin (sw); return NULL; } for (i = 0; i < nlines; i++) { sw->lines [i] = orig->lines [r + i] + c; } sw->is_subwin = 1; return sw; }
void SLsmg_draw_hline (unsigned int n) { static unsigned char hbuf[16]; int cmin, cmax; int final_col = This_Col + (int) n; int save_color; if (Smg_Inited == 0) return; if ((This_Row < Start_Row) || (This_Row >= Start_Row + (int)Screen_Rows) || (0 == compute_clip (This_Col, n, Start_Col, Start_Col + (int)Screen_Cols, &cmin, &cmax))) { This_Col = final_col; return; } n = (unsigned int)(cmax - cmin); save_color = This_Color; This_Color |= SLSMG_ACS_MASK; This_Col = cmin; if (hbuf[0] == 0) { SLMEMSET ((char *) hbuf, SLSMG_HLINE_CHAR, 16); } while (n) { SLsmg_write_char (SLSMG_HLINE_CHAR); n--; } This_Color = save_color; This_Col = final_col; }
SLang_Class_Type *SLclass_allocate_class (SLFUTURE_CONST char *name) { SLang_Class_Type *cl; if (NULL != (cl = lookup_class_by_name (name))) { _pSLang_verror (SL_DUPLICATE_DEFINITION, "Type name %s already exists", name); return NULL; } cl = (SLang_Class_Type *) SLmalloc (sizeof (SLang_Class_Type)); if (cl == NULL) return NULL; SLMEMSET ((char *) cl, 0, sizeof (SLang_Class_Type)); if (NULL == (cl->cl_name = SLang_create_slstring (name))) { SLfree ((char *) cl); return NULL; } return cl; }