IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 19, 2010, 5:35:25 PM (16 years ago)
Author:
eugene
Message:

update ohana formatting functions to check format and associated types; fixes derived from format checks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/largefiles.20100314/Ohana/src/libfits/header/F_scan.c

    r27295 r27368  
    22# include <gfitsio.h>
    33
     4// this only scans the regular and non-boolean fields
    45int gfits_scan (Header *header, char *field, char *mode, int N,...) {
    56
     
    1314}
    1415 
     16// alternate version for the special types (boolean, comments, COMMENT)
     17int gfits_scan_alt (Header *header, char *field, char *mode, int N,...) {
     18
     19  int status;
     20  va_list argp;
     21 
     22  va_start (argp, N);
     23  status = gfits_vscan_alt (header, field, mode, N, argp);
     24  va_end (argp);
     25  return (status);
     26}
     27 
     28// this only scans the regular and non-boolean fields
    1529int gfits_vscan (Header *header, char *field, char *mode, int N, va_list argp) {
    1630
     
    2741  }
    2842
    29   /* non-data entry (COMMENT, HISTORY) */
    30   if (!strcmp (mode, "%S")) {
    31     strncpy (va_arg (argp, char *), p + 8, FT_HISTORY_LENGTH);
    32     return (TRUE);
    33   }
    34 
    3543  /* all others require '=' in column 8 */
    3644  if (p[8] != '=') return (FALSE);
    37 
    38   /* comment from data line */
    39   if (!strcmp (mode, "%C")) {
    40     q = gfits_keyword_end (p) + 3;
    41     q = MIN (p + 80, q);
    42     bzero (tmp, 81);
    43     Nchar = MIN (80, p + 80 - q);
    44     memcpy (tmp, q, Nchar);
    45     stripwhite (tmp);
    46     strcpy (va_arg (argp, char *), tmp);
    47     return (TRUE);
    48   }
    4945
    5046  /* extract data into char array (exclude containing ' chars) */
     
    6157  }
    6258 
    63   /* boolean data, requires int target */
    64   if (!strcmp (mode, "%t")) {
    65     s = gfits_keyword_start (p);
    66     if (*s == 'T') {
    67       *va_arg (argp, int *) = TRUE;
    68       return (TRUE);
    69     }
    70     if (*s == 'F') {
    71       *va_arg (argp, int *) = FALSE;   
    72       return (TRUE);
    73     }
    74   }
    75 
    7659  /* remaining options are numerical data */
    7760  /* need to interpret 1.0d5 as 1.0e5 */
     
    10588}
    10689
     90// alternate version for the special types (boolean, comments, COMMENT)
     91int gfits_vscan_alt (Header *header, char *field, char *mode, int N, va_list argp) {
     92
     93  char *p, *q, *s, tmp[81];
     94  int Nchar, status;
     95
     96  /* find the correct line with field */
     97  p = gfits_header_field (header, field, N);
     98  if (p == NULL) {
     99    status = gfits_vscan_hierarch (header, field, mode, N, argp);
     100    return (status);
     101  }
     102
     103  /* non-data entry (COMMENT, HISTORY) */
     104  if (!strcmp (mode, "%S")) {
     105    strncpy (va_arg (argp, char *), p + 8, FT_HISTORY_LENGTH);
     106    return (TRUE);
     107  }
     108
     109  /* all others require '=' in column 8 */
     110  if (p[8] != '=') return (FALSE);
     111
     112  /* comment from data line */
     113  if (!strcmp (mode, "%C")) {
     114    q = gfits_keyword_end (p) + 3;
     115    q = MIN (p + 80, q);
     116    bzero (tmp, 81);
     117    Nchar = MIN (80, p + 80 - q);
     118    memcpy (tmp, q, Nchar);
     119    stripwhite (tmp);
     120    strcpy (va_arg (argp, char *), tmp);
     121    return (TRUE);
     122  }
     123
     124  /* boolean data, requires int target */
     125  if (!strcmp (mode, "%t")) {
     126    s = gfits_keyword_start (p);
     127    if (*s == 'T') {
     128      *va_arg (argp, int *) = TRUE;
     129      return (TRUE);
     130    }
     131    if (*s == 'F') {
     132      *va_arg (argp, int *) = FALSE;   
     133      return (TRUE);
     134    }
     135  }
     136
     137  /* no valid mode found */
     138  return (FALSE);
     139}
     140
    107141# define HIERARCH_LENGTH 71
    108142int gfits_vscan_hierarch (Header *header, char *field, char *mode, int N, va_list argp) {
Note: See TracChangeset for help on using the changeset viewer.