1 #ifndef P2C_H
2 #define P2C_H
3 
4 
5 /* Header file for code generated by "p2c", the Pascal-to-C translator */
6 
7 /* "p2c"  Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation.
8  * By Dave Gillespie, daveg@synaptics.com.  Version 1.21alpha-07.Dec.93.
9  * This file may be copied, modified, etc. in any way.  It is not restricted
10  * by the licence agreement accompanying p2c itself.
11  */
12 
13 
14 #include <stdio.h>
15 
16 #define DOUBLE double
17 
18 
19 
20 /* If the following heuristic fails, compile -DBSD=0 for non-BSD systems,
21    or -DBSD=1 for BSD systems. */
22 
23 #ifdef M_XENIX
24 # define BSD 0
25 #endif
26 
27 #ifdef vms
28 # define BSD 0
29 # ifndef __STDC__
30 #  define __STDC__ 1
31 # endif
32 #endif
33 
34 #ifdef __TURBOC__
35 # define MSDOS 1
36 #endif
37 
38 #ifdef MSDOS
39 # define BSD 0
40 #endif
41 
42 #ifdef FILE       /* a #define in BSD, a typedef in SYSV (hp-ux, at least) */
43 # ifndef BSD	  /*  (a convenient, but horrible kludge!) */
44 #  define BSD 1
45 # endif
46 #endif
47 
48 #ifdef BSD
49 # if !BSD
50 #  undef BSD
51 # endif
52 #endif
53 
54 
55 #if (defined(__STDC__) && !defined(M_XENIX)) || defined(__TURBOC__)
56 # include <stdlib.h>
57 # include <stddef.h>
58 # define HAS_STDLIB
59 # if defined(vms) || defined(__TURBOC__)
60 #  define NON_ANSI_CAT
61 # endif
62 #else
63 # ifndef BSD
64 #  ifndef __TURBOC__
65 #   include <memory.h>
66 #  endif
67 # endif
68 # ifdef hpux
69 #  ifdef _INCLUDE__STDC__
70 #   include <stddef.h>
71 #   include <stdlib.h>
72 #   define HAS_STDLIB
73 #  endif
74 # endif
75 # include <sys/types.h>
76 # if !defined(MSDOS) || defined(__TURBOC__)
77 #  define NON_ANSI_CAT
78 # endif
79 #endif
80 
81 #if defined(NON_ANSI_CAT) && !defined(ANSI_CAT)
82 # ifdef NON_ANSI_CAT_ALTERNATE
83 #  define __CAT__(a,b)a/**/b
84 # else
85 #  define __ID__(a)a
86 #  define __CAT__(a,b)__ID__(a)b
87 # endif
88 #else
89 # define __CAT__(a,b)a##b
90 #endif
91 
92 
93 #ifdef BSD
94 # include <strings.h>
95 # define memcpy(a,b,n) (bcopy(b,a,n),a)
96 # define memcmp(a,b,n) bcmp(a,b,n)
97 # define strchr(s,c) index(s,c)
98 # define strrchr(s,c) rindex(s,c)
99 #else
100 # include <string.h>
101 #endif
102 
103 #include <ctype.h>
104 #include <math.h>
105 #include <setjmp.h>
106 #include <assert.h>
107 
108 
109 #ifndef NO_LACK
110 #ifdef vms
111 
112 #define LACK_LABS
113 #define LACK_MEMMOVE
114 #define LACK_MEMCPY
115 
116 #else
117 
118 #define LACK_LABS       /* Undefine these if your library has these */
119 #define LACK_MEMMOVE
120 
121 #endif
122 #endif
123 
124 
125 typedef struct __p2c_jmp_buf {
126     struct __p2c_jmp_buf *next;
127     jmp_buf jbuf;
128 } __p2c_jmp_buf;
129 
130 
131 /* Warning: The following will not work if setjmp is used simultaneously.
132    This also violates the ANSI restriction about using vars after longjmp,
133    but a typical implementation of longjmp will get it right anyway. */
134 
135 #ifndef FAKE_TRY
136 # define TRY(x)         do { __p2c_jmp_buf __try_jb;  \
137 			     __try_jb.next = __top_jb;  \
138 			     if (!setjmp((__top_jb = &__try_jb)->jbuf)) {
139 # define RECOVER(x)	__top_jb = __try_jb.next; } else {
140 # define RECOVER2(x,L)  __top_jb = __try_jb.next; } else {  \
141 			     if (0) { L: __top_jb = __try_jb.next; }
142 # define ENDTRY(x)      } } while (0)
143 #else
144 # define TRY(x)         if (1) {
145 # define RECOVER(x)     } else do {
146 # define RECOVER2(x,L)  } else do { L: ;
147 # define ENDTRY(x)      } while (0)
148 #endif
149 
150 
151 
152 #ifdef M_XENIX  /* avoid compiler bug */
153 # define SHORT_MAX  (32767)
154 # define SHORT_MIN  (-32768)
155 #endif
156 
157 
158 /* The following definitions work only on twos-complement machines */
159 #ifndef SHORT_MAX
160 # define SHORT_MAX  ((short)(((unsigned short) -1) >> 1))
161 # define SHORT_MIN  (~SHORT_MAX)
162 #endif
163 
164 #ifndef INT_MAX
165 # define INT_MAX    ((int)(((unsigned int) -1) >> 1))
166 # define INT_MIN    (~INT_MAX)
167 #endif
168 
169 #ifndef LONG_MAX
170 # define LONG_MAX   ((long)(((unsigned long) -1) >> 1))
171 # define LONG_MIN   (~LONG_MAX)
172 #endif
173 
174 #ifndef SEEK_SET
175 # define SEEK_SET   0
176 # define SEEK_CUR   1
177 # define SEEK_END   2
178 #endif
179 
180 #ifndef EXIT_SUCCESS
181 # ifdef vms
182 #  define EXIT_SUCCESS  1
183 #  define EXIT_FAILURE  (02000000000L)
184 # else
185 #  define EXIT_SUCCESS  0
186 #  define EXIT_FAILURE  1
187 # endif
188 #endif
189 
190 
191 #define SETBITS  32
192 
193 
194 #if defined(__STDC__) || defined(__TURBOC__)
195 # if !defined(vms) && !defined(M_LINT)
196 #  define Signed    signed
197 # else
198 #  define Signed
199 # endif
200 # define Void       void      /* Void f() = procedure */
201 # ifndef Const
202 #  define Const     const
203 # endif
204 # ifndef Volatile
205 # define Volatile   volatile
206 # endif
207 # ifdef M_LINT
208 #  define PP(x)     ()
209 #  define PV()	    ()
210 typedef char *Anyptr;
211 # else
212 #  define PP(x)     x         /* function prototype */
213 #  define PV()      (void)    /* null function prototype */
214 typedef void *Anyptr;
215 # endif
216 #else
217 # define Signed
218 # define Void       void
219 # ifndef Const
220 #  define Const
221 # endif
222 # ifndef Volatile
223 #  define Volatile
224 # endif
225 # define PP(x)      ()
226 # define PV()       ()
227 typedef char *Anyptr;
228 #endif
229 
230 #ifdef __GNUC__
231 # define Inline     inline
232 #else
233 # define Inline
234 #endif
235 
236 #define Register    register  /* Register variables */
237 #define Char        char      /* Characters (not bytes) */
238 
239 #ifndef Static
240 # define Static     static    /* Private global funcs and vars */
241 #endif
242 
243 #ifndef Local
244 # define Local      static    /* Nested functions */
245 #endif
246 
247 typedef Signed   char schar;
248 typedef unsigned char uchar;
249 typedef unsigned char boolean;
250 
251 #ifndef NO_DECLARE_ALFA
252 typedef Char alfa[10];
253 #endif
254 
255 #ifndef true
256 # define true    1
257 # define false   0
258 #endif
259 
260 #ifndef TRUE
261 # define TRUE    1
262 # define FALSE   0
263 #endif
264 
265 
266 typedef struct {
267     Anyptr proc, link;
268 } _PROCEDURE;
269 
270 #ifndef _FNSIZE
271 # define _FNSIZE  120
272 #endif
273 
274 
275 extern Void    PASCAL_MAIN  PP( (int, Char **) );
276 extern Char    **P_argv;
277 extern int     P_argc;
278 extern short   P_escapecode;
279 extern int     P_ioresult;
280 extern __p2c_jmp_buf *__top_jb;
281 
282 
283 #ifdef P2C_H_PROTO   /* if you have Ansi C but non-prototyped header files */
284 extern Char    *strcat      PP( (Char *, Const Char *) );
285 extern Char    *strchr      PP( (Const Char *, int) );
286 extern int      strcmp      PP( (Const Char *, Const Char *) );
287 extern Char    *strcpy      PP( (Char *, Const Char *) );
288 extern size_t   strlen      PP( (Const Char *) );
289 extern Char    *strncat     PP( (Char *, Const Char *, size_t) );
290 extern int      strncmp     PP( (Const Char *, Const Char *, size_t) );
291 extern Char    *strncpy     PP( (Char *, Const Char *, size_t) );
292 extern Char    *strrchr     PP( (Const Char *, int) );
293 
294 extern Anyptr   memchr      PP( (Const Anyptr, int, size_t) );
295 extern Anyptr   memmove     PP( (Anyptr, Const Anyptr, size_t) );
296 extern Anyptr   memset      PP( (Anyptr, int, size_t) );
297 #ifndef memcpy
298 extern Anyptr   memcpy      PP( (Anyptr, Const Anyptr, size_t) );
299 extern int      memcmp      PP( (Const Anyptr, Const Anyptr, size_t) );
300 #endif
301 
302 extern int      atoi        PP( (Const Char *) );
303 extern double   atof        PP( (Const Char *) );
304 extern long     atol        PP( (Const Char *) );
305 extern double   strtod      PP( (Const Char *, Char **) );
306 extern long     strtol      PP( (Const Char *, Char **, int) );
307 #endif /*P2C_H_PROTO*/
308 
309 #ifndef HAS_STDLIB
310 #ifndef NO_DECLARE_MALLOC
311 extern Anyptr   malloc      PP( (size_t) );
312 extern Void     free        PP( (Anyptr) );
313 #endif
314 #endif
315 
316 extern int      _OutMem     PV();
317 extern int      _CaseCheck  PV();
318 extern int      _NilCheck   PV();
319 extern int	_Escape     PP( (int) );
320 extern int	_EscIO      PP( (int) );
321 extern int	_EscIO2     PP( (int, Char *) );
322 
323 extern long     ipow        PP( (long, long) );
324 extern long     P_imax      PP( (long, long) );
325 extern long     P_imin      PP( (long, long) );
326 extern double   P_rmax      PP( (double, double) );
327 extern double   P_rmin      PP( (double, double) );
328 extern Char    *strsub      PP( (Char *, Char *, int, int) );
329 extern Char    *strltrim    PP( (Char *) );
330 extern Char    *strrtrim    PP( (Char *) );
331 extern Char    *strrpt      PP( (Char *, Char *, int) );
332 extern Char    *strpad      PP( (Char *, Char *, int, int) );
333 extern int      strpos2     PP( (Char *, Char *, int) );
334 extern long     memavail    PV();
335 extern int      P_peek      PP( (FILE *) );
336 extern int      P_eof       PP( (FILE *) );
337 extern int      P_eoln      PP( (FILE *) );
338 extern Void     P_readpaoc  PP( (FILE *, Char *, int) );
339 extern Void     P_readlnpaoc PP( (FILE *, Char *, int) );
340 extern long     P_maxpos    PP( (FILE *) );
341 extern Char    *P_trimname  PP( (Char *, int) );
342 extern long    *P_setunion  PP( (long *, long *, long *) );
343 extern long    *P_setint    PP( (long *, long *, long *) );
344 extern long    *P_setdiff   PP( (long *, long *, long *) );
345 extern long    *P_setxor    PP( (long *, long *, long *) );
346 extern int      P_inset     PP( (unsigned, long *) );
347 extern int      P_setequal  PP( (long *, long *) );
348 extern int      P_subset    PP( (long *, long *) );
349 extern long    *P_addset    PP( (long *, unsigned) );
350 extern long    *P_addsetr   PP( (long *, unsigned, unsigned) );
351 extern long    *P_remset    PP( (long *, unsigned) );
352 extern long    *P_setcpy    PP( (long *, long *) );
353 extern long    *P_expset    PP( (long *, long) );
354 extern long     P_packset   PP( (long *) );
355 extern int      P_getcmdline PP( (int, int, Char *) );
356 extern Void     TimeStamp   PP( (int *, int *, int *,
357 				 int *, int *, int *) );
358 extern Void	P_sun_argv  PP( (char *, int, int) );
359 extern FILE    *_skipspaces PP( (FILE *) );
360 extern FILE    *_skipnlspaces PP( (FILE *) );
361 
362 
363 /* I/O error handling */
364 #define _CHKIO(cond,ior,val,def)  ((cond) ? P_ioresult=0,(val)  \
365 					  : P_ioresult=(ior),(def))
366 #define _SETIO(cond,ior)          (P_ioresult = (cond) ? 0 : (ior))
367 
368 /* Following defines are suitable for the HP Pascal operating system */
369 #define FileNotFound     10
370 #define FileNotOpen      13
371 #define FileWriteError   38
372 #define BadInputFormat   14
373 #define EndOfFile        30
374 
375 #define FILENOTFOUND     10
376 #define FILENOTOPEN      13
377 #define FILEWRITEERROR   38
378 #define BADINPUTFORMAT   14
379 #define ENDOFFILE        30
380 
381 /* Creating temporary files */
382 #if (defined(BSD) || defined(NO_TMPFILE)) && !defined(HAVE_TMPFILE)
383 # define tmpfile()  (fopen(tmpnam(NULL), "w+"))
384 #endif
385 
386 /* File buffers */
387 #define FILEBUF(f,sc,type) sc int __CAT__(f,_BFLAGS);   \
388 			   sc type __CAT__(f,_BUFFER)
389 #define FILEBUFNC(f,type)  int __CAT__(f,_BFLAGS);   \
390 			   type __CAT__(f,_BUFFER)
391 
392 #define RESETBUF(f,type)   (__CAT__(f,_BFLAGS) = 1)
393 #define SETUPBUF(f,type)   (__CAT__(f,_BFLAGS) = 0)
394 
395 #define GETFBUF(f,type)    (*((__CAT__(f,_BFLAGS) == 1 &&   \
396 			       ((__CAT__(f,_BFLAGS) = 2),   \
397 				fread(&__CAT__(f,_BUFFER),  \
398 				      sizeof(type),1,(f)))),\
399 			      &__CAT__(f,_BUFFER)))
400 #define AGETFBUF(f,type)   ((__CAT__(f,_BFLAGS) == 1 &&   \
401 			     ((__CAT__(f,_BFLAGS) = 2),   \
402 			      fread(__CAT__(f,_BUFFER),  \
403 				    sizeof(type),1,(f)))),\
404 			    __CAT__(f,_BUFFER))
405 
406 #define PUTFBUF(f,type,v)  (GETFBUF(f,type) = (v))
407 #define CPUTFBUF(f,v)      (PUTFBUF(f,char,v))
408 #define APUTFBUF(f,type,v) (memcpy(AGETFBUF(f,type), (v),  \
409 				   sizeof(__CAT__(f,_BUFFER))))
410 
411 #define GET(f,type)        (__CAT__(f,_BFLAGS) == 1 ?   \
412 			    fread(&__CAT__(f,_BUFFER),sizeof(type),1,(f)) :  \
413 			    (__CAT__(f,_BFLAGS) = 1))
414 
415 #define PUT(f,type)        (fwrite(&__CAT__(f,_BUFFER),sizeof(type),1,(f)),  \
416 			    (__CAT__(f,_BFLAGS) = 0))
417 #define CPUT(f)            (PUT(f,char))
418 
419 #define BUFEOF(f)	   (__CAT__(f,_BFLAGS) != 2 && P_eof(f))
420 #define BUFFPOS(f)	   (ftell(f) - (__CAT__(f,_BFLAGS) == 2))
421 
422 typedef struct {
423     FILE *f;
424     int f_BFLAGS;    /* FILEBUFNC(f,Char); */
425     Char f_BUFFER;
426     Char name[_FNSIZE];
427 } _TEXT;
428 
429 /* Memory allocation */
430 #ifdef __GCC__
431 # define Malloc(n)  (malloc(n) ?: (Anyptr)(size_t)_OutMem())
432 #else
433 extern Anyptr __MallocTemp__;
434 # define Malloc(n)  ((__MallocTemp__ = malloc(n)) ? __MallocTemp__ : (Anyptr)(size_t)_OutMem())
435 #endif
436 #define FreeR(p)    (free((Anyptr)(p)))    /* used if arg is an rvalue */
437 #define Free(p)     (free((Anyptr)(p)), (p)=NULL)
438 
439 /* sign extension */
440 #define SEXT(x,n)   ((x) | -(((x) & (1L<<((n)-1))) << 1))
441 
442 /* packed arrays */   /* BEWARE: these are untested! */
443 #define P_getbits_UB(a,i,n,L)   ((int)((a)[(i)>>(L)-(n)] >>   \
444 				       (((~(i))&((1<<(L)-(n))-1)) << (n)) &  \
445 				       (1<<(1<<(n)))-1))
446 
447 #define P_getbits_SB(a,i,n,L)   ((int)((a)[(i)>>(L)-(n)] <<   \
448 				       (16 - ((((~(i))&((1<<(L)-(n))-1))+1) <<\
449 					      (n)) >> (16-(1<<(n))))))
450 
451 #define P_putbits_UB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |=   \
452 				 (x) << (((~(i))&((1<<(L)-(n))-1)) << (n)))
453 
454 #define P_putbits_SB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |=   \
455 				 ((x) & (1<<(1<<(n)))-1) <<   \
456 				 (((~(i))&((1<<(L)-(n))-1)) << (n)))
457 
458 #define P_clrbits_B(a,i,n,L)    ((a)[(i)>>(L)-(n)] &=   \
459 				 ~( ((1<<(1<<(n)))-1) <<   \
460 				   (((~(i))&((1<<(L)-(n))-1)) << (n))) )
461 
462 /* small packed arrays */
463 #define P_getbits_US(v,i,n)     ((int)((v) >> ((i)<<(n)) & (1<<(1<<(n)))-1))
464 #define P_getbits_SS(v,i,n)     ((int)((long)(v) << (SETBITS - (((i)+1) << (n))) >> (SETBITS-(1<<(n)))))
465 #define P_putbits_US(v,i,x,n)   ((v) |= (x) << ((i) << (n)))
466 #define P_putbits_SS(v,i,x,n)   ((v) |= ((x) & (1<<(1<<(n)))-1) << ((i)<<(n)))
467 #define P_clrbits_S(v,i,n)      ((v) &= ~( ((1<<(1<<(n)))-1) << ((i)<<(n)) ))
468 
469 #define P_max(a,b)   ((a) > (b) ? (a) : (b))
470 #define P_min(a,b)   ((a) < (b) ? (a) : (b))
471 
472 
473 /* Fix ANSI-isms */
474 
475 #ifdef LACK_LABS
476 # ifndef labs
477 #  define labs  my_labs
478    extern long my_labs PP( (long) );
479 # endif
480 #endif
481 
482 #ifdef LACK_MEMMOVE
483 # ifndef memmove
484 #  define memmove  my_memmove
485    extern Anyptr my_memmove PP( (Anyptr, Const Anyptr, size_t) );
486 # endif
487 #endif
488 
489 #ifdef LACK_MEMCPY
490 # ifndef memcpy
491 #  define memcpy  my_memcpy
492    extern Anyptr my_memcpy PP( (Anyptr, Const Anyptr, size_t) );
493 # endif
494 # ifndef memcmp
495 #  define memcmp  my_memcmp
496    extern int my_memcmp PP( (Const Anyptr, Const Anyptr, size_t) );
497 # endif
498 # ifndef memset
499 #  define memset  my_memset
500    extern Anyptr my_memset PP( (Anyptr, int, size_t) );
501 # endif
502 #endif
503 
504 /* Fix toupper/tolower on Suns and other stupid BSD systems */
505 #ifdef toupper
506 # undef toupper
507 # undef tolower
508 # define toupper(c)   my_toupper(c)
509 # define tolower(c)   my_tolower(c)
510 #endif
511 
512 #ifndef _toupper
513 # if 'A' == 65 && 'a' == 97
514 #  define _toupper(c)  ((c)-'a'+'A')
515 #  define _tolower(c)  ((c)-'A'+'a')
516 # else
517 #  ifdef toupper
518 #   undef toupper   /* hope these are shadowing real functions, */
519 #   undef tolower   /* because my_toupper calls _toupper! */
520 #  endif
521 #  define _toupper(c)  toupper(c)
522 #  define _tolower(c)  tolower(c)
523 # endif
524 #endif
525 
526 
527 #endif    /* P2C_H */
528 
529 
530 
531 /* End. */
532 
533 
534