home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / MSC / GETENV.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-07  |  1.4 KB  |  76 lines

  1. #include <stddef.h>
  2.  
  3. #define MAXENV 20
  4.  
  5. int _child = 0;
  6. char *_envtab[MAXENV] = { "COMSPEC=C:\\COMMAND.COM", 0L };
  7.             /* default initial environment */
  8. char *(*environ[]) = { _envtab };
  9. int _env_inited = 0;
  10.  
  11. typedef struct
  12.   {
  13.     unsigned int  int_20_hex;
  14.     unsigned int  top_of_memory;
  15.     char          reserved1;
  16.     char          dos_call[5];
  17.     int           *term_address;
  18.     int           *ctrl_brk_address;
  19.     int           *crit_error_address;
  20.     char          reserved2[22];
  21.     unsigned int  environment;
  22.   } program_segment_prefix;
  23.  
  24. extern program_segment_prefix *program_prefix;
  25.  
  26. void _initenv(void)
  27. {
  28.   char *envp;
  29.   char **et;
  30.  
  31.   if ( _env_inited )
  32.     return;
  33.   _env_inited = 1;
  34.  
  35.   envp = (char *)(((long int)program_prefix->environment) << 16);
  36.   et = _envtab;
  37.  
  38.   while ( *envp != 0 )
  39.   {
  40.     if ( et < &_envtab[MAXENV - 1] )
  41.       *et++ = envp;
  42.     else
  43.     {
  44.       /* printf("Too many environment variables\n"); */
  45.       break;
  46.     }
  47.     while ( *envp++ != 0 );
  48.   }
  49.   *et = NULL;
  50. }
  51.  
  52. char *getenv(varname)
  53.   char *varname;
  54. {
  55.   char *envp, *v;
  56.   char **et;
  57.  
  58.   if ( !_env_inited )
  59.     _initenv();
  60.  
  61.   et = _envtab;
  62.   while ( *et != NULL )
  63.   {
  64.     envp = *et++;
  65.     v = varname;
  66.     while ( (*envp != 0) && (*v == *envp) )
  67.       {
  68.     ++v;
  69.     ++envp;
  70.       }
  71.     if ( (*envp == '=') && (*v == 0) )
  72.       return envp + 1;
  73.   }
  74.   return NULL;
  75. }
  76.