static char *sccsid
= "@(#)wwopen.c 3.6 83/08/22";
wwopen(flags
, nrow
, ncol
, row
, col
, nline
)
register struct ww
*w
= 0;
if (nrow
<= 0 || ncol
<= 0)
if (row
< 0 || row
+ nrow
> wwnrow
|| col
< 0 || col
+ ncol
> wwncol
)
for (i
= 0; i
< NWW
&& wwindex
[i
] != 0; i
++)
wwindex
[i
] = w
= (struct ww
*)calloc(sizeof (struct ww
), 1);
w
->ww_pty
= w
->ww_tty
= -1; /* closing by mistake is still safe */
if (wwsettty(w
->ww_pty
, &wwwintty
) < 0)
if ((w
->ww_w
.l
= col
) < 0)
if ((w
->ww_w
.r
= col
+ ncol
) > wwncol
)
if ((w
->ww_w
.t
= row
) < 0)
if ((w
->ww_w
.b
= row
+ nrow
) > wwnrow
)
w
->ww_nline
= MAX(nline
, w
->ww_w
.nr
);
w
->ww_win
= wwalloc(w
->ww_w
.nr
, w
->ww_w
.nc
, sizeof (char));
for (i
= 0; i
< w
->ww_w
.nr
; i
++)
for (j
= 0; j
< w
->ww_w
.nc
; j
++)
w
->ww_cov
= wwalloc(w
->ww_w
.nr
, w
->ww_w
.nc
, sizeof (char));
for (i
= 0; i
< w
->ww_w
.nr
; i
++)
for (j
= 0; j
< w
->ww_w
.nc
; j
++)
w
->ww_cov
[i
][j
] = WWX_NOBODY
;
w
->ww_fmap
= wwalloc(w
->ww_w
.nr
, w
->ww_w
.nc
, sizeof (char));
for (i
= 0; i
< wwnrow
; i
++)
for (j
= 0; j
< wwncol
; j
++)
w
->ww_buf
= (union ww_char
**)
wwalloc(w
->ww_nline
, w
->ww_w
.nc
, sizeof (union ww_char
));
for (i
= 0; i
< w
->ww_nline
; i
++)
for (j
= 0; j
< w
->ww_w
.nc
; j
++)
w
->ww_buf
[i
][j
].c_w
= ' ';
w
->ww_nvis
= (short *)malloc((unsigned) w
->ww_w
.nr
* sizeof (short));
nvis
= m
? 0 : w
->ww_w
.nc
;
for (i
= 0; i
< w
->ww_w
.nr
; i
++)
w
->ww_state
= WWS_INITIAL
;
wwfree((char **)w
->ww_buf
);
free((char *)w
->ww_nvis
);