GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#include "typedef.h"1#include "matrix.h"234fund_domain *first_fuber(mauern, anz)5wall_TYP **mauern;6int anz;7{8int i,j,k,p;9int s, n;1011fund_domain *erg;12matrix_TYP *M, *A, *v, *tmp_v;13int *take;14int test;15wall_TYP *vec;1617extern fund_domain *init_fund_domain();18extern vertex_TYP *init_vertex_fuber();19extern wall_TYP *init_wall_fuber();20extern int row_gauss();21extern matrix_TYP *solve_mat();22extern matrix_TYP *init_mat();2324test = 0;25n = mauern[0]->dim;26M = init_mat(n, n, "");27take = (int *)malloc(anz *sizeof(int));2829M->rows = 0;30i=0;31while(M->rows != n && i < anz)32{33for(j=0;j<n;j++)34M->array.SZ[M->rows][j] = mauern[i]->gl[j];35M->rows++;36s = row_gauss(M);37if(s == M->rows)38take[i] = TRUE;39else40{41take[i] = FALSE;42M->rows--;43}44i++;45}46if(M->rows != n)47{48free_mat(M);49free(take);50return(NULL);51}5253erg = init_fund_domain(n, n);54erg->is_finite = FALSE;55erg->is_closed = FALSE;56for(i=0; i<n;i++)57{58erg->vert[i] = init_vertex_fuber(n, n-1);59erg->wall[i] = init_wall_fuber(n);60}61k = 0;62for(i=0;i<anz && k<n;i++)63{64if(take[i] == TRUE)65{66for(j=0;j<n;j++)67erg->wall[k]->gl[j] = mauern[i]->gl[j];6869/* geaendert am 08.11.94jk: Information ueber die korrespondierende Matrix70sollten uebernommen werden */71erg->wall[k]->nproduct = mauern[i]->nproduct;72erg->wall[k]->product = (int*) malloc (sizeof(int)*mauern[i]->nproduct);73for (j=0;j<mauern[i]->nproduct;j++)74erg->wall[k]->product[j] = mauern[i]->product[j];75/* Ende der Aenderung */76k++;77}78}79for(i=0;i<n;i++)80{81k = 0;82for(j=0;j<n;j++)83{84if(j != i)85{ erg->vert[i]->wall[k] = j; k++;}86}87}8889A = init_mat(n-1, n, "l");90for(i=0;i<n;i++)91{92p=0;93for(j=0; j<n;j++)94{95if(i != j)96{97for(k=0;k<n;k++)98A->array.SZ[p][k] = erg->wall[j]->gl[k];99p++;100}101}102103/* changed on 16/12/96 tilman. The function solve didn't exist104anymore, so I used solve_mat */105tmp_v = solve_mat(A);106v = tr_pose(tmp_v);107free_mat(tmp_v);108109for(j=0;j<n;j++)110erg->vert[i]->v[j] = v->array.SZ[j][0];111free_mat(v);112test = wall_times_vertex_fuber(erg->wall[i], erg->vert[i]);113if(test < 0)114{115for(j=0;j<n;j++)116erg->vert[i]->v[j] = -erg->vert[i]->v[j];117}118}119120M->rows = n;121free_mat(M);122free_mat(A);123free(take);124return(erg);125}126/*{{{}}}*/127128129