#define _C_td3 /* * ---------------------------------------------------------------------------- * * Fichier : td3.c * Langage : C ANSI * Auteur : F. Boyer * Creation : 7 septembre 1997 * ---------------------------------------------------------------------------- * Description : * Programme de gestion d'une machine d'affichage. L'ecran est modelise * par un tableau a 2 dimensions, dans lequel on peut inscrire des * caracteres en positionnant le curseur a une coordonnee donnee. * L'affichage de cet ecran virtuel sur l'ecran de l'ordinateur est une * operation explicite. * ---------------------------------------------------------------------------- * Interventions * >>>>>>>>>>>>> * ---------------------------------------------------------------------------- * Fonctions definies * Locales : * Exportees : estAuDebut, * viderEcran, * affCar, * placerCurs, * avCurs, * aLaLigne, * affDes, * affRect, * affEcran, * main. * * ---------------------------------------------------------------------------- */ /****************************************************************************/ /*------------------- INCLUSION DES INTERFACES SYSTEMES --------------------*/ /****************************************************************************/ #include /****************************************************************************/ /*----------------- INCLUSION DES INTERFACES APPLICATIVES ------------------*/ /****************************************************************************/ #include "td3.h" /****************************************************************************/ /*------------------- CONSTANTES, MACROS & TYPES LOCAUX --------------------*/ /****************************************************************************/ #define HAUTEUR 20 /* nb de lignes de l'ecran */ #define LARGEUR 10 /* nb de colonnes de l'ecran */ /****************************************************************************/ /*------------------- SIGNATURES DES FONCTIONS LOCALES ---------------------*/ /****************************************************************************/ /****************************************************************************/ /*------------------- DEFINITIONS DES VARIABLES LOCALES --------------------*/ /****************************************************************************/ static t_pos Curs; static char Ecran[HAUTEUR][LARGEUR]; /****************************************************************************/ /*------------------- IMPLANTATION DES FONCTIONS LOCALES -------------------*/ /****************************************************************************/ /****************************************************************************/ /*------------------ IMPLANTATION DES FONCTIONS EXPORTEES ------------------*/ /****************************************************************************/ /* * ---------------------------------------------------------------------------- * * Fonction : estAuDebut * Resultat : unsigned short * Parametres : * Nom Type Role * * Description : * retourne vrai si le curseur est en 1ere colonne de la 1ere ligne de l'ecran * ---------------------------------------------------------------------------- */ unsigned short estAuDebut() { return((Curs.col == 0) && (Curs.lig == 0)); } /* * ---------------------------------------------------------------------------- * * Fonction : viderEcran * Resultat : * Parametres : * Nom Type Role * * Description : Vidage de l'ecran (tous les caracteres contiennent un espace) * * ---------------------------------------------------------------------------- */ void viderEcran() { unsigned short i; unsigned short j; Curs.col = 0; Curs.lig = 0; for (i=0; i < HAUTEUR; i++) { for (j=0; j < LARGEUR; j++) affCar(' '); } Curs.col = 0; Curs.lig = 0; } /* * ---------------------------------------------------------------------------- * * Fonction : affCar * Resultat : * Parametres : * Nom Type Role * c char le caractere a afficher * Description : Affiche le caractere donne en parametre a la position * courante du curseur. Le curseur est ensuite place apres le caractere * ---------------------------------------------------------------------------- */ void affCar( char c) { Ecran[Curs.lig][Curs.col] = c; avCurs(); } /* * ---------------------------------------------------------------------------- * * Fonction : placerCurs * Resultat : * Parametres : * Nom Type Role * pos t_pos la position de placement du curseur * Description : * Place le curseur a la position donnee. * ---------------------------------------------------------------------------- */ void placerCurs( t_pos pos) { Curs.col = pos.col; Curs.lig = pos.lig; } /* * ---------------------------------------------------------------------------- * * Fonction : avCurs * Resultat : * Parametres : * Nom Type Role * Description : * Avance le curseur d'une position. * ---------------------------------------------------------------------------- */ void avCurs() { Curs.col = (Curs.col + 1) % LARGEUR; if (Curs.col == 0) /* on est passe a la ligne suivante */ Curs.lig = (Curs.lig + 1) % HAUTEUR; } /* * ---------------------------------------------------------------------------- * * Fonction : aLaLigne * Resultat : * Parametres : * Nom Type Role * Description : * Place le curseur a la 1ere position de la ligne suivante. * ---------------------------------------------------------------------------- */ void aLaLigne() { Curs.lig += 1 % HAUTEUR; Curs.col = 0; } /* * ---------------------------------------------------------------------------- * * Fonction : affDes * Resultat : * Parametres : * Nom Type Role * n unsigned short nb occurrences d'affichage * c char le caractere a afficher * Description : * Affiche n fois le caractere donne, avec deplacement du curseur * ---------------------------------------------------------------------------- */ void affDes( unsigned short n, char c) { unsigned short i; for (i=0; i < n; i++) affCar(c); } /* * ---------------------------------------------------------------------------- * * Fonction : affRect * Resultat : * Parametres : * Nom Type Role * n unsigned short nb lignes du rectangle * m unsigned short nb colonnes du rectangle * c char caractere d'affichage * Description : * Affiche un rectangle de taille n x m, compose du caractere c * ---------------------------------------------------------------------------- */ void affRect( unsigned short n, unsigned short m, char c) { unsigned short i; for (i=0; i < n; i++) { affDes(m,c); aLaLigne(); } } /* * ---------------------------------------------------------------------------- * * Fonction : affTriangle * Resultat : * Parametres : * Nom Type Role * l unsigned short nb lignes du triangle * c char caractere d'affichage * Description : * Affiche un triangle compose de 2l-1 lignes, la ligne centrale comportant * l caracteres. * ---------------------------------------------------------------------------- */ void affTriangle( unsigned short l, char c) { unsigned short i; for (i=1; i < l+1; i++) { affDes(i,c); aLaLigne(); } for (i = l-1; i > 0; i--) { affDes(i,c); aLaLigne(); } } /* * ---------------------------------------------------------------------------- * * Fonction : affEcran * Resultat : * Parametres : * Nom Type Role * Description : * Affiche l'ecran virtuel sur l'ecran de l'ordinateur * ---------------------------------------------------------------------------- */ void affEcran() { unsigned short i; unsigned short j; printf("Ecran : \n"); for (i=0; i < HAUTEUR; i++) { for (j=0; j < LARGEUR; j++) printf("%c", Ecran[i][j]); printf("\n"); } } /* * ---------------------------------------------------------------------------- * * Fonction : main * Resultat : int Code d'erreur commande. * Parametres : * Nom Type Role * * Description : * Point d'entree du programme "td3" obtenu par compilation du fichier * "td3.c" (gcc -o td3 td3.c). Uniquement utilise pour les tests. * * ---------------------------------------------------------------------------- */ int main() { printf("Debut du test\n"); viderEcran(); affEcran(); affDes(4,'*'); affEcran(); viderEcran(); affRect(4,6,'*'); affEcran(); viderEcran(); affTriangle(4,'*'); affEcran(); return(0); }