/** * $OpenXM: OpenXM/src/OpenMath/PolyCalc.java,v 1.8 2000/01/28 06:22:01 tam Exp $ */ import JP.ac.kobe_u.math.tam.OpenXM.*; import java.applet.*; import java.awt.event.*; import java.awt.*; class PolyCalc extends Applet implements ActionListener,Runnable{ private String host = "localhost"; private int ControlPort = 1200,DataPort = 1300; private OpenXM oxm; //private Button random1_button,random2_button; //private Button mul_button,remainder_button,swap_button,set_button; private TextField poly1,poly2; private TextArea textarea; private Thread thread = null; private boolean debug = false; //private Text PolyCalc(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; textarea = new TextArea(); textarea.setEditable(false); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(textarea,c); c.gridwidth = 1; add(textarea); { Label label = new Label("poly A:"); gridbag.setConstraints(label,c); add(label); } button = new Button("generate random polynomial A"); button.addActionListener(this); gridbag.setConstraints(button,c); add(button); button = new Button("A * B"); button.addActionListener(this); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(button,c); c.gridwidth = 1; add(button); poly1 = new TextField(20); poly1.addActionListener(this); c.gridwidth = 2; gridbag.setConstraints(poly1,c); c.gridwidth = 1; add(poly1); button = new Button("A % B"); button.addActionListener(this); //c.gridx = 2; //c.weightx = 0.0; gridbag.setConstraints(button,c); add(button); 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("generate random polynomial B"); button.addActionListener(this); gridbag.setConstraints(button,c); add(button); button = new Button("poly1 <= poly2"); button.addActionListener(this); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(button,c); c.gridwidth = 1; add(button); poly2 = new TextField(); c.gridwidth = 2; gridbag.setConstraints(poly2,c); c.gridwidth = 1; add(poly2); 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){ CMO tmp; Thread.yield(); switch(oxm.receiveOXtag()){ case OpenXM.OX_COMMAND: oxm.receiveSM(); break; case OpenXM.OX_DATA: tmp = oxm.receiveCMO(); textarea.append("=> "+ tmp +"\n"); break; } } }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")){ try{ debug("poly A: "+ poly1.getText()); oxm.sendCMO(new CMO_STRING("[[("+ poly1.getText() +") ("+ poly2.getText() +")] (x,y)] gb")); oxm.sendSM(new SM(SM.SM_executeStringByLocalParser)); oxm.sendSM(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(){ textarea.append("Connecting to "+ host +"("+ ControlPort +","+ DataPort +")\n"); try{ /* Runtime r = Runtime.getRuntime(); r.exec("ox -ox ox_sm1"); */ oxm = new OpenXM(host,ControlPort,DataPort); textarea.append("Connected.\n"); oxm.sendCMO(new CMO_STRING("(cohom.sm1) run ;\n")); oxm.sendSM(new SM(SM.SM_executeStringByLocalParser)); thread = new Thread(this); thread.start(); }catch(java.io.IOException e){ textarea.append("failed.\n"); stop(); }catch(MathcapViolation e){ } } private void debug(String str){ if(debug){ System.out.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; PolyCalc applet; String host = "localhost"; int DataPort = 1300, ControlPort = 1200; for(int i=0;i