#ifdef COMMENT
	Diese Funktion erlaubt den Zugriff auf Environmentvariablen aus allen
	Programmen heraus. Unter Master existieren zwei Uebergabemechanismen:
		1. Im Unix-Standardformat:

		als Blockdiagramm:

	+---------+-+-----+--+---------+-+-----+--+     +-----+--+--+
	|Variable1|=|Wert1|\0|Variable2|=|Wert2|\0| ... |Wertn|\0|\0|
	+---------+-+-----+--+---------+-+-----+--+     +-----+--+--+

		oder in C-Schreibweise:

		env = "var1=val1\0var2=val2\0 ... valn\0\0";

		2. Im GEM-Format:

		als Blockdiagramm:

	+---------+-+--+-----+--+---------+-+--+-----+--+     +-----+--+--+
	|Variable1|=|\0|Wert1|\0|Variable2|=|\0|Wert2|\0| ... |Wertn|\0|\0|
	+---------+-+--+-----+--+---------+-+--+-----+--+     +-----+--+--+

		oder in C-Schreibweise:

		env = "var1=\0val1\0var2=\0val2\0 ... valn\0\0";
#endif COMMENT

#ifdef GEM_ENV
# define equal(s1,s2,l)	!strcmp(s1,s2)
#else
# define equal(s1,s2,l)	!strncmp(s1,s2,l)
#endif GEM_ENV

#define	MASTER_MAGIC	0x4D415354L

#include <osbind.h>

extern struct bp {
        long    ptr[11];
        char    **p_env;
        char    filler[0x50];
        char    cmdlin[0x80];
} *_base;					/* Name gilt in MMCC	*/

char *getenv(str)
char *str;
{
	register char	*tosenv, *teststr;
	register int	len;
	long	ssp;
	long	**_shell_p = (long **) 0x4f6L;
	long	*ptr;
	char	*(*master)();

	ssp = Super(0L);
		ptr = (*_shell_p);
	Super(ssp);
	if(*(ptr-2) == MASTER_MAGIC) {
		master = (char *(*)) ++ptr;
		return((*master)(1L,str));
	}
	tosenv = *(_base->p_env);		/* Environment-Zeiger	*/
						/* aus der Basepage	*/

	len = strlen(str) + 1;			/* sichere den String	*/
	teststr = (char *) malloc(len+1);
	strcpy(teststr,str);			/* Variable in teststr	*/
	strcat(teststr,"=");			/* TOS braucht '='	*/

	while(*tosenv) {
		if(equal(*tosenv,teststr,len)) {/* schon gefunden ?	*/
			register int	lenv;
			tosenv += len;		/* ueberspringe Namen	*/
#ifdef GEM_ENV
			tosenv++;		/* und das 0-Byte	*/
#endif GEM_ENV
			lenv = strlen(*tosenv) + 1;
			free(teststr);		/* String freigeben	*/

			teststr = (char *) malloc(lenv);
			strcpy(teststr,tosenv);	/* Wert in teststr	*/
			return(teststr);	/* und zurueckgeben	*/
		}
		tosenv += strlen(*tosenv)+1;	/* ueberspringe Eintrag	*/
	}
	return((char *)0);			/* nicht gefunden	*/
}
