Projet

Général

Profil

SOP 001-Programmation » Historique » Version 63

Patrice Nadeau, 2018-03-31 15:32

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 63 Patrice Nadeau
``` c
376
/**
377
* @brief Check if a timer is set
378
* @param[in] nb Timer number. @n Possible values :
379
* − @b TIMER_1
380
* − @b TIMER_2
381
* @return
382
* @retval true Timer @e nb is set
383
* @retval false Timer @e nb is NOT set
384
* @par Example :
385
* Check if the timer is set
386
* @code{.c}
387
* ...
388
* result = isTimerSet();
389
* ...
390
* @endcode
391
* @pre TimerInit
392
**/
393
394
static bool isTimerSet(uint8_t nb);
395
/**
396
* @brief Set the led to green
397
**/
398
SetLedColor(GREEN);
399
/**
400
* @brief Set register of the chip XYZ
401
*
402
* The name does not follow the standards but does match the datatsheet
403
* This is a local function not meant to be called outside this librairy
404
**/
405
static void _WriteReg(void);
406
```
407
408 23 Patrice Nadeau
409 1 Patrice Nadeau
### Macros
410
411
Les directives du préprocesseur C.
412
413 23 Patrice Nadeau
* Utilisé dans le code source et les fichiers entête.
414
* DOIT toujours commencer à la colonne 0.
415
416 1 Patrice Nadeau
#### #include
417 40 Patrice Nadeau
418 1 Patrice Nadeau
Pour inclure d’autres fichier comme les fichiers entête.
419 40 Patrice Nadeau
>N’est pas documenté dans Doxygen.
420 24 Patrice Nadeau
421 17 Patrice Nadeau
    #### ifdef / ifndef
422 1 Patrice Nadeau
423 52 Patrice Nadeau
Surtout utiliser pour des options de compilation sur différentes plateforme.
424 1 Patrice Nadeau
>N’est pas documenté dans Doxygen.
425
426 24 Patrice Nadeau
    #ifndef usart_AVR
427
428 34 Patrice Nadeau
        #error "usart.h is not supported on this AVR !"
429 33 Patrice Nadeau
430 34 Patrice Nadeau
    #endif
431 33 Patrice Nadeau
432 37 Patrice Nadeau
#### #error
433 1 Patrice Nadeau
434
Affiche une erreur et arrête la compilation
435
>N’est pas documenté dans Doxygen.
436
437 62 Patrice Nadeau
``` c
438
#ifndef __test__
439 1 Patrice Nadeau
440 62 Patrice Nadeau
    #error "Error !"
441 1 Patrice Nadeau
442 62 Patrice Nadeau
#endif
443 38 Patrice Nadeau
444 53 Patrice Nadeau
#### #warning
445 17 Patrice Nadeau
446 53 Patrice Nadeau
Affiche une erreur mais n’arrête la compilation
447
>N’est pas documenté dans Doxygen.
448 1 Patrice Nadeau
449
    #ifndef __test__
450 39 Patrice Nadeau
451 1 Patrice Nadeau
    #warning "Warning !"
452 39 Patrice Nadeau
453
    #endif
454 1 Patrice Nadeau
455 39 Patrice Nadeau
456
#### #define 
457 1 Patrice Nadeau
458
Définis une valeur au moment de la compilation.
459 39 Patrice Nadeau
460
* Format
461
    * En majuscule.
462
    * Séparé par un «underscore» si contient plusieurs mots.
463
* Doxygen
464
    * @brief
465
    * @name pour les listes de macros (regroupement dans la documentation)
466 40 Patrice Nadeau
467
Définition de macros
468
469
    /**
470
    * @name Mathematical macros listed together
471
    * @{
472
    */
473 1 Patrice Nadeau
    /** @brief Value for PI */
474
475 17 Patrice Nadeau
    #define _PI 3.14
476 1 Patrice Nadeau
    /** @brief Another number */
477
    #define _MAGIC_NUMBER 42
478 3 Patrice Nadeau
    /**
479 1 Patrice Nadeau
    * @}
480
    */
481
    /** @brief Even parity */
482
483
    #define usart_PARITY_EVEN 'e'
484
485
### Atmel AVR
486
487 22 Patrice Nadeau
Particularités pour les micro-contrôleurs AVR d’Atmel.
488
489
* Progmem : Pour mettre une fonction en Flash au lieu de SRAM.
490
** Le nom de la fonction est suivie de *_P*.
491
* main : Ne revient jamais à un niveau supérieur.
492 1 Patrice Nadeau
** Définir la fonction main avec l’attribut *noreturn*.
493 22 Patrice Nadeau
** La boucle sans fin la plus optimisé est le *for (;;)*.
494
* Atomic : Opérations ne devant pas être interrompus.
495
496
Particularités pour AVR
497
498
    /**
499
    * @brief Progmem function
500 1 Patrice Nadeau
    * @return An unsigned 8 bits integer
501
    */
502 22 Patrice Nadeau
    uint_8t PrintString_P()
503 21 Patrice Nadeau
504 1 Patrice Nadeau
    /* main function */
505
    void main(void) __atribute__((noreturn))
506 40 Patrice Nadeau
    {
507
        ...
508
        /* never return */
509
        for (;;) {
510
        }
511
    }
512
513 18 Patrice Nadeau
    /* atomic operations */
514 17 Patrice Nadeau
515 18 Patrice Nadeau
    #ifndef S_SPLINT_S
516
    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
517 1 Patrice Nadeau
    /* 
518
    * operations that must not be interupted
519
    * like loading a 16 bit register with a 8 bit register 
520
    */
521
    }
522
    #endif
523
524
### Distribution
525
526
Les fichiers suivants DOIVENT être inclus dans une distribution en format *tar.gz* : 
527
528
* ChangeLog
529 18 Patrice Nadeau
* README
530
* Files.lst
531 1 Patrice Nadeau
* Makefile
532
* Makefile.mk
533
* LICENSE.txt
534
* *.c
535
* *.h
536
* projet.pdf (généré par Doxygen)
537 18 Patrice Nadeau
538
Avec mon makefile :
539
540 1 Patrice Nadeau
    make dist
541 18 Patrice Nadeau
542 1 Patrice Nadeau
### Modifications
543
544
Un changement à un fichier (source ou en-tête), doit se refléter dans _Git_.
545
546 18 Patrice Nadeau
Chaque changement est fait avec :
547 1 Patrice Nadeau
548
    git add nom_fichier
549 18 Patrice Nadeau
    git commit
550
551
La ligne DOIT 
552
553
* être au temps présent
554 17 Patrice Nadeau
* être en anglais
555 1 Patrice Nadeau
* se termine par un point
556
* être dans le format suivant :
557
    > La partie _section_ est facultative
558
559 18 Patrice Nadeau
560 1 Patrice Nadeau
    fichier1 (fonction) <section>: 
561 18 Patrice Nadeau
    Ajoute une description au temps présent.
562
    Décrire les bogues réglés si il y en avaient.
563 1 Patrice Nadeau
564
565 17 Patrice Nadeau
### Changelog
566 18 Patrice Nadeau
567 1 Patrice Nadeau
La somme de toutes les modification doivent apparaitre dans un fichier « changelog ».
568
> Le standard seras celui GNU : http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs
569
570
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 :
571
572 17 Patrice Nadeau
    git log --no-merges --format="%ad  %an  <%aE> %n * %B" --date=short > ChangeLog
573 1 Patrice Nadeau
   
574 17 Patrice Nadeau
### Validation du code
575 1 Patrice Nadeau
576 17 Patrice Nadeau
Le logiciel _splint_ est utilisé.
577 1 Patrice Nadeau
578
* Un « typecast » DOIT être utilisé lorsque détecté.
579
* L’utilisation du typecast *void* DOIT être utilisé lorsque qu’une fonction retourne un résultat non utilisé.
580
581 18 Patrice Nadeau
## Makefile
582
583 1 Patrice Nadeau
## Nagios
584
585
### Plugins
586
587
https://nagios-plugins.org/doc/guidelines.html
588
589 18 Patrice Nadeau
Un message d'une ligne (< 80 caractères) DOIT être retourné via _STDOUT_ dans le format
590
> *SERVICE STATUS:* texte
591 1 Patrice Nadeau
592
Les codes de retour sont les suivants :
593
594
|_. Valeur |_. Service Status |_. Description |
595
| 0 | OK | Le service fonctionne |
596
| 1 | Warning | Le service fonctionne, problème avec le seuil de la valeur _Warning_ |
597
| 2 | Critical | Le service ne fonctionne pas ou problème avec le seuil de la valeur _Critical_  |
598
| 3 | Unknow | Arguments non valides ou erreur interne (fork, tcp socket)|
599
600 18 Patrice Nadeau
Les arguments suivants DOIVENT être fournis :
601 1 Patrice Nadeau
602 17 Patrice Nadeau
* *-H* (*--hostname*) :
603 1 Patrice Nadeau
* *-w* (*--warning*) :
604
* *-c* (*--critical*) :
605
* *-V* (*--version*) :
606
* *-h* (*--help*) :
607
608
L'argument _--help_ DOIT aussi appeler l'argument _--version_.
609
610 18 Patrice Nadeau
En _C_, les fonctions suivantes DOIT être utilisées :
611 1 Patrice Nadeau
612 18 Patrice Nadeau
* _print_revision_ (utils.c)
613 1 Patrice Nadeau
* _print_help_
614
* _getopt_long_ (getopt.h)
615 18 Patrice Nadeau
616
## Puppet
617
618 1 Patrice Nadeau
### Généralités
619
620
Inspiré des recommandations disponible au http://docs.puppetlabs.com/guides/style_guide.html.
621
622
* Tabulation : 2 espaces
623
* Largeur : 80 caractères (« backslah » (\) pour séparer une longue ligne).
624
* Commentaires : Style #
625
* Guillemets
626
    * Simple : Pour une « string » sans variables.
627
    * Double : Pour une « string » avec variables ayant besoin d’être extrapolé.
628 18 Patrice Nadeau
        * La variable doit être entourée des symboles *<notextile>{</notextile>* et *<notextile>}</notextile>*.
629
* Nom des ressources : DOIVENT être entouré du symbole *<notextile> ’ </notextile>*.
630 1 Patrice Nadeau
* Alignement de => : DOIT être aligné dans un même paragraphe.
631
* Ordre : Si l’attribut _ensure_ doit être inclus, il DOIT être le premier.
632
* Lien symbolique : DOIT être déclaré avec *ensure => link*
633
634
Ex. :
635 18 Patrice Nadeau
636
    file { '/var/log/syslog':
637 1 Patrice Nadeau
    ensure => link,
638
    target => '/var/log/messages',
639
    }
640
641 18 Patrice Nadeau
* File mode : 
642
    * 4 chiffres
643
    * simple guillemet
644 1 Patrice Nadeau
* Variables
645 18 Patrice Nadeau
    * lettres
646
    * chiffres
647
    * « underscore »
648
649 1 Patrice Nadeau
### Documentation
650 18 Patrice Nadeau
651 1 Patrice Nadeau
http://docs.puppetlabs.com/learning/modules2.html#module-documentation
652
653
Format Rdoc (http://rdoc.rubyforge.org/RDoc/Markup.html) :
654
655
* Bloc de commentaires qui commence sur la première ligne du fichier
656 18 Patrice Nadeau
* Titre avec le symbole *<notextile>=</notextile>*
657
* Séparation avec le symbole *<notextile>-</notextile>*
658 1 Patrice Nadeau
* Emphase (mot entouré du symbole)
659
    * * : gras
660
    * _ : souligné
661 17 Patrice Nadeau
    * + : Police de caractères pour le code
662 1 Patrice Nadeau
* Sections
663
    * = Class:
664
    * == Parameters:
665 40 Patrice Nadeau
    * == Requires:
666 1 Patrice Nadeau
    * == Sample Usage:
667 40 Patrice Nadeau
* Classe
668
    * Une classe par fichier « manifest »
669 1 Patrice Nadeau
670 40 Patrice Nadeau
## Script
671
672
### Bash
673
674 61 Patrice Nadeau
``` bash
675
#/bin/bash
676 1 Patrice Nadeau
677 61 Patrice Nadeau
function print_revision {
678
}
679 17 Patrice Nadeau
680 61 Patrice Nadeau
function print_help {
681
    print_revision
682
}
683
```
684 1 Patrice Nadeau
    
685 17 Patrice Nadeau
### Perl
686 1 Patrice Nadeau
687
### PowerShell
688
689
Version 4.0. Supporte :
690 41 Patrice Nadeau
691
* Windows 8.1 (natif)
692 1 Patrice Nadeau
* Windows Server 2012 R2 (natif)
693
* Windows 7 SP1
694
* Windows Server 2008 R2 SP1
695
* Windows Server 2012
696
697 20 Patrice Nadeau
#### Fichier
698
699
Le fichier DOIT être composé de la manière suivante :
700
701
* L’extension est .ps1
702
* Une longue ligne peux être séparée avec un « back tick » (‘).
703
704
#### Commentaires
705
706
L’aide est accéder par _Get-Help_
707
708
709
	#REQUIRES -Version 2.0
710
	<#
711
	.SYNOPSIS
712
	A brief description of the function or script.
713
	This keyword can be used only once in each topic.
714
	.DESCRIPTION
715
	A detailed description of the function or script.
716
	This keyword can be used only once in each topic.
717
	.NOTES
718
	File Name
719
	: xxxx.ps1
720
	Author
721
	:
722
	Prerequisite
723
	: PowerShell V2 over Vista and upper.
724
	Copyright 2011 -
725 1 Patrice Nadeau
	.LINK
726 19 Patrice Nadeau
	Script posted over:
727
	http://
728
	.EXAMPLE
729
	Example 1
730 1 Patrice Nadeau
	.EXAMPLE
731 19 Patrice Nadeau
	Example 2
732
	#>
733
734
## Vim
735 1 Patrice Nadeau
736
* Entête (en commentaires)
737
    * Titre
738
    * Last Change:
739
    * Maintainer:
740 20 Patrice Nadeau
    * License: This file is placed in the public domain.
741 19 Patrice Nadeau
* Autre mots reconnus
742 1 Patrice Nadeau
    * BUG: (Error:)
743
    * TODO:
744
    * Note:
745
    * FIXME
746
747
## Références
748
749
Références ayant servis à ce document.
750
751
[ChangeLog](http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs)
752
[GNU deprecated attribute](http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Type-Attributes.html)