LispObject* ShiftRight( LispObject* int1, LispObject* int2, LispEnvironment& aEnvironment,int aPrecision) { BigNumber *number = new BigNumber(); int bits = InternalAsciiToInt(*int2->String()); number->ShiftRight(*int1->Number(aPrecision),bits); return new LispNumber(number); }
void LispCharString(LispEnvironment& aEnvironment, LispInt aStackTop) { const LispString* str = ARGUMENT(1)->String(); CheckArg(str, 2, aEnvironment, aStackTop); CheckArg(IsNumber(str->c_str(), false), 2, aEnvironment, aStackTop); LispInt asciiCode = InternalAsciiToInt(*str); LispChar ascii[4]; ascii[0] = '\"'; ascii[1] = (LispChar)asciiCode; ascii[2] = '\"'; ascii[3] = '\0'; RESULT = (LispAtom::New(aEnvironment,ascii)); }
LispObject* LispFactorial(LispObject* int1, LispEnvironment& aEnvironment,int aPrecision) { int nr = InternalAsciiToInt(*int1->String()); if (nr < 0) throw LispErrInvalidArg(); ANumber fac("1",aPrecision); int i; for (i=2;i<=nr;i++) { BaseTimesInt(fac,i, WordBase); } return FloatToString(fac, aEnvironment); }
LispInt GetShortIntegerArgument(LispEnvironment& aEnvironment, LispInt aStackTop, LispInt aArgNr) { const LispString* str = GetIntegerArgument(aEnvironment, aStackTop, aArgNr); return InternalAsciiToInt(*str); }