/*
  (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
  See the copyright notice in the ACK home directory, in the file "Copyright".
*/

/*
  Module:	Access to program arguments and environment
  Author:	Ceriel J.H. Jacobs
  Version:	$Header$
*/

extern char **argv, **environ;
extern int argc;
unsigned int _Arguments__Argc;

static char *
findname(s1, s2)
register char *s1, *s2;
{

	while (*s1 == *s2++) s1++;
	if (*s1 == '\0' && *(s2-1) == '=') return s2;
	return 0;
}

static unsigned int
scopy(src, dst, max)
	register char *src, *dst;
	unsigned int max;
{
	register unsigned int i = 0;

	while (*src && i <= max) {
		i++;
		*dst++ = *src++;
	}
	if (i <= max) {
		*dst = '\0';
		return i+1;
	}
	while (*src++) i++;
	return i + 1;
}

_Arguments_()
{
	_Arguments__Argc = argc;
}

unsigned
_Arguments__Argv(n, argument, l, u, s)
	unsigned int u;
	char *argument;
{

	if (n >= argc) return 0;
	return scopy(argv[n], argument, u);
}

unsigned
_Arguments__GetEnv(name, nn, nu, ns, value, l, u, s)
	char *name, *value;
	unsigned int nu, u;
{
	register char **p = environ;
	register char *v = 0;

	while (*p && !(v = findname(name, *p++))) {
		/* nothing */
	}
	if (!v) return 0;
	return scopy(v, value, u);
}