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_init.c 10.8 (Berkeley) 3/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 <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 * 3419304Speter * PUBLIC: int v_screen_copy __P((SCR *, SCR *)); 3519304Speter */ 3619304Speterint 3719304Speterv_screen_copy(orig, sp) 3819304Speter SCR *orig, *sp; 3919304Speter{ 4019304Speter VI_PRIVATE *ovip, *nvip; 4119304Speter 4219304Speter /* Create the private vi structure. */ 4319304Speter CALLOC_RET(orig, nvip, VI_PRIVATE *, 1, sizeof(VI_PRIVATE)); 4419304Speter sp->vi_private = nvip; 4519304Speter 4619304Speter /* Invalidate the line size cache. */ 4719304Speter VI_SCR_CFLUSH(nvip); 4819304Speter 4919304Speter if (orig == NULL) { 5019304Speter nvip->csearchdir = CNOTSET; 5119304Speter } else { 5219304Speter ovip = VIP(orig); 5319304Speter 5419304Speter /* User can replay the last input, but nothing else. */ 5519304Speter if (ovip->rep_len != 0) { 5619304Speter MALLOC_RET(orig, nvip->rep, EVENT *, ovip->rep_len); 5719304Speter memmove(nvip->rep, ovip->rep, ovip->rep_len); 5819304Speter nvip->rep_len = ovip->rep_len; 5919304Speter } 6019304Speter 6119304Speter /* Copy the paragraph/section information. */ 6219304Speter if (ovip->ps != NULL && (nvip->ps = 6319304Speter v_strdup(sp, ovip->ps, strlen(ovip->ps))) == NULL) 6419304Speter return (1); 6519304Speter 6619304Speter nvip->lastckey = ovip->lastckey; 6719304Speter nvip->csearchdir = ovip->csearchdir; 6819304Speter 6919304Speter nvip->srows = ovip->srows; 7019304Speter } 7119304Speter return (0); 7219304Speter} 7319304Speter 7419304Speter/* 7519304Speter * v_screen_end -- 7619304Speter * End a vi screen. 7719304Speter * 7819304Speter * PUBLIC: int v_screen_end __P((SCR *)); 7919304Speter */ 8019304Speterint 8119304Speterv_screen_end(sp) 8219304Speter SCR *sp; 8319304Speter{ 8419304Speter VI_PRIVATE *vip; 8519304Speter 8619304Speter if ((vip = VIP(sp)) == NULL) 8719304Speter return (0); 8819304Speter if (vip->keyw != NULL) 8919304Speter free(vip->keyw); 9019304Speter if (vip->rep != NULL) 9119304Speter free(vip->rep); 9219304Speter if (vip->ps != NULL) 9319304Speter free(vip->ps); 9419304Speter 9519304Speter if (HMAP != NULL) 9619304Speter free(HMAP); 9719304Speter 9819304Speter free(vip); 9919304Speter sp->vi_private = NULL; 10019304Speter 10119304Speter return (0); 10219304Speter} 10319304Speter 10419304Speter/* 10519304Speter * v_optchange -- 10619304Speter * Handle change of options for vi. 10719304Speter * 10819304Speter * PUBLIC: int v_optchange __P((SCR *, int, char *, u_long *)); 10919304Speter */ 11019304Speterint 11119304Speterv_optchange(sp, offset, str, valp) 11219304Speter SCR *sp; 11319304Speter int offset; 11419304Speter char *str; 11519304Speter u_long *valp; 11619304Speter{ 11719304Speter switch (offset) { 11819304Speter case O_PARAGRAPHS: 11919304Speter return (v_buildps(sp, str, O_STR(sp, O_SECTIONS))); 12019304Speter case O_SECTIONS: 12119304Speter return (v_buildps(sp, O_STR(sp, O_PARAGRAPHS), str)); 12219304Speter case O_WINDOW: 12319304Speter return (vs_crel(sp, *valp)); 12419304Speter } 12519304Speter return (0); 12619304Speter} 127