10 '***********************************
20 '* Boisson Assistee par Ordinateur *
30 '***       par G.TANNIERE        ***
40 '***        le 02-03-87          ***
50 '***   pour tous les Amis qui    ***
60 '***    viennent a la Maison     ***   
70 '***********************************
80 MODE 0:BORDER 0:INK 1,11:INK 2,26:INK 3,6:INK 4,18:INK 5,0:PAPER 4:CLS
90 LOCATE 3,7:PEN 1:PRINT "B";:PEN 5:PRINT "oissons":LOCATE 6,13:PEN 2:PRINT "A";:PEN 5:PRINT "ssistees":LOCATE 10,16:PRINT "par":LOCATE 9,19:PEN 3:PRINT "O";:PEN 5:PRINT "rdinateur":GOSUB 1000 
100 RESTORE 1010:ENV 1,2,2,5,1,0,200:FOR x=1 TO 77:READ c,h,d,v:SOUND c,h,d*0.9,v,1:NEXT
110 CLS:LOCATE 7,6:PRINT "par la":LOCATE 6,12:PRINT "Bande de":LOCATE 5,18:PRINT " SOIFFARDS"    
120 ph$="ATTENTION. Ce programme n'a aucune valeur juridique.":TAG:FOR x=640 TO -1000 STEP-20:PLOT x,30,2:PRINT ph$;:NEXT:TAGOFF:FOR x=1 TO 3000:NEXT:MODE 1:RESTORE 1070:FOR x=2 TO 20 STEP 2:READ p$:LOCATE 2,x:PRINT p$:NEXT
130 LOCATE 23,24:PRINT "Une touche SVP.";:WHILE k$<>"":k$=INKEY$:WEND:WHILE k$="":k$=INKEY$:WEND
140 '*** Entree des Donnees ***
150 MODE 1:PAPER 2:PEN 1:CLS:BORDER 0:WINDOW#1,2,18,2,10:PAPER#1,1:PEN#1,2:CLS#1:WINDOW#2,2,18,12,24:PAPER#2,1:PEN#2,2:CLS#2:WINDOW#3,20,39,2,24:PAPER#3,1:PEN#3,2:CLS#3
160 DIM alc(200),alt(200),fine(200),m(200),mal(200):LOCATE#1,2,2:INPUT#1,"NOM:",nom$     
170 LOCATE#1,3,4:INPUT#1,"SEXE :",sex$:sex$=UPPER$(sex$):IF sex$<>"F" AND sex$<>"M" THEN GOTO 170 ELSE IF sex$="F" THEN coef=0.6 ELSE coef=0.7     
180 LOCATE#1,3,6:INPUT#1,"POIDS:",poid$:poids=VAL(poid$):LOCATE#1,9+LEN(poid$),6:PRINT#1,"kg"
190 LOCATE#1,2,8:INPUT#1,"HEURE: ",hd:LOCATE#1,8,8:PRINT#1,USING "##.##";hd;:PRINT#1," h"
200 LOCATE#3,5,2:PRINT#3,"CONSOMMATIONS":RESTORE 1090:FOR x=1 TO 16:READ r$:LOCATE#3,2,4+x:PRINT#3,r$:NEXT x
210 '*** ENTREE DES CONSOMMATIONS ***
220 FOR x=0 TO 5:fine(x)=1:NEXT:x=2:h=5:hg=hd:DEF FNalcool=alt(h-1)+alt(h-2)+alt(h-3)+alt(h-4)+alc(h-1)+(0.04*(fine(h-5)=0))
230 WHILE en$<>"FIN"
240 LOCATE#2,2,x:PRINT#2,USING "##.##";hg:LOCATE#2,10,x:INPUT#2,en$:en$=UPPER$(en$):en=VAL(en$)
250 ON en+1 GOSUB 1130,1140,1150,1160,1170,1180,1190,1200,1210,1220,1230,1240,1250,1260,1270,1280,1290
260 x=x+2:IF x>13 THEN x=12:PRINT#2,STRING$(2,CHR$(10))
270 malc=MAX(alc(h)):hg=hg+0.15:h=h+1:IF (hg-INT(hg))>0.59 THEN hg=INT(hg)+1
280 IF hg>24 THEN hg=0.15
290 WEND:fine(h-1)=0
300 h=4:WHILE alc(h)>=0:h=h+1:alt(h)=(m(h)/(4*poids*coef)):alc(h)=FNalcool:mal=alc(h):IF mal>malc THEN malc=mal
310 IF mal>malc THEN malc=mal
320 WEND
330 '*** Sortie du Graphique ***
340 MODE 1:PAPER 2:CLS:LOCATE 10,2:PRINT "GRAPHE de L'ALCOOLEMIE":cy=100:cx=600ç h:ORIGIN 30,180:DRAW 600,0,1:PLOT 0,-10,1:DRAW 0,200:PLOT 0,80:DRAW 600,80:FOR y=0 TO 200 STEP 10:MOVE -6,y:DRAW 0,y:NEXT
350 PRINT CHR$(23)+CHR$(1);:TAG:PAPER 3:MOVE -3,200:PRINT "g/l";:MOVE 590,-4:PRINT "h";:MOVE -30,96:PRINT "0.8";:TAGOFF:PRINT CHR$(23)+CHR$(0):h=6:hd=hd+0.15 
360 i=0:PLOT 0,0:WHILE alc(h)>=0:PLOT (h-6)*cx,alc(h-1)*100,0:DRAW (h-5)*cx,alc(h)*100:IF alc(h)>0.8 AND i=0 THEN hdc=hd:i=1 ELSE IF alc(h)<0.8 AND i=1 THEN hfc=hd:i=0
370 IF hd-INT(hd)=0 AND cx>9 THEN PLOT (h-5)*cx,0,1:DRAW (h-5)*cx,-12:PRINT CHR$(23)+CHR$(1);:TAG:PLOT 0,0,3:MOVE (h-5)*cx-32,-16:PRINT INT(hd);:TAGOFF:PRINT CHR$(23)+CHR$(0) ELSE PLOT (h-5)*cx,0,1:DRAW (h-5)*cx,-8
380 IF hd-INT(hd)=0 AND cx<=9 AND (INT(hd)) MOD 4=0 THEN PLOT (h-5)*cx,0,1:DRAW (h-5)*cx,-12:PRINT CHR$(23)+CHR$(1);:TAG:PLOT 0,0,3:MOVE (h-5)*cx-32,-16:PRINT INT(hd);:TAGOFF:PRINT CHR$(23)+CHR$(0) ELSE PLOT (h-5)*cx,0,1:DRAW (h-5)*cx,-8
390 h=h+1:hd=hd+0.15:IF (hd-INT(hd))>0.59 THEN hd=INT(hd)+1 ELSE IF hd>24 THEN hd=0.15
400 WEND
410 '*** Commentaires du Graphe ***
420 WINDOW#4,2,39,17,24:PAPER#4,0:PEN#4,2:CLS#4
430 LOCATE#4,10,2:IF sex$="F" THEN PRINT#4,"Madame ";UPPER$(nom$) ELSE PRINT#4,"Monsieur ";UPPER$(nom$)  
440 LOCATE#4,2,4:PRINT#4,"votre alcoolemie maximum est de";USING "##.###";malc:GOSUB 1390:CLS#4
450 IF malc<0.3 THEN RESTORE 1310:READ ph$:PRINT#4,CHR$(10);CHR$(10)ph$:GOSUB 1390
460 IF malc>=0.3 AND malc<0.5 THEN RESTORE 1320:READ ph$:PRINT#4,CHR$(10);ph$:GOSUB 1390    
470 IF malc>=0.5 AND malc<0.8 THEN RESTORE 1330:READ ph$:PRINT#4,CHR$(10);ph$:GOSUB 1390       
480 IF malc>=0.8 AND malc<1.5 THEN BORDER 6:RESTORE 1340:READ ph$:PRINT#4,ph$:LOCATE#4,12,6:PEN#4,3:PRINT#4,USING "##.##";hdc;:PRINT#4," H a ";:PRINT#4,USING "##.##";hfc;:PRINT#4," H":GOSUB 1390:CLS#4:READ ph1$:PRINT#4,ph1$:GOSUB 1390 
490 IF malc>=1.5 AND malc<3 THEN RESTORE 1360:READ ph$:PRINT#4,CHR$(10);ph$:LOCATE#4,12,5:PEN#4,3:PRINT#4,USING "##.##";hdc;:PRINT#4," H a ";:PRINT#4,USING "##.##";hfc;:PRINT#4," H":GOSUB 1390:CLS#4:RESTORE 1350:READ ph1$:PRINT#4,ph1$:GOSUB 1390
500 IF malc>=3 AND malc>5 THEN BORDER 6:RESTORE 1370:READ ph$:PRINT#4,CHR$(10);ph$:LOCATE#4,12,5:PEN#4,3:PRINT#4,USING "##.##";hdc;:PRINT#4," H a ";:PRINT#4,USING "##.##";hfc;:PRINT#4," H":GOSUB 1390:CLS#4:RESTORE 1350:READ ph1$:PRINT#4,ph1$:GOSUB 1390
510 IF malc>=5 THEN BORDER 6,0:RESTORE 1380:READ ph$:PRINT#4,CHR$(10);ph$:LOCATE#4,12,6:PEN#4,3:PRINT#4,USING "##.##";hdc;:PRINT#4," H a ";:PRINT#4,USING "##.##";hfc;:PRINT#4," H":GOSUB 1390:CLS#4:RESTORE 1350:READ ph1$:PRINT#4,ph1$:GOSUB 1390
520 CLS#4:LOCATE#4,7,3:PRINT#4,"voulez-vous un autre Graphe ?":LOCATE#4,15,5:PRINT#4,"Oui ou Non":WHILE a$<>"":a$=INKEY$:WEND:WHILE a$<>"O" AND a$<>"N":a$=UPPER$(INKEY$):WEND:IF a$="O" THEN RUN 140 ELSE CALL 0
530 END
1000 '*** Boire un petit Coup ***
1010 DATA 1,319,30,5,1,319,30,5,1,319,30,5,1,319,30,5,1,319,30,5,1,319,30,5,1,358,30,5,1,358,30,5,1,402,120,5,1,536,60,5,1,1,60,5,1,253,30,5,1,253,30,5,1,253,30,5,1,253,30,5,1,213,120,5,1,239,120,5,1,253,120,5,1,1,60,5,1,253,30,5
1020 DATA 1,253,30,5,1,253,30,5,1,253,30,5,1,253,90,5,1,253,30,5,1,239,30,5,1,253,30,5,1,284,30,5,1,319,30,5,1,253,60,5,1,284,60,5,1,1,30,5,1,239,30,5,1,239,30,5,1,239,30,5,1,239,30,5,1,239,30,5,1,239,30,5,1,253,30,5,1,284,30,5
1030 DATA 1,319,60,5,1,253,60,5,1,379,120,5,1,319,30,5,1,319,30,5,1,319,30,5,1,253,30,5,1,319,120,5,1,358,120,5,1,379,120,5,1,1,60,5,1,253,30,5,1,253,30,5,1,253,30,5,1,225,60,5,1,1,30,5,1,284,30,5,1,284,30,5,1,284,30,5,1,284,60,5
1040 DATA 1,1,30,5,1,225,30,5,1,225,30,5,1,225,30,5,1,253,60,5,1,1,30,5,1,319,30,5,1,319,30,5,1,319,30,5,1,319,60,5,1,1,30,5,1,253,30,5,1,253,30,5,1,284,30,5,1,319,120,5,1,358,120,5,1,379,120,5
1050 RETURN
1060 '*** Data mode d'Emploi ***
1070 DATA " Ce programme est destine a evaluer"," votre taux d'Alcoolemie.Pour cela:","-ENTREZ: NOM-SEXE-POIDS-et HEURE DE"," DEBUT D'absorption d'alcool:","-VALIDEZ a chaque fois par <ENTER>.","-CHOISISSEZ dans la colonne de droite" 
1080 DATA " le type d'alcool et ENTREZ le nombre"," face a l'heure d'absorption.","-A la fin du repas ENTREZ le mot FIN","-L'ordinateur se chargera du reste."
1090 '*** Listes des Consommations ***
1100 DATA 1-45%-2 cl Anis,2-45%-6 cl Anis,3-40%-2 cl Whisky,4-40%-6 cl Whisky,5-30%-2 cl Whisky,6-30%-6 cl alc.div.  
1110 DATA 7-20%-6 cl alc.div.,8-16%-6 cl vin cuit,9-12%-12 cl  vin,10-11%-12 cl vin,11-10%-12 cl vin,12-6%-25 cl biere,13-6%-12 cl cidre,14-40%-3 cl diges.,15-20%-3 cl liqueur,16-10%-12 cl Champ.
1120 '*** Masse d'Alcool par verre ***
1130 m(h)=0:fine(h)=1:RETURN
1140 m(h)=7.2:fine(h)=0:RETURN
1150 m(h)=21.6:fine(h)=0:RETURN
1160 m(h)=6.4:fine(h)=0:RETURN
1170 m(h)=19.2:fine(h)=0:RETURN
1180 m(h)=4.8:fine(h)=0:RETURN
1190 m(h)=14.4:fine(h)=0:RETURN
1200 m(h)=9.6:fine(h)=0:RETURN
1210 m(h)=7.68:fine(h)=0:RETURN
1220 m(h)=11.52:fine(h)=0:RETURN
1230 m(h)=10.56:fine(h)=0:RETURN
1240 m(h)=9.6:fine(h)=0:RETURN
1250 m(h)=12:fine(h)=0:RETURN
1260 m(h)=6:fine(h)=0:RETURN
1270 m(h)=9.5:fine(h)=0:RETURN
1280 m(h)=4.8:fine(h)=0:RETURN
1290 m(h)=9.6:fine(h)=0:RETURN
1300 '*** Datas Commentaires ***  
1310 DATA "    BRAVO... vous etes tres sage"      
1320 DATA " AUCUN troubles apparents mais         votre acuite visuelle diminue          votre estimation des distances est    faussee"       
1330 DATA "   ATTENTION :                         les troubles apparaissent             les temps de reaction s'allongent     legere euphorie "  
1340 DATA " ATTENTION:conduire devient dangereux       Votre vigilance diminue               legere ivresse                     reflexe de plus en plus troubles        vous ne devez pas conduire de:"
1350 DATA " si controle ou accident vous risquez:    -1000 a 30000 frs d'amende            -2 mois a 2 ans de prison          + retrait du permis de 3 ans maximum si accident grave ou recidive ou delit de fuite: les peines sont doublees."
1360 DATA "DANGER:votre allure devient titubante      votre vue se dedouble            Vous ne devez absolument pas conduire     de: "
1370 DATA "  DANGER :                              toute conduite est impossible        Vous ne devez absolument pas conduire     de: "
1380 DATA " DANGER :                             vous risquez de sombrer dans un coma      pouvant entrainer la mort         Vous ne devez absolument pas conduire     de: " 
1390 '*** Attente touche ***
1400 PEN#4,2:LOCATE#4,23,8:PRINT#4,"une touche SVP.";:WHILE k$<>"":k$=INKEY$:WEND:WHILE k$="":k$=INKEY$:WEND:RETURN