int copywin(const WINDOW *src_w, WINDOW *dst_w, int src_tr, int src_tc, int dst_tr, int dst_tc, int dst_br, int dst_bc, int overlay) { int src_end_x, src_end_y; int src_rows, src_cols, dst_rows, dst_cols; int min_rows, min_cols; PDC_LOG(("copywin() - called\n")); if (!src_w || !dst_w || dst_w == curscr || dst_br > dst_w->_maxy || dst_bc > dst_w->_maxx || dst_tr < 0 || dst_tc < 0) return ERR; src_rows = src_w->_maxy - src_tr; src_cols = src_w->_maxx - src_tc; dst_rows = dst_br - dst_tr + 1; dst_cols = dst_bc - dst_tc + 1; min_rows = min(src_rows, dst_rows); min_cols = min(src_cols, dst_cols); src_end_y = src_tr + min_rows; src_end_x = src_tc + min_cols; return _copy_win(src_w, dst_w, src_tr, src_tc, src_end_y, src_end_x, dst_tr, dst_tc, overlay); }
//------------------------------------------------------------------------------ int copywin( const WINDOW* src_w, WINDOW* dst_w, int src_tr, int src_tc, int dst_tr, int dst_tc, int dst_br, int dst_bc, int overlay ) { __QCS_FCONTEXT( "copywin" ); int src_end_x, src_end_y; int src_rows, src_cols, dst_rows, dst_cols; int min_rows, min_cols; if( !src_w || !dst_w || dst_w == curscr || dst_br > dst_w->_maxy || dst_bc > dst_w->_maxx || dst_tr < 0 || dst_tc < 0 ) { return ERR; } src_rows = src_w->_maxy - src_tr; src_cols = src_w->_maxx - src_tc; dst_rows = dst_br - dst_tr + 1; dst_cols = dst_bc - dst_tc + 1; min_rows = min( src_rows, dst_rows ); min_cols = min( src_cols, dst_cols ); src_end_y = src_tr + min_rows; src_end_x = src_tc + min_cols; return _copy_win( src_w, dst_w, src_tr, src_tc, src_end_y, src_end_x, dst_tr, dst_tc, overlay ) ? true : false; }
//------------------------------------------------------------------------------ int overwrite( const WINDOW* src_w, WINDOW* dst_w ) { __QCS_FCONTEXT( "overwrite" ); int first_line, first_col, last_line, last_col; int src_start_x, src_start_y, dst_start_x, dst_start_y; int xdiff, ydiff; if( !src_w || !dst_w ) { return ERR; } first_col = max( dst_w->_begx, src_w->_begx ); first_line = max( dst_w->_begy, src_w->_begy ); last_col = min( src_w->_begx + src_w->_maxx, dst_w->_begx + dst_w->_maxx ); last_line = min( src_w->_begy + src_w->_maxy, dst_w->_begy + dst_w->_maxy ); // determine the overlapping region of the two windows in real coordinates // if no overlapping region, do nothing if( ( last_col < first_col ) || ( last_line < first_line ) ) { return 0; } // size of overlapping region xdiff = last_col - first_col; ydiff = last_line - first_line; if( src_w->_begx <= dst_w->_begx ) { src_start_x = dst_w->_begx - src_w->_begx; dst_start_x = 0; } else { dst_start_x = src_w->_begx - dst_w->_begx; src_start_x = 0; } if( src_w->_begy <= dst_w->_begy ) { src_start_y = dst_w->_begy - src_w->_begy; dst_start_y = 0; } else { dst_start_y = src_w->_begy - dst_w->_begy; src_start_y = 0; } return _copy_win( src_w, dst_w, src_start_y, src_start_x, src_start_y + ydiff, src_start_x + xdiff, dst_start_y, dst_start_x, FALSE ); }
int overwrite(const WINDOW *src_w, WINDOW *dst_w) { int first_line, first_col, last_line, last_col; int src_start_x, src_start_y, dst_start_x, dst_start_y; int xdiff, ydiff; PDC_LOG(("overwrite() - called\n")); if (!src_w || !dst_w) return ERR; first_col = max(dst_w->_begx, src_w->_begx); first_line = max(dst_w->_begy, src_w->_begy); last_col = min(src_w->_begx + src_w->_maxx, dst_w->_begx + dst_w->_maxx); last_line = min(src_w->_begy + src_w->_maxy, dst_w->_begy + dst_w->_maxy); /* determine the overlapping region of the two windows in real coordinates */ /* if no overlapping region, do nothing */ if ((last_col < first_col) || (last_line < first_line)) return OK; /* size of overlapping region */ xdiff = last_col - first_col; ydiff = last_line - first_line; if (src_w->_begx <= dst_w->_begx) { src_start_x = dst_w->_begx - src_w->_begx; dst_start_x = 0; } else { dst_start_x = src_w->_begx - dst_w->_begx; src_start_x = 0; } if (src_w->_begy <= dst_w->_begy) { src_start_y = dst_w->_begy - src_w->_begy; dst_start_y = 0; } else { dst_start_y = src_w->_begy - dst_w->_begy; src_start_y = 0; } return _copy_win(src_w, dst_w, src_start_y, src_start_x, src_start_y + ydiff, src_start_x + xdiff, dst_start_y, dst_start_x, FALSE); }