Skip to main content

magazine poms27

  • PublicationApple Periodicals
  • Pages76
  • Sourcemagazine_poms27.pdf
← Magazines magazine poms27
/ 76
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
Text content (OCR)
NUMERO 27 - PRIX45F ISSN : 0294-6068 we . Q o 3 = LES BEST SELLERS Systéme ProDOS sur Apple par M. Cottini — 328 pages 190,00 FF Programmation systéme de |‘Apple par M. Cottini — 320 pages 190,00 FF Apple, Modems et serveurs par A. Mariatte — 224 pages 130,00 FF * Clefs pour Apple // 65C02 par N. Bréaud Pouliquen 172 pages 130,00 FF Appleworks au travail par J.M. Jego et A. Gargadennec 192 pages 50 modéles Multiplan pour gérer sur Apple et IBM/PC par P, Gysel — 200 pages 160,00 FF * 130,00 FF * Apple, logique et systémes experts par R. Descamps — 224 pages 120,00 FF * Création et animation graphique sur Apple 11 par G, Fouchard et J.Y. Corre Livre-disquette 335,00 FF Super Jeux Apple par J.F. Sehan — 256 pages 120,00 FF ENVOYER CE BON AC! SER MAC Clefs pour Macintosh par F_ Blanc et P. Brandeis 204 pages Multipian pour Macintosh par H. Thiriez —312 pages 150,00 FF 110,00 FF * Le livre de Jazz par J.C, Krust et P. Auchatraire 312 pages Basic Microsoft 2.0 sur Macintosh par M. Miller et K. Knecht 380 pages 220,00 FF 250,00 FF Mac Astuces - Mac et Mac Plus Deuxiéme édition par H. Thiriez — 288 pages 160,00 FF * Des explications claires sur de nombreux aspects du Mac et de multiples astuces sur son systéme et ses logiciels courants. Le livre d’Excel sur Macintosh par P. Auchatraire — 384 pages 245,00 FF Découvrez progressivement grdce ad des exemples le tableur d'Excel sur Mac et Mac Plus, 4 PARAITRE Macintosh efficace par P. Brandeis et F. Blanc 168 pages 150,00 FF BP 86 — 77402 Lagny/| DESIGNATION PRIX 0 Paiement par CO Paiement (P.C.V. Dif In uniquement) Frais de port | 10,00 FF 3 Date d’expiration CO Je demande le catalogue P.C.V. gratuit Nom TOTAL Prénom _ . : Rus, : Sigoasuress ville Code Postal a s 2 = CREATIO ET ANIMATION: GRAPHIQUE: SUR APPLE! ~_ LELIVRE o°ExceL SUR MACINTOSH Gagnez dit temps ¢ Ne recopiez pas tous les programmes du livre, commandez la disqueite qui vous les fournit directement utilisables sur votre ordinateur Prix : 150,00 FF en vente par correspondance uniquement @ P.S.I. Numéro 27 novembre-décembre 86 Editorial o: Hervé Thiriez Page5 Mise En Page Georges Zwingelstein x) fk Page 40 TéléAlarme Télématique Bernard Hoyez et Jean-Luc Nail (i+]) [7e] eae) Page 6 a & MacAstuces ES Page 2 a S Essais aay] a8 Page 43 Un carnet d'adresses Boris Fivolewski Minitel & Macintosh Jean-Luc Bazanegue Bu — 0) Fel eMiniiel ns a) SS) Page 11 aR 3 Minitel & Apple // Ejectez les disquettes sid Christian Piard 3, 5 Bruno Fénart Tos es ee Pare ss MeN (77 _— 2 age VApplellGS (% , L'apprenti-FORTHier = Fej Nissuorgsky Ui n crayon Optique + We Christian Piard (i+) Ue] [ve] J : Page 19 aw LZ — Carte Super Série Micro-informations % et CP, /. M Seconde partie Jean-Michel Gourévitch Page 70 Jean-Frangois cs ; [7e]] Rabasse Bibliographie o: =] Page 29 Alexandre Duback Page 73 Les annonceurs ; Apple : pages 38 et 39, Badaroux C.A. : page 37. Infomag : page 75. PSI: page 76. Editions MEV - 12, rue d'Anjou - 78000 Versailles, Tél. : (1) 39 $124 43, Directeur de la publication : Hervé Thiriez Pom's n° 27 Pom’s présente : a Ordic ll: Destiné aux amateurs de mots croisés ou de Scrabble, cette base de données, due @ Roland Jost, permet de trouver un mot de longueur donnée dont on ne connait que quelques lettres. pour Apple ][+, lle, He+, ile Lal Ordico contient plus de 15000 mots classés en 70 rubriques. Recherches et affichages sont rapides : un fichier de 1500 mots est chargé en moins de 10 secondes et exploité quasi-instantanément. Il est bien sir possible d'ajouter des termes aux divers fichiers, de créer de nouvelles rubriques. Voici quelques rubriques : lére face : Acteurs, Animaux, Armes/guerres, Auteurs américains, Auteurs anglais, Auteurs frangais, Chimie, Cinéastes, Coureurs cyclistes, Départementslrégions, Dieux/déesses, Familles végétales, Femmes célébres, Hommes politiques, Iles, Jeux/sports, Minéraux, Montagnes, Musiciens jazz, Musiciens, Parties du corps, Peintres étrangers, Peintres frangais, Riviéres/fleuves, Saints/saintes, Savants/inventeurs, Sculpteurs, végétaux, Vétements, Villes 2éme face : Athlétes, Boxeurs, Cantatrices, Cols, Cosmonautes, Coureurs automobiles, Déserts, Détraits, Doctrines philosophiques, Drogues, Escrimeurs, Explorateurs, Gymnastes, Haltérophiles, Judokas, Lutteurs, Maladies, Maréchaux de France, Médicaments, Nageurs, Patineurs, Poissons, Présidents américains, Skieurs, Ski nordique, Unités, Villes olympiques Exemples : Un musicien dont le nom comporte 7 lettres, les 2me et S¢me sont des ‘E’, Tapez : —E--E--. Vous obtenez instantanément : BENNETT DEBOECK DELEEUW GEVAERT LESUEUR PEDRELL PEETERS WELLESZ Dans les acteurs, -A-——-E vous donnerait : CARETTE PALANCE RACETTE RANDONE RAYMONE VALLONE et----H-: CAUCHY CEECHI ENIGHT VAUGHN WRIGHT ------- dans les femmes célébres donnerait 32 noms... Disquette double face et documentation : 200,00 F franco. Bon de commande page 74 ve — 4 Pom's n° 27 Editorial Trait d'union entre la série // et le Macintosh ? I ressort de nos premiers contacts avec le LIGS qu'Apple a réussi d construire un systéme ouvert, pratique comme le Mac, doté de la philosophie Mac, la couleur en plus, le 68000 en moins. Le cété évolution de l’Apple // est @ notre sens un atout décisif pour les adeptes du prédécesseur : il était malaisé de passer du 6502 au 68000 car il s‘agit de deux mondes différents. Avec le 65816, on se sent chez soi et, d en croire nos entretiens téléphoniques, nombre d’entre-vous sont déja séduits. La présentation de la page 65 vous en dira plus. Le numéro 1 de Pom's est sorti en septembre 81, 435 F ; plus de cing ans aprés, nous sommes hélas obligés d'augmenter le prix pour la seconde fois, le numéro passant a 45 F. Le tarif était resté stable depuis le numéro 9, ce qui reste honorable, d'autant plus que la densité d'informations s'accroit de numéro en numéro : la typographie réduite pour les listings nous permet de vous proposer des programmes toujours plus riches. La ot nous pouvions vous proposer une routine a utiliser dans vos programmes, un programme complet (sept présentement), d'uilisation aisée, trouve sa place. Comme vous le découvrez, ces pages sont trés orientées vers la communication. Le Minitel prend la dimension d'un phénoméne (on parle de deux millions d'appareils en service @ la fin de cette année) et Pom’s devait s'y consacrer car la gratuité de ce modem nous donne une ouverture vers la communication, ouverture qu'il serait dommage d'ignorer. Un systéme de Téléalarme et des logiciels d'enregistrement et restitution des écrans sont au programme : l'utilisation de la prise péri-informatique et du modem vous sera bientét familiére. Autre aspect de la communication, le protocole XMODEM sous CP/M qui décrit l'art et la maniére de transmentre des informations avec l'assurance qu'elles sont bien comprises. Pour l'Apple //, deux autres programmes d'utilisation immédiate : l'un pour approcher le FORTH, l'autre pour gérer un carnet d'adresses, doté d'une bonne ergonomie. Ce dernier recoit de facon optionnelle le composeur téléphonique des numéros 22/23 ce qui forme alors un ensemble intéressant. Nous n'abandonnons pas l‘aspect utilitaire des routines chéres a Pom’s : un crayon optique, pratique, sera certainement connecté demain a l'entrée des maneties de jeux de votre /le ou l/c. Autre utilitaire : comment éjecter des disqueties 3’5. Pratique également, mais sans rapport, l'application ‘Mise En Page’, euvre d'un auteur passé récemment de l'Apple {/ au Macintosh. Hervé Thiriez Ont collaboré Ace numéro: Alexandre Avrane, Jean-Luc Bazanegue, Bruno Fénart, Boris Fivolewski, Jean-Michel Gourévitch, Olivier Herz, Bernard Hoyez, Gérard Michel, Jean-Luc Nail, Fej Nissuorgsky, Christian Piard, Jean-Frangois Rabasse, Hervé Thiriez, Georges Zwingelstein. Directeur de la publication, rédacteur en chef : Hervé Thiriez. Rédacteurs : Alexandre Avrane, Olivier Herz. Siege social : Editions MEV - 12, rue d’Anjou - 78000 Versailles. Tél. : (1) 39.51.24.43. Publicité : Editions MEV. Diffusion : N.M.P.P. Impression : Rosay - 47, avenue de Paris - 94300 Vincennes, Tél, : (1) 43.28.18.63. Pom's est une revue indépendante non rattachée & Apple Computer, Inc. ni & Apple Computer France S.A.R.L. Apple, le logo Apple, Mac et le logo Macintosh sont des marques déposées d'Apple Computer, Inc. =J Pom's n° 27 5 TéléAlarme Téléematique Bernard Hoyez, Jean-Luc Nail e développement paralléle de la micro-informatique et de la télématique fait souvent voisiner sur une méme table micro-ordinateur et Minitel. En dehors de leur air de famille, ils s'ignorent souvent l'un l'autre. I] suffit cependant de peu de chose pour les marier et que naissent des applications nouvelles. Celle que nous vous présentons s'adresse 4 un Apple //, mais la transposition est réalisable simplement sur un autre micro-ordinateur ayant un port série. Peut-on apprendre 4 notre ordi- nateur a téléphoner tout seul, c'est-4-dire composer un numéro et répondre intelligiblement ? On peut envisager par exemple la connexion du haut-parleur interne sur la ligne téléphonique (par l'intermédiaire d'un transforma- teur de téléphone). Ce dispositif permettrait a l'Apple de servir de répondeur téléphonique, en utili- sant un programme de synthése vocale par exemple. Malheureu- sement, la synthése et la recon- naissance vocales sur un Apple //, sans périphérique spécialisé, n'offre pas de bons résultats. Aussi, notre réalisation n'utilisera pas la parole comme moyen d'échange, mais le texte. Rangez donc votre combiné téléphonique dans le placard et sortez votre Minitel qui s'avérera plus adapté a Ja situation. Le principe Plus qu'un simple dispositif d'alarme, cette réalisation est un véritable systéme de contréle 4 distance d'une installation. Le cas choisi ici, un dispositif anti- cambriolage, nous servira d'exemple, mais vous pourrez I'adapter a la surveillance d'appareils mécaniques, électri- ques ou scientifiques. Les acteurs de la piéce sont les suivants : + d'un coté l'Apple avec pour acolytes des capteurs, des relais et un MINITEL ; + de l'autre coté, Monsieur X ou un complice, Monsieur Y, comme lui possesseur d'un Minitel ; * entre les deux, la ligne télépho- nique. Le scénario se déroule ainsi : Acte 1: une maison isolée. Arséne Lupin crochéte la serrure. Au moment od la porte s'ouvre, un microcontact se ferme. L'Apple, en chien de garde, détecte l'ouverture. Aussitét, il compose secrétement le numéro de téléphone de Monsieur X. Acte 2 : la sonnerie du téléphone de Monsieur X retentit. Monsieur X décroche le combiné et, dans I'écouteur, lui parvient un sifflement aigu, quelque chose qui lui rappelle le 1700 Hertz de l'annuaire électronique. Monsieur X a compris et connecte son Minitel. [I voit apparaitre sur son écran une supplique le pressant 2 se manifester. I] frappe sur son clavier la réponse souhaitée, Alors, un message plus explicatif s'offre 4 ses yeux : le lieu d'effraction, la position exacte du circuit atteint, l'état de certains capteurs. Une question lui est enfin posée : doit-il ordonner a l'Apple une riposte sur le lieu de leffraction et laquelle ? Variante a l'acte 2 : la sonnerie du téléphone de Monsieur X retentit. Monsieur X est absent. Au bout d'une minute, l'Apple impatient raceroche, puis compose le numéro de Monsieur Y, autre familier qui est heureusement bien chez lui... etc. (cette variante peut étre répétée jusqu’a épuisement de l'agenda). Acte 3: Monsieur X (ou Y) déclenche la riposte adéquate en tapant le numéro sur son clavier (une siréne, les gaz paralysants, ou le pulvérisateur d'huile de putois, au choix du scénariste). Happy end, le voleur est arrété. Le dispositif Les éléments nécessaires a la réa- lisation du systéme de téléalarme sont les suivants : - un Apple ][{+ ou, de pré- férence, //e (pour le //c c'est plus complexe) muni d'une carte super-série (SSC entre nous) ; * un Minitel réversible (pres- que tous le sont maintenant) ; * un petit circuit de compo- sition automatique de nu- méro semblable 4 celui proposé dans le numéro 22 de Pom's ; * un certain nombre de micro- contacts 4 aimants (autant que de portes ou de fenétres a protéger). Ces micro-contacts équipent les dispositifs de sécurité. Normalement, en veille, ces contacts sont fermés. Remplacer l'ampoule par une ampoule a contacts ouverts lorsque le plot aimanté est rapproché. Les micro-contacts sont groupés, en série, sur une entrée d un bit (boutons-poussoirs). Il y a 3 entrées (PBO, PB1, PB2) sur la prise de jeux, vous pourrez donc avoir trois groupes différents de micro-contacts. Vous reliez l'autre borne de Vinterrupteur au +5 volts (broche ] du connecteur interne), via une résistance d’environ 1 KQ pour atténuer le courant. Pom's n° 27 Rappelons que les entrées logi- ques sont accessibles sur les broches 2, 3 et 4 du connecteur interne ou sur les broches 7, 1 et 6 du connecteur arriére du ie. + de 0 43 relais, selon les be- soins, montés selon le méme principe que pour le compo- seur de numéros, Ces relais sont connectés aux sorties- témoins ou annonciateurs, Les sorties logiques sont acces- sibles sur les broches 15, 14, 13 et 12 du connecteur interne (hélas pas sur le connecteur arriére), Comme l'une de ces sorties est déja occupée par le composeur de numéros, trois sont encore disponibles (AN1, AN2 et AN3) ; * de 0 4 4 capteurs a résis- tance variable ou potentio- métres de 150 KQ. Ces capteurs seront reliés direc- tement aux entrées des manettes de jeux (GCO, GC1, GC2 et GC3). Dans le programme proposé, nous ne ferons que lire la valeur prise par ce capteur, mais vous pouvez bien entendu envisager de déclencher I'alarme au-dela d'un certain seuil. Une application classique peut étre la détection d'incendie ou de gel, 4 l'aide d'une thermistance. Une valeur préconisée pour cette thermistance peut étre de 15 KQ.a la température ambiante et un rapport R 25°/ R 50° entre 9 et 10. Des essais ont montré la linéarité de la fonction R = f{ PDL (x)). Pour PDL{(x) = 255, la pace est environ de 115 Ki D’autres applications : adapter une photo-résistance pour déclen- cher en fonction de la lumiére ambiante, une jauge résistive de comrainte en fonction d'un effort ou d'une pression, un accéléro- meétre en fonction de chocs... * une liaison SSC-MINITEL : plusieurs solutions s'offrent & vous. Se reporter a la présentation générale page 53 et au plan de cablage dans Yarticle Minitel/Apple page 55. Attention si vous étes bricoleur, ne réunissez votre Minitel a votre Apple qu‘apres avoir débranché sa prise secteur. Il ne suffit pas de l'éteindre, mais carrément de Vécarter du 220 volts, car le pauvre n'a qu'une seule tare, il ne posséde pas de transformateur d‘isolement. La carte SSC est logée dans le slot 2. Pour une autre implan- tation, quelques modifications doivent étre apportées au programme. Enfin quelques réglages prélimi- naires permettent de s'affranchir de lignes de programmes super- flues. Voici la configuration : swi sw2 on on or QOOOO00} (ore OQ00000 modem. a 4 configuration S de teats terminal SSC Apple Le programme Trois sortes de considérations sont abordées dans I'écriture du logiciel de téléalarme : la gestion des entrées/sorties sur le connec- teur de jeu, la programmation de 'ACIA de la carte super-série et enfin l'utilisation du Minitel. La prise de jeu, prise au sérieux Pourquoi chercher plus compli- qué ? Le connecteur de jeu offre une variété de signaux d'entrées/ sorties propre A nous satisfaire. Vous pourrez trouver, page 53 de ce numéro, un article sur les problémes généraux de liaison Apple/Minitel A chaque entrée logique est associé un commutateur logiciel. Leurs adresses-mémoire sont -16287 A -16285 ou $CO61 a $C063. C'est le bit de poids fort (bit 7) qui informe de 1'état de la commutation alors que le reste de Toctet est indéfini, En Basic, il suffit de lire le commutateur avec un PEEK et de le comparer avec la valeur 128. Si la valeur est égale ou supérieure a 128, le commutateur est 1 ou, pour notre application, le micro- contact est fermé (effraction). Pour les entrées analogiques, l'Applesoft donne un moyen rapide d'évaluation par I'instruc- tion PDL, avec pour argument le numéro (0 4 3) de la manette. Chaque capteur doit évidemment étre étalonné. Pour les sorties logiques (ici les telais), la commutation logicielle utilise cette fois une paire d'adresses, une met I'annoncia- teur a O tandis que l'autre le met a 1. Le simple fait d'accéder A une adresse (une lecture par exemple) suffit pour l'activer. Le composeur automatique de numéros téléphoniques illustre un exemple de leur programmation. Les trois paires d'adresses libres vont de -16294 ($CO5A) a -16289 ($COSF). L'ACIA, du travail en série La maniére la plus simple dutiliser la SSC est encore de se servir du ‘firmware’ de la carte. Tapez les commandes PR#2 et IN#2 en mode direct, ou précé- dées par un CHR$(4) dans un programme Basic, et le tour est joué, Tout ce que vous tapez sur le clavier de l'Apple est instantanément tranféré sur les écrans de l'Apple et du Minitel, et de méme si vous tapez sur le clavier du Minitel. Le revers de cette facilité est, d'une part une certaine lenteur et, d'autre part, un manque de contrdle sur les incidences du logiciel. Pour ces raisons, nous avons préféré programmer direc- Pom's n° 27 tement les entrées-sorties de 'ACIA (I'ACIA, ou ‘Asynchro- nous Communications Interface Adapter’ est le circuit intégré principal chargé de la ‘sérialisa- tion’ et des transferts de don- nées). Deux registres sont 4 connaitre : le registre tampon double d'émis- sion/réception et le registre d'état, qui ont respectivement leur image en mémoire aux adresses $COA8 (TDREG / RDREG) et $COA9 (STATUS), si la carte est enfi- chée dans le slot 2 (pour l'activer, faites un saut en $C200). Chaque bit du registre d'état, pris isolément, indique l'état de cer- tains registres ou de certains si- aux. Dans notre cas, ce sont les bits 3 et 4 qui retiennent notre attention. Le bit 3 est positionné a 1 si le tampon de réception est plein. Attention, c'est l'inverse pour le bit 4 qui est A 1 si le tampon de transmission est vide. Pour tester si un caractére est entré ou sorti, il suffit de faire Tespectivement un AND $8 ou un AND $10 avec l'octet de status et d'examiner l'indicateur de zéro. Le caractére regu ou a émettre est placé dans la mémoire 9 qui intervient dans les transferts entre la routine machine et le programme Basic. Le Minitel, agent de liaison Le Minitel est un Modem bien particulier qui interpréte certaines séquences de codes pour son propre compte. L'ensemble de ces mots réservés constitue le vocabulaire de la norme Vidéotex Télétel détaillée dans la notice technique du Minitel ou dans quelques ouvrages disponibles en librairie. Un, deux, trois, quatre ou cing octets servent 4 construire ces mots. Non seulement, le Minitel comprend ce langage, mais il y répond parfois en émet- tant une séquence appropriée. Les principales fonctions du lan- gage sont les suivantes : * modifier le mode de fonction- nement du terminal (vitesse d'échange avec le périphé- rique, aiguillage des différents modules, connexion et décon- nexion...) ; * modifier les caractéristiques de visualisation (passage du jeu alphabétique au jeu semi- graphique, taille et couleur des caractéres...) 5 * générer les séquences de codes correspondant aux touches de fonction (Envoi, Suite, Annu- lation...) ; + indiquer l'état du terminal (vi- tesse, aiguillages des modules, présence d'une porteuse...) ; * mettre en marche la procédure de correction d'erreurs ; 8 —— Programme ‘TELEALARME’ 10 GOSUB 100: REM chargement des routine s et des variables 1 REM eterna er eee eR EAR 20 GOTO 1000: REM programme principal 2 REM * * 30+ 3 REM * TELEALARME = * 100 REM *** COMMANDES VIDEOTEX *#+#+4+* 4 REM * * eee e eee ee ee 5 REM * Bernard HOYEZ = * 110 ES$ = CHRS (27) 6 REM * Jean-Luc NAIL * 120 EF$ = CHR$ (12): REM EFFACEMENT D'EC 7 REM * * RAN 8 REM Sete da eee at eee 130 RCS = CHRS (10) + CHR$ (13) 9: 140 DRS = ES$ + CHRS (77): REM DOUBLE HA UTEUR r 150 FL = ES$ + CHRS (72): REM FLASH u 160 VIS = ES$ + CHRS (82): REM FOND VERT 170 P1$ = ES$ + CARS (57): REM PROI 180 COS = P1$ + CHRS (104): REM CONNEXIO N 190 DES = P1$ + CHRS (103): REM DECONNEX now TON Lin a 200 OP$ = P1$ + CHR (111): REM OPPOSITI av 210 : 300 REM *#%* MESSAGES stettdde tee ete tae Lm peeeeer ett t siete tees 310 ALERTES = EF$ + RCS + RCS + VTS + DHS - s + FES +" ALERTE "+ Le CHR$ (31) + "KA" + DHS + "REPONDEZ E N TAPANT “ + VT$ +" OK” ey 320 M1$ = EFS + RCS + DHS + "MERCI D'AVOIR Ce schéma est extrait du numéro 22 de Pom's (“Composition de numéros de téléphone” ) REPONDU" + RCS + RCS + "CECI ETAIT UN E SIMULATION D'EFFRACTION” + RC$ + RCS + "CHEZ MARTIN .." Pom's n° 27 + télécharger les mémoires vives du Minitel ou identifier au contraire ces mémoires. La connaissance de la norme Télétel est indispensable pour l'écriture d'un logiciel serveur ou, inversement, pour l'ému- lation d'un Minitel. Elle présente moins d'importance dans notre application de téléalarme. Les séquences de codes essentielles ou les plus usitées ont été introduites dans des variables chaines, rassemblées en t&te du rogramme. Pour les transmettre, il suffit de faire appel au sous- programme d'affichage d'une chaine (ligne 800). Retenez surtout les séquences de connexion (CO$), de déconne- xion (DE$), d'opposition (OP$) ; les autres ne concernent que la mise en page des messages. Une fois votre dispositif en place, vérifiez son bon fonctionnement : + en dehors de l'alarme, le dia- logue entre I'Apple et le Minitel s'établit-il lorsque vous validez la carte SSC (PR#,IN#) ? ; avant d'importuner yos amis, testez “en local” la réponse 4 une alarme simulée. Pour cela, ‘shuntez’ la demande de connexion en oblitérant les lignes 1080 et 1090. Sup- primez l'appel au sous- programme de composition de numéro téléphonique (li 1050). Pour déclencher I'alar- me, utilisez indifféremment le micro-contact, la touche # ou le bouton-poussoir. Votre Minitel doit alors afficher les messages dialerte auxquels vous répondrez sur son clavier. Un ‘F’, en haut a droite de l'écran précise que vous n’‘étes pas connecté. * enfin, assurez vous que l'appel téléphonique automatique se réalise bien et que le Minitel prend la ligne. Rétablissez pour cela toutes les lignes du programme et ajoutez en DATA une liste de vos proches amis. Normalement, l'Apple affiche le numéro qu'il com- pose puis un ‘C' prend alors la place du ‘F’ sur l'écran du Minitel. Si tous vos essais sont fructueux, vous étes en possession d'un systéme d'alarme bon marché et adaptatif dont les performances tivalisent avec celles d'appareils spécialisés. Plus encore, ces quelques lignes vous auront peut-étre fait décou- vrir les immenses possibilités douverture de votre ordinateur sur le monde extérieur. 330 M3$ = "MESURE ANALOGIQUE “ FH 340 M4$ = "NUMERO DE RIPOSTE (1,2,3) ? " 670 FORI=1 TO LEN (X$) 350 = 680 A= ASC ( MIDS (X$,I,1)) + 128 400 REM %*** ROUTINES MACHINE **#*##4**%* 690 POKE 7,A FOIIIOIICISIOIIOO IE OO Ie 700 CALL PIT 410 SLOT = 49664 710 PRINT CHR$ (A); 420 ENTRE = 768 720 FOR T = 1 TO 600: NEXT T 430 AFFICHE = 779 730 NEXT I 440 PTT = 792 740 RETURN 450: 800 REM *** AFFICHAGE D‘UNE CHAINE **** 460 FOR I = 768 70 032 Peeerrrri tert it tee 470 READ X: POKE I,X 810 FOR J = 170 LEN (A$) 480 NEXT I 820 X = ASC ( MID$ (A$,J,1)) 490 DATA 173,169,192, 41, 8,173,168,192,13 830 POKE 9,X 3,9, 96 840 CALL AFFICHE 500 DATA 173,169,192,41,16,240,249,165, 850 NEXT J 9,141,168, 192,96 860 RETURN 510 DATA 165, 7,201,176,144,17,201,186, 870: 176,13, 41, 15,208, 2,169, 10,170,32,48,3, 1000 REM *** PROGRAMME PRINCIPAL ****##* 202,208,250, 96 Tiere tet tite tte ete e ei 530 DATA 169,159,141,88,192,32,168,252,1 1010 IF PEEK ( - 16287) > 128 THEN POt = 69, 108, 141, 89,192, 32, 168, 252, 96 1 540 RETURN 1020 IF PEEK ( - 16286) > 128 THEN P1% = 550: Z 600 REM ***COMPOSITION NUMERO ********** 1030 IF PEEK ( - 16285) < 128 THEN P2¢ = JOOS SI OnEOUpE bent 1 610 HOME 1040 IF NOT (P0% OR P1% OR P2%) THEN 100 620 READ X$: IF X$ = "FIN" THEN END 0 630 POKE 49241,0: REM PRISE DE LIGNE 1050 GOSUB 600; REM APPEL*** 640 FOR I = 1 70 700: NEXT I 1060 FOR Q = 1 TO 200: NEXT Q 650 HOME 1070 CALL sLor 660 PRINT : PRINT "Je compose le numéro " 1080 A$ = OPS + COS P Pom's n° 27 9 1090 GOSUB 800: REM AFFICHAGE 1100 Fl = 0:F2 =0 Source ‘T.ALARME” — Assembleur Big Mac 1110 T= 0 WB : Ce source, sur la disquette dtaccempagnement de 1a 1120 T=T+#1 revue, est sauvegardé en format ‘TuxT" pour permetere on par votre assembieur. 1130 AS = ALERTES 1140 GOsUB 800 1150 FOR I = 1 TO 200 1160 CALL ENTRE 1170 IF PEEK (9) = ASC ("0") THEN Fl = 1 1180 CALL ENTRE 1190 IF PEEK (9) = ASC ("K") THEN F2 = 1 1200 IF Fl AND F2 THEN 1250 1210 NEXT I sRogiatre d'état carte ssc sPegistre entrée/sartie denates sparambtze transfert nasic saortie binaire paddie mise 4 1 isortie binaire paddie mise 4 0 sfoutine tempe du maaiteur 1220 IF T > § THEN POKE 49240,0 p one $300 1230 IF T > 10 THEN A$ = DE$: GOSUB 800: Tas cessos aaspude wunialcn FOR G = 1 TO 500: NEXT G: POKE 49321,1 i 21 Test oA stamuz #4 Je bit 2 du rogiatee d'état oat 42 iia sO tay ze doecl n'a pas e*uttliee dana notre cas 23 AND #08 gun caractere est présent i m4 2 on aurait pu te tester par un nave in ie ae = 7 CERGUTE Et AGAIN as LDA DATA Lecture a see A i: "+ RCS + RC 26 STA. CARACT 1260 IF Pl THEN $1$ =" CIRCUIT 2 ACTION 3) ‘i NE* + RCS + RCS 29 e-=-=3 Sortie de caractére a 30 1270 IF P2% THEN $29 = " CIRCUIT 3 ACTION 4) recy aon stars 51 Je bit 4 du registee d'état oat 4 NE“ + RCS + RCS 3 avo 4820 fon peut tranamettre Ja donnée = . = a ano LOOP 1280 EOS STRS ( PDL (0)):E1S = STRS ( Po To. macs PDL (1)):E2$ = STR$ ( PDL (2)):E3$ = 35 STA. DATA sortie du caractére STRE ( PDL (3)) bse ars 1290 AS = MIS + CHRS (31) + "JA" + DH$ + 44 +~> composition nuntre vrs + SOS + S1$ + 528 + RCS + RCS + MZ a aoa oneras $+ "l= "+ 80S + ROS + ROS + MIS + 4 aw 90" "2m" EIG 4+ RCS + ROS + MSH 3 OB BEC SEPAAE —satparateur ontre ohittren = "+ E25 + ROS + ROS + MIS +N 4M cs SEPARE + ESS 45 AND #84121 rfilerage 46 BNE COMPOSE 1300 GosuB 800 a nua ne senittreso <ari0 1310 AS = RCS + RCS + MAS 40 conmore Tax 49 poucie = 1320 GOSUB 800 50 JSR PULSE 1330 CALL ENTRE me PE sacs 1340 X% = PEEK (3) - 48 53 SEPARE RS 1350 IF (Xt <1 OR X$ > 3) THEN 1330 i a, ee 2 Purse lat de 66 a3 1360 PRINT PEEK (49241 + X%) ue STA CLRANO pure de 1a 11gne té14pnonique 1370 AS = RCS + RCS + VTS + " RIPOSTE " + a7 JSR WAIT STRS (Xt) + " ACTIONNEE “ A Sek bash “SoALLALGIOALn dak Zegna wetapniteg 1380 GosUB 800 «0 Jak HAT 1390 END tes ia 1400 DATA 3541: REM MONSIEUR X Récapitulation ‘ALARME’ 1405 DATA 35654321 : REM MONSIEUR ¥ e Basic 1410 DATA FIN Ce code est inclus dans le programme Basic BELG OPED RED CREE EE EERE OOO EERE LE ERLE CEE D ATE FF ED ER EEE OR CRN CE Te Accompagné d'une cinquantaine de pages de documentation, Disk Manager permet de recréer les commandes du Dos, redéfinir organisation d'une disquette, grace & un jeu d'instructions qui en fait un langage simple d'accés & la disquette, Il offre également un programme d’édition & l'aide de commandes évolu¢es. 4 utilitaires figurent aussi sur la disquette : ~ Utili-disque : reconstruction d'une disquetie détuile, Vérification, . Plan d'occupation isk Manager - Ultra-copie : pour un backup particuligrement rapide 2 - Edicat : Edition du catalogue, classement des fichiers, Titres. le D os en Kit - Multi-disque : pour le classement de tous vos programmes (tri instantané). de Dan Steerey PERE EE CAPE ARORA LALOR ELLE OM OEL OOS ECE OE eerererrerscecercerrre 10 Pom's n° 27 Un Carnet d’Adresses Boris Fivolewski ans templacer les carnets d'adresses traditionnels, ni avoir la prétention dégaler une gestion de _ fiches sophistiquée.ou un logiciel de communication, ce programme offre des possibilités in- téressantes (du moins nous l'espérons) comme la composi- tion automatique d'un numéro de téléphone. Et surtout, il est écrit essentiellement en Basic ; vous pourrez donc le modifier facile- ment en fonction de vos besoins. Mode d'emploi La gestion du fichier d'adresses est volontairement simplifiée pour permettre une utilisation du programme aussi bien en DOS 3.3 ou en ProDOS. Vous devez avoir sur la méme disquette le programme CARNET et les deux fichiers ADRESSES et INDEX. S'il n'y a pas de fichier INDEX sur la disquette un nouveau carmet est créé au démarrage. Vous ne devez pas par la suite retirer la disquette du lecteur, les données étant lues au fur et A mesure en fonction des commandes, ce qui permet d'avoir des fichiers trés importants (avec un unidisk par exemple) qui ne pourraient tenir entiérement en mémoire vive. Sur une disquette 5" 1/4 la limite est denviron 400 fiches, mais avec d'autres supports vous pouvez aller jusqu’a 1200 fiches. Attention : le fichier CARNET de type Basic est facilement conver- tible en ProDOS 4 T'aide des Utilitatres Systéme. Il n'en est pas de méme pour les fichiers ADRESSES et INDEX qui sont a accés relatifs. Choisissez donc, avant d'enregistrer quoi que ce . Recherche d'une fiche |. Modification d'une fiche . Liste alphabétique 2 2 4. Suppression d'une fiche | 5 6 7. i « Composition autematiqua | | | Nowveou cornet 0, Quitter la programma | Tepez un nombre ou pr soit, le systéme d'exploitation que vous utiliserez. Le passage de l'un a l'autre étant délicat par la suite. Description des commandes Introduction en continu Les différentes rubriques sont les suivantes : Nom Prénom Adresse Ville Téléphone Renseignement Les rubriques téléphone et rensei- gnement peuvent étre utilisées par exemple pour définir une procé- dure de connection automatique 4 un serveur en couplant la com- mande 6 (voir ci-aprés) avec un logiciel de communication. La rubrique Nom n'accepte que les lettres majuscules et les carac- téres apostrophe et tiret ; les minuscules sont automatiquement converties en majuscules ; les autres caractéres ne sont pas pris en compte. Pour les autres rubri- ques, il n'y a pas de limitation excepté pour les caractéres de contréle. az + ou f pour sélectionner ine option,Puis presser d Pour passer 4 la rubrique suivante utilisez 1 ou 4 . Pour revenir 4 la rubrique (ou champ) précédent utilisez 7. Dans un méme champ vous pouvez vous déplacer A l'aide des touches + et > . Pour effacer le caractére que vous venez de taper, utilisez la touche "Delete". Quand le dernier champ est complété, la fiche est enregistrée sur le disque. Si vous voulez retourner au menu principal sans enregistrer la fiche, pressez la touche ‘Escape’. Sinon, complé- tez l'enregistrement puis pressez ou ‘Escape’. Recherche d'un nom Vous pouvez entrer soit le nom en entier, soit le nom abrégé suivi par un point. Dans le premier cas le programme affichera toutes les fiches portant le méme nom, dans le deuxitme cas toutes celles commencant par le nom abrégé quelle que soit la longueur de ces noms. La recherche se fait dans un tableau en mémoire vive, elle est done relativement rapide. Quand Pom's n° 27 les numéros des fiches recher- chées sont trouvés, le programme lit leurs différents champs sur le disque. La clef utilisée est de 12 lettres ; au dela, les noms sont considérés comme identiques. Quand vous avez trouvé la fiche, vous pouvez l'imprimer. Modification d'une fiche La recherche de la fiche se fait de la méme facon que ci-dessus, mais vous avez ensuite accés aux différents champs de la fiche afin de les modifier. Les possiblités sont les mémes que pour l'enre- gistrement en continu. Suppression d'une fiche La recherche de la fiche se fait de la méme facon que ci-dessus. Avant de supprimer la fiche, le programme vous demande de confirmer. Liste alphabétique 4 partir d'un nom La liste commence au nom que vous choisissez. Si vous voulez lister 4 partir du début, tapez directement 1. Vous pouvez interrompre momentanément I'af- fichage & l'aide de la barre d'espacement. N'importe quelle touche permet de reprendre la liste. Pour interrompre définiti- vement, pressez ‘Escape’. Composition automatique Vous avez sans doute trouvé que le programme qui accompagnait le composeur automatique de numéro de téléphone — Pom's numéro 22 pour le //e, 23 pour le Me — était un peu sommaire. L'option 6 permettra d'utiliser pleinement le circuit que vous aurez constmuit a cette occasion. Si le numéro comprend des parenthéses le composeur consi- dére les chiffres entrés comme un indicatif et il vous demande s'il faut le composer ou non, De plus vous pouvez ajouter des tempori- sations pour attendre une tonalité aprés un indicatif. Le symbole ‘-’ correspond 4 une pause d'une seconde, le symbole ‘+’ a une pause de dix seconde. Exemples : * numéro en région parisienne : (16 -- 1) 12 34 56 78 (Si l'indicatif est composé, la pause entre l'indicatif et le numéro est de 2 secondes) * numéro en province : (16 +-) 12 34 56 78 (Dans ce cas la pause est de 11 secondes) Note : le programme, contraire- ment a ceux des numéros 22 et 23 de Pom's, détecte si vous utilisez un Apple lle ou//c ; vous pouvez done Uutiliser sur une machine ou sur l'autre & condition d’avoir réalisé le circuit correspondant. Création d'un nouveau carnet Cette commande permet d'effacer totalement un carnet pour en créer un nouveau. A utiliser avec prudence. Description technique Les caractéres spéciaux avec la carte 80 colonnes Le programme utilise largement les possibilités des divers carac- téres de contréle qu'autorise la carte 80 colonnes. Les caractéres de contréle qui suivent sont uti- lisables avec la fonction PRINT dés que l'on a fait PR#3. Tabulation : * BS$ = CHR$(8) : curseur un eran 4 gauche ; « FS$ = CHRS$(28) : curseur un cran a droite ; « VT$ = CHR$(31) : curseur une ligne au dessus (méme position horizontale) ; + LF$ = CHR$(10) : curseur une ligne au dessous (idem) . Effacement : + CHR$(26) : effacement de la ligne ; » CHR$(11) : effacement jus- qu'en bas de l'écran ; . * CHR$(29) : effacement jus- quien fin de ligne, Mode d'affichage : CHRS$(18) : affichage en 80 colonnes ; * CHR$(17) : affichage en 40 colonnes (mais gestion par la carte 80 colonnes) ; + CHR$(21) : retour a I'affi- chage normal en 40 colonnes. Les icénes souris : + I$ = CHR$(15) : mode in- verse ; + N$ = CHR$(14) : Mode nor- mal; + ICS = CHRS$(27) + IS : mode icéne puis mode inverse ; + NI$ = CHR$(24) + NS: findu mode icéne puis mode normal. Ces caracttres permettent de modifier plusieurs fois le mode d'affichage pendant le méme PRINT. Sur les anciens //e, les icénes n'étant pas disponibles, 1C$ et NI$ n'ont aucun effet. Exemple d'utilisation : l'affichage de la variable CR$ = IC$ + "M" + NI§$ donnera l'icéne i . Note : pour que le programme puisse tourner sur un/le non mis @ niveau, un test est effectué au début afin de déterminer si Vaffichage utilisera ou non les possibilités graphiques des icénes Souris. Les programmes en langage machine Ces programmes, au nombre de quatre, sont chargés par le programme en Basic sous forme de DATA qui sont ‘POK&s’ en page 3. Ils sont tous relogeables, peu importe donc leur ordre, pourvu qu’ils ne se chevauchent pas. Les deux premiers sont déja parus dans Pom's, done seuls les sources des deux derniers sont listés. GER est la routine classique qui 12 Pom's n° 27 accompagne un traitement d'er- reur, i] est inutile de la présenter. COMP assure la méme fonction que les programmes ‘COMPO- SEUR’ déja cités. Il est par contre relogeable et fonctionne aussi bien sur le //e ou le //c. IN est un input généralisé qui permet d'accepter tous les caractéres. Il est utilisé pour lire le fichier ‘ADRESSE’ sans avoir de probléme avec les virgules ou autres. G80 est un programme d'entrée de caractéres en 80 colonnes, Il est surtout utile pour éviter les inconvénients de la fonction GET en 80 colonnes sur un Apple //e, en particulier l'interception de la touche ‘Escape’ ou la confusion entre la fléche droite et le carac- tére espace (ces inconvénients n'existent pas sur un //c). De plus, il permet de redéfinir le curseur. Les fichiers CARNET rogramme ADRESSES et INDEX fichiers de données créés 4 linitialisation T.G80 et T.IN sources de G80 et de IN (ProCODE ou Big Mac) Programme ‘CARNET’ NB : Les ‘puces’* symbolisent les espaces pour simplifier la saisie. 290 CF = 399: 499 500 MID$ (C$,1,L): RETURN REM Recherche du code d'un nom entre deux limites 0 REM CARNET D'ADRESSES (C) BORIS FIVOLEW 301 SKI 1986 510 N= 0:7 = FOR I 1 TO NF 1 REY a a a SE: 520 J = J # 1:¥0 = X(J,0):¥1 = X(d,1): IF 10 ONERR GOTO 20000 ¥0 = 0 GOTO 520 20 GoTO 10000 530 IF (20 < YO OR 20 = YO AND Z1 < = ¥1 99: = ) AND (¥0 < XO OR YO = X0 AND ¥1 < X1) 100 REM Entrée d'un mo THEN N = N + 1:N(N) = 7 101 REM - — 540 NEXT I 110 MA = 1: GOTO 130 550 RETURN 120 MA = 0: GOTO 130 599: 130 I = 1:C$ = MID$ (C$,1,LM):P = PEEK ( 600 REM Codage d'un nom sur 12 lettres 1403): PRINT C$;: POKE 1403,P 60). (REM Shee cess = asa ae ee 140 CALL G80:K = PEEK ( - 16384):K = K = 610 LD = O:J = 0: FORI =1 7012 128\-* (% & 127) 620 IF I = 7 THEN X0 = J:J =0 150 IF K = 27 THEN : POP : RETURN 630 L = L + 1: REM Ignore blanc,tiret et a 160 IF K = 10 OR K = 11 OR K = 13 GOTO 26 postrophe a 640 Ké = MID$ (CS,L,1): IF KS = "" THEN K 170 IF (K = 8 OR K = 127) AND I > 1 THEN $= "a" I= 1-1: PRINT 88$;: IF K = @ GOTO 1 650 IF ASC (KS) - 64 < 0 GOTO 630 40 660 J= 39 * 27 + ASC (KS) - 64 180 IF K = 127 THEN P = PEEK (1403):K$ = 670 NEXT I:Xl = J MIDS (CS,I + 1,DM+1-I):C$ = MID 680 RETURN $ (C$,1,2 - 1) + K§: PRINT K$;" "7: PO 699 : KE 1403,P: GOTO 140 700 REM Lecture d‘une fiche 190 IF K = 21 AND I < IM THENI=I+1: 7Ol REM -=------------<<-== PRINT FS$;; GOTO 140 710 CALL IN,NO$: CALL IN, PR$: CALL IN, AD$ 200 IF MA AND (96 < K AND K < 123) THEN K :-CALL IN, VI$: CALL IN, TE$: CALL IN, RE = K- 32 $: PRINT DS 210 IF MA AND ((K < 65 OR K > 90) AND K < 720 PRINT TMS; > 32 AND K < > 45 AND K < > 39 AND 730 PRINT "NOM: ";NO$;: POKE 36,41: PRINT K < > 46) THEN PRINT BL$;: GOTO 140 “Prénom: PR$: PRINT “Adresse: ";ADS 220 IF K < 32 THEN PRINT BL$;: GOTO 140 : PRINT "Ville: ";VIS;: POKE 36,46: PR 230 KS = CHR$ (K):CS$ = MID$3 (CS + BB$,1, INT “Téléphone: ";TE$: PRINT "Renseign I- 1) + K$ + MIDS (C$,I + 1,LM - I) ement: ";RE$ 240 I=I+ 1: IF I > LM THEN KS = KS + BL 740 RETURN $4 BS$:I=I-1 799 = 250 PRINT K$;: GOTO 140 999 : 260 L = LEN (C3): IF L = 0 GOTO 290 1000 REM Insertion d'une fiche 270 FORI=Lf701 STEP - 1: IF MID$ (C 1001 REM = a a ae a SS $-2,1) ¢ > ° * THEN Z = Tir = 21 1010 NOS = PRS = "":AD$ = "“:VIS = "GT 280 NEXT I ES = "";RES = "" _/ Pom's n° 27 13 1020 1021 1030 1040 1050 1060 1070 1030 1100 1101 1116 1120 1130 1140 1150 1160 1170 1180 1136 1200 1201 1210 1220 1230 1246 1256 1260 1270 1286 1230 1300 1310 1320 1506 1501 1510 1520 1530 1546 1080 FF REM Recherche point d'insertion REM =-- IF PF = MF + 1 GOTO 1070 FOR I = PF TO MF IF X(I,0) = 0 THEN PF = I: GoTO 1080 NEXT I:PF = MF + 1 PRINT : PRINT BL$;"Attention le fich ier est plein, vous ne pouvez plus in sérer de fiche! ";: GET K$: RETURN = PF P= PEEK (37): VTAB 3: AHTAB 26: PRIN T "Nombre de fiche(s): ";NF: VIAB P + Bg REM Entrée d'une fiche } 2 Si alae a ee a KK = 1: GOTO 1170 IF K = 11 GoTo 1150 IF KK < > 1 AND KK < > 4 THEN PRI NT KK = KK + 1: KK = KK - 1: RINT BLS; IF KK < NT VIS; HTAB 2: PRINT BS$; ON KK GOTO 1510, 1540,1550,1560,1570, 1580 PRINT TMS; VT3 REM Enregistrement d'une fiche REM -- PRINT D$"OPEN INDEX, L20" PRINT DS"OPEN ADRESSES, L256" PRINT D3"WRITE INDEX, R"FF PRINT XO: PRINT X1 IF FF < > PF GOTO 1270 PRINT D$"WRITE INDEX,RO": PRINT NF + I:NF = NF + 1 PRINT D$"WRITE ADRESSES, R"FF PRINT NO$: PRINT PR$: PRINT AD$: PRI NT VIS: PRINT TES: PRINT RES PRINT D$"CLOSE” X(FF,0) = XO:X(FF,1) = X1 IF FF = PF GOTO 1000: REM Insertion en continu RETURN REM Rubriques GOTO 1170 IF KK = 0 THEN KK = 1:.P > 1 AND KK < > 4 THEN PRI PRINT "NOM #7LM = 35:03 = NOS: GOS UB 110:NO$ = C$ GOSUB 600: IF XO = 0 THEN RETURN GoTo 1120 POKE 36,41: PRINT "Prénom: ";:LM = 3 0:C$ = PRS: GOSUB 120:PR$ = C$: GOTO 1120 1590 1999 2000 2001 2010 2020 2030 2040 2050 2060 2070 2080 2090 2210 2499 2500 2501 2510 2520 2530 2540 2550 2560 2570 2580 2590 2600 2610 2620 2630 2640 2650 2660 2670 IM = 64 * (LM > 64) + LM * (LM < 65): IF LEN (RES) > LM THEN PRINT CHRS (29); PRINT "Renseignement: ";:C$ = RES: G OSUB 120:RES = C$: GOTO 1120 REM Recherche et impression d'une fi che REM ssoceseceeomeneweseessssssss=ss= GOSUB 2500 IF K = 27 OR N = 0 THEN RETURN PRINT : PRINT "Impression de cette £ iche (O/N) ? "+: CALL G80: PRINT KS = CHRS ( PEEK ( = 16384)); IF KS < > "Q" AND KS < > “o" THEN RETURN PRINT D$;"PR#1":T = 10 PRINT SPC( 1);"M. "sPRS;" "NOS PRINT SPC( I);AD$: PRINT SPC I):V 1s PRINT DS"PR#3" RETURN PRINT VIS; VTS REM Recherche des fiches REM — N = 0: PRINT “NOM: "#:LM = 35:MA = 1: C$ = NOS: GOSUB 110: PRINT GOSUB 600: IF X0 = 0 THEN PRINT "No m incorrect!": GOTO 2510 20 = X0:21 = X1: IF RIGHTS (C$,1) < > "." THEN X1 = X1 + 1:C$ = "portant le nom: * + C$: GOTO 2560 c$ = cS + "[": GOSUB 600: REM Astuce: Code ascii suivant celui de 2 CS = "commengant par: " + LEFTS (C$, LEN (C$) - 1) GOSUB 500: IF N = 0 GOTO 2670 VTAB 3: PRINT "Il ya" " fiche(s) ":C0$: HOME PRINT D$"OPEN ADRESSES, L256" FOR I =1 TON PRINT D$"READ ADRESSES, R"N(1I) GOSUE 700 PRINT : PRINT "Est-ce la fiche que v ous recherchez (O/N) ? "7 CALL G80:K = PEEK ( = 16324):K$ = CHRS (K): IF K = 27 GOTO 2680 IF K$ = "O" OR K$ = “o" GOTO 2680 IF K$ < > "N" AND K$ < > "n“ GOTO 2630 PRINT VI$;VT$: NEXT I PRINT : PRINT "La fiche que vous rec herchez n'est pas dans ce fichier.": 1550 PRINT "Adresse: ";:LM = 70:C$ = ADS: PRINT " Pressez une touche pour reven GOSUB 120:AD$ = C$: GOTO 1120 ir au menu: ";: CALL G80:N = 0 1560 PRINT "Ville: ";:LM = 38:C$ = VIS: G 2680 PRINT : PRINT D$"CLOSE" OSUB 120:VI$ = C$: GOTO 1120 2690 RETURN 1570 POKE 36,46: PRINT “Téléphone: ";:LM 2999 : = 22:C$ = TES: GOSUB 120:TE$ = C$: GQ 3000 REM Modification d'une fiche TO 1120 3001 REM === a A Sm 1580 LM = 250 - LEN (NO$) - LEN (PR$) - 3010 GOSUB 2500 LEN (ADS) - LEN (VI$) - LEN (TES$): 3020 IF K = 27 OR N = 0 THEN RETURN eS 14 Pom's n° 27 3030 FF = N(I) 5999 : 3040 HOME : GOSUB 720 6000 REM Composition automatique 3050 VTAB 5: GOTO 1100 6001 REM senmemeess==========es= 3999 : 6010 GOSUB 2500 4000 REM Suppression d'une fiche 6020 IF K = 27 OR N = 0 THEN RETURN 4001 REM ===ssssesseesessassass= 6030 PRINT VT$; CHRS (29) 4010 GOSUB 2500 6040 L = LEN (TES) 4020 IF K = 27 OR N = 0 THEN RETURN 6050 IF L = 0 THEN PRINT "Pas de numéro 4030 PRINT : PRINT "D'accord pour supprim de téléphone.";: GOTO 6500 er cette fiche (O/N) ? ";: CALL G80: 6060 PRINT "Je compose le numéro: "7: REM PRINT Prise de ligne 4040 K$ = CHRS ( PEEK ( - 16384)): IF KS 6070 IF IC THEN POKE 49322,8 < > "0" AND K§ < > "o" THEN RETURN 6080 IF NOT IC THEN POKE 49241,0 6090 FOR J = 1 TO 1000: NEXT 4050 PRINT DS"OPEN INDEX, L20" 6100 REM Composition 4060 PRINT D$"WRITE INDEX, R"N(I) 6110 FORI=170L 4070 PRINT "0": PRINT "0" 6120 K$ = MID$ (TE$,I,1):K = ASC (KS): P 4080 PRINT D$"WRITE INDEX, RO" RINT KS; 4090 PRINT NF - 1 6130 IF 47 < K AND K < 58 THEN POKE 6,K 4100 PRINT DS"CLOSE" - 48 + 10 * (K = 48): CALL COMP:K$ = 4110 X(N(I),0) = O:NF = NF - 1:PF = N(I) “-"; REM Ajoute un délai d'l seconde 4120 RETURN aprés chaque chiffre 4999 + 6140 IF K$ = "-" THEN FOR J = 1 TO 1000: 5000 REM Liste 4 partir d'un nom NEXT : REM Environ 1 seconde 5001 REM sse======: aaaieiniad 6150 IF K$ = "+" THEN FOR J = 1 TO 10000 5100 REM Initialisation ; NEXT : REM Environ 10 secondes 5101 REM 6160 IF K§ < > “(" GOTO 6290 5110 PRINT “Nom d'origine: "s:LM = 35:C$ 6170 P = PEEK (1403) = NO$: GOSUB 110: PRINT : GOSUB 600 6180 PRINT : PRINT "Indicatif (Q/N) ? "+ 5120 K = O:FF = 0: FOR I = 1 TO NF 6190 CALL G80:K = PEEK ( = 16384):KS = 5130 K = K + 1:Y0 = X(K,0):¥1 = X(K,1) CHR$ (K) 5140 N(K) = 6: IF YO = 0 GOTO 5130 6200 REM Indicatif ? 5150 IF ¥O > X0 OR YO = X0 AND Y1 > = Xl 6210 IF K = 27 GOTO 6550 THEN FF = FF + 1:N(K) = 1 6220 IF KS = "0" OR K$ = "o" GOTO 6280 5160 NEXT I: IF FF = 0 THEN PRINT : PRIN 6230 IF K$ < > "N" AND KS < > “n" GOTO T "Il n'y a aucune fiche aprés ce nom 6190 it!": Goro 5300 6240 FORTJ=I+1T0L 5170 C$ = "de " + C$: IF XO = 0 THEN C$ = 6250 KS = MID$ (TE$,J,1):K = ASC (K#) “du début" 6260 IF KG = ")" THENG =L:I=I-1 5180 VTAB 3: PRINT "Liste de ")FF;" fiche 6270 I = I + 1: NEXT J (s) a partir ";C$: HOME 6280 POKE 1403,P: PRINT VI$; CHR (11)- 5190 PRINT D$"OPEN ADRESSES, L256" 6290 NEXT I 5200 REM Lecture 6400 REM Décrochage 5201 REM ------- 6410 PRINT : PRINT CHR$ (7) 5210 FORI= FF T0 1 STEP - 1 6420 PRINT "Décrochez le combiné avant .. 5220 XO = 987654321:K = 0: FORJ=1 TOT secondes"; 5230 K = K + 1: IF N(K) = 0 GOTO 5230 6430 FORI= 10701 STEP - 1 5240 YO = X(K,0):Y1 = X(K,1) 6440 HTAB 28: PRINT SPC( I < 10)sIs 5250 IF ¥O < XO OR YO = XO AND Yl < X1 TH 6450 FOR J = 1 TO 1000: NEXT EN :X0 = YO:X1 = Y1:N = K 6460 NEXT I 5260 NEXT J: PRINT D§"READ ADRESSES, RN: 6470 PRINT VTS GOSUB 700 6480 IF IC THEN POKE 49322,0 5270 POKE ~ 16364,0: IF PEEK ( - 16384) 6490 IF NOT IC THEN POKE 49240,0 = 32 THEN CALL G80 6500 REM Fin 5280 IF PEEK ( - 16384) = 27 GOTO 5500 6510 PRINT "Pressez une touche pour reven 5290 N(N) = 0: NEXT I: PRINT : PRINT “Dern ir au menu principal.";: CALL G80 idre fiche."; 6520 RETURN 5300 PRINT " Pressez une touche pour reve 6550 REM Escape nir au menu: ";: CALL G80 6560 IF IC THEN POKE 49322,0 5500 REM Fin de la liste 6570 IF NOT IC THEN POKE 49240,0 5501 REM --------------- 6580 RETURN 5510 PRINT : PRINT D$"CLOSE" 6999 + 5520 RETURN 7000 REM Créer un nouveau carnet A Pom's n° 27 15 7001 7010 7020 7030 7040 7100 7110 7120 7130 7140 7150 7160 7170 7180 7190 7200 10000 10001 10002 10010 10020 10030 10035 10040 10045 10050 10055 10060 10065 10070 10075 106080 10085 16090 10095 10100 10101 10110 10120 10130 REM =: Saasscceeeessesees HOME : PRINT " Attention en créant un nouveau carnet vous effacer le pré cédent s'il existe.": PRINT " Voulez -vous vraiment créer un nouveau carne t (O/N): "7 CALL G80:K$ = CHRS ( PEEK ( - 16384 ) IF K§ < > “"O" AND K$§ < > “o" THEN RETURN PRINT REM Destruction éventuelle IF LI = 7130 GOTO 7140 IF LI = 7140 GOTO 7150 PRINT DS"DELETE INDEX" PRINT DS"DELETE ADRESSES" PRINT DS"OPEN INDEX, L20" PRINT DS"WRITE INDEX, RO" PRINT "0": REM Zéro pas "o" PRINT D§"OPEN ADRESSES, L256" PRINT D$"CLOSE" RUN 7999 : 9999: TOSS OIIOIIIOO nb ea aE DEBUT DU PROGRAMME ** REM Od GHdobobbbdbt ike tt ett TEXT ; HOME :DS = CHR$ (4): PRINT DS;"PR#3": REM 80 colonnes PRINT : PRINT “POM'S présente:" POKE 32,20: PRINT : PRINT PRINT "ettttovetttecettttacetacetae REM REM +e Shiota oben PRINT se tee etecetestasateetitvctee PRINT sect tttbee tthe setatetes tthe eee eth PRINT ""eecceetanstestastecetecthen ete te ete eateatesateetasetes PRINT Attttee cent POKE 32,9: PRINT : PRINT PRINT "setecetecstt#tecetttteaatiittite wath thte eet eee eee ee ere ree a PRINT "seteetenetecatectacetactenet eet e tee e eset ewer ee tl HAttt eet eee tentttte sete reeeete PRINT sett teen etite PRINT aehee PRINT "**#*ee SAAR He RE es eR EA He eH HER ES EER POKE 32,0: PRINT : PRINT PRINT "Veuillez patienter, merci." Uhhh. Peer eee ee se totes teeeteeteceterteete took secant one tecetentttteceteeet 10099 ; REM Variables principales & caracté res spéciaux I = J:X0 = X1:¥0 = Y. 00: DIM X(MF,1),N(MF) BS$ = CHR$ (8):FS$ = = CHRS (31):BLE = I$ = CHRS (15):N$ = CHRS (28): VTS CHRS (7) CHRS (14) :Ic$ 10140 10150 10160 10170 10180 10190 10199 : 10200 10201 10210 10220 10230 10240 10250 10260 10270 10280 10285 10290 10295 = CHRS (27) + I$:NI$ = N$ + CHRE ( 24) Ic = PEEK (64448):TC = (IC = 0) + (¢ Ic = 224) BBS = " ":BBS = BBS + EBS TBS =" “;TBS = TBS + TBS TM$ = "SSSSSSSSSSSSSSSSSSSSSSSSSSSSS SSSSSSSSSSS":TM$ = ICS + TMS + TMS + NI$ + CHR? (26) IF I¢ GOTO 10200 TMS a Veen eee nee e ene eae ----------- "M$ = IMS + TMS REM Sous programmes en binaire (re logeable) REM sssseseseneeesseeeeseess=es=== GER = 768: REM Gestion d'erreurs DATA 104,168,104, 166, 223,154, 72,152 272,96 IN = GER + 10: REM Input généralisé DATA 32,190,222, 32,227, 223,32, 44,21 3, 162, 255,232, 189, 0,2, 208, 250, 138,16 0, 0, 145, 131, 32, 82, 228, 72, 152,160,2,1 45,131,136, 138, 145,131, 162,0,200,104 +32, 226, 229, 96 G80 = IN + 43: REM GET clignotant en 80 colonnes DATA 165,37, 32,193,251, 165, 36,205,1 23,4, 208, 3,173, 123, 5, 74, 168, 141, 84,1 92,176, 3, 141, 85,192,177, 40,170, 138,2 09, 40,208,2, 169 DATA 223,145, 40,169, 0,24, 72,44, 0,13 2, 48,11, 233, 1,208,247, 104, 233, 1,208, 241,240,227, 104,138,145, 40,141,16,19 2,141, 84,192, 96 COMP = G80 + 68: REM utomatique DATA 166, 6,160, 0, 169,160,140, 88,192 - 32, 168, 252, 160, 8, 169,108, 140, 89,192 , 32, 168,252,202, 208, 233, 96 FIN = COMP + 25: FOR I = GER TO FIN: READ J: POKE I,J: NEXT I IF IC THEN POKE COMP + 7,170: POKE COMP + 17,170 Composition a 10299 : 10300 10301 10310 10320 10330 10340 10350 10360 10370 10380 10390 REM Menu REM ==um DATA Insertion d'une fiche DATA Recherche d'une fiche DATA Modification d'une fiche DATA Suppression d'une fiche DATA Liste alphabétique DATA Composition automatique DATA Nouveau carnet DATA Quitter le programme NC = 7: DIM CHOIXS(NC): FOR I = 0 TO NC: READ CHOIX$(I): NEXT I 10399 : 10400 10401 10410 REM Lecture du fichier index PRINT DS"UNLOCK INDEX" Pom's n° 27 10426 10430 10440 10450 10460 10470 10480 10490 10499 10500 10501 10510 10520 10530 10540 10550 10560 10570 10580 10590 10600 10610 10620 10630 10649 10650 10660 10670 10690 10700 10701 10710 10720 10730 PRINT D$"UNLOCK ADRESSES” PRINT D$"OPEN INDEX,L20": PRINT De" READ INDEX,RO": INPUT NF IF NF = 0 GOTO 10490 K = 0: FOR I = 1 TO NF K = K + 1: PRINT D$"READ INDEX, R"K: INPUT X(K,0),X(K,1) IF X(K,0) = 0 AND X(K,1) = 0 GOTO 1 0460 NEXT I PRINT D§"CLOSE":PF = 1 REM Affichage du menu ig milan TEXT ; HOME :HP = 26:VP = 11 - NC:0 ip =FT+1 PRINT TBS;: PRINT I$;BB$: VTAB 2: H TAB 20: PRINT "CARNET D'ADRESSES (C ) BORIS FIVOLEWSKI 1986";NS VIAB VP +1: FORI= 0 TO NC -1: 8 TAB HP - 2: PRINT I + 17". “sCHOIX$( I): PRINT : NEXT I HTAB HP - 2: PRINT VIAB 23: PRINT TMS; IF I¢ Goro 10590 PRINT “Tapez un nombre ou utilisez les fléches pour choisir une option. Puis RETURN."; GOTO 10600 PRINT “Tapez un nombre ou pressez “sICS;"I";NIS;" ov "7ICS;"K"7NIS?" Pp our séléctionner une option.Puis pre sser ";IC$;"M";NI$; REM *** Entrée du choix *** IF PT = OLD THEN GOTO 10630 VTAB OLD * 2 + VP: HTAB HP: PRINT SPC( 26): PRINT : HTAB HP: PRIN: #CHOTXS (OLD) ;" ": HTAB HP: VTAB PT * 2 + VP: PRINT LEFT$ (TBS, LEN (CHO IX$(PT)) + 2): HTAB HP: PRINT I$;" " fCHOIXS (PT): " "ZNIS "0, ";CHOIX$ (NC) WAIT - 16384,128; POKE - 16368,0: K = PEEK ( - 16384) OLD = PT IF K = 10 THEN PT = PT + 1 = (NC + 1) * (PT = NC) IF K = 11 THEN PT = PT = 1 + (NC + 1) * (PT = 0) IF 47 < K AND K < 49 + NC THEN PT = K - ¢9: IF PT < 0 THEN PT = NC IF K < > 13 THEN GOTO 10600 REM Exécution de la commande REN -- IF Pf = NC GOTO 11000 IF NF = 0 AND PT < > O THEN VTAB 22: PRINT I$;" Commande impossible: fichier vide. GET K§$: PRINT CHR$ (26): GOTO 1060 tv) HOME : PRINT [$;BB$: VIAB 1: HTAB 2 : PRINT CHOIX$(PT);: POKE 36,51: PRI ")NS?:OLD = PT:PT = 0: - 10740 10750 11000 19999 : 20000 20001 20100 20200 : 20210 20220 20230 20240 20250 20300 20301 20310 20320 20330 20340 20350 20350 20400 20401 20410 20420 20430 20440 20450 20460 20470 20480 20500 20600 ON PT + 1 GOSUB 1000, 2000, 3000, 4000 , 5000, 6000, 7000 GOTO 10500 HOME : PRINT CHR$ (21): END REM Traitement des erreurs REM ss===== =a ==: ER = PEEK (222):LI = PEEK (218) + PEEK (219) * 256 CALL GER IF LI = 20230 GOTO 20240 PRINT DS; "CLOSE", PRINT CHR$ (7) IF ER = 255 THEN PRINT “BREAK EN L IGNE ";LI: END REM Erreurs initiales REM saree IF (ER = 6 OR ER = 7) AND LI = 1041 0 GoTO 10420 IF (ER = 6 OR ER = 7) AND LI = 1042 0 Goro 7100 IF ER = 5 AND LI = 10430 GOTO 7100 IF (ER = 6 OR ER = 7) AND (LI > 700 0 AND LI < 8000) GoTO 7100 IF ER = 4 AND LI = 10410 Goro 10430 IF LI > 10000 AND LI < 10500 THEN PRINT "Erreur pendant 1'initialisati on. Recharger le programme.": END REM Autres erreurs IF ER = 6 OR ER = 7 OR ER = 8 THEN PRINT "Carnet d'adresses non trouvé .": PRINT "Mettez la bonne disquette ou eréez un nouveau carnet (option ae IF ER = 9 THEN PRINT “Disque plein .": PRINT “Créez un nouveau carnet s ur une autre disquette"; GOTO 20500 IF ER = 17 THEN PRINT "Répertoire plein.": PRINT “Utilisez une autre d isquette": GoTo 20500 IF ER = 10 THEN PRINT “Fichiers ve rrouillés." IF ER = 4 THEN PRINT "Disquette pr otégée." IF ER = 4 OR ER = 10 THEN PRINT " Vous ne pouvez pas modifier les fich es": GOTO 20500 IF ER = 5 THEN PRINT " Fichiers dé tériorés ou disquettes échangées": G oTo 20500 PRINT “erreur. "7 PRINT “Pressez une touche pour reve nir au menu";; CALL G80 GOTO 10500 Récapitulation Les quatre fichiers binaires ulilisés se trouvent NT "ESC ; Retour au menu général";N$ : POKE 34,3: PRINT : Bae sous forme de DATAs dans le programme Basic. J Pom's n° 27 17 Source ‘IN’ Assembleur Procode ou BigMac 1 2 ORG $0300 rE 4 VARPNT EQU $83 5 IN EQU $0200 € INLIN EQU $D52C 7? CHECLS EQU SDEB& & CHKOPN EQU $DEBB S PIRGET EQU $DFE3 10 GETSPA EQU $E452 11 MOVSTR EQU $E5E2 12 3 *** Début du code **#* la 15 JSR CHKOPN 16 JSR PTRGET 17 JSR CHKCLS 18 JSR INLIN 19 LDX #SFF 20 BCL INX 21 IDA IN,X 22 BNE BCL 2 TXA 24 LDY #300 25 STA (VARPNT),¥ 2é JSR GETSPA 27 PHA 26 TYA 29 LbDY #$02 30 STA (VARPNT),¥ 31 DEY 32 TXA a3 STA (VARPNT),Y 34 LDX #500 35 INY 36 PLA 37 JSR MOVSTR 38 RTS Source ‘T.G80’ Assembleur Procode ou BigMac 1% GET 2 4 ORG $380 4 5 CH * $24 6 CV = $25 7 BASL = $28 & OLDCH = $47B 3 OURCH = $57B 10 11 KBD al $co00 12 KEDSTRB = $c010 13 TXTPAGE1 = $c054 i4 TXTPAGE2 = $COSS 15 16 BASCALC = $FBC1 il 18 LDA CV 19 JSR BASCALC 20 LDA CH gt CMP GLDCH NB; Sources en format ‘TEXT* sur la disquette Pom’s pour récupération sur votre assembleur, 22 BNE old 23 LDA OURCH 24 old LSR 25 TAY 26 STA TXTPAGEL ae BCS page 28 STA TXTPAGE2 29 page EoU * 30 31 LDA (BASL),¥ 32 TAX 33 boucle TXA 34 CMP (BASL),Y 35 BNE curseur 36 LDA #"_" 37 curseur STA (BASL),Y 39 IDA #0 40 cLe 41 waitd PHA 42 waitl BIT KBD 432 BMI touche 44 SBC #1 45 BNE waitl 46 PLA 47 SBC #1 48 BNE waitd 49 BEQ boucle 50 51 touche FLA 52 TXA 53 STA (BASL),Y¥ 34 STA KBDSTRB 55 STA TXTPAGE1 56 RTS 57 BS $3D0-* Bien qu'un bouton permette de le faire manuellement, il peut-étre intéressant d’éjecter une disquette de I'Unidisk 3.5 par programme & la maniére d'un Macintosh. La petite routine ci-contre permet de faire l'opération. La commande d’éjection n'étant pas gérée par ProDOS, il faut faire appel directement a la carte interface. Le programme de démonstration donne les quelques lignes 4 inclure dans votre programme Basic. 4 Démonstration 10 DATA 32, 0,0, 4,10, 3,142,217, 3, 96, 3,0,15,3,4,0,0 20 FOR I = 768 TO 784: READ J: POKE I,J: NEXT 30 INPUT "SLOT: "8: INPUT "DRI VE:"2D:8 = (S+192) * 256 40 IF PEEK (S + 7) THEN PRINT "CE N'EST PAS UN UNIDISK": E ND 50 POKE 769, PEEK (§ + 255) + 3 : POKE 770,85 / 256: POKE 779 i) 60 CALL 768:ER = PEEK (785) 70 IF ER = 40 THEN PRINT "DRIV E NON CONNECTE": END 80 IF ER THEN PRINT "ERREUR" Ejectez les disquettes 3°S Brumo Fémart Source Ejection ORG $300 OBy $300 ENTRY EQU 0 DEVICE Ew 7 20 00 00 Usk ENTRY 04 ora 4 0A 03 DA PARLIST 6D 1103 Sm” ERROR 60 RTS 03 PARLIST DEB 3 00 DFR DEVICE OF 03 DW CTRLST 04 orB 4 00 00 CTRLST DW OO ERROR Bq of Pom's n° 27 eee L"‘Apprenti-FORTHier” (APF) est un syst#me FORTH (interpré- teur+compilateur) écrit en Applesoft sous DOS 3.3 et prévu pour fonctionner en 80 colonnes. Il posséde de plus l'intérét de visualiser le contenu de la pile de DATA et I'état du dictionnaire, et permet done de saisir le fonction- nement du langage Forth Le langage Forth Tl fut inventé a Ja fin des années 60 et implémenté sur IBM 1130 par Charles H. Moore. Ses premiéres applications furent consacrées a l'astronomie, Forth est également un outil privilégié dans le développement de la ludotique. Forth posséde un grand nombre diavantages : « facile A utiliser grace a une syn- taxe simple et peu contrai- gnante ; l'utilisation crée son propre vocabulaire de dialogue avec la machine ; * efficace car semi-compilé ; il est interprété et permet donc une programmation agréable ; les définitions du vocabulaire sont compilées d'ol une exécution trés rapide (sauf pour APF car interpréteur et compilateur sont écrits et compilés en Applesoft, ce qui est le pendant de son caractére didactique) ; * puissant car c'est un langage de haut niveau qui permet ce- pendant également de manipu- ler les données au niveau des octets en mémoire. Forth ne fonctionne pas avec des instructions (comme le Basic, Pascal ou les assembleurs). Au contraire, l'utilisateur peut ensei- gner son langage a la machine en = Lf créant des mots, ce vocabulaire étant placé dans un dictionnaire. Il est trés simple de définir un mot, qui ne sera reconnu que s'il ne fait appel qu’A des mots déji connus : : Exemple 124+. ; Exemple affiche le résultat de 1+2 (a noter que, en Forth, tous les mots doivent étre séparés par un espace), Bien entendu, un mot peut étre effacé avec l'instruction FORGET Les données manipulées en Forth peuvent étre des variables ou tableaux des constantes, ou encore des constantes immé- diates. Forth est construit autour de deux L’apprenti-FOR Tiler i. lkej Nissuorgsky piles : la pile de données (la seule visualuée par APF) et la pile de Tetour, toutes deux bities selon la structure LIFO (Last In First Out). Forth fonctionne avec la notation polonaise inversée, comme cer- taines calculatrices : 12 + 3 *donne 9. La pratique d'APF permet de visualiser la pile tout au cours des opérations. Conventionnellement, on représente entre parenthéses et séparés par --- les paramétres sur la pile avant et aprés exécution du mot: + {a B= a + 5) L'approche interprétée est repré- sentée par le dialogue au clavier : Help! Voici la marche a suivre pour utiliser ce programme d’approche du langage Forth. 1 Vous étes le bienheureux possesseur de la disquette d’accompagnement de la revue ? Passez a l’étape 7. Saisir et sauvegarder le fichier binaire DICO qut contient Saisir CREDEMO, le sauvegarder, faire RUN CREDEMO pour créer le fichier TEXT DEMO.APF. Saisir CREMESS, le sauvegarder, faire RUN CREMESS Saisir et sauvegarder GARDE.APF et APF 22-4. Vous devez disposez sur la méme disquette des fichiers 2 les ordres Forth de base, le noyau. 3 4 pour créer le fichier MESSAPF. 5 6 suivants (ce sont les seuls nécessaires) : A GARDE.APF A APF 22-4 Be DLCO T 'DEMOAPF T. MESSAPF 7 Faites RUN GARDE.APF. Pom's n° 27 ie b 3 = alors que l'approche compilée est représentée par la définition de nouveaux mots : : CARRE DUP * ; Les programmes fournis CREMESS erée et modifie le fichier direct MESS APF. L'utilisateur n'a pas en principe 4 travailler avec, sauf s'il veut adapter le programme APF. CREDEMO crée et modifie le fichier DEMO APF qui contient des exemples de séquences. Outre l'aspect dé- monstratif, on peut s'en servir comme base de petits “program- mes” a charger. GARDE.APF affiche la page de garde et lance APF. Comment se servir d'APF Tl y a deux modes : + normal ° pas a pas (pause aprés chaque mot d'une méme ligne, Vocabulaire d'APF DEMO charge un des exemples du fichier DEMO.APF ; INIT réinitialise le Forth (doit étre en début de ligne) ; RAZ réinitialise les piles ; CLS efface l'écran ; BELL émet un ‘beep’ ; LISTE MOTS liste les diction- naires ; MODE commute les modes nor- mal et pas a pas ; QUITTE arrét du programme ; AIDE affiche un écran d'aide ; CARRAY tableau d'octets (n CARRAY nom crée un tableau de n+1 octets auquel on peut accéder par C@ et C!). _—— Quelques clefs pour l'utilisation du programme Se reporter d la bibliographie Multiplication de al par nz aisse n3 sur la pile Somme de ni et de n2 baisse ni sur la pile Incrémente 1'indice de boucle de n, Ltexéeution reprend au DO correspendant tant que l'indice est inférieur a la linite Lalsse nj sur la pile Affiche le nombre a suivi d‘un espace Affiche du texte Jusqu'd " Bivise ni par n2? (division entiére) Laisse ni sur ja pile NO? est créé dans le dictdonnaire, I'taterpréteur compile la définition, chaque ordre de la définition doit exister dans le vocabulaire coanu Indtque la fin d'une définition Exemple de définition : Compare nl a n2, Sur la pile drapeau sera 4 1 al ni<n2 et @ sinon Compare nl 4 n2. Sur la pile drapeau sera 41 si nlen2 et 6 sinon Compare nl 4 n2. Sur la pile drapeau sera 4 -1 si ni<>n2 et 0 sinon Compare nl 4 n2. Sur la pile drapeau sera 41 st nizn2 et 6 sinon Affiche contenu de la mémoire ADR Mémorise n a l'adresse adr (n sur 2 octets) Emplle 1a contenu de l'adresse adr Mémorise l'octet 4 l'adresse adr Empile le contenu de adr Affiche un retour chartot Supprime le sonmet de la pile Duplique le sonmet do la pile <Cond> IF <si vrai> ELSE <si faux> THEN Affiche le caractére dont le Supprime un nom du dictionnatre et ceux ex : FORGET CARRE Dang lez boucla. Empile l'indice Si drapeau ast vrai les mets qui suivent sont exécutész, sinon caux qui suivent ELSE le seat Empile code ASCII de la touche frappée Inverse le drapeau Empile copie de !tavant dernier nombre Rotation de Ja pile (3 celiules) Echange des deux cellules en haut de la pile PILE PILE ORDRE AVANT APRES COMMENTAIRE id al nz a3 ’ al n2 ng +LOOP on - ni n2 3 Soustrait n2 de rl ‘ “texte™ / al nz n3 2 MoT définition CARRE DUP * 3 < al n2 drapeau - al n? drapeau =. al n2 drapeau > al nz drapeau ? adr t a ade e adr A (n aur 2 octets) AND al nz n3 ET Llogique ct octet adr ae adr octet mR DROP a uP a Ae ELSE Be la forme EMIT a code ASCII est n FORGET définis depuis. I n ex ¢ DO..1.LO0P IF drapeau KEY n yor drapeaul drapeauz eo Al az na OU logique OVER al a2 Al n2 ni Ror mt n2 a3 nZ n3 ni SWAP al nz n2 nt THEN Symboltse ia tin d'une condition Les nombres sont sur deux octets (-32768 4 +32767), les mots sont limités 4 16 caractéres (154 mots maxi) et les phrases 4 159 carac- teres, Les autres mots sont des classiques du Forth 79 (voir ta- bleau ci-joint) Bibliographie FIG Forth, distribué par le Farth Interest Group Forth 79 TransForth, avec des nombres réels, de Paul Lutus GraForth, avec de puissantes possibi- lités graphiques, de Pau! Lutus 20 Pom's n° 27 Liste des mots du Fichier DICO 86B0- AS 4B 45 59 20 06 1A 86 dictionnaire de DICO 2 86B8- AB 43 4C 53 20 00 1B 86 (18 eoloime, puls 248 eolonne), (créé par CREDICO) a6CO- B1 3A 20 09 1¢ 86 BY 3B ? Aprés avoir saisi ca code 86C8- 20 00 1D 86 Cl 49 20 00 + KEY @6D0- 1 86 C7 44 4F 20 00 IF - cLs Sous monifeur, vous 16 26D8- 86 CD 2B 4C 4F 4F 50 20 * : sauvegarderez par @6E0- 00 20 45 D3 49 46 20 00 / i BSAVE DICO,A$8601,L$19A 86E8- 21 86 DA 54 48 45 4B 20 < I 8601- 28 20 00 02 00 00 20 86FO- 00 22 86 E4 45 4c 53 45 = po 8608- 20 90 02 86 01 2A 20 00 @6F8= 20 00 23 86 EB 42 45 47 > +LOOP 8610- 03 86 07 2F 20 00 04 86 8700- 49 4E 20 00 24 86 F4 57 = w 8618- OD 3C 20 CO 05 86 13 3D 8708- 48 49 4c 45 20 00 25 86 AND THEN 8620- 20 0G 06 86 19 38 20 00 8710- FD 52 45 50 45 41 54 20 aS ae 8628- 07 86 IF 3C 3E 20 00 08 8718- 00 26 87 07 43 4F 4E 53 NOT ey 8630- 86 25 41 4 44 20 00 09 8720- 54 41 4E 56 20 00 27 87 8638- 86 2B 4F S220 00 0A a6 a728- 11 56 41 52.49 41 42 4¢ ee aie 8640- 32 4E 4F 54 20 00 OB 86 8730- 45 20 G0 28 87 1C 43 41 B648- 3A 44 55 50 20 00 Oc 86 8738- 52 52 41 59 20 00 29 a7 oune Satara 8650- 41 44 52 4F 50 20 00 0D 8740- 29 46 4F 52 47 45 54 20 e ee 8658- 86 15 4F 56 45 52 20 00 8748- 00 2A 87 36 41 49 44 45 : atoonl 8660- OF 86 51 43 40 20 00 OF 8750- 20 00 2B 8? 41 51 55 49 ree sence Q668- 6 5A 432 21 20 00 10 86 8758- 54 54 45 20 00 2C 87 4c Svar AIDE 8670= 63 52 4F $4 20 00 11 86 8760 4D 4F 44 45 20 00 2D 87 bee SOreTe 8678- 6A 53 $7 41 50 20 00 12 8768- 55 52 41 5A 20 00 2E 47 EMIT MODE 8680- 86 71 43 52 20 00 13 86 8770- 60 42 45 4¢ 4¢ 20 00 aF ! = 8688- 79 45 4D 49 54 20 00 14 8778- 87 69 4c 49 52 54 45 4D : BELL 8690- 86 82 21 20 00 15 86 a9 8780- 4F $4 $3 20 00 30 87 71 ae LISTEMOTS 8698- ZE 26 00 16 86 92 2E 22 8788- 49 4E 49 54 20 00 31 8? 2 INIT 86A0- 20 00 17 86 98 3F 20 00 8790- 7A 44 45 4D 4F 20 00 32 @ DEMO aGAa- 18 86 9E 40 20 00 19 86 8798- 87 88 44 Programme ‘CREDEMO’ PE iad = INT ( VAL (NUS)): IF NU < 1 OR NU > 99 705 VTAB 6: POKE 36,0 1 REM theeeeeesnecetseceeessstseaeesssstenecaessseaeeeee 710 PRINT : PRINT DS"OPENDEMOAPF, LIGO":VIS =" 2 RIN + creation des pheases pour 1a conmande Divo 720 PRINT OSTREADDENOAPE, RMU * ja programme APF ba 3 TF sant i ey * Fes iisstecpany fe) 1985 CHANCELADE 24650 * bi UO oe een hag aleve a aa ie Peter l ey par eee * 750 PRINT : PRINT "Aucre taper RETURN? Arret taper <4> 3 RE se onnlverersvarerrr rr rpe rer rT Trt Tr er ett t tis ": & KEY: IF PEEK (768) ¢ > 13 THEN RETURN 760 Goro 700 Programme Principal GOsuUB 1000: GosuB 56000 HOME : PRINT "Co programma cree le fichier DEMOAPF qu i eentient les phrases de demonstration": PRINT "utili gables par le programme APF (1'APPRENTI FORTHier) sous Ja commande DEMO.": PRINT "bes phrases contiennent au maximum 159 caracteres,” 121 PRINT "Le nombre de phrases eat Limite a 99." 122 PRINT : PRINT "Taper <C> peur CREER une phrase ou <> pour VOIR une phrase": PRINT "<e> pour quitter." 130 GET X$:X = ASC (XS): IF X = ASC ("6") THEN END 140 IF = 67 OR X = 39 THEN GOSUA 500: SOTO 120 141 IF X= @6 OR X = 118 THEN GOSUB 700: GOTO 120 142 GOTO 130 500 REM CREATION 510 HOME : PRINT "CREATION d'une PHRASE": PRINT : INPUT Numero : ";NUS!NU = INT ( VAL (NUS)}: IF NU <1 OR NU > 99 THEN 510 520 GOSUB 31000:P$ = ** £30 FORI = 170 LEN (ES) $40 IF MIDS (E$,1,1) > GHRS (96) AND MID$ (E8,1,1) < CHRS (123) THEN PS = P3 + - 32): Goro 580 CHRS ( ASC ( MIDS (E$,1,1)) 999 END 1000 Q = 45; REM IMPLANTATION DE LA ROUTINE &XEY 1010 FOR I = 070 Q- 1: READ 20: POKE 769 + I,20: NEXT 1020 POKE 1014,1; POKE 1015,3 1190 RETURN 1200 DATA 44,0, 192,16, 251,173, 0, 192, 44,16, 192, 41,127,141, 0, 3, 201, 32,144, 14, 165, 184, 24,105,3 1210 DATA 133,184, 165, 185, 105, 0, 133, 185, $6,201,13, 240,238 201, 8, 240,234, 76,1,3 30997 REM 30999 REM ENTREE d'une ligne de 159 caracteres 30999 REM 31000 VTAB 2; PRINT : VTAB 19: POKE 36,0: CALL CH: PRINT PMS: INVERSE ; PRINT " "7; NORMAL :NC = O3E$ = "72x = FRE (0):X = 2 31010 IF NC = 160 OR X = 13 THEN 31050 31015 VTAB 2; PRINT : VTAB 20 + INT (NC / 80): POKE 36,¥ © - INT (We / 80) * 90 31020 KEY:X = PEEK (768):X$ = CHRS (XJ: IF X © 123 AN DX > 96 THEN X = X = 32:X$ = CHRS (x) 31030 IF X = @ THEN GosUB 31950 31040 IF X < > @ THEN GosvA 31900 3104] GOTO 31010 31050 IF X < > 13 THEN 31000 S45 P$ = P$ + MIDS {ES,I,1) 41060 NC = NC - 1:53 = MIDS (&$,1,NC): IF RIGHTS (E3,1) 550 NEXT :ES = PS = * © THEN 31060 560 PRINT DS$*OPENDENOAPF, L160" 31061 RETURN $70 FORI = 170 LEN (ES): PRINT D§"WRITEDEMOAPF, R";NU;™ 31897 REM 2B"l = 1: Pl MiD$ (E8,i,1): NEXT 31898 REM on ata pag tape CTRL-H 580 PRINT D$"CLOSE"; RETURN 31699 REM €99 REM VOIR 31900 IF NOT (NC = 0 AND (X = 32 OR X = 13)) THEN 31910 700 HOME : PRINT "VOIR une PHRASE": PRINT ; INPUT "Numero 31906 PRINT BIPS;: IF X = 13 THENX = 0 _ i 0 Pom's n° 27 31907 31910 31911 31930 41947 41948 31949 31950 31956 31960 31967 31968 41969 31970 $5000 58010 56020 58099 $7090 57010 57020 57030 s70q0 59090 58001 58010 501s 58016 53020 58030 58040 $9045 54050 58060 5a06s 58090 5a0a6 RETURN IF X < 32 AND X < NO = NC + USES = ES + XS, tt INVERSE : PRINT * *7 RETURN REM REM REM IF NC = 0 THEN PRINT BIP$;: RETURN Gosua 31979 RETURN REM REM Racul REM VIAB 2: PRINT : VTAB 20 + INT (NC / 80); POKE 36,N ¢- 80 * INT (NG / 80): PRINT * "; CHRS (8); CHRS 8)¢2 INVERSE : PRINT " "2: NORMAL iNC = NC - 1:53 = MIDS (E$,1,NG}t RETURN REM INITIALISATION DS = CHRS (13) + CHRS (4):PMS = "Votre phrave :7:3 IPS = CHRS (7}:CH = = 958 z= O91 RETURN REM CREATION du fichier DEMOAPF la lare fe. DS = CHRS (13) + CHRS (4): PRINT DS"OPENDEMGAPF™: PRINT DS"DELETEDEMCAPF": PRINT D3"OPENDENGAPF, L160" FS =": FORT = 1 TC 159:FS = FS + "3": NEXT FOR I = 0 TO 99: PRINT DS"WRITEDEMOAPF,R"I; PRINT F $2 NEXT PRINT DS"CLOSET: END LISTE IMPRIMEE DES PHRASES CE DEMO REM LA FIN DU FICHIER EST INDIQUEE PAR LA PHRASE : FIN TEXT : HOME : PRINT "LISTE IMPRIMEE DES PHRASES DE DEMO": PRINT : PRINT "Preparer 1'IMPRIMANTE puis tap er une TOUCHE "7: GET X$: PRINT XS DS = CHRS (13) + CHRS (4):NU = 1 PRINT D$"PR#1": PRINT "Phrases de la commande DEMO" 3 PRINT : PRINT DS"PRE3" PRINT : PRINT’ D$"OPENDEMOAPF, L160":VTS = *" PRINT DS"READDEMOAPF, R°NU GET X$: IF X$ = CHRS (13) THEN 58050 vrs = VPs + x8; coro 58040 PRINT DS"CLOSE"; IF VTS = "FIN" THEN PRINT DS"PRIZ END PRINT DS"PREL" PRINT : PRINT "Phrase "NU" PRINT DS°PRE3" NU = NU + Tz GOTO 58020 ? 13 THEN PRINT BIPS;: RETURN TEX < > 13 THEN PRINT X NORMAL on a tape SPRL-H PRINT VIS 1 2 3 4 5 99 100 101 102 104 210 120 120 2135 140 241 250 152 160 170 180 199 297 298 299 300 350 Programme ‘APF 22-4’ REM * aes . REM © LIAPPRENTI FORTH{er Version 3.0 . Rem * ‘ REM * Fej Nissuorgsky (c) 1985 CHANCELADE 24650 + REM * ssensncauenusauaessenas . REM REM = Programme Principal REM GosuB $6000: REM faitialisation GOSUB 57200: GOSUB 1350: REM Etablit l'ecran GOSUB 11000: GOSUB 51090: REM Met le DICO SU = VR IF NOT SU THEN 180 X= FRE (0) GOSUB 31000: IF MIDS (ES,1,4) = "DEMO" THEN GGSUB 1 6000: Goro 150 JF MIDS (£3,1,4) = "INIT" THEN GOSUB 350: Gora 130 iF MIDS (£8,1,2) = ": " THEN G9SUB 20000: GorG 160 cosuB 2000 IF ER < > 0 THEN GosuB 10000 gore 130 IF MIDS (E8,1,4) = "INIT" THEN RUN END REM REM ENTREE d'une Touche au CLAVIER REN INVERSE ; PRINT * "7: NORMAL : & KEY:X = PEEK (768): MS = CHRS (Xj): PRINT CHRS (6); CHRS (32); CHRS (B)7z RETURN VTAB 2: PRINT + VTAB 23: PRINT "Confirmer par ‘C' "et GOSUB 300; TF XS = "C” OR XS = "co" THEN SU = FX: RETU RN 355 VIA 2: PRINT ; VIAB 23: CALL CW: RETURN 1237 REM 1298 REM Suite Taper Return 1299 REM 1300 PRINT "Pour continuer Taper une Touche ";: GOSUB 300 i179 = PEEK (37): YTAB 2: PRINT : VTAR T9 + 1: POKE 36,0: CALL CL: RETURN 1347 (REM 1348 REM Mode NORMAL 1349 REN 1350 VIAB 2: PRINT : VTAB 4: POKE 36,62: PRINT "NORMAL "IMF = FX: RETURN 1357 REM 1358 REM Mode PAS A PAS 1359 REN 1360 TAB 2: PRINT : VPAB 4: POKE 36,62: PRINT "PAS A PAS ":MF = VR: RETURN 1997 REM 1938 REM EXECUTION 1999 REM 2000 PR =U 2011 GOSUB 15900: GosuB 1£920:co = 4: cosvB 15000 2015 IF NOT (PR < LEN (ES) AND ER = 0) THEN 2060 2020 GOSUB 32000: GOSUB 3200 é 2030 IF ER < > Z THEN RETURN 2031 GOSUB 92206: IF NU < > Z THEN 2034 2032 GOSUB 3210G: IF NU = 99 THEN GOSUB 3000; GOTO 2033 2033 ER = 18: RETURN 2034 IF NU > 29 AND NU < J9 THEN ER = 6: RETURN 2035 IF NU = 28 THEN ER = 28: RETURN 2036 IF NU « 29 THEN ER = 27: RETURN 2037 GosuB 2200 2039 IF ER < > % THEN RETURN 2040 IF MF THEN GOSUB 15920:CO = 42: GosuUB 15000; vTAB 2 1 PRINT + VIAB 24; GOSUB 1300 2045 IF MF THEN GOSUB 15300: GOSUB 15920:CO = 4: GosuB 1 5000 2050 GOTO 2015 2060 IF NOT ME AND ER = 2 THEN GOSUB 15920:CO = 42: GOs UB 15000: VIAB 2: PRINT : VTAB 24: POKE 36,5: GOSUB 1300 2065 GOSUE 15900: GOSUB 15920:CO = 4: GOSUB 15000 2070 RETURN 2197 REM 2196 REM Exécution d'un mot 2199 REM 2200 IF NU > $9 THEN 2300 2210 ON NU GOSUB 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3409, 3900, 4000, 4100, 4200, 4300, 4400, 4500, 4600, 4700, 4800, 49 00, 000, 5100, 5290, $300, 5400, 5500, 5600, 5700, 5800, 5960 2 6000 2215 IF NU < 31 THEN RETURN 2220 ON NU = 30 GOSUB 6100, 6700, 6300, 6400, 6500, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, 7590, 7600, 7700, 78 66, 7900, 8000 2240) RETURN 2297 REM 2298 REM Exécution d'un mot erdé 2299 REM 2300 ON PEEK (AD + LM + 3) GOTO 2400,2400,2600,2700 2310 ER = RETURN 2397 REM 2198 REM le mot trouvé est une CONSTANTE 2399 REM 2400 GOSUB 15200: IF ER < > 2 THEN RETURN 2410 POKE FN VP(PM¥), PEEK (AD + LM + 4); POKE FN VP(?M 4) 4, PEEK (AD + LM + 5): RETURN 2497 REM 2498 REM le mot trouvé est une VARIABLE 2499 REM 2500 GOSUB 15200: IF ER < > 2 THEN RETURN 2510 79 = EN VE(PNA); POKE 79, FN RQ(AD + LM + 4) 2520 POKE T9 +1, INT (AD + LM + 4) / 256); RETURN 2597 REM 2598 REM le mot trouvé est un TABLEAU /CARRAY) 2599 REM 2600 PD = 1: GOSUB 15210; IF ER = 2 THEN RETURN 2605 TPO = PNV(PNO): IF TP4 < 2 OR TPN > PEEK (AD + LM + 4) - 1 THEN ER = 33; RETURN 2610 T9 = FN VP(PM8): POKE 79, PEEK (AD + LM + 5 + TPB): POKE 19 + U,Z 2620 RETURN 2697 REN 2658 REN Exécution d'un MOT CREE 2699 Re 2760 PRO = I:PR(PRYi = AD + iM + 2 pe) Pom's n° 27 2730 2735 2740 2750 2751 2752 2752 2760 2770 2800 2820 2621 2822 2825 2830 2835 2840 2845 2850 2855 2900 2905 2906 2910 (2950 2955 2965 2970 2997 2998 2999 3000 3005 3099 3100 3105 3110 3199 3200 3205 3210 3299 3300 3305 3310 3399 3400 3402 3405 3410 3499 3500 3510 3820 3599 3600 3610 3620 3699 3700 3710 3720 3799 34800 3810 381s 3820 3a99 3960 3910 3920 3999 4060 IF PRE = 2 OR ER < > Z THEN RETURN PI = PR(PRO):PRO = PRY ~ 1 TF PEEK (PT) = 1 OR PEEK (PT) = 2 OR PEEK (PT) = 3 THEN ON PT COSUB 2400,2500,2600; GoTo 2730 IF PEEK (PT) < > 4 THEN 2760 IF PEEK (PT + 1) = 255 THEN 2730 GOSUB 15220: IF ER < > Z THEN 2730 PR(PRE) = PT + 1: GOTO 2730 TF PEEK (PT) = 128 THEN N = NU:NU = GOSUB 2820:NU = N: GOTO 2730 IF PEEK (PT) = 129 THEN GOSUB 2956 GOTO 2730 IF NU > 99 OR NU = 23 THEN 2825 GOSUB 2210: IF ER < > 2 THEN RETURN PY = PY + 2: GOSUB 15220: IF ER = 2 THEN PR(PRY) = PT : RETURN IF ER < > & THEN RETURN IF NU = 23 THEN 2900 GOSUB 15220: IF ER < > Z THEN RETURN PR(PRO) = Pr + 2 GOSUB 9000: REM cherche l'adreaze du mot cree NU GOSUB 15220; IF ER < > Z THEN RETURN PEEK (PT + 1): PR(PRA) = AD: RETURN TP = PEEK (PT + 2): GOSUB 15200: IF ER < > Z THEN RETURN IF |? ¢ > £2 THEN FOR I = U TO TB:PMO(PMO) = PEEK (PT + 2 + I): GOSUB 5000:PME = PMA + U: NEXT PHO = PM& - U; GOSUB 15220: IF ER < > 2 THEN RETURN PR(PR¥) = PT + 3 + PP: RETURN Gosua 15200: IF ER < > # THEN RETURN T3 = FN VP(PHN): POKE T9, PEEK (PT + U): POKE TS + U + PEEK (PT + 2) Gosua 15220: If ER < > 2 THEN RETURN PR(PRY) = PP + 3: RETURN REN REM 98% 99 ({mmadfat) **** REN GOSUB 15200: IF ER = Z THEN PMA(PMB) = UN RETURN REM #Fee y PD = 2: GOSUB 15210: IF ER <¢ > Z THEN RETURN TP = PMS(PM3) + PMB(PMB - U) > GOSUB 15400: IF ER < > 2 THEN RETURN PME (PMY ~ U) = TP:PHE = PMO = UZ REM * veee PD = 2: GOSUB 15210: IF ER ¢ > 2 THEN RETURN TP = PMV(PMY ~ U) ~ PMO(PMN): GOSUA 15400: IF ER < > 2 THEN RETURN PMOIPMY - U) = TP:PMN = PH¥ — U: RETURN REM nase PD = 2: GOSUB 15210: IF ER ¢ > £ THEN RETURN TP = PMY(PMY ~ U) * PMO(PMA): GOSUB 15400; IF ER « > % THEN RETURN PMO(PMY = Uj = TP:PM® = PMA = Ur RETURN RETURN REM *e8s freee PO = 2: GOSUB 15210: IF ER < > % THEN RETURN IF PMY(PM8) = Z THEN ER = 2: RETURN Te = INT (PMN(PMY ~ U) / PMU(PMO)): SOSUB 15400: IF ER © > 2 THEN RETURN PMOIPNY - U) = TP:PMO = PMY - U: RETURN REM 2 teee PD = 2; GOSUB 15210: IF ER < > 2 THEN RETURN IF PMO (PMY - Uj < PMS(PM3) THEN TP = - 1: GOTO 3820 TP = %: GOTO 3620 REN PD = 2: COSUB 15210: IF ER < > 2 THEN RETURN dF PMO(PMG ~ U) = PMO(PMO) THEN TP = ~ 1: GOTO 4920 Te = Z: GOTO 3820 REN fete 8 PD = 2: GOSUB 15210: IF ER < > 2 THEN RETURN IF PMO(PME - U) > PMY (PMY) THEN TP = - 1: GOTO 3820 TP = 2: GOTO 3820 REN #888 3 PD = 2: GOSUB 15210: IF ER < > Z THEN RETURN IF PMU(PMY = U) < > PMO/PMY) THEN TP = = 1; Goro 4 820 P= @ PHO = PME - NU(PME) = TP: RETURN REM * AND - PD = 2: GOSUB 15210: IF ER < > 2 THEN RETURN IF PMt(PMA = U) = Z OR PME(PME) = Z THEN TP = Zz GOT © 3az0 TR = = 1: GOTO 3620 ‘REM dase OR eee PD = 2: GOSUR 15210; IF ER < > 2 THEN RETURN 4010 4020 41099 4100 4110 4120 4299 4200 4210 4220 4299 4300 4310 4399 4400 4410 4420 4499 4500 4510 4899 4600 4610 4615 4699 4700 4710 4799 1800 4810 1895 1900 4910 4920 1999 5000 5010 5015 $020 5030 5099 5100 5110 $199 $200 S210 3220 5293 5300 5305 $310 5315 5320 5330 5340 5399 5400 5410 5499 5500 5510 5520 5530 5599 5600 5605 5699 5700 5799 5800 IF PMO(PM$ - U) < > 2 OR PMO(PNE) < > 2 THEN TP = = 12 GoTo 3420 TP = 2: GOTO 3820 REN de NOT aeee PD = Uz GOSUB 15210: IF ER < > zi THEN RETURN IF PMA(PM) = Z THEN PMO(PMY) = = U: RETURN PMO (PM) 2: RETURN REM + Dep sate PD = Uz GOSUB 15210: IF ER < > 2 THEN RETURN GOSUB 15200: IF ER < > % THEN RETURN PMO (PME) = PMO (PME - RETURN REM ###4 DROP PD = Uz GOSUB 15210: IF ER < PM& = PM@ = U: RETURN REM #*8* OVER feae PO = 2: GOSUB 15210: IF ER < > % THEN RETURN > 2 THEN RETURN gosua 15200; IF ER < > Z THEN RETURN PMR (PMA) = PMB (PME - 2): RETURN REM #848 Ci feet PD = Ur GOSUB 15210: IF ER < > % THEN RETURN PMO(PMO) = PEEK (PMO(PMO)): RETURN REM + GP ease PD = 2; GOSUB 15210: IF ER < > 2 THEN RETURN IF PMA(PM® = U) < 2 OR PMO(PME = 30: RETURN U) > 255 THEN ER = U):PMt = PMt ~ 2: RETURN PD = 3: GOSUB 18210: IF ER < > 2% THEN RETURN TP = PMO(PME ~ 2):PME(PME - 2) = PNO(PN® - U) PME (PME + RETURN nee PD = 2: GOSUB 15210: IF ER < > % THEN RETURN TP = PMO(PMt = U):PM¥(EMY - U) = PMO (PME): PMS (PME) = TP: RETURN REM aeen CR EL = EL + UrEC = SWAP tee 3: IF EL < > 6 THEN RETURN FOR I = U TO 4:EC$(I) = ECS(T + U); NEXT :EC8(5) = * "EL = 5 GOSUB 50055: RETURN REM tte* EMTD see PD = I: GOSUB 15210: IF ER < > 2 THEN RETURN IF PM&(PMt) > 255 OR (PMA(PME) < 32 AND PME (PME) < 2 13) THEN ER = 30: RETURN IF PMO(PMS) = 13 THEN GOSUB 4900: RETURN ECS(EL) = ECS(EL) * CHRS (PMO(PN¥)): VTAB 2: PRINT : VIAH 4 + EL: POKE 36,17 + EC: PRINT CHRS (PMA(PMI) d7:EC = EC +1: IF EC = 17 THEN GOSUB 4900 PME = PM& = Uz RETURN REM #89 | STORE PO = 2: GOSUB 18210: IF ER < > @ THEN RETURN POKE PHB(PH$), PEEK ¢ FN VP (PMA - U) + U)z POKE PNO( PM’) + U, PEEK ( FN VP(PMt - U)):PM® = PHO = 2; RETU BN REM PD = Uz GOSUB 15210: feet anne eee IF ER < 3 2 THEN RETURN VIS = STRS (PMU(PM)): GOSUB 4900:ECS(EL) = VIS:EC = EC + LEN (VTS) VIAB 2: PRINT : VIAB 4 + EL: POKE 36,18: PRINT ECS(E PMb = PMG - Uz RETURN fee lm teen IF MIDS (E3,PR,U) = " " THEN PR = PR + U: GOTO 5300 IF PM@ > = 11 THEN ER = 21: RETURN IF MIDS (ES, PR,U) = CHRS (34) OR PR > = NC THEN $ 330 PHO = PMO + U:PMACPMO) = ASC { MIDS (ES,PR,U)): GOSU B 5000: IF ER < > % THEN RETURN PR = PR + U: GOTO 5310 IF MIDS (£3, PR,U) < > CHRS (24) THEN ER = Si: RET URN PR = PR + Ur RETURN REM thee 3 tene PD = Uz GOSUB 15210; IF ER < > % THEN RETURN GosuB 5510: GOTO 5710 REM *##* 4 = AROBAS FETCH #440 PD = U: GOSUB 15210: IF ER < > 2 THEN RETURN T9 = PEEK (PMO(PMO)) + PEEK (PMO(PMO) + 1) * 256 IF 19 > NX THEN T9 = 79 - 65536 PMO(PME) = 19; RETURN REM fetes KEY fete GosuB 15200: IF ER < > % THEN RETURN VIAB 2: PRINT : VIAB 4 + EL: POKE 36,EC + 17: GOSUB 300: VTAB 2: PRINT :PMO(PM¥) = ASC (XS): RETURN REM #848 CLS taee COSUB 50005: RETURN REM tt#e tae ER = 23: RETURN Pom's n° 27 23 5899 $900 5999 6090 6020 6030 6039 6190 6110 6199 6200 6210 6215 6220 6230 6299 6300 6310 6320 6330 6340 6399 6400 6499 6500 6599 6600 6699 6700 6710 6720 6799 6800 6899 6990 6910 6999 7000 7005 7006 7010 7012 7015 7020 7625 7030 7035 7040 7050 7060 7039 7100 7105 7110 715 7116 7120 7125 7130 7140 7145 7199 7200 7205 7210 7218 7216 7220 XN REM #Hea ER = 272 RETURN REM eee To feee IF PO = Z THEN ER = 24: RETURN GOSUB 15200: IF ER < > 2 THEN PMO(PMO) = ID: RETURN REM DO PO = 2; GOSUB 15210: IF ER< > Z THEN RETURN ID = PMO (PMO); II = PMO(PM® - U):PM¥ = PMN - 2:70 = Pr 2 RETURN REM *##** +LO0P PO = U: GOSUB 15216: IF ER < RETURN aeee eee > 2 THEN RETURN IF PQ = 2 THEN ER = 11: RETURN 1D TD + PM8(PM8):PMt = PMB - U IF ID < 11 THEN PT = PO RETURN REM * IF rene PD = U: GOSUB 15210: IF ER < > 2 THEN RETURN IF PMQ(PM8) < > 2 THEN PMO = PMO — U: RETURN PMG = PME - U NO = 35: GOSUB @60G: IF PT < MX THEN RETURN ND = 34: GOSUB 9800; RETURN REM ** THEN * RETURN REM 0 fee* ELSE +8" NO = 34: GCSUB 8800; RETURN REM *#2* BEGIN *#*4 PW = PT: RETURN REM #84* WHILE **** PD = U: GOSUB 15210: IF ER < > 2 THEN RETURN IF PMO(PMA) < > 2 THEN PMG = PMO = Ur RETURN PM’ = PMt - U:ND = 36: GOSUB 8600: RETURN REM *#4* REPEAT #8 PT = PW: RETURN REM ** CONSTANT **** PD = U: GOSUB 15210: IF ER € > 2 THEN RETURN 1 = U: GOTO 7005 REM = ##8% VARIABLE **** Tl = 2: IF MIDS (68,1, LEN (MOS)) < > MOS THEN ER = 28: RETURN GOSUB 32000: IF ER < > % THEN RETURN IF MOS = CHRS (13) THEN ER = 29: RETURN GCSUB 32200: IF NU ¢ > 2 THEN ER = 202 RETURN gosuR 32090 IF FD + LM + 9 > MX OR MC © 255 THEN ER = 4: RETURN FOR I = 2 70 LM = U: PONE FO + I, ASC ( MIDS (MOS, + U,U))2 NEXT POKE FD + 1,32: POKE FD + 1 + U,2: POKE FO +I + 2, ¢: POKE FO + 1 + 3,T% IF Tl = 2 THEN POKE FD + 1 + 4,2: POKE FD +1 + 52 4 POKE FD 4 I + 6,255 IF T1 = U THEN POKE FD + I + 4, PEEK ( FN VP (PMO) )? POKE FD + I + 5, PEEK ( FN Ve(PMN) tI + 6,255:PMt = PME - U PCKE FD + + &, FN RO(OM): POKE FD +1 + 7, ¢ 256) DM = FO;FD = FD + iM + 9:mc = MC + + U): POKE FD + INT (Die GosuB 51000; RETURN REY *##4# CARRAY #444 PD = U: GOSUB 15210: IF ER < > 2 THEN RETURN TPA = PMO(PMA) ¢ U: IF TPA < U OR FPA > 127 THEN ER © 33: RETURN GCSUB 32000: IF ER < > 2 THEN RETURN IF MOS = CHRS (13) THEN ER = 29: RETURN Gosua 32200: If NU < > 2 THEN ER = 20: RETURN IF FD + 1M ¢ 7 + TPA > MX OR MC = 255 THEN ER = 41 R ETURN FOR I = 2 T0 LM - Uz POKE FD + 1, ASC ( MIDS (MOS,1 + U,00)2 NEXT POKE FD + 1,32: POXE FD + 1 + U,2: POKE FD + 1 1 2,M POKE FD +1 + 3,4 POKE FD + I + 4,7P8: POKE FD + 1 + § + TPA, 255 POKE FD + I + 7 ¢ TPS, FN RO(OM): POKE FO + 1+ 6 + TPt, INT (DM / 256) OM = FO:FO = FD + LM + @ + TPR:MC = MC + U: Gosua 510 00:PMa = PH® — U: RETURN REM * FORGET ** GOSUB 32000: IF ER ¢ > 2 THEN RETURN IP MOS = CHRS (23) THEN ER = 29: RETURN VIAR 2: PRINT : VIAB 23: CALL CW: PRINT "Etes-vous 2 ur ? O/N "7: GOSUA 300: IF XS < > "O" AND XS = 27 0” AND XS ¢ > "N" AND XS ¢ > "n™ THEN 7210 TE XS = "n" OR XS = "N" THEN PR = NCz RETURN VIAB 2: PRINT GOSUB 32200: IF MOS = CHRS (13) THEN ER = 29: RETUR u 7230 IF NU = 2 THEN ER = 16: RETURN 7240 IF NU < NM + U THEN ER = 22: RETURN 7250 FD = AD:AD = AD + TP: GOSUB 51800:DM = PEEK (AD) * 2 56 + PEEK (AB + U) 7260 MC = NU: GOSUB 51000: RETURN 7299 REM o*8** RIDE 888 7300 GOSUB $7000: GOSUB 57200:CO = 4: GOsUB 15000: GosuB 32096 7310 GOSUB 50050: GOSUB 1350: cosuUB 51000 7320 VIAB 2: PRINT : VIAB 19: PRINT PMS: PRINT E$; RETURN 7399 REM * QUITTE 468 7400 VIAB 2: PRINT z VTAB 23: PRINT "Confirmer pax ‘Gt "7 : GOSUB 500: IF X$ = "C* OR KS = Pe" THEN TEXT HO ME : PRINT "Au revolr ... 1 END 7410 VTAB 2: PRINT : VTAB 23: CALL CW: RETURY 7499 REN = ###* =NODE *#9# 7500 IF NOP MF THEN GOSUB 1360: RETURN 7510 GOSUB 1350: RETURN 7599 REM *### RAZ eee 7600 GOSUB 15300; GOSUB 15900: GOSUB 15920:PR = NC: RETUR ) 7699 REM sees BELL #4" 7700 PRINT BIPS$;: RETURN 7799 REM * LISTENOTS * 7800 AD = DN: GOSUB 51900:TP = 2: TEXT 7810 IF AD = @ THEN 7670 7815 VTAB 2: PRINT : VTAB 13 + TP: POKE 36,54 7820 IF PEEK (AD) = 32 THEN 7850 7830 PRINT CHRS ( PEEK (AD) );:AD = AD + U: GOTO 7420 7850 TP = TP + U: GOSUB 5]900:AD = PEEK (AD) * 256 + PEE K (AD + U): IF 2 = 5 THEN TP = 2: VTAB 2: PRINT : V. TAB 23: GOSUB 1300: VTAA 2: PRINT ; VTAB 23: CALL GW : GOSUB 51900: TEXT 7860 GOTG 7810 7870 IF 1 < > % THEN VTAB 2: PRINT : VTAB 23: GosuUB 13 00: VTAB 2: PRINT : VTAB 23: CALL CW 7680 GOSUB $1000: RETURN 7895 REM * DEMO 9809 7900 ER = 26: RETURN 7999 REM o*#* INIT e466 8006 ER = 26: RETURN 8798 REM Recherche d'un mat de numero ND dana un mot cr 8799 REM (utilise pour ELSE THEN et REPEAT) 8600 PT = PT + 2 8820 IF PEEK (PT + Uj) = ND OR PT > = MX THEN RETURN 8630 IF PEEK (PT) = 129 THEN PT = PT + 3: GoTo 8820 Be40 IF PEEK (PT) = 128 AND PEEK (PT + U) < > 23 THEN PT = PT + 2: GOTO 8820 ge50 PT = PT + 3 + PEEK (PT + 2): GOTO 8820 8997 REM 9998 REM Cherche I'adresse du mot cree NU 8999 REM 900C 1 = DM 9005 IF I = 2 THEN RETURN 9010 IF PEEK (I) ¢ > 32 THEN I =I + Us GOTO 9910 90OLE IF PEEK {I + 2) = NU THEN AD =I + 4:1 = @: GOTO 90 os 9020 AD = I: GOSUB 51800: = PZEK (AD) * 256 + PEEK (AD + Uz GOTO 9005 9997 REM 9998 REM Affichage de2 messages dtERREUR 9999 REM 10000 IF ER = 34 THEN HSS = "Erreur d'E/S sur Disquette.* : GOTO 10010 10004 VTAB 2: PRINT ; VEAB 2 10005 PRINT D$"OPEN MESSAPF,L39": PRINT 10010 10020 DS"READ MESSAPF,R "ER: INPUT MS$z PRINT D5"CLOSE™ VPAB 2: PRINT ; ¥TAB 23: CALL CW: O:CO = PR: IF PR > 80 THEN CO = PR ~ 80: VTAB 21 POKE 36,CO - 1: INVERSE : PRINT " "7: NORMAL + 2: PRINT : VIAB 24: GOSUB 1300: VTAB 2; PRINT = B 23: CALL CW PRINT MS$: VTAB 2 vraB VIA 10030 ER = 2: GOSUB 15900: GOSUB 15920: GOSUB 15300: RETUR N 10997 REN 10998 REM Mise en piace du DIC 20999 REM 21000 VTAB 20: POKE 36,10: PRINT "Preparation du Biction 211005 11010 21020 11025 11030 I = DMeK naire en COURS . PRINT DS"ALOAD DICO™ FD = 34714: REM FO=FINDICO DM = 34705: REM DM=LASTMOT (DERNIER MOT) AY = FD! REM FIN DU DICO DE BASE = NM 24 Pom's n° 27 11040 IF I = % THEN RETURN 20030 IF MC = 255 THEN ER = 4: RETURN 11050 IF PEEK (I) < > 32 THEN T$(Kj = TS(K) + CHRS ¢ P 20020 GOSUB 32000: GOSUB 32090: If MOS = CHRS (13) THEN EEK (1)):T = I + Uz GOTO 11050 ER = 19: RETURN 11060 AD = I: GOSUB 51800:K = K ~ U; VTAB 20: POKE 36,51: | 20030 IF ER < > % THEN RETURN PRINT CHRS (42 + K - ( INT (K / 2) * 2)) 20040 GOSUB 32200: IF NU < > Z THEN ER = 20: RETURN 11070 I = PEEK (AD) * 256 4 PEEK (aD + U); Goro 11040 20045 Al = FD 11080 VIAB 20: POKE 26,0: CALL Ch 20050 IF Al + IM + 3 > MK THEN ER = 4: RETURN 11050 RETURN 20060 FOR I = £70 LM~ 1: POKE Al + I, ASC ( MIDS (MOS,I 11957 REM + U,U)) 2 NEXT 11958 REM Examen du DICO {pas utilise par le programme) 20070 POKE Al + LM,32:Al = Al + LM + U: POKE Al,2 11959 REM 20080 Al = Al + U: POKE Al,MG:Al = Al + Ur POKE Al,42A1 = 12000 I = DM Alea 12006 IF I = 2 THEN END 20100 GosuB 32000: GosuUB 32090: GOSUB 32200: IF NU = Z TH 12007 PRINT I;" EN GosuB 32100 12010 IF PEEK (1) ¢ > 32 THEN PRINT CHRS ( PEEK (I)); 20105 IF MOS = CHR$ (13) THEN ER = 19: RETURN t1 = 1+ Uz GOTO 12010 20106 IF NU = Z THEN ER = 18: RETURN 12020 PRINT " PEEK (I ¢ U) * 256 + PEEK (I + 2); 20110 IF ER < > Z OR NOT CP THEN 20310 ";:AD = I: GOSUB 51800:1 = PEEK (AD) * 256+ PEEK 20112 IF NU = 49 OR NU = 50 THEN ER = 5: GOTO 20300 (aD # U): PRINT I: GOTO 12006 20120 IF NU = 28 THEN ER = 23: GOTO 20300 14997 REM 20130 IF NU > 38 AND NU < 51 AND NU < > 47 THEN ER = 52 14998 REM Affichage Pile Feran GoTo 20300 14999 REM 20140 IF NU = 23 THEN GOSUB 32000: IF MOS = CHR (13) 0 15000 IF PNA = 2 THEN RETURN R MIDS (HOS,LM,1) < > CHRS (34) THEN ER = 31; COP 15010 FOR I = 1 70 PMt: VTAB 2: PRINT : VTAB 15 - I: POKE 9 20300 36,CO: PRINT RIGHTS (* "+ sTRe (PMO(T)),6) 20150 IF NU < > 23 THEN 20160 15020 NEXT : RETURN 20151 IF Al +3 ¢ LM = U > MX THEN ER = 4: GOTO 20300 15199 REM Pile saturee ?? 20152 POKE Al,12@:Al = Al + UJ: POKE Al,23:Al = Al + Uz BO 15200 IF PMA < 11 THEN PHA = PNB + 22 RETURN KE A1,LM = U: FOR I = U TO LM ~ U: POKE Al + I, ASC 15201 ER = 21: RETURN ¢ MIDS (MO$,I,U)): NEXT :Al = Al + LM: GOTO 20210 15209 REM Y a-c-t1 assez d'elements sur la pile ?? 20160 IF NU < > 98 THEN 20170 18210 IF PMt < Po THEN ER = 1 20161 IF Al + 3 > MX THEN ER = 4: GoTo 20300 15211 RETURN 20162 POKE Al,129:Al = Al + U:TP¥ = VN: POKE Al, INT (TPO 15219 REM Pile de retour saturee 77 / 256):Al = Al + Uz POKE Al, FN RO(TPA)zAI = AL + U 15220 IF PRO < 255 THEN PRU = PRO+ 1: RETURN : GOTO 20210 15221 ER = 21: RETURN 20170 IF NU = 29 THEN CP = FX: GOTO 20300 15297 REM 20180 IF NU > 29 AND NU € 39 THEN GOSUB 21000: IF ER < 15298 REM Initialisation des Piles > 2 THEN 20300 15299 REM 20190 IF Al + 2 > MX THEN ER = 4; GoTo 20300 15500 PMA = Z:PRA = 22408 = ""s GOSUB 12090: RETURN 20200 POKE Al,128:A1 = Al + Uz POKE AI,NU:AI = Al + U 15397 REM 20210 GOSUB 32000: GOSUB 37090: GOSUN 32200: IF NU < > 2 15399 REM Test si resultat entre NN at NX THEN 20300 15399 REM 20211 GOSUR 32100: IF NU < > Z THEN 20300 15400 IF TP < NN OR TP > NX THEN ER ~ 3 20212 IF MOS = CHRS (13) THEN ER = 19: GoTo 20300 15401 RETURN 20213 ER = 18 15897 REM 20300 GoTo 20110 15898 REM Efface Pile AVANT 20310 IF ER ¢ > £ OR CP THEN RETURN 15899 REM 20315 IF FC = 31 THEN ER = 10: RETURN 25900 POKE 33,7: POKE 32,4: POKE 34,3: POKE 35,14: HOME : © 20376 IF FC = 33 OR FC = 35 THEN ER = 7: RETURN TEXT : RETURN 2OJi7 IF FC = 36 THEN ER = 14: RETURN 15919 REM Efface Pile APRES 20318 IF FC = 37 THEN ER = 13 15920 POKE 33,7: POKE 32,42: POKE 34,3: POKE 35, 20319 IF ER ¢ > 2 THEN RETURN : TEXT : RETURN 20320 IF Al + 3 > MX THEN ER = 4: RETURN 15997 REM 20330 POKE Al,255:Al = Al + U: POKE AL, INT (0M / 256)2A1 18998 REM *#** DENG «008 = Al + U: POKE Al, FN RQ(DM):Al = Al + U:DM = FD 15999 REM 20340 FD » AL:MC = MC + U: GOsUB 51000 16000 GOSUR 15906: GOSUB 15920: COSUB $0005: GoSUB 15300: 20345 MOS = "": GOSUB 32090: VTAB 2: PRINT : VTAB 24: POKE GOsUB 1360 36,2 16005 VIAB 2: PRINT : VIAB 23: PRINT "Numero de DENO (XX) 20350 RETURN fo": CALL CH: GET X$:X = ASC (XS) - 48; IF X <0 20099 REN OR X > 9 THEN PRINT BIPS;: GOTO 16005 20300 VIAB 2; PRINT ; VTAB 24: POKE 36,2: PRINT "Compilat 16010 NE = X: PRINT X32: GET X$: IF X$ = CURS (13) THEN 1 don en cours .... Soyez patients. "7: RETURN 6025 20997 REN 16015 X = ASC (XS) - 48: IF X < 0 ORX > 9 THEN PRINT BI 20998 REM *¥*#* Analyse SYNTAXIQUE des structures de co PS; GOTO 16065 nerole *## 16020 NE = NE * 10 4 Xz PRINT X$;: GET X$; IF X3 << > CHR 20999 REM $ (13) THEN PRINT BIP$;2 GOTO 16005 21000 IF FC = 2 THEN GOSUR 21050: RETURN 16025 VTAB 2: PRINT : PRINT DS*OPENDEMOAPF, L160": VTAB 2: 21010 GOSUB 21100: RETURN PRINT : PRINT DS*READDEMOAPF, R°NE:E3 = "7 21050 IF NU = 31 OR NU = 33 OR NU = 36 THEN FC = NU: RETU 16040 GET XS: IF Xt CHRE (13) THEN i605o RN 16045 ES = BS + X$: COTO 16040 21055 IF NU = 30 THEN ER = 16050 VIAB 2: PRINT : PRINT DS*CLOSE": IF ES = "FIN" OR & 21060 IF NU = 32 THEN ER = $ = "SESSSSSEESESSSSSESFSSSISSSESSSESSSESSESESSESESE 21065 IF NU © 34 THEN ER = $9955553559595545 5435294 $45955535535994353558S5585935 21070 IF NU = 35 THEN ER $$9855553555355585353535553533S3533S53SS335335388385 21075 TF NU = 47 THEN ER = $$355583" THEN ER = 36: RETURN 21080 ER = 25: RETURN 16060 NC = LEN (ES) 21100 IF FC = 31 THEN GOSUA 21150: RETURN 16070 IF MIDS (E$,NC,1) ©" " THEN NC = NC - 1: GOTO 160 21101 GOSUB 21209: RETURN % “21150 IF NU = 31 OR (NU > 32 AND NU < 39) THEN ER = 26: R 16060 BS = MID$ (BS,1,NC) + CHRE (13):NC = LEN (ES) ETURN 26090 VTAB 2: PRINT ; VTAB 19: CALL CH: PRINT PMS: PRINT | 21151 IF NU = 32 THEN FC = 2 ES: RETURN 21152 RETURN 19987 REM 21200 If NU = 30 THEN ER = 24: RETURN 19999 REN **4* COMPILATION +### 21205 IF FC = 33 THEN GOSUS 21250: RETURN 19999 AEM 21210 GOSUB 21300: RETURN 20000 GOsuB 15900: GosuA 1$920:CO = 4: GOsua 15000: sosuUB 21280 -IF NU = 34 THEN FC = 2: RETURN 20900:P = VRIPR = 3:FC © z 21251 IF NU = 35 THEN FC = 35: RETURN __/ ° Pom's n° 27 25 21252 21300 21301 21350 21351 21400 21461 21450 21451 21500 21505 21510 30997 30998 30999 31000 41010 31015 31020 31025 31030 31040 31041 31080 31060 31062 31897 31898 31899 31900 31906 31907 31910 31911 31930 31947 31948 i949 31950 31956 31960 31967 31968 31969 31970 31997 31998 31999 32000 32010 32040 32050 32058 32060 32065 32070 32087 32088 32089 32090 32093 32098 32097 32098 32099 32100 32110 32120 42130 32140 ER = 26: RETURN IF FC = 35 THEN GoSUB 21350: RETURN Gosua 21400: RETURN IF NU = 34 THEN FC © Z: RETURN ER = 26: RETURN JF FC = 36 THEN GOSUB 21450: RETURN Goto 21560 IF NU = 37 THEN Fe = 37; RETURN ER = 14: RETURN IF FC < > 37 THEN ER = 15: RETURN IF NU = 38 THEN FC = Z: RETURN ER = 26: RETURN REM REM ENTREE d'une ligne de 159 caracteres AEM VTAB 2: PRI VTAB 19: POKE 36,0; CALL CW: PRINT PNSING = 0275S = "*:X © FRE (0):X = 2:MOS = "": GOSU 8 32030 IF NOT INC < > 159 AND X <¢ > 13) THEN 31050 VTAB 2: PRINT : VTAB 20+ INT (NC / 80): POKE 36,N c= INT (NC / 80) * 80 GOSUB 300: IF X < 123 AND X > 96 THEN X = X - 32:x8 = CHRS (x) IF X= 27 THEN TEXT : HOME : GoTo 31000 IF X= 8 THEN GOSUB 11950 IF X < > 8 THEN GosuB 31900 GoTo 31010 IF X < > 13 THEN ER = 16: GosuB 10000: GoTo 31000 NC = NC = 1:E$ © MIDS (ES,1,NC): IF RIGHTS (ES,1) =" " THEN 31060 NC = NC + 1:58 = ES + REM REM REM IF NOT (NC * 0 AND [X * 32 OR. X = 13)) THEN 31910 PRINT BIPS#: IF X = 13 THEN X = 0 RETURN If X <.32 AND X < > 13 THEN PRINT BIPS;: RETURN NG = NG + UES = ES + X$: IF X < > 13 THEN PRINT x CHRS (13): RETURN on n'a pas tape CTRL-# en 4 tape CTRL-H IF NC = @ THEN PRINT BIPS;: RETURN NG = NC ~ 1:E8 = MID# (E$,1,NC): GOSUB 31970 RETURN REM REM Recul REM VIAB 2: PRINT : VTAR 20 4 INT (NC / 80): POKE 36,N © - 80 * INT (NC / G0): PRINT" "+ CHRS (8)7: RET URN REM REM Recherche d'un mot dans L'ENTREE REM MOS = "":IM = 0 IF MIDS (ES,PR,1) = " " THEN PR = PR + 1: GOTO 320 10 IF MIDS (ES,PR,1) (23) THEN 32055 MOS = MGS + MIDS (E$,PR,1):PR = PR + 1:LM = LM + At GOTO 32040 IF LM > 16 THEN ER = 17: RETURN IF MIDS (E3,PR,1) < > CHR$ (13) THEN RETURN IF LM © G THEN MOS = CHRS (13):PR = PR +1 =" " OR MID3 (E$,PR,1) = CHRS RETURN REM REM Affiche le MOT REM IF MGTS = CERS (13) THEN RETURN VIAR 2: PRINT : VTAB 14: POKE 36,17: PRINT LEFTS ( mos +" =, 16) RETURN REM REM MOS est=-L1 un nombre 7? REM BR = Z: FORI =U TO LEN (NO3) X= ASC ( MIDS (MOS,1,U)): IF IX < > 42 ANDX < > 45 AND (X < 48 OR X > 57)) OR (X= 43 ANDI < > U) OR (X= 45 AND I < > U) THEN ER = 10:1 = LEN (HOS , NEXT : IF ER < > 2% THEN RETURN VN = VAL (MOS) :NU = 99: IF VN < NN OR VN > NX THEN ER=3 RETURN 32197 32198 32199 32200 32201 32202 32203 32209 32210 32212 32213 42214 32215 32220 32225 32230 32235 32236 32245 32250 39997 39998 39999 40000 40060 50004 5000s 50050 50055 50897 50898 50899 52000 51010 51020 51030 51040 51045 51080 51797 51798 51799 51800 51805 51810 51815 51820 51825 51930 51835 51860 ‘51897 51898 ‘51899 51900 55999 56000 56002 $6003 56004 56005 56006 REM REM Recherche du numero d'un mot dana le dico Ret NU = =: FOR I = U TO NM IF TS (I) = MOS THEN NU = I:I = NM NEXT : IF NU <¢ > 2 THEN RETURN IF MC = 101 THEN RETURN AD = OM TF AD € AY OR NU < > Z THEN 32245 Te = 3 IF PEEK (AD + TP) < > 32 THEN TP = TP + U: GOTa 3 2213 IF TP <¢ 3 LM THEN AD = AD + TP: GOSUB 51400:AD = PEEK (AD) * 256 + PEEK (AD + U): GOTO 32210 FC = VR FOR I= 2 TO LM =U If PEEK (AD + I) © > ASC ( MIDS (MOS,I + U,U)) T HEN FG = PXrI = LM NEXT IF FG THEN NU = GosuH 51800:AD = 2 GOTO 32210 PEEK (AD + TP + 2): GOTO 32210 PEEK (AD) * 256+ P IF AD = 2 AND NU = Z THEN IF MOS = *+" THEN NU = U RETURN REM REM = Gestion des ERREURS REM ER = PEEK (222): IF ER > 0 AND ER < 16 THEN ER = 34 # GOSUB 10000; RESUME PRINT "ERREUR NON TRAITEE N[ "ER EN ” PEEX (218) + 256 * PEEK (219): END REM Efface Ecran du Forth FOR I = U TO S(1) = 9": NEXT :EC = UzEL = SUB $0088: RETURN REM Affiche ECRAN do Forth TEXT : POKE 33,16: POKE 32,18: POKE 34,4: POKE 15,0 9: HOME : TEXT : FOR I = U TO 5; VIAH 4 + I: POKE 36 718: PRINT BCS(I);: NEXP : RETURN REN REM Affichage Fin du DICO REM GOSUB 51900:AD = DM FORT = 1704 IF PEEK (AD) = 32 THEN 51040 PRINT CHRS ( PEEK (AD}}72AD = AD + 1: GOTO 51020 IF I = 5 THEN 51050 PRINT : GOSUB 5200022 = PEEK (AD) * 256 + PEEK ( ap +1) WEXT : TEXT + RETURN REN REM Caleul 1'OFFSET pour trouver 1'adrezae suivant e REN IF PEEK (AD + 2) IF PEEK (AD + 3) = AD + 7: RETURN IF PEEK (AD + 3) = 4 THEN AD = AD-+ + 6: RETURN os=4 IF PERK (AD t OS) = 255 THEN 51860 JF PEEK (AD + OS) = 128 AND PEEK (AD + OS # 1) = < 100 THEN AD = AD + 3: RETURN = 10R PEEK (AD + 3) = 2 THEN AD PEEK (AD + 4) 23 THEN OS = OS +4 + PEEK (AD + 08 + 2): GOTO 5182 o IF PEEK (AD + OS) = 129 THEN OS = OS + 3: GOTO 518 20 Os = OS + 2: GoTo 51820 AD = AD + OS + 1: RETURN REN REM Efface ecran fin du DICO REM TEXT ; POKE 33,16: POKE 32,55: POKE 34,12: POKE 35, 17: HOME ; RETURN REN REM INITIALISATION HIMEN: 34304: REM $8600 2 = O:U = L:ER = Erf = 2rd = 220 © BUR = ULEX © 2; D3 = CHR$ (4):CL = - B6G:CW = - 958:X8 = "TK =z MF = FX:PR = U:NU = 2:PM¥ = 2:PRO = BES = 7" FD = 2:1M = 2:M0$ = ""iNC = Z:LM = 2:¥N = 2: = X = 42767:NN = = NX:SU = VR:MSS = "":UTS = "TINS = "*;ADS = "":AD = E:HS = "":HX = 9 * 4096 + 6 * 256:0 M= £:PD = 2 DD = 8 * 4096 + 6 * 256 + 1:MC = LOI:TPA & Prec*:NE = UzOS = 2:CP = YR:FC = 2:N © 2:PT = 2:ID = 2:EC = U:EL = U:CO = 2 I] = 2;PH = 2:7] = 2:79 = 2:X1 NS =” PO = = :X2 = 22ND = :DEM 26 Pom's n° 27 Og = ""2TIg = "LIAPPRENTI FORTHier*:BIP$ = CHRS (7) Phrase 6: 56010 NM = 50: DIM PMO(11),PR (255), ECS (5), TS (NM) 2 ESSAD .” OR" VALIDE CR." BIN" ¢ 56015 DEF FN RQ(X) = X - IND (X / 256) * 256 Phrase 7 = 56016 DEF FN VP(X) = PEEK (107) + PEEK (108) * 256+ 7 VARIABLE X¥Z #2 Od Phrase 8: 56020 ONERR GOTO 40000 24 CONSTANT CST Seedo nator Phrase 9 + : ENTR KEY DUP BEGIN 32 = 50859 RM ay anne WHILE REY DOP REeEAT EMIT ; 57001 REM 57005 GOSUB 57700: VTAB 1: POKE 36,48: PRINT “...."; INV ERSE : PRINT "Ee a'AIDE Ltutili. ": NORMAL 4 a Hi Guinea none eee Re ‘ogramme 'CREMESS fehter de demonstration (doit etre en debut de ligne) " 1 REM thaveeneesaeesaaasaearaaneaenenee 57020 PRINT "INIT reinitialize le FORTH (doit etr 2 REN Programme CREMESS een debut de ligne)" 3 REN Creation des Messages d'ERREUR 57030 PRINT "LISTEMOTS liste le dictionnaire a l'ecran 4 REM pour programme APF * 5 REM Le fichier cree est NESSAPE 57060 PRINT "MODE comnute mode NORMAL et mode PAS 6 REM C'est un fichier direct A Pas" 9 REM Fey Nissuorgaky $7070 PRINT *QUITTE arret du programme* 10 REM s#sdeesansecesccbsaedeasaeanaenee 57080 PRINT "AIDE affiche cet ecran™ 99 DS = CHRS (4): PRINT D3*PRAI™ 57085 PRINT "RAZ indtialise les piles" 100 TEXT : HOME ; PRINT "CREATION des messages d'erreur d 57090 PRINT PCARRAY tableau dloctats (25 CARRAY XZ u programme APF"; PRINT "Le fichier s'appelle MESSAPF. donne un tableau XZ de 26 octets)" * 57100 PRINT "Cad et Cl pour utiliser les elements d'un 105 PRINT : PRINT "Taper <C> pour creer un message ou <V> tableau" pour VOIR un message <6> pour quitter "s: GET XS 57110 PRINT "*Lo0P 41 n'y a pas de boucle LOGP,don 106 PRINT X$:X = ASC (X$): IF X = 38 THEN END © toujours preciser le pas" 107 IF X = 67 OR X = 99 THEN GOSUB 110: GOTO 100 57120 PRINT "Nombres entiers de -32767 a 32767" 108 IF X = 86 OR X = 118 THEN GOSUB 2000; GOTO 100 57139 PRINT "Autres mts tly sont claasiques du FORTH 79 109 GoTo 105 : 110 HOME : PRINT "CREATION des Messages (35 Caracteres ma $7149 PRINT : PRINT "Longuaur d'une phrase : Limitee a 15 xi.) <é> Pour Quitter": PRINT : INPUT "Numero : "¢NUS: 9 caracteres." NU = INT ( VAL (NUS)): IF NU <1 OR NU > 99 THEN 110 57145 PRINT "MOTS CREES limites a 16 caracteres pour len 120 X = ASC (X#): IF X= ASC ("6") THEN END om (154 mots maxi.)* 150 M$ = **: PRINT "Votre Message (<é>=Quitte) : "7 57150 PRINT *L'APPRENTI FORTHier n'admet pas les structur 152 GET X$:X = ASC (XS): IF X = 13 AND LEN (MS) = 0 THE ex de controle imbriquees. w 152 57151 PRINT " Attention aux mots 'd' et 'Cd' (ecriture d 15] IF X= 8 AND LEN (M3) < > 0 THEN GOSUB 1000: GOTO anz la memoire}™ 152 $7152 PRINT * La recherche des erreurs prend du temps... 154 IF X = 14 THEN 160 Soyez PATIENTS" 155 IF X = ASC ("6") THEN N = N ~ 1: RETURN 57155 PRINT " Ne jamais taper CTRL-C" 156 IF X < 32 OR X > 125 THEN 152 57160 VTAB 24: POKE 36,12: GOSUR 1300 157 PRINT X$;:M$ = MS + XS: IF LEN (MS) > 36 THEN INVER 57180 RETURN SE : PRINT "Trop long": NORMAL + PRINT : GOTO 150 $7199 REM 158 GOTO 152 57200 REM Ecran de travail 160 PRINT : PRINT DS"OPEN MESSAPF,L39": PRINT DS"WRITE ME 57201 REM SSAPF, R*NU $7205 GOSUB 57700: INVERSE : FOR I = 4 70 14: VPAB I: POK 170 PRINT CHRS (34) + M$ + CHRS (34): PRINT DE"CLOSE" © 36,1: PRINT " ";: POKE 36,11: PRINT * "7: POKE 2 180 RETURN 6,39: PRINT " "7: PORE 36

Showing the first 100000 of 292129 characters.

mp.ls