Initial commit
[petittracer.git] / Afficheur.mod
1 (* Programme d'affichage des images du PetitTracer © François Fleuret 1992 *)
2
3 (* $R- $S- $V- $N- $F- On veut que ça aille VITE !!!*)
4 (* sur un 500 de base, du calme François, du calme... *)
5
6 MODULE Afficheur;
7
8 FROM SYSTEM IMPORT          ADR;
9 FROM Arguments IMPORT       NumArgs, GetArg;
10 FROM InOut IMPORT           WriteString, WriteInt, WriteLn;
11 FROM RealInOut IMPORT       ReadReal, WriteReal;
12 FROM Arts IMPORT            TermProcedure, RemoveTermProc;
13 FROM RandomNumber IMPORT    Random;
14
15 FROM DosTracer IMPORT       FICHIER, OuvreFichierEntree, FermeFichier,
16                             RecupereScalaire, RecupereEntier;
17 FROM SortieGraphique IMPORT LargeurImage, HauteurImage, EchelleCouleur,
18                             OuvreGraphique, AttendsSouris, FermeGraphique,
19                             AffichePoint;
20 FROM MathTracer IMPORT      SCALAIRE, Frac;
21
22 VAR
23
24   Flag, NomFichier: ARRAY[0..63] OF CHAR;
25   Aleatoire: BOOLEAN;
26   Longueur: INTEGER;
27
28   LargeurVue, HauteurVue: INTEGER;
29   FichierEntree: FICHIER;
30   xpixel, ypixel: INTEGER;
31   DeltaCouleur, Couleur, p: SCALAIRE;
32   CouleurPoint: INTEGER;
33
34 PROCEDURE Panique;
35 BEGIN
36   FermeGraphique();
37   FermeFichier(FichierEntree);
38 END Panique;
39
40 BEGIN
41
42   WriteString("Afficheur du PetitTracer"); WriteLn;
43   WriteString("© François Fleuret 1992."); WriteLn;
44   WriteString("Cliquez dans la case de fermeture de la fenêtre ");
45   WriteString("(en gris sombre :-) pour"); WriteLn;
46   WriteString("quitter."); WriteLn;
47
48   IF NumArgs()>=1 THEN
49
50     Aleatoire:=FALSE;
51     GetArg(2, Flag, Longueur);
52     IF Flag[0]="a" THEN
53       Aleatoire:=TRUE;
54     END;
55
56     GetArg(1, NomFichier, Longueur);
57     TermProcedure(Panique); (* au cas où un abruti s'énerverait *)
58
59     IF OuvreGraphique() THEN
60
61       FichierEntree:=OuvreFichierEntree(ADR(NomFichier));
62
63       IF FichierEntree#NIL THEN
64
65         LargeurVue:=RecupereEntier(FichierEntree);
66         HauteurVue:=RecupereEntier(FichierEntree);
67
68         WriteString("Largeur: "); WriteInt(2*LargeurVue, 0);
69         WriteString(" Hauteur: "); WriteInt(2*HauteurVue, 0);
70         WriteLn;
71
72         FOR xpixel:=-LargeurVue TO LargeurVue-1 DO
73           p:=100.0*REAL(xpixel+LargeurVue)/REAL(2*LargeurVue);
74           WriteReal(p, 6, 2); WriteString(" % de l'image déja affiché"); WriteLn;
75           FOR ypixel:=-HauteurVue TO HauteurVue-1 DO
76
77             Couleur:=RecupereScalaire(FichierEntree);
78             Couleur:=REAL(EchelleCouleur)*Couleur;
79
80             IF Couleur<0.0 THEN
81               CouleurPoint:=0;
82             ELSE
83               IF Couleur>=REAL(EchelleCouleur)-1.0 THEN
84                 CouleurPoint:=EchelleCouleur-1;
85               ELSE
86                 IF Aleatoire THEN
87                   DeltaCouleur:=Frac(Couleur);
88                   IF Random()<DeltaCouleur THEN
89                     CouleurPoint:=INTEGER(Couleur)+1;
90                   ELSE
91                     CouleurPoint:=INTEGER(Couleur);
92                   END;
93                 ELSE
94                   CouleurPoint:=INTEGER(Couleur);
95                 END;
96               END;
97             END;
98             AffichePoint(xpixel+LargeurImage/2, ypixel+HauteurImage/2, CouleurPoint);
99           END;
100         END;
101       ELSE
102         WriteString("Impossible d'ouvrir le fichier !"); WriteLn;
103       END;
104
105       WriteString("--- Image affichée ---"); WriteLn;
106
107       RemoveTermProc(Panique);
108
109       FermeFichier(FichierEntree);
110       AttendsSouris;
111       FermeGraphique;
112     ELSE
113       WriteString("Impossible d'ouvrir l'écran et la fenêtre d'affichage !");
114       WriteLn;
115     END;
116   ELSE
117     WriteString("USAGE: Afficheur nomfichier.rtr [a]"); WriteLn;
118   END;
119
120 END Afficheur.