GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.bin/vi/build/../vi/v_util.c Lines: 0 41 0.0 %
Date: 2017-11-13 Branches: 0 29 0.0 %

Line Branch Exec Source
1
/*	$OpenBSD: v_util.c,v 1.8 2016/01/06 22:28:52 millert Exp $	*/
2
3
/*-
4
 * Copyright (c) 1992, 1993, 1994
5
 *	The Regents of the University of California.  All rights reserved.
6
 * Copyright (c) 1992, 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 <ctype.h>
20
#include <limits.h>
21
#include <stdio.h>
22
#include <stdlib.h>
23
#include <string.h>
24
#include <unistd.h>
25
26
#include "../common/common.h"
27
#include "vi.h"
28
29
/*
30
 * v_eof --
31
 *	Vi end-of-file error.
32
 *
33
 * PUBLIC: void v_eof(SCR *, MARK *);
34
 */
35
void
36
v_eof(SCR *sp, MARK *mp)
37
{
38
	recno_t lno;
39
40
	if (mp == NULL)
41
		v_emsg(sp, NULL, VIM_EOF);
42
	else {
43
		if (db_last(sp, &lno))
44
			return;
45
		if (mp->lno >= lno)
46
			v_emsg(sp, NULL, VIM_EOF);
47
		else
48
			msgq(sp, M_BERR, "Movement past the end-of-file");
49
	}
50
}
51
52
/*
53
 * v_eol --
54
 *	Vi end-of-line error.
55
 *
56
 * PUBLIC: void v_eol(SCR *, MARK *);
57
 */
58
void
59
v_eol(SCR *sp, MARK *mp)
60
{
61
	size_t len;
62
63
	if (mp == NULL)
64
		v_emsg(sp, NULL, VIM_EOL);
65
	else {
66
		if (db_get(sp, mp->lno, DBG_FATAL, NULL, &len))
67
			return;
68
		if (mp->cno == len - 1)
69
			v_emsg(sp, NULL, VIM_EOL);
70
		else
71
			msgq(sp, M_BERR, "Movement past the end-of-line");
72
	}
73
}
74
75
/*
76
 * v_nomove --
77
 *	Vi no cursor movement error.
78
 *
79
 * PUBLIC: void v_nomove(SCR *);
80
 */
81
void
82
v_nomove(SCR *sp)
83
{
84
	msgq(sp, M_BERR, "No cursor movement made");
85
}
86
87
/*
88
 * v_sof --
89
 *	Vi start-of-file error.
90
 *
91
 * PUBLIC: void v_sof(SCR *, MARK *);
92
 */
93
void
94
v_sof(SCR *sp, MARK *mp)
95
{
96
	if (mp == NULL || mp->lno == 1)
97
		msgq(sp, M_BERR, "Already at the beginning of the file");
98
	else
99
		msgq(sp, M_BERR, "Movement past the beginning of the file");
100
}
101
102
/*
103
 * v_sol --
104
 *	Vi start-of-line error.
105
 *
106
 * PUBLIC: void v_sol(SCR *);
107
 */
108
void
109
v_sol(SCR *sp)
110
{
111
	msgq(sp, M_BERR, "Already in the first column");
112
}
113
114
/*
115
 * v_isempty --
116
 *	Return if the line contains nothing but white-space characters.
117
 *
118
 * PUBLIC: int v_isempty(char *, size_t);
119
 */
120
int
121
v_isempty(char *p, size_t len)
122
{
123
	for (; len--; ++p)
124
		if (!isblank(*p))
125
			return (0);
126
	return (1);
127
}
128
129
/*
130
 * v_emsg --
131
 *	Display a few common vi messages.
132
 *
133
 * PUBLIC: void v_emsg(SCR *, char *, vim_t);
134
 */
135
void
136
v_emsg(SCR *sp, char *p, vim_t which)
137
{
138
	switch (which) {
139
	case VIM_COMBUF:
140
		msgq(sp, M_ERR,
141
		    "Buffers should be specified before the command");
142
		break;
143
	case VIM_EMPTY:
144
		msgq(sp, M_BERR, "The file is empty");
145
		break;
146
	case VIM_EOF:
147
		msgq(sp, M_BERR, "Already at end-of-file");
148
		break;
149
	case VIM_EOL:
150
		msgq(sp, M_BERR, "Already at end-of-line");
151
		break;
152
	case VIM_NOCOM:
153
	case VIM_NOCOM_B:
154
		msgq(sp,
155
		    which == VIM_NOCOM_B ? M_BERR : M_ERR,
156
		    "%s isn't a vi command", p);
157
		break;
158
	case VIM_WRESIZE:
159
		msgq(sp, M_ERR, "Window resize interrupted text input mode");
160
		break;
161
	case VIM_USAGE:
162
		msgq(sp, M_ERR, "Usage: %s", p);
163
		break;
164
	}
165
}