1 /******************************************************************************
2 *
3 *  NSSDC/CDF					      Header for CDF toolkit.
4 *
5 *  Version 1.3c, 14-Nov-97, Hughes STX.
6 *
7 *  Modification history:
8 *
9 *   V1.0   9-Dec-94, J Love	Original version.
10 *   V1.0a 20-Jan-95, J Love	IRIX 6.x (64-bit).
11 *   V1.0b  3-Mar-95, J Love	Pass `char' as `int'.  `EncodeKeyDefinitions'
12 *				prototype moved to `windoz.h'.
13 *   V1.1   6-Apr-95, J Love	POSIX.
14 *   V1.1a 18-Apr-95, J Love	More POSIX.
15 *   V1.1b 22-May-95, J Love	EPOCH styles.  Added `MakeNUL'.  Prototypes
16 *				for `ASSIGNx', `EQx', etc. moved here.
17 *   V1.1c 13-Jun-95, J Love	EPOCH custom format.
18 *   V1.2   1-Sep-95, J Love	Added prototypes for routines used by
19 *				CDFexport.  Hyper groups.
20 *   V1.2a 19-Sep-95, J Love	Macintosh event handling.
21 *   V1.2b 29-Sep-95, J Love	Macintosh dialog filtering.  Executing clock
22 *				for Macintosh.  Macintosh cursors.
23 *   V1.3  24-Sep-96, J Love	CDF V2.6.
24 *   V1.3a 21-Feb-97, J Love	Removed RICE.
25 *   V1.3b 28-Feb-97, J Love	Windows NT for MS Visual C/C++ on an IBM PC.
26 *   V1.3c 14-Nov-97, J Love	More Windows NT.
27 *   V3.3  10-Jan-09, M Liu      Added Mac or Linux on PPC running 64-bit mode.
28 *
29 *****************************************************************************/
30 
31 #if !defined(CDFTOOLSh_INCLUDEd__)
32 #define CDFTOOLSh_INCLUDEd__
33 
34 /*****************************************************************************
35 * Include files.
36 *****************************************************************************/
37 
38 #include "cdfdist.h"
39 
40 /*****************************************************************************
41 * Miscellaneous.
42 *****************************************************************************/
43 
44 #define INPUT_MAJOR             0
45 #define useDEFAULTcacheSIZE	0
46 
47 /*****************************************************************************
48 * Macintosh-specific...
49 *****************************************************************************/
50 
51 #if defined(mac)
52 #  define RETURN_KEYCODE	36
53 #  define ENTER_KEYCODE		76
54 #  define PAGEup_KEYCODE	116
55 #  define PAGEdown_KEYCODE	121
56 #  define UParrow_KEYCODE	126
57 #  define DOWNarrow_KEYCODE	125
58 #  define PERIOD_KEYCODE	47
59 #  define E_KEYCODE		14
60 #  define R_KEYCODE		15
61 #  define S_KEYCODE		1
62 #  define Q_KEYCODE		12
63 #  define O_KEYCODE		31
64 #  define N_KEYCODE		45
65 #  define SO_STATUS_LINE_LEN	83
66 #  define ARROW_CURSOR		(&(qd.arrow))
67 #  define CDF_CURSOR		(*(GetCursor((short)(CDF_CURSORri))))
68 #endif
69 
70 /*****************************************************************************
71 * Abort keys for CDF Toolkit programs.  On the Macintosh the Command-Period
72 * causes an abort.
73 *****************************************************************************/
74 
75 #if defined(vms)
76 #  define ABORTkey(key) (key == KB_CTRL_Y || key == KB_CTRL_C)
77 #endif
78 
79 #if defined(unix) || defined(posixSHELL) || defined(dos) || defined(win32)
80 #  define ABORTkey(key) (key == KB_CTRL_C)
81 #endif
82 
83 #if defined(mac)
84 #  define ABORTkeyMAC(event) \
85 ((((event.message & keyCodeMask) >> 8) == PERIOD_KEYCODE) && \
86  ((event.modifiers & cmdKey) != 0))
87 #endif
88 
89 /*****************************************************************************
90 * CHECKforABORTso.
91 *****************************************************************************/
92 
93 #if defined(mac)
94 #  define CHECKforABORTso		CheckForAbortSOmac();
95 #else
96 #  if defined(win32) && !defined(ALONE)
97 #    define CHECKforABORTso		CheckForAbortSOwin32();
98 #  else
99 #    define CHECKforABORTso \
100 
101 #  endif
102 #endif
103 
104 /*****************************************************************************
105 * Matching constants.
106 *****************************************************************************/
107 
108 #define NOMATCH			(-1)
109 #define MATCHES			(-2)
110 
111 /*****************************************************************************
112 * Justification constants (used by `CatToString').
113 *****************************************************************************/
114 
115 #define LEFT_JUSTIFY		1
116 #define CENTER_JUSTIFY		2
117 #define RIGHT_JUSTIFY		3
118 
119 /*****************************************************************************
120 * Directory constants.
121 *****************************************************************************/
122 
123 #define DU_MAX_DIR_LEN		512
124 #define DU_MAX_NAME_LEN		256
125 #define DU_MAX_PATTERNS		16
126 
127 /*****************************************************************************
128 * EPOCH/time constants.
129 *****************************************************************************/
130 
131 #define TIME_STAMP_LEN		31
132 
133 #define EPOCH0_STYLE		0		/* Standard */
134 #define EPOCH1_STYLE		1
135 #define EPOCH2_STYLE		2
136 #define EPOCH3_STYLE		3
137 #define EPOCHf_STYLE		4		/* Use C/Fortran format. */
138 #define EPOCHx_STYLE		5		/* Use custom format. */
139 
140 /*****************************************************************************
141 * QOP constants.
142 *****************************************************************************/
143 
144 #define QOP_MAX_ARGVs	40
145 #define QOP_MAX_PARMs	40
146 #define QOP_MAX_QUALs	30
147 
148 /*****************************************************************************
149 * QOP structure.
150 *****************************************************************************/
151 
152 typedef struct QOPstruct {
153 int Nparms;
154 char *parms[QOP_MAX_PARMs];
155 int qualEntered[QOP_MAX_QUALs];
156 char *qualOpt[QOP_MAX_QUALs];
157 } QOP;
158 
159 /******************************************************************************
160 * Reporting constants.
161 ******************************************************************************/
162 
163 #define ERRORs		0
164 #define WARNs		1
165 #define INFOs		2
166 
167 /******************************************************************************
168 * Format specifiers.
169 ******************************************************************************/
170 
171 #if defined(alphaosf) || defined(IRIX64bit) || defined(SOLARIS64) || \
172     defined(__amd64) || defined(__x86_64__) || defined(__ia64__) || \
173     defined(__PPC64__) || defined(__ppc64__)
174 #  define Int32FORMAT	"%d"
175 #  define Int64FORMAT   "%lld"
176 #  define Int32uFORMAT	"%u"
177 #  define Int32FORMATmod	""
178 #  define Int32hexFORMAT	"0x%08X"
179 #  if defined(alphaosf)
180 #    define Int64hexFORMAT      "0x%016X"
181 #  else
182 #    define Int64hexFORMAT      "0x%016llX"
183 #  endif
184 #else
185 #  define Int32FORMAT	"%ld"
186 #if defined(win32)
187 #  define Int64FORMAT   "%I64d"
188 #else
189 #  define Int64FORMAT   "%lld"
190 #endif
191 #  define Int32uFORMAT	"%lu"
192 #  define Int32FORMATmod	"l"
193 #  define Int32hexFORMAT	"0x%08lX"
194 #if defined(win32)
195 #  define Int64hexFORMAT        "0x%016I64X"
196 #else
197 #  define Int64hexFORMAT        "0x%016llX"
198 #endif
199 #endif
200 
201 /*****************************************************************************
202 * Possible variable value selections (for SkeletonTable).
203 *****************************************************************************/
204 
205 #define NOvalues	0
206 #define NRVvalues	1
207 #define RVvalues	2
208 #define ALLvalues	3
209 #define NAMEDvalues	4
210 
211 /******************************************************************************
212 * Current directory macro.
213 ******************************************************************************/
214 
215 #if defined(vms)
216 #  define CURRENTDIRECTORY "[]"
217 #endif
218 #if defined(unix) || defined(dos) || defined(posixSHELL) || defined(win32)
219 #  define CURRENTDIRECTORY "."
220 #endif
221 #if defined(mac)
222 #  define CURRENTDIRECTORY ":"
223 #endif
224 
225 /******************************************************************************
226 * NoMoreAccess.
227 ******************************************************************************/
228 
229 #define NoMoreAccess(id) \
230 (StatusBAD(BOO(id == NULL, \
231 	   CDFlib(CONFIRM_,CDF_ACCESS_,NULL_), \
232 	   CDFlib(SELECT_,CDF_,id,CONFIRM_,CDF_ACCESS_,NULL_))))
233 
234 /******************************************************************************
235 * Hyper groups.
236 ******************************************************************************/
237 
238 #define HYPER_READ(id,zVar,hyperX,buffer) \
239 CDFlib (SELECT_, CDF_, id, \
240 		 BOO(zVar,zVAR_RECNUMBER_, \
241 			  rVARs_RECNUMBER_), hyperX.recNumber, \
242 		 BOO(zVar,zVAR_RECCOUNT_, \
243 			  rVARs_RECCOUNT_), hyperX.recCount, \
244 		 BOO(zVar,zVAR_RECINTERVAL_, \
245 			  rVARs_RECINTERVAL_), hyperX.recInterval, \
246 		 BOO(zVar,zVAR_DIMINDICES_, \
247 			  rVARs_DIMINDICES_), hyperX.dimIndices, \
248 		 BOO(zVar,zVAR_DIMCOUNTS_, \
249 			  rVARs_DIMCOUNTS_), hyperX.dimCounts, \
250 		 BOO(zVar,zVAR_DIMINTERVALS_, \
251 			  rVARs_DIMINTERVALS_), hyperX.dimIntervals, \
252 	GET_, BOO(zVar,zVAR_HYPERDATA_,rVAR_HYPERDATA_), buffer, \
253 	NULL_)
254 
255 #define HYPER_WRITE(id,zVar,hyperX,buffer) \
256 CDFlib (SELECT_, CDF_, id, \
257 		 BOO(zVar,zVAR_RECNUMBER_, \
258 			  rVARs_RECNUMBER_), hyperX.recNumber, \
259 		 BOO(zVar,zVAR_RECCOUNT_, \
260 			  rVARs_RECCOUNT_), hyperX.recCount, \
261 		 BOO(zVar,zVAR_RECINTERVAL_, \
262 			  rVARs_RECINTERVAL_), hyperX.recInterval, \
263 		 BOO(zVar,zVAR_DIMINDICES_, \
264 			  rVARs_DIMINDICES_), hyperX.dimIndices, \
265 		 BOO(zVar,zVAR_DIMCOUNTS_, \
266 			  rVARs_DIMCOUNTS_), hyperX.dimCounts, \
267 		 BOO(zVar,zVAR_DIMINTERVALS_, \
268 			  rVARs_DIMINTERVALS_), hyperX.dimIntervals, \
269 	PUT_, BOO(zVar,zVAR_HYPERDATA_,rVAR_HYPERDATA_), buffer, \
270 	NULL_)
271 
272 struct GroupStruct {
273   long nRecGroups;
274   long firstRecCount;
275   long lastRecCount;
276   long nDimGroups[CDF_MAX_DIMS];
277   long firstDimCount[CDF_MAX_DIMS];
278   long lastDimCount[CDF_MAX_DIMS];
279   long recGroupN;			/* Used for incrementing. */
280   long dimGroupN[CDF_MAX_DIMS];		/* Used for incrementing. */
281 };
282 
283 struct HyperStruct {
284   long recNumber;
285   long recCount;
286   long recInterval;
287   long dimIndices[CDF_MAX_DIMS];
288   long dimCounts[CDF_MAX_DIMS];
289   long dimIntervals[CDF_MAX_DIMS];
290 };
291 
292 /******************************************************************************
293 * PCT.
294 ******************************************************************************/
295 
296 #define NO_PCT		(-1)
297 #define PCT(n,N,x,X)	((int)((n*100*X + 100*x)/(N*X)))
298 
299 /*****************************************************************************
300 * Sizes/limits.
301 *****************************************************************************/
302 
303 #define SCREEN_WIDTH			80
304 #define SCREEN_HEIGHT               	24
305 #define MAX_SCREENLINE_LEN          	79
306 #define MAX_QUALIFIER_NAME_LEN		40
307 #define MAX_nonSTRING_VALUE_LEN     	320
308 #define MAX_KEY_TOKEN_LEN           	20
309 #define MAX_GZIP_TOKEN_LEN           	6
310 #define MAX_TOKEN_LEN			30
311 #define MAX_SEVERITY_TEXT_LEN		20
312 #define MAX_MESSAGE_TEXT_LEN		80
313 #define MAX_PROGRAM_NAME_LEN		25
314 #define MAX_ENCODED_INT4_LEN		10
315 #define MAX_REPORTMASK_LEN		40
316 #define MAX_oTEXT_LEN			150
317 #define MAX_CACHESIZES_LEN		30
318 #define MAX_TOLERANCES_LEN              30
319 
320 #if defined(BORLANDC)
321 #  define BORLANDC_STACK_SIZE		12000u
322 #  define BORLANDC_OVERLAY_SIZE		0x4000	/* 16-byte paragraphs. */
323 #endif
324 
325 #if defined(mac)
326 #  define MAX_LINES_WHEN_PAGING		24
327 #else
328 #  define MAX_LINES_WHEN_PAGING		22
329 #endif
330 
331 /******************************************************************************
332 * BLANKs78 (and BLANKs40).
333 *
334 *    This macro is used to initialize a static character string to a size
335 * large enough to be used for a line in a window.  Normally that would be
336 * 78 characters because the left-most and right-most columns of a window are
337 * part of the border.  We'll make it a few more just in case a header line
338 * runs a little long (because of a value larger than expected).
339 *
340 ******************************************************************************/
341 
342 #define BLANKs78 "                                                                                                 "
343 #define BLANKs40 "                                             "
344 
345 /*****************************************************************************
346 * Symbol(s) for displaying illegal/special values.
347 *****************************************************************************/
348 
349 #if defined(FP1cpu) || defined(FP2cpu)
350 #  define NEGATIVEzeroSYMBOL	"-0.0"
351 #endif
352 
353 #if defined(FP3cpu) || defined(FP4cpu)
354 #  define NEGATIVEzeroSYMBOL	"<Illegal,-0.0>"
355 #endif
356 
357 /*****************************************************************************
358 * Exit macros.
359 *****************************************************************************/
360 
361 #if defined(vms)
362 #  define EXIT_SUCCESS_	SS$_NORMAL
363 #  define EXIT_FAILURE_	SS$_ABORT
364 #else
365 #  define EXIT_SUCCESS_	0
366 #  define EXIT_FAILURE_	1
367 #endif
368 
369 #define Exit exit(EXIT_SUCCESS_)
370 #define ExitBAD exit(EXIT_FAILURE_)
371 
372 /*****************************************************************************
373 * Byte/short extraction macros.
374 *****************************************************************************/
375 
376 #define HighSHORTinLONG(l) ((short) (l >> 16))
377 #define LowSHORTinLONG(l) ((short) (l & 0xFFFF))
378 
379 /******************************************************************************
380 * `main' macros.
381 ******************************************************************************/
382 
383 #if defined(mac)
384 #  define MAIN int main ()
385 #else
386 #  define MAIN int main (argc, argv) int argc; char *argv[];
387 #endif
388 
389 /******************************************************************************
390 * NULpString.
391 *    Macro to check if a Pascal null-string (length of zero).
392 ******************************************************************************/
393 
394 #define NULpString(string) (string[0] == 0)
395 
396 /******************************************************************************
397 * AOSs1/AOSs2/.../AOSsN.
398 *   These macros are necessary because some compilers (eg. GNU C, the Digital
399 * C compiler on a DEC Alpha running OpenVMS, etc.) seem to have a problem with
400 * initialized arrays of arrays of characters (arrays of strings).  If an
401 * attempt is made to modify one of the strings an access violation will occur.
402 * In those cases where there are two or more arrays of strings with the same
403 * number of strings, two separate macros will be needed to keep duplicate
404 * variable names from occurring (eg. AOSs1 & AOSs1A).
405 ******************************************************************************/
406 
407 #define AOSs1(arrayofstrings,string0) \
408 static char _1line0_[] = string0; \
409 static char *arrayofstrings[] = { _1line0_ };
410 
411 #define AOSs1A(arrayofstrings,string0) \
412 static char _1Aline0_[] = string0; \
413 static char *arrayofstrings[] = { _1Aline0_ };
414 
415 #define AOSs1B(arrayofstrings,string0) \
416 static char _1Bline0_[] = string0; \
417 static char *arrayofstrings[] = { _1Bline0_ };
418 
419 #define AOSs1C(arrayofstrings,string0) \
420 static char _1Cline0_[] = string0; \
421 static char *arrayofstrings[] = { _1Cline0_ };
422 
423 #define AOSs1D(arrayofstrings,string0) \
424 static char _1Dline0_[] = string0; \
425 static char *arrayofstrings[] = { _1Dline0_ };
426 
427 #define AOSs1E(arrayofstrings,string0) \
428 static char _1Eline0_[] = string0; \
429 static char *arrayofstrings[] = { _1Eline0_ };
430 
431 #define AOSs2(arrayofstrings,string0,string1) \
432 static char _2line0_[] = string0; \
433 static char _2line1_[] = string1; \
434 static char *arrayofstrings[] = { _2line0_, _2line1_ };
435 
436 #define AOSs2A(arrayofstrings,string0,string1) \
437 static char _2Aline0_[] = string0; \
438 static char _2Aline1_[] = string1; \
439 static char *arrayofstrings[] = { _2Aline0_, _2Aline1_ };
440 
441 #define AOSs2B(arrayofstrings,string0,string1) \
442 static char _2Bline0_[] = string0; \
443 static char _2Bline1_[] = string1; \
444 static char *arrayofstrings[] = { _2Bline0_, _2Bline1_ };
445 
446 #define AOSs2C(arrayofstrings,string0,string1) \
447 static char _2Cline0_[] = string0; \
448 static char _2Cline1_[] = string1; \
449 static char *arrayofstrings[] = { _2Cline0_, _2Cline1_ };
450 
451 #define AOSs3(arrayofstrings,string0,string1,string2) \
452 static char _3line0_[] = string0; \
453 static char _3line1_[] = string1; \
454 static char _3line2_[] = string2; \
455 static char *arrayofstrings[] = { _3line0_, _3line1_, _3line2_ };
456 
457 #define AOSs4(arrayofstrings,string0,string1,string2,string3) \
458 static char _4line0_[] = string0; \
459 static char _4line1_[] = string1; \
460 static char _4line2_[] = string2; \
461 static char _4line3_[] = string3; \
462 static char *arrayofstrings[] = { _4line0_, _4line1_, _4line2_, _4line3_ };
463 
464 #define AOSs5(arrayofstrings,string0,string1,string2,string3,string4) \
465 static char _5line0_[] = string0; \
466 static char _5line1_[] = string1; \
467 static char _5line2_[] = string2; \
468 static char _5line3_[] = string3; \
469 static char _5line4_[] = string4; \
470 static char *arrayofstrings[] = { \
471   _5line0_, _5line1_, _5line2_, _5line3_, _5line4_ \
472 };
473 
474 #define AOSs6(arrayofstrings,string0,string1,string2,string3,string4,string5) \
475 static char _6line0_[] = string0; \
476 static char _6line1_[] = string1; \
477 static char _6line2_[] = string2; \
478 static char _6line3_[] = string3; \
479 static char _6line4_[] = string4; \
480 static char _6line5_[] = string5; \
481 static char *arrayofstrings[] = { \
482   _6line0_, _6line1_, _6line2_, _6line3_, _6line4_, _6line5_ \
483 };
484 
485 #define AOSs11(arrayofstrings,string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10) \
486 static char _11line0_[] = string0; \
487 static char _11line1_[] = string1; \
488 static char _11line2_[] = string2; \
489 static char _11line3_[] = string3; \
490 static char _11line4_[] = string4; \
491 static char _11line5_[] = string5; \
492 static char _11line6_[] = string6; \
493 static char _11line7_[] = string7; \
494 static char _11line8_[] = string8; \
495 static char _11line9_[] = string9; \
496 static char _11line10_[] = string10; \
497 static char *arrayofstrings[] = { \
498   _11line0_, _11line1_, _11line2_, _11line3_, _11line4_, _11line5_, \
499   _11line6_, _11line7_, _11line8_, _11line9_, _11line10_ \
500 };
501 
502 #define AOSs15(arrayofstrings,string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12,string13,string14) \
503 static char _15line0_[] = string0; \
504 static char _15line1_[] = string1; \
505 static char _15line2_[] = string2; \
506 static char _15line3_[] = string3; \
507 static char _15line4_[] = string4; \
508 static char _15line5_[] = string5; \
509 static char _15line6_[] = string6; \
510 static char _15line7_[] = string7; \
511 static char _15line8_[] = string8; \
512 static char _15line9_[] = string9; \
513 static char _15line10_[] = string10; \
514 static char _15line11_[] = string11; \
515 static char _15line12_[] = string12; \
516 static char _15line13_[] = string13; \
517 static char _15line14_[] = string14; \
518 static char *arrayofstrings[] = { \
519   _15line0_, _15line1_, _15line2_, _15line3_, _15line4_, _15line5_, \
520   _15line6_, _15line7_, _15line8_, _15line9_, _15line10_, _15line11_, \
521   _15line12_, _15line13_, _15line14_ \
522 };
523 
524 #define AOSs18(arrayofstrings,string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12,string13,string14,string15,string16,string17) \
525 static char _18line0_[] = string0; \
526 static char _18line1_[] = string1; \
527 static char _18line2_[] = string2; \
528 static char _18line3_[] = string3; \
529 static char _18line4_[] = string4; \
530 static char _18line5_[] = string5; \
531 static char _18line6_[] = string6; \
532 static char _18line7_[] = string7; \
533 static char _18line8_[] = string8; \
534 static char _18line9_[] = string9; \
535 static char _18line10_[] = string10; \
536 static char _18line11_[] = string11; \
537 static char _18line12_[] = string12; \
538 static char _18line13_[] = string13; \
539 static char _18line14_[] = string14; \
540 static char _18line15_[] = string15; \
541 static char _18line16_[] = string16; \
542 static char _18line17_[] = string17; \
543 static char *arrayofstrings[] = { \
544   _18line0_, _18line1_, _18line2_, _18line3_, _18line4_, _18line5_, \
545   _18line6_, _18line7_, _18line8_, _18line9_, _18line10_, _18line11_, \
546   _18line12_, _18line13_, _18line14_, _18line15_, _18line16_, _18line17_ \
547 };
548 
549 /******************************************************************************
550 * MAKEbooARGv/MAKEstrARGv.
551 * Macros used to build argc/argv on a Macintosh and under Win32.
552 ******************************************************************************/
553 
554 #if defined(mac) || defined(win32)
555 #  define MAKEbooARGv(argv,n,boo,t,f) { \
556 char tS[] = t; \
557 char fS[] = f; \
558 size_t len = strlen (BOO(boo,tS,fS)); \
559 (*argv)[n] = (char *) cdf_AllocateMemory (len + 1, FatalError); \
560 strcpyX ((*argv)[n++], BOO(boo,tS,fS), 0); \
561 }
562 #  define MAKEstrARGv(argv,n,str) { \
563 char *s = (char *) str; \
564 (*argv)[n] = (char *) cdf_AllocateMemory (strlen(s) + 1, FatalError);\
565 strcpyX ((*argv)[n++], s, 0); \
566 }
567 #endif
568 
569 /******************************************************************************
570 * Global variables.
571 ******************************************************************************/
572 
573 #if defined(TOOLBOX1)
574 #  if defined(mac)
575 Logical pagingOn = FALSE;	/* Online help doesn't need to be paged. */
576 #  else
577 Logical pagingOn = TRUE;	/* So online help will be paged. */
578 #  endif
579 int soLineCount = 0;
580 char pgmName[MAX_PROGRAM_NAME_LEN+1] = "";
581 #else
582 extern Logical pagingOn;
583 extern int soLineCount;
584 extern char pgmName[MAX_PROGRAM_NAME_LEN+1];
585 #endif
586 
587 #if defined(mac)
588 #  if defined(TOOLBOX2)
589 WindowPtr soWindowP = NULL;	/* If NULL, then a FSI toolkit program. */
590 TEHandle soTextH;
591 ControlHandle soVscrollH;
592 Rect soTextRect;
593 MenuHandle appleMenuHso, fileMenuHso;
594 short soDestHeight;
595 short soViewHeight;
596 short soLineHeight;
597 int soNviewLines;
598 Point soAtPoint;
599 Rect soStatusRect;
600 char soStatusLine[SO_STATUS_LINE_LEN+1] = "";
601 clock_t startClock;
602 int lastSecond;
603 #  else
604 extern WindowPtr soWindowP;
605 extern TEHandle soTextH;
606 extern ControlHandle soVscrollH;
607 extern Rect soTextRect;
608 extern MenuHandle appleMenuHso, fileMenuHso;
609 extern short soDestHeight;
610 extern short soViewHeight;
611 extern short soLineHeight;
612 extern int soNviewLines;
613 extern Point soAtPoint;
614 extern Rect soStatusRect;
615 extern char soStatusLine[SO_STATUS_LINE_LEN+1];
616 extern clock_t startClock;
617 extern int lastSecond;
618 #  endif
619 #endif
620 
621 /*****************************************************************************
622 * Function prototypes.
623 *****************************************************************************/
624 
625 void ASSIGNx PROTOARGs((void *, void *, long, long));
626 Logical EQx PROTOARGs((void *, void *, long, long));
627 Logical NEx PROTOARGs((void *, void *, long, long));
628 Logical LEx PROTOARGs((void *, void *, long, long));
629 Logical LTx PROTOARGs((void *, void *, long, long));
630 Logical GEx PROTOARGs((void *, void *, long, long));
631 Logical GTx PROTOARGs((void *, void *, long, long));
632 Logical IsDir PROTOARGs((char *));
633 Logical IsWild PROTOARGs((char *));
634 Logical IsCDF PROTOARGs((char *));
635 void EncodeRecordJustify PROTOARGs((char *string, long recN, int minWidth));
636 void EncodeIndicesJustify PROTOARGs((
637   char *string, long numDims, long indices[], int minWidth
638 ));
639 void EncodeRecordIndicesJustify PROTOARGs((
640   char *string, long recN, long numDims, long indices[], int minWidth
641 ));
642 void Justify PROTOARGs((char *string, int minWidth));
643 void RemoveLeadingBlanks PROTOARGs((char *string));
644 void RemoveTrailingBlanks PROTOARGs((char *string));
645 void RemoveWhiteSpace PROTOARGs((char *string));
646 void CopyToField PROTOARGs((char *string, char *field, int length));
647 void CopyFromField PROTOARGs((char *field, int length, char *string));
648 void CatToString PROTOARGs((
649   char *string, char *cat, int length, int justify, char *more
650 ));
651 double SystemClock PROTOARGs((void));
652 void ParsePath PROTOARGs((
653   char *path, char dir[DU_MAX_DIR_LEN+1], char name[DU_MAX_NAME_LEN+1]
654 ));
655 QOP *Qop PROTOARGs((int, char *[], char *[], int *));
656 FILE *OnlineHelpFP PROTOARGs((char *, char *));
657 void PageOLH PROTOARGs((char *, char *));
658 int WriteOut PROTOARGs((FILE *, char *));
659 char PickDelimiter PROTOARGs((char *, size_t));
660 void ConvertDataType PROTOARGs((long, long, void *, long, long, void *));
661 int EncodeDimensionality PROTOARGs((char *, long, long *));
662 int EncodeVariances PROTOARGs((char *, long, long, long *));
663 int EncodeRecordIndices PROTOARGs((char *, long, long, long, long *, long *));
664 int EncodeRecordIndicesVARY PROTOARGs((char *, long, long, long *));
665 int EncodeString PROTOARGs((long, char *, char *, int, int));
666 int EncodeValue PROTOARGs((long, void *, char *, int));
667 int EncodeValueFormat PROTOARGs((
668   long dataType, void *binary, char *text, char *format, int minWidth,
669   int maxWidth, int style
670 ));
671 int EncodeValuesFormat PROTOARGs((
672   long dataType, long numElems, void *binary, char *text, char *format,
673   int minWidth, int maxWidth, int style
674 ));
675 void EncodeNegativeZero PROTOARGs((char *string, char *format));
676 void WriteStringValue PROTOARGs((FILE *, long, void *, int, int));
677 void WriteEntryValue PROTOARGs((FILE *, long, long, void *, int, int));
678 char *EncodingToken PROTOARGs((long));
679 char *MajorityToken PROTOARGs((long));
680 char *FormatToken PROTOARGs((long));
681 char *ScopeToken PROTOARGs((long));
682 char *VarianceToken PROTOARGs((long));
683 char *TFvarianceToken PROTOARGs((long));
684 char *DataTypeToken PROTOARGs((long));
685 char *CompressionToken PROTOARGs((long cType, long cParms[CDF_MAX_PARMS]));
686 char *SparsenessToken PROTOARGs((
687   long sRecordsType, long sArraysType, long sArraysParms[CDF_MAX_PARMS]
688 ));
689 char *ChecksumToken PROTOARGs((long));
690 long WhichDataType PROTOARGs((char *));
691 long WhichFormat PROTOARGs((char *));
692 long WhichMajority PROTOARGs((char *));
693 long WhichEncoding PROTOARGs((char *));
694 long WhichCompression PROTOARGs((char *, long *, long *));
695 long WhichRecSparseness PROTOARGs((char *));
696 long WhichChecksum PROTOARGs((char *));
697 Logical DecodeValues PROTOARGs((char *, long, long *, void **, int));
698 Logical DecodeVariances PROTOARGs((char *, long, long *, long *));
699 Logical DecodeDelimitedString PROTOARGs((char *, char *));
700 Logical DecodeDimensionality PROTOARGs((char *, long *, long *));
701 Logical DecodeRecordAndIndices PROTOARGs((
702   char *string, long *recN, long *nIndices, long indices[CDF_MAX_DIMS]
703 ));
704 char *NextNonSpace PROTOARGs((char *cp));
705 char *NextNonDigit PROTOARGs((char *cp));
706 int FormatWidth PROTOARGs((char *));
707 int FormatPrecision PROTOARGs((char *));
708 char *strstrIgCase PROTOARGs((char *string, char *substring));
709 char *strchrIgCase PROTOARGs((char *str, int chr));
710 int strcmpIgCase PROTOARGs((char *string1, char *string2));
711 int strncmpIgCase PROTOARGs((char *string1, char *string2, size_t count));
712 int strncmpIgCasePattern PROTOARGs((char *string1, char *string2,
713   size_t count
714 ));
715 void OutputWithMargin PROTOARGs((
716   FILE *fp, char *text, int maxLen, int marginLen
717 ));
718 void InitPctLog PROTOARGs((int *lastPct, Logical *pctOn));
719 void UpdatePctLog PROTOARGs((int pct, int *lastPct));
720 void RefreshPctLog PROTOARGs((int lastPct));
721 void CleanupPctLog PROTOARGs((Logical *pctOn));
722 void Ncharacters PROTOARGs((FILE *fp, int nChars, int chr));
723 void CatNcharacters PROTOARGs((char *string, int nChars, int chr));
724 void CpyNcharacters PROTOARGs((char *string, int nChars, int chr));
725 Logical TFqualifier PROTOARGs((
726   QOP *qop, Logical *variable, int Tx, int Fx, Logical defaultTF,
727   char *conflictText
728 ));
729 Logical S2qualifierLong PROTOARGs((
730   QOP *qop, long *variable, int S1x, long S1, int S2x, long S2, long defaultS,
731   char *conflictText
732 ));
733 Logical S3qualifierLong PROTOARGs((
734   QOP *qop, long *variable, int S1x, long S1, int S2x, long S2, int S3x,
735   long S3, long defaultS, char *conflictText
736 ));
737 void BlankPadRight PROTOARGs((char *string, int count));
738 CDFstatus GetFormatEntry PROTOARGs((Logical, long, char **));
739 Logical ParseOptionList PROTOARGs((
740   int nTokens, char *tokens[], char *list, Logical present[]
741 ));
742 char *NULedString PROTOARGs((char *existingString, size_t nCharacters));
743 void ReadCharStdIn PROTOARGs((char *key));
744 void WriteStringStdOut PROTOARGs((char *string, size_t length));
745 void DisplayError PROTOARGs((char *message));
746 void DisplayWarning PROTOARGs((char *message));
747 void DisplayInfo PROTOARGs((char *message));
748 int DirList PROTOARGs((
749   char *dir, int patternC, char **patternS, char ***dirS, char ***nameS
750 ));
751 int CDFdirList PROTOARGs((char *path, char ***dirS, char ***nameS));
752 void RemoveExtensions PROTOARGs((int, char **));
753 char *TempCharStr PROTOARGs((int character));
754 void DisplayStatistics PROTOARGs((
755   char *label, vSTATS *vStatsDotCDF, vSTATS *vStatsStage,
756   vSTATS *vStatsCompress
757 ));
758 void BuildStatistics PROTOARGs((
759   char *label, vSTATS *vStats, char temp1[MAX_SCREENLINE_LEN+1],
760   char temp2[MAX_SCREENLINE_LEN+1], char temp3[MAX_SCREENLINE_LEN+1]
761 ));
762 int WriteOutSO VARPROTOARGs((char *format, ...));
763 int WriteOutFP VARPROTOARGs((FILE *fp, char *format, ...));
764 void IncrRecordIndicesFirstLast PROTOARGs((
765   Logical rowMajor, long *recordN, long numDims, long first[], long last[],
766   long indices[]
767 ));
768 void IncrIndicesFirstLastRow PROTOARGs((
769   long numDims, long first[], long last[], long indices[]
770 ));
771 void IncrIndicesFirstLastCol PROTOARGs((
772   long numDims, long first[], long last[], long indices[]
773 ));
774 Logical AllocateBuffers PROTOARGs((
775   long nRecords, long numDims, long dimSizes[], struct GroupStruct *groups,
776   int nScalarBuffers, int nHyperBuffers, Byte **handles[],
777   size_t nValueBytes[], Logical rowMajor, int minNofHypers,
778   void (*fatalFnc) PROTOARGs((char *msg))
779 ));
780 void InitHyperParms PROTOARGs((
781   struct HyperStruct *hyperX, struct GroupStruct *groups, long numDims,
782   long *nHypers, long *nValues
783 ));
784 void IncrHyperParms PROTOARGs((
785   struct HyperStruct *hyperX, struct GroupStruct *groups, long numDims,
786   Logical rowMajor, long *nValues
787 ));
788 Logical HyperFullRecord PROTOARGs((struct GroupStruct *groups, long numDims));
789 long HypersPerRecord PROTOARGs((struct GroupStruct *groups, long numDims));
790 Logical HyperStartOfRecord PROTOARGs((
791   struct HyperStruct *hyperX, long numDims
792 ));
793 void WriteOutPct PROTOARGs((int pct));
794 Logical SwitchMajority PROTOARGs((
795   Byte *buffer, Logical rowMajor, long numDims, long dimSizes[],
796   long recCount, size_t nValueBytes
797 ));
798 Logical CompressedCDF PROTOARGs((char *CDFpath));
799 Logical SameCompressions PROTOARGs((
800   long cType1, long cParms1[CDF_MAX_PARMS],
801   long cType2, long cParms2[CDF_MAX_PARMS]
802 ));
803 Logical SameSparsenesses PROTOARGs((
804   long sRecordsType1, long sArraysType1, long sArraysParms1[CDF_MAX_PARMS],
805   long sRecordsType2, long sArraysType2, long sArraysParms2[CDF_MAX_PARMS]
806 ));
807 int LongWidth PROTOARGs((long value));
808 int Long64Width PROTOARGs((OFF_T value));
809 void DisplayIdentification PROTOARGs((char *name));
810 Logical  ParseCacheSizes PROTOARGs((
811   char *sizes, long *workingCache, long *stageCache, long *compressCache
812 ));
813 int FindUniqueMatch PROTOARGs((char *target, char *strings[]));
814 void ParseStringForTokens PROTOARGs((int token, char *string, char *items[]));
815 int GetNumTokens PROTOARGs((int token, char *string));
816 
817 #if defined(mac)
818 void MacExecuteSO PROTOARGs((
819   Logical (*exeFnc)(int argC, char *argV[]),
820   Logical (*qopFnc)(int *argC, char **argV[])
821 ));
822 void MacExecuteFSI PROTOARGs((
823   Logical (*exeFnc)(int argC, char *argV[]),
824   Logical (*qopFnc)(int *argC, char **argV[])
825 ));
826 void MacExecuteTimer PROTOARGs((Logical (*exeFnc)(), int argC, char *argV[]));
827 void MacMessageDialog PROTOARGs((char *severityText, char *messageText));
828 void InitMacUI PROTOARGs((void));
829 void FreeMacQOPs PROTOARGs((int argC, char *argV[]));
830 void CalcBounds PROTOARGs((
831   Rect *rect, int width, int height, double topPct, double leftPct
832 ));
833 void ResetSO PROTOARGs((Logical clear));
834 void InitMacSO PROTOARGs((void));
835 void InitMacMenusSO PROTOARGs((void));
836 void InitMacFSI PROTOARGs((void));
837 void InitMacMenusFSI PROTOARGs((void));
838 void UpdateSOscrollBars PROTOARGs((void));
839 void DrawStatusLine PROTOARGs((char *text));
840 void MacReadKeySO PROTOARGs((char *key));
841 Logical SaveSO PROTOARGs((Logical as));
842 Logical BuildMacPath PROTOARGs((
843   FSSpec *spec, char path[DU_MAX_PATH_LEN+1], Logical stripExt
844 ));
845 void DisplayAbout PROTOARGs((void));
846 void WriteOutMacSO PROTOARGs((char *text));
847 void WriteStringSO PROTOARGs((char *string, size_t length));
848 void MacSOoverFlow PROTOARGs((void));
849 void CheckForAbortSOmac PROTOARGs((void));
850 void RemoveCDFSktExtension PROTOARGs((
851   char *sktName, char *sktPath
852 ));
853 pascal Boolean FilterForCDFs PROTOARGs((ParmBlkPtr pb));
854 pascal Boolean FilterForSKTs PROTOARGs((ParmBlkPtr pb));
855 #  ifndef __MWERKS__
856 pascal void OutlineDefaultButton PROTOARGs((DialogPtr window, short itemN));
857 pascal Boolean FilterDialogQOPfsi PROTOARGs((
858   DialogPtr dialog, EventRecord *event, short *itemN
859 ));
860 pascal Boolean FilterDialogQOPso PROTOARGs((
861   DialogPtr dialog, EventRecord *event, short *itemN
862 ));
863 #  else
864 pascal void OutlineDefaultButton PROTOARGs((DialogPtr window, SInt16 itemN));
865 pascal Boolean FilterDialogQOPfsi PROTOARGs((
866   DialogPtr dialog, EventRecord *event, SInt16 *itemN
867 ));
868 pascal Boolean FilterDialogQOPso PROTOARGs((
869   DialogPtr dialog, EventRecord *event, SInt16 *itemN
870 ));
871 #  endif
872 #endif
873 
874 #if defined(__cplusplus)
875 extern "C" {
876 #endif
877 void FatalError PROTOARGs((char *message));
878 char *StatusCodeReportOptions PROTOARGs((Logical e, Logical w, Logical i));
879 #if defined(win32)
880 #  if defined(SO)
881 void CheckForAbortSOwin32 PROTOARGs((void));
882 void WriteOutWin32 PROTOARGs((char *text));
883 #  else
884 void TransferTextAttrs PROTOARGs((char *text, char *attrs));
885 void SetCursorPosition PROTOARGs((int row, int col));
886 #  endif
887 void WinMessageDialog PROTOARGs((char *severityText, char *messageText));
888 void DebugMessage PROTOARGs((char *text));
889 #endif
890 #if defined(__cplusplus)
891 }
892 #endif
893 
894 /*****************************************************************************/
895 
896 #endif
897