9 ! R[KNARE.800, Guido Petz 1982, {ndrat av Stig Rosenlund 1983. 10 NO EXTEND : INTEGER 11 ; CHR$(12) : ; TAB(15) 'R[KNARE' 12 ; : ; 'Kontrollera att "caps lock" lyser !' 30 IF PEEK(32768)=42 AND PEEK(35656)=177 AND PEEK(36626)=201 \=32768 ELSE 65000 40 DEF FN\(I,M,K)=CALL(\+2597,I)+CALL(\+2587,M)+CALL(\+2577,K) 50 DEF FNU(R,I,K,U)=FN\(I,M,K)+CALL(\+3536+R+R+R,U) 60 DEF FNM(R,I,M,K)=FN\(I,M,K)+CALL(\+3536+R+R+R,U) 70 DEF FNL(I,K)=FNM(22,I,0,K) 80 DEF FNI(R,I)=FNM(R,I,M,K) 90 DEF FN[(I,U)=CALL(\+2597,I)+CALL(\+3584,U) 100 DEF FNP(I,M,K)=FN\(I,M,K)+CALL(\+3569) 110 DEF FNQ(I,M,K)=FN\(I,M,K)+CALL(\+3572) 120 N=PEEK(\+3755)+256*PEEK(\+3756) : IF N=0 A0=3867+\ : GOTO 140 130 A0=PEEK(\+3770)+256*PEEK(\+3771) : ; : ; "Ny precision (J/N) ?"; : GET F$ : ; F$ : IF F$<>"J" GOTO 150 140 F$="J" : ; "Precision (decimal precision=2.4*n) "; : INPUT I : POKE \+3755,I,SWAP%(I) : A0=A0-N+I : N=I : POKE \+3770,A0,SWAP%(A0) 150 F=(PEEK2(65292)-A0-1)/(N+3) : H=F-1 : IF F<13 OR N<4 GOTO 140 ELSE IF F$<>"J" 170 160 S=FNI(18,6)+FNI(42,6)+FNL(7,6)+FNI(62,6)+FNI(24,6)+FNI(56,7)+FN[(5,6)+FNP(7,7,5) 170 N1=2.4*N : POKE \+1675,F,SWAP%(F) : DIM B$=N1+15 : GOTO 420 180 GET F$ : ; F$; : S=ASCII(F$) : IF S>57 OR S<43 OR S=44 OR S=47 RETURN 190 GOSUB 700 : INPUT LINE B$ : B$=F$+LEFT$(B$,LEN(B$)-2) 200 C=0 : A=2 : F$=MID$(B$,1,1) : G=-(F$='-') : IF F$='+' OR F$=' ' OR G=1 F$=MID$(B$,2,1) : A=3 210 IF F$='.' C=1 : F$='0' 220 ON ERROR GOTO 300 : S=FN[(3,10)+FN[(2,VAL(F$)) : B=0 : E=0 230 IF A>LEN(B$) 280 ELSE F$=MID$(B$,A,1) : A=A+1 240 IF F$='E' OR F$='e' 270 250 IF F$='.' B=0 : C=1 : GOTO 230 260 S=FN[(4,VAL(F$))+FNP(2,2,3)+FNM(9,2,2,4) : B=B+1 : GOTO 230 270 E=VAL(RIGHT$(B$,A)) 280 E=E-C*B : S=FNU(21,4,3,ABS(E)) : IF E<0 S=FNQ(8,2,4) ELSE S=FNP(8,2,4) 290 IF G S=CALL(\+3608) 300 ON ERROR GOTO : RETURN 310 A=A0+8*N+24 : IF PEEK(A-3)<128 ; CHR$(7) '0.'+STRING$(N1,48) : RETURN 320 E=INT(.30103*(1.-(2 AND PEEK(A)))*(PEEK(A-2)+256.*PEEK(A-1)))-1 : S=FN[(2,10)+FNU(21,4,2,ABS(E)) 330 IF E>0 S=FNQ(3,8,4) ELSE S=FNP(3,8,4) 340 S=FNI(18,2)+FNU(46,2,0,8*N-1)+FNI(19,2)+FNP(3,3,2) : A=A0+3*N+9 345 B=2^PEEK(A-2)*PEEK(A-3)/256 : IF (PEEK(A) AND 1)=1 B$="-" ELSE B$=" " 350 B$=B$+NUM$(B)+"." : S=CALL(\+3638)+FN[(4,10000) 360 IF LEN(B$)=4 B$=LEFT$(B$,2)+"."+MID$(B$,3,1) : E=E+1 370 FOR B=1 TO (5+N1-LEN(B$))/4 380 S=FNP(3,3,4) AND 0 : IF (2 AND PEEK(A))=0 S=(64*PEEK(A-3)+PEEK(A-4)/4)/2^(14-PEEK(A-2)) 390 F$="000"+NUM$(S) : B$=B$+RIGHT$(F$,LEN(F$)-3) : S=CALL(\+3638) : NEXT B 400 B$=LEFT$(B$,N1+2)+"E"+NUM$(E) 410 ON ERROR GOTO : ; CHR$(7) B$ : RETURN 420 IF N1>=36 W=0 ELSE W=(36-N1)/2-1 430 ; CHR$(12) TAB(14) 'RPN-KALKYLATOR!' 440 ; TAB(4) 'Nogrannheten {r ungef{r' N1 ' siffror!' : ; TAB(13) 'Register 12 -' F-2 : ; TAB(13) 'STORA BOKST[VER!' 450 ; "Q+:W-:R*:T/:Ychs:Usgn:Iabs:Oint:Pfrac" 460 ; ']inv:^x*x:Asqr:Sexp:Dln:Frutin:Gsin' 470 ; "Hasin:Jcos:Kacos:Ltan:\atn:[min:'lastx" 480 ; 'Znormalf:Xrdn:Clog:Vrcl:Bsto:Ny**x:Mx*2' 490 ; ",x/2:' 'ent:F6 70 680 S=FNL(I,8) : GOTO 500 690 S=FNL(F,8)+FNI(R1,8) : GOTO 500 700 S=FNL(11,10)+FNL(10,9)+FNL(9,8) : RETURN 710 END 65000 ; 'Du m}ste k|ra PROG1 f|rst f|r att' 65010 ; 'ladda in assembler-rutinerna.'