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))>>1) 45 #define INCLENG(x) (((x)<0)?(((x)<<1)-1):(((x)<<1)+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 TOKENTOLINE(x,y) if ( AC.OutputSpaces == NOSPACEFORMAT ) { \ 51 TokenToLine((UBYTE *)(y)); } else { TokenToLine((UBYTE *)(x)); } 53 #define UngetFromStream(stream,c) ((stream)->nextchar[(stream)->isnextchar++]=c) 55 #define AddLineFeed(s,n) { (s)[(n)++] = CARRIAGERETURN; (s)[(n)++] = LINEFEED; } 57 #define AddLineFeed(s,n) { (s)[(n)++] = LINEFEED; } 59 #define TryRecover(x) Terminate(-1) 60 #define UngetChar(c) { pushbackchar = c; } 61 #define ParseNumber(x,s) {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';} 62 #define ParseSign(sgn,s) {(sgn)=0;while(*(s)=='-'||*(s)=='+'){\ 63 if ( *(s)++ == '-' ) sgn ^= 1;}} 64 #define ParseSignedNumber(x,s) { int sgn; ParseSign(sgn,s)\ 65 ParseNumber(x,s) if ( sgn ) x = -x; } 67 #define NCOPY(s,t,n) while ( --n >= 0 ) *s++ = *t++; 70 #define NCOPYI(s,t,n) while ( --n >= 0 ) *s++ = *t++; 71 #define NCOPYB(s,t,n) while ( --n >= 0 ) *s++ = *t++; 72 #define NCOPYI32(s,t,n) while ( --n >= 0 ) *s++ = *t++; 73 #define WCOPY(s,t,n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( --nn >= 0 ) *ss++=*tt++; } 74 #define NeedNumber(x,s,err) { int sgn = 1; \ 75 while ( *s == ' ' || *s == '\t' || *s == '-' || *s == '+' ) { \ 76 if ( *s == '-' ) sgn = -sgn; s++; } \ 77 if ( chartype[*s] != 1 ) goto err; \ 79 if ( sgn < 0 ) (x) = -(x); while ( *s == ' ' || *s == '\t' ) s++;\ 81 #define SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; } 82 #define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED) 84 #define SKIPBRA1(s) { int lev1=0; s++; while(*s) { if(*s=='[')lev1++; \ 85 else if(*s==']'&&--lev1<0)break; s++;} } 86 #define SKIPBRA2(s) { int lev2=0; s++; while(*s) { if(*s=='{')lev2++; \ 87 else if(*s=='}'&&--lev2<0)break; \ 88 else if(*s=='[')SKIPBRA1(s) s++;} } 89 #define SKIPBRA3(s) { int lev3=0; s++; while(*s) { if(*s=='(')lev3++; \ 90 else if(*s==')'&&--lev3<0)break; \ 91 else if(*s=='{')SKIPBRA2(s) \ 92 else if(*s=='[')SKIPBRA1(s) s++;} } 93 #define SKIPBRA4(s) { int lev4=0; s++; while(*s) { if(*s=='(')lev4++; \ 94 else if(*s==')'&&--lev4<0)break; \ 95 else if(*s=='[')SKIPBRA1(s) s++;} } 96 #define SKIPBRA5(s) { int lev5=0; s++; while(*s) { if(*s=='{')lev5++; \ 97 else if(*s=='}'&&--lev5<0)break; \ 98 else if(*s=='(')SKIPBRA4(s) \ 99 else if(*s=='[')SKIPBRA1(s) s++;} } 104 #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;} 106 #define AddToCB(c,wx) if(c->Pointer>=c->Top) \ 107 DoubleCbuffer(c-cbuf,c->Pointer,21); \ 108 *(c->Pointer)++ = wx; 110 #define EXCHINOUT { FILEHANDLE *ffFi = AR.outfile; \ 111 AR.outfile = AR.infile; AR.infile = ffFi; } 112 #define BACKINOUT { FILEHANDLE *ffFi = AR.outfile; POSITION posi; \ 113 AR.outfile = AR.infile; AR.infile = ffFi; \ 114 SetEndScratch(AR.infile,&posi); } 116 #define CopyArg(to,from) { if ( *from > 0 ) { int ica = *from; NCOPY(to,from,ica) } \ 117 else if ( *from <= -FUNCTION ) *to++ = *from++; \ 118 else { *to++ = *from++; *to++ = *from++; } } 121 #define FILLARG(w) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = 0; } 122 #define COPYARG(w,t) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = *t++; } 123 #define ZEROARG(w) { int i; for ( i = 2; i < ARGHEAD; i++ ) w[i] = 0; } 131 #define FILLFUN(w) { *w++ = 0; FILLFUN3(w) } 132 #define COPYFUN(w,t) { *w++ = *t++; COPYFUN3(w,t) } 139 #define FILLFUN3(w) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = 0; } 140 #define COPYFUN3(w,t) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = *t++; } 142 #define COPYFUN3(w,t) 147 #define FILLSUB(w) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = 0; } 148 #define COPYSUB(w,ww) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = *ww++; } 151 #define COPYSUB(w,ww) 155 #define FILLEXPR(w) { int ie = EXPRHEAD-4; while ( --ie >= 0 ) *w++ = 0; } 160 #define NEXTARG(x) if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2; 161 #define COPY1ARG(s1,t1) { int ica; if ( (ica=*t1) > 0 ) { NCOPY(s1,t1,ica) } \ 162 else if(*t1<=-FUNCTION){*s1++=*t1++;} else{*s1++=*t1++;*s1++=*t1++;} } 171 #define ZeroFillRange(w,begin,end) do { \ 173 for ( tmp_i = begin; tmp_i < end; tmp_i++ ) { (w)[tmp_i] = 0; } \ 176 #define TABLESIZE(a,b) (((WORD)sizeof(a))/((WORD)sizeof(b))) 177 #define WORDDIF(x,y) (WORD)(x-y) 178 #define wsizeof(a) ((WORD)sizeof(a)) 179 #define VARNAME(type,num) (AC.varnames->namebuffer+type[num].name) 180 #define DOLLARNAME(type,num) (AC.dollarnames->namebuffer+type[num].name) 181 #define EXPRNAME(num) (AC.exprnames->namebuffer+Expressions[num].name) 183 #define PREV(x) prevorder?prevorder:x 185 #define SETERROR(x) { Terminate(-1); return(-1); } 188 #define DUMMYUSE(x) (void)(x); 190 #ifdef _FILE_OFFSET_BITS 191 #if _FILE_OFFSET_BITS==64 194 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(off_t)(x)) 195 #define SETBASELENGTH(ss,x) (ss).p1 = (off_t)(x) 196 #define SETBASEPOSITION(pp,x) (pp).p1 = (off_t)(x) 197 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(off_t)(x)) ) 198 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(off_t)(x)) ) 199 #define DIVPOS(pp,n) ( (pp).p1/(off_t)(n) ) 200 #define MULPOS(pp,n) (pp).p1 *= (off_t)(n) 204 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(x)) 205 #define SETBASELENGTH(ss,x) (ss).p1 = (x) 206 #define SETBASEPOSITION(pp,x) (pp).p1 = (x) 207 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) 208 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) 209 #define DIVPOS(pp,n) ( (pp).p1/(n) ) 210 #define MULPOS(pp,n) (pp).p1 *= (n) 214 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(LONG)(x)) 215 #define SETBASELENGTH(ss,x) (ss).p1 = (LONG)(x) 216 #define SETBASEPOSITION(pp,x) (pp).p1 = (LONG)(x) 217 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) 218 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) 219 #define DIVPOS(pp,n) ( (pp).p1/(LONG)(n) ) 220 #define MULPOS(pp,n) (pp).p1 *= (LONG)(n) 223 #define DIFPOS(ss,pp1,pp2) (ss).p1 = ((pp1).p1-(pp2).p1) 224 #define DIFBASE(pp1,pp2) ((pp1).p1-(pp2).p1) 225 #define ADD2POS(pp1,pp2) (pp1).p1 += (pp2).p1 226 #define PUTZERO(pp) (pp).p1 = 0 227 #define BASEPOSITION(pp) ((pp).p1) 228 #define SETSTARTPOS(pp) (pp).p1 = -2 229 #define NOTSTARTPOS(pp) ( (pp).p1 > -2 ) 230 #define ISMINPOS(pp) ( (pp).p1 == -1 ) 231 #define ISEQUALPOS(pp1,pp2) ( (pp1).p1 == (pp2).p1 ) 232 #define ISNOTEQUALPOS(pp1,pp2) ( (pp1).p1 != (pp2).p1 ) 233 #define ISLESSPOS(pp1,pp2) ( (pp1).p1 < (pp2).p1 ) 234 #define ISGEPOS(pp1,pp2) ( (pp1).p1 >= (pp2).p1 ) 235 #define ISNOTZEROPOS(pp) ( (pp).p1 != 0 ) 236 #define ISZEROPOS(pp) ( (pp).p1 == 0 ) 237 #define ISPOSPOS(pp) ( (pp).p1 > 0 ) 238 #define ISNEGPOS(pp) ( (pp).p1 < 0 ) 239 extern VOID TELLFILE(
int,
POSITION *);
241 #define TOLONG(x) ((LONG)(x)) 243 #define Add2Com(x) { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); } 244 #define Add3Com(x1,x2) { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); } 245 #define Add4Com(x1,x2,x3) { WORD cod[4]; cod[0] = x1; cod[1] = 4; \ 246 cod[2] = x2; cod[3] = x3; AddNtoL(4,cod); } 247 #define Add5Com(x1,x2,x3,x4) { WORD cod[5]; cod[0] = x1; cod[1] = 5; \ 248 cod[2] = x2; cod[3] = x3; cod[4] = x4; AddNtoL(5,cod); } 253 #define WantAddPointers(x) while((AT.pWorkPointer+(x))>AR.pWorkSize){WORD ***ppp=&AT.pWorkSpace;\ 254 ExpandBuffer((void **)ppp,&AR.pWorkSize,(int)(sizeof(WORD *)));} 255 #define WantAddLongs(x) while((AT.lWorkPointer+(x))>AR.lWorkSize){LONG **ppp=&AT.lWorkSpace;\ 256 ExpandBuffer((void **)ppp,&AR.lWorkSize,sizeof(LONG));} 257 #define WantAddPositions(x) while((AT.posWorkPointer+(x))>AR.posWorkSize){POSITION **ppp=&AT.posWorkSpace;\ 258 ExpandBuffer((void **)ppp,&AR.posWorkSize,sizeof(POSITION));} 261 #define FORM_INLINE inline 273 #define TermMalloc(x) ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] ) 274 #define NumberMalloc(x) ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] ) 275 #define CacheNumberMalloc(x) ( (AT.CacheNumberMemTop <= 0 ) ? CacheNumberMallocAddMemory(BHEAD0), AT.CacheNumberMemHeap[--AT.CacheNumberMemTop]: AT.CacheNumberMemHeap[--AT.CacheNumberMemTop] ) 276 #define TermFree(TermMem,x) AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem) 277 #define NumberFree(NumberMem,x) AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem) 278 #define CacheNumberFree(NumberMem,x) AT.CacheNumberMemHeap[AT.CacheNumberMemTop++] = (UWORD *)(NumberMem) 282 #define TermMalloc(x) TermMalloc2(BHEAD (char *)(x)) 283 #define NumberMalloc(x) NumberMalloc2(BHEAD (char *)(x)) 284 #define CacheNumberMalloc(x) CacheNumberMalloc2(BHEAD (char *)(x)) 285 #define TermFree(x,y) TermFree2(BHEAD (WORD *)(x),(char *)(y)) 286 #define NumberFree(x,y) NumberFree2(BHEAD (UWORD *)(x),(char *)(y)) 287 #define CacheNumberFree(x,y) CacheNumberFree2(BHEAD (UWORD *)(x),(char *)(y)) 306 #define NestingChecksum() (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel) 307 #define MesNesting() MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do") 309 #define MarkPolyRatFunDirty(T) {if(*T&&AR.PolyFunType==2){WORD *TP,*TT;TT=T+*T;TT-=ABS(TT[-1]);\ 310 TP=T+1;while(TP<TT){if(*TP==AR.PolyFun){TP[2]|=(DIRTYFLAG|MUSTCLEANPRF);}TP+=TP[1];}}} 316 #define PUSHPREASSIGNLEVEL AP.PreAssignLevel++; { GETIDENTITY \ 317 if ( AP.PreAssignLevel >= AP.MaxPreAssignLevel ) { int i; \ 318 LONG *ap = (LONG *)Malloc1(2*AP.MaxPreAssignLevel*sizeof(LONG *),"PreAssignStack"); \ 319 for ( i = 0; i < AP.MaxPreAssignLevel; i++ ) ap[i] = AP.PreAssignStack[i]; \ 320 M_free(AP.PreAssignStack,"PreAssignStack"); \ 321 AP.MaxPreAssignLevel *= 2; AP.PreAssignStack = ap; \ 323 *AT.WorkPointer++ = AP.PreContinuation; AP.PreContinuation = 0; \ 324 AP.PreAssignStack[AP.PreAssignLevel] = AC.iPointer - AC.iBuffer; } 326 #define POPPREASSIGNLEVEL if ( AP.PreAssignLevel > 0 ) { GETIDENTITY \ 327 AC.iPointer = AC.iBuffer + AP.PreAssignStack[AP.PreAssignLevel--]; \ 328 AP.PreContinuation = *--AT.WorkPointer; \ 346 #define EXTERNLOCK(x) extern pthread_mutex_t x; 347 #define INILOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER 348 #define EXTERNRWLOCK(x) extern pthread_rwlock_t x; 349 #define INIRWLOCK(x) pthread_rwlock_t x = PTHREAD_RWLOCK_INITIALIZER; 350 #ifdef DEBUGGINGLOCKS 351 #include <asm/errno.h> 352 #define LOCK(x) while ( pthread_mutex_trylock(&(x)) == EBUSY ) {} 353 #define RWLOCKR(x) while ( pthread_rwlock_tryrdlock(&(x)) == EBUSY ) {} 354 #define RWLOCKW(x) while ( pthread_rwlock_trywrlock(&(x)) == EBUSY ) {} 356 #define LOCK(x) pthread_mutex_lock(&(x)) 357 #define RWLOCKR(x) pthread_rwlock_rdlock(&(x)) 358 #define RWLOCKW(x) pthread_rwlock_wrlock(&(x)) 360 #define UNLOCK(x) pthread_mutex_unlock(&(x)) 361 #define UNRWLOCK(x) pthread_rwlock_unlock(&(x)) 362 #define MLOCK(x) LOCK(x) 363 #define MUNLOCK(x) UNLOCK(x) 366 #define GETIDENTITY int identity = WhoAmI(); ALLPRIVATES *B = AB[identity]; 369 #define EXTERNLOCK(x) 373 #define EXTERNRWLOCK(x) 379 #define MLOCK(x) do { if ( PF.me != MASTER ) PF_MLock(); } while (0) 380 #define MUNLOCK(x) do { if ( PF.me != MASTER ) PF_MUnlock(); } while (0) 395 #ifdef TERMMALLOCDEBUG 396 extern WORD **DebugHeap1, **DebugHeap2;
404 extern VOID setSignalHandlers(VOID);
405 extern UBYTE *CodeToLine(WORD,UBYTE *);
406 extern UBYTE *AddArrayIndex(WORD ,UBYTE *);
410 extern UBYTE *StrCopy(UBYTE *,UBYTE *);
411 extern UBYTE *WrtPower(UBYTE *,WORD);
412 extern WORD AccumGCD(
PHEAD UWORD *,WORD *,UWORD *,WORD);
415 extern WORD AddLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
416 extern WORD AddPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
418 extern WORD AddRat(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
419 extern VOID AddToLine(UBYTE *);
420 extern WORD AddWild(
PHEAD WORD,WORD,WORD);
421 extern WORD BigLong(UWORD *,WORD,UWORD *,WORD);
422 extern WORD BinomGen(
PHEAD WORD *,WORD,WORD **,WORD,WORD,WORD,WORD,WORD,UWORD *,WORD);
423 extern WORD CheckWild(
PHEAD WORD,WORD,WORD,WORD *);
424 extern WORD Chisholm(
PHEAD WORD *,WORD);
425 extern WORD CleanExpr(WORD);
426 extern VOID CleanUp(WORD);
427 extern VOID ClearWild(PHEAD0);
428 extern WORD CompareFunctions(WORD *,WORD *);
429 extern WORD Commute(WORD *,WORD *);
430 extern WORD DetCommu(WORD *);
431 extern WORD DoesCommu(WORD *);
432 extern int CompArg(WORD *,WORD *);
433 extern WORD
CompCoef(WORD *, WORD *);
434 extern WORD CompGroup(
PHEAD WORD,WORD **,WORD *,WORD *,WORD);
436 extern WORD CountDo(WORD *,WORD *);
437 extern WORD CountFun(WORD *,WORD *);
438 extern WORD DimensionSubterm(WORD *);
439 extern WORD DimensionTerm(WORD *);
440 extern WORD DimensionExpression(
PHEAD WORD *);
442 extern WORD DeleteStore(WORD);
443 extern WORD DetCurDum(
PHEAD WORD *);
444 extern VOID DetVars(WORD *,WORD);
446 extern WORD DivLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *,UWORD *,WORD *);
447 extern WORD DivRat(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
448 extern WORD Divvy(
PHEAD UWORD *,WORD *,UWORD *,WORD);
449 extern WORD DoDelta(WORD *);
450 extern WORD DoDelta3(
PHEAD WORD *,WORD);
451 extern WORD TestPartitions(
PHEAD WORD *,
PARTI *);
452 extern WORD DoPartitions(
PHEAD WORD *,WORD);
453 extern WORD DoTableExpansion(WORD *,WORD);
454 extern WORD DoDistrib(
PHEAD WORD *,WORD);
455 extern WORD DoShuffle(
PHEAD WORD *,WORD,WORD,WORD);
456 extern WORD DoPermutations(
PHEAD WORD *,WORD);
457 extern int Shuffle(
PHEAD WORD *, WORD *, WORD *);
458 extern int FinishShuffle(
PHEAD WORD *);
459 extern WORD DoStuffle(
PHEAD WORD *,WORD,WORD,WORD);
460 extern int Stuffle(
PHEAD WORD *, WORD *, WORD *);
461 extern int FinishStuffle(
PHEAD WORD *);
462 extern WORD *StuffRootAdd(WORD *, WORD *, WORD *);
463 extern WORD TestUse(WORD *,WORD);
464 extern DBASE *FindTB(UBYTE *);
465 extern int CheckTableDeclarations(
DBASE *);
466 extern WORD Apply(WORD *,WORD);
467 extern int ApplyExec(WORD *,
int,WORD);
468 extern WORD ApplyReset(WORD);
469 extern WORD TableReset(VOID);
470 extern VOID ReWorkT(WORD *,WORD *,WORD);
471 extern WORD GetIfDollarNum(WORD *, WORD *);
472 extern int FindVar(WORD *,WORD *);
473 extern WORD DoIfStatement(
PHEAD WORD *,WORD *);
474 extern WORD
DoOnePow(
PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD,WORD *);
475 extern void DoRevert(WORD *,WORD *);
476 extern WORD DoSumF1(
PHEAD WORD *,WORD *,WORD,WORD);
477 extern WORD DoSumF2(
PHEAD WORD *,WORD *,WORD,WORD);
478 extern WORD DoTheta(
PHEAD WORD *);
480 extern WORD EntVar(WORD,UBYTE *,WORD,WORD,WORD,WORD);
481 extern WORD EpfCon(
PHEAD WORD *,WORD *,WORD,WORD);
482 extern WORD EpfFind(
PHEAD WORD *,WORD *);
483 extern WORD EpfGen(WORD,WORD *,WORD *,WORD *,WORD);
484 extern WORD EqualArg(WORD *,WORD,WORD);
485 extern WORD Evaluate(UBYTE **);
486 extern int Factorial(
PHEAD WORD,UWORD *,WORD *);
487 extern int Bernoulli(WORD,UWORD *,WORD *);
488 extern int FactorIn(
PHEAD WORD *,WORD);
489 extern int FactorInExpr(
PHEAD WORD *,WORD);
490 extern WORD FindAll(
PHEAD WORD *,WORD *,WORD,WORD *);
491 extern WORD FindMulti(
PHEAD WORD *,WORD *);
492 extern WORD FindOnce(
PHEAD WORD *,WORD *);
493 extern WORD FindOnly(
PHEAD WORD *,WORD *);
494 extern WORD FindRest(
PHEAD WORD *,WORD *);
495 extern WORD FindSpecial(WORD *);
496 extern WORD FindrNumber(WORD,
VARRENUM *);
497 extern VOID FiniLine(VOID);
500 extern VOID FunLevel(
PHEAD WORD *);
501 extern VOID AdjustRenumScratch(PHEAD0);
503 extern WORD GcdLong(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
504 extern WORD LcmLong(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
505 extern VOID GCD(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
506 extern ULONG GCD2(ULONG,ULONG);
508 extern WORD GetBinom(UWORD *,WORD *,WORD,WORD);
510 extern WORD GetLong(UBYTE *,UWORD *,WORD *);
511 extern WORD GetMoreTerms(WORD *);
512 extern WORD GetMoreFromMem(WORD *,WORD **);
515 extern WORD GetTerm(
PHEAD WORD *);
516 extern WORD Glue(
PHEAD WORD *,WORD *,WORD *,WORD);
518 extern VOID IniLine(WORD);
519 extern WORD IniVars(VOID);
520 extern VOID Initialize(VOID);
522 extern VOID LongToLine(UWORD *,WORD);
523 extern WORD MakeDirty(WORD *,WORD *,WORD);
524 extern VOID MarkDirty(WORD *,WORD);
525 extern VOID PolyFunDirty(
PHEAD WORD *);
526 extern VOID PolyFunClean(
PHEAD WORD *);
527 extern WORD MakeModTable(VOID);
528 extern WORD MatchE(
PHEAD WORD *,WORD *,WORD *,WORD);
529 extern int MatchCy(
PHEAD WORD *,WORD *,WORD *,WORD);
530 extern int FunMatchCy(
PHEAD WORD *,WORD *,WORD *,WORD);
531 extern int FunMatchSy(
PHEAD WORD *,WORD *,WORD *,WORD);
532 extern int MatchArgument(
PHEAD WORD *,WORD *);
533 extern WORD MatchFunction(
PHEAD WORD *,WORD *,WORD *);
535 extern WORD MesCerr(
char *, UBYTE *);
536 extern WORD MesComp(
char *, UBYTE *, UBYTE *);
537 extern WORD Modulus(WORD *);
538 extern VOID MoveDummies(
PHEAD WORD *,WORD);
539 extern WORD MulLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
540 extern WORD MulRat(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
541 extern WORD Mully(
PHEAD UWORD *,WORD *,UWORD *,WORD);
542 extern WORD MultDo(
PHEAD WORD *,WORD *);
544 extern WORD ExtraSymbol(WORD,WORD,WORD,WORD *,WORD *);
545 extern WORD Normalize(
PHEAD WORD *);
546 extern WORD BracketNormalize(
PHEAD WORD *);
547 extern VOID DropCoefficient(
PHEAD WORD *);
548 extern VOID DropSymbols(
PHEAD WORD *);
549 extern int PutInside(
PHEAD WORD *, WORD *);
550 extern WORD OpenTemp(VOID);
551 extern VOID Pack(UWORD *,WORD *,UWORD *,WORD );
553 extern WORD Permute(
PERM *,WORD);
554 extern WORD PermuteP(
PERMP *,WORD);
556 extern WORD PopVariables(VOID);
559 extern WORD Product(UWORD *,WORD *,WORD);
560 extern VOID PrtLong(UWORD *,WORD,UBYTE *);
561 extern VOID PrtTerms(VOID);
562 extern VOID PrintRunningTime(VOID);
563 extern LONG GetRunningTime(VOID);
564 extern WORD PutBracket(
PHEAD WORD *);
568 extern UWORD Quotient(UWORD *,WORD *,WORD);
569 extern WORD RaisPow(
PHEAD UWORD *,WORD *,UWORD);
571 extern WORD RaisPowMod (WORD, WORD, WORD);
575 extern int GetLongModInverses(
PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *);
576 extern VOID RatToLine(UWORD *,WORD);
577 extern WORD RatioFind(
PHEAD WORD *,WORD *);
578 extern WORD RatioGen(
PHEAD WORD *,WORD *,WORD,WORD);
579 extern WORD ReNumber(
PHEAD WORD *);
580 extern WORD ReadSnum(UBYTE **);
581 extern WORD Remain10(UWORD *,WORD *);
582 extern WORD Remain4(UWORD *,WORD *);
583 extern WORD ResetScratch(VOID);
584 extern WORD ResolveSet(
PHEAD WORD *,WORD *,WORD *);
585 extern WORD RevertScratch(VOID);
586 extern WORD ScanFunctions(
PHEAD WORD *,WORD *,WORD);
592 extern WORD Simplify(
PHEAD UWORD *,WORD *,UWORD *,WORD *);
594 extern FILE *LocateBase(
char **,
char **);
601 extern VOID SubPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
602 extern VOID Substitute(
PHEAD WORD *,WORD *,WORD);
603 extern WORD SymFind(
PHEAD WORD *,WORD *);
604 extern WORD SymGen(
PHEAD WORD *,WORD *,WORD,WORD);
605 extern WORD Symmetrize(
PHEAD WORD *,WORD *,WORD,WORD,WORD);
606 extern int FullSymmetrize(
PHEAD WORD *,
int);
607 extern WORD TakeModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
608 extern WORD TakeNormalModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
609 extern VOID TalToLine(UWORD);
610 extern WORD TenVec(
PHEAD WORD *,WORD *,WORD,WORD);
611 extern WORD TenVecFind(
PHEAD WORD *,WORD *);
613 extern VOID TestDrop(VOID);
614 extern VOID PutInVflags(WORD);
618 extern LONG TimeChildren(WORD);
620 extern LONG Timer(
int);
621 extern int GetTimerInfo(LONG **,LONG **);
622 extern void WriteTimerInfo(LONG *,LONG *);
623 extern LONG GetWorkerTimes(VOID);
625 extern VOID TokenToLine(UBYTE *);
626 extern WORD Trace4(
PHEAD WORD *,WORD *,WORD,WORD);
628 extern WORD Trace4no(WORD,WORD *,
TRACES *);
629 extern WORD TraceFind(
PHEAD WORD *,WORD *);
630 extern WORD TraceN(
PHEAD WORD *,WORD *,WORD,WORD);
632 extern WORD TraceNno(WORD,WORD *,
TRACES *);
633 extern WORD Traces(
PHEAD WORD *,WORD *,WORD,WORD);
634 extern WORD Trick(WORD *,
TRACES *);
635 extern WORD TryDo(
PHEAD WORD *,WORD *,WORD);
636 extern VOID UnPack(UWORD *,WORD,WORD *,WORD *);
637 extern WORD VarStore(UBYTE *,WORD,WORD,WORD);
638 extern WORD WildFill(
PHEAD WORD *,WORD *,WORD *);
639 extern WORD WriteAll(VOID);
640 extern WORD WriteOne(UBYTE *,
int,
int);
641 extern VOID WriteArgument(WORD *);
642 extern WORD WriteExpression(WORD *,LONG);
643 extern WORD WriteInnerTerm(WORD *,WORD);
644 extern VOID WriteLists(VOID);
645 extern VOID WriteSetup(VOID);
647 extern WORD WriteSubTerm(WORD *,WORD);
648 extern WORD WriteTerm(WORD *,WORD *,WORD,WORD,WORD);
649 extern WORD execarg(
PHEAD WORD *,WORD);
650 extern WORD execterm(
PHEAD WORD *,WORD);
651 extern VOID SpecialCleanup(PHEAD0);
652 extern void SetMods();
653 extern void UnSetMods();
657 extern WORD DoExecute(WORD,WORD);
659 extern VOID Warning(
char *);
660 extern VOID HighWarning(
char *);
661 extern int SpareTable(
TABLES);
663 extern UBYTE *strDup1(UBYTE *,
char *);
664 extern VOID *Malloc(LONG);
665 extern VOID *Malloc1(LONG,
const char *);
666 extern int DoTail(
int,UBYTE **);
667 extern int OpenInput(VOID);
668 extern int PutPreVar(UBYTE *,UBYTE *,UBYTE *,
int);
669 extern VOID Error0(
char *);
670 extern VOID Error1(
char *,UBYTE *);
671 extern VOID Error2(
char *,
char *,UBYTE *);
672 extern UBYTE ReadFromStream(
STREAM *);
673 extern UBYTE GetFromStream(
STREAM *);
674 extern UBYTE LookInStream(
STREAM *);
675 extern STREAM *OpenStream(UBYTE *,
int,
int,
int);
676 extern int LocateFile(UBYTE **,
int);
678 extern VOID PositionStream(
STREAM *,LONG);
679 extern int ReverseStatements(
STREAM *);
680 extern int ProcessOption(UBYTE *,UBYTE *,
int);
681 extern int DoSetups(VOID);
682 extern VOID Terminate(
int);
684 extern int AddName(
NAMETREE *,UBYTE *,WORD,WORD,
int *);
685 extern int GetName(
NAMETREE *,UBYTE *,WORD *,
int);
686 extern int GetLastExprName(UBYTE *,WORD *);
687 extern int GetAutoName(UBYTE *,WORD *);
688 extern int GetVar(UBYTE *,WORD *,WORD *,
int,
int);
689 extern int MakeDubious(
NAMETREE *,UBYTE *,WORD *);
690 extern int GetOName(
NAMETREE *,UBYTE *,WORD *,
int);
692 extern VOID DumpNode(
NAMETREE *,WORD,WORD);
693 extern VOID LinkTree(
NAMETREE *,WORD,WORD);
695 extern int CompactifyTree(
NAMETREE *,WORD);
696 extern NAMETREE *MakeNameTree(VOID);
697 extern VOID FreeNameTree(
NAMETREE *);
698 extern int AddExpression(UBYTE *,
int,
int);
699 extern int AddSymbol(UBYTE *,
int,
int,
int,
int);
700 extern int AddDollar(UBYTE *,WORD,WORD *,LONG);
701 extern int ReplaceDollar(WORD,WORD,WORD *,LONG);
702 extern int DollarRaiseLow(UBYTE *,LONG);
703 extern int AddVector(UBYTE *,
int,
int);
704 extern int AddDubious(UBYTE *);
705 extern int AddIndex(UBYTE *,
int,
int);
706 extern UBYTE *DoDimension(UBYTE *,
int *,
int *);
707 extern int AddFunction(UBYTE *,
int,
int,
int,
int,
int,
int,
int);
708 extern int CoCommuteInSet(UBYTE *);
709 extern int CoFunction(UBYTE *,
int,
int);
710 extern int TestName(UBYTE *);
711 extern int AddSet(UBYTE *,WORD);
712 extern int DoElements(UBYTE *,
SETS,UBYTE *);
713 extern int DoTempSet(UBYTE *,UBYTE *);
714 extern int NameConflict(
int,UBYTE *);
715 extern int OpenFile(
char *);
716 extern int OpenAddFile(
char *);
717 extern int ReOpenFile(
char *);
718 extern int CreateFile(
char *);
719 extern int CreateLogFile(
char *);
720 extern VOID CloseFile(
int);
721 extern int CopyFile(
char *,
char *);
722 extern int CreateHandle(VOID);
723 extern LONG ReadFile(
int,UBYTE *,LONG);
725 extern LONG WriteFileToFile(
int,UBYTE *,LONG);
726 extern VOID SeekFile(
int,
POSITION *,
int);
727 extern LONG TellFile(
int);
728 extern void FlushFile(
int);
729 extern int GetPosFile(
int,fpos_t *);
730 extern int SetPosFile(
int,fpos_t *);
731 extern VOID SynchFile(
int);
732 extern VOID TruncateFile(
int);
733 extern int GetChannel(
char *);
734 extern int GetAppendChannel(
char *);
735 extern int CloseChannel(
char *);
736 extern VOID inictable(VOID);
737 extern KEYWORD *findcommand(UBYTE *);
739 extern VOID StartFiles(VOID);
740 extern UBYTE *MakeDate(VOID);
741 extern VOID PreProcessor(VOID);
742 extern VOID *FromList(
LIST *);
743 extern VOID *From0List(
LIST *);
744 extern VOID *FromVarList(
LIST *);
745 extern int DoubleList(VOID ***,
int *,
int,
char *);
746 extern int DoubleLList(VOID ***,LONG *,
int,
char *);
747 extern void DoubleBuffer(
void **,
void **,
int,
char *);
748 extern void ExpandBuffer(
void **,LONG *,
int);
749 extern LONG iexp(LONG,
int);
750 extern int IsLikeVector(WORD *);
751 extern int AreArgsEqual(WORD *,WORD *);
752 extern int CompareArgs(WORD *,WORD *);
753 extern UBYTE *SkipField(UBYTE *,
int);
754 extern int StrCmp(UBYTE *,UBYTE *);
755 extern int StrICmp(UBYTE *,UBYTE *);
756 extern int StrHICmp(UBYTE *,UBYTE *);
757 extern int StrICont(UBYTE *,UBYTE *);
758 extern int ConWord(UBYTE *,UBYTE *);
759 extern int StrLen(UBYTE *);
760 extern UBYTE *GetPreVar(UBYTE *,
int);
761 extern void ToGeneral(WORD *,WORD *,WORD);
762 extern WORD ToPolyFunGeneral(
PHEAD WORD *);
763 extern int ToFast(WORD *,WORD *);
765 extern int RecalcSetups(VOID);
766 extern int AllocSetups(VOID);
767 extern SORTING *AllocSort(LONG,LONG,LONG,LONG,
int,
int,LONG);
768 extern VOID AllocSortFileName(
SORTING *);
769 extern UBYTE *LoadInputFile(UBYTE *,
int);
770 extern UBYTE GetInput(VOID);
771 extern VOID ClearPushback(VOID);
772 extern UBYTE GetChar(
int);
773 extern VOID CharOut(UBYTE);
774 extern VOID UnsetAllowDelay(VOID);
775 extern VOID PopPreVars(
int);
776 extern VOID IniModule(
int);
777 extern VOID IniSpecialModule(
int);
778 extern int ModuleInstruction(
int *,
int *);
779 extern int PreProInstruction(VOID);
780 extern int LoadInstruction(
int);
781 extern int LoadStatement(
int);
784 extern int DoDefine(UBYTE *);
785 extern int DoRedefine(UBYTE *);
787 extern int TheUndefine(UBYTE *);
788 extern int ClearMacro(UBYTE *);
789 extern int DoUndefine(UBYTE *);
790 extern int DoInclude(UBYTE *);
791 extern int DoReverseInclude(UBYTE *);
792 extern int Include(UBYTE *,
int);
794 extern int DoExternal(UBYTE *);
795 extern int DoToExternal(UBYTE *);
796 extern int DoFromExternal(UBYTE *);
797 extern int DoPrompt(UBYTE *);
798 extern int DoSetExternal(UBYTE *);
800 extern int DoSetExternalAttr(UBYTE *);
802 extern int DoRmExternal(UBYTE *);
804 extern int DoFactDollar(UBYTE *);
805 extern WORD GetDollarNumber(UBYTE **,
DOLLARS);
806 extern int DoSetRandom(UBYTE *);
807 extern int DoOptimize(UBYTE *);
808 extern int DoClearOptimize(UBYTE *);
809 extern int DoSkipExtraSymbols(UBYTE *);
810 extern int DoMessage(UBYTE *);
811 extern int DoPreOut(UBYTE *);
812 extern int DoPreAppend(UBYTE *);
813 extern int DoPreCreate(UBYTE *);
814 extern int DoPreAssign(UBYTE *);
815 extern int DoPreBreak(UBYTE *);
816 extern int DoPreDefault(UBYTE *);
817 extern int DoPreSwitch(UBYTE *);
818 extern int DoPreEndSwitch(UBYTE *);
819 extern int DoPreCase(UBYTE *);
820 extern int DoPreShow(UBYTE *);
821 extern int DoPreExchange(UBYTE *);
822 extern int DoSystem(UBYTE *);
823 extern int DoPipe(UBYTE *);
824 extern VOID StartPrepro(VOID);
825 extern int DoIfdef(UBYTE *,
int);
826 extern int DoElse(UBYTE *);
827 extern int DoElseif(UBYTE *);
828 extern int DoEndif(UBYTE *);
829 extern int DoTerminate(UBYTE *);
830 extern int DoIf(UBYTE *);
831 extern int DoCall(UBYTE *);
832 extern int DoDebug(UBYTE *);
833 extern int DoDo(UBYTE *);
834 extern int DoBreakDo(UBYTE *);
835 extern int DoEnddo(UBYTE *);
836 extern int DoEndprocedure(UBYTE *);
837 extern int DoInside(UBYTE *);
838 extern int DoEndInside(UBYTE *);
839 extern int DoProcedure(UBYTE *);
840 extern int DoPrePrintTimes(UBYTE *);
841 extern int DoPreWrite(UBYTE *);
842 extern int DoPreClose(UBYTE *);
843 extern int DoPreRemove(UBYTE *);
844 extern int DoCommentChar(UBYTE *);
845 extern int DoPrcExtension(UBYTE *);
846 extern int DoPreReset(UBYTE *);
847 extern VOID WriteString(
int,UBYTE *,
int);
848 extern VOID WriteUnfinString(
int,UBYTE *,
int);
849 extern UBYTE *AddToString(UBYTE *,UBYTE *,
int);
850 extern UBYTE *PreCalc(VOID);
851 extern UBYTE *PreEval(UBYTE *,LONG *);
852 extern VOID NumToStr(UBYTE *,LONG);
853 extern int PreCmp(
int,
int,UBYTE *,
int,
int,UBYTE *,
int);
854 extern int PreEq(
int,
int,UBYTE *,
int,
int,UBYTE *,
int);
855 extern UBYTE *pParseObject(UBYTE *,
int *,LONG *);
856 extern UBYTE *PreIfEval(UBYTE *,
int *);
857 extern int EvalPreIf(UBYTE *);
858 extern int PreLoad(
PRELOAD *,UBYTE *,UBYTE *,
int,
char *);
859 extern int PreSkip(UBYTE *,UBYTE *,
int);
860 extern UBYTE *EndOfToken(UBYTE *);
861 extern VOID SetSpecialMode(
int,
int);
862 extern VOID MakeGlobal(VOID);
863 extern int ExecModule(
int);
864 extern int ExecStore(VOID);
865 extern VOID FullCleanUp(VOID);
866 extern int DoExecStatement(VOID);
867 extern int DoPipeStatement(VOID);
868 extern int DoPolyfun(UBYTE *);
869 extern int DoPolyratfun(UBYTE *);
870 extern int CompileStatement(UBYTE *);
871 extern UBYTE *ToToken(UBYTE *);
872 extern int GetDollar(UBYTE *);
873 extern int MesWork(VOID);
874 extern int MesPrint(
const char *,...);
875 extern int MesCall(
char *);
876 extern UBYTE *NumCopy(WORD,UBYTE *);
877 extern char *LongCopy(LONG,
char *);
878 extern char *LongLongCopy(off_t *,
char *);
879 extern VOID ReserveTempFiles(
int);
880 extern VOID PrintTerm(WORD *,
char *);
881 extern VOID PrintTermC(WORD *,
char *);
882 extern VOID PrintSubTerm(WORD *,
char *);
883 extern VOID PrintWords(WORD *,LONG);
884 extern void PrintSeq(WORD *,
char *);
885 extern int ExpandTripleDots(
int);
886 extern LONG
ComPress(WORD **,LONG *);
889 #define M_alloc(x) malloc((size_t)(x)) 891 extern void M_free(VOID *,
const char *);
892 extern void ClearWildcardNames(VOID);
893 extern int AddWildcardName(UBYTE *);
894 extern int GetWildcardName(UBYTE *);
895 extern void Globalize(
int);
896 extern void ResetVariables(
int);
897 extern void AddToPreTypes(
int);
898 extern void MessPreNesting(
int);
899 extern LONG GetStreamPosition(
STREAM *);
902 extern WORD *
AddRHS(
int,
int);
903 extern int AddNtoL(
int,WORD *);
904 extern int AddNtoC(
int,
int,WORD *,
int);
905 extern VOID DoubleIfBuffers(VOID);
906 extern STREAM *CreateStream(UBYTE *);
908 extern int setonoff(UBYTE *,
int *,
int,
int);
909 extern int DoPrint(UBYTE *,
int);
910 extern int SetExpr(UBYTE *,
int,
int);
911 extern void AddToCom(
int,WORD *);
912 extern int Add2ComStrings(
int,WORD *,UBYTE *,UBYTE *);
913 extern int DoSymmetrize(UBYTE *,
int);
914 extern int DoArgument(UBYTE *,
int);
915 extern int ArgFactorize(
PHEAD WORD *,WORD *);
922 extern int ArgSymbolMerge(WORD *, WORD *);
923 extern int ArgDotproductMerge(WORD *, WORD *);
925 extern int DoBrackets(UBYTE *,
int);
926 extern int DoPutInside(UBYTE *,
int);
927 extern WORD *CountComp(UBYTE *,WORD *);
928 extern int CoAntiBracket(UBYTE *);
929 extern int CoAntiSymmetrize(UBYTE *);
930 extern int DoArgPlode(UBYTE *,
int);
931 extern int CoArgExplode(UBYTE *);
932 extern int CoArgImplode(UBYTE *);
933 extern int CoArgument(UBYTE *);
934 extern int CoInside(UBYTE *);
935 extern int ExecInside(UBYTE *);
936 extern int CoInExpression(UBYTE *);
937 extern int CoInParallel(UBYTE *);
938 extern int CoNotInParallel(UBYTE *);
939 extern int DoInParallel(UBYTE *,
int);
940 extern int CoEndInExpression(UBYTE *);
941 extern int CoBracket(UBYTE *);
942 extern int CoPutInside(UBYTE *);
943 extern int CoAntiPutInside(UBYTE *);
944 extern int CoMultiBracket(UBYTE *);
945 extern int CoCFunction(UBYTE *);
946 extern int CoCTensor(UBYTE *);
947 extern int CoCollect(UBYTE *);
948 extern int CoCompress(UBYTE *);
949 extern int CoContract(UBYTE *);
950 extern int CoCycleSymmetrize(UBYTE *);
951 extern int CoDelete(UBYTE *);
952 extern int CoTableBase(UBYTE *);
953 extern int CoApply(UBYTE *);
954 extern int CoDenominators(UBYTE *);
955 extern int CoDimension(UBYTE *);
956 extern int CoDiscard(UBYTE *);
957 extern int CoDisorder(UBYTE *);
958 extern int CoDrop(UBYTE *);
959 extern int CoDropCoefficient(UBYTE *);
960 extern int CoDropSymbols(UBYTE *);
961 extern int CoElse(UBYTE *);
962 extern int CoElseIf(UBYTE *);
963 extern int CoEndArgument(UBYTE *);
964 extern int CoEndInside(UBYTE *);
965 extern int CoEndIf(UBYTE *);
966 extern int CoEndRepeat(UBYTE *);
967 extern int CoEndTerm(UBYTE *);
968 extern int CoEndWhile(UBYTE *);
969 extern int CoExit(UBYTE *);
970 extern int CoFactArg(UBYTE *);
971 extern int CoFactDollar(UBYTE *);
972 extern int CoFactorize(UBYTE *);
973 extern int CoNFactorize(UBYTE *);
974 extern int CoUnFactorize(UBYTE *);
975 extern int CoNUnFactorize(UBYTE *);
976 extern int DoFactorize(UBYTE *,
int);
977 extern int CoFill(UBYTE *);
978 extern int CoFillExpression(UBYTE *);
979 extern int CoFixIndex(UBYTE *);
980 extern int CoFormat(UBYTE *);
981 extern int CoGlobal(UBYTE *);
982 extern int CoGlobalFactorized(UBYTE *);
983 extern int CoGoTo(UBYTE *);
984 extern int CoId(UBYTE *);
985 extern int CoIdNew(UBYTE *);
986 extern int CoIdOld(UBYTE *);
987 extern int CoIf(UBYTE *);
988 extern int CoIfMatch(UBYTE *);
989 extern int CoIfNoMatch(UBYTE *);
990 extern int CoIndex(UBYTE *);
991 extern int CoInsideFirst(UBYTE *);
992 extern int CoKeep(UBYTE *);
993 extern int CoLabel(UBYTE *);
994 extern int CoLoad(UBYTE *);
995 extern int CoLocal(UBYTE *);
996 extern int CoLocalFactorized(UBYTE *);
997 extern int CoMany(UBYTE *);
998 extern int CoMerge(UBYTE *);
999 extern int CoStuffle(UBYTE *);
1000 extern int CoMetric(UBYTE *);
1001 extern int CoModOption(UBYTE *);
1002 extern int CoModuleOption(UBYTE *);
1003 extern int CoModulus(UBYTE *);
1004 extern int CoMulti(UBYTE *);
1005 extern int CoMultiply(UBYTE *);
1006 extern int CoNFunction(UBYTE *);
1007 extern int CoNPrint(UBYTE *);
1008 extern int CoNTensor(UBYTE *);
1009 extern int CoNWrite(UBYTE *);
1010 extern int CoNoDrop(UBYTE *);
1011 extern int CoNoSkip(UBYTE *);
1012 extern int CoNormalize(UBYTE *);
1013 extern int CoMakeInteger(UBYTE *);
1014 extern int CoFlags(UBYTE *,
int);
1015 extern int CoOff(UBYTE *);
1016 extern int CoOn(UBYTE *);
1017 extern int CoOnce(UBYTE *);
1018 extern int CoOnly(UBYTE *);
1019 extern int CoOptimizeOption(UBYTE *);
1020 extern int CoOptimize(UBYTE *);
1021 extern int CoPolyFun(UBYTE *);
1022 extern int CoPolyRatFun(UBYTE *);
1023 extern int CoPrint(UBYTE *);
1024 extern int CoPrintB(UBYTE *);
1025 extern int CoProperCount(UBYTE *);
1026 extern int CoUnitTrace(UBYTE *);
1027 extern int CoRCycleSymmetrize(UBYTE *);
1028 extern int CoRatio(UBYTE *);
1029 extern int CoRedefine(UBYTE *);
1030 extern int CoRenumber(UBYTE *);
1031 extern int CoRepeat(UBYTE *);
1032 extern int CoSave(UBYTE *);
1033 extern int CoSelect(UBYTE *);
1034 extern int CoSet(UBYTE *);
1035 extern int CoSetExitFlag(UBYTE *);
1036 extern int CoSkip(UBYTE *);
1037 extern int CoProcessBucket(UBYTE *);
1038 extern int CoPushHide(UBYTE *);
1039 extern int CoPopHide(UBYTE *);
1040 extern int CoHide(UBYTE *);
1041 extern int CoIntoHide(UBYTE *);
1042 extern int CoNoHide(UBYTE *);
1043 extern int CoUnHide(UBYTE *);
1044 extern int CoNoUnHide(UBYTE *);
1045 extern int CoSort(UBYTE *);
1046 extern int CoSplitArg(UBYTE *);
1047 extern int CoSplitFirstArg(UBYTE *);
1048 extern int CoSplitLastArg(UBYTE *);
1049 extern int CoSum(UBYTE *);
1050 extern int CoSymbol(UBYTE *);
1051 extern int CoSymmetrize(UBYTE *);
1052 extern int DoTable(UBYTE *,
int);
1053 extern int CoTable(UBYTE *);
1054 extern int CoTerm(UBYTE *);
1055 extern int CoNTable(UBYTE *);
1056 extern int CoCTable(UBYTE *);
1057 extern void EmptyTable(
TABLES);
1058 extern int CoToTensor(UBYTE *);
1059 extern int CoToVector(UBYTE *);
1060 extern int CoTrace4(UBYTE *);
1061 extern int CoTraceN(UBYTE *);
1062 extern int CoChisholm(UBYTE *);
1063 extern int CoTransform(UBYTE *);
1064 extern int CoClearTable(UBYTE *);
1065 extern int DoChain(UBYTE *,
int);
1066 extern int CoChainin(UBYTE *);
1067 extern int CoChainout(UBYTE *);
1068 extern int CoTryReplace(UBYTE *);
1069 extern int CoVector(UBYTE *);
1070 extern int CoWhile(UBYTE *);
1071 extern int CoWrite(UBYTE *);
1072 extern int CoAuto(UBYTE *);
1073 extern int CoTBaddto(UBYTE *);
1074 extern int CoTBaudit(UBYTE *);
1075 extern int CoTBcleanup(UBYTE *);
1076 extern int CoTBcreate(UBYTE *);
1077 extern int CoTBenter(UBYTE *);
1078 extern int CoTBhelp(UBYTE *);
1079 extern int CoTBload(UBYTE *);
1080 extern int CoTBoff(UBYTE *);
1081 extern int CoTBon(UBYTE *);
1082 extern int CoTBopen(UBYTE *);
1083 extern int CoTBreplace(UBYTE *);
1084 extern int CoTBuse(UBYTE *);
1085 extern int CoTestUse(UBYTE *);
1086 extern int CoThreadBucket(UBYTE *);
1087 extern int AddComString(
int,WORD *,UBYTE *,
int);
1088 extern int CompileAlgebra(UBYTE *,
int,WORD *);
1089 extern int IsIdStatement(UBYTE *);
1090 extern UBYTE *IsRHS(UBYTE *,UBYTE);
1091 extern int ParenthesesTest(UBYTE *);
1092 extern int tokenize(UBYTE *,WORD);
1093 extern void WriteTokens(SBYTE *);
1094 extern int simp1token(SBYTE *);
1095 extern int simpwtoken(SBYTE *);
1096 extern int simp2token(SBYTE *);
1097 extern int simp3atoken(SBYTE *,
int);
1098 extern int simp3btoken(SBYTE *,
int);
1099 extern int simp4token(SBYTE *);
1100 extern int simp5token(SBYTE *,
int);
1101 extern int simp6token(SBYTE *,
int);
1102 extern UBYTE *SkipAName(UBYTE *);
1103 extern int TestTables(VOID);
1104 extern int GetLabel(UBYTE *);
1105 extern int CoIdExpression(UBYTE *,
int);
1106 extern int CoAssign(UBYTE *);
1107 extern int DoExpr(UBYTE *,
int,
int);
1108 extern int CompileSubExpressions(SBYTE *);
1109 extern int CodeGenerator(SBYTE *);
1110 extern int CompleteTerm(WORD *,UWORD *,UWORD *,WORD,WORD,
int);
1111 extern int CodeFactors(SBYTE *s);
1112 extern WORD GenerateFactors(WORD,WORD);
1113 extern int InsTree(
int,
int);
1114 extern int FindTree(
int,WORD *);
1115 extern void RedoTree(
CBUF *,
int);
1116 extern void ClearTree(
int);
1117 extern int CatchDollar(
int);
1118 extern int AssignDollar(
PHEAD WORD *,WORD);
1119 extern UBYTE *WriteDollarToBuffer(WORD,WORD);
1120 extern UBYTE *WriteDollarFactorToBuffer(WORD,WORD,WORD);
1121 extern void AddToDollarBuffer(UBYTE *);
1122 extern void TermAssign(WORD *);
1123 extern void WildDollars(
PHEAD WORD *);
1124 extern LONG numcommute(WORD *,LONG *);
1125 extern int FullRenumber(
PHEAD WORD *,WORD);
1126 extern int Lus(WORD *,WORD,WORD,WORD,WORD,WORD);
1127 extern int FindLus(
int,
int,
int);
1128 extern int CoReplaceLoop(UBYTE *);
1129 extern int CoFindLoop(UBYTE *);
1130 extern int DoFindLoop(UBYTE *,
int);
1131 extern int CoFunPowers(UBYTE *);
1132 extern int SortTheList(
int *,
int);
1133 extern int MatchIsPossible(WORD *,WORD *);
1134 extern int StudyPattern(WORD *);
1135 extern WORD DolToTensor(
PHEAD WORD);
1136 extern WORD DolToFunction(
PHEAD WORD);
1137 extern WORD DolToVector(
PHEAD WORD);
1138 extern WORD DolToNumber(
PHEAD WORD);
1139 extern WORD DolToSymbol(
PHEAD WORD);
1140 extern WORD DolToIndex(
PHEAD WORD);
1141 extern LONG DolToLong(
PHEAD WORD);
1142 extern int DollarFactorize(
PHEAD WORD);
1143 extern int CoPrintTable(UBYTE *);
1144 extern int CoDeallocateTable(UBYTE *);
1145 extern void CleanDollarFactors(
DOLLARS);
1146 extern WORD *TakeDollarContent(
PHEAD WORD *,WORD **);
1149 extern int GetDolNum(
PHEAD WORD *, WORD *);
1152 extern int Optimize(WORD,
int);
1153 extern int ClearOptimize(VOID);
1154 extern int LoadOpti(WORD);
1155 extern int PutObject(WORD *,
int);
1156 extern void CleanOptiBuffer(VOID);
1157 extern int PrintOptima(WORD);
1158 extern int FindScratchName(VOID);
1159 extern WORD MaxPowerOpti(LONG);
1160 extern WORD HuntNumFactor(LONG,WORD *,
int);
1161 extern WORD HuntFactor(LONG,WORD *,
int);
1162 extern void HuntPairs(LONG,WORD);
1163 extern void HuntBrackets(LONG);
1164 extern int AddToOpti(WORD *,
int);
1165 extern LONG TestNewSca(LONG,WORD *,WORD *);
1166 extern void NormOpti(WORD *);
1167 extern void SortOpti(LONG);
1168 extern void SplitOpti(WORD **,LONG);
1169 extern void CombiOpti(VOID);
1170 extern int TakeLongRoot(UWORD *,WORD *,WORD);
1171 extern int TakeRatRoot(UWORD *,WORD *,WORD);
1172 extern int MakeRational(WORD ,WORD , WORD *, WORD *);
1173 extern int MakeLongRational(
PHEAD UWORD *,WORD ,UWORD *,WORD ,UWORD *,WORD *);
1174 extern void HuntPowers(LONG,WORD);
1175 extern void HuntNumBrackets(LONG);
1176 extern void ClearTableTree(
TABLES);
1177 extern int InsTableTree(
TABLES,WORD *);
1178 extern void RedoTableTree(
TABLES,
int);
1179 extern int FindTableTree(
TABLES,WORD *,
int);
1183 extern FILEHANDLE *AllocFileHandle(WORD,
char *);
1186 extern WORD *PolyRatFunSpecial(
PHEAD WORD *, WORD *);
1187 extern int InsideDollar(
PHEAD WORD *,WORD);
1190 extern int SetExprCases(
int,
int,
int);
1191 extern int TestSelect(WORD *,WORD *);
1192 extern VOID SubsInAll(PHEAD0);
1193 extern VOID TransferBuffer(
int,
int,
int);
1194 extern int TakeIDfunction(
PHEAD WORD *);
1195 extern int MakeSetupAllocs(VOID);
1196 extern int TryFileSetups(VOID);
1197 extern void ExchangeExpressions(
int,
int);
1198 extern void ExchangeDollars(
int,
int);
1199 extern int GetFirstBracket(WORD *,
int);
1200 extern int GetFirstTerm(WORD *,
int);
1201 extern int GetContent(WORD *,
int);
1202 extern int CleanupTerm(WORD *);
1203 extern WORD ContentMerge(
PHEAD WORD *,WORD *);
1204 extern UBYTE *PreIfDollarEval(UBYTE *,
int *);
1205 extern LONG TermsInDollar(WORD);
1206 extern LONG TermsInExpression(WORD);
1207 extern WORD *TranslateExpression(UBYTE *);
1208 extern int IsSetMember(WORD *,WORD);
1209 extern int IsMultipleOf(WORD *,WORD *);
1210 extern int TwoExprCompare(WORD *,WORD *,
int);
1211 extern void UpdatePositions(VOID);
1212 extern void M_check(VOID);
1213 extern void M_print(VOID);
1214 extern void M_check1(VOID);
1215 extern void PrintTime(VOID);
1217 extern POSITION *FindBracket(WORD,WORD *);
1219 extern void ClearBracketIndex(WORD);
1220 extern VOID OpenBracketIndex(WORD);
1221 extern int DoNoParallel(UBYTE *);
1222 extern int DoParallel(UBYTE *);
1223 extern int DoModSum(UBYTE *);
1224 extern int DoModMax(UBYTE *);
1225 extern int DoModMin(UBYTE *);
1226 extern int DoModLocal(UBYTE *);
1227 extern UBYTE *DoModDollar(UBYTE *,
int);
1228 extern int DoProcessBucket(UBYTE *);
1229 extern int DoinParallel(UBYTE *);
1230 extern int DonotinParallel(UBYTE *);
1233 extern int ChainIn(
PHEAD WORD *,WORD);
1234 extern int ChainOut(
PHEAD WORD *,WORD);
1235 extern int ArgumentImplode(
PHEAD WORD *,WORD *);
1236 extern int ArgumentExplode(
PHEAD WORD *,WORD *);
1237 extern int DenToFunction(WORD *,WORD);
1239 extern WORD HowMany(
PHEAD WORD *,WORD *);
1240 extern VOID RemoveDollars(VOID);
1241 extern LONG CountTerms1(PHEAD0);
1242 extern LONG TermsInBracket(
PHEAD WORD *,WORD);
1243 extern int Crash(VOID);
1245 extern char *str_dup(
char *);
1249 extern int ReadIndex(
DBASE *);
1250 extern int WriteIndexBlock(
DBASE *,MLONG);
1251 extern int WriteNamesBlock(
DBASE *,MLONG);
1252 extern int WriteIndex(
DBASE *);
1253 extern int WriteIniInfo(
DBASE *);
1254 extern int ReadIniInfo(
DBASE *);
1255 extern int AddToIndex(
DBASE *,MLONG);
1256 extern DBASE *GetDbase(
char *);
1257 extern DBASE *OpenDbase(
char *);
1258 extern char *ReadObject(
DBASE *,MLONG,
char *);
1259 extern char *ReadijObject(
DBASE *,MLONG,MLONG,
char *);
1260 extern int ExistsObject(
DBASE *,MLONG,
char *);
1261 extern int DeleteObject(
DBASE *,MLONG,
char *);
1262 extern int WriteObject(
DBASE *,MLONG,
char *,
char *,MLONG);
1263 extern MLONG AddObject(
DBASE *,MLONG,
char *,
char *);
1264 extern int Cleanup(
DBASE *);
1265 extern DBASE *NewDbase(
char *,MLONG);
1266 extern void FreeTableBase(
DBASE *);
1267 extern int ComposeTableNames(
DBASE *);
1268 extern int PutTableNames(
DBASE *);
1270 extern MLONG GetTableName(
DBASE *,
char *);
1271 extern MLONG FindTableNumber(
DBASE *,
char *);
1272 extern int TryEnvironment(VOID);
1278 extern int SetupAllInputGZIP(
SORTING *);
1283 extern VOID BeginIdentities(VOID);
1284 extern int WhoAmI(VOID);
1285 extern int StartAllThreads(
int);
1286 extern void StartHandleLock(VOID);
1287 extern VOID TerminateAllThreads(VOID);
1288 extern int GetAvailableThread(VOID);
1289 extern int ConditionalGetAvailableThread(VOID);
1290 extern int BalanceRunThread(
PHEAD int,WORD *,WORD);
1291 extern void WakeupThread(
int,
int);
1292 extern int MasterWait(VOID);
1293 extern int InParallelProcessor(VOID);
1294 extern int ThreadsProcessor(
EXPRESSIONS,WORD,WORD);
1295 extern int MasterMerge(VOID);
1296 extern int PutToMaster(
PHEAD WORD *);
1297 extern void SetWorkerFiles(VOID);
1298 extern int MakeThreadBuckets(
int,
int);
1299 extern int SendOneBucket(
int);
1300 extern int LoadOneThread(
int,
int,THREADBUCKET *,
int);
1301 extern void *RunSortBot(
void *);
1302 extern void MasterWaitAllSortBots(VOID);
1303 extern int SortBotMerge(PHEAD0);
1304 extern int SortBotOut(
PHEAD WORD *);
1305 extern void DefineSortBotTree(VOID);
1306 extern int SortBotMasterMerge(VOID);
1307 extern int SortBotWait(
int);
1308 extern void StartIdentity(VOID);
1309 extern void FinishIdentity(
void *);
1310 extern int SetIdentity(
int *);
1311 extern ALLPRIVATES *InitializeOneThread(
int);
1312 extern void FinalizeOneThread(
int);
1313 extern void ClearAllThreads(VOID);
1314 extern void *RunThread(
void *);
1315 extern void IAmAvailable(
int);
1316 extern int ThreadWait(
int);
1317 extern int ThreadClaimedBlock(
int);
1318 extern int GetThread(
int);
1319 extern int UpdateOneThread(
int);
1320 extern void MasterWaitAll(VOID);
1321 extern void MasterWaitAllBlocks(VOID);
1322 extern int MasterWaitThread(
int);
1323 extern void WakeupMasterFromThread(
int,
int);
1324 extern int LoadReadjusted(VOID);
1325 extern int IniSortBlocks(
int);
1326 extern int TreatIndexEntry(
PHEAD LONG);
1327 extern WORD GetTerm2(
PHEAD WORD *);
1328 extern void SetHideFiles(VOID);
1338 extern int DoPreAddSeparator(UBYTE *);
1339 extern int DoPreRmSeparator(UBYTE *);
1342 extern int openExternalChannel(UBYTE *,
int,UBYTE *,UBYTE *);
1343 extern int initPresetExternalChannels(UBYTE *,
int);
1344 extern int closeExternalChannel(
int);
1345 extern int selectExternalChannel(
int);
1346 extern int getCurrentExternalChannel(VOID);
1347 extern VOID closeAllExternalChannels(VOID);
1349 typedef int (*WRITEBUFTOEXTCHANNEL)(
char *,size_t);
1350 typedef int (*GETCFROMEXTCHANNEL)(VOID);
1351 typedef int (*SETTERMINATORFOREXTERNALCHANNEL)(
char *);
1352 typedef int (*SETKILLMODEFOREXTERNALCHANNEL)(int,int);
1353 typedef LONG (*WRITEFILE)(int,UBYTE *,LONG);
1354 typedef WORD (*COMPARE)(
PHEAD WORD *,WORD *,WORD);
1355 typedef WORD (*GETTERM)(
PHEAD WORD *);
1356 typedef WORD (*FINISHUFFLE)(
PHEAD WORD *);
1357 typedef WORD (*DO_UFFLE)(
PHEAD WORD *,WORD,WORD,WORD);
1359 #define CompareTerms ((COMPARE)AR.CompareRoutine) 1360 #define FiniShuffle ((FINISHUFFLE)AN.SHvar.finishuf) 1361 #define DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle) 1363 extern UBYTE *defineChannel(UBYTE*,
HANDLERS*);
1364 extern int writeToChannel(
int,UBYTE *,
HANDLERS*);
1365 #ifdef WITHEXTERNALCHANNEL 1366 extern LONG WriteToExternalChannel(
int,UBYTE *,LONG);
1368 extern int writeBufToExtChannelOk(
char *,
size_t);
1369 extern int getcFromExtChannelOk(VOID);
1370 extern int setKillModeForExternalChannelOk(
int,
int);
1371 extern int setTerminatorForExternalChannelOk(
char *);
1372 extern int getcFromExtChannelFailure(VOID);
1373 extern int setKillModeForExternalChannelFailure(
int,
int);
1374 extern int setTerminatorForExternalChannelFailure(
char *);
1375 extern int writeBufToExtChannelFailure(
char *,
size_t);
1377 extern int ReleaseTB(VOID);
1380 extern int TestFunFlag(
PHEAD WORD *);
1384 extern UWORD wranf(PHEAD0);
1385 extern UWORD iranf(
PHEAD UWORD);
1386 extern void iniwranf(PHEAD0);
1387 extern UBYTE *PreRandom(UBYTE *);
1389 extern WORD *PolyNormPoly (
PHEAD WORD);
1390 extern WORD *EvaluateGcd(
PHEAD WORD *);
1391 extern int TreatPolyRatFun(
PHEAD WORD *);
1396 extern UBYTE *
ReadSaveTerm32(UBYTE *,UBYTE *,UBYTE **,UBYTE *,UBYTE *,
int);
1407 extern VOID NumberMallocAddMemory(PHEAD0);
1408 extern VOID CacheNumberMallocAddMemory(PHEAD0);
1409 extern VOID TermMallocAddMemory(PHEAD0);
1410 #ifndef MEMORYMACROS 1411 extern WORD *TermMalloc2(
PHEAD char *text);
1412 extern VOID TermFree2(
PHEAD WORD *term,
char *text);
1413 extern UWORD *NumberMalloc2(
PHEAD char *text);
1414 extern UWORD *CacheNumberMalloc2(
PHEAD char *text);
1415 extern VOID NumberFree2(
PHEAD UWORD *NumberMem,
char *text);
1416 extern VOID CacheNumberFree2(
PHEAD UWORD *NumberMem,
char *text);
1420 extern VOID iniTools(VOID);
1423 extern WORD RunTransform(
PHEAD WORD *term, WORD *params);
1424 extern WORD RunEncode(
PHEAD WORD *fun, WORD *args, WORD *info);
1425 extern WORD RunDecode(
PHEAD WORD *fun, WORD *args, WORD *info);
1426 extern WORD RunReplace(
PHEAD WORD *fun, WORD *args, WORD *info);
1427 extern WORD RunImplode(WORD *fun, WORD *args);
1428 extern WORD RunExplode(
PHEAD WORD *fun, WORD *args);
1429 extern int TestArgNum(
int n,
int totarg, WORD *args);
1430 extern WORD PutArgInScratch(WORD *arg,UWORD *scrat);
1431 extern UBYTE *ReadRange(UBYTE *s, WORD *out,
int par);
1432 extern int FindRange(
PHEAD WORD *,WORD *,WORD *,WORD);
1433 extern WORD RunPermute(
PHEAD WORD *fun, WORD *args, WORD *info);
1434 extern WORD RunReverse(
PHEAD WORD *fun, WORD *args);
1435 extern WORD RunCycle(
PHEAD WORD *fun, WORD *args, WORD *info);
1436 extern WORD RunAddArg(
PHEAD WORD *fun, WORD *args);
1437 extern WORD RunMulArg(
PHEAD WORD *fun, WORD *args);
1438 extern WORD RunIsLyndon(
PHEAD WORD *fun, WORD *args,
int par);
1439 extern WORD RunToLyndon(
PHEAD WORD *fun, WORD *args,
int par);
1440 extern WORD RunDropArg(
PHEAD WORD *fun, WORD *args);
1441 extern WORD RunSelectArg(
PHEAD WORD *fun, WORD *args);
1442 extern WORD RunDedup(
PHEAD WORD *fun, WORD *args);
1444 extern int NormPolyTerm(
PHEAD WORD *);
1445 extern WORD ComparePoly(WORD *, WORD *, WORD);
1446 extern int ConvertToPoly(
PHEAD WORD *, WORD *,WORD *,WORD);
1448 extern int ConvertFromPoly(
PHEAD WORD *, WORD *, WORD, WORD, WORD, WORD);
1449 extern WORD FindSubterm(WORD *);
1450 extern WORD FindLocalSubterm(
PHEAD WORD *, WORD);
1451 extern void PrintSubtermList(
int,
int);
1452 extern void PrintExtraSymbol(
int,WORD *,
int);
1453 extern WORD FindSubexpression(WORD *);
1455 extern void UpdateMaxSize(VOID);
1457 extern int CoToPolynomial(UBYTE *);
1458 extern int CoFromPolynomial(UBYTE *);
1459 extern int CoArgToExtraSymbol(UBYTE *);
1460 extern int CoExtraSymbols(UBYTE *);
1461 extern UBYTE *GetDoParam(UBYTE *, WORD **,
int);
1462 extern WORD *GetIfDollarFactor(UBYTE **, WORD *);
1463 extern int CoDo(UBYTE *);
1464 extern int CoEndDo(UBYTE *);
1465 extern int ExtraSymFun(
PHEAD WORD *,WORD);
1466 extern int PruneExtraSymbols(WORD);
1468 extern void IniFbufs(VOID);
1469 extern int GCDfunction(
PHEAD WORD *,WORD);
1470 extern WORD *GCDfunction3(
PHEAD WORD *,WORD *);
1471 extern WORD *GCDfunction4(
PHEAD WORD *,WORD *);
1472 extern int ReadPolyRatFun(
PHEAD WORD *);
1473 extern int FromPolyRatFun(
PHEAD WORD *, WORD **, WORD **);
1474 extern void PRFnormalize(
PHEAD WORD *);
1475 extern WORD *PRFadd(
PHEAD WORD *, WORD *);
1476 extern WORD *PolyDiv(
PHEAD WORD *,WORD *,
char *);
1477 extern WORD *PolyGCD(
PHEAD WORD *,WORD *);
1478 extern WORD *PolyAdd(
PHEAD WORD *,WORD *);
1479 extern void GCDclean(
PHEAD WORD *, WORD *);
1480 extern int RatFunNormalize(
PHEAD WORD *);
1482 extern int GCDterms(
PHEAD WORD *,WORD *,WORD *);
1483 extern WORD *PutExtraSymbols(
PHEAD WORD *,WORD,
int *);
1484 extern WORD *TakeExtraSymbols(
PHEAD WORD *,WORD);
1485 extern WORD *MultiplyWithTerm(
PHEAD WORD *, WORD *,WORD);
1487 extern int MergeSymbolLists(
PHEAD WORD *, WORD *,
int);
1488 extern int MergeDotproductLists(
PHEAD WORD *, WORD *,
int);
1489 extern WORD *CreateExpression(
PHEAD WORD);
1490 extern int DIVfunction(
PHEAD WORD *,WORD,
int);
1491 extern WORD *MULfunc(
PHEAD WORD *, WORD *);
1492 extern WORD *ConvertArgument(
PHEAD WORD *,
int *);
1493 extern int ExpandRat(
PHEAD WORD *);
1494 extern int InvPoly(
PHEAD WORD *,WORD,WORD);
1495 extern WORD TestDoLoop(
PHEAD WORD *,WORD);
1496 extern WORD TestEndDoLoop(
PHEAD WORD *,WORD);
1498 extern WORD *poly_gcd(
PHEAD WORD *, WORD *, WORD);
1499 extern WORD *poly_div(
PHEAD WORD *, WORD *, WORD);
1500 extern WORD *poly_rem(
PHEAD WORD *, WORD *, WORD);
1501 extern WORD *poly_inverse(
PHEAD WORD *, WORD *);
1502 extern WORD *poly_mul(
PHEAD WORD *, WORD *);
1503 extern WORD *poly_ratfun_add(
PHEAD WORD *, WORD *);
1504 extern int poly_ratfun_normalize(
PHEAD WORD *);
1505 extern int poly_factorize_argument(
PHEAD WORD *, WORD *);
1506 extern WORD *poly_factorize_dollar(
PHEAD WORD *);
1507 extern int poly_factorize_expression(
EXPRESSIONS);
1508 extern int poly_unfactorize_expression(
EXPRESSIONS);
1509 extern void poly_free_poly_vars(
PHEAD const char *);
1511 extern VOID optimize_print_code (
int);
1514 extern void find_Horner_MCTS_expand_tree();
1515 extern void find_Horner_MCTS_expand_tree_threaded();
1516 extern void optimize_expression_given_Horner();
1517 extern void optimize_expression_given_Horner_threaded();
1520 extern int DoPreAdd(UBYTE *s);
1521 extern int DoPreUseDictionary(UBYTE *s);
1522 extern int DoPreCloseDictionary(UBYTE *s);
1523 extern int DoPreOpenDictionary(UBYTE *s);
1524 extern void RemoveDictionary(
DICTIONARY *dict);
1525 extern void UnSetDictionary(VOID);
1526 extern int SetDictionaryOptions(UBYTE *options);
1527 extern int SelectDictionary(UBYTE *name,UBYTE *options);
1528 extern int AddToDictionary(
DICTIONARY *dict,UBYTE *left,UBYTE *right);
1529 extern int AddDictionary(UBYTE *name);
1530 extern int FindDictionary(UBYTE *name);
1531 extern int IsExponentSign(VOID);
1532 extern int IsMultiplySign(VOID);
1533 extern VOID TransformRational(UWORD *a, WORD na);
1536 extern void MultiplyToLine(VOID);
1537 extern UBYTE *FindSymbol(WORD num);
1538 extern UBYTE *FindVector(WORD num);
1539 extern UBYTE *FindIndex(WORD num);
1540 extern UBYTE *FindFunction(WORD num);
1541 extern UBYTE *FindFunWithArgs(WORD *t);
1542 extern UBYTE *FindExtraSymbol(WORD num);
1543 extern LONG DictToBytes(
DICTIONARY *dict,UBYTE *buf);
1544 extern DICTIONARY *DictFromBytes(UBYTE *buf);
1545 extern int CoCreateSpectator(UBYTE *inp);
1546 extern int CoToSpectator(UBYTE *inp);
1547 extern int CoRemoveSpectator(UBYTE *inp);
1548 extern int CoEmptySpectator(UBYTE *inp);
1549 extern int CoCopySpectator(UBYTE *inp);
1550 extern int PutInSpectator(WORD *,WORD);
1551 extern void ClearSpectators(WORD);
1552 extern WORD GetFromSpectator(WORD *,WORD);
1553 extern void FlushSpectators(VOID);
1555 extern WORD *PreGCD(
PHEAD WORD *, WORD *,
int);
1556 extern WORD *FindCommonVariables(
PHEAD int,
int);
1557 extern VOID AddToSymbolList(
PHEAD WORD);
1558 extern int AddToListPoly(PHEAD0);
1559 extern int InvPoly(
PHEAD WORD *,WORD,WORD);
int NormalModulus(UWORD *, WORD *)
WORD ReadSaveIndex(FILEINDEX *)
void DeleteRecoveryFile()
void AddPotModdollar(WORD)
VOID AddArgs(PHEAD WORD *, WORD *, WORD *)
char * RecoveryFilename()
WORD FindArg(PHEAD WORD *)
WORD * TakeSymbolContent(PHEAD WORD *, WORD *)
int PutPreVar(UBYTE *, UBYTE *, UBYTE *, int)
WORD AddCoef(PHEAD WORD **, WORD **)
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)
int CleanupArgCache(PHEAD WORD)
VOID SplitMerge(PHEAD WORD **, LONG)
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 *)
int CompareHSymbols(PHEAD 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 StoreTerm(PHEAD WORD *)
WORD Sflush(FILEHANDLE *)
WORD TestMatch(PHEAD WORD *, 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 *)
WORD Deferred(PHEAD WORD *, WORD)
WORD Compare1(PHEAD WORD *, 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)
WORD * TakeContent(PHEAD WORD *, WORD *)
int CompareSymbols(PHEAD WORD *, WORD *, WORD)
WORD * MakeMod(PHEAD WORD *, WORD *, 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 *)