home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
326-350
/
apd345
/
calcpad.amos
/
calcpad.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1992-09-02
|
35KB
|
1,057 lines
',
Global XVQ$,IVQ,JVQ
Rem ** CalcPad 1200 **
Rem ** Bill Currie 1993 **
'
Rem ** Demo **
'
'
Rem Imbedding Routine
'
'
Rem AMOS copyright notice
AMOSC
Procedure AMOSC
Screen Open 0,320,256,32,Lowres
Curs Off : Paper 0 : Cls 0 : Print
Get Icon Palette
Locate 0,1
Centre ">>> Program by Bill Currie <<<"
Flash 3,"(f00,32)(f80,32)(ff0,32)(0f0,32)(08f,32)(88f,32)(f0f,32)"
Pen 3 : Ink 3 : Box 50,40 To 270,150
Locate 0,11
Centre Border$("CalcPad",1)
Ink 0 : Pen 2
Paste Icon 220,20,2
_SMALL_COPYRIGHT[225]
Cls 0
End Proc
Procedure _SMALL_COPYRIGHT[YDISPLAY]
Auto View Off
Screen Open 7,320,24,16,0 : Curs Off : Flash Off : Cls 0
Screen Display 7,,-100,,
Paste Bob 260,3,1
Paper 0 : Pen 7 : Print At(1,1);"This program was written using"
Get Sprite Palette
View : Wait Vbl
For Y=1 To Screen Height/2
Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
Screen Offset 7,,Screen Height/2-Y
View : Wait Vbl
Next
Do
If Mouse Key=1 Then Exit
Loop
For Y=Screen Height/2 To 0 Step -1
Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
Screen Offset 7,,Screen Height/2-Y
View : Wait Vbl
Next
Screen Close 7
Auto View On
End Proc
'
Screen Open 5,320,256,4,Lowres
Curs Off : Colour 0,$77 : Paper 0 : Cls 0 : Flash Off : Colour 3,$FF0
Locate 5,1 : Input "Date ? ";DATE$
Cls 0 : Curs Off
Pen 3
Locate 5,1 : Print DATE$
Locate 0,24 : Centre "CalcPad"
'
'
Rem End of Imbedding Routine
''''''''''''''''''''''''''''''''''''''''
'
Global CHECK$
PAD
'
''''''''''''''''''''''''''''''''''''''''
End
Rem ** Demo End **
'
Rem ******** Procedures & Global *********
'
Procedure PAD
Limit Mouse
'
Screen Open 0,320,56,4,Hires
Screen Display 0,210,100,320,56
Curs Off : Cls 1 : Colour 0,$77
Screen 0
Screen Show 0
Global CHECK$
Global SIGFIGS,ID$,EVAL$,FUNCTION$
Global A$,B$,C$,D$,E$,F$,G$,H$,I$,J$,K$,L$,M$
Global N$,O$,P$,Q$,R$,S$,T$,U$,V$,W$,X$,Y$,Z$
Locate 3,2 : Centre " [C]alculator [P]ad " : Print : Print : Centre "[H]elp [E]xit"
BEGIN:
Do
K$=Inkey$
If K$="C" or(K$="c") Then CALCULATOR : Goto BEGIN
If K$="P" or(K$="p") Then QUICKPAD : Goto BEGIN
If K$="H" or(K$="h") Then HELP : Goto BEGIN
If K$="E" or(K$="e") Then AMOSC : End
Loop
'
End Proc
Procedure CALCULATOR
Shared SIGFIGS,ID$,EVAL$,FUNCTION$
Shared A$,B$,C$,D$,E$,F$,G$,H$,I$,J$,K$,L$,M$
Shared N$,O$,P$,Q$,R$,S$,T$,U$,V$,W$,X$,Y$,Z$
On Error Goto ER
Goto OK
ER:
ERR
Resume XIT
OK:
Screen Open 1,320,88,4,Hires
Screen Display 1,210,100,320,88
Curs Off : Cls 1 : Colour 0,$77
Degree
Cls 1 : Home : Paper 1
Centre "* Calculator *"
Wind Open 1,16,8,36,1,0
Wind Open 2,16,24,36,1,0
Wind Open 3,16,40,36,1,0
Wind Open 4,16,56,36,1,0
RETRY:
Window 1
Paper 0
Clw
Input " ";FUNCTION1$
If FUNCTION1$<>"" Then FUNCTION$=FUNCTION1$
Centre ""+Right$(FUNCTION$,34)
Window 2
Paper 0
Clw
Input "Significant Figures ";SIGFIGS;
Curs Off
Window 3
Paper 0
Clw : Curs Off
FV$=FUNCTION$
'
Rem Functions to lower case
'
FV$=Upper$(FV$)
Restore NWDT
For J=1 To 20
Read AV$
BV$=Lower$(AV$)
L=Len(AV$)
Do
I=Instr(FV$,AV$)
If I=0 Then Exit
FV$=Left$(FV$,I-1)+BV$+Mid$(FV$,I+L)
Loop
Next J
'
Rem Replace upper case letters by 'numbers'
VARS$=""
For J=65 To 90
Do
I=Instr(FV$,Chr$(J))
If I=0 Then Exit
If X Curs>25 Then Clw : Home
Cright
If J=65 Then Input "a = ";A$; : Print A$; : VARS$=VARS$+" a = "+A$ : Exit
If J=66 Then Input "b = ";B$; : Print B$; : VARS$=VARS$+" b = "+B$ : Exit
If J=67 Then Input "c = ";C$; : Print C$; : VARS$=VARS$+" c = "+C$ : Exit
If J=68 Then Input "d = ";D$; : Print D$; : VARS$=VARS$+" d = "+D$ : Exit
If J=69 Then Input "e = ";E$; : Print E$; : VARS$=VARS$+" e = "+E$ : Exit
If J=70 Then Input "f = ";F$; : Print F$; : VARS$=VARS$+" f = "+F$ : Exit
If J=71 Then Input "g = ";G$; : Print G$; : VARS$=VARS$+" g = "+G$ : Exit
If J=72 Then Input "h = ";H$; : Print H$; : VARS$=VARS$+" h = "+H$ : Exit
If J=73 Then Input "i = ";I$; : Print I$; : VARS$=VARS$+" i = "+I$ : Exit
If J=74 Then Input "j = ";J$; : Print J$; : VARS$=VARS$+" j = "+J$ : Exit
If J=75 Then Input "k = ";K$; : Print K$; : VARS$=VARS$+" k = "+K$ : Exit
If J=76 Then Input "l = ";L$; : Print L$; : VARS$=VARS$+" l = "+L$ : Exit
If J=77 Then Input "m = ";M$; : Print M$; : VARS$=VARS$+" m = "+M$ : Exit
If J=78 Then Input "n = ";N$; : Print N$; : VARS$=VARS$+" n = "+N$ : Exit
If J=79 Then Input "o = ";O$; : Print O$; : VARS$=VARS$+" o = "+O$ : Exit
If J=80 Then Input "p = ";P$; : Print P$; : VARS$=VARS$+" p = "+P$ : Exit
If J=81 Then Input "q = ";Q$; : Print Q$; : VARS$=VARS$+" q = "+Q$ : Exit
If J=82 Then Input "r = ";R$; : Print R$; : VARS$=VARS$+" r = "+R$ : Exit
If J=83 Then Input "s = ";S$; : Print S$; : VARS$=VARS$+" s = "+S$ : Exit
If J=84 Then Input "t = ";T$; : Print T$; : VARS$=VARS$+" t = "+T$ : Exit
If J=85 Then Input "u = ";U$; : Print U$; : VARS$=VARS$+" u = "+U$ : Exit
If J=86 Then Input "v = ";V$; : Print V$; : VARS$=VARS$+" v = "+V$ : Exit
If J=87 Then Input "w = ";W$; : Print W$; : VARS$=VARS$+" w = "+W$ : Exit
If J=88 Then Input "x = ";X$; : Print X$; : VARS$=VARS$+" x = "+X$ : Exit
If J=89 Then Input "y = ";Y$; : Print Y$; : VARS$=VARS$+" y = "+Y$ : Exit
If J=90 Then Input "z = ";Z$; : Print Z$; : VARS$=VARS$+" z = "+Z$ : Exit
Loop
Next J
'
FV$=Upper$(FV$)
'
NWDT:
Data "ASIN","ACOS","ATAN","HSIN","HCOS","HTAN","SINH","COSH","TANH"
Data "SIN","COS","TAN","LOG","EXP","SQR","ABS","INT","SGN","LN"
Data "PI"
'
EVAL["$",FV$,SIGFIGS]
'
Window 1 : Cline : Centre Right$(FUNCTION$,34)
Curs Off
EVAL["$",FV$,SIGFIGS]
Window 4
Paper 0
Clw
If SIGFIGS=0 Then ANS$=EVAL$
If SIGFIGS>0 Then ANS$=EVAL$+" "+Str$(SIGFIGS)+" SF"
Centre ANS$
Window 0
Paper 0
Locate 3,9 : Print Zone$("[P]rint",1)
Locate 16,9 : Print Zone$("[N]ext",2)
Locate 30,9 : Print Zone$("[E]xit",3)
Do
K$=Inkey$
If(K$="N") or(K$="n") Then Goto RETRY
If(K$="P") or(K$="p") Then Lprint FUNCTION$ : Lprint " ";VARS$ : Lprint " ";ANS$ : Lprint
If(K$="E") or(K$="e") Then Exit
Loop
Clear Key
Screen Close 1
XIT:
End Proc
Procedure EVAL[IDS$,FUNCTION$,SIGFIGS]
On Error Goto ER
Goto OK
ER:
EVAL$="Error"
Resume XITC
OK:
Shared EVAL,EVAL#,EVAL$
Rem All Local Variables and Labels end in VQ
If IDS$="$"
Shared A$,B$,C$,D$,E$,F$,G$,H$,I$,J$,K$,L$,M$,N$,O$,P$,Q$,R$,S$,T$,U$,V$,W$,X$,Y$,Z$
AVQVQ$=A$ : BVQVQ$=B$ : CVQVQ$=C$ : DVQVQ$=D$ : EVQVQ$=E$ : FVQVQ$=F$ : GVQVQ$=G$
HVQVQ$=H$ : IVQVQ$=I$ : JVQVQ$=J$ : KVQVQ$=K$ : LVQVQ$=L$ : MVQVQ$=M$
NVQVQ$=N$ : OVQVQ$=O$ : PVQVQ$=P$ : QVQVQ$=Q$ : RVQVQ$=R$ : SVQVQ$=S$ : TVQVQ$=T$
UVQVQ$=U$ : VVQVQ$=V$ : WVQVQ$=W$ : XVQVQ$=X$ : YVQVQ$=Y$ : ZVQVQ$=Z$
End If
If IDS$="#"
Shared A#,B#,C#,D#,E#,F#,G#,H#,I#,J#,K#,L#,M#,N#,O#,P#,Q#,R#,S#,T#,U#,V#,W#,X#,Y#,Z#
AVQVQ$=Str$(A#) : BVQVQ$=Str$(B#) : CVQVQ$=Str$(C#) : DVQVQ$=Str$(D#) : EVQVQ$=Str$(E#) : FVQVQ$=Str$(F#) : GVQVQ$=Str$(G#)
HVQVQ$=Str$(H#) : IVQVQ$=Str$(I#) : JVQVQ$=Str$(J#) : KVQVQ$=Str$(K#) : LVQVQ$=Str$(L#) : MVQVQ$=Str$(M#)
NVQVQ$=Str$(N#) : OVQVQ$=Str$(O#) : PVQVQ$=Str$(P#) : QVQVQ$=Str$(Q#) : RVQVQ$=Str$(R#) : SVQVQ$=Str$(S#) : TVQVQ$=Str$(T#)
UVQVQ$=Str$(U#) : VVQVQ$=Str$(V#) : WVQVQ$=Str$(W#) : XVQVQ$=Str$(X#) : YVQVQ$=Str$(Y#) : ZVQVQ$=Str$(Z#)
End If
If IDS$=""
Shared A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
AVQVQ$=Str$(A) : BVQVQ$=Str$(B) : CVQVQ$=Str$(C) : DVQVQ$=Str$(D) : EVQVQ$=Str$(E) : FVQVQ$=Str$(F) : GVQVQ$=Str$(G)
HVQVQ$=Str$(H) : IVQVQ$=Str$(I) : JVQVQ$=Str$(J) : KVQVQ$=Str$(K) : LVQVQ$=Str$(L) : MVQVQ$=Str$(M)
NVQVQ$=Str$(N) : OVQVQ$=Str$(O) : PVQVQ$=Str$(P) : QVQVQ$=Str$(Q) : RVQVQ$=Str$(R) : SVQVQ$=Str$(S) : TVQVQ$=Str$(T)
UVQVQ$=Str$(U) : VVQVQ$=Str$(V) : WVQVQ$=Str$(W) : XVQVQ$=Str$(X) : YVQVQ$=Str$(Y) : ZVQVQ$=Str$(Z)
End If
FVQ$=FUNCTION$
Gosub EVALLVQ
EVAL$=EVAL$
Goto XITC
EVALLVQ:
GVQ$="" : HVQ$="" : EVAL$=""
KEEPFVQ$=FVQ$ : KEEPGVQ$=GVQ$ : KEEPHVQ$=HVQ$
FVQ$=Upper$(FVQ$)
FVQ$="dummy"+FVQ$+"dummy"
Gosub SPACEREPLACEVQ
Gosub PIREPLACEVQ
Gosub AZREPLACEVQ
Do
Gosub BRACKETSVQ
If GVQ$="Error" Then Exit
Exit If FVQ$='end'
Gosub ARITHVQ
If GVQ$="Error" Then Exit
Gosub TRIGVQ
If GVQ$="Error" Then Exit
Loop
'
Rem Avoid two .'s or two E's
If Instr(Mid$(GVQ$,Instr(GVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(GVQ$,Instr(GVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(GVQ$,"E")>0) and(Instr("123456789",Mid$(GVQ$,Instr(GVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
'
If GVQ$="Error" Then EVAL$="Error" : Goto XITC
'
Rem Insert a space in front of an E
'
IVQ=Instr(GVQ$,"E")
If IVQ=0 Then Goto OKEVAL
GVQ$=Left$(GVQ$,IVQ-1)+" "+Mid$(GVQ$,IVQ)
OKEVAL:
'
Rem -0 is not really required as an answer
If GVQ$="-0" Then GVQ$="0"
'
FINALCHECK:
IVQ=0
Do
IVQ=IVQ+1
If IVQ>Len(GVQ$) Then Exit
If Instr(" 1234567890.E+-",Mid$(GVQ$,IVQ,1))=0 Then GVQ$="Error" : Exit
Loop
'
Gosub ROUNDINGVQ
'
EVAL$=GVQ$
'
FVQ$=KEEPFVQ$ : GVQ$=KEEPGVQ$ : HVQ$=KEEPHVQ$
'
Return
ROUNDINGVQ:
MARKERVQ=0
NVQ=Int(SIGFIGS)
If(NVQ<=0) or(GVQ$="0") Then Gosub ROUNDVQ : Goto XIT3
'
Rem Remove Tail End
IVQ=Instr(GVQ$," E")
FVQ$=GVQ$ : HVQ$=""
If IVQ<>0 Then FVQ$=Left$(GVQ$,IVQ-1) : HVQ$=Mid$(GVQ$,IVQ)
'
Rem Get any - sign
SVQ$=""
If Left$(FVQ$,1)="-" Then SVQ$="-" : FVQ$=Mid$(FVQ$,2)
'
Rem Remove D.Pt.
IVQ=Instr(FVQ$,".")
If IVQ<>0 Then FVQ$=Left$(FVQ$,IVQ-1)+Mid$(FVQ$,IVQ+1)
'
Rem Remove leading zeros
KVQ=0
Do
If Left$(FVQ$,1)<>"0" Then Exit
FVQ$=Mid$(FVQ$,2)
Inc KVQ
Loop
'
Rem MARKERVQ=0
LVQ=Len(FVQ$)
If LVQ<=NVQ Then Goto XIT
Rem Chop off unwanted end
FVQ$=Left$(FVQ$,NVQ+1)
If Instr("01234",Right$(FVQ$,1))<>0 Then FVQ$=Left$(FVQ$,NVQ) : Goto XIT
FVQ$=Left$(FVQ$,NVQ) : JVQ=0
Do
If Right$(FVQ$,1)=Chr$(48+JVQ) Then FVQ$=Left$(FVQ$,NVQ-1)+Chr$(48+JVQ+1) : Goto XIT
Inc JVQ
If JVQ=9 Then Exit
Loop
Rem Two 9's at end
JVQ=1
Do
If Mid$(FVQ$,NVQ-JVQ,1)<>"9" Then FVQ$=Left$(FVQ$,NVQ-JVQ-1)+Chr$(Asc(Mid$(FVQ$,NVQ-JVQ,1))+1) : Goto XIT
Inc JVQ
If JVQ=NVQ Then Exit
Loop
FVQ$="1"+String$("0",LVQ) : MARKERVQ=1
XIT:
If MARKERVQ=0 Then FVQ$=FVQ$+String$("0",LVQ-Len(FVQ$))
Rem Replace leading zeros
FVQ$=String$("0",KVQ)+FVQ$
Rem Replace D.Pt.
If IVQ=0 Then Goto XIT2
If MARKERVQ=0 Then FVQ$=Left$(FVQ$,IVQ-1)+"."+Mid$(FVQ$,IVQ)
If MARKERVQ=1 Then FVQ$=Left$(FVQ$,IVQ)+"."+Mid$(FVQ$,IVQ+1)
MARKERVQ=0
Rem Remove unwanted zeros at right
Do
If Right$(FVQ$,1)<>"0" Then Exit
If Right$(FVQ$,2)=".0" Then Exit
FVQ$=Left$(FVQ$,Len(FVQ$)-1)
Loop
XIT2:
GVQ$=FVQ$+HVQ$
Rem Remove unwanted zeros at left
Do
If Left$(GVQ$,1)<>"0" Then Exit
If Left$(GVQ$,2)="0." Then Exit
GVQ$=Right$(GVQ$,Len(GVQ$)-1)
Loop
Rem Replace sign
GVQ$=SVQ$+GVQ$
XIT3:
Return
ROUNDVQ:
Rem Rounding
'
IVQ=Instr(GVQ$," E")
FVQ$=GVQ$ : HVQ$=""
If IVQ<>0 Then FVQ$=Left$(GVQ$,IVQ-1) : HVQ$=Mid$(GVQ$,IVQ)
'
IVQ=Instr(FVQ$,".")
AVQ$=FVQ$
If IVQ<>0 Then AVQ$=Left$(FVQ$,IVQ-1)+Mid$(FVQ$,IVQ+1)
Rem Primitive rounding for eg .98! ,default - number of significant figures unspecified
KVQ=Len(AVQ$)
If KVQ<6 Then Goto XITB
If Right$(AVQ$,6)="899999" Then AVQ$=Left$(AVQ$,KVQ-6)+"900000"
If Right$(AVQ$,6)="799999" Then AVQ$=Left$(AVQ$,KVQ-6)+"800000"
If Right$(AVQ$,6)="699999" Then AVQ$=Left$(AVQ$,KVQ-6)+"700000"
If Right$(AVQ$,6)="599999" Then AVQ$=Left$(AVQ$,KVQ-6)+"600000"
If Right$(AVQ$,6)="499999" Then AVQ$=Left$(AVQ$,KVQ-6)+"500000"
If Right$(AVQ$,6)="399999" Then AVQ$=Left$(AVQ$,KVQ-6)+"400000"
If Right$(AVQ$,6)="299999" Then AVQ$=Left$(AVQ$,KVQ-6)+"300000"
If Right$(AVQ$,6)="199999" Then AVQ$=Left$(AVQ$,KVQ-6)+"200000"
If Right$(AVQ$,6)="099999" Then AVQ$=Left$(AVQ$,KVQ-6)+"100000"
If Right$(AVQ$,6)="899998" Then AVQ$=Left$(AVQ$,KVQ-6)+"900000"
If Right$(AVQ$,6)="799998" Then AVQ$=Left$(AVQ$,KVQ-6)+"800000"
If Right$(AVQ$,6)="699998" Then AVQ$=Left$(AVQ$,KVQ-6)+"700000"
If Right$(AVQ$,6)="599998" Then AVQ$=Left$(AVQ$,KVQ-6)+"600000"
If Right$(AVQ$,6)="499998" Then AVQ$=Left$(AVQ$,KVQ-6)+"500000"
If Right$(AVQ$,6)="399998" Then AVQ$=Left$(AVQ$,KVQ-6)+"400000"
If Right$(AVQ$,6)="299998" Then AVQ$=Left$(AVQ$,KVQ-6)+"300000"
If Right$(AVQ$,6)="199998" Then AVQ$=Left$(AVQ$,KVQ-6)+"200000"
If Right$(AVQ$,6)="299998" Then AVQ$=Left$(AVQ$,KVQ-6)+"100000"
If Right$(AVQ$,6)="199998" Then AVQ$=Left$(AVQ$,KVQ-6)+"200000"
If Right$(AVQ$,6)="099998" Then AVQ$=Left$(AVQ$,KVQ-6)+"100000"
If IVQ=0 Then FVQ$=AVQ$ : Goto XIT2A
FVQ$=Left$(AVQ$,IVQ-1)+"."+Mid$(AVQ$,IVQ)
Do
If Right$(FVQ$,1)<>"0" Then Exit
If Right$(FVQ$,2)=".0" Then Exit
FVQ$=Left$(FVQ$,Len(FVQ$)-1)
Loop
XIT2A:
GVQ$=FVQ$+HVQ$
Rem Remove unwanted zeros at left
Do
If Left$(GVQ$,1)<>"0" Then Exit
If Left$(GVQ$,2)="0." Then Exit
GVQ$=Right$(GVQ$,Len(GVQ$)-1)
Loop
XITB:
Return
SPACEREPLACEVQ:
Do
IVQ=Instr(FVQ$," ")
If IVQ=0 Then Exit
FVQ$=Left$(FVQ$,IVQ-1)+Right$(FVQ$,Len(FVQ$)-IVQ)
Loop
Return
PIREPLACEVQ:
Do
IVQ=Instr(FVQ$,'PI')
Exit If IVQ=0
FVQ$=Left$(FVQ$,IVQ-1)+Str$(Pi#)+Mid$(FVQ$,IVQ+2)
Loop
Return
AZREPLACEVQ:
'
Rem Functions to lower case
'
Restore NWDT
For JVQ=1 To 19
Read AVQ$
BVQ$=Lower$(AVQ$)
L=Len(AVQ$)
Do
IVQ=Instr(FVQ$,AVQ$)
If IVQ=0 Then Exit
FVQ$=Left$(FVQ$,IVQ-1)+BVQ$+Mid$(FVQ$,IVQ+L)
Loop
Next JVQ
'
Rem Replace upper case letters by 'numbers'
For JVQ=65 To 90
Read XVQ$
'
If Instr(FVQ$,Chr$(JVQ))<>0
For IVQ=1 To Len(XVQ$)
If Instr("0123456789+-*/^eE. ",Mid$(XVQ$,IVQ,1))=0
EVAL$="Error" : Goto XITC
End If
Next IVQ
End If
'
If(Instr(XVQ$,".")=0) and(Instr(XVQ$,"e")=0) and(Instr(XVQ$,"E")=0) and Len(XVQ$)>10 Then XVQ$=XVQ$+".0"
'
Do
XINVQ$=XVQ$
IVQ=Instr(FVQ$,Chr$(JVQ))
If IVQ=0 Then Exit
For J2VQ=48 To 57
If Mid$(FVQ$,IVQ+1,1)=Chr$(J2VQ) Then EVAL$="Error" : Goto XITC
Next J2VQ
If Mid$(FVQ$,IVQ+1,1)="." Then EVAL$="Error" : Goto XITC
For J2VQ=48 To 57
If Mid$(FVQ$,IVQ-1,1)=Chr$(J2VQ) Then XINVQ$="*"+XINVQ$
Next J2VQ
If Mid$(FVQ$,IVQ-1,1)="." Then XINVQ$="*"+XINVQ$
For J2VQ=65 To 90
If Mid$(FVQ$,IVQ-1,1)=Chr$(J2VQ) Then XINVQ$="*"+XINVQ$
Next J2VQ
For J2VQ=65 To 90
If Mid$(FVQ$,IVQ+1,1)=Chr$(J2VQ) Then XINVQ$=XINVQ$+"*"
Next J2VQ
Rem pi
If Mid$(FVQ$,IVQ+1,1)=" " Then XINVQ$=XINVQ$+"*"
'
FVQ$=Left$(FVQ$,IVQ-1)+XINVQ$+Mid$(FVQ$,IVQ+1)
Loop
Next JVQ
'
FVQ$=Upper$(FVQ$)
'
NWDT:
Data "ASIN","ACOS","ATAN","HSIN","HCOS","HTAN","SINH","COSH","TANH"
Data "SIN","COS","TAN","LOG","EXP","SQR","ABS","INT","SGN","LN"
Data AVQVQ$,BVQVQ$,CVQVQ$,DVQVQ$,EVQVQ$
Data FVQVQ$,GVQVQ$,HVQVQ$,IVQVQ$,JVQVQ$
Data KVQVQ$,LVQVQ$,MVQVQ$,NVQVQ$,OVQVQ$
Data PVQVQ$,QVQVQ$,RVQVQ$,SVQVQ$,TVQVQ$
Data UVQVQ$,VVQVQ$,WVQVQ$,XVQVQ$,YVQVQ$,ZVQVQ$
'
Return
BRACKETSVQ:
IVQ=Instr(FVQ$,')')
If IVQ=0 Then GVQ$=Mid$(FVQ$,6,(Len(FVQ$)-10)) : FVQ$='end' : HVQ$='end' : Gosub ARITHVQ : Goto FINBR
HVQ$=Mid$(FVQ$,IVQ+1) : FVQ$=Left$(FVQ$,IVQ-1)
''''''''''''''
If Instr("0123456789. ",Left$(HVQ$,1))<>0 Then EVAL$="Error" : Goto XITC
''''''''''''''
JVQ=0
Do
JVQ=JVQ+1
IVQ=Instr(Right$(FVQ$,JVQ),"(")
If IVQ<>0 Then Exit
If JVQ=Len(FVQ$) Then GVQ$="Error" : Goto FINBR
Loop
GVQ$=Mid$(FVQ$,Len(FVQ$)-JVQ+2) : FVQ$=Left$(FVQ$,Len(FVQ$)-JVQ)
FINBR:
Return
ARITHVQ:
Gosub POWERSVQ
Gosub COMPRESS_SIGNSVQ
Gosub MULT_DIVVQ
If GVQ$="error" Then Goto ARERR
Gosub COMPRESS_SIGNSVQ
Gosub AD_SUBVQ
Gosub COMPRESS_SIGNSVQ
ARERR:
Return
SPACEREMOVEVQ:
Do
IVQ=Instr(GVQ$," ")
If IVQ=0 Then Exit
GVQ$=Left$(GVQ$,IVQ-1)+Right$(GVQ$,Len(GVQ$)-IVQ)
Loop
Return
TRIGVQ:
On Error Goto ERROUTINE
IVQ=Len(FVQ$) : CVQ#=Val(GVQ$)
DUMMYVQ$=Right$(FVQ$,1) : If Instr('+-*/^(Y',DUMMYVQ$)<>0 Then Goto NEWFX
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='ASIN' Then CVQ#=Acos(Sqr(1-CVQ#^2)) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='ACOS' Then CVQ#=Acos(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='ATAN' Then CVQ#=Atan(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='HSIN' Then CVQ#=(Exp(CVQ#)-Exp(-CVQ#))/2 : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='SINH' Then CVQ#=(Exp(CVQ#)-Exp(-CVQ#))/2 : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='HCOS' Then CVQ#=(Exp(CVQ#)+Exp(-CVQ#))/2 : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='COSH' Then CVQ#=(Exp(CVQ#)+Exp(-CVQ#))/2 : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='HTAN' Then CVQ#=(Exp(CVQ#)-Exp(-CVQ#))/(Exp(CVQ#)+Exp(-CVQ#)) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,4) : If DUMMYVQ$='TANH' Then CVQ#=(Exp(CVQ#)-Exp(-CVQ#))/(Exp(CVQ#)+Exp(-CVQ#)) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-4) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='SIN' Then CVQ#=Sin(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='COS' Then CVQ#=Cos(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='TAN' Then CVQ#=Tan(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='LOG' Then CVQ#=Log(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='EXP' Then CVQ#=Exp(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='SQR' Then CVQ#=Sqr(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='ABS' Then CVQ#=Abs(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='INT' Then CVQ#=Int(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,3) : If DUMMYVQ$='SGN' Then CVQ#=Sgn(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-3) : Goto NEWFX2
DUMMYVQ$=Right$(FVQ$,2) : If DUMMYVQ$='LN' Then CVQ#=Ln(CVQ#) : SVQ$=Str$(CVQ#) : GVQ$=SVQ$ : FVQ$=Left$(FVQ$,IVQ-2) : Goto NEWFX2
NEWFX2:
DUMMYVQ$=Right$(FVQ$,1)
If Instr('+-*/^(Y',DUMMYVQ$)<>0 Then Goto NEWFX
FVQ$=FVQ$+"*"
NEWFX:
FVQ$=FVQ$+GVQ$+HVQ$
Goto NERR
ERROUTINE:
GVQ$="Error"
Resume NERR
NERR:
Return
POWERSVQ:
POWERTEST:
Gosub SPACEREMOVEVQ
IVQ=Instr(GVQ$,'^')
If IVQ=0 Then Goto NPRS
Rem g$ = lef1vq$ + lefvq$ ^ rigvq$ +rig1vq$
Rem first get rid of any first sequences of +'s or -'s after the ^
FULLRVQ$=Right$(GVQ$,Len(GVQ$)-IVQ)
Do
If Left$(FULLRVQ$,1)="+" Then FULLRVQ$=Mid$(FULLRVQ$,2) : Goto RETRY1
If Len(FULLRVQ$)>1 Then If Left$(FULLRVQ$,2)="--" Then FULLRVQ$=Mid$(FULLRVQ$,3) : Goto RETRY1
If Len(FULLRVQ$)>1 Then If Left$(FULLRVQ$,2)="-+" Then FULLRVQ$="-"+Mid$(FULLRVQ$,3) : Goto RETRY1
Exit
RETRY1:
Loop
GVQ$=Left$(GVQ$,IVQ)+FULLRVQ$
Rem ******
Rem get right hand side
Rem remember ^ is at position ivq
JVQ=IVQ+1
RIGVQ$=Mid$(GVQ$,JVQ,1)
Do
If JVQ=Len(GVQ$) Then Exit
JVQ=JVQ+1
DUMMYVQ$=Mid$(GVQ$,JVQ,1) : DUMMY1VQ$=Mid$(GVQ$,JVQ-1,1)
If Instr("0123456789.E",DUMMYVQ$)<>0 Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto RETRY2
If DUMMYVQ$="-" Then If DUMMY1VQ$="E" Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto RETRY2
If DUMMYVQ$="+" Then If DUMMY1VQ$="E" Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto RETRY2
Exit
RETRY2:
Loop
Rem Avoid two .'s or two E's
If Instr(Mid$(RIGVQ$,Instr(RIGVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(RIGVQ$,Instr(RIGVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(RIGVQ$,"E")>0) and(Instr("123456789",Mid$(RIGVQ$,Instr(RIGVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
If JVQ=Len(GVQ$) Then RIG1VQ$='' : Else RIG1VQ$=Mid$(GVQ$,JVQ)
'
Rem Now get the left hand side
Rem Remember ^ is still at position ivq
Rem Use KVQ this time, instead of JVQ
Rem The left hand side should be easier
KVQ=IVQ-1
LEFVQ$=Mid$(GVQ$,KVQ,1)
Do
KVQ=KVQ-1
Exit If KVQ=0
DUMMYVQ$=Mid$(GVQ$,KVQ,1)
DUMMY1VQ$=""
If KVQ>1 Then DUMMY1VQ$=Mid$(GVQ$,KVQ-1,1)
If Instr("0123456789.E",DUMMYVQ$)<>0 Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto RETRY3
If DUMMYVQ$="-" Then If DUMMY1VQ$="E" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto RETRY3
If DUMMYVQ$="+" Then If DUMMY1VQ$="E" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto RETRY3
If DUMMYVQ$="-" Then If DUMMY1VQ$="+" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : KVQ=KVQ-1 : Exit
If DUMMYVQ$="-" Then If DUMMY1VQ$="-" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : KVQ=KVQ-1 : Exit
If DUMMYVQ$="-" Then If DUMMY1VQ$="" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : KVQ=KVQ-1 : Exit
Exit
RETRY3:
Loop
Rem Avoid two .'s or two E's
If Instr(Mid$(LEFVQ$,Instr(LEFVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(LEFVQ$,Instr(LEFVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(LEFVQ$,"E")>0) and(Instr("123456789",Mid$(LEFVQ$,Instr(LEFVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
If KVQ=0 Then LEF1VQ$='' : Else LEF1VQ$=Mid$(GVQ$,1,KVQ) :
Rem *****
LLVQ#=Val(LEFVQ$) : RRVQ#=Val(RIGVQ$)
If(Abs(LLVQ#)<>LLVQ#) and(RRVQ#<>Int(RRVQ#)) Then EVAL$="Error" : Goto XITC
MIVQ#=LLVQ#^RRVQ#
'
Rem Try -1^5 in AMOS? Are odd powers of - nos OK? Assumed not!
Rem If Left$(LEFVQ$,1)="-" and 2*Int(RRVQ#/2)<>RRVQ# and RRVQ#=Int(RRVQ#) Then MIDDVQ$="-"+Mid$(MIDDVQ$,2)
Rem Possible correction for powers that are odd integers. Leave??! Unsure! Making matters worse ?
Rem I don't like this. However...?Complex Numbers?... ... ...
Rem Look at later. See line two from here !
'
MIDDVQ$=Str$(MIVQ#)
'
If Left$(LEFVQ$,1)="-" and 2*Int(RRVQ#/2)<>RRVQ# and RRVQ#=Int(RRVQ#) Then MIDDVQ$="-"+Mid$(MIDDVQ$,2)
'
If Left$(MIDDVQ$,1)<>"-" Then MIDDVQ$=Mid$(MIDDVQ$,2) : Rem NB Removing a space
GVQ$=LEF1VQ$+MIDDVQ$+RIG1VQ$
Goto POWERTEST
NPRS:
Return
PPREMOVEVQ:
Do
IVQ=Instr(GVQ$,"++")
If IVQ=0 Then Exit
GVQ$=Left$(GVQ$,IVQ-1)+"+"+Mid$(GVQ$,IVQ+2)
PMVQ$="Y"
Loop
Return
PMREMOVEVQ:
Do
IVQ=Instr(GVQ$,"+-")
If IVQ=0 Then Exit
GVQ$=Left$(GVQ$,IVQ-1)+"-"+Mid$(GVQ$,IVQ+2)
PMVQ$="Y"
Loop
Return
MPREMOVEVQ:
Do
IVQ=Instr(GVQ$,"-+")
If IVQ=0 Then Exit
GVQ$=Left$(GVQ$,IVQ-1)+"-"+Mid$(GVQ$,IVQ+2)
PMVQ$="Y"
Loop
Return
MMREMOVEVQ:
Do
IVQ=Instr(GVQ$,"--")
If IVQ=0 Then Exit
GVQ$=Left$(GVQ$,IVQ-1)+"+"+Mid$(GVQ$,IVQ+2)
PMVQ$="Y"
Loop
Return
COMPRESS_SIGNSVQ:
Do
PMVQ$="N"
Gosub PPREMOVEVQ
Gosub PMREMOVEVQ
Gosub MPREMOVEVQ
Gosub MMREMOVEVQ
If PMVQ$="N" Then Exit
Loop
Return
MULT_DIVVQ:
On Error Goto ERROUTINEMD
LEFTMOSTMD:
Gosub SPACEREMOVEVQ
IVQ=Instr(GVQ$,'*')
IIVQ=Instr(GVQ$,'/')
If IIVQ>1 and(IIVQ<IVQ or IVQ=0) Then IVQ=IIVQ : LVQ$="/" : Goto WORKOUT1
If IVQ>1 Then LVQ$="*" : Goto WORKOUT1
Goto NMRMD
WORKOUT1:
Rem gv$ = lef1vq$ lefvq$ # rigvq$ rig1vq$ , where # is * or /
Rem find right number
JVQ=IVQ+1
RIGVQ$=Mid$(GVQ$,JVQ,1)
Do
If JVQ=Len(GVQ$) Then Exit
JVQ=JVQ+1
DUMMYVQ$=Mid$(GVQ$,JVQ,1) : DUMMY1VQ$=Mid$(GVQ$,JVQ-1,1)
If Instr("0123456789.E",DUMMYVQ$)<>0 Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto KEEP_ON
If DUMMYVQ$="-" Then If DUMMY1VQ$="E" Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto KEEP_ON
If DUMMYVQ$="+" Then If DUMMY1VQ$="E" Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto KEEP_ON
Exit
KEEP_ON:
Loop
Rem Avoid two .'s or two E's
If Instr(Mid$(RIGVQ$,Instr(RIGVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(RIGVQ$,Instr(RIGVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(RIGVQ$,"E")>0) and(Instr("123456789",Mid$(RIGVQ$,Instr(RIGVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
If JVQ=Len(GVQ$) Then RIG1VQ$='' : Else RIG1VQ$=Mid$(GVQ$,JVQ)
Rem **********
Rem Find left number
KVQ=IVQ-1
LEFVQ$=Mid$(GVQ$,KVQ,1)
Do
KVQ=KVQ-1
Exit If KVQ=0
DUMMYVQ$=Mid$(GVQ$,KVQ,1)
DUMMY1VQ$=""
If KVQ-1>0 Then DUMMY1VQ$=Mid$(GVQ$,KVQ-1,1)
If Instr("0123456789.E",DUMMYVQ$)<>0 Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto REWORK
If DUMMYVQ$="-" Then If DUMMY1VQ$="E" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto REWORK
If DUMMYVQ$="+" Then If DUMMY1VQ$="E" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto REWORK
Exit
REWORK:
Loop
Rem Avoid two .'s or two E's
If Instr(Mid$(LEFVQ$,Instr(LEFVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(LEFVQ$,Instr(LEFVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(LEFVQ$,"E")>0) and(Instr("123456789",Mid$(LEFVQ$,Instr(LEFVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
If KVQ=0 Then LEF1VQ$='' : Else LEF1VQ$=Mid$(GVQ$,1,KVQ)
Rem
Rem now work out lef1vq$ lefvq$ # rigvq$ rig1vq$
Rem
LLVQ#=Val(LEFVQ$) : RRVQ#=Val(RIGVQ$)
If LVQ$="*" Then MIVQ#=LLVQ#*RRVQ#
If LVQ$="/" Then MIVQ#=LLVQ#/RRVQ#
MIDDVQ$=Str$(MIVQ#)
If Left$(MIDDVQ$,1)<>"-" Then MIDDVQ$=Right$(MIDDVQ$,Len(MIDDVQ$)-1) : Rem NB Removing a space
GVQ$=LEF1VQ$+MIDDVQ$+RIG1VQ$
Goto LEFTMOSTMD
Rem
NMRMD:
Goto NERRMD
ERROUTINEMD:
GVQ$="Error"
Resume NERRMD
NERRMD:
Return
AD_SUBVQ:
LEFTMOSTADSUB:
Gosub SPACEREMOVEVQ
Gosub COMPRESS_SIGNSVQ
'
Rem Avoiding E+
Do
I2VQ=Instr(GVQ$,"E+")
If I2VQ=0 Then Exit
GVQ$=Left$(GVQ$,I2VQ-1)+"EE"+Mid$(GVQ$,I2VQ+2)
Loop
'
Rem Avoid possible initial - sign, starting from 2nd character
IVQ=Instr(Mid$(GVQ$,2),'+')
'
Rem Now replacing E+
Do
I2VQ=Instr(GVQ$,"EE")
If I2VQ=0 Then Exit
GVQ$=Left$(GVQ$,I2VQ-1)+"E+"+Mid$(GVQ$,I2VQ+2)
Loop
Rem Having avoided E+ now continue
'
Rem Avoiding E-
Do
I2VQ=Instr(GVQ$,"E-")
If I2VQ=0 Then Exit
GVQ$=Left$(GVQ$,I2VQ-1)+"EE"+Mid$(GVQ$,I2VQ+2)
Loop
'
Rem Avoid possible initial - sign, starting from 2nd character
IIVQ=Instr(Mid$(GVQ$,2),'-')
'
Rem Now replacing E-
Do
I2VQ=Instr(GVQ$,"EE")
If I2VQ=0 Then Exit
GVQ$=Left$(GVQ$,I2VQ-1)+"E-"+Mid$(GVQ$,I2VQ+2)
Loop
Rem Having avoided E- now continue
'
Rem Find which is leftmost, + or -
'
If IIVQ>0 and(IIVQ<IVQ or IVQ=0) Then IVQ=IIVQ : LVQ$="-" : Goto WORKOUT2
If IVQ>0 Then LVQ$="+" : Goto WORKOUT2
Goto NMRADSUB
'
WORKOUT2:
Rem Remember to adjust IVQ since search began with 2nd item
IVQ=IVQ+1
Rem gvq$ = lef1vq$ lefvq$ # rigvq$ rig1vq$ , where # is + or -
Rem find right number
JVQ=IVQ+1
RIGVQ$=Mid$(GVQ$,JVQ,1)
Do
If JVQ=Len(GVQ$) Then Exit
JVQ=JVQ+1
DUMMYVQ$=Mid$(GVQ$,JVQ,1) : DUMMY1VQ$=Mid$(GVQ$,JVQ-1,1)
If Instr("0123456789.E",DUMMYVQ$)<>0 Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto KEEP_ON2
If DUMMYVQ$="-" Then If DUMMY1VQ$="E" Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto KEEP_ON2
If DUMMYVQ$="+" Then If DUMMY1VQ$="E" Then RIGVQ$=RIGVQ$+DUMMYVQ$ : Goto KEEP_ON2
Exit
KEEP_ON2:
Loop
Rem Avoid two .'s or two E's
If Instr(Mid$(RIGVQ$,Instr(RIGVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(RIGVQ$,Instr(RIGVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(RIGVQ$,"E")>0) and(Instr("123456789",Mid$(RIGVQ$,Instr(RIGVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
If JVQ=Len(GVQ$) Then RIG1VQ$='' : Else RIG1VQ$=Mid$(GVQ$,JVQ)
Rem **********
Rem Find left number
KVQ=IVQ-1
LEFVQ$=Mid$(GVQ$,KVQ,1)
Do
KVQ=KVQ-1
Exit If KVQ=0
DUMMYVQ$=Mid$(GVQ$,KVQ,1)
DUMMY1VQ$=""
If KVQ-1>0 Then DUMMY1VQ$=Mid$(GVQ$,KVQ-1,1)
If Instr("0123456789.E",DUMMYVQ$)<>0 Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto REWORK2
If DUMMYVQ$="-" Then If DUMMY1VQ$="E" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto REWORK2
If DUMMYVQ$="+" Then If DUMMY1VQ$="E" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : Goto REWORK2
Rem Don't forget negative numbers, working left to right
If DUMMYVQ$="-" Then LEFVQ$=DUMMYVQ$+LEFVQ$ : KVQ=KVQ-1 : Exit
Exit
REWORK2:
Loop
Rem Avoid two .'s or two E's
If Instr(Mid$(LEFVQ$,Instr(LEFVQ$,".")+1),".")>0 Then EVAL$="Error" : Goto XITC
If Instr(Mid$(LEFVQ$,Instr(LEFVQ$,"E")+1),"E")>0 Then EVAL$="Error" : Goto XITC
'If(Instr(LEFVQ$,"E")>0) and(Instr("123456789",Mid$(LEFVQ$,Instr(LEFVQ$,"E")-1,1))=0) Then EVAL$="Error" : Goto XITC
If KVQ=0 Then LEF1VQ$='' : Else LEF1VQ$=Mid$(GVQ$,1,KVQ)
Rem
Rem now work out lef1vq$ lefvq$ # rigvq$ rig1vq$
Rem
LLVQ#=Val(LEFVQ$) : RRVQ#=Val(RIGVQ$)
If LVQ$="+" Then MIVQ#=LLVQ#+RRVQ#
If LVQ$="-" Then MIVQ#=LLVQ#-RRVQ#
MIDDVQ$=Str$(MIVQ#)
'
Rem NB Removing a space
If Left$(MIDDVQ$,1)<>"-" Then MIDDVQ$=Right$(MIDDVQ$,Len(MIDDVQ$)-1)
'
GVQ$=LEF1VQ$+MIDDVQ$+RIG1VQ$
Goto LEFTMOSTADSUB
Rem
NMRADSUB:
If Left$(GVQ$,1)="+" Then GVQ$=Mid$(GVQ$,2)
Return
XITC:
EVAL$=EVAL$
EVAL=Val(EVAL$)
EVAL#=Val(EVAL$)
End Proc[EVAL$]
Global CHECK$
Procedure QUICKPAD
On Error Goto ER
Goto OK
ER:
ERR
Resume XIT
OK:
Screen Open 1,320,56,4,Hires
Screen Display 1,210,100,320,56
Curs Off : Cls 1 : Colour 0,$77
Cls 1 : Home : Paper 1
Centre "* Reminder *"
Paper 0
Wind Open 1,16,8,36,1,0
Wind Open 2,16,24,36,1,0
Window 2 : Clw : Centre CHECK$
RETRY:
Window 1 : Clw : Input " ";CHECK1$
If CHECK1$<>"" Then CHECK$=Left$(CHECK1$,34)
Curs Off
Window 2 : Clw : Centre CHECK$
Window 0
Locate 3,5 : Print Zone$("[P]rint",1)
Locate 17,5 : Print Zone$("[R]edo",2)
Locate 30,5 : Print Zone$("[E]xit",3)
Do
K$=Inkey$
If(K$="R") or(K$="r") Then Goto RETRY
If(K$="P") or(K$="p") Then Lprint CHECK$ : Lprint
If(K$="E") or(K$="e") Then Exit
Loop
Clear Key
Screen Close 1
XIT:
End Proc
Procedure HELP
On Error Goto ER
Goto OK
ER:
ERR
Resume XIT
OK:
Screen Open 1,640,256,4,Hires
Curs Off : Flash Off : Colour 3,$FF0
Cls 0
Paper 0
Print
Print : Centre "****** HELP ******"
Print
Print : Centre " CalcPad "
Print : Print : Print : Print
Pen 3
'Print : Print : Centre "To include PAD in an AMOS program"
'Print : Print : Centre "merge Pad.AMOS"
'Print : Print : Centre "Procedure Pad may then be used"
Print : Print : Centre "CalcPad consists of a NotePad"
Print : Print : Centre "to put in a short reminder,"
Print : Print : Centre "and a Calculator"
Print : Print : Centre "which can handle arithmetic"
Print : Print : Centre "and algebraic & trigonometric formulae"
Print : Print : Centre "using all the letters of the alphabet"
Wait 50
Do
If(Mouse Key=1) or(Key State(95)=True) or(Key State(37)=True) Then Exit
Loop
Cls 0
Paper 0
Home
Print
Centre "* CALCULATOR HELP *"
Print
Print
Pen 3
Centre " Functions and Trigonometric Expressions Allowed"
Pen 2
Print
Print
Centre "SIN"
Print
Centre "COS"
Print
Centre "TAN"
Print
Centre "ASIN"
Print
Centre "ACOS"
Print
Centre "ATAN"
Print
Centre "HSIN or SINH"
Print
Centre "HCOS or COSH"
Print
Centre "HTAN or TANH"
Print
Centre "LOG for base 10"
Print
Centre "EXP"
Print
Centre "LN Naperian,ie for base e"
Print
Centre "SQR for square roots"
Print
Centre "ABS"
Print
Centre "INT"
Print
Centre "SGN returns +1,-1 or for a zero,0"
Wait 50
Do
If(Mouse Key=1) or(Key State(95)=True) or(Key State(37)=True) Then Exit
Loop
Cls 0 : Home
Pen 3
Print : Centre "* CALCULATOR HELP *"
Print
Pen 2
Print : Centre "Calculator Error Reports"
Print
Print : Centre '"Error" is generated for'
Print
Print : Centre "Errors in the input function"
Print
Print : Centre "Division by zero"
Print
Print : Centre "Errors in evaluating functions"
Print
Centre "E.G"
Print
Centre "Tan(90)"
Print
Centre "LOG, -ve nos generate error report"
Print
Centre "LN, -ve nos generate error report"
Print
Centre "SQR, -ve nos generate error report"
Print
Centre "Non-integer powers of -ve nos generate error report"
Print
Pen 3
Print : Centre "*"
Pen 2
Print : Print : Centre "Range -10^18 to 10^18"
Pen 3
Print : Print : Centre "*"
Pen 2
Wait 50
Do
If(Mouse Key=1) or(Key State(95)=True) or(Key State(37)=True) Then Exit
Loop
Clear Key
Screen Close 1
XIT:
End Proc
Procedure ERR
On Error Goto ER
Goto OK
ER:
Resume XIT
OK:
Screen Open 3,320,48,4,Hires
Screen Display 3,200,100,320,48
Curs Off : Cls 1
Print : Centre "Error - Out of Memory/Range?"
Print : Print : Centre "Press Left Mouse Key"
Wait 50
Do : Exit If Mouse Key=1 : Loop
Screen Close 3
XIT:
End Proc
'
Rem ** End **
'