home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 21 / CD_ASCQ_21_040595.iso / dos / prg / c / freedos3 / source / com020 / environ.h < prev    next >
C/C++ Source or Header  |  1995-01-15  |  2KB  |  110 lines

  1. /* ENVIRON.H
  2.  * environment handling
  3.  * Tim Norman
  4.  * 1-14-95
  5. */
  6.  
  7. /* delete the variable at the position var, which is pointing into */
  8. /* environment */
  9. void delvarpos (char *var)
  10. {
  11.   int count, gap, index;
  12.   char *place;
  13.  
  14.   if (!var)
  15.      return;
  16.  
  17.   for (count = 0; count < num_environment_variables; count++)
  18.      if (env_vars[count] == var)
  19.      {
  20.     gap = strlen (env_vars[count]) + 1;
  21.  
  22.     for (place = env_vars[count];
  23.          place != env_vars[num_environment_variables] - gap;
  24.          place++)
  25.       *place = *(place + gap);
  26.  
  27.     for (index = count; index != num_environment_variables; index++)
  28.       env_vars[index] = env_vars[index + 1] - gap;
  29.  
  30.     num_environment_variables--;
  31.  
  32.         break;
  33.      }
  34. }
  35.  
  36. int delvar (char *var)
  37. {
  38.   char *findenv_pos (char *);
  39.  
  40.   delvarpos (findenv_pos (var));
  41.  
  42.   return 0;
  43. }
  44.  
  45. /* returns pointer to the WHOLE environment varible asked for */
  46. char *findenv_pos (char *name)
  47. {
  48.   int place = 0, count;
  49.  
  50.   for (count = 0; count < num_environment_variables; count++)
  51.     if (strncmp (name, env_vars[count], strlen (name)) == 0 &&
  52.     env_vars[count][strlen (name)] == '=')
  53.       return env_vars[count];
  54.  
  55.   return NULL;
  56. }
  57.  
  58. /* returns pointer to only the data part of an environment variable */
  59. char *findenv (char *name)
  60. {
  61.   int place = 0, count;
  62.  
  63.   for (count = 0; count < num_environment_variables; count++)
  64.     if (strncmp (name, env_vars[count], strlen (name)) == 0 &&
  65.     env_vars[count][strlen (name)] == '=')
  66.       return env_vars[count] + strlen (name) + 1;
  67.  
  68.   return NULL;
  69. }
  70.  
  71. int addenv (char *var)
  72. {
  73.   char *place, *varname;
  74.  
  75.   if (!(place = strchr (var, '=')))
  76.     return 1;
  77.  
  78.   if (*(place + 1) == 0)
  79.     {
  80.       *(place) = 0;
  81.       return delvar (var);
  82.     }
  83.  
  84.   /* check if the variable already exists and delete it if it does */
  85.   *(place) = 0;
  86.   if ((varname = findenv_pos (var)) != NULL)
  87.      delvarpos (varname);
  88.   *(place) = '=';
  89.  
  90.   /* add variable to the end of the list */
  91.   if ((environment + ENV_SIZE) - env_vars[num_environment_variables]
  92.       < strlen (var) + 1)
  93.     return 2;
  94.  
  95.   strcpy (env_vars[num_environment_variables], var);
  96.   num_environment_variables++;
  97.   env_vars[num_environment_variables] = env_vars[num_environment_variables - 1] +
  98.                    strlen (var) + 1;
  99.  
  100.   return 0;
  101. }
  102.  
  103. void show_environment ()
  104. {
  105.    unsigned char count;
  106.  
  107.    for (count = 0; count < num_environment_variables; count++)
  108.       puts (env_vars[count]);
  109. }
  110.