// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) package com.iambookmaster.client.iurq.logic; import com.iambookmaster.client.iurq.Core; // Referenced classes of package tge.core.logic: // LogicConstants, Variable public class If extends LogicConstants { public If(Core core1) { core = core1; } public int getType() { return 12; } public void setExp(String s) { expr = s; } public void setGoElse(int i) { elseInstr = i; } public void setGoIf(int i) { ifInstr = i; } public int getGoto() { // if (expr.equals("not хомяк")) { // expr = expr.trim(); // } if(checkExpr(expr)) { ifEnd = elseInstr; return ifInstr; } else { ifEnd = end; return elseInstr; } } public String toString() { return "<IF>->" + expr + "<- true goto " + ifInstr + ", false goto " + elseInstr + ", end if " + end; } private boolean checkExpr(String s) { s = s.trim(); int i = s.length(); if (i>2) { if (s.charAt(0)=='(' && s.charAt(i-1)==')') { //useless brackets, remove them s = s.substring(1,i-1); } } if((i = hasExpression(s,"or")) > 0) { return checkExpr(s.substring(0, i)) || checkExpr(s.substring(i + 2)); } if((i = hasExpression(s,"and")) > 0) { return checkExpr(s.substring(0, i)) && checkExpr(s.substring(i + 3)); } if((i = hasExpression(s,"not")) >= 0) { if(i == 0) { return !checkExpr(s.substring(i + 3)); } } else { if((i = s.indexOf("<=")) >= 0) { float f = core.doExpr(s.substring(0, i)); float f6 = core.doExpr(s.substring(i + 2)); return Math.round(f) <= Math.round(f6); } if((i = s.indexOf("<>")) >= 0) { float f1 = core.doExpr(s.substring(0, i)); float f7 = core.doExpr(s.substring(i + 2)); return Math.round(f1) != Math.round(f7); } if((i = s.indexOf(">=")) >= 0) { float f2 = core.doExpr(s.substring(0, i)); float f8 = core.doExpr(s.substring(i + 2)); return Math.round(f2) >= Math.round(f8); } if((i = s.indexOf("<")) >= 0) { float f3 = core.doExpr(s.substring(0, i)); float f9 = core.doExpr(s.substring(i + 1)); return Math.round(f3) < Math.round(f9); } if((i = s.indexOf(">")) >= 0) { float f4 = core.doExpr(s.substring(0, i)); float f10 = core.doExpr(s.substring(i + 1)); return Math.round(f4) > Math.round(f10); } if((i = s.indexOf("=")) >= 0) { float f5 = core.doExpr(s.substring(0, i)); float f11 = core.doExpr(s.substring(i + 1)); return Math.round(f5) == Math.round(f11); } } if(core.getInvent().get(s) != null) { return true; } i = s.indexOf(','); if (i<0) { i = s.indexOf(' '); } if(i>0) { String s1 = s.substring(0, i).trim(); String s2 = s.substring(i + 1).trim(); if(core.getInvent().get(s2) != null) { Variable variable = (Variable)core.getInvent().get(s2); try { if(variable.getInt() >= Integer.parseInt(s1)) return true; } catch (NumberFormatException e) { //TODO error return false; } } } else { Variable variable = core.getVariable(s); return variable.isEmpty()==false; } return false; } private int hasExpression(String s, String expr ) { int i = s.indexOf(expr); if (i<0) { //not exist return -1; } else if (i==0) { if (Character.isLetterOrDigit(s.charAt(i+expr.length()))) { return -1; } } else if (Character.isLetterOrDigit(s.charAt(i-1)) || Character.isLetterOrDigit(s.charAt(i+expr.length()))){ //it is a part of an identificator return -1; } return i; } public void setGoEnd(int i) { end = i; } public int getEndIf() { return ifEnd; } public int getEnd() { return end; } private String expr; private int ifInstr; private int elseInstr; private int ifEnd; private int end; private Core core; }