|
|
1.1 ! root 1: # include "curses.ext" ! 2: ! 3: short *calloc(); ! 4: WINDOW *malloc(); ! 5: ! 6: static WINDOW *makenew(); ! 7: ! 8: # undef nl /* don't need it here, and it interferes */ ! 9: ! 10: WINDOW * ! 11: newwin(num_lines, num_cols, begy, begx) ! 12: int num_lines, num_cols, begy, begx; ! 13: { ! 14: reg WINDOW *win; ! 15: reg char *sp; ! 16: reg int i, by, bx, nl, nc; ! 17: ! 18: by = begy; ! 19: bx = begx; ! 20: nl = num_lines; ! 21: nc = num_cols; ! 22: ! 23: if (nl == 0) ! 24: nl = LINES - by; ! 25: if (nc == 0) ! 26: nc = COLS - bx; ! 27: if ((win = makenew(nl, nc, by, bx)) == NULL) ! 28: return ERR; ! 29: for (i = 0; i < nl; i++) ! 30: if ((win->_y[i] = (char *) calloc(nc, sizeof (char))) == NULL) { ! 31: reg int j; ! 32: ! 33: for (j = 0; j < i; j++) ! 34: cfree(win->_y[j]); ! 35: cfree(win->_firstch); ! 36: cfree(win->_lastch); ! 37: cfree(win->_y); ! 38: cfree(win); ! 39: return ERR; ! 40: } ! 41: else ! 42: for (sp = win->_y[i]; sp < win->_y[i] + nc; ) ! 43: *sp++ = ' '; ! 44: return win; ! 45: } ! 46: ! 47: WINDOW * ! 48: subwin(orig, num_lines, num_cols, begy, begx) ! 49: reg WINDOW *orig; ! 50: int num_lines, num_cols, begy, begx; { ! 51: ! 52: reg int i; ! 53: reg WINDOW *win; ! 54: reg int by, bx, nl, nc; ! 55: reg int j, k; ! 56: ! 57: by = begy; ! 58: bx = begx; ! 59: nl = num_lines; ! 60: nc = num_cols; ! 61: ! 62: /* ! 63: * make sure window fits inside the original one ! 64: */ ! 65: # ifdef DEBUG ! 66: fprintf(outf, "SUBWIN(%0.2o, %d, %d, %d, %d)\n", orig, nl, nc, by, bx); ! 67: # endif ! 68: if (by < orig->_begy || bx < orig->_begx ! 69: || by + nl > orig->_maxy || bx + nc > orig->_maxx) ! 70: return ERR; ! 71: if (nl == 0) ! 72: nl = orig->_maxy - orig->_begy - by; ! 73: if (nc == 0) ! 74: nc = orig->_maxx - orig->_begx - bx; ! 75: if ((win = makenew(nl, nc, by, bx)) == NULL) ! 76: return ERR; ! 77: j = orig->_begy + by; ! 78: k = orig->_begx + bx; ! 79: for (i = 0; i < nl; i++) ! 80: win->_y[i] = &orig->_y[j++][k]; ! 81: win->_flags = _SUBWIN; ! 82: return win; ! 83: } ! 84: ! 85: /* ! 86: * This routine sets up a window buffer and returns a pointer to it. ! 87: */ ! 88: static WINDOW * ! 89: makenew(num_lines, num_cols, begy, begx) ! 90: int num_lines, num_cols, begy, begx; { ! 91: ! 92: reg int i; ! 93: reg WINDOW *win; ! 94: reg int by, bx, nl, nc; ! 95: ! 96: by = begy; ! 97: bx = begx; ! 98: nl = num_lines; ! 99: nc = num_cols; ! 100: ! 101: # ifdef DEBUG ! 102: fprintf(outf, "MAKENEW(%d, %d, %d, %d)\n", nl, nc, by, bx); ! 103: # endif ! 104: if ((win = (WINDOW *) malloc(sizeof (WINDOW))) == NULL) ! 105: return NULL; ! 106: # ifdef DEBUG ! 107: fprintf(outf, "MAKENEW: nl = %d\n", nl); ! 108: # endif ! 109: if ((win->_y = (char **) calloc(nl, sizeof (char *))) == NULL) { ! 110: cfree(win); ! 111: return (WINDOW *) NULL; ! 112: } ! 113: if ((win->_firstch = calloc(nl, sizeof (short))) == NULL) { ! 114: cfree(win); ! 115: cfree(win->_y); ! 116: } ! 117: if ((win->_lastch = calloc(nl, sizeof (short))) == NULL) { ! 118: cfree(win); ! 119: cfree(win->_y); ! 120: cfree(win->_firstch); ! 121: } ! 122: # ifdef DEBUG ! 123: fprintf(outf, "MAKENEW: nc = %d\n", nc); ! 124: # endif ! 125: win->_cury = win->_curx = 0; ! 126: win->_clear = (nl == LINES && nc == COLS); ! 127: win->_maxy = nl; ! 128: win->_maxx = nc; ! 129: win->_begy = by; ! 130: win->_begx = bx; ! 131: win->_scroll = win->_leave = FALSE; ! 132: for (i = 0; i < nl; i++) ! 133: win->_firstch[i] = win->_lastch[i] = _NOCHANGE; ! 134: win->_flags = 0; ! 135: if (bx + nc == COLS) { ! 136: win->_flags |= _ENDLINE; ! 137: if (bx == 0 && nl == LINES && by == 0) ! 138: win->_flags |= _FULLWIN; ! 139: if (by + nl == LINES) ! 140: win->_flags |= _SCROLLWIN; ! 141: } ! 142: # ifdef DEBUG ! 143: fprintf(outf, "MAKENEW: win->_clear = %d\n", win->_clear); ! 144: fprintf(outf, "MAKENEW: win->_leave = %d\n", win->_leave); ! 145: fprintf(outf, "MAKENEW: win->_scroll = %d\n", win->_scroll); ! 146: fprintf(outf, "MAKENEW: win->_flags = %0.2o\n", win->_flags); ! 147: fprintf(outf, "MAKENEW: win->_maxy = %d\n", win->_maxy); ! 148: fprintf(outf, "MAKENEW: win->_maxx = %d\n", win->_maxx); ! 149: fprintf(outf, "MAKENEW: win->_begy = %d\n", win->_begy); ! 150: fprintf(outf, "MAKENEW: win->_begx = %d\n", win->_begx); ! 151: # endif ! 152: return win; ! 153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.