/************************************** * RUN LENGTH ENCODER FOR ASCII TEXT * * Code Copyright 2000 * * Jonathan Sapan '03 * * (unless noted otherwise) * **************************************/ /*See documentation for limitations and other information*/ #include #include #define SENT_VAL 0 FILE *inputFile; FILE *outputFile; main(int argc, char *argv[]) { int i, count, bytes_read; char a, A, current, last; char sentinel; inputFile = fopen(argv[1], "rb"); outputFile = fopen(argv[2], "w"); /*--------------------------------------------------------------------*/ if ( argc != 3 ) /*Check to see if program was called properly*/ { fprintf(stdout, "TOO FEW ARGUMENTS\n" ); exit(EXIT_SUCCESS); } /*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/ if ( (inputFile == NULL) || (outputFile == NULL) ) { fprintf(stdout, "INVALID FILE SPECIFIED\n"); exit(EXIT_SUCCESS); } /*--------------------------------------------------------------------*/ /*Set value of sentinel byte*/ sentinel = SENT_VAL; /*Write sentinel to first byte in outputFile*/ fprintf(outputFile , "%c", sentinel); fread( &last, 1, 1, inputFile ); count = 1; while (1) { bytes_read = fread( ¤t, 1, 1, inputFile ); if ( count == 259 ) { fprintf( outputFile, "%c%c%c", sentinel, last, (char)(count-4) ); if ( current == last ) count = 0; else count = 1; } if ( current == last ) count++; else { if ( count >= 4 ) fprintf( outputFile, "%c%c%c", sentinel, last, (char)(count-4) ); else { for (i = 0; i= 4 ) fprintf( outputFile, "%c%c%c", sentinel, last, (char)(count-4) ); else { for (i = 0; i