File: he.h

package info (click to toggle)
libhdf4 4.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 30,288 kB
  • sloc: ansic: 128,699; sh: 15,015; fortran: 12,444; java: 5,863; xml: 1,205; makefile: 790; yacc: 678; pascal: 418; perl: 360; javascript: 203; lex: 163; csh: 41
file content (186 lines) | stat: -rw-r--r-- 5,698 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF.  The full HDF copyright notice, including       *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/.  *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* he.h -- header file for HDFedit */
#include "hdf.h"

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * the following may not exist on all systems it should define stuff
 * like fork(), and other system calls
 */
#ifdef H4_HAVE_UNISTD_H
#include <unistd.h>
#endif

#ifdef DEBUG
#define ASSERT(e)                                                                                            \
    {                                                                                                        \
        if (!(e)) {                                                                                          \
            fprintf(stderr, "Assertion failed: file %s, line %d\n", __FILE__, __LINE__);                     \
            exit(1);                                                                                         \
        }                                                                                                    \
    }
#define NOT_REACHED()                                                                                        \
    {                                                                                                        \
        fprintf(stderr, "Should not reach: file %s, line %d\n", __FILE__, __LINE__);                         \
        exit(1);                                                                                             \
    }
#else
#define ASSERT(e)     /* empty assertion */
#define NOT_REACHED() /* empty */
#endif                /* DEBUG */

#define HE_ARG_SZ     30
#define HE_DESC_SZ    8192
#define HE_COLOR_SZ   256
#define HE_PALETTE_SZ 768
#define HE_BUF_SZ     1024

/* return status */
#define HE_OK   0
#define HE_FAIL -1
#define YES     1
#define NO      0

/* options */
#define HE_AMBIG      -2
#define HE_NOTFOUND   -1
#define HE_ALL        1
#define HE_BACKUP     2
#define HE_HELP       3
#define HE_LONGOUT    4
#define HE_NOBACKUP   5
#define HE_REMOTE     6
#define HE_VERBOSE    7
#define HE_FILE       8
#define HE_KEEP       9
#define HE_POSITION   10
#define HE_EXPANSION  11
#define HE_LARGE      12
#define HE_RDONLY     13
#define HE_BATCH      14
#define HE_OFFSET     15
#define HE_ASCII      16
#define HE_OCTAL      17
#define HE_HEX        18
#define HE_DECIMAL    19
#define HE_FLOAT      20
#define HE_DIMS       21
#define HE_IMAGE      22
#define HE_PALETTE    23
#define HE_RASTER     24
#define HE_RLE        25
#define HE_IMCOMP     26
#define HE_DOGROUP    27
#define HE_LENGTH     28
#define HE_ATTACHTO   29
#define HE_LABEL      30
#define HE_DESCRIPTOR 31
#define HE_EDITOR     32

#define HE_BYTE     33
#define HE_SHORT    34
#define HE_DOUBLE   35
#define HE_RAW      36
#define HE_USHORT   37
#define HE_UDECIMAL 38

/* label bits for predicate keys */
#define HE_PREDICATE  0x8000
#define HE_COMPARATOR 0x4000

/* predicate keys */
#define HEK_NULL    0
#define HEK_TAG     1
#define HEK_REF     2
#define HEK_EQUAL   3
#define HEK_NEQUAL  4
#define HEK_GRT     5
#define HEK_GEQUAL  6
#define HEK_LESST   7
#define HEK_LEQUAL  8
#define HEK_ALL     9
#define HEK_SUCCEED 10
#define HEK_FAIL    11
#define HEK_GROUP   12

/* argument type */
#define HE_NUMBER 1
#define HE_STRING 2

typedef int (*HE_FUNC)(void *);

typedef struct he_cmd {
    int            argc;
    char          *argv[HE_ARG_SZ];
    HE_FUNC        func;
    struct he_cmd *sub, *next;
} HE_CMD;

typedef struct he_pred {
    int key, Comp, argType;
    union {
        int   i;
        char *str;
    } arg;
} HE_PRED;

typedef struct DFdesc_str {
    uint16 tag, ref;
    int32  length, offset;
} DFdesc, *DFdesc_ptr;

typedef struct tag_ref_struct {
    uint16 tag;
    uint16 ref;
} tag_ref, *tag_ref_ptr;

typedef struct he_group {
    int         desc;
    int         size;
    tag_ref_ptr ddList;
} HE_GROUP;

extern int       he_status;
extern int       he_numDesc;
extern int       he_currDesc;
extern int       he_numGrp;
extern int       he_remote;
extern char     *he_file;
extern DFdesc   *he_desc;
extern HE_GROUP *he_grp;

/*
 *  ----------------- Convenient Macros ---------------------
 */

#define unkOpt(st)   fprintf(stderr, "Unknown option: %s.\n", st)
#define unkArg(st)   fprintf(stderr, "Unknown argument: %s.\n", st)
#define ambigOpt(st) fprintf(stderr, "Ambiguous option: %s.\n", st)
#define irrOpt(st)   fprintf(stderr, "Irrelevant option: %s.\n", st)
#define noFile()     fprintf(stderr, "No file is opened.\n")

#define isAnnot(t) (t == DFTAG_DIL || t == DFTAG_DIA)
#define isRig(t)   (t == DFTAG_RIG)
#define currTag    (he_desc[he_currDesc].tag)
#define currGrpNo  (desc2Grp(he_currDesc))
#define currDesc   ((DFdesc *)he_desc + he_currDesc)

#include "he_proto.h"

/* end of he.h */