📄 init.c
字号:
/* init.c */
#include <stdio.h>
#include "stack.h"
#include "integer.h"
#include "calc.h"
#ifdef _WIN32
#include "ytab.h"
#else
#include "y.tab.h"
#endif
#include "fun.h"
#include "wrappers.h"
void QSORTMPIX();
static struct { /* Built-ins which return POLYI */
char *name;
POLYI (*func)();
int argTypes[3];
} builtinsp[]={
{ "primitive", PRIMITIVEPI_W , {1, POLY,0 } } ,
{ "deriv", DERIVPI_W , {1, POLY,0 } } ,
{ "gcdpi", GCDPI_W , {2, POLY , POLY } } ,
{ "cyclotomic", CYCLOTOMIC_W , {1, NUM,0} } ,
{0, 0}
};
static struct { /* Built-ins which return *MPI */
char *name;
MPI *(*func)();
int argTypes[10];
/* Type of function is well defined in builtins.txt */
} builtins[] = {
{ "gcd", GCD_W, {2, NUM, NUM } },
{ "lcm", LCM_W, {2, NUM, NUM } },
{ "lcma", LCM_ARRAY_W, {1, ARR} },
{ "gcdv", EUCLIDI_W, {4, NUM, NUM, VARADR, VARADR} },
{ "jacobi", JACOB_W, {2, NUM, NUM} },
{ "peralta", SQRTMX_W, {2, NUM, NUM} },
{ "gcda", GCD_ARRAY_W, {1, ARR} },
{ "gcdav", GCD_ARRAYVX_W, {2, ARR, ARRADR} },
{ "congr", CONGRX_W, {4, NUM, NUM, NUM, VARADR} },
{ "chinese", CHINESEX_W, {5, NUM, NUM, NUM, NUM, VARADR} },
{ "chinesea", CHINESE_ARRAYX_W, {3, ARR, ARR, VARADR} },
{ "mthroot", BIG_MTHROOTX_W, {2, NUM, NUM} },
{ "fund", FUND_UNITX_W, {3, NUM, VARADR, VARADR} },
{ "pell", PELX_W, {4, NUM, NUM, VARADR, VARADR} },
{ "surd", SURDX_W, {9, NUM, NUM, NUM, NUM, ARRADR, ARRADR, ARRADR, ARRADR, ARRADR} },
{ "mpower", MPOWERX_W, {3, NUM, NUM, NUM} },
{ "nprime", Nextprime_W, {1, NUM} },
{ "inv", INVERSEMX_W, {2, NUM, NUM} },
{ "factor", FACTORX_W, {1, NUM} },
{ "tau", DIVISORX_W, {1, NUM} },
{ "mobius", MOBIUSX_W, {1, NUM} },
{ "euler", EULERX_W, {1, NUM} },
{ "sigma", SIGMAX_W, {1, NUM} },
{ "lprimroot", LPRIMROOTX_W, {1, NUM} },
/*{ "orderp", ORDERPX_W, {2, NUM, NUM} }, */
/* { "orderq", ORDERQX_W, {} }, */
{ "orderm", ORDERMX_W, {2, NUM, NUM} },
/* { "lucasu", LUCASUX_W, {} },
{ "lucasb", LUCASBX_W, {} }, */
{ "lucas", LUCASX_W, {1, NUM} },
{ "length", LENGTHX_W, {1, NUM} },
/* { "mult32", MULT32X_W, {} }, */
{ "rsae", RSAE_W, {2, NUM, NUM} },
{ "nprimeap", NEXTPRIMEAPX_W, {3, NUM, NUM, NUM} },
{ "pollard", POLLARD_W, {1, NUM} },
{ "elliptic", EFACTORX_W, {3, NUM, NUM, NUM} },
{ "perfectpower", PERFECT_POWER_W, {1, NUM} },
/* { "random", RANDOMI_W, {} }, */
{ "leastqnr", LEASTQNRX_W, {1, NUM} },
{ "content", CONTENTPI2_W, {1, POLY} },
{ "sqroot", SQROOT_W, {5, NUM, NUM, ARRADR, VARADR, VARADR} },
{ "congq", QUADRATIC_W, {5, NUM, NUM, NUM, NUM, ARRADR} },
{ "absmod", HALFMOD_W, {2, NUM, NUM} },
{ "ceil", CEILINGI_W, {2, NUM, NUM} },
{ "resultant", SUBRESULTANT_W, {2, POLY, POLY} },
{ "discriminant", DISCRIMINANTPI_W, {1, POLY} },
{ "primes", PRIME_GENERATOR_W, {2, NUM, NUM} },
{ "sturmsequence", STURM_SEQUENCE_W, {3, POLY, NUM, NUM} },
{ "classnop", POS_W, {1, NUM } },
{ "classnon", NEG_W, {2, NUM, NUM } },
{ "nearint", NEARINT_W, {2, NUM, NUM} },
{ "reduceneg", REDUCE_NEG_W, {3, NUM, NUM, NUM} },
{ "reducepos", REDUCE_POS_W, {3, NUM, NUM, NUM} },
{ "classnop0", POS0_W, {1, NUM } },
{ "tableneg", TABLENEG_W, {2, NUM, NUM} },
{ "tablepos", TABLEPOS_W, {2, NUM, NUM} },
{ "davison", DAVISON_W, {3, NUM, NUM, NUM} },
{ "raney", RANEY1_W, {4, NUM, NUM, NUM, NUM} },
{ "unimodular", UNIMODULAR_W, {4, NUM, NUM, NUM, NUM} },
{ "sigmak", SIGMAK_W, {2, NUM, NUM} },
{ "tauprimepower", TAU_PRIMEPOWER_W, {2, NUM, NUM} },
{ "ramanujan", TAU_COMPOSITE_W, {1, NUM} },
{ "repdefinite", REP_DEFINITE_W, {5, NUM, NUM, NUM, NUM, NUM} },
{ "euclid1", EUCLIDI1_W, {2, NUM, NUM} },
{ "cfracperiod", CFRAC_PERIOD_W, {1, NUM} },
{ "cfracn", CFRACN_W, {1, NUM} },
{ 0, 0 }
};
static struct { /* Built-ins which return void */
char *name;
void (*func)();
int argTypes[10];
} builtinsv[] = {
{ "serret", SERRET_W, {3, NUM, VARADR, VARADR} },
{ "collatz", COLLATZ_W, {2, NUM, NUM} },
{ "mthrootr", MTHROOTX_W, {4, NUM, NUM, NUM, NUM} },
{ "miller", MILLERX_W, {2, NUM, NUM} },
{ "juggler", JUGGLER_W, {2, NUM, NUM} },
{ "hermite", HERMITE, {0} },
{ "mlll", MLLL, {0} },
{ "smith", SMITH, {0} },
{ "encode", ENCODE_W, {2, NUM, NUM} },
{ "decode", DECODEX_W, {3, NUM, NUM, NUM} },
{ "egcd", EXTGCDX, {0} },
{ "fp", FINCKE_POHSTX, {0} },
{ "improvep", IMPROVEPX, {0} },
/*{ "qsort", QSORTMPIX_W, {} },
{ "qsortmat", QSORTMATIX_W, {} }, */
{ "sgcd", SCHNORRGCD_W, {1, NUM} },
{ "inhomfp", SHORTESTTTX, {0} },
/*{ "fibmin", FIB_MIN_W, {} },
{ "printww", PRINTWW_W, {} },
{ "printdefect", PRINT_DEFECT_W, {} }, */
{ "addcubicr", ADD_CUBICRX, {0} },
{ "powercubicr", POWER_CUBICRX, {0} },
{ "shallit", SHALLIT, {0} },
{ "lucasmin", LUCAS_MIN, {0} },
{ "lllgcd", LLLGCDX, {0} },
{ "jacobigcd", JACOBIGCDX, {0} },
{ "shermite", SCHNORRHERMITE_W, {1, NUM} },
{ "lllhermite", LLLHERMITE1X, {0} },
/*{ "gcd33", GCD33_W, {} },
{ "gcd4", GCD4_W, {} },
{ "gcd5", GCD5_W, {} },
{ "gcd6", GCD6_W, {} },
{ "gcd10", GCD10_W, {} },
{ "gcd11", GCD11_W, {} }, */
{ "euclid", EUCLID_W, {7, NUM, NUM, ARRADR, ARRADR, ARRADR, ARRADR, VARADR} },
{ "convergents", CONVERGENTS_W, {3, ARR, ARRADR, ARRADR } },
{ "lagrange", LAGRANGE_W, {3, POLY, ARRADR, NUM} },
{ "axb", AXB1, {0} },
/*{ "axb1", AXB_W, {} },
{ "testaxb", TESTAXB_W, {} }, */
/*{ "changel",CHANGELX_W, {} },
{ "fermatq",FERMAT_QUOTIENT_W, {} }, */
{ "lllgcd0", LLLGCD0X, {0} },
{ "slv", SLVECTORX, {0} },
/*{ "gcdconj", GCD_CONJ_W, {} },
{ "gcd3", GCD3_W, {} },
{ "conj4", GCDCONJECTURE4_W, {} },
{ "conj5", GCDCONJECTURE5_W, {} },
{ "conj6", GCDCONJECTURE6_W, {} },
{ "conj7", GCDCONJECTURE7_W, {} },
{ "conjm", GCDCONJECTUREM_W, {} }, */
{ "absnearint", ABS_NEAREST_INTRX, {0} },
{ "cycle", CYCLEX, {0} },
{ "addcubicm", ADD_CUBICMX, {0} },
{ "powercubicm", POWER_CUBICMX, {0} },
{ "ordercubicm", ORDER_CUBICMX, {0} },
{ "powercubicr", POWER_CUBICRX, {0} },
{ "ordercubicr", ORDER_CUBICRX, {0} },
{ "sturm", STURM_W, {1, POLY} },
{ "rootexp", ROOTEXPANSION, {2, POLY, NUM} },
{ "intlog", INTLOG, {4, NUM, NUM, NUM, NUM} },
{ "intlog1", INTLOG1, {4, NUM, NUM, NUM, NUM} },
{ "log1", LOG1, {5, NUM, NUM, NUM, NUM, NUM} },
{ "intlog2", INTLOG2, {4, NUM, NUM, NUM, NUM} },
{ "logg", LOGG, {5, NUM, NUM, NUM, NUM, NUM} },
{ "log2", LOGGG, {6, NUM, NUM, NUM, NUM, NUM, NUM} },
{ "sqroot1", SQROOT1_W, {3, NUM, NUM, NUM} },
{ "sqroot2", SQROOT2_W, {2, NUM, NUM} },
{ "sqroot3", SQROOT3_W, {3, NUM, NUM, NUM} },
{ "cornacchia", CORNACCHIA_W, {3, NUM, NUM, NUM} },
{ "patz", PATZ_W, {2, NUM, NUM} },
{ "shankslog", SHANKSLOG, {4, NUM, NUM, NUM, NUM} },
/*{ "binaryform", BINARYFORM_W, {4, NUM, NUM, NUM, NUM} },*/
{ "gauss", GAUSS_W, {7, NUM, NUM, NUM, NUM, VARADR, VARADR, VARADR} },
{ "binform", BINFORM_W, {5, NUM, NUM, NUM, NUM, NUM} },
{ "log", LOG_W, {6, NUM, NUM, NUM, NUM, ARRADR, VARADR} },
{ "testlog1", TESTLOG1_W, {4, NUM, NUM, NUM, NUM} },
{ "testlog", TESTLOG_W, {5, NUM, NUM, NUM, NUM, NUM} },
{ "twoadicsqrt", TWOADICSQRT_W, {3, NUM, NUM, ARRADR} },
{ "padicsqrt", PADICSQRT_W, {4, NUM, NUM, NUM, ARRADR} },
{ "powerd", POWERD_W, {6, NUM, NUM, NUM, NUM, VARADR, VARADR} },
{ 0, 0}
};
void init()
/* install built-ins in table */
{
int i;
Symbol *s;
for (i = 0; builtins[i].name; i++)
{
s = installFunc(builtins[i].name, BLTIN, builtins[i].argTypes);
s->u.ptr = builtins[i].func;
}
for (i = 0; builtinsp[i].name; i++)
{
s = installFunc(builtinsp[i].name, BLTINP, builtinsp[i].argTypes);
s->u.ptrp = builtinsp[i].func;
}
for (i = 0; builtinsv[i].name; i++)
{
s = installFunc(builtinsv[i].name, BLTINV, builtinsv[i].argTypes);
s->u.ptrv = builtinsv[i].func;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -