/* -*-c-*-
*
- * $Id: genprimes.c,v 1.4 2001/03/04 13:08:10 mdw Exp $
+ * $Id: genprimes.c,v 1.6 2004/04/02 01:03:49 mdw Exp $
*
* Generate prime number table
*
/*----- Revision history --------------------------------------------------*
*
* $Log: genprimes.c,v $
+ * Revision 1.6 2004/04/02 01:03:49 mdw
+ * Miscellaneous constification.
+ *
+ * Revision 1.5 2004/04/01 12:50:09 mdw
+ * Add cyclic group abstraction, with test code. Separate off exponentation
+ * functions for better static linking. Fix a buttload of bugs on the way.
+ * Generally ensure that negative exponents do inversion correctly. Add
+ * table of standard prime-field subgroups. (Binary field subgroups are
+ * currently unimplemented but easy to add if anyone ever finds a good one.)
+ *
* Revision 1.4 2001/03/04 13:08:10 mdw
* Use @DA_LAST@ to determine @MAXPRIME@, now that it exists.
*
char *header = "primetab.h";
char *source = "primetab.c";
char *name = "primetab";
+ char *sym = 0;
intv p = DA_INIT;
int i;
ego(argv[0]);
for (;;) {
- int i = getopt(argc, argv, "h:c:i:n:m:t:");
+ int i = getopt(argc, argv, "h:c:i:n:m:t:s:");
if (i < 0)
break;
switch (i) {
case 't':
type = optarg;
break;
+ case 's':
+ sym = optarg;
+ break;
default:
pquis(stderr, "Usage: $ [-n nprimes] [-m maxprime] [-t type]\n");
exit(EXIT_FAILURE);
char *q;
if (!fp)
die(EXIT_FAILURE, "couldn't write `%s': %s", header, strerror(errno));
- for (q = header; *q; q++) {
- int ch = (unsigned char)*q;
- if (isalnum(ch))
- ch = toupper(ch);
- else
- ch = '_';
- DPUTC(&d, ch);
+ if (!sym) {
+ for (q = header; *q; q++) {
+ int ch = (unsigned char)*q;
+ if (isalnum(ch))
+ ch = toupper(ch);
+ else
+ ch = '_';
+ DPUTC(&d, ch);
+ }
+ DPUTZ(&d);
+ sym = d.buf;
}
- DPUTZ(&d);
fprintf(fp, "\
/* -*-c-*-\n\
*\n\
#define MAXPRIME %uu\n\
\n\
typedef %s smallprime;\n\
-extern smallprime %s[];\n\
+extern const smallprime %s[];\n\
\n\
#endif\n\
",
- d.buf, d.buf,
+ sym, sym,
(unsigned long)DA_LEN(&p),
DA_LAST(&p),
type, name);
\n\
#include \"%s\"\n\
\n\
-%s %s[] = {",
+const %s %s[] = {",
header, type, name);
for (i = 0; i < DA_LEN(&p); i++) {
if (i % 8 == 0)