home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / extensions / jd / _newprogs / jd_calc.amos / jd_calc.amosSourceCode < prev    next >
AMOS Source Code  |  1994-03-12  |  17KB  |  366 lines

  1. '*****************************************   
  2. '***                                   ***   
  3. '***        JD-CALCULATOR  V1.0        ***   
  4. '***             (C)  1992             ***   
  5. '***        BY JOERG DOMMERMUTH        ***   
  6. '***                                   ***   
  7. '*****************************************   
  8. '
  9.    Screen Open 0,640,256,16,Hires
  10.    Break Off 
  11.    Curs Off : Flash Off 
  12. '   Load Iff "DH0:AMOS_Pro/Progs/JD/JDCALC.PIC",0
  13. '   Spack 0 To 1 
  14.    Unpack 1 To 0
  15.    Palette ,,,,,,,,,,,,,,,,,$AAA,$FFF,$233
  16.    Colour Back Colour(0)
  17.    Limit Mouse 128,43 To 434,290
  18.    Pen 3 : Paper 0
  19.    Reserve Zone 106
  20.    Set Zone 1,15,8 To 51,18 : Rem off  
  21.    Set Zone 2,55,8 To 91,18 : Rem deg
  22.    Set Zone 3,95,8 To 131,18 : Rem rad
  23.    Set Zone 4,335,8 To 371,18 : Rem dec
  24.    Set Zone 5,375,8 To 411,18 : Rem hex
  25.    Set Zone 6,415,8 To 451,18 : Rem bin
  26.    Set Zone 7,15,36 To 51,46 : Rem int
  27.    Set Zone 8,15,48 To 51,58 : Rem fix1 
  28.    Set Zone 9,15,60 To 51,70 : Rem fix2 
  29.    Set Zone 10,15,72 To 51,82 : Rem fix3 
  30.    Set Zone 11,15,84 To 51,94 : Rem fix4   
  31.    Set Zone 12,15,96 To 51,106 : Rem fix5   
  32.    Set Zone 13,15,108 To 51,118 : Rem fix6   
  33.    Set Zone 14,15,120 To 51,130 : Rem fix7   
  34.    Set Zone 15,15,132 To 51,142 : Rem ffp
  35.    Set Zone 16,15,144 To 51,154 : Rem deffp
  36.    Set Zone 17,55,36 To 91,46 : Rem exp    
  37.    Set Zone 18,55,48 To 91,58 : Rem log    
  38.    Set Zone 19,55,60 To 91,70 : Rem ln   
  39.    Set Zone 20,55,72 To 91,82 : Rem logB 
  40.    Set Zone 21,95,36 To 131,46 : Rem sin
  41.    Set Zone 22,95,48 To 131,58 : Rem asin 
  42.    Set Zone 23,95,60 To 131,70 : Rem hsin 
  43.    Set Zone 24,95,72 To 131,82 : Rem arsin
  44.    Set Zone 25,135,36 To 171,46 : Rem cos
  45.    Set Zone 26,135,48 To 171,58 : Rem acos 
  46.    Set Zone 27,135,60 To 171,70 : Rem hcos 
  47.    Set Zone 28,135,72 To 171,82 : Rem arcos
  48.    Set Zone 29,175,36 To 211,46 : Rem tan
  49.    Set Zone 30,175,48 To 211,58 : Rem atan 
  50.    Set Zone 31,175,60 To 211,70 : Rem htan 
  51.    Set Zone 32,175,72 To 211,82 : Rem artan
  52.    Set Zone 33,215,36 To 251,46 : Rem cot
  53.    Set Zone 34,215,48 To 251,58 : Rem acot 
  54.    Set Zone 35,215,60 To 251,70 : Rem hcot 
  55.    Set Zone 36,215,72 To 251,82 : Rem arcot
  56.    Set Zone 37,255,36 To 291,46 : Rem sec
  57.    Set Zone 38,255,48 To 291,58 : Rem asec 
  58.    Set Zone 39,255,60 To 291,70 : Rem hsec 
  59.    Set Zone 40,255,72 To 291,82 : Rem arsec
  60.    Set Zone 41,295,36 To 331,46 : Rem cosec
  61.    Set Zone 42,295,48 To 331,58 : Rem acosec 
  62.    Set Zone 43,295,60 To 331,70 : Rem hcosec 
  63.    Set Zone 44,295,72 To 331,82 : Rem arcosec
  64.    Set Zone 45,335,36 To 371,46 : Rem wurzel 
  65.    Set Zone 46,335,48 To 371,58 : Rem xwurzel
  66.    Set Zone 47,335,60 To 371,70 : Rem hoch 
  67.    Set Zone 48,375,36 To 411,46 : Rem prozent
  68.    Set Zone 49,375,48 To 411,58 : Rem deltaprozent 
  69.    Set Zone 50,375,60 To 411,70 : Rem gwprozent
  70.    Set Zone 51,415,36 To 451,46 : Rem abs
  71.    Set Zone 52,415,48 To 451,58 : Rem vorzeichen 
  72.    Set Zone 53,415,60 To 451,70 : Rem rund 
  73.    Set Zone 54,415,72 To 451,82 : Rem 1X 
  74.    Set Zone 55,335,72 To 371,82 : Rem pi 
  75.    Set Zone 56,375,72 To 411,82 : Rem e
  76.    Set Zone 57,55,84 To 91,94 : Rem m+ 
  77.    Set Zone 58,95,84 To 131,94 : Rem m- 
  78.    Set Zone 59,135,84 To 171,94 : Rem m  
  79.    Set Zone 60,175,84 To 211,94 : Rem rm   
  80.    Set Zone 61,215,84 To 251,94 : Rem CM 
  81.    Set Zone 62,255,84 To 291,94 : Rem X-M  
  82.    Set Zone 63,295,84 To 331,94 : Rem X-Y  
  83.    Set Zone 64,335,84 To 371,94 : Rem Ma 
  84.    Set Zone 65,375,84 To 411,94 : Rem Mg 
  85.    Set Zone 66,415,84 To 451,94 : Rem Mh 
  86.    Set Zone 67,335,96 To 371,106 : Rem rol
  87.    Set Zone 68,335,108 To 371,118 : Rem ror
  88.    Set Zone 69,335,120 To 371,130 : Rem roxl 
  89.    Set Zone 70,335,132 To 371,142 : Rem roxr 
  90.    Set Zone 71,335,144 To 371,154 : Rem eqv
  91.    Set Zone 72,375,96 To 411,106 : Rem asl
  92.    Set Zone 73,375,108 To 411,118 : Rem asr
  93.    Set Zone 74,375,120 To 411,130 : Rem lsl
  94.    Set Zone 75,375,132 To 411,142 : Rem lsr
  95.    Set Zone 76,375,144 To 411,154 : Rem imp
  96.    Set Zone 77,415,96 To 451,106 : Rem mod
  97.    Set Zone 78,415,108 To 451,118 : Rem and
  98.    Set Zone 79,415,120 To 451,130 : Rem or 
  99.    Set Zone 80,415,132 To 451,142 : Rem xor
  100.    Set Zone 81,415,144 To 451,154 : Rem not  
  101.    Set Zone 82,255,108 To 291,118 : Rem +
  102.    Set Zone 83,255,120 To 291,130 : Rem -      
  103.    Set Zone 84,255,132 To 291,142 : Rem *  
  104.    Set Zone 85,255,144 To 291,154 : Rem /    
  105.    Set Zone 86,295,144 To 331,154 : Rem =    
  106.    Set Zone 87,55,108 To 91,118 : Rem Clear    
  107.    Set Zone 88,55,120 To 91,130 : Rem CE     
  108.    Set Zone 89,55,132 To 91,142 : Rem <- 
  109.    Set Zone 90,55,144 To 91,154 : Rem .    
  110.    Set Zone 91,95,144 To 131,154 : Rem 0    
  111.    Set Zone 92,135,144 To 171,154 : Rem 1    
  112.    Set Zone 93,175,144 To 211,154 : Rem 2    
  113.    Set Zone 94,215,144 To 251,154 : Rem 3    
  114.    Set Zone 95,95,132 To 131,142 : Rem 4  
  115.    Set Zone 96,135,132 To 171,142 : Rem 5  
  116.    Set Zone 97,175,132 To 211,142 : Rem 6  
  117.    Set Zone 98,215,132 To 251,142 : Rem 7  
  118.    Set Zone 99,95,120 To 131,130 : Rem 8      
  119.    Set Zone 100,135,120 To 171,130 : Rem 9      
  120.    Set Zone 101,175,120 To 211,130 : Rem A      
  121.    Set Zone 102,215,120 To 251,130 : Rem B      
  122.    Set Zone 103,95,108 To 131,118 : Rem C
  123.    Set Zone 104,135,108 To 171,118 : Rem D
  124.    Set Zone 105,175,108 To 211,118 : Rem E
  125.    Set Zone 106,215,108 To 251,118 : Rem F
  126.    DEGRAD=1 : Radian 
  127.    F=0 : Fix 0
  128.    ZS=10
  129.    FFP#=0.0
  130.    MEMO#=0.0 : WERT$="" : ZAHL$="" : AUS$="" : Goto _CLEAR
  131. MAIN: Locate 13,3 : Print Repeat$(" ",35) : Locate 13,3
  132.       If AUS$="-0" Then AUS$="0"
  133.       If AUS$="" Then AUS$="0"
  134.       If F>0 and Val(AUS$)=0 Then If WERT$="" Then AUS$="0." : For X=1 To F : AUS$=AUS$+"0" : Next 
  135.       If ZS=1 Then RAUS$="%"+AUS$
  136.       If ZS=16 Then RAUS$="$"+AUS$
  137.       If ZS=10 Then RAUS$=" "+AUS$
  138.       Print Left$(RAUS$,1);" "; Extension_22_011A(AUS$,32,-1)
  139.       MZ=0
  140.       If MMZ<>0 Then MZ=MMZ : MMZ=0 : MARK=0 : Goto _GE2
  141.       IN$="" : Clear Key : While Mouse Key<>0 : Wend 
  142. _GET: IN$=Inkey$ : IN$=Upper$(IN$)
  143.       MZ=Instr("+-*/=",IN$) : If MZ>0 Then Goto _GE2
  144.       MZ=Instr(".0123456789ABCDEF",IN$) : If MZ>0 Then Goto AW
  145.       MZ=Mouse Zone : MK=Mouse Key
  146.       If MK<>1 or MZ=0 Then Goto _GET
  147.       On MZ Goto _OFF,_DEG,_RAD,_DEC,_HEX,_BIN
  148.       MZ=MZ-6
  149.       On MZ Goto _FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FIX,_FFP,_DEFFP
  150.       MZ=MZ-10
  151.       On MZ Goto _EXP,_LOG,_LN,_LOGB
  152.       MZ=MZ-4
  153.       On MZ Goto _SIN,_ASIN,_HSIN,_ARSIN
  154.       MZ=MZ-4
  155.       On MZ Goto _COS,_ACOS,_HCOS,_ARCOS
  156.       MZ=MZ-4
  157.       On MZ Goto _TAN,_ATAN,_HTAN,_ARTAN
  158.       MZ=MZ-4
  159.       On MZ Goto _COT,_ACOT,_HCOT,_ARCOT
  160.       MZ=MZ-4
  161.       On MZ Goto _SEC,_ASEC,_HSEC,_ARSEC
  162.       MZ=MZ-4
  163.       On MZ Goto _COSEC,_ACOSEC,_HCOSEC,_ARCOSEC
  164.       MZ=MZ-4
  165.       On MZ Goto _WURZEL,_XWURZEL,_HOCH,_PROZENT,_DELTAPROZENT,_GWPROZENT
  166.       MZ=MZ-6
  167.       On MZ Goto _ABS,_VORZEICHEN,_RUND,_1X,_PI,_E
  168.       MZ=MZ-6
  169.       On MZ Goto _MPLUS,_MMINUS,_M,_RM,_CM,_XM,_XY
  170.       MZ=MZ-7
  171.       On MZ Goto _MA,_MG,_MH
  172.       MZ=MZ-3
  173.       On MZ Goto _ROL,_ROR,_ROXL,_ROXR,_EQV
  174.       MZ=MZ-5
  175.       On MZ Goto _ASL,_ASR,_LSL,_LSR,_IMP
  176.       MZ=MZ-5
  177.       On MZ Goto _MOD,_AND,_OR,_XOR,_NOT
  178.       MZ=MZ-5
  179. _GE2: On MZ Goto _PLUS,_MINUS,_MAL,_DURCH,_GLEICH
  180.       MZ=MZ-5
  181.       On MZ Goto _CLEAR,_CE,_DEL
  182.       MZ=MZ-3
  183.       On MZ Goto AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW,AW
  184. _OFF: End 
  185. _DEG: DEGRAD=0 : Degree : Goto _CLEAR
  186. _RAD: DEGRAD=1 : Radian : Goto _CLEAR
  187. _DEC: If ZS=10 Then Goto MAIN0
  188.       ZAHL#=Val(RAUS$) : ZS=10 : Goto WERT_END
  189. _HEX: If ZS=16 Then Goto MAIN0
  190.       ZAHL#=Int(Val(RAUS$)) : ZS=16 : F=0 : Fix 0 : Goto WERT_END
  191. _BIN: If ZS=1 Then Goto MAIN0
  192.       ZAHL#=Int(Val(RAUS$)) : ZS=1 : F=0 : Fix 0 : Goto WERT_END
  193. _FIX: ZAHL#=Val(RAUS$) : F=MZ-1 : Fix F : Goto WERT_END
  194. _FFP: WERT#=Val(RAUS$) : W=Varptr(WERT#) : FFP=Leek(W) : BEF=F : F=0 : Fix 0 : ZAHL#=FFP : Goto WERT_END
  195. _DEFFP: Fix 7 : F=7 : ZAHL#=0.0 : RAUS=Val(RAUS$) : Loke Varptr(ZAHL#),RAUS : ZS=10 : Goto WERT_END
  196. _EXP: ZAHL#=Val(RAUS$) : ZAHL#=Exp(ZAHL#) : Goto WERT_END
  197. _LOG: If Sgn(Val(RAUS$))=-1 Then Goto _ERROR
  198.       ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#) : Goto WERT_END
  199. _LN: If Sgn(Val(RAUS$))=-1 Then Goto _ERROR
  200.      ZAHL#=Val(RAUS$) : ZAHL#=Ln(ZAHL#) : Goto WERT_END
  201. _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
  202.        Goto _ERROR
  203. _SIN: ZAHL#=Val(RAUS$) : ZAHL#=Sin(ZAHL#) : Goto WERT_END
  204. _ASIN: ZAHL#=Val(RAUS$)
  205.        If DEGRAD=0 Then ZAHL#=90.0-Acos(ZAHL#) : Goto WERT_END
  206.        ZAHL#=1.5708-Acos(ZAHL#) : Goto WERT_END
  207. _HSIN: ZAHL#=Val(RAUS$) : ZAHL#=Hsin(ZAHL#) : Goto WERT_END
  208. _ARSIN: ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#+Sqr(ZAHL#^2+1)) : Goto WERT_END
  209. _COS: ZAHL#=Val(RAUS$) : ZAHL#=Cos(ZAHL#) : Goto WERT_END
  210. _ACOS: ZAHL#=Val(RAUS$) : ZAHL#=Acos(ZAHL#) : Goto WERT_END
  211. _HCOS: ZAHL#=Val(RAUS$) : ZAHL#=Hcos(ZAHL#) : Goto WERT_END
  212. _ARCOS: ZAHL#=Val(RAUS$) : ZAHL#=Log(ZAHL#+Sqr(ZAHL#^2-1)) : Goto WERT_END
  213. _TAN: ZAHL#=Val(RAUS$) : ZAHL#=Tan(ZAHL#) : Goto WERT_END
  214. _ATAN: ZAHL#=Val(RAUS$) : ZAHL#=Atan(ZAHL#) : Goto WERT_END
  215. _HTAN: ZAHL#=Val(RAUS$) : ZAHL#=Htan(ZAHL#) : Goto WERT_END
  216. _ARTAN: ZAHL#=Val(RAUS$) : If ZAHL#=1.0 Then Goto _ERROR
  217.         ZAHL#=Log((1+X)/(1-X))/2 : Goto WERT_END
  218. _COT: ZAHL#=Val(RAUS$) : If Tan(ZAHL#)<>0.0 Then ZAHL#=1/Tan(ZAHL#) : Goto WERT_END
  219.       Goto _ERROR
  220. _ACOT: ZAHL#=Val(RAUS$) : ZAHL#=Pi#/2.0-Atan(ZAHL#) : Goto WERT_END
  221. _HCOT: ZAHL#=Val(RAUS$) : If Hsin(ZAHL#)<>0.0 Then ZAHL#=Hcos(ZAHL#)/Hsin(ZAHL#) : Goto WERT_END
  222.        Goto _ERROR
  223. _ARCOT: ZAHL#=Val(RAUS$) : If ZAHL#=1.0 Then Goto _ERROR
  224.         ZAHL#=Log((X+1)/(X-1))/2 : Goto WERT_END
  225. _SEC: ZAHL#=Val(RAUS$) : If Cos(ZAHL#)<>0.0 Then ZAHL#=1/Cos(ZAHL#) : Goto WERT_END
  226.       Goto _ERROR
  227. _ASEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
  228. _HSEC: ZAHL#=Val(RAUS$) : If Exp(ZAHL#)+Exp(ZAHL#*-1)=0.0 Then Goto _ERROR
  229.        ZAHL#=2/(Exp(ZAHL#)+Exp(ZAHL#*-1)) : Goto WERT_END
  230. _ARSEC: ZAHL#=Val(RAUS$) : If ZAHL#=0.0 Then Goto _ERROR
  231.         ZAHL#=Log((Sqr(ZAHL#*-1^2+1)+1)/ZAHL#) : Goto WERT_END
  232. _COSEC: ZAHL#=Val(RAUS$) : If Sin(ZAHL#)<>0.0 Then ZAHL#=1/Sin(ZAHL#) : Goto WERT_END
  233.         Goto _ERROR
  234. _ACOSEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(1/Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
  235. _HCOSEC: ZAHL#=Val(RAUS$) : ZAHL#=Atan(1/Sqr(ZAHL#^2.0-1.0))+(ZAHL#<0.0)*Pi# : Goto WERT_END
  236. _ARCOSEC: ZAHL#=Val(RAUS$) : If ZAHL#=0.0 Then Goto _ERROR
  237.           ZAHL#=Log((Sgn(ZAHL#)*Sqr(ZAHL#*-1^2+1)+1)/ZAHL#) : Goto WERT_END
  238. _WURZEL: ZAHL#=Val(RAUS$) : ZAHL#=Sqr(ZAHL#) : Goto WERT_END
  239. _XWURZEL: Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#^(1.0/WERT#) : Goto WERT_END
  240.           Bell : Gosub _TOMAIN : Goto _XWURZEL
  241. _HOCH: Gosub _GETWERT : ZAHL#=Val(ZAHL$) : S=Sgn(ZAHL#) : WERT#=Val(RAUS$) : ZAHL#=ZAHL#^WERT#
  242.        If S=-1 and Extension_22_032A(WERT#)=0 Then ZAHL#=ZAHL#*-1
  243.        Goto WERT_END
  244. _PROZENT: Gosub _GETWERT : ZAHL#=ZAHL#*WERT#/100.0 : Goto WERT_END
  245. _DELTAPROZENT: If ZAHL#=0.0 Then Bell : Goto WERT_END
  246.  Gosub _GETWERT : ZAHL#=WERT#*100.0/ZAHL# : Goto WERT_END
  247. _GWPROZENT: Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#*100.0/WERT# : Goto WERT_END
  248.             Bell : Gosub _TOMAIN : Goto _GWPROZENT
  249. _ABS: ZAHL#=Val(ZAHL$) : ZAHL#=Abs(ZAHL#) : ZAHL$=Str$(ZAHL#)-" " : Goto WERT_END
  250. _VORZEICHEN: WERT#=Val(RAUS$)*-1 : Goto MAIN1
  251. _RUND: Gosub _GETWERT : WERT=WERT# : WERT=Abs(WERT) : If WERT>7 Then WERT=7
  252.        Fix WERT : ZAHL$=Str$(ZAHL#) : ZAHL#=Val(ZAHL$) : Fix F : Goto WERT_END
  253. _1X: If Val(RAUS$)<>0.0 Then ZAHL#=1.0/Val(RAUS$) : Goto WERT_END
  254.      Bell : Goto MAIN
  255. _PI: WERT#=Pi# : Goto MAIN1
  256. _E: WERT#=E# : Goto MAIN1
  257. _MPLUS: Locate 11,3 : Print "M" : MEMO#=MEMO#+Val(RAUS$) : Goto MAIN
  258. _MMINUS: Locate 11,3 : Print "M" : MEMO#=MEMO#-Val(RAUS$) : Goto MAIN
  259. _M: Locate 11,3 : Print "M" : MEMO#=Val(RAUS$) : Goto MAIN
  260. _RM: Locate 11,3 : Print "M" : WERT$=Str$(MEMO#)-" " : Goto MAIN0
  261. _CM: Locate 11,3 : Print " " : MEMO#=0.0 : Goto MAIN
  262. _XM: Locate 11,3 : Print "M" : RMEMO#=Val(RAUS$) : WERT$=Str$(MEMO#)-" " : MEMO#=RMEMO# : Goto MAIN0
  263. _XY: RZAHL#=ZAHL# : ZAHL#=Val(RAUS$) : WERT#=RZAHL# : Goto MAIN1
  264. _MA: Gosub _GETWERT : ZAHL#=(ZAHL#+WERT#)/2.0 : Goto WERT_END
  265. _MG: Gosub _GETWERT : ZAHL#=Sqr(ZAHL#*WERT#) : Goto WERT_END
  266. _MH: Gosub _GETWERT : If ZAHL#+WERT#<>0.0 Then ZAHL#=(2*ZAHL#*WERT#)/(ZAHL#+WERT#) : Goto WERT_END
  267.      ZAHL#=0.0 : Goto WERT_END
  268. _ROL: WERT#=Val(RAUS$) : WERT#= Extension_22_03F0(1,WERT#) : Goto MAIN1
  269. _ROR: WERT#=Val(RAUS$) : WERT#= Extension_22_0400(1,WERT#) : Goto MAIN1
  270. _ROXL: WERT#=Val(RAUS$) : WERT#= Extension_22_0410(1,WERT#) : Goto MAIN1
  271. _ROXR: WERT#=Val(RAUS$) : WERT#= Extension_22_0420(1,WERT#) : Goto MAIN1
  272. _EQV: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
  273.       ZAHL= Extension_22_075A(ZAHL,WERT) : ZAHL#=ZAHL : Goto WERT_END
  274. _ASL: WERT#=Val(RAUS$) : WERT#= Extension_22_0450(1,WERT#) : Goto MAIN1
  275. _ASR: WERT#=Val(RAUS$) : WERT#= Extension_22_0460(1,WERT#) : Goto MAIN1
  276. _LSL: WERT#=Val(RAUS$) : WERT#= Extension_22_0430(1,WERT#) : Goto MAIN1
  277. _LSR: WERT#=Val(RAUS$) : WERT#= Extension_22_0440(1,WERT#) : Goto MAIN1
  278. _IMP: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
  279.       ZAHL= Extension_22_074A(ZAHL,WERT) : ZAHL#=ZAHL : Goto WERT_END
  280. _MOD: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
  281.       ZAHL=ZAHL mod WERT : ZAHL#=ZAHL : Goto WERT_END
  282. _AND: Gosub _GETWERT : ZAHL=Int(ZAHL#) : WERT=Int(WERT#)
  283.       ZAHL=ZAHL and WERT : ZAHL#=ZAHL : Goto WERT_END
  284. _OR: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
  285.      ZAHL=ZAHL or WERT : ZAHL#=ZAHL : Goto WERT_END
  286. _XOR: Gosub _GETWERT : ZAHL=ZAHL# : WERT=WERT#
  287.       ZAHL=ZAHL xor WERT : ZAHL#=ZAHL : Goto WERT_END
  288. _NOT: WERT#=Val(RAUS$) : ZAHL=WERT# : ZAHL= Not ZAHL : ZAHL#=ZAHL : Goto WERT_END
  289. _PLUS: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#+WERT# : Goto WERT_END
  290.        MMZ=MZ : Goto _GLEICH
  291. _MINUS: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#-WERT# : Goto WERT_END
  292.         MMZ=MZ : Goto _GLEICH
  293. _MAL: If MARK=0 Then Gosub _GETWERT : ZAHL#=ZAHL#*WERT# : Goto WERT_END
  294.       MMZ=MZ : Goto _GLEICH
  295. _DURCH: If MARK=0 Then Gosub _GETWERT : If WERT#<>0.0 Then ZAHL#=ZAHL#/WERT# : Goto WERT_END
  296.         If MARK=0 Then Bell : Gosub _TOMAIN : Goto _DURCH
  297.         MMZ=MZ : Goto _GLEICH
  298. _GLEICH: WERT#=Val(RAUS$) : If MARK=1 Then Return 
  299.          Goto MAIN
  300. _CLEAR: WERT$="" : ZAHL$="" : AUS$="" : Goto MAIN
  301. _CE: WERT$="" : AUS$="" : Goto MAIN
  302. _DEL: If Len(WERT$)>0 Then WERT$=Left$(WERT$,Len(WERT$)-1)
  303.       Goto MAIN0
  304. AW: If ZS=1 and Len(WERT$)>31 Then Goto MAIN0
  305.     If ZS=1 Then Goto _ADD
  306.     If ZS=16 and Len(WERT$)>7 Then Goto MAIN0
  307.     If ZS=16 Then Goto _ADD
  308.     If Len(WERT$)>31 Then Goto MAIN0
  309.     PP=Instr(WERT$,".")
  310.     If F>0 and PP=0 and Len(WERT$)>9 and MZ<>1 Then Goto MAIN0
  311.     If PP=0 Then Goto _ADD
  312.     NKS$=WERT$-Left$(WERT$,PP)
  313.     If Len(NKS$)=F Then Goto MAIN0
  314. _ADD: On MZ Goto _ADDP,_ADD0,_ADD1,_ADD2,_ADD3,_ADD4,_ADD5,_ADD6,_ADD7,_ADD8,_ADD9,_ADDA,_ADDB,_ADDC,_ADDD,_ADDE,_ADDF
  315. _ADD0: If Val(RAUS$)<>0 or Val("%"+WERT$)<>0 or Instr(WERT$,".") Then WERT$=WERT$+"0"
  316.        Goto MAIN0
  317. _ADD1: WERT$=WERT$+"1" : Goto MAIN0
  318. _ADD2: If ZS<>1 Then WERT$=WERT$+"2"
  319.        Goto MAIN0
  320. _ADD3: If ZS<>1 Then WERT$=WERT$+"3"
  321.        Goto MAIN0
  322. _ADD4: If ZS<>1 Then WERT$=WERT$+"4"
  323.        Goto MAIN0
  324. _ADD5: If ZS<>1 Then WERT$=WERT$+"5"
  325.        Goto MAIN0
  326. _ADD6: If ZS<>1 Then WERT$=WERT$+"6"
  327.        Goto MAIN0
  328. _ADD7: If ZS<>1 Then WERT$=WERT$+"7"
  329.        Goto MAIN0
  330. _ADD8: If ZS<>1 Then WERT$=WERT$+"8"
  331.        Goto MAIN0
  332. _ADD9: If ZS<>1 Then WERT$=WERT$+"9"
  333.        Goto MAIN0
  334. _ADDA: If ZS=16 Then WERT$=WERT$+"A"
  335.        Goto MAIN0
  336. _ADDB: If ZS=16 Then WERT$=WERT$+"B"
  337.        Goto MAIN0
  338. _ADDC: If ZS=16 Then WERT$=WERT$+"C"
  339.        Goto MAIN0
  340. _ADDD: If ZS=16 Then WERT$=WERT$+"D"
  341.        Goto MAIN0
  342. _ADDE: If ZS=16 Then WERT$=WERT$+"E"
  343.        Goto MAIN0
  344. _ADDF: If ZS=16 Then WERT$=WERT$+"F"
  345.        Goto MAIN0
  346. _ADDP: If ZS<>10 or F=0 Then Goto MAIN
  347.        If Instr(WERT$,".") Then Goto MAIN0
  348.        If ZS=10 and F<>0 Then WERT$=WERT$+"."
  349.        If Left$(WERT$,1)="." Then WERT$="0"+WERT$
  350.        Goto MAIN0
  351. _ERROR: Bell : ZAHL#=0.0 : Goto WERT_END
  352. MAIN1: If ZS=1 Then WERT$=Bin$(WERT#)-"%"
  353.        If ZS=10 Then WERT$=Str$(WERT#)-" "
  354.        If ZS=16 Then WERT$=Hex$(WERT#)-"$"
  355. MAIN0: AUS$=WERT$ : Goto MAIN
  356. WERT_END: MARK=0
  357.           If ZS=1 Then ZAHL$=Bin$(ZAHL#)-"%"
  358.           If ZS=10 Then ZAHL$=Str$(ZAHL#)-" "
  359.           If ZS=16 Then ZAHL$=Hex$(ZAHL#)-"$"
  360.           WERT$="" : AUS$=ZAHL$ : Goto MAIN
  361. _GETWERT: MARK=1 : ZAHL$=WERT$ : WERT$="" : ZAHL#=Val(RAUS$) : Goto MAIN
  362. _TOMAIN: WERT$=ZAHL$
  363.          If ZS=1 Then RAUS$=Bin$(Val(ZAHL$))
  364.          If ZS=10 Then RAUS$=Str$(Val(ZAHL$))
  365.          If ZS=16 Then RAUS$=Hex$(Val(ZAHL$))
  366.          Return