FORM 4.3
|
Go to the source code of this file.
Macros | |
#define | MaX(x, y) ((x) > (y) ? (x): (y)) |
#define | MiN(x, y) ((x) < (y) ? (x): (y)) |
#define | ABS(x) ( (x) < 0 ? -(x): (x) ) |
#define | SGN(x) ( (x) > 0 ? 1 : (x) < 0 ? -1 : 0 ) |
#define | REDLENG(x) ((((x)<0)?((x)+1):((x)-1))/2) |
#define | INCLENG(x) (((x)<0)?(((x)*2)-1):(((x)*2)+1)) |
#define | GETCOEF(x, y) x += *x;y = x[-1];x -= ABS(y);y=REDLENG(y) |
#define | GETSTOP(x, y) y=x+(*x)-1;y -= ABS(*y)-1 |
#define | StuffAdd(x, y) (((x)<0?-1:1)*(y)+((y)<0?-1:1)*(x)) |
#define | EXCHN(t1, t2, n) { WORD a,i; for(i=0;i<n;i++){a=t1[i];t1[i]=t2[i];t2[i]=a;} } |
#define | EXCH(x, y) { WORD a = (x); (x) = (y); (y) = a; } |
#define | TOKENTOLINE(x, y) |
#define | UngetFromStream(stream, c) ((stream)->nextchar[(stream)->isnextchar++]=c) |
#define | AddLineFeed(s, n) { (s)[(n)++] = LINEFEED; } |
#define | TryRecover(x) Terminate(-1) |
#define | UngetChar(c) { pushbackchar = c; } |
#define | ParseNumber(x, s) {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';} |
#define | ParseSign(sgn, s) |
#define | ParseSignedNumber(x, s) |
#define | NCOPY(s, t, n) while ( --n >= 0 ) *s++ = *t++; |
#define | NCOPYI(s, t, n) while ( --n >= 0 ) *s++ = *t++; |
#define | NCOPYB(s, t, n) while ( --n >= 0 ) *s++ = *t++; |
#define | NCOPYI32(s, t, n) while ( --n >= 0 ) *s++ = *t++; |
#define | WCOPY(s, t, n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( --nn >= 0 ) *ss++=*tt++; } |
#define | NeedNumber(x, s, err) |
#define | SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; } |
#define | FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED) |
#define | SKIPBRA1(s) |
#define | SKIPBRA2(s) |
#define | SKIPBRA3(s) |
#define | SKIPBRA4(s) |
#define | SKIPBRA5(s) |
#define | CYCLE1(t, a, i) {t iX=*a; WORD jX; for(jX=1;jX<i;jX++)a[jX-1]=a[jX]; a[i-1]=iX;} |
#define | AddToCB(c, wx) |
#define | EXCHINOUT |
#define | BACKINOUT |
#define | CopyArg(to, from) |
#define | FILLARG(w) |
#define | COPYARG(w, t) |
#define | ZEROARG(w) |
#define | FILLFUN(w) |
#define | COPYFUN(w, t) |
#define | COPYFUN3(w, t) |
#define | FILLFUN3(w) |
#define | FILLSUB(w) |
#define | COPYSUB(w, ww) |
#define | FILLEXPR(w) |
#define | NEXTARG(x) if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2; |
#define | COPY1ARG(s1, t1) |
#define | ZeroFillRange(w, begin, end) |
#define | TABLESIZE(a, b) (((WORD)sizeof(a))/((WORD)sizeof(b))) |
#define | WORDDIF(x, y) (WORD)(x-y) |
#define | wsizeof(a) ((WORD)sizeof(a)) |
#define | VARNAME(type, num) (AC.varnames->namebuffer+type[num].name) |
#define | DOLLARNAME(type, num) (AC.dollarnames->namebuffer+type[num].name) |
#define | EXPRNAME(num) (AC.exprnames->namebuffer+Expressions[num].name) |
#define | PREV(x) prevorder?prevorder:x |
#define | SETERROR(x) { Terminate(-1); return(-1); } |
#define | DUMMYUSE(x) (void)(x); |
#define | ADDPOS(pp, x) (pp).p1 = ((pp).p1+(LONG)(x)) |
#define | SETBASELENGTH(ss, x) (ss).p1 = (LONG)(x) |
#define | SETBASEPOSITION(pp, x) (pp).p1 = (LONG)(x) |
#define | ISEQUALPOSINC(pp1, pp2, x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) |
#define | ISGEPOSINC(pp1, pp2, x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) |
#define | DIVPOS(pp, n) ( (pp).p1/(LONG)(n) ) |
#define | MULPOS(pp, n) (pp).p1 *= (LONG)(n) |
#define | DIFPOS(ss, pp1, pp2) (ss).p1 = ((pp1).p1-(pp2).p1) |
#define | DIFBASE(pp1, pp2) ((pp1).p1-(pp2).p1) |
#define | ADD2POS(pp1, pp2) (pp1).p1 += (pp2).p1 |
#define | PUTZERO(pp) (pp).p1 = 0 |
#define | BASEPOSITION(pp) ((pp).p1) |
#define | SETSTARTPOS(pp) (pp).p1 = -2 |
#define | NOTSTARTPOS(pp) ( (pp).p1 > -2 ) |
#define | ISMINPOS(pp) ( (pp).p1 == -1 ) |
#define | ISEQUALPOS(pp1, pp2) ( (pp1).p1 == (pp2).p1 ) |
#define | ISNOTEQUALPOS(pp1, pp2) ( (pp1).p1 != (pp2).p1 ) |
#define | ISLESSPOS(pp1, pp2) ( (pp1).p1 < (pp2).p1 ) |
#define | ISGEPOS(pp1, pp2) ( (pp1).p1 >= (pp2).p1 ) |
#define | ISNOTZEROPOS(pp) ( (pp).p1 != 0 ) |
#define | ISZEROPOS(pp) ( (pp).p1 == 0 ) |
#define | ISPOSPOS(pp) ( (pp).p1 > 0 ) |
#define | ISNEGPOS(pp) ( (pp).p1 < 0 ) |
#define | TOLONG(x) ((LONG)(x)) |
#define | Add2Com(x) { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); } |
#define | Add3Com(x1, x2) { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); } |
#define | Add4Com(x1, x2, x3) |
#define | Add5Com(x1, x2, x3, x4) |
#define | WantAddPointers(x) |
#define | WantAddLongs(x) |
#define | WantAddPositions(x) |
#define | FORM_INLINE inline |
#define | MEMORYMACROS |
#define | TermMalloc(x) ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] ) |
#define | NumberMalloc(x) ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] ) |
#define | CacheNumberMalloc(x) ( (AT.CacheNumberMemTop <= 0 ) ? CacheNumberMallocAddMemory(BHEAD0), AT.CacheNumberMemHeap[--AT.CacheNumberMemTop]: AT.CacheNumberMemHeap[--AT.CacheNumberMemTop] ) |
#define | TermFree(TermMem, x) AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem) |
#define | NumberFree(NumberMem, x) AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem) |
#define | CacheNumberFree(NumberMem, x) AT.CacheNumberMemHeap[AT.CacheNumberMemTop++] = (UWORD *)(NumberMem) |
#define | NestingChecksum() (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel +AC.SwitchLevel) |
#define | MesNesting() MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do") |
#define | MarkPolyRatFunDirty(T) |
#define | PUSHPREASSIGNLEVEL |
#define | POPPREASSIGNLEVEL |
#define | EXTERNLOCK(x) |
#define | INILOCK(x) |
#define | LOCK(x) |
#define | UNLOCK(x) |
#define | EXTERNRWLOCK(x) |
#define | INIRWLOCK(x) |
#define | RWLOCKR(x) |
#define | RWLOCKW(x) |
#define | UNRWLOCK(x) |
#define | MLOCK(x) |
#define | MUNLOCK(x) |
#define | GETIDENTITY |
#define | GETBIDENTITY |
#define | M_alloc(x) malloc((size_t)(x)) |
#define | CompareTerms ((COMPARE)AR.CompareRoutine) |
#define | FiniShuffle AN.SHvar.finishuf |
#define | DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle) |
Typedefs | |
typedef int(* | WRITEBUFTOEXTCHANNEL) (char *, size_t) |
typedef int(* | GETCFROMEXTCHANNEL) (VOID) |
typedef int(* | SETTERMINATORFOREXTERNALCHANNEL) (char *) |
typedef int(* | SETKILLMODEFOREXTERNALCHANNEL) (int, int) |
typedef LONG(* | WRITEFILE) (int, UBYTE *, LONG) |
typedef WORD(* | GETTERM) (PHEAD WORD *) |
Functions | |
VOID | TELLFILE (int, POSITION *) |
VOID | StartVariables () |
VOID | setSignalHandlers (VOID) |
UBYTE * | CodeToLine (WORD, UBYTE *) |
UBYTE * | AddArrayIndex (WORD, UBYTE *) |
INDEXENTRY * | FindInIndex (WORD, FILEDATA *, WORD, WORD) |
INDEXENTRY * | NextFileIndex (POSITION *) |
WORD * | PasteTerm (PHEAD WORD, WORD *, WORD *, WORD, WORD) |
UBYTE * | StrCopy (UBYTE *, UBYTE *) |
UBYTE * | WrtPower (UBYTE *, WORD) |
WORD | AccumGCD (PHEAD UWORD *, WORD *, UWORD *, WORD) |
VOID | AddArgs (PHEAD WORD *, WORD *, WORD *) |
WORD | AddCoef (PHEAD WORD **, WORD **) |
WORD | AddLong (UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
WORD | AddPLon (UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
WORD | AddPoly (PHEAD WORD **, WORD **) |
WORD | AddRat (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
VOID | AddToLine (UBYTE *) |
WORD | AddWild (PHEAD WORD, WORD, WORD) |
WORD | BigLong (UWORD *, WORD, UWORD *, WORD) |
WORD | BinomGen (PHEAD WORD *, WORD, WORD **, WORD, WORD, WORD, WORD, WORD, UWORD *, WORD) |
WORD | CheckWild (PHEAD WORD, WORD, WORD, WORD *) |
WORD | Chisholm (PHEAD WORD *, WORD) |
WORD | CleanExpr (WORD) |
VOID | CleanUp (WORD) |
VOID | ClearWild (PHEAD0) |
WORD | CompareFunctions (WORD *, WORD *) |
WORD | Commute (WORD *, WORD *) |
WORD | DetCommu (WORD *) |
WORD | DoesCommu (WORD *) |
int | CompArg (WORD *, WORD *) |
WORD | CompCoef (WORD *, WORD *) |
WORD | CompGroup (PHEAD WORD, WORD **, WORD *, WORD *, WORD) |
WORD | Compare1 (WORD *, WORD *, WORD) |
WORD | CountDo (WORD *, WORD *) |
WORD | CountFun (WORD *, WORD *) |
WORD | DimensionSubterm (WORD *) |
WORD | DimensionTerm (WORD *) |
WORD | DimensionExpression (PHEAD WORD *) |
WORD | Deferred (PHEAD WORD *, WORD) |
WORD | DeleteStore (WORD) |
WORD | DetCurDum (PHEAD WORD *) |
VOID | DetVars (WORD *, WORD) |
WORD | Distribute (DISTRIBUTE *, WORD) |
WORD | DivLong (UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *) |
WORD | DivRat (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
WORD | Divvy (PHEAD UWORD *, WORD *, UWORD *, WORD) |
WORD | DoDelta (WORD *) |
WORD | DoDelta3 (PHEAD WORD *, WORD) |
WORD | TestPartitions (WORD *, PARTI *) |
WORD | DoPartitions (PHEAD WORD *, WORD) |
int | CoCanonicalize (UBYTE *) |
int | DoCanonicalize (PHEAD WORD *, WORD *) |
WORD | GenTopologies (PHEAD WORD *, WORD) |
WORD | GenDiagrams (PHEAD WORD *, WORD) |
int | DoTopologyCanonicalize (PHEAD WORD *, WORD, WORD, WORD *) |
int | DoShattering (PHEAD WORD *, WORD *, WORD *, WORD) |
WORD | GenerateTopologies (PHEAD WORD, WORD, WORD, WORD) |
WORD | DoTableExpansion (WORD *, WORD) |
WORD | DoDistrib (PHEAD WORD *, WORD) |
WORD | DoShuffle (WORD *, WORD, WORD, WORD) |
WORD | DoPermutations (PHEAD WORD *, WORD) |
int | Shuffle (WORD *, WORD *, WORD *) |
int | FinishShuffle (WORD *) |
WORD | DoStuffle (WORD *, WORD, WORD, WORD) |
int | Stuffle (WORD *, WORD *, WORD *) |
int | FinishStuffle (WORD *) |
WORD * | StuffRootAdd (WORD *, WORD *, WORD *) |
WORD | TestUse (WORD *, WORD) |
DBASE * | FindTB (UBYTE *) |
int | CheckTableDeclarations (DBASE *) |
WORD | Apply (WORD *, WORD) |
int | ApplyExec (WORD *, int, WORD) |
WORD | ApplyReset (WORD) |
WORD | TableReset (VOID) |
VOID | ReWorkT (WORD *, WORD *, WORD) |
WORD | GetIfDollarNum (WORD *, WORD *) |
int | FindVar (WORD *, WORD *) |
WORD | DoIfStatement (PHEAD WORD *, WORD *) |
WORD | DoOnePow (PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD, WORD *) |
void | DoRevert (WORD *, WORD *) |
WORD | DoSumF1 (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | DoSumF2 (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | DoTheta (PHEAD WORD *) |
LONG | EndSort (PHEAD WORD *, int) |
WORD | EntVar (WORD, UBYTE *, WORD, WORD, WORD, WORD) |
WORD | EpfCon (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | EpfFind (PHEAD WORD *, WORD *) |
WORD | EpfGen (WORD, WORD *, WORD *, WORD *, WORD) |
WORD | EqualArg (WORD *, WORD, WORD) |
WORD | Evaluate (UBYTE **) |
int | Factorial (PHEAD WORD, UWORD *, WORD *) |
int | Bernoulli (WORD, UWORD *, WORD *) |
int | FactorIn (PHEAD WORD *, WORD) |
int | FactorInExpr (PHEAD WORD *, WORD) |
WORD | FindAll (PHEAD WORD *, WORD *, WORD, WORD *) |
WORD | FindMulti (PHEAD WORD *, WORD *) |
WORD | FindOnce (PHEAD WORD *, WORD *) |
WORD | FindOnly (PHEAD WORD *, WORD *) |
WORD | FindRest (PHEAD WORD *, WORD *) |
WORD | FindSpecial (WORD *) |
WORD | FindrNumber (WORD, VARRENUM *) |
VOID | FiniLine (VOID) |
WORD | FiniTerm (PHEAD WORD *, WORD *, WORD *, WORD, WORD) |
WORD | FlushOut (POSITION *, FILEHANDLE *, int) |
VOID | FunLevel (PHEAD WORD *) |
VOID | AdjustRenumScratch (PHEAD0) |
VOID | GarbHand (VOID) |
WORD | GcdLong (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
WORD | LcmLong (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
VOID | GCD (UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
ULONG | GCD2 (ULONG, ULONG) |
WORD | Generator (PHEAD WORD *, WORD) |
WORD | GetBinom (UWORD *, WORD *, WORD, WORD) |
WORD | GetFromStore (WORD *, POSITION *, RENUMBER, WORD *, WORD) |
WORD | GetLong (UBYTE *, UWORD *, WORD *) |
WORD | GetMoreTerms (WORD *) |
WORD | GetMoreFromMem (WORD *, WORD **) |
WORD | GetOneTerm (PHEAD WORD *, FILEHANDLE *, POSITION *, int) |
RENUMBER | GetTable (WORD, POSITION *, WORD) |
WORD | GetTerm (PHEAD WORD *) |
WORD | Glue (PHEAD WORD *, WORD *, WORD *, WORD) |
WORD | InFunction (PHEAD WORD *, WORD *) |
VOID | IniLine (WORD) |
WORD | IniVars (VOID) |
VOID | Initialize (VOID) |
WORD | InsertTerm (PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD) |
VOID | LongToLine (UWORD *, WORD) |
WORD | MakeDirty (WORD *, WORD *, WORD) |
VOID | MarkDirty (WORD *, WORD) |
VOID | PolyFunDirty (PHEAD WORD *) |
VOID | PolyFunClean (PHEAD WORD *) |
WORD | MakeModTable (VOID) |
WORD | MatchE (PHEAD WORD *, WORD *, WORD *, WORD) |
int | MatchCy (PHEAD WORD *, WORD *, WORD *, WORD) |
int | FunMatchCy (PHEAD WORD *, WORD *, WORD *, WORD) |
int | FunMatchSy (PHEAD WORD *, WORD *, WORD *, WORD) |
int | MatchArgument (PHEAD WORD *, WORD *) |
WORD | MatchFunction (PHEAD WORD *, WORD *, WORD *) |
WORD | MergePatches (WORD) |
WORD | MesCerr (char *, UBYTE *) |
WORD | MesComp (char *, UBYTE *, UBYTE *) |
WORD | Modulus (WORD *) |
VOID | MoveDummies (PHEAD WORD *, WORD) |
WORD | MulLong (UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
WORD | MulRat (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
WORD | Mully (PHEAD UWORD *, WORD *, UWORD *, WORD) |
WORD | MultDo (PHEAD WORD *, WORD *) |
WORD | NewSort (PHEAD0) |
WORD | ExtraSymbol (WORD, WORD, WORD, WORD *, WORD *) |
WORD | Normalize (PHEAD WORD *) |
WORD | BracketNormalize (PHEAD WORD *) |
VOID | DropCoefficient (PHEAD WORD *) |
VOID | DropSymbols (PHEAD WORD *) |
int | PutInside (PHEAD WORD *, WORD *) |
WORD | OpenTemp (VOID) |
VOID | Pack (UWORD *, WORD *, UWORD *, WORD) |
LONG | PasteFile (PHEAD WORD, WORD *, POSITION *, WORD **, RENUMBER, WORD *, WORD) |
WORD | Permute (PERM *, WORD) |
WORD | PermuteP (PERMP *, WORD) |
WORD | PolyFunMul (PHEAD WORD *) |
WORD | PopVariables (VOID) |
WORD | PrepPoly (PHEAD WORD *, WORD) |
WORD | Processor (VOID) |
WORD | Product (UWORD *, WORD *, WORD) |
VOID | PrtLong (UWORD *, WORD, UBYTE *) |
VOID | PrtTerms (VOID) |
VOID | PrintRunningTime (VOID) |
LONG | GetRunningTime (VOID) |
WORD | PutBracket (PHEAD WORD *) |
LONG | PutIn (FILEHANDLE *, POSITION *, WORD *, WORD **, int) |
WORD | PutInStore (INDEXENTRY *, WORD) |
WORD | PutOut (PHEAD WORD *, POSITION *, FILEHANDLE *, WORD) |
UWORD | Quotient (UWORD *, WORD *, WORD) |
WORD | RaisPow (PHEAD UWORD *, WORD *, UWORD) |
VOID | RaisPowCached (PHEAD WORD, WORD, UWORD **, WORD *) |
WORD | RaisPowMod (WORD, WORD, WORD) |
int | NormalModulus (UWORD *, WORD *) |
int | MakeInverses (VOID) |
int | GetModInverses (WORD, WORD, WORD *, WORD *) |
int | GetLongModInverses (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *) |
VOID | RatToLine (UWORD *, WORD) |
WORD | RatioFind (PHEAD WORD *, WORD *) |
WORD | RatioGen (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | ReNumber (PHEAD WORD *) |
WORD | ReadSnum (UBYTE **) |
WORD | Remain10 (UWORD *, WORD *) |
WORD | Remain4 (UWORD *, WORD *) |
WORD | ResetScratch (VOID) |
WORD | ResolveSet (PHEAD WORD *, WORD *, WORD *) |
WORD | RevertScratch (VOID) |
WORD | ScanFunctions (PHEAD WORD *, WORD *, WORD) |
VOID | SeekScratch (FILEHANDLE *, POSITION *) |
VOID | SetEndScratch (FILEHANDLE *, POSITION *) |
VOID | SetEndHScratch (FILEHANDLE *, POSITION *) |
WORD | SetFileIndex (VOID) |
WORD | Sflush (FILEHANDLE *) |
WORD | Simplify (PHEAD UWORD *, WORD *, UWORD *, WORD *) |
WORD | SortWild (WORD *, WORD) |
FILE * | LocateBase (char **, char **) |
LONG | SplitMerge (PHEAD WORD **, LONG) |
WORD | StoreTerm (PHEAD WORD *) |
VOID | SubPLon (UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
VOID | Substitute (PHEAD WORD *, WORD *, WORD) |
WORD | SymFind (PHEAD WORD *, WORD *) |
WORD | SymGen (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | Symmetrize (PHEAD WORD *, WORD *, WORD, WORD, WORD) |
int | FullSymmetrize (PHEAD WORD *, int) |
WORD | TakeModulus (UWORD *, WORD *, UWORD *, WORD, WORD) |
WORD | TakeNormalModulus (UWORD *, WORD *, UWORD *, WORD, WORD) |
VOID | TalToLine (UWORD) |
WORD | TenVec (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | TenVecFind (PHEAD WORD *, WORD *) |
WORD | TermRenumber (WORD *, RENUMBER, WORD) |
VOID | TestDrop (VOID) |
VOID | PutInVflags (WORD) |
WORD | TestMatch (PHEAD WORD *, WORD *) |
WORD | TestSub (PHEAD WORD *, WORD) |
LONG | TimeCPU (WORD) |
LONG | TimeChildren (WORD) |
LONG | TimeWallClock (WORD) |
LONG | Timer (int) |
int | GetTimerInfo (LONG **, LONG **) |
void | WriteTimerInfo (LONG *, LONG *) |
LONG | GetWorkerTimes (VOID) |
WORD | ToStorage (EXPRESSIONS, POSITION *) |
VOID | TokenToLine (UBYTE *) |
WORD | Trace4 (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | Trace4Gen (PHEAD TRACES *, WORD) |
WORD | Trace4no (WORD, WORD *, TRACES *) |
WORD | TraceFind (PHEAD WORD *, WORD *) |
WORD | TraceN (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | TraceNgen (PHEAD TRACES *, WORD) |
WORD | TraceNno (WORD, WORD *, TRACES *) |
WORD | Traces (PHEAD WORD *, WORD *, WORD, WORD) |
WORD | Trick (WORD *, TRACES *) |
WORD | TryDo (PHEAD WORD *, WORD *, WORD) |
VOID | UnPack (UWORD *, WORD, WORD *, WORD *) |
WORD | VarStore (UBYTE *, WORD, WORD, WORD) |
WORD | WildFill (PHEAD WORD *, WORD *, WORD *) |
WORD | WriteAll (VOID) |
WORD | WriteOne (UBYTE *, int, int, WORD) |
VOID | WriteArgument (WORD *) |
WORD | WriteExpression (WORD *, LONG) |
WORD | WriteInnerTerm (WORD *, WORD) |
VOID | WriteLists (VOID) |
VOID | WriteSetup (VOID) |
VOID | WriteStats (POSITION *, WORD) |
WORD | WriteSubTerm (WORD *, WORD) |
WORD | WriteTerm (WORD *, WORD *, WORD, WORD, WORD) |
WORD | execarg (PHEAD WORD *, WORD) |
WORD | execterm (PHEAD WORD *, WORD) |
VOID | SpecialCleanup (PHEAD0) |
void | SetMods () |
void | UnSetMods () |
WORD | DoExecute (WORD, WORD) |
VOID | SetScratch (FILEHANDLE *, POSITION *) |
VOID | Warning (char *) |
VOID | HighWarning (char *) |
int | SpareTable (TABLES) |
UBYTE * | strDup1 (UBYTE *, char *) |
VOID * | Malloc (LONG) |
VOID * | Malloc1 (LONG, const char *) |
int | DoTail (int, UBYTE **) |
int | OpenInput (VOID) |
int | PutPreVar (UBYTE *, UBYTE *, UBYTE *, int) |
VOID | Error0 (char *) |
VOID | Error1 (char *, UBYTE *) |
VOID | Error2 (char *, char *, UBYTE *) |
UBYTE | ReadFromStream (STREAM *) |
UBYTE | GetFromStream (STREAM *) |
UBYTE | LookInStream (STREAM *) |
STREAM * | OpenStream (UBYTE *, int, int, int) |
int | LocateFile (UBYTE **, int) |
STREAM * | CloseStream (STREAM *) |
VOID | PositionStream (STREAM *, LONG) |
int | ReverseStatements (STREAM *) |
int | ProcessOption (UBYTE *, UBYTE *, int) |
int | DoSetups (VOID) |
VOID | Terminate (int) |
NAMENODE * | GetNode (NAMETREE *, UBYTE *) |
int | AddName (NAMETREE *, UBYTE *, WORD, WORD, int *) |
int | GetName (NAMETREE *, UBYTE *, WORD *, int) |
UBYTE * | GetFunction (UBYTE *, WORD *) |
UBYTE * | GetNumber (UBYTE *, WORD *) |
int | GetLastExprName (UBYTE *, WORD *) |
int | GetAutoName (UBYTE *, WORD *) |
int | GetVar (UBYTE *, WORD *, WORD *, int, int) |
int | MakeDubious (NAMETREE *, UBYTE *, WORD *) |
int | GetOName (NAMETREE *, UBYTE *, WORD *, int) |
VOID | DumpTree (NAMETREE *) |
VOID | DumpNode (NAMETREE *, WORD, WORD) |
VOID | LinkTree (NAMETREE *, WORD, WORD) |
VOID | CopyTree (NAMETREE *, NAMETREE *, WORD, WORD) |
int | CompactifyTree (NAMETREE *, WORD) |
NAMETREE * | MakeNameTree (VOID) |
VOID | FreeNameTree (NAMETREE *) |
int | AddExpression (UBYTE *, int, int) |
int | AddSymbol (UBYTE *, int, int, int, int) |
int | AddDollar (UBYTE *, WORD, WORD *, LONG) |
int | ReplaceDollar (WORD, WORD, WORD *, LONG) |
int | DollarRaiseLow (UBYTE *, LONG) |
int | AddVector (UBYTE *, int, int) |
int | AddDubious (UBYTE *) |
int | AddIndex (UBYTE *, int, int) |
UBYTE * | DoDimension (UBYTE *, int *, int *) |
int | AddFunction (UBYTE *, int, int, int, int, int, int, int) |
int | CoCommuteInSet (UBYTE *) |
int | CoFunction (UBYTE *, int, int) |
int | TestName (UBYTE *) |
int | AddSet (UBYTE *, WORD) |
int | DoElements (UBYTE *, SETS, UBYTE *) |
int | DoTempSet (UBYTE *, UBYTE *) |
int | NameConflict (int, UBYTE *) |
int | OpenFile (char *) |
int | OpenAddFile (char *) |
int | ReOpenFile (char *) |
int | CreateFile (char *) |
int | CreateLogFile (char *) |
VOID | CloseFile (int) |
int | CopyFile (char *, char *) |
int | CreateHandle (VOID) |
LONG | ReadFile (int, UBYTE *, LONG) |
LONG | ReadPosFile (PHEAD FILEHANDLE *, UBYTE *, LONG, POSITION *) |
LONG | WriteFileToFile (int, UBYTE *, LONG) |
VOID | SeekFile (int, POSITION *, int) |
LONG | TellFile (int) |
void | FlushFile (int) |
int | GetPosFile (int, fpos_t *) |
int | SetPosFile (int, fpos_t *) |
VOID | SynchFile (int) |
VOID | TruncateFile (int) |
int | GetChannel (char *, int) |
int | GetAppendChannel (char *) |
int | CloseChannel (char *) |
VOID | inictable (VOID) |
KEYWORD * | findcommand (UBYTE *) |
int | inicbufs (VOID) |
VOID | StartFiles (VOID) |
UBYTE * | MakeDate (VOID) |
VOID | PreProcessor (VOID) |
VOID * | FromList (LIST *) |
VOID * | From0List (LIST *) |
VOID * | FromVarList (LIST *) |
int | DoubleList (VOID ***, int *, int, char *) |
int | DoubleLList (VOID ***, LONG *, int, char *) |
void | DoubleBuffer (void **, void **, int, char *) |
void | ExpandBuffer (void **, LONG *, int) |
LONG | iexp (LONG, int) |
int | IsLikeVector (WORD *) |
int | AreArgsEqual (WORD *, WORD *) |
int | CompareArgs (WORD *, WORD *) |
UBYTE * | SkipField (UBYTE *, int) |
int | StrCmp (UBYTE *, UBYTE *) |
int | StrICmp (UBYTE *, UBYTE *) |
int | StrHICmp (UBYTE *, UBYTE *) |
int | StrICont (UBYTE *, UBYTE *) |
int | CmpArray (WORD *, WORD *, WORD) |
int | ConWord (UBYTE *, UBYTE *) |
int | StrLen (UBYTE *) |
UBYTE * | GetPreVar (UBYTE *, int) |
void | ToGeneral (WORD *, WORD *, WORD) |
WORD | ToPolyFunGeneral (PHEAD WORD *) |
int | ToFast (WORD *, WORD *) |
SETUPPARAMETERS * | GetSetupPar (UBYTE *) |
int | RecalcSetups (VOID) |
int | AllocSetups (VOID) |
SORTING * | AllocSort (LONG, LONG, LONG, LONG, int, int, LONG) |
VOID | AllocSortFileName (SORTING *) |
UBYTE * | LoadInputFile (UBYTE *, int) |
UBYTE | GetInput (VOID) |
VOID | ClearPushback (VOID) |
UBYTE | GetChar (int) |
VOID | CharOut (UBYTE) |
VOID | UnsetAllowDelay (VOID) |
VOID | PopPreVars (int) |
VOID | IniModule (int) |
VOID | IniSpecialModule (int) |
int | ModuleInstruction (int *, int *) |
int | PreProInstruction (VOID) |
int | LoadInstruction (int) |
int | LoadStatement (int) |
KEYWORD * | FindKeyWord (UBYTE *, KEYWORD *, int) |
KEYWORD * | FindInKeyWord (UBYTE *, KEYWORD *, int) |
int | DoDefine (UBYTE *) |
int | DoRedefine (UBYTE *) |
int | TheDefine (UBYTE *, int) |
int | TheUndefine (UBYTE *) |
int | ClearMacro (UBYTE *) |
int | DoUndefine (UBYTE *) |
int | DoInclude (UBYTE *) |
int | DoReverseInclude (UBYTE *) |
int | Include (UBYTE *, int) |
int | DoExternal (UBYTE *) |
int | DoToExternal (UBYTE *) |
int | DoFromExternal (UBYTE *) |
int | DoPrompt (UBYTE *) |
int | DoSetExternal (UBYTE *) |
int | DoSetExternalAttr (UBYTE *) |
int | DoRmExternal (UBYTE *) |
int | DoFactDollar (UBYTE *) |
WORD | GetDollarNumber (UBYTE **, DOLLARS) |
int | DoSetRandom (UBYTE *) |
int | DoOptimize (UBYTE *) |
int | DoClearOptimize (UBYTE *) |
int | DoSkipExtraSymbols (UBYTE *) |
int | DoTimeOutAfter (UBYTE *) |
int | DoMessage (UBYTE *) |
int | DoPreOut (UBYTE *) |
int | DoPreAppend (UBYTE *) |
int | DoPreCreate (UBYTE *) |
int | DoPreAssign (UBYTE *) |
int | DoPreBreak (UBYTE *) |
int | DoPreDefault (UBYTE *) |
int | DoPreSwitch (UBYTE *) |
int | DoPreEndSwitch (UBYTE *) |
int | DoPreCase (UBYTE *) |
int | DoPreShow (UBYTE *) |
int | DoPreExchange (UBYTE *) |
int | DoSystem (UBYTE *) |
int | DoPipe (UBYTE *) |
VOID | StartPrepro (VOID) |
int | DoIfdef (UBYTE *, int) |
int | DoIfydef (UBYTE *) |
int | DoIfndef (UBYTE *) |
int | DoElse (UBYTE *) |
int | DoElseif (UBYTE *) |
int | DoEndif (UBYTE *) |
int | DoTerminate (UBYTE *) |
int | DoIf (UBYTE *) |
int | DoCall (UBYTE *) |
int | DoDebug (UBYTE *) |
int | DoDo (UBYTE *) |
int | DoBreakDo (UBYTE *) |
int | DoEnddo (UBYTE *) |
int | DoEndprocedure (UBYTE *) |
int | DoInside (UBYTE *) |
int | DoEndInside (UBYTE *) |
int | DoProcedure (UBYTE *) |
int | DoPrePrintTimes (UBYTE *) |
int | DoPreWrite (UBYTE *) |
int | DoPreClose (UBYTE *) |
int | DoPreRemove (UBYTE *) |
int | DoCommentChar (UBYTE *) |
int | DoPrcExtension (UBYTE *) |
int | DoPreReset (UBYTE *) |
VOID | WriteString (int, UBYTE *, int) |
VOID | WriteUnfinString (int, UBYTE *, int) |
UBYTE * | AddToString (UBYTE *, UBYTE *, int) |
UBYTE * | PreCalc (VOID) |
UBYTE * | PreEval (UBYTE *, LONG *) |
VOID | NumToStr (UBYTE *, LONG) |
int | PreCmp (int, int, UBYTE *, int, int, UBYTE *, int) |
int | PreEq (int, int, UBYTE *, int, int, UBYTE *, int) |
UBYTE * | pParseObject (UBYTE *, int *, LONG *) |
UBYTE * | PreIfEval (UBYTE *, int *) |
int | EvalPreIf (UBYTE *) |
int | PreLoad (PRELOAD *, UBYTE *, UBYTE *, int, char *) |
int | PreSkip (UBYTE *, UBYTE *, int) |
UBYTE * | EndOfToken (UBYTE *) |
VOID | SetSpecialMode (int, int) |
VOID | MakeGlobal (VOID) |
int | ExecModule (int) |
int | ExecStore (VOID) |
VOID | FullCleanUp (VOID) |
int | DoExecStatement (VOID) |
int | DoPipeStatement (VOID) |
int | DoPolyfun (UBYTE *) |
int | DoPolyratfun (UBYTE *) |
int | CompileStatement (UBYTE *) |
UBYTE * | ToToken (UBYTE *) |
int | GetDollar (UBYTE *) |
int | MesWork (VOID) |
int | MesPrint (const char *,...) |
int | MesCall (char *) |
UBYTE * | NumCopy (WORD, UBYTE *) |
char * | LongCopy (LONG, char *) |
char * | LongLongCopy (off_t *, char *) |
VOID | ReserveTempFiles (int) |
VOID | PrintTerm (WORD *, char *) |
VOID | PrintTermC (WORD *, char *) |
VOID | PrintSubTerm (WORD *, char *) |
VOID | PrintWords (WORD *, LONG) |
void | PrintSeq (WORD *, char *) |
int | ExpandTripleDots (int) |
LONG | ComPress (WORD **, LONG *) |
VOID | StageSort (FILEHANDLE *) |
void | M_free (VOID *, const char *) |
void | ClearWildcardNames (VOID) |
int | AddWildcardName (UBYTE *) |
int | GetWildcardName (UBYTE *) |
void | Globalize (int) |
void | ResetVariables (int) |
void | AddToPreTypes (int) |
void | MessPreNesting (int) |
LONG | GetStreamPosition (STREAM *) |
WORD * | DoubleCbuffer (int, WORD *, int) |
WORD * | AddLHS (int) |
WORD * | AddRHS (int, int) |
int | AddNtoL (int, WORD *) |
int | AddNtoC (int, int, WORD *, int) |
VOID | DoubleIfBuffers (VOID) |
STREAM * | CreateStream (UBYTE *) |
int | setonoff (UBYTE *, int *, int, int) |
int | DoPrint (UBYTE *, int) |
int | SetExpr (UBYTE *, int, int) |
void | AddToCom (int, WORD *) |
int | Add2ComStrings (int, WORD *, UBYTE *, UBYTE *) |
int | DoSymmetrize (UBYTE *, int) |
int | DoArgument (UBYTE *, int) |
int | ArgFactorize (PHEAD WORD *, WORD *) |
WORD * | TakeArgContent (PHEAD WORD *, WORD *) |
WORD * | MakeInteger (PHEAD WORD *, WORD *, WORD *) |
WORD * | MakeMod (PHEAD WORD *, WORD *, WORD *) |
WORD | FindArg (PHEAD WORD *) |
WORD | InsertArg (PHEAD WORD *, WORD *, int) |
int | CleanupArgCache (PHEAD WORD) |
int | ArgSymbolMerge (WORD *, WORD *) |
int | ArgDotproductMerge (WORD *, WORD *) |
void | SortWeights (LONG *, LONG *, WORD) |
int | DoBrackets (UBYTE *, int) |
int | DoPutInside (UBYTE *, int) |
WORD * | CountComp (UBYTE *, WORD *) |
int | CoAntiBracket (UBYTE *) |
int | CoAntiSymmetrize (UBYTE *) |
int | DoArgPlode (UBYTE *, int) |
int | CoArgExplode (UBYTE *) |
int | CoArgImplode (UBYTE *) |
int | CoArgument (UBYTE *) |
int | CoInside (UBYTE *) |
int | ExecInside (UBYTE *) |
int | CoInExpression (UBYTE *) |
int | CoInParallel (UBYTE *) |
int | CoNotInParallel (UBYTE *) |
int | DoInParallel (UBYTE *, int) |
int | CoEndInExpression (UBYTE *) |
int | CoBracket (UBYTE *) |
int | CoPutInside (UBYTE *) |
int | CoAntiPutInside (UBYTE *) |
int | CoMultiBracket (UBYTE *) |
int | CoCFunction (UBYTE *) |
int | CoCTensor (UBYTE *) |
int | CoCollect (UBYTE *) |
int | CoCompress (UBYTE *) |
int | CoContract (UBYTE *) |
int | CoCycleSymmetrize (UBYTE *) |
int | CoDelete (UBYTE *) |
int | CoTableBase (UBYTE *) |
int | CoApply (UBYTE *) |
int | CoDenominators (UBYTE *) |
int | CoDimension (UBYTE *) |
int | CoDiscard (UBYTE *) |
int | CoDisorder (UBYTE *) |
int | CoDrop (UBYTE *) |
int | CoDropCoefficient (UBYTE *) |
int | CoDropSymbols (UBYTE *) |
int | CoElse (UBYTE *) |
int | CoElseIf (UBYTE *) |
int | CoEndArgument (UBYTE *) |
int | CoEndInside (UBYTE *) |
int | CoEndIf (UBYTE *) |
int | CoEndRepeat (UBYTE *) |
int | CoEndTerm (UBYTE *) |
int | CoEndWhile (UBYTE *) |
int | CoExit (UBYTE *) |
int | CoFactArg (UBYTE *) |
int | CoFactDollar (UBYTE *) |
int | CoFactorize (UBYTE *) |
int | CoNFactorize (UBYTE *) |
int | CoUnFactorize (UBYTE *) |
int | CoNUnFactorize (UBYTE *) |
int | DoFactorize (UBYTE *, int) |
int | CoFill (UBYTE *) |
int | CoFillExpression (UBYTE *) |
int | CoFixIndex (UBYTE *) |
int | CoFormat (UBYTE *) |
int | CoGlobal (UBYTE *) |
int | CoGlobalFactorized (UBYTE *) |
int | CoGoTo (UBYTE *) |
int | CoId (UBYTE *) |
int | CoIdNew (UBYTE *) |
int | CoIdOld (UBYTE *) |
int | CoIf (UBYTE *) |
int | CoIfMatch (UBYTE *) |
int | CoIfNoMatch (UBYTE *) |
int | CoIndex (UBYTE *) |
int | CoInsideFirst (UBYTE *) |
int | CoKeep (UBYTE *) |
int | CoLabel (UBYTE *) |
int | CoLoad (UBYTE *) |
int | CoLocal (UBYTE *) |
int | CoLocalFactorized (UBYTE *) |
int | CoMany (UBYTE *) |
int | CoMerge (UBYTE *) |
int | CoStuffle (UBYTE *) |
int | CoMetric (UBYTE *) |
int | CoModOption (UBYTE *) |
int | CoModuleOption (UBYTE *) |
int | CoModulus (UBYTE *) |
int | CoMulti (UBYTE *) |
int | CoMultiply (UBYTE *) |
int | CoNFunction (UBYTE *) |
int | CoNPrint (UBYTE *) |
int | CoNTensor (UBYTE *) |
int | CoNWrite (UBYTE *) |
int | CoNoDrop (UBYTE *) |
int | CoNoSkip (UBYTE *) |
int | CoNormalize (UBYTE *) |
int | CoMakeInteger (UBYTE *) |
int | CoFlags (UBYTE *, int) |
int | CoOff (UBYTE *) |
int | CoOn (UBYTE *) |
int | CoOnce (UBYTE *) |
int | CoOnly (UBYTE *) |
int | CoOptimizeOption (UBYTE *) |
int | CoOptimize (UBYTE *) |
int | CoPolyFun (UBYTE *) |
int | CoPolyRatFun (UBYTE *) |
int | CoPrint (UBYTE *) |
int | CoPrintB (UBYTE *) |
int | CoProperCount (UBYTE *) |
int | CoUnitTrace (UBYTE *) |
int | CoRCycleSymmetrize (UBYTE *) |
int | CoRatio (UBYTE *) |
int | CoRedefine (UBYTE *) |
int | CoRenumber (UBYTE *) |
int | CoRepeat (UBYTE *) |
int | CoSave (UBYTE *) |
int | CoSelect (UBYTE *) |
int | CoSet (UBYTE *) |
int | CoSetExitFlag (UBYTE *) |
int | CoSkip (UBYTE *) |
int | CoProcessBucket (UBYTE *) |
int | CoPushHide (UBYTE *) |
int | CoPopHide (UBYTE *) |
int | CoHide (UBYTE *) |
int | CoIntoHide (UBYTE *) |
int | CoNoHide (UBYTE *) |
int | CoUnHide (UBYTE *) |
int | CoNoUnHide (UBYTE *) |
int | CoSort (UBYTE *) |
int | CoSplitArg (UBYTE *) |
int | CoSplitFirstArg (UBYTE *) |
int | CoSplitLastArg (UBYTE *) |
int | CoSum (UBYTE *) |
int | CoSymbol (UBYTE *) |
int | CoSymmetrize (UBYTE *) |
int | DoTable (UBYTE *, int) |
int | CoTable (UBYTE *) |
int | CoTerm (UBYTE *) |
int | CoNTable (UBYTE *) |
int | CoCTable (UBYTE *) |
void | EmptyTable (TABLES) |
int | CoToTensor (UBYTE *) |
int | CoToVector (UBYTE *) |
int | CoTrace4 (UBYTE *) |
int | CoTraceN (UBYTE *) |
int | CoChisholm (UBYTE *) |
int | CoTransform (UBYTE *) |
int | CoClearTable (UBYTE *) |
int | DoChain (UBYTE *, int) |
int | CoChainin (UBYTE *) |
int | CoChainout (UBYTE *) |
int | CoTryReplace (UBYTE *) |
int | CoVector (UBYTE *) |
int | CoWhile (UBYTE *) |
int | CoWrite (UBYTE *) |
int | CoAuto (UBYTE *) |
int | CoSwitch (UBYTE *) |
int | CoCase (UBYTE *) |
int | CoBreak (UBYTE *) |
int | CoDefault (UBYTE *) |
int | CoEndSwitch (UBYTE *) |
int | CoTBaddto (UBYTE *) |
int | CoTBaudit (UBYTE *) |
int | CoTBcleanup (UBYTE *) |
int | CoTBcreate (UBYTE *) |
int | CoTBenter (UBYTE *) |
int | CoTBhelp (UBYTE *) |
int | CoTBload (UBYTE *) |
int | CoTBoff (UBYTE *) |
int | CoTBon (UBYTE *) |
int | CoTBopen (UBYTE *) |
int | CoTBreplace (UBYTE *) |
int | CoTBuse (UBYTE *) |
int | CoTestUse (UBYTE *) |
int | CoThreadBucket (UBYTE *) |
int | AddComString (int, WORD *, UBYTE *, int) |
int | CompileAlgebra (UBYTE *, int, WORD *) |
int | IsIdStatement (UBYTE *) |
UBYTE * | IsRHS (UBYTE *, UBYTE) |
int | ParenthesesTest (UBYTE *) |
int | tokenize (UBYTE *, WORD) |
void | WriteTokens (SBYTE *) |
int | simp1token (SBYTE *) |
int | simpwtoken (SBYTE *) |
int | simp2token (SBYTE *) |
int | simp3atoken (SBYTE *, int) |
int | simp3btoken (SBYTE *, int) |
int | simp4token (SBYTE *) |
int | simp5token (SBYTE *, int) |
int | simp6token (SBYTE *, int) |
UBYTE * | SkipAName (UBYTE *) |
int | TestTables (VOID) |
int | GetLabel (UBYTE *) |
int | CoIdExpression (UBYTE *, int) |
int | CoAssign (UBYTE *) |
int | DoExpr (UBYTE *, int, int) |
int | CompileSubExpressions (SBYTE *) |
int | CodeGenerator (SBYTE *) |
int | CompleteTerm (WORD *, UWORD *, UWORD *, WORD, WORD, int) |
int | CodeFactors (SBYTE *s) |
WORD | GenerateFactors (WORD, WORD) |
int | InsTree (int, int) |
int | FindTree (int, WORD *) |
void | RedoTree (CBUF *, int) |
void | ClearTree (int) |
int | CatchDollar (int) |
int | AssignDollar (PHEAD WORD *, WORD) |
UBYTE * | WriteDollarToBuffer (WORD, WORD) |
UBYTE * | WriteDollarFactorToBuffer (WORD, WORD, WORD) |
void | AddToDollarBuffer (UBYTE *) |
int | PutTermInDollar (WORD *, WORD) |
void | TermAssign (WORD *) |
void | WildDollars (PHEAD WORD *) |
LONG | numcommute (WORD *, LONG *) |
int | FullRenumber (PHEAD WORD *, WORD) |
int | Lus (WORD *, WORD, WORD, WORD, WORD, WORD) |
int | FindLus (int, int, int) |
int | CoReplaceLoop (UBYTE *) |
int | CoFindLoop (UBYTE *) |
int | DoFindLoop (UBYTE *, int) |
int | CoFunPowers (UBYTE *) |
int | SortTheList (int *, int) |
int | MatchIsPossible (WORD *, WORD *) |
int | StudyPattern (WORD *) |
WORD | DolToTensor (PHEAD WORD) |
WORD | DolToFunction (PHEAD WORD) |
WORD | DolToVector (PHEAD WORD) |
WORD | DolToNumber (PHEAD WORD) |
WORD | DolToSymbol (PHEAD WORD) |
WORD | DolToIndex (PHEAD WORD) |
LONG | DolToLong (PHEAD WORD) |
int | DollarFactorize (PHEAD WORD) |
int | CoPrintTable (UBYTE *) |
int | CoDeallocateTable (UBYTE *) |
void | CleanDollarFactors (DOLLARS) |
WORD * | TakeDollarContent (PHEAD WORD *, WORD **) |
WORD * | MakeDollarInteger (PHEAD WORD *, WORD **) |
WORD * | MakeDollarMod (PHEAD WORD *, WORD **) |
int | GetDolNum (PHEAD WORD *, WORD *) |
void | AddPotModdollar (WORD) |
int | Optimize (WORD, int) |
int | ClearOptimize (VOID) |
int | LoadOpti (WORD) |
int | PutObject (WORD *, int) |
void | CleanOptiBuffer (VOID) |
int | PrintOptima (WORD) |
int | FindScratchName (VOID) |
WORD | MaxPowerOpti (LONG) |
WORD | HuntNumFactor (LONG, WORD *, int) |
WORD | HuntFactor (LONG, WORD *, int) |
void | HuntPairs (LONG, WORD) |
void | HuntBrackets (LONG) |
int | AddToOpti (WORD *, int) |
LONG | TestNewSca (LONG, WORD *, WORD *) |
void | NormOpti (WORD *) |
void | SortOpti (LONG) |
void | SplitOpti (WORD **, LONG) |
void | CombiOpti (VOID) |
int | TakeLongRoot (UWORD *, WORD *, WORD) |
int | TakeRatRoot (UWORD *, WORD *, WORD) |
int | MakeRational (WORD, WORD, WORD *, WORD *) |
int | MakeLongRational (PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *) |
void | HuntPowers (LONG, WORD) |
void | HuntNumBrackets (LONG) |
void | ClearTableTree (TABLES) |
int | InsTableTree (TABLES, WORD *) |
void | RedoTableTree (TABLES, int) |
int | FindTableTree (TABLES, WORD *, int) |
void | finishcbuf (WORD) |
void | clearcbuf (WORD) |
void | CleanUpSort (int) |
FILEHANDLE * | AllocFileHandle (WORD, char *) |
VOID | DeAllocFileHandle (FILEHANDLE *) |
VOID | LowerSortLevel (VOID) |
WORD * | PolyRatFunSpecial (PHEAD WORD *, WORD *) |
VOID | SimpleSplitMergeRec (WORD *, WORD, WORD *) |
VOID | SimpleSplitMerge (WORD *, WORD) |
WORD | BinarySearch (WORD *, WORD, WORD) |
int | InsideDollar (PHEAD WORD *, WORD) |
DOLLARS | DolToTerms (PHEAD WORD) |
WORD | EvalDoLoopArg (PHEAD WORD *, WORD) |
int | SetExprCases (int, int, int) |
int | TestSelect (WORD *, WORD *) |
VOID | SubsInAll (PHEAD0) |
VOID | TransferBuffer (int, int, int) |
int | TakeIDfunction (PHEAD WORD *) |
int | MakeSetupAllocs (VOID) |
int | TryFileSetups (VOID) |
void | ExchangeExpressions (int, int) |
void | ExchangeDollars (int, int) |
int | GetFirstBracket (WORD *, int) |
int | GetFirstTerm (WORD *, int) |
int | GetContent (WORD *, int) |
int | CleanupTerm (WORD *) |
WORD | ContentMerge (PHEAD WORD *, WORD *) |
UBYTE * | PreIfDollarEval (UBYTE *, int *) |
LONG | TermsInDollar (WORD) |
LONG | SizeOfDollar (WORD) |
LONG | TermsInExpression (WORD) |
LONG | SizeOfExpression (WORD) |
WORD * | TranslateExpression (UBYTE *) |
int | IsSetMember (WORD *, WORD) |
int | IsMultipleOf (WORD *, WORD *) |
int | TwoExprCompare (WORD *, WORD *, int) |
void | UpdatePositions (VOID) |
void | M_check (VOID) |
void | M_print (VOID) |
void | M_check1 (VOID) |
void | PrintTime (UBYTE *) |
POSITION * | FindBracket (WORD, WORD *) |
VOID | PutBracketInIndex (PHEAD WORD *, POSITION *) |
void | ClearBracketIndex (WORD) |
VOID | OpenBracketIndex (WORD) |
int | DoNoParallel (UBYTE *) |
int | DoParallel (UBYTE *) |
int | DoModSum (UBYTE *) |
int | DoModMax (UBYTE *) |
int | DoModMin (UBYTE *) |
int | DoModLocal (UBYTE *) |
UBYTE * | DoModDollar (UBYTE *, int) |
int | DoProcessBucket (UBYTE *) |
int | DoinParallel (UBYTE *) |
int | DonotinParallel (UBYTE *) |
int | FlipTable (FUNCTIONS, int) |
int | ChainIn (PHEAD WORD *, WORD) |
int | ChainOut (PHEAD WORD *, WORD) |
int | ArgumentImplode (PHEAD WORD *, WORD *) |
int | ArgumentExplode (PHEAD WORD *, WORD *) |
int | DenToFunction (WORD *, WORD) |
WORD | HowMany (PHEAD WORD *, WORD *) |
VOID | RemoveDollars (VOID) |
LONG | CountTerms1 (PHEAD0) |
LONG | TermsInBracket (PHEAD WORD *, WORD) |
int | Crash (VOID) |
char * | str_dup (char *) |
void | convertblock (INDEXBLOCK *, INDEXBLOCK *, int) |
void | convertnamesblock (NAMESBLOCK *, NAMESBLOCK *, int) |
void | convertiniinfo (INIINFO *, INIINFO *, int) |
int | ReadIndex (DBASE *) |
int | WriteIndexBlock (DBASE *, MLONG) |
int | WriteNamesBlock (DBASE *, MLONG) |
int | WriteIndex (DBASE *) |
int | WriteIniInfo (DBASE *) |
int | ReadIniInfo (DBASE *) |
int | AddToIndex (DBASE *, MLONG) |
DBASE * | GetDbase (char *) |
DBASE * | OpenDbase (char *) |
char * | ReadObject (DBASE *, MLONG, char *) |
char * | ReadijObject (DBASE *, MLONG, MLONG, char *) |
int | ExistsObject (DBASE *, MLONG, char *) |
int | DeleteObject (DBASE *, MLONG, char *) |
int | WriteObject (DBASE *, MLONG, char *, char *, MLONG) |
MLONG | AddObject (DBASE *, MLONG, char *, char *) |
int | Cleanup (DBASE *) |
DBASE * | NewDbase (char *, MLONG) |
void | FreeTableBase (DBASE *) |
int | ComposeTableNames (DBASE *) |
int | PutTableNames (DBASE *) |
MLONG | AddTableName (DBASE *, char *, TABLES) |
MLONG | GetTableName (DBASE *, char *) |
MLONG | FindTableNumber (DBASE *, char *) |
int | TryEnvironment (VOID) |
int | CopyExpression (FILEHANDLE *, FILEHANDLE *) |
int | set_in (UBYTE, set_of_char) |
one_byte | set_set (UBYTE, set_of_char) |
one_byte | set_del (UBYTE, set_of_char) |
one_byte | set_sub (set_of_char, set_of_char, set_of_char) |
int | DoPreAddSeparator (UBYTE *) |
int | DoPreRmSeparator (UBYTE *) |
int | openExternalChannel (UBYTE *, int, UBYTE *, UBYTE *) |
int | initPresetExternalChannels (UBYTE *, int) |
int | closeExternalChannel (int) |
int | selectExternalChannel (int) |
int | getCurrentExternalChannel (VOID) |
VOID | closeAllExternalChannels (VOID) |
UBYTE * | defineChannel (UBYTE *, HANDLERS *) |
int | writeToChannel (int, UBYTE *, HANDLERS *) |
int | writeBufToExtChannelOk (char *, size_t) |
int | getcFromExtChannelOk (VOID) |
int | setKillModeForExternalChannelOk (int, int) |
int | setTerminatorForExternalChannelOk (char *) |
int | getcFromExtChannelFailure (VOID) |
int | setKillModeForExternalChannelFailure (int, int) |
int | setTerminatorForExternalChannelFailure (char *) |
int | writeBufToExtChannelFailure (char *, size_t) |
int | ReleaseTB (VOID) |
int | SymbolNormalize (WORD *) |
int | TestFunFlag (PHEAD WORD *) |
WORD | CompareSymbols (WORD *, WORD *, WORD) |
WORD | CompareHSymbols (WORD *, WORD *, WORD) |
WORD | NextPrime (PHEAD WORD) |
WORD | Moebius (PHEAD WORD) |
UWORD | wranf (PHEAD0) |
UWORD | iranf (PHEAD UWORD) |
void | iniwranf (PHEAD0) |
UBYTE * | PreRandom (UBYTE *) |
WORD * | PolyNormPoly (PHEAD WORD) |
WORD * | EvaluateGcd (PHEAD WORD *) |
int | TreatPolyRatFun (PHEAD WORD *) |
WORD | ReadSaveHeader (VOID) |
WORD | ReadSaveIndex (FILEINDEX *) |
WORD | ReadSaveExpression (UBYTE *, UBYTE *, LONG *, LONG *) |
UBYTE * | ReadSaveTerm32 (UBYTE *, UBYTE *, UBYTE **, UBYTE *, UBYTE *, int) |
WORD | ReadSaveVariables (UBYTE *, UBYTE *, LONG *, LONG *, INDEXENTRY *, LONG *) |
WORD | WriteStoreHeader (WORD) |
void | InitRecovery (VOID) |
int | CheckRecoveryFile (VOID) |
void | DeleteRecoveryFile (VOID) |
char * | RecoveryFilename (VOID) |
int | DoRecovery (int *) |
void | DoCheckpoint (int) |
VOID | NumberMallocAddMemory (PHEAD0) |
VOID | CacheNumberMallocAddMemory (PHEAD0) |
VOID | TermMallocAddMemory (PHEAD0) |
void | ExprStatus (EXPRESSIONS) |
VOID | iniTools (VOID) |
int | TestTerm (WORD *) |
WORD | RunTransform (PHEAD WORD *term, WORD *params) |
WORD | RunEncode (PHEAD WORD *fun, WORD *args, WORD *info) |
WORD | RunDecode (PHEAD WORD *fun, WORD *args, WORD *info) |
WORD | RunReplace (PHEAD WORD *fun, WORD *args, WORD *info) |
WORD | RunImplode (WORD *fun, WORD *args) |
WORD | RunExplode (PHEAD WORD *fun, WORD *args) |
int | TestArgNum (int n, int totarg, WORD *args) |
WORD | PutArgInScratch (WORD *arg, UWORD *scrat) |
UBYTE * | ReadRange (UBYTE *s, WORD *out, int par) |
int | FindRange (PHEAD WORD *, WORD *, WORD *, WORD) |
WORD | RunPermute (PHEAD WORD *fun, WORD *args, WORD *info) |
WORD | RunReverse (PHEAD WORD *fun, WORD *args) |
WORD | RunCycle (PHEAD WORD *fun, WORD *args, WORD *info) |
WORD | RunAddArg (PHEAD WORD *fun, WORD *args) |
WORD | RunMulArg (PHEAD WORD *fun, WORD *args) |
WORD | RunIsLyndon (PHEAD WORD *fun, WORD *args, int par) |
WORD | RunToLyndon (PHEAD WORD *fun, WORD *args, int par) |
WORD | RunDropArg (PHEAD WORD *fun, WORD *args) |
WORD | RunSelectArg (PHEAD WORD *fun, WORD *args) |
WORD | RunDedup (PHEAD WORD *fun, WORD *args) |
int | NormPolyTerm (PHEAD WORD *) |
WORD | ComparePoly (WORD *, WORD *, WORD) |
int | ConvertToPoly (PHEAD WORD *, WORD *, WORD *, WORD) |
int | LocalConvertToPoly (PHEAD WORD *, WORD *, WORD, WORD) |
int | ConvertFromPoly (PHEAD WORD *, WORD *, WORD, WORD, WORD, WORD) |
WORD | FindSubterm (WORD *) |
WORD | FindLocalSubterm (PHEAD WORD *, WORD) |
void | PrintSubtermList (int, int) |
void | PrintExtraSymbol (int, WORD *, int) |
WORD | FindSubexpression (WORD *) |
void | UpdateMaxSize (VOID) |
int | CoToPolynomial (UBYTE *) |
int | CoFromPolynomial (UBYTE *) |
int | CoArgToExtraSymbol (UBYTE *) |
int | CoExtraSymbols (UBYTE *) |
UBYTE * | GetDoParam (UBYTE *, WORD **, int) |
WORD * | GetIfDollarFactor (UBYTE **, WORD *) |
int | CoDo (UBYTE *) |
int | CoEndDo (UBYTE *) |
int | ExtraSymFun (PHEAD WORD *, WORD) |
int | PruneExtraSymbols (WORD) |
int | IniFbuffer (WORD) |
void | IniFbufs (VOID) |
int | GCDfunction (PHEAD WORD *, WORD) |
WORD * | GCDfunction3 (PHEAD WORD *, WORD *) |
WORD * | GCDfunction4 (PHEAD WORD *, WORD *) |
int | ReadPolyRatFun (PHEAD WORD *) |
int | FromPolyRatFun (PHEAD WORD *, WORD **, WORD **) |
void | PRFnormalize (PHEAD WORD *) |
WORD * | PRFadd (PHEAD WORD *, WORD *) |
WORD * | PolyDiv (PHEAD WORD *, WORD *, char *) |
WORD * | PolyGCD (PHEAD WORD *, WORD *) |
WORD * | PolyAdd (PHEAD WORD *, WORD *) |
void | GCDclean (PHEAD WORD *, WORD *) |
int | RatFunNormalize (PHEAD WORD *) |
WORD * | TakeSymbolContent (PHEAD WORD *, WORD *) |
int | GCDterms (PHEAD WORD *, WORD *, WORD *) |
WORD * | PutExtraSymbols (PHEAD WORD *, WORD, int *) |
WORD * | TakeExtraSymbols (PHEAD WORD *, WORD) |
WORD * | MultiplyWithTerm (PHEAD WORD *, WORD *, WORD) |
WORD * | TakeContent (PHEAD WORD *, WORD *) |
int | MergeSymbolLists (PHEAD WORD *, WORD *, int) |
int | MergeDotproductLists (PHEAD WORD *, WORD *, int) |
WORD * | CreateExpression (PHEAD WORD) |
int | DIVfunction (PHEAD WORD *, WORD, int) |
WORD * | MULfunc (PHEAD WORD *, WORD *) |
WORD * | ConvertArgument (PHEAD WORD *, int *) |
int | ExpandRat (PHEAD WORD *) |
int | InvPoly (PHEAD WORD *, WORD, WORD) |
WORD | TestDoLoop (PHEAD WORD *, WORD) |
WORD | TestEndDoLoop (PHEAD WORD *, WORD) |
WORD * | poly_gcd (PHEAD WORD *, WORD *, WORD) |
WORD * | poly_div (PHEAD WORD *, WORD *, WORD) |
WORD * | poly_rem (PHEAD WORD *, WORD *, WORD) |
WORD * | poly_inverse (PHEAD WORD *, WORD *) |
WORD * | poly_mul (PHEAD WORD *, WORD *) |
WORD * | poly_ratfun_add (PHEAD WORD *, WORD *) |
int | poly_ratfun_normalize (PHEAD WORD *) |
int | poly_factorize_argument (PHEAD WORD *, WORD *) |
WORD * | poly_factorize_dollar (PHEAD WORD *) |
int | poly_factorize_expression (EXPRESSIONS) |
int | poly_unfactorize_expression (EXPRESSIONS) |
void | poly_free_poly_vars (PHEAD const char *) |
VOID | optimize_print_code (int) |
int | DoPreAdd (UBYTE *s) |
int | DoPreUseDictionary (UBYTE *s) |
int | DoPreCloseDictionary (UBYTE *s) |
int | DoPreOpenDictionary (UBYTE *s) |
void | RemoveDictionary (DICTIONARY *dict) |
void | UnSetDictionary (VOID) |
int | SetDictionaryOptions (UBYTE *options) |
int | SelectDictionary (UBYTE *name, UBYTE *options) |
int | AddToDictionary (DICTIONARY *dict, UBYTE *left, UBYTE *right) |
int | AddDictionary (UBYTE *name) |
int | FindDictionary (UBYTE *name) |
UBYTE * | IsExponentSign (VOID) |
UBYTE * | IsMultiplySign (VOID) |
VOID | TransformRational (UWORD *a, WORD na) |
void | WriteDictionary (DICTIONARY *) |
void | ShrinkDictionary (DICTIONARY *) |
void | MultiplyToLine (VOID) |
UBYTE * | FindSymbol (WORD num) |
UBYTE * | FindVector (WORD num) |
UBYTE * | FindIndex (WORD num) |
UBYTE * | FindFunction (WORD num) |
UBYTE * | FindFunWithArgs (WORD *t) |
UBYTE * | FindExtraSymbol (WORD num) |
LONG | DictToBytes (DICTIONARY *dict, UBYTE *buf) |
DICTIONARY * | DictFromBytes (UBYTE *buf) |
int | CoCreateSpectator (UBYTE *inp) |
int | CoToSpectator (UBYTE *inp) |
int | CoRemoveSpectator (UBYTE *inp) |
int | CoEmptySpectator (UBYTE *inp) |
int | CoCopySpectator (UBYTE *inp) |
int | PutInSpectator (WORD *, WORD) |
void | ClearSpectators (WORD) |
WORD | GetFromSpectator (WORD *, WORD) |
void | FlushSpectators (VOID) |
WORD * | PreGCD (PHEAD WORD *, WORD *, int) |
WORD * | FindCommonVariables (PHEAD int, int) |
VOID | AddToSymbolList (PHEAD WORD) |
int | AddToListPoly (PHEAD0) |
int | ReadFromScratch (FILEHANDLE *, POSITION *, UBYTE *, POSITION *) |
int | AddToScratch (FILEHANDLE *, POSITION *, UBYTE *, POSITION *, int) |
int | DoPreAppendPath (UBYTE *) |
int | DoPrePrependPath (UBYTE *) |
int | DoSwitch (PHEAD WORD *, WORD *) |
int | DoEndSwitch (PHEAD WORD *, WORD *) |
SWITCHTABLE * | FindCase (WORD, WORD) |
VOID | SwitchSplitMergeRec (SWITCHTABLE *, WORD, SWITCHTABLE *) |
VOID | SwitchSplitMerge (SWITCHTABLE *, WORD) |
int | DoubleSwitchBuffers (VOID) |
int | DistrN (int, int *, int, int *) |
Contains macros and function declarations.
Definition in file declare.h.
#define GETCOEF | ( | x, | |
y | |||
) | x += *x;y = x[-1];x -= ABS(y);y=REDLENG(y) |
#define StuffAdd | ( | x, | |
y | |||
) | (((x)<0?-1:1)*(y)+((y)<0?-1:1)*(x)) |
#define EXCHN | ( | t1, | |
t2, | |||
n | |||
) | { WORD a,i; for(i=0;i<n;i++){a=t1[i];t1[i]=t2[i];t2[i]=a;} } |
#define EXCH | ( | x, | |
y | |||
) | { WORD a = (x); (x) = (y); (y) = a; } |
#define TOKENTOLINE | ( | x, | |
y | |||
) |
#define UngetFromStream | ( | stream, | |
c | |||
) | ((stream)->nextchar[(stream)->isnextchar++]=c) |
#define ParseNumber | ( | x, | |
s | |||
) | {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';} |
#define ParseSign | ( | sgn, | |
s | |||
) |
#define ParseSignedNumber | ( | x, | |
s | |||
) |
#define NCOPYI32 | ( | s, | |
t, | |||
n | |||
) | while ( --n >= 0 ) *s++ = *t++; |
#define WCOPY | ( | s, | |
t, | |||
n | |||
) | { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( --nn >= 0 ) *ss++=*tt++; } |
#define NeedNumber | ( | x, | |
s, | |||
err | |||
) |
#define SKIPBLANKS | ( | s | ) | { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; } |
#define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED) |
#define SKIPBRA1 | ( | s | ) |
#define SKIPBRA2 | ( | s | ) |
#define SKIPBRA3 | ( | s | ) |
#define SKIPBRA4 | ( | s | ) |
#define SKIPBRA5 | ( | s | ) |
#define CYCLE1 | ( | t, | |
a, | |||
i | |||
) | {t iX=*a; WORD jX; for(jX=1;jX<i;jX++)a[jX-1]=a[jX]; a[i-1]=iX;} |
#define AddToCB | ( | c, | |
wx | |||
) |
#define EXCHINOUT |
#define BACKINOUT |
#define CopyArg | ( | to, | |
from | |||
) |
#define NEXTARG | ( | x | ) | if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2; |
#define COPY1ARG | ( | s1, | |
t1 | |||
) |
#define ZeroFillRange | ( | w, | |
begin, | |||
end | |||
) |
Fills a buffer by zero in the range [begin,end).
w | The buffer. |
begin | The index for the beginning of the range. |
end | The index for the end of the range (exclusive). |
#define TABLESIZE | ( | a, | |
b | |||
) | (((WORD)sizeof(a))/((WORD)sizeof(b))) |
#define VARNAME | ( | type, | |
num | |||
) | (AC.varnames->namebuffer+type[num].name) |
#define DOLLARNAME | ( | type, | |
num | |||
) | (AC.dollarnames->namebuffer+type[num].name) |
#define EXPRNAME | ( | num | ) | (AC.exprnames->namebuffer+Expressions[num].name) |
#define ISEQUALPOSINC | ( | pp1, | |
pp2, | |||
x | |||
) | ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) |
#define ISGEPOSINC | ( | pp1, | |
pp2, | |||
x | |||
) | ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) |
#define DIFPOS | ( | ss, | |
pp1, | |||
pp2 | |||
) | (ss).p1 = ((pp1).p1-(pp2).p1) |
#define ISNOTEQUALPOS | ( | pp1, | |
pp2 | |||
) | ( (pp1).p1 != (pp2).p1 ) |
#define Add2Com | ( | x | ) | { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); } |
#define Add3Com | ( | x1, | |
x2 | |||
) | { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); } |
#define Add4Com | ( | x1, | |
x2, | |||
x3 | |||
) |
#define Add5Com | ( | x1, | |
x2, | |||
x3, | |||
x4 | |||
) |
#define WantAddPointers | ( | x | ) |
#define WantAddLongs | ( | x | ) |
#define WantAddPositions | ( | x | ) |
#define TermMalloc | ( | x | ) | ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] ) |
#define NumberMalloc | ( | x | ) | ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] ) |
#define CacheNumberMalloc | ( | x | ) | ( (AT.CacheNumberMemTop <= 0 ) ? CacheNumberMallocAddMemory(BHEAD0), AT.CacheNumberMemHeap[--AT.CacheNumberMemTop]: AT.CacheNumberMemHeap[--AT.CacheNumberMemTop] ) |
#define TermFree | ( | TermMem, | |
x | |||
) | AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem) |
#define NumberFree | ( | NumberMem, | |
x | |||
) | AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem) |
#define CacheNumberFree | ( | NumberMem, | |
x | |||
) | AT.CacheNumberMemHeap[AT.CacheNumberMemTop++] = (UWORD *)(NumberMem) |
#define NestingChecksum | ( | ) | (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel +AC.SwitchLevel) |
#define MesNesting | ( | ) | MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do") |
#define MarkPolyRatFunDirty | ( | T | ) |
#define PUSHPREASSIGNLEVEL |
#define POPPREASSIGNLEVEL |
#define EXTERNLOCK | ( | x | ) |
VOID StartVariables | ( | ) |
All functions (well, nearly all) are declared here.
Definition at line 866 of file startup.c.
References AddNtoC(), AddRHS(), Compare1(), inicbufs(), FuNcTiOn::name, PF_BroadcastNumber(), PutPreVar(), and FuNcTiOn::symmetric.
INDEXENTRY * FindInIndex | ( | WORD | expr, |
FILEDATA * | f, | ||
WORD | par, | ||
WORD | mode | ||
) |
INDEXENTRY * NextFileIndex | ( | POSITION * | indexpos | ) |
WORD * PasteTerm | ( | PHEAD WORD | number, |
WORD * | accum, | ||
WORD * | position, | ||
WORD | times, | ||
WORD | divby | ||
) |
Puts the term at position in the accumulator accum at position 'number+1'. if times > 0 the coefficient of this term is multiplied by times/divby.
number | The number of term fragments in accum that should be skipped |
accum | The accumulator of term fragments |
position | A position in (typically) a compiler buffer from where a (piece of a) term comes. |
times | Multiply the result by this |
divby | Divide the result by this. |
This routine is typically used when we have to replace a (sub)expression pointer by a power of a (sub)expression. This uses mostly a binomial expansion and the new term is the old term multiplied one by one by terms of the new expression. The factors times and divby keep track of the binomial coefficient. Once this is complete, the routine FiniTerm will make the contents of the accumulator into a proper term that still needs to be normalized.
Definition at line 2837 of file proces.c.
Referenced by Generator().
WORD AccumGCD | ( | PHEAD UWORD * | a, |
WORD * | na, | ||
UWORD * | b, | ||
WORD | nb | ||
) |
VOID AddArgs | ( | PHEAD WORD * | s1, |
WORD * | s2, | ||
WORD * | m | ||
) |
Adds the arguments of two occurrences of the PolyFun.
s1 | Pointer to the first occurrence. |
s2 | Pointer to the second occurrence. |
m | Pointer to where the answer should be. |
Definition at line 2251 of file sort.c.
Referenced by AddPoly(), and MergePatches().
WORD AddCoef | ( | PHEAD WORD ** | ps1, |
WORD ** | ps2 | ||
) |
Adds the coefficients of the terms *ps1 and *ps2. The problem comes when there is not enough space for a new longer coefficient. First a local solution is tried. If this is not succesfull we need to move terms around. The possibility of a garbage collection should not be ignored, as avoiding this costs very much extra space which is nearly wasted otherwise.
If the return value is zero the terms cancelled.
The resulting term is left in *ps1.
Definition at line 1962 of file sort.c.
References GarbHand(), and NormalModulus().
Referenced by SplitMerge().
WORD AddLong | ( | UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD AddPLon | ( | UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD AddPoly | ( | PHEAD WORD ** | ps1, |
WORD ** | ps2 | ||
) |
Routine should be called when S->PolyWise != 0. It points then to the position of AR.PolyFun in both terms.
We add the contents of the arguments of the two polynomials. Special attention has to be given to special arguments. We have to reserve a space equal to the size of one term + the size of the argument of the other. The addition has to be done in this routine because not all objects are reentrant.
Newer addition (12-nov-2007). The PolyFun can have two arguments. In that case S->PolyFlag is 2 and we have to call the routine for adding rational polynomials. We have to be rather careful what happens with: The location of the output The order of the terms in the arguments At first we allow only univariate polynomials in the PolyFun. This restriction will be lifted a.s.a.p.
ps1 | A pointer to the postion of the first term |
ps2 | A pointer to the postion of the second term |
Definition at line 2089 of file sort.c.
References AddArgs(), GarbHand(), and poly_ratfun_add().
Referenced by SplitMerge().
WORD AddRat | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD AddWild | ( | PHEAD | WORD, |
WORD | type, | ||
WORD | newnumber | ||
) |
Definition at line 1516 of file wildcard.c.
WORD BinomGen | ( | PHEAD WORD * | term, |
WORD | level, | ||
WORD ** | tstops, | ||
WORD | x1, | ||
WORD | x2, | ||
WORD | pow1, | ||
WORD | pow2, | ||
WORD | sign, | ||
UWORD * | coef, | ||
WORD | ncoef | ||
) |
WORD CheckWild | ( | PHEAD | WORD, |
WORD | type, | ||
WORD | newnumber, | ||
WORD * | newval | ||
) |
Definition at line 1761 of file wildcard.c.
VOID ClearWild | ( | PHEAD0 | ) |
Definition at line 1490 of file wildcard.c.
WORD CompCoef | ( | WORD * | term1, |
WORD * | term2 | ||
) |
Routine takes a1 mod m1 and a2 mod m2 and returns a mod m1*m2 with a mod m1 = a1 and a mod m2 = a2
Chinese remainder: a%(m1*m2) = q1*m1+a1 a%(m1*m2) = q2*m2+a2 Compute n1 such that (n1*m1)m2 is one Compute n2 such that (n2*m2)m1 is one Then (a1*n2*m2+a2*n1*m1)%(m1*m2) is a%(m1*m2)
Definition at line 3037 of file reken.c.
Referenced by Compare1().
WORD CompGroup | ( | PHEAD | WORD, |
WORD ** | args, | ||
WORD * | a1, | ||
WORD * | a2, | ||
WORD | num | ||
) |
Definition at line 373 of file function.c.
WORD Compare1 | ( | WORD * | term1, |
WORD * | term2, | ||
WORD | level | ||
) |
Compares two terms. The answer is: 0 equal ( with exception of the coefficient if level == 0. ) >0 term1 comes first. <0 term2 comes first. Some special precautions may be needed to keep the CompCoef routine from generating overflows, although this is very unlikely in subterms. This routine should not return an error condition.
Originally this routine was called Compare. With the treatment of special polynomials with terms that contain only symbols and the need for extreme speed for the polynomial routines we made a special compare routine and now we store the address of the current compare routine in AR.CompareRoutine and have a macro Compare which makes all existing code work properly and we can just replace the routine on a thread by thread basis (each thread has its own AR struct).
term1 | First input term |
term2 | Second input term |
level | The sorting level (may influence on the result) |
Definition at line 2536 of file sort.c.
References CompCoef().
Referenced by InFunction(), poly_sort(), and StartVariables().
WORD Deferred | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
Picks up the deferred brackets. These are the bracket contents of which we postpone the reading when we use the 'Keep Brackets' statement. These contents are multiplying the terms just before they are sent to the sorting system. Special attention goes to having it thread-safe We have to lock positioning the file and reading it in a thread specific buffer.
term | The term that must be multiplied by the contents of the current bracket |
level | The compiler level. This is needed because after multiplying term by term we call Generator again. |
Definition at line 4616 of file proces.c.
References Generator(), and InsertTerm().
Referenced by Generator().
WORD Distribute | ( | DISTRIBUTE * | d, |
WORD | first | ||
) |
WORD DivLong | ( | UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc, | ||
UWORD * | d, | ||
WORD * | nd | ||
) |
WORD DivRat | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD Divvy | ( | PHEAD UWORD * | a, |
WORD * | na, | ||
UWORD * | b, | ||
WORD | nb | ||
) |
int CoCanonicalize | ( | UBYTE * | s | ) |
Definition at line 64 of file diagrams.c.
int DoCanonicalize | ( | PHEAD WORD * | term, |
WORD * | params | ||
) |
Definition at line 185 of file diagrams.c.
WORD GenTopologies | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
Definition at line 348 of file diagrams.c.
WORD GenDiagrams | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
Definition at line 401 of file diagrams.c.
int DoTopologyCanonicalize | ( | PHEAD WORD * | term, |
WORD | vert, | ||
WORD | edge, | ||
WORD * | args | ||
) |
Definition at line 428 of file diagrams.c.
int DoShattering | ( | PHEAD WORD * | connect, |
WORD * | environ, | ||
WORD * | partitions, | ||
WORD | nvert | ||
) |
Definition at line 639 of file diagrams.c.
WORD GenerateTopologies | ( | PHEAD | WORD, |
WORD | nlegs, | ||
WORD | setvert, | ||
WORD | setmax | ||
) |
Definition at line 123 of file topowrap.cc.
WORD DoShuffle | ( | WORD * | term, |
WORD | level, | ||
WORD | fun, | ||
WORD | option | ||
) |
WORD DoStuffle | ( | WORD * | term, |
WORD | level, | ||
WORD | fun, | ||
WORD | option | ||
) |
WORD DoOnePow | ( | PHEAD WORD * | term, |
WORD | power, | ||
WORD | nexp, | ||
WORD * | accum, | ||
WORD * | aa, | ||
WORD | level, | ||
WORD * | freeze | ||
) |
Routine gets one power of an expression in the scratch system. If there are more powers needed there will be a recursion.
No attempt is made to use binomials because we have no information about commutating properties.
There is a searching for the contents of brackets if needed. This searching may be rather slow because of the single links.
term | is the term we are adding to. |
power | is the power of the expression that we need. |
nexp | is the number of the expression. |
accum | is the accumulator of terms. It accepts the termfragments that are made into a proper term in FiniTerm |
aa | points to the start of the entire accumulator. In *aa we store the number of term fragments that are in the accumulator. |
level | is the current depth in the tree of statements. It is needed to continue to the next operation/substitution with each generated term |
freeze | is the pointer to the bracket information that should be matched. |
Definition at line 4395 of file proces.c.
References DoOnePow(), FiniTerm(), Generator(), and FiLe::handle.
Referenced by DoOnePow(), and Generator().
WORD DoSumF1 | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | replac, | ||
WORD | level | ||
) |
WORD DoSumF2 | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | replac, | ||
WORD | level | ||
) |
LONG EndSort | ( | PHEAD WORD * | buffer, |
int | par | ||
) |
Finishes a sort. At AR.sLevel == 0 the output is to the regular output stream. When AR.sLevel > 0, the parameter par determines the actual output. The AR.sLevel will be popped. All ongoing stages are finished and if the sortfile is open it is closed. The statistics are printed when AR.sLevel == 0 par == 0 Output to the buffer. par == 1 Sort for function arguments. The output will be copied into the buffer. It is assumed that this is in the WorkSpace. par == 2 Sort for $-variable. We return the address of the buffer that contains the output in buffer (treated like WORD **). We first catch the output in a file (unless we can intercept things after the small buffer has been sorted) Then we read from the file into a buffer. Only when par == 0 data compression can be attempted at AT.SS==AT.S0.
buffer | buffer for output when needed |
par | See above |
Definition at line 682 of file sort.c.
References ComPress(), FlushOut(), MergePatches(), PF_EndSort(), PutOut(), SplitMerge(), StageSort(), and WriteStats().
Referenced by generate_expression(), get_expression(), InFunction(), MakeDollarInteger(), MakeDollarMod(), PF_CollectModifiedDollars(), PF_Processor(), poly_factorize_expression(), poly_sort(), poly_unfactorize_expression(), PolyFunMul(), Processor(), TakeArgContent(), TestMatch(), and TestSub().
WORD EntVar | ( | WORD | type, |
UBYTE * | name, | ||
WORD | x, | ||
WORD | y, | ||
WORD | z, | ||
WORD | d | ||
) |
WORD EpfCon | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
WORD EpfGen | ( | WORD | number, |
WORD * | inlist, | ||
WORD * | kron, | ||
WORD * | perm, | ||
WORD | sgn | ||
) |
WORD FindAll | ( | PHEAD WORD * | term, |
WORD * | pattern, | ||
WORD | level, | ||
WORD * | par | ||
) |
WORD FiniTerm | ( | PHEAD WORD * | term, |
WORD * | accum, | ||
WORD * | termout, | ||
WORD | number, | ||
WORD | tepos | ||
) |
Concatenates the contents of the accumulator into a single legal term, which replaces the subexpression pointer
term | the input term with the (sub)expression subterm |
accum | the accumulator with the term fragments |
termout | the location where the output should be written |
number | the number of term fragments in the accumulator |
tepos | the position of the subterm in term to be replaced |
Definition at line 2902 of file proces.c.
Referenced by DoOnePow(), and Generator().
WORD FlushOut | ( | POSITION * | position, |
FILEHANDLE * | fi, | ||
int | compr | ||
) |
Completes output to an output file and writes the trailing zero.
position | The position in the file after writing |
fi | The file (or its cache) |
compr | Indicates whether there should be compression with gzip. |
Definition at line 1748 of file sort.c.
References FiLe::handle, BrAcKeTiNfO::indexbuffer, and PF_ISendSbuf().
Referenced by EndSort(), MergePatches(), PF_EndSort(), and Processor().
WORD GcdLong | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD LcmLong | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD Generator | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
The heart of the program. Here the expansion tree is set up in one giant recursion
term | the input term. may be overwritten |
level | the level in the compiler buffer (number of statement) |
The routine looks first whether there are unsubstituted (sub)expressions. If so, one of them gets inserted term by term and the new term is used in a renewed call to Generator. If there are no (sub)expressions, the term is normalized, the compiler level is raised (next statement) and the program looks what type of statement this is. If this is a special statement it is either treated on the spot or the appropriate routine is called. If it is a substitution, the pattern matcher is called (TestMatch) which tells whether there was a match. If so we need to call TestSub again to test for (sub)expressions. If we run out of levels, the term receives a final treatment for modulus calculus and/or brackets and is then sent off to the sorting routines.
Definition at line 3101 of file proces.c.
References Deferred(), DoOnePow(), FiniTerm(), Generator(), InFunction(), InsertTerm(), CbUf::lhs, VaRrEnUm::lo, PasteFile(), PasteTerm(), PF_Deferred(), CbUf::Pointer, PolyFunMul(), PrepPoly(), PutPreVar(), CbUf::rhs, StoreTerm(), ReNuMbEr::symb, TestMatch(), and TestSub().
Referenced by Deferred(), DoOnePow(), generate_expression(), Generator(), InFunction(), MakeDollarInteger(), MakeDollarMod(), PF_CollectModifiedDollars(), PF_Deferred(), PF_Processor(), poly_factorize_expression(), poly_unfactorize_expression(), Processor(), TestMatch(), and TestSub().
WORD GetOneTerm | ( | PHEAD WORD * | term, |
FILEHANDLE * | fi, | ||
POSITION * | pos, | ||
int | par | ||
) |
WORD Glue | ( | PHEAD WORD * | term1, |
WORD * | term2, | ||
WORD * | sub, | ||
WORD | insert | ||
) |
WORD InFunction | ( | PHEAD WORD * | term, |
WORD * | termout | ||
) |
Makes the replacement of the subexpression with the number 'replac' in a function argument. Additional information is passed in some of the AR, AN, AT variables.
term | The input term |
termout | The output term |
Special attention should be given to nested functions!
Definition at line 2033 of file proces.c.
References Compare1(), CompareSymbols(), EndSort(), Generator(), LowerSortLevel(), NewSort(), StoreTerm(), and SymbolNormalize().
Referenced by Generator().
WORD InsertTerm | ( | PHEAD WORD * | term, |
WORD | replac, | ||
WORD | extractbuff, | ||
WORD * | position, | ||
WORD * | termout, | ||
WORD | tepos | ||
) |
Puts the terms 'term' and 'position' together into a single legal term in termout. replac is the number of the subexpression that should be replaced. It must be a positive term. When action is needed in the argument of a function all terms in that argument are dealt with recursively. The subexpression is sorted. Only one subexpression is done at a time this way.
term | the input term |
replac | number of the subexpression pointer to replace |
extractbuff | number of the compiler buffer replac refers to |
position | position from where to take the term in the compiler buffer |
termout | the output term |
tepos | offset in term where the subexpression is. |
Definition at line 2579 of file proces.c.
Referenced by Deferred(), Generator(), and PF_Deferred().
WORD MakeDirty | ( | WORD * | term, |
WORD * | x, | ||
WORD | par | ||
) |
Definition at line 51 of file function.c.
VOID MarkDirty | ( | WORD * | term, |
WORD | flags | ||
) |
Definition at line 97 of file function.c.
VOID PolyFunDirty | ( | PHEAD WORD * | term | ) |
Definition at line 139 of file function.c.
VOID PolyFunClean | ( | PHEAD WORD * | term | ) |
Definition at line 174 of file function.c.
WORD MatchE | ( | PHEAD WORD * | pattern, |
WORD * | fun, | ||
WORD * | inter, | ||
WORD | par | ||
) |
int MatchCy | ( | PHEAD WORD * | pattern, |
WORD * | fun, | ||
WORD * | inter, | ||
WORD | par | ||
) |
int FunMatchCy | ( | PHEAD WORD * | pattern, |
WORD * | fun, | ||
WORD * | inter, | ||
WORD | par | ||
) |
int FunMatchSy | ( | PHEAD WORD * | pattern, |
WORD * | fun, | ||
WORD * | inter, | ||
WORD | par | ||
) |
WORD MatchFunction | ( | PHEAD WORD * | pattern, |
WORD * | interm, | ||
WORD * | wilds | ||
) |
Definition at line 817 of file function.c.
WORD MergePatches | ( | WORD | par | ) |
The general merge routine. Can be used for the large buffer and the file merging. The array S->Patches tells where the patches start S->pStop tells where they end (has to be computed first). The end of a 'line to be merged' is indicated by a zero. If the end is reached without running into a zero or a term runs over the boundary of a patch it is a file merging operation and a new piece from the file is read in.
par | If par == 0 the sort is for file -> outputfile. If par == 1 the sort is for large buffer -> sortfile. If par == 2 the sort is for large buffer -> outputfile. |
Definition at line 3577 of file sort.c.
References AddArgs(), FlushOut(), FiLe::handle, NormalModulus(), poly_ratfun_add(), PutIn(), PutOut(), Sflush(), and StageSort().
Referenced by EndSort(), and StoreTerm().
WORD MulLong | ( | UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD MulRat | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
WORD Mully | ( | PHEAD UWORD * | a, |
WORD * | na, | ||
UWORD * | b, | ||
WORD | nb | ||
) |
WORD NewSort | ( | PHEAD0 | ) |
Starts a new sort. At the lowest level this is a 'main sort' with the struct according to the parameters in S0. At higher levels this is a sort for functions, subroutines or dollars. We prepare the arrays and structs.
Definition at line 592 of file sort.c.
Referenced by generate_expression(), get_expression(), InFunction(), MakeDollarInteger(), MakeDollarMod(), PF_CollectModifiedDollars(), PF_Processor(), poly_factorize_expression(), poly_sort(), poly_unfactorize_expression(), PolyFunMul(), Processor(), TakeArgContent(), TestMatch(), and TestSub().
WORD ExtraSymbol | ( | WORD | sym, |
WORD | pow, | ||
WORD | nsym, | ||
WORD * | ppsym, | ||
WORD * | ncoef | ||
) |
LONG PasteFile | ( | PHEAD WORD | number, |
WORD * | accum, | ||
POSITION * | position, | ||
WORD ** | accfill, | ||
RENUMBER | renumber, | ||
WORD * | freeze, | ||
WORD | nexpr | ||
) |
Gets a term from stored expression expr and puts it in the accumulator at position number. It returns the length of the term that came from file.
number | number of partial terms to skip in accum |
accum | the accumulator |
position | file position from where to get the stored term |
accfill | returns tail position in accum |
renumber | the renumber struct for the variables in the stored expression |
freeze | information about if we need only the contents of a bracket |
nexpr | the number of the stored expression |
Definition at line 2715 of file proces.c.
Referenced by Generator().
WORD PolyFunMul | ( | PHEAD WORD * | term | ) |
Multiplies the arguments of multiple occurrences of the polyfun. In this routine we do the original PolyFun with one argument only. The PolyRatFun (PolyFunType = 2) is done in a dedicated routine in the file polywrap.cc The new result is written over the old result.
term | It contains the input term and later the output. |
Definition at line 5132 of file proces.c.
References EndSort(), LowerSortLevel(), NewSort(), poly_ratfun_normalize(), and StoreTerm().
Referenced by Generator().
WORD PrepPoly | ( | PHEAD WORD * | term, |
WORD | par | ||
) |
Routine checks whether the count of function AR.PolyFun is zero or one. If it is one and it has one scalarlike argument the coefficient of the term is pulled inside the argument. If the count is zero a new function is made with the coefficient as its only argument. The function should be placed at its proper position.
When this function is active it places the PolyFun as last object before the coefficient. This is needed because otherwise the compress algorithm has problems in MergePatches.
The bracket routine should also place the PolyFun at a comparable spot. The compression should then stop at the PolyFun. It doesn't really have to stop when writing the final result but this may be too complicated.
The parameter par tells whether we are at groundlevel or inside a function or dollar variable.
Definition at line 4744 of file proces.c.
References poly_ratfun_normalize().
Referenced by Generator(), and TestSub().
LONG PutIn | ( | FILEHANDLE * | file, |
POSITION * | position, | ||
WORD * | buffer, | ||
WORD ** | take, | ||
int | npat | ||
) |
Reads a new patch from position in file handle. It is put at buffer, anything after take is moved forward. This would be part of a term that hasn't been used yet. Because of this there should be some space before the start of the buffer
file | The file system from which to read |
position | The position from which to read |
buffer | The buffer into which to read |
take | The unused tail should be moved before the buffer |
npat | The number of the patch. Is needed if the information was compressed with gzip, because each patch has its own independent gzip encoding. |
Definition at line 1259 of file sort.c.
References FiLe::handle.
Referenced by MergePatches().
WORD PutInStore | ( | INDEXENTRY * | ind, |
WORD | num | ||
) |
WORD PutOut | ( | PHEAD WORD * | term, |
POSITION * | position, | ||
FILEHANDLE * | fi, | ||
WORD | ncomp | ||
) |
Routine writes one term to file handle at position. It returns the new value of the position.
NOTE: For 'final output' we may have to index the brackets. See the struct BRACKETINDEX. We should maintain: 1: a list with brackets array with the brackets 2: a list of objects of type BRACKETINDEX. It contains array with either pointers or offsets to the list of brackets. starting positions in the file. The index may be tied to a maximum size. In that case we may have to prune the list occasionally.
term | The term to be written |
position | The position in the file. Afterwards it is updated |
fi | The file (or its cache) to which should be written |
ncomp | Information about what type of compression should be used |
Definition at line 1405 of file sort.c.
References FiLe::handle, and PF_ISendSbuf().
Referenced by EndSort(), generate_expression(), MergePatches(), PF_EndSort(), PF_Processor(), and Processor().
VOID RaisPowCached | ( | PHEAD WORD | x, |
WORD | n, | ||
UWORD ** | c, | ||
WORD * | nc | ||
) |
Computes power x^n and caches the value
Calculates the power x^n and stores the results for caching purposes. The pointer c (i.e., the pointer, and not what it points to) is overwritten. What it points to should not be overwritten in the calling function.
Definition at line 1286 of file reken.c.
Referenced by poly::divmod_heap(), poly::divmod_univar(), and poly::mul_heap().
int NormalModulus | ( | UWORD * | a, |
WORD * | na | ||
) |
Brings a modular representation in the range -p/2 to +p/2 The return value tells whether anything was done. Routine made in the general modulus revamp of July 2008 (JV).
Definition at line 1393 of file reken.c.
Referenced by AddCoef(), and MergePatches().
int GetModInverses | ( | WORD | m1, |
WORD | m2, | ||
WORD * | im1, | ||
WORD * | im2 | ||
) |
Input m1 and m2, which are relative prime. determines a*m1+b*m2 = 1 (and 1 is the gcd of m1 and m2) then a*m1 = 1 mod m2 and hence im1 = a. and b*m2 = 1 mod m1 and hence im2 = b. Set m1 = 0*m1+1*m2 = a1*m1+b1*m2 m2 = 1*m1+0*m2 = a2*m1+b2*m2 If everything is OK, the return value is zero
Definition at line 1466 of file reken.c.
Referenced by poly::divmod_heap(), poly::divmod_univar(), MakeDollarMod(), MakeInverses(), MakeMod(), TakeContent(), and TakeSymbolContent().
int GetLongModInverses | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | ia, | ||
WORD * | nia, | ||
UWORD * | ib, | ||
WORD * | nib | ||
) |
WORD RatioGen | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
WORD ResolveSet | ( | PHEAD WORD * | from, |
WORD * | to, | ||
WORD * | subs | ||
) |
Definition at line 1333 of file wildcard.c.
WORD ScanFunctions | ( | PHEAD WORD * | inpat, |
WORD * | inter, | ||
WORD | par | ||
) |
Definition at line 1604 of file function.c.
VOID SeekScratch | ( | FILEHANDLE * | fi, |
POSITION * | pos | ||
) |
VOID SetEndScratch | ( | FILEHANDLE * | f, |
POSITION * | position | ||
) |
VOID SetEndHScratch | ( | FILEHANDLE * | f, |
POSITION * | position | ||
) |
WORD Sflush | ( | FILEHANDLE * | fi | ) |
Puts the contents of a buffer to output Only to be used when there is a single patch in the large buffer.
fi | The filesystem (or its cache) to which the patch should be written |
Definition at line 1319 of file sort.c.
References FiLe::handle.
Referenced by MergePatches().
WORD Simplify | ( | PHEAD UWORD * | a, |
WORD * | na, | ||
UWORD * | b, | ||
WORD * | nb | ||
) |
WORD SortWild | ( | WORD * | w, |
WORD | nw | ||
) |
Sorts the wildcard entries in the parameter w. Double entries are removed. Full space taken is nw words. Routine serves for the reading of wildcards in the compiler. The entries come in the format: (type,4,number,0) in which the zero is reserved for the future replacement of 'number'.
w | buffer with wildcard entries. |
nw | number of wildcard entries. |
LONG SplitMerge | ( | PHEAD WORD ** | Pointer, |
LONG | number | ||
) |
Algorithm by J.A.M.Vermaseren (31-7-1988)
Note that AN.SplitScratch and AN.InScratch are used also in GarbHand
Merge sort in memory. The input is an array of pointers. Sorting is done recursively by dividing the array in two equal parts and calling SplitMerge for each. When the parts are small enough we can do the compare and take the appropriate action. An addition is that we look for 'runs'. Sequences that are already ordered. This happens a lot when there is very little action in a module. This made FORM faster by a few percent.
Pointer | The array of pointers to the terms to be sorted. |
number | The number of pointers in Pointer. |
The terms are supposed to be sitting in the small buffer and there is supposed to be an extension to this buffer for when there are two terms that should be added and the result takes more space than each of the original terms. The notation guarantees that the result never needs more space than the sum of the spaces of the original terms.
Definition at line 3240 of file sort.c.
References AddCoef(), AddPoly(), and SplitMerge().
Referenced by EndSort(), SplitMerge(), and StoreTerm().
WORD StoreTerm | ( | PHEAD WORD * | term | ) |
The central routine to accept terms, store them and keep things at least partially sorted. A call to EndSort will then complete storing and sorting.
term | The term to be stored |
Definition at line 4333 of file sort.c.
References ComPress(), MergePatches(), SplitMerge(), and WriteStats().
Referenced by Generator(), get_expression(), InFunction(), PF_Processor(), poly_sort(), PolyFunMul(), Processor(), TakeArgContent(), and TestSub().
VOID SubPLon | ( | UWORD * | a, |
WORD | na, | ||
UWORD * | b, | ||
WORD | nb, | ||
UWORD * | c, | ||
WORD * | nc | ||
) |
VOID Substitute | ( | PHEAD WORD * | term, |
WORD * | pattern, | ||
WORD | power | ||
) |
WORD SymFind | ( | PHEAD WORD * | term, |
WORD * | params | ||
) |
Definition at line 633 of file function.c.
WORD SymGen | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
Definition at line 518 of file function.c.
WORD Symmetrize | ( | PHEAD WORD * | func, |
WORD * | Lijst, | ||
WORD | ngroups, | ||
WORD | gsize, | ||
WORD | type | ||
) |
Definition at line 213 of file function.c.
int FullSymmetrize | ( | PHEAD WORD * | fun, |
int | type | ||
) |
Definition at line 473 of file function.c.
WORD TakeModulus | ( | UWORD * | a, |
WORD * | na, | ||
UWORD * | cmodvec, | ||
WORD | ncmod, | ||
WORD | par | ||
) |
WORD TakeNormalModulus | ( | UWORD * | a, |
WORD * | na, | ||
UWORD * | c, | ||
WORD | nc, | ||
WORD | par | ||
) |
WORD TenVec | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
WORD TermRenumber | ( | WORD * | term, |
RENUMBER | renumber, | ||
WORD | nexpr | ||
) |
!! WORD *memterm=term; static LONG ctrap=0; !!!
!! ctrap++; !!!
Definition at line 2407 of file store.c.
References ReNuMbEr::func, ReNuMbEr::funnum, ReNuMbEr::indi, ReNuMbEr::indnum, ReNuMbEr::symb, ReNuMbEr::symnum, TermRenumber(), ReNuMbEr::vecnum, and ReNuMbEr::vect.
Referenced by TermRenumber().
WORD TestMatch | ( | PHEAD WORD * | term, |
WORD * | level | ||
) |
This routine governs the pattern matching. If it decides that a substitution should be made, this can be either the insertion of a right hand side (C->rhs) or the automatic generation of terms as a result of an operation (like trace). The object to be replaced is removed from term and a subexpression pointer is inserted. If the substitution is made more than once there can be more subexpression pointers. Its number is positive as it corresponds to the level at which the C->rhs can be found in the compiler output. The subexpression pointer contains the wildcard substitution information. The power is found in *AT.TMout. For operations the subexpression pointer is negative and corresponds to an address in the array AT.TMout. In this array are then the instructions for the routine to be called and its number in the array 'Operations' The format is here: length,functionnumber,length-2 parameters
There is a certain complexity wrt repeat levels. Another complication is the poking of the wildcard values in the subexpression prototype in the compiler buffer. This was how things were done in the past with sequential FORM, but with the advent of TFORM this cannot be maintained. Now, for TFORM we make a copy of it. 7-may-2008 (JV): We cannot yet guarantee that this has been done 100% correctly. There are errors that occur in TFORM only and that may indicate problems.
Definition at line 97 of file pattern.c.
References AddRHS(), EndSort(), Generator(), CbUf::lhs, LowerSortLevel(), and NewSort().
Referenced by Generator().
WORD TestSub | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
TestSub hunts for subexpression pointers. If one is found its power is given in AN.TeSuOut. and the returnvalue is 'expressionnumber'. If the expression number is negative it is an expression on disk.
In addition this routine tries to locate subexpression pointers in functions. It also notices that action must be taken with any of the special functions.
term | The term in which TestSub hunts for potential action |
level | The number of the 'level' in the compiler buffer. |
Other values that are returned are in AN.TeSuOut, AR.TePos, AT.TMbuff, AN.TeInFun, AN.Frozen, AT.TMaddr
The level in the compiler buffer is more or less the number of the statement in the module. Hence it refers to the element in the lhs array.
This routine is one of the most important routines in FORM.
Definition at line 681 of file proces.c.
References AddRHS(), TaBlEs::bounds, TaBlEs::bufnum, CbUf::CanCommu, CompareSymbols(), DoubleCbuffer(), EndSort(), Generator(), LowerSortLevel(), MiNmAx::maxi, MiNmAx::mini, TaBlEs::mm, NewSort(), TaBlEs::numind, TaBlEs::pattern, CbUf::Pointer, PrepPoly(), TaBlEs::prototype, CbUf::rhs, MiNmAx::size, TaBlEs::sparse, StoreTerm(), TaBlEs::strict, TaBlEs::tablepointers, TestSub(), and CbUf::Top.
Referenced by Generator(), and TestSub().
LONG TimeCPU | ( | WORD | par | ) |
Returns the CPU time.
par | If zero, the CPU time will be reset to 0. |
Definition at line 3550 of file tools.c.
Referenced by PF_GetSlaveTimes(), PF_Processor(), and WriteStats().
LONG TimeWallClock | ( | WORD | par | ) |
Returns the wall-clock time.
par | If zero, the wall-clock time will be reset to 0. |
Definition at line 3476 of file tools.c.
Referenced by DoCheckpoint(), DoRecovery(), find_Horner_MCTS(), optimize_expression_given_Horner(), optimize_greedy(), and WriteStats().
WORD ToStorage | ( | EXPRESSIONS | e, |
POSITION * | length | ||
) |
WORD Trace4 | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
WORD TraceN | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
WORD Traces | ( | PHEAD WORD * | term, |
WORD * | params, | ||
WORD | num, | ||
WORD | level | ||
) |
WORD TryDo | ( | PHEAD WORD * | term, |
WORD * | pattern, | ||
WORD | level | ||
) |
VOID UnPack | ( | UWORD * | a, |
WORD | na, | ||
WORD * | denom, | ||
WORD * | numer | ||
) |
WORD VarStore | ( | UBYTE * | s, |
WORD | n, | ||
WORD | name, | ||
WORD | namesize | ||
) |
WORD WildFill | ( | PHEAD WORD * | to, |
WORD * | from, | ||
WORD * | sub | ||
) |
Definition at line 65 of file wildcard.c.
WORD WriteOne | ( | UBYTE * | name, |
int | alreadyinline, | ||
int | nosemi, | ||
WORD | plus | ||
) |
VOID WriteStats | ( | POSITION * | plspace, |
WORD | par | ||
) |
Writes the statistics.
plspace | The size in bytes currently occupied |
par | par = 0 after a splitmerge. par = 1 after merge to sortfile. par = 2 after the sort |
current expression is to be found in AR.CurExpr. terms are in S->TermsLeft. S->GenTerms.
Definition at line 93 of file sort.c.
References TimeCPU(), and TimeWallClock().
Referenced by EndSort(), PF_Processor(), and StoreTerm().
WORD WriteTerm | ( | WORD * | term, |
WORD * | lbrac, | ||
WORD | first, | ||
WORD | prtf, | ||
WORD | br | ||
) |
WORD execarg | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
Definition at line 56 of file argument.c.
WORD execterm | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
Definition at line 1733 of file argument.c.
VOID SetScratch | ( | FILEHANDLE * | f, |
POSITION * | position | ||
) |
int PutPreVar | ( | UBYTE * | name, |
UBYTE * | value, | ||
UBYTE * | args, | ||
int | mode | ||
) |
Inserts/Updates a preprocessor variable in the name administration.
name | Character string with the variable name. |
value | Character string with a possible value. Special case: if this argument is zero, then we have no value. Note: This is different from having an empty argument! This should only occur when the name starts with a ? |
args | Character string with possible arguments. |
mode | =0: always create a new name entry, =1: try to do a redefinition if possible. |
Definition at line 642 of file pre.c.
Referenced by ClearOptimize(), Generator(), Optimize(), PF_BroadcastRedefinedPreVars(), StartVariables(), and TheDefine().
STREAM * OpenStream | ( | UBYTE * | name, |
int | type, | ||
int | prevarmode, | ||
int | raiselow | ||
) |
int ProcessOption | ( | UBYTE * | s1, |
UBYTE * | s2, | ||
int | filetype | ||
) |
int AddName | ( | NAMETREE * | nametree, |
UBYTE * | name, | ||
WORD | type, | ||
WORD | number, | ||
int * | nodenum | ||
) |
int GetName | ( | NAMETREE * | nametree, |
UBYTE * | name, | ||
WORD * | number, | ||
int | par | ||
) |
int GetVar | ( | UBYTE * | name, |
WORD * | type, | ||
WORD * | number, | ||
int | wantedtype, | ||
int | par | ||
) |
int MakeDubious | ( | NAMETREE * | nametree, |
UBYTE * | name, | ||
WORD * | number | ||
) |
int GetOName | ( | NAMETREE * | nametree, |
UBYTE * | name, | ||
WORD * | number, | ||
int | par | ||
) |
VOID DumpNode | ( | NAMETREE * | nametree, |
WORD | node, | ||
WORD | depth | ||
) |
VOID LinkTree | ( | NAMETREE * | tree, |
WORD | offset, | ||
WORD | numnodes | ||
) |
int AddSymbol | ( | UBYTE * | name, |
int | minpow, | ||
int | maxpow, | ||
int | cplx, | ||
int | dim | ||
) |
int AddDollar | ( | UBYTE * | name, |
WORD | type, | ||
WORD * | start, | ||
LONG | size | ||
) |
int ReplaceDollar | ( | WORD | number, |
WORD | newtype, | ||
WORD * | newstart, | ||
LONG | newsize | ||
) |
int AddFunction | ( | UBYTE * | name, |
int | comm, | ||
int | istensor, | ||
int | cplx, | ||
int | symprop, | ||
int | dim, | ||
int | argmax, | ||
int | argmin | ||
) |
int CopyFile | ( | char * | source, |
char * | dest | ||
) |
Copies a file with name *source to a file named *dest. The involved files must not be open. Returns non-zero if an error occurred. Uses if possible the combined large and small sorting buffers as cache.
Definition at line 1101 of file tools.c.
Referenced by DoRecovery().
LONG ReadPosFile | ( | PHEAD FILEHANDLE * | fi, |
UBYTE * | buffer, | ||
LONG | size, | ||
POSITION * | pos | ||
) |
LONG WriteFileToFile | ( | int | handle, |
UBYTE * | buffer, | ||
LONG | size | ||
) |
VOID SeekFile | ( | int | handle, |
POSITION * | offset, | ||
int | origin | ||
) |
KEYWORD * findcommand | ( | UBYTE * | in | ) |
Definition at line 318 of file compiler.c.
int inicbufs | ( | VOID | ) |
Creates a new compiler buffer and returns its ID number.
Definition at line 47 of file comtool.c.
References CbUf::boomlijst, CbUf::Buffer, CbUf::BufferSize, CbUf::CanCommu, CbUf::dimension, CbUf::lhs, CbUf::numdum, CbUf::NumTerms, CbUf::Pointer, CbUf::rhs, and CbUf::Top.
Referenced by AddRHS(), and StartVariables().
int DoubleList | ( | VOID *** | lijst, |
int * | oldsize, | ||
int | objectsize, | ||
char * | nameoftype | ||
) |
int DoubleLList | ( | VOID *** | lijst, |
LONG * | oldsize, | ||
int | objectsize, | ||
char * | nameoftype | ||
) |
void DoubleBuffer | ( | void ** | start, |
void ** | stop, | ||
int | size, | ||
char * | text | ||
) |
void ExpandBuffer | ( | void ** | buffer, |
LONG * | oldsize, | ||
int | type | ||
) |
SETUPPARAMETERS * GetSetupPar | ( | UBYTE * | s | ) |
SORTING * AllocSort | ( | LONG | LargeSize, |
LONG | SmallSize, | ||
LONG | SmallEsize, | ||
LONG | TermsInSmall, | ||
int | MaxPatches, | ||
int | MaxFpatches, | ||
LONG | IOsize | ||
) |
int ModuleInstruction | ( | int * | moduletype, |
int * | specialtype | ||
) |
int TheDefine | ( | UBYTE * | s, |
int | mode | ||
) |
Preprocessor assignment. Possible arguments and values are treated and the new preprocessor variable is put into the name administration.
s | Pointer to the character string following the preprocessor command. |
mode | Bitmask. 0-bit clear: always create a new name entry, 0-bit set: try to redefine an existing name, 1-bit set: ignore preprocessor if/switch status. |
Definition at line 1942 of file pre.c.
References PutPreVar().
UBYTE * AddToString | ( | UBYTE * | outstring, |
UBYTE * | extrastring, | ||
int | par | ||
) |
int PreCmp | ( | int | type, |
int | val, | ||
UBYTE * | t, | ||
int | type2, | ||
int | val2, | ||
UBYTE * | t2, | ||
int | cmpop | ||
) |
int PreEq | ( | int | type, |
int | val, | ||
UBYTE * | t, | ||
int | type2, | ||
int | val2, | ||
UBYTE * | t2, | ||
int | eqop | ||
) |
int PreLoad | ( | PRELOAD * | p, |
UBYTE * | start, | ||
UBYTE * | stop, | ||
int | mode, | ||
char * | message | ||
) |
int CompileStatement | ( | UBYTE * | in | ) |
Definition at line 536 of file compiler.c.
LONG ComPress | ( | WORD ** | ss, |
LONG * | n | ||
) |
Gets a list of pointers to terms and compresses the terms. In n it collects the number of terms and the return value of the function is the space that is occupied.
We have to pay some special attention to the compression of terms with a PolyFun. This PolyFun should occur only straight before the coefficient, so we can use the same trick as for the coefficient to sabotage compression of this object (Replace in the history the function pointer by zero. This is safe, because terms that would be identical otherwise would have been added).
ss | Array of pointers to terms to be compressed. |
n | Number of pointers in ss. |
Definition at line 3074 of file sort.c.
Referenced by EndSort(), and StoreTerm().
VOID StageSort | ( | FILEHANDLE * | fout | ) |
Prepares a stage 4 or higher sort. Stage 4 sorts occur when the sort file contains more patches than can be merged in one pass.
Definition at line 4453 of file sort.c.
References FiLe::handle.
Referenced by EndSort(), and MergePatches().
WORD * DoubleCbuffer | ( | int | num, |
WORD * | w, | ||
int | par | ||
) |
Doubles a compiler buffer.
num | The ID number for the buffer to be doubled. |
w | The pointer to the end (exclusive) of the current buffer. The contents in the range of [cbuf[num].Buffer,w) will be kept. |
Definition at line 143 of file comtool.c.
References CbUf::Buffer, CbUf::BufferSize, CbUf::lhs, CbUf::Pointer, CbUf::rhs, and CbUf::Top.
WORD * AddLHS | ( | int | num | ) |
Adds an LHS to a compiler buffer and returns the pointer to a buffer for the new LHS.
num | The ID number for the buffer to get another LHS. |
Definition at line 188 of file comtool.c.
References CbUf::lhs, and CbUf::Pointer.
Referenced by AddNtoL().
WORD * AddRHS | ( | int | num, |
int | type | ||
) |
Adds an RHS to a compiler buffer and returns the pointer to a buffer for the new RHS.
num | The ID number for the buffer to get another RHS. |
type | If 0, the subexpression tree will be reallocated. |
Definition at line 214 of file comtool.c.
References TaBlEs::buffers, TaBlEs::buffersfill, TaBlEs::bufferssize, TaBlEs::bufnum, CbUf::CanCommu, CbUf::dimension, inicbufs(), CbUf::numdum, CbUf::NumTerms, CbUf::Pointer, and CbUf::rhs.
Referenced by InsertArg(), StartVariables(), TestMatch(), and TestSub().
int AddNtoL | ( | int | n, |
WORD * | array | ||
) |
Adds an LHS with the given data to the current compiler buffer.
n | The length of the data. |
array | The data to be added. |
Definition at line 288 of file comtool.c.
References AddLHS(), DoubleCbuffer(), CbUf::Pointer, and CbUf::Top.
int AddNtoC | ( | int | bufnum, |
int | n, | ||
WORD * | array, | ||
int | par | ||
) |
Adds the given data to the last LHS/RHS in a compiler buffer.
bufnum | The ID number for the buffer where the data will be added. |
n | The length of the data. |
array | The data to be added. |
Definition at line 317 of file comtool.c.
References DoubleCbuffer(), CbUf::Pointer, and CbUf::Top.
Referenced by InsertArg(), and StartVariables().
int setonoff | ( | UBYTE * | s, |
int * | flag, | ||
int | onvalue, | ||
int | offvalue | ||
) |
Definition at line 206 of file compcomm.c.
int DoPrint | ( | UBYTE * | s, |
int | par | ||
) |
Definition at line 964 of file compcomm.c.
int SetExpr | ( | UBYTE * | s, |
int | setunset, | ||
int | par | ||
) |
Definition at line 1426 of file compcomm.c.
void AddToCom | ( | int | n, |
WORD * | array | ||
) |
Definition at line 1556 of file compcomm.c.
int Add2ComStrings | ( | int | n, |
WORD * | array, | ||
UBYTE * | string1, | ||
UBYTE * | string2 | ||
) |
Definition at line 1630 of file compcomm.c.
int DoSymmetrize | ( | UBYTE * | s, |
int | par | ||
) |
Definition at line 2124 of file compcomm.c.
int DoArgument | ( | UBYTE * | s, |
int | par | ||
) |
Definition at line 1769 of file compcomm.c.
int ArgFactorize | ( | PHEAD WORD * | argin, |
WORD * | argout | ||
) |
Definition at line 2024 of file argument.c.
WORD * TakeArgContent | ( | PHEAD WORD * | argin, |
WORD * | argout | ||
) |
Implements part of the old ExecArg in which we take common factors from arguments with more than one term. The common pieces are put in argout as a sequence of arguments. The part with the multiple terms that are now relative prime is put in argfree which is allocated via TermMalloc and is given as the return value. The difference with the old code is that negative powers are always removed. Hence it is as in MakeInteger in which only numerators will be left: now only zero or positive powers will be remaining.
Definition at line 2725 of file argument.c.
References EndSort(), MakeInteger(), MakeMod(), NewSort(), and StoreTerm().
WORD * MakeInteger | ( | PHEAD WORD * | argin, |
WORD * | argout, | ||
WORD * | argfree | ||
) |
For normalizing everything to integers we have to determine for all elements of this argument the LCM of the denominators and the GCD of the numerators. The input argument is in argin. The number that comes out should go to argout. The new pointer in the argout buffer is the return value. The normalized argument is in argfree.
Definition at line 3271 of file argument.c.
Referenced by TakeArgContent().
WORD * MakeMod | ( | PHEAD WORD * | argin, |
WORD * | argout, | ||
WORD * | argfree | ||
) |
Similar to MakeInteger but now with modulus arithmetic using only a one WORD 'prime'. We make the coefficient of the first term in the argument equal to one. Already the coefficients are taken modulus AN.cmod and AN.ncmod == 1
Definition at line 3442 of file argument.c.
References GetModInverses().
Referenced by TakeArgContent().
WORD FindArg | ( | PHEAD WORD * | a | ) |
Looks the argument up in the (workers) table. If it is found the number in the table is returned (plus one to make it positive). If it is not found we look in the compiler provided table. If it is found - the number in the table is returned (minus one to make it negative). If in neither table we return zero.
Definition at line 2472 of file argument.c.
WORD InsertArg | ( | PHEAD WORD * | argin, |
WORD * | argout, | ||
int | par | ||
) |
Inserts the argument into the (workers) table. If the table is too full we eliminate half of it. The eliminated elements are the ones that have not been used most recently, weighted by their total use and age(?). If par == 0 it inserts in the regular factorization cache If par == 1 it inserts in the cache defined with the FactorCache statement
Definition at line 2496 of file argument.c.
References AddNtoC(), AddRHS(), and CleanupArgCache().
int CleanupArgCache | ( | PHEAD WORD | bufnum | ) |
Cleans up the argument factorization cache. We throw half the elements. For a weight of what we want to keep we use the product of usage and the number in the buffer.
Definition at line 2531 of file argument.c.
References CbUf::boomlijst, CbUf::Buffer, CbUf::Pointer, CbUf::rhs, SortWeights(), and tree::usage.
Referenced by InsertArg().
int ArgSymbolMerge | ( | WORD * | t1, |
WORD * | t2 | ||
) |
Definition at line 2602 of file argument.c.
int ArgDotproductMerge | ( | WORD * | t1, |
WORD * | t2 | ||
) |
Definition at line 2657 of file argument.c.
void SortWeights | ( | LONG * | weights, |
LONG * | extraspace, | ||
WORD | number | ||
) |
Sorts an array of LONGS in the same way SplitMerge (in sort.c) works We use gradual division in two.
Definition at line 3487 of file argument.c.
References SortWeights().
Referenced by CleanupArgCache(), and SortWeights().
int DoBrackets | ( | UBYTE * | inp, |
int | par | ||
) |
Definition at line 3711 of file compcomm.c.
int DoPutInside | ( | UBYTE * | inp, |
int | par | ||
) |
Definition at line 6904 of file compcomm.c.
WORD * CountComp | ( | UBYTE * | inp, |
WORD * | to | ||
) |
Definition at line 3989 of file compcomm.c.
int CoAntiBracket | ( | UBYTE * | inp | ) |
Definition at line 3846 of file compcomm.c.
int CoAntiSymmetrize | ( | UBYTE * | s | ) |
Definition at line 2251 of file compcomm.c.
int DoArgPlode | ( | UBYTE * | s, |
int | par | ||
) |
Definition at line 5564 of file compcomm.c.
int CoArgExplode | ( | UBYTE * | s | ) |
Definition at line 5620 of file compcomm.c.
int CoArgImplode | ( | UBYTE * | s | ) |
Definition at line 5627 of file compcomm.c.
int CoArgument | ( | UBYTE * | s | ) |
Definition at line 2003 of file compcomm.c.
int CoInside | ( | UBYTE * | s | ) |
Definition at line 2036 of file compcomm.c.
int CoInExpression | ( | UBYTE * | s | ) |
Definition at line 3264 of file compcomm.c.
int CoInParallel | ( | UBYTE * | s | ) |
Definition at line 3170 of file compcomm.c.
int CoNotInParallel | ( | UBYTE * | s | ) |
Definition at line 3180 of file compcomm.c.
int DoInParallel | ( | UBYTE * | s, |
int | par | ||
) |
Definition at line 3195 of file compcomm.c.
int CoEndInExpression | ( | UBYTE * | s | ) |
Definition at line 3317 of file compcomm.c.
int CoBracket | ( | UBYTE * | inp | ) |
Definition at line 3838 of file compcomm.c.
int CoPutInside | ( | UBYTE * | inp | ) |
Definition at line 6901 of file compcomm.c.
int CoAntiPutInside | ( | UBYTE * | inp | ) |
Definition at line 6902 of file compcomm.c.
int CoMultiBracket | ( | UBYTE * | inp | ) |
Definition at line 3857 of file compcomm.c.
int CoCollect | ( | UBYTE * | s | ) |
Definition at line 144 of file compcomm.c.
int CoCompress | ( | UBYTE * | s | ) |
Definition at line 222 of file compcomm.c.
int CoContract | ( | UBYTE * | s | ) |
Definition at line 1694 of file compcomm.c.
int CoCycleSymmetrize | ( | UBYTE * | s | ) |
Definition at line 2258 of file compcomm.c.
int CoDelete | ( | UBYTE * | s | ) |
Definition at line 624 of file compcomm.c.
int CoDenominators | ( | UBYTE * | s | ) |
Definition at line 5716 of file compcomm.c.
int CoDiscard | ( | UBYTE * | s | ) |
Definition at line 1671 of file compcomm.c.
int CoDrop | ( | UBYTE * | s | ) |
Definition at line 1471 of file compcomm.c.
int CoDropCoefficient | ( | UBYTE * | s | ) |
Definition at line 5745 of file compcomm.c.
int CoDropSymbols | ( | UBYTE * | s | ) |
Definition at line 5759 of file compcomm.c.
int CoElse | ( | UBYTE * | p | ) |
Definition at line 4742 of file compcomm.c.
int CoElseIf | ( | UBYTE * | inp | ) |
Definition at line 4769 of file compcomm.c.
int CoEndArgument | ( | UBYTE * | s | ) |
Definition at line 2010 of file compcomm.c.
int CoEndInside | ( | UBYTE * | s | ) |
Definition at line 2043 of file compcomm.c.
int CoEndIf | ( | UBYTE * | inp | ) |
Definition at line 4796 of file compcomm.c.
int CoEndRepeat | ( | UBYTE * | inp | ) |
Definition at line 3673 of file compcomm.c.
int CoEndTerm | ( | UBYTE * | s | ) |
Definition at line 5136 of file compcomm.c.
int CoEndWhile | ( | UBYTE * | inp | ) |
Definition at line 4862 of file compcomm.c.
int CoExit | ( | UBYTE * | s | ) |
Definition at line 3143 of file compcomm.c.
int CoFactArg | ( | UBYTE * | s | ) |
Definition at line 2104 of file compcomm.c.
int CoFactDollar | ( | UBYTE * | inp | ) |
Definition at line 6275 of file compcomm.c.
int CoFactorize | ( | UBYTE * | s | ) |
Definition at line 6304 of file compcomm.c.
int CoNFactorize | ( | UBYTE * | s | ) |
Definition at line 6311 of file compcomm.c.
int CoUnFactorize | ( | UBYTE * | s | ) |
Definition at line 6318 of file compcomm.c.
int CoNUnFactorize | ( | UBYTE * | s | ) |
Definition at line 6325 of file compcomm.c.
int DoFactorize | ( | UBYTE * | s, |
int | par | ||
) |
Definition at line 6332 of file compcomm.c.
int CoFixIndex | ( | UBYTE * | s | ) |
Definition at line 922 of file compcomm.c.
int CoFormat | ( | UBYTE * | s | ) |
Definition at line 669 of file compcomm.c.
int CoGoTo | ( | UBYTE * | inp | ) |
Definition at line 1723 of file compcomm.c.
int CoIf | ( | UBYTE * | inp | ) |
Definition at line 4179 of file compcomm.c.
int CoInsideFirst | ( | UBYTE * | s | ) |
Definition at line 610 of file compcomm.c.
int CoKeep | ( | UBYTE * | s | ) |
Definition at line 910 of file compcomm.c.
int CoLabel | ( | UBYTE * | inp | ) |
Definition at line 1742 of file compcomm.c.
int CoMerge | ( | UBYTE * | inp | ) |
Definition at line 5405 of file compcomm.c.
int CoStuffle | ( | UBYTE * | inp | ) |
Definition at line 5461 of file compcomm.c.
int CoMetric | ( | UBYTE * | s | ) |
Definition at line 956 of file compcomm.c.
int CoModulus | ( | UBYTE * | inp | ) |
Definition at line 3460 of file compcomm.c.
int CoNPrint | ( | UBYTE * | s | ) |
Definition at line 1194 of file compcomm.c.
int CoNWrite | ( | UBYTE * | s | ) |
Definition at line 2297 of file compcomm.c.
int CoNoDrop | ( | UBYTE * | s | ) |
Definition at line 1478 of file compcomm.c.
int CoNoSkip | ( | UBYTE * | s | ) |
Definition at line 1492 of file compcomm.c.
int CoNormalize | ( | UBYTE * | s | ) |
Definition at line 2069 of file compcomm.c.
int CoMakeInteger | ( | UBYTE * | s | ) |
Definition at line 2076 of file compcomm.c.
int CoFlags | ( | UBYTE * | s, |
int | value | ||
) |
Definition at line 271 of file compcomm.c.
int CoOff | ( | UBYTE * | s | ) |
Definition at line 306 of file compcomm.c.
int CoOn | ( | UBYTE * | s | ) |
Definition at line 363 of file compcomm.c.
int CoOptimizeOption | ( | UBYTE * | s | ) |
Definition at line 6465 of file compcomm.c.
int CoPolyFun | ( | UBYTE * | s | ) |
Definition at line 5202 of file compcomm.c.
int CoPolyRatFun | ( | UBYTE * | s | ) |
Definition at line 5241 of file compcomm.c.
int CoPrint | ( | UBYTE * | s | ) |
Definition at line 1180 of file compcomm.c.
int CoPrintB | ( | UBYTE * | s | ) |
Definition at line 1187 of file compcomm.c.
int CoProperCount | ( | UBYTE * | s | ) |
Definition at line 617 of file compcomm.c.
int CoUnitTrace | ( | UBYTE * | s | ) |
Definition at line 5053 of file compcomm.c.
int CoRCycleSymmetrize | ( | UBYTE * | s | ) |
Definition at line 2265 of file compcomm.c.
int CoRatio | ( | UBYTE * | s | ) |
Definition at line 2324 of file compcomm.c.
int CoRedefine | ( | UBYTE * | s | ) |
Definition at line 2364 of file compcomm.c.
int CoRenumber | ( | UBYTE * | s | ) |
Definition at line 2469 of file compcomm.c.
int CoRepeat | ( | UBYTE * | inp | ) |
Definition at line 3650 of file compcomm.c.
int CoSetExitFlag | ( | UBYTE * | s | ) |
Definition at line 3343 of file compcomm.c.
int CoSkip | ( | UBYTE * | s | ) |
Definition at line 1485 of file compcomm.c.
int CoProcessBucket | ( | UBYTE * | s | ) |
Definition at line 5516 of file compcomm.c.
int CoPushHide | ( | UBYTE * | s | ) |
Definition at line 1201 of file compcomm.c.
int CoPopHide | ( | UBYTE * | s | ) |
Definition at line 1245 of file compcomm.c.
int CoHide | ( | UBYTE * | inp | ) |
Definition at line 1499 of file compcomm.c.
int CoIntoHide | ( | UBYTE * | inp | ) |
Definition at line 1517 of file compcomm.c.
int CoNoHide | ( | UBYTE * | inp | ) |
Definition at line 1535 of file compcomm.c.
int CoUnHide | ( | UBYTE * | inp | ) |
Definition at line 1542 of file compcomm.c.
int CoNoUnHide | ( | UBYTE * | inp | ) |
Definition at line 1549 of file compcomm.c.
int CoSort | ( | UBYTE * | s | ) |
Definition at line 5163 of file compcomm.c.
int CoSplitArg | ( | UBYTE * | s | ) |
Definition at line 2083 of file compcomm.c.
int CoSplitFirstArg | ( | UBYTE * | s | ) |
Definition at line 2090 of file compcomm.c.
int CoSplitLastArg | ( | UBYTE * | s | ) |
Definition at line 2097 of file compcomm.c.
int CoSum | ( | UBYTE * | s | ) |
Definition at line 2490 of file compcomm.c.
int CoSymmetrize | ( | UBYTE * | s | ) |
Definition at line 2244 of file compcomm.c.
int CoTerm | ( | UBYTE * | s | ) |
Definition at line 5088 of file compcomm.c.
int CoToTensor | ( | UBYTE * | s | ) |
Definition at line 2610 of file compcomm.c.
int CoToVector | ( | UBYTE * | s | ) |
Definition at line 2778 of file compcomm.c.
int CoTrace4 | ( | UBYTE * | s | ) |
Definition at line 2848 of file compcomm.c.
int CoTraceN | ( | UBYTE * | s | ) |
Definition at line 2935 of file compcomm.c.
int CoChisholm | ( | UBYTE * | s | ) |
Definition at line 2995 of file compcomm.c.
int CoTransform | ( | UBYTE * | in | ) |
Definition at line 87 of file transform.c.
int CoClearTable | ( | UBYTE * | s | ) |
Definition at line 5634 of file compcomm.c.
int DoChain | ( | UBYTE * | s, |
int | option | ||
) |
Definition at line 3077 of file compcomm.c.
int CoChainin | ( | UBYTE * | s | ) |
Definition at line 3121 of file compcomm.c.
int CoChainout | ( | UBYTE * | s | ) |
Definition at line 3133 of file compcomm.c.
int CoTryReplace | ( | UBYTE * | p | ) |
Definition at line 3357 of file compcomm.c.
int CoWhile | ( | UBYTE * | inp | ) |
Definition at line 4841 of file compcomm.c.
int CoWrite | ( | UBYTE * | s | ) |
Definition at line 2272 of file compcomm.c.
int CoSwitch | ( | UBYTE * | s | ) |
Definition at line 7024 of file compcomm.c.
int CoCase | ( | UBYTE * | s | ) |
Definition at line 7070 of file compcomm.c.
int CoBreak | ( | UBYTE * | s | ) |
Definition at line 7120 of file compcomm.c.
int CoDefault | ( | UBYTE * | s | ) |
Definition at line 7146 of file compcomm.c.
int CoEndSwitch | ( | UBYTE * | s | ) |
Definition at line 7173 of file compcomm.c.
int CoThreadBucket | ( | UBYTE * | s | ) |
Definition at line 5534 of file compcomm.c.
int AddComString | ( | int | n, |
WORD * | array, | ||
UBYTE * | thestring, | ||
int | par | ||
) |
Definition at line 1571 of file compcomm.c.
int CompileAlgebra | ( | UBYTE * | s, |
int | leftright, | ||
WORD * | prototype | ||
) |
Definition at line 500 of file compiler.c.
int IsIdStatement | ( | UBYTE * | s | ) |
Definition at line 486 of file compiler.c.
UBYTE * IsRHS | ( | UBYTE * | s, |
UBYTE | c | ||
) |
Definition at line 440 of file compiler.c.
int ParenthesesTest | ( | UBYTE * | sin | ) |
Definition at line 362 of file compiler.c.
UBYTE * SkipAName | ( | UBYTE * | s | ) |
Definition at line 412 of file compiler.c.
int CompileSubExpressions | ( | SBYTE * | tokens | ) |
Definition at line 694 of file compiler.c.
int CodeGenerator | ( | SBYTE * | tokens | ) |
Definition at line 829 of file compiler.c.
int CompleteTerm | ( | WORD * | term, |
UWORD * | numer, | ||
UWORD * | denom, | ||
WORD | nnum, | ||
WORD | nden, | ||
int | sign | ||
) |
Definition at line 1874 of file compiler.c.
int CodeFactors | ( | SBYTE * | s | ) |
Definition at line 1911 of file compiler.c.
WORD GenerateFactors | ( | WORD | n, |
WORD | inc | ||
) |
Definition at line 2208 of file compiler.c.
UBYTE * WriteDollarFactorToBuffer | ( | WORD | numdollar, |
WORD | numfac, | ||
WORD | par | ||
) |
int Lus | ( | WORD * | term, |
WORD | funnum, | ||
WORD | loopsize, | ||
WORD | numargs, | ||
WORD | outfun, | ||
WORD | mode | ||
) |
int CoReplaceLoop | ( | UBYTE * | inp | ) |
Definition at line 5012 of file compcomm.c.
int CoFindLoop | ( | UBYTE * | inp | ) |
Definition at line 5004 of file compcomm.c.
int DoFindLoop | ( | UBYTE * | inp, |
int | mode | ||
) |
Definition at line 4890 of file compcomm.c.
int CoFunPowers | ( | UBYTE * | inp | ) |
Definition at line 5026 of file compcomm.c.
WORD * TakeDollarContent | ( | PHEAD WORD * | dollarbuffer, |
WORD ** | factor | ||
) |
WORD * MakeDollarInteger | ( | PHEAD WORD * | bufin, |
WORD ** | bufout | ||
) |
For normalizing everything to integers we have to determine for all elements of this argument the LCM of the denominators and the GCD of the numerators. The input argument is in bufin. The number that comes out is the return value. The normalized argument is in bufout.
Definition at line 3622 of file dollar.c.
References EndSort(), Generator(), and NewSort().
WORD * MakeDollarMod | ( | PHEAD WORD * | buffer, |
WORD ** | bufout | ||
) |
Similar to MakeDollarInteger but now with modulus arithmetic using only a one WORD 'prime'. We make the coefficient of the first term in the argument equal to one. Already the coefficients are taken modulus AN.cmod and AN.ncmod == 1
Definition at line 3796 of file dollar.c.
References EndSort(), Generator(), GetModInverses(), and NewSort().
void AddPotModdollar | ( | WORD | numdollar | ) |
int Optimize | ( | WORD | exprnr, |
int | do_print | ||
) |
Optimization of expression
This method takes an input expression and generates optimized code to calculate its value. The following methods are called to do so:
(1) get_expression : to read to expression
(2) get_brackets : find brackets for simultaneous optimization
(3) occurrence_order or find_Horner_MCTS : to determine (the) Horner scheme(s) to use; this depends on AO.optimize.horner
(4) optimize_expression_given_Horner : to do the optimizations for each Horner scheme; this method does either CSE or greedy optimizations dependings on AO.optimize.method
(5) generate_output : to format the output in Form notation and store it in a buffer
(6a) optimize_print_code : to print the expression (for "Print") or (6b) generate_expression : to modify the expression (for "#Optimize")
On ParFORM, all the processes must call this function at the same time. Then
(1) Because only the master can access to the expression to be optimized, the master broadcast the expression to all the slaves after reading the expression (PF_get_expression).
(2) get_brackets reads optimize_expr as the input and it works also on the slaves. We leave it although the bracket information is not needed on the slaves (used in (5) on the master).
(3) and (4) find_Horner_MCTS and optimize_expression_given_Horner are parallelized.
(5), (6a) and (6b) are needed only on the master.
Definition at line 4587 of file optimize.cc.
References ClearOptimize(), count_operators(), find_Horner_MCTS(), generate_expression(), generate_output(), get_brackets(), get_expression(), occurrence_order(), optimize_expression_given_Horner(), optimize_print_code(), PF_Broadcast(), PF_LongMultiBroadcast(), PF_Pack(), PF_PrepareLongMultiPack(), PF_PreparePack(), PF_Unpack(), and PutPreVar().
int MakeLongRational | ( | PHEAD UWORD * | a, |
WORD | na, | ||
UWORD * | m, | ||
WORD | nm, | ||
UWORD * | b, | ||
WORD * | nb | ||
) |
void finishcbuf | ( | WORD | num | ) |
Frees a compiler buffer.
num | The ID number for the buffer to be freed. |
Definition at line 89 of file comtool.c.
References CbUf::boomlijst, CbUf::Buffer, CbUf::BufferSize, CbUf::CanCommu, CbUf::lhs, CbUf::NumTerms, CbUf::Pointer, CbUf::rhs, and CbUf::Top.
Referenced by PF_BroadcastCBuf().
void clearcbuf | ( | WORD | num | ) |
Clears contents in a compiler buffer.
num | The ID number for the buffer to be cleared. |
Definition at line 116 of file comtool.c.
References CbUf::boomlijst, CbUf::Buffer, CbUf::Pointer, and CbUf::rhs.
void CleanUpSort | ( | int | num | ) |
FILEHANDLE * AllocFileHandle | ( | WORD | par, |
char * | name | ||
) |
VOID DeAllocFileHandle | ( | FILEHANDLE * | fh | ) |
VOID SimpleSplitMergeRec | ( | WORD * | array, |
WORD | num, | ||
WORD * | auxarray | ||
) |
WORD EvalDoLoopArg | ( | PHEAD WORD * | arg, |
WORD | par | ||
) |
Evaluates one argument of a do loop. Such an argument is constructed from SNUMBERs DOLLAREXPRESSIONs and possibly DOLLAREXPR2s which indicate factors of the preceeding dollar. Hence we have SNUMBER,num DOLLAREXPRESSION,numdollar DOLLAREXPRESSION,numdollar,DOLLAREXPR2,numfactor DOLLAREXPRESSION,numdollar,DOLLAREXPR2,numfactor,DOLLAREXPR2,numfactor etc. Because we have a do-loop at every stage we should have a number. The notation in DOLLAREXPR2 is that >= 0 is number of yet another dollar and < 0 is -n-1 with n the array element or zero. The return value is the (short) number. The routine works its way through the list in a recursive manner.
Definition at line 2646 of file dollar.c.
References EvalDoLoopArg().
Referenced by EvalDoLoopArg().
int SetExprCases | ( | int | par, |
int | setunset, | ||
int | val | ||
) |
Definition at line 1280 of file compcomm.c.
int TwoExprCompare | ( | WORD * | buf1, |
WORD * | buf2, | ||
int | oprtr | ||
) |
VOID PutBracketInIndex | ( | PHEAD WORD * | term, |
POSITION * | newpos | ||
) |
int ChainIn | ( | PHEAD WORD * | term, |
WORD | funnum | ||
) |
Definition at line 691 of file function.c.
int ChainOut | ( | PHEAD WORD * | term, |
WORD | funnum | ||
) |
Definition at line 739 of file function.c.
int ArgumentImplode | ( | PHEAD WORD * | term, |
WORD * | thelist | ||
) |
Definition at line 1809 of file argument.c.
int ArgumentExplode | ( | PHEAD WORD * | term, |
WORD * | thelist | ||
) |
Definition at line 1913 of file argument.c.
int DenToFunction | ( | WORD * | term, |
WORD | numfun | ||
) |
Definition at line 2513 of file wildcard.c.
void convertblock | ( | INDEXBLOCK * | in, |
INDEXBLOCK * | out, | ||
int | mode | ||
) |
void convertnamesblock | ( | NAMESBLOCK * | in, |
NAMESBLOCK * | out, | ||
int | mode | ||
) |
char * ReadObject | ( | DBASE * | d, |
MLONG | tablenumber, | ||
char * | arguments | ||
) |
char * ReadijObject | ( | DBASE * | d, |
MLONG | i, | ||
MLONG | j, | ||
char * | arguments | ||
) |
int ExistsObject | ( | DBASE * | d, |
MLONG | tablenumber, | ||
char * | arguments | ||
) |
int DeleteObject | ( | DBASE * | d, |
MLONG | tablenumber, | ||
char * | arguments | ||
) |
int WriteObject | ( | DBASE * | d, |
MLONG | tablenumber, | ||
char * | arguments, | ||
char * | rhs, | ||
MLONG | number | ||
) |
MLONG AddObject | ( | DBASE * | d, |
MLONG | tablenumber, | ||
char * | arguments, | ||
char * | rhs | ||
) |
int CopyExpression | ( | FILEHANDLE * | from, |
FILEHANDLE * | to | ||
) |
int set_in | ( | UBYTE | ch, |
set_of_char | set | ||
) |
one_byte set_set | ( | UBYTE | ch, |
set_of_char | set | ||
) |
one_byte set_del | ( | UBYTE | ch, |
set_of_char | set | ||
) |
one_byte set_sub | ( | set_of_char | set, |
set_of_char | set1, | ||
set_of_char | set2 | ||
) |
int openExternalChannel | ( | UBYTE * | cmd, |
int | daemonize, | ||
UBYTE * | shellname, | ||
UBYTE * | stderrname | ||
) |
int initPresetExternalChannels | ( | UBYTE * | theline, |
int | thetimeout | ||
) |
int SymbolNormalize | ( | WORD * | term | ) |
Routine normalizes terms that contain only symbols. Regular minimum and maximum properties are ignored.
We check whether there are negative powers in the output. This is not allowed.
Definition at line 5014 of file normal.c.
Referenced by InFunction(), and poly_sort().
WORD CompareSymbols | ( | WORD * | term1, |
WORD * | term2, | ||
WORD | par | ||
) |
Compares the terms, based on the value of AN.polysortflag. If term1 < term2 the return value is -1 If term1 > term2 the return value is 1 If term1 = term2 the return value is 0 The coefficients may differ. The terms contain only a single subterm of type SYMBOL. If AN.polysortflag = 0 it is a 'regular' compare. If AN.polysortflag = 1 the sum of the powers is more important par is a dummy parameter to make the parameter field identical to that of Compare1 which is the regular compare routine in sort.c
Definition at line 2976 of file sort.c.
Referenced by InFunction(), poly_sort(), and TestSub().
WORD CompareHSymbols | ( | WORD * | term1, |
WORD * | term2, | ||
WORD | par | ||
) |
Compares terms that can have only SYMBOL and HAAKJE subterms. If term1 < term2 the return value is -1 If term1 > term2 the return value is 1 If term1 = term2 the return value is 0 par is a dummy parameter to make the parameter field identical to that of Compare1 which is the regular compare routine in sort.c
WORD NextPrime | ( | PHEAD WORD | num | ) |
Gives the next prime number in the list of prime numbers.
If the list isn't long enough we expand it. For ease in ParForm and because these lists shouldn't be very big we let each worker keep its own list.
The list is cut off at MAXPOWER, because we don't want to get into trouble that the power of a variable gets larger than the prime number.
WORD ReadSaveIndex | ( | FILEINDEX * | fileind | ) |
Reads a FILEINDEX from the open save file specified by AO.SaveData.Handle. Translations for adjusting endianness and data sizes are done if necessary.
Depends on the assumption that sizeof(FILEINDEX) is the same everywhere. If FILEINDEX or INDEXENTRY change, then this functions has to be adjusted.
Called by CoLoad() and FindInIndex().
fileind | contains the read FILEINDEX after succesful return. must point to allocated, big enough memory. |
Definition at line 4137 of file store.c.
References INFILEINDEX, FiLeInDeX::next, FiLeInDeX::number, and FuNcTiOn::number.
WORD ReadSaveExpression | ( | UBYTE * | buffer, |
UBYTE * | top, | ||
LONG * | size, | ||
LONG * | outsize | ||
) |
Reads an expression from the open file specified by AO.SaveData.Handle. The endianness flip and a resizing without renumbering is done in this function. Thereafter the buffer consists of chunks with a uniform maximal word size (32bit at the moment). The actual renumbering is then done by calling the function ReadSaveTerm32(). The result is returned in buffer.
If the translation at some point doesn't fit into the buffer anymore, the function returns and must be called again. In any case size returns the number of successfully read bytes, outsize returns the number of successfully written bytes, and the file will be positioned at the next byte after the successfully read data.
It is called by PutInStore().
buffer | output buffer, holds the (translated) expression |
top | end of buffer |
size | number of read bytes |
outsize | number of written bytes |
Definition at line 5092 of file store.c.
References ReadSaveTerm32().
UBYTE * ReadSaveTerm32 | ( | UBYTE * | bin, |
UBYTE * | binend, | ||
UBYTE ** | bout, | ||
UBYTE * | boutend, | ||
UBYTE * | top, | ||
int | terminbuf | ||
) |
Reads a single term from the given buffer at bin and write the translated term back to this buffer at bout.
ReadSaveTerm32() is currently the only instantiation of a ReadSaveTerm-function. It only deals with data that already has the correct endianness and that is resized to 32bit words but without being renumbered or translated in any other way. It uses the compress buffer AR.CompressBuffer.
The function is reentrant in order to cope with nested function arguments. It is called by ReadSaveExpression() and itself.
The return value indicates the position in the input buffer up to which the data has already been successfully processed. The parameter bout returns the corresponding position in the output buffer.
bin | start of the input buffer |
binend | end of the input buffer |
bout | as input points to the beginning of the output buffer, as output points behind the already translated data in the output buffer |
boutend | end of already decompressed data in output buffer |
top | end of output buffer |
terminbuf | flag whether decompressed data is already in the output buffer. used in recursive calls |
Definition at line 4683 of file store.c.
References ReadSaveTerm32().
Referenced by ReadSaveExpression(), and ReadSaveTerm32().
WORD ReadSaveVariables | ( | UBYTE * | buffer, |
UBYTE * | top, | ||
LONG * | size, | ||
LONG * | outsize, | ||
INDEXENTRY * | ind, | ||
LONG * | stage | ||
) |
Reads the variables from the open file specified by AO.SaveData.Handle. It reads the *size bytes and writes them to the *buffer. It is called by PutInStore().
If translation is necessary, the data might shrink or grow in size, then *size is adjusted so that the reading and writing fits into the memory from the buffer to the top. The actual number of read bytes is returned in *size, the number of written bytes is returned in *outsize.
If the *size is smaller than the actual size of the variables, this function will be called several times and needs to remember the current position in the variable structure. The parameter stage does this job. When ReadSaveVariables() is called for the first time, this parameter should have the value -1.
The parameter ind is used to get the number of variables.
buffer | read variables are written into this allocated memory |
top | upper end of allocated memory |
size | number of bytes to read. might return a smaller number of read bytes if translation was necessary |
outsize | if translation has be done, outsize contains the number of written bytes |
ind | pointer of INDEXENTRY for the current expression. read-only |
stage | should be -1 for the first call, will be increased by ReadSaveVariables to memorize the position in the variable structure |
Definition at line 4323 of file store.c.
References InDeXeNtRy::nfunctions, InDeXeNtRy::nindices, InDeXeNtRy::nsymbols, InDeXeNtRy::nvectors, and FuNcTiOn::spec.
WORD WriteStoreHeader | ( | WORD | handle | ) |
Writes header with information about system architecture and FORM revision to an open store file.
Called by SetFileIndex().
handle | specifies open file to which header will be written |
Definition at line 3926 of file store.c.
References STOREHEADER::endianness, STOREHEADER::lenLONG, STOREHEADER::lenPOINTER, STOREHEADER::lenPOS, STOREHEADER::lenWORD, STOREHEADER::maxpower, STOREHEADER::sFun, STOREHEADER::sInd, STOREHEADER::sSym, STOREHEADER::sVec, and STOREHEADER::wildoffset.
Referenced by SetFileIndex().
int DoRecovery | ( | int * | moduletype | ) |
Reads from the recovery file and restores all necessary variables and states in FORM, so that the execution can recommence in preprocessor() as if no restart of FORM had occurred.
The recovery file is read into memory as a whole. The pointer p then points into this memory at the next non-processed data. The macros by which variables are restored, like R_SET, automatically increase p appropriately.
If something goes wrong, the function returns with a non-zero value.
Allocated memory that would be lost when overwriting the global structs with data from the file is freed first. A major part of the code deals with the restoration of pointers. The idiom we use is to memorize the original pointer value (org), allocate new memory and copy the data from the file into this memory, calculate the offset between the old pointer value and the new allocated memory position (ofs), and then correct all affected pointers (+=ofs).
We rely on the fact that several variables (especially in AM) are already assigned the correct values by the startup functions. That means, in principle, that a change in the setup files between snapshot creation and recovery will be noticed.
Definition at line 1401 of file checkpoint.c.
References TaBlEs::argtail, TaBlEs::boomlijst, BrAcKeTiNfO::bracketbuffer, TaBlEs::buffers, TaBlEs::bufferssize, CopyFile(), TaBlEs::flags, ReNuMbEr::func, ReNuMbEr::funnum, VaRrEnUm::hi, BrAcKeTiNfO::indexbuffer, ReNuMbEr::indi, ReNuMbEr::indnum, VaRrEnUm::lo, TaBlEs::MaxTreeSize, TaBlEs::mm, TaBlEs::numind, TaBlEs::pattern, TaBlEs::prototype, TaBlEs::prototypeSize, RecoveryFilename(), ExPrEsSiOn::renumlists, TaBlEs::reserved, TaBlEs::spare, TaBlEs::sparse, VaRrEnUm::start, ReNuMbEr::symb, ReNuMbEr::symnum, TaBlEs::tablepointers, TimeWallClock(), TaBlEs::totind, ReNuMbEr::vecnum, and ReNuMbEr::vect.
void DoCheckpoint | ( | int | moduletype | ) |
Checks whether a snapshot should be done. Calls DoSnapshot() to create the snapshot.
Definition at line 3108 of file checkpoint.c.
References PF_BroadcastNumber(), PF_RecvFile(), PF_SendFile(), and TimeWallClock().
void ExprStatus | ( | EXPRESSIONS | e | ) |
int TestTerm | ( | WORD * | term | ) |
Tests the consistency of the term. Returns 0 when the term is OK. Any nonzero value is trouble. In the current version the testing isn't 100% complete. For instance, we don't check the validity of the symbols nor do we check the range of their powers. Etc. This should be extended when the need is there.
term | the term to be tested |
Definition at line 3861 of file tools.c.
References TestTerm().
Referenced by TestTerm().
WORD RunTransform | ( | PHEAD WORD * | term, |
WORD * | params | ||
) |
Definition at line 689 of file transform.c.
WORD RunEncode | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
WORD * | info | ||
) |
Definition at line 922 of file transform.c.
WORD RunDecode | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
WORD * | info | ||
) |
Definition at line 1109 of file transform.c.
WORD RunReplace | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
WORD * | info | ||
) |
Definition at line 1279 of file transform.c.
WORD RunImplode | ( | WORD * | fun, |
WORD * | args | ||
) |
Definition at line 1757 of file transform.c.
WORD RunExplode | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 1958 of file transform.c.
int TestArgNum | ( | int | n, |
int | totarg, | ||
WORD * | args | ||
) |
Definition at line 3107 of file transform.c.
WORD PutArgInScratch | ( | WORD * | arg, |
UWORD * | scrat | ||
) |
Definition at line 3176 of file transform.c.
UBYTE * ReadRange | ( | UBYTE * | s, |
WORD * | out, | ||
int | par | ||
) |
Definition at line 3212 of file transform.c.
int FindRange | ( | PHEAD WORD * | args, |
WORD * | arg1, | ||
WORD * | arg2, | ||
WORD | totarg | ||
) |
Definition at line 3372 of file transform.c.
WORD RunPermute | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
WORD * | info | ||
) |
Definition at line 2072 of file transform.c.
WORD RunReverse | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 2299 of file transform.c.
WORD RunCycle | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
WORD * | info | ||
) |
Definition at line 2475 of file transform.c.
WORD RunAddArg | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 2627 of file transform.c.
WORD RunMulArg | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 2714 of file transform.c.
WORD RunIsLyndon | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
int | par | ||
) |
Definition at line 2853 of file transform.c.
WORD RunToLyndon | ( | PHEAD WORD * | fun, |
WORD * | args, | ||
int | par | ||
) |
Definition at line 2931 of file transform.c.
WORD RunDropArg | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 3043 of file transform.c.
WORD RunSelectArg | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 3069 of file transform.c.
WORD RunDedup | ( | PHEAD WORD * | fun, |
WORD * | args | ||
) |
Definition at line 2386 of file transform.c.
int NormPolyTerm | ( | PHEAD WORD * | term | ) |
Definition at line 53 of file notation.c.
int ConvertToPoly | ( | PHEAD WORD * | term, |
WORD * | outterm, | ||
WORD * | comlist, | ||
WORD | par | ||
) |
Definition at line 307 of file notation.c.
int LocalConvertToPoly | ( | PHEAD WORD * | term, |
WORD * | outterm, | ||
WORD | startebuf, | ||
WORD | par | ||
) |
Converts a generic term to polynomial notation in which there are only symbols and brackets. During conversion there will be only symbols. Brackets are stripped. Objects that need 'translation' are put inside a special compiler buffer and represented by a symbol. The numbering of the extra symbols is down from the maximum. In principle there can be a problem when running into the already assigned ones. This uses the FindTree for searching in the global tree and then looks further in the AT.ebufnum. This allows fully parallel processing. Hence we need no locks. Cannot be used in the same module as ConvertToPoly.
Definition at line 510 of file notation.c.
Referenced by poly_factorize_expression().
int ConvertFromPoly | ( | PHEAD WORD * | term, |
WORD * | outterm, | ||
WORD | from, | ||
WORD | to, | ||
WORD | offset, | ||
WORD | par | ||
) |
Definition at line 660 of file notation.c.
WORD FindSubterm | ( | WORD * | subterm | ) |
Definition at line 773 of file notation.c.
WORD FindLocalSubterm | ( | PHEAD WORD * | subterm, |
WORD | startebuf | ||
) |
Definition at line 842 of file notation.c.
void PrintSubtermList | ( | int | from, |
int | to | ||
) |
Definition at line 895 of file notation.c.
void PrintExtraSymbol | ( | int | num, |
WORD * | terms, | ||
int | par | ||
) |
Definition at line 1007 of file notation.c.
WORD FindSubexpression | ( | WORD * | subexpr | ) |
Definition at line 1094 of file notation.c.
int CoToPolynomial | ( | UBYTE * | inp | ) |
Definition at line 5782 of file compcomm.c.
int CoFromPolynomial | ( | UBYTE * | inp | ) |
Definition at line 5857 of file compcomm.c.
int CoArgToExtraSymbol | ( | UBYTE * | s | ) |
Definition at line 5883 of file compcomm.c.
int CoExtraSymbols | ( | UBYTE * | inp | ) |
Definition at line 5933 of file compcomm.c.
UBYTE * GetDoParam | ( | UBYTE * | inp, |
WORD ** | wp, | ||
int | par | ||
) |
Definition at line 6064 of file compcomm.c.
WORD * GetIfDollarFactor | ( | UBYTE ** | inp, |
WORD * | w | ||
) |
Definition at line 6006 of file compcomm.c.
int CoDo | ( | UBYTE * | inp | ) |
Definition at line 6141 of file compcomm.c.
int CoEndDo | ( | UBYTE * | inp | ) |
Definition at line 6244 of file compcomm.c.
int ExtraSymFun | ( | PHEAD WORD * | term, |
WORD | level | ||
) |
Definition at line 1146 of file notation.c.
int PruneExtraSymbols | ( | WORD | downto | ) |
Definition at line 1214 of file notation.c.
int IniFbuffer | ( | WORD | bufnum | ) |
Initialize a factorization cache buffer. We set the size of the rhs and boomlijst buffers immediately to their final values.
Definition at line 614 of file comtool.c.
References tree::blnce, CbUf::boomlijst, CbUf::CanCommu, CbUf::dimension, tree::left, CbUf::numdum, CbUf::NumTerms, tree::parent, CbUf::rhs, tree::right, tree::usage, and tree::value.
int FromPolyRatFun | ( | PHEAD WORD * | fun, |
WORD ** | numout, | ||
WORD ** | denout | ||
) |
WORD * TakeSymbolContent | ( | PHEAD WORD * | in, |
WORD * | term | ||
) |
Implements part of the old ExecArg in which we take common factors from arguments with more than one term. We allow only symbols as this code is used for the polyratfun only. We have a special routine, because the generic TakeContent does too much work and speed is at a premium here. Input: in is the input expression as a sequence of terms. Output: term: the content return value: the contentfree expression. it is in new allocation, made by TermMalloc. (should be in a TermMalloc space?)
Definition at line 2434 of file ratio.c.
References GetModInverses().
int GCDterms | ( | PHEAD WORD * | term1, |
WORD * | term2, | ||
WORD * | termout | ||
) |
WORD * PutExtraSymbols | ( | PHEAD WORD * | in, |
WORD | startebuf, | ||
int * | actionflag | ||
) |
WORD * TakeExtraSymbols | ( | PHEAD WORD * | in, |
WORD | startebuf | ||
) |
WORD * MultiplyWithTerm | ( | PHEAD WORD * | in, |
WORD * | term, | ||
WORD | par | ||
) |
WORD * TakeContent | ( | PHEAD WORD * | in, |
WORD * | term | ||
) |
Implements part of the old ExecArg in which we take common factors from arguments with more than one term. Here the input is a sequence of terms in 'in' and the answer is a content-free sequence of terms. This sequence has been allocated by the Malloc1 routine in a call to EndSort, unless the expression was already content-free. In that case the input pointer is returned. The content is returned in term. This is supposed to be a separate allocation, made by TermMalloc in the calling routine.
Definition at line 1376 of file ratio.c.
References GetModInverses().
int MergeSymbolLists | ( | PHEAD WORD * | old, |
WORD * | extra, | ||
int | par | ||
) |
int MergeDotproductLists | ( | PHEAD WORD * | old, |
WORD * | extra, | ||
int | par | ||
) |
WORD * poly_gcd | ( | PHEAD WORD * | a, |
WORD * | b, | ||
WORD | fit | ||
) |
Polynomial gcd
This method calculates the greatest common divisor of two polynomials, given by two zero-terminated Form-style term lists.
Definition at line 124 of file polywrap.cc.
References poly_determine_modulus().
WORD * poly_div | ( | PHEAD WORD * | a, |
WORD * | b, | ||
WORD | fit | ||
) |
Definition at line 424 of file polywrap.cc.
WORD * poly_rem | ( | PHEAD WORD * | a, |
WORD * | b, | ||
WORD | fit | ||
) |
Definition at line 445 of file polywrap.cc.
WORD * poly_inverse | ( | PHEAD WORD * | arga, |
WORD * | argb | ||
) |
Definition at line 1665 of file polywrap.cc.
WORD * poly_mul | ( | PHEAD WORD * | a, |
WORD * | b | ||
) |
Definition at line 1794 of file polywrap.cc.
WORD * poly_ratfun_add | ( | PHEAD WORD * | t1, |
WORD * | t2 | ||
) |
Addition of PolyRatFuns
This method gets two pointers to polyratfuns with up to two arguments each and calculates the sum.
Definition at line 600 of file polywrap.cc.
References poly_determine_modulus(), poly_ratfun_read(), and poly_sort().
Referenced by AddPoly(), and MergePatches().
int poly_ratfun_normalize | ( | PHEAD WORD * | term | ) |
Multiplication/normalization of PolyRatFuns
This method seaches a term for multiple polyratfuns and multiplies their contents. The result is properly normalized. Normalization also works for terms with a single polyratfun.
Definition at line 719 of file polywrap.cc.
References poly_determine_modulus(), poly_ratfun_read(), and poly_sort().
Referenced by PolyFunMul(), and PrepPoly().
int poly_factorize_argument | ( | PHEAD WORD * | argin, |
WORD * | argout | ||
) |
Factorization of function arguments
This method factorizes the Form-style argument argin.
Definition at line 1047 of file polywrap.cc.
References poly_factorize().
WORD * poly_factorize_dollar | ( | PHEAD WORD * | argin | ) |
Factorization of dollar variables
This method factorizes a dollar variable.
Definition at line 1074 of file polywrap.cc.
References poly_factorize().
int poly_factorize_expression | ( | EXPRESSIONS | expr | ) |
Factorization of expressions
This method factorizes an expression.
Definition at line 1100 of file polywrap.cc.
References EndSort(), Generator(), FiLe::handle, LocalConvertToPoly(), LowerSortLevel(), NewSort(), and poly_determine_modulus().
Referenced by PF_Processor(), and Processor().
int poly_unfactorize_expression | ( | EXPRESSIONS | expr | ) |
Unfactorization of expressions
This method expands a factorized expression.
Definition at line 1457 of file polywrap.cc.
References EndSort(), Generator(), FiLe::handle, LowerSortLevel(), and NewSort().
Referenced by PF_Processor(), and Processor().
void poly_free_poly_vars | ( | PHEAD const char * | text | ) |
Definition at line 1853 of file polywrap.cc.
VOID optimize_print_code | ( | int | print_expr | ) |
Print optimized code
This method prints the optimized code via "PrintExtraSymbol". Depending on the flag, the original expression is printed (for "Print") or not (for "#Optimize / #write "O").
Definition at line 4474 of file optimize.cc.
Referenced by Optimize().
void RemoveDictionary | ( | DICTIONARY * | dict | ) |
int AddToDictionary | ( | DICTIONARY * | dict, |
UBYTE * | left, | ||
UBYTE * | right | ||
) |
void WriteDictionary | ( | DICTIONARY * | dict | ) |
void ShrinkDictionary | ( | DICTIONARY * | dict | ) |
LONG DictToBytes | ( | DICTIONARY * | dict, |
UBYTE * | buf | ||
) |
DICTIONARY * DictFromBytes | ( | UBYTE * | buf | ) |
int CoCreateSpectator | ( | UBYTE * | inp | ) |
Definition at line 89 of file spectator.c.
int CoToSpectator | ( | UBYTE * | inp | ) |
Definition at line 181 of file spectator.c.
int CoRemoveSpectator | ( | UBYTE * | inp | ) |
Definition at line 233 of file spectator.c.
int CoEmptySpectator | ( | UBYTE * | inp | ) |
Definition at line 289 of file spectator.c.
int CoCopySpectator | ( | UBYTE * | inp | ) |
Definition at line 455 of file spectator.c.
int PutInSpectator | ( | WORD * | term, |
WORD | specnum | ||
) |
Definition at line 341 of file spectator.c.
void ClearSpectators | ( | WORD | par | ) |
Definition at line 671 of file spectator.c.
WORD GetFromSpectator | ( | WORD * | term, |
WORD | specnum | ||
) |
Definition at line 597 of file spectator.c.
void FlushSpectators | ( | VOID | ) |
Definition at line 398 of file spectator.c.
int ReadFromScratch | ( | FILEHANDLE * | fi, |
POSITION * | pos, | ||
UBYTE * | buffer, | ||
POSITION * | length | ||
) |
int AddToScratch | ( | FILEHANDLE * | fi, |
POSITION * | pos, | ||
UBYTE * | buffer, | ||
POSITION * | length, | ||
int | withflush | ||
) |
int DoPreAppendPath | ( | UBYTE * | s | ) |
int DoPrePrependPath | ( | UBYTE * | s | ) |
SWITCHTABLE * FindCase | ( | WORD | nswitch, |
WORD | ncase | ||
) |
VOID SwitchSplitMergeRec | ( | SWITCHTABLE * | array, |
WORD | num, | ||
SWITCHTABLE * | auxarray | ||
) |
VOID SwitchSplitMerge | ( | SWITCHTABLE * | array, |
WORD | num | ||
) |