SOURCE de PAINT.BAS

 10 D$ =  CHR$ (4):CT =  - 16199
 20  DIM ME$(22)
 100  GOSUB 5000: REM  Installe routinem lit PAINT.INF
 110  GOSUB 6000: REM  Choix calib/16coul/mono
 120  GOSUB 6200: REM  Prepare l'ecran
 180  GOTO 200
 190 LX = X:LY = Y
 200  GOSUB 5100:X =  INT ((X8 - M0) * AX):Y =  INT (AY * Y8 + BY)
 210  & CO(LC): & DO(LX,LY)
 220  & PI(X,Y,LC)
 230  IF LC < 16 THEN  & CO(15 - LC): & DO(X,Y)
 240  & CO(CP): IF S8 > 15 THEN 6300
 250  IF S8 = 3 THEN 190
 260  IF Y8 < N1 THEN  GOSUB 6400: GOTO 190
 270  IF MM = 12 THEN LC = CP: GOTO 190
 280  IF MM <  > 10 THEN  GOSUB 5150: GOTO 310
 290  IF S8 = 2 THEN X7 = X:Y7 = Y: GOTO 190
 295  IF S8 = 1 THEN 190
 300  & LI(X7,Y7,X,Y):X7 = X:Y7 = Y: GOTO 190
 310  IF MM = 20 THEN  & CO(LC): & DO(X,Y): & PO(X,Y): & FILL(CF,C2,C3,C4): & PI(X,Y,LC): GOTO 190
 312  IF MM = 21 THEN  & PO(X,Y): & WR(T$): GOTO 190
 315  IF FL = 0 THEN FL = 1:L7 = LC:LC = CP:X7 = X:Y7 = Y: GOTO 190
 320 FL = 0: IF MM = 11 THEN  & LI(X7,Y7,X,Y):LC = CP: GOTO 190
 322  IF MM <  > 13 THEN 335
 323  & CO(L7): & DO(X7,Y7): & CO(LC): & DO(X,Y): & CO(CP)
 325  IF X7 > X THEN C = X:X = X7:X7 = C
 326  IF Y7 > Y THEN C = Y:Y = Y7:Y7 = C
 330  & EL(X7,X,Y7,Y): GOTO 190
 335  IF MM <  > 14 THEN 350
 340  IF X7 > X THEN C = X:X = X7:X7 = C
 342  IF Y7 > Y THEN C = Y:Y = Y7:Y7 = C
 345  & BO(X7,X,Y7,Y):LC = CF: GOTO 190
 350  GOTO 190
 360  GOTO 190
 1000  & DI(O): PRINT  CHR$ (17): POKE CT,15: HOME 
 1010  IF MM = 3 THEN  PRINT "Couleur de remplissage..."
 1012  IF MM = 4 THEN  PRINT "Remplissage multicolore couleur ";I
 1015  IF MM = 9 THEN  PRINT "Couleur du crayon..."
 1017  PRINT 
 1020  POKE CT,240: HTAB 3: PRINT "0 Noir"
 1030  POKE CT,1: PRINT "  1 Magenta"
 1040  POKE CT,2: PRINT "  2 Bleu fonce"
 1050  POKE CT,3: PRINT "  3 Violet"
 1060  POKE CT,4: PRINT "  4 Vert fonce"
 1070  POKE CT,5: PRINT "  5 Gris 1"
 1080  POKE CT,6: PRINT "  6 Bleu"
 1090  POKE CT,7: PRINT "  7 Bleu clair"
 1100  POKE CT,8: PRINT "  8 Marron"
 1110  POKE CT,9: PRINT "  9 Orange"
 1120  POKE CT,10: PRINT " 10 Gris 2"
 1130  POKE CT,11: PRINT " 11 Rose"
 1140  POKE CT,12: PRINT " 12 Vert"
 1150  POKE CT,13: PRINT " 13 Jaune"
 1160  POKE CT,14: PRINT " 14 Bleu turquoise"
 1170  POKE CT,15: PRINT " 15 Blanc"
 1180 C = 0: GOSUB 5100
 1190  VTAB 3 + C: HTAB 1: PRINT ">";: GOSUB 5100
 1200 D =  INT ((Y8 - N0) / (N2 - N0) * 16): IF D < 0 THEN D = 0
 1210  IF D > 15 THEN D = 15
 1215  IF MD = 1 THEN D = 15 *  INT (D / 8): REM  en mono noir ou blanc
 1220  VTAB 3 + C: HTAB 1: PRINT " ";:C = D: IF S8 = 3 THEN 1190
 1230  POKE  - 16200,0: HOME : PRINT  CHR$ (18): & DI(MD)
 1240 C = C + C: IF C < 16 THEN  RETURN 
 1250 C =  INT (C) - 15: RETURN 
 4999  REM  Prepare la routine et lit PAINT.INF
 5000  FOR I = 768 TO 791: READ A: POKE I,A: NEXT I: GOTO 5040
 5005  REM  LDA $CFFF, LDA $C500, ???
 5010  DATA  173,255,207,173,0,197,169,197
 5020  DATA  141,248,7,76,185,203
 5021  REM  PLA, TAY, PLA, LDX 223, TXS, PHA, TYA, PHA, RTS
 5025  DATA  104,168,104,166,223,154,72,152,72,96
 5040  PRINT D$"OPEN PAINT.INF": PRINT D$"READ PAINT.INF"
 5050  INPUT M0,M1,N0,N1,N2: PRINT D$"CLOSE PAINT.INF"
 5060  FOR I = 0 TO 21: READ ME$(I): NEXT I: FOR I = 0 TO 5: READ FT$(I): NEXT I: RETURN 
 5070  DATA  Reset,Clear,Window,Bg color,Delta,Soft reset,View port,Calibrate
 5080  DATA  Reducer,Pen color,Draw,Lines,Dots,Frame,Box,Catalog,Load,Save
 5090  DATA  Separate,Slide,Area,Distance
 5095  DATA  SYSTEM.CHAR,LARGE.CHAR,GREEK.CHAR,ITALIC.CHAR,GOTHIC.CHAR,BYTE.CHAR
 5099  REM  Lit les infos crayon ou attend touche si hors portee
 5100  CALL 768:S8 =  PEEK (640):X8 =  PEEK (642) * 256 +  PEEK (641)
 5110 Y8 =  PEEK (644) * 256 +  PEEK (643): RETURN 
 5129  REM  Attend pen down et revient lorsque pen up
 5130  GOSUB 5100: IF S8 > 15 THEN  GET A$: RETURN 
 5140  IF S8 THEN 5130
 5150  CALL 768: IF  PEEK (640) <  > 3 THEN 5150
 5160  RETURN 
 5199  REM  Calibre et sauve dans PAINT.INF
 5200  PRINT "Calibration"
 5210  PRINT "Pointez en haut a gauche de la barre de menu"
 5220  GOSUB 5130: IF S8 > 15 THEN  RETURN 
 5230 M0 = X8:N0 = Y8: PRINT "Pointez en bas a droite de la barre de menu"
 5240  GOSUB 5130: IF S8 > 15 THEN  RETURN 
 5250 M1 = X8:N1 = Y8: PRINT "Pointez en bas a droite de la zone de dessin"
 5260  GOSUB 5130: IF S8 > 15 THEN  RETURN 
 5270 N2 = Y8: GOSUB 5410
 5280  PRINT "Sauvegarde..."
 5290  PRINT D$;"DELETE PAINT.INF"
 5300  PRINT D$;"OPEN PAINT.INF"
 5310  PRINT D$;"WRITE PAINT.INF"
 5320  PRINT M0: PRINT M1: PRINT N0: PRINT N1: PRINT N2
 5330  PRINT D$;"CLOSE PAINT.INF"
 5340  RETURN 
 5400  REM  Recalcule les coeffs avec la calibration
 5410 AX = XM / (M1 - M0):AY = YM / (N1 - N2)
 5420 AM = 22 / (M1 - M0):BY = YM * N2 / (N2 - N1) - 1
 5430  RETURN 
 5998  REM  Ecran d'accueil, si touche -> calibration et retour accueil
 5999  REM  si clic gauche -> 16 couleurs, si droit -> monochrome
 6000  & DI(0): PRINT  CHR$ (17): VTAB 2:A$ = "[           ]"
 6004  POKE CT,13: HOME : PRINT  TAB( 14);"[-----------]": PRINT  TAB( 14);A$: PRINT  TAB( 14);"[";
 6008  POKE CT,9: PRINT " Tablette  ";
 6010  POKE CT,13: PRINT "]": PRINT  TAB( 14);A$: PRINT  TAB( 14);"[";
 6014  POKE CT,1: PRINT " Graphique ";
 6018  POKE CT,13: PRINT "]": PRINT  TAB( 14);A$: PRINT  TAB( 14);"[-----------]"
 6020  POKE CT,15: VTAB 12: PRINT "Approcher le crayon de la tablette...": CALL 768
 6022  POKE CT,7: VTAB 12: PRINT "   Appuyer sur une touche pour calibrer."
 6024  POKE CT,12: VTAB (14): PRINT  TAB( 4)"Cliquer": POKE CT,13: PRINT  TAB( 4)"a gauche": POKE CT,9: PRINT  TAB( 4)"pour le": POKE CT,1: PRINT  TAB( 4)"mode 16": POKE CT,3: PRINT  TAB( 4)"couleurs."
 6028  POKE CT,15: VTAB 14: HTAB 30: PRINT "Cliquer";: VTAB 15: HTAB 30: PRINT "a droite";: VTAB 16: HTAB 30: PRINT "pour le";: VTAB 17: HTAB 30: PRINT "mode";: VTAB 18: HTAB 30: PRINT "monochrome.";
 6030  GOSUB 5130: POKE  - 16200,0
 6040  IF S8 > 15 THEN  GET A$: GOSUB 5200: GOTO 6000
 6050 MD = 2:YM = 192:XM = 140: IF 2 * X8 > M0 + M1 THEN MD = 1:XM = 560
 6060  GOSUB 5410: PRINT  CHR$ (18): HOME : RETURN 
 6199  REM  Prepare l'ecran
 6200  & DI(MD): & BA(0): & MO(MD): POKE  - 16302,0
 6205  & WI(0,19,0,YM - 1,1)
 6210 CP = 15:CF = 15
 6220  IF MD = 1 THEN CP = 1:CF = 1
 6230 LX =  - 1:LY =  - 1:LC = 0:MM = 10
 6240  RETURN 
 6300  & DI(0): PRINT  CHR$ (18): END 
 6400 LM = MM:MM =  INT ((X8 - M0) * AM):Y8 =  SGN (2 * Y8 - N0 - N1)
 6410  VTAB 20: PRINT : PRINT  CHR$ (11);ME$(MM): POKE  - 16301,0: GOTO 6440
 6420  FOR I = 1 TO 500: NEXT I
 6430  POKE  - 16302,0: GOSUB 5100: RETURN 
 6440  ON MM + 1 GOTO 6500,6600,7600,6800,6900,7000,7000,7000,6550,7400,7500,7600,7500,7600,7600,8000,8100,8200,7000,7000,7600,6700
 6500  PRINT  CHR$ (7)"Quitter (o/n) ?";: GET A$:MM = LM
 6510  IF A$ = "O" THEN 6300
 6520  GOTO 6430
 6550  PRINT "Facteur X:";: INPUT D
 6560  PRINT "Facteur Y:";: INPUT C: & SC(D,C):MM = LM: GOTO 6430
 6600  PRINT  CHR$ (7)"Effacer le dessin (o/n) ?";: GET A$:MM = LM
 6610  IF A$ <  > "O" THEN 6430
 6620  & BA(CF): & BO(0,XM - 1,0,YM - 1):LC = CF: GOTO 6430
 6700  IF Y8 < 0 THEN  PRINT "Texte a ecrire:";: INPUT T$: GOTO 6430
 6710  & DI(O): PRINT  CHR$ (17): HOME 
 6720  PRINT "Choisir le style:": PRINT 
 6730  FOR I = 0 TO 5: PRINT "  "FT$(I): NEXT I:C = 0: GOSUB 5100
 6740  VTAB 3 + C: HTAB 1: PRINT ">";: GOSUB 5100:D =  INT ((Y8 - N0) / (N2 - N0) * 6): IF D < 0 THEN D = 0
 6750  IF D > 5 THEN D = 5
 6760  VTAB 3 + C: HTAB 1: PRINT " ";:C = D: IF S8 = 3 THEN 6740
 6780  IF C <  > 0 THEN  &  SHLOAD (1,FT$(C)):C = 1
 6790  & CH(C): PRINT  CHR$ (18): & DI(MD): GOTO 6430
 6800  GOSUB 1000: & BA(C):CF = C:C2 = C:C3 = C:C4 = C:MM = LM: GOTO 6430: REM   BG COLOR
 6900 I = 1: GOSUB 1000:CF = C: & BA(C):I = 2: GOSUB 1000:C2 = C:I = 3: GOSUB 1000:C3 = C:I = 4: GOSUB 1000:C4 = C:MM = LM: GOTO 6430: REM   Delta remplissage multicolore
 7000 MM = LM: PRINT  CHR$ (7): GOTO 6420: REM   PAS IMPLANTE
 7400  GOSUB 1000:CP = C:MM = LM: GOTO 6430: REM  PEN COLOR
 7500  GOTO 6420: REM   DRAW,DOTS
 7600 FL = 0: GOTO 6420: REM  LINES, FRAMES, BOX, WINDOW, AREA
 8000  HOME : & DI(0): PRINT D$"CATALOG,T$F8": GET A$: & DI(MD):MM = LM: GOTO 6430
 8100  PRINT "Nom du fichier (vide pour annuler):":MM = LM
 8110  INPUT A$: IF  LEN (A$) = 0 THEN 6430
 8120  PRINT "Lecture...": &  LOAD (0,0,A$): GOTO 6430
 8200  PRINT "Nom du fichier (vide pour annuler):":MM = LM
 8210  INPUT A$: IF  LEN (A$) = 0 THEN 6430
 8220  PRINT "Sauvegarde...": ONERR  GOTO 8290
 8230 A$ =  LEFT$ (A$,15): PRINT D$"UNLOCK "A$
 8250  PRINT "Ecraser le fichier "A$" (o/n) ?";: GET B$
 8260  IF B$ <  > "O" THEN 6430
 8270  PRINT D$"DELETE "A$
 8280  &  SAVE (A$): GOTO 6430
 8290  CALL 782: POKE 216,0: IF  PEEK (222) = 6 THEN 8280
 8295  RESUME : REM  Provoque l'erreur si autre que fichier inconnu
