/* Codifica e Decodifica */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#define MAX 1000
#define SPAZIO 32
typedef enum {FALSO,VERO} boolean;
char *codifica(char *infname,int k, char *outfname);
char *decodifica(char *infname,int k, char *outfname);
int main(int argc, char **argv)
{
system("cls");
printf("--------------------------\n");
printf(" Codifica e Decodifica \n");
printf("--------------------------\n");
if(argc<5) // controllo argomenti
{
printf("\nErrore numero parametri !!\n");
printf("\nUso: %s"
" <input-file> <parametri [C or D]> <K> <output-file>\n\n",argv[0]);
}
else
{
printf("\n\nControllo parametri ed esecuzione\n\n");
if ((strcmp(argv[2],"C"))==0)
printf("%s", codifica(argv[1],atoi(argv[3]),argv[4]));
else
printf("%s", decodifica(argv[1],atoi(argv[3]),argv[4]));
}
printf ("\nPremi un tasto per uscire . . .");
printf ("\n");
getch();
return 0;
}
char *codifica(char *infname, int k, char *outfname)
{
FILE *fin, *fout;
int esito=0;
int valore=0;
char s[MAX];
char c=0;
int i=0;
int n1=0;
int posizione=0;
boolean finito=FALSO;
// CONTROLLO APERTURA E CREAZIONE FILE
if ((fin=fopen(infname,"r"))==NULL)
{
fprintf (stderr,"\a\nErrore apertura %s\n",infname);
exit(1);
}
if ((fout=fopen(outfname,"w"))==NULL)
{
fprintf (stderr,"\a\nErrore creazione %s\n",outfname);
exit(1);
}
while (c != EOF)
{
c=getc(fin);
s[posizione]=c;
posizione++;
for(; i<posizione && !finito; i++)
{
valore=s;
esito=isalpha(valore);
if (esito != 0)
{
if ((i==0)||(i%2==0))
{
n1=toascii(valore);
fprintf (fout,"%d\n",n1+k);
printf ("%d\n",n1+k);
}
if (i%2 !=0)
{
n1=toascii(valore);
fprintf(fout,"%d\n",n1-k);
printf ("%d\n",n1-k);
}
}
if (s == ' ')
{
n1=toascii(valore);
fprintf (fout,"%d\n",n1);
printf ("%d\n",n1);
posizione++;
}
}
finito=FALSO;
i=posizione;
}
fclose(fin);
fclose(fout);
printf ("\nOK!\n\n");
}
char *decodifica(char *infname,int k, char *outfname)
{
FILE *fin, *fout;
unsigned char s[MAX];
int i=0;
// CONTROLLO APERTURA E CREAZIONE FILE
if ((fin=fopen(infname,"r"))==NULL)
{
printf ("\nErrore apertura %s\n",infname);
exit(0);
}
if ((fout=fopen(outfname,"w"))==NULL)
{
printf ("\nErrore creazione %s\n",outfname);
exit(0);
}
while (!feof(fin)) // leggo il file fino alla fine e lo inserisco nella stringa s
{
fscanf (fin,"%d", s);
i=0;
if ((s==0)||(s%2==0) && s != SPAZIO)
{
fprintf (fout,"%c\n",s-k);
printf("%c\n",s-k);
}
if ((s%2 !=0) && (s != SPAZIO))
{
fprintf(fout,"%c\n",s+k);
printf("%c\n", s+k);
}
if (s ==SPAZIO)
{
printf("\n");
fprintf (fout,"\n");
}
i++;
}
fclose(fin);
fclose(fout);
printf ("\n\nOK!\n\n");
}