"PC-CALC 3" for Sharp PC-1500
BASIC program - 6792 bytes.

CLOAD "PC-CALC 3"
RUN

----- BASIC program -----------------------------------------
1 "PC-CALC 3"
100 " "LOCK :WAIT 0:CSIZE 1:COLOR 0
110 ON ERROR GOTO "ERR":GOSUB "LO":IF R$="O"THEN 130
120 CLS :LF 1:GOSUB "CO":CLS :LF 1
130 WAIT 0:CSIZE 1:A$="14367F3614":B$="081C3E003E1C08":GOSUB "DA":CLS :LF 1:IF N>1AND P$="O"GOTO 170
140 GOSUB "CL":CLS :LF 1:GOTO 170
150 IF N>1AND P$="O"PRINT "MEME MODELE?":GOSUB "K":IF R$="N"LET M=0:O=0:N=1:GOTO 140
160 GOSUB "REP"
170 GOSUB "DS":CLS :LF 1:GOSUB "REC":CLS :PRINT "A NOUVEAU?":GOSUB "K":USING :CLS :IF R$="O"THEN 130
180 BEEP 1:PAUSE "EXIT":CALL &CD71:END
200 "LO"PRINT "CASSETTE?":GOSUB "K":IF R$="N"THEN 260
210 CLEAR :CLS :INPUT "FICHIER?";Q$:CLS :R$="O"
220 CLS :INPUT #"CALC";Z$,P$,F,J,K,M,N,O,R,C:PAUSE Z$:IF Z$<>Q$GOTO 220
230 DIM D(R,C),RN$(R),CN$(C),R3(K),R2(K),R1(K),C3(K),C2(K),C1(K),O$(K,1),Y(K,1)
240 PRINT Z$:INPUT #D(*),RN$(*),CN$(*),R3(*),R2(*),R1(*),C3(*),C2(*),C1(*),O$(*),Y(*)
250 LPRINT Z$;" CHARGE":LF 1:COLOR 3:L=(36-LEN Z$)/2:LPRINT TAB L;Z$:COLOR 0:FO=J
260 CLS :RETURN 
300 "CO":CLS :COLOR 3:LPRINT "MODELE:":CLS :LF 1
310 CLEAR :CLS :COLOR 3:INPUT "TITRE?";Z$:L=(36-LEN Z$)/2:LPRINT TAB L;Z$:CLS :LF 1:COLOR 0
320 INPUT "# DE RANGS?";R,"# DE COL.?";C:CLS :DIM D(R,C),RN$(R),CN$(C):G=310
330 S=150+PEEK 30820*256-STATUS 3:K=INT ((STATUS 0-S)/152):IF STATUS 0<SBEEP 1:PRINT "MEM.PLEINE":GOTO G
340 LPRINT R;" RANGS X";C;" COL.":PRINT "FORME OK?":GOSUB "K":IF R$="N"GOTO G
350 LPRINT K;" OP. PERMISES":DIM R3(K),R2(K),R1(K),C3(K),C2(K),C1(K),O$(K,1),Y(K,1)
360 CLS :LF 1:COLOR 3:LPRINT "NOMS DES RANGS & COL.:":CLS :LF 1:COLOR 0:LPRINT "NOMS DES RANGS:"
370 FOR I=1TO R:R$="":LPRINT I;" DE";R;":";:RN$(I)=LEFT$ ("R"+MID$ (STR$ I,2,1)+" ",10)
380 INPUT R$:LPRINT R$:CLS :IF R$<>""LET RN$(I)=LEFT$ (R$+" ",10)
390 NEXT I:LF 1:LPRINT "NOMS DES COL.:"
400 FOR I=1TO C:R$="":LPRINT I;" DE";C;":";:CN$(I)=LEFT$ ("C"+MID$ (STR$ I,2,1)+" ",10)
410 INPUT R$:LPRINT R$:CLS :IF R$<>""LET CN$(I)=LEFT$ (R$+" ",10)
420 NEXT I:LF 1:INPUT "FORMATP(1/2/3)?";FO:FO=1499+FO:RETURN 
500 "DA"CLS :PRINT "DONNEES?":GOSUB "K":IF R$="N"GOTO 580
510 CLS :P$=R$:N=N+1:IF N>1THEN "DAA"
520 CLS :LF 1:COLOR 3:LPRINT "DONNEES:":LF 1:COLOR 0:PRINT "PAR RANGS?":G=550:GOSUB "K":IF R$="N"GOTO G
530 CLS :GOSUB "IR":IF EGOTO G
540 CLS :LF 1:GOSUB "ER":GOTO 530
550 CLS :PRINT "PAR COL.?":G=580:GOSUB "K":IF R$="N"GOTO G
560 CLS :GOSUB "IC":IF EGOTO G
570 CLS :LF 1:GOSUB "EC":GOTO 560
580 RETURN 
600 "CL"CLS :PRINT "CALCULER?":GOSUB "K":IF R$="N"GOTO 680
610 CLS :COLOR 3:LPRINT "CALCULS:":LF 1:COLOR 0
620 CLS :PRINT "SUR RANGS?":G=650:GOSUB "K":IF R$="N"THEN G
630 CLS :LF 1:CLS :LPRINT "1e ";:GOSUB "IR":IF EGOTO G
640 GOSUB "WR":GOTO 630
650 CLS :PRINT "SUR COL.:?":GOSUB "K":G=680:IF R$="N"THEN G
660 CLS :LF 1:LPRINT "1e ";:GOSUB "IC":IF EGOTO G
670 GOSUB "WC":GOTO 660
680 RETURN 
700 "DS"PRINT "IMPRESSION?":GOSUB "K":IF R$="N"GOTO 720
710 CLS :COLOR 3:LPRINT "TABLEAU:":LF 1:COLOR 0:GOSUB "G"
720 RETURN 
800 "REC"CLS :PRINT "ENREGISTRER?";:GOSUB "K":IF R$="N"GOTO 840
810 J=FO:PRINT Z$:PRINT #"CALC";Z$,P$,F,J,K,M,N,O,R,C
820 PRINT #D(*),RN$(*),CN$(*),R3(*),R2(*),R1(*),C3(*),C2(*),C1(*),O$(*),Y(*)
830 LPRINT Z$;" ENREGISTRE"
840 RETURN 
900 "REP"PRINT "***":IF F=1GOSUB "DR1":GOSUB "DC1":GOTO 920
910 GOSUB "DC1":GOSUB "DR1"
920 BEEP 1:RETURN 
1000 "ER"CLS :COLOR 3:LPRINT "RANG ";RN$(V):COLOR 0:LF 1:LPRINT "COL";TAB 18;"VALEUR":GOSUB FO
1010 FOR I=1TO C:LPRINT LEFT$ (CN$(I),10);:INPUT D(V,I):CLS :LPRINT TAB 15;D(V,I):CLS :NEXT I:USING 
1020 LF 1:RETURN 
1050 "EC"CLS :COLOR 3:LPRINT "COL ";CN$(X):COLOR 0:LF 1:LPRINT "RANG";TAB 18;"VALEUR":GOSUB FO
1060 FOR I=1TO R:LPRINT LEFT$ (RN$(I),10);:INPUT D(I,X):CLS :LPRINT TAB 15;D(I,X):CLS :NEXT I:USING 
1070 LF 1:RETURN 
1100 "IR"E=0:N$="":LPRINT "RANG:NOM/FIN?";:INPUT N$:LPRINT TAB 24;N$:IF N$="FIN"LET E=1:LF 1:GOTO 1130
1110 N$=LEFT$ (N$+" ",10):FOR I=1TO R:IF RN$(I)=N$LET V=I:GOTO 1130
1120 NEXT I:PRINT "??";:GOTO 1100
1130 RETURN 
1150 "IC"E=0:N$="":LPRINT "COL:NOM/FIN?";:INPUT N$:LPRINT TAB 24;N$:IF N$="FIN"LET E=1:LF 1:GOTO 1180
1160 N$=LEFT$ (N$+" ",10):FOR I=1TO C:IF CN$(I)=N$LET X=I:GOTO 1180
1170 NEXT I:PRINT "??";:GOTO 1150
1180 RETURN 
1200 "WR"M=M+1:R1=V:R1(M)=V:D=2:IF M=1AND O=0LET F=1
1210 GOSUB "OP":O$(M,0)=O$:LPRINT STR$ D+"e ";:GOSUB "IR":IF EGOTO 1240
1220 R2=V:R2(M)=V:PRINT "RESULTAT?":GOSUB "K":IF R$="O"GOTO 1245
1230 R3=0:R3(M)=0:GOSUB "DR":D=D+1:M=M+1:R1=0:C1=0:GOTO 1210
1240 RETURN 
1245 LPRINT "RESULTAT:";:GOSUB "IR":R3=V:R3(M)=V:GOSUB "DR":GOTO 1240
1250 "WC"O=O+1:C1=X:C1(O)=X:D=2:IF O=1AND M=0LET F=2
1260 GOSUB "OP":O$(O,1)=O$:LPRINT STR$ D+"e ";:GOSUB "IC":IF EGOTO 1290
1270 C2=X:C2(O)=X:PRINT "RESULTAT?":GOSUB "K":IF R$="O"GOTO 1295
1280 C3=0:C3(O)=0:GOSUB "DC":D=D+1:O=O+1:C1=0:R1=0:GOTO 1260
1290 RETURN 
1295 LPRINT "RESULTAT:";:GOSUB "IC":C3=X:C3(O)=X:GOSUB "DC":GOTO 1290
1300 "DR"PRINT "***":FOR I=1TO C:C3=I:C2=I:C1=I:GOSUB "FA":Y(M,0)=Y:NEXT I:BEEP 1:CLS :LF 1:RETURN 
1350 "DC"PRINT "***":FOR I=1TO R:R3=I:R2=I:R1=I:GOSUB "FA":Y(O,1)=Y:NEXT I:BEEP 1:CLS :LF 1:RETURN 
1400 "DR1"FOR S=1TO M:R3=R3(S):R2=R2(S):R1=R1(S):O$=O$(S,0):Y=Y(S,0)
1410 FOR I=1TO C:C3=I:C2=I:C1=I:GOSUB "FA":NEXT I:NEXT S:RETURN 
1450 "DC1"FOR S=1TO O:C3=C3(S):C2=C2(S):C1=C1(S):O$=O$(S,1):Y=Y(S,1)
1460 FOR I=1TO R:R3=I:R2=I:R1=I:GOSUB "FA":NEXT I:NEXT S:RETURN 
1500 "U"USING ",#########.##":RETURN 
1501 USING "#.#######'":RETURN 
1502 USING "##########":RETURN 
1550 "OP"O$="":PRINT "+ - * / %* %+ %- %D Comp";:INPUT O$:LPRINT TAB 24;O$:CLS 
1560 IF O$<>"C"LET Y=0:GOTO 1590
1570 PRINT "PV FV I ";:INPUT O$:CLS :INPUT "DEBUT?";Y2,"FIN?";Y1:Y=Y1-Y2:LPRINT TAB 24;O$
1580 LPRINT TAB 12;Y2;"-";Y1;" (";Y;" ANS)"
1590 RETURN 
1600 "DAA"I=1:V=I:X=I:GPRINT A$:CURSOR 2:PRINT RN$(V):CURSOR 8:PRINT CN$(X):CURSOR 15:PRINT D(V,X)
1610 RR=R:F$=INKEY$ :IF F$=""THEN 1610
1620 J=ASC F$:IF J=&0AGOSUB "+":I=I+1:GPRINT A$:CURSOR 2:PRINT RN$(I):CURSOR 8:PRINT CN$(X):CURSOR 15:PRINT D(I,X)
1630 IF J=&0BGOSUB "-":I=I-1:GPRINT A$:CURSOR 2:PRINT RN$(I):CURSOR 8:PRINT CN$(X):CURSOR 15:PRINT D(I,X)
1640 IF J=&4CLET V=I:LPRINT TAB 20;RN$(I):GOSUB FO:Z=0:GOTO "SR"
1645 IF J=&45CLS :LF 1:GOTO 150
1650 IF J=&08OR J=&0CLET V=I:I=1:GOTO 1710
1660 IF J=&43LET V=I:GOTO 1780
1670 GOTO 1610
1710 RR=C:F$=INKEY$ :IF F$=""GOTO 1710
1720 J=ASC F$:IF J=&0CGOSUB "+":I=I+1:GPRINT B$:CURSOR 2:PRINT RN$(V):CURSOR 8:PRINT CN$(I):CURSOR 15:PRINT D(V,I)
1730 IF J=&08GOSUB "-":I=I-1:GPRINT B$:CURSOR 2:PRINT RN$(V):CURSOR 8:PRINT CN$(I):CURSOR 15:PRINT D(V,I)
1740 IF J=&4CLET X=I:LPRINT TAB 20;CN$(I):GOSUB FO:Z=0:GOTO "SC"
1745 IF J=&45CLS :LF 1:GOTO 150
1750 IF J=&0AOR J=&0BLET X=I:GOTO 1620
1760 IF J=&43LET X=I:GOTO 1780
1770 GOTO 1710
1780 LPRINT "ANC.:";TAB 5;RN$(V);TAB 15;CN$(X);TAB 25;D(V,X):INPUT D(V,X)
1785 LPRINT "NOUV.:";TAB 5;RN$(V);TAB 15;CN$(X);TAB 25;D(V,X):LF 1
1790 IF V=ILET I=1:GPRINT A$:CURSOR 2:PRINT RN$(V):CURSOR 8:PRINT CN$(X):CURSOR 15:PRINT D(V,X):GOTO 1610
1795 IF X=ILET I=1:GPRINT B$:CURSOR 2:PRINT RN$(V):CURSOR 8:PRINT CN$(X):CURSOR 15:PRINT D(V,X):GOTO 1710
1800 "SR"FOR J=1TO C:LPRINT CN$(J);TAB 15;D(V,J):Z=Z+D(V,J):NEXT J
1810 LPRINT "SOMME RANG";TAB 15;Z:LPRINT "MOY. RANG";TAB 15;Z/C:USING :GOTO 1790
1820 "SC"FOR J=1TO R:LPRINT RN$(J);TAB (15);D(J,X):Z=Z+D(J,X):NEXT J
1830 LPRINT "SOMME COL";TAB 15;Z:LPRINT "MOY. COL.";TAB 15;Z/R:USING :GOTO 1790
1840 "+"IF I>RR-1LET I=0
1850 RETURN 
1860 "-"IF I<=1LET I=RR+1
1870 RETURN 
1900 "FA"IF O$="+"LET D(R3,C3)=D(R1,C1)+D(R2,C2)
1910 IF O$="-"LET D(R3,C3)=D(R1,C1)-D(R2,C2)
1920 IF O$="*"LET D(R3,C3)=D(R1,C1)*D(R2,C2)
1930 IF O$="/"AND D(R2,C2)<>0LET D(R3,C3)=D(R1,C1)/D(R2,C2)
1940 IF O$="%*"LET D(R3,C3)=D(R1,C1)*D(R2,C2)/100
1950 IF O$="%+"LET D(R3,C3)=D(R1,C1)+(D(R1,C1)*D(R2,C2)/100)
1960 IF O$="%-"LET D(R3,C3)=D(R1,C1)-(D(R1,C1)*D(R2,C2)/100)
1970 IF O$="%D"AND D(R2,C2)<>0LET D(R3,C3)=(D(R1,C1)/D(R2,C2))*100
1980 IF O$="I"LET D(R3,C3)=(((D(R2,C2)/D(R1,C1))'(1/Y))-1)*100
1990 IF O$="FV"LET D(R3,C3)=(((D(R2,C2)/100)+1)'Y)*D(R1,C1)
2000 IF O$="PV"LET D(R3,C3)=D(R1,C1)/(((D(R2,C2)/100)+1)'Y)
2010 D(R3,C3)=INT ((D(R3,C3)*(10'3)+5)/10)/10'2:RETURN 
2100 "G"GOSUB "CS":P=W:A=1
2110 GRAPH :ROTATE 1:CSIZE B:GOSUB FO:GLCURSOR (0,0):SORGN 
2120 GOSUB "B":GLCURSOR (U,L):LPRINT "RANG":FOR J=ATO R:IF J<=WGLCURSOR (Q+L,L):LPRINT RN$(J):Q=Q+L:NEXT J
2130 Q=H:FOR X=1TO C:GLCURSOR (0,E):SORGN :GOSUB "B":GLCURSOR (U,L):LPRINT CN$(X)
2140 FOR V=ATO R:IF V<=WGLCURSOR (Q+L,L):LPRINT D(V,X):Q=Q+L:NEXT V
2150 Q=H:NEXT X:TEXT :CSIZE 1:LF 4:IF R>WGOTO 2170
2160 W=T:TEXT :CSIZE 1:LF 4:COLOR 0:RETURN 
2170 GRAPH :CSIZE B:GLCURSOR (0,E):A=P+1:W=P*2:P=W:GOTO 2110
2180 "B"LINE (0,0)-(215,0),0,1:LINE (215,0)-(215,E),0,1:LINE (215,E)-(0,E),0,1
2190 LINE (0,E)-(0,0),0,1:GLCURSOR (H,0):LINE (H,0)-(H,E),0,1:RETURN 
2200 "CS"INPUT "ECH.(1/2)?";B:IF B=1LET W=19:T=W:E=-100:L=-10:Q=195:H=Q:U=205:RETURN 
2210 B=2:W=9:T=W:E=-200:L=-20:Q=190:H=Q:U=200:RETURN 
2250 "K"R$=INKEY$ :IF R$=""GOTO "K"
2260 IF R$<>"O"AND R$<>"N"PRINT "O/N SEULS!":GOTO "K"
2270 RETURN 
2300 "ERR"A=PEEK &789B:LPRINT "ERREUR ";
2310 IF A=10OR A=5LPRINT "MEM.PLEINE":GOTO 310
2320 IF A=36LPRINT "FORMATP DEPASSE":GOTO 130
2330 IF A=38LPRINT "DIVISION PAR ZERO":GOTO 130
2340 IF A=43LPRINT "FORMAT ENREGISTR. DIFFERE":GOTO 110
2350 IF A=78OR A=80PRINT "BATTERIE FAIBLE":GOTO 2350
2360 LPRINT A:GOTO 130
