/* Am-Pc v1.1 -- Michel Laliberté, avril 1990 */
#include <stdio.h>
main(argc,argv) 
int argc;
char *argv[];
{
 short conv = 0;
 short lf = 0;
 register char b;
 register char a = 'á';
 register short asc = 0;
 register char c;
 FILE *fp;
 FILE *pf;
 if (argc < 4 || argc > 6) 
 {
 printf("\f");
 printf("[33m                     Am-Pc v1.2  - avril 1990[31m\n\n");
 printf("     Ce programme convertit les fichiers WordPerfect Amiga à accents \n");
 printf("     français en fichiers WordPerfect accentués MS-DOS, et vice-versa.\n");
 printf("     Pour convertir le disque, utiliser CrossDos, MessyDos ou Dos2Dos.\n\n");
 printf("[33m USAGE:[31m1> ampc  origine  dest.  xx  [asc]  [lf] Place dans le fichier\n");
 printf("                                                \"dest.\" la conversion \n");
 printf("                                                du fichier \"origine\".\n\n");
 printf("     Si xx = pc, le sens de la conversion est: Amiga -> PC.\n");
 printf("     Si xx = am, on prend le sens contraire:   PC -> Amiga.\n\n");
 printf("     Pour les fichiers ASCII autres que WordPerfect, utiliser \"asc\".\n");  
 printf("     Pour convertir les LF en LF + CR ou vice-versa, utiliser\"lf\".\n");  
 printf("     Pour des résultats plus rapides, travailler en RAM:\n");
 printf("     ex.: 1> ampc   ram:n_du_fichier   ram:conv.1   pc\n");
 printf("[33m           CE PROGRAMME EST GRATUIT - REVENTE INTERDITE[31m\n");
 printf("      Michel Laliberté, Montréal - tél.: (514) 274-0288\n\n");
 exit(0);
 }
 if ((argc >4 && argc <7 ) && !strcmp(argv[4],"asc")) asc=1;
      else if (argc >4 && argc <7) {
	   printf("USAGE: 1> ampc  origine dest.  xx  [asc] [lf]\n");
           exit(0);
      }

 if ((argc >4 && argc <7) && !strcmp(argv[5],"lf")) lf=1;
      else if (argc == 6) {
	   printf("USAGE: 1> ampc  origine dest.  xx  [asc] [lf]\n");
           exit(0);
      }

      if      (argc >=4 && !strcmp(argv[3],"pc")) conv=1;
      else if (argc >=4 && !strcmp(argv[3],"am")) conv=2;
      else {
	   printf("USAGE: 1> ampc  origine dest.  xx  [asc] [lf]\n");
           printf("         \"xx\" doit être \"am\" ou \"pc\".\n\n");
           exit(0);
           }

      if((fp=fopen(argv[1],"r")) == NULL) {
        printf("          Impossible d'ouvrir le fichier source...\n");
        exit(0);
      }
 
      if((pf=fopen(argv[2],"w")) == NULL) {
        printf("          Impossible d'ouvrir le fichier destination...\n");
        exit(0);
      }
 
      if (conv==1)                      /* Amiga -> PC */
      {
        b=getc(fp); 
        while (b!=EOF) {                /* Boucle de lecture-écriture */
        if (a=='á' && (b>='à'|| b=='É')) switch(b) {  
                  case 'é':   
                     b=130;break;
                  case 'à':
                     b=133;break;
                  case 'è':
                     b=138;break;
                  case 'ê':
                     b=136;break;
                  case 'â':
                     b=131;break;
                  case 'ç':
                     b=135;break;
                  case 'î':
                     b=140;break;
                  case 'ô':
                     b=147;break;
                  case 'û':
                     b=150;break;
                  case 'É':
                     b=144;break;
                  case 'ù':
                     b=151;break;
                  case 'ë':
                     b=137;break;
                  case 'ï':
                     b=139;break;
                  case 'ü':
                     b=129;      
               }
               if (lf && b==10)  putc(13,pf); /* LF = CR + LF */
               putc(b,pf);                    /* Ecrit un caractère */
               if (!asc) a = b;               /* Fichier ASCII ou WP? */
               b=getc(fp);                    /* Va en chercher un autre */
          }
      fclose(fp);
      fclose(pf);
      }
      if (conv==2)                            /* PC -> Amiga */
      {
        b=getc(fp);        
        while (b!=EOF) {
            c=(b-64);       /* Décalage de -64 pour les caract. invisibles*/
            if (a == 'á' && c>='@' && c<='W') {
               switch(c) {  
                  case 'B':
                     b=233;break;
                  case 'E':
                     b=224;break;
                  case 'J':
                     b=232;break;
                  case 'H':
                     b=234;break;
                  case 'C':
                     b=226;break;
                  case 'G':
                     b=231;break;
                  case 'L':
                     b=238;break;
                  case 'S':
                     b=244;break;
                  case 'V':
                     b=251;break;
                  case 'P':
                     b=201;break;
                  case 'W':
                     b=249;break;
                  case 'I':
                     b=235;break;
                  case 'K':
                     b=239;break;
                  case 'A':
                     b=252;
               }
            }   
         if (!asc) a = b;                 /* Fichier ASCII ou WP? */
         if (lf && b==13) goto suite;     /* CR + LF = LF */
         putc(b,pf);
       suite:   
         b=getc(fp);
         }
       fclose(fp);
       fclose(pf);
       }
}
