home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
extensions
/
jd
/
_newprogs
/
jd_calc.amos
/
jd_calc.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1994-03-12
|
17KB
|
366 lines
'*****************************************
'*** ***
'*** JD-CALCULATOR V1.0 ***
'*** (C) 1992 ***
'*** BY JOERG DOMMERMUTH ***
'*** ***
'*****************************************
'
Screen Open 0,640,256,16,Hires
Break Off
Curs Off : Flash Off
' Load Iff "DH0:AMOS_Pro/Progs/JD/JDCALC.PIC",0
' Spack 0 To 1
Unpack 1 To 0
Palette ,,,,,,,,,,,,,,,,,$AAA,$FFF,$233
Colour Back Colour(0)
Limit Mouse 128,43 To 434,290
Pen 3 : Paper 0
Reserve Zone 106
Set Zone 1,15,8 To 51,18 : Rem off
Set Zone 2,55,8 To 91,18 : Rem deg
Set Zone 3,95,8 To 131,18 : Rem rad
Set Zone 4,335,8 To 371,18 : Rem dec
Set Zone 5,375,8 To 411,18 : Rem hex
Set Zone 6,415,8 To 451,18 : Rem bin
Set Zone 7,15,36 To 51,46 : Rem int
Set Zone 8,15,48 To 51,58 : Rem fix1
Set Zone 9,15,60 To 51,70 : Rem fix2
Set Zone 10,15,72 To 51,82 : Rem fix3
Set Zone 11,15,84 To 51,94 : Rem fix4
Set Zone 12,15,96 To 51,106 : Rem fix5
Set Zone 13,15,108 To 51,118 : Rem fix6
Set Zone 14,15,120 To 51,130 : Rem fix7
Set Zone 15,15,132 To 51,142 : Rem ffp
Set Zone 16,15,144 To 51,154 : Rem deffp
Set Zone 17,55,36 To 91,46 : Rem exp
Set Zone 18,55,48 To 91,58 : Rem log
Set Zone 19,55,60 To 91,70 : Rem ln
Set Zone 20,55,72 To 91,82 : Rem logB
Set Zone 21,95,36 To 131,46 : Rem sin
Set Zone 22,95,48 To 131,58 : Rem asin
Set Zone 23,95,60 To 131,70 : Rem hsin
Set Zone 24,95,72 To 131,82 : Rem arsin
Set Zone 25,135,36 To 171,46 : Rem cos
Set Zone 26,135,48 To 171,58 : Rem acos
Set Zone 27,135,60 To 171,70 : Rem hcos
Set Zone 28,135,72 To 171,82 : Rem arcos
Set Zone 29,175,36 To 211,46 : Rem tan
Set Zone 30,175,48 To 211,58 : Rem atan
Set Zone 31,175,60 To 211,70 : Rem htan
Set Zone 32,175,72 To 211,82 : Rem artan
Set Zone 33,215,36 To 251,46 : Rem cot
Set Zone 34,215,48 To 251,58 : Rem acot
Set Zone 35,215,60 To 251,70 : Rem hcot
Set Zone 36,215,72 To 251,82 : Rem arcot
Set Zone 37,255,36 To 291,46 : Rem sec
Set Zone 38,255,48 To 291,58 : Rem asec
Set Zone 39,255,60 To 291,70 : Rem hsec
Set Zone 40,255,72 To 291,82 : Rem arsec
Set Zone 41,295,36 To 331,46 : Rem cosec
Set Zone 42,295,48 To 331,58 : Rem acosec
Set Zone 43,295,60 To 331,70 : Rem hcosec
Set Zone 44,295,72 To 331,82 : Rem arcosec
Set Zone 45,335,36 To 371,46 : Rem wurzel
Set Zone 46,335,48 To 371,58 : Rem xwurzel
Set Zone 47,335,60 To 371,70 : Rem hoch
Set Zone 48,375,36 To 411,46 : Rem prozent
Set Zone 49,375,48 To 411,58 : Rem deltaprozent
Set Zone 50,375,60 To 411,70 : Rem gwprozent
Set Zone 51,415,36 To 451,46 : Rem abs
Set Zone 52,415,48 To 451,58 : Rem vorzeichen
Set Zone 53,415,60 To 451,70 : Rem rund
Set Zone 54,415,72 To 451,82 : Rem 1X
Set Zone 55,335,72 To 371,82 : Rem pi
Set Zone 56,375,72 To 411,82 : Rem e
Set Zone 57,55,84 To 91,94 : Rem m+
Set Zone 58,95,84 To 131,94 : Rem m-
Set Zone 59,135,84 To 171,94 : Rem m
Set Zone 60,175,84 To 211,94 : Rem rm
Set Zone 61,215,84 To 251,94 : Rem CM
Set Zone 62,255,84 To 291,94 : Rem X-M
Set Zone 63,295,84 To 331,94 : Rem X-Y
Set Zone 64,335,84 To 371,94 : Rem Ma
Set Zone 65,375,84 To 411,94 : Rem Mg
Set Zone 66,415,84 To 451,94 : Rem Mh
Set Zone 67,335,96 To 371,106 : Rem rol
Set Zone 68,335,108 To 371,118 : Rem ror
Set Zone 69,335,120 To 371,130 : Rem roxl
Set Zone 70,335,132 To 371,142 : Rem roxr
Set Zone 71,335,144 To 371,154 : Rem eqv
Set Zone 72,375,96 To 411,106 : Rem asl
Set Zone 73,375,108 To 411,118 : Rem asr
Set Zone 74,375,120 To 411,130 : Rem lsl
Set Zone 75,375,132 To 411,142 : Rem lsr
Set Zone 76,375,144 To 411,154 : Rem imp
Set Zone 77,415,96 To 451,106 : Rem mod
Set Zone 78,415,108 To 451,118 : Rem and
Set Zone 79,415,120 To 451,130 : Rem or
Set Zone 80,415,132 To 451,142 : Rem xor
Set Zone 81,415,144 To 451,154 : Rem not
Set Zone 82,255,108 To 291,118 : Rem +
Set Zone 83,255,120 To 291,130 : Rem -
Set Zone 84,255,132 To 291,142 : Rem *
Set Zone 85,255,144 To 291,154 : Rem /
Set Zone 86,295,144 To 331,154 : Rem =
Set Zone 87,55,108 To 91,118 : Rem Clear
Set Zone 88,55,120 To 91,130 : Rem CE
Set Zone 89,55,132 To 91,142 : Rem <-
Set Zone 90,55,144 To 91,154 : Rem .
Set Zone 91,95,144 To 131,154 : Rem 0
Set Zone 92,135,144 To 171,154 : Rem 1
Set Zone 93,175,144 To 211,154 : Rem 2
Set Zone 94,215,144 To 251,154 : Rem 3
Set Zone 95,95,132 To 131,142 : Rem 4
Set Zone 96,135,132 To 171,142 : Rem 5
Set Zone 97,175,132 To 211,142 : Rem 6
Set Zone 98,215,132 To 251,142 : Rem 7
Set Zone 99,95,120 To 131,130 : Rem 8
Set Zone 100,135,120 To 171,130 : Rem 9
Set Zone 101,175,120 To 211,130 : Rem A
Set Zone 102,215,120 To 251,130 : Rem B
Set Zone 103,95,108 To 131,118 : Rem C
Set Zone 104,135,108 To 171,118 : Rem D
Set Zone 105,175,108 To 211,118 : Rem E
Set Zone 106,215,108 To 251,118 : Rem F
DEGRAD=1 : Radian
F=0 : Fix 0
ZS=10
FFP#=0.0
MEMO#=0.0 : WERT$="" : ZAHL$="" : AUS$="" : Goto _CLEAR
MAIN: Locate 13,3 : Print Repeat$(" ",35) : Locate 13,3
If AUS$="-0" Then AUS$="0"
If AUS$="" Then AUS$="0"
If F>0 and Val(AUS$)=0 Then If WERT$="" Then AUS$="0." : For X=1 To F : AUS$=AUS$+"0" : Next
If ZS=1 Then RAUS$="%"+AUS$
If ZS=16 Then RAUS$="$"+AUS$
If ZS=10 Then RAUS$=" "+AUS$
Print Left$(RAUS$,1);" "; Extension_22_011A(AUS$,32,-1)
MZ=0
If MMZ<>0 Then MZ=MMZ : MMZ=0 : MARK=0 : Goto _GE2
IN$="" : Clear Key : While Mouse Key<>0 : Wend
_GET: IN$=Inkey$ : IN$=Upper$(IN$)
MZ=Instr("+-*/=",IN$) : If MZ>0 Then Goto _GE2
MZ=Instr(".0123456789ABCDEF",IN$) : If MZ>0 Then Goto AW
MZ=Mouse Zone : MK=Mouse Key
If MK<>1 or MZ=0 Then Goto _GET
On MZ Goto _OFF,_DEG,_RAD,_DEC,_HEX,_BIN
MZ=MZ-6
On MZ Goto _FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FFP,_DEFFP
MZ=MZ-10
On MZ Goto _EXP,_LOG,_LN,_LOGB
MZ=MZ-4
On MZ Goto _SIN,_ASIN,_HSIN,_ARSIN
MZ=MZ-4
On MZ Goto _COS,_ACOS,_HCOS,_ARCOS
MZ=MZ-4
On MZ Goto _TAN,_ATAN,_HTAN,_ARTAN
MZ=MZ-4
On MZ Goto _COT,_ACOT,_HCOT,_ARCOT
MZ=MZ-4
On MZ Goto _SEC,_ASEC,_HSEC,_ARSEC
MZ=MZ-4
On MZ Goto _COSEC,_ACOSEC,_HCOSEC,_ARCOSEC
MZ=MZ-4
On MZ Goto _WURZEL,_XWURZEL,_HOCH,_PROZENT,_DELTAPROZENT,_GWPROZENT
MZ=MZ-6
On MZ Goto _ABS,_VORZEICHEN,_RUND,_1X,_PI,_E
MZ=MZ-6
On MZ Goto _MPLUS,_MMINUS,_M,_RM,_CM,_XM,_XY
MZ=MZ-7
On MZ Goto _MA,_MG,_MH
MZ=MZ-3
On MZ Goto _ROL,_ROR,_ROXL,_ROXR,_EQV
MZ=MZ-5
On MZ Goto _ASL,_ASR,_LSL,_LSR,_IMP
MZ=MZ-5
On MZ Goto _MOD,_AND,_OR,_XOR,_NOT
MZ=MZ-5
_GE2: On MZ Goto _PLUS,_MINUS,_MAL,_DURCH,_GLEICH
MZ=MZ-5
On MZ Goto _CLEAR,_CE,_DEL
MZ=MZ-3
On MZ Goto AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW
_OFF: End
_DEG: DEGRAD=0 : Degree : Goto _CLEAR
_RAD: DEGRAD=1 : Radian : Goto _CLEAR
_DEC: If ZS=10 Then Goto MAIN0
ZAHL#=Val(RAUS$) : ZS=10 : Goto WERT_END
_HEX: If ZS=16 Then Goto MAIN0
ZAHL#=Int(Val(RAUS$)) : ZS=16 : F=0 : Fix 0 : Goto WERT_END
_BIN: If ZS=1 Then Goto MAIN0
ZAHL#=Int(Val(RAUS$)) : ZS=1 : F=0 : Fix 0 : Goto WERT_END
_FIX: ZAHL#=Val(RAUS$) : F=MZ-1 : Fix F : Goto WERT_END
_FFP: WERT#=Val(RAUS$) : W=Varptr(WERT#) : FFP=Leek(W) : BEF=F : F=0 : Fix 0 : ZAHL#=FFP : Goto WERT_END
_DEFFP: Fix 7 : F=7 : ZAHL#=0.0 : RAUS=Val(RAUS$) : Loke Varptr(ZAHL#),RAUS : ZS=10 : Goto WERT_END
_EXP: ZAHL#=Val(RAUS$) : ZAHL#=Exp(ZAHL#) : Goto WERT_END
_LOG: If Sgn(Val(RAUS$))=-1 Then Goto _ERROR
ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#) : Goto WERT_END
_LN: If Sgn(Val(RAUS$))=-1 Then Goto _ERROR
ZAHL#=Val(RAUS$) : ZAHL#=Ln(ZAHL#) : Goto WERT_END
_LOGB: Gosub _GETWERT : If Sgn(ZAHL#)=0 and Sgn(WERT#)=0 Then If Log(WERT#)<>0.0 Then ZAHL#=Log(ZAHL#)/Log(WERT#) : Goto WERT_END
Goto _ERROR
_SIN: ZAHL#=Val(RAUS$) : ZAHL#=Sin(ZAHL#) : Goto WERT_END
_ASIN: ZAHL#=Val(RAUS$)
If DEGRAD=0 Then ZAHL#=90.0-Acos(ZAHL#) : Goto WERT_END
ZAHL#=1.5708-Acos(ZAHL#) : Goto WERT_END
_HSIN: ZAHL#=Val(RAUS$) : ZAHL#=Hsin(ZAHL#) : Goto WERT_END
_ARSIN: ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#+Sqr(ZAHL#^2+1)) : Goto WERT_END
_COS: ZAHL#=Val(RAUS$) : ZAHL#=Cos(ZAHL#) : Goto WERT_END
_ACOS: ZAHL#=Val(RAUS$) : ZAHL#=Acos(ZAHL#) : Goto WERT_END
_HCOS: ZAHL#=Val(RAUS$) : ZAHL#=Hcos(ZAHL#) : Goto WERT_END
_ARCOS: ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#+Sqr(ZAHL#^2-1)) : Goto WERT_END
_TAN: ZAHL#=Val(RAUS$) : ZAHL#=Tan(ZAHL#) : Goto WERT_END
_ATAN: ZAHL#=Val(RAUS$) : ZAHL#=Atan(ZAHL#) : Goto WERT_END
_HTAN: ZAHL#=Val(RAUS$) : ZAHL#=Htan(ZAHL#) : Goto WERT_END
_ARTAN: ZAHL#=Val(RAUS$) : If ZAHL#=1.0 Then Goto _ERROR
ZAHL#=Log((1+X)/(1-X))/2 : Goto WERT_END
_COT: ZAHL#=Val(RAUS$) : If Tan(ZAHL#)<>0.0 Then ZAHL#=1/Tan(ZAHL#) : Goto WERT_END
Goto _ERROR
_ACOT: ZAHL#=Val(RAUS$) : ZAHL#=Pi#/2.0-Atan(ZAHL#) : Goto WERT_END
_HCOT: ZAHL#=Val(RAUS$) : If Hsin(ZAHL#)<>0.0 Then ZAHL#=Hcos(ZAHL#)/Hsin(ZAHL#) : Goto WERT_END
Goto _ERROR
_ARCOT: ZAHL#=Val(RAUS$) : If ZAHL#=1.0 Then Goto _ERROR
ZAHL#=Log((X+1)/(X-1))/2 : Goto WERT_END
_SEC: ZAHL#=Val(RAUS$) : If Cos(ZAHL#)<>0.0 Then ZAHL#=1/Cos(ZAHL#) : Goto WERT_END
Goto _ERROR
_ASEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
_HSEC: ZAHL#=Val(RAUS$) : If Exp(ZAHL#)+Exp(ZAHL#*-1)=0.0 Then Goto _ERROR
ZAHL#=2/(Exp(ZAHL#)+Exp(ZAHL#*-1)) : Goto WERT_END
_ARSEC: ZAHL#=Val(RAUS$) : If ZAHL#=0.0 Then Goto _ERROR
ZAHL#=Log((Sqr(ZAHL#*-1^2+1)+1)/ZAHL#) : Goto WERT_END
_COSEC: ZAHL#=Val(RAUS$) : If Sin(ZAHL#)<>0.0 Then ZAHL#=1/Sin(ZAHL#) : Goto WERT_END
Goto _ERROR
_ACOSEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(1/Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
_HCOSEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(1/Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
_ARCOSEC: ZAHL#=Val(RAUS$) : If ZAHL#=0.0 Then Goto _ERROR
ZAHL#=Log((Sgn(ZAHL#)*Sqr(ZAHL#*-1^2+1)+1)/ZAHL#) : Goto WERT_END
_WURZEL: ZAHL#=Val(RAUS$) : ZAHL#=Sqr(ZAHL#) : Goto WERT_END
_XWURZEL: Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#^(1.0/WERT#) : Goto WERT_END
Bell : Gosub _TOMAIN : Goto _XWURZEL
_HOCH: Gosub _GETWERT : ZAHL#=Val(ZAHL$) : S=Sgn(ZAHL#) : WERT#=Val(RAUS$) : ZAHL#=ZAHL#^WERT#
If S=-1 and Extension_22_032A(WERT#)=0 Then ZAHL#=ZAHL#*-1
Goto WERT_END
_PROZENT: Gosub _GETWERT : ZAHL#=ZAHL#*WERT#/100.0 : Goto WERT_END
_DELTAPROZENT: If ZAHL#=0.0 Then Bell : Goto WERT_END
Gosub _GETWERT : ZAHL#=WERT#*100.0/ZAHL# : Goto WERT_END
_GWPROZENT: Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#*100.0/WERT# : Goto WERT_END
Bell : Gosub _TOMAIN : Goto _GWPROZENT
_ABS: ZAHL#=Val(ZAHL$) : ZAHL#=Abs(ZAHL#) : ZAHL$=Str$(ZAHL#)-" " : Goto WERT_END
_VORZEICHEN: WERT#=Val(RAUS$)*-1 : Goto MAIN1
_RUND: Gosub _GETWERT : WERT=WERT# : WERT=Abs(WERT) : If WERT>7 Then WERT=7
Fix WERT : ZAHL$=Str$(ZAHL#) : ZAHL#=Val(ZAHL$) : Fix F : Goto WERT_END
_1X: If Val(RAUS$)<>0.0 Then ZAHL#=1.0/Val(RAUS$) : Goto WERT_END
Bell : Goto MAIN
_PI: WERT#=Pi# : Goto MAIN1
_E: WERT#=E# : Goto MAIN1
_MPLUS: Locate 11,3 : Print "M" : MEMO#=MEMO#+Val(RAUS$) : Goto MAIN
_MMINUS: Locate 11,3 : Print "M" : MEMO#=MEMO#-Val(RAUS$) : Goto MAIN
_M: Locate 11,3 : Print "M" : MEMO#=Val(RAUS$) : Goto MAIN
_RM: Locate 11,3 : Print "M" : WERT$=Str$(MEMO#)-" " : Goto MAIN0
_CM: Locate 11,3 : Print " " : MEMO#=0.0 : Goto MAIN
_XM: Locate 11,3 : Print "M" : RMEMO#=Val(RAUS$) : WERT$=Str$(MEMO#)-" " : MEMO#=RMEMO# : Goto MAIN0
_XY: RZAHL#=ZAHL# : ZAHL#=Val(RAUS$) : WERT#=RZAHL# : Goto MAIN1
_MA: Gosub _GETWERT : ZAHL#=(ZAHL#+WERT#)/2.0 : Goto WERT_END
_MG: Gosub _GETWERT : ZAHL#=Sqr(ZAHL#*WERT#) : Goto WERT_END
_MH: Gosub _GETWERT : If ZAHL#+WERT#<>0.0 Then ZAHL#=(2*ZAHL#*WERT#)/(ZAHL#+WERT#) : Goto WERT_END
ZAHL#=0.0 : Goto WERT_END
_ROL: WERT#=Val(RAUS$) : WERT#= Extension_22_03F0(1,WERT#) : Goto MAIN1
_ROR: WERT#=Val(RAUS$) : WERT#= Extension_22_0400(1,WERT#) : Goto MAIN1
_ROXL: WERT#=Val(RAUS$) : WERT#= Extension_22_0410(1,WERT#) : Goto MAIN1
_ROXR: WERT#=Val(RAUS$) : WERT#= Extension_22_0420(1,WERT#) : Goto MAIN1
_EQV: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
ZAHL= Extension_22_075A(ZAHL,WERT) : ZAHL#=ZAHL : Goto WERT_END
_ASL: WERT#=Val(RAUS$) : WERT#= Extension_22_0450(1,WERT#) : Goto MAIN1
_ASR: WERT#=Val(RAUS$) : WERT#= Extension_22_0460(1,WERT#) : Goto MAIN1
_LSL: WERT#=Val(RAUS$) : WERT#= Extension_22_0430(1,WERT#) : Goto MAIN1
_LSR: WERT#=Val(RAUS$) : WERT#= Extension_22_0440(1,WERT#) : Goto MAIN1
_IMP: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
ZAHL= Extension_22_074A(ZAHL,WERT) : ZAHL#=ZAHL : Goto WERT_END
_MOD: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
ZAHL=ZAHL mod WERT : ZAHL#=ZAHL : Goto WERT_END
_AND: Gosub _GETWERT : ZAHL=Int(ZAHL#) : WERT=Int(WERT#)
ZAHL=ZAHL and WERT : ZAHL#=ZAHL : Goto WERT_END
_OR: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
ZAHL=ZAHL or WERT : ZAHL#=ZAHL : Goto WERT_END
_XOR: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
ZAHL=ZAHL xor WERT : ZAHL#=ZAHL : Goto WERT_END
_NOT: WERT#=Val(RAUS$) : ZAHL=WERT# : ZAHL= Not ZAHL : ZAHL#=ZAHL : Goto WERT_END
_PLUS: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#+WERT# : Goto WERT_END
MMZ=MZ : Goto _GLEICH
_MINUS: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#-WERT# : Goto WERT_END
MMZ=MZ : Goto _GLEICH
_MAL: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#*WERT# : Goto WERT_END
MMZ=MZ : Goto _GLEICH
_DURCH: If MARK=0 Then Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#/WERT# : Goto WERT_END
If MARK=0 Then Bell : Gosub _TOMAIN : Goto _DURCH
MMZ=MZ : Goto _GLEICH
_GLEICH: WERT#=Val(RAUS$) : If MARK=1 Then Return
Goto MAIN
_CLEAR: WERT$="" : ZAHL$="" : AUS$="" : Goto MAIN
_CE: WERT$="" : AUS$="" : Goto MAIN
_DEL: If Len(WERT$)>0 Then WERT$=Left$(WERT$,Len(WERT$)-1)
Goto MAIN0
AW: If ZS=1 and Len(WERT$)>31 Then Goto MAIN0
If ZS=1 Then Goto _ADD
If ZS=16 and Len(WERT$)>7 Then Goto MAIN0
If ZS=16 Then Goto _ADD
If Len(WERT$)>31 Then Goto MAIN0
PP=Instr(WERT$,".")
If F>0 and PP=0 and Len(WERT$)>9 and MZ<>1 Then Goto MAIN0
If PP=0 Then Goto _ADD
NKS$=WERT$-Left$(WERT$,PP)
If Len(NKS$)=F Then Goto MAIN0
_ADD: On MZ Goto _ADDP,_ADD0,_ADD1,_ADD2,_ADD3,_ADD4,_ADD5,_ADD6,_ADD7,_ADD8,_ADD9,_ADDA,_ADDB,_ADDC,_ADDD,_ADDE,_ADDF
_ADD0: If Val(RAUS$)<>0 or Val("%"+WERT$)<>0 or Instr(WERT$,".") Then WERT$=WERT$+"0"
Goto MAIN0
_ADD1: WERT$=WERT$+"1" : Goto MAIN0
_ADD2: If ZS<>1 Then WERT$=WERT$+"2"
Goto MAIN0
_ADD3: If ZS<>1 Then WERT$=WERT$+"3"
Goto MAIN0
_ADD4: If ZS<>1 Then WERT$=WERT$+"4"
Goto MAIN0
_ADD5: If ZS<>1 Then WERT$=WERT$+"5"
Goto MAIN0
_ADD6: If ZS<>1 Then WERT$=WERT$+"6"
Goto MAIN0
_ADD7: If ZS<>1 Then WERT$=WERT$+"7"
Goto MAIN0
_ADD8: If ZS<>1 Then WERT$=WERT$+"8"
Goto MAIN0
_ADD9: If ZS<>1 Then WERT$=WERT$+"9"
Goto MAIN0
_ADDA: If ZS=16 Then WERT$=WERT$+"A"
Goto MAIN0
_ADDB: If ZS=16 Then WERT$=WERT$+"B"
Goto MAIN0
_ADDC: If ZS=16 Then WERT$=WERT$+"C"
Goto MAIN0
_ADDD: If ZS=16 Then WERT$=WERT$+"D"
Goto MAIN0
_ADDE: If ZS=16 Then WERT$=WERT$+"E"
Goto MAIN0
_ADDF: If ZS=16 Then WERT$=WERT$+"F"
Goto MAIN0
_ADDP: If ZS<>10 or F=0 Then Goto MAIN
If Instr(WERT$,".") Then Goto MAIN0
If ZS=10 and F<>0 Then WERT$=WERT$+"."
If Left$(WERT$,1)="." Then WERT$="0"+WERT$
Goto MAIN0
_ERROR: Bell : ZAHL#=0.0 : Goto WERT_END
MAIN1: If ZS=1 Then WERT$=Bin$(WERT#)-"%"
If ZS=10 Then WERT$=Str$(WERT#)-" "
If ZS=16 Then WERT$=Hex$(WERT#)-"$"
MAIN0: AUS$=WERT$ : Goto MAIN
WERT_END: MARK=0
If ZS=1 Then ZAHL$=Bin$(ZAHL#)-"%"
If ZS=10 Then ZAHL$=Str$(ZAHL#)-" "
If ZS=16 Then ZAHL$=Hex$(ZAHL#)-"$"
WERT$="" : AUS$=ZAHL$ : Goto MAIN
_GETWERT: MARK=1 : ZAHL$=WERT$ : WERT$="" : ZAHL#=Val(RAUS$) : Goto MAIN
_TOMAIN: WERT$=ZAHL$
If ZS=1 Then RAUS$=Bin$(Val(ZAHL$))
If ZS=10 Then RAUS$=Str$(Val(ZAHL$))
If ZS=16 Then RAUS$=Hex$(Val(ZAHL$))
Return