#include
#include
/* DEBUG levels:
0: no debug
1: display byte read from source file
2. display byte written to destination file
3: display bytes read and bytes written
*/
#define DEBUG 2
int main(int argc, char *argv[])
{
FILE *in, *out;
unsigned char ch;
/* see if correct number of command line arguments */
if(argc!=4) {
printf("Usage: code ");
exit(1);
}
/* open input file */
if((in = fopen(argv[1], "rb"))==NULL) {
printf("Cannot open input file.\n");
exit(1);
}
/* open output file */
if((out = fopen(argv[2], "wb"))==NULL) {
printf("Cannot open output file.\n");
exit(1);
}
while(!feof(in)) {
ch = fgetc(in);
#if DEBUG == 1 || DEBUG == 3
putchar(ch);
#endif
ch = *argv[3] ^ ch;
#if DEBUG >= 2
putchar(ch);
#endif
if(!feof(in)) fputc(ch, out);
}
fclose(in);
fclose(out);
return 0;
}