Projet

Général

Profil

SOP 001-Programmation » Historique » Version 62

Patrice Nadeau, 2018-03-31 15:31

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