PROGRAMMATION EN E par Pierre Girard (armand@emi.u-bordeaux.fr)
Ce mois-ci, j'ai choisi de ne pas vous brusquer en vous proposant un article sur les requesters et plus particulierement sur 1'asl.library. Comme je suis sur que vous etes encore dans le coma depuis les fetes de fin d'annee, on va faire simple.
Dabord, pourquoi choisir 1’asl.library alors que le domaine public fournit des remplacements plus avantageux comme par exemple la łabuleuse reqtools.library?
Pourquoi? Je vais vous le dire. Tout sim-plement parce que:
- 1'asl.library est facile ś programmer.
- elle permet de creer des programmes qui tournent sur n’importe quel Amiga (>=V36), qu'il possede ou non la reqtools.
- ceux qui preferent la reqtools peuvent tout a fait patcher 1’asl.library pour avoir la reqtools a la place (MCP. reqchange etc...).
Voila pour 1'interet de la chose. Mainte-nant. voyons ce que nous propose cette bi-bliotheque qui ne posseae que 6 tonctions dont 3 sont obsoletes. 3 types de requetes sont disponibles et sont definis par les types ASL FileRequest, ASL_FontRequest et ASL_ScreenModeRequest. Comme vous 1'aurez sans doute compris, ces 3 types correspondent respectivement aux re-questers de fichiers. de polices de caracte-res et d'ecrans. On peut y acceder grace a trois fonctions: AllocAslRequest(reqtype.
taglist), AslRequest(requester. tags) et FreeAslRequest(requester). Les deux premieres fonctions ont corrme parame-tres des tags qu’il sera ici trop long de de-crire tellement ils sont nombreux (223 si j'ai bien compte). Nous verrors donc les principaux dentre eux.
Les programmes sont courts ce mois-ci. car ils ont uniquement pour but de vous montrer comment inserer des requesters dans des applications plus lourdes
II est trśs facile a mettre en oeuvre et smspire de celui que l’on peut trouver dans les exemples du RKRM Passees les initiahsations que tout le monde connait maintenant, on verifie la version du Kickstart et celle de 1’asl.library. Puis on alloue (on defimt une structure) un re-quester ASL grace ó la fonction. oh combien evocatrice, AllocAslRequest(). II y a deux choses ś preciser: le type (ici un requester de fichiers) et les Tags. Cest la que la bat blesse si Ton n’a pas les AU-TODOCS Bon. tout le monde aurait pu trouver la syntaxe de la largeur etc..., mais sans une bonne documentation. al-lez donc trouver comment changer le titre de la fenetre (ASL..HAIL). He. he. he .. Bon. le delire est passe. Continuons sur l affichage du requester. Un petit appel a AslRequest() et hop, c’est magique. Reste a depouiller les rśsultats. Ici. il n'y a pas beaucoup de champs de la structure qui nous interessent Avec req.drawer et req.file. on a deja tout ce que l'on demande, a savoir le chemin complet du fichier selectionne.
La demarche generale reste la meme. Seuls les tags changent, mais je vous laisse le soin de les decouvrir par vous-meme En ce qui concerne les polices de caractdres. le principal element a recupe-rer est le nom de la police. mais les attri-buts comme le style, la taille, la couleur etc... sont aussi importants. En effet, si l’on veut par la suitę, charger la police telie que la desire 1'utilisateur, c est quand meme relativement utile. Nous affichons donc via un WriteF() les attributs (Structure attr), c est a dire le nom. la taille le style et les flags (preferences). puis les couleurs d ecriture et de fond ainsi que le modę de dessin (complement..). Vue la place qu’il me reste sur la page, je pense qu’il est inutile de s’attarrier sur le reques-ter de modę d ścran qui est pourlant in-dispensable dans une application un tant soit peu serieuse. Je ne peux que vous dire que si le fonctionnement generał reste le meme, il faudra vous reporter aux AUTODOCS pour connaitre toutes les options disponibles
et comme mon stock de bieres s'epuise (comme moi), je vais en terminer avec ce chapitre finalement facile a apprehender. J aurais aussi voulu vous parler de la fa-meuse colorwheel (vous savez, la palette en fermę de roue) mais le A4, c est un peu petit. Si je reęois du courrier a ce propos, je ferai peut etre un effort En parlant de courrier. vous ne seriez pas un peu faineant par hasard? Allez. bonne nuit!
r ASL-FileRequester*/
MODULE asl’, 'libraries/asl'
ENUMERR NONĘ, ERR ASL. ERR KICK, ERR LIB
PROC mam() HANDLE
DEF rcq:PTR TO filerequcster IF KickVersion(36)=NIL THEN Ralse(ERR KICK) IF(aslbase:-OpenLibrary( asl.library 36))=0 THEN Raise(ERR LIB)
IF (rcq:=AllocAslRequcs1(ASL FILEREOUEST.
(ASL HAIL, Mon file requoster',
ASL HEIGHT.400.
ASL WIDTH. 320.
ASL LEFTEDGE, 0,
ASL TOPEDGE, 0,
ASL OKTEXT. YEP .
ASL CANCFLTEXT. ANNULFR',
NIL]))=NIL THEN Raise(ERR ASL)
IF AslRequest(req. NIL)oNIL
WrileF( Le nom complet du fichier est req.drawer. req file)
ELSE
WriteF( Vous avez clique sur CANCEL )
ENDIF
EXCEPT DO
IF req THEN FrceAslRequest(req)
IF aslbase THEN CloseLlbrary(aslbase)
SELECT exception CASEERR ASL
WriteF( errcurrAllocation impossible du requester ASL )
CASEERR KICK
WriteF( Erreur: asl.library <V36 )
CASEERR LIB
WriteF('Erreur: Impossible d ouvrir asl.library )
ENDSELECT
ENDPROC
r ASL-FontRequestcr V
MODULE asl', 'libraries/asl', qraphics/text‘
ENUMERR NONĘ. ERR ASL. ERR KICK. ERR LIB
PROC maln() HANDLE
DEF req:PTR TO fontrequestcr IF KickVersion{36)=NIL THEN Raisc(ERR KICK)
IF (aslbase:=OpenLibrary('asl.library'.3B))=0 THEN Ra<se(FRR LIB)
IF (req:=AllocAslRequest(ASL FONTRFOUEST.
[ASL FONTNAME. topaz.fonf,
ASL FONTHEIGHT, 11.
ASL FONTSTYLES. FSF BOLD OR FSF ITALIC.
ASL FRONTPEN. 0.
ASL BACKPEN. 1.
ASL MINHEIGHT. fl.-> Taille min.
ASL MAXHEIGHT. 14. -> Taille max
•> On affiche tout sauf les fontes non proportionnelles ASL FUNCFLAGS. FONF FRONTCOLOR OR FONF BACKCOLOR OR FONF DRAWMODEOR FONF STYLES OR FONF FIXEDWIDTH.
NIL]))=NIL THEN Raise(ERR ASL)
IF AslRcquest(req NIL>oNIL
WriteFC\s\\n TailleY = \\d Style = $\\h Flags = S\\h\\n'+
FPen^SWh BPen = S\\h DravyMode = S\\h\\n'.
req atlr.name. req.attr.ysize. rcq.attr.style. req.at1r.llags.
req.frontpen. req backpen, rcq drawmode)
ELSE
WritcF('Vous avez cliquć sur CANCELWn )
ENDIF
EXCEPT DO
IF req THEN FreeAslRequest(rcq)
IF aslbase THEN CloseLibrary(aslbase)
SELECT exception CASEERR ASL
WrileF('Erreur: Allocation impossible du rcquester ASLWn )
CASFERR KICK WriteFfErreur: asl.library<V36\\n )
CASE ERR LIB
WriteF( Erreur' Impossible d ouvrir asI.libraryWn )
ENDSELECT
ENDPROC
AmigoNews