Obligement - L'Amiga au maximum

Jeudi 18 avril 2024 - 16:56  

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 : ARexx - un afficheur d'images
(Article écrit par Réginald Bales et extrait d'Amiga News - novembre 1993)


Depuis l'arrivée du système 2.0, le langage interprété ARexx est fourni avec les machines, sans qu'il ne soit rien expliqué dans les docs. Ce langage n'en est pas moins intéressant, et l'apig.library lui ajoute une dimension nouvelle : l'accès direct aux fonctions d'Intuition, de la graphics.library, de l'asl.library, ainsi qu'à d'autres fonctions, comme l'utilisation aisée de l'iff.library...

A ce "BASIC orienté Shell", capable d'être un pont entre les applications munies d'un port ARexx, s'ajoutent maintenant des possibilités digne du C et de l'assembleur, toutes proportions gardées bien évidemment...

L'apig.library permet d'appeler la plupart des fonctions des bibliothèques citées précédemment, et retourne ainsi des pointeurs, manipule les structures du système avec une facilité magique. Bien évidemment, cela suppose de fournir des paramètres censés lors de l'utilisation des fonctions, et pour cela il vous faudra faire appel à des docs comme les différentes bibles/livres de l'Amiga, ou comme le préconise l'auteur, munissez-vous du ROM Kernel Manual. Mais à vouloir jouer à l'apprenti sorcier avec sa machine, ou plutôt l'apprenti programmeur, on risque de rencontrer quelques Gurus, eh oui, comme en assembleur... D'où l'intérêt de savoir ce que l'on fait. Mais quelle joie de donner quelques coups de Blitter dans des images chargées en l'espace de quelques lignes.

APIG est là, que ce soit pour un besoin pressant de diaporama spécifique à une application, ou bien pour commander un utilitaire ayant de nombreuses fonctions (LZ, compilateurs ou autres...) par une interface Intuition élaborée. Après ce tour d'horizon des possibilités du programme, passons à la pratique.

La pratique dans la joie d'APIG, ou comment jeter des sorts à son Amiga. La bibliothèque s'appelle comme ses consoeurs, à savoir par la commande Addlib(). Ensuite, une liste impressionnante de fonctions nouvelles sont disponibles : elles portent le même nom que les fonctions des bibliothèques, et admettent les mêmes paramètres, avec les restrictions précisées plus haut. Un exemple simple et classique :

a= OPENSCREEN (0,0,640,512,4,4,5, LACE+HIRES, CUSTOMSCREEN, scrtitle)

Cette fonction ouvre un écran haute résolution entrelacé (Hires Interlace) et renvoie dans la variable "a" le pointeur de l'écran, qui servira notamment à le fermer avec CLOSE-SCREEN(a). Le programmeur que vous êtes réagit vivement en demandant si des constantes telles que LACE, HIRES ou CUSTOMSCREEN doivent être définies avant de lancer la fonction. Que nenni ! Il suffit de faire un petit CALL SET_APIG_GLOBALS() pour initialiser toutes les constantes classiques du genre les drapeaux IDCMP, les LACE, PUBLICSCREEN, et autres MENUTOGGLE, dont regorgent les structures de données de l'Amiga. Voilà que vous considérez ARexx d'un tout autre oeil... Où l'on tombe dans la facilité, en créant un script qui n'a rien à envier aux autres afficheurs d'images IFF...

Afficheur d'images IFF

Voici un petit listing qui vous demande à l'aide d'une fenêtre de requête le nom du fichier graphique IFF que vous désirez afficher. Une fois la dite image chargée, on attend de votre part que vous cliquiez le bouton gauche de votre souris. Après quoi on rendra la main au Shell. Et ce en quelques lignes...

Listing ASCII nommé MontreIFF.rexx

/* The ANews ARexxoïde IFF Shower Copyright (c) 2024 */

addlib("apig.library",0,-30,0)
addlib("rexxsupport.library",0,-30,0)
ifeq= ALLOCFILEREQUEST()
  /* En deux lignes une requête, résultat*/
file=REQUESTFILE(freq)  /* dans la variable file */
if file='0000 0000'x then
  exit
else
scr=0
picture=loadiff(file)
  if picture='0000 0000'x then
    do
      say "Fichier introuvable ou non IFF."
      exit
    end
  larg=iffwidth(picture)
  haut=iffheight(picture)
  prof=iffdepth(picture)
  view=iffviewmode(picture)
  ncol=iffcolors(picture)
  ctab=iffeolortab(picture)
CUSTOM=c2d('000F'x)
scr=openscreen(0,0,larg,haut,prof,1,0,view,CUSTOM,0)  /* écran adapté à l'IFF */
scrrp=getscreenrastport(scr)
useiffcolor(picture,scr)
bltbitmaprastport(picture,0,0,scrrp,0,0,larg,haut,c2d('00c0'x))
  /* On blitte l'image par le RastPort obtenu plus haut et mIraCle ! */
address command(lmb)
  /* Exécute un test du bouton gauche de la souris, ce programme "lmb" étant dans C: (voir plus loin). */
freebitmap(picture)
closescreen(scr)
  /* Formalités d'adieu que chacun connait.*/
call FREEFILEREQUEST(freq)
exit

Pour le test souris, j'ai préféré utiliser une commande Shell personnelle, LMB, placée dans le répertoire C, et qui ne me prend que 96 octets. Il vous suffit d'assembler le programme suivant :

loop:   btst #6,$bfe001
        bey end
        jmploop
end:    rts

Muni de ce LMB dans le répertoire C, vous disposez d'un script d'une quarantaine de lignes aussi efficace qu'un programme de 8 ko. Vous pouvez très facilement le rendre compatible avec les IFF compactés avec PowerPacker, en vous servant de la commande CLI Decrunch fournie avec le programme.

Moralité : c'est un PPShow modulable selon vos besoins... Ceci n'est qu'un exemple des possibilités offertes par l'apig.library, et vous lui trouverez un nouvel usage à chaque script ARexx que vous créerez.

A noter qu'une incompatibilité existe avec certaines fonctions de la rexxarp.library, donc si vous utilisez cette dernière dans un programme, mieux vaudra faire un REMLIB avec l'apig.library avant d'appeler vos fonctions RexxARP. Où la chronique de l'apig.library touche à sa fin, avec l'inévitable et impitoyable verdict. Certes, ce n'est pas un utilitaire pour les débutants, mais il simplifie bien des choses.

Le paquetage est un véritable égout : y sont déversés des listings, des docs, des IFF, des bibliothèques, le tout en un seul répertoire, où il est difficile de se repérer parmi pas moins de 77 fichiers...

Fort heureusement, les listings sont bien commentés, et les docs en anglais (évidemment), se laissent lire sans trop avoir besoin du dico anglais/français.

L'auteur, Ronnie E. Kelly, qui a le mérite d'avoir programmé son oeuvre en assembleur, n'a pas pour autant fait gaffe à un détail : la plupart des listings utilisent des fonctions de la rexxsupport.library bien que cette dernière n'y soit pas appelée... D'où le message d'erreur qui vous parvient quand vous voulez interpréter ces listings. L'auteur a sûrement lancé dans sa Startup-Sequence un script utilisant la rexxsupport.library, ce qui lui cachait cette défaillance (nul n'est parfait). Une fois cette bibliothèque "Addlibée" par un petit script, vous pourrez vous servir des programmes exemples. Mises à part ces quelques peccadilles, APIG y'a bon ! Je ne saurai trop vous conseiller de vous procurer la chose (disquette CAM 624h ou Fish 634).


[Retour en haut] / [Retour aux articles]