GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#include "typedef.h"1#include "tools.h"2#include "matrix.h"34vertex_TYP *init_vertex_fuber(dim, wall_no)5int dim;6int wall_no;7{8int i,j;9vertex_TYP *erg;10erg = (vertex_TYP *)malloc(sizeof(vertex_TYP));11if(dim!=0)12erg->v = (int *)malloc(dim *sizeof(int));13erg->dim = dim;14erg->wall_no = wall_no;15if( wall_no > 0)16{17j = wall_no/extsize1 +1;18erg->wall_SIZE = j * extsize1;19erg->wall = (int *)malloc(erg->wall_SIZE *sizeof(int));20}21else22erg->wall_SIZE=0;2324return(erg);25}2627wall_TYP *init_wall_fuber(dim)28int dim;29{30int i,j;31wall_TYP *erg;3233erg = (wall_TYP *)malloc(sizeof(wall_TYP));34erg->gl = (int *)malloc(dim *sizeof(int));35erg->norm = 0;36erg->dim = dim;37erg->product = NULL;38erg->nproduct = 0;39erg->mat = NULL;40return(erg);41}4243void free_vertex_fuber(vertex_TYP**);44void free_wall_fuber(wall_TYP**);45/*46Aenderung: 12.10.94 JK47Speicherplatz wieder freigeben48*/49void free_fund_domain( fudo )50fund_domain* fudo;51{52int i;53for (i=0;i<fudo->wall_no;i++)54free_wall_fuber( &fudo->wall[i]);55if (fudo->wall_no>0)56free( (int *)fudo->wall);57for (i=0;i<fudo->vert_no;i++)58free_vertex_fuber( &fudo->vert[i]);59if (fudo->vert_no>0)60free( (int *)fudo->vert);61free( (int *)fudo);62}6364fund_domain *init_fund_domain(vert_no, wall_no)65int vert_no, wall_no;66{67int i,j;68fund_domain *erg;6970erg = (fund_domain *)malloc(sizeof(fund_domain));71erg->vert_no = vert_no;72erg->wall_no = wall_no;73j = vert_no/extsize1 +1;74j *= extsize1;75erg->vert_SIZE = j;76erg->vert = (vertex_TYP **)malloc(j*sizeof(vertex_TYP *));77j = wall_no/extsize1 +1;78j *= extsize1;79erg->wall_SIZE = j;80erg->wall = (wall_TYP **)malloc(j*sizeof(wall_TYP *));81return(erg);82}8384858687fund_domain *get_fund_domain(file_name)88char *file_name;89{90int vertno, wallno;91int dim,wn,i,j;92fund_domain *F;93FILE *infile;949596/*------------------------------------------------------------*\97| Open input file |98\*------------------------------------------------------------*/99if ( file_name == NULL )100infile = stdin;101else102if ( (infile = fopen (file_name, "r")) == NULL ) {103fprintf (stderr, "Could not open input-file %s\n", file_name);104exit (4);105}106/*--------------------------------------------------*\107| read fundamental domain |108\*--------------------------------------------------*/109fscanf (infile, "%d", &vertno);110fscanf (infile, "%d", &wallno);111F = init_fund_domain(vertno, wallno);112for(i=0;i<vertno;i++)113{114fscanf (infile, "%d", &dim);115fscanf (infile, "%d", &wn);116F->vert[i] = init_vertex_fuber(dim, wn);117for(j=0;j<dim;j++)118fscanf(infile, "%d", &F->vert[i]->v[j]);119for(j=0;j<wn;j++)120fscanf(infile, "%d", &F->vert[i]->wall[j]);121}122for(i=0;i<wallno;i++)123{124fscanf(infile, "%d", &dim);125F->wall[i] = init_wall_fuber(dim);126for(j=0;j<dim;j++)127fscanf(infile, "%d", &F->wall[i]->gl[j]);128}129130131/*------------------------------------------------------------*\132| close input file |133\*------------------------------------------------------------*/134if ( infile != stdin )135fclose (infile);136return ( F );137}138139140void put_fund_domain(F)141fund_domain *F;142{143int i,j;144printf("%d %d\n", F->vert_no, F->wall_no);145printf("\n");146for(i=0;i<F->vert_no;i++)147{148printf("%d %d\n", F->vert[i]->dim, F->vert[i]->wall_no);149for(j=0;j<F->vert[i]->dim;j++)150printf("%d ", F->vert[i]->v[j]);151printf("\n");152for(j=0;j<F->vert[i]->wall_no;j++)153printf("%d ", F->vert[i]->wall[j]);154printf("\n");155}156printf("\n");157for(i=0;i<F->wall_no;i++)158{159printf("%d\n", F->wall[i]->dim);160for(j=0;j<F->wall[i]->dim;j++)161printf("%d ", F->wall[i]->gl[j]);162printf("\n");163}164165fflush(stdout);166}167168169int wall_times_vertex_fuber(w, v)170wall_TYP *w;171vertex_TYP *v;172{173int i;174int e,wa;175e=0;176for(i=0;i<v->dim;i++)177e += v->v[i] * w->gl[i];178return(e);179}180181void free_vertex_fuber(v)182vertex_TYP **v;183{184int i;185if((*v)!= NULL)186{187free((int *)(*v)->v);188if((*v)->wall_SIZE != 0)189free((int *)(*v)->wall);190free((int *)(*v));191(*v)=NULL;192}193}194195void free_wall_fuber(v)196wall_TYP **v;197{198int i;199if((*v)!= NULL)200{201free((*v)->gl);202if((*v)->mat != NULL)203free_mat((*v)->mat);204if ((*v)->nproduct!=0)205free((*v)->product);206free( (int *)(*v));207(*v)=NULL;208}209}210211/*212commented out this function tilman 21/3/97213wall_TYP *mat_to_wall(M)214matrix_TYP *M;215{216int i;217wall_TYP *erg;218erg = init_wall_fuber(M->cols);219for(i=0;i<erg->dim;i++)220erg->gl[i] = M->array.SZ[0][i];221return(erg);222}223*/224225void wall_standard(v)226wall_TYP *v;227{228int i,j;229int w1;230231if(v->dim>0)232{233w1 = 0;234i=0;235while(i<v->dim && v->gl[i] == 0)236i++;237if(i<v->dim)238w1 = v->gl[i];239for(j=i+1;j<v->dim;j++)240{241if(v->gl[j] != 0)242w1 = GGT(w1, v->gl[j]);243}244if(w1 < 0)245w1 = -w1;246if(w1 != 0)247{248for(j=i;j<v->dim;j++)249v->gl[j] /= w1;250}251v->norm = 0;252for(i=0;i<v->dim;i++)253v->norm += v->gl[i] * v->gl[i];254}255}256/*{{{}}}*/257258259