home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 June
/
SIMTEL_0692.cdr
/
msdos
/
sysutl
/
envserch.c
< prev
next >
Wrap
C/C++ Source or Header
|
1985-08-12
|
2KB
|
73 lines
/* envsearch - search environment for given string
usage...
char buf[25];
envsearch("ALPHA",buf); puts value of the environment
variable ALPHA into buf
functions called...
_lmove(#bytes,
source_offset,source_segment,
target_offset,target_segment) moves bytes
_showds() returns current value of ds register
_showcs() returns current value of cs register
notes...
Compile with MAIN #defined to generate a standalone program
which searches the environment for the value of the first argument
(or PATH, by default). Limitations...
environment size: 64K
target variable name: 23
environment variable name: 98
target value: 98-sizeof(target)
author...
James R. Van Zandt (jrv @ mitre-bedford)
*/
envsearch(target,value) char *target,*value;
{ char buf[100],*s,t[25],*env;
int nt, offset;
s=t;
while(*target) *s++=toupper(*target++);
*s++= '='; *s=0;
nt = strlen(t);
offset=0;
/* DeSmet C sets up cs register to point 100H past the Program Segment
Prefix. The word at offset 44 in the PSP points to the segment with
the environment */
_lmove(2,44,_showcs()-0x10,&env,_showds()); /* get env. pointer */
while(1)
{_lmove(100,offset,env,buf,_showds()); /* get (part of) env. */
s=buf;
if(*s)
{/* printf("examining entry: %s \n",s); getchar(); */
if (strncmp(t,s,nt)==0) return (strcpy(value,s+nt));
}
else
{*value=0; /* no value found */
return;
}
offset+=strlen(buf)+1;
}
}
#ifdef MAIN
char val[25],target[]="path";
main(argc,argv) int argc; char **argv;
{ char *t;
if(argc>1) t=argv[1]; else t=target;
printf("searching environment for variable \"%s\" \n",t);
envsearch(t,val);
printf("the value is \"%s\" \n",val);
}
#endif