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