Skip to main content

magazine poms06

  • PublicationApple Periodicals
  • Pages68
  • Sourcemagazine_poms06.pdf
← Magazines magazine poms06
/ 68
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
Text content (OCR)
0, My's 4 NUMERO 6 DECEMBRE 1982 35 F | ) 4 fox intl Mieux qu’un long rapport montrez vos courbes C'est un fait, une courbe ou un diagramme donnent — de courhes isométriques instantanément les informations essentielles dont vous La définition est de 200 points par cm. avez besoin, sans dépenser de longues heures a dépouiller La table tragante STROBE est interfagable aux vos «listings». microcalculateurs les plus diffusés : Maintenant, la table tragante STROBE M 100 est — Apple Il, ili ™ = — CBM/PET ™ disponible avec de nombreux logiciels, utilisable — OSBORNE, ™ — XEROX 820 ™ directement sur votre microcalculateur a un prix compeétitif. Les logiciels tournis par STROBE permettent Ic tracé et la modification des courbes sans connaissance approfondie de |'informatique, en utilisant toute la puissance du langage conversationnel. Les informations peuvent tre représentées sur papier format standard et sur transparant utilisable en Strobe Inc. 28, rue de Belle Vue ROX 7, 1050 Bruxelles Belgique Tél.. (32) (2) 649-5663 nements et démonstrations électronique rétroprojection, sous forme : 9, rue Noblet, — Whistogramme, 92500 Rueil-Malmaison — de courbes, = Tel.: 749.70.44. LA TABLE TRACANTE STROBE Voir c’est croire Teen soot ———— Editions MEV 49 rue Lamartine 78000 Versailles Directeur de la publication Hervé Thiriez. Imprimene Sim, 75011 Pans. Imprimé en France. Depot legal : 4¢ trimestre 1982, Dat Annonceurs BFL. 4¢ couv. BLP. 42 C.X. MULTIGESTION 18 ANDRE F. FINOT 61 JCR 3* couv. LANACELLE 58 LOGMA 57 MICROGES 4 MICRO INFORMATIQUE SERVICE 4 LORDINATEUR INDIVIDUEL. 54 PSI. 19, 25, 63 STROBE 2° couv. poms n°6 Sommaire Editorial par Hervé Thiriez 5 Transfert d’Applesoft vers EXEC par Jacques Duma 6 Logiciel graphique en Pascal par Michel Crimont 7 Notions de base : routine d’INPUT généralisé par Gérard Michel 19 Ergonomie des programmes par Guy Mathieu 23 Un programme de HELLO complet par Thierry Le Tallec et Jacques Tran-Van 27 Un analyseur de syntaxe par Olivier Herz 35 Tortue Ampersand par Jacques Duma 43 Le loto, c’est facile par Philippe Fabert 51 Tableaux de taille déclarée en Pascal par Régis Lardennois 55 Courrier des clubs 58 The Last One 4 lessai par André Babeanu 59 C.O.R.P. a Pessai par André Babeanu 60 Erratum . par Hervé Thiriez 62 Micro-informations 65 Courrier des lecteurs 66 Trucs et astuces 15-33 i ee xe SEP. Marketing ¢ La division de la longueur des program- mes par 20. * La possibillté réelle de dessiner ses mas- ques de saisie ou d’impression. Une indépendance totale de la périphérie choisie par rapport au systéme. * L'intégralité du systéme contenu sur une.carte mémoire de 20 K. « Une gestion de mémoire de 140 K a 120 mégas. * Des utilitaires déterminants -un générateur de programmes de ges- tion de fichiers permettant méme le séquentiel indexé multiclé - un générateur d’écrans. Carte MEM/DOS 6502. LE SYSTEME D’EXPLOITATION DU 6502 - MONOPOSTE/MULTIPOSTE * CALL FN, une nouvelle commande basic, trés puissante, intégrée au systéme permettant l'appel des sous-programmes par noms avec passage de paramétres et variables locales. Une version multiposte assurant la mise en commun totale des ressources sans conflit et l'autonomie des postes intelligents disposant de leur propre unité centrale. *Des programmes compatibles APPLE ][ et APPLE Jffautomatiquement transférables sur COMMODORE 8096. e Et pour demain, des logiciels développés aujourd’hui directement compatibles avec le réseau local memnet. SSS Informatique e service 3, rue Meyerbeer - 06000 NICE - Télex 461 916 F D.S.A. INFORMATIQUE MICRO ALPHA SOFT SEEMI 5, bd Dubouchage 06000 NICE Tél. (93) 85.15.96 25200 MONTBELIARD: Tél. (81) 97.16.46 44401 REZE CEDEX Tél. (40) 75.52.80 Liste de nos revendeurs page 218 11, impasse du Lacquet 61, rue Ch. Riviére - B.P. 0701 22, rue des 3 Pierres GB C.LC.C. BENELUX MICROMEGAS Grove house MEGAVOLT S.A. the bordage Rue de Bleurmont 69007 LYON St Peter Port 328 Tél. (7) 861.19.52 GUERNSEY —_B 4920 EMBOURG (0481) 20155 Editorial Le numéro 6 de Pom’s représente un grand changement : tout d’abord, nous avons modifié la couverture et la présentation, comme vous avez pu le remarquer immédiatement. Cela nous permet de vous donner, duns le méme format, l’€quivalent de quinze pages de plus ; en effet, on peut mettre 50 % de texte en plus dans une page composée. Nous avons aussi gagné une quinzaine de pages en mettant sur deux colonnes les listes en assembleur des programmes HELLO et TORTUE&, avec des caractéres compressés. Dites-nous si vous préférez avoir ainsi plus de matiére, ou si vous trouvez que la lisibilité en souffre trop. Enfin, le tirage de Pom’s passe 4 9 000 exemplaires. Nous avons tenu compte de la remarque de plusieurs lecteurs au Sicob, se plaignant du | niveau trop élevé des articles : un effort particulier a été réalisé quant 4 la réalisation d’articles pédagogiques. Kemarquons en outre que, méme si un article présentant un programme en assernbleur peut paraitre trop compliqué 4 lire, cela ne vous empéche pas d'utiliser ce programme a partir de la disquette (le mode d'emploi est fourni sur le programme MENU de chaque disquette). Signalons enfin que le Recueil N° 1 de Pom’s sera disponible dés le 27 décembre ; ce recueil | regroupe, en prés de 200 pages, la plupart des articles des quatre premiers numéros de Pom’s ; ensemble des programmes est fourni sur trois disquelles. Cet alburn code 120 F seul, et 270 F avec ses 3 disquettes d’accompagnement, port compris. Nous sommes maintenant en rupture de stock des numéros 1 G 3 : seuls les numéros 4, 5 et 6 peuvent donc étre commandés séparément (ou avec leurs disquettes). Rappelons aussi qu'il est toujours possible de commander des disquettes séparément : 50 F par disquette d’accompagnement de Pom’s, 75 F pour la disquette d’accompagnement du livre « Visicalc sur Apple» (spécifier dans ce dernier cas sil s‘agit de DOS 3.2, DOS 3.3 ou Apple Ill). Enfin pour ceux d’entre vous qui souhaitent mettre de Ia couleur dans leur vie, nous proposons aussi le T-shirt avec la pomme en six couleurs (tailles 36-38, 38-40 et 40-42) 4 50 I. Passons maintenant au programme de cé numéro. Nous vous offrons une course de tortues, entre celle de Michel Crimont en Pascal, et celle de Jacques Duma en assembleur. Olivier Herz vous apporte un nouveau chef-d’ceuure avec l'analyseur de syntaxe, qui vous permettra de tester tout un programme BASIC, méme dans ses corridors peu fréquentés. Thierry le Tallec et Jacques Tran-Van vous donnent enfin un programme de HELLO trés performant que vous pourrez mettre sur toutes vos disquettes. Gérard Michel vous offre un programme d'INPUT généralisé, avec un sous-programme en assembleur commenté de fagon trés détaillée. C'est particuliérement intéressant comme initiation & Tassembleur. Remarquons aussi, au niveau pédagogique, une nouvelle contribution de Guy Mathieu, relative 4 'ergonomie des programmes. Nous avons un banc d’essai, réalisé par André Babeanu, de « The Last One» et de C.O.R.P., des programmes qui écrivent vos programmes pour vous. Enfin, divers petits programmes se préparent G enrichir votre programmathéque et vos longues soirées d’hiver. Hervé Thiriez Ont collaboré 4 ce numéro : André Babeanu — Michel Crimont — Jacques Duma — Philippe Fabert — Olivier Herz — Régis | ardennois — Thierry Le Tallec — Guy Mathieu — Gérard Michel — Hervé Thiriez — Jacques Tran-Van. Rédacteur : Olivier Herz — Dessins : Laurent Bidot et Bertrand Delestrée. Directeur de la publication — rédacteur en chef : Hervé Thiriez —_ Siége social et abonnements : Editions MEV — 49, rue Lamartine — 78000 Versailles — Rédaction : 59, bd de Glatigny — 78000 Versailles — Tél, (3) 918.13.07 — Régie publicitaire : Force 7 — 41, rue de la Grange-aux-Belles — 75483 Paris Cedex 10 — Tél. (1) 238.66.10 — Diffusion auprés des boutiques informatiques et librairies : Editions du PSI__ 41.51, rue Jacquard — B.P. 86 — 77400 Lagny-sur-Marne — Tél. (6) 007.59.31. Composition-Impression : SIM — 52, rue Servan — 75011 Paris — Tél. (1) 357.51.20. Pom's n°6 5 Transfert d’Applesoft vers EXEC Jacques Duma Ce petit programme transforme tout ou partie d'un programme Applesoft en fichier de type TEXT dont I'EXECution charge en mémoire la partie de pro- gramme en question. De nombreux programmes ont été publiés a ce sujet, mais la particularité de celui ci tient 4 sa concision et 4 son automatisme com- plet. Le programme doit étre situé sur une disquette non protégée a lécriture, car il crée (et efface a la fin) deux fichiers EXEC qui s'appellent l'un T'autre : 10 GOSUB 1000:TS = "CAPTURE D’UN PROGRA MME APPLESOFT": GOSUB 2000:TS = GOSUB 2000: PRINT STR ( PEEK (43624)) 20 T® = "CREATION D’UN FICHIER EXE! 15 CDs "Dp" + OSUB 2000:T$ = " K*P#T1 et K*P#T2. De plus, le drive par défaut doit étre celui of est situé CAPTURE (il ne faut par exemple pas utiliser une séquence telle que LOAD CAPTURE, D1 suivi de CATALOGD2 et RUN). Quand on le lance, CAPTURE demande le nom du programme Applesoft @ capturer, le numéro du drive oi il se situe et lidentification du bloc de lignes a capturer : il demande ensuite le nom du fichier EXEC a créer et le numéro du drive of il faudra le 60 PRINT = —-": GOSUB 2000: PRINT : > PRINT = PRINT 30 TS = "NOM DU PROGRAMME A CAPTURER": G INPUT N$! PRIN THEN TEXT ? HOME 100 Ds = GSUB 2000: PRINT : T 3 IF N¢ = + PRINT "AU REVOIR. "+ END mémoriser. Il ajoute le préfixe [X.] ace nom; si [utilisateur a appuyé sur RETURN sans donner de nom, le nom sera [X,] suivi du nom du programme Applesoft. Tout le reste du travail s'effectue de fagon entigrement automatique. Le lecteur intéressé par l'analyse de fagon dont tout cela se fait pourra f un MONCIO avant de lancer C: TURE, ou bien tout simplement ét la conception de ce programme. QOi PRINT :T$ = "LIGNES " + LIS? GOSUB 2001 + ND& + " CONVERTI SUR DRIVE #" + XD$ + " EN T$ = X$: GOSUB 2000 PRINT =! PRINT * PRINT = INPU T “EST-CE CORRECT ? "sR: IF R® ¢ "OUI" GOTO 10 80 GOSUB 1000: VTAB 11# FLASH *T$ = " U N PEU DE PATIENCE S.V.P. "i GOSUB 2000: NORMAL CHRS (4) 26% = EN"SWR& = "WRITE" DLS = "DELE PRINT ?1$ = "DRIVE #© GOSUB 2000: PRINT CHRS (34) 70P$ = XS = "EXEC™IKL INPUT "SUR GUEL DRIVE #";ND$:ND = V AL (NDS): IF ND ¢ > 1 AND ND ¢ ) 2 THEN PRINT CHRS (7);+: GOTO SZ INPUT "LIGNES (DEBUT-FIN) ? “sLI$: 1 F LIS = "" THEN LI$ = "i-635999": 6BOTO 40 VAL (LI): IF LI ¢ 1 ORLI > 63 999 OR LI ¢ > INT (LI) GOTO 39 tr-= IF LIS = STR (LI) OR LI$ = LY) @ %=" COTO) 40 IF MIDS (LIS, LEN ( STR® (L1)) + 1, 1) € 3 2=" GTS: So VAL ( MIDS (LI$, LEN ( STR® (LI >) + 2))8 IF LJ ¢( LI OR LJ > 6399 9 ORiT ¢ > INT (LJ) GOTO 39 GOTO 40 PRINT CHRS (7);: GOTO 33 PRINT tT# = "NOM DU FICHIER EXEC": G OSUB 2000: PRINT i INPUT X$? PRIN T 2 IF XS = "" THEN XS = "XL" +N $: GOTO 45 XS a OX He XS INPUT "SUR QUEL DRIVE #"3XD@!XD = V AL (XD$)! IF XDS = "" THEN XD = N D:XD$ = STRS (XD): GOTO 50 IF XD ¢ > 1 AND XD ¢ ) 2 THEN PRI NT CHRS (7)3% GOTO 45 GOSUB 1000: VTAB 9:T$ = N$: GOSUB 20 STRS ( LI = “KEPHT LY EKZS "PRINT" + GS + 3 ZEROS = + CHS + GS + OPS + KS + 0B" es NDS eae + CHS + GS + WRS + X$ + GS + "FPOKESS, SStLIS T" + LIS + "s" + CHS + GS + CLS + G$ + "2" + CHS + GS + EXS + K2K + CD$ + GS + "ZEND" PRINT D$OP$KiSCD$: PRINT DSWRSK1$! PRINT "LOAD"N$", D"ND#: PRINT ZERO $i PRINT "RUN"? PRINT DSCLS 300 PRINT DSOP$K2$CD$: PRINT DSWREKZ$: PRINT "LOADCAPTURE": PRINT "RUNSO Oo": PRINT D$CL% 500 PRINT DSEX$Ki1$CD$: END 900 PRINT = PRINT CHR® (4) "DELETEK*P#T 1": PRINT CHRS (4)"DELETEK*P#T2" * GOTO 10 999 END 1000 TEXT + HOME : COLOR= 10: VLIN 0,46 AT OF VLIN 0,46 AT 39? HLIN 0,39 AT 0: HLIN 0,39 AT 46: VTAB S! H TAB St POKE 33,36: POKE 32,2: POK — 34,2: POKE 35,22: HOME = RETURN “KeP#T2" 2 CHS = CHR# (4) + GS + 2000 HTAB 20 — RETURN LEN (TS) / 2 PRINT Tt Logiciel graphique en Pascal Généralités Dans le précédent numéro de Pom's, nous avons vu comment créer des des- sins sur une matrice 15° 15 en graphi- que H.R. et conserver ceux-ci dans un fichier disque. Aujourd’hui, nous allons créer un langage de programmation « graphique interactif », langage per- mettant de créer, lister des program- mes graphiques et bien entendu les exécuter et les conserver Dans ce présent article, nous appelle- rons texte la chaine de caractéres représentant le programme, dessin les dessins H.R. 15°15 et planche la page graphique complete. Chaque texte représente une figure graphique plus ou moins complexe et porte un nom donné au moment de sa rédaction et nécessaire ensuite pour lis- ter ou exécuter ce texte. Le texte lui- méme est une chaine de caractéres (80 caractéres maximum) ; un fichier per- met de ranger 15 chaines de ce type, donc 15 programmes différents qui pourront s'appeler les uns les autres ; par ailleurs, il sera toujours possible, lors de l'exécution d’un dessin, de char- ger un nouveau fichier de 15 textes. Syntaxe du programme File est la suivante : [instruction], [instruction], [instruction]. Chaque instruction est séparée de la suivante par une virgule, le texte devant se terminer par un point. Noter que lors de la rédaction du texte, un retour chariot peut étre inclus aprés une virqule pour faciliter |’écriture et la lec- ture en 40 colonnes. Les instructions comportent une lettre ou un signe décrivant la fonction a réaliser, éven- tuellement un signe + ou —, puis un chiffre de 0 4 255 ou une chaine de caractéres, Les instructions sont : D+ : crayon a blanc (nécessaire pour dessiner). D—: pas de crayon (déplacement sans €criture). avance le crayon de n. recule le crayon de n. ‘T+n : tourne de n degrés dans le sens inverse des aiguilles d’une montre. T—n : toume de n degrés dans le sens des aiguilles d'une montre. Pom's n° 6 Px/y : positionne le crayon en x,y le / sinscrit seul lors de l'édition. Z: @teint le crayon (équivalent & D-—) ; positionne le crayon au centre de l'écran et le tourne vers la droite. C+n: place le caracttre n de SYSTEM.CHARSET sur [écran, le coin inférieur gauche du caractére a la position du crayon. Le signe + inscrit un caractére normal, le — en inversé. S+(chaine): place la chaine de caractéres sur |'écran 4 la position du crayon. Méme signification du + ou du — que pour C. >n« nom » : prend le dessin numéro n du fichier de dessin « nom » et le place sur l'écran a la position du crayon. :<nomfigure> : prend dans le fichier texte en cours le dessin « nomfigure » et lexécute. Rn ([inst], [inst].) : répéte n fois les fonctions entre parenthéses ; l'arrét de répétition est obtenu en tapant un point, les parenthéses sjinscrivent seu- les lors de l'édition. A noter qu'une répétition peut contenir une autre répé- tition. In: est un incrément, n un facteur multiplicatif n’agissant que sur les déplacements et non sur les angles ; par exemple 12,A+ 15,T+60 avance le crayon de (2 x 15) =30 et le toume de 60 degré. Le facteur In est automa- tiquement incrémenté de 1 a chaque passage dans une boucle : exemple la figure nommée CARRE. D+, R4 (A+30, T+90.) et la figure MULTIPLE . D—, P10/10, 12, R3 (:;CARRE.) le curseur étant passé en 10x 10, fac- teur de répétition 2, donc le premier caré fera 60 x 60, le suivant 90 x 90 et le troisisme 120 x 120. Chaque figure, une fois définie, est conservée dans un fichier sur le disque. Le programme Il utilise les facilités d’analyse de syntaxe et de récursivité du PASCAL. Ce programme pouna avantageuse- ment étre associé en un seul bloc avec le programme de graphisme de Pom’s 5, si bien que l'on aura en méme temps toutes les possibilités sous la main. Les procédures PRENINFO, PREN- CAR, PRENCHAINE, etc., ont déja Michel Crimont &é définies et seront avantageusement incluses dans la librairie, ce qui liberera de la place pour le texte en cas de développement ultérieur. Les fonctions ECRIMAGE et LIRI- MAGE sont dues a un de nos lecteurs, M. Devernay ; elles permettent de transférer la page graphique sur le dis- que et vice versa sans occuper de bul- fer supplémentaire grace aux procédu- tes BLOCKREAD et BLOCKWRITE. La procédure OPENLIST ouvre la liste de 15 chaines programme et la laisse en mémoire ; éventuellement, sila liste nexiste pas, cette deriére est créée. La procédure GETINF renvoie le numéro de fichier correspondant au nom d'un texte. Le fichier ne compor- tant que 15 textes programme au maximum, aucun tri n'est fait 4 ce niveau et la recherche est purement séquentielle. La procédure GETINS : renvoie une chaine de texte programme complete et utilise AJPM (ajoute + ou —) quine permet de rentrer au clavier que + ou —, AJBIT qui ne garde que les valeurs de 0 4 255 et AJCHAINE qui prend une chaine de caractéres. La chaine de texte en cours est toujours pointée sur le caractére a entrer par la variable INDEX déclarée globale afin de ne pas étre influencée par les appels récursifs ; la procédure GETINS elle méme gére la syntaxe de chaque ins- truction et évite toute erreur de frappe au clavier. Le premier caractére de l'instruction est filtr@ entre tous les caractéres possibles et la commande est placée dans la chaine 4 la position de INDEX. La syntaxe est ensuite guidée par I’ins- truction CASE. Pour A, T et C, obliga- tion d’entrer + ou — suivi d'un chiffre entre 0 et 255. Pour D, donner + ou —. Pour I, ur bil. Pour S, un signe puis une chaine de caractéres (ici limitée a 20 caractéres) . Pour P, deux bits successifs. Pour >>, un bit puis le nom du fichier disque. Pour: le nom de la figure. Enfin, pour R,un bit puis appel récursif a GETINS. Linstruction étant totalement chargée, obligation d’entrer une virgule pour linstruction suivante ou un point si fon a terminé ; la suite d’instruction dans une boucle R doit elle-méme se termi- ner par un point. Le systéme g@re lui-méme certains ter- minateurs, par exemple apres la frappe de Px le signe / apparait en sépara- teur ; aprés le Rn apparait automati- quement une parenthése gauche, et apres la frappe du point la parenthése droite correspondante. La frappe des lettres de commande et des signes ne nécessitent pas la frappe du RETURN. Par contre, il faudra taper ce demier pour valider les chaines de caractéres ou les entiers. A noter que, lorsqu’un RETURN suit une virgule, il est gardé dans le fichier, ce qui permet une écriture et une lec- ture plus agréables des textes a l'écran. La procédure EDITE initialise le nom d'un texte a rentrer dans le fichier, cherche une place vide dans le fichier, initialise une chaine de 80 espaces, Tenvoie & GETINS pour prendre le texte du programme puis enregistre la chaine de caractére et son nom dans le Les procédures LIRE et LITINSTRUC sont calquées sur EDITE et GETINS : elles sont utilisées pour lire la chaine texte tout en respectant la syntaxe d’écriture. La procédure CATALOG permet de lister les textes du fichier LISTE en cours et éventuellement d'effacer un texte caduc ou que l'on veut réécrire. La procédure EXECU- TION place la variable IND a 1, début de la chaine de caractéres et exécute le texte PJET grace & la procédure REA- LISE : cette procédure, & partir de la syntaxe du langage, effectue les diffé- rentes fonctions prévues sur la page graphique. A noter : — la récursion introduite par KR qui appelle REALISE avec la chaine d’ins: truction situées jusqu’a la demiére parenthése fermante, ce qui permet 4 un Répéte d’étre a l'intérieur d'un autre Répite ; FROGRAM TORTUE} USES TURTLEGRAPHIC} CONST NBLISTE e153 TAILLE 143 VOL. ml ES¢ LONGPROG =80} —la récursion introduite par: «nom» qui rappelle EXECUTION pour le texte « nom ». On remarquera que pour A le déplacement est MOVE (x x INC). INC @tant lincrément, ce demier ne pourra étre modifié que par une nouvelle valeur de I. Si l'on désire qu’a la sortie des boucles INC retrouve automatiquement son ancienne valeur, il faudra déclarer INC dans EXECU- TION et introduire INC:=1 dans le corps de la procédure avant I'appel de REALISE. Le programme principal place le menu &l'écran et permet de choisir les diffé- rentes options. Certaines fonctions agissent au niveau des textes (1,2,3,4 ) et ne sont actives que si la ligne TEXTES “...§ nomme un fichier. Pour créer ou charger un fichier, il faudra donc appeler la fonction 1 et nommer le fichier ; ce fichier sera lu ou créé et son nom appa- raitra entre les crochets. A partir de ce moment, 2 permettra d’éditer une ligne supplémentaire de texte, 3 de lire un texte et 4 de lire le catalogue des textes de ce fichier. La deuxiéme partie, intitulée —— GRAPHIQUES ——., permet : 5 : effacement de la page graphique. 6 : visualisation de la page graphique, Je RETURN raméne au menu. 7 : sauve la page graphique sur le dis- que. 8; lecture d'une page graphique du disque. 9 : exécute un texte. 0 : sortie du programme. Modifications éventuelles 1, Tous les fichiers : textes, dessins, planches sont sur le disque du lec- teur 2 ; si l'on préfére travailler sur le lecteur 1 il suffit de remplacer dans les déclarations VOL='#5:’ par VOL ='#4:. 2. Si l'on désire des programmes plus longs, on pourra remplacer LONGPRO=80 par LONGPRO =X (X < 255). 3. Si l'on désire un fichier plus long, il suffit_ de changer la constante de NBLISTE. Extensions envisageables 1. Ajouter un véritable éditeur de ligne avec corrections. 2. Ajouter d'autres fonctions ; pour ce faire : définir le caractére de la fonction et l'introduire 4 PCAR, écrire les lignes correspondantes dans les CASE de GETIND, LITINSTRUC et REALISE. 3. Ecrire des procédures PASCAL spécifiques pour certains dessins diffici- les a réaliser par ce programme, par exemple : arcs de cercle, polygones réguliers, etc., et placer les lignes cor- respondantes au menu. 4. Ecrire en instruction immédiate sur la page graphique en acceptant des caractéres a la place du RETURN. On pourra utiliser la méme syntaxe, un déplacement point par point, ou les deux. 5. Utilisation de couleurs pour le fond ou les dessins. 6. Définition de fenétres. 7. Rotation, agrandissement de des- sins, déplacement de dessins dans la planche. 8. ... A vos claviers... Attention ! Alin de ne pas surcharger le pro- gramme, les contréles d'erreurs ont été limités ; en particulier, il n'y a pas de contréle de sortie de la page graphi- que, celui-ci peut étre ajouté a la fonc- tion A et a Y pour P. Lors de la rédac- tion de la chaine texte, le contréle de longueur est un peu frustre et intervient au caractére 77 avec retentissement de bips sonores ; ceci suffit sur les instruc- tions courtes, par contre le nom d'une fiqure peut étre coupé si l'on n'y prend garde. S'IL vous Lair ... DESSNE 1401 AVEC UNE TORTUE TYPE CHOIDECA =SET OF CHAR} COMMANDE =RECORD NOM tSTRINGCLOT; INSTRUC ${STRINGCLONGFROGI END} MEMOTRECRAN =FACKED ARRAYCO,.81911 OF 0.. FORME =PACKED ARRAYLO.+TAILLE,0++TAILLE OF BOOLEAN; VAR HOME,BS,EFL,EFE,SON, INUV,NORM, CRE CHARS ca + CHAR} COM $ COMMANDE + LISTE FILE OF ARRAYC1..NBLISTE] OF COMMANDE$ INDEX,I,INC ‘INTEGER; NCOM,NIMA 3STRING} PROJET {STRING} ECRAN SRECORD CASE BOOLEAN OF FALSE ? (ADRESSES INTEGER) + TRUE $ (POTNTEURS AMEMOTRECRAN) END} PHOTO PILES ALBUM {FILE OF FORME; OK) (« PROCEDURES GENERALES HABITUELLES x) CRE) PROCEDURE FRINFO$ BEGIN HOME $=CHRC12Z) $ END; PROCEDURE PRENKRETURN3 VAR SORT CHARS BEGIN REPEAT READ (KEYBOARD , SORT) UNTIL EGLNCKEYBOARD > END} FUNCTION PRENCAR(BONSET?{CHOTDECA) $CHAR: VAR CH + CHAR} BON {BOOLEANS BEGIN REPEAT READ CKEYEOQARD, CH) IF EQLNC KEYBOARD) THEN CH?=CR3 BON?t=CH IN BONSET$ IF NOT BON THEN WRITECSON) ELSE IF CH IN CL’ ‘..’°] THEN WRITE(CH) UNTIL EON} PRENCAR?=CH END 3 FUNCTION OUT? BOOLEANS BEGIN QUIS =PRENCAR(EC’O’,’N“I) IN £7079 END} 3 BS t=CHR(8) 3 SON $=CHR(7)$ INV?=CHR(18) 3 NORMS=CHR(20)$ CR t=CHR(13)3 EFBS=CHR(11) ARGS ne i a Pom'’s n° 6 PROCEDURE MESSAGE (Y?INTEGER;S?STRING) ; BEGIN GOTOXY(0,Y);WRITE(S,EFL) END $ PROCEDURE ALARME(S?STRING) } BEGIN GOTOXY (0,1) $WRITE(SON,EFB) 3 MESSAGE(10,9)3 MESSAGE (12,’FAITES <RETURN> /)3 PRENRETURN END $ FROCEDURE PRENCHAINE (LONGMAX? INTEGER} BONSET+CHOIDECA;VAR SiSTRING) 3 VAR Si 3STRINGCAI; CONT STRING} REPEAT IF LENGTH(CONT)=0 THEN S810113=FRENCAR(BONSET+CCRI) ELSE TF LENGTH(CONT)=LONGMAX THEN S1C11°=FPRENCAR(CCR,BS1) ELSE SiCLIt=FPRENCAR(BONSET+COR,BS1) > IF S101] IN BONSET THEN CONT?=CONCAT(CONT,S1) ELSE IF SiCiJ=BS THEN BEGIN WRITECBS,’ ’,BS)} DELETE (CONT,LENGTH(CONT),1) END; UNTIL Sif1I=CR} TF LENGTHCCONT)<>0 THEN S?=CONT ELSE WRITE(S) END} PROCEDURE ENTIERCLONGMAX? INTEGER; VAR SS INTEGER) 3 VAR St tSTRINGC1I} r S INTEGER} CONT ‘STRING; OKGET $CHOIDECA; BEGIN OKSET%=070%.+’9’T$S13=" “$CONTE="73 REFEAT IF LENGTH(CONT)=0 THEN S10113=PRENCAR(OKSET+C CORI) ELSE IF LENGTH(CONT)=LONGMAX THEN S1C11t=PRENCAR(CCR, BSI) ELSE SiCi]t=PRENCAR(COKSET+CCR,BS1)3 IF S101] IN OKSET THEN CONT$=CONCAT(CONT,S1) ELSE IF S$101]=6S THEN BEGIN WRITE(BS,’ ‘,BS)} DELETE (CONT,;LENGTH(CONT) 41> END$ UNTIL SiCiI=CR} IF LENGTHCCONT)<+0 THEN BEGIN $=03 FOR T3=1 TO LENGTHICONT) DD BEGIN $=$«103St=S+ (ORDCCONTCII)-ORD(‘0’)) END; I eee 10 Pom's n° 6 END ELSE WRITECS) END} CxK'x) (x LECTURE, ECRITURE DE LA FAGE ECRAN SUR DISQUE x) CXaEK ) FUNCTION LTRTMAGE CTMAGE S$ STRING) 2 BOOLEAN; BEGIN (x$T-*) RESET (FHOTO, IMAGE) 3 IF ITORESULT<>0 THEN LIRIMAGE?=FALSE ELSE BEGIN LIRIMAGE $ =BLOCKREAD (PHOTO,ECRAN.FOINTEURS, 16)=163 CLOSE(FPHOTO> END (K$T +X) END; FUNCTION ECRIMAGE (TMAGE? STRING) 7BOOLEAN$ BEGIN (x$I-*) REWRTTE (PHOTO, TMAGE > ¢ IF TORESULT<>0 THEN ECRIMAGE?=FALSE ELSE BEGIN ECRIMAGE ? =BLOCKWRITE(PHOTO,ECRAN.POINTEUR*,16)=163 CLOSE (FHOTO,LOCK) END (KG$I+K) END3 FUNCTION PRENIMACVAR IMAGE? STRING) {BOOLEAN BECIN MESSAGE(22,’NOM DE LA PLANCHE 27” FRENCHAINE(10,0’A’++’Z’1,IMAGE)}$ IF IMAGE=’’ THEN PRENIMAS=FALSE ELSE BEGIN PRENIMNA?=TRUE} IF FOS¢’3’,IMAGE)=0 THEN IMAGE TF POS(’.’,TMAGE)=0 THEN TMAGE END END? ox Ex) (x PROCEDURES DE GESTION DES. FICHIERS TEXTES *) (KEK) FROCEDURE OFENLTSTE (ST?STRING) } VAR I tS INTEGER; Is $ COMMANDE $ BEGIN (x$I-x) CLOSE(LISTE) } RESET(LISTE,ST)$ IF ITORESULT<>0 THEN GEGIN CLOSE(LISTE) 3 REWRITE(LISTE,ST) ;SEEK(LISTE,0)3 LeNOM$=’’$L.INSTRUCS=% ’ 3 FOR Ii=1 TO NBLISTE DO LISTEACTI?=' PUTC(LISTE) $ CLOSE(LISTE,LOCK) $ RESET(LISTE,ST) 3 & i =CONCAT (VOL, IMAGE) > =CONCAT CIMAGE, ’ . IMA’) f Pom’s n° 6 1 E.ND} CKGI+K) END} FUNCTION GETIND (NM? STRING) S INTEGERS VAR TtINTEGER; BEGIN Li=1;GETIND?=03 WHILE (NM“2LISTEACTII.NOM) AND (T“NBLISTE) DO Tt=T+1} IF NM*LISTESEII.NOM THEN GETIND3=I END} PROCEDURE GETINS(VAR INS:STRING) 3 VAR C1 3 CHAR} FROCEDURE AJPM; BEGIN INSCINDEXI{=PRENCAR(D +’, 7-4) }INDEX?=INDEX+1 END 5 PROCEDURE AJEBIT} VaR BIT sINTEGERS BEGIN REPEAT BITI=05 ENTIER(3,BIT) }$ IF BIT>255 THEN WRITECES,BS,BS, “ ’,BS,BS,BS) UNTIL BI SSF INSCINDEX12=CHR(BIT) 3 INDEX$=INDEX+1 END} PROCEDURE AUCHAINE (NES INTEGER) § VaR S ?STRING} BEGIN PRENCHALNE (NB, £A’.4°Z/1,5)3 IF INDEX+LENGTH(S)<LONGPROG-3 THEN BEGIN MOVELEFT (S011, INSCINDEX1,LENGTH(S) )$ INDEX} =INDEX+LENGTH(S) END} ENDS BEGIN REPEAT IF INDEX>75 THEN WRITE(SON, SON, SON) } CLS=PRENCAR( LA‘ s°T%s/D? 97D 9/2 978% 9 P90" R99 IF C1=CR THEN WRITELN ELSE GEGIN INSCINDEX]!=C1}INDEX CASE Ci OF ran, Ts ‘C/TBEGIN AUPMSAUEIT ENDS “Dé TAUPMS I’ tAUBITS ‘S/BEGIN AJFMSAUCHAINE(20) END} ‘PTBEGIN AJBITSWRITE(///)$AUBLT END} ‘>’ BEGIN AUBIT}AUCHAINE(10) END} “E/SASCHAINE (10) $ “R/TBEGIN FIRSTS RSS MA 12 ? t- $e CRI) 5 INDEX+1 END} Pom’s n° 6 AJBITSWRITE(’ (7) STNSCINDEX12$=/ €/ STNDEX?=TNDEX4+13 GETING CINS) WRITE (’) 7); INSCINDEXI END} > SINDEX$-INDEX+i END} IF ¢ CR THEN C1t=FPRENCAR(E’,*, 2/703 INSCINDEXI$=C13 INDEX?=ZNDEX+13 UNTIL ¢C +4) GR CIND ONGPROG~3) } TF INDE NGFROG-3 THEN INSCINDEX-11t=/, 3 END} re OCEDURE EDITE$ VAR NOME I SSTRINGCLOI; INDICE, TS INTEGER} 1: {STRINGC SOI} BEGIN AGE COUTPUT > $ Tie} REPEAT IF LISTEACII.NOM=/’ THEN INDICE3=15 Cee+§ UNTIL CINDIC 0) OR (LeNBLISTE+1) 3 IF INDICE=0 THEN BEGIN ALARME(’FICHIER PLEIN. ..’) sEXIT(EDITE) MESSAGE (0, EDITION? FIGURE ’)}WRITECINDICE,’ DE *,NCOM)} DEC7 “NOM DE LA FIGURE?‘ )3 PRENCHAINE(10,0/°A%..727],LISTE*CINDICE.NQM) 3 INDEX¢=13 (K$R-%) LCOI3=CHR(80 >} FILLCHAR(LE11,80,% “33 CHPR AK) GOTOXY (0,103 GETINS(L) 3 LISTECCINDICEI, INSTRUC? =L} SEEK(LISTE, 0); FUT(LISTE) }CLOSE(LISTE,LOCK) $RESET(LISTE,NCOM) END$ PROCEDURE LITINSTRUC(SISTRING > } VAR C1 ICHARS BEGIN REPEAT CLI=SCINDEXISWRITE(C1) } INDEX? =TNDEX+13 CASE C1 OF TALS ITs i Pas tBEGIN WRITE (SCINDEX1) }INDEX$=INDEX+1 3 WRITE CORD (SCINDEX1) ) }INDEX?=INDEX#1 END} “D’ sBEGIN WRITE (SCINDEXI) ;INDEX?=INDEX+1 END} sf {BEGIN WRITE CORD(SCINDEXI)) 3INDEX?=INDEX+1 END} a i 2 BEGIN WRITE (ORD (SCINDEX) ) } INDEX? =INDEX+13 WRITE (4/’% sORDCSCINDEXI) ) 3 INDEX$ =INDEX+1 END} °S¢,’3* SREPEAT C13=SCINDEXI$WRITE(C1) SINDEXt#=INDEX+1 UNTIL, (SCINDEX] IN £7,%,7%.°1)3 23? sBEGIN WRITE (ORD(SLINDEX)) $INDEX?=INDEX+1}$ END > Pom's n° 6 13 REPEAT CLi=SCINDEXI}WRITE(CL) $ INDEX? =INDEX+1 UNTIL (SCINDEXT IN £/4,4,%+/9)3 END} Re {BEGIN WRITE CORD (SLINDEX]) ) sINDEX$=INDEX+1; WRITE (SCINDEX]) }INDEX2=INDEX+13 LITINSTRUC(S)}$ WRITE (SCINDEX1) } INDEX? =INDEX+1 END} END UNTIL Ci=’.7$ END? PROCEDURE LIRE$ VAR INDICES INTEGERS NM +STRING} BEGIN PAGE (OUTPUT) ;MESSAGE (CO, “LECTURES ’) sWRITE (NCOM) MESSAGE(7,°NOM DE LA FIGURES’ )3 PRENCHAINE(10,0°A%.+°Z°1,NM) 3 INDICE! =GETIND(NM) 3 GOTOXY (0,10) $INDEXs=13 IF INDICES=0 THEN LITINSTRUC(LISTE“LINDICEI, INSTRUC) ELSE MESSAGE(10,’N’ “EXISTE PAS’ )3 MESSAGE (23,’TAFEZ LE <RETURN> ’) 3PRENRETURN} END} FROCEDURE CATALOG; VAR TtINTEGER? CICHAR} BEGIN FAGE (OUTFUT) } MESSAGE (0, “CATALOGUES ’) $WRITE(NCOM) $ COTOXY<(0,4)3 FOR Ii=1 TO NBLISTE DO WRITELN(TiZ,’ ~’,LISTE*CII.NOM)$ MESSAGE(23,’TAPEZ E(FFACE OU «RETURN? 403 C2=FRENCAR(C/E’,CRI)} IF C=’E’ THEN BEGIN MESSACE(23, NUMERO? /);ITt=03ENTIER(2,1)3 IF (I#=NBLISTE) THEN BEGIN LISTEALII.NOMS=//$LISTESC II. INSTRUC? =" ¢ END END END3 PROCEDURE FPRENLISTE$ BEGIN PAGE (OUTPUT) + MESSAGE(S,’NOM DU FICHIER?’)3 PRENCHAINE(10,0°A’..°Z’1,NCOM)$ IF NCOM=’*% THEN EXIT(PRENLISTE)} TE FOS Y? WENN =D THEN NEDA =CONTAT (VDL NTO 5 IF POS¢’.’,NCOM)=0 THEN NCOM$=CONCAT(NCOM, ’.COM’)$ OPENLTSTE (NCOM) $ END} 14 Pom's n° 6 Ok EXECUTION D‘UN TEXTE SUR LA PAGE GRAPHIQUE x) (KX) PROCEDURE EXECUTION(FJETi STRING) $ VAR INDICE,IND tINTEGER} FROCEDURE REALISE(S!STRING) } VAR C1,S1 t CHARS IM ISTRING}$ I,REP, LIM, CT, N? INTEGER} BEGIN REPEAT Cit=SCINDI;IND?=IND+13 CASE Ci OF ‘A’ SCASE SCINDI OF ‘+S BEGIN IND?=IND+1$ MOVE CORD (SCIND)«INC) 3 IND? =IND+1 END} tm SREGIN IND? =IND+13 TURN(180)$ MOVE CORD (SCIND1)*TNC) SIND? =IND+1 3 TURN(-180) END END; ‘TS BEGIN SIt=SCINDI;IND?=IND+1$ IF SI=‘+’ THEN TURNCORD(SCINDI)) ELSE TURN(-ORD(SCIND))3 IND? =IND+1 END} “I 3BEGIN INC}=ORD(SCINDI)$IND?=IND+1 END} ‘C/ BEGIN STt=SCINDISIND{=IND+1 3 IF $I=’+’ THEN CHARTYPE(10) ELSE CHARTYPE(S) 3 WCHAR(SCIND 1) }IND?=IND+1 END} oooh ove Trucs et astuces Quelquefois, votre disquette se centre mal et vous obtenez une fatidique 1/0 ERROR. Beau- coup dentre elles pourront étre évitées si, lors du premier accés a une disquette, vous ne fer- mez la porte du lecteur qu'une fois la lampe témoin allumée. En effet, la disquette se centre mieux dans ce tas-la. Enfin, si vous voulez éviter les ennuis, n’oubliez quand méme pas que la disquette est un sup- port fragile, et que la téte de lecture est appelée a travailler trés prés de la surface. Un de nos lecteurs a ainsi pu constater que, quand de la confiture tombe sur une disquette, ce n'est bon (pas la confiture. bien sir) ni pour la disquette (on s'y attendait) ni pour le lecteur (ca, c’était moins évident). Il a fallu déconfiturer le lecteur en atelier. Pom’s n° 6 15 “DS BEGIN SIt=SCINDI;IND{=IND+1} IF ST=’+’ THEN FENCOLOR(WHITE) ELSE FENCOLOR (NONE) $3 END} ‘Z’ t BEGIN PENCOLOR (NONE) + TURNTO(CO)3 MOVETO(140,96) END} “PY SBEGIN MOVETOCORD(SCINDI) ,ORDCSCIND+11) >} IND?=IND+2 END} “S‘tBEGIN SLi=SCINDIZ IND? =IND+1; IF SI=#’+’ THEN CHARTYPE(10) ELSE CHARTYPE(S) > Cit=SCINDI$ REPEAT WCHAR (C1) $IND?=IND+i3C1t=SCINDI UNTIL Cl ING et ord END; *3°S3BEGIN Ti=SCAN(11,=/,%,SCINDI)} IF I=11 THEN It=SCAN(11,=/.’,SCINDI)+ TMs=COFY(S,IND,T) ;INDs=IND+T; EXECUTION(CIM) END} *>’3 BEGIN Nt=ORD(SCINDI) ;IND?=IND+13 t=SCAN(11,=7,%,SCINDI)$ IF I=11 THEN Ii=SCAN(11,=’.’,SCINDI)$ IMt=COPY(S,IND, IT) ;IND?=IND+I3 IM?=CONCAT(VOL,IM,’.PIC’ >} (x$T~x) RESET (ALBUM, IM) + IF JORESULT=0 THEN BEGIN SEEK (ALBUM,N) 3GETCALEUM) > DRAWELOCK (ALBUMS, 2,0,0,15,15,TURTLEX,TURTLEY,10) END; CLOSE (ALBUM) CKST4+K) 3 END} “R’ SBEGIN REF S=ORD(SCINDI) } IND? =IND+23 Ts=IND; REFEAT IF SCII=’)’ THEN LIM?=13 antl UNTIL (SETI=’ ’) OR (1=80)3 TMi=COPY (CS, IND LIM-IND? {CTI=IND} FOR Is=#1 TO REP DO BEGIN IND3=15 IF INC>1 THEN INCt#=INC+13 REALISE (IM) END; 16 Pom’s n° 6 IND?=LIM END} END UNTIL Ci=’,¢ END 3 GEGIN INDICE? =GETIND(FPUET) $IND$=13 IF INDICE=0 THEN EXIT (EXECUTION) $$ REALISE (LISTE*CINDICE], INSTRUC) END} BEGIN PRINFOS$NCOM?=//$NIMAt#=/7$ ECRAN. ADRESSE t=81323 REPEAT PAGE COUTFUT) $ FOR ITi=1 TO 6 DO BEGIN WRITEC’TORTUE /)3 IF IT MOD 2=0 THEN WRITECNORM) ELSE WRITECTNY) END$ MESSAGE(S,/-~ TEXTES ==>’) $WRITECINV, ‘LC’ ,NCOM, “1’,NORM)$ GOTOXY(10,7)3WRITE(’C11 CHANGE DE FICHIER’)$ GOTOXY (10,8) $WRITE(’C2] EDITE UNE LIGNE’)} GOTOXY (10,9) 3WRITE(/£37 LECTURE D’’UNE LIGNE’) } GOTOXY (10,10) $WRITE( ‘C41 CATALOGUE’) 3 MESSAGE C12, /~~ GRAPHIQUES ~~7) 5 GOTOXY (10,14) ;WRITE(’ES] EFFACE LA FAGE’)$ GOTOXY (10,15) ;WRITEC “C61 VISUALISE LA PAGE’ )} GOTOXY (10,16) $WRITE(/C71 SAUVE LA PAGE’ )$ GOTOXY (10,17) $WRITE( ‘C81 CHARGE UNE FAGE’)}$ GOTOXY (10,18) $WRITE( “C91 EXECUTE UN TEXTE’)3 GOTOXY (10,20) $WRETEC’CO] QUITTE’)3 GOTOXY (3,22) 3WRITEC/OPTION £C 1’,BS,ES)$ CAT=FPRENCARCL “07+ 46°91)3 CASE CA OF ‘1 SPRENLTSTE} ese 8 NCOMs 2°” THEN EDITE$ THEN LIRE$ THEN CATALOG} ‘S°3BEGIN INITTURTLE$ TEXTMODE END} 16? {BEGIN GRAFMODE 3 PRENRETURN$ TEXTMODE END} ‘7°3TF PRENTMACNIMA) THEN IF NOT ECRIMAGE(NIMA) THEN ALARME (‘PAS D’‘ENREGISTREMENT’)} O/SIF PRENIMACNIMA) THEN IF NOT LIRIMAGE(NIMA) THEN ALARME(’PAS DE LECTURE’)} “9? S BEGIN MESSAGE(22,’NOM DU TEXTE 3’)} PRENCHAINE (10,07A’..’Z’1,PROJET) $ IF PROJETS2=°¢ THEN BEGIN MESSAGE (22,’DESSIN ’)3WRITECINV,FROJET,NORM,’ EN COURS’)$ INC? #1; EXECUTION( PROJET) END END} END UNTIL CA=/0/ END. 17 Pom’s n° 6 Gérer Articles A A Fiches Mouvements Calculer Classer LA GESTION DE FICHIER TOUS AZIMUTS Un seul programme, un trés grand nombre d’applications Avec ce logiciel, votre APPLE dis- posera de pouvoirs exceptionnels, vous vous en servirez pour suivre vos Clients, pour établir vos prévi- sions, pour mettre a jour vos tarifs, pour gérer vos commandes, vos arli- cles en stocks, pour calculer la paie de vos employés ou simplement pour tenir votre collection de tim- bres ou de livres. Une trés grande facilité de mise en ceuvre Nul besoin de connaitre l'informa- tique, nul besoin d'utiliser un voca- bulaire de spécialiste; pas de codifications inutiles; les instruc- tions sont simples, naturelles et en frangais. Définissez vous-méme votre modéle de fichier Chaque rubrique devient automa- tiquement un crilére de recherche et de classement; vous pourrez a tout moment redéfinir votre modéle, ajouter ou retrancher des rubriques sans avoir 4 réécrire les données. Retrouver vos dossiers de multiples facons Vous pouvez les rechercher a par- tir de n'importe quelle rubrique, fetrouver tous ceux répondant a certaines caractéristiques selon une combinaison de critéres (jusqu'a 12 simultanément) tels que “égal", “plus grand que", “plus petit que", “different”, “compris entre”. Faites toutes sortes de calculs et profitez de votre imprimante Vous pourrez présenter les infor- mations de votre choix et les résul- tats de vos calculs sous forme d’étiquettes ou de rapports (jusqu'a 13 colonnes), dans n'importe quel ordre alphabétique, numérique, chronologique. Avec CX Multigestion, vous travail- lerez trés vite et vou z trés loin Comparez avec d'autres pro- grammes: vous retrouvez n'importe quel dossier. vous dressez un état combinant classement et sélections en quelques secondes ; en outre, CX Multigestion n'est que le premier programme d'une série de logiciels de gestion tous compatibles entre cux. Demandez 4 votre boutique informatique une démonstration de CX Multigestion et vous serez vraiment émerveillé : si elle nel'a pas en stock, demandez lui de nous appeler au (1) 538.98.87 ou écrivez nous 2: CONTROLE X - Tour Maine-Montparnasse, 33, av. du Maine - 75755 Paris Cedex 15 Apple est une marque déposée Ue Apple Computer Inc. Il y a fort A parier que beaucoup des programmes que vous écrivez, ou envisagez d'écrire, comportent, a un moment quelconque, une phase d'entrée de données au clavier. Cer- tes, une simple suite d’instructions INPUT peut réaliser ce traitement, mais ce n’est ni la solution la plus agréable a I'ceil (présentation de écran au moment de la saisie), ni la plus sare @ I'usage (contréle des données entrées). Méme si vous étes le seul utilisateur de vos programmes, il peut vous étre utile de disposer d’une routine « d'INPUT généralisé » qui assure une gestion cor- recte de l'écran et vérifie que les don- nées entrées correspondent bien a ce qu'elles devraient étre. Principes généraux Pour faciliter !'analyse de la routine pré- Notions de base : routine INPUT généralisé sentée ici, précisons les objectifs que nous voulons atteindre. 1, Lécran doit indiquer clairement les informations a fournir et assigner 4 cha- cune d’elles une zone de rentrée indivi- dualisée. 2. Il doit étre possible de se déplacer sur l'écran, vers le haut comme vers le bas, pour modifier les différentes don- nées avant toute validation. 3. Lecontréle des données doit s'effec- tuer caractére par caractére au moment de la frappe (pas de lettres dans une information numérique, pas de carac- tres de contréle ou susceptibles de perturber les traitements ultérieurs...) De plus, la longueur des informations ne doit pas dépasser le maximum com- patible avec les autres traitements. 4. Aprés validation, les données doi- vent pouvoir étre modifiées ou consul- tées facilement. Gérard Michel Notre routine repose en conséquence sur les principes suivants (se reporter au programme BASIC pour identifier les variables) : 1, Chaque information est définie par un libellé (LI$), la position du premier caractére 4 rentrer (ZV% et ZH%), et la longueur maximale de la réponse (ZL%). 2. La touche RETURN permet de ter- miner |'entrée d'une information et de passer @ la suivante. La touche ESC permet de remonter aux données pré- cédentes ou de revenir a la phase de traitement précédente. 3. On distingue trois types de don- nées: alphanumérique (type 1), numérique (type 2) et date (type 3). Chaque information est caractérisée par son type (TY%) 4, Des variables annexes permettent de réaliser l'affichage des données pour ‘\\ Un ensemble de programmes portant sur la comptabilité, dédié aux <\, petites entreprises, professions libérales, artisans, commercants, bref aux amateurs d’informatique soucieux de la gestion de leurs affaires professionnelles ou privées. C’est un outil complet et pratique a utiliser qui, aprés un rappel sur la comptabilite générale donne des exemples concrets : édition des livres-journal, grands livres, balances, bilans, calculs des ratios ainsi qu'un programme spécial intéressant |’adaptation et la personnalisation du Plan Comptable. 160 pages - 102,00 FF/785,00 FB 83-DeerUsO exovecnn ee BP 06-7740 Lagmy-a/Mame — Se OTST ont a FRANCE P'S. DIFFUSION Teléohione (6) 007.59.31 u, pour la Belgique et ix te Luxembourg, & {par avion ayoutor 8 FF (75 FB) par kvre) TOTAL PSL BENELOX BELGIQUE Telephone (2) 945.08.50 en au Canada Nou rc a Parkes BCE Ine | Farah 53443 rue Sant Dens rs ie _ 4 NaS 9000 eset sg Codepost\1 1 1 1 ee ee Pom’s n° 6 per aprr yr hae 155) 6324i 1a sls) 19 modification ou consultation (ME, X, B%) Analyse ei utilisation de la routine Le contréle des données entrées, caraclére par caractére, conslitue le cceur de la routine. Il est assuré par un petit programme en assembleur, ce qui permet de : — faire l'économie de nombreux tests en BASIC sur les codes ASCII des caractéres, tout en accélérant le traite- ment ; — bénéficier facilement de la lecture « active » par la fléche de droite et de garantir que les données stockées dans les variables sont identiques a celles qui apparaissent sur l'écran ; — illustrer par un exemple simple l'uti- lisation de l'assembleur et son interac- tion avec BASIC, ce qui répond aux voeux de nombreux lecteurs concernés par cette rubrique « Notions de Base ». Opérons donc A coeur ouvert : Dans les mémoires $28 et $29 est stoc- kée l'adresse de la premiére colonne de la ligne courante de l'écran (celle ot se trouve le curseur) dans la page TEXT (zone de mémoire oi sont rangés les caractéres qui composent |'écran en mode TEXT). Liadresse $28 est ici repérée par le symbole ADR. En $24 est stockée la position horizon- tale du curseur (0 4 39), symbolisée par H. En $9, nous stockerons le nombre de caractéres entrés (LC). $6 (E) servira de «drapeau» au BASIC pour une éventuelle remontée dans l’écran (touche ESC). En $7 (LO), nous rangerons la lon- gueur maximale autorisée pour la réponse. En $8 (TY), stockage du type de Yinformation. $311 (ZY) est I'adresse de début de la zone oii l'on stockera les caractéres entrés au clavier. Cette zone se trouve dans une « région » libre de l'Apple ($300 4 $3CF). On aurait pu stocker 4 partir de $300, ou apres la routine elle- méme, par exemple. $FDOC est l’adresse de début du sous-programme du moniteur qui fait clignoter le curseur et attend qu’une touche soit frappée. Aprés exécution, le code-écran du carac- tére entré se trouve dans l’accumula- teur (vous pouvez vous reporter aux pages 44-45 de Pom's numéro 4 ou a la page 7 du « Manuel de Réfé- rence Apple Il » pour avoir la liste des codes-écran des différents carac- teres. $FDED est I'adresse de début du sous- programme du moniteur qui affiche a Yécran le caractére dont le code-écran se trouve dans l'accumulateur. Lignes 12 a 16 : nettoyage de la zone de stockage ($80 est le code-écran du caractére nul). En BASIC, ces instruc- tions s’écriraient : 12 A$="" 13 X=LO 14 ZYS(X) =AS 15 X=X—1 16 IF X =0 THEN 14 Lignes 17 et 18: E=0. Ligne 19 : saisie d’un caractére. Rap- pelons que le résultat se trouve dans Taccumulateur, d’ot l'emploi de I'ins- truction CMP dans les tests sur la valeur du caractére. Lignes 20 et 21 : sic'est un RETURN, on saute a la fin de routine (FIN1). Lignes 22 et 23 : X sert 4 compter le nombre de caractéres entrés (a partir de 0). Si X = LO, on saute SUITS. Lignes 24 et 25 : sile caractére est une «fléche de gauche », on saute a RETOUR. Lignes 26 et 27 : on a entré un carac- tére de trop. La routine-moniteur dont ladresse de début est $FBDD émet un « beep » et l'on retourne ensuite a la saisie de caractére. Ainsi, une fois la Liste en assembleur Lisa 1.5 i ORG $71E4 z OBJ $800 3. ADE EFZ $29 Grae) EFZ $24 S Le EPZ #9 SE EFZ 64 iF EFZ 7 SCY, EFZ 9 T= ZY. EQU $311 10 GET EQU $FDOC Lt OUT EQU $FDED nis LDA #$80 13 LDX LO 14 DEFO STA ZY,X 15 DEX 16 BPL DEFO 17 LDX #0 18 STX E DEF L SUITS SUITL SUITZ RETOUR SUITS SUITS SULT7 SUITS SUITS FINI JSR CMF BEQ CPX BCC CMP BEQ JSR JMF CMP BNE CFX BNE LDA STA RTS CMF BNE LDA JMF CMF BEQ CMP BNE CPX BEQ DEX DEC JMPF CMF BNE LDA JSR LDY LDA JMP CMP BCC CMF BCS LDY CrY BEQ CMF BCS CMF BNE CMF BCS CFX BNE CMP BEQ JSR STA INX JMP STX RTS GET #$8D FINI Lo SULTS #989 RETOUR $F EDD DEFL #S9B SUITi #0 SUITL 49 E #$AC SUITZ #$AE SUITS #SAE SULTS #$83 SUITS #0 SUITS H DEFL #S9S SUIT4 $25 $FBCL H CADR) +Y SUITS #SA0 DEF1L #$DB DEPL TY #1 SUITS #SAF SUIT7 #$AD DEFL #4BA DEFL #0 SUITS #$A2 DEF1 OUT ZY,X DEPL Lc Pom’s n° 6 lonqueur maximale atteinte, seuls RETURN et la fléche de gauche sont acceptés. Lignes 28 et 29 : si ce n'est pas ESC, on saute 4 SUIT1. . Tignes 30 et 31: si FSC n'est pas le premier caractére saisi dans la zone, on saute & SUIT1 (cet ESC sera ensuite refusé) . Lignes 32 4 34: on positionne le « drapeau de remontée » (E=9) et on sort de la routine. Lignes 35 a 38 : si ce n'est pas une vir- gule, on saute 4 SUIT2. Sinon, on la remplace par un point ($AE) et on saute 4 SUITS. En effet, la virgule peut poser des problémes si les informations sont ensuite stockées puis relues par INPUT sur disquette (EXTRA IGNO- RED). De plus, pour les informations numéri- ques, il faut traduire la « virgule fran- gaise » en « point anglo-saxon »... Lignes 39 et 40 : si c'est un point, on saute 4 SUITS. Lignes 41 et 42 : si ce n'est pas une «fléche de gauche», on saute a SUIT3. Ce test n'est pas redondant avec celui de la ligne 24, puisque nous sommes maintenant dans le cas od la longueur maximale n'est pas atteinte. Lignes 43 et 44 : sila fl@che de gauche est le premier caractére entré dans la zone (X=(), on saute 4 SUITS (elle sera ensuite refusée par la routine). Lignes 45 & 47 : sila fléche n'est pas le premier caractére, on diminue de 1 le nombre de caractéres entrés (DEX), on recule le curseur (DEC H) et on retourne 4 la saisie de caractére (JMP DEP). Lignes 48 et 49 : si ce n’est pas une « fl&che de droite », on saute 4 SUIT4. Lignes 50 54 : si par contre c'est une fléche de droite, on place la position verticale du curseur (stockée en $25 par le syst@me) dans l'accumulateur. La routine qui débute en $FBC1 va uti- liser cette valeur pour calculer adresse de la premiére colonne de la ligne cou- rante qu'elle range ensuite en $28 et 29, On transfére alors la position horizon- tale du curseur (H) dans Y et on va lire dans la page TEXT le caractére qui se trouve 4 la position H dans la ligne V dont le stockage dans cette page com mence 4 l'adresse contenue dans ADR, c’est-8-dire le caractére sur lequel « passe » la fléche a l'écran. On saute ensuite 4 SUITS (affichage). Lignes 55 et 56 : sile caractére est infé- Pom's n° 6 tieur 4 « SPACE » (caractére de con- tréle), on le refuse. Lignes 57 et 58: si le caractdre est supérieur a Z, on le refuse. Ligne 59 : la suite de l'analyse dépend alors du type de donnée, que lon charge dans le registre Y. Lignes 60 et 61 : si c'est une donnée alphanumérique, on passe a SUIT6. Lignes 62 et 63: caractére est supérieur ou égal on passe a SUIT7. Lignes 64 et 65 : étant donc inférieur & uf n le refuse s'il est différent de Lignes 66 et 67 : s'il est supérieur ou égal 4 ”:”, on le refuse Lignes 68 4 71 : on refuse les guille- mets sils sont en premier caractére (problémes ultérieurs possibles avec les ordres PRINT). Ligne 72 : le caractére étant mainte nant accepté, on l'affiche 4 l'écran. Ligne 73 : on le stocke dans la zone réservée & cet usage, dans la « case » numéro X. Lignes 74 et 75 ; on passe au caractére suivant Lignes 76 et 77 ; on stocke le nombre de caractéres entrés ; fin de routine pour retour au BASIC. Linteraction entre ce programme en langage-machine et le programme BASIC est assurée dans le sous- programme BASIC des lignes 149 a 169. Celui ci est appelé pour chacune des informations 4 fournir. Nous n’en commenterons que les points qui inté ressent directement notre sujet. Ligne 149 : ME=2 ou X=1 signalent que I'on veut un affichage du contenu de la variable. B% =8 assure une sor- tie de la routine directement aprés cet affichage. Ligne 150 : on transmet (instructions POKE) 4 la routine-machine les para- métres de [information a entrer, puis on lance son exécution (CALL 37350). A noter que lon place & ladresse 36 ($24) la valeur H-1 et non H, car BASIC fait ses HTAB de 1 4 40, alors que le moniteur calcule de 0 4 39. Ligne 154: nous sommes déja de retour au BASIC ! Les résultats de la saisie de caractéres se trouvent aux dif- férentes adresses définies dans les lignes 4 a 9 de la routine-machine Linstruction PEEK nous permet de les récupérer. E=9 signale que la touche de fonction ESC a été utilisée et que lopérateur désire « remonter » sur lécran Ligne 156 : LC=0 si seul RETURN a &té entré. En conséquence, on quiltera le sous-programme en laissant le con- tenu de la variable inchangé. Ligne 158 : BASIC récupére mainte- nant les différents caractéres stockés 4 partir de ladresse 785 ($311) et reconstitue la donnée dans son ensem- Récapitulation du code binaire JCALL-154 *PLES.926F FIES~ AP 80 PIEB- AS 07 7D 91F0- AZ 00 86 91F8- 8D FO 72 9200- 88 FO 28 9208- 91 C9 9B 9210~ 05 AY 09 9218- DO 05 A? 9220- AE FO 40° 9228- 00 FO 06 F230=> 9109 “9s 9238- Ci FB A4 9240- 92 C9 AD 7Z48- AB AF 08 9250- AF BO 04 9258- BA BO 99 9260- AZ FO 91 92468- 03 ES 40 11 03 CA 10 FA 04 20 0C FD Cc? E4 07 90 0A C9 20 DD FE 4C F4 bO 09 Eo oo po 85 06 40 C9 AC AE 40 63 92 CP C? 88 DO 0A EO CA Cé 24 40 F4 DO OC AS 25 20 24 B1 28 4C 43 90 AF C9 DE BO Co 01 FO 0c CP C? AD DO 9D CF Eo 00 DO 04 C9 20 ED FD 970 11° F4 91 86 09 60 21 ble (2Z$). A noter que l'on enléve 128 aux codes lus en mémoire pour retrou- ver les codes ASCII standards du BASIC (ceux des fonctions ASC et CHR$ - Cf. pages 138 et 139 du Manuel de Référence Applésoft). Lignes 163 & 167 : on vérifie que la date correspond bien au format voulu, & savoir JJ/MM/AA. Le reste du programme BASIC consti- tue un exemple dutilisation de Liste du programme BASIC Tensemble « routine-assembleur » plus « routine BASIC ». Nous vous laissons le soin d'en conduire vous-méme Yanalyse et d’en déduire la fagon d'inté- grer cet « INPUT généralisé » dans vos propres programmes. En guise de conclusion, nous lancons un appel au peuple! Cette rubrique « Notions de Base » est destinée aux lecteurs qui partent a la découverte de leur Apple, et bien souvent de T'infor- matique elle-méme. Afin que nous puissions lorienter dans un sens favo rable au plus grand nombre, n’hésitez pas 4 nous écrire pour nous signaler les problémes que vous voudnez voir trai- tés. Selon la nature de votre courrier, nous répondrons par des articles du méme type que celui que vous venez de lire, ou par une série de courtes explications sur certains points trés précis. Au plaisir de vous lire... ILIst 1 70 25003 NEXT ¢ HTAB 4: CALL 1 HIMFM? 37340 ~ $683 RETURN 5D = CHRS (4)$ PRINT D$"BLOAD 400 DATA DONNEE ALPHA 1,DONNEE INFUT,OBJ"? GOTO 400 ALPHA Z2,DONNEE NUM L,DONNEE 70 YTAB 21% HTAE 1% INVERSE $ FRINT NUM 2, DATE ZM$}s NORMAL +} INFUT " ? "3Z FAD DATA 144417 520,1,5017 510-24 $3 VTAB 21: CALL - 86 $ = 8,15.6,2,10,15,3,3,12,7,8 LEFT$ (Z%,1)3 IF Z% = "0" OR 420 DATA ENRECGISTREMENT CONFIRM Z$ = "N" THEN RETURN E,ENTREE,APPUYER SUR “RETURN 71 GOTO 70 ’ APRES LECTURE,MODIFICATION 80 VTAB Vi HTAB 13 CALL - 868 »DATE INCORRECTE,CONSULTATIO 81 INVERSE ¢ PRINT Z%}t NORMAL ¢ N RETURN 939 FOR IT = 1 TO St READ LIS(T)? 70 TEXT } HOME + HTAB ZO - LEN NEXT ¢ FOR I = 1 TO (Z%) / 21 INVERSE { PRINT Z¢% TYXCT) »ZVACT) + ZHACL) » ZL + NORMAL ¢ RETURN NEXT 3 FOR © = 1 TO 3% READ 149 VTAB Vi HTAB H? PRINT LEFTS MES(T),1SCL)E NEXT (PO#,LOO" "St VTAR Vi HTAB 440 FOS = Seen e arene eeenesoes Hi IF ME = 2 OR X = 1 THEN PRINT ae ZY$(LL)! IF B% = 8 THEN 1468 soo C it FOR I = 1 TO St2vecl) = 150 VTAB Vt FOKE 8,TY$ POKE 36,H 3 NEXT - 13 POKE 7,L0! CALL 37350 510 Z$ = T$(C)t GOSUB 90°B% 154 LC = PEEK (9)%E = PEEK (4)¢ (C > 1)t FOR IT = 1 TO IF & = 9 THEN REIUKN ZVKZ(L)$ HTAB 1 y CALL - 9468! IF LC = "3 "¢ NEXT 8X = 1 ® (B% = 8) 0 THEN 168 tME = OfD% = 1:V = 23226 = " 158 FOR ZZ = 1 TO LC3Z = PEEK ¢ ‘ESC’ RENVOIT AU NIVEAU SUPE 784 4+ ZZ) - 128:322¢ = 2Z7¢ + RIEUR": GOSUB 80 CHR (Z)% NEXI Szo FOR LL 4% TO StTY = TYZCLL 1620 TF TY = 3 THEN RETURN EY = ZVZACLLIIH = ZHACLLOSLU 1o3 IF MIDS (ZZ%,2,1) = "7" THEN = ZLA(LL) 77% = "0" + 227% 530 E = 03 GOSUB 149: IF E = 9 AND 164 IF MID¢ (2Z6,5,1) = "7" LL = 1 THEN LL = St NEXT ¢ GOTO Z£Z% = LEFT$ (ZZ%,3) + 600 RIGHTS (ZZ%,4) 540 IF E = 9 AND ME = U THEN L% = 165 IF LEN (ZZ$) < > 8 THEN Z¢ EL = ME$(3)3 GOSUB 190: GOTO 1 S30 IF E = 9 THEN LL & LL = 2tHe 49 = 22 GOTO 570 166 Z4 = VAL ( MIDS (Z7Z$,4,22)0% IF 560 ZYS(LL) = ZZ$tME = 2 @ CLL < VAL ¢ LEFT# (ZZ#,2)) > 31 OR Ex 1) Z4 > 12 OR Z4 * VAL ( RIGHTS 570 NEXT tL% = 0 IF C = 3 THEN (ZZ$,2)) < = 0 THEN Z$ = ME 2% = MES(Z)3¥ = Z13 GOSUE 80 $(3)% GOSUB 1903 GOTO 149 $ GET Z#: GOTO 500 167 RETURN 580 ZM% = ME$(1)+ GOSUE 70% IF Z# 168 IF ME = 2 OR X = 1 THEN UTAE = "N" THEN X = 136% = O3D% = Vs HTAB HiZZ$ = ZY$(LL)+ FRINT S$ GOTO 520 ZZ$ SPCC LO - LEN (ZZ$)) 590 C = C + 1% GOTO 510 146? RETURN 600 L% = 02 IF C > 1 THENC = C - 190 VIAB 213 HIAB 1: CALL - B68 4% GOTO S10 ? INVERSE : FOR Z = 1 TO 150 410 7% “TRAITEMENT PRECEDENT"! GOSUE tZi = PEEK ¢€ — 14336)% NEXT 90% FOR Z = 1 TO 2000% NEXT $ PRINT Z$}% NORMAL ¢ FOR Z = ; GOTO S00 AE 22 Pom's n° 6 Ergonomie des programmes Principes généraux Entre deux «bons» programmes, Cest-a-dire écrits sans erreurs, donnant les résultats attendus, avec des temps de travail corrects, etc., ‘un peut étre vraiment bon, et admis comme tel par ses utilisateurs, et l'autre rejeté. La différence tient souvent dans ce qui peut apparaitre comme mineur : la présentation des écrans et la facilité d'utilisation des claviers (ce demier point étant étroitement lié au matériel utilisé). Nous utiliserons le vocable « ergonomie des programmes » pour désigner tout ce qui, dans un pro- gramme, est fait pour faciliter la relation entre [l'utilisateur et !impersonnel « systéme ». La premiére chose qu'll convient de noter est la suivante : hormis quelques personnes trés averties, ayant déja eu maintes occasions de travailler en utili- sant un dialogue écran-clavier, le futur utilisateur ne saura pas expliquer ce qu'il veut, ni choisir en connaissance de cause entre des propositions qu’on lui fera, méme étayées de fac-similés sur le papier: car l'écran «bouge», le champ de vision n’est pas le méme, les contrastes different, les jeux de caracté- res sont différents, toute la dynamique du dialogue s‘efface derriére quelques schémas statiques Une seule solution : simuler le futur outil de dialogue, quasiment 4 I'identi- que si cette simulation se fait sur le matériel qui servira plus tard de support a application réelle ; au plus prés si, par exemple, on simule sur micro- ordinateur une application qui utilisera dans la réalité un gros systme multi terminaux. Mais il faut bien se rendre compte qu’on ne pourra avancer autrement que pas a pas ; la simulation du dialo- gue complet ne sera donc possible que quand T’étude sera suffisamment avan- cée, mais pas trop, afin que peu d’élé- ments soient figés d’avance. Il peut donc étre intéressant de réaliser une premiere approche grace a une « pédagogie du dialogue écran- clavier », appuyée sur un programme de simulation permettant de mieux monitrer aux futurs utilisateurs ce qu'ils peuvent attendre d'un tel dialogue. Pom’s n° 6 Présentation du programme Cest un programme ayant cet objectif que nous vous proposons. Il fait « défi- ler » des genres d’écrans variés, et per met de tester des commandes de divers types (il est bien stir congu pour Apple Il). Le premier écran (instructions 5000- 5040) demande I'entrée de deux don- nées alphanumériques. Il émet une seule exigence : au moins 1 caractére. Il avertit d'une frappe RETURN trop hative par un message clignotant (un traitement des erreurs permettrait en outre d’afficher un message si le fichier demandé ne se trouvait pas sur le dis- que : notre programme complet com- prend cette option). Le deuxiéme écran (instructions 5050- 5095) propose 3 choix (4 avec l'arvét) et demande une réponse numérique. ‘Toute réponse numérique hors four- chette améne un message clignotant (il aurait également été possible de saisir la réponse en alphanumérique, pour évi- ter le message systéme « REENTER » en cas d'entrée d'une réponse non numérique. Quel que soit le choix effectué (sauf arét), ’écran suivant (instructions 5200-5500) propose la liste des pro- duits (bien entendu, dans une applica tion réelle, il faudrait procéder en « cas- cade » a partir de groupes de produits). La réponse se fait en déplacant le cur- seur sur lécran. Sur |'Apple Il, il n'existe pas de fléches de déplacement et , on utilise donc les fléches <— et—+ pour monter et descendre. RETURN provoque la recherche du produit voulu. La frappe de RETURN sur la premiére ligne vierge permet de sortir de option. C’est une régle géné rale : ne pas construire d'écran dont il soit impossible de s’évader. Arrétons-nous un instant sur cet usage de la touche RETURN : elle est nor- malement utilisée sur [Apple Il pour marquer la bonne conclusion d'une action, une entrée de données par exemple. Il s'y attache ainsi, dés qu'on a acquis quelque habitude de TApple Il, un sens positif, d’approba- tion, d'acquiescement. C'est ici le cas Guy Mathieu quand, aprés avoir déplacé le curseur, ‘on se trouve en bonne position : OUI, Cest bien ce qu'on voulait. A lopposé du clavier, la touche ESC peut étre programmée pour jouer un réle négatif, de refus, d’emeur. Le choix entre l'alternance RETURN et ESC passe trés vite dans les mceurs. Ces touches sont utilisées pour contir- mer ou infirmer la suppression d'un article ou le souhait de recherche ou de création d'un article (sous-programme 500-550). Regardons maintenant I'écran de saisie des données relatives 4 un produit (ins- tructions de 2000 4 2350 et sous- programme 300-309). La encore, RETURN trouve son sens d’acquiesce- ment: on [utilise pour conserver la donnée affichée sur l'écran s'il y en a une. Nes contréles sont réalisés en outre sur la longueur des zones et sur la vraisem- blance des données numériques. La suppression d'un article se fait d'une facon un peu artificielle par CTRL-A : une double touche pour éviter toute fausse manceuvre. De plus, une confir- mation est demandée. Il est particulié- rement important pour la tranquillité de Tutilisateur qu'une manceuvre risquant de détruire tout ou partie d'un fichier ne puisse pas étre effectuée par simple effleurement d'une touche. A noter que l'entrée d'un nouvel article se fait en deux stades : d'abord en choisissant sur I'écran des produits une ligne vierge (y positioner le curseur, puis RETURN ensuite, en entrant les données, y compris le libellé). N.B. Dans lexemple proposé, nous n’avons pas programmé loption « trai- tement ». Aspects ergonomiques généraux Dune facon plus générale, quelles sont sur l'Apple II les possibilités de jouer sur Vergonomie des programmes lors du dialogue utilisateur-systeme ? 1 - Le clavier Nous avons déja vu un exemple de gestion du clavier avec l'utilisation des 23 trois touches : RETURN, ESC et barre despacement. Une lacune importante de 'Apple Il est Tinexistance des fl@ches de déplace- ment vertical du curseur. Quand le besoin se fait sentir de déplacer le cur- seur dans les 4 dimensions, il existe deux possibilités : — ou bien désigner des touches alpha- bétiques pour les 4 mouvements (ex. : les touches I, J, K, M utilisées en pro- grammation aprés ESC). C'est trés arti- ficiel ; — ou bien n’utiliser que les deux tou- ches de déplacement horizontal et en inverser la signification 4 l'aide d'une touche jouant le réle de bascule (grace a la basse d’espacement, dans le cas du programme Visicalc) . Dans les éditions de type latin (de gau- che a droite et du haut vers le bas), on a alors : ® une fléche d'avance :—», bas, droite ® une fléche de recul :<—, haut, gau- che. Attention @ utiliser 4 bon escient les deux types d'entrées, en mode GET ou par INPUT (avec le RETURN) : le GET a un aspect définitif et doit étre suivi de contréles, alors que la possibi- lité de retour arriére avant un RETURN a souvent un aspect sécurisant. En revanche, le GET permet d'utiliser toute touche avec une signification par- ticuligre 4 l'application considérée, en particulier d’ailleurs d’autoriser l'utilisa- tion comme en mode INPUT des flé- ches pour !a correction. 2 - Lécran Diabord, n'y point trop écrire ; sauf pour les libellés qui reviennent souvent, et qu'on connait vite par coeur ; !écran est alors un rappel. Eviter des textes trop longs : si possible, n’écrire qu'une ligne sur deux. Une page entiére de consignes sera généralement plus utile sur une feuille d'instructions. Ensuite, on peut utiliser toutes les pos- sibilités de gestion des caractéres : flash et inverse, titres encadrés, ralentisse ment de la vitesse d’inscription... Sion travaille en graphique, utilisation ration- nelle de la couleur et des graphiques. Ne pas en abuser : on remarque au premier coup d’ceil un message cligno- tant isolé. On ne remarque plus rien si ‘on voit trop souvent des flashes, des textes inversés et autres « fantaisies ». 3 - Le son Vous disposez d'une part de la « clo- che », d’autre part de la possibilité de programmer des sons plus complexes, voire de la musique. A utiliser a bon escient. Ne pas oublier que pour l'utilisateur quelque peu habi- tué al'Apple Il, la cloche simple signifie le plus souvent qu'une erreur vient d'étre remarquée par le programme : ne pas utiliser le méme son pour mar- quer une approbation ! Penser aussi a la « pollution sonore » ; un bruit attirant l'attention de temps en temps, sur une erreur par exemple, peut étre utile. Une trop grande abon- dance de messages sunores devient vite initante, et donc inefficace Aspects ergonomiques spécifiques Les observations qui précédent sont valables pour tous les programmes. Chaque programme particulier peut posséder ou non des vertus ergonomi- ques liées au contexte dans lequel opére lutilisateur. Nous n’entrepren- drons pas d’en faire un recensement exhaustif, mais quelques points méri- tent d’étre cités, par exemple : — si les entrées écran émanent dun document, il est nécessaire quielles soient effectuées dans lardre normal de lecture du document ; — si elles résultent de plusieurs docu ments, épuiser, sauf impossibilité abso- lue, les informations provenant d’un document avant de passer au suivant ; — méme chose si certaines informa- tions apportées par I’écran doivent étre recopiées, par exemple pour compléter un imprimé ; — pour les graphiques, calculer les échelles de fagon 4 mettre en relief les phénoménes intéressants @ observer, tout en évitant des difficultés d’interpré- tation des dites échelles ; — sil faut utiliser des symboles, des formulations inhabituelles, assurez-vous quills seront compris sans ambiguités : tout le monde ne sait pas ce qu’est une échelle logarithmique, ou la représen- tation d'un nombre en notation scienti- fique ; il en est de méme du vocabulaire utilisé et des abréviations : ce qui est sans équivoque pour le concepteur du programme ne lest pas nécessairement pour [utilisateur ; — quand un temps d’attente se pro- duit (calcul, lecture de fichier), 'utilisa- teur doit étre prévenu afin qu'il ne s'impatiente pas, ou ne croie pas que Tordinateur est en panne. Trois cas peuvent se présenter : * on connait le temps d’attente (par un nombre d’articles a lire en fichier, ou de boucles de calcul exécuter) : afficher une approximation de ce temps — cf. instruction 5035 du programme ; * le temps d’attente se décompose en phases successives : afficher entre cha- que phase un bref message donnant létat d’avancement — éventuellement, en profiter pour glisser un message rap- pelant a l'opérateur ce qu'il devra faire ensuite ; © un temps relativement long, mais non calculable (c'est en outre le cas du garbage collection, pour qui n'utilise pas l’approche présentée dans Pom’s 2), va se dérouler sans phases intermédiaires : placer un message expliquant ce qui se passe, et fournis- sant si possible le délai maximum au- dela duquel l'utilisateur sera en droit de penser & une défaillance du systéme. Création d’un fichier Pour créer un nouveau fichier, faire RUN 6000. JiLIST PRINT D$"CLOSEPRODULIS" SNUMS? RE 10 Dé = CHR (4): DIM LI#(20): GOSUB i5 TURN o00:ZEROS = " 200 REM "2UNS = " #** LECTURE DU FICHIER PRODUITS #** "3 BOTO 5000 210 PRINT D$"OPENPRODUITS"” ;NOM$;", 80": 100 REM PRINT DS"READPRODUITS" ;NOMS;",R *#* ECRITURE DU FICHIER PRODUITS *** 3CP: INPUT Lis 110 PRINI DS"OPENPRODUITS";NOmM$;",LB0O": Zoe TF ite = "" THEN 280 PRINT D$"WRITEPRODUITS" ;NOMs 240 «FOR I 1 TO 6: INPUT CAI)? NEXT "3CP: PRINT LI¢ 280 PRINT D$"CLOSEPRODUITS" sNOM$: 150 FOR I = i TO 8: PRINT CA(I)= NEXT : N RETUR 24 “Pom's n° 6 300 HOME = PRINT BLISSEMENT = “SETS Z035 IF AS ¢ » CHR (1) THEN z040 § VTAB 3: SRINT "FICHE PRODUIT "s 2036 VTAB 20: PRINT "CONFIRMEZ LA SUPPR VTAB St PRINT "DESIGNATION (* CTR ESSION ";: GOSUE 500 L A’ POUR SUPPRIMER)"3 VTAB 7: PR 2037 #%IF Z = 13 THEN LIS = ""s FOR I =1 SNE RSE TS: TO CA(I) = GO: NEXT = GOTO 2170 305 FOR I= 1706 2038 #%$IF Z 27 THEN RETURN 306 VTAR I + 8: PRINT CG$(I);" "3: IF 2039 PRINT " ": GOTO 2036 CAI) ¢ > @ THEN PRINT CAI) 2040 IF AS = "" THEN VTAB 7: PRINT " " 307 IF CACI) = O THEN PRINT 3Lis: GOTO 2080 308 NEXT 2050 LIS = AS: IF LEN (LI$) ( 6 OR LEN 309 RETURN (LIS) ) S9 THEN GOSUB 15000: VT S00 REM AB 8: PRINT ZERO$;: VTAB 7? PRINT *** GESTION RETURN ET ESCAPE *«* ZERO$;3: GOTO 2030 SOS POKE — 16366,0 2070 VTAB 23: PRINT ZEROS; S10 PRINT “(RETURN/ESCAPE) "; 2080 FOR I= 1708 520 GET Z$:Z = ASC (Z$) 2090 VTAB I + 6: HTAB Sit INPUT AS S25 IF Z ¢ ) 13 AND Z ¢ > 27 THEN PR 2100 IF AS = "" THEN VTAB I + 8: dTAB INT ""32 GOTO 520 32: PRINT CA(I): GOTO 2160 SSO RETURN 2120 IF LEN (A$) = 0 OR LEN (AS) > LG 600 REM (I) OR VAL (A$) >) MG(I) THEN GO *#**% FICHIER NOMS *#* SUB 13000: VTAR I + 8: HTAB Sz: P 610 PRINT D$"OPENPRODUITS” ;NOM$;",L60" RINT UNS: GOTO 2090 620 FOR CP = 1 TO 20: PRINT DS" READPROD 2130 GOSUB 13100: IF ER = 1 THEN ER = UITS";NOM$;",R"5CPs INPUT LIS(CP) 3? VTAB I + 6: HTAB SZ? PRINT UNS: = NEXT GOTO 2090 650 PRINT D*"CLOSEPRODUITS";NOM$: RETUR 2140 YVTAB 23: PRINT ZERO$;!CA(I) = VAL nN (AS) 2000 REM 2160 NEXT ¥** MISE A JOUR DU FICHIER #** 2170 GOSUB 300: VTAB 20: HTAB 1: PRINT 2005 FOR I = i TO 8:CACI) = OF NEXT: G "O.K. POUR ENREGISTREMENT 7": GOS OSUB 200 UB 500 2020 GOSUB 300 2210 IF Z = 13 THEN 2240 2030 VTAB 7: HTAB 1: INPUT AS 2220 VTAR 22: HTAB 1: PRINT "RETURN a ISE EN (EUVRE DU BUS IEEE 488. Utilisation et réalisation d appareils. Par Gérard Bastide et Jean-René Vellas. Plus de mille appareils sont équipés en IEEE 488. Ce livre décrit comment mettre en couvre toutes es possibilités du BUS IEEE, il comprend la description et les syntaxes sur des calculateurs Gifférents de toutes les commandes unilignes ou multilignes, universelles ou adressées et la ase toutes sortes de questions : comment connaitre au premier coup d'ceil les capacités d'un 7 ae appareils peuvent-is communiquer sans requérir intervention ou méme la présente du Ir EMES A MICROPROCESSEURS. Par Daniel-Jean David. est une initiation aux conditions techniques de la revolution micro-informatique. Les différents its intégrés : microprocesseurs. mémoires, bottiers d’entrées-sorties sont décrits ainsi que con de les assembler pour former un systame. Les phases du traitement d'une application et développement d'un systéme a microprocesseur sont décrites, notamment du point de vue du (programmation en assembleur) et des choix 2 effectuer. Envoyer ce bon |, Fue Jacquard accompagné DESIGNATION Nomare| PRIX Br eG -774U0LagMy-#/Mame Ge vote agement & Lsernaton Pi DIFFUSION lophone (6) 007.59.31 6c pour is Belgique ct Lajpecmocers fe Luxembourg, a H idols Ferme Rose. P.3.1.BENCLUX 1180 Bruxelles (par avion : ajoutor 8 FF (75 FB) par livre)| TOTAL ‘Telephone (2) 48.08.50 auCanada NOM__ PRENOM ___ = Strine Montreal Quabec H2x9L1 oe a — a iontreal Quebec. s DIFFUSION Ye” (S14) 8437663 Goto vite 8 a a Pom's n° 6 25 R CONSERVER ": PRINT “SINON RETAP EZ LA LIGNE": GOTO 2020 2240 PRINT : GOSUR 100: HOME : PRINT "@ UTRE ARTICLE ? GOSUB Soo:Lis(CP ) = LI¢ 2350 IF Z = 13 THEN 5200 2400 RETURN 4000 REM *** CONSULTATION *** 4010 HOME : GOSUB 200: GOSUB 300 4020 VTAB 24: PRINT "BARRE D? ESPACEMENT POUR LA SUITE";: GOSUB iz000 4070 FOR I = 1 TO 8:CA(I) = O: NEXT = H OME « PRINT "AUTRE ARTICLE ?": GO SUB 500 4120 IF Z = 13 THEN 5200 4130 RETURN 5000 REM MENU 5005S HOME + VTAB 1: HTAB 7: PRINT "GEST ION DU FICHIER-PRODUITS" 5010 VTAB 6: INPUT "NOM DE L’ ETABLISSEM ENT ? “sETS SoiS IF ET¢ THEN VTAB 3: FLASH ¢ PRINT "AU MOINS 1 CARACTERE S.V.P "s NORMAL * GOTO S010 5019 VTAB 3: PRINT ZEROS Sez0 VTAB 9: INPUT “NOM DU FICHIER-PROD UITS ? "sNOMS 5025 IF NOM$ = "" THEN VTAB 118 FLASH * PRINT "AU MOINS 1 CARACTERE S.V -P, ": NORMAL + GOTO S020 5029 VTAB 11% PRINT ZEROS SO3S VTAR 14: PRINT "PATIENCE POUR QUEL QUES SECONDES" 5040 GOSUB 600 5050 HOME = PRINT "VOULEZ-VOUS ?": BRIN T S060 PRINT "1 — METTRE A JOUR LE FICHIE R": PRINT "2 — CONSULTER LE FICHI ER": PRINT "3 —- EFFECTUER UN TRAI TEMENT": PRINT = PRINT " (9 PO UR ARRETER)" 5085 VTAB i3: INPUT " VOTRE CHOIX ? "38U: IF SU = 0 THEN HOME : PRIN T "AU REVOIR": END 5095 IF SU ¢ 0 OR SU > 3 THEN GOSUB 13 000% VTAB 18: HTAB 18: PRINT UNS: GOTO 5085 5Zz00 HOME +: PRINT "LISTE DES PRODUITS”: VTAB 3: FOR I = 1 TO 20: PRINT L I$(I)! NEXT #HT = SLM = 20: GOSU B 50000 5260 PRINT : IF CP = 0 THEN 5050 S500 ON SU GOSUB 2000, 4000, 10000: GOTO 5050 6000 REM ##%* CREATION DU FICHIER *** 6005 Dé = CHRS (4): TEXT + HOME : VTAB i: HTAB 7: PRINT “CREATION D’UN F ICHIER":ZEROS = " 6010 VTAB 6% INPUT "NOM DU FICHIER-PROD UITS ? "sNOns 6015 IF NOMS = "" THEN VTAB 3: FLASH : PRINT "AU MOINS 1 CARACTERE S.V. Pp, "t NORMAL « GOTO 6010 6019 VTAB 9: PRINT ZEROS 6025 VTAB 12: PRINT "PATIENCE POUR QUEL QUES SECONDES" 6030 PRINT DS"GPENPRODUITS" sNOM$;3",L80" * PRINT DS"DELETEPRODUITS" ;NOMSs PRINT D$"OPENPRODUITS":NOM$:",L80O ” 6040 FOR CP = 1 TO 20: PRINT D$"WRITEPR ODUTTS"+NOM$+",R"sCP: PRINT " EXT * PRINT D#"CLOSEPRODUITS” $: END 19000 REM eee PROGRAMME DE TRAITEMENT *** 10010 HOMF : PRINT "TRAITEMENT NON PROG RAMME" 10020 VIAB 10: PRINT "BARRE D’? ESPACEMEN T POUR LA SUITE GOSUB 12000: R ETURN 12000 REM #***% ATTENTE *** 12010 POKE — 16368,0: PRINT " "; 12020 Z = PEEK ( — 16384): IF Z ¢ = 12 8 THEN 12020 12025 POKE - 163568,0: RETURN 13000 REM *** REFUS *** 15010 VTAB 23t FLASH # PRINT " ENTREE R EFUSEE "= NORMAL ! RETURN 13100 REM *#* CARACT. NUMER, #n* 13110 FOR JJ = i TO LEN (AS) FAR = ASC ( MIDS (AS, JI, 1)) 13120 IF (AR > 47 AND AA ¢ 58) OR AA = 46 THEN NEXT + RETURN 13130 VTAB 23: FLASH = PRINT " CHIFFRES SEULEMENT S.V.P, " 13140 ER = 1:JJ = LEN (AS): NORMAL : RE TURN 15000 REM *** LIBELLES CARACT. *** 15010 DATA CODE ARTICLE (6 CHIFFRE 15011 aie CODE FOURNISSEUR (4 CHIFFRE 15012 ane CODE CASIER (4 CHIFFRE 15013 Aue CODE REAPPRO. (i CHIFFR 15014 BAR POIDS DE LA PIECE (K 15015 Ava PRIX UNITAIRE {FR.CM 15016 Nave STOCK MINT (NOMBR 15017 Dara QUANT. A COMMANDER (NOMBR 15019 FOR I = 1 TO 8? READ CG#(I)= NEXT 15020 DATA 6,4,4,1,7,7,3,3 15025 FOR I = 1 10 8! READ LG(i)? NEXT 15030 DATA 999999, 9999, 2999, 9, 100, 1000, 200, 500 15035 FOR I = 1 TO 8: READ MG(I): NEXT 15200 RETURN 30000 REM *** POSITION DU CURSEUR *** 30001 VTAB 24: PRINT "MONTER ((-) , DES CENDRE (-)) , RETURN": 30002 CP = O: VTAB CP + ? 30005 HTAB HT# GET Z$1Z = ASC (2%) 30007 IF Z = 13 THEN RETURN 30010 IF Z = 21 THEN CP = CP +1 S0015 If Z = 8 THEN: CP = oS = 3 300i7 IF 7 ¢ } 153 AND Z ¢ > 21 AND Z € 9 6 THEN PRINT "ss GOTO 300 05 30020 IF CP <¢ = 0 THEN CP = 0 30025 IF CP >) = LM THEN CP = Lm 30030 VTAB C8 + 2: GOTO 30005 Pom's n° 6 Un programme de HELLO complet Le programme le plus fréquemment utilisé est sans conteste le programme HELLO, ou BONJOUR, qui nous sert & « booter » les disquettes. De nom- breux programmes ont déja été propo- sés a cet effet, chacun ayant ses avan- tages propres. Nous avons voulu réunir dans un programme unique les possibi- lités qui nous paraissaient les plus inté- ressantes, & savoir : — affichage du volume, des secteurs libres et de 40 titres ; —lancement des programmes par enfoncement d'une seule touche ; — chargement jusqu’a cing fois plus rapide ; — test de la carte langage et charge- ment de INTEGER en 5 secondes ; — changement de drive avec les flé- ches gauche et droite ; — delete par CTRL-D suivi du code du programme : — lock/unlock par CTRL-L, suivi du code... ; —load/bload avec affichage des adresses par ESC, suivi... ; — catalogue normal avec la touche "pe — revectorisation du RESFT dans le moniteur par la touche "*” ; — taille du programme réduite a 6 secteurs. Mémorisation sous forme de programme Applesoft Afin d’obtenir un programme 4 la fois court et rapide, il a fallu le réaliser en assembleur ; nous avons utilisé pour cela le BIG MAC. Pour étre « boota ble », un programme doit normale- ment étre écrit en Applesoft ; nous avons donc converti notre programme assembleur B HELLO en programme assembleur grace & la procédure sui- vante : NEW vide la mémoire, 1 CALI. 2061 : appel du programme. assembleur, BLOAD B.HELLO : charge le pro- gramme en mémoire, CALL —151 :passe en assembleur, *AF : FE OC :redéfinit 'adresse de fin de programme de facgon a englober le programme assembleur, CTRL-C :retour a I’Applesoft, SAVE HELLO :sauvegarde du nou veau programme de boot. Sur la disquette Pom’s d’accompagne- ment, nous avons simplement repro- duit le programme HELLO ainsi obtenu. La technique que nous venons dillustrer permet d'incorporer une rou- tine en assembleur 4 un programme Applesoft qui l'utilise. Cela permet de copier ensuite le programme avec un simple LOAD suivi de SAVE, ce qui est plus simple que de devoir faire appel 4 FID pour copier le fichier binaire. Pour fonctionner, HELLO requiert 48K de mémoire (ou plus), le DOS 3.3. et 'Applesoft en ROM. Vitesse de chargement Une remarque relative a la vitesse de chargement : depuis la parution du livre BENEATH APPLE DOS, on sait qu’en fait, c'est le DOS, et non I'Apple, qui est lent. Il lit un secteur dans son buffer en $9600, le recopie 4 son adresse normale et, quand il veut lire le secteur suivant, le disque a déja tourné, obligeant le DOS 4 patienter un tour. Thierry Le Tallec Jacques Tran-Van En chargeant un secteur directement & son adresse sans passer par un buffer, il n'est plus nécessaire d’attendre, c'est tout. Les ZDOS 2.2., DOS 3.4, HYPERDOS, &BLOAD et autres TURBODOS reposent simplement sur ce principe que nous avons déja utilisé dans l'article « Chargez vite vos fichiers binaires » paru dans le Pom’s 4. Le chargement de I INTEGER dans la carte langage se fait de la méme maniére aprés les tests : — Y atil une carte langage ? — Si oui, contient-elle déja l'INTE- GER ? — Sinon, y a-t-il INTBASIC sur la dis- quette ? Structure du programme Le programme comporte une premiére partie, de $80D 4 $C03, qui gére les commande DELETE, LOCK, ..., la lecture du catalogue, etc. La seconde partie, placée en $9AA6 (premier buffer du DOS), assure le chargement du programme et son exé- cution. Cet endroit a été choisi pour que le programme chargé ne puisse écraser ce module vital. Remarques Dans la présentation du catalogue, les symboles suivants sont utilisés - ”*” dour un fichier binaire, "\" pour de l’Applesoft, ">" pour de I'Integer, ”.” pour un fichier TEXT ou EXEC. Le type de chaque programme est pré- senté par un symbole en inverse si celui-ci n'est pas verouillé. 1 LOWASE = { 3( =0 s2 pas de minuscule) i2* Thierry Le Tallec * 2t 13# 34 t oe iat Jacoues Tran-Van ® 4 ORG $800 yleall 2061) 15 # * a+ 16 AHHRHRHE HEHEHE EEE eee tiiitiiiiisttriisetrrts teed ivt €€ * ibe be MENU ULTRA-RAPIDE # 19# / 15 Juin 1982 34 AVEC LOCK-UNLOCK * 20 # 10 # ET DELETE * ae it t at Pom's n° 6 27 SERRE FILENUM EQU $00 FILEPTR EQU $01 TSLPTR EQU $01 LOCKFLE EQU $03 DELFLAG EQU $04 START = EQU $04 YREG Eou $06 RUNLOAD EQU $07 TYPE EQU $0C POINTER! EQU $0E POINTER2 EQU $10 FILEH = EQU $10 INDEX EQ $1? WRITERR EQU $1E WNDLFT EQU $20 WNOWOTH EQU $21 WNDTOP =EQU $22 cH EQU $24 TRAP EQu $48 LOMEN © EQU $69 EOPRGH EQU $AF PGHSTRT EGU $CA ERRFLG EQU $08 YSAV EQU $FB WARMSTRT EQU $300 MANAGER EQU $306 LOCIOB EQU $3E3 SOFTEV EQU $3F2 PWREDUP EQU $3F4 SYMBOL EQU $7DD DIRCTORY EQU $1000 Toc EQU BEGPGH EQU $2FFC BUFFER EQU $9600 TSL EQU $9700 FINALE EQU $9AA4 WARMDOS EQU $9DBF INT EQU $AS9E FLIPCRD EQU $A5B2 DOSEXEC EQU $A5C6 PRNTERR EQU $A702 CLRCOLD EQU $A75B CLNDOS =EQU $A7D4 DOSHOOK EQU $AG5L DFLTORV EQU $AA68 RANE EQU $AA7S PARMLIST EQU $B58B RUTS EQU $8785 108 EQU $B7E8 DRIVE EQU 10+ VOLUME EGU 10B+3 TRACK = EQU TOB+4 SECTOR EQU TOB+5 BUFADR EGU TOB+8 CH EQU I0B+i2 PREVOL EQU T0B+14 CARDON EQU $C083 CARDOFF EQU $C08L LANGUAG EQU $D000 trang du par jpointeur de pon $pointeur de TSL jdrapeau de pam ‘LOCKED’ sdrapeay de ‘DELETE’ jpointeur de début de pon tsauvegarde de Y sdrapeau ‘RUN/LOAD‘ Stupe du pan $pointeurs de diplacesent }de 1’ INTEGER rpoids fort de l’adresse du catal, tindex dans le bandeau tdrapeau de protection-icriture tharge gauche de 1’<cran tlargeur de la fen*tre {eran thaut de le fenvtre <cran position horizontale du curseur ivoir Call Apple janvier 62 }dtbut de le zone variable simple tpointeur de fin de pan sdtbut de program INTEGER drapeau de ON ERR fsauvegarde de Y Sd{part @ chaud du DOS jentree du file manager slocalise 1/I0B jvecteur de RESET tadresse {cran du symbole-commande adresse de dibut du cataloque OIRCTORY+$F38 jpointeur de début de YTOC yadresse de chargenent de 1/INTECER tampon du ler secteur du pam }tampon de la TSL du pgm jler buffer donntes du DOS Sdipart @ chaud du DOS troutine de passage @ 1’ INTEGER sroutine ‘EXEC’ faffiche les messages d’erreur jeonstruction des buffers du DOS freconnecte le DOS 34 disque par défaut }tanpon de nom du programe fparametres du file manager jentrée de la RWIS jparanstres de la RWIS 4 disque fvoluse attendy spiste fsecteur }painteur du tampon de donnfes scommande de la RWIS fvolume trouve jautorise la lecture de la RAN yautorise 1a lecture de la RON jdibut de le carte langage BASCTYP INTCOLD PRNTAX INIT NXTDESC TESTSCT S3SS328355255 SESSZSESSSSR SSE SRE888E8 BasSeae3 23828585 gheSER5 $E000 $6024 $F000 $F 941 SFCIA $FC38 $FDOC $FD96 $FESO $FEO4 $FF20 $FFE9 END SETRST 2 WNOTOP HOME CATALOG #00 jexfcution d’un pan APPLESOFT type du langage jaffiche les 2 octets de X,A jexteution d’un pam INTEGER sinitialisation INTEGER yaffiche les registres A,X ftext jpositionnement vertical du curseur tbip jwonte le curseur jefface 1’<cran jefface la fin de la ligne jentrée d’un caractire jenvoie un retour chariot tva @ la ligne, affiche X,¥,’-’ jaffiche le caract3re dans A saffichage en inverse faffichage en mode normal yINeO sPREO faffiche ‘ERR’ jentrée du moniteur jplein {cran sefface 1/<cran sINGO sPREO quelle configuration ? 48K de ran ? Sbip yrend la main sefface PLE ;d<place le pam en FINALE ;Tevectorise le reset fpour une sortie tplus propre, yer<e une fen*tre scommande lecture pour la RWIS Slit le catalogue ycalcul de l’espace libre disque VTOC-1,Y jdescripteur de piste NXTRACK TESTSCT 28 tsi 0, piste toute utilisee si C = 0, le secteur est utilise tsinon il est libre fsauve Z yiner<Mente le coapteur Pom’s n° 6 OTHRSCT WXTRACK CARDIN SAIASEBLRSESER RARER E a0 Y BESS & 325 FINOINT BESSR2SSSSESH958R5 RSZRSRESRS Pom's n° 6 OTHRSCT COUNTER+1 srecupere Z TESTSCT+2 }secteur suivant spiste suivante jfin de la VIOC ? sde secteurs libres NXTDESC CARDON BASCTYP BASCTYP+1 CARDOFF a4 CARDIN #928 RELAT #620 ‘SEARCH a ‘SEARCH FRSTFIL tlecture carte langage ftype du basic Heriture carte langage tyra-t-il une carte langage? foul spas de carte FINTEGER di j@ chargé ? son, yon jaffiche le cataloque FILEPTR+1 jsecteur suivant du catalaque +B YSAV YSAV tinitialise le pointeur de non tet le save yprictdent pointeur de non 5 snouveay pointeur YSAV 3603 $fin du secteur ? NEXTPAGE }secteur suivant #LOADING-INTBASIC ,}lonqueur de “INTBASIC’ (FILEPTR),Y jcharge une lettre du now NOFILE = fsi 0} fin dy catalogue INTBASIC-1,X fcomparaison avec ‘INTBASIC’ NEXTPGM {si © alors titre suivant, }sinon lettre suivante COMPAR = }fin de le comparaison ? YSAV frfcupire le pointeur de nom (FILEPTR) »Y SECTOR range le # de secteur de la TSL (FILEPTR) »Y NEXTPGM {si effact on le saute TRACK —-;range Le # de piste de la TSL LOADING,X faffiche ‘CHARGEMENT DE L’INTEGER’ $5AF »X #LOCTRK-LOADING FINDINT INIIPTR ROSECT flit la TSL en $9700 4<BECPGM 4>BEGPGH LESS40 LESS20 388 & 8 REZERESSSEIES 3 > SSSR BRESSSIRESSRRSSSSSRSSRSSSSERRSEE Z LOCBUF BOOTPEM POINTERL POINTER2 jinitialise les pointeurs 3430 jd{place $30 pages POINTERI+1 ;POINTER! <- $3000 >LANGUAG POINTER2+1 }POINTER2 <- $0000 (POINTERL) »Y (POINTER2) ,¥ }charge INTBASIC en $2FFC revient avec Y= WOVEINT jdéplace 1”INTEGER en $0000 POINTERL+1 POINTER2+1 WOVEINT page suivante HOME yefface 1’<cran #>DIRCTORY FILEPTR+1 FRSTFIL saute toujours YREG aH ONEMORE FILEPTR+L #808 jentrte du ler fichier YREG FILENUM #0 jpas plus de 40 titres $20 titres par fenttre a : $X=FTLENUHA (FILEPTR),Y $# de piste WXTFILE jsaute si effact ENDCAT = }fin si zero BUFFER, X FILENUM jun fichier de plus FILEPTR+L }sauve le pointeur de non (FILEPTR)»Y jmixe avec le # secteur BUFFER+1 ,X 29, CHATYPE PLUS26 ENDCAT S833 S385 383 SZARSASRSSSSSRSRSSSESRERRBESESRRS Se > BSSERS3sR838R BUFFER+3)X fsauve 1’index 48FF LOCKFLG jabaisse le drapeau de ‘LOCK’ (FILEPTR)»Y }type du fichier LOCKED LOCKFLG LOCKFLG l3ve le drapeau de ‘LOCK’ WF jannule le bit de poids fort BUFFER#2,X 4807 PTYPE CHATYPE TABLE}X LOCKFLG PRINT FILENUM a7 PLUS26 mw 4148 PRINT HS fen inverse si non vérouill¢ saffiche le caractire et ‘-‘ saffiche le caract3re et ‘-’ (FILEPTR)»Y jaffiche le now Us " foherche les caractires NORMDSP de controle, #80 PNAME COUT fet les saute, jtitre suivant iplein <cran 0 RUNLOAD TABY TITLE-1, $3FF,Y Sdrapeau = "RUN" Securseur en haut de 1fcran PVOLUME ;affiche le volume PREVOL LINPRT CLREQL #21 CH COUNTER PFRESCT ENDCATL ENDCAT2 PCHOIX GET3 GET4 GETS HSESEE SmBaSSSRSASRSSSSSRSRSSRSRISSSRSRRISRERBISSSERSESCESERS COUNTER+1 LINPRT #215 TITRE,Y $418, PFRESCT INIT #13 qH jHtab 14 CLREOL 346A 3(/X" clignotant) SETRST-3 jsi reset <> $9DBF @HARMDOS jaffiche ‘x’ ENOCAT2 #960 ‘SYMBOL 413 WESSAGE-1,Y $7CFY jaffiche le message iVtab 22 j(curseur clignotant) PCHOLX OELFLAG LOCKFLG ROKEY = jattend le choix e 0 CETL END sfin si ‘espace’ x" cET2 4HONITOR sreset = $FF4? #>MONITOR SETRST-3 SETRST~1 ENDCAT ey" GET3 4WARMDOS jreset = $90BF S>WARNDOS CHNGRST Rita] GET4 jraz du drapeay fsaute toujours change le vecteur de reset 3"->" = disque 2 jrelit le cataloque 3"-" = disque 1 fesc ? }lve le drapeau de ‘LOAD’ $(/9° inverse ) $etrl-L = lock/unlock 30 Pom’s n° 6 DISPLAY AND 447F STA FILEPTR+ STA SYMBOL LOA BUFFER+2,X $type du pau BNE GET STA TYPE GET? CHP #404 sctr1-D = delete LOA BUFFERt3,X BNE GETS STA FILEPTR STA DELFLAG LOY #30 saffiche le nom choisi LSR LOCKFLG jannule le drapeau ‘LOCK’ SELECT LOA (FILEPTR,Y BPL DISPLAY faffiche le nouveau sysbole STA SYMBOL-1,Y 3@ partir du curseur GETS Ce e"/" ;Compare avec ‘/* STA NAME-L,Y jet l’<crit dans le tampon du DOS BEQ DSPCAT affiche le catalogue normal GET? ce "0" SELECT BCC GET jpas < "0" LOCKFLG jrun ou lock ? cP 4"c" CHECK BCS CET fpas > "Z" PROTECT fdisque protigt en fcriture ? CHP #"A" (FILEPTR) »Y BCC AFTERZ #680 }bascule le bit de LOCK SBC 344 (FILEPTR) »¥ # CATALOG jré<crit le catalogue DEBUT BEGIN x LA PORTE ! DSPCAT JER HOKE 6 feode de ‘catalag’ SETPARM jappel du file manager jattend une entrée clavier DEBUT == fsaute toujours NOERROR = jretour # jcode de ‘WRITE PROTECTED DISK’ DELFLAG jrun ou delete ? 4i NODELETE zi PROTECT disque pratiat en <criture ? a (FILEPTR) »Y OKDEL a0 jlocked -> ne pas effacer ERROR #QNAE jl ef face PARMLIST#8 NANE PARMLIST#9 os] Sconmande delete SETPARM BEGIN BRSSSSBS AGES 288% SRESRSoRaRs | > AFTERZ SBC #149 jealcule le rang ccT fil n’y en a pas tant! smultiplie par 4 x fdevient 1index NODELETE BUFFER, X }# de piste BUFFER+1,X tsecteur de la TSL TYPE NOTEXT DOSEXEC fexec #0F NOTEXT LOCTRK jrange piste et secteur dans 1‘I0B $ricup3re le pointeur de non so $pqm BINAIRE ? ROTSL = faui -> le charger APLSOFT #13 jcode de ‘FILE TYPE MISMATCH’ ERROR #2 span APPLESOFT ? ROTSL. 620 2222 RS5S2SSERB R85 BESAERRS SAS SBE35 Pom’s n° 6 31 ROTSL * MOVETSL FRSTSCT CATALOG BBS am2B8S 380895555352 BESSESSSE9S SeeSSeSS RESSSSSSSRSSERS jessaie de passer en INTEGER ysi Teussi, charge le pan jerreur ‘LANGUAGE NOT AVALATBLE’ ROTSL #401 # }“WRITE PROTECTED DISK’ ? ssauve le resultat tbip ! jaffiche le message d’erreur fen inverse jattend une entrée clavier fest-ce ‘WRITE PROTECTED’ $i Qui, jump BEGIN tsinon affiche le menu flocalise 1/T0B sappelle la RWIS tsi C=0 pas d’erreur feode de ‘1/0 ERROR’ INITPTR ROSECT TSL+1 TSL+254 june autre TSL ? }si pas de suite,.stop FRSTSCT TSL+2 LOCTRK BUFADR+L ROSECT bi} TSL+268,Y trend les TSL cuntiques TSL4256,Y tnon -> saute ipage suivante HOVETSL TSLH2Z TSL+13 LOCTRK 4<BUFFER @>BUFFER: LOCBUF ROSECT FINALE slit le ler secteur en $9600 ytange piste et secteur dans 1/108 Spasitionne le buffer de RHTS scontinve CMD WRITERR #<DIRCTORY VOLUME FILENUM FILEPTR {pointeur de pam = $1000 #DIRCTORY FILEPTR+1 LOCBUF #60F HU scommande RWTS(1=lect, 2={crit.) pdbut du buffer = $1000 JSR NXTSECT SR Int DEC BPL LOA LOA BPL STA NOSCTCH RTS x SETPARN STX LOA STA LOA STA uP x TABLE = ASC TITLE §=IW x oo x ASC TITRE = ASC x ELSE ASC TITRE = ASC x FIN x WESSAGE INV ASC 1 INTBASIC ASC x LOADING ASC x LOCTRK = STY STA RTS x LETSGO LST ORG x LDA LSR BCS LOR BCS x BINARY LDA STA SBC TAY LA STA SBC range piste et secteur dans 1/I0B $4 de secteur = -1 ? jnon -? encore un secteur }teste si protection en tcriturey tdans le slot 4 ! }non pl3ve le drapeau de protection Sretour MANAGER fappel du file mariager “2 UKSRIe" _-pgM’g——" LOWCASE " Yol," “ secteurs libres" " yOL. " SECTEURS LIBRES" “(CHARGEMENT DE L‘INTEGER)" TRACK SECTOR jrange la piste dans 1’I0B ON FINALE TYPE }ricupre le type du pan FINTEGER ? INTROUT SAPPLESOFT ? APSOFT BUFFER START #8 jadresse de début, Sdetermine l‘adr. du buffer(C=0) BUFFER+L START#+L st] 32 Pom's n° 6 LOAD APSOFT BES3R S3SSSSeb8an8 B33 TAY INTROUT S235 $28 BS 328298528 S82859 88559 R 3 Pom's n° 6 LOCBUF fpositionne le buffer de RHTS BOOTPGM jcharge le pow CLEANUP jnettoie les buffers du DOS BRUN ‘START START+1L PRYX2 BUFFER+2 BUFFER+3 PRNTAX jaffiche la lonqueur du pga WARMDCS sortie par reset (START) fexfcute le paw BUFFER calcul de LOMEM EQPRGH © $LOMEM = fin du pgm LOMEM =} =$801 + lonqueur du pam BUFFER+L #08 EOPRGM+L LOMEM+1 44°F fon le charge en $7FF #407 + ($801 - $02) LOCBUF fpositionne le pointeur de buffer BOOTPGM {charge le pgm ERRFLG $800 $ ($800) = 0 CLEANUP LOAD RUN #960 spoke ’RTS’ dans le DOS cold start $90E7 INT passe en INTEGER, HOC yTestaure le code $90E7 — ;dans le DOS cold start, INTCOLD finitialise le LOMEM CLNDOS = jrevient avec A=0 BUFFER PGMSTRT 49% SHIMEH = $9600 BUFFER+1 PGMSTRT+1 PGMSTRT ‘74 PGMSTRT#1 #0 LOCBUF BOOTPGN charge le pga ‘SETHARM LOAD TNTRUN = fexfcute le paw #0C (TSLPTR)»Y $# de piste ENDBOOT jsi piste = 0 fin du chargenent. BOOTNXT ENDBOOT INITPTR LOCBUF SETRST STA TRACK TY LOA (TSLPTR),Y 3# de secteur STA SECTOR STY YREG fsauve 1 index, LOY #108 LOA 4108 JSR RWS secteur suivant du pga BCS END jsortie si erreur LOY YREG trestaure 1’ index Iny BNE BOOTNXT INC TSLPTR+ flit la TSL suivante INC BUFADRH jon charge 296 octets plus haut BNE BOOTPG2 jsavte toujours UMP CLRCOLD warm start & retour DA 00 LOY #TSL — ;buffer de TSL en $9700 STY TSLPTR LOA #TSL STA TSLPTR# STY BUFADR fadresse dy buffer de RWTS STA BUFADR+L RTS JSR CLNDOS § freconstruit les buffers dy DOS STA TRAP $(A=0) WA 422 JSR HOME+2 JSR UP JSR CROUT LOY #<HARMDOS jreset = $90BF LOA #>WARHDOS STY SOFTEV jvecteur de RESET STA SOFTEVHL EOR #$A5 STA PWREDUP BIT UNLOAD RTS vSR CLEANUP MP WARMDOS LST OFF Trucs et astuces Essayez le petit programme suivant ; 1 PRINT “COMMENT VAS TU ?” 5 VTAB PEEK(37) :PRINT ‘.,.¥0;.DE. -POELE”-POKE 2049,066 Pour lapprécier, faire [LIST], puis [RUN] et-[LIST], séparés bien entendu par les traditionnels RETURNs. a Ee | | EE 33 Récapitulation du programme HELLO CALL -151 8iC0 95 24 20 9C FG AZ 4A AD 81C8- 89 9h £9 BF DO O2 AZ 60 *8000.8395 ~ 81D0~- 8E DD 07 AD 0D BY CB OB 81D8-- 99 CF 07 88 DO F7 46 04 20 0C FD C9 AD DO PA 98 CO AA DO OC A0 FF 8D 89 9B 8C $ DO 846 CY DD DO 06 40 9D DO EE C9 95 A? 02 8D EA B7 BD 4C 0D 08 C9 88 DO 01 DO EF C9 9B bo 07 49 3F 8D DD 07 4 C? 8C DO 09 B85 03 8D DD 07 DO AB C9 06 85 04 46 03 10 AF FO S@ C9 BO 90 DE BO 95 C9 C1 90 2C £9 95 CS 00 BO OA AA BC 00 94 BD 48 29 OF 20 FD 06 4A 4A 44 09 10 85 02 96 85 0C BD 03 01 AO 1E Bi 01 99 79 74 AA 88 DO FS 10 24 20 B7 OA Bi 80 71 01 AZ OZ 20 3 4C OD 08 20 S@ FC 20 94 OB 20 OC FD 24 1E 10 6A AZ 04 24 04 10 1D 20 B7 01 10 04 AZ OA DO 75 8D C3 BS A? AA BS AZ 05 20 94 0B 08 AS 0C DO 03 4C C? 04 FO 3B 90 04 bo OD CY 02 FO 31 20 BZ AS FO 2A AZ 04 08 70 02 > FC 20 68000~ 20 2F FE 20 S8 FC 20 89 g008- FE 20 93 FE AD DS 03 C9 8010- 9D FO 06 20 2D FF 4C 00 8018- 03 20 51 AB AD D3 Bp 00 8020- 9D A? 9C BD 01 7D AZ OO 8028- 86 19 ED 04 0C 9D AS 9A 8030- E8 DO F7 AD 9A AP 9B 2 8038- BC 9B AZ 02 86 22 20 5B 8040- FC CA 20 4? OF AO BC BO 8048- 37 1F FO OF 0A 970 FE 08 8050~ EE 467 9B DO 03 EE 68 9B 8058- 28 DO F1 88 DO EY 2C 83 8060- CO AD 00 E0 AC 01 EO 2C 8068- 81 CO C9 4C DO U4 CO zB 8070- FO 08 C9 20 DO 09 Co O0 8078- DO 05 4C 03 09 ES 62 AN 8060- EB 84 FB AS FE 18 69 23 8088- AB 85 FR C9 03 FO EE AZ 8090- 0& B1 01 FO SZ DD DB OF 8098- DO E9 C8 CA DO F3 A4 FE 80A0- 88 88 B1 01 8D ED E7 88 g0A8- B1 01 30 D7 8D EC B7 ED 8060- E4 OB 9D AF 05 EB EO 19 80k8- DO FS 20 69 9B 20 19 OB 80C0- AO FC AY ZF 20 71 9B 20 80C8- SE 9B 84 OE 84 10 AZ 30 80D0~ 86 OF A9 DO BS 11 Bi OF 80b8- 91 10 C8 DO FY Ed OF £6 11 CA DO FZ 20 58 FC AQ 10 85 02 DO 07 AS 06 18 49 23 90 04 E& 02 AD OB AB 84 06 AS 00 C9 ZB 90 03 4C 8F 09 C9? 14 DO OF 85 20 85 21 20 58 FC A4 06 AS 00 OA OA AA Bi OL 30 D3 FO 64 9D 00 96 ES 00 C8 AS OZ OA OA OA OA SEES SY RD a 11 01 9D 01 94 C8 98 9D SF 09 03 96 AY FF 85 03 B1 01 7 20 04 30 04 46 03 46 03 29 7F &? OB 7D 02 96 AZ 07 VA UA BO BD 00 03 CA DO FA BD AS OF 25 OF BO 03 20 87 09 AS 00 C9 1B 19 OE - BO 02 69 2C 67 94 20 87 00 98 09 AZ OF C8 Bi 01 C9 AD AD OD A? 96 20 71 9 20 4C A6 9A BE F4 BF A0 00 8C EB B7 84 01 AP 16 OS 02 20 : AY OF AO it 20 FD 17 OB EE F1 67 CE 10 FS AD ED CO AD 10 02 85 1E 60 8E 49 04 8D Ci BS AD 8D CO BS 4C BO 04 C? 80 BO FS 20 ED FD CA DO EF 20 8E FD 4¢ FA 08 20 ED FD A? AD 4C - ED FD 20 ZF FE AO OF 84 24 A? 00 85 07 20 SB FE BR? AC OB 99 FF 03 88 DO F7 98 AE Fé B7 20 24 ED 20 9C FC A? 15 85 24 AE 47 96 AD 68 9E 20 24 ED AQ OF BY BC 0B 99 18 04 - 88 10 F7 20 2F FB AP OD 34 Pom’s n° 6 de venais de terminer de taper ce magnifique programme d’Othello publié par une de mes revues préférées et javais fait plusieurs parties plus ou moins brillantes de ma part quand, au beau milieu d'une partie passionnante, la sentence tomba comme un couperet de guillotine : SYNTAX ERROR IN LINE 980. Horreur ! ! ! Je listai la ligne 980 : il manquait un deux points entre un HOME et un GOTO, ce qui m'avait échappé au cours des nombreuses relectures du programme Cette histoire a déja di se produire, de fagon plus ou moins semblable, chez nombre d’entre vous. Aussi m’écriai-je alors: plus jamais! Je mvattelai a Youvrage et pondis le programme d’analyse syntaxique (SNTX) ci-joint. Ce programme répond 4 trois objec- tifs : c'est tout d'abord un utilitaire qui détecte les SYNTAX ERROR et les TYPE MISMATCH ERROR avant lexécution d'un programme en Apple- soft ; secundo, il est didactique quant & Ja forme : c'est un programme que jai voulu trés structuré afin de bien illustrer la logique de la programmation et que Jai truffé de remarques (presque une instruction REM par ligne) ; tertio, il est didactique quant au fond : son étude aide 4 comprendre comment fonc- tionne l'analyse syntaxique qui est une des trois activités fondamentales d'un interpréteur (avec la gestion des varia- bles et celle des piles — les piles de lApplesoft permettent de gérer les GOSUB et les FOR...NEX1). Comment utiliser ce programme a) Programme sur cassette Il faut taper les instructions suivantes, le programme a étudier étant déja chargé en mémoire : POKE 1912, PEEK (103) : POKE 1913, PEEK (104) POKE 1914, PEEK (175) : POKE 1915, PEEK (176) Cela permet de cacher les pointeurs de début et de fin de programme (adres- ses 103 et 104, 175 et 176 respective- ment) dans les mémoires 1912 4 1915 (qui semblent faire partie de la page texte, mais qui en réalité n'en font pas partie — voir le manuel de référence de APPLE Il). Pom's n° 6 Un analyseur de syntaxe POKE 103, PEEK (175) : POKE 104, PEEK (176) POKE PEEK (104)*256—1,0 Cela permet de charger le programme d'analyse syntaxique SNTX 4 la fin du programme a étudier. LOAD charge SNTX DFI. 1,0 met en place les pointeurs de SNTX RUN lance SNTX. (103) + PEEK b) Programme sur disquette L'opération ci-dessus est réalisée auto- matiquement par un fichier EXEC nommé SYNTAXE, fabriqué par le programme en Applesoft FAIT SYNTAXE cijoint. La procédure & suivre est la suivante : RUN FAIT SYNTAXE crée le fichier EXEC LOAD Nomprog — Nomprog est le nom du programme 4a analyser EXEC SYNTAXE change les poin teurs et lance SNTX. Fonctionnement du programme SNTX Fonctionnement général Le programme commence par deman- der le numéro de la premiere ligne 4 étudier. Puis, ligne aprés ligne, il indi- que si chaque instruction est correcte ou non. SNTX s'aréte automatique- ment aprés l'analyse de la demiére ligne du programme étudié; il demande alors 4 l'utilisateur sill veut retoumer au programme initial : si non, il laisse le programme SNTX en place ; si oui, il rétablit les pointeurs du programme initial. On peut si on le désire interrompre le programme SNTX par CTRL-C ou RESET ; pour retourner a ce moment- 14 au programme initial, il suffit de faire GOTO 12000, a la suite de quoi SNTX pose la question du retour. Messages d’erreur et indications 0 CORRECT erreur) 1 INSTRUCTION NON RECON- NUE (instruction sans Olivier Herz 2 (signe ou « token » de I'Applesoft) ATTENDU 3 (variable ou fin d’instruction) ATTENDUE 4 NUMERO DE LIGNE >63999 5 NOMBRE INCORRECT (nombre réel dans le programme) 6 EXPRESSION INCORRECTE 7 CONFUSION DE TYPE (type mismatch error) 8 INSTRUCTION AMPERSAND 9 INSTRUCTION CALL 10 FONCTION USK 11 INSTRUCTION REM 12 INSTRUCTION DATA 13 GET NUMERIQUE Les erreurs 1 4 7, fatales 4 l'exécution, sont indiquées par un beep sonore. Les messages 8, 9 et 10 indiquent des erreurs potentielles - il s'agit d’instruc- tions qui appellent le langage machine et peuvent prendre en main la syntaxe du programme (par exemple & X HPLOT ou CALI. 768,A) ; aussi, dans ce cas, SNTX émet un message d'erreur et ignore la fin de l'instruction {attention : il se peut qu’exceptionnel- lement &, CALL ou USR nécessitent pour leur SYNTAXE le symbole deux- points, par exemple CALL 768:A ; dans ce cas, SNTX peut indiquer une erreur a tort). Les messages 11 et 12 indiquent une instruction un peu spéciale ; la syntaxe de DATA est déterminée, uniquement 4 Texécution, par une instruction READ et un REM ignore la fin de la ligne (ne pas faire REM BLABLA ; PRINT A$). Alors SNTX émet le mes- sage d’erreur et ignore la fin de I'ins- truction pour un DATA, la fin de la ligne pour un REM. Le message 13 indique une erreur un peu spéciale : GET A est par exemple licite en Applesoft mais si, en réponse & cette instruction, l'utilisateur tape une touche autre qu'un numéro de 0 a 9, ‘on obtient une SYNTAX ERROR. Le GET numérique est donc a proscrire au profit de GET A$:A=VAL(A$), par exemple. Il faut signaler que les erreurs indiquées ne sont pas toujours celles faites par lutilisateur : par exemple A=1B.. engendrera le message FIN D'INS- TRUCTION ATTENDUE, que I'utilisa- teur ait voulu écrire A=1:B=2 ou Paps eats 35 A=1+B; de méme, GET(AS$(B$)) sera qualifié non pas de CONFUSION DE TYPE, mais par un GET NUMERI- QUE (Cest en quelque sorte ici un «bug» de SNTX, mais il était trop com- pliqué de faire autrement). ~ Notons que SNIX reléve des erreurs que l’Applesoft ne voit pas. Par exem ple, GOTO 123A$ passe en Applesoft. ce qui est da au fait que, celui-ci étant interprété, il ne regarde pas demére 123. Une ligne du genre 10 PRINT « BLA- BLA sera notée EXPRESSION INCORRECTE par SNTX alors que lApplesott tolére loubli dus « quote » en fin de ligne. L’Applesoft supporte IF A$ THEN... ou encore ON I GOTO sans numéro de ligne, ce qui ne sert a rien et est dénoncé par. SNTX. De méme pour STORE A$, instruction permise par l’Applesoft alors qu'elle ne stocke sur cassette que les adresses et les longueurs des chaines du tableau A$ et non les chaines elles-mémes. Enfin, 'Applesoft ne vérifie la syntaxe de Texpression située aprés DEF FN F(X) = que si la fonction FN est appe- lée au cours du programme, par exem- ple PRINT FN F(2xl), alors que SNTX analyse la syntaxe de tout ce qui suit le DEF FN. En revanche, SNTX ne signale pas les autres erreurs d’exécution, comme les OUT OF MEMORY sil y a par exem- ple trop de IF THEN, FOR NEXT ou GOSUB emboitées ; les OVERFLOW, méme pour les constantes réelles dans le programme (SNTX aurait pu le faire, mais c était trop fatiguant !) ; ou encore Texistence de plus de 88 dimensions dans un tableau (ne soyons pas ridicu- les !) ; enfin, tout « trafic » fait directe- ment sur les octets du programme et qui change la «tokenisation » peut dérouter completement SNTX. Analyse du programme Commengons par indiquer, 4 l'usage des puristes, que ce programme n’est optimisé ni en place mémoire, ni en vitesse d’exécution. En effet, pour aider lacompréhension du programme, on a préféré le structurer au maximum, méme si cela parait parfois peu astu- cieux (sous-programmes appelés une seule fois par exemple). Nous n’indi- querons ici que les grandes lignes du programme, les nombreuses REM qu'il posséde expliquant les détails. La ligne de programme Applesoft Indiquons en préambule comment est faite une ligne de programme Apple- soft. Les deux premiers octets repré- sentent l'adresse de la ligne suivante {octet bas, puis haut comme toujours) : si cette adresse est nulle, c'est qu'on a atteint la fin du programme. Les deux octets suivants indiquent le numéro de ligne (de 0 & 63999 en principe — octet bas puis octet haut bien entendu). Enfin, la ligne est représentée de maniére « tokenisée » : les octets valant de 1 4 127 indiquent un carac- tére ASCII et ceux valant de 128 & 234 indiquent un code («token ») de lApplesoft (voir Pom’s 4 pages 44 et 45), la fin de ligne étant indiquée par le code 0. Le programme Il commence par un saut @ la ligne 20000 pour initialiser le tableau des erreurs, demander le numéro de la premiére ligne a étudier et la chercher, en retrouvant l'adresse du début du programme 4 étudier dans les mémoi- res 1912 et 1913. Puis il saute en 10000 pour débuter Tanalyse : il indique le numéro de la ligne et celui de I'instructon dans la ligne puis, en fonction du « token » de linstruction, il saute vers une des lignes 3000 A 3500 (étude des « tokens ») avant d’écnre le message d’erreur (ligne 100 4 150) et de passer a la prochaine instruction (ligne 10020). Pour l'étude des « tokens », on utilise des petites routines situées avant la ligne 1000. Le ccour de [étude syntaxique est constitué par l'analyse des expres- sions : il s’agit des routines débutant en 600 (nom de variable), 1000 (expres- sion numérique) et 2000 (expression chaine), qui s'appellent les unes les autres : et oui ! le BASIC est récursif, le probléme étant qu'il ne posséde pas de variables locales, difficulté contournée par l'utilisation de tableaux (VAR, Al et A2) et d'une pile (1, I1 et 12) notant Yenfoncement dans la récursion (lignes 670, 1330 et 1620). Notons importance de la variable FRR dans ces routines :dés qu'une erreur est trouvée, ERR n’est plus nul et l'on sort immédiatement des sous-programmes récursifs par les multiples issues de secours IF ERR THEN RETURN. Aprés le retour au niveau général du programme (lignes 3000 et suivantes), Tanal

Showing the first 100000 of 193157 characters.

mp.ls