| 10 |  | #include  <sys/types.h> | 
| 11 |  | #include  <fcntl.h> | 
| 12 |  | #include  <string.h> | 
| 13 | + | #include  <time.h> | 
| 14 |  |  | 
| 15 |  | #ifdef getc_unlocked            /* avoid horrendous overhead of flockfile */ | 
| 16 |  | #undef getc | 
| 17 | + | #undef getchar | 
| 18 |  | #undef putc | 
| 19 | + | #undef putchar | 
| 20 | + | #undef feof | 
| 21 | + | #undef ferror | 
| 22 |  | #define getc    getc_unlocked | 
| 23 | + | #define getchar getchar_unlocked | 
| 24 |  | #define putc    putc_unlocked | 
| 25 | + | #define putchar putchar_unlocked | 
| 26 | + | #ifndef __cplusplus | 
| 27 | + | #define feof    feof_unlocked | 
| 28 | + | #define ferror  ferror_unlocked | 
| 29 |  | #endif | 
| 30 | + | #endif | 
| 31 |  |  | 
| 32 |  | #ifdef __cplusplus | 
| 33 |  | extern "C" { | 
| 34 |  | #endif | 
| 35 | + | /* identify header lines */ | 
| 36 | + | #define  MAXFMTLEN      64 | 
| 37 | + | #define  isheadid(s)    headidval(NULL,s) | 
| 38 | + | #define  isformat(s)    formatval(NULL,s) | 
| 39 | + | #define  isdate(s)      dateval(NULL,s) | 
| 40 | + | #define  isgmt(s)       gmtval(NULL,s) | 
| 41 | + |  | 
| 42 | + | #define  LATLONSTR      "LATLONG=" | 
| 43 | + | #define  LLATLONSTR     8 | 
| 44 | + | #define  islatlon(hl)           (!strncmp(hl,LATLONSTR,LLATLONSTR)) | 
| 45 | + | #define  latlonval(ll,hl)       sscanf((hl)+LLATLONSTR, "%f %f", \ | 
| 46 | + | &(ll)[0],&(ll)[1]) | 
| 47 | + | #define  fputlatlon(lat,lon,fp) fprintf(fp,"%s %.6f %.6f\n",LATLONSTR,lat,lon) | 
| 48 | + | /* defined in header.c */ | 
| 49 | + | extern void     newheader(const char *t, FILE *fp); | 
| 50 | + | extern int      headidval(char *r, const char *s); | 
| 51 | + | extern int      dateval(time_t *t, const char *s); | 
| 52 | + | extern int      gmtval(time_t *t, const char *s); | 
| 53 | + | extern void     fputdate(time_t t, FILE *fp); | 
| 54 | + | extern void     fputnow(FILE *fp); | 
| 55 | + | extern void     printargs(int ac, char **av, FILE *fp); | 
| 56 | + | extern int      formatval(char fmt[MAXFMTLEN], const char *s); | 
| 57 | + | extern void     fputformat(const char *s, FILE *fp); | 
| 58 | + | extern int      nativebigendian(void); | 
| 59 | + | extern int      isbigendian(const char *s); | 
| 60 | + | extern void     fputendian(FILE *fp); | 
| 61 | + | typedef int gethfunc(char *s, void *p); /* callback to process header lines */ | 
| 62 | + | extern int      getheader(FILE *fp, gethfunc *f, void *p); | 
| 63 | + | extern int      globmatch(const char *pat, const char *str); | 
| 64 | + | extern int      checkheader(FILE *fin, char fmt[MAXFMTLEN], FILE *fout); | 
| 65 | + | /* defined in fltdepth.c */ | 
| 66 | + | extern int      open_float_depth(const char *fname, long expected_length); | 
| 67 |  | /* defined in badarg.c */ | 
| 68 |  | extern int      badarg(int ac, char **av, char *fl); | 
| 69 |  | /* defined in expandarg.c */ | 
| 70 | + | extern int      envexpchr, filexpchr; | 
| 71 |  | extern int      expandarg(int *acp, char ***avp, int n); | 
| 72 |  | /* defined in fdate.c */ | 
| 73 |  | extern time_t   fdate(char *fname); | 
| 96 |  | extern void     putstr(char *s, FILE *fp); | 
| 97 |  | extern void     putint(long i, int siz, FILE *fp); | 
| 98 |  | extern void     putflt(double f, FILE *fp); | 
| 99 | < | extern int      putbinary(char *s, int elsiz, int nel, FILE *fp); | 
| 99 | > | extern int      putbinary(const void *s, int elsiz, int nel, FILE *fp); | 
| 100 |  | extern char     *getstr(char *s, FILE *fp); | 
| 101 |  | extern long     getint(int siz, FILE *fp); | 
| 102 |  | extern double   getflt(FILE *fp); | 
| 103 | < | extern int      getbinary(char *s, int elsiz, int nel, FILE *fp); | 
| 103 | > | extern int      getbinary(void *s, int elsiz, int nel, FILE *fp); | 
| 104 |  | /* defined in rexpr.c */ | 
| 105 |  | extern int      ecompile(char *sp, int iflg, int wflag); | 
| 106 |  | extern char     *expsave(void); | 
| 114 |  | extern char     *savqstr(char *s); | 
| 115 |  | extern void     freeqstr(char *s); | 
| 116 |  | /* defined in wordfile.c */ | 
| 117 | < | extern int      wordfile(char **words, char *fname); | 
| 118 | < | extern int      wordstring(char **avl, char *str); | 
| 117 | > | extern int      wordfile(char **words, int nargs, char *fname); | 
| 118 | > | extern int      wordstring(char **avl, int nargs, char *str); | 
| 119 |  | /* defined in words.c */ | 
| 120 |  | extern char     *atos(char *rs, int nb, char *s); | 
| 121 |  | extern char     *nextword(char *cp, int nb, char *s); | 
| 131 |  | extern float *  matchlamp(char *s); | 
| 132 |  | extern int      loadlamps(char *file); | 
| 133 |  | extern void     freelamps(void); | 
| 134 | + |  | 
| 135 | + | #ifndef strlcpy                         /* defined in option strlcpy.c */ | 
| 136 | + | extern size_t   strlcpy(char *dst, const char *src, size_t siz); | 
| 137 | + | extern size_t   strlcat(char *dst, const char *src, size_t siz); | 
| 138 | + | #endif | 
| 139 |  |  | 
| 140 |  | #ifdef __cplusplus | 
| 141 |  | } |