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 : Blitz Basic - trucs et astuces
(Article écrit par Mathieu Chènebit et extrait d'Amiga News - janvier 1997)
|
|
Je dois le reconnaître, je ne savais pas quel type de programme faire pour la rubrique de ce mois. J'étais d'abord parti sur
l'idée de continuer notre annuaire, et puis finalement, je suis revenu en
arrière. Tout cela sera peut-être pour le mois prochain. C'est bien beau tout cela mais qu'allons-nous donc faire ? Eh bien
je vais tâcher de vous donner quelques petites astuces, découvertes au fur à et mesure des longues heures passées devant l'écran
gris du Blitz, qui vous seront fortes utiles.
Je prie encore une fois les programmeurs expérimentés de bien vouloir m'excuser, mais cette rubrique est destinée avant tout aux
débutants et donc les astuces ne seront pas d'un niveau extraordinaire.
Applications externes
Tout d'abord, une des questions qui m'est venue à l'esprit
très rapidement en utilisant le Blitz est la possibilité de lancer des applications externes depuis votre programme Blitz (dans
le cas d'une documentation en ligne faisant appel à AmigaGuide par exemple, ou bien un gestionnaire de lancement de programmes
comme ToolManager).
Il faudra pour cela utiliser la commande Execute_ suivie de trois arguments : le premier est le nom de la commande suivi de ses
éventuels arguments (tout cela est bien évidemment une chaîne de caractères), et les deux derniers sont les directions des
Entrées/Sorties (si vous utilisez 0, celles-ci seront redirigées vers NIL:). C'est clair ? Pas vraiment j'imagine :-). Essayons
donc ce petit exemple :
if keycode=117 ; touche enfoncée=ESC
Execute_ "C:AmigaGuide PROGDIR:Docs/Aide.guide",0,0
Endif
|
Ce tout petit bout de code inséré dans votre routine principale de gestion des événements vous permettra le plus simplement du monde
d'avoir une aide en ligne disponible à tout moment ! Vous allez, grâce à cette petite fonction, donner une puissance que vous
n'auriez jamais imaginée à vos programmes. Mais ce n'est pas tout, loin de là. On peut encore améliorer de beaucoup cette fonction :
en effet, la lecture de votre fichier AmigaGuide arrêtera carrément l'exécution de votre programme. Or, il se trouve que l'Amiga
est multitâche (et ce, bien avant Windaube 95 ;-)).
On va donc faire tourner notre logiciel externe (dans notre cas AmigaGuide) de
manière asynchrone, et pour cela, nous allons simplement lui ajouter la commande Run qui est parfaitement multitâche. Vous
avez remarqué l'assignation PROGDIR: ? Il est parfois utilisé par les programmeurs (vous pouvez voir ce mot dans certains scripts
d'installation par exemple), et il est bien sûr accessible depuis le Blitz grâce aux appels système (allez donc faire un tour
vers la fin de votre manuel : un certain nombre des fonctions du système d'exploitation de l'Amiga y sont décrites avec leur syntaxe, mais
malheureusement, sans leur signification). Cela va vous permettre de charger certaines données depuis le répertoire où sera installé
votre programme. Mais le gros inconvénient de la commande à utiliser est qu'elle est compliquée et qu'il faut en appeler d'autres
avant. A utiliser par les utilisateurs avertis.
Mais il y a une autre méthode beaucoup plus simple ! Lorsque vous démarrez un programme Blitz, celui-ci désigne automatiquement
le répertoire d'où le programme a été lancé comme le répertoire par défaut. A partir de là, vous n'aurez qu'à exécuter un CHDir
(changement de répertoire) pour vous placer dans les répertoires où se trouvent vos données. Reformulons donc l'exemple que nous
avons vu précédemment avec ce que nous venons d'apprendre :
if keycode=117 ; touche enfoncée=ESC
succes=CHDir("Docs/")
If succes<>1
Execute_ "C:AmigaGuide PROGDIR:Docs/Aide.guide",0,0
Endif
Endif
|
Un peu de vitesse
Maintenant, changeons un peu de sujet. Comment gagner de la vitesse de manière considérable ? En utilisant du code assembleur
bien entendu ! Oui, mais là, vous vous dites "c'est bien beau, mais je n'y connais strictement rien en assembleur". Eh bien,
figurez-vous que c'est exactement la même chose pour moi. Seulement, nous allons remplacer le symbole "/" par LSR pour nos divisions
et le symbole "*" par LSL pour nos multiplications.
Seulement, il y a un hic, c'est que comme ces commandes fonctionnent en binaire, vous ne pourrez effectuer vos opérations qu'avec
des puissances de 2. L'argument qui suit l'opération sera l'exposant de la puissance de 2 ("i LSR 4" divisera i par 2 puissance 4,
c'est-à-dire par 16). Vous n'êtes pas convaincu de la différence de vitesse ? Tapez juste ce petit exemple :
WBstartup
ResetTimer
Repeat
i+1
resul.l=i LSL 2 ; miltiplication par 2 puissance 2, c'est-à-dire 4
Until i=10000
NPrint resul
NPrint Ticks
MouseWait
Forbid_
End
|
Essayez ensuite avec simplement le signe "*". Bon, ok, je vous donne les résultats : 56 impulsions pour LSL et 65 pour "*", sur ma
machine (68020 à 14 MHz). Ce qui vous fait quand même gagner 15% de vitesse sur un simple calcul. Alors, imaginez les différences
que cela va faire lorsque vous allez vous essayer à la conversion Chunky -> bitmap pour faire un jeu 3D !
Capturez la police
On passe maintenant à la dernière astuce de ce mois. Elle va intéresser le plus grand nombre d'entre vous, j'imagine, par ses nombreuses
conséquences, autres que celles de l'exemple que nous allons traiter. Nous allons capturer la police de caractères utilisée
par le Workbench, afin de l'utiliser dans nos propres programmes (ce que la majorité des programmes DP et commerciaux fait).
Par exemple, votre Workbench utilise la police XEN.font. Vous programmez en Blitz, deux choix s'offraient alors à vous jusqu'à
présent : utiliser la police par défaut (c'est-à-dire l'horrible Topaz), ou bien charger votre police. Oui mais voilà, lorsque
vous allez diffuser vos programmes, vous ne pourrez pas connaitre la police de caractères que l'utilisateur a installée sur son
Workbench. Notre routine va remédier à tout cela en allant simplement chercher le nom de la police du Workbench dans le fichier
font.prefs du système.
Avant toute chose, je tiens à remercier un programmeur (dont j'ai malheureusement oublié le nom ;-)) qui a expliqué cela
sur Internet et notre ami Pierre, qui en a fait la transcription pour que vous ayez directement un code clair et concis. Comme
le fichier font.prefs est un fichier binaire, nous allons d'abord l'ouvrir en accès séquentiel, puis aller chercher les
informations dedans avec l'instruction Get. Ensuite, on vérifie si le nom de la police existe bien et si c'est le cas, on essaye
de la charger. Simple comme bonjour, n'est-ce pas ? Bon, allez, on attaque le source.
DEFTYPE .b SIZ,valeur
If ReadFile(0,"ENV:Sys/font.prefs") ; les fichiers de préférences sont toujours situés dans ENV:
FileInput 0 ; on va chercher nos données dans le fichier 0
Fields 0,valeur ; on définit les champs de saisie à la variable "valeur"
k=226 ; 62 pour la police des icônes - 226 par défaut - 390 pour la police écran
Repeat
Get 0,k ; on se déplace au décalage 226 ("k" sera transféré dans "valeur")
font$=font$+Chr$(valeur ; on rajoute à chaque passage dans la boucle une lettre du nom de la police
k+1 ; on déplace le "curseur" de lecture d'un octet
Until valeur<33 ; on répète notre boucle tant qu'il y a des lettres - en dessous du caractère ASCII 33,
; ce ne sont plus des caractères qui peuvent être utilisés dans un nom
Get 0,223 ; la taille de la police est trois octets avant son nom
siz=valeur ; on referme le fichier 0, font.prefs
If Exists("Fonts:"+font$) ; si le nom de la police existe réellement (on ne sait jamais)
LoadFont 0,font$,siz ; on charge la police
EndIf
EndIf
|
Et voilà le travail ! Grâce à ces quelques lignes relativement simples, vos programmes bénéficieront de la police de caractères
choisie par l'utilisateur pour son Workbench. Mais ce n'est pas, à mon sens, le plus intéressant. En effet, cette méthode est
applicable quelle que soit la préférence du Workbench dont vous souhaitez bénéficier ! Il en sera donc de même pour les préférences
d'Intuition, de la locale.library, de l'imprimante... Enfin, vérifiez tout de même, avant d'attaquer cette méthode, que vous
n'avez pas déjà des commandes Blitz qui s'en occupent pour vous. Je ne le répèterai jamais assez : procurez-vous les
bibliothèques de commandes additionnelles !
Si cet article vous a plu, faites le moi savoir par courrier électronique. De plus,
je vous réserve une surprise pour un futur proche grâce à Orion Diffusion (qui fait encore une fois preuve de sa volonté
de soutenir le Blitz) : le test des Blitz User Magazine (BUM). Bonne programmation !
|