diff --git a/src/com/bytezone/diskbrowser/visicalc/Abs.java b/src/com/bytezone/diskbrowser/visicalc/Abs.java index 81f6bf7..1a719e4 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Abs.java +++ b/src/com/bytezone/diskbrowser/visicalc/Abs.java @@ -4,9 +4,9 @@ public class Abs extends Function { private final Expression source; - Abs (Sheet parent, Cell cell, String text) + Abs (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); source = new Expression (parent, cell, functionText); values.add (source); diff --git a/src/com/bytezone/diskbrowser/visicalc/Acos.java b/src/com/bytezone/diskbrowser/visicalc/Acos.java index c7ef27a..9a81a4e 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Acos.java +++ b/src/com/bytezone/diskbrowser/visicalc/Acos.java @@ -4,9 +4,9 @@ public class Acos extends Function { Value v; - Acos (Sheet parent, Cell cell, String text) + Acos (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/And.java b/src/com/bytezone/diskbrowser/visicalc/And.java index d3d84e0..bb4334c 100644 --- a/src/com/bytezone/diskbrowser/visicalc/And.java +++ b/src/com/bytezone/diskbrowser/visicalc/And.java @@ -7,9 +7,9 @@ class And extends Function { private final List conditions = new ArrayList (); - public And (Sheet parent, Cell cell, String text) + public And (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); String remainder = functionText; while (true) diff --git a/src/com/bytezone/diskbrowser/visicalc/Asin.java b/src/com/bytezone/diskbrowser/visicalc/Asin.java index cb4b1e5..a91f883 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Asin.java +++ b/src/com/bytezone/diskbrowser/visicalc/Asin.java @@ -4,9 +4,9 @@ public class Asin extends Function { Value v; - Asin (Sheet parent, Cell cell, String text) + Asin (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Atan.java b/src/com/bytezone/diskbrowser/visicalc/Atan.java index f28a376..224ac31 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Atan.java +++ b/src/com/bytezone/diskbrowser/visicalc/Atan.java @@ -4,9 +4,9 @@ public class Atan extends Function { Value v; - Atan (Sheet parent, Cell cell, String text) + Atan (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Average.java b/src/com/bytezone/diskbrowser/visicalc/Average.java index f15ff4c..745a501 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Average.java +++ b/src/com/bytezone/diskbrowser/visicalc/Average.java @@ -7,9 +7,9 @@ public class Average extends Function private final ValueList list; private final boolean isRange; // may affect how the count is done - public Average (Sheet parent, Cell cell, String text) + public Average (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); list = new ValueList (parent, cell, functionText); isRange = functionText.indexOf ("...") > 0; diff --git a/src/com/bytezone/diskbrowser/visicalc/Cell.java b/src/com/bytezone/diskbrowser/visicalc/Cell.java index f2ba522..09e2641 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Cell.java +++ b/src/com/bytezone/diskbrowser/visicalc/Cell.java @@ -38,6 +38,11 @@ class Cell extends AbstractValue implements Comparable return this.cellType == cellType; } + Sheet getParent () + { + return parent; + } + @Override public boolean isVolatile () { diff --git a/src/com/bytezone/diskbrowser/visicalc/Choose.java b/src/com/bytezone/diskbrowser/visicalc/Choose.java index 593ab32..70f147b 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Choose.java +++ b/src/com/bytezone/diskbrowser/visicalc/Choose.java @@ -7,9 +7,9 @@ public class Choose extends Function private final String rangeText; private final Value source; - Choose (Sheet parent, Cell cell, String text) + Choose (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); // int pos = functionText.indexOf (','); // sourceText = functionText.substring (0, pos); diff --git a/src/com/bytezone/diskbrowser/visicalc/Cos.java b/src/com/bytezone/diskbrowser/visicalc/Cos.java index 6976652..4accc0e 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Cos.java +++ b/src/com/bytezone/diskbrowser/visicalc/Cos.java @@ -4,9 +4,9 @@ public class Cos extends Function { Value v; - Cos (Sheet parent, Cell cell, String text) + Cos (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Count.java b/src/com/bytezone/diskbrowser/visicalc/Count.java index 2446474..0a81078 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Count.java +++ b/src/com/bytezone/diskbrowser/visicalc/Count.java @@ -7,9 +7,9 @@ class Count extends Function private final ValueList list; private final boolean isRange; - public Count (Sheet parent, Cell cell, String text) + public Count (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); list = new ValueList (parent, cell, functionText); isRange = functionText.indexOf ("...") > 0; diff --git a/src/com/bytezone/diskbrowser/visicalc/Error.java b/src/com/bytezone/diskbrowser/visicalc/Error.java index a08ba78..6b9ce61 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Error.java +++ b/src/com/bytezone/diskbrowser/visicalc/Error.java @@ -2,9 +2,9 @@ package com.bytezone.diskbrowser.visicalc; class Error extends Function { - public Error (Sheet parent, Cell cell, String text) + public Error (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); valueType = ValueType.ERROR; } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Exp.java b/src/com/bytezone/diskbrowser/visicalc/Exp.java index e4469e8..97e0d9d 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Exp.java +++ b/src/com/bytezone/diskbrowser/visicalc/Exp.java @@ -4,9 +4,9 @@ public class Exp extends Function { Value v; - Exp (Sheet parent, Cell cell, String text) + Exp (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Expression.java b/src/com/bytezone/diskbrowser/visicalc/Expression.java index 47956a3..b327fc9 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Expression.java +++ b/src/com/bytezone/diskbrowser/visicalc/Expression.java @@ -41,7 +41,7 @@ class Expression extends AbstractValue implements Iterable this.cell = cell; this.text = text; - String line = balanceBrackets (text); // add trailing right brackets if required + String line = balanceBrackets (text); // add trailing right brackets if necessary int ptr = 0; while (ptr < line.length ()) @@ -66,7 +66,7 @@ class Expression extends AbstractValue implements Iterable case '@': // function String functionText = getFunctionCall (line.substring (ptr)); ptr += functionText.length (); - values.add (Function.getInstance (parent, cell, functionText)); + values.add (parent.getFunction (cell, functionText)); break; case '(': // parentheses block @@ -116,8 +116,6 @@ class Expression extends AbstractValue implements Iterable } assert values.size () > 0; - // if (values.size () == 0) - // System.out.printf ("Nothing[%s]%n", text); } Value reduce () @@ -146,7 +144,6 @@ class Expression extends AbstractValue implements Iterable return; } - // System.out.printf (" calc %-6s %s%n", cell.getAddressText (), text); if (!isVolatile) return; @@ -331,7 +328,7 @@ class Expression extends AbstractValue implements Iterable return text.substring (0, ptr); } - // receives a string starting with the function call + // receives a string starting with the function name private String getFunctionCall (String text) { if (text.charAt (0) != '@') @@ -341,7 +338,7 @@ class Expression extends AbstractValue implements Iterable if (text.startsWith (functionName)) { if (functionName.endsWith ("(")) // if function has parameters - return getBalancedText (text); // return full function call + return getBalancedText (text); // return full function call return functionName; // return function name only } @@ -387,20 +384,6 @@ class Expression extends AbstractValue implements Iterable } return text.toString (); - - } - - @Override - public String toString () - { - return "Expression : " + text; - } - - public static void main (String[] args) - { - Expression ex = new Expression (null, null, "-5+((-4-(20-(2^3))+6/3))*-2"); - System.out.println (ex.getValue ()); - System.out.println (ex); } @Override @@ -408,4 +391,10 @@ class Expression extends AbstractValue implements Iterable { return values.iterator (); } + + @Override + public String toString () + { + return "Expression : " + text; + } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/False.java b/src/com/bytezone/diskbrowser/visicalc/False.java index 9d93d16..f4ecea0 100644 --- a/src/com/bytezone/diskbrowser/visicalc/False.java +++ b/src/com/bytezone/diskbrowser/visicalc/False.java @@ -2,9 +2,9 @@ package com.bytezone.diskbrowser.visicalc; public class False extends Function { - False (Sheet parent, Cell cell, String text) + False (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); value = 0; valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Function.java b/src/com/bytezone/diskbrowser/visicalc/Function.java index 7eb8db2..2f8f9aa 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Function.java +++ b/src/com/bytezone/diskbrowser/visicalc/Function.java @@ -16,137 +16,10 @@ abstract class Function extends AbstractValue implements Iterable protected String functionText; protected String fullText; - static Function getInstance (Sheet parent, Cell cell, String text) - { - if (text.charAt (0) != '@') - { - System.out.printf ("Unknown function: [%s]%n", text); - return new Error (parent, cell, "@ERROR"); - } - - if (text.charAt (1) == 'A') - { - if (text.startsWith ("@ABS(")) - return new Abs (parent, cell, text); - - if (text.startsWith ("@ACOS(")) - return new Acos (parent, cell, text); - - if (text.startsWith ("@AND(")) - return new And (parent, cell, text); - - if (text.startsWith ("@ASIN(")) - return new Asin (parent, cell, text); - - if (text.startsWith ("@ATAN(")) - return new Atan (parent, cell, text); - - if (text.startsWith ("@AVERAGE(")) - return new Average (parent, cell, text); - } - else if (text.charAt (1) == 'C') - { - if (text.startsWith ("@COUNT(")) - return new Count (parent, cell, text); - - if (text.startsWith ("@CHOOSE(")) - return new Choose (parent, cell, text); - - if (text.startsWith ("@COS(")) - return new Cos (parent, cell, text); - } - else if (text.charAt (1) == 'E') - { - if (text.startsWith ("@ERROR")) - return new Error (parent, cell, text); - - if (text.startsWith ("@EXP(")) - return new Exp (parent, cell, text); - } - else if (text.charAt (1) == 'F') - { - if (text.startsWith ("@FALSE")) - return new False (parent, cell, text); - } - else if (text.charAt (1) == 'I') - { - if (text.startsWith ("@IF(")) - return new If (parent, cell, text); - - if (text.startsWith ("@INT(")) - return new Int (parent, cell, text); - - if (text.startsWith ("@ISERROR(")) - return new IsError (parent, cell, text); - - if (text.startsWith ("@ISNA(")) - return new IsNa (parent, cell, text); - } - else if (text.charAt (1) == 'L') - { - if (text.startsWith ("@LOG10(")) - return new Log10 (parent, cell, text); - - if (text.startsWith ("@LOOKUP(")) - return new Lookup (parent, cell, text); - - if (text.startsWith ("@LN(")) - return new Ln (parent, cell, text); - } - else if (text.charAt (1) == 'M') - { - if (text.startsWith ("@MIN(")) - return new Min (parent, cell, text); - - if (text.startsWith ("@MAX(")) - return new Max (parent, cell, text); - } - else if (text.charAt (1) == 'N') - { - if (text.equals ("@NA")) - return new Na (parent, cell, text); - - if (text.startsWith ("@NPV(")) - return new Npv (parent, cell, text); - } - else if (text.charAt (1) == 'O') - { - if (text.startsWith ("@OR(")) - return new Or (parent, cell, text); - } - else if (text.charAt (1) == 'P') - { - if (text.startsWith ("@PI")) - return new Pi (parent, cell, text); - } - else if (text.charAt (1) == 'S') - { - if (text.startsWith ("@SIN(")) - return new Sin (parent, cell, text); - - if (text.startsWith ("@SUM(")) - return new Sum (parent, cell, text); - - if (text.startsWith ("@SQRT(")) - return new Sqrt (parent, cell, text); - } - else if (text.charAt (1) == 'T') - { - if (text.startsWith ("@TAN(")) - return new Tan (parent, cell, text); - - if (text.startsWith ("@TRUE")) - return new True (parent, cell, text); - } - - System.out.printf ("Unknown function: [%s]%n", text); - return new Error (parent, cell, "@ERROR"); - } - - Function (Sheet parent, Cell cell, String text) + Function (Cell cell, String text) { super ("Function"); - this.parent = parent; + this.parent = cell.getParent (); this.cell = cell; fullText = text; diff --git a/src/com/bytezone/diskbrowser/visicalc/If.java b/src/com/bytezone/diskbrowser/visicalc/If.java index 1e69d09..9b235b9 100644 --- a/src/com/bytezone/diskbrowser/visicalc/If.java +++ b/src/com/bytezone/diskbrowser/visicalc/If.java @@ -10,9 +10,9 @@ class If extends Function private final Expression expTrue; private final Expression expFalse; - public If (Sheet parent, Cell cell, String text) + public If (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); conditionText = Expression.getParameter (functionText); textTrue = diff --git a/src/com/bytezone/diskbrowser/visicalc/Int.java b/src/com/bytezone/diskbrowser/visicalc/Int.java index c4ba495..460c4da 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Int.java +++ b/src/com/bytezone/diskbrowser/visicalc/Int.java @@ -4,9 +4,9 @@ public class Int extends Function { Expression source; - Int (Sheet parent, Cell cell, String text) + Int (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); source = new Expression (parent, cell, functionText); values.add (source); diff --git a/src/com/bytezone/diskbrowser/visicalc/IsError.java b/src/com/bytezone/diskbrowser/visicalc/IsError.java index cb724e5..b577562 100644 --- a/src/com/bytezone/diskbrowser/visicalc/IsError.java +++ b/src/com/bytezone/diskbrowser/visicalc/IsError.java @@ -4,9 +4,9 @@ class IsError extends Function { Value expression; - public IsError (Sheet parent, Cell cell, String text) + public IsError (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); expression = new Expression (parent, cell, functionText).reduce (); } diff --git a/src/com/bytezone/diskbrowser/visicalc/IsNa.java b/src/com/bytezone/diskbrowser/visicalc/IsNa.java index c96d0ad..ddf5f99 100644 --- a/src/com/bytezone/diskbrowser/visicalc/IsNa.java +++ b/src/com/bytezone/diskbrowser/visicalc/IsNa.java @@ -4,9 +4,9 @@ public class IsNa extends Function { Value expression; - IsNa (Sheet parent, Cell cell, String text) + IsNa (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); expression = new Expression (parent, cell, functionText).reduce (); } diff --git a/src/com/bytezone/diskbrowser/visicalc/Ln.java b/src/com/bytezone/diskbrowser/visicalc/Ln.java index 39c420d..e3e3a50 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Ln.java +++ b/src/com/bytezone/diskbrowser/visicalc/Ln.java @@ -4,9 +4,9 @@ public class Ln extends Function { Value v; - Ln (Sheet parent, Cell cell, String text) + Ln (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Log10.java b/src/com/bytezone/diskbrowser/visicalc/Log10.java index 6626aa6..3051e87 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Log10.java +++ b/src/com/bytezone/diskbrowser/visicalc/Log10.java @@ -4,9 +4,9 @@ public class Log10 extends Function { Value v; - Log10 (Sheet parent, Cell cell, String text) + Log10 (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Lookup.java b/src/com/bytezone/diskbrowser/visicalc/Lookup.java index 20496c2..4f0464e 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Lookup.java +++ b/src/com/bytezone/diskbrowser/visicalc/Lookup.java @@ -7,16 +7,18 @@ class Lookup extends Function private final Expression source; private final Range range; - public Lookup (Sheet parent, Cell cell, String text) + public Lookup (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); - int pos = text.indexOf (','); + // int pos = text.indexOf (','); + sourceText = Expression.getParameter (functionText); - sourceText = text.substring (8, pos); + // sourceText = text.substring (8, pos); source = new Expression (parent, cell, sourceText); - rangeText = text.substring (pos + 1, text.length () - 1); + // rangeText = text.substring (pos + 1, text.length () - 1); + rangeText = functionText.substring (sourceText.length () + 1); range = new Range (parent, cell, rangeText); values.add (source); diff --git a/src/com/bytezone/diskbrowser/visicalc/Max.java b/src/com/bytezone/diskbrowser/visicalc/Max.java index 18db9f3..b9caf1b 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Max.java +++ b/src/com/bytezone/diskbrowser/visicalc/Max.java @@ -4,9 +4,9 @@ class Max extends Function { private final ValueList list; - public Max (Sheet parent, Cell cell, String text) + public Max (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); list = new ValueList (parent, cell, functionText); } diff --git a/src/com/bytezone/diskbrowser/visicalc/Min.java b/src/com/bytezone/diskbrowser/visicalc/Min.java index f0a480c..75be45f 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Min.java +++ b/src/com/bytezone/diskbrowser/visicalc/Min.java @@ -4,9 +4,9 @@ class Min extends Function { private final ValueList list; - public Min (Sheet parent, Cell cell, String text) + public Min (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); list = new ValueList (parent, cell, functionText); } diff --git a/src/com/bytezone/diskbrowser/visicalc/Na.java b/src/com/bytezone/diskbrowser/visicalc/Na.java index 90acde8..f21643c 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Na.java +++ b/src/com/bytezone/diskbrowser/visicalc/Na.java @@ -2,9 +2,9 @@ package com.bytezone.diskbrowser.visicalc; public class Na extends Function { - public Na (Sheet parent, Cell cell, String text) + public Na (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); valueType = ValueType.NA; } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Npv.java b/src/com/bytezone/diskbrowser/visicalc/Npv.java index 1c2e50a..0edab39 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Npv.java +++ b/src/com/bytezone/diskbrowser/visicalc/Npv.java @@ -10,9 +10,9 @@ public class Npv extends Function private final Expression rateExp; private final Range range; - Npv (Sheet parent, Cell cell, String text) + Npv (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); int pos = text.indexOf (','); valueText = text.substring (5, pos); diff --git a/src/com/bytezone/diskbrowser/visicalc/Or.java b/src/com/bytezone/diskbrowser/visicalc/Or.java index 3964bd8..ff5757b 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Or.java +++ b/src/com/bytezone/diskbrowser/visicalc/Or.java @@ -7,9 +7,9 @@ class Or extends Function { private final List conditions = new ArrayList (); - public Or (Sheet parent, Cell cell, String text) + public Or (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); String remainder = functionText; while (true) diff --git a/src/com/bytezone/diskbrowser/visicalc/Pi.java b/src/com/bytezone/diskbrowser/visicalc/Pi.java index 2f36c73..ecb8e24 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Pi.java +++ b/src/com/bytezone/diskbrowser/visicalc/Pi.java @@ -2,9 +2,9 @@ package com.bytezone.diskbrowser.visicalc; class Pi extends Function { - Pi (Sheet parent, Cell cell, String text) + Pi (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); value = Math.PI; valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Sheet.java b/src/com/bytezone/diskbrowser/visicalc/Sheet.java index 4415d5c..00e1e4f 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Sheet.java +++ b/src/com/bytezone/diskbrowser/visicalc/Sheet.java @@ -33,6 +33,8 @@ public class Sheet private int minRow = 9999; private int maxRow; + int[] functionTotals = new int[Function.functionList.length]; + // Maximum cell = BK254 //Commands: @@ -384,18 +386,37 @@ public class Sheet } } - text.append (String.format ("Global format : %s%n", globalFormat)); - text.append (String.format ("Column width : %d%n", columnWidth)); - text.append (String.format ("Recalc order : %s%n", - recalculationOrder == 'R' ? "Row" : "Column")); - text.append (String.format ("Recalculation : %s%n", - recalculation == 'A' ? "Automatic" : "Manual")); - text.append (String.format ("Cells : %d%n", size ())); + List counts = new ArrayList (); + for (int i = 0; i < functionTotals.length; i++) + if (functionTotals[i] > 0) + { + String name = Function.functionList[i]; + if (name.endsWith ("(")) + name = name.substring (0, name.length () - 1); + counts.add (String.format ("%-10s %d", name, functionTotals[i])); + } + + while (counts.size () < 18) + counts.add (""); + + text.append (String.format ("Global format : %-18s %-18s %-18s %s%n", globalFormat, + counts.get (0), counts.get (6), counts.get (12))); + text.append (String.format ("Column width : %-2d %-15s %-18s %-18s %s%n", + columnWidth, "", counts.get (1), counts.get (7), counts.get (13))); + text.append (String.format ("Recalc order : %-18s %-18s %-18s %s%n", + recalculationOrder == 'R' ? "Row" : "Column", counts.get (2), counts.get (8), + counts.get (14))); + text.append (String.format ("Recalculation : %-18s %-18s %-18s %s%n", + recalculation == 'A' ? "Automatic" : "Manual", counts.get (3), counts.get (9), + counts.get (15))); + text.append (String.format ("Cells : %-5d %-11s %-18s %-18s %s%n", size (), + "", counts.get (4), counts.get (10), counts.get (16))); if (size () > 0) - text.append (String.format ("Range : %s:%s%n%n", - Address.getCellName (minRow + 1, minColumn), - Address.getCellName (maxRow + 1, maxColumn))); + text.append (String.format ("Range : %-18s %-18s %-18s %s%n%n", + Address.getCellName (minRow + 1, minColumn) + ":" + + Address.getCellName (maxRow + 1, maxColumn), + counts.get (5), counts.get (11), counts.get (17))); else text.append ("\n\n"); @@ -470,4 +491,138 @@ public class Sheet return text.toString (); } + + Function getFunction (Cell cell, String text) + { + if (text.charAt (0) != '@') + { + System.out.printf ("Unknown function: [%s]%n", text); + return new Error (cell, "@ERROR"); + } + + for (int i = 0; i < Function.functionList.length; i++) + if (text.startsWith (Function.functionList[i])) + { + functionTotals[i]++; + break; + } + + if (text.charAt (1) == 'A') + { + if (text.startsWith ("@ABS(")) + return new Abs (cell, text); + + if (text.startsWith ("@ACOS(")) + return new Acos (cell, text); + + if (text.startsWith ("@AND(")) + return new And (cell, text); + + if (text.startsWith ("@ASIN(")) + return new Asin (cell, text); + + if (text.startsWith ("@ATAN(")) + return new Atan (cell, text); + + if (text.startsWith ("@AVERAGE(")) + return new Average (cell, text); + } + else if (text.charAt (1) == 'C') + { + if (text.startsWith ("@COUNT(")) + return new Count (cell, text); + + if (text.startsWith ("@CHOOSE(")) + return new Choose (cell, text); + + if (text.startsWith ("@COS(")) + return new Cos (cell, text); + } + else if (text.charAt (1) == 'E') + { + if (text.startsWith ("@ERROR")) + return new Error (cell, text); + + if (text.startsWith ("@EXP(")) + return new Exp (cell, text); + } + else if (text.charAt (1) == 'F') + { + if (text.startsWith ("@FALSE")) + return new False (cell, text); + } + else if (text.charAt (1) == 'I') + { + if (text.startsWith ("@IF(")) + return new If (cell, text); + + if (text.startsWith ("@INT(")) + return new Int (cell, text); + + if (text.startsWith ("@ISERROR(")) + return new IsError (cell, text); + + if (text.startsWith ("@ISNA(")) + return new IsNa (cell, text); + } + else if (text.charAt (1) == 'L') + { + if (text.startsWith ("@LOG10(")) + return new Log10 (cell, text); + + if (text.startsWith ("@LOOKUP(")) + return new Lookup (cell, text); + + if (text.startsWith ("@LN(")) + return new Ln (cell, text); + } + else if (text.charAt (1) == 'M') + { + if (text.startsWith ("@MIN(")) + return new Min (cell, text); + + if (text.startsWith ("@MAX(")) + return new Max (cell, text); + } + else if (text.charAt (1) == 'N') + { + if (text.equals ("@NA")) + return new Na (cell, text); + + if (text.startsWith ("@NPV(")) + return new Npv (cell, text); + } + else if (text.charAt (1) == 'O') + { + if (text.startsWith ("@OR(")) + return new Or (cell, text); + } + else if (text.charAt (1) == 'P') + { + if (text.startsWith ("@PI")) + return new Pi (cell, text); + } + else if (text.charAt (1) == 'S') + { + if (text.startsWith ("@SIN(")) + return new Sin (cell, text); + + if (text.startsWith ("@SUM(")) + return new Sum (cell, text); + + if (text.startsWith ("@SQRT(")) + return new Sqrt (cell, text); + } + else if (text.charAt (1) == 'T') + { + if (text.startsWith ("@TAN(")) + return new Tan (cell, text); + + if (text.startsWith ("@TRUE")) + return new True (cell, text); + } + + System.out.printf ("Unknown function: [%s]%n", text); + return new Error (cell, "@ERROR"); + } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Sin.java b/src/com/bytezone/diskbrowser/visicalc/Sin.java index eb8cd10..b760bb7 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Sin.java +++ b/src/com/bytezone/diskbrowser/visicalc/Sin.java @@ -4,9 +4,9 @@ public class Sin extends Function { Value v; - Sin (Sheet parent, Cell cell, String text) + Sin (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/Sqrt.java b/src/com/bytezone/diskbrowser/visicalc/Sqrt.java index 406fe7c..dad018e 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Sqrt.java +++ b/src/com/bytezone/diskbrowser/visicalc/Sqrt.java @@ -4,9 +4,9 @@ public class Sqrt extends Function { private final Expression source; - Sqrt (Sheet parent, Cell cell, String text) + Sqrt (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); source = new Expression (parent, cell, text.substring (5, text.length () - 1)); values.add (source); } diff --git a/src/com/bytezone/diskbrowser/visicalc/Sum.java b/src/com/bytezone/diskbrowser/visicalc/Sum.java index 00c41a2..4ebcbab 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Sum.java +++ b/src/com/bytezone/diskbrowser/visicalc/Sum.java @@ -4,9 +4,9 @@ class Sum extends Function { private final ValueList list; - public Sum (Sheet parent, Cell cell, String text) + public Sum (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); list = new ValueList (parent, cell, functionText); } diff --git a/src/com/bytezone/diskbrowser/visicalc/Tan.java b/src/com/bytezone/diskbrowser/visicalc/Tan.java index ff152a3..7b78f24 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Tan.java +++ b/src/com/bytezone/diskbrowser/visicalc/Tan.java @@ -4,9 +4,9 @@ public class Tan extends Function { Value v; - Tan (Sheet parent, Cell cell, String text) + Tan (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); v = new Expression (parent, cell, functionText).reduce (); valueType = ValueType.VALUE; diff --git a/src/com/bytezone/diskbrowser/visicalc/True.java b/src/com/bytezone/diskbrowser/visicalc/True.java index 7419ff5..1f1548b 100644 --- a/src/com/bytezone/diskbrowser/visicalc/True.java +++ b/src/com/bytezone/diskbrowser/visicalc/True.java @@ -2,9 +2,9 @@ package com.bytezone.diskbrowser.visicalc; public class True extends Function { - True (Sheet parent, Cell cell, String text) + True (Cell cell, String text) { - super (parent, cell, text); + super (cell, text); value = 1; valueType = ValueType.VALUE;