home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
genie-commodore-file-library
/
C64Software
/
HAL.ARC
/
HALCULATOR
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2019-04-13
|
7KB
|
183 lines
10 REM **** CALCULATOR ROUTINES ****
15 DIMS$(250):PRINT"[147]":GOSUB505:GOSUB370:GOSUB540
20 IFPEEK(53247)<>88THEN715
25 GOSUB560
30 Z=0
35 IFBA<>10THENS$(Z)=H$:Z=Z+3:GOTO45
40 S$(Z)=D$:Z=Z+3
45 GETA$:IFA$=""THEN45:REM SCAN KEYS
50 IFA$="H"THEN880
55 IFF6=0THENPOKES+1,80+4*F7*VAL(A$):POKES,177:POKES+4,33:FORT=1TO20:NEXT:POKES+4,32
60 IFBA<>10THEN635
65 FORI=1TO15:IFA$=MID$(N$,I,1)THEN80
70 NEXT
75 GOTO145:REM A$ NOT NUMERIC
80 REM ADD TO D$
85 IF(A$="-"ORA$="+")THEN95
90 GOTO100
95 IF(F3<>0ANDRIGHT$(D$,1)<>"E")ORF5=1THEN145
100 IFD$=" 0"ORF4=1THEND$=" ":F1=0:F2=0:F3=0:F4=0:M=0
105 F3=1
110 IFA$="_"THEND$=LEFT$(D$,LEN(D$)-1):F1=0:F2=0:GOSUB560:GOTO45
115 IFA$="."ANDF1=1THEN45
120 IFA$="E"ANDF2=1THEN45
125 IFA$="."THENF1=1
130 IFA$="E"THENF2=1:F1=1
135 IFLEN(D$)<15THEND$=D$+A$
140 GOSUB560:GOTO45
145 M=0:F1=0:IF BA<>10THENS$(Z)=H$:Z=Z+1:GOTO155
150 S$(Z)=D$:Z=Z+1
155 DD=0:FORI=1TOLEN(OP$):IFA$=MID$(OP$,I,1)THEN180
160 NEXTI:IFA$="[133]"THENZ=Z-1:GOTO665
165 IFA$="C"THENZ=Z-1:GOTO745
170 IFA$="[135]"THENF6=-(F6=0):IFF6=1THENF7=-(F7=0)
175 GOTO45
180 F4=1:F5=1:D=VAL(D$):D$=STR$(D)
185 ONIGOTO245,240,240,240,240,240,240,275,190,195,200,200,280,285,325,330,335
190 D$=" 0":F3=0:F5=0:OP=O:A=0:GOSUB560:S$(Z)="CLEAR DISPLAY":Z=Z+1:GOTO45
195 FORI=1TO8:R(I)=0:NEXT:GOSUB540:FORI=1TOZ:S$(I)="":NEXT:Z=1:GOTO45
200 IFA$="S"THENPRINT"SAVE TO REG.#?":GOTO210
205 PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]RECALL REG.#?"
210 GETB$:IFB$=""THEN210
215 IFB$=CHR$(13)THEN190
220 J=VAL(B$):IFJ>=1ANDJ<=8THEN230
225 GOTO200
230 IFA$="R"THENS$(Z)="RECALL #"+B$:Z=Z+1:D$=STR$(R(J)):GOSUB560:GOTO45
235 R(J)=VAL(D$):S$(Z)="SAVE TO #"+B$:Z=Z+1:GOSUB560:GOSUB540:GOTO45
240 GOSUB290:OP=I:A=VAL(D$):S$(Z)=A$:Z=Z+1:GOSUB560:GOTO45
245 S$(Z)="= ":Z=Z+1:ONOPGOTO45,250,255,260,260,265,270
250 D$=STR$(A+VAL(D$)):GOSUB560:A=0:OP=0:GOTO35
255 D$=STR$(A-VAL(D$)):GOSUB560:A=0:OP=0:GOTO35
260 D$=STR$(A*VAL(D$)):GOSUB560:A=0:OP=0:GOTO35
265 D$=STR$(A/VAL(D$)):GOSUB560:A=0:OP=0:GOTO35
270 D$=STR$(A^VAL(D$)):GOSUB560:A=0:OP=0:GOTO35
275 D$=STR$(ABS(D)^.5):S$(Z)="SQUARE ROOT ":Z=Z+1:GOSUB560:GOTO35
280 D$=STR$(LOG(ABS(D))):S$(Z)="LN ":Z=Z+1:GOSUB560:GOTO35
285 D$=STR$(LOG(ABS(D))/LOG(10)):S$(Z)="LOG ":Z=Z+1:GOSUB560:GOTO35
290 ONOPGOTO45,295,300,305,305,310,315,320,320,320,320,320,320,320
295 D$=STR$(A+VAL(D$)):F3=0:F5=0:RETURN
300 D$=STR$(A-VAL(D$)):F3=0:F5=0:RETURN
305 D$=STR$(A*VAL(D$)):F3=0:F5=0:RETURN
310 D$=STR$(A/VAL(D$)):F3=0:F5=0:RETURN
315 D$=STR$(A^VAL(D$)):F3=0:F5=0:RETURN
320 D$=STR$(VAL(D$)):F3=0:F5=0:RETURN
325 BA=16:BA$=" ":GOTO355
330 BA=10:BA$=" ":GOTO355
335 PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]BASE";
340 INPUTBA$:BA=VAL(MID$(BA$,49,2)):IFBA<2ORBA>73THEN335
345 BA$=" ":IFBA=10ORBA=16ORBA=8ORBA=2THEN355
350 BA$="<"+RIGHT$(STR$(BA),LEN(STR$(BA))-1)+">":IFBA<10THENBA$=BA$+" "
355 PRINT"[194] "BA$
360 S$(Z)="BASE"+STR$(BA):Z=Z+1
365 GOSUB560:GOSUB540:A$="=":GOTO245
370 PRINT"[147]";:REM PRINT SCREEN
375 PRINT" [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
380 PRINT"[155][213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201] [[158]1][194] [194]";
385 PRINT"[155][194] [154] HALCULATOR [146][155] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
390 PRINT"[155][194] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
395 PRINT"[155][194][213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201][155][194] [[158]2][194] [194]";
400 PRINT"[155][194][194] [194][155][194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
405 PRINT"[155][194][202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203][155][194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
410 PRINT"[155][194] [194] [[158]3][194] [194]";
415 PRINT"[155][194] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
420 PRINT"[155][194] [152][213][195][201][213][195][201][213][195][201][213][195][201] [155] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
425 PRINT"[155][194] [152] [194][155]S[152][194][194][155]R[152][194][194][155]C[152][194][194][155][206][152][194][155] [194] [[158]4][194] [194]";
430 PRINT"[155][194] [152][202][195][203][202][195][203][202][195][203][202][195][203] [155] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
435 PRINT"[155][194] [152][213][195][201][213][195][201][213][195][201][213][195][201] [155] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
440 PRINT"[155][194] [152] [194][155]7[152][194][194][155]8[152][194][194][155]9[152][194][194][155]*[152][194][155] [194] [[158]5][194] [194]";
445 PRINT"[155][194] [152][202][195][203][202][195][203][202][195][203][202][195][203] [155] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
450 PRINT"[155][194] [152][213][195][201][213][195][201][213][195][201][213][195][201] [155] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
455 PRINT"[155][194] [152][194][155]4[152][194][194][155]5[152][194][194][155]6[152][194][194][155][195][152][194][155] [194] [[158]6][194] [194]";
460 PRINT"[155][194] [152][202][195][203][202][195][203][202][195][203][202][195][203] [155] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
465 PRINT"[155][194] [152][213][195][201][213][195][201][213][195][201][213][195][201] [155] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
470 PRINT"[155][194] [152][194][155]1[152][194][194][155]2[152][194][194][155]3[152][194][194][155][219][152][194][155] [194] [[158]7][194] [194]";
475 PRINT"[155][194] [152][202][195][203][202][195][203][202][195][203][202][195][203] [155] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
480 PRINT"[155][194] [152][213][195][195][195][201] [213][195][201][213][195][201] [155] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]";
485 PRINT"[155][194] [152][194][155] 0 [152][194] [194][155].[152][194][194][155]=[152][194][155] [194] [[158]8][194] [194]";
490 PRINT"[155][194] [152][202][195][195][195][203] [202][195][203][202][195][203] [155] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]";
495 PRINT"[155][202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203][158]'H[158]'=H.A.L. [158]'C[158]'=MENU";
500 RETURN
505 REM INITIALIZE
510 E$=" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"
515 N$="0123456789.E+-_":OP$="=+-X*/^@"+CHR$(13)+"[195]SR[204]L[200][196][194]":D$=" 0":A$="":BA=10
520 NN$=".":FORI=0TO72:NN$=NN$+CHR$(48+I-(I>9)*7):NEXT
525 S=54272:FORL=STOS+24:POKEL,0:NEXT:POKES+5,9:POKES+6,0:POKES+24,15
530 POKE53280,0:POKE53281,0
535 RETURN
540 IFBA<>10THEN550:REM PRINT MEMORY REGISTERS
545 PRINT"";:FORI=1TO8:PRINT""E$;R(I);"";SPC(15-LEN(STR$(R(I)))):NEXT:RETURN
550 PRINT"";:FORI=1TO8:D=R(I):GOSUB575
555 PRINT""E$;H$;"";SPC(16-LEN(H$)):NEXT:PRINT"";:RETURN
560 REM PRINT DISPLAY
565 IFBA=10THENPRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"D$;:RETURN
570 D=VAL(D$):GOSUB575:PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"H$;:RETURN
575 REM CONVERT D$ TO BASE BA (H$)
580 B=1:FORK=1TO13:B=B*BA:IFB>DTHEN590
585 NEXT:H$="***************":RETURN
590 H$=" ":IFK>1THENFORL=1TOK-1:D=D/BA:NEXT
595 IFBA=16THENH$="$"
600 IFBA=2THENH$="%"
605 IFBA=8THENH$="@"
610 IFD<0THENH$=H$+"-":D=ABS(D)
615 FORL=1TO13*(-(BA<11)-(BA>10)*2/LOG(BA)):D%=D:H$=H$+CHR$(48+D%-(D%>9)*(7))
620 D=BA*(D-D%):IFD=0ANDL>K-1THENRETURN
625 IFL=KTHENH$=H$+"."
630 NEXT:RETURN
635 REM INPUT ROUTINE FOR BA<>10
640 FORI=1TOBA+1:IFA$=MID$(NN$,I,1)THEN650
645 NEXT:GOTO145
650 IFI=1THENF1=1:GOTO45
655 IFF1=0THENDD=BA*DD+I-2:D$=STR$(DD):GOSUB560:GOTO45
660 M=M+1:DD=DD+(I-2)/BA^M:D$=STR$(DD):GOSUB560:GOTO45
665 J=22:PRINT"[147]"TAB(12)"PRESS <F3> TO QUIT"
670 PRINTTAB(18)"<CURSOR DOWN> TO SCAN"
675 PRINTTAB(18)"<F7> TO PRINT";
680 FORI=1TO22:PRINTS$(I)
685 NEXT
690 GETA$:IFA$=""THEN690
695 IFA$=""THENJ=J+1:PRINTS$(J):FORT=1TO50:NEXT:GOTO690
700 IFA$="[136]"THENOPEN4,4:FORI=1TOZ:PRINT#4,S$(I):NEXT:PRINT#4,:CLOSE4:GOTO690
705 IFA$="H"THEN745
710 GOSUB370:GOSUB560:GOSUB540:GOTO45
715 T$="C[158] FOR COMMANDS":POKE53247,88
720 D$=" "
725 FORI=1TOLEN(T$):D$=RIGHT$(D$+MID$(T$,I,1),15)
730 PRINT""D$;:FORT=1TO50:NEXTT,I
735 GETA$:IFA$=""THEN735
740 IFA$<>"C"THEND$=" 0":GOSUB560:GOTO55
745 PRINT"[147][154] HALCULATOR COMMANDS "
750 PRINT"+ - * / ^ = LEGAL OPERATORS"
755 PRINT" 'RETURN' CLEARS DISPLAY"
757 PRINT" 'C' DISPLAYS COMMANDS NENU"
760 PRINT"<SHIFT> 'C' CLEARS REGISTERS"
765 PRINT" '_' CLEARS LAST CHAR"
770 PRINT" 'S' SAVES TO REGISTER"
775 PRINT" 'R' RECALLS FROM REGISTER"
780 PRINT" '@' SQUARE ROOT"
785 PRINT" 'L' LOG BASE 10"
790 PRINT"<SHIFT> 'L' NATURAL LOG"
795 PRINT" 'H' RETURNS TO [154]H.A.L."
800 PRINT"<SHIFT> 'H' SETS CALCULATOR TO HEX"
805 PRINT"<SHIFT> 'D' SETS CALCULATOR TO DEC"
810 PRINT"<SHIFT> 'B' SETS TO ANY OTHER BASE"
815 PRINT" <F1> REVIEWS CALCULATION"
820 PRINTTAB(16)"(INCLUDES PRINT OPTION)"
825 PRINT"[145] <F5> DISABLES/ENABLES SOUND"
835 PRINT"NOTE: BASES > 35 UTILIZE GRAPHIC CHARS"
840 PRINT" <F8> LIST OF CHARS USED"
845 PRINT"[158] (PRESS ANY KEY)"
850 GETA$:IFA$=""THEN850
855 IFA$="[140]"THEN865
860 D$=" 0":GOSUB370:GOSUB560:GOSUB540:GOTO45
865 PRINT"[147]";:FORI=1TO24
870 PRINTI;MID$(NN$,I+2,1)TAB(15)I+24;MID$(NN$,I+26,1)TAB(30)I+48;MID$(NN$,I+50,1)
875 NEXT:GOTO850
880 REM*** RETURN TO H.A.L. ROUTINE ***
885 POKE53280,0:POKE53281,0:PRINT"[147][144]"
890 H$="H.A.L."
895 POKE198,4
900 PRINT"[147]LOAD"CHR$(34)H$;
905 PRINT CHR$(34)",8";
910 POKE631,13:POKE632,82:POKE633,117:POKE634,13
915 END