home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
utility
/
misc
/
master
/
source
/
getenv.c
next >
Wrap
C/C++ Source or Header
|
1988-12-04
|
2KB
|
89 lines
#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 */
}