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_init.c,v 10.10 2012/02/11 00:33:46 zy 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 <errno.h> 2219304Speter#include <limits.h> 2319304Speter#include <stdio.h> 2419304Speter#include <stdlib.h> 2519304Speter#include <string.h> 2619304Speter 2719304Speter#include "../common/common.h" 2819304Speter#include "vi.h" 2919304Speter 3019304Speter/* 3119304Speter * v_screen_copy -- 3219304Speter * Copy vi screen. 3319304Speter * 34281373Sbapt * PUBLIC: int v_screen_copy(SCR *, SCR *); 3519304Speter */ 3619304Speterint 37254225Speterv_screen_copy(SCR *orig, SCR *sp) 3819304Speter{ 3919304Speter VI_PRIVATE *ovip, *nvip; 4019304Speter 4119304Speter /* Create the private vi structure. */ 4219304Speter CALLOC_RET(orig, nvip, VI_PRIVATE *, 1, sizeof(VI_PRIVATE)); 4319304Speter sp->vi_private = nvip; 4419304Speter 4519304Speter /* Invalidate the line size cache. */ 4619304Speter VI_SCR_CFLUSH(nvip); 4719304Speter 4819304Speter if (orig == NULL) { 4919304Speter nvip->csearchdir = CNOTSET; 5019304Speter } else { 5119304Speter ovip = VIP(orig); 5219304Speter 5319304Speter /* User can replay the last input, but nothing else. */ 5419304Speter if (ovip->rep_len != 0) { 5519304Speter MALLOC_RET(orig, nvip->rep, EVENT *, ovip->rep_len); 5619304Speter memmove(nvip->rep, ovip->rep, ovip->rep_len); 5719304Speter nvip->rep_len = ovip->rep_len; 5819304Speter } 5919304Speter 60254225Speter /* Copy the match characters information. */ 61254225Speter if (ovip->mcs != NULL && (nvip->mcs = 62254225Speter v_wstrdup(sp, ovip->mcs, STRLEN(ovip->mcs))) == NULL) 63254225Speter return (1); 64254225Speter 6519304Speter /* Copy the paragraph/section information. */ 6619304Speter if (ovip->ps != NULL && (nvip->ps = 6719304Speter v_strdup(sp, ovip->ps, strlen(ovip->ps))) == NULL) 6819304Speter return (1); 6919304Speter 7019304Speter nvip->lastckey = ovip->lastckey; 7119304Speter nvip->csearchdir = ovip->csearchdir; 7219304Speter 7319304Speter nvip->srows = ovip->srows; 7419304Speter } 7519304Speter return (0); 7619304Speter} 7719304Speter 7819304Speter/* 7919304Speter * v_screen_end -- 8019304Speter * End a vi screen. 8119304Speter * 82281373Sbapt * PUBLIC: int v_screen_end(SCR *); 8319304Speter */ 8419304Speterint 85254225Speterv_screen_end(SCR *sp) 8619304Speter{ 8719304Speter VI_PRIVATE *vip; 8819304Speter 8919304Speter if ((vip = VIP(sp)) == NULL) 9019304Speter return (0); 9119304Speter if (vip->keyw != NULL) 9219304Speter free(vip->keyw); 9319304Speter if (vip->rep != NULL) 9419304Speter free(vip->rep); 95254225Speter if (vip->mcs != NULL) 96254225Speter free(vip->mcs); 9719304Speter if (vip->ps != NULL) 9819304Speter free(vip->ps); 9919304Speter 10019304Speter if (HMAP != NULL) 10119304Speter free(HMAP); 10219304Speter 10319304Speter free(vip); 10419304Speter sp->vi_private = NULL; 10519304Speter 10619304Speter return (0); 10719304Speter} 10819304Speter 10919304Speter/* 11019304Speter * v_optchange -- 11119304Speter * Handle change of options for vi. 11219304Speter * 113281373Sbapt * PUBLIC: int v_optchange(SCR *, int, char *, u_long *); 11419304Speter */ 11519304Speterint 116254225Speterv_optchange(SCR *sp, int offset, char *str, u_long *valp) 11719304Speter{ 11819304Speter switch (offset) { 119254225Speter case O_MATCHCHARS: 120254225Speter return (v_buildmcs(sp, str)); 12119304Speter case O_PARAGRAPHS: 12219304Speter return (v_buildps(sp, str, O_STR(sp, O_SECTIONS))); 12319304Speter case O_SECTIONS: 12419304Speter return (v_buildps(sp, O_STR(sp, O_PARAGRAPHS), str)); 12519304Speter case O_WINDOW: 12619304Speter return (vs_crel(sp, *valp)); 12719304Speter } 12819304Speter return (0); 12919304Speter} 130