Obligement - L'Amiga au maximum

Mercredi 26 juillet 2017 - 08:28  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : AMOS - création d'une fenêtre Shell
(Article écrit par Denis Bernard et extrait d'Amiga News - juin 1993)


Pas de fenêtre Shell ? Qu'à cela ne tienne, on va s'en ouvrir une ! Et en plus, on va même y faire un Dir ; ou peut-être même un List...

Ouverture automatique d'une fenêtre de sortie

En retravaillant légèrement la routine CPRINT[] du mois dernier, on peut lui faire ouvrir automatiquement sa propre fenêtre de sortie si celle-ci n'existe pas, ce qui arrive dans le cas où la fenêtre Shell a été fermée ou si le programme a été lancé depuis le Workbench.

Cependant, pour une question de pratique, on ne va pas ouvrir cette fenêtre avec l'instruction Open Port (comme on l'a vu dans cet article) mais en faisant directement appel aux fonctions DOS Open() et Close(). Il faudrait, en effet, gérer un troisième cas dans la procédure CPRINT[]... Il est vrai qu'en y regardant de plus près, cette solution serait plus courte que celle que je vous propose ici, mais elle ne nous permettrait pas de rediriger la sortie d'exécutables CLI, lancés depuis AMOS, dans cette fenêtre (ceci fait l'objet de la seconde partie de cet article).

Shéma de principe

Lors de l'appel de la procédure CPRINT[], si on n'a pas de pointeur sur une structure FileHandle (qui équivaut au numéro de canal de fichier en AMOS) dans la variable _DOS_HAN, on appelle la fonction Output(). Si celle-ci ne retourne pas de pointeur (pas de fenêtre CLI/Shell), on tente d'ouvrir une fenêtre par nos propres moyens en faisant appel à la procédure _WINDOPEN[POS_X, POS_Y, TAILLE_X, TAILLE_Y, NOM]. En cas d'erreur, on appelle la procédure _DOS_ERR qui se charge d'identifier l'erreur. Les codes d'erreur du DOS n'y figurent pas tous, mais les principaux y sont. Dans cette routine, à vous de trouver un moyen d'afficher le code d'erreur, qui se produit ici lorsqu'on ne peut pas ouvrir de fenêtre (cruel dilemne !). Notez que les procédures ont été conçues pour que le programme soit interrompu en cas d'erreur, d'où l'instruction End dans la procédure _DOS_ERR.

Dans le cas où on a ouvert notre propre fenêtre, on place True (-1) dans la variable CUSTOM. Ainsi, pour quitter le programme, on passe par la procédure _END qui se chargera de tout fermer, y compris notre fenêtre de sortie si nous l'avons ouverte.

Redirection des entrées/sorties d'une commande dans la fenêtre

Il suffit de reprendre le programme de la première partie, d'y ajouter la procédure _WINDEXE[] et de remplacer la boucle principale par celle du second exemple.

Comment ça marche ?

Pour lancer un exécutable à partir d'AMOS (ou tout autre langage), on ouvre d'abord un fichier (ou canal) d'entrée/sortie, puis on transmet le pointeur sur le FileHandle ainsi obtenu à la fonction Execute(). D'habitude, on ouvre NIL: (entrées/sorties redirigées vers le néant absolu), alors qu'ici on transmet le FileHandle (canal...) de notre fenêtre, ce qui a donc pour effet, dans notre exemple, d'afficher le contenu de SYS:. Et comme pour l'ouverture des fenêtres, en cas d'erreur on passe la main à la procédure _DOS_ERR.

A ce sujet, une petite suggestion pour les courageux : AMOS peut générer les mêmes erreurs que le DOS mais les erreurs correspondantes en AMOS n'ont malheureusement pas le même code. Essayez donc en mode direct Error 92. AMOS vous répond "Disque Non-DOS", mais on est bien loin du code 225 du DOS pour la même erreur ! Alors, avec un peu de courage, on peut facilement faire une table de conversion des codes d'erreurs pour les faire gérer directement par AMOS qui sera bien obligé de s'en débrouiller. Ce serait même carrément plus élégant, surtout si votre programme est lancé depuis le Workbench, car AMOS ouvrira une jolie boîte système pour afficher l'erreur...

Et voilà, la porte est ouverte ! Pas la peine d'attendre plus longtemps pour programmer un programme d'archivage, ou plutôt l'interface graphique d'un programme d'archivage comme Lha (pas la peine de réinventer la poudre !).

AMOS
AMOS
AMOS


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]