/*--------------------------------------------------------------------------
 *
 *  
 *  UpRev    --   SOURCE_DICE_C  -- 
 *  ~~~~~
 *
 *  Auteurs : S.M. & X.L
 *  ~~~~~~~                         
 *
 *  Distribution :
 *  ~~~~~~~~~~~~
 *  »»» Ce programme est librement copiable pour un particulier.
 *
 *  »»» Les associations du domaine public ou sociétés peuvent le 
 *      distribuer à condition de me reverser 5FF par disquette.
 *
 *  »»» Cette formule dite du "ShareWare compensé" permet d'obliger 
 *      l'utilisateur à payer d'office un petit quelque chose à l'auteur ...
 *      
 *-------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <UpRev.h>

/****************- version défine dans "UpRev.h" -*************************/

static char *UPREVSTAG = VERSTAG;

/*-------------------------------------------------------------------------*/
#define WR(str)  Write(Output(),str,strlen(str))
/*-------------------------------------------------------------------------*/
FILE *fp      = NULL , *fout = NULL;
char *PtrMem  = NULL , *PtrSearch = NULL;
char *PtrS1 , *PtrS2;
long nblu , tfp;
/*-------------------------------------------------------------------------*/
/***************- Méthode récursive : VIVE LE C ! ... -*********************/
UpDate(char *Ptr)
{
 if (*Ptr!='.' & *Ptr!='9' & *Ptr!=' ')
   *Ptr = *Ptr + 1;
 else
   if (*Ptr=='9') {
     *Ptr-- = '0';
     UpDate(Ptr);
   } 
   else
     if (*Ptr=='.') {
       *Ptr-- = '.';
       UpDate(Ptr);
 }
}
/*-------------------------------------------------------------------------*/
void Help(void)
{
 WR("\tUtilisez 'UpRev' pour mettre à jour la version de votre "\
    "exécutable.\n\n");
 WR ("\tUSAGE : UpRev NomFichier.h\n\n");
 exit(0);
}
/*-------------------------------------------------------------------------*/
void main(int argc,**argv[])
{
 WR("\nUpRev  ««« Pour le 'Petit Amiga Illustré' »»»\n"\
    "~~~~~\n"); 
 if(argc < 2)
   Help();
 if(!(ferror(fp=fopen(argv[1],"rb")))) {
   fseek (fp,0,SEEK_END);
   tfp = ftell(fp);
   if(PtrMem = (char *)malloc(tfp)) {
     fseek (fp,0,SEEK_SET);
     nblu = fread(PtrMem,1,tfp,fp);
     fclose(fp);   
     if(nblu == tfp) { 
       PtrSearch = strstr(PtrMem,"VER:");
       if (PtrSearch) {
         for(;*PtrSearch!=' '&*PtrSearch!=0x00&*PtrSearch!=0x0a;)
           *PtrSearch++;
         if (*PtrSearch++ == ' ') {
           for(;*PtrSearch!=' '&*PtrSearch!=0x00&*PtrSearch!=0x0a;)
             *PtrSearch++;
           if (*PtrSearch++ ==  ' ') {
             PtrS1 = PtrSearch;
             for(;*PtrSearch!=' '&*PtrSearch!=0x00&*PtrSearch!=0x0a;)
               *PtrSearch++;
             if (*PtrSearch-- ==  ' ') {
               printf("\t%s ",argv[1]);
               for(PtrS2=PtrS1;*PtrS1!=' ';printf("%c",*PtrS1++));
               printf(" est mis à jour et deviendra la version ");
               UpDate(PtrSearch); 
               for(;*PtrS2!=' ';printf("%c",*PtrS2++));
               printf("\n\t\t\tà la prochaine compilation ...\n\n");
               if(!(ferror(fout=fopen(argv[1],"wb")))) {
                 fwrite(PtrMem,1,nblu,fp);
                 fclose(fout); 
               }
               else 
                 WR("\n\tERR : Erreur d'écriture sur le fichier ...\n"\
                      "\t~~~\n");
             }
           }
         } 
       }
     }
     else {
       fclose(fp);
       WR("\n\tERR : Erreur de lecture du fichier ...\n"\
            "\t~~~\n");
     }
   free(PtrMem);
   }
   else {
     fclose(fp);
     WR("\n\tERR : Erreur d'allocation de la mémoire ...\n"\
          "\t~~~\n");
     }
 }
 else  
   WR("\n\tERR : Erreur d'ouverture du fichier  ...\n"\
        "\t~~~\n");
exit(0);
}
/*-------------------------------------------------------------------------*/
