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 |
|
|
} |