These are some small BASIC programs I wrote for solving some common microwave engineering problems with the TI-84 Plus.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1290 lines
31 KiB

/*
* Copyright (c) 2011 Matthew Iselin
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <map>
#include <string>
#include <string.h>
#include "tibasic.h"
using namespace std;
/// Describes a potential token to be read by the compiler
struct Token {
/// The compiled byte for the token
unsigned char data;
/// The actual text to be converted by the interpreter
const char* text;
};
/// A two byte token (0xBB, 0x7E and SysVar)
struct TwoByte {
unsigned short data;
const char* text;
};
/// Direct ASCII character to token conversion.
struct ConvertRule {
char c; // the character
unsigned char tok; // the equivalent token
};
/// References to lists defined after functions.
extern struct Token StandardTokens[199];
extern struct TwoByte CalcVars[302];
extern struct ConvertRule Replacements[39];
/// string -> token mapping
map<string, token_t> g_TokenLookup;
/// token -> string mapping
map<unsigned short, string> g_ReverseLookup;
/// Longest input string possible
size_t g_LongestInput = 0;
/// Shiny little template function that returns the size of an array.
template <typename T, int N> size_t arrayLen(T(&)[N]){return N;}
/// Initialises the token map
void initialiseTokens()
{
// Iterate the main token list first.
for(size_t i = 0; i < arrayLen(StandardTokens); i++)
{
token_t value;
value.token = StandardTokens[i].data;
value.sz = sizeof(StandardTokens[i].data);
size_t len = strlen(StandardTokens[i].text);
if(len > g_LongestInput)
g_LongestInput = len;
string s = string(StandardTokens[i].text);
g_TokenLookup[s] = value;
g_ReverseLookup[value.token] = s;
}
// Now iterate the two-byte tokens.
for(size_t i = 0; i < (sizeof(CalcVars) / sizeof(Token)); i++)
{
token_t value;
value.token = CalcVars[i].data;
value.sz = sizeof(CalcVars[i].data);
size_t len = strlen(CalcVars[i].text);
if(len > g_LongestInput)
g_LongestInput = len;
string s = string(CalcVars[i].text);
g_TokenLookup[s] = value;
g_ReverseLookup[value.token] = s;
}
// Finally, iterate single-character tokens.
for(size_t i = 0; i < (sizeof(Replacements) / sizeof(ConvertRule)); i++)
{
token_t value;
value.token = Replacements[i].tok;
value.sz = sizeof(Replacements[i].tok);
char c[] = {Replacements[i].c, 0};
string s = c;
g_TokenLookup[s] = value;
g_ReverseLookup[value.token] = s;
}
}
size_t getLongestToken()
{
return g_LongestInput;
}
/// Perform a lookup
bool lookupToken(string in, token_t &ret)
{
if(in.length() > g_LongestInput)
return false;
if(g_TokenLookup.find(in) == g_TokenLookup.end())
return false;
ret = g_TokenLookup[in];
return true;
}
bool lookupToken(unsigned short in, string &out)
{
if(g_ReverseLookup.find(in) == g_ReverseLookup.end())
return false;
out = g_ReverseLookup[in];
return true;
}
// Token List
#define TO_DMS 0x01
#define TO_DEC 0x02
#define TO_FRAC 0x03
#define STORE 0x04
#define BOXPLOT 0x05
#define LEFTSBRACK 0x06
#define RIGHTSBRACK 0x07
#define LEFTBRACE 0x08
#define RIGHTBRACE 0x09
#define RADIANS 0x0A
#define DEGREES 0x0B
#define INVERSE 0x0C
#define SQUARE 0x0D
#define TRANSPOSE 0x0E
#define CUBE 0x0F
#define LEFTBRACKET 0x10
#define RIGHTBRACKET 0x11
#define ROUND 0x12
#define PXLTEST 0x13
#define AUGMENT 0x14
#define ROWSWAP 0x15
#define ROWPLUS 0x16
#define STARROW 0x17
#define STARROWPLUS 0x18
#define MAX 0x19
#define MIN 0x1B
#define MEDIAN 0x1F
#define RANDM 0x20
#define MEAN 0x21
#define SOLVE 0x22
#define SEQFUNC 0x23
#define FNINT 0x24
#define NDERIV 0x25
#define FMIN 0x27
#define FMAX 0x28
#define SPACE 0x29
#define DOUBLEQUOTE 0x2A
#define COMMA 0x2B
#define IMAG_I 0x2C
#define FACTORIAL 0x2D
#define CUBICREG 0x2E
#define QUARTREG 0x2F
#define NUM_0 0x30
#define NUM_1 0x31
#define NUM_2 0x32
#define NUM_3 0x33
#define NUM_4 0x34
#define NUM_5 0x35
#define NUM_6 0x36
#define NUM_7 0x37
#define NUM_8 0x38
#define NUM_9 0x39
#define PERIOD 0x3A
#define EXPONENT 0x3B
#define LOGIC_OR 0x3C
#define LOGIC_XOR 0x3D
#define COLON 0x3E
#define HARD_RETURN 0x3F
#define LOGIC_AND 0x40
#define STR_A 0x41
#define STR_B 0x42
#define STR_C 0x43
#define STR_D 0x44
#define STR_E 0x45
#define STR_F 0x46
#define STR_G 0x47
#define STR_H 0x48
#define STR_I 0x49
#define STR_J 0x4A
#define STR_K 0x4B
#define STR_L 0x4C
#define STR_M 0x4D
#define STR_N 0x4E
#define STR_O 0x4F
#define STR_P 0x50
#define STR_Q 0x51
#define STR_R 0x52
#define STR_S 0x53
#define STR_T 0x54
#define STR_U 0x55
#define STR_V 0x56
#define STR_W 0x57
#define STR_X 0x58
#define STR_Y 0x59
#define STR_Z 0x5A
#define STR_THETA 0x5B
#define PROGRAM 0x5F
/** SysVar **/
#define RADIAN 0x64
#define DEGREE 0x65
#define NORMAL 0x66
#define SCI 0x67
#define ENG 0x68
#define FLOAT 0x69
#define TEST_EQUAL 0x6A
#define TEST_LESSTHAN 0x6B
#define TEST_HIGHTHAN 0x6C
#define TEST_LOREQU 0x6D
#define TEST_GOREQU 0x6E
#define TEST_NOTEQUAL 0x6F
#define ADD 0x70
#define SUBTRACT 0x71
#define ANSWER 0x72
#define FIX 0x73
#define HORIZ 0x74
#define FULL 0x75
#define FUNC 0x76
#define PARAM 0x77
#define POLAR 0x78
#define SEQ 0x79
#define INDPNTAUTO 0x7A
#define INDPNTASK 0x7B
#define DEPENDAUTO 0x7C
#define DEPENDASK 0x7D
/** 7E VARIABLES, ie. graph manipulation **/
#define BOX 0x7F
#define DIVIDE 0x80
#define DOT 0x81
#define MULTIPLY 0x82
#define DIVIDE_SLASH 0x83
#define TRACE 0x84
#define CLRDRAW 0x85
#define ZSTANDARD 0x86
#define ZTRIG 0x87
#define ZBOX 0x88
#define ZOOMIN 0x89
#define ZOOMOUT 0x8A
#define ZSQUARE 0x8B
#define ZINTEGER 0x8C
#define ZPREVIOUS 0x8D
#define ZDECIMAL 0x8E
#define ZOOMSTAT 0x8F
#define ZOOMRCL 0x90
#define PRINTSCREEN 0x91
#define ZOOMSTO 0x92
#define TEXTFUNC 0x93
#define NPR 0x94
#define NCR 0x95
#define FNON 0x96
#define FNOFF 0x97
#define STOREPIC 0x98
#define RECALLPIC 0x99
#define STOREGDB 0x9A
#define RECALLGDB 0x9B
#define LINE 0x9C
#define VERTICAL 0x9D
#define PTON 0x9E
#define PTOFF 0x9F
#define PTCHANGE 0xA0
#define PXLON 0xA1
#define PXLOFF 0xA2
#define PXLCHANGE 0xA3
#define SHADE 0xA4
#define CIRCLE 0xA5
#define HORIZONTAL 0xA6
#define TANGENT 0xA7
#define DRAWINV 0xA8
#define DRAWF 0xA9
#define RAND 0xAB
#define PI 0xAC
#define GETKEY 0xAD
#define APOSTROPHE 0xAE
#define QUESTIONMARK 0xAF
/** SysVar **/
#define NEGATIVE 0xB0
#define CONV_INT 0xB1
#define ABS 0xB2
#define DETERMINANT 0xB3
#define IDENTITY 0xB4
#define DIM 0xB5
#define SUM 0xB6
#define PROD 0xB7
#define NOT 0xB8
#define IPART 0xB9
#define FPART 0xBA
/** BB tokens **/
#define SQR_ROOT 0xBC
#define CUBE_ROOT 0xBD
#define NATLOG 0xBE
#define ETOPOWER 0xBF
#define LOGARITHM 0xC0
#define POWER10 0xC1
#define SINE 0xC2
#define INVSIN 0xC3
#define COSINE 0xC4
#define INVCOSINE 0xC5
#define TANGENT_TRIG 0xC6
#define INVTANGENT 0xC7
#define HYP_SINE 0xC8
#define HYP_ISINE 0xC9
#define HYP_COSINE 0xCA
#define HYP_ICOSINE 0xCB
#define HYP_TANGENT 0xCC
#define HYP_ITANGENT 0xCD
#define LOGIC_IF 0xCE
#define LOGIC_THEN 0xCF
#define LOGIC_ELSE 0xD0
#define CTL_WHILE 0xD1
#define CTL_REPEAT 0xD2
#define CTL_FOR 0xD3
#define CTL_END 0xD4
#define CTL_RETURN 0xD5
#define LABEL 0xD6
#define CTL_GOTO 0xD7
#define CTL_PAUSE 0xD8
#define CTL_STOP 0xD9
#define INCSKIPIFHIGH 0xDA
#define DECSKIPIFLOW 0xDB
#define INPUT 0xDC
#define PROMPT 0xDD
#define DISP 0xDE
#define DISPGRAPH 0xDF
#define OUTPUT 0xE0
#define CLRHOME 0xE1
#define FILL 0xE2
#define SORTA 0xE3
#define SORTD 0xE4
#define DISPTABLE 0xE5
#define MENU 0xE6
#define SEND 0xE7
#define GET 0xE8
#define PLOTSON 0xE9
#define PLOTSOFF 0xEA
#define LIST 0xEB
#define PLOT1 0xEC
#define PLOT2 0xED
#define PLOT3 0xEE
#define POWEROF 0xF0
#define XTHROOT 0xF1
#define VARSTATS_1 0xF2
#define VARSTATS_2 0xF3
#define LINREG1 0xF4
#define EXPREG 0xF5
#define LNREG 0xF6
#define PWRREG 0xF7
#define MEDMED 0xF8
#define QUADREG 0xF9
#define CLRLIST 0xFA
#define CLRTABLE 0xFB
#define HISTOGRAM 0xFC
#define XYLINE 0xFD
#define SCATTER 0xFE
#define LINREG2 0xFF
/** SYSTEM VARIABLES **/
// Matrices
#define MAT_A 0x005C
#define MAT_B 0x015C
#define MAT_C 0x025C
#define MAT_D 0x035C
#define MAT_E 0x045C
#define MAT_F 0x055C
#define MAT_G 0x065C
#define MAT_H 0x075C
#define MAT_I 0x085C
#define MAT_J 0x095C
// Lists
#define L1 0x005D
#define L2 0x015D
#define L3 0x025D
#define L4 0x035D
#define L5 0x045D
#define L6 0x055D
#define L7 0x065D
#define L8 0x075D
#define L9 0x085D
#define L0 0x095D
// Graph (function)
#define Y1 0x105E
#define Y2 0x115E
#define Y3 0x125E
#define Y4 0x135E
#define Y5 0x145E
#define Y6 0x155E
#define Y7 0x165E
#define Y8 0x175E
#define Y9 0x185E
#define Y0 0x195E
// Graph (parametric)
#define X1T 0x205E
#define Y1T 0x215E
#define X2T 0x225E
#define Y2T 0x235E
#define X3T 0x245E
#define Y3T 0x255E
#define X4T 0x265E
#define Y4T 0x275E
#define X5T 0x285E
#define Y5T 0x295E
#define X6T 0x2A5E
#define Y6T 0x2B5E
// Graph (polar)
#define R1 0x405E
#define R2 0x415E
#define R3 0x425E
#define R4 0x435E
#define R5 0x445E
#define R6 0x455E
#define SYSVAR_U 0x805E
#define SYSVAR_V 0x815E
// Pictures
#define PIC1 0x0060
#define PIC2 0x0160
#define PIC3 0x0260
#define PIC4 0x0360
#define PIC5 0x0460
#define PIC6 0x0560
#define PIC7 0x0660
#define PIC8 0x0760
#define PIC9 0x0860
#define PIC0 0x0960
// Graph databases
#define GDB1 0x0061
#define GDB2 0x0161
#define GDB3 0x0261
#define GDB4 0x0361
#define GDB5 0x0461
#define GDB6 0x0561
#define GDB7 0x0661
#define GDB8 0x0761
#define GDB9 0x0861
#define GDB0 0x0961
// Stat data
#define REGEQ 0x0162
#define STAT_N 0x0262
#define MEANX 0x0362
#define SUMX 0x0462
#define SUMXSQUARED 0x0562
#define SX 0x0662
#define SIGMAX 0x0762
#define MINX 0x0862
#define MAXX 0x0962
#define MINY 0x0A62
#define MAXY 0x0B02
#define MEANY 0x0C62
#define SUMY 0x0D62
#define SUMYSQUARED 0x0E62
#define SY 0x0F62
#define SIGMAY 0x1062
#define SUMXY 0x1162
#define SYSVAR_R 0x1262
#define MED 0x1362
#define Q1 0x1462
#define Q3 0x1562
#define SYSVAR_A 0x1662
#define SYSVAR_B 0x1762
#define SYSVAR_C 0x1862
#define SYSVAR_D 0x1962
#define SYSVAR_E 0x1A62
#define X1 0x1B62
#define X2 0x1C62
#define X3 0x1D62
#define Y1_1 0x1E62
#define Y2_1 0x1F62
#define Y3_1 0x2062
#define SYSVAR_N 0x2162
#define SYSVAR_P 0x2262
#define SYSVAR_Z 0x2362
#define SYSVAR_T 0x2462
#define CHISQUARED 0x2562
#define FIN 0x2662
#define DF 0x2762
#define PHAT 0x2862
#define PHAT1 0x2962
#define PHAT2 0x2A62
#define MEANX1 0x2B62
#define SX1 0x2C62
#define N1 0x2D62
#define MEANX2 0x2E62
#define SX2 0x2F62
#define N2 0x3062
#define SXP 0x3162
#define LOWER 0x3262
#define UPPER 0x3362
#define SYSVAR_S 0x3462
#define RSQUARED 0x3562
#define CAPRSQUARED 0x3662
#define DF2 0x3762 // not sure about this one
#define SS 0x3862
#define MS 0x3962
#define DF3 0x3A62 // again here?
#define SS1 0x3B62 // another double
#define MS1 0x3C62 // " "
// Graph data
#define ZXSCL 0x0063
#define ZYSCL 0x0163
#define XSCL 0x0263
#define YSCL 0x0363
#define UNSTART 0x0463
#define VNSTART 0x0563
#define UNINVERSE 0x0663
#define VNINVERSE 0x0763
#define ZUNSTART 0x0863
#define ZVNSTART 0x0963
#define XMIN 0x0A63
#define XMAX 0x0B63
#define YMIN 0x0C63
#define YMAX 0x0D63
#define TMIN 0x0E63
#define TMAX 0x0F63
#define THETAMIN 0x1063
#define THETAMAX 0x1163
#define ZXMIN 0x1263
#define ZXMAX 0x1363
#define ZYMIN 0x1463
#define ZYMAX 0x1563
#define ZTHETAMIN 0x1663
#define ZTHETAMAX 0x1763
#define ZTMIN 0x1863
#define ZTMAX 0x1963
#define TBLMIN 0x1A63
#define NMIN 0x1B63
#define ZNMIN 0x1C63
#define NMAX 0x1D63
#define ZNMAX 0x1E63
#define NSTART 0x1F63
#define ZNSTART 0x2063
#define DELTATABLE 0x2163
#define TSTEP 0x2263
#define THETASTEP 0x2363
#define ZTSTEP 0x2463
#define ZTHETASTEP 0x2563
#define DELTAX 0x2663
#define DELTAY 0x2763
#define XFACT 0x2863
#define YFACT 0x2963
#define TBLINPUT 0x2A63
#define SYSVAR_CAPN 0x2B63
#define IPERCENT 0x2C63
#define PV 0x2D63
#define PMT 0x2E63
#define FV 0x2F63
#define XRES 0x3063
#define ZXRES 0x3163
// Strings
#define STR1 0x00AA
#define STR2 0x01AA
#define STR3 0x02AA
#define STR4 0x03AA
#define STR5 0x04AA
#define STR6 0x05AA
#define STR7 0x06AA
#define STR8 0x07AA
#define STR9 0x08AA
#define STR0 0x09AA
/** 7E VARIABLES **/
#define SEQUENTIAL_7E 0x007E
#define SIMUL 0x017E
#define POLARGC 0x027E
#define RECTGC 0x037E
#define COORDON 0x047E
#define COORDOFF 0x057E
#define CONNECTED 0x067E
#define DOT_7E 0x077E
#define AXESON 0x087E
#define AXESOFF 0x097E
#define GRIDON 0x0A7E
#define GRIDOFF 0x0B7E
#define LABELON 0x0C7E
#define LABELOFF 0x0D7E
#define WEB 0x0E7E
#define TIME 0x0F7E
#define UVAXES 0x107E
#define VWAXES 0x117E
#define UWAXES 0x127E
/** BB VARIABLES **/
#define NPV 0x00BB
#define IRR 0x01BB
#define BAL 0x02BB
#define SUMPRN 0x03BB
#define SUMINT 0x04BB
#define TONOM 0x05BB
#define TOEFF 0x06BB
#define DBD 0x07BB
#define LCM 0x08BB
#define GCD 0x09BB
#define RANDINT 0x0ABB
#define RANDBIN 0x0BBB
#define SUB 0x0CBB
#define STDDEV 0x0DBB
#define VARIANCE 0x0EBB
#define INSTRING 0x0FBB
#define NORMALCDF 0x10BB
#define INVNORM 0x11BB
#define TCDF 0x12BB
#define XSQUCDF 0x13BB
#define FCDF 0x14BB
#define BINOMPDF 0x15BB
#define BINOMCDF 0x16BB
#define POISSONPDF 0x17BB
#define POISSONCDF 0x18BB
#define GEOMETPDF 0x19BB
#define GEOMETCDF 0x1ABB
#define NORMALPDF 0x1BBB
#define TPDF 0x1CBB
#define XSQUPDF 0x1DBB
#define FPDF 0x1EBB
#define RANDNORM 0x1FBB
#define TVM_PMT 0x20BB
#define TVM_I_PERCENT 0x21BB
#define TVM_PV 0x22BB
#define TVM_N 0x23BB
#define TVM_FV 0x24BB
#define CONJ 0x25BB
#define REAL 0x26BB
#define IMAG 0x27BB
#define ANGLE 0x28BB
#define CUMSUM 0x29BB
#define EXPR 0x2ABB
#define LENGTH 0x2BBB
#define DELTA_LIST 0x2CBB
#define REF 0x2DBB
#define RREF 0x2EBB
#define TORECT 0x2FBB
#define TOPOLAR 0x30BB
#define VAR_E 0x31BB
#define SINREG 0x32BB
#define LOGISTIC 0x33BB
#define LINREGTTEST 0x34BB
#define SHADENORM 0x35BB
#define SHADE_T 0x36BB
#define SHADEXSQU 0x37BB
#define SHADEF 0x38BB
#define MATRTOLIST 0x39BB
#define LISTTOMATR 0x3ABB
#define ZTEST 0x3BBB
#define TTEST 0x3CBB
#define TWO_SAMPZTEST 0x3DBB
#define ONE_PROPZTEST 0x3EBB
#define TWO_PROPZTEST 0x3FBB
#define XSQUTEST 0x40BB
#define ZINTERVAL 0x41BB
#define TWO_SAMPZINT 0x42BB
#define ONE_PROPZINT 0x43BB
#define TWO_PROPZINT 0x44BB
#define GRAPHSTYLE 0x45BB
#define TWO_SAMPTTEST 0x46BB
#define TWO_SAMPFTEST 0x47BB
#define TINTERVAL 0x48BB
#define TWO_SAMPTINT 0x49BB
#define SETUPEDITOR 0x4ABB
#define PMT_END 0x4BBB
#define PMT_BGN 0x4CBB
#define REAL_BB 0x4DBB
#define REPOWTHETAI 0x4EBB
#define APLUSBI 0x4FBB
#define EXPRON 0x50BB
#define EXPROFF 0x51BB
#define CLRALLLISTS 0x52BB
#define GETCALC 0x53BB
#define DELVAR 0x54BB
#define EQUTOSTRING 0x55BB
#define STRINGTOEQU 0x56BB
#define CLEARENTRIES 0x57BB
#define SELECT 0x58BB
#define ANOVA 0x59BB
#define MODBOXPLOT 0x5ABB
#define NORMPROBPLOT 0x5BBB
// Standard Tokens are any token that can be used anywhere in the line.
struct Token StandardTokens[] = {
/** CONTROL page of PROGRAM EDITOR (press PRGM when EDITING a program) **/
{ LOGIC_IF, "If " },
{ LOGIC_THEN, "Then" },
{ LOGIC_ELSE, "Else" },
{ CTL_FOR, "For(" },
{ CTL_WHILE, "While " },
{ CTL_REPEAT, "Repeat " },
{ CTL_END, "End" },
{ CTL_PAUSE, "Pause " },
{ CTL_PAUSE, "Pause" },
{ LABEL, "Label " },
{ CTL_GOTO, "Goto " },
{ INCSKIPIFHIGH, "IS>(" },
{ DECSKIPIFLOW, "DS<(" },
{ MENU, "Menu(" },
{ PROGRAM, "prgm" },
{ CTL_RETURN, "Return" },
{ CTL_STOP, "Stop" },
/** I/O page **/
{ INPUT, "Input " },
{ PROMPT, "Prompt " },
{ DISP, "Disp " },
{ DISPGRAPH, "DispGraph" },
{ DISPTABLE, "DispTable" },
{ OUTPUT, "Output(" },
{ GETKEY, "getKey" },
{ CLRHOME, "ClrHome" },
{ CLRTABLE, "ClrTable" },
/** GetCalc **/
{ GET, "Get(" },
{ SEND, "Send(" },
/** Plots **/
{ PLOTSON, "PlotsOn " },
{ PLOTSOFF, "PlotsOff " },
/** Others **/
{ TRACE, "Trace" },
{ ZSTANDARD, "ZStandard" },
{ ZTRIG, "ZTrig" },
{ ZBOX, "ZBox" },
{ ZOOMIN, "ZoomIn" },
{ ZOOMOUT, "ZoomOut" },
{ ZSQUARE, "ZSquare" },
{ ZINTEGER, "ZInteger" },
{ ZPREVIOUS, "ZPrevious" },
{ ZDECIMAL, "ZDecimal" },
{ ZOOMSTAT, "ZoomStat" },
{ ZOOMRCL, "ZoomRcl" },
{ ZOOMSTO, "ZoomSto" },
{ TEXTFUNC, "Text(" },
{ STOREPIC, "StorePic" },
{ RECALLPIC, "RecallPic" },
{ STOREGDB, "StoreGDB" },
/** OTHERS **/
{ TO_DMS, "->DMS" },
{ TO_DEC, "->DEC" },
{ TO_FRAC, "->FRAC" },
{ STORE, "->" },
{ BOXPLOT, "BoxPlot" },
{ RADIANS, "[radians]" },
{ DEGREES, "[degrees]" },
{ INVERSE, "^-1" },
{ SQUARE, "^2" },
{ TRANSPOSE, "[transpose]" },
{ CUBE, "^3" },
{ ROUND, "round(" },
{ PXLTEST, "pxl-Test(" },
{ AUGMENT, "augment(" },
{ ROWSWAP, "RowSwap(" },
{ ROWPLUS, "row+(" },
{ STARROW, "*row(" },
{ STARROWPLUS, "*row+(" },
{ MAX, "max(" },
{ MIN, "min(" },
{ MEDIAN, "median(" },
{ RANDM, "randM(" },
{ MEAN, "mean(" },
{ SOLVE, "solve(" },
{ SEQFUNC, "seq(" },
{ FNINT, "fnInt(" },
{ NDERIV, "NDeriv(" },
{ FMIN, "FMin(" },
{ FMAX, "FMax(" },
{ CUBICREG, "CubicReg " },
{ QUARTREG, "QuartReg " },
{ LOGIC_OR, " or " },
{ LOGIC_XOR, " xor " },
{ LOGIC_AND, "and" },
{ STR_THETA, "[theta]" },
{ PROGRAM, "prgm" },
{ RADIAN, "Radian" },
{ DEGREE, "Degree" },
{ NORMAL, "Normal" },
{ SCI, "Sci" },
{ ENG, "Eng" },
{ FLOAT, "Float" },
{ TEST_LOREQU, "<=" },
{ TEST_GOREQU, ">=" },
{ TEST_NOTEQUAL, "!=" },
{ ANSWER, "Ans" },
{ FIX, "Fix " },
{ HORIZ, "Horiz" },
{ FULL, "Full" },
{ FUNC, "Func" },
{ PARAM, "Param" },
{ POLAR, "Polar" },
{ SEQ, "Seq" },
{ INDPNTAUTO, "IndpntAuto" },
{ INDPNTASK, "IndpntAsk" },
{ DEPENDAUTO, "DependAuto" },
{ DEPENDASK, "DependAsk" },
{ BOX, "[box]" },
{ DOT, "[dot]" },
{ TRACE, "Trace" },
{ CLRDRAW, "ClrDraw" },
{ ZSTANDARD, "ZStandard" },
{ ZTRIG, "ZTrig" },
{ ZBOX, "ZBox" },
{ ZOOMIN, "Zoom In" },
{ ZOOMOUT, "Zoom Out" },
{ ZSQUARE, "ZSquare" },
{ ZINTEGER, "ZInteger" },
{ ZPREVIOUS, "ZPrevious" },
{ ZDECIMAL, "ZDecimal" },
{ ZOOMSTAT, "ZoomStat" },
{ ZOOMRCL, "ZoomRcl" },
{ PRINTSCREEN, "PrintScreen" },
{ ZOOMSTO, "ZoomSto" },
{ TEXTFUNC, "Text(" },
{ NPR, "nPr" },
{ NCR, "nCr" },
{ FNON, "FnOn " },
{ FNOFF, "FnOff " },
{ STOREPIC, "StorePic " },
{ RECALLPIC, "RecallPic " },
{ STOREGDB, "StoreGDB " },
{ RECALLGDB, "RecallGDB " },
{ LINE, "Line(" },
{ VERTICAL, "Vertical " },
{ PTON, "Pt-On(" },
{ PTOFF, "Pt-Off(" },
{ PTCHANGE, "Pt-Change(" },
{ PXLON, "Pxl-On(" },
{ PXLOFF, "Pxl-Off(" },
{ PXLCHANGE, "Pxl-Change(" },
{ SHADE, "Shade(" },
{ CIRCLE, "Circle(" },
{ HORIZONTAL, "Horizontal " },
{ TANGENT, "Tangent(" },
{ DRAWINV, "DrawInv " },
{ DRAWF, "DrawF " },
{ PI, "[pi]" },
{ GETKEY, "getKey" },
{ NEGATIVE, "[neg]" },
{ CONV_INT, "int(" },
{ ABS, "abs(" },
{ DETERMINANT, "det(" },
{ IDENTITY, "identity(" },
{ DIM, "dim(" },
{ SUM, "sum(" },
{ PROD, "prod(" },
{ NOT, "not(" },
{ IPART, "iPart(" },
{ FPART, "fPart(" },
{ SQR_ROOT, "[root]^2" },
{ CUBE_ROOT, "[root]^3" },
{ NATLOG, "ln(" },
{ ETOPOWER, "e^" },
{ LOGARITHM, "log(" },
{ POWER10, "10^(" },
{ SINE, "sin(" },
{ INVSIN, "asin(" },
{ COSINE, "cos(" },
{ INVCOSINE, "acos(" },
{ TANGENT_TRIG, "tan(" },
{ INVTANGENT, "atan(" },
{ HYP_SINE, "sinh(" },
{ HYP_ISINE, "asinh(" },
{ HYP_COSINE, "cosh(" },
{ HYP_ICOSINE, "acosh(" },
{ HYP_TANGENT, "tanh(" },
{ HYP_ITANGENT, "atanh(" },
{ LOGIC_ELSE, "Else" },
{ FILL, "Fill(" },
{ SORTA, "SortA(" },
{ SORTD, "SortD(" },
{ LIST, "[list]" },
{ PLOT1, "Plot1(" },
{ PLOT2, "Plot2(" },
{ PLOT3, "Plot3(" },
{ XTHROOT, "[root]^" },
{ VARSTATS_1, "1-Var Stats " },
{ VARSTATS_2, "2-Var Stats " },
{ LINREG1, "LinReg(a+bx) " },
{ EXPREG, "ExpReg " },
{ LNREG, "LnReg " },
{ PWRREG, "PwrReg " },
{ MEDMED, "Med-Med " },
{ QUADREG, "QuadReg " },
{ CLRLIST, "ClrList " },
{ CLRTABLE, "ClrTable" },
{ HISTOGRAM, "Histogram" },
{ XYLINE, "xyLine" },
{ SCATTER, "Scatter" },
{ LINREG2, "LinReg(ax+b) " },
{ RAND, "rand" },
};
// two-byte variables
struct TwoByte CalcVars[] = {
// AsmPrgm (uncompiled)
{ 0x6CBB, "AsmPrgm" },
{ 0x6DBB, "AsmPrgm" }, // this means decompilation works, but compilation won't hit this
// SysVar
{ MAT_A, "[A]" },
{ MAT_B, "[B]" },
{ MAT_C, "[C]" },
{ MAT_D, "[D]" },
{ MAT_E, "[E]" },
{ MAT_F, "[F]" },
{ MAT_G, "[G]" },
{ MAT_H, "[H]" },
{ MAT_I, "[I]" },
{ MAT_J, "[J]" },
{ L1, "L1" },
{ L2, "L2" },
{ L3, "L3" },
{ L4, "L4" },
{ L5, "L5" },
{ L6, "L6" },
{ L7, "L7" },
{ L8, "L8" },
{ L9, "L9" },
{ L0, "L0" },
{ Y1, "Y1" },
{ Y2, "Y2" },
{ Y3, "Y3" },
{ Y4, "Y4" },
{ Y5, "Y5" },
{ Y6, "Y6" },
{ Y7, "Y7" },
{ Y8, "Y8" },
{ Y9, "Y9" },
{ Y0, "Y0" },
{ X1T, "X1T" },
{ Y1T, "Y1T" },
{ X2T, "X2T" },
{ Y2T, "Y2T" },
{ X3T, "X3T" },
{ Y3T, "Y3T" },
{ X4T, "X4T" },
{ Y4T, "Y4T" },
{ X5T, "X5T" },
{ Y5T, "Y5T" },
{ X6T, "X6T" },
{ Y6T, "Y6T" },
{ R1, "R1" },
{ R2, "R2" },
{ R3, "R3" },
{ R4, "R4" },
{ R5, "R5" },
{ R6, "R6" },
{ SYSVAR_U, "[u]" },
{ SYSVAR_V, "[v]" },
{ PIC1, "PIC1" },
{ PIC2, "PIC2" },
{ PIC3, "PIC3" },
{ PIC4, "PIC4" },
{ PIC5, "PIC5" },
{ PIC6, "PIC6" },
{ PIC7, "PIC7" },
{ PIC8, "PIC8" },
{ PIC9, "PIC9" },
{ PIC0, "PIC0" },
{ GDB1, "GDB1" },
{ GDB2, "GDB2" },
{ GDB3, "GDB3" },
{ GDB4, "GDB4" },
{ GDB5, "GDB5" },
{ GDB6, "GDB6" },
{ GDB7, "GDB7" },
{ GDB8, "GDB8" },
{ GDB9, "GDB9" },
{ GDB0, "GDB0" },
// finally, StatVars
{ SX1, "Sx1" },
{ SX2, "Sx2" },
{ SXP, "Sxp" },
{ REGEQ, "RegEq" },
{ STAT_N, "[n]" },
{ MEANX, "mean(x)" },
{ SUMXSQUARED, "sum(x)^2" },
{ SUMX, "sum(x)" },
{ SX, "Sx" },
{ SIGMAX, "[sigma]x" },
{ MINX, "minX" },
{ MAXX, "maxX" },
{ MINY, "minY" },
{ MAXY, "maxY" },
{ MEANY, "mean(y)" },
{ SUMYSQUARED, "sum(y)^2" },
{ SUMY, "sum(y)" },
{ SY, "Sy" },
{ SIGMAY, "[sigma]y" },
{ SUMXY, "sum(xy)" },
{ SYSVAR_R, "[r]" },
{ MED, "Med" },
{ Q1, "Q1" },
{ Q3, "Q3" },
{ SYSVAR_A, "[a]" },
{ SYSVAR_B, "[b]" },
{ SYSVAR_C, "[c]" },
{ SYSVAR_D, "[d]" },
{ SYSVAR_E, "[stat_e]" }, // because '[e]' refers to the constant e
{ X1, "x1" },
{ X2, "x2" },
{ X3, "x3" },
{ Y1_1, "y1" },
{ Y2_1, "y2" },
{ Y3_1, "y3" },
{ SYSVAR_N, "[n]" }, // somebody please tell me why there are so many variations on n
{ SYSVAR_P, "[p]" },
{ SYSVAR_Z, "[z]" },
{ SYSVAR_T, "[t]" },
{ CHISQUARED, "[chi]^2" },
{ FIN, "[fin]" },
{ DF, "[df]" },
{ PHAT, "[p^]" },
{ PHAT1, "[p^1]" },
{ PHAT2, "[p^2]" },
{ MEANX1, "mean(x1)" },
{ N1, "[n1]" },
{ MEANX2, "mean(x2)" },
{ N2, "[n2]" },
{ LOWER, "[lower]" },
{ UPPER, "[upper]" },
{ SYSVAR_S, "[s]" },
{ RSQUARED, "r^2" },
{ CAPRSQUARED, "R^2" },
{ DF2, "[df]" }, // somebody was high when they invented the token tables
{ SS, "SS" },
{ DF3, "[df]" }, // see previous comment
{ SS1, "SS" }, // again...
{ MS1, "MS" }, // and again!
// graph data
{ ZXSCL, "ZXscl" },
{ ZYSCL, "ZYscl" },
{ XSCL, "Xscl" },
{ YSCL, "Yscl" },
{ ZUNSTART, "ZUnStart" },
{ ZVNSTART, "ZVnStart" },
{ UNSTART, "UnStart" },
{ VNSTART, "VnStart" },
{ UNINVERSE, "Un-1" }, // i read a ^-1, but it's actually a -1...
{ VNINVERSE, "Vn-1" }, // same as above
{ ZXMIN, "ZXmin" },
{ ZXMAX, "ZXmax" },
{ ZYMIN, "ZYmin" },
{ ZYMAX, "ZYmax" },
{ ZTHETAMIN, "Ztheta_min"},
{ ZTHETAMAX, "Ztheta_max"},
{ ZTMIN, "ZTmin" },
{ ZTMAX, "ZTmax" },
{ XMIN, "Xmin" },
{ XMAX, "Xmax" },
{ YMIN, "Ymin" },
{ YMAX, "Ymax" },
{ TMIN, "Tmin" },
{ TMAX, "Tmax" },
{ THETAMIN, "theta_min" },
{ THETAMAX, "theta_max" },
{ TBLMIN, "TblMin" },
{ ZNMIN, "ZnMin" },
{ NMIN, "nMin" },
{ ZNMAX, "ZnMax" },
{ NMAX, "nMax" },
{ ZNSTART, "ZnStart" },
{ NSTART, "nStart" },
{ DELTATABLE, "delta_Tbl" },
{ ZTSTEP, "ZTstep" },
{ ZTHETASTEP, "Ztheta_step"},
{ TSTEP, "Tstep" },
{ THETASTEP, "theta_step"},
{ DELTAX, "delta_X" },
{ DELTAY, "delta_Y" },
{ XFACT, "XFact" },
{ YFACT, "YFact" },
{ TBLINPUT, "TblInput" },
// finance app
{ SYSVAR_CAPN, "[N]" }, // this is the N in the Finance app
{ IPERCENT, "I%" },
{ PV, "PV" },
{ PMT, "PMT" },
{ FV, "FV" },
{ ZXRES, "ZXres" },
{ XRES, "Xres" },
// strings
{ STR1, "STR1" },
{ STR2, "STR2" },
{ STR3, "STR3" },
{ STR4, "STR4" },
{ STR5, "STR5" },
{ STR6, "STR6" },
{ STR7, "STR7" },
{ STR8, "STR8" },
{ STR9, "STR9" },
{ STR0, "STR0" },
// 7E Variables
{ SEQ, "Sequential" },
{ SIMUL, "Simul" },
{ POLARGC, "PolarGC" },
{ RECTGC, "RectGC" },
{ COORDON, "CoordOn" },
{ COORDOFF, "CoordOff" },
{ CONNECTED, "Connected" },
{ DOT_7E, "Dot" },
{ AXESON, "AxesOn" },
{ AXESOFF, "AxesOff" },
{ GRIDON, "GridOn" },
{ GRIDOFF, "GridOff" },
{ LABELON, "LabelOn" },
{ LABELOFF, "LabelOff" },
{ WEB, "Web" },
{ TIME, "Time" },
{ UVAXES, "uvAxes" },
{ VWAXES, "vwAxes" },
{ UWAXES, "uwAxes" },
// BB Variables
{ NPV, "npv(" },
{ IRR, "irr(" },
{ BAL, "bal(" },
{ SUMPRN, "sum_prn(" },
{ SUMINT, "sum_int(" },
{ TONOM, "->Nom" },
{ TOEFF, "->Eff" },
{ DBD, "dbd(" },
{ LCM, "lcm(" },
{ GCD, "gcd(" },
{ RANDINT, "RandInt(" },
{ RANDBIN, "RandBin(" },
{ SUB, "sub(" },
{ STDDEV, "StdDev(" },
{ VARIANCE, "variance(" },
{ INSTRING, "inString(" },
{ NORMALCDF, "normalcdf(" },
{ INVNORM, "invNorm(" },
{ TCDF, "tcdf(" },
{ XSQUCDF, "x^2cdf(" },
{ FCDF, "fcdf(" },
{ BINOMPDF, "binompdf(" },
{ BINOMCDF, "binomcdf(" },
{ POISSONPDF, "poissonpdf(" },
{ POISSONCDF, "poissoncdf(" },
{ GEOMETPDF, "geometpdf(" },
{ GEOMETCDF, "geometcdf(" },
{ NORMALPDF, "normalpdf(" },
{ TPDF, "tpdf(" },
{ XSQUPDF, "x^2pdf(" },
{ FPDF, "fpdf(" },
{ RANDNORM, "RandNorm(" },
{ TVM_PMT, "tvm_pmt" },
{ TVM_I_PERCENT, "tvm_i%" },
{ TVM_PV, "tvm_PV" },
{ TVM_N, "tvm_N" },
{ TVM_FV, "tvm_FV" },
{ CONJ, "conj(" },
{ REAL, "real(" },
{ IMAG, "imag(" },
{ ANGLE, "angle(" },
{ CUMSUM, "cumSum(" },
{ EXPR, "expr(" },
{ LENGTH, "length(" },
{ DELTA_LIST, "delta_List(" },
{ REF, "ref(" },
{ RREF, "rref(" },
{ TORECT, "->Rect" },
{ TOPOLAR, "->Polar" },
{ VAR_E, "[e]" }, // e by itself is impossible, and dangerous (imagine Disp "Hello"!)
{ SINREG, "SinReg " },
{ LOGISTIC, "Logistic " },
{ LINREGTTEST, "LinRegTTest " },
{ SHADENORM, "ShadeNorm(" },
{ SHADE_T, "Shade_t(" },
{ SHADEXSQU, "Shade_x^2(" },
{ SHADEF, "ShadeF(" },
{ MATRTOLIST, "Matr->list" },
{ LISTTOMATR, "List->matr" },
{ ZTEST, "Z-Test(" },
{ TTEST, "T-Test " },
{ TWO_SAMPZTEST, "2-SampZTest(" },
{ ONE_PROPZTEST, "1-PropZTest(" },
{ TWO_PROPZTEST, "2-PropZTest(" },
{ XSQUTEST, "x^2_test(" },
{ ZINTERVAL, "ZInterval" },
{ TWO_SAMPZINT, "2-SampZInt(" },
{ ONE_PROPZINT, "1-PropZInt(" },
{ TWO_PROPZINT, "2-PropZInt(" },
{ GRAPHSTYLE, "GraphStyle(" },
{ TWO_SAMPTTEST, "2-SampTTest " },
{ TWO_SAMPFTEST, "2-SampFTest_" },
{ TINTERVAL, "TInterval " },
{ TWO_SAMPTINT, "2-SampTInt " },
{ SETUPEDITOR, "SetUpEditor " },
{ PMT_END, "PMT_End" },
{ PMT_BGN, "PMT_Bgn" },
{ REAL_BB, "Real" },
{ REPOWTHETAI, "re^[theta]i" },
{ APLUSBI, "a+bi" },
{ EXPRON, "ExprOn" },
{ EXPROFF, "ExprOff" },
{ CLRALLLISTS, "ClrAllLists" },
{ GETCALC, "GetCalc(" },
{ DELVAR, "DelVar " },
{ EQUTOSTRING, "Equ->String(" },
{ STRINGTOEQU, "String->Equ(" },
{ CLEARENTRIES, "Clear Entries" },
{ SELECT, "Select(" },
{ ANOVA, "ANOVA(" },
{ MODBOXPLOT, "ModBoxPlot" },
{ NORMPROBPLOT, "NormProbPlot" },
};
// Replacements
// Replacements are rules that define special characters that must be replaced with a token.
struct ConvertRule Replacements[] = {
{ '"', DOUBLEQUOTE },
{ '\'', APOSTROPHE },
{ ',', COMMA },
{ '?', QUESTIONMARK },
{ ' ', SPACE },
{ '=', TEST_EQUAL },
{ '<', TEST_LESSTHAN },
{ '>', TEST_HIGHTHAN },
{ '+', ADD },
{ '-', SUBTRACT },
{ '/', DIVIDE_SLASH },
{ '*', MULTIPLY },
{ '!', FACTORIAL },
{ ':', COLON },
{ '\n', HARD_RETURN },
{ '0', NUM_0 },
{ '1', NUM_1 },
{ '2', NUM_2 },
{ '3', NUM_3 },
{ '4', NUM_4 },
{ '5', NUM_5 },
{ '6', NUM_6 },
{ '7', NUM_7 },
{ '8', NUM_8 },
{ '9', NUM_9 },
{ '.', PERIOD },
{ '[', LEFTSBRACK },
{ ']', RIGHTSBRACK },
{ '{', LEFTBRACE },
{ '}', RIGHTBRACE },
{ '(', LEFTBRACKET },
{ ')', RIGHTBRACKET },
{ '&', LOGIC_AND },
{ '|', LOGIC_OR },
{ '~', LOGIC_XOR },
{ '=', TEST_EQUAL },
{ '<', TEST_LESSTHAN },
{ '>', TEST_HIGHTHAN },
{ '^', POWEROF },
};