// 変数と逐次実行システムの追加 // // 2002/ 5/25 宍戸 輝光 import java.awt.*; import java.awt.event.*; class var { // 変数クラス String name; int value; var fore,next; public var(String stArg,int iArg,var vrArg1,var vrArg2) { name=new String(stArg); value=iArg; fore=vrArg1; next=vrArg2; } public var(var vrArg) { name=new String(vrArg.getName()); value=vrArg.getValue(); fore=vrArg.getFore(); next=vrArg.getNext(); } public String getName() { return name; } public int getValue() { return value; } public var getFore() { return fore; } public var getNext() { return next; } public boolean setName(String stArg) { name=stArg; return true; } public boolean setValue(int iArg) { value=iArg; return true; } public boolean setFore(var vrArg) { fore=vrArg; return true; } public boolean setNext(var vrArg) { next=vrArg; return true; } } class varList { var vrFirst,vrLast; public varList() { vrFirst=null; vrLast=null; } public var getFirst() { return vrFirst; } private boolean add(var vrArg) { if (vrArg==null) return false; if (vrFirst==null) { // 変数リストに変数が一つもなければリスト作成 vrFirst=new var(vrArg.getName(),vrArg.getValue(),null,null); vrLast=vrFirst; } else { // 変数リストの末尾に変数追加 vrLast.setNext(new var(vrArg.getName(),vrArg.getValue(),vrLast,null)); vrLast=vrLast.getNext(); } return true; } public boolean isDef(String stArg) { // 指定された変数名が定義されているか var vrIndex=vrFirst; while (vrIndex!=null) { if (vrIndex.getName().equals(stArg)) return true; vrIndex=vrIndex.getNext(); } return false; } // 指定された変数の値を返す public int get(String stArg) throws IllegalArgumentException { var vrIndex=vrFirst; while (vrIndex!=null) { if (vrIndex.getName().equals(stArg)) return vrIndex.getValue(); vrIndex=vrIndex.getNext(); } // 変数名が見つからなければ例外発生 throw new IllegalArgumentException(); } // 指定された変数に値を設定、未定義なら新規作成 public boolean set(String stArg,int iArg) { if (stArg==null || stArg.length()==0) return false; var vrIndex=vrFirst; while (vrIndex!=null) { // 値を設定する変数を決定 // リスト内変数 if (vrIndex.getName().equals(stArg)) { vrIndex.setValue(iArg); return true; } vrIndex=vrIndex.getNext(); } // リスト内に指定の変数名がなければ新規作成 add(new var(stArg,iArg,null,null)); return true; } } public class hensuu extends java.applet.Applet implements ActionListener { TextArea taEdit,taView; Button btRun,btClear; Panel pnEdit,pnCtrl,pnView; varList list=new varList(); public void init() { pnEdit=new Panel(); taEdit=new TextArea(7,48); pnEdit.add(new Label("Script")); pnEdit.add(taEdit); add(pnEdit); pnCtrl=new Panel(); btClear=new Button("C l e a r"); btClear.addActionListener(this); pnCtrl.add(btClear); btRun=new Button("R u n"); btRun.addActionListener(this); pnCtrl.add(btRun); add(pnCtrl); pnView=new Panel(); taView=new TextArea(10,48); pnView.add(new Label("Output")); pnView.add(taView); add(pnView); } public void actionPerformed(ActionEvent e) { if (e.getSource()==btClear) // Clearボタンクリックイベント taView.setText(""); if (e.getSource()==btRun) // Runボタンクリックイベント run(taEdit.getText()); } private void run(String stArg) { // スクリプト実行 list=new varList(); // 変数リスト初期化 // スクリプトを行ごとに配列に格納 String stLines[]=split(stArg,'\n'); // 各行を1行毎に実行 for (int i=0;i