[att.sys.pc6300] Putting an '=' in an environment variable

jas@hou2d.UUCP (05/26/87)

limitations prevent using the =.  However, the same result may be 
obtained by placing the commands in the VI.INI file.
References: <209@ttrde.UUCP>

louis@drutx.UUCP (06/02/87)

In article <210@ttrde.UUCP>, rdj@ttrde.UUCP (Robert D. Jackson) writes:
> I am using a version of PC/VI, and have been trying for some time now
> to get the EXINIT environment variable set to my liking.

I had the identical problem with MKS Toolkit's vi.  Since I couldn't
put spaces or = in my EXINIT, I was using an ex.rc file in the root
directory of my hard disk.  When I made my current drive anything but
the hard disk, vi couldn't find ex.rc and would blow up.

I finally lost patience with the DOS SET command and rolled my own.

After writing the program, I discovered that by setting HOME=c:, vi
would have found ex.rc all of the time.  Oh well.  I like EXINIT
better, anyway.

What follows is the source and uuencoded binary for setenv.

Lou Warshawsky

-------- cut here for setenv.c --------
/*
 *	setenv - set environment variable
 *
 *	This program duplicates the function of SET, while avoiding
 *	arbitrary limitations on the characters that may be used in
 *	the variable's value.
 *
 *	To set a value containing spaces, enclose the value in
 *	quotation marks, as in:
 *
 *		setenv EXINIT "set ai dir=d:"
 *
 *	Compile this module using the large memory model.
 *
 *	Copyright (c) 1987 by Louis Warshawsky
 *	Permission is granted to reproduce for any purpose.
 *
 *	This program has been compiled using Microsoft C 3.0 and
 *	tested briefly under MS-DOS 2.11.
 */

#include <dos.h>
#include <stdlib.h>
#include <string.h>

#ifndef NULL
#define NULL	0L
#endif

#define ALTSYNTAX 1	/* use C-shell syntax (no =) */
#define START_SEG 0x60	/* start search after DOS communication area */

/*
 *	Locate command.com's environment table.
 *	The first occurrence on a 16-byte boundary of the string at
 *	envp[0] is probably it.  The redundant test of the first
 *	character speeds the search.
 */
char *
findenv(envp)
char *envp[];
{
	register int	c;
	char	*p;

	c = *envp[0];
	FP_OFF(p) = 0;
	for (FP_SEG(p) = START_SEG; FP_SEG(p) < _psp; FP_SEG(p)++)
		if (*p == c && strcmp(p, envp[0]) == 0)
			return p;
	return NULL;
}

/*
 *	Recreate command.com's environment table at (op).
 *	WARNING: Since command.com does not divulge the size of its
 *	environment table, we can not check for overflow.
 */
makenv(op)
register char *op;
{
	char	**ip, *cp;
	
	/* copy each string from our environment */
	for (ip = environ; cp = *ip++; )
		while (*op++ = *cp++)
			;
	/* add a final null */
	*op = '\0';
}

main(argc, argv, envp)
int argc;
char *argv[], *envp[];
{
	char	*ep;
#if ALTSYNTAX
	char	line[128];

	/* C-shell syntax */
	if (argc != 3)
		error("usage: setenv name value");
	if (strchr(argv[1], '=') != NULL)
		error("setenv: variable name must not contain '='.");
	strcat(strcat(strcpy(line, argv[1]), "="), argv[2]);
	if (putenv(line))
#else
	/* MS-DOS syntax */
	if (argc != 2)
		error("usage: setenv name=value");
	if (putenv(argv[1]))
#endif
		error("setenv: bad assignment.");
	if ((ep = findenv(envp)) == NULL)
		error("setenv: can't find environment.");
	makenv(ep);
	return 0;
}

error(s)
char *s;
{
	cputs(s);
	cputs("\r\n");
	exit(1);
}
-------- cut here --------
begin 644 setenv.exe
M35K:`0D`,P`@`($`___^```(&X%=`!P`'@````$`#@#\`$(````)````$`#\
M`,D!``"]`0``L`$``*4!``"2`0``A`$``&T!``!?`0``3@$``$`!```V`0``
M+`$```8!``#U````W@```,X```!U````5``<`)(`Y@!>`!P`/@$<`%H!'`!?
M`1P`A`$<`(L!'`"1`1P`ZP$<`!(`_``I`*8`%`#\`#4!J`#:`*@`M@"H`%T`
MJ`#/`AP`&`#\`!8`_`!&`,L`<0,<`(H#'`!(`-<`&0#7`#H%'`"^!1P`$`8<
M`+$&'`"=!QP`````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````!5B^RX!@":'P`<`%;$7@8FQ!\FB@>8B_#'1OH`
M`,=&_&``ZS+$7OHFB@>8.\9U),1>!B;_=P(F_S?_=OS_=OJ:6P(<`(/$"`O`
M=0B+1OJ+5OSK%/]&_(X&O@&+1OPF.08Z`7?`,\"97HOE7<M5B^RX"`":'P`<
M`(X&P`$FH4P!)HL63@&)1OB)5OK$7OB#1O@$)HL')HM7`HE&_(E6_@O"=!C$
M7OS_1OPFB@?$7@;_1@8FB`<*P'32Z^C$7@8FQ@<`B^5=RU6+[+B$`)H?`!P`
M@WX&`W0-N%``'E":G0$``(/$!+@]`%#$7@@F_W<&)O]W!)HP`AP`@\0&"\)T
M#;AI`!Y0FIT!``"#Q`3$7@@F_W<*)O]W"+B5`!Y0)O]W!B;_=P2-AGS_%E":
MD`(<`(/$"%)0FOL!'`"#Q`A24)K[`1P`@\0(C89\_Q90F@\`J`"#Q`0+P'0-
MN)<`'E":G0$``(/$!/]V#O]V#)H`````@\0$B4;\B5;^"\)U#;BO`!Y0FIT!
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
M"@#_____9@(`````````````X0``````````````````````````````````
M````````````````````````````````````````````````````````````
M````````X```````````````````````````````````````````````````
M````````````````````@8&!`0$`````````````````````````````````
M```[0U]&24Q%7TE.1D\``````````````````````"``````````````````
9`````````````````.$`X0#A`.$`X0#A````
`
end