home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Carousel Volume 2 #1
/
carousel.iso
/
comdore
/
64misc
/
clcltr.prg
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1988-12-29
|
7KB
|
173 lines
10 REM C-64 CALCULATOR
12 PRINT"[147]":GOSUB206:GOSUB152:GOSUB220
14 IFPEEK(53247)<>88THEN290
16 GOSUB228
18 Z=0
20 IFBA<>10THENS$(Z)=H$:Z=Z+3:GOTO24
22 S$(Z)=D$:Z=Z+3
24 GETA$:IFA$=""THEN24:REM SCAN KEYS
26 IFF6=0THENPOKES+1,80+4*F7*VAL(A$):POKES,177:POKES+4,33:FORT=1TO20:NEXT:POKES+4,32
28 IFBA<>10THEN258
30 FORI=1TO15:IFA$=MID$(N$,I,1)THEN36
32 NEXT
34 GOTO62:REM A$ NOT NUMERIC
36 REM ADD TO D$
38 IF(A$="-"ORA$="+")THEN42
40 GOTO44
42 IF(F3<>0ANDRIGHT$(D$,1)<>"E")ORF5=1THEN62
44 IFD$=" 0"ORF4=1THEND$=" ":F1=0:F2=0:F3=0:F4=0:M=0
46 F3=1
48 IFA$="_"THEND$=LEFT$(D$,LEN(D$)-1):F1=0:F2=0:GOSUB228:GOTO24
50 IFA$="."ANDF1=1THEN24
52 IFA$="E"ANDF2=1THEN24
54 IFA$="."THENF1=1
56 IFA$="E"THENF2=1:F1=1
58 IFLEN(D$)<15THEND$=D$+A$
60 GOSUB228:GOTO24
62 M=0:F1=0:IF BA<>10THENS$(Z)=H$:Z=Z+1:GOTO66
64 S$(Z)=D$:Z=Z+1
66 DD=0:FORI=1TOLEN(OP$):IFA$=MID$(OP$,I,1)THEN76
68 NEXTI:IFA$="[133]"THENZ=Z-1:GOTO270
70 IFA$="H"THENZ=Z-1:GOTO302
72 IFA$="[135]"THENF6=-(F6=0):IFF6=1THENF7=-(F7=0)
74 GOTO24
76 F4=1:F5=1:D=VAL(D$):D$=STR$(D)
78 ONIGOTO102,100,100,100,100,100,100,114,80,82,84,84,116,118,134,136,138
80 D$=" 0":F3=0:F5=0:OP=O:A=0:GOSUB228:S$(Z)="CLEAR DISPLAY":Z=Z+1:GOTO24
82 FORI=1TO8:R(I)=0:NEXT:GOSUB220:FORI=1TOZ:S$(I)="":NEXT:Z=1:GOTO24
84 IFA$="S"THENPRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]SAVE REGISTER?":GOTO88
86 PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]RECALL?"
88 GETB$:IFB$=""THEN88
90 IFB$=CHR$(13)THEN80
92 J=VAL(B$):IFJ>=1ANDJ<=8THEN96
94 GOTO84
96 IFA$="R"THENS$(Z)="RECALL #"+B$:Z=Z+1:D$=STR$(R(J)):GOSUB228:GOTO24
98 R(J)=VAL(D$):S$(Z)="SAVE TO #"+B$:Z=Z+1:GOSUB228:GOSUB220:GOTO24
100 GOSUB120:OP=I:A=VAL(D$):S$(Z)=A$:Z=Z+1:GOSUB228:GOTO24
102 S$(Z)="= ":Z=Z+1:ONOPGOTO24,104,106,108,108,110,112
104 D$=STR$(A+VAL(D$)):GOSUB228:A=0:OP=0:GOTO20
106 D$=STR$(A-VAL(D$)):GOSUB228:A=0:OP=0:GOTO20
108 D$=STR$(A*VAL(D$)):GOSUB228:A=0:OP=0:GOTO20
110 D$=STR$(A/VAL(D$)):GOSUB228:A=0:OP=0:GOTO20
112 D$=STR$(A^VAL(D$)):GOSUB228:A=0:OP=0:GOTO20
114 D$=STR$(ABS(D)^.5):S$(Z)="SQUARE ROOT ":Z=Z+1:GOSUB228:GOTO20
116 D$=STR$(LOG(ABS(D))):S$(Z)="LN ":Z=Z+1:GOSUB228:GOTO20
118 D$=STR$(LOG(ABS(D))/LOG(10)):S$(Z)="LOG ":Z=Z+1:GOSUB228:GOTO20
120 ONOPGOTO24,122,124,126,126,128,130,132,132,132,132,132,132,132
122 D$=STR$(A+VAL(D$)):F3=0:F5=0:RETURN
124 D$=STR$(A-VAL(D$)):F3=0:F5=0:RETURN
126 D$=STR$(A*VAL(D$)):F3=0:F5=0:RETURN
128 D$=STR$(A/VAL(D$)):F3=0:F5=0:RETURN
130 D$=STR$(A^VAL(D$)):F3=0:F5=0:RETURN
132 D$=STR$(VAL(D$)):F3=0:F5=0:RETURN
134 BA=16:BA$=" ":GOTO146
136 BA=10:BA$=" ":GOTO146
138 PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]BASE";
140 INPUTBA$:BA=VAL(MID$(BA$,49,2)):IFBA<2ORBA>73THEN138
142 BA$=" ":IFBA=10ORBA=16ORBA=8ORBA=2THEN146
144 BA$="<"+RIGHT$(STR$(BA),LEN(STR$(BA))-1)+">":IFBA<10THENBA$=BA$+" "
146 PRINT"[194] "BA$
148 S$(Z)="BASE"+STR$(BA):Z=Z+1
150 GOSUB228:GOSUB220:A$="=":GOTO102
152 PRINT"[147]";:REM PRINT SCREEN
154 PRINT" [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
156 PRINT"[213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201] [1][194] [194]";
158 PRINT"[194] C-64 CALCULATOR [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
160 PRINT"[194] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
162 PRINT"[194][213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201][194] [2][194] [194]";
164 PRINT"[194][194] [194][194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
166 PRINT"[194][202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203][194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
168 PRINT"[194] [194] [3][194] [194]";
170 PRINT"[194] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
172 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
174 PRINT"[194] [194]S[194][194]R[194][194]C[194][194][206][194] [194] [4][194] [194]";
176 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
178 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
180 PRINT"[194] [194]7[194][194]8[194][194]9[194][194][214][194] [194] [5][194] [194]";
182 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
184 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
186 PRINT"[194] [194]4[194][194]5[194][194]6[194][194][195][194] [194] [6][194] [194]";
188 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
190 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
192 PRINT"[194] [194]1[194][194]2[194][194]3[194][194][219][194] [194] [7][194] [194]";
194 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
196 PRINT"[194] [213][195][195][195][201] [213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
198 PRINT"[194] [194] 0 [194] [194][209][194][194]=[194] [194] [8][194] [194]";
200 PRINT"[194] [202][195][195][195][203] [202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
202 PRINT"[202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
204 RETURN
206 REM INITIALIZE
208 E$=" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]":DIMS$(1000)
210 N$="0123456789.E+-_":OP$="=+-X*/^@"+CHR$(13)+"[195]SR[204]L[200][196][194]":D$=" 0":A$="":BA=10
212 NN$=".":FORI=0TO72:NN$=NN$+CHR$(48+I-(I>9)*7):NEXT
214 S=54272:FORL=STOS+24:POKEL,0:NEXT:POKES+5,9:POKES+6,0:POKES+24,15
216 POKE53280,15:POKE53281,15
218 RETURN
220 IFBA<>10THEN224:REM PRINT MEMORY REGISTERS
222 PRINT"";:FORI=1TO8:PRINT""E$;R(I);"";SPC(15-LEN(STR$(R(I)))):NEXT:RETURN
224 PRINT"";:FORI=1TO8:D=R(I):GOSUB234
226 PRINT""E$;H$;"";SPC(16-LEN(H$)):NEXT:PRINT"";:RETURN
228 REM PRINT DISPLAY
230 IFBA=10THENPRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"D$;:RETURN
232 D=VAL(D$):GOSUB234:PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"H$;:RETURN
234 REM CONVERT D$ TO BASE BA (H$)
236 B=1:FORK=1TO13:B=B*BA:IFB>DTHEN240
238 NEXT:H$="***************":RETURN
240 H$=" ":IFK>1THENFORL=1TOK-1:D=D/BA:NEXT
242 IFBA=16THENH$="$"
244 IFBA=2THENH$="%"
246 IFBA=8THENH$="@"
248 IFD<0THENH$=H$+"-":D=ABS(D)
250 FORL=1TO13*(-(BA<11)-(BA>10)*2/LOG(BA)):D%=D:H$=H$+CHR$(48+D%-(D%>9)*(7))
252 D=BA*(D-D%):IFD=0ANDL>K-1THENRETURN
254 IFL=KTHENH$=H$+"."
256 NEXT:RETURN
258 REM INPUT ROUTINE FOR BA<>10
260 FORI=1TOBA+1:IFA$=MID$(NN$,I,1)THEN264
262 NEXT:GOTO62
264 IFI=1THENF1=1:GOTO24
266 IFF1=0THENDD=BA*DD+I-2:D$=STR$(DD):GOSUB228:GOTO24
268 M=M+1:DD=DD+(I-2)/BA^M:D$=STR$(DD):GOSUB228:GOTO24
270 J=22:PRINT"[147]"TAB(12)"PRESS <F3> TO QUIT"
272 PRINTTAB(18)"<CURSOR DOWN> TO SCAN"
274 PRINTTAB(18)"<F7> TO PRINT";
276 FORI=1TO22:PRINTS$(I)
278 NEXT
280 GETA$:IFA$=""THEN280
282 IFA$=""THENJ=J+1:PRINTS$(J):FORT=1TO50:NEXT:GOTO280
284 IFA$="[136]"THENOPEN4,4:FORI=1TOZ:PRINT#4,S$(I):NEXT:PRINT#4,:CLOSE4:GOTO280
286 IFA$="H"THEN302
288 GOSUB152:GOSUB228:GOSUB220:GOTO24
290 T$="C-64 CALCULATOR BY DICK WEISIGER HIT H FOR HELP":POKE53247,88
292 D$=" "
294 FORI=1TOLEN(T$):D$=RIGHT$(D$+MID$(T$,I,1),15)
296 PRINT""D$;:FORT=1TO50:NEXTT,I
298 GETA$:IFA$=""THEN298
300 IFA$<>"H"THEND$=" 0":GOSUB228:GOTO26
302 PRINT"[147] C-64 CALCULATOR COMMANDS"
304 PRINT"+ - * / ^ = LEGAL OPERATORS"
306 PRINT" <RTN> CLEARS DISPLAY"
308 PRINT"<SHIFT> <C> CLEARS REGISTERS"
310 PRINT" <_> CLEARS LAST CHAR"
312 PRINT" <S> SAVES TO REGISTER"
314 PRINT" <R> RECALLS FROM REGISTER"
316 PRINT" <@> SQUARE ROOT"
318 PRINT" <L> LOG BASE 10"
320 PRINT"<SHIFT> <L> NATURAL LOG"
322 PRINT" <H> DISPLAYS HELP SCREEN"
324 PRINT"<SHIFT> <H> SETS CALCULATOR TO HEX"
326 PRINT"<SHIFT> <D> SETS CALCULATOR TO DEC"
328 PRINT"<SHIFT> <B> SETS TO ANY OTHER BASE"
330 PRINT" <F1> REVIEWS CALCULATION"
332 PRINTTAB(16)"(INCLUDES PRINT OPTION)"
334 PRINT"[145] <F5> DISABLES/ENABLES SOUND"
336 PRINT"NOTE: BASES > 35 UTILIZE GRAPHIC CHARS"
338 PRINT" HIT <F8> FOR LIST OF CHARS USED"
340 PRINT" <PRESS ANY KEY>"
342 GETA$:IFA$=""THEN342
344 IFA$="[140]"THEN348
346 D$=" 0":GOSUB152:GOSUB228:GOSUB220:GOTO24
348 PRINT"[147]";:FORI=1TO24
350 PRINTI;MID$(NN$,I+2,1)TAB(15)I+24;MID$(NN$,I+26,1)TAB(30)I+48;MID$(NN$,I+50,1)
352 NEXT:GOTO342