mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2025-08-15 08:27:19 +00:00
still visicalcing
This commit is contained in:
16
src/com/bytezone/diskbrowser/visicalc/And.java
Normal file
16
src/com/bytezone/diskbrowser/visicalc/And.java
Normal 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;
|
||||
}
|
||||
}
|
@@ -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 ()
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
16
src/com/bytezone/diskbrowser/visicalc/Or.java
Normal file
16
src/com/bytezone/diskbrowser/visicalc/Or.java
Normal 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;
|
||||
}
|
||||
}
|
@@ -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));
|
||||
|
Reference in New Issue
Block a user