[Progetto] C Library for parsing command line arguments

Iniziative e progetti della comunità legati a Ubuntu.
Regole della sezione
Questa sezione ha lo scopo di raccogliere le iniziative/progetti della nostra Comunità legati ad Ubuntu. I progetti ospitati nascono da iniziative degli utenti o gruppi di utenti. In futuro i progetti potrebbero rimanere iniziative "personali" o essere integrate nella distribuzione, sponsorizzate da Ubuntu o da Canonical a discrezione dei responsabili. All'interno di essa sarà possibile inserire delle discussioni che hanno la funzione di pubblicizzare avvenimenti, iniziative e progetti software su Ubuntu e GNU/Linux in generale. Sarà inoltre possibile per gli utenti proporre lo sviluppo di nuovi software e in questo caso la discussione di richiesta avrà la funzione di generare un requisito funzionale del prodotto da sviluppare.

Sezione I - Iniziative
  • Fanno parte di iniziative, ad esempio, le seguenti categorie: corsi, progetti editoriali, libri.
  • La segnalazione di un'iniziativa avviene creando una discussione con l'annuncio.
  • Una volta effettuata la segnalazione, la discussione viene chiusa dal Gruppo Forum.
  • Se l'iniziativa esposta comporta un costo di adesione o fruizione, questo deve essere esplicitamente riportato all'interno della discussione.
  • È obbligatorio segnalare all'interno della discussione i riferimenti per poter contattare/partecipare all'iniziativa.
Sezione II - Progetti
  • La segnalazione di un progetto software, come per le iniziative, avviene e si sviluppa all'interno di una singola discussione.
  • Sarà consentito l'inserimento di software solo se rilasciati sotto licenza GPL (in tutte le sue versioni) o equivalente FOSS, tale da garantire agli utenti l'utilizzo del prodotto senza restrizioni e agli sviluppatori la proprietà intellettuale del codice prodotto.
  • Nell'oggetto della discussione dovrà essere riportata la categoria (es. [Iniziativa], [Progetto] o [Proposta]) e una semplice descrizione del progetto.
  • Se il progetto ha già un sito che lo ospita sarà a discrezione del Gruppo Forum chiuderla come segnalazione o lasciarla aperta.
  • Se il progetto non ha un sito che lo ospita si potranno aprire due discussioni, una per proporre modifiche/implementazioni (dove nel titolo occorre specificare [sviluppo]) ed una per segnalare problemi (e nel titolo dovrà comparire [supporto]).
  • Non è consentita l'apertura di nuove discussioni in riferimento a versioni superiori o modificate di un prodotto già riportato in precedenza.
  • Se il software oggetto del progetto ha una dimensione non superiore ai 128 kB, per prodotti che non hanno un sito che li ospita, sarà possibile allegarlo alla discussione.
Sezione III - Proposte
  • Una proposta deve essere eseguita e si svilupperà all'interno di una singola discussione.
  • Le proposte dovranno essere inserite direttamente nella sezione "Progetti della Comunità".
  • Dovranno essere specificate le funzionalità che devono essere sviluppate.
  • Non dovranno essere riportate diciture tipo "...deve fare come questo software...", ma indicare nel miglior modo possibile i requisiti.
  • Una volta segnalata la discussione resterà aperta per consentire uno scambio di idee su come sviluppare il codice o finché gli sviluppatori non forniranno una soluzione (da pubblicizzare poi, come visto prima, nella sezione Progetti) che ne soddisfi il requisito.
Per quanto non esposto sopra, si fa comunque riferimento al Regolamento del forum ed al Codice di Condotta della Comunità.
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Apposto, sembra funzionare.
Grazie

;)

EDIT:
un'altra piccola cosa:

non mi è chiaro come la tua libreria tratta i parametri corti "attaccati":

Codice: Seleziona tutto

sprintf(strDescr, "Specify how many faster results ignore (default %d)", _ELIMINA_VELOCI );	
myopt_AddOption(parser, idGroup, 'I', "ignore-fast", strDescr, false, MOB_OVERRIDE, 1, 1, "int");

sprintf(strDescr, "Don't sort the output");
myopt_AddOption(parser, idGroup, 'n', "do-not-sort", strDescr, false, MOB_ERROR, 0, 0, "");

Codice: Seleziona tutto

mario@ubuntu:~/Scrivania/Programmi c++/effitest$ ./effitest ./for_C_gcc ./for_C_gcc -n0 -I1 -i1
Error: unrecognized option '-0'
In pratica, -I1 e -i1 me li prende correttamente ('I' oppure 'i' seguiti dal parametro intero 1).
come quando faccio `cut -d,`

Invece -n0 me lo prende come se fosse -n -0.
come quando faccio `ls -la` invece che `ls -l -a`.

Dipende dal fatto che n non accetta parametri?
Ultima modifica di melfnt il martedì 28 giugno 2022, 18:49, modificato 1 volta in totale.
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Esatto.
In pratica è possibile raggruppare le opzioni corte che non accettano parametri con un solo '-'.
Per esempio, se a, b e c sono opzioni che non accettano parametri, puoi scrivere:

-abc

che equivale a:

-a -b -c
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

però
-nI1

me lo prende come se fosse
-n -I1

è corretto, anche se I accetta un parametro (intero)?
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Si, puoi raggruppare più opzioni corte tutte senza parametri tranne l'ultima che può accettare uno o più parametri.
A meno che non decidiamo diversamente. Potremmo fare in modo che il parser restituisca un errore se una qualsiasi delle opzioni raggruppate(anche l'ultima) accetta un parametro.

Lo standard cosa prevede?
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Non lo so, sono molto confuso riguardo a questo.
Il fatto è che la libreria accetta anche cose tipo: -nN50nl4

Mi sa che è meglio che l'ultima opzioni sia l'unica che possa accettare parametri.
Ho fatto un po' di prove con cut:

Codice: Seleziona tutto

mario@ubuntu:~$ cat file
ciao,come,stai
-s non accetta parametri, -d e -f sì.

La chiamata con le tre opzioni separate funziona (ovviamente...)

Codice: Seleziona tutto

mario@ubuntu:~$ cut -f3 -d, -s file
stai
Se raggruppo -f e -d da errore: pensa che tutto l'argomento all'infuori di "-f" sia il parametro di -f

Codice: Seleziona tutto

mario@ubuntu:~$ cut -f3d, file
cut: elenco di campi o byte non valido
Usare «cut --help» per ulteriori informazioni.
Se raggruppo -s con un'altra opzione che accetta parametri, da errore se l'opzione che accetta parametri non è l'ultima

Codice: Seleziona tutto

mario@ubuntu:~$ cut -f3 -sd, file
stai
mario@ubuntu:~$ cut -f3s -d, file
cut: elenco di campi o byte non valido
Usare «cut --help» per ulteriori informazioni.
Se raggruppo più funzioni che non accettano parametri con una che i accetta, quest'ultima dev'essere posta in fondo. (-n non accetta parametri)

Codice: Seleziona tutto

mario@ubuntu:~$ cut -f3 -snd, file
stai
Quindi, in definitiva è come hai spiegato tu. In ogni raggruppamento ci può essere un'unica opzione che accetta parametri e va posta in fondo.
Rimane quindi il bug di `-nN50nl4`, dove 50 e 4 sono gli argomenti di -N e -l.

Il tuo programma lo lascia passare.
;)
Ultima modifica di melfnt il martedì 28 giugno 2022, 18:51, modificato 1 volta in totale.
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Ok domani vedo di correggere quest'altro bug.

Se ti fa piacere posso aggiungere il tuo nome fra coloro che hanno contribuito allo sviluppo della libreria nel messaggio di copyright in cima ad ogni file sorgente(e nel file AUTHORS).
Se decidi per il si, mandami i tuoi dati tramite pm.

;)
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Ok domani vedo di correggere quest'altro bug.
È vero anche che non è detto che `cut` sia LO standard.
Ho visto programmi che accettano qualsiasi prefisso dell'opzione lunga come opzione corta, per esempio interpretano `-synchronize`, `-s` e `-sync` allo stesso modo.
Ho visto anche programmi che accettano opzioni "corte" di due caratteri, quindi `gcc -dv` è differente da `gcc -d -v`.

Quindi penso che la cosa sia abbastanza arbitraria.
Se ti fa piacere posso aggiungere il tuo nome fra coloro che hanno contribuito allo sviluppo della libreria nel messaggio di copyright in cima ad ogni file sorgente(e nel file AUTHORS).
Se decidi per il si, mandami i tuoi dati tramite pm.
Ok, fa sempre piacere dare una mano.
Comunque ti sto dicendo dei bug perché altrimenti il mio programma non funziona ;)
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Si lo so: esistono gli standard ma poi ognuno fa come gli pare.

Ho aggiornato i sorgenti. Prova e fammi sapere.

:ciao:
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Ok, domani scarico e provo.

Scusami ma oggi ho avuto un po' da fare.
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Sembra funzionare, solo che ho cambiato il modo di riportare gli errori del mio programma, quindi non sono così sicuro.

Quando metto apposto questa cosa ti faccio sapere.
Grazie per ora.
ixamit
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 499
Iscrizione: giovedì 14 novembre 2013, 10:16

Re: [Progetto] C Library for parsing command line arguments

Messaggio da ixamit »

Ciao Vincenzo1968,

ti segnalo un potenziale errore di sicurezza ed ulteriori accorgimenti da prendere in esame. Sarò sintetico:

Codice: Seleziona tutto

max@studio:~/Scaricati/myoptParser-master/examples$ gdb ./sample1 -q
Reading symbols from /home/max/Scaricati/myoptParser-master/examples/sample1...done.
(gdb) run `perl -e 'print "X"x300'`
Starting program: /home/max/Scaricati/myoptParser-master/examples/sample1 `perl -e 'print "X"x300'`

Program received signal SIGSEGV, Segmentation fault.
0x0000000000401a6f in myopt_ArgList (pd=0x7fffffffdab0) at myoptParser.c:436
436				if ( pd->m_Parser->countPosArgs >= MAX_OPTS )
(gdb) where
#0  0x0000000000401a6f in myopt_ArgList (pd=0x7fffffffdab0) at myoptParser.c:436
#1  0x0000000000401fa2 in myopt_Parse (parser=0x606010, strInput=<value optimized out>) at myoptParser.c:172
#2  0x0000000000400eaf in main ()
(gdb) print *pd
$1 = {m_Token = {Type = T_POSITIONAL, str = 'X' <repeats 256 times>, nNextPos = 300, bEndOfOptions = 88 'X', 
    bShortOptionState = 88 'X'}, m_Parser = 0x5858585858585858}
(gdb)  q
Presta molta attenzione nell'utilizzo della strcpy, una piccola distrazione e la macchina perde il controllo ;)

Codice: Seleziona tutto

myoptParser.c:	strcpy(parser->strExeName, argv[0]);
myoptParser.c:	strcpy(parser->strExeName, strExeName);
myoptParser.c:	strcpy(parser->strInput, strInput);	
myoptParser.c:					strcpy(md.m_Parser->arrayOptArgs[x].arrayArgs[y].strValue, pArgsList->arg.strValue);
myoptParser.c:			strcpy(strOption, pd->m_Token.str);
myoptParser.c:					strcpy(argument.arg.strValue, pd->m_Token.str);
myoptParser.c:						strcpy(argument.arg.strValue, pd->m_Token.str);
myoptParser.c:			strcpy(pd->m_Parser->arrayPosArgs[pd->m_Parser->countPosArgs].strValue, pd->m_Token.str);
myoptParser.c:				strcpy(strType1, "string");
myoptParser.c:				strcpy(strType1, "int");			
myoptParser.c:				strcpy(strType1, "float");
myoptParser.c:				strcpy(strType2, "string");
myoptParser.c:				strcpy(strType2, "int");			
myoptParser.c:				strcpy(strType2, "float");
myoptSymtab.c:	strcpy(parser->strPosArgsName, "POS_ARG");
myoptSymtab.c:		strcpy(parser->arrayGroups[parser->countGroups].strDescription, strDescription);
myoptSymtab.c:			strcpy(parser->arrayOptArgs[parser->countOptArgs].longName, longName);
myoptSymtab.c:		strcpy(parser->arrayOptArgs[parser->countOptArgs].strDescription, strDescription);
myoptSymtab.c:		strcpy(str, strTypes);
myoptSymtab.c:		strcpy(parser->arrayOptArgs[parser->countOptArgs].strTypes, str);
myoptSymtab.c:		strcpy(parser->strPosArgsName, "POS_ARG");
myoptSymtab.c:		strcpy(parser->strPosArgsName, strName);
myoptSymtab.c:		strcpy(str, strTypes);
myoptSymtab.c:		strcpy(parser->strPosTypes, str);
myoptSymtab.c:	strcpy(strTypes, strOut);
myoptSymtab.c:		strcpy(n->arg.strValue, Elem->arg.strValue);
Sperando di avere fatto una cosa gradita
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Ciao ixamit,

grazie per la segnalazione. Provvedo subito a sostituire strcpy con strncpy.

:ciao:
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Adesso dovrebbe andar bene.
Il parser controlla la lunghezza massima(1024 caratteri) per ogni token:

Codice: Seleziona tutto

[vincenzo]$ ./sample1 `perl -e 'print "X"x1025'`
Usage:
./sample1 Options POS_ARGS(zero or more)(string,int,float,string,string)

Options:
Group[0]: Gruppo 0:
'-h, --help' (optional)	Print this message and exit
'-x, --xlong-prova' (required)	Description option -x
'-y, --ylong' (optional)	Description option -y
'-z, --zlong' (optional)	Description option -z

Group[1]: Gruppo 1:
At least one of:
'-a, --along' (optional)	Description option -a
   Arguments for option '-a, --along': exactly 1(string)
'-b, --blong' (optional)	Description option -b
   Arguments for option '-b, --blong': exactly 1(int)
'-c, --clong' (optional)	Description option -c
   Arguments for option '-c, --clong': exactly 1(float)

Group[2]: Gruppo 2:
Only one of:
'-d, --dlong'	Description option -d
   Arguments for option '-d, --dlong': exactly 1(string)
'-e, --elong'	Description option -e
   Arguments for option '-e, --elong': zero or more(string)
'-f, --flong'	Description option -f
   Arguments for option '-f, --flong': one or more(string)
'-g, --glong'	Description option -g
   Arguments for option '-g, --glong': 3 or more(string,int,float)

Error: token too long: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'.
Max length is 1024.

Codice: Seleziona tutto

[vincenzo]$ ./sample1 `perl -e 'print "X"x1024'` -x -a ciao -d salve
Option '-x, --xlong-prova' 1 occurrences
Option '-a, --along' 1 occurrences
   1 arguments for option '-a, --along':
   string : ciao
Option '-d, --dlong' 1 occurrences
   1 arguments for option '-d, --dlong':
   string : salve

List of positional argument:
string : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[vincenzo]$ 
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Ho provato la versione nuova della libreria, e distingue correttamente le opzioni che accettano parametri da quelle che non ne accettano:

Codice: Seleziona tutto

./effitest ./for_C_gcc ./for_C_gcc -l4N1
Error: option '-l, --debug-level': argument 1 wrong type. Must be int; found string: '4N1'
Il mio programma è quasi terminato, intanto c'è un modo di avere un codice per ogni errore che potrebbe verificarsi durante il parsing?
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Così com'è no, non c'è modo. Ma posso modificare il codice per fargli ritornare i codici d'errore.

Poi vorrei capire come usare gettext per fargli stampare i messaggi in italiano.
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Finalmente sono riuscito a integrare gettext con gli autotools. Adesso abbiamo i messaggi in italiano:

Codice: Seleziona tutto

[vincenzo]$ ./sample1

Uso:
./sample1Opzioni POS_ARGS(zero o più)(string,int,float,string,string)

Opzioni:
Gruppo[0]: Gruppo 0
'-h, --help'(opzionale)	Print this message and exit
'-x, --xlong-prova'(obbligatoria)	Description option -x
'-y, --ylong'(opzionale)	Description option -y
'-z, --zlong'(opzionale)	Description option -z

Gruppo[1]: Gruppo 1
Almeno una di:
'-a, --along'(opzionale)	Description option -a
   Argomenti per l'opzione-a, --along': esattamente 1(string)
'-b, --blong'(opzionale)	Description option -b
   Argomenti per l'opzione-b, --blong': esattamente 1(int)
'-c, --clong'(opzionale)	Description option -c
   Argomenti per l'opzione-c, --clong': esattamente 1(float)

Gruppo[2]: Gruppo 2
Soltanto una di:
'-d, --dlong'	Description option -d
   Argomenti per l'opzione-d, --dlong': esattamente 1(string)
'-e, --elong'	Description option -e
   Argomenti per l'opzione-e, --elong': zero o più(string)
'-f, --flong'	Description option -f
   Argomenti per l'opzione-f, --flong': uno o più(string)
'-g, --glong'	Description option -g
   Argomenti per l'opzione-g, --glong': 3 o più(string,int,float)


Errore: l'opzione '-x --xlong-prova' è obbligatoria.
Errore: deve essere presente almeno un'opzione del gruppo 1 'Gruppo 1'.
Errore: deve essere presente almeno un'opzione del gruppo 2 'Gruppo 2'.
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Scusami un'ultima cosa:

Ho visto che nel tuo programma hai i file "configure", "makefile.am" "makefile.om" eccetera.

Come hai fatto a crearli?
Io so a malapena fare dei semplici Makefile, ma gli script di configurazione che li generano automaticamente vanno scritti a mano oppure si usano dei tool tipo automake e autoconf?

Grazie
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [Progetto] C Library for parsing command line arguments

Messaggio da melfnt »

Cose ancora troppo complicate per me.
Per ora distribuisco un Makefile.

Usando la tua libreria ho programmato effitest, dagli un'occhiata se puoi.

;)
Avatar utente
Vincenzo1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 450
Iscrizione: lunedì 14 gennaio 2013, 14:21
Desktop: Unity
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Località: Villabate(PA)
Contatti:

Re: [Progetto] C Library for parsing command line arguments

Messaggio da Vincenzo1968 »

Ho impacchettato effitest con gli autotools.

Ti invio i file alla mail presente nel file readme?
È ormai difficile incontrare un cretino che non sia intelligente e un intelligente che non sia un cretino. [...] Oh i bei cretini di una volta! Genuini, integrali. Come il pane di casa. Come l'olio e il vino dei contadini. (da "Nero su nero" di Leonardo Sciascia)
Scrivi risposta

Ritorna a “Progetti della Comunità”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 17 ospiti