/*--------------------------------------------------------------------------*
 *                                                                          *
 *  Decompacte v1.0                                                         *
 *  ~~~~~~~~~~~~~~~                                                         *
 *  Fonction: Décompacteur de fichiers compactés avec ©PowerPacker          *
 *  ~~~~~~~~                                                                *
 *  Auteur: Xavier Leclercq pour le "Petit Amiga Illustré"                  *
 *  ~~~~~~                                                                  *
 *  Usage : Decompacte <fichiers sources> <répertoire destination>          *
 *  ~~~~~                                                                   *
 *  Exemple :  1>Decompacte PAI:Showdoc/#? ram:                             *
 *  ~~~~~~~                                                                 *
 *  Recopie TOUS les fichiers de PAI:ShowDoc en RAM:  De plus les fichiers  *
 *  de données au format PowerPacker seront décompactés                     *
 *  ~~~~~~~~~~                                                              *
 *--------------------------------------------------------------------------*/

#include <stdio.h>

/*--------------------------------------------------------------------------*/
/* Variables globales */
struct PPBase *PPBase = NULL;
char   *Buffer = NULL , NomFichier[108],**av;
long   Longueur,resultat , j , ac , i ,error;
FILE   *fp = NULL;

/*--------------------------------------------------------------------------*/
/* directives #define */ 
#define WR(str) fwrite(str,strlen(str),1,stdout)
#define BOLD      "\x9b1;31;40m"
#define NORMAL    "\x9b0;31;40m"

/*--------------------------------------------------------------------------*/
/* Fonction principale */
main(int argc,char **argv[])
{
 printf("%sDecompacte v1.0%s par XAVIER LECLERCQ pour"\
        " «« le Petit Amiga Illustré »»\n\n",BOLD,NORMAL);
 if (!(PPBase = (struct PPBase *)OpenLibrary ("powerpacker.library", 0L)))
   WR("J'ai un besoin vital de la powerpacker.library V33+ !\n");
 else {
   if (argc > 2) {
     error = expand_args(argc, argv, &ac, &av);
     for (i = 1; i < ac; ++i) {
       error = ppLoadData(av[i],0L,0L,&Buffer,&Longueur,NULL);
       if (!error) {
         strcpy(NomFichier,av[i]);
         printf("%s ",NomFichier);
         for(j=strlen(NomFichier);j > 0;j--) { 
            if (NomFichier[j]==':'||NomFichier[j]=='/') {
               break;
            }
         }
         if (j) j++;
         strcpy(NomFichier,argv[2]);
         strcat(NomFichier,av[i]+j);
         if(!(ferror(fp=fopen(NomFichier,"wb")))) {
           resultat = fwrite(Buffer,1,Longueur,fp);
           if (resultat != Longueur)
             printf("\nFichier %s%s%s erreur d'écriture!"\
                    "\n",BOLD,NomFichier,NORMAL);
           else
             printf("%sto%s %s\n",BOLD,NORMAL,NomFichier);
           fclose(fp);  
         }
         else 
           printf("\nFichier %s%s%s erreur de création!"\
                  "\n",BOLD,NomFichier,NORMAL);
         if (Buffer) FreeMem(Buffer, Longueur) , Buffer = NULL;
       }
     }
   }
   else {
     WR("\tUsage : Decompacte <fichiers sources>"\
        " <répertoire de destination>\n"\
        " \t~~~~~\n"\
        "\tExemple :  1>Decompacte PAI:Showdoc/#? ram:\n"\
        "\t~~~~~~~\n"\
        "  -> Recopie TOUS les fichiers de PAI:ShowDoc en RAM:\n"\
        "  De plus les fichiers de données au format PowerPacker seront"\
        " décompactés.\n\n");
   }   
   if (PPBase) CloseLibrary((struct Library *)PPBase);
 }
}
