/* huffsize.c - Don Yang (uguu.org) Calculate size of huffman encoded file (output from huffman.c) 11/27/01 */ /*@ -type @*/ #include #include /******************************************************************** main */ int main(int argc, char **argv) { int hlen, freq, size, state, i; FILE *infile; infile = stdin; if( argc > 1 ) { if( (infile = fopen(argv[1], "rt")) == NULL ) return printf("Can not open %s\n", argv[1]); } hlen = freq = size = state = 0; while( (i = fgetc(infile)) != EOF ) { switch( state ) { case 0: if( i == '0' || i == '1' ) hlen++; else if( i == 'x' ) state++; break; case 1: if( isdigit(i) ) { freq = i - '0'; state++; } break; case 2: if( isdigit(i) ) { freq = freq * 10 + i - '0'; } else { size += freq * hlen; hlen = freq = 0; state++; } break; case 3: if( i == '\n' ) state = 0; break; default: break; } } (void)fclose(infile); printf("%d bits\n", size); return 0; } /* main() */