OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
oli_toolbox.h
Go to the documentation of this file.
1 
2 /**************************************************************************/
3 /* toolbox.h */
4 /* */
5 /* Version: */
6 /* */
7 /* 1.0 March 31, 1994 */
8 /* */
9 /* Change History: */
10 /* */
11 /* 03-31-94 Original code */
12 /* 01-09-95 jsh - included <stdlib.h> */
13 /* */
14 /**************************************************************************/
15 
16 #ifndef __OLI_TOOLBOX_LOADED
17 #define __OLI_TOOLBOX_LOADED
18 
19 #include <stdlib.h>
20 #include <stdio.h>
21 #include <string.h>
22 #include <ctype.h>
23 #include <time.h>
24 
25 /**************************************************************************/
26 /* Symbol Definitions */
27 /**************************************************************************/
28 
29 #ifndef NULL
30 #define NULL 0
31 #endif
32 #ifndef TRUE
33 #define TRUE 1
34 #endif
35 #ifndef FALSE
36 #define FALSE 0
37 #endif
38 
39 #define TB_MAX_BUFFER 32767
40 #define TB_MAXLINE 2048 /* was 256 */
41 #define TB_MAXFNAME 80
42 #define TB_MAXPATH 256
43 #define TB_MAXTIME 40
44 #define TB_MAXNUM 20
45 
46 /**************************************************************************/
47 /* Macro Definitions */
48 /**************************************************************************/
49 
50 
51 #ifdef VAX
52 #define VmsError(zstatz) (!((zstatz)&1) && zstatz != SS$_ENDOFFILE && zstatz != SS$_ENDOFTAPE)
53 #endif
54 
55 #define RingThatBell(znumz) {int ziz; for (ziz=0; ziz < znumz; ++ziz) (void)printf("%c", (char) 7);}
56 #define CloseMe(zfptrz) {if (zfptrz != NULL) {(void)fclose(zfptrz); zfptrz = NULL;}}
57 #define LemmeGo(zmptrz) {if (zmptrz != NULL) {free(zmptrz); zmptrz = NULL;}}
58 #define SayGoodbye() {(void)printf("I'm out of memory and I can't get up!\n"); exit(1);}
59 #define LastChar(zstrz) (zstrz+strlen(zstrz)-1)
60 
61 #define NewString(zstrz, zsizez) \
62  {if (zsizez <= 1) \
63  zstrz = (char *)malloc(1); \
64  else \
65  zstrz = (char *)malloc(zsizez); \
66  if (zstrz == NULL) \
67  SayGoodbye() \
68  else \
69  *zstrz = '\0';}
70 
71 #define CopyString(zstrz, zoldz) \
72  {if (zoldz == NULL) \
73  zstrz = NULL; \
74  else \
75  { \
76  NewString(zstrz, ((long)(1+strlen(zoldz)))) \
77  (void)strcpy(zstrz,zoldz); \
78  }}
79 
80 #define AppendString(zstrz, znewz) \
81  {if (znewz != NULL) \
82  { \
83  if (zstrz == NULL) \
84  NewString(zstrz, (long)(1+strlen(znewz))) \
85  else \
86  zstrz = (char *)realloc(zstrz, 1+strlen(znewz)+strlen(zstrz)); \
87  if (zstrz == NULL) \
88  SayGoodbye() \
89  else \
90  (void)strcat(zstrz, znewz); \
91  }}
92 
93 #define StripLeading(zstrz, zstripz) \
94  {char *zcz; int len;\
95  for (zcz=zstrz; ((*zcz != '\0') && (*zcz == zstripz)); ++zcz) ; \
96  len = strlen(zcz) + 1; \
97  (void)memmove(zstrz, zcz, len);}
98 
99 #define StripTrailing(zstrz, zstripz) \
100  {char *zcz; \
101  for (zcz=LastChar(zstrz); ((zcz >= zstrz) && (*zcz == zstripz)); --zcz) \
102  *zcz = '\0';}
103 
104 #define StripUnprintables(zstrz) \
105  {char *zcz; \
106  for (zcz=LastChar(zstrz); ((zcz >= zstrz) && ((*zcz < ' ') || (*zcz > '~'))); --zcz) \
107  *zcz = '\0';}
108 
109 #define ReplaceChar(zstrz, zoldz, znewz) \
110  {char *zcz; \
111  for (zcz=zstrz; *zcz != '\0'; ++zcz) \
112  {if (*zcz == zoldz) *zcz = znewz;}}
113 
114 #define NotOneOfThese(zstrz, zsetz) (zstrz + strspn(zstrz, zsetz))
115 
116 #define UpperCase(zstrz) \
117  {char *zcz; \
118  for (zcz=zstrz; *zcz != '\0'; ++zcz) {*zcz=(char)toupper(*zcz);}}
119 
120 #define LowerCase(zstrz) \
121  {char *zcz; \
122  for (zcz=zstrz; *zcz != '\0'; ++zcz) {*zcz=(char)tolower(*zcz);}}
123 
124 #define DateTime(zascz) \
125  { \
126  struct tm *zptrz = {NULL}; \
127  time_t zltz; \
128  zltz = time(NULL); \
129  zptrz = localtime(&zltz); \
130  zascz = asctime(zptrz); \
131  zascz[strlen(zascz) -1] = '\0'; \
132  }
133 
134 /*
135 #define AtTheToneTheTimeWillBe(ztimez) \
136  { \
137  char *zascz = {NULL}; \
138  DateTime(zascz) \
139  (void)strcpy(ztimez, zascz); \
140  LemmeGo(zascz) \
141  }
142 */
143 
144 /**************************************************************************/
145 /* Typedefs */
146 /**************************************************************************/
147 
148 typedef unsigned short MASK;
149 
150 typedef struct tb_string_list
151 {
152  char *text;
154 
155 } TB_STRING_LIST;
156 
157 #define RemoveStringList(zlistz) \
158  { \
159  TB_STRING_LIST *znz, *znnz=NULL; \
160  for (znz=zlistz; znz != NULL; znz=znnz) \
161  { \
162  znnz = znz->next; \
163  LemmeGo(znz->text) \
164  LemmeGo(znz) \
165  } \
166  }
167 
168 #define NewStringList(zstrz, zlistz) \
169  { \
170  if (zlistz != NULL) RemoveStringList(zlistz) \
171  zlistz = (TB_STRING_LIST *) malloc(sizeof(TB_STRING_LIST)); \
172  zlistz->next = NULL; \
173  if (zlistz == NULL) SayGoodbye() \
174  if (zstrz == NULL) \
175  NewString(zlistz->text, 1) \
176  else \
177  CopyString(zlistz->text, zstrz) \
178  }
179 
180 #define AddStringToList(zstrz, zlistz) \
181  { \
182  TB_STRING_LIST *znz, *znnz=NULL; \
183  if (zlistz == NULL) \
184  NewStringList(zstrz, zlistz) \
185  else \
186  { \
187  for (znz=zlistz; znz->next != NULL; znz=znz->next) ; \
188  NewStringList(zstrz, znnz) \
189  znz->next = znnz; \
190  } \
191  }
192 
193 #define AddListToList(zfrom_listz, zto_listz) \
194  { \
195  TB_STRING_LIST *znz; \
196  if (zto_listz == NULL) \
197  zto_listz = zfrom_listz; \
198  else \
199  if (zfrom_listz != NULL) \
200  { \
201  for (znz=zto_listz; znz->next != NULL; znz=znz->next) ; \
202  znz->next = zfrom_listz; \
203  } \
204  }
205 
206 /**************************************************************************/
207 /* End of toolbox.h stuff */
208 /**************************************************************************/
209 
210 #endif /* __OLI_TOOLBOX_LOADED */
211 
unsigned short MASK
Definition: oli_toolbox.h:148
struct tb_string_list * next
Definition: oli_toolbox.h:153