|
|
researchv10 Norman
# include "curses.ext"
# include <signal.h>
/* @(#) makenew.c: 1.1 10/15/83 (1.17 3/16/83) */
char *calloc();
char *malloc();
extern char *getenv();
extern WINDOW *makenew();
/*
* This routine sets up a window buffer and returns a pointer to it.
*/
WINDOW *
makenew(num_lines, num_cols, begy, begx)
int num_lines, num_cols, begy, begx;
{
register int i;
register WINDOW *win;
register int by, bx, nlines, ncols;
char *malloc(), *calloc();
by = begy;
bx = begx;
nlines = num_lines;
ncols = num_cols;
if (nlines <= 0 || ncols <= 0 || by > LINES || bx > COLS)
return NULL;
# ifdef DEBUG
if(outf) fprintf(outf, "MAKENEW(%d, %d, %d, %d)\n", nlines, ncols, by, bx);
# endif
if ((win = (WINDOW *) calloc(1, sizeof (WINDOW))) == NULL)
return NULL;
# ifdef DEBUG
if(outf) fprintf(outf, "MAKENEW: nlines = %d\n", nlines);
# endif
if ((win->_y = (chtype **) calloc(nlines, sizeof (chtype *))) == NULL) {
cfree((char *)win);
return (WINDOW *) NULL;
}
if ((win->_firstch = (short *) calloc(nlines, sizeof (short))) == NULL) {
cfree((char *)win);
cfree((char *)win->_y);
}
if ((win->_lastch = (short *) calloc(nlines, sizeof (short))) == NULL) {
cfree((char *)win);
cfree((char *)win->_y);
cfree((char *)win->_firstch);
}
# ifdef DEBUG
if(outf) fprintf(outf, "MAKENEW: ncols = %d\n", ncols);
# endif
win->_cury = win->_curx = 0;
win->_clear = (nlines == LINES && ncols == COLS);
win->_maxy = nlines;
win->_maxx = ncols;
win->_begy = by;
win->_begx = bx;
win->_scroll = win->_leave = win->_use_idl = FALSE;
win->_tmarg = 0;
win->_bmarg = nlines - 1;
for (i = 0; i < nlines; i++)
win->_firstch[i] = win->_lastch[i] = _NOCHANGE;
if (bx + ncols == COLS) {
win->_flags |= _ENDLINE;
/* Full window: scrolling heuristics (linefeed) work */
if (nlines == LINES && ncols == COLS &&
by == 0 && bx == 0 && scroll_forward)
win->_flags |= _FULLWIN;
/* Scrolling window: it might scroll on us by accident */
if (by + nlines == LINES && auto_right_margin)
win->_flags |= _SCROLLWIN;
}
# ifdef DEBUG
if(outf) fprintf(outf, "MAKENEW: win->_clear = %d\n", win->_clear);
if(outf) fprintf(outf, "MAKENEW: win->_leave = %d\n", win->_leave);
if(outf) fprintf(outf, "MAKENEW: win->_scroll = %d\n", win->_scroll);
if(outf) fprintf(outf, "MAKENEW: win->_flags = %0.2o\n", win->_flags);
if(outf) fprintf(outf, "MAKENEW: win->_maxy = %d\n", win->_maxy);
if(outf) fprintf(outf, "MAKENEW: win->_maxx = %d\n", win->_maxx);
if(outf) fprintf(outf, "MAKENEW: win->_begy = %d\n", win->_begy);
if(outf) fprintf(outf, "MAKENEW: win->_begx = %d\n", win->_begx);
# endif
return win;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.