uves_dump.c

00001 /*                                                                              *
00002  *   This file is part of the X-SHOOTER Pipeline                                *
00003  *   Copyright (C) 2002,2003 European Southern Observatory                      *
00004  *                                                                              *
00005  *   This library is free software; you can redistribute it and/or modify       *
00006  *   it under the terms of the GNU General Public License as published by       *
00007  *   the Free Software Foundation; either version 2 of the License, or          *
00008  *   (at your option) any later version.                                        *
00009  *                                                                              *
00010  *   This program is distributed in the hope that it will be useful,            *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of             *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
00013  *   GNU General Public License for more details.                               *
00014  *                                                                              *
00015  *   You should have received a copy of the GNU General Public License          *
00016  *   along with this program; if not, write to the Free Software                *
00017  *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA       *
00018  *                                                                              */
00019 
00020 /*
00021  * $Author: jmlarsen $
00022  * $Date: 2007/08/21 13:08:26 $
00023  * $Revision: 1.20 $
00024  * $Name: uves-4_2_2 $
00025  * $Log: uves_dump.c,v $
00026  * Revision 1.20  2007/08/21 13:08:26  jmlarsen
00027  * Removed irplib_access module, largely deprecated by CPL-4
00028  *
00029  * Revision 1.19  2007/06/06 08:17:33  amodigli
00030  * replace tab with 4 spaces
00031  *
00032  * Revision 1.18  2007/04/24 12:50:29  jmlarsen
00033  * Replaced cpl_propertylist -> uves_propertylist which is much faster
00034  *
00035  * Revision 1.17  2007/04/24 09:26:11  jmlarsen
00036  * Do not crash on NULL strings
00037  *
00038  * Revision 1.16  2006/11/24 09:36:07  jmlarsen
00039  * Removed obsolete comment
00040  *
00041  * Revision 1.15  2006/11/16 14:12:21  jmlarsen
00042  * Changed undefined trace number from 0 to -1, to support zero as an actual trace number
00043  *
00044  * Revision 1.14  2006/11/15 15:02:14  jmlarsen
00045  * Implemented const safe workarounds for CPL functions
00046  *
00047  * Revision 1.12  2006/11/15 14:04:08  jmlarsen
00048  * Removed non-const version of parameterlist_get_first/last/next which is already
00049  * in CPL, added const-safe wrapper, unwrapper and deallocator functions
00050  *
00051  * Revision 1.11  2006/11/13 14:23:55  jmlarsen
00052  * Removed workarounds for CPL const bugs
00053  *
00054  * Revision 1.10  2006/11/06 15:19:41  jmlarsen
00055  * Removed unused include directives
00056  *
00057  * Revision 1.9  2006/08/17 13:56:52  jmlarsen
00058  * Reduced max line length
00059  *
00060  * Revision 1.8  2006/08/16 11:46:30  jmlarsen
00061  * Support printing NULL frame filename
00062  *
00063  * Revision 1.7  2006/05/12 15:02:05  jmlarsen
00064  * Support NULL tags
00065  *
00066  * Revision 1.6  2006/02/28 09:15:22  jmlarsen
00067  * Minor update
00068  *
00069  * Revision 1.5  2006/02/15 13:19:15  jmlarsen
00070  * Reduced source code max. line length
00071  *
00072  * Revision 1.4  2005/12/19 16:17:56  jmlarsen
00073  * Replaced bool -> int
00074  *
00075  */
00076 
00077 #ifdef HAVE_CONFIG_H
00078 #  include <config.h>
00079 #endif
00080 
00081 /*----------------------------------------------------------------------------*/
00088 /*----------------------------------------------------------------------------*/
00089 
00092 #include <uves_dump.h>
00093 
00094 #include <uves_msg.h>
00095 #include <uves_error.h>
00096 
00097 #include <cpl.h>
00098 
00099 /*----------------------------------------------------------------*/
00111 /*----------------------------------------------------------------*/
00112 cpl_error_code
00113 uves_print_uves_propertylist(const uves_propertylist *pl, long low, long high)
00114 {
00115     const cpl_property *prop;
00116     long i = 0;
00117     
00118     assure (0 <= low && high <= uves_propertylist_get_size(pl) && low <= high,
00119         CPL_ERROR_ILLEGAL_INPUT, "Illegal range");
00120     /* Printing an empty range is allowed but only when low == high */
00121 
00122     if (pl == NULL){
00123     uves_msg("NULL");
00124     }
00125     else if (uves_propertylist_is_empty(pl))  {
00126     uves_msg("[Empty property list]");
00127     }
00128     else    
00129     for (i = low; i < high; i++)
00130         {
00131         prop = uves_propertylist_get_const(pl, i);
00132         check (uves_print_cpl_property(prop), "Error printing property");
00133         }
00134     
00135   cleanup:
00136     return cpl_error_get_code();
00137 }
00138 /*----------------------------------------------------------------*/
00146 /*----------------------------------------------------------------*/
00147 
00148 cpl_error_code
00149 uves_print_cpl_property(const cpl_property *prop)
00150 {
00151     cpl_type t;
00152 
00153     if (prop == NULL)
00154     {
00155         uves_msg("NULL");
00156     }
00157     else
00158     {   
00159         /* print property with this formatting
00160            NAME =
00161              VALUE
00162            COMMENT
00163         */
00164 
00165         /* print name */
00166         
00167         uves_msg("%s =", cpl_property_get_name(prop) != NULL ?
00168                      cpl_property_get_name(prop) : "NULL");
00169             
00170         /* print value */
00171         
00172         check( t = cpl_property_get_type(prop), "Could not read property type");
00173         
00174         switch(t & (~CPL_TYPE_FLAG_ARRAY))
00175         {
00176         case CPL_TYPE_CHAR:
00177             if (t & CPL_TYPE_FLAG_ARRAY)  /* if type is string */
00178             {
00179                 uves_msg("  '%s'", cpl_property_get_string(prop) != NULL ?
00180                                 cpl_property_get_string(prop) : "NULL");
00181             }
00182             else                          /* an ordinary char */
00183             {
00184                 uves_msg("  %c", cpl_property_get_char(prop));
00185             }
00186             break;
00187         case CPL_TYPE_BOOL:    if (cpl_property_get_bool(prop))
00188             {uves_msg("  true");}
00189         else
00190             {uves_msg("  false");}
00191             break;
00192         case CPL_TYPE_UCHAR:   uves_msg("  %c", cpl_property_get_char(prop));  break;
00193         case CPL_TYPE_INT:     uves_msg("  %d", cpl_property_get_int(prop));   break;
00194         case CPL_TYPE_UINT:    uves_msg("  %d", cpl_property_get_int(prop));   break;
00195         case CPL_TYPE_LONG:    uves_msg("  %ld", cpl_property_get_long(prop)); break;
00196         case CPL_TYPE_ULONG:   uves_msg("  %ld", cpl_property_get_long(prop)); break;
00197         case CPL_TYPE_FLOAT:   uves_msg("  %f", cpl_property_get_float(prop)); break;
00198         case CPL_TYPE_DOUBLE:  uves_msg("  %f", cpl_property_get_double(prop));break;
00199         case CPL_TYPE_POINTER: uves_msg("  POINTER");                          break;
00200         case CPL_TYPE_INVALID: uves_msg("  INVALID");                          break;
00201         default: uves_msg("  unrecognized property");                          break;
00202         }
00203         
00204         /* Is this property an array? */
00205         if (t & CPL_TYPE_FLAG_ARRAY){
00206         uves_msg("  (array size = %ld)", cpl_property_get_size(prop));
00207         }
00208 
00209         /* Print comment */
00210         if (cpl_property_get_comment(prop) != NULL){
00211         uves_msg("    %s", cpl_property_get_comment(prop) != NULL ? 
00212                     cpl_property_get_comment(prop) : "NULL");
00213         }
00214     }
00215 
00216   cleanup:
00217     return cpl_error_get_code();
00218 }
00219 
00220 /*----------------------------------------------------------------*/
00228 /*----------------------------------------------------------------*/
00229 cpl_error_code
00230 uves_print_cpl_frameset(const cpl_frameset *frames)
00231 {
00232     /* Two special cases: a NULL frame set and an empty frame set */
00233 
00234     if (frames == NULL)
00235     {
00236         uves_msg("NULL");
00237     }
00238     else
00239     {
00240         const cpl_frame *f = NULL;
00241         check( f = cpl_frameset_get_first_const(frames), "Error reading frameset");
00242         
00243         if (f == NULL)
00244         {
00245             uves_msg("[Empty frame set]");
00246         }
00247         else
00248         {
00249             while(f != NULL)
00250             {
00251                 check( uves_print_cpl_frame(f), "Could not print frame");
00252                 check( f = cpl_frameset_get_next_const(frames), 
00253                    "Error reading frameset");
00254             }
00255         }
00256     }
00257     
00258   cleanup:
00259     return cpl_error_get_code();
00260 }
00261 
00262 /*----------------------------------------------------------------*/
00270 /*----------------------------------------------------------------*/
00271 cpl_error_code
00272 uves_print_cpl_frame(const cpl_frame *f)
00273 {
00274     if (f == NULL)
00275     {
00276         uves_msg("NULL");
00277     }
00278     else
00279     {
00280         const char *filename = cpl_frame_get_filename(f);
00281 
00282         if (filename == NULL)
00283         {
00284             cpl_error_reset();
00285             filename = "Null";
00286         }
00287 
00288         uves_msg("%-7s %-20s '%s'", 
00289              uves_tostring_cpl_frame_group(cpl_frame_get_group(f)),
00290              cpl_frame_get_tag(f)      != NULL ? cpl_frame_get_tag(f) : "Null",
00291              filename);
00292         
00293         uves_msg_debug("type \t= %s",   uves_tostring_cpl_frame_type (cpl_frame_get_type (f)));
00294         uves_msg_debug("group \t= %s",  uves_tostring_cpl_frame_group(cpl_frame_get_group(f)));
00295         uves_msg_debug("level \t= %s",  uves_tostring_cpl_frame_level(cpl_frame_get_level(f)));
00296     }
00297 
00298     return cpl_error_get_code();
00299 }
00300 
00301 /*----------------------------------------------------------------*/
00307 /*----------------------------------------------------------------*/
00308 const char *
00309 uves_tostring_cpl_frame_type(cpl_frame_type ft)
00310 {    
00311     switch(ft)
00312     {
00313     case CPL_FRAME_TYPE_NONE:   return "NONE";      break;
00314     case CPL_FRAME_TYPE_IMAGE:  return "IMAGE";     break;
00315     case CPL_FRAME_TYPE_MATRIX: return "MATRIX";    break;
00316     case CPL_FRAME_TYPE_TABLE:  return "TABLE";     break;
00317     default: return "unrecognized frame type";
00318     }
00319 }
00320 
00321 /*----------------------------------------------------------------*/
00327 /*----------------------------------------------------------------*/
00328 const char *
00329 uves_tostring_cpl_frame_group(cpl_frame_group fg)
00330 {
00331     switch(fg)
00332     {
00333     case CPL_FRAME_GROUP_NONE:    return "NONE";                       break;
00334     case CPL_FRAME_GROUP_RAW:     return CPL_FRAME_GROUP_RAW_ID;       break;
00335     case CPL_FRAME_GROUP_CALIB:   return CPL_FRAME_GROUP_CALIB_ID;     break;
00336     case CPL_FRAME_GROUP_PRODUCT: return CPL_FRAME_GROUP_PRODUCT_ID;   break;
00337     default:
00338         return "unrecognized frame group";
00339     }
00340 }
00341 
00342 /*----------------------------------------------------------------*/
00348 /*----------------------------------------------------------------*/
00349 const char *
00350 uves_tostring_cpl_frame_level(cpl_frame_level fl)
00351 {
00352     
00353     switch(fl)
00354     {
00355     case CPL_FRAME_LEVEL_NONE:        return "NONE";        break;
00356     case CPL_FRAME_LEVEL_TEMPORARY:   return "TEMPORARY";   break;
00357     case CPL_FRAME_LEVEL_INTERMEDIATE:return "INTERMEDIATE";break;
00358     case CPL_FRAME_LEVEL_FINAL:       return "FINAL";       break;
00359     default: return "unrecognized frame level";
00360     }
00361 }
00362 
00363 
00364 /*----------------------------------------------------------------*/
00370 /*----------------------------------------------------------------*/
00371 const char *
00372 uves_tostring_cpl_type(cpl_type t)
00373 {
00374 
00375     /* Note that CPL_TYPE_STRING is shorthand
00376        for CPL_TYPE_CHAR | CPL_TYPE_FLAG_ARRAY . */
00377 
00378     if (!(t & CPL_TYPE_FLAG_ARRAY))
00379     switch(t & (~CPL_TYPE_FLAG_ARRAY))
00380         {
00381         case CPL_TYPE_CHAR:       return "char";    break;
00382         case CPL_TYPE_UCHAR:      return "uchar";   break;
00383         case CPL_TYPE_BOOL:       return "boolean"; break;
00384         case CPL_TYPE_INT:        return "int";     break;
00385         case CPL_TYPE_UINT:       return "uint";    break;
00386         case CPL_TYPE_LONG:       return "long";    break;
00387         case CPL_TYPE_ULONG:      return "ulong";   break;
00388         case CPL_TYPE_FLOAT:      return "float";   break;
00389         case CPL_TYPE_DOUBLE:     return "double";  break;
00390         case CPL_TYPE_POINTER:    return "pointer"; break;
00391 /* not in CPL3.0: case CPL_TYPE_COMPLEX:    return "complex"; break; */
00392         case CPL_TYPE_INVALID:    return "invalid"; break;
00393         default:
00394         return "unrecognized type";
00395         }
00396     else
00397     switch(t & (~CPL_TYPE_FLAG_ARRAY))
00398         {
00399         case CPL_TYPE_CHAR:       return "string (char array)"; break;
00400         case CPL_TYPE_UCHAR:      return "uchar array";         break;
00401         case CPL_TYPE_BOOL:       return "boolean array";       break;
00402         case CPL_TYPE_INT:        return "int array";           break;
00403         case CPL_TYPE_UINT:       return "uint array";          break;
00404         case CPL_TYPE_LONG:       return "long array";          break;
00405         case CPL_TYPE_ULONG:      return "ulong array";         break;
00406         case CPL_TYPE_FLOAT:      return "float array";         break;
00407         case CPL_TYPE_DOUBLE:     return "double array";        break;
00408         case CPL_TYPE_POINTER:    return "pointer array";       break;
00409 /* not in CPL3.0: case CPL_TYPE_COMPLEX:    return "complex array"; break; */
00410         case CPL_TYPE_INVALID:    return "invalid (array)";     break;
00411         default:
00412         return "unrecognized type";
00413         }
00414 }

Generated on Mon Apr 21 10:56:55 2008 for UVES Pipeline Reference Manual by  doxygen 1.5.1