v_util.c revision 254225
1169695Skan/*- 2169695Skan * Copyright (c) 1992, 1993, 1994 3169695Skan * The Regents of the University of California. All rights reserved. 4169695Skan * Copyright (c) 1992, 1993, 1994, 1995, 1996 5169695Skan * Keith Bostic. All rights reserved. 6169695Skan * 7169695Skan * See the LICENSE file for redistribution information. 8169695Skan */ 9169695Skan 10169695Skan#include "config.h" 11169695Skan 12169695Skan#ifndef lint 13169695Skanstatic const char sccsid[] = "$Id: v_util.c,v 10.14 2001/06/25 15:19:36 skimo Exp $"; 14169695Skan#endif /* not lint */ 15169695Skan 16169695Skan#include <sys/types.h> 17169695Skan#include <sys/queue.h> 18169695Skan#include <sys/time.h> 19169695Skan 20169695Skan#include <bitstring.h> 21169695Skan#include <ctype.h> 22169695Skan#include <limits.h> 23169695Skan#include <stdio.h> 24169695Skan#include <stdlib.h> 25169695Skan#include <string.h> 26169695Skan#include <unistd.h> 27169695Skan 28169695Skan#include "../common/common.h" 29169695Skan#include "vi.h" 30169695Skan 31169695Skan/* 32169695Skan * v_eof -- 33169695Skan * Vi end-of-file error. 34169695Skan * 35169695Skan * PUBLIC: void v_eof __P((SCR *, MARK *)); 36169695Skan */ 37169695Skanvoid 38169695Skanv_eof(SCR *sp, MARK *mp) 39169695Skan{ 40169695Skan recno_t lno; 41169695Skan 42169695Skan if (mp == NULL) 43169695Skan v_emsg(sp, NULL, VIM_EOF); 44169695Skan else { 45169695Skan if (db_last(sp, &lno)) 46169695Skan return; 47169695Skan if (mp->lno >= lno) 48169695Skan v_emsg(sp, NULL, VIM_EOF); 49169695Skan else 50169695Skan msgq(sp, M_BERR, "195|Movement past the end-of-file"); 51169695Skan } 52169695Skan} 53169695Skan 54169695Skan/* 55169695Skan * v_eol -- 56169695Skan * Vi end-of-line error. 57169695Skan * 58169695Skan * PUBLIC: void v_eol __P((SCR *, MARK *)); 59169695Skan */ 60169695Skanvoid 61169695Skanv_eol(SCR *sp, MARK *mp) 62169695Skan{ 63169695Skan size_t len; 64169695Skan 65169695Skan if (mp == NULL) 66169695Skan v_emsg(sp, NULL, VIM_EOL); 67169695Skan else { 68169695Skan if (db_get(sp, mp->lno, DBG_FATAL, NULL, &len)) 69169695Skan return; 70169695Skan if (mp->cno == len - 1) 71169695Skan v_emsg(sp, NULL, VIM_EOL); 72169695Skan else 73169695Skan msgq(sp, M_BERR, "196|Movement past the end-of-line"); 74169695Skan } 75169695Skan} 76169695Skan 77169695Skan/* 78169695Skan * v_nomove -- 79169695Skan * Vi no cursor movement error. 80169695Skan * 81169695Skan * PUBLIC: void v_nomove __P((SCR *)); 82169695Skan */ 83169695Skanvoid 84169695Skanv_nomove(SCR *sp) 85169695Skan{ 86169695Skan msgq(sp, M_BERR, "197|No cursor movement made"); 87169695Skan} 88169695Skan 89169695Skan/* 90169695Skan * v_sof -- 91169695Skan * Vi start-of-file error. 92169695Skan * 93169695Skan * PUBLIC: void v_sof __P((SCR *, MARK *)); 94169695Skan */ 95169695Skanvoid 96169695Skanv_sof(SCR *sp, MARK *mp) 97169695Skan{ 98169695Skan if (mp == NULL || mp->lno == 1) 99169695Skan msgq(sp, M_BERR, "198|Already at the beginning of the file"); 100169695Skan else 101169695Skan msgq(sp, M_BERR, "199|Movement past the beginning of the file"); 102169695Skan} 103169695Skan 104169695Skan/* 105169695Skan * v_sol -- 106169695Skan * Vi start-of-line error. 107169695Skan * 108169695Skan * PUBLIC: void v_sol __P((SCR *)); 109169695Skan */ 110169695Skanvoid 111169695Skanv_sol(SCR *sp) 112169695Skan{ 113169695Skan msgq(sp, M_BERR, "200|Already in the first column"); 114169695Skan} 115169695Skan 116169695Skan/* 117169695Skan * v_isempty -- 118169695Skan * Return if the line contains nothing but white-space characters. 119169695Skan * 120169695Skan * PUBLIC: int v_isempty __P((CHAR_T *, size_t)); 121169695Skan */ 122169695Skanint 123169695Skanv_isempty(CHAR_T *p, size_t len) 124169695Skan{ 125169695Skan for (; len--; ++p) 126169695Skan if (!isblank(*p)) 127169695Skan return (0); 128169695Skan return (1); 129169695Skan} 130169695Skan 131169695Skan/* 132169695Skan * v_emsg -- 133169695Skan * Display a few common vi messages. 134169695Skan * 135169695Skan * PUBLIC: void v_emsg __P((SCR *, char *, vim_t)); 136169695Skan */ 137169695Skanvoid 138169695Skanv_emsg(SCR *sp, char *p, vim_t which) 139169695Skan{ 140169695Skan switch (which) { 141169695Skan case VIM_COMBUF: 142169695Skan msgq(sp, M_ERR, 143169695Skan "201|Buffers should be specified before the command"); 144169695Skan break; 145169695Skan case VIM_EMPTY: 146169695Skan msgq(sp, M_BERR, "209|The file is empty"); 147169695Skan break; 148169695Skan case VIM_EOF: 149169695Skan msgq(sp, M_BERR, "202|Already at end-of-file"); 150169695Skan break; 151169695Skan case VIM_EOL: 152169695Skan msgq(sp, M_BERR, "203|Already at end-of-line"); 153169695Skan break; 154169695Skan case VIM_NOCOM: 155169695Skan case VIM_NOCOM_B: 156169695Skan msgq(sp, 157169695Skan which == VIM_NOCOM_B ? M_BERR : M_ERR, 158169695Skan "204|%s isn't a vi command", p); 159169695Skan break; 160169695Skan case VIM_WRESIZE: 161169695Skan msgq(sp, M_ERR, "Window resize interrupted text input mode"); 162169695Skan break; 163169695Skan case VIM_USAGE: 164169695Skan msgq(sp, M_ERR, "205|Usage: %s", p); 165169695Skan break; 166169695Skan } 167169695Skan} 168169695Skan