Skip to main content

Full text of "magazine poms19"

See other formats


Hard-copy HGR sur Image Writer 
Macintosh : deux accessoires 

Disquette mixte Dos/Pascal 
Un analyseur de syntaxe 
Intelligence artificielle 
Catalogue Multi-Sed 
Catalogue Souris 
Methode PERT 





DRIVE CHINON 




5' 1/4 COMPATIBLE APPLE ll + ,lle,llc 
nouveau: Cable pour lie 



- 1/2 HAUTEUR 

- 40 PISTES (48 T.P.I) 

- 143 Ko SOUS DOS 3.3 

- 160 Ko SOUS DOS MODIFIE 

- DETECTION DE PISTE ET PROTECTION 

- ECRITURE PAR OPTO-ELECTRONIQUE 
-MOTEUR A ENTRAINEMENT DIRECT 
-SYSTEME DE FERMETURE BREVETE 




LE MEILLEUR RAPPORT QUALITE/PRIX DU MARCHE 

Floppy simple 1 256 Frs H.J 1 490 Frs T.T.C 
Floppy double 2 521 Frs H.T 2 990 Frs T.T.C 
(pr/'x par quantite sur demande) 



Ce lecteur de disquette a ete homologue par la FRAMIF, 
1 'Aerospatiale, ,le club Thomson, etc... 



-HAUTE FIABILITE 
-SILENCIEUX 

-FAIBLE CONSOMMATION 
-GARANTIE 1 AN 




CE MODELE FAIT P ARTIE D UNE GAMME COMPLETE DE LECTEURS 5' l/4 & 3"l/2 AVEC INTERFACE SASI. 

Autres modeles disponibles pour tous micros (nous contacter) 



-Carte 80 colonnes etendue 990 T.T.C 

-Disquettes 5"l/4 11,90 Frs H.T par boite de 10.(13,90 Frs T.T.C) 
-Moniteurs 12" haute resolution vert ou orange 990 Frs T.T.C 



MICRO-DISPO 
58,rue Blomet 



Tel.: 566 57 17 
75015 PARIS 



P.I.E.D 

42, bd Magenta 



Tel.: 249 1C 
75010 PARIS 



NOAA: 

ADRESSE: 

SOCIETE: PROFESSION 



PRENOM: Tel. 



Veuillez m'envoyer une documentation sur vos produits. 
Je suis interesse a titre personnel LJ professionnel 



Une memoire-tampon 
d'ecran 

Gerard Michel 



lie 




lie 



29 



Lucy in the Sky Disquettes mixtes 
with Diamonds DOS/Pascal 

Francois Sermier 



Mousecat 



lie 




lie 



Patrice Neveu 

68 




lie 



La methode PERT 



Serge Cation 




Retrouvez vos 
programmes 
perdus 



Creation de caracteres 

Jean-Pierre Vinter 

52 



,,1^0,, 23 

i n 



Oil est la souris ? 

Marianne Sutz 




Etrange Fermez les If Hard-copy HGR 

accessoire fenetres ! || sur ImageWriter 

Yvan Koenig 




59 



Le systeme de 
developpement 
68000 



Apple : pages 38 el 39 1 Belden Gmbh : page 75 1 1EF : page 2 
List : page 76 1 TiUcompo : page 4 




Courrier des 
Lecteurs 

Olivier Hen 

72 

L 'intelligence 
artificielle 

aGuidoBettiol 
35 

Micro 

informations 

Jean-Michel Gowivitch 



70 



Pom's n° 19 



3 



photocomposition : 

TELECOMPO 

c'est facile 
c'est economique 
et ga va vite ! 



Les textes de vos 
articles, catalogues, 
annuaires ou 
brochures saisis sur 
votre micro-ordinateur 
sont envoyes 
directement sur notre 
photocomposeuse. 



Nous vous evitons 
ainsi, le cout et le 
temps de la saisie 
supplemental que 
necessite le traitement 
traditionnel de la 
photocomposition 
avant I'impression 
des documents. 



Si vous le desirez 
nous pouvons 
egalement nous 
charger de I'impression 
et du brochage. 




I*-" 1 Ml 












II 






HUCOMPO (1)328.18.63 




13 et 15, avenue du Petit- 

PHOTOCOMPOSITION - BUREAUTIQUE 
TRANSMISSION DE DONNEES - 
GESTION DE FICHIERS - 
MATERIELS DE TRAITEMENT I 



Baslcium... 
le Basic 

enrichi 



Gtrard 
Michel 



I 




Cet utilitaire vous 
permet de : 



I 



Imprinter 
l'ecran40ou 
80 colonnes 

par "JH"- 



Nettoyer 
memoire tres 
rapidement 
par"JF". 



Gererdes 
messages, la 
reponse etant 

controlee. 



Gerer des masques 
40ou80 
colonnes. Ces 
ecrans, deftnis lors 
dela 
programmarion, 
s'affichent par la 
simple commande 
" ] A". 



Saisir toutes les 
variables d'un 
ecran en une seule 
commande en 
contrdlant le type 
et la longueur. 



Mais aussi, ne 
saisir que I' une 
des variables 
affectees a un 
ecran, les qfficher, 
les effacer, etc. . . 



Tous les fichiers source sont sur la disquette 
(exemple de demonstration dans le Pom's 13) 



Disquette et documentation : 

150,00 TTC franco 
(bon de commande page 74) 



4 



Pom's n° 19 



Apple ferme trots usines et licencie I 200 personnes. Est-ce la fin de notre beau rive ? Certes non car, dans 
la foulie, nous apprenons aussi les informations suivanles : 

° IBM, apres avoir abandonni le PC Junior, annonce une forte baisse de ses binifices; 
° Hewlett Packard pratique du chomage technique sur 4 500 salariis; 

° Xerox a de grosses difficultis; _ . , _ 

o Wang licencie 1 500 personnes; rLQltOriBl 
° Data General licencie 1 300 personnes; 
° Control Data et Honeywell ferment des unite's; 

° Atari annonce trois mois de retard sur le "Jackintosh", le futur concurrent du Macintosh; 
° enfin, on ne compte plus les distributees qui, quelle que soil leur taille, diposent leur bilan ou 
deviennent soudainement mauvais payeurs. 

Est-ce a dire que la vague de la micro- informatique est difinitivement enrayie ? Certes pas ! Selon I'avis de la 
plupart des professionnels, qui ne se trompent quand mime pas tout le temps, il s'agit la d'une piriode de 
consolidation. Une fois que tout sera rentri dans Vordre, la micro-informatique devrait retrouver un rythme de 
croissance qui, entre 15% et 20% par an, sera plus calme que ce que nous avons vicu ces dernieres annies, 
mais beaucoup moins vulnerable. 

En tous cas, la confiance en Apple ne manque pas puisqu'il y a maintenant trois revues entierement consacries 
au Macintosh, avec Infomac, Mic Mac el, plus ricemment, Icones. Ceci dit. Pom's reste la seule revue au 
monde ou les amateurs de Mac trouveront, outre des informations, des programmes permettant de s'immiscer 
dans le Mac et de riellement comprendre et exploiter son mode de fonctionnement . Les amateurs d'Apple II, 
quant a eux, en aurora aussi pour leur argent : fidele a ses promesses. Pom's maintient le nombre de pages 
consacr6es a la famille du 6502. 

Nous vous remercions tous de voire riponse a Apple Expo, ou le seul problems rencontrd a notre stand itait 
parfois le trop grand nombre de lecteurs venus se riabonner ou tout simplement pour nous dire bonjour. 
Rendez-vous a la boutique Sicob (Porte Maillot ) ou nous vous recevrons au stand M279. 

Chose promise dans le pricident numiro, chose due : dans ces pages vous trouverez I'analyseur de syntaxe par 
disquettes entieres de Carlos Sacri. 

Sans entrer dans le ditail du sommaire, plusieurs titres sont a souligner : 

Au chapitre "Operating System", le catalogue Multi-Sed d'Alain Gogniat et la disquette mixte Dos/Pascal de 
Francois Sermier. 

Au chapitre initiation, I'approche de I'intelligence artificielle de Guido Bttttol, la mithode PERT en Basic 
de Serge Cotton et, toujours pidagogique, I'utilisation de la carte langage par Gerard Michel. 
Au chapitre initiis, le catalogue a I'aide de la souris de Patrice Neveu dont le source trop volumineux na pu 
itre listi dans la revue. 

Au chapitre utilitaires, un patch dYvan Koenig pour un hard-copy de la page graphique haute resolution et 
la criation de caracteres programmables sur I'ImageWriter de Jean-Pierre Writer. 

Au chapitre Macintosh, un nouvel accessoire de bureau Lucy in the Sky with Diamonds (!) du a Jean-Luc 
Bazanegue dont le source est impressionnant; un accessoire-clin-d'ail d'Evelyne Gorin et deux utilitaires 
indispensables de Julien Thomas et Marianne Suti. 

Enfin, au chapitre offre d'emploi, nous sommes toujours a le recherche d'un collaborates a temps plein ay ant 
des connaissances tres ilev6es au niveau de I'assembleur 6502, ou au moins d'un collaborates a mi-temps 
maitrisanl parfaitement I'assembleur, le He et le ProDOS. 

Bonnes vacances ! 

Herv6 Thiriez 



Ont collabort a ce numero : Jean-Luc Bazanegue, Guido Bettiol, Serge Cattan, C6cile Derrien, 
Alexandre Duback, Alain Gogniat, Evelyne Gorin, Jean-Michel Gour6vitch, Guy d'Herbemont, Olivier Herz, 
Yvan Koenig, G6rard Michel, Patrice Neveu, Carlos Sacre\ Francois Sermier, Marianne Sutz, Julien Thomas, 
Jean-Pierre Vinter. 

Directeur de la publication, r£dacteur en chef : Hervd Thiriez. 

Dessins : Laurent Bidot. 

Rldacteurs : Alexandre Avrane, Olivier Herz. 

Siege social : Editions MEV - 49, rue Lamartine - 78000 Versailles - T61. : (3) 951.24.43. 
Publicity : Consulter les Editions MEV. 
Diffusion : N.M.P.P. 

Composition : T616compo - 13/15, avenue du Petit Pare - 94300 Vincennes - T61. : 328.18.63. 
Impression : Rosay - 47, avenue de Paris - 94300 Vincennes - T61. : 328.18.63. 



Pom's n° 19 



Un analyseur de syntaxe en langage 
machine 

Carlos Sacre 



Le but de ce logiciel est la detection 
des erreurs de syntaxe dans les pro- 
grammes ecrits en Basic APPLE- 
SOFT. La syntaxe est la technique 
d'ecriture des divers symboles 
composant une instruction, de faqon 
que I'interpreteur Basic puisse la 
comprendre. Le remplacement d'un 
"point-virgule" par un "deux-points", 
l'oubli d'une parenthese, la substitu- 
tion d'une variable numerique A a 
une variable alphanumerique A$, 
sont des erreurs de syntaxe. Les er- 
reurs de logique (AND au lieu de 
OR. branchement au moyen d'un 
GOTO a l'interieur d'une boucle 
FOR... NEXT... etc..) sont d'un type 
tout a fait different, et sortent du 
cadre de cet article. 

Tout programmeur, meme novice, 
sait qu'il ne suffit pas qu'un pro- 
gramme d'une certaine ampleur ait 
fonctionne une ou plusieurs fois pour 
qu'il soit exempt de toute erreur : 
une utilisation qui fait intervenir une 
ligne rarement appelee peut en effet 
apporter une interruption surprise, 
desagreable au beau milieu d'une 
partie interessante, ou d'un pro- 
gramme de gestion. Chacun sait 
aussi qu'il est particulierement facile 
d'introduire une "bete erreur" quand 
on met au point ou que 1'on modifie 
un programme. D'ou I'interet d'avoir 
un logiciel permettant de verifier rapi- 
dement la parfaite correction de ses 
programmes. 

Le systeme presente ci-dessous est 
adapte aussi bien a une verification 
frequente en cours de mise au point. 
qu'au contrdle st/tematique en une 
seule operation de tous les program- 
mes Basic APPLESOFT dune face 
de disquette. 

Mode d'emploi 
du systeme 

a) Verification d'un programme isole. 
deja resident en memoire vive. 11 suf- 
fit de commander 'BRUN SNTX" 
apres avoir place dans le lecteur 
voulu une disquette avec ce pro- 
gramme binaire. Des appels ulte- 
rieurs necessites par la mise au point 
du programme Basic peuvent se faire 
simplement par "CALL 35072" ou 
"&", tout au moins tant que HIMEM: 
ou 1'adresse de & n'ont pas ete mo- 
difies (par exemple par un essai in- 
termediate du programme Basic si 
celui-ci modifie cet environnement). 



b) Verification d'un ou plusieurs pro- 
grammes implantes sur une dis- 
quette. Placer dans le lecteur 1 une 
disquette non protegee en ecriture. 
comportant SNTX, SYNTAXE, SYNAXE- 
TEST. FINSYNTAXE, et commander 
"RUN SYNTAXE, Dl". 
On a alors la possibility d'obtenir des 
renseignements sur le fonctionne- 
ment du systeme. puis on est invite a 
placer dans le drive 2 la disquette B 
a tester, et enfin a choisir une op- 
tion : soit tester un seul programme, 
soit tester tous les programmes de la 
disquette. Apres le test, on peut re- 
commencer avec une nouvelle dis- 
quette B, ou reprendre la main : 
dans ce dernier cas, les pointeurs du 
DOS sont replaces dans leur etat 
normal par la commande "FP". 

NDLR : dans le cas b), il est prefera- 
ble d'avoir dans le lecteur 1 une 
copie de sauvegarde et non un origi- 
nal, car 1 operation peut parfois. pour 
des raisons (dues au DOS) qui nous 
ichappent, "planter" le systeme. II 
est conseille de proteger contre l'ecri- 
ture la disquette du lecteur 2. 

Mode de fonctionnement 
du systeme 

Programme (binaire) SNTX : 

C'est le coeur du systeme : ecrit en 
langage machine grace a l'assem- 
bleur LISA 2.5, c'est lui qui effectue 
le test proprement dit. 11 decode ligne 
par ligne, instruction par instruction, 
octet par octet, tout le programme 
Basic resident en memoire vive. II af- 
fiche a l'ecran le numero de ligne, le 
rang de 1'instruction dans la ligne, et 
une breve appreciation telle que 
"CORRECT", "VIDE" (ligne reduite 
a un :. ou :: dans une ligne). "INS- 
TRUCTION REM".... Toutes les 
commandes du Basic APPLESOFT 
sont etudiees en detail, sauf "USR". 
"CALL". "&" (qui sont parfois sui- 
vies de parametres que SNTX ne 
pourrait interpreter). "DATA" (c'est 
au concepteur a ne pas melanger les 
types de donnees) et "GET" numeri- 
que (GET A est deconseille : il faut 
utiliser GET A$). pour lesquelles 
1' instruction est listee. II appartient a 
I'utilisateur de verifier la syntaxe de 
ces instructions, selon leur role dans 
le programme. De plus. SNTX 
controle I'existence dans le pro- 
gramme de toute ligne susceptible 
d'etre appelee par un "GOTO". 



"GOSUB", "ON GOTO", "ON 
GOSUB" ou "ONERR GOTO". 

Le defilement a l'ecran est tres ra- 
pide (plus que pour un listing !), mais 
il est toujours possible de le suspen- 
dre, grace a Ctrl-S. pour une etude 
approfondie des messages. Des 
qu'une erreur est decelee, le test est 
provisoirement interrompu avec 
emission d'un "bip". 1'instruction in- 
criminee est listee, avec les eventuels 
caracteres de controle en affichage 
clignotant, et le type de 1' erreur est 
signale par un bref message. L'utili- 
sateur peut done noter le renseigne- 
ment souhaite, puis commander la 
reprise du test en enfoncant n'im- 
porte quelle touche. 
Certains defauts d'ecriture toleres a 
l'execution par I'interpreteur Basic 
sont releves; par exemple, 1' omission 
des guillemets terminant une chaine 
dans une instruction "PRINT" (c'est 
dangereux quand il ne s'agit pas de 
la demiere instruction de la ligne !). 
SNTX est implante a 1'adresse $8900 
(en decimal 35072). ce qui lui per- 
met d'etudier des programmes Basic 
ayant jusqu'a 130 secteurs. II place 
HIMEM: a cette adresse, ainsi que le 
vecteur d'appel de la commande am- 
persand (&). SNTX etant tres court 
(13 secteurs), il est utile de le copier 
sur de nombreuses disquettes, en 
particulier celles qui servent pour les 
travaux courants. 

Programme (Basic) SYNTAXE 

C'est le programme qui permet de 
lancer la verification automatique de 
tous les programmes Basic d'une 
face de disquette, sans intervention, 
sauf bien sur pour relever les even- 
tuelles erreurs. II initialise le systeme. 
charge SNTX. renseigne I'utilisateur 
et lance SYNTAXETEST 

Programme (Basic) SYNTAXE- 
TEST 

II cree sur la disquette A (lecteur 1. 
avec le systeme) un fichier 
SNTX. EXEC etabli a partir du catalo- 
gue de tous les programmes Basic 
APPLESOFT de la disquette B (lec- 
teur2), ou d'un seul si on a choisi 
cette option, en negligeant tous les 
autres fichiers ecrits sur cette dis- 
quette. SYNTAXETEST commande 
enfin l'execution de SNTX. EXEC. 

Fichier (texte) SNTX. EXEC 

II traite successivement tous les pro- 
grammes voulus (charges depuis B. 



Pom's n° 19 



puis testes), automatiquement sauf 
en cas d'erreur : interruption puis re- 
demarrage manuel comme pour 1' uti- 
lisation au coup par coup. 
SNTX.EXEC passe ensuite la main a 
FINSYNTAXE. 

Programme (Basic) 
FINSYNTAXE 

II efface de la disquette A le fichier 
SNTX.EXEC. puis, suivant le choix, 
rend la main apres avoir commande 



"FP", ou relance SYNTAXETEST 
pour l'exploration d'une autre face 
de disquette. 

Comment faire avec un seul lec- 
teur ? 

Le systeme de controle automatique 
est normalement prevu pour deux 
drives; il est possible de l'adapter 
pour un seul : modification des don- 
n6es RWTS dans le programme 
SYNTAXETEST (de facon a faire lire 
le catalogue dans le lecteur 1), inter- 



ruptions pour demander le change- 
ment de disquette, avant d'ecrire 
SNTX.EXEC, et apres la fin du test. 
Toutefois, il ne pourra alors tester 
que des disquettes non protegees en 
ecriture et comportant suffisamment 
de place disponible pour le fichier 
SNTX.EXEC (environ un secteur 
pour deux programmes Basic sur la 
disquette). 



Programme SYNTAXETEST 

10 D$- CHR$(13)+ CHR$(4) 
20 DIMA$(104) 
30 TEXT : HOME 

35 VTAB 5: HTAB 9: PRINT "ENTREZ LES DISQUETTES 

40 VTAB 9: PRINT "DRIVE 1 : SYSTEME DE DETECTION 

DERREURS DE SYNTAXE." 
50 PRINT : PRINT : PRINT "DRIVE 2 : DISQUETTE AVEC 

LEOULESPRO- GRAMMES A TESTER." 
60 VTAB 23: HTAB 20: GET A$ 
70 HOME : VTAB 10: PRINT " 1 TEST D'UN SEUL 

PROGRAMME" 
80 PRINT : PRINT : PRINT " 2 TEST DE TOUS LES 

PROGRAMMES APPLE- SOFT DE LA 

DISQUETTE" 
90 PRINT: PRINT: PRINT "ESC POURANNULER" 
100 PRINT: PRINT: HTAB 2 

110 GET A$: IFA$< >"1"ANDA$< >"2"ANDA$< > 

CHR$(27)THEN 110 
1 20 IF A$ - CHR$ (27) THEN 1 0000 
500 FOR I = 768 TO 796: READ X: POKE l,X: NEXT I 
530 PRINT D$"OPEN SNTX.EXEC.D1" 
540 IF A$ = "2" THEN 2000 

1000 HOME : VTAB 10: REM UN SEUL PROGRAMME 
1 01 PRINT "NOM DU FICHIER BASIC A TESTER :": 

PRINT 
1020 INPUT "";F$ 

1030 PRINT D$"WRITE SNTX.EXEC" 
1040 PRINT TEXT:HOME:PRINT" CHR$ (34)F$ CHR$ 
(34) 

1050 PRINT "POKE34.2" 
1 060 PRINT "LOAD "F$",D2" 
1070 PRINT "CALL 35072" 
1090 GOTO 3000 

2000 HOME : VTAB 12: HTAB 5: PRINT "CREATION D'UN 

FICHIER CATALOGUE." 
2010 POKE 34,20: VTAB 22 
2020 FOR SE - 15 TO 1 STEP - 1 : REM TEST 

DISQUETTE 
2030 POKE 781.SE: CALL 768 
2040 FOR F = TO 6:FI - 105 - 7 * SE + F:A$(FI) « "" 
2050 AD - 149 * 256 + 1 1 + F ' 35 
2060 IF PEEK (AD) > 35 THEN 2100 
2070 CO- PEEK (AD + 2): IF CO < > 2 AND CO < > 130 

THEN 2100 



2080 FOR I - 3 TO 32:A$(FI) - A$(FI) + CHR$ ( PEEK (AD 
+ I)): NEXT I 

2090 IF PEEK (AD + 33) > 130 THEN PRINT "FICHIER 
"A$(FI): PRINT TROP LONG; NE PEUT ETRE 
TRAITE IN": PRINT CHR$ (7): GET A$:A$(FI) = "" 

2100 NEXT F.SE 

2110 PRINT D$"WRITE SNTX.EXEC" 
2120 FORFI-0TO104 
2130 IFA$(FI)--THEN2180 

2140 PRINT TEXT:HOME:PRINT" CHR$ (34)A$(FI) CHR$ 
(34) 

2150 PRINT "POKE34.2" 
2160 PRINT "LOAD "A$(FI)".D2" 
2170 PRINT "CALL 35072" 
2180 NEXT Fl 

3000 REM CLOTURE FICHIER 
3010 PRINT "RUN FINSYNTAXE.D1" 
3020 PRINT D$"CLOSE SNTX.EXEC" 
3030 TEXT : HOME 

3040 PRINT D$"EXEC SNTX.EXECD1" 

3050 END 

10000 TEXT: HOME 

10010 PRINT D$"FP" 

10020 END 

60000 DATA 169,3,160,8,32,217,3,96: REM APPEL 
RWTS 

60010 DATA 1,96,2,0,17,15,25,3,0,149,0,0,1,0,0,96,1: 
REM IOB 

60020 DATA 0,1 ,239,216: REM DCT 



Programme FINSYNTAXE 

10D$- CHR$(13)+ CHR$(4) 

20 PRINT D$"DELETE SNTX.EXEC.D1" 

30 PRINT CHR$ (7) CHR$ (7) CHR$ (7)"ENCORE (O/N) ? 

40 GET A$: IF A$ < >"0"ANDA$< >"N"THEN40 

50 TEXT : HOME 

60 IF A$ - "N" THEN 90 

70 PRINT D$"RUN SYNTAXETEST.D1" 

80 END 

90 PRINT D$"FP" 
100 END 



Programme SYNTAXE 

10 HIMEM: 35072 

20 D$- CHR$(13)+ CHR$(4) 

30 TEXT : HOME 

40 VTAB 12: HTAB 6: PRINT "DETECTION DERREURS 

DE SYNTAXE" 
50 PRINT : HTAB 5: PRINT "SYSTEME ELABORE PAR 

CARLOS SACRE" 
60 PRINT D$"BLOAD SNTX" 

70 POKE 351 16,96: REM PERMET L/UTILISATION DE 

SNTX COMME SOUS-PROGRAMME 
80 VTAB 24: HTAB 20: GET A$ 
90 HOME : VTAB 12: PRINT "DESIREZ-VOUS DES 

INFORMATIONS (O/N) ? "; 
100 GET A$: IFA$< > "O" AND A$ <> "N" THEN 1 00 
110 IFA$-"N"THEN290 
120 HOME: VTAB 9 

1 30 PRINT " CE SYSTEME PERMET DE DECELER, 
DANS": PRINT : PRINT "LES PROGRAMMES EN 
BASIC APPLESOFT, LES" 

135 PRINT : PRINT "ERREURS DE SYNTAXE, AINSI QUE 
L'ADRESSA-": PRINT "GE PAR DES •GOTO, 
GOSUB', ONERR' A": PRINT : PRINT "UNE LIGNE 
INEXISTANTE ." 

1 40 VTAB 24: HTAB 20: GET A$ 

150 HOME 

1 60 PRINT " IL SK3NALE ET LISTE LES INSTRUC-": 
PRINT : PRINT TIONS DANS LESQUELLES 
FIGURENT LA FONC-": PRINT : PRINT TION 'USR' 
OU LES INSTRUCTIONS '&•,": PRINT : PRINT 
"CALL", "DATA" ." 



1 70 PRINT : PRINT " LA COMMANDE 'CTRL-S' PERMET 
DE": PRINT : PRINT "SUSPENDRE LE DEFILEMENT 
A LECRAN ." 

1 80 PRINT : PRINT : PRINT : PRINT " LES ERREURS 
DE SYNTAXE DONNENT LIEU": PRINT "A UNE 
INTERRUPTION DU TEST, DE MANIERE": PRINT : 
PRINT "A PERMETTRE A LUTILISATEUR DE NOTER 
LA": PRINT : PRINT "LIGNE DE L'INSTRUCTION 
INCORRECTE ." 

1 90 VTAB 24: HTAB 20: GET A$ 

200 HOME : VTAB 6 

21 PRINT " CERTAINS DEFAUTS TOLERES PAR 
LIN-": PRINT : PRINT TERPRETEUR SONT 
RELEVES, PAR EXEMPLE": PRINT : PRINT 
"LOMISSION DES GUILLEMETS APRES UNE": 
PRINT : PRINT "CHAIN E TERM IN ANT UNE LIGNE ." 

220 PRINT : PRINT : PRINT 

230 PRINT " LA TAILLE DES PROGRAMMES TESTES": 

PRINT: PRINT "EST LIMITEE A 130 SECTEURS ." 
240 VTAB 24: HTAB 20: GET A$ 
250 HOME : VTAB 7 

260 PRINT " LA SUffE DU DEROULEMENT DE CE 
PRO-": PRINT : PRINT "GRAMME NECESSrTE 2 
DRIVES . IL EST": PRINT : PRINT TOUTEFOIS 
POSSIBLE AVEC UN SEUL DRIVE DE": PRINT 
TESTER UN PROGRAMME ISOLE RESIDANT EN" 

270 PRINT : PRINT "MEMOIRE VIVE, PAR LA 

COMMANDE :": PRINT : PRINT "BRUN SNTX' ." 

280 VTAB 24: HTAB 20: GET A$ 

290 PRJNT D$"RUN SYNTAXETEST" 

300 END 



Programme 




32 


HOME 


EQU SFC58 


68 




HBY 


TXLIGNE 




S YNTAXE. TEXT 


33 


CR 


EQU SFC62 


69 




JSR 


STROUT 


(Assembleur LISA 2.5) 


34 
35 


PROGRAMM 


JSR HOME 


70 
71 




LDA 
STA 


l$01 

INSTR 








36 






72 


; 






1 ;•**•**********«******•*******« 


37 


;S, HIMEM:, POINTEUR 


73 


.•PASSAGE 


INSTRUCTION 


2 ;" 




* 


38 




LDA IS4C 


74 


NINSTR 


LDA IS0B 


3 ;• DETECTION DES ERREURS DE * 


39 




STA S3F5 


75 




STA $24 


4 ;• 






40 




LDA #$00 


76 




JSR 


SETINV 


5 ;" SYNTAXE EN BASIC APPLESOFT * 


41 




STA $73 


77 




LDA 


INSTR 


6 ;• 




* 


42 




STA $3F6 


78 




STA 


LN 


7 J****************************** 


43 




LDA i$89 


79 




LDA f$00 


8 ; 






44 




STA S74 


80 




STA 


LN+1 


9 


ORG 


$8900 


45 




STA S3F7 


81 




JSR 


CODAGE 


10 ; 






46 




LDA $67 


82 




HEX 


A9 


11 ;POINTE 


DANS 


LE PROGRAMME BASIC 


47 




STA PTR 


83 




BYT 


NUMLIN*3 


12 PTR 


EPZ 


SO 6 


48 




LDA $68 


84 




HEX AO 


13 NL 


EPZ 


$08 


49 




STA PTR+1 


85 




HBY 


NUMLINt3 


14 LN 


EPZ 


$18 


50 


; 




86 




JSR 


STROUT 


15 ; 






51 


; PASSAGE A LA LIGNE SUIVANTE 


87 




JSR 


SETNORM 


16 ;POINTEUR DE 


PILE 


52 


BOUCLE 


JSR INCPTR 


86 




INC 


$24 


17 I 


EPZ 


$1D 


53 




STA NL 


8 9 




LDX 


l$00 


18 DRGET 


EPZ 


$1E 


54 




JSR INCPTR 


90 




STX 


I 


19 INSTR 


EPZ 


$CE 


55 




STA NL+1 


91 




STX 


ERR 


20 ERR 


EPZ 


SCF 


56 




ORA NL 


92 




JSR 


TRAIINS 


21 SUP 


EPZ 


$EB 


57 




BNE >1 


93 




PHA 




22 EGA 


EPZ 


SEC 


58 




JMP S03D0 


94 




CPX 


• $07 


23 INF 


EPZ 


$ED 


59 


"1 


JSR INCPTR 


95 




BNE 


>1 


24 LNG 


EPZ 


SEE 


60 




STA LN 


96 




LDY 


ERR 


25 LIN 


EPZ 


SFA 


61 




JSR INCPTR 


97 




BEQ >1 


26 PILE 


EQU 


S300 


62 




STA LN+1 


98 




LDX 


l$0B 


27 SETINV 


EQU 


SFE80 


63 




JSR CODAGE 


99 


"1 


TXA 




28 SETNORM 


EQU 


SFE84 


64 




JSR SETINV 


100 




AND 


f$0F 


29 BELL 


EQU 


SFF3A 


65 




HEX A9 


101 




PHA 




30 COUT1 


EQU 


SFDF0 


66 




BYT TXLIGNE 


102 




CMP 


• $01 


31 STROUT 


EQU 


SDB3A 


67 




HEX AO 


103 




BEQ 


>2 



ft- ■ 

Pom's n° 19 



104 


CMP IS09 


1 SI 
101 




WJA r 1 Lb , I 




nee 
Z DO 


A 2 CMP 


f »ZZ , 


105 


BNE >3 


i CZ 




cti DTD 
*ln rlK 




9 SQ 
Z J J 




">1 


106 A 2 


pu» 


1 83 




INY 




9 &Ct 
Z OU 


PHA 




107 


ty a 

1 Art 


184 




LDA PILE,Y 




Z 01 


LDA 


ERR 


108 




LOO 




STA PTR+1 




9 f\0 
i oz 


E.UK 


■ e ni 


". 9 


LSR 


1 ft C 




RTS 




OCT 

Z O J 


2*1 A 


FDD 
tKK 


110 


LSR 


187 








9 fid 
z o*i 


PT A 




111 


LSR 


1 88 


.•DIVISION PAR 10 




o c c 
Z 09 


*3 CMP 


A A no 

»*t3Z 


112 


Anc i^nr 


IRQ 


DIVISE 


LDX #$10 




9 fifi 
Z OD 






113 




i an 

1 yv 




LL)f\ t>\J\J 




9 fi7 
ZD* 


t nv 


icrr 
l*f r 


114 


PLA 


1 Q1 
1 3i 




ASL LN 




268 


STX 


ERR 


115 *3 


.T^R MF^^FBP 


1 Q9 
1 ?Z 




ROL LN+1 




9fiQ 

ZD? 


H U"lr 


ififtn 


116 


PT & 

r liA 


1 Q9 

1 3 J 




ROL 




970 
z /u 


IX. L. 




117 


BUM 


1 Q A 

i yi 


-1 


CMP IS0A 




971 
z / 1 






116 




1 Q t 
1 SD 




BCC >2 




979 
Z / Z 




9 9 It 


119 




i yt> 




SBC #$0A 




971 
Z / J 


TA Y 




120 


r*MP i^Oft 


1 Q7 


"2 


ROL LN 




97d 


t nA 


■ P z u 


121 




1 Qft 

i yo 




ROL LN+1 




275 


WOK 


t t n 


19 9 
Lac 


CMP #$0C 


199 




ROL 




99 £ 
Z / O 


LDY 


f >uu 


1 23 




9nn 
zuu 




DEX 




977 
z ' / 


■>1 I 


eon 

P3L* 


1 24 


TQD T T CTTKir 
Ji»K lilSllNL) 


Z Ul 




BNE <1 




97ft 
Z ' o 


t nv 


f *i-r 


125 " 4 


PLA 


909 
z uz 




ROR 




279 


Oil 


^QF 


' ?6 


r*MP 


909 




RTS 




9ftO 
z ou 


t nv 

1iL> I 


lepp 
t »r r 


127 


BCS >6 


90d 

Z U1 


; 






9ft1 


r* c HF Y 




128 


JQR P,FT,T 
won oCiLjIj 


205 


.•TRADUCTION HEXA — > DECIMAL 


9ft9 
z oz 


RFO 


^o 


129 


era sroi n 


90fi 


CODAGE 


LDY #$04 




9ft1 
Z O J 


A 7 TQD 




130 A 5 




Z U / 


"1 


JSR DIVISE 






DDT 


*"7 


131 


BPL <5 


208 




ADC #$30 




9ftS 
ZO J 


DMT 

DM 


<rfi 

vO 


132 


Sin U 


90 Q 
ZU» 




STA NUMLIN, Y 




9 fl C 
ZOO 


" 8 JSR 


$D72C 


133 A 6 




910 
Z 1U 




DEY 




9 ft7 
ZO ' 


DUD 
r Mr 




134 


PLA 


211 




BPL <1 




9ftft 
ZOO 


lea 
JSK 


OUTDO 


135 


P.NF NTNQTD 
one ninsiR 


919 

Zlz 




INY 




9(1 Q 
ZO? 


PLP 




136 


.IMP ROUTT F 


911 
Z 1 O 


'2 . 


LDA NUMLIN, Y 




9 QO 
Z^U 


BPL 


SO 


137 ; 




9 1 4 
ill 




CMP #$30 




9 Q1 
Z»l 


LDA 




138 ; COMPARE 


ACC AtJ CARACT POTNTF 


91 S 




BNE >3 




9 Q9 
Z ?Z 


A C Ten 


miTnn 


139 COMPAR 


LDY #S00 


ZIP 




LDA #$20 




9 Q1 
Z ?J 


Tun 
JPlr 


^1 


140 


CMP (PTR1 Y 


217 




STA NUMLIN, Y 




9 Qd 
Z yt 


A 9 JSR 


CR 


141 


BNE >1 


z i o 




INY 




9 

Z J3 


RTS 




142 


JSR TNrPTRl 


91 Q 
Z 1 :» 




CPY #$04 




9 Qfi 
Z 50 


1 




143 


TYA 


9 9n 
zzu 




BNE <2 




9 Q7 
Z y 1 


/TESTE LA FIN D ' INSTRUCTION 


144 "1 


RTS 


9 91 
Z Z 1 


"3 


RTS 




9Qft 

Z 70 


FINI JSR 


INCPTR 


145 ; 




9 9 9 
ZZZ 








9 QQ 
ZV» 


CMP 


«S00 


146 rl.TT T.F 


CARACTFRF POTHTF 


9 99 
ZZO 


; AFFICHAGE D'UN MESSAGE 




300 


BEQ 


>1 


147 INCPTR 


LDY »S00 


224 


MESSERR 


ASL 




301 


CMP 


IS3A 


148 


LDA (PTR),Y 


225 




TAX 




109 
.) J z 


A l RTS 




149 ; 




226 




I NX 




303 






150 ; INCREMENTE LE POINTEUR 


227 




LDA ADRERR, X 




304 


; TESTE CARAC 


POINTE - LETT RE ? 


151 INCPTR1 


INC PTR 


228 




TAY 




305 


TESTLET LDY 


IS00 


152 


BNE >1 


229 




DEX 




306 


LDA 


(PTR),Y 


153 


INC PTR+1 


9 10 
Z JU 




LDA ADRERR, X 




307 


CMP 


#S41 


154 '1 


RTS 


9 11 
Z Jl 




JSR ST ROUT 




10ft 
ouo 


BCC 


>1 


155 ; 




919 
Z OZ 




RTS 




10Q 


CMP 


• S5B 


156 ;DECREMENTE LE POINTEUR 


911 
Z J J 








110 


BCS 


>1 


157 DECPTR 


SEC 


234 


; SORTIE 


D'UN CARAC. SUR 


ECRAN, 


111 
oil 


JSR 


INCPTR1 


158 


LDA PTR 


235 


; CLIGNOTANT SI CARAC DE 


CONTROL 


119 
J1Z 


TYA 




159 


SBC IS01 


9 1 fi 
Z J 


OUTDO 


ORA #$80 




313 


RTS 




160 


STA PTR 


9 n 

ZO ' 




CMP #$A0 




n d 

J LH 


A l INY 




161 


BCS >1 


9 Ifi 
Zoo 




BCS >1 




IIS 
O 1 3 


RTS 




162 


DEC PTR+1 


9 1Q 
Z J 3 




PHA 




316 






163 A l 


RTS 


9 40 
Z 4 U 




STY $35 




117 

O 1 ' 


; TESTE SI CARAC POINTE - CHIFFR 


164 ; 




9 4 1 
ill 




SEC 




lift 
o 10 


TESTCHI LDY 


IS00 


165 ; EMPI LE 


LE POINTEUR 


9 d 9 
Z H Z 




SBC #$40 




1 1 Q 
o i y 


LDA 


(PTR),Y 


166 EMPILE 


LDY I 


2 43 




JMP SFDF9 




1 90 
zu 


CMP 


• $30 


167 


LDA PTR 


9 d A 


-1 


JMP COUT1 




191 
o Zl 


BCC 


>1 


168 


STA PILE.Y 


24 5 








19 9 
o ZZ 


CMP 


IS3A 


169 


INY 


9 d (\ 
Z 1 O 


;LISTE UNE INSTRUCTION BASIC 


191 
o ZO 


BCS 


>1 


170 


LDA PTR+1 


9 d 9 


LISTING 


LDY #$00 




1 9Z 
O Z*l 


JSR 


INCPTR1 


171 


STA PILE,Y 


9 ii a 
zio 




STY ERR 




1 9 S 
J Z 3 


LDY 


#soo 


172 


INY 


24 9 




STY $85 




326 


RTS 




173 


STY I 


o c n 

Z DU 


-1 


LDY $85 




197 
o z / 


A l INY 




174 


RTS 


TCI 

Z 31 




INC $85 




9 9ft 
o ZO 


RTS 




175 DEPILE 


DEC I 


9 *\ 9 
ZOZ 




LDA ($9B),Y 




9 9 Q 
o Z 3 


; 




176 


DEC I 


Z 9 J 




BEQ >9 




9 10 
o ou 


; TESTE NUMER0 DE LIGNE 


177 


RTS 


9Sd 
Z JS 




LDX ERR 




331 


T NUMLIN LDY #$00 


178 ; 




255 




BNE >2 




332 


STY 


LNG 


179 ; RESTAURE LE POINTEUR EMPILE 


256 




CMP #$3A 


; : 


333 


STY 


LIN+1 


180 RESTAURE 


LDY I 


257 




BEQ >9 




334 


JSR 


TESTCHI 



Pom's n° 19 



9 



335 




BEQ 


>1 






412 




LDA 


LN+1 




4 88 


JSR 


t-UMrAK 


336 




LDX 


• SA1 






a i *a 
4 U 




CMP 


LIN+1 




4 7 


BEQ 


>1 


337 




RTS 








414 




BCC 


<1 




4 90 


LDX 


• $41 


338 


"1 


SEC 








'llJ 




BNE 


> 2 




4 91 


* 1 RTS 




339 




SBC 


IS30 






416 




LDA 


LN 




4 92 




• $C5 


340 




STA 


LIN 






417 




CMP 


LIN 




A 

4 JJ 


JSR 


COMPAR 


341 


"2 


JSR 


TESTCHI 




418 




BC C 


< 1 




A QA 


BEQ 


->1 


342 




BEQ 


>3 






419 




BNE 






4 3D 


LDX 


• $C1 


343 




LDY 


#$00 






4 20 




DTP 

ma 






170 


t Kl a 




344 




RTS 








4 21 


-2 


LDX 


#$03 




A Q7 
4 y 1 


TrCTT 1 ^ T fMl 

ItLbibU LAJ/K 


A C ID 


345 


"3 


SEC 








A 9 9 
4 zz 




RTS 






A QP 
4 yo 


JSR 


COMPAR 


346 




SBC 


#$30 






A 9 \ 


; 








inn 


BEQ 


>1 


347 




TAY 








A "J A 


; TESTE LE TYPE DE VARIABLE 




500 


LDA 


• $B0 


348 




LDA 


LNG 






A 9S 
4 Z 3 




Ten 
JoK 


Tp QTT FT 










349 




CLC 








joe 
4 Z 




BNE 


>3 




3U1 


TCD 


COMPAR 


350 




ADC 


IS01 






A 97 
4 Z / 


"1 


JSR 


TESTLET 




3UZ 


BEQ 


>1 


351 




CMP 


• S05 






4 9fl 
4 zo 




Ren 
nr. y 






sm 


1 riY 


1 cm 

f »U1 


352 




BEQ 


>4 






4 9Q 




JSR 


TESTCHI 




C f) A 

3U4 


* 1 RTS 




353 




STA 


LNG 






a in 




BEQ 


<1 




505 


TESTPARO LDA 


• $28 


354 




LDA 


LIN 






431 




LDY 


•$oo 




506 


JSR 


COMPAR 


355 




ASL 








4 1? 




LDA 


(PTR),Y 




sm 


BEQ 


■'i 


356 




STA 


LIN 






a i~\ 




CMP 


#$24 




508 


LDX 


• $72 


357 




STA 


LIN+2 






A ~i A 

4 J4 




BCC 


>2 




3U3 


"1 RTS 




358 




LDA LIN+1 






4 J 3 




CMP 


#$26 




3 iU 


IbblrAKr LJA 


• $29 


359 




ROL 








A -if. 
4 JO 




BCS 


>2 




311 


JSR 


COMPAR 


360 




STA 


LIN+1 






A 11 
4 J / 




TAY 






CI -J 

31Z 


BEQ 


>1 


361 




ASL 


LIN+2 






4 1 a 
4 JO 




JSR 


INCPTR1 




3 x j 


LDX 


• $82 


362 




ROL 








A1Q 
4 JJ 




RTS 






514 


-1 RTS 




3 63 




ASL 


LIN+2 






a a n 
4<ju 


-2 


LDY 


•$01 




CI c 

J ID 


: 




364 




ROL 








441 




RTS 






SI fi 
DID 


; TESTE SI CHAINE 


365 




BCS 


>4 






J J 9 

4 4 Z 


-3 


LDY 


• $00 




SI "7 
31/ 


TESTCHA LDA 


#$22 


366 




STA 


LIN+3 






4 41 




RTS 






SIR 
310 


JSR COMPAR 


367 




LDA 


LIN+2 






A A A 
444 


1 








S 1 Q 
313 


BNE >3 


368 




ADC 


LIN 






A AC 

4 43 


; TESTE SI VARIABLE REELLE 




520 


-1 JSR 


INCPTR 


369 




STA 


LIN 






4 46 


TESTVR 


JSR 


TESTVAR 




3zl 


CMP 


#$00 


370 




LDA 


LIN+3 






AA7 




CPY 


• $00 




S 99 
DZZ 


BNE 


>2 


371 




ADC 


LIN+1 






4 48 




BNE 


>1 




3 Z J 


JSR DECPTR 


372 




BCS 


>4 






4 4 9 




LDX 


• $22 




en* 
3Z4 


LDA #$01 


373 




STA 


LIN+1 






450 




RTS 






ETC 

3Z3 


RTS 




374 




TYA 








A CI 

431 


"1 


CPY 


• $01 




S9fi 
3 Z D 


-2 CMP 


#$22 


375 




ADC 


LIN 






4 52 




BEQ 


>2 




S 97 
3Z ' 


BNE 


<1 


376 




STA 


LIN 






4 3J 




LDX 


#$06 




S 9fl 
3 ZO 


-3 RTS 




377 




LDA 


• $00. 






IDA 


"2 


RTS 






S 9Q 
3 Z 7 






378 




ADC 


LIN+1 






4 55 


S 








s in 

3 JU 


; TESTE UNE CONNECTION 


379 




BCS 


>4 






4 56 


; TESTE SI VARIABLE NUMERIQUE 




S 1 1 

3 j 1 


;DE COMPARAISON 


380 




STA 


LIN+1 






4 57 


TESTVNU 


JSR 


TESTVAR 




532 


TESTCOMP LDA 


#$00 


381 




CMP 


ISFA 






4 58 




CPY 


• $01 




533 


STA 


SUP 


382 




BCC 


<2 






4 59 




BEQ 


>2 




534 


STA 


EGA 


383 


"4 


LDX 


IS03 






4 60 




CPY 


• $25 




535 


STA 


INF 


384 




RTS 








4 61 




BEQ 


>2 




536 


"1 LDA 


#$CF 


385 












4 62 




CPY 


• $00 




537 


JSR 


COMPAR 


386 


; TESTE 


NUMERO LIGNE 


F.T 


VE* DTCTT 

VLK1 r 1L 


4 63 




BEQ 


>1 




538 


BNE 


>2 


387 


;SON EXISTENCE DANS 


LE 


i f\ ran c 


4 64 




LDX 


• $06 




539 


INC 


SUP 


388 


VNUMLIN 


JSR 


TNUMLIN 






4 fi s 
4 DO 




RTS 






540 


JMP 


<1 


389 




BNE 


>2 






4 66 


»1 


LDX 


#$22 




541 


-2 LDA 


#$D0 


3 90 




LDA 


S67 






4 67 


"2 


RTS 






54 2 


JSR 


COMPAR 


3 91 




STA 


LIN+2 






4 68 










543 


BNE 


>3 


3 92 




LDA 


$68 






4 69 


; SOUS-PROGRAMMES QUI TESTENT 




544 


INC 


EGA 


3 93 




STA 


LIN+3 






4 70 


; L ' EGALI1 


E DU 


CARACTERE POINTE 


S A s 

3 4 3 


JMP 


<1 


3 94 




LDY 


• $00 






4 71 


;AVEC DIVERSES CLES 




54 6 


"3 LDA 


#$D1 


395 




LDA 


(LIN+2) , Y 




4 72 


TESTVIR 


LDA 


• $2C 




S A 7 
3 4/ 


JSR 


COMPAR 


3 96 




STA 


NL 






4 73 




JSR 


COMPAR 




548 


BNE 


>4 


3 97 




INY 








4 74 




BEQ 


>1 




54 9 


INC 


INF 


3 98 




LDA 


(LIN+2) 


,Y 




4 75 




LDX 


• $52 




s sn 

3 3U 


JMP 


<1 


3 99 




STA 


NL+1 






4 76 


-1 


RTS 






SSI 
3 31 


"4 LDA 


#$01 


4 00 




ORA 


NL 






4 77 


TESTPOVI 


LDA 


•$3B 




ceo 
3 3Z 


CMP 


SUP 


401 




BEQ 


>2 






4 78 




JSR 


COMPAR 




ceo 
3 3 J 


BCC 


>5 






INY 








4 79 




BEQ 


>1 




5 54 


CMP 


EGA 


403 




LDA 


(LIN+2) 


-Y 




4 80 




LDX 


#$91 




555 


BCC 


>5 


4 04 




STA 


LN 






4 81 


»1 


RTS 






c c c 
3 30 


CMP 


INF 


405 




INY 








4 82 


TESTEGAL 


LDA 


• $D0 




S S7 
3 3/ 


BCC 


>5 


406 




LDA 


(LIN+2) 


, Y 




483 




JSR 


COMPAR 




558 


LDA 


• $00 


4 07 




STA 


LN + 1 






4 8 4 




BEQ 


>1 




559 


CLC 




408 




LDA 


NL 






485 




LDX 


#$31 




560 


ADC 


SUP 


409 




STA 


LIN+2 






486 


"1 


RTS 






561 


ADC 


EGA 


410 




LDA 


NL+1 






487 


TESTTO 


LDA 


• $C1 


;TO 


562 


ADC 


INF 


411 




STA 


LIN+3 
















563 


CMP 


• $01 





























; GOTO 



;GOSUB 



; ( 



;) 



10 



Pom's n° 19 



564 BEQ >6 

565 CMP »S02 

566 BEQ >6 

567 -5 LDA IS01 

568 "6 RTS 

569 ; 

570 ; TESTE COMPARAISON DE CHAINE 

571 COMPCHA JSR EXPCHA 
BNE >2 

JSR TESTCOMP 
BEQ >1 
LDX IS06 
RTS 

JSR EXPCHA 
RTS 



572 
573 
574 
575 
576 

577 A l 
57B -2 

579 ; 

580 ; TESTE UN OPERATEUR 

581 ;+-*/* AND OR 

582 TESTOP LDY «S00 



LDA (PTR),Y 

CMP #SC8 

BCC >1 

CMP ISCF 

BCS >1 

JSR INCPTR1 

LDY #S00 

RTS 

INY 

RTS 



583 
584 
585 
586 
587 
588 
589 
590 

591 -1 
592 
5 93 ; 

594 ; TESTE SI INDICES 

595 ; (POUR VARIABLE TABLEAU) 

596 INDICES 
597 
598 
599 
600 
601 

602 INDICESl 
603 

604 "I 
605 
606 
607 
608 
609 
610 
611 

612 »2 
613 

614 "3 
615 

616 ; 

617 ;LIT UN NOMBRE 

618 ; COMMENCANT PAR UN CHIFFRE 

619 LITNOM JSR TESTCHI 

620 BEQ LITNOM 

621 LDA »S2E 

622 JSR COMPAR 

623 BNE >1 

624 ; 

625 ;LIT UN NOMBRE 

626 ; COMMENCANT PAR UN POINT 



LDA 


IS28 


JSR 


COMPAR 


BEQ 


INDICES 


LDA 


IS00 


CLC 




RTS 




JSR 


EXPNUM 


BNE 


>2 


LDA 


IS29 


JSR 


COMPAR 


BEQ 


>2 


LDA 


IS2C 


JSR 


COMPAR 


BNE 


>3 


JSR 


EXPNUM 


BEQ 


<1 


SEC 




RTS 




LDX 


#S52 


RTS 





; ( 



;) 



627 


LITDEC 


JSR 


TESTCHI 


628 




BEQ 


LITDEC 


629 


-1 


LDA 


• $45 


630 




JSR 


COMPAR 


631 




BNE 


>3 


632 




LDA 


l$C8 


633 




JSR 


COMPAR 


634 




BEQ 


>2 


635 




LDA 


ISC9 


636 




JSR 


COMPAR 


637 


-2 


JSR 


TESTCHI 


638 




BNE 


>4 


639 




JSR 


TESTCHI 


640 


-3 


JSR 


TESTCHI 











;E 



;+ 



641 




BEQ >4 




718 




BEQ 


SUITE 


642 




LDA #$2E 




719 




JSR 


RLSTAURE 


643 




JSR COMPAR 




720 




JSR 


T' V '"" T J n A M 

LXCHrAR 


644 




BEQ >4 




721 




BEQ 


SUITE 


645 




TYA 




722 




RTS 




64 6 




RTS 




723 








647 


A 4 


INY 




724 


; CMPARE 


SGN INT ABS PDL SQR RND 


648 




RTS 




725 


;LOG EXP COS 


SIN IAN AIN ft,h-l\ 


64 9 








726 


A l 


CMP 


1 SD2 


650 


/TESTE 


UNE EXPRESSION 


NUMERIQUE 


727 




BCC 


*1 


651 


; ENTRE 


PARENTHESES 




728 




CMP 


#SE3 


652 


EXNUPAR 


JSR TESTPARO 




729 




BCS 


>1 


653 




BNE >1 




730 




JSR 


EXNUPAR 


654 


EXNUPAR1 JSR EXPNUM 




731 




BEQ 


SUITE 


655 




BNE >1 




732 




RTS 




656 




JSR TESTPARF 




733 


A l 


CMP 


l$2E 


657 


A l 


RTS 




734 




BNE 


>1 


658 


i 






735 




JSR 


LITDEC 


659 


; TESTE UNE EXPRESSION NUMERIQUE 


736 




BEQ 


SUITE 


660 


EXPNUM 


JSR INCPTR 




737 




LDX 


f$04 


661 




CMP ISC8 


; + 


738 




RTS 




662 




BEQ EXPNUM 




739 


s 






663 




CMP #SC9 


l~ 


740 


• TESTE 


CHIFFRE 


664 




BEQ EXPNUM 




741 


A l 


CMP 


»S30 


665 




CMP #SC6 


;NOT 


742 




BCC 


>1 


666 




tJt-U LAFNUM 




743 




CMP 


• S3A 


667 




CMP #328 


( 


744 




BCS 


>1 


668 




BNE >1 




745 




JSR 


LITNOM 


669 




t e n r v mi muni 




746 




BEQ 


SUITE 


670 




our ^ n 

owe. 




747 




LDX 


• S04 


671 








748 




RTS 




672 








749 


■"■1 


PHA 




673 


1 


CMP i^f"9 




750 




JSR 


DECPTR 


674 




BNE >1 




751 




PLA 




675 




JSR TESTVR 




752 




CMP 


l$22 


676 




BNE >2 




753 




BEQ 


>4 


677 




JSR EXNUPAR 




754 




CMP 


ISE4 ;STRS 


678 




BNE >2 




755 




BEQ 


>4 


679 




JMP SUITE 




756 


i 






680 


"2 


RTS 




/ J 1 


• TF ^TF 


CHRS LEFTS RIGHTS MIDS 


681 


A l 


CMP #SD7 


; SCRN ( 


758 




CMP 


#SE7 


682 




BNE >1 




"ICQ 




BCC 


>1 


683 




JSR EXPNUM 




7 60 




CMP 


ISEB 


684 




BNE >2 




7 61 




BCC 


>4 


DO J 




JSR TESTVIR 




7 62 


A l 


JSR 


EMPILE 


686 




BNE >2 




7 63 




JSR 


TESTVAR 


687 




JSR EXNUPAR1 




764 




JSR 


DEPILE 


688 




BNE >2 




765 




CPY 


IS24 


689 




JMP SUITE 




7 66 




BNE 


>2 


690 




RTS 




767 




JSR 


RE ST AU RE 


691 


A l 


CMP #SF3 


;LEN 


7 68 




JMP 


>4 


692 




BEQ >2 




7 69 


A 2 


CPY 


#soo 






CMP #SF5 


; VAL 


1 l\J 




BNE 


>3 






BEQ >2 




771 




LDX 


l$62 


f Q - 




CMP I^pft 




772 




RTS 




696 




BNE >1 




773 


A 3 


JSR 


INDICES 


697 


A 2 


JSR EXCHPAR 




774 




BEQ 


SUITE 


698 




BNE >3 




775 




RTS 




699 




JMP SUITE 




776 


A A 

H 


JSR 


COMPCHA 


700 


A 3 


RTS 




111 




BEQ 


SUITE 


701 


A l 


CMP ISD5 


;USR 


778 




RTS 




l\J£ 




BNE >1 




779 


SUITE 


JSR 


TESTCOMP 


703 




JSR EXNUPAR 




780 




BEQ 


>1 


704 




BNE >2 




781 




JSR 


TESTOP 


705 




LDX ISOB 




782 




BNE 


>2 


706 




STX ERR 




783 


A l 


JMP 


EXPNUM 


707 




JMP SUITE 




784 


A 2 


LDA 


#S00 


708 


A 2 


RTS 




785 




RTS 




709 


A l 


CMP ISD6 


;FRE 


786 


; 






710 




BEQ >2 




787 


; TESTE 


UNE EXPRESSION ALPHANUM. 


711 




CMP ISD9 


;POS 


788 


; ENTRE 


PARENTHESES 


712 




BNE >1 




7 89 


EXCHPAR JSR 


TESTPARO 


713 


A 2 


JSR EMPILE 




7 90 




BNE 


>1 


714 




JSR EXNUPAR 




791 




JSR 


EXPCHA 


715 




PHP 




792 




BNE 


>1 


716 




JSR DEPILE 




7 93 




JSR 


TESTPARF 


717 




PLP 




7 94 


A l 


RTS 





Pom's n° 19 



11 



795 



796 ; TESTE UNE EXPRESSION ALPHANUM. 



-3 
"1 



;MIDS 



;) 



7 97 EXPCHA 
798 
799 
800 
801 
802 
803 
804 
805 
806 
807 
808 
809 
810 
811 
812 
813 
814 
815 
816 
817 
818 
819 
820 
821 
822 
823 
824 
825 
826 
827 
828 
829 
830 
831 
832 
833 
834 
835 
836 
837 

838 "2 

839 '1 
840 
841 
842 
843 
844 
845 
846 -1 
847 
848 
849 
850 
851 
852 
853 
854 
855 
856 
857 "2 
858 
859 -1 
860 
861 
862 

863 SUITEC 
864 
86S 
866 
867 -1 
8 68 
8 69 ; 

870 ; TRAITEMENT D'UNE INSTRUCTION 

871 TRAIINS LDA PTR 



JSR INCPTR 
CMP #$C8 
BEQ EXPCHA 
CMP #SE4 
BEQ >2 
CMP »$E7 
BNE >1 
JSR EXNUPAR 
BNE >3 
JMP SUITEC 
RTS 

CMP #$E8 
BEQ >2 
CMP #$E9 
BNE >1 

JSR TESTPARO 

BNE >3 

JSR EXPCHA 

BNE >3 

JSR TESTVIR 

BNE >3 

JSR EXNUPAR1 
BEQ SUITEC 
RTS 

CMP ISEA 
BNE >1 

JSR TESTPARO 
BNE >2 
JSR EXPCHA 
BNE >2 
JSR TESTVIR 
BNE >2 
JSR EXPNUM 
BNE >2 
LDA #$29 
JSR COMPAR 
BEQ SUITEC 
JSR TESTVIR 
BNE >2 

JSR EXNUPAR1 
BEQ SUITEC 
RTS 

CMP »$22 
BNE >1 
JSR DECPTR 
JSR TESTCHA 
BEQ SUITEC 
LDX IS62 
RTS 

CMP f$41 

BCC >1 
CMP #$5B 
BCS >1 
JSR DECPTR 
JSR TESTVAR 
CPY IS24 
BNE >2 
JSR INDICES 
BEQ SUITEC 
RTS 

LDX #$06 
RTS 

JSR DECPTR 
JSR EXCHPAR 
BEQ SUITEC 
RTS 

LDA ISC8 
JSR COMPAR 
BNE >1 
JMP EXPCHA 
LDA ISOO 
RTS 



872 
873 
874 



STA $9B 
LDA PTR»1 
STA S9C 



*+ 

; STRS 
;CHRS 



; LFTS 



; RGTS 



;A. .Z 



875 TRAIINS1 JSR INCPTR 
CMP ISOO 
BEQ >1 
CMP IS3A 
BNE >2 
"1 LDX #$08 

RTS 

-2 CMP IS41 

BCC >3 
CMP #S5B 
BCS >3 
JSR DECPTR 
LDA #SAA 
"3 CMP IS80 

BCC >4 
CMP ISCO 
BCC >5 
"4 JSR FININST 

LDX #$00 
RTS 

'5 AND #$7F 

ASL 
TAX 

LDA TABLE, X 
STA IND 
INX 

LDA TABLE, X 
STA IND+1 
JMP (IND) 



876 
877 
878 
879 
880 
881 
882 
883 
884 
885 
886 
887 
888 
889 
890 
891 
892 
8 93 
8 94 
895 
896 
8 97 
898 
899 
900 
901 
902 
903 
904 
905 
906 



; FINL 



;A. .z 



; LET 



; TRAITEMENT DIFFERENCIE SELON 
; L' INSTRUCTION BASIC 

907 END LDX #$07 

908 END1 JSR FINI 

909 BEQ >1 

910 JSR FININST 

911 LDX #$12 

912 A l RTS 

913 FOR.. TO JSR TESTVR 

914 BNE >2 

915 JSR TESTEGAL 

916 BNE >2 

917 JSR EXPNUM 

918 BNE >2 

919 JSR TESTTO 

920 BNE >2 

921 JSR EXPNUM 

922 BNE >2 

923 LDA #$C7 ;STEP 
9^4 JSR COMPAR 

925 BNE >1 

926 JSR EXPNUM 

927 BNE >2 

928 -1 JMP END 

929 -2 JMP FININST 

930 NEXT JSR TESTLET 

931 BNE >2 

932 JSR DECPTR 

933 -1 JSR TESTVR 

934 BNE >3 

935 JSR TESTVIR 

936 BEQ <1 

937 -2 JMP END 

938 "3 JMP FININST 

939 DATA LDA #$22 

940 JSR COMPAR 

941 BNE >1 

942 JSR DECPTR 

943 JSR TESTCHA 

944 BNE >2 

945 JSR TESTVIR 

946 BEQ DATA 

947 LDX #S0D 

948 JMP END1 



949 -1 

950 

951 

952 

953 

954 '2 
955 

956 INPUT 

957 

956 

959 

960 

961 

962 

963 

964 -1 

965 

966 

967 

968 

969 

970 

971 

972 "3 

973 -4 

974 "5 
975 

976 DEL 

977 

978 

979 

980 

981 

982 

983 -1 

984 DIM 
985 
986 
987 

988 
989 
990 
991 
992 

993 "1 

994 -2 

995 READ 
996 

997 

998 

999 
1000 
1001 
1002 

1003 -1 

1004 "2 



1005 CALL 
1006 

1007 PLOT 

1008 

1009 

1010 

1011 

1012 

1013 

1014 -1 

1015 HLIN 
1016 
1017 
1018 
1019 
1020 
1021 
1022 
1023 
1024 
1025 



JSR FINI 

BNE DATA 

JSR DECPTR 

LDX #$0D 

JMP FININST 

LDX #$12 

JMP FININST 

LDA #$22 

JSR COMPAR 

BNE >1 

JSR DECPTR 

JSR TESTCHA 

BNE >5 

JSR TESTPOVI 

BNE >4 

JSR TESTVAR 

CPY #$00 

BEQ >3 

JSR INDICES 

BNE >4 

JSR TESTVIR 

BEQ <1 

JMP END 

LDX #$22 

JMP FININST 

LDX #$12 

JMP FININST 

JSR TNUMLIN 

BNE >1 

JSR TESTVIR 

BNE >1 

JSR TNUMLIN 

BNE >1 

JMP END 

JMP FININST 

JSR TESTVAR 
CPY #$00 
BEQ >1 
JSR INDICES 
BNE >2 
BCC >1 
JSR TESTVIR 
BEQ DIM 
JMP END 
LDX #$B1 
JMP FININST 
JSR TESTVAR 
CPY #$00 
BEQ >1 
JSR INDICES 
BNE >2 
JSR TESTVIR 
BEQ READ 
JMP END 
LDX #$22 
JMP FININST 
LDX #$0A 
JMP FININST 
JSR EXPNUM 
BNE >1 
JSR TESTVIR 
BNE >1 
JSR EXPNUM 
BNE >1 
JMP END 
JMP FININST 
JSR EXPNUM 
BNE >1 
JSR TESTVIR 
BNE >1 
JSR EXPNUM 
BNE >1 
JSR TESTAT 
BNE >1 
JSR EXPNUM 
BNE >1 
JMP END 



12 



Pom's n° 19 



1026 


-1 


JMP 


FININST 


1027 


HCOLOR 


JSR 


EXPNUM 


1028 




BNE 


>1 


1029 




JMP 


END 


1030 


"1 


JMP 


FININST 


1031 


HP LOT 


JSR 


TESTTO 


1032 


'1 


JSR 


EXPNUM 


1033 




BNE 


>2 


1034 




JSR 


TESTVIR 


1035 




BNE 


>2 


1036 




JSR 


EXPNUM 


1037 




BNE 


>2 


1038 




JSR 


TESTTO 


1039 




BEQ 


<1 


1040 




JMP 


END 


1041 


A 2 


JMP 


FININST 


1042 


DRAW 


JSR 


EXPNUM 


1043 




BNE 


>2 


1044 




JSR 


TESTAT 


1045 




BNE 


>1 


1046 




JSR 


EXPNUM 


1047 




BNE 


>2 


1048 




JSR 


TESTVIR 


1049 




BNE 


>2 


1050 




JSR 


EXPNUM 


1051 




BNE 


>2 


1052 


A l 


JMP 


END 


1053 


"2 


JMP 


FININST 


1054 


ONERR 


LDA 


ISAB 


1055 




JSR 


COMPAR 


1056 




BNE 


>1 


1057 




JSR 


VNUMLIN 


1058 




BNE 


>2 


1059 




JMP 


END 


1060 


A l 


LDX 


#SD1 


1061 


'2 


JMP 


FININST 


1062 


RECALL 


JSR 


TESTVNU 


1063 




BNE 


>1 


1064 




JMP 


END 


1065 


A l 


JMP 


FININST 


1066 


LET 


JSR 


TESTVAR 


1067 




CPY 


• SOO 


1068 




BEQ 


>2 


1069 




CPY 


• S24 


1070 




BEQ 


>1 


1071 




JSR 


INDICES 


1072 




BNE 


>3 


1073 




JSR 


TESTEGAL 


1074 




BNE 


>3 


1075 




JSR 


EXPNUM 


1076 




BNE 


>3 


1077 




JMP 


END 


1078 


A l 


JSR 


INDICES 


1079 




BNE 


>3 


1080 




JSR 


TESTEGAL 


1081 




BNE 


>3 


1082 




JSR 


EXPCHA 


1083 




BNE 


>3 


1084 




JMP 


END 


1085 


A 2 


LDX 


• S22 


1086 


A 3 


JMP 


FININST 


1087 


GOTO 


JSR 


VNUMLIN 


1088 




BNE 


>1 


1089 




JMP 


END 


10 90 


A l 


JMP 


FININST 


1091 


RUN 


JSR 


TESTCHI 


1092 




BNE 


>1 


1093 




JSR 


DECPTR 


1094 




JSR 


VNUMLIN 


1095 




BEQ 


>1 


1096 




JMP 


FININST 


1097 


A l 


JMP 


END 


1098 


IF 


JSR 


EXPNUM 


1099 




BNE 


>5 


1100 




LDA 


• SAB 


1101 




JSR 


COMPAR 


1102 




BNE 


>1 



; GOTO 



,-GOTO 



1103 

1104 

1105 

1106 A l 

1107 

1108 

1109 

1110 

1111 '2 

1112 

1113 

1114 A 3 

1115 

1116 

1117 A 4 

1118 A 5 

1119 AMPERS 
1120 

1121 REM 

1122 

1123 ON 

1124 

1125 

1126 

1127 A l 

1128 

1129 

1130 

1131 

1132 A 2 

1133 WAIT 
1134 
1135 
1136 
1137 
1138 
1139 
1140 
1141 
1142 

1143 A l 

1144 A 2 

1145 DEF 
1146 
1147 
1148 
1149 
1150 
1151 
1152 
1153 
1154 
1155 
1156 
1157 
1158 
1159 
1160 

1161 A l 

1162 A 2 

1163 PRINT 
1164 

1165 

1166 

1167 

1168 

1169 

1170 

1171 

1172 

1173 A l 

1174 

1175 

1176 A 2 

1177 

1178 

1179 



JSR VNUMLIN 

BEQ >4 

BNE >5 

LDA ISC4 

JSR COMPAR 

BEQ >2 

LDX ISE1 

BNE >5 

JSR TESTCHI 

BEQ >3 

JMP TRAIINS1 

JSR DECPTR 

JSR VNUMLIN 

BNE >5 

JMP END 

JMP FININST 

LDX #S05 

JMP FININST 

LDX #$0C 

JMP FINBIS 

JSR EXPNUM 

BNE >2 

JSR TESTGO 

BNE >2 

JSR VNUMLIN 

BNE >2 

JSR TESTVIR 

BEQ <1 

JMP END 

JMP FININST 

JSR EXPNUM 

BNE >2 

JSR TESTVIR 

BNE >2 

JSR EXPNUM 

BNE >2 

JSR TESTVIR 

BNE >1 

JSR EXPNUM 

BNE >2 

JMP END 

JMP FININST 

LDA #SC2 

JSR COMPAR 

BNE >1 

JSR TESTVR 

BNE >2 

JSR TESTPARO 

BNE >2 

JSR TESTVR 

BNE >2 

JSR TESTPARF 

BNE >2 

JSR TESTEGAL 

BNE >2 

JSR EXPNUM 

BNE >2 

JMP END 

LDX ISF1 

JMP FININST 

JSR TESTVIR 

BEQ PRINT 
JSR TESTPOVI 
BEQ PRINT 
LDA »SC0 
JSR COMPAR 
BEQ >1 
LDA #$C3 
JSR COMPAR 
BNE >2 

JSR EXNUPAR1 
BNE >3 
BEQ PRINT 
JSR EMPILE 
JSR EXPNUM 
PHP 

JSR DEPILE 



; THEN 



; FN 



;TAB( 



; SPC ( 



1180 




PLP 




1181 




BEQ 


PRINT 


1182 




JSR 


RESTAURE 


1183 




JSR 


EMPILE 


1184 




JSR 


EXPCHA 


1185 




PHP 




1186 




JSR 


DEPILE 


1187 




PLP 




1188 




BEQ 


PRINT 


1189 




JSR 


RESTAURE 


1190 




JMP 


END 


1191 


A 3 


JMP 


FININST 


1192 


LIST 


JSR 


TESTCHI 


1193 




BNE 


>1 


1194 




JSR 


DECPTR 


1195 




JSR 


TNUMLIN 


1196 




BNE 


>4 


1197 


A l 


JSR 


TESTVIR 


1198 




BEQ 


>2 


1199 




LDA 


#SC9 


1200 




JSR 


COMPAR 


1201 




BNE 


>3 


1202 


A 2 


JSR 


TESTCHI 


1203 




BNE 


>3 


1204 




JSR 


DECPTR 


1205 




JSR 


TNUMLIN 


1206 




BNE 


>4 


1207 


A 3 


JMP 


END 


1208 


A 4 


JMP 


FININST 


1209 


GET 


LDY 


#$07 


1210 




STY 


DRGET 


1211 


A l 


JSR 


TESTVAR 


1212 




CPY 


#$00 


1213 




BNE 


>2 


1214 




LDX 


#$22 


1215 




BNE 


>4 


1216 


A 2 


CPY 


• $24 


1217 




BEQ 


>3 


1218 




LDA 


• $0E 


1219 




STA 


DRGET 


1220 


A 3 


JSR 


INDICES 


1221 




BNE 


>4 


1222 




JSR 


TESTVIR 


1223 




BEQ 


<1 


1224 




LDX 


DRGET 


1225 




JMP 


END1 


1226 


A 4 


JMP 


FININST 


1227 








1228 


; PLACE LE POINTEUR AU 


1229 


; INSTRUCTION 


SUIVANTE 


1230 


;OU NOUVELLE 


LIGNE 


1231 


FININST 


JSR 


INCPTR 


1232 




CMP 


#$00 


1233 




BEQ 


>1 


1234 




CMP 


<$3A 


1235 




BNE 


FININST 


1236 


A l 


RTS 




1237 


FINBIS 


JSR 


INCPTR 


1238 




CMP 


#$00 


1239 




BNE 


FINBIS 


1240 




RTS 




1241 


; 






1242 


;DONNEES 


: MESSAGES 


1243 


TXLIGNE 


ASC 


"LIGNE " 


1244 


NUMLIN 


HEX 


00000000 


1245 


ERR0 


ASC 


"INSTRUC 



DEBUT 



RECONNUE" 

1246 HEX 0D00 

1247 ERR1 ASC " ATTENDU" 

1248 HEX 0D00 

1249 ERR2 ASC " ATTENDUE" 

1250 HEX 0D00 

1251 ERR3 ASC "MAUVAISE ADRESSE" 

1252 HEX ODOO 

1253 ERR4 ASC "NOMBRE INCORRECT" 

1254 HEX ODOO 

1255 ERRS ASC "EXPRESSION 



Pom's n° 19 



13 



INCORRECTE" 






1256 




HEX 


0D00 


1 9 CI 


ERR6 


ASC 


"CONFUSION DE 


TYPE 








1 258 




HEX 


0D00 


12 59 


ERR7 


ASC 


"CORRECT" 


i 9 fin 




HEX 


0D00 


12 61 


ERR6 


ASC 


"VIDE" 


1 9 £1 




HEX 


0D00 


1 9 fil 


ERR9 


ASC 


"INSTRUCTION S" 


1 9 fill 
1/ OH 




HEX 


0D00 


i 9fi<; 

1 i DD 


FDD i n 


ASC 


"INSTRUCTION CALL" 


1 9 fifi 




HEX 


CDOO 


1 9 fi"7 


ERR11 


ASC 


"FONCTION USR" 


DO 




HEX 


0D00 


1 9 fiQ 


FDD 1 1 


ASC 


"INSTRUCTION REM" 


i 9 9n 




HEX 


0D00 


It '1 


ERR13 


ASC 


"I NT RUCTION DATA" 


1272 




HEX 


0D00 


1273 


ERR14 


ASC 


"GET NUMERIQUE" 


1274 




HEX 


0D00 


1275 


ERR17 


ASC 


"FIN D-INSTR." 


1276 




HEX 


00 


1277 


ERR18 


ASC 


"VARIABLE" 


1278 




HEX 


00 


1279 


ERR19 


ASC 




Izou 




HEX 


00 


1281 


ERR20 


ASC 


"TO" 


1282 




HEX 


00 


1283 


ERR21 


ASC 


" i " 


1284 




HEX 


00 


1285 


ERR22 


ASC 


"EXPRESSION" 


1286 




HEX 


00 


1287 


ERR23 


ASC 


"(" 


12 88 




HEX 


00 


■ - a j 

i/oy 


ERR24 


ASC 


")" 


i 9 on 




HEX 


00 


1 9 Q1 


ERR25 


ASC 


...» 


1 9 Q9 




HEX 00 


1 t q-» 
1/ ? J 


ERR26 


ASC 


"NUMERO" 


12 94 




HEX 


00 


1 9 QS 


FDD Tt 


ASC 


"TABLEAU" 


1 9 Qfi 




HEX 


00 


1 9 Q*7 


FDD ?fl 


ASC 


"AT" 


1 o qo 

1 / 70 




HEX 


00 


1 9 QQ 
1 I W 


ERR29 


ASC 


"GOTO OU GOSUB" 


i inn 




HEX 


00 


1 JUl 


ERR30 


ASC 


"THEN" 


i in 9 




HEX 


00 


1303 


ERR31 


ASC 


"FN" 


1304 




HEX 


00 


1305 








i infi 


/TABLE 


DES ADRESSES DES DEBUTS 


1 307 


;DE MESSAGES 




i inn 


ADRERR 


ADR 


ERRO 


lino 

1 J U 7 




ADR 


ERR1 


1 1 1 n 

1 J 1U 




ADR 


ERR2 


1311 




ADR 


ERR3 


1312 




ADR 


ERR4 


1313 




ADR 


ERR5 


1314 




ADR 


ERR6 


1315 




ADR 


ERR7 


1316 




ADR 


ERR8 


i n i 
i j i * 




ADR 


ERR9 


1 J X 




ADR 


ERR10 


1 1 1 Q 
1 J 1 •* 




ADR 


ERR11 


i i 9 n 




ADR 


ERR12 


1191 
1 J/1 




ADR 


ERR13 


1322 




ADR 


ERR14 


1323 




ADR 


ERR17 






ADR 


ERR18 


1325 




ADR 


ERR19 


1326 




ADR 


ERR20 


1327 




ADR 


ERR21 


1328 




ADR 


ERR22 


1329 




ADR 


ERR23 


1330 




ADR 


ERR24 



1331 




ADR ERR25 




1332 




ADR ERR26 




1333 




ADR ERR27 




1334 




ADR ERR28 




1335 




ADR ERR29 




1336 




ADR ERR30 




1337 




ADR ERR31 




1338 








1339 


; TABLE DES ADRESSES DES 




1340 


; TRAI TEMENT S SPECIFIQUES 




1341 


TABLE 


ADR END 




1342 




ADR FOR. .TO 




1343 




ADR NEXT 




1344 




ADR DATA 




1345 




ADR INPUT 




1346 




ADR DEL 




1347 




ADR DIM 




1348 




ADR READ 




1349 




ADR END 


;GR 


1350 




ADR END 


,-TEXT 


1351 




ADR HCOLOR 


;PR# 


1352 




ADR HCOLOR 


;INI 


1353 




ADR CALL 




1354 




ADR PLOT 




1355 




ADR HLIN 




1356 




ADR HLIN 


;VLIN 


1357 




ADR END 


; HGR2 


1358 




ADR END 


; HGR 


1359 




ADR HCOLOR 




1360 




ADR HP LOT 




1361 




ADR DRAW 




1362 




ADR DRAW 


; XDRW 


1363 




ADR HCOLOR 


; HTAB 


1364 




ADR END 


; HOME 


1365 




ADR HCOLOR 


; ROT- 


1366 




ADR HCOLOR 


;SCL- 


1367 




ADR END 


;SHLD 


1368 




ADR END 


; TRAC 


1369 




ADR END 


; NOTR 


1370 




ADR END 


; NORM 


1371 




ADR END 


; INVE 


1372 




ADR END 


; FLSH 


1373 




ADR HCOLOR 


;CLR- 


1374 




ADR END 


;POP 


1375 




ADR HCOLOR 


; VTAB 


1376 




ADR HCOLOR 


;HIM: 


1377 




ADR HCOLOR 


;LOM: 


1378 




ADR ONERR 




1379 




ADR END 


; RESU 


1380 




ADR RECALL 




1381 




ADR RECALL 


; STOR 


1382 




AUK M^UltUK 


;SPED 


1383 




AUK LL1 




1384 




AUK GU1U 




1385 




AUK KUN 




1386 




ADR IF 




1387 




ADR END 


,-REST 


1388 




ADR AMPERS 




1389 




AUK GOTO 


;GOSU 


1390 




ADR END 


;RTRN 


1391 




ADR REM 




13 92 




ADR END 


; STOP 


1393 




ADR ON 




1394 




ADR WAIT 




1395 




ADR END 


; LOAD 


1396 




ADR END 


; SAVE 


1397 




ADR DEF 




1398 




ADR PLOT 


; POKE 


1399 




ADR PRINT 




1400 




ADR END 


; CONT 


1401 




ADR LIST 




1402 




ADR END 


;CLEA 


1403 




ADR GET 




1404 




ADR END 


;NEW 


1405 


IND 


HEX 0000 




1406 




END 





Recapitulation SNTX 



8900- 


20 


58 


FC 


A9 


4C 


8D 


F5 


03 


8908- 


A9 


00 


85 


73 


8D 


F6 


03 


A9 


8910- 


89 


85 


74 


8D 


F7 


03 


A5 


67 


8918- 


85 


06 


A5 


68 


85 


07 


20 


CE 


8920- 


89 


85 


08 


20 


CE 


89 


85 


09 


8928- 


05 


08 


DO 


03 


4C 


DO 


03 


20 


8930- 


CE 


89 


85 


18 


20 


CE 


89 


85 


8938- 


19 


20 


22 


8A 


20 


80 


FE 


A9 


8940- 


6A 


AO 


92 


20 


3A 


DB 


A9 


01 


8948- 


85 


CE 


A9 


0B 


85 


24 


20 


80 


8950- 


FE 


A5 


CE 


85 


18 


A9 


00 


85 


8958- 


19 


20 


22 


8A 


A9 


73 


AO 


92 


8960- 


20 


3A 


DB 


20 


84 


FE 


E6 


24 


8968- 


A2 


00 


86 


ID 


86 


CF 


20 


E5 


8970- 


8E 


48 


E0 


07 


DO 


06 


A4 


CF 


8978- 


F0 


02 


A2 


0B 


8A 


29 


OF 


48 


8980- 


C9 


01 


F0 


04 


C9 


02 


DO 


OC 


8988- 


48 


8A 


4A 


4A 


4A 


4A 


69 


OE 


8990- 


20 


42 


8A 


68 


20 


42 


8A 


68 


8998- 


48 


C9 


07 


F0 


0B 


C9 


08 


FO 


89A0- 


07 


C9 


OC 


F0 


03 


20 


63 


8A 


89A8- 


68 


C9 


07 


B0 


0E 


20 


3A 


FF 


89B0- 


8D 


10 


CO 


AD 


00 


CO 


10 


FB 


89B8- 


8D 


10 


CO 


E6 


CE 


68 


DO 


8A 


89C0- 


4C 


IE 


89 


AO 


00 


Dl 


06 


DO 


89C8- 


04 


20 


D2 


89 


98 


60 


AO 


00 


89D0- 


Bl 


06 


E6 


06 


DO 


02 


E6 


07 


89D8- 


60 


38 


A5 


06 


E9 


01 


85 


06 


89E0- 


B0 


02 


C6 


07 


60 


A4 


ID 


A5 


89E8- 


06 


99 


00 


03 


C8 


A5 


07 


99 


89F0- 


00 


03 


C8 


84 


ID 


60 


C6 


ID 


89F8- 


C6 


ID 


60 


A4 


ID 


B9 


00 


03 


8A00- 


85 


06 


C8 


B9 


00 


03 


85 


07 


8A08- 


60 


A2 


10 


A9 


00 


06 


18 


26 


8A10- 


19 


2A 


C9 


OA 


90 


02 


E9 


OA 


8A18- 


26 


18 


26 


19 


2A 


CA 


DO 


F2 


8A20- 


6A 


60 


AO 


04 


20 


09 


8A 


69 


8A28- 


30 


99 


70 


92 


88 


10 


F5 


C8 


8A30- 


B9 


70 


92 


C9 


30 


DO 


OA 


A9 


8A38- 


20 


99 


70 


92 


C8 


CO 


04 


DO 


8A40- 


EF 


60 


OA 


AA 


E8 


BD 


B8 


93 


8A48- 


A8 


CA 


BD 


B8 


93 


20 


3A 


DB 


8A50- 


60 


09 


80 


C9 


AO 


BO 


09 


48 


8A58- 


84 


35 


38 


E9 


40 


4C 


F9 


FD 


8A60- 


4C 


F0 


FD 


AO 


00 


84 


CF 


84 


8A68- 


85 


A4 


85 


E6 


85 


Bl 


9B 


FO 


8A70- 


4F 


A6 


CF 


DO 


04 


C9 


3A 


FO 


8A78- 


47 


C9 


22 


DO 


08 


48 


A5 


CF 


8A80- 


49 


01 


85 


CF 


68 


C9 


B2 


DO 


8A88- 


04 


A2 


FF 


86 


CF 


C9 


80 


90 


8A90- 


29 


38 


E9 


7F 


AA 


A9 


20 


20 


8A98- 


51 


8A 


AO 


DO 


84 


9D 


AO 


CF 


8AA0- 


84 


9E 


AO 


FF 


CA 


FO 


07 


20 


8AA8- 


2C 


D7 


10 


FB 


30 


F6 


20 


2C 


8AB0- 


D7 


08 


20 


51 


8A 


28 


10 


F6 


8AB8- 


A9 


20 


20 


51 


8A 


4C 


69 


8A 


8AC0- 


20 


62 


FC 


60 


20 


CE 


89 


C9 


8AC8- 


00 


F0 


02 


C9 


3A 


60 


AO 


00 



Pom's n° 19 



8AD0- 


Bl 


06 


C9 


41 


90 


09 


C9 


5B 


8AD8- 


BO 


05 


20 


D2 


89 


98 


60 


C8 


8AE0- 


60 


AO 


00 


Bl 


06 


C9 


30 


90 


8AE8- 


OA 


C9 


3A 


BO 


06 


20 


D2 


89 


8AF0- 


AO 


00 


60 


C8 


60 


AO 


00 


84 


8AF8- 


EE 


84 


FB 


20 


El 


8A 


FO 


03 


8B00- 


A2 


Al 


60 


38 


E9 


30 


85 


FA 


8B08- 


20 


El 


8A 


FO 


03 


AO 


00 


60 


8B10- 


38 


E9 


30 


A8 


A5 


EE 


18 


69 


8B18- 


01 


C9 


05 


FO 


37 


85 


EE 


A5 


8B20- 


FA 


OA 


85 


FA 


85 


FC 


A5 


FB 


8B28- 


2A 


85 


FB 


06 


FC 


2A 


06 


FC 


8B30- 


2A 


BO 


21 


85 


FD 


A5 


FC 


65 


8B38- 


FA 


85 


FA 


A5 


FD 


65 


FB 


BO 


8B40- 


13 


85 


FB 


98 


65 


FA 


85 


FA 


8B48- 


A9 


00 


65 


FB 


BO 


06 


85 


FB 


8B50- 


C9 


FA 


90 


B4 


A2 


03 


60 


20 


8B58- 


F5 


8A 


DO 


3A 


A5 


67 


85 


FC 


8B60- 


A5 


68 


85 


FD 


AO 


00 


Bl 


FC 


8B68- 


85 


08 


C8 


Bl 


FC 


85 


09 


05 


8B70- 


08 


FO 


23 


C8 


Bl 


FC 


85 


18 


8B78- 


C8 


Bl 


FC 


85 


19 


A5 


08 


85 


8B80- 


FC 


A5 


09 


85 


FD 


A5 


19 


C5 


8B88- 


FB 


90 


D9 


DO 


09 


A5 


18 


C5 


8B90- 


FA 


90 


Dl 


DO 


01 


60 


A2 


03 


8B98- 


60 


20 


CE 


8A 


DO 


IE 


20 


CE 


8BA0- 


8A 


FO 


FB 


20 


El 


8A 


FO 


F6 


8BA8- 


AO 


00 


Bl 


06 


C9 


24 


90 


09 


8BB0- 


C9 


26 


BO 


05 


A8 


20 


D2 


89 


8BB8- 


60 


AO 


01 


60 


AO 


00 


60 


20 


8BC0- 


99 


8B 


CO 


00 


DO 


03 


A2 


22 


8BC8- 


60 


CO 


01 


FO 


02 


A2 


06 


60 


8BD0- 


20 


99 


8B 


CO 


01 


FO 


OD 


CO 


8BD8- 


25 


FO 


09 


CO 


00 


FO 


03 


A2 


8BE0- 


06 


60 


A2 


22 


60 


A9 


2C 


20 


8BE8- 


C3 


89 


FO 


02 


A2 


52 


60 


A9 


8BF0- 


3B 


20 


C3 


89 


FO 


02 


A2 


91 


8BF8- 


60 


A9 


DO 


20 


C3 


89 


FO 


02 


8C00- 


A2 


31 


60 


A9 


CI 


20 


C3 


89 


8C08- 


FO 


02 


A2 


41 


60 


A9 


C5 


20 


8C10- 


C3 


89 


FO 


02 


A2 


CI 


60 


A9 


8C18- 


AB 


20 


C3 


89 


FO 


09 


A9 


BO 


8C20- 


20 


C3 


89 


FO 


02 


A2 


Dl 


60 


8C28- 


A9 


28 


20 


C3 


89 


FO 


02 


A2 


8C30- 


72 


60 


A9 


29 


20 


C3 


89 


FO 


8C38- 


02 


A2 


82 


60 


A9 


22 


20 


C3 


8C40- 


89 


DO 


11 


20 


CE 


89 


C9 


00 


8C48- 


DO 


06 


20 


D9 


89 


A9 


01 


60 


8C50- 


C9 


22 


DO 


EF 


60 


A9 


00 


85 


8C58- 


EB 


85 


EC 


85 


ED 


A9 


CF 


20 


8C60- 


C3 


89 


DO 


05 


E6 


EB 


4C 


5D 


8C68- 


8C 


A9 


DO 


20 


C3 


89 


DO 


05 


8C70- 


E6 


EC 


4C 


5D 


8C 


A9 


Dl 


20 


8C78- 


C3 


89 


DO 


05 


E6 


ED 


4C 


5D 


8C80- 


8C 


A9 


01 


C5 


EB 


90 


19 


C5 


8C88- 


EC 


90 


15 


C5 


ED 


90 


11 


A9 


8C90- 


00 


18 


65 


EB 


65 


EC 


65 


ED 


8C98- 


C9 


01 


FO 


06 


C9 


02 


FO 


02 


8CA0- 


A9 


01 


60 


20 


46 


8E 


DO 


OB 


8CA8- 


20 


55 


8C 


FO 


03 


A2 


06 


60 


8CB0- 


20 


46 


8E 


60 


AO 


00 


Bl 


06 


Pom's 


n° 


19 















8CB8- 


C9 


C8 


90 


OA 


C9 


CF 


BO 


06 


8CC0- 


20 


D2 


89 


AO 


00 


60 


C8 


60 


8CC8- 


A9 


28 


20 


C3 


89 


FO 


04 


A9 


8CD0- 


00 


18 


60 


20 


3A 


8D 


DO 


13 


8CD8- 


A9 


29 


20 


C3 


89 


FO 


OC 


A9 


8CE0- 


2C 


20 


C3 


89 


DO 


07 


20 


3A 


8CE8- 


8D 


FO 


ED 


38 


60 


A2 


52 


60 


8CF0- 


20 


El 


8A 


FO 


FB 


A9 


2E 


20 


8CF8- 


C3 


89 


DO 


05 


20 


El 


8A 


FO 


8D00- 


FB 


A9 


45 


20 


C3 


89 


DO 


14 


8D08- 


A9 


C8 


20 


C3 


89 


FO 


05 


A9 


8D10- 


C9 


20 


C3 


89 


20 


El 


8A 


DO 


8D18- 


11 


20 


El 


8A 


20 


El 


8A 


FO 


8D20- 


09 


A9 


2E 


20 


C3 


89 


FO 


02 


8D28- 


98 


60 


C8 


60 


20 


28 


8C 


DO 


8D30- 


08 


20 


3A 


8D 


DO 


03 


20 


32 


8D38- 


8C 


60 


20 


CE 


89 


C9 


C8 


FO 


8D40- 


F9 


C9 


C9 


FO 


F5 


C9 


C6 


FO 


8D48- 


Fl 


C9 


28 


DO 


09 


20 


31 


8D 


8D50- 


DO 


03 


4C 


28 


8E 


60 


C9 


C2 


8D58- 


DO 


OE 


20 


BF 


8B 


DO 


08 


20 


8D60- 


2C 


8D 


DO 


03 


4C 


28 


8E 


60 


8D68- 


C9 


D7 


DO 


13 


20 


3A 


8D 


DO 


8D70- 


OD 


20 


E5 


8B 


DO 


08 


20 


31 


8D78- 


8D 


DO 


03 


4C 


28 


8E 


60 


C9 


8D80- 


E3 


FO 


08 


C9 


E5 


FO 


04 


C9 


8D88- 


E6 


DO 


09 


20 


38 


8E 


DO 


03 


8D90- 


4C 


28 


8E 


60 


C9 


D5 


DO 


OD 


8D98- 


20 


2C 


8D 


DO 


07 


A2 


OB 


86 


8DA0- 


CF 


4C 


28 


8E 


60 


C9 


D6 


FO 


8DA8- 


04 


C9 


D9 


DO 


16 


20 


E5 


89 


8DB0- 


20 


2C 


8D 


08 


20 


F6 


89 


28 


8DB8- 


FO 


6E 


20 


FB 


89 


20 


38 


8E 


8DC0- 


FO 


66 


60 


C9 


D2 


90 


OA 


C9 


8DC8- 


E3 


BO 


06 


20 


2C 


8D 


FO 


58 


8DD0- 


60 


C9 


2E 


DO 


08 


20 


FC 


8C 


8DD8- 


FO 


4E 


A2 


04 


60 


C9 


30 


90 


8DE0- 


OC 


C9 


3A 


BO 


08 


20 


FO 


8C 


8DE8- 


FO 


3E 


A2 


04 


60 


48 


20 


D9 


8DF0- 


89 


68 


C9 


22 


FO 


2C 


C9 


E4 


8DF8- 


FO 


28 


C9 


E7 


90 


04 


C9 


EB 


8E00- 


90 


20 


20 


E5 


89 


20 


99 


8B 


8E08- 


20 


F6 


89 


CO 


24 


DO 


06 


20 


8E10- 


FB 


89 


4C 


22 


8E 


CO 


00 


DO 


8E18- 


03 


A2 


62 


60 


20 


C8 


8C 


FO 


8E20- 


07 


60 


20 


A3 


8C 


FO 


01 


60 


8E28- 


20 


55 


8C 


FO 


05 


20 


B4 


8C 


8E30- 


DO 


03 


4C 


3A 


8D 


A9 


00 


60 


8E38- 


20 


28 


8C 


DO 


08 


20 


46 


8E 


8E40- 


DO 


03 


20 


32 


8C 


60 


20 


CE 


8E48- 


89 


C9 


C8 


FO 


F9 


C9 


E4 


FO 


8E50- 


04 


C9 


E7 


DO 


09 


20 


2C 


8D 


8E58- 


DO 


03 


4C 


D8 


8E 


60 


C9 


E8 


8E60- 


FO 


04 


C9 


E9 


DO 


15 


20 


28 


8E68- 


8C 


DO 


OF 


20 


46 


8E 


DO 


OA 


8E70- 


20 


E5 


8B 


DO 


05 


20 


31 


8D 


8E78- 


FO 


5E 


60 


C9 


EA 


DO 


26 


20 


8E80- 


28 


8C 


DO 


20 


20 


46 


8E 


DO 


8E88- 


IB 


20 


E5 


8B 


DO 


16 


20 


3A 


8E90- 


8D 


DO 


11 


A9 


29 


20 


C3 


89 


8E98- 


FO 


3E 


20 


E5 


8B 


DO 


05 


20 



8EA0- 


31 


8D 


FO 


34 


60 


C9 


22 


DO 


8EA8- 


OB 


20 


D9 


89 


20 


3C 


8C 


FO 


8EB0- 


27 


A2 


62 


60 


C9 


41 


90 


17 


8EB8- 


C9 


5B 


BO 


13 


20 


D9 


89 


20 


8EC0- 


99 


8B 


CO 


24 


DO 


06 


20 


C8 


8EC8- 


8C 


FO 


OD 


60 


A2 


06 


60 


20 


8ED0- 


D9 


89 


20 


38 


8E 


FO 


01 


60 


8ED8- 


A9 


C8 


20 


C3 


89 


DO 


03 


4C 


8EE0- 


46 


8E 


A9 


00 


60 


A5 


06 


85 


8EE8- 


9B 


A5 


07 


85 


9C 


20 


CE 


89 


8EF0- 


C9 


00 


FO 


04 


C9 


3A 


DO 


03 


8EF8- 


A2 


08 


60 


C9 


41 


90 


09 


C9 


8F00- 


5B 


BO 


05 


20 


D9 


89 


A9 


AA 


8F08- 


C9 


80 


90 


04 


C9 


CO 


90 


06 


8F10- 


20 


56 


92 


A2 


00 


60 


29 


7F 


8F18- 


OA 


AA 


BD 


F4 


93 


8D 


74 


94 


8F20- 


E8 


BD 


F4 


93 


8D 


75 


94 


6C 


8F28- 


74 


94 


A2 


07 


20 


C4 


8A 


FO 


8F30- 


05 


20 


56 


92 


A2 


12 


60 


20 


8F38- 


BF 


8B 


DO 


23 


20 


F9 


8B 


DO 


8F40- 


IE 


20 


3A 


8D 


DO 


19 


20 


03 


8F48- 


8C 


DO 


14 


20 


3A 


8D 


DO 


OF 


8F50- 


A9 


C7 


20 


C3 


89 


DO 


05 


20 


8F58- 


3A 


8D 


DO 


03 


4C 


2A 


8F 


4C 


8F60- 


56 


92 


20 


CE 


8A 


DO 


OD 


20 


8F68- 


D9 


89 


20 


BF 


8B 


DO 


08 


20 


8F70- 


E5 


8B 


FO 


F6 


4C 


2A 


8F 


4C 


8F78- 


56 


92 


A9 


22 


20 


C3 


89 


DO 


8F80- 


19 


20 


D9 


89 


20 


3C 


8C 


DO 


8F88- 


IE 


A9 


20 


20 


C3 


89 


FO 


F9 


8F90- 


20 


E5 


8B 


FO 


E5 


A2 


OD 


4C 


8F98- 


2C 


8F 


20 


C4 


8A 


DO 


DB 


20 


8FA0- 


D9 


89 


A2 


OD 


4C 


56 


92 


A2 


8FA8- 


12 


4C 


56 


92 


A9 


22 


20 


C3 


8FB0- 


89 


DO 


OD 


20 


D9 


89 


20 


3C 


8FB8- 


8C 


DO 


IE 


20 


EF 


8B 


DO 


16 


8FC0- 


20 


99 


8B 


CO 


00 


FO 


OD 


20 


8FC8- 


C8 


8C 


DO 


OA 


20 


E5 


8B 


FO 


8FD0- 


EF 


4C 


2A 


8F 


A2 


22 


4C 


56 


8FD8- 


92 


A2 


12 


4C 


56 


92 


20 


F5 


8FE0- 


8A 


DO 


OD 


20 


E5 


8B 


DO 


08 


8FE8- 


20 


F5 


8A 


DO 


03 


4C 


2A 


8F 


8FF0- 


4C 


56 


92 


20 


99 


8B 


CO 


00 


8FF8- 


FO 


OF 


20 


C8 


8C 


DO 


OC 


90 


9000- 


08 


20 


E5 


8B 


FO 


ED 


4C 


2A 


9008- 


8F 


A2 


Bl 


4C 


56 


92 


20 


99 


9010- 


8B 


CO 


00 


FO 


OD 


20 


C8 


8C 


9018- 


DO 


OA 


20 


E5 


8B 


FO 


EF 


4C 


9020- 


2A 


8F 


A2 


22 


4C 


56 


92 


A2 


9028- 


OA 


4C 


56 


92 


20 


3A 


8D 


DO 


9030- 


OD 


20 


E5 


8B 


DO 


08 


20 


3A 


9038- 


8D 


DO 


03 


4C 


2A 


8F 


4C 


56 


9040- 


92 


20 


3A 


8D 


DO 


17 


20 


E5 


9048- 


8B 


DO 


12 


20 


3A 


8D 


DO 


OD 


9050- 


20 


OD 


8C 


DO 


08 


20 


3A 


8D 


9058- 


DO 


03 


4C 


2A 


8F 


4C 


56 


92 


9060- 


20 


3A 


8D 


DO 


03 


4C 


2A 


8F 


9068- 


4C 


56 


92 


20 


03 


8C 


20 


3A 


9070- 


8D 


DO 


12 


20 


E5 


8B 


DO 


OD 


9078- 


20 


3A 


8D 


DO 


08 


20 


03 


8C 


9080- 


FO 


EC 


4C 


2A 


8F 


4C 


56 


92 



9088- 20 3A 8D DO 17 20 OD 8C 
9090- DO OF 20 3A 8D DO OD 20 
9098- E5 8B DO 08 20 3A 8D DO 
90A0- 03 4C 2A 8F 4C 56 92 A9 
90A8- AB 20 C3 89 DO 08 20 57 
9OB0- 8B DO 05 4C 2A 8F A2 Dl 
90B8- AC 56 92 20 DO 8B DO 03 
90C0- AC 2A 8F AC 56 92 20 99 
90C8- 8B CO 00 FO 28 CO 24 FO 
90D0- 12 20 C8 8C DO 21 20 F9 
90D8- 8B DO 1C 20 3A 8D DO 17 
90EO- 4C 2A 8F 20 C8 8C DO OF 
90E8- 20 F9 8B DO OA 20 46 8E 
90F0- DO 05 4C 2A 8F A2 22 4C 
90F8- 56 92 20 57 8B DO 03 4C 
9100- 2A 8F 4C 56 92 20 El 8A 
9108- DO OB 20 D9 89 20 57 8B 
9110- FO 03 4C 56 92 4C 2A 8F 
9118- 20 3A 8D DO 2C A9 AB 20 
9120- C3 89 DO 07 20 57 8B FO 
9128- ID DO IE A9 C4 20 C3 89 
9130- FO 04 A2 El DO 13 20 El 
9138- 8A FO 03 4C ED 8E 20 D9 
9140- 89 20 57 8B DO 03 4C 2A 
9148- 8F 4C 56 92 A2 09 4C 56 
9150- 92 A2 OC 4C 62 92 20 3A 
9158- 8D DO 12 20 17 8C DO OD 
9160- 20 57 8B DO 08 20 E5 8B 
9168- FO F6 4C 2A 8F 4C 56 92 
9170- 20 3A 8D DO 17 20 E5 8B 
9178- DO 12 20 3A 8D DO OD 20 
9180- E5 8B DO 05 20 3A 8D DO 
9188- 03 4C 2A 8F 4C 56 92 A9 
9190- C2 20 C3 89 DO 21 20 BF 
9198- 8B DO IE 20 28 8C DO 19 
91A0- 20 BF 8B DO 14 20 32 8C 
91A8- DO OF 20 F9 8B DO OA 20 
91B0- 3A 8D DO 05 4C 2A 8F A2 
91B8- Fl 4C 56 92 20 E5 8B FO 
91C0- FB 20 EF 8B FO F6 A9 CO 
91C8- 20 C3 89 FO 07 A9 C3 20 
91D0- C3 89 DO 07 20 31 8D DO 
91D8- 25 FO El 20 E5 89 20 3A 
91E0- 8D 08 20 F6 89 28 FO D4 
91E8- 20 FB 89 20 E5 89 20 46 
91F0- 8E 08 20 F6 89 28 FO C4 
91F8- 20 FB 89 4C 2A 8F 4C 56 
9200- 92 20 El 8A DO 08 20 D9 
9208- 89 20 F5 8A DO 1C 20 E5 
9210- 8B FO 07 A9 C9 20 C3 89 
9218- DO OD 20 El 8A DO 08 20 
9220- D9 89 20 F5 8A DO 03 4C 
9228- 2A 8F 4C 56 92 AO 07 84 
9230- IE 20 99 8B CO 00 DO 04 
9238- A2 22 DO 17 CO 24 FO 04 
9240- A9 OE 85 IE 20 C8 8C DO 
9248- OA 20 E5 8B FO E3 A6 IE 
9250- 4C 2C 8F 4C 56 92 20 CE 
9258- 89 C9 00 FO 04 C9 3A DO 
9260- F5 60 20 CE 89 C9 00 DO 
9268- F9 60 CC C9 C7 CE C5 AO 



9270- 


00 


00 


00 


00 


00 


00 


C9 


CE 


9278- 


D3 


D4 


D2 


D5 


C3 


D4 


C9 


CF 


9280- 


CE 


AO 


CE 


CF 


CE 


AO 


D2 


C5 


9288- 


C3 


CF 


CE 


CE 


D5 


C5 


OD 


00 


9290- 


AO 


CI 


D4 


D4 


C5 


CE 


C4 


D5 


9298- 


OD 


00 


AO 


CI 


D4 


D4 


C5 


CE 


92A0- 


C4 


D5 


C5 


OD 


00 


CD 


CI 


D5 


92A8- 


D6 


CI 


C9 


D3 


C5 


AO 


CI 


C4 


92B0- 


D2 


C5 


D3 


D3 


C5 


OD 


00 


CE 


92B8- 


CF 


CD 


C2 


D2 


C5 


AO 


C9 


CE 


92C0- 


C3 


CF 


D2 


D2 


C5 


C3 


D4 


OD 


92C8- 


00 


C5 


D8 


DO 


D2 


C5 


D3 


D3 


92D0- 


C9 


CF 


CE 


AO 


C9 


CE 


C3 


CF 


92D8- 


D2 


D2 


C5 


C3 


D4 


C5 


OD 


00 


92E0- 


C3 


CF 


CE 


C6 


D5 


D3 


C9 


CF 


92E8- 


CE 


AO 


C4 


C5 


AO 


D4 


D9 


DO 


92F0- 


C5 


OD 


00 


C3 


CF 


D2 


D2 


C5 


92F8-: 


C3 


D4 


OD 


00 


D6 


C9 


C4 


C5 


9300- 


OD 


00 


C9 


CE 


D3 


D4 


D2 


D5 


9308- 


C3 


D4 


C9 


CF 


CE 


AO 


A6 


OD 


9310- 


00 


C9 


CE 


D3 


D4 


D2 


D5 


C3 


9318- 


D4 


C9 


CF 


CE 


AO 


C3 


CI 


CC 


9320- 


CC 


OD 


00 


C6 


CF 


CE 


C3 


D4 


9328- 


C9 


CF 


CE 


AO 


D5 


D3 


D2 


OD 


9330- 


00 


C9 


CE 


D3 


D4 


D2 


D5 


C3 


9338- 


D4 


C9 


CF 


CE 


AO 


D2 


C5 


CD 


9340- 


OD 


00 


C9 


CE 


D4 


D2 


D5 


C3 


9348- 


D4 


C9 


CF 


CE 


AO 


C4 


CI 


D4 


9350- 


CI 


OD 


00 


C7 


C5 


D4 


AO 


CE 


9358- 


D5 


CD 


C5 


D2 


C9 


Dl 


D5 


C5 


9360- 


OD 


00 


C6 


C9 


CE 


AO 


C4 


A7 


9368- 


C9 


CE 


D3 


D4 


D2 


AE 


00 


D6 


9370- 


CI 


D2 


C9 


CI 


C2 


CC 


C5 


00 


9378- 


BD 


00 


D4 


CF 


00 


AC 


00 


C5 



9380- 


D8 


DO 


D2 


C5 


D3 


D3 


C9 


CF 


9388- 


CE 


00 


A8 


00 


A9 


00 


BB 


00 


9390- 


CE 


D5 


CD 


C5 


D2 


CF 


00 


D4 


9398- 


CI 


C2 


CC 


C5 


CI 


D5 


00 


CI 


93AC- 


D4 


00 


C7 


CF 


D4 


CF 


AO 


CF 


93A8- 


D5 


AO 


C7 


CF 


D3 


D5 


C2 


00 


93B0- 


D4 


C8 


C5 


CE 


00 


C6 


CE 


00 


93B8- 


76 


92 


90 


92 


9A 


92 


A5 


92 


93C0- 


B7 


92 


C9 


92 


EO 


92 


F3 


92 


93C8- 


FC 


92 


02 


93 


11 


93 


23 


93 


93D0- 


31 


93 


42 


93 


53 


93 


62 


93 


93D8- 


6F 


93 


78 


93 


7A 


93 


7D 


93 


93E0- 


7F 


93 


8A 


93 


8C 


93 


8E 


93 


93E8- 


90 


93 


97 


93 


9F 


93 


A2 


93 


93F0- 


BO 


93 


B5 


93 


2A 


8F 


37 


8F 


93F8- 


62 


8F 


7A 


8F 


AC 


8F 


DE 


8F 


9400- 


F3 


8F 


OE 


90 


2A 


8F 


2A 


8F 


9408- 


60 


90 


60 


90 


27 


90 


2C 


90 


9410- 


41 


90 


41 


90 


2A 


8F 


2A 


8F 


9418- 


60 


90 


6B 


90 


88 


90 


88 


90 


9420- 


60 


90 


2A 


8F 


60 


90 


60 


90 


9428- 


2A 


8F 


2A 


8F 


2A 


8F 


2A 


8F 


9430- 


2A 


8F 


2A 


8F 


60 


90 


2A 


8F 


9438- 


60 


90 


60 


90 


60 


90 


A7 


90 


9440- 


2A 


8F 


BB 


90 


BB 


90 


60 


90 


9448- 


C6 


90 


FA 


90 


05 


91 


18 


91 


9450- 


2A 


8F 


4C 


91 


FA 


90 


2A 


8F 


9458- 


51 


91 


2A 


8F 


56 


91 


70 


91 


9460- 


2A 


8F 


2A 


8F 


8F 


91 


2C 


90 


9468- 


BC 


91 


2A 


8F 


01 


92 


2A 


8F 


9470- 


2D 


92 


2A 


8F 


00 


00 


E4 


8B 


9478- 


31 


E2 


8B 


32 


CF 


8B 


31 


C9 



9480- 54 



Le Pacha 




© ][+, //©, //c 



» Listez vos programmes Basic en avant et en arriere. 
• Modifiez, inserez, effacez des caracteres en plein ecran 

sans relire les lignes. 
1 Recherchez toute chaine de caracteres. 
1 Choisissez vous-meme les codes de controle d^PE. 
' Modifiez EPE : le fichier source est sur la disquette. 

150,00 F TTC franco 
(bon de commande page 74) 





Pom's n° 19 



Un catalogue Multi-SED 

Alain Gogniat 



Ce programme, redige entierement 
en Applesoft sous DOS 3.3, permet 
d'afficher le contenu de toute dis- 
quette formatee sous DOS 3.3, 
ProDOS, p-UCSD ou CP/M 80, ceci 
sans necessairement savoir au depart 
quel est son systeme d'exploitation. 
Si la disquette n'est pas formatee, si 
elle est protegee, ou si le directory 
est absent (disquettes "fichiers" de 
PFS File par exemple), un message 
adequat est affiche. 

Pour le volume, on connaitra : 

• le type de SED 

• le nom ou "Pathname" (s'il s'agit 
de ProDOS ou p-UCSD), ou le 
numero (DOS 3.3) 

• la place libre en nombre de sec- 
teurs (DOS 3.3), en blocs 
(ProDOS et p-UCSD) ou en Koc- 
tets (CP/M). 

Pour chaque fichier on affichera : 

• la place qu'il occupe (memes 
unites que ci-dessus) 

• son nom 

• son type (text, bas, code, ...). 

Remarque : ce programme a ete 
ecrit avec un Apple lie muni d'une 
carte 80 colonnes. Si vous possedez 
un Apple 11+ (ou compatible) et une 
carte 80 colonnes, remplacez la ligne 
90 par CL80=2 et mettez a la ligne 
1920 le code necessaire a P activation 
de votre carte 80 colonnes. Si vous 
ne possedez pas de carte 80 colon- 
nes, remplacez seulement la ligne 90 
par CL80=3, mais dans ce cas Paffi- 
chage sur ecran sera partiellement 
tronque. 



Pourquoi ce programme 

J' utilise toutes sortes de programmes 
sous differents systemes d'exploita- 
tion, parce que je leur trouve ce petit 
quelque chose qui manque aux 
autres (comment se passer de DBase 
li ou Turbo-Pascal sous CP/M, d'Ap- 
pleworks sous ProDOS, de Pascal- 
UCSD pour de gros systemes de 
programmes, et des centaines d'utili- 
taires existant sous DOS 3.3). Etant 
par ailleurs tres desordonne\ je me 
trouve souvent dans l'embarras lors- 
que je sors une disquette d'un tiroir. 
Elle est mal etiquettee, je ne sais 
meme pas si elle est initialisee, et si 
elle Pest, sous quel format. 11 me faut 
alors charger Pun apres 1' autre cha- 
cun des systemes d'exploitation que 
j' utilise, demander le directory, jus- 
qu'a decouvrir enfin ce qu'elle 
contient, ou ce qu'elle ne contient 
pas. 

C'est ainsi que j'ai ete amene a redi- 
ger ce Catalogue Multi-SED. Pour 
permettre un vision plus synthetique, 
l'affichage se fait sur trois colonnes et 
dans Pordre alphabetique des noms 
des fichiers. II permet aussi d'impri- 
mer ce catalogue. Avec un petit ef- 
fort supplemental, il devrait etre 
possible de Paccoler a un "Catalogue 
general", comme celui paru dans 
Pom's 14, mais ca, je le laisse a 
votre soin. 

Plutot que de rarer avantage des par- 
ticularites de chaque SED, j'ai pris 
1' option de Puniformite de la presen- 
tation, c'est-a-dire de ne garder que 



les proprietes communes a chacun 
d'eux. Par exemple, j'ai renonce a 
prendre en compte la date de crea- 
tion, que Ton ne trouve pas sous 
DOS 3.3, ni sous CP/M. 

Structure des disquettes 

Pour comprendre le fonctionnement 
de ce programme, il faut savoir que 
depuis 1980, le formatage utilise par 
Apple sur toute disquette 5 pouces 
1/4, quel que soit le SED, comprend 
35 pistes concentriques, divisees cha- 
cune en 16 secteurs (un secteur per- 
met le stockage de Pequivalent de 
256 octets). La reconnaissance de 
ces secteurs depend non pas du 
SED, mais de la carte controleur des 
drives. C'est pourquoi il est possible 
de lire un secteur appartenant a une 
disquette formatee sous n'importe 
quel SED a partir d'un autre SED, 
en particulier du DOS 3.3 : c'est ce 
que realise ce programme (qui aurait 
pu etre ecrit tout aussi bien sous 
ProDOS, p-UCSD ou CP/M 80). II 
existe une routine en langage ma- 
chine sous DOS 3.3, nominee 
RWTS (Read Write Track Sector). 
Par une trentaine de POKE, on 
transmet les informations necessaires 
a cette routine, telles que numero du 
drive, piste, secteur, adresse en me- 
moire ou recopier ce secteur, .... puis 
un CALL fait le reste (voir le Manuel 
du DOS). 

Bien que physiquement, sur la dis- 
quette, on ne trouve jamais que 35 
pistes de 16 secteurs. Porganisation 
"soft" des secteurs differe d'un SED 



DOS 3.3 



ProDOS 



p-UCSD 



CP/M 80 



12 3 



32 33 34 



Nom du fichier (30 caracteres) 



lo hi 



1 



16 17 



20 21 



38 



Nom du fichier (15 caracteres) 



T 



Ion 



12 3 4 



18 19 



25 



ad alT 



Nom du fichier (15 caracteres) 



1 



9 10 11 



15 



31 



E Nom du fichier (8 car) 



T 



Format du catalogue selon les S.ED. 



i ■□■■■■iHHMHHHBHHBHHI^ 

Pom's n° 19 r 



a I'autre : ProDOS et p-UCSD les 
utilisenl par deux pour former un 
bloc, tandis que CP/M, d'une cer- 
taine maniere, les coupe en deux. 

Enfin, tout le monde sait que le SED 
a besoin d'une Table des matieres 
contenant la liste des fichiers presents 
sur la disquette, leur type, leur lon- 
gueur, leur adresse, ... L'ensembie 
de ces informations est regroupe 
dans le "directory ou catalog", pour 
lequel un certain nombre de secteurs 
sont reserves sur la disquette. C'est a 
ces secteurs qu'il faut s'interesser. 

• Pour DOS 3.3, il s'agit des sec- 
teurs 15 a de la piste 17 

• Pour ProDOS et p-UCSD : sec- 
teurs de 11 a 2 (blocs 2-5) de la 
piste 

• Pour CP/M : secteurs 0, 6, 12, 3, 
9, 15 de la piste 4. 

Structure du directory 

Caracteristiques du volume 

Sous ProDOS et p-UCSD, on trouve 
le nom du volume dans les premiers 
octets du premier secteur. Sous p- 
UCSD, on y trouve egalement le 
nombre de fichiers inscrits. 
Sous DOS 3.3, le numero du vo- 
lume doit etre recherche au debut de 
la VTOC, c'est-a-dire le secteur (en 
fait, il est aussi inscrit entre chaque 
secteur, ce qui permet a RWTS de 
lire ce numero a n'importe quel en- 
droit de la disquette). 

Caracteristiques des fichiers 

Les informations relatives a un fichier 
donne sont inscrites dans un certain 
ordre a I'interieur d'un champ d'une 
longueur variant de 26 (p-UCSD) a 
39 (ProDOS). La structure de ce 
champ, bien evidemment specifique 
a chaque SED, est la suivante (seule- 
ment les caracteristiques utilisees 
dans le programme) : 

voir schema page 17 
Legende 

E : Etat indique si le fichier est efface 
ou non, ainsi que pour ProDOS et p- 
UCSD, la longueur du nom du fi- 
chier. 1 octet. 

T : Type du fichier (text, basic, code, 
binaire,...), 1 octet sauf CP/M qui a 3 
octets. 

LoHi : Longueur du fichier sous 
DOS 3.3 et ProDOS. 2 octets. 
ADAF: Adresse Debut et Adresse 
Fin du fichier sous p-UCSD, la lon- 
gueur est obtenue par difference. 2 
octets. 

L : Longueur du fichier sous CP/M. 1 
octet. 

NOM : Nom du fichier, tel qu'il a ete 
fourni par 1'utilisateur lors de la sau- 
vegarde, 8 a 30 octets selon le SED. 

Ces champs sont inscrits sequentielle- 
ment sur le premier secteur reserve 



au "directory", eventuellement apres 
les caracteristiques du volume, puis 
sur le deuxieme secteur, le troisieme, 
et ainsi de suite. Le nombre maxi- 
mum de fichiers depend done du 
nombre de secteurs reserves et de la 
longueur du champ : il est de 105 
pour DOS 3.3, 51 pour ProDOS, 77 
pour p-UCSD et 48 pour CP/M. 

II est une possibilite interessante de 
ProDOS que j'ai longtemps ignoree, 
c'est celle de "sous-directory" : une 
excuse a ma paresse est que son uti- 
lisation est surtout justifiee avec un 
disque dur. Neanmoins, il serait assez 
facile d'inclure dans le programme la 
lecture de ces sous-directory (avis 
aux amateurs). 

Description du 
programme 

Une fois le type de SED identifie, le 
principe general est de recopier en 
memoire tous les secteurs reserves 
au "directory" a partir de l'adresse 
28416 ($6F00), d'ou le 
HIMEM:28416. On utilise pour cela 
la routine RWTS, dont les vecteurs 
sont POKEs aux adresse 768 et sui- 
vantes. 

C'est volontairement que j'urjlise une 
adresse relativement basse pour la 
recopie (28416). car cela permet, en 
cas de compilation, de declarer 
comme entieres toutes les variables 
utilisees ulterieurement pour aller 
PEEKer les informations (on reste 
en-dessous du fatal 32768). 

Menu 

En principe, il suffit de presser RE- 
TURN et le programme determine 
tout seul, comme un grand, le type 
de SED. Les routines d'identification 
ont ete testees sur des dizaines et des 
dizaines de disquettes, sans jamais les 
prendre en defaut, la possibilite de 
choix est done laissee a 1'utilisateur. 
Si celui-ci choisit un SED par un nu- 
mero de 1 a 4, une routine verifie si 
ce choix est le bon, si oui elle ren- 
voie aux lignes specifiques de celui- 
ci, sinon elle le determine. 

Verification 

Un seul secteur est lu. puis un certain 
nombre d'octets d'identification sont 
compares (lignes 320-410). Ces 
octets sont les suivants : 

• DOS 3.3 (sect.0, piste 17) valeur 
de 3-0-0 pour les octets de rang 
3-4-5 

• ProDOS (sect. 11, piste 0) valeur 
de 0-0-3 pour les octets de ranq 
0-1-2 

• p-UCSD (sect. 11, piste 0) valeur 
de 0-0-6 pour les octets de rang 
0-1-2 

• CP/M (sect.0, piste 4) les octets de 
rang 1-8 doivent correspondre au 
code de caracteres imprimables 



(ASCII 31-128) et les octets 13- 
14 doivent etre nuls. 

L'identification de CP/M est sans 
aucun doute la plus hasardeuse, mais 
je n'ai rien trouve d'autre. C'est d'ail- 
leurs pour cette raison qu'elle figure 
en derniere place : c'est presque une 
identification par elimination. 

Lecture et ecriture 

Une fois le SED identifie, tous les 
secteurs reserves pour le "directory" 
sont systematiquement recopies en 
memoire vive, bien que souvent les 
derniers soient vides (en DOS 3.3, le 
dernier secteur comprend les fichiers 
91 a 105). Cette operation est reali- 
see secteur par secteur en inirJalisant 
les vecteurs specifiques du SED, 
soient : la piste, le secteur et l'adresse 
memoire, puis en lancant RWTS. 
II faut noter que pour les trois pre- 
miers SED. les secteurs sont conti- 
gus : il suffit de donner le numero du 
premier (PS) et du dernier (DS), et 
de les placer dans une boucle (ligne 
470). Pour CP/M, ces secteurs ne 
sont pas contigus, et ne correspon- 
dent a aucune progression logique 
simple, d'ou I' utilisation de DATA 
(lignes 480 et 1200). 
A chaque lecture successive d'un 
secteur, on ajoute 256 (= longueur 
d'un secteur) a l'adresse de debut de 
memoire pour la recopie (PA, incre- 
ments au debut par DE). 

Recherche du type de SED 

On essaie successivement la routine 
de verification pour chaque SED. Si 
les octets compares correspondent a 
l'un d'eux. tout est bien, sinon on af- 
fiche un "SED INCONNU" et le pro- 
gramme recommence au debut. A 
noter que si la routine rencontre 
quelque chose d'inhabituel, par 
exemple qu'elle ne trouve pas la 
piste et le secteur, la valeur de 64 
($40) est retournee dans la table 
(ligne 440). II s'agit generalement 
d'un disque non formate ou protege 
par un SED special. 

Lecture des differents SED 

Les variables utilisees sont les suivan- 
tes: 

NV$ Nom ou numero du volume 
NF Nombre de fichiers 
UT Nombre d' unites (secteurs ou 
blocs) utilisees 

PA Nombre d'octets utilises pour un 
fichier 

LI Nombre d' unites libres 

TY Code du type de fichier 

DIV Nombre de fichiers maximum 

sur une unite (secteur ou bloc) 

NO$() Type des fichiers 

MAX Nombre maximum d' unites dis- 

ponibles 

LF Longueur du fichier 

N$ Nom du fichier 

N$() STR$(LF)+N$ + NO$() 



Pom's n° 19 



DOS 3.3 

Ligne 570: Lecture du numero du 
volume; celui-ci est retourne par 
RWTS, il n'y a qu'a le lire. 
Ligne 580: Initialisation des varia- 
bles, en particulier des types. A si- 
gnaler 1' existence de "typB" et 
"typA", qui normalement apparais- 
sent sous B(inaire) : MULTIPLAN 
par exemple sauve ses fichiers sous 
la forme typB. 

Ligne 590: Debut de la boucle, on 
lit les informations recopiees en me- 
moire en commencant a DE 
(28416). Un test est necessaire a 
chaque fois que Ton recommence un 
nouveau secteur, pour repositionner 
les octets decisifs, soit tous les 7 fi- 
chiers. 

Ligne 600 : Si les octets reserves au 
Nom du fichier sont nuls, on est ar- 
rive au bout du "directory". 
Ligne 610: Si le premier octet vaut 
255, le fichier est efface. 
Ligne 620 : Lecture de la longueur 
du fichier, et formatage pour l'ecri- 
ture. On ne prend ici qu'un seul 
octet, ce qui pourrait causer une er- 
reur si un fichier etait d'une longueur 
superieure a 255 ($FF) secteurs. En 
fait, la commande CATALOG du 
DOS ne fait pas mieux, car ou char- 
ger un fichier d'une telle longueur 
(plus de 65000 octets) ? 
Ligne 630: On additionne les sec- 
teurs utilises. 

Lignes 640-650: Lecture des carac- 
teres formant le Nom du fichier. Bien 
que le nom puisse comporter jusqu'a 
30 caracteres. on ne prend que les 
16 premiers (faut pas exagerer). 
Sous DOS 3.3, les octets composant 
le Nom du fichier ont leur bit de 
poids fort a un, il faut done soustraire 
la valeur 128 avant de convertir en 
caractere ASCII. Comme certains 
modifient ces octets pour agrementer 
leur "catalog" avec des CTRL-H ou 
des caracteres inverses, j'ai inclus un 
test pour remplacer tous ces caracte- 
res anormaux par un "?". 
Ligne 660 : Lecture du code du type 
du fichier. 

Ligne 670: On incremente de 1 le 
nombre de fichiers existants. 
Ligne 680: On incremente de 35 
(= longueur d'un champs consacre a 
un fichier), puis retour de la boucle. 
Ligne 690: Calcul du nombre de 
secteurs libres, puis on passe la main 
aux routines d'affichage. 

ProDOS 

La logique est la meme que ci- 
dessus, avec les differences suivan- 
tes : 

Ligne 710: Lecture du nom du vo- 
lume ( = Pathname), en commencant 
par sa longueur, exprimee sous un 
format un peu special, qui nous 
oblige a une petite gymnastique. 
Ligne 720 : Cette fois, e'est vraiment 



la lecture du Nom du volume. 
Ligne 800: Lorsqu'un nom de fi- 
chier est reecrit sur un ancien, seuls 
les nouveaux caracteres sont inscrits. 
Remplacer "FICHIERNUMEROl " 
PAR "FICHIER2" abourira, sur la 
disquette a "FICHIER2UMER01 ". 
Mais si vous faites un CATALOG, 
vous ne verrez que "FICHIER2". 
Ceci parce que 1' octet qui precede le 
nom donne la longueur de celui-ci, 
ce qui permet au CATALOG de n'af- 
ficher que le nombre de caracteres 
indiques : lors de la premiere sauve- 
garde, cette longueur etait de 14, elle 
n'est plus que que de 8 lors de la 
deuxieme. Cette valeur est contenue 
dans la variable LN. 
Ligne 830 : Si Ton rencontre un fi- 
chier de type "DIR", il peut y avoir 
des fichiers presents sur la disquette, 
mais absents du directory principal 
Des lors, on est oblige, pour connai- 
tre le nombre reel de blocs utilises, 
de lire le Volume Bit Map (equivalent 
de la VTOC du DOS 3.3). On place 
done un drapeau (SD=1) pour faire 
ce travail, seulement si necessaire, 
une fois la lecture du directory termi- 
nee. 

Lignes 850-900 : Le decryptage du 
Volume Bit Map (bloc 6) m'a pose 
quelques problemes, et pourtant e'est 
assez simple. En effet, si Ton sait que 
seuls les 35 premiers octets sont utili- 
ses (soit exactement le nombre de 
pistes), et qu'un octet comporte 8 
bits (soit tout aussi exactement le 
nombre de blocs par piste), la solu- 
tion est toute trouvee (mais que d'es- 
sais dans le vide avant d'arriver la !). 
Ainsi, par exemple. si le bit 3 de l'oc- 
tet est a 1, on en conclut que le 
bloc 3 de la piste est libre. En par- 
ticulier, si un octet vaut 255 ( = 1 +2 
+ 4 + 8 + 16 + 32 + 64 +128), la 
piste correspondante est libre. soit 8 
blocs. Si au contraire il vaut 0, alors 
toute la piste est allouee. Enfin, s'il 
est compris entre ces deux valeurs, 
un peu de gymnastique est neces- 
saire. 

Parmi les types de fichiers, ceux utili- 
ses par Appleworks (ADP.AWP et 
ASP) sont reconnus, mais il peut y 
en avoir d'autres, crees par des pro- 
giciels ProDOS que je ne connais 
pas, et qui ne seront pas reconnus: 
ils seront affiches par 

Pascal-UCSD 

L' organisation de p-UCSD est assez 
comparable a ProDOS : unites en 
blocs, indication de la longueur (LN) 
du nom du volume ou du fichier,... 
Ligne 930 : le nombre de fichiers 
(NF) presents sur la disquette est ins- 
crit au debut du premier bloc : qa fa- 
cilite bien la suite. 

Ligne 950: En lieu et place de la 
longueur, on connalt l'adresse du 
premier bloc et celle du dernier. Mais 
comme sous UCSD les fichiers sont 



sauves sur des blocs contigus (pas 
d'entrelacage), la difference nous 
donne la longueur effective. 

CP/M 80 

La particularite de CP/M est de n' ac- 
cepter que des fichiers d'une lon- 
gueur inferieure ou egale a 16 demi- 
secteurs. Si un fichier depasse cette 
valeur, il est ecrit sur le "directory" 
autant de fois qu'il comporte de, 
blocs ou de fraction de bloc de 16 
demi-secteurs. On trouve quand 
meme tout ce qu'il faut pour etablir 
un lien eventuel (si 
PEEK(PA+12)=0) entre de tels fi- 
chiers. C'est ce que realisent les tests 
des lignes 1140-1150, et la routine 
des lignes 1040-1050. Le resultat 
est que le nombre d' unites (demi- 
secteurs) est compte chaque fois, le 
nombre de fichiers une seule fois, et 
le Nom du fichier n'apparattra 
qu'une fois egalement. C'est un peu 
long, mais on y arrive. 
Ligne 1060 : Initialisation des varia- 
bles : remarquer qu'il n'y a pas de 
code pour le type de fichier, celui-ci 
etant inscrit en clair (ASCII) a la suite 
du nom du fichier. 

Ligne 1100 : Les unites sont conver- 
ties en Koctets, comme le fait CP/M; 
le decompte peut ne pas etre tout a 
fait exact, mais il correspond exacte- 
ment a la valeur retournee par la 
fonction CP/M "STAT". 

Tri et edition 

Ouf ! Le reste est plus classique et ne 
necessite pas d'explications particulie- 
res. Un point seulement, l'ordre d'af- 
fichage se fait de haut en bas sur la 
premiere colonne, puis de haut en 
bas sur la deuxieme, et la suite sur 
la troisieme. 

Bibliographic 

Pour comprendre la structure des dif- 
ferents SED, j'ai procede par taton- 
nement a 1'aide d'un editeur de sec- 
teurs. J'ai heureusement pu m'aider 
en consultant quelques ouvrages, tres 
riches pour DOS 3.3, beaucoup 
moins pour p-UCSD. Pour ProDOS, 
la documentation est encore maigre. 
Quant a CP/M, j'ai du tout chercher 
par essais et lecture. 

DOS 3.3 

Beneath Apple DOS, Don Worth & 
Pieter Leschner, Quality Software, 
1981 

P-UCSD 

Un catalogue general en Pascal, Mi- 
chel Crimont, Pom's 2 
Gestion de fichiers et de peripheri- 
ques pour Applell/Pascal, Herve 
Haut, Editions PSI, 1983 

ProDOS 

ProDOS Technical Reference Ma- 
nual, Apple Computer, Inc., 1983 
(assez sommaire sur bien des points). 



■ -- 1 I 

Pom's n° 19 



19 



Programme MULTISED.BAS 



50 REM A.GOGNIAT, FEV. 1985 
80 HIMEM: 28416 
90 CL80-3.REM 

NB: 

La valour da la variable 'CL80' dolt elre 
mlsa a : 

<1> al Apple //e+80 COL, 

<2> al aeulement 80 COL, 

<3> si seulement 40 COL. 

100 DIMN$(105),CO$(255) 

110 DEF FNMOD(A) = (A/DIV)- INT (A / DIV):ADR = 

768:DE = 28416 
120 FOR U AD TO AD + 29: READ Bl: POKE I.BI: NEXT : 

REM MISE EN PLACE DE RWTS 
130 DATA 

169,3,1 60,9,32,21 7,3,96,0,1 ,96,1 ,0, 1 7,1 5,26,3,0, 
111,0,0,1,0,0,96,1,0,1,239,216 



140 REM 



MENU 



150 TEXT :GOSUB 1970 

160 SD$(0) - "NE SAIT PAS":SD${1) - "DOS 3.3":SD$(2) 

- "PRODOS 1 .01":SD$(3) - "PASCAL UCSD":SD$(4) 

= "CPM 80":SD$(5) - "SORTIE" 
170 PRINT : INVERSE : VTAB (1): PRINT "CATALOGUE 

POUR 4 SYSTEMES D'EXPLOITATION": VTAB (2): 

PRINT" AFFICHAGE SUR 3 COLONNES ": 

NORMAL : POKE 34,3 
180 VTAB (7): PRINT "QUEL TYPE DE DOS?": PRINT : 

FOR I - TO 5: PRINT : HTAB (10): INVERSE : 

PRINT I;: NORMAL : PRINT " - ";SD$(I): NEXT 
1 90 VTAB (23): HTAB (10): PRINT " — >";: GET 

A$:CHOIX- VAL(A$):IFCHOIX>5THEN PRINT 

CHR$(7);: GOTO 190 
200 IF CHOIX - THEN CHOIX = 6 
21 ON CHOIX GOTO 220,240,260,280,1 870,500 
220 GOSUB 320: IF TY <> CH THEN 1 840 
230 PRINT " "SD$(CH);:PIST - 1 7:PS - 1 5:DS - 0: 

GOSUB 470: GOSUB 300: GOTO 570: REM DOS 

3.3 

240 GOSUB 340: IF TY <> CH THEN 1 840 

250 PRINT " "SD$(CH);:PIST - OPS - 1 1 :DS = 3: GOSUB 

470: GOSUB 300: GOTO 71 0: REM PRODOS 
260 GOSUB 360: IF TY < > CH THEN 1 840 
270 PRINT " "SD$(CH);:PIST - OPS - 1 1 :DS = 5: GOSUB 

470: GOSUB 300: GOTO 920: REM P-UCSD 
280 GOSUB 380: IF TY <> CH THEN 1 840 
290 PRINT " "SD$(CH);:PIST - 3: FOR I - 1 TO 6: READ 

SE(I): NEXT : GOSUB 480: GOSUB 300: GOTO 

1030: REM CPM 
300 HOME : VTAB (1 0): PRINT "S.E.D. RECONNU : 

";SD$(CH): VTAB (16): PRINT "NOMBRE DE 

FICHIERS : ";: RETURN 



310 REM VERIFICATION DU TYPE DE DOS 

320 PIST - 1 7:SE - 0: GOSUB 430: IF PEEK (DE + 3) = 3 



AND PEEK (DE + 4) - AND PEEK (DE + 5) - 
THEN TY-1: REM DOS 3.3 
330 RETURN 

340 PIST - 0:SE -11: GOSUB 430: IF PEEK (DE) - 
AND PEEK (DE + 1 ) - AND PEEK (DE + 2) - 3 
THEN TY- 2: REM PRODOS 

350 RETURN 

360 PIST = 0:SE -11: GOSUB 430: IF PEEK (DE) - 
AND PEEK (DE + 1 ) - AND PEEK (DE + 2) - 6 
THEN TY- 3: REM P-UCSD 

370 RETURN 

380 PIST - 3:SE - 0: GOSUB 430: IF PEEK (DE) < > 

AND PEEK (DE) < > 31 AND PEEK (DE) < > 229 

THEN 420: REM CPM 
390 FOR I - 1 TO 8: IF PEEK (DE + I) < 31 OR PEEK (DE 

+ I) > 128 THEN I -8: GOTO 420 
400 NEXT : FOR I - 13 TO 14: IF PEEK (DE + I) <> 

THEN 420 
410 NEXT :TY - 4 
420 RETURN 

430 POKE 781 ,PIST: POKE 782.SE: POKE 786, INT (DE 
/256): CALL AD: REM MISE EN PLACE DES 
VECTEURS RWTS SPECIFIQUES AU SED ET 
LANCEMENT DE RWTS 

440 IF PEEK (AD + 22) - 64 THEN 1 880: REM I/O 

ERREUR, DISQUE NON FORMATTE OU PROTEGE 

450 RETURN 



460 REM LECTURE ET ECRITURE EN 

MEMOIRE DES SECTEURS CONCERNES 

470 POKE AD + 13.PISTPA - DE: FOR SE = PS TO DS 

STEP -1: GOSUB 
490 : CALL AD PA - PA + 256: NEXT : RETURN : REM 

DOS 3.3.PRODOS ET PASCAL 
480 POKE AD + 13.PISTPA - DE: FOR I - 1 TO 6:SE - 

SE(I): GOSUB 
490 : CALL AD PA - PA + 256: NEXT : RETURN : REM 

CPM 

490 POKE AD + 14.SE: POKE AD + 1 8, INT (PA / 256): 
RETURN : REM RWTS. NUMERO SECTEUR A LIRE 
ET ADRESSE MEMOIRE POUR COPIE 



500 REM 



RECHERCHE DU TYPE DE DOS 



51 GOSUB 320: IF TY - 1 THEN CH - 1 : GOTO 230 

REM DOS 3.3 RECONNU 
520 GOSUB 340: IF TY - 2 THEN CH - 2: GOTO 250 

REM PRODOS RECONNU 
530 GOSUB 360: IF TY - 3 THEN CH = 3: GOTO 270 

REM P-UCSD RECONNU 
540 GOSUB 380: IF TY - 4 THEN CH - 4: GOTO 290 

REM CPM RECONNU 
550 VTAB (23): HTAB (1): PRINT "SYSTEME 

D'EXPLOITATION INCONNU": GOTO 1850 



560 REM 



DOS 3.3 



570 NV$ - STR$ ( PEEK (AD + 23)): PRINT : VTAB (13): 

PRINT "VOLUME : ";NV$: VTAB (1 6) 

580 NF - 0:UT - 0PA - DE: GOSUB 1230 



20 



Pom's n° 19 



590 DIV - 7: FOR K - 1 TO 105: IF FN MOD(K - 1) - 
THEN PA - DE + 1 1 + ( INT (K / 7) * 256): REM ON 
RECOMMENCE UN NOUVEAU SECTEUR 

600 IF PEEK (PA + 3) - THEN K - 1 05: GOTO 680: REM 
FIN DU CATALOG 

610 IF PEEK (PA) -255 THEN 680: REM FICHIER 
EFFACE 

620 LF - PEEK (PA + 33):N$ - STR$ (LF) + " ": FOR J - 

LEN (N$) TO 4:N$ - " " + N$: NEXT 
630 UT-UT + LF 

640 FOR J = PA + 3 TO PA + 1 8:CAR - PEEK (J): IF CAR 

- 136 OR CAR - 138 THEN CAR - 63 
650 N$ - N$ + CHR$ (CAR - 128 * (CAR > 127) + 96 * 

(CAR < 31 )): NEXT :N$ = N$ + " " 
660 TY- PEEK(PA+2):TY = TY-(128*(TY>127)):CO$ 

«CO$(TY) 

67C NF - NF + 1 : HTAB (22): PRINT NF;:N$(NF) - N$ + 
CO$ 

680 PA -PA + 35: NEXT 

690 LI - MAX - UT: GOTO 1 320 



700 REM 



PRODOS 



710 LN - PEEK (DE + 4):LN - 16 * ((LN / 16) - INT (LN / 
16)):NV$ = ~ 

720 FOR I - 1 TO LN:NV$ = NV$ + CHR$ ( PEEK (DE + 4 + 
I)): NEXT :NV$ - T + NV$: PRINT : VTAB (13): 
PRINT "VOLUME : ";NV$: VTAB (1 6) 

730 NF - 0:PA - DE + 4:UT - 0: GOSUB 1 240 

740 FORK-2TO51 

750 DIV-13: IF FN MOD(K - 1) = 0THEN PA = DE + 4 + 

((K - 1 )/ 1 3) * 51 2: REM ON RECOMMENCE UN 

NOUVEAU BLOC 
760 PA - PA + 39:LN - PEEK (PA): IF LN - THEN 840: 

REM FICHIER EFFACE 
770 IF PEEK (PA + 1 ) - THEN K = 51 : GOTO 840: REM 

FIN DE CATALOGUE 
780 NF - NF + 1 : HTAB (22): PRINT NF;:LF = 256 * PEEK 

(PA + 20) + PEEK (PA + 1 9):UT - UT + LF 
790 N$ - STR$ (LF) + " ": FOR J - LEN (N$) TO 4:N$ - " " 

+ N$: NEXT 
800 DIV - 16:LN = 16 * FN MOD(LN) 
810 FORJ-PA+1 TO PA + LN:N$ - N$ + CHR$ ( PEEK 

(J)): NEXT : FOR J - LN TO 15:N$ = N$ + " ": NEXT 
820 TY - PEEK (PA + 1 6):CO$ - CO$(TY): IF CO$ = 

THEN CO$ - 

830 N$(NF)-N$ + CO$:IFTY-15THENSD-1:REM 
ATTENTDN, CE FICHIER SOUS-DIRECTORY 
BOULEVERSE NOTRE CALCUL DU NOMBRE DE 
BLOCS LIBRE, --> PASSER PAR ROUTINE 850-890 

840 NEXT : IF SD - THEN LI - MAX - UT: GOT0 1320 

850 LI - 0:BMAP = DE + 1 + (8 * 256): FOR K = BMAP TO 
BMAP + 35 OC - PEEK (K): IF OC - THEN 900 

860 IF OC - 255 THEN LI - LI + 8: GOTO 900 

870 IC = 256:FORI-1T0 8:IC-IC/2:IFOC> - IC 
THEN OC - OC - ICll - LI + 1 

880 IF OC - THEN I - 8 

890 NEXT I 

900 NEXT K: GOTO 1320 



910 REM PASCAL UCSD 

920 LN - PEEK (DE + 6): FOR I - 1 TO LN:NV$ - NV$ + 



CHR$ ( PEEK (DE + 6 + 1)): NEXT : PRINT : VTAB 

(13): PRINT "VOLUME : ";NV$: VTAB (1 6) 

930 NF- PEEK(DE + 16) 
940 PA - DE:UT - 0: GOSUB 1260 
950 FOR K - 1 TO NF: HTAB (22): PRINT K;:PA - PA + 

26:LF - PEEK (PA + 2) - PEEK (PA):LF - LF + 256 ' 

(LF<0):UT-UT+LF 
960 N$ - STR$ (LF) + " ": FOR I - LEN (N$) TO 4:N$ - " " + 

N$: NEXT 

970 LN- PEEK(PA + 6):FORJ=PA + 7TOPA+6 + 

LN:N$ - N$ + CHR$ ( PEEK (J)): NEXT 
980 FOR J - LN TO 1 5:N$ - N$ + ' ": NEXT 
990 TY - PEEK(PA + 4):CO$-CO$(TY) 
1000 N$(K)-N$+CO$ 
1010 NEXT :LI- MAX -UT: GOTO 1320 



1020 REM 



CPM80 



1030 GOTO 1060 

1040 LF-LF+ VAL ( LEFT$ (N$(IN(L)),4)):LF$ - STR$ 
(LF): FOR J - LEN (LF$) TO 3:LF$ - " " + LF$: NEXT 

1050 N$(IN(L))-LF$ + "" + RIGHT$ (N$(IN(L)),19):L - II: 
GOTO 11 90 

1 060 NF - 0:PA - DE:UT - 0:ll = 0: GOSUB 1270 

1070 FORK-1TO48 

1080 IF PEEK(PA+1)-0OR PEEK (PA + 1 ) - 229 

THEN K - 48: GOTO 1 190: REM FIN DU CATALOG 

1090 IF PEEK (PA) -229 THEN 11 90: REM FICHIER 
EFFACE 

1100 DIV-8:LF- PEEK (PA+ 15):LF- INT(LF/8) + ( 

FN MOD(LF) > 0):UT - UT+ LF 
1110 N$- STR$(LF) + "":FORJ= LEN (N$) TO 4:N$ - " " 

+ N$: NEXT 

1120 FORJ-PA+1 TOPA+8:N$-N$+ CHR$ ( PEEK 

(J)):NEXT:N$-N$ + " " 
1130 FORJ-PA + 9TOPA+11:N$-N$+ CHR$ ( PEEK 

(J)): NEXT:N$-N$ + "" 
1140 IF LF < 1 6 AND PEEK (PA + 12) - THEN 1180 
1150 IF LF - 16 AND PEEK (PA + 12) - THEN II - II + 

1 :IN(II) - NF + 1 : GOTO 1 1 80: REM ATTENTION, 

CE FICHIER CONTINUE PLUS LOIN 
1 160 IF PEEK (PA + 12) > THEN FOR L - 1 TO H: IF 

RIGHTS (N$,19) - RIGHTS (N$(IN(L)),19) THEN 

1040: REM ATTENTION, CE FICHIER EST LA 

SUITE DUN FICHIER DEJA ENREGISTRE 
1170 NEXT 

1 1 80 NF = NF + 1 : HTAB (22): PRINT NF;:N$(NF) - N$ 
1 1 90 PA - PA + 32: NEXT K:LI - MAX - UT: GOTO 1320 
1200 DATA 0,6,12,3,9,15: REM SECTEURS 

RESERVES AU DIRECTORY 
1210 END 



1220 REM 



TYPES DE FICHIERS 



1230 MAX - 496:UN$ - "SECTEURS":CO$(0) - "TXT 
":CO$(1) - "INT ":CO$(2) - "BAS ":CO$(4) - "BIN 
":CO$(8) - "typS":CO$(1 6) - "REL ":CO$(32) - 
typA":CO$(64) - "typB": RETURN : REM DOS 3.3 

1 240 MAX - 273:UN$ - "BLOCKS":CO$(0) - "$00 

":CO$(1 ) - "$01 ":CO$(2) - "$02 ":CO$(3) - "$03 
":CO$(4) - TXT ":CO$(5) - "$05 ":CO$(6) - "BIN 
":CO$(7) - "$07 ":CO$(8) - "$08 ": REM CF. LIGNE 
SUIVANTE 



Pom's n° 19 



21 



1250 CO$(12) - "BAS ":CO$(15) - "DIR ":CO$(25) - "ADB 
":CO$(26) - "AWP ":CO$(27) - "ASP ":CO$(250) - 
"INT ":CO$(251) - "VAR ":CO$(252) - "BAS 
":CO$(253) - "VAR ":CO$(254) - "REL ":CO$(255) - 
"SYS": RETURN: REM PRODOS 

1260 MAX = 274:UN$ = "BLOCKS":CO$(1 ) = "BAD 
":CO$(2) - "CODE":CO$(3) - TEXT":CO$(4) - 
"INFO":CO$(5) - "DATA":CO$(6) = "GRAP:CO$(7) = 
"FOTO":CO$(8) = "? ": RETURN : REM P-UCSD 

1270 MAX - 138:UN$ - "K": RETURN : REM AVEC CPM, 
C-EST PLUS SIMPLE 

1280 REM 



1290 REM M1SE EN FORME ET EDITION 

1300 REM DU CATALOGUE 

1310 REM TRI DES F1CHIERS SHELL-METZNER 

1320 PRINT :VTAB (19): PRINT TRI ALPHABETIQUE "; 
1330 EC-NF 

1340 PRINT \";:EC« INT (EC/ 2): IF EC < 1 THEN 1440 
1350 J=1:K-NF-EC 
1360 I- J 
1370 PL-I + EC 

1380 IF MID$(N$(I),6,21)< MID$ (N$(PL),6,21) THEN 
1420 

1390 N$ - N$(I):N$(I) - N$(PL):N$(PL) - N$ 

1400 I- I- EC: IF l<1 THEN 1420 

1410 GOTO 1370 

1420 J = J + 1:IFJ>KTHEN 1340 

1430 GOTO 1360 



1440 REM 



EDITION SUR ECRAN 



1450 TEXT : HOME : ON CL80 GOSUB 1920,1920,1960 
1460 Tl$(1) - "SYSTEME D"EXPLOITATION: ":TI$(2) = 

TI$(1):TI$(3) = "S.E.D. :" 
1470 PRINT : INVERSE : PRINT TI$(CL80);SD$(CH);: IF 

CH < > 4 THEN PRINT " VOLUME : ";NV$ 
1480 NORMAL : IF CH - 4 THEN PRINT 
1490 PRINT NF;" FICHIERS";: PRINT SPC( 8);LI;" ";UN$;" 

LIBRES": PRINT 
1500 NL - INT (NF / 3):RESTE = NF - 3 * NL 
1510 VTAB (5):AE - 1 : ON CL80 GOSUB 

1 660,1 660,1 730:AE- 
1520 PRINT: PRINT 

1530 VTAB (23): HTAB (1): INPUT "PRESSEZ <RETURN> 

— >";A$ 

1540 HOME : ON CL80 GOSUB 1940.1960,1960: VTAB 
(10): PRINT "VOULE2-VOUS IMPRIMER CE 
CATALOGUE T: PRINT : PRINT : PRINT " (O/N) 
—->";: GET A$ 

1550 IF A$ - "o" OR A$ - "O" THEN PRINT CHR$ (13) + 
CHR$ (4)"PR#1": GOTO 1580 

1560 GOTO 1860 



1570 REM 



EDITION SUR IMPRIMANTE 



1580 ON CL GOSUB 1930,1960,1960 

1590 PRINT SD$(CH);: IF CH < > 4 THEN PRINT SPC( 

5)"VOLUME: ";NV$ 
1600 IF CH- 4 THEN PRINT 



1610 PRINT NF;" FICHIERS"; SPC( 8);LI;" ";UN$;" 

LIBRES": PRINT 
1620 GOSUB 1660 

1630 PRINT : PRINT : PRINT : PRINT CHR$ (4)"PR#3": 
1640 GOTO 1860 

1650 REM AFFICHAGE OU IMPRESSION SUR 3 
COLONNES: CARTE 80COL OU 
IMPRIMANTE 

1660 FORI-1TONL 

1670 IF I = 18 THEN IF AE THEN VTAB (23): PRINT 
"<RETURN> pour la suite — >";: GET A$: PRINT 
CHR$ (1 0): VTAB (21 ): CALL - 958 

1 680 PRINT N$(I);N$(I + NL + (RESTE > 0));N$(l + 2 * NL 
+ (RESTE>0) + (RESTE>1)) 

1690 NEXT : IF NF< 4 THEN 1720 

1700 IF RESTE > THEN PRINT N$(NL + 1); 

1 71 IF RESTE > 1 THEN PRINT N$(2 * NL + 2) 

1720 RETURN 

1730 REM AFFICHAGE SUR 3 COLONNES 
(SANS CARTE 80COL) 

1740 FOR I - 1 TO NL 

1 750 IF I - 1 8 THEN VTAB (23): PRINT "<RETURN> pour 
la suite —->";: GET A$: PRINT CHR$ (10): VTAB 
(21): CALL -958 

1760 N$ - N$(l): PRINT MID$ (N$,6,8) + "." + RIGHT$ 
(N$,4); 

1 770 N$ - N$(l + NL + (RESTE > 0)): PRINT MID$ 

(N$,5,8) + "." + RIGHTS (N$,4); 
1 780 N$ - N$(l + 2 * NL + (RESTE > 0) + (RESTE > 1 )): 

PRINT MID$(N$,5,8) + "." + RIGHTS (N$,4) 
1790 NEXT: IF NF< 4 THEN 1820 
1800 IF RESTE > THEN N$«N$(NL+1): PRINT MID$ 

(N$,6,8) + "." + RIGHTS (N$,4); 
1810 IF RESTE >1 THEN N$ = N$(2*NL +2): PRINT 

MID$(N$,5,8) + "." + RIGHTS (N$,4) 
1820 RETURN 

1830 REM ROUTINE DE FIN OU DE RECOM- 
MENCEMENT 

1840 PRINT : VTAB (22): PRINT CHR$ (7)"ERREUR! IL 

NE S'AGIT PAS DE ";SD$(CH) 
1 850 PRINT "PRESSEZ UNE TOUCHE — >";: GET A$ 
1 860 GOSUB 1 930: RUN 1 50: REM ON RECOMMENCE 

UN NOUVEAU CATALOGUE 
1870 PRINT CHR$ (21): HOME: PRINT "POUR 

RECOMMENCER, TAPER "RUN"*: END 
1880 PRINT : VTAB (22): PRINT CHR$ (7);"l/0 ERR: 

DISQUE NON INIT. OU PROTEGE": GOTO 1850 
1920 PRINT CHR$(13)+ CHR$ (4)"PR#3": RETURN : 

REM ACTIVATION DE LA CARTE 
1930 PRINT CHR$ (21): RETURN : REM 

DESACTIVATION DE LA CARTE 
1940 PRINT CHR$ (17): RETURN : REM 40 COLONNES 
1950 PRINT CHR$ (18): RETURN: REM 80 COLONNES 
1960 RETURN: REM REMPLACE L 1930-1950 SI 

L'APPLE NEST PAS UN ME OU SIL NY A PAS DE 

CARTE 80 COL 
1970 CALL - 936: RETURN : REM PLACE L 1920 S'lL 

NY A PAS DE CARTE 80 COL 



22 



Pom's n° 19 



Ce programme a ete inspire par I' ar- 
ticle de Xuan Tung Bui paru dans le 
num£ro de Septembre - Oclobre 
1982 de Micro-Systemes, auquel le 
lecteur pourra se reporter s'il desire 
avoir une description plus precise de 
la methode PERT. 

Cette methode fut creee il y a quel- 
ques annees pour Petablissement de 
plannings de travaux de construc- 
tions. PERT signifie Program Evalua- 
tion and Rewiew Technique. Asso- 
ciee a la methode du chemin 
critique, cette methode est couram- 
ment employee pour resoudre les 
problemes d'ordonnancement et 
d'organisation. 

L'analyse du chemin critique per- 
met : 

• de detecter les taches critiques, 
e'est-a-dire celles dont Pexecution 
ne peut etre ni retardee, ni ralentie 
sans que la duree totale des tra- 
vaux ne soit prolongee. 

• de determiner le temps optimal 
necessaire aux travaux. 

• d'etablir un ordonnancement. 

Afin d'uriliser ce programme au 
mieux, il est conseille de preparer un 
tableau comprenant la liste des 
taches relatives aux travaux a effec- 
tuer avec en face de chaque tache : 

• le temps de realisation le plus pro- 
bable 

• la duree minimale 

• la duree maximale. 

Apres la constitution du tableau, il 
faudra dessiner sous forme de gra- 
phe, P ensemble des activites de ma- 
niere ordonnee. 

Ce graphe se composera de noeuds, 
e'est-a-dire des cercles numerates re- 
presentant les evenements. Chaque 
cercle sera relie a un autre cercle par 
un arc, reprSsentant les activites ou 
taches. 

Chaque noeud doit porter un nu- 
mero different; le point d'arrivee 
d'un arc doit correspondre a un nu- 
mero de noeud superieur a celui du 
noeud de depart. 

Le chemin defini est done une suite 
continue d'arcs dont Pextremite ter- 
minate de Pun est Pextremite initiale 
de P autre. II faut s' assurer que tous 
les chemins du graphe ne sont pas 
interrompus. Si un chemin ne peut 
aboutir, il est indispensable de creer 
un arc fictif de valeur nulle liant les 
extremites interrompues. 

Le planning obtenu sur Pimprimante 

affichera (voir schema) : 

— en haut : les numeros de noeuds. 



La methode PERT 

Serge Cattan 



- en ordonnee : les activites, 

- en abcisse : la duree. 

Mode d'emploi 

Les possesseurs d' Apple He avec la 
carte Chat Mauve doivent copier les 
programmes PURPLESOFT* et 
PURPLESOFT sur la disquette 
contenant PERT. Avant toute utilisa- 
tion de PERT, il faut faire BRUN 
PURPLESOFT. 

Signalons que PURPLESOFT ne 
fonctionne pas sur un Apple lie. 

Pour lancer PERT, faire RUN PERT 
si Pon a un Apple He en 80 colonnes 
ou un //c, sinon faire RUN PERT40. 
On obtient alors le menu suivant : 

- Chemin critique > 

- PERT > permet d'entrer un gra- 
phe avant de le traiter selon Pune ou 
Paurre methode; le programme de- 



mande si Pon veut imprimer les re- 
sultats : il utilise des codes pour 
EPSON RX80; ceux-ci sont a modi- 
fier si vous avez une autre impri- 
mante. 

— Lecture d'un graphe existant : un 
exemple est fourni sur la disquette 
d'accompagnement (fichiers MAI- 
SON et MAISON.RESULT); voir 
P exemple en encadre. 

- Impression du planning : appelle 
le programme PERT. GRAPH qui ne 
fonctionne que sur Apple He avec la 
carte Chat Mauve; le hardcopy est 
prevu pour imprimante EPSON 
RX80, a changer si vous avez une 
autre imprimante. 

- Modification d'un graphe existant, 

— Mode d'emploi : appelle le pro- 
gramme PERT. TEXT, qui lance a 
son tour PERT. DEMO; ce demier ne 
fonctionne que sur Apple He avec la 
carte Chat Mauve. 



Taches 



Temps de realisation des travaux 
probable optimiste pessimiste 



a 


Etablissement du plan 


15 


9 


21 


b 


Obtention du permis de construire 


30 


30 


45 


c 


Signature des conlrats 


5 


3 


10 


d 


Transport du materiel au chantier 


2 


2 


3 


e 


Installation eau et 61ectricite 


3 


3 


3 


f 


Fondations 


10 


8 


15 


g 


Transport de terre pour le jardin 


2 


2 


13 


h 


Murs 


10 


8 


12 


i 


Toit 


12 


7 


14 


J 


Decoration 


10 


8 


15 


k 


Decoration interieure 


10 


9 


13 



Liste des travaux 



ivinement 


au plus tdt 


au plus lard 


icart 


1 


0,00 


0,00 


0,00 


2 


15,29 


15,29 


0,00 


3 


49,45 


49,45 


0,00 


4 


55,74 


55,74 


0,00 


6 


58,74 


58,74 


0,00 


5 


58,74 


58,74 


0,00 


7 


58,74 


81,11 


22,38 


8 


69,42 


69,42 


0,00 


9 


79,26 


79,26 


0,00 


10 


90,64 


90,64 


0,00 


11 


100,41 


100,41 


0,00 



Table 



Pom's n° 19 



23 



Exemple 

La construction d'une 
maison 

voir schema 1 

Reseau de construction 

Les arcs allant du noeud 5 au noeud 

6 et du noeud 5 au noeud 7 sont 
des arcs fictifs de longueur nulle. 

Listc des travaux 

voir encadre 

Traitement du chemin 
critique : 

1- Classement ordonne des evene- 
ments (noeuds) : 

1 --> 2 --> 3 --> 4 --> 6 -->5 --> 

7 -> 8 -> 9 -> 10 --> 11 --> fin 

2- Evenements : 
voir table 

3— Activites et durees correspondan 
tes : 

voir encadre 

4— Ordre du chemin critique : 

1 -> 2 --> 3 --> 4 -> 5 ~>6 --> 

8 --> 9 --> 10 -> 11 -> fin 

avec une longueur estimee de : 
100.414677 



1—2^-3^/^5 / X 8^9-^10^ 

\ A / 



11 Fin 



/ 



Schema 1 : Roseau de construction 



Activites 










Temps 
aaendu 


Temps 
maximum 




1 


de 


1 


a 


2 


15,29 


15,29 


*** arc critique *** 


2 


de 


2 


a 


3 


34,17 


34,17 


*** arc critique *** 


3 


de 


3 


a 


4 


6,28 


6,28 


*** arc critique *** 


4 


de 


4 


ft 


6 


2,29 


3,00 




5 


de 


4 


a 


5 


3,00 


3,00 


*** arc critique *** 


6 


de 


6 


a 


8 


10,69 


10,69 


*** arc critique *** 


7 


de 


4 


a 


7 


2,25 


25,38 




8 


de 


8 


a 


9 


9,83 


9,83 


*** arc critique *** 


9 


de 


9 


a 


10 


11,39 


11,39 


*** arc critique *** 


10 


de 


7 


ft 


10 


9,53 


31,91 




11 


de 


10 


ft 


11 


9,77 


9,77 


*** arc critique *** 


12 


de 


5 


ft 


6 


0,00 


0,00 


*** arc critique *** 


13 


de 


5 


a 


7 


0,00 


22,38 





Activitis et duries correspondantes 



Programme 

PERT.GRAPH 



40 & TEXT 1 
50 PRINT 

60 INVERSE : PRINT 

70 HTAB 10: PRINT "GRAPHIQUE 

P.E.R.T": NORMAL 
80 HTAB 4: VTAB 23: PRINT "TOUCHE 'R' 

POUR RETOUR AU MENU" 
90 ONERR GOTO 940 
100 REM RECUP. RESULTATS 
110 D$- CHR$(4) 

120 HTAB 5: VTAB 15: FLASH : PRINT 
"PREPARE2 L'IMPRIMANTE S.V.P." 

130 NORMAL : HTAB 1 : VTAB 8 

140 INPUT -NOM DU FICHIER ? ";NE$ 

150 IF NE$ - ~ THEN 130 

160 IF NE$ - "R- OR NE$ - V THEN 860 

170 REM RECUP. RESULTATS 

180 PRINT D$;"OPEN';NE$;".RESULT 

190 PRINT D$:"READ";NE$;".RESULT" 

200 INPUT A: INPUT N1 

210 DIM N(N1).E(N1).L(N1).P(A),T(A), 
DD(A).S(A),L$(A) 

220 FOR I - 1 TO N1 

230 INPUT N(l): INPUT E(l): INPUT L(l) 

240 NEXT 

250 FOR I - 1 TO A 

260 INPUT P(l): INPUT S(l): INPUT T(l): 
INPUT DD(I) 

270 INPUT L$(l) 

280 NEXT 

290 INPUT N4 



300 DIMCP(N4) 
310 FORI-1TON4 
320 INPUT CP(I) 
330 NEXT 

340 PRINT D$;-CLOSE" 
350 REM GRAPHE PERT 
360 & GR 9 

370 4BACK-0:& COLOR- 15 
380 K - INT(220/E(N1)) 
390 FOR I - 1 TO N1 

400 IF E(l) - E(l - 1) AND I > 1 THEN L - 10 
410 & POSK*E(l),182-L 
420 L -0 

430 & PRINT N(l); 

440 & POSK ' E(l),0 

450 NEXT 

460 FOR I - 1 TO N1 

470 & PLOT K • E(l),10 TO K • E(l),180 

480 NEXT 

490 & PLOT 0,10 TO 560,10 

500 REM — AFFICHE ABSISSSE 

510 FOR I - TO L(N1) STEP 10: & POS K * 

l.0:& PRINT I;: & PLOT K ' 1 ,6 TO K ' 

1.14: NEXT 
520 FOR I -0TOL(N1) 
530 & PLOT K * l,8 TO K * 1,12 
540 NEXT 

550 REM — DESSIN TACHES 

560 K1 - INT (152 /A) 
570 FOR I - 1 TO A 
580 GOSUB 900 
590X-X'K:Y-175-K1 'I 
600 & PLOT X,Y TO X + K • T(I),Y 
610 IF INT(T(l)"100-f 5)/100> - INT 
(DD(I) • 100 + .5) / 100 THEN Y = Y - 1 
620 & PLOT X,Y TO X + K ' T(l) Y 
630 NEXT I 

640 REM -DESSIN POINTILLES 

650 FOR I - 1 TO A 



660 FOR J - 1 TO N4 
670 IF S(l) = CP(J) AND T(l) < DD(I) THEN 
690 

680 GOTO 740 

690 GOSUB 900X - K * X + K • T(l) 
700 FOR JJ - X TO X + K * (DD(I) - T(l)) 

STEP 3 
710 S PLOTJJ.175-K1 'I 
720 NEXTJJ 
730 GOTO 750 
740 NEXT J 
750 NEXT I 
760 PRINT D$;"PR#1" 
770 PRINT CHR$(9);"GE" 
780 & GR 9 
790 PRINT CHR$(12) 
800 FOR 1-1 TO A 
810 GOSUB 900 
820Y-175-K1 "I 
830 & POS 1.Y. & PRINT L$(l) 
840 NEXT 

850 PRINT CHR$(9);-GE" 
860 S TEXT 5 

870 PRINT D$:-PR#0-: PRINT D$;"RUN 
PERT" 

880 INPUT A$: PRINT ASC (A$) 
890 REM —RECHERCHE ABSISS 
900 FOR J - 1 TO N1 

910 IF N(J) = P(l) THEN X = E(J): GOTO 930 
920 NEXT J 
930 RETURN 

940 REM TRAITEMENT ERREUR 

950 IF PEEK (222) = 5 THEN VTAB 10: 

FLASH : PRINT "FICHIER INEXISTANT": 

NORMAL : GOTO 970 
960 VTAB 10: FLASH : PRINT "< ERREUR 

>■: NORMAL 
970 FOR IT - 1 TO 1500: NEXT : RUN 



Pom's n° 19 



Programme PERT 

60 ONERR GOTO 2950 

70 T$ = ■ 



80 D$ - CHR$ (4): PRINT D$;"PR#3": PRINT 
90 HOME 

100 POKE 36,33: INVERSE : PRINT 
"METHODE P.E.R.T.";: NORMAL : 
VTAB8 

110 PRINT 

120 PRINT "CHEMIN CRITIQUE 
->C" 

130 PRINT "P.E.R.T. -> P" 

140 PRINT TECTURE GRAPHE EXIST ANT 
->L" 

150 PRINT IMPRESSION DU PLANNING 

->r 

160 PRINT "MODIF. GRAPHE EXIST ANT 
->M" 

170 PRINT "MODE DEMPLCH 
-> E" 

180 PRINT "RETOUR AU BASIC 
-> R" 

190 POKE 36,33: VTAB 18: INPUT "VOTRE 
CHOIX ? "OS 

200 IFQ$< >"C"ANDO$< >"P"ANDQ$< 
>T"ANDQ$< >-M-ANDQ$< >"E" 
ANDQ$< >TANDQ$< > "R" AND Q$ 

< >"c"ANDQ$< >"p"ANDQ$< >T 
ANDQ$< >Tn"ANDO$< > "e" AND Q$ 

< > 1" AND Q$ < >VTHEN90 

210 IFQ$-"M"ORQ$-"m"THEN GOSUB 

3000: GOTO 1740 
220 IFQ$ = "E"ORQ$.-e-THEN PRINT 

D$;"RUN PERT.TEXT" 
230 IF Q$ - T OR Q$ - 1" THEN PRINT 

D$:"RUN PERT .GRAPH" 
240 IF Q$ - -R- OR Q$ - "r" THEN END 
250 VTAB 22: PRINT : INPUT 

"VOULEZ-VOUS IMPRIMER LES 

RESULTATS ? ";R$ 
260 IFQ$< > V AND Q$ < > TTHEN 290 
270 Q - 1 : HOME : INPUT "NOM DU 

FICHIER ? ":NE$ 
280 GOSUB 2820: GOTO 430 
290 HOME : POKE 36,33: INVERSE : PRINT 

■METHODE P.E.R.T. - :: NORMAL : 

VTAB 8 

300 PRINT : INPUT "NOMBRES 

DACTIVITES (ARC) ? ";A$ 
310 A - VAL (A$): IF A < 2 THEN PRINT" 

UN CHIFFRE > 1 S.V.P.": GOTO 300 
320 GOSUB 340: GOTO 390 
330 REM 

340 IF ME - 1 THEN RETURN 

350 DIM N(A + 1),E(A + 1),L(A + 1),LAG(A + 

1),L$(A + 1) 
360 DIM 

T1(A),T2(A).T3(A),T(A),SD(A),DD<A) 
370 DIM CP(A + 1),KL(A + 1),P(A + 1),S(A + 

1),R(A+1) 
380 ME - 1: RETURN 
390 PRINT : FOR I = 1 TO A 
400 PRINT : PRINT : INVERSE : PRINT 

•ACTIVITE M;":-: NORMAL 
410 GOSUB 2500 
420 NEXT I 

430 PRINT : IF LEFTS (R$,1) - "O" OR 
LEFTS (R$,1 ) - -o" THEN PRINT 
D$;"PR#1" 

440 REM CLASS EM ENT EVENEMENT 

450 N1 -0 

460 FOR 1-1 TO A 

470 FORJ-1TON1 

480 IF P(l) - N(J) GOTO 520 

490 NEXT J 



500 N1 -N1 +1 

510 N(N1) = P(l) 

520 FOR J = 1 TO N1 

530 IFS(l) = N(J)GOTO570 

540 NEXT J 

550 N1 - N1 + 1 

560 N(N1) = S(I) 

570 NEXT I 

580 IF Q$ - "C" OR Q$ - V THEN 660 

590 : 

600 FOR I = 1 TO A 

610 T(l) = (T2(l) + (4 ' T1(l)) + T3<l)) /6 

620 SD(l) = (T3(l)-T2(l))/6 

630 KI-2" RND(1)-1 

640 T(l) = T(l) + (SD(I) ' Kl) 

650 NEXT I 

660 PRINT : PRINT 

670 REM 

680 CL - 1 : GOSUB 700: GOTO 910 

690 REM — - PROG DE CLASSEMENT 

700 FOR 1-1 TO A 

710 R(l)-I 

720 NEXT I 

730 A1 - A 

740 A1 - A1 - 1 

750 A2-0 

760 FOR I - 1 TO A1 

770 K-R(l) 

780 K1 -R(l + 1) 

790 IF CL - 1 THEN 820 

800 IFS(K)> = S(K1) THEN 870 

810 GOTO 830 

820 IFP(K)< -P(K1) THEN 870 

830 R1 - R(l) 

840 R(l)-R(l + 1) 

850 R(U 1)-R1 

860 A2-1 

870 NEXT I 

880 IF A2 - 1 THEN 740 
890 RETURN 

900 : 

910 FORI-1TOA 
920 K = R(l) 
930 A3 = P(K) 
940 GOSUB 1750 
950 11 - K3 
960 K - R(l) 
970 A3-S(K) 
980 GOSUB 1750 
990 I2-K3 
1000 K-R(l) 
1010 M-E(I1) + T(K) 
1020 IFE(I2)> -M THEN 1050 
1030 K -R(l) 
1040 E(I2)-E(I1) + T(K) 
1050 NEXT I 
1060 REM 

1070 CL - 0: GOSUB 700 
1080 : 

1090 FOR 1-1 TO A 

1100 K-R(l) 

1110 A3-S(K) 

1120 GOSUB 1750 

1130 11 - K3 

1140 K - R(l) 

1150 A3 - P(K) 

1160 GOSUB 1750 

1170 I2-K3 

1180 K ■ R(l) 

1190 M-L(I1) + T(K) 

1200 IF L(I2) > - M THEN 1230 

1210 K - R(l) 

1220 L(I2)-L(I1) + T(K) 

1230 NEXT I 

1240 K-R(1) 

1250 A3 - S(K) 

1260 GOSUB 1750 

1270 C - E(K3) 



1280 FOR I - 1 TO N1 
1290 L(l)-C-L(l) 
1300 NEXT I 

1310 REM CALCUL INTERVALLE TEMPS 
.1320 FOR 1-1 TON1 
1330 LAG(I) - L(l) - E(l) 
1340 NEXT I 
1350 REM 

1360 FORI-1TON1 
1370 R(l) - I 
1380 NEXT 

1390 FORI-1TON1-1:FORJ-l + 1TON1 

-1 

1400 IFE(I)< - E(J) THEN 1430 

1410 TA-E(I):E(I)-E(J):E(J)-TA 

1420 TA - R(I):R(I) - R(J):R(J) - TA 

1430 NEXTJ.I 

1440 REM RESULTATS 

1450 GOSUB 1850 

1460 REM CEHMIN CRITIQUE 

1470 KK-1 

1480 FOR 1.1 TO N1 

1490 IF ABS(LAG(I))> -0.01 THEN 1550 

1500 LAG(I) - 

1510 CP(KK)-N(I) 

1520 KL(KK) - N(l) 

1530 N4-KK 

1540 KK-KK + 1 

1550 NEXT I 

1560 N5-N4- 1 

1570 FOR 1 = 1 TON5 

1580 11 -1 + 1 

1590 FOR J - 11 TON4 

1600 IF KL(I)>KL(J) THEN 1630 

1610 IF KL(I) < KL(J) THEN 1690 

1620 IFCP(I)< -CP(J) THEN 1690 

1630 IT-KL(I) 

1640 JT-CP(I) 

1650 KL(I)-KL(J) 

1660 CP(I) - CP(J) 

1670 KL(J)-IT 

1680 CP(J)-JT 

1690 NEXTJ.I 

1700 GOSUB 2070 

1710 IF LEFTS (R$,1)< >"0"AND LEFTS 
(R$,1)< >"o"THEN VTAB 22: GOSUB 
2690 

1720 IF Q - 1 OR Q$ = "L" OR Q$ - Y THEN 
1740 

1730 GOSUB 2710 

1740 PRINT D$;"PR#0": RUN 

1750 REM 

1760 FORJ-1 TON1 
1770 K3-J 

1780 IF CA-1 THEN 1810 

1 790 IF N(K3) - A3 THEN 1 840 

1800 GOTO 1820 

1810 IFN(R(K3))-A3THEN1840 

1820 NEXT J 

1830 PRINT : PRINT "PAS DE NUMERO 

DACTIVITE -;A3 
1840 RETURN 
1850 HOME 

1860 PRINT CHRS (14); - : NE$: PRINT : 

PRINT : PRINT 
1870 PRINT "CLASSEMENT ORDONNEDES 

EVENEMENTS (NOEUDS) * 

1880 PRINT" " 

1890 PRINT :CE-0 

1 900 FOR J - 1 TO N1 : PRINT N(R(J));"-> "; 
1910 CE-CE + 1.IFCE>13THENCE-0: 
PRINT 

1920 NEXT J: PRINT "FIN": PRINT : PRINT : 
PRINT 

1930 IF LEFTS (R$,1)< >"0"AND LEFTS 

(R$,1)< >"o"THEN GOSUB 2690 
1940 REM IMPRESSION DELAIS 
1950 HOME : POKE 36,35: INVERSE : 



Pom's n° 19 



25 



PRINT ' EVENEMENTS ';: NORMAL : 
PRINT 
1960 PRINT T$ 

1970 PRINT" DELAI " 

1980 PRINT "EVENEMENT";: POKE 36,15: 

PRINT "All PLUS TOr ;: POKE 36,40: 

PRINT "AU PLUS TARD-; 
1990 POKE 36,60: PRINT "ECART" 
2000 PRINT T$ 
2010 FOR I . 1 TON1 
2020 PRINT N(R(I));: POKE 36,19: PRINT 

INT (100 * E(l) + .5) / 100;: POKE 36,44: 

PRINT INT (100 ' L(R(I)) + .5) / 100; 
2030 POKE 36,62: PRINT INT (100 ' 

LAG(R(l)) + .5)/100 
2040 NEXT I 
2050 PRINT T$ 
2060 RETURN 

2070 REM CHEMIN CRITIQUE 

2080 IF LEFT$(R$.1)< >"0"AND LEFT$ 

(R$,1)< >"o-THEN GOSUB2690 
2090 PRINT CHR$(12) 
2100T5-0: PRINT : PRINT 
2110 HOME : POKE 36,18: INVERSE : 

PRINT " ACTIVITES ET DUREES 

CORRESPONDANTES";: NORMAL : 

PRINT 
2120 PRINT T$ 

2130 PRINT "ACTIVITES";: POKE 36,12: 

PRINT -DE - ;: POKE 36.20: PRINT "A";: 
POKE 36,24: PRINT TEMPS 
ATTENDU";: POKE 36,40: PRINT 
TEMPS MAX." 

2140 PRINT T$ 

2150 CA - 1 

2160 FOR 1-1 TO A 

2170 A3 - P(l) 

2180 GOSUB1750 

2190 11 -K3 

2200 A3 - S(l) 

2210 GOSUB 1750 

2220 I2-K3 

2230 D-L(R(I2))-E(I1) 

2240 DD(I)-D 

2250 IF ABS (T(l) - D) < 0.001 THEN 2290 
2260 PRINT "A ";l;: POKE 36,12: PRINT 

P(l);: POKE 36,15: PRINT "-> ";: POKE 

36,20: PRINT S(l);: POKE 36.28: PRINT 

INT (100 " T(l) + .5) / 100; 
2270 POKE 36,44: PRINT INT (100 ' D + .5) / 

100 

2280 GOTO 2320 

2290 PRINT "A";l;: POKE 36,12: PRINT 

P(l);: POKE 36,15: PRINT "-> ";: POKE 
36,20: PRINT S(l);: POKE 36,28. PRINT 
INT(100*T(l) + .5)/100; 

2300 POKE 36,44: PRINT INT (100 ' D + .5) / 
100;: POKE 36,56: PRINT "" ARC 
CRITIQUE """ 

2310 T5-T5 + T(l) 

2320 NEXT I 

2330 PRINT T$ 

2340 IF LEFT$(R$,1)< >"CTAND LEFTS 

(R$,1)< >"o"THEN GOSUB 2690 
2350 HOME 

2360 PRINT . PRINT : PRINT 

2370 PRINT "VOICI LORDRE DU CHEMIN 

CRITIQUE :" 

2380 PRINT" " 

2390 FOR J . 1 TO N4: PRINT CP(J);"-> "; 

2400 NEXT J 

2410 PRINT "FIN" 

2420 PRINT : PRINT 

2430 PRINT "... AVEC UNE LONGUEUR 

ESTIMEE DE : ";T5 
2440 IF Q - 1 THEN 2480 
2450 HTAB 0: VTAB 15 
2460 INPUT TJOM DU FICHIER A 



SAUVEGARDER ? ";NE$ 
2470 IF NE$-~ THEN 2450 
2480 GOSUB 3120: REM SAUVEGARDE 

RESULTATS 
2490 RETURN 

2500 REM ENTREE DONNEES 

2510 INPUT "LIBELLE DE LOPERATION 

2520 INPUT "POINT DE DEPART :";P$:P(I) 
= VAL (P$) 

2530 INPUT "POINT D'ARRIVEE :";S$:S(I) 

- VAL(S$) 
2540 IFP(I)> -S(l)ORP(l)< -0THEN 

PRINT "< ERREUR >": GOTO 2520 
2550 IFQ$< >"C"ANDQ$< >"c"THEN 

2590 

2560 INPUT "DUREE ";TI$ 

2570 IFTI$< >"0"AND VAL (Tl$) - THEN 

PRINT "< ERREUR >": GOTO 2560 
2580 T(l) - VAL (Tl$): GOTO 2670 
2590 INPUT "DELAI D'EXECUTION LE PLUS 

PROBABLE :";T1$ 
2600 IFT1$< >"0"AND VAL (T1$) -0 THEN 

PRINT "< ERREUR >": GOTO 2590 
2610 T1(l). VAL('T1$) 
2620 IF T1(l) - THEN T2(l) = 0:T3(I) = 0: 

GOTO 2670 
2630 INPUT" LEPLUSOPTIMISTE 

:";T2$:T2(I) - VAL (T2$) 
2640 IFT2(l)>T1(l)OR(T2$< >"0"AND 

VAL (T2$) - 0) THEN PRINT "< ERREUR 

>": GOTO 2630 
2650 INPUT" LE PLUS PESSIMISTE 

*;T3$:T3(I) - VAL (T3$) 
2660 IFT3(I)<T1(I)THEN PRINT "< 

ERREUR >": GOTO 2650 
2670 RETURN 
2680 REM 

2690 PRINT: PRINT "APPUYEZSUR UNE 
TOUCHE POUR LA SUITE.": GET C$ 
2700 RETURN 

2710 REM SAUVEGARDE SUR DISQUE 
2720 PRINT 

2730 PRINT D$;"OPEN";NE$ 

2740 PRINT D$;"WRITE";NE$ 

2750 PRINT A: PRINT Q$ 

2760 FOR I - 1 TO A 

2770 PRINT P(l): PRINT S(l): PRINT T(l): 

PRINT T1(l): PRINT T2(l): PRINT T3(l) 
2780 PRINT L$(l) 
2790 NEXT 

2800 PRINT D$;"CLOSE" 
2810 RETURN 

2820 REM LECTURE ENREGISTREMENT 
2830 INVERSE : HTAB 20: VTAB 10: PRINT 
"UN PEU DE PATIENCE...": NORMAL 
2840 PRINT 

2850 PRINT D$;"OPEN";NE$ 

2860 PRINT D$;"READ*;NE$ 

2870 INPUT A: INPUT Q$ 

2880 A - A + 1 : GOSUB 340* = A - 1 

2890 FOR I - 1 TO A 

2900 INPUT P(l): INPUT S(l): INPUT T(l): 

INPUT T1(I): INPUT T2(l): INPUT T3(l) 
2910 INPUT L$(l) 
2920 NEXT 

2930 PRINT D$;"CLOSE" 
2940 RETURN 

2950 REM TRAITEMENT ERREUR 
2960 IF PEEK (222) - 5 THEN VTAB 10: 

PRINT "FICHIER INEXISTANT": GOTO 

2980 

2970 PRINT "ERREUR" 

2980 FOR IT - 1 TO 1000: NEXT 

2990 GOTO 1740 

3000 REM MODIF ENREGISTREMENT 
3010 HOME 

3020 INPUT "NOM DU FICHIER A MODIFIER 



? ";NE$ 
3030 GOSUB 2840 

3040 PRINT "VOULEZ-VOUSAJOUTER 
UNEACTIVITEAUX ACTIVITES 

EXISTANTES '; 
3050 INPUT R$ 

3060 IF LEFTS (R$,1)< >"CTAND LEFTS 

(R$,1)< >"o" THEN 3080 
3070 A-A + 1:l-A: GOTO 3090 
3080 INPUT "NUMERO DE L'ACTIVITE A 

MODIFIER ?";l 
3090 GOSUB 2510 
3100 GOSUB 2720 
3110 RETURN 

3140 PRINT D$;"WRITE";NE$;".RESULT" 

3150 PRINT A: PRINT N1 

3160 FORI = 1TON1 

3170 PRINT N(R(I)): PRINT E(l): PRINT 

L(R(I» 
3180 NEXT 
3190 FOR I = 1 TO A 
3200 PRINT P(l): PRINT S(l): PRINT T(l): 

PRINT DD(I) 
3210 PRINT L$(l) 
3220 NEXT 
3230 PRINT N4 
3240 FOR 1-1 TO N4 
3250 PRINT CP(I) 
3260 NEXT 

3270 PRINT D$;"CLOSE" 
3280 RETURN 



Programme 

PERT40 

60 ONERR GOTO 2960 

70 T$ = " ■ 

80 D$ - CHR$ (4): PRINT 
90 HOME 

100 HTAB 10: INVERSE : PRINT "METHODE 

P.E.R.T.";: NORMAL : VTAB 8 
110 PRINT 

120 PRINT "CHEMIN CRITIQUE -> C" 
130 PRINT "P.E.R.T. ->P" 
140 PRINT "LECTURE GRAPHE EXIST ANT 
->L" 

150 PRINT "IMPRESSION DU PLANNING 
-> I" 

160 PRINT "MODIF. GRAPHE EXIST ANT 
-> M" 

170 PRINT "MODE DEMPLOI ->E" 
180 PRINT "RETOUR AU BASIC ->R" 
190 HTAB 10: VTAB 18: FLASH : PRINT 

"VOTRE CHOIX ? ";: NORMAL : GET Q$: 

PRINT Q$: NORMAL 
200 IFQ$< >"C"ANDQ$< >"P"ANDQ$< 

> VANDQ$< >"M"ANDQ$< >"E" 

ANDQ$< > "I" AND Q$ < >"R"ANDQ$< 

>"c"ANDQ$< >"p"ANDQ$< > T AND 

Q$< >"m"ANDQ$< >"e"ANDQ$< > 

V AND Q$ < > VTHEN 90 
210 IFQ$»-VORQ$ = "m"THEN GOSUB 

3010: GOTO 1740 
220 IFQ$-"E"ORQ$."e"THEN PRINT 

D$;"RUN PERT.TEXT" 
230 IF Q$ - "I" OR Q$ - V THEN PRINT 

D$;-RUN PERT.GRAPH" 
240 IF Q$ - "R" OR Q$ = "r" THEN END 
250 VTAB 22: PRINT : INPUT 

"VOULEZ-VOUS IMPRIMER LES 

RESULTATS ? ";R$ 
260 IFQ$< > T_" AND Q$ < > T THEN 290 
270 Q - 1 : HOME : INPUT "NOM DU FICHIER 

?";NE$ 



Pom's n° 19 



280 GOSUB 2830: GOTO 430 

290 HOME : HTAB 10: INVERSE : PRINT 

"METHODE P.E.R.T.";: NORMAL : VTAB 

8 

300 PRINT : INPUT "NOMBRES 

D'ACTIVITES (ARC) ? m A$ 
310 A - VAL (A$): IF A < 2 THEN PRINT ■ UN 

CHIFFRE > 1 S.V.P.": GOTO 300 
320 GOSUB 340: GOTO 390 
330 REM 

340 IF ME - 1 THEN RETURN 

350 DIM N(A + 1),E(A + 1),L(A + 1),LAG(A + 

1).L$(A + 1) 
360 DIM 

T1(A).T2(A),T3(A),T(A).SD(A),DD(A) 
370 DIM CP(A + 1),KL(A + 1),P(A + 1),S(A + 

1),R(A+1) 
380 ME- 1: RETURN 
390 PRINT : FOR I - 1 TO A 
400 PRINT : PRINT : INVERSE : PRINT 

■ACTIVITEM:" :■: NORMAL 
410 GOSUB 2510 

NB : Les iignea 420 a 1700 sont 
identiquea a celles du 
programme PERT 
1710 IF LEFTS (R$,1)< >"0"AND LEFT$ 
(R$.1)< >"o"THEN VTAB 22: GOSUB 
2700 

1720 IF Q - 1 OR Q$ « "L" OR Q$ - T THEN 
1740 

1730 GOSUB 2720 

1740 PRINT D$;"PR*0": RUN 

1750 REM 

1760 FORJ-1 TON1 
1770 K3- J 

1780 IFCA-1 THEN 1810 
1790 IF N(K3) = A3 THEN 1840 
1800 GOTO 1820 
1810 IFN(R(K3))-A3THEN1840 
1820 NEXT J 

1830 PRINT : PRINT "PAS DE NUMERO 

D'ACTIVITE ";A3 
1840 RETURN 
1850 HOME 

1860 PRINT CHR$(14);" -;NE$: PRINT : 

PRINT : PRINT 
1 870 PRINT "CLASSEMENT ORDONNE 

DES EVENEMENTS ' 

1880 PRINT" " 

1890 PRINT :CE-0 

1900 FOR J - 1 TO N1 : PRINT N(R(J));--> "; 
1910 CE - CE + 1 : IF CE > 13 THEN CE = 0: 
PRINT 

1920 NEXT J: PRINT "FIN": PRINT : PRINT : 
PRINT 

1930 IF LEFTS (R$,1)< > "O" AND LEFTS 
(R$,1)< >"o"THEN GOSUB 2700 

1940 REM IMPRESSION DELAIS 

1950 HOME : HTAB 12: INVERSE : PRINT " 
EVENEMENTS ";: NORMAL : PRINT 

1960 PRINT T$ 

1970 PRINT" —DELAI—" 
1980 PRINT "EVENEMENT;: HTAB 12: 

PRINT "AU + TOT;: HTAB 22: PRINT "AU 

+ TARD-; 
1990 HTAB 34: PRINT -ECARr 
2000 PRINT T$ 
2010 FOR 1 = 1 TO N1 
2020 PRINT N(R(I));: HTAB 15: PRINT INT 

(100 ' E(l) + .5) / 100;: HTAB 25: PRINT 

INT (100-L(R(l)) + .5)/100; 
2030 HTAB 35: PRINT INT (100 * LAG(R(I)) 

+ .5)/ 100 
2040 NEXT I 
2050 PRINT T$ 
2060 RETURN 
2070 REM 

2080 IF LEFTS (R$,1)< > "O" AND LEFTS 



(R$,1)< >"o"THEN GOSUB 2700 
2090 PRINT CHR$(12) 
2100 T5-0: PRINT : PRINT 
21 10 HOME : HTAB 2: INVERSE : PRINT " 

ACTIVITES ET DUREES 

CORRESPONDANTES.-;: NORMAL : 

PRINT 
2120 PRINT T$ 

2130 HTAB 22: PRINT "—TEMPS —■ 

2140 PRINT "ACTIVITES";: HTAB 13: PRINT 
-DE";: HTAB 19: PRINT "A";: HTAB 21 : 
PRINT -ATTENDU-;: HTAB 33: PRINT 
■MAX.- 

2150 PRINT T$ 

2160 CA-1 

2170 FORI -1 TO A 

2180A3-P(I) 

2190 GOSUB 1750 

2200 11 - K3 

2210A3-S(I) 

2220 GOSUB 1750 

2230 12 - K3 

2240D-L(R(I2))-E(I1) 

2250 DD(I) - D 

2260 IF ABS (T(l) - D) < 0.001 THEN 
2300 

2270 PRINT "A ";l;: HTAB 13: PRINT P(l);: 
HTAB 14: PRINT - -> •;: PRINT S(l);: 
HTAB 23: PRINT INT (100 " T(l) + .5) / 
100; 

2280 HTAB 33: PRINT INT (100 ' D + .5) / 
100 

2290 GOTO 2330 

2300 PRINT "A HTAB 13: PRINT P(l);: 
HTAB 14: PRINT " -> ";: PRINT S(l);: 
HTAB 23: PRINT INT (100 ' T(l) + .5) / 
100; 

2310 HTAB 33: PRINT INT (100 ■ D + .5) / 
100;: HTAB 5: INVERSE : PRINT 
-CRITIQUE": NORMAL 

2320T5-T5 + T(I) 

2330 NEXT I 

2340 PRINT T$ 

2350 IF LEFTS (R$,1)< > "O" AND LEFTS 

(R$.1)< >"o-THEN GOSUB 2700 
2360 HOME 

2370 PRINT : PRINT : PRINT 

2380 PRINT "VOICI L'ORDRE DU CHEMIN 

CRITIQUE .- 

2390 PRINT"- ■ 

2400 FOR J = 1 TO N4: PRINT CP(J);--> "; 

2410 NEXT J 

2420 PRINT "FIN" 

2430 PRINT : PRINT 

2440 PRINT "... AVEC UNE LONGUEUR 

ESTIMEEDE:": PRINT: HTAB 15: 

PRINT T5 
2450 IF Q-1 THEN 2490 
2460 HTAB 1: VTAB 15 
2470 INPUT TJOM DU FICHIER A 

SAUVEGARDER ? ";NE$ 
2480 IF NES-- THEN 2460 
2490 GOSUB 3130: REM SAUVEGARDE 

RESULTATS 
2500 RETURN 
2510 REM 

2520 INPUT -LIBELLE DE L'OPERATION 

:-;L$(l) 

2530 INPUT "POINT DE DEPART :-;P$:P(l) 
2540 INPUT^POINT D'ARRIVEE :-;S$:S(l) 
2550 IFP(I)> -S(l)ORP(l)< -0THEN 



PRINT "< ERREUR >": GOTO 2570 
2590 T(l) - VAL (Tl$): GOTO 2680 
2600 INPUT "DELAI DEXECUTION LE 

PLUS PROBABLE ~tt$ 
2610 IF T1$< >-0"AND VAL(T1$)-0 

THEN PRINT V ERREUR >•; GOTO 2600 
2620 T1(l). VAL(T1$) 
2630 IF T1(l) = THEN T2(l) - 0:T3(I) - 0: 

GOTO 2680 
2640 INPUT ■ LE PLUS OPTIMISTE 

.-;T2$:T2(I) - VAL (T2$) 
2650 IFT2(l)>T1(l)OR(T2$< >"0-AND 

VAL (T2$) -0) THEN PRINT "< ERREUR 

>■: GOTO 2640 
2660 INPUT" LE PLUS 

PESSIMISTE :";T3$:T3(I) - VAL (T3S) 
2670 IFT3(I)<T1(I)THEN PRINT V 

ERREUR >": GOTO 2660 
2680 RETURN 
2690 REM 

2700 PRINT : PRINT "APPUYEZ SUR UNE 

TOUCHE POUR LA SUITE.": GET C$ 
2710 RETURN 
2720 REM 
2730 PRINT 

2740 PRINT D$;"OPEN";NE$ 
2750 PRINT D$;"WRITE";NE$ 
2760 PRINT A: PRINT Q$ 
2770 FOR I - 1 TO A 
2780 PRINT P(l): PRINT S(l): PRINT T(l): 
PRINT T1 (I): PRINT T2(l): PRINT T3(l) 
2790 PRINT L$(l) 
2800 NEXT 

2810 PRINT D$;"CLOSE" 
2820 RETURN 
2830 REM 

2840 INVERSE : HTAB 20: VTAB 10: PRINT 

"UN PEU DE PATIENCE...": NORMAL 
2850 PRINT 

2860 PRINT D$;"OPEN";NE$ 
2870 PRINT D$;"READ";NE$ 
2880 INPUT A: INPUT Q$ 
2890A = A + 1:GOSUB 340:A = A-1 
2900 FORI-1TOA 
2910 INPUT P(l): INPUT S(l): INPUT T(l): 
TT2(I): INPUT T3(l) 




PRINT "< 



■: GOTO 2530 



2560 IFQ$< >"C"ANDQS< >"c"THEN 
2600 

2570 INPUT "DUREE ";TI$ 

2580 IFTI$< >"0"AND VAL (Tl$) - THEN 



2940 PRINT D$;"CLOSE" 
2950 RETURN 
2960 REM 

2970 IF PEEK (222). 5 THEN VTAB 10: 
PRINT "FICHIER INEXISTANT": GOTO 
2990 

2980 PRINT "ERREUR" 

2990 FOR IT -1 TO 1000: NEXT 

3000 GOTO 1740 

3010 REM 

3020 HOME 

3030 INPUT "NOM DU FICHIER A MODIFIER 

?";NE$ 
3040 GOSUB 2850 

EXIST ANTES "; 
3060 INPUT R$ 

3070 IF LEFTS (R$,1)< >"0"AND LEFTS 

(R$,1)< > "b" THEN 
3090 

3080A-A + 1:l-A:GOTO3100 

3090 INPUT "NUMERO DE L'ACTIVITE A 

MODIFIER ?";l 
3100 GOSUB 2520 
3110 GOSUB 2730 
3120 RETURN 
3130 REM 

3140 PRINT D$;-OPEN-;NE$,-.RESULT- 
3150 PRINT D$;-WRITE-;NE$;-.RESULT- 



Pom's n° 19 



27 



3160 PRINT A: PRINT N1 

3170 FORI-1 TON1 

3180 PRINT N(R(I)): PRINT E(l): PRINT 

L(R(I» 
3190 NEXT 
3200 FOR I - 1 TO A 
3210 PRINT P(l): PRINT S(l): PRINT T(l): 

PRINT DD(I) 
3220 PRINT L$(l) 
3230 NEXT 
3240 PRINT N4 
3250 FOR I - 1 TO N4 
3260 PRINT CP(I) 
3270 NEXT 

3280 PRINT D$;"CLOSE" 
3290 RETURN 

Programme 

PERT.TEXT 

20 HOME : HTAB 20: PRINT ^A METHODE 

P.E.R.T." 
30 SPEED- 90 

40 PRINT : PRINT -Cede methode lul creee 

il y a quelques annees pour 

I'etablissement de" 
50 PRINT "plannings de travaux de 

constructions.": PRINT "P.E.R.T. signifie 

Program Evaluation and Rewiew 

Technique." 
60 PRINT "Assodee a la methode du chemin 

critique.cette methode est couramment 

employee" 
70 PRINT "pour resoudre les problemes 

o*ordonnancement et eforganisation " 
80 PRINT 

90 PRINT "L'analyse du chemin critique 

permet :" 
100 PRINT "- de de teeter les taches 

critiques,"; 
110 PRINT "e'est a dire celles dont 

I'execution ne peut etre ni retardee.ni 

ralentie "; 

120 PRINT "sans que le temps total des 

travaux ne soil": PRINT "reporte." 
130 PRINT"- determiner le meilleur temps 

total des travaux." 
140 PRINT "- etablir un ordonnancement." 
150 PRINT : PRINT "Afin d'utiliser ce 

programme au mieux.il est conseille de 

preparer un" 
160 PRINT "tableau comprenant la liste des 

taches relatives aux travaux a etfectuer" 
170 PRINT "avec en (ace de chaque tache: 

le temps de realisation le plus probable," 
180 PRINT" laduree 

minimale," 
190 PRINT" laduree 

maximale." 
200 PRINT "Apres constitution du tableau.il 

taudra dessiner sous forme de graphe," 
210 PRINT Tensemble des activites de 

maniere ordonnee." 
220 PRINT "Ce graphe se composera de 

noeuds.c'est a dire des cerdes 

numerates" 
230 PRINT "representant les 

evenements.Chaque cerde sera relie a 

un autre cerde" 
240 PRINT "par un arc, representant les 

activites ou taches." 
250 PRINT "Chaque noeud doit porter un 

numero different" 
260 PRINT "le point rJarrivee tfun arc doit 

correspondre a un numero de noeud 

superieur" 
270 PRINT "au noeud de depart." 



280 PRINT "Le chemin defini est done une 
suite continue (fares dont I'extremite 
terminate" 

290 PRINT "de run est I'extremite initiate de 
rautre.ll faut s'assurer que tous les" 

300 PRINT "chemins du graphe ne sont pas 
interrompus.Si un chemin ne peut 
aboutir," 

310 PRINT "il est indispensable de creer un 
arc fictifdevaleur nulle liant les" 

320 PRINT "extremites interrompues." 

330 PRINT : PRINT "Le planning obtenu sur 
rimprimante affichera :": PRINT "en haul 
les numeros de noeuds," 

340 PRINT "en ordonnee les activites," 

350 PRINT "en abdsse la duree." 

360 PRINT : PRINT 

370 SPEED- 255 

380 PRINT "CE LOGICIEL A ETE INPIRE 
PAR L'ARTICLE DE XUAN TUNG BUI 
PARU" 

390 PRINT "DANS MICRO-SYSTEME EN 

400 PRINT : INVERSE MNPUT "APPUYEZ 
SUR UNE TOUCHE POUR UNE 
DEMONSTRATION";R$ 

410 NORMAL : PRINT 

420 PRINT CHR$ (4);"RUN PERT. DEMO" 

Programme 

PERT.DEMO 

40 & GR 10 

50 & POS 110,180 

60 & COLOR- 0: & BACK - 15 

70 & PRINT "EXEMPLE:"; 

80 & COLOR- 15: & BACK - 

90 & PRINT " RESEAU DE 

CONSTRUCTION"; 
100 & POS 110,172: & PRINT" — 



110 & 
120 & 

130 & 

140 & 
150 & 
160 & 
170 & 
180 & 
190 & 
200 & 
210 & 
220 & 
230 & 
240 & 
250 & 
260 & 
270 & 
280 & 
290 & 
300 & 
310 & 
320 & 
330 S 
340 & 
350 & 
360 & 
370 & 
380 & 
390 & 
400 & 
410 & 
420 & 
430 & 
440 & 
450 & 
460 & 



POS 1,136: & PRINT "1"; 
PLOT 10,140 TO 40,140 
POS 25,144: & PRINT "a"; 
POS 45,136: & PRINT T; 
PLOT 60,140 TO 90,140 
POS 75,144: & PRINT "b"; 
POS 95,136: & PRINT "3"; 
PLOT 110,140 TO 140,140 
POS 125,144: & PRINT "c"; 
POS 145,136: & PRINT "4"; 
POS 175,143:4 PRINT "e"; 
PLOT 160,140 TO 190,140 
POS 195,136: & PRINT "5"; 
POS 295,144: & PRINT "h"; 
PLOT 280,140 TO 310,140 
POS 272,136: & PRINT "8"; 
POS 345,144: & PRINT T; 
PLOT 330,140 TO 360,140 
POS 315,136: & PRINT "9"; 
PLOT 380,140 TO 410,140 
POS 395,144: & PRINT V; 
POS 363,1 36: & PRINT "10"; 
POS 413,136: & PRINT "11 Fin"; 
PLOT 152,145 TO 230,162 
POS 167,155: & PRINT "d"; 
POS 260,152: & PRINT T; 
POS 235,165: & PRINT "6"; 
PLOT 245,162 TO 270,145 
PLOT 152,135 TO 230,110 
POS 175,1 15: & PRINT "g"; 
POS 235,100:* PRINT T; 
PLOT 250,1 10 TO 365,135 
POS 285,1 10: & PRINT "J"; 
PLOT 205,145 TO 238,160 
PLOT 205.135 TO 235.1 15 
POS 10,80: & PRINT "LES ARCS 



ALLANT DU NOEUD 5 AU NOEUD 6,ET 
DU NOEUD 5 AU NOEUD 7 SONT DES 
ARCS"; 

470 & POS 10.70: & PRINT "FICTIFS DE 

VALEUR NULLE."; 
480 & COLOR- 0: & BACK - 15 
490 & POS 10,30: & PRINT "APPUYEZ 

SUR UNE TOUCHE POUR LA LISTE 

DES TRAVAUX CORRESPONDANT A 

CE GRAPHE." 
500 & COLOR- 15: & BACK - 
510 GET A$ 

520 REM LISTE DE TRAVAUX 
530 & TEXT 6 

540 T$ = "— — - == 

===-==========■======== ===== 



550 INVERSE : POKE 36,28: PRINT 

"EXEMPLE DE LISTE DE TRAVAUX" 
560 NORMAL : PRINT 
570 PRINT T$ 

580 POKE 36,25: PRINT TACHES"; 
590 POKE 36,47: PRINT TEMPS DE 

REALISATION DES TRAVAUX" 
600 POKE 36,47: PRINT "PROBABLE 

OPTIMISTE PESSIMISTE" 
610 PRINT T$ 

620 PRINT "a lEtablissement du plan"; 
630 POKE 36,50: PRINT "15";: POKE 36,62: 

PRINT " 9";: POKE 36,73: PRINT "21" 
640 PRINT t (Obtention du permis de 

construire"; 
650 POKE 36,50: PRINT "30";: POKE 36,62: 

PRINT "30";: POKE 36,73: PRINT "45" 
660 PRINT "c 'Signature des contrats"; 
670 POKE 36,50: PRINT " 5";: POKE 36,62: 

PRINT " 3";: POKE 36,73: PRINT "10" 
680 PRINT "d [Transport du materiel au 

chantier"; 

690 POKE 36,50: PRINT "2";: POKE 36.62: 
PRINT " 2";: POKE 36.73: PRINT " 3" 

700 PRINT "e (Installation eau et 
electridte"; 

710 POKE 36.50: PRINT " 3";: POKE 36,62: 
PRINT " 3";: POKE 36,73: PRINT " 3" 

720 PRINT f IFondations"; 

730 POKE 36,50: PRINT "10";: POKE 36,62: 
PRINT " 8";: POKE 36,73: PRINT "15" 

740 PRINT "g (Transport de terre pour le 
jardin"; 

750 POKE 36,50: PRINT " 2";: POKE 36,62: 

PRINT "2";: POKE 36.73: PRINT "13" 
760 PRINT "h IMurs"; 

770 POKE 36,50: PRINT "10";: POKE 36,62: 

PRINT " 8";: POKE 36,73: PRINT "12" 
780 PRINT 1 IToit"; 

790 POKE 36,50: PRINT "12";: POKE 36,62: 
PRINT " 7";: POKE 36,73: PRINT "14" 

800 PRINT "j (Decoration"; 

810 POKE 36,50: PRINT "10";: POKE 36,62: 
PRINT " 8";: POKE 36,73: PRINT "15" 

820 PRINT "k (Decoration a rinterieur"; 

830 POKE 36,50: PRINT "10";: POKE 36,62: 
PRINT " 9";: POKE 36,73: PRINT "13" 

840 PRINT T$ 

850 INVERSE 

860 VTAB 21 : POKE 36,15: PRINT 

•APPUYEZ SUR LA TOUCHE Z POUR 
RETOUR AU GRAPHE ," 

870 POKE 36,15 

880 PRINT " SUR LA TOUCHE 'ENTER' 

POUR RETOUR AU MEN U" 
890 NORMAL 
900 GET A$ 

910 IFA$-"Z"THEN RUN 

920 IFA$< > CHR$ (13) THEN 520 

930 PRINT 

940 PRINT CHR$ (4);"RUN PERT" 



28 



Pom's n° 19 



Memoire-tampon d'ecran en Applesoft 

Gerard Michel 



Que vous soyez utilisateur d'un 
Apple 11+ avec "carte langage", d'un 
Apple //e ou d'un Apple tic, vous ne 
disposez toujours que d'un systeme 
48 K lorsque vous programmez en 
Applesoft, car les 16 K supplementai- 
res ne vous sont pas directement ac- 
cessibles. 

Pom's vous a deja presente plusieurs 
routines permettant d' exploiter cette 
reserve de memoire : extensions du 
Basic s'y logeant en partie, comme 
Haifa, disque virtuel... 
Nous vous proposons maintenant de 
l'utiliser comme zone de stockage 
pour des ecrans 40 colonnes et les 
variables qu'ils peuvent eventuelle- 
ment contenir. Ceci permet de rap- 
peler facilement des ecrans necessai- 
res en plusieurs points d'un 
programme, notamment ceux qui 
servent a la definition de parametres 
pour votre application, mais aussi de 
faire passer ces ecrans et variables 
d'un programme a un autre, sans 
qu'il soit besoin de les redefinir dans 
le second. 

Principe et 
mode d'emploi 

Afin de preparer 1' extension memoire 
pour le stockage, il faut tout d'abord 
executer le petit programme d' initiali- 
sation liste plus loin par un BRUN 
INIT16K. Cela peut se faire dans le 
tout premier programme utilisant les 
routines concernees ou dans le pro- 
gramme de "boot". 
Cette initialisation consiste simple- 
ment a mettre un dans le premier 
octet de la zone de stockage, qui doit 
contenir a tout moment le nombre 
d'ecrans effectivement stockes. 

Pour ce qui est des routines de mani- 
pulation d'ecrans, nous utiliserons, 
une fois encore, un acces via la mo- 
dification de la routine $B1. qui lit les 
octets du programme pour le compte 
de l'interpreteur Applesoft. 
Votre premier programme devra 
done commencer par les instructions 
de chargement suivantes (voir le lis- 
ting de TESTVID16 donne plus 
bas): 

• BLOAD VID162 : chargement (a 
l'adresse $9000) de la routine qui 
assure le traitement des instruc- 
tions de manipulation d'ecrans. 

• BLOAD INTER: mise en place 
dans la routine $B1 de l'aiguillage 
qui conduit en $9000 sur VID162. 

Des lors, votre Basic dispose de 4 
instructions nouvelles dediees a notre 
memoire tampon d'ecran. C'est le 
caractere "]" qui identifie ces instruc- 
tions, qu'il doit toujours preceder; lui- 



meme doit toujours etre precede de 
mime s'il vient en tout debut de 
ligne ou apres un THEN. 

• :]S 

Stocke l'ecran acruellement affiche 
dans l'extension memoire. sans mo- 
difier I'affichage. Vous pouvez "ran- 
ger" ainsi 12 ecrans; au-dela. vous 
obtiendrez un message "OUT OF 
MEMORY". 

Chaque ecran archive est implicite- 
ment numerate dans l'ordre chrono- 
logique de son archivage. Le premier 
porte logiquement le numero 1, et 
ainsi de suite. II n'est done pas ne- 
cessaire (et meme pas permis...) de 
preciser ici le numero d'ordre de 
l'ecran stocke. 

• :]R.I.Z$ 

Retrouve dans l'extension memoire 
l'ecran numero I. 1'affiche et transfere 
dans le tableau Z$ les variables qu'il 
peut contenir. 

Vous pouvez specifier le numero 
d'ecran par tout moyen a votre 
convenance : chiffres. variable, ex- 
pression numerique... 
Le tableau recepteur des donnees 
doit, de preference, etre dimensionne 
avant l'appel de fonction, sauf si la 
dimension par defaut peut lui conve- 
nir. 11 doit obligatoirement appartenir 
au type alphanumerique et ne 
comporter qu'une seule dimension. 
Pour la routine de restitution d'ecran, 
toute partie de cet ecran comprise 
entre deux caracteres ":" constitue 
une chaine de caracteres qui doit 
etre affectee comme contenu pour 
l'un des elements du tableau. 

Si votre ecran 1 comporte a un en- 
droit donne les caracteres suivants : 
:DONNEE 1: 
:DONNEE 2: 
:DONNEE 3: 

et que vous utilisez 1' instruction 
:]R.I.T$ 

vous aurez pour resultat. outre le 
rappel a I'affichage de l'ecran I : 
T$(0)=DONNEE 1 
T$(l) = DONNEE 2 
T$(2)=DONNEE 3 

Pour la derniere donnee de l'ecran. 
toutefois, si vous manquez de place 
en "VTAB 24 : HTAB 40" pour pla- 
cer un le ":" initial suffira pour 
realiser l'affectation de la portion 
d'ecran qui le suit au dernier element 
du tableau. 

Si vous specifiez un numero d'ecran 
I qui n'existe pas dans l'extension 
memoire, vous obtiendrez un mes- 
sage "ILLEGAL QUANTITY". 

• :]D.I 

Detruit l'ecran numero I dans l'exten- 



sion memoire. Les ecrans qui le sui- 
vent, s'il y en a, sont decales vers le 
bas de la memoire et leur numerota- 
tion implicite est remise a jour en 
consequence. 

Ainsi, si vous detruisez l'ecran nu- 
mero 3, le numero 4 devient le nu- 
mero 3, le 5 devient le 4... 
Chaque fois que vous supprimez un 
ecran de cette fagon, vous liberez de 
la place pour en stocker un autre, 
mais il ne portera evidemment pas le 
mSme numero. Par exemple. si vous 
avez dix ecrans en memoire et que 
vous donnez les instructions suivan- 
tes : 

:]D,1:]S 

le nouvel ecran archive par ]S por- 
tera le numero implicite 10, et non 1 
(voir ci-apres pour la modification du 
contenu d'un ecran archive sous un 
numero donne). 

La encore, si vous specifiez un nu- 
mero I inexistant, vous obtiendrez un 
"ILLEGAL QUANTITY" en retour. 

• :]U,I 

Stocke l'ecran actuellement affiche a 
l'emplacement reserve a l'ecran nu- 
mero I dans l'extension memoire. 
II peut s'agir du meme ecran preala- 
blement rappele pour modification 
(une nouvelle saisie de la valeur des 
variables, par exemple) ou d'un 
ecran totalement different, qui ecra- 
sera done l'ancien porteur du nu- 
mero I. 

La valeur de I doit correspondre a 
un ecran effectivement archive, sous 
peine de "ILLEGAL QUANTITY". 

Precisions 
techniques et 
bibliographiques 

Vous trouverez dans le courrier des 
lecteurs du Pom's 10 une explication 
complete sur le mode d'utilisation de 
l'extension memoire 16 K. 
Nous utilisons ici le Bank 2 (4 K) et 
la partie commune de 8 K, soit un 
ensemble de 12 K. dont les adresses, 
de $D000 a $FFFF, sont les memes 
que celles de la ROM de l'Apple. Un 
ensemble d' adresses joue le role de 
commutateurs afin de determiner 
qui. de la ROM ou de l'extension 
RAM. est selectionne en lecture ou 
ecriture. 

Les commutateurs exploites dans 
notre routine sont : 

• $C080 : selectionne la RAM en 
lecture mais interdit l'ecriture. 

• $C081 : selectionne la ROM en 
lecture et autorise l'ecriture sur la 
RAM si adresse deux fois (par 



Pom's n° 19 



29 



exemple, avec BIT $C081 : BIT 
$C081, dans nos routines). 

• SC083: selectionne la RAM en 
lecture et ecriture si adresse deux 
fois. 

Dans l'extension RAM, le premier 
octet (a l'adresse $D000) contient le 
nombre d'ecrans stockes, ces der- 
niers s'empilant ensuite a partir de 
$D001. Chacun d'entre eux occupe 
$3C0 octets (soit 24 x 40 caracteres 
= 960 octets). 

En ce qui concerne la manipulation 
de la routine $B1, pour implantation 
de nouvelles instructions sous Apple- 
soft, vous pouvez notamment vous 
reporter au Pom's 16, dans lequel 
ces mecanismes sont presentes en 
detail a 1' occasion de l'analyse du 
RUN. 

Le petit fichier CHRGET liste ci- 
apres doit etre charge en memoire 



par BLOAD si vous desirez retrouver 
1' Applesoft standard et supprimer Tin- 
direction menant en $9000. 

Pour ce qui est de la structure des 
tableaux et du mode de stockage des 
elements, vous trouverez tous les 
renseignements complementaires, 
s'ils vous sont necessaires, dans des 
numeros precedents de Pom's (12 et 
17, par exemple). 

Les quelques routines empruntees a 
la ROM de 1' Apple dans le cadre de 
notre programme sont : 

• $FBC1 : calcule l'adresse base de 
la ligne dont le numero est indi- 
que dans $25 (position verticale 
du curseur) et stocke dans l'accu- 
mulateur. Cette adresse est retour- 
nee aux adresses $28 - $29, qui 
peuvent done servir de base pour 
un adressage indirect indexe par 



• $DEBE : verifie la presence d'une 
virgule a l'adresse pointee par le 
pointeur de programme Applesoft 
($B8 - $B9) et lit le caractere sui- 
vant. 

• $DD67 : evalue 1' expression nu- 
merique ou algebrique pointee par 
$B8 - $B9 et range le resultat en 
flottant aux adresses $9D a $A2. 

• $E752 : convertit le resultat ci- 
dessus en entier a deux octets et 
le range en $50 - $51. 

• $F7D9 : recherche le tableau dont 
le nom est pointe par $B8 - $B9 
et range l'adresse de son nom 
dans la zone de stockage des ta- 
bleaux aux adresses $9B et $9C. 

• $D412 : genere les messages d'er- 
reur ou branche sur la routine 
ONERR GOTO si ce dernier est 
actif. 



Programme INIT16.S 

(Assembleur BigMac) 



i 

2 
3 
A 
5 
6 
7 
8 



ORG $9000 

BIT SC081 

BIT SC081 

LDA #0 

STA $D000 

BIT SC081 
CLC 

JMP $D88A 



Programme VID162.REM.S 

(Assembleur BigMac) 

1 ********************************* 

2 * * 

3 ' STOCKAGE D'ECRANS ET VARIABLES* 

4 * DANS LA MEMOIRE AUXILIAIRE //E* 

5 * OU LA CARTE-LANGAGE 11+ (16K) « 

6 * CODE = VID162 * 

7 * * 
g ********************************* 



9 








10 




ORG 


S9000 


11 




CMP 


#S5D 


12 




BEQ 


SO 


13 




CMP 


#S3A 


14 




BCC 


SI 


15 


E0 


RTS 




16 


SI 


JMP 


SBE 


17 


SO 


JSR 


$B1 


18 




CMP 


#'S' 


19 




BEQ 


S2 


20 




CMP 


#'R' 


21 




BNE 


DO 


22 




JMP 


R0 


23 


DO 


CMP 


# 'D' 


24 




BNE 


UO 



; CARACTERE " ] " ? 
; REPRISE CHRGET 



;LIT CAR SUIVNT ] 
;CDE "SAUVE" ? 

;CDE "RECUPERE" ? 



;CDE "DETRUIT" ? 



25 




JMP 


Dl 




26 


UO 


CMP 


#'U' 


;CDE "UPDATE" ? 


27 




• BNE 


E0 


;NON => ERREUR 
(RTS DIRECT LA 
PROVOQUERA) 


28 




JMP 


Dl 




29 


S2 


STA 


$19 


; SAUVE LA CDE 


30 




BIT 


$C080 


; LECTURE MEV AUX. 


31 




LDA 


SD000 


; NOMBRE D'ECRANS 
ACTUELLEMENT 
STOCKES 


32 




CMP 


#$0C 


;12 ECRANS MAXI 


33 




BCC 


S3 




34 




LDX 


#$4D 


/"OUT OF MEMORY" 


35 




BIT 


$C081 


; LECTURE ROM 


36 




JMP 


SD412 


; ROUTINE D' ERREUR 
DE L' APPLESOFT 


37 


S3 


TAX 






38 




LDA 


#1 




39 




STA 


$6 


.•INITIALISE $6-$7 


40 




LDA 


#$D0 




41 




STA 


$7 




42 


S5 


CPX 


#0 




43 




BEQ 


S4 




44 


S50 


CLC 






45 




LDA 


$6 


;AJOUTE $3C0 PAR 
EC RAN STOCKE 


46 




ADC 


#$C0 




47 




STA 


$6 




48 




LDA 


$7 




49 




ADC 


#3 




50 




STA 


$7 




51 




DEX 






52 




BNE 


S50 




53 


S4 


LDA 


#0 


;$6-$7 = ADRESSE 
DE STOCKAGE DE 
L ! ECRAN 


54 




STA 


$25 


;= NO LIGNE ECRAN 


55 


S9 


BIT 


SC081 


; LECTURE ROM 


56 




BIT 


SC081 


; PERMET ECRITURE 



SUR MEV 



Mn" 1 1 1 tllnlli 

Pom's n° 19 



57 




JSR 


SFBC1 


;CALC ADRESSE 










ETRE POSITIF 










BASE LIGNE 


103 




BEQ 


R3 




58 




LDY 


#0 




104 




STA 


$18 




59 


S6 


LDA 


($28) , Y 


;LIT CARACTERE 


105 




JSR 


SDEBE 












DANS LA LIGNE 


106 




JSR 


$F7D9 


; CHERCHE TABLEAU 


60 




STA 


($6),Y 


;ET LE STOCKE EN 










POINTE PAR B8-B9 










MEV AUX. 


107 




LDA 


$9B 




61 




INY 






108 




STA 


$8 




62 




CPY 


#S28 


;FIN DE LIGNE ? 


109 




LDA 


$9C 




es 




BNE 


S6 




110 




STA 


$9 


;$8-$9 = ADR DU 


64 




INC 


$25 


; LIGNE SUIVANTE 










NOM DU TABLEAU 


65 




LDA 


$25 




111 




LDY 


#4 




66 




CMP 


#$18 


; DERNIERE LIGNE 


112 




LDA 


($8),Y 












DEJA TRAITEE ? 


113 




CMP 


#1 


;DOIT ETRE A UNE 


67 




BEQ 


S7 












SEULE DIMENSION 


68 




CLC 






114 




BNE 


R3 




69 




LDA 


$6 




115 




CLC 






70 




ADC 


#$28 




116 




LDA 


#7 




71 




STA 


$6 


; PASSE A LA 


117 




ADC 


$8 












"LIGNE" SOIVANTE 


118 




STA 


$8 












EN MEV AUX. 


119 




BCC 


R4 




72 




BCC 


S8 




120 




INC 


$9 




73 




INC 


$7 




121 


R4 


LDX 


$18 


;$8-$9 = ADR 1ER 


74 


S8 


LDA 


$25 












ELEMENT 


75 




BNE 


S9 




122 




DEX 






76 


S7 


DEC 


$25 


; REVIENT LIGNE 24 


123 




LDA 


#1 




77 




LDA 


$19 




124 




STA 


$6 




78 




CMP 


# "U' 




125 




LDA 


#$D0 




79 




BNE 


S70 




126 




STA 


$7 




80 




JMP 


R140 


; RETOUR SI UPDATE 


127 


R6 


CPX 


#0 




81 


S70 


BIT 


$C083 


;AUTORISE LECTURE 


128 




BEQ 


R5 




82 




BIT 


$C083 


;ECRIT -> MEV AUX 


129 




CLC 






83 




INC 


$D000 


;INC NB ECRAN 


130 




LDA 


$6 




84 




BIT 


$C081 


;ROM EN LECTURE 


131 




ADC 


#$C0 




85 




JMP 


$B1 


; RETOUR APPLESOFT 


132 




STA 


$6 




86 


R0 


JSR 


$B1 


;POINTE $B8-$B9 


133 




LDA 


$7 












SUR CARACTERE 


134 




ADC 


#3 












SUIVANT ) 


135 




STA 


$7 




87 




JSR 


SDEBE 


;VERIFIE "," ET 


136 




DEX 














POINTE SUR OCTET 


137 




JMP 


R6 












SUIVANT 


138 


R5 


LDA 


#0 


;$6-$7=ADR ECRAN 


88 




JSR 


SDD67 


; EVALUE FORMULE 










EN MEV AUX. 










POINTEE PAR 


139 




STX 


$1C 












$B8-$B9 


140 




STA 


$19 


; DRAPEAU POUR 


89 




JSR 


$E752 


; LA CONVERT IT EN 










ENTRE VARIABLES 










2 OCTETS ET LES 


141 




TAX 














RANGE EN $50-$51 


142 




STA 


$25 




90 




LDA 


$51 




143 


R12 


JSR 


$FBC1 




91 




BEQ 


Rl 


;POIDS FORT DOIT 


144 




BIT 


SC080 


; LECTURE MEV AUX. 










ETRE A 


145 




LDY 


#0 




92 


R3 


LDX 


#$35 


; "ILLEGAL QUANT. " 


146 


R9 


LDA 


($6),Y 


; REMET LES OCTETS 


93 




JMP 


SD412 












A L" ECRAN 


94 


Rl 


BIT 


SC080 


; LECTURE MEV AUX. 


147 




STA 


($28), Y 




95 




LDA 


SDOOO 




148 




CMP 


#$BA 


; " : " ? 


96 




CMP 


$50 




149 




BEQ 


R16 




97 




BCS 


R2 


;NO ECRAN <= 


150 




JMP 


R15 












NOMBRE EN STOCK 


151 


R16 


LDA 


$19 




98 




BIT 


SC081 


; RETOUR ROM 


152 




BEQ 


R7 


;1ER DELIMITEUR 


99 




JMP 


R3 




153 




JSR 


XX0 


;C'EST LE 2ND => 


100 


R2 


BIT 


$C081 












AFFECTER LA 


101 




LDA 


$50 












VARIABLE 


102 




CMP 


#0 


;NO ECRAN DOIT 


154 




JMP 


XI 





Pom's n° 19 



31 



155 


XXO 


.STY 


$1A 


; SAUVEGARDE INDEX 


195 




LDY 


$1A 




156 




CPX 


#0 


; LONG CHAINE=0 ? 


196 




LDX 


#0 




157 




BNE 


XO 




197 




BEQ 


R8 




158 




LDY 


#0 




198 


R7 


INC 


$19 


; SIGN ALE : 1ER 


159 




TXA 














DELIMITEUR EST 


160 




STA 


($8) , Y 


;STOCKER SIMPLE- 










TROUVE 










MENT LA LONGUEUR 


199 


R8 


INY 














POUR L" ELEMENT 


200 




CPY 


#$28 


;POURSUIT 


161 




RTS 




; CONCERNE DU 










AFFICHAGE ECRAN 










TABLEAU 


201 




BNE 


R9 




162 


XO 


STX 


$1B 


; SAUVEGARDE LONG 


202 




INC 


$25 












CHAINE 


203 




LDA 


$25 




163 




SEC 






204 




CMP 


#$18 




164 




LDA 


$6F 


;CALC ADR CHAINE 


205 




BEQ 


R10 












EN RET I RANT 


206 




CLC 






165 




SBC 


$1B 


;SA LONGUEUR DE 


207 




LDA 


$6 












L'ADRESSE 


208 




ADC 


#$28 


; "LIGNE" SUIVANTE 










POINTEE PAR 










EN MEV AUX. 


166 




STA 


$6F 


; FRETOP ($6F-$70) 


209 




STA 


$6 












= HAUT MEMO I RE 


210 




BCC 


Rll 




167 




BCS 


X2 




211 




INC 


$7 




168 




DEC 


$70 




212 


Rll 


BIT 


SC081 


; REMET LECTURE 


169 


X2 


LDX 


#0 












ROM POUR LE 


170 




LDY 


#0 












"JSR $FBC1" 


171 


X4 


LDA 


BUFF, X 


;TRANSFERE LE 


213 




LDA 


$25 












CONTENU DE LA 


214 




JMP 


R12 












CHAINE A SON 


215 


R10 


BIT 


SC081 




172 




STA 


($6F) , Y 


; ADRESSE DANS LA 


216 




CPX 


#0 












ZONE DE STOCKAGE 


217 




BNE 


R13 












DES CHAINES 


218 


R14 


DEC 


$25 




173 




INX 






219 




LDX 


$1C 




174 




CPX 


$1B 


; CHAINE 


220 


R140 


JSR 


$B7 


; RETOUR A 










INTEGRALEMENT 










L" APPLESOFT 










TRANSFEREE ? 










($B8-$B9 POINTE 


175 




BEQ 


X3 












DEJA SUR 


176 




INY 






221 




RTS 




;L' OCTET QUI SUIT 


177 




BNE 


X4 












LE NOM DU 


178 


X3 


LDY 


#0 












TABLEAU) 


179 




LDA 


$1B 


;MET LONG CHAINE 


222 


R15 


STA 


$1D 












DANS L ' ELEMENT 


223 




LDA 


$19 




180 




STA 


(S8),Y 


;DU TABLEAU 


224 




BEQ 


R8 












CONCERNE 


225 




LDA 


$1D 




lB 1 




INY 






226 




STA 


BUFF, X 


;STOCKE BUFFER DE 


182 




LDA 


$6F 


;AINSI QUE 










VARIABLES : 










L'ADRESSE DE LA 


227 




INX 




;ON EST APRES LE 










CHAINE 










1ER DELIMITEUR 










CORRESPONDANTE 


228 




BNE 


R8 




183 




STA 


(S8),Y 




229 


R13 


JSR 


XXO 


;STOCKE UNE EVEN- 


184 




INY 














TUELLE DERNIERE 


185 




LDA 


S70 












VARIABLE DONT 


186 




STA 


($8) , Y 




230 




JMP 


R14 


; LE DELIMITEUR DE 


187 




RTS 














FIN NE SERAIT 


188 


XI 


CLC 














PAS A L 1 ECRAN 


189 




LDA 


$8 


;POINTE SUR 


231 


Dl 


STA 


$19 


;STOCKE LA 










L' ELEMENT DU 










COMMANDE 










TABLEAU SUIVANT 


232 




JSR 


$B1 




190 




ADC 


#3 




233 




JSR 


$DEBE 




191 




STA 


$8 




234 




JSR 


SDD67 




192 




BCC 


X5 




235 




JSR 


$E752 




193 




INC 


$9 




236 




LDA 


$51 




194 


X5 


DEC 


$19 


; REMET LE DRAPEAU 


237 




BEQ 


D2 












DELIMITEUR A 


238 




JMP 


R3 





Pom's n° 19 



239 D2 


BIT 


SC080 




293 


DEX 






240 


LDA 


$D000 




294 


BNE 


D70 




241 


BIT 


$C081 




295 D8 


CLC 




;$8-9 = ADR ECRAN 


242 


TAX 












A DETRUIRE 


243 


CMP 


$50 




296 


LDA 


$8 




244 


BCS 


D3 




297 


ADC 


#$C0 




245 


JMP 


R3 




298 


STA 


$1A 


; $ 1A- 1B=ADR ECRAN 


246 D3 


LDA 


$50 


;$50 CONTIENT UN 








SUIVANT 








NUMERO D'ECRAN 


299 


STA 


$1C 


/*» *r *— . /** ^ j"» y"T *■> TFT" TV 

;$1C-$1D SERVIRA 








VALIDE 








POUR LE DECALAGE 


247 


BNE 


D4 


;SAUF SI 


300 


LDA 


$9 




248 


JMP 


R3 




301 


ADC 


#3 




249 D4 


STA 


$18 


; GARDE NO ECRAN 


302 


STA 


$1B 




250 


LDA 


$19 




303 


STA 


$1D 




251 


CMP 


#'U' 




304 


BIT 


$C083 


; MEV AUX . 


252 


BNE 


DD4 










EN LECT/ECRITURE 


253 


DEC 


$18 


;DEC NO POUR 


305 


BIT 


$C083 










UTILISER LA MEME 


306 


LDY 


#0 




254 


LDA 


$18 


/PROCEDURE QUE 


307 D9 


LDA 


($1C) , Y 


;RECOPIE ECRAN 








POUR LA CDE "S" 








Arv "T" T r TV »TfTT TV T 1 TV 

SUIVANT A L'A- 


255 


JMP 


S3 










DRESSE DE CELU1 


256 DD4 


CPX 


#1 


; R I EN A FAIRE SI 


308 


STA 


(SB) ,1 


;UU1 Lb FKLOLUb 








UN SEUL ECRAN 




1NC 


e q 
§8 




257 


BNE 


D40 




310 


BNE 


M ft 

D1U 




258 


BIT 


$C083 


;SINON ALLER 


311 


INC 


$9 




DIMINUER 


LE NOMBRE D'ECRANS 


STOCKES 


312 D10 


LDA 


6 CI 

$9 




259 


BIT 


$C083 


;ET RETOUR 


313 


CMP 


$1B 


;DECALAbb EC KAN 








APPLESOFT 








COMPLET FIN I ? 


260 


JMP 


D99 




314 


BNE 


Dll 




261 D40 


DEX 






315 


LDA 


$8 




262 


LDA 


#1 




316 


CMP 


$1A 




263 


STA 


$6 




317 


BEQ 


D12 




264 


LDA 


#$D0 




318 Dll 


INC 


$1C 


;NON => CUNllNUfc. 


265 


b 1 A 






319 


BNE 


D9 




266 D5 


CPX 


#0 




320 


INC 


$1D 




267 


BEQ 


D6 




321 


BNE 


D9 




268 D50 


CLC 






322 D12 


LDA 


$1B 


; DERNIER ECRAN 


269 


LDA 


$6 










STOCKE EST-IL 


270 


ADC 


#$C0 








S / 


MAINTENANT 


271 


STA 


$6 




1 1 "3 

51 5 


CMP 


• nrr* at c 9 


272 


LDA 


$7 






BNE 


Dl 5U 




273 


ADC 


#3 




325 


LDA 


$1A 




274 


STA 


$7 






PMP 






275 


DEX 






9 1 ^ 

5Z 1 




Dy y 




276 


BNE 


D50 




too nl Tn 


INC 


;>1C 


.MAM — -> PPRAN 


277 D6 


LDA 


$18 


;$6-$7 = ADR DU 


/*> r 7 T T F TV »T m 

SUIVANT 














DERNIER ECRAN 


329 


BNE 


Dl J 




278 


TAX 






550 


INC 


SID 




279 


DEX 






551 DLS 


T Pi A 

LDA 






280 


LDA 


#1 






oln 


VIA 




281 


STA 


$8 




*3 "3 1 

555 


LDA 


plD 




282 


LDA 


#$D0 




334 


STA 


SIB 




283 


STA 


$9 








HQ 




284 D7 


CPX 


#0 




336 D99 


DEC 


SD000 


, nur MOD PPDAMC 

;DEC NBK ECKANb 


285 


BEQ 


D8 










STOCKE 


286 D70 


CLC 






55 1 


BIT 


pCUo 1 


• MCT DOM PKl T Pf T 
, ML 1 KUn LW JjCjWI 


287 


LDA 


$8 




338 


JSR 


$B7 


; RETOUR APPLESOFT 


288 


ADC 


#$C0 




5 5 y 


DT C 






289 


STA 


$8 




340 BUFF 


EQU 


S200 






LDA 


$9 










UTILISE ICI POUR 


291 


ADC 


#3 




341 * 






; STOCKER 


292 


STA 


$9 










TEMPORAIREMENT 



Pom's n° 19 



33 



Programme TESTVID16 

10 HIMEM: 9 ' 4096 - 1 

20 D$ = CHR$ (4): PRINT D$"BLOAD VID162": PRINT 

D$"BLOAD INTER" 
30 TEXT: HOME: DIM V$(10) 
40 GOTO 100 

50 FOR I = TO 10: PRINT "LIGNE NO T : DONNEE NO 

V :": PRINT : NEXT : RETURN 
100 FOR J - 1 TO 12: TEXT : HOME : GOSUB 50: GET 

Z$:]S: NEXT 
1 05 TEXT : HOME : GET Z$ 

1 10 FOR I = 1 TO 12:]R,I,V$: GET Z$: TEXT : HOME : FOR 
J - TO 10: PRINT V$(J): NEXT : GET Z$: NEXT 

120 FOR I = 2 TO 12 STEP 2:]R,I,V$: VTAB 24: HTAB 1 : 
PRINT "ECRAN T DEVIENT ECRAN "I -1/2;: GET 
Z$:]U,I: NEXT 

130 FOR I = 1 TO 6:]D,I: NEXT 

140 PRINT: PRINT D$"RUN TEST2VID1 6 

Programme TEST2VID16 

10 HIMEM: 9 * 4096- 1 

30 TEXT: HOME: DIM V$(10) 



40 FOR I - 1 TO 6:]R,I,V$: GET Z$: TEXT : HOME : FOR J 

= TO 10: PRINT V$(J): NEXT : GET Z$: NEXT 
50 DIM W$(1 1 ): TEXT : HOME : FOR I - TO 1 1 : PRINT 

"VARIABLE NO T :";: INPUT W$(l): NEXT 
60 :)R,6,V$: FOR I - TO 1 1 : VTAB 2*1 + 1: HTAB 14: 

PRINT W$(l)":-;: CALL - 868: NEXT : VTAB 23: HTAB 

1 : PRINT "NOUVEAU : ": GET Z$ 
70 :]S: PRINT : PRINT CHR$ (4)"RUN TEST3VID16 

Programme TEST3VID16 

10 TEXT : HOME: DIM V$(11) 

20 FOR I - 1 TO 7:]R,I,V$: GET Z$: TEXT : HOME : FOR J 

- TO 10: PRINT V$(J): NEXT : GET Z$: NEXT 

30 ]R,1 ,V$: VTAB 23: HTAB 1 : PRINT "CET ECRAN VA 
ETRE RECOPIE SUR": PRINT "LES 6 AUTRES..."; 

40 FOR I - 1 TO 7:]U,I: NEXT : PRINT : PRINT CHR$ 
(4)"RUNTEST4VID16 

Programme TEST4VID16 

1 TEXT : HOME : DIM V$(1 1 ) 

20 FOR I - 1 TO 7:]R,I,V$: GET Z$: TEXT : HOME : FOR J 

- TO 1 0: PRINT V$(J): NEXT : GET Z$: NEXT 



Indirection CHRGET 


9070- 


F7 






a s 


z 


r q 


1 P 


C KJ 


yiyu- 


Ab 


25 


C9 


18 


F0 


13 


18 


A5 




















9078- 


OF 


18 


A5 


06 


69 


£ O 


PS 


VJ D 




Ub 


03 






06 


90 


02 


E6 


00BA- 


C9 


3A 


B0 












9080- 


90 


02 


E6 


07 


as 






ns 

U -J 


QIAO 


U / 


zc 


ol 


CO 


A5 


25 


4C 


1C 




















9088- 


C6 


25 


A5 


19 


C9 


55 


nn 






Ql 

7 1 




D 1 
Ol 


CU 




r\r\ 
UU 


DO 


16 




















9090- 


4C 


B4 


91 


2C 


83 


ro 




PI 




i_ 


c O 


ft C 

Ab 


1 f 


O A 


B / 


00 


60 


Indirection INTER 




9098- 


CO 


EE 


00 


DO 


2C 


O L 


rn 


AC 


Q1 RQ_ 


Q R 
O D 


i n 


AO 


1 Q 

1 y 


IT A 


CB 


A5 


ID 




















90A0- 


Bl 


00 


20 


Bl 


00 


20 


BE 




Q 1 rfi — 


On 
3D 


nn 
uu 


uz 


Lo 


rs A 


Ci 


20 


39 


00BA- 


4C 


00 


90 












90A8- 


20 


67 


DD 


20 


5? 


F7 


as 


SI 






^c 


□ n 


Q 1 

y 1 


Q K 


ly 


20 


Bl 












90B0- 


F0 


05 


A2 


35 


4C 


12 


DA 


2C 


91D0- 


00 




□ r 
dd 






D / 


UU 


n 
ZU 




















90B8- 


80 


CO 


AD 


00 


DO 


C5 


50 


B0 


91D8- 


52 
90 
81 


E7 
2C 
CO 


A5 
80 
AA 


51 
CO 
C5 


F0 
AD 
50 


03 
00 
B0 


4C 
DO 
03 


B2 
2C 
4C 


Recapitulation 








90C0- 
90C8- 


06 
81 


2C 
CO 


81 
A5 


CO 
50 


4C 
C9 


B2 
00 


90 
F0 


2C 
E2 


91E0- 
91E8- 










INIT16K 


90D0- 


85 


18 


20 


BE 


DE 


20 


D9 


F7 


91F0- 


B2 


90 


A5 


50 


DO 


03 


4C 


B2 




















90D8- 


A5 


9B 


85 


08 


A5 


9C 


85 


09 


91F8- 


90 


85 


18 


A5 


19 


C9 


55 


DO 


9000- 


2C 


81 


CO 


2C 


81 


CO 


A9 


00 


90E0- 


AO 


04 


Bl 


08 


C9 


01 


DO 


CA 


9200- 


07 


C6 


18 


A5 


18 


4C 


3C 


90 


9008- 


8D 


00 


DO 


2C 


81 


CO 


18 


4C 


90E8- 


18 


A9 


07 


65 


08 


85 


08 


90 


9208- 


E0 


01 


DO 


09 


2C 


83 


CO 


2C 


9010- 


8A 


D8 


FF 












90F0- 


02 


E6 


09 


A6 


18 


CA 


A9 


01 


9210- 


83 


CO 


4C 


A5 


92 


CA 


A9 


01 




















90F8- 


85 


06 


A9 


DO 


85 


07 


E0 


00 


9218- 


85 


06 


A9 


DO 


85 


07 


E0 


00 


Recapitulation 








9100- 
9108- 


F0 
06 


11 
A5 


18 
07 


A5 
69 


06 
03 


69 
85 


CO 
07 


85 
CA 


9220- 
9228- 


F0 
06 


10 
A5 


18 
07 


A5 
69 


06 
03 


69 
85 


CO 
07 


85 
CA 












VID162 


9110- 


4C 


FE 


90 


A9 


00 


86 


1C 


85 


9230- 


DO 


F0 


A5 


18 


AA 


CA 


A9 


01 




















9118- 


19 


AA 


85 


25 


20 


CI 


FB 


2C 


9238- 


85 


08 


A9 


DO 


85 


09 


E0 


00 


9000- 


C9 


5D 


F0 


08 


C9 


3A 


90 


01 


9120- 


80 


CO 


AO 


00 


Bl 


06 


91 


28 


9240- 


F0 


10 


18 


A5 


08 


69 


CO 


85 


9008- 


60 


4C 


BE 


00 


20 


Bl 


00 


C9 


9128- 


C9 


BA 


F0 


03 


4C 


B8 


91 


A5 


9248- 


08 


A5 


09 


69 


03 


85 


09 


CA 


9010- 


53 


F0 


15 


C9 


52 


DO 


03 


4C 


9130- 


19 


F0 


54 


20 


39 


91 


4C 


74 


9250- 


DO 


F0 


18 


A5 


08 


69 


CO 


85 


9018- 


A2 


90 


C9 


44 


DO 


03 


4C 


CC 


9138- 


91 


84 


1A 


E0 


00 


DO 


06 


AO 


9258- 


1A 


85 


1C 


A5 


09 


69 


03 


85 


9020- 


91 


C9 


55 


DO 


E3 


4C 


CC 


91 


9140- 


00 


8A 


91 


08 


60 


86 


IB 


38 


9260- 


IB 


85 


ID 


2C 


83 


CO 


2C 


83 


9028- 


85 


19 


2C 


80 


CO 


AD 


00 


DO 


9148- 


A5 


6F 


E5 


IB 


85 


6F 


B0 


02 


9268- 


CO 


AO 


00 


Bl 


1C 


91 


08 


E6 


9030- 


C9 


OC 


90 


08 


A2 


4D 


2C 


8] 


9150- 


C6 


70 


A2 


00 


AO 


00 


BD 


00 


9270- 


08 


DO 


02 


E6 


09 


A5 


09 


C5 


9038- 


CO 


4C 


12 


D4 


AA 


A9 


01 


85 


9158- 


02 


91 


6F 


E8 


E4 


IB 


F0 


03 


9278- 


IB 


DO 


06 


A5 


08 


C5 


1A 


F0 


9040- 


06 


A9 


DO 


85 


07 


E0 


00 


FO 


9160- 


C8 


DO 


F3 


AO 


00 


A5 


IB 


91 


9280- 


08 


E6 


1C 


DO 


E6 


E6 


ID 


DO 


9048- 


10 


18 


A5 


06 


69 


CO 


85 


06 


9168- 


08 


C8 


A5 


6F 


91 


08 


C8 


A5 


9288- 


E2 


A5 


IB 


C5 


07 


DO 


06 


A5 


9050- 


A5 


07 


69 


03 


85 


07 


CA 


DO 


9170- 


70 


91 


08 


60 


18 


A5 


08 


69 


9290- 


1A 


C5 


06 


F0 


10 


E6 


1C 


DO 


9058- 


F0 


A9 


00 


85 


25 


2C 


81 


CO 


9178- 


03 


85 


08 


90 


02 


E6 


09 


C6 


9298- 


02 


E6 


ID 


A5 


1C 


85 


1A 


A5 


9060- 


2C 


81 


CO 


20 


CI 


FB 


AO 


00 


9180- 


19 


A4 


1A 


A2 


00 


F0 


02 


E6 


92A0- 


ID 


85 


IB 


DO 


C6 


CE 


00 


DO 


9068- 


Bl 


28 


91 


06 


C8 


CO 


28 


DO 


9188- 


19 


C8 


CO 


28 


DO 


96 


E6 


25 


92A8- 


2C 


81 


CO 


20 


B7 


00 


60 


00 



Pom's n° 19 



Nous allons parler. ici. d'intelligence 
artificielle. La premiere chose a faire. 
puisque nous nous supposons intelli- 
gents, est de definir ce que "parler" 
et "intelligence" veulent dire. 
"Parler" ici signifie "communiquer 
une information". On transmet une 
information a travers un systeme de 
communication. Un systeme de 
communication est compose de trois 
elements : un emetteur, le moyen 
utilise et un recepteur. Si pour une 
raison quelconque le recepteur recpit 
l'information deformee, on peut dire 
qu'il n'y a pas eu communication, 
done qu'on n'a pas "parle". Par 
exemple. si vous utilisez la parole 
comme moyen et si vous parlez au- 
vergnat a un chinois, il ne "recevra" 
pas, done vous avez emis des sons, 
mais vous n'avez pas "parle" 
(d'apres la definition precedente). La 
plupart des problemes d'incompre- 
hension (information deformee) vien- 
nent de l'utilisation des mots abs- 
traits. Ceux-ci sont des commodites 
du langage qui reunissent un ensem- 
ble d'actions ou de qualites. Rapidite 
"contient" une caracteristique de de- 
placement, blancheur reunit une des 
caracteristiques des objets blancs. On 
voit done, qu'au dela du mot abs- 
trait, il y a quelque chose de tout a 
fait reel, de physique et de bien defi- 
nissable. 

Dans tous discours. autres que des 
propos de bistrot, et particulierement 
dans des conversations scientifiques, 
les mots abstraits doivent etre definis 
au prealable (vous allez rire. mais il 
est parfois bien utile de definir meme 
les mots non abstraits). 
Ce preambule n'est surement pas 
inutile, car nous abordons quelque 
chose de plus complexe : definir des 
mots abstraits, dont tout le monde 
est convaincu de bien connattre la si- 
gnification. 

Commenoons par "Intelligence", 
nous verrons plus loin le mot 
"Amour". 

devolution simulee 

Dans le livre de Fogel, Owens et 
Walsh (voir bibliographie), on trouve 
une methode pour simuler sur un or- 
dinateur, ce que nous appellons l'in- 
telligence. Leur premier soin a ete de 
definir 1' intelligence, e'est la moindre 
des choses si on veut savoir 
comment faire fonctionner le modele. 
"L'intelligence est la capacite de 
toute entite capable de decision, d'at- 
teindre un succes total ou partiel en 
poursuivant une grande quantite de 
buts dans des circonstances tres diffe- 
rentes". Nous voyons deja qu'il faut 
faire une distinction entre la connais- 
sance et l'intelligence. Celui dont la 
culture et les connaissances sont 
etendues n'est pas automatiquement 
intelligent; par contre, celui qui sait 



L'intelligence Artificielle 

Guido Bettiol 



utiliser son savoir pour atteindre un 
but l'est. 

Fogel et ses amis ont voulu simuler 
un comportement intelligent sur une 
machine et ont defini son intelli- 
gence, done l'intelligence artificielle, 
comme la maniere d'atteindre un but 
par un moyen auquel l'homme n'au- 
rait pas pense. lis ont pris comme 
point de depart le phenomene de 
revolution de la vie sur terre et ils 
ont rentre ce schema de fonctionne- 
ment dans l'ordinateur. Ils ont etabli 
un modele qui est la representation 
mathematique de l'organisme a eru- 
dier. Le comportement de ce modele 
simule une caracteristique essentielle 
du comportement d'un homme dans 
une situation precise. Ce qui est im- 
portant, est que ce modele s'auto- 
modifie, done evolue, pour obtenir 



une sortie qui corresponde au but. 
La place manque ici pour en parler 
plus longuement, ces explications 
sont du type "vite fait sur le gaz" 
(voir leur livre). Avec cette approche 
on peut vraiment parler d'intelli- 
gence. 

Les systemes experts 

Un systeme expert est un pro- 
gramme qui permet, a une grande 
variete de gens, d'avoir acces a des 
informations de haut niveau. Un sys- 
teme expert ne rendra pas intelligent 
un "cretin", ni ne donnera une for- 
mation a celui qui n'est pas un spe- 
cialiste, mais il permettra a quelqu'un 
qui possede deja une certaine 
connaissance de la matiere traitee, de 
resoudre des problemes qui auraient 



TMerry Haurie 



Apple ][+, //e, //c 



II est inutile de presente le jeu de dominos; celui-ci beneficie d'un 
graphisme tres soign6 (en couleur si vous disposez d'une carte 

"Chat Mauve") et les messages transmis par le programme sont, 
au choix, en Fran§ais, en Italien, en Allemand ou en Anglais. 




gDQfflHD Sl 

miiitimimnn 11 iiiniiiiiiim linn - 



Lag J 



Hi Je jci.it 




I tsio l H5!si| 



80.00 F TTC franco 
Bon de commande page 74 




Pom's n° 19 



35 



demande la consultation d'un grand 
nombre de specialistes. II trouvera 
peut-etre, meme, une solution qu'un 
groupe de specialistes n'aurait pas 
trouvee, car une seule entire (l'ordi- 
nateur) traite les donnees de tous les 
specialistes. 

Un systeme expert est un logiciel di- 
vise en deux parties : la base de don- 
nees et le moteur d'inference. 
Tout le monde sait ce qu'est une 
base de donnees, mais detruisons 
tout de suite un mythe : les bases de 
donnees ne sont pas intelligentes, 
elles sont tout a fait stupides. mais la 
masse de donnees qu'elles contien- 
nent est precieuse. Reste a les utiliser 
"intelligemment". Le moteur d'infe- 
rence (d'apres le Larousse, 1'infe- 
rence est une "Operation intellec- 
tuelle par laquelle on passe d'une 
verity a une autre verite, jugee telle 
en raison de son lien avec la pre- 
miere") est done un programme qui 
pose une question et recoit une re- 
ponse. II va alors chercher la reponse 
dans la base de donnees, en utilisant 
les regies qu'il possede. 

Un systeme expert est-il intelligent ? 
En quelque sorte, oui. Un homme 
qui dispose des memes donnees ap- 
pliquera theoriquement le meme rai- 
sonnement, mais en pratique il utili- 
sera des simplifications dues a ses 
proprss connaissances et a son 
conditionnement. La force des ma- 
chines est la stupidite bornee de la 
demarche systematique, comme la 
force de la police est la routine ! 

Que peut-on faire avec un Apple 
dans cette galere ? Compte tenu de 
la faible capacite memoire, due a 
l'adressage limite du microprocesseur 
8 bits, on ne peut pas aller tres loin. 
La memoire virtuelle augmente tout 
de meme les possibilites. 

Quelle que soit la complexity de 
leurs regies, une chose est commune 
aux systemes experts : ils ne peuvent 
pas modifier eux-memes leurs regies 
en fonction de revolution des ques- 
tions / reponses. Or la premiere ne- 
cessite d'un systeme qui se veut in- 
telligent est de pouvoir modifier sa 
structure interne pour simuler le pro- 
cessus d'apprentissage. 
Sur Apple on peut utiliser un sys- 
teme expert, commercialise par MVP 
(voir la bibliographie), ecrit en Forth. 
II est fourni avec le source, est totale- 
ment transparent, peut etre modifie 
(bon courage...) et enfin il est nette- 
ment plus rapide que le Basic. 

Un exemple pratique 

Les langages du type LISP sont bien 
adaptes aux problemes d'intelligence 
artificielle; cependant. il faut pro- 
grammer le moteur d'inference. 
Le langage Prolog a un enorme 
avantage : il EST un moteur d'infe- 



rence. Nous parlerons, ici, de micro- 
Prolog, qui est anglais et assez pro- 
che du standard d'Edimbourg. II est 
sous CP/M et necessite une carte 
Z80. 

Passons maintenant a un exercice 
perilleux en revenant au probleme 
des mots abstraits. Nous allons batir 
un programme a travers lequel on 
definira le mot Amour". Bien que 
tout le monde soit convaincu d'en 
connaitre la signification, il est certain 
que la base de donnees "concretes", 
formee de mots non abstraits que ce 
programme construira, etonnera plus 
d'un d'entre nous. 

Le programme demande de definir 
l'amour. On peut repondre avec un 
mot abstrait ou avec un mot non 
abstrait. Si le mot est abstrait on en 
demande la definition, qui doit etre 
un mot non abstrait. On demande 
ensuite d'associer ce dernier mot a 
une des deux "sources" possibles : 
SEX et BIO. Ainsi, on a construit 
deux tables : une avec un mot non 
abstrait associe a SEX ou BIO, 1' au- 
tre avec un mot abstrait, qui a son 
tour est defini par un mot non abs- 
trait, le tout associe a SEX ou BIO. 
On pourra ensuite lister ces tables et 
les etudier. L'interpretation des resul- 
tats est encore un autre probleme, et 
elle n'est pas envisagee ici. 

On lance "question." et la reponse 
est affectee a la variable X, 
Ensuite "tri X" est appele qui a son 
tour appelle "abs X" (comme s'il 
s'agissait de subroutines) lequel veri- 
fie si le mot entrS fait partie de I'en- 
semble de Fairs "abstrait ..." (ici on a 
rentre seulement tres peu de Faits, 
mais cet ensemble devrait en realite 
contenir TOUS les mots ou expres- 
sions abstraites avec lesquels on ris- 
que de dSfinir "amour"). 
Avec les resultats de ce dernier test, 
on revient en arriere. Si le mot entre 
etait abstrait, on suit la branche 
"then", done "definir-abs X", qui de- 
mande un mot non abstrait. On 
passe ensuite a "analogie X Y" pour 
l'association avec SEX ou BIO et on 
augmente la base de donnees d'un 
nouveau Fait. Ces Faits sont reunis 
par la relation "love", alors que les 
premieres definitions sont reunies par 
la relation "amour". 

Le listing 3 illustre le fonctionement 
de ce programme. A noter que la 
premiere reponse, "a cote de ses 
pompes", bien que composee de 
mots non abstraits, est une expres- 
sion abstraite et n'aurait pas du etre 
rentree. 



Le listing 4 est la liste des nouveaux 
Faits que Ton vient de creer. Ils sont 
reunis sous les relations "amour" et 
"love". 

Voila, notre ordinateur nous a permis 
de voir comment definir un mot abs- 



trait sans equivoque et d'une ma- 
nure reproductible. Ceci est certaine- 
ment le premier pas a faire pour une 
approche de 1' intelligence artificielle 
qui se propose d'explorer le cerveau 
humain et sa facon de raisonner. Le 
but, a long terme, est de reproduire 
ce foncrionnement. 

Jusqu'ou peut aller I' Apple avec 
micro-Prolog ? Le probleme est tou- 
jours le meme : la taille memoire dis- 
ponible et la vitesse. Cependant, on 
peut aller assez loin, puisqu'on peut 
utiliser la memoire virtuelle pour sto- 
cker les donnees. 



Bibliographie 

Les langages 

Systeme expert en Forth distribue 
par MVP (Mountain View Press). PO 
Box 4656. Mountain View, CA 
94040, USA. Une disquette pour 
Apple et un manuel de 60 pages 
pour $100. 

Prologll est distribue par la Societe 
Prologla, 278 rue St. Pierre, 13005 
Marseille, tel. (91) 41 48 49. Trois 
disquettes et le manuel, 2965 Frs 
TTC 

micro-Prolog est distribue par LPA 
(Logic Programming Associated 
Ltd.). 10 Burntwood Close. London 
SW18 3JU, Grande Bretagne. Une 
disquette sous CP/M Z80 pour 
Apple, un manuel de 250 pages et le 
un livre : micro-Prolog, Programming 
in Logic, Clark et McCabe, le tout 
pour $195. 

Les livres 

Introduction aux systemes ex- 
perts, Michel Gondran, Eyrolles. II 
donne une vue d'ensemble du sujet 
et possede une belle bibliographie. 
Artificial intelligence through si- 
mulated evolution, Fogel, Owens 
et Walsh, John Wiley and Sons, 
1966. Un livre passionnant de "haut 
niveau". 

Artificial intelligence : an evolu- 
tionary idea, par Michael Wimble, 
parts 1 et 2, BYTE, mai et Juin 
1977. Organigramme d'une etude a 
partir du livre Artificial Intelligence... 
de Fogel et al, cite ci-dessus. Cet arti- 
cle est tres interessant. II n'est sans 
doute pas inutile de citer la conclu- 
sion de Wimble : "D'apres mon ex- 
perience personnels : n'exposez pas 
cette technique a n'importe qui et 
n'importe quand. Beaucoup de gens 
ont peur des ordinateurs comme ils 
ont peur de tout ce qu'ils ne 
comprennent pas. et leur enthou- 
siasme n'est peut-etre pas egal au 
votre" (e'etait en 77): les mentalites 
ont peut-etre evoluees. mais ce n'est 
pas si sur que ga ! 



Pom's n° 19 



Listing 1 

Structuration de la recherche d'une definition de 
mot abstrait. On admet au depart que la notion 
"Amour" est H6e en dernier lieu aux notions de 
"sexe" et "biologique", dont la definition est donnSe. 
(Le travail a 6t6 effectue sur ThinkTank). 

DEMANDER DEFINITION 

Comparer le mot demande ; la table des mots 
abstraits. 

MOT NON-ABSTRAIT 

Demander d'associer ce nom ; sex-bio. 
MOT ABSTRAIT 

Demander de definir le mot abstrait avec 

un mot non-abstrait. 

Ensuite demander de Passocier ; sex-bio. 
ASSOCIATION A SEX-BIO 

Deux grandes classes: sex et bio. 
Bio est incontrolable. 
Sex est controlable. 
DEFINITIONS 

BIO: Bio est le cote biologique du 
sexe. 

II "est", c'est tout, il est la. On se 
limite ; constater I'existence de la 
pulsion sexuelle. 

SEX: Sex est le cote conscient du 
sexe. On sait qu'il existe et on le 
subit, mais on peut le controler, 
dans une certaine mesure (avec 
une motivation suffisante). 

ON A 2 TABLES ASSOCIEES A SEX-BIO 
Non-abstrait: (amour non-a) 
Abstrait: (love abs (non-a sex-bio)) 
BASE DE DEFINITIONS 
On dispose d'une base de donnees qui 
sont les definitions du mot "amour". 



Listing 2 

Programme 6crit en micro-Prolog. La relation 
"abstrait" doit servir de reference pour detecter les 
mots ou expressions abstraites avec lesquelles on 
peut definir le mot "amour". La relation "mesure" 
materialise les deux Faits "sex" et "bio". 

((abs X) 

(abstrait X) 

(EQ X Y)) 
((associer X Y Z) 

(P " (o/n? ") 

(Rx) 

(IF (EQ x o) ((ADDCL ((love X (Y Z))))) 

((analogie X Y)))) 
((mesure sex)) 
((mesure bio)) 



((analogie X Y) 
(mesure Z) 

(P Y "peut-il se rapprocher de " Z) 
(associer X Y Z)) 
((tri X) 

(IF (abs X) ((definir-abs X)) ((ADDCL ((amour 

x)))))) 
((question .) 

(P "Qu'est-ce que Pamour? ") 

(Rx) 

(tri X)) 
((definir-abs X) 

(PP X est un mot abstrait. II faut le definir.) 

(P "Utilisez un mot non abstrait: ") 

(RY) 

(analogie X Y)) 
((abstrait tendresse)) 
((abstrait extase)) 
((abstrait passion)) 
((abstrait bonheur)) 



LISTING 3 

Dump ecran du programme pendant son 
fonctionnement. (Voir texte). 

question. 
Qu'est-ce que Pamour? .extase 
extase est un mot abstrait. II faut le definir. 
Utilisez un mot non abstrait:. (a cote de ses 
pompes) 

(a cote de ses pompes peut-il se rapprocher de sex 
(o/n) ?. o 



^ i. 

Qu'est-ce que Pamour? .passion 
passion est un mot abstrait. II faut le definir. 
Utilisez un mot non abstrait:. tachycardie 
tachycardie peut-il se rapprocher de sex (O/n)? .n 
tachycardie peut-il se rapprocher de bio (o/n)? .o 



question. 
Qu'est-ce que Pamour? .sexe 



Listing 4 

La trace du programme. On peut y suivre le travail 
effectue par le moteur d'inference. 

((love extase ((a cote de ses pompes) sex))) 
((love passion (tachycardie bio))) 
((amour sexe)) 



Pom's n° 19 



Puisque nous ne 
vous aviez oesoin, nous 

/ 



He 



I I 





Vmion Calc 



MousePaim 



Une des plus grandes bibliotheques de logiciels 
programmes compatibles avec l'Apple De : jeux, 
gestion de base de donnees, analyse financiere, 



h h 





UilpLjj'iii 



Un clavier 63 touches type AZERTY comprenant une accentuation complete et des 
caracteres majuscules/minuscules integres. 

mXsoum C r'rT' r , C °»T Ur j ComecUurpourUUcUur Conner pour \ 

pour^soum. pour U modem, pour TV. coukur. pour I momteur video, de disquette externt . mbnmante ou traceur. Void comment 

/ / 1'ecran de haute j 

1 1 1 1 m 1 m 1 1 1 1 u r 1 1 J 1 1 1 1/1 I I I LL SSr 

j ] autantdeme"moire 

/ '~ en un seul appareil 

^Sk\ jStoi I etait indispensable. 




Seednn S A.R.L., Avenue de lOcfcuiie - Z.A. de Courtabceuf B P 131. 919-h Les UUs Cedex. 



savions pas de quoi 
vous avons tout donnS. 





• B*Jgri Familial 

Is au monde; 16.000 

x, traitement de texte, 

e, planification. 



Apflr Wnttr 



StrttUttit 





















Applr V'orla Omms II 



Lei Ounam naltw 

Void 8 exemples de ce que vous pouvez afficher sur votre 
ton. 8 parmi 16.000 ! a vous de decouvrir les autres. 

Lorsque vous aurez essaye I'Apple Dc vous ne regretterez pas 
notre generosity. 




t se presente I'Apple lie relie a 
definition et a la souris. Ses connexions directes vous permettent d'utiliser 
toutes les fonctions dont vous avez besoin : imprimante, modem., 
avons donne autant de place, autant de beaute, 
2 (128 Ko) , autant de possibilites 
I e'est que cela 



Apple presente FApple He. 




Apple 



Ou est la souris ? 

Marianne Sutz 




Dans un programme Basic, determi- 
ner la presence, ou la non presence, 
de la souris dans une zone donnee 
conduit invariablement a des series 
de tests aussi peu rapides qu'inele- 
gants. Pour palier ceia, nous vous 
proposons une routine en langage 
machine d'emploi aise. 

Utilisation de la routine 

11 faut tout d'abord implanter la rou- 
tine en memoire (dans un tableau de 
variables entieres). Pour cela, vous 
pouvez employer la methode qui 
vous convient le mieux : 

• code objet sous forme de "Data" 
comme dans l'exemple ci-joint; 

• code objet sous la forme d'une 
chalne de caracteres, comme pour 
les routines "BSAVE et BLOAD" 
du numero 17 de Pom's; 

• chargement direct en memoire 
avec la routine "BLOAD", a 
condition d'avoir prealablement 
transforme le code objet en un fi- 
chier binaire. Le petit programme 
suivant se charge de cette tache : 



DEFINT A-Z 

DIM C(19) 

DATA 0,0,0,&h4E56,0,&h487A 
DATA &hFFF6,&hA972,&h4267 
DATA &h47FA,&hFFEE,&h2F13 
DATA &h486E,8,&hA8AD 
DATA &h47FA,&hFFE0,&h369F 
DATA &h4E5E,&h4E75 



FOR 1=0 TO 19:READ C(I):NEXT 
OPEN-OM,"Nom defichier" 
A!-VARPTR(C(0)) 
FOR l=0 TO 39 
PRINT#1 , 
NEXT 



Vous pouvez ensuite appeler la rou- 
tine en specifiant le quatrieme ele- 
ment du tableau de variables comme 
adresse de base : 

Adresse! = VARPTR (Tableau%(3)) 
pour OPTION BASE 0; 
Adresse! = VARPTR (Tableau%(4)) 
pour OPTION BASE 1. 
La pile etant utilisee comme tampon, 
il faut passer les parametres (coor- 
donnees du rectangle) de maniere in- 
habituelle : d'abord X2. suivi de Y2, 
XI et enfin Yl. Ainsi un appel de la 
routine prend la forme : Adresse! 
X2%, Y2%, XI %, Yl% ou, avec la 
version 1.0 du Basic Microsoft, 
CALL Adresse! (X2%, Y2%, XI %, 
Yl%). Les arguments doivent abso- 
lument etre des variables entieres ou 
des expressions resultant en des va- 
leurs inferieures ou egales a 32767 
(valeur maximale possible sur 16 bits 
en complement a deux). Tout autre 
type d'argument provoquerait un de- 
calage dans la pile, suivi d'effets plus 
ou moins imprevisibles. 

Au retour, le premier element du ta- 
bleau de variables entieres contient 
un drapeau indiquant si le curseur se 
trouve (ou ne se trouve pas) dans le 



rectangle donne, et ce quelle que soit 
la position du bouton de la souris : 

Tableau%(0) = &h0100 si oui; 
Tableau%(0) = &h0000 si non. 

Exemple d'utilisation 

Le petit programme Basic propose 
avec cet article illustre une des appli- 
cations possibles de la routine. On 
affiche deux rectangles (on pourrait 
tres bien s'en passer, il s'agit simple- 
ment de visualiser les zones) puis 
nous allons voir si le curseur se 
trouve dans l'un d'eux. On initialise 
le curseur type "Multiplan" si Ton est 
dans le rectangle de gauche, le cur- 
seur en forme de montre si Ton est 
dans le rectangle de droite. Dans le 
cas ou nous nous trouvons dans 
aucun des deux rectangles, on re- 
prend le curseur standard en forme 
de fleche. Vous pourrez remarquer 
que le programme arrive a "suivre" 
des deplacements tres rapides de la 
souris, ce qui ne serait pas le cas 
avec des tests du type : 

N%=MOUSE(0) 
X%=MOUSE(l) 
Y%=MOUSE(2) 

IF X%>249 AND X%<451 AND 
Y%>49 AND Y%<201 THEN... 

La routine employee pour changer 
rapidement la forme du curseur est 
reprise du numero precedent de 
Pom's; nous vous proposons done 
de vous y reporter pour de plus 
amples commentaires. 



Source de la routine "Souris/rectangle' 



0000 




.Trap 


_GetMouse 


$A972 


0000 




Trap 


_PtlnRect 


$A8AD 


0000 










0000 


0000 


Drapeau 


DC 





0002 










0002 


0000 0000 


Position 


DC.L 





0006 










0006 


4E56 0000 




LINK 


A6,#0 


000A 


487A FFF6 




PEA 


Position 


000E 


A972 




GetMouse 




0010 


4267 




CLR 


-(SP) 


0012 


47FA FFEE 




LEA 


Position,A3 


0016 


2F13 




MOVE.L 


(A3),-(SP) 


0018 


486E 0008 




PEA 


8(A6) 


001 C 


A8AD 




_PtlnRect 


001 E 


47FA FFE0 






Drapeau,A3 


0022 


369F 




MOVE 


(SP) + ,(A3) 


0024 


4E5E 




UNLK 


A6 


0026 


4E75 




RTS 





_PtlnRect retourne $0100 au sommet de la pile si la souris 
se trouve a I'interieur du rectangle donn6, ou $0000 dans le 
cas contraire. 

2 octets pour passer au Basic le resultat du test. 

4 octets pour stockage position de la souris (retournee 
par_Getmouse). 

A6 contient I'adresse du sommet de la pile. 
Empile I'adresse du tampon de 4 octets 'Position'. 
Retourne les coordonnees de la souris dans 'Position'. 
2 octets au sommet de la pile pour le resultat du test. 
L'adresse du tampon 'Position' est placee dans A6. 
Empile le contenu du tampon 'Position'. 
Empile I'adresse des coordonnees du rectangle (placee dans 
la pile depuis le Basic). 

L'adresse du tampon 'Drapeau' est placee dans A3. 
Depile le resultat du test et le place dans 'Drapeau', qui 
correspond a I'element du tableau de variables entieres. 
Retour au Basic. 



40 



Pom's n° 19 




Exemple d'utilisation de la 
routine "souris/rectangle" 



DEFINT A-Z 

DIM C(19),D(10):Dr=0:DrC=0:B!-0 
' Data pour routine "Souris/rectangle" 

DATAO,0,0,&h4E56,0,&h487A,&hFFF6,&hA972,&h4267 

DATA&h47FA,&hFFEE,&h2F13,&h486E,8,&hA8AD 

DATA&h47FA,&hFFE0,&h369F,&h4E5E,&h4E75 

' Data pour changement de curseur (voir Pom's 18) 

DATA&h4E56,0,&h42A7,&h3F2E,8,&hA9B9,&h2057 

DATA &h2E90,&hA851,&h4E5E,&h4E75 

' Implantation des routines en memoire 

FOR l-O TO 19:READ C(I):NEXT 

FOR l-O TO 10:READ D(I):NEXT 

' Pour visualiser les rectangles 

LINE(50,50)-(200,200)„B 

LINE(250,50)-(450,200)„B 

' Adresses des points d'entree dans les routines 

A!-VARPTR(c(3)):'routine "souris/rectangle" 

BI-VARPTR(d(0)): , routine"curseurs" 

Boucle: 

Dr-0 

' 1 dans Dr si la souris est dans le rectangle de gauche 

' 2 dans Dr si la souris est dans le rectangle de droite 

A! 200,200,50,50:IF C(0) THEN Dr-1 

A! 450,200,250,50:IF C(0) THEN Dr-2 

' Si Dr-Drc, on a pas change de zone 

IF Dr-Drc THEN Boucle 

Drc-Dr: ON Dr GOTO ID3.ID4 

' Si la souris ne se trouve pas dans un rectangle (Dr=0), 
' le curseur en forme de fleche est utilise. 
INITCURSOR:GOTO Boucle 

' Curseur type "Multiplan" si dans rectangle de gauche 
ID3: 

Bl 3:GOTO Boucle 

1 Curseur en forme de montre si rectangle de droite 
ID4: 

B! 4:GOTO Boucle 



l ~Recevez gratuitement 
le n°0 du journal 
du Macintosh 




Joindre 
5 F en 
timbres 
(Frais 
de port) 



Icones : 135 bis, rue du Fg de Roubaix 
SWO^ille^KLJO^.aO^T 



Disqeette Maicimtoslh 
14/15/16 

Cette disquette regroupe les programmes 
Basic publics dans les num6ros 14, 15 et 
16 de Pom's ("Editeur", "Mac/Apple ][", 
"Paint/Basic", "Paint/Start", et d'autres 
programmes "exemples" employes pour 
1'illustration des articles publies dans ces 
numeros). Vous y trouverez aussi les 
polices "Los Angeles", "Cairo", "Mos 
Eisley", "Hollywood" et "Manhattan". 
Enfin, les programmes "Localizer" 
(configuration du clavier AZERTY pour la 
France ou un autre pays) et "Copie de 
disque", qui autorise des copies de disquettes 
avec un seul lecteur sur un Mac 128Ko, en 
seulement quatre passages. 

150,00 F TTC franco 
Bon de commande page 74 



mm. 




Pom's n° 19 



41 



Lucy : un accessoire de bureau 

Jean-Luc Bazanegue 



Ici commence une serie d'accessoires 
de bureau destines a rendre la vie 
des utilisateurs du Macintosh un peu 
plus facile. Le premier permet de sa- 
voir quelles polices sont disponibles 
sur la disquette d'amorcage, et ce 
sans avoir a charger une application. 
De meme, lors de l'emploi d'un logi- 
ciel comme Mac Write, Word, etc... il 
n'est pas particulierement aise de sa- 
voir dans quelle police se trouve tel 
caractere special; une option de l'ac- 
cessoire autorise une visualisation de 
toute la police. 

Ceux d'entre-vous qui desirent pro- 
grammer le Macintosh en assembleur 
trouveront dans le source de nom- 
breux renseignements sur les fonc- 
tions classiques de l'appareil, a sa- 
voir : 

Traltement de texte 

L'accessoire utilise pratiquement tout 
ce que Ton peut trouver dans un 
traitement de texte : insertions de ca- 
racteres ou de chatnes, visualisation 
du point d'insertion (petite barre cli- 
gnotante), selection normale ou eten- 
due (avec "Majuscule-click"), selec- 
tion par programme (sans inter 
vention de l'utilisateur), couper, co- 
pier, coller, effacer et, enfin, defile- 
ment vertical du texte en fonction de 
la hauteur des caracteres. A noter 
que l'accessoire ne supporte pas - du 
moins pas encore - les "couper, co- 
pier, coller" vers ou depuis une ap- 
plication. 

Fenetres 

Le listing montre comment une fene- 
tre est creee et mise a jour en cas 
d'effacement partiel ou total suite a 
un passage au second plan, ou en- 
core a un positionnement hors des li- 
mites de l'ecran. 



Contrdles 

Nous mettons ici en oeuvre un bou- 
ton standard, un bouton type 
"radio", des cases de controle et 
enfin des barres de defilement. Ces 
dernieres sont un peu plus 
complexes a utiliser que les controles 
i, et nous pensons que le 
source eclaircit certains points portant 
sur la gestion de ces fonctions essen- 
tielles. 



Fonctions dlverses 

Nous employons aussi diverses routi- 
nes liees aux polices de caracteres, a 
la souris, a 1'affichage de dessins, a la 
conversion de nombres en chaines, 
etc... Cet accessoire sans pretention 
represente ainsi un concentre de ce 
que Ton peut trouver dans une appli- 
cation plus ambitieuse. 
Faute de place, nous n'avons pas pu 
joindre au listing toutes les remar- 
ques necessaires a la bonne compre- 
hension du systeme. En revanche, 
pour ceux qui veulent en savoir plus, 
la disquette Mac 19 comporte, outre 
l'accessoire en question (que vous 
pourrez installer sur d'autres disquet- 
tes avec "Font/DA Mover"), le meme 
source mais cette fois commente 
point par point. Celui-ci peut bien 
sur etre assemble ou consulte avec 
l'editeur du systeme de developpe- 
ment 68000, mais peut aussi 6tre 
charge depuis "DiskWrite" 

Voici pour ce premier accessoire, 
mais nous avons deja plusieurs idees 
en tete. Par exemple : ne vous est-il 
jamais arrive de vous dire, lorsque le 
Mac vous transmet un message du 
type "La disquette est presque satu- 
ree...", qu'il serait pratique de pou- 
voir detruire ou proteger un fichier 
sans quitter 1' application en cours ? 
Enfin, vous desirez peut etre savoir 
pourquoi nous avons baptise la 
chose "Lucy in the Sky with Dia- 
monds". Eh bien... pourquoi pas ? 



Relations entre 
accessoires de bureau et 
applications 

Un accessoire de bureau peut etre 
considere comme une "mini-applica- 
tion" capable de fonctionner en pa- 
rallel avec l'application en cours. 
Pour que ceci puisse se faire, l'appli- 
cation doit suivre des regies precises. 

Tout d'abord, l'application doit affi- 
cher le menu "Pomme" afin de per- 
mettre a l'utilisateur l'appel d'un ac- 
cessoire. Elle doit aussi comporter le 
menu "Edition", avec les comman- 
ded "Couper, Copier, Coller, Effa- 
cer", en prevision d'eventuels acces- 
soires utilisant ces fonctions. Un 
accessoire de bureau peut avoir son 



propre menu ; une application doit 
done reserver, dans la barre des 
menus, la place pour un menu sup- 
plemental (si Ton regarde un pro- 
gramme comme MacDraw, on 
s'apercoit que la regie n'est pas tou- 
jours respectee !). 

Pendant le deroulement de l'applica- 
tion, et si l'utilisateur choisit un ac- 
cessoire dans le menu "Pomme", 
l'application doit se charger de l'ou- 
verture de l'accessoire. Lorsque l'ac- 
cessoire est ouvert, a chaque fois que 
l'utilisateur appuie sur le bouton de 
la souris, l'application doit determiner 
si Taction est effectuee dans l'acces- 
soire, auquel cas elle doit lui trans- 
mettre l'evenement par l'interme- 
diaire d'une routine du systeme. Cet 
evenement sera ensuite traite par 
l'accessoire lui-meme. Si plusieurs 
accessoires sont presents au meme 
moment sur le bureau, le principe est 
le meme, l'evenement etant simple- 
ment dirige vers l'accessoire 
conceme. Lorsque l'utilisateur passe 
d'une fenetre de l'application a la fe- 
netre d'un accessoire, l'application 
doit rendre invalides les articles des 
menus qui lui sont propres et rendre 
valides les articles "Couper, Copier, 
Coller et Effacer" du menu "Edi- 
tion". L'inverse doit se produire au 
moment ou l'utilisateur revient a l'ap- 
plication (1'etat du menu "Edition" 
au retour d'un accessoire de bureau 
est determine par l'application). 

La fermeture de l'accessoire peut 
s'effectuer de differentes facons : 

• si l'article "Fermer" est disponible 
dans un menu "Fichier", et que 
l'utilisateur choisit cet article au 
moment oil l'accessoire est actif, 
l'application doit se charger de la 
fermeture de l'accessoire ; si l'ac- 
cessoire comporte une case de fer- 
meture, et que l'utilisateur "cli- 
que" sur cette case, ie gestionnaire 
du bureau (une partie du systeme 
d' exploitation du Mac) se charge 
de la fermeture; 

• si l'utilisateur quitte l'application 
en cours, le ou les accessoires sont 
automatiquement fermes par le 
systeme; 

• enfin, un accessoire peut tres bien 
se fermer lui-meme. 




Pom's n° 19 



Lucy.Asm 

; Routines utilises* par 
: raccessoire. Surun512K. 
; la definition des Traps' 
; peul etre remplacee par : 
; INCLUDE MacTraps.D 

; Gestionnairs de ressources 



.Trap 


_Count Resources 


SA99C 


.Trap 


_Getlnd Resource 


$A99D 


Trap 


_GetReslnlo 


CAQAP 


; QuickDraw 




.Trap 


_CopyBits 


$A8EC 


.Trap 


_DrawString 


$A884 


.Trap 


_EraseRect 


SA8A3 


.Trap 


_FrameRect 


$A8A1 


Trap 


_Get Font Into 


JA88B 


Trap 


GlobarToLocal 


$A871 


Trap 


_MoveTo 


$A893 


Trap 


_PtlnRoct 


$A8AD 


Trap 


_SetPort 


$A873 


Trap 


_TextFace 


$A888 


Trap 


_TextFont 


$A887 


Trap 


_TextSize 


$A88A 



; Gestionnaire de polices 




Trap 


_RealFont 


$A902 


; Gestionnaire rfevenements 




Trap 


_GetMouse 


$A972 


;Gestic 


nnairede tenet res 




Trap 


_BeginUpdate 


$A922 


Trap 


_DisposWindow 


$A914 


Trap 


_EndUpdate 


$A923 


Trap 


NewW/indow 


$A913 


;TEXTEd» 




Trap 


_TEActivate 


$A9D8 


Trap 


_TEDeactivate 


$A9D9 


Trap 


_TECarText 


SA9D0 


Trap 


_TECIk* 


JA9D4 


Trap 


_TECopy 


$A9D5 


Trap 


TECut 


$A9D6 


Trap 


TEDelete 


$A9D7 


Trap 


_TEDispose 


$A9CD 


Trap 


_TEIdle 


$A9DA 


Trap 


_TEInsert 


$A9DE 


Trap 


_TEKey 


$A9DC 


Trap 


TENew 


$A9D2 


Trap 


_TEPaste 


$A9DB 


Trap 


_TEScroll 


$A9DD 


Trap 


_TESetSelect 


$A9D1 



Trap 


JTEUpdate 


JA9D3 


; Gestionnaire de controtes 




Trap 


. urawoontrow 


»awsm 


■ i rap 


_RndControl 


<AOfiP 
»A96C 


Trap 






Trap 


ZoetCtlValue 


UOAn 


Trap 


_GetCRe»Con 




Trap 


_NewControl 


$A964 


Trap 


_SetaiValue 


$A963 


Trap 


SetMaxCtl 


$A965 


Trap 


_SetMinCtl 


»A964 


Trap 


JTrackControl 


$A968 


;Util«airesToolBox' 




Trap 


_Pack7 


$A9EE 



; Equivalences. Sur un 512K, 

; remplacee* par : 
; INCLUDE SysEquD 
; INCLUDE ToolEqu.D 
; INCLUDE Ouk*EOU.D 


mButDwnEvt 


EQU 


1 


keyDwnEvt 


EOU 


3 


keyUpEvt 


EQU 


4 


autoKeyEvt 


EQU 


5 


updatEvt 


EQU 


6 


noG row Doc Proc 


EQU 


4 


teLineHite 


EQU 


$18 


teAscent 


EOU 


$1A 


teFont 


EQU 


$4A 


teFace 


EQU 


$4C 


teMode 


EQU 


$4E 


teSize 


EQU 


$50 


teNLines 


EQU 


$5E 


teLines 


EOU 


$60 


dCll Window 


EQU 


$1E 


dCtlRefNum 


EQU 


$18 


WlndowKind 


EQU 


$6C 


CSCode 


EQU 


$1A 


CSParam 


EQU 


$1C 


evtNum 


EOU 


$0 


evt Message 


EQU 


$2 


evtMouse 


EQU 


$A 


evtMeta 


EQU 


$E 


evtMBut 


EQU 


$F 


checkBoxProc 


EQU 


1 


radioButProc 


EQU 


2 


scrollBarProc 


EQU 


16 


accEvent 


EQU 


$40 


accRun 


EQU 


$41 


accUndo 


EQU 


$44 


accCut 


EQU 


$46 



accCopy 


EQU 


447 


acc Paste 


EQU 


$48 


acc Clear 


EQU 


S49 


inUpButton 


EQU 


20 


inDownButton 


EQU 


21 


inPageUp 


EOU 


22 


InPageDown 


EOU 


23 


inThumb 


EQU 


129 




; Debut du code. Un accessoire de bureau est un 
; 'Driver 1 . A ce litre, N comports un 'en-tele' 
; qui n'apparait pas dans une application 



Base 


DC 


$2400 




DC 


10 




DC 


$01 6A 




DC 







DC 


Ouverture-Base 




DC 


Ouveriure-Base 




DC 


Controls-Base 




DC 


Ouverture-Base 




DC 


Fermeture-Base 


Trtre 


DC.B 


29,' Lucy in the Sky with 



; Ouverture de I'accessoire ; aftichage de la 
; fenfttre, aftichage des boutons, etc... 



; Fenetreexistante7Sinon,miBeen 
: raccessoirs 

Ouverture MOVEM.L A1-A4,-(SP) 

MOVEL A1.A4 

TST.L DCttWindow<A4) 

BNE FenetreEx 
; Initialisation de la tenet re 

CLH.L -(SP) 

CLR.L -(SP) 

PEA RectDial 

PEA Titre 

MOVE #$100.-(SP) 

MOVE #noGrowDocProc,-(SP) 

MOVEQ.L #-1.D0 

MOVEL D0,-(SP) 

MOVE #$100,-(SP) 

CLR.L -<SP) 

jgewWrxtow 

MOVEA.L (SPH.A0 

MOVEL A0,DaivVinaow(A4) 

MOVE DctlRetNum<A4),WindowKind(A0) 

MOVEL A0,-(SP) 

_SetPort 

; Initialisation du tampon pour police complete 



ff = 

Disqmiett© 

Beinni^ro 17 

La Disquette Mac 17 comporte les 
programmes Basic : 
"Catalogue sur imprimante", pour obtenir 

toutes les informations sur les fichiers 
(type, createur, index, position du premier 
bloc pour la partie "donnees", position du 
premier bloc pour la partie "ressource", 
longueurs logique et physique, fichiers 
proteg6s ou non, icdnes invisibles, etc... ) 

sur papier ou a l'ecran. 
Routines "BLOAD" et "BSAVE", similaires 
aux routines de l'Apple ][, elles autorisent 
des sauvegardes et chargements rapides de 
fichiers binaires (donnees graphiques, 
tableaux de variables, etc... ). 

80,00 F TTC franco 
Bon de commande page 74 




Pom's n° 19 



LEA TamponPolice,A6 

MOVE «J21.D7 

PoliceComp MOVEB D7.(A6)+ 

MOVEB #$20,(A6) + 

AODO #1.07 

CMPI #256.07 

BNE.S PoliceComp 
; Debut mseapur 

MOVEL DC«Window(A4).-(SP) 
_BeginUpdate 
; Vers sous-programme aflichage des rectangles 
BSR Rectangles 

; Vers sous-programme atlichage style polices 

CLR -<SP) 

_Text Font 

BSR Chaines 
; Vers sous-programme atlichage 'be8tiole , 

MOVEL 0CtlWmdow(A4),D7 

BSR AtCoc 
; Reinitialisation style 

LEA Apparence^B 

CLR (A6) 
; Initialisation dee zones de controle 
; Barre de defilement pour le texte 

CLR.L -(SP) 

MOVEL DctlWindow(A4),-(SP) 

PEA RectCtM 

CLR.L -(SP) 

MOVE #$100,-(SP) 

CLR.L -(SP) 

MOVE i^cSproc.-fSP) 

CLR.L -(SP) 
_NewControl 

LEA HandleCtll.A6 

MOVE L (SP)*,(A6) 
; Ba-re de defilement pour choix police 

CLR.L -(SP) 

MOVEL DCtlWindow(A4).-(SP) 

PEA RectCtC 

CLR.L -(SP) 

MOVE »$100,-(SP) 

CLR -(SP) 

CLR.L -(SP) 

MOVE # scrollBarProc.-(SP) 

MOVEQ.L #1,D7 

MOVEL D7.-(SP) 



; Bouton 'GraB' 



MOVE #radioButProc,-(SP) 
MOVEQ.L #4,D7 
MOVEL D7,-(SP) 
NewCortrol 
LEA HandteStand,A6 
MOVEL (SP).,(A6) 

CLR.L -(SP) 
MOVEL DaWindow(A4),-(SP) 
PEA RectGras 
-(SP) 

#$100,-(SP) 
-(SP) 
#1.-(SP) 



J 



CLR.L 
MOVE 
CLR.L 
MOVE 
MOVEQ.L #6.07 



LEA HandlePolices.A6 

MOVEL (SPMA6) . 
; Nombre de ressouroes de type 'FONT V. — 

CLR -(SP) 

MOVEL #»464F4E54.-(SP) 

_Count Resources 

MOVE (SP)+.D7 
; Lecture et atlichage des noms 



BLNom 



LEA HandleCtl2A6 

MOVEL (SP)*.(A8) 

; Barre de defilement pour choix taiHe 

CLR.L -(SP) 

MOVEL DCtlWindow(A4),-(SP) 

PEA RectCtl3 

CLR.L -(SP) 

MOVE #$100,-(SP) 

CLR -(SP) 

CLR.L -(SP) 

MOVE * scrollBarProc.-(SP) 

MOVEQ.L #2,D7 

MOVEL D7,-(SP) 
_NewControl 

LEA HandleCtl3.A6 

MOVEL (SPK(A6) 

; Bouton 'OK' 

CLR.L -(SP) 

MOVEL DCtlWindov«r(A4),-(SP) 

PEA RectOK 

PEA NomOK 

MOVE #$100,-(SP) 

CLR.L -(SP) 

CLR.L -(SP) 

MOVEQ.L »3,D7 

MOVEL D7,-(SP) 

_NewControl 

LEA HandleOKA6 

MOVEL (SP)*,(A6) 
; Bouton 'Standard 1 



MOVE #checkBoxProc,-(SP) 

MOVEL D7,-(SP) 
_NewControl 

LEA HandleGras.A6 

MOVEL (SP)f,(A6) 
; Bouton 'Italique' 

CLR.L -(SP) 

MOVEL DCtlWindow(A4).-(SP) 

PEA Rectltal 

CLR.L -(SP) 

MOVE #$100,-(SP) 

CLR.L -(SP) 

MOVE #1.-(SP) 

MOVE #checkBoxProc,-(SP) 

MOVEQ.L #6,D7 

MOVEL D7,-(SP) 

_NewControl 

LEA Handleltal,A6 

MOVEL (SP)*.(A6) 
; Bouton 'Souligne' 

CLR.L -(SP) 

MOVEL DCtlWindow(A4),-(SP) 

PEA RectSoul 

CLR.L -(SP) 

MOVE #$100,-(SP) 

CLR.L -(SP) 

MOVE #1.-(SP) 

MOVE #checkBoxProc.-(SP) 

MOVEQ.L #7,07 

MOVEL D7,-(SP) 

_NewControl 

LEA HandleSoul.A6 

MOVEL (SP)».(A6) 

; Bouton 'Relief 

CLR.L -(SP) 

MOVEL DCtlWindow(A4),-(SP) 

CLR.L -(SP) 

MOVE #$100.-(SP) 

CLR.L -(SP) 

MOVE #1,-(SP) 

MOVE »checkBoxProc,-(SP) 

MOVEQ.L #8,07 

MOVEL D7.-(SP) 

_NewControl 

LEA HandleRelief,A6 

MOVEL (SP)»,(A6) 
; Bouton 'Ombre' 

CLR.L -(SP) 

MOVEL DCtlWindow(A4),-(SP) 

PEA RectOmbre 

CLR.L -(SP) 

MOVE #J100,-(SP) 

CLR.L -(SP) 

MOVE #1.-(SP) 

MOVE #checkBoxProc,-(SP) 

MOVEQ.L #9.D7 

MOVEL 07,-(SP) 

_NewControl 

LEA HanrJeOmbre,A6 

MOVEL (SP)*,(A6) 



LEA 


NumRefPolices.A3 


LEA 


BGetDltemA2 


CLR 


06 


CLR.L 


-<SP) 


MOVEL 


#»464F4E54,-(SP) 


MOVE 


D7,-(SP) 


Getlnd Resource 


PEA 


BGetDltem 


PEA 


BgetDltenn.2 


PEA 


TamponNom 


_GetReelnlo 

LEA TamponNom.A6 


MOVEB 


(A6),D3 


BEQ 


BErr 


MOVEB 


#32.(A6) 


ADDQ 


#1,06 


MOVE 


(A2),(A3)» 


MOVEL 


A6,-(SP) 


ANOI.L 




ADDQ 


W 


MOVEL 


D3,-(SP) 


LEA 


HandlePolices.A6 


MOVEL 


(A6).-(SP) 


JTEInsert 




PEA 


CR 


MOVEL 


#2,-(SP) 


MOVEL 


(A6).-(SP) 


JTEInsert 




SUBQ 


#1,D7 


BNE.S 


BLNom 



Berr 



; Valeur maxi de la barre de defilement 
; en fonction du nombre de polices 

LEA NombPolices,A6 
MOVE D6,<A6)» 
MOVE #1,(A6) 
LEA HandlePolices.A3 
MOVEL (A3),-(SP) 
_TEAc1ivate 
CMP #6,-2(A6) 
BLE.S 
LEA 
MOVEL 
MOVE 
SUBQ 
MOVE 



Retour 



Retour 

HandleCtl2,A3 
(A3).-(SP) 
-2(A6),D7 
#8.D7 
D7.-(SP) 
SetMaxCil 
LEA HandlePolicee,A6 
MOVEQ #1.07 



CLR.L 


-(SP) 


MOVEL 


0CtlWindow(A4),-(SP) 


PEA 


RectStand 


CLR.L 


-(SP) 


MOVE 


#$100,-(SP) 


MOVE 


»1.-(SP) 


CLR 


-(SP) 


MOVE 


•1.-ISP) 



Atlichage des polices presentee sur la 
disquette (dans le lichier sysleme ). 



Initialisation de la zone de texte 

CLR -(SP) 
_TextFace 

CLR.L -(SP) 

PEA RectVPokces 

PEA RectVPokces 
_TENew 



; Vers sous-programme pour visualiser 
; la police selectionnee 

BSR Selection 
; Vers sous-programme pour atlichage 

;taillesvalides 

BSR TaillesP 
; Vers sous programme caracteristiques 
; de la police 

BSR CaracTexte 

; Initialisation zone pour le texte et 

; aflichage du texte par delaut 

CLR.L -(SP) 
PEA RectDTexte 
PEA RectVTexte 
_TENew 

LEA HandleTex<e.A6 
MOVEL (SPK,(A6) 
PEA NomDefaut 
MOVEL #87.-<SP) 
MOVEL (A8),-(SP) 
_TEInsert 

; Rn mise a jour 

MOVEL DCtlWindow(A4),-(SP) 

_EnoUpdate 
; Activation de la zone de texte 

LEA HandleTexte,A6 ' 

MOVEL (A6).-<SP) 

_TEActivate 
; Fm de la mise en place de I'accessoire 
FenetreEx MOVEM.L (SP)-..A1-A4 



44 



Pom's 19 



CLR 
RTS 



DO 



Routine appelee par le systems en cas 
tfevenement correspondant au masque situe 
dans I'en-tete de raocessoire 



Ev1 



Ev2 



CMPI 
BEO 
CMPI 
BEQ 
CMPI 
BNE 
BSR 
BRA 



•keyDwnEvt.DO 

ToucheE 

#autoKeyEvt,DO 

ToucheE 

•updatEvt.DO 

Ev2 



FinControle 



Controle 



FinConlrole 



MOVEM.L A1-A4.-(SP) 


MOVEL 


A1.A4 


MOVE 


CSCode(A0).D0 


CMPI 


«accEvent,DO 


BEO 


Evenements 


CMPI 


#accRun,00 


BEQ 


Tempo 


CMPI 


#accCut,DO 


BEO 


Coupof 


CMPI 


•accCopy.DO 


BEQ 


Copier 


CMPI 


#accPaste,DO 


BEQ 


Coller 


CMPI 


#accClear,DO 


BEQ 


Ettacer 


MOVEM.L 


(SP).,A1-A4 


CLR 


00 


RTS 





Touche entoncee. Si louche 'commando', 
verification si 'Couper 1 , 'Coller*, ect... 
Sinon, attichage du caractere. 



MOVEL (A6).-(SP) I "J 

_TEUpd.,e |_J 

PEA RectVTailles ^~ ~ 

LEA HandleTaiHes.A6 
MOVEL (A6),-(SP) 
_TEUpdate ' 
MOVEL EvtMessafle(A4).-(SP) 
_DrawControto 

MOVEL EvtMessage<A4),-'SP) 

_EndUpdate 

RTS 



; Fermeture de raocessoire 

Fermeture MOVEM.L A1-A4,-(SP) 

MOVEL MM 

MOVEL DCtlWindow(A4),-(SP) 

CLR.L DOIWindowIM) 



BRA.S FinControle 



Routine appelee six tois par seconde pour 
le clignotement de la barre rfinsertion 



Tempo LEA HandleTexte.A6 

MOVEL (A6),-(SP) 
JTEIdle 

BRA FinControle 



; Traitement des 6v6nements 

Evenements MOVEL CSParam(A0).A4 
MOVE EvtNum(A4),D0 



CMPI 
BNE.S 
BSR 
BRA 



#mBut0wnEvt,D0 
Ev1 

Contenu 
FinControle 









; 'Click' dans la fenetre de raocessoire 




MOVES 
ANDI.B 


#1,01 


; Routine pour deteminer la zone concemee 




BEQ.S 
MOVEB 
CMPI.B 
BEQ 


ToucheEO 

evtMessage»2(A4),D0 

#6.00 

Couper 


• 

Contenu 


LEA 

MOVEL 


DialogPtr.A6 
DCtrWindow<A1),(A6) 






MOVEL 
_Se1Port 


(A6MSP) 




CMPI.B 


#9,D0 








BEO 


Copier 




LEA 


EventRecord.A6 




CMPI.B 


#11,00 




MOVEQ 


#3.D7 




BEQ 


Coller 




CLR 


M 


Touche EO 


MOVEL 

ANDI 

MOVE 


evtMessage(A4),00 
#$FF,D0 

DO.-(SP) 


TrEvR 


MOVEL 

ADDQ 

DBRA 


0(A4,D6),0(A6,D6) 

#4,D6 

07,TrEvR 




LEA 


HandleTexte.A4 




PEA 


Event Record*10 




MOVEL 


(A4),-<SP) 




GlobafToLocal 




TEKey 




CLR.B 


-(SP) 




BRA 


FinControle 




LEA 

MOVEL 
PEA 


Event Record.10.A6 

(A6),-(SP) 

RectVPolioes 










PtlnRect 




;Miseajourdelatenetre 


en cas 




MOVEB 


(SP)*,00 


; rfeffacement total ou partiel). 




BNE 


DFPolices 










CLR.B 


-(SP) 


MiseJour 


MOVEL 


EvtMessage<A4),-(SP) 




LEA 


Event Record*10.A6 








MOVEL 






MOVEL 


EvtMessage<A4),-(SP) 




PEA 






_SetPort 






PtlnRect 






BSR 


Rectangles 




MOVEB 


(SP)*.D0 




CLR 


-(SP) 




BNE 


DFTailles 




Text Font 






CLR.B 


-(SP) 




CLR 


-<SP) 




LEA 


Event Records 0,A6 




Text Face 






MOVEL 


(A6),-(SP) 




MOVE 


#12,-(SP) 




PEA 


RectVTexte 




Text Size 






PtlnRect 






BSR 


Chaines 




MOVEB 


(SP)t,D0 




MOVEL 
BSR 


EvtMessa8e{A4),07 
AtCoc 




BNE 
CLR.B 


DFTexte 
-(SP) 




PEA 


RectVTexte 






EventRecord-.10.A6 




LEA 


HandleTexte,A6 




MOVEL 


(A6).-(SP) 




MOVEL 


(A6).-(SP) 




PEA 


RectCoc 




_TEUpdate 




_PtlnRect 






PEA 


RectVPohce6 




MOVEB 


(SP)t,D0 




LEA 


HandlePolices,A6 




BNE 


DCoc 



Bisqoett© Macimtoslh 

Elle comporte le nouveau fichier systeme et 

la version 4.1 du Finder, plus rapide et 
complete que la precedente. Le programme 
"System update" autorise l'implantation des 
nouveaux Finder et Systeme sur vos 
anciennes disquettes. "BR Demo" est un 
programme qui permet l'affichage temporise 
d'ecrans cn*6s avec la sequence de touches 
"Commande-Shift-Majuscule-3". "Font/DA 
Mover" est une version am£lioree de "Font 
Mover". De plus, il permet de manipuler les 
accessoires de bureau. Enfin, outre les 
programmes publies dans le num6ro 18, 
vous trouverez les polices Times, Courier, 
Symbol et Helvetica. 



80,00 F TTC franco 
Bon de commande page 74 




Pom's n° 19 



45 



; Routine pour determiner si action dans 
; une zone de controle et, si oui, la Que He 

CLH -(SP) 
MOVEL 
LEA 

MOVEL (A4),-(SP) 
PEA WhichControl 
_RndControl 
MOVE (SPKDO 
BEQ.S ContS 
LEA WhichControl.A3 
LEA ValeurCtl,A2 
CLR -(SP) 
MOVEL (A3),-(SP) 
_GetCtlValue 
MOVE (SPK(A2) 
CLR -<SP) 
MOVEL (A3).-(SP) 
MOVEL (A6),-(SP) 
CLR.L -(SP) 
_TrackControl 
MOVE (SPKDO 
BNE.S Contt 
RTS 

CLR.L -(SP) 
MOVEL (A3),-(SP) 
GetCRefCon 



ContS 
Conl1 





MOVEL 


(SPKD1 




BEQ 


ControlTexte 




CMPI 


#1.01 




BEQ 


ControlP 




CMPI 


#2,D1 




BEQ 


ControlTail 




CMPI 


#3,D1 




BEQ 


BOX 




CMPI 


#4,01 




BEQ 


BStd 




BRA 


BApparence 


■ Traitement d'une action dans la bane de 


; defilement des polices ou des tallies 


ControlP 


CLR 


D4 




BRA.S 


ControlPTO 


ControlTail 


MOVEQ 


•4.D4 


ControlPTO 


CMPI 


#254, DO 




BEQ 


ContS 




CMPI 


#inUpButton,DO 




BEQ 


RecheHP 




CMPI 


#inDownButton,D0 




BEQ 


RecheBP 




CMPI 


•inPageUp.DO 




BEQ 


PageHautP 




CMPI 


*nPageDown,DO 




BEQ 


PageBasP 




CMPI 


•inThumb.OO 




BEQ 


AscenseurP 




BRA 


ContS 



Traitement d'une action sur Tascenseur- 
de la barre de defilement dee polices ou 

.™.'. a . i ]'.™... 



AscenseurP CLR -(SP) 

MOVEL (A3),-(SP) 

_GetCtlValue 

MOVE (SP).,D5 

LEA ValeurCtl.A4 

MOVE (A4).D6 

SUB D5.D6 

MOVE #16.D7 

MULU D6.D7 

CLR -(SP) 

MOVE 07,-(SP) 

LEA HandlePolices.A3 

MOVEL 0(A3,D4).-(SP) 

_TEScroll 

RTS 

; Traitement dune acton sur la part* 
; page haul' de la barre de defilement des 
; polices ou des tallies 



PageHautP CLR 



-(SP) 

MOVE (SPKD5 
MOVE 05.D6 



SUBQ #6,D6 

BMI.S PageHautPO 

SUBQ #6,D5 

MOVE #16 , 6.D6 

BRA.S PageHautPt 

PageHautPO MOVE #16,D6 

MULU D5.D6 

CLR 06 

PageHautPt CLR -(SP) 

MOVE D6,-(SP) 

LEA HandlePcJics5,A6 

MOVEL 0(A6,D4),-(SP) 
_TEScroll 

MOVEL (A3),-(SP) 

MOVE D5,-(SP) 
_SelCtlValue 
RTS 



Traitement d une action sur la partie 
'page bas' de la barre de defilement dee 
polices ou des tallies 



.............. 






PageBasP 


CLR 


-(SP) 




MOVEL 


(A3).-(SP) 




_GetCtl Value 




MOVE 


<SP)*.D5 




CLR 


-(SP) 




MOVEL 


(A3),-(SP) 




_GelMaxCtl 




MOVE 


(SPKD6 




MOVE 


D5.D7 




ADOQ 


#6,D7 




CMP 


D6.D7 




BGT.S 


PageBasPO 




ADOQ 


#6,D5 




MOVE 


#-96.06 




BRA.S 


PageBasPI 


PageBasPO 


MOVE 


06,07 




SUB 


D5.D7 




MOVE 


D6.D5 




MOVE 


K-16.D6 




MULU 


D7.D6 


PageBasP! 


CLR 


-(SP) 




MOVE 


D6,-(SP) 




LEA 


HandlePotices.A6 




MOVEL 


0(A6,D4),-(SP) 




TEScrofl 






MOVEL 


(A3).-(SP) 




MOVE 


D5.-(SP) 




SetCtlValue 




RTS 





; Traitement dune action sur la fleche 
; vers le haul de la barre de c 
; des polices ou des tailk 



RecheHP CLR -(SP) 

MOVEL (A3).-(SP) 

_GetCIIValue 

MOVE (SPKDO 

BEQ ContS 

SUBQ #1,00 

MOVEL (A3),-(SP) 

MOVE DO.-(SP) 

_SetCtlValue 

CLR -(SP) 

MOVE #16,-(SP) 

LEA HandlePotices,A3 

MOVEL 0(A3.D4),-(SP) 

_TEScroll 

RTS 



Traitement dune action sur la fleche 
vers le bas de la barre de defilement 
des polices ou des tallies 



RecheBP CLR -(SP) 

MOVEL (A3),-(SP) 
_GetCtlValue 
MOVE (SP).,06 

MOVEL (A3),-(SP) 
_GetMaxCtl 

MOVE (SP).,D6 

CMP D6.D5 

BEOS R6P0 

AODQ #1,D5 

MOVEL (A3),-(SP) 



RBPO 



MOVE D5,-(SP) I = T 

_SetCtlValue 

clr -(SP) r*^ I 

MOVE #-18,-(SP) CT~ 

LEA HandlePolices,A3 ? 

MOVEL 0(A3,D4),-(SP) 
_TEScroll 
RTS 



; Action dans la barre de defilement du 
;texte 



LEA 


HandleTexte,A6 


MOVEL 


<A6).A6 


MOVEL 


(A6J.A8 


MOVE 


$18(A6).D7 


CMPI 


•254,00 


BEQ 


ContS 




#inUpButton,DO 


BEQ.S 


RecheH 


CMPI 


#inDownButton,DO 


BEQ.S 


RecheB 


CMPI 


#inPageUp,DO 


BEQ 


PageHaut 


CMPI 


•inPageDown.DO 


BEQ 


PageBas 


CMPI 


•inThumb.DO 


BEQ 




RTS 





Traitement rf une action sur la fleche 
vers le haut de la barre de detjiemert 
du texte. 



RecheH 



RO 



CLR -(SP) 

MOVEL (A3),-(SP) 

_GetCtlValue 

MOVE (SP)*,D0 

BEQ.S RO 

SUBQ #1.D0 

MOVEL (A3),-(SP) 

MOVE DO.-(SP) 

_SetCtlValue 

CLR -<SP) 

MOVE D7,-(SP) 

LEA HandleTe«te^3 

MOVEL (A3),-(SP) 

_TEScroll 

RTS 



Traitement dune action sur la fleche 
vers le bas de la barre de defilement 
du texte. 



RecheB 



CLR -(SP) 
MOVEL (A3),-(SP) 
^GetCtlValue 
MOVE (SPKDO 



CMP 

BEQ.S 
ADDQ 



#48,00 

RBO 

#1,00 



RBO 



MOVEL (A3),-(SP) 

MOVE DO.-(SP) 

_SetCtlValue 

CLR -(SP) 

NEG D7 

MOVE 07,-(SP) 

LEA HandleTexte.A3 

MOVEL (A3),-(SP) 

_TEScroll 

RTS 



; 

; Traitement d'une action dans la partie 
; 'page haur de la barre de defilement 
; du texte. 

PageHaut CLR -(SP) 

MOVEL (A3).-(SP) 
_GetCtlValue 
MOVE (SPKD5 
MOVEL #112,D0 
DIVU D7.00 
MOVE D5.D6 
SUB D0.D6 
BMI.S PageHautO 
SUB 00,05 
MULU D0.07 




Pom's n° 19 



PageHautO 



PageHaut! 



MOVE 

BRA.S 

MULU 

MOVE 

CLR 

CLR 

MOVE 

LEA 



07.06 

PageHaut 1 

D5.D7 

D7.D6 

05 

-<SP) 

D6.-(SP) 

HandleTexte,A6 



MOVEL (A6),-(SP) 
_TEScroll 

MOVEL (A3),-(SP) 
MOVE D5,-(SP) 
_SetCtlValue 
RTS 



; Traitement tfune action but Tascenseur 1 
; de la barre de defilement du texte. 



Ascenseur CLR 



-(SP) 

MOVEL (A3).-(SP) 
GetCtlValue 



MOVE 

LEA 

MOVE 

SUB 

MULU 

CLR 

MOVE 

LEA 



(SP)t,D5 

ValeurCtl.A4 

(A4),D6 

D5.D6 

D6.D7 

-(SP) 

D7,-(SP) 

HandleTexte.A3 



MOVEL (A3),-(SP) 
_TEScroll 
RTS 



Traitement d'une action dans la partie 
; page bas' de la bane de defilement 
;' du texte. 



PageBas 



CLR -(SP) 
MOVEL <A3).-(SP) 
_GetCtlValue 

MOVE (SP).,D5 

CLR -(SP) 

MOVEL (A3).-(SP) 

GelMaxCII 

MOVE (SP)*.D6 

MOVEL #112.00 

OIVU D7.D0 



MOVE 

AOD 

CMP 

BGT.S 

ADD 

MULU 



D5.D4 

D0.D4 

D6.D4 

PageBasO 

D0.D5 

D0.D7 





NEG 


D7 


MOVE #4.-<SP) 




MOVE 


D7.D6 


_TextFace 




BRA.S 


PageBas 1 


ADO D5.D4 


PageBasO 


MOVE 


06,04 


MOVE D3,-(SP) 




SUB 


D0.D4 


MOVE 04.-<SP) 




MOVE 


06,05 


MoveTo 




MULU 


04,07 


PEA C4 




NEG 


D7 


_D™wString 




MOVE 


D7.D6 


MOVE *8,-<SP) 


PageBas 1 


CLR 


-(SP) 


_TextFace 




MOVE 


D6,-(SP) 


ADO 05,04 




LEA 


HandleTexte,A6 


MOVE D3,-(SP) 




MOVEL 


(A6).-(SP) 


MOVE D4,-(SP) 




TEScroll 




_MoveTo 




MOVEL 


(A3),-(SP) 


PEA C6 




MOVE 


D5,-(SP) 


DrawString 




_SetCWalue 


MOVE #16,-(SP) 




RTS 




_TextFace 

ADO D5.D4 








MOVE D3.-(SP) 


; Sous -programme pour trace des rectangles 


MOVE D4.-(SP) 








MoveTo 


Rectangles 


PEA 


RectTexle 


PEA C6 




_Frame fleet 


_OrawString 




PEA 


Red Polices 


RTS 




Frame Reel 



PEA RectTailles 

_FrameRect 

RTS 



; Sous-programme pour aftichage des chatnes 



Chaines 



MOVE 


#226, D3 


MOVE 


#142,04 


MOVE 


#16,D5 


MOVE 


D3,-(SP) 


MOVE 


D4,-(SP) 


MoveTo 




PEA 


C1 


_DrawS1ring 


MOVE 


#1,-(SP) 


_TextFace 




ADD 


DS.04 


MOVE 


D3,-(SP) 


MOVE 


D4.-(SP) 


MoveTo 


PEA 


C2 


_DrawString 


MOVE 


#2,(SP) 


Text Face 




ADD 


D5.D4 


MOVE 


D3,-(SP) 


MOVE 


D4,-(SP) 


.MoveTo 




PEA 


C3 


_DrawString 



C' - 



; Sous-programme pour aftichage bestwle' 



AtCoc 



LEA 

LEA 

MOVEL 

MOVEL 

MOVEA.L 

ADDQ.L 

MOVEL 

PEA 

PEA 

CLR 

CLR.L 

_CopyBits 

RTS 



B«MapCoc.A6 

DataCoc.A3 

A3.(A6) 

A6,-(SP) 

D7.A6 

*?,A6 

A6,-(SP) 

RectSrcCoc 

RectCoc 

-(SP) 

-(SP) 



Sous-programme pour visualisation de la 
police ou de la laille selectionnee 



Selection SUBQ #1,D7 

ADD 07.D7 

MOVEA.L A6.A3 

MOVEA.L (A6),A6 

MOVEA.L <A6).A6 

CLR.L 06 

MOVE teUnes(A6.D7).D6 

MOVEL D6,-(SP) 

CLR.L D6 



Oisqeette Macietoslh 
EEm6ro 19 

Vous trouverez, sur cette nouvelle disquette, 
la nouvelle version de MacWrile (4.5). Ce 

programme de traitement de texte, 
contrairement a son pred6cesseur, est "Disk 

Based", ce qui signifie que la taille des 
fichiers trails n'est plus directement liee a 
la mdmoire disponible. MacWrite 4.5 est 

accompagnd de MacPaint 1.5, qui a 
l'avantage de ne plus "perdre la grille" lors 

des defacements. Le dossier systeme 
comporte les accessoires de bureau "Lucy" 
et "5"' (le fichier source de "Lucy", situ6 sur 
la disquette, est comments point par point). 
Les exemples li6s aux articles sont bien sOr 
presents sur la disquette. 

80,00 F TTC franco 
Bon de commande page 74 




Pom's n° 19 



MOVE teLines*2(A6,D7),D6 
MOVEL D6.-(SP) 
MOVEL (A3),-(SP) 
JTESet Select 
RTS 



Sous-programme pour determination et 

aflichage des t. 



TaillesP 



BTa.lle 



Staille 



HetourT 
RetourTI 



MOVEM.L 
CLR 

_TextFont 
CLR 

JTextFace 

MOVE 

JTextSize 

CLR.L 

PEA 

PEA 

_TENew 

LEA 

MOVEL 

CLR 

LEA 

aR 

LEA 

LEA 

MOVE 

ADD 

MOVE 

LSR 

CLR.L 

MOVEQ 

CLR.B 

MOVE 

MOVE 

_RealFont 

MOVEB 

BEQ 

ADDQ 

MOVE 

MOVEL 

LEA 

CLR 

_Pack7 

MOVEB 

MOVEB 

MOVEL 

ANDI.L 

ADDQ 

MOVEL 

LEA 

MOVEL 

JTEInsert 

PEA 

MOVEL 

LEA 

MOVEL 

_TEInsert 

ADDQ 



A4.-(SP) 
-(SP) 

-(SP) 

»12,-(SP) 

-(SP) 

RectVTailles 
RectVT ailles 

HandleTailles.A6 



#4,06 

-(SP) 

D7,-(SP) 

D6,-(SP) 

(SP)*.D5 

STaille 

#1,(A3) 

D6.(A4)* 

D6.D0 

TamponNombre,AO 
-(SP) 

(A0),D2 

#32,(A0) 

AO.-(SP) 

#$FF,D2 

«1.D2 

D2.-(SP) 

Handk»Tailes.A1 

(AI).-(SP) 

CR 

»2,-(SP) 

HandleTai»es,A1 

(A1),-(SP) 

#1.D6 



CMP »128.D6 

BNE BTaille 

MOVE #1,2(A3) 

LEA Handk»Tailes,A4 

MOVEL (A4).-(SP) 
_TEActivate 

LEA NombTailles.A6 

CMP #6,(A6) 

BLE.S RetourT 

MOVE (A6),D6 

SUBO #6,D6 

BRA.S RetourTI 
CLR 
LEA 

MOVEL (A4),-(SP) 

MOVE D6,-(SP) 

SetMaxCtl 

MOVEL (A4),-(SP) 

CLR -(SP) 
_SetCtlValue 

LEA HandleTaiHes.A6 

MOVEQ #1,D7 

BSR Selection 

MOVEM.L (SP)t,A4 
RTS 



HandleCtl3.A4 



BStd LEA Apparenoe.A6 

MOVE (A6),D0 

BEQ.S BStdF 

CLR (A6) 

LEA HandleSt and .A6 

MOVEL (A6).-(SP) 

MOVE #1.-(SP) 
_SetCtlValue 

MOVE #4,D6 

CLR D7 

LEA HandleGras.A6 

BBStd MOVEL 0(A6,D7).-(SP) 

CLR -(SP) 
_SetCtlValue 

ADDQ #4,07 

DBRA D6, BBStd 

BStdF RTS 



; Sous-programme pour caracteristiques du 
; texte. 



JTextSize 
LEA Apparence,A6 
MOVE (A6),-(SP) 
_Te«Face 
PEA Font Into 

_GetFontlnto 
RTS 



; Traitement d'une action sur le bouton 'OK' 



BOK 



BSR CaracTexte 

LEA Handk>Texte.A4 

MOVEA.L (A4),A4 

MOVEA.L (A4),A4 

LEA FontlrKo,A6 

MOVE (A6).teAscent(A4) 

MOVE (A6).D0 

ADD 2(A6).D0 

ADD 6(A6),D0 

MOVE D0,teUneHite(A4) 

LEA PoliceSelec,A6 

MOVE (A6),D7 

ADD 07.D7 

MOVE 0(A6.D7),D7 

LSR #7,07 

MOVE D7,teFont(A4) 

LEA TaHleSelec,A6 

MOVE (A6).D7 

ADD D7.D7 

MOVE 0(A6,D7),teSize(A4) 

LEA Apparence,A6 

MOVEB 1(A6),teFace(A4) 

LEA HectDTex1e,A6 

MOVEL (A6)*.(A4). 

MOVEL (A6),(A4) 

LEA HandleTexte.A4 

MOVEL (A4),-(SP) 

_TECafText 

PEA RectVTexte 

_EraseRect 

PEA RectVTexte 

LEA HandleTexte.A6 



-(SP) 

RectOTexte | ' 

e >«»-. — — 



_EraseRect 
CLR.L 
PEA 
PEA 
_TENew 
LEA HandleTexte.A6 
MOVEL (SP)t,(A6) 
MOVEL (A6),-(SP) 
JTEActivate 

PEA TamponPolice 
MOVEL #44MSP) 
MOVEL (A6),-(SP) 
_TEInsert 

LEA HandleCtl1,A6 
MOVEL (A6),-(SP) 
CLR -(SP) 
_SetCtlValue 
RTS 



Action dans la fenetre de texte 



(SP)*,(A6) 


CaracTexte LEA 


PoliceSelec,A6 


DFTexte LEA 


Event Records 0.A6 


04 


MOVE 


(A6),D7 


MOVE 


4(A6),D0 


NombTai»es.A3 


ADD 


D7.D7 


ANDI 


#»200,D0 


(A3) 


MOVE 


0(A6,D7),D7 


MOVE 


#9,D1 


NumTailles,A4 


LSR 


#7.D7 


LSR 


01,00 


PoliceSelecAB 


MOVE 


D7,-(SP) 


MOVEL 


(A6),-(SP) 


(A6),D7 


_TextFont 


MOVEB 


DO.-(SP) 


D7.D7 


LEA 


TailleSelec.A6 


LEA 


HandleTexte^6 


0(A6.D7),D7 


MOVE 


(A6).D7 


MOVEL 


(A6),-(SP) 


#7,D7 


ADD 


D7.D7 


_TECIick 




D6 


MOVE 


0(A6,D7),-(SP) 


RTS 





Traitement d'une action sur un bouton 
permettant de modifier le style 



MOVEL (A6),-( 
_TEUpdate 

LEA HandleCtlt^B 
MOVEL (A6).-(SP) 
CLR -(SP) 
_SetCtlValue 
RTS 



Traitement cfune action sur la 'bestole' 



DCoc LEA HandleTexte^6 

MOVEL (A6),-(SP) 
_TEDispose 
PEA RectVTexte 



BApparence 


MOVE 


#1,D4 




SUBQ 


#S,D1 




LSL 


D1.D4 


StyleG 


LEA 


Apparence,A6 




EOR 


04,(A6) 




MOVE 


(A6),D6 




AND 


D4.D6 




BEO.S 


StyleG2 




MOVE 


#1,04 




BRA.S 


StyleG3 


StyleG2 


CLR 


04 


StyleG3 


LEA 


WhichControl.A6 




MOVEL 


(A6),-(SP) 




MOVE 


D4.-(SP) 




_SetCtlValue 




LEA 


Apparence^6 




MOVE 


(A6),00 




BNE.S 


StyleGS 




MOVE 


#1.04 




BRA.S 


StyleG S2 


StyleGS 


CLR 


D4 


StyleGS2 


LEA 


Handk»Stand,A6 




MOVEL 


(A6),-(SP) 




MOVE 


D4.-(SP) 




^SelCllValue 




RTS 




; Selection d'une police 




DFPolices 


PEA 


PosMouse 




GetMouse 




LEA 


PosMouse,A6 




MOVE 


(A6),D0 




CMPI 


#128,00 




BLE 


DFPolicesO 




CMPI 


#144,00 




BGT.S 


DFPolicesI 




MOVEQ 


#1,D7 




BRA.S 


DFPoNcesT 


DFPolicesI 


CMPI 


#160, DO 




BGT.S 


DFPolices2 




MOVEQ 


#2.D7 




BRA.S 


DFPolicesT 


DFPolices2 


CMPI 


#176, DO 




BGT.S 


DFPolicesS 




MOVEQ 


#3.07 




BRA.S 


DFPolicesT 


DFPcJices3 


CMPI 


#192,00 




BGT.S 


DFPolices4 




MOVEQ 


#4,07 




BRAS 


DFPolicesT 


DFPolices4 


CMPI 


#208, DO 




BGT.S 


DFPolices5 



48 



Pom's n° 19 



Lucy in the Sky mith Diamor 



jjdgTTn/nccqqd 

ge| as v #-ppi« % x y> Y< % y< 




Montreal 
Stuttgart 



Cupertino 



Sunnyvale 
Sydney 
Las Uegas 



[72 R5 



<•) Standard 

□ Gras 

□ ftafique 

□ Souli g ne 



s □ 



ujmlblr.e 






MOVEQ 


#5,D7 




BRA.S 


DFPohceeT 


DFPolices5 


CMPI 


#224,00 




BGT.S 


OFPolicesO 




MOVEQ 


•6,07 


OFPolicesT 


LEA 


Nombpolk»8,A6 




MOVE 


(A6),D6 




CMP 


06,07 




BGT.S 


OFPolicesO 




LEA 


HandleCtl2.A4 




CLR 


-(SP) 




MOVEL 


(A4),-(SP) 




^GeiCtlValue 




ADD 


(SP)-,D7 




CMP 


2(A6),D7 




BEQ.S 


OFPolicesO 




MOVE 


D7.2(A6) 




LEA 


HandtePolices,A6 




SSR 


Selection 




BSR 


TaillesP 


DFPolicesO 


RTS 




; Selection d une taitle 


DFTailtes 


PEA 


PosMouse 




GetMouse 




LEA 


PosMouse.A6 




MOVE 


(A6).D0 




CMPI 


#128,D0 




BLE 


DFTailtesO 




CMPI 


»144,D0 




BGT.S 


DFTaillesI 




MOVEQ 


#1,D7 




BRA.S 


DFTaillesT 


DFTa.lk.s1 


CMPI 


•160.D0 




BGT.S 


0FTaills«2 




MOVEQ 


»2,D7 




BRA.S 


DFTaillesT 


DFTailles2 


CMPI 


#176,00 




BGT.S 


DFTaill863 




MOVEQ 


#3,D7 




BRA.S 


DFTaillesT 


0FTailles3 


CMPI 


#192. DO 




BGT.S 


DFTailles4 




MOVEQ 


#4,07 




BRAS 


DFTaillesT 


DFTailtes4 


CMPI 


#208, DO 




BGT.S 


DFTailles5 




MOVEQ 


#5.07 




BRA.S 


DFTaillesT 


0FTailles5 


CMPI 


#224, DO 




BGT.S 


DFTaillesO 




MOVEQ 


#6,D7 


DFTaillesT 


LEA 


NombTailles.A6 




MOVE 


(A6).D6 




CMP 


D6.D7 




BGT 


DFTaillesO 




LEA 


HandleCtl3.A4 




CLR 


-(SP) 




MOVEL 


(A4),-(SP) 




J3etCtlValue 




ADD 


(SP)»,D7 




CMP 


2(A6).D7 



BEQ.S DFTaillesO 

MOVE 07.2<A6) 

LEA HandleTailles.A6 

BSR Selection 
DFTaillesO RTS 



Fonctions standards 



Couper 


LEA 


HandleTexte,A6 




MOVEL 


(A6),-(SP) 




TECut 




CouperO 


BRA 


Nncontrole 


Copier 


LEA 


MinHlaTu via aR 

nanaie i exie^so 




MOVE.L 


(Ao).-(S>H) 




TECopy 






BRA.S 


Cry, mu-n 


Coller 


LEA 


HandleTexte,A6 




MOVEL 


(A6),-(SP) 




JTEPaste 






BRA.S 


CouperO 


Etfacer 


LEA 


HandleTexte.A6 




MOVEL 


(A6),-(SP) 




JTEDelet. 




BRAS 


CouperO 


; Constantes et tampons 




NombPolices 


DC 





PcJiceSelec 


DC 





NumRelPolices DCB 


40,0 


NombTailles 


DC 





TaitoSeiuc 


DC 





NumTailles 


DCB 


20,0 


Apparence 


DC 





itemHit 


DC 





ValeurCtl 


DC 





HauteurCarac 


DC 





Event Record 


DCB 


8,0 


Dialog Ptr 


DC.L 





HandleTexte 


DC.L 





HandlePolices 


DC.L 





HandleTailles 


DC.L 





HandleCtM 


DC.L 





HandleCtl2 


DC.L 





HandleCtl3 


DC.L 





HandleOK 


DC.L 





HandleStand 


DC.L 





HandleGras 


DC.L 


o 


Handleltal 


DC.L 





HandleSoul 


DC.L 





Handle Relief 


DC.L 





HandleOmbre 


DC.L 





HandteArt 


DC.L 





WhichControl 


DC.L 





PosMouse 


DC.L 





HandteScrap 


DC.L 





RectDial 


DC 


50,100,281 ,490 


RectTexte 


DC 


7,7,119,377 



RectPolrces 


DC 


127.7.224,104 


RectTailles 


DC 


127,135,224.175 


RectDTexte 


DC 


g.i&iooo^r-^ 


RectVTexte 


DC 


9,12,118.364 


RectV Polices 


DC 


128,8.223,103 *■ 


RectVTailles 


DC 


128,136.223,174 


RectCoc 


DC 


149,322.203.366 


RectDrafl 


DC 


24,4.338,508 


RectCtH 


DC 


7,367.119.383 


RectCtl2 


DC 


127,103.224,119 


RectCtO 


DC 


127,174,224,190 


RectOK 


DC 


203,310,222,377 


RectStand 


DC 


132.207,144,221 


RectGras 


DC 


148.207,160,221 


Rectltal 


rv* 

LA/ 


1RA 9fl7 17fi 


Red Soul 


DC 


1 nr\ o(\7 1 qo oo 1 

1 o\J,£\j / , 1 1 


Reel Relief 


DC 


196-207 208 221 


RedO mb re 


DC 


212,207,224,221 


roniinio 


LA/D 


4 n 


1 £U 1 1 LKJl ll»JI 11 


DCB B 


32 32 


Tampon Nomb re 


DCB 


2,0 


BrtMapCoc 


DC.L 





Oct LianoCoc 


DC 


6 


RectSrcCoc 


DC 


0,0,61.44 


/>Q 

CR 


UO.D 


11 n 
13,0 


a 


DCB 


S.'Standartf.O 


C2 


DCB 


4,'Gras',0 


C3 


DCB 


B.'ltalique'.O 


C4 


DCB 


B/Soulione'.O 


OR 




6,'Relter.O 


C6 


DCB 


5,'Ombre' 


Tampon Police 


DCB.B 


446.0 


BGETDITEM 


DCB 


8,0 


NomOK 


DCB 


2,'OIC.O 


NomDetaut 


DCB 


'Exemple de texte. 



DataCoc DC.L 
DC J. 
DC J. 
DCL 
DC.L 
DCL 
DCL 
DCL 
DC.L 
DC.L 
DC.L 
DCL 
DCL 
DCi. 
DCL 
DC.L 
DCL 
DC.L 
DCL 
DCL 
DCL 
DCL 
DCL 
DCL 
DC.L 
DCL 
DCL 



DCB Vous pouvez obtenir la' 
DCB 'police complete en eir 
DCB 'quant sur la "bestiole".' 
$00080002,$00000004,$00040000 
$0006000C,$00000006,$OOOCOOOO 
$O0060O0C,$000000O5,$3F9400O0 
$0002C068,$00000001 ,$001 00000 
$00020008,$00000002,$7FC80000 
$0004BBA4,$00000004.$1 F040000 
$00042084,$0000001 E.$404F0000 
$006A404A,$C00001 DF,$209F7000 
$02B3DF79,$A8000561 ,$FFF0D400 
$OAD4FFE5,$6A001580,$3F803500 
$2B00O0O0,$1A803600,$000O0D80 
$6C1C1542,$06C05422,$00020540 
$A92273BO,$C2AOD83C,$8A490360 
$A8208A48,$C2A0D020,$8A482160 
$B1207249,$C1A05400,$00000540 
$70000000 ,$01C03000 ,$00000180 
$3 1 500001 ,$5 1 801 805 ,$55540300 
$08O0O000,$02000A00,$O0OO0A00 
$04 



$01822A88,$300000C2,$40486000 
$00648024,$C000003C,$80278000 
$001 8E0E3,$OO000009,$FFF200O0 
$0009FFF2,$00000004,$FFE40000 
$OOO49F24,$OOOOO0E2,$6OC8EO00 
$031 751 5D,$1 8001 C08,$1 1020700 
F.$C07FFF80 



Lucy.R 

Lucy.Rsrc 

TYPE DRVR = PROC 

Lucy in the Sky with Diamonds ,28 

Lucy 



Lucy. Link 

I 

Lucy.Rel 
$ 



Pom's n° 19 



Fermez les fenetres ! 

Julien Thomas 



La version 2.0 du Basic Microsoft 
permet la gestion des fenetres, done 
leur fermeture. Cependant, trois fe- 
netres echappent a la regie : les deux 
fenetres de "List" et la fenetre de 
commande. II est en effet impossible 
de fermer ces trois dernieres depuis 
un programme Basic. Nous avons 
trouve cela facheux car, si ces fene- 
tres ne sont pas fermees avant le 
debut d' execution du programme, 
l'utilisateur final peut les selectionner, 
les deplacer et les fermer, ce qui a 
pour effet d'affecter la presentation 
du programme. 



La solution consiste en I'emploi de la 
petite routine ici proposee, qui, pla- 
cee en debut de programme, efface 
toutes les fenetres, une par une, jus- 
qu'au "nettoyage" complet de 
l'ecran. La methode urilisee est sim- 
ple : on appelle une routine du sys- 
teme qui retourne un pointeur sur la 
fenetre situee au premier plan, s'il 
n'y a pas de fenetre (done pas de 
pointeur), on revient au Basic, sinon, 
on appelle une seconde routine du 
systeme qui efface la fenetre. et ainsi 
de suite... 



Source de la routine d'effacement des fenetres 



0000 




.Trap 


FrontWindow 


$A924 


0000 




.Trap 


_HideWindow 


$A916 


0000 








0000 


42A7 


Boucle 


CLR.L 


-(SP) 


0002 


A924 




FrontWindow 


0004 


2E1F 




MOVE.L 


(SP)+,D7 


0008 


67 06 




BEQ.S 


Retour 


0008 


2F07 




MOVE.L 


D7,-(SP) 


0OOA 


A916 




HideWindow 


oooc 


60 F2 




BRA.S 


Boucle 


000E 


4E75 


Retour 


RTS 





Installation 
de la routine de 
suppression des 
fenetres dans un 
programme Basic 

DEFINT A-Z 

DIM C(7) 

' Data pour la routine 

DATA &h42A7,&hA924,&h2E1F 

DATA &h6706,&h2F07,&hA916 

DATA &h60F2,&h4E75 

' Implantation de la routine 

FOR l-O TO 7:READ C(I):NEXT 

' Appel de la routine (adresse dans A!) 

A!=VARPTR(C(0)):AI 

10 GOTO 10 



; Reserve 4 octets au sommet de la pile pour le pointeur 

; Retourne un pointeur sur la fenetre situee au premier plan 

; Le resultat est depile et place dans D7. Si le contenu de D7 

; est egal a 0, il n'y a plus de fenetre a l'ecran. 

; Place le pointeur sur la fenetre au sommet de la pile 

; Efface la fenetre 

; Retour au debut pour fenetre suivante 
; Retour au Basic 



Etrange accessoire ! 

Evelyne Gorin 



Nous vous proposons un petit acces- 
soire (que vous pourrez trouver sur 
la disquette Mac 19) qui, une fois 
lance, ne peut plus etre arrete. En 
effet, le fait de passer d'une applica- 
tion au "Finder", ou du "Finder" a 
une application, ne perturbe absolu- 
ment pas son fonctionnement. En 
dehors de cela, et mis a part son 
c6te amusant, si d'aucun trouve un 
quelconque interet pratique a cette 
realisation, nous vous serions recon- 
naissants de nous le faire savoir ! 



5'.Asm 

Trap HideCursor $A852 
Trap _ShowCursor $A853 



Entr 



DC 
DC 
DC 
DC 



$6400 
300 





Ouv 
Ctr 

B0 
B1 



DC 
DC 
DC 
DC 
DC 



Ouv-Entr 

Ouv-Entr 

Ctr-Entr 

Ouv-Entr 

Ouv-Entr 



STRING_FORMAT 
DC V 



Buffer DC 



MOVEQ 
RTS 



#0,D0 



MOVEM.L A0-A2,-(SP) 

LEA Buffer.AO 

MOVEA.L #$7A700,A1 

MOVE #63,D3 
_HideCursor 

MOVE #19,D0 

CLR D1 

MOVE.B 0(A1,D1),(A0) 

MOVEA.L A1.A2 



MOVEQ #62,D2 

B2 MOVE.B 1(A2,D1),0(A2,D1) 

ADDQ.L #1,A2 

DBRA D2.B2 

MOVE.B (A0),63(A1,D1) 

ADD #64,D1 

DBRA D0.B1 

DBRA D3.B0 
ShowCursor 

MOVEM.L (SP)+,A0-A2 

BRA.S Ouv 

5'.Link 



5'.Rel 



5'.R 

5\Rsrc 

TYPE DRVR-PROC 

5' ,29 

5' 



50 



Pom's n° 19 



J|Le systeme de developpement 68000 



Cecile Derrien 



Le systeme de developpement 68000 est enfin 
disponible ! Comme nous l'attendions tous avec 
beaucoup d'impatience, une petite presentation 
s'impose. 

Physiquement, le systeme est compose de deux 
disquettes, dun manuel de reference du 
programmeur en 68000, du manuel du systeme 
de developpement et, enfin, d'un cable destine a 
relier le Mac a un second Mac ou a un Lisa. Pas 

:avecunseul 
Macintosh 128 ou 512Ko, avec ou sans lecteur 
externe (un second lecteur est toutefois 
recommande, pour une raison de confort 
evidente). Le second Mac (ou Lisa) est 
seulement requis pour l'utilisation d'un "super 
debugger". Le systeme est livrt en langue 
anglaise, et nous ne savons pas encore si une 
version francaise sera rapidement disponible. 

Les disquettes 

La premiere disquette (baptised MDS1) 
contient, en plus du dossier systeme, l'editeur, 
l'assembleur, le "linker", "rexecutive" (difficile 
a traduire !), RMakeret PackSyms. 

L'editeur 

II s'agit d'un editeur pleine page "Disk based" 
(done pas de problemes avec un Mac 128, les 
acces disquettes seront seulement plus frequents 
qu'avec un 512) qui ne depaysera person nc 
puisque son mode de fonctionnement est 
semblable a celui de MacWrile; il supporte done 
les dSsormais classiques "Copier, Couper, 
Coller", autorise le choix de la police de 
caracteres ainsi que sa taille. Le choix du style 
(gras, italique.etc... ) n'est pas permis, puisqu'il 
n'est d'aucun int4rct pour ce type d'application. 
La police non proportionnelle "Monaco", tres 
peu employee en traitement de texte, se revile 
etre ici la plus lisible et, du meme coup, la 
moins fatiguante. Cet editeur est deja employe 
par "MacAdvantage" et nous aurons 
certainement I'oocaaon de le rencontrer souvent, 
puisqu'il est fourni pratiquement gratuitement 
par Apple aux diveloppeurs de langages 
informatiques qui en font la demande. 

L'assembleur 

Cet assembleur est a la hauteur des possibihies 
du MC 68000 : directives nombreuses, 
etablissement de macro- instructions aise, etc... 
et meme comportement "intelligent" : si vous 
placez, dans le source, le code mnemonique 
"ADD.L #4,D0", qui produit le code machine 
SD1BC $0000 $0004 (soil trois mots ou encore 
six octets), il sera automatiquement remplace 
par "ADDQ.L #4,D0", qui produit le code 
$5880. Le resultat est le meme, mais avec ceUe 
fois seulement deux octets. 

Un seul reproche a faire a cet assembleur : il ne 
produit pas un code objet directement 
executable; pour cela, il faut absolument passer 
par le "Linker". Si cela n a pas d'importance 



pour une utilisation normale (ecriture d'une 
application) il n'en va pas de meme lorsque Ton 
ecrit une routine destinee a etre utilisee depuis 
un programme Basic car, dans ce cas, il est 
necessaire de calculer soi-meme certains 
branchements (l'assembleur ne calcule pas les 
branchements "vers le bas"). 

Le "linker" 

II transfome le code objet relogeable produit par 
l assembleur en une application. Si besoin est, 
il se charge aussi de la connection de modules 
assembles separement. C'est aussi lui qui 
autorise letablissement des "signatures"; par 
exemple : APPL TEXT (voir Particle 
"Modification des informations pour le Finder", 
dans le precedent numero de Pom's). 

RMaker 

Le Macintosh utilise des "ressources" pour la 
definition des fenetres, les controles, les menus, 
les chaines de caracteres, les icdnes, etc... En 
somme, tout ce qui n'est pas du code executable 
par le processeur (bien que I on puisse aussi 
trouver du code 68000 dans un "fichier 
ressource"). Ces definitions peuvent aussi etre 
incluses dans le source; c'est la methode 
employee par l'accessoire "Lucy". Le principe 
des ressources est interessant pour deux raisons 
: si un programme doit etre commercialise dans 
plusieurs pays, les messages et menus peuvent 
etre adaptes (avec un editeur de ressource) a la 
langue locale.et ce sans qu'il soil necessaire de 
modifier le code objet. De plus l'eublissement 
de ressources est tres simple puisque Ton met a 
notre disposition un "compilaleur de 
ressources". Nous avons cite "RMaker". 
Par exemple, pour crier une ressource destinee a 
la definition d'un menu, il suffit d'eublir avec 
l'editeur une liste qui pourrait ressembler a : 
TYPE MENU 
,1 

Menu general 

Debut 

Bof 

Fin 

1 correspond i I'identificateur du menu, "Menu 
general" correspond au litre (qui apparait dans la 
barre des menus), le reste se rapporte aux trois 
articles du menu. Simple non ? 

Executive 

"Executive" est un utilitaire extrement pratique 
bien que tres simple. Lorsque Ton ecrit une 
application, il faut passer par plusieurs etapes : 
edition, assemblage, "linkage", compilation des 
ressources. Executive autorise une execution 
automatique du processus, ce qui permet un 
gain de temps appreciable. De plus, 
lenchainement des tlches peut etre 
conditionnel : par exemple, on peut decider 
qu'apres l'assernblage, le "linker" sera appeler en 
cas de succes (assemblage sans erreur, de 
syntaxe ou autre), a lore que la main sera passee 
a l'editeur dans le cas contraire. 



A noter qu'il est aussi possible d'appeler une 
application depuis une autre par l'intermediaire 
du menu "Transfert", qui agit un peut comme le 
"Switcher" pour Mac 512Ko. 

PackSyms 

Cet utilitaire permet d'obtenir des fichiers de 
symboles (TOTO EQU $23, GAGA EQU 
TOTO+4, etc..) sous une forme compactee. 
Ceci permet de gagner de la place en me moire, 
sur les disquettes, et aussi d'acceierer les 
traitements. 

La seconde disquette (MDS2) contient des 
fichiers de symboles, des exemples de 
programmes en assembleur 68000, et enfin les 
"Debuggers". 

Fichiers de symboles 

Les fichiers de symboles sont privus pour etre 
utilises depuis un source (avec la directive 
INCLUDE) et contiennent les "Traps", les 
adresses du systeme, les decalages par rapport a 
la base des differents tableaux ou tampons, les 
equivalences pour les codes d'erreur generis par 
le systeme d'exploitation, etc... L'utilisation de 
ces fichiers est fortemenl conseiliee car, outre le 
gain de temps apporte, elle permet une 
amelioration de la lisibilite des sources, ce qui 
n'est pas desagreable. 

Les exemples 

Le systeme est fourni avec quelques exemples 
propres a faciliter les premiers pas du 
developpeurs en assembleur 68000. Parmi 
ceux-ci, nous trouvons : 

• gestion d'une fenetre; 

• impression depuis une application; 

• un petit programme utilisant quelques 
routines "QuickDraw"; 

• un accessoire de bureau "minimum" (il 
affiche simplement une fenetre). 

Ces exemples sont quelque peu limites, mais 
permettent neanmoins de debuter. Pour aller 
plus loin, lisez Pom's ! 

Les "debuggers" 

Trois programmes de mise au point sont a notre 
disposition. Le premier, baptise MacsBug, 
fonctionne sur un Mac 128Ko. Le second 
(Maxbug) est privu pour un 512Ko. Le 

l'utilisation d'un second Mac ou d'un Lisa. 

Inside Macintosh 



Nous reclamions une documentation technique 
depuis la sortie du Macintosh. Nous ne savons 
pas si le fait d'avoir "rale" dans de precedents 
articles y est pour quelque chose, mais elle 
arrive ! Inside Macintosh est un ouvrage 
d'environ 1800 pages indispensable a qui veut 
programmer seneusement le Mac. 



Pom's n° 19 



Creation de caracteres 



Jean-Pierre Vinter 

Avec ce nouvel utilitaire, les posses- 
seurs d'un Apple II muni d'une im- 
primante de la serie Imagewriter, 
vont enfin pouvoir creer et exploiter 
commodemment tous les caracteres 
qu'ils desirent. S'ils possedent, en 
outre, la disquette "Basic Purplesoft" 
distribute avec la carte "Chat 
Mauve" ils vont, de plus, disposer de 
police de caracteres tres diverses (Ita- 
liques, Gothiques ou Grecques), di- 
rectement disponibles et exploitables 
par rimprimante. 

Ce programme comble une lacune 
du 'Tool kit Imagewriter" qui ne per- 
met que 1' utilisation de caracteres 
courants reduits et decales vers le 
haut, ou vers le bas. 
II est compose d'un programme de 
lancement et de gestion ecrit en 
Basic qui fait largement appel a diffe- 
rents niveaux d'une routine assem- 
bleur dont les fonctions sont : 

• la creation 

• la modification 

• l'ajout 

• la suppression des caracteres en 
memoire. 

Le programme Basic pouvant, des 
lors, les envoyer sur imprimante ou 
les sauvegarder pour une future utili- 
sation. 

Codage et decodage des 
caracteres 

A l'origine du programme Basic, se 
posait le probleme suivant : comment 
recuperer faciiement un jeu de carac- 
teres graphiques existant sur les dis- 
quettes "Chat Mauve" et le rendre 
exploitable par "Imagewriter". 

Bien que le principe soit semblable, 
le codage d'un caractere se fait diffe- 
remment selon qu'il est utilise par la 
haute resolution graphique ou par 
1' interface imprimante. Ainsi, a titre 
d'exemple, si Ton veut coder un 
"A", sur une largeur de 8 dots, il se 
representera par la matrice binaire 
designee ci-dessous : 













1 


1 


1 








38 








1 


1 





1 


1 





6C 








1 











1 





44 





1 


1 











1 


1 


C6 





1 


1 


1 


1 


1 


1 


1 


FE 





1 


1 











1 


1 


C6 





1 


1 











1 


1 


C6 


























00 


00 


7D 


78 


13 


11 


13 


7D 


78 





Cette matrice binaire sera codee en 
hexadecimal : 

• de droite a gauche et de bas en 
haut s'il s'agit de la haute resolu- 
tion graphique : 00 C6 C6 FE C6 
44 6C38 

• de bas en haut et de gauche a 
droite s'il s'agit de l'interface im- 
primante soit : 00 78 7D 13 11 13 
77 78 

En outre, dans le cas de rimpri- 
mante, les 8 octets ainsi codes de- 
vront etre precedes de 2 codes : 

• le premier caracterisant la touche 
concernee du clavier, ici un "A" 

• le second representant sa lon- 
gueur, ici la representation du chif- 
fre "8". 

Le renversement de la matrice, ne- 
cessaire pour la traduction "Chat 
Mauve - Imagewriter", ne pouvait se 
faire qu'en langage machine. En 
effet, la solution Basic qui consistait a 
lire les octets, les convertir en binaire. 
les charger dans un tableau que Ton 
lisait differemment avant de les reco- 
der, etait trap gourmande en temps, 
pres de 10 minutes pour 100 carac- 
teres. 

Pour 6tre complet sur ce sujet, rap- 
pelons egalement qu'un caractere 
"Imagewriter" est en fait constitue 
par une matrice de 9 aiguilles de 
haut, numerotees de 1 a 9 et que la 
9eme aiguille est utilisee pour le sou- 
lignement. L'utilisateur peut indiffe- 
remment choisir les rangees 1 a 8, 
ou 2 a 9, selon qu'il code la largeur 
des caracteres par une lettre majus- 
cule ou minuscule. La largeur de la 
matrice est de 16 aiguilles au maxi- 
mum, les codes correspondants sont, 
par convention : 

• "A" pour 1, "B" pour 2, .... "P" 
pour 16 (dots hauts de 1 a 8) 

• "a" pour 1, "b" pour 2 "p" 

pour 16 (dots bas de 2 a 9) 

L'alphabet standard a une largeur 
constante de 8 dots, il utilise les ran- 



gees 1 a 7 pour les lettres majuscules 
et 3 a 7 pour les minuscules, les ran- 
gees 8 et/ou 9 etant reservees aux 
lettres qui se prolongent vers le bas 
(?, 9- i. P, q et y). 

Chargement de 
rimprimante 

Un probleme a du etre resolu : 
II etait necessaire d'utiliser un lan- 
gage d' assemblage pour envoyer les 
codes a rimprimante. En effet, 1' Ap- 
plesoft positionne le bit de poids fort 
des octets a 1 et un PRINT "Carac- 
tere" ou par un "PRINT CHR$ 
(code decimal), pour la creation de 
caracteres, entralne un soulignement 
genant, les dots 8 ou 9 de la matrice 
etant parasites par ces PRINTs. Mais 
il faut egalement que 1' imprimante 
reconnaisse tous les bits qui vont lui 
parvenir. De ce fait, pour etre utilisa- 
ble, chaque fichier devra commencer 
et finir par les sequences d'ESCAPE 
suivantes : 

• au debut: ESC Z CONTROLS - 
(IB 44 00 20 en hexa), pour re- 
connaitre le 8eme bit 

• a la fin : ESC D CONTROLS - 
(IB 5A 00 20 en hexa), pour 
ignorer le 8eme bit, qui est 1' utili- 
sation normale de 1' imprimante en 
mode texte. 

Le caractere "-" represente l'espace. 

Presentation du pro- 
gramme Basic 

Place memoire 

L'instruction HIMEM: 16383 reserve 
la memoire a partir de l'adresse 
hexadecimale $4000. C'est a partir 
de cette adresse que sera stockee la 
police de caracteres a creer ou a trai- 
ter. Si une police est composee de 
95 caracteres (codes ASCII de 32 a 
127), tous directement adressables 
par le clavier et ayant chacun une 
largeur maximale de 16 dots, l'occu- 
pation memoire serait, au plus, un 
peu superieure a 1,5 Ko (16+2 
octets * 95). 

La routine en langage machine est 
implantee a partir de l'adresse $6000 
et occupe 858 octets, elle ne peut 
pas etre parasitee par la memoire ca- 
ractere. 

Menu 

Le menu principal offre les possibili- 
ty suivantes : 

1 - Creer un nouveau fichier; 
2— Lui ajouter de nouveaux caracte- 
res; 



52 Pom's n° 19 



3- Afficher ou modifier les caracte- 
res d'un fichier; 

4- Recuperer un jeu de caracteres 

5- Sauvegarder et/ou charger un fi- 
chier sur imprimante. 

L'option 4 est specifique aux fichiers 
"Chat Mauve". Elle assure la recupe- 
ration et la conversion des 95 carac- 
teres directement adressables (codes 
ASCII 32 a 127). Pour eviter les 
confusions de fichiers, le programme 
ajoute lui-meme les suffixes "FONT" 
relatifs aux polices de caracteres 
"Chat Mauve" et ".CHAR" pour les 
fichiers qu'il a lui-meme crees. L'utili- 
sateur se contentera d'indiquer la 
premiere partie du nom du fichier, 
par exemple "GOTHIC" pour des 
caracteres gothiques. 

Options 

La difference essentielle entre les op- 
tions 2 et 3, ajout et modification de 
donnees, tient dans le fait que, dans 
l'option 2, le programme ajoute une 
nouvelle forme a la fin du fichier, 
alors que dans l'option 3, si une 
forme est definie avec un code carac- 
tere deja existant, celle-ci sera, apres 
confirmation, eliminee physiquement 
du fichier, puis remplacee par la nou- 
velle forme. 

L'option 2 sera done, en principe, 
choisie par un utilisateur qui n'aurait 
pas fini de rentrer tous les caracteres 
qu'il s'etait propose de creer. En fin 
de creation (option 1) ou d'ajouts de 
formes a un fichier (option 2), une 
reponse NON a la question "Nou- 
velle forme ?" renvoie a l'option 3, 
examen / modification qui seule per- 
met Pacces au sous-menu, sauve- 
garde / impression de fichier (option 
5). 

L'option 3 appelle un caractere exis- 
tant dans le fichier, que ce soit pour 
le consulter ou pour le modifier. Un 
menu permet de le supprimer du fi- 
chier, de le modifier ou de passer a 
un autre caractere. Notons que RE- 
TURN en reponse a la demande du 
code du caractere, permet de faire 
apparaitre l'enregistrement qui suit 
celui qui vient d'etre appele ou le 
premier caractere du fichier (si aucun 
n'avait encore ete appele ou si une 
suppression venait d'etre effectuee). 
Si une modification a ete faite (sous- 
option 2), il est possible de memori- 
ser la nouvelle forme, soit en conser- 
vant son code, soit sous un nom de 
code different. Remarquons qu'il est 
aussi possible de creer de nouveaux 
caracteres avec l'option 3. II suffit 
d'appeler un caractere deja existant 
dans le fichier, d'eventuellement le 
modifier et de le stocker en memoire 
sous un nom de code encore inexis- 
tant. Ainsi, a titre d' exemple : 

- une utilisation judicieuse de l'op- 
tion 3 pour des francais serait, apres 
recuperation d'un fichier "Chat 



Mauve" non accentue, d'appeler le 
"e", de lui ajouter un accent et de le 
stocker sous un nom de code diffe- 
rent, "e" ou 

— De meme, si 1'on veut creer une 
frise decorative, on appellera et on 
modifiera un caractere qui ne sera 
pas utilise dans le texte, caractere 
que Ton stockera, dans ce cas, avec 
le mSme nom de code. 

Gestion d'ecran 

Qu'il s'agisse de creation ou de mo- 
dification de formes, l'affichage est 
materialise sur l'ecran par un cadre 
de 8 cases de haut sur 16 de large, 
borde en haut et en bas par les lettre 
A a P, majuscules et minuscules, 
pour rappeler la convention du code 
largeur. Le curseur se meut librement 
a Pinterieur du cadre au moyen des 
4 fleches disponibles sur 1' Apple He 
(pour 1' Apple II +, on utilisera les fle- 
ches gauche et droite et les habituels 
CTRL-J et CTRL-K). Une pression 
sur la barre d'espacement permet de 
mettre a 1 ou a le bit de represen- 
tation d'un dot du caractere, cette 
action etant visualisee par une etoile 
ou un espace sur l'ecran, qui assure 
une image tres agrandie de ce que 
sera le caractere imprime. Une op- 
tion supplemental, qui n'apparait 
pas a l'ecran, est accessible au 
moyen de la touche "?". Elle permet 
des decalages de la forme affichee 
sur l'ecran, selon les 4 directions ha- 
bituelles (haut, bas, droite et gau- 
che). 

Une pression sur la touche "0" per- 
met de sortir du mode creation — 
modification. II sera alors demande 
successivement les codes caractere et 
largeur de la forme. La largeur deter- 
mine le nombre de colonnes qui se- 
ront interpretees, a partir de la co- 
lonne 1. Elle est laissee au libre choix 
de P utilisateur qui peut done ne me- 
moriser qu'une partie de l'ecran. La 
touche RETURN en reponse a une 
des deux questions, code ou largeur, 
renvoie l'affichage du caractere. 

Sauvegarde et chargement 

L'envoi vers Pimprimante necessite 
que celle-ci soit raccordee et mise 
sous tension avant l'envoi des infor- 
mations. Un test optionnel permet 
d'imprimer les caracteres dans les 2 
modes, standard et police de caracte- 
res etrangere. La commutation des 2 
modes se faisant par la sequence 
d' ESCAPE suivante : 

• caracteres crees : ESC ' (IB 27 en 
hexadecimal) 

• caracteres standards: ESC $ (IB 
24 en hexadecimal) 

La sauvegarde ne necessite que la 
reponse a la question "Nom du fi- 
chier". Aucun controle n'etant effec- 
tue au niveau du DOS, il conviendra 
de faire attention a ne pas donner le 
nom d'un fichier deja existant sous 



peine de son remplacement sur la 
disquette. Cette option represents la 
derniere operation a effectuer sur 
une police de caracteres. Apres exe- 
cution, P utilisateur est renvoye au 
menu principal, dont l'option cons- 
titue la sortie normale du pro- 
gramme. II pourra aussi, traiter ou 
creer d'autres fichiers ou rappeler un 
precedent fichier de travail, si celui-ci 
a ete sauvegarde. 

Annexes 

Les listings des programmes, Basic et 
Assembleur sont presentes ci-apres. 
Pour ceux qui ne disposeraient pas 
de carte Chat Mauve, figure egale- 
ment ci-apres un jeu de caracteres 
cree a leur attention. II s'agit d'une 
police de caracteres francais, accen- 
tues, inspiree des caracteres de type 
BYTE. lis devront etre charges en 
memoire a partir de Padresse $4000, 
la longueur du fichier est de 865 
octets ($361 en hexadecimal). Une 
fois le fichier sauvegarde sous un 
nom choisi, il pourra etre envoye 
vers Imagewriter au moyen de l'op- 
tion 5 du programme. La sequence 
d'ESCAPE de fin de fichier n'a pas a 
figurer dans le fichier, elle est assuree 
par cette option du programme. La 
routine en Assembleur a ete concue 
de facon tres modulaire et ne neces- 
site pas d' explications particulieres. 
Le listing du programme source 
comporte pour chaque module : 

— un titre en commentaire qui rap- 
pelle sa fonction; 

— un label qui est le meme que celui 
qui figure en tete du programme 
Basic. 



N.D.L.R. : Afin que l'impression des 
polices de caracteres fonctionne sur 
Pimprimante DMP, il faut : 

• envoyer, en debut de programme, 
le code de neutralisation de Pinter- 
face 

• rajouter en ligne 121 du pro- 
gramme Basic les POKEs neces- 
saires, pour obtenir dans le code 
objet de SAISIE : 

618A : 20 ED FD 60 



Programme 

SAISIE.S 
(Assembleur MERLIN) 

1 ************************** 

2 • PRGRM DE TRAITEMENT DE 

3 * CARACTERES IMAGEWRITER 

4 ************************** 

5 ORG S6000 

6 ZERO = S00 

7 ON = S01 

8 DEP = $06 

9 SIX = $06 



Pom's n° 19 



53 



10 SEPT 

11 HUIT 

12 ARR 

13 NEUF 

14 DIX 

15 LON 

16 ASCI 

17 CARG 

18 H 

19 V 

20 ESC 

21 BLAN 

22 STAR 

23 ADB 

24 CALC 

25 COMPAR 

26 REGIS 

27 VTAB 

28 BASCAL 



$07 

$08 

$08 

$09 

$10 

$18 

$18 

$19 

$24 

$25 

$1B 

SAO 

$AA 

$28 

$300 

$308 

$309 

$FC22 

$FBC1 



29 ************************** 



30 P01 

31 

32 

33 

34 

35 

36 

37 



JSR 
LDA 
JSR 
LDA 
CLC 
ADC 
STA 
LDY 



VTAB 
V 

BASCAL 
ADB 

H 

ADB 
#ZERO 



38 ************************** 



39 
40 
41 
42 
43 
44 



LDA 
CMP 
BNE 
LDA 



(ADB) , Y 
#STAR 
P02 
#BLAN 
STA (ADB) , Y 
RTS 



45 ************************** 
4 6 P02 LDA #STAR 

4 7 STA (ADB) , Y 

4 8 RTS 

49 ************************** 

50 * FIN CONVERSION 

51 ************************** 

52 * CHARGEMENT ESCAPE IMPRIM 

53 P10 JSR SP10 

54 ************************** 



55 P20 

56 

57 

58 

59 

60 

61 

62 



LDY 
LDX 
LDA 
STA 
INY 
LDA 
STA 
INY 



#ZERO 
#ZERO 
$06 

(ARR) , Y 

SEPT 
(ARR) , Y 



63 ************************** 



64 P21 


LDA 


CALC, 


65 


STA 


(ARR) 


66 


INX 




67 


INY 




68 


DEC 


LON 


69 


LDA 


LON 


70 


CMP 


#ZERO 


71 


BEQ 


P22 


72 


JMP 


P21 



73 ************************** 

74 P22 CLC 



75 




TYA 




140 




ADC 


H 


76 




ADC 


ARR 


141 




STA 


ADB 


77 




STA 


$4000 


142 




LDY 


♦ ZERO 


78 




LDA 


NEUF 


143 




LDA 


(ADB) , Y 


79 




ADC 


#ZERO 


144 




CMP 


♦ STAR 


80 




STA 


$4001 


145 




BNE 


P43 


81 




RTS 




146 




INC 


$1A 


82 


************************** 


147 


P43 


DEC 


V 


83 


* FIN 


CHARGEMENT FORME 


148 




DEX 




84 


* ESCAP FIN FICHIER/ADRESS 


149 




CPX 


♦ ZERO 


85 


* ENVOI VERS 


PRINTER 


150 




BNE 


P42 


86 


************************** 


151 


************* 


************* 


87 


P30 


LDY 


#ZERO 


152 




INC 


H 


88 




LDA 


ARR 


153 




INC 


LON 


89 




STA 


$4000 


154 




LDA 


LON 


90 




LDA 


NEUF 


155 




CMP 


♦ $10 


91 




STA 


$4001 


156 




BEQ 


P44 


92 




LDA 


#$04 


157 




TAX 




93 




STA 


(ARR) , Y 


158 




LDA 


$1A 


94 




INY 




159 




STA 


CALCX 


95 




LDA 


#ESC 


160 




JMP 


P41 


96 




STA 


(ARR) , Y 


161 


P44 


RTS 




97 




INY 




162 


************************** 


98 




LDA 


#$44 


163 


* PROGRAMME 


CHAT MAUVE 


99 




STA 


(ARR) , Y 


164 


* CHARGE 


ADRESSE ET CONST 


100 




INY 




165 


************************** 


101 




LDA 


#ZERO 


166 


P50 


LDA 


♦ ZERO 


102 




STA 


(ARR) ,Y 


167 




STA 


DEP 


103 




INY 




168 




LDA 


#$41 


104 




LDA 


#$20 


169 




STA 


SEPT 


105 




STA 


(ARR) , Y 


170 




LDA 


#$1F 


106 


************************** 


171 




STA 


ASCI 


107 




CLC 




172 




LDA 


#$47 


108 




LDA 


ARR 


173 




STA 


CARG 


109 




ADC 


#$05 


174 




JSR 


SP10 


110 




STA 


ARR 


175 


************************** 


111 




LDA 


NEUF 


176 


P51 


LDY 


#ZERO 


112 




ADC 


♦ ZERO 


177 


P52 


LDA 


(DEP) , Y 


113 




STA 


NEUF 


178 




STA 


CALC, Y 


114 




LDA 


#$02 


179 




INY 




115 




STA 


DEP 


180 




CPY 


#HUIT 


116 




LDA 


#$40 


181 




BNE 


P52 


117 




STA 


SEPT 


182 


************************** 


118 




JMP 


SP1 


183 




LDA 


#$80 


119 


************************** 


184 




STA 


COMPAR 


120 


* LIT 


ECRAN 


ET CHARGEMENT 


185 




LDA 


#ZERO 


121 


* 


EN 


$300 


186 




STA 


REGIS 


122 


************************** 


187 




LDX 


#ZERO 


123 


P40 


LDA 


#$FF 


188 


P53 


LSR 


COMPAR 


124 




STA 


LON 


189 




LDY 


#ZERO 


125 




LDA 


#$0B 


190 


P54 


ASL 


REGIS 


126 




STA 


H 


191 




LDA 


$300, Y 


127 


************************** 














192 




AND 


COMPAR 


128 


P41 


LDA 


#ZERO 


193 




BEQ 


P55 


129 




STA 


$1A 


194 




INC 


REGIS 


130 




LDY 


#ZERO 


195 


P55 


INY 




131 




LDX 


#HUIT 


196 




CPY 


#HUIT 


132 




LDA 


#$10 


197 




BNE 


P54 


133 




STA 


V 


198 




LDA 


REGIS 


134 


******************,,,,*»** 


199 




STA 


$310, X 


135 


P42 


ASL 


$1A 


200 




INX 




136 




LDA 


V 


201 




CPX 


#SEPT 


137 




JSR 


BASCAL 


202 




BNE 


P53 


138 




CLC 




203 


************************** 


139 




LDA 


ADB 


204 




LDY 


#ZERO 




Pom's n° 19 



205 




INC 


ASCI 


?7fi 


LDY 


#DIX 




206 




LDA 


ASCI 


271 


************************** 


OJD 


207 




STA 


( ARR) , Y 


?7? 




icuyy, i 


in 
jo / 


208 




INY 




273 


AND 


#DIX 


JJO 


209 




LDA 


CARG 


274 




jfD 


HQ 


210 




STA 


(ARR) , Y 


77^ 


t na 

Lujn 


PL-UO y 


J H U 


211 




LDX 


#SIX 


276 


AND 


ir v *i v 


JUL 


212 




INY 




277 


BNE 


SP5 




213 


************************** 


278 


TXA 




343 


214 


P56 


LDA 


$310, X 


9 7 


STA 


SC088, Y 


344 


215 




STA 


(ARR) , Y 


280 


STA 


$C080, Y 


T A R 


216 




INY 






RTS 




346 


217 




DEX 




282 


************************** 


I/I "7 


218 




CPY 


#NEUF 


283 


* ESC DEBUT FICHIER IMPRI 


t A O 

J3 o 


219 




BNE 


P56 


284 


************************** 


1 A Q 

6h y 


220 


*******************.***+** 


285 


SP10 LDY 


#ZFRO 

IT 4— ' J— 1 1 \ 








Jot) 


221 




LDA 


DEP 


286 


LDA 


#$02 


JO 1 


222 




CLC 




287 


STA 


ARR 


J J< 


223 




ADC 


#HUIT 


288 


LDA 


#$40 


JJO 


224 




STA 


DEP 


289 


STA 


NEUF 


T C 

JO H 


225 




BCC 


P57 




LDA 


#ESC 


■ice 
jjj 


226 




INC 


SEPT 








*3 s £ 

JJD 


227 


************************** 


2 92 


INC 


ARR 


OCT 
-30 / 


228 


P57 


LDA 


ARR 


293 


LDA 


#$5A 


JJO 


229 




CLC 




2 94 


STA 


(ARR) , Y 


ICQ 

JJ7 


230 




ADC 


#NEUF 




INC 


ARR 


JDU 


231 




STA 


ARR 




LDA 


#ZERO 


jDI 


232 




BCC 


P58 


2 97 


STA 


(ARR) , Y 


JV£ 


233 




INC 


NEUF 


2 98 


INC 


ARR 


J DO 


234 


************************** 


299 


LDA 


#$20 


3 64 


235 


P58 


LDA 


ASCI 


300 


STA 


(ARR) , Y 


365 


236 




CMP 


#S7E 


301 


INC 


ARR 


366 


237 




BNE 


P51 


302 


LDA 


#ESC 


367 


238 




LDA 


#$61 


303 


STA 


(ARR) ,Y 


3 68 


239 




STA 


$4000 


304 


INC 


ARR 


O D J 


240 




LDA 


#$43 


305 


LDA 


#$2B 


370 


241 




STA 


$4001 


306 


STA 


(ARR) , Y 


J I X 


242 




RTS 




307 


INC 


ARR 


372 


243 


************************** 


308 


LDA 


#ESC 


373 


244 


* FIN PGM - ROUTINE CHARGT 


309 


STA 


(ARR) , Y 


374 


245 


************************** 


310 


INC 


ARR 


375 


246 


SP1 


LDA 


DEP 


311 


LDA 


#$49 


376 


247 




CMP 


ARR 


312 


STA 


(ARR) , Y 


T77 


248 




BNE 


SP2 


313 


INC 


ARR 


J ' o 


249 




LDA 


SEPT 


J X H 


RTS 




j / y 


250 




CMP 


NEUF 


315 


************************** 




251 




BEQ 


SP3 


316 


* RECHERCHE D 


'UN CARACTERE 


7 ft "1 
JOl 


252 


************************** 


317 


************************** 


382 


253 


SP2 


LDY 


#ZERO 


318 


P60 LDA 


#$0A 


T ft 

JOJ 


254 




LDA 


(DEP) , Y 


319 


STA 


DEP 


1 ft d 

J O 4 


255 




JSR 


SP4 


320 


LDA 


#$40 


JbO 


256 




CLC 




321 


STA 


SEPT 


Job 


257 




LDA 


DEP 


322 


LDA 


HUIT 


TOT 

Jo/ 


258 




ADC 


#UN 


"ITT 


STA 


CARG 


388 


259 




STA 


DEP 


324 


LDY 


#ZERO 


389 


260 




LDA 


SEPT 


325 


************************** 


390 


261 




ADC 


#ZERO 


326 


P61 LDA 


(DEP) , Y 


jyi 


262 




STA 


SEPT 


327 


CMP 


CARG 


o 


263 




SEC 




328 


BEQ 


P64 


j y j 


264 




BCS 


SP1 


329 


INY 




j y *i 


265 


SP3 


RTS 




330 


LDA 


(DEP) , Y 


395 


266 


***********************.** 


331 


STA 


LON 


396 


267 


* 


BOUCLES 


D'ATTENTE 


332 


LDX 


#$02 


397 


268 




333 


************************** 


398 


269 


SP4 


TAX 




334 


P62 DEC 


LON 


399 



P63 



INX 




LDA 


LON 


CMP 


#$60 


BEQ 


P63 


CMP 


#$40 


BNE 


P62 


*********** 






t nv 


it 7 Pun 


TV A 
1XA 








o In 


ULjC 


LDA 


SEPT 


ADC 


#ZERO 


STA 


SEPT 


CMP 


$4001 


BNE 


P61 


LDA 


DEP 


CMP 


$4000 


BNE 


P61 


LDA 


#$FF 


STA 


HUIT 


RTS 





P64 

************************** 

* CHARGEMENT EN $300 
************************** 



P65 



P66 



LDY 
LDA 
STA 
LDX 
INY 
LDA 
STA 
INX 
INY 
DEC 
LDA 
CMP 
BEQ 
CMP 
BNE 



#$01 
(DEP) , Y 
LON 
#ZERO 

(DEP) , Y 
CALC,X 



LON 

LON 

#$60 

P67 

#$40 

P66 



************************** 



P67 



P68 



TXA 
CMP 
BEQ 
LDA 
STA 
INX 
JMP 
RTS 



#$10 
P68 
#ZERO 
CALC,X 

P67 



************************** 

* AFFICHAGE CARACTERE 
************************** 

P70 LDX #ZERO 

LDA #$0B 
STA H 

************************** 
P71 LDA #$80 

STA LON 

LDA CALC,X 

STA CARG 

LDY #ZERO 

LDA #$10 

STA V 

************************** 



4 00 


P72 


LDA 


V 


447 




LDY 


#ZERO 


4 94 


RTS 




401 




JSR 


BASCAL 


448 


************************** 


4 95 


************************* 


A A O 
H \JZ 




LDA 


ADB 


44 9 




T na 
JjUrt 


ADD 


i y o 


* DECALAGE BAS 


A A "3 
H U J 




CLC 




4 50 




CMtr 


£ d A A A 




************************* 


A A A 
H U4 




ADC 


H 


451 




BNE 


P83 


4 3D 


LDX 


#ZERO 


HUD 




STA 


ADB 


452 




LDA 


NEUF 


*j yy 


S20 LDA 


CALCX 


406 




LDA 


CARG 


453 




CMP 


$4001 


500 


ASL 




A A ^ 
4 U / 




AND 


LON 


454 




BNE 


P83 




STA 


CALCX 


408 




BEQ 


P73 


455 




JMP 


P84 


502 


INX 




4 09 




LDA 


#STAR 


456 


************************** 


503 


CPX 


#$10 


410 




JMP 


P74 


457 




LDA 


(ARR) , Y 


504 


BNE 


S20 


411 


P73 


LDA 


#BLAN 


458 




STA 


(DEP) , Y 


505 


RTS 




A 1 


Vjl A 

r I H 


STA 


(ADB) , Y 


4 59 




CLC 




506 


************************* 


/I 1 
4 I J 




DEC 


V 


4 60 




t n a 
LDA 


DEP 


507 


* DECALAGE DROITE 


d 1 A 
4 14 




LSR 


LON 


4 61 




ALJC 


* e a 1 


508 


************************/** 


4 1 




LDA 


LON 


4 62 




Olrt 


UtljC 


509 


LDX 


#$0E 


SID 




CMP 


#ZERO 


4 63 




LDA 


SEPT 


510 


S30 LDA 


CALCX 


4 1/ 




BNE 


P72 


A C A 

4 b 4 






ft 7 PDA 


511 


INX 




/I Q 
4 1 O 


************************** 


4 65 




STA 


SEPT 


512 


STA 


CALCX 


d 1 Q 

4 1 y 




INC 


H 


4 66 




CLC 




513 


DEX 




d 9 A 
4 / U 




I NX 




4 67 




LDA 


ARR 


514 


DEX 




d ? T 
4^1 




TXA 




4 68 




ADC 


#UN 


515 


CPX 


KZERO 


AT) 
H £ £ 




CMP 


#$10 


4 69 




STA 


ARR 


516 


BNE 


S30 


4Z J 




BNE 


P71 


4 70 




LDA 


NEUF 


517 


LDA 


CALCX 


d 9 d 
4^4 




RTS 




4 71 




ADC 


#ZERO 


518 


INX 




d ? S 
H £ D 


************************** 


4 72 




STA 


NEUF 


519 


STA 


CALCX 


d 9 £ 
4 Z O 


* SUPPRESSION 


D'UNE FORME 


473 




CMP 


$4001 


520 


LDA 


#ZERO 


427 


************************** 


d i d 

4/4 




BNE 


P83 


521 


STA 


CALC 


4 28 


P80 


LDY 


#$01 


475 




LDA 


ARR 


522 


RTS 




d ? Q 
4^3 




LDA 


(DEP) , Y 


A 7 £ 
4 / D 




CMP 


$4000 


523 


************************** 


4 30 




STA 


LON 


All 
Hit 




BNE 


P83 


524 


* DECALAGE 


GAUCHE 


d T T 
4 J X 




LDX 


#$02 


A 7 Q 

H 1 a 


************************** 


525 


************************** 


4 32 


P81 


DEC 


LON 


d 1 Q 
4/3 


P84 


LDA 


DEP 


52 6 


LDX 


#$01 


d ? 

4 O O 




INX 




A Q A 
H O U 




STA 


$4000 


527 


S4 LDA 


CALC , X 


d T d 
4 J4 




LDA 


LON 


4 81 




LDA 


SEPT 


528 


DEX 




/ *1C 

4 JO 




CMP 


#$60 


4 82 




STA 


$4001 


529 


STA 


CALCX 


4 36 




BEQ 


P82 


483 




RTS 




530 


INX 




d T7 
4 O ' 




CMP 


#$40 


d O d 
4 O 4 


************************** 


531 


INX 




/TO 
4 J O 




BNE 


P81 


A ft - 
H O O 


* 


DECALAGE HAUT 


532 


CPX 


#$0F 


d Q 


************************** 


4 O D 


************************** 


533 


BNE 


S40 


4 4 


P82 


CLC 




A Q~) 

Hoi 




LDX 


#ZERO 


534 


LDA 


CALCX 


4 41 




TXA 




A Q Q 

Hoo 


S10 


LDA 


CALC,X 


535 


DEX 




A A ") 
HHZ 




ADC 


DEP 


A Q Q 

4 o y 




LSR 




536 


STA 


CALCX 


443 




STA 


ARR 


490 




STA 


CALC,X 


537 


LDA 


#ZERO 


4 4 4 




LDA 


SEPT 


4 91 




INX 




jjo 


STA 


$30F 


445 




ADC 


#ZERO 


4 92 




CPX 


#$10 


539 


RTS 




446 




STA 


NEUF 


493 




BNE 


S10 


540 


************************** 



Recapitulation 

SAISIE.OBJ 


e :■ ; ; 8 - 

6060- 
6068- 


00 
04 
C8 


40 
91 
A9 


A5 
08 
44 


09 
C8 
91 


8D 
A9 
08 


01 
IB 
C8 


40 
91 
A9 


A9 
08 
00 


60D0- 
60D8- 
60E0- 


00 
85 
85 


03 
06 
18 


4C 
A9 
A9 


97 
41 
47 


60 
85 
85 


60 
07 
19 


A9 
A9 
20 


00 
IF 
A3 




















6070- 


91 


08 


C8 


A9 


20 


91 


08 


18 


60E8- 


61 


AO 


00 


Bl 


06 


99 


00 


03 


6000- 


20 


22 


FC 


A5 


25 


20 


CI 


FB 


6078- 


A5 


08 


69 


05 


85 


08 


A5 


09 


60F0- 


C8 


CO 


08 


DO 


F6 


A9 


80 


8D 


6008- 


A5 


28 


18 


65 


24 


85 


28 


AO 


6080- 


69 


00 


85 


09 


A9 


02 


85 


06 


60F8- 


08 


03 


A9 


00 


80 


09 


03 


A2 


6010- 


00 


Bl 


28 


C9 


AA 


DO 


05 


A9 


6088- 


A9 


40 


85 


07 


4C 


66 


61 


A9 


6100- 


00 


4E 


08 


03 


AO 


00 


0E 


09 


6018- 


AO 


91 


28 


60 


A9 


AA 


91 


28 


6090- 


FF 


85 


18 


A9 


0B 


85 


24 


A9 


6108- 


03 


B9 


00 


03 


2D 


08 


03 


F0 


6020- 


60 


20 


A3 


61 


AO 


00 


A2 


00 


6098- 


00 


85 


1A 


AO 


00 


A2 


08 


A9 


6110- 


03 


EE 


09 


03 


C8 


CO 


08 


DO 


6028- 


A5 


06 


91 


08 


C8 


A5 


07 


91 


60A0- 


10 


85 


25 


06 


1A 


A5 


25 


20 


6118- 


ED 


AD 


09 


03 


9D 


10 


03 


E8 


6030- 


08 


C8 


BD 


00 


03 


91 


08 


E8 


60A8- 


CI 


FB 


18 


A5 


28 


65 


24 


85 


6120- 


E0 


07 


DO 


DD 


AO 


00 


E6 


18 


6038- 


C8 


C6 


18 


A5 


18 


C9 


00 


F0 


6CB0- 


28 


AO 


00 


Bl 


28 


C9 


AA 


DO 


6128- 


A5 


18 


91 


08 


C8 


A5 


19 


91 


6040- 


03 


4C 


32 


60 


18 


98 


65 


08 


60B8- 


02 


E6 


1A 


C6 


25 


CA 


E0 


00 


6130- 


08 


A2 


06 


C8 


BD 


10 


03 


91 


6048- 


8D 


00 


40 


A5 


09 


69 


00 


8D 


60C0- 


DO 


El 


E6 


24 


E6 


18 


A5 


18 


6138- 


08 


C8 


CA 


CO 


09 


DO 


F5 


A5 


6050- 


01 


40 


60 


AO 


00 


Ab 


08 


8D 


60C8- 


C9 


10 


F0 


09 


AA 


A5 


1A 


9D 


6140- 


06 


18 


69 


08 


85 


06 


90 


02 



56 Pom's n° 19 



6148- 


E6 


07 


A5 


08 


18 


69 


09 


85 


6150- 


08 


90 


02 


E6 


09 


A5 


1 ft 

J. o 




6158- 


7E 


DO 


8E 


A9 


61 


8D 


00 


40 


6160- 


A9 


43 


8D 


01 


40 


60 


A5 


06 


6168- 


C5 


08 


DO 


06 


A5 


07 


C5 


09 


6170- 


F0 


17 


AO 


00 


Bl 


06 


20 


8A 


6178- 


61 


18 


A5 


06 


69 


01 


85 


06 


6180- 


A5 


07 


69 


00 


85 


07 


38 


BO 


6188- 


DD 


60 


AA 


AO 


10 


B9 


89 CO 


6190- 


29 


10 


FO 


F9 


AD 


89 


CO 29 


6198- 


40 


DO 


F2 


8A 


99 


88 


CO 


99 


61A0- 


80 


CO 


60 


AO 


00 


A9 


02 


85 


61A8- 


08 


A9 


40 


85 


09 


A9 


IB 


91 


61B0- 


08 


E6 


08 


A9 


5A 


91 


08 


E6 


61B8- 


08 


A9 


00 


91 


08 


E6 


08 


A9 


61C0- 


20 


91 


08 


E6 


08 


A9 


IB 


91 


61C8- 


08 


E6 


08 


A9 


2B 


91 


08 


E6 


61D0- 


08 


A9 


IB 


91 


08 


E6 


08 


A9 


61D8- 


49 


91 


08 


E6 


08 


60 


A9 


OA 


61E0- 


85 


06 


A9 


40 


85 


07 


A5 


08 


61E8- 


85 


19 


AO 


00 


Bl 


06 


C5 


19 


61F0- 


FO 


32 


C8 


Bl 


06 


85 


18 


A2 


61F8- 


02 


C6 


18 


E8 


A5 


18 


C9 


60 


6200- 


FO 


04 


C9 


40 


DO 


F3 


18 


AO 


6208- 


00 


8A 


65 


06 


85 


06 


A5 


07 


6210- 


69 


00 


85 


07 


CD 


01 


40 


DO 


6218- 


D3 


A5 


06 


CD 


00 


40 


DO 


CC 


6220- 


A9 


FF 


85 


08 


60 


AO 


01 


Bl 


6228- 


06 


85 


18 


A2 


00 


C8 


Bl 


06 


6230- 


9D 


00 


03 


E8 


C8 


C6 


18 


A5 


6238- 


18 


C9 


60 


FO 


04 


C9 


40 


DO 


6240- 


ED 


8A 


C9 


10 


FO 


09 


A9 


00 


6248- 


9D 


00 


03 


E8 


4C 


4 1 


62 


60 


6250- 


A2 


00 


A9 


OB 


85 




A9 


80 


6258- 


85 


18 


BD 


00 


03 


85 


19 


AO 


6260- 


00 


A9 


10 


85 


25 


A5 


25 


20 


6268- 


CI 


FB 


A5 


28 


18 


65 


24 


85 



C9 1 — 

/ U 


9ft 
£- O 


a s 

nJ 


1 Q 
X 3 


9 S 


1 ft 

X o 


iro 
r u 


O R 
U D 


a Q 
Ay 


CO *7 Q _ 
D£ / O 


a a 

AA 


4 r 

H 


Tr 
/ Cj 


C9 


A Q 

Ay 


a o 
AU 


Q 1 

y i 


ft 
£ o 


CO Q — 


^D 


9 S 


4 C 


1 ft 

J. o 


a R 


l ft 
1 o 


r Q 


oo 

uu 


COQO_ 


uu 


UD 


C C 
C* D 




P ft 


ft a 

OA 


uy 


x u 


C9 an— 


uu 




CO 
DU 


ft O 
AU 


O 1 
U 1 


bl 


n c 
U b 


oD 


CO Qft_ 
D£ "O 


1 ft 


a9 
a^ 


o 9 

U^ 


f* C 


1 ft 


TTft 
C.O 


a R 
AD 


1 O 




PQ 


CO 


tro 
r U 


O/l 
U4 




a n 


nn 
UU 


C* 7 


fi? aft — 


1 ft 


ft a 

On 


CS 


oc 


ft s 


Oft 

UO 


a s 

nJ 


7 
u / 




CQ 

D 3 


00 
uu 


ft ^ 
O J 


OQ 


ao 

AU 


OO 
uu 


a R 
AD 


Oft 
Uo 


C?Rft- 




00 
uu 


4 
H U 


no 


oa 

UA 


a R 

A3 


OQ 

u y 


on 
uu 


6?ro- 


m 
u j. 


40 

■a U 


nn 

UU 


07 


*j ^ 




C9 

D^ 


Rl 
DX 


torft- 
0£ o 


Oft 
U o 


Ql 
y x 


oc 


1 ft 
1 O 


a ^ 

A J 


OC 
U O 


CQ 

d y 


O 1 
U X 


D£ u u 


ft R 


OC 

U O 


a s 


OT 


CQ 


on 

uu 


ft r 

O J 


Ol 
u / 




1 ft 

J. o 


a^ 


Oft 


CQ 


U 1 


ft s 

O J 


Oft 
u o 


a s 


62E0- 


OQ 
u ^ 


6Q 


no 


ft s 


OQ 
u y 


rn 
^u 


m 

U X 


40 


C9t*ft — 


n n 


nn 
uu 


a R 


Oft 
Uo 


UU 


OO 

uu 


H U 


nn 
UU 


C9FO- 


nc 


a R 
a-j 


OC 


ftn 
ou 


no 
u u 


A O 


a R 
AD 


u / 


C9Fft — 


ftn 
o u 


01 


4 


CO 


a 9 
t\/. 


OO 
VJU 


Rn 


oo 


c7no— 




d a 

H A 


Qn 


oo 
uu 


7 
U j 


trft 
Lo 


E-U 


1 u 


670ft- 

\J J \J o 


no 

U U 


r *i 


fiO 


a? 


no 

u u 


Rn 

DU 


on 

u u 


U J 


67 1 fl- 


na 




00 


7 
U J 


eft 


i-U 


1 
Xu 


no 
uu 


6318- 


F4 


60 


a? 


OF 


Rn 

DU 


on 

uu 


n7 

U -5 


Fft 
no 


6320- 


9D 


00 


03 


CA 


CA 




00 
u u 


no 

uu 


679ft- 


F7 


DU 


00 


07 
u o 


CO 


Qn 


00 
uu 


7 
U J 


677n- 

O J J u 




00 
u u 


ftn 
ou 


00 
u u 


07 

U J 


CO 
DU 


a9 


1 
U X 


DJ Jo- 


on 


oo 
uu 


O 1 

U J 


CA 


Qrv 


uu 


C\ 7 

U j 


ho 


6340- 


E8 


E0 


OF 


DO 


F3 


BD 


00 


03 


6348- 


CA 


9D 


00 


03 


A9 


00 


8D 


OF 


6350- 


03 


60 















BYTE.FONT 

Stasis ess 2 ss s-sssi^s 

4020-00 10 10 17 39 03 01 07 00 70 21 2r 11 03 01 07 
4030-00 21 18 21 OS 07 05 02 00 08 3E 14 14 14 0« 00 



4040-00 It 20 13 0D 33 05 03 00 10 10 15 3D 07 05 05 
4050-00 08 Of ir 09 39 01 01 00 10 10 10 3A 05 05 05 
40fi0-00 08 II 09 39 03 01 07 00 28 18 2E 19 01 01 OC 
4070-00 10 21 2B 14 02 01 06 00 10 10 13 14 02 01 0« 
4080-00 38 08 08 0B OS 05 03 00 10 10 10 13 05 05 03 
4090-00 38 08 10 23 ID 05 03 00 IB 20 10 23 ID 05 03 
40A0-00 20 38 28 33 25 05 03 00 28 18 28 09 0D OB 09 
40BO-00 10 10 2B 2C 02 01 06 00 It 28 IF 29 IB 01 07 
40CO-00 24 34 2E 25 01 01 06 00 2t 21 3F 29 03 01 07 
40DO-00 It 28 IB 2C 1A 01 06 00 30 0B OF 31 03 01 07 
40EO-00 It 20 11 09 33 01 07 00 11 20 16 OD 37 01 06 
40FO-00 It 20 IS 0D 33 OS 03 00 18 20 17 0D 35 OS 05 
4100-00 00 00 00 00 00 00 00 00 1C 00 1C 1C 1C 1C 1C 
4110-00 00 00 00 12 24 36 36 00 22 7r 22 22 22 7F 22 
4120-00 Ot 3E 20 3E 02 3E 08 00 71 S2 74 01 17 25 47 
4130-00 2E 12 OA 04 02 12 0C 00 00 00 00 OC 10 1C 1C 
4140-00 It 0C 06 06 06 0C It 00 0C 18 30 30 30 18 0C 
4150-00 08 2A 1C OS 1C 2A 08 00 00 18 18 3E 08 0B 00 
4160-OC 10 1C 1C 00 00 00 00 00 00 00 00 3E 00 00 00 
4170-00 1C 1C 1C 00 00 00 00 00 01 02 04 08 10 20 40 
4180-00 3E 26 26 22 22 22 3E-00 3E 08 08 08 OS 08 0E 
4190-00 3E 06 06 3E 20 20 3E 00 3E 30 30 3E 20 20 3E 
41A0-00 30 30 7E 22 22 22 22 00 3E 32 30 3E 02 02 3E 
41B0-00 3E 26 26 3E 02 22 3E 00 0C 0C 0C 0B 10 22 3E 
41C0-00 3E 26 26 3E 22 22 3E 00 3E 32 30 3E 22 22 3E 
41D0-00 00 1C 1C 00 1C 1C 00 0C 10 1C lC 00 1C 1C 00 
41E0-00 30 IS OC 06 0C IS 30 00 00 00 3E 00 3E 00 00 
4ir0-00 06 0C IS 30 It 0C 06 00 08 00 OS 78 40 42 7E 
4200-00 3C 02 1A 3A 2A 22 1C 00 23 23 23 21 3r 11 lr 
4210-00 3F 23 23 21 3F 11 IF 00 3F 23 03 03 01 21 3F 
4220-00 IF 23 23 23 21 21 IF 00 3F 03 03 01 OF 01 3F 
4230-00 03 03 03 01 IF 01 3F 00 3F 23 23 39 01 21 3F 
4240-00 23 23 23 21 3F 21 21 00 0C 0C OC OC 04 04 04 
4250-00 IE 31 30 30 20 20 20 00 23 23 13 OF 09 11 21 
4260-00 3F 03 03 03 01 01 01 00 4B 4B 4B 49 49 49 3T 
4270-00 33 2B 2B 29 29 29 27 00 3F 23 23 21 21 21 3F 
4280-00 03 03 03 3F 21 21 3F 00 2r 13 2B 29 21 21 3F 
4290-00 23 23 13 3F 21 21 3r 00 3F 30 30 3F 01 01 3r 
42A0-00 0C 0C 0C 04 04 04 3r 00 3r 23 23 23 21 21 21 
42BO-00 08 14 22 23 23 21 21 00 7F 4B 4B 49 49 41 41 
42C0-00 21 21 12 0C 0C 12 21 00 0C 0C 04 3F 21 21 21 
42D0-00 3F 03 02 04 OS 10 3T 00 3E 06 06 06 06 06 3E 
42E0-00 40 20 10 08 04 02 01 00 3E 30 30 30 30 30 3E 
42F0-00 00 00 63 36 1C OS 00 7E 00 00 00 00 00 00 00 
4300-00 OO 00 00 10 18 OC 06 00 3E 22 3E 20 3E 00 00 
4310-00 3F 22 22 22 3E 02 02 00 3£ 02 02 02 3E 00 00 
4320-00 3E 22 22 22 3E 20 20 00 3E 02 3E 22 3E 00 00 
4330-00 04 04 04 04 IE 04 3C 3E 20 3E 22 22 3E 00 00 
4340-00 22 22 22 22 3E 02 02 00 08 08 08 OS OS 00 OS 
4350-1E 12 10 10 10 10 00 10 00 22 12 0E 12 22 02 02 
4360-00 OS 08 08 08 08 08 08 00 49 49 49 49 7F 00 00 
4370-00 22 22 22 22 3E 00 00 00 3E 22 22 22 3E 00 00 
4380-02 02 3E 22 22 3E 00 00 20 20 3E 22 22 3E 00 00 
4390-00 02 02 02 22 3E 00 00 00 3E 20 3E 02 3E 00 00 
43AO-00 3C 04 04 04 3E 04 00 00 3E 22 22 22 22 00 00 
43BO-O0 OS 14 22 22 22 00 00 00 7F 49 49 49 49 00 00 
43C0-00 22 14 08 14 22 00 00 3E 20 3E 22 22 22 00 00 
43D0-00 3E 04 08 10 3E 00 00 00 IS OC 0C 06 OC 0C IS 
43E0-0S 08 OS 08 OS 08 08 00 00 IS 30 30 60 30 30 IB 
43FO-00 02 06 0E IE 0E 06 02 7F ?r 7F 7F 7r 7F 7F 7F 
4400-8r 80 FT FF 00 00 00 00 



abedefghi jklimopqrstuviuxyz !8 



Programme CREATE 

100 HIMEM:16383:D$- CHR$ (4):CR$ - CHR$(13): 

PRINT : PRINT CHR$ (27): PRINT CHR$ (17): PRINT 

: PRINT CR$;D$;"PR#0":FLAG = 
105 P01 - 24576:P10 - 24609P20 = 24612P30 = 

24659:P40- 24719 
110 P50 - 24790:P60 = 25054:S65 - 25125:P70 = 

25168:P80- 25235 
115 S10 « 25340:S20 = 25355:S30 - 25370:S40 = 25398 
120 PRINT CR$: PRINT D$;"BLOAD 

SAISIE.OBJ,A$6000" 
125 ONERR GOTO 220 

130 REM MENU 

135 HOME : VTAB 6: HTAB 1 : PRINT -<0> FIN DE 

PROGRAMME 
140 VTAB 8: HTAB 1 : PRINT "<1> CREATION DUN JEU 

DE CARACTERE": VTAB 9: HTAB 20: PRINT 

-NOUVEAU FICHIER" 
145 VTAB 1 1 : HTAB 1 : PRINT "<2> AJOUT DE 

NOUVEAUX CARACTERES A UN": VTAB 12: HTAB 

20: PRINT "FICHIER ANCIEN" 
150 VTAB 14: HTAB 1 : PRINT "<3> AFFICHAGE/MODIF 



Pom's n° 19 



DE CARACTERES SUR UN": VTAB 15: HTAB 20: 

PRINT "FICHIER ANCIEN" 
1 55 VTAB 1 7: HTAB 1 : PRINT "<4> RECUPERATION 

DUN JEU DE CARACTERE": VTAB 18: HTAB 20: 

PRINT "CHAT MAUVE" 
1 60 VTAB 20: HTAB 1 : PRINT "<5> CHARGEMENT DUN 

FICHIER SUR PRINTER": CALL - 958 
1 65 VTAB 23: HTAB 10: PRINT "VOTRE CHOIX ";: GET 

R$ 

1 70 IND - 1 : GOSUB 870: IF IND - 5 THEN NFRM - 2 
175 ON IND GOTO 165,180,285,185,295,225,185 
180 END 

185 REM FICHIER ANCIEN 



190 VTAB 23: HTAB 10: INPUT "NOM DU FICHIER ? 
";NOM$ 

195 IF NOM$ - "T THEN PRINT CHR$ (4)"CATALOG": 
PRINT : PRINT : VTAB 23: HTAB 1 : CALL - 958: 
GOTO 190 

200 PRINT CHR$ (4);"BLOAD"NOM$".CHAR,A$4000" 
205 POKE 8, PEEK (16384): POKE 9, PEEK (16385) 
21 IF ASC (R$) - 50 THEN NFRM - 1 : GOTO 295 
215 GOTO 750 



220 PRINT "FICHIER NON TROUVE..Appuyez sur 

RETURN ";: GET R$: GOTO 130 
225 REM FICHIER CHAT MAUVE 

230 VTAB 23: HTAB 10: INPUT "NOM DU FICHIER ? 
";NOM$: IF NOM$ - T THEN PRINT CHR$ 
(4)"CATALOG": PRINT : PRINT : VTAB 23: HTAB 1 : 
CALL -958: GOTO 230 

235 PRINT CHR$ (4);"BLOAD"NOM$".FONT,A$4000" 

240 CALL P50 

245 VTAB 20: HTAB 1 : CALL - 958 

250 VTAB 22: HTAB 1 : PRINT "1 AFFICHAGE / 
SAUVEGARDE": VTAB 23: HTAB 1 : PRINT " 
MODIFICATION ENVOI PRINTER ";: GET R$ 

255 IND - 1 : GOSUB 890 

260 ON IND GOTO 250,275,265 

265 NFRM ■ 3 

270 GOTO 295 

275 POKE 8, PEEK (16384): POKE 9, PEEK (16385) 
280 GOTO 750 

285 REM CONSTRUCTION DU CADRE 

290 NFRM = 

295 HOME : IF NFRM < 2 THEN VTAB 1 : HTAB 1 : PRINT 

'SSfhSSHfS^ - HAUTEUR : 9 ": VTAB 2: 
HTAB 1 : PRINT "LARGEUR DE 1 A 1 6 ";: PRINT 
"MAJUSCULES : A...P": VTAB 3: HTAB 19: PRINT 
"minuscules : a...p" 

300 FOR I - 1 TO 16: VTAB 8: HTAB (1 1 + I): PRINT 
CHR$ (64 + I): VTAB 9: HTAB (1 1 + I): PRINT "-": 
VTAB 18: HTAB (1 1 + I): PRINT "-": VTAB 19: HTAB 
(1 1 + I): PRINT CHR$ (96 + I): NEXT I 

305 FOR I - 1 TO 8: HTAB 10: VTAB 9 + I: PRINT I;"!": 
VTAB 9 + I: HTAB 28: PRINT "!";: PRINT I + 1 : NEXT I 

310 IF NFRM -2 THEN 400 

315 IF NFRM = 3 THEN 425 

320 REM DEPLACEMENT DU CURSEUR 

325 VTAB 20: HTAB 1 : CALL - 958: VTAB 21 : HTAB 1 : 
PRINT "FLECHES : DEPLACEMENT DU CURSEUR": 
VTAB 22: HTAB 1 : PRINT "ESPACE : CHANGEMENT 
0:FIN " 
330 XD-12:YD-10 
335 HTAB XD: VTAB YD: GET R$ 
340 IF ASC(R$)«8THENXD-XD-1:GOT0365 
345 IF ASC (R$) - 1 THEN YD = YD + 1 : GOTO 365 
350 IF ASC (R$)« 11 THEN YD- YD- 1: GOTO 365 
355 IF ASC (R$) - 21 THEN XD = XD + 1 : GOTO 365 
360 IF R$ - T THEN CALL P40: GOTO 680 
365 IF XD < 12 THEN XD - 12 
370 IFXD>27THENXD-27 
375 IF YD < 10 THEN YD - 10 
380 IF YD > 17 THEN YD - 17 

385 IF ASC (R$) - 48 OR ASC (R$) = 64 THEN CALL 

P40: GOTO 580 
390 IF ASC (R$) - 32 THEN CALL P01 
395 GOTO 335 

400 REM AFFICHAGE CARACTERE EXISTANT — 

405 VTAB 4: HTAB 1 : INPUT "NOM DU FICHIER ? ";NOM$ 
410 IF NOM$ - "T THEN CALL -958: PRINT CHR$ 
(4)"CATALOG": PRINT : PRINT : VTAB 23: HTAB 1 : 
CALL , 958: PRINT TAPEZ SUR UNE TOUCHE": 
GET R$: GOTO 295 
415 PRINT CHR$ 

(4);"BLOAD"NOM$".CHAR,A$4000":NFRM - 3:NR = 
0: GOTO 245 

420 VTAB 4: HTAB 1 : PRINT "NOM DU FICHIER ? ";NOM$ 



425 VTAB 6: HTAB 1 : PRINT "CARACTERE A 
RECHERCHER ? ";: GET Q$: PRINT Q$ 

430 IF ASC (Q$) < > 13 THEN 465 

435 IF NR = THEN NR - 1 :Q$ ■ CHR$ ( PEEK (1 6394)): 
GOTO 460 

440 DEP- PEEK (PEEK (7)* 256+ PEEK (6) + 1 ) - 64: 

IF DEP > 32 THEN DEP - DEP - 32 
445 DEP- DEP + PEEK (7)* 256+ PEEK (6) + 2 
450 IF DEP > - PEEK (16384)+ PEEK (1 6385) ' 256 

THEN NR - 0: GOTO 435 
455 Q$ - CHR$ ( PEEK (DEP)) 

460 VTAB 6: HTAB 1 : CALL - 868: PRINT "CARACTERE 
SUR ECRAN : ";Q$ 

465 IF PEEK (16384) =10 AND PEEK (16385) - 64 THEN 
VTAB 21 : HTAB 1 : PRINT "LE FICHIER NE 
CONTENT AUCUN ELEMENT..": VTAB 22: HTAB 1: 
PRINT "..RETOUR AU MENU..Appuyez sur 
RETURN..";: GET R$: GOTO 130 

470 NR - 1 : POKE 8, ASC (Q$): CALL P60 

475 IF PEEK (8) < > 255 THEN 500 

480 VTAB 22: HTAB 1 : PRINT "NON TROUVE":NR - 

485 VTAB 23: HTAB 1 : PRINT "UNE AUTRE RECHERCHE 
O/N ? ";: GET R$: PRINT R$: IF R$ = "O" OR R$ - "o" 
THEN HOME: GOTO 295 

490 IF R$ < > "N" AND R$ <> "n" THEN VTAB 20: HTAB 
1:CALL -958: GOTO 485 

495 GOTO 245 

500 CALL S65: CALL P70: REM AFFICHAGE 
505 VTAB 22: HTAB 1 : PRINT "0: FIN 

1 SUPPRESSION": VTAB 23: HTAB 1 : PRINT "2: 

MODIFICATION 3:AUTRE CARACTERE ";: GET R$ 
510 IF R$-"?" THEN 680 
515 IND - 1 : GOSUB 880 
518 IF ASC (R$)- 13 THEN 435 
520 ON IND GOTO 505,245,525,320,295 
525 VTAB 22: HTAB 1 : CALL - 958: CALL P80:FLAG = 

1 :NR - 0: GOTO 485: REM SUPPRESSION 
530 POKE 8, ASC (R$): CALL P60:FLAG = 1 : IF PEEK (8) 

-255 THEN 540 
535 CALL P80: REM SUPPRESSION 
540 R - ASC (R$): POKE 6,R:R - ASC (L$): POKE 7,R 
545 R-R-64: IF R> 32 THEN R - R -32 
550 POKE24.R 

555 POKE 8, PEEK (16384): POKE 9, PEEK (16385) 

560 CALL P20: REM 

565 GOTO 485 

570 IF FLAG -0 THEN 245 

575 GOTO 750 

580 REM - CHARGT CODE A $4000 ET SUIVANTS 

585 VTAB 20: HTAB 1 : CALL - 958: VTAB 21 : HTAB 1 
590 IF NFRM < > 3 THEN 610 

595 PRINT "MEME CODE ASCII <";Q$;"> O/N?";: GET 

R$: PRINT R$: IF R$ - "O" OR R$ = "o" THEN R$ = 

Q$: GOTO 625 
600 IFR$o"N"ANDR$< >"n"THEN585 
605 VTAB 20: HTAB 1 : CALL - 958: VTAB 21 : HTAB 1 
61 PRINT "CODE CARACTERE DU DESSIN ? ";: GET 

R$: PRINT R$: IF ASC (R$) - 13 AND NFRM = 3 

THEN 505 
615 IF ASC (R$) - 13 THEN 320 
620 IF ASC (R$) < 26 OR ASC (R$) > 1 27 THEN 585 
625 VTAB 22: HTAB 1 : PRINT "LARGEUR DU CARATERE 

? ";: GET L$: PRINT L$: IF ASC (L$) = 13 AND NFRM 

- 3 THEN 505 



58 



Pom's n° 19 



773 



775 



R$ - "O" OR R$ - "o" THEN 775 
772 IF R$ < > "N" AND R$ < > "n" THEN 760 

vTAB 23: HTAB 1 : INPUT "NOM DU FICHIER ? 
";NOM$ 

A - 4 * 16 A 31 - PEEK (16384) + PEEK (16385) * 
256 - A: PRINT CHR$ 
(4)"BSAVE"NOM$".CHAR,A"A",L"L 
780 REM ENVOI VERS PRINTER 



630 IF ASC (L$) - 13 THEN 320 

635 IF ( ASC (L$) > 64 AND ASC (L$) < 81 ) OR ( ASC (L$) 

> 96 AND ASC (L$) < 1 13) THEN 645 
640 GOTO 625 
645 IF NFRM - 3 THEN 530 

650 R - ASC (R$): POKE 6,R:R - ASC (L$): POKE 7,R 
655 R-R-64: IF R > 32 THEN R - R -32 
660 POKE24.R 

665 IF NFRM - THEN NFRM - 1 : CALL P1 0: GOTO 725 
670 POKE 8, PEEK (16384): POKE 9, PEEK (16385): 

CALL P20 
675 GOTO 725 

680 REM DECALAGES 

685 VTAB 22: HTAB 1 : PRINT " DECALAGES 0: HAUT 

1 : BAS ": VTAB 23: HTAB 1 : PRINT "<CR> RETOUR 

2: DROITE 3: GAUCHE ";: GET R$ 
690 IF ASC (R$) - 13 THEN 505 
695 IND - 1 : GOSUB 880 
700 ON IND GOTO 685,705,710,715, 
720 

705 CALL S1 0: CALL P70: GOTO 320 
710 CALL S20: CALL P70: GOTO 320 
715 CALL S30: CALL P70: GOTO 320 
720 CALL S40: CALL P70: GOTO 320 

725 REM CONTINUATION 

730 VTAB 23: HTAB 1 : CALL - 958: IF NFRM - 3 THEN 
465 

735 PRINT "NOUVELLE FORME O/N ? ";: GET R$: PRINT 
R$: IF R$ - "O" OR R$ = "o" THEN HOME : GOTO 295 
740 IF R$ < > "N" AND R$ < > "n" THEN 730 
745 GOTO 245 

750 REM SAVE FICHIER 

755 VTAB 20: HTAB 1 : CALL - 958 
760 VTAB 22: HTAB 1 : PRINT "SAUVEGARDE DU 

FICHIER O/N ? ";: GET R$: PRINT R$: IF R$ = "N" OR 

R$ = "n" THEN 780 
765 IF R$ < > "O" AND R$ < > "o" THEN 760 

770 IF NOM$ - ~ THEN 773 

771 VTAB 22: HTAB 1 : PRINT "SAUVEGARDE SOUS LE 
NOM DE <";NOM$;"> O/N ";: GET R$: PRINT R$: IF 

Hard copy de la page HGR sur 
ImageWriter 

Yvan Koenig 



785 VTAB 22: HTAB 1 : CALL - 958 
790 PRINT "ENVOI VERS PRINTER O/N ? ";: GET R$: 

PRINT R$: IF R$ - "N" OR R$ = "n" THEN 865 
795 IF R$ <> "O" AND R$ <> "o" THEN 780 
800 POKE 8, PEEK (16384): POKE 9, PEEK (16385) 
805 PRINT CR$;D$;"PR#1": PRINT CR$;: CALL P30: 

PRINT CHR$ (4);"PR#0" 
81 VTAB 23: HTAB 1 : PRINT "CONTROLE PRINTER 
O/N ? ";: GET R$: PRINT R$: IF R$ - "N" OR R$ - "n" 

815 IFR$< >"0"ANDR$< >"o"THEN810 
820 PRINT CR$;D$;"PR#1": PRINT CHR$ (27); CHR$ (39) 
825 PRINT "ABCDEFGHUKLMNOPQRSTUVWXYZ 

0123456789 -'ffcjr 
830 PRINT CHR$ (27); CHR$ (36) 
835 PRINT "ABCDEFGHUKLMNOPQRSTUVWXYZ 

0123456789 -~§;"q,.r 
840 PRINT CHR$ (27); CHR$ (39) 
845 PRINT "abcdefghijklmnopqrstuvwxyz 

la#$%*&-()_ + ee:~u<>r 
850 PRINT CHR$ (27); CHR$ (36) 
855 PRINT "abcdefghijklmnopqrstuvwxyz 

!a#$% A &*()_+ee:~uo?" 
860 PRINT CHR$ (4);"PR#0" 
865 GOTO 130 

870 IF ASC (R$) = 53 OR ASC (R$) - 40 THEN IND = 7 
875 IF ASC (R$) - 52 OR ASC (R$) = 39 THEN IND - 6 
880 IF ASC (R$) - 51 OR ASC (R$) - 34 THEN IND = 5 
885 IF ASC (R$) - 50 OR ASC (R$) - 123 THEN IND - 4 
890 IF ASC (R$) = 49 OR ASC (R$) = 38 THEN IND - 3 
895 IF ASC (R$) = 48 OR ASC (R$) - 64 THEN IND = 2 
900 RETURN 



II existe un moyen simple d'obtenir 
une copie papier des pages graphi- 
ques de l'Apple 280 x 192 points a 
partir du programme de Marc Debui- 
gne du Pom's 18. II s'agit d'un patch 
utile a ceux qui ne disposent pas 
d'une carte 80 colonnes etendue. 

Si vous possedez I'assembleur Big 
Mac, il suffit dans le source de sup- 
primer les lignes 97, 101 a 104, 143 
a 148. II faut en outre remplacer la 
ligne 132 par LDA #$B0, la 134 par 
LDA #$B5, et la 136 par LDA 
#$B6. 

Pour modifier directement le code 
objet il faut pratiquer comme suit : 



BLOAD HARD 
CALL -151 

405D:EA EA EA 

4069.EA EA EA EA EA EA EA 

4070:EA EA EA EA EA 

40BB:B0 

40C0:B5 

40C5.B6 

40D6:EA EA 

40D8.EA EA EA EA EA EA EA EA 
40E0:EA EA EA EA EA EA EA 

BSAVE HARD,A$4000,L$1A0 



Pour respecter la geometrie de 
l'image a reproduire, il conviendra de 
n'imprimer qu'en taille normale et de 



mettre auparavant 
mode dilate par : 

PRINT D$"PR#1": 
PRINT CHR$(14) 



1'imprimante en 



Un Bug ? 

Essayez : 

10 INPUT A : PRINT A 
20 GOTO 20 

avec les valeurs 5,032 et 6.032. 
Qui peut expliquer ce phenomene ? 

Mr Baron - 31530 Levignac. 



Pom's n° 19 



59 



Retrouvez vos programmes perdus 

Guy d'Herbemont 



Nul n'est a l'abri d'une erreur de ma- 
nipulation : verite premiere qui peut 
parfois porter gravement atteinte a la 
productivite du programmeur ! 

Je pense la plus particulierement a 
un type d' erreur que vous avez vrais- 
semblablement tous rencontre, helas, 
au moins une fois. Au cours de la 
mise au point d'un programme Ap- 
plesoft, vous avez ainsi sauve sur dis- 
quette une premiere version de vorre 
travail, comportant quelques lignes 
de Basic, sous le nom de PGM. par 
exemple. Peu de temps apres, vous 
attaquez la suite de la tache avec 
energie, ameliorez les premieres ins- 
tructions, rentrez en machine l'essen- 
tiel du programme et, consciencieu- 
sement, songez a sauvegarder le fruit 
de vos efforts. Et c'est alors que, vic- 
time de la fatigue, vous tapez 
"LOAD PGM" en lieu et place de 
"SAVE PGM", reduisant ainsi a 
neant plusieurs heures de labeur, 
pour ne plus retrouver en memoire 
que les quelques lignes de depart... 

Erreur funeste, il est vrai, mais pas ir- 
reparable, car la suite de votre pro- 
gramme se trouve toujours en me- 
moire, mais au dela du pointeur de 
fin de programme, ce qui vous em- 
peche de la retrouver, tant pour un 
LIST que pour un SAVE. 

La petite routine TROUVE que je 
vous propose ici, permet justement 
de reconstituer une fin de pro- 
gramme ainsi perdue, en modifiant 
les pointeurs de debut et de fin de 
programme de telle facon que la par- 
tie de memoire delimitee par ces 
pointeurs presente a nouveau une 
structure correcte tant pour le DOS 
que pour 1' Applesoft. 

Les principes utilises sont les sui- 
vants : 

• En partant de l'adresse donnee 
par le pointeur de fin de pro- 
gramme initial, chercher le premier 
qui puisse etre correctement 



considere comme marqueur de fin 
de ligne. 

• Le premier octet suivant ce cor- 
respond au debut de la premiere 
ligne Applesoft recuperable, et son 
adresse sera donnee comme nou- 
veau pointeur de debut de pro- 
gramme. 

• On parcourt ensuite les lignes suc- 
cessives, jusqu'a trouver si possi- 
ble les deux zeros marquant la fin 
de programme, et ce en mettant a 
jour le pointeur de fin de pro- 
gramme en consequence. 

Si cette routine est executee victo- 
rieusement, vous pouvez ensuite sau- 
ver la partie de programme ainsi re- 
constitute. Par le biais de sa 
transformation ulterieure en fichier 
EXEC, par exemple, il est permis de 
la fusionner avec le debut de pro- 
gramme deja sauvegarde. II ne reste 
alors qu'a "boucher" un petit trou 
entre les deux parties et a reprendre 
les modifications eventuelles sur les 
premieres lignes, avant de sauver 
(sans erreur si possible...) le pro- 
gramme complet ainsi retrouve. 

II est possible toutefois que la routine 
debouche sur un echec, lorsque les 
octets situes au dela du pointeur de 
programme initial (apres le LOAD in- 
tempestif) ne permettent pas de re- 
trouver une structure Applesoft cohe- 
rente. Ceci sera souvent le cas si 
d'autres operations, telles que RUN, 
sont effectuees avant que l'erreur ne 
soit constatee et que la routine soit 
utilisee. Notons par ailleurs que 
TROUVE ne permettra jamais, bien 
sur, de recuperer un programme 
ecrase par le chargement d'un autre 
plus long que lui, car la perte est 
cette fois effective et ne se situe plus 
du tout au niveau du pointeur de fin 
de programme. 

Mode d'emploi 

Lorsque vous constatez l'erreur de 
manipulation, chargez de suite la 



routine par BLOAD TROUVE. OBJ et 
lancez-en 1' execution par CALL 768. 
S'il n'y a pas de message "ECHEC", 
vous pouvez lister la partie de pro- 
gramme recuperee et la sauver sur 
disquette. 

Par un CALL 863 (utilisation de la 
sous - routine ECHEC), remettez en- 
suite les pointeurs de debut et de fin 
de programme a leurs valeurs stan- 

Rechargez alors la partie de pro- 
gramme recuperee et transformez-la 
en fichier EXEC (voir manuel du 
DOS 3.3). 

Faites enfin un LOAD du debut de 
programme, puis un EXEC de la se- 
conde partie, et terminez les opera- 
tions normalement sur le programme 
complet reconstitue en memoire. 



Recapitulation 

TROUVE.OBJ 



0300- 


A5 


AF 


85 


67 


A5 


B0 


85 


68 


0308- 


A5 


B0 


C9 


96 


B0 


51 


AO 


00 


0310- 


Bl 


67 


FO 


08 


E6 


67 


DO 


F8 


0318- 


E6 


68 


DO 


F4 


E6 


67 DO 


02 


0320- 


E6 


68 


A5 


67 


85 


AF 


A5 


68 


0328- 


85 


B0 


AO 


01 


Bl 


AF 


F0 


19 


0330- 


C5 


B0 


90 


D4 


E6 


B0 C5 


B0 


0338- 


F0 


02 


B0 


CC 


48 


88 


C6 


B0 


0340- 


Bl 


AF 


85 


AF 


68 


85 


B0 


DO 


0348- 


El 


88 


Bl 


AF 


DO 


BA 


A5 


AF 


0350- 


18 


69 


03 


85 


AF 


A5 


B0 


69 


0358- 


00 


85 


B0 


20 


8B 


FD 60 A9 


0360- 


01 


85 


67 


A9 


08 


85 


68 


85 


0368- 


B0 


AO 


03 


84 


AF 


A9 


00 


88 


0370- 


91 


67 


DO 


FB 


20 


8B 


FD 


A2 


0378- 


OA 


BD 


86 


03 


20 


ED 


FD 


CA 


0380- 


DO 


F7 


20 


8B 


FD 


60 


20 


03 


0388- 


20 


05 


20 


08 


20 


03 


20 


05 


0390- 


20 


16 















Programme TROUVE.SCE 

(Assembleur LISA 1.5) 



2 PRGDEB 

3 PRGEND 

4 COUT 

5 CROUT1 



ORG $300 

EPZ $67 

EPZ $AF 

EQU SFDED 

EQU SFD8B 



6 LIM 


EQU 


$96 


;page fin recherche 


7 


LDA 


PRGEND 




8 


STA 


PRGDEB 




9 


LDA 


PRGEND+1 




10 


STA 


PRGDEB+1 




11 DEBUT 


LDA 


PRGEND+1 


;cherch ler octetnul 


12 


CMP 


#LIM 


;pas au dela de LIM 


13 


BCS 


ECHEC 




14 


LDY 


#0 





Pom's n° 19 



15 


Dl 


LDA (PRGDEB) , Y 


16 




BEQ D2 


octst trouvp 


17 




INC PRGDF.R 




18 




BNE Dl 




19 




INC PRGDFP.+1 




20 




BNE Dl 




21 


D2 


INC PRGDEB 




22 




BNE D3 




23 




INC PRGDEB+1 




24 


D3 


LDA PRGDEB 




25 




STA PRGEND 




26 




LDA PRGDEB+1 




27 




STA PRGEND+1 




28 


SUITE 


LDY #1 


;chercher la fin 
d'adresse pn adrp»-i<-.p» 


29 




LDA (PRGFNDt Y 


•pmn^ fort 


30 




BEO TF.ST1 


•fin *> 


31 




CMP PRGEND+1 




32 




BCC DEBUT 


/ ^ l c j oc I. 1 U a a J> t; 


33 




tnc PRr;FNn+i 

c i\VjHiL\ U t i. 




34 




CMP PRGEND+1 




35 




BEQ SI 




36 




BCS DEBUT 


#'c.dresse troo pipvpp 


37 


SI 


PHA 




38 




DEY 




39 




DEC PRGEND+1 




40 




LDA (PRGEND) , Y 


;Poids faiblf dp 


41 




STA PRGFND 


•1 ' aH roc cq cin irapf a 


42 




PLA 




43 




STA PRGFND+1 


*»u.. puius tort 


44 




BNE SUITE 


• Krs T'ho *~ i*m i "\*~ii'»-f 


45 


TEST1 


DEY 




46 




LDA (PRGEND) , Y 




47 




BNE DEBUT 




48 


FIN 


LDA PRGEND 




49 




CLC 




50 




ADC #3 




51 




STA PRGEND 




52 




LDA PRGEND+1 




53 




ADC #0 




54 




STA PRGEND+1 




55 




JSR CR0UT1 




56 




RTS 




57 


ECHEC 


I.DA #1 




58 




olA PKGDEB 




SQ 

j y 




I flu 11 o 
LDA to 




V, ^ 




olA rKGDEB+1 








blA PRGEND+1 




62 




LDY #3 




63 




STY PRGEND 




64 




LDA #0 




65 


El 


DEY 




66 




STA (PRGDEB) . Y 

— " " y , 1 *^ *J J_J /ft 




67 




BNE El 




68 




JSR CR0UT1 




69 




LDX #$0A 




70 


E2 


LDA TEXT2,X 




71 




JSR COUT 




72 




DEX 




73 




BNE E2 




74 








75 




RTS 




76 


TEXT2 


INV " C E H C E 




77 




DCM "INT" 




78 




END 





Erraft/m 

Lors du montage de "Gestion de fenitres lexte", programme de G. 
Zwingelstein paru dans le numiro 18, un coup de ciseaux malheureux a 
supprimi les4IS du source assembleur etdela re'capitulalion. Vous Irouverez 
ci-dessous le code hexadecimal complet. Le source, trop important pour une 
publication integrate n'etait pas non plus sur la disquette d" accompagnement. 
Nous proposons d ceux d'enlre vous qui possident BigMac de nous envoyer 
une disquette vierge et une enveloppe self-adressie affranchie a 320 F. Nous 
renverrons Vinlegralite du programme. 

A noter que le code objet de la disquette dacompagnement suffil d une 
utilisation complete de ce programme. 



89EE- 

89F0- 

89F8- 

8A00- 

8A08- 

8A10- 

8A18- 

8A20- 

8A28- 

8A30- 

8A38- 

8A40- 

8A4 8- 

8A50- 

8A58- 

8A60- 

8A68- 

8A70- 

8A7 8- 

8A80- 

8A88- 

8A90- 

8A98- 

8AA0- 

8AA8- 

8AB0- 

8AB8- 

8AC0- 

8AC8- 

8AD0- 

8AD8- 

8AE0- 

8AE8- 

8AF0- 

8AF8- 

8BO0- 

8B08- 

8B10- 

8B18- 

8B20- 

8B28- 

8B30- 

8B38- 

8B40- 

8B48- 

8B50- 

8B58- 

8B60- 

8B68- 

8B70- 

8B78- 

8B80- 

8B88- 

8B90- 

8B98- 

8BA0- 

8BA8- 

8BB0- 

8BB8- 

8BC0- 

8BC8- 

8BD0- 

8BDB- 

8BE0- 

8BE8- 

8BF0- 

8BF8- 



A9 4C 
8D F5 
A9 8A 
00 8A 
OF DD 
F8 4C 
BD 31 
60 A2 
A3 49 
AC 8A 
44 92 
58 8A 
0B 90 
00 00 
00 38 
FA AD 
A9 00 
8D 52 
2C 58 
8A A9 
8D 55 
8D A6 
74 20 
9 A6 
D2 D7 
CA E0 
22 C5 
FB 05 
E6 CA 
24 8D 
20 E7 

20 24 
85 FA 
8C 90 

21 8D 
20 07 
E7 8D 
56 8A 
A9 00 
20 E7 
AD 56 
60 4C 
78 4C 
D5 E8 
08 AD 
EB 20 
20 21 
85 FA 
DD 20 
50 85 
72 20 
C5 70 
F0 30 
85 3D 
88 CA 
85 42 
A5 6F 
90 05 
8B 8C 
85 70 

85 74 

86 5F 
8C F0 
69 A6 
6C DO 
47 8C 
A9 03 



03 A9 02 
8D F7 03 
48 20 Bl 
20 8A F0 
C9 DE CA 
8A 48 BD 
96 AA B6 
43 4F 46 
C5 8A 2F 

04 93 41 
24 8F 4A 
8A 8F A4 

00 00 12 
AD 00 8A 

01 8A E9 
8D 4E 8A 
8A 20 B9 
8A 10 01 
00 8D 54 
8A 20 AB 
FA A5 FB 
6C D6 A6 
33 E0 DD 
4C 3C D4 
18 B0 7F 
23 B0 77 
20 A7 95 
E4 21 B0 
7B 05 8D 
8D 20 21 
8E 20 60 
A5 74 85 
3E 60 20 
90 40 48 
8D 90 3A 
20 21 8D 
20 07 8D 
20 07 8D 
8D 20 07 
8A 20 21 
10 D4 4C 
12 D4 4C 
20 E7 8D 
56 8A 20 
F3 8D 28 
8D 18 A9 
90 02 E6 
52 E7 38 
71 A5 FB 
C8 8C 90 
DO 06 A5 
A5 6F 85 
A4 FB A6 
86 3E 84 
A5 SF 85 
C5 5E A5 
20 2C FE 
AS 5E 85 
A5 50 85 
A9 55 A2 
CS 52 F0 
F7 A9 07 
6A 85 5E 
04 C5 6B 
F0 F3 85 
85 8F A5 



8D F6 03 
4C 59 8A 
00 68 A2 
06 CA DO 
8A OA AA 
30 8A 48 
B7 AS A7 
45 44 50 
91 84 92 
93 55 8B 
8F 69 8F 
8F 00 00 
8A 00 00 
E9 08 85 
00 85 FB 
8D 4F 8A 
95 A9 28 
OA 8D S3 
8A A9 18 
8D 20 C6 
86 73 85 
76 E8 F0 
F0 03 4C 
20 F8 E6 
8A 18 65 
85 25 8D 
60 20 F8 
66 8A 85 
7B 04 60 
8D B0 57 
8D A5 73 
FB 20 C8 
E7 8D 20 
AD 56 8A 
68 60 20 
90 2D AD 
B0 28 60 
F0 ID 60 
8D BO 0C 
8D 90 0C 
99 El A2 
7C D9 4C 

20 07 8D 

21 8D 90 
60 A9 00 
08 65 FA 
FB 20 67 
A5 FA E5 
E5 51 85 
B3 A5 FB 
FA C5 6F 
3C A5 
FA DO 
3F A5 
43 AO 
70 E5 5F 
B0 03 20 
6F A5 5F 
73 AS 51 
00 85 5E 
05 20 51 

85 8F A5 

86 5F E4 
F0 05 20 
94 86 95 
94 A6 95 



70 
01 
5E 
00 



8C0O- E4 6E DO 05 CS 6D DO 01 
8C08- 60 85 5E-86 5F AO 00 Bl 
8C10- 5E AA C8 Bl 5E 08 C8 Bl 
8C18- 5E 65 94 85 94 C8 Bl 5E 
8C20- 65 95 85 95 28 10 D5 8A 
8C28- 30 D2 C8 Bl 5E AO 00 OA 
8C30- 69 05 65 5E 85 SE 90 02 
8C38- E6 SF E4 95 DO 04 CS 94 
8C40- FO BE 20 51 8C F0 F3 Bl 
8C48- 5E 30 30 C8 Bl SE 10 2B 
8C50- C8 Bl 5E F0 26 C8 38 Bl 
8C58- 5E E5 71 AA C8 Bl SE E5 
8C60- 72 C5 70 90 16 DO 04 E4 
8C68- 6F 90 10 CS 74 90 06 DO 
8C70- OA E4 73 B0 06 91 SE 88 
8C78- 8A 91 5E A5 8F 18 65 SE 
8C80- 85 5E 90 02 E6 5F A6 SF 
8C88- AO 00 60 38 AS 3E E5 3C 
8C90- 85 40 A5 3F E5 3D 85 41 
8C98- 18 A5 42 65 40 85 40 A5 
8CA0- 43 65 41 85 41 Bl 3E 91 
8CA8- 40 20 AF 8C 90 F7 60 A6 
8CB0- 40 DO 02 C6 41 C6 40 A5 
8CB8- 3C CS 3E A5 3D E5 3F A6 
8CC0- 3E DO 02 C6 3F C6 3E 60 
8CC8- 20 84 E4 38 AS 73 E5 71 
8CD0- 85 50 A5 74 E5 72 85 51 
8CD8- 38- AS FA E5 71 85 5E A5 
8CE0- FB ES 72 85 SF AD 00 8A 
8CE8- C5 5E AD 01 8A E5 5F 90 
8CF0- 15 38 A5 6F E5 71 85 5E 
8CF8- AS 70 E5 72 85 5F A5 5E 
8D0O- C5 6D AS 5F E5 6E 60 48 
8D08- A9 00 20 21 8D F0 0C 68 
8D10- CD 4F 8A F0 08 48 AD 4F 
8D18- 8A DO EF 68 18 AD 4E 8A 
8D20- 60 48 A5 73 85 FA A5 74 
8D28- 85 FB 20 B9 8D 68 CD 4E 
8D30- 8A F0 IB 48 AD 4E 8A F0 
8D38- 13 20 60 BD 18 AS FA 65 
8D40- 71 85 FA A5 FB 65 72 85 
8D48- FB 4C 2A 8D 68 18 AD 4F 
8D50- 8A 60 A9 08 18 65 FA 85 
8D58- FC A5 FB 69 00 8S FD 60 
8D60- A9 08 85 71 A9 00 F0 04 
8D68- A9 00 85 71 85 72 38 AD 
8D70- 55 8A ED 54 8A F0 10 A8 
8D78- AD 53 8A 18 65 71 85 71 
8D80- 90 02 E6 72 88 DO Fl 60 
8D88- A5 25 38 ES 22 8D 50 8A 
8D90- A5 24 2C 58 8A 10 03 AD 
8D98- 7B 05 8D 51 8A 60 AD 50 
8DA0- 8A 20 B6 8A AD 51 8A 20 
8DA8- CF 8A 60 AO 04 B9 4E 8A 
8DB0- 99 1C 00 C8 CO 08 90 F5 
8DB8- 60 AO 00 Bl FA 99 4E 8A 
8DC0- C8 CO 08 90 F6 60 AO 00 
8DC8- B9 4E 8A 91 FA C8 CO 08 
8DD0- 90 F6 60 AO 04 B9 4E 8A 
8DD8- 48 Bl FA 99 4E 8A 68 91 
8DE0- FA C8 CO 08 90 EF 60 20 
8DE8- F8 E6 8A F0 34 30 32 8E 
8DF0- 56 8A 60 20 BE DE 20 F8 
8DF8- E6 CA 8A 2C 58 8A 10 02 
8E00- 29 FE 8D 52 8A 20 BE DE 
8E08- 20 F8 E6 CA 8A 38 ED 54 
8E10- 8A 18 6D 55 8A 8D 55 8A 



8E18- 




51 


8 A 


2 


78 


8E 


9 


01 


8E20- 


6C 


4C 


99 


El 


AO 


04 


9 8 


18 


8E28- 


20 


BE 


DE 


20 


F8 


E6 


68 


A3 


8E30- 


8 A 


99 


4E 


9A 


C8 


CO 


08 


90 


8E38- 


ED CE 


54 


8 A 


CE 


5 2 


8A 2C 


8E40- 


58 


8A 10 13 


EE 


53 


8A AD 


8E48- 


53 


8A 29 


FE 


80 


53 


8A AD 


8E50- 


52 


8A 29 


FE 


8D 


52 


8A AD 


8E58- 


5 3 


B A 


ED 


5 ? 


8A 8D 


53 


8 A 


8E60- 


20 


78 


8E 


q n 


BC 


2 


B7 


00 


8E68- 


r 


OA 


20 


BE 


DE 


20 


F6 


E 6 


8E70- 


8 F. 


51 


8A 


A 


A2 


AO 


DC 


F8 


8E78- 


Ar; 


54 


8A 


in 
.5 U 


33 


CD 


5S 


3 A 


3E80- 


BO 


2E 


A9 


- y 


CD 


5 5 


8A 


9 


8E88 — 


27 


AD 


5 2 




3 C 


y 2 


2 


5 8 


8E90 — 


8 A 


10 


OD 


6A 


BO 


1A 


AD 


53 


g £9 g — 


8 A 


6A 


30 


14 


A 9 


5 


DO 


02 


8EA0- 


A9 


28 


38 


ED 


52 


8 A. 


FO 


08 


8EA8- 


90 


06 


ED 


53 


8 A 


9 


01 


60 


8EB0- 


18 


60 


20 


52 


8D 


AE 


5', 


SA 


8EB8- 


B8 


AD 


5 7 


3 A 


20 


D6 


8E 


AD 


8EC0- 


S3 


8A 18 


6 5 


FC 


8 5 


FC 


90 


8~EC8- 


02 


F.6 


FD 


A9 


AO 


ES 


EC 


55 


8ED0- 


8 A 


90 


E9 


FO 


E4 


60 


48 AO 


8ED8- 


00 


AD 


5 7 


8A 


91 


FC 


68 4C 


8EE0- 


E4 


8E 


91 


FC 


C8 


CC 


S3 


8 A 


8EE8- 


DO 


F8 


88 AD 


57 


8 A 


91 


FC 


8EF0- 


60 


20 


5 2 


8D 


AS 


22 


48 


20 


8EF8- 


A7 95 AO 


00 


Bl 


FC 


AA 


B8 


8F00- 


20 


53 


95 


91 


FC 


BA 


2C 


24 


8F0B- 


8F 


20 


53 


9 5 


C8 


C4 


21 


90 


8F10- 


EB 18 A5 21 


6 5 


FC 


85 FC 


8F18- 


90 


2 


E6 


FD 


18 


63 


69 


01 


8F20- 


C5 


23 


90 


D2 


60 


20 


D8 


8A 


8F28- 


20 


7E 


SB 


AS 


73 


85 


FA 


A5 


8F30- 


74 


3 5 


FB 


AD 


56 


8 A 


8D 


',E 


8F38- 


8A 


A9 


00 


3D 


4F 


8A 


8D 


50 


6F4 0- 


9 A 


8D 


51 


8A 


2 


B2 


8F 


2 


8F4 8- 


C6 


8D 


60 


20 


0'.' 


8B 


20 


88 


8F50- 


85 


AD 


56 


8 A 


8D 


4F 


8 A 


20 


8F58- 


C6 


8D 


AD 


5b 


8 A 


20 


21 


8D 


8F60- 


20 


A I! 


8D 


20 


Fl 


BE 


2 


9E 


8F68- 


BD 


60 


20 


18 


8B 


20 


88 


8D 


8F70- 


20 


Fl 


8E 


2 


C6 


3D 


AD 


4E 


8F78- 


8 A 


20 


07 


8D 


A9 





8D 


4F 


8F80- 


8 A 


20 


Afi 


85 


20 


9E 


8D 


20 


8F88- 


c« 


BD 


60 


2 


20 


8B 


20 


6 


8F90- 


8D 


38 


A9 


00 


B5 


71 


85 


71 


8F98- 


A9 


00 


B5 


72 85 


72 


20 


C8 


8FA0- 


8;: 


20 


7E 


BB 


60 


20 


42 


8B 


8FA8- 


BO 


04 


20 


D3 


8D 


6 


A2 


03 


8FB0- 


BD 


52 


-A 


ta 


CA 


10 


F9 


AD 


8FB8- 


56 


9 A 


8D 


4F 


8A 


20 


64 


90 


8FC0- 


A9 


00 


20 


07 


8D 


AD 


56 


8A 


8FC8- 


CD 


4E 


9 A 


08 


20 


6D 


8F 


28 


8FD0- 


DO 


EE 


AD 


56 


8A 


2 


21 


8D 


8FD8- 


A2 


00 


68 


9D 


52 


8A 


E8 


EO 


8FE0- 


04 


DO 


F7 


20 


D3 


8D 


A2 


FF 


8FE8- 


BD 


00 


2 


FO 


:f. 


es 


FB 


CA 


8FF0- 


BD 


00 


02 


85 


FA 


AO 


00 


Bl 


8FF8- 


FA 


s:-. 


5 6 


8A 


8A 


4 8 


A9 


00 


9000- 


20 


07 


8D 


20 


4E 


8F 


68 


AA 


9008- 


CA 


DO 


DD 


60 


20 


F4 


8A 


FO 


9010- 


52 


A9 


00 


20 


07 


8D 


20 


88 


9018- 


BD 


20 


C6 


8D 


AD 


56 


3A 


20 


9020- 


21 


8D 


20 


AB 


8D 


20 


52 


6D 


9028- 


20 


64 


9 


A5 


22 


3 5 


2 5 


AS 


9030- 


20 


8 5 


24 


20 


80 


90 


FO 


3 


9038- 


20 


AD 


90 


E6 


24 


38 


AS 


24 


9040- 


B5 


20 


C5 


21 


90 


ED 


1 8 


65 


9048- 


FC 


85 


FC 


90 




E6 


FD 


E6 


9050- 


/'. 


AS 


25 


C5 


23 


90 


58 


AD 


9058- 


56 


8A 


20 


21 


9D 


20 


9E 


8D 


9060- 


20 


FD 


9 


60 


A2 


FF 


AD 


1 P 


9068- 


8 A 


FO 


11 


20 


21 


8 5 


AS 


FB 


9070- 


V:. 


00 


02 


CA 


A5 


FA 


9D 


00 


9078- 


02 


CA 


DO 


EA 


9D 


00 


02 


60 


9080- 


A2 


00 


CA 


BD 


00 


02 


FO 


24 


9088- 


8 5 


FB CA 


BD 





02 


85 


FA 


9090- 


20 


B9 8D 


38 


A5 


24 


ED 


52 


9098- 


8 A 


90 


E7 


CD 


S3 


8A 


BO 


E2 



90A0- A5 25 CD 54 8A 90 DB CD 
90A8- 55 8A BO D6 60 A5 25 8D 
90B0- 55 8A 20 60 BD 18 A5 FA 
90B8- 65 71 85 FE A5 FB 65 72 
90C0- 8S FF 38 A5 24 ED 52 8A 
90C8- 18 65 FE 85 FE 90 02 E6 
90D0- FF AS 25 20 A7 95 38 A5 
90D8- 24 ES 20 8D 51 8A AO 00 
90E0- Bl FE AA AC 51 8A Bl FC 
90E8- AO 00 91 FE AC 51 8A B8 
90F0- 20 53 95 91 FC 8A 2C FC 
90F8- 90 20 53 95 60 AD 4F BA 
9100- 48 A9 00 8D 4F 8A 20 C6 
9108- 8D AD 56 8A 20 07 8D 68 
9110- 8D 4F 8A 20 C6 8D A9 00 
9118- 20 07 8D AD 56 8A 8D 4F 
9120- 8A 20 C6 8D 60 4C 99 El 
9128- A9 00 20 07 8D AD 01 BE 
9130- 20 E3 DF 85 85 84 86 20 
9138- FS E6 CA 8A 18 65 22 CS 
9140- 23 BO E2 8E 28 91 20 F5 
9148- E6 CA E4 21 BO D7 BE 29 
9150- 91 20 FS E6 8A 18 6D 29 
9158- 91 CD 29 91 90 C7 C5 21 
9160- FO 02 BO CI 8D 2A 91 20 
9168- F5 E6 8A FO B8 BE 2C 91 
9170- E8 8A 09 CO 8D 2D 91 20 
9178- B7 00 FO 09 20 BE DE 20 
9180- F8 E6 BE 2E 91 AD 28 91 
9188- AC 2C 91 88 18 6D 2E 91 
9190- BO 93 88 DO F7 65 22 CS 
9198- 23 BO 8A 90 ID CE 2B 91 
91A0- AD 2B 91 C9 00 DO 1A AD 
91A8- 2C 91 8D 2B 91 DO 12 AD 
91B0- 2B 91 EE 2B 91 CD 2C 91 
91B8- DO 07 A9 01 BD 2B 91 DO 
91C0- 00 AE 2F 91 20 15 92 2C 
91C8- 10 CO 2C 00 CO 10 FB A2 
91D0- AO 20 15 92 AD 00 CO 2C 
91D8- 10 CO C9 95 FO Dl C9 88 
91E0- FO BB 2C 58 8A 50 08 C9 
91E8- 8A FO C4 C9 8B FO AE C9 
91F0- 9B FO IE C9 8D FO OE C9 
91F8- CI 90 C6 CD 2D 91 BO CI 
9200- 29 OF 8D 2B 91 AC 2B 91 
9208- A9 00 20 F2 E2 20 27 EB 
9210- 60 AO 00 FO F3 AD 28 91 
9218- AC 2B 91 18 88 FO 05 6D 
9220- 2E 91 90 F8 20 B6 8A AC 
9228- 29 91 CC 2A 91 DO 08 8A 
9230- 2C 36 92 20 S3 95 60 20 
9238- 78 95 CB CC 2A 91 90 F7 
9240- 60 BA 2C 48 92 20 AF 93 
9248- 08 A2 04 20 8C 93 8D 42 
9250- 92 EE 42 92 20 45 94 28 
9258- EE 41 92 30 77 08 AD 56 



9260 — 


H A 


2 


2 j 


8 D 


90 


12 


2C 


94 


o ? en — 


q A 


7 fl 




q • 


z 


EE 


56 


a A 


?Z IV- 


9C 


c b 


7 n 

£ U 






4C 


82 


93 


9?7fl- 




BO 


fid 




5 6 


8A 10 


DD 




r - 


4 1 




XII 


en 


2C 


AF 


93 


QO _ 


J 


■ 7 

AZ 




7 n 


fl r 


93 


CD 


42 


9290- 


> ft 




64 


7 n 

Z V 


d S 


94 AD 56 




aft 


7 fl 


7 i 
t- - 


Bp 


q rt 
D u 


53 


2C 


9A 


92A0- 


94 


90 


A 8 


2 C 


60 


8D A5 


7 3 


92A8- 


8 "i 


FA 


A~ 


7 ^ 


B5 


FB 


20 


r A 


yz o\J~ 




u n 
S J 




7 
Z U 


9 R 
Z 3 


BF 


20 


b Q 


Q7HO _ 


•3D 








9 i- 

ZO- 


BC 


12 




92CC - 


EE 


3 b 




AJ 


D b 


8A 8D 




92C8- 


9? 


CD 


41 


9z 


FO 


ce 


90 






7 fl 




fl 7 


q 9 


C Fl 


41 


9? 


2 


92D8 — 


17 3 




1 Q 


D 




3F 


9S 


20 


92E0 — 


S 2 


9 3 


A C 


3C 


8 B 


2 


82 


9 3 


92E8 — 


4 C 


3 1 


9 B 


2 C 


8 2 


93 


4C 


34 


92F0 — 


B : 3 


2 


8 2 


9 S 


4 C 


3 7 


8B 


20 


q?pa — 
y*:r a — 


B / 


9 3 


A? 


2 A 


4 C 


12 


D4 


20 


9300 — 


8 2 


9 3 


A C 


3 F 


8 B 


20 


AF 


93 


9308 — 


A? 


2 


2 


8 C 


9 3 


CD 


42 


92 


9310 — 


9 C 


r- 3 


|~ 


5 6 


8A 


2 


21 


8D 


9318 — 


9 C 


C 5 


2 C 


A 5 


9 4 


2C 


9A 


94 


9320 — 


2 C 


6 8 


9 3 


DO 


!) A 


AD 


A 3 


92 


932 8 - 




E9 


3 


8 D 


4 3 


92 


BO 


C3 


9330 — 


CF. 


A 


9 ? 


2 




94 


20 


B9 


9338- 




2 C 


9 A 


9 4 


2 C 


C2 


94 


4C 


9340- 


8 2 




2 


Ac 


93 


A2 02 20 


Q ~K& ft — 

y 3h o 


o r 

ol» 


a -j 




d 9 
'( z 


q ? 


90 


A 8 


AD 


9350- 


56 


8 A 


2 


z 1 


8D 


90 


88 


20 


4^Sft- 




QjJ 


z u 


4 A 


Qd 


20 


68 


93 




HP 




z J 


TP 


q " 


4C 


92 


93 


9368- 


AG 


5 


^9 


-i 


H 
o n 


Dl 


FA DO 


Q 1 "1 A — 

y j ' u 


1 ft 




a q 


dP 




Fl 


FA C8 


9378- 


"i 8 


F9 


A E 


8 A 


] 6 


71 


FA DO 


9380- 


OC 


6 


2 


EC 


9F 


20 


EA A2 


9388- 


2 C 


51 


AB 


b C 


8 B 


5F 


AA A9 


i j ^ \j 


G 


a •> 


f r 


B 1 


R n 
c) ^ 


6D 


AA 8D 


9398- 


6 6 


AA 


S'J 


4 1 


9 2 


20 


EC 


9E 


93A0- 


A9 


40 


20 


D5 


A3 


20 


5] 


AB 


93A8- 


7 


FD 


94 


6C 


4C 


34 


8B 


2 


93B0- 


9 5 


AC 


? 


73 


DD 


20 


FD 


E5 


93B8- 


AA 


AC 


00 


Bl 


5F 


C9 


20 


DO 


9 3C0 — 


6 




t* L 




P f. 
r 


FO 


ES 


OA 




9 C 


G A 


o n 
JU 


C 1 z 


1 


DE 


Bl 


SE 


93D0 — 


C 9 


2 C 


FO 


o B 


9 


80 


99 


75 


93D8 — 






CA 


D 


Fl 


FC 


35 


C8 


93E0 — 


CA 


F 


31 


B 1 


5E 


C9 


44 


FO 


9 3E8 — 


6 


C 9 


5 3 


FO 


C E 


DC 


BD 


20 


93F0 — 


7 


9 A 


c 9 


3 


BO 


B6 


BD 


6 8 


93F8 — 


AA 


9 C 1 


E4 


2 


C 7 


94 


C9 


8 


9400- 


BC 


AA 


8D 


6A 


A A 


9C 


D8 


C8 


9408- 


CA 


FO 


Al 


b; 


bE 


E9 


30 


30 


9410- 


9B 


FO 


99 


60 


20 


B7 


00 


C9 


9418- 


2C 


DO 


2G 


20 


Bl 


CO 


20 


E7 



9420- 


8D 


8D 


4z 


92 


48 


20 


B7 


OC 


9428- 


C9 


2C 


DO 


9 


20 


Bl 


00 


20 


9430- 


E7 


8D 


8D 


4 2 


92 


68 


8D 


56 


9438- 


B A 


39 


60 


18 


A9 


01 


BD 


56 


9440- 


8 A 


8D 


42 


92 


60 


20 


FD 


9 4 


9448- 


EE 


A 3 


92 


DO 


03 


FE 


44 


9 2 


9450- 


2 


77 


94 


CE 


42 


92 


FC 


1 6 


9458- 


20 


9 A 


94 


38 


AD 


43 


92 


65 


9460- 


71 


8D 


4 3 


92 


AD 


44 


92 


65 


9468- 


72 


8D 


44 


92 


90 


F2 


60 


A 9 


9470- 


00 


8D 


4 3 


92 


8D 


44 


9 2 


AD 


9478- 


4 3 


9 2 


80 


BD 


35 


AD 


4 4 


92 


9480- 


8D 


BF 


B5 


A9 


00 


8D 


BF 


B5 


9488- 


8D 


CO 


35 


A 9 


OA 


8D 


BB 


35 


9490- 


2 


16 


95 


60 


A2 


3 


A 9 


04 


9498- 


DO 


4 


A 2 


04 


A9 


3 


BD 


BB 


94A0- 


35 


8F 


Cl 


B5 


A 9 


00 


BD 


C2 


94A8- 


35 


A 9 


52 


8D 


C3 


B5 


A 9 


8A 


94 30- 


8D 


C4 


B5 


A9 


02 


8 D 


BC 


B5 


94B8- 


20 


1 6 


9 5 


2G 


6 8 


BD 


20 


7 8 


94C0- 


8F. 


60 


Ab 


71 


DO 


02 


C6 


72 


94C8- 


C6 


7 1 


A9 


4 


DO 


2 


A 9 


3 


94D0- 


8D 


BB 


B5 


A ! i 


71 


8D 


C : 


35 


94D8- 


A 5 


7 2 


8D 


Z2 


B5 


2C 


5 2 


8D 


94E0- 


A5 


FC 


BD 


C3 


B5 


AS 


FD 


B D 


94E8- 


C4 


B5 


A 9 


C2 


S D 


BC 


B5 


2 C 


94F0- 


: 6 


95 


60 


AD 


41 


92 


8D 


C3 


94F8- 


Bb 


A 9 


04 DO 


02 


A9 


3 


4 8 


9500- 


20 


6F 


94 


6 8 


8D 


BB 


B5 


A9 


9508- 


01 


8D 


BC B5 


20 


16 


95 


AD 


9510- 


C3 


35 


9D 


41 


92 


60 


A2 


01 


9518- 


20 


Db 


03 


BO 


OD 


AD' 


BD 


B5 


9520- 


8D 


43 


92 AD 


3F 


B5 


8D 


44 


9528- 


0)2 


60 


AD 


C5 


3 5 


C 9 


5 


F C 


9530- 


1 9 


C9 


09 


DO 


OA 


C E 


dl 


vz 


9538- 


3 


03 


20 F3 


9 4 


A 9 


9 


4 8 


9540- 


2C 


P.O 


9E 20 


FA 


A 2 


6 8 


4C 


9548- 


D2 


A6 A9 00 


8D 


A 1 


92 


2 


9550- 


F3 


94 


60 


84 


1 F 


A 8 


AD 


58 


9558- 


B A 


29 


40 


FO 


9 


AD 


5 8 


B A 


9560- 


10 


G4 


6 8 


4C 


6 


CF 


A 4 


1 F 


9568- 


70 


06 


68 


31 


2 8 


A B 


50 


4 


9570- 


68 


48 


91 


28 


68 


A4 


IF 


6C 


9578- 


A 8 


38 


20 


53 


95 


2C 


5B 


8A 


9580- 


50 


5 


2C 


IE 


CO 


30 


: 6 


C 9 


9588- 


2C 


90 


10 


C9 


4 j 


90 


OE 


C9 


9590- 


AC 


90 


12 


C9 


CO 


90 


6 


C 9 


9598- 


EC 


BO 


OA 


49 


4 


4 9 


9 


2C 


95A0- 


A6 


95 


20 


53 


95 


68 


60 


20 


95A8- 


Cl 


FB 


A 5 


20 


s 


2C 


58 


BA 


95B0- 


10 


01 


4A 


28 


65 


2 8 


85 


28 


95B8- 


60 


A 9 


CO 


8D 


58 


8 A 


AD 


B3 


95C0- 


FB 


C9 


06 


DC 


15 


A9 


40 


BD 


95C8- 


5 8 


8A 


AD 


17 


CC 


30 


CB 


AD 


95D0- 


IF 


CO 


29 


80 


OD 


5B 


8A 


8D 


95D8- 


58 


8A 


60 













"el: 



Jacques Superaant 



Appte ][+. lit. lie 



Ce moniteur autorise un control? de l'executlon des routines 
en iangage machine. 



Un mode Trace et Pas a Pas tres dvolues et sdlectifs sont competes > 

par un acces direct aux registres du 6502 (ou 65C02). II est ainsi 
possible de les initialiser a son git ou 4 I'aide de la routine de hasard. / 



»W'"ll>'">W"fU>V. 



2 



La gestion des fendtres d'ecran simplifie le mode trace. 
Une routine pcrmet la recherche de suites d'octels. 



V Un 
/Un 



Un mini-assembleur tres souple fait partie de Max. 
Une ligne de commande pcut devenir une boucle avec I'ordre JUMP 



Les fichiers 
source sont sur 
la disquette 

Disquette et 
documentation : 
1 50,00 F TTC 
franco Bon de 
commande 
page 78. 



62 



PorrTs n° 19 



Disquette mixte Pascal/DOS 3.3 

Frangois Sermier 



Principe 

Les programmes presentes ici utili- 
sent les marries idees que pour la 
mixite ProDOS/DOS 3.3 (Pom's 18) 
mais sont destines a des utilisateurs 
de Pascal et du Basic sous DOS 3.3 
(exemple, la disquette d'accompa- 
gnemenl). Mais direz-vous. pourquoi 
pas les 3 systemes d' exploitation a la 
fois sur une meme disquette ? Helas, 
ce serait trop beau: Pascal et 
ProDOS utilisent le meme emplace- 
ment (bloc 2) comme cle du volume, 
et bien que les conceptions generates 
de ces blocs cles soient similaires, ils 
different sensiblement et sont done 
incompatibles... 

Rappel des principes precedem- 
ment exposes 

• Initialiser une disquette Pascal a 
l'aide du FORMATTER UCSD 

• Modifier le repertoire pour limiter 
le nombre de blocs Pascal 

• Creer une piste CATALOG et un 
VTOC en piste 17 pour gerer la 
partie DOS 3.3. 

Les deux dernieres etapes seront rea- 
lisees par un programme ProDOS, 
IN1TPAS3.3. On pourrait realiser la 
meme chose sous DOS 3.3, mais 
e'est un peu plus complique : RWTS 
accede au disque par secteur, et l'in- 
terface RWTS/Basic est nettement 
moins agreable que MLI. 

La structure d'un volume Pascal 
UCSD 

Premiere remarque : la sectorisation 
logique de la disquette Pascal est 
identique a la sectorisation ProDOS. 
Acces par blocs et meme entrelace- 
ment des blocs; ceci economise enor- 
mement de travail. Le volume Pascal 
debute de meme par les blocs 0-1 
contenant le chargeur de SYS- 
TEM.APPLE lors du boot. II continue 
par 4 blocs (2-5) du repertoire, mais, 
et e'est la que les choses serieuses 
commencent, il n'y a pas de Volume 
Bit Map, et done le bloc 6 est dispo- 
nible. ainsi que les suivants (jusqu'a 
279 inclus) pour les fichiers. 
Consequence: le systeme UCSD 
gere 1'espace disque de maniere 
beaucoup plus rudimentaire que 
ProDOS. Les fichiers doivent etre 
stockes sur des blocs contigus (neces- 
sity de CRUNCHer le volume de 
temps en temps pour regrouper les 
trous dans I'espace disque). Du 



coup, 1' extension de la zone Pascal 
au-dela de la piste 16 apporte certes 
des blocs supplementaires, mais que 
Ton ne pourra pas agreger au reste 
du volume Pascal : les blocs corres- 
pondent a la piste 17 (indispensables 
au DOS 3.3) seront marques defec- 
tueux pour les proteger d'un 
CRUNCH intempestif. 

Le repertoire est compose de 78 en- 
registrements de 26 octets decrivant 
les fichiers a l'exception du premier 
qui decrit le volume. Du fait du 




mode de gestion de I'espace disque, 
les fichiers figurent au repertoire dans 
l'ordre correspondant a leur empla- 
cement physique sur la disquette, 
sans trous correspondant a d'even- 
tuels fichiers supprimes. Des qu'un fi- 
chier est cree (respectivement sup- 
prime), l'enregistrement 
correspondant au repertoire est in- 
sere (respectivement detruit) et les 
enregistrements qui le suivent sont 
deplaces vers le bas (respectivement 
vers le haut) pour compacter le re- 
pertoire. Ceci entralne des remanie- 
ments permanents du repertoire, 
mais autorise une gestion simple des 
blocs occupes du volume par l'exa- 
men de tous les enregistrements 
actifs du repertoire. 

Le format des enregistrements 
au repertoire est le suivant : 

Pour un fichier : 
octet numero 

0- 1 numero du bloc de debut du fi- 
chier 



2-3 numero du premier bloc suivant 
la fin du fichier 
4-5 type du fichier 
6 longueur du nom du fichier 
7—21 nom du fichier 
22-23 nombre d'octets utilises dans 
le dernier bloc du fichier 
24-25 date de modification du fi- 
chier (format Pascal) 

Pour le premier enregistrement decri- 
vant le volume : 
octet numero 

0-1 numero du bloc debut du vo- 
lume (0 evidemment...) 
2-3 numero du bloc suivant le der- 
nier bloc du repertoire (normalement 
6) 

4-5 categorie du disque (toujours 0) 
6 longueur du nom du volume 
7-13 nom du volume 
14-15 nombre de blocs du volume 
16-17 nombre de fichiers du vo- 
lume (nombre d'enregistrements 
actifs au repertoire) 
18-19 inutilises (0) 
20-21 date du systeme 
22-25 inutilises. 

On verifie aisement que Ton peut re- 
constituer 1'occupation du volume en 
examinant les octets a 3 de tous 
les enregistrements du repertoire. Si 
vous initialisez vos disquettes en utili- 
sant l'option 'Duplicate Directory' de 
la commande ZERO du FILER 
UCSD, vous aurez un premier enre- 
gistrement decrivant le volume identi- 
que a celui decrit ci-dessus a l'excep- 
tion du champ 2-3 qui contiendra 
10. 



Les programmes presen- 
tes 

On ne s'etonnera guere de retrouver 
des points communs entre les pro- 
grammes proposes et INITPR03.3 
(Pom's 18). Meme organisation, 
meme appel a MLI. 

INITPAS3.3 

INITPAS3.3 est le frere jumeau 
dINITPR03.3. toutefois. on note 
quelques differences. 
Lignes 150-180 : si le nombre de fi- 
chiers Pascal depasse 18. le reper- 
toire est sur plusieurs blocs. Certaines 
des entrees sont a cheval entre les 
blocs, il est done plus commode 
d'avoir l integralite du repertoire utile 
en memoire. 



Pom's n° 19 



Lignes 310-430 : inspection du re- 
pertoire. Tous les fichiers se termi- 
nant apres le bloc 136 seront derruits 
et enleves du repertoire (ligne 350). 
S'il en existe, la liste en est affichee 
et vous avez la possibility d'abandon- 
ner. S'il existe une 2eme zone Pascal 
apres la piste 17 (FLAG=1), on cree, 
ligne 430, un fichier fictif CATA- 
LOG3.3 de type defectueux (Bad) 
pour eviter qu'il soit Crunche, ce qui 
deplairait fortement au DOS... 
II serait possible d'etre plus genereux 
pour les fichiers Pascal situes integra- 
lement dans la 2eme region Pascal, 
mais cela imposerait des manipula- 
tions desagreables pour supprimer les 
fichiers a cheval sur la piste 17 et in- 
surer un nouveau fichier CATA- 
LOGS. 3, le tout en preservant l'ordre 
et la continuity du repertoire. 
Lignes 440-490 . on reecrit le tout. 



DUMPDIRPAS 

Le programme DUMPDIRPAS vous 
montre comment on peut exploiter 
sous ProDOS le repertoire d'une dis- 
quette Pascal. II est suivi par un 
exemple d'execution que Ton pourra 
comparer a ce que foumit pour la 
meme disquette le FILER UCSD. 
L'option imprimante est prevue pour 
une imprimante permettant d'ecrire 
en mode ultracondense (17 caracte- 
res par pouce) pour caser un fichier 
par ligne. L'imprimante utilisee ici est 
une Image Writer, les codes de 
controle (ESC Q) sont situes ligne 
170. 

Le Dump hexa est realise en utilisant 
la routine moniteur PRBYTE 
($FDDA) appelee par une partie de 
langage machine implante en 800 
($320) par la ligne 3113-3114 (LDA 
#XX, JSR PRBYTE, JSR OUTSP, 
RTS), l'octet a sortir est POKe en 
801 avant l'appel. 



MAP 

Enfin. un utilitaire permettant d'exa- 
miner des disquettes quelconques. 
sauf CP/M, (non protegees). Un 
meme programme ProDOS identifie 
n'importe quelle disquette DOS. 
ProDOS ou Pascal. Si la disquette 
resulte d'une hybridation anterieure. 
cela vous est signale en vous deman- 
dant laquelle des moities vous desirez 
examiner; neanmoins si vous avez 
cree une disquette mixte 
ProDOS/DOS sur laquelle la partie 
ProDOS n'atteint pas la piste 17, 
vous ne pourrez pas en afficher le 
VTOC car il faudrait pour cela aller 
lire un bloc situe a la fin du volume 
(I/O ERROR). D'ailleurs, vous n'au- 
rez pas non plus le VBM ProDOS 
sauf si vous avez opportunement sa- 
crifie les lignes 3140-3150. 



Le programme vous demande dans 
quel lecteur est situee la disquette. 
Ne vous 6tonnez pas s'il vous pro- 
pose un numero de lecteur allant de 
0a3: 

• le numero 3 correspond au disque 
virtuel /RAM (si vous avez une 
carte 80 colonnes etendue) 

• le numero correspond a l'occu- 
pation de la memoire principale 
par le programme SYSTEM du 
moment, c'est-a-dire dans notre 
cas, evidemment BASIC. SYSTEM. 
La table des secteurs occupes est 
tenue par MLI en page globale en 
$BF58 - $BF6F. II me semble 
d'ailleurs qu'il y a un leger bug, 
car les pages memoires $BA a 
$BD sont marquees inutilisees 
alors qu'elles contiennent des don- 
nees de BI... Si bug il y a, on peut 
le corriger aisement en modifiant 
BASICSYSTEM : a l'adresse 
$2048 en remplacant LDA #$C3 
par LDA #$FF ou encore NOP 
NOP. puisqu'alors l'accumulateur 
contient deja $FF. 

Ayant choisi votre lecteur, le pro- 
gramme analyse alors l'etat d'occu- 
pation de l'objet etudie en affichant 
1' image du VTOC (ou VBM, ou re- 
pertoire ou Memory Bit Map suivant 
l'OS). 

L'utilite de MAP est double : 

• avant hybridation, pour determi- 
ner a partir de quelle piste on peut 
implanter la region DOS 3.3 

• apres. pour les inquiets, pour veri- 
fier que tout s'est bien passe. 

L' analyse du VTOC 3.3 prend quel- 
que temps : il faut analyser tous les 
bits de 70 octets, ce que le Basic ne 
fait pas tres aisement. Si I on s'impa- 
tiente, on peut remplacer tout le bloc 
800-950 par l'appel d une routine 
en langage machine (exemple. Disk 
Map de K.Prouty dans All About 
DOS). 

La discrimination des systemes d'ex- 
ploitation se fait a l'aide des octets 
2-3-4 du bloc 2 (c'est-a-dire 
piste secteur DOS : 0/B). On verifie 
en effet qu'ils contiennent dans les 
differents cas les valeurs suivantes 
(ou une valeur non nulle est notee 
X). 



Octet 


2 


3 


4 


DOS (Esclave) 











DOS (Maitre) 


X 


X 


X 


ProDOS 


X 





X 


Pascal 


X 









Le mot 2—3 contient le chaTnage du 
repertoire (ProDOS), des blocs occu- 
pes (Pascal). L'octet 4 contient la 
longueur du nom de volume 
(ProDOS), le type du disque Pascal 
(toujours 0). Les secteurs 0/A et 0/B 
contiennent le code permettant au 
DOS de se reloger (master) ou rien 
du tout (slave). 

En utilisant les fonctions logiques, on 
discrimine a l'aide de la fonction : 
(oct2 AND NOT oct3)*(oct4 + 1), 
ou NOT X=0 et NOT 0=1. Cette 
fonction vaut 1 pour ProDOS, 2 
pour Pascal et dans tous les autres 
cas. 

Par ailleurs. on regarde si le contenu 
du secteur $11/0 peut etre un VTOC 
en testant l'octet de version du 
DOS : s'il vaut 3. on considere que 
la piste $11 contient un catalogue 
DOS 3.3 normal (DOS=l). Ceci 
permet de reconnaitre les disquettes 
mixtes pour lesquelles TYPE est dif- 
ferent de alors qu'elles ont un re- 
pertoire 3.3 en piste $11. 



Booter ? 

Pourquoi pas ? Pour booter en Pas- 
cal, il suffit de transferer SYS- 
TEM. APPLE et SYSTEM. PASCAL 
sur notre disquette. On reduit ainsi, 
de plus de la moitie, la lere zone 
Pascal. 

Simuler un boot DOS est egalement 
realisable. En s'inspirant de la me- 
thode decrite pour un boot DOS 
sous ProDOS. il faut realiser une 
copie disque du DOS situe en me- 
moire et le transferer sur une dis- 
quette Pascal puis le charger en Pas- 
cal. Encore une vingtaine de blocs en 
plus sur le disque; au total il ne reste 
plus qu'une trentaine de blocs dispo- 
nibles dans la lere zone Pascal. 

Est-ce bien utile ? II me semble que 
l'interet du 'mixtage' reside surtout 
dans 1' utilisation de DATA DISKs 
compatibles entre plusieurs systemes 
d'exploitation. Cependant. il y a bien 
des gens - (Ron De Groat dans All 
About Pascal) pour realiser pire : 
faire coexister en memoire et intera- 
gir le syteme Pascal avec le systeme 
Basic + DOS ! 



Bibliographie 

Aux ouvrages deja cites dans l'article 
precedent, on ajoutera: 
All About Pascal (Call A.P.P.L.E. in 
Depth n[2) 

All About DOS (Call A.P.P.L.E. in 
Depth n[3) 

Le Systeme Pascal UCSD de Thierry 
Chamoret 



64 Pom's n° 19 



Programme MAP 



1 OO = 256:U - 0:F = 0:U$ - "*":F$ - "-":B$ - "X" 
20 DEF FN W(X) - PEEK (X) + OO * PEEK (X + 1 ) 
30 DIM T$(15),TY$(3),UN(3):TY$(0) - "DOS3.3":TY$(1) - 
TroDOS":TY$(2) -"Pascal":TY$(3) - "Memoire 
Vive":UN(1) - 96:UN(2) = 224:UN(3) - 176 
40 GOSUB 3000 

50 IF NOT DOS OR NOT TYPE THEN GOTO 90 
60 : PRINT : PRINT "Map de quelle partie 

(";TY$(0);--0r;TY$(TY);"-1) ?";:GET R$: PRINT R$ 
70 R = VAL (R$): IF NOT NOT R <> R THEN VTAB 

PEEK (37): GOTO 60 
80 TY-TY* R 

90 HOME : PRINT "Volume ";TY$(TY) ; " "; 

100 ON TYPE + 1 GOSUB 800,200,400,170 

110 PRINT : PRINT "-:disponible"; TAB( 15);" *:occupe" 

115IFTYPE = 3THENX-F:F-U:U = X 

120 PRINT F;" disponibles"; TAB( 13);U;" occupes" 

130 END 

150 X- PEEK (R) 
152 FORJ-0TO7 
154 :DC$(I,J + D) - F$ 
156 ::Y= INT(X/2) 

158 :: IF X - 2 * Y THEN OC$(l,J + D) - U$:U - U + 1 
160 ::X-Y 
162 NEXT 
164 RETURN 

170 PRINT : PRINT" ";: FOR I - TO 15: PRINT T$(l);: 

NEXT 
180 GOSUB 250 
190 RETURN 
200 NB- FNW(BU + 41) 

21 R - BU + 4: GOSUB 600:VOL$ - N$ + T: GOSUB 650 
240 POKE BLOC, PEEK (BU + 39): POKE BLOC + 1 

PEEK (BU + 40): CALL ML I 
245 PRINT 

250 FORB-OTONB/8-1 

255 ::IFTY-3ANDB-2* INT (B/2) THEN PRINT: 
PRINT "$";T$(B/ 2);"0:";260 ::X - PEEK (BU + B) 
270 ::FORI=1TO8 

280 :::: IF X > 127 THEN X - X - 128: PRINT F$;:F = F + 1 ■ 

GOTO 300 
290 :::: PRINT U$;:U-U + 1 
300 ::::X-X*2 
310 NEXT I.B: PRINT 
330 RETURN 

400 NB - FN W(BU + 14):NF - FN W(BU + 16):KEEP - 
41 R - BU + 6: GOSUB 600:VOL$ - N$ + ":": GOSUB 650 
420 B0-2 + INT(26'(NF+1)/512):IFB0-2THEN 

GOTO 470 
430 FORI-3TOB0 

440 :: POKE PA + 3, FN HI(BU) + 2 * (I - 2): POKE 

BLOC.I: CALLMLI 
450 NEXT 

460 POKE PA + 3, FN HI(BU) 
470 FOR I - TO NF 

480 ::R - BU + I ' 26:BB - FN W(R):BH - FN W(R + 2) 
490 ::BU$ - U$: IF FN W(R + 4) = 1 THEN BU$ = B$ 
500 :: IF BB - KEEP THEN GOTO 520 
51 :: FOR J - KEEP TO BB - 1 : PRINT F$;:F . F + 1 : 
NEXT 

520 :: FOR J - BB TO BH - 1 : PRINT BU$;:U . U + 1 : NEXT 



530 KEEP - BH 
540 NEXT 

550 IF BH < NB THEN FOR I - BH TO NB - 1 : PRINT F$;:F 

-F+1:NEXT 
560 RETURN 

600 L= PEEK(R):ST- INT(L/ 16):L = L - 16 * ST:N$ = "": 

IF ST -15 THEN N$-T 
61 FOR J - 1 TO L:N$ - N$ + CHR$ ( PEEK (R + J)): 

NEXT 
620 RETURN 

650 PRINT VOL$;"blocs:";NB: IF NB< > 280 THEN 

PRINT " non standard" 
660 PRINT : FOR I - TO 9: PRINT I; SPC( 7);: NEXT 
670 RETURN 

800 POKE BLOC,136: CALL MLI 

810 VOL - PEEK (BU + 6):NB - PEEK(BU + 52) 

820 PRINT "n*:";VOL;" pistes:";NB: IF NB < > 35 THEN 

PRINT "non standard" 
830 DIM OC$(NB- 1,15): GOSUB 940 
840 FOR I - TO NB - 1 
850 ::D - 8:R - BU + 56 + 4 * I: GOSUB 150 
860 ::D - 0:R - R + 1 : GOSUB 150 
870 NEXT 
880 FORJ-0TO15 
890 :: PRINT : PRINT T$(J); 
900 :: FOR I - TO NB - 1 : PRINT OC$(l,J);: NEXT 
910 :: PRINT T$(J); 
920 NEXT 
930 F-16*NB-U 

940 PRINT : PRINT " ";: FOR I - TO NB - 1 : PRINT T$(l - 

16* INT (1/16));: NEXT 
950 RETURN 

3000 REM Initialisation Appel MLI 

3040 MLI-768:BUFFER-8192:UNIT-224:REM Drive 

1 :96 — Drive 2:224 
3050 PA - 784:BLOC - PA + 4 
3060 CODE - MLI + 3tn" - 128.ECRIT - 129 
3070 FOR I - TO 21 : READ X: POKE MLI + l,X: NEXT 
3080 DATA 32,0,1 91 ,1 28,1 6,3, 1 44,6,32,1 39, 1 90 

,32,9,190,96,0,3,224,0,32,2,0 
3090 FOR I - TO 15: READ X$:T$(I) = X$: NEXT 
31 00 DATA 0,1 ,2,3,4,5,6,7,8,9,A,B,C,D,E,F 

3120 REM ----- Identification Disquette 

3130 HOME : PRINT "Drive (0-3)?";: GET R$: PRINT R$;" 

OK" 

31 32 R - VAL (R$): IFR<0ORR>3 THEN VTAB PEEK 
(37): GOTO 

3130 

31 33 IF R - THEN TYPE - 3:BU - 48984:NB = 1 92:U$ = 
"-":F$-"*": GOTO 3180 

3134 POKEPA+1,UN(R) 

3135 IFR-3THEN GOTO 3160 
3140 POKE BLOC, 136: CALL MLI 
3150 DOS - ( PEEK (BU + 3) - 3) 
3160 POKE BLOC.2: CALL MLI 

31 70 TYPE = ( PEEK (BU + 2) AND NOT PEEK (BU + 3)) • 

(NOT PEEK(BU + 4) + 1) 
3175 TYPE- TYPE *(R< >3) + (R-3) 
3180 RETURN 



Programme INITPAS3.3 

1 HOME :00 - 256:FF - OO - 1 

20 DEF FN HI(X) = INT (X / OO): DEF FN LO(X) - X - OO 



* INT(X/00) 
30 DEF FNW(X)- PEEK(X) + 00* PEEK(X+1) 
40 DEF FN PISTE(X) = BU + 56 + 4 * X 
50 DIM T$(7),TY$(2):TY$(0) = "DOS3.3":TY$(1 ) - 

"ProDOS":TY$(2) - "Pascal" 
60 GOSUB 3000: REM Initialisation 
70 IF TYPE < > 2 THEN PRINT : PRINT "Ce n'est pas une 

disquette Pascal": CALL BELL: GOSUB 3120: GOTO 

70 

1 00 REM Directory Pascal 

102 REM 

104 REM -Lecture 

110 POKE CODE.LIT: POKE BLOC.2: CALL MLI 
120 B1= FN W(BU + 2):NB - FN W(BU + 14):NF = FN 
W(BU+16) 

130B0-2+ INT(26*(NF+1)/512):PM = INT((NB-1)/ 
8) 

140 R - BU: GOSUB 900:VOL$ = N$ + ":" 
150 IF B0 -2 THEN GOTO 190 
160 FORI-3TOB0 

1 70 :: POKE PA + 3, FN HI(BU) + 2 * (I - 2): POKE BLOC.I: 

CALL MLI 
180 NEXT 

1 90 PRINT : PRINT "Vous allez transformer ";VOL$ 

200 PRINT" en mixte Pascal-DOS 3.3" 

210 PRINT : PRINT "1 ere piste DOS 3.3 en n": 17";: HTAB 

27: INPUT R$:P1 = VAL (R$): IF R$ - - THEN P1 = 

17 

220 VTAB PEEK (37): HTAB 28: PRINT P1 

230 IF P1 < OR P1 > 34 THEN CALL BELL: PRINT V 

piste hors limite I": GOTO 210 
240 P2 = 34: IF PM > P2 THEN P2 - PM 
250 NB-8*P1:IH = NF 
260 IFB1 < 6 THEN TR - 1 : GOTO 
280 

270 PRINT : PRINT Tronquer le Directory Pascal ?N";: 

HTAB 31 : GET R$: PRINT R$: IF R$ - "O" THEN TR = 

1: IF IH > 38 THEN IH-38 
280 PRINT : PRINT "Nbe Secteurs Directory DOS 3.3: 

15";: HTAB 32: INPUT R$:NSC = VAL (R$): IF R$ = "" 

THEN NSC -15 
290 VTAB PEEK (37): HTAB 33: PRINT NSC: PRINT 
300 IF NF - THEN GOTO 440 

309 REM 

310 REM Inspection 

320 BM - 136:ERR - 0:FLAG - 1 : IF NB < - BM THEN BM 
- NB:FLAG - 

330 FOR I - 1 TO NF 

340 ::R - BU + 26 * l:BH - FN W(R + 2) 

350 :: IF (BH < - BM) AND (I < - IH) THEN GOTO 390 

360 :: IF ERR THEN GOTO 380 

370 ::ERR - 1 :IH - I - 1 : PRINT : INVERSE : PRINT 
"ATTENTION";: NORMAL : CALL BELL: PRINT " 
Vous allez detruire les fichiers:": PRINT 

380 :: GOSUB 900: PRINT N$; SPC( 16 - L);T$ 

390 NEXT 

400 IF ERR THEN PRINT : PRINT "Voulez-vous continuer 
?N";: HTAB 24: GET R$: PRINT R$: IF R$ <> "O" 
THEN END 

410 IF NOT FLAG THEN GOTO 440 

420 IH - IH + 1 :R - BU + 26 * IH: POKE R.136: POKE R + 

3090 POKE MLI + 4, FN LO(PA): POKE MLI + 5, FN 
HI(PA) 

3100 POKE PA.3: POKE PA + 1 ,UNIT: POKE PA + 5,0 



31 1 POKE PA + 2, FN LO(BUFFER): POKE PA + 3, FN 
HI(BUFFER) 

3111 REM 

31 1 2 FOR I - TO 7: READ T$(l): NEXT :BAD$ - 
"CATALOG3.3" 

31 14 DATA ????,Bad ,Code,Text,lnfo,Data,Graf,Foto 

3120 REM Identification Disquette 

3130 PRINT "Disquette --> Drive 2. OK?";: GET R$: 

PRINT "OK" 
3140 POKE BLOC.136: CALL MLI 
3150 DOS - ( PEEK (BU + 3) - 3) 
3160 POKE BLOC.2: CALL MLI 

31 70 TYPE - ( PEEK (BU + 2) AND NOT PEEK (BU + 3)) ' 

(NOT PEEK(BU+4) + 1) 
3180 RETURN 

2,144: POKE R + 3,0: POKE R + 4,1 
430 POKE R + 6, LEN (BAD$): FOR J - 1 TO LEN (BAD$): 
POKE R + 6 + J, ASC ( MID$ (BAD$,J,1 )): NEXT 

439 REM 

440 REM MiseaJour 

450 POKE BU + 14, FN LO(NB): POKE BU + 15, FN 

HI(NB): POKE BU + 16.IH: IF TR THEN POKE BU + 
2,4 

460 POKE CODE.ECRIT 
470 FOR I = 2 TO B0 

480 :: POKE PA + 3, FN HI(BU) + 2 * (I - 2): POKE BLOC.I: 

CALL MLI 
490 NEXT 

500 REM Directory DOS 3.3 - 

502 REM 

504 REM Ecriture secteurs Directory 

51 FOR I = TO 51 1 : POKE BU + 1,0: NEXT 
520 POKE CODE.ECRIT 

530 POKE BU + 257,17: POKE BU + 258,14: POKE 

BLOC,143:CALL MLI 
540 IMIN-1:OC-0:F = 

550 IF NS < 15 THEN IMIN = 7 - INT ((NS - 1) / 2)OC = 

16382.F- 12288 
560 FOR I = 6 TO IMIN STEP - 1 
570 ::OC-OC-F:F = F/4 
580 :::FIN - (I < = IMIN) AND (NSC < 15) 
590 :: POKE BU +1,17: POKE BU + 257,17 * NOT FIN 
600 :: POKE BU + 2,2 * I: POKE BU + 258,(2 * I - 1 ) * NOT 

FIN 

61 :: POKE BLOC,1 43 - 1: CALL MLI 
620 NEXT 

630 REM Creation VTOC 

640 POKE BU + 2,15: POKE BU + 257,17: POKE BU + 
258,13 

650 POKE BU + 3,3: POKE BU + 6.FF - 1 
660 POKE BU + 39,122: POKE BU + 48,16: POKE BU + 
49,1 . 

670 POKE BU + 52.P2 + 1 : POKE BU + 53,1 6: POKE BU + 
55,1 

680 FOR I - P1 TO P2 

690 :: POKE FN PISTE(I),FF: POKE FN PISTE(I) + 1.FF 
700 NEXT 

710 POKE FNPISTE(17), FN HI(OC): POKE FN 

PISTE(17)+1,FN LO(OC) 
720 POKE BLOC136: CALL MLI 
890 END 

899 REM — champ Nom 

900 T$ - T$( FN W(R + 4)):L « PEEK (R + 6):N$ = " 

I 910 FORJ-1 TOL:N$-N$+ CHR$ ( PEEK (R + 6 + J)): 



66 



I 

Pom's n° 19 



NEXT 
930 RETURN 

3000 REM Bip-Bip ProDOS ! 

3010 BELL - 81 6: FOR I - TO 21 : READ X: POKE BELL 

+ I.X: NEXT 
3020 DATA 

1 62,32,1 69,2,32, 1 68,252, 1 41 ,48, 1 92, 1 69,36,32,1 

68,252, 1 41 ,48, 1 92,202,208,237,96 

3030 REM Initialisation Appel MLI 

3040 MLI - 768:BUFFER - 8192:UNIT- 224: REM Drive 

1 :96 — Drive 2:224 
3050 PA - 784:BLOC = PA + 4 
3060 CODE = MLI + 31IT - 128:ECRIT = 129 
3070 FOR I - TO 21 : READ X: POKE MLI + l,X: NEXT 
3080 DATA 

32,0, 1 91 , 1 28, 1 6,3, 1 44,6,32, 1 39, 1 90,32,9, 1 90,96, 
0,3,224,0,32,2,0 



Programme DUMPDIRPAS 

10 HOME :00 - 256:FF - OO - 1 :D$- CHR$ (4):ESC$ = 
CHR$ (27) 

20 DEF FNHI(X) = INT(X/00): DEF FNLO(XUX-00 

* INT(X/00) 
30 DEF FNW(X)- PEEK(X) + 00* PEEK(X+1) 
40 DIM T$(7),TY$(2):TY$(0) = "DOS3.3":TY$(1) = 

"ProDOS":TY$(2) = "Pascal" 
50 GOSUB 3000: REM Initialisation 
60 IF TYPE <> 2 THEN PRINT : PRINT "Ce n'est pas une 

disquette Pascal": CALL BELL: GOSUB 3120: GOTO 

60 

70 PRINT "Sortie: Ecran (0) / Imprimante (1) ?0";: HTAB 
37: GET R$:OUT = VAL (R$): PRINT OUT: IF OUT < > 
NOT NOT OUT THEN CALL BELL: GOTO 70 

100 REM Directory Pascal 

110 POKE CODE.LIT 

120 FORB-2TO5 

130 :: POKE PA + 3, FN HI(BU) + 2 * (B - 2): POKE 

BLOC.B: CALL MLI 
140 NEXT 

150 IF NOT OUT THEN GOTO 180 

160 PRINT D$;"PR#1" 

170 PRINT ESC$ + "Q" 

180 NF- FNW(BU + 16) 

1 90 R - BU: GOSUB 900:VOL$ = N$ + ":" 

200 HOME : PRINT TAB( 9);"Dumpdu repertoire de 

";VOL$: PRINT 
210 PRINT "debut/ fin /type /"; TAB( 1 8);"nom"; TAB( 

28);7 EOF /date :": PRINT 
220 FOR I - TO NF 
230 ::R - BU + 26 * I 

240 :: FOR J - TO 25: POKE 801 , PEEK (R + J): CALL 

PRBYTE: NEXT 
250 :: PRINT":"; 
260 ::J - 0: GOSUB 700 
270 ::J - 2: GOSUB 700 
280 ::PRINTT$(FNW(R + 4));""; 
290 :: GOSUB 900: PRINT L; SPC( 3 - LEN ( STR$ 

(L)));N$; 



300 :: IF I < > THEN GOTO 330 

310 :: PRINT SPC( 8 - L); FN W(R + 14);" "; FN W(R + 16);" 

"; FNW(R+18);""; 
320 ::D- FN W(R + 20): GOSUB 800: PRINT J$;" "; FN 

W(R + 22);" "; FN W(R + 24);: GOTO 350 
330 :: PRINT SPC( 16 - L);:J = 22: GOSUB 700 
340 ::D- FN W(R + 24): GOSUB 800: PRINT J$; 
350 :: PRINT 
360 NEXT I 

370 IF OUT THEN PRINT ESC$ + "E": PRINT D$;"PR#3" 
400 END 

699 REM -— affichage tabule 

700 X - FN W(R + J): PRINT X; SPC( 4 - LEN ( STR$ 
(X))); 

710 RETURN 

799 REM —champ Date 

800 A - INT (D / 51 2):D - D - 51 2 * A:A$ - RIGHT$ ("0" + 
STR$ (A),2) 

810 J - INT(D/16):J$ = RIGHT$r0"+ STR$ (J),2) 
820 M = D-16*J:M$ = RIGHTS ("0"+ STR$ (M),2) 
830 J$-J$ + "-" + M$ + "-" + A$ 
840 RETURN 

899 REM— champ Nom 

900 N$«"":L- PEEK(R + 6) 

91 FOR J = 1 TO L:N$ = N$ + CHR$ ( PEEK (R + 6 + J)): 

NEXT 
920 RETURN 

3000 REM Bip-Bip ProDOS ! 

301 BELL - 81 6: FOR I - TO 21 : READ X: POKE BELL 
+ l,X: NEXT 

3020 DATA 162,32,169,2,32,168,252,141,48,192, 

1 69,36,32, 1 68,252, 141 ,48, 1 92,202,208,237,96 

3030 REM Initialisation Appel MLI 

3040 MLI = 768:BUFFER - 81 92:UN[T = 224: REM Drive 

1 :96 — Drive 2:224 
3050 PA-784:BLOC-PA + 4 
3060 CODE « MLI + 3:LfT ■ 1 28:ECRIT = 1 29 
3070 FOR I - TO 21 : READ X: POKE MLI + l,X: NEXT 
3080 DATA 32,0, 191 ,1 28,1 6,3, 1 44,6,32, 1 39, 1 90,32, 

9,190, 96,0,3,224,0,32,2,0 
3090 POKE MLI + 4, FN LO(PA): POKE MLI + 5, FN 

HI(PA) 

3100 POKE PA.3: POKE PA+ 1.UNIT: POKE PA + 5.0 

31 1 POKE PA + 2, FN LO(BUFFER): POKE PA + 3, FN 
HI(BUFFER) 

3111 REM 

3112 PRBYTE -800 

3113 FOR I - TO 8: READ X: POKE PRBYTE + l,X: 
NEXT 

3114 DATA 169,0,32,218,253,32,87,219,96 

3115 FOR I - TO 7: READ T$(l): NEXT 

3116 DATA ????,Bad ,Code,Text,lnfo,Data,Graf,Foto 

3120 REM Identification Disquette 

3130 PRINT "Disquette -> Drive 2. OK?";: GET R$: 

PRINT "OK" 
3140 POKE BLOC, 136: CALL MLI 
31 50 DOS - ( PEEK (BU + 3) - 3) 
3160 POKE BLOC.2: CALL MLI 

31 70 TYPE - ( PEEK (BU + 2) AND NOT PEEK (BU + 3)) * 

(NOT PEEK(BU + 4) + 1) 
3180 RETURN 



MOUSECAT 

Patrice Neveu 



Souriez done ! 

Je veux dire par la : servez-vous de 
la souris de votre bel Apple lie ou de 
celle que vous pourrez, comme je l'ai 
fait, installer dans le slot 4 de votre 
Apple He ou II +. 

C'est le but du programme MOUSE- 
CAT OBJ que l'on lance par MOU- 
SECAT START. II remplit le role de 
tout bon programme de 'boot', a sa- 
voir un catalogue et le lancement 
aise du programme desire. 



Utilisation 

Lancer MOUSECAT START. Des 
lors, l'utilisateur a le choix entre : 

CATALOG : qui permet ensuite de 
choisir le catalogue des fichiers AP- 
PLESOFT, INTEGER, LANGAGE 
MACHINE, et enfin un CATALOG 
normal avec tous les fichiers que Ton 
aurait habituellement. 
A ce stade, une nouvelle feuille ap- 
parait et permet de passer aux deux 
prochains secteurs du catalogue en 
cliquant '>>'. Chaque feuille de ca- 
talogue donne au maximum 14 fi- 
chiers, sachant qu'il y a 7 fichiers par 
secteur de catalogue. II est ensuite 
possible de cliquer '«' afin de re- 
venir sur les fichiers precedents. 

Pour lancer un programme, allez 
simplement le cliquer sur le catalo- 
gue. Vous pouvez bien sur quitter ce 




catalogue pour revenir au menu du 
debut afin, par exemple, de changer 
de lecteur de disquettes. Pour cela, 
cliquez QUIT en bas de la page puis, 
revenu(e) au menu, cliquez DRIVE 
1/2. 

Enfin, pour sortir definitivement de 
\T, appuyer sur l'option 
/ BOOTER. Vous pourrez 
alors aller vers le Basic, booter un 
disk, ou revenir sur votre decision et 
done au menu principal. 



Au niveau assembleur 

Le programme MOUSECAT a ete 
ecrit avec le LISA 2.5 tandis que 
MOUSCAT START l'a ete avec BIG 
MAC. 



Explications sur la 
presentation 

Imitation des logiciels du 
Macintosh 

Le programme utilise les interrup- 
tions que la carte de la souris envoie 
au 6502 (lignes 68 a 123 et 480 a 
550). 

Cette technique a ete expliquee dans 
le manuel vendu avec la carte (je 
crois, toutefois, que dans celui de la 
souris pour 1' Apple lie, les explica- 



MOUSECAT 




(C) Patrice Neveu 



MENU : 


CRTRLOG : 






CRTRLOG 


NORMRL 

FICHIERS 

FICHIERS 






DR I YE 1 
SORT I R/ 


RPPLESOFT 
INTEGER 


(R) 
( I ) 




FICHIERS 
QUITTER 


L.MRCHINE 


(B) 



tions ne portent que sur MOUSE- 
PAINT) et bien sur plus recemment 
dans le Pom's 15. 

Depuis la ligne 125 a 246, le pro- 
gramme analyse ce qu'on lui de- 
mande d'executer. Puis, apres avoir 
affiche un nouveau menu, il saute 
aux lignes 612 - 663 puis en 869 — 
1023. 

Les lignes 254 a 479 et 664 a 819 
sont reservees aux differents sous- 
programmes necessaires au bon de- 
roulement du programme. C'est la 
que se situe, entre autres, CHROUT 
qui realise la sortie HR des caracteres 
ASCII dont la table est a partir de 
1060. Ceux-ci sont definis ainsi : 

Par exemple, pour un C : 



8 4 


2 


1 


8 


4 


2 


/ 




1 1 














1 


1 


=$C3 


1 


1 


1 




1 





1 


-$BD 


1 1 


1 


1 




1 





1 


=$FD 


1 1 


1 


1 




1 





1 


=$FD 


1 1 


1 


1 




1 





1 


=$FD 


1 


1 


1 




1 





1 


-$BD 


1 1 














1 


1 


-$C3 



C'est ici aussi qu'est la routine qui 
decortique le catalogue lu par 
RWTS. Les explications precises peu- 
vent etre trouvees dans le manuel du 
DOS, vendu avec l'Apple (pages 89 
a 93 et pages 122 a 124). 

D'autre part, on peut signaler que si 
MOUSECAT ne fonctionne pas en 
ProDOS, il fonctionne parfaitement 
bien en DOS 3.3, ZDOS et D-DOS. 
Voila, j'espere que ceci vous seduira 
et permettra aux lecteurs de Pom's 
de mieux comprendre la structure du 
catalogue qu'ils sollicitent tous les 
jours mais qui reste souvent myste- 
rieux, et qu'il permettra une certaine 
demythification de la beaute des pro- 
grammes de Lisa, Macintosh, et plus 
recemment, de MOUSEPAINT, 
JANE et autres. 

N.D.L.R : l'importance des fichiers 
sources et objets ne nous permet 
malheureusement pas de les publier. 
lis figurent bien entendu sur la dis- 
quette d'accompagnement. 



68 



Porns n° 19 



Bibliographie 

Alexandre Duback 



Destination Aventure Apple lie, 
//plus, et He de Delton Horn, Edi- 
tions du PSI - 240 pages - 140 FF. 
Encore une traduction... 

La facon dont on programme un jeu 
d'aventure est expliquee en detail 
autour d'un premier jeu. C'est clair 
et detaille. mais pas forcement per- 
formant au niveau de la programma- 
tion. Ainsi, a un endroit, on teste la 
meme chaine sur une cinquantaine 
de valeurs possibles, au lieu d'effec- 
tuer une recherche dichotomique 
dans une table alpha; cela fait en 
moyenne 25 comparaisons au lieu 
de 5 ! Trois autres jeux sont listes en 
fin d'ouvrage, accompagnes d'expli- 
cations et d'organigrammes. 

Basic Applesoft Lexicum, Ma- 
nuel de reference alphabetique 
Basic / Dos 3.3 / ProDOS de Paul 
Merry, Mnemodyne (26 rue Lamar- 
tine, 75009 Paris) - pave - 168 FF. 

Cet ouvrage date d'un an, mais nous 
n'avions pas encore eu 1' occasion de 
le voir. II ajoute a l'ancien manuel de 
reference, deja couvert dans Pom's. 
62 pages sur le ProDOS, bien utiles 
dans la mesure ou la litterature rela- 
tive au ProDos est encore pauvre. 
Enfin, maintenant. la reliure est un 
peu plus solide... 

Les materiels 

Apple lie, guide de 1'utilisateur 

de Thomas Blackadar, Sybex - 147 
pages - 98 FF. Traduction. 

Cet ouvrage est tres general et ap- 
porte un debut d' initiation au Basic, 
donnant a la fin un guide de refe- 
rence du Basic limite aux seuls mots 
reserves introduits dans le livre (?). A 
consulter pour voir si on ne prefere 
pas lire la doc Apple et faire des eco- 
nomies. 

Les ressources de 1'Apple //c de 

Nicole Breaud-Pouliquen. Editions 
du PSI - 106 pages - 85 FF. 

Le premier ouvrage en fran^ais ou 
Ton trouve un certains nombre de 
renseignements pour la programma- 
tion du //c, avec en particulier la liste 
des instructions du 65C02. A conseil- 
ler a tous ceux qui programment en 
assembleur sur le //c et. a present, a 
ceux qui auront mis le chip du //c sur 
leur Apple II. 

Macintosh : outils, progiciels, 
application de Xavier Gaucherand. 



Edimicro - 237 pages - 148 FF. 

Un des rares ouvrages generaux sur 
le Macintosh qui ne se contente pas 
de refaire le mode d'emploi de base 
du Mac avec ses logiciels "residents" 
et Multiplan. Cinq parties : presenta- 
tion du materiel, systemes et langa- 
ges, logiciels d'application, domaines 
d' utilisation et choix d'une configura- 
tion. Les analyses de points forts et 
faibles des logiciels sont assez bien 
vues. Un livre interessant. 

Logiciels et langages 

dBase II - Applications de Chris- 
tophe Stehly, Sybex - 268 pages - 
148 FF. 

Le livre a ete realise en utilisant la 
version 2.4 francisee de dBase II. 
Une premiere partie illustre les possi- 
bility du programme en gestion de 
fichiers; la programmation de dBase 
II etant couverte dans une seconde 
partie, a l'aide d'exemples de gestion 
varies. Un dernier chapitre bien inte- 
ressant explique comment il faut s'y 
prendre pour bien constituer ses fi- 
chiers. Ouvrage clair et bien pre- 
sente. 

Le secretariat par traitement de 
texte de Ilya Virgatchik. Marabout - 
287 pages - 160 FF. 

Nous sommes toujours dans les pro- 
duits sous CP/M; bien que cela ne 
soit pas apparent dans le titre. II 
s'agit d'un manuel pratique et 
complet de Wordstar. 

Macintosh Microsoft Basic de 

Rick Dayton, Prentice Hall Internatio- 
nal - 276 pages grand format, en an- 
glais - $ 23.35. 

Apres une description sans grand in- 
teret du Macintosh, on trouve dans 
cet ouvrage... la documentation du 
Basic Microsoft 1.0! J'exagere un 
peu car la documentation fournie 
avec l'interpreteur est plus complete. 
Done, si vous avez obtenu votre 
Basic par la voie normale, abstenez- 
vous d'acheter cet ouvrage qui, par 
contre. pourra rendre service aux pi- 
rates. 

Programmez votre Macintosh de 

Alain Andrieux et Christophe Drou- 
lers. McGraw-Hill - 250 pages - 120 

Peut etre le seul ouvrage indispensa- 
ble aux utilisateurs du Mac. du moins 
a ceux qui programment ou comp- 



tent programmer leur machine. II ne 
s'agit pas d'un manuel de reference 
du programmeur, loin de la, mais la 
lecture de cet ouvrage permet d'ac- 
querir une vue d'ensemble du "sys- 
teme Mac", a savoir : la gestion de la 
memoire, l'interface utilisateur, etc... 
et surtout la fabuleuse ROM de 
64Ko. Passionnant. 

Macintosh, quels logiciels ? de 

Pierre Courbier, ETSF - 143 pages 

Demonstration, de rapide a tres sche- 
matique. d un certain nombre de lo- 
giciels pour Macintosh. Un fourre- 
tout bien redige, mais dont l'utilite ne 
nous semble pas evidente. Realise en 
ImageWriter, mais en qualite cour- 
rier... 

Multiplan et Chart sur Macin- 
tosh de Xavier Bouilloux, Edimicro - 
235 pages - 159 FF 

Cela m'enerve toujours de voir un 
livre sorti sur ImageWriter sans 
meme utiliser la qualite courrier. 
Certes, cela gagne du temps, mais 
quand meme... La premiere partie, 
guide de 1'utilisateur pour le livre, 
Macintosh, Multiplan et Chart, est 
tres succinte; a peine 30 pages pour 
l'ensemble des deux logiciels. Ce 
n'est pas comme cela qu'on appren- 
dra a les utiliser. La seconde partie 
comporte 10 exemples, dont 5 avec 
passages au graphique. L'interet 
principal de l'ouvrage tient a l'illustra- 
tion de 1' utilisation de Chart, sur le- 
quel il existe moins d' ouvrages. Nous 
aurions prefere voir un livre unique- 
ment sur Chart, avec un chapitre sur 
la communication avec Multiplan. 

Multiplan sur Macintosh de Goul- 
ven Habasque. Sybex - 233 pages - 
148 FF. 

La premiere partie concerne 1' initia- 
tion a Multiplan sur Macintosh, avec 
seulement 53 pages tres aerees; ce 
n est done pas pour vous initier a 
Multiplan que nous vous conseillons 
cet ouvrage; l'initiation n'est pas 
assez approfondie a notre avis. Ce 
qui est interessant, c'est la suite; 27 
petits tableaux: d'analyse numerique 
(6), de geometrie (6), de statistiques 
(6), d'economie (5), et de gestion 
(4). Nous vous conseillons de consul- 
ter ce livre avant de l'acheter, pour 
voir si les exemples vous interessent. 



Pom's n° 19 



69 



Micro-informations 

Jean-Michel Gourevitch 



Le mois passe, a Cupertino, on ne 
parlait plus que licenciements (1500 
sont prevus) et baisse de la progres- 
sion des ventes. Face au marasme 
du marche de la micro-informalique, 
Apple a done du termer trois de ses 
six usines, et mertre a pied un cin- 
quieme de ses effectifs. 

Ces mesures drastiques ont ete ac- 
compagnees d'une reorganisation in- 
terne spectaculaire. Point principal : 
Steve Jobs, le fondateur, a ete 
contraint de "prendre du champ". 
Jean Louis Gassee, le PDG d' Apple 
France, s'est installe a Cupertino 
pour s'occuper du marketing. Del 
Yocam, qui couvrait la division Apple 
//, est devenu directeur de tous les 
produits. Apres Steve Wozniak, qui 
avait quitte Apple en fevrier, voici 
done Steve Jobs sur la touche. 

Ces mesures pourraient bien debou- 
cher sur un sursaut de vitalite, et se 
traduire par des ameliorations du 
Macintosh, ainsi qu'une nouvelle ver- 
sion de I' Apple //. 

Cest tout au moins ('analyse expri- 
mee dans un article partculierement 
documente du tres serieux Wall 
Street Journal, paru a la fin du mois 
de juin. 

Dans cet article, on apprend notam- 
ment qu'Apple a decide de jouer la 
parte en collaborant avec les fabri- 
cants d'accessoires. Apple a informe 
les fabricants de sa decision de modi- 
fier le systeme d' exploitation du Ma- 
cintosh, afin de faciliter la gestion 
d un disque dur. Jusqu'alors, ['utilisa- 
tion des disques durs avec le Mac 
posait un certain nombre de proble- 
mes tenant d'une part a 1' incapacity 
du Finder a gerer plus de 134 
icones. et d'autre part a la connec- 
tion obligatoire par une des entrees 
series. Le seul disque dur qui parve- 
nait a surmonter ces handicaps etait 
l'Hyperdrive de General Computer, 
installe a l'interieur meme du Macin- 
tosh Le montage de l'Hyperdrive 
avait un inconvenient majeur : il fal- 
lait ouvrir le Mac, et cela annulait la 
garantie. Dorenavant. ce ne sera plus 
vrai : Apple a modifie ses conditions 
de garantie pour permettre ('installa- 
tion d un HyperDrive. Le Wall Street 
Journal pense meme qu'Apple pour- 
rait decider de vendre directement 
1'HyperDrive. On pensait qu'Apple 
allait introduire a l'automne un "Big 



Mac" dote d'un nouveau systeme 
d' exploitation, et nanti d'une me- 
moire vive d'un mega-octet et d'un 
disque dur externe de 20 a 40 Mega- 
octets. Peut etre sera-ce finalement 
un Mac "gonfle" et equipe d'un Hy- 
perDrive. Un systeme d'exploitation 
plus rapide, davantage de memoire 
et un disque dur, voici de quoi chan- 
ger la vie de tous les utilisateurs du 
Macintosh. A quel prix ? La dessus, 
e'est encore le mystere. 

Un Apple // plus puissant 

Dans le meme article, il est fait etat 
d'une nouvelle version de 1' Apple //, 
qui sortrait dans les douze prochains 
mois, et serait dote d un micropro- 
cesseur plus rapide ainsi que de dis- 
quettes d'une capacite plus impor- 
tante. Ce portrait ressemble 
enormement a 1' Apple // equipe d un 
microprocesseur 16 bits dont les lec- 
teurs de ces Micro-informations ont 
deja pu lire la description. Quant au 
lecteur de disquettes miracle, il s'agit 
d'un modele fabrique par Sony sous 
le nom "Liron". qui utilise les memes 
disquettes de trois pouces et demi 
deja employees sur le Macintosh. 
Seule difference : ce lecteur est dou- 
ble face. Sa capacite : 400K par face, 
soit 800K au total. Pas mal non. 
compare aux 143K actuels des lec- 
teurs de 1' Apple // ? Ce lecteur mira- 
cle conferera meme au / une capa- 
cite de stockage plus importante que 
celle du Macintosh. II ne serait. dans 
ces conditions, pas impossible que 
I' Apple // devienne un jour un 
concurrent serieux du Mac. Ce que 
Steve Jobs voulait. dit-on. eviter a 
tout prix. 

Baisses de prix ? 

Aux Etats Unis. on commence a 
trouver 1' Apple c pour environ 600 
dollars. En France. Apple a 
commence a vendre une promotion 
composee d un Apple 'c. d" Apple- 
Works, et d un sac de transport pour 
9990F. Officiellement. cette "affaire" 
est reservee aux etudiants Mais qui 
ne connait pas un etudiant ? 

Des fenetres pour le // 

Les programmeurs se sont en tous 
cas remis a travailler sur ce vieil 



Apple //, en exploitant toutes les res- 
sources de la souris, des fenetres et 
des menus deroulants. Certains pro- 
grammes entrevus ressemblent done, 
d'ores et deja, furieusement a ceux 
du Macintosh. On peut en attendre 
toute une vague pour le Sicob. ou 
pour Noel. Line nouvelle version 
d'Appleworks avec souris et menus 
deroulants serait ainsi sur le metier. 
En France, Version Soft preparerait 
un traitement de texte graphique tres 
semblable a MacWrite. Chez d'autres 
concepteurs de logiciels. on pense ta- 
bleurs, ou realisation de graphiques. 



Un super tableur 

En attendant, le programme vedette 
de l'ete pour l'Apple ." n'utilise ni 
souris, ni graphiques, ni menus de- 
roulants. Pire ! ce n'est ni un integre. 
ni un programme revolutionnaire 
facpn "Think Tank". II s'agit d'un 
banal tableur. Un tableur ? Quelle 
idee, direz-vous. apres Visicalc qui fit 
la fortune d'Apple. et Multiplan qui 
fit celle de Microsoft. Eh bien, Su- 
percalc3a de Sorcim semble ac- 
tuellement tout simplement le plus 
puissant des tableurs pour le //. Jugez 
plutot: 254 lignes, 63 colonnes et 
15000 cases disponibles. Une gestion 
tres fine de la memoire n'utilisant 
cette denree precieuse que pour les 
cases contenant des donnees. une Vi- 
tesse de traitement quatre fois supe- 
rieure a celle du tableur d'Apple- 
works (sur un // equipe d'une carte 
accelerateur. Supercalc tournerait 
deux fois plus vite que sur un IBM 
PC). 50 fonctions integrees, aussi 
bien trigonometriques que financie- 
res. Et la possibility, en prime, de tra- 
duire les donnees en graphiques et 
en couleurs. ou de les recevoir ou les 
envoyer par modem. Voici un pro- 
gramme (dans 1' esprit de Lotus 1-2- 
3. bien que ce ne soit pas un integre) 
qui transforme un tranquille Apple // 
en super IBM. pour 195 dollars. 



Retombees d'Apple Expo 

A la mi-juin, les visiteurs d'Apple 
Expo ont pu admirer (outre Super- 



70 Pom's n° 19 



Calc) une fournee de logiciels nou- 
veaux. Parmi eux : ClickWorks de 
Contrdle X, un gestionnaire de fi- 
chiers graphiques souris avec tableur 
integre (2350 F), Version Com. de 
Version Soft, un programme de 
communications avec souris et 
menus deroulants, Varicalc de Del- 
taSoft cree par un pilote de ligne 
pour realiser ses plans de vols, c'est 
devenu un tableur multi-entrees affi- 
chant sous forme de courbes l'inte- 
raction de plusieurs parametres. 
Les possesseurs de lie peuvent, eux, 
disposer d'une nouvelle carte d'ex- 
tension couleur avec 64K supple- 
mentaire : c'est la Feline, qui rem- 
place l'ancienne carte EVE, et offre 
des capacites graphiques tres eten- 
dues. Les graphiques de Version 
Calc en double haute resolution gra- 
phique prennent ainsi. en couleurs, 
une allure etonnante. 2520F. 

Pendant ce temps, aux Etats Unis, 
un programme utilitaire connu de 
tous les utilisateurs d' Apple n'en finit 
pas de progresser : c'est le copieur 
Copy II Plus de Central Point 
Software. On en est a la version 5.0 
et il est devenu automatique : on 
tape le nom du programme a copier, 
et le parametrage s'effectue automa- 
tiquement. 40 dollars. Street Elec- 
tronics, le grand specialiste des in- 
terfaces, a concu le LiveWire. C'est 
un cable de liaison avec 1'imprimante 
"intelligent". II comporte une carte 
horloge/calendrier incorporee dans 
son connecteur. et un adaptateur 
convertissant la sortie serie en sortie 
parallele (permettant d'utiliser d'au- 
tres imprimantes que I'lmageWriter 
avec un Apple //). Moins de 100 dol- 
lars. 



Du Hard pour le Mac 

En attendant que le Mac devienne 
un jour un systeme "ouvert", le voici 
dote d'une impressionnante gamme 
d'accessoires et d'extensions. Le 
mois dernier, Pom's vous parlait 
dune possibility d' extension a 1 
Mega. Cette modification est desor- 
mais possible en France, grace a 
MacMega de P-Ingenierie 
Cette filiale de Polygone informati- 
que se propose de transformer un 
Macintosh 128k ou 512K en Macin- 
tosh de 1024K. La memoire centrale 
elargie etant directement adressable. 
tous les logiciels peuvent I'urjliser. 
Avec le switcher, c'est un reve, on 
peut faire tourner plusieurs applica- 
tions simultanement, sans se trouver 
a court de memoire. Avec un disque 
virtuel (un programme simulant un 
lecteur de disque dans la memoire 



de Macintosh), tel que Speedy, 
concu aussi par P-Ingenierie les 

programmes toument avec une rapi- 
dity spectaculaire. Cette modification 
couterait 15000 francs pour un Ma- 
cintosh 128K, et 10000 pour un Mac 
512K. L'operation est effectuee en 
cinq jours. 

Attention cependant : en l'etat actuel 
des conditions de vente, cette greffe 
de memoire annule la garantie du 
constructeur. 



Autres accessoires 
interessants pour le Mac 

Le Port Power d'Assimilation. 

Cet adaptateur qui se branche sur la 
sortie imprimante permet d'utiliser le 
Mac avec des accessoires fonction- 
nant en "parallele", et notamment 
tous les peripheriques IBM. Mais une 
sortie situee sur l'adaptateur permet 
de conserver I' usage de la sortie 
serie. Serie ou parallelle, plus besoin 
de choisir. 79 dollars. 
Le Mac Nifty Switch du Kette 
Group permet, lui, de brancher 
deux peripheriques sur le meme 
port, et de choisir entre les deux par 
un bouton (prix 35 dollars), le Mac 
Nifty Stereo Music System trans- 
forme le son monophonique du Mac 
en son pseudo-stereophonique (prix 
80 dollars, ampli et haut parleurs 
compris), enfin le MacNifty Joys- 
tick Converterpermet d'utiliser un 
joystick en guise de souris (45 dol- 
lars l.Utiliser un autre accessoire que 
la souris. c'est decidement un reve 
partage La MacTablet de Summa- 
graphics remplace la souris par une 
tablette et un stylo optique. Un must 
pour les dessinateurs et les illustra- 
teurs. que la souris rebutait. 



Moins interessant 

Des qu'un appareil. quel qu'il soit, a 
du succes. on voit fleurir autour de 
lui une foule d'accessoires plus ou 
moins etranges; le Mac n'echappe 
pas a la regie. MouseMat est un 
tapis destine a recevoir les deplace- 
ment de la souris, avec mise a la 
masse du Mac pour evacuer les char- 
ges electrostatiques. 540 FF. Mouse- 
Medic est un kit de nettoyage, tou- 
jours pour la souris, qui comporte un 
pinceau soufflant, une bombe d'air 
comprime, une petite bouteille de li- 
quide de nettoyage "special", et... un 
chiffon ! Le tout pour 300 FF. Mou- 
seHouse est une petite boTte en 
plastique qui vient se coller sur un 



flan du Mac, afin de recevoir la 
souris lorsquelle n'est pas utilisee. 
Tresjoli... 120 FF. 

Le principal avantage de ces acces- 
soires, croyez-en notre experience, 
c'est qu'on peut tres bien s'en pas- 
ser ! 



Logiciels, du serieux 

Macintosh a suscite une avalanche 
de programmes de gestion de don- 
nees, et ces programmes ont a leur 
tour enfante d'une nouvelle genera- 
tion de bases de donnees, le plus 
souvent relationnelles, dotees parfois 
de macros-commandes et transfor- 
mables en fonction des besoins de 
l'utilisateur final par une society de 
service informatique. Parmi ceux-ci : 
Quatrieme dimension d'ACI, 
Omnls 3, diffuse par KA, et Mac- 
Base 500 de Contrdle X. 
Le Macintosh avait deja un tableur 
extra : Multiplan de Microsoft. II fal- 
lait l'astuce de Microsoft pour le 
transformer en super-tableur; c'est 
Excel. Sortie prevue a I'automne. 
Tableur et Graphiques integres, 256 
rangees, 16384 colonnes, 42 types 
de graphiques multi-fenetres. On l'a 
compris, c'est du serieux. Bizarre- 
ment, ce super-tableur est apparem- 
ment plus proche de Lotus 1-2-3 
que ne Test Jazz. Excel deviendra a 
coup sur un des best-sellers des logi- 
ciels pour Macintosh. 



Pour dessiner 

Tandis que sort la version 1.8 de 
MacDraw. voici un autre pro- 
gramme qui lui ressemble bigrement, 
mais qui comporte de notables ame- 
liorations, c'est MacDraft de IDD. 
Possibility de "zoomer" sur une par- 
tie du dessin, pour y ajouter de fins 
details, d'operer un panoramique, 
pour voir 1'ensemble, 16 echelles, 
possibility d'operer des rotations 
d'objets par increments d'un degre, 
ou de distribuer ces objets le long 
d'une ligne, possibility d'avoir 4 do- 
cuments separes sur l'ecran simulta- 
nement, et d'y transferer des ele- 
ments, possibility d'y coller des 
images de MacPaint, ligne flechee 
pouvant indiquer automatiquement 
les dimensions d'un objet. Apres un 
super tableur, voici un super Mac- 
Draw. Pour designer un dossier ou 
une application. Icon Switcher de 
PBI Software permet de dessiner et 
de personnaliser les icones (Prix 19 
dollars). Et pour ceux qui manquent 
de talent ou d'imagination, il existe 
deja des icones toutes dessinees : 
Icon Libraries (prix 19 dollars). 



Pour imprinter 

II est loin le temps ou les utilisateurs 
de Macintosh etaient strictement limi- 
tes a 1' utilisation de l'lmageWriter 
d'Apple. SoftStyle propose des 
"drivers" permettant d'utiliser avec le 
Mac une imprimante Epson (Eps- 
tart : 45 dollars), une ThinkJet Hew- 
lett Packard (Jetstart : 45 dollars), 
une LaserJet d'Hewlett Packard (La- 
serstart : 95 dollars). 



Pour les fanas des 
statistiques 

Statview de Brainpower est un 

programme de statistiques interactif, 
permettant la vision simultanee des 
donnees et des analyses. Prix 195 
dollars. StatFast de Statsoft per- 
met toutes correlations, Anova, Re- 
gressions multiples, etc... et l'obten- 
tion de graphiques. Prix : 99 dollars. 
StatWorks de Heyden & Son dis- 
pose des meme fonctions. d une pre- 
cision de 19 chiffres apres la virgule, 
integre aussi un modele graphique 
permettant d'obtenir des histogram- 
mes en trois dimensions, et d'utiliser 
50000 points de donnees : 100 dol- 
lars. Enfin, ClickGraph de 
Controle X, plus simple et moins 
scientifique, est la partie graphique 



de CX MacBase enrichie de possibili- 
tes de Zoom, et capable de recuperer 
des donnees de Chart ou Multiplan. 
Prix : 1200F. 

Enfin des simulations. 

L'un des plus eblouissants jeux de si- 
mulation s'appelle Gato de Spec- 
trum Holobyte II permet a 1'utilisa- 
teur de simuler le pilotage d'un sous 
marin pendant la seconde guerre 
mondiale. Jusqu'a present, ce jeu 
realise avec des sons et des images 
tridimensionnelles n'existait que pour 
l'IBM PC. Le voici transpose (et 
ameliore) sur le Macintosh. Images 
superbes et simulation hyper realiste. 
Prix: 59 dollars.A quand un simula- 
tes de vol sur Macintosh ? 



Adresses 

Sorcim/IUS Micro Software 

2195 Fortune Drive, San Jose, CA 

95131 

Controle X 

94, rue Lauriston 75116 Paris 
Version Soft 

66, rue Castagnary 75015 Paris 

Central Point Software 

9700 SW Capitol Hwy#100 Por- 
tland OR 97219 



Street Electronics Corporation 

1140 Mark Avenue Carpinteria. CA 
93013 

P-Ingenierie 

226. bd Raspail 75014 Paris 
Kette Group 

13895 Industrial Park Blvd - Minnea- 
polis MN 55441 

Summagraphics Corp. 

777 State Street Extension P.O. Box 
781 Fairfield CT 06430 

IDD 

1975 Willow Pass Road Suite 8, 
Concord CA 94520 
PBI Software 

1155 B H Chess Drive Foster City 
CA 94404 

7°92 S Kalaniannaole Hwy Suite 205 
Honolulu Hawai 96825 

Brainpower 

24009 Ventura Bd, Calabasas. CA 
91302 

Statsoft 

2831 East 10th St. Suite 3, Tulsa OK 
74104 

Heyden & Son 

247S 41st St, Philadelphia PA 19104 

Spectrum Holobyte 

1050 Walnut, Suite 325. Boulder. 
CO 80302 



Courrier des Lecteurs 

Olivier Herz 



J'attire votre attention sur la routine 
de chargement rapide des fichiers bi- 
naires (Mr Tran-Van, Pom's N" 4 : 
en mode direct elle est parfaite, mais 
en mode programme, la commande 
"& suivi d'une variable" ne fonc- 
tionne que si elle est precedee d'un 
"& suivi d'un nom reel de pro- 
gramme". Si vous en doutez. prenez 
le programme "& BLOAD DEMO" 
sur la disquette n" supprimez la pre- 
miere partie de la ligne 20; faites 
RUN; risultat... ; I/O ERROR. 

D' autre part, dans le POM'S n" 16, 
rubrique Trues et astuces, le pro- 
gramme Basic du "Eureka il y a un 
PEEK pour savoir si un point graphi- 
que est allume", ne (onctionne pas. 
C'est probablement une faute de 
frappe quelque part (a la lire ligne 
A = PEEK (Y/64 est deja quelque . 



chose d' impossible : imaginez que Y 
= 12, par exemple. et calculez le 
PEEK...). Solution ? 

M. Tomeno Paris 

II y a effectivement un bug sur le & 
BLOAD. mais pas tout-a-fait de la 
facon dont vous le decrivez : & 
BLOAD A$ "plante" avec un I/O 
ERROR, quand il suit un acces dis- 
que autre qu'un & BLOAD "TOTO" 
(RUN, BLOAD, CATALOG ou VE- 
RIFY, par exemple). 
Apres etude, on s'apercpit que le nu- 
mero de volume est indique au DOS 
dans le cas du & BLOAD TOTO" 
(lignes 85 et 86 du source), mais pas 
dans le cas du & BLOAD A$. Cela 
explique que le bug n'ait pas lieu 
lorsqu'un & BLOAD A$ suit un & 
BLOAD "TOTO". 



Pour y remedier, il suffit de decaler 
les lignes 85 et 86 avant la ligne 80, 
et je propose le patch suivant : 
BLOAD CHARGE. OBJET.A$9000 
9035 : AO 00 8C EB B7 20 B7 00 
C9 22 DO 23 A9 06 85 CI 
BSAVE CHARGE. OBJ, 
A$9000.L$22B 

(bien noter DO 23 et non DO 28 
comme dans l'original). 

II y a effectivement deux coquilles 
dans le "trues et astuces" du n° 16. II 
faut lire •: 

lere ligne : A = PEEK (Y/64) 
9eme ligne : P = (P-INT(P))) = .5 



Les EPROMs des cartes imprimantes 
Epson portant les references APLB. 
APLD et APLE component des bugs 
qui, pour les deux premieres, empe- 



Pom's n° 19 



chent 1'assemblage sur papier avec 
MERLIN et, pour la derniere, per- 
turbe les tabulations. Les personnes 
interessees peuvent prendre contact 
avec moi ; j'ai en effet reprogramme 
des EPROM sans ces inconvinients 
et dotees de nouvelles fonctions : for- 
mattage numerique avec la virgule et 
non le point, generation tres simple 
de nouveaux caractires, dump ecran 
texte. 

Yvan Koenig, Mosaique Gerbino, rue 
du stade. 06620 Valauris. 



Je vous soumets ces quelques pro- 
blemes . 

Comment charger ICARE a partir 
d'un programme sans en interrompre 
le deroulement ? 
car : 

10 PRINT CHR$(4); "BLOAD 

ICARE,A$8000" 

20 CALL 32768 

30 PRINT ICARE charge " 

s'arrete a I 'instruction 20 

Je possede la carte 80 colonnes de 
CHAT MAUVE. En utilisant ICARE 
en mode 80 colonnes. plus aucun 
acces disque n'est possible. Le DOS 
semble deconnecte. Seul un RESET 
permet de reprendre la main: 
comment cela se fait-il ? 

La commande MAXF1LES ne mar- 
che plus apres le chargement 
d ICARE en 80 ou en 40 colonnes ! 
Comment puis-je faire passer "MAX- 
FILES 5" tout en utilisant ICARE ? 

En regardant attentivement le source, 
j'ai remarque en ligne 875 le mes- 
sage & PROUT; de mime, en 792, 
en pressant l'OA', on obtient & 
PROUT. Cette commande n'engen- 
drant pas de message d'erreur, je 
pense quelle fait quelque chose, 
mais quoi ? 

M. Amsaleg Lamorlaye 

ICARE redonne la main au Basic 
apres son chargement. Pour que cela 
ne se produise pas, je vois deux so- 
lutions : 

• patcher le programme; mais cela 
oblige a trouver dans le source, 
puis l'objet, la modification a faire. 
ce qui est un peu lourd; 

• creer et lancer un fichier EXEC 
qui contient : 

BLOAD ICARE 3.1.AS8000 
CALL 32768 
RUN (application) 




n'a pas ete ecrit pour fonc- 
r en 80 colonnes, aussi ne 
vous etonnez pas si son fonctionne- 
ment en 80 colonnes pose des pro- 
blemes. Toutefois, je dois vous signa- 
ler que cela ne deconnecte en 
principe pas le DOS, sauf peut-etre si 
Ton fait un & HGR PRINT. 

MAXFILES vaut 3 par defaut lors du 
boot, ce qui place la HIMEM a 



$9600. Mettre MAXFILES a 4 des- 
cend la HIMEM a $93AD, ce qui 
cause un conflit avec la partie "table" 
(page 35) de ICARE. Par conse- 
quent, ICARE ne supporte pas que 
Ton donne a MAXFILES une valeur 
superieure ou egale a 4. 

Apres examen du listing source, je 
pense que & PROUT 'TOTO", 
A$,B$,'TITI" envoie une chaine de 
caracteres a rimprimante sans passer 
par un PR#1; mais, a l'instar du & 
HARDCOPY, cela ne marche que 
sur une Epson equipee d'une inter- 
face Epson. 



Transferer un icran 80 colonnes 
pour pouvoir le recuperer integrale- 
ment, apres avoir utilise I'ecran a 
d'autres fins : cela doit etre anodin ! 
Apres avoir passe un jour, et surtout 
une partie de la nuit suivante, j'en 
conclus que ce n 'est pas aussi anodin 
qu'il n'y parait. 

En deux mots : 

Je transfere le 1/2 ecran en memoire 
principale de 1024 a 2048. vers la 
memoire auxiliaire de 10240 a 
11264. 

Idem pour le 1/2 ecran en memoire 
auxiliaire que je transfire de 1024 a 
2048 vers la mimoire principale de 
10240 a 11264, au moyen de la 
routine AUXMOVE. 
J'efface partiellement I'ecran. 
Je transfire dans l'autre sens, les 2 
1/2 icrans sauvegardes en memoire 
principale et memoire auxiliaire de 
1024 a 11264 vers 1024 a 2048 res- 
pectivement en memoire principale 
et mimoire auxiliaire. helas... un seul 
revient. 

M. De Crecy. Versailles 



Votre programme fonctionne parfai- 
tement bien... a condition de ne pas 
etre en 80 colonnes (mais on ne 
peut alors verifier que la seconde 
moitie revient correctement). 
En effet, la mise en 80 colonnes met 
le commutateur 80STORE en posi- 
tion ON (par l'equivalent d'un POKE 
-16383,0), ce qui a pour conse- 
quence que AUXMOVE ne fonc- 
tionne pas correctement avec la par- 
tie de la memoire correspondante a 
la page texte ($400-$7FF), car AUX- 
MOVE utilise les commutateurs 
RAMRD et RAMWRT sur lesquels 
80STORE a priorite. Par consequent, 
vous devez mettre 80STORE en po- 
sition OFF (par l'equivalent d'un 
POKE -16384,0) avant d'appeler 
AUXMOVE. Par exemple : 
LDA #$0 

STA $C000; met 80STORE off 
SEC ou CLC selon la direction : 
principale (-) auxiliaire 
JSR $C311; appel de AUXMOVE 
LDA #$0 



STA $C001; remet 80STORE on 
RTS 



. Peut-on transformer un fichier avec 
par exemple: A$(80,80),B$(200,1) 
en fichier binaire, pour accelerer le 
chargement (environ 2 minutes avec 
DOS 3.3) et qu'il puisse operer avec 
un programme Basic utilisant des 
A$(I,L) ? Mes essais ont iti infruc- 
tueux. 

M. Boyer Chatillon 

En ce qui concerne le probleme de 
la transformation d'un tableau de 
chaines en fichier binaire, il faut, 
pour le faire, ecrire une routine en 
assembleur, relativement complexe 
(a la difference d'une routine identi- 
que pour les tableaux de variables 
reelles), car, si le descriptif du tableau 
des chaines est une table placee a un 
endroit connu de la memoire, les 
chaines en revanche se trouvent dis- 
perses dans la zone comprise sous 
la HIMEM. 

La seule realisation a ma connais- 
sance sur ce sujet, est celle de Nibble 
"AMPER-SPEED" (dans Nibble Ex- 
press Volume III, que vous pourrez 
trouver chez votre revendeur, SIVEA 
par exemple). Le gain de vitesse est 
d'un facteur trois seulement, car la 
routine ne cree pas de fichier binaire, 
mais accelere les operations sur les fi- 
chiers texte en court-circuitant les 
commandes du DOS. 

Utilisation Gesmask modifii (POM'S 
n° 14) sous PRODOS: je n' arrive 
pas a le faire fonctionner, il doit sans 
doute y avoir des changements 
d'adresses, done de lignes de pro- 
gramme, mais lesquels ? Mon niveau 
actuel ne me permet pas d'y repon- 
dre. De plus, je suppose que BASI- 
CIUM ne doit pas fonctionner sous 
PRODOS. 

M. Swiderski Bourgoin-Jallieu 

En ce qui concerne Gesmask modifie 
sous ProDOS, il faut faire les modifi- 
cations habituelles pour que le pro- 
gramme Applesoft marche sous 
ProDOS : 

• il faut remplacer a la ligne 20 : 
D1$=CHR$(13) + D$ par 

D1$ = D$. 

• faire un BLOAD d'une image 
texte ($400-$7FF) donne un 
"NO BUFFERS AVAILABLE" car 
ProDOS n'aime pas charger un fi- 
chier a cet endroit. 

Pour y remedier, il suffit de faire la 
meme chose que sous DOS (Pom's 
n° 9, page 27; errata Pom's n°10 
page 73). 

Le BASICIUM fonctionne parfaite- 
ment sous ProDOS, apres quelques 
operations indiquees dans son ma- 
nuel d' utilisation. ■ 



Pom's n° 19 73 



pom's 



Disquettes 



HAIFA source (cf. Pom's n" 5) a 55,00 F 

H-BASIC (cf. Pom's n° 8) a 150,00 F 

MUSIC (cf. Pom's n° 10) a 80,00 F 

DBSTAG (cf. Pom's n" 11) a 450,00 F 

JEUX A (cf. Pom's n 12) a 80,00 F 

JEUX B (cf. Pom's n° 12) a 80,00 F 

BASICIUM (cf. Pom's n° 13) a 150,00 F 

E.P.E. (cf. Pom's n" 15) a 150,00 F 

PASCAL (cf. Pom's n° 15) a 80,00 F 

MAX (Monlteur etendu) (cf. Pom's n° 18) a 150,00 F 

DOMINOS (cf. Pom's n° 19) a 80,00 F 



Recueils 



N*l, recuell des revues 1 a 4 a 140,00 F 

Disquettes d'accompagnement 1 a 4 a 150,00 F 

N°2, recuell des revues 5 a 8 a 140,00 F 

Disquettes d'accompagnement 5 a 8 a 190,00 F 



Anciens numeros 



Revues 4 7 8 a 35,00 F 

Revues 9 . 10 11 12 13 14 15 16 17 18 19 a 40,00 F 

Disquettes Apple II, He, He 

1/2 3 4 5 6 7 8 9 10 11 12 a 55,00 F 

13 14 15 16 17 18 19 

Disquettes Macintosh 

14/15/16 groupees a 150,00 F 

17 18 19 a 80,00 F 



AbonnementS Pour 6 numdros a partir du n° J 

Abonnement a la revue a 200,00 F 

Abonnement aux disquettes Apple II, He, He a 280,00 F 

Abonnement aux disquettes Macintosh a 400,00 F 

Total TTC : 

Supplement avion hors CEE : 15.00F par num6ro et/ou disquette : 



Montant du reglement : 

Envoyez ce bon et votre reglement a : EDITIONS MEV, 64 rue des Chantiers 78000 VERSAILLES 

Nom : 

Adresse : 

Imprimerie Rosay, 94300 Vincennes. Imprim£ en France. Depdt legal : Juillet 85. N° 4765 



74 



Pom's n° 19 



Les resultats du sondage 



/Jl h L e L m i dlt , lon Pr6sentat | on ... .. Rangement Lecte »rs Sondage Pourcentages 




Hemes par semaine : 

Moms de 2 heures : 3.35 93 
De 3 a 8 heures : 4 1 .08 93 
De 9 a 16 heures : 34.76 93 
Plusde 16 heures : 20.82% 



Voici les resultats du sondage pro- 
pose dans Pom's n° 17 et auquel 
823 lecteurs ont bien voulu repon- 
dre. 

II est difficile de dire si 1'echantillon 
des personnes qui ont repondu est 
representatif ou non du lectorat 
complet de notre revue. Cependant. 
vous remarquerez que le nombre de 
reponses est assez grand pour que 
les resultats soient significatifs, meme 
s'ils ne sont pas parfaitement repre- 
sentatifs. 

Nous constatons, tout d'abord. et 
cela confirme nos observations faites 
a partir du courrier des lecteurs, le 
faible pourcentage de lectrices; c'est 
dommage ! Ensuite. sachez que vous 
etes plus de la moitie, sur la totalite 
des lecteurs qui ont participe au son- 



dage, a passer plus de neuf heures a 
caliner votre materiel. Bravo. 

Pour toux ceux qui croyaient que 
Pom's etait l'exclusivite de quelques 
jeunes "bidouilleurs de genie", deso- 
les de les decevoir; la revue est lue 
par des personnes de tous ages. 
En moyenne, chaque lecteur possede 
13 numeros de notre revue, vous 
etes done un grand nombre a avoir 
la collection complete; vous etes sur 
la bonne voie, nous l'apprecions. 

Au niveau des langages, Basic est en 
tete, c'est normal... Neanmoins, dans 
les divers assembleurs, nous obte- 
nons un pourcentage de plus de 40 
%, excellent resultat. Pascal assure 
une bonne prestation, suivi de pres 
par la performance de Logo. LSE ? 
nous en rions encore ! 

Le tableau ci-joint, obtenu a l'aide 
d'un programme "maison", n'indi- 
que bien sur que le resultat de don- 
nees "discretes". Vos appreciations 
ont ete analysees "manuellement" et 
appellent quelques commentaires. 
Tout d'abord, vous etes dans 1' en- 
semble satisfaits de la revue; nous 



allons done continuer dans le meme 
sens, tout en ameliorant certains 
points comme, par exemple. la pre- 
sentation. Vous pouvez d'ailleurs 
constater que, dans ce numero, les 
listings des programmes sont beau- 
coup plus lisible que par le passe, et 
nous essaierons de fake fois la pro- 
chaine mieux ! Les utilisateurs d'Ap- 
ple // comprennent, acceptent et, 
dans la plupart des cas, apprecient la 
presence du "cahier Mac". Les utili- 
sateurs du Macintosh sont satisfaits 
du "cahier", bien que regrettant le 
nombre de pages relativement limite 
consacre a leur appareil. Toutefois, 
nous pensons qu'une dizaine de 
pages de renseignements utiles sont 
preferables a cinquante pages de... 
n'importe quoi. Si Ton veut prendre 
un exemple, le listing de "Lucy", pu- 
blic dans ce numero, en dit beau- 
coup plus sur le fonctionnement de 
la machine que la totalite de ce que 
Ton a pu voir jusqu'a present dans la 
presse specialisee. A noter que pres 
de 30 % des utilisateurs du Mac utili- 
sent aussi un Apple //. 



Voulez-vous en avoir plus pour votre argent dans le domaine des cables informatiques? 

Si vous etes utiiisateur, acheteur ou prescripteur, envoyez-nous des aujourd'hui votre nom sur papier a en-tete. 
Vous n'aurez qu'a vous en feliciter. 



Priere de renvoyer a Belden Electronics GmbH (Service PF I Fuggerstrasse 2, 
4040 Neuss-Uedesheim (Allemagne de I'Ouest). 



Pom's n° 19 



75 





no 



•wucs 



de 



•A des 

com" 1 ' 



_1 C. 



II 



l Basic 



pa 



s ea\ 



auues 



law 



9 a?e s 



MM*** 



de V« ' 
Lies 



9 iarow 



a Vion 
aut* s 



40F 

O'ECONOMfE 



.^bb w programmer 
^^fl un ordinateur est 
devenu pour vous 
un loisir, un plaisir... 
une passion, sachez que LIST a ete cree 
pour vous. LIST vous aide a tirer davantage 
de votre materiel, a vous perfectionner 
dans la conception des programmes 
qui "tourneront" sur votre machine. 
LIST vous initie aux langages informatiques 
et selectionne les meilleurs livres pour 
progresser. LIST vous informe de I'actua- 
lite et vous fournit trues, astuces et idees 
pour mieux programmer... 
Pour etre sur de ne rater aucun numero 
et pour recevoir LIST chez vous, 
abonnez-vous ! 

VOTRE CADEAU! 



'un format pratique (11.5 x 
cm), le TRANS 'BASIC est 

une table de conversion des 
instructions BASIC des 
21 micro-ordinateurs les 
plus courants. Ce livret de 
24 pages vous permettra 
d'adapter sur votre ordi- 
nateur la plupart des 
programmes concus 
pour les autres 
machines. 




P19 



BULLETIN D'ABONNEMENT 

(a retourner a LIST - Service Abonnements - 5, place du Colonel Fabien - 75491 Paris Cedex 10) 



Nom Prenom 

Adresse 

Ville Code postal I I I I I I Pays 

Veuillez m'abonner pour 10 numeros au prix avantageux de 160 F* au lieu de 200 F - prix total au numero - et m'adresser en cadeau 
le MANS 'BASIC Je joins mon reglement indispensable libelle a I'ordre de LIST 



"Belgique: 1330 FB; Suisse: 50 FS; Canada: 30 $C, autres pays: 210 FF. Par avion: Afrique Francophone: 245 FF: Amerique. autre Afrique. Oceania: 305 FF; Asie: 355 FF 
Belgiqua: Soumillion. 28. av. Massenet. 1190 Bruxelles. Versement Societe Generate 2100405 835-39 SuI»m: 19, route du Grand-Mont, CH 1052. Le Mont-sur-Lausanne. 
versement Caisse d'Epargne et de Credit. 10-2418 Le Mont CH 1052, compte courant n° 650156-7 Canada: LMPI, 9345, rue de Meaux. St Leonard (Quebec). HIP. 3H3. Canada. 
Autret pays : 5, place du Colonel Fabien, 75491 Paris Cedex 10,