stdtoGAP.txt
Perl script to convert from std format to GAP format
For information about the data base of lattices, see:
Index File and
Abbreviations.
We suggest that you:
o download this file
o copy it to a new file called stdtoGAP.perl,
o delete everything up to and including the line "cut 1 here",
o delete the line "cut 2 here" and everything after it,
o then make the file executable.
o To use it, type (for example) stdtoGAP.perl E8.std >out
then read "out" into GAP.
------- cut 1 here -------
#!/usr/bin/perl
# stdtoGAP.perl Perl script to make GAP readable
# version of gram matrix from standard library file
# Last modified Feb 03 1997
if ( $#ARGV != 0 ) { die "Useage: stdtoGAP.perl file.std >out " }
# check file name ends in .std
if ( ! $ARGV[0] =~ /\.std$/) { die "filename doesn't end with .std! "}
# check if file exists
if ( ! -f $ARGV[0] ) { die "$ARGV[0] does not exist! " }
# open lattice file ($1)
open(LATTICE,$ARGV[0]);
# states: 0 = neutral, 1 means have just read "^%GRAM",
# 2 means reading Gram matrix
$state = "0";
# set up empty list to hold Gram matrix
@gramlist = ();
# read all input lines
while () {
chop; # delete newline at end
$_ =~ s/^ *//; # delete leading blanks
@line = split; # break up into a list
if ( $#line < 0 ) {next } # skip if empty line
if ($line[0] =~ /^%/) { $state = "0" } #reset state to 0 if find %
if ($line[0] =~ /^%GRAM$/) { # look for line beginning %GRAM
$state = "1"; # sets state to 1, getting ready
# for reading dimensions on next line
next; }
if ($state =~ "1") { $d1 = $line[0]; # state = 1,
# so read dimensions of array
$d2 = $line[1];
$state = "2"; # and set state to 2
next;
}
if ($state =~ "2" && $line[0] !~ /^%/) { # reading Gram matrix
$t1 = $#line; # get no of entries on the current line
# add then to gram matrix
push( @gramlist, @line) }
}
# print in GAP format, calling the gram matrix "m"
# print LHS
print("m := [\\\n");
### case 1, Gram matrix given in square form:
if ( $d1 == $d2 ) # square Gram matrix
{ # start bracket 1
$at = 0;
# print row i (but not the last one)
for ($i = 0; $i < $d1 - 1; $i = $i + 1) {
# print element j (but not the last one)
print("[\\\n");
for ($j = 0; $j < $d1 - 1; $j = $j + 1) {
print($gramlist[$at],",\\\n");
$at = $at + 1; };
# print last elt in row
print($gramlist[$at],"],\\\n");
$at = $at + 1;
}
# print last row
$i = $d1 - 1;
print("[\\\n");
# print element j (but not the last one)
for ($j = 0; $j < $d1 - 1; $j = $j + 1) {
print($gramlist[$at],",\\\n");
$at = $at + 1; };
# print last elt in row
print($gramlist[$at],"]]):\n");
} # end bracket 1
else
### case 2 , Gram matrix given in triangular form
{ # start bracket 2
# print row i
for ($i = 0; $i < $d1 ; $i = $i + 1) {
print("[\\\n");
# print column j
# print elements j = 0 .. i
for ($j = 0; $j <= $i ; $j = $j + 1) {
$at = $i * ($i + 1)/2 + $j;
print($gramlist[$at],"\\\n");
# follow it by a comma unless at end of line
if ($j < $d1 - 1 ) {print(",\\\n"); } else { print("]\\\n");}
};
# print elements j = i+1 .. $d1-1
for ($j = $i + 1; $j < $d1 ; $j = $j + 1) {
$at = $j * ($j + 1)/2 + $i;
print($gramlist[$at],"\\\n");
# follow it by a comma unless at end of line
if ($j < $d1 - 1 ) {print(",\\\n"); } else { print("]\\\n");}
};
# print closing comma
if ( $i < $d1 - 1 ) { print(",\\\n"); } else { print("]):\n"); }
};
} # end bracket 2
---------- cut 2 here -------