Projet

Général

Profil

SOP 001-Programmation » Historique » Version 76

Patrice Nadeau, 2018-06-06 09:01

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