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.