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