/****************************************************************************
**
*A read_relator_file.c ANUPQ source Eamonn O'Brien
**
*Y Copyright 1995-2001, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany
*Y Copyright 1995-2001, School of Mathematical Sciences, ANU, Australia
**
*/
#include "pq_defs.h"
#include "constants.h"
#include "pcp_vars.h"
#include "pq_functions.h"
#include "word_types.h"
/* collect and echelonise the relators supplied in named
file and add any redundancies to queue;
it is assumed that the relators file has the following format:
its first entry is the number of elements in the file;
each relator is given as a word supplied in standard
word/relation format -- that is, exponent followed by list
of generators and terminated by the END_OF_WORD symbol;
the word need NOT be in normal form */
void read_relator_file(int *queue, int *queue_length, struct pcp_vars *pcp)
{
register int *y = y_address;
FILE *relation_file;
int nmr_relations;
int format = BASIC;
char *name;
int type;
int cp;
register int i, k;
register int lastg = pcp->lastg;
int nmr_items;
name = GetString("Enter relation file name: ");
relation_file = OpenFile(name, "r+");
if (relation_file == NULL)
return;
nmr_items = fscanf(relation_file, "%d", &nmr_relations);
verify_read(nmr_items, 1);
type = WORD;
for (i = 1; i <= nmr_relations; ++i) {
if (pcp->complete)
break;
if (!is_space_exhausted(3 * lastg + 2, pcp)) {
cp = pcp->lused;
setup_word_to_collect(relation_file, format, type, cp, pcp);
if (pcp->diagn)
setup_word_to_print("collected word", cp, cp + pcp->lastg + 1, pcp);
for (k = 1; k <= lastg; ++k)
y[cp + lastg + k] = 0;
}
echelon(pcp);
if (pcp->redgen != 0 && pcp->m != 0)
queue[++*queue_length] = pcp->redgen;
}
CloseFile(relation_file);
}
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland