Cours 13T
Langage C et Gestion des Entres/Sorties
Rsum de Thorie
Version prliminaire
Deuxime Anne
Programme de Formation des Techniciens
Spcialiss en lectronique
DIRECTION DE LA RECHERCHE ET INGENIERIE DE LA FORMATION
Septembre 1996
Rsum de Thorie
RDACTION
Robert Pesant
DESSINS ET CONCEPTION GRAPHIQUE
Robert Pesant
RVISION TECHNIQUE
Robert Pesant
RVISION LINGUISTIQUE
Franois Gaudreau
COMMISSION DE VALIDATION
Formateurs de lOFPPT
Projets
Page 2
OFPPT/TECCART
Rsum de Thorie
Projets
Page 3
OFPPT/TECCART
Projets
Compilation individuelle
Introduction
Jusqu' maintenant, nos programmes ont t constitus d'un seul fichier source xxx.C,
comprenant toutes les dfinitions de nos fonctions.
Il est toutefois possible, avec Borland C++, de sparer le programme en plusieurs fichiers
sources xxx.C contenant chacun une ou plusieurs fonctions. Ces fichiers pourront tre compils
individuellement et lis ensemble pour former le programme excutable. Il y aura autant de
fichiers objets xxx.OBJ qu'il y a de fichiers sources xxx.C, mais un seul fichier excutable
xxx.EXE.
Avantages de la compilation individuelle
La compilation individuelle de plusieurs fichiers sources mne une programmation modulaire.
Elle est responsable d'une grande conomie de temps la compilation, surtout lorsque le
programme est considrable. Les fichiers sources, dont la mise au point est termine, n'ont plus
tre recompils durant le dveloppement du reste du programme.
Enfin, cette technique de programmation favorise l'utilisation de fonctions disponibles sous forme
de banques de fichiers sources xxx.C, de banques de fichiers objets xxx.OBJ ou de bibliothques
xxx.LIB.
De l'dition l'excution, en projet
L'environnement intgr de Borland C++ permet de dfinir un projet l'aide des options du
menu Project. On pourra ouvrir une fentre Project o l'on rassemblera les noms de tous les
fichiers qui devront tre compils individuellement et lis ensembles pour produire le fichier
excutable du programme. Les dtails de cette technique seront dvoils plus loin dans ce
chapitre.
Pour l'instant, reportez-vous la Figure 9 -1. Les tapes menant de l'dition l'excution en
projet sont fondamentalement les mmes que pour un fichier xxx.C unique.
l'tape de l'Edition, l'usager pourra rdiger et sauvegarder tous ses fichiers sources l'aide de
l'diteur de Borland C++, comme auparavant. Toutefois, s'il a, sa disposition, une banque de
fichiers sources utilitaires, il pourra les importer dans le rpertoire de son application en vue de
l'tape suivante.
L'tape de Compilation produira autant de fichiers xxx.OBJ qu'il y a de fichiers xxx.C, ceux de
l'usager et ceux qu'il vient d'importer. Si l'usager veut utiliser des fichiers objets xxx.OBJ ou des
fichiers bibliothques xxx.LIB qu'il a en sa possession, il devra galement les importer dans le
rpertoire de l'application, en vue de l'dition des liens. Ces fichiers objets et bibliothques
peuvent tre de provenances diverses: proprit de l'usager, change avec d'autres programmeurs,
achat chez un manufacturier, achat d'une disquette accompagnant une publication technique.
Enfin, l'Edition des liens gnrera le fichier excutable xxx.EXE du projet.
Les informations relatives au projet pourront tre sauves dans le rpertoire de l'application en
pointant l'aide d'un [X] les options Desktop et Project de la commande Options/Save. Les
deux fichiers obtenus par cette intervention seront respectivement xxx.DSK et xxx.PRJ.
tapes
Organes logiciels
Fichiers gnrs
Fichiers externes
Source en
C
avec main()
xxx.C
(#1)
Fichiers d'en-tte
(Header Files)
xxx.H
diteur Intgr
(de type
WordStar)
1. dition
Prprocesseur et
Compilateur
2. Compilation
diteur de liens
(Linker)
3. dition des
liens
Source en
C
sans main()
xxx.C
(#2)
Source en
C
Import
xxx.C
(#3)
Code Objet
xxx.OBJ
(#1)
Code Objet
Import
xxx.OBJ
Code Objet
xxx.OBJ
(#2)
Code Objet
xxx.OBJ
(#3)
Bibliothque
Importe
xxx.LIB
Bibliothque
Standard
xxx.LIB
Code excutable
xxx.EXE
DOS
(Charger et
excuter)
4. Excution
Note 1
Note 2
: Tous les fichiers avec encadrs ombrags peuvent tre runis dans le projet.
F I G U R E 9-1: D E
xxx.PRJ
xxx.DSK
L ' D I T I O N L ' E X C U T I O N , E N P R OJ E T
Pour se familiariser avec le contenu de ces deux fichiers, revoyons la configuration de Borland
C++ suggre au chapitre 1. La sauvegarde de cette configuration a cr trois fichiers dans le
rpertoire C:\TC\BIN: TCCONFIG.TC, TCDEF.DPR et TCDEF.DSK.
TCCONFIG.TC contient les informations globales de l'environnement intgr de Borland C++
incluant:
1.
les macros de l'diteur de texte;
2.
les options de l'diteur: mode d'insertion, mode de retrait automatique (autoindent mode),
usage du caractre de tabulation, etc.;
3.
la configuration de la souris;
4.
les drapeaux de sauvegarde automatique.
Le deuxime fichier, TCDEF.DPR, contient:
5.
les options compiler, linker, make et librarian;
6.
les chemins de rpertoires.
Enfin, TCDEF.DSK renferme les informations concernant:
7.
l'agencement des fentres sur le bureau (desktop); l'cran est considr comme un
bureau sur lequel sont dposs les documents et les outils de travail, c'est--dire
les fentres et la barre de menus);
8.
l'tat de chaque fentre: position du curseur, mode d'insertion, etc.;
9.
le contenu de la fentre du presse-papier (Clipboard);
10. le contenu de la fentre de surveillance (Watch);
11. les points d'arrt.
Ces trois fichiers sont utiliss par Borland C++ lorsque nous rdigeons un programme l'aide
d'un fichier source unique. Par contre, lorsqu'un programme est bti en projet, xxx.PRJ et
xxx.DSK remplacent respectivement TCDEF.DPR et TCDEF.DSK, les deux fichiers par dfaut.
Ils contiennent les mmes donnes qui peuvent tre modifies pour chaque projet. Le fichier de
projet xxx.PRJ contient en plus la liste des noms des fichiers de la fentre Project.
Fichiers d'un programme rdig en projet
La Tableau 9 -1 dresse la liste de tous les fichiers qui pourront tre impliqus dans la ralisation
d'un programme en projet.
T AB L E AU 9- 1: L E S
Rpertoire
Application
Output
(OBJ_EXE)
F I C H I E R S D ' U N P R O G R AM M E R D I G E N P R O J E T
Fichiers
Sources (xxx.C)
Den-tte (xxx.H)
Sources imports (xxx.C)
Den-tte pour sources imports (xxx.H)
Objets imports (xxx.OBJ)
Den-tte pour objets imports (xxx.H)
Bibliothques importes (xxx.LIB)
Den-tte pour bibliothques importes (xxx.H)
Projet (xxx.PRJ)
Bureau (xxx.DSK)
Objets (xxx.OBJ) de tous les sources (xxx.C)
Excutable unique du projet (xxx.EXE)
Optionel
Non
Oui
Origine
Usager.
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Oui
Usager.
Non
Non
Compilation.
dition des liens.
Dans le rpertoire d'application, se trouvent tous les fichiers rdigs ou imports par l'usager. Les
noms de tous les fichiers xxx.C, xxx.OBJ et xxx.LIB devront tre ajouts au fichier projet
xxx.PRJ. Attention! Il ne faut pas inscrire les noms des fichiers d'en-tte xxx.H dans un fichier
projet xxx.PRJ. Les fichiers d'en-tte doivent toujours tre appels par une directive #include
dans un fichier source xxx.C.
Aprs la compilation et l'dition des liens, le rpertoire d'Output de l'usager contiendra le fichier
excutable xxx.EXE ainsi que les fichiers objets xxx.OBJ correspondant aux fichiers sources
xxx.C du projet.
Attention! Si vous oubliez de sauvegarder les fichiers xxx.PRJ et xxx.DSK, vous devrez repartir
le projet zro lors de la prochaine session de travail. Ceci implique que vous devrez reconstituer
le contenu du projet et ouvrir, sur le bureau, toutes les fentres des fichiers que vous voulez
diter.
3.
4.
5.
6.
7.
Nous avons choisi, pour cette application, de travailler avec deux fichiers secondaires: un
fichier d'entre de donnes au clavier, LIRE_KB.C, et un fichier de sortie l'cran,
AFFI_SCR.C. Il aurait t possible de crer un troisime fichier source, CALCUL.C,
pour contenir la fonction mise_a_echelle(). C'est l'usager de dcider d'un compromis
entre les deux extrmes: avoir un seul fichier source contenant toutes les fonctions ou
rdiger un fichier source par fonction. Avec un peu d'exprience, le gros bon sens dictera
la meilleure faon de procder.
8.
Vous pouvez consulter les listages documents des fichiers du projet la fin des tapes de
la procdure.
9.
F I G U R E 9-2: D I S P O S I T I O N
10.
D E S F I C H I E R S D U P R OJ E T
F O NC_ P R O . P RJ
S U R L E B U R E AU
F I G U R E 9-3: O U V E R T U R E
11.
DE LA FENTRE DU PROJET
FO NC_ P RO . P RJ
On doit ensuite dresser la liste de tous les fichiers sources dans la fentre Project l'aide
de la commande Project/Add item... (c.f. Figure 9 -4). Les fichiers d'en-tte ne doivent
jamais faire partie de la liste d'un projet: il doivent tre appels par la directive
#include.
FO NC_ P RO . P RJ
12.
L'dition des liens peut tre ralise de deux faons diffrentes. Avec la commande
Compile/Make, seuls les fichiers qui ont t modifis sont compils avant l'dition des
liens. Par contre, avec un Compile/Build all, tous les fichiers sources sont
inconditionnellement recompils avant l'dition des liens. Les rsultats de la ralisation du
projet sont affichs dans la fentre projet, comme la Figure 9 -5.
F I G U R E 9-5: R S U LTAT S
13.
D E L A R AL I S AT I O N D U P R OJ E T
F I G U R E 9-6: S AU V E G AR D E
DU PROJET
14.
15.
FONC_PRO.H
==========
Robert Pesant
15/03/1993
25/04/1995
V1.2
COURS_13T
\CHAP.009\FONC_PRO\FONC_PRO.H
Fichier d'en-tte pour le projet FONC_PRO.PRJ
symboliques --------------------------------------- */
""
" Programme de dmonstration "
" avec prsentation couleur "
" et compilation en projet
"
""
#define
#define
#define
#define
MENU_6
MENU_7
MENU_8
MENU_9
#define
#define
#define
#define
#define
#define
#define
RETOUR
ASCII_1
ASCII_2
ECHELLE_1
ECHELLE_2
ECHELLE_3
ECHELLE_4
#define
#define
#define
#define
CODE_ASCII
TX_4_20_MA
ESC
CLE_INTERDITE
'1'
'2'
27
!((choix == '1') || (choix == '2') || (choix == ESC))
#define LENT
#define RAPIDE
< 1 >"
< 2 >"
<Esc>"
< * >"
0
1
/* Programme:
* =========
*
* Auteur:
* Date:
* Rvision:
* Version:
*
* Volume:
* Fichier:
*
* Description:
*
* Projet:
*
*
*
*
*/
#include
#include
#include
#include
FONC_PRO.C
==========
Robert Pesant
15/03/1993
25/04/1995
V1.2
COURS_13T
\CHAP.009\FONC_PRO\FONC_PRO.C
Fichier source principal du projet FONC_PRO.PRJ
FONC_PRO.PRJ se compose de:
-------------------------FONC_PRO.C
LIRE_KB.C
AFFI_SCR.C
<conio.h>
<string.h>
<process.h>
"fonc_pro.h"
void main(void)
{
int choix, ascii_min, ascii_max;
double courant, temperature;
textbackground(CYAN);
clrscr();
menu();
do
{
choix = get_choix();
textcolor(WHITE);
/* En effaant toutes les lignes de 15 25 aprs l'nonc
textcolor(WHITE);, on s'assure que le curseur sera de couleur
WHITE s'il apparat dans cette rgion de l'cran. */
clr_lines(15, RAPIDE);
switch(choix)
{
case CODE_ASCII:
gotoxy(1, 15); cprintf(ASCII_1);
/* Il faut utiliser getch() au lieu de fflush(stdin)
pour vider le buffer du clavier si l'usager tape
des caractres non conformes au format de cscanf(). */
cscanf("%d", &ascii_min); getch();
gotoxy(41, 15); cprintf(ASCII_2);
cscanf("%d", &ascii_max); getch();
affi_ascii(ascii_min, ascii_max);
break;
case TX_4_20_MA:
gotoxy(1, 15); cputs(ECHELLE_1);
gotoxy(1, 16); cputs(ECHELLE_2);
gotoxy(1, 18); cprintf(ECHELLE_3);
cscanf("%lf", &courant); getch();
gotoxy(1 + strlen(ECHELLE_3), 18);
cprintf("%6.2f mA", courant);
if((courant < 4.0) || (courant > 20.0))
{
cputs(" (...???)");
}
temperature = mise_a_echelle(courant, -25.0, 75.0);
gotoxy(1, 19); cprintf(ECHELLE_4);
cprintf("%6.2f C", temperature);
break;
case ESC:
textbackground(BLACK);
textcolor(LIGHTGRAY);
clrscr(); exit(0);
}
textcolor(BLINK + BLUE);
gotoxy(41, 25);
/* Fonction:
* ========
*
* Description:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* Paramtres:
*
*
*
* Valeur/retour:
*/
mise_a_echelle()
================
Effectue la mise l'chelle d'un transmetteur 4-20 mA
en fonction des portes minimale et maximale de son
tendue de mesure.
Exemple: Transmetteur de temprature 4-20 mA dont l'tendue
de mesure est comprise entre -25 C et +75 C.
20 mA ----------- 75 C
<-- porte maximale
B
I ----------- T
<-- grandeur mesure
C
4 mA ----------- -25 C <-- porte minimale
Calcul de mise l'chelle:
A/B = C/D
(T - (-25))/(75 - (-25)) = (I - 4)/(20 - 4)
(T + 25)/100 = (I - 4)/16
return(grandeur);
/* Titre:
* =====
*
* Auteur:
* Date:
* Rvision:
* Version:
*
* Volume:
* Fichier:
*/
#include <conio.h>
#include "fonc_pro.h"
/* Fonction:
* ========
*
* Description:
*
*
* Paramtres:
*
* Valeur/retour:
*/
get_choix()
===========
Attend et retourne le choix de l'usager.
Les touches interdites du clavier sont verrouilles.
1. Aucun
1. Le code ASCII du choix de l'usager
int get_choix(void)
{
int choix;
textcolor(BLACK);
do
{
gotoxy(63, 11); putch('*'); gotoxy(63, 11);
choix = getche();
}
while(CLE_INTERDITE);
}
return(choix);
/* Titre:
* =====
*
* Auteur:
* Date:
* Rvision:
* Version:
*
* Volume:
* Fichier:
*/
#include
#include
#include
#include
<conio.h>
<string.h>
<dos.h>
"fonc_pro.h"
/* Fonction:
* ========
*
* Description:
*
* Paramtres:
*
* Valeur/retour:
*/
menu()
======
Affiche le menu du programme
1. Aucun
1. Aucune
void menu(void)
{
textcolor(RED);
gotoxy(41 - strlen(MENU_1
gotoxy(41 - strlen(MENU_2
gotoxy(41 - strlen(MENU_3
gotoxy(41 - strlen(MENU_4
gotoxy(41 - strlen(MENU_5
)/2,
)/2,
)/2,
)/2,
)/2,
1);
2);
3);
4);
5);
cputs(MENU_1
cputs(MENU_2
cputs(MENU_3
cputs(MENU_4
cputs(MENU_5
);
);
);
);
);
textcolor(YELLOW);
gotoxy(41 - strlen(MENU_6
gotoxy(41 - strlen(MENU_7
gotoxy(41 - strlen(MENU_8
gotoxy(41 - strlen(MENU_9
/* Fonction:
* ========
*
* Description:
*
*
* Paramtres:
*
*
* Valeur/retour:
*/
);
);
);
);
clr_lines()
===========
Efface le bas de l'cran en faisant remonter le texte
partir de la ligne choisie par l'usager.
1. La ligne partir de laquelle on efface l'cran.
2. La vitesse d'excution de l'effacement: LENT = 0, RAPIDE = 1.
1. Aucune.
gotoxy(1, y);
for(i=y; i<=25; i++)
{
delline();
if(vitesse_execution == LENT)
{
delay(50);
}
}
/* Fonction:
* ========
*
* Description:
*
*
* Paramtres:
*
*
* Valeur/retour:
*/
affi_ascii()
============
Affiche les codes ASCII demands par l'usager
et compris entre 0 et 255.
1. Le code ASCII initial qui doit tre affich.
2. Le code ASCII final qui doit tre affich.
1. Aucune.
gotoxy(1, 17);
if((code_min < 0) || (code_min > 255) || (code_max < 0) || (code_max > 255))
{
cputs("ERREUR!!!\n\r");
cputs("Au moins un des deux codes n'est pas compris entre 0 et 255.\n\r");
cputs("Vous devez recommencer...");
return;
}
if(code_max < code_min)
{
cputs("ERREUR!!!\n\r");
cputs("Le code final est plus petit que le code initial.\n\r");
cputs("Vous devez recommencer...");
return;
}
for(i = code_min; i <= code_max ; i++)
{
putch(i); putch(' ');
}
d'Output,
2.
3.
4.
F I G U R E 9- 7: P R O J E T F O NC_ P R O . P RJ
5.
C O N S T R U I T AVE C U N F I C H I E R OB J E T
Faites l'essai de cette technique. Vous constaterez que le programme obtenu est parfaitement
identique celui ralis avec seulement des fichiers sources dans le projet.
Programme avec des fichiers sources imports: CLKCHASR.PRJ
Le programme MODEL_2B.C du chapitre 5 a t modifi pour tirer profit d'une banque de
fonctions concernant le curseur et l'horloge. En plus de faire fonctionner le mme chenillard et
d'afficher le code ASCII des touches presses, nous voulions afficher continuellement l'heure du
systme et faire disparatre le curseur pour liminer le scintillement. Voici comment nous avons
procd.
1.
2.
Pour mieux structurer la fonction main(), les diffrentes sections du programme ont t
regroupes en fonctions. On a choisi, dans cet exemple, de conserver toutes ces fonctions
l'intrieur de CLKCHASR.C.
3.
4.
5.
6.
7.
8.
9.
Une classe de stockage dtermine comment une variable est sauvegarde en mmoire.
Nous avons appris qu'une variable de classe automatique est sauvegarde sur la pile du
systme. Elle cesse donc d'exister la fin de l'excution de la fonction o elle est dfinie
localement. Ici, la fonction chaser() fait avancer le chenillard d'une position l'cran,
chaque fois qu'on l'appelle. Pour se rappeler de la dernire coordonne en x de celui-ci,
elle ne peut donc pas utiliser une variable de classe automatique. Il faut donc changer de
classe de stockage. Le mot-cl static, utilis dans une dfinition de variable, force le
compilateur lui rserver une zone de stockage en RAM: son existence est donc assure
pour toute l'excution du programme. La variable x, dfinie par l'nonc static int x =
37;, possde les caractristiques suivantes:
La variable x est dite locale, c'est--dire invisible pour les autres fonctions, car elle
est dfinie l'intrieur du bloc d'instructions de chaser().
La variable x n'est pas dtruite la fin de l'excution de chaser(), car elle est de
classe statique, c'est--dire stocke en RAM.
Au premier appel de chaser(), la variable x est initialise 37.
Pour tous les appels subsquents, on retrouve dans x la dernire valeur que la
fonction chaser() lui a attribue.
Enfin, un peu de couleur agrmente le tout.
10.
11.
La Figure 9 -8 montre tous les fichiers qui ont t runis dans CLKCHASR.PRJ l'aide
de la commande Project/Add item.... Il sagit de CLKCHASR.C, CURS_UTL.C et
HEUR_UTL.C.
F I G U R E 9-8: L E
12.
PROJET
CLKCHAS R . P RJ
AVE C D E S B AN Q U E S D E F ON C T I O N S
/* Fich. d'entte:
* ===============
*
* Auteur:
* Date:
* Rvision:
* Version:
*
* Volume:
* Fichier:
*
* Description:
*/
CLKCHASR.H
==========
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
""
"
Chaser, Horloge et Curseur
"
""
"
Projet conu avec des
"
" banques de fonctions importes "
""
""
"
CHASER
"
""
" "
""
"Appuyez sur une touche (<Esc> pour quitter) ..."
"Aucune touche date ..."
"La dernire touche enfonce est: [ 0 * ] (code tendu) "
"La dernire touche enfonce est: [ * ] (code standard)"
void
void
void
void
MENU_1
MENU_2
MENU_3
MENU_4
MENU_5
MENU_6
MENU_7
MENU_8
MENU_9
MENU_10
MENU_11
MENU_12
MENU_13
MENU_14
MENU_15
menu
code_standard
code_etendu
chaser
Robert Pesant
16/03/1993
16/03/1993
V1.0
COURS_13T
\CHAP.009\CLKCHASR\CLKCHASR.H
Fichier d'en-tte pour le projet CLKCHASR.PRJ
(void);
(int c);
(int c);
(void);
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Programme:
=========
CLKCHASR.C
==========
Auteur:
Date:
Rvision:
Version:
Robert Pesant
16/03/1993
16/03/1993
V1.0
Volume:
Fichier:
COURS_13T
\CHAP.009\CLKCHASR\CLKCHASR.C
Description:
Projet:
*/
#include
#include
#include
#include
#include
#include
#include
<conio.h>
<string.h>
<process.h>
<dos.h>
"heur_utl.h"
"curs_utl.h"
"clkchasr.h"
void main(void)
{
int touche;
textbackground(LIGHTGRAY);
/* Fait disparatre le curseur pour liminer le scintillement */
cursoff();
clrscr();
menu();
do
{
do
{
chaser();
/* Affiche l'heure partir des coordonnes (37,21) */
heure_xy(37,21);
}
while(!kbhit());
touche = getch();
switch(touche)
{
case 27:
/* Fait rapparatre le curseur avant de sortir au DOS */
curson();
textcolor(LIGHTGRAY);
textbackground(BLACK);
clrscr();
exit(0);
break;
}
while(1);
case 0:
touche = getch();
code_etendu(touche);
break;
default:
code_standard(touche);
}
/* Fonction:
* ========
*
* Description:
*
* Paramtres:
*
* Valeur/retour:
*/
menu()
======
Affiche le menu du programme
1. Aucun
1. Aucune
void menu(void)
{
textcolor(YELLOW);
gotoxy(41 - strlen(MENU_1
gotoxy(41 - strlen(MENU_2
gotoxy(41 - strlen(MENU_3
gotoxy(41 - strlen(MENU_4
gotoxy(41 - strlen(MENU_5
gotoxy(41 - strlen(MENU_6
)/2,
)/2,
)/2,
)/2,
)/2,
)/2,
1);
2);
3);
4);
5);
6);
textcolor(RED);
gotoxy(41 - strlen(MENU_7 )/2,
gotoxy(41 - strlen(MENU_8 )/2,
gotoxy(41 - strlen(MENU_9 )/2,
gotoxy(41 - strlen(MENU_10)/2,
gotoxy(41 - strlen(MENU_11)/2,
9);
10);
11);
12);
13);
cputs(MENU_1
cputs(MENU_2
cputs(MENU_3
cputs(MENU_4
cputs(MENU_5
cputs(MENU_6
);
);
);
);
);
);
cputs(MENU_7 );
cputs(MENU_8 );
cputs(MENU_9 );
cputs(MENU_10);
cputs(MENU_11);
textcolor(BLACK);
gotoxy(41 - strlen(MENU_12)/2, 16); cputs(MENU_12);
textcolor(BLUE);
gotoxy(41 - strlen(MENU_13)/2, 18); cputs(MENU_13);
/* Fonction:
* ========
*
* Description:
*
* Paramtres:
*
* Valeur/retour:
*/
code_etendu()
=============
Affiche le code ASCII tendu de la touche presse.
1. Le code ASCII tendu de la touche presse.
1. Aucune
void code_etendu(int c)
{
textcolor(BLUE);
gotoxy(41 - strlen(MENU_14)/2, 18); cputs(MENU_14);
gotoxy(50,18); putch(c);
sound(350); delay(100);
sound(450); delay(100);
nosound();
}
/* Fonction:
* ========
*
* Description:
*
* Paramtres:
*
* Valeur/retour:
*/
code_standard()
===============
Affiche le code ASCII standard de la touche presse.
1. Le code ASCII standard de la touche presse.
1. Aucune
void code_standard(int c)
{
textcolor(BLUE);
gotoxy(41 - strlen(MENU_15)/2, 18); cputs(MENU_15);
gotoxy(49,18); putch(c);
sound(300); delay(100);
sound(400); delay(100);
nosound();
}
/* Fonction:
* ========
*
* Description:
*
* Paramtres:
*
* Valeur/retour:
*/
chaser()
========
Fait avancer d'une position le "bit" du chenillard (chaser).
1. Aucun
1. Aucune
void chaser(void)
{
static int x = 37;
textcolor(RED);
if(x == 37)
{
gotoxy(44,12);
}
else
{
gotoxy(x-1,12);
}
putch('');
gotoxy(x,12); putch(' ');
x = (x == 44) ? 37: x+1;
delay(100);
F I G U R E 9- 9: E X C U T I O N
DE
CLKCHAS R . E X E
2.
3.
4.
5.
F I G U R E 9- 10: L E
6.
PROJET
CLKCHAS R . P RJ
AVE C B I B L I O T H Q U E D E F O N C T I ON S
Essayez cette technique. Vous obtiendrez le mme programme qu' la section prcdente.