OVH Cloud OVH Cloud

règle pour écrire les "usage: ..."

34 réponses
Avatar
Thomas
bonjour :-)


est-ce qu'on peut trouver qqpart une règle pour écrire les "usage: ..." ?

par ex, je sais que [] indique qqch de facultatif, mais il y a plein
d'autres choses que je ne connais pas / pas bien.


par ex, si j'écris :

usage: rapid [-v] (gui_file | -ni [-od dir] gui_file...)

est-ce que tout le monde comprend, sans ambiguité ?

--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/

10 réponses

1 2 3 4
Avatar
Olivier Miakinen
Le 13/07/2022 21:36, Thomas a écrit :
Cela dit, le message « Unexpected switch -v » est inapproprié. Selon
que ta syntaxe accepte ou non plus d'un fichier, ce sera soit :
File not found '-v' (sauf bien sͻr si le fichier -v existe)
soit :
No more than one file! (gui_file -v)

j'ai tendance Í  penser qu'en l'absence de "--", tout argument commençant
par "-" est une option, et que, sorties de la zone prévue pour elles,
elles sont mal positionnées.

Pour fixer le contexte, je précise que je ne connais pas le monde Ada,
mais que je n'ai pas non plus une connaissance théorique des normes
Posix. Simplement je travaille sur des machines Unix depuis près de
35 ans, ce qui me donne une habitude « pratique » de la plupart des
commandes. Cette habitude fait que j'ai certaines attentes quant au
comportement lors de la lecture des arguments, et que la plupart du
temps je ne suis pas surpris par le comportement réel.
Ce sont ces attentes, satisfaites dans l'immense majorité des cas, que
je décris ici.
ça me parait un peu cafouilleux de dire : les noms de fichier commençant
par "-" sont autorisés, Í  condition d'en trouver un qui ne commence pas
par "-" Í  mettre en 1er.

Alors moi, voici comment je me représente les choses et ce n'est pas
cafouilleux dans mon esprit, même si j'ai peut-être une représentation
fausse. Pour moi, la syntaxe d'une commande est pratiquement toujours
de la forme :
NOM [OPTIONS] [ARGUMENTS]
O͹ :
NOM
Est le nom unique de la commande, le plus souvent tout en minuscules,
et toujours sans espaces.
OPTIONS
Est une liste d'options dont chacune commence par un tiret, parfois
deux tirets pour les options longues. Chaque option est soit sans
paramètre, soit avec un paramètre unique. Qu'il y ait ou non un
paramètre est propre Í  l'option et ne change pas pour cette commande
et cette option. Exemples :
-a
--nom-long
-a param
-aparam
--nom-long=param
Et lorsque toutes les options courtes sont sur un seul caractère je
sais que je peux les combiner dans n'importe quel ordre. Exemples :
ls -lt -r
ls -r -l -t
ls -tlr
ARGUMENTS
Est une liste d'arguments, souvent des noms de fichiers traités dans
l'ordre l'un après l'autre.
Par ailleurs, je sais que l'on passe automatiquement de la partie OPTIONS
Í  la partie ARGUMENTS dès que l'on trouve un mot qui commence par autre
chose qu'un tiret (en dehors des paramètres d'options bien sÍ»r). Et que
si le premier argument doit commencer par un tiret, alors il faut mettre
explicitement un séparateur -- entre les deux parties (ce séparateur
étant bien sÍ»r autorisé même si le premier argument ne pose pas de souci.
VoilÍ , c'est ça ma représentation implicite, qui marche la plupart du
temps sauf pour certaines commandes que je trouve alors bizarres tant
que je ne m'y suis pas habitué. C'est le même genre de représentation
implicite qui fait que lorsque je vois un mammifère je ne m'attends
pas Í  ce qu'il ponde des ½ufs... jusqu'au jour o͹ je tombe sur un
ornithorynque.
[...]

j'ai oublié de demander en passant : je peux garder le même "Usage:"
même s'il laisse penser que l'ordre est important ? l'important c'est
qu'en réalité ça ne soit pas le cas ?

À mon avis, oui. Ceux qui veulent respecter l'ordre le respecteront
et tout ira bien pour eux, tout comme ceux qui pensent que l'ordre
n'a pas d'importance. Ça me rappelle cette anecdote d'un logiciel o͹
le message « press any key to continue » aurait été changé en « press
a key to continue », parce que des utilisateurs ne savaient pas trouver
la touche « any » mais qu'ils savaient trouver la touche « a ».
Pour moi, dans ma représentation implicite, ce qui est dans [OPTIONS] est
par défaut indépendant de l'ordre, alors que ce qui est dans [ARGUMENTS]
est par défaut sensible Í  l'ordre.
[...]
LÍ  aussi, encore que ta syntaxe est assez particulière. Comme Nicolas
je ne sais pas ce que fait ton logiciel et je ne l'utiliserai sans
doute jamais,

et je vous remercie tous de prendre du temps pour moi malgré ça :-))
(ce que j'espère au fond, c'est qu'un jour vous trouviez mon logiciel
utile et que vous constatiez le résultat de vos "contributions")

Pour le moment tu ne nous en as pas dit assez pour qu'on sache Í  quoi ça
pourrait nous servir (ou alors tu l'as fait dans une autre discussion,
que je n'ai pas lue ou que j'ai oubliée Í  cause de ma mauvaise mémoire).
[...]
Te serait-il possible d'accepter l'option -od dans tous les cas lors du
parsing, en disant juste 'attention cette option ne fait rien dans cette
version de la syntaxe' ? Bon, je ne suis pas sͻr que ce soit une bonne
idée non plus.


En fait, ce que j'imagine, c'est que le parsing des options se fasse d'une
façon indépendante. Tu vois un '-ni', tu mets un flag 'with_ni'. Tu vois un
'-od /tmp', tu mets le flag 'with_od' et tu stockes '/tmp' dans 'the_od'.
Tu vois un '-v', tu mets le flag 'with_v'. Et c'est seulement Í  la fin que
tu fais des tests de cohérence : si tu vois Í  ce moment-lÍ  que le booléen
'with_od' a été positionné mais pas 'with_ni', c'est lÍ  que tu peux balancer
un message d'erreur.
tu veux dire, faire un avertissement au lieu d'une erreur ?
actuellement il fait un avertissement pour les options inconnues,
ce que j'ai transformé en erreur parce que ça me parait bcp plus sur
(voir plus haut).

Avertissement ou erreur, c'est toi qui décides. Mais tu t'es simplifié le
parsing des options en faisant une seule boucle et sans te poser des
questions, jusqu'au moment o͹ tu as enfin *tous* les éléments en main
pour le message le plus approprié.
Ou alors tu changes la syntaxe pour qu'il y ait *une* sous-commande
obligatoire, plus les paramètres optionnels, et enfin les paramètres
positionnels. Par exemple :
Usage: ./rapid i [-v] gui_file
./rapid ni [-v] [-od output_directory] gui_file...

oui, comme dans svn :-)
intéressant :-)

Je n'avais pas osé parlé de cvs :-)
Note qu'ils font déjÍ  partie des cas particuliers qui ne rentrent pas
dans les cases de ma représentation implicite.
[...]

Désolé, j'ai déjÍ  beaucoup écrit, je n'ai pas le courage de continuer.
--
Olivier Miakinen
Avatar
Nicolas George
Olivier Miakinen , dans le message <tane3v$283q$,
a écrit :
Pour fixer le contexte, je précise que je ne connais pas le monde Ada,
mais que je n'ai pas non plus une connaissance théorique des normes
Posix. Simplement je travaille sur des machines Unix depuis près de
35 ans, ce qui me donne une habitude « pratique » de la plupart des
commandes. Cette habitude fait que j'ai certaines attentes quant au
comportement lors de la lecture des arguments, et que la plupart du
temps je ne suis pas surpris par le comportement réel.
Ce sont ces attentes, satisfaites dans l'immense majorité des cas, que
je décris ici.

Clap clap clap.
ça me parait un peu cafouilleux de dire : les noms de fichier commençant
par "-" sont autorisés, Í  condition d'en trouver un qui ne commence pas
par "-" Í  mettre en 1er.

Alors moi, voici comment je me représente les choses et ce n'est pas
cafouilleux dans mon esprit, même si j'ai peut-être une représentation
fausse. Pour moi, la syntaxe d'une commande est pratiquement toujours
de la forme :
NOM [OPTIONS] [ARGUMENTS]
O͹ :
NOM
Est le nom unique de la commande, le plus souvent tout en minuscules,
et toujours sans espaces.
OPTIONS
Est une liste d'options dont chacune commence par un tiret, parfois
deux tirets pour les options longues. Chaque option est soit sans
paramètre, soit avec un paramètre unique. Qu'il y ait ou non un
paramètre est propre Í  l'option et ne change pas pour cette commande
et cette option. Exemples :
-a
--nom-long
-a param
-aparam
--nom-long=param

Ou --nom-long param.
Par ailleurs, je sais que l'on passe automatiquement de la partie OPTIONS
Í  la partie ARGUMENTS dès que l'on trouve un mot qui commence par autre
chose qu'un tiret (en dehors des paramètres d'options bien sÍ»r).

Sauf les GNUeries, qui acceptent des options après des arguments. Mais
respectent -- heureusement !
Le reste de tes conseils me semble de tout bon sens.
Avatar
Thomas
In article ,
Alain Ketterlin wrote:
Thomas writes:
>> accepter "-vn" comme "-v -n",
>> accepter "-odir" comme "-o dir",
>
> est-ce que c'est qqch que les usagers utilisent bcp, ça ?
> parce que moi je trouve ça plutÍ´t embêtant, avec notamment :
> "-onv" = "-o -n -v", ou
> "-onv" => dir = "nv" ?
La seconde. Si un argument contient plusieurs options, la première
nécessitant un argument d'option s'impose : l'argument de l'option est
soit la suite, soit l'argument suivant.

(si l'argument suivant est une option, que fait getopt() ?)

-o -v => -v est l'argument de l'option -o (idem "-o-v")

-o -- c'est pareil ? c'est un cas particulier o͹ -- n'interrompt pas les
options ?
ce que je voulais dire c'est qu'Í  la relecture c'est pas évident du
tout, il faut déchiffrer.
c'est qqch que j'évite au maximum.

Je pense que c'est juste le contraire : on lit de gauche Í  droite, il
suffit de savoir quelle option a un argument.

on peut déchiffrer comme un dev C peut déchiffrer du C.
mais si on n'a pas besoin de déchiffrer c'est quand même plus pratique
...
sérieusement, tu pratiques ça souvent, de ne pas mettre d'espace pour
tes arguments d'option alors que c'est autorisé ?
si je te suis bien, tu considères qu'il n'est pas important de traiter
"--" ?

VoilÍ  ce qu'il faut ajouter :
elif argv[optind] == "--":
optind += 1
break

d'après ce que je comprend ailleurs, si, c'est important, alors je
l'ajoute.
(j'attend ta confirmation Í  la 1ere question.)
On peut affiner le cas d'erreur o͹ "-od" est le dernier élément.

hé oui ! lÍ  tu utilises argv[optind+1] sans vérifier qu'il existe !

Si si, c'est vérifié.

exact, désolé, erreur d'attention.
(À mon avis, ce n'est pas assez gratifiant pour se passer de getopt() ou
s'écarter de ses conventions, mais chacun son truc.)

je ne comprend pas cette phrase.

Cela signifie : moi j'utiliserais getopt() Í  la place

j'ai failli dire que je ne peux pas parce que ça ne supporte qu'un seul
caractère,
mais en fait il semble que celle de gnat ne repique pas directement
celle de Posix en C, et qu'elle accepte les options de plusieurs
caractères.
il faut juste que je vérifie que c'est compatible avec les options
longues, et ça devrais être envisageable.
j'espère juste que celle de gnat ne s'écarte pas trop des conventions de
celle de Posix (mais elle en implemente au moins une partie que je
n'aurais pas fait sinon)
https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/ada/libgnat/g-comlin.ads;
h¢d90716a4ce7c8460161984786a3dc00292a754;hb=refs/heads/releases/gcc-12
( https://urlpetite.net/?eps )
l 44-83, 366-500
je programme en Ada, et ça ne fait pas partie de la norme Ada. donc ça
me fait dépendre de mon compilateur via ses "suppléments".
ça peut être gênant pour ceux qui voudraient utiliser un autre
compilateur que le mien.

Il doit y a avoir quelque chose d'équivalent Í  getopt. En python il y a
un module getopt et aussi argparse. Si ça n'y est pas, tu peux rÍ¢ler
auprès des développeurs de la bibliothèque standard.

c'est une chose qui est envisageable :-)
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article <tane3v$283q$,
Olivier Miakinen <om+ wrote:
Pour fixer le contexte,

bonne idée :-)
je précise que je ne connais pas le monde Ada,
mais que je n'ai pas non plus une connaissance théorique des normes
Posix. Simplement je travaille sur des machines Unix depuis près de
35 ans, ce qui me donne une habitude « pratique » de la plupart des
commandes. Cette habitude fait que j'ai certaines attentes quant au
comportement lors de la lecture des arguments, et que la plupart du
temps je ne suis pas surpris par le comportement réel.

ça compte !
Ce sont ces attentes, satisfaites dans l'immense majorité des cas, que
je décris ici.
Le 13/07/2022 21:36, Thomas a écrit :
ça me parait un peu cafouilleux de dire : les noms de fichier commençant
par "-" sont autorisés, Í  condition d'en trouver un qui ne commence pas
par "-" Í  mettre en 1er.

Alors moi, voici comment je me représente les choses et ce n'est pas
cafouilleux dans mon esprit, même si j'ai peut-être une représentation
fausse. Pour moi, la syntaxe d'une commande est pratiquement toujours
de la forme :
NOM [OPTIONS] [ARGUMENTS]
O͹ :
NOM
OPTIONS
Est une liste d'options dont chacune commence par un tiret,
-a param

(peux tu me confirmer pour -a -- si jamais tu réponds avant Alain stp ?)
-aparam
--nom-long=param

(si je n'arrive pas Í  faire marcher getopt() je ne programmerai pas ça.)
ARGUMENTS
Est une liste d'arguments, souvent des noms de fichiers traités dans
l'ordre l'un après l'autre.
Par ailleurs, je sais que l'on passe automatiquement de la partie OPTIONS
Í  la partie ARGUMENTS dès que l'on trouve un mot qui commence par autre
chose qu'un tiret (en dehors des paramètres d'options bien sÍ»r).
Et que
si le premier argument doit commencer par un tiret, alors il faut mettre
explicitement un séparateur -- entre les deux parties (ce séparateur
étant bien sÍ»r autorisé même si le premier argument ne pose pas de souci.

ah oui, c'est une façon de dire plus élégante que la mienne, et
effectivement ça passe "autrement" :-D
VoilÍ , c'est ça ma représentation implicite, qui marche la plupart du
temps sauf pour certaines commandes que je trouve alors bizarres tant
que je ne m'y suis pas habitué. C'est le même genre de représentation
implicite qui fait que lorsque je vois un mammifère je ne m'attends
pas Í  ce qu'il ponde des ½ufs... jusqu'au jour o͹ je tombe sur un
ornithorynque.

j'aime bien l'analogie :-)
Ça me rappelle cette anecdote d'un logiciel o͹
le message « press any key to continue » aurait été changé en « press
a key to continue », parce que des utilisateurs ne savaient pas trouver
la touche « any » mais qu'ils savaient trouver la touche « a ».

ça ressemble Í  une réaction d'autiste :-)
LÍ  aussi, encore que ta syntaxe est assez particulière. Comme Nicolas
je ne sais pas ce que fait ton logiciel et je ne l'utiliserai sans
doute jamais,

et je vous remercie tous de prendre du temps pour moi malgré ça :-))
(ce que j'espère au fond, c'est qu'un jour vous trouviez mon logiciel
utile et que vous constatiez le résultat de vos "contributions")

Pour le moment tu ne nous en as pas dit assez pour qu'on sache Í  quoi ça
pourrait nous servir (ou alors tu l'as fait dans une autre discussion,
que je n'ai pas lue ou que j'ai oubliée Í  cause de ma mauvaise mémoire).

dans mes souvenirs j'en ai parlé dans le fil "gérer des fichiers log"
qui a environ 1 an puisqu'il commence Í  s'effacer de mon serveur.
si jamais ça t'intéresse, voilÍ  les liens pertinents :
Page d'accueil du projet :
http://savannah.nongnu.org/projects/rapid/
une partie de la doc :
http://www.nongnu.org/rapid/
une autre partie de la doc : la documentation Markdown que j'ai faite,
et qu'on ne trouve pas ailleurs parce que je n'ai pas encore fait de
version publique officielle :
http://svn.savannah.gnu.org/viewvc/rapid/branches/gtkada-2.24/
Te serait-il possible d'accepter l'option -od dans tous les cas lors du
parsing, en disant juste 'attention cette option ne fait rien dans cette
version de la syntaxe' ? Bon, je ne suis pas sͻr que ce soit une bonne
idée non plus.

En fait, ce que j'imagine, c'est que le parsing des options se fasse d'une
façon indépendante. Tu vois un '-ni', tu mets un flag 'with_ni'. Tu vois un
'-od /tmp', tu mets le flag 'with_od' et tu stockes '/tmp' dans 'the_od'.
Tu vois un '-v', tu mets le flag 'with_v'. Et c'est seulement Í  la fin que
tu fais des tests de cohérence : si tu vois Í  ce moment-lÍ  que le booléen
'with_od' a été positionné mais pas 'with_ni', c'est lÍ  que tu peux balancer
un message d'erreur.
tu veux dire, faire un avertissement au lieu d'une erreur ?
actuellement il fait un avertissement pour les options inconnues,
ce que j'ai transformé en erreur parce que ça me parait bcp plus sur
(voir plus haut).

Avertissement ou erreur, c'est toi qui décides. Mais tu t'es simplifié le
parsing des options en faisant une seule boucle et sans te poser des
questions, jusqu'au moment o͹ tu as enfin *tous* les éléments en main
pour le message le plus approprié.

ce que ça m'inspire, c'est que cette boucle, si elle doit être la même
partout, elle peut être factorisée ...
getopt() pourrait fournir une structure de données en forme de
map (carte ?), contenant toutes les données qu'on peut vouloir trouver
sur la ligne de commande d'une façon qui soit organisée.
si je trouve le temps, j'essaierai de le faire,
mais en ADA, alors je donne l'idée tout de suite pour les autres ;-)
Ou alors tu changes la syntaxe pour qu'il y ait *une* sous-commande
obligatoire, plus les paramètres optionnels, et enfin les paramètres
positionnels.

Note qu'ils font déjÍ  partie des cas particuliers qui ne rentrent pas
dans les cases de ma représentation implicite.
[...]

Désolé, j'ai déjÍ  beaucoup écrit, je n'ai pas le courage de continuer.

il n'en restait plus bcp,
mais si tu avais encore des choses Í  dire et que tu as de nouveau du
courage, ça sera avec plaisir :-))
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Olivier Miakinen
Le 14/07/2022 18:54, Thomas a écrit :
-o -v => -v est l'argument de l'option -o (idem "-o-v")

-o -- c'est pareil ?

Oui, bien sͻr.
c'est un cas particulier o͹ -- n'interrompt pas les
options ?

Non, c'est le cas *général* qui est que la forme d'un paramètre d'option
n'a aucune espèce d'influence sur le traitement des options. Lorsque tu
lis les options, si tu tombes sur -o et que c'est une option avec paramètre,
alors tu te contentes de récupérer ce paramètre avant de passer Í  l'option
suivante, mais ce paramètre ne *peut pas* être une option. Ça ne peut donc
pas être non plus le délimiteur de fin d'options, et ça ne peut pas non
plus être le premier argument de type gui_file.
C'est juste une chaÍ®ne de caractères qui sera traitée dans un second temps
comme le paramètre du -o.
[...]
sérieusement, tu pratiques ça souvent, de ne pas mettre d'espace pour
tes arguments d'option alors que c'est autorisé ?

Pour ma part, cela dépend. Par exemple je n'ai aucune hésitation pour un
chiffre donnant un niveau de debug (-d5 pour -d 5), dans certaines commandes
je n'hésiterais pas non plus lorsque les paramètres possibles sont des mots-
clés d'une liste connue (-ttcp, -tudp, -ticmp), mais j'hésiterais pour des
noms de fichiers (-f.profile pour -f .profile).
Quoi qu'il en soit, je trouve qu'il vaut mieux être permissif sur ce point
de la part du programme. Après tout, on écrit le programme une seule fois
alors que, si le programme est utile, on l'appellera un grand nombre de fois.
--
Olivier Miakinen
Avatar
Olivier Miakinen
Le 14/07/2022 20:02, Thomas a écrit :
-a param

(peux tu me confirmer pour -a -- si jamais tu réponds avant Alain stp ?)

J'ai déjÍ  répondu. Lorsque le programme lit -a dans les options, il lit
le paramètre qui suit tel quel, sans interprétation.
Faire autrement, outre que ça ne servirait Í  rien, rendrait impossible
d'avoir la valeur -- comme paramètre de l'option -a : ce serait donc Í 
la fois inutile et nuisible !
[...]
Ça me rappelle cette anecdote d'un logiciel o͹
le message « press any key to continue » aurait été changé en « press
a key to continue », parce que des utilisateurs ne savaient pas trouver
la touche « any » mais qu'ils savaient trouver la touche « a ».

ça ressemble Í  une réaction d'autiste :-)

Peut-être. Attention quand même Í  ne pas avoir une vision trop caricaturale
de ce qu'est un autiste. Par exemple je me suis rendu compte récemment que
j'ai de nombreux traits autistiques, et que c'était déjÍ  dans la famille
avant moi.
[...]
dans mes souvenirs j'en ai parlé dans le fil "gérer des fichiers log"
qui a environ 1 an puisqu'il commence Í  s'effacer de mon serveur.
si jamais ça t'intéresse, voilÍ  les liens pertinents :
Page d'accueil du projet :
http://savannah.nongnu.org/projects/rapid/

§
RAPID is the Rapid Ada Portable Interface Design tool.
§
Haha, j'aime bien les acronymes récursifs. ;-)
Il y a peu de chances que j'aie l'occasion d'apprendre et d'utiliser Ada, de
même qu'il y a peu de chances que j'aie besoin de créer des programmes avec
une interface graphique. Cela fait deux raisons qui m'incitent Í  penser que
je n'utiliserai pas rapid.
Cela étant dit, tout est toujours possible : il y a un peu plus d'un an, jamais
je n'aurais imaginé me mettre Í  programmer en Python, et pourtant je m'y suis
mis en quelques jours pour un besoin précis.
[...]
Avertissement ou erreur, c'est toi qui décides. Mais tu t'es simplifié le
parsing des options en faisant une seule boucle et sans te poser des
questions, jusqu'au moment o͹ tu as enfin *tous* les éléments en main
pour le message le plus approprié.

ce que ça m'inspire, c'est que cette boucle, si elle doit être la même
partout, elle peut être factorisée ...

Oui, c'est en gros le bout d'algorithme que t'avait donné Alain, et c'est
ce que fait en standard la fonction getopt().
getopt() pourrait fournir une structure de données en forme de
map (carte ?), contenant toutes les données qu'on peut vouloir trouver
sur la ligne de commande d'une façon qui soit organisée.

L'argument principal que tu dois donner Í  getopt, c'est la liste des
noms d'option (en une seule lettre), avec pour chacun d'eux si cette
option attend ou non un paramètre.
Désolé, j'ai déjÍ  beaucoup écrit, je n'ai pas le courage de continuer.

il n'en restait plus bcp,
mais si tu avais encore des choses Í  dire et que tu as de nouveau du
courage, ça sera avec plaisir :-))

Bah, en gros tu me demandais mon avis sur une syntaxe moins standard du
style de cvs ou svn. Comme c'est moins standard, je n'ai pas vraiment
d'avis bien tranché dessus. C'est surtout ça qui fait que je manque de
courage pour y réfléchir.
--
Olivier Miakinen
Avatar
Marc SCHAEFER
Olivier Miakinen <om+ wrote:
Faire autrement, outre que ça ne servirait Í  rien, rendrait impossible
d'avoir la valeur -- comme paramètre de l'option -a : ce serait donc Í 
la fois inutile et nuisible !

En théorie -a '--' pourrait fonctionner?
Avatar
Thomas
In article <tapnh8$301l$,
Olivier Miakinen <om+ wrote:
Le 14/07/2022 18:54, Thomas a écrit :
-o -v => -v est l'argument de l'option -o (idem "-o-v")

-o -- c'est pareil ?

Oui, bien sͻr.
c'est un cas particulier o͹ -- n'interrompt pas les
options ?

Non, c'est le cas *général* qui est que la forme d'un paramètre d'option
n'a aucune espèce d'influence sur le traitement des options.
C'est juste une chaÍ®ne de caractères qui sera traitée dans un second temps
comme le paramètre du -o.

merci pour l'éclaircissement, c'est programmé en suivant ce principe. :-)
[...]
sérieusement, tu pratiques ça souvent, de ne pas mettre d'espace pour
tes arguments d'option alors que c'est autorisé ?

Pour ma part, cela dépend. Par exemple je n'ai aucune hésitation pour un
chiffre donnant un niveau de debug (-d5 pour -d 5), dans certaines commandes
je n'hésiterais pas non plus lorsque les paramètres possibles sont des mots-
clés d'une liste connue (-ttcp, -tudp, -ticmp), mais j'hésiterais pour des
noms de fichiers (-f.profile pour -f .profile).

merci pour l'éclaircissement lÍ  aussi. :-)
je n'avais pas pensé aux autres usages, et du coup je suis d'accord avec
toi. :-)
Nicolas m'a induit en erreur :
accepter "-odir" comme "-o dir",
est-ce que c'est qqch que les usagers utilisent bcp, ça ?

Oui.

avec des noms de fichiers / répertoires, je trouve ça illisible.
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article <tapoqu$30bq$,
Olivier Miakinen <om+ wrote:
Le 14/07/2022 20:02, Thomas a écrit :
-a param

(peux tu me confirmer pour -a -- si jamais tu réponds avant Alain stp ?)

J'ai déjÍ  répondu. Lorsque le programme lit -a dans les options, il lit
le paramètre qui suit tel quel, sans interprétation.

moi aussi j'ai trouvé plus logique de répondre de l'autre coté. ;-)
Faire autrement, outre que ça ne servirait Í  rien, rendrait impossible
d'avoir la valeur -- comme paramètre de l'option -a : ce serait donc Í 
la fois inutile et nuisible !

si on n'en a qu'un seul, on pourrais faire "-a -- --".
mais, tu as raison, si on en a besoin d'un 2eme comme ça, c'est cuit !
[...]
Ça me rappelle cette anecdote d'un logiciel o͹
le message « press any key to continue » aurait été changé en « press
a key to continue », parce que des utilisateurs ne savaient pas trouver
la touche « any » mais qu'ils savaient trouver la touche « a ».

ça ressemble Í  une réaction d'autiste :-)

Peut-être. Attention quand même Í  ne pas avoir une vision trop caricaturale
de ce qu'est un autiste.

je le suis,
par contre ma remarque est basée bcp plus sur ce que j'ai appris que sur
mon expérience perso.
tu as raison de dire d'être vigilant sur ce sujet,
par contre je crois que c'est assez souvent une bonne chose de mettre le
sujet sur la table quand on en a l'occasion, ne serais-ce que pour
sensibiliser "par force" les ignorants, même si on n'a pas une précision
"d'horloger suisse"
(Í  condition que personne ne soit dogmatique, sinon j'imagine que ça
peut vite fiche les choses par terre).
Par exemple je me suis rendu compte récemment que
j'ai de nombreux traits autistiques, et que c'était déjÍ  dans la famille
avant moi.

tu aurais éventuellement intérêt Í  vérifier.
c'est tout Í  fait optionnel si tu trouves ton environnement confortable
et ton entourage bienveillant.
[...]

si jamais ça t'intéresse, voilÍ  les liens pertinents :
Page d'accueil du projet :
http://savannah.nongnu.org/projects/rapid/

§
RAPID is the Rapid Ada Portable Interface Design tool.
§
Haha, j'aime bien les acronymes récursifs. ;-)

:-)
perso je considère que c'est pas rigoureusement récursif, parce que le
"Rapid" désigné par le R est l'adjectif.
mais d'après moi l'auteur a d'autant plus de mérite, par rapport Í  ceux
qui sont rigoureusement récursif.
par ex HAC (HAC Ada Compiler) ( https://hacadacompiler.sourceforge.io/ ),
même s'il a probablement aussi voulu faire un jeu de mots avec
"hacking", pour son acronyme il a pu choisir la 1ere lettre qu'il
voulait, elle ne lui était pas imposée par son acronyme.
je n'ai encore jamais vu d'acronyme récursif dont l'acronyme ne serait
pas le 1er mot, du genre :
RADAR = Radio Aberration Detection Acronym RADAR
c'est pas évident : l'initiale de l'acronyme doit obligatoirement
correspondre Í  la lettre de la place qu'il occupe.
(bon, je n'arrive pas tellement Í  être clair, mais je suppose que tu
arrives quand même Í  me suivre. :-) )
Il y a peu de chances que j'aie l'occasion d'apprendre et d'utiliser Ada, de
même qu'il y a peu de chances que j'aie besoin de créer des programmes avec
une interface graphique. Cela fait deux raisons qui m'incitent Í  penser que
je n'utiliserai pas rapid.
Cela étant dit, tout est toujours possible : il y a un peu plus d'un an,
jamais
je n'aurais imaginé me mettre Í  programmer en Python, et pourtant je m'y suis
mis en quelques jours pour un besoin précis.

bon, he bien ... pour mon ego, je souhaite que tu t'y mettes. ;-)
... mais pas demain matin, c'est pas possible, c'est pas prêt. :-)
[...]
Avertissement ou erreur, c'est toi qui décides. Mais tu t'es simplifié le
parsing des options en faisant une seule boucle et sans te poser des
questions, jusqu'au moment o͹ tu as enfin *tous* les éléments en main
pour le message le plus approprié.

ce que ça m'inspire, c'est que cette boucle, si elle doit être la même
partout, elle peut être factorisée ...

Oui, c'est en gros le bout d'algorithme que t'avait donné Alain, et c'est
ce que fait en standard la fonction getopt().
getopt() pourrait fournir une structure de données en forme de
map (carte ?), contenant toutes les données qu'on peut vouloir trouver
sur la ligne de commande d'une façon qui soit organisée.

L'argument principal que tu dois donner Í  getopt, c'est la liste des
noms d'option (en une seule lettre), avec pour chacun d'eux si cette
option attend ou non un paramètre.

je ne suis pas sur que tu aies bien compris,
mais ce qui nous a embrouillé c'est surement :
- qu'en Ada il est autorisé de faire plusieurs fonctions de même nom
avec des paramètres (y compris le retour) différents,
- alors qu'en C je crois bien que c'est interdit.
je parle d'une fonction getopt() Í  laquelle on donne les mêmes
paramètres d'entrée, mais :
- qu'on n'appelle qu'une seule fois,
- au lieu de donner des infos sur 1 switch Í  la fois,
ça retourne une structure de données contenant toutes les infos sur tous
les switches.
Í  nous, ensuite, d'aller piocher dans cette structure de données ce
qu'on cherche.
͠ propos, est-ce qu'il y a des cas de figure o͹ on ne donne pas tout le
temps les mêmes paramètres d'entrée Í  getopt() ?
Désolé, j'ai déjÍ  beaucoup écrit, je n'ai pas le courage de continuer.

il n'en restait plus bcp,
mais si tu avais encore des choses Í  dire et que tu as de nouveau du
courage, ça sera avec plaisir :-))

Bah, en gros tu me demandais mon avis sur une syntaxe moins standard du
style de cvs ou svn. Comme c'est moins standard, je n'ai pas vraiment
d'avis bien tranché dessus. C'est surtout ça qui fait que je manque de
courage pour y réfléchir.

ok.
alors une condition pour le faire si je me met Í  getopt(), c'est que
cette fonction soit compatible avec cet usage.
(mais tu ne sais probablement pas, si tu ne t'en sers pas (?) )
je me rappelle d'une question connexe :
j'ai remarqué que svn, comme make, autorise l'auto-complétion, avec ses
commandes Í  lui.
quand c'est pour les fichiers, le shell se débrouille avec le système,
pas besoin d'interaction avec le programme.
mais lÍ , comment ça se passe ?
est-ce que ça nécessite des fonctions posix, pas forcément portables ?
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
Avatar
Thomas
In article <62cf4bd6$0$9132$,
Nicolas George <nicolas$ wrote:
Olivier Miakinen , dans le message <tane3v$283q$,
a écrit :
OPTIONS
Est une liste d'options dont chacune commence par un tiret, parfois
deux tirets pour les options longues. Chaque option est soit sans
paramètre, soit avec un paramètre unique. Qu'il y ait ou non un
paramètre est propre Í  l'option et ne change pas pour cette commande
et cette option. Exemples :
-a
--nom-long
-a param
-aparam

--nom-long=param

Ou --nom-long param.

--nom-longparam ?
Par ailleurs, je sais que l'on passe automatiquement de la partie OPTIONS
Í  la partie ARGUMENTS dès que l'on trouve un mot qui commence par autre
chose qu'un tiret (en dehors des paramètres d'options bien sÍ»r).

Sauf les GNUeries, qui acceptent des options après des arguments. Mais
respectent -- heureusement !

j'ai pris le parti de faire comme les "GNUeries", parce que je crois que
c'est ce que fait mon getopt().
je n'ai pas encore tenté de m'en servir, mais ça va venir ...
en attendant, j'ai pris soin de prendre en charge "--", comme ça vous
n'aurez pas Í  échapper avec "./". :-)
Le reste de tes conseils me semble de tout bon sens.

je n'ai plus tout le fil en tête, mais je crois les avoir appliqués au
mieux :-)
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
1 2 3 4