v_util.c revision 19304
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 1319304Speterstatic const char sccsid[] = "@(#)v_util.c 10.11 (Berkeley) 6/30/96"; 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 * 3519304Speter * PUBLIC: void v_eof __P((SCR *, MARK *)); 3619304Speter */ 3719304Spetervoid 3819304Speterv_eof(sp, mp) 3919304Speter SCR *sp; 4019304Speter MARK *mp; 4119304Speter{ 4219304Speter recno_t lno; 4319304Speter 4419304Speter if (mp == NULL) 4519304Speter v_emsg(sp, NULL, VIM_EOF); 4619304Speter else { 4719304Speter if (db_last(sp, &lno)) 4819304Speter return; 4919304Speter if (mp->lno >= lno) 5019304Speter v_emsg(sp, NULL, VIM_EOF); 5119304Speter else 5219304Speter msgq(sp, M_BERR, "195|Movement past the end-of-file"); 5319304Speter } 5419304Speter} 5519304Speter 5619304Speter/* 5719304Speter * v_eol -- 5819304Speter * Vi end-of-line error. 5919304Speter * 6019304Speter * PUBLIC: void v_eol __P((SCR *, MARK *)); 6119304Speter */ 6219304Spetervoid 6319304Speterv_eol(sp, mp) 6419304Speter SCR *sp; 6519304Speter MARK *mp; 6619304Speter{ 6719304Speter size_t len; 6819304Speter 6919304Speter if (mp == NULL) 7019304Speter v_emsg(sp, NULL, VIM_EOL); 7119304Speter else { 7219304Speter if (db_get(sp, mp->lno, DBG_FATAL, NULL, &len)) 7319304Speter return; 7419304Speter if (mp->cno == len - 1) 7519304Speter v_emsg(sp, NULL, VIM_EOL); 7619304Speter else 7719304Speter msgq(sp, M_BERR, "196|Movement past the end-of-line"); 7819304Speter } 7919304Speter} 8019304Speter 8119304Speter/* 8219304Speter * v_nomove -- 8319304Speter * Vi no cursor movement error. 8419304Speter * 8519304Speter * PUBLIC: void v_nomove __P((SCR *)); 8619304Speter */ 8719304Spetervoid 8819304Speterv_nomove(sp) 8919304Speter SCR *sp; 9019304Speter{ 9119304Speter msgq(sp, M_BERR, "197|No cursor movement made"); 9219304Speter} 9319304Speter 9419304Speter/* 9519304Speter * v_sof -- 9619304Speter * Vi start-of-file error. 9719304Speter * 9819304Speter * PUBLIC: void v_sof __P((SCR *, MARK *)); 9919304Speter */ 10019304Spetervoid 10119304Speterv_sof(sp, mp) 10219304Speter SCR *sp; 10319304Speter MARK *mp; 10419304Speter{ 10519304Speter if (mp == NULL || mp->lno == 1) 10619304Speter msgq(sp, M_BERR, "198|Already at the beginning of the file"); 10719304Speter else 10819304Speter msgq(sp, M_BERR, "199|Movement past the beginning of the file"); 10919304Speter} 11019304Speter 11119304Speter/* 11219304Speter * v_sol -- 11319304Speter * Vi start-of-line error. 11419304Speter * 11519304Speter * PUBLIC: void v_sol __P((SCR *)); 11619304Speter */ 11719304Spetervoid 11819304Speterv_sol(sp) 11919304Speter SCR *sp; 12019304Speter{ 12119304Speter msgq(sp, M_BERR, "200|Already in the first column"); 12219304Speter} 12319304Speter 12419304Speter/* 12519304Speter * v_isempty -- 12619304Speter * Return if the line contains nothing but white-space characters. 12719304Speter * 12819304Speter * PUBLIC: int v_isempty __P((char *, size_t)); 12919304Speter */ 13019304Speterint 13119304Speterv_isempty(p, len) 13219304Speter char *p; 13319304Speter size_t len; 13419304Speter{ 13519304Speter for (; len--; ++p) 13619304Speter if (!isblank(*p)) 13719304Speter return (0); 13819304Speter return (1); 13919304Speter} 14019304Speter 14119304Speter/* 14219304Speter * v_emsg -- 14319304Speter * Display a few common vi messages. 14419304Speter * 14519304Speter * PUBLIC: void v_emsg __P((SCR *, char *, vim_t)); 14619304Speter */ 14719304Spetervoid 14819304Speterv_emsg(sp, p, which) 14919304Speter SCR *sp; 15019304Speter char *p; 15119304Speter vim_t which; 15219304Speter{ 15319304Speter switch (which) { 15419304Speter case VIM_COMBUF: 15519304Speter msgq(sp, M_ERR, 15619304Speter "201|Buffers should be specified before the command"); 15719304Speter break; 15819304Speter case VIM_EMPTY: 15919304Speter msgq(sp, M_BERR, "209|The file is empty"); 16019304Speter break; 16119304Speter case VIM_EOF: 16219304Speter msgq(sp, M_BERR, "202|Already at end-of-file"); 16319304Speter break; 16419304Speter case VIM_EOL: 16519304Speter msgq(sp, M_BERR, "203|Already at end-of-line"); 16619304Speter break; 16719304Speter case VIM_NOCOM: 16819304Speter case VIM_NOCOM_B: 16919304Speter msgq(sp, 17019304Speter which == VIM_NOCOM_B ? M_BERR : M_ERR, 17119304Speter "204|%s isn't a vi command", p); 17219304Speter break; 17319304Speter case VIM_WRESIZE: 17419304Speter msgq(sp, M_ERR, "Window resize interrupted text input mode"); 17519304Speter break; 17619304Speter case VIM_USAGE: 17719304Speter msgq(sp, M_ERR, "205|Usage: %s", p); 17819304Speter break; 17919304Speter } 18019304Speter} 181