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