You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
UFS permet de fusionner deux tables<br />
de shapes cl' origines différentes en<br />
une seule, en renumérotant les<br />
shapes de <strong>la</strong> seconde dans <strong>la</strong> succession<br />
de celles de <strong>la</strong> première, et dispense<br />
ainsi d'alterner les deux tables<br />
comme on le ferait avec les deux<br />
POKEs c<strong>la</strong>ssiques (POKE 232,<br />
Adresse Basse et POKE 233, Adresse<br />
Haute) si l'on avait voulu utiliser<br />
deux tables de shapes avec un<br />
même programme.<br />
La logique des opérations se déduit<br />
naturellement de <strong>la</strong> structure d'une<br />
table de shapes de ]' Applesoft, que<br />
l'on peut rappeler id en quelques<br />
mots.<br />
Le manuel de référence de ]' Apple Il<br />
(page 95) illustre cette structure par<br />
un shéma représentant une table 00<br />
l'on distingue trois parties :<br />
1 - La taille de <strong>la</strong> table occupe les<br />
deux premiers octets. Toutefois,<br />
comme cette taille est limitée à 255,<br />
seul le premier octet est effectivement<br />
utilisé.<br />
2 - La table d'adresses occupe autant<br />
de fois deux positions qu'il y a de<br />
shapes dans <strong>la</strong> table. Le premier<br />
octet, comme il se doit, contient <strong>la</strong><br />
partie basse de l'adresse de <strong>la</strong> shape<br />
correspondante, le second <strong>la</strong> partie<br />
haute.<br />
3 - Comme dans <strong>la</strong> table des adresses,<br />
les shapes se suivent dans l'ordre<br />
de <strong>la</strong> numérotation uti lisée par<br />
les instructions DRAW et XDRAW et<br />
elles forment <strong>la</strong> troisième partie de <strong>la</strong><br />
Programme UFS<br />
100 HIMEM : 8191<br />
110 Dl 0 16384<br />
120 DS 0 CHR$ (41<br />
130 REM<br />
140 HOME<br />
FUSION DE SHAPES<br />
PAR DENIS SUREAU<br />
150 LIST 130:A 0 912:<br />
: REM SCROLL<br />
Fusion de tables de shapes<br />
table. Chaque shape est terminée par<br />
un O.<br />
Partant de là, fusionner deux tables<br />
revient au traitement suivant :<br />
1 - Additionner les nombres de<br />
shapes et p<strong>la</strong>cer le résultat obtenu au<br />
début du nouveau module.<br />
2 - Mettre bout à bout les deux<br />
tables d'adresses en rectifiant leurs<br />
valeurs. Ce sont bien sOr des adresses<br />
re<strong>la</strong>tives qui se comptent par rapport<br />
au début de <strong>la</strong> table de shapes.<br />
Les adresses dans <strong>la</strong> première table<br />
sont augmentées de <strong>la</strong> taille de <strong>la</strong><br />
partie 2 de <strong>la</strong> seconde qui s'intercale<br />
entre les parties 2 et 3 de <strong>la</strong> première.<br />
Les adresses de <strong>la</strong> seconde<br />
table sont augmentées des tailles des<br />
parties 2 et 3 de <strong>la</strong> première.<br />
3 - Après les deux tables d'adresses,<br />
on met bout à bout les deux blocs<br />
de shapes.<br />
Le petit schéma qui suit devrait aider<br />
à mieux suivre les calculs effectués<br />
par le programme.<br />
TABLE 1 TABLE 2 FUSION<br />
1) Taille 1) TaUle 1) Taille<br />
NI prend 2 N2 prend 2 N3=NI +N2 sur<br />
oct •• - 20ctru<br />
2) Adresses 2) Adresses 2) Adresses<br />
Nh2 octets N2.2 octets (NI+N2).2<br />
.,<br />
3) Si<strong>la</strong>pes 3) Shapes 3) Shapes<br />
X1 _ X2 oc Xl+X2 octets<br />
Le programme<br />
principes en<br />
160 PRINT "DONNEZ '1' POUR AVOIR LE CAT<br />
170 REt!<br />
ALOGUE": PRINT<br />
CHARGE SHAPE TABLE 1<br />
180 INPUT "NOM DE LA ST 1#1 :";31$<br />
190 IF Sl$ = " 1" TH EN PRINT CHR$ (4)"<br />
CATALOG": GOTO 180<br />
200 PRINT OS"BLOAO"31$" , A"D1<br />
<strong>Pom's</strong> n° 9<br />
met en oeuvre ces<br />
essayant de tenir<br />
210 LI 0 PEEK (43616)<br />
220 REM<br />
256<br />
par Denis Sureau<br />
compte des particu<strong>la</strong>rités des éditeurs<br />
de shapes existants quant aux tables<br />
qu'ils produisent. Des octets sans<br />
emploi peuvent s'intercaler entre<br />
deux parties normales d'une table,<br />
aussi calcule-t-on les points de départ<br />
de chaque champ sans les présupposer<br />
sur <strong>la</strong> position suivant directement<br />
le champ précédent.<br />
Notons que certains de ces éditeurs,<br />
et parmi les meilleurs, ne permettent<br />
de produire qu'un nombre limité de<br />
shapes, ce qui fait l'intérêt du présent<br />
programme à leur endroit.<br />
Pour utiliser le programme, insérez <strong>la</strong><br />
(les) disquette(s) contenant les deux<br />
tables de shapes lorsque le programme<br />
demande leurs noms pour<br />
les charger. En appuyant sur "?" puis<br />
RETURN, on obtient un catalogue<br />
préa<strong>la</strong>ble. La fusion s'opère sans intervention<br />
et le programme demande<br />
ensuite sous quel nom doit être<br />
sauvé le module. Insérez <strong>la</strong> disquette<br />
qui doit le contenir avant d'en donner<br />
le nom. En appuyant seulement<br />
sur RETURN, on annule J'opération.<br />
Le nombre de shapes correspond<br />
théoriquement au total des shapes<br />
contenues dans les deux tables primitives;<br />
ce<strong>la</strong> peut toutefois s'avérer<br />
inexact car certains éditeurs Inscrivent<br />
un nombre forfaitaire de shapes.<br />
N.D.L.R. : les fichiers fusionnés doivent<br />
être "effectivement" des tables<br />
de shapes, sous peine d'erreurs Applesoft,<br />
voire pis encore ...<br />
CHARGE SHAPE TABLE 2<br />
• PEEK (43617) •<br />
230 INPUT "NOM DE LA ST #2 :":S2$<br />
240 D2 0 Dl • LI<br />
250 PRINT DS"BLOAD"S25",A"D2<br />
260 L2 0 PEEK (43616 ) . PEEK (43617) •<br />
270 REM<br />
25.<br />
CALL " CALL A CALCUL. D'ADRESSES<br />
2aO 03 0 02<br />
• L2<br />
290 REM ARRONDI DE 03:<br />
300<br />
310<br />
D3<br />
NI<br />
320 N2 0<br />
330 SI<br />
340 52 0<br />
0 INT<br />
0 PEEK<br />
( (03 • 100) / 100) • 100<br />
(DU<br />
PEEK (02 )<br />
PEEK (Dl<br />
• 256<br />
• Dl<br />
PEEK (02<br />
Il 256 .. D2<br />
21 • PEEK (Dl<br />
• 2> PEEK (D2<br />
350 S3 = 03 .. 2 .. N1 • 2 .. N2 Il 2<br />
• 31<br />
• 31<br />
19