| #ifndef P2C_H |
| #define P2C_H |
| |
| |
| /* Header file for code generated by "p2c", the Pascal-to-C translator */ |
| |
| /* "p2c" Copyright (C) 1989, 1990, 1991 Free Software Foundation. |
| * By Dave Gillespie, daveg@csvax.cs.caltech.edu. Version 1.20. |
| * This file may be copied, modified, etc. in any way. It is not restricted |
| * by the licence agreement accompanying p2c itself. |
| */ |
| |
| |
| #include <stdio.h> |
| |
| |
| |
| /* If the following heuristic fails, compile -DBSD=0 for non-BSD systems, |
| or -DBSD=1 for BSD systems. */ |
| |
| #ifdef M_XENIX |
| # define BSD 0 |
| #endif |
| |
| #ifdef vms |
| # define BSD 0 |
| # ifndef __STDC__ |
| # define __STDC__ 1 |
| # endif |
| #endif |
| |
| #ifdef __TURBOC__ |
| # define MSDOS 1 |
| #endif |
| |
| #ifdef MSDOS |
| # define BSD 0 |
| #endif |
| |
| #ifdef FILE /* a #define in BSD, a typedef in SYSV (hp-ux, at least) */ |
| # ifndef BSD /* (a convenient, but horrible kludge!) */ |
| # define BSD 1 |
| # endif |
| #endif |
| |
| #ifdef BSD |
| # if !BSD |
| # undef BSD |
| # endif |
| #endif |
| |
| |
| #if (defined(__STDC__) && !defined(M_XENIX)) || defined(__TURBOC__) |
| /*# include <stddef.h>*/ |
| # include <stdlib.h> |
| # define HAS_STDLIB |
| # if defined(vms) || defined(__TURBOC__) |
| # define __ID__(a)a |
| # endif |
| #else |
| # ifndef BSD |
| # ifndef __TURBOC__ |
| # include <memory.h> |
| # endif |
| # endif |
| # ifdef hpux |
| # ifdef _INCLUDE__STDC__ |
| # include <stddef.h> |
| # include <stdlib.h> |
| # endif |
| # endif |
| # include <sys/types.h> |
| # if !defined(MSDOS) || defined(__TURBOC__) |
| # define __ID__(a)a |
| # endif |
| #endif |
| |
| #ifdef __ID__ |
| # define __CAT__(a,b)__ID__(a)b |
| #else |
| # define __CAT__(a,b)a##b |
| #endif |
| |
| |
| #ifdef BSD |
| # include <strings.h> |
| # define memcpy(a,b,n) (bcopy(b,a,n),a) |
| # define memcmp(a,b,n) bcmp(a,b,n) |
| # define strchr(s,c) index(s,c) |
| # define strrchr(s,c) rindex(s,c) |
| #else |
| # include <string.h> |
| #endif |
| |
| #include <ctype.h> |
| #include <math.h> |
| #include <setjmp.h> |
| #include <assert.h> |
| |
| |
| #ifndef NO_LACK |
| #ifdef vms |
| |
| #define LACK_LABS |
| #define LACK_MEMMOVE |
| #define LACK_MEMCPY |
| |
| #else |
| |
| #define LACK_LABS /* Undefine these if your library has these */ |
| #define LACK_MEMMOVE |
| |
| #endif |
| #endif |
| |
| |
| typedef struct __p2c_jmp_buf { |
| struct __p2c_jmp_buf *next; |
| jmp_buf jbuf; |
| } __p2c_jmp_buf; |
| |
| |
| /* Warning: The following will not work if setjmp is used simultaneously. |
| This also violates the ANSI restriction about using vars after longjmp, |
| but a typical implementation of longjmp will get it right anyway. */ |
| |
| #ifndef FAKE_TRY |
| # define TRY(x) do { __p2c_jmp_buf __try_jb; \ |
| __try_jb.next = __top_jb; \ |
| if (!setjmp((__top_jb = &__try_jb)->jbuf)) { |
| # define RECOVER(x) __top_jb = __try_jb.next; } else { |
| # define RECOVER2(x,L) __top_jb = __try_jb.next; } else { \ |
| if (0) { L: __top_jb = __try_jb.next; } |
| # define ENDTRY(x) } } while (0) |
| #else |
| # define TRY(x) if (1) { |
| # define RECOVER(x) } else do { |
| # define RECOVER2(x,L) } else do { L: ; |
| # define ENDTRY(x) } while (0) |
| #endif |
| |
| |
| |
| #ifdef M_XENIX /* avoid compiler bug */ |
| # define SHORT_MAX (32767) |
| # define SHORT_MIN (-32768) |
| #endif |
| |
| |
| /* The following definitions work only on twos-complement machines */ |
| #ifndef SHORT_MAX |
| # define SHORT_MAX ((short)(((unsigned short) -1) >> 1)) |
| # define SHORT_MIN (~SHORT_MAX) |
| #endif |
| |
| #ifndef INT_MAX |
| # define INT_MAX ((int)(((unsigned int) -1) >> 1)) |
| # define INT_MIN (~INT_MAX) |
| #endif |
| |
| #ifndef LONG_MAX |
| # define LONG_MAX ((long)(((unsigned long) -1) >> 1)) |
| # define LONG_MIN (~LONG_MAX) |
| #endif |
| |
| #ifndef SEEK_SET |
| # define SEEK_SET 0 |
| # define SEEK_CUR 1 |
| # define SEEK_END 2 |
| #endif |
| |
| #ifndef EXIT_SUCCESS |
| # ifdef vms |
| # define EXIT_SUCCESS 1 |
| # define EXIT_FAILURE (02000000000L) |
| # else |
| # define EXIT_SUCCESS 0 |
| # define EXIT_FAILURE 1 |
| # endif |
| #endif |
| |
| |
| #define SETBITS 32 |
| |
| |
| #if defined(__STDC__) || defined(__TURBOC__) |
| # if !defined(vms) && !defined(M_LINT) |
| # define Signed signed |
| # else |
| # define Signed |
| # endif |
| # define Void void /* Void f() = procedure */ |
| # ifndef Const |
| # define Const const |
| # endif |
| # ifndef Volatile |
| # define Volatile volatile |
| # endif |
| # ifdef M_LINT |
| # define PP(x) () |
| # define PV() () |
| typedef char *Anyptr; |
| # else |
| # define PP(x) x /* function prototype */ |
| # define PV() (void) /* null function prototype */ |
| typedef void *Anyptr; |
| # endif |
| #else |
| # define Signed |
| # define Void void |
| # ifndef Const |
| # define Const |
| # endif |
| # ifndef Volatile |
| # define Volatile |
| # endif |
| # define PP(x) () |
| # define PV() () |
| typedef char *Anyptr; |
| #endif |
| |
| #ifdef __GNUC__ |
| # define Inline inline |
| #else |
| # define Inline |
| #endif |
| |
| #define Register register /* Register variables */ |
| #define Char char /* Characters (not bytes) */ |
| |
| #ifndef Static |
| # define Static static /* Private global funcs and vars */ |
| #endif |
| |
| #ifndef Local |
| # define Local static /* Nested functions */ |
| #endif |
| |
| typedef Signed char schar; |
| typedef unsigned char uchar; |
| typedef unsigned char boolean; |
| |
| #ifndef true |
| # define true 1 |
| # define false 0 |
| #endif |
| |
| #ifndef TRUE |
| # define TRUE 1 |
| # define FALSE 0 |
| #endif |
| |
| |
| typedef struct { |
| Anyptr proc, link; |
| } _PROCEDURE; |
| |
| #ifndef _FNSIZE |
| # define _FNSIZE 120 |
| #endif |
| |
| |
| extern Void PASCAL_MAIN PP( (int, Char **) ); |
| extern Char **P_argv; |
| extern int P_argc; |
| extern short P_escapecode; |
| extern int P_ioresult; |
| extern __p2c_jmp_buf *__top_jb; |
| |
| |
| #ifdef P2C_H_PROTO /* if you have Ansi C but non-prototyped header files */ |
| extern Char *strcat PP( (Char *, Const Char *) ); |
| extern Char *strchr PP( (Const Char *, int) ); |
| extern int strcmp PP( (Const Char *, Const Char *) ); |
| extern Char *strcpy PP( (Char *, Const Char *) ); |
| extern size_t strlen PP( (Const Char *) ); |
| extern Char *strncat PP( (Char *, Const Char *, size_t) ); |
| extern int strncmp PP( (Const Char *, Const Char *, size_t) ); |
| extern Char *strncpy PP( (Char *, Const Char *, size_t) ); |
| extern Char *strrchr PP( (Const Char *, int) ); |
| |
| extern Anyptr memchr PP( (Const Anyptr, int, size_t) ); |
| extern Anyptr memmove PP( (Anyptr, Const Anyptr, size_t) ); |
| extern Anyptr memset PP( (Anyptr, int, size_t) ); |
| #ifndef memcpy |
| extern Anyptr memcpy PP( (Anyptr, Const Anyptr, size_t) ); |
| extern int memcmp PP( (Const Anyptr, Const Anyptr, size_t) ); |
| #endif |
| |
| extern int atoi PP( (Const Char *) ); |
| extern double atof PP( (Const Char *) ); |
| extern long atol PP( (Const Char *) ); |
| extern double strtod PP( (Const Char *, Char **) ); |
| extern long strtol PP( (Const Char *, Char **, int) ); |
| #endif /*P2C_H_PROTO*/ |
| |
| #ifndef HAS_STDLIB |
| extern Anyptr malloc PP( (size_t) ); |
| extern Void free PP( (Anyptr) ); |
| #endif |
| |
| extern int _OutMem PV(); |
| extern int _CaseCheck PV(); |
| extern int _NilCheck PV(); |
| extern int _Escape PP( (int) ); |
| extern int _EscIO PP( (int) ); |
| |
| extern long ipow PP( (long, long) ); |
| extern Char *strsub PP( (Char *, Char *, int, int) ); |
| extern Char *strltrim PP( (Char *) ); |
| extern Char *strrtrim PP( (Char *) ); |
| extern Char *strrpt PP( (Char *, Char *, int) ); |
| extern Char *strpad PP( (Char *, Char *, int, int) ); |
| extern int strpos2 PP( (Char *, Char *, int) ); |
| extern long memavail PV(); |
| extern int P_peek PP( (FILE *) ); |
| extern int P_eof PP( (FILE *) ); |
| extern int P_eoln PP( (FILE *) ); |
| extern Void P_readpaoc PP( (FILE *, Char *, int) ); |
| extern Void P_readlnpaoc PP( (FILE *, Char *, int) ); |
| extern long P_maxpos PP( (FILE *) ); |
| extern Char *P_trimname PP( (Char *, int) ); |
| extern long *P_setunion PP( (long *, long *, long *) ); |
| extern long *P_setint PP( (long *, long *, long *) ); |
| extern long *P_setdiff PP( (long *, long *, long *) ); |
| extern long *P_setxor PP( (long *, long *, long *) ); |
| extern int P_inset PP( (unsigned, long *) ); |
| extern int P_setequal PP( (long *, long *) ); |
| extern int P_subset PP( (long *, long *) ); |
| extern long *P_addset PP( (long *, unsigned) ); |
| extern long *P_addsetr PP( (long *, unsigned, unsigned) ); |
| extern long *P_remset PP( (long *, unsigned) ); |
| extern long *P_setcpy PP( (long *, long *) ); |
| extern long *P_expset PP( (long *, long) ); |
| extern long P_packset PP( (long *) ); |
| extern int P_getcmdline PP( (int, int, Char *) ); |
| extern Void TimeStamp PP( (int *, int *, int *, |
| int *, int *, int *) ); |
| extern Void P_sun_argv PP( (char *, int, int) ); |
| |
| |
| /* I/O error handling */ |
| #define _CHKIO(cond,ior,val,def) ((cond) ? P_ioresult=0,(val) \ |
| : P_ioresult=(ior),(def)) |
| #define _SETIO(cond,ior) (P_ioresult = (cond) ? 0 : (ior)) |
| |
| /* Following defines are suitable for the HP Pascal operating system */ |
| #define FileNotFound 10 |
| #define FileNotOpen 13 |
| #define FileWriteError 38 |
| #define BadInputFormat 14 |
| #define EndOfFile 30 |
| |
| #define FILENOTFOUND 10 |
| #define FILENOTOPEN 13 |
| #define FILEWRITEERROR 38 |
| #define BADINPUTFORMAT 14 |
| #define ENDOFFILE 30 |
| |
| /* Creating temporary files */ |
| #if (defined(BSD) || defined(NO_TMPFILE)) && !defined(HAVE_TMPFILE) |
| # define tmpfile() (fopen(tmpnam(NULL), "w+")) |
| #endif |
| |
| /* File buffers */ |
| #define FILEBUF(f,sc,type) sc int __CAT__(f,_BFLAGS); \ |
| sc type __CAT__(f,_BUFFER) |
| #define FILEBUFNC(f,type) int __CAT__(f,_BFLAGS); \ |
| type __CAT__(f,_BUFFER) |
| |
| #define RESETBUF(f,type) (__CAT__(f,_BFLAGS) = 1) |
| #define SETUPBUF(f,type) (__CAT__(f,_BFLAGS) = 0) |
| |
| #define GETFBUF(f,type) (*((__CAT__(f,_BFLAGS) == 1 && \ |
| ((__CAT__(f,_BFLAGS) = 2), \ |
| fread(&__CAT__(f,_BUFFER), \ |
| sizeof(type),1,(f)))),\ |
| &__CAT__(f,_BUFFER))) |
| #define AGETFBUF(f,type) ((__CAT__(f,_BFLAGS) == 1 && \ |
| ((__CAT__(f,_BFLAGS) = 2), \ |
| fread(__CAT__(f,_BUFFER), \ |
| sizeof(type),1,(f)))),\ |
| __CAT__(f,_BUFFER)) |
| |
| #define PUTFBUF(f,type,v) (GETFBUF(f,type) = (v)) |
| #define CPUTFBUF(f,v) (PUTFBUF(f,char,v)) |
| #define APUTFBUF(f,type,v) (memcpy(AGETFBUF(f,type), (v), \ |
| sizeof(__CAT__(f,_BUFFER)))) |
| |
| #define GET(f,type) (__CAT__(f,_BFLAGS) == 1 ? \ |
| fread(&__CAT__(f,_BUFFER),sizeof(type),1,(f)) : \ |
| (__CAT__(f,_BFLAGS) = 1)) |
| |
| #define PUT(f,type) (fwrite(&__CAT__(f,_BUFFER),sizeof(type),1,(f)), \ |
| (__CAT__(f,_BFLAGS) = 0)) |
| #define CPUT(f) (PUT(f,char)) |
| |
| #define BUFEOF(f) (__CAT__(f,_BFLAGS) != 2 && P_eof(f)) |
| #define BUFFPOS(f) (ftell(f) - (__CAT__(f,_BFLAGS) == 2)) |
| |
| typedef struct { |
| FILE *f; |
| FILEBUFNC(f,Char); |
| Char name[_FNSIZE]; |
| } _TEXT; |
| |
| /* Memory allocation */ |
| #ifdef __GCC__ |
| # define Malloc(n) (malloc(n) ?: (Anyptr)_OutMem()) |
| #else |
| extern Anyptr __MallocTemp__; |
| # define Malloc(n) ((__MallocTemp__ = malloc(n)) ? __MallocTemp__ : (Anyptr)_OutMem()) |
| #endif |
| #define FreeR(p) (free((Anyptr)(p))) /* used if arg is an rvalue */ |
| #define Free(p) (free((Anyptr)(p)), (p)=NULL) |
| |
| /* sign extension */ |
| #define SEXT(x,n) ((x) | -(((x) & (1L<<((n)-1))) << 1)) |
| |
| /* packed arrays */ /* BEWARE: these are untested! */ |
| #define P_getbits_UB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] >> \ |
| (((~(i))&((1<<(L)-(n))-1)) << (n)) & \ |
| (1<<(1<<(n)))-1)) |
| |
| #define P_getbits_SB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] << \ |
| (16 - ((((~(i))&((1<<(L)-(n))-1))+1) <<\ |
| (n)) >> (16-(1<<(n)))))) |
| |
| #define P_putbits_UB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \ |
| (x) << (((~(i))&((1<<(L)-(n))-1)) << (n))) |
| |
| #define P_putbits_SB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \ |
| ((x) & (1<<(1<<(n)))-1) << \ |
| (((~(i))&((1<<(L)-(n))-1)) << (n))) |
| |
| #define P_clrbits_B(a,i,n,L) ((a)[(i)>>(L)-(n)] &= \ |
| ~( ((1<<(1<<(n)))-1) << \ |
| (((~(i))&((1<<(L)-(n))-1)) << (n))) ) |
| |
| /* small packed arrays */ |
| #define P_getbits_US(v,i,n) ((int)((v) >> ((i)<<(n)) & (1<<(1<<(n)))-1)) |
| #define P_getbits_SS(v,i,n) ((int)((long)(v) << (SETBITS - (((i)+1) << (n))) >> (SETBITS-(1<<(n))))) |
| #define P_putbits_US(v,i,x,n) ((v) |= (x) << ((i) << (n))) |
| #define P_putbits_SS(v,i,x,n) ((v) |= ((x) & (1<<(1<<(n)))-1) << ((i)<<(n))) |
| #define P_clrbits_S(v,i,n) ((v) &= ~( ((1<<(1<<(n)))-1) << ((i)<<(n)) )) |
| |
| #define P_max(a,b) ((a) > (b) ? (a) : (b)) |
| #define P_min(a,b) ((a) < (b) ? (a) : (b)) |
| |
| |
| /* Fix ANSI-isms */ |
| |
| #ifdef LACK_LABS |
| # ifndef labs |
| # define labs my_labs |
| extern long my_labs PP( (long) ); |
| # endif |
| #endif |
| |
| #ifdef LACK_MEMMOVE |
| # ifndef memmove |
| # define memmove my_memmove |
| extern Anyptr my_memmove PP( (Anyptr, Const Anyptr, size_t) ); |
| # endif |
| #endif |
| |
| #ifdef LACK_MEMCPY |
| # ifndef memcpy |
| # define memcpy my_memcpy |
| extern Anyptr my_memcpy PP( (Anyptr, Const Anyptr, size_t) ); |
| # endif |
| # ifndef memcmp |
| # define memcmp my_memcmp |
| extern int my_memcmp PP( (Const Anyptr, Const Anyptr, size_t) ); |
| # endif |
| # ifndef memset |
| # define memset my_memset |
| extern Anyptr my_memset PP( (Anyptr, int, size_t) ); |
| # endif |
| #endif |
| |
| /* Fix toupper/tolower on Suns and other stupid BSD systems */ |
| #ifdef toupper |
| # undef toupper |
| # undef tolower |
| # define toupper(c) my_toupper(c) |
| # define tolower(c) my_tolower(c) |
| #endif |
| |
| #ifndef _toupper |
| # if 'A' == 65 && 'a' == 97 |
| # define _toupper(c) ((c)-'a'+'A') |
| # define _tolower(c) ((c)-'A'+'a') |
| # else |
| # ifdef toupper |
| # undef toupper /* hope these are shadowing real functions, */ |
| # undef tolower /* because my_toupper calls _toupper! */ |
| # endif |
| # define _toupper(c) toupper(c) |
| # define _tolower(c) tolower(c) |
| # endif |
| #endif |
| |
| |
| #endif /* P2C_H */ |
| |
| |
| |
| /* End. */ |
| |
| |