Projet

Général

Profil

SOP 001-Programmation » Historique » Version 57

Patrice Nadeau, 2018-03-31 15:26

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