Projet

Général

Profil

SOP 001-Programmation » Historique » Version 72

Patrice Nadeau, 2018-03-31 16:12

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