Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

563553 views
1
2
/**************************************************************************
3
4
ace.c
5
Colin Ramsay ([email protected])
6
25 Feb 00
7
8
ADVANCED COSET ENUMERATOR, Version 3.001
9
10
Copyright 2000
11
Centre for Discrete Mathematics and Computing,
12
Department of Mathematics and
13
Department of Computer Science & Electrical Engineering,
14
The University of Queensland, QLD 4072.
15
(http://staff.itee.uq.edu.au/havas)
16
17
This is the top level stuff for Level 2 of ACE; that is, the standalone,
18
interactive `demonstration application'.
19
20
Historical fact: the first run of ACE's Level 2 interactive interface which
21
included an actual enumeration (as opposed to just sitting in the main loop
22
twiddling its thumbs) lasted from 10:56:57am to 10:59:03am on Tues 29th Dec
23
1998, and took place in the Dept of CS & EE at The Univ of Qld. The group
24
was A_5, over the trivial subgroup, and the correct answer (ie, 60) was
25
obtained!
26
27
**************************************************************************/
28
29
#include "al2.h"
30
31
/******************************************************************
32
Stuff declared in al2.h
33
******************************************************************/
34
35
jmp_buf env;
36
Logic okstart, okcont, okredo;
37
Logic tabinfo, tabindex;
38
int lresult;
39
Logic echo, skipnl;
40
int currip;
41
char currkey[64], currname[128];
42
int *currword, currsiz, currexp;
43
int intcnt, intarr[32];
44
45
/******************************************************************
46
int main(void)
47
48
ACE takes no arguments, and normally returns 0; something -ve will
49
be returned on an `error'. By default, all input is from stdin &
50
all output is to stdout, via the fip/fop Level 0 parameters.
51
******************************************************************/
52
53
int main(void)
54
{
55
al2_init(); /* Initialise Levels 2, 1 & 0 (incl. fop/fop) */
56
57
fprintf(fop, "%s %s", ACE_VER, al0_date());
58
fprintf(fop, "=========================================\n");
59
60
/* If we're working on a `normal' Unix box, "uname -n" returns the name
61
of the host, which we print out neatly at the start of a run. (Of
62
course, we could also access this using the "sys:...;" ACE command.) If
63
required, define AL2_HINFO in the make file. We assume that the system()
64
call's output will go to fop! This code could be expanded to print out
65
any other information regarding the current host that is required. */
66
67
#ifdef AL2_HINFO
68
fprintf(fop, "Host information:\n");
69
fflush(fop);
70
system("echo \" name = `uname -n`\"");
71
#endif
72
73
switch(setjmp(env))
74
{
75
case 0: /* First time through */
76
77
/* Level 0 stuff, set to "Default" mode */
78
79
pdefn = 3; /* Default is to use the pdl ... */
80
ffactor1 = 0; /* ... with fill factor of ~5(ncol+2)/4 */
81
pdsiz1 = 256; /* ... and a 256 byte list */
82
83
lahead = 0; /* We do a CL, not a lookahead */
84
85
dedmode = 4; /* Process all deductions ... */
86
dedsiz1 = 1000;
87
88
/* Level 1 stuff */
89
90
grpname = al2_strdup("G"); /* Default group name */
91
subgrpname = al2_strdup("H"); /* Default subgroup name */
92
93
/* Level 2 stuff */
94
95
break;
96
97
case 1: /* Non-fatal error (continuable) */
98
99
break;
100
101
case 2: /* Non-fatal error (restartable) */
102
103
okstart = ((costable != NULL) && (ndgen > 0));
104
okcont = okredo = FALSE;
105
106
tabinfo = tabindex = FALSE;
107
108
break;
109
110
case 3: /* Fatal error (aborts) */
111
112
fprintf(fop, "=========================================\n");
113
fprintf(fop, "%s %s", ACE_VER, al0_date());
114
115
exit(-1);
116
break;
117
118
default: /* Reality failure */
119
120
fprintf(fop, "** INTERNAL ERROR\n");
121
fprintf(fop, " unknown jump to error handler\n");
122
fprintf(fop, "=========================================\n");
123
fprintf(fop, "%s %s", ACE_VER, al0_date());
124
125
exit(-2);
126
break;
127
}
128
129
/* If costable is NULL at this point, then either this is the first time
130
through, or an attempt to allocate the requested workspace has failed.
131
In either case, we attempt to allocate the default amount of workspace.
132
If this fails, then we terminate extremely prejudicially. */
133
134
if (costable == NULL)
135
{
136
if ((costable = (int *)malloc(DEFWORK*sizeof(int))) == NULL)
137
{
138
fprintf(fop, "** MEMORY PROBLEM\n");
139
fprintf(fop, " unable to allocate default workspace\n");
140
fprintf(fop, "=========================================\n");
141
fprintf(fop, "%s %s", ACE_VER, al0_date());
142
143
exit(-3);
144
}
145
146
workspace = DEFWORK;
147
workmult = 1;
148
149
/* We have a newly allocated table, so start is (maybe) possible.
150
Continuing & redoing are not. The table has no information. */
151
152
okstart = (ndgen > 0);
153
okcont = okredo = FALSE;
154
155
tabinfo = tabindex = FALSE;
156
}
157
158
al2_cmdloop(); /* Where it all happens! */
159
160
fprintf(fop, "=========================================\n");
161
fprintf(fop, "%s %s", ACE_VER, al0_date());
162
163
return(0);
164
}
165
166
167