int main(int argc, char* argv[]) { int VERBOSE; int KEEP; int LOSSY; { int i, j, k; int flags[128]; ARG_INIT("dexqv") j = 1; for (i = 1; i < argc; i++) if (argv[i][0] == '-') { ARG_FLAGS("vkl") } else argv[j++] = argv[i]; argc = j; VERBOSE = flags['v']; KEEP = flags['k']; LOSSY = flags['l']; if (argc == 1) { fprintf(stderr,"Usage: %s %s\n",Prog_Name,Usage); exit (1); } } // For each .quiva file to be compressed: { int i; for (i = 1; i < argc; i++) { char *pwd, *root; FILE *input, *output; QVcoding *coding; pwd = PathTo(argv[i]); root = Root(argv[i],".quiva"); input = Fopen(Catenate(pwd,"/",root,".quiva"),"r"); if (input == NULL) exit (1); output = Fopen(Catenate(pwd,"/",root,".dexqv"),"w"); if (output == NULL) exit (1); if (VERBOSE) { fprintf(stderr,"Processing '%s' ...\n",root); fflush(stderr); } // Scan the file collecting statistics for Huffman schemes QVcoding_Scan(input); // Create and output the encoding schemes coding = Create_QVcoding(LOSSY); { char *slash, *read; rewind (input); Read_Lines(input,1); read = QVentry(); slash = index(read+1,'/'); if (slash != NULL) { coding->prefix = (char *) malloc((slash-read)+1); if (coding->prefix == NULL) { fprintf(stderr,"%s: Out of memory (Allocating header prefix)\n",Prog_Name); exit (1); } *slash = '\0'; if (strcpy(coding->prefix,read) == NULL) SYSTEM_ERROR *slash = '/'; } } Write_QVcoding(output,coding); // For each entry do { int lwell; rewind (input); lwell = 0; while (Read_Lines(input,1) > 0) { int well, beg, end, qv; char *slash; uint16 half; uint8 byte; // Interpret the header, encode and write out the fields slash = index(QVentry(),'/'); sscanf(slash+1,"%d/%d_%d RQ=0.%d\n",&well,&beg,&end,&qv); while (well - lwell >= 255) { byte = 0xff; fwrite(&byte,1,1,output); lwell += 255; } byte = (uint8) (well-lwell); fwrite(&byte,1,1,output); lwell = well; half = (uint16) beg; fwrite(&half,sizeof(uint16),1,output); half = (uint16) end; fwrite(&half,sizeof(uint16),1,output); half = (uint16) qv; fwrite(&half,sizeof(uint16),1,output); Compress_Next_QVentry(input,output,coding,LOSSY); } } // Clean up for the next file Free_QVcoding(coding); fclose(input); fclose(output); if (!KEEP) unlink(Catenate(pwd,"/",root,".quiva")); free(root); free(pwd); if (VERBOSE) { fprintf(stderr,"Done\n"); fflush(stderr); } } } free(QVentry()); exit (0); }
csv2Ext::csv2Ext(int argc, char *argv[]) { Open_Files(argc, argv); Read_Lines(); Close_Files(); }