summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile26
-rw-r--r--ti83c.c244
-rw-r--r--tokens.h1178
3 files changed, 1448 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d36578e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,26 @@
+CC=gcc
+BIN=ti83c
+OBJ=ti83c.o
+HEADERS=tokens.h
+CFLAGS=
+
+prefix=/usr/local
+exec_prefix=$(prefix)
+bindir=$(exec_prefix)/bin
+datadir=$(prefix)/share/$(BIN)
+configdir=/etc/$(BIN)
+
+all : $(BIN)
+
+$(BIN): $(OBJ)
+ $(CC) -o $(BIN) $(OBJ) $(CFLAGS)
+
+%.o: %.c $(HEADERS)
+ $(CC) -c $*.c -o $*.o
+
+install:
+ cp $(BIN) $(bindir)
+ chmod 0755 $(bindir)/$(BIN)
+
+clean:
+ rm $(OBJ) $(BIN)
diff --git a/ti83c.c b/ti83c.c
new file mode 100644
index 0000000..bd36446
--- /dev/null
+++ b/ti83c.c
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr>
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <linux/limits.h>
+
+#include "tokens.h"
+
+struct ti83_header {
+ char id[8];
+ char fixed[3];
+ char comment[42];
+ unsigned short length;
+} __attribute__((packed));
+
+struct ti83_entry {
+ unsigned short offset;
+ unsigned short length1;
+ unsigned char type;
+ char name[8];
+ unsigned short length2;
+ unsigned short data_length;
+} __attribute__((packed));
+
+char ti83_id[] = "**TI83**";
+char ti83_fixed[] = { 0x1a, 0x0a, 0x00 };
+char ti83_comment[] = "Compiled with ti83c";
+
+void ti83_checksum(unsigned short *checksum, struct ti83_entry *entry, void *data, int length)
+{
+ unsigned char *p;
+ int sum = 0;
+ int i;
+
+ p = (unsigned char *) entry;
+ for (i = 0 ; i < sizeof(struct ti83_entry) ; i++)
+ sum += *p++;
+
+ p = (unsigned char *) data;
+ for (i = 0 ; i < length ; i++)
+ sum += *p++;
+
+ sum %= 0xffff;
+
+ *checksum = (sum & 0xff) + (sum >> 8);
+}
+
+void ti83_entry(struct ti83_entry *entry, char *name, int length)
+{
+ int i;
+
+ memset(entry, 0, sizeof(struct ti83_entry));
+
+ entry->offset = 0x0b;
+ entry->length1 = length + sizeof(short);
+ entry->type = 0x05;
+ snprintf(entry->name, sizeof(entry->name), "%s", name);
+ for (i = 0 ; i < sizeof(entry->name) ; i++) {
+ if (entry->name[i] == '\0')
+ break;
+
+ entry->name[i] = toupper(entry->name[i]);
+ }
+ entry->length2 = length + sizeof(short);
+ entry->data_length = length;
+}
+
+void ti83_header(struct ti83_header *header, int length)
+{
+ memset(header, 0, sizeof(struct ti83_header));
+
+ memcpy(header->id, &ti83_id, sizeof(header->id));
+ memcpy(header->fixed, &ti83_fixed, sizeof(header->fixed));
+ snprintf(header->comment, sizeof(header->comment), "%s", ti83_comment);
+ header->length = sizeof(struct ti83_entry) + length;
+}
+
+int ti83_data(void *data, int length)
+{
+ unsigned char *buffer;
+ unsigned char *p;
+ int count;
+ int found;
+ int i, o, rc;
+
+ buffer = calloc(1, length);
+
+ count = sizeof(ti83_tokens) / sizeof(struct ti83_token);
+
+ p = (unsigned char *) data;
+ rc = length;
+ o = 0;
+
+ while (rc > 0) {
+ found = 0;
+
+ for (i = 0 ; i < count ; i++) {
+ if (strncmp(ti83_tokens[i].string, p, strlen(ti83_tokens[i].string)) == 0) {
+ p += strlen(ti83_tokens[i].string);
+ rc -= strlen(ti83_tokens[i].string);
+
+ if (ti83_tokens[i].length == 1) {
+ memcpy(buffer + o, &ti83_tokens[i].data8, 1);
+ o += 1;
+ }
+ else if (ti83_tokens[i].length == 2) {
+ memcpy(buffer + o, &ti83_tokens[i].data16, 2);
+ o += 2;
+ }
+
+ found = 1;
+
+ break;
+ }
+ }
+
+ if (!found) {
+ if (isalpha(*p))
+ *p = toupper(*p);
+ buffer[o++] = *p++;
+ rc -= 1;
+ }
+ }
+
+ memset(data, 0, length);
+
+ length = o;
+ memcpy(data, buffer, length);
+
+ free(buffer);
+
+ return length;
+}
+
+void print_usage(char *argv[])
+{
+ printf("Usage: %s input [output] [name]\n", argv[0]);
+}
+
+int main(int argc, char *argv[])
+{
+ struct ti83_header header;
+ struct ti83_entry entry;
+ void *data;
+ int length;
+ unsigned short checksum;
+
+ struct stat s;
+ char path[PATH_MAX] = { 0 };
+ char buffer[8] = { 0 };
+ char *input;
+ char *output;
+ int input_fd;
+ int output_fd;
+ char *name;
+ unsigned char *p;
+ int tc, rc, c;
+ int i;
+
+ if (argc < 2) {
+ print_usage(argv);
+ return 1;
+ }
+
+ input = argv[1];
+ if (input == NULL)
+ return 1;
+
+ output = argv[2];
+ name = argv[3];
+
+ input_fd = open(input, O_RDONLY);
+ if (input_fd < 0) {
+ printf("Failed to open %s: %s\n", input, strerror(errno));
+ return 1;
+ }
+
+ if (output == NULL) {
+ output = (char *) path;
+ snprintf(output, sizeof(path), "%s.83p", input);
+ }
+
+ if (name == NULL) {
+ name = (char *) &buffer;
+ snprintf(name, sizeof(buffer), "%s", input);
+ }
+
+ output_fd = open(output, O_RDWR | O_CREAT | O_TRUNC);
+ if (output_fd < 0) {
+ printf("Failed to open %s: %s\n", output, strerror(errno));
+ return 1;
+ }
+
+ stat(input, &s);
+ length = s.st_size;
+
+ data = calloc(1, length);
+
+ rc = 0;
+ tc = length;
+ while (tc > 0) {
+ p = (unsigned char *) ((unsigned char *) data + rc);
+ rc += read(input_fd, p, tc);
+ tc -= rc;
+ }
+
+ length = ti83_data(data, length);
+ ti83_header(&header, length);
+ ti83_entry(&entry, name, length);
+ ti83_checksum(&checksum, &entry, data, length);
+
+ write(output_fd, &header, sizeof(header));
+ write(output_fd, &entry, sizeof(entry));
+ write(output_fd, data, length);
+ write(output_fd, &checksum, sizeof(checksum));
+
+ close(output_fd);
+ close(input_fd);
+
+ return 0;
+}
diff --git a/tokens.h b/tokens.h
new file mode 100644
index 0000000..0a923f5
--- /dev/null
+++ b/tokens.h
@@ -0,0 +1,1178 @@
+/*
+ * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr>
+ * 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.
+ */
+
+#ifndef TOKENS_H
+#define TOKENS_H
+
+struct ti83_token {
+ char *string;
+
+ union {
+ unsigned short data16;
+ unsigned char data8;
+ };
+ int length;
+};
+
+#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
+
+struct ti83_token ti83_tokens[] = {
+ /** CONTROL page of PROGRAM EDITOR (press PRGM when EDITING a program) **/
+ { .string="If ", .data8=LOGIC_IF, .length=1, },
+ { .string="Then", .data8=LOGIC_THEN, .length=1, },
+ { .string="Else", .data8=LOGIC_ELSE, .length=1, },
+ { .string="For(", .data8=CTL_FOR, .length=1, },
+ { .string="While ", .data8=CTL_WHILE, .length=1, },
+ { .string="Repeat ", .data8=CTL_REPEAT, .length=1, },
+ { .string="End", .data8=CTL_END, .length=1, },
+ { .string="Pause ", .data8=CTL_PAUSE, .length=1, },
+ { .string="Pause", .data8=CTL_PAUSE, .length=1, },
+ { .string="Label ", .data8=LABEL, .length=1, },
+ { .string="Goto ", .data8=CTL_GOTO, .length=1, },
+ { .string="IS>(", .data8=INCSKIPIFHIGH, .length=1, },
+ { .string="DS<(", .data8=DECSKIPIFLOW, .length=1, },
+ { .string="Menu(", .data8=MENU, .length=1, },
+ { .string="prgm", .data8=PROGRAM, .length=1, },
+ { .string="Return", .data8=CTL_RETURN, .length=1, },
+ { .string="Stop", .data8=CTL_STOP, .length=1, },
+
+ /** I/O page **/
+ { .string="Input ", .data8=INPUT, .length=1, },
+ { .string="Prompt ", .data8=PROMPT, .length=1, },
+ { .string="Disp ", .data8=DISP, .length=1, },
+ { .string="DispGraph", .data8=DISPGRAPH, .length=1, },
+ { .string="DispTable", .data8=DISPTABLE, .length=1, },
+ { .string="Output(", .data8=OUTPUT, .length=1, },
+ { .string="getKey", .data8=GETKEY, .length=1, },
+ { .string="ClrHome", .data8=CLRHOME, .length=1, },
+ { .string="ClrTable", .data8=CLRTABLE, .length=1, },
+
+ /** GetCalc **/
+ { .string="Get(", .data8=GET, .length=1, },
+ { .string="Send(", .data8=SEND, .length=1, },
+
+ /** Plots **/
+ { .string="PlotsOn ", .data8=PLOTSON, .length=1, },
+ { .string="PlotsOff ", .data8=PLOTSOFF, .length=1, },
+
+ /** Others **/
+ { .string="Trace", .data8=TRACE, .length=1, },
+ { .string="ZStandard", .data8=ZSTANDARD, .length=1, },
+ { .string="ZTrig", .data8=ZTRIG, .length=1, },
+ { .string="ZBox", .data8=ZBOX, .length=1, },
+ { .string="ZoomIn", .data8=ZOOMIN, .length=1, },
+ { .string="ZoomOut", .data8=ZOOMOUT, .length=1, },
+ { .string="ZSquare", .data8=ZSQUARE, .length=1, },
+ { .string="ZInteger", .data8=ZINTEGER, .length=1, },
+ { .string="ZPrevious", .data8=ZPREVIOUS, .length=1, },
+ { .string="ZDecimal", .data8=ZDECIMAL, .length=1, },
+ { .string="ZoomStat", .data8=ZOOMSTAT, .length=1, },
+ { .string="ZoomRcl", .data8=ZOOMRCL, .length=1, },
+ { .string="ZoomSto", .data8=ZOOMSTO, .length=1, },
+ { .string="Text(", .data8=TEXTFUNC, .length=1, },
+ { .string="StorePic", .data8=STOREPIC, .length=1, },
+ { .string="RecallPic", .data8=RECALLPIC, .length=1, },
+ { .string="StoreGDB", .data8=STOREGDB, .length=1, },
+
+ /** OTHERS **/
+ { .string="->DMS", .data8=TO_DMS, .length=1, },
+ { .string="->DEC", .data8=TO_DEC, .length=1, },
+ { .string="->FRAC", .data8=TO_FRAC, .length=1, },
+ { .string="->", .data8=STORE, .length=1, },
+ { .string=" -> ", .data8=STORE, .length=1, },
+ { .string=" ->", .data8=STORE, .length=1, },
+ { .string="-> ", .data8=STORE, .length=1, },
+ { .string="BoxPlot", .data8=BOXPLOT, .length=1, },
+ { .string="[radians]", .data8=RADIANS, .length=1, },
+ { .string="[degrees]", .data8=DEGREES, .length=1, },
+ { .string="^-1", .data8=INVERSE, .length=1, },
+ { .string="^2", .data8=SQUARE, .length=1, },
+ { .string="²", .data8=SQUARE, .length=1, },
+ { .string="[transpose]", .data8=TRANSPOSE, .length=1, },
+ { .string="^3", .data8=CUBE, .length=1, },
+ { .string="round(", .data8=ROUND, .length=1, },
+ { .string="pxl-Test(", .data8=PXLTEST, .length=1, },
+ { .string="augment(", .data8=AUGMENT, .length=1, },
+ { .string="RowSwap(", .data8=ROWSWAP, .length=1, },
+ { .string="row+(", .data8=ROWPLUS, .length=1, },
+ { .string="*row(", .data8=STARROW, .length=1, },
+ { .string="*row+(", .data8=STARROWPLUS, .length=1, },
+ { .string="max(", .data8=MAX, .length=1, },
+ { .string="min(", .data8=MIN, .length=1, },
+ { .string="median(", .data8=MEDIAN, .length=1, },
+ { .string="randM(", .data8=RANDM, .length=1, },
+ { .string="mean(", .data8=MEAN, .length=1, },
+ { .string="solve(", .data8=SOLVE, .length=1, },
+ { .string="seq(", .data8=SEQFUNC, .length=1, },
+ { .string="fnInt(", .data8=FNINT, .length=1, },
+ { .string="NDeriv(", .data8=NDERIV, .length=1, },
+ { .string="FMin(", .data8=FMIN, .length=1, },
+ { .string="FMax(", .data8=FMAX, .length=1, },
+ { .string="CubicReg ", .data8=CUBICREG, .length=1, },
+ { .string="QuartReg ", .data8=QUARTREG, .length=1, },
+ { .string=" or ", .data8=LOGIC_OR, .length=1, },
+ { .string=" xor ", .data8=LOGIC_XOR, .length=1, },
+ { .string="and", .data8=LOGIC_AND, .length=1, },
+ { .string="[theta]", .data8=STR_THETA, .length=1, },
+ { .string="prgm", .data8=PROGRAM, .length=1, },
+ { .string="Radian", .data8=RADIAN, .length=1, },
+ { .string="Degree", .data8=DEGREE, .length=1, },
+ { .string="Normal", .data8=NORMAL, .length=1, },
+ { .string="Sci", .data8=SCI, .length=1, },
+ { .string="Eng", .data8=ENG, .length=1, },
+ { .string="Float", .data8=FLOAT, .length=1, },
+ { .string="<=", .data8=TEST_LOREQU, .length=1, },
+ { .string=">=", .data8=TEST_GOREQU, .length=1, },
+ { .string="!=", .data8=TEST_NOTEQUAL, .length=1, },
+ { .string="Ans", .data8=ANSWER, .length=1, },
+ { .string="Fix ", .data8=FIX, .length=1, },
+ { .string="Horiz", .data8=HORIZ, .length=1, },
+ { .string="Full", .data8=FULL, .length=1, },
+ { .string="Func", .data8=FUNC, .length=1, },
+ { .string="Param", .data8=PARAM, .length=1, },
+ { .string="Polar", .data8=POLAR, .length=1, },
+ { .string="Seq", .data8=SEQ, .length=1, },
+ { .string="IndpntAuto", .data8=INDPNTAUTO, .length=1, },
+ { .string="IndpntAsk", .data8=INDPNTASK, .length=1, },
+ { .string="DependAuto", .data8=DEPENDAUTO, .length=1, },
+ { .string="DependAsk", .data8=DEPENDASK, .length=1, },
+ { .string="[box]", .data8=BOX, .length=1, },
+ { .string="[dot]", .data8=DOT, .length=1, },
+ { .string="Trace", .data8=TRACE, .length=1, },
+ { .string="ClrDraw", .data8=CLRDRAW, .length=1, },
+ { .string="ZStandard", .data8=ZSTANDARD, .length=1, },
+ { .string="ZTrig", .data8=ZTRIG, .length=1, },
+ { .string="ZBox", .data8=ZBOX, .length=1, },
+ { .string="Zoom In", .data8=ZOOMIN, .length=1, },
+ { .string="Zoom Out", .data8=ZOOMOUT, .length=1, },
+ { .string="ZSquare", .data8=ZSQUARE, .length=1, },
+ { .string="ZInteger", .data8=ZINTEGER, .length=1, },
+ { .string="ZPrevious", .data8=ZPREVIOUS, .length=1, },
+ { .string="ZDecimal", .data8=ZDECIMAL, .length=1, },
+ { .string="ZoomStat", .data8=ZOOMSTAT, .length=1, },
+ { .string="ZoomRcl", .data8=ZOOMRCL, .length=1, },
+ { .string="PrintScreen", .data8=PRINTSCREEN, .length=1, },
+ { .string="ZoomSto", .data8=ZOOMSTO, .length=1, },
+ { .string="Text(", .data8=TEXTFUNC, .length=1, },
+ { .string="nPr", .data8=NPR, .length=1, },
+ { .string="nCr", .data8=NCR, .length=1, },
+ { .string="FnOn ", .data8=FNON, .length=1, },
+ { .string="FnOff ", .data8=FNOFF, .length=1, },
+ { .string="StorePic ", .data8=STOREPIC, .length=1, },
+ { .string="RecallPic ", .data8=RECALLPIC, .length=1, },
+ { .string="StoreGDB ", .data8=STOREGDB, .length=1, },
+ { .string="RecallGDB ", .data8=RECALLGDB, .length=1, },
+ { .string="Line(", .data8=LINE, .length=1, },
+ { .string="Vertical ", .data8=VERTICAL, .length=1, },
+ { .string="Pt-On(", .data8=PTON, .length=1, },
+ { .string="Pt-Off(", .data8=PTOFF, .length=1, },
+ { .string="Pt-Change(", .data8=PTCHANGE, .length=1, },
+ { .string="Pxl-On(", .data8=PXLON, .length=1, },
+ { .string="Pxl-Off(", .data8=PXLOFF, .length=1, },
+ { .string="Pxl-Change(", .data8=PXLCHANGE, .length=1, },
+ { .string="Shade(", .data8=SHADE, .length=1, },
+ { .string="Circle(", .data8=CIRCLE, .length=1, },
+ { .string="Horizontal ", .data8=HORIZONTAL, .length=1, },
+ { .string="Tangent(", .data8=TANGENT, .length=1, },
+ { .string="DrawInv ", .data8=DRAWINV, .length=1, },
+ { .string="DrawF ", .data8=DRAWF, .length=1, },
+ { .string="[pi]", .data8=PI, .length=1, },
+ { .string="getKey", .data8=GETKEY, .length=1, },
+ { .string="[neg]", .data8=NEGATIVE, .length=1, },
+ { .string="int(", .data8=CONV_INT, .length=1, },
+ { .string="abs(", .data8=ABS, .length=1, },
+ { .string="det(", .data8=DETERMINANT, .length=1, },
+ { .string="identity(", .data8=IDENTITY, .length=1, },
+ { .string="dim(", .data8=DIM, .length=1, },
+ { .string="sum(", .data8=SUM, .length=1, },
+ { .string="prod(", .data8=PROD, .length=1, },
+ { .string="not(", .data8=NOT, .length=1, },
+ { .string="iPart(", .data8=IPART, .length=1, },
+ { .string="fPart(", .data8=FPART, .length=1, },
+ { .string="[sqrt]", .data8=SQR_ROOT, .length=1, },
+ { .string="[root]^2", .data8=SQR_ROOT, .length=1, },
+ { .string="[root]^3", .data8=CUBE_ROOT, .length=1, },
+ { .string="ln(", .data8=NATLOG, .length=1, },
+ { .string="e^", .data8=ETOPOWER, .length=1, },
+ { .string="log(", .data8=LOGARITHM, .length=1, },
+ { .string="10^(", .data8=POWER10, .length=1, },
+ { .string="sin(", .data8=SINE, .length=1, },
+ { .string="asin(", .data8=INVSIN, .length=1, },
+ { .string="cos(", .data8=COSINE, .length=1, },
+ { .string="acos(", .data8=INVCOSINE, .length=1, },
+ { .string="tan(", .data8=TANGENT_TRIG, .length=1, },
+ { .string="atan(", .data8=INVTANGENT, .length=1, },
+ { .string="sinh(", .data8=HYP_SINE, .length=1, },
+ { .string="asinh(", .data8=HYP_ISINE, .length=1, },
+ { .string="cosh(", .data8=HYP_COSINE, .length=1, },
+ { .string="acosh(", .data8=HYP_ICOSINE, .length=1, },
+ { .string="tanh(", .data8=HYP_TANGENT, .length=1, },
+ { .string="atanh(", .data8=HYP_ITANGENT, .length=1, },
+ { .string="Else", .data8=LOGIC_ELSE, .length=1, },
+ { .string="Fill(", .data8=FILL, .length=1, },
+ { .string="SortA(", .data8=SORTA, .length=1, },
+ { .string="SortD(", .data8=SORTD, .length=1, },
+ { .string="[list]", .data8=LIST, .length=1, },
+ { .string="Plot1(", .data8=PLOT1, .length=1, },
+ { .string="Plot2(", .data8=PLOT2, .length=1, },
+ { .string="Plot3(", .data8=PLOT3, .length=1, },
+ { .string="[root]^", .data8=XTHROOT, .length=1, },
+ { .string="1-Var Stats ", .data8=VARSTATS_1, .length=1, },
+ { .string="2-Var Stats ", .data8=VARSTATS_2, .length=1, },
+ { .string="LinReg(a+bx) ", .data8=LINREG1, .length=1, },
+ { .string="ExpReg ", .data8=EXPREG, .length=1, },
+ { .string="LnReg ", .data8=LNREG, .length=1, },
+ { .string="PwrReg ", .data8=PWRREG, .length=1, },
+ { .string="Med-Med ", .data8=MEDMED, .length=1, },
+ { .string="QuadReg ", .data8=QUADREG, .length=1, },
+ { .string="ClrList ", .data8=CLRLIST, .length=1, },
+ { .string="ClrTable", .data8=CLRTABLE, .length=1, },
+ { .string="Histogram", .data8=HISTOGRAM, .length=1, },
+ { .string="xyLine", .data8=XYLINE, .length=1, },
+ { .string="Scatter", .data8=SCATTER, .length=1, },
+ { .string="LinReg(ax+b) ", .data8=LINREG2, .length=1, },
+ { .string="rand", .data8=RAND, .length=1, },
+
+ // AsmPrgm (uncompiled)
+ { .string="AsmPrgm", .data16=0x6CBB, .length=2, },
+ { .string="AsmPrgm", .data16=0x6DBB, .length=2, },
+
+ // SysVar
+ { .string="[A]", .data16=MAT_A, .length=2, },
+ { .string="[B]", .data16=MAT_B, .length=2, },
+ { .string="[C]", .data16=MAT_C, .length=2, },
+ { .string="[D]", .data16=MAT_D, .length=2, },
+ { .string="[E]", .data16=MAT_E, .length=2, },
+ { .string="[F]", .data16=MAT_F, .length=2, },
+ { .string="[G]", .data16=MAT_G, .length=2, },
+ { .string="[H]", .data16=MAT_H, .length=2, },
+ { .string="[I]", .data16=MAT_I, .length=2, },
+ { .string="[J]", .data16=MAT_J, .length=2, },
+ { .string="L1", .data16=L1, .length=2, },
+ { .string="L2", .data16=L2, .length=2, },
+ { .string="L3", .data16=L3, .length=2, },
+ { .string="L4", .data16=L4, .length=2, },
+ { .string="L5", .data16=L5, .length=2, },
+ { .string="L6", .data16=L6, .length=2, },
+ { .string="L7", .data16=L7, .length=2, },
+ { .string="L8", .data16=L8, .length=2, },
+ { .string="L9", .data16=L9, .length=2, },
+ { .string="L0", .data16=L0, .length=2, },
+ { .string="Y1", .data16=Y1, .length=2, },
+ { .string="Y2", .data16=Y2, .length=2, },
+ { .string="Y3", .data16=Y3, .length=2, },
+ { .string="Y4", .data16=Y4, .length=2, },
+ { .string="Y5", .data16=Y5, .length=2, },
+ { .string="Y6", .data16=Y6, .length=2, },
+ { .string="Y7", .data16=Y7, .length=2, },
+ { .string="Y8", .data16=Y8, .length=2, },
+ { .string="Y9", .data16=Y9, .length=2, },
+ { .string="Y0", .data16=Y0, .length=2, },
+ { .string="X1T", .data16=X1T, .length=2, },
+ { .string="Y1T", .data16=Y1T, .length=2, },
+ { .string="X2T", .data16=X2T, .length=2, },
+ { .string="Y2T", .data16=Y2T, .length=2, },
+ { .string="X3T", .data16=X3T, .length=2, },
+ { .string="Y3T", .data16=Y3T, .length=2, },
+ { .string="X4T", .data16=X4T, .length=2, },
+ { .string="Y4T", .data16=Y4T, .length=2, },
+ { .string="X5T", .data16=X5T, .length=2, },
+ { .string="Y5T", .data16=Y5T, .length=2, },
+ { .string="X6T", .data16=X6T, .length=2, },
+ { .string="Y6T", .data16=Y6T, .length=2, },
+ { .string="R1", .data16=R1, .length=2, },
+ { .string="R2", .data16=R2, .length=2, },
+ { .string="R3", .data16=R3, .length=2, },
+ { .string="R4", .data16=R4, .length=2, },
+ { .string="R5", .data16=R5, .length=2, },
+ { .string="R6", .data16=R6, .length=2, },
+ { .string="[u]", .data16=SYSVAR_U, .length=2, },
+ { .string="[v]", .data16=SYSVAR_V, .length=2, },
+ { .string="PIC1", .data16=PIC1, .length=2, },
+ { .string="PIC2", .data16=PIC2, .length=2, },
+ { .string="PIC3", .data16=PIC3, .length=2, },
+ { .string="PIC4", .data16=PIC4, .length=2, },
+ { .string="PIC5", .data16=PIC5, .length=2, },
+ { .string="PIC6", .data16=PIC6, .length=2, },
+ { .string="PIC7", .data16=PIC7, .length=2, },
+ { .string="PIC8", .data16=PIC8, .length=2, },
+ { .string="PIC9", .data16=PIC9, .length=2, },
+ { .string="PIC0", .data16=PIC0, .length=2, },
+ { .string="GDB1", .data16=GDB1, .length=2, },
+ { .string="GDB2", .data16=GDB2, .length=2, },
+ { .string="GDB3", .data16=GDB3, .length=2, },
+ { .string="GDB4", .data16=GDB4, .length=2, },
+ { .string="GDB5", .data16=GDB5, .length=2, },
+ { .string="GDB6", .data16=GDB6, .length=2, },
+ { .string="GDB7", .data16=GDB7, .length=2, },
+ { .string="GDB8", .data16=GDB8, .length=2, },
+ { .string="GDB9", .data16=GDB9, .length=2, },
+ { .string="GDB0", .data16=GDB0, .length=2, },
+
+ // finally, StatVars
+ { .string="Sx1", .data16=SX1, .length=2, },
+ { .string="Sx2", .data16=SX2, .length=2, },
+ { .string="Sxp", .data16=SXP, .length=2, },
+ { .string="RegEq", .data16=REGEQ, .length=2, },
+ { .string="[n]", .data16=STAT_N, .length=2, },
+ { .string="mean(x)", .data16=MEANX, .length=2, },
+ { .string="sum(x)^2", .data16=SUMXSQUARED, .length=2, },
+ { .string="sum(x)", .data16=SUMX, .length=2, },
+ { .string="Sx", .data16=SX, .length=2, },
+ { .string="[sigma]x", .data16=SIGMAX, .length=2, },
+ { .string="minX", .data16=MINX, .length=2, },
+ { .string="maxX", .data16=MAXX, .length=2, },
+ { .string="minY", .data16=MINY, .length=2, },
+ { .string="maxY", .data16=MAXY, .length=2, },
+ { .string="mean(y)", .data16=MEANY, .length=2, },
+ { .string="sum(y)^2", .data16=SUMYSQUARED, .length=2, },
+ { .string="sum(y)", .data16=SUMY, .length=2, },
+ { .string="Sy", .data16=SY, .length=2, },
+ { .string="[sigma]y", .data16=SIGMAY, .length=2, },
+ { .string="sum(xy)", .data16=SUMXY, .length=2, },
+ { .string="[r]", .data16=SYSVAR_R, .length=2, },
+ { .string="Med", .data16=MED, .length=2, },
+ { .string="Q1", .data16=Q1, .length=2, },
+ { .string="Q3", .data16=Q3, .length=2, },
+ { .string="[a]", .data16=SYSVAR_A, .length=2, },
+ { .string="[b]", .data16=SYSVAR_B, .length=2, },
+ { .string="[c]", .data16=SYSVAR_C, .length=2, },
+ { .string="[d]", .data16=SYSVAR_D, .length=2, },
+ { .string="[stat_e]", .data16=SYSVAR_E, .length=2, },
+ { .string="x1", .data16=X1, .length=2, },
+ { .string="x2", .data16=X2, .length=2, },
+ { .string="x3", .data16=X3, .length=2, },
+ { .string="y1", .data16=Y1_1, .length=2, },
+ { .string="y2", .data16=Y2_1, .length=2, },
+ { .string="y3", .data16=Y3_1, .length=2, },
+ { .string="[n]", .data16=SYSVAR_N, .length=2, },
+ { .string="[p]", .data16=SYSVAR_P, .length=2, },
+ { .string="[z]", .data16=SYSVAR_Z, .length=2, },
+ { .string="[t]", .data16=SYSVAR_T, .length=2, },
+ { .string="[chi]^2", .data16=CHISQUARED, .length=2, },
+ { .string="[fin]", .data16=FIN, .length=2, },
+ { .string="[df]", .data16=DF, .length=2, },
+ { .string="[p^]", .data16=PHAT, .length=2, },
+ { .string="[p^1]", .data16=PHAT1, .length=2, },
+ { .string="[p^2]", .data16=PHAT2, .length=2, },
+ { .string="mean(x1)", .data16=MEANX1, .length=2, },
+ { .string="[n1]", .data16=N1, .length=2, },
+ { .string="mean(x2)", .data16=MEANX2, .length=2, },
+ { .string="[n2]", .data16=N2, .length=2, },
+ { .string="[lower]", .data16=LOWER, .length=2, },
+ { .string="[upper]", .data16=UPPER, .length=2, },
+ { .string="[s]", .data16=SYSVAR_S, .length=2, },
+ { .string="r^2", .data16=RSQUARED, .length=2, },
+ { .string="R^2", .data16=CAPRSQUARED, .length=2, },
+ { .string="[df]", .data16=DF2, .length=2, },
+ { .string="SS", .data16=SS, .length=2, },
+ { .string="[df]", .data16=DF3, .length=2, },
+ { .string="SS", .data16=SS1, .length=2, },
+ { .string="MS", .data16=MS1, .length=2, },
+
+ // graph data
+ { .string="ZXscl", .data16=ZXSCL, .length=2, },
+ { .string="ZYscl", .data16=ZYSCL, .length=2, },
+ { .string="Xscl", .data16=XSCL, .length=2, },
+ { .string="Yscl", .data16=YSCL, .length=2, },
+ { .string="ZUnStart", .data16=ZUNSTART, .length=2, },
+ { .string="ZVnStart", .data16=ZVNSTART, .length=2, },
+ { .string="UnStart", .data16=UNSTART, .length=2, },
+ { .string="VnStart", .data16=VNSTART, .length=2, },
+ { .string="Un-1", .data16=UNINVERSE, .length=2, },
+ { .string="Vn-1", .data16=VNINVERSE, .length=2, },
+ { .string="ZXmin", .data16=ZXMIN, .length=2, },
+ { .string="ZXmax", .data16=ZXMAX, .length=2, },
+ { .string="ZYmin", .data16=ZYMIN, .length=2, },
+ { .string="ZYmax", .data16=ZYMAX, .length=2, },
+ { .string="Ztheta_min", .data16=ZTHETAMIN, .length=2, },
+ { .string="Ztheta_max", .data16=ZTHETAMAX, .length=2, },
+ { .string="ZTmin", .data16=ZTMIN, .length=2, },
+ { .string="ZTmax", .data16=ZTMAX, .length=2, },
+ { .string="Xmin", .data16=XMIN, .length=2, },
+ { .string="Xmax", .data16=XMAX, .length=2, },
+ { .string="Ymin", .data16=YMIN, .length=2, },
+ { .string="Ymax", .data16=YMAX, .length=2, },
+ { .string="Tmin", .data16=TMIN, .length=2, },
+ { .string="Tmax", .data16=TMAX, .length=2, },
+ { .string="theta_min", .data16=THETAMIN, .length=2, },
+ { .string="theta_max", .data16=THETAMAX, .length=2, },
+ { .string="TblMin", .data16=TBLMIN, .length=2, },
+ { .string="ZnMin", .data16=ZNMIN, .length=2, },
+ { .string="nMin", .data16=NMIN, .length=2, },
+ { .string="ZnMax", .data16=ZNMAX, .length=2, },
+ { .string="nMax", .data16=NMAX, .length=2, },
+ { .string="ZnStart", .data16=ZNSTART, .length=2, },
+ { .string="nStart", .data16=NSTART, .length=2, },
+ { .string="delta_Tbl", .data16=DELTATABLE, .length=2, },
+ { .string="ZTstep", .data16=ZTSTEP, .length=2, },
+ { .string="Ztheta_step", .data16=ZTHETASTEP, .length=2, },
+ { .string="Tstep", .data16=TSTEP, .length=2, },
+ { .string="theta_step", .data16=THETASTEP, .length=2, },
+ { .string="delta_X", .data16=DELTAX, .length=2, },
+ { .string="delta_Y", .data16=DELTAY, .length=2, },
+ { .string="XFact", .data16=XFACT, .length=2, },
+ { .string="YFact", .data16=YFACT, .length=2, },
+ { .string="TblInput", .data16=TBLINPUT, .length=2, },
+ // finance app
+ { .string="[N]", .data16=SYSVAR_CAPN, .length=2, },
+ { .string="I%", .data16=IPERCENT, .length=2, },
+ { .string="PV", .data16=PV, .length=2, },
+ { .string="PMT", .data16=PMT, .length=2, },
+ { .string="FV", .data16=FV, .length=2, },
+ { .string="ZXres", .data16=ZXRES, .length=2, },
+ { .string="Xres", .data16=XRES, .length=2, },
+ // strings
+ { .string="STR1", .data16=STR1, .length=2, },
+ { .string="STR2", .data16=STR2, .length=2, },
+ { .string="STR3", .data16=STR3, .length=2, },
+ { .string="STR4", .data16=STR4, .length=2, },
+ { .string="STR5", .data16=STR5, .length=2, },
+ { .string="STR6", .data16=STR6, .length=2, },
+ { .string="STR7", .data16=STR7, .length=2, },
+ { .string="STR8", .data16=STR8, .length=2, },
+ { .string="STR9", .data16=STR9, .length=2, },
+ { .string="STR0", .data16=STR0, .length=2, },
+ // 7E Variables
+ { .string="Sequential", .data16=SEQ, .length=2, },
+ { .string="Simul", .data16=SIMUL, .length=2, },
+ { .string="PolarGC", .data16=POLARGC, .length=2, },
+ { .string="RectGC", .data16=RECTGC, .length=2, },
+ { .string="CoordOn", .data16=COORDON, .length=2, },
+ { .string="CoordOff", .data16=COORDOFF, .length=2, },
+ { .string="Connected", .data16=CONNECTED, .length=2, },
+ { .string="Dot", .data16=DOT_7E, .length=2, },
+ { .string="AxesOn", .data16=AXESON, .length=2, },
+ { .string="AxesOff", .data16=AXESOFF, .length=2, },
+ { .string="GridOn", .data16=GRIDON, .length=2, },
+ { .string="GridOff", .data16=GRIDOFF, .length=2, },
+ { .string="LabelOn", .data16=LABELON, .length=2, },
+ { .string="LabelOff", .data16=LABELOFF, .length=2, },
+ { .string="Web", .data16=WEB, .length=2, },
+ { .string="Time", .data16=TIME, .length=2, },
+ { .string="uvAxes", .data16=UVAXES, .length=2, },
+ { .string="vwAxes", .data16=VWAXES, .length=2, },
+ { .string="uwAxes", .data16=UWAXES, .length=2, },
+ // BB Variables
+ { .string="npv(", .data16=NPV, .length=2, },
+ { .string="irr(", .data16=IRR, .length=2, },
+ { .string="bal(", .data16=BAL, .length=2, },
+ { .string="sum_prn(", .data16=SUMPRN, .length=2, },
+ { .string="sum_int(", .data16=SUMINT, .length=2, },
+ { .string="->Nom", .data16=TONOM, .length=2, },
+ { .string="->Eff", .data16=TOEFF, .length=2, },
+ { .string="dbd(", .data16=DBD, .length=2, },
+ { .string="lcm(", .data16=LCM, .length=2, },
+ { .string="gcd(", .data16=GCD, .length=2, },
+ { .string="RandInt(", .data16=RANDINT, .length=2, },
+ { .string="RandBin(", .data16=RANDBIN, .length=2, },
+ { .string="sub(", .data16=SUB, .length=2, },
+ { .string="StdDev(", .data16=STDDEV, .length=2, },
+ { .string="variance(", .data16=VARIANCE, .length=2, },
+ { .string="inString(", .data16=INSTRING, .length=2, },
+ { .string="normalcdf(", .data16=NORMALCDF, .length=2, },
+ { .string="invNorm(", .data16=INVNORM, .length=2, },
+ { .string="tcdf(", .data16=TCDF, .length=2, },
+ { .string="x^2cdf(", .data16=XSQUCDF, .length=2, },
+ { .string="fcdf(", .data16=FCDF, .length=2, },
+ { .string="binompdf(", .data16=BINOMPDF, .length=2, },
+ { .string="binomcdf(", .data16=BINOMCDF, .length=2, },
+ { .string="poissonpdf(", .data16=POISSONPDF, .length=2, },
+ { .string="poissoncdf(", .data16=POISSONCDF, .length=2, },
+ { .string="geometpdf(", .data16=GEOMETPDF, .length=2, },
+ { .string="geometcdf(", .data16=GEOMETCDF, .length=2, },
+ { .string="normalpdf(", .data16=NORMALPDF, .length=2, },
+ { .string="tpdf(", .data16=TPDF, .length=2, },
+ { .string="x^2pdf(", .data16=XSQUPDF, .length=2, },
+ { .string="fpdf(", .data16=FPDF, .length=2, },
+ { .string="RandNorm(", .data16=RANDNORM, .length=2, },
+ { .string="tvm_pmt", .data16=TVM_PMT, .length=2, },
+ { .string="tvm_i%", .data16=TVM_I_PERCENT, .length=2, },
+ { .string="tvm_PV", .data16=TVM_PV, .length=2, },
+ { .string="tvm_N", .data16=TVM_N, .length=2, },
+ { .string="tvm_FV", .data16=TVM_FV, .length=2, },
+ { .string="conj(", .data16=CONJ, .length=2, },
+ { .string="real(", .data16=REAL, .length=2, },
+ { .string="imag(", .data16=IMAG, .length=2, },
+ { .string="angle(", .data16=ANGLE, .length=2, },
+ { .string="cumSum(", .data16=CUMSUM, .length=2, },
+ { .string="expr(", .data16=EXPR, .length=2, },
+ { .string="length(", .data16=LENGTH, .length=2, },
+ { .string="delta_List(", .data16=DELTA_LIST, .length=2, },
+ { .string="ref(", .data16=REF, .length=2, },
+ { .string="rref(", .data16=RREF, .length=2, },
+ { .string="->Rect", .data16=TORECT, .length=2, },
+ { .string="->Polar", .data16=TOPOLAR, .length=2, },
+ { .string="[e]", .data16=VAR_E, .length=2, },
+ { .string="SinReg ", .data16=SINREG, .length=2, },
+ { .string="Logistic ", .data16=LOGISTIC, .length=2, },
+ { .string="LinRegTTest ", .data16=LINREGTTEST, .length=2, },
+ { .string="ShadeNorm(", .data16=SHADENORM, .length=2, },
+ { .string="Shade_t(", .data16=SHADE_T, .length=2, },
+ { .string="Shade_x^2(", .data16=SHADEXSQU, .length=2, },
+ { .string="ShadeF(", .data16=SHADEF, .length=2, },
+ { .string="Matr->list", .data16=MATRTOLIST, .length=2, },
+ { .string="List->matr", .data16=LISTTOMATR, .length=2, },
+ { .string="Z-Test(", .data16=ZTEST, .length=2, },
+ { .string="T-Test ", .data16=TTEST, .length=2, },
+ { .string="2-SampZTest(", .data16=TWO_SAMPZTEST, .length=2, },
+ { .string="1-PropZTest(", .data16=ONE_PROPZTEST, .length=2, },
+ { .string="2-PropZTest(", .data16=TWO_PROPZTEST, .length=2, },
+ { .string="x^2_test(", .data16=XSQUTEST, .length=2, },
+ { .string="ZInterval", .data16=ZINTERVAL, .length=2, },
+ { .string="2-SampZInt(", .data16=TWO_SAMPZINT, .length=2, },
+ { .string="1-PropZInt(", .data16=ONE_PROPZINT, .length=2, },
+ { .string="2-PropZInt(", .data16=TWO_PROPZINT, .length=2, },
+ { .string="GraphStyle(", .data16=GRAPHSTYLE, .length=2, },
+ { .string="2-SampTTest ", .data16=TWO_SAMPTTEST, .length=2, },
+ { .string="2-SampFTest_", .data16=TWO_SAMPFTEST, .length=2, },
+ { .string="TInterval ", .data16=TINTERVAL, .length=2, },
+ { .string="2-SampTInt ", .data16=TWO_SAMPTINT, .length=2, },
+ { .string="SetUpEditor ", .data16=SETUPEDITOR, .length=2, },
+ { .string="PMT_End", .data16=PMT_END, .length=2, },
+ { .string="PMT_Bgn", .data16=PMT_BGN, .length=2, },
+ { .string="Real", .data16=REAL_BB, .length=2, },
+ { .string="re^[theta]i", .data16=REPOWTHETAI, .length=2, },
+ { .string="a+bi", .data16=APLUSBI, .length=2, },
+ { .string="ExprOn", .data16=EXPRON, .length=2, },
+ { .string="ExprOff", .data16=EXPROFF, .length=2, },
+ { .string="ClrAllLists", .data16=CLRALLLISTS, .length=2, },
+ { .string="GetCalc(", .data16=GETCALC, .length=2, },
+ { .string="DelVar ", .data16=DELVAR, .length=2, },
+ { .string="Equ->String(", .data16=EQUTOSTRING, .length=2, },
+ { .string="String->Equ(", .data16=STRINGTOEQU, .length=2, },
+ { .string="Clear Entries", .data16=CLEARENTRIES, .length=2, },
+ { .string="Select(", .data16=SELECT, .length=2, },
+ { .string="ANOVA(", .data16=ANOVA, .length=2, },
+ { .string="ModBoxPlot", .data16=MODBOXPLOT, .length=2, },
+ { .string="NormProbPlot", .data16=NORMPROBPLOT, .length=2, },
+
+ { .string="\"", .data8=DOUBLEQUOTE, .length=1, },
+ { .string="'", .data8=APOSTROPHE, .length=1, },
+ { .string=",", .data8=COMMA, .length=1, },
+ { .string="?", .data8=QUESTIONMARK, .length=1, },
+ { .string=" ", .data8=SPACE, .length=1, },
+ { .string="=", .data8=TEST_EQUAL, .length=1, },
+ { .string="<", .data8=TEST_LESSTHAN, .length=1, },
+ { .string=">", .data8=TEST_HIGHTHAN, .length=1, },
+ { .string="+", .data8=ADD, .length=1, },
+ { .string="-", .data8=SUBTRACT, .length=1, },
+ { .string="/", .data8=DIVIDE_SLASH, .length=1, },
+ { .string="*", .data8=MULTIPLY, .length=1, },
+ { .string="!", .data8=FACTORIAL, .length=1, },
+ { .string=":", .data8=COLON, .length=1, },
+ { .string="\n", .data8=HARD_RETURN, .length=1, },
+ { .string="0", .data8=NUM_0, .length=1, },
+ { .string="1", .data8=NUM_1, .length=1, },
+ { .string="2", .data8=NUM_2, .length=1, },
+ { .string="3", .data8=NUM_3, .length=1, },
+ { .string="4", .data8=NUM_4, .length=1, },
+ { .string="5", .data8=NUM_5, .length=1, },
+ { .string="6", .data8=NUM_6, .length=1, },
+ { .string="7", .data8=NUM_7, .length=1, },
+ { .string="8", .data8=NUM_8, .length=1, },
+ { .string="9", .data8=NUM_9, .length=1, },
+ { .string=".", .data8=PERIOD, .length=1, },
+ { .string="[", .data8=LEFTSBRACK, .length=1, },
+ { .string="]", .data8=RIGHTSBRACK, .length=1, },
+ { .string="{", .data8=LEFTBRACE, .length=1, },
+ { .string="}", .data8=RIGHTBRACE, .length=1, },
+ { .string="(", .data8=LEFTBRACKET, .length=1, },
+ { .string=")", .data8=RIGHTBRACKET, .length=1, },
+ { .string="&", .data8=LOGIC_AND, .length=1, },
+ { .string="|", .data8=LOGIC_OR, .length=1, },
+ { .string="~", .data8=LOGIC_XOR, .length=1, },
+ { .string="=", .data8=TEST_EQUAL, .length=1, },
+ { .string="<", .data8=TEST_LESSTHAN, .length=1, },
+ { .string=">", .data8=TEST_HIGHTHAN, .length=1, },
+ { .string="^", .data8=POWEROF, .length=1, },
+};
+
+#endif