FORM  4.1
declare.h
Go to the documentation of this file.
1 #ifndef __FDECLARE__
2 
3 #define __FDECLARE__
4 
10 /* #[ License : */
11 /*
12  * Copyright (C) 1984-2013 J.A.M. Vermaseren
13  * When using this file you are requested to refer to the publication
14  * J.A.M.Vermaseren "New features of FORM" math-ph/0010025
15  * This is considered a matter of courtesy as the development was paid
16  * for by FOM the Dutch physics granting agency and we would like to
17  * be able to track its scientific use to convince FOM of its value
18  * for the community.
19  *
20  * This file is part of FORM.
21  *
22  * FORM is free software: you can redistribute it and/or modify it under the
23  * terms of the GNU General Public License as published by the Free Software
24  * Foundation, either version 3 of the License, or (at your option) any later
25  * version.
26  *
27  * FORM is distributed in the hope that it will be useful, but WITHOUT ANY
28  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
29  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
30  * details.
31  *
32  * You should have received a copy of the GNU General Public License along
33  * with FORM. If not, see <http://www.gnu.org/licenses/>.
34  */
35 /* #] License : */
36 
37 /*
38  #[ Macro's :
39 */
40 
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))
50 
51 #define TOKENTOLINE(x,y) if ( AC.OutputSpaces == NOSPACEFORMAT ) { \
52  TokenToLine((UBYTE *)(y)); } else { TokenToLine((UBYTE *)(x)); }
53 
54 #define UngetFromStream(stream,c) ((stream)->nextchar[(stream)->isnextchar++]=c)
55 #ifdef WITHRETURN
56 #define AddLineFeed(s,n) { (s)[(n)++] = CARRIAGERETURN; (s)[(n)++] = LINEFEED; }
57 #else
58 #define AddLineFeed(s,n) { (s)[(n)++] = LINEFEED; }
59 #endif
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; }
67 
68 #define NCOPY(s,t,n) while ( --n >= 0 ) *s++ = *t++;
69 
70 /*#define NCOPY(s,t,n) { memcpy(s,t,n*sizeof(WORD)); s+=n; t+=n; n = -1; }*/
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; \
79  ParseNumber(x,s) \
80  if ( sgn < 0 ) (x) = -(x); while ( *s == ' ' || *s == '\t' ) s++;\
81  }
82 #define SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; }
83 #define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED)
84 
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++;} }
101 
102 /*
103 #define CYCLE1(a,i) {WORD iX,jX; iX=*a; for(jX=1;jX<i;jX++)a[jX-1]=a[jX]; a[i-1]=iX;}
104 */
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;}
106 
107 #define AddToCB(c,wx) if(c->Pointer>=c->Top) \
108  DoubleCbuffer(c-cbuf,c->Pointer); \
109  *(c->Pointer)++ = wx;
110 
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); }
116 
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++; } }
120 
121 #if ARGHEAD > 2
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; }
125 #else
126 #define FILLARG(w)
127 #define COPYARG(w,t)
128 #define ZEROARG(w)
129 #endif
130 
131 #if FUNHEAD > 2
132 #define FILLFUN(w) { *w++ = 0; FILLFUN3(w) }
133 #define COPYFUN(w,t) { *w++ = *t++; COPYFUN3(w,t) }
134 #else
135 #define FILLFUN(w)
136 #define COPYFUN(w,t)
137 #endif
138 
139 #if FUNHEAD > 3
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++; }
142 #else
143 #define COPYFUN3(w,t)
144 #define FILLFUN3(w)
145 #endif
146 
147 #if SUBEXPSIZE > 5
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++; }
150 #else
151 #define FILLSUB(w)
152 #define COPYSUB(w,ww)
153 #endif
154 
155 #if EXPRHEAD > 4
156 #define FILLEXPR(w) { int ie = EXPRHEAD-4; while ( --ie >= 0 ) *w++ = 0; }
157 #else
158 #define FILLEXPR(w)
159 #endif
160 
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++;} }
164 
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)
171 
172 #define PREV(x) prevorder?prevorder:x
173 
174 #define SETERROR(x) { Terminate(-1); return(-1); }
175 
176 /* use this macro to avoid the unused parameter warning */
177 #define DUMMYUSE(x) (void)(x);
178 
179 #ifdef _FILE_OFFSET_BITS
180 #if _FILE_OFFSET_BITS==64
181 /*:[19mar2004 mt]*/
182 
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)
190 
191 #else
192 
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)
200 #endif
201 #else
202 
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)
210 
211 #endif
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 *);
228 
229 #define TOLONG(x) ((LONG)(x))
230 
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); }
237 
238 /*
239  The temporary variable ppp is to avoid a compiler warning about strict aliassing
240 */
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));}
247 
248 /* inline in form3.h (or config.h). */
249 #define FORM_INLINE inline
250 
251 /*
252  Macro's for memory management. This can be done by routines, but that
253  would be slower. Inline routines could do this, but we don't want to
254  leave this to the friendliness of the compiler(s).
255  The routines can be found in the file tools.c
256 */
257 #define MEMORYMACROS
258 
259 #ifdef MEMORYMACROS
260 
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)
265 
266 #else
267 
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))
272 
273 #endif
274 
275 /*
276  * Macros for checking nesting levels in the compiler, used as follows:
277  *
278  * AC.IfSumCheck[AC.IfLevel] = NestingChecksum();
279  * AC.IfLevel++;
280  *
281  * AC.IfLevel--;
282  * if ( AC.IfSumCheck[AC.IfLevel] != NestingChecksum() ) {
283  * MesNesting();
284  * }
285  *
286  * Note that NestingChecksum() also contains AC.IfLevel and so in this case
287  * using increment/decrement operators on it in the left-hand side may be
288  * confusing.
289  */
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")
292 
293 /*
294  #] Macro's :
295  #[ Thread objects :
296 */
297 
304 #ifdef WITHPTHREADS
305 
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 ) {}
315 #else
316 #define LOCK(x) pthread_mutex_lock(&(x))
317 #define RWLOCKR(x) pthread_rwlock_rdlock(&(x))
318 #define RWLOCKW(x) pthread_rwlock_wrlock(&(x))
319 #endif
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)
324 
325 #define GETBIDENTITY
326 #define GETIDENTITY int identity = WhoAmI(); ALLPRIVATES *B = AB[identity];
327 #else
328 
329 #define EXTERNLOCK(x)
330 #define INILOCK(x)
331 #define LOCK(x)
332 #define UNLOCK(x)
333 #define EXTERNRWLOCK(x)
334 #define INIRWLOCK(x)
335 #define RWLOCKR(x)
336 #define RWLOCKW(x)
337 #define UNRWLOCK(x)
338 #ifdef WITHMPI
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)
341 #else
342 #define MLOCK(x)
343 #define MUNLOCK(x)
344 #endif
345 #define GETIDENTITY
346 #define GETBIDENTITY
347 
348 #endif
349 
350 /*
351  #] Thread objects :
352  #[ Declarations :
353 */
354 
359 extern VOID StartVariables();
360 extern VOID setSignalHandlers(VOID);
361 extern UBYTE *CodeToLine(WORD,UBYTE *);
362 extern UBYTE *AddArrayIndex(WORD ,UBYTE *);
363 extern INDEXENTRY *FindInIndex(WORD,FILEDATA *,WORD,WORD);
364 extern INDEXENTRY *NextFileIndex(POSITION *);
365 extern WORD *PasteTerm(PHEAD WORD,WORD *,WORD *,WORD,WORD);
366 extern UBYTE *StrCopy(UBYTE *,UBYTE *);
367 extern UBYTE *WrtPower(UBYTE *,WORD);
368 extern WORD AccumGCD(PHEAD UWORD *,WORD *,UWORD *,WORD);
369 extern VOID AddArgs(PHEAD WORD *,WORD *,WORD *);
370 extern WORD AddCoef(PHEAD WORD **,WORD **);
371 extern WORD AddLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
372 extern WORD AddPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
373 extern WORD AddPoly(PHEAD WORD **,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);
390 extern WORD Compare1(PHEAD 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 *);
396 extern WORD Deferred(PHEAD WORD *,WORD);
397 extern WORD DeleteStore(WORD);
398 extern WORD DetCurDum(PHEAD WORD *);
399 extern VOID DetVars(WORD *,WORD);
400 extern WORD Distribute(DISTRIBUTE *,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 *);
430 extern LONG EndSort(PHEAD WORD *,int);
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);
449 extern WORD FiniTerm(PHEAD WORD *,WORD *,WORD *,WORD,WORD);
450 extern WORD FlushOut(POSITION *,FILEHANDLE *,int);
451 extern VOID FunLevel(PHEAD WORD *);
452 extern VOID AdjustRenumScratch(PHEAD0);
453 extern VOID GarbHand(VOID);
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);
458 extern WORD Generator(PHEAD WORD *,WORD);
459 extern WORD GetBinom(UWORD *,WORD *,WORD,WORD);
460 extern WORD GetFromStore(WORD *,POSITION *,RENUMBER,WORD *,WORD);
461 extern WORD GetLong(UBYTE *,UWORD *,WORD *);
462 extern WORD GetMoreTerms(WORD *);
463 extern WORD GetMoreFromMem(WORD *,WORD **);
464 extern WORD GetOneTerm(PHEAD WORD *,FILEHANDLE *,POSITION *,int);
465 extern RENUMBER GetTable(WORD,POSITION *,WORD);
466 extern WORD GetTerm(PHEAD WORD *);
467 extern WORD Glue(PHEAD WORD *,WORD *,WORD *,WORD);
468 extern WORD InFunction(PHEAD WORD *,WORD *);
469 extern VOID IniLine(WORD);
470 extern WORD IniVars(VOID);
471 extern VOID Initialize(VOID);
472 extern WORD InsertTerm(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD);
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 *);
485 extern WORD MergePatches(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 *);
494 extern WORD NewSort(PHEAD0);
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 );
502 extern LONG PasteFile(PHEAD WORD,WORD *,POSITION *,WORD **,RENUMBER,WORD *,WORD);
503 extern WORD Permute(PERM *,WORD);
504 extern WORD PolyFunMul(PHEAD WORD *);
505 extern WORD PopVariables(VOID);
506 extern WORD PrepPoly(PHEAD WORD *);
507 extern WORD Processor(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 *);
514 extern LONG PutIn(FILEHANDLE *,POSITION *,WORD *,WORD **,int);
515 extern WORD PutInStore(INDEXENTRY *,WORD);
516 extern WORD PutOut(PHEAD WORD *,POSITION *,FILEHANDLE *,WORD);
517 extern UWORD Quotient(UWORD *,WORD *,WORD);
518 extern WORD RaisPow(PHEAD UWORD *,WORD *,UWORD);
519 extern VOID RaisPowCached (PHEAD WORD, WORD, UWORD **, WORD *);
520 extern WORD RaisPowMod (WORD, WORD, WORD);
521 extern int NormalModulus(UWORD *,WORD *);
522 extern int MakeInverses(VOID);
523 extern int GetModInverses(WORD,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);
536 extern VOID SeekScratch(FILEHANDLE *,POSITION *);
537 extern VOID SetEndScratch(FILEHANDLE *,POSITION *);
538 extern VOID SetEndHScratch(FILEHANDLE *,POSITION *);
539 extern WORD SetFileIndex(VOID);
540 extern WORD Sflush(FILEHANDLE *);
541 extern WORD Simplify(PHEAD UWORD *,WORD *,UWORD *,WORD *);
542 extern WORD SortWild(WORD *,WORD);
543 extern FILE *LocateBase(char **,char **);
544 #ifdef NEWSPLITMERGE
545 extern LONG SplitMerge(PHEAD WORD **,LONG);
546 #else
547 extern VOID SplitMerge(PHEAD WORD **,LONG);
548 #endif
549 extern WORD StoreTerm(PHEAD WORD *);
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 *);
561 extern WORD TermRenumber(WORD *,RENUMBER,WORD);
562 extern VOID TestDrop(VOID);
563 extern VOID PutInVflags(WORD);
564 extern WORD TestMatch(PHEAD WORD *,WORD *);
565 extern WORD TestSub(PHEAD WORD *,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);
573 extern WORD ToStorage(EXPRESSIONS,POSITION *);
574 extern VOID TokenToLine(UBYTE *);
575 extern WORD Trace4(PHEAD WORD *,WORD *,WORD,WORD);
576 extern WORD Trace4Gen(PHEAD TRACES *,WORD);
577 extern WORD Trace4no(WORD,WORD *,TRACES *);
578 extern WORD TraceFind(PHEAD WORD *,WORD *);
579 extern WORD TraceN(PHEAD WORD *,WORD *,WORD,WORD);
580 extern WORD TraceNgen(PHEAD TRACES *,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);
595 extern VOID WriteStats(POSITION *,WORD);
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();
603 
604 /*---------------------------------------------------------------------*/
605 
606 extern WORD DoExecute(WORD,WORD);
607 extern VOID SetScratch(FILEHANDLE *,POSITION *);
608 extern VOID Warning(char *);
609 extern VOID HighWarning(char *);
610 extern int SpareTable(TABLES);
611 
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);
626 extern STREAM *CloseStream(STREAM *);
627 extern VOID PositionStream(STREAM *,LONG);
628 extern int ProcessOption(UBYTE *,UBYTE *,int);
629 extern int DoSetups(VOID);
630 extern VOID Terminate(int);
631 extern NAMENODE *GetNode(NAMETREE *,UBYTE *);
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);
639 extern VOID DumpTree(NAMETREE *);
640 extern VOID DumpNode(NAMETREE *,WORD,WORD);
641 extern VOID LinkTree(NAMETREE *,WORD,WORD);
642 extern VOID CopyTree(NAMETREE *,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);
671 extern LONG ReadPosFile(PHEAD FILEHANDLE *,UBYTE *,LONG,POSITION *);
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 *);
710 extern SETUPPARAMETERS *GetSetupPar(UBYTE *);
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);
728 extern KEYWORD *FindKeyWord(UBYTE *,KEYWORD *,int);
729 extern KEYWORD *FindInKeyWord(UBYTE *,KEYWORD *,int);
730 extern int DoDefine(UBYTE *);
731 extern int DoRedefine(UBYTE *);
732 extern int TheDefine(UBYTE *,int);
733 extern int TheUndefine(UBYTE *);
734 extern int ClearMacro(UBYTE *);
735 extern int DoUndefine(UBYTE *);
736 extern int DoInclude(UBYTE *);
737 /*[14apr2004 mt]:*/
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 *);
743 /*[10may2006 mt]:*/
744 extern int DoSetExternalAttr(UBYTE *);
745 /*:[10may2006 mt]*/
746 extern int DoRmExternal(UBYTE *);
747 /*:[14apr2004 mt]*/
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 *);
827 extern VOID StageSort(FILEHANDLE *);
828 
829 #define M_alloc(x) malloc((size_t)(x))
830 
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 *);
847 
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 *);
856 extern WORD *TakeArgContent(PHEAD WORD *, WORD *);
857 extern WORD *MakeInteger(PHEAD WORD *,WORD *,WORD *);
858 extern WORD *MakeMod(PHEAD WORD *,WORD *,WORD *);
859 extern WORD FindArg(PHEAD WORD *);
860 extern WORD InsertArg(PHEAD WORD *,WORD *,int);
861 extern int CleanupArgCache(PHEAD WORD);
862 extern int ArgSymbolMerge(WORD *, WORD *);
863 extern int ArgDotproductMerge(WORD *, WORD *);
864 extern void SortWeights(LONG *,LONG *,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);
1081 extern int DollarFactorize(PHEAD WORD);
1082 extern int CoPrintTable(UBYTE *);
1083 extern int CoDeallocateTable(UBYTE *);
1084 extern void CleanDollarFactors(DOLLARS);
1085 extern WORD *TakeDollarContent(PHEAD WORD *,WORD **);
1086 extern WORD *MakeDollarInteger(PHEAD WORD *,WORD **);
1087 extern WORD *MakeDollarMod(PHEAD WORD *,WORD **);
1088 extern int GetDolNum(PHEAD WORD *, WORD *);
1089 extern void AddPotModdollar(WORD);
1090 
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);
1121 extern void CleanUpSort(int);
1122 extern FILEHANDLE *AllocFileHandle(VOID);
1123 extern VOID DeAllocFileHandle(FILEHANDLE *);
1124 extern VOID LowerSortLevel(VOID);
1125 extern int InsideDollar(PHEAD WORD *,WORD);
1126 extern DOLLARS DolToTerms(PHEAD WORD);
1127 extern WORD EvalDoLoopArg(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);
1151 
1152 extern POSITION *FindBracket(WORD,WORD *);
1153 extern VOID PutBracketInIndex(PHEAD WORD *,POSITION *);
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 *);
1166 
1167 extern int FlipTable(FUNCTIONS,int);
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);
1173 
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);
1179 
1180 extern char *str_dup(char *);
1181 extern void convertblock(INDEXBLOCK *,INDEXBLOCK *,int);
1182 extern void convertnamesblock(NAMESBLOCK *,NAMESBLOCK *,int);
1183 extern void convertiniinfo(INIINFO *,INIINFO *,int);
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 *);
1204 extern MLONG AddTableName(DBASE *,char *,TABLES);
1205 extern MLONG GetTableName(DBASE *,char *);
1206 extern MLONG FindTableNumber(DBASE *,char *);
1207 extern int TryEnvironment(VOID);
1208 
1209 #ifdef WITHZLIB
1210 extern int SetupOutputGZIP(FILEHANDLE *);
1211 extern int PutOutputGZIP(FILEHANDLE *);
1212 extern int FlushOutputGZIP(FILEHANDLE *);
1213 extern int SetupAllInputGZIP(SORTING *);
1214 extern LONG FillInputGZIP(FILEHANDLE *,POSITION *,UBYTE *,LONG,int);
1215 #endif
1216 
1217 #ifdef WITHPTHREADS
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);
1229 extern int ThreadsProcessor(EXPRESSIONS,WORD);
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);
1264 
1265 #endif
1266 
1267 extern int CopyExpression(FILEHANDLE *,FILEHANDLE *);
1268 
1269 extern int set_in(UBYTE, set_of_char);
1270 extern one_byte set_set(UBYTE, set_of_char);
1271 extern one_byte set_del(UBYTE, set_of_char);
1272 extern one_byte set_sub (set_of_char, set_of_char, set_of_char);
1273 extern int DoPreAddSeparator(UBYTE *);
1274 extern int DoPreRmSeparator(UBYTE *);
1275 
1276 /*See the file extcmd.c*/
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);
1283 
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);
1293 
1294 #define CompareTerms ((COMPARE)AR.CompareRoutine)
1295 #define FiniShuffle ((FINISHUFFLE)AN.SHvar.finishuf)
1296 #define DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle)
1297 
1298 extern UBYTE *defineChannel(UBYTE*, HANDLERS*);
1299 extern int writeToChannel(int,UBYTE *,HANDLERS*);
1300 #ifdef WITHEXTERNALCHANNEL
1301 extern LONG WriteToExternalChannel(int,UBYTE *,LONG);
1302 #endif
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);
1311 
1312 extern int ReleaseTB(VOID);
1313 
1314 extern int SymbolNormalize(WORD *);
1315 extern int CompareSymbols(PHEAD WORD *,WORD *,WORD);
1316 extern WORD NextPrime(PHEAD WORD);
1317 extern UWORD wranf(PHEAD0);
1318 extern UWORD iranf(PHEAD UWORD);
1319 extern void iniwranf(PHEAD0);
1320 extern UBYTE *PreRandom(UBYTE *);
1321 
1322 extern WORD *PolyNormPoly (PHEAD WORD);
1323 extern WORD *EvaluateGcd(PHEAD WORD *);
1324 
1325 extern WORD ReadSaveHeader(VOID);
1326 extern WORD ReadSaveIndex(FILEINDEX *);
1327 extern WORD ReadSaveExpression(UBYTE *,UBYTE *,LONG *,LONG *);
1328 extern UBYTE *ReadSaveTerm32(UBYTE *,UBYTE *,UBYTE **,UBYTE *,UBYTE *,int);
1329 extern WORD ReadSaveVariables(UBYTE *,UBYTE *,LONG *,LONG *,INDEXENTRY *,LONG *);
1330 extern WORD WriteStoreHeader(WORD);
1331 
1332 extern void InitRecovery(VOID);
1333 extern int CheckRecoveryFile(VOID);
1334 extern void DeleteRecoveryFile(VOID);
1335 extern char *RecoveryFilename(VOID);
1336 extern int DoRecovery(int *);
1337 extern void DoCheckpoint(int);
1338 
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);
1346 #endif
1347 
1348 extern void ExprStatus(EXPRESSIONS);
1349 extern VOID iniTools(VOID);
1350 extern int TestTerm(WORD *);
1351 
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);
1366 
1367 extern int NormPolyTerm(PHEAD WORD *);
1368 extern WORD ComparePoly(WORD *, WORD *, WORD);
1369 extern int ConvertToPoly(PHEAD WORD *, WORD *,WORD *,WORD);
1370 extern int LocalConvertToPoly(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 *);
1377 
1378 extern void UpdateMaxSize(VOID);
1379 
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);
1388 extern int IniFbuffer(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 *);
1396 extern WORD *TakeContent(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);
1404 
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);
1415 
1416 extern VOID optimize_print_code (int);
1417 
1418 #ifdef WITHPTHREADS
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();
1423 #endif
1424 
1425 /*
1426  #] Declarations :
1427 */
1428 #endif
int NormalModulus(UWORD *, WORD *)
Definition: reken.c:1370
WORD ReadSaveIndex(FILEINDEX *)
Definition: store.c:4024
void DeleteRecoveryFile()
Definition: checkpoint.c:333
void AddPotModdollar(WORD)
Definition: dollar.c:3771
VOID AddArgs(PHEAD WORD *, WORD *, WORD *)
Definition: sort.c:2115
char * RecoveryFilename()
Definition: checkpoint.c:364
WORD FindArg(PHEAD WORD *)
Definition: argument.c:2345
Definition: minos.h:82
int PutPreVar(UBYTE *, UBYTE *, UBYTE *, int)
Definition: pre.c:549
WORD AddCoef(PHEAD WORD **, WORD **)
Definition: sort.c:1829
void DoCheckpoint(int)
Definition: checkpoint.c:3014
WORD PrepPoly(PHEAD WORD *)
Definition: proces.c:4402
Definition: structs.h:483
UBYTE * ReadSaveTerm32(UBYTE *, UBYTE *, UBYTE **, UBYTE *, UBYTE *, int)
Definition: store.c:4570
Definition: structs.h:618
VOID WriteStats(POSITION *, WORD)
Definition: sort.c:91
#define PHEAD
Definition: ftypes.h:56
WORD Processor()
Definition: proces.c:64
int LocalConvertToPoly(PHEAD WORD *, WORD *, WORD, WORD)
Definition: notation.c:508
WORD InFunction(PHEAD WORD *, WORD *)
Definition: proces.c:1809
int SymbolNormalize(WORD *)
Definition: normal.c:4676
WORD PolyFunMul(PHEAD WORD *)
Definition: proces.c:4746
WORD TermRenumber(WORD *, RENUMBER, WORD)
Definition: store.c:2307
int CleanupArgCache(PHEAD WORD)
Definition: argument.c:2404
VOID SplitMerge(PHEAD WORD **, LONG)
Definition: sort.c:3033
WORD * TakeArgContent(PHEAD WORD *, WORD *)
Definition: argument.c:2598
int DoRecovery(int *)
Definition: checkpoint.c:1383
void SortWeights(LONG *, LONG *, WORD)
Definition: argument.c:3360
VOID RaisPowCached(PHEAD WORD, WORD, UWORD **, WORD *)
Definition: reken.c:1286
Definition: structs.h:908
int DollarFactorize(PHEAD WORD)
Definition: dollar.c:2794
WORD * MakeDollarInteger(PHEAD WORD *, WORD **)
Definition: dollar.c:3441
WORD InsertTerm(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD)
Definition: proces.c:2350
int GetModInverses(WORD, WORD, WORD *, WORD *)
Definition: reken.c:1443
WORD ReadSaveVariables(UBYTE *, UBYTE *, LONG *, LONG *, INDEXENTRY *, LONG *)
Definition: store.c:4210
WORD AddPoly(PHEAD WORD **, WORD **)
Definition: sort.c:1956
WORD FiniTerm(PHEAD WORD *, WORD *, WORD *, WORD, WORD)
Definition: proces.c:2668
WORD StoreTerm(PHEAD WORD *)
Definition: sort.c:4070
VOID StartVariables()
Definition: startup.c:659
WORD Sflush(FILEHANDLE *)
Definition: sort.c:1214
WORD TestMatch(PHEAD WORD *, WORD *)
Definition: pattern.c:97
WORD * MakeDollarMod(PHEAD WORD *, WORD **)
Definition: dollar.c:3614
WORD SetFileIndex()
Definition: store.c:2200
int CopyFile(char *, char *)
Definition: tools.c:894
WORD DoOnePow(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD, WORD *)
Definition: proces.c:4056
WORD MergePatches(WORD)
Definition: sort.c:3324
LONG PasteFile(PHEAD WORD, WORD *, POSITION *, WORD **, RENUMBER, WORD *, WORD)
Definition: proces.c:2481
WORD SortWild(WORD *, WORD)
Definition: sort.c:4269
LONG ComPress(WORD **, LONG *)
Definition: sort.c:2867
WORD Deferred(PHEAD WORD *, WORD)
Definition: proces.c:4275
WORD Compare1(PHEAD WORD *, WORD *, WORD)
Definition: sort.c:2397
Definition: structs.h:1028
Definition: minos.h:120
VOID LowerSortLevel()
Definition: sort.c:4435
WORD PutOut(PHEAD WORD *, POSITION *, FILEHANDLE *, WORD)
Definition: sort.c:1300
VOID GarbHand()
Definition: sort.c:3209
Definition: structs.h:204
WORD TestSub(PHEAD WORD *, WORD)
Definition: proces.c:655
int MakeInverses()
Definition: reken.c:1407
WORD NewSort(PHEAD0)
Definition: sort.c:553
WORD NextPrime(PHEAD WORD)
Definition: reken.c:3629
WORD Generator(PHEAD WORD *, WORD)
Definition: proces.c:2865
WORD * PasteTerm(PHEAD WORD, WORD *, WORD *, WORD, WORD)
Definition: proces.c:2603
int TheDefine(UBYTE *, int)
Definition: pre.c:1798
WORD * TakeContent(PHEAD WORD *, WORD *)
Definition: ratio.c:1316
int CompareSymbols(PHEAD WORD *, WORD *, WORD)
Definition: sort.c:2818
int IniFbuffer(WORD)
Definition: comtool.c:558
WORD * MakeMod(PHEAD WORD *, WORD *, WORD *)
Definition: argument.c:3315
WORD InsertArg(PHEAD WORD *, WORD *, int)
Definition: argument.c:2369
int TestTerm(WORD *)
Definition: tools.c:3331
VOID StageSort(FILEHANDLE *)
Definition: sort.c:4189
WORD FlushOut(POSITION *, FILEHANDLE *, int)
Definition: sort.c:1621
void InitRecovery()
Definition: checkpoint.c:399
WORD EvalDoLoopArg(PHEAD WORD *, WORD)
Definition: dollar.c:2491
struct bit_field set_of_char[32]
Definition: structs.h:877
WORD ReadSaveExpression(UBYTE *, UBYTE *, LONG *, LONG *)
Definition: store.c:4979
void CleanUpSort(int)
Definition: sort.c:4361
WORD CompCoef(WORD *, WORD *)
Definition: reken.c:3012
int CheckRecoveryFile()
Definition: checkpoint.c:278
LONG PutIn(FILEHANDLE *, POSITION *, WORD *, WORD **, int)
Definition: sort.c:1154
LONG EndSort(PHEAD WORD *, int)
Definition: sort.c:632
WORD ReadSaveHeader()
Definition: store.c:3906
WORD WriteStoreHeader(WORD)
Definition: store.c:3813
WORD * MakeInteger(PHEAD WORD *, WORD *, WORD *)
Definition: argument.c:3144