/** * $OpenXM: OpenXM/src/OpenMath/elimi.java,v 1.6 2000/10/11 08:32:13 ohara Exp $ */ import JP.ac.kobe_u.math.tam.OpenXM.*; import java.applet.*; import java.awt.event.*; import java.awt.*; import java.util.Vector; class elimi extends Applet implements ActionListener,Runnable{ private String host = "localhost"; private int ControlPort = 1200,DataPort = 1300; private OpenXM oxm; private TextField poly1,poly2; private TextArea input,output; private Thread thread = null; private boolean debug = false; elimi(String host,int ControlPort,int DataPort){ this.host = host; this.ControlPort = ControlPort; this.DataPort = DataPort; } public void init(){ GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); Button button; //setFont(); setLayout(gridbag); c.fill = GridBagConstraints.BOTH; { Label label = new Label("input polynomials"); c.gridwidth = 2; gridbag.setConstraints(label,c); c.gridwidth = 1; add(label); label = new Label("outputs"); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(label,c); c.gridwidth = 1; add(label); } input = new TextArea(10,40); input.setEditable(true); c.gridwidth = 2; gridbag.setConstraints(input,c); c.gridwidth = 1; add(input); output = new TextArea(10,40); output.setEditable(false); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(output,c); c.gridwidth = 1; add(output); poly1 = new TextField(20); poly1.addActionListener(this); c.gridwidth = 2; gridbag.setConstraints(poly1,c); c.gridwidth = 1; add(poly1); button = new Button("swap A & B"); button.addActionListener(this); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(button,c); c.gridwidth = 1; add(button); { Label label = new Label("poly B:"); gridbag.setConstraints(label,c); add(label); } button = new Button("poly1 <= poly2"); button.addActionListener(this); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(button,c); c.gridwidth = 1; add(button); button = new Button("grobner base"); button.addActionListener(this); gridbag.setConstraints(button,c); add(button); button = new Button("quit"); button.addActionListener(this); gridbag.setConstraints(button,c); add(button); } public void run(){ // for debug try{ while(true){ OXmessage tmp; Thread.yield(); tmp = oxm.receive(); System.err.println("=> "+ tmp); } }catch(java.io.IOException e){} } public void actionPerformed(ActionEvent evt) { String arg = evt.getActionCommand(); debug("press \""+ arg +"\" button."); if(arg.equals("quit")){ }else if(arg.equals("grobner base")){ Vector polys = new Vector(),variables = new Vector(); try{ java.io.StringReader in = new java.io.StringReader(input.getText()); String poly,variable,com; char a = 0; while(a != (char)-1){ poly = ""; variable = ""; while((a=(char)in.read()) != (char)-1 && a != '\n'){ //debug("read :"+(int)a); if(Character.isLetter(a) || (Character.isDigit(a) && !variable.equals(""))){ variable += a; }else if(!variable.equals("")){ debug("add variable:" + variable); variables.addElement(variable); variable = ""; } if(!Character.isWhitespace(a)){ poly += a; } } if(!variable.equals("")){ debug("add variable:" + variable); variables.addElement(variable); } if(!poly.equals("")){ debug("read poly:"+ poly); polys.addElement(poly); } } debug("poly A: "+ poly1.getText()); com = "[["; while(!polys.isEmpty()){ com += "("+ polys.elementAt(0) +")"; polys.removeElementAt(0); if(!polys.isEmpty()){ com += " "; } } com += "] ("; while(!variables.isEmpty()){ Object tmp = variables.elementAt(0); com += tmp; while(variables.removeElement(tmp)){}; if(!variables.isEmpty()){ com += ","; } } com += ")] gb"; debug("command: "+ com); oxm.send(new CMO_STRING(com)); oxm.send(new SM(SM.SM_executeStringByLocalParser)); oxm.send(new SM(SM.SM_popString)); }catch(java.io.IOException e){ }catch(MathcapViolation e){ } } /* if ("first".equals(arg)) { ((CardLayout)cards.getLayout()).first(cards); } else if ("next".equals(arg)) { ((CardLayout)cards.getLayout()).next(cards); } else if ("previous".equals(arg)) { ((CardLayout)cards.getLayout()).previous(cards); } else if ("last".equals(arg)) { ((CardLayout)cards.getLayout()).last(cards); } else { ((CardLayout)cards.getLayout()).show(cards,(String)arg); } */ } public void start(){ System.err.println("Connecting to "+ host +"("+ ControlPort +","+ DataPort +")"); try{ Runtime runtime = Runtime.getRuntime(); runtime.exec("sh -c \"xterm -name $OpenXM_HOME\""); //runtime.getInputstream(); //runtime.getOutput(); //runtime.exec("sh -c \"/home/tam/OpenXM/lib/sm1/bin/oxlog /usr/X11R6/bin/xterm -name echo ${OpenXM_HOME} /home/tam/OpenXM/lib/sm1/bin/ox -ox /home/tam/OpenXM/lib/sm1/bin/ox_sm1_forAsir -data "+ DataPort +" -control "+ ControlPort +"\""); Thread.sleep(3000); oxm = new OpenXM(host,ControlPort,DataPort); System.err.println("Connected."); oxm.send(new CMO_STRING("(cohom.sm1) run ;\n")); oxm.send(new SM(SM.SM_executeStringByLocalParser)); thread = new Thread(this); thread.start(); }catch(Exception e){ System.err.println("failed."); stop(); } } private void debug(String str){ if(debug){ System.err.println(str); } } private static String usage(){ String ret = ""; ret += "usage\t: java PolyCalc [options]\n"; ret += "options\t:\n"; ret += "\t -h \t show this message\n"; ret += "\t -host hostname \t (default localhost)\n"; ret += "\t -data port \t (default 1300)\n"; ret += "\t -control port \t (default 1200)\n"; ret += "\t -debug \t display debug message\n"; return ret; } public static void main(String argv[]){ Frame frame = new Frame("Polynomial Calculator"); //Applet applet; elimi applet; String host = "localhost"; int DataPort = 1300, ControlPort = 1200; for(int i=0;i