ex_delete.c revision 281373
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: ex_delete.c,v 10.11 2001/06/25 15:19:15 skimo Exp $"; 1419304Speter#endif /* not lint */ 1519304Speter 1619304Speter#include <sys/types.h> 1719304Speter#include <sys/queue.h> 18254225Speter#include <sys/time.h> 1919304Speter 2019304Speter#include <bitstring.h> 2119304Speter#include <limits.h> 2219304Speter#include <stdio.h> 2319304Speter 2419304Speter#include "../common/common.h" 2519304Speter 2619304Speter/* 2719304Speter * ex_delete: [line [,line]] d[elete] [buffer] [count] [flags] 2819304Speter * 2919304Speter * Delete lines from the file. 3019304Speter * 31281373Sbapt * PUBLIC: int ex_delete(SCR *, EXCMD *); 3219304Speter */ 3319304Speterint 34254225Speterex_delete(SCR *sp, EXCMD *cmdp) 3519304Speter{ 3619304Speter recno_t lno; 3719304Speter 3819304Speter NEEDFILE(sp, cmdp); 3919304Speter 4019304Speter /* 4119304Speter * !!! 4219304Speter * Historically, lines deleted in ex were not placed in the numeric 4319304Speter * buffers. We follow historic practice so that we don't overwrite 4419304Speter * vi buffers accidentally. 4519304Speter */ 4619304Speter if (cut(sp, 4719304Speter FL_ISSET(cmdp->iflags, E_C_BUFFER) ? &cmdp->buffer : NULL, 4819304Speter &cmdp->addr1, &cmdp->addr2, CUT_LINEMODE)) 4919304Speter return (1); 5019304Speter 5119304Speter /* Delete the lines. */ 5219304Speter if (del(sp, &cmdp->addr1, &cmdp->addr2, 1)) 5319304Speter return (1); 5419304Speter 5519304Speter /* Set the cursor to the line after the last line deleted. */ 5619304Speter sp->lno = cmdp->addr1.lno; 5719304Speter 5819304Speter /* Or the last line in the file if deleted to the end of the file. */ 5919304Speter if (db_last(sp, &lno)) 6019304Speter return (1); 6119304Speter if (sp->lno > lno) 6219304Speter sp->lno = lno; 6319304Speter return (0); 6419304Speter} 65