Projet

Général

Profil

SOP 001-Programmation » Historique » Version 61

Patrice Nadeau, 2018-03-31 15:30

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 17 Patrice Nadeau
	/* Une seule ligne... */
91 1 Patrice Nadeau
92 17 Patrice Nadeau
	...
93 1 Patrice Nadeau
94 17 Patrice Nadeau
	/*
95
	* Sur
96
	* plusieurs
97
	* lignes
98 1 Patrice Nadeau
	*/
99
100 17 Patrice Nadeau
### Doxygen
101 1 Patrice Nadeau
102 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).
103 1 Patrice Nadeau
104
Seulement les items définis dans les fichiers d’en-tête sont documentés par défaut.
105
Un commentaire Doxygen commence par *<notextile> /** </notextile>* , le compilateur le comprenant comme un commentaire ordinaire.
106
107
Les règles typographiques du [[SOP_000-Documentation]] s’appliquent :
108 17 Patrice Nadeau
109 44 Patrice Nadeau
* Gras (**@b**) : Items devant être inscrit tel quel.
110
* Italique & emphase (**@e**) : Items à remplacer par un choix ou nécessitant une attention particulière.
111 1 Patrice Nadeau
112
> 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.
113
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
* @par Example :
125
* Example Title
126
* @code{.c}
127
* ...
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
```
228 1 Patrice Nadeau
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 58 Patrice Nadeau
```
237
/**
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
La déclaration DOIT inclure aussi la définition.
248 29 Patrice Nadeau
249
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 58 Patrice Nadeau
```
258
/** 
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 30 Patrice Nadeau
281
#### Typedef
282
283
Format :
284 31 Patrice Nadeau
285
* En minuscule, suivie de *_t*
286
287
Définition de typedef
288
289
    /** Unsigned integer 8 bits */
290
    typedef unsigned int new_t
291
    /** Type of structure in the ds1305 library */
292
    typedef struct {
293
        /** @brief last two digits : &ge; 00, &le; 99 */
294
        uint8_t year;
295
    	/** @brief 01 - 12 */
296
        uint8_t month;
297
        /** @brief 01 - 31 */
298 30 Patrice Nadeau
        uint8_t date;
299 1 Patrice Nadeau
        /** @brief 1 - 7 */
300
        uint8_t day;
301
    	/** @brief 00 - 23 */
302 49 Patrice Nadeau
        uint8_t hours;
303
        /** @brief 00 - 59 */
304 1 Patrice Nadeau
        uint8_t minutes;
305
        /** @brief 00 - 59 */
306
        uint8_t seconds;
307
    } ds1305_time_t;
308
309 40 Patrice Nadeau
#### Variables
310
311
Format :
312
313
* En minuscule.
314 1 Patrice Nadeau
* Séparé par un « underscore » (_) si contient plusieurs mots.
315
316
Définition de variables
317
318
    /** @brief Local variable */
319
    int _ctr;
320
    /** @brief Global variable from the random librairy */
321 40 Patrice Nadeau
    int random_ctr;
322
323
#### Structures
324
325
Format
326
* En minuscule, séparé par des «underscores» si nécessaire.
327
328
Définition de structures
329
330
    /**
331
    * @brief Structure for a local menu
332 17 Patrice Nadeau
    * @see MenuSelect
333 1 Patrice Nadeau
    */
334
    struct menu {
335 5 Patrice Nadeau
    /** @brief Character used for the item */
336
    char choice;
337 32 Patrice Nadeau
    /** @brief Description of the item */
338 5 Patrice Nadeau
    char *item;
339 1 Patrice Nadeau
    };
340 5 Patrice Nadeau
341 1 Patrice Nadeau
#### Fonctions
342
343
Le nom est formé d’une lettre majuscule pour chacune des premières lettres des mots.
344
345
Le nom DOIT être dans un deux formats suivants :
346
347
* ActionItemAttribut, où _Action_ signifie :
348
** *Get* : Lis un registre
349
** *Read*, *Write* : Lis ou écris dans un fichier
350
** *Set* : Écris une valeur prédéfini dans un registre
351
** *Init* : Fonction d’initialisation
352
* isItemEtat
353 32 Patrice Nadeau
** *is* : Verifie si _Item_ est dans l’état _Etat_
354
355
Exception
356 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.
357 32 Patrice Nadeau
358 1 Patrice Nadeau
Une fonction DEVRAIT retourner une valeur. 
359
360 32 Patrice Nadeau
Dans le cas d'un « oui/non », la valeur DOIT être :
361
362 1 Patrice Nadeau
* Succès : **0**
363 32 Patrice Nadeau
* Erreur : **1**
364 1 Patrice Nadeau
365 32 Patrice Nadeau
    > L'utilisation d'un type booléen (*true* & *false*) est permise avec la librairie **\<stbool.h\>** (C99).
366
367
Dans le cas d'une fonction retournant un pointeur :
368
369
* Erreur : **NULL**
370
* Autre valeur  : adresse du pointeur
371
372
373
Définition de fonctions
374
375
    /**
376
    * @brief Check if a timer is set
377
    * @param[in] nb Timer number. @n Possible values :
378
    * − @b TIMER_1
379
    * − @b TIMER_2
380
    * @return
381
    * @retval true Timer @e nb is set
382
    * @retval false Timer @e nb is NOT set
383
    * @par Example :
384
    * Check if the timer is set
385
    * @code{.c}
386
    * ...
387
    * result = isTimerSet();
388 1 Patrice Nadeau
    * ...
389 32 Patrice Nadeau
    * @endcode
390 1 Patrice Nadeau
    * @pre TimerInit
391 32 Patrice Nadeau
    **/
392
    static bool isTimerSet(uint8_t nb);
393 1 Patrice Nadeau
    /**
394
    * @brief Set the led to green
395
    **/
396
    SetLedColor(GREEN);
397
    /**
398
    * @brief Set register of the chip XYZ
399 17 Patrice Nadeau
    *
400 1 Patrice Nadeau
    * The name does not follow the standards but does match the datatsheet
401
    * This is a local function not meant to be called outside this librairy
402
    **/
403 51 Patrice Nadeau
    static void _WriteReg(void);
404 23 Patrice Nadeau
405 1 Patrice Nadeau
### Macros
406
407
Les directives du préprocesseur C.
408
409 23 Patrice Nadeau
* Utilisé dans le code source et les fichiers entête.
410
* DOIT toujours commencer à la colonne 0.
411
412 1 Patrice Nadeau
#### #include
413 40 Patrice Nadeau
414 1 Patrice Nadeau
Pour inclure d’autres fichier comme les fichiers entête.
415 40 Patrice Nadeau
>N’est pas documenté dans Doxygen.
416 24 Patrice Nadeau
417 17 Patrice Nadeau
    #### ifdef / ifndef
418 1 Patrice Nadeau
419 52 Patrice Nadeau
Surtout utiliser pour des options de compilation sur différentes plateforme.
420 1 Patrice Nadeau
>N’est pas documenté dans Doxygen.
421
422 24 Patrice Nadeau
    #ifndef usart_AVR
423
424 34 Patrice Nadeau
        #error "usart.h is not supported on this AVR !"
425 33 Patrice Nadeau
426 34 Patrice Nadeau
    #endif
427 33 Patrice Nadeau
428 37 Patrice Nadeau
#### #error
429 1 Patrice Nadeau
430
Affiche une erreur et arrête la compilation
431
>N’est pas documenté dans Doxygen.
432
433
    #ifndef __test__
434
435
        #error "Error !"
436
437 38 Patrice Nadeau
    #endif
438
439 53 Patrice Nadeau
#### #warning
440 17 Patrice Nadeau
441 53 Patrice Nadeau
Affiche une erreur mais n’arrête la compilation
442
>N’est pas documenté dans Doxygen.
443 1 Patrice Nadeau
444
    #ifndef __test__
445 39 Patrice Nadeau
446 1 Patrice Nadeau
    #warning "Warning !"
447 39 Patrice Nadeau
448
    #endif
449 1 Patrice Nadeau
450 39 Patrice Nadeau
451
#### #define 
452 1 Patrice Nadeau
453
Définis une valeur au moment de la compilation.
454 39 Patrice Nadeau
455
* Format
456
    * En majuscule.
457
    * Séparé par un «underscore» si contient plusieurs mots.
458
* Doxygen
459
    * @brief
460
    * @name pour les listes de macros (regroupement dans la documentation)
461 40 Patrice Nadeau
462
Définition de macros
463
464
    /**
465
    * @name Mathematical macros listed together
466
    * @{
467
    */
468 1 Patrice Nadeau
    /** @brief Value for PI */
469
470 17 Patrice Nadeau
    #define _PI 3.14
471 1 Patrice Nadeau
    /** @brief Another number */
472
    #define _MAGIC_NUMBER 42
473 3 Patrice Nadeau
    /**
474 1 Patrice Nadeau
    * @}
475
    */
476
    /** @brief Even parity */
477
478
    #define usart_PARITY_EVEN 'e'
479
480
### Atmel AVR
481
482 22 Patrice Nadeau
Particularités pour les micro-contrôleurs AVR d’Atmel.
483
484
* Progmem : Pour mettre une fonction en Flash au lieu de SRAM.
485
** Le nom de la fonction est suivie de *_P*.
486
* main : Ne revient jamais à un niveau supérieur.
487 1 Patrice Nadeau
** Définir la fonction main avec l’attribut *noreturn*.
488 22 Patrice Nadeau
** La boucle sans fin la plus optimisé est le *for (;;)*.
489
* Atomic : Opérations ne devant pas être interrompus.
490
491
Particularités pour AVR
492
493
    /**
494
    * @brief Progmem function
495 1 Patrice Nadeau
    * @return An unsigned 8 bits integer
496
    */
497 22 Patrice Nadeau
    uint_8t PrintString_P()
498 21 Patrice Nadeau
499 1 Patrice Nadeau
    /* main function */
500
    void main(void) __atribute__((noreturn))
501 40 Patrice Nadeau
    {
502
        ...
503
        /* never return */
504
        for (;;) {
505
        }
506
    }
507
508 18 Patrice Nadeau
    /* atomic operations */
509 17 Patrice Nadeau
510 18 Patrice Nadeau
    #ifndef S_SPLINT_S
511
    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
512 1 Patrice Nadeau
    /* 
513
    * operations that must not be interupted
514
    * like loading a 16 bit register with a 8 bit register 
515
    */
516
    }
517
    #endif
518
519
### Distribution
520
521
Les fichiers suivants DOIVENT être inclus dans une distribution en format *tar.gz* : 
522
523
* ChangeLog
524 18 Patrice Nadeau
* README
525
* Files.lst
526 1 Patrice Nadeau
* Makefile
527
* Makefile.mk
528
* LICENSE.txt
529
* *.c
530
* *.h
531
* projet.pdf (généré par Doxygen)
532 18 Patrice Nadeau
533
Avec mon makefile :
534
535 1 Patrice Nadeau
    make dist
536 18 Patrice Nadeau
537 1 Patrice Nadeau
### Modifications
538
539
Un changement à un fichier (source ou en-tête), doit se refléter dans _Git_.
540
541 18 Patrice Nadeau
Chaque changement est fait avec :
542 1 Patrice Nadeau
543
    git add nom_fichier
544 18 Patrice Nadeau
    git commit
545
546
La ligne DOIT 
547
548
* être au temps présent
549 17 Patrice Nadeau
* être en anglais
550 1 Patrice Nadeau
* se termine par un point
551
* être dans le format suivant :
552
    > La partie _section_ est facultative
553
554 18 Patrice Nadeau
555 1 Patrice Nadeau
    fichier1 (fonction) <section>: 
556 18 Patrice Nadeau
    Ajoute une description au temps présent.
557
    Décrire les bogues réglés si il y en avaient.
558 1 Patrice Nadeau
559
560 17 Patrice Nadeau
### Changelog
561 18 Patrice Nadeau
562 1 Patrice Nadeau
La somme de toutes les modification doivent apparaitre dans un fichier « changelog ».
563
> Le standard seras celui GNU : http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs
564
565
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 :
566
567 17 Patrice Nadeau
    git log --no-merges --format="%ad  %an  <%aE> %n * %B" --date=short > ChangeLog
568 1 Patrice Nadeau
   
569 17 Patrice Nadeau
### Validation du code
570 1 Patrice Nadeau
571 17 Patrice Nadeau
Le logiciel _splint_ est utilisé.
572 1 Patrice Nadeau
573
* Un « typecast » DOIT être utilisé lorsque détecté.
574
* L’utilisation du typecast *void* DOIT être utilisé lorsque qu’une fonction retourne un résultat non utilisé.
575
576 18 Patrice Nadeau
## Makefile
577
578 1 Patrice Nadeau
## Nagios
579
580
### Plugins
581
582
https://nagios-plugins.org/doc/guidelines.html
583
584 18 Patrice Nadeau
Un message d'une ligne (< 80 caractères) DOIT être retourné via _STDOUT_ dans le format
585
> *SERVICE STATUS:* texte
586 1 Patrice Nadeau
587
Les codes de retour sont les suivants :
588
589
|_. Valeur |_. Service Status |_. Description |
590
| 0 | OK | Le service fonctionne |
591
| 1 | Warning | Le service fonctionne, problème avec le seuil de la valeur _Warning_ |
592
| 2 | Critical | Le service ne fonctionne pas ou problème avec le seuil de la valeur _Critical_  |
593
| 3 | Unknow | Arguments non valides ou erreur interne (fork, tcp socket)|
594
595 18 Patrice Nadeau
Les arguments suivants DOIVENT être fournis :
596 1 Patrice Nadeau
597 17 Patrice Nadeau
* *-H* (*--hostname*) :
598 1 Patrice Nadeau
* *-w* (*--warning*) :
599
* *-c* (*--critical*) :
600
* *-V* (*--version*) :
601
* *-h* (*--help*) :
602
603
L'argument _--help_ DOIT aussi appeler l'argument _--version_.
604
605 18 Patrice Nadeau
En _C_, les fonctions suivantes DOIT être utilisées :
606 1 Patrice Nadeau
607 18 Patrice Nadeau
* _print_revision_ (utils.c)
608 1 Patrice Nadeau
* _print_help_
609
* _getopt_long_ (getopt.h)
610 18 Patrice Nadeau
611
## Puppet
612
613 1 Patrice Nadeau
### Généralités
614
615
Inspiré des recommandations disponible au http://docs.puppetlabs.com/guides/style_guide.html.
616
617
* Tabulation : 2 espaces
618
* Largeur : 80 caractères (« backslah » (\) pour séparer une longue ligne).
619
* Commentaires : Style #
620
* Guillemets
621
    * Simple : Pour une « string » sans variables.
622
    * Double : Pour une « string » avec variables ayant besoin d’être extrapolé.
623 18 Patrice Nadeau
        * La variable doit être entourée des symboles *<notextile>{</notextile>* et *<notextile>}</notextile>*.
624
* Nom des ressources : DOIVENT être entouré du symbole *<notextile> ’ </notextile>*.
625 1 Patrice Nadeau
* Alignement de => : DOIT être aligné dans un même paragraphe.
626
* Ordre : Si l’attribut _ensure_ doit être inclus, il DOIT être le premier.
627
* Lien symbolique : DOIT être déclaré avec *ensure => link*
628
629
Ex. :
630 18 Patrice Nadeau
631
    file { '/var/log/syslog':
632 1 Patrice Nadeau
    ensure => link,
633
    target => '/var/log/messages',
634
    }
635
636 18 Patrice Nadeau
* File mode : 
637
    * 4 chiffres
638
    * simple guillemet
639 1 Patrice Nadeau
* Variables
640 18 Patrice Nadeau
    * lettres
641
    * chiffres
642
    * « underscore »
643
644 1 Patrice Nadeau
### Documentation
645 18 Patrice Nadeau
646 1 Patrice Nadeau
http://docs.puppetlabs.com/learning/modules2.html#module-documentation
647
648
Format Rdoc (http://rdoc.rubyforge.org/RDoc/Markup.html) :
649
650
* Bloc de commentaires qui commence sur la première ligne du fichier
651 18 Patrice Nadeau
* Titre avec le symbole *<notextile>=</notextile>*
652
* Séparation avec le symbole *<notextile>-</notextile>*
653 1 Patrice Nadeau
* Emphase (mot entouré du symbole)
654
    * * : gras
655
    * _ : souligné
656 17 Patrice Nadeau
    * + : Police de caractères pour le code
657 1 Patrice Nadeau
* Sections
658
    * = Class:
659
    * == Parameters:
660 40 Patrice Nadeau
    * == Requires:
661 1 Patrice Nadeau
    * == Sample Usage:
662 40 Patrice Nadeau
* Classe
663
    * Une classe par fichier « manifest »
664 1 Patrice Nadeau
665 40 Patrice Nadeau
## Script
666
667
### Bash
668
669 61 Patrice Nadeau
``` bash
670
#/bin/bash
671 1 Patrice Nadeau
672 61 Patrice Nadeau
function print_revision {
673
}
674 17 Patrice Nadeau
675 61 Patrice Nadeau
function print_help {
676
    print_revision
677
}
678
```
679 1 Patrice Nadeau
    
680 17 Patrice Nadeau
### Perl
681 1 Patrice Nadeau
682
### PowerShell
683
684
Version 4.0. Supporte :
685 41 Patrice Nadeau
686
* Windows 8.1 (natif)
687 1 Patrice Nadeau
* Windows Server 2012 R2 (natif)
688
* Windows 7 SP1
689
* Windows Server 2008 R2 SP1
690
* Windows Server 2012
691
692 20 Patrice Nadeau
#### Fichier
693
694
Le fichier DOIT être composé de la manière suivante :
695
696
* L’extension est .ps1
697
* Une longue ligne peux être séparée avec un « back tick » (‘).
698
699
#### Commentaires
700
701
L’aide est accéder par _Get-Help_
702
703
704
	#REQUIRES -Version 2.0
705
	<#
706
	.SYNOPSIS
707
	A brief description of the function or script.
708
	This keyword can be used only once in each topic.
709
	.DESCRIPTION
710
	A detailed description of the function or script.
711
	This keyword can be used only once in each topic.
712
	.NOTES
713
	File Name
714
	: xxxx.ps1
715
	Author
716
	:
717
	Prerequisite
718
	: PowerShell V2 over Vista and upper.
719
	Copyright 2011 -
720 1 Patrice Nadeau
	.LINK
721 19 Patrice Nadeau
	Script posted over:
722
	http://
723
	.EXAMPLE
724
	Example 1
725 1 Patrice Nadeau
	.EXAMPLE
726 19 Patrice Nadeau
	Example 2
727
	#>
728
729
## Vim
730 1 Patrice Nadeau
731
* Entête (en commentaires)
732
    * Titre
733
    * Last Change:
734
    * Maintainer:
735 20 Patrice Nadeau
    * License: This file is placed in the public domain.
736 19 Patrice Nadeau
* Autre mots reconnus
737 1 Patrice Nadeau
    * BUG: (Error:)
738
    * TODO:
739
    * Note:
740
    * FIXME
741
742
## Références
743
744
Références ayant servis à ce document.
745
746
[ChangeLog](http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs)
747
[GNU deprecated attribute](http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Type-Attributes.html)