static char sccsid
[] = "@(#)wwopen.c 3.17 %G%";
wwopen(flags
, nrow
, ncol
, row
, col
, nline
)
w
= (struct ww
*)calloc(sizeof (struct ww
), 1);
for (i
= 0; i
< NWW
&& wwindex
[i
] != 0; i
++)
w
->ww_i
.t
= MAX(w
->ww_w
.t
, 0);
w
->ww_i
.b
= MIN(w
->ww_w
.b
, wwnrow
);
w
->ww_i
.l
= MAX(w
->ww_w
.l
, 0);
w
->ww_i
.r
= MIN(w
->ww_w
.r
, wwncol
);
w
->ww_i
.nr
= w
->ww_i
.b
- w
->ww_i
.t
;
w
->ww_i
.nc
= w
->ww_i
.r
- w
->ww_i
.l
;
if (wwsettty(w
->ww_pty
, &wwwintty
) < 0)
} else if (flags
& WWO_SOCKET
) {
if (socketpair(AF_UNIX
, SOCK_STREAM
, PF_UNSPEC
, d
) < 0) {
if (flags
& (WWO_PTY
|WWO_SOCKET
)) {
if ((w
->ww_ob
= malloc(512)) == 0) {
w
->ww_obe
= w
->ww_ob
+ 512;
w
->ww_obp
= w
->ww_obq
= w
->ww_ob
;
w
->ww_win
= wwalloc(w
->ww_w
.t
, w
->ww_w
.l
,
w
->ww_w
.nr
, w
->ww_w
.nc
, sizeof (char));
for (i
= w
->ww_w
.t
; i
< w
->ww_w
.b
; i
++)
for (j
= w
->ww_w
.l
; j
< w
->ww_w
.r
; j
++)
w
->ww_fmap
= wwalloc(w
->ww_w
.t
, w
->ww_w
.l
,
w
->ww_w
.nr
, w
->ww_w
.nc
, sizeof (char));
for (i
= w
->ww_w
.t
; i
< w
->ww_w
.b
; i
++)
for (j
= w
->ww_w
.l
; j
< w
->ww_w
.r
; j
++)
w
->ww_buf
= (union ww_char
**)
wwalloc(w
->ww_b
.t
, w
->ww_b
.l
,
w
->ww_b
.nr
, w
->ww_b
.nc
, sizeof (union ww_char
));
for (i
= w
->ww_b
.t
; i
< w
->ww_b
.b
; i
++)
for (j
= w
->ww_b
.l
; j
< w
->ww_b
.r
; 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
= w
->ww_w
.t
; i
< w
->ww_w
.b
; i
++)
w
->ww_state
= WWS_INITIAL
;
return wwindex
[w
->ww_index
] = w
;
wwfree(w
->ww_win
, w
->ww_w
.t
);
wwfree(w
->ww_fmap
, w
->ww_w
.t
);
wwfree((char **)w
->ww_buf
, w
->ww_b
.t
);
free((char *)(w
->ww_nvis
+ w
->ww_w
.t
));
(void) close(w
->ww_socket
);