1*e0b8e63eSJohn Marino /*-
2*e0b8e63eSJohn Marino * Copyright (c) 1993, 1994
3*e0b8e63eSJohn Marino * The Regents of the University of California. All rights reserved.
4*e0b8e63eSJohn Marino * Copyright (c) 1993, 1994, 1995, 1996
5*e0b8e63eSJohn Marino * Keith Bostic. All rights reserved.
6*e0b8e63eSJohn Marino *
7*e0b8e63eSJohn Marino * See the LICENSE file for redistribution information.
8*e0b8e63eSJohn Marino */
9*e0b8e63eSJohn Marino
10*e0b8e63eSJohn Marino #include "config.h"
11*e0b8e63eSJohn Marino
12*e0b8e63eSJohn Marino #include <sys/types.h>
13*e0b8e63eSJohn Marino #include <sys/queue.h>
14*e0b8e63eSJohn Marino #include <sys/time.h>
15*e0b8e63eSJohn Marino
16*e0b8e63eSJohn Marino #include <bitstring.h>
17*e0b8e63eSJohn Marino #include <limits.h>
18*e0b8e63eSJohn Marino #include <stdio.h>
19*e0b8e63eSJohn Marino #include <stdlib.h>
20*e0b8e63eSJohn Marino #include <string.h>
21*e0b8e63eSJohn Marino
22*e0b8e63eSJohn Marino #include "../common/common.h"
23*e0b8e63eSJohn Marino #include "../vi/vi.h"
24*e0b8e63eSJohn Marino
25*e0b8e63eSJohn Marino /*
26*e0b8e63eSJohn Marino * ex_bg -- :bg
27*e0b8e63eSJohn Marino * Hide the screen.
28*e0b8e63eSJohn Marino *
29*e0b8e63eSJohn Marino * PUBLIC: int ex_bg(SCR *, EXCMD *);
30*e0b8e63eSJohn Marino */
31*e0b8e63eSJohn Marino int
ex_bg(SCR * sp,EXCMD * cmdp)32*e0b8e63eSJohn Marino ex_bg(SCR *sp, EXCMD *cmdp)
33*e0b8e63eSJohn Marino {
34*e0b8e63eSJohn Marino return (vs_bg(sp));
35*e0b8e63eSJohn Marino }
36*e0b8e63eSJohn Marino
37*e0b8e63eSJohn Marino /*
38*e0b8e63eSJohn Marino * ex_fg -- :fg [file]
39*e0b8e63eSJohn Marino * Show the screen.
40*e0b8e63eSJohn Marino *
41*e0b8e63eSJohn Marino * PUBLIC: int ex_fg(SCR *, EXCMD *);
42*e0b8e63eSJohn Marino */
43*e0b8e63eSJohn Marino int
ex_fg(SCR * sp,EXCMD * cmdp)44*e0b8e63eSJohn Marino ex_fg(SCR *sp, EXCMD *cmdp)
45*e0b8e63eSJohn Marino {
46*e0b8e63eSJohn Marino SCR *nsp;
47*e0b8e63eSJohn Marino int newscreen;
48*e0b8e63eSJohn Marino
49*e0b8e63eSJohn Marino newscreen = F_ISSET(cmdp, E_NEWSCREEN);
50*e0b8e63eSJohn Marino if (vs_fg(sp, &nsp, cmdp->argc ? cmdp->argv[0]->bp : NULL, newscreen))
51*e0b8e63eSJohn Marino return (1);
52*e0b8e63eSJohn Marino
53*e0b8e63eSJohn Marino /* Set up the switch. */
54*e0b8e63eSJohn Marino if (newscreen) {
55*e0b8e63eSJohn Marino sp->nextdisp = nsp;
56*e0b8e63eSJohn Marino F_SET(sp, SC_SSWITCH);
57*e0b8e63eSJohn Marino }
58*e0b8e63eSJohn Marino return (0);
59*e0b8e63eSJohn Marino }
60*e0b8e63eSJohn Marino
61*e0b8e63eSJohn Marino /*
62*e0b8e63eSJohn Marino * ex_resize -- :resize [+-]rows
63*e0b8e63eSJohn Marino * Change the screen size.
64*e0b8e63eSJohn Marino *
65*e0b8e63eSJohn Marino * PUBLIC: int ex_resize(SCR *, EXCMD *);
66*e0b8e63eSJohn Marino */
67*e0b8e63eSJohn Marino int
ex_resize(SCR * sp,EXCMD * cmdp)68*e0b8e63eSJohn Marino ex_resize(SCR *sp, EXCMD *cmdp)
69*e0b8e63eSJohn Marino {
70*e0b8e63eSJohn Marino adj_t adj;
71*e0b8e63eSJohn Marino
72*e0b8e63eSJohn Marino switch (FL_ISSET(cmdp->iflags,
73*e0b8e63eSJohn Marino E_C_COUNT | E_C_COUNT_NEG | E_C_COUNT_POS)) {
74*e0b8e63eSJohn Marino case E_C_COUNT:
75*e0b8e63eSJohn Marino adj = A_SET;
76*e0b8e63eSJohn Marino break;
77*e0b8e63eSJohn Marino case E_C_COUNT | E_C_COUNT_NEG:
78*e0b8e63eSJohn Marino adj = A_DECREASE;
79*e0b8e63eSJohn Marino break;
80*e0b8e63eSJohn Marino case E_C_COUNT | E_C_COUNT_POS:
81*e0b8e63eSJohn Marino adj = A_INCREASE;
82*e0b8e63eSJohn Marino break;
83*e0b8e63eSJohn Marino default:
84*e0b8e63eSJohn Marino ex_emsg(sp, cmdp->cmd->usage, EXM_USAGE);
85*e0b8e63eSJohn Marino return (1);
86*e0b8e63eSJohn Marino }
87*e0b8e63eSJohn Marino return (vs_resize(sp, cmdp->count, adj));
88*e0b8e63eSJohn Marino }
89*e0b8e63eSJohn Marino
90*e0b8e63eSJohn Marino /*
91*e0b8e63eSJohn Marino * ex_sdisplay --
92*e0b8e63eSJohn Marino * Display the list of screens.
93*e0b8e63eSJohn Marino *
94*e0b8e63eSJohn Marino * PUBLIC: int ex_sdisplay(SCR *);
95*e0b8e63eSJohn Marino */
96*e0b8e63eSJohn Marino int
ex_sdisplay(SCR * sp)97*e0b8e63eSJohn Marino ex_sdisplay(SCR *sp)
98*e0b8e63eSJohn Marino {
99*e0b8e63eSJohn Marino GS *gp;
100*e0b8e63eSJohn Marino SCR *tsp;
101*e0b8e63eSJohn Marino int cnt, col, len, sep;
102*e0b8e63eSJohn Marino
103*e0b8e63eSJohn Marino gp = sp->gp;
104*e0b8e63eSJohn Marino if ((tsp = TAILQ_FIRST(gp->hq)) == NULL) {
105*e0b8e63eSJohn Marino msgq(sp, M_INFO, "149|No background screens to display");
106*e0b8e63eSJohn Marino return (0);
107*e0b8e63eSJohn Marino }
108*e0b8e63eSJohn Marino
109*e0b8e63eSJohn Marino col = len = sep = 0;
110*e0b8e63eSJohn Marino for (cnt = 1; tsp != NULL && !INTERRUPTED(sp);
111*e0b8e63eSJohn Marino tsp = TAILQ_NEXT(tsp, q)) {
112*e0b8e63eSJohn Marino col += len = strlen(tsp->frp->name) + sep;
113*e0b8e63eSJohn Marino if (col >= sp->cols - 1) {
114*e0b8e63eSJohn Marino col = len;
115*e0b8e63eSJohn Marino sep = 0;
116*e0b8e63eSJohn Marino (void)ex_puts(sp, "\n");
117*e0b8e63eSJohn Marino } else if (cnt != 1) {
118*e0b8e63eSJohn Marino sep = 1;
119*e0b8e63eSJohn Marino (void)ex_puts(sp, " ");
120*e0b8e63eSJohn Marino }
121*e0b8e63eSJohn Marino (void)ex_puts(sp, tsp->frp->name);
122*e0b8e63eSJohn Marino ++cnt;
123*e0b8e63eSJohn Marino }
124*e0b8e63eSJohn Marino if (!INTERRUPTED(sp))
125*e0b8e63eSJohn Marino (void)ex_puts(sp, "\n");
126*e0b8e63eSJohn Marino return (0);
127*e0b8e63eSJohn Marino }
128