119304Speter/*- 219304Speter * Copyright (c) 1992, 1993, 1994 319304Speter * The Regents of the University of California. All rights reserved. 419304Speter * Copyright (c) 1992, 1993, 1994, 1995, 1996 519304Speter * Keith Bostic. All rights reserved. 619304Speter * 719304Speter * See the LICENSE file for redistribution information. 819304Speter */ 919304Speter 1019304Speter#include "config.h" 1119304Speter 1219304Speter#ifndef lint 13254225Speterstatic const char sccsid[] = "$Id: v_util.c,v 10.14 2001/06/25 15:19:36 skimo Exp $"; 1419304Speter#endif /* not lint */ 1519304Speter 1619304Speter#include <sys/types.h> 1719304Speter#include <sys/queue.h> 1819304Speter#include <sys/time.h> 1919304Speter 2019304Speter#include <bitstring.h> 2119304Speter#include <ctype.h> 2219304Speter#include <limits.h> 2319304Speter#include <stdio.h> 2419304Speter#include <stdlib.h> 2519304Speter#include <string.h> 2619304Speter#include <unistd.h> 2719304Speter 2819304Speter#include "../common/common.h" 2919304Speter#include "vi.h" 3019304Speter 3119304Speter/* 3219304Speter * v_eof -- 3319304Speter * Vi end-of-file error. 3419304Speter * 35281373Sbapt * PUBLIC: void v_eof(SCR *, MARK *); 3619304Speter */ 3719304Spetervoid 38254225Speterv_eof(SCR *sp, MARK *mp) 3919304Speter{ 4019304Speter recno_t lno; 4119304Speter 4219304Speter if (mp == NULL) 4319304Speter v_emsg(sp, NULL, VIM_EOF); 4419304Speter else { 4519304Speter if (db_last(sp, &lno)) 4619304Speter return; 4719304Speter if (mp->lno >= lno) 4819304Speter v_emsg(sp, NULL, VIM_EOF); 4919304Speter else 5019304Speter msgq(sp, M_BERR, "195|Movement past the end-of-file"); 5119304Speter } 5219304Speter} 5319304Speter 5419304Speter/* 5519304Speter * v_eol -- 5619304Speter * Vi end-of-line error. 5719304Speter * 58281373Sbapt * PUBLIC: void v_eol(SCR *, MARK *); 5919304Speter */ 6019304Spetervoid 61254225Speterv_eol(SCR *sp, MARK *mp) 6219304Speter{ 6319304Speter size_t len; 6419304Speter 6519304Speter if (mp == NULL) 6619304Speter v_emsg(sp, NULL, VIM_EOL); 6719304Speter else { 6819304Speter if (db_get(sp, mp->lno, DBG_FATAL, NULL, &len)) 6919304Speter return; 7019304Speter if (mp->cno == len - 1) 7119304Speter v_emsg(sp, NULL, VIM_EOL); 7219304Speter else 7319304Speter msgq(sp, M_BERR, "196|Movement past the end-of-line"); 7419304Speter } 7519304Speter} 7619304Speter 7719304Speter/* 7819304Speter * v_nomove -- 7919304Speter * Vi no cursor movement error. 8019304Speter * 81281373Sbapt * PUBLIC: void v_nomove(SCR *); 8219304Speter */ 8319304Spetervoid 84254225Speterv_nomove(SCR *sp) 8519304Speter{ 8619304Speter msgq(sp, M_BERR, "197|No cursor movement made"); 8719304Speter} 8819304Speter 8919304Speter/* 9019304Speter * v_sof -- 9119304Speter * Vi start-of-file error. 9219304Speter * 93281373Sbapt * PUBLIC: void v_sof(SCR *, MARK *); 9419304Speter */ 9519304Spetervoid 96254225Speterv_sof(SCR *sp, MARK *mp) 9719304Speter{ 9819304Speter if (mp == NULL || mp->lno == 1) 9919304Speter msgq(sp, M_BERR, "198|Already at the beginning of the file"); 10019304Speter else 10119304Speter msgq(sp, M_BERR, "199|Movement past the beginning of the file"); 10219304Speter} 10319304Speter 10419304Speter/* 10519304Speter * v_sol -- 10619304Speter * Vi start-of-line error. 10719304Speter * 108281373Sbapt * PUBLIC: void v_sol(SCR *); 10919304Speter */ 11019304Spetervoid 111254225Speterv_sol(SCR *sp) 11219304Speter{ 11319304Speter msgq(sp, M_BERR, "200|Already in the first column"); 11419304Speter} 11519304Speter 11619304Speter/* 11719304Speter * v_isempty -- 11819304Speter * Return if the line contains nothing but white-space characters. 11919304Speter * 120281373Sbapt * PUBLIC: int v_isempty(CHAR_T *, size_t); 12119304Speter */ 12219304Speterint 123254225Speterv_isempty(CHAR_T *p, size_t len) 12419304Speter{ 12519304Speter for (; len--; ++p) 12619304Speter if (!isblank(*p)) 12719304Speter return (0); 12819304Speter return (1); 12919304Speter} 13019304Speter 13119304Speter/* 13219304Speter * v_emsg -- 13319304Speter * Display a few common vi messages. 13419304Speter * 135281373Sbapt * PUBLIC: void v_emsg(SCR *, char *, vim_t); 13619304Speter */ 13719304Spetervoid 138254225Speterv_emsg(SCR *sp, char *p, vim_t which) 13919304Speter{ 14019304Speter switch (which) { 14119304Speter case VIM_COMBUF: 14219304Speter msgq(sp, M_ERR, 14319304Speter "201|Buffers should be specified before the command"); 14419304Speter break; 14519304Speter case VIM_EMPTY: 14619304Speter msgq(sp, M_BERR, "209|The file is empty"); 14719304Speter break; 14819304Speter case VIM_EOF: 14919304Speter msgq(sp, M_BERR, "202|Already at end-of-file"); 15019304Speter break; 15119304Speter case VIM_EOL: 15219304Speter msgq(sp, M_BERR, "203|Already at end-of-line"); 15319304Speter break; 15419304Speter case VIM_NOCOM: 15519304Speter case VIM_NOCOM_B: 15619304Speter msgq(sp, 15719304Speter which == VIM_NOCOM_B ? M_BERR : M_ERR, 15819304Speter "204|%s isn't a vi command", p); 15919304Speter break; 16019304Speter case VIM_WRESIZE: 16119304Speter msgq(sp, M_ERR, "Window resize interrupted text input mode"); 16219304Speter break; 16319304Speter case VIM_USAGE: 16419304Speter msgq(sp, M_ERR, "205|Usage: %s", p); 16519304Speter break; 16619304Speter } 16719304Speter} 168