Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/5/84; site bunkerb.UUCP Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!decvax!ittvax!bunkerb!afs From: afs@bunkerb.UUCP (Andrew F. Seirup) Newsgroups: net.sources Subject: vc bug fix Message-ID: <422@bunkerb.UUCP> Date: Fri, 18-Jan-85 15:57:02 EST Article-I.D.: bunkerb.422 Posted: Fri Jan 18 15:57:02 1985 Date-Received: Sun, 20-Jan-85 05:40:09 EST Distribution: net Organization: Bunker Ramo, Trumbull Ct Lines: 123 This is the first of three context diff postings. Each is on a different file and for a different purpose, so it made sense to keep them separate. The following context diff fixes a bug that effected the ^J command (copy row). If a region expression was copied, the bounds of the region would get garbage values, which might or might not cause a core dump on evaluation. By the way, when you've got vc reasonably bug free, you might want to remove '-g' from the CFLAGS variable in the makefile, so you're not carrying around the debugging symbol table (big) in the final executable. Andrew Seirup - Bunker Ramo, Trumbull CT - (203)386-2086 uucp address: {decvax|ittvax}!bunker!afs *** interp.c Fri Jan 18 09:06:04 1985 --- interp.new Thu Jan 17 15:04:44 1985 *************** *** 362,368 if (e==0) ret = 0; else { ret = (struct enode *) malloc (sizeof (struct enode)); ! *ret = *e; switch (ret->op) { case 'v': ret->e.v = lookat (ret->e.v->row+Rdelta, ret->e.v->col+Cdelta); --- 362,368 ----- if (e==0) ret = 0; else { ret = (struct enode *) malloc (sizeof (struct enode)); ! ret->op = e->op; switch (ret->op) { case 'v': ret->e.v = lookat (e->e.v->row+Rdelta, e->e.v->col+Cdelta); *************** *** 365,371 *ret = *e; switch (ret->op) { case 'v': ! ret->e.v = lookat (ret->e.v->row+Rdelta, ret->e.v->col+Cdelta); break; case 'k': break; --- 365,371 ----- ret->op = e->op; switch (ret->op) { case 'v': ! ret->e.v = lookat (e->e.v->row+Rdelta, e->e.v->col+Cdelta); break; case 'k': break; *************** *** 370,376 case 'k': break; case 'f': ! ret->e.o.right = copye (ret->e.o.right,0,0); break; default: ret->e.o.right = copye (ret->e.o.right,Rdelta,Cdelta); --- 370,376 ----- case 'k': break; case 'f': ! ret->e.o.right = copye (e->e.o.right,0,0); break; case O_REDUCE('+'): (struct ent *) ret->e.o.left = *************** *** 372,377 case 'f': ret->e.o.right = copye (ret->e.o.right,0,0); break; default: ret->e.o.right = copye (ret->e.o.right,Rdelta,Cdelta); ret->e.o.left = copye (ret->e.o.left,Rdelta,Cdelta); --- 372,391 ----- case 'f': ret->e.o.right = copye (e->e.o.right,0,0); break; + case O_REDUCE('+'): + (struct ent *) ret->e.o.left = + (struct ent *) malloc (sizeof (struct ent)); + (struct ent *) ret->e.o.right = + (struct ent *) malloc (sizeof (struct ent)); + ((struct ent *) ret->e.o.left) -> row = + ((struct ent *) e->e.o.left) -> row + Rdelta; + ((struct ent *) ret->e.o.left) -> col = + ((struct ent *) e->e.o.left) -> col + Cdelta; + ((struct ent *) ret->e.o.right) -> row = + ((struct ent *) e->e.o.right) -> row + Rdelta; + ((struct ent *) ret->e.o.right) -> col = + ((struct ent *) e->e.o.right) -> col + Cdelta; + break; default: ret->e.o.right = copye (e->e.o.right,Rdelta,Cdelta); ret->e.o.left = copye (e->e.o.left,Rdelta,Cdelta); *************** *** 373,380 ret->e.o.right = copye (ret->e.o.right,0,0); break; default: ! ret->e.o.right = copye (ret->e.o.right,Rdelta,Cdelta); ! ret->e.o.left = copye (ret->e.o.left,Rdelta,Cdelta); break; } } --- 387,394 ----- ((struct ent *) e->e.o.right) -> col + Cdelta; break; default: ! ret->e.o.right = copye (e->e.o.right,Rdelta,Cdelta); ! ret->e.o.left = copye (e->e.o.left,Rdelta,Cdelta); break; } }