still visicalcing

This commit is contained in:
Denis Molony
2016-03-10 20:21:47 +11:00
parent cd9d16f0c4
commit 7a7825d470
6 changed files with 103 additions and 37 deletions

View File

@@ -0,0 +1,16 @@
package com.bytezone.diskbrowser.visicalc;
public class And extends Function
{
public And (Sheet parent, String text)
{
super (parent, text);
}
@Override
public double getValue ()
{
return 0;
}
}

View File

@@ -61,14 +61,28 @@ class Cell implements Comparable<Cell>, Value
}
// FUTURE.VC
if (address.sortValue == 67)
expressionText = "1000";
if (address.sortValue == 131)
expressionText = "10.5";
if (address.sortValue == 195)
expressionText = "12";
if (address.sortValue == 259)
expressionText = "8";
if (false)
if (address.sortValue == 67)
expressionText = "1000";
else if (address.sortValue == 131)
expressionText = "10.5";
else if (address.sortValue == 195)
expressionText = "12";
else if (address.sortValue == 259)
expressionText = "8";
// IRA.VC
if (false)
if (address.sortValue == 66)
expressionText = "10";
else if (address.sortValue == 130)
expressionText = "30";
else if (address.sortValue == 194)
expressionText = "65";
else if (address.sortValue == 258)
expressionText = "1000";
else if (address.sortValue == 386)
expressionText = "15";
}
boolean hasValue ()

View File

@@ -2,27 +2,24 @@ package com.bytezone.diskbrowser.visicalc;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class Expression implements Value
{
// Expressions:
// - number
// - cell address
// - function
// - expression [+-*/^] expression
// - [+-=] expression
// - ( expression )
// number
// cell address
// function
// expression [+-*/^] expression
// [+-=] expression
// ( expression )
// -expression
// From the reference card:
// Expressions are evaluated strictly from left to right except as modified by
// parentheses. You must start an expression with a +, a digit (0-9), or one of
// the symbols @-(. or #.
private static final Pattern pattern = Pattern.compile ("");
private boolean isUnavailable;
private boolean isError;
// @IF(D5=0,0,D9*(G5/(1-((1+G5)^-D4))
private final List<Value> values = new ArrayList<Value> ();
private final List<String> operators = new ArrayList<String> ();
@@ -31,7 +28,26 @@ public class Expression implements Value
{
String line = input.trim ();
// System.out.printf ("New expression [%s]%n", input);
System.out.printf ("New expression [%s]%n", input);
if (true)
{
int leftBracket = 0;
int rightBracket = 0;
for (char c : input.toCharArray ())
{
if (c == '(')
leftBracket++;
if (c == ')')
rightBracket++;
}
if (leftBracket != rightBracket)
{
System.out.printf ("Unbalanced brackets: left:%d, right:%d%n", leftBracket,
rightBracket);
line = "@ERROR()";
}
}
if (line.startsWith ("-"))
line = "0" + line;
@@ -54,10 +70,7 @@ public class Expression implements Value
case '(': // parentheses block
String bracketText = getFunctionText (line.substring (ptr));
ptr += bracketText.length ();
while (bracketText.startsWith ("(") && bracketText.endsWith (")"))
bracketText = bracketText.substring (1, bracketText.length () - 1);
bracketText = bracketText.substring (1, bracketText.length () - 1);
values.add (new Expression (parent, bracketText));
break;
@@ -95,13 +108,17 @@ public class Expression implements Value
}
assert values.size () > 0;
// ptr = 0;
// for (Value val : values)
// {
// System.out.println (val.getValue ());
// if (ptr < operators.size ())
// System.out.println (operators.get (ptr++));
// }
if (false)
{
ptr = 0;
for (Value val : values)
{
System.out.println (val.getValue ());
if (ptr < operators.size ())
System.out.println (operators.get (ptr++));
}
}
}
@Override

View File

@@ -25,8 +25,6 @@ import java.util.regex.Pattern;
// @ATAN
// Unimplemented functions found so far:
// @IF
// @ISERROR
// @OR
// @AND
@@ -59,6 +57,12 @@ public abstract class Function implements Value
if (text.startsWith ("@IF("))
return new If (parent, text);
if (text.startsWith ("@OR("))
return new Or (parent, text);
if (text.startsWith ("@AND("))
return new And (parent, text);
if (text.startsWith ("@ISERROR("))
return new IsError (parent, text);
@@ -107,9 +111,8 @@ public abstract class Function implements Value
range = new Range (fromAddress, toAddress);
}
if (range != null)
return range;
System.out.println ("null range : " + text);
if (range == null)
System.out.println ("null range : " + text);
return range;
}

View File

@@ -0,0 +1,16 @@
package com.bytezone.diskbrowser.visicalc;
public class Or extends Function
{
public Or (Sheet parent, String text)
{
super (parent, text);
}
@Override
public double getValue ()
{
return 0;
}
}

View File

@@ -364,7 +364,7 @@ public class Sheet implements Iterable<Cell>
heading.append ("==");
else
{
char letter1 = cellNo < 26 ? ' ' : cellNo < 676 ? 'A' : 'B';
char letter1 = cellNo < 26 ? ' ' : cellNo < 52 ? 'A' : 'B';
char letter2 = (char) ((cellNo % 26) + 'A');
String fmt =
String.format ("%s%s%%%d.%ds", letter1, letter2, (width - 2), (width - 2));