typedef struct {
long s, us;
} pari_timer;
typedef struct pari_str {
char *string;
char *end;
char *cur;
size_t size;
int use_stack;
} pari_str;
typedef unsigned char *byteptr;
typedef ulong pari_sp;
struct pari_sieve
{
ulong start, end, maxpos;
ulong c, q;
unsigned char* sieve;
};
typedef struct {
int strategy;
GEN bb;
ulong c, q;
byteptr d;
ulong p;
ulong b;
struct pari_sieve *psieve;
unsigned char *sieve, *isieve;
ulong cache[9];
ulong chunk;
ulong a, end, sieveb;
ulong pos, maxpos;
GEN pp;
} forprime_t;
typedef struct {
int first;
GEN b, n, p;
forprime_t T;
} forcomposite_t;
typedef struct forvec_t {
long first;
GEN *a, *m, *M;
long n;
GEN (*next)(struct forvec_t *);
} forvec_t;
typedef struct
{
long k;
long amax, amin, nmin, nmax, strip;
GEN v;
} forpart_t;
typedef struct
{
long k, first;
GEN v;
} forperm_t;
typedef struct
{
long n, k, all, first;
GEN v;
} forsubset_t;
typedef struct PARI_plot {
void (*draw)(struct PARI_plot *T, GEN w, GEN x, GEN y);
long width;
long height;
long hunit;
long vunit;
long fwidth;
long fheight;
long dwidth;
long dheight;
} PARI_plot;
typedef struct GENbin {
size_t len;
GEN x;
GEN base;
void (*rebase)(GEN,long);
} GENbin;
struct pari_mainstack
{
pari_sp top, bot, vbot;
size_t size, rsize, vsize, memused;
};
extern THREAD struct pari_mainstack *pari_mainstack;
struct pari_thread
{
struct pari_mainstack st;
GEN data;
};
typedef struct pariFILE {
FILE *file;
int type;
const char *name;
struct pariFILE* prev;
struct pariFILE* next;
} pariFILE;
enum { mf_IN = 1, mf_PIPE = 2, mf_FALSE = 4, mf_OUT = 8, mf_PERM = 16 };
typedef struct entree {
const char *name;
ulong valence;
void *value;
long menu;
const char *code;
const char *help;
void *pvalue;
long arity;
ulong hash;
struct entree *next;
} entree;
struct pari_parsestate
{
long node;
int once;
long discarded;
const char *lex_start;
GEN lasterror;
};
struct pari_compilestate
{
long opcode, operand, data, localvars, frames, dbginfo;
long offset;
const char *dbgstart;
};
struct pari_evalstate
{
pari_sp avma;
long sp;
long rp;
long var;
long lvars;
long prec;
long trace;
long pending_threads;
struct pari_compilestate comp;
};
struct pari_varstate
{
long nvar, max_avail, min_priority, max_priority;
};
struct pari_filestate
{
pariFILE *file;
long serial;
};
struct gp_context
{
long listloc;
long prettyp;
struct pari_varstate var;
struct pari_evalstate eval;
struct pari_parsestate parse;
struct pari_filestate file;
jmp_buf *iferr_env;
GEN err_data;
};
struct mt_state
{
GEN worker;
GEN pending;
long workid;
};
struct pari_mt
{
struct mt_state mt;
GEN (*get)(struct mt_state *mt, long *workid, long *pending);
void (*submit)(struct mt_state *mt, long workid, GEN work);
void (*end)(void);
};
typedef struct PariOUT {
void (*putch)(char);
void (*puts)(const char*);
void (*flush)(void);
} PariOUT;
typedef struct hashentry {
void *key, *val;
ulong hash;
struct hashentry *next;
} hashentry;
typedef struct hashtable {
ulong len;
hashentry **table;
ulong nb, maxnb;
ulong pindex;
ulong (*hash) (void *k);
int (*eq) (void *k1, void *k2);
int use_stack;
} hashtable;
typedef struct {
void **data;
long n;
long alloc;
size_t size;
} pari_stack;
typedef struct {
GEN z;
time_t t;
} gp_hist_cell;
typedef struct {
gp_hist_cell *v;
size_t size;
ulong total;
} gp_hist;
typedef struct {
pariFILE *file;
char *cmd;
} gp_pp;
typedef struct {
char *PATH;
char **dirs;
} gp_path;
typedef struct {
char format;
long sigd;
int sp;
int prettyp;
int TeXstyle;
} pariout_t;
enum { gpd_QUIET=1, gpd_TEST=2, gpd_EMACS=256, gpd_TEXMACS=512};
enum { DO_MATCHED_INSERT = 2, DO_ARGS_COMPLETE = 4 };
typedef struct {
gp_hist *hist;
gp_pp *pp;
gp_path *path, *sopath;
pariout_t *fmt;
ulong lim_lines, flags, linewrap, readline_state, echo;
int breakloop, recover, use_readline;
char *help, *histfile, *prompt, *prompt_cont, *prompt_comment;
GEN colormap, graphcolors, plothsizes;
int secure, simplify, strictmatch, strictargs, chrono;
pari_timer *T;
ulong primelimit;
ulong threadsizemax, threadsize;
} gp_data;
extern gp_data *GP_DATA;
extern PariOUT *pariOut, *pariErr;
extern FILE *pari_outfile, *pari_logfile, *pari_infile, *pari_errfile;
extern ulong logstyle;
enum logstyles {
logstyle_none,
logstyle_plain,
logstyle_color,
logstyle_TeX
};
enum { c_ERR, c_HIST, c_PROMPT, c_INPUT, c_OUTPUT, c_HELP, c_TIME, c_LAST,
c_NONE = 0xffffUL };
enum { TEXSTYLE_PAREN=2, TEXSTYLE_BREAK=4 };
extern THREAD pari_sp avma;
#define DISABLE_MEMUSED (size_t)-1
extern byteptr diffptr;
extern char *current_psfile, *pari_datadir;
#define gcopyifstack(x,y) STMT_START {pari_sp _t=(pari_sp)(x); \
(y)=(_t>=pari_mainstack->bot &&_t<pari_mainstack->top)? \
gcopy((GEN)_t): (GEN)_t;} STMT_END
#define copyifstack(x,y) STMT_START {pari_sp _t=(pari_sp)(x); \
(y)=(_t>=pari_mainstack->bot &&_t<pari_mainstack->top)? \
gcopy((GEN)_t): (GEN)_t;} STMT_END
#define icopyifstack(x,y) STMT_START {pari_sp _t=(pari_sp)(x); \
(y)=(_t>=pari_mainstack->bot &&_t<pari_mainstack->top)? \
icopy((GEN)_t): (GEN)_t;} STMT_END
#ifdef DEBUG_LOWSTACK
# define low_stack(x,l) 1
# define gc_needed(av,n) 1
#else
# define low_stack(x,l) ((void)(x),avma < (pari_sp)(l))
# define gc_needed(av,n) (avma < (pari_sp)stack_lim(av,n))
#endif
#define stack_lim(av,n) (pari_mainstack->bot+(((av)-pari_mainstack->bot)>>(n)))
#ifndef SIG_IGN
# define SIG_IGN (void(*)())1
#endif
#ifndef SIGINT
# define SIGINT 2
#endif