IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 39459 for trunk


Ignore:
Timestamp:
Mar 13, 2016, 7:53:44 AM (10 years ago)
Author:
eugene
Message:

adding uncompress mode to ftable

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/tools/src/ftable.c

    r39331 r39459  
    33# include "inttypes.h"
    44
     5void table_uncompress (int argc, char **argv);
    56int print_table_rows (FTable *table, int start, int Nrows);
    67FILE *load_extension (char *file, int Nextend, char *Extname, Header *header);
     
    2223  if (get_argument (argc, argv, "-h")) usage ();
    2324  if (get_argument (argc, argv, "--help")) usage ();
     25
     26  if ((N = get_argument (argc, argv, "-uncompress"))) {
     27    remove_argument (N, &argc, argv);
     28    table_uncompress (argc, argv);
     29  }
     30  if ((N = get_argument (argc, argv, "-u"))) {
     31    remove_argument (N, &argc, argv);
     32    table_uncompress (argc, argv);
     33  }
    2434
    2535  Nextend = 0;
     
    261271    fprintf (stderr, " -list:      print extension names\n");
    262272    fprintf (stderr, " -layout:    describe extension\n");
     273    fprintf (stderr, " -uncompress: uncompress file (requires output argument)\n");
    263274    exit (2);
    264275}
     
    535546  exit (0);
    536547}
     548
     549void myQuit (char *format,...) {
     550
     551  va_list argp; 
     552  va_start (argp, format);
     553  vfprintf (stderr, format, argp);
     554  va_end (argp);
     555 
     556  exit (1);
     557}
     558
     559void table_uncompress (int argc, char **argv) {
     560
     561  if (argc != 3) {
     562    fprintf (stderr, "USAGE: ftable -u/-uncompress (input) (output)\n");
     563    exit (2);
     564  }
     565
     566  Header header;
     567  FTable ftable;
     568  Matrix matrix;
     569  ftable.header = &header;
     570
     571  FILE *fi = fopen (argv[1], "r");
     572  if (!fi) myQuit ("failed to open input file %s\n", argv[1]);
     573 
     574  FILE *fo = fopen (argv[2], "w");
     575  if (!fo) myQuit ("failed to open output file %s\n", argv[2]);
     576 
     577  if (!gfits_fread_header (fi, &header)) myQuit ("failed to read PHU header from input file %s\n", argv[1]);
     578  if (!gfits_fread_matrix (fi, &matrix, &header)) myQuit ("failed to read PHU data array from input file %s\n", argv[1]);
     579 
     580  if (!gfits_fwrite_header (fo, &header)) myQuit ("failed to write PHU header to output file %s\n", argv[2]);
     581  if (!gfits_fwrite_matrix (fo, &matrix)) myQuit ("failed to write PHU data array to output file %s\n", argv[2]);
     582 
     583  gfits_free_header (&header);
     584  gfits_free_table (&ftable);
     585 
     586  int Nextend = 0;
     587  while (TRUE) {
     588    if (!gfits_fread_header (fi, &header)) break;
     589
     590    if (!gfits_fread_ftable_data (fi, &ftable, FALSE)) {
     591      myQuit ("failed to read table data for extension #%d from input file %s\n", Nextend, argv[1]);
     592    }
     593 
     594    Header *outheader = &header;
     595    FTable *outtable  = &ftable;
     596   
     597    Header rawheader;
     598    FTable rawtable;
     599    rawtable.header = &rawheader;
     600   
     601    int IsCompressed = gfits_extension_is_compressed_table (&header);
     602
     603    if (IsCompressed) {
     604      int i, Nfields;
     605      if (!gfits_scan (&header, "TFIELDS", "%d", 1, &Nfields))
     606        myQuit ("cannot find TFIELDS in header for extension #%d from input file %s\n", Nextend, argv[1]);
     607      for (i = 0; i < Nfields; i++) {
     608        if (!gfits_byteswap_varlength_column (&ftable, i+1))
     609          myQuit ("cannot swap varlength column for extension #%d from input file %s\n", Nextend, argv[1]);
     610      }
     611      if (!gfits_uncompress_table (&ftable, &rawtable))
     612        myQuit ("failed to uncompress table for extension #%d from input file %s\n", Nextend, argv[1]);
     613     
     614      outheader = &rawheader;
     615      outtable  = &rawtable;
     616      gfits_free_header (&header);
     617      gfits_free_table (&ftable);
     618    }
     619
     620    if (!gfits_fwrite_header (fo, outheader)) {
     621      fprintf (stderr, "failed to write table header for extension #%d to output file %s\n", Nextend, argv[2]);
     622      exit (1);
     623    }
     624    if (!gfits_fwrite_table (fo, outtable)) {
     625      fprintf (stderr, "failed to write PHU data array for extension #%d to output file %s\n", Nextend, argv[2]);
     626      exit (1);
     627    }
     628 
     629    gfits_free_header (outheader);
     630    gfits_free_table (outtable);
     631
     632    Nextend ++;
     633  }
     634
     635  if (!fclose (fi)) myQuit ("error closing input file %s\n", argv[1]);
     636  if (!fclose (fo)) myQuit ("error closing output file %s\n", argv[1]);
     637  exit (0);
     638}
Note: See TracChangeset for help on using the changeset viewer.