forked from vermaseren/form
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathminos.h
152 lines (135 loc) · 4.12 KB
/
minos.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef __MANAGE_H__
#define __MANAGE_H__
/** @file minos.h
*
* Contains all needed declarations and definitions for the tablebase
* low level file routines. These have been taken from the minos database
* system and modified somewhat.
*
* !!!CAUTION!!!
* Changes in this file will most likely have consequences for the recovery
* mechanism (see checkpoint.c). You need to care for the code in checkpoint.c
* as well and modify the code there accordingly!
*/
/* #[ License : */
/*
* Copyright (C) 1984-2022 J.A.M. Vermaseren
* When using this file you are requested to refer to the publication
* J.A.M.Vermaseren "New features of FORM" math-ph/0010025
* This is considered a matter of courtesy as the development was paid
* for by FOM the Dutch physics granting agency and we would like to
* be able to track its scientific use to convince FOM of its value
* for the community.
*
* This file is part of FORM.
*
* FORM is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* FORM is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along
* with FORM. If not, see <http://www.gnu.org/licenses/>.
*/
/* #] License : */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
/*
The following typedef has been moved to form3.h where all the sizes
are defined for the various memory models.
We want MLONG to have a more or less fixed size.
In form3.h we try to fix it at 8 bytes. This should make files exchangable
between various 32-bits and 64-bits systems. At 4 bytes it might have
problems with files of more than 2 Gbytes.
typedef long MLONG;
*/
#define MAXBASES 16
#ifdef WORDSIZE32
#define NUMOBJECTS 1024
#define MAXINDEXSIZE 1000000000L
#define NAMETABLESIZE 1008
#define ELEMENTSIZE 256
#else
#define NUMOBJECTS 100
#define MAXINDEXSIZE 33000000L
#define NAMETABLESIZE 1008
#define ELEMENTSIZE 128
#endif
int minosread(FILE *f,char *buffer,MLONG size);
int minoswrite(FILE *f,char *buffer,MLONG size);
/*
ELEMENTSIZE should make a nice number of sizeof(OBJECTS)
Usually this will be much too much, but there are cases.....
*/
typedef struct iniinfo {
/* should contains only MLONG variables or convertiniinfo should be modified */
MLONG entriesinindex;
MLONG numberofindexblocks;
MLONG firstindexblock;
MLONG lastindexblock;
MLONG numberoftables;
MLONG numberofnamesblocks;
MLONG firstnameblock;
MLONG lastnameblock;
} INIINFO;
typedef struct objects {
/* if any changes, convertblock should be adapted too!!!! */
MLONG position; /* position of RHS= */
MLONG size; /* size on disk (could be compressed) */
MLONG date; /* Time stamp */
MLONG tablenumber; /* Number of table. Refers to name in special index */
MLONG uncompressed; /* uncompressed size if compressed. If not: 0 */
MLONG spare1;
MLONG spare2;
MLONG spare3;
char element[ELEMENTSIZE]; /* table element in character form */
} OBJECTS;
typedef struct indexblock {
MLONG flags;
MLONG previousblock;
MLONG position;
OBJECTS objects[NUMOBJECTS];
} INDEXBLOCK;
typedef struct nameblock {
MLONG previousblock;
MLONG position;
char names[NAMETABLESIZE];
} NAMESBLOCK;
typedef struct dbase {
INIINFO info;
MLONG mode;
MLONG tablenamessize;
MLONG topnumber;
MLONG tablenamefill;
INDEXBLOCK **iblocks;
NAMESBLOCK **nblocks;
FILE *handle;
char *name;
char *fullname;
char *tablenames;
} DBASE;
/*
typedef int (*SFUN)(char *);
typedef struct compile {
char *keyword;
SFUN func;
} MCFUNCTION;
*/
#define TODISK 0
#define FROMDISK 1
#define MDIRTYFLAG 1
#define MCLEANFLAG (~MDIRTYFLAG)
#define INANDOUT 0
#define INPUTONLY 1
#define OUTPUTONLY 2
#define NOCOMPRESS 4
extern int withoutflush;
#endif