41 #define MaX(x,y) ((x) > (y) ? (x): (y)) 42 #define MiN(x,y) ((x) < (y) ? (x): (y)) 43 #define ABS(x) ( (x) < 0 ? -(x): (x) ) 44 #define SGN(x) ( (x) > 0 ? 1 : (x) < 0 ? -1 : 0 ) 45 #define REDLENG(x) ((((x)<0)?((x)+1):((x)-1))>>1) 46 #define INCLENG(x) (((x)<0)?(((x)<<1)-1):(((x)<<1)+1)) 47 #define GETCOEF(x,y) x += *x;y = x[-1];x -= ABS(y);y=REDLENG(y) 48 #define GETSTOP(x,y) y=x+(*x)-1;y -= ABS(*y)-1 49 #define StuffAdd(x,y) (((x)<0?-1:1)*(y)+((y)<0?-1:1)*(x)) 51 #define TOKENTOLINE(x,y) if ( AC.OutputSpaces == NOSPACEFORMAT ) { \ 52 TokenToLine((UBYTE *)(y)); } else { TokenToLine((UBYTE *)(x)); } 54 #define UngetFromStream(stream,c) ((stream)->nextchar[(stream)->isnextchar++]=c) 56 #define AddLineFeed(s,n) { (s)[(n)++] = CARRIAGERETURN; (s)[(n)++] = LINEFEED; } 58 #define AddLineFeed(s,n) { (s)[(n)++] = LINEFEED; } 60 #define TryRecover(x) Terminate(-1) 61 #define UngetChar(c) { pushbackchar = c; } 62 #define ParseNumber(x,s) {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';} 63 #define ParseSign(sgn,s) {(sgn)=0;while(*(s)=='-'||*(s)=='+'){\ 64 if ( *(s)++ == '-' ) sgn ^= 1;}} 65 #define ParseSignedNumber(x,s) { int sgn; ParseSign(sgn,s)\ 66 ParseNumber(x,s) if ( sgn ) x = -x; } 68 #define NCOPY(s,t,n) while ( --n >= 0 ) *s++ = *t++; 71 #define NCOPYI(s,t,n) while ( --n >= 0 ) *s++ = *t++; 72 #define NCOPYB(s,t,n) while ( --n >= 0 ) *s++ = *t++; 73 #define NCOPYI32(s,t,n) while ( --n >= 0 ) *s++ = *t++; 74 #define WCOPY(s,t,n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( --nn >= 0 ) *ss++=*tt++; } 75 #define NeedNumber(x,s,err) { int sgn = 1; \ 76 while ( *s == ' ' || *s == '\t' || *s == '-' || *s == '+' ) { \ 77 if ( *s == '-' ) sgn = -sgn; s++; } \ 78 if ( chartype[*s] != 1 ) goto err; \ 80 if ( sgn < 0 ) (x) = -(x); while ( *s == ' ' || *s == '\t' ) s++;\ 82 #define SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; } 83 #define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED) 85 #define SKIPBRA1(s) { int lev1=0; s++; while(*s) { if(*s=='[')lev1++; \ 86 else if(*s==']'&&--lev1<0)break; s++;} } 87 #define SKIPBRA2(s) { int lev2=0; s++; while(*s) { if(*s=='{')lev2++; \ 88 else if(*s=='}'&&--lev2<0)break; \ 89 else if(*s=='[')SKIPBRA1(s) s++;} } 90 #define SKIPBRA3(s) { int lev3=0; s++; while(*s) { if(*s=='(')lev3++; \ 91 else if(*s==')'&&--lev3<0)break; \ 92 else if(*s=='{')SKIPBRA2(s) \ 93 else if(*s=='[')SKIPBRA1(s) s++;} } 94 #define SKIPBRA4(s) { int lev4=0; s++; while(*s) { if(*s=='(')lev4++; \ 95 else if(*s==')'&&--lev4<0)break; \ 96 else if(*s=='[')SKIPBRA1(s) s++;} } 97 #define SKIPBRA5(s) { int lev5=0; s++; while(*s) { if(*s=='{')lev5++; \ 98 else if(*s=='}'&&--lev5<0)break; \ 99 else if(*s=='(')SKIPBRA4(s) \ 100 else if(*s=='[')SKIPBRA1(s) s++;} } 105 #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;} 107 #define AddToCB(c,wx) if(c->Pointer>=c->Top) \ 108 DoubleCbuffer(c-cbuf,c->Pointer); \ 109 *(c->Pointer)++ = wx; 111 #define EXCHINOUT { FILEHANDLE *ffFi = AR.outfile; \ 112 AR.outfile = AR.infile; AR.infile = ffFi; } 113 #define BACKINOUT { FILEHANDLE *ffFi = AR.outfile; POSITION posi; \ 114 AR.outfile = AR.infile; AR.infile = ffFi; \ 115 SetEndScratch(AR.infile,&posi); } 117 #define CopyArg(to,from) { if ( *from > 0 ) { int ica = *from; NCOPY(to,from,ica) } \ 118 else if ( *from <= -FUNCTION ) *to++ = *from++; \ 119 else { *to++ = *from++; *to++ = *from++; } } 122 #define FILLARG(w) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = 0; } 123 #define COPYARG(w,t) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = *t++; } 124 #define ZEROARG(w) { int i; for ( i = 2; i < ARGHEAD; i++ ) w[i] = 0; } 132 #define FILLFUN(w) { *w++ = 0; FILLFUN3(w) } 133 #define COPYFUN(w,t) { *w++ = *t++; COPYFUN3(w,t) } 140 #define FILLFUN3(w) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = 0; } 141 #define COPYFUN3(w,t) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = *t++; } 143 #define COPYFUN3(w,t) 148 #define FILLSUB(w) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = 0; } 149 #define COPYSUB(w,ww) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = *ww++; } 152 #define COPYSUB(w,ww) 156 #define FILLEXPR(w) { int ie = EXPRHEAD-4; while ( --ie >= 0 ) *w++ = 0; } 161 #define NEXTARG(x) if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2; 162 #define COPY1ARG(s1,t1) { int ica; if ( (ica=*t1) > 0 ) { NCOPY(s1,t1,ica) } \ 163 else if(*t1<=-FUNCTION){*s1++=*t1++;} else{*s1++=*t1++;*s1++=*t1++;} } 165 #define TABLESIZE(a,b) (((WORD)sizeof(a))/((WORD)sizeof(b))) 166 #define WORDDIF(x,y) (WORD)(x-y) 167 #define wsizeof(a) ((WORD)sizeof(a)) 168 #define VARNAME(type,num) (AC.varnames->namebuffer+type[num].name) 169 #define DOLLARNAME(type,num) (AC.dollarnames->namebuffer+type[num].name) 170 #define EXPRNAME(num) (AC.exprnames->namebuffer+Expressions[num].name) 172 #define PREV(x) prevorder?prevorder:x 174 #define SETERROR(x) { Terminate(-1); return(-1); } 177 #define DUMMYUSE(x) (void)(x); 179 #ifdef _FILE_OFFSET_BITS 180 #if _FILE_OFFSET_BITS==64 183 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(off_t)(x)) 184 #define SETBASELENGTH(ss,x) (ss).p1 = (off_t)(x) 185 #define SETBASEPOSITION(pp,x) (pp).p1 = (off_t)(x) 186 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(off_t)(x)) ) 187 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(off_t)(x)) ) 188 #define DIVPOS(pp,n) ( (pp).p1/(off_t)(n) ) 189 #define MULPOS(pp,n) (pp).p1 *= (off_t)(n) 193 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(x)) 194 #define SETBASELENGTH(ss,x) (ss).p1 = (x) 195 #define SETBASEPOSITION(pp,x) (pp).p1 = (x) 196 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) 197 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) 198 #define DIVPOS(pp,n) ( (pp).p1/(n) ) 199 #define MULPOS(pp,n) (pp).p1 *= (n) 203 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(LONG)(x)) 204 #define SETBASELENGTH(ss,x) (ss).p1 = (LONG)(x) 205 #define SETBASEPOSITION(pp,x) (pp).p1 = (LONG)(x) 206 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) ) 207 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) ) 208 #define DIVPOS(pp,n) ( (pp).p1/(LONG)(n) ) 209 #define MULPOS(pp,n) (pp).p1 *= (LONG)(n) 212 #define DIFPOS(ss,pp1,pp2) (ss).p1 = ((pp1).p1-(pp2).p1) 213 #define DIFBASE(pp1,pp2) ((pp1).p1-(pp2).p1) 214 #define ADD2POS(pp1,pp2) (pp1).p1 += (pp2).p1 215 #define PUTZERO(pp) (pp).p1 = 0 216 #define BASEPOSITION(pp) ((pp).p1) 217 #define SETSTARTPOS(pp) (pp).p1 = -2 218 #define NOTSTARTPOS(pp) ( (pp).p1 > -2 ) 219 #define ISMINPOS(pp) ( (pp).p1 == -1 ) 220 #define ISEQUALPOS(pp1,pp2) ( (pp1).p1 == (pp2).p1 ) 221 #define ISNOTEQUALPOS(pp1,pp2) ( (pp1).p1 != (pp2).p1 ) 222 #define ISLESSPOS(pp1,pp2) ( (pp1).p1 < (pp2).p1 ) 223 #define ISGEPOS(pp1,pp2) ( (pp1).p1 >= (pp2).p1 ) 224 #define ISNOTZEROPOS(pp) ( (pp).p1 != 0 ) 225 #define ISPOSPOS(pp) ( (pp).p1 > 0 ) 226 #define ISNEGPOS(pp) ( (pp).p1 < 0 ) 227 extern VOID TELLFILE(
int,
POSITION *);
229 #define TOLONG(x) ((LONG)(x)) 231 #define Add2Com(x) { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); } 232 #define Add3Com(x1,x2) { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); } 233 #define Add4Com(x1,x2,x3) { WORD cod[4]; cod[0] = x1; cod[1] = 4; \ 234 cod[2] = x2; cod[3] = x3; AddNtoL(4,cod); } 235 #define Add5Com(x1,x2,x3,x4) { WORD cod[5]; cod[0] = x1; cod[1] = 5; \ 236 cod[2] = x2; cod[3] = x3; cod[4] = x4; AddNtoL(5,cod); } 241 #define WantAddPointers(x) while((AT.pWorkPointer+(x))>AR.pWorkSize){WORD ***ppp=&AT.pWorkSpace;\ 242 ExpandBuffer((void **)ppp,&AR.pWorkSize,(int)(sizeof(WORD *)));} 243 #define WantAddLongs(x) while((AT.lWorkPointer+(x))>AR.lWorkSize){LONG **ppp=&AT.lWorkSpace;\ 244 ExpandBuffer((void **)ppp,&AR.lWorkSize,sizeof(LONG));} 245 #define WantAddPositions(x) while((AT.posWorkPointer+(x))>AR.posWorkSize){POSITION **ppp=&AT.posWorkSpace;\ 246 ExpandBuffer((void **)ppp,&AR.posWorkSize,sizeof(POSITION));} 249 #define FORM_INLINE inline 261 #define TermMalloc(x) ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] ) 262 #define NumberMalloc(x) ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] ) 263 #define TermFree(TermMem,x) AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem) 264 #define NumberFree(NumberMem,x) AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem) 268 #define TermMalloc(x) TermMalloc2(BHEAD (char *)(x)) 269 #define NumberMalloc(x) NumberMalloc2(BHEAD (char *)(x)) 270 #define TermFree(x,y) TermFree2(BHEAD (WORD *)(x),(char *)(y)) 271 #define NumberFree(x,y) NumberFree2(BHEAD (UWORD *)(x),(char *)(y)) 290 #define NestingChecksum() (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel) 291 #define MesNesting() MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do") 306 #define EXTERNLOCK(x) extern pthread_mutex_t x; 307 #define INILOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER 308 #define EXTERNRWLOCK(x) extern pthread_rwlock_t x; 309 #define INIRWLOCK(x) pthread_rwlock_t x = PTHREAD_RWLOCK_INITIALIZER; 310 #ifdef DEBUGGINGLOCKS 311 #include <asm/errno.h> 312 #define LOCK(x) while ( pthread_mutex_trylock(&(x)) == EBUSY ) {} 313 #define RWLOCKR(x) while ( pthread_rwlock_tryrdlock(&(x)) == EBUSY ) {} 314 #define RWLOCKW(x) while ( pthread_rwlock_trywrlock(&(x)) == EBUSY ) {} 316 #define LOCK(x) pthread_mutex_lock(&(x)) 317 #define RWLOCKR(x) pthread_rwlock_rdlock(&(x)) 318 #define RWLOCKW(x) pthread_rwlock_wrlock(&(x)) 320 #define UNLOCK(x) pthread_mutex_unlock(&(x)) 321 #define UNRWLOCK(x) pthread_rwlock_unlock(&(x)) 322 #define MLOCK(x) LOCK(x) 323 #define MUNLOCK(x) UNLOCK(x) 326 #define GETIDENTITY int identity = WhoAmI(); ALLPRIVATES *B = AB[identity]; 329 #define EXTERNLOCK(x) 333 #define EXTERNRWLOCK(x) 339 #define MLOCK(x) do { if ( PF.me != MASTER ) PF_MLock(); } while (0) 340 #define MUNLOCK(x) do { if ( PF.me != MASTER ) PF_MUnlock(); } while (0) 360 extern VOID setSignalHandlers(VOID);
361 extern UBYTE *CodeToLine(WORD,UBYTE *);
362 extern UBYTE *AddArrayIndex(WORD ,UBYTE *);
366 extern UBYTE *StrCopy(UBYTE *,UBYTE *);
367 extern UBYTE *WrtPower(UBYTE *,WORD);
368 extern WORD AccumGCD(
PHEAD UWORD *,WORD *,UWORD *,WORD);
371 extern WORD AddLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
372 extern WORD AddPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
374 extern WORD AddRat(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
375 extern VOID AddToLine(UBYTE *);
376 extern WORD AddWild(
PHEAD WORD,WORD,WORD);
377 extern WORD BigLong(UWORD *,WORD,UWORD *,WORD);
378 extern WORD BinomGen(
PHEAD WORD *,WORD,WORD **,WORD,WORD,WORD,WORD,WORD,UWORD *,WORD);
379 extern WORD CheckWild(
PHEAD WORD,WORD,WORD,WORD *);
380 extern WORD Chisholm(
PHEAD WORD *,WORD);
381 extern WORD CleanExpr(WORD);
382 extern VOID CleanUp(WORD);
383 extern VOID ClearWild(PHEAD0);
384 extern WORD Commute(WORD *,WORD *);
385 extern WORD DetCommu(WORD *);
386 extern WORD DoesCommu(WORD *);
387 extern int CompArg(WORD *,WORD *);
388 extern WORD
CompCoef(WORD *, WORD *);
389 extern WORD CompGroup(
PHEAD WORD,WORD **,WORD *,WORD *,WORD);
391 extern WORD CountDo(WORD *,WORD *);
392 extern WORD CountFun(WORD *,WORD *);
393 extern WORD DimensionSubterm(WORD *);
394 extern WORD DimensionTerm(WORD *);
395 extern WORD DimensionExpression(
PHEAD WORD *);
397 extern WORD DeleteStore(WORD);
398 extern WORD DetCurDum(
PHEAD WORD *);
399 extern VOID DetVars(WORD *,WORD);
401 extern WORD DivLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *,UWORD *,WORD *);
402 extern WORD DivRat(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
403 extern WORD Divvy(
PHEAD UWORD *,WORD *,UWORD *,WORD);
404 extern WORD DoDelta(WORD *);
405 extern WORD DoDelta3(
PHEAD WORD *,WORD);
406 extern WORD DoTableExpansion(WORD *,WORD);
407 extern WORD DoDistrib(
PHEAD WORD *,WORD);
408 extern WORD DoShuffle(
PHEAD WORD *,WORD,WORD,WORD);
409 extern int Shuffle(
PHEAD WORD *, WORD *, WORD *);
410 extern int FinishShuffle(
PHEAD WORD *);
411 extern WORD DoStuffle(
PHEAD WORD *,WORD,WORD,WORD);
412 extern int Stuffle(
PHEAD WORD *, WORD *, WORD *);
413 extern int FinishStuffle(
PHEAD WORD *);
414 extern WORD *StuffRootAdd(WORD *, WORD *, WORD *);
415 extern WORD TestUse(WORD *,WORD);
416 extern DBASE *FindTB(UBYTE *);
417 extern int CheckTableDeclarations(
DBASE *);
418 extern WORD Apply(WORD *,WORD);
419 extern int ApplyExec(WORD *,
int,WORD);
420 extern WORD ApplyReset(WORD);
421 extern WORD TableReset(VOID);
422 extern VOID ReWorkT(WORD *,WORD *,WORD);
423 extern WORD GetIfDollarNum(WORD *, WORD *);
424 extern WORD DoIfStatement(
PHEAD WORD *,WORD *);
425 extern WORD
DoOnePow(
PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD,WORD *);
426 extern void DoRevert(WORD *,WORD *);
427 extern WORD DoSumF1(
PHEAD WORD *,WORD *,WORD,WORD);
428 extern WORD DoSumF2(
PHEAD WORD *,WORD *,WORD,WORD);
429 extern WORD DoTheta(
PHEAD WORD *);
431 extern WORD EntVar(WORD,UBYTE *,WORD,WORD,WORD,WORD);
432 extern WORD EpfCon(
PHEAD WORD *,WORD *,WORD,WORD);
433 extern WORD EpfFind(
PHEAD WORD *,WORD *);
434 extern WORD EpfGen(WORD,WORD *,WORD *,WORD *,WORD);
435 extern WORD EqualArg(WORD *,WORD,WORD);
436 extern WORD Evaluate(UBYTE **);
437 extern int Factorial(
PHEAD WORD,UWORD *,WORD *);
438 extern int Bernoulli(WORD,UWORD *,WORD *);
439 extern int FactorIn(
PHEAD WORD *,WORD);
440 extern int FactorInExpr(
PHEAD WORD *,WORD);
441 extern WORD FindAll(
PHEAD WORD *,WORD *,WORD,WORD *);
442 extern WORD FindMulti(
PHEAD WORD *,WORD *);
443 extern WORD FindOnce(
PHEAD WORD *,WORD *);
444 extern WORD FindOnly(
PHEAD WORD *,WORD *);
445 extern WORD FindRest(
PHEAD WORD *,WORD *);
446 extern WORD FindSpecial(WORD *);
447 extern WORD FindrNumber(WORD,
VARRENUM *);
448 extern VOID FiniLine(VOID);
451 extern VOID FunLevel(
PHEAD WORD *);
452 extern VOID AdjustRenumScratch(PHEAD0);
454 extern WORD GcdLong(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
455 extern WORD LcmLong(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
456 extern VOID GCD(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
457 extern ULONG GCD2(ULONG,ULONG);
459 extern WORD GetBinom(UWORD *,WORD *,WORD,WORD);
461 extern WORD GetLong(UBYTE *,UWORD *,WORD *);
462 extern WORD GetMoreTerms(WORD *);
463 extern WORD GetMoreFromMem(WORD *,WORD **);
466 extern WORD GetTerm(
PHEAD WORD *);
467 extern WORD Glue(
PHEAD WORD *,WORD *,WORD *,WORD);
469 extern VOID IniLine(WORD);
470 extern WORD IniVars(VOID);
471 extern VOID Initialize(VOID);
473 extern VOID LongToLine(UWORD *,WORD);
474 extern WORD MakeDirty(WORD *,WORD *,WORD);
475 extern VOID MarkDirty(WORD *,WORD);
476 extern VOID PolyFunDirty(
PHEAD WORD *);
477 extern VOID PolyFunClean(
PHEAD WORD *);
478 extern WORD MakeModTable(VOID);
479 extern WORD MatchE(
PHEAD WORD *,WORD *,WORD *,WORD);
480 extern int MatchCy(
PHEAD WORD *,WORD *,WORD *,WORD);
481 extern int FunMatchCy(
PHEAD WORD *,WORD *,WORD *,WORD);
482 extern int FunMatchSy(
PHEAD WORD *,WORD *,WORD *,WORD);
483 extern int MatchArgument(
PHEAD WORD *,WORD *);
484 extern WORD MatchFunction(
PHEAD WORD *,WORD *,WORD *);
486 extern WORD MesCerr(
char *, UBYTE *);
487 extern WORD MesComp(
char *, UBYTE *, UBYTE *);
488 extern WORD Modulus(WORD *);
489 extern VOID MoveDummies(
PHEAD WORD *,WORD);
490 extern WORD MulLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
491 extern WORD MulRat(
PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
492 extern WORD Mully(
PHEAD UWORD *,WORD *,UWORD *,WORD);
493 extern WORD MultDo(
PHEAD WORD *,WORD *);
495 extern WORD ExtraSymbol(WORD,WORD,WORD,WORD *,WORD *);
496 extern WORD Normalize(
PHEAD WORD *);
497 extern VOID DropCoefficient(
PHEAD WORD *);
498 extern VOID DropSymbols(
PHEAD WORD *);
499 extern int PutInside(
PHEAD WORD *, WORD *);
500 extern WORD OpenTemp(VOID);
501 extern VOID Pack(UWORD *,WORD *,UWORD *,WORD );
503 extern WORD Permute(
PERM *,WORD);
505 extern WORD PopVariables(VOID);
508 extern WORD Product(UWORD *,WORD *,WORD);
509 extern VOID PrtLong(UWORD *,WORD,UBYTE *);
510 extern VOID PrtTerms(VOID);
511 extern VOID PrintRunningTime(VOID);
512 extern LONG GetRunningTime(VOID);
513 extern WORD PutBracket(
PHEAD WORD *);
517 extern UWORD Quotient(UWORD *,WORD *,WORD);
518 extern WORD RaisPow(
PHEAD UWORD *,WORD *,UWORD);
520 extern WORD RaisPowMod (WORD, WORD, WORD);
524 extern int GetLongModInverses(
PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *);
525 extern VOID RatToLine(UWORD *,WORD);
526 extern WORD RatioFind(
PHEAD WORD *,WORD *);
527 extern WORD RatioGen(
PHEAD WORD *,WORD *,WORD,WORD);
528 extern WORD ReNumber(
PHEAD WORD *);
529 extern WORD ReadSnum(UBYTE **);
530 extern WORD Remain10(UWORD *,WORD *);
531 extern WORD Remain4(UWORD *,WORD *);
532 extern WORD ResetScratch(VOID);
533 extern WORD ResolveSet(
PHEAD WORD *,WORD *,WORD *);
534 extern WORD RevertScratch(VOID);
535 extern WORD ScanFunctions(
PHEAD WORD *,WORD *,WORD);
541 extern WORD Simplify(
PHEAD UWORD *,WORD *,UWORD *,WORD *);
543 extern FILE *LocateBase(
char **,
char **);
550 extern VOID SubPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
551 extern VOID Substitute(
PHEAD WORD *,WORD *,WORD);
552 extern WORD SymFind(
PHEAD WORD *,WORD *);
553 extern WORD SymGen(
PHEAD WORD *,WORD *,WORD,WORD);
554 extern WORD Symmetrize(
PHEAD WORD *,WORD *,WORD,WORD,WORD);
555 extern int FullSymmetrize(
PHEAD WORD *,
int);
556 extern WORD TakeModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
557 extern WORD TakeNormalModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
558 extern VOID TalToLine(UWORD);
559 extern WORD TenVec(
PHEAD WORD *,WORD *,WORD,WORD);
560 extern WORD TenVecFind(
PHEAD WORD *,WORD *);
562 extern VOID TestDrop(VOID);
563 extern VOID PutInVflags(WORD);
566 extern LONG TimeCPU(WORD);
567 extern LONG TimeChildren(WORD);
568 extern LONG TimeWallClock(WORD);
569 extern LONG Timer(
int);
570 extern int GetTimerInfo(LONG **,LONG **);
571 extern void WriteTimerInfo(LONG *,LONG *);
572 extern LONG GetWorkerTimes(VOID);
574 extern VOID TokenToLine(UBYTE *);
575 extern WORD Trace4(
PHEAD WORD *,WORD *,WORD,WORD);
577 extern WORD Trace4no(WORD,WORD *,
TRACES *);
578 extern WORD TraceFind(
PHEAD WORD *,WORD *);
579 extern WORD TraceN(
PHEAD WORD *,WORD *,WORD,WORD);
581 extern WORD TraceNno(WORD,WORD *,
TRACES *);
582 extern WORD Traces(
PHEAD WORD *,WORD *,WORD,WORD);
583 extern WORD Trick(WORD *,
TRACES *);
584 extern WORD TryDo(
PHEAD WORD *,WORD *,WORD);
585 extern VOID UnPack(UWORD *,WORD,WORD *,WORD *);
586 extern WORD VarStore(UBYTE *,WORD,WORD,WORD);
587 extern WORD WildFill(
PHEAD WORD *,WORD *,WORD *);
588 extern WORD WriteAll(VOID);
589 extern WORD WriteOne(UBYTE *,
int,
int);
590 extern VOID WriteArgument(WORD *);
591 extern WORD WriteExpression(WORD *,LONG);
592 extern WORD WriteInnerTerm(WORD *,WORD);
593 extern VOID WriteLists(VOID);
594 extern VOID WriteSetup(VOID);
596 extern WORD WriteSubTerm(WORD *,WORD);
597 extern WORD WriteTerm(WORD *,WORD *,WORD,WORD,WORD);
598 extern WORD execarg(
PHEAD WORD *,WORD);
599 extern WORD execterm(
PHEAD WORD *,WORD);
600 extern VOID SpecialCleanup(PHEAD0);
601 extern void SetMods();
602 extern void UnSetMods();
606 extern WORD DoExecute(WORD,WORD);
608 extern VOID Warning(
char *);
609 extern VOID HighWarning(
char *);
610 extern int SpareTable(
TABLES);
612 extern UBYTE *strDup1(UBYTE *,
char *);
613 extern VOID *Malloc(LONG);
614 extern VOID *Malloc1(LONG,
const char *);
615 extern int DoTail(
int,UBYTE **);
616 extern int OpenInput(VOID);
617 extern int PutPreVar(UBYTE *,UBYTE *,UBYTE *,
int);
618 extern VOID Error0(
char *);
619 extern VOID Error1(
char *,UBYTE *);
620 extern VOID Error2(
char *,
char *,UBYTE *);
621 extern UBYTE ReadFromStream(
STREAM *);
622 extern UBYTE GetFromStream(
STREAM *);
623 extern UBYTE LookInStream(
STREAM *);
624 extern STREAM *OpenStream(UBYTE *,
int,
int,
int);
625 extern int LocateFile(UBYTE **,
int);
627 extern VOID PositionStream(
STREAM *,LONG);
628 extern int ProcessOption(UBYTE *,UBYTE *,
int);
629 extern int DoSetups(VOID);
630 extern VOID Terminate(
int);
632 extern int AddName(
NAMETREE *,UBYTE *,WORD,WORD,
int *);
633 extern int GetName(
NAMETREE *,UBYTE *,WORD *,
int);
634 extern int GetLastExprName(UBYTE *,WORD *);
635 extern int GetAutoName(UBYTE *,WORD *);
636 extern int GetVar(UBYTE *,WORD *,WORD *,
int,
int);
637 extern int MakeDubious(
NAMETREE *,UBYTE *,WORD *);
638 extern int GetOName(
NAMETREE *,UBYTE *,WORD *,
int);
640 extern VOID DumpNode(
NAMETREE *,WORD,WORD);
641 extern VOID LinkTree(
NAMETREE *,WORD,WORD);
643 extern int CompactifyTree(
NAMETREE *,WORD);
644 extern NAMETREE *MakeNameTree(VOID);
645 extern VOID FreeNameTree(
NAMETREE *);
646 extern int AddExpression(UBYTE *,
int,
int);
647 extern int AddSymbol(UBYTE *,
int,
int,
int,
int);
648 extern int AddDollar(UBYTE *,WORD,WORD *,LONG);
649 extern int ReplaceDollar(WORD,WORD,WORD *,LONG);
650 extern int DollarRaiseLow(UBYTE *,LONG);
651 extern int AddVector(UBYTE *,
int,
int);
652 extern int AddDubious(UBYTE *);
653 extern int AddIndex(UBYTE *,
int,
int);
654 extern UBYTE *DoDimension(UBYTE *,
int *,
int *);
655 extern int AddFunction(UBYTE *,
int,
int,
int,
int,
int,
int,
int);
656 extern int CoFunction(UBYTE *,
int,
int);
657 extern int TestName(UBYTE *);
658 extern int AddSet(UBYTE *,WORD);
659 extern int DoElements(UBYTE *,
SETS,UBYTE *);
660 extern int DoTempSet(UBYTE *,UBYTE *);
661 extern int NameConflict(
int,UBYTE *);
662 extern int OpenFile(
char *);
663 extern int OpenAddFile(
char *);
664 extern int ReOpenFile(
char *);
665 extern int CreateFile(
char *);
666 extern int CreateLogFile(
char *);
667 extern VOID CloseFile(
int);
668 extern int CopyFile(
char *,
char *);
669 extern int CreateHandle(VOID);
670 extern LONG ReadFile(
int,UBYTE *,LONG);
672 extern LONG WriteFileToFile(
int,UBYTE *,LONG);
673 extern VOID SeekFile(
int,
POSITION *,
int);
674 extern LONG TellFile(
int);
675 extern void FlushFile(
int);
676 extern int GetPosFile(
int,fpos_t *);
677 extern int SetPosFile(
int,fpos_t *);
678 extern VOID SynchFile(
int);
679 extern VOID TruncateFile(
int);
680 extern int GetChannel(
char *);
681 extern int GetAppendChannel(
char *);
682 extern int CloseChannel(
char *);
683 extern VOID inictable(VOID);
684 extern KEYWORD *findcommand(UBYTE *);
685 extern int inicbufs(VOID);
686 extern VOID StartFiles(VOID);
687 extern UBYTE *MakeDate(VOID);
688 extern VOID PreProcessor(VOID);
689 extern VOID *FromList(
LIST *);
690 extern VOID *From0List(
LIST *);
691 extern VOID *FromVarList(
LIST *);
692 extern int DoubleList(VOID ***,
int *,
int,
char *);
693 extern int DoubleLList(VOID ***,LONG *,
int,
char *);
694 extern void DoubleBuffer(
void **,
void **,
int,
char *);
695 extern void ExpandBuffer(
void **,LONG *,
int);
696 extern LONG iexp(LONG,
int);
697 extern int IsLikeVector(WORD *);
698 extern int AreArgsEqual(WORD *,WORD *);
699 extern int CompareArgs(WORD *,WORD *);
700 extern UBYTE *SkipField(UBYTE *,
int);
701 extern int StrCmp(UBYTE *,UBYTE *);
702 extern int StrICmp(UBYTE *,UBYTE *);
703 extern int StrHICmp(UBYTE *,UBYTE *);
704 extern int StrICont(UBYTE *,UBYTE *);
705 extern int ConWord(UBYTE *,UBYTE *);
706 extern int StrLen(UBYTE *);
707 extern UBYTE *GetPreVar(UBYTE *,
int);
708 extern void ToGeneral(WORD *,WORD *,WORD);
709 extern int ToFast(WORD *,WORD *);
711 extern int RecalcSetups(VOID);
712 extern int AllocSetups(VOID);
713 extern SORTING *AllocSort(LONG,LONG,LONG,LONG,
int,
int,LONG);
714 extern VOID AllocSortFileName(
SORTING *);
715 extern UBYTE *LoadInputFile(UBYTE *,
int);
716 extern UBYTE GetInput(VOID);
717 extern VOID ClearPushback(VOID);
718 extern UBYTE GetChar(
int);
719 extern VOID CharOut(UBYTE);
720 extern VOID UnsetAllowDelay(VOID);
721 extern VOID PopPreVars(
int);
722 extern VOID IniModule(
int);
723 extern VOID IniSpecialModule(
int);
724 extern int ModuleInstruction(
int *,
int *);
725 extern int PreProInstruction(VOID);
726 extern int LoadInstruction(
int);
727 extern int LoadStatement(
int);
730 extern int DoDefine(UBYTE *);
731 extern int DoRedefine(UBYTE *);
733 extern int TheUndefine(UBYTE *);
734 extern int ClearMacro(UBYTE *);
735 extern int DoUndefine(UBYTE *);
736 extern int DoInclude(UBYTE *);
738 extern int DoExternal(UBYTE *);
739 extern int DoToExternal(UBYTE *);
740 extern int DoFromExternal(UBYTE *);
741 extern int DoPrompt(UBYTE *);
742 extern int DoSetExternal(UBYTE *);
744 extern int DoSetExternalAttr(UBYTE *);
746 extern int DoRmExternal(UBYTE *);
748 extern int DoFactDollar(UBYTE *);
749 extern WORD GetDollarNumber(UBYTE **,
DOLLARS);
750 extern int DoSetRandom(UBYTE *);
751 extern int DoOptimize(UBYTE *);
752 extern int DoClearOptimize(UBYTE *);
753 extern int DoMessage(UBYTE *);
754 extern int DoPreOut(UBYTE *);
755 extern int DoPreAppend(UBYTE *);
756 extern int DoPreCreate(UBYTE *);
757 extern int DoPreAssign(UBYTE *);
758 extern int DoPreBreak(UBYTE *);
759 extern int DoPreDefault(UBYTE *);
760 extern int DoPreSwitch(UBYTE *);
761 extern int DoPreEndSwitch(UBYTE *);
762 extern int DoPreCase(UBYTE *);
763 extern int DoPreShow(UBYTE *);
764 extern int DoPreExchange(UBYTE *);
765 extern int DoSystem(UBYTE *);
766 extern int DoPipe(UBYTE *);
767 extern VOID StartPrepro(VOID);
768 extern int DoIfdef(UBYTE *,
int);
769 extern int DoElse(UBYTE *);
770 extern int DoElseif(UBYTE *);
771 extern int DoEndif(UBYTE *);
772 extern int DoTerminate(UBYTE *);
773 extern int DoIf(UBYTE *);
774 extern int DoCall(UBYTE *);
775 extern int DoDebug(UBYTE *);
776 extern int DoDo(UBYTE *);
777 extern int DoBreakDo(UBYTE *);
778 extern int DoEnddo(UBYTE *);
779 extern int DoEndprocedure(UBYTE *);
780 extern int DoInside(UBYTE *);
781 extern int DoEndInside(UBYTE *);
782 extern int DoProcedure(UBYTE *);
783 extern int DoPrePrintTimes(UBYTE *);
784 extern int DoPreWrite(UBYTE *);
785 extern int DoPreClose(UBYTE *);
786 extern int DoPreRemove(UBYTE *);
787 extern int DoCommentChar(UBYTE *);
788 extern int DoPrcExtension(UBYTE *);
789 extern VOID WriteString(
int,UBYTE *,
int);
790 extern VOID WriteUnfinString(
int,UBYTE *,
int);
791 extern UBYTE *PreCalc(VOID);
792 extern UBYTE *PreEval(UBYTE *,LONG *);
793 extern VOID NumToStr(UBYTE *,LONG);
794 extern int PreCmp(
int,
int,UBYTE *,
int,
int,UBYTE *,
int);
795 extern int PreEq(
int,
int,UBYTE *,
int,
int,UBYTE *,
int);
796 extern UBYTE *pParseObject(UBYTE *,
int *,LONG *);
797 extern UBYTE *PreIfEval(UBYTE *,
int *);
798 extern int EvalPreIf(UBYTE *);
799 extern int PreLoad(
PRELOAD *,UBYTE *,UBYTE *,
int,
char *);
800 extern int PreSkip(UBYTE *,UBYTE *,
int);
801 extern UBYTE *EndOfToken(UBYTE *);
802 extern VOID SetSpecialMode(
int,
int);
803 extern VOID MakeGlobal(VOID);
804 extern int ExecModule(
int);
805 extern int ExecStore(VOID);
806 extern VOID FullCleanUp(VOID);
807 extern int DoExecStatement(VOID);
808 extern int DoPipeStatement(VOID);
809 extern int DoPolyfun(UBYTE *);
810 extern int DoPolyratfun(UBYTE *);
811 extern int CompileStatement(UBYTE *);
812 extern UBYTE *ToToken(UBYTE *);
813 extern int GetDollar(UBYTE *);
814 extern int MesWork(VOID);
815 extern int MesPrint(
const char *,...);
816 extern int MesCall(
char *);
817 extern UBYTE *NumCopy(WORD,UBYTE *);
818 extern char *LongCopy(LONG,
char *);
819 extern char *LongLongCopy(off_t *,
char *);
820 extern VOID ReserveTempFiles(
int);
821 extern VOID PrintTerm(WORD *,
char *);
822 extern VOID PrintTermC(WORD *,
char *);
823 extern VOID PrintSubTerm(WORD *,
char *);
824 extern VOID PrintWords(WORD *,LONG);
825 extern int ExpandTripleDots(
int);
826 extern LONG
ComPress(WORD **,LONG *);
829 #define M_alloc(x) malloc((size_t)(x)) 831 extern void M_free(VOID *,
const char *);
832 extern void ClearWildcardNames(VOID);
833 extern int AddWildcardName(UBYTE *);
834 extern int GetWildcardName(UBYTE *);
835 extern void Globalize(
int);
836 extern void ResetVariables(
int);
837 extern void AddToPreTypes(
int);
838 extern void MessPreNesting(
int);
839 extern LONG GetStreamPosition(
STREAM *);
840 extern WORD *DoubleCbuffer(
int,WORD *);
841 extern WORD *AddLHS(
int);
842 extern WORD *AddRHS(
int,
int);
843 extern int AddNtoL(
int,WORD *);
844 extern int AddNtoC(
int,
int,WORD *);
845 extern VOID DoubleIfBuffers(VOID);
846 extern STREAM *CreateStream(UBYTE *);
848 extern int setonoff(UBYTE *,
int *,
int,
int);
849 extern int DoPrint(UBYTE *,
int);
850 extern int SetExpr(UBYTE *,
int,
int);
851 extern void AddToCom(
int,WORD *);
852 extern int Add2ComStrings(
int,WORD *,UBYTE *,UBYTE *);
853 extern int DoSymmetrize(UBYTE *,
int);
854 extern int DoArgument(UBYTE *,
int);
855 extern int ArgFactorize(
PHEAD WORD *,WORD *);
862 extern int ArgSymbolMerge(WORD *, WORD *);
863 extern int ArgDotproductMerge(WORD *, WORD *);
865 extern int DoBrackets(UBYTE *,
int);
866 extern int DoPutInside(UBYTE *,
int);
867 extern WORD *CountComp(UBYTE *,WORD *);
868 extern int CoAntiBracket(UBYTE *);
869 extern int CoAntiSymmetrize(UBYTE *);
870 extern int DoArgPlode(UBYTE *,
int);
871 extern int CoArgExplode(UBYTE *);
872 extern int CoArgImplode(UBYTE *);
873 extern int CoArgument(UBYTE *);
874 extern int CoInside(UBYTE *);
875 extern int ExecInside(UBYTE *);
876 extern int CoInExpression(UBYTE *);
877 extern int CoInParallel(UBYTE *);
878 extern int CoNotInParallel(UBYTE *);
879 extern int DoInParallel(UBYTE *,
int);
880 extern int CoEndInExpression(UBYTE *);
881 extern int CoBracket(UBYTE *);
882 extern int CoPutInside(UBYTE *);
883 extern int CoAntiPutInside(UBYTE *);
884 extern int CoMultiBracket(UBYTE *);
885 extern int CoCFunction(UBYTE *);
886 extern int CoCTensor(UBYTE *);
887 extern int CoCollect(UBYTE *);
888 extern int CoCompress(UBYTE *);
889 extern int CoContract(UBYTE *);
890 extern int CoCycleSymmetrize(UBYTE *);
891 extern int CoDelete(UBYTE *);
892 extern int CoTableBase(UBYTE *);
893 extern int CoApply(UBYTE *);
894 extern int CoDenominators(UBYTE *);
895 extern int CoDimension(UBYTE *);
896 extern int CoDiscard(UBYTE *);
897 extern int CoDisorder(UBYTE *);
898 extern int CoDrop(UBYTE *);
899 extern int CoDropCoefficient(UBYTE *);
900 extern int CoDropSymbols(UBYTE *);
901 extern int CoElse(UBYTE *);
902 extern int CoElseIf(UBYTE *);
903 extern int CoEndArgument(UBYTE *);
904 extern int CoEndInside(UBYTE *);
905 extern int CoEndIf(UBYTE *);
906 extern int CoEndRepeat(UBYTE *);
907 extern int CoEndTerm(UBYTE *);
908 extern int CoEndWhile(UBYTE *);
909 extern int CoExit(UBYTE *);
910 extern int CoFactArg(UBYTE *);
911 extern int CoFactDollar(UBYTE *);
912 extern int CoFactorize(UBYTE *);
913 extern int CoNFactorize(UBYTE *);
914 extern int CoUnFactorize(UBYTE *);
915 extern int CoNUnFactorize(UBYTE *);
916 extern int DoFactorize(UBYTE *,
int);
917 extern int CoFill(UBYTE *);
918 extern int CoFillExpression(UBYTE *);
919 extern int CoFixIndex(UBYTE *);
920 extern int CoFormat(UBYTE *);
921 extern int CoGlobal(UBYTE *);
922 extern int CoGlobalFactorized(UBYTE *);
923 extern int CoGoTo(UBYTE *);
924 extern int CoId(UBYTE *);
925 extern int CoIdNew(UBYTE *);
926 extern int CoIdOld(UBYTE *);
927 extern int CoIf(UBYTE *);
928 extern int CoIfMatch(UBYTE *);
929 extern int CoIfNoMatch(UBYTE *);
930 extern int CoIndex(UBYTE *);
931 extern int CoInsideFirst(UBYTE *);
932 extern int CoKeep(UBYTE *);
933 extern int CoLabel(UBYTE *);
934 extern int CoLoad(UBYTE *);
935 extern int CoLocal(UBYTE *);
936 extern int CoLocalFactorized(UBYTE *);
937 extern int CoMany(UBYTE *);
938 extern int CoMerge(UBYTE *);
939 extern int CoStuffle(UBYTE *);
940 extern int CoMetric(UBYTE *);
941 extern int CoModOption(UBYTE *);
942 extern int CoModuleOption(UBYTE *);
943 extern int CoModulus(UBYTE *);
944 extern int CoMulti(UBYTE *);
945 extern int CoMultiply(UBYTE *);
946 extern int CoNFunction(UBYTE *);
947 extern int CoNPrint(UBYTE *);
948 extern int CoNTensor(UBYTE *);
949 extern int CoNWrite(UBYTE *);
950 extern int CoNoDrop(UBYTE *);
951 extern int CoNoSkip(UBYTE *);
952 extern int CoNormalize(UBYTE *);
953 extern int CoMakeInteger(UBYTE *);
954 extern int CoFlags(UBYTE *,
int);
955 extern int CoOff(UBYTE *);
956 extern int CoOn(UBYTE *);
957 extern int CoOnce(UBYTE *);
958 extern int CoOnly(UBYTE *);
959 extern int CoOptimizeOption(UBYTE *);
960 extern int CoOptimize(UBYTE *);
961 extern int CoPolyFun(UBYTE *);
962 extern int CoPolyRatFun(UBYTE *);
963 extern int CoPrint(UBYTE *);
964 extern int CoPrintB(UBYTE *);
965 extern int CoProperCount(UBYTE *);
966 extern int CoUnitTrace(UBYTE *);
967 extern int CoRCycleSymmetrize(UBYTE *);
968 extern int CoRatio(UBYTE *);
969 extern int CoRedefine(UBYTE *);
970 extern int CoRenumber(UBYTE *);
971 extern int CoRepeat(UBYTE *);
972 extern int CoSave(UBYTE *);
973 extern int CoSelect(UBYTE *);
974 extern int CoSet(UBYTE *);
975 extern int CoSetExitFlag(UBYTE *);
976 extern int CoSkip(UBYTE *);
977 extern int CoProcessBucket(UBYTE *);
978 extern int CoPushHide(UBYTE *);
979 extern int CoPopHide(UBYTE *);
980 extern int CoHide(UBYTE *);
981 extern int CoIntoHide(UBYTE *);
982 extern int CoNoHide(UBYTE *);
983 extern int CoUnHide(UBYTE *);
984 extern int CoNoUnHide(UBYTE *);
985 extern int CoSort(UBYTE *);
986 extern int CoSplitArg(UBYTE *);
987 extern int CoSplitFirstArg(UBYTE *);
988 extern int CoSplitLastArg(UBYTE *);
989 extern int CoSum(UBYTE *);
990 extern int CoSymbol(UBYTE *);
991 extern int CoSymmetrize(UBYTE *);
992 extern int DoTable(UBYTE *,
int);
993 extern int CoTable(UBYTE *);
994 extern int CoTerm(UBYTE *);
995 extern int CoNTable(UBYTE *);
996 extern int CoCTable(UBYTE *);
997 extern int CoToTensor(UBYTE *);
998 extern int CoToVector(UBYTE *);
999 extern int CoTrace4(UBYTE *);
1000 extern int CoTraceN(UBYTE *);
1001 extern int CoChisholm(UBYTE *);
1002 extern int CoTransform(UBYTE *);
1003 extern int CoClearTable(UBYTE *);
1004 extern int DoChain(UBYTE *,
int);
1005 extern int CoChainin(UBYTE *);
1006 extern int CoChainout(UBYTE *);
1007 extern int CoTryReplace(UBYTE *);
1008 extern int CoVector(UBYTE *);
1009 extern int CoWhile(UBYTE *);
1010 extern int CoWrite(UBYTE *);
1011 extern int CoAuto(UBYTE *);
1012 extern int CoTBaddto(UBYTE *);
1013 extern int CoTBaudit(UBYTE *);
1014 extern int CoTBcleanup(UBYTE *);
1015 extern int CoTBcreate(UBYTE *);
1016 extern int CoTBenter(UBYTE *);
1017 extern int CoTBhelp(UBYTE *);
1018 extern int CoTBload(UBYTE *);
1019 extern int CoTBoff(UBYTE *);
1020 extern int CoTBon(UBYTE *);
1021 extern int CoTBopen(UBYTE *);
1022 extern int CoTBreplace(UBYTE *);
1023 extern int CoTBuse(UBYTE *);
1024 extern int CoTestUse(UBYTE *);
1025 extern int CoThreadBucket(UBYTE *);
1026 extern int AddComString(
int,WORD *,UBYTE *,
int);
1027 extern int CompileAlgebra(UBYTE *,
int,WORD *);
1028 extern int IsIdStatement(UBYTE *);
1029 extern UBYTE *IsRHS(UBYTE *,UBYTE);
1030 extern int ParenthesesTest(UBYTE *);
1031 extern int tokenize(UBYTE *,WORD);
1032 extern void WriteTokens(SBYTE *);
1033 extern int simp1token(SBYTE *);
1034 extern int simpwtoken(SBYTE *);
1035 extern int simp2token(SBYTE *);
1036 extern int simp3atoken(SBYTE *,
int);
1037 extern int simp3btoken(SBYTE *,
int);
1038 extern int simp4token(SBYTE *);
1039 extern int simp5token(SBYTE *,
int);
1040 extern int simp6token(SBYTE *,
int);
1041 extern UBYTE *SkipAName(UBYTE *);
1042 extern int TestTables(VOID);
1043 extern int GetLabel(UBYTE *);
1044 extern int CoIdExpression(UBYTE *,
int);
1045 extern int CoAssign(UBYTE *);
1046 extern int DoExpr(UBYTE *,
int,
int);
1047 extern int CompileSubExpressions(SBYTE *);
1048 extern int CodeGenerator(SBYTE *);
1049 extern int CompleteTerm(WORD *,UWORD *,UWORD *,WORD,WORD,
int);
1050 extern int CodeFactors(SBYTE *s);
1051 extern WORD GenerateFactors(WORD,WORD);
1052 extern int InsTree(
int,
int);
1053 extern int FindTree(
int,WORD *);
1054 extern void RedoTree(
CBUF *,
int);
1055 extern void ClearTree(
int);
1056 extern int CatchDollar(
int);
1057 extern int AssignDollar(
PHEAD WORD *,WORD);
1058 extern UBYTE *WriteDollarToBuffer(WORD,WORD);
1059 extern UBYTE *WriteDollarFactorToBuffer(WORD,WORD,WORD);
1060 extern void AddToDollarBuffer(UBYTE *);
1061 extern void TermAssign(WORD *);
1062 extern void WildDollars(PHEAD0);
1063 extern LONG numcommute(WORD *,LONG *);
1064 extern int FullRenumber(
PHEAD WORD *,WORD);
1065 extern int Lus(WORD *,WORD,WORD,WORD,WORD,WORD);
1066 extern int FindLus(
int,
int,
int);
1067 extern int CoReplaceLoop(UBYTE *);
1068 extern int CoFindLoop(UBYTE *);
1069 extern int DoFindLoop(UBYTE *,
int);
1070 extern int CoFunPowers(UBYTE *);
1071 extern int SortTheList(
int *,
int);
1072 extern int MatchIsPossible(WORD *,WORD *);
1073 extern int StudyPattern(WORD *);
1074 extern WORD DolToTensor(
PHEAD WORD);
1075 extern WORD DolToFunction(
PHEAD WORD);
1076 extern WORD DolToVector(
PHEAD WORD);
1077 extern WORD DolToNumber(
PHEAD WORD);
1078 extern WORD DolToSymbol(
PHEAD WORD);
1079 extern WORD DolToIndex(
PHEAD WORD);
1080 extern LONG DolToLong(
PHEAD WORD);
1082 extern int CoPrintTable(UBYTE *);
1083 extern int CoDeallocateTable(UBYTE *);
1084 extern void CleanDollarFactors(
DOLLARS);
1085 extern WORD *TakeDollarContent(
PHEAD WORD *,WORD **);
1088 extern int GetDolNum(
PHEAD WORD *, WORD *);
1091 extern int Optimize(WORD,
int);
1092 extern int ClearOptimize(VOID);
1093 extern int LoadOpti(WORD);
1094 extern int PutObject(WORD *,
int);
1095 extern void CleanOptiBuffer(VOID);
1096 extern int PrintOptima(WORD);
1097 extern int FindScratchName(VOID);
1098 extern WORD MaxPowerOpti(LONG);
1099 extern WORD HuntNumFactor(LONG,WORD *,
int);
1100 extern WORD HuntFactor(LONG,WORD *,
int);
1101 extern void HuntPairs(LONG,WORD);
1102 extern void HuntBrackets(LONG);
1103 extern int AddToOpti(WORD *,
int);
1104 extern LONG TestNewSca(LONG,WORD *,WORD *);
1105 extern void NormOpti(WORD *);
1106 extern void SortOpti(LONG);
1107 extern void SplitOpti(WORD **,LONG);
1108 extern void CombiOpti(VOID);
1109 extern int TakeLongRoot(UWORD *,WORD *,WORD);
1110 extern int TakeRatRoot(UWORD *,WORD *,WORD);
1111 extern int MakeRational(WORD ,WORD , WORD *, WORD *);
1112 extern int MakeLongRational(
PHEAD UWORD *,WORD ,UWORD *,WORD ,UWORD *,WORD *);
1113 extern void HuntPowers(LONG,WORD);
1114 extern void HuntNumBrackets(LONG);
1115 extern void ClearTableTree(
TABLES);
1116 extern int InsTableTree(
TABLES,WORD *);
1117 extern void RedoTableTree(
TABLES,
int);
1118 extern int FindTableTree(
TABLES,WORD *,
int);
1119 extern void finishcbuf(WORD);
1120 extern void clearcbuf(WORD);
1125 extern int InsideDollar(
PHEAD WORD *,WORD);
1128 extern int SetExprCases(
int,
int,
int);
1129 extern int TestSelect(WORD *,WORD *);
1130 extern int MakeSetupAllocs(VOID);
1131 extern int TryFileSetups(VOID);
1132 extern void ExchangeExpressions(
int,
int);
1133 extern void ExchangeDollars(
int,
int);
1134 extern int GetFirstBracket(WORD *,
int);
1135 extern int GetFirstTerm(WORD *,
int);
1136 extern int GetContent(WORD *,
int);
1137 extern int CleanupTerm(WORD *);
1138 extern WORD ContentMerge(
PHEAD WORD *,WORD *);
1139 extern UBYTE *PreIfDollarEval(UBYTE *,
int *);
1140 extern LONG TermsInDollar(WORD);
1141 extern LONG TermsInExpression(WORD);
1142 extern WORD *TranslateExpression(UBYTE *);
1143 extern int IsSetMember(WORD *,WORD);
1144 extern int IsMultipleOf(WORD *,WORD *);
1145 extern int TwoExprCompare(WORD *,WORD *,
int);
1146 extern void UpdatePositions(VOID);
1147 extern void M_check(VOID);
1148 extern void M_print(VOID);
1149 extern void M_check1(VOID);
1150 extern void PrintTime(VOID);
1152 extern POSITION *FindBracket(WORD,WORD *);
1154 extern void ClearBracketIndex(WORD);
1155 extern VOID OpenBracketIndex(WORD);
1156 extern int DoNoParallel(UBYTE *);
1157 extern int DoParallel(UBYTE *);
1158 extern int DoModSum(UBYTE *);
1159 extern int DoModMax(UBYTE *);
1160 extern int DoModMin(UBYTE *);
1161 extern int DoModLocal(UBYTE *);
1162 extern UBYTE *DoModDollar(UBYTE *,
int);
1163 extern int DoProcessBucket(UBYTE *);
1164 extern int DoinParallel(UBYTE *);
1165 extern int DonotinParallel(UBYTE *);
1168 extern int ChainIn(
PHEAD WORD *,WORD);
1169 extern int ChainOut(
PHEAD WORD *,WORD);
1170 extern int ArgumentImplode(
PHEAD WORD *,WORD *);
1171 extern int ArgumentExplode(
PHEAD WORD *,WORD *);
1172 extern int DenToFunction(WORD *,WORD);
1174 extern WORD HowMany(
PHEAD WORD *,WORD *);
1175 extern VOID RemoveDollars(VOID);
1176 extern LONG CountTerms1(PHEAD0);
1177 extern LONG TermsInBracket(
PHEAD WORD *,WORD);
1178 extern int Crash(VOID);
1180 extern char *str_dup(
char *);
1184 extern int ReadIndex(
DBASE *);
1185 extern int WriteIndexBlock(
DBASE *,MLONG);
1186 extern int WriteNamesBlock(
DBASE *,MLONG);
1187 extern int WriteIndex(
DBASE *);
1188 extern int WriteIniInfo(
DBASE *);
1189 extern int ReadIniInfo(
DBASE *);
1190 extern int AddToIndex(
DBASE *,MLONG);
1191 extern DBASE *GetDbase(
char *);
1192 extern DBASE *OpenDbase(
char *);
1193 extern char *ReadObject(
DBASE *,MLONG,
char *);
1194 extern char *ReadijObject(
DBASE *,MLONG,MLONG,
char *);
1195 extern int ExistsObject(
DBASE *,MLONG,
char *);
1196 extern int DeleteObject(
DBASE *,MLONG,
char *);
1197 extern int WriteObject(
DBASE *,MLONG,
char *,
char *,MLONG);
1198 extern MLONG AddObject(
DBASE *,MLONG,
char *,
char *);
1199 extern int Cleanup(
DBASE *);
1200 extern DBASE *NewDbase(
char *,MLONG);
1201 extern void FreeTableBase(
DBASE *);
1202 extern int ComposeTableNames(
DBASE *);
1203 extern int PutTableNames(
DBASE *);
1205 extern MLONG GetTableName(
DBASE *,
char *);
1206 extern MLONG FindTableNumber(
DBASE *,
char *);
1207 extern int TryEnvironment(VOID);
1213 extern int SetupAllInputGZIP(
SORTING *);
1218 extern VOID BeginIdentities(VOID);
1219 extern int WhoAmI(VOID);
1220 extern int StartAllThreads(
int);
1221 extern void StartHandleLock(VOID);
1222 extern VOID TerminateAllThreads(VOID);
1223 extern int GetAvailableThread(VOID);
1224 extern int ConditionalGetAvailableThread(VOID);
1225 extern int BalanceRunThread(
PHEAD int,WORD *,WORD);
1226 extern void WakeupThread(
int,
int);
1227 extern int MasterWait(VOID);
1228 extern int InParallelProcessor(VOID);
1230 extern int MasterMerge(VOID);
1231 extern int PutToMaster(
PHEAD WORD *);
1232 extern void SetWorkerFiles(VOID);
1233 extern int MakeThreadBuckets(
int,
int);
1234 extern int SendOneBucket(
int);
1235 extern int LoadOneThread(
int,
int,THREADBUCKET *,
int);
1236 extern void *RunSortBot(
void *);
1237 extern void MasterWaitAllSortBots(VOID);
1238 extern int SortBotMerge(PHEAD0);
1239 extern int SortBotOut(
PHEAD WORD *);
1240 extern void DefineSortBotTree(VOID);
1241 extern int SortBotMasterMerge(VOID);
1242 extern int SortBotWait(
int);
1243 extern void StartIdentity(VOID);
1244 extern void FinishIdentity(
void *);
1245 extern int SetIdentity(
int *);
1246 extern ALLPRIVATES *InitializeOneThread(
int);
1247 extern void FinalizeOneThread(
int);
1248 extern void ClearAllThreads(VOID);
1249 extern void *RunThread(
void *);
1250 extern void IAmAvailable(
int);
1251 extern int ThreadWait(
int);
1252 extern int ThreadClaimedBlock(
int);
1253 extern int GetThread(
int);
1254 extern int UpdateOneThread(
int);
1255 extern void MasterWaitAll(VOID);
1256 extern void MasterWaitAllBlocks(VOID);
1257 extern int MasterWaitThread(
int);
1258 extern void WakeupMasterFromThread(
int,
int);
1259 extern int LoadReadjusted(VOID);
1260 extern int IniSortBlocks(
int);
1261 extern int TreatIndexEntry(
PHEAD LONG);
1262 extern WORD GetTerm2(
PHEAD WORD *);
1263 extern void SetHideFiles(VOID);
1273 extern int DoPreAddSeparator(UBYTE *);
1274 extern int DoPreRmSeparator(UBYTE *);
1277 extern int openExternalChannel(UBYTE *,
int,UBYTE *,UBYTE *);
1278 extern int initPresetExternalChannels(UBYTE *,
int);
1279 extern int closeExternalChannel(
int);
1280 extern int selectExternalChannel(
int);
1281 extern int getCurrentExternalChannel(VOID);
1282 extern VOID closeAllExternalChannels(VOID);
1284 typedef int (*WRITEBUFTOEXTCHANNEL)(
char *,size_t);
1285 typedef int (*GETCFROMEXTCHANNEL)(VOID);
1286 typedef int (*SETTERMINATORFOREXTERNALCHANNEL)(
char *);
1287 typedef int (*SETKILLMODEFOREXTERNALCHANNEL)(int,int);
1288 typedef LONG (*WRITEFILE)(int,UBYTE *,LONG);
1289 typedef WORD (*COMPARE)(
PHEAD WORD *,WORD *,WORD);
1290 typedef WORD (*GETTERM)(
PHEAD WORD *);
1291 typedef WORD (*FINISHUFFLE)(
PHEAD WORD *);
1292 typedef WORD (*DO_UFFLE)(
PHEAD WORD *,WORD,WORD,WORD);
1294 #define CompareTerms ((COMPARE)AR.CompareRoutine) 1295 #define FiniShuffle ((FINISHUFFLE)AN.SHvar.finishuf) 1296 #define DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle) 1298 extern UBYTE *defineChannel(UBYTE*,
HANDLERS*);
1299 extern int writeToChannel(
int,UBYTE *,
HANDLERS*);
1300 #ifdef WITHEXTERNALCHANNEL 1301 extern LONG WriteToExternalChannel(
int,UBYTE *,LONG);
1303 extern int writeBufToExtChannelOk(
char *,
size_t);
1304 extern int getcFromExtChannelOk(VOID);
1305 extern int setKillModeForExternalChannelOk(
int,
int);
1306 extern int setTerminatorForExternalChannelOk(
char *);
1307 extern int getcFromExtChannelFailure(VOID);
1308 extern int setKillModeForExternalChannelFailure(
int,
int);
1309 extern int setTerminatorForExternalChannelFailure(
char *);
1310 extern int writeBufToExtChannelFailure(
char *,
size_t);
1312 extern int ReleaseTB(VOID);
1317 extern UWORD wranf(PHEAD0);
1318 extern UWORD iranf(
PHEAD UWORD);
1319 extern void iniwranf(PHEAD0);
1320 extern UBYTE *PreRandom(UBYTE *);
1322 extern WORD *PolyNormPoly (
PHEAD WORD);
1323 extern WORD *EvaluateGcd(
PHEAD WORD *);
1328 extern UBYTE *
ReadSaveTerm32(UBYTE *,UBYTE *,UBYTE **,UBYTE *,UBYTE *,
int);
1339 extern VOID NumberMallocAddMemory(PHEAD0);
1340 extern VOID TermMallocAddMemory(PHEAD0);
1341 #ifndef MEMORYMACROS 1342 extern WORD *TermMalloc2(
PHEAD char *text);
1343 extern VOID TermFree2(
PHEAD WORD *term,
char *text);
1344 extern UWORD *NumberMalloc2(
PHEAD char *text);
1345 extern VOID NumberFree2(
PHEAD UWORD *NumberMem,
char *text);
1349 extern VOID iniTools(VOID);
1352 extern WORD RunTransform(
PHEAD WORD *term, WORD *params);
1353 extern WORD RunEncode(
PHEAD WORD *fun, WORD *args, WORD *info);
1354 extern WORD RunDecode(
PHEAD WORD *fun, WORD *args, WORD *info);
1355 extern WORD RunReplace(
PHEAD WORD *fun, WORD *args, WORD *info);
1356 extern WORD RunImplode(WORD *fun, WORD *args);
1357 extern WORD RunExplode(
PHEAD WORD *fun, WORD *args);
1358 extern int TestArgNum(
int n,
int totarg, WORD *args);
1359 extern WORD PutArgInScratch(WORD *arg,UWORD *scrat);
1360 extern UBYTE *ReadRange(UBYTE *s, WORD *out,
int par);
1361 extern WORD RunPermute(
PHEAD WORD *fun, WORD *args, WORD *info);
1362 extern WORD RunReverse(
PHEAD WORD *fun, WORD *args);
1363 extern WORD RunCycle(
PHEAD WORD *fun, WORD *args, WORD *info);
1364 extern WORD RunIsLyndon(
PHEAD WORD *fun, WORD *args,
int par);
1365 extern WORD RunToLyndon(
PHEAD WORD *fun, WORD *args,
int par);
1367 extern int NormPolyTerm(
PHEAD WORD *);
1368 extern WORD ComparePoly(WORD *, WORD *, WORD);
1369 extern int ConvertToPoly(
PHEAD WORD *, WORD *,WORD *,WORD);
1371 extern int ConvertFromPoly(
PHEAD WORD *, WORD *, WORD, WORD, WORD, WORD);
1372 extern WORD FindSubterm(WORD *);
1373 extern WORD FindLocalSubterm(
PHEAD WORD *, WORD);
1374 extern void PrintSubtermList(
int,
int);
1375 extern void PrintExtraSymbol(
int,WORD *,
int);
1376 extern WORD FindSubexpression(WORD *);
1378 extern void UpdateMaxSize(VOID);
1380 extern int CoToPolynomial(UBYTE *);
1381 extern int CoFromPolynomial(UBYTE *);
1382 extern int CoExtraSymbols(UBYTE *);
1383 extern UBYTE *GetDoParam(UBYTE *, WORD **,
int);
1384 extern WORD *GetIfDollarFactor(UBYTE **, WORD *);
1385 extern int CoDo(UBYTE *);
1386 extern int CoEndDo(UBYTE *);
1387 extern int ExtraSymFun(
PHEAD WORD *,WORD);
1389 extern void IniFbufs(VOID);
1390 extern int GCDfunction(
PHEAD WORD *,WORD);
1391 extern WORD *GCDfunction3(
PHEAD WORD *,WORD *);
1392 extern int GCDterms(
PHEAD WORD *,WORD *,WORD *);
1393 extern WORD *PutExtraSymbols(
PHEAD WORD *,WORD,
int *);
1394 extern WORD *TakeExtraSymbols(
PHEAD WORD *,WORD);
1395 extern WORD *MultiplyWithTerm(
PHEAD WORD *, WORD *);
1397 extern int MergeSymbolLists(
PHEAD WORD *, WORD *,
int);
1398 extern int MergeDotproductLists(
PHEAD WORD *, WORD *,
int);
1399 extern WORD *CreateExpression(
PHEAD WORD);
1400 extern int DIVfunction(
PHEAD WORD *,WORD,
int);
1401 extern WORD *ConvertArgument(
PHEAD WORD *,
int *);
1402 extern WORD TestDoLoop(
PHEAD WORD *,WORD);
1403 extern WORD TestEndDoLoop(
PHEAD WORD *,WORD);
1405 extern WORD *poly_gcd(
PHEAD WORD *, WORD *);
1406 extern WORD *poly_div(
PHEAD WORD *, WORD *);
1407 extern WORD *poly_rem(
PHEAD WORD *, WORD *);
1408 extern WORD *poly_inverse(
PHEAD WORD *, WORD *);
1409 extern WORD *poly_ratfun_add(
PHEAD WORD *, WORD *);
1410 extern int poly_ratfun_normalize(
PHEAD WORD *);
1411 extern int poly_factorize_argument(
PHEAD WORD *, WORD *);
1412 extern WORD *poly_factorize_dollar(
PHEAD WORD *);
1413 extern int poly_factorize_expression(
EXPRESSIONS);
1414 extern int poly_unfactorize_expression(
EXPRESSIONS);
1416 extern VOID optimize_print_code (
int);
1419 extern void find_Horner_MCTS_expand_tree();
1420 extern void find_Horner_MCTS_expand_tree_threaded();
1421 extern void optimize_expression_given_Horner();
1422 extern void optimize_expression_given_Horner_threaded();
int NormalModulus(UWORD *, WORD *)
WORD ReadSaveIndex(FILEINDEX *)
void DeleteRecoveryFile()
void AddPotModdollar(WORD)
VOID AddArgs(PHEAD WORD *, WORD *, WORD *)
char * RecoveryFilename()
WORD FindArg(PHEAD WORD *)
int PutPreVar(UBYTE *, UBYTE *, UBYTE *, int)
WORD AddCoef(PHEAD WORD **, WORD **)
WORD PrepPoly(PHEAD 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 *)
int SymbolNormalize(WORD *)
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 *)
int DollarFactorize(PHEAD 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)
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 *)
WORD Deferred(PHEAD WORD *, WORD)
WORD Compare1(PHEAD WORD *, WORD *, WORD)
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 *)