Projet

Général

Profil

SOP 001-Programmation » Historique » Version 24

Patrice Nadeau, 2018-03-24 16:59

1 17 Patrice Nadeau
# SOP 001-Programmation
2 1 Patrice Nadeau
3
Mes standards autant au niveau du style que de la documentation.
4
5 11 Patrice Nadeau
La plate-forme (logiciel et matériel) est documenté dans le [[SOP_002-Environnement_informatique]].
6 1 Patrice Nadeau
7
{{lastupdated_at}} {{lastupdated_by}}
8
9
---
10
11
{{toc}}
12
13 17 Patrice Nadeau
## Diagrammes
14 1 Patrice Nadeau
15
Les représentations des différents processus d’un programme ou d’un circuit.
16
17
Les diagrammes DOIVENT être faits avec le logiciel Dia.
18
Ils PEUVENT être exportés en d’autre format.
19
20 17 Patrice Nadeau
### LibreOffice Draw
21 14 Patrice Nadeau
22
Icônes :
23 17 Patrice Nadeau
24 15 Patrice Nadeau
* Cisco : http://www.cisco.com/web/about/ac50/ac47/3015_jpeg.zip
25 16 Patrice Nadeau
* http://www.vrt.com.au/downloads/vrt-network-equipment ou http://extensions.libreoffice.org/extension-center/vrt-network-equipment/
26 14 Patrice Nadeau
27 17 Patrice Nadeau
## Système de gestion de version
28 1 Patrice Nadeau
29
Le logiciel "Git":http://www.git-scm.com/ DOIT être utilisé.
30
31
La version DOIT être en format: _majeur.mineur.revision_.
32
Les nombres majeur, mineur NE DOIVENT PAS contenir de zéro non significatif et DEVRAIT se limiter à deux chiffres.
33
34
Ex.
35
> Version 1.2.06
36
37
Les modifications DOIVENT se faire avec _git commit_, de la manière suivante :
38 17 Patrice Nadeau
39 1 Patrice Nadeau
* nom du fichier modifié,
40
* 1 espace,
41
* nom de l’item modifié entre parenthèses,
42
* un deux- points (<notextile>:</notextile>) sans espace avec l’item précédent,
43
* 1 espace,
44
* le texte du changement en anglais, commençant par une majuscule, au présent,
45
* un point (.)
46
47
Ex. :
48
> Modification ajouté manuellement
49
<pre><code class="bash">
50
git commit -m "usart.c (usart_Init): Add a new variable ctr."
51
</code></pre>
52
> Modification par un éditeur texte
53
<pre><code class="bash">
54
git commit
55
</code></pre>
56
57 17 Patrice Nadeau
Si les commit sont fait sans l’option **-m**, chaque fichier DOIT être séparé par une ligne vide.
58 1 Patrice Nadeau
59 17 Patrice Nadeau
## Code source
60 1 Patrice Nadeau
61
Les différents type de langage et de script décrit dans ce SOP.
62
63 17 Patrice Nadeau
### Généralités
64 1 Patrice Nadeau
65 17 Patrice Nadeau
#### Langue
66 1 Patrice Nadeau
67
La langue (macros, variables, fonctions, commentaires, etc...) DOIT être l’anglais.
68
69 17 Patrice Nadeau
#### Commentaires
70 1 Patrice Nadeau
71
Les commentaires DOIVENT être :
72 17 Patrice Nadeau
73 1 Patrice Nadeau
* sur la ligne précédent l’item à documenter
74
* en minuscules et commencer par une majuscule
75
76
77 17 Patrice Nadeau
#### Nombre magique
78 1 Patrice Nadeau
79 17 Patrice Nadeau
L’utilisation de [nombre magique](:http://en.wikipedia.org/wiki/Magic_number_%28programming%29#Unnamed_numerical_constants)
80
ne DOIT PAS être utilisé directement dans le code.
81 1 Patrice Nadeau
Il DOIVENT être définis dans une macro ou une variable globale.
82
83 17 Patrice Nadeau
## C
84 1 Patrice Nadeau
85
Le langage C, version C99 (ISO/IEC 9899:1999) utilisé avec le compilateur GCC.
86
87 17 Patrice Nadeau
### Commentaires
88 1 Patrice Nadeau
89
Les commentaires ne devant pas être inclus dans une documentation, DOIVENT être de style « C » :
90
91
<pre><code class="c">
92 17 Patrice Nadeau
	/* Une seule ligne... */
93 1 Patrice Nadeau
94 17 Patrice Nadeau
	...
95 1 Patrice Nadeau
96 17 Patrice Nadeau
	/*
97
	* Sur
98
	* plusieurs
99
	* lignes
100
	*/
101 1 Patrice Nadeau
</code></pre>
102
103 17 Patrice Nadeau
### Doxygen
104 1 Patrice Nadeau
105 17 Patrice Nadeau
Chaque item DOIT être documentés de manière à générer une documentation avec le logiciel [Doxygen](http://www.stack.nl/~dimitri/doxygen/index.html).
106 1 Patrice Nadeau
107
Seulement les items définis dans les fichiers d’en-tête sont documentés par défaut.
108
Un commentaire Doxygen commence par *<notextile> /** </notextile>* , le compilateur le comprenant comme un commentaire ordinaire.
109
110
Les règles typographiques du [[SOP_000-Documentation]] s’appliquent :
111 17 Patrice Nadeau
112 1 Patrice Nadeau
* Gras (*@b*) : Items devant être inscrit tel quel.
113
* Italique & emphase (*@e*) : Items à remplacer par un choix ou nécessitant une attention particulière.
114
115
> Doxygen version &ge; 1.8.8 : Le bogue "737472":https://bugzilla.gnome.org/show_bug.cgi?id=737472 oblige de forcer le langage de la fonction dans l’exemple si on ne veut pas de numéro de ligne.
116
117
Les items DOIVENT être inscrit dans cet ordre :
118 17 Patrice Nadeau
119 6 Patrice Nadeau
<pre><code class="c">
120 17 Patrice Nadeau
	/**
121
	* @brief Short description
122
	* @param[in,out] var Description. @n Possible values :
123
	* − @b value1
124
	* − @b value2
125
	* @return
126
	* @retval @b value Description
127
	* @par Example :
128
	* Example Title
129
	* @code{.c}
130
	* ...
131
	* @endcode
132
	* @pre Requirements
133
	* @post Changes after the call to this function
134
	* @see See also ...
135
	* @note
136
	* @warning
137
	* @bug
138
	* @todo
139
	*/
140 1 Patrice Nadeau
</code></pre>
141
142
Des *@todo*, *@warning* et *@bug* supplémentaires PEUVENT être ajoutés dans le code.
143
L’item *@brief* DOIT toujours exister.
144
145 17 Patrice Nadeau
### Code
146 1 Patrice Nadeau
147
Le code est dans le style K&R, variante 1TBS
148 17 Patrice Nadeau
149 1 Patrice Nadeau
* Le « tab » DOIT être équivalent à 4 espaces.
150
* Le « backslah » DOIT être utilisé pour les lignes de plus de 80 caractères.
151
* Une instruction par ligne.
152
* Un espace avant et après un opérateur sauf pour les opérateurs « "unary":http://en.wikipedia.org/wiki/Unary_operation ».
153
154
One True Brace Style
155
<pre><code class="c">
156
int fonction (void)
157 17 Patrice Nadeau
	{
158
			int x;
159
			/* the comment goes here, before the loop */
160
			if (var != 1) {
161
					x = x + 1;
162
					y++;
163
					printf("This is a long\
164
					line that should be splitted");
165
			} else {
166
					/** @warning this is a Doxygen warning */
167
					x--;
168
			}
169
			return(0);
170
	}
171 1 Patrice Nadeau
</code></pre>
172
173 17 Patrice Nadeau
#### Fichier entête
174 1 Patrice Nadeau
175
Avertissement
176
>Le gabarit template.h DOIT être utilisé.
177
178
Les fichier « header » DOIVENT contenir les déclarations des fonctions, macros et la partie « mainpage » de Doxygen.
179
180
Le nom du fichier DOIT être composé de la manière suivante :
181 17 Patrice Nadeau
182 1 Patrice Nadeau
* en minuscule
183
* 8 caractères maximum
184
* l’extension DOIT être *.h*
185
186
Une définition macro DOIT être faite pour éviter de ré-inclure le fichier.
187
La macro DOIT être dans le format *_fichier_h*
188
<pre><code class="c">
189
#ifndef _usart_h
190
#define _usart_h
191 17 Patrice Nadeau
	...
192 1 Patrice Nadeau
#endif /*_usart.h*/
193
</code></pre>
194
195 17 Patrice Nadeau
#### Fichier source
196 1 Patrice Nadeau
197
Le nom du fichier DOIT être composé de la manière suivante :
198
* en minuscule
199
* 8 caractères maximum
200
* l’extension DOIT être *.c*
201
202 17 Patrice Nadeau
#### Librairies
203 1 Patrice Nadeau
204
Fichiers comprenant plusieurs déclarations et définitions reliés entre eux.
205
206
* Le nom DOIT respecter les standards ([[SOP_001-Programmation#Fichiers-Entêtes|1]] & [[SOP_001-Programmation#Fichiers-Sources|2]]) et être significatifs.
207
* Un fichier d’entête DOIT toujours exister.
208
* Les items sont précédés du nom de la librairie (minuscule) et séparés par un « underscore » (_).
209
210
L’utilisation de macros DOIT être utilisé au lieu de constates globales.
211
Il NE DEVRAIT PAS exister de de variables globales.
212
213 17 Patrice Nadeau
#### Déclarations locales
214 1 Patrice Nadeau
215
Une déclaration n’ayant qu’une visibilité locale DOIT être précédé d’un « underscore » (_) et être de classe *static*.
216
217
<pre><code class="c">
218
/**
219
* @brief Local function
220
**/
221
static void _LocalFunc(void)
222
{
223
...
224
return;
225
}
226
</code></pre>
227
228 17 Patrice Nadeau
#### Items désuets
229 1 Patrice Nadeau
230
Les déclarations ne devant plus être utilisés, DOIVENT générer un message lors de la compilation (*-Wall*) si un appel est effectué.
231
232
L’attribut *<notextile> __attribute__((deprecated)) </notextile>* DOIT être ajouté à la déclaration.
233
La documentation DOIT indiquer les substituts à utiliser.
234
<pre><code class="c">
235
/**
236
* @brief OldFunction
237
* @detail will generate a warning if used
238
* @see @b NewFunction
239
*/
240
int OldFunction(void) __attribute__((deprecated));
241
</code></pre>
242
243 17 Patrice Nadeau
#### Constantes
244 1 Patrice Nadeau
245
La déclaration DOIT inclure aussi la définition.
246
247
Utilisé au lieu d’une macro quand le type ou la visibilité de la variable doit être définis.
248
* En majuscule
249
* Séparé par un «underscore» (_) si contient plusieurs mots
250
* De classe _static_ ou _extern_ selon le besoin
251
252
<pre><code class="c">
253
/** 
254
 * @name List of constants
255
 * @{
256
 */
257
258
/**
259
* @brief Local const
260
*/
261
static int _PI = 3.15;
262
/**
263
* @brief The initialization string of the project
264
*/
265
static const char INIT_STR[6] = {'P', 'O', 'W', 'E', 'R'};
266
/**
267
* @brief Global const in the random library
268
*/
269
extern int random_MAX = 25;
270
271
/**
272
 * @}
273
 */
274
</code></pre>
275 12 Patrice Nadeau
276 17 Patrice Nadeau
#### Typedef
277 12 Patrice Nadeau
278 13 Patrice Nadeau
Format
279 12 Patrice Nadeau
* En minuscule, suivie de *_t*
280
281
Définition de typedef
282
<pre><code class="c">
283
/** Unsigned integer 8 bits */
284
typedef unsigned int new_t
285
/** Type of structure in the ds1305 library */
286
typedef struct {
287
	/** @brief last two digits : &ge; 00, &le; 99 */
288
	uint8_t year;
289
	/** @brief 01 - 12 */
290
	uint8_t month;
291
	/** @brief 01 - 31 */
292
	uint8_t date;
293
	/** @brief 1 - 7 */
294
	uint8_t day;
295
	/** @brief 00 - 23 */
296
	uint8_t hours;
297
	/** @brief 00 - 59 */
298
	uint8_t minutes;
299
	/** @brief 00 - 59 */
300 1 Patrice Nadeau
	uint8_t seconds;
301
} ds1305_time_t;
302
</code></pre>
303
304 17 Patrice Nadeau
#### Variables
305 1 Patrice Nadeau
306
Format
307
* En minuscule.
308
* Séparé par un « underscore » (_) si contient plusieurs mots.
309
310
Définition de variables
311
<pre><code class="c">
312
/** @brief Local variable */
313
int _ctr;
314
/** @brief Global variable from the random librairy */
315
int random_ctr;
316
</code></pre>
317
318 17 Patrice Nadeau
#### Structures
319 1 Patrice Nadeau
320
Format
321
* En minuscule, séparé par des «underscores» si nécessaire.
322
323
Définition de structures
324
<pre><code class="c">
325
/**
326
* @brief Structure for a local menu
327
* @see MenuSelect
328
*/
329
struct menu {
330
/** @brief Character used for the item */
331
char choice;
332
/** @brief Description of the item */
333
char *item;
334
};
335
</code></pre>
336
337 17 Patrice Nadeau
#### Fonctions
338 1 Patrice Nadeau
339
Le nom est formé d’une lettre majuscule pour chacune des premières lettres des mots.
340 5 Patrice Nadeau
341
Le nom DOIT être dans un deux formats suivants :
342
* ActionItemAttribut, où _Action_ signifie :
343 1 Patrice Nadeau
** *Get* : Lis un registre
344 5 Patrice Nadeau
** *Read*, *Write* : Lis ou écris dans un fichier
345 1 Patrice Nadeau
** *Set* : Écris une valeur prédéfini dans un registre
346
** *Init* : Fonction d’initialisation
347
* isItemEtat
348
** *is* : Verifie si _Item_ est dans l’état _Etat_
349
350
Exception
351
> Les fonctions définies dans une librairie de bas niveau pour du matériel (« driver »). Dans ce cas, le nom définis dans le « datasheet » aura préséance. Ex. ReadRegister.
352
353
Une fonction DEVRAIT retourner une valeur. 
354
355
Dans le cas d'un « oui/non », la valeur DOIT être :
356
* Succès : *0* 
357
* Erreur : *1*
358
> L'utilisation d'un type booléen (*true* & *false*) est permise avec *<stbool.h>* (C99).
359
360
Dans le cas d'une fonction retournant un pointeur :
361
* Erreur : *NULL* 
362
* autre valeur  : adresse du pointeur
363
364
365
Définition de fonctions
366
<pre><code class="c">
367
/**
368
* @brief Check if a timer is set
369
* @param[in] nb Timer number. @n Possible values :
370
* − @b TIMER_1
371
* − @b TIMER_2
372
* @return
373
* @retval true Timer @e nb is set
374
* @retval false Timer @e nb is NOT set
375
* @par Example :
376
* Check if the timer is set
377
* @code{.c}
378
* ...
379
* result = isTimerSet();
380
* ...
381
* @endcode
382
* @pre TimerInit
383
**/
384
static bool isTimerSet(uint8_t nb);
385
/**
386
* @brief Set the led to green
387
**/
388
SetLedColor(GREEN);
389
/**
390
* @brief Set register of the chip XYZ
391
*
392
* The name does not follow the standards but does match the datatsheet
393
* This is a local function not meant to be called outside this librairy
394
**/
395
static void _WriteReg(void);
396
</code></pre>
397
398 17 Patrice Nadeau
### Macros
399 1 Patrice Nadeau
400
Les directives du préprocesseur C.
401
402
* Utilisé dans le code source et les fichiers entête.
403
* DOIT toujours commencer à la colonne 0.
404
405 17 Patrice Nadeau
#### include
406 1 Patrice Nadeau
407
Pour inclure d’autres fichier comme les fichiers entête.
408
>N’est pas documenté dans Doxygen.
409
410 23 Patrice Nadeau
    #### ifdef / ifndef
411 1 Patrice Nadeau
412
Surtout utiliser pour des options de compilation sur différentes plateforme.
413
>N’est pas documenté dans Doxygen.
414
415 23 Patrice Nadeau
416
417
418 1 Patrice Nadeau
#ifndef usart_AVR
419
#error "usart.h is not supported on this AVR !"
420
421 24 Patrice Nadeau
    #endif
422
423
424 17 Patrice Nadeau
#### error
425 1 Patrice Nadeau
426
Affiche une erreur et arrête la compilation
427
>N’est pas documenté dans Doxygen.
428
429 24 Patrice Nadeau
430
431
432 1 Patrice Nadeau
#ifndef __test__
433
#error "Error !"
434
#endif
435
</code></pre>
436
437 17 Patrice Nadeau
#### #warning
438 1 Patrice Nadeau
439
Affiche une erreur mais n’arrête la compilation
440
>N’est pas documenté dans Doxygen.
441
442
<pre><code class="c">
443
#ifndef __test__
444
#warning "Warning !"
445
#endif
446
</code></pre>
447
448 17 Patrice Nadeau
#### define 
449 1 Patrice Nadeau
450
Définis une valeur au moment de la compilation.
451
* Format
452
** En majuscule.
453
** Séparé par un «underscore» si contient plusieurs mots.
454
* Doxygen
455
** @brief
456
** @name pour les listes de macros (regroupement dans la documentation)
457
458
Définition de macros
459
<pre><code class="c">
460
/**
461
* @name Mathematical macros listed together
462
* @{
463
*/
464
/** @brief Value for PI */
465
#define _PI 3.14
466
/** @brief Another number */
467
#define _MAGIC_NUMBER 42
468
/**
469
* @}
470
*/
471
/** @brief Even parity */
472 21 Patrice Nadeau
473 22 Patrice Nadeau
    #define usart_PARITY_EVEN 'e'
474 1 Patrice Nadeau
475 22 Patrice Nadeau
476 17 Patrice Nadeau
### Atmel AVR
477 1 Patrice Nadeau
478
Particularités pour les micro-contrôleurs AVR d’Atmel.
479
480 3 Patrice Nadeau
* Progmem : Pour mettre une fonction en Flash au lieu de SRAM.
481 1 Patrice Nadeau
** Le nom de la fonction est suivie de *_P*.
482
* main : Ne revient jamais à un niveau supérieur.
483
** Définir la fonction main avec l’attribut *noreturn*.
484
** La boucle sans fin la plus optimisé est le *for (;;)*.
485
* Atomic : Opérations ne devant pas être interrompus.
486
487
Particularités pour AVR
488
489 22 Patrice Nadeau
    /**
490
    * @brief Progmem function
491
    * @return An unsigned 8 bits integer
492
    */
493
    uint_8t PrintString_P()
494 1 Patrice Nadeau
495 22 Patrice Nadeau
    /* main function */
496
    void main(void) __atribute__((noreturn))
497
    {
498
        ...
499
        /* never return */
500
        for (;;) {
501
        }
502 1 Patrice Nadeau
    }
503
504 22 Patrice Nadeau
    /* atomic operations */
505 21 Patrice Nadeau
506 1 Patrice Nadeau
#ifndef S_SPLINT_S
507
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
508
/* 
509
* operations that must not be interupted
510
* like loading a 16 bit register with a 8 bit register 
511
*/
512
}
513
514 18 Patrice Nadeau
    #endif
515
516
517 1 Patrice Nadeau
### Distribution
518 17 Patrice Nadeau
519 18 Patrice Nadeau
Les fichiers suivants DOIVENT être inclus dans une distribution en format *tar.gz* : 
520
521 1 Patrice Nadeau
* ChangeLog
522
* README
523
* Files.lst
524
* Makefile
525
* Makefile.mk
526
* LICENSE.txt
527
* *.c
528
* *.h
529
* projet.pdf (généré par Doxygen)
530
531
Avec mon makefile :
532
533 18 Patrice Nadeau
    make dist
534
535 1 Patrice Nadeau
### Modifications
536
537
Un changement à un fichier (source ou en-tête), doit se refléter dans _Git_.
538
539
Chaque changement est fait avec :
540
541 18 Patrice Nadeau
    git add nom_fichier
542
    git commit
543
544 1 Patrice Nadeau
La ligne DOIT 
545 18 Patrice Nadeau
546 1 Patrice Nadeau
* être au temps présent
547
* être en anglais
548
* se termine par un point
549
* être dans le format suivant :
550 18 Patrice Nadeau
    > La partie _section_ est facultative
551 1 Patrice Nadeau
552
553 18 Patrice Nadeau
    fichier1 (fonction) <section>: 
554
    Ajoute une description au temps présent.
555
    Décrire les bogues réglés si il y en avaient.
556
557
558 17 Patrice Nadeau
### Changelog
559 1 Patrice Nadeau
560
La somme de toutes les modification doivent apparaitre dans un fichier « changelog ».
561
> Le standard seras celui GNU : http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs
562
563 18 Patrice Nadeau
Ce fichier doit s'appeler **ChangeLog** et DOIT être généré à partir de _Git_ (les doubles espaces ne sont pas une erreur de frappe :
564 1 Patrice Nadeau
565 18 Patrice Nadeau
    git log --no-merges --format="%ad  %an  <%aE> %n * %B" --date=short > ChangeLog
566
   
567 1 Patrice Nadeau
### Validation du code
568
569 17 Patrice Nadeau
Le logiciel _splint_ est utilisé.
570 18 Patrice Nadeau
571 1 Patrice Nadeau
* Un « typecast » DOIT être utilisé lorsque détecté.
572
* L’utilisation du typecast *void* DOIT être utilisé lorsque qu’une fonction retourne un résultat non utilisé.
573
574
## Makefile
575
576 17 Patrice Nadeau
## Nagios
577 1 Patrice Nadeau
578 17 Patrice Nadeau
### Plugins
579 1 Patrice Nadeau
580 17 Patrice Nadeau
https://nagios-plugins.org/doc/guidelines.html
581 1 Patrice Nadeau
582
Un message d'une ligne (< 80 caractères) DOIT être retourné via _STDOUT_ dans le format
583
> *SERVICE STATUS:* texte
584
585 18 Patrice Nadeau
Les codes de retour sont les suivants :
586
587 1 Patrice Nadeau
|_. Valeur |_. Service Status |_. Description |
588
| 0 | OK | Le service fonctionne |
589
| 1 | Warning | Le service fonctionne, problème avec le seuil de la valeur _Warning_ |
590
| 2 | Critical | Le service ne fonctionne pas ou problème avec le seuil de la valeur _Critical_  |
591
| 3 | Unknow | Arguments non valides ou erreur interne (fork, tcp socket)|
592
593 18 Patrice Nadeau
Les arguments suivants DOIVENT être fournis :
594
595 1 Patrice Nadeau
* *-H* (*--hostname*) :
596
* *-w* (*--warning*) :
597
* *-c* (*--critical*) :
598
* *-V* (*--version*) :
599
* *-h* (*--help*) :
600
601
L'argument _--help_ DOIT aussi appeler l'argument _--version_.
602
603
En _C_, les fonctions suivantes DOIT être utilisées :
604 18 Patrice Nadeau
605 1 Patrice Nadeau
* _print_revision_ (utils.c)
606 17 Patrice Nadeau
* _print_help_
607 1 Patrice Nadeau
* _getopt_long_ (getopt.h)
608
609
## Puppet
610
611
### Généralités
612
613
Inspiré des recommandations disponible au http://docs.puppetlabs.com/guides/style_guide.html.
614 18 Patrice Nadeau
615 1 Patrice Nadeau
* Tabulation : 2 espaces
616 18 Patrice Nadeau
* Largeur : 80 caractères (« backslah » (\) pour séparer une longue ligne).
617 1 Patrice Nadeau
* Commentaires : Style #
618
* Guillemets
619 18 Patrice Nadeau
    * Simple : Pour une « string » sans variables.
620
    * Double : Pour une « string » avec variables ayant besoin d’être extrapolé.
621
        * La variable doit être entourée des symboles *<notextile>{</notextile>* et *<notextile>}</notextile>*.
622 1 Patrice Nadeau
* Nom des ressources : DOIVENT être entouré du symbole *<notextile> ’ </notextile>*.
623
* Alignement de => : DOIT être aligné dans un même paragraphe.
624
* Ordre : Si l’attribut _ensure_ doit être inclus, il DOIT être le premier.
625
* Lien symbolique : DOIT être déclaré avec *ensure => link*
626
627
Ex. :
628
629 18 Patrice Nadeau
    file { '/var/log/syslog':
630
    ensure => link,
631
    target => '/var/log/messages',
632
    }
633
634 1 Patrice Nadeau
* File mode : 
635 18 Patrice Nadeau
    * 4 chiffres
636
    * simple guillemet
637 17 Patrice Nadeau
* Variables
638 18 Patrice Nadeau
    * lettres
639
    * chiffres
640
    * « underscore »
641 1 Patrice Nadeau
642
### Documentation
643
644
http://docs.puppetlabs.com/learning/modules2.html#module-documentation
645
646 18 Patrice Nadeau
Format Rdoc (http://rdoc.rubyforge.org/RDoc/Markup.html) :
647
648 1 Patrice Nadeau
* Bloc de commentaires qui commence sur la première ligne du fichier
649
* Titre avec le symbole *<notextile>=</notextile>*
650
* Séparation avec le symbole *<notextile>-</notextile>*
651
* Emphase (mot entouré du symbole)
652 18 Patrice Nadeau
    * * : gras
653
    * _ : souligné
654
    * + : Police de caractères pour le code
655 1 Patrice Nadeau
* Sections
656 18 Patrice Nadeau
    * = Class:
657
    * == Parameters:
658
    * == Requires:
659
    * == Sample Usage:
660 1 Patrice Nadeau
* Classe
661 18 Patrice Nadeau
    * Une classe par fichier « manifest »
662 1 Patrice Nadeau
663
## Script
664
665
### Bash
666
667 18 Patrice Nadeau
668
669 1 Patrice Nadeau
#/bin/bash
670
671
function print_revision {
672 17 Patrice Nadeau
}
673 1 Patrice Nadeau
674
function print_help {
675
    print_revision
676
}
677
</code></pre>
678 17 Patrice Nadeau
679 1 Patrice Nadeau
### Perl
680
681 17 Patrice Nadeau
<pre><code class="perl">
682 1 Patrice Nadeau
683
</code></pre>
684
685
### PowerShell
686
687
Version 4.0. Supporte :
688 17 Patrice Nadeau
689 1 Patrice Nadeau
* Windows 8.1 (natif)
690 17 Patrice Nadeau
* Windows Server 2012 R2 (natif)
691 1 Patrice Nadeau
* Windows 7 SP1
692
* Windows Server 2008 R2 SP1
693
* Windows Server 2012
694 17 Patrice Nadeau
695 1 Patrice Nadeau
#### Fichier
696
697
Le fichier DOIT être composé de la manière suivante :<F8>
698
* L’extension est .ps1
699
* Une longue ligne peux être séparée avec un « back tick » (‘).
700
701
#### Commentaires
702
703
L’aide est accéder par _Get-Help_
704
705 20 Patrice Nadeau
706
	#REQUIRES -Version 2.0
707
	<#
708
	.SYNOPSIS
709
	A brief description of the function or script.
710
	This keyword can be used only once in each topic.
711
	.DESCRIPTION
712
	A detailed description of the function or script.
713
	This keyword can be used only once in each topic.
714
	.NOTES
715
	File Name
716
	: xxxx.ps1
717
	Author
718
	:
719
	Prerequisite
720
	: PowerShell V2 over Vista and upper.
721
	Copyright 2011 -
722
	.LINK
723
	Script posted over:
724
	http://
725
	.EXAMPLE
726
	Example 1
727
	.EXAMPLE
728
	Example 2
729
	#>
730
731
732
733 1 Patrice Nadeau
## Vim
734
735
* Entête (en commentaires)
736 19 Patrice Nadeau
    * Titre
737
    * Last Change:
738
    * Maintainer:
739
    * License: This file is placed in the public domain.
740 1 Patrice Nadeau
* Autre mots reconnus
741 19 Patrice Nadeau
    * BUG: (Error:)
742
    * TODO:
743
    * Note:
744
    * FIXME
745 1 Patrice Nadeau
746
## Références
747
748
Références ayant servis à ce document.
749
750 20 Patrice Nadeau
[ChangeLog](http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs)
751 19 Patrice Nadeau
[GNU deprecated attribute](http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Type-Attributes.html)