home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / dorev03.lha / dorev.c < prev    next >
C/C++ Source or Header  |  1992-06-21  |  7KB  |  268 lines

  1. /** DoRev Header ** Do not edit! **
  2. *
  3. * Name             :  dorev.c
  4. * Copyright        :  © Programmatori Amiga Ticino
  5. * Creation date    :  19-Jun-92
  6. * Translator       :  SAS-C 5.10
  7. * Compiler opts.   :  -Li -v -O
  8. *
  9. * Date       Rev  Author               Comment
  10. * ---------  ---  -------------------  ----------------------------------------
  11. * 21-Jun-92    2  David Schweikert     Added Env-variables and bugfix.
  12. * 20-Jun-92    1  David Schweikert     Fixed big bug.
  13. * 19-Jun-92    0  David Schweikert     First version !
  14. *
  15. *** DoRev End **/
  16.  
  17. /* Priority :
  18.  * 1) Command line.
  19.  * 2) Env variables.
  20.  * 3) Source file
  21.  */
  22.  
  23. #include <dos/dos.h>
  24. #include <dos/datetime.h>
  25. #include <string.h>
  26.  
  27. #define TEMP "t:DoRev.temp"
  28. #define TEMPLATE "FILE/A,COP=COPYRIGHT/K,CON=CONTENTS/K,TRA=TRANSLATOR/K,COMPILER_OPTS=OPTS/K,AUT=AUTHOR/K,COM=COMMENT/K,NOENV/S"
  29. #define BUFSIZE 1024
  30.  
  31. const char *AISG_VERSION = { "$VER: DOREV by David Schweikert 37.03 (20.6.92)" };
  32.  
  33. struct DosBase *DosBase;
  34.  
  35. BPTR OutFileHandle,InFileHandle;
  36.  
  37. long Args[8];
  38. char Line[81];
  39.  
  40. struct { 
  41.     char Name[58];
  42.     char Copyright[58];
  43.     char CreationDate[10];
  44.     char Contents[58];
  45.     char Translator[58];
  46.     char CompilerOpts[58];
  47. } DoRevGeneric;
  48.  
  49. struct {
  50.     char Date[10];
  51.     char Rev[4];
  52.     char Author[20];
  53.     char Comment[41];
  54. } DoRevHistory = {
  55.     "",
  56.     "  0",
  57.     "- Unknown -",
  58.     "None."
  59. };
  60.  
  61. void ReadFile(void);
  62. void ReadCli(void);
  63. void WriteOld(void);
  64. void WriteNew(void);
  65. void WriteDoRev(void);
  66. void ReadEnvs(void);
  67. BOOL StrCmp(char *,char *);
  68. void CloseAll(void);
  69.  
  70. BOOL DoRevHeader=FALSE;
  71. struct RDArgs           *RArgs = 0L;
  72.  
  73. void _tinymain(void)
  74. {
  75.     struct DateTime datetime;
  76.     char *filepart;
  77.     char buffer[BUFSIZE];
  78.     LONG tocopy;
  79.     
  80.     if(!(DosBase=(struct DosBase *)OpenLibrary("dos.library",37L))) exit(10);
  81.     
  82.     if(!(RArgs=(struct RDArgs *)ReadArgs(TEMPLATE,Args,0)))
  83.     {
  84.         PutStr("Bad args.\n");
  85.         CloseAll();
  86.         exit(5);
  87.     }
  88.  
  89.     filepart=(char *)FilePart((char *)Args[0]);
  90.     strcpy(DoRevGeneric.Name,filepart);
  91.  
  92.     DateStamp(&datetime.dat_Stamp);
  93.     datetime.dat_Format  = FORMAT_DOS;
  94.     datetime.dat_StrDate = DoRevHistory.Date;
  95.     datetime.dat_Flags   = 0;
  96.     datetime.dat_StrDay  = 0;
  97.     datetime.dat_StrTime = 0;
  98.     DateToStr(&datetime);
  99.     
  100.     if(!(OutFileHandle=Open(TEMP,MODE_NEWFILE)))
  101.     {
  102.         PutStr("Can't create temporary file.\n");
  103.         CloseAll();
  104.         exit(5);
  105.     }
  106.  
  107.     if((InFileHandle=Open(Args[0],MODE_OLDFILE)))    ReadFile();
  108.     
  109.     if(!DoRevHeader)    strcpy(DoRevGeneric.CreationDate,DoRevHistory.Date);
  110.     
  111.     if(Args[7]==0) ReadEnvs();
  112.     ReadCli();
  113.  
  114.     WriteDoRev();
  115.  
  116.     if(!DoRevHeader)    WriteNew();
  117.     if(InFileHandle)    WriteOld();
  118.  
  119.     if(InFileHandle) Close(InFileHandle);
  120.  
  121.     if(!(InFileHandle=Open(Args[0],MODE_NEWFILE)))
  122.     {
  123.         PutStr("Can't rewrite source file.\n");
  124.         CloseAll();
  125.         exit(5);
  126.     }
  127.  
  128.     Seek(OutFileHandle,0L,OFFSET_BEGINNING);
  129.     do
  130.     {
  131.         tocopy=Read(OutFileHandle,buffer,BUFSIZE);
  132.         Write(InFileHandle,buffer,tocopy);
  133.     } while(tocopy==BUFSIZE);
  134.     
  135.     Close(OutFileHandle);
  136.     OutFileHandle=0L;
  137.     DeleteFile(TEMP);
  138.     
  139.     CloseAll();
  140. }
  141.  
  142. void ReadCli(void)
  143. {
  144.     if(strlen((char *)Args[1])!=0) strcpy(DoRevGeneric.Copyright,   (char *)Args[1]);
  145.     if(strlen((char *)Args[2])!=0) strcpy(DoRevGeneric.Contents,    (char *)Args[2]);
  146.     if(strlen((char *)Args[3])!=0) strcpy(DoRevGeneric.Translator,  (char *)Args[3]);
  147.     if(strlen((char *)Args[4])!=0) strcpy(DoRevGeneric.CompilerOpts,(char *)Args[4]);
  148.     if(strlen((char *)Args[5])!=0) strcpy(DoRevHistory.Author,      (char *)Args[5]);
  149.     if(strlen((char *)Args[6])!=0) strcpy(DoRevHistory.Comment,     (char *)Args[6]);
  150. }
  151.  
  152. void ReadFile(void)
  153. {
  154.     int FillN,ReadN;
  155.     int Rev=0;
  156.     
  157.     FGets(InFileHandle,Line,80);
  158.     if(StrCmp(Line,"/** DoRev Header"))
  159.     {
  160.         DoRevHeader=TRUE;
  161.         FGets(InFileHandle,Line,80);
  162.         do
  163.         {
  164.             FGets(InFileHandle,Line,80);
  165.             
  166.             if(StrCmp(Line,"* Copyright        :"))
  167.             {
  168.                 for(FillN=0,ReadN=22;Line[ReadN]!='\n';FillN++,ReadN++)
  169.                     DoRevGeneric.Copyright[FillN]=Line[ReadN];
  170.             }
  171.             else if(StrCmp(Line,"* Creation date    :"))
  172.             {
  173.                 for(FillN=0,ReadN=22;Line[ReadN]!='\n';FillN++,ReadN++)
  174.                     DoRevGeneric.CreationDate[FillN]=Line[ReadN];
  175.             }
  176.             else if(StrCmp(Line,"* Contents         :"))
  177.             {
  178.                 for(FillN=0,ReadN=22;Line[ReadN]!='\n';FillN++,ReadN++)
  179.                     DoRevGeneric.Contents[FillN]=Line[ReadN];
  180.             }
  181.             else if(StrCmp(Line,"* Translator       :"))
  182.             {
  183.                 for(FillN=0,ReadN=22;Line[ReadN]!='\n';FillN++,ReadN++)
  184.                     DoRevGeneric.Translator[FillN]=Line[ReadN];
  185.             }
  186.             else if(StrCmp(Line,"* Compiler opts.   :"))
  187.             {
  188.                 for(FillN=0,ReadN=22;Line[ReadN]!='\n';FillN++,ReadN++)
  189.                     DoRevGeneric.CompilerOpts[FillN]=Line[ReadN];
  190.             }
  191.         } while(Line[1]==' ' && isalpha(Line[2]));
  192.         
  193.         FGets(InFileHandle,Line,80); // "Date...Rev...Author...Comment"
  194.         FGets(InFileHandle,Line,80); // "----   ---   ------   -------"
  195.         FGets(InFileHandle,Line,80);
  196.         
  197.         for(ReadN=13;ReadN<16;ReadN++)
  198.         {
  199.             if(isdigit(Line[ReadN]))    Rev=Rev*10+Line[ReadN]-48;
  200.         }
  201.         sprintf(DoRevHistory.Rev,"%3ld",Rev+1);
  202.         
  203.         for(FillN=0,ReadN=18;FillN<19 ;FillN++,ReadN++)
  204.             DoRevHistory.Author[FillN]=Line[ReadN];
  205.         Seek(InFileHandle,-strlen(Line),OFFSET_CURRENT);
  206.     }
  207.     else    Seek(InFileHandle,0L,OFFSET_BEGINNING);
  208. }
  209.  
  210. void WriteDoRev(void)
  211. {
  212.     FPuts(OutFileHandle,"/** DoRev Header ** Do not edit! **\n");
  213.     FPuts(OutFileHandle,"*\n");
  214.     FPrintf(OutFileHandle,"* Name             :  %s\n",DoRevGeneric.Name);
  215.     if(strlen(DoRevGeneric.Copyright)!=0)
  216.         FPrintf(OutFileHandle,"* Copyright        :  %s\n",DoRevGeneric.Copyright);
  217.     FPrintf(OutFileHandle,"* Creation date    :  %s\n",DoRevGeneric.CreationDate);
  218.     if(strlen(DoRevGeneric.Contents)!=0)
  219.     FPrintf(OutFileHandle,"* Contents         :  %s\n",DoRevGeneric.Contents);
  220.     if(strlen(DoRevGeneric.Translator)!=0)
  221.     FPrintf(OutFileHandle,"* Translator       :  %s\n",DoRevGeneric.Translator);
  222.     if(strlen(DoRevGeneric.CompilerOpts)!=0)
  223.     FPrintf(OutFileHandle,"* Compiler opts.   :  %s\n",DoRevGeneric.CompilerOpts);
  224.     FPuts(OutFileHandle,"*\n");
  225.     FPuts(OutFileHandle,"* Date       Rev  Author               Comment\n");
  226.     FPuts(OutFileHandle,"* ---------  ---  -------------------  ----------------------------------------\n");
  227.     FPrintf(OutFileHandle,"* %9s  %3s  %-19s  %-.40s\n",DoRevHistory.Date,DoRevHistory.Rev,
  228.         DoRevHistory.Author,DoRevHistory.Comment);
  229. }
  230.  
  231. void WriteOld(void)
  232. {
  233.     char c;
  234.     
  235.     do
  236.     {
  237.         c=FGetC(InFileHandle);
  238.         if(c!=-1)    FPutC(OutFileHandle,c);
  239.     } while(c!=-1);
  240. }
  241.  
  242. void WriteNew(void)
  243. {
  244.     FPuts(OutFileHandle,"*\n");
  245.     FPuts(OutFileHandle,"*** DoRev End **/\n\n");
  246. }
  247.  
  248. BOOL StrCmp(char *String1,char *String2)
  249. {
  250.     if(strncmp(String1,String2,strlen(String2))==0) return(TRUE);
  251.     return(FALSE);
  252. }
  253.  
  254. void ReadEnvs(void)    // New to revision 2.
  255. {
  256.     GetVar("Copyright" ,  DoRevGeneric.Copyright,58,NULL);
  257.     GetVar("Translator",  DoRevGeneric.Translator,58,NULL);
  258.     GetVar("CompilerOpts",DoRevGeneric.CompilerOpts,58,NULL);
  259.     GetVar("Author",      DoRevHistory.Author,20,NULL);
  260. }
  261.  
  262. void CloseAll(void)
  263. {
  264.     if(InFileHandle) Close(InFileHandle);
  265.     if(OutFileHandle) Close(OutFileHandle);
  266.     if(RArgs) FreeArgs(RArgs);
  267.     CloseLibrary(DosBase);
  268. }