diff --git a/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java b/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java index e850aa6..2964b3d 100644 --- a/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java +++ b/src/com/bytezone/diskbrowser/visicalc/AbstractValue.java @@ -8,7 +8,7 @@ public abstract class AbstractValue implements Value//, Iterable { protected static final String FMT2 = "| %-9.9s : %-70.70s|%n"; protected static final String FMT4 = "| %-9.9s : %-50.50s %-8.8s %-10.10s|%n"; - protected static final String FMT5 = "| %-9.9s : %-3.3s : %-45.45s%-8.8s %-10.10s|%n"; + protected static final String FMT5 = "| %-9.9s : %-39.39s %-10.10s %-8.8s %-10.10s|%n"; protected static final String LINE = "+--------------------------------------------" + "---------------------------------------+"; @@ -75,25 +75,7 @@ public abstract class AbstractValue implements Value//, Iterable @Override public String getText () { - switch (valueResult) - { - case NA: - return "NA"; - case ERROR: - return "ERROR"; - case VALID: - switch (valueType) - { - case BOOLEAN: - return bool ? "TRUE" : "FALSE"; - case NUMBER: - return value + ""; - default: - return "impossible"; - } - default: - return "impossible"; - } + return valueResult == ValueResult.VALID ? getValueText (this) : valueResult + ""; } @Override @@ -112,8 +94,8 @@ public abstract class AbstractValue implements Value//, Iterable protected String getValueText (Value value) { - return "" + (value.getValueType () == ValueType.NUMBER ? value.getDouble () - : value.getBoolean ()); + return value.getValueType () == ValueType.NUMBER ? value.getDouble () + "" + : value.getBoolean () ? "TRUE" : "FALSE"; } @Override diff --git a/src/com/bytezone/diskbrowser/visicalc/And.java b/src/com/bytezone/diskbrowser/visicalc/And.java index 340ccfe..8b0308c 100644 --- a/src/com/bytezone/diskbrowser/visicalc/And.java +++ b/src/com/bytezone/diskbrowser/visicalc/And.java @@ -11,6 +11,8 @@ class And extends ConditionListFunction @Override public void calculate () { + valueResult = ValueResult.VALID; + for (Value condition : conditions) { condition.calculate (); @@ -27,6 +29,7 @@ class And extends ConditionListFunction return; } } + bool = true; } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/BooleanFunction.java b/src/com/bytezone/diskbrowser/visicalc/BooleanFunction.java index 8b3a2bd..e402d20 100644 --- a/src/com/bytezone/diskbrowser/visicalc/BooleanFunction.java +++ b/src/com/bytezone/diskbrowser/visicalc/BooleanFunction.java @@ -13,12 +13,6 @@ public class BooleanFunction extends Function valueType = ValueType.BOOLEAN; } - @Override - public boolean getBoolean () - { - return bool; - } - @Override public String getType () { diff --git a/src/com/bytezone/diskbrowser/visicalc/Cell.java b/src/com/bytezone/diskbrowser/visicalc/Cell.java index 88206e8..e7c3d6f 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Cell.java +++ b/src/com/bytezone/diskbrowser/visicalc/Cell.java @@ -16,9 +16,9 @@ class Cell implements Value, Comparable private boolean calculated; private CellType cellType; - private String repeatingText; // REPEATING_CHARACTER - private String label; // LABEL - private Value value; // VALUE + private String repeatingText; // CellType.FILLER + private String label; // CellType.LABEL + private Value value; // CellType.VALUE enum CellType { @@ -46,28 +46,31 @@ class Cell implements Value, Comparable if (formatText.startsWith ("/-")) { + assert cellType == CellType.EMPTY; repeatingText = formatText.substring (2); + for (int i = 0; i < 20; i++) repeat += repeatingText; cellType = CellType.FILLER; + return; } System.out.printf ("Unexpected format [%s]%n", formatText); } - void setValue (String command) + void setValue (String valueText) { assert cellType == CellType.EMPTY; - if (!command.isEmpty () && command.charAt (0) == '"') + if (!valueText.isEmpty () && valueText.charAt (0) == '"') { - label = command.substring (1); + label = valueText.substring (1); cellType = CellType.LABEL; } else { - fullText = command; + fullText = valueText; cellType = CellType.VALUE; try { @@ -330,6 +333,7 @@ class Cell implements Value, Comparable { String contents = ""; String contents2 = ""; + String valueTypeText = ""; String valueText = ""; String line2 = ""; String rest = ""; @@ -347,19 +351,21 @@ class Cell implements Value, Comparable break; case VALUE: contents = fullText; - valueText = ": " + value.getValueType (); + valueTypeText = value.getValueType () + ""; rest = value.toString (); + valueText = value.getText (); break; } - if (contents.length () > 50) + if (contents.length () > 39) { - contents2 = contents.substring (50); - contents = contents.substring (0, 50); + contents2 = contents.substring (39); + contents = contents.substring (0, 39); line2 = String.format ("| %-70.70s|%n", contents2); } - return String.format ("%s%n| %-9.9s : %-50.50s %-18.18s |%n%s%s", AbstractValue.LINE, - address.getText (), contents, cellType + valueText, line2, rest); + String single = String.format (AbstractValue.FMT5, address.getText (), contents, + cellType, valueTypeText, valueText); + return String.format ("%s%n%s%s%s", AbstractValue.LINE, single, line2, rest); } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Expression.java b/src/com/bytezone/diskbrowser/visicalc/Expression.java index 114cacd..5d6ee1b 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Expression.java +++ b/src/com/bytezone/diskbrowser/visicalc/Expression.java @@ -331,8 +331,8 @@ class Expression extends AbstractValue { StringBuilder text = new StringBuilder (); text.append (String.format ("%s%n", LINE)); - text.append ( - String.format (FMT4, "Exprss", getFullText (), valueType, getValueText (this))); + text.append (String.format (FMT4, "Exprssion", getFullText (), valueType, + getValueText (this))); int index = 0; for (Value value : values) { diff --git a/src/com/bytezone/diskbrowser/visicalc/Function.java b/src/com/bytezone/diskbrowser/visicalc/Function.java index 61a6ce6..9e1b45d 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Function.java +++ b/src/com/bytezone/diskbrowser/visicalc/Function.java @@ -5,8 +5,8 @@ abstract class Function extends AbstractValue static final String[] functionList = { "@ABS(", "@ACOS(", "@AND(", "@ASIN(", "@ATAN(", "@AVERAGE(", "@COUNT(", "@CHOOSE(", "@COS(", "@ERROR", "@EXP(", "@FALSE", "@IF(", "@INT(", "@ISERROR(", - "@ISNA(", "@LOG10(", "@LOOKUP(", "@LN(", "@MIN(", "@MAX(", "@NA", "@NPV(", "@OR(", - "@PI", "@SIN(", "@SUM(", "@SQRT(", "@TAN(", "@TRUE" }; + "@ISNA(", "@LOG10(", "@LOOKUP(", "@LN(", "@MIN(", "@MAX(", "@NA", "@NOT(", + "@NPV(", "@OR(", "@PI", "@SIN(", "@SUM(", "@SQRT(", "@TAN(", "@TRUE" }; protected final String functionName; protected final String functionText; diff --git a/src/com/bytezone/diskbrowser/visicalc/Not.java b/src/com/bytezone/diskbrowser/visicalc/Not.java new file mode 100644 index 0000000..a2bb4de --- /dev/null +++ b/src/com/bytezone/diskbrowser/visicalc/Not.java @@ -0,0 +1,25 @@ +package com.bytezone.diskbrowser.visicalc; + +public class Not extends BooleanFunction +{ + Not (Cell cell, String text) + { + super (cell, text); + assert text.startsWith ("@NOT(") : text; + } + + @Override + public void calculate () + { + source.calculate (); + + if (source.getValueType () != ValueType.BOOLEAN) + { + valueResult = ValueResult.ERROR; + return; + } + + bool = !source.getBoolean (); + valueResult = ValueResult.VALID; + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Or.java b/src/com/bytezone/diskbrowser/visicalc/Or.java index 677fc8a..6c612b1 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Or.java +++ b/src/com/bytezone/diskbrowser/visicalc/Or.java @@ -11,6 +11,8 @@ class Or extends ConditionListFunction @Override public void calculate () { + valueResult = ValueResult.VALID; + for (Value condition : conditions) { condition.calculate (); @@ -27,6 +29,7 @@ class Or extends ConditionListFunction return; } } + bool = false; } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Sheet.java b/src/com/bytezone/diskbrowser/visicalc/Sheet.java index 668e4bf..23523ac 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Sheet.java +++ b/src/com/bytezone/diskbrowser/visicalc/Sheet.java @@ -402,22 +402,22 @@ public class Sheet counts.add (""); text.append (String.format ("+%-83.83s+%n", underline)); - text.append (String.format ("| Global format : %-18s %-14s %-14s %-14s |%n", + text.append (String.format ("| Global format : %-18s %-14s %-14s %-14s |%n", globalFormat, counts.get (0), counts.get (6), counts.get (12))); - text.append (String.format ("| Column width : %-2d %-15s %-14s %-14s %-14s |%n", + text.append (String.format ("| Column width : %-2d %-15s %-14s %-14s %-14s |%n", columnWidth, "", counts.get (1), counts.get (7), counts.get (13))); - text.append (String.format ("| Recalc order : %-18s %-14s %-14s %-14s |%n", + text.append (String.format ("| Recalc order : %-18s %-14s %-14s %-14s |%n", recalculationOrder == 'R' ? "Row" : "Column", counts.get (2), counts.get (8), counts.get (14))); - text.append (String.format ("| Recalculation : %-18s %-14s %-14s %-14s |%n", + text.append (String.format ("| Recalculation : %-18s %-14s %-14s %-14s |%n", recalculation == 'A' ? "Automatic" : "Manual", counts.get (3), counts.get (9), counts.get (15))); - text.append (String.format ("| Cells : %-5d %-11s %-14s %-14s %-14s |%n", + text.append (String.format ("| Cells : %-5d %-11s %-14s %-14s %-14s |%n", size (), "", counts.get (4), counts.get (10), counts.get (16))); String rangeText = size () > 0 ? Address.getCellName (minRow + 1, minColumn) + ":" + Address.getCellName (maxRow + 1, maxColumn) : ""; - text.append (String.format ("| Range : %-18s %-14s %-14s %-14s |%n", + text.append (String.format ("| Range : %-18s %-14s %-14s %-14s |%n", rangeText, counts.get (5), counts.get (11), counts.get (17))); text.append (String.format ("+%-83.83s+%n", underline)); } @@ -583,27 +583,30 @@ public class Sheet return new Na (cell, text); case 22: - return new Npv (cell, text); + return new Not (cell, text); case 23: - return new Or (cell, text); + return new Npv (cell, text); case 24: - return new Pi (cell, text); + return new Or (cell, text); case 25: - return new Sin (cell, text); + return new Pi (cell, text); case 26: - return new Sum (cell, text); + return new Sin (cell, text); case 27: - return new Sqrt (cell, text); + return new Sum (cell, text); case 28: - return new Tan (cell, text); + return new Sqrt (cell, text); case 29: + return new Tan (cell, text); + + case 30: return new True (cell, text); default: