ex_screen.c revision 285830
1230557Sjimharris/*-
2230557Sjimharris * Copyright (c) 1993, 1994
3230557Sjimharris *	The Regents of the University of California.  All rights reserved.
4230557Sjimharris * Copyright (c) 1993, 1994, 1995, 1996
5230557Sjimharris *	Keith Bostic.  All rights reserved.
6230557Sjimharris *
7230557Sjimharris * See the LICENSE file for redistribution information.
8230557Sjimharris */
9230557Sjimharris
10230557Sjimharris#include "config.h"
11230557Sjimharris
12230557Sjimharris#ifndef lint
13230557Sjimharrisstatic const char sccsid[] = "$Id: ex_screen.c,v 10.12 2001/06/25 15:19:19 skimo Exp $";
14230557Sjimharris#endif /* not lint */
15230557Sjimharris
16230557Sjimharris#include <sys/types.h>
17230557Sjimharris#include <sys/queue.h>
18230557Sjimharris#include <sys/time.h>
19230557Sjimharris
20230557Sjimharris#include <bitstring.h>
21230557Sjimharris#include <limits.h>
22230557Sjimharris#include <stdio.h>
23230557Sjimharris#include <stdlib.h>
24230557Sjimharris#include <string.h>
25230557Sjimharris
26230557Sjimharris#include "../common/common.h"
27230557Sjimharris#include "../vi/vi.h"
28230557Sjimharris
29230557Sjimharris/*
30230557Sjimharris * ex_bg --	:bg
31230557Sjimharris *	Hide the screen.
32230557Sjimharris *
33230557Sjimharris * PUBLIC: int ex_bg __P((SCR *, EXCMD *));
34230557Sjimharris */
35230557Sjimharrisint
36230557Sjimharrisex_bg(SCR *sp, EXCMD *cmdp)
37230557Sjimharris{
38230557Sjimharris	return (vs_bg(sp));
39230557Sjimharris}
40230557Sjimharris
41230557Sjimharris/*
42230557Sjimharris * ex_fg --	:fg [file]
43230557Sjimharris *	Show the screen.
44230557Sjimharris *
45230557Sjimharris * PUBLIC: int ex_fg __P((SCR *, EXCMD *));
46230557Sjimharris */
47230557Sjimharrisint
48230557Sjimharrisex_fg(SCR *sp, EXCMD *cmdp)
49230557Sjimharris{
50230557Sjimharris	SCR *nsp;
51230557Sjimharris	int newscreen;
52230557Sjimharris
53230557Sjimharris	newscreen = F_ISSET(cmdp, E_NEWSCREEN);
54230557Sjimharris	if (vs_fg(sp, &nsp, cmdp->argc ? cmdp->argv[0]->bp : NULL, newscreen))
55230557Sjimharris		return (1);
56230557Sjimharris
57230557Sjimharris	/* Set up the switch. */
58230557Sjimharris	if (newscreen) {
59230557Sjimharris		sp->nextdisp = nsp;
60230557Sjimharris		F_SET(sp, SC_SSWITCH);
61230557Sjimharris	}
62230557Sjimharris	return (0);
63230557Sjimharris}
64230557Sjimharris
65230557Sjimharris/*
66230557Sjimharris * ex_resize --	:resize [+-]rows
67230557Sjimharris *	Change the screen size.
68230557Sjimharris *
69230557Sjimharris * PUBLIC: int ex_resize __P((SCR *, EXCMD *));
70230557Sjimharris */
71230557Sjimharrisint
72230557Sjimharrisex_resize(SCR *sp, EXCMD *cmdp)
73230557Sjimharris{
74230557Sjimharris	adj_t adj;
75230557Sjimharris
76230557Sjimharris	switch (FL_ISSET(cmdp->iflags,
77230557Sjimharris	    E_C_COUNT | E_C_COUNT_NEG | E_C_COUNT_POS)) {
78230557Sjimharris	case E_C_COUNT:
79230557Sjimharris		adj = A_SET;
80230557Sjimharris		break;
81230557Sjimharris	case E_C_COUNT | E_C_COUNT_NEG:
82230557Sjimharris		adj = A_DECREASE;
83230557Sjimharris		break;
84230557Sjimharris	case E_C_COUNT | E_C_COUNT_POS:
85230557Sjimharris		adj = A_INCREASE;
86230557Sjimharris		break;
87230557Sjimharris	default:
88230557Sjimharris		ex_emsg(sp, cmdp->cmd->usage, EXM_USAGE);
89230557Sjimharris		return (1);
90230557Sjimharris	}
91230557Sjimharris	return (vs_resize(sp, cmdp->count, adj));
92230557Sjimharris}
93230557Sjimharris
94230557Sjimharris/*
95230557Sjimharris * ex_sdisplay --
96230557Sjimharris *	Display the list of screens.
97230557Sjimharris *
98230557Sjimharris * PUBLIC: int ex_sdisplay __P((SCR *));
99230557Sjimharris */
100230557Sjimharrisint
101230557Sjimharrisex_sdisplay(SCR *sp)
102230557Sjimharris{
103230557Sjimharris	GS *gp;
104230557Sjimharris	SCR *tsp;
105230557Sjimharris	int cnt, col, len, sep;
106230557Sjimharris
107230557Sjimharris	gp = sp->gp;
108230557Sjimharris	if ((tsp = TAILQ_FIRST(gp->hq)) == NULL) {
109230557Sjimharris		msgq(sp, M_INFO, "149|No background screens to display");
110230557Sjimharris		return (0);
111230557Sjimharris	}
112230557Sjimharris
113230557Sjimharris	col = len = sep = 0;
114230557Sjimharris	for (cnt = 1; tsp != NULL && !INTERRUPTED(sp);
115230557Sjimharris	    tsp = TAILQ_NEXT(tsp, q)) {
116230557Sjimharris		col += len = strlen(tsp->frp->name) + sep;
117230557Sjimharris		if (col >= sp->cols - 1) {
118230557Sjimharris			col = len;
119230557Sjimharris			sep = 0;
120230557Sjimharris			(void)ex_puts(sp, "\n");
121230557Sjimharris		} else if (cnt != 1) {
122230557Sjimharris			sep = 1;
123			(void)ex_puts(sp, " ");
124		}
125		(void)ex_puts(sp, tsp->frp->name);
126		++cnt;
127	}
128	if (!INTERRUPTED(sp))
129		(void)ex_puts(sp, "\n");
130	return (0);
131}
132