$OpenBSD: shmpatch-window_c,v 1.1 2003/11/22 00:56:58 espie Exp $ --- window.c.orig 2003-09-08 16:27:21.000000000 +0200 +++ window.c 2003-11-17 23:37:54.000000000 +0100 @@ -1993,6 +1993,59 @@ char *data; } } + +#ifdef IPC_EXPORT_IMAGE + +void +CopyWinImage( p, dest ) +struct win *p; +char *dest; +{ + register char *s, *d = dest, *m; + register int x, y; + struct display *display = p->w_pdisplay; + int st = (display) ? D_status : 0; + + if( p && p->w_mlines ) + { + *d++ = p->w_width; /* scrdim x */ + *d++ = p->w_height; /* scrdim y */ + *d++ = (st) ? D_status_len : p->w_x; /* csrpos x */ + *d++ = (st) ? STATLINE : p->w_y; /* csrpos y */ + /* copy window image to buffer */ + for( y = 0; y < p->w_height; y++ ) + { + s = p->w_mlines[y].image; + x = p->w_width; + if( st && y == STATLINE ) + for( m = D_status_lastmsg; *m && x; *d++ = *m++, s++, x-- ); + for( ; x; *d++ = *s++, x-- ); + } + /* copy attributes from window image to buffer */ + for( y = 0; y < p->w_height; y++ ) + { + s = p->w_mlines[y].attr; + x = p->w_width; + if( st && y == STATLINE ) + for( ; x; *d++ = 0, s++, x-- ); + for( ; x; *d++ = *s++, x-- ); + } + } + else + { + /* no window pointer */ + *d++ = 80; /* scrdim x */ + *d++ = 1; /* scrdim y */ + *d++ = 0; /* csrpos x */ + *d++ = 0; /* csrpos y */ + strcpy( d, "*** screen: no window pointer ***" ); + memset( d+strlen(d), ' ', 80); + } +} + +#endif /* IPC_EXPORT_IMAGE */ + + #ifdef ZMODEM static int