Suivez-nous sur X
|
|
|
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
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
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).
|