#include #include #include #include #include "tif.h" const char * ERROR_IN = "\nError: "; const char * ERROR_NO_ARG = "No arguments supplied."; const char * ERROR_NO_INPUTFILE = "No inputfile supplied."; void write_error(const char *s) { fwrite(ERROR_IN, strlen(ERROR_IN), 1, stderr); fwrite(s, strlen(s), 1, stderr); fwrite("\n\n", 2, 1, stderr); return; } /* structure telling how to read and process data file */ struct arguments { int inputfile; int outputfile; bool raw_output; int silent; } a; /* Open inputfile */ FILE *open_read(const char *s) { FILE *t; t = fopen (s, "rb"); if (t==NULL) { write_error(strerror(errno)); } return t; } /* open outputfile */ FILE *open_write(const char *s) { FILE *t; t = fopen (s, "wb"); if (t==NULL) { write_error(strerror(errno)); } return t; } int main(int argc, char *argv[]) { int tmp; long buffer_len; char *buffer = NULL; FILE *infile = NULL; FILE *outfile = NULL; if (argc < 2) { write_error(ERROR_NO_ARG); exit(1); } a.inputfile = 0; a.outputfile = 0; a.raw_output = true; a.silent = -1; tmp = 0; // les argumenter for (int x = 1; x0) { outfile = open_write(argv[a.outputfile]); if (outfile==NULL) { if (infile!=NULL) { fclose(infile); infile=NULL; } exit(1); } } else if (a.raw_output) { outfile = stdout; } /* Simple write direct routine */ while (!feof(infile)) { buffer = tif_read_block(infile, buffer_len); if (buffer!=NULL) { switch (buffer_len) { case TIF_TAPE_HEADER_LENGTH: /* ignore tape header */ break; case TIF_HEADER_BLOCK_LENGTH_18: case TIF_HEADER_BLOCK_LENGTH_19: case TIF_HEADER_BLOCK_LENGTH_20: case TIF_HEADER_BLOCK_LENGTH_21: case TIF_HEADER_BLOCK_LENGTH_22: case TIF_DATA_BLOCK_LENGTH: if (fwrite(buffer, buffer_len, 1, outfile) != 1) { write_error(strerror(errno)); fclose(infile); if (outfile != stdout) fclose(outfile); exit(1); } break; } } else { if (buffer_len<0) { if (!feof(infile)) { write_error("Reading input file"); exit(1); } } } if (buffer!=NULL) { free(buffer); buffer = NULL; } } // Close input & output file if (infile != NULL) fclose(infile); if ((outfile != NULL) && (outfile != stdout)) fclose(outfile); return 0; }