Another oldie but goodie. Basic skeleton for a spreadsheet. Should work with freebasic using the “-lang qb” option.

' lizzycalc version -1
'
' updated March 1995 by computoman for qbasic.
' updated September 2009 by computoman for freebasic in qbasic mode
' last update: September 2009
'
' commands      : description
'---------------:-----------------------------------------------
' "/'/^text     : enter text in a current cell (left/right/middle just)
' =expression   : enter number or formula in a current cell
' text         : repeat text up to cell width
' |fun          : static special functions i. e. time, date, file
'               : smv, or smh
' @func         : real-time special functions of above
' c             : change column width
' d             : numeric data file of certain cells
' f             : do file operations (load/save/new)
' h or ?        : show this help screen
' i             : insert row or column
' j             : toggle form feed after print flag
' p             : output results to file or printer without the border
' q             : quit
' r             : replicate a single cell multiple times
' s             : output data to file or printer"
' u             : toggle update screen flag
' arrow keys    : move cursor in indicated direction
' expressions   : numeric constant or cell id in form <col>
'                 above items separated by operators +,-,*,^,|, or /
'                 evaluation is from left to right without operator
'                 preference.  expressions are evaluated on enter and
'                 on the u command.
Start:
    GOSUB Notice
    GOSUB Housekeeping
    WHILE Quit$  "Yes"
       GOSUB Command.loop
    WEND
    GOSUB End.of.job
    rem shell "sudo setterm -dump -file lc.txt"
END

Housekeeping:
    ' daffinitions
    RANDOMIZE (TIMER)
    ON ERROR GOTO Checkerror
    Badfilename = 53
    uit$ = "No"
    Quote$ = CHR$(34)
    Equal$ = "="
    DEFINT I, N, W-Y
    Updateflag = 1
    Nilflag = 1
    Equal = 1
    Plus = 2
    Minus = 3
    Multiply = 4
    Divide = 5
    Exponent = 6
    Root = 7
    Moveup = 72
    Moveleft = 75
    Moveright = 77
    Movedown = 80
    Quit = 16
    Scrdepth = 20 REM 20 is default to cga 45 is good for vga.
    Scrwidth = 80
    DIM Colwidth(27)
    Colbase = 7: REM 7 and 10 work fine for 80 col screen.
    Colwidth(0) = 4
    FOR x = 1 TO 27
        Colwidth(x) = Colbase
    NEXT x
    WIDTH Scrwidth, Scrdepth + 5
    Maxcols = 27
    Maxrows = Scrdepth
    DIM D(Maxcols, Maxrows), D$(Maxcols, Maxrows), Dold$(Maxcols, Maxrows)
    Operate$ = "=+-*/^|"
    Numops = LEN(Operate$)
    DIM O$(Numops)
    FOR zz = 1 TO Numops
        O$(zz) = MID$(Operate$, zz, 1)
    NEXT zz
    FOR x = 1 TO Maxcols
        D$(x, 0) = CHR$(x + ASC("A") - 1) + SPACE$(Colwidth(Crsx) - 1)
    NEXT x
    FOR Y = 1 TO Maxrows
        D$(0, Y) = SPACE$(Colwidth(Crsx) - 3) + RIGHT$(STR$(Y), 2) + " "
    NEXT Y
    Maxcols = Scrwidth / (Colwidth(0) + 1)
    D$(0, 0) = " U" + SPACE$(Colwidth(Crsx) - 2)
    bb = 0
    FOR cc = 0 TO Crsx - 1
        bb = bb + Colwidth(cc)
    NEXT cc
    bbb = 0
    FOR ccc = 0 TO 27
        bbb = bbb + Colwidth(ccc)
        IF bbb &gt;= 80 THEN
            EXIT FOR
        END IF
    NEXT ccc
    Maxcols = ccc - 1
    GOSUB Printscreen
    Crsx = 1
    Crsy = 1
    GOSUB Screenlocate
    COLOR 0, 7
    LOCATE Yloc, Xloc
    PRINT SPACE$(Colwidth(Crsx));
    COLOR 7, 0
RETURN

Command.loop:
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    In$ = ""
    Ik = 0
    LOCATE Scrdepth + 3, 1
    PRINT "Command: ";
    WHILE Ik  &amp;HD
        i$ = ""
        WHILE i$ = ""
            i$ = INKEY$
        WEND
        Ik = ASC(i$)
        SELECT CASE LEN(i$)
            CASE 2
                SELECT CASE ASC(RIGHT$(i$, 1))
                    CASE 33
                        GOSUB Fileroutine
                        GOSUB Printscreen
                        GOSUB Show.data
                        LOCATE Scrdepth + 3, 1
                        PRINT "Command: ";
                    CASE Quit
                        Quit$ = "Yes"
                        RETURN
                    CASE Moveup, Movedown, Moveleft, Moveright
                        GOSUB Movecursor
                END SELECT
            CASE 1
                SELECT CASE Ik
                    CASE 8
                        GOSUB Processbackspace
                    CASE ELSE
                        IF Ik  &amp;HD THEN
                            PRINT i$;
                             In$ = In$ + i$
                        END IF
                END SELECT
            CASE 0
                REM
        END SELECT
    WEND
    'Evaluate.the.input.string:
    C$ = LEFT$(In$, 1)
    LOCATE Scrdepth + 4, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 4, 1
    PRINT In$;
    SELECT CASE UCASE$(C$)
        CASE "'"
            GOSUB Makeright
        CASE "^"
            GOSUB Makemiddle
        CASE Quote$
            GOSUB Forminput
        CASE ""
            GOSUB Somerepeat
        CASE "|"
            GOSUB Funkey
        CASE "I"
            GOSUB Insertitin
        CASE "D"
            GOSUB Cellfill
        CASE "@"
            GOSUB Funcit
        CASE "="
            GOSUB Forminputa
        CASE "U"
            GOSUB Updatevalues
        CASE "R"
            GOSUB Replicatecell
        CASE "S"
            GOSUB Outdata
        CASE "P"
            GOSUB Hardcopy
        CASE "J"
            GOSUB SetFFflag
        CASE "F"
            GOSUB Fileroutine
        CASE "H", "?"
            GOSUB Do.Help
            GOSUB Printscreen
        CASE "C"
            GOSUB Setcols
        CASE "Q"
            Quit$ = "Yes"
            RETURN
        CASE ""
            Nilflag = 0
        CASE ELSE
            ER$ = "BAD input: " + In$
            GOSUB Generaterror
    END SELECT
    LOCATE 1, 1
    COLOR 0, 7
    PRINT D$(0, 0);
    COLOR 7, 0
    IF Updateflag = 1 THEN
        GOSUB Do.updatevalues
    END IF
    GOSUB Show.data
RETURN

End.of.job:
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Enter (S)ave data, or (Q)uit: ";
    QQ$ = ""
    WHILE QQ$  "S" AND QQ$  "Q" AND QQ$  CHR$(1 + 12)
        QQ$ = UCASE$(INPUT$(1))
    WEND
    IF QQ$  CHR$(1 + 12) THEN
        PRINT QQ$
    END IF
    IF QQ$ = "Q" OR QQ$ = CHR$(1 + 12) THEN
        QQ$ = ""
    END IF
    IF QQ$  "" THEN
        SELECT CASE UCASE$(QQ$)
            CASE "S"
                LOCATE Scrdepth + 3, 1
                PRINT SPACE$(79);
                LOCATE Scrdepth + 3, 1
                Datum$ = ""
                INPUT "Enter file name: ", Datumf$
                IF Datumf$ = "" THEN
                    RETURN
                END IF
                OPEN Datumf$ FOR OUTPUT AS #1
                FOR ay = 1 TO 26
                    PRINT #1, Colwidth(ay)
                NEXT ay
                PRINT #1, Updateflag
                PRINT #1, Nilflag
                FOR ay = 1 TO Maxrows
                    FOR AX = 1 TO Maxcols
                        PRINT #1, AX
                        PRINT #1, ay
                        IF D$(AX, ay) = "" THEN
                            PRINT #1, D(AX, ay)
                            PRINT #1, ""
                        ELSE
                            PRINT #1, D(AX, ay)
                            PRINT #1, D$(AX, ay)
                        END IF
                    NEXT AX
                NEXT ay
                CLOSE #1
                QQ$ = ""
        END SELECT
    END IF
    rem CLS
    PRINT "Lizzyclc (V.: -1) from computoman Independent Support Services"
    PRINT STRING$(79, 196)
    PRINT
    PRINT "Thank you for using Lizzyclc."
    PRINT "If you use this program more than several times and would like to"
    PRINT "see more programs like the Lizzywrd, Lizzytrm, Lizzyclc, Lizzydb,"
    PRINT "and Lizzycht then please send $1.00 or more to:"
    PRINT
    PRINT "      Edward computoman dba"
    PRINT "      computoman Independent Support Services"
    PRINT "      872 Strey Lane, Suite 518"
    PRINT "      Houston, Texas 77024"
    PRINT
    a$ = ""
    WHILE a$ = ""
        a$ = INPUT$(1)
    WEND
RETURN

'=========================================================================
' subroutines
Movecursor:
    'sub to move cursor
    GOSUB Fixit
    GOSUB Prepareoutput
    SELECT CASE Ik
        CASE Moveleft
            ' move left
            IF Crsx &gt; 1 THEN
                Crsx = Crsx - 1
            END IF
        CASE Moveright
            'move  right
            IF Crsx &lt; Maxcols THEN
                Crsx = Crsx + 1
            END IF
        CASE Movedown
            ' move down
            IF Crsy  1 THEN
                Crsy = Crsy - 1
            END IF
    END SELECT
    GOSUB Show.data
RETURN

Screenlocate:
 ' sub to compute screen postion
 bb = 0
 FOR cc = 0 TO Crsx - 1
    bb = bb + Colwidth(cc)
 NEXT cc
 Xloc = bb + 1
 Yloc = Crsy + 1
RETURN

Processbackspace:
 ' sub to process backspace on command line
 NEWLEN = LEN(In$) - 1
 IF NEWLEN &gt;= 0 THEN
  GOSUB Commandlst
 END IF
RETURN

Forminput:
    ' sub to formulate input
    D(Crsx, Crsy) = 0
    TEXTLEN = LEN(In$) - 1
    IF TEXTLEN &lt; 1 THEN
        TEXTLEN = 1
    END IF
    IF RIGHT$(In$, 1) = Quote$ THEN
        TEXTLEN = TEXTLEN - 1
    END IF
    Dold$(Crsx, Crsy) = In$
    D$(Crsx, Crsy) = In$
    GOSUB Showcell
RETURN

Forminputa:
    'sub to formula input
    V$ = In$
    GOSUB Evaluateterm
    IF ERRFLAG = 0 THEN
        D$(Crsx, Crsy) = In$
        Dold$(Crsx, Crsy) = In$
    END IF
    GOSUB Showcell
RETURN

Prepareoutput:
    'SUB TO PREPARE OUTPUT
    Dold$(Crsx, Crsy) = D$(Crsx, Crsy)
    IF LEFT$(Dold$(Crsx, Crsy), 1)  Quote$ THEN
        SELECT CASE LEFT$(D$(Crsx, Crsy), 1)
            CASE "="
                V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + STR$(D(Crsx, Crsy)), Colwidth(Crsx))
                IF RIGHT$(Dold$(Crsx, Crsy), 1) = Quote$ THEN
                    Dold$(Crsx, Crsy) = LEFT$(Dold$(Crsx, Crsy), LEN(Dold$(Crsx, Crsy)) - 1)
                END IF
                IF RIGHT$(D$(Crsx, Crsy), 1) = Quote$ THEN
                    D$(Crsx, Crsy) = LEFT$(D$(Crsx, Crsy), LEN(D$(Crsx, Crsy)) - 1)
                END IF
            CASE "@"
                SELECT CASE LCASE$(MID$(D$(Crsx, Crsy), 2, 4))
                    CASE "time"
                        V$ = TIME$
                    CASE "date"
                        V$ = DATE$
                    CASE "file"
                        V$ = Datumf$
                    CASE "smv("
                        Cntr1 = ASC(MID$(UCASE$(D$(Crsx, Crsy)), 6, 1)) - 64
                        Cntr2 = VAL(MID$(D$(Crsx, Crsy), 7, 2))
                        Cntr3 = VAL(MID$(D$(Crsx, Crsy), 9, 2))
                        D(Crsx, Crsy) = 0
                        FOR x = Cntr2 TO Cntr3
                            D(Crsx, Crsy) = D(Crsx, Crsy) + D(Cntr1, x)
                        NEXT x
                        V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + STR$(D(Crsx, Crsy)), Colwidth(Crsx))
                    CASE "smh("
                        Cntr1 = ASC(MID$(UCASE$(D$(Crsx, Crsy)), 6, 1)) - 64
                        Cntr2 = VAL(MID$(D$(Crsx, Crsy), 7, 2))
                        Cntr3 = ASC(MID$(UCASE$(D$(Crsx, Crsy)), 9, 1)) - 64
                        D(Crsx, Crsy) = 0
                        FOR x = Cntr1 TO Cntr3
                            D(Crsx, Crsy) = D(Crsx, Crsy) + D(x, Cntr2)
                        NEXT x
                        V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + STR$(D(Crsx, Crsy)), Colwidth(Crsx))
                END SELECT
            CASE ""
                Znrepeat$ = ""
                Zrepeat$ = RIGHT$(D$(Crsx, Crsy), LEN(D$(Crsx, Crsy)) - 1)
                FOR x = 1 TO Colwidth(Crsx)
                    Znrepeat$ = Znrepeat$ + Zrepeat$
                NEXT x
                V$ = LEFT$(Znrepeat$, Colwidth(Crsx))
            CASE "'"
                V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + RIGHT$(D$(Crsx, Crsy), LEN(D$(Crsx, Crsy)) - 1), Colwidth(Crsx))
            CASE "^"
                V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + RIGHT$(D$(Crsx, Crsy), LEN(D$(Crsx, Crsy)) - 1), INT(LEN(D$(Crsx, Crsy)) + Colwidth(Crsx)) / 2)
            CASE ELSE
                V$ = LEFT$(D$(Crsx, Crsy) + SPACE$(Colwidth(Crsx)), Colwidth(Crsx))
        END SELECT
    ELSE
        IF LEN(V$) &lt; Colwidth(Crsx) THEN
            V$ = RIGHT$(D$(Crsx, Crsy), LEN(Dold$(Crsx, Crsy)) - 1) + SPACE$(Colwidth(Crsx))
        ELSE
            V$ = RIGHT$(D$(Crsx, Crsy), LEN(Dold$(Crsx, Crsy)) - 1)
        END IF
    END IF
    IF D$(Crsx, Crsy) = &quot;&quot; THEN
        D(Crsx, Crsy) = 0
    END IF
    V$ = LEFT$(V$ + SPACE$(Colwidth(Crsx)), Colwidth(Crsx))
RETURN

Evaluateterm:
    ' SUB TO EVALUATE EXPRESSION
    ERRFLAG = 0
    VI$ = V$
    WHILE V$  ""
        GOSUB Decodeoperator
        IF ERRFLAG  0 THEN
            ER$ = "BAD OPERATOR IN:" + VI$
            GOSUB Generaterror
            RETURN
        END IF
        GOSUB Decodeoperand
        IF ERRFLAG  0 THEN
            ER$ = "BAD FORMULA:" + VI$
            GOSUB Generaterror
            RETURN
        END IF
        SELECT CASE OPCODE
            CASE IS = Equal
                VL = V
            CASE IS = Plus
                VL = VL + V
            CASE IS = Minus
                VL = VL - V
            CASE IS = Multiply
                VL = VL * V
            CASE IS = Divide
                VL = VL / V
            CASE IS = Exponent
                VL = VL ^ V
            CASE IS = Root
                VL = VL ^ (1 / V)
        END SELECT
    WEND
    D(Crsx, Crsy) = VL
RETURN

Decodeoperator:
    ' SUB TO DECODE OPERATOR
    Op$ = LEFT$(V$, 1)
    OPCODE = 0
    FOR i = 1 TO Numops
        IF Op$ = O$(i) THEN
            OPCODE = i
            i = Numops
            V$ = MID$(V$, 2)
        END IF
    NEXT i
    IF OPCODE = 0 THEN
        ERRFLAG = 1
    END IF
RETURN

Decodeoperand:
    'SUB TO DECODE OPERAND
    V = VAL(V$)
    C$ = LEFT$(V$, 1)
    ERRFLAG = 0
    T = 0
    IF V = 0 AND C$  "0" THEN
        GOSUB Processcellnam
    ELSE
        GOSUB Processconstant
    END IF
RETURN

Processconstant:
    'SUB TO PROCESS AS A CONSTANT
    IX = 1
    IF C$ = "-" THEN
        C$ = "0"
    END IF
    WHILE (C$ &gt;= "0" AND C$  32 THEN
        C = C - 32
    END IF
    IF C  Maxcols THEN
        ERRFLAG = 1
        RETURN
    END IF
    XC = C
    C = 0
    WHILE V$  "" AND C &gt;= 0 AND C &lt;= 9
        V$ = MID$(V$, 2)
        IF V$  "" THEN
            C = ASC(V$) - ASC("0")
            IF C &gt;= 0 AND C  Maxrows THEN
        ERRFLAG = 1
        RETURN
    END IF
    YC = T
    V = D(XC, YC)
RETURN

Generaterror:
    ' SUB TO GENERATE GENERAL ERROR REPORT
    LOCATE Scrdepth + 4, 1
    PRINT ER$ + "    ";
    BEEP
    WHILE INKEY$ = ""
    WEND
    LOCATE Scrdepth + 4, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 4, 1
    PRINT CHR$(64 + Crsx); LTRIM$(RTRIM$(STR$(Crsy))); ": "; D$(Crsx, Crsy);
RETURN

Updatevalues:
    ' sub to update formula values
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Enter Automatic update (O)n or o(F)f: ";
    QQ$ = ""
    WHILE QQ$  "O" AND QQ$  "F" AND QQ$  "Q" AND QQ$  CHR$(1 + 12)
        QQ$ = UCASE$(INPUT$(1))
    WEND
    IF QQ$  CHR$(1 + 12) THEN
        PRINT QQ$
    END IF
    SELECT CASE UCASE$(QQ$)
        CASE "O"
            Updateflag = 1
            MID$(D$(0, 0), 2, 1) = "U"
        CASE "F"
            Updateflag = 0
            MID$(D$(0, 0), 2, 1) = " "
    END SELECT
RETURN

Do.updatevalues:
    LOCATE Scrdepth + 4, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 4, 1
    PRINT "Caculating!";
    LOCATE 1, 1
    Tempy = Crsy
    Tempx = Crsx
    FOR Crsy = 1 TO Maxrows
        LOCATE Crsy + 1, Colwidth(0) + 1
        FOR Crsx = 1 TO Maxcols
            IF LEFT$(Dold$(Crsx, Crsy), 1)  Quote$ AND LEFT$(Dold$(Crsx, Crsy), 1)  "" THEN
                SELECT CASE LEFT$(D$(Crsx, Crsy), 1)
                    CASE "="
                        V$ = D$(Crsx, Crsy)
                        GOSUB Evaluateterm
                END SELECT
            ELSE
                V$ = RIGHT$(D$(Crsx, Crsy), Colwidth(Crsx))
            END IF
            GOSUB Screenlocate
            LOCATE Yloc, Xloc
            GOSUB Prepareoutput
            PRINT LEFT$(V$, Colwidth(Crsx));
            IF POS(0) + Colwidth(Crsx + 1) &gt; 80 THEN
                EXIT FOR
            END IF
        NEXT Crsx
    NEXT Crsy
    Crsx = Tempx
    Crsy = Tempy
    GOSUB Screenlocate
    GOSUB Showcell
    LOCATE Scrdepth + 4, 1
    PRINT STRING$(79, " ");
    LOCATE Scrdepth + 4, 1
    PRINT CHR$(64 + Crsx); LTRIM$(RTRIM$(STR$(Crsy))); " "; D$(Crsx, Crsy);
RETURN

Showcell:
    ' sub to show current cell value
    GOSUB Screenlocate
    GOSUB Prepareoutput
    COLOR 0, 7
    LOCATE Yloc, Xloc
    PRINT V$;
    COLOR 7, 0
RETURN

Fileroutine:
    '--
    ' (F)ile routine
    '--
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Enter (L)oad data, (S)ave data, (N)ew, or (Q)uit: ";
    QQ$ = ""
    WHILE QQ$  "L" AND QQ$  "S" AND QQ$  "Q" AND QQ$  "N" AND QQ$  CHR$(1 + 12)
        QQ$ = UCASE$(INPUT$(1))
    WEND
    IF QQ$  CHR$(1 + 12) THEN
        PRINT QQ$
    END IF
    IF QQ$ = "Q" OR QQ$ = CHR$(1 + 12) THEN
        QQ$ = ""
    END IF
    IF QQ$  "" THEN
        IF QQ$  "N" THEN
            LOCATE Scrdepth + 3, 1
            PRINT SPACE$(79);
            LOCATE Scrdepth + 3, 1
            Datum$ = ""
            INPUT "Enter file name: ", Datumf$
            IF Datumf$ = "" THEN
                RETURN
            END IF
        END IF
        SELECT CASE UCASE$(QQ$)
            CASE "L"
                OPEN Datumf$ FOR INPUT AS #1
                FOR ay = 1 TO 26
                    INPUT #1, Colwidth(ay)
                NEXT ay
                INPUT #1, Updateflag
                INPUT #1, Nilflag
                WHILE NOT EOF(1)
                    INPUT #1, FX
                    INPUT #1, FY
                    INPUT #1, D(FX, FY)
                    LINE INPUT #1, D$(FX, FY)
                WEND
                CLOSE #1
                QQ$ = ""
                IF Updateflag = 0 THEN
                    GOSUB Do.updatevalues
                END IF
                GOSUB Printscreen
            CASE "N"
                LOCATE Scrdepth + 3, 1
                PRINT SPACE$(79);
                LOCATE Scrdepth + 3, 1
                PRINT "Are you sure (Y/N): ";
                QQ1$ = ""
                WHILE QQ1$  "Y" AND QQ1$  "N"
                    QQ1$ = UCASE$(INPUT$(1))
                WEND
                PRINT QQ1$
                IF QQ1$ = "Y" THEN
                    FOR Poo1 = 1 TO Maxcols
                        FOR Poo2 = 1 TO Maxrows
                            D(Poo1, Poo2) = 0
                            D$(Poo1, Poo2) = ""
                            Dold$(Poo1, Poo2) = ""
                        NEXT Poo2
                    NEXT Poo1
                    GOSUB Do.updatevalues
                END IF
            CASE "S"
                OPEN Datumf$ FOR OUTPUT AS #1
                FOR ay = 1 TO 26
                    PRINT #1, Colwidth(ay)
                NEXT ay
                PRINT #1, Updateflag
                PRINT #1, Nilflag
                FOR ay = 1 TO Maxrows
                    FOR AX = 1 TO Maxcols
                        PRINT #1, AX
                        PRINT #1, ay
                        IF D$(AX, ay) = "" THEN
                            PRINT #1, D(AX, ay)
                            PRINT #1, ""
                        ELSE
                            PRINT #1, D(AX, ay)
                            PRINT #1, D$(AX, ay)
                        END IF
                    NEXT AX
                NEXT ay
                CLOSE #1
                QQ$ = ""
        END SELECT
    END IF
RETURN

Printscreen:
    ' sub to print screen
    CLS
    DD = 0
    Tempy = Crsy
    Tempx = Crsx
    LOCATE Scrdepth + 5, 11
    PRINT "LIZZYCALC version -1 from computoman Independent Support Services"
    LOCATE 1, 1
    FOR Crsy = 0 TO Maxrows
        LOCATE Crsy + 1, 1
        FOR Crsx = 0 TO Maxcols
            GOSUB Prepareoutput
            IF Crsx = 0 OR Crsy = 0 THEN
                COLOR 0, 7
            ELSE
                COLOR 7, 0
            END IF
            PRINT V$;
            IF Crsx = 0 OR Crsy = 0 THEN
                COLOR 7, 0
            ELSE
                COLOR 0, 7
            END IF
            IF POS(0) + Colwidth(Crsx + 1) &gt; 80 THEN
                EXIT FOR
            END IF
        NEXT Crsx
    NEXT Crsy
    COLOR 7, 0
    Crsx = Tempx
    Crsy = Tempy
    LOCATE Scrdepth + 2, 1
    PRINT SPACE$(79);
RETURN

Commandlst:
    In$ = LEFT$(In$, NEWLEN)
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Command: "; In$;
RETURN

Fixit:
    ' fix i$
    Ik = ASC(RIGHT$(i$, 1))
RETURN

It:
    REM
RETURN

Show.data:
    LOCATE Yloc, Xloc
    PRINT V$;
    LOCATE Scrdepth + 4, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 4, 1
    PRINT CHR$(64 + Crsx); LTRIM$(RTRIM$(STR$(Crsy))); ": "; LTRIM$(RTRIM$(STR$(D(Crsx, Crsy)))); ", "; D$(Crsx, Crsy);
    GOSUB Showcell
    LOCATE Scrdepth + 3, LEN(In$) + 10
RETURN

Somerepeat:
    Znrepeat$ = ""
    Zin$ = In$
    Zrepeat$ = RIGHT$(In$, LEN(In$) - 1)
    FOR x = 1 TO Colwidth(Crsx)
        Znrepeat$ = Znrepeat$ + Zrepeat$
    NEXT x
    V$ = LEFT$(Znrepeat$, Colwidth(Crsx) + 1)
    Dold$(Crsx, Crsy) = Zin$
    D$(Crsx, Crsy) = Zin$
    GOSUB Forminput
RETURN

Replicatecell:
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter cell to replicate: ", Cell$
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter where to start copy: ", Cellstart$
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter where to end copy: ", Cellend$
    Cellcol = ASC(LEFT$(UCASE$(Cell$), 1)) - 64
    Cellrow = VAL(RIGHT$(Cell$, LEN(Cell$) - 1))
    Cellstartcol = ASC(LEFT$(UCASE$(Cellstart$), 1)) - 64
    Cellstartrow = VAL(RIGHT$(Cellstart$, LEN(Cellstart$) - 1))
    Cellendcol = ASC(LEFT$(UCASE$(Cellend$), 1)) - 64
    Cellendrow = VAL(RIGHT$(Cellend$, LEN(Cellend$) - 1))
    D$(Cellcol, Cellrow) = Dold$(Cellcol, Cellrow)
    FOR Cellcountcol = Cellstartcol TO Cellendcol
        FOR Cellcountrow = Cellstartrow TO Cellendrow
            snaker = Cellcountrow - Cellrow
            snakec = Cellcountcol - Cellcol
            SELECT CASE LEFT$(D$(Cellcol, Cellrow), 1)
                CASE "@"
                    SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), 2, 3)
                        CASE "smv"
                            snk1$ = CHR$(ASC(MID$(D$(Cellcol, Cellrow), 6, 1)) + snakec)
                            snake$ = snk1$ + MID$(D$(Cellcol, Cellrow), 7, 4)
                            D$(Cellcountcol, Cellcountrow) = "@smv(" + snake$ + ")"
                            Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                            In$ = D$(Cellcountcol, Cellcountrow)
                        CASE "smh"
                            snk1$ = MID$(D$(Cellcol, Cellrow), 6, 1)
                            snk2$ = RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(MID$(D$(Cellcol, Cellrow), 7, 2)) + snaker))), 2)
                            snk3$ = MID$(D$(Cellcol, Cellrow), 9, 1)
                            snake$ = snk1$ + snk2$ + snk3$
                            D$(Cellcountcol, Cellcountrow) = "@smh(" + snake$ + ")"
                            Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                            In$ = D$(Cellcountcol, Cellcountrow)
                    END SELECT
                CASE "="
                    Passing$ = ""
                    FOR x = 1 TO LEN(D$(Cellcol, Cellrow))
                       SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), x, 1)
                           CASE "+", "=", "-", "*", "/", "^", "|"
                               Passing$ = Passing$ + MID$(D$(Cellcol, Cellrow), x, 1)
                           CASE "a" TO "z"
                               Passing$ = Passing$ + CHR$(ASC(MID$(D$(Cellcol, Cellrow), x, 1)) + snakec)
                           CASE "0" TO "9"
                               SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), x - 1, 1)
                                   CASE "a" TO "z"
                                       Passingnum$ = ""
                                       FOR Y = x TO LEN(D$(Cellcol, Cellrow))
                                           Passpoo$ = MID$(D$(Cellcol, Cellrow), Y, 1)
                                           IF Passpoo$  "9" THEN
                                               EXIT FOR
                                           END IF
                                           Passingnum$ = Passingnum$ + Passpoo$
                                           x = x + 1
                                       NEXT Y
                                       x = x - 1
                                       Passing$ = Passing$ + RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(Passingnum$) + snaker))), 2)
                                   CASE ELSE
                                       Passingnum$ = ""
                                       FOR Y = x TO LEN(D$(Cellcol, Cellrow))
                                           Passpoo$ = MID$(D$(Cellcol, Cellrow), Y, 1)
                                           IF Passpoo$  "9" THEN
                                               EXIT FOR
                                           END IF
                                           Passingnum$ = Passingnum$ + Passpoo$
                                           x = x + 1
                                       NEXT Y
                                       x = x - 1
                                       Passing$ = Passing$ + Passingnum$
                               END SELECT
                       END SELECT
                    NEXT x
                    D$(Cellcountcol, Cellcountrow) = Passing$
                    Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                    In$ = D$(Cellcountcol, Cellcountrow)
                CASE ELSE
                    Dold$(Cellcountcol, Cellcountrow) = Dold$(Cellcol, Cellrow)
                    D$(Cellcountcol, Cellcountrow) = D$(Cellcol, Cellrow)
                    In$ = D$(Cellcol, Cellrow)
           END SELECT
        NEXT Cellcountrow
    NEXT Cellcountcol
    GOSUB Do.updatevalues
RETURN

Do.Help:
    CLS
    PRINT " LIZZYCALC version -1 HELP screen"
    PRINT ""
    PRINT " commands      : description"
    PRINT "---------------:-----------------------------------------------"
    PRINT " "; CHR$(34); "/'/^text     : enter text (left/right/middle justified) in a current cell"
    PRINT " =expression   : enter number or formula in a current cell"
    PRINT " text         : repeat text up to cell width"
    PRINT " |fun or @func : functions; i. e. time, date, file, smv(cornr), or smh(corc)"
    PRINT " c             : change column width"
    PRINT " d             : numeric data fill of certain cells"
    PRINT " f             : do file operations (load/save/new)"
    PRINT " i             : insert column or row"
    PRINT " j             : toggle form feed after print flag"
    PRINT " n             : new spreadsheet (wipe away page forever)"
    PRINT " p             : output results to file or printer without a border"
    PRINT " q             : quit"
    PRINT " r             : replicate a single cell multiple times"
    PRINT " s             : output data to file or printer"
    PRINT " u             : toggle update screen flag"
    PRINT " arrow keys    : move cursor in indicated direction"
    PRINT " expressions   : numeric constant or cell id in form <col>"
    PRINT "                 above items separated by operators +,-,*,^,|, or /"
    PRINT "                 evaluation is from left to right without operator preference."
    PRINT "--------------------------------------------------------------------------";
    Booboo$ = INPUT$(1)
    IF Updateflag = 0 THEN
        GOSUB Printscreen
    END IF
RETURN

Notice:
    CLS
    PRINT
    PRINT
    PRINT "] LIZZYCALC Version -1"
    PRINT "]"
    PRINT "]This is a beta version program."
    PRINT "]Please use with caution and patience."
    PRINT "]"
    PRINT "]Thank you,"
    PRINT "]the computoman"
    PRINT "]computoman Independent Support Services"
    PRINT
    PRINT "Press any key to continue: _";
    Booboo$ = ""
    WHILE Booboo$ = ""
        Booboo$ = INKEY$
        rem SOUND 500, .1
        FOR x&amp; = 1 TO 40000
        NEXT x&amp;
        rem SOUND 2000, .1
        FOR x&amp; = 1 TO 40000
        NEXT x&amp;
   WEND
   PRINT Booboo$
RETURN

Hardcopy:
    Tempy = Crsy
    Tempx = Crsx
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Enter (P)rint or (Q)uit: ";
    QQ$ = ""
    WHILE QQ$  "P" AND QQ$  "Q" AND QQ$  CHR$(1 + 12)
        QQ$ = UCASE$(INPUT$(1))
    WEND
    IF QQ$  CHR$(1 + 12) THEN
        PRINT QQ$
    END IF
    IF QQ$ = "P" AND (QQ$  "Q" OR QQ$  CHR$(1 + 12)) THEN
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        INPUT "Enter where to start print: ", Cellstart$
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        INPUT "Enter where to end print: ", Cellend$
        Cellstartcol = ASC(LEFT$(UCASE$(Cellstart$), 1)) - 64
        Cellstartrow = VAL(RIGHT$(Cellstart$, LEN(Cellstart$) - 1))
        Cellendcol = ASC(LEFT$(UCASE$(Cellend$), 1)) - 64
        Cellendrow = VAL(RIGHT$(Cellend$, LEN(Cellend$) - 1))
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        Datum$ = ""
        INPUT "Enter file name (prn for printer): ", Datum$
        Datum$ = LCASE$(Datum$)
        IF Datum$ = "" THEN
            Datum$ = "prn"
        END IF
        IF Datum$ = "con" THEN
            CLS
        END IF
        'sub to print screen
        OPEN Datum$ FOR OUTPUT AS #2
        DD = 0
        FOR Cellcountrow = Cellstartrow TO Cellendrow
            FOR Cellcountcol = Cellstartcol TO Cellendcol
                Crsx = Cellcountcol
                Crsy = Cellcountrow
                GOSUB Prepareoutput
                IF Crsy = 0 OR Crsx = 0 THEN
                    REM
                ELSE
                    PRINT #2, V$;
                END IF
            NEXT Cellcountcol
            PRINT #2, ""
        NEXT Cellcountrow
        LOCATE Scrdepth + 2, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 2, 1
        IF FFflag = 1 THEN
            SELECT CASE Datum$
                CASE "prn"
                    PRINT #2, CHR$(12)
                CASE "con"
                    CLS
                CASE ELSE
                    PRINT #2, CHR$(12)
            END SELECT
        ELSEIF Datum$ = "con" THEN
            PRINT "Press  to continue";
            doopoo$ = INPUT$(1)
        END IF
        CLOSE #2
    END IF
    Crsx = Tempx
    Crsy = Tempy
    LOCATE Scrdepth + 2, 1
    PRINT SPACE$(79);
RETURN

SetFFflag:
    IF FFflag = 0 THEN
        FFflag = 1
        MID$(D$(0, 0), 1, 1) = "J"
    ELSEIF FFflag = 1 THEN
        FFflag = 0
        MID$(D$(0, 0), 1, 1) = " "
    END IF
RETURN

Funkey:
    SELECT CASE LCASE$(MID$(In$, 2, 3))
        CASE "tim"
            D$(Crsx, Crsy) = Quote$ + TIME$
            Dold$(Crsx, Crsy) = D$(Crsx, Crsy)
        CASE "dat"
            D$(Crsx, Crsy) = Quote$ + DATE$
            Dold$(Crsx, Crsy) = D$(Crsx, Crsy)
        CASE "fil"
            D$(Crsx, Crsy) = Quote$ + Datumf$
            Dold$(Crsx, Crsy) = D$(Crsx, Crsy)
    END SELECT
RETURN

Funcit:
    D(Crsx, Crsy) = 0
    Dold$(Crsx, Crsy) = In$
    D$(Crsx, Crsy) = In$
RETURN

Setcols:
    Tempy = Crsy
    Tempx = Crsx
    Colchoose$ = ""
    WHILE UCASE$(Colchoose$)  "Z"
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        INPUT "Column to change: ", Colchoose$
    WEND
    Colchoose = ASC(UCASE$(Colchoose$)) - 64
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter new cell width: ", Colwidth(Colchoose)
    Scrdepth = 45
    Crsx = Tempx
    Crsy = Tempy
    bb = 0
    FOR cc = 0 TO Crsx - 1
        bb = bb + Colwidth(cc)
    NEXT cc
    bbb = 0
    FOR ccc = 0 TO 27
        bbb = bbb + Colwidth(ccc)
        IF bbb &gt;= 80 THEN
            EXIT FOR
        END IF
    NEXT ccc
    Maxcols = ccc - 1
    GOSUB Printscreen
    LOCATE Scrdepth + 2, 1
    PRINT SPACE$(79);
RETURN

Outdata:
    Tempy = Crsy
    Tempx = Crsx
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Enter (S)end data or (Q)uit: ";
    QQ$ = ""
    WHILE QQ$  "S" AND QQ$  "Q" AND QQ$  CHR$(1 + 12)
        QQ$ = UCASE$(INPUT$(1))
    WEND
    IF QQ$  CHR$(1 + 12) THEN
        PRINT QQ$
    END IF
    IF QQ$ = "S" AND (QQ$  "Q" OR QQ$  CHR$(1 + 12)) THEN
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        INPUT "Enter where to start print: ", Cellstart$
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        INPUT "Enter where to end print: ", Cellend$
        Cellstartrow = ASC(LEFT$(UCASE$(Cellstart$), 1)) - 64
        Cellstartcol = VAL(RIGHT$(Cellstart$, LEN(Cellstart$) - 1))
        Cellendrow = ASC(LEFT$(UCASE$(Cellend$), 1)) - 64
        Cellendcol = VAL(RIGHT$(Cellend$, LEN(Cellend$) - 1))
        LOCATE Scrdepth + 3, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 3, 1
        Datum$ = ""
        INPUT "Enter file name (prn for printer): ", Datum$
        Datum$ = LCASE$(Datum$)
        IF Datum$ = "" THEN
            Datum$ = "prn"
        END IF
        IF Datum$ = "con" THEN
            CLS
        END IF
        'sub to print screen
        OPEN Datum$ FOR OUTPUT AS #2
        DD = 0
        PRINT #2, "File: " + Datumf$
        FOR Cellcountrow = Cellstartrow TO Cellendrow
            FOR Cellcountcol = Cellstartcol TO Cellendcol
                Crsx = Cellcountcol
                Crsy = Cellcountrow
                IF Crsy = 0 OR Crsx = 0 THEN
                    REM
                ELSE
                    PRINT #2, CHR$(64 + Cellcountrow) + RTRIM$(LTRIM$(STR$(Cellcountcol))) + ": " + D$(Cellcountrow, Cellcountcol)
                END IF
            NEXT Cellcountcol
        NEXT Cellcountrow
        LOCATE Scrdepth + 2, 1
        PRINT SPACE$(79);
        LOCATE Scrdepth + 2, 1
        IF FFflag = 1 THEN
            SELECT CASE Datum$
                CASE "prn"
                    PRINT #2, CHR$(12)
                CASE "con"
                    CLS
                CASE ELSE
                    PRINT #2, CHR$(12)
            END SELECT
        ELSEIF Datum$ = "con" THEN
            PRINT "Press  to continue";
            doopoo$ = INPUT$(1)
        END IF
        CLOSE #2
    END IF
    Crsx = Tempx
    Crsy = Tempy
    LOCATE Scrdepth + 2, 1
    PRINT SPACE$(79);
RETURN

Makeright:
    V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + D$(Crsx, Crsy), Colwidth(Crsx))
    GOSUB Forminput
RETURN

Makemiddle:
    V$ = RIGHT$(SPACE$(Colwidth(Crsx)) + D$(Crsx, Crsy), INT(LEN(D$(Crsx, Crsy)) + Colwidth(Crsx)) / 2)
    GOSUB Forminput
RETURN

Cellfill:
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter where to start fill: ", Cellstart$
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter where to end fill: ", Cellend$
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter start value: ", Startvalue
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    INPUT "Enter increment: ", Increment
    Cellstartcol = ASC(LEFT$(UCASE$(Cellstart$), 1)) - 64
    Cellstartrow = VAL(RIGHT$(Cellstart$, LEN(Cellstart$) - 1))
    Cellendcol = ASC(LEFT$(UCASE$(Cellend$), 1)) - 64
    Cellendrow = VAL(RIGHT$(Cellend$, LEN(Cellend$) - 1))
    Dummyvalue = Startvalue - Increment
    FOR Cellcountcol = Cellstartcol TO Cellendcol
        FOR Cellcountrow = Cellstartrow TO Cellendrow
            Dummyvalue = Dummyvalue + Increment
            D$(Cellcountcol, Cellcountrow) = "=" + LTRIM$(RTRIM$(STR$(Dummyvalue)))
            Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
            In$ = D$(Cellcountcol, Cellcountrow)
        NEXT Cellcountrow
    NEXT Cellcountcol
    GOSUB Do.updatevalues
RETURN

Insertitin:
    LOCATE Scrdepth + 3, 1
    PRINT SPACE$(79);
    LOCATE Scrdepth + 3, 1
    PRINT "Insert (C)olumn, or (R)ow: ";
    QQ$ = ""
    WHILE QQ$  "C" AND QQ$  "R" AND QQ$  "Q" AND QQ$  CHR$(1 + 12)
        QQ$ = UCASE$(INPUT$(1))
    WEND
    IF QQ$  CHR$(1 + 12) THEN
        PRINT QQ$
    END IF
    IF QQ$ = "Q" OR QQ$ = CHR$(1 + 12) THEN
        QQ$ = ""
    END IF
    IF QQ$  "" THEN
        SELECT CASE QQ$
            CASE "C"
                LOCATE Scrdepth + 3, 1
                PRINT SPACE$(79);
                LOCATE Scrdepth + 3, 1
                INPUT "Enter Column where to insert: ", Insertcol$
                Cellstart$ = Insertcol$ + "01"
                Cellend$ = CHR$(Maxcols + 1 + 64) + "45"
                Cellstartcol = ASC(LEFT$(UCASE$(Cellstart$), 1)) - 64
                Cellstartrow = VAL(RIGHT$(Cellstart$, LEN(Cellstart$) - 1))
                Cellendcol = ASC(LEFT$(UCASE$(Cellend$), 1)) - 64
                Cellendrow = VAL(RIGHT$(Cellend$, LEN(Cellend$) - 1))
                FOR Cellcountcol = Cellendcol TO Cellstartcol STEP -1
                    FOR Cellcountrow = Cellstartrow TO Cellendrow
                        IF Cellcountcol  Cellstartcol THEN
                            Cell$ = D$(Cellcountcol - 1, Cellcountrow)
                            Cellcol = Cellcountcol - 1
                            Cellrow = Cellcountrow
                            snaker = Cellcountrow - Cellrow
                            snakec = Cellcountcol - Cellcol
                            SELECT CASE LEFT$(D$(Cellcol, Cellrow), 1)
                                CASE "@"
                                    SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), 2, 3)
                                        CASE "smv"
                                            snk1$ = CHR$(ASC(MID$(D$(Cellcol, Cellrow), 6, 1)) + 1): 'snakec)
                                            snake$ = snk1$ + MID$(D$(Cellcol, Cellrow), 7, 4)
                                            D$(Cellcountcol, Cellcountrow) = "@smv(" + snake$ + ")"
                                        CASE "smh"
                                            snk1$ = MID$(D$(Cellcol, Cellrow), 6, 1)
                                            snk2$ = RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(MID$(D$(Cellcol, Cellrow), 7, 2)) + snaker))), 2)
                                            snk3$ = MID$(D$(Cellcol, Cellrow), 9, 1)
                                            snake$ = snk1$ + snk2$ + snk3$
                                            D$(Cellcountcol, Cellcountrow) = "@smh(" + snake$ + ")"
                                            FOR x = 5 TO LEN(D$(Cellcountcol, Cellcountrow))
                                                garfunc$ = MID$(D$(Cellcountcol, Cellcountrow), x, 1)
                                                SELECT CASE UCASE$(garfunc$)
                                                    CASE "A" TO "Z"
                                                        MID$(D$(Cellcountcol, Cellcountrow), x, 1) = CHR$(ASC(garfunc$) + 1)
                                                END SELECT
                                            NEXT x
                                        CASE ELSE
                                            D$(Cellcountcol, Cellcountrow) = D$(Cellcountcol - 1, Cellcountrow)
                                END SELECT
                                Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                                In$ = D$(Cellcountcol, Cellcountrow)
                            CASE "="
                                Passing$ = ""
                                FOR x = 1 TO LEN(D$(Cellcol, Cellrow))
                                    SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), x, 1)
                                        CASE "+", "=", "-", "*", "/", "^", "|"
                                            Passing$ = Passing$ + MID$(D$(Cellcol, Cellrow), x, 1)
                                        CASE "a" TO "z"
                                            Passing$ = Passing$ + CHR$(ASC(MID$(D$(Cellcol, Cellrow), x, 1)) + snakec)
                                        CASE "0" TO "9"
                                            SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), x - 1, 1)
                                                CASE "a" TO "z"
                                                    Passingnum$ = ""
                                                    FOR Y = x TO LEN(D$(Cellcol, Cellrow))
                                                        Passpoo$ = MID$(D$(Cellcol, Cellrow), Y, 1)
                                                        IF Passpoo$  "9" THEN
                                                            EXIT FOR
                                                        END IF
                                                        Passingnum$ = Passingnum$ + Passpoo$
                                                        x = x + 1
                                                    NEXT Y
                                                    x = x - 1
                                                    Passing$ = Passing$ + RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(Passingnum$) + snaker))), 2)
                                                CASE ELSE
                                                    Passingnum$ = ""
                                                    FOR Y = x TO LEN(D$(Cellcol, Cellrow))
                                                        Passpoo$ = MID$(D$(Cellcol, Cellrow), Y, 1)
                                                        IF Passpoo$  "9" THEN
                                                            EXIT FOR
                                                        END IF
                                                        Passingnum$ = Passingnum$ + Passpoo$
                                                        x = x + 1
                                                    NEXT Y
                                                    x = x - 1
                                                    Passing$ = Passing$ + Passingnum$
                                            END SELECT
                                    END SELECT
                                NEXT x
                                D$(Cellcountcol, Cellcountrow) = Passing$
                                Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                                In$ = D$(Cellcountcol, Cellcountrow)
                            CASE ELSE
                                Dold$(Cellcountcol, Cellcountrow) = Dold$(Cellcol, Cellrow)
                                D$(Cellcountcol, Cellcountrow) = D$(Cellcol, Cellrow)
                                In$ = D$(Cellcountcol, Cellcountrow)
                        END SELECT
                    ELSE
                        D$(Cellcountcol, Cellcountrow) = ""
                        D(Cellcountcol, Cellcountrow) = 0
                    END IF
                    Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                    In$ = D$(Cellcountcol, Cellcountrow)
                NEXT Cellcountrow
            NEXT Cellcountcol
            GOSUB Do.updatevalues
        CASE "R"
            LOCATE Scrdepth + 3, 1
            PRINT SPACE$(79);
            LOCATE Scrdepth + 3, 1
            INPUT "Enter row where to insert: ", Insertrow
            Rowstart$ = RIGHT$("0" + LTRIM$(RTRIM$(STR$(Insertrow))), 2)
            Cellstart$ = "A" + Rowstart$
            Cellend$ = CHR$(Maxcols + 1 + 64) + "45"
            Cellstartcol = ASC(LEFT$(UCASE$(Cellstart$), 1)) - 64
            Cellstartrow = VAL(RIGHT$(Cellstart$, LEN(Cellstart$) - 1))
            Cellendcol = ASC(LEFT$(UCASE$(Cellend$), 1)) - 64
            Cellendrow = VAL(RIGHT$(Cellend$, LEN(Cellend$) - 1))
            FOR Cellcountcol = Cellstartcol TO Cellendcol
                FOR Cellcountrow = Cellendrow TO Cellstartrow STEP -1
                   IF Cellcountrow  Cellstartrow THEN
                       Cell$ = D$(Cellcountcol, Cellcountrow - 1)
                       Cellcol = Cellcountcol
                       Cellrow = Cellcountrow - 1
                       snaker = Cellcountrow - Cellrow
                       snakec = Cellcountcol - Cellcol
                       SELECT CASE LEFT$(D$(Cellcol, Cellrow), 1)
                           CASE "@"
                               SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), 2, 3)
                                    CASE "smv"
                                        snk1$ = CHR$(ASC(MID$(D$(Cellcol, Cellrow), 6, 1)) + snakec)
                                        snake$ = snk1$ + MID$(D$(Cellcol, Cellrow), 7, 4)
                                        D$(Cellcountcol, Cellcountrow) = "@smv(" + snake$ + ")"
                                        MID$(D$(Cellcountcol, Cellcountrow), 7, 2) = RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(MID$(D$(Cellcountcol, Cellcountrow), 7, 2)) + 1))), 2)
                                        MID$(D$(Cellcountcol, Cellcountrow), 9, 2) = RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(MID$(D$(Cellcountcol, Cellcountrow), 9, 2)) + 1))), 2)
                                    CASE "smh"
                                        snk1$ = MID$(D$(Cellcol, Cellrow), 6, 1)
                                        snk2$ = RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(MID$(D$(Cellcol, Cellrow), 7, 2)) + 1))), 2): '+snaker
                                        snk3$ = MID$(D$(Cellcol, Cellrow), 9, 1)
                                        snake$ = snk1$ + snk2$ + snk3$
                                        D$(Cellcountcol, Cellcountrow) = "@smh(" + snake$ + ")"
                                    CASE ELSE
                                        D$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow - 1)
                               END SELECT
                               Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                               In$ = D$(Cellcountcol, Cellcountrow)
                           CASE "="
                                Passing$ = ""
                                FOR x = 1 TO LEN(D$(Cellcol, Cellrow))
                                    SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), x, 1)
                                        CASE "+", "=", "-", "*", "/", "^", "|"
                                            Passing$ = Passing$ + MID$(D$(Cellcol, Cellrow), x, 1)
                                        CASE "a" TO "z"
                                            Passing$ = Passing$ + CHR$(ASC(MID$(D$(Cellcol, Cellrow), x, 1)) + snakec)
                                        CASE "0" TO "9"
                                            SELECT CASE MID$(LCASE$(D$(Cellcol, Cellrow)), x - 1, 1)
                                                CASE "a" TO "z"
                                                    Passingnum$ = ""
                                                    FOR Y = x TO LEN(D$(Cellcol, Cellrow))
                                                        Passpoo$ = MID$(D$(Cellcol, Cellrow), Y, 1)
                                                        IF Passpoo$  "9" THEN
                                                            EXIT FOR
                                                        END IF
                                                        Passingnum$ = Passingnum$ + Passpoo$
                                                        x = x + 1
                                                    NEXT Y
                                                    x = x - 1
                                                    Passing$ = Passing$ + RIGHT$("0" + LTRIM$(RTRIM$(STR$(VAL(Passingnum$) + snaker))), 2)
                                                CASE ELSE
                                                    Passingnum$ = ""
                                                    FOR Y = x TO LEN(D$(Cellcol, Cellrow))
                                                        Passpoo$ = MID$(D$(Cellcol, Cellrow), Y, 1)
                                                        IF Passpoo$  "9" THEN
                                                            EXIT FOR
                                                        END IF
                                                        Passingnum$ = Passingnum$ + Passpoo$
                                                        x = x + 1
                                                    NEXT Y
                                                    x = x - 1
                                                    Passing$ = Passing$ + Passingnum$
                                            END SELECT
                                        END SELECT
                                    NEXT x
                                    D$(Cellcountcol, Cellcountrow) = Passing$
                                    Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                                    In$ = D$(Cellcountcol, Cellcountrow)
                                CASE ELSE
                                    Dold$(Cellcountcol, Cellcountrow) = Dold$(Cellcol, Cellrow)
                                    D$(Cellcountcol, Cellcountrow) = D$(Cellcol, Cellrow)
                                    In$ = D$(Cellcol, Cellrow)
                            END SELECT
                        ELSE
                            D$(Cellcountcol, Cellcountrow) = ""
                            D(Cellcountcol, Cellcountrow) = 0
                        END IF
                        Dold$(Cellcountcol, Cellcountrow) = D$(Cellcountcol, Cellcountrow)
                        In$ = D$(Cellcountcol, Cellcountrow)
                    NEXT Cellcountrow
                NEXT Cellcountcol
                GOSUB Do.updatevalues
        END SELECT
    END IF
RETURN

Checkerror:
   SELECT CASE ERR
      CASE 52, Badfilename
        rem RESUME Fileroutine
	end
   END SELECT
END
Advertisements