APPLE A LIVRE OUVERT DES LIVRES ET DES DISQUETTES POUR TOUS CHEZ VOTRE LIBRAIRE OU EN BOUTIQUE SPÉCIALISÉE POUR PROGRESSER POUR DÉBUTER POUR DECIDER



Documents pareils
NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

LES ESCALIERS. Du niveau du rez-de-chaussée à celui de l'étage ou à celui du sous-sol.

Structures algébriques

Q. A quels produits s adresse ce document?

Initiation à la programmation en Python

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Tutoriel Infuse Learning. Créer des quizzes multimédias sur ordinateur ou tablette

I. Introduction aux fonctions : les fonctions standards

Recherche dans un tableau

Note de cours. Introduction à Excel 2007

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

"! "#$ $ $ ""! %#& """! '& ( ")! )*+

Les chaînes de caractères

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Conception de circuits numériques et architecture des ordinateurs

ACTIVITÉ DE PROGRAMMATION

Structure fonctionnelle d un SGBD

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

EX-word TextLoader Fonction Bibliothèque

Cours Informatique 1. Monsieur SADOUNI Salheddine

Bernard HAMM, Évelyne LAVOISIER

Architecture des ordinateurs Introduction à l informatique

Créer une base de données

Cours Informatique Master STEP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

M % 6.09 UN 20.00% M 20.00% M 20.00% M 20.00% M % UN 20.00% UN 20.00% UN 20.00% 444.

Cyber-base du Pays Martégal. Atelier «Découverte de l ordinateur»

EXCEL TUTORIEL 2012/2013

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

SOMMAIRE. Travailler avec les requêtes... 3

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Découverte du tableur CellSheet

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

1 - Clients 2 - Devis 3 - Commandes 4 - Livraisons 5 - Factures 6 - Avoirs 7 - Modèles

La communication et la gestion de l'information

Mémo d'utilisation de BD Dico1.6

Chapitre 3: TESTS DE SPECIFICATION

PARAMETRAGE ET PERSONNALISATION DU LOGICIEL POUR VOTRE SOCIÉTÉ.

La mémoire. Un ordinateur. L'octet. Le bit

TEPZZ 6Z85Z5A T EP A2 (19) (11) EP A2 (12) DEMANDE DE BREVET EUROPEEN

Tout savoir sur le clavier

Un exemple d étude de cas

Rappels d architecture

Cours d algorithmique pour la classe de 2nde

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

1. Structure d'un programme FORTRAN 95

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Jeux de caracte res et encodage (par Michel Michaud 2014)

L AIDE AUX ATELIERS D ARTISTES :

Algorithmique et Programmation, IMA

SYSTÈME DE GESTION DE FICHIERS


TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année

Gérer ses impressions en ligne

TEPZZ A_T EP A1 (19) (11) EP A1 (12) DEMANDE DE BREVET EUROPEEN. (51) Int Cl.: G07F 7/08 ( ) G06K 19/077 (2006.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Transférer et enregistrer les photos sur l'ordinateur

Corrigé des TD 1 à 5

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

CAP BOX Note utilisateurs

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Inspiration 7.5. Brève description d Inspiration. Avantages d Inspiration. Inconvénients d Inspiration

COMMUNICATION PC/MINITEL

Votre appareil est configuré en usine pour permettre d'envoyer immédiatement des SMS.

Le modèle de données

Propagation sur réseau statique et dynamique

Formation tableur niveau 1 (Excel 2013)

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Structure d un programme

Licence Sciences et Technologies Examen janvier 2010

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

Débuter avec Excel. Excel

LOGICIEL ALARM MONITORING

Guide utilisateur. Nouvelle gamme couleur Konica Minolta

Le théorème de Thalès et sa réciproque

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

MEDIAplus elearning. version 6.6

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Bases de programmation. Cours 5. Structurer les données

Examen Médian - 1 heure 30


SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Windows Internet Name Service (WINS)

MODE D'EMPLOI DE LA CALCULATRICE POUR LES COURTS SÉJOURS DANS L'ESPACE SCHENGEN

F210. Automate de vision hautes fonctionnalités. Caractèristiques. Algorithmes vectoriels

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Compression Compression par dictionnaires

L ORDINATEUR. Les composants. La carte mère. Le processeur. Fréquence

Progression secrétariat

Programmation C++ (débutant)/instructions for, while et do...while

Java Licence Professionnelle CISII,

UE C avancé cours 1: introduction et révisions

UE Programmation Impérative Licence 2ème Année

Transcription:

CHEZ VOTRE LIBRAIRE OU EN BOUTIQUE SPÉCIALISÉE APPLE A LIVRE OUVERT DES LIVRES ET DES DISQUETTES POUR TOUS POUR DÉBUTER Apple pour tous; la découverte de l'apple; 36 programmes Apple pour tous; exercices pour Apple; 12 programmes pour Apple; la pratique de l'apple tomes l et 2; le Basic et l'école tomes 1 et 2 ; Macintosh le magnifique; programmer le Macintosh; multiplan pour Macintosh. POUR GÉRER la nouvelle comptabilité sur Apple tomes 1 el 2 ; La facturation et ses annexes; outils financiers el comptables pour l'entreprise; la paie et ses annexes. POUR PROGRESSER Clefs pour Apple Il ; clefs pour Apple / / c; la pratique de l'apple tome 3; l'apple et ses fichiers; gestion de fichiers et de périphériques pour Apple II/Pascol; Microbook, base de données pour Apple i Pascal UCSD sur Apple tomes l et 2 ; du logo pour Apple; ProDOS sur Apple; Pangraphe; modèles d'expression graphique, POUR DECIDER Modèles pratiques de décision tomes l et 2; Visicalc sur Apple; Multiplan pour Apple Il; bases de données sur Apple Il ; bibliothèque scientifique en Pascal; tests statistiques usuels,

MARSAVRIL 1985 Sommaire Page Langage Matériel Editorial par HelVé Thiriez 5 Transfert rapide de tableaux par Gérard MIChel 6 BA +. e., Les pointeurs en Pascal UCSD par Laurence Tichkowsky 13 P 1 +. e. C Mac Animation graphiques par Alain Bellegarde 17 BA 1 +. e., Initiation à l'assembleur (7) par Gérard Michel 23 A +. e., Copie d'écran sur Imprimante Espon par Alexandre Avrane 32 A +. e Catalogue sur Imprimante par JeanLuc Bazanegue 4 B A Macintosh BSAVE et BLOAD avec le Basic Microsoft par Marianne Sutz 47 B A MaCintosh Swltch vidéo pour carte 8 colonnes par Ertc Pascual 52 e Miniéditeur Basic par JeanFrançois Rabasse 55 B A +. e Visualisation d'une dlst.rlbutlon normale par Daniel Hirs! 63 B + e, Transformez votre Apple /le en Il +par François Sermier 65 A e Conversion chiffres lettres par François Fleury 66 B +. e., Mlcro lnformatlons par JeanMichel Gourévitch 69 1 +. e., Courrier des lecteurs par Ohvier Herz 71 *Langage B(asic) A(ssembleur) P(ascalL les annonceurs Appl ; p. 38_39 Compu.. 3 : p 4 Oyn.. mll Comp l r: p. 46 EMS: p 51 H lto: p 75 li : p 75 L'o.dln.. l u. Indlvld 1 : p 76 PSI; P 2 Tflfumpo: p 4 Éditions MEV 49. rue lamartine 78 Versatiles Pom's no 17 3

LA PHOTOCOMPOSITION EN PROLONGEMENT DE LA MICROINFORMATIOUE TRANSMETTEZ NOUS vos TEXTES PAR T LÉPHONE ou IJONNEZ NOUS VOTRE msquette Les textes Je II(1S articles, cata(9uts, annuaires ou brochures sliisis sur liotre APPl.E sont enlloljés directement sur notre phofocom IX'stuse. NIJu$ t/ous étlitons ainsi, le coût et le temps de III saisie suppl, mtntairl! (ue nécessite fe traitement tradilionne( de fa photocomposition (ln' ('impression des documents, si vous fe disiru nous pou' IItlS t9alement nous char9er de l';mpressic, et du brochat/e. NonŒ RÉH RENCE LA REVUE PO:WS TElECIIMPII3281863.. =s: Dl nwrr. Of>Wf1 ljaisdiiru'(j.ip!r,/p.lc 1l1V! C{lIN[S BONJOUR LES PRIX!! NOS Pl!IX SONT F ne Carte langage Carte 128 k ram Carte 8 colonnes Interface série Super série Interface parallèle Grappler + buffer 16 k Carte modem Carte Z 8 Wildcard 4 155 64 52 95 38 135 185 36 4 Speech card Carte horloge Joystick Ventilateur Contrôleur de drive auto switch 13/16 Lecteur Disk Slim Moniteur vert 12 Disquettes 5 1/4 S.F.lS.D. par 1 boîte Disquettes 5 1/4 S.F.lD.D. par 1 boite AU DESSUS. NOUS CONSULTER 32 5 165 28 37 15 95 95/boîte 175/boîte Carte bleue et eurocard acceptées Vente par correspondance: nous consulter. Computer 3 3. rue Papillon 759 Paris Tél. 523.51.15 (metro Poissonnière) ouverture du lundi au samedi de 1 h à 19 h 3 [J 4 Pom's no 17

Editorial La galaxie Apple est décidément en étdt de mouvement perpétuel' Steve Wozniak crée une nouvelle société spécialisée dans le gadget électronique pour écrans familiaux. quittant ainsi Apple qui. selon lui. n'il pas assez dévelop l'apple If Avant son départ. lors d'une interview. Steve déclarait que le C /J'est plus appelé J étre étendu, en tous cas par Apple. La rubrique Microinformations apporte de plus amples renseignements sur Apple el sa politique. De notre côté de l'atlantique. nous avons de bonnes raisons de pavoiser. Les deux meîlleurs logiciels de gestion de f/chiers sur le Macintosh. panni une quinzaine de collcurrents. sont de création française. Contr6le X a passé un accord avec Hayden Software pour la commercialisation de ex Mac&se aux EtatsUnis. A CI. a réalisé une très belle performance en emportant. avec son programme ABCbase, le prix convoité de la Pomme d'or, Au niveau du matériel, AppleT e/l réalise un triomphe, ayallf réussi il vendre en décembre sa 1 carte, et en voyant la Pomme d'or couronner trois créateurs ayant réali leurs développements autour de cene carte, Nous vous proposons dans ce numéro un questionnaire que vous pouvez compléter et nous renvoyer, 1/ y aura 15 abonnements (avec disquettes) il Porn's li g<jgller. Pour pijrticiper au tirage au sort, il vous suffit de nous le faire pijtvellir avant la fin du mois d'avril. Les lecteurs déjà abonnés pourront prolonger leur abonnement, ou l'offrir (nous encourageons toujours le prosélytisme ). La liste des g<lgnants pourra étre consultée sur notre stand au Sicob Printemps ou à Apple Expo (toutefois. les g<lgnanrs seront prévenus par courrier). Bien entendu, un seul questiollnaire peut être envoyé par lecteur Cela nous pennettra de mieux vous collnaitre et de mieux répondre li vos besoins. Pom 's vous propose deux nouveaux produits. Le premier est une disquette de démonstration de Max the Globe Trotter. Max the Globe Trotter est un cours de 5 heures d'anglais sur des supports différents (/ivre, casset/es audio et disquet/e), Il est vendu par Microlingua au prix de 12 frallcs. Le secolld. MAX (sans rapport avec le précédent}. est Ull moniteur très étendu pour Apple +, e ou c. qui comporte un accès direct aux registres. un miniassembleur. et bien d'autres choses encore là3ns ce numéro. vous trouverez. outre les rubriques habituelles Courrier des lecteurs et Microinformations que IlOUS devons il DilI/1er Herz et JeanMichel Gourél/ltch, la conclusion de la célèbre (et remarquable.l) série Initiation à rassembleur. réalisée par Gérard Michel, Gérard nous propose aussi une très utile routine (en assembleur, bien sûr ) destinée aux transferts de tableaux de variables. Pour rester au chapitre initiation': Laurence TlchkowsJ.,y. qui fait désonnais partie de féquipe de rédaction. débute une série sur le Pascal UCSD qui s'adresse il tous les utilisateurs d'apple. quel que sou leur matériel. Alain Bellegarde met li notre disposition un programme d'animation de tables de formes. alors que François Sermler vous propose de transfonner (sans fer a souder!) votre Apple e en Apple U+ Avec un fer a souder cette fois. les utilisateurs de cartes 8 colonnes munies d'une sortie vidéo pourront modifier cette dernière afin ne plus avoir à changer les branchements pour passer de 8 a 4 colonnes. ceci à condition de bien respecter les instructions que communique Eric Pascual. Pour les utilisateurs d'imprimante Epson. AJeKandre Avrane a écrit un programme de copie d'écran en assembleur. pendilllt que de son côté JeanFrançois Rabasse nous concoctait un miniéditeur Basic. Vous trouverez aussi un programme écrit par François Fleury. qui effectue la conversion de valeurs numériques en leur équivalent en toutes Jettres Malgré la densité des infonnations destinées aux utilisateurs d'apple Il. les possesseurs de Macintosh ne sont pas oubliés. En effe/. JeanLuc Bazanegue propose un Catalogue sur imprimante et Marianne Suu vous donne la marche A suivre pour ajouter deux nouvelles fonctions au Basic Microsoft, Ces deux programmes font largement appel au langage machine 68. processeur qui pourrait bien devenir le standard de la micro Nombreux sont ceux qui ont souligné /'intérêt agogique des articles Mac. bien que ne possédant ni Mac ni carte 68fX)() sur Apple JI ou Effectivement, il ne nous était pas apparu que, même sans Mac. on peut être passionné par le 68fX)(). En ce qui concerne les disquettes Macintosh. et aprês quelques mois d'expérience. nous avons décidé de publier une disquette Mac par numéro. au prix de 8. F Cela ne fait pas beaucoup plus cher qu'une disquette vierge et vous évitera de longues heures de saisie. Bien elltendu la disquette regroupant les programmes des numéros 14 a 16 reste disponible a son pri,1( habituel Hervé ThJrlez Ont coll.bor COl numtro, AI nd'l! AVfl'oe. Je n Luc Bazanegue, Aklm Bel rde. AIe ndre bac k. FrançOIS F'kIuty. Jean. Michel Gourêvitch Gérard Michel Damel H1111. Enc PMeual J an.fr nços Rabaul! FranÇOl'. Marianne Suu Laur nc Tlchkowsky Rtdutur., Alexandr Avra'l _ Olivier Herz. Lau' Tochkowsky Olrutur d 1. publication.,tdscltll' en chd : ' Thoriel. Oe.. l, Laurent Bidot. SI<I...oclsl : Ecition. MEV. 49. n.w:' lamartine 78 Vnseil\es A.bonnemnb,,' rhscllon: Editions MEV 647. rue des Chantien 7&XX) VersdIa Tt!. (31%12443 Publlcltt : Consuller Edrlion$ MEV Olffll,lon N.M,P,P, : Sophie Ma,. Têl!li 2422 1 Compo,lIlon : Têlécompo. 13 15, avenue du PI!tlI PafC. 943 Vinnln,. T I 328 1863 Imp... lon, ROI$lIY 47, venu de Pans 943 Vinc nnes T I 32818.63 Pom's no 17 5

Transfert rapide de tableaux Gérard Michel Dans le Porn's 12, nous vou:; avions présenté une petite routine en langage machine. appelée au moyen de l'ampersand. Qui permettait d'effacer un tableau de variables en mémoire et d'incrémenter ou décrémenter le nombre d'éléments dans un tableau une seule dimension. Nous vous en proposons ici une seconde, complémentaire de la précédente qui pennel de copier rapidement ' les v81eurs des éléments d'un tableau dans un autre, sans passer par des boucles Applesoft. el ce quelle que soit la nature du tableau, dès lors que le tableau de départ et celui d'anivée sont de même type. Pour plus de commodité, nous désignerons par Tl, Tl % ou Tl $, le nom du tableau original (qui peut donc s'appeler en fait AS, BS$, F%, HH ) et par T2, T2% ou T2$ le tableau duphcata Syntaxe L'appel de la routine se fait par le biais d'une indirectlon dans la routine CHRGET (SB1), utilisée par l'interpréteur Applesoft pour lire les caractères d'un programme. le crochet fermant (]) servira de caractère d'identification des Instructions de transfert de tableaux. Cest lui qui indiquera à la routine si l'instruction la concerne ou si la main doit tre rendue A l'applesoft En outre, pour assurer un fonctionnement correct, le 1 doit toujours être précédé de deux points (:1 dans une ligne de programme, même s'il se trouve en tout début de ligne. Par ailleurs, la définition préalable des deux tableaux (par DIM ou dimension par défaut) est indispensable pour l'emploi des instructions cidessous. Copie pure et.imple.15 n,t2 :15 Tl%,T2%,15 Tl$,T2$ Tous les octets composant le contenu de Tl (stockés dans la zone réservée aux variables dimensionnées) sont recopiés à J'identique aux adresses correspondant liu contenu de 12. les deux u.blellux doivent être exactement de même u.iile (même nombre de dimensions et méme nombre d'éléments par dimension). Il s'agit 'donc d'effectuer un MOVE de la zone de mémoire définissant Tl dans celle allouée à T2. Pour les tableaux de réels ou d'entiers (Tl ou Tl %1. l'instruction IS réalise en T2 ou T2% une copie totalement Indépendante de r original, puisque c'est la valeur effective de chaque élément qui se trouve stockée dans la zone des u.bleaux. On peut ainsi, par exemple. modifier ensuite la valeur de T2%(4) sans altérer pour autant celle de Tl %(4). et réciproquement Pour les tablea x de chllines de caractères. en revanche, ce ne sont pas les chaînes ellesmêmes qui sont stockées dans la zone des tableaux. mais leurs longueurs et leurs adresses. Par )5 TI$, T2$, on copie donc en 12$ les paramètres définissant les chaînes de TI$, reliant ainsi une même chaine à deux tableaux différents, sans rendre la copie Indépendante de l'original. Si l'on modifie alors le contenu de TI$(IO), par exemple. on change celui de T2$( 1) qui reste automatiquement identique à TlS(1). et réciproquement Ce type de manipulation présente l'avantage de ne pas encombrer la mémoire avec des duplicalas de chaînes lorsqu'ils ne sont pas réellement utiles. C'est notamment le cas pour une routine Applesoft d'affichage ou d'impression de tableaux alphanumériques, appelée en plusieurs endroits d'un programme par GOSUB pour traiter des tableaux différents (voir.! ce propos J'exemple simplifié donné en première illustration dans le programme de démonstration listé en fin d'article). Toutefois. il faut se méfier alors des routines de nettoyage mémoires qui ne sont pas prévues pour traiter le cas de chaînes adressées dans deux variables distinctes et donnent des résultats incohérents. En conséquence. il convient de toujours détruire le duplicata après usage. au moyen de la routine DIM.VAR.OBJ du Pom's 12, dont le code objet est foumi en annexe (instruction &Nom du tableau). Copie et dupllcatton des chaîne.,id Tl$,T2$ Même traitement initial que cidessus. les chaînes de Tl $ sont ensuite copiées, en un autre endroit de la mémoire libre. et affectées à T2$ qui devient ainsi Indépendant de Tl $. Au prix d'un encombrement mémoire en rapport, on réalise alors une véritable copie de l'original et de ses valeurs, du même type que celle obtenue par des instructions T2$ C.. ) : Tl$I.. I. Là encore, n$ et T2$ doivent être de même taille. Copie de dimension :IT Tl,T2,ij,1,x,y,/ :IT Tl %.T2%,ij. /.x,y J :IT TIS,T2$,i,j, 1,x.y,.. J l'instruction IT permet de copier les valeurs de tous les éléments de la dimension la plus profonde de Tl dans la dimension la plus profonde de T2, avec duplication des chaînes s'il s'agit d'alphanumérique, en fonction de la valeur donnée pour les indices de niveau supérieur. TI et T2 peuvent n'avoir pas le m me nombre de dimensions, dès lors que la dimension la plus profonde de T2 comporte un nombre d'éléments supérieur ou égal à celui de la dimension équivalente de Tl. Exemples lq DIM AIlO,5,3l,BI31 2,IT A,B,2,3,1,1 Copie les valeurs de A(2. 3. ).! AI2, 3, 31 en BIOl' BI31 1 DlM comme cidessus 2,IT B,A,I.S,3,1 Copie les valeurs de B(O) à 8(3) en AIS, 3, 1 AIS, 3, 31 1 DIM BB$llO,lOI.C$1l.1O.21 2,IT BB$,C$,4,1,2,5,1 Copie de 88$(4, ) à BB$(4, loi en C$12, 5, 1 C$12, 5, 11 La valeur des indices de niveau supérieur peut également être donnée sous forme de variables ou d'expressions numériques (VOir programme de démonstration). Evidemment. la valeur de l'indice pour la dimension la plus profonde n'est jamais indiquée, puisque le transfert porte toujours sur tous les éléments de cette dimension. Mode d'emploi Vous pouvez suivre une procédure comparable à celle donnée au début du programme de démonstration : Chargement de la routine de transfert ST.3; Chargement du fichier INTER qui place l'indirection dans CHRGET et oriente sur ST.3 (d'où la nécessité de charger préalablement cette dernière); Chargement de DIM.VAR.OBJ et initialisation du vecteur &. Après c.es initialisations, vous pouvez utiliser sans problème les instructions de transfert dans vos programmes Applesoft. Pour revenir au Basic standard. il suffit de charger le petit fichier CHRGET, qui rend.! la routine commençant en $Bl son aspect initial. 6,. ',., Pom's n 17

Précisions sur la structure des tableaux Rappelons brièvement les éléments les plus Simples, déjà largement commentés par ailleurs, et dans le Pom's 12 en particulier. La représentation d'un tableau en mémoire commence toujours par: Deux octets pour son nom. Deux octets (poids faible 1 poids fort) pour le nombre total d'octets occupés par le tableau. Un octet pour le nombre de dimensions. Deux octets par dimension (poids fort 1 poids faible) pour indiquer le nombre de ses éléments. On trouve d'abord le nombre d'éléments de la dimension la plus profonde et on remonte ensuite jusqu'à la première, qui occupe ainsi les deux octets précédant le contenu du premier élément du tableau. Pour calculer l'adresse du premier élément d'un tableau à N dimensions, il faut donc ajouter ((2 * N) + 5) à l'adresse du début du tableau (premier caractère du nom) dans la zone de stockage pointée par $6B $6C. Chacun de ces éléments occupe 2 octets (valeur entière) dans un tableau d'entiers, 3 octets pour des chaînes (longueur et adresse de la chaîne), el 5 octets pour les réels (format flottant compacté). Le problème se complique un peu en ce qui concerne le mode de stockage de ces éléments, c'estàdire l'ordre dans lequel ils sont rangés. Le principe consiste en un classement hiérarchisé dans l'ordre crois sant des indices les plus profonds. Prenons l'exemple d'un tableau à 4 dimensions (A,B,C,D), dont la valeur des indices respectifs sera notée a, b, c, d. En partant du début du tableau vers la fin, on trouvera les éléments dans l'ordre suivant: Tous les éléments d'indice d =, avec d'abord tous ceux d'indices c = d =, parmi lesquels viennent d'abord tous ceux d'indices b = c = d =, en t te desquels on trouve bien SÜr J'élément d'indice a = b = c cl O. Cela nous donne, pour le tout début du tableau et en résumé, le classement: (,,,) (1,,,) (2,,,1 IA,O,O,OI (,1,,1. (1,1,,1 (A, 1,,1 (,2,,1 (1,2,,1 (A,2,,1 IA,B,O,OI' 1,,1,1 11,.1,1 (1. IA,B,l,OI 1,,2,1 (1. IA,B,C,OI. Viennent ensuite les éléments d'indice d = l, avec la même hiérarchie pour les indices supérieurs: de (,,,1) à (A,O,O,l), puis (,1.,1) à (A,B,O,l). puis de (,,1,1) a IA,B,C,ll. Et ainsi de suite jusqu'à, enfin, la série des éléments d'indice d =D, de (,,,1 (A,B,C,DI. Tout cela n'est pas particulièrement simple, il est vrai. mais conduit à des formules plus daires pour accéder aux éléments correspondant à une valeur donnée des indices de niveau supérieur et obtenir ainsi la série des éléments de la dimension la plus pro fonde pour cette valeur. 11 nous faut connaître l'adresse du premier élément appatlqnant a la série (indice = a pour la dimension la plus profonde) et la distance qui sépare deux élements consécutifs dans cette série. Pour l'adresse du début de série, le problème consiste à calculer le décalage en octets qui sépare le premier élément qui nous intéresse du tout premier élément du tableau. Pour notre exemple de dimension (A,B,C,D), le premier élément d'indice (a,b,c,o) se trouve à : D = a + (A*b) + (A*B*c) éléments du tout premier 1,..). Pour convertir ce décalage en octets, il suffit de multiplier D par le nombre d'octets par élément (2, 3 ou 5). En ajoutant ensuite ce décalage à l'adresse de (,,,), on obtient l'adresse de (a,b,c,o). La distance entre deux éléments est donnée par le produit des dimensions de niveau supérieur (A*B*C), luimême multiplié par le nombre d'octets par élément. De façon générale, pour un tableau à n+ 1 dimensions (Dl, 2,On, Dn+ 1), dont chaque élément occupe OC octets, et pour des valeurs VI. V2 Vn des indices de niveau supé rieur, on obtient la série des éléments de la dimension la plus profonde par les formules' Décalage en éléments = = V1 + Dl*V2 + Dl*D2*V3 + + + DhD2*D3. *DnlVn calage en octets = D*üC DO Adresse de l'élément (VI. V2, Vn, ) = adresse de (a,,, ) + DO Distance entre deux éléments de la série = DI = (Dl*2**Dn)*OC Partant de cette structure, le principe de la routine de copie des dimensions les plus profondes consiste à : Calculer pour les tableaux Tl et T2 les paramètres DO (puis l'adresse du premier élément) et DL T ranslérer ensuite les éléments un par un, en passant au suivant par ajout de la valeur de DI dans l'original et de celle de DI dans la copie. Le nombre d'éléments à copier est indiqué par la dimension la plus profonde de Tl Les informations complémentaires sont fournies dans les commentaires du programme source. Source Big Mac 13 HI OE 14 H2 Pom'sno 17 21 DANS 5251 ::: 'FC $FO 53 16 54 17 1 2 lb 3. COPIE RAPIDE DE TABLEAUX 1. 4. COOE = ST.3 2 S 21 KS3 6 22 KSI 7 23 KSO B ORG SDEO 2' 1 ;: 'EE ;VARIABLES 25 OE LA HUL TI PLI CATI CN 2. la 2 'EF ;21 (PO 27 55 IDS FORT / POIDS FAIBLE> MULTIPLIE 2B PAR H2t11 2. 11 SI >F. JAVEC RE SU 3 KS2 LTAT DANS 5453 31 12 52 :: 'FA JET COPIE 32 5 33 3' 3S SR? >FE >FF CMP { 5 ;CARACTERE BEO KSO CMP fs3a BCC KSI RTS JMP 'BE JSR.BI CMP {'T' ElNE 55 JHP TTO CMP f' D' SNE KS2 JHP KS' CMP f' S' SNE KS3 JSR SR JMP K., JSR.BI JSR F7D9 ;RECHERCHE 7

8 36 37 38 3' 1.2 3 45.6 47 KS5 DE TABLEAU POINTE PAR $88$B9 LDA $9B j$9b$9c P OINTE SUR LE NCI'1 DU $6 LDA $9C $7 LDY LDA O1P SNE JSR JSR ta ($B8). Y t$2c KS3 $BI $F7D9 DU 2EME TABLEAU RTS CLC TABLEAU?... jrecherche.8 LDA $6 AOC t4 ion FAIT L E HOVE A PARTIR DU NCI'1BRE DE DIH ENSI ONS '5 $3e 51 LDA $7 '52 AOC to '53 $3 :54 LDY t2 55 LDA (S6>. y jnbre OCTE,. 57 58,. 6 61 62 63 6 65 66 67 68 6' 7 71 72 73 7' 75 76 77 78 7. TS DU TABLEAU 5 MCNE> SEC S8C INY LDA S8C CLC LDA RES SE DE FIN AOC LDA AOC CLC LDA U TRANSFERT AOC LDA AOC LDY JSR JSR 8 RTS '8 ($6>. y ',. sac DU '8 sae sad,. saf 8 (POUR CALCUL FIN MCNE <TABLEAU 2> ' 2 C ' 3. $FE2C '87 icalcul AD jadresse jm V E 81 KS4 JSR SD jcopie DES CHAINES ) HOVE Ctt1PLET DANS LN 82 83 8 85 86 87 88 8...1.2.3 95.6 1ER TEMPS LDA LDY CLC AOC.98 'CE.2 ($9B). Y $6 j$6$7 = A DRESSE FIN DU TABLEAU + 1 LDA $9C j (ADRESSE TABLEAU. SON Ntt1BRE DI OCTETS> INY AOC $CF $7 L'ADRESSE DU AU ($9B). Y LDY t4 jcalcul DE LDA ASL CLC 1ER ELEMENT DU TABLE ($CE>, y.7.8 1 11 TO 12 13 1' 15 Tl 16 17 $CE$CF S> TR AOC BCC INC CLC AOC E5 TO SCF $CE (DEBtJT + BCC INC JSR JMP LDY $CE Tl $CF TR T4 E2 jremis EN (NBRE DIM * 2) + 18 LDA (SCE),Y jpolds FOR T DE LIADRESSE DE LA CHAINE 1' 11 $8 DEY III LDA ($CE>,Y jpolds FAl BLE OE LIADRESSE OE LA CHAINE 112 113 11 TAX DEY LDA S7 js6fs7 E T $71$72 ADRESSE CONTENUE EN s6 FS7 115 116 117 118 ' 12 121 122 123 124 T2 125 126 127 128 12' GUEUR DE LA LDA SEC SBC '72 CHAINE.6F $71 $6F BCS (SCE>, Y T2 DEC $72 DEC $7 LDA LDY JSR (SCE), Y S8 $E'5E2 A CHAINE POINTEE PAR LDY t2 ON POINTEE PAR S71$72 XY jhoins LON jdeplace L ien POSITI LDA S7 (SCE>,Y ihaj NOUVE LLE ADRESSE CHAINE DANS 2EME TAB ( T2, 13 DEY 131 LDA s6f 132 (SCE>, Y 133 RTS 134 T4 LDA SCE icalcul AD RESSE ELEMENT SU 1 VAN'T S' 1 L EX 1 STE 13'5 CLC 136 AOC f3 137 SCE 13B BCC T3 139 INC SCF 14 T3 LDA scf 141 O1P S7 jarrive A LA FIN DU TABLEAU 142 SNE TI 143 LDA $CE 144 CHP $6 145 SNE Tl 146 JSR sb7 147 RTS 148 TTO JSR SR jrecherche DES DEUX TABLEAUX Tl 149 LDA $9B 15 SCE 151 LDA S9C ET T2 1'52 SCF 1:53 LDA ES 154 $BD icalcul DU 155 156 NBRE D'OCTETS PAR ELEMSNT (5, 3 U 2' LDY fi LDA (S6),Y Pom's no 17

157 158 15. 16 161 162 163 8PL LDA DEY LDA 8PL DEC 164 TTOO LDY 165 LDA TTOO f3 8 ($6),Y TTDD 8 fs ($6>,Y ôverifie QIM LA PLUS PROFaIOE DE T2 166 S7 j5up. OU E 167 168 16. 17 171 172 173 174 GAL A TT2 TTI DIH LA LDA CMP 8EO 8CS JHP INY LDA 7::NBRE ELE. TI PLUS PROFONDE DE Tl (SCE). y 7 TTI TTIDC $OEC9 (S6). y 175 LM (SCE>,Y 176 O'1P $6 177 BCC TT2 178 TTI JSR TT4Q 179 JMP TT2 18 TT4 LM fd SD6 JET $6$ DANS QIM PLUS PROFONDE 181 seo jdonnera N BRE DE DIN MOINS 2 EN FINAL 182 TT4 JSR SOEBE jverifie P 183 184 185 186 RESENCE DE 1VA'IT CMP BEO JSR, ET LIT CARACTERE SU (sce TT3 '167 PRESSION POINTEE PAR JSR SE752 EN ENT 1 ER A 2 OCTETS S.!S1 187 LM $EO 188 ASL 189 TAX 19 LM $5 jtoken DE jevalue EX $88$89 jcawertit RANGE EN $SO 191 Dt,X jstocke LA VALEUR DE L'INDICE 192 LDA $51 193 INX 194 DI,X 195 INC SEO 196 JHP TT4 197 TT3 INC SED jverifie N BRE D'INDICES / NOMBRE DE DIHENSIQ NS 198 LDY f:4 199 LDA ('6>,V 2 O1P.eD 21 8EO TT 22 JHP TT2 23 TT5 QEC $EO ;RETOUR AU NOMBRE D'INDICES 24 DEC $EO 25 LM $EO UTILE 26 BMI TT9 il SEULE IH DANS LE TABLEAU (DCNC RIEN T /) 27 LQX El 28 LOA ($6) 1 Y 29 TAY 21 DEY 211 TYA 212 ASL 213 CLC 214 AOC f 21 TAY ;Y POINTE SUR N8RE ELEMENTS DANS LA lere QIH Pom's n 17 216 STY.. EB 217 STY.. EC 218 TTIO LOA 1,X,VERIFIE V ALEUR DE L'INDICE DANS LA aln 219 O1P ($6),Y 22 BCC TT6 221 BEa TT7 222 TT8 JHP TT2 223 TT7 INY 224 DEX 225 LM D1.X 226 227 228 22. 23 231 232 233 234 TT6 236 TT9 CMP 8CS IN)( DEY IN)( IN)( DEY DEY (S6),Y TT8 CPY E5 CES TRAITES? ENE TTJO LDX fo 237 STX SI8 238 DECALAGE RT AU STX PREM 1 ER SI9 1ER ELEMENT DU STX SIB DINCE ENTRE DEUX LES 24 LM.. ed 241 8PL TTII < NB RE ELEMENTS ;TOUS INDI,18$19 ELEMENT UTILE ;PAR RAPPO TABLEAU,$IASIB ' ELEMENTS UTI 242 INX 243 STX $IA ;SI l OIN 31) DECALAGE ET DINCE l FOIS 244 LM E7 ;NBRE OCTE TS PAR ELEMENTS 245 JHP TT 1 e ; 1 ER ELEME NT EST A 7 OCTETS OU 1ER CARACTERE OU NCN 246 TTII ENE TTl2 247 LDY $E8 248 LM ($6),Y ;SI 2 DIN X ET Y, DECALAGE INOICE x 249 $lb JET 1N CE _ T X FOIS NBRE OCTETS PAR ELEHEN 25 INY 251 LM (S6),Y 252 $IA 253 LM f9 ;IER ELENE NT EST A 9 OCTETS OU l ER CARACTERE DU ND'1 254 JHP TTl8 255 TTI2 STX $IA 256 LOY SEC 257 LM ($6),Y 258 2 ;NeRE ELEM ENTS DANS IERE OIN (X) DANS 21 259 INY 26 LM ($6),Y 261 1 262 TT14 DEC $EC 263 DEC $EC 264 LOY SEC 265 LM (.6), Y 266 H2 ;MULTIPLIC ATICN PAR NeRE 5UI E 267 INY 268 LM (S6), y 269 MI 27 JSR HULT 271 LM S3 ELEMENTS DE LA OIH 272 SIA ;HAJ OU RE 9

1 SULTAT EN 'IASIB 273 LOA 54 274 S'TA.1 B 27 LDA sec 276 O1P (7 277 BEO TT 13 ; ON ARRETE A L 'PNPHT CERN! ERE DIM (A 7 OCTET 5 DU BORD> 278 LM sla 279 1 jresultat EN 21 ET MULT PAR DIM SUIVANTE 28 LM.18 2BI 2 282 JHP TT14 283 TTI3 LOY SES 284 STY SEC 28:5 lda ($6) 1 Y ;X DANS 2 286 287 288 289 29 291 292 293 294 295 296 297 298 299 3 31 32 33 34 35 36 37 38 39 31 311 312 313 314 3, 316 317 318 319 32 321 322 323 324 325 326 327 328 1 INY LOA LOX A LA VALEUR HE TT16 DIH ATION LM INX TXA PHA LM S'TA 2 ($6). y 1 f2 jccm1ence DE L'INDICE POUR LA 2E Dl,X MI ol,x H2 JSR HULT JMULTIPLIe PAR VALEUR DE L'INDICE POUR LA OIH SUIWlNTE ION ele LM 53 AOC.18 jaccuhulat CES RESULTATS INTERMEDIAIRES.18 LOA 54 AOC $19 $19 OEe CEC LDY SEC SEC sec cpy i7 ;ARRIVE A L'AVANT DERNIERE DIM? BEG N'TE EN H2f'11 TT!:5 LDA (S6),Y idim SUIVA Œ); LOA M2 (6). y MI SI TIENT TOUJOURS LE S'TA 1 ES, REMIS EN 12 LM 52 2 JSR HULT ;5152 CON PRODUIT DES OIH jpreceoeit LM 53 ;PRODUIT ES DIM REMIS EN 12 URER 1 j<pour ASS SA Ca4SERVATl a4 EN SIS2) LM S4 2 PLA TAX 1 NX j PREND VAL EUR DE L'INDICE SUIVANT INUER 329 TT15 33 JMP TT16 jpour CONT LES MULTIPLICATIONS PLA ja4 VA SE 331 332 333 334 335 336 337 338 339 34 341 PLACER SUR LE OU TABLEAU TTIB TTl7 IH? INY INY TYA CLC AOC 8ee INe ele LM SMI TOUT PRB'1 l ER ELB'1erT S6 S6 TTI7 S7 SEO TT17! j t SEULE 342 TTI7 LDX EO 343 LM OI,X jajoute VA LEUR DU 344 AOC SI8 345 S18 346 INX 347 LM DI,X 348 AOC S19 1ER INDICE AU DECALAGE 349 s19 35 LM EO jmultiplie DECALAGE PAR NBRE D'OCTETS PAR EL EMENT 351 2 352 LM seo 3:53 1 354 LaA S18 3:55 Hl 356 LaA SI9 357 H2 358 JSR HULT 359 CLC 36 LM S3 361 AOC S6 jdecalage + ADR. 1ER ELE. ) 1ER ELEMENT U TILE 362 S6 363 LM S4 364 AOC S7 36:5 S7 366 TTI71 LaA EO jmultiplie DINCE EMENT 367 2 368 LaA SBD 369 1 37 LM SIA 371 HI 372 LM SIS 373 H2 374 JSR HULT 375 LM S3 376 S1A 377 LaA S4 378 SIB 379 RTS PAR NeRE D'OCTETS PAR EL 38 TT2 LM s6 j SAWEGARD E DES RESULTATS OBTENUS POUR LE le R TABLEAU TI 3BI SB 382 LaA S7 383 $9 384 LOA SIA 385 SIC 386 LM SI B 387 SIO 388 LDA S6 389 SIE 39 LOA S7 391 s!f 392 LDA SCE icalcul DE S PARAMETRES POUR LE SECOND TABLEA U T2 Pom's no 17

393 O. 39. LM 395 39. OCF $7 JSR 81 397 JSR TT'O 39. LM O. jsawegard E POUR COPIE DES CHAINES SI NECESS AIRE 3 OCE. LM $7.1 OCF.2 TT LDY ' '3 TT21 LM ($8>. y ;T SFERT ELEMENT PAR ELEMENT.. ($6),Y '' INY.. CPY 8 7 E TT21 '8 oec. ;$6$7 = NB RE ELEMENTS A. E TT22., LM 7. 8EO TT23 2 TT22 LM. 3 CHP!$FF. E TT2..., TRANSFERER oec 7.,, TT2 CLC jajoute Dl NCE DANS Tl 7 LM O.. AOC $IC. O. '2 LM O,.21 AOC $ID.22 O, CLC '23 NCE DANS T2 '2' LM O,. AOC OIA.2. O,.27 LM $7.28 AOC $18.2. $7.3 MP TT.31 TT23 LM 8,AJOUTE DI.32 CHP f3 JTABLEAU E CHAINES DE CARACTERES?.33 E FIN '3' TT28 JSR TR,COPIE DES CHAINES LNE A!..NE AVEC MAJ DANS T 2. DEC OIE j$le$if NBRE DE CtlOllNES A COPIER.3. E TT2'.37 LM olf.38 8EO FIN.3. TT2' LM OIE CHP f$ff E TT27 2 oec OIF 3 TT27 CLC JAJOurE DI NCE AINE SUIVANTE LM OCE.., AOC $la OCE 7 LM OCF 8 AOC 18 OCF., JHP TT2B FIN MP 81 DANS T2 POUR PASSER A LA CH.52 HULT LM DI,SOUSROUT INE DE MUL TI PLI CATI (t.i.,. SI ;16 BITS P AR 16 BITS / RESULTAT.,. LM 2. 52.,. LM '.57 53.,8 S..,. LoX fi'.51 LSR H2.., ROR HI 2.CC 85 3 CLC LM DI 5 AOC 53 53 7 LM 2 8 AOC S S'.7 85 ASL DI.71 ROL 2 OEX.73 E 851 '72 SUR 16 BITS '7' RTS. DI OS 18 ; ZCNE DE 5 TOCKAGE DES VALEURS DES INDICES TEST. ST3 PRINT CHRS (4)BLOAO ST.3: PRINT CH R5 (4)BLOAO!NTER.3 5 HIMEH: 36319 6 PRINT CHRS (4)BLOAD OIM.VAR.OBJ: PO KE 11 3,76: POKE 114,7 * 16 t 12: POKE 115,9 * 16 t 2 1 OIN AS(3).8$(3),C (3), (3),E (3).F (3) 1 2 TEXT 1 Hct1E 2 GOTO 95 3 FOR 1 = TO 3: PRINT A (J): NEXT : GET ZS: PRINT : 8. A : DtM AS(3) : RETURN 95 PRINT INITIALISATION TABLEAUX 1 FOR 1 = TO 3:8$(J) TABLEAU B t STRS (J):CS(I) = TABLEAU C + STR5 (I):OS(!) = TABLEAU STRS (I):ES(I) TABLEAU E t ST RS (I):FS(!) TABLEAU F t STRS (1): NEXT 11 PRINT : PRINT FIN INITIALISATION: PRINT Porn's no 17 t 12 :tsa.,a$: GOSUS 3:iSC$,A$: GOSUS 3: 13 CLEAR 13 tsd$,a$: GOSUS 3:JSe$,A$: GOSUS 3 O:iSF$,A$: GOSUS 3 DIH AY.(lOO>,AC2),A$(3>,A2%<IOO>, A2(2).A (3) 14 PRINT : PRINT INITIALISATION EN COU RS; FOR 1 K O Ta too;a%(i) =!;A( 1) = 1 * 1: NEXT : FOR 1 = 11 T a 2:AC!) s ida * 1: NEXT : FOR 1 _ TO 3:A (I) c ELEMENT t STRS (1): NEXT 145 PRINT FIN!NIT ISO ; SA%,A2/.: SA,A2: DA.A2S 17 FOR 1 = Ta 1: PRINT A%(I),A2%(I) : NEXT ; PRINT : GET Z : PRINT : F OR! = a TO 2: PRINT AC!),A2(1): NEXT : PRINT : 175 8. A%: 8. A2/.; & A: 8. A2 GET Z : PRINT 177 PRINT MODIFICATION DE A : PRINT : FOR 1 = a TO 3 STEP 1:A2$(!) s A2 (I) t MaO: NEXT 17B FOR 1 = TO 3: PRINT A (I),A2$(I) : NEXT : PRINT 18 8. A ; 8. A2$ Il

,. 2 2' 21 22 23 DIM XI ( 15): QIM X2$( 2,2,15) 2. FOR 1.,. TO 4:TI%<I,I,I,I,I,n PRINT INITIALISATION XJ : FOR l * 1 : NEXT o TO 15:XI ( I) = XIS NO. STR 245 PRINT FIN INIT S (1): NEXT 25 FOR A TO 2: FOR B = TO 2: FOR PRINT FIN INIT C c TO 2: TTl%,T2%,1,1,1,1,1, / FOR J = TO 2: FOR Z = TO 2: TXIS,A,B,C, / : FOR 1 = TO 5 : PRINT,X2$, /,J,Z, / : FOR 1 = TO 15 T2%(A,B,C,l>,A B C 1: NE : PRINT X2'J,(J,Z,I),J Z 1: NE XT : GET Z$: PRINT : NEXT C,B,A XT : GET Z$ : PRINT : NEXT : NEXT 27 PRINT : FOR A = TO 2: FOR B = TO At XIS: At X2'J,: QIM Tl%<1,I,I,I,2,4>, 2: FOR C = TO 2: FOR Q = TO 5 T2%( 2,2,2,5) : PRINT TZ%<A,B,C,D) i: NEXT PRINT INITIALISATION Tl% : PRINT,e,B,A Récapitulation.8EO.9215 8EO C9 5 BoeB.6 4C BOFO 54 DO BOF8 3 8EOO E7 2 8E8 BI BE IO 6 AS 8E18 88 C9 8E2 2 9 8E28 4 85 8E48 A5 3 8E5 98.69 8E58 85 8E.6 2 87 8E68 9B 85 8E78 9B 85 BE9 2 96 8E98 81 CE BEAO 88 A5 8EA8 FI CE 8EBO C6 72 8EB8 2 E2 8EC8 CE 18 8E9 A5 CE BEEO 6 BEFO 8 AD 9EF8 3 8:5 8F4 E8 9 8F48 8F E6 BF:5 EO FO 8F88 6 85 8FCO C6 EC 8Fca B5 FO 8FOO 36 91 8F8 85 18 8FEO A:5 la FO BE 3 OB 4C 4C 64 7 8E 2 9 9C 85 2C F7 6 3C A5 65 9 85 3F 4 B5 43 AO 6 CE AO 8E7 85 6 A:5 9C 7 AD BE 4C 85 8 7 85 85 71 C6 7 E5 AO 69 3 C5 6 2 7 al BI C9 2 E2 BE 3A BI BE C9 4C 24 F7 AS 7 AO ca 2 18 A5 7 69 42 A5 2 2 1 2 18 85 CF 4 BI 3 E6 8E8 18 69 5 9 8E88 65 CE 85 CE 9 2 C7 8E 88 BI 72 A5 85 6F BI 2 A:5 8ECO CE 88 A:5 6F 91 CE 85 CE DO 82 8E A:5 AO 9 1 C9 C9.. BE OB B' O. E9.B oc 2C BE 71 CB CE CF E. AO CE.F BO 7. 9 8EOO E6 CF A5 CF CS 7 2 OB OB 2 B' B' B' 8E3 3 AO 2 BI 6 38 8E38 85 8 C8 81 6 E9 B5 8E4 9 18 A:5 3C 65 8 B5 3E 9EE8 CE A:5 9C 85 CF 8 88 O. 8FOO C6 8 AO 5 al 61 91 EO AD 3 4C EF C8 C6 EC C8 81 A5 FE A' OB 71 OA 'B CF 2 PA 3B O, CE A' O. BI 6 1.,.. BI M O. B' CO O. A' 2.B.7.,., A' 2 7 8F8 81 CE C5 7 FO. DE 8FIO 4C C9 DE C8 al O.., O. 8F18 81 CE C5 6 9 F2 2 8F2 8F 4C A4 9 ' B5 EO EO B' BF 7 'A M O. EC.5., 2' 8F28 2 8E DE C9 CB FO la 2 8F3 67 2 :52 E7 A5 EO OA 8F38 AfA A:5 5 9 A' 'C O. C. 8F58 C6 EO A5 EO 2F A2 8F6 BI 6 A8 88 'B OA,. OJ B5., FC 2B co EO. 8F68 5 AB 84 E8 B4 EC 8F7 91 1 6 9 FO 'C 8F78 1 8F CB CA BO 8F8 6 8 Fol EB BB EB EB BB 8F88 B8 CO OS DO E1 A2 B. 8F9 18 86 19 86 'B A' EO 8F98 OB E8 86 la ' 4C 8FAO 9 1 A4 EB., O..5 8FA8 18 C8 81 6 B5 AO O, 8FBO 4C 49 9 86 'A EC., A5 A:5 FE EC 49 EE O 2 la A5 FF 7 FO OB 85 EE A5 18 85 EF 8FE8 4C CO 8F A< E. 8FFO.6 8:5 EF C. B' O. 8FFa A' 2 BD., 9 SA 'B BD.5 98 36 A' FE., 9 1 A' FF 6:5., 918 EC C. EC A' EC eo.,., <C O. E. EB 2 B' EF FA,. O. 2.F 65.,., A'.,.,., 3.,. 6 FO C. EE 91 A:5 A' 2 FF A' A5 A5 A' 2' B' C. O, FF., 91 6 A' 918 2 911 2 921 7 BD BD 3. O. 'A 3.., 7 7 CF.F CF C. A' 9 9 A4 8:5 E8.6 A' EO 3 91 A5 19 6 85 1 F 85 7 91 65 18 91 65 19 EF AS BD FC A5 19 18 AS FE FF 65 7 EF AS BD FC A5 lb EC FC FO 7 B' A' FE PA C. 9.,.,.,.,., B'., EE EB 2 B' e, FO O. FA., EB C. 3 A2 EE FO o. 7 EE FO AS.6 85 CE A:5 7 AD BD DO 7 FO 2 C6,. 7 A'.E A'.,. C. FE 8:5 AS 6 85 9 AS la 8S AS CE 2 BI BI 8 F7 C6 6 DO 25 A5 7 18 A:5 8 6 6:5 L8 85 C9 3 le DO la A5 85 8 IC 85 1 A5 6 85 1 E 85 6 2 91 6 6 C9 85 8 A5 9 65 1 1 F FO 18 AS 1 E C9 2 C6 IF 18 AS CE 8S CE AS CF 65 lb la 85 7 4 'C 23 A' FF DO 'A CF., 92 928.5 FC A' F9.5 93 938 EE A' FF., EF 69 94 948 9S 959 96 968 AO 97 A' 978 98 988 AO 99 998 9AO 9A9 98 988 9CO 9C8 9 98 9EO 9E8 9FO 9F8 9118 912 91 28 913 4C 1 91 4C BI EE 9139 8S F9 A5 EF 85 FA AO 914 95 FE 8:5 FF A2 1., FO 91 48 66 FC 9 18 AS EE., 915 FE 85 FE AS EF 65 FF., 91 58 FF 6 EE 26 EF CA E6 916 6 FF FF FF FF 9168 FF FF FF FF 917 FF FF FF FF 91 78 FF FF FF FF 918 FF FF FF FF 9198 FF FF FF FF 919 FF FF FF FF 9198 FF FF FF FF 9IAO FF FF FF FF 91A8 FF FF FF FF 918 FF FF FF FF 91 88 FF FF FF FF 9ICO FF FF FF FF 91 C8 FF FF FF FF 91 FF FF FF FF 918 FF FF FF FF 9IEO FF FF FF FF 91 E8 FF FF FF FF 9IFO FF FF FF FF 91 F8 92 929 FF FF FF FF FF FF FF FF FF FF FF FF FF FF A5.8LOAO IN.VAR.8J _927C.94C 927C A4 68 84 18 928 A4 6C 84 19 AO :5 84 8 9288 A2 86 7 86 18 86 IC 929 86 1 86 9 FO 19 2 81 9298 DO 4 E6 19 35 C9 92A 24 FO Il C9 25 FO 33 C9 92A8 C8 FO 21 C9 C9 FO 2 95 928 6 E8 DO E2 E6 1 AS 7 9289 9 9 85 7 AD 1 91 88 92CO 2 SA FO OF 2 81 92C8 C9 C8 3 4C 5 93 E6 92 IC 4C 5 93 2 E5 92 4C 928 Il 93 E6 1 AS 6 9 8 92EO 85 6 4C 84 92 AD BI 92E8 18 CS 6 7 C8 81 18 92FO C5 7 FO IC 2 93 BS 92F8 19 AS la 95 18 4C E:5 92 93 AD 2 81 18 19 65 18 85 938 la C8 81 lb 65 19 85 le 931 6 AS 18 8:5 42 A5 19 85 9318 43 C8 81 18 85 8 ca BI 932 18 85 9 2 93 A5 la 9328 85 3C A5 le 85 3 AS 6 933 85 3E A5 6E 8S 3F AD 9338 2 2C FE A5 6 38 ES 8 934 8S 6 AS 6E ES 9 85 6E 9348 A6 18 3 2 81 6 935 2 ES 92 AD 4 91 18 C9 93S8 DI FI 2 93 AS 1 936 FO 9 C6 8 A:5 8 38 ES 9368 ID 85 9 A5 IC FO 38 AD 937 6 BI 19 38 E9 1 91 18 9378 88 81 18 E9 91 18 AO 938 2 81 18 38 E5 8 91 18 9389 C8 81 18 E9 91 19 AS 939 la 48 AS le 48 2 93 9398 85 43 AS la 85 42 68 85 93A 3D 68 85 3C 4e 2E 93 AD 93A8 6 81 18 18 69 DI 91 18 938 88 BI 18 69 91 18 AO 9388 2 BI 19 18 65 8 91 18 93CO C8 81 18 69 91 lb A:5 93C8 6E 85 7 85 9 AS 6 95 93 6 18 65 9 85 6 85 8 939 9 4 E6 6E E6 9 AD 93E: 91 6 91 8 A5 7 CS le 93E8 9 A5 6 C:5 la 3 93FO 4C 4C 93 C6 6 AS 6 C9 93F8 FF DO 2 C6 7 C6 8 A5 94 8 C9 FF OB C6 9 4C 948 EO 93 2 8LQ,q INTER. 3 OOBA 4C EO BD SLOAO CHRGET, BA.BD OOSA C9 3A BO DA 12. _ I. _ li& Porn's no 17

Les pointeurs en Pascal UCSD Laurence Tichkowsky Le Pascal est un langage qui a fait couler beaucoup d'encre et dont on parle suffisamment pour éveiller l'intérêt de ceux qui programmen\. [1 présente des particularités et offre des possibilités de développement que l'on ne trouve pas en Basic. en Fortran, Les avis sont très partagés; certains pensent qu'il est réservé aux universitaires. pendant que d'autres menent au point des produits comme PFS. ABCbase.. Le problème n'est pas de trancher sur la valeur du Pascal mais d'en parler. La notion de pointeurs est très spécifique au Pascal. Elle est importante, et perme! d'aller plus loin dans la connaissance du langage. Cest pour Quoi nous lui consacrons. ici. ces quelques lignes. Les enregistrements A la lecture d'un programme. écrit en Pascal UCSD. vous avez sorement déjà rencontré une déclaration de TYPE dans Je genre de celle qui suit : AORES$E'RECORO RUE :$TRINGj CPOS: STRING, VILLE:STRING END; ELEMENT=RECOPO NOM :STRING; ADR:ADRE5SEj AGE :STRING END j ainsi pour définir la ville où habite Monsieur X on écrira. dans Je programme principal ou dans la procédure, l'instruction d'affectation : ELEMENT.ADR. VILLE: 'PARIS'; La structure d'un enregistrement est un type (RECORD). Les éléments le composant sont appelés : champs. ils peuvent être de types différents La notion d' enregistrement est une notion récursive. En effet. un champ peut être défini comme un enregis, trement (dans la déclaration donnée cidessus. le champ ADR est un enregistrement dont l'identificateur est ADRESSE: les champs le composant sont des souschamps) Les variables de type enregistrement sont les seules qui permettent de définir des champs dont les types sont différent<;. Dans notre exemple. nous considêrerons des champs de type chaîne de caractêres (STRING). Le système offre à cette structure de nombreux avantages. Il lui donne la possibilité. grâce à l'intruction WITH, d'alléger récriture des affectations de chaque champ. Ainsi. pour définir les champs composant r ervegistrement ADRESSE on Pom's no 17 écrira : WITH ADRESSE DO BEGIN RUE, =...', CPOS, =... ', VILLE: ;:.. END, De ce fait. on évitera le préfixage de toutes les valiables champs et donc des erreurs de frappe. malheureusement trop fréquentes! On peut aussi définir des enregistre ments à champs variables. Pour ce faire, on utilisera l'instruction CASE OF; ainsi, la déclaration suivante sera autorisée : GEf'.IREz (FEMIN!N,MA$CUL!N) ; PERSOtrJE=RECORD NOt1 :$TR1NG; AOR:AORESsE: CASE XX: OF GENPE FEHININ:STPING: MASCUL IN:$TRING END END; Cette notion d'enregistrement est grandement liée â celle de fichiers tout en restant indépendante. En effet, pour créer un fichier de person nes. nous aurons recours aux enregistrements pour stocker l'ensemble des informations les concernant. Les pointeurs En premier lieu, il est important de faire la différence entre les variables statiques et dynamiques. Une variable déclarée comme suit : VAR X : TYPE l: es! une variable statique. En effet. lors de la compilation. le compilateur alloue une case mémoire a la variable X de type TYPEI L'adresse de celte case mémoire est fixée Par opposition. l'altribution d'une case mémoire à une variable dynamique se fait lors de son utilisation â l'exécution. Il est â noter que les pointeurs traitent les variables dynamiques. Un pointeur est une variable. il est associé â un type défini préalable ment c'est pourquoi on rencontre des pointeurs de toutes sortes pointeurs d entiers. de caractêres, de booléens. de tableaux. d'enregistrements.. Ainsi. on trouvera aisément dans les déclarations d' un programme TYPE PTR; 'ELEMENT ; ElEi'\ENT=RECORv NO\'! :STR!NG: PRENQM,STR!NG: D'::'TE :STRI JG END ; V'::'R PELT :PTR j ELEMENT est un enregistrement regroupant des informations comme : Nom. Prénom. Date de naissance. PTR définit des pointeurs d ELE MENT et PEL T sont les variables qui vont pointer sur les différents enregis trements. Pour plus de compréhension, prenons un exemple et analysonsle. Notre exemple sera le programme TRI, listé ciaprès. Celuici fait un hi alphabétique sur les noms des différents enregistrements stockés dans le fichier TR11, de type TEXT. Les autres types de fichier seront étudiés ultérieurement. Analyse des procédures Procédure LIRE Le tableau de pointeurs d'element est utile dans la mesure où il nous permettra d'avoir accès aux différents enregistrements stockés. de façon sé quentielle, dans notre fichier TRIl. Celuici n' aura pas sa raison d' être lorsque nous parlerons de listes. Cette procédure est en fait celle qui nous donne la possibilité de saisir les enregistrements afin de remplir les champs composant le type ELE MENT. L'appel de la procédure standard NEW, dont le paramètre est une va, riable pointeur. est très importante. En effet. NEW(VP) entraine la créa tian d' un nouvel élément, permet r allocation mémoire nécessaire â une nouvelle variable et de ranger l'adresse mémoire de l'espace alloué dans la variable VP. Ainsi. pour accé der aux informations de ELEMENT il nous faudra passer par lïntermédiaire de VP Remarque si r enregistrement comporte des champs variables il faudra faire NEW(VP,CL.. CNI: Ci étant les valeurs correspondant aux différents choix d'une structure CASE. ils doivent être écrits dans l'ordre de la déclaration. VP est de type PTR. luimême définissant un pointeur d ELEMENT. ELEMENT étant un enregistrement composé des champs Nom. Prénom et Date Ainsi. afin de définir les dif férents champs considérés on écrira ' VP.NO ou VP.PRENOM ou encore VP date. VP est une variable statique (selon la définitipn donnée plus haut) tandis que VP est dynamique. En effet. c'est le NEW(VP) qui lui permet d'exister. Toutes les autres instructions de cette procédure n'ont nullement besoin d'être détaillées. 13

14 Procédure LECTURE Elle appelle LIRE autant de fois qu'il y li d'éléments à trier et définit le tableau de pointeurs. Le. procédures CLASS et ECHANGE La procédure CLASS effectue un tri BULLE. c'estàdire que l'on considère deux éléments consécutifs du fichier, on les compare et les échange s'il y a lieu. Cette procédure appelle ECHANGE. Le témoin COMPTEUR nous pennel de savoir quand le tri est terminé (il est égal à quand le parcours de la ste li n'a pas entraîné d'échange). PROGRAM TRI TYPE PTR,,' ELEIIENT i <INPUT, OUTPUT) j ELEHENT RECORD NO'1, STRING ; PRENDI1,STRING: DATE,STRI lg END; TA6 RRAy( 1. _ 1 l OF PTR : VAR PT:TAS: VP, PTR : N,U,COMPTEUR TRI I,TEXT; PROCEDURE L I RE ; BEGIN NEW(VP) : WPtTELN( IOH,'); REAOLNCVP',NOHl : :INTEGER: WRITELN(TRII.VP.NOHl : WRtTELN(' PRENOH :'): REAOLN(VP'.PRENOHl: WRITELN (TRI I,VI.PPENOH ): WR I T ELNC DATE DE N.. I SSANC READLN (VP'.DATEl ; WRITELN END: <TRII,VP'.DATEl PROCEDURE LECTURE: BEGIN END: WRITELN ('LA LISTE A TRIER EST FOP N: I TD U DO BEGIN LIRE: PTI 1l 'vp ''' PPOCEt'UPE ECHANGE C I : IrlTEGEPI : BEGIN CI)'1PTEUI,'O: VP,zPTt 1 1 : END: 'TI I l :,.,PTI, I l : PTC I+ll :'VP: COMPTEUR :! PPOCEDUFE C S5: V';',, 1 : IIITEGEP; BEG I N REPE T BEC,IN Procédure IMPRESSION Comme son nom l'indique. elle imprime les résultats trouvés. c'estil!dire, la liste des noms triés. Les listes Une des contraintes du Pascal réside dans la déclaration des tableaux. En effet, il est impossible de définir des tableaux de dimension variable. Ainsi, le plus souvent. on les surdimensionne et la place mémoire disponible se trouve réduite. Il serait donc Intéressant d'exploiter la création dynamique au niveau des éléments d'un tableau. La structure d'un tableau établit une liaison entre celuici et ses éléments par l'intermédiaire des indices. Il faut donc trouver une représentation similaire. Cette représentation est celle des listes. Une liste est une suite d'éléments, créés dynamiquement. et reliés par une structure souple réalisée à l'aide des pointeurs. Chaque élément de la liste se compose d'un minimum de deux infonnations : ses composantes propres. correspondant à l'élément du tableau (entier, réel, enregistrement.) le pointeur vers l'élément suivant de la liste. Le dessin cldessous montre un tableau TAB=ARRAYll..lOJ OF CHAR: dont les éléments sont A. B. C, D. E. E G et sa représentation en liste. Ce schéma. bien que très primaire. met en évidence la structure d'une liste par rappon à celle d'un tableau. E : ', : L, CONPTEUR:'O; FOI 1 :, TO Ul BEGHI li PTl II.NOI't pt[ Ilr. IC! THEN ECHo.NGE (1) ENO ENO,, 1 A 2 B 3 C 4 D 5 E 6 F 7 li B 9 1 Plece mémoire perdue OO Nil Une des grandes différences entre un tableau et une liste réside dans l'accès aux éléments. Lorsqu'il s'agit d'un tableau. il suffit de connaître l'indice qui lui est associé: les éléments d'une liste, quant à eux, sont accessibles par le pointeur pointant sur chacun. Ainsi, pour accéder au 3 élément il nous faut connaître son pointeur. celuici est contenu dans le 2, dont le pointeur est contenu dans le le. De ce fait. le premier élément trouvé nous donnera l'adresse du second. Les éléments d'une liste sont. de part la structure du Pascal. des enregistrements. En effet. ils se composent de deux (ou plus) parties de types différents (dans notre exemple un caractère et un pointeur). et les seules variables.!iutorisant le mélange des types sont les enregistrements. Ainsi, les éléments de la liste représentée cidessus seront déclarés comme suit : TYPE PELT 'ELT ; ELT RECORD CAR :C R; PTC: P5:L T END; Le champ CAR contient le caractère et PTC contient le pointeur vers r élément suivant. luimême de type EL T. Comme nous l'avons précisé plus haut. les éléments d'une liste sont créés de façon dynamique (allocation mémoire au fur et à mesure de r exécution du programme) tandis que le tableau est construit lors de la compilation. Revenons à l'accès auk éléments de la liste. Il a été dit. précédemment. qu'il faut connaître le premier élément de la liste pour accéder aux suivants. De ce fait. un pointeur de début de liste est indispensable; par convention. le pointeur du dernier élément de la liste sera NIL. Lors de Pom's no 17

1 II'fT END; IL CCNPTEURO PROCEDURE v,:;,r BEG I N l, ItfTEGEP;! HRPESS 1 cr.!; WPITELN. TP I I. L.:I LISTE TPIEE E T FOR! ' '' \ TO U 9E IN EIIO Env: VP:,PTI Il: WRlTEL 1 (VI.N(t11 : WRITELN <TRI l,vi.iioh) : WRITELN (VP',PRENO!D : WRITELN,TRi 1.VP.PPENOH 1; WPlTELN (VP'.o.;TE 1: WPITELN ITPI I,\'!O:>. TE,, la création d'une liste le pointeur de tête sera défini el restera inchangé tout au long du traitement tandis le pointeur de fin de liste sera modifié. Un pointeur intermédiaire est nécessaire il! l'insertion de nouveaux éléments, de ce fait le pointeur de fin sera déplacé en conséquence. La structure de liste permet. avec souplesse, d'insérer et de supprimer des éléments. Ecrivons un programme regroupant la crélldon d'une liste, l'insertion et la suppression d'un élément dans celle ci. Ce programme listé aaprès crée une liste d'enregistrements dont les champs sont : un nom (, et un pointeur... Il permet aussi d'insérer un élément ( DEBUT Ou PROGP.,.,NE, grâce la procédure INSERER. La procédure SUPPRIMER supprime un élément de la liste BEGIN PE',IRITE,TPI1,'TP[! ', : WPITELN ('NCf18PE DE NOM!1I,;::OIEUF' _ 1 ): F.E..l.OLN ( U) : LECTUPE : CL..l.SS : WRITELN (TRI I ) : WRJTEUJ CTf:! l J ; IMPI<ESSION: CLOSE < TP I I. LOCI<. l END. Explication du programme Création Cene procédure, comme son nom l'indique, est cene qui pennel de créer une liste. Au début, la liste est vide: ainsi, les pointeurs de début et de fin de liste sont égaux. Puis on arrive dans la boucle WHILE, par la PROGP listemlpf'm ( INPUT, OUTPUTl l END : T'r PE PEL. T_' ELEMENT ; EL.EMENTRECORD NO'I:STPING: PTSU IV: PEL.T END: VAR PTOE9,PTFIN,PTINT, POINT : PELT, C PTOES: POINTEUR DE DESUT DE LISTE.) C PTFIN: POINTEUR DE FHI ('le LISTE ) (. PTlNT : po I NTEUP I NTEF!EO I l pe., (. NECES=:A IRE u TP..:.lTEtlErlT, A.S,C : STRING, X, Y : INTEGER; procedupe CREAT ION: BEG IN NEW PiDE8' : C POUl L.A CREMT1N OU l E=' E'.. E' E IT., PTFIN:pToE8:,. L. ISTE '.' loe ' ='(OlliTEUP C'I; FIN, (. POIt/TEU? DE oeeut DE LI STE, WITEL.N ( ENTRE: LE 1ER JCfI I, PE_oL.N ( C ) :,. L.ECT!.IPE DU WM.,,. PAl COi'NENT I Of J L APpET SE., FEo\ =,_p HlT,.EE C> I. IE ':,;, UIE '.' I:'E.,, ET L.E QHJTE. o OE :in 3E _ N I L ' IJf1 I.E E5It! Er 1 rleh 'C (PTI IT (. CPE T!ON D'ur rjo, EL. EL.E 'E'.T. \ ptint. IOM := C: \ '>'FFEC_T1 I'I (lu C P PTFIN Porn's no 17,pT3UI'): o ltit; liiscn.ec EL.EtlErIT PPECH'Er'IT. ) PTFIN;PTINT, ( POINTEUP DE FIN (lepl. CE PTF IN',pT;UIV, NIL; E (llh 'C' : ( L.ECTUpE DU P'L'C''':'!l1 ELEMENT ) ppocedupe LI RE; BEGIN PTINT :PTOEB: (. CN COl1'1ENCe: A LlFE OEP')IS L.E OEE'UT.) (. CN VA AFFICHEP L.ES ELEMENTS DE LA L I STE.) ENC: (. LE TEST 'PP ET SEP L. ','<=oleup NI L. _1 (. DU PO I NTEUP DE F!N DE L.ISTE 1 WHILE ( PTI it.ptsui'j.> NIL 1 BEGIN WRITELN 'l'tint',nc : E IO : l't I NT WPITEL.N ; PTIt.T.PTSUI (PTINT.NOrP (. NECE s,:.ipe: POUl' DE oe ti IEP EL.EMENT.j poch'upe INSEPEP : SItIC.' ; _ L. :!NTEGEo: Of_'.C :PE:..T: BEGin TlrIT :.PTC'E;:' : ' '!L.:: 'L!',;,t IC> (PTi'I 'Il L' [, ee'; J lj 11 P I H Jle,! THEil ee':.jrl PT_t,C := p!nt: E.r :,..U ORT! DE L_ El IL El.:E L,! E Ol'CLE!L F_I.T TE':TER,. LE PE SULT_T OE L RE( I;PCHE.. OLII, 'LLOC'::;TIO I IE 'O! E POUl LE,.. NOV 'EL EL ;::r1eht ET..:.FFECT.. TlOi'J OU CW'IP NEW (POINT1 : POINT.pTSU P,,=pT'IC.PTSUI' pol t'it. IOtI :', EtID: p'tic.ptsu!,},=point. 15

16 quelle on définit et affecte les champs de chaque enregistrement L'instruction NEW(PTINT), va créer un nouvel élément de type ELE MENT. Ainsi. le premier élément de la liste existe et peul donc être initialisé. Comme nous J'avons vu plus haut, un élément de la liste n'est accessible que par son pointeur, luimême contenu dans le champ poin. teur de r élément précédent. Il est donc indispensable de relier les élé ments de la liste entre eux. Cette liaison est réalisée par lïnstruction : PTFIN '.PTSUIV:=PTINT; Ainsi, on peut déplacer le pointeur de fin de liste et continuer la création des éléments de la liste. La saisie des différents noms des éléments de la liste se terminera par ]' entrée (au clavier) d'une chaîne vide. Lecture Cette procédure n'a nullement besoin d'être commentée. Elle permet l'affichage des éléments de la liste. Insérer Pour insérer un élément dans une liste, il faut déterminer l'endroit de l'insertion. Une insertion au début ou en fin de liste, ne pose pas de problème, il suffit de déplacer les pointeurs de début et de fin de liste. L'insertion en milieu de liste est plus délicate. Dans notre exemple, pour plus de facilité, le programme affiche les éléments existants et vous demande après quel nom vous désirez insérer le nouveau nom. Ainsi, le programme recherche le nom existanl crée un nouvel élément et met à jour les pointeurs. Insertion alphabétique Cette procédure n'est intéressante que si la liste à traiter n'a qu'un seul élément. Ainsi, la liste des noms sera triée par ordre alphabétique. Pour des enregistrements comportants d'autres champs, le tri pourra. bien sor, s'effectuer sur un prénom. une date de naissance. La procédure recherche ]' endroit de l'insertion. crée un nouvel élément, et enfin déplace les pointeurs en conséquence. Supprimer Cette procédure supprime un nom existant et déplace les pointeurs en conséquence. La structure de liste apporte un plus au traitement. quand les éléments de celled doivent être rangés et prélevés dans un ordre bien défini. L'utilisation d'une liste plutôt que d'un lableau se fait en fonction : de la difficulté à connaître la dimension du tableau: des différentes modifications susceptibles d'intervenir, quant au nombre d'éléments du tableau: du nombre de manipulations à effectuer sur les éléments. PROCEOURE SUPPRIMER (A:STRI IG) : VAR L: INTEGER: BEGIN END: PTlNT,PTDEB, L:O: W ILE (LOI) AND (PTINT () l'lill BEGiN END, IF LI IF PTINT'.Na1A THE I L,.. t TEN BEGIN END ELSE BEGIN POINT:.PTI JT: PT!tjT,_PTINT',PTSUIV END, IF PTINT,PTDEB T EN PTDEB,.. PT INT, PTSU ]V ELSE EL SE WRlTELN ('LE NCt1 ',', EXISTE PAS ') PIJINT'.PTSUIV,=PTINT'.PTSUIV DEBUT DU PROGRAMME PRINCIPAL., ( l BEGIN (PE.n l l: L IRE : X,_I : WHILE X_\ END END. BEGIN I.JRITELN (' POUR WRITELN ('\ POUR WR ] T ELN ('2 RIEN REAOLN (y) ; CASE Y OF o : BEG IN, 'NO SUPPRIMER' ) : INSERER ' ); FAIRE ) ; WRITELN ('NOM A SUPPRIMER' ) ; READLN (A) : SUPPRIMER (A) ; LIRE: END : BEGIN WRITEUoI ('NCf1 A INSEPEP ) : READLN (A) ; END: INSEPER (A) ; LIRE: eegin END WRITELN ('VOUS VOULEZ VRAIMENT R I EN FAI RE' ); READLN (Xl PROCEOUPE INSERER (A,e ; STPING) ; VAR L, INTEGEP; BEGI N ENO: (. INITI':>USATiON.) PTiNT :PTDEB : L:O i WHILE (LOI) AND (PTINT <> NIL) BEGIN END; IF PTINT,NClIB THEN L:.. t EL SE PTlNT,PTINT' _PTSUIV (. AU SORT IR DE LA BOUCLE IL FAUT TESTER.) (. LE RESULTAT DE LA RECHERCHE.) (. SI OU! : ALLOCAT ION MEMO IRE POUR LE.) (. NOUVEL ELEMENT ET AFFECTAT ION OU CHAMP.) IF L\ THEN BEGIN 'NO NEW ( POINT) ; POINT,PTSU]') :PT INT. PTSU IV; PO I NT. NOM : 'A : PTINT.PTSU]V:_POINT ELSE WRITEUJ ('LE NCt1 ',B,' EXISTE PAS') Porn's no 17

Animations graphiques Alain Bellegarde L'écran graphique de J'Apple Il per met d'effectuer des animations de bonne qualité grâce à sa définition de 28 par 192 points_ L'écran haute résolution se situe dans la zone mémoire $2<XlO à $3FFF pour la première page el $4 â $5FFF pour la seconde Chacune des 192 lignes de l'écran est constituée de 4 octets consécu tifs, dont 7 bits seulement sont affi chés a J'écran. Le huitième bit (bit de poids fon ou MSB) est utilisé pour la sélection des couleurs. Lorsque ce bit est à 1. la couleur d'un point isolé en colonne paire sera bleue alors qu'un point isolé en colonne impaire appa raîtra orange Lorsque le bu cau leur est à O. la couleur d'un point isolé sera violette pour [es colonnes paires et vene pour les colonnes im paires Les animations réalisées sur r Apple peuvent etre classées en deux gran des catégories : utilisant les vecteurs Celles shapes de l'applesoft ou des procédures similaires. Celles utilisant les blocs dïmage Les vecteurs shapes Dans ce type d'animation. les tracés sur r écran sont effectués par dépla cemen! d un vecteur unitaire allu man!' ou éteignant' un point de récran, c'est A dire mettant à 1 ou â o l'un des 7 bits d un octet de la page graphique Ce type de tracé, défini dans le ma nuel Applesoft. permet de modifier facilement l'échelle et r orientation d'un dessin. Ces modifications sont présentes en Applesoh sous les commandes ROT et 'SCALE. Par contre. l'utilisation en est assez lente puisque, pour traiter un octet de la page graphique. il convient de répéter 7 fois la procédure ' déplace ment, mise â ou à 1 d un octet Les blocs d'image Le principe du bloc image est de sauvegarder les octets constituant un rectangle d'image comprenant le des sin â animer. L'avantage de ce type d animation réside dans sa rapidité. En effet. le traitement est effectué par octet et non par bit. ce qui permet de charger beaucoup plus rapide men! un dessin en un endroit quel conque de la page graphique Par contre. il est difficile. voire im possible, d'effectuer des rotations et des agrandissements du dessin Porn's no 1 7 Un autre inconvénient de l'utilisation des blocs image est lié â l'utilisation de l'octet comme unité de travail Il s'agit des saccades obtenues dans les déplacements horizontaux lorsque l'on utilise tel quel le bloc sauve gardé. Cette saccade provient du fait que les déplacements â droite ou à gauche sont effectués au pas de un octet soit 7 bits ou 7 points de réeran. Un remède possible â cet mconvé nient consiste en l'utilisation d'un programme décalant les bits d un octet, ce qui permet de réduire les déplacem nts à un pas inférieur. Le programme peut être exécuté soit au moment de chaque tracé, soit avant le tracé. les différents blocs modifiés élant à leur tour sauvegar dés en mémoire et utilisés au mo ment convenable Dans le premier cas, le programme de déplacement des bits dans un octet conduit à une augmentation du temps de tracé et annule une partie de r avantage des blocs image Dans le second cas. la rapidité d'exé cution est maintenue, mais il' est né cessaire de disposer d'une place suf fisante en mémoire pour loger les différents blocs modifiés Cette dernière technique. qui porte en anglais le nom de preshilted shapes est employée par le pro gramme Applesolt BLOC BAS, qui assembleur routine la utilise BLOC.OBJ (dont le code source est BLOCTXT. sous Lisa 2 5) Afin d utiliser ce programme. vous devez disposer d un dessin sauvé sous forme de page graphique, et réalisé par HPLOT et consorts. Il s'agit bien là d un dessin standard. et non d'une shape qui serail inexploi table pour BLOC BAS Après avoir effacé la page HGR 1. le cas échéant. et chargé votre dessin de base. vous pourrez définir le pas de déplacement (1 â 6) et le nombre de blocs à inclure dans la séquence de déplacements (1 à 7). La taille du bloc peut l!tre donnée par Joystick ou clavier. en mdiquant simplement le point haut gauche et le point bas droit du cadre dans le quel sera inscrit le motif à déplacer La séquence de déplacements ainsi constituée vous sera ensuite démon trée â l' écran et vous pourrez enfin l enregistrer sur disquette ' L ensemble des blocs composant la séquence est sauvé â partir de ]' adresse $6 selon le schéma sui vant. $6CXX) : hauteur du bloc (nombre de lignes) largeur du bloc (en octets. soit 7 points) $6CXl2 pointeurs du début du premier bloc $63 (adresse basse et adresse haute) $64 pointeurs du début du se cond bloc $65 (adresse basse et adresse haute) $61 $6E pointeurs du début du 7ème bloc $6F $61 et suivants ' octets du bloc image Utilisation séquence de la L'utilisation de la séquence créée par le programme BLOC.BAS est réali sée par nntermédiaire du pro gramme TRACEOBJ, qui est en fait une version améliorée d une partie du programme BLOC OBJ. Les paramètres nécessaires à l'exécu tion du tracé sont le numéro du bloc utilisé qui doit être stocké en $FE (254) les coordonnées du point haut et gauche du bloc sous la forme du numéro de ligne stocké en $FC (252 si on utilise une valeur telle que la somme numéro de ligne et hauteur du dessin soit su périeure â 192, le dessin sera coupé dans le bas) et te numéro de la colonne gauche en octet ( â 39) stocké en $FD (253 si on utilise une valeur inférieure â ou telle que la colonne indiquée plus la largeur du dessin soit supérieure à 4, le dessin sera coupe d gau che ou â droite)., Tracé avec Joystlck Le programme TRACE.BAS utilise la routine précédente pour une anima tion de la séquence ROBOT.BLC. donnée à titre d exemple. Pour l'exé cuter. il suffit de taper RUN TRACE BAS et d'entrer les coordon nées de départ de l'animation en ré ponse aux questions du programme. 17

BLOC BAS 1 L1EH : 36864 2 REM A BELLEGAROE 8/1984 3 POKE 232,239: POKE 233,64: POKE 23,3 2: HCOLOR= 1 : SCALE= I : ROT= : FR INT CHR (4)iBLOAD BLOC.8J* 4 REM IERE PHASE O ONERR GOTO 6 6 HOME : TEXT : VTAB 1 : HTA8 13: INVERS E : PRINT tere PHASE : NORMAL 7 VTAB 5: PRINT VOUS POUVEZ : 8 VTAB 8: PRINT 1 CHARGER UN OESS! N 9 VTAB 1: PRINT 2 CHARGER UN BLOC 1 VTA8 12: PRINT 3 PASSER A LA PH ASE SUIVANTE 11 VTAB 14: PRINT 4 AFFI CHER LA PA GE GRAPH IGlUE 12 VTAB 16: PRINT S EFFACER LA PAG E GRAPH IQUE 13 VTAB 18: PRINT * a SORTI R DU PROG RAM'1E' 14 VTAB 21 : INPUT VQTRE CHOIX : j ex I a IF C% ( a OR ex ) 5 THEN VTAB 23: P RINT : GOTO 14 16 IF ex = THEN HOME : END 17 ON C/. GOTO 18,25,47,43,44 18 ONERR GOTO 24 19 HOME : VTAB 1 : HTAB 8: PRINT CHARGE MENT D'UN DESSIN : NORMAL : VTAB 5 '2 INPUT NO'1 DU DESSIN A CHARGER 'c' D E LE CATALOGUE ET 'RETURN' A NNULE LA PROCEDURE : jt 21 IF T = C THEN PRINT CHR$ (4) jc ATALOG : PRINT : GOTO 2 22 IF T$ =. THEN 6 23 PRINT CHR (4) jbload jt ;,A 2 : GOTO 5 24 PRINT : INPUT ERREUR TAPER 'RETURN, POUR CONT INUER ;T : PRINT : GOT o 2 25 ONERR GOTO 42 26 HO'1E : VTAB 1 : HTAB 9: PRINT CHARG EMENT D'UN BLOC : VTAB 5 27 INPUT NOM DE LA SEQUENCE A CHARGER 'c' DONNE LE CATALOGUE ET 'RETURN, ANNULE LA PROCEDURE : jt '29 IF T = C THEN PRINT CHR$ (4) jc ATALOG : PRINT : GOTO 27 29 IF T =. THEN 6 3 PRINT CHR (4) j BLDAD jt ;,A 6 31 ONERR GOTO 32 3'2 PRINT INPUT NUMERO DU BLOC A AFF ICHER <1/7> : :NUM% 33 PRINT : PRINT COORD EES D'AFFICH AGE : HTAB 12: PRINT (POINT HAUT GAUCHE> 34 PRINT : INPUT X (HAUTGAUCHE) <,2 79> : jx% 35 IF X < OR X > 279 THEN 34 36 INPUT y (HAlfTGAUCHE) <,191> : jy y. 37 IF Y < a OR y ) 191 THEN 36 38 POKE 25,16: POKE 251,96: POKE 252,Y %: POKE 253, INT (X% / 7) : POKE 25 4,NLf1/. 39 POKE 1634,: POKE 163,: PO KE 16297, 4 CALL 16559 41 VTAB 21 : INPUT TAPER 'RETURN' POUR CONTINUER jt$ : GOTO 5 42 PRINT : INPUT ERREUR TAPER 'RETURN, POUR CONTINUER ;T : PRINT : GOT o 27 43 POKE 1634,: POKE 1632,: PO KE 16297,: POKE 163,: GE T T$ : GOTO 6 44 HO'1E : VTAB 5: INPUT VOULEZVOUS RE ELLEHENT EFFACER LA PAGE GRAPH IOU E <O/N) jt 45 IF T$ < ) a THEN 6 46 HGR : TEXT : GOTO 6 47 REM 2EME PHASE 48 ONERR GOTO 49 49 HO'1E : VTAB 1 : HTAB 13: INVERSE : PR INT 2EME PHASE : NORMAL 5 VTAB 5: PRINT vous POWEZ : 51 VTAB 8: PRINT 1 DEFINIR LE PAS ET LE NCJ1BRE DE BLOCS DE LA SEQUENCE 5'2 VTAB Il : PRINT 2 RETOURNER A LA IERE PHASE 53 VTAB 14: PRINT 3 PASSER A LA 3E ME PHASE 54 VTAB 17: PRINT SORTIR DU PROG RAII1E 55 VTAB 2 : INPUT VOTRE CHOIX : jc% 56 IF C% < OR ex > 3 THEN VTAB 2 : P RINT : GOTO 55 57 IF C% THEN HOME : END 58 ON C% GOTO 59,5,75 59 ONERR GOTO 6 6 HCJ1E : VTAB 1 : HTAB 8: INVERSE : PRI NT OMAL DEFINITION DE LA SEQUENCe : NO 61 VTAB 4: PRINT PAS DE LA SEQUENCE 62 VTAB 6: PRINT LE PAS DE LA SEQUENCE EST EGAL AU DEPLACEMENT ENT RE LES BLOCS 63 VTAB 9: PRINT UN PAS = 1 EST LE PLU S FIN MAIS LA COULEUR DU DESS IN EST MODIFIEE A CHAQUE TRACE (SA UF SI LE DESSIN EST NOI R/BLANC)UN PAS = 2 PERMET DE CONSERVER LES COULEURS 64 VTAB 15: INPUT PAS CHOISI <1/6> : jpas% 6 IF PAS% < 1 OR PAS% > 6 THEN VTAB 5: PRINT : GOTO 64 66 ONERR GOTO 67 67 VTAB 18: PRINT NOMBRE DE BLOCS E LA SEQUENCE 68 VTA8 2 : PRINT UN NOMBRE = 7 PERMET DE DEF INIR TOUTE ES DE DESSIW les POSSIBILIT 69 VTAB 23: INPUT NOMBRE DE BLOCS <1/7 > :. ; NOMBRE% 7 IF NOMBRE% < 1 OR NQMBRE% > 7 THEN VTAB 23: PRINT : GOTO 69 71 HOME : VTAB 7: PRINT CES PARAMETRES NECESSITENT DE DISPOSER DE i 7 * INT (.9 (PAS% * NOMBRE%) / 7) j POINTS GRAPHIQUES A LA DROITE DU 72 VTAB 9: PRINT DESSIN POUR PERMETTRE D'EFFECTUER LES DEPLACEMENTS 73 VTAB 12: PRINT CETTE DISPOSITION SE RA VER IFIEE PAR LE PROGRAMME DANS LA PHASE SUIVANTE TAPER SU R UNE TOUCHE POUR CONTINUER i : GE, 18 Porn's no 17

T T'f : GOTO 49 74 REM 3EHE PHASE 75 ONERR GOTO 76 76 HOME : VTAS 1 : HTAB 13: INVERSE PR INT 3EHE PHASE : NORMAL 77 VTAB 5: PRINT VOUS POUVEZ : 78 VTAB 8: PR!NT 1 DEF INIR LE 8LOC DE REFERENCE DE LA SEQUEN CE AVEC LES PADDLES 79 VTAB 1 1 : PRINT 2 DEFINI R LE 8LD C DE REFERENCE DE LA SEQUENCE AVEC LE CLAV IER TOUCHES l, J,K,M ET 'RETURN' 8 VTAB 15: PRINT 3 RETOURNER A LA 2EHE PHASE 81 VTAB lb: PRINT SORTI R DU PROG RAMME 82 VTAB 22: INPUT VOTRE CHOIX : B3 B4 BOO B6 B7 BBO B9 9 91 92 93 94 95 96 97 98 99 1 11 115 12 13 14 15 16 17 18 19 Il j C/. IF CX < OR C/. > 3 THEN VTAB 21 : P RINT : GOTO 82 IF C/. = THEN HOME : END ON CX GOTO 86,93, 47 POKE 1634,: PDKE KE 16297,: POKE OLOR= 3 GOSUB 156 XI X:YI = y 1632, : PO 163,: HC IF PEEK ( 16287) ) 127 THEN 89 GOSU8 156 X2 GOTO 99 X:Y2 = y POKE 163 4,: POKE KE 16297,: POKE OLOR= 3 GOSUS 161 XI = X:YI = V GOSUB 161 X2 :: X:V2 = y 1632,: PO 163,: HC XQRAW 1 AT XI,YI : XDRAW J AT X2,Y2 IF XI > X2 THEN TEMP = XI :Xl = X2:X2 TEMP IF YI ) Y2 THEN TEHP :: YI :YI = Y2:Y 2 : TEMP XDRAW 1 AT XI,YI : XORAW 1 AT X2,Y2 X3 = XI :Y3 = YI :X4 K X2:Y4 Y2 XI = XI I :YI = YI 5:Y2 = Y2 1 POKE 238, INT (.9 t (PASX * NOM8REX ) / 7) POKE 25,16: POKE 25 1,96: POKE 252, YI t 1: POKE 253,(XI + 1) / 7: POK E 254,1 POKE 24576,Y2 YI 1: POKE 24577, INT «X2 XI) / 7) CALL 1651 IF PEEK (238) < ) THEN POKE 163 1,: PRINT ATTENT ION, LA PL ACE PREVUE A DROITE DU DESSIN EST INSUFFI SANTE POUR EFFECTUER LES DEPLACEMENTS. PRESSER UNE TOUCHE POUR CONTINUER ô : GET T$ HCOLOR= 3: HPLOT Xl,YI TO XI,Y2 TD X2,Y2 TO X2,YI TO XI,YI POKE 163 1,: HOME : VTAB 21 : IN PUT ESTCE QUE LE BLOC CONV IENT < O/N>? ;T$ HCOLOR= : HPLOT XI,YI TO X2,Y2 TO X2,YI TO XI,YI : o X3,Y3: DRAW 1 AT X4,Y4 : IF T$ N THEN TEXT 1 1 1 IF T$ < > THEN 18 112 REM 4EtIE PHASE XI,Y2 TO DRAW 1 AT HCOLOR= 3 ; GOTO 75 1 1 3 114 1 1 5 116 Il 7 118 1 1 9 12 121 122 123 124 t2 126 127 128 129 13 131 132 133 134 13 136 137 138 139 14 141 142 143 ONERR GOTO 114 HOME TEXT : VTA8 1 : HTA8 13: INVE RSE PRINT 4EHE PHASE : NORMAL VTAB 5: PRINT VOUS POUVEZ : VTAB 8: PRINT 1 CREER LA SE QUE NCE DEFINIE VTAB Il: PRINT 2 RETOURNER A L A 3EME PHASE VTAB 14: PRINT SORTIR DU PRO GRAMME VTAB 18: INPUT VOTRE CHOIX : je% IF C% < OR C% > 2 THEN VTAB 15: PRINT : GOTO 1 1 9 IF CY. = THEN HOME : END ON CY. GOTO 123,75 POKE 163 4,: POKE 1632,: P OKE 163,: POKE 16297, NOMBRE : NOMBREY. :PAS : PAS% IF NOMBRE = 1 THEN 134 FOR 1 = 2 TO NOMBRE CALL 16384 FOR J = 1 TO PAS CALL 1645 NEXT J POKE 163 1,: HOME : VTAB 21 : PR INT BLOC NUMERO jl; ON CONTINUE <O/N) ; : INPUT TS IF T = N THEN 113 NEXT 1 CALL 16384 REM :;EME PHASE ONERR GOTO 137 HOME : TEXT : VTAB 1 : HTAB 13: INVE RSE : PRINT SEME PHASE : NORMAL VTAB 5: PRINT VOUS POUVEZ : VTAB 8: PRINT 1 SAUVER LA SEQU ENCE CREEE VTA8 Il: PRINT 2 RETOURNER A l A 4EME PHASE VTA8 14: PRINT 3 RETOURNER A l A IERE PHASE VTA8 17: PRINT SORTIR DU PRO GRAt1'1E VTA8 21 : INPUT VOTRE CHOIX ;CX 144 IF CY. ( OR CY. ) 3 THEN VTA8 21 145 146 147 14BO PRINT : GOTO 143 IF CX = THEN HOME : END ON CY. GOTO 148,113,5 ONERR GOTO 155 HOME : VTAB 1 : HTAB 8: PRINT SAUVE GARDE D'UNE SEQUENCE : VTAB 5 149 INPUT NOM DE LA SEQUENCE A SAUVER 'C' DONNE LE CATALOGUE ET 'RETUR N' ANNULE LA PROCEDURE : ;Ts 15 IF T. = C THEN PRINT CHR$ (4) ; CATALOG : PRINT : GOTO 149 151 IF T$ =. THEN 136 152 FIN = 256 PEEK (251) + PEEK (25 ) : LO = FIN 24384 153 PRINT CHR$ (4);BSAVE *;T$ ;,A 6 154 15:5 156 157 158 159 O,L jlo GOTO 136 PRINT : INPUT ERREUR TAPER 'RETUR N' POUR CONTINUER ;T$ : PRINT : GO TO 149 REM CROIX GRAPHIQUE X z 7 INT (4 * ( POL () / 255' ) : IF X = 28 THEN X z 279 Y = INT (191., ( POL (1) / 255» XDRAW 1 AT X,Y: IF PEEK ( 16297) ( 129 THEN XORAW 1 AT X, Y: GOTO 157 Pom's no 17 19

16 RETURN 161 X g 14 :Y 9 162 POKE 16368, 163 XORAW 1 AT X,Y 164 XORAW 1 AT X,Y: IF PEEK ( 16384) ( 141 THEN 163 165 IF PEEK ( 16384) 2 1 THEN Y : y 1 : IF Y ( THEN Y 166 IF PEEK ( 16384) 25 THEN Y Y. 1 : IF y ) 191 THEN Y 191 167 IF PEEK ( 16384) = 22 THEN X : X 7: IF X ( THEN X = 168 1 F PEEK ( 16384) :; 23 THEN X X 7: IF X > 279 THEN X = 279 169 IF PEEK ( 16384) 14! THEN XOR AW 1 AT X,Y: RETURN 17 GOTO J 62 lloao TRACE.BAS 1 REM TRACE.BAS 2 REM A. BEllEGARDE 8/84 3 HOME : TEXT : VTAB 1 : HTAB B: INVERSE : PRINT ANIMATION AVEC JOYSTI CK : NORMAL 7 REM CHARGEMENT DE LA SEQUENCE 8 PRINT CHRt; (4) ;BlOAD ROBOT.BlC 9 PRINT CHR$ (4) ;BlOAD TRACE.OBJ la VTAB 8: INPUT COLONNE DE DEPART: jc Dl:T COL 2 VTAB 12: INPUT lic E DE DEPART LIG 3 VTAB 16: INPUT BLOC DE DEPART 4 BLO HGR : POKE 1632, sa POKE 52,lIG: POKE 253,T: POKE 254.Bl o 6 CAll 7936 7 X POL (O) :Y POL (1) 8 IF X > 8 AND X ( 16 THEN 15 9 IF X > 159 THEN 12 1 BLO _ BlO 1 : IF BlO < 1 THEN COL = 11 GOTO 13 COL 2:BLO = 7:T = COL 12 BlO BlO 1 : IF BLQ > 7 THEN COL = COL. 2:BlO = I :T = COL 13 1 F COL > 1 28 THEN COL 128 14 IF COL < a THEN T = 256 + COL 15 IF Y > 8 AND Y < 16 THEN 2 16 IF Y > 159 THEN 19 17 L1G L1G 2: IF L1G < THEN L1G a 18 GOT :5 19 llg = llo 2: IF lig ) 255 THEN LIG = 255 2 GOTO 5..,.,. 1 TTL BLOC.TXT 2 3 **.* ** *.** *********** 4 S A. BELLEGAROE 8/84 6 7.* ** **** * *.********* 8 ORG 4 la HBASl EPZ 26 II HBASH EPZ <27 12 TEMP! EPZ t;eb ;VARIAB LE TEMPORAl RE 13 TEMP2 EPZ t;ec 14 TErlP3 EPZ t;ed 1 S TEMP4 EPZ t;ee 16 LSTOCK EPZ t;fa jadress E BASSE DE STOCKAGE DU BLOC 17 HSTOCK EPZ t;fb jadress E HAUTE DE STOCKAGE DU BLOC 18 llghaut EPZ t;fc jllgne HAUTE DU DESSIN 1. COLGAU EPZ t;fd jcolqt..i\l E GAUCHE DU DESSIN 2 NLNSHI='! EPZ t;fe jnlnero DU BLOC UT I LI SE 21 HAUT Eau 1.6 j Ht'!IUTEU R DU BLOC 22 LARGE EOU t;61 ;largeu R DU BLOC 23 HPOSN EDU t;f41 1 2' 25 $AWEGARDE DES OCTETS DU BLOC lmag 26 E 27 LDA NUI'1SHA 28 ASL 2. TAX 3 LDA lstock 31 HAUT,X 32 INX 33 34 36 37 39 3. 4 loop! 41 42 43 44 4S 46 47 48 loop2 4. sa 51 S2 53 S4 SUITE SS S6 57 58 S. 6 61 ROl DU 62 63 64 65 66 67 loop5 68 6. 7 71 72 73 LDA HSTOCK UT,X INC NLNSHA LOA HAUT TEMP3 LDA L1G1 faut TEMP2 LDA TEMP2 LOX LDY '' #'5 JSR HPOSN LDY COlGAU LDX LDA M$OO large TEMP! LDA < HBASL>,Y INY ( lstock,xl INC lstock 8NE SUITE INC HSTOCK DEC TEMP! 8NE loop2 INC TEMP2 DEC TEMP3 SNE loopi RTS BLOC IMAGE LDA HAUT TEMP3 LDA LI GIfAUT TEMP;? LDA TEMP2 LDX LDY Mt;OO M$OO JSR HPO SN LDX large LaY COLGAU CLC 2 Pom's no 17