40 #define MaX(x,y) ((x) > (y) ? (x): (y)) 41 #define MiN(x,y) ((x) < (y) ? (x): (y)) 42 #define ABS(x) ( (x) < 0 ? -(x): (x) ) 43 #define SGN(x) ( (x) > 0 ? 1 : (x) < 0 ? -1 : 0 ) 44 #define REDLENG(x) ((((x)<0)?((x)+1):((x)-1))/2) 45 #define INCLENG(x) (((x)<0)?(((x)*2)-1):(((x)*2)+1)) 46 #define GETCOEF(x,y) x += *x;y = x[-1];x -= ABS(y);y=REDLENG(y) 47 #define GETSTOP(x,y) y=x+(*x)-1;y -= ABS(*y)-1 48 #define StuffAdd(x,y) (((x)<0?-1:1)*(y)+((y)<0?-1:1)*(x)) 50 #define EXCHN(t1,t2,n) { WORD a,i; for(i=0;i<n;i++){a=t1[i];t1[i]=t2[i];t2[i]=a;} } 51 #define EXCH(x,y) { WORD a = (x); (x) = (y); (y) = a; } 53 #define TOKENTOLINE(x,y) if ( AC.OutputSpaces == NOSPACEFORMAT ) { \ 54 TokenToLine((UBYTE *)(y)); } else { TokenToLine((UBYTE *)(x)); } 56 #define UngetFromStream(stream,c) ((stream)->nextchar[(stream)->isnextchar++]=c) 58 #define AddLineFeed(s,n) { (s)[(n)++] = CARRIAGERETURN; (s)[(n)++] = LINEFEED; } 60 #define AddLineFeed(s,n) { (s)[(n)++] = LINEFEED; } 62 #define TryRecover(x) Terminate(-1) 63 #define UngetChar(c) { pushbackchar = c; } 64 #define ParseNumber(x,s) {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';} 65 #define ParseSign(sgn,s) {(sgn)=0;while(*(s)=='-'||*(s)=='+'){\ 66 if ( *(s)++ == '-' ) sgn ^= 1;}} 67 #define ParseSignedNumber(x,s) { int sgn; ParseSign(sgn,s)\ 68 ParseNumber(x,s) if ( sgn ) x = -x; } 70 #define NCOPY(s,t,n) while ( --n >= 0 ) *s++ = *t++; 73 #define NCOPYI(s,t,n) while ( --n >= 0 ) *s++ = *t++; 74 #define NCOPYB(s,t,n) while ( --n >= 0 ) *s++ = *t++; 75 #define NCOPYI32(s,t,n) while ( --n >= 0 ) *s++ = *t++; 76 #define WCOPY(s,t,n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( --nn >= 0 ) *ss++=*tt++; } 77 #define NeedNumber(x,s,err) { int sgn = 1; \ 78 while ( *s == ' ' || *s == '\t' || *s == '-' || *s == '+' ) { \ 79 if ( *s == '-' ) sgn = -sgn; s++; } \ 80 if ( chartype[*s] != 1 ) goto err; \ 82 if ( sgn < 0 ) (x) = -(x); while ( *s == ' ' || *s == '\t' ) s++;\ 84 #define SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; } 85 #define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED) 87 #define SKIPBRA1(s) { int lev1=0; s++; while(*s) { if(*s=='[')lev1++; \ 88 else if(*s==']'&&--lev1<0)break; s++;} } 89 #define SKIPBRA2(s) { int lev2=0; s++; while(*s) { if(*s=='{')lev2++; \ 90 else if(*s=='}'&&--lev2<0)break; \ 91 else if(*s=='[')SKIPBRA1(s) s++;} } 92 #define SKIPBRA3(s) { int lev3=0; s++; while(*s) { if(*s=='(')lev3++; \ 93 else if(*s==')'&&--lev3<0)break; \ 94 else if(*s=='{')SKIPBRA2(s) \ 95 else if(*s=='[')SKIPBRA1(s) s++;} } 96 #define SKIPBRA4(s) { int lev4=0; s++; while(*s) { if(*s=='(')lev4++; \ 97 else if(*s==')'&&--lev4<0)break; \ 98 else if(*s=='[')SKIPBRA1(s) s++;} } 99 #define SKIPBRA5(s) { int lev5=0; s++; while(*s) { if(*s=='{')lev5++; \ 100 else if(*s=='}'&&--lev5<0)break; \ 101 else if(*s=='(')SKIPBRA4(s) \ 102 else if(*s=='[')SKIPBRA1(s) s++;} } 107 #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;} 109 #define AddToCB(c,wx) if(c->Pointer>=c->Top) \ 110 DoubleCbuffer(c-cbuf,c->Pointer,21); \ 111 *(c->Pointer)++ = wx; 113 #define EXCHINOUT { FILEHANDLE *ffFi = AR.outfile; \ 114 AR.outfile = AR.infile; AR.infile = ffFi; } 115 #define BACKINOUT { FILEHANDLE *ffFi = AR.outfile; POSITION posi; \ 116 AR.outfile = AR.infile; AR.infile = ffFi; \ 117 SetEndScratch(AR.infile,&posi); } 119 #define CopyArg(to,from) { if ( *from > 0 ) { int ica = *from; NCOPY(to,from,ica) } \ 120 else if ( *from <= -FUNCTION ) *to++ = *from++; \ 121 else { *to++ = *from++; *to++ = *from++; } } 124 #define FILLARG(w) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = 0; } 125 #define COPYARG(w,t) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = *t++; } 126 #define ZEROARG(w) { int i; for ( i = 2; i < ARGHEAD; i++ ) w[i] = 0; } 134 #define FILLFUN(w) { *w++ = 0; FILLFUN3(w) } 135 #define COPYFUN(w,t) { *w++ = *t++; COPYFUN3(w,t) } 142 #define FILLFUN3(w) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = 0; } 143 #define COPYFUN3(w,t) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = *t++; } 145 #define COPYFUN3(w,t) 150 #define FILLSUB(w) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = 0; } 151 #define COPYSUB(w,ww) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = *ww++; } 154 #define COPYSUB(w,ww) 158 #define FILLEXPR(w) { int ie = EXPRHEAD-4; while ( --ie >= 0 ) *w++ = 0; } 163 #define NEXTARG(x) if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2; 164 #define COPY1ARG(s1,t1) { int ica; if ( (ica=*t1) > 0 ) { NCOPY(s1,t1,ica) } \ 165 else if(*t1<=-FUNCTION){*s1++=*t1++;} else{*s1++=*t1++;*s1++=*t1++;} } 174 #define ZeroFillRange(w,begin,end) do { \ 176 for ( tmp_i = begin; tmp_i < end; tmp_i++ ) { (w)[tmp_i] = 0; } \ 179 #define TABLESIZE(a,b) (((WORD)sizeof(a))/((WORD)sizeof(b))) 180 #define WORDDIF(x,y) (WORD)(x-y) 181 #define wsizeof(a) ((WORD)sizeof(a)) 182 #define VARNAME(type,num) (AC.varnames->namebuffer+type[num].name) 183 #define DOLLARNAME(type,num) (AC.dollarnames->namebuffer+type[num].name) 184 #define EXPRNAME(num) (AC.exprnames->namebuffer+Expressions[num].name) 186 #define PREV(x) prevorder?prevorder:x 188 #define SETERROR(x) { Terminate(-1); return(-1); } 191 #define DUMMYUSE(x) (void)(x); 193 #ifdef _FILE_OFFSET_BITS 194 #if _FILE_OFFSET_BITS==64 197 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(off_t)(x)) 198 #define SETBASELENGTH(ss,x) (ss).p1 = (off_t)(x) 199 #define SETBASEPOSITION(pp,x) (pp).p1 = (off_t)(x) 200 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(off_t)(x)) ) 201 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(off_t)(x)) ) 202 #define DIVPOS(pp,n) ( (pp).p1/(off_t)(n) ) 203 #define MULPOS(pp,n) (pp).p1 *= (off_t)(n) 207 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(x)) 208 #define SETBASELENGTH(ss,x) (ss).p1 = (x) 209 #define SETBASEPOSITION(pp,x) (pp).p1 = (x) 210 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) 211 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) 212 #define DIVPOS(pp,n) ( (pp).p1/(n) ) 213 #define MULPOS(pp,n) (pp).p1 *= (n) 217 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(LONG)(x)) 218 #define SETBASELENGTH(ss,x) (ss).p1 = (LONG)(x) 219 #define SETBASEPOSITION(pp,x) (pp).p1 = (LONG)(x) 220 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) 221 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) 222 #define DIVPOS(pp,n) ( (pp).p1/(LONG)(n) ) 223 #define MULPOS(pp,n) (pp).p1 *= (LONG)(n) 226 #define DIFPOS(ss,pp1,pp2) (ss).p1 = ((pp1).p1-(pp2).p1) 227 #define DIFBASE(pp1,pp2) ((pp1).p1-(pp2).p1) 228 #define ADD2POS(pp1,pp2) (pp1).p1 += (pp2).p1 229 #define PUTZERO(pp) (pp).p1 = 0 230 #define BASEPOSITION(pp) ((pp).p1) 231 #define SETSTARTPOS(pp) (pp).p1 = -2 232 #define NOTSTARTPOS(pp) ( (pp).p1 > -2 ) 233 #define ISMINPOS(pp) ( (pp).p1 == -1 ) 234 #define ISEQUALPOS(pp1,pp2) ( (pp1).p1 == (pp2).p1 ) 235 #define ISNOTEQUALPOS(pp1,pp2) ( (pp1).p1 != (pp2).p1 ) 236 #define ISLESSPOS(pp1,pp2) ( (pp1).p1 < (pp2).p1 ) 237 #define ISGEPOS(pp1,pp2) ( (pp1).p1 >= (pp2).p1 ) 238 #define ISNOTZEROPOS(pp) ( (pp).p1 != 0 ) 239 #define ISZEROPOS(pp) ( (pp).p1 == 0 ) 240 #define ISPOSPOS(pp) ( (pp).p1 > 0 ) 241 #define ISNEGPOS(pp) ( (pp).p1 < 0 ) 242 extern VOID TELLFILE(
int,
POSITION *);
244 #define TOLONG(x) ((LONG)(x)) 246 #define Add2Com(x) { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); } 247 #define Add3Com(x1,x2) { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); } 248 #define Add4Com(x1,x2,x3) { WORD cod[4]; cod[0] = x1; cod[1] = 4; \ 249 cod[2] = x2; cod[3] = x3; AddNtoL(4,cod); } 250 #define Add5Com(x1,x2,x3,x4) { WORD cod[5]; cod[0] = x1; cod[1] = 5; \ 251 cod[2] = x2; cod[3] = x3; cod[4] = x4; AddNtoL(5,cod); } 256 #define WantAddPointers(x) while((AT.pWorkPointer+(x))>AR.pWorkSize){WORD ***ppp=&AT.pWorkSpace;\ 257 ExpandBuffer((void **)ppp,&AR.pWorkSize,(int)(sizeof(WORD *)));} 258 #define WantAddLongs(x) while((AT.lWorkPointer+(x))>AR.lWorkSize){LONG **ppp=&AT.lWorkSpace;\ 259 ExpandBuffer((void **)ppp,&AR.lWorkSize,sizeof(LONG));} 260 #define WantAddPositions(x) while((AT.posWorkPointer+(x))>AR.posWorkSize){POSITION **ppp=&AT.posWorkSpace;\ 261 ExpandBuffer((void **)ppp,&AR.posWorkSize,sizeof(POSITION));} 264 #define FORM_INLINE inline 276 #define TermMalloc(x) ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] ) 277 #define NumberMalloc(x) ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] ) 278 #define CacheNumberMalloc(x) ( (AT.CacheNumberMemTop <= 0 ) ? CacheNumberMallocAddMemory(BHEAD0), AT.CacheNumberMemHeap[--AT.CacheNumberMemTop]: AT.CacheNumberMemHeap[--AT.CacheNumberMemTop] ) 279 #define TermFree(TermMem,x) AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem) 280 #define NumberFree(NumberMem,x) AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem) 281 #define CacheNumberFree(NumberMem,x) AT.CacheNumberMemHeap[AT.CacheNumberMemTop++] = (UWORD *)(NumberMem) 285 #define TermMalloc(x) TermMalloc2(BHEAD (char *)(x)) 286 #define NumberMalloc(x) NumberMalloc2(BHEAD (char *)(x)) 287 #define CacheNumberMalloc(x) CacheNumberMalloc2(BHEAD (char *)(x)) 288 #define TermFree(x,y) TermFree2(BHEAD (WORD *)(x),(char *)(y)) 289 #define NumberFree(x,y) NumberFree2(BHEAD (UWORD *)(x),(char *)(y)) 290 #define CacheNumberFree(x,y) CacheNumberFree2(BHEAD (UWORD *)(x),(char *)(y)) 309 #define NestingChecksum() (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel +AC.SwitchLevel) 310 #define MesNesting() MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do") 312 #define MarkPolyRatFunDirty(T) {if(*T&&AR.PolyFunType==2){WORD *TP,*TT;TT=T+*T;TT-=ABS(TT[-1]);\ 313 TP=T+1;while(TP<TT){if(*TP==AR.PolyFun){TP[2]|=(DIRTYFLAG|MUSTCLEANPRF);}TP+=TP[1];}}} 319 #define PUSHPREASSIGNLEVEL AP.PreAssignLevel++; { GETIDENTITY \ 320 if ( AP.PreAssignLevel >= AP.MaxPreAssignLevel ) { int i; \ 321 LONG *ap = (LONG *)Malloc1(2*AP.MaxPreAssignLevel*sizeof(LONG *),"PreAssignStack"); \ 322 for ( i = 0; i < AP.MaxPreAssignLevel; i++ ) ap[i] = AP.PreAssignStack[i]; \ 323 M_free(AP.PreAssignStack,"PreAssignStack"); \ 324 AP.MaxPreAssignLevel *= 2; AP.PreAssignStack = ap; \ 326 *AT.WorkPointer++ = AP.PreContinuation; AP.PreContinuation = 0; \ 327 AP.PreAssignStack[AP.PreAssignLevel] = AC.iPointer - AC.iBuffer; } 329 #define POPPREASSIGNLEVEL if ( AP.PreAssignLevel > 0 ) { GETIDENTITY \ 330 AC.iPointer = AC.iBuffer + AP.PreAssignStack[AP.PreAssignLevel--]; \ 331 AP.PreContinuation = *--AT.WorkPointer; \ 356 static inline unsigned int IntAbs(
int x)
358 if ( x >= 0 )
return x;
359 return(-((
unsigned int)x));
362 static inline UWORD WordAbs(WORD x)
364 if ( x >= 0 )
return x;
368 static inline ULONG LongAbs(LONG x)
370 if ( x >= 0 )
return x;
382 static inline int UnsignedToInt(
unsigned int x)
384 extern void Terminate(
int);
385 if ( x <= INT_MAX )
return(x);
386 if ( x >= (
unsigned int)INT_MIN )
return((
int)(x - INT_MIN) + INT_MIN);
391 static inline WORD UWordToWord(UWORD x)
393 extern void Terminate(
int);
394 if ( x <= WORD_MAX_VALUE )
return(x);
395 if ( x >= (UWORD)WORD_MIN_VALUE )
return((WORD)(x - WORD_MIN_VALUE) + WORD_MIN_VALUE);
400 static inline LONG ULongToLong(ULONG x)
402 extern void Terminate(
int);
403 if ( x <= LONG_MAX_VALUE )
return(x);
404 if ( x >= (ULONG)LONG_MIN_VALUE )
return((LONG)(x - LONG_MIN_VALUE) + LONG_MIN_VALUE);
422 #define EXTERNLOCK(x) extern pthread_mutex_t x; 423 #define INILOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER; 424 #define EXTERNRWLOCK(x) extern pthread_rwlock_t x; 425 #define INIRWLOCK(x) pthread_rwlock_t x = PTHREAD_RWLOCK_INITIALIZER; 426 #ifdef DEBUGGINGLOCKS 427 #include <asm/errno.h> 428 #define LOCK(x) while ( pthread_mutex_trylock(&(x)) == EBUSY ) {} 429 #define RWLOCKR(x) while ( pthread_rwlock_tryrdlock(&(x)) == EBUSY ) {} 430 #define RWLOCKW(x) while ( pthread_rwlock_trywrlock(&(x)) == EBUSY ) {} 432 #define LOCK(x) pthread_mutex_lock(&(x)) 433 #define RWLOCKR(x) pthread_rwlock_rdlock(&(x)) 434 #define RWLOCKW(x) pthread_rwlock_wrlock(&(x)) 436 #define UNLOCK(x) pthread_mutex_unlock(&(x)) 437 #define UNRWLOCK(x) pthread_rwlock_unlock(&(x)) 438 #define MLOCK(x) LOCK(x) 439 #define MUNLOCK(x) UNLOCK(x) 442 #define GETIDENTITY int identity = WhoAmI(); ALLPRIVATES *B = AB[identity]; 445 #define EXTERNLOCK(x) 449 #define EXTERNRWLOCK(x) 455 #define MLOCK(x) do { if ( PF.me != MASTER ) PF_MLock(); } while (0) 456 #define MUNLOCK(x) do { if ( PF.me != MASTER ) PF_MUnlock(); } while (0) 471 #ifdef TERMMALLOCDEBUG 472 extern WORD **DebugHeap1, **DebugHeap2;
480 extern VOID setSignalHandlers(VOID);
481 extern UBYTE *CodeToLine(WORD,UBYTE *);
482 extern UBYTE *AddArrayIndex(WORD ,UBYTE *);
485 extern WORD *
PasteTerm(PHEAD WORD,WORD *,WORD *,WORD,WORD);
486 extern UBYTE *StrCopy(UBYTE *,UBYTE *);
487 extern UBYTE *WrtPower(UBYTE *,WORD);
488 extern WORD AccumGCD(PHEAD UWORD *,WORD *,UWORD *,WORD);
489 extern VOID
AddArgs(PHEAD WORD *,WORD *,WORD *);
490 extern WORD
AddCoef(PHEAD WORD **,WORD **);
491 extern WORD AddLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
492 extern WORD AddPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
493 extern WORD
AddPoly(PHEAD WORD **,WORD **);
494 extern WORD AddRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
495 extern VOID AddToLine(UBYTE *);
496 extern WORD AddWild(PHEAD WORD,WORD,WORD);
497 extern WORD BigLong(UWORD *,WORD,UWORD *,WORD);
498 extern WORD BinomGen(PHEAD WORD *,WORD,WORD **,WORD,WORD,WORD,WORD,WORD,UWORD *,WORD);
499 extern WORD CheckWild(PHEAD WORD,WORD,WORD,WORD *);
500 extern WORD Chisholm(PHEAD WORD *,WORD);
501 extern WORD CleanExpr(WORD);
502 extern VOID CleanUp(WORD);
503 extern VOID ClearWild(PHEAD0);
504 extern WORD CompareFunctions(WORD *,WORD *);
505 extern WORD Commute(WORD *,WORD *);
506 extern WORD DetCommu(WORD *);
507 extern WORD DoesCommu(WORD *);
508 extern int CompArg(WORD *,WORD *);
509 extern WORD
CompCoef(WORD *, WORD *);
510 extern WORD CompGroup(PHEAD WORD,WORD **,WORD *,WORD *,WORD);
511 extern WORD
Compare1(WORD *,WORD *,WORD);
512 extern WORD CountDo(WORD *,WORD *);
513 extern WORD CountFun(WORD *,WORD *);
514 extern WORD DimensionSubterm(WORD *);
515 extern WORD DimensionTerm(WORD *);
516 extern WORD DimensionExpression(PHEAD WORD *);
517 extern WORD
Deferred(PHEAD WORD *,WORD);
518 extern WORD DeleteStore(WORD);
519 extern WORD DetCurDum(PHEAD WORD *);
520 extern VOID DetVars(WORD *,WORD);
522 extern WORD DivLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *,UWORD *,WORD *);
523 extern WORD DivRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
524 extern WORD Divvy(PHEAD UWORD *,WORD *,UWORD *,WORD);
525 extern WORD DoDelta(WORD *);
526 extern WORD DoDelta3(PHEAD WORD *,WORD);
527 extern WORD TestPartitions(WORD *,
PARTI *);
528 extern WORD DoPartitions(PHEAD WORD *,WORD);
529 extern int CoCanonicalize(UBYTE *);
530 extern int DoCanonicalize(PHEAD WORD *, WORD *);
531 extern WORD GenTopologies(PHEAD WORD *,WORD);
532 extern WORD GenDiagrams(PHEAD WORD *,WORD);
533 extern int DoTopologyCanonicalize(PHEAD WORD *,WORD,WORD,WORD *);
534 extern int DoShattering(PHEAD WORD *,WORD *,WORD *,WORD);
535 extern WORD GenerateTopologies(PHEAD WORD,WORD,WORD,WORD);
536 extern WORD DoTableExpansion(WORD *,WORD);
537 extern WORD DoDistrib(PHEAD WORD *,WORD);
538 extern WORD DoShuffle(WORD *,WORD,WORD,WORD);
539 extern WORD DoPermutations(PHEAD WORD *,WORD);
540 extern int Shuffle(WORD *, WORD *, WORD *);
541 extern int FinishShuffle(WORD *);
542 extern WORD DoStuffle(WORD *,WORD,WORD,WORD);
543 extern int Stuffle(WORD *, WORD *, WORD *);
544 extern int FinishStuffle(WORD *);
545 extern WORD *StuffRootAdd(WORD *, WORD *, WORD *);
546 extern WORD TestUse(WORD *,WORD);
547 extern DBASE *FindTB(UBYTE *);
548 extern int CheckTableDeclarations(
DBASE *);
549 extern WORD Apply(WORD *,WORD);
550 extern int ApplyExec(WORD *,
int,WORD);
551 extern WORD ApplyReset(WORD);
552 extern WORD TableReset(VOID);
553 extern VOID ReWorkT(WORD *,WORD *,WORD);
554 extern WORD GetIfDollarNum(WORD *, WORD *);
555 extern int FindVar(WORD *,WORD *);
556 extern WORD DoIfStatement(PHEAD WORD *,WORD *);
557 extern WORD
DoOnePow(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD,WORD *);
558 extern void DoRevert(WORD *,WORD *);
559 extern WORD DoSumF1(PHEAD WORD *,WORD *,WORD,WORD);
560 extern WORD DoSumF2(PHEAD WORD *,WORD *,WORD,WORD);
561 extern WORD DoTheta(PHEAD WORD *);
562 extern LONG
EndSort(PHEAD WORD *,
int);
563 extern WORD EntVar(WORD,UBYTE *,WORD,WORD,WORD,WORD);
564 extern WORD EpfCon(PHEAD WORD *,WORD *,WORD,WORD);
565 extern WORD EpfFind(PHEAD WORD *,WORD *);
566 extern WORD EpfGen(WORD,WORD *,WORD *,WORD *,WORD);
567 extern WORD EqualArg(WORD *,WORD,WORD);
568 extern WORD Evaluate(UBYTE **);
569 extern int Factorial(PHEAD WORD,UWORD *,WORD *);
570 extern int Bernoulli(WORD,UWORD *,WORD *);
571 extern int FactorIn(PHEAD WORD *,WORD);
572 extern int FactorInExpr(PHEAD WORD *,WORD);
573 extern WORD FindAll(PHEAD WORD *,WORD *,WORD,WORD *);
574 extern WORD FindMulti(PHEAD WORD *,WORD *);
575 extern WORD FindOnce(PHEAD WORD *,WORD *);
576 extern WORD FindOnly(PHEAD WORD *,WORD *);
577 extern WORD FindRest(PHEAD WORD *,WORD *);
578 extern WORD FindSpecial(WORD *);
579 extern WORD FindrNumber(WORD,
VARRENUM *);
580 extern VOID FiniLine(VOID);
581 extern WORD
FiniTerm(PHEAD WORD *,WORD *,WORD *,WORD,WORD);
583 extern VOID FunLevel(PHEAD WORD *);
584 extern VOID AdjustRenumScratch(PHEAD0);
586 extern WORD GcdLong(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
587 extern WORD LcmLong(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
588 extern VOID GCD(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
589 extern ULONG GCD2(ULONG,ULONG);
590 extern WORD
Generator(PHEAD WORD *,WORD);
591 extern WORD GetBinom(UWORD *,WORD *,WORD,WORD);
593 extern WORD GetLong(UBYTE *,UWORD *,WORD *);
594 extern WORD GetMoreTerms(WORD *);
595 extern WORD GetMoreFromMem(WORD *,WORD **);
598 extern WORD GetTerm(PHEAD WORD *);
599 extern WORD Glue(PHEAD WORD *,WORD *,WORD *,WORD);
601 extern VOID IniLine(WORD);
602 extern WORD IniVars(VOID);
603 extern VOID Initialize(VOID);
604 extern WORD
InsertTerm(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD);
605 extern VOID LongToLine(UWORD *,WORD);
606 extern WORD MakeDirty(WORD *,WORD *,WORD);
607 extern VOID MarkDirty(WORD *,WORD);
608 extern VOID PolyFunDirty(PHEAD WORD *);
609 extern VOID PolyFunClean(PHEAD WORD *);
610 extern WORD MakeModTable(VOID);
611 extern WORD MatchE(PHEAD WORD *,WORD *,WORD *,WORD);
612 extern int MatchCy(PHEAD WORD *,WORD *,WORD *,WORD);
613 extern int FunMatchCy(PHEAD WORD *,WORD *,WORD *,WORD);
614 extern int FunMatchSy(PHEAD WORD *,WORD *,WORD *,WORD);
615 extern int MatchArgument(PHEAD WORD *,WORD *);
616 extern WORD MatchFunction(PHEAD WORD *,WORD *,WORD *);
618 extern WORD MesCerr(
char *, UBYTE *);
619 extern WORD MesComp(
char *, UBYTE *, UBYTE *);
620 extern WORD Modulus(WORD *);
621 extern VOID MoveDummies(PHEAD WORD *,WORD);
622 extern WORD MulLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
623 extern WORD MulRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
624 extern WORD Mully(PHEAD UWORD *,WORD *,UWORD *,WORD);
625 extern WORD MultDo(PHEAD WORD *,WORD *);
627 extern WORD ExtraSymbol(WORD,WORD,WORD,WORD *,WORD *);
628 extern WORD Normalize(PHEAD WORD *);
629 extern WORD BracketNormalize(PHEAD WORD *);
630 extern VOID DropCoefficient(PHEAD WORD *);
631 extern VOID DropSymbols(PHEAD WORD *);
632 extern int PutInside(PHEAD WORD *, WORD *);
633 extern WORD OpenTemp(VOID);
634 extern VOID Pack(UWORD *,WORD *,UWORD *,WORD );
636 extern WORD Permute(
PERM *,WORD);
637 extern WORD PermuteP(
PERMP *,WORD);
639 extern WORD PopVariables(VOID);
640 extern WORD
PrepPoly(PHEAD WORD *,WORD);
642 extern WORD Product(UWORD *,WORD *,WORD);
643 extern VOID PrtLong(UWORD *,WORD,UBYTE *);
644 extern VOID PrtTerms(VOID);
645 extern VOID PrintRunningTime(VOID);
646 extern LONG GetRunningTime(VOID);
647 extern WORD PutBracket(PHEAD WORD *);
651 extern UWORD Quotient(UWORD *,WORD *,WORD);
652 extern WORD RaisPow(PHEAD UWORD *,WORD *,UWORD);
653 extern VOID
RaisPowCached (PHEAD WORD, WORD, UWORD **, WORD *);
654 extern WORD RaisPowMod (WORD, WORD, WORD);
658 extern int GetLongModInverses(PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *);
659 extern VOID RatToLine(UWORD *,WORD);
660 extern WORD RatioFind(PHEAD WORD *,WORD *);
661 extern WORD RatioGen(PHEAD WORD *,WORD *,WORD,WORD);
662 extern WORD ReNumber(PHEAD WORD *);
663 extern WORD ReadSnum(UBYTE **);
664 extern WORD Remain10(UWORD *,WORD *);
665 extern WORD Remain4(UWORD *,WORD *);
666 extern WORD ResetScratch(VOID);
667 extern WORD ResolveSet(PHEAD WORD *,WORD *,WORD *);
668 extern WORD RevertScratch(VOID);
669 extern WORD ScanFunctions(PHEAD WORD *,WORD *,WORD);
675 extern WORD Simplify(PHEAD UWORD *,WORD *,UWORD *,WORD *);
677 extern FILE *LocateBase(
char **,
char **);
680 extern VOID SubPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
681 extern VOID Substitute(PHEAD WORD *,WORD *,WORD);
682 extern WORD SymFind(PHEAD WORD *,WORD *);
683 extern WORD SymGen(PHEAD WORD *,WORD *,WORD,WORD);
684 extern WORD Symmetrize(PHEAD WORD *,WORD *,WORD,WORD,WORD);
685 extern int FullSymmetrize(PHEAD WORD *,
int);
686 extern WORD TakeModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
687 extern WORD TakeNormalModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
688 extern VOID TalToLine(UWORD);
689 extern WORD TenVec(PHEAD WORD *,WORD *,WORD,WORD);
690 extern WORD TenVecFind(PHEAD WORD *,WORD *);
692 extern VOID TestDrop(VOID);
693 extern VOID PutInVflags(WORD);
694 extern WORD
TestMatch(PHEAD WORD *,WORD *);
695 extern WORD
TestSub(PHEAD WORD *,WORD);
697 extern LONG TimeChildren(WORD);
699 extern LONG Timer(
int);
700 extern int GetTimerInfo(LONG **,LONG **);
701 extern void WriteTimerInfo(LONG *,LONG *);
702 extern LONG GetWorkerTimes(VOID);
704 extern VOID TokenToLine(UBYTE *);
705 extern WORD Trace4(PHEAD WORD *,WORD *,WORD,WORD);
706 extern WORD Trace4Gen(PHEAD
TRACES *,WORD);
707 extern WORD Trace4no(WORD,WORD *,
TRACES *);
708 extern WORD TraceFind(PHEAD WORD *,WORD *);
709 extern WORD TraceN(PHEAD WORD *,WORD *,WORD,WORD);
710 extern WORD TraceNgen(PHEAD
TRACES *,WORD);
711 extern WORD TraceNno(WORD,WORD *,
TRACES *);
712 extern WORD Traces(PHEAD WORD *,WORD *,WORD,WORD);
713 extern WORD Trick(WORD *,
TRACES *);
714 extern WORD TryDo(PHEAD WORD *,WORD *,WORD);
715 extern VOID UnPack(UWORD *,WORD,WORD *,WORD *);
716 extern WORD VarStore(UBYTE *,WORD,WORD,WORD);
717 extern WORD WildFill(PHEAD WORD *,WORD *,WORD *);
718 extern WORD WriteAll(VOID);
719 extern WORD WriteOne(UBYTE *,
int,
int,WORD);
720 extern VOID WriteArgument(WORD *);
721 extern WORD WriteExpression(WORD *,LONG);
722 extern WORD WriteInnerTerm(WORD *,WORD);
723 extern VOID WriteLists(VOID);
724 extern VOID WriteSetup(VOID);
726 extern WORD WriteSubTerm(WORD *,WORD);
727 extern WORD WriteTerm(WORD *,WORD *,WORD,WORD,WORD);
728 extern WORD execarg(PHEAD WORD *,WORD);
729 extern WORD execterm(PHEAD WORD *,WORD);
730 extern VOID SpecialCleanup(PHEAD0);
731 extern void SetMods();
732 extern void UnSetMods();
736 extern WORD DoExecute(WORD,WORD);
738 extern VOID Warning(
char *);
739 extern VOID HighWarning(
char *);
740 extern int SpareTable(
TABLES);
742 extern UBYTE *strDup1(UBYTE *,
char *);
743 extern VOID *Malloc(LONG);
744 extern VOID *Malloc1(LONG,
const char *);
745 extern int DoTail(
int,UBYTE **);
746 extern int OpenInput(VOID);
747 extern int PutPreVar(UBYTE *,UBYTE *,UBYTE *,
int);
748 extern VOID Error0(
char *);
749 extern VOID Error1(
char *,UBYTE *);
750 extern VOID Error2(
char *,
char *,UBYTE *);
751 extern UBYTE ReadFromStream(
STREAM *);
752 extern UBYTE GetFromStream(
STREAM *);
753 extern UBYTE LookInStream(
STREAM *);
754 extern STREAM *OpenStream(UBYTE *,
int,
int,
int);
755 extern int LocateFile(UBYTE **,
int);
757 extern VOID PositionStream(
STREAM *,LONG);
758 extern int ReverseStatements(
STREAM *);
759 extern int ProcessOption(UBYTE *,UBYTE *,
int);
760 extern int DoSetups(VOID);
761 extern VOID Terminate(
int);
763 extern int AddName(
NAMETREE *,UBYTE *,WORD,WORD,
int *);
764 extern int GetName(
NAMETREE *,UBYTE *,WORD *,
int);
765 extern UBYTE *GetFunction(UBYTE *,WORD *);
766 extern UBYTE *GetNumber(UBYTE *,WORD *);
767 extern int GetLastExprName(UBYTE *,WORD *);
768 extern int GetAutoName(UBYTE *,WORD *);
769 extern int GetVar(UBYTE *,WORD *,WORD *,
int,
int);
770 extern int MakeDubious(
NAMETREE *,UBYTE *,WORD *);
771 extern int GetOName(
NAMETREE *,UBYTE *,WORD *,
int);
773 extern VOID DumpNode(
NAMETREE *,WORD,WORD);
774 extern VOID LinkTree(
NAMETREE *,WORD,WORD);
776 extern int CompactifyTree(
NAMETREE *,WORD);
777 extern NAMETREE *MakeNameTree(VOID);
778 extern VOID FreeNameTree(
NAMETREE *);
779 extern int AddExpression(UBYTE *,
int,
int);
780 extern int AddSymbol(UBYTE *,
int,
int,
int,
int);
781 extern int AddDollar(UBYTE *,WORD,WORD *,LONG);
782 extern int ReplaceDollar(WORD,WORD,WORD *,LONG);
783 extern int DollarRaiseLow(UBYTE *,LONG);
784 extern int AddVector(UBYTE *,
int,
int);
785 extern int AddDubious(UBYTE *);
786 extern int AddIndex(UBYTE *,
int,
int);
787 extern UBYTE *DoDimension(UBYTE *,
int *,
int *);
788 extern int AddFunction(UBYTE *,
int,
int,
int,
int,
int,
int,
int);
789 extern int CoCommuteInSet(UBYTE *);
790 extern int CoFunction(UBYTE *,
int,
int);
791 extern int TestName(UBYTE *);
792 extern int AddSet(UBYTE *,WORD);
793 extern int DoElements(UBYTE *,
SETS,UBYTE *);
794 extern int DoTempSet(UBYTE *,UBYTE *);
795 extern int NameConflict(
int,UBYTE *);
796 extern int OpenFile(
char *);
797 extern int OpenAddFile(
char *);
798 extern int ReOpenFile(
char *);
799 extern int CreateFile(
char *);
800 extern int CreateLogFile(
char *);
801 extern VOID CloseFile(
int);
802 extern int CopyFile(
char *,
char *);
803 extern int CreateHandle(VOID);
804 extern LONG ReadFile(
int,UBYTE *,LONG);
806 extern LONG WriteFileToFile(
int,UBYTE *,LONG);
807 extern VOID SeekFile(
int,
POSITION *,
int);
808 extern LONG TellFile(
int);
809 extern void FlushFile(
int);
810 extern int GetPosFile(
int,fpos_t *);
811 extern int SetPosFile(
int,fpos_t *);
812 extern VOID SynchFile(
int);
813 extern VOID TruncateFile(
int);
814 extern int GetChannel(
char *,
int);
815 extern int GetAppendChannel(
char *);
816 extern int CloseChannel(
char *);
817 extern VOID inictable(VOID);
818 extern KEYWORD *findcommand(UBYTE *);
820 extern VOID StartFiles(VOID);
821 extern UBYTE *MakeDate(VOID);
822 extern VOID PreProcessor(VOID);
823 extern VOID *FromList(
LIST *);
824 extern VOID *From0List(
LIST *);
825 extern VOID *FromVarList(
LIST *);
826 extern int DoubleList(VOID ***,
int *,
int,
char *);
827 extern int DoubleLList(VOID ***,LONG *,
int,
char *);
828 extern void DoubleBuffer(
void **,
void **,
int,
char *);
829 extern void ExpandBuffer(
void **,LONG *,
int);
830 extern LONG iexp(LONG,
int);
831 extern int IsLikeVector(WORD *);
832 extern int AreArgsEqual(WORD *,WORD *);
833 extern int CompareArgs(WORD *,WORD *);
834 extern UBYTE *SkipField(UBYTE *,
int);
835 extern int StrCmp(UBYTE *,UBYTE *);
836 extern int StrICmp(UBYTE *,UBYTE *);
837 extern int StrHICmp(UBYTE *,UBYTE *);
838 extern int StrICont(UBYTE *,UBYTE *);
839 extern int CmpArray(WORD *,WORD *,WORD);
840 extern int ConWord(UBYTE *,UBYTE *);
841 extern int StrLen(UBYTE *);
842 extern UBYTE *GetPreVar(UBYTE *,
int);
843 extern void ToGeneral(WORD *,WORD *,WORD);
844 extern WORD ToPolyFunGeneral(PHEAD WORD *);
845 extern int ToFast(WORD *,WORD *);
847 extern int RecalcSetups(VOID);
848 extern int AllocSetups(VOID);
849 extern SORTING *AllocSort(LONG,LONG,LONG,LONG,
int,
int,LONG);
850 extern VOID AllocSortFileName(
SORTING *);
851 extern UBYTE *LoadInputFile(UBYTE *,
int);
852 extern UBYTE GetInput(VOID);
853 extern VOID ClearPushback(VOID);
854 extern UBYTE GetChar(
int);
855 extern VOID CharOut(UBYTE);
856 extern VOID UnsetAllowDelay(VOID);
857 extern VOID PopPreVars(
int);
858 extern VOID IniModule(
int);
859 extern VOID IniSpecialModule(
int);
860 extern int ModuleInstruction(
int *,
int *);
861 extern int PreProInstruction(VOID);
862 extern int LoadInstruction(
int);
863 extern int LoadStatement(
int);
866 extern int DoDefine(UBYTE *);
867 extern int DoRedefine(UBYTE *);
869 extern int TheUndefine(UBYTE *);
870 extern int ClearMacro(UBYTE *);
871 extern int DoUndefine(UBYTE *);
872 extern int DoInclude(UBYTE *);
873 extern int DoReverseInclude(UBYTE *);
874 extern int Include(UBYTE *,
int);
876 extern int DoExternal(UBYTE *);
877 extern int DoToExternal(UBYTE *);
878 extern int DoFromExternal(UBYTE *);
879 extern int DoPrompt(UBYTE *);
880 extern int DoSetExternal(UBYTE *);
882 extern int DoSetExternalAttr(UBYTE *);
884 extern int DoRmExternal(UBYTE *);
886 extern int DoFactDollar(UBYTE *);
887 extern WORD GetDollarNumber(UBYTE **,
DOLLARS);
888 extern int DoSetRandom(UBYTE *);
889 extern int DoOptimize(UBYTE *);
890 extern int DoClearOptimize(UBYTE *);
891 extern int DoSkipExtraSymbols(UBYTE *);
892 extern int DoTimeOutAfter(UBYTE *);
893 extern int DoMessage(UBYTE *);
894 extern int DoPreOut(UBYTE *);
895 extern int DoPreAppend(UBYTE *);
896 extern int DoPreCreate(UBYTE *);
897 extern int DoPreAssign(UBYTE *);
898 extern int DoPreBreak(UBYTE *);
899 extern int DoPreDefault(UBYTE *);
900 extern int DoPreSwitch(UBYTE *);
901 extern int DoPreEndSwitch(UBYTE *);
902 extern int DoPreCase(UBYTE *);
903 extern int DoPreShow(UBYTE *);
904 extern int DoPreExchange(UBYTE *);
905 extern int DoSystem(UBYTE *);
906 extern int DoPipe(UBYTE *);
907 extern VOID StartPrepro(VOID);
908 extern int DoIfdef(UBYTE *,
int);
909 extern int DoIfydef(UBYTE *);
910 extern int DoIfndef(UBYTE *);
911 extern int DoElse(UBYTE *);
912 extern int DoElseif(UBYTE *);
913 extern int DoEndif(UBYTE *);
914 extern int DoTerminate(UBYTE *);
915 extern int DoIf(UBYTE *);
916 extern int DoCall(UBYTE *);
917 extern int DoDebug(UBYTE *);
918 extern int DoDo(UBYTE *);
919 extern int DoBreakDo(UBYTE *);
920 extern int DoEnddo(UBYTE *);
921 extern int DoEndprocedure(UBYTE *);
922 extern int DoInside(UBYTE *);
923 extern int DoEndInside(UBYTE *);
924 extern int DoProcedure(UBYTE *);
925 extern int DoPrePrintTimes(UBYTE *);
926 extern int DoPreWrite(UBYTE *);
927 extern int DoPreClose(UBYTE *);
928 extern int DoPreRemove(UBYTE *);
929 extern int DoCommentChar(UBYTE *);
930 extern int DoPrcExtension(UBYTE *);
931 extern int DoPreReset(UBYTE *);
932 extern VOID WriteString(
int,UBYTE *,
int);
933 extern VOID WriteUnfinString(
int,UBYTE *,
int);
934 extern UBYTE *AddToString(UBYTE *,UBYTE *,
int);
935 extern UBYTE *PreCalc(VOID);
936 extern UBYTE *PreEval(UBYTE *,LONG *);
937 extern VOID NumToStr(UBYTE *,LONG);
938 extern int PreCmp(
int,
int,UBYTE *,
int,
int,UBYTE *,
int);
939 extern int PreEq(
int,
int,UBYTE *,
int,
int,UBYTE *,
int);
940 extern UBYTE *pParseObject(UBYTE *,
int *,LONG *);
941 extern UBYTE *PreIfEval(UBYTE *,
int *);
942 extern int EvalPreIf(UBYTE *);
943 extern int PreLoad(
PRELOAD *,UBYTE *,UBYTE *,
int,
char *);
944 extern int PreSkip(UBYTE *,UBYTE *,
int);
945 extern UBYTE *EndOfToken(UBYTE *);
946 extern VOID SetSpecialMode(
int,
int);
947 extern VOID MakeGlobal(VOID);
948 extern int ExecModule(
int);
949 extern int ExecStore(VOID);
950 extern VOID FullCleanUp(VOID);
951 extern int DoExecStatement(VOID);
952 extern int DoPipeStatement(VOID);
953 extern int DoPolyfun(UBYTE *);
954 extern int DoPolyratfun(UBYTE *);
955 extern int CompileStatement(UBYTE *);
956 extern UBYTE *ToToken(UBYTE *);
957 extern int GetDollar(UBYTE *);
958 extern int MesWork(VOID);
959 extern int MesPrint(
const char *,...);
960 extern int MesCall(
char *);
961 extern UBYTE *NumCopy(WORD,UBYTE *);
962 extern char *LongCopy(LONG,
char *);
963 extern char *LongLongCopy(off_t *,
char *);
964 extern VOID ReserveTempFiles(
int);
965 extern VOID PrintTerm(WORD *,
char *);
966 extern VOID PrintTermC(WORD *,
char *);
967 extern VOID PrintSubTerm(WORD *,
char *);
968 extern VOID PrintWords(WORD *,LONG);
969 extern void PrintSeq(WORD *,
char *);
970 extern int ExpandTripleDots(
int);
971 extern LONG
ComPress(WORD **,LONG *);
974 #define M_alloc(x) malloc((size_t)(x)) 976 extern void M_free(VOID *,
const char *);
977 extern void ClearWildcardNames(VOID);
978 extern int AddWildcardName(UBYTE *);
979 extern int GetWildcardName(UBYTE *);
980 extern void Globalize(
int);
981 extern void ResetVariables(
int);
982 extern void AddToPreTypes(
int);
983 extern void MessPreNesting(
int);
984 extern LONG GetStreamPosition(
STREAM *);
987 extern WORD *
AddRHS(
int,
int);
988 extern int AddNtoL(
int,WORD *);
989 extern int AddNtoC(
int,
int,WORD *,
int);
990 extern VOID DoubleIfBuffers(VOID);
991 extern STREAM *CreateStream(UBYTE *);
993 extern int setonoff(UBYTE *,
int *,
int,
int);
994 extern int DoPrint(UBYTE *,
int);
995 extern int SetExpr(UBYTE *,
int,
int);
996 extern void AddToCom(
int,WORD *);
997 extern int Add2ComStrings(
int,WORD *,UBYTE *,UBYTE *);
998 extern int DoSymmetrize(UBYTE *,
int);
999 extern int DoArgument(UBYTE *,
int);
1000 extern int ArgFactorize(PHEAD WORD *,WORD *);
1002 extern WORD *
MakeInteger(PHEAD WORD *,WORD *,WORD *);
1003 extern WORD *
MakeMod(PHEAD WORD *,WORD *,WORD *);
1004 extern WORD
FindArg(PHEAD WORD *);
1005 extern WORD
InsertArg(PHEAD WORD *,WORD *,
int);
1007 extern int ArgSymbolMerge(WORD *, WORD *);
1008 extern int ArgDotproductMerge(WORD *, WORD *);
1010 extern int DoBrackets(UBYTE *,
int);
1011 extern int DoPutInside(UBYTE *,
int);
1012 extern WORD *CountComp(UBYTE *,WORD *);
1013 extern int CoAntiBracket(UBYTE *);
1014 extern int CoAntiSymmetrize(UBYTE *);
1015 extern int DoArgPlode(UBYTE *,
int);
1016 extern int CoArgExplode(UBYTE *);
1017 extern int CoArgImplode(UBYTE *);
1018 extern int CoArgument(UBYTE *);
1019 extern int CoInside(UBYTE *);
1020 extern int ExecInside(UBYTE *);
1021 extern int CoInExpression(UBYTE *);
1022 extern int CoInParallel(UBYTE *);
1023 extern int CoNotInParallel(UBYTE *);
1024 extern int DoInParallel(UBYTE *,
int);
1025 extern int CoEndInExpression(UBYTE *);
1026 extern int CoBracket(UBYTE *);
1027 extern int CoPutInside(UBYTE *);
1028 extern int CoAntiPutInside(UBYTE *);
1029 extern int CoMultiBracket(UBYTE *);
1030 extern int CoCFunction(UBYTE *);
1031 extern int CoCTensor(UBYTE *);
1032 extern int CoCollect(UBYTE *);
1033 extern int CoCompress(UBYTE *);
1034 extern int CoContract(UBYTE *);
1035 extern int CoCycleSymmetrize(UBYTE *);
1036 extern int CoDelete(UBYTE *);
1037 extern int CoTableBase(UBYTE *);
1038 extern int CoApply(UBYTE *);
1039 extern int CoDenominators(UBYTE *);
1040 extern int CoDimension(UBYTE *);
1041 extern int CoDiscard(UBYTE *);
1042 extern int CoDisorder(UBYTE *);
1043 extern int CoDrop(UBYTE *);
1044 extern int CoDropCoefficient(UBYTE *);
1045 extern int CoDropSymbols(UBYTE *);
1046 extern int CoElse(UBYTE *);
1047 extern int CoElseIf(UBYTE *);
1048 extern int CoEndArgument(UBYTE *);
1049 extern int CoEndInside(UBYTE *);
1050 extern int CoEndIf(UBYTE *);
1051 extern int CoEndRepeat(UBYTE *);
1052 extern int CoEndTerm(UBYTE *);
1053 extern int CoEndWhile(UBYTE *);
1054 extern int CoExit(UBYTE *);
1055 extern int CoFactArg(UBYTE *);
1056 extern int CoFactDollar(UBYTE *);
1057 extern int CoFactorize(UBYTE *);
1058 extern int CoNFactorize(UBYTE *);
1059 extern int CoUnFactorize(UBYTE *);
1060 extern int CoNUnFactorize(UBYTE *);
1061 extern int DoFactorize(UBYTE *,
int);
1062 extern int CoFill(UBYTE *);
1063 extern int CoFillExpression(UBYTE *);
1064 extern int CoFixIndex(UBYTE *);
1065 extern int CoFormat(UBYTE *);
1066 extern int CoGlobal(UBYTE *);
1067 extern int CoGlobalFactorized(UBYTE *);
1068 extern int CoGoTo(UBYTE *);
1069 extern int CoId(UBYTE *);
1070 extern int CoIdNew(UBYTE *);
1071 extern int CoIdOld(UBYTE *);
1072 extern int CoIf(UBYTE *);
1073 extern int CoIfMatch(UBYTE *);
1074 extern int CoIfNoMatch(UBYTE *);
1075 extern int CoIndex(UBYTE *);
1076 extern int CoInsideFirst(UBYTE *);
1077 extern int CoKeep(UBYTE *);
1078 extern int CoLabel(UBYTE *);
1079 extern int CoLoad(UBYTE *);
1080 extern int CoLocal(UBYTE *);
1081 extern int CoLocalFactorized(UBYTE *);
1082 extern int CoMany(UBYTE *);
1083 extern int CoMerge(UBYTE *);
1084 extern int CoStuffle(UBYTE *);
1085 extern int CoMetric(UBYTE *);
1086 extern int CoModOption(UBYTE *);
1087 extern int CoModuleOption(UBYTE *);
1088 extern int CoModulus(UBYTE *);
1089 extern int CoMulti(UBYTE *);
1090 extern int CoMultiply(UBYTE *);
1091 extern int CoNFunction(UBYTE *);
1092 extern int CoNPrint(UBYTE *);
1093 extern int CoNTensor(UBYTE *);
1094 extern int CoNWrite(UBYTE *);
1095 extern int CoNoDrop(UBYTE *);
1096 extern int CoNoSkip(UBYTE *);
1097 extern int CoNormalize(UBYTE *);
1098 extern int CoMakeInteger(UBYTE *);
1099 extern int CoFlags(UBYTE *,
int);
1100 extern int CoOff(UBYTE *);
1101 extern int CoOn(UBYTE *);
1102 extern int CoOnce(UBYTE *);
1103 extern int CoOnly(UBYTE *);
1104 extern int CoOptimizeOption(UBYTE *);
1105 extern int CoOptimize(UBYTE *);
1106 extern int CoPolyFun(UBYTE *);
1107 extern int CoPolyRatFun(UBYTE *);
1108 extern int CoPrint(UBYTE *);
1109 extern int CoPrintB(UBYTE *);
1110 extern int CoProperCount(UBYTE *);
1111 extern int CoUnitTrace(UBYTE *);
1112 extern int CoRCycleSymmetrize(UBYTE *);
1113 extern int CoRatio(UBYTE *);
1114 extern int CoRedefine(UBYTE *);
1115 extern int CoRenumber(UBYTE *);
1116 extern int CoRepeat(UBYTE *);
1117 extern int CoSave(UBYTE *);
1118 extern int CoSelect(UBYTE *);
1119 extern int CoSet(UBYTE *);
1120 extern int CoSetExitFlag(UBYTE *);
1121 extern int CoSkip(UBYTE *);
1122 extern int CoProcessBucket(UBYTE *);
1123 extern int CoPushHide(UBYTE *);
1124 extern int CoPopHide(UBYTE *);
1125 extern int CoHide(UBYTE *);
1126 extern int CoIntoHide(UBYTE *);
1127 extern int CoNoHide(UBYTE *);
1128 extern int CoUnHide(UBYTE *);
1129 extern int CoNoUnHide(UBYTE *);
1130 extern int CoSort(UBYTE *);
1131 extern int CoSplitArg(UBYTE *);
1132 extern int CoSplitFirstArg(UBYTE *);
1133 extern int CoSplitLastArg(UBYTE *);
1134 extern int CoSum(UBYTE *);
1135 extern int CoSymbol(UBYTE *);
1136 extern int CoSymmetrize(UBYTE *);
1137 extern int DoTable(UBYTE *,
int);
1138 extern int CoTable(UBYTE *);
1139 extern int CoTerm(UBYTE *);
1140 extern int CoNTable(UBYTE *);
1141 extern int CoCTable(UBYTE *);
1142 extern void EmptyTable(
TABLES);
1143 extern int CoToTensor(UBYTE *);
1144 extern int CoToVector(UBYTE *);
1145 extern int CoTrace4(UBYTE *);
1146 extern int CoTraceN(UBYTE *);
1147 extern int CoChisholm(UBYTE *);
1148 extern int CoTransform(UBYTE *);
1149 extern int CoClearTable(UBYTE *);
1150 extern int DoChain(UBYTE *,
int);
1151 extern int CoChainin(UBYTE *);
1152 extern int CoChainout(UBYTE *);
1153 extern int CoTryReplace(UBYTE *);
1154 extern int CoVector(UBYTE *);
1155 extern int CoWhile(UBYTE *);
1156 extern int CoWrite(UBYTE *);
1157 extern int CoAuto(UBYTE *);
1158 extern int CoSwitch(UBYTE *);
1159 extern int CoCase(UBYTE *);
1160 extern int CoBreak(UBYTE *);
1161 extern int CoDefault(UBYTE *);
1162 extern int CoEndSwitch(UBYTE *);
1163 extern int CoTBaddto(UBYTE *);
1164 extern int CoTBaudit(UBYTE *);
1165 extern int CoTBcleanup(UBYTE *);
1166 extern int CoTBcreate(UBYTE *);
1167 extern int CoTBenter(UBYTE *);
1168 extern int CoTBhelp(UBYTE *);
1169 extern int CoTBload(UBYTE *);
1170 extern int CoTBoff(UBYTE *);
1171 extern int CoTBon(UBYTE *);
1172 extern int CoTBopen(UBYTE *);
1173 extern int CoTBreplace(UBYTE *);
1174 extern int CoTBuse(UBYTE *);
1175 extern int CoTestUse(UBYTE *);
1176 extern int CoThreadBucket(UBYTE *);
1177 extern int AddComString(
int,WORD *,UBYTE *,
int);
1178 extern int CompileAlgebra(UBYTE *,
int,WORD *);
1179 extern int IsIdStatement(UBYTE *);
1180 extern UBYTE *IsRHS(UBYTE *,UBYTE);
1181 extern int ParenthesesTest(UBYTE *);
1182 extern int tokenize(UBYTE *,WORD);
1183 extern void WriteTokens(SBYTE *);
1184 extern int simp1token(SBYTE *);
1185 extern int simpwtoken(SBYTE *);
1186 extern int simp2token(SBYTE *);
1187 extern int simp3atoken(SBYTE *,
int);
1188 extern int simp3btoken(SBYTE *,
int);
1189 extern int simp4token(SBYTE *);
1190 extern int simp5token(SBYTE *,
int);
1191 extern int simp6token(SBYTE *,
int);
1192 extern UBYTE *SkipAName(UBYTE *);
1193 extern int TestTables(VOID);
1194 extern int GetLabel(UBYTE *);
1195 extern int CoIdExpression(UBYTE *,
int);
1196 extern int CoAssign(UBYTE *);
1197 extern int DoExpr(UBYTE *,
int,
int);
1198 extern int CompileSubExpressions(SBYTE *);
1199 extern int CodeGenerator(SBYTE *);
1200 extern int CompleteTerm(WORD *,UWORD *,UWORD *,WORD,WORD,
int);
1201 extern int CodeFactors(SBYTE *s);
1202 extern WORD GenerateFactors(WORD,WORD);
1203 extern int InsTree(
int,
int);
1204 extern int FindTree(
int,WORD *);
1205 extern void RedoTree(
CBUF *,
int);
1206 extern void ClearTree(
int);
1207 extern int CatchDollar(
int);
1208 extern int AssignDollar(PHEAD WORD *,WORD);
1209 extern UBYTE *WriteDollarToBuffer(WORD,WORD);
1210 extern UBYTE *WriteDollarFactorToBuffer(WORD,WORD,WORD);
1211 extern void AddToDollarBuffer(UBYTE *);
1212 extern int PutTermInDollar(WORD *,WORD);
1213 extern void TermAssign(WORD *);
1214 extern void WildDollars(PHEAD WORD *);
1215 extern LONG numcommute(WORD *,LONG *);
1216 extern int FullRenumber(PHEAD WORD *,WORD);
1217 extern int Lus(WORD *,WORD,WORD,WORD,WORD,WORD);
1218 extern int FindLus(
int,
int,
int);
1219 extern int CoReplaceLoop(UBYTE *);
1220 extern int CoFindLoop(UBYTE *);
1221 extern int DoFindLoop(UBYTE *,
int);
1222 extern int CoFunPowers(UBYTE *);
1223 extern int SortTheList(
int *,
int);
1224 extern int MatchIsPossible(WORD *,WORD *);
1225 extern int StudyPattern(WORD *);
1226 extern WORD DolToTensor(PHEAD WORD);
1227 extern WORD DolToFunction(PHEAD WORD);
1228 extern WORD DolToVector(PHEAD WORD);
1229 extern WORD DolToNumber(PHEAD WORD);
1230 extern WORD DolToSymbol(PHEAD WORD);
1231 extern WORD DolToIndex(PHEAD WORD);
1232 extern LONG DolToLong(PHEAD WORD);
1233 extern int DollarFactorize(PHEAD WORD);
1234 extern int CoPrintTable(UBYTE *);
1235 extern int CoDeallocateTable(UBYTE *);
1236 extern void CleanDollarFactors(
DOLLARS);
1237 extern WORD *TakeDollarContent(PHEAD WORD *,WORD **);
1240 extern int GetDolNum(PHEAD WORD *, WORD *);
1245 extern int LoadOpti(WORD);
1246 extern int PutObject(WORD *,
int);
1247 extern void CleanOptiBuffer(VOID);
1248 extern int PrintOptima(WORD);
1249 extern int FindScratchName(VOID);
1250 extern WORD MaxPowerOpti(LONG);
1251 extern WORD HuntNumFactor(LONG,WORD *,
int);
1252 extern WORD HuntFactor(LONG,WORD *,
int);
1253 extern void HuntPairs(LONG,WORD);
1254 extern void HuntBrackets(LONG);
1255 extern int AddToOpti(WORD *,
int);
1256 extern LONG TestNewSca(LONG,WORD *,WORD *);
1257 extern void NormOpti(WORD *);
1258 extern void SortOpti(LONG);
1259 extern void SplitOpti(WORD **,LONG);
1260 extern void CombiOpti(VOID);
1261 extern int TakeLongRoot(UWORD *,WORD *,WORD);
1262 extern int TakeRatRoot(UWORD *,WORD *,WORD);
1263 extern int MakeRational(WORD ,WORD , WORD *, WORD *);
1264 extern int MakeLongRational(PHEAD UWORD *,WORD ,UWORD *,WORD ,UWORD *,WORD *);
1265 extern void HuntPowers(LONG,WORD);
1266 extern void HuntNumBrackets(LONG);
1267 extern void ClearTableTree(
TABLES);
1268 extern int InsTableTree(
TABLES,WORD *);
1269 extern void RedoTableTree(
TABLES,
int);
1270 extern int FindTableTree(
TABLES,WORD *,
int);
1274 extern FILEHANDLE *AllocFileHandle(WORD,
char *);
1277 extern WORD *PolyRatFunSpecial(PHEAD WORD *, WORD *);
1278 extern VOID SimpleSplitMergeRec(WORD *,WORD,WORD *);
1279 extern VOID SimpleSplitMerge(WORD *,WORD);
1280 extern WORD BinarySearch(WORD *,WORD,WORD);
1281 extern int InsideDollar(PHEAD WORD *,WORD);
1282 extern DOLLARS DolToTerms(PHEAD WORD);
1284 extern int SetExprCases(
int,
int,
int);
1285 extern int TestSelect(WORD *,WORD *);
1286 extern VOID SubsInAll(PHEAD0);
1287 extern VOID TransferBuffer(
int,
int,
int);
1288 extern int TakeIDfunction(PHEAD WORD *);
1289 extern int MakeSetupAllocs(VOID);
1290 extern int TryFileSetups(VOID);
1291 extern void ExchangeExpressions(
int,
int);
1292 extern void ExchangeDollars(
int,
int);
1293 extern int GetFirstBracket(WORD *,
int);
1294 extern int GetFirstTerm(WORD *,
int);
1295 extern int GetContent(WORD *,
int);
1296 extern int CleanupTerm(WORD *);
1297 extern WORD ContentMerge(PHEAD WORD *,WORD *);
1298 extern UBYTE *PreIfDollarEval(UBYTE *,
int *);
1299 extern LONG TermsInDollar(WORD);
1300 extern LONG SizeOfDollar(WORD);
1301 extern LONG TermsInExpression(WORD);
1302 extern LONG SizeOfExpression(WORD);
1303 extern WORD *TranslateExpression(UBYTE *);
1304 extern int IsSetMember(WORD *,WORD);
1305 extern int IsMultipleOf(WORD *,WORD *);
1306 extern int TwoExprCompare(WORD *,WORD *,
int);
1307 extern void UpdatePositions(VOID);
1308 extern void M_check(VOID);
1309 extern void M_print(VOID);
1310 extern void M_check1(VOID);
1311 extern void PrintTime(UBYTE *);
1313 extern POSITION *FindBracket(WORD,WORD *);
1314 extern VOID PutBracketInIndex(PHEAD WORD *,
POSITION *);
1315 extern void ClearBracketIndex(WORD);
1316 extern VOID OpenBracketIndex(WORD);
1317 extern int DoNoParallel(UBYTE *);
1318 extern int DoParallel(UBYTE *);
1319 extern int DoModSum(UBYTE *);
1320 extern int DoModMax(UBYTE *);
1321 extern int DoModMin(UBYTE *);
1322 extern int DoModLocal(UBYTE *);
1323 extern UBYTE *DoModDollar(UBYTE *,
int);
1324 extern int DoProcessBucket(UBYTE *);
1325 extern int DoinParallel(UBYTE *);
1326 extern int DonotinParallel(UBYTE *);
1329 extern int ChainIn(PHEAD WORD *,WORD);
1330 extern int ChainOut(PHEAD WORD *,WORD);
1331 extern int ArgumentImplode(PHEAD WORD *,WORD *);
1332 extern int ArgumentExplode(PHEAD WORD *,WORD *);
1333 extern int DenToFunction(WORD *,WORD);
1335 extern WORD HowMany(PHEAD WORD *,WORD *);
1336 extern VOID RemoveDollars(VOID);
1337 extern LONG CountTerms1(PHEAD0);
1338 extern LONG TermsInBracket(PHEAD WORD *,WORD);
1339 extern int Crash(VOID);
1341 extern char *str_dup(
char *);
1345 extern int ReadIndex(
DBASE *);
1346 extern int WriteIndexBlock(
DBASE *,MLONG);
1347 extern int WriteNamesBlock(
DBASE *,MLONG);
1348 extern int WriteIndex(
DBASE *);
1349 extern int WriteIniInfo(
DBASE *);
1350 extern int ReadIniInfo(
DBASE *);
1351 extern int AddToIndex(
DBASE *,MLONG);
1352 extern DBASE *GetDbase(
char *);
1353 extern DBASE *OpenDbase(
char *);
1354 extern char *ReadObject(
DBASE *,MLONG,
char *);
1355 extern char *ReadijObject(
DBASE *,MLONG,MLONG,
char *);
1356 extern int ExistsObject(
DBASE *,MLONG,
char *);
1357 extern int DeleteObject(
DBASE *,MLONG,
char *);
1358 extern int WriteObject(
DBASE *,MLONG,
char *,
char *,MLONG);
1359 extern MLONG AddObject(
DBASE *,MLONG,
char *,
char *);
1360 extern int Cleanup(
DBASE *);
1361 extern DBASE *NewDbase(
char *,MLONG);
1362 extern void FreeTableBase(
DBASE *);
1363 extern int ComposeTableNames(
DBASE *);
1364 extern int PutTableNames(
DBASE *);
1366 extern MLONG GetTableName(
DBASE *,
char *);
1367 extern MLONG FindTableNumber(
DBASE *,
char *);
1368 extern int TryEnvironment(VOID);
1374 extern int SetupAllInputGZIP(
SORTING *);
1380 extern VOID BeginIdentities(VOID);
1381 extern int WhoAmI(VOID);
1382 extern int StartAllThreads(
int);
1383 extern void StartHandleLock(VOID);
1384 extern VOID TerminateAllThreads(VOID);
1385 extern int GetAvailableThread(VOID);
1386 extern int ConditionalGetAvailableThread(VOID);
1387 extern int BalanceRunThread(PHEAD
int,WORD *,WORD);
1388 extern void WakeupThread(
int,
int);
1389 extern int MasterWait(VOID);
1390 extern int InParallelProcessor(VOID);
1391 extern int ThreadsProcessor(
EXPRESSIONS,WORD,WORD);
1392 extern int MasterMerge(VOID);
1393 extern int PutToMaster(PHEAD WORD *);
1394 extern void SetWorkerFiles(VOID);
1395 extern int MakeThreadBuckets(
int,
int);
1396 extern int SendOneBucket(
int);
1397 extern int LoadOneThread(
int,
int,THREADBUCKET *,
int);
1398 extern void *RunSortBot(
void *);
1399 extern void MasterWaitAllSortBots(VOID);
1400 extern int SortBotMerge(PHEAD0);
1401 extern int SortBotOut(PHEAD WORD *);
1402 extern void DefineSortBotTree(VOID);
1403 extern int SortBotMasterMerge(VOID);
1404 extern int SortBotWait(
int);
1405 extern void StartIdentity(VOID);
1406 extern void FinishIdentity(
void *);
1407 extern int SetIdentity(
int *);
1408 extern ALLPRIVATES *InitializeOneThread(
int);
1409 extern void FinalizeOneThread(
int);
1410 extern void ClearAllThreads(VOID);
1411 extern void *RunThread(
void *);
1412 extern void IAmAvailable(
int);
1413 extern int ThreadWait(
int);
1414 extern int ThreadClaimedBlock(
int);
1415 extern int GetThread(
int);
1416 extern int UpdateOneThread(
int);
1417 extern void MasterWaitAll(VOID);
1418 extern void MasterWaitAllBlocks(VOID);
1419 extern int MasterWaitThread(
int);
1420 extern void WakeupMasterFromThread(
int,
int);
1421 extern int LoadReadjusted(VOID);
1422 extern int IniSortBlocks(
int);
1423 extern int TreatIndexEntry(PHEAD LONG);
1424 extern WORD GetTerm2(PHEAD WORD *);
1425 extern void SetHideFiles(VOID);
1435 extern int DoPreAddSeparator(UBYTE *);
1436 extern int DoPreRmSeparator(UBYTE *);
1439 extern int openExternalChannel(UBYTE *,
int,UBYTE *,UBYTE *);
1440 extern int initPresetExternalChannels(UBYTE *,
int);
1441 extern int closeExternalChannel(
int);
1442 extern int selectExternalChannel(
int);
1443 extern int getCurrentExternalChannel(VOID);
1444 extern VOID closeAllExternalChannels(VOID);
1446 typedef int (*WRITEBUFTOEXTCHANNEL)(
char *,size_t);
1447 typedef int (*GETCFROMEXTCHANNEL)(VOID);
1448 typedef int (*SETTERMINATORFOREXTERNALCHANNEL)(
char *);
1449 typedef int (*SETKILLMODEFOREXTERNALCHANNEL)(int,int);
1450 typedef LONG (*WRITEFILE)(int,UBYTE *,LONG);
1451 typedef WORD (*GETTERM)(PHEAD WORD *);
1453 #define CompareTerms ((COMPARE)AR.CompareRoutine) 1454 #define FiniShuffle AN.SHvar.finishuf 1455 #define DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle) 1457 extern UBYTE *defineChannel(UBYTE*,
HANDLERS*);
1458 extern int writeToChannel(
int,UBYTE *,
HANDLERS*);
1459 #ifdef WITHEXTERNALCHANNEL 1460 extern LONG WriteToExternalChannel(
int,UBYTE *,LONG);
1462 extern int writeBufToExtChannelOk(
char *,
size_t);
1463 extern int getcFromExtChannelOk(VOID);
1464 extern int setKillModeForExternalChannelOk(
int,
int);
1465 extern int setTerminatorForExternalChannelOk(
char *);
1466 extern int getcFromExtChannelFailure(VOID);
1467 extern int setKillModeForExternalChannelFailure(
int,
int);
1468 extern int setTerminatorForExternalChannelFailure(
char *);
1469 extern int writeBufToExtChannelFailure(
char *,
size_t);
1471 extern int ReleaseTB(VOID);
1474 extern int TestFunFlag(PHEAD WORD *);
1478 extern WORD Moebius(PHEAD WORD);
1479 extern UWORD wranf(PHEAD0);
1480 extern UWORD iranf(PHEAD UWORD);
1481 extern void iniwranf(PHEAD0);
1482 extern UBYTE *PreRandom(UBYTE *);
1484 extern WORD *PolyNormPoly (PHEAD WORD);
1485 extern WORD *EvaluateGcd(PHEAD WORD *);
1486 extern int TreatPolyRatFun(PHEAD WORD *);
1491 extern UBYTE *
ReadSaveTerm32(UBYTE *,UBYTE *,UBYTE **,UBYTE *,UBYTE *,
int);
1502 extern VOID NumberMallocAddMemory(PHEAD0);
1503 extern VOID CacheNumberMallocAddMemory(PHEAD0);
1504 extern VOID TermMallocAddMemory(PHEAD0);
1505 #ifndef MEMORYMACROS 1506 extern WORD *TermMalloc2(PHEAD
char *text);
1507 extern VOID TermFree2(PHEAD WORD *term,
char *text);
1508 extern UWORD *NumberMalloc2(PHEAD
char *text);
1509 extern UWORD *CacheNumberMalloc2(PHEAD
char *text);
1510 extern VOID NumberFree2(PHEAD UWORD *NumberMem,
char *text);
1511 extern VOID CacheNumberFree2(PHEAD UWORD *NumberMem,
char *text);
1515 extern VOID iniTools(VOID);
1518 extern WORD RunTransform(PHEAD WORD *term, WORD *params);
1519 extern WORD RunEncode(PHEAD WORD *fun, WORD *args, WORD *info);
1520 extern WORD RunDecode(PHEAD WORD *fun, WORD *args, WORD *info);
1521 extern WORD RunReplace(PHEAD WORD *fun, WORD *args, WORD *info);
1522 extern WORD RunImplode(WORD *fun, WORD *args);
1523 extern WORD RunExplode(PHEAD WORD *fun, WORD *args);
1524 extern int TestArgNum(
int n,
int totarg, WORD *args);
1525 extern WORD PutArgInScratch(WORD *arg,UWORD *scrat);
1526 extern UBYTE *ReadRange(UBYTE *s, WORD *out,
int par);
1527 extern int FindRange(PHEAD WORD *,WORD *,WORD *,WORD);
1528 extern WORD RunPermute(PHEAD WORD *fun, WORD *args, WORD *info);
1529 extern WORD RunReverse(PHEAD WORD *fun, WORD *args);
1530 extern WORD RunCycle(PHEAD WORD *fun, WORD *args, WORD *info);
1531 extern WORD RunAddArg(PHEAD WORD *fun, WORD *args);
1532 extern WORD RunMulArg(PHEAD WORD *fun, WORD *args);
1533 extern WORD RunIsLyndon(PHEAD WORD *fun, WORD *args,
int par);
1534 extern WORD RunToLyndon(PHEAD WORD *fun, WORD *args,
int par);
1535 extern WORD RunDropArg(PHEAD WORD *fun, WORD *args);
1536 extern WORD RunSelectArg(PHEAD WORD *fun, WORD *args);
1537 extern WORD RunDedup(PHEAD WORD *fun, WORD *args);
1539 extern int NormPolyTerm(PHEAD WORD *);
1540 extern WORD ComparePoly(WORD *, WORD *, WORD);
1541 extern int ConvertToPoly(PHEAD WORD *, WORD *,WORD *,WORD);
1543 extern int ConvertFromPoly(PHEAD WORD *, WORD *, WORD, WORD, WORD, WORD);
1544 extern WORD FindSubterm(WORD *);
1545 extern WORD FindLocalSubterm(PHEAD WORD *, WORD);
1546 extern void PrintSubtermList(
int,
int);
1547 extern void PrintExtraSymbol(
int,WORD *,
int);
1548 extern WORD FindSubexpression(WORD *);
1550 extern void UpdateMaxSize(VOID);
1552 extern int CoToPolynomial(UBYTE *);
1553 extern int CoFromPolynomial(UBYTE *);
1554 extern int CoArgToExtraSymbol(UBYTE *);
1555 extern int CoExtraSymbols(UBYTE *);
1556 extern UBYTE *GetDoParam(UBYTE *, WORD **,
int);
1557 extern WORD *GetIfDollarFactor(UBYTE **, WORD *);
1558 extern int CoDo(UBYTE *);
1559 extern int CoEndDo(UBYTE *);
1560 extern int ExtraSymFun(PHEAD WORD *,WORD);
1561 extern int PruneExtraSymbols(WORD);
1563 extern void IniFbufs(VOID);
1564 extern int GCDfunction(PHEAD WORD *,WORD);
1565 extern WORD *GCDfunction3(PHEAD WORD *,WORD *);
1566 extern WORD *GCDfunction4(PHEAD WORD *,WORD *);
1567 extern int ReadPolyRatFun(PHEAD WORD *);
1568 extern int FromPolyRatFun(PHEAD WORD *, WORD **, WORD **);
1569 extern void PRFnormalize(PHEAD WORD *);
1570 extern WORD *PRFadd(PHEAD WORD *, WORD *);
1571 extern WORD *PolyDiv(PHEAD WORD *,WORD *,
char *);
1572 extern WORD *PolyGCD(PHEAD WORD *,WORD *);
1573 extern WORD *PolyAdd(PHEAD WORD *,WORD *);
1574 extern void GCDclean(PHEAD WORD *, WORD *);
1575 extern int RatFunNormalize(PHEAD WORD *);
1577 extern int GCDterms(PHEAD WORD *,WORD *,WORD *);
1578 extern WORD *PutExtraSymbols(PHEAD WORD *,WORD,
int *);
1579 extern WORD *TakeExtraSymbols(PHEAD WORD *,WORD);
1580 extern WORD *MultiplyWithTerm(PHEAD WORD *, WORD *,WORD);
1582 extern int MergeSymbolLists(PHEAD WORD *, WORD *,
int);
1583 extern int MergeDotproductLists(PHEAD WORD *, WORD *,
int);
1584 extern WORD *CreateExpression(PHEAD WORD);
1585 extern int DIVfunction(PHEAD WORD *,WORD,
int);
1586 extern WORD *MULfunc(PHEAD WORD *, WORD *);
1587 extern WORD *ConvertArgument(PHEAD WORD *,
int *);
1588 extern int ExpandRat(PHEAD WORD *);
1589 extern int InvPoly(PHEAD WORD *,WORD,WORD);
1590 extern WORD TestDoLoop(PHEAD WORD *,WORD);
1591 extern WORD TestEndDoLoop(PHEAD WORD *,WORD);
1593 extern WORD *
poly_gcd(PHEAD WORD *, WORD *, WORD);
1594 extern WORD *poly_div(PHEAD WORD *, WORD *, WORD);
1595 extern WORD *poly_rem(PHEAD WORD *, WORD *, WORD);
1596 extern WORD *poly_inverse(PHEAD WORD *, WORD *);
1597 extern WORD *poly_mul(PHEAD WORD *, WORD *);
1603 extern int poly_unfactorize_expression(
EXPRESSIONS);
1604 extern void poly_free_poly_vars(PHEAD
const char *);
1609 extern void find_Horner_MCTS_expand_tree();
1610 extern void find_Horner_MCTS_expand_tree_threaded();
1612 extern void optimize_expression_given_Horner_threaded();
1615 extern int DoPreAdd(UBYTE *s);
1616 extern int DoPreUseDictionary(UBYTE *s);
1617 extern int DoPreCloseDictionary(UBYTE *s);
1618 extern int DoPreOpenDictionary(UBYTE *s);
1619 extern void RemoveDictionary(
DICTIONARY *dict);
1620 extern void UnSetDictionary(VOID);
1621 extern int SetDictionaryOptions(UBYTE *options);
1622 extern int SelectDictionary(UBYTE *name,UBYTE *options);
1623 extern int AddToDictionary(
DICTIONARY *dict,UBYTE *left,UBYTE *right);
1624 extern int AddDictionary(UBYTE *name);
1625 extern int FindDictionary(UBYTE *name);
1626 extern UBYTE *IsExponentSign(VOID);
1627 extern UBYTE *IsMultiplySign(VOID);
1628 extern VOID TransformRational(UWORD *a, WORD na);
1631 extern void MultiplyToLine(VOID);
1632 extern UBYTE *FindSymbol(WORD num);
1633 extern UBYTE *FindVector(WORD num);
1634 extern UBYTE *FindIndex(WORD num);
1635 extern UBYTE *FindFunction(WORD num);
1636 extern UBYTE *FindFunWithArgs(WORD *t);
1637 extern UBYTE *FindExtraSymbol(WORD num);
1638 extern LONG DictToBytes(
DICTIONARY *dict,UBYTE *buf);
1639 extern DICTIONARY *DictFromBytes(UBYTE *buf);
1640 extern int CoCreateSpectator(UBYTE *inp);
1641 extern int CoToSpectator(UBYTE *inp);
1642 extern int CoRemoveSpectator(UBYTE *inp);
1643 extern int CoEmptySpectator(UBYTE *inp);
1644 extern int CoCopySpectator(UBYTE *inp);
1645 extern int PutInSpectator(WORD *,WORD);
1646 extern void ClearSpectators(WORD);
1647 extern WORD GetFromSpectator(WORD *,WORD);
1648 extern void FlushSpectators(VOID);
1650 extern WORD *PreGCD(PHEAD WORD *, WORD *,
int);
1651 extern WORD *FindCommonVariables(PHEAD
int,
int);
1652 extern VOID AddToSymbolList(PHEAD WORD);
1653 extern int AddToListPoly(PHEAD0);
1654 extern int InvPoly(PHEAD WORD *,WORD,WORD);
1662 extern int DoSwitch(PHEAD WORD *, WORD *);
1663 extern int DoEndSwitch(PHEAD WORD *, WORD *);
1666 extern VOID SwitchSplitMerge(
SWITCHTABLE *, WORD);
1667 extern int DoubleSwitchBuffers(VOID);
1669 extern int DistrN(
int,
int *,
int,
int *);
int NormalModulus(UWORD *, WORD *)
WORD ReadSaveIndex(FILEINDEX *)
void DeleteRecoveryFile()
void AddPotModdollar(WORD)
VOID AddArgs(PHEAD WORD *, WORD *, WORD *)
char * RecoveryFilename()
WORD Compare1(WORD *, WORD *, WORD)
WORD FindArg(PHEAD WORD *)
WORD CompareSymbols(WORD *, WORD *, WORD)
WORD * TakeSymbolContent(PHEAD WORD *, WORD *)
int PutPreVar(UBYTE *, UBYTE *, UBYTE *, int)
WORD AddCoef(PHEAD WORD **, WORD **)
WORD * poly_gcd(PHEAD WORD *, WORD *, WORD)
void optimize_expression_given_Horner()
UBYTE * ReadSaveTerm32(UBYTE *, UBYTE *, UBYTE **, UBYTE *, UBYTE *, int)
VOID WriteStats(POSITION *, WORD)
int LocalConvertToPoly(PHEAD WORD *, WORD *, WORD, WORD)
WORD InFunction(PHEAD WORD *, WORD *)
WORD PrepPoly(PHEAD WORD *, WORD)
int SymbolNormalize(WORD *)
WORD * DoubleCbuffer(int, WORD *, int)
WORD PolyFunMul(PHEAD WORD *)
WORD TermRenumber(WORD *, RENUMBER, WORD)
VOID optimize_print_code(int)
int CleanupArgCache(PHEAD WORD)
WORD * TakeArgContent(PHEAD WORD *, WORD *)
void SortWeights(LONG *, LONG *, WORD)
VOID RaisPowCached(PHEAD WORD, WORD, UWORD **, WORD *)
WORD * MakeDollarInteger(PHEAD WORD *, WORD **)
WORD InsertTerm(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD)
int GetModInverses(WORD, WORD, WORD *, WORD *)
WORD ReadSaveVariables(UBYTE *, UBYTE *, LONG *, LONG *, INDEXENTRY *, LONG *)
WORD AddPoly(PHEAD WORD **, WORD **)
WORD FiniTerm(PHEAD WORD *, WORD *, WORD *, WORD, WORD)
int DoPrePrependPath(UBYTE *)
WORD CompareHSymbols(WORD *, WORD *, WORD)
WORD StoreTerm(PHEAD WORD *)
WORD * poly_ratfun_add(PHEAD WORD *, WORD *)
WORD Sflush(FILEHANDLE *)
WORD TestMatch(PHEAD WORD *, WORD *)
int poly_ratfun_normalize(PHEAD WORD *)
WORD * MakeDollarMod(PHEAD WORD *, WORD **)
int CopyFile(char *, char *)
WORD DoOnePow(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD, WORD *)
LONG PasteFile(PHEAD WORD, WORD *, POSITION *, WORD **, RENUMBER, WORD *, WORD)
WORD SortWild(WORD *, WORD)
LONG ComPress(WORD **, LONG *)
int DoPreAppendPath(UBYTE *)
LONG SplitMerge(PHEAD WORD **, LONG)
WORD Deferred(PHEAD WORD *, WORD)
int poly_factorize_argument(PHEAD WORD *, WORD *)
int AddNtoC(int, int, WORD *, int)
WORD PutOut(PHEAD WORD *, POSITION *, FILEHANDLE *, WORD)
WORD TestSub(PHEAD WORD *, WORD)
WORD NextPrime(PHEAD WORD)
WORD Generator(PHEAD WORD *, WORD)
WORD * PasteTerm(PHEAD WORD, WORD *, WORD *, WORD, WORD)
int TheDefine(UBYTE *, int)
int poly_factorize_expression(EXPRESSIONS)
WORD * TakeContent(PHEAD WORD *, WORD *)
WORD * MakeMod(PHEAD WORD *, WORD *, WORD *)
WORD * poly_factorize_dollar(PHEAD WORD *)
WORD InsertArg(PHEAD WORD *, WORD *, int)
VOID StageSort(FILEHANDLE *)
WORD FlushOut(POSITION *, FILEHANDLE *, int)
WORD EvalDoLoopArg(PHEAD WORD *, WORD)
struct bit_field set_of_char[32]
WORD ReadSaveExpression(UBYTE *, UBYTE *, LONG *, LONG *)
WORD CompCoef(WORD *, WORD *)
LONG PutIn(FILEHANDLE *, POSITION *, WORD *, WORD **, int)
LONG EndSort(PHEAD WORD *, int)
WORD WriteStoreHeader(WORD)
WORD * MakeInteger(PHEAD WORD *, WORD *, WORD *)