GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.bin/vi/build/../ex/ex_screen.c Lines: 0 32 0.0 %
Date: 2017-11-07 Branches: 0 30 0.0 %

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