FORM v5.0.1-23-g7a8f756
declare.h
Go to the documentation of this file.
1#ifndef __FDECLARE__
2#define __FDECLARE__
3
9/* #[ License : */
10/*
11 * Copyright (C) 1984-2026 J.A.M. Vermaseren
12 * When using this file you are requested to refer to the publication
13 * J.A.M.Vermaseren "New features of FORM" math-ph/0010025
14 * This is considered a matter of courtesy as the development was paid
15 * for by FOM the Dutch physics granting agency and we would like to
16 * be able to track its scientific use to convince FOM of its value
17 * for the community.
18 *
19 * This file is part of FORM.
20 *
21 * FORM is free software: you can redistribute it and/or modify it under the
22 * terms of the GNU General Public License as published by the Free Software
23 * Foundation, either version 3 of the License, or (at your option) any later
24 * version.
25 *
26 * FORM is distributed in the hope that it will be useful, but WITHOUT ANY
27 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
28 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
29 * details.
30 *
31 * You should have received a copy of the GNU General Public License along
32 * with FORM. If not, see <http://www.gnu.org/licenses/>.
33 */
34/* #] License : */
35
36/*
37 #[ Macro's :
38*/
39
40#define MaX(x,y) ((x) > (y) ? (x): (y))
41#define MiN(x,y) ((x) < (y) ? (x): (y))
42#define ABS(x) ( (x) < 0 ? -(x): (x) )
43#define SGN(x) ( (x) > 0 ? 1 : (x) < 0 ? -1 : 0 )
44#define REDLENG(x) ((((x)<0)?((x)+1):((x)-1))/2)
45#define INCLENG(x) (((x)<0)?(((x)*2)-1):(((x)*2)+1))
46#define GETCOEF(x,y) x += *x;y = x[-1];x -= ABS(y);y=REDLENG(y)
47#define GETSTOP(x,y) y=x+(*x)-1;y -= ABS(*y)-1
48#define StuffAdd(x,y) (((x)<0?-1:1)*(y)+((y)<0?-1:1)*(x))
49
50#define EXCHN(t1,t2,n) { WORD a,i; for(i=0;i<n;i++){a=t1[i];t1[i]=t2[i];t2[i]=a;} }
51#define EXCH(x,y) { WORD a = (x); (x) = (y); (y) = a; }
52
53#define TOKENTOLINE(x,y) if ( AC.OutputSpaces == NOSPACEFORMAT ) { \
54 TokenToLine((UBYTE *)(y)); } else { TokenToLine((UBYTE *)(x)); }
55
56#define UngetFromStream(stream,c) ((stream)->nextchar[(stream)->isnextchar++]=c)
57#ifdef WITHRETURN
58#define AddLineFeed(s,n) { (s)[(n)++] = CARRIAGERETURN; (s)[(n)++] = LINEFEED; }
59#else
60#define AddLineFeed(s,n) { (s)[(n)++] = LINEFEED; }
61#endif
62#define TryRecover(x) Terminate(-1)
63#define UngetChar(c) { pushbackchar = c; }
64#define ParseNumber(x,s) {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';}
65#define ParseSign(sgn,s) {(sgn)=0;while(*(s)=='-'||*(s)=='+'){\
66 if ( *(s)++ == '-' ) sgn ^= 1;}}
67#define ParseSignedNumber(x,s) { int sgn; ParseSign(sgn,s)\
68 ParseNumber(x,s) if ( sgn ) x = -x; }
69
70/* (n) is necessary here, since the macro is sometimes passed dereferenced pointers for n */
71#define NCOPY(s,t,n) { while ( (n)-- > 0 ) { *s++ = *t++; } }
72#define NCOPYI(s,t,n) { while ( (n)-- > 0 ) { *s++ = *t++; } }
73#define NCOPYB(s,t,n) { while ( (n)-- > 0 ) { *s++ = *t++; } }
74#define NCOPYI32(s,t,n) { while ( (n)-- > 0 ) { *s++ = *t++; } }
75#define WCOPY(s,t,n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( (nn)-- > 0 ) { *ss++ = *tt++; } }
76
77/* Use memmove not memcpy: we can't guarantee that s, t do not overlap */
78/* Using memmove produces no measurable performance improvement or regression. */
79/*#define NCOPY(s,t,n) { memmove(s,t,(n)*sizeof(*s)); s+=n; t+=n; n=0; }
80#define NCOPYI(s,t,n) { NCOPY(s,t,n); }
81#define NCOPYB(s,t,n) { NCOPY(s,t,n); }
82#define NCOPYI32(s,t,n) { NCOPY(s,t,n); }
83#define WCOPY(s,t,n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; NCOPY(ss,tt,nn); }*/
84
85#define NeedNumber(x,s,err) { int sgn = 1; \
86 while ( *s == ' ' || *s == '\t' || *s == '-' || *s == '+' ) { \
87 if ( *s == '-' ) {sgn = -sgn;} s++; } \
88 if ( chartype[*s] != 1 ) goto err; \
89 ParseNumber(x,s) \
90 if ( sgn < 0 ) {(x) = -(x);} while ( *s == ' ' || *s == '\t' ) s++;\
91 }
92#define SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; }
93#define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED)
94
95#define SKIPBRA1(s) { int lev1=0; s++; while(*s) { if(*s=='['){lev1++;} \
96 else {if(*s==']'&&--lev1<0){break;}} s++;} }
97#define SKIPBRA2(s) { int lev2=0; s++; while(*s) { if(*s=='{'){lev2++;} \
98 else {if(*s=='}'&&--lev2<0){break;} \
99 else {if(*s=='['){SKIPBRA1(s)}}} s++;} }
100#define SKIPBRA3(s) { int lev3=0; s++; while(*s) { if(*s=='('){lev3++;} \
101 else {if(*s==')'&&--lev3<0){break;} \
102 else {if(*s=='{'){SKIPBRA2(s)} \
103 else {if(*s=='['){SKIPBRA1(s)}}}} s++;} }
104#define SKIPBRA4(s) { int lev4=0; s++; while(*s) { if(*s=='('){lev4++;} \
105 else {if(*s==')'&&--lev4<0){break;} \
106 else {if(*s=='['){SKIPBRA1(s)}}} s++;} }
107#define SKIPBRA5(s) { int lev5=0; s++; while(*s) { if(*s=='{'){lev5++;} \
108 else {if(*s=='}'&&--lev5<0){break;} \
109 else {if(*s=='('){SKIPBRA4(s)} \
110 else {if(*s=='['){SKIPBRA1(s)}}}} s++;} }
111
112/*
113#define CYCLE1(a,i) {WORD iX,jX; iX=*a; for(jX=1;jX<i;jX++)a[jX-1]=a[jX]; a[i-1]=iX;}
114*/
115#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;}
116
117#define AddToCB(c,wx) if(c->Pointer>=c->Top) \
118 {DoubleCbuffer(c-cbuf,c->Pointer,21);} \
119 *(c->Pointer)++ = wx;
120
121#define EXCHINOUT { FILEHANDLE *ffFi = AR.outfile; \
122 AR.outfile = AR.infile; AR.infile = ffFi; }
123#define BACKINOUT { FILEHANDLE *ffFi = AR.outfile; POSITION posi; \
124 AR.outfile = AR.infile; AR.infile = ffFi; \
125 SetEndScratch(AR.infile,&posi); }
126
127#define CopyArg(to,from) { if ( *from > 0 ) { int ica = *from; NCOPY(to,from,ica) } \
128 else if ( *from <= -FUNCTION ) *to++ = *from++; \
129 else { *to++ = *from++; *to++ = *from++; } }
130
131#if ARGHEAD > 2
132#define FILLARG(w) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = 0; }
133#define COPYARG(w,t) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = *t++; }
134#define ZEROARG(w) { int i; for ( i = 2; i < ARGHEAD; i++ ) w[i] = 0; }
135#else
136#define FILLARG(w)
137#define COPYARG(w,t)
138#define ZEROARG(w)
139#endif
140
141#if FUNHEAD > 2
142#define FILLFUN(w) { *w++ = 0; FILLFUN3(w) }
143#define COPYFUN(w,t) { *w++ = *t++; COPYFUN3(w,t) }
144#else
145#define FILLFUN(w)
146#define COPYFUN(w,t)
147#endif
148
149#if FUNHEAD > 3
150#define FILLFUN3(w) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = 0; }
151#define COPYFUN3(w,t) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = *t++; }
152#else
153#define COPYFUN3(w,t)
154#define FILLFUN3(w)
155#endif
156
157#if SUBEXPSIZE > 5
158#define FILLSUB(w) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = 0; }
159#define COPYSUB(w,ww) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = *ww++; }
160#else
161#define FILLSUB(w)
162#define COPYSUB(w,ww)
163#endif
164
165#if EXPRHEAD > 4
166#define FILLEXPR(w) { int ie = EXPRHEAD-4; while ( --ie >= 0 ) *w++ = 0; }
167#else
168#define FILLEXPR(w)
169#endif
170
171#define NEXTARG(x) if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2;
172#define COPY1ARG(s1,t1) { int ica; if ( (ica=*t1) > 0 ) { NCOPY(s1,t1,ica) } \
173 else if(*t1<=-FUNCTION){*s1++=*t1++;} else{*s1++=*t1++;*s1++=*t1++;} }
174
182#define ZeroFillRange(w,begin,end) do { \
183 int tmp_i; \
184 for ( tmp_i = begin; tmp_i < end; tmp_i++ ) { (w)[tmp_i] = 0; } \
185} while (0)
186
187#define TABLESIZE(a,b) (((WORD)sizeof(a))/((WORD)sizeof(b)))
188#define WORDDIF(x,y) (WORD)(x-y)
189#define wsizeof(a) ((WORD)sizeof(a))
190#define VARNAME(type,num) (AC.varnames->namebuffer+type[num].name)
191#define DOLLARNAME(type,num) (AC.dollarnames->namebuffer+type[num].name)
192#define EXPRNAME(num) (AC.exprnames->namebuffer+Expressions[num].name)
193
194#define PREV(x) prevorder?prevorder:x
195
196#define Terminate(x) do { TerminateImpl(x, __FILE__, __LINE__, __FUNCTION__); } while(0)
197#define SETERROR(x) { Terminate(-1); return(-1); }
198
199/* use this macro to avoid the unused parameter warning */
200#define DUMMYUSE(x) (void)(x);
201
202#ifdef _FILE_OFFSET_BITS
203#if _FILE_OFFSET_BITS==64
204/*:[19mar2004 mt]*/
205
206#define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(off_t)(x))
207#define SETBASELENGTH(ss,x) (ss).p1 = (off_t)(x)
208#define SETBASEPOSITION(pp,x) (pp).p1 = (off_t)(x)
209#define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(off_t)(x)) )
210#define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(off_t)(x)) )
211#define DIVPOS(pp,n) ( (pp).p1/(off_t)(n) )
212#define MULPOS(pp,n) (pp).p1 *= (off_t)(n)
213
214#else
215
216#define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(x))
217#define SETBASELENGTH(ss,x) (ss).p1 = (x)
218#define SETBASEPOSITION(pp,x) (pp).p1 = (x)
219#define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) )
220#define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) )
221#define DIVPOS(pp,n) ( (pp).p1/(n) )
222#define MULPOS(pp,n) (pp).p1 *= (n)
223#endif
224#else
225
226#define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(LONG)(x))
227#define SETBASELENGTH(ss,x) (ss).p1 = (LONG)(x)
228#define SETBASEPOSITION(pp,x) (pp).p1 = (LONG)(x)
229#define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) )
230#define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) )
231#define DIVPOS(pp,n) ( (pp).p1/(LONG)(n) )
232#define MULPOS(pp,n) (pp).p1 *= (LONG)(n)
233
234#endif
235#define DIFPOS(ss,pp1,pp2) (ss).p1 = ((pp1).p1-(pp2).p1)
236#define DIFBASE(pp1,pp2) ((pp1).p1-(pp2).p1)
237#define ADD2POS(pp1,pp2) (pp1).p1 += (pp2).p1
238#define PUTZERO(pp) (pp).p1 = 0
239#define BASEPOSITION(pp) ((pp).p1)
240#define SETSTARTPOS(pp) (pp).p1 = -2
241#define NOTSTARTPOS(pp) ( (pp).p1 > -2 )
242#define ISMINPOS(pp) ( (pp).p1 == -1 )
243#define ISEQUALPOS(pp1,pp2) ( (pp1).p1 == (pp2).p1 )
244#define ISNOTEQUALPOS(pp1,pp2) ( (pp1).p1 != (pp2).p1 )
245#define ISLESSPOS(pp1,pp2) ( (pp1).p1 < (pp2).p1 )
246#define ISGEPOS(pp1,pp2) ( (pp1).p1 >= (pp2).p1 )
247#define ISNOTZEROPOS(pp) ( (pp).p1 != 0 )
248#define ISZEROPOS(pp) ( (pp).p1 == 0 )
249#define ISPOSPOS(pp) ( (pp).p1 > 0 )
250#define ISNEGPOS(pp) ( (pp).p1 < 0 )
251extern void TELLFILE(int,POSITION *);
252
253#define TOLONG(x) ((LONG)(x))
254
255#define Add2Com(x) { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); }
256#define Add3Com(x1,x2) { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); }
257#define Add4Com(x1,x2,x3) { WORD cod[4]; cod[0] = x1; cod[1] = 4; \
258 cod[2] = x2; cod[3] = x3; AddNtoL(4,cod); }
259#define Add5Com(x1,x2,x3,x4) { WORD cod[5]; cod[0] = x1; cod[1] = 5; \
260 cod[2] = x2; cod[3] = x3; cod[4] = x4; AddNtoL(5,cod); }
261
262/*
263 The temporary variable ppp is to avoid a compiler warning about strict aliassing
264*/
265#define WantAddPointers(x) while((AT.pWorkPointer+(x))>AR.pWorkSize){WORD ***ppp=&AT.pWorkSpace;\
266 ExpandBuffer((void **)ppp,&AR.pWorkSize,(int)(sizeof(WORD *)));}
267#define WantAddLongs(x) while((AT.lWorkPointer+(x))>AR.lWorkSize){LONG **ppp=&AT.lWorkSpace;\
268 ExpandBuffer((void **)ppp,&AR.lWorkSize,sizeof(LONG));}
269#define WantAddPositions(x) while((AT.posWorkPointer+(x))>AR.posWorkSize){POSITION **ppp=&AT.posWorkSpace;\
270 ExpandBuffer((void **)ppp,&AR.posWorkSize,sizeof(POSITION));}
271
272/* inline in form3.h (or config.h). */
273#define FORM_INLINE inline
274
275/*
276 Macro's for memory management. This can be done by routines, but that
277 would be slower. Inline routines could do this, but we don't want to
278 leave this to the friendliness of the compiler(s).
279 The routines can be found in the file tools.c
280*/
281#define MEMORYMACROS
282
283#ifdef MEMORYMACROS
284
285#define TermMalloc(x) ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] )
286#define NumberMalloc(x) ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] )
287#define CacheNumberMalloc(x) ( (AT.CacheNumberMemTop <= 0 ) ? CacheNumberMallocAddMemory(BHEAD0), AT.CacheNumberMemHeap[--AT.CacheNumberMemTop]: AT.CacheNumberMemHeap[--AT.CacheNumberMemTop] )
288#define TermFree(TermMem,x) AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem)
289#define NumberFree(NumberMem,x) AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem)
290#define CacheNumberFree(NumberMem,x) AT.CacheNumberMemHeap[AT.CacheNumberMemTop++] = (UWORD *)(NumberMem)
291
292#else
293
294#define TermMalloc(x) TermMalloc2(BHEAD (char *)(x))
295#define NumberMalloc(x) NumberMalloc2(BHEAD (char *)(x))
296#define CacheNumberMalloc(x) CacheNumberMalloc2(BHEAD (char *)(x))
297#define TermFree(x,y) TermFree2(BHEAD (WORD *)(x),(char *)(y))
298#define NumberFree(x,y) NumberFree2(BHEAD (UWORD *)(x),(char *)(y))
299#define CacheNumberFree(x,y) CacheNumberFree2(BHEAD (UWORD *)(x),(char *)(y))
300
301#endif
302
303/*
304 * Macros for checking nesting levels in the compiler, used as follows:
305 *
306 * AC.IfSumCheck[AC.IfLevel] = NestingChecksum();
307 * AC.IfLevel++;
308 *
309 * AC.IfLevel--;
310 * if ( AC.IfSumCheck[AC.IfLevel] != NestingChecksum() ) {
311 * MesNesting();
312 * }
313 *
314 * Note that NestingChecksum() also contains AC.IfLevel and so in this case
315 * using increment/decrement operators on it in the left-hand side may be
316 * confusing.
317 */
318#define NestingChecksum() (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel +AC.SwitchLevel)
319#define MesNesting() MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do")
320
321#define MarkPolyRatFunDirty(T) {if(*T&&AR.PolyFunType==2){WORD *TP,*TT;TT=T+*T;TT-=ABS(TT[-1]);\
322TP=T+1;while(TP<TT){if(*TP==AR.PolyFun){TP[2]|=(DIRTYFLAG|MUSTCLEANPRF);}TP+=TP[1];}}}
323
324/*
325 Macros for nesting input levels for #$name = ...; assign instructions.
326 Note that the level should never go below zero.
327*/
328#define PUSHPREASSIGNLEVEL AP.PreAssignLevel++; { GETIDENTITY \
329 if ( AP.PreAssignLevel >= AP.MaxPreAssignLevel ) { int i; \
330 LONG *ap = (LONG *)Malloc1(2*AP.MaxPreAssignLevel*sizeof(LONG *),"PreAssignStack"); \
331 for ( i = 0; i < AP.MaxPreAssignLevel; i++ ) ap[i] = AP.PreAssignStack[i]; \
332 M_free(AP.PreAssignStack,"PreAssignStack"); \
333 AP.MaxPreAssignLevel *= 2; AP.PreAssignStack = ap; \
334 } \
335 *AT.WorkPointer++ = AP.PreContinuation; AP.PreContinuation = 0; \
336 AP.PreAssignStack[AP.PreAssignLevel] = AC.iPointer - AC.iBuffer; }
337
338#define POPPREASSIGNLEVEL if ( AP.PreAssignLevel > 0 ) { GETIDENTITY \
339 AC.iPointer = AC.iBuffer + AP.PreAssignStack[AP.PreAssignLevel--]; \
340 AP.PreContinuation = *--AT.WorkPointer; \
341 *AC.iPointer = 0; }
342
343#ifdef WITHFLOAT
344/*
345 The following macro's are needed to avoid problems with the compilers
346 and gmp.h. For the C++ files we need the Form include files to be inside
347 and extern C {} environment, but then the structs.h needs gmp.h to
348 recognise the mpf_t datatype. This causes no end of problems.
349 Hence we collect the sensitive objects as (void *) and cast them to
350 something usable with the macro's below. This way the gmp.h file
351 needs to be included only in a very limited number of .c files.
352*/
353#define mpftab1 ((mpf_t *)(AT.mpf_tab1))
354#define mpftab2 ((mpf_t *)(AT.mpf_tab2))
355#define mpfaux_ ((mpf_t *)(AT.aux_))
356#define aux1 (((mpf_t *)(AT.aux_))[0])
357#define aux2 (((mpf_t *)(AT.aux_))[1])
358#define aux3 (((mpf_t *)(AT.aux_))[2])
359#define aux4 (((mpf_t *)(AT.aux_))[3])
360#define aux5 (((mpf_t *)(AT.aux_))[4])
361#define auxjm (((mpf_t *)(AT.aux_))[5])
362#define auxjjm (((mpf_t *)(AT.aux_))[6])
363#define auxsum (((mpf_t *)(AT.aux_))[7])
364
365#define mpfdelta1 (((mpf_t *)(AS.delta_1))[0])
366
367#endif
368
369
370/*
371 MesPrint("P-level popped to %d with %d",AP.PreAssignLevel,(WORD)(AC.iPointer - AC.iBuffer));
372
373 #] Macro's :
374 #[ Inline functions :
375*/
376
377/*
378 * The following three functions give the unsigned absolute value of a signed
379 * integer even for the most negative integer. This is beyond the scope of
380 * the standard abs() function and its family, whose return-values are signed.
381 * In short, we should not use the unary minus operator with signed numbers
382 * unless we are sure that there are no integer overflows. Instead, we rely on
383 * two well-defined operations: (i) signed-to-unsigned conversion and
384 * (ii) unary minus of unsigned operands.
385 *
386 * See also:
387 * https://stackoverflow.com/a/4536188 (Unary minus and signed-to-unsigned conversion)
388 * https://stackoverflow.com/q/8026694 (C: unary minus operator behavior with unsigned operands)
389 * https://stackoverflow.com/q/1610947 (Why does stdlib.h's abs() family of functions return a signed value?)
390 * https://blog.regehr.org/archives/226 (A Guide to Undefined Behavior in C and C++, Part 2)
391 */
392static inline unsigned int IntAbs(int x)
393{
394 if ( x >= 0 ) return (unsigned int)x;
395 return(-((unsigned int)x));
396}
397
398static inline UWORD WordAbs(WORD x)
399{
400 if ( x >= 0 ) return (UWORD)x;
401 return(-((UWORD)x));
402}
403
404static inline ULONG LongAbs(LONG x)
405{
406 if ( x >= 0 ) return (ULONG)x;
407 return(-((ULONG)x));
408}
409
410/*
411 * The following functions provide portable unsigned-to-signed conversions
412 * (to avoid the implementation-defined behaviour), which is expected to be
413 * optimized to a no-op.
414 *
415 * See also:
416 * https://stackoverflow.com/a/13208789 (Efficient unsigned-to-signed cast avoiding implementation-defined behavior)
417 */
418static inline int UnsignedToInt(unsigned int x)
419{
420 extern void TerminateImpl(int, const char*, int, const char*) NORETURN;
421 if ( x <= INT_MAX ) return((int)x);
422 if ( x >= (unsigned int)INT_MIN )
423 return((int)(x - (unsigned int)INT_MIN) + INT_MIN);
424 Terminate(1);
425 return(0);
426}
427
428static inline WORD UWordToWord(UWORD x)
429{
430 extern void TerminateImpl(int, const char*, int, const char*) NORETURN;
431 if ( x <= WORD_MAX_VALUE ) return((WORD)x);
432 if ( x >= (UWORD)WORD_MIN_VALUE )
433 return((WORD)(x - (UWORD)WORD_MIN_VALUE) + WORD_MIN_VALUE);
434 Terminate(1);
435 return(0);
436}
437
438static inline LONG ULongToLong(ULONG x)
439{
440 extern void TerminateImpl(int, const char*, int, const char*) NORETURN;
441 if ( x <= LONG_MAX_VALUE ) return((LONG)x);
442 if ( x >= (ULONG)LONG_MIN_VALUE )
443 return((LONG)(x - (ULONG)LONG_MIN_VALUE) + LONG_MIN_VALUE);
444 Terminate(1);
445 return(0);
446}
447
448/*
449 #] Inline functions :
450 #[ Thread objects :
451*/
452
459#ifdef WITHPTHREADS
460
461#define EXTERNLOCK(x) extern pthread_mutex_t x;
462#define INILOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER;
463#define EXTERNRWLOCK(x) extern pthread_rwlock_t x;
464#define INIRWLOCK(x) pthread_rwlock_t x = PTHREAD_RWLOCK_INITIALIZER;
465#define INIRECLOCK(x) do { pthread_mutexattr_t attrib; \
466 pthread_mutexattr_init(&attrib); \
467 pthread_mutexattr_settype(&attrib, PTHREAD_MUTEX_RECURSIVE); \
468 pthread_mutex_init(&(x), &attrib); \
469 pthread_mutexattr_destroy(&attrib); \
470 } while(0)
471#ifdef DEBUGGINGLOCKS
472#include <asm/errno.h>
473#define LOCK(x) while ( pthread_mutex_trylock(&(x)) == EBUSY ) {}
474#define RWLOCKR(x) while ( pthread_rwlock_tryrdlock(&(x)) == EBUSY ) {}
475#define RWLOCKW(x) while ( pthread_rwlock_trywrlock(&(x)) == EBUSY ) {}
476#else
477#define LOCK(x) pthread_mutex_lock(&(x))
478#define RWLOCKR(x) pthread_rwlock_rdlock(&(x))
479#define RWLOCKW(x) pthread_rwlock_wrlock(&(x))
480#endif
481#define UNLOCK(x) pthread_mutex_unlock(&(x))
482#define UNRWLOCK(x) pthread_rwlock_unlock(&(x))
483#define MLOCK(x) LOCK(x)
484#define MUNLOCK(x) UNLOCK(x)
485
486#define GETBIDENTITY
487#define GETIDENTITY int identity = WhoAmI(); ALLPRIVATES *B = AB[identity];
488#else
489
490#define EXTERNLOCK(x)
491#define INILOCK(x)
492#define LOCK(x)
493#define UNLOCK(x)
494#define EXTERNRWLOCK(x)
495#define INIRWLOCK(x)
496#define RWLOCKR(x)
497#define RWLOCKW(x)
498#define UNRWLOCK(x)
499#ifdef WITHMPI
500#define MLOCK(x) do { if ( PF.me != MASTER ) PF_MLock(); } while (0)
501#define MUNLOCK(x) do { if ( PF.me != MASTER ) PF_MUnlock(); } while (0)
502#else
503#define MLOCK(x)
504#define MUNLOCK(x)
505#endif
506#define GETIDENTITY
507#define GETBIDENTITY
508
509#endif
510
511/*
512 #] Thread objects :
513 #[ Declarations :
514*/
515
516#ifdef TERMMALLOCDEBUG
517extern WORD **DebugHeap1, **DebugHeap2;
518#endif
519
524extern void StartVariables(void);
525extern void setSignalHandlers(void);
526extern UBYTE *CodeToLine(WORD,UBYTE *);
527extern UBYTE *AddArrayIndex(WORD ,UBYTE *);
528extern INDEXENTRY *FindInIndex(WORD,FILEDATA *,WORD,WORD);
529extern INDEXENTRY *NextFileIndex(POSITION *);
530extern WORD *PasteTerm(PHEAD WORD,WORD *,WORD *,WORD,WORD);
531extern UBYTE *StrCopy(UBYTE *,UBYTE *);
532extern UBYTE *WrtPower(UBYTE *,WORD);
533extern int AccumGCD(PHEAD UWORD *,WORD *,UWORD *,WORD);
534extern void AddArgs(PHEAD WORD *,WORD *,WORD *);
535extern int AddCoef(PHEAD WORD **,WORD **);
536extern int AddLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
537extern int AddPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
538extern int AddPoly(PHEAD WORD **,WORD **);
539extern int AddRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
540extern void AddToLine(UBYTE *);
541extern int AddWild(PHEAD WORD,WORD,WORD);
542extern int BigLong(UWORD *,WORD,UWORD *,WORD);
543extern int BinomGen(PHEAD WORD *,WORD,WORD **,WORD,WORD,WORD,WORD,WORD,UWORD *,WORD);
544extern int CheckWild(PHEAD WORD,WORD,WORD,WORD *);
545extern int Chisholm(PHEAD WORD *,WORD);
546extern int CleanExpr(WORD);
547extern void CleanUp(WORD);
548extern void ClearWild(PHEAD0);
549extern int CompareFunctions(WORD *,WORD *);
550extern int Commute(WORD *,WORD *);
551extern WORD DetCommu(WORD *);
552extern WORD DoesCommu(WORD *);
553extern int CompArg(WORD *,WORD *);
554extern WORD CompCoef(WORD *, WORD *);
555extern int CompGroup(PHEAD WORD,WORD **,WORD *,WORD *,WORD);
556extern WORD Compare1(PHEAD WORD *,WORD *,WORD);
557extern WORD CountDo(WORD *,WORD *);
558extern WORD CountFun(WORD *,WORD *);
559extern WORD DimensionSubterm(WORD *);
560extern WORD DimensionTerm(WORD *);
561extern WORD DimensionExpression(PHEAD WORD *);
562extern int Deferred(PHEAD WORD *,WORD);
563extern int DeleteStore(WORD);
564extern WORD DetCurDum(PHEAD WORD *);
565extern void DetVars(WORD *,WORD);
566extern int Distribute(DISTRIBUTE *,WORD);
567extern int DivLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *,UWORD *,WORD *);
568extern int DivRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
569extern int Divvy(PHEAD UWORD *,WORD *,UWORD *,WORD);
570extern int DoDelta(WORD *);
571extern int DoDelta3(PHEAD WORD *,WORD);
572extern int TestPartitions(WORD *, PARTI *);
573extern int DoPartitions(PHEAD WORD *,WORD);
574extern int CoCanonicalize(UBYTE *);
575extern int DoCanonicalize(PHEAD WORD *, WORD *);
576extern int GenDiagrams(PHEAD WORD *,WORD);
577extern int DoTopologyCanonicalize(PHEAD WORD *,WORD,WORD,WORD *);
578extern int DoShattering(PHEAD WORD *,WORD *,WORD *,WORD);
579extern int DoTableExpansion(WORD *,WORD);
580extern int DoDistrib(PHEAD WORD *,WORD);
581extern int DoShuffle(WORD *,WORD,WORD,WORD);
582extern int DoPermutations(PHEAD WORD *,WORD);
583extern int Shuffle(WORD *, WORD *, WORD *);
584extern int FinishShuffle(WORD *);
585extern int DoStuffle(WORD *,WORD,WORD,WORD);
586extern int Stuffle(WORD *, WORD *, WORD *);
587extern int FinishStuffle(WORD *);
588extern WORD *StuffRootAdd(WORD *, WORD *, WORD *);
589extern int TestUse(WORD *,WORD);
590extern DBASE *FindTB(UBYTE *);
591extern int CheckTableDeclarations(DBASE *);
592extern void Apply(WORD *,WORD);
593extern int ApplyExec(WORD *,int,WORD);
594extern void ApplyReset(WORD);
595extern void TableReset(void);
596extern void ReWorkT(WORD *,WORD *,WORD);
597extern WORD GetIfDollarNum(WORD *, WORD *);
598extern int FindVar(WORD *,WORD *);
599extern int DoIfStatement(PHEAD WORD *,WORD *);
600extern int DoOnePow(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD,WORD *);
601extern void DoRevert(WORD *,WORD *);
602extern int DoSumF1(PHEAD WORD *,WORD *,WORD,WORD);
603extern int DoSumF2(PHEAD WORD *,WORD *,WORD,WORD);
604extern int DoTheta(PHEAD WORD *);
605extern LONG EndSort(PHEAD WORD *,int);
606extern int EntVar(WORD,UBYTE *,WORD,WORD,WORD,WORD);
607extern int EpfCon(PHEAD WORD *,WORD *,WORD,WORD);
608extern int EpfFind(PHEAD WORD *,WORD *);
609extern WORD EpfGen(WORD,WORD *,WORD *,WORD *,WORD);
610extern int EqualArg(WORD *,WORD,WORD);
611extern int Factorial(PHEAD WORD,UWORD *,WORD *);
612extern int Bernoulli(WORD,UWORD *,WORD *);
613extern int FactorIn(PHEAD WORD *,WORD);
614extern int FactorInExpr(PHEAD WORD *,WORD);
615extern int FindAll(PHEAD WORD *,WORD *,WORD,WORD *);
616extern WORD FindMulti(PHEAD WORD *,WORD *);
617extern int FindOnce(PHEAD WORD *,WORD *);
618extern int FindOnly(PHEAD WORD *,WORD *);
619extern int FindRest(PHEAD WORD *,WORD *);
620extern void FindSpecial(WORD *);
621extern WORD FindrNumber(WORD,VARRENUM *);
622extern void FiniLine(void);
623extern int FiniTerm(PHEAD WORD *,WORD *,WORD *,WORD,WORD);
624extern int FlushOut(POSITION *,FILEHANDLE *,int);
625extern void FunLevel(PHEAD WORD *);
626extern void AdjustRenumScratch(PHEAD0);
627extern void GarbHand(void);
628extern int GcdLong(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
629extern int LcmLong(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
630extern void GCD(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
631extern ULONG GCD2(ULONG,ULONG);
632extern int Generator(PHEAD WORD *,WORD);
633extern int GetBinom(UWORD *,WORD *,WORD,WORD);
634extern WORD GetFromStore(WORD *,POSITION *,RENUMBER,WORD *,WORD);
635extern int GetLong(UBYTE *,UWORD *,WORD *);
636extern WORD GetMoreTerms(WORD *);
637extern int GetMoreFromMem(WORD *,WORD **);
638extern WORD GetOneTerm(PHEAD WORD *,FILEHANDLE *,POSITION *,int);
639extern RENUMBER GetTable(WORD,POSITION *,WORD);
640extern WORD GetTerm(PHEAD WORD *);
641extern int Glue(PHEAD WORD *,WORD *,WORD *,WORD);
642extern int InFunction(PHEAD WORD *,WORD *);
643extern void IniLine(WORD);
644extern void IniVars(void);
645extern int InsertTerm(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD);
646extern void LongToLine(UWORD *,WORD);
647extern int MakeDirty(WORD *,WORD *,WORD);
648extern void MarkDirty(WORD *,WORD);
649extern void PolyFunDirty(PHEAD WORD *);
650extern void PolyFunClean(PHEAD WORD *);
651extern int MakeModTable(void);
652extern int MatchE(PHEAD WORD *,WORD *,WORD *,WORD);
653extern int MatchCy(PHEAD WORD *,WORD *,WORD *,WORD);
654extern int FunMatchCy(PHEAD WORD *,WORD *,WORD *,WORD);
655extern int FunMatchSy(PHEAD WORD *,WORD *,WORD *,WORD);
656extern int MatchArgument(PHEAD WORD *,WORD *);
657extern int MatchFunction(PHEAD WORD *,WORD *,WORD *);
658extern int MergePatches(WORD);
659extern int MesCerr(char *, UBYTE *);
660extern int MesComp(char *, UBYTE *, UBYTE *);
661extern int Modulus(WORD *);
662extern void MoveDummies(PHEAD WORD *,WORD);
663extern int MulLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
664extern int MulRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
665extern int Mully(PHEAD UWORD *,WORD *,UWORD *,WORD);
666extern int MultDo(PHEAD WORD *,WORD *);
667extern int NewSort(PHEAD0);
668extern int ExtraSymbol(WORD,WORD,WORD,WORD *,WORD *);
669extern int Normalize(PHEAD WORD *);
670extern int BracketNormalize(PHEAD WORD *);
671extern void DropCoefficient(PHEAD WORD *);
672extern void DropSymbols(PHEAD WORD *);
673extern int PutInside(PHEAD WORD *, WORD *);
674extern void OpenTemp(void);
675extern void Pack(UWORD *,WORD *,UWORD *,WORD );
676extern LONG PasteFile(PHEAD WORD,WORD *,POSITION *,WORD **,RENUMBER,WORD *,WORD);
677extern int Permute(PERM *,WORD);
678extern int PermuteP(PERMP *,WORD);
679extern int PolyFunMul(PHEAD WORD *);
680extern int PopVariables(void);
681extern int PrepPoly(PHEAD WORD *,WORD);
682extern int Processor(void);
683extern int Product(UWORD *,WORD *,WORD);
684extern void PrtLong(UWORD *,WORD,UBYTE *);
685extern void PrtTerms(void);
686extern void PrintDeprecation(const char *,const char *);
687extern void PrintFeatureList(void);
688extern void PrintRunningTime(void);
689extern LONG GetRunningTime(void);
690extern int PutBracket(PHEAD WORD *);
691extern LONG PutIn(FILEHANDLE *,POSITION *,WORD *,WORD **,int);
692extern int PutInStore(INDEXENTRY *,WORD);
693extern WORD PutOut(PHEAD WORD *,POSITION *,FILEHANDLE *,WORD);
694extern UWORD Quotient(UWORD *,WORD *,WORD);
695extern int RaisPow(PHEAD UWORD *,WORD *,UWORD);
696extern void RaisPowCached (PHEAD WORD, WORD, UWORD **, WORD *);
697extern WORD RaisPowMod (WORD, WORD, WORD);
698extern int NormalModulus(UWORD *,WORD *);
699extern int MakeInverses(void);
700extern int GetModInverses(WORD,WORD,WORD *,WORD *);
701extern int GetLongModInverses(PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *);
702extern void RatToLine(UWORD *,WORD);
703extern int RatioFind(PHEAD WORD *,WORD *);
704extern int RatioGen(PHEAD WORD *,WORD *,WORD,WORD);
705extern WORD ReNumber(PHEAD WORD *);
706extern WORD ReadSnum(UBYTE **);
707extern WORD Remain10(UWORD *,WORD *);
708extern WORD Remain4(UWORD *,WORD *);
709extern int ResetScratch(void);
710extern int ResolveSet(PHEAD WORD *,WORD *,WORD *);
711extern int RevertScratch(void);
712extern int ScanFunctions(PHEAD WORD *,WORD *,WORD);
713extern void SeekScratch(FILEHANDLE *,POSITION *);
714extern void SetEndScratch(FILEHANDLE *,POSITION *);
715extern void SetEndHScratch(FILEHANDLE *,POSITION *);
716extern int SetFileIndex(void);
717extern int Sflush(FILEHANDLE *);
718extern int Simplify(PHEAD UWORD *,WORD *,UWORD *,WORD *);
719extern int SortWild(WORD *,WORD);
720extern FILE *LocateBase(char **,char **,char *);
721extern LONG SplitMerge(PHEAD WORD **,LONG);
722extern int StoreTerm(PHEAD WORD *);
723extern void SubPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
724extern void Substitute(PHEAD WORD *,WORD *,WORD);
725extern int SymFind(PHEAD WORD *,WORD *);
726extern int SymGen(PHEAD WORD *,WORD *,WORD,WORD);
727extern WORD Symmetrize(PHEAD WORD *,WORD *,WORD,WORD,WORD);
728extern int FullSymmetrize(PHEAD WORD *,int);
729extern int TakeModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
730extern int TakeNormalModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
731extern void TalToLine(UWORD);
732extern int TenVec(PHEAD WORD *,WORD *,WORD,WORD);
733extern int TenVecFind(PHEAD WORD *,WORD *);
734extern int TermRenumber(WORD *,RENUMBER,WORD);
735extern void TestDrop(void);
736extern void PutInVflags(WORD);
737extern int TestMatch(PHEAD WORD *,WORD *);
738extern WORD TestSub(PHEAD WORD *,WORD);
739extern LONG TimeCPU(WORD);
740extern LONG TimeChildren(WORD);
741extern LONG TimeWallClock(WORD);
742extern LONG Timer(int);
743extern int GetTimerInfo(LONG **,LONG **);
744extern void WriteTimerInfo(LONG *,LONG *);
745extern LONG GetWorkerTimes(void);
746extern int ToStorage(EXPRESSIONS,POSITION *);
747extern void TokenToLine(UBYTE *);
748extern int Trace4(PHEAD WORD *,WORD *,WORD,WORD);
749extern int Trace4Gen(PHEAD TRACES *,WORD);
750extern int Trace4no(WORD,WORD *,TRACES *);
751extern int TraceFind(PHEAD WORD *,WORD *);
752extern int TraceN(PHEAD WORD *,WORD *,WORD,WORD);
753extern int TraceNgen(PHEAD TRACES *,WORD);
754extern WORD TraceNno(WORD,WORD *,TRACES *);
755extern int Traces(PHEAD WORD *,WORD *,WORD,WORD);
756extern WORD Trick(WORD *,TRACES *);
757extern int TryDo(PHEAD WORD *,WORD *,WORD);
758extern void UnPack(UWORD *,WORD,WORD *,WORD *);
759extern int VarStore(UBYTE *,WORD,WORD,WORD);
760extern WORD WildFill(PHEAD WORD *,WORD *,WORD *);
761extern int WriteAll(void);
762extern int WriteOne(UBYTE *,int,int,WORD);
763extern void WriteArgument(WORD *);
764extern int WriteExpression(WORD *,LONG);
765extern int WriteInnerTerm(WORD *,WORD);
766extern void WriteLists(void);
767extern void WriteSetup(void);
768extern void WriteStats(POSITION *,WORD,WORD);
769extern int WriteSubTerm(WORD *,WORD);
770extern int WriteTerm(WORD *,WORD *,WORD,WORD,WORD);
771extern int execarg(PHEAD WORD *,WORD);
772extern int execterm(PHEAD WORD *,WORD);
773extern void SpecialCleanup(PHEAD0);
774extern void SetMods(void);
775extern void UnSetMods(void);
776
777/*---------------------------------------------------------------------*/
778
779extern int DoExecute(WORD,WORD);
780extern void SetScratch(FILEHANDLE *,POSITION *);
781extern void Warning(char *);
782extern void HighWarning(char *);
783extern int SpareTable(TABLES);
784
785extern UBYTE *strDup1(UBYTE *,char *);
786extern void *Malloc1(LONG,const char *);
787extern int DoTail(int,UBYTE **);
788extern int OpenInput(void);
789extern int PutPreVar(UBYTE *,UBYTE *,UBYTE *,int);
790extern void Error0(char *);
791extern void Error1(char *,UBYTE *);
792extern void Error2(char *,char *,UBYTE *);
793extern UBYTE ReadFromStream(STREAM *);
794extern UBYTE GetFromStream(STREAM *);
795extern UBYTE LookInStream(STREAM *);
796extern STREAM *OpenStream(UBYTE *,int,int,int);
797extern int LocateFile(UBYTE **,int);
798extern STREAM *CloseStream(STREAM *);
799extern void PositionStream(STREAM *,LONG);
800extern int ReverseStatements(STREAM *);
801extern int ProcessOption(UBYTE *,UBYTE *,int);
802extern int DoSetups(void);
803extern void TerminateImpl(int, const char *,int, const char *) NORETURN;
804extern NAMENODE *GetNode(NAMETREE *,UBYTE *);
805extern int AddName(NAMETREE *,UBYTE *,WORD,WORD,int *);
806extern int GetName(NAMETREE *,UBYTE *,WORD *,int);
807extern UBYTE *GetFunction(UBYTE *,WORD *);
808extern UBYTE *GetNumber(UBYTE *,WORD *);
809extern int GetLastExprName(UBYTE *,WORD *);
810extern int GetAutoName(UBYTE *,WORD *);
811extern int GetVar(UBYTE *,WORD *,WORD *,int,int);
812extern int MakeDubious(NAMETREE *,UBYTE *,WORD *);
813extern int GetOName(NAMETREE *,UBYTE *,WORD *,int);
814extern void DumpTree(NAMETREE *);
815extern void DumpNode(NAMETREE *,WORD,WORD);
816extern void LinkTree(NAMETREE *,WORD,WORD);
817extern void CopyTree(NAMETREE *,NAMETREE *,WORD,WORD);
818extern int CompactifyTree(NAMETREE *,WORD);
819extern NAMETREE *MakeNameTree(void);
820extern void FreeNameTree(NAMETREE *);
821extern int AddExpression(UBYTE *,int,int);
822extern int AddSymbol(UBYTE *,int,int,int,int);
823extern int AddDollar(UBYTE *,WORD,WORD *,LONG);
824extern int ReplaceDollar(WORD,WORD,WORD *,LONG);
825extern int DollarRaiseLow(UBYTE *,LONG);
826extern int AddVector(UBYTE *,int,int);
827extern int AddDubious(UBYTE *);
828extern int AddIndex(UBYTE *,int,int);
829extern UBYTE *DoDimension(UBYTE *,int *,int *);
830extern int AddFunction(UBYTE *,int,int,int,int,int,int,int);
831extern int CoCommuteInSet(UBYTE *);
832extern int CoFunction(UBYTE *,int,int);
833extern int TestName(UBYTE *);
834extern int AddSet(UBYTE *,WORD);
835extern int DoElements(UBYTE *,SETS,UBYTE *);
836extern int DoTempSet(UBYTE *,UBYTE *);
837extern int NameConflict(int,UBYTE *);
838extern int OpenFile(char *);
839extern int OpenAddFile(char *);
840extern int ReOpenFile(char *);
841extern int CreateFile(char *);
842extern int CreateLogFile(char *);
843extern void CloseFile(int);
844extern int CopyFile(char *, char *);
845extern int CreateHandle(void);
846extern LONG ReadFile(int,UBYTE *,LONG);
847extern LONG ReadPosFile(PHEAD FILEHANDLE *,UBYTE *,LONG,POSITION *);
848extern LONG WriteFileToFile(int,UBYTE *,LONG);
849extern void SeekFile(int,POSITION *,int);
850extern LONG TellFile(int);
851extern void FlushFile(int);
852extern int GetPosFile(int,fpos_t *);
853extern int SetPosFile(int,fpos_t *);
854extern void SynchFile(int);
855extern void TruncateFile(int);
856extern int GetChannel(char *,int);
857extern int GetAppendChannel(char *);
858extern int CloseChannel(char *);
859extern void inictable(void);
860extern KEYWORD *findcommand(UBYTE *);
861extern int inicbufs(void);
862extern void StartFiles(void);
863extern UBYTE *MakeDate(void);
864extern void PreProcessor(void);
865extern void *FromList(LIST *);
866extern void *From0List(LIST *);
867extern void *FromVarList(LIST *);
868extern int DoubleList(void ***,int *,int,char *);
869extern int DoubleLList(void ***,LONG *,int,char *);
870extern void DoubleBuffer(void **,void **,int,char *);
871extern void ExpandBuffer(void **,LONG *,int);
872extern LONG iexp(LONG,int);
873extern int IsLikeVector(WORD *);
874extern int AreArgsEqual(WORD *,WORD *);
875extern int CompareArgs(WORD *,WORD *);
876extern UBYTE *SkipField(UBYTE *,int);
877extern int StrCmp(UBYTE *,UBYTE *);
878extern int StrICmp(UBYTE *,UBYTE *);
879extern int StrHICmp(UBYTE *,UBYTE *);
880extern int StrICont(UBYTE *,UBYTE *);
881extern int CmpArray(WORD *,WORD *,WORD);
882extern int ConWord(UBYTE *,UBYTE *);
883extern int StrLen(UBYTE *);
884extern UBYTE *GetPreVar(UBYTE *,int);
885extern void ToGeneral(WORD *,WORD *,WORD);
886extern WORD ToPolyFunGeneral(PHEAD WORD *);
887extern int ToFast(WORD *,WORD *);
888extern SETUPPARAMETERS *GetSetupPar(UBYTE *);
889extern int RecalcSetups(void);
890extern int AllocSetups(void);
891extern SORTING *AllocSort(LONG,LONG,LONG,LONG,int,int,LONG,int);
892extern void AllocSortFileName(SORTING *);
893extern UBYTE *LoadInputFile(UBYTE *,int);
894extern UBYTE GetInput(void);
895extern void ClearPushback(void);
896extern UBYTE GetChar(int);
897extern void CharOut(UBYTE);
898extern void UnsetAllowDelay(void);
899extern void PopPreVars(int);
900extern void IniModule(int);
901extern void IniSpecialModule(int);
902extern int ModuleInstruction(int *,int *);
903extern int PreProInstruction(void);
904extern int LoadInstruction(int);
905extern int LoadStatement(int);
906extern KEYWORD *FindKeyWord(UBYTE *,KEYWORD *,int);
907extern KEYWORD *FindInKeyWord(UBYTE *,KEYWORD *,int);
908extern int DoDefine(UBYTE *);
909extern int DoRedefine(UBYTE *);
910extern int TheDefine(UBYTE *,int);
911extern int TheUndefine(UBYTE *);
912extern int ClearMacro(UBYTE *);
913extern int DoUndefine(UBYTE *);
914extern int DoInclude(UBYTE *);
915extern int DoReverseInclude(UBYTE *);
916extern int Include(UBYTE *,int);
917/*[14apr2004 mt]:*/
918extern int DoExternal(UBYTE *);
919extern int DoToExternal(UBYTE *);
920extern int DoFromExternal(UBYTE *);
921extern int DoPrompt(UBYTE *);
922extern int DoSetExternal(UBYTE *);
923/*[10may2006 mt]:*/
924extern int DoSetExternalAttr(UBYTE *);
925/*:[10may2006 mt]*/
926extern int DoRmExternal(UBYTE *);
927/*:[14apr2004 mt]*/
928extern int DoFactDollar(UBYTE *);
929extern WORD GetDollarNumber(UBYTE **,DOLLARS);
930extern int DoSetRandom(UBYTE *);
931extern int DoOptimize(UBYTE *);
932extern int DoClearOptimize(UBYTE *);
933extern int DoSkipExtraSymbols(UBYTE *);
934extern int DoTimeOutAfter(UBYTE *);
935extern int DoMessage(UBYTE *);
936extern int DoPreOut(UBYTE *);
937extern int DoPreAppend(UBYTE *);
938extern int DoPreCreate(UBYTE *);
939extern int DoPreAssign(UBYTE *);
940extern int DoPreBreak(UBYTE *);
941extern int DoPreDefault(UBYTE *);
942extern int DoPreSwitch(UBYTE *);
943extern int DoPreEndSwitch(UBYTE *);
944extern int DoPreCase(UBYTE *);
945extern int DoPreShow(UBYTE *);
946extern int DoPreExchange(UBYTE *);
947extern int DoSystem(UBYTE *);
948extern int DoPipe(UBYTE *);
949extern void StartPrepro(void);
950extern int DoIfdef(UBYTE *,int);
951extern int DoIfydef(UBYTE *);
952extern int DoIfndef(UBYTE *);
953extern int DoElse(UBYTE *);
954extern int DoElseif(UBYTE *);
955extern int DoEndif(UBYTE *);
956extern int DoTerminate(UBYTE *);
957extern int DoIf(UBYTE *);
958extern int DoCall(UBYTE *);
959extern int DoDebug(UBYTE *);
960extern int DoContinueDo(UBYTE *);
961extern int DoDo(UBYTE *);
962extern int DoBreakDo(UBYTE *);
963extern int DoEnddo(UBYTE *);
964extern int DoEndprocedure(UBYTE *);
965extern int DoInside(UBYTE *);
966extern int DoEndInside(UBYTE *);
967extern int DoProcedure(UBYTE *);
968extern int DoPrePrintTimes(UBYTE *);
969extern int DoPreWrite(UBYTE *);
970extern int DoPreClose(UBYTE *);
971extern int DoPreRemove(UBYTE *);
972extern int DoPreSortReallocate(UBYTE *);
973extern int DoCommentChar(UBYTE *);
974extern int DoPrcExtension(UBYTE *);
975extern int DoPreReset(UBYTE *);
976extern void WriteString(int,UBYTE *,int);
977extern void WriteUnfinString(int,UBYTE *,int);
978extern UBYTE *AddToString(UBYTE *,UBYTE *,int);
979extern UBYTE *PreCalc(void);
980extern UBYTE *PreEval(UBYTE *,LONG *);
981extern void NumToStr(UBYTE *,LONG);
982extern int PreCmp(int,int,UBYTE *,int,int,UBYTE *,int);
983extern int PreEq(int,int,UBYTE *,int,int,UBYTE *,int);
984extern UBYTE *pParseObject(UBYTE *,int *,LONG *);
985extern UBYTE *PreIfEval(UBYTE *,int *);
986extern int EvalPreIf(UBYTE *);
987extern int PreLoad(PRELOAD *,UBYTE *,UBYTE *,int,char *);
988extern int PreSkip(UBYTE *,UBYTE *,int);
989extern UBYTE *EndOfToken(UBYTE *);
990extern void SetSpecialMode(int,int);
991extern void MakeGlobal(void);
992extern int ExecModule(int);
993extern int ExecStore(void);
994extern void FullCleanUp(void);
995extern int DoExecStatement(void);
996extern int DoPipeStatement(void);
997extern int DoPolyfun(UBYTE *);
998extern int DoPolyratfun(UBYTE *);
999extern int CompileStatement(UBYTE *);
1000extern UBYTE *ToToken(UBYTE *);
1001extern int GetDollar(UBYTE *);
1002extern void MesWork(void) NORETURN;
1003extern int MesPrint(const char *,...);
1004extern int MesCall(char *);
1005extern UBYTE *NumCopy(WORD,UBYTE *);
1006extern char *LongCopy(LONG,char *);
1007extern char *LongLongCopy(off_t *,char *);
1008extern void ReserveTempFiles(int);
1009extern void PrintTerm(WORD *,char *);
1010extern void PrintTermC(WORD *,char *);
1011extern void PrintSubTerm(WORD *,char *);
1012extern void PrintWords(WORD *,LONG);
1013extern void PrintSeq(WORD *,char *);
1014extern int ExpandTripleDots(int);
1015extern LONG ComPress(WORD **,LONG *);
1016extern void StageSort(FILEHANDLE *);
1017
1018#define M_alloc(x) malloc((size_t)(x))
1019
1020extern void M_free(void *,const char *);
1021extern void ClearWildcardNames(void);
1022extern int AddWildcardName(UBYTE *);
1023extern int GetWildcardName(UBYTE *);
1024extern void Globalize(int);
1025extern void ResetVariables(int);
1026extern void AddToPreTypes(int);
1027extern void MessPreNesting(int);
1028extern LONG GetStreamPosition(STREAM *);
1029extern WORD *DoubleCbuffer(int,WORD *,int);
1030extern WORD *AddLHS(int);
1031extern WORD *AddRHS(int,int);
1032extern int AddNtoL(int,WORD *);
1033extern int AddNtoC(int,int,WORD *,int);
1034extern void DoubleIfBuffers(void);
1035extern STREAM *CreateStream(UBYTE *);
1036
1037extern int setonoff(UBYTE *,int *,int,int);
1038extern int DoPrint(UBYTE *,int);
1039extern int SetExpr(UBYTE *,int,int);
1040extern void AddToCom(int,WORD *);
1041extern int Add2ComStrings(int,WORD *,UBYTE *,UBYTE *);
1042extern int DoSymmetrize(UBYTE *,int);
1043extern int DoArgument(UBYTE *,int);
1044extern int ArgFactorize(PHEAD WORD *,WORD *);
1045extern WORD *TakeArgContent(PHEAD WORD *, WORD *);
1046extern WORD *MakeInteger(PHEAD WORD *,WORD *,WORD *);
1047extern WORD *MakeMod(PHEAD WORD *,WORD *,WORD *);
1048extern WORD FindArg(PHEAD WORD *);
1049extern int InsertArg(PHEAD WORD *,WORD *,int);
1050extern int CleanupArgCache(PHEAD WORD);
1051extern int ArgSymbolMerge(WORD *, WORD *);
1052extern int ArgDotproductMerge(WORD *, WORD *);
1053extern void SortWeights(LONG *,LONG *,WORD);
1054extern int DoBrackets(UBYTE *,int);
1055extern int DoPutInside(UBYTE *,int);
1056extern WORD *CountComp(UBYTE *,WORD *);
1057extern int CoAntiBracket(UBYTE *);
1058extern int CoAntiSymmetrize(UBYTE *);
1059extern int DoArgPlode(UBYTE *,int);
1060extern int CoArgExplode(UBYTE *);
1061extern int CoArgImplode(UBYTE *);
1062extern int CoArgument(UBYTE *);
1063extern int CoInside(UBYTE *);
1064extern int ExecInside(UBYTE *);
1065extern int CoInExpression(UBYTE *);
1066extern int CoInParallel(UBYTE *);
1067extern int CoNotInParallel(UBYTE *);
1068extern int DoInParallel(UBYTE *,int);
1069extern int CoEndInExpression(UBYTE *);
1070extern int CoBracket(UBYTE *);
1071extern int CoPutInside(UBYTE *);
1072extern int CoAntiPutInside(UBYTE *);
1073extern int CoMultiBracket(UBYTE *);
1074extern int CoCFunction(UBYTE *);
1075extern int CoCTensor(UBYTE *);
1076extern int CoCollect(UBYTE *);
1077extern int CoCompress(UBYTE *);
1078extern int CoContract(UBYTE *);
1079extern int CoCycleSymmetrize(UBYTE *);
1080extern int CoDelete(UBYTE *);
1081extern int CoTableBase(UBYTE *);
1082extern int CoApply(UBYTE *);
1083extern int CoDenominators(UBYTE *);
1084extern int CoDimension(UBYTE *);
1085extern int CoDiscard(UBYTE *);
1086extern int CoDisorder(UBYTE *);
1087extern int CoDrop(UBYTE *);
1088extern int CoDropCoefficient(UBYTE *);
1089extern int CoDropSymbols(UBYTE *);
1090extern int CoElse(UBYTE *);
1091extern int CoElseIf(UBYTE *);
1092extern int CoEndArgument(UBYTE *);
1093extern int CoEndInside(UBYTE *);
1094extern int CoEndIf(UBYTE *);
1095extern int CoEndRepeat(UBYTE *);
1096extern int CoEndTerm(UBYTE *);
1097extern int CoEndWhile(UBYTE *);
1098extern int CoExit(UBYTE *);
1099extern int CoFactArg(UBYTE *);
1100extern int CoFactDollar(UBYTE *);
1101extern int CoFactorize(UBYTE *);
1102extern int CoNFactorize(UBYTE *);
1103extern int CoUnFactorize(UBYTE *);
1104extern int CoNUnFactorize(UBYTE *);
1105extern int DoFactorize(UBYTE *,int);
1106extern int CoFill(UBYTE *);
1107extern int CoFillExpression(UBYTE *);
1108extern int CoFixIndex(UBYTE *);
1109extern int CoFormat(UBYTE *);
1110extern int CoGlobal(UBYTE *);
1111extern int CoGlobalFactorized(UBYTE *);
1112extern int CoGoTo(UBYTE *);
1113extern int CoId(UBYTE *);
1114extern int CoIdNew(UBYTE *);
1115extern int CoIdOld(UBYTE *);
1116extern int CoIf(UBYTE *);
1117extern int CoIfMatch(UBYTE *);
1118extern int CoIfNoMatch(UBYTE *);
1119extern int CoIndex(UBYTE *);
1120extern int CoInsideFirst(UBYTE *);
1121extern int CoKeep(UBYTE *);
1122extern int CoLabel(UBYTE *);
1123extern int CoLoad(UBYTE *);
1124extern int CoLocal(UBYTE *);
1125extern int CoLocalFactorized(UBYTE *);
1126extern int CoMany(UBYTE *);
1127extern int CoMerge(UBYTE *);
1128extern int CoStuffle(UBYTE *);
1129extern int CoMetric(UBYTE *);
1130extern int CoModOption(UBYTE *);
1131extern int CoModuleOption(UBYTE *);
1132extern int CoModulus(UBYTE *);
1133extern int CoMulti(UBYTE *);
1134extern int CoMultiply(UBYTE *);
1135extern int CoNFunction(UBYTE *);
1136extern int CoNPrint(UBYTE *);
1137extern int CoNTensor(UBYTE *);
1138extern int CoNWrite(UBYTE *);
1139extern int CoNoDrop(UBYTE *);
1140extern int CoNoSkip(UBYTE *);
1141extern int CoNormalize(UBYTE *);
1142extern int CoMakeInteger(UBYTE *);
1143extern int CoFlags(UBYTE *,int);
1144extern int CoOff(UBYTE *);
1145extern int CoOn(UBYTE *);
1146extern int CoOnce(UBYTE *);
1147extern int CoOnly(UBYTE *);
1148extern int CoOptimizeOption(UBYTE *);
1149extern int CoPolyFun(UBYTE *);
1150extern int CoPolyRatFun(UBYTE *);
1151extern int CoPrint(UBYTE *);
1152extern int CoPrintB(UBYTE *);
1153extern int CoProperCount(UBYTE *);
1154extern int CoUnitTrace(UBYTE *);
1155extern int CoRCycleSymmetrize(UBYTE *);
1156extern int CoRatio(UBYTE *);
1157extern int CoRedefine(UBYTE *);
1158extern int CoRenumber(UBYTE *);
1159extern int CoRepeat(UBYTE *);
1160extern int CoSave(UBYTE *);
1161extern int CoSelect(UBYTE *);
1162extern int CoSet(UBYTE *);
1163extern int CoSetExitFlag(UBYTE *);
1164extern int CoSkip(UBYTE *);
1165extern int CoProcessBucket(UBYTE *);
1166extern int CoPushHide(UBYTE *);
1167extern int CoPopHide(UBYTE *);
1168extern int CoHide(UBYTE *);
1169extern int CoIntoHide(UBYTE *);
1170extern int CoNoIntoHide(UBYTE *);
1171extern int CoNoHide(UBYTE *);
1172extern int CoUnHide(UBYTE *);
1173extern int CoNoUnHide(UBYTE *);
1174extern int CoSort(UBYTE *);
1175extern int CoSplitArg(UBYTE *);
1176extern int CoSplitFirstArg(UBYTE *);
1177extern int CoSplitLastArg(UBYTE *);
1178extern int CoSum(UBYTE *);
1179extern int CoSymbol(UBYTE *);
1180extern int CoSymmetrize(UBYTE *);
1181extern int DoTable(UBYTE *,int);
1182extern int CoTable(UBYTE *);
1183extern int CoTerm(UBYTE *);
1184extern int CoNTable(UBYTE *);
1185extern int CoCTable(UBYTE *);
1186extern void EmptyTable(TABLES);
1187extern int CoToTensor(UBYTE *);
1188extern int CoToVector(UBYTE *);
1189extern int CoTrace4(UBYTE *);
1190extern int CoTraceN(UBYTE *);
1191extern int CoChisholm(UBYTE *);
1192extern int CoTransform(UBYTE *);
1193extern int CoClearTable(UBYTE *);
1194extern int DoChain(UBYTE *,int);
1195extern int CoChainin(UBYTE *);
1196extern int CoChainout(UBYTE *);
1197extern int CoTryReplace(UBYTE *);
1198extern int CoVector(UBYTE *);
1199extern int CoWhile(UBYTE *);
1200extern int CoWrite(UBYTE *);
1201extern int CoAuto(UBYTE *);
1202extern int CoSwitch(UBYTE *);
1203extern int CoCase(UBYTE *);
1204extern int CoBreak(UBYTE *);
1205extern int CoDefault(UBYTE *);
1206extern int CoEndSwitch(UBYTE *);
1207extern int CoTBaddto(UBYTE *);
1208extern int CoTBaudit(UBYTE *);
1209extern int CoTBcleanup(UBYTE *);
1210extern int CoTBcreate(UBYTE *);
1211extern int CoTBenter(UBYTE *);
1212extern int CoTBhelp(UBYTE *);
1213extern int CoTBload(UBYTE *);
1214extern int CoTBoff(UBYTE *);
1215extern int CoTBon(UBYTE *);
1216extern int CoTBopen(UBYTE *);
1217extern int CoTBreplace(UBYTE *);
1218extern int CoTBuse(UBYTE *);
1219extern int CoTestUse(UBYTE *);
1220extern int CoThreadBucket(UBYTE *);
1221extern int AddComString(int,WORD *,UBYTE *,int);
1222extern int CompileAlgebra(UBYTE *,int,WORD *);
1223extern int IsIdStatement(UBYTE *);
1224extern UBYTE *IsRHS(UBYTE *,UBYTE);
1225extern int ParenthesesTest(UBYTE *);
1226extern int tokenize(UBYTE *,WORD);
1227extern void WriteTokens(SBYTE *);
1228extern int simp1token(SBYTE *);
1229extern int simpwtoken(SBYTE *);
1230extern int simp2token(SBYTE *);
1231extern int simp3atoken(SBYTE *,int);
1232extern int simp3btoken(SBYTE *,int);
1233extern int simp4token(SBYTE *);
1234extern int simp5token(SBYTE *,int);
1235extern int simp6token(SBYTE *,int);
1236extern UBYTE *SkipAName(UBYTE *);
1237extern int TestTables(void);
1238extern int GetLabel(UBYTE *);
1239extern int CoIdExpression(UBYTE *,int);
1240extern int CoAssign(UBYTE *);
1241extern int DoExpr(UBYTE *,int,int);
1242extern int CompileSubExpressions(SBYTE *);
1243extern int CodeGenerator(SBYTE *);
1244extern int CompleteTerm(WORD *,UWORD *,UWORD *,WORD,WORD,int);
1245extern int CodeFactors(SBYTE *s);
1246extern WORD GenerateFactors(WORD,WORD);
1247extern int InsTree(int,int);
1248extern int FindTree(int,WORD *);
1249extern void RedoTree(CBUF *,int);
1250extern void ClearTree(int);
1251extern int CatchDollar(int);
1252extern int AssignDollar(PHEAD WORD *,WORD);
1253extern UBYTE *WriteDollarToBuffer(WORD,WORD);
1254extern UBYTE *WriteDollarFactorToBuffer(WORD,WORD,WORD);
1255extern void AddToDollarBuffer(UBYTE *);
1256extern int PutTermInDollar(WORD *,WORD);
1257extern void TermAssign(WORD *);
1258extern void WildDollars(PHEAD WORD *);
1259extern LONG numcommute(WORD *,LONG *);
1260extern int FullRenumber(PHEAD WORD *,WORD);
1261extern int Lus(WORD *,WORD,WORD,WORD,WORD,WORD);
1262extern int FindLus(int,int,int);
1263extern int CoReplaceLoop(UBYTE *);
1264extern int CoFindLoop(UBYTE *);
1265extern int DoFindLoop(UBYTE *,int);
1266extern int CoFunPowers(UBYTE *);
1267extern int SortTheList(int *,int);
1268extern int MatchIsPossible(WORD *,WORD *);
1269extern int StudyPattern(WORD *);
1270extern WORD DolToTensor(PHEAD WORD);
1271extern WORD DolToFunction(PHEAD WORD);
1272extern WORD DolToVector(PHEAD WORD);
1273extern WORD DolToNumber(PHEAD WORD);
1274extern WORD DolToSymbol(PHEAD WORD);
1275extern WORD DolToIndex(PHEAD WORD);
1276extern LONG DolToLong(PHEAD WORD);
1277extern int DollarFactorize(PHEAD WORD);
1278extern int CoPrintTable(UBYTE *);
1279extern int CoDeallocateTable(UBYTE *);
1280extern void CleanDollarFactors(DOLLARS);
1281extern WORD *TakeDollarContent(PHEAD WORD *,WORD **);
1282extern WORD *MakeDollarInteger(PHEAD WORD *,WORD **);
1283extern WORD *MakeDollarMod(PHEAD WORD *,WORD **);
1284extern int GetDolNum(PHEAD WORD *, WORD *);
1285extern void AddPotModdollar(WORD);
1286// Returns 1 if the ModOptdollar type implies a thread-local copy when running
1287// in TFORM (WITHPTHREADS), and 0 otherwise.
1288static inline int DollarLocalCopy(WORD type) {
1289 if ( type == MODLOCAL ) { return 1; }
1290 if ( type == MODMIN ) { return 1; }
1291 if ( type == MODMAX ) { return 1; }
1292 return 0;
1293}
1294
1295extern int Optimize(WORD, int);
1296extern int ClearOptimize(void);
1297extern int TakeLongRoot(UWORD *,WORD *,WORD);
1298extern int TakeRatRoot(UWORD *,WORD *,WORD);
1299extern int MakeRational(WORD ,WORD , WORD *, WORD *);
1300extern int MakeLongRational(PHEAD UWORD *,WORD ,UWORD *,WORD ,UWORD *,WORD *);
1301extern void ClearTableTree(TABLES);
1302extern int InsTableTree(TABLES,WORD *);
1303extern void RedoTableTree(TABLES,int);
1304extern int FindTableTree(TABLES,WORD *,int);
1305extern void finishcbuf(WORD);
1306extern void clearcbuf(WORD);
1307extern void CleanUpSort(int);
1308extern FILEHANDLE *AllocFileHandle(WORD,char *);
1309extern void DeAllocFileHandle(FILEHANDLE *);
1310extern void LowerSortLevel(void);
1311extern WORD *PolyRatFunSpecial(PHEAD WORD *, WORD *);
1312extern void SimpleSplitMergeRec(WORD *,WORD,WORD *);
1313extern void SimpleSplitMerge(WORD *,WORD);
1314extern WORD BinarySearch(WORD *,WORD,WORD);
1315extern int InsideDollar(PHEAD WORD *,WORD);
1316extern DOLLARS DolToTerms(PHEAD WORD);
1317extern WORD EvalDoLoopArg(PHEAD WORD *,WORD);
1318extern int SetExprCases(int,int,int);
1319extern int TestSelect(WORD *,WORD *);
1320extern void SubsInAll(PHEAD0);
1321extern void TransferBuffer(int,int,int);
1322extern int TakeIDfunction(PHEAD WORD *);
1323extern int MakeSetupAllocs(void);
1324extern NORMDATA *AllocNormData(void);
1325extern int TryFileSetups(void);
1326extern void ExchangeExpressions(int,int);
1327extern void ExchangeDollars(int,int);
1328extern int GetFirstBracket(WORD *,int);
1329extern int GetFirstTerm(WORD *,int,int);
1330extern int GetContent(WORD *,int);
1331extern int CleanupTerm(WORD *);
1332extern WORD ContentMerge(PHEAD WORD *,WORD *);
1333extern UBYTE *PreIfDollarEval(UBYTE *,int *);
1334extern LONG TermsInDollar(WORD);
1335extern LONG SizeOfDollar(WORD);
1336extern LONG TermsInExpression(WORD);
1337extern LONG SizeOfExpression(WORD);
1338extern WORD *TranslateExpression(UBYTE *);
1339extern int IsSetMember(WORD *,WORD);
1340extern int IsMultipleOf(WORD *,WORD *);
1341extern int TwoExprCompare(WORD *,WORD *,int);
1342extern void UpdatePositions(void);
1343extern void M_check(void);
1344extern void M_print(void);
1345extern void M_check1(void);
1346extern void PrintTime(UBYTE *);
1347
1348extern POSITION *FindBracket(WORD,WORD *);
1349extern void PutBracketInIndex(PHEAD WORD *,POSITION *);
1350extern void ClearBracketIndex(WORD);
1351extern void OpenBracketIndex(WORD);
1352extern int DoNoParallel(UBYTE *);
1353extern int DoParallel(UBYTE *);
1354extern int DoModSum(UBYTE *);
1355extern int DoModMax(UBYTE *);
1356extern int DoModMin(UBYTE *);
1357extern int DoModLocal(UBYTE *);
1358extern UBYTE *DoModDollar(UBYTE *,int);
1359extern int DoProcessBucket(UBYTE *);
1360extern int DoinParallel(UBYTE *);
1361extern int DonotinParallel(UBYTE *);
1362
1363extern int FlipTable(FUNCTIONS,int);
1364extern int ChainIn(PHEAD WORD *,WORD);
1365extern int ChainOut(PHEAD WORD *,WORD);
1366extern int ArgumentImplode(PHEAD WORD *,WORD *);
1367extern int ArgumentExplode(PHEAD WORD *,WORD *);
1368extern int DenToFunction(WORD *,WORD);
1369
1370extern WORD HowMany(PHEAD WORD *,WORD *);
1371extern void RemoveDollars(void);
1372extern LONG CountTerms1(PHEAD0);
1373extern LONG TermsInBracket(PHEAD WORD *,WORD);
1374extern int Crash(void);
1375
1376extern char *str_dup(char *);
1377extern void convertblock(INDEXBLOCK *,INDEXBLOCK *,int);
1378extern void convertnamesblock(NAMESBLOCK *,NAMESBLOCK *,int);
1379extern void convertiniinfo(INIINFO *,INIINFO *,int);
1380extern int ReadIndex(DBASE *);
1381extern int WriteIndexBlock(DBASE *,MLONG);
1382extern int WriteNamesBlock(DBASE *,MLONG);
1383extern int WriteIndex(DBASE *);
1384extern int WriteIniInfo(DBASE *);
1385extern int ReadIniInfo(DBASE *);
1386extern int AddToIndex(DBASE *,MLONG);
1387extern DBASE *GetDbase(char *,MLONG);
1388extern DBASE *OpenDbase(char *);
1389extern char *ReadObject(DBASE *,MLONG,char *);
1390extern char *ReadijObject(DBASE *,MLONG,MLONG,char *);
1391extern int ExistsObject(DBASE *,MLONG,char *);
1392extern int DeleteObject(DBASE *,MLONG,char *);
1393extern int WriteObject(DBASE *,MLONG,char *,char *,MLONG);
1394extern MLONG AddObject(DBASE *,MLONG,char *,char *);
1395extern DBASE *NewDbase(char *,MLONG);
1396extern void FreeTableBase(DBASE *);
1397extern int ComposeTableNames(DBASE *);
1398extern int PutTableNames(DBASE *);
1399extern MLONG AddTableName(DBASE *,char *,TABLES);
1400extern MLONG GetTableName(DBASE *,char *);
1401extern MLONG FindTableNumber(DBASE *,char *);
1402extern int TryEnvironment(void);
1403
1404#ifdef WITHZLIB
1405extern int SetupOutputGZIP(FILEHANDLE *);
1406extern int PutOutputGZIP(FILEHANDLE *);
1407extern int FlushOutputGZIP(FILEHANDLE *);
1408extern int SetupAllInputGZIP(SORTING *);
1409extern LONG FillInputGZIP(FILEHANDLE *,POSITION *,UBYTE *,LONG,int);
1410extern void ClearSortGZIP(FILEHANDLE *f);
1411#endif
1412
1413#ifdef WITHPTHREADS
1414extern void BeginIdentities(void);
1415extern int WhoAmI(void);
1416extern int StartAllThreads(int);
1417extern void StartHandleLock(void);
1418extern void TerminateAllThreads(void);
1419extern int GetAvailableThread(void);
1420extern int ConditionalGetAvailableThread(void);
1421extern int BalanceRunThread(PHEAD int,WORD *,WORD);
1422extern void WakeupThread(int,int);
1423extern int MasterWait(void);
1424extern int InParallelProcessor(void);
1425extern int ThreadsProcessor(EXPRESSIONS,WORD,WORD);
1426extern int MasterMerge(void);
1427extern int PutToMaster(PHEAD WORD *);
1428extern void SetWorkerFiles(void);
1429extern int MakeThreadBuckets(int,int);
1430extern int SendOneBucket(int);
1431extern int LoadOneThread(int,int,THREADBUCKET *,int);
1432extern void *RunSortBot(void *);
1433extern void MasterWaitAllSortBots(void);
1434extern int SortBotMerge(PHEAD0);
1435extern int SortBotOut(PHEAD WORD *);
1436extern void DefineSortBotTree(void);
1437extern int SortBotMasterMerge(void);
1438extern int SortBotWait(int);
1439extern void StartIdentity(void);
1440extern void FinishIdentity(void *);
1441extern int SetIdentity(int *);
1442extern ALLPRIVATES *InitializeOneThread(int);
1443extern void FinalizeOneThread(int);
1444extern void ClearAllThreads(void);
1445extern void *RunThread(void *);
1446extern void IAmAvailable(int);
1447extern int ThreadWait(int);
1448extern int ThreadClaimedBlock(int);
1449extern int GetThread(int);
1450extern int UpdateOneThread(int);
1451extern void MasterWaitAll(void);
1452extern void MasterWaitAllBlocks(void);
1453extern int MasterWaitThread(int);
1454extern void WakeupMasterFromThread(int,int);
1455extern int LoadReadjusted(void);
1456extern int IniSortBlocks(int);
1457extern int UpdateSortBlocks(int);
1458extern int TreatIndexEntry(PHEAD LONG);
1459extern WORD GetTerm2(PHEAD WORD *);
1460extern void SetHideFiles(void);
1461
1462#endif
1463
1464extern int CopyExpression(FILEHANDLE *,FILEHANDLE *);
1465
1466extern int set_in(UBYTE, set_of_char);
1467extern one_byte set_set(UBYTE, set_of_char);
1468extern one_byte set_del(UBYTE, set_of_char);
1469extern one_byte set_sub (set_of_char, set_of_char, set_of_char);
1470extern int DoPreAddSeparator(UBYTE *);
1471extern int DoPreRmSeparator(UBYTE *);
1472
1473/*See the file extcmd.c*/
1474extern int openExternalChannel(UBYTE *,int,UBYTE *,UBYTE *);
1475extern int initPresetExternalChannels(UBYTE *, int);
1476extern int closeExternalChannel(int);
1477extern int selectExternalChannel(int);
1478extern int getCurrentExternalChannel(void);
1479extern void closeAllExternalChannels(void);
1480
1481typedef int (*WRITEBUFTOEXTCHANNEL)(char *,size_t);
1482typedef int (*GETCFROMEXTCHANNEL)(void);
1483typedef int (*SETTERMINATORFOREXTERNALCHANNEL)(char *);
1484typedef int (*SETKILLMODEFOREXTERNALCHANNEL)(int,int);
1485typedef LONG (*WRITEFILE)(int,UBYTE *,LONG);
1486typedef WORD (*GETTERM)(PHEAD WORD *);
1487
1488#define CompareTerms ((COMPARE)AR.CompareRoutine)
1489#define FiniShuffle AN.SHvar.finishuf
1490#define DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle)
1491
1492extern UBYTE *defineChannel(UBYTE*, HANDLERS*);
1493extern int writeToChannel(int,UBYTE *,HANDLERS*);
1494#ifdef WITHEXTERNALCHANNEL
1495extern LONG WriteToExternalChannel(int,UBYTE *,LONG);
1496#endif
1497extern int writeBufToExtChannelOk(char *,size_t);
1498extern int getcFromExtChannelOk(void);
1499extern int setKillModeForExternalChannelOk(int,int);
1500extern int setTerminatorForExternalChannelOk(char *);
1501extern int getcFromExtChannelFailure(void);
1502extern int setKillModeForExternalChannelFailure(int,int);
1503extern int setTerminatorForExternalChannelFailure(char *);
1504extern int writeBufToExtChannelFailure(char *,size_t);
1505
1506extern int ReleaseTB(void);
1507
1508extern int SymbolNormalize(WORD *);
1509extern int TestFunFlag(PHEAD WORD *);
1510extern WORD CompareSymbols(PHEAD WORD *,WORD *,WORD);
1511extern WORD CompareHSymbols(PHEAD WORD *,WORD *,WORD);
1512extern WORD NextPrime(PHEAD WORD);
1513extern WORD Moebius(PHEAD WORD);
1514extern UWORD wranf(PHEAD0);
1515extern UWORD iranf(PHEAD UWORD);
1516extern void iniwranf(PHEAD0);
1517extern UBYTE *PreRandom(UBYTE *);
1518
1519extern WORD *PolyNormPoly(PHEAD WORD);
1520extern WORD *EvaluateGcd(PHEAD WORD *);
1521extern int TreatPolyRatFun(PHEAD WORD *);
1522
1523extern int ReadSaveHeader(void);
1524extern LONG ReadSaveIndex(FILEINDEX *);
1525extern LONG ReadSaveExpression(UBYTE *,UBYTE *,LONG *,LONG *);
1526extern UBYTE *ReadSaveTerm32(UBYTE *,UBYTE *,UBYTE **,UBYTE *,UBYTE *,int);
1527extern LONG ReadSaveVariables(UBYTE *,UBYTE *,LONG *,LONG *,INDEXENTRY *,LONG *);
1528extern LONG WriteStoreHeader(WORD);
1529
1530extern void InitRecovery(void);
1531extern int CheckRecoveryFile(void);
1532extern void DeleteRecoveryFile(void);
1533extern char *RecoveryFilename(void);
1534extern int DoRecovery(int *);
1535extern void DoCheckpoint(int);
1536
1537extern void NumberMallocAddMemory(PHEAD0);
1538extern void CacheNumberMallocAddMemory(PHEAD0);
1539extern void TermMallocAddMemory(PHEAD0);
1540#ifndef MEMORYMACROS
1541extern WORD *TermMalloc2(PHEAD char *text);
1542extern void TermFree2(PHEAD WORD *term,char *text);
1543extern UWORD *NumberMalloc2(PHEAD char *text);
1544extern UWORD *CacheNumberMalloc2(PHEAD char *text);
1545extern void NumberFree2(PHEAD UWORD *NumberMem,char *text);
1546extern void CacheNumberFree2(PHEAD UWORD *NumberMem,char *text);
1547#endif
1548
1549extern void ExprStatus(EXPRESSIONS);
1550extern void iniTools(void);
1551extern int TestTerm(WORD *);
1552
1553extern int RunTransform(PHEAD WORD *term, WORD *params);
1554extern int RunEncode(PHEAD WORD *fun, WORD *args, WORD *info);
1555extern int RunDecode(PHEAD WORD *fun, WORD *args, WORD *info);
1556extern int RunReplace(PHEAD WORD *fun, WORD *args, WORD *info);
1557extern int RunImplode(WORD *fun, WORD *args);
1558extern int RunExplode(PHEAD WORD *fun, WORD *args);
1559extern int TestArgNum(int n, int totarg, WORD *args);
1560extern WORD PutArgInScratch(WORD *arg,UWORD *scrat);
1561extern UBYTE *ReadRange(UBYTE *s, WORD *out, int par);
1562extern int FindRange(PHEAD WORD *,WORD *,WORD *,WORD);
1563extern int RunPermute(PHEAD WORD *fun, WORD *args, WORD *info);
1564extern int RunReverse(PHEAD WORD *fun, WORD *args);
1565extern int RunCycle(PHEAD WORD *fun, WORD *args, WORD *info);
1566extern int RunAddArg(PHEAD WORD *fun, WORD *args);
1567extern int RunMulArg(PHEAD WORD *fun, WORD *args);
1568extern int RunIsLyndon(PHEAD WORD *fun, WORD *args, int par);
1569extern WORD RunToLyndon(PHEAD WORD *fun, WORD *args, int par);
1570extern int RunDropArg(PHEAD WORD *fun, WORD *args);
1571extern int RunSelectArg(PHEAD WORD *fun, WORD *args);
1572extern int RunDedup(PHEAD WORD *fun, WORD *args);
1573extern int RunZtoHArg(PHEAD WORD *fun, WORD *args);
1574extern int RunHtoZArg(PHEAD WORD *fun, WORD *args);
1575
1576extern int NormPolyTerm(PHEAD WORD *);
1577extern WORD ComparePoly(WORD *, WORD *, WORD);
1578extern int ConvertToPoly(PHEAD WORD *, WORD *,WORD *,WORD);
1579extern int LocalConvertToPoly(PHEAD WORD *, WORD *, WORD,WORD);
1580extern int ConvertFromPoly(PHEAD WORD *, WORD *, WORD, WORD, WORD, WORD);
1581extern int FindSubterm(WORD *);
1582extern int FindLocalSubterm(PHEAD WORD *, WORD);
1583extern void PrintSubtermList(int,int);
1584extern void PrintExtraSymbol(int,WORD *,int);
1585extern int FindSubexpression(WORD *);
1586
1587extern void UpdateMaxSize(void);
1588
1589extern int CoToPolynomial(UBYTE *);
1590extern int CoFromPolynomial(UBYTE *);
1591extern int CoArgToExtraSymbol(UBYTE *);
1592extern int CoExtraSymbols(UBYTE *);
1593extern UBYTE *GetDoParam(UBYTE *, WORD **, int);
1594extern WORD *GetIfDollarFactor(UBYTE **, WORD *);
1595extern int CoDo(UBYTE *);
1596extern int CoEndDo(UBYTE *);
1597extern int ExtraSymFun(PHEAD WORD *,WORD);
1598extern int PruneExtraSymbols(WORD);
1599extern int IniFbuffer(WORD);
1600extern void IniFbufs(void);
1601extern int GCDfunction(PHEAD WORD *,WORD);
1602extern WORD *GCDfunction3(PHEAD WORD *,WORD *);
1603extern int ReadPolyRatFun(PHEAD WORD *);
1604extern int FromPolyRatFun(PHEAD WORD *, WORD **, WORD **);
1605extern WORD *PolyDiv(PHEAD WORD *,WORD *,char *);
1606extern void GCDclean(PHEAD WORD *, WORD *);
1607extern WORD *TakeSymbolContent(PHEAD WORD *,WORD *);
1608extern int GCDterms(PHEAD WORD *,WORD *,WORD *);
1609extern WORD *PutExtraSymbols(PHEAD WORD *,WORD,int *);
1610extern WORD *TakeExtraSymbols(PHEAD WORD *,WORD);
1611extern WORD *MultiplyWithTerm(PHEAD WORD *, WORD *,WORD);
1612extern WORD *TakeContent(PHEAD WORD *, WORD *);
1613extern int MergeSymbolLists(PHEAD WORD *, WORD *, int);
1614extern int MergeDotproductLists(PHEAD WORD *, WORD *, int);
1615extern WORD *CreateExpression(PHEAD WORD);
1616extern int DIVfunction(PHEAD WORD *,WORD,int);
1617extern WORD *MULfunc(PHEAD WORD *, WORD *);
1618extern WORD *ConvertArgument(PHEAD WORD *,int *);
1619extern int ExpandRat(PHEAD WORD *);
1620extern int InvPoly(PHEAD WORD *,WORD,WORD);
1621extern WORD TestDoLoop(PHEAD WORD *,WORD);
1622extern WORD TestEndDoLoop(PHEAD WORD *,WORD);
1623
1624extern WORD *poly_gcd(PHEAD WORD *, WORD *, WORD);
1625extern WORD *poly_div(PHEAD WORD *, WORD *, WORD);
1626extern WORD *poly_rem(PHEAD WORD *, WORD *, WORD);
1627extern WORD *poly_inverse(PHEAD WORD *, WORD *);
1628extern WORD *poly_mul(PHEAD WORD *, WORD *);
1629extern WORD *poly_ratfun_add(PHEAD WORD *, WORD *);
1630extern int poly_ratfun_normalize(PHEAD WORD *);
1631extern int poly_factorize_argument(PHEAD WORD *, WORD *);
1632extern WORD *poly_factorize_dollar(PHEAD WORD *);
1635extern void poly_free_poly_vars(PHEAD const char *);
1636
1637#ifdef WITHFLINT
1638extern void flint_final_cleanup_thread(void);
1639extern void flint_final_cleanup_master(void);
1640extern WORD* flint_div(PHEAD WORD *, WORD *, const WORD);
1641extern int flint_factorize_argument(PHEAD WORD *, WORD *);
1642extern WORD* flint_factorize_dollar(PHEAD WORD *);
1643extern WORD* flint_gcd(PHEAD WORD *, WORD *, const WORD);
1644extern WORD* flint_inverse(PHEAD WORD *, WORD *);
1645extern WORD* flint_mul(PHEAD WORD *, WORD *);
1646extern WORD* flint_ratfun_add(PHEAD WORD *, WORD *);
1647extern int flint_ratfun_normalize(PHEAD WORD *);
1648extern WORD* flint_rem(PHEAD WORD *, WORD *, const WORD);
1649extern void flint_check_version(void);
1650#endif
1651
1652extern void optimize_print_code (int);
1653
1654#ifdef WITHPTHREADS
1655extern void find_Horner_MCTS_expand_tree(void);
1656extern void find_Horner_MCTS_expand_tree_threaded(void);
1657extern void optimize_expression_given_Horner(void);
1658extern void optimize_expression_given_Horner_threaded(void);
1659#endif
1660
1661extern int DoPreAdd(UBYTE *s);
1662extern int DoPreUseDictionary(UBYTE *s);
1663extern int DoPreCloseDictionary(UBYTE *s);
1664extern int DoPreOpenDictionary(UBYTE *s);
1665extern void RemoveDictionary(DICTIONARY *dict);
1666extern void UnSetDictionary(void);
1667extern int SetDictionaryOptions(UBYTE *options);
1668extern int AddToDictionary(DICTIONARY *dict,UBYTE *left,UBYTE *right);
1669extern int AddDictionary(UBYTE *name);
1670extern int FindDictionary(UBYTE *name);
1671extern UBYTE *IsExponentSign(void);
1672extern UBYTE *IsMultiplySign(void);
1673extern void TransformRational(UWORD *a, WORD na);
1674extern void WriteDictionary(DICTIONARY *);
1675extern void ShrinkDictionary(DICTIONARY *);
1676extern void MultiplyToLine(void);
1677extern UBYTE *FindSymbol(WORD num);
1678extern UBYTE *FindVector(WORD num);
1679extern UBYTE *FindIndex(WORD num);
1680extern UBYTE *FindFunction(WORD num);
1681extern UBYTE *FindFunWithArgs(WORD *t);
1682extern UBYTE *FindExtraSymbol(WORD num);
1683extern LONG DictToBytes(DICTIONARY *dict,UBYTE *buf);
1684extern DICTIONARY *DictFromBytes(UBYTE *buf);
1685extern int CoCreateSpectator(UBYTE *inp);
1686extern int CoToSpectator(UBYTE *inp);
1687extern int CoRemoveSpectator(UBYTE *inp);
1688extern int CoEmptySpectator(UBYTE *inp);
1689extern int CoCopySpectator(UBYTE *inp);
1690extern int PutInSpectator(WORD *,WORD);
1691extern void ClearSpectators(WORD);
1692extern WORD GetFromSpectator(WORD *,WORD);
1693extern void FlushSpectators(void);
1694
1695extern WORD *PreGCD(PHEAD WORD *, WORD *,int);
1696extern int InvPoly(PHEAD WORD *,WORD,WORD);
1697
1698extern int ReadFromScratch(FILEHANDLE *,POSITION *,UBYTE *,POSITION *);
1699extern int AddToScratch(FILEHANDLE *,POSITION *,UBYTE *,POSITION *,int);
1700
1701extern int DoPreAppendPath(UBYTE *);
1702extern int DoPrePrependPath(UBYTE *);
1703
1704extern int DoSwitch(PHEAD WORD *, WORD *);
1705extern int DoEndSwitch(PHEAD WORD *, WORD *);
1706extern SWITCHTABLE *FindCase(WORD, WORD);
1707extern void SwitchSplitMergeRec(SWITCHTABLE *, WORD, SWITCHTABLE *);
1708extern void SwitchSplitMerge(SWITCHTABLE *, WORD);
1709extern int DoubleSwitchBuffers(void);
1710
1711extern int DistrN(int, int *, int, int *);
1712
1713extern int DoNamespace(UBYTE *);
1714extern int DoEndNamespace(UBYTE *);
1715extern int DoUse(UBYTE *);
1716extern UBYTE *SkipName(UBYTE *);
1717extern UBYTE *ConstructName(UBYTE *,UBYTE);
1718extern int DoSetUserFlag(UBYTE *);
1719extern int DoClearUserFlag(UBYTE *);
1720
1721VERTEX *CreateVertex(MODEL *);
1722UBYTE *ReadParticle(UBYTE *, VERTEX *,MODEL *, int);
1723int CoModel(UBYTE *);
1724int CoParticle(UBYTE *);
1725int CoVertex(UBYTE *);
1726int CoEndModel(UBYTE *);
1727int LoadModel(MODEL *);
1728
1729int CoSetUserFlag(UBYTE *);
1730int CoClearUserFlag(UBYTE *);
1731int CoCreateAllLoops(UBYTE *);
1732int CoCreateAllPaths(UBYTE *);
1733int CoCreateAll(UBYTE *);
1734
1735int AllLoops(PHEAD WORD *,WORD);
1736LONG StartLoops(PHEAD WORD *,WORD,LONG,WORD,WORD *,WORD,WORD *,WORD);
1737LONG GenLoops(PHEAD WORD *,WORD,LONG,WORD,WORD *,WORD,WORD *,WORD);
1738void LoopOutput(PHEAD WORD *,WORD,WORD *,WORD);
1739int AllPaths(PHEAD WORD *,WORD);
1740LONG GenPaths(PHEAD WORD *,WORD,LONG,WORD,WORD *,WORD,WORD *,WORD);
1741void PathOutput(PHEAD WORD *,WORD,WORD *,WORD);
1742
1743#ifdef WITHFLOAT
1744int DoStartFloat(UBYTE *);
1745int DoEndFloat(UBYTE *);
1746int SetFloatPrecision(WORD);
1747void SetupMZVTables(void);
1748void SetupMPFTables(void);
1749void ClearMZVTables(void);
1750int EvaluateEuler(PHEAD WORD *,WORD,WORD);
1751int EvaluateSqrt(PHEAD WORD *,WORD,WORD);
1752int CoEvaluate(UBYTE *);
1753int PrintFloat(WORD *fun,int numdigits);
1754int CoToRat(UBYTE *);
1755int CoToFloat(UBYTE *);
1756int CoChop(UBYTE *);
1757int ToRat(PHEAD WORD *,WORD);
1758int ToFloat(PHEAD WORD *,WORD);
1759int Chop(PHEAD WORD *, WORD);
1760WORD FloatFunToRat(PHEAD UWORD *,WORD *);
1761int AddWithFloat(PHEAD WORD **,WORD **);
1762int MergeWithFloat(PHEAD WORD **,WORD **);
1763void ClearfFloat(void);
1764int TestFloat(WORD *);
1765SBYTE *ReadFloat(SBYTE *);
1766UBYTE *CheckFloat(UBYTE *,int *);
1767void SetfFloatPrecision(LONG);
1768int EvaluateFun(PHEAD WORD *, WORD, WORD *);
1769int CoStrictRounding(UBYTE *);
1770int StrictRounding(PHEAD WORD *, WORD, WORD, WORD);
1771#endif
1772
1773/*
1774 #] Declarations :
1775*/
1776#endif
WORD * MakeMod(PHEAD WORD *, WORD *, WORD *)
Definition argument.c:3489
WORD FindArg(PHEAD WORD *)
Definition argument.c:2519
void AddArgs(PHEAD WORD *, WORD *, WORD *)
Definition sort.c:2082
WORD * poly_ratfun_add(PHEAD WORD *, WORD *)
Definition polywrap.cc:633
int poly_unfactorize_expression(EXPRESSIONS)
Definition polywrap.cc:1535
int LocalConvertToPoly(PHEAD WORD *, WORD *, WORD, WORD)
Definition notation.c:510
void finishcbuf(WORD)
Definition comtool.c:89
void clearcbuf(WORD)
Definition comtool.c:116
WORD * poly_factorize_dollar(PHEAD WORD *)
Definition polywrap.cc:1146
int GetFirstTerm(WORD *, int, int)
Definition execute.c:1966
void InitRecovery(void)
Definition checkpoint.c:399
void optimize_print_code(int)
Definition optimize.cc:4524
int SortWild(WORD *, WORD)
Definition sort.c:4510
int PrepPoly(PHEAD WORD *, WORD)
Definition proces.c:4980
void PrintDeprecation(const char *, const char *)
Definition startup.c:2143
int PolyFunMul(PHEAD WORD *)
Definition proces.c:5368
int MergePatches(WORD)
Definition sort.c:3502
int Deferred(PHEAD WORD *, WORD)
Definition proces.c:4852
void DeleteRecoveryFile(void)
Definition checkpoint.c:333
int DoOnePow(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD, WORD *)
Definition proces.c:4631
void StageSort(FILEHANDLE *)
Definition sort.c:4411
WORD CompCoef(WORD *, WORD *)
Definition reken.c:3048
LONG ComPress(WORD **, LONG *)
Definition sort.c:2941
LONG ReadSaveIndex(FILEINDEX *)
Definition store.c:4175
WORD * MakeDollarInteger(PHEAD WORD *, WORD **)
Definition dollar.c:3608
int DoContinueDo(UBYTE *)
Definition pre.c:2809
void RaisPowCached(PHEAD WORD, WORD, UWORD **, WORD *)
Definition reken.c:1297
int inicbufs(void)
Definition comtool.c:47
UBYTE * SkipAName(UBYTE *)
Definition compiler.c:443
WORD * AddRHS(int, int)
Definition comtool.c:214
void GarbHand(void)
Definition sort.c:3387
int DoPrePrependPath(UBYTE *)
Definition pre.c:7257
void AddPotModdollar(WORD)
Definition dollar.c:3940
void CleanUpSort(int)
Definition sort.c:4603
WORD * TakeArgContent(PHEAD WORD *, WORD *)
Definition argument.c:2772
WORD PutOut(PHEAD WORD *, POSITION *, FILEHANDLE *, WORD)
Definition sort.c:1203
int poly_ratfun_normalize(PHEAD WORD *)
Definition polywrap.cc:769
int DoRecovery(int *)
int AddNtoC(int, int, WORD *, int)
Definition comtool.c:317
LONG EndSort(PHEAD WORD *, int)
Definition sort.c:486
WORD * MakeDollarMod(PHEAD WORD *, WORD **)
Definition dollar.c:3782
void DoCheckpoint(int)
WORD * TakeSymbolContent(PHEAD WORD *, WORD *)
Definition ratio.c:2485
int Generator(PHEAD WORD *, WORD)
Definition proces.c:3255
int SetFileIndex(void)
Definition store.c:2320
WORD * DoubleCbuffer(int, WORD *, int)
Definition comtool.c:143
LONG TimeWallClock(WORD)
Definition tools.c:3415
int TestTerm(WORD *)
Definition tools.c:3800
UBYTE * SkipField(UBYTE *, int)
Definition tools.c:1978
WORD * TakeContent(PHEAD WORD *, WORD *)
Definition ratio.c:1376
void LowerSortLevel(void)
Definition sort.c:4703
int IniFbuffer(WORD)
Definition comtool.c:614
UBYTE * ToToken(UBYTE *)
Definition tools.c:1957
int TermRenumber(WORD *, RENUMBER, WORD)
Definition store.c:2427
int Processor(void)
Definition proces.c:64
void StartVariables(void)
Definition startup.c:952
LONG PasteFile(PHEAD WORD, WORD *, POSITION *, WORD **, RENUMBER, WORD *, WORD)
Definition proces.c:2869
int StoreTerm(PHEAD WORD *)
Definition sort.c:4285
WORD CompareHSymbols(PHEAD WORD *, WORD *, WORD)
Definition sort.c:2888
int DoPreAppendPath(UBYTE *)
Definition pre.c:7240
UBYTE * EndOfToken(UBYTE *)
Definition tools.c:1934
int FiniTerm(PHEAD WORD *, WORD *, WORD *, WORD, WORD)
Definition proces.c:3056
int InsertArg(PHEAD WORD *, WORD *, int)
Definition argument.c:2543
WORD NextPrime(PHEAD WORD)
Definition reken.c:3665
int poly_factorize_expression(EXPRESSIONS)
Definition polywrap.cc:1178
void WriteStats(POSITION *, WORD, WORD)
Definition sort.c:136
int ClearOptimize(void)
Definition optimize.cc:4974
int CopyFile(char *, char *)
Definition tools.c:1104
int InFunction(PHEAD WORD *, WORD *)
Definition proces.c:2166
int CheckRecoveryFile(void)
Definition checkpoint.c:278
int CleanupArgCache(PHEAD WORD)
Definition argument.c:2578
char * RecoveryFilename(void)
Definition checkpoint.c:364
int NewSort(PHEAD0)
Definition sort.c:395
int Optimize(WORD, int)
Definition optimize.cc:4637
LONG ReadSaveExpression(UBYTE *, UBYTE *, LONG *, LONG *)
Definition store.c:5138
void PrintFeatureList(void)
Definition features.cc:131
LONG SplitMerge(PHEAD WORD **, LONG)
Definition sort.c:3107
UBYTE * ReadSaveTerm32(UBYTE *, UBYTE *, UBYTE **, UBYTE *, UBYTE *, int)
Definition store.c:4728
int ReadSaveHeader(void)
Definition store.c:4057
LONG WriteStoreHeader(WORD)
Definition store.c:3964
int AddPoly(PHEAD WORD **, WORD **)
Definition sort.c:1909
int MakeInverses(void)
Definition reken.c:1441
int AddCoef(PHEAD WORD **, WORD **)
Definition sort.c:1779
int NormalModulus(UWORD *, WORD *)
Definition reken.c:1404
int InsertTerm(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD)
Definition proces.c:2733
int poly_factorize_argument(PHEAD WORD *, WORD *)
Definition polywrap.cc:1112
int FlushOut(POSITION *, FILEHANDLE *, int)
Definition sort.c:1565
LONG ReadSaveVariables(UBYTE *, UBYTE *, LONG *, LONG *, INDEXENTRY *, LONG *)
Definition store.c:4361
int AddNtoL(int, WORD *)
Definition comtool.c:288
WORD * PasteTerm(PHEAD WORD, WORD *, WORD *, WORD, WORD)
Definition proces.c:2991
WORD Compare1(PHEAD WORD *, WORD *, WORD)
Definition sort.c:2375
LONG TimeCPU(WORD)
Definition tools.c:3489
int TestMatch(PHEAD WORD *, WORD *)
Definition pattern.c:97
int GetModInverses(WORD, WORD, WORD *, WORD *)
Definition reken.c:1477
WORD EvalDoLoopArg(PHEAD WORD *, WORD)
Definition dollar.c:2631
int PutPreVar(UBYTE *, UBYTE *, UBYTE *, int)
Definition pre.c:724
LONG PutIn(FILEHANDLE *, POSITION *, WORD *, WORD **, int)
Definition sort.c:1057
WORD CompareSymbols(PHEAD WORD *, WORD *, WORD)
Definition sort.c:2838
void SortWeights(LONG *, LONG *, WORD)
Definition argument.c:3534
int SymbolNormalize(WORD *)
Definition normal.c:5206
int TheDefine(UBYTE *, int)
Definition pre.c:2039
int Sflush(FILEHANDLE *)
Definition sort.c:1117
WORD * MakeInteger(PHEAD WORD *, WORD *, WORD *)
Definition argument.c:3318
WORD * poly_gcd(PHEAD WORD *, WORD *, WORD)
Definition polywrap.cc:124
WORD * AddLHS(int)
Definition comtool.c:188
void flint_check_version(void)
Definition flintwrap.cc:323
void optimize_expression_given_Horner()
Definition optimize.cc:4060
Definition minos.h:123
struct bit_field set_of_char[32]
Definition structs.h:930