4.3BSD-UWisc/src/ucb/ex/ex_set.c.diff

diff ./ex_set.c /usr/src/ucb/ex/ex_set.c
1,2c1,2
< /* Copyright (c) 1980 Regents of the University of California */
< static char *sccsid = "@(#)ex_set.c	6.3 10/30/80";
---
> /* Copyright (c) 1981 Regents of the University of California */
> static char *sccsid = "@(#)ex_set.c	7.2	6/27/83";
10c10
< char	optname[LBSIZE];
---
> char	optname[ONMSZ];
14c14
< 	register char *cp, *t, *p;
---
> 	register char *cp;
17,19d16
< 	int overflow = 0;
< 	char *index();
< 	char buf[20];
21d17
< 	short speed;
34c30
< 			if (cp < &optname[LBSIZE - 2])
---
> 			if (cp < &optname[ONMSZ - 2])
36,45c32
< 			else {
< 				overflow++;
< 				getchar();
< 			}
< 			if( cp != optname && (*(cp-1) == '\\' && peekchar() != EOF))
< 				*(cp-1) = getchar();
< 		} while (!isspace(c=peekchar()) && c != EOF);
< 		if(overflow) {
< 			serror("Option too long.");
< 		}
---
> 		} while (isalnum(peekchar()));
54,83d40
< 		if(*cp == '?') { /* a conditional set */
< 			if(!*++cp) {
< 				serror("%s: No such option@- 'set all' gives all option values", "?");
< 			}
< 			/* copy arg */
< 			for(t = buf, p = cp; ( (*++p != ':') && (*t++ = *p)) && (t < &buf[19]););
< 			*t = '\0';
< 			switch(*cp) {
< 			 case 'T':	/* set based on term type */
< 				if(strcmp(buf,ttytype)) {
< 					goto next;
< 				}
< 				break;
< 
< 			 case 'S':	/* set based on term speed */
< 				speed = atoi(buf);
< 				if(	   (speed == 300  && ospeed != B300)
< 					|| (speed == 1200 && ospeed != B1200)
< 					|| (speed == 2400 && ospeed != B2400)
< 					|| (speed == 4800 && ospeed != B4800)
< 					|| (speed == 9600 && ospeed != B9600) )
< 					goto next;
< 				break;
< 			 default:
< 				serror("%c: No such condition@- 'set all' gives all option values", *cp);
< 			}
< 			cp = p;
< 			if(*cp == ':')
< 				cp++;
< 		}
89,97d45
< 		/* separate out the option name, t now points to the [ = value] */
< 		c = 0;
< 		if( (t = index (cp,'=')) == NULL)
< 			t = "";
< 		else {
< 			c = '=';
< 			*t++ = '\0';
< 		}
< 
101c49,52
< 				goto next;
---
> dontset:
> 				ignore(getchar());	/* = */
> 				ignore(getnum());	/* value */
> 				continue;
106c57
< 				goto next;
---
> 				goto dontset;
110c61
< 				goto next;
---
> 				goto dontset;
118c69,71
< 		if (*t == '?') {
---
> 		c = skipwh();
> 		if (peekchar() == '?') {
> 			ignchar();
132c85
< 		if (*t == '\0' )
---
> 		if (c != 0 || setend())
134c87
< 		if (c != '=')
---
> 		if (getchar() != '=')
139c92
< 			if (!isdigit(*t))
---
> 			if (!isdigit(peekchar()))
141c94
< 			op->ovalue = atoi(t);
---
> 			op->ovalue = getnum();
143a97,98
> 			if (value(HARDTABS) <= 0)
> 				value(HARDTABS) = TABS;
152a108,118
> 			cp = optname;
> 			while (!setend()) {
> 				if (cp >= &optname[ONMSZ])
> 					error("String too long@in option assignment");
> 				/* adb change:  allow whitepace in strings */
> 				if( (*cp = getchar()) == '\\')
> 					if( peekchar() != EOF)
> 						*cp = getchar();
> 				cp++;
> 			}
> 			*cp = 0;
171c137
< 				setterm(t);
---
> 				setterm(optname);
173,178c139
< 				if(*t == '&') {
< 					*t = ' ';
< 					(void) strcat(op->osvalue,t);
< 				} else {
< 					CP(op->osvalue, t);
< 				}
---
> 				CP(op->osvalue, optname);