stdtoMAPLE.txt Perl script to convert from standard format to MAPLE 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 stdtoMAPLE.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) stdtoMAPLE.perl E8.std >out then read "out" into MAPLE. ------- cut 1 here ------- #!/usr/bin/perl # stdtoMAPLE.perl Perl script to make MAPLE readable # version of gram matrix from standard library file # Last modified Feb 02 1997 if ( $#ARGV != 0 ) { die "Useage: stdtoMAPLE.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 MAPLE format, calling the gram matrix "m" # print LHS print("m := linalg[matrix]([\\\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 # produce print statements for MAPLE to say what to do next # template is: # print("lprint(\`hi\`);\n"); print("lprint(\`linalg[det](m); to get det\`):\n"); ---------- cut 2 here -------