03.07.2013 Views

Magazine Pom's : la collection

Magazine Pom's : la collection

Magazine Pom's : la collection

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SUPER PRINT est un programme<br />

qui pennel d'afficher un texte sans<br />

couper les mots ni les nombres en fin<br />

de ligne, en conservant tous les formats<br />

et options de <strong>la</strong> commande<br />

PRINT usuelle, avec <strong>la</strong> même syntaxe<br />

précédée de l'ampersand. Pouvoir<br />

améliorer l'affichage sans manipu<strong>la</strong>tion<br />

<strong>la</strong>borieuse des instructions<br />

PRINT, tel est son intérêt essentiel.<br />

En outre, il est relogeable et, pouvant<br />

même s'insérer dans <strong>la</strong> page 3,<br />

il s'emploie conjointement avec d'autres<br />

routines.<br />

Utilisation du<br />

programme<br />

Si ]' on connait <strong>la</strong> syntaxe de l'instruction<br />

PRINT, on connait celle de<br />

SUPER PRINT, <strong>la</strong> seule différence<br />

tenant à <strong>la</strong> présence de J'ampersand.<br />

L'Initialisation de l'ampersand se fait<br />

quelle que soit l'adresse de chargement<br />

du programme grace à une<br />

méthode particulière expliquée plus<br />

loin.<br />

Pour être plus compréhensible, le listing<br />

du programme est commenté au<br />

début de chaque procédure. Il est<br />

é<strong>la</strong>boré selon des principes assez<br />

simples et ne se complique guère<br />

que pour reprendre les options ordinaires<br />

de l'instruction PRINT (";" ","<br />

et commandes composées).<br />

Pour que "&" pointe à l'adresse où<br />

le programme sera chargé en mémoire<br />

quelle que soit cette adresse,<br />

on effectue un saut nul sur un RTS<br />

dans le moniteur avec pour effet de<br />

sauver dans <strong>la</strong> pile l'adresse de départ<br />

du JSR (voir à ce sujet <strong>la</strong> page<br />

81 du Manuel de Référence de l'Apple<br />

II pour plus de précisions).<br />

L'adresse obtenue est lue directement<br />

dans <strong>la</strong> pile grce aux instructions<br />

:<br />

TSX<br />

DEX<br />

LDA $100,X (partie basse)<br />

LDA $101,X (partie haute)<br />

On ajoute à ce résultat le nombre<br />

d'octets qui sépare le JSR du début<br />

de <strong>la</strong> procédure de SUPER PR1NT et<br />

<strong>la</strong> somme obtenue est p<strong>la</strong>cée en<br />

$3F6-$3F7, adresse du vecteur<br />

d'ampersand.<br />

<strong>Pom's</strong> n° 9<br />

Super-impression de chaînes<br />

Traitement d'un nombre<br />

ou d'une variable numé·<br />

rique<br />

SUPER PRINT vient à <strong>la</strong> rescousse<br />

aussi bien des nombres coupés en<br />

deux par <strong>la</strong> limite d'écran que des<br />

chaînes de caractères.<br />

La routine qui affiche ordinairement<br />

les nombres en Applesoft se situe à<br />

l'adresse $ED2E (PRNTFAC) et se<br />

compose de deux simples appels, le<br />

premier à FOUT ($ED34) qui transforme<br />

le FAC en une chaîne de caractères<br />

copiée en $100-$101 (le<br />

FPBUF) et terminée par un 0, le second<br />

à STROUT ($DB3A) qui affiche<br />

une chaîne pointée par Y -A et<br />

terminée par 0 ou "<br />

<strong>la</strong> procédure réutilise ces deux<br />

appels mais insère entre les deux une<br />

routine qui calcule le nombre de chiffres<br />

avant le 0 dans le FPBUF, le<br />

compare à l'intervalle entre <strong>la</strong> position<br />

courante et <strong>la</strong> limite d'écran<br />

(pointées par $24 et $21) et effectue<br />

un RETURN si l'espace est insuffisant.<br />

Traitement d'une chaîne<br />

de caractères<br />

Le programme procède en découpant<br />

<strong>la</strong> <strong>la</strong>rgeur de l'écran, telle<br />

qu'elle est définie par les pointeurs<br />

de fenêtre, sur <strong>la</strong> chaîne à afficher,<br />

du début jusqu'à <strong>la</strong> dernière partie.<br />

L'intervalle qui est ainsi pris sur <strong>la</strong><br />

chaîne a <strong>la</strong> position de début indiquée<br />

dans DEBLIGN et <strong>la</strong> pOSition<br />

de fin dans FlNLlGN. Après recherche<br />

d'un espace et affichage, DE­<br />

BLIGN pointera sur le début du dernier<br />

mot de l'intervalle, qui sera<br />

affiché avec un nouvel intervalle s'il<br />

est coupé par FINLlGN.<br />

La procédure d'affichage teste après<br />

chaque caractère <strong>la</strong> fin de <strong>la</strong> chaîne<br />

avant <strong>la</strong> fin de l'intervalle à afficher.<br />

Un test sur cette longueur précédant<br />

le travail de découpage permet de<br />

"sauter" celui-ci lorsque l'on arrive à<br />

<strong>la</strong> demière partie de <strong>la</strong> chaîne.<br />

<strong>la</strong> procédure de découpage, partant<br />

donc de <strong>la</strong> position de <strong>la</strong> chaîne qui<br />

correspond à <strong>la</strong> marge droite sur<br />

l'écran, indiquée dans FINLlGN, revient<br />

sur <strong>la</strong> gauche à <strong>la</strong> recherche du<br />

premier espace et en p<strong>la</strong>ce <strong>la</strong> posi-<br />

Denis Sureau<br />

tion dans FINLIGN. Si aucun espace<br />

n'est présent dans <strong>la</strong> chaîne, soit on<br />

saule à <strong>la</strong> ligne si le début d'impression<br />

ne correspond pas au début<br />

d'écran (cas d'un HTAB XX), soit on<br />

force l'impression de <strong>la</strong> chaîne coupée<br />

(à l'impossible, nul n'est tenu).<br />

Les Séparateurs<br />

et ":"<br />

.. ...<br />

•<br />

.. ..<br />

Les routines CHRGET et CHRGOT<br />

demandent à être employées ici avec<br />

précision car le listing de l'Applesoft,<br />

mê<strong>la</strong>nt des fonctions diverses en ce<br />

qui concerne les séparateurs, n'est en<br />

fait d'aucun secours. Je me bornerai<br />

à décrire le minimum nécessaire à <strong>la</strong><br />

compréhension du programme {une<br />

étude très approfondie sur CHRGET<br />

a été publiée dans le numéro de<br />

mars 1982 de CALL APPLE, suffisamment<br />

complète pour indiquer<br />

comment améliorer de quelques millisecondes<br />

cette procédure !J.<br />

CHRGET incrémente le pointeur de<br />

programme TXTPTR en testant le<br />

caractère lu sur <strong>la</strong> nouvelle position.<br />

S'il s'agit de 0 (marqueur de fin de<br />

ligne) ou du séparateur d'instructions<br />

":", l'indicateur Z est mis à 1; si c'est<br />

un chiffre, l'indicateur C est mis à O.<br />

CHRGOT produit le mme résultat,<br />

mais teste <strong>la</strong> position courante pointée<br />

par TXTPTR sans l'incrémenter.<br />

Aussi, après analyse et affichage<br />

d'une variable ou d'un chiffre (reconnu<br />

grâce à l'indicateur Cl, le programme<br />

branche sur CHRGOT plutôt<br />

que sur CHRGET, car <strong>la</strong> routine<br />

App!esoft utilisée, FRMEVL, <strong>la</strong>issera<br />

le TXTPTR pointé sur le dernier ca-<br />

" ct' re ," til e, sol ', "$" , "%" , "0" , "" : ,<br />

, ou ;<br />

Dans le cas de <strong>la</strong> virgule, on se branche<br />

sur une routine simi<strong>la</strong>ire à celle<br />

de ]' Applesoft, puis sur CHRGET<br />

non suivi de RETURN. S'il s'agit<br />

d'un point-virgule, on effectue un<br />

appel à CHRGET non suivi de RE­<br />

TURN, lequel n'es! effectué qu'en fin<br />

de commande et lorsque le dernier<br />

caractère de ceUe-ci est différent des<br />

deux précédents.<br />

Tous les formats de <strong>la</strong> commande<br />

PRINT restent valides, avec une limitation<br />

pour les textes entre guillemets<br />

qui ne doivent pas être trop nombreux<br />

sur une mme commande ou<br />

à l'intérieur d'une boucle.<br />

31

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!