Obligement - L'Amiga au maximum

Vendredi 23 mai 2025 - 21:17  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : ReadArgs, le traitement efficace des arguments
(Article écrit par Mathias Parnaudeau et extrait de GuruMed.net - décembre 2002)


Théorie et principe

Plutôt que de se casser la tête en traitant les arguments avec la classique gestion de "argv", savez-vous qu'il existe une fonctionnalité puissante d'AmigaDOS qui permet bien plus de souplesse et fait tout le sale boulot ?

La fonction "ReadArgs" formate en effet un tableau d'arguments en fonction d'une chaîne descriptive ("template") de cette liste d'arguments. Je m'explique : tapez "copy ?" dans une fenêtre Shell, vous verrez apparaître cette fameuse chaîne d'arguments, avec pour chacun d'eux un nom et des options marquées d'un slash "/".

Quelle que soit la nature de l'option (texte ou nombre), le tableau contient des entiers longs dont la valeur représente l'adresse du texte ou du nombre en question (notion de pointeurs).

La signification des options est la suivante :
  • /M = Multiple : accepte plusieurs arguments.
  • /A = Always : argument obligatoire.
  • /S = Switch : si le mot-clé est mentionné, l'option est "activée".
  • /K = Key : le mot-clé doit précéder l'argument.
  • /N = Numeric : l'argument est une valeur numérique.
  • /T = Toggle : l'argument doit être "yes", "no", "on" ou "off".
  • /F = Final : tout ce qui reste de la ligne de commande constitue l'argument.
Voir Amiga Guru Book : 17.1.104 page 469.
Voir AmigaDOS.
Voir Autodocs : dos.doc

Mise en oeuvre

Prenons l'exemple de la commande "version" (essayez "version ?") :

NAME,VERSION/N,REVISION/N,FILE/S,FULL/S,RES/S

On remarque qu'aucun argument n'est obligatoire. Le premier représente une chaîne qui est le nom du fichier dont l'on souhaite connaître la version.

Il y a ensuite deux arguments numériques, puis trois arguments de type "switch", qui agissent comme des drapeaux à deux positions.

Pour notre programme de test (appelé "readargs"), on ne va pas singer le modèle d'arguments de la commande version. On choisira quatre arguments de type différent :
  • FILE/A : on oblige la saisie d'une chaîne, désignant typiquement le fichier à traiter par le programme.
  • VERSION/N/K : c'est juste pour tester le type numérique ; la présence du "/K" nous forcera à écrire "version" dans la chaîne d'arguments.
  • FULL/S : ce drapeau prend une valeur différente de 0 si le mot-clé ("full" dans ce cas) se trouve dans la ligne de commande.
  • TXT=TEXT/K : le "/K" demande là encore de spécifier le nom de l'option dans la ligne de commande. Ici, le nom est "text" ou encore "txt" car le signe d'égalité permet de déclarer une abréviation qui équivaut au nom complet de l'option.
Le source est très court. On remarque les différentes opérations de "cast" (conversion de type) suivant le type du paramètre à récupérer. On notera aussi que la structure récupérée par ReadArgs doit être libérée par FreeArgs. Mais attention, si vous effectuez un "FreeArgs" avant l'appel des fonctions de traitement de votre programme, le contenu de "argarray" ne pointera plus sur des données valides !

Dernière recommandation : si vous ajoutez des paramètres à votre programme, pensez à augmenter la taille du tableau argarray en conséquence.

#include <stdio.h>
#include <proto/dos.h>

static long argarray[4];
struct RDArgs *rdargs = NULL;

int main(int argc, char **argv){
	int *version;
	char *argstring = "FILE/A,VERSION/N/K,FULL/S,TEXT/K";
	int full = 0;

	if (argc <= 1){
		printf("Usage : %s %s\n", argv[0], argstring);
	}else{

		printf("%s - Programme de decouverte de ReadArgs\n", argv[0]);

		rdargs = ReadArgs(argstring, argarray, NULL);
		if (rdargs == NULL){
			printf("Erreur dans le traitement des arguments\n");
			printf("Usage : %s %s\n", argv[0], argstring);
		}else{
			if (argarray[0]){
				printf("FILE : Vous avez demande le traitement de '%s'\n", (char *)argarray[0]);
			}
			if (argarray[1] != 0L){
				version = (int *)argarray[1];
				printf("VERSION : %d\n", *version);
			}
			if (argarray[2]){
				printf("FULL : option FULL activee\n");
				full = 1;
			}
			if (argarray[3]){
				printf("TEXT : Vous avez saisi '%s'\n", (char *)argarray[3]);
			}

			FreeArgs(rdargs);
			rdargs = NULL;
		}
	}

	return 0;
}



[Retour en haut] / [Retour aux articles]