home *** CD-ROM | disk | FTP | other *** search
- /* 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
-