home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d536 / increv.lha / IncRev / src.lzh / increv.c next >
C/C++ Source or Header  |  1991-08-23  |  8KB  |  303 lines

  1. /***************************************************************************
  2. * increv.c : automatic update of version and revision numbers           *
  3. *                                       *
  4. *      File rev.c must have the following format:               *
  5. *                                       *
  6. *      char ProgId[]="...";                                                *
  7. *      char Version[]="...";                                               *
  8. *      int Revision = x;                           *
  9. *      char UserId[]="...";                                                *
  10. *      char Date[]="...";                                                  *
  11. *                                       *
  12. *     where ... may be any character                    *
  13. *     and   x   *MUST* be a number                       *
  14. *                                       *
  15. *     each line *MUST NOT* contain more than 79 characters           *
  16. *                                       *
  17. ***************************************************************************/
  18.  
  19. /* --------------------- source code revisions, kept by RCS ------------- */
  20.  
  21. /* $Header: Hard0:C-Compiler/src/increv/rcs/increv.c,v 1.0 91/08/12 14:41:12 Mtwx Exp $ */
  22. /* $Log:    increv.c,v $
  23.  * Revision 1.0  91/08/12  14:41:12  Mtwx
  24.  * Initial revision
  25.  * 
  26.  * Revision 1.1  91/08/12  14:40:26  Mtwx
  27.  * Initial revision
  28.  *  */
  29.  
  30. /* ------------------------------- includes ----------------------------- */
  31.  
  32. #include <stdio.h>
  33. #include <string.h>
  34. #include <stdlib.h>
  35. #include <time.h>
  36. #include "increv.h"
  37.  
  38. char Mon[12][4]={ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep",
  39.      "Oct","Nov","Dec" };
  40. char IncrevV[80];
  41.  
  42. /* forward references */
  43. void readerror(), usage();
  44.  
  45. /* ----------------------- external references ------------------ */
  46. extern char ProgId[],Version[],Date[];
  47. extern int Revision;
  48.  
  49. main(argc,argv)
  50. int argc;
  51. char *argv[];
  52. {
  53.   FILE *datei,*datei2;
  54.   struct tm *newtime;
  55.   long ltime;
  56.   char dummy[80];
  57.   char ProgramId[80],VersionId[80], Revisionnr[80], UserId[80],
  58.        Datum[80];
  59.   char new_ProgId[80],new_Version[80],new_Revision[80],new_UserId[80],
  60.        new_Date[80];      /* contain updated strings */
  61.   char NewId[80];      /* contains user desired ProgId */
  62.   char NewVersion[80];      /* contains user desired Version no */
  63.   char *newuserid;      /* contains user desired UserId */
  64.   char Filename[FILENAME_LENGTH+1]; /* contains (optional) filename */
  65.   int i,rev,new_rev;
  66.   unsigned int Params=NULL;
  67.  
  68.   sprintf(IncrevV,"%s V%s/%d - %s   (C) 1991 Metalworx",ProgId,Version,
  69.       Revision,Date);
  70.   printf("\n%s\n",IncrevV);
  71.   if(argc>1)
  72.   {
  73.     if(argv[1][0]=='?')
  74.     {
  75.       usage();
  76.       exit(0);
  77.     }
  78.     for(i=1;i<argc;i++)
  79.     {
  80.       switch(argv[i][1])
  81.       {
  82.     case 'c':
  83.       Params|=CREATE_FILE;
  84.       puts("Create new rev file");
  85.       if(strlen(argv[i])>2)   /* optional filename ? */
  86.         strcpy(Filename,&argv[i][2]);
  87.       break;
  88.     case 'd':
  89.       Params|=DATE_UPD_ONLY;
  90.       puts("Date update only");
  91.       break;
  92.     case 'v':
  93.       Params|=NEW_VERSION;
  94.       strcpy(NewVersion,&argv[i][2]);
  95.       break;
  96.     case 'r':
  97.       Params|=NEW_REVISION;
  98.       sscanf(&argv[i][2],"%3d",&new_rev);
  99.       break;
  100.     case 'u':
  101.       Params|=NEW_USER;
  102.       newuserid=&argv[i][2];
  103.       break;
  104.     case 'i':
  105.       Params|=NEW_ID;
  106.       strcpy(NewId,&argv[i][2]);
  107.       break;
  108.     case '?':
  109.       usage();
  110.       exit(0);
  111.     default :
  112.       printf("Unknown option %s\n",argv[i]);
  113.       usage();
  114.       exit(1);
  115.       }
  116.     }
  117.   }
  118.   datei=fopen((char *)"rev.c","r");
  119.   if(datei)
  120.   {
  121.     fgets(ProgramId,79,datei);
  122.  
  123.     /* check & print Programm-ID */
  124.     i=strpos(ProgramId,"=");
  125.     if (i!=-1)
  126.       printf("Programm-ID                    : %s",&ProgramId[i+1]);
  127.     else readerror();
  128.  
  129.     fgets(VersionId,79,datei);
  130.  
  131.     /* check & print Version-No. */
  132.     i=strpos(VersionId,"=");
  133.     if (i!=-1)
  134.       printf("Version-No                     : %s",&VersionId[i+1]);
  135.     else readerror();
  136.  
  137.     fgets(Revisionnr,79,datei);
  138.  
  139.     fgets(UserId,79,datei);
  140.  
  141.     /* check & print UserID */
  142.     i=strpos(UserId,"=");
  143.     if (i!=-1)
  144.       printf("UserId                         : %s",&UserId[i+1]);
  145.     else readerror();
  146.  
  147.     fgets(Datum,79,datei);
  148.  
  149.     /* check & print Date */
  150.     i=strpos(Datum,"=");
  151.     if (i!=-1)
  152.       printf("last Update                    : %s",&Datum[i+1]);
  153.     else readerror();
  154.  
  155.     fclose(datei);
  156.     puts("----------------------------------------------------------");
  157.     if((Params & NEW_ID) && (!(Params & DATE_UPD_ONLY)))
  158.     {
  159.       i=strpos(ProgramId,"=");
  160.       strncpy(new_ProgId,ProgramId,i+1);
  161.       new_ProgId[i+1]='\0';
  162.       sprintf(dummy,"\"%s\";\n",NewId);
  163.       strcat(new_ProgId,dummy);
  164.       printf("new program-id                 : %s",dummy);
  165.     }
  166.     else
  167.       strcpy(new_ProgId,ProgramId);
  168.  
  169.     if((Params & NEW_VERSION) && (!(Params & DATE_UPD_ONLY)))
  170.     {
  171.       i=strpos(VersionId,"=");
  172.       strncpy(new_Version,VersionId,i+1);
  173.       new_Version[i+1]='\0';
  174.       sprintf(dummy,"\"%s\";\n",NewVersion);
  175.       strcat(new_Version,dummy);
  176.       printf("new Version-No                 : %s",dummy);
  177.     }
  178.     else
  179.       strcpy(new_Version,VersionId);
  180.  
  181.     /* get & update revision number */
  182.     i=strpos(Revisionnr,"=");
  183.     rev=atoi(&Revisionnr[i+1]);
  184.     if(Params & DATE_UPD_ONLY)    /* Don't update revision no. */
  185.       printf("keeping old revision-no.       :%3d\n",rev);
  186.     else
  187.     {
  188.       if(Params & NEW_REVISION)
  189.     rev=new_rev;
  190.       else
  191.       {
  192.     if(Params & NEW_VERSION)    /* set Revision no. back to 1 */
  193.       rev=0;
  194.     rev++;
  195.       }
  196.       printf("updating to new revision-no.   :%3d\n",rev);
  197.     }
  198.     strncpy(new_Revision,Revisionnr,i+1);
  199.     new_Revision[i+1]='\0';
  200.     sprintf(dummy,"%3d;",rev);
  201.     strcat(new_Revision,dummy);
  202.  
  203.     /* get & update system-date */
  204.     time(<ime);
  205.     i=strpos(Datum,"=");
  206.     strncpy(new_Date,Datum,i+1);
  207.     new_Date[i+1]='\0';
  208.     newtime=localtime(<ime);
  209.     sprintf(dummy,"\"%2d-%s-%2d\";\n",newtime->tm_mday,Mon[newtime->tm_mon],
  210.       newtime->tm_year);
  211.     strcat(new_Date,dummy);
  212.     printf("updating to new date           : %s",dummy);
  213.  
  214.     /* update UserId, if ENV-Variable exists! */
  215.     if(Params & DATE_UPD_ONLY)
  216.     {
  217.       puts("keeping old UserId!");
  218.       strcpy(new_UserId,UserId);
  219.     }
  220.     else
  221.     {
  222.       if(!(Params & NEW_USER)) /* get env-variable if not -u */
  223. #ifdef UNIX
  224.                 newuserid=getenv("USERNAME");
  225. #endif
  226. #ifdef AMIGA
  227.                 newuserid=getenv("USERNAME");
  228. #endif
  229. #ifdef MSDOS
  230.                 newuserid=getenv("USERNAME");
  231. #endif
  232.             if(newuserid!=NULL)
  233.       {
  234.     if(Params & NEW_USER)
  235.       printf("updating UserId (set by -u )   : %s\n",newuserid);
  236.     else
  237. #ifdef AMIGA
  238.       printf("updating UserId (set by SETENV): %s\n",newuserid);
  239. #endif
  240. #if MSDOS || UNIX
  241.       printf("updating UserId (set by SET)   : %s\n",newuserid);
  242. #endif
  243.     i=strpos(UserId,"=");
  244.                 strncpy(dummy,UserId,i+1);
  245.                 dummy[i+1]='\0';
  246.                 sprintf(new_UserId,"%s\"%s\";\n",dummy,newuserid);
  247.       }
  248.       else strcpy(new_UserId,UserId);
  249.     }
  250.     /* write file */
  251.     datei2=fopen((char *)"rev.c","w");
  252.     if(datei2)
  253.     {
  254.       fprintf(datei2,"%s",new_ProgId);
  255.       fprintf(datei2,"%s",new_Version);
  256.       fprintf(datei2,"%s\n",new_Revision);
  257.       fprintf(datei2,"%s",new_UserId);
  258.       fprintf(datei2,"%s",new_Date);
  259.       fclose(datei2);
  260.     }
  261.     else puts("Error while opening write file!");
  262.   }
  263.   else
  264.   {
  265.     puts("File rev.c not found!");
  266.     readerror();
  267.   }
  268. }
  269.  
  270. void readerror()
  271. {
  272.   puts("\nError reading input-file (rev.c)!");
  273.   puts("Programm terminated by error!");
  274.   exit(1);
  275. }
  276.  
  277. void usage()
  278. {
  279. #ifdef MSDOS
  280.     printf("%c[1;31mUsage: increv [[-]?] [-d] [-i<ID>] [-r<No.>] [-u<USER>] [-v<No.>]\n",
  281.                  27);
  282.     printf("%c[36mOptions:  -?       displays this text\n",27);
  283. #endif
  284. #if AMIGA || UNIX
  285.     puts("Usage: increv [[-]?] [-d] [-i<ID>] [-r<No.>] [-u<USER>] [-v<No.>]");
  286.   puts("Options:  -?       displays this text");
  287. #endif
  288. /*    puts("          -c[FILE] create new rev file. Filename will be FILE or");
  289.     puts("                   rev.c on default.");  for later use */
  290.   puts("          -d       date update only (all other options are ignored)");
  291.   puts("          -i<ID>   update ProgId with ID, can be any text");
  292.   puts("          -r<No.>  update revision no. with No.");
  293.   puts("                   No. must be an integer!");
  294.   puts("          -u<USER> update UserId with USER, can be any text");
  295.   puts("          -v<No.>  update version with No.");
  296. #ifdef MSDOS
  297.     printf("                   No. can be any text\n%c[0m",27);
  298. #endif
  299. #if AMIGA || UNIX
  300.     puts("                   No. can be any text");
  301. #endif
  302. }
  303.