int mvwin(WINDOW *win, int by, int bx) { WINDOW *orig; int dy, dx; if (by + win->_maxy > LINES || bx + win->_maxx > COLS) return (ERR); dy = by - win->_begy; dx = bx - win->_begx; orig = win->_orig; if (orig == NULL) { orig = win; do { win->_begy += dy; win->_begx += dx; _swflags_(win); win = win->_nextp; } while (win != orig); } else { if (by < orig->_begy || win->_maxy + dy > orig->_maxy) return (ERR); if (bx < orig->_begx || win->_maxx + dx > orig->_maxx) return (ERR); win->_begy = (short)by; win->_begx = (short)bx; _swflags_(win); _set_subwin_(orig, win); } (void) touchwin(win); return (OK); }
WINDOW * subwin(WINDOW *orig, int num_lines, int num_cols, int begy, int begx) { WINDOW *win; int by, bx, nl, nc; by = begy; bx = begx; nl = num_lines; nc = num_cols; /* * make sure window fits inside the original one */ #ifdef DEBUG fprintf(outf, "SUBWIN(%0.2o, %d, %d, %d, %d)\n", orig, nl, nc, by, bx); #endif if (by < orig->_begy || bx < orig->_begx || by + nl > orig->_maxy + orig->_begy || bx + nc > orig->_maxx + orig->_begx) return (ERR); if (nl == 0) nl = orig->_maxy + orig->_begy - by; if (nc == 0) nc = orig->_maxx + orig->_begx - bx; if ((win = makenew(nl, nc, by, bx)) == NULL) return (ERR); win->_nextp = orig->_nextp; orig->_nextp = win; win->_orig = orig; _set_subwin_(orig, win); return (win); }
int mvwin( reg WINDOW *win, reg int by, reg int bx ) { register WINDOW *orig; register int dy, dx; if (by + win->_maxy > LINES || bx + win->_maxx > COLS) return ERR; dy = by - win->_begy; dx = bx - win->_begx; orig = win->_orig; if (orig == NULL) { orig = win; do { win->_begy += dy; win->_begx += dx; _swflags_(win); win = win->_nextp; } while (win != orig); } else { if (by < orig->_begy || win->_maxy + dy > orig->_maxy) return ERR; if (bx < orig->_begx || win->_maxx + dx > orig->_maxx) return ERR; win->_begy = by; win->_begx = bx; _swflags_(win); _set_subwin_(orig, win); } touchwin(win); return OK; }