📄 parser.c
字号:
mStkFunct(dStkCosh); /* call lStk via dStk */
}
void lStkCosh(void) {
long x, y, sinhx, coshx, siny, cosy;
x = Arg1->l.x >> Delta16;
y = Arg1->l.y >> Delta16;
SinCos086(y, &siny, &cosy);
SinhCosh086(x, &sinhx, &coshx);
Arg1->l.x = multiply(cosy, coshx, ShiftBack); /* TIW 06-18-90 */
Arg1->l.y = multiply(siny, sinhx, ShiftBack); /* TIW 06-18-90 */
}
#endif
void (*StkCosh)(void) = dStkCosh;
/* TIW added arc functions here 11-25-94 */
void dStkASin(void) {
Arcsinz(Arg1->d, &(Arg1->d));
}
#ifndef XFRACT
void mStkASin(void) {
mStkFunct(dStkASin);
}
void lStkASin(void) {
lStkFunct(dStkASin);
}
#endif
void (*StkASin)(void) = dStkASin;
void dStkASinh(void) {
Arcsinhz(Arg1->d, &(Arg1->d));
}
#ifndef XFRACT
void mStkASinh(void) {
mStkFunct(dStkASinh);
}
void lStkASinh(void) {
lStkFunct(dStkASinh);
}
#endif
void (*StkASinh)(void) = dStkASinh;
void dStkACos(void) {
Arccosz(Arg1->d, &(Arg1->d));
}
#ifndef XFRACT
void mStkACos(void) {
mStkFunct(dStkACos);
}
void lStkACos(void) {
lStkFunct(dStkACos);
}
#endif
void (*StkACos)(void) = dStkACos;
void dStkACosh(void) {
Arccoshz(Arg1->d, &(Arg1->d));
}
#ifndef XFRACT
void mStkACosh(void) {
mStkFunct(dStkACosh);
}
void lStkACosh(void) {
lStkFunct(dStkACosh);
}
#endif
void (*StkACosh)(void) = dStkACosh;
void dStkATan(void) {
Arctanz(Arg1->d, &(Arg1->d));
}
#ifndef XFRACT
void mStkATan(void) {
mStkFunct(dStkATan);
}
void lStkATan(void) {
lStkFunct(dStkATan);
}
#endif
void (*StkATan)(void) = dStkATan;
void dStkATanh(void) {
Arctanhz(Arg1->d, &(Arg1->d));
}
#ifndef XFRACT
void mStkATanh(void) {
mStkFunct(dStkATanh);
}
void lStkATanh(void) {
lStkFunct(dStkATanh);
}
#endif
void (*StkATanh)(void) = dStkATanh;
void dStkSqrt(void) {
Arg1->d = ComplexSqrtFloat(Arg1->d.x, Arg1->d.y);
}
#ifndef XFRACT
void mStkSqrt(void) {
mStkFunct(dStkSqrt);
}
void lStkSqrt(void) {
/* lStkFunct(dStkSqrt); */
Arg1->l = ComplexSqrtLong(Arg1->l.x, Arg1->l.y);
}
#endif
void (*StkSqrt)(void) = dStkSqrt;
void dStkCAbs(void) {
Arg1->d.x = sqrt(sqr(Arg1->d.x)+sqr(Arg1->d.y));
Arg1->d.y = 0.0;
}
#ifndef XFRACT
void mStkCAbs(void) {
mStkFunct(dStkCAbs);
}
void lStkCAbs(void) {
lStkFunct(dStkCAbs);
}
#endif
void (*StkCAbs)(void) = dStkCAbs;
/* TIW end arc functions 11-25-94 */
void dStkLT(void) {
Arg2->d.x = (double)(Arg2->d.x < Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkLT(void) {
Arg2->m.x = *fg2MP((long)(MPcmp(Arg2->m.x, Arg1->m.x) == -1), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkLT(void) {
Arg2->l.x = (long)(Arg2->l.x < Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkLT)(void) = dStkLT;
void dStkGT(void) {
Arg2->d.x = (double)(Arg2->d.x > Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkGT(void) {
Arg2->m.x = *fg2MP((long)(MPcmp(Arg2->m.x, Arg1->m.x) == 1), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkGT(void) {
Arg2->l.x = (long)(Arg2->l.x > Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkGT)(void) = dStkGT;
void dStkLTE(void) {
Arg2->d.x = (double)(Arg2->d.x <= Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkLTE(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp == -1 || comp == 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkLTE(void) {
Arg2->l.x = (long)(Arg2->l.x <= Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkLTE)(void) = dStkLTE;
void dStkGTE(void) {
Arg2->d.x = (double)(Arg2->d.x >= Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkGTE(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp == 1 || comp == 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkGTE(void) {
Arg2->l.x = (long)(Arg2->l.x >= Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkGTE)(void) = dStkGTE;
void dStkEQ(void) {
Arg2->d.x = (double)(Arg2->d.x == Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkEQ(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp == 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkEQ(void) {
Arg2->l.x = (long)(Arg2->l.x == Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkEQ)(void) = dStkEQ;
void dStkNE(void) {
Arg2->d.x = (double)(Arg2->d.x != Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkNE(void) {
int comp;
comp = MPcmp(Arg2->m.x, Arg1->m.x);
Arg2->m.x = *fg2MP((long)(comp != 0), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkNE(void) {
Arg2->l.x = (long)(Arg2->l.x != Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkNE)(void) = dStkNE;
void dStkOR(void) {
Arg2->d.x = (double)(Arg2->d.x || Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkOR(void) {
Arg2->m.x = *fg2MP((long)(Arg2->m.x.Mant || Arg1->m.x.Mant), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkOR(void) {
Arg2->l.x = (long)(Arg2->l.x || Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkOR)(void) = dStkOR;
void dStkAND(void) {
Arg2->d.x = (double)(Arg2->d.x && Arg1->d.x);
Arg2->d.y = 0.0;
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkAND(void) {
Arg2->m.x = *fg2MP((long)(Arg2->m.x.Mant && Arg1->m.x.Mant), 0);
Arg2->m.y.Mant = (long)(Arg2->m.y.Exp = 0);
Arg1--;
Arg2--;
}
void lStkAND(void) {
Arg2->l.x = (long)(Arg2->l.x && Arg1->l.x) << bitshift; /* JCO 12/26/94 */
Arg2->l.y = 0l;
Arg1--;
Arg2--;
}
#endif
void (*StkAND)(void) = dStkAND;
void dStkLog(void) {
FPUcplxlog(&Arg1->d, &Arg1->d);
}
#ifndef XFRACT
void mStkLog(void) {
mStkFunct(dStkLog); /* call lStk via dStk */
}
void lStkLog(void) {
lStkFunct(dStkLog);
}
#endif
void (*StkLog)(void) = dStkLog;
void FPUcplxexp(_CMPLX *x, _CMPLX *z) {
double e2x, siny, cosy;
if(fpu == 387)
FPUcplxexp387(x, z);
else {
e2x = exp(x->x);
FPUsincos(&x->y, &siny, &cosy);
z->x = e2x * cosy;
z->y = e2x * siny;
}
}
void dStkExp(void) {
FPUcplxexp(&Arg1->d, &Arg1->d);
}
#ifndef XFRACT
void mStkExp(void) {
mStkFunct(dStkExp); /* call lStk via dStk */
}
void lStkExp(void) {
lStkFunct(dStkExp);
}
#endif
void (*StkExp)(void) = dStkExp;
void dStkPwr(void) {
Arg2->d = ComplexPower(Arg2->d, Arg1->d);
Arg1--;
Arg2--;
}
#ifndef XFRACT
void mStkPwr(void) {
_CMPLX x, y;
x = MPC2cmplx(Arg2->m);
y = MPC2cmplx(Arg1->m);
x = ComplexPower(x, y);
Arg2->m = cmplx2MPC(x);
Arg1--;
Arg2--;
}
void lStkPwr(void) {
_CMPLX x, y;
x.x = (double)Arg2->l.x / fg;
x.y = (double)Arg2->l.y / fg;
y.x = (double)Arg1->l.x / fg;
y.y = (double)Arg1->l.y / fg;
x = ComplexPower(x, y);
if(fabs(x.x) < fgLimit && fabs(x.y) < fgLimit) {
Arg2->l.x = (long)(x.x * fg);
Arg2->l.y = (long)(x.y * fg);
}
else
overflow = 1;
Arg1--;
Arg2--;
}
#endif
void (*StkPwr)(void) = dStkPwr;
void EndInit(void) {
LastInitOp = OpPtr;
}
#if (_MSC_VER >= 700)
#pragma code_seg ("parser1_text") /* place following in an overlay */
#endif
unsigned SkipWhiteSpace(char *Str) {
unsigned n, Done;
for(Done = n = 0; !Done; n++) {
switch(Str[n]) {
case ' ':
case '\t':
case '\n':
case '\r':
break;
default:
Done = 1;
}
}
return(n - 1);
}
/* detect if constant is part of a (a,b) construct */
static int isconst_pair(char *Str) {
int n,j;
int answer = 0;
/* skip past first number */
for(n = 0; isdigit(Str[n]) || Str[n] == '.'; n++);
if(Str[n] == ',') {
j = n + SkipWhiteSpace(&Str[n+1]) + 1;
if(isdigit(Str[j])
|| (Str[j] == '-' && (isdigit(Str[j+1]) || Str[j+1] == '.'))
|| Str[j] == '.') {
answer = 1;
}
}
return(answer);
}
struct ConstArg far *isconst(char *Str, int Len) {
_CMPLX z;
unsigned n, j;
/* next line enforces variable vs constant naming convention */
for(n = 0; n < vsp; n++) {
if(v[n].len == Len) {
if(!strnicmp(v[n].s, Str, Len))
{
if(n == 1) /* The formula uses 'p1'. */
uses_p1 = 1;
if(n == 2) /* The formula uses 'p2'. */
uses_p2 = 1;
if(n == 7) /* The formula uses 'rand'. */
RandomSeed();
if(n == 8) /* The formula uses 'p3'. */
uses_p3 = 1;
if(n == 10 || n == 11 || n == 12)
if(MathType == L_MATH)
keybuffer = 'f';
if(!isconst_pair(Str))
return(&v[n]);
}
}
}
v[vsp].s = Str;
v[vsp].len = Len;
v[vsp].a.d.x = v[vsp].a.d.y = 0.0;
#ifndef XFRACT
/* v[vsp].a should already be zeroed out */
switch(MathType) {
case M_MATH:
v[vsp].a.m.x.Mant = v[vsp].a.m.x.Exp = 0;
v[vsp].a.m.y.Mant = v[vsp].a.m.y.Exp = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -