119304Speter/*-
219304Speter * Copyright (c) 1993, 1994
319304Speter *	The Regents of the University of California.  All rights reserved.
419304Speter * Copyright (c) 1993, 1994, 1995, 1996
519304Speter *	Keith Bostic.  All rights reserved.
619304Speter *
719304Speter * See the LICENSE file for redistribution information.
819304Speter */
919304Speter
1019304Speter#include "config.h"
1119304Speter
1219304Speter#ifndef lint
13254225Speterstatic const char sccsid[] = "$Id: ex_screen.c,v 10.12 2001/06/25 15:19:19 skimo Exp $";
1419304Speter#endif /* not lint */
1519304Speter
1619304Speter#include <sys/types.h>
1719304Speter#include <sys/queue.h>
1819304Speter#include <sys/time.h>
1919304Speter
2019304Speter#include <bitstring.h>
2119304Speter#include <limits.h>
2219304Speter#include <stdio.h>
2319304Speter#include <stdlib.h>
2419304Speter#include <string.h>
2519304Speter
2619304Speter#include "../common/common.h"
2719304Speter#include "../vi/vi.h"
2819304Speter
2919304Speter/*
3019304Speter * ex_bg --	:bg
3119304Speter *	Hide the screen.
3219304Speter *
3319304Speter * PUBLIC: int ex_bg __P((SCR *, EXCMD *));
3419304Speter */
3519304Speterint
36254225Speterex_bg(SCR *sp, EXCMD *cmdp)
3719304Speter{
3819304Speter	return (vs_bg(sp));
3919304Speter}
4019304Speter
4119304Speter/*
4219304Speter * ex_fg --	:fg [file]
4319304Speter *	Show the screen.
4419304Speter *
4519304Speter * PUBLIC: int ex_fg __P((SCR *, EXCMD *));
4619304Speter */
4719304Speterint
48254225Speterex_fg(SCR *sp, EXCMD *cmdp)
4919304Speter{
5019304Speter	SCR *nsp;
5119304Speter	int newscreen;
5219304Speter
5319304Speter	newscreen = F_ISSET(cmdp, E_NEWSCREEN);
5419304Speter	if (vs_fg(sp, &nsp, cmdp->argc ? cmdp->argv[0]->bp : NULL, newscreen))
5519304Speter		return (1);
5619304Speter
5719304Speter	/* Set up the switch. */
5819304Speter	if (newscreen) {
5919304Speter		sp->nextdisp = nsp;
6019304Speter		F_SET(sp, SC_SSWITCH);
6119304Speter	}
6219304Speter	return (0);
6319304Speter}
6419304Speter
6519304Speter/*
6619304Speter * ex_resize --	:resize [+-]rows
6719304Speter *	Change the screen size.
6819304Speter *
6919304Speter * PUBLIC: int ex_resize __P((SCR *, EXCMD *));
7019304Speter */
7119304Speterint
72254225Speterex_resize(SCR *sp, EXCMD *cmdp)
7319304Speter{
7419304Speter	adj_t adj;
7519304Speter
7619304Speter	switch (FL_ISSET(cmdp->iflags,
7719304Speter	    E_C_COUNT | E_C_COUNT_NEG | E_C_COUNT_POS)) {
7819304Speter	case E_C_COUNT:
7919304Speter		adj = A_SET;
8019304Speter		break;
8119304Speter	case E_C_COUNT | E_C_COUNT_NEG:
8219304Speter		adj = A_DECREASE;
8319304Speter		break;
8419304Speter	case E_C_COUNT | E_C_COUNT_POS:
8519304Speter		adj = A_INCREASE;
8619304Speter		break;
8719304Speter	default:
8819304Speter		ex_emsg(sp, cmdp->cmd->usage, EXM_USAGE);
8919304Speter		return (1);
9019304Speter	}
9119304Speter	return (vs_resize(sp, cmdp->count, adj));
9219304Speter}
9319304Speter
9419304Speter/*
9519304Speter * ex_sdisplay --
9619304Speter *	Display the list of screens.
9719304Speter *
9819304Speter * PUBLIC: int ex_sdisplay __P((SCR *));
9919304Speter */
10019304Speterint
101254225Speterex_sdisplay(SCR *sp)
10219304Speter{
10319304Speter	GS *gp;
10419304Speter	SCR *tsp;
10519304Speter	int cnt, col, len, sep;
10619304Speter
10719304Speter	gp = sp->gp;
108254225Speter	if ((tsp = TAILQ_FIRST(gp->hq)) == NULL) {
10919304Speter		msgq(sp, M_INFO, "149|No background screens to display");
11019304Speter		return (0);
11119304Speter	}
11219304Speter
11319304Speter	col = len = sep = 0;
114254225Speter	for (cnt = 1; tsp != NULL && !INTERRUPTED(sp);
115254225Speter	    tsp = TAILQ_NEXT(tsp, q)) {
11619304Speter		col += len = strlen(tsp->frp->name) + sep;
11719304Speter		if (col >= sp->cols - 1) {
11819304Speter			col = len;
11919304Speter			sep = 0;
12019304Speter			(void)ex_puts(sp, "\n");
12119304Speter		} else if (cnt != 1) {
12219304Speter			sep = 1;
12319304Speter			(void)ex_puts(sp, " ");
12419304Speter		}
12519304Speter		(void)ex_puts(sp, tsp->frp->name);
12619304Speter		++cnt;
12719304Speter	}
12819304Speter	if (!INTERRUPTED(sp))
12919304Speter		(void)ex_puts(sp, "\n");
13019304Speter	return (0);
13119304Speter}
132