Sélectionner une révision Git
p2c.h 6,98 Kio
#ifndef P2C_H
#define P2C_H
#include <stdio.h>
# include <stddef.h>
# include <stdlib.h>
#include <string.h>
#ifdef __linux__
#include <unistd.h>
#endif
#include <ctype.h>
#include <math.h>
#include <setjmp.h>
#include <assert.h>
#include <stdbool.h>
# define log1p(X) log(1+(X))
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
#define SETBITS 32
typedef signed char schar;
typedef unsigned char uchar;
typedef struct {
void* proc;
void* link;
} _PROCEDURE;
#ifndef _FNSIZE
# define _FNSIZE 120
#endif
extern void PASCAL_MAIN (int, char **);
extern char **P_argv;
extern int P_argc;
extern short P_escapecode;
extern int P_ioresult;
extern __p2c_jmp_buf *__top_jb;
extern int bigendian;
extern int _OutMem ();
extern int _CaseCheck ();
extern int _NilCheck ();
extern char *_ShowEscape (char *, int, int, char *);
extern int _Escape (int);
extern int _EscIO (int);
extern int microsleep (long);
extern long ipow (long, long);
extern char *strsub (char *, char *, int, int);
extern char *strltrim (char *);
extern char *strrtrim (char *);
extern char *strrpt (char *, char *, int);
extern char *strpad (char *, char *, int, int);
extern int strpos2 (char *, char *, int);
extern void strmove (int len, char * s, int spos, char * d, int dpos);
extern int strcicmp (char * s1, char * s2);
extern long memavail ();
extern int P_peek (FILE *);
extern int P_eof (FILE *);
extern int P_eoln (FILE *);
extern void P_readpaoc (FILE *, char *, int);
extern void P_readlnpaoc (FILE *, char *, int);
extern long P_maxpos (FILE *);
extern char *P_trimname (char *, int);
extern long *P_setunion (long *, long *, long *);
extern long *P_setint (long *, long *, long *);
extern long *P_setdiff (long *, long *, long *);
extern long *P_setxor (long *, long *, long *);
extern int P_inset (unsigned, long *);
extern int P_setequal (long *, long *);
extern int P_subset (long *, long *);
extern long *P_addset (long *, unsigned);
extern long *P_addsetr (long *, unsigned, unsigned);
extern long *P_remset (long *, unsigned);
extern long *P_setcpy (long *, long *);
extern long *P_expset (long *, long);
extern long P_packset (long *);
extern int P_getcmdline (int l, int h, char *line);
extern void TimeStamp (int *Day, int *Month, int *Year,
int *Hour, int *Min, int *Sec);
extern void P_sun_argv (char *, int, int);
extern void _local_p2c_init (void);
/* 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
/* Creating temporary files */
/* File buffers */
#define FILEBUF(f,sc,type) sc int f##_BFLAGS; \
sc type f##_BUFFER
#define FILEBUFNC(f,type) int f##_BFLAGS; \
type f##_BUFFER
#define RESETBUF(f,type) (f##_BFLAGS = 1)
#define SETUPBUF(f,type) (f##_BFLAGS = 0)
#define GETFBUF(f,type) (*((f##_BFLAGS == 1 && \
((f##_BFLAGS = 2), \
fread(&f##_BUFFER, \
sizeof(type),1,(f)))),\
&f##_BUFFER))
#define AGETFBUF(f,type) (f##_BFLAGS == 1 && \
((f##_BFLAGS = 2), \
fread(f,_BUFFER, \
sizeof(type),1,(f)))),\
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(f,_BUFFER)))
#define GET(f,type) (f##_BFLAGS == 1 ? \
fread(&f##_BUFFER,sizeof(type),1,(f)) : \
(f##_BFLAGS = 1))
#define PUT(f,type) (fwrite(&f##_BUFFER,sizeof(type),1,(f)), \
(f##_BFLAGS = 0))
#define CPUT(f) (PUT(f,char))
#define BUFEOF(f) (f##_BFLAGS != 2 && P_eof(f))
#define BUFFPOS(f) (ftell(f) - (f##_BFLAGS == 2))
typedef struct {
FILE *f;
FILEBUFNC(f,char);
char name[_FNSIZE];
} _TEXT;
/* Memory allocation */
# define Malloc(n) (malloc((n != 0) ? (n) : 1) ?: (void*)_OutMem())
#define Free(p) (free((void*)(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))
/* Funcition for compiler warnings*/
#ifdef __GNUC__
#define DEPRECATED __attribute__((deprecated))
#else
/**
* Deprecated functions
*
* Use this macro in front of a function declaration to say the function is deprecated.
* The compiler may emit a warning every time the function is used
*/
#define DEPRECATED
#endif
#endif /* P2C_H */
/* ifdefs for microsleep here */
#define BSDMICROSLEEP
#if !defined(L_cuserid)
#define L_cuserid 32
extern char * cuserid(char *);
#endif
/* End. */