/* File orblist.c. Main program for orblist command, which may be used
to list the orbits of a permutation group of a set . The orbits are written
to the standard output . The format of the
command is :
orblist < options > < permGroup >
where the meaning of the parameters is as follows :
< permGroup > : the permutation group whose orbits are to be computed ,
The options are as follows :
- t : Only the orbit lengths are listed .
- r The orbits are listed in randomized order . Ignored if - l
option is present .
- gn : < str > ( Set stabilizer only ) . The generators for the newly - created
group created are given names < str > 01 , < str > 02 , . . . . If
omitted , the new generators are named xxxx01 , xxxx02 , etc . ,
where xxxx are the first four characters of the group name .
- wp : < name > Write out the ordered partition formed by the orbits .
- wg : < name > Write out the group , following base change . This allows
orblist to be used to change the base of a permutation
group , or merely to construct a base and strong generating
set ( using random schreier method ) .
- ws : < name > Like - wg , except when a point list is specified , only the
subgroup stabilizing that point list is written . Note
- wg and - ws options are mutually exclusive .
- i Used with - wg , causes generators to be written in image
format .
- f : < ptlist > Here ptlist is a comma - separated list of points . The
orbits of the ( pointwise ) stabilizer of these points is
found .
- q quite mode . Orbit information not printed .
- z Remove redundant Schreier generators before group is
written out .
- s : < integer > Seed for random number generator used in conjunction with
-r option. */
#include <stddef.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAIN
#include "group.h"
#include "groupio.h"
#include "addsgen.h"
#include "chbase.h"
#include "cstborb.h"
#include "errmesg.h"
#include "factor.h"
#include "new.h"
#include "randgrp.h"
#include "readgrp.h"
#include "readpar.h"
#include "readpts.h"
#include "storage.h"
#include "util.h"
static void nameGenerators(
PermGroup *const H,
char genNamePrefix[]);
static void verifyOptions(void );
GroupOptions options;
int main( int argc, char *argv[])
{
char libFileName[MAX_FILE_NAME_LENGTH], partnFileName[MAX_FILE_NAME_LENGTH],
altGroupFileName[MAX_FILE_NAME_LENGTH],
pointSetFileName[MAX_FILE_NAME_LENGTH];
char libName[MAX_NAME_LENGTH+1 ], partnLibName[MAX_NAME_LENGTH+1 ],
altGroupLibName[MAX_NAME_LENGTH+1 ], pointSetLibName[MAX_NAME_LENGTH+1 ];
char prefix[MAX_FILE_NAME_LENGTH] = "" ;
Unsigned i, j, optionCountPlus1, found, processed, pt, img, orbitCount, orbRep,
column, temp, cumLen, len, numOrbitsToWrite;
BOOLEAN lengthOnlyOption, randomOption, writePartn, writeGroup, writePtStab,
writeOrbit, writeMultipleOrbits, pointListOption, quietOption,
imageFormatFlag, printOrbits, trimStrGenSet, writePS, changeBaseOnly,
ptStabOnly, lengthRepOption;
unsigned long seed;
PermGroup *G;
Permutation *gen, *nextGen;
Partition *Theta;
PointSet *Lambda;
UnsignedS *completeOrbit, *startOfOrbitNo, *orbNumberOfPt, *orbOrder;
char comment[128 ], tempStr[12 ];
UnsignedS *pointList = allocIntArrayBaseSize();
UnsignedS *orbitRepList = allocIntArrayBaseSize();
char *nextPos, *currentPos;
UnsignedS stabLevel = 0 ;
FactoredInt factoredOrbLen;
/* Provide usage information if no arguments (except possibly -chbase
or -ptstab) are given. */
if ( argc == 1 ) {
printf( "\nUsage: orblist [options] permGroup\n" );
return 0 ;
}
else if ( argc == 2 && strcmp(argv[1 ], "-chbase" ) == 0 ) {
printf( "\nUsage: chbase permGroup p1,p2,...,pk newGroup\n" );
return 0 ;
}
else if ( argc == 2 && strcmp(argv[1 ], "-ptstab" ) == 0 ) {
printf( "\nUsage: ptstab permGroup p1,p2,...,pk stabilizerSubgroup\n" );
return 0 ;
}
/* Check for limits option. If present in position 1 give limits and
return. */
if ( argc > 1 && (strcmp(argv[1 ], "-l" ) == 0 || strcmp(argv[1 ], "-L" ) == 0 ) ) {
showLimits();
return 0 ;
}
/* Check for verify option. If present, perform verify (Note verify Options
terminates program). */
if ( argc > 1 && (strcmp(argv[1 ], "-v" ) == 0 || strcmp(argv[1 ], "-V" ) == 0 ) )
verifyOptions();
/* Check for 1 to 3 parameters following options. */
for ( optionCountPlus1 = 1 ; optionCountPlus1 <= argc-1 &&
argv[optionCountPlus1][0 ] == '-' ; ++optionCountPlus1 )
;
if ( argc - optionCountPlus1 > 3 ) {
printf( "\n\nError: At most 3 non-option parameters are allowed.\n" );
exit (ERROR_RETURN_CODE);
}
/* Process options. */
options.maxBaseSize = DEFAULT_MAX_BASE_SIZE;
lengthOnlyOption = FALSE ;
lengthRepOption = FALSE ;
randomOption = FALSE ;
writePartn = FALSE ;
writeGroup = FALSE ;
writePtStab = FALSE ;
writePS = FALSE ;
writeOrbit = FALSE ;
writeMultipleOrbits = FALSE ;
changeBaseOnly = FALSE ;
ptStabOnly = FALSE ;
pointListOption = FALSE ;
quietOption = FALSE ;
imageFormatFlag = FALSE ;
options.genNamePrefix[0 ] = '\0' ;
seed = 47 ;
trimStrGenSet = FALSE ;
strcpy( options.outputFileMode, "w" );
for ( i = 1 ; i < optionCountPlus1 ; ++i ) {
for ( j = 1 ; argv[i][j] != ':' && argv[i][j] != '\0' ; ++j )
#ifdef EBCDIC
argv[i][j] = ( argv[i][j] >= 'A' && argv[i][j] <= 'I' ||
argv[i][j] >= 'J' && argv[i][j] <= 'R' ||
argv[i][j] >= 'S' && argv[i][j] <= 'Z' ) ?
(argv[i][j] + 'a' - 'A' ) : argv[i][j];
#else
argv[i][j] = (argv[i][j] >= 'A' && argv[i][j] <= 'Z' ) ?
(argv[i][j] + 'a' - 'A' ) : argv[i][j];
#endif
/* -a option */
if ( strcmp( argv[i], "-a" ) == 0 )
strcpy( options.outputFileMode, "a" );
/* -chbase option */
else if ( strcmp(argv[i],"-chbase" ) == 0 )
changeBaseOnly = TRUE ;
/* -gn option (not useful at present) */
else if ( strncmp( argv[i], "-gn:" , 4 ) == 0 )
if ( strlen( argv[i]+4 ) <= 8 )
strcpy( options.genNamePrefix, argv[i]+4 );
else
ERROR( "main (orblist)" , "Invalid value for -gn option" )
/* -i option */
else if ( strcmp( argv[i], "-i" ) == 0 )
imageFormatFlag = TRUE ;
/* -mb option */
else if ( strncmp( argv[i], "-mb:" , 4 ) == 0 ) {
errno = 0 ;
options.maxBaseSize = (Unsigned ) strtol(argv[i]+4 ,NULL,0 );
if ( errno )
ERROR( "main (cent)" , "Invalid syntax for -mb option" )
}
/* -mv option */
else if ( strncmp( argv[i], "-mw:" , 4 ) == 0 ) {
errno = 0 ;
options.maxWordLength = (Unsigned ) strtol(argv[i]+4 ,NULL,0 );
if ( errno )
ERROR( "main (cent)" , "Invalid syntax for -mw option" )
}
/* -overwrite option */
else if ( strcmp( argv[i], "-overwrite" ) == 0 )
strcpy( options.outputFileMode, "w" );
/* -p option */
else if ( strncmp( argv[i], "-p:" , 3 ) == 0 ) {
strcpy( prefix, argv[i]+3 );
}
/* -ps option */
else if ( strncmp( argv[i], "-ps:" , 4 ) == 0 ) {
parseLibraryName( argv[i]+4 , "" , "" , pointSetFileName,
pointSetLibName);
writePS = TRUE ;
}
/* -ptstab option */
else if ( strcmp(argv[i],"-ptstab" ) == 0 )
ptStabOnly = TRUE ;
/* -q option */
else if ( strcmp( argv[i], "-q" ) == 0 )
quietOption = TRUE ;
/* -r option */
else if ( strcmp( argv[i], "-r" ) == 0 )
randomOption = TRUE ;
/* -s option */
else if ( strncmp(argv[i],"-s:" ,3 ) == 0 ) {
errno = 0 ;
seed = (unsigned long ) strtol( argv[i]+3 , NULL, 0 );
if ( errno )
ERROR1s( "main (orblist command)" , "Invalid option " , argv[i], "." )
}
/* -len option */
else if ( strcmp( argv[i], "-len" ) == 0 )
lengthOnlyOption = TRUE ;
/* -lr option */
else if ( strcmp( argv[i], "-lr" ) == 0 )
lengthRepOption = TRUE ;
/* -wno option */
else if ( strncmp( argv[i], "-wno:" , 5 ) == 0 ) {
writeMultipleOrbits = TRUE ;
if ( writeOrbit )
ERROR( "main (orblist command)" , "-wo and -wno are incompatible." )
errno = 0 ;
numOrbitsToWrite = (Unsigned ) strtol( argv[i]+5 , NULL, 0 );
if ( errno )
ERROR1s( "main (orblist command)" , "Invalid option " , argv[i], "." )
}
/* -wo option */
else if ( strncmp( argv[i], "-wo:" , 4 ) == 0 ) {
writeOrbit = TRUE ;
if ( writeMultipleOrbits )
ERROR( "main (orblist command)" , "-wo and -wno are incompatible." )
errno = 0 ;
j = 0 ;
currentPos = argv[i]+4 ;
do {
orbitRepList[++j] = strtol( currentPos, &nextPos, 0 );
if ( errno )
ERROR( "main (orblist command)" , "Invalid syntax in -wo option." )
currentPos = nextPos+1 ;
} while ( *nextPos == ',' && j < options.maxBaseSize );
orbitRepList[j+1 ] = 0 ;
if ( *nextPos != '\0' )
ERROR( "main (orblist command)" , "orbitRepList invalid or too long." )
}
/* -wp option */
else if ( strncmp( argv[i], "-wp:" , 4 ) == 0 ) {
writePartn = TRUE ;
if ( writeGroup )
ERROR( "main (orblist command)" , "-wg and -ws are incompatible." )
parseLibraryName( argv[i]+4 , "" , "" , partnFileName, partnLibName);
}
else if ( strcmp( argv[i], "-z" ) == 0 )
trimStrGenSet = TRUE ;
else
ERROR1s( "main (orblist command)" , "Invalid option " , argv[i], "." )
}
/* Compute maximum degree and word length. */
options.maxWordLength = 200 + 5 * options.maxBaseSize;
options.maxDegree = MAX_INT - 2 - options.maxBaseSize;
/* -ps option requires -wo and -wno, and conversely. Check this. */
if ( writePS ^ (writeOrbit | writeMultipleOrbits) )
ERROR( "main (orblist command)" ,
"-ps option requires -wo or -wno, and conversely" )
/* If -chbase or -ptstab options has been specified, check for 3 command
line arguments. */
if ( (changeBaseOnly || ptStabOnly) && (argc - optionCountPlus1 != 3 ) )
ERROR( "main (orblist command)" ,
"3 non-option parameters are needed for chbase or ptstab" );
/* Compute name for group file. */
parseLibraryName( argv[optionCountPlus1], prefix, "" , libFileName, libName);
/* Process the point list, if present. */
if ( argc - optionCountPlus1 >= 2 ) {
pointListOption = TRUE ;
errno = 0 ;
j = 0 ;
currentPos = argv[optionCountPlus1+1 ];
do {
pointList[++j] = strtol( currentPos, &nextPos, 0 );
if ( errno )
ERROR( "main (orblist command)" , "Invalid point in -f option." )
currentPos = nextPos+1 ;
} while ( *nextPos == ',' && j < options.maxBaseSize );
pointList[j+1 ] = 0 ;
if ( *nextPos != '\0' )
ERROR( "main (orblist command)" , "Pointlist invalid or too long." )
}
/* Process name of the point stabilizer to save, or the name under which
to save the group with its new base. */
if ( argc - optionCountPlus1 == 3 ) {
if ( changeBaseOnly )
writeGroup = TRUE ;
else
writePtStab = TRUE ;
parseLibraryName( argv[optionCountPlus1+2 ], "" , "" , altGroupFileName, altGroupLibName);
}
/* Read in group. */
if ( pointListOption || writeGroup || writePtStab )
G = readPermGroup( libFileName, libName, 0 , "Generate" );
else
G = readPermGroup( libFileName, libName, 0 , "" );
/* Change base if requested, and find level in new base of stabilizer
of pointList. */
if ( pointListOption ) {
changeBase( G, pointList);
if ( trimStrGenSet )
removeRedunSGens( G, 1 );
if ( !quietOption ) {
printf( "\n New base: " );
for ( j = 1 ; j <= G->baseSize ; ++j)
printf( " %u" , G->base[j]);
printf( "\n" );
}
if ( changeBaseOnly ) {
strcpy( G->name, altGroupLibName);
G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
nameGenerators( G, options.genNamePrefix);
writePermGroup( altGroupFileName, altGroupLibName, G, NULL);
return 0 ;
}
for ( stabLevel = 1 ; stabLevel <= G->baseSize ; ++stabLevel ) {
for ( j = 1 ; pointList[j] != 0 && pointList[j] != G->base[stabLevel] ;
++j )
;
if ( pointList[j] == 0 )
break ;
}
}
else if ( !writeGroup && !writePtStab )
for ( gen = G->generator ; gen ; gen = gen->next )
gen->level = 0 ;
/* Allocate arrays completeOrbit, startOfOrbitNo, orbNumberOfPt, and
orbOrder. */
completeOrbit = allocIntArrayDegree();
startOfOrbitNo = allocIntArrayDegree();
orbNumberOfPt = allocIntArrayDegree();
orbOrder = allocIntArrayDegree();
if ( writePartn ) {
Theta = allocPartition();
Theta->degree = 0 ; /* To be adjusted */
strcpy( Theta->name, partnLibName);
Theta->pointList = allocIntArrayDegree();
Theta->invPointList = allocIntArrayDegree();
Theta->cellNumber = allocIntArrayDegree();
Theta->startCell = allocIntArrayDegree();
}
if ( writePS ) {
Lambda = allocPointSet();
strcpy( Lambda->name, pointSetLibName);
Lambda->degree = 0 ;
Lambda->size = 0 ;
Lambda->pointList = allocIntArrayDegree();
Lambda->inSet = allocBooleanArrayDegree();
for ( j = 1 ; j <= G->degree ; ++j )
Lambda->inSet[j] = FALSE ;
}
/* Construct the orbits, one by one in order. */
found = processed = orbitCount = 0 ;
for ( i = 1 ; i <= G->degree ; ++i )
orbNumberOfPt[i] = 0 ;
for ( orbRep = 1 ; orbRep <= G->degree ; ++orbRep )
if ( !orbNumberOfPt[orbRep] ) {
completeOrbit[++found] = orbRep;
startOfOrbitNo[++orbitCount] = found;
orbNumberOfPt[orbRep] = orbitCount;
while ( processed < found ) {
pt = completeOrbit[++processed];
for ( gen = G->generator ; gen ; gen = gen->next )
if ( gen->level >= stabLevel ) {
img = gen->image[pt];
if ( !orbNumberOfPt[img] ) {
completeOrbit[++found] = img;
orbNumberOfPt[img] = orbitCount;
}
}
}
}
startOfOrbitNo[orbitCount+1 ] = G->degree+1 ;
/* Write out the orbits. */
if ( !quietOption && (lengthOnlyOption || lengthRepOption) ) {
column = printf( "\n Orbit lengths for group %s" , G->name);
if ( pointListOption ) {
column += printf( " (Stabilizer of" );
for ( j = 1 ; pointList[j] != 0 ; ++j ) {
column += printf( " " );
column += printf( "%d" , pointList[j]);
}
column += printf( ")" );
}
column += printf( ": " );
for ( i = 1 ; i <= orbitCount ; ++i ) {
if ( column > 66 ) {
printf( "\n " );
column = 4 ;
}
if ( lengthRepOption )
column += printf( "%u:" , completeOrbit[startOfOrbitNo[i]]);
column += printf( "%u " , startOfOrbitNo[i+1 ] -
startOfOrbitNo[i]);
}
printf( "\n" );
}
printOrbits = !quietOption && !lengthOnlyOption && !lengthRepOption;
if ( printOrbits || writePartn || writeMultipleOrbits ) {
if ( printOrbits )
printf( "\n Orbits for group %s." , G->name);
if ( printOrbits && pointListOption ) {
printf( " (Stabilizer of" );
for ( j = 1 ; pointList[j] != 0 ; ++j ) {
printf( " " );
printf( "%d" , pointList[j]);
}
printf( ")" );
}
if ( printOrbits )
printf( "\n\n Repr Length CumLen Points\n" );
for ( i = 1 ; i <= orbitCount ; ++i )
orbOrder[i] = i;
if ( randomOption ) {
initializeSeed (seed);
for ( i = 1 ; i <= orbitCount-1 ; ++i ) {
j = randInteger( i, orbitCount);
EXCHANGE( orbOrder[i], orbOrder[j], temp);
}
}
cumLen = 0 ;
for ( i = 1 ; i <= orbitCount ; ++i ) {
len = startOfOrbitNo[orbOrder[i]+1 ] - startOfOrbitNo[orbOrder[i]];
cumLen += len;
if ( printOrbits )
printf( "\n %6d %6d %6d " ,
completeOrbit[startOfOrbitNo[orbOrder[i]]], len, cumLen);
column = 28 ;
for ( j = startOfOrbitNo[orbOrder[i]] ;
j < startOfOrbitNo[orbOrder[i]+1 ] ; ++j ) {
if ( printOrbits && column > 71 ) {
printf( "\n " );
column = 28 ;
}
if ( printOrbits )
column = column + printf( "%d " , completeOrbit[j]);
if ( writePartn ) {
Theta->pointList[++Theta->degree] = completeOrbit[j];
Theta->invPointList[completeOrbit[j]] = Theta->degree;
Theta->cellNumber[completeOrbit[j]] = i;
if ( j == startOfOrbitNo[orbOrder[i]] )
Theta->startCell[i] = Theta->degree;
}
if ( writeMultipleOrbits && i <= numOrbitsToWrite ) {
Lambda->pointList[++Lambda->size] = completeOrbit[j];
Lambda->inSet[completeOrbit[j]] = TRUE ;
}
}
}
}
if ( printOrbits )
printf( "\n" );
if ( writePartn ) {
strcpy( comment, "Orbit partition of group " );
strcat( comment, G->name);
if ( pointListOption ) {
strcat( comment, ", stabilizer of" );
for ( j = 1 ; pointList[j] != 0 ; ++j ) {
sprintf( tempStr, " %u" , pointList[j]);;
strcat( comment, tempStr);
}
}
strcpy( Theta->name, partnLibName);
Theta->startCell[orbitCount+1 ] = Theta->degree + 1 ;
writePartition( partnFileName, partnLibName, comment, Theta);
}
if ( writeMultipleOrbits ) {
strcpy( comment, "First " );
sprintf( tempStr, "%u" , numOrbitsToWrite);
strcat( comment, tempStr);
strcat( comment, " orbits of group " );
strcat( comment, G->name);
if ( pointListOption ) {
strcat( comment, "(stabilizer of" );
for ( j = 1 ; pointList[j] != 0 ; ++j ) {
sprintf( tempStr, " %u" , pointList[j]);;
strcat( comment, tempStr);
strcat( comment, ")" );
}
}
writePointSet( pointSetFileName, pointSetLibName, comment, Lambda);
}
if ( writeOrbit ) {
strcpy( comment, "Orbit(s) in group " );
strcat( comment, G->name);
if ( pointListOption ) {
strcat( comment, "(stabilizer of" );
for ( j = 1 ; pointList[j] != 0 ; ++j ) {
sprintf( tempStr, " %u" , pointList[j]);;
strcat( comment, tempStr);
strcat( comment, ")" );
}
}
strcat( comment, " of point(s)" );
for ( j = 1 ; orbitRepList[j] != 0 ; ++j ) {
sprintf( tempStr, " %u" , orbitRepList[j]);;
strcat( comment, tempStr);
}
for ( i = 1 ; orbitRepList[i] != 0 ; ++i )
if ( !Lambda->inSet[orbitRepList[i]] )
for ( j = startOfOrbitNo[orbNumberOfPt[orbitRepList[i]]] ;
j < startOfOrbitNo[orbNumberOfPt[orbitRepList[i]]+1 ] ; ++j )
Lambda->pointList[++Lambda->size] = completeOrbit[j];
for ( j = 1 ; j < Lambda->size ; ++j )
Lambda->inSet[Lambda->pointList[j]] = TRUE ;
writePointSet( pointSetFileName, pointSetLibName, comment, Lambda);
}
if ( writeGroup ) {
strcpy( G->name, altGroupLibName);
G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
nameGenerators( G, options.genNamePrefix);
writePermGroup( altGroupFileName, altGroupLibName, G, NULL);
}
if ( writePtStab ) {
if ( trimStrGenSet )
removeRedunSGens( G, 1 );
/* First remove generators from G having level less than stabLevel, and
adjust the order . Note , after here , the group table is not valid ,
but it is adequate for writing out (writePermGroup). */
for ( gen = G->generator ; gen ; gen = nextGen ) {
nextGen = gen->next;
if ( gen->level < stabLevel ) {
if ( gen->last )
gen->last->next = nextGen;
else
G->generator = nextGen;
if ( nextGen )
nextGen->last = gen->last;
deletePermutation( gen);
}
}
for ( i = 1 ; i < stabLevel ; ++i ) {
factoredOrbLen = factorize( G->basicOrbLen[i]);
factDivide( G->order, &factoredOrbLen);
G->basicOrbLen[i] = 1 ;
}
/* Now write out the modified G. */
strcpy( comment, "Pointwise stabilizer in %s of " );
for ( j = 1 ; pointList[j] != 0 ; ++j ) {
sprintf( tempStr, " %d" , pointList[j]);
strcat( comment, tempStr);
}
strcpy( G->name, altGroupLibName);
G->printFormat = (imageFormatFlag ? imageFormat : cycleFormat);
nameGenerators( G, options.genNamePrefix);
writePermGroup( altGroupFileName, altGroupLibName, G, NULL);
}
/* Free pseudo-stack storage. */
freeIntArrayBaseSize( pointList);
freeIntArrayBaseSize( orbitRepList);
/* Terminate. */
return 0 ;
}
/*-------------------------- nameGenerators ------------------------------*/
static void nameGenerators(
PermGroup *const H,
char genNamePrefix[])
{
Unsigned i;
Permutation *gen;
if ( genNamePrefix[0 ] == '\0' ) {
strncpy( genNamePrefix, H->name, 4 );
genNamePrefix[4 ] = '\0' ;
}
for ( gen = H->generator , i = 1 ; gen ; gen = gen->next , ++i ) {
strcpy( gen->name, genNamePrefix);
sprintf( gen->name + strlen(gen->name), "%02d" , i);
}
}
/*-------------------------- verifyOptions -------------------------------*/
static void verifyOptions(void )
{
CompileOptions mainOpts = { DEFAULT_MAX_BASE_SIZE, MAX_NAME_LENGTH,
MAX_PRIME_FACTORS,
MAX_REFINEMENT_PARMS, MAX_FAMILY_PARMS,
MAX_EXTRA, XLARGE, SGND, NFLT};
extern void xaddsge( CompileOptions *cOpts);
extern void xbitman( CompileOptions *cOpts);
extern void xcopy ( CompileOptions *cOpts);
extern void xcstbor( CompileOptions *cOpts);
extern void xerrmes( CompileOptions *cOpts);
extern void xessent( CompileOptions *cOpts);
extern void xfactor( CompileOptions *cOpts);
extern void xnew ( CompileOptions *cOpts);
extern void xoldcop( CompileOptions *cOpts);
extern void xpermgr( CompileOptions *cOpts);
extern void xpermut( CompileOptions *cOpts);
extern void xprimes( CompileOptions *cOpts);
extern void xrandgr( CompileOptions *cOpts);
extern void xrandsc( CompileOptions *cOpts);
extern void xreadgr( CompileOptions *cOpts);
extern void xreadpa( CompileOptions *cOpts);
extern void xreadpt( CompileOptions *cOpts);
extern void xstorag( CompileOptions *cOpts);
extern void xtoken ( CompileOptions *cOpts);
extern void xutil ( CompileOptions *cOpts);
xaddsge( &mainOpts);
xbitman( &mainOpts);
xcopy ( &mainOpts);
xcstbor( &mainOpts);
xerrmes( &mainOpts);
xessent( &mainOpts);
xfactor( &mainOpts);
xnew ( &mainOpts);
xoldcop( &mainOpts);
xpermgr( &mainOpts);
xpermut( &mainOpts);
xprimes( &mainOpts);
xrandgr( &mainOpts);
xrandsc( &mainOpts);
xreadgr( &mainOpts);
xreadpa( &mainOpts);
xreadpt( &mainOpts);
xstorag( &mainOpts);
xtoken ( &mainOpts);
xutil ( &mainOpts);
}
Messung V0.5 in Prozent C=93 H=86 G=89
¤ Dauer der Verarbeitung: 0.21 Sekunden
(vorverarbeitet am 2026-06-26)
¤
*© Formatika GbR, Deutschland