10 #ifndef MEATAXE_H_INCLUDED
11 #define MEATAXE_H_INCLUDED
16 #define MTX_VERSION "2.4"
19 #define MTX_PRINTF_ATTRIBUTE(f,v) __attribute__((format(printf,f,v)))
21 #define MTX_PRINTF_ATTRIBUTE(f,v)
24 extern char *MtxVersion;
31 #define FM_CREATE 0x02
32 #define FM_APPEND 0x03
35 #define FM_NOERROR 0x40
44 FILE *
SysFopen(
const char *name,
int mode);
50 #define SysReadLong SysReadLong32
51 int SysReadLongX(FILE *f,
long *buf,
int n);
57 #define SysWriteLong SysWriteLong32
58 int SysWriteLongX(FILE *f,
const long *buf,
int n);
60 #define ALLOC(type) ((type *) SysMalloc(sizeof(type)))
61 #define NALLOC(type,n) ((type *) SysMalloc((size_t)(n) * sizeof(type)))
62 #define NREALLOC(x,type,n)\
63 ((type *) SysRealloc(x,(size_t)(n) * sizeof(type)))
64 #define FREE(x) SysFree(x)
82 typedef unsigned char FEL;
84 #define FF_ZERO ((FEL)0)
85 #define FF_ONE ((FEL)1)
90 typedef unsigned short FEL;
91 typedef unsigned short *
PTR;
92 #define FF_ZERO ((FEL)0xFFFF)
93 #define FF_ONE ((FEL)0)
94 #define ZZZVERSION 0x101
98 #error "ZZZ undefined"
120 int FfMakeTables(
int field);
144 FILE *
FfReadHeader(
const char *name,
int *fld,
int *nor,
int *noc);
155 FILE *
FfWriteHeader(
const char *name,
int fld,
int nor,
int noc);
166 extern FEL mtx_tmult[256][256];
167 extern FEL mtx_tadd[256][256];
168 extern FEL mtx_taddinv[256], mtx_tmultinv[256];
169 extern FEL mtx_tffirst[256][2];
170 extern FEL mtx_textract[8][256];
171 extern FEL mtx_tnull[8][256];
172 extern FEL mtx_tinsert[8][256];
173 extern long mtx_embedord[4];
174 extern FEL mtx_embed[4][16];
175 extern FEL mtx_restrict[4][256];
177 #define FfAdd(a,b) ((FEL)mtx_tadd[(int)(unsigned char)a][(int)(unsigned char)b])
178 #define FfDiv(a,b) FfMul((a),FfInv(b))
179 #define FfInv(a) (mtx_tmultinv[(int)(unsigned char)a])
180 #define FfMul(a,b) ((FEL)mtx_tmult[(int)(unsigned char)a][(int)(unsigned char)b])
181 #define FfNeg(a) (mtx_taddinv[(int)(unsigned char)a])
182 #define FfSub(a,b) FfAdd((a),FfNeg(b))
186 #define FfExtract(row,col) ((FEL)((row)[(col)-1]))
187 #define FfInsert(row,col,mark) ((void)((row)[(col)-1] = mark))
207 extern int Mtx_IsInitialized;
208 extern int Mtx_IsX86;
209 extern int MtxOpt_UseOldWordGenerator;
211 int MtxInitLibrary();
212 void MtxCleanupLibrary();
235 MTX_PRINTF_ATTRIBUTE(2,3)
237 MTX_PRINTF_ATTRIBUTE(2,3)
252 #define APP_MAX_ARGS 50
299 unsigned long IsDone[APP_MAX_ARGS];
302 char TempDirName[200];
317 #define MTX_COMMON_OPTIONS_SYNTAX \
320 #define MTX_COMMON_OPTIONS_DESCRIPTION \
321 " -Q ...................... Quiet, no messages\n" \
322 " -V ...................... Verbose, more messages\n" \
323 " -T <MaxTime> ............ Set CPU time limit [s]\n"
330 #define MTX_ERR_NOMEM 1
331 #define MTX_ERR_GAME_OVER 2
332 #define MTX_ERR_DIV0 8
333 #define MTX_ERR_FILEFMT 24
334 #define MTX_ERR_BADARG 31
335 #define MTX_ERR_RANGE 33
336 #define MTX_ERR_NOTECH 34
337 #define MTX_ERR_NOTSQUARE 35
338 #define MTX_ERR_INCOMPAT 36
339 #define MTX_ERR_BADUSAGE 41
340 #define MTX_ERR_OPTION 42
341 #define MTX_ERR_NARGS 43
342 #define MTX_ERR_NOTMATRIX 51
343 #define MTX_ERR_NOTPERM 53
355 typedef struct {
const MtxFileInfo_t *FileInfo;
int LineNo;
const char *Text; }
360 #define MTX_DEFINE_FILE_INFO \
361 static MtxFileInfo_t Mtx_ThisFile = { __FILE__, NULL };
363 int MtxError(
MtxFileInfo_t *fi,
int line,
const char *text, ...);
364 MtxErrorHandler_t *MtxSetErrorHandler(MtxErrorHandler_t *h);
367 #define MTX_ERROR(msg) MtxError(&Mtx_ThisFile,__LINE__,msg)
368 #define MTX_ERROR1(msg,a1) MtxError(&Mtx_ThisFile,__LINE__,msg,a1)
369 #define MTX_ERROR2(msg,a1,a2) MtxError(&Mtx_ThisFile,__LINE__,msg,a1,a2)
370 #define MTX_ERROR3(msg,a1,a2,a3) MtxError(&Mtx_ThisFile,__LINE__,msg,a1,a2,a3)
371 #define MTX_ERROR4(msg,a1,a2,a3,a4) MtxError(&Mtx_ThisFile,__LINE__,\
373 #define MTX_ERROR5(msg,a1,a2,a3,a4,a5) MtxError(&Mtx_ThisFile,__LINE__,\
375 #define MTX_ERROR7(msg,a1,a2,a3,a4,a5,a6,a7) MtxError(&Mtx_ThisFile,__LINE__,\
376 msg,a1,a2,a3,a4,a5,a6,a7)
379 #define MTX_VERIFY(e) ((void)((e) ||\
380 MtxError(&Mtx_ThisFile,__LINE__,"Assertion failed: %s",#e)))
387 #define MTX_ASSERT(e) MTX_VERIFY(e)
389 #define MTX_ASSERT(e)
403 #define MSG0 (MtxMessageLevel >= 0)
404 #define MSG1 (MtxMessageLevel >= 1)
405 #define MSG2 (MtxMessageLevel >= 2)
406 #define MSG3 (MtxMessageLevel >= 3)
407 #define MSG4 (MtxMessageLevel >= 4)
408 #define MESSAGE(level,args)\
409 (MtxMessageLevel>=(level) ? ( printf args , fflush(stdout), 1) : 0 )
419 long gcd(
long a,
long b);
420 long lcm(
long a,
long b);
484 int MfReadLong(
MtxFile_t *f,
long *buf,
int nrows);
486 int MfWriteLong(
MtxFile_t *f,
const long *buf,
int count);
509 const Matrix_t *src,
int row1,
int col1,
int nrows,
int ncols);
613 void Perm_ConvertOld(
long *data,
int len);
704 #define BS_BPL (sizeof(long) * 8)
705 #define BsSet(bs,i) ((bs)->Data[(i) / BS_BPL] |= 1L << ((i) % BS_BPL))
706 #define BsClear(bs,i) ((bs)->Data[(i) / BS_BPL] &= ~(1L << ((i) % BS_BPL)))
707 #define BsTest(bs,i) (((bs)->Data[(i) / BS_BPL] & (1L << ((i) % BS_BPL))) != 0 ? 1 : 0)
731 int SetPrint(
char *name,
const Set_t *s);
760 int XIsCompatible(
void *a,
void *b);
762 void *XInverse(
void *a);
763 void *XLoad(
const char *fn);
764 void XMul(
void *a,
void *b);
765 long XOrder(
void *a);
766 void *XPower(
void *a,
int n);
767 int XSave(
void *a,
const char *fn);
820 #define MR_COPY_GENERATORS 0x0001
861 #define SF_FIRST 0x0001
862 #define SF_EACH 0x0002
863 #define SF_MAKE 0x0004
864 #define SF_SUB 0x0010
865 #define SF_CYCLIC 0x0020
866 #define SF_COMBINE 0x0040
867 #define SF_SEED_MASK 0x000F
868 #define SF_MODE_MASK 0x00F0
869 #define SF_STD 0x0100
877 int MaxSubspaceDimension;
900 long MakeSeedVector(
const Matrix_t *basis,
long lastno,
PTR vec);
951 #define LAT_MAXCF 200
952 #define MAXCYCL 30000
953 #define MAXDOTL 90000
954 #define MAXNSUB 20000
955 #define LAT_MAXBASENAME 100
972 char BaseName[LAT_MAXBASENAME];
990 #define LAT_RG_INVERT 0x0001
991 #define LAT_RG_TRANSPOSE 0x0002
992 #define LAT_RG_STD 0x0004
1015 char NameM[LAT_MAXBASENAME];
1016 char NameN[LAT_MAXBASENAME];
1019 int CfIndex[2][LAT_MAXCF];
1066 unsigned long UserData;
1084 #define LD_ISSUB(l,i,k) ((l)->IsSub[(i) * (l)->NNodes + (k)])
1088 int LdAddIncidence(
LdLattice_t *lat,
int sub,
int sup);