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