Text content (OCR)
eH
M2366-18-40 F
La revue francophone des utilisateurs de PApple
Disquette mixte DOS/ProDOS
Gestion de fenétres
Aldo Reset a la parole...
Hard Copy de la page HGR étendue’
Rendez le DOS transparent
Cahier Macintosh
if
een
Fs esis !
NUMERO 18 © PRIX 40 F
ISSN : 0294-6068
PRECISION ': LES DISQUES SOUPLES XIDE.
UNE NOUVELLE GAMME DE DISQUETTES 8” ET 5”1/4 SPECIALEMENT
DEVELOPPEE POUR LES APPLICATIONS HAUTE DENSITE
UN NIVEAU_DE CERTIFICATION ELEVE (65%) r
RESEAU DE DISTRIBUTION REGIONAL EN COURS DE CONSTITUTION
XGDEX : 537 RUE HELENE BOUCHER - ZI 78530 BUC. TEL. : (3) 956.22.23
MAI-JUIN 1985,
Sommaire Page Langage* Matériel
Editorial par Hervé Thiriez 5
Disquette mixte DOS/ProDOS par Francois Sermier 7 BA || +, He, Ue
Saisie de variables par écran par Gérard Michel 12 BA He, lic
Le porte-parole par Olivier Herz 20
Gestion de fenétres par Georges Zwingelstein 24 BA || +, Ve-/lc
Graphiques aléatoires par Thierry Han 30 BA | +, He-/e
Récupérez les incénes du systéme par Marianne Sutz 35 BA Macintosh
Modifications des informations
pour le Finder par Jean-Luc Bazanegue 37 BA Macintosh
Les curseurs du systéme par Julien Thomas 45 B-A- Macintosh
Micro-journal par Hervé Thiriez 46
Les pirates ont la parole... par Pom’s 47
Hard-copy de la page HGR étendue par Marc Debuigne 49 BA lle
Les pointeurs, suite... par Olivier Herz 54 P || +, le, e-Mac
Tirage au sort ! 55
Rendez le DOS transparent par Jean-Pierre Januel 59 B Me-le
Recherche dans un tableau par Patrice Neveu 67 BA | 4. Helle
Micro-informations par Jean-Michel Gourévitch 70
Bibliographie par Alexandre Duback 73
Sommaire des précédents numéros 74
Courrier des lecteurs par Olivier Herz 75
Langage : Blasic) A(ssembleur) Pascal)
Les annonceurs
Adefi : p 61 / Apple : p. 56—57 | Club Apple : p. 25 / Computer 3: p_70 | Controle X : p. 21 / Hello: p. 4 (IEF: p. 6/ List: p
58 MBDC : p. 69 PSI: p. 80 | Télécompo ; . 4 / Version Soft : p. 22—23 / Video Technologie : p. 79 / Xidex : p. 2
Apple, est une marque déposée de la société Apple Computer Inc.
Editions MEV - 49, rue Lamartine - 78000 Versailles
Directeur de la publication - Hervé Thiriez
ES
Pom’s n° 18 3
C'est pour pouvoir faire face @ une
demande plus de dix fois
pure i ce qui avait été prévu
iw Hello a décidé de lancer unc
nouvelle fabrication de 2.000)
cartes Apple-Tell. Avantage de
ia grande série : de tres sensibles
ns de cout sur le prix des
composants LSI et VLSI,
permettant de faire chuter de plus
de 20% le prix de la carte
Apple-Tell.
Le modem vedette de votre Apple,
{éja couronné Pomme d'Or 1983,
1 suiscité en 1984 trois nouvelles
Pornies (Or, récornpensant trois
des (tres nombreux) logiciels que
ses utilisateurs ont deja dedies
4 Apple-Tell
> MICRO-KIDS : serveur
monovoie pour les lablissernents
d'enseignement
=> VASA : outil de composition
de pages vidéotex incluant
un serveur arborescent complet.
> TELEBASIC : Basic télécom
et vidéotex, destiné & la création
de serveurs et de terminaux
automatiques.
Parmi les autres logiciels créés pour
Apple-Tell
=> TELEPOM : enrichissement
du Basic (60) instructions nouvelles)
permettant de créer soi-méme
les yerveury (Ascii et vidéotex)
Jes messageries ou toutes applications
télematiques
> ASCII EXPRESS : outil général
de télécom destiné a permettre
impression et le stockage des
do recues, incluant un
émulateur universel de terminaux
> PROTEXT : éditeur-souris.
permettant la composition (texte et
lessins) de pages Télétel destinées,
i des serve
> FARR eur Ascii
(messagerie Glectronique intégréc
incluant panneau d'annonces.
unnuaire des abonnés
téléchargement. horloge temps réel
mats de passe, console opérateur
se
=> DISCOBOLE : copie de disquettes
par téphone (Dos, MemDos, Pascal
STEXT ; convertisseur
rans (Haute Resolution
Télétel)
SD BAST: module-systirne
rermettant La commande du modem
Jepuis le Basic. sous ProDos
=> PROSPECTOR
detiquet
adresses par consult
jutomatique de l'annuaire
ronique
des choix
socioprofessionnels et geographiques.
=> CALV-KIT consultation
automtatisée du centre serveur
Calvados’
> PELAGIE : serveur specialise
permettant la consultation d'un Apple
a partir d'un réseau de minitels,
(Deux versions : Basic Dos 4.3 et
MemDos.)
> YESTORA : serveur a QUATRE
ACCES SIMULTANES, disqui
10 Mo, gestion automatique
touches de fonctions dit minitel
arborescence et me
> NESTORI ; si
dlés intégrés.
rveur monoy
(meme caracté Ne
Les serveurs sont servis!
inal Asc
ntegre) incluant un decodeur ‘Tele
© 111 logiciel d’émulation de terminal
Minitel enrichi des fameeuses trois
fonctions de nee est ue tage
uotidienne tilisateurs
ie Téletel
MPRESSION (sur Linyprimante
STOCKAGE sur disquertes des pe
consultées (formats Telétel ou Ascii
AUTOMATISME vgation 1 hal (3
automanque des serveurs (appel ‘
nt La creat
téléphonique, orientation Transpad
identification, choix: successifs Pah Shenae 1 ?
enregistrement des données consultees aces.
des données dans ! application ste Wk sf
(Ces procédures d interrogation son set ,
sans aucun ota totale sis af
B tion, grace a
APPRENTISSAGE df Apple: Tell.)
surtout, tine jonction est
HELLO
ormatique
Enfin
possible avec les outils de trav
vabituels (App
Multipkan, PFS. Quic
orryptay facturation
ede M
S010 PARIS
Visicale
Telex : FLASH 210 500
Editorial
Vous étes nombreux, déja plusieurs centaines, 4 avoir répondu au questionnaire publié dans le numéro
17 de Pom’s. La liste des gagnants se trouve en page 55. Les lecteurs qui ne I'ont pas encore rempli
peuvent toujours le faire. En effet, une revue comme la nétre est en permanence 4 I'écoute de son
lectorat, et ce sondage est le meilleur moyen de connaitre vos besoins. Nous ne Pourrons pas, bien
entendu, satisfaire toutes vos requétes, dans la mesure ov certaines d’entre elles sont contradictoires,
mais nous tiendrons compte de toutes les remarques. Les résultats détailllés de ce sondage paraitront
dans le numéro 19.
Nous tenons 4 rendre hommage 4 la revue Golden pour son bon gout: elle apprécie tellement Pom's
qu'elle a publié dans un récent numéro, sous la plume de Joél Bernard, la transposition en assembleur
du programme "Un analyseur de syntaxe” écrit par Olivier Herz et publié dans Pom's 6, En désassem-
blant cette contribution “originale”, on retrouve I'algorithme d’Olivier, avec A peine quelques petites
améliorations. Pour ne pas priver les fidéles lecteurs de Pom 's, nous leurs offrirons dans le prochain
numéro une version en assernbleur de ce programme par Carlos Sacré ; celle-ci permet, en outre,
analyser de facon automatique tous les fichiers Basic d'une disquette.
Puisque nous parlons de contributions, rappelons que nous demandons aux auteurs de nous envoyer
sur une disquette les fichiers programme et le texte de l'article sous forme de fichier TEXT (de préfé-
rence AppleWriter ou fichier ASCII sur Macintosh, mais ce n'est pas tres important). Nous souhaitons
que, de facon générale, les articles suivent le plan suivant : objet du programme, mode d'emploi, expli-
cations techniques. Nous essayons de généraliser ce plan dans les articles de Pom’s, afin de faciliter au
lecteur non spécialiste I'utilisation des merveilleux programmes de votre revue préférée. Dans la méme
ligne d'idée, vous verrez avant la fin de l'année un livre regroupant les objets et modes d'emploi de
tous les programmes de Pom's depuis le péché de gourmandise d'Adam.
Dans ce numéro, vous trouverez, comme 4 I'habitude les rubriques Courrier des Jecteurs, Micro-infor-
mations et Bibliographie que nous devons 4 Olivier Herz, Jean-Michel Gourévitch, et Alexandre
Duback. Un sommaire des anciens numéros de Pom's vous est proposé, il vous permettra de trouver
rapidement l'article qui vous intéresse, afin de completer votre collection.
Pom's a rencontré le célébre pirateur de logiciel Aldo Reset... Frangois Sermier nous offre la possibi-
lité de sauver, sur la méme disquette, des fichiers DOS 3.3 et ProDOS, tandis que Gérard Michel
nous propose une saisie de variables par écran.
Olivier Herz teste pour vous le logiciel Porte-Parole et illustre, grace a un programme de Régis
Lardennois , l'article sur les pointeurs en Pascal UCSD publié dans le précédent numéro.
Les fenétres du Macintosh ont inspiré Georges Zwingelstein ; il a écrit un Programme de gestion de
fenétres pour les Apple //.
Dans chaque numéro de Pom’s (ou presque), plusieurs Pages sont consacrées au graphisme , ainsi,
Thierry Han nous propose des "Graphiques Aléatoires” et Marc Debuigne une hard copy de la page
HGR étendue.
Jean-Pierre Januel nous offre la possibilité d'utiliser le DOS de facon tout 4 fait transparente, tandis
que Patrice Neveu recherche et trouve instantanément des mots ou groupe de mots dans un tableau
de chafnes alphanumériques. Dans le Cahier Mac, Marianne Sutz explique comment récupérer les
icénes du systéme depuis un programme Basic, tandis que Jean-Luc Bazanequemodifie les informa-
tions pour le Finder. Enfin, Julien Thomas analyse les curseurs du systéme.
Nous nous retrouverons enfin tous lors du grand deélire d’Apple Expo, du 14 au 16 juin od, outre le
stand de Pom’s, vous pourrez apprécier de nombreuses manifestations. Nous recommandons tout parti-
culiérement le _débat passionnant que notre collégue Jean-Louis Courleux (France Inter) organise le
dimanche aprés-midi, mettant face a face des auteurs de logiciels bestsellers et les plus prestigieux
birateurs de logiciel francais.
Il est important de préciser que l'entrée 4 Apple Expo est gratuite pour les membres du Club Apple. Les
lecteurs de Pom'’s, quant a eux, bénéficieront d'une remise de 5U% sur Présentation du dernier nu-
mero.
Hervé Thiriez
Ont collaboré & ce numéro; Joan Luc Bazanegue — Alexandre Duback — Mare Debuigne — Jean-Michel Gourévitch — Thierry Han
=_Dlivier Herz — Jean-Piorre Januel — Régis Lardennois — Gérard Michel — Patrice Neveu — Franyois Sermier — Marianne Sutz —
Hervé Thiriez — Julien Thomas — Georges Zuingelstein. Rédacteurs : Alexandre Avraie — Olivier Here — Laurence Tichkowsky,
Directeur de la publication, rédacteur en chef : Hervé Thiriez. Dessins ; Laurent Bidot
Slége social : Editions MEV —_ 64/70 rue des Chantiers — 78000 Versailles — Tel, - (3) 951.24.43.
Publicité : Consultor les Editions MEV,
Diffusion N.M.P.P_ : Consulter les Editions MEV.
Composition : Telécompo — 13/15 avenue du Petit Parc — 94300 Vincennes — Tél. ; 328.18.63.
Impression : Rosay — 47 avenue de Paris — 94300 Vincennes — Tel. - 328.18.63
CC EE
Pom’'s n° 18 5
l'Aérospatiale,le club Thomson,etc...
DRIVE CHINON
>
5 1/4 COMPATIBLE APPLE II +, Ile, IIc
NOUVEAU: Cable pour IIc
- 1/2 HAUTEUR
~ 40 PISTES (48 T.P.!)
~143 Ko SOUS DOS 3.3
~ 160 Ko SOUS DOS MODIFIE
- DETECTION DE PISTE 0 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.T 1 490 Frs T.T.C
PROMOTION Floppy double 2 521 Frs H.T 2.990 Frs T.T.C
(prix par quantité sur demande)
Ce lecteur de disquette a été homologué par la FRAMIF,
-HAUTE FIABILITE
~ SILENCIEUX
-FAIBLE CONSOMMATION
-GARANTIE 1 AN
CE MODELE FAIT PARTIE D'UNE GAMME COMPLETE DE LECTEURS 5°1/4 & 31/2 AVEC INTERFACE SASI.
Autres modéles disponibles pour tous micros (nous contacter)
-Carte 80 colonnes étendue 990T.T.C
G| -Disquettes 51/4 11,90 Frs H.T par boite de 10.(13,90 Frs T.T.C)
&! _Moniteurs 12” haute résolution vert ou orange 990 Frs T.T.C
MO
MICRO-DISPO, Tél.: 566 57 17 P.LE.D Tel.: 249 16 50
§8,rueBlomet 75015 PARIS s 42, bd Magenta 75010 PARIS
NOM: PRENOM:
ADRESSE:..
SOCIETE:
Veuillez m’envoyer une documentation sur vos produits.
Je suis interessé 4 titre personnel..... DD exces professionnel oO
Pom’s n° 18
Disquette mixte ProDOS/DOS 3.3
Principe
Vous venez de découvrir ProDOS,
particuliérement la grande facilite de
Vaccés disque au niveau du bloc a
partir du Basic (nous allons y reve-
nir...), mais vous aimez bien DOS
3.3 et d’ailleurs beaucoup de vos
Programmes style ZAP ne sont pas
compatibles ProDOS.
Ou encore, vous échangez des dis-
quettes de programmes avec des
amis et il vous faut toujours 2 dis-
quettes différentes (ou 2 faces), une
pour DOS 3.3, une pour ProDOS.
cela finit par poser des problemes
(exemple : disquette Pom’s)
Vous aimeriez bien avoir tout cela
sur une méme disquette. Et bien
cst dorénavant possible avec le jeu
de programmes présentés ici.
La démarche 4 suivre est (relative-
ment) naturelle :
© Initialiser une disquette ProDOS a
Taide du FILER
® Modifier & la main, a l'aide d'un
utilitaire de type ZAP, le Volume
Bit Map (équivalent ProDOS du
VTOC 3.3), pour limiter la partie
utilisée par ProDOS
© Créer a la main une piste CATA-
LOG 3.3 et un VTOC s‘attribuant
la partie non ProDOS.
Le programme INITPRO3.3 ci-aprés
se charge automatiquement des deux
derniéres étapes. Il vous demande
seulement a partir de quelle piste
vous désirez que commence la partie
DOS 3.3 (par défaut, il coupera la
disquette en 2, parties égales, au mi-
lieu de la piste 17). Il vous demande
également si vous désirez raccourcir
le Directory ProDOS . comme la dis-
quette contient moins de blocs, vous
pouvez ramener le Directory de 4 a
2 blocs et récupérer ainsi 1K octets
de memoire disque (cela vous laisse
tout de méme 25 entrées, dont
d'éventuels SubDirectory au CATA-
LOG, au lieu de 51). Méme pro-
bléme pour la partie DOS 3.3, 02 la
taille du CATALOG peut étre fixée
de 4 secteurs minimum 4 15 maxi-
mum.
Remarque importante normale-
ment, tronquer le répertoire est sans
danger... mais, on peut avoir des sur-
prises : ainsi, CONVERT lit d’autorité
les 15 secteurs de la piste 17 sans
s'occuper de leur chainage ni s’arré-
ter 4 la premiére entrée vide, il si-
gnale une erreur mais on peut pour-
suivre et transférer tous les fichiers
que l'on veut. Pire encore, la dis-
Pom’'s n° 18
quette “Utilitaires //c’” refuse de re-
connaitre un volume ProDOS dont
le répertoire est tronque pour l’opé-
ration Identifier ‘ Lister Volume, mais
accepte tout autre operation (copier
fichier, transferer) bizarre ! Notez
également qu'elle refuse obstinément
de reconnaitre la partie DOS 3.3
d'une disquette mixte; on ne peut
donc pas convertir sur la méme dis-
quette avec Utilitaires //c. Par contre,
cela est parfaitement possible avec
CONVERT.
La disquette produite par INIT-
PRO3.3 est lisible par ProDOS et
DOS 3.3. Attention, un méme pro-
gramme ou fichier ne peut étre lu
que par l'un des deux DOS; il faut
toujours recourir 4 CONVERT si l'on
veut le faire passer d'une moitié a
lautre. Par contre la disquette n'est
pas bootable ni en ProDOS ni en
DOS 33. Ceci est normal en
ProDOS oi il faut la rendre explicite-
ment bootable en y_ transférant
PRODOS et BASIC.SYSTEM (ou
tout autre programme de SYS-
TEM). On Lot gaat tena boat
DOS 3.3 en copiant DOS 3.3 sur la
partie ProDOS et en appelant
HELLO.OBJ qui se charge du reste
Ceci n'est que le premier pas vers un
systéme totalement mixte ot le Basic
Applesoft pourra au choix utiliser
DOS ou ProDOS permettant de
CONVERTir trés élégamment ces
programmes Basic ou binaire. Mais
n’anticipons pas.
Secteurs, Blocs et MLI
L’ensemble de l'opération est réalisa-
ble car tous les syst@mes d’exploita-
tion (y compris CP/M et Pascal
UCSD, voir programme INITPAS3.3
dans le prochain numéro) utilisant le
DISK Il d'Apple s'appuient sur une
méme sectorisation physique de la
disquette. Les différences viennent
du fait que, pour diverses raisons, la
sectorisation logique de la disquette
n'est pas identique. c'est ce qu'on
appelle l'entrelacement (interleaving).
De plus en ProDOS, I’acces disque le
plus élémentaire s'effectue non plus
secteur par secteur mais par groupe
de 2 secteurs appele bloc. A noter
que l'idée de piste n'existe plus en
ProDOS,
Les deux tables suivantes permettent
de voir la correspondance entre les
différentes notions de sectorisation
pour la piste 0.
Francois Sermier
TABLE 1
emplacement physique
0123456789ABCDE
secteur logique DOS 3 3
O7E6D5C4B3A2918
bloc logique ProDOS
OA 4A OB 4B 1A 5A 1B 5B 2A 6A
2B 6B 3A 7A 3B 7B
TABLE 2
blocs ProDOS
01234567
secteurs DOS
0-F D-C B-A 9-8 7-6 5-4 3-2 1-F
Pour les autres pistes, ces tables res
tent valables et relient le reste de la
division par 8 du numéro de bloc et
les secteurs DOS correspondants. Le
numéro de piste est le quotient de la
division par 8 du numéro de bloc
Exemple
piste 17, secteur 7: début du bloc
numéro 8*17+4 soit 140
réciproquement, bloc 100 = piste
numéro (100/8) soit 12, reste 4 donc
secteurs 7 et 6.
On pounait réaliser la conversion par
les routines Basic suivantes ;
BLOC --> PISTESECTEUR
PISTE = INT (BLOC / 8)
RESTE = BLOC -8 * Ge
-1
OR S1=15 THEN
$1=15-S1
PISTESECTEUR --> BLOC
IF S=0 OR S=15 THEN S=15-S
RANG = 0: IF S =2 « INT(S/2)
THEN RANG = 1 (ou simplement
RANG =(S = 2 » INT(S / 2))
BLOC= 8*PISTE +(7—INT(S/2))
L’aceds disque au niveau du bloc est
extrémement simple par I'intermé-
diaire de MLI (Machine Lanquage In-
terface) qui regroupe un ensemble
de 26 subroutines ProDOS repérées
par un code et appelées de maniére
standardisée MLICALL __ montre
comment utiliser cet appel MLI (voir
listing MLICALL.SCE): l'appel de
MLI doit étre suivi du code de la
fonction appelée et de l'adresse de la
table des paramétres de la fonction
Le retour de MLI se fait en sautant
ces 3 octets. L'indicateur de retenue
(Carry) est mis a 1 s'il s'est produit
une erreur: le code de l'erreur est
contenu dans l'accumulateur. On
peut alors faire un traitement d’er-
reur Cependant, il y a beaucoup
d'erreurs possibles (29), aussi le plus
efficace consiste a utiliser celui qui est
fourni par le Basic : JSR BADCALL
($BE8B) analyse les 29 erreurs MLI
en 19 erreurs reconnues par I'inter-
préteur Basic (BI) et JSK ERROUT
($BE09) entre dans le traitement
d'erreur Basic (cette méthode tres
simple n'est pas trés documentée).
La liste des paramétres dépend de la
fonction appelée et est extrémement
ah documentée (voir la bibliogra-
phie
La structure d’un volume
ProDOS
Un volume ProDOS est donc simple-
ment une succession de blocs, nor-
malement 280, sur une disquette 35
pistes. Cependant tous ne sont pas
disponibles, en effet le début du vo-
lume est occupé par 7 blocs spéciaux
que nous allons analyser.
© blocs 0-1:
Programme en langage machine
exécuté automatiquement lors du
boot. Il cherche sur la disquette un
fichier du nom de PRODOS; s’il
ne le trouve pas, il affiche UNA-
BLE TO LOAD PRODOS et se
plante (cas d'une disquette de
données), sinon il le charge en
$2000 puis saute en $2000. Voir
la suite des aventures de ProDOS
lors du boot dans Beneath Apple
ProDOS per exemple.
® blocs 2-5
Répertoire (directory) du volume.
Chacun des 4 blocs est composé
des éléments suivants
— 2 octets réalisant le chainage
amiére des blocs du répertoire. Ils
contiennent le numéro du bloc
précédent ou 0 s'il n'y a pas de
précédent.
— 2 octets réalisant le chainage
avant numéro du bloc suivant
ou 0 si.
— 13 groupes de 39 octets. cha-
que groupe décrivant un fichier du
volume sauf le tout premier des
52 qui décrit le Volume lui-méme.
Le bloc 2 qui contient ce groupe
crucial pour l'accés au disque a
recu le nom de bloc clé
® bloc 6
Image logique de l'occupation de
la disquette (Volume Bit Map). A
chaque bloc du volume est associé
un bit dans ce secteur; si le bloc
est utilisé. le bit correspondant est
4 0, s'il est libre, le bit est mis a 1
Le premier octet _décrit l'utilisation
des blocs 0 4 7. Pour une dis-
quette fraichement initialisée (pas
d'autre opération), il doit valoir 1
En effet. on vient de voir que les
blocs 0 a 6 sont occupés, d’ot en
représentant cet octet sur les 8
bits
(voir schéma)
Remarquez que seuls les blocs 0 a
2 sont 4 un emplacement rigide,
puisque l'accés aux autres se fait
par l'intermédiaire du bloc 2 (chai-
nage des blocs du répertoire et
pointeur sur le bloc VBM). On
peut donc déplacer les autres ou
méme les supprimer (sauf évidem-
ment le VBM !!!).
(voir tableau 3)
Le programme
INIT PRO3.3
Sa structure est trés simple, elle est
purement linéaire. On a essaye de
rendre aussi lisible que possible les
lectures / écritures de blocs et d’ac-
cepter les options par defaut par un
simple RETURN.
Lignes 10 4 70. initialisation et vérifi-
cation du volume. On pourrait tester
si l'opération de mixtage n'a pas déja
été effectuée en testant DOS=1 en
ligne 80. Ce morceau appelle un
sous programme en 3000 qui assure
diverses taches d'intendance : le Bip
ProDOS tel qu'il est décrit par Apple
(ProDOS Tech. Man.), mise en place
de MLICALL (notez que les lignes
3090 a 3110 mettent en évidence la
structure d’un appel MLI et permet-
tent en modifiant les lignes
3040-3050 de placer le bout de
code machine n'importe ow ailleurs
que dans !'archi-usée page 3...)
Lignes 100 4 130: lecture du bloc
clé (premier bloc du Directory). On y
trouve successivement
@ le nom du volume (reconstitué par
le sous programme en 900),
© le pointeur vers le Volume Bit
Map (VBM, normalement = 6
sauf si l'on a déja tronqué le Di-
rectory auquel cas VBM=4).
@ le nombre de blocs du volume
(NB, normalement = 280 sauf si
la disquette a déja eté trafiquée
auquel cas la valeur de NB est im-
prévisible..), on en déduit le nu-
mero de la derniére piste ProDOS
(PM, normalement = 34
Remarquez que le volume a modi-
fier doit se trouver dans le lecteur
2. on peut le mettre ailleurs mais il
faut modifier la valeur de UNIT en
ligne 3040.
Lignes 140 4 230. vous entrez vos
options. Par defaut. le roi Salomon
tranche au milieu de la disquette. Si
le Directory est déja tronqué, vous
navez pas le choix. il le restera.
Lignes 240 4 360: mise a jour du
Volume Bit Map. Si l'on rajoute de la
place ProDOS sur une disquette déja
mixte. on libére les blocs correspon
dants (il se peut que lon perde des
fichiers DOS 3.3)(ligne 260). En
270-280. on verifie que la place
consacrée au DOS 3.3 (cest-a-dire
i
8
les pistes de P1 a P2 plus la piste ré-
pertoire) n'est pas déja occupée par
du ProDOS. Le sous-programme en
800 examine l'occupation de chaque
piste par ProDOS; a la premiere qu'il
trouve non vide, il vous le signale et
vous laisse la possibilite de ne tou-
cher a rien. Si vous persistez, en
840, on marque la piste comme oc-
cupée. C'est indispensable, bien sir
pour la piste 17, mais aussi pour les
pistes situées dans la partie DOS, car
leurs numéros de blocs dépassent la
valeur maximale prévue dans le bloc
clé du volume et si MLI y trouve un
octet non nul (c'est-a-dire un bloc
libre), il considére que le Volume Bit
Map a été détérioré d’od erreur, tra-
duite par BI en une inexplicable /O
ERROR.
Le test de la ligne 830, autorise a
tenter l'expérience sur une disquette
contenant déja des fichiers. Il n'y a
aucune difficulté si aucun bloc n'est
occupé aprés le bloc numéro 135.
Mais si des fichiers existaient sur la
partie détruite, ils seront détruits phy-
siquement sur la disquette, mais pas
dans le répertoire (il faudrait pour
cela analyser lintéaralité du réper-
toire et des listes de blocs des fi-
chiers). De plus, si on essaie malgré
tout d'y accéder, y compris pour les
DELETEr, on provoquera une I/O
ERROR, car le driver devra aller lire
un bloc situé au-dela de son demier
bloc. Il vaut mieux éviter de poursui-
vre (option par défaut...). S'il faut
tronquer le Directory, on libére 2
blocs en piste 0 (si ce n'est pas déja
fait... ligne 290) et on réécrit VBM a
son nouvel emplacement.
Lignes 310 4 360: mise a jour du
bloc clé, cest-a-dire du nombre de
blocs. du pointeur sur VBM: et mise
@ jour du chainage entre blocs du Di-
rectory (ligne 360 si nécessaire)
Lignes 500 a fin: écriture du Direc-
tory 3.3. VIOC en $11/0. Catalog
de $11/F a $11/1 au plus. On véri
fiera que, quelle que soit la valeur de
NSC<4 le programme créera un mi-
nimum de 4 secteurs.
Booter ProDOS
et DOS 3.3
La disquette produite n'est qu'une
disquette de données. elle ne peut
hooter sous aucun systéme
Booter en ProDOS est trés simple.
il suffit_ de transferer sur la partie
ProDOS les __ fichiers. ProDOS.
BASIC.SYSTEM et. si l'on veut, un
programme STARTUP 4 laide du
FILER. On peut réaliser cela dés I'ini-
tialisation de la disquette, puisque la
transformation conserve les premiers
blocs du volume. Ceci permet de di-
minuer le nombre de manipulations
en ne recourant quune fois au
FILER
Pom’s n° 18
Booter en DOS 3.3 est bien sir
impossible stricto sensu, mais on
peut le simuler. Pour cela, il est né-
cessaire d’avoir un fichier ProDOS
contenant l'image du DOS 3.3, Si
cela est aisé 4 l'écriture, on congoit
aiseément que cela |’est moins 4 la re-
lecture. Il faut donc le transférer 4 un
autre emplacement mémoire; d’ou
les opérations suivantes
© Booter une disquette DOS 33
normale,
@ CALL-151
© 3000<9D00.BFFFM
DOS)
® 3D0G (ou CTRL—C pour revenir
en Basic)
BSAVE DOS 3.3,A$3000,L$2300
(sur la disquette DOS 3.3)
Employer 'utilitaire CONVERT
pour transférer DOS 3.3 sur la dis-
quette ProDOS
© Faire les opérations inverses sous
ProDOS n'est pas possible directe-
ment (la machine se plante car on
n'entre 4 aucun moment dans le
DOS 3.3 et la page 3 ($3D0 a
33FF) n'est pas en place. Il faut
(déplace le
utiliser le petit utilitaire
HELLO.OBJ (a implanter sur la
partie ProDOS).
Sous ProDOS : BLOAD DOS 3.3
¢ Puis BRUN HELLO.OBJ et nous
y sommes !
Voyons le programme HELI.0 OBJ
— de $300 4 $317: retransfert du
DOS 4 sa position initiale en $9D00.
Ces lignes sont eéquivalentes a la
commande moniteur
*9D00<3000.5300M
— en $318 et $31A : on suppnme le
mode TRACE mis discrétement par
ProDOS pour ses besoins internes
— $31C a $325: on implante la
chaine de caractéres HELLO dans le
tampon contenant les paramétres des
commandes DOS.
— $327 et fin : on rentre a froid dans
le DOS (DOS coldstart), aprés lui
avoir fait croire que la derniere
commande exécutée (en $AA5F) par
lui était INIT ce qui est son “état nor-
mal lorsqu’il vient d'une disquette
normalement initialisée Ayant vérifié
la chose. le démarrage a froid du
DOS met en place les vecteurs de la
page 3 et cherche a exécuter un pro-
gramme du nom de HELLO (pro-
gramme situé évidemment sur la par-
tie DOS 3.3 de la disquette). S'il n'y
a pas de HELLO, on obtient le clas-
sique FILE NOT FOUND, mais on
est quand méme en DOS 3.3.
On pourra trouver un exemple de
boot DOS 3.3 dans le court pro
gramme (ProDOS) HELLO joint
Bibliographie
Pour la description des formats des
secteurs (respectivement blocs) des
Pom’s n°’ 18
Source Toolkit Programme MLICALL.SCE
SOURCE FILE: MLICALL.SCE
0000: 1 LST NOA
0000; 2 Hesse
0000: 3% Routine d’appel de MLI & partir du BASIC
0000: 4 23H
———— NEXT OBJECT FILE NAME IS MLICALL.SCE.0BJ0
0300: 5 ORG $300
0300: ét
0080; 7 UIT EQU $80
0081: SB ECRIT EQU $81
0300; 94
0003; 10 LEN EU $3
O0E0: 11 WIT = EQU $£0 (drive 2; pour drive 1:$40)
2000; 12 BUFFER EQU $2000
0002: 13 BLOC §=6EQU $2
BEBB: 14 BADCALL EQU $BEBB
BEO?: 15 ERROUT EQU $BE0?
BFOO: 16 MLI EQU $BF00
0300: 72
0300:20 00 BF 18 JSR MLI
0303:80 19 CODE = OFB CLIT
0304210 03 20 Ou PARLST
0306:90 06 a BCC OK
0308:20 88 BE = 22 JSR BADCALL
030B:20 09 BE 23 JSR ERROUT
030E:40 24 0K RTS
030F :00 ro} BRK
0310:03 26 PARLST DFB LEN
0311:E0 2 OFB WNIT
0312:00 20 28 Ou BUFFER
0314302 00 2 Ou BLOC
#28 SUCCESSFUL ASSEMBLY: NO ERRORS
Schéma
octet n* Go 1 et les 33 suivants
Jjusqu’au n"“34 inclus
0000 0001 PLLA: 129144
bit: 7654 3210 7654 3210
bloc: 0123 4567 89AB CDEF
TABLE 3
TABLE 3:
Contenu d’un groupe de 39 octets.
rang de |’octet description d’un fichier
dans le groupe
d’un volume
(Ler groupe bloc 2)
Qo type de stockage, longueur du nom
1-15 nom de I’élément décrit
16 type du fichier I
17-18 bloc clé du fichier 1 inutilisé (8 fois 0)
19-20 nombre de blocs utilisées if
21-23 nombre d’octets dans fichier I
24-27 date-heure de création (cf. DATE ProDOS, POM’S)
28 ae Sion ProOOS utilisé lors de Ia création
2 a7 version ProO0S minimal requis pour ce fichier
30 acces autorisés (lecture, écriture, destruction?
3t f acresse ce chargement longueur des groupes (39)
i
32 1 ou longueur denregistrement I nbe groupes par bioc(13)
33-34 Gate cerniere modification I nombre de groupes actifs
39-36 neure Gérniere modification 1 N* bloc VBM (normt 4)
37-38 Dioc clé du repertoire i nombre total de blocs
Directories ou du VTOC (respective- Manuel du DOS (Apple) P_Lechner, QS)
ment VBM), on se reportera aux ma- — ProDOS Technical Reference Manual —_ Beneath Apple ProDOS (D.Worth et
nuels Apple ou a leurs compléments (Apple) P.Lechner, QS)
de Quality Software Beneath Apple DOS (D.Worth et rT]
Source Toolkit 0315:20 20 FE 28 JSR MOVE
0318: ws
Programme HELLO 0318:a2 00 = 30 Lox £0
0310:86 F231 STX TRACE
SOURCE FILE: HELLO.SCE O31C:8D 2F 02 32 LOOP LDA _HELLO,X
0000; 1 Lst Noa 031F:90 750A 33 STA NANE,X
0000: PRC 0322;E8 4 INK
0000: 3 ¥ coexistence de D0S3.3 et Pro-D0S 0323:C9 Ad 35 OMP £8A0
0000: Ptictrrrrittitccii itis! EE 36 BNE LOOP
——— NEXT OBJECT FILE NAME 1S HELLO.SCE.08J0 cA a oo
0300; 5 ORG $300 4
0300: is 29 JSR DOSBOOT
v03c: 7Al = EQU $30 as i ‘a
003€: 8A2 QU $3E a a
0042: 9 Ad Fou $42 032F:C8 CSCC 42 HELLO ASC ‘HELLO
00F2: 10 TRACE EQU $F2 0332:C0 CF A0
0300: We
DEA: 12 DOSBOUT EQU $90EA 445 SUCCESSFUL ASSEMBLY: NO ERRORS
ASF: 13 CHD EQU $AASF
AA75: 14 NAME = EQU $475
FE2C: 15 MOVE = EQU $FE2C
0300; 16 #
0300: 17 LOX £0
pola £ 18 sx Al Programme DEBUT
0304:86 42 19 STIX A4
0306:CA 20 DEX 100 Dé = CHR (4): PRINT D$;"BLOAD DOS3.
0307386 3E 2 STIX AZ 3°
| 0309209 30 2 LOA £930 110 ONERR GOTO 200
a : 120 PRINT D&;"BRUN LLO. _
te Hee = ba “ py 200 IF PEEK (222) = 6 THEN PRINT CHRS
/ A952 (7): PRINT "Pas de programme HELL
| 3 STA A241 ot
26 LOA £990 210 PRINT : PRINT "Vous etes en DOS 3.3°
2? STA Ad4+1 220 NEW
Programme INITPRO3.3 100
102 REM
104 REM oe rS==—— Sees Lecture Key-Blo
10 HOME :00 = 256:FF = 00 - 1 ck
20 DEF FN HICX) = INT (X / 00): DEF F 110 POKE CODE,LIT: POKE BLOC,2: CALL MLI
N LOOX) =X - 00 * INT (X / 00) 120 R = BU + 4: GOSUB 900:VOL$ = NS + "/*
30 DEF FN WKX) = PEEK (X) + 00 * PEEK 130 VBM = FN WCBU + 39):NB = FN WCBU +
(xX + 1) 41):PmM = INT ((NB - 1) 7 8
40 DEF FN PISTE(X) = BU + 56+ 4 * X 140 PRINT : PRINT "Vous allez transforme
50 DIM TY$(2):TY$<(0) = *DOS3.3":TYS(1) = r *;YOLS
"ProDOS* :TY$(2) = “Pascal” 150 PRINT * en mixte ProDOS-DOS 3.3"
40 GOSUB 3000: REM Initialisation 160 PRINT : PRINT "1 dre piste DOS 3.3 e
70 #.IF TYPE < > 1 THEN PRINT =: PRINT "C n nl: 17" ;: HTAB 27: INPUT R$:P1 =
e n’est pas une disquette ProDOS*: VAL CRS): IF R& = °° THEN Pi = 1
CALL BELL: GOSUB 3120: GOTO 70 ?
10 Pom’'s n° 18
170 VTAB PEEK (37): HTAB 28: PRINT P1 670 POKE BU + 52,P2 + 1: POKE BU + 53,16
180 IF Pi <0 OR Pl > 34 THEN CALL BELL : POKE BU + 55,1
: PRINT "n£ piste hors limite !*": 680 FOR I = Pi TO P2
GOTO 1460 $90 POKE FN PISTE<(I),FF: POKE FN PIS
190 P2 = 34: IF PM > P2 THEN P2 = PM TEST) + 1,FF
200 IF VBM ¢ 6 THEN TR = 1: GOTO 220 700 NEXT
210 PRINT : PRINT "Tronquer le Directory 710 POKE FN PISTE¢17), FN HI<¢OC): POKE
ProDOS ?N";: HTAB 31: GET R$: PRI FN PISTEC17) + 1, FN LOCOC)
NT R$: IF R$ = "O" THEN TR = 1 720 POKE BLOC,136: CALL MLI
220 PRINT : PRINT “Nbe Secteurs Director 730 END
y DOS 3.3: 15*;: HTAB 32: INPUT RS 799 REM o---- Bar de la dernidre chance
:NSC = VAL (R$): IF R$ = ** THEN esis
NSC = 15 e00 IF ¢ PEEK (BU + P>) = FF) OR OK THEN
GOTO 840
230 VTAB PEEK (37): HTAB 33: PRINT NSC 810 :: PRINT +: PRINT : INVERSE +: PRINT "A
237 REM TTENTION*;: NORMAL : CALL BELL: PR
240 REM — Mise 2 Jour Vo} INT " Vous risquez de d(truire de
ume-Bi t-Map s donn(es de ";VOL$: PRINT
250 POKE BLOC,VBM: CALL MLI PRINT "Voulez-yous continuer ?N*j:
260 IF PM < Pi THEN FOR P = PM TO Pi — HTAB 24: GET R$: PRINT R$
lr POKE BU + P,FF: NEXT 830 ::0K = 1: IF R& ¢ > "O* THEN END
270 FOR P = P1 TO P2: GOSUB 800: NEXT 640 POKE BU + P,O
280 P = 17: GOSUB 800 850 RETURN
290 IF TR THEN POKE BU, PEEK (BU) + 6 * | 599 REM = eNanup Nom
CVBM = 6):UBM = 4 900 L = PEEK (R):ST = INT (L / 16):L =
300 POKE BLOC,VBM: POKE CODE,ECRIT: CALL L- 16% ST
MLI 910 N$ = **: IF ST = 15 THEN NS = "/*
309 REM 920 FOR J = 1 TO L:N$ = NS + CHR ¢ PEE
310 REM ---------------- Mise @ Jour Key K (CR + J)): NEXT
320 POKE CODE LIT: POKE BLOC,2: caLL MLI | 720 RETURN
330 POKE BU +'39,VEM Coe 3000 REM - - Bip-Bip Probos ! --
380 NB Dake bite uaee eu ices LOCNE? = | 3010 BELL = 816: FOR I = 0 TO 21: READ X:
,
350 POKE CODE,ECRIT: CALL MLI POKE BELL + I,X: NEXT
360 :: IF TR THEN POKE BLOC, FN WCBU + 2 | 9020 DATA 162,32,149,2,32,168,252,141,
>: POKE CODE,LIT: CALL MLI: POKE B 48,192,169,36,32,168,252,141,48,19
U + 2,0: POKE BU + 3,0: POKE CODE, 2,202, 208,237,96 ea
ECRIT: CALL MLI 3030 REM Initialisati
S500 REM — Directory DOS 3 on Appel MLI rman
3 — 3040 MLI = 768:BUFFER 8192:UNIT 224:
REM Drive 1:96 --- Drive 2:224
S02 REM 3050 PA = 784:BLOC = PA + 4
59S (REM srS-S-SsSnseness= Ecriture secte | 3060 CODE = MLI + 3:LIT = 128:ECRIT = 129
urs Directory 3070 FOR I = 0 TO 21: READ X: POKE MLI +
Si0 FOR I = 0 TO Sil: POKE BU + I,0: NEX 1,X: NEXT
T 3080 DATA 32,0,191,128,16,3,144,6,32,139
520 POKE CODE,ECRIT 5190 ,32,9,190,96,0,3,224,0,32,2,0
S30 POKE BU + 257,17; POKE BU + 258,14: 3090 POKE MLI + 4, FN LO(PA): POKE MLI +
POKE BLOC,143: CALL MLI 5, FN HI¢PA)
540 IMIN = 1:0C = O:F = 0 3100 POKE PA,3: POKE PA + 1,UNIT: POKE P
SSO IF NS < 15 THEN IMIN = 7 -_ INT ¢<¢NS |, A+ 5,0
- 1) 7 2):0C = 1638: 12288 3110 POKE PA + 2, FN LOCBUFFER): POKE PA
560 1 = 6 TO IMIN STEP - 1 + 3, FN HI(BUFFER?
570 = OC= (Fir = FZ 4 3120 - Identification Dis
580 IN = (I ¢ = IMIN) AND (NSC ¢ 15)
590 1: POKE BU + 1,17: POKE BU + 257,17 * | 3130 PRINT “Disquette --> Drive 2. OK?*;
NOT FIN : GET R$: PRINT * OK*
600 :: POKE BU + 2,2 * I: POKE BU + 258,¢ | 3140 POKE BLOC,136: CALL MLI
2 1-1) * NOT FIN 3150 DOS = (¢ PEEK (BU + 3) = 3)
610 ::; POKE BLOC,193 - I: CALL MLI 3160 POKE BLOC,2: CALL MLI
620 NEXT 3170 TYPE = <¢ PEEK (BU + 2) AND NOT PEE
630 REM == Cr€ation VTOC K (BU + 3)) * € NOT PEEK (BU + 4)
640 POKE BU + 2,15: POKE BU + 257,17: PO +1)
KE BU + 258,13 3180 RETURN
650 POKE BU + 3,3: POKE BU + 6,FF - 1
660 POKE BU + 39,122: POKE BU + 48,16: P
OKE BU + 49,1
EE
Pom's n° 18
11
12
Saisie de variables par écran
Gérard Michel
La saisie de données reste souvent
un sujet de préoccupation pour le
programmeur, notamment en raison
des insuffisances de l'instruction
INPUT du Basic. Pom's vous a d’ail-
leurs déja proposé, sous des formes
plus ou moins completes et
complexes, de nombreuses routines
de saisie-clavier.
Ces différentes routines, en Applesoft
ou en assembleur, reposaient généra-
lement sur un méme principe de
fonctionnement : analyse et contréle
des caractéres entrés au clavier, puis
affectation au contenu d'une variable
a lissue d'une session de frappe,
Mmarquée, par exemple, par un RE-
TURN.
Elles pouvaient également comporter
une gestion de la position du curseur
a Técran, en fonction des variables 4
saisir, au moyen de HTAB et VTAB,
ou de traitements équivalents en lan
gage machine.
La solution présentée ici procéde
d'une autre démarche, articulée en
trois étapes
© Saisie de caractéres au clavier,
avec rejet des éventuels “parasi-
tes", caractéres de contréle en
particulier.
Affichage pur et simple des carac-
téres valides a l'écran.
© A lissue de la saisie, détectée lors
de la frappe de la touche ESC,
analyse du contenu de l'écran
pour y reconstituer les différentes
donnees et les affecter aux varia-
les.
Ce mode de saisie peut présenter
certains avantages, tant pour le pro-
grammeur (pas de gestion complexe
d'écran 4 définir et 4 réviser en fone
tion des “erreurs et omissions”), que
pour Iutilisateur (saisie. sous réserve
du respect de certaines régles. en
nimporte quel endroit libre de
lécran. possibilité de se déplacer en
permanence sur tout |'écran pour y
modifier des données, sans risque
pour les variables...)
Principes
d@ utilisation
Il vous faudra tout d’abord définir les
libellés devant apparaitre en regard
des donnees a fournir. A chaque va-
riable doit correspondre obligatoire-
ment un libellé, aussi bref soit-il, mais
il peut y avoir en revanche plus de
libellés que de variables (pour un
titre d'écran, par exemple)
Ces libellés seront ensuite affiches sur
un écran vierge par tous moyens a
votre convenance, tels les simples
ordres PRINT utilises dans notre pro-
gramme illustration.
{| daneeestevastaseerasesssseeesy
24 ' Source Big Mac
3% SAISIE ECRAN APPLE //E-C #
: : ABER) : Programme IPE2.S
6 HHH
cf
8
g ORG $7000
10 CMP e$5D jCARACTERE "§* ?
BT Bea SO
12 CHE ESHA j TRAITEMENT CHRGET STANDARD
13 Bcc SI
14 RIS
15 $1 wMP $8E
16 SO LOA £0 RECHERCHE DES LIBELLES A L’ECRAN
17 STA $25
18 $4 JSR $FBCI jCALCUL ADRESSE BASE DE LA LIGNE
Vv LY £0
20 $3 LWA ($28),Y
2 OMP fsa0 ;TESPACE* ?
22 BEG $2 OUI --) PAS DE CHANGEMENT
23 OP sor i?
24 BEQ $2
25 CMP £940 jCARACTERE DEJA EN INVERSE ?
26 Bcc $2 j0U] —) PAS DE CHANGEMENT
27 AND £S3F ;TRANSFORNE NORNAL EN INJERSE
28 STA ($28),Y
29 $2 INY
x) CPY = £$28 jFIN DE LIGNE ?
31 BNE S3
32 INC $25 jLIGNE SUIVANTE
B LOA $25
34 OP £19 sS1 L’ECRAN N’EST PAS TERMINE
k=} BNE 54
36 JSR $81 jOCTET SUIVANT § DANS LE PROGRAMME
7 OP £’S’
38 BE@ $5
Ed GP £’D’
40 Bed $5
41 96 JSR $F399
42 MP $DEC? s "SYNTAX ERROR*
43 SS STA $6 ;SAUVEGARDE OCTET COMMANDE
44 JSR $81 jOCTET SUIVANT
45 JSR $F709 RECHERCHE DU TABLEAU DE VARIABLES
46 LOA $98
47 STA $7 jSAWEGARDE DE SON ADRESSE
48 LOA $9C
49 STA $8
be ] LOY £0
3 LDA ($7),Y jERE LETTRE DU NON DU TABLEAU
52 BNI jD01T ETRE EN ASCII POSITIF
33 INY
4 LOA ($7),Y — ;26NE LETTRE
55 BPL Sé 3DOIT ETRE EN ASCII NEGATIF
%6 LOY £4
0 UA ($7),Y
58 OP fi TABLEAU A 1 SEULE DIMENSION
v BNE Sé jSINON —) ERREUR
60 INY
Pom’s n° 18
Concerant chaque variable, il fau-
dra en outre en préciser
© la longueur (si cette derniére n'est
Pas pertinente pour vos traite-
ments, fixez-la 4 255 caractéres);
© le type: 0 pour des données al-
phanumériques, 1 pour des don-
nées numériques.
Les longueurs seront stockées dans
un tableau d’entiers & une seule di-
mension (baptisons-le TL%), et les
types dans un autre tableau de
méme nature (soit TT%, par exem-
ple). Quant aux données elles-
mémes. elles seront affectées dans
un tableau de chaines de caractéres
(TV$, par exemple).
Ces trois tableaux doivent avoir un
nombre d’éléments identique et il est
préférable de les dimensionner en
conséquence avant toute opération
de saisie
Une fois les différents tableaux défi-
nis, les lonqueurs et types chargés
(par l'intermédiaire de DATAs ou par
tout autre moyen) et les libellés affi-
ches, vous disposez de deux instruc-
tions pour réaliser la saisie :
© ‘ISTV$.TL%, 11%
© :|DTV$,TL%,TT%
L'instruction :]S... permet une saisie
pure et simple : le tableau de varia-
bles est considéré comme “vide” et il
faut entrer autant de données qu'il y
a d'indices dans ce tableau.
Linstruction :]D... en revanche, affi-
che d'abord le contenu du tableau
avant de passer a la phase de saisie
Seuls les éléments 4 modifier nécessi-
tent alors une nouvelle frappe. Cette
instruction peut d’ailleurs servir dans
un but de consultation des données,
sans altération de leurs valeurs.
Le caractére “]” constitue |'identifica-
teur de nos ordres de saisie; il est
obligatoire et doit toujours étre pré-
cede de “:", meme s'il vient en tout
début de ligne ou aprés un THEN.
Fonctionnement
de la saisie
Dés qu'elle rencontre un caractére
"J", la routine commence par explo-
rer |'écran pour y trouver les libellés
et les transformer de NORMAL en
INVERSE. Les données étant ensuite
affichées en NORMAL. cette diffé
rence de mode vidéo permettra de
les distinguer des libellés.
ll est préférable de ne pas mettre
d'espaces a l'intérieur des libellés et
de les remplacer. par exemple, par
des points.
Si vous le souhaitez, vous pouvez in
diquer a l'écran la longueur maxi-
male autorisée pour une donnée en
affichant, a la suite du libellé corres-
pondant, un nombre égal de caracte
res "souligné” (code clavier #$DF)
Ces caractéres seront traités comme
des espaces par la routine et reste-
ront en mode NORMAL
Pom's n° 18
61
62
64
67
68
a
72 SB
74
76
7
78 KOO
81
LRRs
S
BSSVKRSSSL2SSB
100
101
102 K2
103
104
105
106
107
108
109
110
M1
M2
113
114 K3
M5
6
M7
118
19
121
122
JSR
S288
2R235
RESAASESAZEZRSES
3
LOA
JSR
cc
STA
LOA
STA
($7),Y
$iA
($2),Y
$19
($98) ,Y
($98) ,Y
$14
Ki
(998),Y
$19
Ki
$98
SAUVEGARDE NOMBRE D’ELENENTS
iDANS LA DIMENSION
37-48 POINTE SUR LE 1ER
;ELEMENT DU TABLEAU
sTESTE *,* AVANT LE
jDEUXIEME TABLEAU
sSINON --) ERREUR
S TRAITEMENT DES TABLEALX
jDE "LONGUEURS" ET “TYPES*
jTABLEAU ENTIER —) LES DEUX
sLETTRES DOIVENT ETRE EN ASCII NEGATIF
sSINON --) ERREUR
;TABLEAU A 1 DIMENSION SEULEMENT
jLE NOMBRE D’ ELEMENTS DOIT ETRE
jLE MEME QUE POUR LE TABLEAU
jDE VARIABLES A SAISIR
s$EB-SEC POINTERA SUR LE POIDS FAIBLE
3DE LA VALEUR DU PREMIER ELENENT
jDU TABLEAU DES LONGUEURS
sTESTE *," AVANT LE TABLEAU DES "TYPES"
iMENE TRAITEMENT QUE POUR LES LONGUEURS
jSED-SEE POINTERA SUR LE POIDS FAIBLE
jDE LA PREMIERE VALEUR
iDU TABLEAU DES TYPES
13
14
Aprés inversion des libellés, la main
est donnée l'utilisateur pour la sai-
sie proprement dite. Le curseur est
initialement placé en haut a gauche
de l’écran; il est possible de le dépla
cer en tout point avec les quatre fle-
ches de direction.
Au niveau des caractéres entrés, la
routine procéde aux contréles sui-
vants :
— Pas d'affichage autorisé sur les li-
bellés: seules les parties d'écran en
NORMAL (vierges ou non) sont ad-
mises pour la saisie / affichage.
— Pas de caractéres de contrdle, ni
de ”:”, ":” ou guillemets, les virgules
étant pour leur part remplacées par
des points (probleme des caractéres
séparateurs et des guillemets avec les
ordres PRINT).
Chaque donnée doit se terminer par
un RETURN. La frappe de cette tou-
che se traduit a l'écran par l'affichage
d'une barre oblique (dans le sens in-
verse de "/” - code clavier #$DC)
En clavier QWERTY, vous pourriez
utiliser la touche correspondant &
cette barre oblique directement. en
lieu et place de RETURN.
Il s'agit la d'un simple séparateur de
données : il s'affiche mais ne provo-
que aucun autre déplacement du
curseur que celui occasionné par les
autres touches.
Il n’est nullement indispensable de
saisir les valeurs exactement en re
gard des libellés qui leur sont liés,
sauf si vous avez besoin de vous pla-
cer sur les éventuels "'soulignés”
pour étre sr de ne pas dépasser les
longueurs prévues.
Ainsi, si vous disposez "quelque
part” d'un nombre suffisant de posi-
tions libres contigiies a I'écran. vous
pouvez saisir toutes les données re
quises en continu (a la suite les unes
des autres), 4 condition de terminer
chacune d’elles par un RETURN et
de bien taper autant de RETURN
que de données attendues (nombre
d'éléments dans le tableau des varia-
bles). A noter que, comme 4 I'habi-
tude, une donnée “vide” se_traduit
par la frappe d’un simple RETURN
Par exemple :
D1 puis RETURN et RETURN
donnera "D1" comme valeur pour le
premier élément du tableau et ""
pour le second (chaine vide).
En résumé, des lors que vous respec-
tez l'ordre des données {entrée dans
Yordre des indices croissants du ta-
bleau) et que vous terminez chacune
par un RI , vous pouvez les
saisir en n'importe quel endroit auto-
risé de l'écran, individuellement, en
un seul bloc, ou en sous-ensembles
continus.
La frappe de la touche ESC marque
la fin de la phase de saisie et déclen-
che l'analyse de I'écran par la rou-
tine, qui comporte les contréles sui-
vants
123
124
126 S7
160
161 A4
162
163
164
165
166
167
168
169
170 AB
171
172
173 AT
174
175
176
177
178
179
180
181 AIL
182
183
184
oP
BEQ
ap
LOA
TAY
STA
STA
ISR
LOA
STA
JSR
BIAZES
R
8
BRESZSASESRSSSRAISESAIASSZARISRSALATASRLAISS
$78!
£$27
$24
ALO
$24
Al
£998
9
£840
All
AAl
£$8D
Al2
£$0C
jREPRISE DU TRAITEMENT DES COMNANDES
j0N COMMENCE EN HAUT DE L’ECRAN
SAUVEGARDE DE L’OCTET SOUS LE CURSEUR
sSAISIE AU CLAVIER
jY=POSITION HORIZONTALE
jX=POSITION VERTICALE
jFLECHE VERS LE HAUT ?
jVERIFIER SI L’ON PEUT "REMONTER*
3 VTAB
SFLECHE VERS LE BAS ?
sVERIFIER SI ON PEUT "DESCENDRE*
jFLECHE VERS LA DROITE ?
sPEUT~ON ALLER A DROITE ?
jFLECHE VERS LA GAUCHE ?
jPEUT-ON ALLER A GAUCHE ?
yes" ?
jOUI —) SORTIE POUR ANALYSE DE L’ECRAN
jPAS D’ECRITURE SUR LES LIBELLES EN INVERSE
jS] "RETURN" --) AFFICHER "¢* (£$0C)
Pom's n° 18
— Vérification de la longueur des
données par rapport aux longueurs
maximales déclarées dans le tableau
adéquat; si une donnée “déborde™,
un crochet en FLASH est affiché 4 sa
suite (il écrase le RETURN) et la rou-
tine reprend une phase de saisie
pour correction.
A noter que tous les espaces compris
entre les caractéres d'une méme
donnée comptent dans sa longueur,
alors que ceux qui se trouvent 4 l’ex-
térieur (entre un RETURN et le pre-
mier octet de la valeur suivante. par
exemple), sont ignorés.
— Pour les données de type numéri-
que, les c res autorisés sont : les
chiffres, ".", "-", "+" et "/". Aucun
espace, ni "souligné”, n'est autorisé
a l'intérieur d'une valeur numérique
Si on trouve un caractére non
conforme, il est écrasé par une "*”
en FLASH et la saisie reprend
— Jamais de données comptant plus
de 255 caractéres; dans le cas
contraire, un “]” en FLASH est affi-
ché a la fin de la donnée trop longue
et la saisie reprend dans les mémes
conditions que ci-dessus.
— Exactement autant de RETURNs
que de variables attendues. ni plus,
ni moins. Sinon, reprise de la saisie,
accompagnée d'un beep
Si tous ces contréles sont satisfaits, la
routine procéde directement a l'affec-
tation des chaines de caractéres au
tableau de variables défini en entrée,
a partir de l'élément d’indice 0. Les
données sont alors utilisables par
toutes instructions Basic ou DOS.
Particularites du
pré-affichage
Lors d'une instruction :]D T$... , la
routine affiche le contenu des varia-
bles de T$ avant de passer 4 la sai-
sie. Pour ce faire, elle cherche & loca-
liser des libellés en partant de la fin
de l'écran (en bas a droite) et s'ar-
réte dés quiclle atteint le début de
lécran ou qu'elle trouve autant de li-
bellés que de données 4 afficher
De ce fait, il convient de placer les
autres textes éventuels en haut
d'écran et de n’afficher ensuite que
des libellés “utiles”
Les données sont restituees dans
Vordre croissant des indices, en re-
gard et la suite des libellés corres-
pondants. Le RETURN final est auto-
matiquement ajouté a la fin des
caractéres.
Si vous n'avez pas mis assez de
textes a l'écran, vous obtiendrez une
SYNTAX ERROR lorsque la routine
tentera d’afficher les valeurs.
La saisie est identique pour :|S
et ]D. Pour cette derniére, toutefois,
il peut étre bon d’entrer les nouvelles
valeurs “sur” les anciennes, en les
écrasant, plutét que de les mettre
dans une partie vierye de l'écran, et
ce afin de ne pas laisser a l'affichage
plus de données qu'il n’en faut
Pom's n° 18
227 £3
231
232
233
234
236
237
238
240
241
242
243
244
245
246
BISSIERSAZEIESRSTSZSS
3
($28),Y
AA2
£940
Al3
AAl
£$A2
PAI2
£$BA
AAl2
£388
AAl2
£SAC
fALL
£SAE
AAlL
%7
$1D
$8
$i1E
$25
‘$FBC1
£0
($28) ,Y
£940
13
£900
E2
£SFF
—2
£400
BO
£$0F
B01
$18
jAFFICHE LE CARACTERE SAISI
iPAS DE CARACTERES DE CONTROLE
PAS DE *
jPAS DE
iPAS DE 5
SRENPLACE LES VIRGULES PAR DES POINTS
jANALYSE DE L’ECRAN
jRECOPIE DE TOUS LES PARAMETRES
iDANS DES ZONES DE TRAVAIL
sMENORISE LE TYPE DE LA PREMIERE DONNEE
SNONBRE DE DONNEES TROUJEES SUR L’ECRAN
sCONTROLERA L’USAGE DES ESPACES
jCONTROLERA L’USAGE DES *_*
jLES CARACTERES INVERSE NE SONT PAS DES DONNEES
s"RETURN” A L’ECRAN ?
3255 CARACTERES DEJA LUS POUR UNE NENE DONNEE ?
jTESPACE® ?
oem
i"?
jTYPE ALPHANLMERIQUE --) OK
sACCEPTE LE +
15
16
Par ailleurs, si vous souhaitez inciter
a une saisie initiale en regard des li-
bellés et non en continu, vous pou
vez initialiser votre tableau de varia-
bles en ne lui affectant que des
chaines vides et utiliser une instruc-
tion :]D plutét que .JS. Le pré-affi-
chage de tous les RETUKNs juste
aprés les libellés correspondants
constituera une contrainte de posi-
tionnement pour I utilisateur.
Mode d’emploi
ll convient de placer les instructions
suivantes en téte de votre pro-
gramme Basic d'exploitation
* BLOAD IPE2: chargement de la
routine de saisie en $9000.
© BLOAD INTER: mise en place
dans CHRGET ($B1) d'un aiguil-
lage sur notre routine IPE2, afin
de détecter les "]” d'identification
éventuels dans le programme Ap-
plesoft. Ce second BLOAD ne
doit jamais venir avant celui de
IPE2, sous peine de résultats im-
prévisibles. .
Pour revenir au Basic standard, il
suffit de charger par un BLOAD le
petit fichier baptisé CHRGET.
Telle qu'elle vous est présentée ici,
cette routine de saisie d'écran est
susceptible de nombreux perfection-
nements. On peut songer, par exem
ple, & un alignement automatique sur
le libellé suivant lors de la frappe
d'un RETURN, ou a une adaptation
pour carte 80 colonnes, a l'emploi de
touches de fonction pour détruire ou
insérer des caractéres... Si le sujet
vous intéresse, 4 vous de jouer.
INTER
*BA.BD
OOBA- 4C 00 90
CHRGET
*BA.BE
OOBA- C9 3A BO 0A
IPE2
#9000.93D5
9000- C? SO FO 08 CF 3A 90 01
9008- 60 4C BE 00 A 00 BS 25
7010- 20 Cl FB AO 00 B1 28 CF
9018- AO FO OC CP OF FO 08 C9
9020- 40 90 04 29 3F 91 28 CA
9028- CO 28 DO E9 ES 25 AS 25
9030- CP 18 DO DC 20 BI 00 CF
7038- 53 FO 0A C? 44 FO 06 20
9040- 99 F3 4C CY DE BD 06 20
9048- BI 00 20 D9 F7 AS 9B 85
247 E011
248
249
250
251 £010
292
253 E01
254
255 80
273
274
275
276 E2
a7
278
249
281
282 EN!
284 ES
286 E50
287
288
290 £6
2
292
293
294
295
296
297
298 E40
300
301
302
303
304
305 E61
306
307
SRSESRSRSRR SES ISS SSR RSSSISRIESARETRIZSSSRSHSSSRSRLESHRSEAE
5
Fd
388
£86a
($28),
$FBDD
$7
(se
F011
$18
B
$18
fH
SFF
F011
SIF
$F9
£2
49
E61
$FB
$FB
;RIEN EN DESSOUS DU *-*
jERREUR DE TYPE —-) AFFICHE UNE * EN FLASH
yBEEP |
JREPREND LA SAISTE AU DEBUT
jAU DESSUS DE ":* --) ERREUR DE TYPE
j0N NE PREND PAS LES "ESPACES" HORS DES DONNEES
iPAS D’ESPACE A L’INTERIEUR DES NONBRES
j0N NE PREND PAS LES "_" HORS DES DONNEES
jPAS DE *_* DANS LES NONBRES
jSTOCKE LE CARACTERE DANS LE BUFFER DE DONNEES
jPASSAGE AU CARACTERE SUIVANT SUR L’ECRAN
jL’ANALYSE DE L’ECRAN EST TERNINEE...
j$1B-$1C DOIT TOUJOURS ETRE INFERIEUR
jA $19-41A PUISQUE L’ON COMPTE LES
jDONNEES A L’ECRAN A PARTIR DE 0
3PLUS DE DONNEES QUE DE VARIABLES --) ERREUR
jDONNEE TROP LONGUE --) AFFICHE UN § EN FLASH
jET REPREND LA SAISIE
;SAUVEGARDE LA VALEUR DE Y
jCONTROLE "LONGUEUR* LUE PAR RAPPORT
5A *LONGUEUR MAXI" POUR LA DONNEE
jSIGNALE LE DEPASSENENT ET REPREND LA SAISIE
iPASSE A LA LONGUEUR DE LA DONNEE SUIVANTE
jPASSE AU TYPE DE LA DONNEE SUIVANTE
Pom’s n° 18
9050-
705s-
9060-
9068-
9070-
9078-
9080-
7o8s-
90970-
9098-
90A0-
90a8-
9080-
90B8-
90C0-
yoce-
9000-
90D8-
90E0-
90E8-
90FO-
9oFs—
y100-
9108-
9110-
9118
9120-
9128-
9130-
7138-
9140-
7148-
9150-
9158-
9160-
9168-
7170-
9178-
7180-
9188-
9190-
91 98-
91A0-
?1Ag-
9180-
91B8-
91CO-
91ca-
91D0-
91D8—
F1E0-
PLES
91FO-
9iFa-
9200-
9208-
y210-
9218-
9220-
9228-
9230-
9236-
9240-
9248-
9250-
9258-
9240-
9268-
9270-
9278-
9280-
9298-
9290-
9298-
92A0~
92A8-
9280~
9288-
92C0-
92c8-
9200-
9208-
92E0-
92E8-
92F0-
92Fa-
9300-
9308-
9310-
Pom’s n° 18
07
cs
as
As
02
25
83
As
FB
as
—9
FF
E7
F9
69
a1
10
a5
oF
A2
7F
ca
1c
18
6?
4c
03
bo
1B
25
ce
AS
AS
DO
do
ee
ce
08
ar
ce
09
310
311 £62
312
313
314
315
316
317
318
319
320
321
323 £8
324
326
327
328
331 £9
332
335
337
339 £7
341
342 E10
343
345
346
347
348
349
350
351
352
354 £100
355 CO
356
358 (2
359 C1
361
362
363 SD
364
365
366
347
368
369 SDS
370
BCC
INC
LOA
STA
STA
STA
SEC
LDA
STA
DEC
INY
LDA
STA
INY
STA
Loy
LOA
STA
INX
INC
INC
uy
LDA
STA
STA
cue
STA
INC
aP
LOA
OP
BEQ
MP
LOA
BNE
MP
LOA
STA
STA
STA
LOA
STA
SR
uy
£42
$FC
(SFB), Y
StF
$6
($10),Y
£7
SOF
($10),
$F
£8
$70
$6F
($10),Y
$70
($1D),Y
£0
£0
$200,X
{87F
(S6F),Y
$6
£7
&9
$18
E10
sic
$iF
£0
£400
$18
£$0F
SFE
$10
£3
$1D
£100
$iE
E
$iC
$A
C1
Ell
$1B
$19
C2
$87
£0
$1B
sic
$6
£$17
$2
SFBC:
£$27
sSTOCKE LE TYPE
jSAUVEGARDE LONGUEUR REELLE
STOCKE DANS LA ZONE DES TABLEAUX
jLONGUEUR = 0 --) PAS DE "CHAINE* A STOCKER
iMISE A JOUR DU POINTEUR DE FIN DE LA ZONE
jDE STOCKAGE DES CHAINES DE CARACTERES
sSTOCKE L’ADRESSE DE LA CHAINE AU NIVEAU DE
jL’ INDICE CONCERNE DANS LA ZONE DES TABLEAUX
j TRANSFERT DE LA CHAINE DANS LA ZONE DE
jSTOCKAGE APRES REMISE EN ASCII POSITIF
jMISE A JOUR DU NOMBRE DE DONNEES LUES
jRENISE A LA VALEUR INITIALE DES PARANETRES
jADRESSE DE L’ELEMENT SUIVANT DU TABLEAU
38”IL EN RESTE A SAISIR
jPASSAGE AU CARACTERE SUIVANT SUR L’ECRAN
yA CE NIVEAU, LE CONPTEUR DE VALEURS LUES
JEST MAJORE DE 1 ET DOIT DONC ETRE EGAL
jAU NOMBRE DE DONNEES ATTENDUES
jREND LA MAIN AU BASIC
jREPRISE POUR AFFICHAGE ET SAISIE D’UN TABLEAU
jRECHERCHE DES LIBELLES A PARTIR
jDU BAS DE L’ECRAN
18
9318- E6 25 84 24 AY OO BS 18
9320- 85 1C AS 07 85 1D AS 08
9328- 85 1E£ AQ 00 A2 00 BI 1D
9330- 85 04 FO 18 C@ Bl 1D 85
9338- CE C8 B1 1D BS CF AO 00
9340- 81 CE 09 80 9D 00 02 ES
9348- E4 06 FO 03 CB 00 Fl AP
¥350- DC ¥O 00 02 ES 06 AZ 00
9358- AS 25 20 Cl FB AG 24 BI
93460- 28 CP 40 90 1E BD 00 02
9348- 91 28 ES E4 04 FO 2A CB
9370- CO 28 DO Fi ES 25 AS 25
9379- CP 18 FO 14 20 C1 FB AO
9380- 00 FO E2 C8 CO 28 00 07
9388- E6 25 AD 25 CF 18 DU O3
9390- 4C 3F 90 AD 00 84 24 FO
9398- Cl Eé 18 DO 02 Eé IC AS
93a0- 1C CS 1A DO O09 AS 18 CS
92A8- 19 DO 03 4C EP 90 CB CO
9380- 28 D0 0D Ed 25 AS 25 CP
9388- 18 FO 0S 20 Ci FB AO 00
y3C0- B1 28 C7 40 BO EB 84 24
93C8- AS 1D 69 03 85 1D 90 02
9300- E46 1E 4C 2A 93
Un bug du Filer de ProDOS 1.0
Si l'on formate (Volume Commands,
F) une disquette dont le nom
comporte des minuscules, la
disquette ne sera pas formatée
correctement.
ra beau CAT ne fonctionne pas
peat ramandes di le
‘Ss,
Be allocation, R)ename a
volume..., entrainent un "VOLUME
NOT FOUND” tandis que Lyist
seine: indique l'existence de ce
Conclusion. puisque le Filer ne
met pas automatiquement le nom de
la disquette en majuscules, faites-le
vous-méme !
371 SD4
372
373
374
375
376
377
378
379
413
414 $D21
415
416
417
418
419
Lox
(810),Y
$6
p80
($10),Y
sce
($10),Y
scr
£0
(SCE),Y
£980
$200,X
46
$080
jLAISSE LES ESPACES ET LES *_"
jDRAPEAU POUR SAVOIR SI LON EST DANS UN MEME
jLIBELLE OU ST L’ON EN COMMENCE LN NOUVEAU
QUAND ON RETROUVE UN ESPACE OU UN *_* APRES
sANALYSE D’UN LIBELLE EN INVERSE, IL Y AURA
jUNE DONNEE A METTRE EN REGARD DE CE LIBELLE
j0N DOIT LOCALISER AUTANT DE LIBELLES QUE
jDE DONNEES A AFFICHER
jPOURSUITE DE L’ANALYSE DE L’ECRAN
sDEPART DE L’AFFICHAGE DES DONNEES
jRECUPERE LA LONGUEUR DE LA CHAINE
jLONGUEUR = 0 --) PAS DE CHAINE A AFFICHER
jRECUPERE L’ADRESSE DE LA CHAINE
j TRANSFERT DE LA CHAINE DANS LE BUFFER
sAPRES RENISE EN ASCII] NEGATIF
Pom's n° 18
433
434 SD80
435
434
437 S08
438
439 SD15
440
441 S013
442
443
444 SD12
445
446
447
448
449
450
451
452
453
44
455
436
457
458
459 S010
460
461
462
463
464
465
444 SD16
467 SD14
468
469
470 S011
471
472
473 S017
474
475
476
477
478
479
480 SDI8
481
486
487
488
489 SDI?
490
491
492
493,
494
Pom’s n° 18
TINY
BEXESESERSESRISSARZERSESASRIGTARESAS
#s0¢
$200,X
$6
£0
$FBCI
$24
($28),Y
£$40
sp10
$200,X
($28),Y
86
£0
$24
SD15
$18
$017
siC
$iC
sia
$018
1B
$19
9018
$7
£828
$019
$25
$25
£918
$016
‘$FBC1
£0
($28),Y
£340
$018
$24
$10
£3
jPLACE UN "PSEUDO RETURN" EN FIN DE DONNEE
jPROTEGE LES DONNEES EN INVERSE
jRECOPIE LA CHAINE SUR L’ECRAN
jCHAINE TERMINEE ?
sPASSAGE A POSITION SUIVANTE SUR L’ECRAN
j0N NE DEVRAIT JANAIS TOUCHER LA FIN DE L’ECRAN
sSUITE DE L’AFFICHAGE
jSAUTE LES “INVERSE* AVANT DE COMMENCER
yA AFFICHER LA CHAINE
sFIN DE L’ECRAN SANS FIN D’AFFICHAGE --) ERREUR
jMISE A JOUR DU NOMBRE DE CHAINES AFFICHEES
sTOUTES LES CHAINES NE SONT PAS ENCORE AFFICHEES
j1DEN
jSINON --) REPREND UNE SAISIE
30N VEUT PASSER A LA POSITION SUIVANTE A L’ECRAN
jJANAIS LE BAS DE L’ECRAN NE DOIT ETRE ATTEINT
jIL FAUT RELOCALISER LE LIBELLE SUIVANT
jPASSE A L’INDICE SUIVANT DANS LE TABLEAU
19
43 STA $1D
496 BCC S020
497 INC $1E
498 $020 wP S021 REPRISE DE LA PROCEDURE D‘AFFICHAGE
"DON.1. PRINT : PRINT "DON.2.:"
TEST.IPE2 SPC( 15)*DON.3.:"
1 HIMEM: 9 * 4096 - 1 45 FOR I = 4 TO 9: PRINT : HTAB 10: PRIN
S DS = CHRS (4): PRINT D$*BLOAD IPE2*: P T *DON.*1".:*° LEFTS (POS$,LIZC(I)):
RINT D$"*BLOAD INTER NEXT : RETURN
10 TEXT : HOME SO HOME :2% = “ECRAN 2°: HTAB 20 - LEN
15 Pos = ° (Z$) / 2: PRINT Z$: FOR I = 0 TO 5
: PRINT : PRINT "DONNEE.*I*.:* LEF
aa TS (POS,L2%(1)): NEXT : RETURN
20 DIM D1$¢9),L1%¢ 9), T1%( 979: FOR IT = 0 T 60 HOME : PRINT "ECRAN 2 MODIFIE":
O 9: READ Li%(1),TIX%C1): NEXT FOR I = 0 TO S: PRINT +: HTAB 10: P
22 DATA 10,0,5,1,20,0,2,1,2,1,5,0,10,0, RINT “DONNEE.*I*.:* LEFT (PO$,L2%
4,1,6,1,30,0 €1)): NEXT : RETURN
25 DIM 02$(5),L2%4(5) ,T24(5): FOR I = 0 T 100 GOSUB 30:§SD1¢,L1%,T1%: GOSUB 30:5DD
O 5S: READ L2%(1),T2%¢1): NEXT : DA 1%,L1%,T1%: GOSUB 40:$0D1$,L1%,T1%
TA 10,0,6,1,6,1,20,0,1,1,6,0 : GOSUB 50:8SD2$,L2%,T2%: GOSUB 60
27 GOTO 100 2§DD2$ ,L2%,T2%
30 HOME :2$ = "ECRAN NO 1": HTAB 20 - L 110 HOME =: FOR I = 0 TO 9: PRINT DIS<I);
EN (2%) 7 2: PRINT Z$: PRINT NEXT : PRINT : FOR I = 0 TO S: PR
33 FOR I = 0 TO 9: PRINT : PRINT "DONNEE INT D2¢¢I): NEXT : GET 2¢
"IT" .C*TIXZCID*) 22" LEFTS (POS,LIX¢ 120 FOR I = 0 TO 9:Di$<I> = **: NEXT : F
I>): NEXT OR I = 0 TO 5:D2$¢(1) = "*: NEXT
35 RETURN 130 GOSUB 30:SDD1$,L1%,T1%: GOSUB 50:8DD
40 HOME :2$ = “ECRAN 1 MODIFIE": HTAB 20 23,L2%,T2%: HOME : FOR I = 0 TO 9:
— LEN (2%) 7 2: PRINT 2%: PRINT PRINT D1$(I): NEXT : PRINT : FOR
: PRINT : PRINT "DON.O.:" SPCC 15) I = 0 TO S: PRINT 02$¢1): NEXT
Le porte-parole Olivier Hee
Ediciel (Matra & Hachette) nous pro-
pose un synthétiseur de parole qui
parle frangais, sous forme d'une carte
{a brancher dans un slot, le 4 de pré-
férence) et d'une disquette.
La carte
Elle comporte
—_Un chip synthétiseur de parole
MEA 8000 permettant la synthése de
parole et la génération de sons musi-
caux.
— Un amplificateur basse fréquence
pour amplifier le signal vers un haut-
parleur.
— Des emplacements libres pour re-
cevoir des RAMs ou des PROMs, et
les décodeurs pour y acceder.
— Une sortie vers le haut-parleur de
VApple, que l'on doit alors débran-
cher de la carte mere (ce n'est pas
trés commode sur un Il+ !)
Inconvénients ; le haut-parleur est
déconnecté pour les usages classi-
ques. mais fait du bruit 4 cause de
parasites électriques quand les drives
tourent ! On aurait aime une possi-
bilité de ‘switcher’ sans avoir 4 ouvrir
le capot et rebrancher les fils
— Une sortie vers un_haut-parleur
externe, de type prise de chaine
Fi, que l'on peut relier 4 un amplifi-
cateur. J'aurais préfére une petite
prise ‘jack’ pour relier 8 un magnéto-
phone, mais c'est personnel (mon
Apple est 4 2 metres de ma chaine,
a vol d’oiseau).
Le logiciel de synthése
de texte
Premiere face de la disquette
Malgré de nombreux défauts ergono-
miques (par exemple, pas d’éditeur
de lignes des phrases entrées), ce
programme est un magnifique bébé
né de l'union du hardware et du
software
Il permet de créer des fichiers de
messages parlés, que I’on peut inte-
grer A des programmes Basic ou as-
sembleur, voire au célébre EDI-
LOGO.
Les deux grandes possibilités sont
— Lédition en frangais: on rentre
une phrase (avec des codes spéciaux
pour les accents...), le programme la
traduit en phonémes et peut la pro-
noncer,
Et cela marche ! En francais intelligi
ble et agréable. On peut méme met-
tre un point d'interrogation. et |'into-
nation changera. De plus, on peut
indiquer les groupes verbaux et no-
minaux avec des marqueurs spé-
20
ciaux, de fagon a se rapprocher
d'une élocution naturelle.
Toutefois, ce programme n'a pas la
science infuse et commet des erreurs.
Que pensez-vous des phrases "Les
poules du couvent couvent” et
“Nous portions nos portions” ?.
C'est pourquoi on peut aussi édi-
ter en phoneétque, en indiquant les
phonémes. Pour des raisons scientifi-
ques, la solution employée ici pour
reconstituer la parole est celle rete-
nue par le CNET, qui part des cou-
ples de phonemes successifs,
C'est tellement bon que je I'ai fait
parler en anglais, en allemand et .
en japonais. Son accent francais est
tout simplement délicieux ("Maile
teil'lor iz ritch")
Mise au point graphique
Deuxiéme face de la disquette
Ce programme permet de créer des
notes de musiques et des effets spé-
ciaux sonores en faisant varier l'am-
plitude du signal, la fréquence et la
largeur des bandes et en visualisant
le tout. Il peut créer ses propres fi-
chiers de bruits ou bien modifier des
messages créés par le synthétiseur de
parole
a
Pom's n° 18
sii aac
CX MacBase
¢ Logiciel Professionnel
intégré sur Macintosh
Puissant et simple
comme... Macintosh
CX MacBase est un
logiciel intégré
d'un genre tout a fait
nouveau. Vous passez
d'une application a
une autre, d'un
document a un autre
avec une surprenante
facilité ; par exemple,
pour réaliser
automatiquement un
Feenig a partird’un
ichier, éditer du
courrier personnalisé,
créer des relations ou des échanges
entre fichiers.
CX MacBase regroupe graphiques,
gestion de fichiers, calculs,
traitement de textes, édition
automatisée de lettres, d’états et
détiquettes...
Tout cela, en un seul programme
puissant et simple comme...
Macintosh.
Branchez CX MacBase le matin, il
vous accompagnera
jusqu’au soir !
‘Apive Compute inc et tencié de a marque Macintosh
Cx'Macitase et une marque deposte de Conble X
Ensemble et une marque deposte de Contrdle X
Il change tout
sans tout bouleverser
Chaque jour, vous créez, échangez,
transmettez des documents. Chaque
jour, CX MacBase travaille
directement sur les documents
professionnels qu'il vous a permis
de créer et diillustrer : imprimés,
formulaires, rapports d’activités,
devis, mémos, etc... Et vous
retrouvez sur Macintosh votre cadre
naturel de travail. Vous savez tout
de suite calculer, classer, retrouver,
sélectionner, trier, imprimer,
mixer a volonté.
HE Controle X
Les logiciels a tout imaginer
Tour Maine - Montparnasse - 33, avenue du Maine,
75755 Paris Cedex 15 - Tél. : (1) $3898.87
Donnez du tonus
a vos documents
Communiquez avec
votre entourage et
valorisez vos perfor-
mances profession-
nelles en envoyant
de superbes états
récapitulatifs
extraits de vos
fichiers ; toutes
sortes de docu- CN
ments ot cohabi- Ss
tent votre logo, des dessins, >
tableaux, graphiques, textes,
encadrés, etc... CX MacBase est a
Vaise dans tous les milieux profes-
sionnels et vous permetde
développer vos propres applications.
CX MacBase répond vraiment a
toutes les promesses de Macintosh !
Renseignez-vous vite auprés d'un
revendeur agréé ou adressez-nous
votre carte de visite pour recevoir
une documentation.
aa
VERSION SOFT, LES FRUITS
L’e
LOUTIL INDISPENSABLE DU DEVELOPPEUR.
Premier assembleur éditeur pleine page,
pour APPLE Ile et APPLE Ic.
Si vous avez la programmation dans
la peau, initiés ou débutants, Procode est
le logiciel qu’il vous faut.
Il vous permet de développer en un temps
record grace a ses fonctions d’éditeur
pleine page 80 colonnes.
Etudié pour ProDOS 64 k ou 128 k,
Procode peut assembler sans accés
disque jusqu’a 3 sources en mémoire.
Normal, on travaille entre Pros!
142 — SOFT & MICRO — Mai 85
ition frangaise
LE PLAISIR DE LA GESTION.
Gestionnaire de talent pour le plaisir
de rentrer dans ses comptes.
\
Budget Familial vous
en donne pour votre
argent!
Il vous permet d’enre- —
gistrer tous les mouve-
ments de votre compte
er
bancaire et d’avoir l’ceil sur vos
dépenses. aN be
Avec lui, plus de problémes de
gestion, vous étes sdrd’y trouver
votre compte.
Méme en ignorant tout de la
estion, vous pouvez trés vite devenir
un super gestionnaire.
Avec le plaisir en plus...
LES LOGICIELS VERSION SOFT UTILISENT LE SYSTEME D'EXPLOITATION PRODOS
LES MENUS DEROULANTS PERMETTENT D'ACCEDER DIRECTEMENT AUX DIFFERENTES FONCTIONS.
D'UNE PASSION
de logiciels
| EPISTOLE
UECRITURE SOURIS.
Best-seller incontesté
du traitement de texte francais.
Partagez le plaisir
d’écrire avec Epistole.
Modeéle de simplicité et
de puissance, ce logiciel
est outil idéal pour tous
Vos traitements de texte
frangais.
En un clin d’ceil, Epistole
rédige toutes vos lettres, vos
rapports et vos mailings — avec
le souci en moins.
Vous voulez effacer un mot, changer
une phrase, déplacer un paragraphe?
Rien de plus simple, l’écriture
| souris vous laisse les mains libres!
. pistole vous offre l’écriture facile.
A vous Pimagination!
_ aS
\
oe
eo
VERSION CALC
LE CALCUL SOURIS.
Premier tableur graphique
multi-fonctions utilisant la souris.
Voici enfin le logiciel
adapté a toute votre
gestion quotidienne. II
suffit d’une simple
pression du doigt avec la
souris pour comprendre que
toutes vos opérations de prévisions, os
\
de synthéses ou d’analyses, 32
deviennent alors un jeu
d’enfant.
Vous souhaitez une représen- h
tation graphique? Facile! Ouvrez Re
une fenétre, cliquez et faites le plein oS
images.
De mémoire de logiciel, on n’avait encore
jamais vu une telle facilité alliant puissance
et rapidité.
v
o
19, RUE GANNERON 75018 PARIS
DEMONSTRATION ET VENTE CHEZ VOTRE CONCESSIONNAIRE AGREE APPLE.
Mai 85 — SOFT & MICRO — 143
Gestion de fenétres texte
Georges Zwingelstein
La mode étant au Macintosh, sa
souris et ses fenétres, je n'ai pu
m’empécher de succomber a la ten-
tation de donner une de ces particu-
larités 4 'Apple Il: les fenétres. J'ai
choisi de gérer les fenétres en écran
texte plutét qu’en haute résolution,
car elles ont l'avantage d’occuper
moins de place mémoire, d’avoir un
temps de réponse acceptable. de ne
pas nécessiter une gestion de curseur
particuliére, et surtout parce qu’elles
servent. le plus souvent. a afficher
des menus sur le Macintosh.
Ce programme permet a l'aide de
Tampersand (&) de créer. d’ouvrir,
de fermer et d’échanger a volonté
des fenétres, pouvant se superposer
les unes aux autres. sans perte d’in-
formations.
Les commandes
Les principales commandes concer-
nent:
- la création
- Fouverture
- la fermeture
- léchange.
La création
La syntaxe est la suivante :
& C_NF.MD,MG,MH,MB,CH (C
pour Créer)
avec les conventions suivantes
© NF représente le numéro de la fe-
nétre (compris entre 1 et 127).
MD definit la marge droite.
MG définit la marge gauche
MH délimite la marge haut.
MB délimite la marge bas.
CH est le code écran (optionnel)
du caractére délimitant les bords
de la fenétre, les marges étant
données par rapport a ceux-ci
Pour obtenir. par exemple. une fené-
tre remplissant tout I’écran, il suffit de
donner l'ordre
& C1.1.40,1.24 (en 40 colonnes)
& C1,1,80,1,24 (en 80 colonnes)
Ce logiciel fonctionne également en
80 colonnes sur Apple //e. Quelques
remarques sont néanmoins nécessai-
res sur une utilisation en 80 colon-
nes, les commandes d’ouverture et
de fermeture de fenétre utilisant les
adresses | standard . pour la protéger
($20-$23 ou 32 a 35 en décimal)
- les colonnes étant numérotées de 1
4 80, on ne peut protéger une fene-
tre qu’entre une colonne impaire (a
gauche) et une colonne paire (a
droite)
- la marge gauche est donc arrondie
au premier nombre impair inférieur
- la marge droite est, de la méme
facon, arrondie au premier nombre
pair supérieur
Par exemple, pour une fenétre sur
les deux colonnes 65 et 66, les
commandes suivantes sont équiva-
lentes :
&C1,65,65..
L’ouverture
& O NF (O comme Ouvrir)
ou NF représente le numéro de la fe-
nétre que l'on désire ouvrir. C'est
tout.
La fermeture
La commande de fermerture est en-
core plus simple, puisqu’on ne peut
fermer que la fenétre se trouvant au-
dessus de toutes les autres
& F (F comme Fermer)
L’échange
Enfin, la commande permettant de
faire passer une fenétre au-dessus de
toutes les autres est légérement plus
compliquée, le numéro NN de la fe-
nétre & remonter ne pouvant étre
connu de !’ordinateur :
& E NF (E comme Echanger)
Attention : afin d’améliorer notable-
ment la rapidité du transfert, cette
commande crée dans le sens décrois-
sant, 4 partir de lTadresse $2FF
(c'est-4-dire sur un morceau du buf-
fer d’entrée), une table des adresses
des fenétres concernées par le trans-
fert; il y a donc risque de recouvre
ment dune commande préalable-
ment entrée au clavier, si celle-ci fait
sensiblement plus de 255 — 2 «
(nombre d'adresses) caractéres.
Dois-je vous rappeler, au passage, la
commande qu'il ne faut pas oublier
sous peine de perdre votre sang
froid ? L’initialisation. II s'agit de
& I (I comme ???)
Cette commande est automatique-
ment réalisée lorsqu’on lance le pro-
gramme: elle identifie le type de
lApple, ainsi que l'activité d'une
éventuelle carte 80 colonnes sur
Apple //e, crée une pseudo fenétre
de numéro 0 juste sous le début du
programme. puis efface les variables
(CLEAR) et enfin positionne HIMEM
sous la premiere fenétre.
Le positionnement
&P F.MG,MH (P comme Position-
ner)
permet de déplacer une fenétre; ce
qui autorisera une mise en place plus
facile des différentes fenétres utilisées
dans un programme. NF est comme
4 I'habitude le numéro de la fenétre,
MG et MH les nouvelles marges gau-
che et haut de la future position de
cette méme feneétre.
24
Attention: comme pour |’échange,
une table est créée dans le buffer
dentrée.
J'ai d’autre part activé, pour vous
soulager, la touche de tabulation,
celle de l'Applesoft ne fonctionnant
pas correctement en 80 colonnes, et
Jai également repris, en la modifant
un peu, la routine de menu proposée
par Denis Sureau dans l'article “La
programmation facilitée” du Pom’s 5.
Ces commandes travaillent a |'inté-
tieur de la fenétre, quelle que soit la
position de celle-ci. Par exemple,
pour positionner le curseur sur la
premiere ligne et la premiere colonne
de la fenétre, on utilisera -
& VTAB 1:& HTAB 1
Ces commandes ne seront pas tou-
jours nécessaires, le programme se
chargeant de mémoriser et de rappe-
ler la position du curseur, lorsque
celui-ci change de fenétre
Pour appeler la routine de menu, la
commande sera :
& LET NV.VT,LN,NI(IL)
avec les conventions suivantes :
© NV = nom d'une variable
© VT = tabulation verticale dans la
fenétre
@ LN = longueur de la barre en in-
verse
@ NI = nombre d’items
¢ IL = interligne (optionnelle, l'inter-
ligne initiale étant de 1).
La routine vérifie d'abord que I’en-
semble du menu rentre 4 'intérieur
de la fenétre, utilise non plus des
chiffres mais des lettres a partir de
“A” pour la sélection, ce qui autorise
un nombre d'items compris entre 1
et 26 et tient compte des fleches ver-
ticales de l’'Apple //e. De plus. la
barre de sélection n’inverse que les
caractéres inversables.
J'ai enfin transformé un sous-pro-
gramme qui me permettait de dépla-
cer HIMEM pour créer une fenétre
sans perdre les variables chaines, en
une commande -
& HIMEM : NNNN
ou NNNN représente la nouvelle va-
leur non pas de HIMEM, mais du
début de la zone libre entre les fené-
tres et le programme, vous permet-
tant d’y charger vos propres routines
(le début du programme se trouve
en $8A00 ou 35328 en decimal).
Déesirant, de plus, pouvoir récupérer
la place d'une fenétre devenue inu-
tile, il m’a été nécessaire de rajouter
la commande :
&D NF (D comme Détruire)
avec laquelle on peut détruire la fe-
nétre de numéro NF 4 condition que
celle-ci soit fermée, ce qui est évident
si elle est devenue inutile.
Enfin, comme il est beaucoup plus
agréable, dans un programme Basic,
de n'avoir qu’a charger une fenétre
préalablement créée et sauvée sur
Pom's n° 18
Symptomes.
OU NON OUL NON
1. Je veux connaitre PRODOS sans étre un pro 5. Pianoter des nuits entiéres, c'est planant. Mais
du DOS O planer tout seul, c'est frustrant
2. Ami des bétes, je cherche un chat 4 puces pour
colorier ma souris en mauve
3. Devenir a l'aise comme Blaise en Pa
oo ° Je veux relier mon lave-vaisselle a mon Apple Il. [17]
-quelpied! OO 7 Appeler un $.0.S. informatique quand
~ la technique coince, ca dépanne O00
4. Mon baud a7 bits cherche un 8 pour completer 4 sess
son protocole X-On X-Off en vue d'une liaison 8. Je veux apprendre a mieux gérer mon bureau
durable OW en le jetant par les fenétres de Macintosh
JI. ct MOINS : vous étes en pleine 4.8 7 OUL: vous étes cont:
on, prenez des mesures serez bien entoure au Club Apple
wis 8.2 10 OUL bravo, venez d'urgence cultiver
assion au Club Apple
Remeéde : REJOIGNEZ LE CLUB APPLE
Plein, plein d'avantages vous y attendent
une messagerie électronique gratuite ; des stages d’initiation et de perfectionnement animés
- un numéro de téléphone pour consulter les ingénieurs pat les “gourous” du Club;
Apple 7 jours sur 7 - des voyages organisés en Californie ;
\ \ du Club une librairie spéciale Club
: in ae ay e journal dur Clu un Apple Check pour bénéficier de conditions de
LEicho des Apple; ; crédit préférentielles ;
- des conférences, réunions d'information, projections - des rencontres organisées avec d'autres
privées et rencontres avec des “pros” ; Applemaniaques.
BULLETIN-REPONSE
Je desire receoit, sans engagement de ma part, une documentation compléte sur le Cl Apple et votre formulaire dnscription,
NOM
ADRFSSF
— CODE POSTAL
Pom's n° 18
Applemania
25
disquette, on disposera des quatre
commandes suivantes :
&SAVE “NOM".F1
pour sauver la fenétre numéro Fl a
la suite de celles précédemment sau-
vées dans un fichier d'un type nou-
veau. Celui-ci apparait comme hbi-
naire dans le catalogue.
&LOAD "NOM" F1.N1
pour charger la N1 iéme fenétre du
fichier en lui donnant le numéro F1.
&STORE "NOM",F1,N1
pour sauver les marges et le contenu
de la fenétre F1 A la place de la N1
iéme fenétre du fichier (il faut que les
dimensions soient identiques)
&RECALL "NOM”.N1,F1
pour effectuer la réciproque de
&STORE sans rappeler les marges;
"NOM" représente une chaine de
caractéres contenant le nom du fi-
chier, dans lequel on ne peut sauve-
garder plus de 127 fenétres (ce qui
est largement suffisant dans la plu-
part des cas, surtout qu'il n'est pas
possible d’avoir un catalogue des fe-
nétres), accompagné si nécessaire
des numéros de drive et de slot sui-
vant la syntaxe du DOS.
Pour SAVE et LOAD
© si Nl mest pas précisé, il est pris
égal a F1
© si ni Fl, ni N1 sont donnés, alors
le programme charge toutes les fe-
nétres en leur donnant un numéro
croissant (sauve toutes les fenétres
Par numéro croissant 4 la suite du
fichier)
Pour STORE et RECALL :
© les valeurs par défaut de F1 et N1
sont
N1 = Fl si N1 n'est pas donné, et
Nl = Fl = 1 si Fl et Ni sont
inexistants.
Remarques
Chaque fois qu'une fenétre est creee
ou chargée. la routine FRE(() est ap-
pelée. Les commandes de gestion de
fichiers de fenétres ne vérifient pas la
fermeture de la fenétre. Il sera donc
possible, par exemple, de fusionner
des fenétres ou de récupérer un mor-
ceau d'une fenétre en ouvrant la
nouvelle par dessus puis en la sau-
vant avant de la fermer.
Il est possible de faire ressortir les fi-
chiers de fenétres en POKant dans la
table des caractéres des types de fi-
chiers. le code voulu 4 l'affichage du
catalogue, par exemple
POKE 45998, 198 pour leur ddnner
le type “F™.
Tous les paramétres peuvent étre
donnés sous forme d'expression. le
programme utilise les routines d'éva-
luation de nombre ou chaine de ca-
ractéres de I’ Applesoft.
Les messages d’erreur
Les messages d’erreur utilisés ont ete
détournés de leurs significations origi-
nelles.
— OUT OF MEMORY indique que la
place nécessaire a la création d'une
fenétre est insuffisante ou que le dé-
placement de HIMEM entrainerait un
recouvrement soit des variables, soit
du programme de gestion des fené-
tres.
— UNDEF'D STATEMENT signale
une opération sur une fenétre inexis-
tante.
— REDIM’D ARRAY souligne le fait
que l'on veut créer ou charger une
fenétre dont le numéro a déja ete at-
tribué.
— OVERFLOW indique une opéra-
tion entrainant un dépassement de
capacité (ouvrir une fenétre déja ou-
verte, en fermer une quand il n’y en
a_plus 4 fermer, ou RECALL ou
STORE sur des fenétres qui n'ont
pas les mémes dimensions)
— ILLEGAL QUANTITY sert pour
toutes les valeurs interdites : mauvai-
ses marges, mauvais numéro de fe-
nétre, valeurs impossibles d'un ou
des paramétres du menu, destruction
d'une fenétre ouverte...
Enfin, deux messages du DOS utili-
sés par le programme ;
— OUT OF DATA signale que le fi-
chier a moins de N fenétres, si l'on
veut accéder 4 la N ieme fenétre
— DISK FULL indique soit une dis-
quette pleine, soit un fichier conte-
nant 127 fenétres, lorsque l'on veut
sauver une fenétre.
La structure du
programme
Pour les utilisateurs de l'assembleur
et les autres, voici quelques informa-
tions sur la structure du programme.
Le programme se charge en $89EE,
commence par brancher l'ampersand
($89EE a $89FF), puis saute 4 la
routine d'initialisation.
Celle-ci, crée juste sous l'adresse
contenue en $8A00 — $8A01 (le
contenu initial est $8A00), une pre-
miére fenétre de numéro 0 corres-
pondant a tout l’écran et ne possé-
dant pas de buffer. HIMEM pointe
alors sur cette fenétre.
Lorsqu’une fenétre est créée ou
chargée, les chaines ainsi que
HIMEM sont déplacées vers le bas
grace @ une partie de &HIMEM,
pour laisser la place a la nouvelle fe-
nétre, qui y est alors copiée.
Lorsque le programme cherche une
fenétre, il part de celle pointée par
HIMEM et remonte jusqu’a la fenétre
de numéro 0.
Vous pouvez vous libérer de la place
pour vos propres routines: soit de
maniére temporaire avec &HIMEM
(&I replace la fenétre 0 juste sous
$8A00), soit de maniére définitive en
modifiant l'adresse $8A00 — $8A01
et en réinitialisant. L'interpréteur se
termine en $8AOF par un saut a la
routine d'erreur de syntaxe du Basic,
que vous pouvez donc détourner.
Une fenétre est mémorisée sous
forme de 2 parties: les données la
caractérisant et le buffer qui contient
ce qui sera affiché a I’écran.
— Les données comprennent :
@ le numéro de la fenétre
@ le numéro de la fenétre ouverte
suivante (nul si c'est la derniére fe-
nétre ouverte, c'est-a-dire celle qui
est au-dessus des autres).
® les 2 octets de mémorisation des
tabulations verticales puis horizon-
tales (tabulations dans la fenétre).
@ les 4 marges de la fenétre (dans le
format qui permet une recopie di-
recte dans les mémoires $20-$23),
La gestion des fichiers sur disquette
utilise quelques routines du DOS
pour l'ouverture et la fermeture des
Jacques Supernant
routine de hasard.
moge Trace.
doctets.
MAX.
boucle avec ordre
(bon de commande page 78).
Max :Le moniteur étendu
Ce moniteur auterise un contréle de lexécution des
routines en langage machine.
* Un mode Trace et Pas 4 Pas trées évoluds et
sé@lectifs sont compiétés par un acces direct
aux registres du GSO2 (ou BSCOL) |/ est ainsi
possible de les initialise- @ 507 g-é ou dlaide de le
* Lae gestion des fenétres d'écran simplifie le
* Une routine permet ja recherche de suites
* Un mini-assembleur tres souple fait partie ge
* Une ligne de commande peut devenir une
UMP.
Les fichiers source sont sur la disquette.
Disquette et documentation : 150,00 F TTC franco
Appie t+, //e, //c
Pom’s n° 18
fichiers puis le File Manager pour
gérer le contenu qui est organisé de
la maniére suivante :
Le premier octet contient le nombre
de fenétres dans le fichier. Puis on
trouve les fenétres enregistrées de
maniére séquentielle (de méme que
pour l'organisation en mémoire, un
enregistrement contient deux zones
la zone des données qui ne
comprend que les 4 marges, puis la
zone du buffer qui contient le
contenu de la fenétre).
Je termine enfin, en vous souhaitant
plein de petites fenétres ! .
N.D.L.R. : Le listing du programme
Basic a 6té quelque peu modifié pour
les lecteurs n’ayant pas la disquette
d’accompagnement 4 leur disposition.
La version originale (sur la disquette)
charge les fenétres FGEN, FPRE et
FPOM'S 14.
Programme ESSAI
10 TEXT : HOME
20 PRINT CHRS (4)"BRUN WINDOW"
30 NN = 9:COL = 40: REM METTRE 80 POUR ES
SAI EN 80 COLONNES, ET PRINT CHRS(
4)"PR£3" AVANT LA LIGNE 20
100 & \VTAB 10; & HTAB S: PRINT “EXEMPL
E D’UTILISATION DES FENETRES*
110 & VUTAB 13: & HTAB 7: PRINT “PATIEN
CE, JE CREE DES FENETRES"
200 FOR I = 1 TO NN
210 MG = COL * RND (fi) + 1:MD = COL *® R
ND (1) + 1: IF MD — MG ¢ 12 THEN 2
10
220 MH = 24 * RND (1) + 1:MB = 24 * RND
<1) + 1: IF MB — MH < 4 THEN 220
230 & CIyMG,MD,MH,MB,256 * RND (1)
240 NEXT I
245 SPEED= 100
250 & C127,1,COL,20,24,32: & 0127: GOSUB
1000
Source Big MAC
Programme WINDOW.S
17 IIE
2* *
ae PROGRAMME DE GESTION DE *
4a* FENETRES TEXTES *
S# *
é* PAR G. 2WINGELSTEIN *
2 ® *
B73 eer eee ara ae ese ee
*
10 LISTING KBD ;DEMANDE AFFICHAGE LI
STING
11 ele} LISTING
12 ELSE
13 LST OFF
14 FIN
15 SAVEOBJ KBD ;DEMANDE SAUVEGARDE D
U CODE OBJET
16 bo SAVEOBJ
17 OSK WINDOW
18 FIN
19 EXP OFF jIMPRIME S
EULEMENT LE CODE MACRO
20 ™ ON 33 BYTES P
AR LIGNES
21
22 * SOUS-PROGRAMME DEPENDANT DE LA CA
RTE 80 COL. :
23 * VTAB
24 * HTAB
25 * (GETPARAM, GETNEWM, CHKMARGE)
26 * SAVECURS
27 * SCREENIT
28 * INVERT
29? * CALCBAS
30 * APPLEID
31
32 ORG S87EE
33
34 ESSAIECH = 1 jASSEMBLAG
Pom’s n° 18
260 & VTAB 3: & HTAB 3: PRINT "OUVERTU
RE DES FENETRES*;: GOSUB 1000
300 FOR I = 1 TO NN: & OI
310 & VTAB 3: & HTAB 3: PRINT *FENETRE
"313: GOSUB 1000
320 NEXT I
330 & E127: GOSUB 1000: & HTAB 3: PRINT
"PUIS ECHANGE DES FENETRES";: GOS
UB 1000
400 FOR I = 1 TO NN: & EI: GOSUB 1000: N
ExT I
410 & £127: GOSUB 1000: & HTAB 3: PRINT
"ENFIN FERMETURE DES FENETRES";:
GOSUB 1000: & F: GOSUB 1000
S00 FOR I = 1 TO NN: & F: GOSUB 1000: NE
xT I
999 END
1000 FOR J = 1 TO 1000: NEXT J: RETURN
— MODIF. ECHANGE.
35 ESSAIMOV = 1 sASSEMBLAG
— MODIF. DEPLACE
36 ESsAI80 = 0 jASSEMBLAG
E MODIF. SCREENIT
37 ; POUR 80 COLONNES
38 PAG
39 *
40 * COMMANDES MACROS Hi
41 po oo Ie
42 i
43 INCR Mac
44 INC S1
45 BNE NI
46 INC Si+1
47 NI «KK i
48
49 DECR Mac
50 Lox $1
51 BNE ND
s2 DEC S141
53 ND DEC $1
34 «<<
55
56 CHPR Mac
57 LDA S§1
se CMP §2
59 LDA Sitt
60 SBC S2+1
61 peag
62
63 TR MAC
64 LDA 51
65 STA $2
66 «KC
6?
68 TROB Mac
6y >>> TR.81382
70 >>> TR.S1415;82+1
1 KK
72
73 TRAX Mac
74 LDA 81
75
76
78
7?
80
a1
82
83
84
85
86
87
8s
90
vi
93
94
9S
9S
97
978
99
100
101
102
103
104
105
106
107
108
109
110
it
112
113
114
115
116
117
118
19
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
LDX Siti
STA 52
STX §2+1
aee
AD Mac
LDA $81
ADC 82
STA 53
coed
ADD Mac
cLe
>>> AD.$1582;83
>>> AD.814+1582+1;83+1
CE
sB Mac
LDA 51
SBC $2
STA 83
5+ 44
SUB Mac
SEC
>>> $B.$1;82;83
>>> “SB.§141;52+1;83+1
oa
BUMP Mac
apc §1
STA $1
BCC BPD
INC $141
BPD <<
FIN
PAG
*
* CONSTANTES
*
* VALEUR DES TOKENS
= $76
= $A2
= $03
= 8A7
= $08
* tA
= $B6
= $B7
*
* VARIABLES
*
YSAVI = siF 3 SAUVEGARD
E DU REGISTRE Y
WNOLFT = $20 sTABLE FEN
ETRE DU MONITEUR
WNDWOTH = = $21
WNOTOP = $22
WNDBTM = $23
CH = $24
cy = $25
BASL = $28
PROMPT = $33
AIL = $3C
A2L = $3E
A3L - $40
ASL = $42
LINNUM = $50
TEMPPT = $52
TEMPST = $55 ;POINTE VE
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
1797
180
181
182
183
184
185
186
187
188
189
190
RS TEMP STRING DESCR.
INDEX = $5E
VARTAB = $69?
ARYTAB = $6B
STREND = $6D
FRETOP = $6F
FRESPC = $71
MEMSIZ = $73 j;HIMEM DU
BASIC
CURLIN oe $75 sNUMERO LI
GNE EN COURS
3 (CURLIN¢1 = $FF SI MODE DIRECT)
FORPNT = $85 sPOINTEUR
SUR UNE VARIABLE
DSCLEN = $8F ; LONGUEUR
DU DESCRIPTEUR DE LA VAR.
ARYPNT = $74
IN $0200
AMPER = — $03F5
OLOCH = $0478
OURCH = $057B
OURCY = $05FB
KBD = sco00
RDALTCAR = — $COIE ;LIT switc
H ALTERNATE CHARACTER SET (APPLE I
1E)
KBDSTRB = $CO10
CHRGET = $B1 j;RECUPERE
UN CODE D’UNE LIGNE BASIC
CHRGOT = $87 31DEM SANS
INCR. TXTPTR
MEMERR = $D410 3OUT OF ME
MORY ERROR
ERROR 7 $0412 jAFFICHE E
RREUR POINTE PAR X
RESTART = $043C sDEPART A
CHAUD DU BASIC
CLEARC = $D66C 3 COMMANDE
CLEAR
NEWSTT = $0702 jRETOURNE
AU BASIC
UNDERR = $097C 3;UNDEF. ST
ATEMENT ERROR
PRINT = $DADS 3 COMMANDE
PRINT
FRMNUM = $DD67 sRECUPERE
UN NOMBRE
FRMEVL = $007B sEVALUE LA
FORMULE POINTEE PAR TXTPTR
SYNERR = $DEC? 3SYNTAX ER
ROR
CHKCOM = DEBE sVERIFIE L
A PRESENCE D’UNE VIRGULE
PTRGET = $OFE3 yTROUVE L*
ADRESSE DE LA VARIABLE POINTEE PAR
XTPTR
TQERR = SEL99 jILLEGAL @
UANTITY ERROR
GIVAYF = SE2F2 3 TRANSFORM
E A,Y EN FLOTTANT DANS FAC
GARBAG = $E484 jEFFECTUE
UN FRE(O)
3 ET LONGUEUR DANS ACCU
FRESTR = SESFD sCHECK STR
ING AND GET POINTER TO
3 STRING IN INDEX AND LENGTH IN ACC
U
GETBYTC = SE6FS s;SAUTE 1 C
ARACTERE ET GETBYT
GETBYT = SEGFS jRECUPERE
UN NOMBRE (256
GETADR - sE752 j CONVERTI
—N ENTIER DANS LINNUM
OVERFLOW = sEsDS ; OVERFLOW
Pom’s n° 18
ERROR 240 DA INIT-1,CREE-1, OUVRE-1
191 SETFOR = $EB27 3 TRANSFERT »FERME-1 , ECHANGE-1 , DETRUIS-1
FAC DANS VARIABLE TROUVE PAR PTRG 241 DA DEPLACE-1
eT 242 PAG
192 SETTXT rl $FB39 243 PUT WINDOWL ;GESTION F
193 PRNTAX = = F941 ;ENVOIE A, ENETRES
Xx _EN HEXA 244 PAG
194 BASCALC = $FBCi ;CALCUL AD 245 PUT WINDOW2 }GESTION F
RS LIGNE TEXTE ICHIERS FENETRES
195 COUT = SFDED 246 ERR */%9600 jFIN PROGR
196 MOVE = $FE2C 3DEPLACE ¢ AMME EN DESSOUS $9600?
AIL) A (A2L) EN (A4L> 247 FINPRMG = *
197 PAG
198 *
199 * INITIALISE POINTEUR DE L’AMPERSAN
o
200 DEPART LDA £$4c ;CODE DE J HCT.OBJ
MP 17 eee ae ae eae ae
201 STA AMPER 2* *
202 LDA £<DEBUT 3* HARDCOPY POM’S *
203 STA AMPER+ 4a* *
204 LDA £>DEBUT 5 eexwnxx prerrererterceeteet Ts
205 STA AMPER+2 é
206 JMP INIT 7 CR> = $8D
207 8
208 DEBUTPRM = * mew) = $25
209 FRSTWND DA DEBUTPRM ; ADRESSE D 10 BASL = $28
EBUT PLACE LIBRE POUR FENETRES il
210 12 BASCALC = $FBC1
QL 1 99 II I IE IEE IE ENE IE I IE 13 COUT = $FDED
212 * INTEPRETEUR DE L’AMPERSAND * 14
PSR Merririterrrrerirreretterertr rer ty 1s ORG $0300
214 16
215 * 17 LDA £¢00
216 * RECHERCHE CODE DE LA COMMANDE 18 STA cu
217 DEBUT PHA 19 HO304 Loy £$00
218 JSR CHRGET sAJUSTE TX 20 JSR BASCALC
TPTR 21 HO309 LDA BASL),Y
219 PLA 22 CMP £$40
220 LOX £TBCMDADR-TBCMD 23 BCS HO31C 3} FLASHING
221 NEXTCMD CMP TBCMD-1,x ET NORMAL
222 BEQ CMDFOUND 24 CMP £$20
223 DEX 25 BCS HO319 ;SPECIAL C
224 BNE NEXTCMD HARACTERS INVERSE
225 UMP SYNERR 26 CLC ;UPPERCASE LETTERS IN
226 * VERSE
227 CMDFOUND DEX 27 ADC £$C0
228 TxA 28 JMP HO3IC
229 ASL 29 * PROBLEME AVEC UPPERSCASE LETTERS
230 TAX CODE $80-$9F (CODE CONTROLE)
231 LDA TBCMDADR+1 ,x 30 *
232 PHA 31 HO319 cic
233 LDA TBCMDADR,X 32 ADC £480
234 PHA 33 HO3IC JSR COUT
235 RTS ;RETOUR PAR LA COMMAN 34 INY
DE 35 cPY £40
236 36 BNE 0309
237 TBCMD DFB UTAB: ,HTAB: ,LET: ,LOAD 37 LDA £CR>
:, SAVE: , STORE: ,RECALL: ,HIMEM: 38 JSR COUT
238 DEB 43776" ".70" 57F 7 7B" = 39 INC CV
D’,/P* 40 LOA cu
239 TBCMDADR DA = UTAB-1 ,HTAB-1 ,MENU-1, 41 CMP £24
LOAD-1 , SAVE-1, STORE-1 , RECALL~1 ,HIM 42 BNE 0304
EM-1 43 RTS
0328- FD Eé 25 AS 25 C9 18 DO 89FB- AY BA BD F7 03 4C 59 BA
HCT.OBJ 0330- 03 60 BA00- 00 8A 48 20 B1 00 48 AZ
#300.331 SA08- OF DO 20 BA FO 06 CA DO
8AL0- F8 4C CY DE CA 8A 0A FA
0300- AY 00 85 25 AD 00 20 C1 WINDOW SAIS- BD 31 BA 48 BD 30 BA 48
0308- FB 81 26 C? 40 BO OD Ce *67EE.8A21 BA20- 60 AZ
0310- 20 BO 06 18 6¥ CO 4C IC
0318- 03 18 69 80 20 ED FD cs BIEE- AP 4C
0320- CO 28 DO ES AY BD 20 ED
Pom’s n° 18
89FO- 8D FS 03 AY 02 BD Fé 03
ce
29
cice de style avec quatre petits pro- @ 210-230: boucle a la ligne 100
grammes d’animation _ graphique 299 fois sur 300, sinon efface et
aléatoire. Trois sont en Basic el nous recommence une fois sur 1200,
permettent de bien saisir le déroule- sinon boucle en 60 avec de nou-
ment de I'animation. Le quatriéme - veaux points
le plus beau - suit la méme démar- 240: mode texte et fin
che, mais en assembleur, démontrant . .
en chemin comment réutiliser quel- | QUATRE choisit une ligne dans le
ques routines mathématiques et gra- quart supérieur gauche de l'écran
(60-65) et la reproduit “en miroir”
pines = I ROM ngpiett sur les 3 autres quarts (ligne 100).
Le principe commun (sauf CARRE) CARRE utilise une seule variable X
consiste 4 faire "rebondir” une ligne
q et trace 4 chaque itération 4 lignes.
sur les limites d'un rectangle. ¢' 4
soit une ligne @ une distance X de
Un segment de droite se caractérise chaque bord d'un carré.
Par ses extrémités, c’est-a-dire par les HUIT est en assembleur. Certes!
coordonnées de 2 points, soit XO, YO Mais il procede du méme esprit et a
et X1, Y1 exactement la méme structure De
Chaque boucle leur ajoute un dépla- _plus, par rapport 8 QUATRE, il cons-
cement horizontal et vertical, positif truit dans chaque quart d'écran une
ou négatif (AX, AY et BX, BY), dé- image supplémentaire par retourne-
calant une ligne de longueur variable ment sur une diagonale et, a des fins
sur l’écran. de symétrie totale, considére I'écran
Le “rebond” survient quand une ex- comme étant carré avant de I’étirer
trémité de la ligne atteint la limite du aux dimensions de 280 * 192 qui
rectangle alloué, ceci électivement sont celles de la page graphique de
pour le sens de déplacement rendant ce cher Apple. (Notons que le rap-
le point “hors-limites” (d’ot modifi port 280/192 peut se réduire A
cation de rotation). 35/24, valeurs apparaissant dans le
En commun également le tirage au programme.)
sort par RND(1) des extrémités de la
Graphiques aléatoires
Thierry Han
de vous propose un intéressant exer- qu'une touche ait été frappée
droite, des déplacements et de HCO- Le programme commence done par
LOR (0a 4). fabriquer le nombre flottant stocké
dans F sur cinq octets valant 35/24;
Suivons pas a pas le programme vous le verrez réutilisé pour ajuster
LIGNES : les abscisses.
© 50: haute résolution page 2 Vous trouverez ci-apres une breve
© 60-65 : tirage des coordonnées de description des principales adresses
2 points et routines utilisées ;
e@ 70-75: tirage de leurs déplace-
ments @ PAGE] ou $C054 sélectionne la
© 80. stockage de leur valeur abso- page 1 (texte ou graphique)
g& lue; servira a tester le dépasse- e@ TEXTE ou $C051 sélectionne le
ment mode texte (page 1 ou 2)
®@ 85: on démarre en blanc ® CLAV ou $CO000, si une touche a
© 100: tracage de la ligne définie en été frappée, est >= $80 et
60-65 contient le code de la touche frap-
© 110; ajout des déplacements (po-
sitifs ou _négatifs)
© 120-150: si un point doit se re-
pee
STRB ou $C010 rend $CO00 <
$80
trouver hors-limite a l'itération sui- ®@ HGR2 en $F3D8 identique au
vante, alors inversion du déplace- Basic et de méme pour RND
ment et nouvelle couleur ($EFAE)
© 200; teste le clavier: une ouch ©@ HCOLOR en $F6FO. appelé avec
a été frappée si PEEK(-16384) > le code (0..7) de la couleur dans
127 ($C000 >= $80) X, ajuste l'octet $E4 utilisé par
Si oui: lit le caractére frappé HPLOT et HLINE, Le point d’en-
remet le clavier en attente (adresse trée habituel, en $F6EC, vérifie
-16368 = $C010) que X< 8
si "E" (CHR$(197)) : efface et re- © HPLOT en $F457 trace un point:
commence Tabscisse (0..279) est codée dans
si ESC (CHR$(155)) : fin 2 octets, on charge l'octet haut
si quelconque sauf SPACE: nou- dans Y, l'octet bas dans X et I’or-
veaux points donnée dans A avant d’appeler
si SPACE (CHR$(160)): attend HPLOT
qe
30
e HLINE en $F53A comme en
BASIC, octet haut de l'abscisse
dans X, bas dans A et ordonnée
dans Y
Un nombre réel est représenté par
Applesoft sur 5 octets (forme
compactée) ou, en page 0 pour étre
“mouliné”, étendu sur 6 dans FAC
($9D-A2) ou ARG ($A5-AA).
@ YTOFAC alias SGNFLT ou $£301
convertit un entier de 0..255
chargé en Y en réel dans FAC
© INTTOFAC en $E2F2 convertit un
entier (-32768..+32767) chargé
en A (partie basse) et Y (partie
haute) en réel dans FAC
FACTOINT en $E10C aurait pu
faire l'inverse. Eh bien non! Il
tronque, si possible, FAC en entier
laissé dans 2 octets de FAC ; $A0
et $Al
FACTOMEM en $EB2B compacte
le réel dans FAC (6 octets) et le
transfére a l'adresse pointée par Y
(partie haute) et X (partie basse)
FACTOARG en $£B63 transfére
FAC dans ARG
@ FMULTM en $E97F transfére un
réel en mémoire pointé par Y
(adresse haute) et A (adresse
basse) dans ARG et appelle
FMULT1
FMULT1 en $E982 multiplie FAC
par ARG et laisse le résultat dans
PAC - cette routine “prise en mar-
che” demande |'exécution préala-
ble du sous-programme GETSGN
(a la fin de HUIT)
FDIV en $EA69 divise ARG par
FAC et laisse le résultat dans FAC
- nécessite GETSGN (méme re-
marque que pour FMULT1)
@ INTL et INTH sont les deux octets
de FAC ot FACTOINT laisse son
résultat
Nous savons charger un nombre
dans FAC, multiplier, diviser, tron-
quer, appeler RND et les routines
graphiques. HUIT calcule 35/24,
choisit ses points, ses vitesses de dé-
placement (1 a 4) et ses couleurs de
fagon identique aux programmes
Basic, lit le clavier et boucle de fagon
analogue,
a
Pom’s n° 18
Programme QUATRE 120 HPLOT 0,X TO 191,X1 HPLOT 0,X + 1 To
sXe 1
10 REM QUATRE 130 HPLOT 0,190 - X TO 191,190 - X: HPLO
mo eRe T-0,191 -X TO 191,191 - x
= 1 * 1¥o = RAD iy @ 200 IF PEEK ¢ - 16384) < 128 THEN 70
5X1 = WD {> w1SsivE om Be cia woo | 210K PEEK < --18984)4 POKE — 16240,0
70 AY = RND <1) * 2+ 1:AX = RND (1) # 197 OTe 903 ON X = 195 6
a4 9 ON X ¢ >» 160 GOTO 70
sO a WN 1d we oe cee Re cox oe | 220 16384,128: POKE - 16368,0:
ae |
80 GX = ABS (AX):GY = ABS (AY):RX = AB| 230
S (BX) :RY = ABS (BY)
85 HCOLOR= 3
100 HPLOT X0,YO TO X1,Y1: HPLOT 279 - xO
sYO TO 279 - X1,Y1: HPLOT X0,191 - Programme LIGNES
YO TO X1,191 - Yi: HPLOT 279 - xo
s191 - YO TO 279 - X1,191 - YI 26 REL STONES
PRAMS, FES GEEUO S VO. i# AYARL SUKY 8) oo kom. GRO! CIN ow BpsWVo ~ IO Cia: we ae
?
seen ee Ree 87 eNO | 65 Xt m=, Rw G1) | 2ze;vi = IRND C4d’ % fe
eee) Be acc aee” io eee 70 AY . RND (1) * 2 + 1:AX = RND (1) *
5:
HSE: TEA Sa Peocake Se ki | 8 BY =, BNO CD #24 1X = AND CLD
ae |
iso; IF a Set one? be ay ot Byes 80 QX = ABS (AX) :QGY = ABS (AY):RX = AB
200 IF PEEK ¢ - 16384) > 127 THEN X = es ncolens a ee Ee
PEEK ( - 16384): POKE - 16368,0:
ON X = 197 GOTO SO: ON X = 155 GoT | 190 HPLOT x0,v0 TO X1,yY1
© 240: ONX < >» 160 GOTO 60; WaIT | 110 x0 mone a
ni = Yi +
can ge: WRT ERATE cottele™ | aco ae USS alt an BY 5 ay — we sno
220 IF RNO (0) * 1200 < 1 THEN 50 son ee ee ee A. BS
230 GOTO 60 130 IF YO < Q@Y OR YO > 191 - Q@Y THEN AY
240 TEXT : END = - AY: HCOLOR= RND (1) * 4
140 IF X1 ¢ RX OR X1 > 279 - RX THEN BX
= = 8X: HCOLOR= RND (i) * 4
Programme CARRE 150 IF Y1 < RY OR Y1 > 191 - RY THEN BY
= = BY: HCOLOR= RND (1) * 4 .
10 REM CARRE 200 IF PEEK ¢ - 16384) > 127 THEN X =
50 HGR2 PEEK ( - 16384): POKE - 16368,0: B
60 HCOLOR= 3: GOTO 80 ON X = 197 GOTO SO: ON X = 155 GOT
70 HCOLOR= RND (1) * 4 O 240: ON X <¢ > 160 GOTO 60: WAIT
80 X = INT ¢ RND (1) * 46) * 2 ~ 16384,128: POKE - 16368,0 |
100 HPLOT X,0 TO X,191: HPLOT X + 1,0 TO 210 IF RND (1) # 300 > 1 THEN 100
X + 1,191 220 IF RND (0) * 1200 < 1 THEN SO
110 HPLOT 190 - X,0 TO 190 - x,191: HPLO| 230 GoTo so
T 191 = X,0 TO 191 - X,191 240 TEXT : END '
Source Big Mac 18 YTOFAC EGU e301 +YREG =
19 FACTOINT EQU $E10C INTCFA
Programme HUIT.S Sis INTE i
20 RND EQU sEFAE ;RNDCFA
TTT Te Tr Ti Tir r tT Terr rrr re rr rrrry c>) => FAC
2 *GRAPHISMES ALEATOIRES 21 FACTOARG EQU $EB63 FAC =>
3 *PAR THIERRY HAN ARG
4 *DATE: 21/7784 22 FMULTM EQU SE97F jMEM <Y¥
S ARKH RRNH RRR RRR RAR RARER ERR RRR yA) => ARG; ARG*FAC => FAC
Ca 23 FMULT1 EQU SE982 sARG#FA
7 PAGE! QU $co54 C => FAC (NECESSITE GETSGN)
8 TEXTE EGU $CO5I 24 FDIV EQU SEAG? sARG/FA
9 CLAV EQU $cooo C => FAC (NECESSITE GETSGN)
10 STRB €Qu $coio0 25 INTTOFAC EQU SE2F2 3Y/A =>
41; FAC
12 HGR2 EQU $F3D8 26 ;
13 HCOLOR EQU $FéFO 27 INTL EQU sAl
14 HPLOT EQU $F457 28 INTH EQU SAD
15 HLINE EQU $F534 29 ;
16 ; 30 ORG sF00 jZONE D
17 FACTOMEM EQU $E828 ;FAC => E STOCKAGE
MEM CY ,X) 31 xo DFS 1
CC
Pom's n° 18 31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
a7
48
49
50
Si
s2
53
54
ss
56
57
ss
Ss?
60
61
62
63
64
65
66
67
68
6?
70
rat
72
73
74
75
76
77
738
79
80
81
82
83
84
85
B6
87
88
a9
90
vl
92
93
4
9S
96
97
93
99
100
101
102
yo DFS
x1 OFS
v1 DFS
xxo, OFS
yYYo DFS
XX1 DFS
YY DFS
AX OFS
AY DFS
Bx DFS
BY DFS
Qx DFS
YREG DFS
XREG OFS
F DFS
NTE 35/24
(1 ee eer oer our arene arerres
;
ORG $803
3F=35/24
LDY #35
JSR YTOFAC
JSR FACTOARG
LDY #24
JSR YTOFAC
JSR GETSGN
JSR FDIV
LOX 4F
LOY /F
JSR FACTOMEM
;OEBUT DU PROGRAMME
INIT
=3
LOX #3
JSR HCOLOR
JSR HGR2
i
sCHOIX DES COORDONNEES (0-91)
3
TIRAGE JSR RNDP2Z
STX xO
JSR RND92
STX YO
JSR RND?2
STX X1
JSR RND?2
STX Y1
CHOIX DES VITESSES (1-4)
JSR RNDZ
STX AX
JSR RND3
STX AY
JSR RNOS
STX BX
JSR RND3
STX BY
VALEURS ABSOLUES
LOX #0
cic
LDA AX ,x
BPL ABS.NEXT
EOR #$FF
ION SIGNE
ADC #1
ABS.NEXT STA QXx,x
INX
CPX 44
BNE ABS
ABS
;CONSTA
;HCOLOR
sINVERS
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
1496
147
1498
149
150
151
152
153
154
155
156
157
158
1s?
160
161
162
163
164
165
166
167
j;PLOTS DES 8 SEGMENTS
TRACES
COINS
JSR RETOURNE
JSR TRACES
TQUES
JSR TRACES
JSR RETOURNE
EN PLACE
3
yDEPLACEMENT DES POINTS
i
LOX #0
LDA X0,%
cL
ADC AX,X
DEPL
ON
STA X0,X
INX
CPx 44
BNE DEPL
TEST DE DEPASSEMENT
LOX #0
LOA #975
SEC
SBC QX,x
CMP x0 ,x
BCC INVERSE
TEST
LDA x0,x
CMP QX,x
BCS T.NEXT
LOA #0
SEC
SBC AX,X
E SIGNE
STA AX,X
STX XREG
JSR NEWCOL
LDX XREG
T.NEXT INX
CPX #4
BNE TEST
INVERSE
EST CLAVIER
i
LOA CLAV
BPL DO
BIT STRB
CMP #°E"
BNE ESCAPE
JMP INIT
CMP #$98
RET.1
ESCAPE
2
BEQ FIN
CMP #%A0
BNE NEWDIR
WAIT LDA CLAY
BPL WAIT
LDA STRB
;QUATRE
;SYMETR
;PLOTS
;REMISE
sADDITI
3X0>95-
7X0>AX
; INVERS
sRIEN
;EFFACE
; = Esc
;ESPACE
sAUTRE
jATTENT
331 RND(1>*512=0, NOUVEAUX POINTS
iota) LDY #1
JSR YTOFAC
JSR RND
32
Pom's n° 18
168
169
170
171
172
173
174
178
176
177
178
179
180
181
182
183
184
185
186
187
198
1897
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
2097
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
2297
230
231
232
233
JSR FACTOARG
LDA #2
LOY #0
JSR INTTOFAC
JSR FMULT
JSR FACTOINT
LDA INTL
BEQ NEWDIR
UVEAU
JMP TRACES
OUCLE
i
3SI RND(O)*2048¢1, EFFACE
NEWOIR LOY #0
JSR YTOFAC
JSR RND
JSR FACTOARG
LDA #8
LDY #0
JSR INTTOFAC
JSR FMULT
JSR FACTOINT
LDA INTL
BEG RET.I
IT <(EFFACE>
JSR NEWCOL
QUVELLE COULEUR
JMP TIRAGE
UX POINTS
FIN BIT
BIT
RTS
TEXTE
PAGEL
TRACES
AUCHE
LDA x0
STA Xx0
LDA YO
STA YYO
LDA X1
STA XX1
LDA YI
STA YY1
JSR TRACE
SEC
ROITE
LDA #171
sBc x0
STA Xx0
LOA YO
STA YYO
LDA #191
sBc x1
STA XxX1
LDA YI
STA YYt
JSR TRACE
SEC
UCHE
LOA xO
STA xXxOoO
LDA #191
sec YO
STA YYO
LDA X1
STA Xx!
LOA #191
SBC Y1
Pom’s n° 18
3512
3=0, NO
700, B
32048
3=0, IN
3020, N
;NOUVEA
;HAUT-G
;BAS-GA
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
264
267
268
267
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
2897
290
291
292
293
294
295
296
297
298
299
300
301
302
303
STA
JSR
YY1
TRACE
sec ;BAS-OR
OITE
LDA #191
SBC xo
STA XxO0
Loa #191
spc Yo
STA YYO
LDA #191
SBC x1
STA XXx1
#191
sec Yi
STA YY
LDY xxa
JSR MULTF :4F
LOA YYO iv
LOX INTL }X-LSB
LOY INTH }X-MSB
JSR HPLOT
LDY xx1
JSR MULTF
LOA INTL jX-LSB
LDX INTH ;X-MSB
LDY YY1 sv
JMP HLINE
4F
RETOURNE LDA x0
ION X-Y
LOX YO
STA YO
STX xO
LDA X1
LOx Yt
STA YI
STX XI
RTS
;INVERS
i
3Y=INTCRNOC 1) #92)
RND92 LDY #92
BNE RAND
sY=INTCRND(1) #3) 41
RND3 LDY #3
JSR RAND
INX
RTS
3 Y=INTCRND¢ 1) #7)
RAND STY YREG
LOY #1
JSR YTOFAC
JSR RND sRNDC1)
JSR
LDY
JSR
JSR
FACTOARG
YREG
YTOFAC
FMULT sRNDC 1)
ay
JSR
LDXx
RTS
FACTOINT
INTL
sFAC=INT(Y #357249)
JSR YTOFAC
LDA #F
Lov /F
$
MULTF
335724
304
JSR FMULTM 312 STA SAB
305 JMP FACTOINT 313 LDA €9D
306 ; 314 RTS
307 FMULT JSR GETSGN sNECESS 315 3
AIRE POUR FMULT1 314 NEWCOL LDY #4
308 JMP FMULTI 317 JSR RAND
309 ; 318 JMP HCOLOR
310 GETSGN LOR AA B19 3;
Bil EOR $A2 320 END
HUIT O8AB- 19 0A AE 11 OF EB EO 04 0968- 8D 06 OF AP BF ED 03 OF
0880- DO D4 AD 00 CO 10 14 2c 0970- 8D 07 OF 20 97 OF 38 AF
#803.A2Z0 osB8- 10 CO CP CS DO 03 4c 1D 0978- BF ED 00 UF BD 04 OF AF
0803- Ad 23 20 01 £3 O8CO- 06 CP 9B FO 4F CF AO DO O980- BF ED 01 OF 8D 05 OF Ag
0908- 20 43 EB AO 18 20 01 ES osce- 28 AD 00 CO 10 FB AD 10 0988- BF ED 02 OF 8D 06 OF AP
0810- 20 10 0A 20 69 EA AZ 12 oep0- CO AD O1 20 01 E3 20 AE 0990- BF ED 03 OF 8D 07 OF
Showing the first 100000 of 275767 characters.