Obligement - L'Amiga au maximum

Vendredi 06 juin 2025 - 16:58  

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 : 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]