home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / main / t.c < prev    next >
Text File  |  1998-06-08  |  2KB  |  90 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. /* Use Turbo C */
  14. #include <stdlib.h>
  15. #include <dos.h>
  16. #include <ctype.h>
  17.  
  18. // Returns: 0 Ok, -1=Out of space
  19. int dos_change_master_env( char * variable, char * value, int append )
  20. {
  21.     unsigned psp, far * tmp;
  22.     char far * env, far * e;
  23.     char * v, *p;
  24.     int size;
  25.     char var_name[1024];    
  26.     char * var_value;
  27.     
  28.     psp = _psp;
  29.     while (psp!=*(tmp=MK_FP(psp,22))) 
  30.         psp = *tmp;
  31.     env = MK_FP( *(unsigned far *)MK_FP(psp,44),0);
  32.     size = 16* *(int far *)MK_FP( FP_SEG(env)-1,3);
  33.  
  34.     var_value = value;
  35.     strcpy( var_name, variable );
  36.     strcat( var_name, "=" );
  37.  
  38.     p = var_name;
  39.     while( *p )    {
  40.         *p = toupper( *p );
  41.         p++;
  42.     }
  43.  
  44.     while (*env )    {
  45.         e = env;
  46.         v = var_name;
  47.         while((*e++ == *v++ ) && (*v))
  48.             ;
  49.         if ( !*v )    {
  50.             if ( append )
  51.                 while( (*v++ = *e++) )
  52.                      ;
  53.             else
  54.                 while( *e++ )
  55.                      ;
  56.             if ( *e ) 
  57.                 while((--size) && ((*env++ = *e++ )) || (*e) )
  58.                     ;
  59.             *env = '\0';
  60.         } else 
  61.             while ((--size) && (*env++))
  62.                 ;
  63.     }
  64.  
  65.     p = var_value;        
  66.     if ( *p    != '\0' )    {
  67.         v = var_name;    
  68.         while ((*env = *v++) )     {
  69.             ++env ;
  70.              --size;
  71.         }
  72.         while((--size) && ((*env++ = *p++ ) != '\0' ))
  73.             ;
  74.         *env = '\0';
  75.         *--env = '\0';
  76.         if ( size <= 0 )    {
  77.             return -1;
  78.         }        
  79.     }
  80.     return 0;
  81. }
  82.  
  83. void main()
  84. {
  85.     if (dos_change_master_env( "john", "a parallax employee", 0  ))     
  86.         printf( "ERROR: Out of environment space!\n" );
  87. }
  88.  
  89. 
  90.