10 :'----------------------------
20 :'CALCULETTE
30 :'----------------------------
40 PEN 1:PAPER 0
50 DIM T(100),T$(100)
60 DIM LI$(13)
70 DATA +,-,*,/,à,^,A,B,C,D,E,F,G
80 FOR A=1 TO 13
90 READ LI$(A)
100 NEXT A
110 A$="######.##"
120 CT=0 : I=1 : CLS
130 LOCATE 8,1
140 PRINT"C A L C U L A T R I C E "
150 LOCATE 2,4:PRINT"OPERATEURS   +,-,/,*,à,^"
160 LOCATE 2,6:PRINT"ABREVIATIONS :"
170 LOCATE 5,7:PRINT"A   MEMORISATION"
180 LOCATE 5,8:PRINT"B   REMISE A ZERO GENERALE"
190 LOCATE 5,9:PRINT"C   REMISE A ZERO DU TOTAL EN COURS"
200 LOCATE 5,10:PRINT"D   REMISE A ZERO DU TOTAL MEMORISE"
210 LOCATE 5,11:PRINT"E   RAPPEL MEMOIRE EN 1er FACTEUR"
220 LOCATE 5,12:PRINT"F   RAPPEL MEMOIRE EN 2eme FACTEUR"
230 LOCATE 5,13:PRINT"G   FIN"
240 LOCATE 5,14:PRINT"à   MODULO"
250 LOCATE 5,15:PRINT"^   PUISSANCE"
260 GOSUB 1260
270 zz(5)=13
280 :'*** SAISIE ABREVIATION ***
290 OP$="":PAPER 0:PEN 3
300 FOR I=17 TO 20
310 LOCATE 11,I:PRINT"      "
320 NEXT I
330 LOCATE 11,17
340 OPER$=INKEY$:oper$=UPPER$(OPER$):IF OPER$="" THEN 340
350 IF OPER$<"A" OR OPER$>"G" THEN 450
360 PRINT OPER$
370 FOR IOP=7 TO 13
380 IF ASC(OPER$)<>ASC(LI$(IOP)) AND IOP<ZZ(5) THEN NEXT
390 IF ASC(OPER$)<>ASC(LI$(IOP)) THEN 330
400 GOSUB 800:IF OP$="" THEN 430
410 IF OP$="A" THEN 570
420 IF OP$="B" THEN 450
430 GOSUB 1260
440 GOTO 280
450 :'*** SAISIE 1ER NOMBRE ***
460 IF OP$="A" THEN 570
470 ZZ(1)=18
480 ZZ(2)=11
490 ZZ(3)=5
500 ZZ(4)=1
510 GOSUB 1390:IF NUMCHI=0 THEN 470
520 T(I)=NUMCHI
530 CT=CT+1
540 IF CT>90 THEN LOCATE 2,22:PRINT"ATTENTION, TABLE BIENTOT PLEINE ..."
550 I=I+1
560 A=NUMCHI
570 :'*** SAISIE OPERATEUR ***
580 LOCATE 11,20
590 OPER$=INKEY$
600 IF OPER$="" THEN 590
610 FOR IOP=1 TO 6
620 IF ASC(OPER$)<>ASC(LI$(IOP)) THEN NEXT
630 IF ASC(OPER$)<>ASC(LI$(IOP)) THEN 580
640 LOCATE 11,19:PRINT OPER$
650 :'*** SAISIE 2EME NOMBRE ***
660 IF OP$="B" THEN OP$="":GOTO 780
670 ZZ(1)=20
680 ZZ(2)=11
690 ZZ(3)=5
700 ZZ(4)=1
710 GOSUB 1390
720 IF NUMCHI=0 THEN 670
730 T(I)=NUMCHI
740 CT=CT+1
750 IF CT>90 THEN LOCATE 22,2:PRINT"ATTENTION, TABLE BIENTOT PLEINE ... "
760 I=I+1
770 B=NUMCHI
780 GOSUB 800
790 GOSUB 1260:GOTO 280
800 ON IOP GOTO 810,840,870,900,930,960,1090,1010,1030,1060,1120,1190,1000
810 :'     ADDITION
820 TT=TT+(A+B)
830 RETURN
840 :'     SOUSTRACTION
850 TT=TT+(A-B)
860 RETURN
870 :'     MULTIPLICATION
880 TT=TT+(A*B)
890 RETURN
900 :'     DIVISION
910 TT=TT+(A/B)
920 RETURN
930 :'     MODULO
940 TT=TT+(A-(-INT(A/B)*B))
950 RETURN
960 :'     PUISSANCE
970 TT=TT+(A^B)
980 RETURN
990 :'     FIN
1000 CLS:END
1010 :'## REMISE A ZERO GENERALE
1020 TT2=0:TT=0:CT=0:I=1
1030 :'## REMISE A ZERO TOTAL EN COURS
1040 TT=0
1050 RETURN
1060 :'## REMISE A ZERO MEMOIRE
1070 TT2=0
1080 RETURN
1090 :'## MEMORISATION TOTAL EN COURS
1100 TT2=TT2+TT
1110 RETURN
1120 :'## RAPPEL MEMOIRE * E *
1130 FOR X=ZZ(2) TO ZZ(2)+6
1140 L0CATE X,ZZ(1):PRINT" "
1150 NEXT
1160 A=TT2:OP$="A"
1170 LOCATE 10,18:PRINT A
1180 RETURN
1190 :'## RAPPEL MEMOIRE * F *
1200 FOR X=ZZ(2) TO ZZ(2)+6
1210 LOCATE X,ZZ(1):PRINT" "
1220 NEXT
1230 B=TT2:OP$="B"
1240 L0CATE 10,20:PRINT B
1250 RETURN
1260 GOSUB 1580
1270 PEN 2:PAPER 3
1280 LOCATE 19,17:PRINT"S/TOTAL:"
1290 LOCATE 19,20:PRINT"MEMOIRE:"
1300 PEN 1:PAPER 0
1310 LOCATE 2,17:PRINT "ABREV. :"
1320 LOCATE 2,18:PRINT "NOMBRE :"
1330 LOCATE 2,19:PRINT "OPERAT.:"
1340 LOCATE 2,20:PRINT "NOMBRE :"
1350 PAPER 3
1360 LOCATE 28,17:PRINT USING a$;tt
1370 LOCATE 28,20:PRINT USING a$;tt2
1380 RETURN
1390 FOR X=ZZ(2) TO ZZ(2)+6
1400 LOCATE X,ZZ(1):PRINT" "
1410 NEXT
1420 LOCATE ZZ(2),ZZ(1)
1430 ZZC=ZZ(2)
1440 ZZS=ZZ(2)+ZZ(3)-1
1450 NUMCHI=0:CHIF$="0"
1460 OPER$=INKEY$
1470 IF OPER$="" THEN 1460
1480 IF ASC(OPER$)=13 THEN RETURN
1490 IF ASC(OPER$)<48 OR ASC(OPER$)>57 THEN LOCATE ZZC,ZZ(1):GOTO 1460
1500 CHIF$=CHIF$+OPER$:NUMCHI=VAL(CHIF$)
1510 LOCATE ZZC,ZZ(1)
1520 PRINT OPER$
1530 ZZC=ZZC+1
1540 IF ZZC>ZZS THEN RETURN
1550 LOCATE ZZC,ZZ(1)
1560 GOTO 1460
1570 GOSUB 1580:RETURN
1580 b$=""
1590 FOR J=1 TO 23 :b$=b$+" ":NEXT
1600 PAPER 3
1610 FOR J=17 TO 20 :LOCATE 18,J:PRINT b$:NEXT
1620 RETURN