[comp.sys.ibm.pc] Putting an '=' in an environment variable

rdj@ttrde.UUCP (Robert D. Jackson) (05/22/87)

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.  On Unix, it is
set as such:

EXINIT="set ai sw=4 terse"
export EXINIT

On the PC, I am unable to get an '=' in an environment variable,
The best that I have been able to do so far is settle for:

set EXINIT=se ai terse

I would like to be able to do something like

set EXINIT="set ai sw=4 terse"
or
set EXINIT=set ai sw\=4 terse
...

but I have had no luck.  If anyone knows how to achieve this feat, please
post it, or respond via email.

BTW

set EXINIT=set ai sw 4 terse

doesn't work either.

rdj@ttrde.UUCP (Robert D. Jackson) (05/22/87)

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.  On Unix, it is
set as such:

EXINIT="set ai sw=4 terse"
export EXINIT

On the PC, I am unable to get an '=' in an environment variable,
The best that I have been able to do so far is settle for:

set EXINIT=se ai terse

I would like to be able to do something like

set EXINIT="set ai sw=4 terse"
or
set EXINIT=set ai sw\=4 terse
...

but I have had no luck.  If anyone knows how to achieve this feat, please
post it, or respond via email.

BTW

set EXINIT=set ai sw 4 terse

doesn't work either.

-- 
---------------------------------------------------------------------------
Bob Jackson
ihnp4!ttrdc!ttrde!rdj
---------------------------------------------------------------------------

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>

boykin@custom.UUCP (05/26/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.  On Unix, it is
> set as such:
> 
> EXINIT="set ai sw=4 terse"
> export EXINIT
> 
> On the PC, I am unable to get an '=' in an environment variable,
...
> ---------------------------------------------------------------------------
> Bob Jackson
> ihnp4!ttrdc!ttrde!rdj
> ---------------------------------------------------------------------------

Unfortunately, DOS does not permit environment variables to contain
an equal sign (or a |, and probably others).  The result is that
while we support the EXINIT environment variable, as the manual says,
we recommend the use of the VI.INI (pronounced .exrc under UNIX)
initialization file.  The advantage of using EXINIT under UNIX
is speed, you don't have to do the disk I/O to read in the file.
Emperically, it doesn't seem to be any slower using VI.INI instead
of EXINIT.

Joe Boykin
Custom Software Systems
...necntc!custom!boykin

tel@cbstr1.att.com (T.E.Lester) (05/27/87)

In article <209@ttrde.UUCP> rdj@ttrde.UUCP () 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.  ........
>.....  If anyone knows how to achieve this feat, please
>post it, or respond via email.
>
	If you are using Custom Software Systems PC/VI,  it
	will execute a file called vi.ini to get around all of these
	problems. To use this file EXINIT must NOT be set and the 
	file must reside in your HOME directory or root of the current
	drive. A second VI.INI file may reside in your current working 
	directory for additional commands. The manual states these are
	useful for different kinds of file editing ( text vs. program).
	This is equivelant to the UNIX vi file .exrc
	Try it and good luck.

		Tom Lester cb3D277 x3259

tj@mks.UUCP (05/27/87)

In article <654@custom.UUCP>, boykin@custom.UUCP (Joseph Boykin) writes:
< 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.  On Unix, it is
< > set as such:
< > 
< > EXINIT="set ai sw=4 terse"
< > export EXINIT
< > 
< > On the PC, I am unable to get an '=' in an environment variable,
< 
< Unfortunately, DOS does not permit environment variables to contain
< an equal sign (or a |, and probably others).  The result is that ...

Ahem. DOS has nothing against these characters in environment variables.
It is only command.com that is brain-damaged. Using the shell in the
MKS Toolkit, one can type Mr. Jackson's example verbatim, with the
expected effect.

In fact i have a profile line which says
	export EXINIT="`cat $HOME/ex.rc`"

What is more, the Toolkit also contains a better vi...
-- 
     ll  // // ,~/~~\'   T. J. Thompson {decvax,ihnp4,seismo}!watmath!mks!tj
    /ll/// //l' `\\\     Mortice Kern Systems Inc.
   / l //_// ll\___/     43 Bridgeport Rd. E., Waterloo, ON, Can. N2J 2J4
O_/                      (519)884-2251

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