[BACK]Return to dispatch.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Main

Annotation of OpenXM_contrib/PHC/Ada/Main/dispatch.adb, Revision 1.1.1.1

1.1       maekawa     1: with text_io;                            use text_io;
                      2: with Unix_Command_Line;
                      3:
                      4: with mainscal,mainred;
                      5: with mainroco,bablroco;
                      6: with bablpoco,mainpoco;
                      7: with mainsmvc,babldmvc;
                      8: with mainphc,bablphc;
                      9: with mainvali,bablvali;
                     10: with mainenum;
                     11:
                     12: procedure Dispatch is
                     13:
                     14: -- BANNERS WITH INFORMATION TO START DIALOGUE WITH USER :
                     15:
                     16:   welcome : constant string :=
                     17:     "Welcome to PHC (Polynomial Homotopy Continuation) Version 2.0.";
                     18:
                     19:   author : constant string :=
                     20:     "Author is Jan Verschelde (E-mail: na.jverschelde@na-net.ornl.gov).";
                     21:
                     22:   scalban : constant string :=
                     23:     "Equation/variable Scaling on polynomial system and solution list.";
                     24:
                     25:   reduban : constant string :=
                     26:     "Linear and nonlinear Reduction w.r.t the total degree of the system.";
                     27:
                     28:   rocoban : constant string :=
                     29:     "Root counting and Construction of product and polyhedral start systems.";
                     30:
                     31:   mvcban : constant string :=
                     32:     "Mixed-Volume Computation by four different lifting strategies.";
                     33:
                     34:   pocoban : constant string :=
                     35:     "Polynomial Continuation defined by a homotopy in one parameter.";
                     36:
                     37:   valiban : constant string :=
                     38:     "Validation, refinement and purification of computed solution lists.";
                     39:
                     40:   enumban : constant string :=
                     41:     "SAGBI/Pieri homotopies to solve a problem in enumerative geometry.";
                     42:
                     43: -- AVAILABLE OPTIONS :
                     44:
                     45:   options : constant string := "sdpmrvbe";
                     46:   -- s : scal => scaling of a polynomial system
                     47:   -- d : redu => reduction w.r.t. the total degree
                     48:   -- p : poco => polynomial continuation
                     49:   -- r : roco => root counting methods
                     50:   -- m : mvc  => mixed-volume computation
                     51:   -- v : vali => validation of solutions
                     52:   -- b : batch or black box processing
                     53:   -- e : enum => numerical Schubert calculus
                     54:
                     55:   option1,option2 : character;
                     56:   posi : natural := 0;
                     57:   argc : natural := Unix_Command_Line.Number_of_Arguments;
                     58:
                     59: -- UTILITIES FOR PROCESSING THE ARGUMENTS AND OPTIONS :
                     60:
                     61:   function Read_Argument ( k : in natural ) return string is
                     62:
                     63:   -- DESCRIPTION :
                     64:   --   Reads the kth argument from the command line.
                     65:   --   An argument is a string not proceeded by a `-' character.
                     66:   --   The empty string is returned when there is no argument.
                     67:
                     68:     null_string : constant string := "";
                     69:     cnt : natural := 0;
                     70:
                     71:   begin
                     72:     if argc >= 1
                     73:      then for i in 1..argc loop
                     74:             declare
                     75:               s : constant string := Unix_Command_Line.Argument(i);
                     76:             begin
                     77:               if s(1) /= '-'
                     78:                then cnt := cnt + 1;
                     79:                     if k = cnt
                     80:                      then return s;
                     81:                     end if;
                     82:               end if;
                     83:             end;
                     84:           end loop;
                     85:     end if;
                     86:     return null_string;
                     87:   end Read_Argument;
                     88:
                     89:   function Position ( c : character; s : string ) return natural is
                     90:
                     91:   -- DESCRIPTION :
                     92:   --   If the the string contains the character c, then its position
                     93:   --   in the string will be returned.  Otherwise s'first-1 will be returned.
                     94:
                     95:   begin
                     96:     for i in s'range loop
                     97:       if s(i) = c
                     98:        then return i;
                     99:       end if;
                    100:     end loop;
                    101:     return s'first-1;
                    102:   end Position;
                    103:
                    104:   procedure Read_Next_Option ( pos : in out natural; legal : in string;
                    105:                                option : out character ) is
                    106:
                    107:   -- DESCRIPTION :
                    108:   --   Reads the next option from the command line arguments.
                    109:
                    110:   -- ON ENTRY :
                    111:   --   pos      position in the command line of the last option
                    112:   --            that has been read;
                    113:   --   legal    string which contains all legal options.
                    114:
                    115:   -- ON RETURN :
                    116:   --   pos      the position in the command line of the last option read;
                    117:   --   option   is blank when no legal option could be read, otherwise it
                    118:   --            contains the next legal option.
                    119:
                    120:     res : character := ' ';
                    121:     start : natural := pos+1;
                    122:
                    123:   begin
                    124:     if argc >= 1
                    125:      then for i in start..argc loop
                    126:             declare
                    127:               s : constant string := Unix_Command_Line.Argument(i);
                    128:             begin
                    129:               if s(1) = '-'
                    130:                then pos := Position(s(2),legal);
                    131:                     if pos >= legal'first
                    132:                      then res := legal(pos);
                    133:                      else put("The option `"); put(s);
                    134:                           put_line("' is not recognised.  Will ignore it...");
                    135:                     end if;
                    136:               end if;
                    137:             end;
                    138:             pos := i;
                    139:             exit when (res /= ' ');
                    140:           end loop;
                    141:     end if;
                    142:     option := res;
                    143:   end Read_Next_Option;
                    144:
                    145: -- DISPATCHING ACCORDING TO OPTIONS :
                    146:
                    147:   procedure Dispatcher ( infile,outfile : in string ) is
                    148:   begin
                    149:     case option1 is
                    150:       when 'b'    => Read_Next_Option(posi,options,option2);
                    151:                      case option2 is
                    152:                        when 's'    => mainscal(infile,outfile);
                    153:                        when 'd'    => mainred(infile,outfile);
                    154:                        when 'r'    => bablroco(infile,outfile);
                    155:                        when 'm'    => babldmvc(infile,outfile);
                    156:                        when 'p'    => bablpoco(infile,outfile);
                    157:                        when 'v'    => bablvali(infile,outfile);
                    158:                        when others => bablphc(infile,outfile);
                    159:                      end case;
                    160:       when 's'    => put_line(welcome); put_line(scalban);
                    161:                      mainscal(infile,outfile);
                    162:       when 'd'    => put_line(welcome); put_line(reduban);
                    163:                      mainred(infile,outfile);
                    164:       when 'r'    => Read_Next_Option(posi,options,option2);
                    165:                      case option2 is
                    166:                        when 'b'    => bablroco(infile,outfile);
                    167:                        when others => put_line(welcome); put_line(rocoban);
                    168:                                       mainroco(infile,outfile);
                    169:                      end case;
                    170:       when 'm'    => Read_Next_Option(posi,options,option2);
                    171:                      case option2 is
                    172:                        when 'b'    => babldmvc(infile,outfile);
                    173:                        when others => put_line(welcome); put_line(mvcban);
                    174:                                       mainsmvc(infile,outfile);
                    175:                      end case;
                    176:       when 'p'    => Read_Next_Option(posi,options,option2);
                    177:                      case option2 is
                    178:                        when 'b'    => bablpoco(infile,outfile);
                    179:                        when others => put_line(welcome); put_line(pocoban);
                    180:                                       mainpoco(infile,outfile);
                    181:                      end case;
                    182:       when 'v'    => Read_Next_Option(posi,options,option2);
                    183:                      case option2 is
                    184:                        when 'b'    => bablvali(infile,outfile);
                    185:                        when others => put_line(welcome); put_line(valiban);
                    186:                                       mainvali(infile,outfile);
                    187:                      end case;
                    188:       when 'e'    => put_line(welcome); put_line(enumban);
                    189:                      mainenum;
                    190:       when others => put_line(welcome); mainphc(infile,outfile);
                    191:     end case;
                    192:   end Dispatcher;
                    193:
                    194: begin
                    195:   Read_Next_Option(posi,options,option1);
                    196:   declare
                    197:     nullstring : constant string := "";
                    198:     argument : constant string := Read_Argument(1);
                    199:     outfile : constant string := Read_Argument(2);
                    200:   begin
                    201:     if (argument /= "") and then (argument = outfile)
                    202:      then new_line;
                    203:           put_line("Input and output file have the same name.");
                    204:           put_line("Will ignore output file name...");
                    205:           Dispatcher(argument,nullstring);
                    206:      else Dispatcher(argument,outfile);
                    207:     end if;
                    208:   end;
                    209: end Dispatch;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>