FORM  4.2
declare.h
Go to the documentation of this file.
1 #ifndef __FDECLARE__
2 #define __FDECLARE__
3 
9 /* #[ License : */
10 /*
11  * Copyright (C) 1984-2017 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))>>1)
45 #define INCLENG(x) (((x)<0)?(((x)<<1)-1):(((x)<<1)+1))
46 #define GETCOEF(x,y) x += *x;y = x[-1];x -= ABS(y);y=REDLENG(y)
47 #define GETSTOP(x,y) y=x+(*x)-1;y -= ABS(*y)-1
48 #define StuffAdd(x,y) (((x)<0?-1:1)*(y)+((y)<0?-1:1)*(x))
49 
50 #define TOKENTOLINE(x,y) if ( AC.OutputSpaces == NOSPACEFORMAT ) { \
51  TokenToLine((UBYTE *)(y)); } else { TokenToLine((UBYTE *)(x)); }
52 
53 #define UngetFromStream(stream,c) ((stream)->nextchar[(stream)->isnextchar++]=c)
54 #ifdef WITHRETURN
55 #define AddLineFeed(s,n) { (s)[(n)++] = CARRIAGERETURN; (s)[(n)++] = LINEFEED; }
56 #else
57 #define AddLineFeed(s,n) { (s)[(n)++] = LINEFEED; }
58 #endif
59 #define TryRecover(x) Terminate(-1)
60 #define UngetChar(c) { pushbackchar = c; }
61 #define ParseNumber(x,s) {(x)=0;while(*(s)>='0'&&*(s)<='9')(x)=10*(x)+*(s)++ -'0';}
62 #define ParseSign(sgn,s) {(sgn)=0;while(*(s)=='-'||*(s)=='+'){\
63  if ( *(s)++ == '-' ) sgn ^= 1;}}
64 #define ParseSignedNumber(x,s) { int sgn; ParseSign(sgn,s)\
65  ParseNumber(x,s) if ( sgn ) x = -x; }
66 
67 #define NCOPY(s,t,n) while ( --n >= 0 ) *s++ = *t++;
68 
69 /*#define NCOPY(s,t,n) { memcpy(s,t,n*sizeof(WORD)); s+=n; t+=n; n = -1; }*/
70 #define NCOPYI(s,t,n) while ( --n >= 0 ) *s++ = *t++;
71 #define NCOPYB(s,t,n) while ( --n >= 0 ) *s++ = *t++;
72 #define NCOPYI32(s,t,n) while ( --n >= 0 ) *s++ = *t++;
73 #define WCOPY(s,t,n) { int nn=n; WORD *ss=(WORD *)s, *tt=(WORD *)t; while ( --nn >= 0 ) *ss++=*tt++; }
74 #define NeedNumber(x,s,err) { int sgn = 1; \
75  while ( *s == ' ' || *s == '\t' || *s == '-' || *s == '+' ) { \
76  if ( *s == '-' ) sgn = -sgn; s++; } \
77  if ( chartype[*s] != 1 ) goto err; \
78  ParseNumber(x,s) \
79  if ( sgn < 0 ) (x) = -(x); while ( *s == ' ' || *s == '\t' ) s++;\
80  }
81 #define SKIPBLANKS(s) { while ( *(s) == ' ' || *(s) == '\t' ) (s)++; }
82 #define FLUSHCONSOLE if ( AP.InOutBuf > 0 ) CharOut(LINEFEED)
83 
84 #define SKIPBRA1(s) { int lev1=0; s++; while(*s) { if(*s=='[')lev1++; \
85  else if(*s==']'&&--lev1<0)break; s++;} }
86 #define SKIPBRA2(s) { int lev2=0; s++; while(*s) { if(*s=='{')lev2++; \
87  else if(*s=='}'&&--lev2<0)break; \
88  else if(*s=='[')SKIPBRA1(s) s++;} }
89 #define SKIPBRA3(s) { int lev3=0; s++; while(*s) { if(*s=='(')lev3++; \
90  else if(*s==')'&&--lev3<0)break; \
91  else if(*s=='{')SKIPBRA2(s) \
92  else if(*s=='[')SKIPBRA1(s) s++;} }
93 #define SKIPBRA4(s) { int lev4=0; s++; while(*s) { if(*s=='(')lev4++; \
94  else if(*s==')'&&--lev4<0)break; \
95  else if(*s=='[')SKIPBRA1(s) s++;} }
96 #define SKIPBRA5(s) { int lev5=0; s++; while(*s) { if(*s=='{')lev5++; \
97  else if(*s=='}'&&--lev5<0)break; \
98  else if(*s=='(')SKIPBRA4(s) \
99  else if(*s=='[')SKIPBRA1(s) s++;} }
100 
101 /*
102 #define CYCLE1(a,i) {WORD iX,jX; iX=*a; for(jX=1;jX<i;jX++)a[jX-1]=a[jX]; a[i-1]=iX;}
103 */
104 #define CYCLE1(t,a,i) {t iX=*a; WORD jX; for(jX=1;jX<i;jX++)a[jX-1]=a[jX]; a[i-1]=iX;}
105 
106 #define AddToCB(c,wx) if(c->Pointer>=c->Top) \
107  DoubleCbuffer(c-cbuf,c->Pointer,21); \
108  *(c->Pointer)++ = wx;
109 
110 #define EXCHINOUT { FILEHANDLE *ffFi = AR.outfile; \
111  AR.outfile = AR.infile; AR.infile = ffFi; }
112 #define BACKINOUT { FILEHANDLE *ffFi = AR.outfile; POSITION posi; \
113  AR.outfile = AR.infile; AR.infile = ffFi; \
114  SetEndScratch(AR.infile,&posi); }
115 
116 #define CopyArg(to,from) { if ( *from > 0 ) { int ica = *from; NCOPY(to,from,ica) } \
117  else if ( *from <= -FUNCTION ) *to++ = *from++; \
118  else { *to++ = *from++; *to++ = *from++; } }
119 
120 #if ARGHEAD > 2
121 #define FILLARG(w) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = 0; }
122 #define COPYARG(w,t) { int i = ARGHEAD-2; while ( --i >= 0 ) *w++ = *t++; }
123 #define ZEROARG(w) { int i; for ( i = 2; i < ARGHEAD; i++ ) w[i] = 0; }
124 #else
125 #define FILLARG(w)
126 #define COPYARG(w,t)
127 #define ZEROARG(w)
128 #endif
129 
130 #if FUNHEAD > 2
131 #define FILLFUN(w) { *w++ = 0; FILLFUN3(w) }
132 #define COPYFUN(w,t) { *w++ = *t++; COPYFUN3(w,t) }
133 #else
134 #define FILLFUN(w)
135 #define COPYFUN(w,t)
136 #endif
137 
138 #if FUNHEAD > 3
139 #define FILLFUN3(w) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = 0; }
140 #define COPYFUN3(w,t) { int ie = FUNHEAD-3; while ( --ie >= 0 ) *w++ = *t++; }
141 #else
142 #define COPYFUN3(w,t)
143 #define FILLFUN3(w)
144 #endif
145 
146 #if SUBEXPSIZE > 5
147 #define FILLSUB(w) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = 0; }
148 #define COPYSUB(w,ww) { int ie = SUBEXPSIZE-5; while ( --ie >= 0 ) *w++ = *ww++; }
149 #else
150 #define FILLSUB(w)
151 #define COPYSUB(w,ww)
152 #endif
153 
154 #if EXPRHEAD > 4
155 #define FILLEXPR(w) { int ie = EXPRHEAD-4; while ( --ie >= 0 ) *w++ = 0; }
156 #else
157 #define FILLEXPR(w)
158 #endif
159 
160 #define NEXTARG(x) if(*x>0) x += *x; else if(*x <= -FUNCTION)x++; else x += 2;
161 #define COPY1ARG(s1,t1) { int ica; if ( (ica=*t1) > 0 ) { NCOPY(s1,t1,ica) } \
162  else if(*t1<=-FUNCTION){*s1++=*t1++;} else{*s1++=*t1++;*s1++=*t1++;} }
163 
171 #define ZeroFillRange(w,begin,end) do { \
172  int tmp_i; \
173  for ( tmp_i = begin; tmp_i < end; tmp_i++ ) { (w)[tmp_i] = 0; } \
174 } while (0)
175 
176 #define TABLESIZE(a,b) (((WORD)sizeof(a))/((WORD)sizeof(b)))
177 #define WORDDIF(x,y) (WORD)(x-y)
178 #define wsizeof(a) ((WORD)sizeof(a))
179 #define VARNAME(type,num) (AC.varnames->namebuffer+type[num].name)
180 #define DOLLARNAME(type,num) (AC.dollarnames->namebuffer+type[num].name)
181 #define EXPRNAME(num) (AC.exprnames->namebuffer+Expressions[num].name)
182 
183 #define PREV(x) prevorder?prevorder:x
184 
185 #define SETERROR(x) { Terminate(-1); return(-1); }
186 
187 /* use this macro to avoid the unused parameter warning */
188 #define DUMMYUSE(x) (void)(x);
189 
190 #ifdef _FILE_OFFSET_BITS
191 #if _FILE_OFFSET_BITS==64
192 /*:[19mar2004 mt]*/
193 
194 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(off_t)(x))
195 #define SETBASELENGTH(ss,x) (ss).p1 = (off_t)(x)
196 #define SETBASEPOSITION(pp,x) (pp).p1 = (off_t)(x)
197 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(off_t)(x)) )
198 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(off_t)(x)) )
199 #define DIVPOS(pp,n) ( (pp).p1/(off_t)(n) )
200 #define MULPOS(pp,n) (pp).p1 *= (off_t)(n)
201 
202 #else
203 
204 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(x))
205 #define SETBASELENGTH(ss,x) (ss).p1 = (x)
206 #define SETBASEPOSITION(pp,x) (pp).p1 = (x)
207 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) )
208 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) )
209 #define DIVPOS(pp,n) ( (pp).p1/(n) )
210 #define MULPOS(pp,n) (pp).p1 *= (n)
211 #endif
212 #else
213 
214 #define ADDPOS(pp,x) (pp).p1 = ((pp).p1+(LONG)(x))
215 #define SETBASELENGTH(ss,x) (ss).p1 = (LONG)(x)
216 #define SETBASEPOSITION(pp,x) (pp).p1 = (LONG)(x)
217 #define ISEQUALPOSINC(pp1,pp2,x) ( (pp1).p1 == ((pp2).p1+(LONG)(x)) )
218 #define ISGEPOSINC(pp1,pp2,x) ( (pp1).p1 >= ((pp2).p1+(LONG)(x)) )
219 #define DIVPOS(pp,n) ( (pp).p1/(LONG)(n) )
220 #define MULPOS(pp,n) (pp).p1 *= (LONG)(n)
221 
222 #endif
223 #define DIFPOS(ss,pp1,pp2) (ss).p1 = ((pp1).p1-(pp2).p1)
224 #define DIFBASE(pp1,pp2) ((pp1).p1-(pp2).p1)
225 #define ADD2POS(pp1,pp2) (pp1).p1 += (pp2).p1
226 #define PUTZERO(pp) (pp).p1 = 0
227 #define BASEPOSITION(pp) ((pp).p1)
228 #define SETSTARTPOS(pp) (pp).p1 = -2
229 #define NOTSTARTPOS(pp) ( (pp).p1 > -2 )
230 #define ISMINPOS(pp) ( (pp).p1 == -1 )
231 #define ISEQUALPOS(pp1,pp2) ( (pp1).p1 == (pp2).p1 )
232 #define ISNOTEQUALPOS(pp1,pp2) ( (pp1).p1 != (pp2).p1 )
233 #define ISLESSPOS(pp1,pp2) ( (pp1).p1 < (pp2).p1 )
234 #define ISGEPOS(pp1,pp2) ( (pp1).p1 >= (pp2).p1 )
235 #define ISNOTZEROPOS(pp) ( (pp).p1 != 0 )
236 #define ISZEROPOS(pp) ( (pp).p1 == 0 )
237 #define ISPOSPOS(pp) ( (pp).p1 > 0 )
238 #define ISNEGPOS(pp) ( (pp).p1 < 0 )
239 extern VOID TELLFILE(int,POSITION *);
240 
241 #define TOLONG(x) ((LONG)(x))
242 
243 #define Add2Com(x) { WORD cod[2]; cod[0] = x; cod[1] = 2; AddNtoL(2,cod); }
244 #define Add3Com(x1,x2) { WORD cod[3]; cod[0] = x1; cod[1] = 3; cod[2] = x2; AddNtoL(3,cod); }
245 #define Add4Com(x1,x2,x3) { WORD cod[4]; cod[0] = x1; cod[1] = 4; \
246  cod[2] = x2; cod[3] = x3; AddNtoL(4,cod); }
247 #define Add5Com(x1,x2,x3,x4) { WORD cod[5]; cod[0] = x1; cod[1] = 5; \
248  cod[2] = x2; cod[3] = x3; cod[4] = x4; AddNtoL(5,cod); }
249 
250 /*
251  The temporary variable ppp is to avoid a compiler warning about strict aliassing
252 */
253 #define WantAddPointers(x) while((AT.pWorkPointer+(x))>AR.pWorkSize){WORD ***ppp=&AT.pWorkSpace;\
254  ExpandBuffer((void **)ppp,&AR.pWorkSize,(int)(sizeof(WORD *)));}
255 #define WantAddLongs(x) while((AT.lWorkPointer+(x))>AR.lWorkSize){LONG **ppp=&AT.lWorkSpace;\
256  ExpandBuffer((void **)ppp,&AR.lWorkSize,sizeof(LONG));}
257 #define WantAddPositions(x) while((AT.posWorkPointer+(x))>AR.posWorkSize){POSITION **ppp=&AT.posWorkSpace;\
258  ExpandBuffer((void **)ppp,&AR.posWorkSize,sizeof(POSITION));}
259 
260 /* inline in form3.h (or config.h). */
261 #define FORM_INLINE inline
262 
263 /*
264  Macro's for memory management. This can be done by routines, but that
265  would be slower. Inline routines could do this, but we don't want to
266  leave this to the friendliness of the compiler(s).
267  The routines can be found in the file tools.c
268 */
269 #define MEMORYMACROS
270 
271 #ifdef MEMORYMACROS
272 
273 #define TermMalloc(x) ( (AT.TermMemTop <= 0 ) ? TermMallocAddMemory(BHEAD0), AT.TermMemHeap[--AT.TermMemTop]: AT.TermMemHeap[--AT.TermMemTop] )
274 #define NumberMalloc(x) ( (AT.NumberMemTop <= 0 ) ? NumberMallocAddMemory(BHEAD0), AT.NumberMemHeap[--AT.NumberMemTop]: AT.NumberMemHeap[--AT.NumberMemTop] )
275 #define CacheNumberMalloc(x) ( (AT.CacheNumberMemTop <= 0 ) ? CacheNumberMallocAddMemory(BHEAD0), AT.CacheNumberMemHeap[--AT.CacheNumberMemTop]: AT.CacheNumberMemHeap[--AT.CacheNumberMemTop] )
276 #define TermFree(TermMem,x) AT.TermMemHeap[AT.TermMemTop++] = (WORD *)(TermMem)
277 #define NumberFree(NumberMem,x) AT.NumberMemHeap[AT.NumberMemTop++] = (UWORD *)(NumberMem)
278 #define CacheNumberFree(NumberMem,x) AT.CacheNumberMemHeap[AT.CacheNumberMemTop++] = (UWORD *)(NumberMem)
279 
280 #else
281 
282 #define TermMalloc(x) TermMalloc2(BHEAD (char *)(x))
283 #define NumberMalloc(x) NumberMalloc2(BHEAD (char *)(x))
284 #define CacheNumberMalloc(x) CacheNumberMalloc2(BHEAD (char *)(x))
285 #define TermFree(x,y) TermFree2(BHEAD (WORD *)(x),(char *)(y))
286 #define NumberFree(x,y) NumberFree2(BHEAD (UWORD *)(x),(char *)(y))
287 #define CacheNumberFree(x,y) CacheNumberFree2(BHEAD (UWORD *)(x),(char *)(y))
288 
289 #endif
290 
291 /*
292  * Macros for checking nesting levels in the compiler, used as follows:
293  *
294  * AC.IfSumCheck[AC.IfLevel] = NestingChecksum();
295  * AC.IfLevel++;
296  *
297  * AC.IfLevel--;
298  * if ( AC.IfSumCheck[AC.IfLevel] != NestingChecksum() ) {
299  * MesNesting();
300  * }
301  *
302  * Note that NestingChecksum() also contains AC.IfLevel and so in this case
303  * using increment/decrement operators on it in the left-hand side may be
304  * confusing.
305  */
306 #define NestingChecksum() (AC.IfLevel + AC.RepLevel + AC.arglevel + AC.insidelevel + AC.termlevel + AC.inexprlevel + AC.dolooplevel)
307 #define MesNesting() MesPrint("&Illegal nesting of if, repeat, argument, inside, term, inexpression and do")
308 
309 #define MarkPolyRatFunDirty(T) {if(*T&&AR.PolyFunType==2){WORD *TP,*TT;TT=T+*T;TT-=ABS(TT[-1]);\
310 TP=T+1;while(TP<TT){if(*TP==AR.PolyFun){TP[2]|=(DIRTYFLAG|MUSTCLEANPRF);}TP+=TP[1];}}}
311 
312 /*
313  Macros for nesting input levels for #$name = ...; assign instructions.
314  Note that the level should never go below zero.
315 */
316 #define PUSHPREASSIGNLEVEL AP.PreAssignLevel++; { GETIDENTITY \
317  if ( AP.PreAssignLevel >= AP.MaxPreAssignLevel ) { int i; \
318  LONG *ap = (LONG *)Malloc1(2*AP.MaxPreAssignLevel*sizeof(LONG *),"PreAssignStack"); \
319  for ( i = 0; i < AP.MaxPreAssignLevel; i++ ) ap[i] = AP.PreAssignStack[i]; \
320  M_free(AP.PreAssignStack,"PreAssignStack"); \
321  AP.MaxPreAssignLevel *= 2; AP.PreAssignStack = ap; \
322  } \
323  *AT.WorkPointer++ = AP.PreContinuation; AP.PreContinuation = 0; \
324  AP.PreAssignStack[AP.PreAssignLevel] = AC.iPointer - AC.iBuffer; }
325 
326 #define POPPREASSIGNLEVEL if ( AP.PreAssignLevel > 0 ) { GETIDENTITY \
327  AC.iPointer = AC.iBuffer + AP.PreAssignStack[AP.PreAssignLevel--]; \
328  AP.PreContinuation = *--AT.WorkPointer; \
329  *AC.iPointer = 0; }
330 
331 /*
332  MesPrint("P-level popped to %d with %d",AP.PreAssignLevel,(WORD)(AC.iPointer - AC.iBuffer));
333 
334  #] Macro's :
335  #[ Thread objects :
336 */
337 
344 #ifdef WITHPTHREADS
345 
346 #define EXTERNLOCK(x) extern pthread_mutex_t x;
347 #define INILOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER
348 #define EXTERNRWLOCK(x) extern pthread_rwlock_t x;
349 #define INIRWLOCK(x) pthread_rwlock_t x = PTHREAD_RWLOCK_INITIALIZER;
350 #ifdef DEBUGGINGLOCKS
351 #include <asm/errno.h>
352 #define LOCK(x) while ( pthread_mutex_trylock(&(x)) == EBUSY ) {}
353 #define RWLOCKR(x) while ( pthread_rwlock_tryrdlock(&(x)) == EBUSY ) {}
354 #define RWLOCKW(x) while ( pthread_rwlock_trywrlock(&(x)) == EBUSY ) {}
355 #else
356 #define LOCK(x) pthread_mutex_lock(&(x))
357 #define RWLOCKR(x) pthread_rwlock_rdlock(&(x))
358 #define RWLOCKW(x) pthread_rwlock_wrlock(&(x))
359 #endif
360 #define UNLOCK(x) pthread_mutex_unlock(&(x))
361 #define UNRWLOCK(x) pthread_rwlock_unlock(&(x))
362 #define MLOCK(x) LOCK(x)
363 #define MUNLOCK(x) UNLOCK(x)
364 
365 #define GETBIDENTITY
366 #define GETIDENTITY int identity = WhoAmI(); ALLPRIVATES *B = AB[identity];
367 #else
368 
369 #define EXTERNLOCK(x)
370 #define INILOCK(x)
371 #define LOCK(x)
372 #define UNLOCK(x)
373 #define EXTERNRWLOCK(x)
374 #define INIRWLOCK(x)
375 #define RWLOCKR(x)
376 #define RWLOCKW(x)
377 #define UNRWLOCK(x)
378 #ifdef WITHMPI
379 #define MLOCK(x) do { if ( PF.me != MASTER ) PF_MLock(); } while (0)
380 #define MUNLOCK(x) do { if ( PF.me != MASTER ) PF_MUnlock(); } while (0)
381 #else
382 #define MLOCK(x)
383 #define MUNLOCK(x)
384 #endif
385 #define GETIDENTITY
386 #define GETBIDENTITY
387 
388 #endif
389 
390 /*
391  #] Thread objects :
392  #[ Declarations :
393 */
394 
395 #ifdef TERMMALLOCDEBUG
396 extern WORD **DebugHeap1, **DebugHeap2;
397 #endif
398 
403 extern VOID StartVariables();
404 extern VOID setSignalHandlers(VOID);
405 extern UBYTE *CodeToLine(WORD,UBYTE *);
406 extern UBYTE *AddArrayIndex(WORD ,UBYTE *);
407 extern INDEXENTRY *FindInIndex(WORD,FILEDATA *,WORD,WORD);
408 extern INDEXENTRY *NextFileIndex(POSITION *);
409 extern WORD *PasteTerm(PHEAD WORD,WORD *,WORD *,WORD,WORD);
410 extern UBYTE *StrCopy(UBYTE *,UBYTE *);
411 extern UBYTE *WrtPower(UBYTE *,WORD);
412 extern WORD AccumGCD(PHEAD UWORD *,WORD *,UWORD *,WORD);
413 extern VOID AddArgs(PHEAD WORD *,WORD *,WORD *);
414 extern WORD AddCoef(PHEAD WORD **,WORD **);
415 extern WORD AddLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
416 extern WORD AddPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
417 extern WORD AddPoly(PHEAD WORD **,WORD **);
418 extern WORD AddRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
419 extern VOID AddToLine(UBYTE *);
420 extern WORD AddWild(PHEAD WORD,WORD,WORD);
421 extern WORD BigLong(UWORD *,WORD,UWORD *,WORD);
422 extern WORD BinomGen(PHEAD WORD *,WORD,WORD **,WORD,WORD,WORD,WORD,WORD,UWORD *,WORD);
423 extern WORD CheckWild(PHEAD WORD,WORD,WORD,WORD *);
424 extern WORD Chisholm(PHEAD WORD *,WORD);
425 extern WORD CleanExpr(WORD);
426 extern VOID CleanUp(WORD);
427 extern VOID ClearWild(PHEAD0);
428 extern WORD CompareFunctions(WORD *,WORD *);
429 extern WORD Commute(WORD *,WORD *);
430 extern WORD DetCommu(WORD *);
431 extern WORD DoesCommu(WORD *);
432 extern int CompArg(WORD *,WORD *);
433 extern WORD CompCoef(WORD *, WORD *);
434 extern WORD CompGroup(PHEAD WORD,WORD **,WORD *,WORD *,WORD);
435 extern WORD Compare1(PHEAD WORD *,WORD *,WORD);
436 extern WORD CountDo(WORD *,WORD *);
437 extern WORD CountFun(WORD *,WORD *);
438 extern WORD DimensionSubterm(WORD *);
439 extern WORD DimensionTerm(WORD *);
440 extern WORD DimensionExpression(PHEAD WORD *);
441 extern WORD Deferred(PHEAD WORD *,WORD);
442 extern WORD DeleteStore(WORD);
443 extern WORD DetCurDum(PHEAD WORD *);
444 extern VOID DetVars(WORD *,WORD);
445 extern WORD Distribute(DISTRIBUTE *,WORD);
446 extern WORD DivLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *,UWORD *,WORD *);
447 extern WORD DivRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
448 extern WORD Divvy(PHEAD UWORD *,WORD *,UWORD *,WORD);
449 extern WORD DoDelta(WORD *);
450 extern WORD DoDelta3(PHEAD WORD *,WORD);
451 extern WORD TestPartitions(PHEAD WORD *, PARTI *);
452 extern WORD DoPartitions(PHEAD WORD *,WORD);
453 extern WORD DoTableExpansion(WORD *,WORD);
454 extern WORD DoDistrib(PHEAD WORD *,WORD);
455 extern WORD DoShuffle(PHEAD WORD *,WORD,WORD,WORD);
456 extern WORD DoPermutations(PHEAD WORD *,WORD);
457 extern int Shuffle(PHEAD WORD *, WORD *, WORD *);
458 extern int FinishShuffle(PHEAD WORD *);
459 extern WORD DoStuffle(PHEAD WORD *,WORD,WORD,WORD);
460 extern int Stuffle(PHEAD WORD *, WORD *, WORD *);
461 extern int FinishStuffle(PHEAD WORD *);
462 extern WORD *StuffRootAdd(WORD *, WORD *, WORD *);
463 extern WORD TestUse(WORD *,WORD);
464 extern DBASE *FindTB(UBYTE *);
465 extern int CheckTableDeclarations(DBASE *);
466 extern WORD Apply(WORD *,WORD);
467 extern int ApplyExec(WORD *,int,WORD);
468 extern WORD ApplyReset(WORD);
469 extern WORD TableReset(VOID);
470 extern VOID ReWorkT(WORD *,WORD *,WORD);
471 extern WORD GetIfDollarNum(WORD *, WORD *);
472 extern int FindVar(WORD *,WORD *);
473 extern WORD DoIfStatement(PHEAD WORD *,WORD *);
474 extern WORD DoOnePow(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD,WORD *);
475 extern void DoRevert(WORD *,WORD *);
476 extern WORD DoSumF1(PHEAD WORD *,WORD *,WORD,WORD);
477 extern WORD DoSumF2(PHEAD WORD *,WORD *,WORD,WORD);
478 extern WORD DoTheta(PHEAD WORD *);
479 extern LONG EndSort(PHEAD WORD *,int);
480 extern WORD EntVar(WORD,UBYTE *,WORD,WORD,WORD,WORD);
481 extern WORD EpfCon(PHEAD WORD *,WORD *,WORD,WORD);
482 extern WORD EpfFind(PHEAD WORD *,WORD *);
483 extern WORD EpfGen(WORD,WORD *,WORD *,WORD *,WORD);
484 extern WORD EqualArg(WORD *,WORD,WORD);
485 extern WORD Evaluate(UBYTE **);
486 extern int Factorial(PHEAD WORD,UWORD *,WORD *);
487 extern int Bernoulli(WORD,UWORD *,WORD *);
488 extern int FactorIn(PHEAD WORD *,WORD);
489 extern int FactorInExpr(PHEAD WORD *,WORD);
490 extern WORD FindAll(PHEAD WORD *,WORD *,WORD,WORD *);
491 extern WORD FindMulti(PHEAD WORD *,WORD *);
492 extern WORD FindOnce(PHEAD WORD *,WORD *);
493 extern WORD FindOnly(PHEAD WORD *,WORD *);
494 extern WORD FindRest(PHEAD WORD *,WORD *);
495 extern WORD FindSpecial(WORD *);
496 extern WORD FindrNumber(WORD,VARRENUM *);
497 extern VOID FiniLine(VOID);
498 extern WORD FiniTerm(PHEAD WORD *,WORD *,WORD *,WORD,WORD);
499 extern WORD FlushOut(POSITION *,FILEHANDLE *,int);
500 extern VOID FunLevel(PHEAD WORD *);
501 extern VOID AdjustRenumScratch(PHEAD0);
502 extern VOID GarbHand(VOID);
503 extern WORD GcdLong(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
504 extern WORD LcmLong(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
505 extern VOID GCD(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
506 extern ULONG GCD2(ULONG,ULONG);
507 extern WORD Generator(PHEAD WORD *,WORD);
508 extern WORD GetBinom(UWORD *,WORD *,WORD,WORD);
509 extern WORD GetFromStore(WORD *,POSITION *,RENUMBER,WORD *,WORD);
510 extern WORD GetLong(UBYTE *,UWORD *,WORD *);
511 extern WORD GetMoreTerms(WORD *);
512 extern WORD GetMoreFromMem(WORD *,WORD **);
513 extern WORD GetOneTerm(PHEAD WORD *,FILEHANDLE *,POSITION *,int);
514 extern RENUMBER GetTable(WORD,POSITION *,WORD);
515 extern WORD GetTerm(PHEAD WORD *);
516 extern WORD Glue(PHEAD WORD *,WORD *,WORD *,WORD);
517 extern WORD InFunction(PHEAD WORD *,WORD *);
518 extern VOID IniLine(WORD);
519 extern WORD IniVars(VOID);
520 extern VOID Initialize(VOID);
521 extern WORD InsertTerm(PHEAD WORD *,WORD,WORD,WORD *,WORD *,WORD);
522 extern VOID LongToLine(UWORD *,WORD);
523 extern WORD MakeDirty(WORD *,WORD *,WORD);
524 extern VOID MarkDirty(WORD *,WORD);
525 extern VOID PolyFunDirty(PHEAD WORD *);
526 extern VOID PolyFunClean(PHEAD WORD *);
527 extern WORD MakeModTable(VOID);
528 extern WORD MatchE(PHEAD WORD *,WORD *,WORD *,WORD);
529 extern int MatchCy(PHEAD WORD *,WORD *,WORD *,WORD);
530 extern int FunMatchCy(PHEAD WORD *,WORD *,WORD *,WORD);
531 extern int FunMatchSy(PHEAD WORD *,WORD *,WORD *,WORD);
532 extern int MatchArgument(PHEAD WORD *,WORD *);
533 extern WORD MatchFunction(PHEAD WORD *,WORD *,WORD *);
534 extern WORD MergePatches(WORD);
535 extern WORD MesCerr(char *, UBYTE *);
536 extern WORD MesComp(char *, UBYTE *, UBYTE *);
537 extern WORD Modulus(WORD *);
538 extern VOID MoveDummies(PHEAD WORD *,WORD);
539 extern WORD MulLong(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
540 extern WORD MulRat(PHEAD UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
541 extern WORD Mully(PHEAD UWORD *,WORD *,UWORD *,WORD);
542 extern WORD MultDo(PHEAD WORD *,WORD *);
543 extern WORD NewSort(PHEAD0);
544 extern WORD ExtraSymbol(WORD,WORD,WORD,WORD *,WORD *);
545 extern WORD Normalize(PHEAD WORD *);
546 extern WORD BracketNormalize(PHEAD WORD *);
547 extern VOID DropCoefficient(PHEAD WORD *);
548 extern VOID DropSymbols(PHEAD WORD *);
549 extern int PutInside(PHEAD WORD *, WORD *);
550 extern WORD OpenTemp(VOID);
551 extern VOID Pack(UWORD *,WORD *,UWORD *,WORD );
552 extern LONG PasteFile(PHEAD WORD,WORD *,POSITION *,WORD **,RENUMBER,WORD *,WORD);
553 extern WORD Permute(PERM *,WORD);
554 extern WORD PermuteP(PERMP *,WORD);
555 extern WORD PolyFunMul(PHEAD WORD *);
556 extern WORD PopVariables(VOID);
557 extern WORD PrepPoly(PHEAD WORD *,WORD);
558 extern WORD Processor(VOID);
559 extern WORD Product(UWORD *,WORD *,WORD);
560 extern VOID PrtLong(UWORD *,WORD,UBYTE *);
561 extern VOID PrtTerms(VOID);
562 extern VOID PrintRunningTime(VOID);
563 extern LONG GetRunningTime(VOID);
564 extern WORD PutBracket(PHEAD WORD *);
565 extern LONG PutIn(FILEHANDLE *,POSITION *,WORD *,WORD **,int);
566 extern WORD PutInStore(INDEXENTRY *,WORD);
567 extern WORD PutOut(PHEAD WORD *,POSITION *,FILEHANDLE *,WORD);
568 extern UWORD Quotient(UWORD *,WORD *,WORD);
569 extern WORD RaisPow(PHEAD UWORD *,WORD *,UWORD);
570 extern VOID RaisPowCached (PHEAD WORD, WORD, UWORD **, WORD *);
571 extern WORD RaisPowMod (WORD, WORD, WORD);
572 extern int NormalModulus(UWORD *,WORD *);
573 extern int MakeInverses(VOID);
574 extern int GetModInverses(WORD,WORD,WORD *,WORD *);
575 extern int GetLongModInverses(PHEAD UWORD *, WORD, UWORD *, WORD, UWORD *, WORD *, UWORD *, WORD *);
576 extern VOID RatToLine(UWORD *,WORD);
577 extern WORD RatioFind(PHEAD WORD *,WORD *);
578 extern WORD RatioGen(PHEAD WORD *,WORD *,WORD,WORD);
579 extern WORD ReNumber(PHEAD WORD *);
580 extern WORD ReadSnum(UBYTE **);
581 extern WORD Remain10(UWORD *,WORD *);
582 extern WORD Remain4(UWORD *,WORD *);
583 extern WORD ResetScratch(VOID);
584 extern WORD ResolveSet(PHEAD WORD *,WORD *,WORD *);
585 extern WORD RevertScratch(VOID);
586 extern WORD ScanFunctions(PHEAD WORD *,WORD *,WORD);
587 extern VOID SeekScratch(FILEHANDLE *,POSITION *);
588 extern VOID SetEndScratch(FILEHANDLE *,POSITION *);
589 extern VOID SetEndHScratch(FILEHANDLE *,POSITION *);
590 extern WORD SetFileIndex(VOID);
591 extern WORD Sflush(FILEHANDLE *);
592 extern WORD Simplify(PHEAD UWORD *,WORD *,UWORD *,WORD *);
593 extern WORD SortWild(WORD *,WORD);
594 extern FILE *LocateBase(char **,char **);
595 #ifdef NEWSPLITMERGE
596 extern LONG SplitMerge(PHEAD WORD **,LONG);
597 #else
598 extern VOID SplitMerge(PHEAD WORD **,LONG);
599 #endif
600 extern WORD StoreTerm(PHEAD WORD *);
601 extern VOID SubPLon(UWORD *,WORD,UWORD *,WORD,UWORD *,WORD *);
602 extern VOID Substitute(PHEAD WORD *,WORD *,WORD);
603 extern WORD SymFind(PHEAD WORD *,WORD *);
604 extern WORD SymGen(PHEAD WORD *,WORD *,WORD,WORD);
605 extern WORD Symmetrize(PHEAD WORD *,WORD *,WORD,WORD,WORD);
606 extern int FullSymmetrize(PHEAD WORD *,int);
607 extern WORD TakeModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
608 extern WORD TakeNormalModulus(UWORD *,WORD *,UWORD *,WORD,WORD);
609 extern VOID TalToLine(UWORD);
610 extern WORD TenVec(PHEAD WORD *,WORD *,WORD,WORD);
611 extern WORD TenVecFind(PHEAD WORD *,WORD *);
612 extern WORD TermRenumber(WORD *,RENUMBER,WORD);
613 extern VOID TestDrop(VOID);
614 extern VOID PutInVflags(WORD);
615 extern WORD TestMatch(PHEAD WORD *,WORD *);
616 extern WORD TestSub(PHEAD WORD *,WORD);
617 extern LONG TimeCPU(WORD);
618 extern LONG TimeChildren(WORD);
619 extern LONG TimeWallClock(WORD);
620 extern LONG Timer(int);
621 extern int GetTimerInfo(LONG **,LONG **);
622 extern void WriteTimerInfo(LONG *,LONG *);
623 extern LONG GetWorkerTimes(VOID);
624 extern WORD ToStorage(EXPRESSIONS,POSITION *);
625 extern VOID TokenToLine(UBYTE *);
626 extern WORD Trace4(PHEAD WORD *,WORD *,WORD,WORD);
627 extern WORD Trace4Gen(PHEAD TRACES *,WORD);
628 extern WORD Trace4no(WORD,WORD *,TRACES *);
629 extern WORD TraceFind(PHEAD WORD *,WORD *);
630 extern WORD TraceN(PHEAD WORD *,WORD *,WORD,WORD);
631 extern WORD TraceNgen(PHEAD TRACES *,WORD);
632 extern WORD TraceNno(WORD,WORD *,TRACES *);
633 extern WORD Traces(PHEAD WORD *,WORD *,WORD,WORD);
634 extern WORD Trick(WORD *,TRACES *);
635 extern WORD TryDo(PHEAD WORD *,WORD *,WORD);
636 extern VOID UnPack(UWORD *,WORD,WORD *,WORD *);
637 extern WORD VarStore(UBYTE *,WORD,WORD,WORD);
638 extern WORD WildFill(PHEAD WORD *,WORD *,WORD *);
639 extern WORD WriteAll(VOID);
640 extern WORD WriteOne(UBYTE *,int,int);
641 extern VOID WriteArgument(WORD *);
642 extern WORD WriteExpression(WORD *,LONG);
643 extern WORD WriteInnerTerm(WORD *,WORD);
644 extern VOID WriteLists(VOID);
645 extern VOID WriteSetup(VOID);
646 extern VOID WriteStats(POSITION *,WORD);
647 extern WORD WriteSubTerm(WORD *,WORD);
648 extern WORD WriteTerm(WORD *,WORD *,WORD,WORD,WORD);
649 extern WORD execarg(PHEAD WORD *,WORD);
650 extern WORD execterm(PHEAD WORD *,WORD);
651 extern VOID SpecialCleanup(PHEAD0);
652 extern void SetMods();
653 extern void UnSetMods();
654 
655 /*---------------------------------------------------------------------*/
656 
657 extern WORD DoExecute(WORD,WORD);
658 extern VOID SetScratch(FILEHANDLE *,POSITION *);
659 extern VOID Warning(char *);
660 extern VOID HighWarning(char *);
661 extern int SpareTable(TABLES);
662 
663 extern UBYTE *strDup1(UBYTE *,char *);
664 extern VOID *Malloc(LONG);
665 extern VOID *Malloc1(LONG,const char *);
666 extern int DoTail(int,UBYTE **);
667 extern int OpenInput(VOID);
668 extern int PutPreVar(UBYTE *,UBYTE *,UBYTE *,int);
669 extern VOID Error0(char *);
670 extern VOID Error1(char *,UBYTE *);
671 extern VOID Error2(char *,char *,UBYTE *);
672 extern UBYTE ReadFromStream(STREAM *);
673 extern UBYTE GetFromStream(STREAM *);
674 extern UBYTE LookInStream(STREAM *);
675 extern STREAM *OpenStream(UBYTE *,int,int,int);
676 extern int LocateFile(UBYTE **,int);
677 extern STREAM *CloseStream(STREAM *);
678 extern VOID PositionStream(STREAM *,LONG);
679 extern int ReverseStatements(STREAM *);
680 extern int ProcessOption(UBYTE *,UBYTE *,int);
681 extern int DoSetups(VOID);
682 extern VOID Terminate(int);
683 extern NAMENODE *GetNode(NAMETREE *,UBYTE *);
684 extern int AddName(NAMETREE *,UBYTE *,WORD,WORD,int *);
685 extern int GetName(NAMETREE *,UBYTE *,WORD *,int);
686 extern int GetLastExprName(UBYTE *,WORD *);
687 extern int GetAutoName(UBYTE *,WORD *);
688 extern int GetVar(UBYTE *,WORD *,WORD *,int,int);
689 extern int MakeDubious(NAMETREE *,UBYTE *,WORD *);
690 extern int GetOName(NAMETREE *,UBYTE *,WORD *,int);
691 extern VOID DumpTree(NAMETREE *);
692 extern VOID DumpNode(NAMETREE *,WORD,WORD);
693 extern VOID LinkTree(NAMETREE *,WORD,WORD);
694 extern VOID CopyTree(NAMETREE *,NAMETREE *,WORD,WORD);
695 extern int CompactifyTree(NAMETREE *,WORD);
696 extern NAMETREE *MakeNameTree(VOID);
697 extern VOID FreeNameTree(NAMETREE *);
698 extern int AddExpression(UBYTE *,int,int);
699 extern int AddSymbol(UBYTE *,int,int,int,int);
700 extern int AddDollar(UBYTE *,WORD,WORD *,LONG);
701 extern int ReplaceDollar(WORD,WORD,WORD *,LONG);
702 extern int DollarRaiseLow(UBYTE *,LONG);
703 extern int AddVector(UBYTE *,int,int);
704 extern int AddDubious(UBYTE *);
705 extern int AddIndex(UBYTE *,int,int);
706 extern UBYTE *DoDimension(UBYTE *,int *,int *);
707 extern int AddFunction(UBYTE *,int,int,int,int,int,int,int);
708 extern int CoCommuteInSet(UBYTE *);
709 extern int CoFunction(UBYTE *,int,int);
710 extern int TestName(UBYTE *);
711 extern int AddSet(UBYTE *,WORD);
712 extern int DoElements(UBYTE *,SETS,UBYTE *);
713 extern int DoTempSet(UBYTE *,UBYTE *);
714 extern int NameConflict(int,UBYTE *);
715 extern int OpenFile(char *);
716 extern int OpenAddFile(char *);
717 extern int ReOpenFile(char *);
718 extern int CreateFile(char *);
719 extern int CreateLogFile(char *);
720 extern VOID CloseFile(int);
721 extern int CopyFile(char *, char *);
722 extern int CreateHandle(VOID);
723 extern LONG ReadFile(int,UBYTE *,LONG);
724 extern LONG ReadPosFile(PHEAD FILEHANDLE *,UBYTE *,LONG,POSITION *);
725 extern LONG WriteFileToFile(int,UBYTE *,LONG);
726 extern VOID SeekFile(int,POSITION *,int);
727 extern LONG TellFile(int);
728 extern void FlushFile(int);
729 extern int GetPosFile(int,fpos_t *);
730 extern int SetPosFile(int,fpos_t *);
731 extern VOID SynchFile(int);
732 extern VOID TruncateFile(int);
733 extern int GetChannel(char *);
734 extern int GetAppendChannel(char *);
735 extern int CloseChannel(char *);
736 extern VOID inictable(VOID);
737 extern KEYWORD *findcommand(UBYTE *);
738 extern int inicbufs(VOID);
739 extern VOID StartFiles(VOID);
740 extern UBYTE *MakeDate(VOID);
741 extern VOID PreProcessor(VOID);
742 extern VOID *FromList(LIST *);
743 extern VOID *From0List(LIST *);
744 extern VOID *FromVarList(LIST *);
745 extern int DoubleList(VOID ***,int *,int,char *);
746 extern int DoubleLList(VOID ***,LONG *,int,char *);
747 extern void DoubleBuffer(void **,void **,int,char *);
748 extern void ExpandBuffer(void **,LONG *,int);
749 extern LONG iexp(LONG,int);
750 extern int IsLikeVector(WORD *);
751 extern int AreArgsEqual(WORD *,WORD *);
752 extern int CompareArgs(WORD *,WORD *);
753 extern UBYTE *SkipField(UBYTE *,int);
754 extern int StrCmp(UBYTE *,UBYTE *);
755 extern int StrICmp(UBYTE *,UBYTE *);
756 extern int StrHICmp(UBYTE *,UBYTE *);
757 extern int StrICont(UBYTE *,UBYTE *);
758 extern int ConWord(UBYTE *,UBYTE *);
759 extern int StrLen(UBYTE *);
760 extern UBYTE *GetPreVar(UBYTE *,int);
761 extern void ToGeneral(WORD *,WORD *,WORD);
762 extern WORD ToPolyFunGeneral(PHEAD WORD *);
763 extern int ToFast(WORD *,WORD *);
764 extern SETUPPARAMETERS *GetSetupPar(UBYTE *);
765 extern int RecalcSetups(VOID);
766 extern int AllocSetups(VOID);
767 extern SORTING *AllocSort(LONG,LONG,LONG,LONG,int,int,LONG);
768 extern VOID AllocSortFileName(SORTING *);
769 extern UBYTE *LoadInputFile(UBYTE *,int);
770 extern UBYTE GetInput(VOID);
771 extern VOID ClearPushback(VOID);
772 extern UBYTE GetChar(int);
773 extern VOID CharOut(UBYTE);
774 extern VOID UnsetAllowDelay(VOID);
775 extern VOID PopPreVars(int);
776 extern VOID IniModule(int);
777 extern VOID IniSpecialModule(int);
778 extern int ModuleInstruction(int *,int *);
779 extern int PreProInstruction(VOID);
780 extern int LoadInstruction(int);
781 extern int LoadStatement(int);
782 extern KEYWORD *FindKeyWord(UBYTE *,KEYWORD *,int);
783 extern KEYWORD *FindInKeyWord(UBYTE *,KEYWORD *,int);
784 extern int DoDefine(UBYTE *);
785 extern int DoRedefine(UBYTE *);
786 extern int TheDefine(UBYTE *,int);
787 extern int TheUndefine(UBYTE *);
788 extern int ClearMacro(UBYTE *);
789 extern int DoUndefine(UBYTE *);
790 extern int DoInclude(UBYTE *);
791 extern int DoReverseInclude(UBYTE *);
792 extern int Include(UBYTE *,int);
793 /*[14apr2004 mt]:*/
794 extern int DoExternal(UBYTE *);
795 extern int DoToExternal(UBYTE *);
796 extern int DoFromExternal(UBYTE *);
797 extern int DoPrompt(UBYTE *);
798 extern int DoSetExternal(UBYTE *);
799 /*[10may2006 mt]:*/
800 extern int DoSetExternalAttr(UBYTE *);
801 /*:[10may2006 mt]*/
802 extern int DoRmExternal(UBYTE *);
803 /*:[14apr2004 mt]*/
804 extern int DoFactDollar(UBYTE *);
805 extern WORD GetDollarNumber(UBYTE **,DOLLARS);
806 extern int DoSetRandom(UBYTE *);
807 extern int DoOptimize(UBYTE *);
808 extern int DoClearOptimize(UBYTE *);
809 extern int DoSkipExtraSymbols(UBYTE *);
810 extern int DoMessage(UBYTE *);
811 extern int DoPreOut(UBYTE *);
812 extern int DoPreAppend(UBYTE *);
813 extern int DoPreCreate(UBYTE *);
814 extern int DoPreAssign(UBYTE *);
815 extern int DoPreBreak(UBYTE *);
816 extern int DoPreDefault(UBYTE *);
817 extern int DoPreSwitch(UBYTE *);
818 extern int DoPreEndSwitch(UBYTE *);
819 extern int DoPreCase(UBYTE *);
820 extern int DoPreShow(UBYTE *);
821 extern int DoPreExchange(UBYTE *);
822 extern int DoSystem(UBYTE *);
823 extern int DoPipe(UBYTE *);
824 extern VOID StartPrepro(VOID);
825 extern int DoIfdef(UBYTE *,int);
826 extern int DoElse(UBYTE *);
827 extern int DoElseif(UBYTE *);
828 extern int DoEndif(UBYTE *);
829 extern int DoTerminate(UBYTE *);
830 extern int DoIf(UBYTE *);
831 extern int DoCall(UBYTE *);
832 extern int DoDebug(UBYTE *);
833 extern int DoDo(UBYTE *);
834 extern int DoBreakDo(UBYTE *);
835 extern int DoEnddo(UBYTE *);
836 extern int DoEndprocedure(UBYTE *);
837 extern int DoInside(UBYTE *);
838 extern int DoEndInside(UBYTE *);
839 extern int DoProcedure(UBYTE *);
840 extern int DoPrePrintTimes(UBYTE *);
841 extern int DoPreWrite(UBYTE *);
842 extern int DoPreClose(UBYTE *);
843 extern int DoPreRemove(UBYTE *);
844 extern int DoCommentChar(UBYTE *);
845 extern int DoPrcExtension(UBYTE *);
846 extern int DoPreReset(UBYTE *);
847 extern VOID WriteString(int,UBYTE *,int);
848 extern VOID WriteUnfinString(int,UBYTE *,int);
849 extern UBYTE *AddToString(UBYTE *,UBYTE *,int);
850 extern UBYTE *PreCalc(VOID);
851 extern UBYTE *PreEval(UBYTE *,LONG *);
852 extern VOID NumToStr(UBYTE *,LONG);
853 extern int PreCmp(int,int,UBYTE *,int,int,UBYTE *,int);
854 extern int PreEq(int,int,UBYTE *,int,int,UBYTE *,int);
855 extern UBYTE *pParseObject(UBYTE *,int *,LONG *);
856 extern UBYTE *PreIfEval(UBYTE *,int *);
857 extern int EvalPreIf(UBYTE *);
858 extern int PreLoad(PRELOAD *,UBYTE *,UBYTE *,int,char *);
859 extern int PreSkip(UBYTE *,UBYTE *,int);
860 extern UBYTE *EndOfToken(UBYTE *);
861 extern VOID SetSpecialMode(int,int);
862 extern VOID MakeGlobal(VOID);
863 extern int ExecModule(int);
864 extern int ExecStore(VOID);
865 extern VOID FullCleanUp(VOID);
866 extern int DoExecStatement(VOID);
867 extern int DoPipeStatement(VOID);
868 extern int DoPolyfun(UBYTE *);
869 extern int DoPolyratfun(UBYTE *);
870 extern int CompileStatement(UBYTE *);
871 extern UBYTE *ToToken(UBYTE *);
872 extern int GetDollar(UBYTE *);
873 extern int MesWork(VOID);
874 extern int MesPrint(const char *,...);
875 extern int MesCall(char *);
876 extern UBYTE *NumCopy(WORD,UBYTE *);
877 extern char *LongCopy(LONG,char *);
878 extern char *LongLongCopy(off_t *,char *);
879 extern VOID ReserveTempFiles(int);
880 extern VOID PrintTerm(WORD *,char *);
881 extern VOID PrintTermC(WORD *,char *);
882 extern VOID PrintSubTerm(WORD *,char *);
883 extern VOID PrintWords(WORD *,LONG);
884 extern void PrintSeq(WORD *,char *);
885 extern int ExpandTripleDots(int);
886 extern LONG ComPress(WORD **,LONG *);
887 extern VOID StageSort(FILEHANDLE *);
888 
889 #define M_alloc(x) malloc((size_t)(x))
890 
891 extern void M_free(VOID *,const char *);
892 extern void ClearWildcardNames(VOID);
893 extern int AddWildcardName(UBYTE *);
894 extern int GetWildcardName(UBYTE *);
895 extern void Globalize(int);
896 extern void ResetVariables(int);
897 extern void AddToPreTypes(int);
898 extern void MessPreNesting(int);
899 extern LONG GetStreamPosition(STREAM *);
900 extern WORD *DoubleCbuffer(int,WORD *,int);
901 extern WORD *AddLHS(int);
902 extern WORD *AddRHS(int,int);
903 extern int AddNtoL(int,WORD *);
904 extern int AddNtoC(int,int,WORD *,int);
905 extern VOID DoubleIfBuffers(VOID);
906 extern STREAM *CreateStream(UBYTE *);
907 
908 extern int setonoff(UBYTE *,int *,int,int);
909 extern int DoPrint(UBYTE *,int);
910 extern int SetExpr(UBYTE *,int,int);
911 extern void AddToCom(int,WORD *);
912 extern int Add2ComStrings(int,WORD *,UBYTE *,UBYTE *);
913 extern int DoSymmetrize(UBYTE *,int);
914 extern int DoArgument(UBYTE *,int);
915 extern int ArgFactorize(PHEAD WORD *,WORD *);
916 extern WORD *TakeArgContent(PHEAD WORD *, WORD *);
917 extern WORD *MakeInteger(PHEAD WORD *,WORD *,WORD *);
918 extern WORD *MakeMod(PHEAD WORD *,WORD *,WORD *);
919 extern WORD FindArg(PHEAD WORD *);
920 extern WORD InsertArg(PHEAD WORD *,WORD *,int);
921 extern int CleanupArgCache(PHEAD WORD);
922 extern int ArgSymbolMerge(WORD *, WORD *);
923 extern int ArgDotproductMerge(WORD *, WORD *);
924 extern void SortWeights(LONG *,LONG *,WORD);
925 extern int DoBrackets(UBYTE *,int);
926 extern int DoPutInside(UBYTE *,int);
927 extern WORD *CountComp(UBYTE *,WORD *);
928 extern int CoAntiBracket(UBYTE *);
929 extern int CoAntiSymmetrize(UBYTE *);
930 extern int DoArgPlode(UBYTE *,int);
931 extern int CoArgExplode(UBYTE *);
932 extern int CoArgImplode(UBYTE *);
933 extern int CoArgument(UBYTE *);
934 extern int CoInside(UBYTE *);
935 extern int ExecInside(UBYTE *);
936 extern int CoInExpression(UBYTE *);
937 extern int CoInParallel(UBYTE *);
938 extern int CoNotInParallel(UBYTE *);
939 extern int DoInParallel(UBYTE *,int);
940 extern int CoEndInExpression(UBYTE *);
941 extern int CoBracket(UBYTE *);
942 extern int CoPutInside(UBYTE *);
943 extern int CoAntiPutInside(UBYTE *);
944 extern int CoMultiBracket(UBYTE *);
945 extern int CoCFunction(UBYTE *);
946 extern int CoCTensor(UBYTE *);
947 extern int CoCollect(UBYTE *);
948 extern int CoCompress(UBYTE *);
949 extern int CoContract(UBYTE *);
950 extern int CoCycleSymmetrize(UBYTE *);
951 extern int CoDelete(UBYTE *);
952 extern int CoTableBase(UBYTE *);
953 extern int CoApply(UBYTE *);
954 extern int CoDenominators(UBYTE *);
955 extern int CoDimension(UBYTE *);
956 extern int CoDiscard(UBYTE *);
957 extern int CoDisorder(UBYTE *);
958 extern int CoDrop(UBYTE *);
959 extern int CoDropCoefficient(UBYTE *);
960 extern int CoDropSymbols(UBYTE *);
961 extern int CoElse(UBYTE *);
962 extern int CoElseIf(UBYTE *);
963 extern int CoEndArgument(UBYTE *);
964 extern int CoEndInside(UBYTE *);
965 extern int CoEndIf(UBYTE *);
966 extern int CoEndRepeat(UBYTE *);
967 extern int CoEndTerm(UBYTE *);
968 extern int CoEndWhile(UBYTE *);
969 extern int CoExit(UBYTE *);
970 extern int CoFactArg(UBYTE *);
971 extern int CoFactDollar(UBYTE *);
972 extern int CoFactorize(UBYTE *);
973 extern int CoNFactorize(UBYTE *);
974 extern int CoUnFactorize(UBYTE *);
975 extern int CoNUnFactorize(UBYTE *);
976 extern int DoFactorize(UBYTE *,int);
977 extern int CoFill(UBYTE *);
978 extern int CoFillExpression(UBYTE *);
979 extern int CoFixIndex(UBYTE *);
980 extern int CoFormat(UBYTE *);
981 extern int CoGlobal(UBYTE *);
982 extern int CoGlobalFactorized(UBYTE *);
983 extern int CoGoTo(UBYTE *);
984 extern int CoId(UBYTE *);
985 extern int CoIdNew(UBYTE *);
986 extern int CoIdOld(UBYTE *);
987 extern int CoIf(UBYTE *);
988 extern int CoIfMatch(UBYTE *);
989 extern int CoIfNoMatch(UBYTE *);
990 extern int CoIndex(UBYTE *);
991 extern int CoInsideFirst(UBYTE *);
992 extern int CoKeep(UBYTE *);
993 extern int CoLabel(UBYTE *);
994 extern int CoLoad(UBYTE *);
995 extern int CoLocal(UBYTE *);
996 extern int CoLocalFactorized(UBYTE *);
997 extern int CoMany(UBYTE *);
998 extern int CoMerge(UBYTE *);
999 extern int CoStuffle(UBYTE *);
1000 extern int CoMetric(UBYTE *);
1001 extern int CoModOption(UBYTE *);
1002 extern int CoModuleOption(UBYTE *);
1003 extern int CoModulus(UBYTE *);
1004 extern int CoMulti(UBYTE *);
1005 extern int CoMultiply(UBYTE *);
1006 extern int CoNFunction(UBYTE *);
1007 extern int CoNPrint(UBYTE *);
1008 extern int CoNTensor(UBYTE *);
1009 extern int CoNWrite(UBYTE *);
1010 extern int CoNoDrop(UBYTE *);
1011 extern int CoNoSkip(UBYTE *);
1012 extern int CoNormalize(UBYTE *);
1013 extern int CoMakeInteger(UBYTE *);
1014 extern int CoFlags(UBYTE *,int);
1015 extern int CoOff(UBYTE *);
1016 extern int CoOn(UBYTE *);
1017 extern int CoOnce(UBYTE *);
1018 extern int CoOnly(UBYTE *);
1019 extern int CoOptimizeOption(UBYTE *);
1020 extern int CoOptimize(UBYTE *);
1021 extern int CoPolyFun(UBYTE *);
1022 extern int CoPolyRatFun(UBYTE *);
1023 extern int CoPrint(UBYTE *);
1024 extern int CoPrintB(UBYTE *);
1025 extern int CoProperCount(UBYTE *);
1026 extern int CoUnitTrace(UBYTE *);
1027 extern int CoRCycleSymmetrize(UBYTE *);
1028 extern int CoRatio(UBYTE *);
1029 extern int CoRedefine(UBYTE *);
1030 extern int CoRenumber(UBYTE *);
1031 extern int CoRepeat(UBYTE *);
1032 extern int CoSave(UBYTE *);
1033 extern int CoSelect(UBYTE *);
1034 extern int CoSet(UBYTE *);
1035 extern int CoSetExitFlag(UBYTE *);
1036 extern int CoSkip(UBYTE *);
1037 extern int CoProcessBucket(UBYTE *);
1038 extern int CoPushHide(UBYTE *);
1039 extern int CoPopHide(UBYTE *);
1040 extern int CoHide(UBYTE *);
1041 extern int CoIntoHide(UBYTE *);
1042 extern int CoNoHide(UBYTE *);
1043 extern int CoUnHide(UBYTE *);
1044 extern int CoNoUnHide(UBYTE *);
1045 extern int CoSort(UBYTE *);
1046 extern int CoSplitArg(UBYTE *);
1047 extern int CoSplitFirstArg(UBYTE *);
1048 extern int CoSplitLastArg(UBYTE *);
1049 extern int CoSum(UBYTE *);
1050 extern int CoSymbol(UBYTE *);
1051 extern int CoSymmetrize(UBYTE *);
1052 extern int DoTable(UBYTE *,int);
1053 extern int CoTable(UBYTE *);
1054 extern int CoTerm(UBYTE *);
1055 extern int CoNTable(UBYTE *);
1056 extern int CoCTable(UBYTE *);
1057 extern void EmptyTable(TABLES);
1058 extern int CoToTensor(UBYTE *);
1059 extern int CoToVector(UBYTE *);
1060 extern int CoTrace4(UBYTE *);
1061 extern int CoTraceN(UBYTE *);
1062 extern int CoChisholm(UBYTE *);
1063 extern int CoTransform(UBYTE *);
1064 extern int CoClearTable(UBYTE *);
1065 extern int DoChain(UBYTE *,int);
1066 extern int CoChainin(UBYTE *);
1067 extern int CoChainout(UBYTE *);
1068 extern int CoTryReplace(UBYTE *);
1069 extern int CoVector(UBYTE *);
1070 extern int CoWhile(UBYTE *);
1071 extern int CoWrite(UBYTE *);
1072 extern int CoAuto(UBYTE *);
1073 extern int CoTBaddto(UBYTE *);
1074 extern int CoTBaudit(UBYTE *);
1075 extern int CoTBcleanup(UBYTE *);
1076 extern int CoTBcreate(UBYTE *);
1077 extern int CoTBenter(UBYTE *);
1078 extern int CoTBhelp(UBYTE *);
1079 extern int CoTBload(UBYTE *);
1080 extern int CoTBoff(UBYTE *);
1081 extern int CoTBon(UBYTE *);
1082 extern int CoTBopen(UBYTE *);
1083 extern int CoTBreplace(UBYTE *);
1084 extern int CoTBuse(UBYTE *);
1085 extern int CoTestUse(UBYTE *);
1086 extern int CoThreadBucket(UBYTE *);
1087 extern int AddComString(int,WORD *,UBYTE *,int);
1088 extern int CompileAlgebra(UBYTE *,int,WORD *);
1089 extern int IsIdStatement(UBYTE *);
1090 extern UBYTE *IsRHS(UBYTE *,UBYTE);
1091 extern int ParenthesesTest(UBYTE *);
1092 extern int tokenize(UBYTE *,WORD);
1093 extern void WriteTokens(SBYTE *);
1094 extern int simp1token(SBYTE *);
1095 extern int simpwtoken(SBYTE *);
1096 extern int simp2token(SBYTE *);
1097 extern int simp3atoken(SBYTE *,int);
1098 extern int simp3btoken(SBYTE *,int);
1099 extern int simp4token(SBYTE *);
1100 extern int simp5token(SBYTE *,int);
1101 extern int simp6token(SBYTE *,int);
1102 extern UBYTE *SkipAName(UBYTE *);
1103 extern int TestTables(VOID);
1104 extern int GetLabel(UBYTE *);
1105 extern int CoIdExpression(UBYTE *,int);
1106 extern int CoAssign(UBYTE *);
1107 extern int DoExpr(UBYTE *,int,int);
1108 extern int CompileSubExpressions(SBYTE *);
1109 extern int CodeGenerator(SBYTE *);
1110 extern int CompleteTerm(WORD *,UWORD *,UWORD *,WORD,WORD,int);
1111 extern int CodeFactors(SBYTE *s);
1112 extern WORD GenerateFactors(WORD,WORD);
1113 extern int InsTree(int,int);
1114 extern int FindTree(int,WORD *);
1115 extern void RedoTree(CBUF *,int);
1116 extern void ClearTree(int);
1117 extern int CatchDollar(int);
1118 extern int AssignDollar(PHEAD WORD *,WORD);
1119 extern UBYTE *WriteDollarToBuffer(WORD,WORD);
1120 extern UBYTE *WriteDollarFactorToBuffer(WORD,WORD,WORD);
1121 extern void AddToDollarBuffer(UBYTE *);
1122 extern void TermAssign(WORD *);
1123 extern void WildDollars(PHEAD WORD *);
1124 extern LONG numcommute(WORD *,LONG *);
1125 extern int FullRenumber(PHEAD WORD *,WORD);
1126 extern int Lus(WORD *,WORD,WORD,WORD,WORD,WORD);
1127 extern int FindLus(int,int,int);
1128 extern int CoReplaceLoop(UBYTE *);
1129 extern int CoFindLoop(UBYTE *);
1130 extern int DoFindLoop(UBYTE *,int);
1131 extern int CoFunPowers(UBYTE *);
1132 extern int SortTheList(int *,int);
1133 extern int MatchIsPossible(WORD *,WORD *);
1134 extern int StudyPattern(WORD *);
1135 extern WORD DolToTensor(PHEAD WORD);
1136 extern WORD DolToFunction(PHEAD WORD);
1137 extern WORD DolToVector(PHEAD WORD);
1138 extern WORD DolToNumber(PHEAD WORD);
1139 extern WORD DolToSymbol(PHEAD WORD);
1140 extern WORD DolToIndex(PHEAD WORD);
1141 extern LONG DolToLong(PHEAD WORD);
1142 extern int DollarFactorize(PHEAD WORD);
1143 extern int CoPrintTable(UBYTE *);
1144 extern int CoDeallocateTable(UBYTE *);
1145 extern void CleanDollarFactors(DOLLARS);
1146 extern WORD *TakeDollarContent(PHEAD WORD *,WORD **);
1147 extern WORD *MakeDollarInteger(PHEAD WORD *,WORD **);
1148 extern WORD *MakeDollarMod(PHEAD WORD *,WORD **);
1149 extern int GetDolNum(PHEAD WORD *, WORD *);
1150 extern void AddPotModdollar(WORD);
1151 
1152 extern int Optimize(WORD, int);
1153 extern int ClearOptimize(VOID);
1154 extern int LoadOpti(WORD);
1155 extern int PutObject(WORD *,int);
1156 extern void CleanOptiBuffer(VOID);
1157 extern int PrintOptima(WORD);
1158 extern int FindScratchName(VOID);
1159 extern WORD MaxPowerOpti(LONG);
1160 extern WORD HuntNumFactor(LONG,WORD *,int);
1161 extern WORD HuntFactor(LONG,WORD *,int);
1162 extern void HuntPairs(LONG,WORD);
1163 extern void HuntBrackets(LONG);
1164 extern int AddToOpti(WORD *,int);
1165 extern LONG TestNewSca(LONG,WORD *,WORD *);
1166 extern void NormOpti(WORD *);
1167 extern void SortOpti(LONG);
1168 extern void SplitOpti(WORD **,LONG);
1169 extern void CombiOpti(VOID);
1170 extern int TakeLongRoot(UWORD *,WORD *,WORD);
1171 extern int TakeRatRoot(UWORD *,WORD *,WORD);
1172 extern int MakeRational(WORD ,WORD , WORD *, WORD *);
1173 extern int MakeLongRational(PHEAD UWORD *,WORD ,UWORD *,WORD ,UWORD *,WORD *);
1174 extern void HuntPowers(LONG,WORD);
1175 extern void HuntNumBrackets(LONG);
1176 extern void ClearTableTree(TABLES);
1177 extern int InsTableTree(TABLES,WORD *);
1178 extern void RedoTableTree(TABLES,int);
1179 extern int FindTableTree(TABLES,WORD *,int);
1180 extern void finishcbuf(WORD);
1181 extern void clearcbuf(WORD);
1182 extern void CleanUpSort(int);
1183 extern FILEHANDLE *AllocFileHandle(WORD,char *);
1184 extern VOID DeAllocFileHandle(FILEHANDLE *);
1185 extern VOID LowerSortLevel(VOID);
1186 extern WORD *PolyRatFunSpecial(PHEAD WORD *, WORD *);
1187 extern int InsideDollar(PHEAD WORD *,WORD);
1188 extern DOLLARS DolToTerms(PHEAD WORD);
1189 extern WORD EvalDoLoopArg(PHEAD WORD *,WORD);
1190 extern int SetExprCases(int,int,int);
1191 extern int TestSelect(WORD *,WORD *);
1192 extern VOID SubsInAll(PHEAD0);
1193 extern VOID TransferBuffer(int,int,int);
1194 extern int TakeIDfunction(PHEAD WORD *);
1195 extern int MakeSetupAllocs(VOID);
1196 extern int TryFileSetups(VOID);
1197 extern void ExchangeExpressions(int,int);
1198 extern void ExchangeDollars(int,int);
1199 extern int GetFirstBracket(WORD *,int);
1200 extern int GetFirstTerm(WORD *,int);
1201 extern int GetContent(WORD *,int);
1202 extern int CleanupTerm(WORD *);
1203 extern WORD ContentMerge(PHEAD WORD *,WORD *);
1204 extern UBYTE *PreIfDollarEval(UBYTE *,int *);
1205 extern LONG TermsInDollar(WORD);
1206 extern LONG TermsInExpression(WORD);
1207 extern WORD *TranslateExpression(UBYTE *);
1208 extern int IsSetMember(WORD *,WORD);
1209 extern int IsMultipleOf(WORD *,WORD *);
1210 extern int TwoExprCompare(WORD *,WORD *,int);
1211 extern void UpdatePositions(VOID);
1212 extern void M_check(VOID);
1213 extern void M_print(VOID);
1214 extern void M_check1(VOID);
1215 extern void PrintTime(VOID);
1216 
1217 extern POSITION *FindBracket(WORD,WORD *);
1218 extern VOID PutBracketInIndex(PHEAD WORD *,POSITION *);
1219 extern void ClearBracketIndex(WORD);
1220 extern VOID OpenBracketIndex(WORD);
1221 extern int DoNoParallel(UBYTE *);
1222 extern int DoParallel(UBYTE *);
1223 extern int DoModSum(UBYTE *);
1224 extern int DoModMax(UBYTE *);
1225 extern int DoModMin(UBYTE *);
1226 extern int DoModLocal(UBYTE *);
1227 extern UBYTE *DoModDollar(UBYTE *,int);
1228 extern int DoProcessBucket(UBYTE *);
1229 extern int DoinParallel(UBYTE *);
1230 extern int DonotinParallel(UBYTE *);
1231 
1232 extern int FlipTable(FUNCTIONS,int);
1233 extern int ChainIn(PHEAD WORD *,WORD);
1234 extern int ChainOut(PHEAD WORD *,WORD);
1235 extern int ArgumentImplode(PHEAD WORD *,WORD *);
1236 extern int ArgumentExplode(PHEAD WORD *,WORD *);
1237 extern int DenToFunction(WORD *,WORD);
1238 
1239 extern WORD HowMany(PHEAD WORD *,WORD *);
1240 extern VOID RemoveDollars(VOID);
1241 extern LONG CountTerms1(PHEAD0);
1242 extern LONG TermsInBracket(PHEAD WORD *,WORD);
1243 extern int Crash(VOID);
1244 
1245 extern char *str_dup(char *);
1246 extern void convertblock(INDEXBLOCK *,INDEXBLOCK *,int);
1247 extern void convertnamesblock(NAMESBLOCK *,NAMESBLOCK *,int);
1248 extern void convertiniinfo(INIINFO *,INIINFO *,int);
1249 extern int ReadIndex(DBASE *);
1250 extern int WriteIndexBlock(DBASE *,MLONG);
1251 extern int WriteNamesBlock(DBASE *,MLONG);
1252 extern int WriteIndex(DBASE *);
1253 extern int WriteIniInfo(DBASE *);
1254 extern int ReadIniInfo(DBASE *);
1255 extern int AddToIndex(DBASE *,MLONG);
1256 extern DBASE *GetDbase(char *);
1257 extern DBASE *OpenDbase(char *);
1258 extern char *ReadObject(DBASE *,MLONG,char *);
1259 extern char *ReadijObject(DBASE *,MLONG,MLONG,char *);
1260 extern int ExistsObject(DBASE *,MLONG,char *);
1261 extern int DeleteObject(DBASE *,MLONG,char *);
1262 extern int WriteObject(DBASE *,MLONG,char *,char *,MLONG);
1263 extern MLONG AddObject(DBASE *,MLONG,char *,char *);
1264 extern int Cleanup(DBASE *);
1265 extern DBASE *NewDbase(char *,MLONG);
1266 extern void FreeTableBase(DBASE *);
1267 extern int ComposeTableNames(DBASE *);
1268 extern int PutTableNames(DBASE *);
1269 extern MLONG AddTableName(DBASE *,char *,TABLES);
1270 extern MLONG GetTableName(DBASE *,char *);
1271 extern MLONG FindTableNumber(DBASE *,char *);
1272 extern int TryEnvironment(VOID);
1273 
1274 #ifdef WITHZLIB
1275 extern int SetupOutputGZIP(FILEHANDLE *);
1276 extern int PutOutputGZIP(FILEHANDLE *);
1277 extern int FlushOutputGZIP(FILEHANDLE *);
1278 extern int SetupAllInputGZIP(SORTING *);
1279 extern LONG FillInputGZIP(FILEHANDLE *,POSITION *,UBYTE *,LONG,int);
1280 #endif
1281 
1282 #ifdef WITHPTHREADS
1283 extern VOID BeginIdentities(VOID);
1284 extern int WhoAmI(VOID);
1285 extern int StartAllThreads(int);
1286 extern void StartHandleLock(VOID);
1287 extern VOID TerminateAllThreads(VOID);
1288 extern int GetAvailableThread(VOID);
1289 extern int ConditionalGetAvailableThread(VOID);
1290 extern int BalanceRunThread(PHEAD int,WORD *,WORD);
1291 extern void WakeupThread(int,int);
1292 extern int MasterWait(VOID);
1293 extern int InParallelProcessor(VOID);
1294 extern int ThreadsProcessor(EXPRESSIONS,WORD,WORD);
1295 extern int MasterMerge(VOID);
1296 extern int PutToMaster(PHEAD WORD *);
1297 extern void SetWorkerFiles(VOID);
1298 extern int MakeThreadBuckets(int,int);
1299 extern int SendOneBucket(int);
1300 extern int LoadOneThread(int,int,THREADBUCKET *,int);
1301 extern void *RunSortBot(void *);
1302 extern void MasterWaitAllSortBots(VOID);
1303 extern int SortBotMerge(PHEAD0);
1304 extern int SortBotOut(PHEAD WORD *);
1305 extern void DefineSortBotTree(VOID);
1306 extern int SortBotMasterMerge(VOID);
1307 extern int SortBotWait(int);
1308 extern void StartIdentity(VOID);
1309 extern void FinishIdentity(void *);
1310 extern int SetIdentity(int *);
1311 extern ALLPRIVATES *InitializeOneThread(int);
1312 extern void FinalizeOneThread(int);
1313 extern void ClearAllThreads(VOID);
1314 extern void *RunThread(void *);
1315 extern void IAmAvailable(int);
1316 extern int ThreadWait(int);
1317 extern int ThreadClaimedBlock(int);
1318 extern int GetThread(int);
1319 extern int UpdateOneThread(int);
1320 extern void MasterWaitAll(VOID);
1321 extern void MasterWaitAllBlocks(VOID);
1322 extern int MasterWaitThread(int);
1323 extern void WakeupMasterFromThread(int,int);
1324 extern int LoadReadjusted(VOID);
1325 extern int IniSortBlocks(int);
1326 extern int TreatIndexEntry(PHEAD LONG);
1327 extern WORD GetTerm2(PHEAD WORD *);
1328 extern void SetHideFiles(VOID);
1329 
1330 #endif
1331 
1332 extern int CopyExpression(FILEHANDLE *,FILEHANDLE *);
1333 
1334 extern int set_in(UBYTE, set_of_char);
1335 extern one_byte set_set(UBYTE, set_of_char);
1336 extern one_byte set_del(UBYTE, set_of_char);
1337 extern one_byte set_sub (set_of_char, set_of_char, set_of_char);
1338 extern int DoPreAddSeparator(UBYTE *);
1339 extern int DoPreRmSeparator(UBYTE *);
1340 
1341 /*See the file extcmd.c*/
1342 extern int openExternalChannel(UBYTE *,int,UBYTE *,UBYTE *);
1343 extern int initPresetExternalChannels(UBYTE *, int);
1344 extern int closeExternalChannel(int);
1345 extern int selectExternalChannel(int);
1346 extern int getCurrentExternalChannel(VOID);
1347 extern VOID closeAllExternalChannels(VOID);
1348 
1349 typedef int (*WRITEBUFTOEXTCHANNEL)(char *,size_t);
1350 typedef int (*GETCFROMEXTCHANNEL)(VOID);
1351 typedef int (*SETTERMINATORFOREXTERNALCHANNEL)(char *);
1352 typedef int (*SETKILLMODEFOREXTERNALCHANNEL)(int,int);
1353 typedef LONG (*WRITEFILE)(int,UBYTE *,LONG);
1354 typedef WORD (*COMPARE)(PHEAD WORD *,WORD *,WORD);
1355 typedef WORD (*GETTERM)(PHEAD WORD *);
1356 typedef WORD (*FINISHUFFLE)(PHEAD WORD *);
1357 typedef WORD (*DO_UFFLE)(PHEAD WORD *,WORD,WORD,WORD);
1358 
1359 #define CompareTerms ((COMPARE)AR.CompareRoutine)
1360 #define FiniShuffle ((FINISHUFFLE)AN.SHvar.finishuf)
1361 #define DoShtuffle ((DO_UFFLE)AN.SHvar.do_uffle)
1362 
1363 extern UBYTE *defineChannel(UBYTE*, HANDLERS*);
1364 extern int writeToChannel(int,UBYTE *,HANDLERS*);
1365 #ifdef WITHEXTERNALCHANNEL
1366 extern LONG WriteToExternalChannel(int,UBYTE *,LONG);
1367 #endif
1368 extern int writeBufToExtChannelOk(char *,size_t);
1369 extern int getcFromExtChannelOk(VOID);
1370 extern int setKillModeForExternalChannelOk(int,int);
1371 extern int setTerminatorForExternalChannelOk(char *);
1372 extern int getcFromExtChannelFailure(VOID);
1373 extern int setKillModeForExternalChannelFailure(int,int);
1374 extern int setTerminatorForExternalChannelFailure(char *);
1375 extern int writeBufToExtChannelFailure(char *,size_t);
1376 
1377 extern int ReleaseTB(VOID);
1378 
1379 extern int SymbolNormalize(WORD *);
1380 extern int TestFunFlag(PHEAD WORD *);
1381 extern int CompareSymbols(PHEAD WORD *,WORD *,WORD);
1382 extern int CompareHSymbols(PHEAD WORD *,WORD *,WORD);
1383 extern WORD NextPrime(PHEAD WORD);
1384 extern UWORD wranf(PHEAD0);
1385 extern UWORD iranf(PHEAD UWORD);
1386 extern void iniwranf(PHEAD0);
1387 extern UBYTE *PreRandom(UBYTE *);
1388 
1389 extern WORD *PolyNormPoly (PHEAD WORD);
1390 extern WORD *EvaluateGcd(PHEAD WORD *);
1391 extern int TreatPolyRatFun(PHEAD WORD *);
1392 
1393 extern WORD ReadSaveHeader(VOID);
1394 extern WORD ReadSaveIndex(FILEINDEX *);
1395 extern WORD ReadSaveExpression(UBYTE *,UBYTE *,LONG *,LONG *);
1396 extern UBYTE *ReadSaveTerm32(UBYTE *,UBYTE *,UBYTE **,UBYTE *,UBYTE *,int);
1397 extern WORD ReadSaveVariables(UBYTE *,UBYTE *,LONG *,LONG *,INDEXENTRY *,LONG *);
1398 extern WORD WriteStoreHeader(WORD);
1399 
1400 extern void InitRecovery(VOID);
1401 extern int CheckRecoveryFile(VOID);
1402 extern void DeleteRecoveryFile(VOID);
1403 extern char *RecoveryFilename(VOID);
1404 extern int DoRecovery(int *);
1405 extern void DoCheckpoint(int);
1406 
1407 extern VOID NumberMallocAddMemory(PHEAD0);
1408 extern VOID CacheNumberMallocAddMemory(PHEAD0);
1409 extern VOID TermMallocAddMemory(PHEAD0);
1410 #ifndef MEMORYMACROS
1411 extern WORD *TermMalloc2(PHEAD char *text);
1412 extern VOID TermFree2(PHEAD WORD *term,char *text);
1413 extern UWORD *NumberMalloc2(PHEAD char *text);
1414 extern UWORD *CacheNumberMalloc2(PHEAD char *text);
1415 extern VOID NumberFree2(PHEAD UWORD *NumberMem,char *text);
1416 extern VOID CacheNumberFree2(PHEAD UWORD *NumberMem,char *text);
1417 #endif
1418 
1419 extern void ExprStatus(EXPRESSIONS);
1420 extern VOID iniTools(VOID);
1421 extern int TestTerm(WORD *);
1422 
1423 extern WORD RunTransform(PHEAD WORD *term, WORD *params);
1424 extern WORD RunEncode(PHEAD WORD *fun, WORD *args, WORD *info);
1425 extern WORD RunDecode(PHEAD WORD *fun, WORD *args, WORD *info);
1426 extern WORD RunReplace(PHEAD WORD *fun, WORD *args, WORD *info);
1427 extern WORD RunImplode(WORD *fun, WORD *args);
1428 extern WORD RunExplode(PHEAD WORD *fun, WORD *args);
1429 extern int TestArgNum(int n, int totarg, WORD *args);
1430 extern WORD PutArgInScratch(WORD *arg,UWORD *scrat);
1431 extern UBYTE *ReadRange(UBYTE *s, WORD *out, int par);
1432 extern int FindRange(PHEAD WORD *,WORD *,WORD *,WORD);
1433 extern WORD RunPermute(PHEAD WORD *fun, WORD *args, WORD *info);
1434 extern WORD RunReverse(PHEAD WORD *fun, WORD *args);
1435 extern WORD RunCycle(PHEAD WORD *fun, WORD *args, WORD *info);
1436 extern WORD RunAddArg(PHEAD WORD *fun, WORD *args);
1437 extern WORD RunMulArg(PHEAD WORD *fun, WORD *args);
1438 extern WORD RunIsLyndon(PHEAD WORD *fun, WORD *args, int par);
1439 extern WORD RunToLyndon(PHEAD WORD *fun, WORD *args, int par);
1440 extern WORD RunDropArg(PHEAD WORD *fun, WORD *args);
1441 extern WORD RunSelectArg(PHEAD WORD *fun, WORD *args);
1442 extern WORD RunDedup(PHEAD WORD *fun, WORD *args);
1443 
1444 extern int NormPolyTerm(PHEAD WORD *);
1445 extern WORD ComparePoly(WORD *, WORD *, WORD);
1446 extern int ConvertToPoly(PHEAD WORD *, WORD *,WORD *,WORD);
1447 extern int LocalConvertToPoly(PHEAD WORD *, WORD *, WORD,WORD);
1448 extern int ConvertFromPoly(PHEAD WORD *, WORD *, WORD, WORD, WORD, WORD);
1449 extern WORD FindSubterm(WORD *);
1450 extern WORD FindLocalSubterm(PHEAD WORD *, WORD);
1451 extern void PrintSubtermList(int,int);
1452 extern void PrintExtraSymbol(int,WORD *,int);
1453 extern WORD FindSubexpression(WORD *);
1454 
1455 extern void UpdateMaxSize(VOID);
1456 
1457 extern int CoToPolynomial(UBYTE *);
1458 extern int CoFromPolynomial(UBYTE *);
1459 extern int CoArgToExtraSymbol(UBYTE *);
1460 extern int CoExtraSymbols(UBYTE *);
1461 extern UBYTE *GetDoParam(UBYTE *, WORD **, int);
1462 extern WORD *GetIfDollarFactor(UBYTE **, WORD *);
1463 extern int CoDo(UBYTE *);
1464 extern int CoEndDo(UBYTE *);
1465 extern int ExtraSymFun(PHEAD WORD *,WORD);
1466 extern int PruneExtraSymbols(WORD);
1467 extern int IniFbuffer(WORD);
1468 extern void IniFbufs(VOID);
1469 extern int GCDfunction(PHEAD WORD *,WORD);
1470 extern WORD *GCDfunction3(PHEAD WORD *,WORD *);
1471 extern WORD *GCDfunction4(PHEAD WORD *,WORD *);
1472 extern int ReadPolyRatFun(PHEAD WORD *);
1473 extern int FromPolyRatFun(PHEAD WORD *, WORD **, WORD **);
1474 extern void PRFnormalize(PHEAD WORD *);
1475 extern WORD *PRFadd(PHEAD WORD *, WORD *);
1476 extern WORD *PolyDiv(PHEAD WORD *,WORD *,char *);
1477 extern WORD *PolyGCD(PHEAD WORD *,WORD *);
1478 extern WORD *PolyAdd(PHEAD WORD *,WORD *);
1479 extern void GCDclean(PHEAD WORD *, WORD *);
1480 extern int RatFunNormalize(PHEAD WORD *);
1481 extern WORD *TakeSymbolContent(PHEAD WORD *,WORD *);
1482 extern int GCDterms(PHEAD WORD *,WORD *,WORD *);
1483 extern WORD *PutExtraSymbols(PHEAD WORD *,WORD,int *);
1484 extern WORD *TakeExtraSymbols(PHEAD WORD *,WORD);
1485 extern WORD *MultiplyWithTerm(PHEAD WORD *, WORD *,WORD);
1486 extern WORD *TakeContent(PHEAD WORD *, WORD *);
1487 extern int MergeSymbolLists(PHEAD WORD *, WORD *, int);
1488 extern int MergeDotproductLists(PHEAD WORD *, WORD *, int);
1489 extern WORD *CreateExpression(PHEAD WORD);
1490 extern int DIVfunction(PHEAD WORD *,WORD,int);
1491 extern WORD *MULfunc(PHEAD WORD *, WORD *);
1492 extern WORD *ConvertArgument(PHEAD WORD *,int *);
1493 extern int ExpandRat(PHEAD WORD *);
1494 extern int InvPoly(PHEAD WORD *,WORD,WORD);
1495 extern WORD TestDoLoop(PHEAD WORD *,WORD);
1496 extern WORD TestEndDoLoop(PHEAD WORD *,WORD);
1497 
1498 extern WORD *poly_gcd(PHEAD WORD *, WORD *, WORD);
1499 extern WORD *poly_div(PHEAD WORD *, WORD *, WORD);
1500 extern WORD *poly_rem(PHEAD WORD *, WORD *, WORD);
1501 extern WORD *poly_inverse(PHEAD WORD *, WORD *);
1502 extern WORD *poly_mul(PHEAD WORD *, WORD *);
1503 extern WORD *poly_ratfun_add(PHEAD WORD *, WORD *);
1504 extern int poly_ratfun_normalize(PHEAD WORD *);
1505 extern int poly_factorize_argument(PHEAD WORD *, WORD *);
1506 extern WORD *poly_factorize_dollar(PHEAD WORD *);
1507 extern int poly_factorize_expression(EXPRESSIONS);
1508 extern int poly_unfactorize_expression(EXPRESSIONS);
1509 extern void poly_free_poly_vars(PHEAD const char *);
1510 
1511 extern VOID optimize_print_code (int);
1512 
1513 #ifdef WITHPTHREADS
1514 extern void find_Horner_MCTS_expand_tree();
1515 extern void find_Horner_MCTS_expand_tree_threaded();
1516 extern void optimize_expression_given_Horner();
1517 extern void optimize_expression_given_Horner_threaded();
1518 #endif
1519 
1520 extern int DoPreAdd(UBYTE *s);
1521 extern int DoPreUseDictionary(UBYTE *s);
1522 extern int DoPreCloseDictionary(UBYTE *s);
1523 extern int DoPreOpenDictionary(UBYTE *s);
1524 extern void RemoveDictionary(DICTIONARY *dict);
1525 extern void UnSetDictionary(VOID);
1526 extern int SetDictionaryOptions(UBYTE *options);
1527 extern int SelectDictionary(UBYTE *name,UBYTE *options);
1528 extern int AddToDictionary(DICTIONARY *dict,UBYTE *left,UBYTE *right);
1529 extern int AddDictionary(UBYTE *name);
1530 extern int FindDictionary(UBYTE *name);
1531 extern int IsExponentSign(VOID);
1532 extern int IsMultiplySign(VOID);
1533 extern VOID TransformRational(UWORD *a, WORD na);
1534 extern void WriteDictionary(DICTIONARY *);
1535 extern void ShrinkDictionary(DICTIONARY *);
1536 extern void MultiplyToLine(VOID);
1537 extern UBYTE *FindSymbol(WORD num);
1538 extern UBYTE *FindVector(WORD num);
1539 extern UBYTE *FindIndex(WORD num);
1540 extern UBYTE *FindFunction(WORD num);
1541 extern UBYTE *FindFunWithArgs(WORD *t);
1542 extern UBYTE *FindExtraSymbol(WORD num);
1543 extern LONG DictToBytes(DICTIONARY *dict,UBYTE *buf);
1544 extern DICTIONARY *DictFromBytes(UBYTE *buf);
1545 extern int CoCreateSpectator(UBYTE *inp);
1546 extern int CoToSpectator(UBYTE *inp);
1547 extern int CoRemoveSpectator(UBYTE *inp);
1548 extern int CoEmptySpectator(UBYTE *inp);
1549 extern int CoCopySpectator(UBYTE *inp);
1550 extern int PutInSpectator(WORD *,WORD);
1551 extern void ClearSpectators(WORD);
1552 extern WORD GetFromSpectator(WORD *,WORD);
1553 extern void FlushSpectators(VOID);
1554 
1555 extern WORD *PreGCD(PHEAD WORD *, WORD *,int);
1556 extern WORD *FindCommonVariables(PHEAD int,int);
1557 extern VOID AddToSymbolList(PHEAD WORD);
1558 extern int AddToListPoly(PHEAD0);
1559 extern int InvPoly(PHEAD WORD *,WORD,WORD);
1560 
1561 extern int ReadFromScratch(FILEHANDLE *,POSITION *,UBYTE *,POSITION *);
1562 extern int AddToScratch(FILEHANDLE *,POSITION *,UBYTE *,POSITION *,int);
1563 
1564 extern int DoPreAppendPath(UBYTE *);
1565 extern int DoPrePrependPath(UBYTE *);
1566 
1567 /*
1568  #] Declarations :
1569 */
1570 #endif
int NormalModulus(UWORD *, WORD *)
Definition: reken.c:1393
WORD ReadSaveIndex(FILEINDEX *)
Definition: store.c:4137
void DeleteRecoveryFile()
Definition: checkpoint.c:333
void AddPotModdollar(WORD)
Definition: dollar.c:3865
VOID AddArgs(PHEAD WORD *, WORD *, WORD *)
Definition: sort.c:2224
char * RecoveryFilename()
Definition: checkpoint.c:364
WORD FindArg(PHEAD WORD *)
Definition: argument.c:2463
WORD * TakeSymbolContent(PHEAD WORD *, WORD *)
Definition: ratio.c:2434
Definition: minos.h:82
int PutPreVar(UBYTE *, UBYTE *, UBYTE *, int)
Definition: pre.c:638
WORD * AddLHS(int)
Definition: comtool.c:188
WORD AddCoef(PHEAD WORD **, WORD **)
Definition: sort.c:1935
void DoCheckpoint(int)
Definition: checkpoint.c:3102
Definition: structs.h:485
UBYTE * ReadSaveTerm32(UBYTE *, UBYTE *, UBYTE **, UBYTE *, UBYTE *, int)
Definition: store.c:4683
Definition: structs.h:620
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:510
WORD InFunction(PHEAD WORD *, WORD *)
Definition: proces.c:1969
WORD PrepPoly(PHEAD WORD *, WORD)
Definition: proces.c:4653
int SymbolNormalize(WORD *)
Definition: normal.c:4979
WORD * DoubleCbuffer(int, WORD *, int)
Definition: comtool.c:143
WORD PolyFunMul(PHEAD WORD *)
Definition: proces.c:5035
WORD TermRenumber(WORD *, RENUMBER, WORD)
Definition: store.c:2407
int CleanupArgCache(PHEAD WORD)
Definition: argument.c:2522
VOID SplitMerge(PHEAD WORD **, LONG)
Definition: sort.c:3207
WORD * TakeArgContent(PHEAD WORD *, WORD *)
Definition: argument.c:2716
int DoRecovery(int *)
Definition: checkpoint.c:1399
void SortWeights(LONG *, LONG *, WORD)
Definition: argument.c:3478
VOID RaisPowCached(PHEAD WORD, WORD, UWORD **, WORD *)
Definition: reken.c:1286
Definition: structs.h:921
WORD * MakeDollarInteger(PHEAD WORD *, WORD **)
Definition: dollar.c:3533
WORD InsertTerm(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD)
Definition: proces.c:2514
int GetModInverses(WORD, WORD, WORD *, WORD *)
Definition: reken.c:1466
int AddNtoL(int, WORD *)
Definition: comtool.c:288
int CompareHSymbols(PHEAD WORD *, WORD *, WORD)
Definition: sort.c:2988
WORD ReadSaveVariables(UBYTE *, UBYTE *, LONG *, LONG *, INDEXENTRY *, LONG *)
Definition: store.c:4323
WORD AddPoly(PHEAD WORD **, WORD **)
Definition: sort.c:2062
WORD FiniTerm(PHEAD WORD *, WORD *, WORD *, WORD, WORD)
Definition: proces.c:2837
int DoPrePrependPath(UBYTE *)
Definition: pre.c:6892
WORD StoreTerm(PHEAD WORD *)
Definition: sort.c:4246
VOID StartVariables()
Definition: startup.c:828
WORD Sflush(FILEHANDLE *)
Definition: sort.c:1301
WORD TestMatch(PHEAD WORD *, WORD *)
Definition: pattern.c:97
LONG TimeWallClock(WORD)
Definition: tools.c:3377
WORD * MakeDollarMod(PHEAD WORD *, WORD **)
Definition: dollar.c:3707
WORD SetFileIndex()
Definition: store.c:2300
int CopyFile(char *, char *)
Definition: tools.c:1029
WORD DoOnePow(PHEAD WORD *, WORD, WORD, WORD *, WORD *, WORD, WORD *)
Definition: proces.c:4304
WORD MergePatches(WORD)
Definition: sort.c:3498
LONG PasteFile(PHEAD WORD, WORD *, POSITION *, WORD **, RENUMBER, WORD *, WORD)
Definition: proces.c:2650
WORD SortWild(WORD *, WORD)
Definition: sort.c:4444
LONG ComPress(WORD **, LONG *)
Definition: sort.c:3041
int DoPreAppendPath(UBYTE *)
Definition: pre.c:6875
WORD Deferred(PHEAD WORD *, WORD)
Definition: proces.c:4525
WORD Compare1(PHEAD WORD *, WORD *, WORD)
Definition: sort.c:2509
Definition: structs.h:1069
Definition: minos.h:120
VOID LowerSortLevel()
Definition: sort.c:4610
int AddNtoC(int, int, WORD *, int)
Definition: comtool.c:317
void clearcbuf(WORD)
Definition: comtool.c:116
int inicbufs(VOID)
Definition: comtool.c:47
WORD PutOut(PHEAD WORD *, POSITION *, FILEHANDLE *, WORD)
Definition: sort.c:1387
VOID GarbHand()
Definition: sort.c:3383
Definition: structs.h:204
WORD TestSub(PHEAD WORD *, WORD)
Definition: proces.c:680
int MakeInverses()
Definition: reken.c:1430
WORD NewSort(PHEAD0)
Definition: sort.c:589
WORD NextPrime(PHEAD WORD)
Definition: reken.c:3654
WORD Generator(PHEAD WORD *, WORD)
Definition: proces.c:3034
WORD * PasteTerm(PHEAD WORD, WORD *, WORD *, WORD, WORD)
Definition: proces.c:2772
int TheDefine(UBYTE *, int)
Definition: pre.c:1938
WORD * TakeContent(PHEAD WORD *, WORD *)
Definition: ratio.c:1376
void finishcbuf(WORD)
Definition: comtool.c:89
WORD * AddRHS(int, int)
Definition: comtool.c:214
int CompareSymbols(PHEAD WORD *, WORD *, WORD)
Definition: sort.c:2945
int IniFbuffer(WORD)
Definition: comtool.c:614
WORD * MakeMod(PHEAD WORD *, WORD *, WORD *)
Definition: argument.c:3433
WORD InsertArg(PHEAD WORD *, WORD *, int)
Definition: argument.c:2487
int TestTerm(WORD *)
Definition: tools.c:3729
VOID StageSort(FILEHANDLE *)
Definition: sort.c:4364
WORD FlushOut(POSITION *, FILEHANDLE *, int)
Definition: sort.c:1724
void InitRecovery()
Definition: checkpoint.c:399
LONG TimeCPU(WORD)
Definition: tools.c:3418
WORD EvalDoLoopArg(PHEAD WORD *, WORD)
Definition: dollar.c:2557
struct bit_field set_of_char[32]
Definition: structs.h:890
WORD ReadSaveExpression(UBYTE *, UBYTE *, LONG *, LONG *)
Definition: store.c:5092
void CleanUpSort(int)
Definition: sort.c:4536
WORD CompCoef(WORD *, WORD *)
Definition: reken.c:3037
int CheckRecoveryFile()
Definition: checkpoint.c:278
LONG PutIn(FILEHANDLE *, POSITION *, WORD *, WORD **, int)
Definition: sort.c:1241
LONG EndSort(PHEAD WORD *, int)
Definition: sort.c:675
WORD ReadSaveHeader()
Definition: store.c:4019
WORD WriteStoreHeader(WORD)
Definition: store.c:3926
WORD * MakeInteger(PHEAD WORD *, WORD *, WORD *)
Definition: argument.c:3262