home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1993 May / SIMTEL_0593.ISO / msdos / archivrs / sqz1083e.exe / SETDATE.SQZ / SETDATE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-10  |  2.4 KB  |  110 lines

  1. /*  Program:    SetDATE.c
  2.  *  Version:    1.00.0
  3.  *  Date:    1992/07/14
  4.  *  Copyright:    Jonas I Hammarberg
  5.  * ----------------------------------------------------------------------------
  6.  *  Usage:    Sets enviroment variable DATE to YYMMDD
  7.  */
  8.  
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <dos.h>
  12.  
  13. #define local static
  14.  
  15. #ifndef FP_SEG
  16. #define FP_SEG(f) (*((unsigned *)&(f) + 1))
  17. #endif
  18.  
  19. #ifndef FP_OFF
  20. #define FP_OFF(f) (*((unsigned *)&(f)))
  21. #endif
  22.  
  23. #ifndef MK_FP
  24. #define MK_FP(s,o) ((void far *)(((unsigned long)(s) << 16) | (unsigned)(o)))
  25. #endif
  26.  
  27. extern char far   *nxtevar(char far * vptr);
  28. extern char far   *mstenvp(void);
  29. extern int      envsiz(char far *envptr);
  30.  
  31. local char far      *menv;
  32. local char far      *rest;
  33. local char far      *lstbyt;
  34. local char      vname[128], *txtptr;
  35. local int      nmlen, free_env;
  36.  
  37. local void  findvar(void){
  38. int        i;
  39.  
  40.     nmlen = strlen("DATE");
  41.     txtptr = NULL;
  42.     while(*menv){
  43.     rest = nxtevar(menv);
  44.     i = 0;
  45.     while((vname[i] = menv[i]) != '\0') i++;
  46.     if(vname[nmlen] == '='){ 
  47.         vname[nmlen] = '\0';
  48.         if(strcmp(vname, "DATE") == 0){
  49.         txtptr = &vname[nmlen+1];
  50.         vname[nmlen] = '=';
  51.         return;
  52.         }
  53.     }
  54.     menv = rest;
  55.     }
  56. }
  57.  
  58. local void  putenvbak(void){
  59. char        *locptr;
  60. int        save_size, i;
  61.  
  62.     save_size = FP_OFF(lstbyt) - FP_OFF(rest) + 1;
  63.     locptr = (char *)malloc(save_size);
  64.  
  65.     for(i = 0; i < save_size; i++)
  66.     locptr[i] = rest[i];
  67.     for(i = 0; vname[i]; i++)
  68.     *menv++ = vname[i];
  69.     if(vname[0])
  70.     *menv++ = '\0';
  71.     for(i = 0; i < save_size; i++)
  72.     *menv++ = locptr[i];
  73.     free(locptr);
  74.  
  75. }
  76.  
  77. void        main(int argc, char **argv){
  78. char        sz[7];
  79. struct date daAct;
  80.  
  81.     GetDate(&daAct);
  82.     daAct.da_year %= 100;
  83.     sz[0] = (char)(daAct.da_year / 10) + '0';
  84.     sz[1] = (char)(daAct.da_year % 10) + '0';
  85.     sz[2] = (char)(daAct.da_mon / 10) + '0';
  86.     sz[3] = (char)(daAct.da_mon % 10) + '0';
  87.     sz[4] = (char)(daAct.da_day / 10) + '0';
  88.     sz[5] = (char)(daAct.da_day % 10) + '0';
  89.     sz[6] = '\0';
  90.  
  91.     lstbyt = menv = mstenvp();
  92.     free_env = envsiz(menv) << 4;
  93.     findvar();
  94.     while(*lstbyt) lstbyt = nxtevar(lstbyt);
  95.     if(lstbyt[1] == 1 && lstbyt[2] == 0){
  96.     lstbyt += 3;
  97.     while(*lstbyt) lstbyt++;
  98.     }
  99.     lstbyt++;
  100.     free_env -= FP_OFF(lstbyt);
  101.     if(txtptr == NULL){
  102.     free_env -= nmlen + 1;
  103.     if(free_env < 5) return;
  104.     strcpy(vname, "DATE=");
  105.     txtptr = vname + nmlen + 1;
  106.     }
  107.     strcpy(txtptr, sz);
  108.     putenvbak();
  109. }
  110.