Text content (OCR)
tremplin
Un programme
de facturation comple: et
sur Apple
M 1631 -
ci
Mh =
i
© GESTION DU DISQUE DUR
SUR MICRO-ORDINATEUR
Collection QUE
Don Berl'ner et Chris De Voney
Texte fiangais d'Olivier Engler, Tellig
Vous possédez un micro-ordinateur — PC ou
compatible ? Alors, un jour ou l'autre, vous
ourez besoin... et envie dun disque dur.
Peut-étre méme en avez-vous déjé un, et
envisogez-vous l'achat d'un second disque
dur. Peut-étre aussi désirez-vous tirer le
meilleur parti possible du disque dur que
‘vous possédez deja.
Quelle que soit votre situation, ce livre est
pour vous. débutonts ou utilisoteurs chevron-
1iés. Ilse divise en quatre parties :
— La premiére examine les avontages et
inconvénients respectils des disquettes
et des disques durs, les principes de
base, lo technologie, les fonctions et les
dittérentes corociéristiques dun disque
dur. Puls on apprend a l'nstaller, a le
structurer et 6 le mettre en service.
— ladeuxiéme portie présente les connais-
sonces de base & acquérir avant de com-
mencer d trovailler avec un disque dur.
Les auteurs y analysent les fonctions du
DOS.
— la troisiéme partie o pour but de vous aider
6 améliorer l'organisation de votre disque
dur et d lo rendre plus performonte.
_— Lo derniére partie illustre les différentes
fi méthodes possibles pour améliorer lo
gestion du disque dur. Les techniques et
Jes progrommes présentés permettent
diorgoniser le disque et de faire des
copies de sauvegarde,
/ BIBLIOTHEQUE INFORMATIQUE /
« IBM PC, STRUCTURE
ET ENVIRONNEMENT
Deuxiame édition
Peter Norton
Texte francais de Dimitri Stoquort
La pluport des utilisateurs de lo gamme IBM
PC connaissent déjé bien l'ouvrage de Peter
Norton, qui est devenu une véritoble “bible”
(evolution dy DOS, I'cpparition des nou-
veoux modales de lo gamme ont rendu indis-
pensable une nouvelle édition entiérement
retondue et remise 4 jour. Peter Norton nous
donne aujourd'hui une version nouvelle de
son livre, tenant compte, en particulier, des
nouvelles versions du DOS (iusqu'au DOS 3}
et des machines de type PC XT et AT.
Les lecteurs qui conncissent deja l‘ouvrage
trouveront donc une mine dinformations
complémentaires. Ceux qui ne fe connaissent
pas encore découvriront un précieux quide
de travail. Le livre permet en effet diacquérir
une compréhension totale de Ia structure, du
fonctionnement et de l'environnement des
machines de la gamme IBM PC. C'est une ini-
tiation oux caractéristiques et aux possibili
tés quietles offrent. Il permet en outre
doacquérir une bonne matirise du sysiéme
dexploitation MS-DOS’PC-DOS. Cette mai-
trise permettro aux utilisateurs d'obtenir de
leur matériel les résultots es plus
performants.
Les commondes, les fonctions et les utilitai-
ces du MS-DOS /PC-DOS sont présentés, illus-
trés ef discutés. Vovteur s‘attoche 4 foire
découvrir, pos 4 pas, les différentes copaci
tés du micro-ordinateur et de son environne-
ment. Il propose de nombreux exemples, &
travers des progrommes que le lecteur
pourra tester lui-méme
Reliure souple, 180% 240, 408 poges — 260 F
n
« dBASE Ill Plus
Programmation avancée
Collection QUE
Josaph-David Corrabis
Texte francois d'tric Terrier, Groupe ESC, Pau
BASE Ill Plus s'est imposé comme le stan-
dord des systémes de gestion de bose de don-
nées sur micro-ordinoteur ~ PC ou compati-
ble. Son principal attrait est de fonctionner
en réseau. Il dispose en outre d'un généra-
teur d'applications intégré.
Avec cel ouvrage, écrit dans un style trés
convivial, par un spécialiste chevronné de lo
progrommation, l'utilisateur pourra tirer de
BASE Ill Plus le meilleur profit possible. |!
s‘agit en effet d'un ovtil logique de program-
mation, ef non pas d'un livre contenant des
tecettes qu'il sulfirait de copier. Toutes les
techniques utilisées sont expliquées de tagon
trés pédagogique et illustrées de nombreux
exemples. Une fois assimilées, elles permet-
tront au lecteur de les reproduire el de les
adopter 4 ses besoins.
le livre est divisé en trois parties. Lo pre-
miére es! consacrée aux quatre principes de
lo programmation avancée en dBASE (écri-
ture de programmes compacts ; développe-
ment de programmes minimisont le temps
dexécution et l'espace disque ; écriture de
programmes modulaires: développement
dune connaissance avancée des spécificites
de BASE), Lo deuxieme examine les techni-
ques 6 utiliser pour développer les applica-
tions protessionnelles. Lo troisi¢me est con-
sacrée 6 l'utilisation de dBASE Ill Plus couplé
4 des logiciels complémentaires permettant
de développer des applications completes.
Relivre souple, 158X230, 384 pages — 295 F
Ces J ouvrages sont édités chee
INTER EDITIONS. 97. ov. du Maine 75014 PARIS
tremplin | SOMMAIRE
Apple et ProDOS (noms et
logos) sont des marques dépo-
aées d’Apple Computer, Inc.
BIMESTRIEL
Le numéro : 33 F
Abonnement d'un an : 190 F
(6 numéros)
Tous nos prix sont indiqués TTC.
EDITIONS JIBENA
Direction-Rédaction :
Lo Petite Motte — Senillé —
86100 CHATELLERAULT.
Téléphone :
49.93.66 .66
PuBLiCiTe :
Raymond JULLIEN
(1) 45.75,41.81
Commission Paritaire :
Les revues qui choisissent d'étre réel-
lement ov service du Lecteur, en ne
Tobligeent pas & glaner, dans plu-
sieurs mogazines, les renseigne-
‘ments concernant sa machine, ne
bénéticient pas du numéro de Com-
mission Poritaire, et pas d’ovantage
des tarifs postoux réduits.
TREMPLIN MICRO — Bimestriel — C'est one
publication des Editions JIBENA, 4, rue de la
Courdes-Noves, 75000 PARIS — S.A. au
<opitol de 3600000 F — Imprimé por
CITE-PRESS/PARIS — Service de vente
Presse-Promotion, él: 49.93.48.03. —
‘Dépit lage! & lo date de porution — Inserip-
tion @ fa Commission Poritatre des Publica-
tions et Agences de Presse en cours —
Directeur de lo Publication : Guy-Clément
COGNE — Diftusion N.M.P.P.
la disquette TREMPLIN MICRO
contient tous les progrommes du
numéro, ainsi Ligh les sources
trop longs pour étre publiés
dons les peecsid de la revue.
Avec la collaboration de :
André BROSSAUD, CHARLY et F. SIGAL, Marc FREFOYE, Stephan
HADINGER, Yvan KCENIG, NESTOR, Jean PERROT, Emile SCHWARZ.
Yvan KOENIG s‘interroge... TREMPLIN MICRO aussi! .........-... 2
APPLESOFT
La France et le Monde FRANCE 3
sur votre Apple (Jean PERROT) 7
FACTARIF = Un programme complet de facturation,
mms | (Yon KOENIG)
Nombres premiers (NESTOR)
eee rare ne neat eres
Apprendre le € dans les livres -
DE L’APPLESOFT
au langage C
Une contribution majeure
de CHARLY et F. SIGAL ................ 26
GS Basic
LE JEU DE YAM (André BROSSAUD)
Ce logiciel inédit, entigrement écrit en GS Basic exploite les
possibilités graphiques de l'Apple // GS.
initiez-vous & l'assembleur
Tout le monde comprendra comment fonctionnent les trois versions
CU GRY SPECIAL Ha NES ON 4) ord swesincmunaina’s dawiiy sue aaron ga 13
LE TAL BASIC
Il existe et Emile I'a essayé. Trés puissant, il compile les program-
Wide Geri feen GSS. Bases as ces een mwrerecersmrnn 6:4 rere nario nee oe a
MS-DOS sur APPLE
TURBO BASIC Appel de sous-programmes ...... en
sur Apple 11 GS Utilisation de DEF SEG ................. 50
(avec PC Transporter) Encadrez vos listages ............ as SY
Prodos.NDA
Un nouvel accessoire de bureau pour votre Apple // GS,
(Stephon. HAGINGER): «ics. 020s cena ree crm amicoownynrne
J Pace! {| —
/ Yvan xoenic—épiro /
Yvan KOENIG sinterroge
TREMPLIN MICRO AUSSI !
Aprés de longs mois de flottement, APPLE France a enfin un Directeur Général. Nous attendons avec impatience
que celui-ci veuille bien nous dire si, comme l‘affirme J. SCULLEY, le GS est encore un produit d'avenir, ou si,
comme de nombreuses sirénes cherchent 4 nous en convaincre, ce n'est (en France tout au moins) que |'APPLE if
et le LISA réunis. Sans doute n’est-il pas inutile de déballer quelques échantillons du fonctionnement quasi svici-
daire de ce qui était, il y a peu, un réseau de distribution...
«Si vous m‘achetez un MAC, j‘assurerai le service permet — en particulier — d'utiliser & fond le disque 60
oprés-vente moi-méme, mais si vous prenez un GS, i! eg Puisque Apple France ne semble pas pres de
foudra vous dém... avec Les Ulis». diffuser la révision € de sa rom SCSI (et son logiciel de
Signé : un concessionnaire agréé Apple. partitionnage). pensez-vous pouvoir importer la corte
Un autre. non moins agréé : we norrive pasdme | CMS»
procurer les compo- Réponse : Bof !
sants pour la mise & niveau du GS que je vous aivenduil | yx. ;
y a six mois. —
Le client :
«Allo ! il porait que vous étes CLARIS-France,
est-il possible d'obtenir, en France, fa version
nouvelle APPLEWORKS 2.0 (américaine) aux mémes
conditions qu‘aux U.S.A., lorsqu‘on est OFFICIELLEMENT
en possession d'APPLEWORKS 71
Réponse: Bof! vous savez, ce qui nous inté-
resse, c'est le Mac.
«Dommage : j‘envisogeais d’en acheter
trois exemplaires supplémentaires».
«Ah bon ! alors revenez dans huit jours,
(ourai le nécessoire.»
Le pire. c'est que, huit jours plus tard, lo mise 4 jour otten-
l‘agréé:
due depuis des semaines étoit effectivement réalisée.
¥.K.: «Allo! dons le mogosine T... vous publiez
une page de pub proposant, entre autres, des
logiciels pour le GS. Lun de s’étant pos compotible
avec fa nouvelle Rom. pouvez-vous me dire ce qu'il en
est des autres ?»
Réponse :
¥. ‘Allo ! dans le défunt Echo des Apple, vous
proposiez les disques durs CMS. Je sais que
CMS propose pour ceux-ci, aux U.S.A., une carte inter-
face SCSI permettant un partitionnage du disque, ce qui
Bof ! jen’en sais rien.
Y.K.: «Ah oui ! pourtant, CLARIS fait la plus grosse
part de son bénéfice avec APPLEWORKS et
tait de la pub a tout va pour ce programme ?»
Réponse : C'est vrai, mais c'est aux U.S.A.
x, compagnie ; Attendez-vous 4 voir bientét un GS
pertormant grace av 65¢832.
Réponse de W. MENSCH pare des 4502, d5c02, A5cB16, 65c802 et WASC265)
«Nous prévoyons que les prototypes du 65c832 seront disponi-
bles dans 18 mois et que la fabricotion de !o version 8Mhz com-
mencera en 1990 (c’était le 25 avril 1988 sur GENIE).
Comme vous le voyez, le moral est au plus bas. Envolé l'optimisme des lendemains d'AppleExpo ! Cependant, je
suis tétu et j'aimerais qu'on nous explique pourquoi la gamme /! est si mal traitée en France, alors qu'aprés avoir
remodelé le fle, APPLE US se prépare a rajeunir le fic (d'aucuns, bien informés, annongaient I'abandon de ces
deux machines). D'accord : Apple France est en avance sur les U.S.A., puisque la firme livre désormais le GS en
version 1,2mégas, alors que les U.S.A. introduisent enfin la version 512 k, mais pourquoi n‘ont-ils pas utilisé leur
fichier clients pour informer directement les possesseurs de GS de la procédure de mise 4 niveau ? Pour propo-
ser un abonnement a /'Echo des Apple quatre mois avant sa disparition, ON avait été capable diouvrir ces
fichiers, Echo était-il plus important que le GS ?
Dernier détail avant de vous quitter : acheter du matériel aux U.S.A. peut conduire a des situations délica-
tes... en cas de panne. Par contre, dans l'état de décrépitude actuel du réseau de distribution francais
(non, je ne parle pas de SIVEA Cannes), n’hésitez pas commander directement aux U.S.A. Pour moins de
$30 (port inclus) PBI software vous enverra MONTE-CARLO. Ce n’est pas de la pub, juste un exemple pour
rappeler que, lorsque les prix sont corrects, mieux vaut un original qu'une copie. Bien sir, la doc est en
anglais, mais il en est de méme chez les rares importateurs. Yvan KOENIG — 5 juin 1988.
/ Pace2 /
/ Jean Perrot —appiesorr / —
La FRANCE
ef le MONDE
sur votre Apple !
Désirez-vous savoir quelle distance sépore
Angers de Toulon ? Utilisez le programme
FRANCE de Jean Perrot. Le petit cousin de votre
grand-mére passe un week-end @ Guadalajara
et vous désirez lui téléphoner, mais en étant sér
de ne point le réveiller. Autrement dit : quelle heure est-il la-bas et (ca ne cote pas plus !)
combien de kilométres vous séparent ? Lancez le programme MONDE !
Un conseil : lisez d’abord les explications de Jean Perrot. Mieux : tapez-les et n'hésitez pas
a les revoir de temps en temps. C'est un peu longuet, mais cela vous évitera, par la suite, si
vous donnez une copie de votre disquette 4 un copain, d‘avoir a lui photocopier deux pages
de TREMPLIN MICRO !
Second conseil ; créez d’abord un sous-catalogue intitulé DISTANCES (ou HEURES), puis
commencez par y mettre le micro-menu que nous avons baptisé START. Suivront
EXPLICATIONS, FRANCE et MONDE. Bonne copie !
START
100 DS = CHR (4): PRINT DS"PR "“NR$" le programme “MONDE’"
£3": PRINT D®"PREFIX/T21/D1 : PRINT 6803
STANCES" 2750 155 POKE 1403,10: PRINT IV$" 3
105 1V$ = CHRS (15):NR& = CHR "NRS" le programme ‘FRANCE’
$ (14) 449C “: PRINT 7910
120 T$ = "Par Jean PERROT 27 Ru 160 POKE 1403,10: PRINT IVS" 4
e du Clos Beaumois 14000 CA "NRS" abandonner les recher
EN": GOSUB 130 4287 ches": PRINT F771
125 GOTO 135 2144 165 VTAB 19: PRINT "Votre choix
130 L = LEN (T$): POKE 1403,40 “3s GET H$: PRINT H® 2E8E
- L / 2: PRINT T$: RETURN 767C 170 IF H® = "1" THEN PRINT DS"
135 PRINT : PRINT :T$ = "MEN RUN EXPLICATIONS" 7730
Ue"b 1 SOU BT TE *F I 175 IF H$ = "2" THEN PRINT DS"
NVERSE : GOSUB 130: NORMAL RUN MONDE" 2011
: PRINT 4082 180 IF H$ = "3" THEN PRINT D0$*
140 PRINT "Voulez-vous :": PRIN RUN FRANCE" 424E
J) t 185 IF H$ = "4" THEN HOME ; PR
145 POKE 1403,10: PRINT IV$" 1 INT D$"PREFIX/T21": PRINT D
“NR$" le programme “EXPLICA $"“RUN STARTUP” 4BFB
TIONS*’": PRINT 24F2 190 CALL - 198; GOTO 165 F378
150 POKE 1403,10: PRINT I1V$" 2 >
/ Paces /
/ FRANCE/MONDE /
EXPLICATIONS
--------------- { EXPLICATIONS )-----------------~---
DS = CHRS (4): PRINT D$"PRE3": PRINT
IV$ = CHR (15):NRB = CHRS (14)
PRINT "Voici quelques explications concernant les programmes “IVS
“ MONDE "NR$" et "IVS" FRANCE "NRS
PRINT : PRINT IV$" PROGRAMME ‘FRANCE’ “NR&" :": PRINT
PRINT "-I] permet de déterminer les distances entre 46 villes de F
RANCE (2 a 2 )"
POKE 1403,10: PRINT “Le calcul est basé sur le fait que :*
PRINT 1¥$" 1 “NRS" 1a lonqueur (MR) d’une portion de méridien de 1
minute d’angle est égale": PRINT " ~""& 1,852 Km (équivalent au m
ille marin international?"
PRINT 1VS* 2 “NR&“ la longueur (PR) d’une portion de paralléle de
1 minute est égale (en Km)": PRINT “ “""a 1.852 * COS (LA) “-LA ét
ant la latitude du “paralléle-."
PRINT IVS" 3 "NR$"“ sur une faible tance (quelques centaines de
Kilométres) la distance": PRINT " ~~ entre 2 points est sensibleme
nt l’hypoténuse d’un triangle rectangle dont”
PRINT " “““les 2 cotés de l’angle droit sont :": PRINT “- 1 portio
n de “paralléle (PR) égale & la différence des longitudes des 2 po
ints";
PRINT "~ 1 portion de méridien (MR) égale a la différence des lati
tudes des 2 points": PRINT
PRINT "-Le théoreme de PYTHAGORE permet le calcul de cette hypotén
use"
VTAB 23: POKE 1403,60: PRINT 1¥$" TOUCHE S.V.P. "NRS" “;: GET H$:
HOME
PRINT IV$" PROGRAMME ‘MONDE’ “NRS" ;"
POKE 1403,25: PRINT “-Ce programme détermine :"
PRINT IVS" 1 “NRS" I’heure d’un lieu de la terre, soit par rapport
au méridien de GREENWICH": PRINT " ~""(temps universel TU), soit
par rapport & I‘heure légale de PARIS aussi"
PRINT “ “""bien heure d’été que d’hiver)."
PRINT : PRINT IVS" 2 "NRS“ la distance entre 2 points de la terre,
ainsi que les heures en ces 2"; PRINT “ “““points ¢ TU ou heure 1
égale de PARIS) donnés par longitudes et latitudes"
PRINT +: PRINT IV$" 3 "NRS" On peut avoir la liste des 102 villes e
ntrées en DATAS": PRINT
PRINT IV$" 4 "NR&" les distances (2 & 2) entre 102 principales vil
Jes du monde, ainsi que les": PRINT " ““"heures dans ces 2 villes
(TU ou heure de PARIS)"
PRINT : PRINT "1] donne aussi I’heure dans l’une des villes lorsqu
‘on a l’heure dans i’autre."
PRINT : PRINT “ ~-A noter que le programme ne tient pas compte des
heures d’été ou d’hiver qui“: PRINT "peuvent exister dans d’autre
S$ pays que la FRANCE, mais il tient compte des dates";
/ Paces /
Ce programme de présentation pourrait aussi étre mémorisé
sous forme de pages ou bien utiliser une courte routine lisant un
fichier texte. Jean Perrot a choisi la formule BASIC “totale”.
BD30
449C
F78E
0612
3761
9B9C
2179
2709
0504
110F
4439
1A?2
BIEE
DFIS
E40E
0275
DF 25
7078
CCCE
6637
220
225
230
235
240
245
250
255
260
265
270
PRINT "en précisant, & la suite de chaque heure, s’il s’agit du jo
ur J ou J-1 ou J+i."
PRINT : PRINT " “-L’utilisateur pourra, & son gré, augmenter le no
mbre des villes du monde”
PRINT “entrées en DATA. I] suffira de modifier la valeur de NU a |
a ligne 50 de “MONDE‘"
VTAB 23: PQKE 1403,60: PRINT IV$" TOUCHE S.V.P. "NR$" "“y: GET H#:
HOME
PRINT "-Le principe du calcul est basé sur la résolution des trian
gles sphériques": PRINT “Le triangle envisagé est ici 1’intersecti
on du tétraédre dont te sommet est le"
PRINT “centre de la terre,et dont les arétes passent par le pole N
ORD de la terre et": PRINT "chacun des 2 points envisagés.”
PRINT ; PRINT "Si a, b, c sont les faces du tétraédre (cotés du tr
iangle sphérique) et A, B et C, les angles di@dres opposés on a no
tamment ja FORMULE suivante :”
PRINT ; POKE 1403,15: PRINT “COS¢c)=COS<a) * COS(b) + SINCa> * SIN
tb) * COS¢C)"
PRINT : PRINT “-Les cotes du triangle spherique sont alors des por
tions de GRANDS CERCLES de laterre supposee spherique (longueur d’
un grand cercle --> 40000 Km)"
VTAB 23: PRINT IV$" R "NR$" = Revoir explications ~"IV$" M "NR$" =
MENU disquette ““IV$" F "NRS" = Abandonner ";
GET HS: PRINT H$: IF Hé = “R"™ THEN RUN
/ sean Perrot —appesorr /
B16D
0038
SCBS
E716
1A92
7046
2E95
2B1E
148E
CiBS
275 IF H$ = "M* THEN PRINT CHR (4)"RUN START" DF4B
280 IF H8 = "F" THEN HOME : PRINT CHRS (4)"PREFIX/T21": PRINT CHRS
¢4)"RUN STARTUP" 3312
285 CALL - 998: GOTO 265 Fos)
100 REM -n--e en == ( PROGRAMME VI
FRANCE LE FARCE
105 D$ = CHRS (4); PRINT DS"PRE
3°: PRINT BD30
110 PI = 3.1415926535:R = 20000
/ PIiA = O:B = 0 EC7c
115 RESTORE :IV$ = CHR (15):NR
$= CHR (14) FBS4
120 GOSUB 320 2B45
125 PRINT : PRINT "Voulez-yous uv
oir les villes concernées ?
(taper "IVS" 0 “NRS" pour OU
1) "3: GET H$: PRINT H® CE7B
130 IF H® = "0" THEN GOSUB 325 288A
135 RESTORE : PRINT 20A2
140 PRINT : INPUT "Nom de la pre
miére ville DANS L’ORDRE ALP
HABETIQUE (RETURN = FIN) “;V
1$: PRINT : IF V1% = "“ THEN
HOME : END E093
145 INPUT “Nom de la seconde :""
y¥2: IF V2S < VIS THEN 225 4EF6
150 FOR 1 = 1 TO 46 * 3 STEP 3 DIED
READ V$,L0,LA 5281
/ Paces /
—/raa | ——————_—_—__—__...al
160
165
170
175
180 A
185
190
195
200
205
210
215
216
220
225
230
235
240
245
250
255
IF V$ = V1$ THEN LAC1) = LA:
LOC1) = LO:Vis = VS:A = 1
IF VS = Y2$ THEN LAC 2) LA:
LO(2) = LO:V2s = V$:B = 1
NEXT
IF A = 0 OR B = 0 THEN 355
= 0:0N = ABS (LOCI) - LOK
2)):DP = 1.855 # DN * COS ¢
LAC1) * PI / 10800)
DL = ABS (LAC!) - LAC2)):DM
= 1.852 * DL
DS = SQR (DP * 2 + DM * 2):
0S = INT (DS)
FOR 1 = 1 TO 30:82 = PEEK ¢
49200): NEXT
PRINT : PRINT "A vol d’oisea
u, la distance entre ";1V$V1
SNRS;" et ";1VS$V2$NR$;" est
de :°";1V;DS;NR$;"_ Km"
TAB 22: POKE 1403,1: PRINT
1¥s" C “NR$;" pour continuer
vee" TUS" M "NR&" pour ME
NU de disquette """""~ “1V$"
F "NR$" = FIN ““j: GET HS: P
RINT : IF H® = "C" THEN KOM
£ : RUN
1F HS = "F" THEN HOME :
NT CHRS (4)“PREFIX/T21":
NT CHR ¢4)"RUN STARTUP“
IF H$ = "M" THEN PRINT
$ ¢4)"RUN START”
IF H& = CHRS (27) THEN
E : END
GOTO 205
CALL - 198; PRINT : PRINT :
PRINT : PRINT 1U$"J’Al DIT %
PAR ORDRE ALPHABETIQUE’ .
COMMENCE2... TOUCHE S.V.P."N
RS;" “"33 CALL ~- 198: GET H
$:A = 0:B = 0: PRINT : HOME
PRI
PRI
CHR
HOM
: GOTO 135
END
CALL - 198: PRINT "L’une de
s villes ne figure pas dans
ma liste...RECOMMENCEZ....To
uche S.V.P. “"3: CALL ~- 198
: GET Ht: GOTO 135
DATA ANGERS ,-34,2850 ,AMIENS,
154, 3053 ,AVRANCHES ,-82, 2921
DATA BASTIA,568, 2543 , BAYONNE
3790, 2610, BESANCON , 362 , 2834
DATA BEZIERS,198,2600 ,BORDEA
UX ,-34, 2650 , BOURGES , 144, 2824
DATA BREST ,-270,2903,CAEN,-2
AC3F
9744
0582
CCSF
9330
E660
ODD?
087E
3312
OF 4B
a29F
2042
FBO
0180
3416
3128
BA2A
AGIE
260
265
270
275
280
285
290
295
300
305
310
315
320
325
330
335
340
345
350
355
360
365
370
02951 ,CANNES,420,2433 ~~
DATA CHERBOURG ,-97,2980 ,CLER
MONT-FERRAND , 187,2747,DIJON,
302,2960 ~
DATA DUNKERQUE ,142,3062,GREN
OBLE ,343,2711,LE HAVRE, 10,29
70
DATA LE MANS,12,2880,LILLE,!
81,3040 ,LIMOGES, 76,2750
DATA LOURDES,1,2587,LYON, 290
12744 MARSEILLE , 325, 2598
DATA MONACO, 447, 2623 ,MONTPEL
LIER, 233,2616 ,MULHOUSE , 440 ,2
864
DATA NANCY , 370, 2921 ,NANTES 9
0, 2834 NICE ,438, 2622
DATA NIMES, 259, 2630 , ORLEANS,
115,2875,PARIS,140,2930
DATA PERPIGNAN, 174,2563,POIT
TERS, 21,2791 ,REIMS , 242, 2955
DATA RENNES ,-102,2887,ROUBAI
X,182,3041 , ROUEN, 65,2965
DATA ST-ETIENNE ,262,2725,ST-
QUENTIN, 196, 2990 , STRASBOURG,
465,2915
DATA TOULON, 356 ,2588,TOULOUS
E,88, 2603, TOURS ,42,2844
DATA VERSAILLES, 128, 2928
POKE 1403,14: PRINT 1V$" DIS
TANCE A VOL D’/OISEAU DE DEUX
VILLES FRANCAISES "NR#: RET
URN
HOME :H = 1:V = 0; FOR 1
TO 46: READ V$,LO,LA:V =
1
VTAB V: POKE 1403,H: PRINT V
1
+
<u
$:B2 = PEEK (49200)
IF 1 = 17 OR I = 34 THEN V =
O:H = H + 20
NEXT : VTAS 23: PRINT "Touch
e SVP pour la suite.... "3
GET H$: RESTORE : HOME : GOS
UB 320
: PRINT
1V$" ";V1%;" N’EST PAS SUR M
IF A = 0 THEN PRINT
A LISTE... "NRS" ~"j
IF B = 0 THEN PRINT : PRINT
: PRINT IVS" "j¥26;" N’EST P
AS SUR MA LISTE... “NRS" ~"j
CALL - 198: GET H$: HOME :
RUN
86EB
8015
4F06
7ALS
3606
479C
oss!
Sp20
2385
ABCY
4B45
32F7
BD44
9060
925A
DFCC
BA62
$381
2A07
DeFD
0812
— fac ff $A <_<
100
105
110
115
120
125
130
135
140
145
150
155
160
165
170
175
REM = PROGRAMME MO
NDE )= ===
OS = CHRS (4): PRINT DS"PRE
3": PRINT
IVS = CHR$ (15):NR$ = CHRS
(14)
PI = 3,1415926535:R = 20000
ff PE
Z = O:NV = 106: REM Nombre d
e villes en DATA
REM, — << MEY
POKE 1403,35: PRINT IVS" M E
N U “NR#: PRINT : RESTORE
PRINT “Voule-vous :*
PRINT : POKE 1403,1: PRINT I
VS" 1 "NRS“ Avoir 1’heure en
un lieu de la Terre par rap
port au méridien de GREENWIC
H.*
PRINT : POKE 1403,1: PRINT I
VS" 2 "NR&" Avoir la distanc
e entre 2 paints du monde,do
nnés par latitudes/longi tude
5.
PRINT : POKE 1403,1: PRINT I
Vs" 3 "NRS" Voir la liste de
s villes du monde concernées
PRINT : POKE 1403,1: PRINT I
VS" 4 "NR$" Avoir la distanc
e entre 2 villes et les heur
es dans ces 2 villes."
PRINT : POKE 1403,1; PRINT I
Vs" S "NRS" Revenir au MENU
de disquette."
PRINT : POKE 1403,1: PRINT 1
VS" 6 "NRS" Abandonner le pr
ogramme*
VTAB 19: HTAB 1: PRINT "Votr
e choix :~";: GET H$:H = VA
L CHS)
IF H < 1 OR H > 6 THEN PRIN
T : GOTO 170
BD30
449C
Ec8s
2C9F
9485
BDSD
E2E7
AFSS
bA3F
18BE
B87D
ocoD
180
185
190
195
200
205
210
215
220
225
230
235
240
245
250
255
260
265
270
275
ON H GOTO 240,240,490,530,18
5,190
PRINT CHRS (4)"RUN STARTUP"
HOME : END
VTAB 6: PRINT "Taper G,E OU
H suivant qu’il s’agit de 1’
heure TU (de GREENWICH), de
\’heure “""légale d’été en F
RANCE ou de I’heure d’hiver"
3: GET KS: PRINT :K1$ = K&
IF K& = “G" THEN K$ = "(TU o
u de GREENWICH)":CR = 0; GOT
0 220
IF K$ = "E" THEN K% = “été
en FRANCE)":CR = 2: GOTO 220
IF KB = "H" THEN K@ = “Chive
rt en FRANCE)":CR = 1: GOTO 2
20
CALL - 198: GOTO 180
REM -- --( NE PAS EFFACER
— a
VTAB 9: PRI “Heure "IV$;"
"GK$;" "GNRB;" "3: CALL - 8
68: INPUT HG$:HG = VAL (HGS
2: IF HGS = "0" THEN RETURN
IF NOT HG OR HG > 24 THEN
CALL - 198: GOTO 225
RETURN
K = HiV$¢1) = " A "3V8C2) =
“Be
HOME : PRINT “Les latitudes
et longitudes sont exprimées
en DEGRES ou DEGRES.MINUTES
": VIAB 3
PRINT "Latitude NORD :~entre
0 et +90 “/ Latitude SUD ~~
“: entre 0 et ~90"
PRINT “Longitude EST :"entre
0 et +180 / Longitude QUEST
rentre O et -180"
GOSUB 195
FOR 1 = 1 TO K: IF K = 1 THE
N 290
VTAB 7 + I * K: POKE 1403,45
: PRINT "Latitude de
5
INPUT LA$CI):LACT) = VAL <L
A$(1)): IF LAS(1) = “O* THEN
285
“"SUSCT
B1ic
BéB2
SES!
6118
7E29
FC23
4659
8075
84AB
57¢b
6381
C552
FA70
4548
134F
4F69
C656
cosa
—_—_—X—_—_ewss ee / PvE? / —
280
285
290
295
300
305
310
315
320
325
330
335
340
345
350
355
360
w= / Paces /
(suite)
IF NOT LACI) OR ABS (LACI)
) > 90 THEN CALL - 198: GO
TO 270
N = LACI):2 = 0: GOSUB 460:P
ACI) = PI / 2 - NR
VTAB 8 + 1 * K: POKE 1403,45
: IF K = 1 THEN PRINT “Long
itude du lieu “";: GOTO 300
PRINT “Longitude de ““;VS<¢I)
i
INPUT LOS(1):LO¢I) = VAL (L
O${1)): IF LOS<I) = "0"
310
THEN
IF NOT LOCI) OR ABS (LOCI)
) > 180 THEN CALL - 198: G
OTO 290
N = LO(1):2 = 1: GOSUB 460:6
O¢1) = NR:HCI) = HG + HL:HC(I
2 = INT (HCI) # 100 + 0.5)
/ 100
H(I) = H{I) ~ CR
NEXT : POKE 216,0: IF K = 2
THEN 355
IF H{1) > 23 THEN H(1) = H¢1
d - 24:3$8¢1) = "Cjour J#1)":
GOTO 340
IF H¢1) ¢ 0 THEN H(1) = H¢1)
+ 24:09(1) = "Cjour J-1)": G
oTO 340
JS(1) = "Kjour J"
VTAB 12: PRINT "S’il est "IV
$" "“SHG;" "NR&" heures ";K$;
"le jour J, i] est "1V8" "H
€1)5" "NRS" heures au lieu":
PRINT "de longitude "IVS" “L
OC1) 3" "NRS;" degrés ";JSC1)
1 TO 20:82 =
NEXT
FOR II = PEEK
GOTO 435
DL ABS (G01) ~ GOC2)): R
EM DIFFERENCE DE LONGITUDE
C= COS (PAC1)) x COS (PAC
B325
CE91
8DEB
391C
D487
F973
77Et
2CFF
2F83
ab4C
BO7F
365
370
375
380
385
390
395
400
405
410
415
420
425
430
435
440
445
450
455
460
465
470 N
475
22) + SIN (PA(1)) * SIN (P
AC2)) * COS <DL)
IF C = 0 THEN THETA = PI / 2
: GOTO 375
$= SOR -C* 2:T=S/
C:THETA = ATN {T)
IF C <¢ 0 THEN THETA = THETA
+ PI
RT = INT (R # THETA + 0.5):
tL = LEN (V$(1)) + LEN (U8¢
2.) + 26
VTAB 14; POKE 1403,40 - L /
2: PRINT "Distance entre "IV
SVSCIONRS" et "IVSUSC2)NRS;"
=> *gRTs" Km*
FOR 1 = 1 TO 2: IF H«ID <0
THEN H(1) = HCI) + 24:38¢1)
= “(jour J-1)": GOTO 405
IF H(1) > 23 THEN H(I) = H¢1
> - 24:U$¢1) = "Cjour J#1d":
GOTO 405
J$(1) =
NEXT
PRINT + PRINT "Il est ";IV$;
" "SHC1) 3" "SNRS;" heures a
“Z1US;VSC1) SNRS SPCC 1)US¢1)
“Cjour J)"
3
PRINT “... et “gIVS;" "3H¢2)
y" ";NRS;" heures a ";1USVS(
2)NR$; SPC( 1)J$<2)
FOR I] = 1 TO 30:82 =
49200): NEXT
GOTO 415
REM
PEEK
VTAB 23: POKE 1403,1: PRINT
1V$" C "NR&" pour (Ciontinue
ee "IVS" M “NRS" pour
au (Menu de disquet
te “";: GET H$: CALL - 958
“C" THEN RUN
"M" THEN PRINT CHR
$ (4)"RUN START”
IF H$ = CHR® (27) THEN END
GOTO 435
Ni = N:N = N * SGN (N):MIN
= N - INT (N>}EMIN = MIN # 1
46
= INT (N) + MIN:NR = N.*
1 / 180
=N*
SGN (N1): IF 2 =
URN
FOR J =
0
N
P
SGN <N1):NR = NR *
0 THEN RET
- 12 TO i2
4804
0314
944E
AaD2
1136
1538
6675
Agi?
0582
APSA
EDgS
AFCC
Fad?
A747
EVEO
DF4B
AACE
1347
S4F3
2944
CDEB
—_ee ee _ / sean Perror—appiesorr / —
480
485
490
495
500
505
510
Sis
520
525
530
535
540
545
550
SSS A=
560
565
570
375
IF LOGI) > - 7.58 4+ Je ASA
ND LOCI) ¢ 7.5 + J * 15 THEN
= J: RETURN
NEXT +: RETURN
HOME :H = 1:V = 0; FOR 1 = 1
TO NV - 4: READ V$,LO,LA:V =
Va tf
VIAB V: POKE 1403,H: PRINT V
$:B2 = PEEK (49200)
IF I = 21 OR I = 42 OR 1
3 OR I = 84 THEN V = O:H
+16
NEXT : FOR I =
PEEK (49200):
5
PRINT ; CALL
é
H
ou
1 TO 10:B2 =
NEXT +: GOTO 43
- 198: PRINT 1
Vs" J’AI DIT..PAR ORDRE ALPH
ABETIQUE..."NR$;: CALL - 19
8: PRINT " “~“Touche S.V.P.
“5: GET HS
REM ------ ( DISTANCES ET HEU
RES DES PRINCIPALES )---~--
aan------=--==- © VILLES
HOME : GOSUB 195
INPUT “Nom de la premiére vi
lle dans l’ordre alphabétiqu
e :°"3V$¢C1)s PRINT
INPUT "Nom de la seconde :°*
IF V$¢€2) <¢ VSC1) THE
jV$C2):
N 510
PRINT
POKE 1403,32: VTAB 14: PRINT
IVs" PATIENCE "NR
0:B = 0: FORS =
+ READ V$,L0,LA:Z =
IF V$ = V$(1) THEN
ASN = LA:I = 1:4
460:PAC(1) = PI /
= LO:N = LO
460:60(1) = NI
Loe
IF VS = V$(2) THEN LAC2)? = L
= LA:] = 2:B = 1: GOSUB
i?
1 TO NY
0
LAGID = L
= 1: GOSUB
2 - NR:L0¢1
:: GOSUB
5]
1
wZomt
R:H(1) = HG + H
460:PA(2) = P 2 - NR:LO¢2
> = LO:IN = LO:2 = 1:; GOSsUB
460:G0(2) = NR:H(2) = HG + H
L ~ CR:Z = 0: G
NEXT
IF V$(1) =°"CAEN" OR ¥$(1) =
OTO 575
2E62
6E6D
OF7B
9DSD
C9BE
312E
003A
1620
8B1A
OFES
4B5A
DS7B
1080
SSF
1EB!
0582
Seo
585
590
S95
600
405
61s
620
625
$30
635
640
645
650
655
660
665
"PARIS" THEN H(1) = H(1) + C
R
IF V$(2) = "CAEN" OR V$(2) =
"PARIS" THEN H(2) = H¢2) + C
R
IF A = 1 AND B = 1 THEN 355
IF A = 0 AND B = 0 THEN PRI
NT "Ni "IVS" "Y$C19" "NRE"
i "IVS" “U$<2)" "NRE" ne fig
urent sur ma liste.,.,RETURN
S.V.P. “"3: GOTO 605
IF A = 0 THEN PRINT IVs" "Vv
$¢1)" "NRS;" n’existe pas su
roma liste...RETURN SVP “*;:
GOTO 605
IF B = 0 THEN PRINT IVS" “VU
$(2)" "NRS" n’existe pas sur
ma liste,..8ETURN S.V.P, “"
VTAB 18: CALL - 958: PRINT
"=Si on donne |l’heure d’un 1
ieu (taper 1 pour Je premier
et 2 pour le second)"
PRINT “on obtiendra )’heure
de I’autre lieu.,."1V$" M "N
R$" revient au menu"
VTAB 22: PRINT "Si 1’heure e
st en TU il faut ajouter 1h
eure en HIVER et 2 en ETE po
up avoir “~"l*heure légale e
n FRANCE."
VTAB 19: POKE 1403,61
GET K$:K = VAL (KS): CALL
- 938: PRINT : IF K&@ = “M” T
HEN RUN
1F K ¢ 1 OR K > 2 THEN 415
VTAB 21: CALL - 958: PRINT
"Si heure de ";V$C(K);" = "G3
INPUT " "3K¢K): VTAB 21: POK
E 1403,15 + LEN (V$CK)): PR
INT IVE" "SKCK) 3" "SNRS3" "3
“(jour J)";
IF K¢K) ¢ 0 OR KCK) > 24 THE
N 645
Ka - K) = KCK> + HC3 = KD -
H¢K)
IF K¢3 - K> ¢ 0 THEN K(3 - K
> = K(3 - K) + 24:08¢3 - K)
= "(jour J-1)": GOTO 675
IF K(3 - K) > 23 THEN Ki3 ~
BSBS
ESBA
4460
7714
2359
Féio
CFA2
é6DDe
73C7
785A
6177
8074
BAN?
9DEF
OAD
—_—_—_—_—:__aa_ nn / nce | —
== /monve /
(suite)
K) = K(3 - K) - 24:J$(3 - KD
= "(jour J+#i)": GOTO 675
J3(3 - KD = "“Cjour J)"
PRINT ” alors il est ";1U$"
"sK(2 - Kd3" "sNRS;" heures
a "s¥8C3 - K) SPCC 1)J8¢3 -
K)
VTAB 22: POKE 1403,11: PRINT
"Taper "IVS" A "NR$" si on v
eut entrer une autre heure “
yi GET L$: PRINT LS
IF L@ = "A" THEN 615
CALL - 198: RUN
DATA ABIDJAN ,-4.30,5.21,ADDI
S-ABEBA ,38.48,8.45,ALEXANDRI
E,29.50,31.06
DATA ALGER ,3,36.38,AMSTERDAM
14.50 ,52.22,ANDORRE,1.30,42,
30
DATA ANKARA , 32.47,39,56,ATHE
NES, 23.45,38,BAGDAD ,44.27,33
-07
DATA BARCELONE,2.10,41.21,BA
SSETERRE ,-61.20,16.36,BELGRA
DE, 20.30,44.45
DATA BERLIN,13.25,52.32,BERN
E,7.2%,46.57,BEYROUTH ,35.21,
33.48
DATA BIRMINGHAM ,~-1.53,52.27,
BOGOTA, -73.48,4.22,BONN,7.05
790.45
DATA BRAZZAVILLE,14.22,-4.12
, BRUXELLES ,4.19,50.50,BUCARE
ST ,26.07,44.25
DATA BUDAPEST ,19.05,47.30,CA
EN,-0.20,49.10,CARACAS ,-66.5
2,108.39
DATA CAYENNE ,-52.40,5,CHICAG
0,-87.45,41.45, COPENHAGE ,12.
30 ,55.42
DATA DAKAR,-17.30,14.35,DELH
1,77.09,28.09, DETROIT ,-83.02
742.20
670
675
680
685
690
695
700
705
710
ais
720
725
730
735
740
B97F
9415
FBFA
AaEP?
1ADZ
c70D
06608
SEAS
BB?d
985F
1B3D
1ES?
35DF
3148
400A
EBOC
745 DATA DJAKARTA,104.49,-6.05,0
JIBOUTI ,43.09,11.59, DUBLIN, -
$.16,53.18
DATA FORT DE FRANCE,-41,14.4
0 GUADALAJARA ,~102.44,20.50,
HAMBOURG ,10 ,53.32
DATA HANOI , 105.47, 21 ,HELSINK
1,25,60.08,HONG KONG,114,22.
10
DATA HONOLULU, -157,21 ,HOUSTO
N,-95.33, 29,20, ISTANBUL , 28.5
0,41.03
DATA JERUSALEM, 35.12,31.45,K
ABOUL , 69.15,34.30,LA HAVANE,
-82.30,22.30
DATA LE CAIRE,31.50,30,LE CA
P, 18.30 ,-34,LENINGRAD, 30.20,
60
DATA LIMA,-77.23,-12.06,LISB
ONNE ,-9.10,38.43,LONDRES,~0.
10,51.30
760 DATA LOS ANGELES,-118.15,34, LUXEMBOURG
1$.07,49.39,MADRID, ~3.40,40,27
785 DATA MANILLE, 120.54, 14.50 MELBOURNE, 14
5.02,-37.30 MEXICO,-99.10,19.22
790 DATA MILAN, 9.08, 45.27 MONACO, 7.25, 43.4
3,MONTREAL ,~73.30, 45.30
795 DATA MOSCOU,37.30,55.50 MUNICH, 11.35,4
8.08 NANKIN, 118,50 ,32
800 DATA NAPLES, 14.18,40.50 NEW-YORK,-74,4
0.40 NICOSIE,33.20,35
B05 DATA NOUMEA,167,-22.20,0DESSA,30.40,46
30, OSAKA, 135.30 ,34.40
B10 DATA OSLO, 10.4040, 0TTAWA,-75. 40, 45.25
,PAPEETE,-149,-17.30
B15 DATA PARIS,2,20,46.50,PEKIN,117.36,40,
PORT AU PRINCE,-72.30,18.27
820 DATA PYONGYANG, 125.45,39, QUEBEC,-71.50
147.18, RANGOON, 96.44, 16.26
825 DATA REYIKJAVIK,-22,64.05,ROME,12.25,4
1,53, SAINT-MARIN, 12.30 ,43.55
830 DATA SALISBURY, 31 ,-17.40 SAN FRANCISCO
1-122.30,37.45, SANTIAGO, -70.40 ,-38.30
835 DATA SEDUL,127,37.30 ,SHANGAT ,122,31 ,S1
NGAPOUR, 104, 1.22
840 DATA SOFIA, 23.20 ,42.39,STOCKOLM,18.20,
59.20, TAIPEH, 121 .30,25
845 DATA TANANARIVE, 47.30,-18.57,TEHERAN,S
1,27,35.46, TIRANA, 19.50, 41.24
850 DATA TOKYO,139.37,35.41 ,TRIPOLI,13.09,
32.47, TUNIS, 9.03,36.40
855 DATA TURIN,7.42,45.05,VARSOVIE, 21 ,52.1
B,VIENNE, 16,20,48.11
40 DATA WASHINGTON, -77,39.02,WELLINGTON, !
74.50,-41 23, YADUNDE , 11.37,3.49
750
755
760
765
770
775
c13s
EEBS
1852
75At
1c2e
ECF
D420
FRED
OF?
9431
FIAT
E8BF
6304
24F4
9EB1
Paid
368F
6080
—_ D280 f ——_—::?/_?" _ eaaaaaaa=—=
/ terancace c /
Apprendrele C
dans les livres ?
Tremplin Micro s‘intéresse 4 tous les langages, mais notamment 4 celui qui est appelé a
devenir LE langage... et vous l'avez reconnu : il s‘agit du € . On ne peut pas dire que les
applemaniaques soient particuligrement gGtés avec la version dont ils disposent sur l'Apple
HGS. Il leur manque un TURBO € signé Borland, ov un QUICK € signé Microsoft (mais que
nous ne connaissons pas).
Reste que le Turbo € est utilisable sur GS par le truchement du PC Transporter diffusé en France
par Bréjoux. Et alors, quel régal ! D'autant plus que les ouvrages consacrés 6 TURBO € sont non
seulement nombreux, mais enrichissants en diable. Nous les décrivons tous (lors de la parution)
dans nos pages Biblio.
Au fait, peut-on apprendre le € dans les livres ? Assurément oui, mais en prenant le soin de
tout lire... c'est-d-dire de commencer par le commencement. D'une maniére générale, les
habitués du Pascal ne font qu'une bouchée de I'Abc du € . Lorsqu’on arrive du BASIC, c'est un
peu plus compliqué, mais on s'y fait trés vite. Parlons des deux derniers (d'autres arrivent !).
TURBO C de Stephen R. Davis
epi a
Avec ce manuel, on peut parler d‘ouvrage de référence UORBD Y
accessible & des programmeurs de bon niveau, sur PC et e
compatibles. Turbo (de Borland) est devenu un stan-
dard, mais s’écarte parfois de la norme Kernighan et Rit-
chie — avec bonheur d'ailleurs. Le livre de Stephen R.
Dovis fait le point la-dessus. Mais l'auteur ne se contente
pas de disserter sur les mérites respectifs du € classique
et du Turbo €.. Il invite le lecteur 4 programmer. Les exem-
ples abondent dans ce bouquin... du plus simple au plus
complexe (et, parmi ces derniers, la création de program-
mes résidents). “4
Un livre qui fait honneur 4 la collection Cedic-Nathan.
475 pages, broché —265F PCV Diffusian BP86 77402 LAGNY/sur/MARNE
PLUS LOIN AVEC TURBO C de Daniel-Jean David
ane ee el
Enseignement complet de Turbo £ sur IBM PC et compatibles, le livre traite les aspects les plus
avancés du langage et notamment les pointeurs et la gestion dynamique de la mémoire, ainsi
que les fichiers en accés séquentiel direct, et la récursivité.
Eien
Ni
\l comble par ailleurs une lacune des compilateurs £ en fournissant un ensemble complet de
graphiques haute résolution, permettant de réaliser tous les dessins possibles. Ce package gra-
phique est disponible sur disquette, mais nous ne I'avons pas testé. Nous supposons que cette
méme disquette regroupe les corrigés des 50 exercices proposés dans l'ouvrage.
Edimicro, 121 avenue d'ITALIE 75013 PARIS 250 pages, Broché — 245 F
ER AR
/ pace /
— / ms.p0s— ociciet /
A essayer sur votre GS 4 RIM
avec PC-Transporter TEXT
Vous avez eu la bonne idée de transformer votre Apple //GS en compatible grace au
PC.Transporter... mais vous hésitez 4 investir dans un nouveau traitement de texte :
j'ai peut-étre découvert un logiciel capable de vous intéresser.
ll est diffusé par Internationale Systeme Machine (ISM)*, une société lyonnaise qui
développe une gamme de logiciels destinés 4 améliorer et optimiser l'emploi des
ordinateurs.
Il s'agit de PRIM-TEXT (480 F HT, mais avec timer et alarme). II m‘a paru d'une réelle
simplicité parce que convivial en diable. II autorise la manipulation de blocs, la justi-
fication automatique, la frappe kilométrique, la recherche et le remplacement, la
césure automatique, etc.
Il est auto-documenté en frangais et peut étre utilisé de deux maniéres différentes :
4. Sans le Driver et sans le Chrono (impossibilité d’employer les différents caracté-
res et non disponibilité du Timer/Alarme/Bloc-note/Table ASCII).
®. Avec ses accessoires et l'on a alors accés (avec les touches de fonctions F2 4F10)
aux différents styles de caractéres, ainsi qu’au chrono (ALT-1 48).
Un traitement de texte sympa, peu ambitieux, mais suffisant dans bien des cas, pour
réaliser des impressions soignées. Nestor.
"ISM, 2, Quai du Commerce 69009 LYON — Tél. ; 7847.76.08.
Chez le méme éditeur :
FT ES
ILICO, accélérateur logiciel pour PC, permettant de
multiplier la vitesse d'exécution de vos applications
(Dbase, bases de données diverses). ILICO assure une
réécriture des routines d’entrées/sorties du DOS totale-
ment compatible, permettant des temps d'accés et de
chargement des fichiers de 2 4 2 fois plus courts. C'est
un logiciel trés facile & utiliser puis qu'il suffit de le lan-
cer par un seul mot : ILICO !
— / ace 12 [| ———<—$—$— —
/ NESTOR —APPLEsOFT:M / ==
GET SPECIAL
Comment afficher la mention
” a TEXT : PRINT CHR$ (21): HOME
fi Pi ses eg TOUCHE ah la PRINT CHRS (4)"BLOAD GETS/GETS.LM“: VTAB 3.
igne 24 dun écran 40 colon- FOR | = 1 TO 879: PRINT "A":: NEXT
nes, en mode inverse, puis POKE 2039,193: VTAB 1: CALL - 868
retrouver le contenu éventuel CALL 768
de cette ligne ? PRINT : VTAB 1: CALL - 868: PRINT "Vous avez pressé
la touche ";
Le contenu de fa touche pres- T = PEEK (6) - 128: IF T<32 THEN PRINT "CTRL-";:T
sée est mémorisé en 86. La Paine ol fi
démo % Basic montre exacte- IF PEEK (6) <> 155 THEN 30
ment le fonctionnement de VTAB 1: PRINT "(1) ENCORE (2) APPLESOFT (3) MENU
cette courte routine. DISK ": CALL 768
R = PEEK (6) - 176: IF R = 1 THEN 25
IF R = 2 THEN HOME : END
IF R = 3 THEN PRINT CHR$§ (4)"RUN STARTUP”
GOTO 55
300: 20 18 G3 JSR $0318 Vers Bascule.
303: 2C W CO BIT $Co1G Clavier initialisé.
306: 2C W CO BIT $C030 Clic haut-parleur.
ht : iy a FC Wee tong al Boucle d’attente (WAIT) en fonction de A.
oe : oP be oo we peel il Si aucune touche n'a été pressée, a refaire.
32: way BIT $co1d Clavier 4 zéro,
316: 8&5 6 STA $06 Contenu de |'Accumulateur dans $6.
BASCULE
318: AD 2C G3 sLDA $032
31B: 48 PHA
31C: AD 2F 93 LDA $032F On inverse alternativement
SIF: 8D 2€ @3 STA $032C Je contenu des adresses $32C et $32F
322: 68 PLA
323: 8D 2F @3 STA $632F
MEMO/AFPFICHAGE ——— —___
326: AQ 12 LDY £$12 1. La partie de ligne-écran concernée est mémorisée a
328: 89 DO G7 LDA $07D0,Y partir de $34C et remplacée par le texte ($338).
328: 99 38 G3 STA $0338,Y 2. Quand une touche a été pressée, c'est le contraire
32E: BY 4C G3 LDA $934C,Y qui est réalisé et I'écran retrouve son aspect.
331: 99 DG O7 STA $07D9,Y
334: 88 DEY
335: 10 FI BPL $0328 *338.34B
337: 60 RTS 20:«10 «12 «05 13 °«13 «G5 IA
20:15 GE G5 20 14 OF 15
03 08 65 20
“ PRESSEZ UNE TOUCHE ” (en mode inverse)
Ke / PACES | —
—— / Nestor —appiesort/im /
GET SPECIAL
Cette seconde version est une petite démonstration qui vous montre la rapidité de I'affi-
chage en langage machine. La routine d'affichage est pokée a la fin du programme en
BASIC (ligne data 90). Les adresses du désassemblage obtenu pourront étre différentes si
vous avez modifié une seule des lignes en Basic, mais c’est sans importance.
CGETS.BAS1
LOMEM: 29 + ( PEEK (105) + PEEK (106) * 256)
TEXT ; PRINT CHR$ (21): HOME : GOSUB 75
PRINT CHR$ (4)"BLOAD GETS/GETS.LM": POKE 6,193
PRINT : CALL AD
VTAB 1: CALL 768: PRINT : VTAB 1: CALL - 868: PRINT "Vous avez pressé la touche “;
T = PEEK (6) - 128; IF T< 32 THEN PRINT "CTRL-";:T = T + 64
PRINT CHR$ (T)
IF PEEK (6) < > 155 THEN 25
VTAB 1: PRINT (1) ENCORE (2) APPLESOFT (3) MENU DISK ": CALL 768
R = PEEK (6) - 176: IFR = 1 THEN 25
iF R = 2 THEN HOME : END
IF R = 3 THEN PRINT CHR$ (4)”RUN STARTUP”
GOTO 5¢
AD = (PEEK (105) + PEEK (106) * 256) ~ 29
FOR| = AD TO AD + 28: READ R: POKER: NEXT
RETURN
DATA 165,6,201,32,176,2.9,128,162,2,72,123,32,71,248,104,160,39, 145,38, 136,16,251,
232,224 ,24,144,238,96.
AGI: AS 06 LDA $06 On prend la valeur du caractére dans $6.
Ags: Co 26 CMP £$20 Bitte ticat hlecon t
AGS: BO 92 BCS $GA09 e n'est pas un contréle, on saute.
AG7: 99 80 ORA £$80 Sinon on le transforme en caractére affichable.
AG?: A2 G2 LDX £$02 X =2 pour commencer 4 cette ligne.
AGB: 48 PHA Valeur de A empilée.
AGC: BA TXA ‘| X dans A pour que GBASCAL calcule l’adresse de base
AGD: 2@ 47 FB& JSR $F847 de la ligne.
AIG: 68 PLA Récupération de A.
All: AQ 27 LOY £$27 Longueur de ligne dons ¥.
Ald: 91 26 STA ($26),¥
AlS: 88 DEY ] Une ligne du carac.ere dont le code est dans A.
Alé: 10 FB BPL $0A13
Allg: E8 INX + une ligne,
iis ; + 7 Se er Si orc attei ila limite on a fini. Sinon...
AID: 60 RTS Retour au Basic.
— / ce f oe
/ NESTOR —APPLESOFT/AM / —
DEMO MIXTE (GR ou TEXT)
GETS.BAS2
LOMEM: 29 + ( PEEK (105) + PEEK (106) * 256)
PRINT CHR$ (4)"BLOAD GETS/GETS.LM": POKE 6,193
TEXT : PRINT CHR$ (21): HOME : RESTORE : GOSUB 75
PRINT : CALL AD
VTAB G1: CALL 768: PRINT : VTAB G1: CALL - 868: PRINT "Vous avez pressé la touche ";
= PEEK (6) - 128: IF T< 32 THEN PRINT "CTRL-";:T = T + 64
PRINT CHRS (T)
IF PEEK (6) < > 155 THEN 25
VTAB G1: PRINT "(1) ENCORE (2) APPLESOFT (3) MENU DISK ”: CALL 768
R = PEEK (6) - 176: IFR = 1 THEN 20
IF R = 2 THEN TEXT ; HOME : END
IF R = 3 THEN PRINT CHR$ (4)"RUN STARTUP”
GOTO 50
AD = ( PEEK (105) + PEEK (196) * 256) - 29
VTAB 21: PRINT "TAPER (1) POUR MODE GRAPHIQUE ";: GET R$: PRINT
FOR | = AD TO AD + 28: READ R: POKE I,R: NEXT : IF R$< > "1" THEN POKE
2150,48: POKE 2151.49: POKE 2161,48: POKE 2162.49: POKE 2273,48: POKE
2274,49: RETURN
GR : POKE AD + 9,0: POKE AD + 25,20: POKE 215,50: POKE 2151,50: POKE
2161,50: POKE 2162,50: POKE 2273,50: POKE 2274.50: RETURN
DATA 165,6,261,32,176,2,9,128,162,2,72,138,32,71,248,104,160,39,145,38,136,16,
251 ,232,224,24,144,238,96
En modifiant quelques lignes de GETS.BAS] ... et en ajoutant quelques POKES bien ajustés,
il est possible d'observer I'effet de GETS en mode TEXT ou en mode GR.
Ces modifications concernent :
{. L’AFFICHAGE du texte qui passe de /a ligne G1 a la ligne 22.
2. LE REMPLISSAGE de I’écran qui va de 1 419 au lieu de 3.4 24.
Attention | Le programme BASIC s‘automodifie, ce qui comporte bon nombre de ris-
ques. Qu’un seul espace de VOTRE programme soit différent du NOTRE...
et rien ne va plus !
Notez qu'il est facile, en passant en mode moniteur, puis en examinant la mémoire, de
vérifier si les bonnes valeurs se trouvent bien aux bonnes adresses. Considérez en tout
cas cet ajout comme un exercice amusant... et rien de plus.
Cest aussi cela ‘informatique personnelle ! NESTOR.
a / nc 5 f/f —
= / cesuivres /
© GUIDE MICROSOFT
DE MS-DOS 3.1 43.3
(Ray Duncan)
Difficile de trouver plus compétentes que
les Editions Microsoft Press pour parler de
MS-DOS ! On soit que ce systéme d'exploi-
tation, mis au point par Microsolt Corp, est
actuellement le plus utilisé dans le monde.
Il tourne en effet sur une dizaine de millions
de micro-ordinateurs et il est & la base de
plus de 20.09 applications.
Cest aussi le mieux connu et l'on ne compte
plus les ouvrages consacrés ses diverses
versions.
Celui de Microsoft Press est destiné a tous
les utilisateurs et passe en revue, d'une
maniére trés détaillée, toutes les comman-
des internes et externes du DOS sur PC, PS
et compatibles,
Il traite aussi les options de configuration du
systéme, ainsi que les directives spécifiques
aux fichiers de commandes, & |'éditeur
EDLIN et aux fichiers de gestion de périphé-
riques (DRIVER.SYS).
Un guide complet, @ garder a portée de la
main,
PCY. Diffusion — BP 86 77402 LAGNY/SUR/MARNE
290 pages sous couverture cartonnée — 285 F
© APPRENDRE SPRINT
(Jean-Claude De Vos)
Monuel de formation de lo collection
Cedic/Nathan, bien rédigé et trés bien pré-
senté, comme tous les ouvrages de cette
série. Le traitement de textes de Borland est
un produit séduisant et a déjd conquis bon
nombre diutilisateurs de PC et compati-
APPRENDRE
SPRINT
bles. Sa documentation es! copieuse, mais
ce manuel dinitiation ne fait pos double
emploi. C'est une approche différente, inté-
ressante a bien des égards, un tour d’hori-
zon complet du logiciel, avec des informa:
tions indispensables ov néophyte... et par-
fois peu connues des habitues.
A offrir & toute personne désirant découvrir
rapidement et méthodiquement ce traite-
ment de textes de la nouvelle génération.
PCV. (360 pages — 235 F)
© LELIVRE DE L‘AT
(Jérg Schieb)
UAT est une machine ouverte, particuliere-
ment configurable et disposant d'un grand
nombre de périphériques. Auteur de nom-
breux ouvrages et logiciels, Jérg Schieb
nous propose de découvrir les outils inter-
nes de |'AT pour une exploitation plus puis-
sonte et plus conviviale de la machine.
LE LIVRE DE LAT est une manne d'informa-
tions sur le fonctionnement interne de lo
machine, ses périphériques, ses différentes
configurations... Le lecteur découvrira av fil
des pages comment créer ses propres outils
de développement ou d'exploitation : savoir
par exemple installer un RAM disque, oug-
menter les performances de son clovier ov
gérer les interruptions du microprocesseur,
Autont d’ostuces fort précieuses pour une
totale harmonie entre [utilisoteur et so
machine
Chacun des thémes traités dispose d'une
ponoplie complete d’exemples (program-
mes, instructions, adresses-clés du
systéme...) destinés élargir I'horizon du
lecteur dans ses développements ultétieurs.
Voici un apercu des principoux sujets
étudiés :
— Description général du systeme.
— Les différences essentielles entre le XT
et AT.
— Uinstallation et l'utilisation approfon-
die du DOS (version 3.3 incluse).
— lo pfogrammation des cartes vidéo
(CGA, EGA, VGA, PGA, AGA, HERCU-
LES (plus).
— Uattichage a I'écran : modes texte et
grophique.
— Le fonctionnement et lo personnalisa-
tion du clovier (macros, occélérateur
du clavier...),
— Uexploitotion des ports série et paral-
lle : brochage des cdbles, connexion
des imprimantes, périphériques leurre,
redirection des entrées/sorties.
— Les extensions du systéme y compris la
gestion des cartes d’extension
mémoire : EMS, EEMS, LIMS.
— Les systémes d'exploitation et environ-
nements porticuliers : XENIX, WIN-
DOWS, GEM.
— Le systéme d'exploitation de demain :
OS/2.
Bénéficiont d'un style agréable tant dans
Pécriture que dons la lisibilité des schémas,
Jo voleur des informations du L/VRE DE UAT
permettra au lecteur d’assimiler tres rapide-
ment les informations jusqu’a les intégrer
porfaitement dans ses travaux quotidiens.
EDITIONS MICRO APPLICATION
13, eve Sainte-Cécile 75009 PARIS
(390 pages — 199 F)
—/aa6 | ——_—____ eer
/ Emile scuwarz—Lancace / —
LE TML BASIC
existe... Emile I'a essayé !
Le trés attendu TML BASIC est enfin arrivé.
Pour la modique somme de $125.00 (prix
catalogue), vous obtiendrez une disquette et
le manuel.
Le logiciel est livré avec le systame 3.1, soit
ProDOS 16, version 1.3 évidemment équipé
du FINDER anglais.
Ce manuel (environ 500 pages au format
17,5cm X 21 cm) vous donne tous les rensei-
gnements utiles sur le fonctionnement du
logiciel. Il est divisé en quatre parties :
1. Le guide de l'utilisateur ;
2. Laréférence du langage ;
3. Programmer en utilisant la boite 4 outils ;
4, Les annexes.
Ce logiciel fonctionne en mode "Desktop”,
c'est-d-dire qu'il utilise les menus déroulants et
les fenétres. Chaque programme — chaque
source — est affiché dans une fenétre. Vous
pouvez avoir quatre fenétres — quatre sources
— visibles a I'écran, mais il est bien entendu
qu'il n'y a qu'un seul programme actif.
1d REM MAKE.EXEC.TML
20 PRINT “Fait un EXEC de transfert de fichier .GSB en .TML”
30 OPEN "TRANSFERT", FILTYP = TXT FOR OUTPUT ASE£1
40 PRINT£1;"HOME”:REM Texte du fichier EXEC
50 PRINT£1;"REM Syntaxe: EXEC,”:CHR$(34);"PROG.GSB, SOURCE.TML"
60 PRINT£1:"LOAD 618":REM Charge le programme GS Basic
Dans l'annexe D, vous trouverez les différen-
tes instructions inconnues en TMLBASIC ou
utilisées différemment, plus une liste des
nouvelles. En fait, pour les instructions non
reconnues, il s‘agit essentiellement de celles
fonctionnant en mode immédiat, plus quel-
ques autres telles que: BASICa, CONT,
COPY, DIR, INVOKE/PERFORM, TRACE/
NOTRACE, LIBFIND, PROGNAM$ et QUIT.
Presque toutes ces instructions sont évidem-
ment inutiles ou inutilisables dans l'environ-
nement TMLBASIC car véritablement dépen-
dantes d'un interpréteur.
Il s'agit la d'un Basic 16 bits, trés puissant,
capable de compiler sur disque, sous forme
d'un fichier application, le source que vous
avez écrit. Comme il est précisé dans la
publicité, vous avez la possibilité de récupé-
rer les programmes écrits en GS Basic. Pour
cela, utilisez le petit EXEC “TRANSFERT”.
En mode immédiat, tapez le programme ci-
dessous, puis "RUN" pour créer le fichier
EXEC :
76 PRINTE1;"OPEN 62@,FILTYP = TXT FOR OUTPUT ASE1”
80 PRINT£1;"A=LISTTAB :OUTREC =@ :LISTTAB=128+A”
90 PRINTE£1;"OQUTPUT £1 : LIST : OUTPUT £6”
100 PRINT£1;"“OUTREC = 86 : LISTTAB = A”:REM Restaure les valeurs
11d PRINTE£1;"CLOSE £1":REM Ferme le fichier de destination
120 PRINTE1;"REM Transfert terminé”:REM Fin du transfert
130 CLOSE£1:REM Ecriture de l'EXEC terminée
140 FIN. :END
/ Pacet7 /
— ferme [<<
Vous pouvez également utiliser votre traite-
ment de texte habituel et taper le texte situé
entre les deux REMarques, puis le sauver
dans un fichier du type TXT sous le nom de
"TRANSFERT".
La syntoxe d'appel de cet EXEC est :
EXEC TRANSFERT, "PROGRAMME.GSB, PROGRAMME. TML"
TRANSFERT est le nom du fichier EXEC,
PROGRAMME.GSB est le programme en GS Basic,
PROGRAMME.TML est le fichier source en TML BASIC.
LE TML BASIC n’‘utilise pas les numéros de
ligne, ce qui nous oblige 4 employer LISTTAB
=128+A (ancienne valeur). En effet, dans
ce cas le programme sera listé sans numéro
de ligne. OUTREC=@ permet d’avoir des
lignes sans aucune tabulation ni CR intem-
pestifs. Une fois cette opération effectuée, il
vous est possible de récupérer le fichier
texte avec le TML BASIC. Vous pouvez égale-
ment vous servir des instructions décrites 4
la page 482 du manuel de l'utilisateur du TML
BASIC.
Une fois votre “source” écrit, vous avez la
possibilité d’appeler le “debugger” intégré
en cliquant dans le menu Compile l’option
Check Syntax, ou bien en utilisant I'équiva-
lent clavier Pomme-Y. Si la syntaxe est cor-
recte, vous pouvez, grace 4 To Memory &
Run (Pomme-M) ou To Disk (Pomme-D), exé-
cuter ou sauver sur disque, sous forme de
fichier $B3 (ou $16), le résultat de la
compilation.
Je ne m’étendrai pas davantage sur la des-
cription de ce Basic, mais je vous propose un
petit programme que j'ai repris du GS Basic
et qui fonctionne sans presque rien changer.
Reportez-vous 4 Tremplin Micro numéro 19,
pour le programme d'origine.
Voici les modifications apportées (mise 4
part I'absence de numéros de lignes) :
a. ‘apostrophe peut remplacer le REM ou
:REM ;
b. L'instruction LIBRARY n'est pas suivie par
APPEND ;
c. Lutilisation du IF... THEN... ELSE ... END
iF
d. J'ai été amené 4 passer $E1C029 NEWVI-
DEO en mode linéaire par un poke.
Une remarque s‘impose :
IL EST IMPERATIF DE NE PAS TENTER DE
CHARGER UNE IMAGE COMPACTEE.
En effet, pour des raisons de compacité, je
n‘ai pas fait de test sur le type de fichier en
cause. Vous pouvez donc charger un écran
32k du type BIN ou PIC ($C) aux $0000).
Vous trouverez sur la disquette d'accompa-
gnement (qui est indispensable !) en plus du
source TMLBASIC, le fichier application qui
est utilisable sous le Finder ou le Launcher.
Et pour les amateurs, voici l'adresse ot vous
procurer ce TML BASIC :
TML Systems, Inc.
8837-B Goodbys Executive Drive
Jacksonville, Florida 32217
United States of America
P.S.: Pour les amateurs de Pascal, il existe aussi
un TML PASCAL pour Apple lIGS.
Il existe un TML PASCAL pour le Macintosh...
UTIL. TML
' Charge et affiche une image au format ecran 32k
‘ Exemple de programme TML BASIC
LIBRARY "Memory"
/ paces /
LIBRARY "QuickDraw™
DIM pic! (32767)
/ Emile scHwarz— ancace /
Taille tableau = image 32K
Input "Nom de l'image a charger: ";PicS$
IF File(Pic$) THEN
OPEN Pic$, AS £11,32767
GET £11;Pic! (0)
CLOSE £11
ELSE
Ouvre le fichier image
Stocke l'image dans le tableau
Ferme le fichier
PRINT “L'image "Pic$" est inconnue."
Picg=""
END IF
ON PicS="" GOTO Fin
POKE 14794793,97
dest a=TEN ("£12000")
sourcea=VARPTR (Pic! (0}}
longa=32767
_BlockMove (sourcea, desta, longa)
Graf On
Image inconnue = fin programme
Passe en mode lineaire
Stocke l'adresse de destination
Stocke l'adresse de depart
Nombre d'octets a recopier
Recopie l'image dans le buffer
Affiche l'image
PRINT “Pressez une touche pour quitter"
GETS a$
Home
Graf Off
END
Attente clavier
Repasse en ecran texte.
LE LANGAGE DE 5° GENERATION ORIENTE APPLICATIONS
TURBO PROLOG
BORLAND INTERNATIONAL annonce Ia disponibilité de la version américaine de TURBO PROLOG 2.0.
Cette nouvelle version apporte un support externe de bases de données, un interpréteur, un guide
tuteur de 350 pages et un support graphique étendu. TURBO PROLOG 2.0 permet également de dévelop-
per des bases de données plus importantes gréce & une nouvelle série d'outils.
Avec plus de 109009 utilisateurs, TURBO PROLOG est le
langage de 5° génération sur micro le plus utilisé dans le
monde. A la différence des langages procéduraux tradi-
tionnels, TURBO PROLOG offre un code compact trés lisi-
ble et facile & gérer. Utilisant seulement le dixigme de
lignes codées normalement nécessaires pour une appli-
cation écrite dons un langage procédural, il autorise une
trés grande rapidité de programmation.
“Avec la version 2.0, TURBO PROLOG apporte les outils
nécessaires pour développer de puissantes applications
commerciales dans les domaines tels que la gestion de
bases de données, les systémes experts, les interfaces
de langage naturel, les bases de connaissances et les
systémes d‘informations intelligents.” déclare Philippe
KAHN, Président et fFondateur de BORLAND
INTERNATIONAL.
Rappelons que BORLAND INTERNATIONAL a été fondée
en 1983 par Philippe KAHN a Scotts Valley en Californie.
le siege européen a été créé en juillet 1986 par Alain
BLANCQUART, Vice Président Europe. Aujourd’hui, BOR-
LAND INTERNATIONAL compte un effectif de plus de 650
personnes dont 75 sur la France. Le chiffre d'affaires
pour ses trois premiers trimestres fiscaux (du 1*' avril au
3) décembre 1987) de 47,3 Millions de Dollars fait appa-
roitre une progression de 110% par rapport 4 la méme
période l'année précédente (22.5 Millions de Dollars).
* Uniquement sur PC et compatibles disposant de 384/640 K de mémoire. (Disque dur conseillé). Prix : 1495 F HT.
=— ee / Pace |
— / anaré BRossaup—csBasic /
LE JEU DE YAM
en GS Basic
Voici le premier jeu programmé en GS Basic. II utilise le principe (cher 4 Apple) de la
souris. Le programme commence par demander si I’on désire consulter la régle. Si
oui, il affiche les trois écrans d'aide. Dans le cas contraire, il donne immédiatement
l'image du jeu et attend une action du joueur, celle-ci pouvant se déclencher 4 partir
du clavier (pression d'une touche) ou bien de la souris (un ou plusieurs clicks).
Avant d’entrer dans le jeu, le joueur doit décliner son identité et indiquer s’il est seul
ou accompagné d'un partenaire.
En ce qui concerne Ia programmation, on constatera que limage utilisée est une image
compactée de type $C0 aux $0001. Le petit module de décompactage est extrait du
programme d'Emile SCHWARZ (que vous découvrirez dans ce méme numéro).
Bibliographie: © La boite a outils de l'Apple lIGS de J.-P. Curcio (Editions PS!)
= * Les clés pour I'Apple lIGS de N. Bréaud-Pouliquen
* Le Manuel du GS Basic.
10 REM ****** YAM far André Brossaud (c) Mars 1988 ******
20 REM
sO CLEAR 256200:HOME:GRAF INIT 320
60 ON ERR GOTO erreur
70 DIM pic! (11000), imyam! (32767), event! (16),msg! (256),4r(7),b! (5)
80 DIM t(1,12),b(12),des(5),de(5) :nt=1
110 FOR i=1 TO 12:READ b{i) :NEXT
120 DATA 1,2,3,4,5,6,20,30,40,50,1,1
140 T LIBFIND "QDStartUp",ql%,q2%,q3%
150 IF ql% GOTO prelude
160 LIBRARY "tdfs/quickdraw.tdf"
170 LIBRARY APPEND "tdfs/memory.tdf"
180 LIBRARY APPEND "tdfs/misctool.tdf"
190 LIBRARY APPEND "tdfs/event .tdf"
200 PRELUDE: PROC loadim:GRAF ON:_ShowCursor:PROC debut
220 DEBJEU: PROC NbreJo:PROC affnom
300 REM * Jeu de 1 4 3 coups *
310 JEU: c=1:ht=218:v=32:sbc%=4;IF n=1 THEN h$=244:sbc%=8
320 IF nt>9 THEN ht=h%-8
330 PROC msg (h%,v%, sbc%, sfct, STR$ (nt) )
345 ON nf(n)=12 GOTO passe
350 COUPS: IF c>3 THEN GOSUB replace:GOTO figure
360 REM * Joue, Satisfait, Rechoisir *
/ Pacezo /
/ tf s6U DE YAM EN Gs Basic /
370 CHOIX: PROC event
410 ON y%>150 AND y%<163 AND x%>160 AND x%<236 GOTO joue
420 IF y%>180 AND y%<193 AND x%>160 AND x%<236 THEN GOSUB replace:
GOTO figure
430 IF y%>165 AND y%<178 AND x%>160 AND x%<236 THEN GOSUB replace:
GOTO Choix
440 IF y%>180 AND y%<193 AND x%>244 AND x%<310 THEN GOSUB quitte
450 REM * Choix des dés *
460 FOR it=1 TO 5:_SetRect (r,131+30*i%, 58,155+30*i%, 80)
470 ON EXFN_PtInRect (Pta+10,r)=-1 GOTO deplace
480 NEXT:GOTO choix
520 DEPLACE: ON de{it}>0 GOTO Choix
530 dc (i%)=1:PROC effdes(0):PROC affdes (46)
540 GOTO Choix
550 REPLACE: FOR it=1 TO 5:0N dc{it)=0 GOTO 570
560 dc (it)=0:PROC effdes(46):PROC affdes(0)
570 NEXT; RETURN
580 JOUE: FOR it=1 TO 5:PROC effdes(0) :NEXT
590 FOR it=1 TO 5:0ON dc(it)>0 GOTO 610
600 des (i%)=INT(RND(1)*6)+1:PROC affdes (0)
610 NEXT:c=c+1:GOTO coups
620 REM * Choix des figures *
630 FIGURE: PROC event
640 ON y%>150 AND y%<163 AND x%>244 AND x%<310 GOTO passe
650 IF y%>180 AND y%<193 AND x%>244 AND x%<310 THEN GOSUB quitte
660 FOR £%=1 TO 12: _SetRect (r,42,17+10*£%,118,26+10*£%)
670 ON EXFN_PtInRect (Pta+10,r)>-1 GOTO 700
680 ON £%<7 GOTO unasix
690 ON £%-6 GOTO full,carre, suite, yam,mini,maxi
706 NEXT:GOTO figure
820 REM * Validations des Figures *
830 UNASIX: ON T(n,f%)>0 GOTO figure
840 FOR it=1 TO 5:IF des(it)=£% THEN T(n,£%)=T(n,£%)+1
BE NEXT:ON T(n,£%)=0 GOTO figure
860 Goro resultat
870 FULL: ON T{n,i%)>0 SOTO igure
880 k=des (1) :kl=k:j3=0
890 FOP. it=2 TO 5:IF des(it)<>k THEN kl=des(i%)
900 NEXT
910 FOR it=2 TO 5:0N des(it)<>k AND des(it)<>kl GOTO figure
920 NEXT
930 FOR it=2 TO 5:IF k=des({i%) THEN j=j+1
940 NEXT:ON j=0 OR 3=3 GOTO figure
950 T(n,7)=1:GOTO resultat
960 CARRE: j=0:0N T(n,8)>0 GOTO figure
970 FOR it-2 TO 5:IF des(it)=des(1) THEN j=j+1
980 NEXT:ON j>2 GOTO 1010
990 FOR it=3 TO 5:0N des(i%)<>des(2) GOTO figure
1000 NEXT
1010 T(n,8)=1:GOTO resultat
1020 SUITE: ON Tin,9)>0 GOTO figure
1030 FOR it=2 To 5
1040 IF des (i%-1)>des(i%) THEN j=des (it) :des (it) =des (i%-1) :des (i$-1)
=j:GOTO 1030
1050 NEXT: 5=0
/ pace 21 /
1060
1070
1080
1090
1100
1110
1120
1130
1140
1150
1160
1170
1180
1190
2000
2010
2020
2040
2050
2060
2070
2080
2090
2100
2120
2130
2140
2150
2160
2170
2180
2220
2230
2240
2300
2310
2320
2400
2410
2420
2430
2440
2450
2500
2510
2520
2530
2540
2550
2560
2570
2580
2600
2620
2630
YAM:
MINI:
MAXI:
RESULTAT:
PASSE:
FPARTIE:
QUITTE:
REJOUER:
AFFDES:
DE1:
DE2:
DE3:
DEA:
/ Pace 22 /
/ te seu DE vYameNcssasic /
FOR it=2 TO 5:IF des(i%)-des(i%-1)<>1 THEN j=j+1
NEXT:ON j>0 GOTO figure
T(n,9)=1:GOTO resultat
ON T(n,10)>0 GOTO figure
FOR it=2 TO 5:0N des({1)<>des(it) GOTO figure
NEXT: T(n,10)=1:GOTO resultat
j=0;:0N T(n,11)>0 GOTO figure
FOR it=1 TO 5:j=j+des (it) :NEXT
ON T(n,12)>0 AND T(n,12)<=j GOTO figure
T(n,11)=j:GOTO resultat
j=0:ON T(n,12)>0 GOTO figure
FOR it=1 TO 5:j=j+des (i%) :NEXT
ON T(n,11)>0 AND T(n,11)>=j GOTO figure
T(n,12)=}:GOTO resultat
REM * Resultat *
nf (n) =nf (n) +1:s%=b(f%)*T(n,£%) :IF £%>10 THEN s%t=T(n, £%)
h$=31:v%=25+10*£%:IF n=1 THEN ht=137
IF st>9 THEN ht=ht-8
PROC msg (ht, vt, 12,0,STRS$(s%))
s%=0:FOR it=1 TO 12:s%=s%+b (it) *T(n,i%) :NEXT:T(n,0)=s%
h$=31:v%=159:IF n=1 THEN ht=137
IF s%>99 THEN h%=h%-16:GOTO 2100
IF s%>9 THEN ht=h%-8
PROC msg (h%, v%, 13, 0, STR$(s%))
REM * Joueur suivant *
FOR i%=1 TO 5:PROC effdes (0) :NEXT
n=n+1:ON n<nj GOTO jeu
nt=nt+1:ON nt>20 GOTO fpartie
n=0:GOTO jeu
REM * Fin de la partie *
PROC event
ON y#>165 AND y%<178 AND x%>244 AND x%<310 GOTO rejouer
IF y$>180 AND y%<193 AND x%>244 AND x%<310 THEN GOSUB quitte
GOTO fpartie
PROC msg (174,90,7,0,"En "+CHR$(144)+"tes vous s"+CHRS$(158)+"r")
PROC reponse:IF 1%=0 THEN RETURN
_ClearMouse:GRAF OFF:END
REM * Rejouer *
_BlockMove (sourced, desta, longa) :nt=1:n=0:nf (0) =0:nf£(1)=0
FOR i8=0 TO 1;:FOR j%=1 TO 12:T(i%,4j%)=O:NEXT j%,i%
PROC msg(168,90,7,0,"Les m"+CHR$(144)+"mes joueurs")
PROC reponse:IF 1%=1 THEN PROC affnom:GOTO jeu
GOTO debjeu
REM * Affiche les dés *
DEF PROC affdes (vt) :h=30*i%
_Set.Rect (r,131+ht, 58+v%, 155 tht, 80+v%)
_SetSolidPenPat (9) :_PaintRect (r) :_SetSolidrenPat (0)
v1S=614+vb :v2$=68+vF : vVIE=7TStVvS2N1S=135+hs :h2$=142+hs :h3t=149+hs
ON des(it) SOTO del,de2,de3,de4,de5,de6
END PROC affdes
yt=v2%:x%=h2%:PROC pts:GOTO 2560
yt=v1%:x%=h1%:PROC pts:y%=v3%:xt=h3%:PROC pts:GOTO 2560
yt=v1b:xt=h1%:PROC pts:yt=v3%:xt=h3%:PROC pts
yt=v2%:xt=h2%:PROC pts:GOTO 2560
yt=v1%:xt=h1%:PROC pts:yt=v3%:x%=h3%:PROC pts
2650
2670 DES:
2690
2710
2720 DEG:
2740
2760
2774 POINTS:
2780
2790
3000 EFFDES:
3020
3030
3040
4200 EVENT:
4210
4220
4230
4240
4399
4400 NBREJO:
4410
4420
4450
4460
4470
4480
4490
4600 CAPTURE:
4610
4620
4630
4632
4634
4636
4638
4640
4650
4660
4670
4680
4800 AFFMSG:
4810
4820
4830
5000 AFFNOM:
5010
$030
5040
5300 DEBUT:
5302
5303
5304
/ LE JEU DE YAMEN GsBasic /
yt=v3%:xt=h1%:PROC pts:yt=v1%:x%=h3%:PROC pts:GOTO 2560
yt=v1%:x%=h1t:PROC pts:y%=v3%:x%=h3%:PROC pts
yt=v2%:xt=h2t: pts:yt=v3%:x%=h1%:PROC pts
yt=v1t:xt=h3 pts:GOTO 2560
yt=v1t:xt=hl%:PROC pts:y%=v3%t:xt=h3%:PROC pts
yt=v3%:xt=hlt:PROC pts:y%=v1%:xt=h3%:PROC pts
yt=v2%:xt=h1%:PROC pts:yt=v2%:xt=h3%:PROC pts:GOTO 2560
DEF PROC pts
_SetRect (r,xt, yt, x%+2,y%+2) :_PaintRect (r)
END PROC pts
DEF PROC effdes(v%) :h%=30*i%
_SetRect (r,131+h%, 58+vt, 155+h%, 80+v%)
_SetSolidPenPat (7) :_PaintRect (r)
END PROC effdes
DEF PROC event
_FlushEvents (~1, 0) :Pta=VARPTR (event ! (0) )
_GetNextEvent (-1,Pta) :0N event! (0)+event ! (1) *256=0 GOTO 4220
yt=event ! (10) +tevent ! (11) *256:x%=event ! (12) +event ! (13) *256
END PROC event
REM * Nombre de Joueurs & leurs noms *
DEF PROC nbrejo:PROC msg(160,82,7,0,"Nombre de joueurs: ")
PROC capte (288, 82,0) :nj=ASC(n$)-48
IF nj<l OR nj>2 THEN PROC msg(296,82,7,7," “):GOTO 4410
PROC msg (160,98,7,0,"Votre Nom :"):PROC capte (232, 98,7) :nl$=n$
ON nj=1 GOTO 4480
PROC msg(160,110,7,0,"Votre Nom :"):PROC capte(232,110,7):
n2$=n$
PROC fen(155, 68, 310,130, 7)
END PROC nbrejo
DEF PROC capte(h1%,v%,ca%) :ht=0:i=0:n$=""
GETSX$:X$=CHR$ (ASC (X$)-128) :ON X$=CHR$(13) GOTO 4670
ON XS=CHR$(127) GOTO 4650
ON i>cat GOTO 4610
IF X$=CHR$(123) THEN X$=CHRS$ {ASC (X$) +19)
IF XS=CHR$(125) THEN X$=CHRS (ASC (X$) +18)
IF XS=CHR$(92) THEN XS=CHR$ (ASC (XS) +49)
IF X$=CHR$ (64) THEN XS$=CHRS (ASC (X$)+72)
ht=ht+8:i=it1:n$=n$+X$:PROC msg(hl%+h%, v%,7,0,X$) :GOTO 4610
ON n$="" GOTO 4610
PROC msg(hl$+h%,v%,7,0," ");:1=I-1:n$=MID$(n$,1,i) ;h¥=h%-8:GOTO
4610
ON n$="" GOTO 4610
END PROC capte
DEF PROC msg (h%, v%,sbc%, sfct,z$}
SET (msg! (0))=*z$:_SetBackColor(sbc%) :_SetForeColor(sfc%)
_MoveTo (ht, v%) :_DrawString(VARPTR (msg! (0)))
END PROC msg
DEF PROC affnom
PROC msg(14,21,4,0,n1$):0N nj=1 GOTO 5040
PROC msg(84,21,8,0,n2$)
END PROC affnom
DEF PROC debut
PROC msg(178,101,7,0, "Andr"+CHR$(142)+" Brossaud")
PROC msg(170,110,7,0,"et Tremplin Micro")
PROC msg{186,119,7,0,"(c) juin 1988")
/ Pace2s /
5310
5320
5330
5340
$350
5355
5360
5375
5380
5390
5410
6000
6010
6020
6100
6110
6120
6130
6140
6150
6160
6170
6180
6190
6500
6510
6520
6530
6540
6550
6560
7000
7010
7020
8000
8010
8020
8030
8040
8060
8070
8080
8090
8100
8110
8130
8140
FENETRE:
REPONSE:
LOADIM:
ERREUR:
AIDE:
/ Pace2s /
/ te Jeu DE VAMEN csBasic /
POR it=1 TO 5:des(i%)=INT(RND(1)*6)+1:PROC affdes (0) :NEXT
FOR i=l TO 600:ON EXFN_Button(0) GOTO 5340
NEXT:FOR i%=1 TO 5:PROC effdes(0) :NEXT:GOTO 5310
FOR i%=1 TO 5:PROC effdes(0):NEXT:PROC fen(155,68,310,140,7)
PROC msg(160,78,7,0,"Voulez-vous lire la")
PROC msg {188,88,7,0, "R"+CHR$ (143)+"gle du jeu")
PROC reponse:PROC fen(155,68,310,130,7)
ON 1%=0 GOTO 5410
GOSUB aide:GRAF INIT 320:_BlockMove(sourcea, desta, longa)
GRAF ON:_ShowCursor
END PROC debut
DEF PROC fen (h1%,v1%,h2%,v2%, ssp%)
_SetRect (r,h1%, v1%,h2%, v2%) :_SetSolidPenPat (ssp%) :_PaintRRect (
xr, 8,8)
END PROC fen
DEF PROC reponse:_SetSolidPenPat (15)
_SetRect (r,190,92,228,101):_PaintRRect (r, 8,8)
“setRect (r,235, 92,273,101) :_PaintRRect (r, 8,8)
PROC msg(198,100,15,0,"Oui") :PROC msg(242,100,15,0,"Non")
PROC event
IF y%>92 AND y%<101 AND x%>190 AND x%<228 THEN 1%=1:GOTO 6180
IF y%>92 AND y%<101 AND x%>235 AND x%<273 THEN 1%=0:GOTO 6180
GOTO 6140
PROC fen(164,82,298,102,7)
END PROC reponse
DEF PROC loadim:1%=10284
OPEN “imyame", FILTYP=192 AS£1,1%:GET£1;pic! (0) :CLOSE£1
SET (b! (0) )=VARPTR(imyam! (0)) :SET(b! (4) )=32768
_UnPackBytes (VARPTR (pic! (0)),1%,VARPTR(b! (0)),VARPTR(b! (4)))
sourcea=VARPTR (imyam! (0)) :desta=14753792: longa=32768
_BlockMove (sourcea, desta, longa)
END PROC loadim
OFF ERR:NOTRACE:GRAF OFF
PRINT "Erreur n°"ERR " “ERRTXTS(ERR)" 4 la ligne "ERRLIN:PRINT
END
PROC fen(0,0,320,200,1):PROC fen(2,2,318,198,0)
PROC fen(4,4,316,196, 4)
GRAF ON: _ShowCursor
PROC msg (86,20, 4,3, "R"+CHRS$(143)+"gles du jeu de Yam")
PROC msg(18,36,4,0,"Ce jeu se joue "+CHR$(136)+" un ov deux
joueurs et une")
PROC msg(10,46,4,0,"partie est compos"+CHRS$(142})+"e de vingt
tours.")
PROC msg(18,64,4,0,"0n joue de un "+CHR$(136)+" trois coups par
tour en")
PROC msg(10,74,4,0,"gardant si on veut certains d"+CHR$(142)
+"3.")
PROC msg(18,90,4,0,"Le but est de former des figures, groupes")
PROC msg(10,100,4,0,"de 1, 2, ..., "+CHRS$(136)+" 6, FULL (paire
+ triplet),")
PROC msg({10,110,4,0,"CARRE (4 d"+CHRS$(142)+"s “+CHRS$ (142) +
“gaux), SUITE (12345, 23456),")
PROC msg(10,120,4,0,"YAM (5 d"+CHR$(142)+"s “+CHR$ (142) +
“gaux).")
PROC msg(18,136,4,0,"0n a droit "+CHR$(142)+"galement "“+CHRS
/ .£JEU DE YAMEN GS Basic /
(136)+" deux figures")
8160 PROC msg(10,146,4,0,"donnant la somme des d"+CHR$(142)+"s mais
i1'une,")
8170 PROC msg(10,156,4,0,"MINIMUM, doit "+CHR$(144)+"tre inf"+CHRS(
142)+"rieur "+CHR$(136)+" l'autre, ")
8190 PROC msg{10,166,4,0, "MAXIMUM.")
8200 n$="SUITE";PROC btn
8220 PROC msg{18,36,4,0,"Cliquez sur 'JOUER' pour lancer les d"+
CHRS (142) +"s,")
8240 PROC msg(10,46,4,0,"puis sur ceux qui amorcent une figure et "+
CHRS (136) )
8250 PROC msg(10,56,4,0,"nouveau sur 'JOUER'.")
8260 PROC msg(18,76,4,0,"Si vous avez une figure avant la fin des")
8270 PROC msg(10,86,4,0,"trois coups, cliquez sur 'SATISFAIT' puis")
6280 PROC msg(10,96,4,0,"sur une des figures 'UN’ "+CHR$(136)+"
"MAXIMUM! .")
8290 PROC msg(18,116,4,0,"A la fin des trois coups, cliquez sur
une")
8300 PROC msg(10,126,4,0,"des figures ou sur 'PASSE'.")
8310 PROC msg(18,146,4,0,"Pendant la phase des trois coups, vous")
8320 PROC msg(10,156,4,0,"pouvez remettre les d"+CHR$(142)+"s en
place en cli-")
8340 PROC msg(10,166,4,0,"quant sur 'RECHOISIR'.")
8350 n$="SUITE":PROC btn
8380 PROC msg(18,36,4,0,"Les vingt tours termin"+CHR$(142)+"s vous
pouvez")
8390 PROC msg(10,46,4,0,"cliquer sur 'REJOUER' pour une nouvelle")
8400 PROC msg(10,56,4,0,"partie avec les m"+CHRS$(144)+"mes joueurs
ou d'autres")
8410 PROC msg(10,66,4,0,"joueurs.")
8420 PROC msg(18,89,4,0,"Enfin, pour sortir du jeu cliquez sur")
8430 PROC msg(10,99,4,0,"'QUITTER'.")
8440 n$="" FIN “:PROC btn
8450 RETURN
8460 BOUTON: DEF PROC btn
8470 _SetRect (r,106,173,210,190) :_SetSolidPenPat (0): _PaintRRect
(x, 12,12)
8480 _SetRect (r,108,175,208,188) :_SetSolidPenPat (15) :_PaintRRect
(x, 12,12)
8482 PROC msg(139,185,15,0,n$)
8484 PROC event:ON y%<173 OR y%>150 OR x%<106 OR x%>210 GOTO 8484
8486 PROC fen(4,24,316,196, 4)
8488 END PROC btn
Pour devenir un as du GS Basic, offrez-vous :
A LA DECOUVERTE
DU CS Basic
Utilisez le bulletin de commande, a la fin de la revue
Un ouvrage
TREMPLIN MICRO
260 pages + disquette.
/ Pacezs /
= / cnartyetF.sica.—Lancace c /
DE L‘APPLESOFT AU C
La majorité des lecteurs de Tremplin Micro connaissent l'AppleSoft et parmi eux, cer-
tains possédent un GS. Le langage C apporte de nets avantages par rapport au
Basic, entre autres la vitesse et la puissance de la programmation structurée. Voila
pourquoi nous vous proposons d‘adapter vos programmes Basic grace 4 quelques
fonctions d’entrées/sorties et de conversions en€
Ces fonctions utilisent trois outils du GS : TextTool, IntegerMath et SANE (Standard
Apple Numerics Environment).
Paramétres :
X : type int, représente la position horizon-
tale.
Y : type int, représente la position verticale.
— Initialisation et sélection de |'écran comme
périphérique de sortie et du clavier comme
périphérique d’entrée.
— Equivalent Basic : PRE3 suivit de IN£3. ¢ printword :
« selectScreen: — Envoie une chaine de caractéres sur le péri-
= a hérique courant.
— Sélection de I'écran comme périphérique de Liste a
sortie. — Equivalent Basic : PRINT AS:.
— Equivalent Basic : PRE3. — Paramétre : ; :
C :type pointer, représente la chaine de
° selectPrinter : caractéres de type C (chaine se termi-
nant par le code ASCII G) 4 envoyer.
— Sélection de l'imprimante comme périphéri-
que de sortie. * prin :
— Equivalent Basic : PREI. — Envoie une chaine de coractéres suivie d'un
- c retour & la ligne sur le périphérique
WawE Ne : ame : courant.
— Envoie un saut de ligne sur le périphérique — Equivelent Basic : PRINT AS.
de sortie courant. — Paramétre :
— Equivalent Basic : PRINT. C:type pointer, représente la chaine de
caractéres de type C a envoyer.
° clearscreen :
— Efface I’écran et positionne le curseur en - Inputstring :
haut et & gauche.
— Equivalent Basic : HOME.
— Entrée d'une chaine de caractéres au clovier.
— Equivalent Bosic ; INPUT AS.
° gotoxkyY: — Paramétres :
oe C:type pointer, représente |'adresse ob
sera stockée la chaine entrée.
L: type int, représente le nombre maximal
— Equivalent Basic : HTAB X% suivi de VTAB Y%. de caractéres 4 entrer au clavier.
— Positionne le curseur 4 la position désignée
sur I'écran.
—_— {nz [——_———— errr
—K—— ss / CHARLY ot F. SIGAL—LANGACE c /=-
— Valeur de retour :
N : type int, représente le nombre de carac-
teres réellement entrés au clavier.
° printint :
— Conversion d'un nombre entier puis envoi
sur le périphérique courant.
— Equivalent Basic : PRINT 1%.
— Paramétres :
|: type int, représente lo valeur & convertir
et a envoyer.
L: type int, représente le nombre de carac-
teres 4 justifier a droite.
F : type int, drapeau pour le format (0 non-
signé, | signé),
* Inputint :
— Entrée d'un nombre entier au clovier puis
conversion,
— Equivalent Basic : INPUT 1%,
— Valeur de retour :
|: type int, valeur du nombre entré.
° pPrintLong:
— Conversion d'un nombre entier long puis
envoi sur le périphérique courant.
— Equivalent Basic ; aucun.
— Paramétres :
|: type long, représente la valeur 4 conver-
tir et @ envoyer.
L: type int, représente le nombre de carac-
téres a justifier & droite.
F : type int, drapeau pour le format (0 non-
signé, | signé). ‘
°
Inputiong
— Entrée d'un nombre entier long au clovier
puis conversion.
— Equivalent Basic : aucun.
— Valeur de retour :
|: type long, valeur du nombre entré.
° printrit :
— Conversion puis affichage d'un nombre flot-
tant sur le périphérique courant.
— Equivalent Basic : PRINT D.
— Paramétres :
X : type extended, représente la valeur a
convertir et 4 envoyer.
L: type int, représente le nombre de carac-
téres 4 justifier a droite.
|: type extended, représente la valeur
minimale pour le passage en nototion
scientifique.
S: type extended, représente Ia valeur
maximale pour le passage en notation
scientifique.
P : type int, représente le nombre de chif-
fres aprés la virgule.
° Inputrit :
— Entrée d'un nombre flottant au clavier puis
conversion,
— Equivalent Basic : INPUT D.
— Valeur de retour :
X :type extended, valeur du nombre entré.
Mote = L'utilisation d'APW 1.0 et d'APWC 1.0
sont obligatoires (disponibles auprés
de D.D.A.). Aprés avoir tapé les 3 fichiers
(IOFUNC.C, IOFUNC.H et TESTIO.C), compiler
IOFUNC.C et TESTIO.C :
COMPILE -E -W IOFUNC.C KEEP =$ CC=(-P)
COMPILE -E -W TESTIO.C KEEP=$ CC=(-P)
linker TESTIO.ROOT :
LINK 2/START TESTIO 1OFUNC KEEP =TESTIO
Pour lancer le programme TESTIO, taper : TESTIO
Copier ensuite le fichier IOFUNC.H dans le dossier
2/CINCLUDE et IOFUNC.ROOT dans 2/ :
COPY IOFUNC.H 2/CINCLUDE
COPY IOFUNC.ROOT 2/
Pour utiliser les fonctions de IOFUNC quel que soit
votre programme, il suffit d’inclure dans le fichier &
compiler : £include <IOFUNC.H>
et lors de I'édition de liens, de joindre a Ia liste des
fichiers IOFUNC.ROOT
LINK 2/START THEFILE 2/IOFUNC KEEP =THEFILE
* CLEFS POUR APPLE IIGS 2° édition (P.S.1. por
Nicole Bréaud-Pouliquen).
* APPLE IIGS TECHNICAL REFERENCE (Mc Graw Hill).
* Text Tools 0.17 (D.D.A.).
* Integer Math Tools 00:30 (D.D.A.).
* SANE Tool set ERS 0.80 (D.D.A.).
Ls / PACES? | —
1
2
3
4
5
6
7
8
9
55
/ pacezs /
/ vevappiesorr auc /
/*
Nom du fichier: IOFUNC.C
Description: Fonctions d'entrées/sorties et de conversions.
(c) 1988 CHARLY et F. SIGAL, et TREMPLIN MICRO.
Version IIGS, pour Compilateur C APWC 1.0
in|
/*
Inclut les définitions, structures et fonctions
utilisées dans les fonctions.
oF
¥include <types.h>
#include <texttool.h>
#include <intmath.h>
#include <sane.h>
/* Définitions internes. wh
#define _carriageReturn Qx0D
#define printerSlot 1L
#define _screenSlot 3L
#define _andMask 0x7F
#define _orMask 0
/*
Variables globales:
- drapeau si sélection imprimante.
- buffer servant aux entrées/sorties.
- séquence du retour chariot pour l'écran.
ia
int _printerFlag;
char _iobuffer[81];
char _crSeq[]=¢_carriageReturn, Ox0A, 0@;
/* Structures utilisées pour la conversion des nombres flottants. */
decimal _decStrConv;
decform _decFrmConv;
(*
Initialisation des entrées/sorties.
Devices Pascal pour l‘écran et sélection de l'écran,
mise en place des masques de filtrages.
*/
initiIo() Les numéros de lignes ne doivent pas
{ étre tapés. lls ne sant indiqués que pour
information.
Set InGlobals (_andMask,_orMask) 7
SetOutGlobals (_andMask,_orMask) ;
/ vevapriesorrag( [Ss
SetErrGlobals(_andMask, orMask) ;
Set InputDevice (pascalType, _ScreenSlot);
SetOutputDevice (pascalType,_screenSlot);
SetErrorDevice (pascalType,_screenSlot); |
InitTextDev (input) ;
InitTextDev (output) ;
InitTextDev(errorOutput) ;
_printerFlag=FALSE;
)
/*
Sélection de 1'imprimante,
Devices Basic pour 1'imprimante.
ay
selectPrinter()
{
if(!_printerFlag) /* Teste si imprimante non sélectionnée, ap
{ /* sinon on passe. */
SetOutputDevice (basicType, printerSlot);
InitTextDev (output) ;
_printerFlag=TRUE;
!
}
/*
Sélection de l'écran.
Devices Pascal pour l'écran.
af
selectScreen()
{
if(_printerFlag) /* Teste si imprimante sélectionnée, bd
{ /* sinon on passe. ay
SetOutputDevice (pascalType, screenSlot);
InitTextDev (output) ;
_printerFlag=FALSE;
}
}
[*
Effacement de 1'écran.
Envoi du caractére de controle.
ay
clearScreen()
{
if(!_printerFlag) WriteChar(0x0C); /* Teste si imprimante non ay
} /* sélectionnée, pour écran seulement. */
/ Pace2s /
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
13i
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
ase
154
155
156
157
158
159
160
161
162
163
164
165
/ Paceso /
/ vewappiesorr auc /
7*
Positionnement du curseur sur 1'écran.
Voir code gotoxy de la carte 80 colonnes.
i
gotoxy(_x,_y)
char x, _¥i
{
if (!_printerFlag) /* Teste si imprimante non x}
{ /* sélectionnée, pour écran seulement. *]
ae /* Position XK + 32. af
_yt=32; /* Position Y + 32. la
*_iobuffer=0x1E; /* Code de gotoxy. */
* (_iobuffer+1)=_x; /* Stocke position X. mf
*(_iobuffer+2) =_y; /* Stocke position Y. ti.
*(_iobuffert3)=0; /* Fin de chaine C, Stocke 0. wid
WriteCString(_iobuffer); /* Envoi de la séquence de commande. */
}
)
/*
Envoi un retour chariot sur le périphérique courant.
Teste le périphérique pour connaitre le(s) code(s) a envoyer.
af
newLine ()
{
if (_printerFlag) WriteChar(_carriageReturn); /* Teste si *f
/* imprimante sélectionnée, envoi du code retour chariot. */
else WriteCString(_crSeq); /* Sinon, envoi d'une séquence +
/* pour 1'écran. *7f
}
/* Envoi d'une chaine de caractéres sur le périphérique courant. wf
printWord(_string)
char *_string;
{
WriteCString(_string);
/* Utilisation interne de cette fonction. *}
int inputLine(_length)
int _length;
{
char _code;
int _count;
_count=0;
do
/* Lecture d'un caractére au clavier sans l'afficher. =f,
_code=ReadChar (noEcho) ;
if ((_code>0x1F) && (_code<0x7F) ) /* Teste si touche majuscule, */
166
167 /* Affichage et stockage du caractére.*/
168 WriteChar (_code);
169 * (_iobuffer+_count++) =_code;
170 }
171 /* Teste si touche BackSpace ou Delete. */
172 else if ({_code==0x08||_code==0x7F) && (_count>0))
173 {
174 /* Bfface le dernier caractére entré, */
175 WriteChar (0x08);
176 --_count;
177 )
178 )
179 f*
180 Continue tant que le nombre maximal de caractéres n'est pas atteint
181 ou que le code n'est pas celui de la touche Return.
182 ¥y
183 while ((_count<_length) &&(_code!=_carriageReturn)); /* Teste si */
184 /* touche Return pour annulation des caractéres aprés le curseur. */
185 if (_code==_carriageReturn) WriteChar(0x1D);
186 *(_iobuffer+_count)=0; /* Fin de chaine C, stocke 0. */
187 /* Retourne le nombre de caractéres recus. wh
188 return (_count);
189 }
190
491:
192 /* Entrée d'une chaine de caractéres. if i
193
194 int inputString(_string, length)
195 char *_string;
196 int _length;
Ag? 1
198 int _i, _count;
199
200 if (!_printerFlag) /* Teste si imprimante non sélectionnée, */
201 { /* pour écran seulement. yf
202 a2
203 Appel de la fonction inputLine et récupération du nombre de
204 Caractéres recus.
205 ef
206 _count=inputLine(_length);
207 /* Recopie de la chaine de iobuffer dans _string. sy
208 for(_i=0;_i<_count;_i++)
209 *(_string+_i)=*(_iobuffert_i);
210 /* Fin de chaine C, stocke 0. ba J
211 *(_string+_ count) =0;
212 /* Retourne le nombre de caractéres recus. be
213 return {_count);
214 }
215, }
216
217
218 /* Envoi d'une chaine de caractéres suivit d'un retour chariot. od
219
220 printLine(_string)
/ DEVAPPLESOFT AUC /
Z* minuscule ou chiffre. lf
{
/ Pace 31 /
————
/ vewappiesorrauc /
char *_string;
222 {
223 WriteCString(_string);
224 newLine();
225 }
226
227
228 /*Conversion et envoi d'un nombre entier sur le périphérique courant*/
229
230 printInt (_value,_just,_flag)
231 int _value, _just, _flag;
232 {
233 int _length;
234
235 /* Appel de la fonction Int2Dec pour effectuer la conversion. *f
236 Int2Dec (_value,_iobuffer,_just,_f1ag) ;
237 *(_ijobuffer+_just)=0; /* Fin de chaine C, stocke 0. ap
238 WriteCString(_iobuffer) ; /* Envoi de la chaine de caractéres. ef
25911
240
241
242 /* Entrée d'un nombre entier au clavier. wf
243
244 int inputInt ()
245 {
246 int _length;
247
248
249 if (!_printerFlag) /* Test si imprimante non sélectionnée, */
250 { /* pour écran seulement. a]
251. _length=inputLine (20); /*Lecture d'une chaine de 20 caractéres *}
252 f*
253 Retourne le nombre entier,
254 aprés conversion grace A un appel Dec2Int.
255 af
256 return (Dec2ZInt (_iobuffer, length, 1))3
257 }
258 }
259
260
261 /* Conversion puis envoi d'un nombre entier long
262 sur le périphérique courant. */
263 printLong (_value,_just,_flag)
264 long _value;
265 int _just, _flag;
266 {
267 int _length;
268
269 /* Appel de la fonction Long2Dec pour effectuer la conversion. */
270 Long2Dec (_value,_iobuffer,_just,_flag) 3
271 * (_iobuffert_just)=0; /* Fin de chaine C, stocke 0. */
272 WriteCString(_iobuffer); /* Envoi de la chaine de caractéres. *}
274 }
274
278
/ paces2 /
/ pewappiesorr auc /
276 /* Entrée d'un nombre entier long au clavier.
277
278 long inputLong()
279 {
280 int _length;
281
282 if{!_printerFlag) /* Teste si imprimante non sélectionnée,
283 { /* pour écran seulement. af
284 _iength=inputLine (20); /* Lecture d'une chaine de 20 caractéres.*/
285 i*
286 Retourne le nombre entier long,
287 aprés conversion grace 4 un appel Dec2Long.
288 */
289 return (Dec2Long(_iobuffer, length,1));
290 ,
291 }
292
253
294 /* Conversion puis envoi d'un nombre flottant aj
295 sur le périphérique courant. af
296 printFlt (_value,_length, vmin, vmax,_virg)
297 extended _value;
298 int _length;
299 extended _vmin, _vmax;
300 int _virg;
301 {
302 extended _valabs;
303 int _index, _jmove;
304 char *_ string;
305
306 i
307 Si le nombre est égal 4 0.0,
308 on stocke "0.0" dans la chaine de caractéres.
309 a/
310 if (_value==0.0)
311 {
312 * iobuffer='0';
313 *(_iobuffert+l)='.';
314 *(_iobuffer+2)='0';
315 *(_iobuffer+3) =0;
316 }
317 else
318 {
319 _valabs=fabs(_value); /* Valeur absolue. ‘ad
320
321 /* Teste les limites pour le passage en mode scientifique. */
322 if ((_valabs>=_vmax) | | (_valabs<_vmin))
323 {
324 /* En dehors, notation décimale. *f
325 _decFrmConv.style=FLOATDECIMAL;
326 _decFrmConv.digits=_virg+t1l;
327 }
328 else
329 {
330 /* Entre les deux limites, notation scientifique. bed
/ Pacess /
364 €
365
366
367
368
369
370
371
372
373
374
g76
376
377
378
379
380
381
382
383
384
385 }
/ cewappiesorrauc /
_decFrmConv. style=FIXEDDECIMAL;
332 _decFrmConv .digits=_virg:
333 }
334
335 /* Appel aux fonctions num2dec et dec2str pour les conversions. */
336 num2dec (&_decFrmConv, value, &_decStrConv) ;
337 dec2str(&_decFrmConv, &_decStrConv,_iobuffer);
338 }
339
340 /* Donne la longueur de la chaine dans _iobuffer. sa
341 _length=strlen(_iobuffer);
342 7* Calcule la valeur de déplacement pour la justification. wy.
343 _jmove=_length-_index;
344 /* Si valeur de déplacement supérieure 4 0 justification du nombre *)
345 if (_jmove>0)
346 {
347 /* Décalage. £}/
348 for (;_index>=0; --_index)
349 *({_iobuffer+_index+_jmove)=* (_iobuffert+t_index);
350 /* Remplacement de la zone de justification par des espaces. a |
351 for (_index=_jmove-1;_index>=0;--_index)
352 * (_iobuffert+_index)=' ';
353 /* Fin de chaine C, stocke 0. id 3
354 *(_iobuffert_length)=0;
355 }
356 /* envoi de la chaine de caractéres. */
357 WriteCString(_iobuffer);
358 }
359
360
361 /* Entrée d'un nombre flottant au clavier. mf
362
363 extended inputFlt ()
short _ix, _vp7
if (!_printerFlag) /* Teste si imprimante non sélectionnée, a}
{ /* pour écran seulement . */
/* Flag de position dans la chaine *f
_ix=0;
/* Lecture d'une chaine de 30 caractéres.*/
inputLine (30);
1
/ pacess /
/* $i chaine vide, mise en forme de la chaine. */
if (*_iobuffer==0)
{
*_iobuffer=1;
*(_iobuffer+1)='0';
)
/* Appel a str2dec pour la conversion. */
str2dec (_iobuffer, &_ix, & _decStrConv,6_vp);
/* Teste le drapeau d'erreur et traitement. */
if(_vp) return (dec2num(&_decStrConv))7
else return(0.0);
/ DEWAPPLESOFT AUC /
[*
Description: fichier Header des fonctions de IOFUNC.C
(c) 1988 CHARLY et F. SIGAL, et TREMPLIN MICRO.
1
2
3
4 Nom du fichier: IOFUNC.H
5
6
7 Version IIGS, pour Compilateur C APWC 1.0
8
Bf
10
se
12 extern int inputString();
13 extern int input Int ();
14 extern long inputLong();
15 extern extended inputFlt ();
pe
1
2
3
4 Nom du fichier: TESTIO.C
a Description: Programme test des fonctions de IOFUNC.C
6 (c) 1988 C, Mafaure, S.N. Cehef et TREMPLIN-MICRO
7 Version IIGS, pour Compilateur C APWC 1.0
8
& +7
12 #include “iofunc,h"
15 int n;
16 long 1;
17 extended d=0;
18 char c[31];
19 char rp[2];
20
21
22 main()
23 {
24 initIo();
25 clearScreen();
26
27 printWord("Entrez un nombre entier : ");
28 n=inputInt ();
29° newLine();
30 printWord(" 'n' est égal a :
ar printInt (n, 5,1);
32 newLine();
33 newLine ();
34
a8 printWord("Entrez un nombre entier long : ");
36 l=inputLong();
/ Pacess /
/ DEVAPPLESOFT aU Cc /
3% newLine();
38 printWord(" '1' est égal a: ");
39 printLong(1,12,1);
40 newLine();
41 newLine();
43 printWord ("Entrez un nombre décimal : ");
44 d=inputFlt ();
45 newLine();
46 printWord(" 'd' est égal a; ");
47 printFlt (d,12,le-5,1le+5,5);
4g newLine();
49 newLine ();
$1 printWord("Entrez une chaine de caratéres : ");
52 inputStringic, 30);
53 newLine();
54 printWord(" ‘'c' est égal a :
55 printLine(c);
56 newLine ();
58 printWord("Disposez-vous d'une imprimante en slot 1, préte a
l'utilisation 2");
89 inputString(rp,1);
60 if(rp[0]=='0'| |rp[0J=="0")
61 {
62 selectPrinter();
63 printWord(" 'n' est égal a : ");
64 printInt (n,S,1);
65 newLine ();
66 printWord(" 'l' est égal a: ");
67 printLong(1,12,1);
68 newLine ();
69 printWord(" 'd' est égal a: ");
70 printFlt (d,12,1le-5,1le+5,5);
Ti newLine();
72 printWord(" 'c' est égal 4 : ");
73 printLine(c);
74 newLine ();
75 selectScreen();
76 ls
id; else clearScreen();
79 gotoxy (25,10);
80 printLine(" Test terminé, a bientot...");
/ Pace3s6 /
/ Yvan KOENIG —APPLEsSOFY / —
FACTARIF
Vous le savez peut-étre déja, je suis céra-
miste depuis 1971, Aprés avoir di refaire
des factures et des lettres 4 cause de fautes
de frappe disgracieuses, j'ai décidé que la
micro informatique était un outil 4 essayer.
Naif, je croyais que cet instrument du pro-
grés allait me décharger de taches ennuyeu-
ses, me permettre de disposer de plus de
temps libre et d’avoir un bureau bien rangé.
Si établir une facture n'est plus en effet une
corvée, puisqu’il est facile de la refaire en
cas d’erreur, c6té courrier, j'ai plutét davan-
tage de travail car le fait de disposer d'un
traitement de texte incite 4 prendre la plume
plus souvent que par le passé.
Pour ce qui est du temps libre et du bureau
dégagé, c'est complétement raté ! Entre les
piles de revues, de livres, de disquettes de
tous calibres, on trouve des cables, des
interfaces et, parfois... des factures de four-
nisseurs ou de clients! A ce jour, rien ne
semble s’étre perdu, mais ¢a reléve du mira-
cle. D’autant que, depuis prés de deux ans,
je réponds 4 vos questions quelquefois farfe-
lues, parfois trés emborrassantes.
Aprés s'étre drogué au langage machine
pendant de longs mois, Guy-Hachette
réclame du Basic. Comme, par ailleurs, on
me demandait un programme de factura-
tion, j'ai décidé de vous communiquer mon
auxiliaire fidéle ; FACTARIF.
En fait, je ne vous en donne qu'une partie car
la pagination de Tremplin Micro n'est pas
extensible. Pour utiliser le programme
publié, il faudra que vous prépariez vos
fichiers CLIENTS et TARIF 4 l'aide d'un traite-
ment de texte comme APPLEWRITER ou par
lintermédiaire d'un petit programme BASIC
créant les deux fichiers séquentiels confor-
mément aux structures suivantes :
Stocker le nombre de fiches clients, puis les
fiches proprement dites qui sont composées
de 5 rubriques, séparées par des virgules.
Des RETURN feraient I'affaire, mais lors d'un
listage du fichier 4 l'aide de TYPE les virgules
permettent de n’utiliser qu'une ligne par
fiche (au lieu de 5 avec des RETURN).
Les rubriques sont : Patronyme, Rue, Com-
plément d'adresse, Code Postal + Ville,
Taux de remise éventuellement consenti (ce
dernier détail est un ajout spécial Tremplin
Micro répondant au souhait d'un correspon-
dant ; moi, je ne fais pas de remise).
Un en-téte regroupe : la moitié du nombre
darticles répertoriés (arrondi a I'unité supé-
rieure) pour l'affichage sur deux colonnes du
tarif. C'est un reliquat de la toute premiére
version et je n'ai jamais pris le temps de
remplacer par le nombre d’articles. Ensuite
vient le taux de TVA (ben oui, je n’en traite
qu'un !). A mes débuts, j’accomplissais par-
fois des taches que I'ordinateur aurait fort
bien pu faire. C'est pour cela que la troi-
siéme information stockée est la chaine ‘TVA
xx.xx%'. Les courageux pourront effacer ces
rides. Enfin, une chaine de 8 caractéres
informe de la date de mise en vigueur du
tarif (c'est bien utile pour moucher un grin-
cheux qui clame devant quinze personnes
que vos tarifs ont encore été augmentés
pour l'arrivée des touristes...).
Viennent ensuite les fiches articles conte-
nant ici encore 5 rubriques séparées par des
virgules. II s'agit :
1. De la désignation de l'article ;
2. De son prix H.T. en centimes ;
3. Du prix T.T.C., en francs (c'est hétéro-
géne, mais ¢a permet de gagner quel-
ques octets) ;
4. La hauteur en cm;
5. Le diamétre en cm. (suite page 38)
/ Paces? / —
— /racrae ff <a — — — — um i ——
Maintenant que vous avez les fichiers de don-
nées, vous pouvez employer FACTARIF, com-
posé en fait d'un programme BASIC auquel est
accrochée une routine en langage machine
permettant d'accéder aisément 4 un article
sans devoir mémoriser son numéro d'identifi-
cation. On utilise également la commande
externe ProDOS 'FLOAD’, publiée dans Trem-
plin Micro n°20.
Deux fonctions principales sont offertes d'entrée :
* Etablissement d'une FACTURE ;
* Impression d'un TARIF.
U'option TARIF n‘appelle pas de commentaire
particulier, mais FACTURE est plus complexe.
Dans un premier temps, vous devrez saisir les
quantités d'articles vendus, chacun étant
accessible par son numéro d’ordre, formule
simple, mais peu agréable. II est heureuse-
ment possible de donner tout ou partie de la
désignation de l'article en question. La routine
en langage machine, précédemment citée,
vous proposera successivement tous les arti-
cles contenant cette sous-chaine. Il vous res-
tera @ valider en tapant O. Si vous dépassez
d'un rang l'article choisi, inutile de refaire un
balayage complet, tapez fléche montante (ou
fléche @ gauche) qui permettra de récupérer
l'avant-derniére proposition. Comme j'aime le
confort, DEJ vous donnera accés & Déjeuner
carrelé (ou décoré),
En cas d’erreur sur une quantité, il est possible
de la modifier en en saisissant une complé-
mentaire qui peut étre négative. II arrive par-
fois que ma femme vienne me signaler qu‘un
client ayant demandé une facture a modifié sa
sélection d'articles pendant que je commencais
4 saisir ce qu'il avait choisi. On peut aussi sai-
sir jusqu’d cing articles hors catalogue (c'est
indispensable quand, comme moi, on vend fré-
quemment des piéces uniques).
Une fois toutes les ventes enregistrées, tapez
RETURN pour passer aux opérations complé-
mentaires : saisie des éventuels frais de port,
avoir, acompte...
Il ne restera plus alors qu’é enregistrer |'iden-
tité du client, soit par sélection dans la liste en
mémoire, pour un client connu, soit par saisie
au vol pour un client occasionnel.
Toutes les opérations d'impression sont codées
pour IMAGEWRITER2. II est facile de passer en
version compatible DMP ou IMW1 puisque la
seule commande spécifique IMW2 est |'envoi
de la séquence ESC "M" qui force le mode
Quasi-Courrier.
U'utilisation de la commande externe FLOAD
(T.M. 26) permet de réaliser un en-téte a
l'aide de caractéres personnalisés. Dans la
version publiée, trois fontes sont utilisées :
* COUNT qui figurait déja sur la disquette
TM. 26 ;
* CARAC.DOUBLE
* CARAC.INC
Vous avez bien entendu toute liberté pour
adapter l'en-téte & vos propres besoins. Je
signale 4 ceux qui ne l’auraient pas remarqué
que les fontes COUNT, EPSDROITE et ITALEPS
de 7.M. 20 contiennent le nouveau caractére
Franc en remplacement du £.
sur la disquette T.M. 7
Pour tout simplifier, le programme est chargé en
deux temps. Le STARTUP utilise PRO.FP pour
remettre le systéme en configuration normale,
puis installe FLOAD et copie les fontes dans le
disque virtuel de la carte 80 colonnes étendue
(on pourrait se servir de /RAMS sur GS ou
/RAM4 sur lic étendu). Enfin, il lance l’exécution
de FACTARIF lui-méme. Si vous ne disposez pas
de disque virtuel, il est possible de s‘en passer
en chargeant les fontes depuis le disque magné-
tique ; c'est simplement plus lent.
En examinant le listage du programme, vous
remarquerez sans doute qu’aucune instruction
ne charge la routine CONT2 précédemment
citée. C'est normal, elle est accrochée 4 la fin du
programme BASIC et initialisée par la ligne 8.
Si l'association BASIC — Langage Machine ne
vous est pas familiére, je vous explique rapide-
ment la morche 4 suivre :
1. Saisir, puis sauver SANS l'exécuter, le pro-
gramme BASIC sous le titre BAS.SEUL.
Attention, le programme comporte de nom-
breuses lignes trés longues. Elles peuvent
toutes tre saisies en utilisant le symbole ?
en remplacement des multiples PRINT et en
s'abstenant de taper les espaces ajoutés
par {a fonction LIST de l'APPLESOFT lors des
listages. Un éditeur de BASIC se révéle une
fois encore un accessoire utile. ProCMD,
— | ED ee
ns / YE KOENIG—APPLEsOFY / —
2.
3.
toujours lui, contient, entre autres gate-
ries, un éditeur de lignes et un RENUM-
BER, performants et fiables.
Saisir et sauver la routine CONT2 (avec
MERLIN ou tout autre assembleur si vous
tes outillé).
Pour faire du travail ‘propre’, mettre 4 @
une zone importante de la mémoire,
(disons de $2000 4 $3000) a I‘aide de la
commande moniteur :
2000:00 N 2001 < 2000.2FFFM (pour les
GSmen 66 < 2000.30002)
Charger BAS.SEUL, passer en moniteur et
faire AF.BG (RETURN) ; l'adresse de fin du
Basic s'affiche alors (octet bas d’abord).
Ce devrait étre $28BD si aucune modifica-
tion n’a été apportée au programme,
mais comme je ne saurais vous reprocher
de ne pas avoir tapé les REMarques, je
préfére représenter symboliquement
cette adresse par $wxyz. Retour au mode
Basic. BLOAD CONT2,A$wxyz. Retour en
Les deux derniéres instructions listées
seront alors JMP $DA63, JMP $DEC9. Si
c'est bien le cas, faire encore un L
(RETURN). La premiére ligne de I'écran
portera stuv- 06 Gd.
il faudra alors faire AF: uv st (RETURN) et
ENFIN retourner en BASIC et faire SAVE
FACTARIF.
Ouf ! C'est plus difficile & décrire qu’d exé-
cuter et, si vous le demandez fermement
mais poliment, je vous offrirai peut-étre un
jour une commande ProDOS qui réalise ce
type d’accouplement automatiquement.
Je profite de l'occasion pour signaler que,
depuis des mois, RELOPRO.S contient une
erreur que je viens de repérer. Dans la rou-
tine PROTECT, la ligne 313 a été amputée (ca
va vite avec un éditeur plein écran) et doit se
lire:
313. ADC R_OFFSET+1
L'absence du (+1) final est responsable de
l'apparition désagréable d'un 'NO BUFFERS
moniteur et faire wxyz LLLLLLLLLL AVAILABLE’ du meilleur effet.
(RETURN) (List 10 fois). Yvon KOENIG — 16 mai 1988.
FACTARIF
pane
1 REM nee CTARIF *
10 0& = CHRE (4) 9 Tnste oneenenetene B3A4
20 PRINT D$"-PRO.FP" REM RREEE 9248
30 PRINT 0%*-FLOAD" 8DF9
40 PRINT D$"BLOAD COUNT ,A$4000": PRINT D$"BSAVE /RAM/COUNT ,A$4000,L955" 142E
50 PRINT D$"BLOAD CARAC.INC,A$4000": PRINT D%"BSAVE /RAM/CARAC, INC ,AS40
00,L955" 96E0
60 PRINT DS*BLOAD CARAC.DOUBLE ,A$4000": PRINT D$"BSAVE /RAM/CARAC.DOUBL
£,A$4000,L919" penne aga2
70 PRINT D$"-FACTARIF* 4 REM **%r cTaRIF * 2BD3
2 REM * PEt LL hele
3 REM Pret
6 TEXT + PRINT CHRS (21):D$ = CHRS (4):G$ = CHR (7):R$ = CHRS (13
DKA = - 16368 OE4!
8 CALL PEEK (175) + 256 * PEEK (176) - 416 ESCO
10 HOME :A2% = 48:CE = 100:2E = .01:SE% = " "EX = 27:&% = CHRS
(E%):WOS = CHRS (EX) + “O"TFIS = "TARIF":A9% = 5S7:AP% = 46:AU% = 44
: DEF FN ACR) = INT (R + .5) / CE BA7E
11 SLOT = 1: REM “Port Imprimante 1243
12 PRINT D$"OPEN"FI$: PRINT D$"READ"FI$: INPUT 21,A8,N$,DV$:AB = CE * A
A / (AA + CE); PRINT D$:2 = 2 * 21:25 = 2 + 5: PRINT "TARIF “en vigu
eur au "DV$: PRINT : HTAB 7: PRINT 2" articles répertoriés": DIM P(Z
5,1) ,NO$(25) ,T(25,1) ,Q%(25) 9158
/ Pacess /
/ eactarie /
13 NO$(0) = LEFT# (N$,6) + "," + MIDS (N$,8): PRINT D$"READ"FI$: FO
RN = 1 TO 2: INPUT NOS(N) ,TO,P(N,1),T(N,O),T(N,1)3P(N,0) = TO 7 C
E: NEXT : PRINT D$:TO = O:CL$ = "CLIENTS": PRINT D$"OPEN"CL#: PRIN
T D$"READ*CL$: INPUT CN: PRINT DS
17 JJ% = CN / 10: DIM RX%CCN) ,ADS$(CN,3): PRINT D$"READ"CL$: FOR I = 1
TO CN: INPUT AD$<1,0) ,AD$(1,1) ,AD$<1,2) ,ADS(1,3),R4¢1): NEXT : PRI
NT D$"CLOSE*
20 VTAB S: CALL - 958: GOSUB 770: IF NOT Si THEN HOME : END
30 IF Si = 1 THEN GOSUB 130:DF% = RE$:MF% = Mx: GOSUB 440
40 HOME : GOSUB 830: ON PR$ = “N* GOTO 20: GOSUB 1200: GOSUB 3000: ON
$1 GOSUB 350,700: GOSUB 3230: HOME : VTAB 22: FLASH : PRINT "ENCOR
E UNE ": GOSUB 830: HOME : ON PR$ = “O" GOTO 40: GOSUB 900: FOR I
= 1 TO 25:Q4¢1) = 0: NEXT
59 REM ctUctUFORMATTAGESc tJ
60 PRINT RIGHT@ (" “"" + STR (W),3);
GOTO 20
RETURN
70 IF ABS (W) < ZE THEN W = O:W$ = “ ~~~000": GOTO 80
72 WS = RIGHTS (" ~~~" " +
80 IF $2 AND RIGHTS (W$,2) =
ETURN
90 WS = LEFTS (Ws,5) + ",* +
100 IF NOT W THEN WS = “..
110 IF W= INT (W) THEN Ws =
RN
STR$ ¢ INT (.1 # CE # W)),7)
"00" THEN WS = LEFT$ (W$,5) + " """: R
RIGHTS (W$,2); RETURN
RETURN
RIGHTS ¢" " + STR® (W),2) + " ““: RETU
120 WS = RIGHTS (" “"" + STR® (Wo * 10),3):WS = LEFTS (W$,2) + "," +
MIDS (W$,3): RETURN
129 REM "“ctJctuMASQUE DE SAISIEctJ
130 HA
135 PX
0
72V% = 4:TA = 2:L% = 8: VTIAB VA: PRINT "Date ~:dJd MM AN"
140 CHS = ":":RES = ““: VTAB VA: HTAB HA: PRINT “:";
150 POKE K%,0: GET X$:X% = ASC (X$): IF XA = 13 THEN CALL ~ 868: PR
INT X$: ON CHS = ":" GOTO 210: GOTO 200
155 IF X% = E% AND CHS = ":" THEN PRINT : RETURN
160 ON X% < > 8 GOTO 180: ON CHS <¢ > ":" GOTO 170: ON TX <¢ 6 GOTO 15
QO: POP : GOTO 570
165 IF RIGHTS (CH$,1) = "." THEN Px = 0
170 CHS = LEFT$ (CHS, LEN (CHS) - 1): PRINT X$"."X$;: GOTO 150
180 ON T% GOSUB 230,260,220,1000,225,220: ON Q% GOTO 150;CHS = CHS + X
$: PRINT X$;: ON LEN (CHS) ¢ L% + 1 GOTO 150; PRINT R&
200 RES = MIDS (CH$,2)
210 RETURN
219 REM "ctJctUNB ARTICLESctJ
220 Q% = X% < => 45 AND (X% ¢ AZ% OR X% > AYZ~I: RETURN
224 REM ctJ
225 @% = X% ¢ > 63 AND X% <
229 REM ctUctJSOMMEctJ
>
44 AND (X% < AZ% OR X% > AYA): RETURN
230 Q% = 1:PQ% = X% = AP% OR X% = AVA: IF (P% AND PQ%) OR X% > AVK OR
PQ% < 1 AND X% < A2% THEN RETURN
240 IF PG% THEN X$ = ".":P% =
250 G% = 0: RETURN
259 REM ctUctJDATEctJ
260 G% = 1: IF X% ¢ AZ% OR XX
270 IF LEN <CH$) = 2 THEN J%
R J% > 31 THEN RETURN
280 IF LEN (CHS) = 5 THEN M%
RM% > 12 THEN RETURN
/ paceso /
1
A% THEN RETURN
VAL ¢ MIDS (CHS + X$,2)): IF (10
VAL ( MID@ (CHS + X$,5)): IF MZ ¢ 10
8CBS
780E
490A
AP63
4F SF
SF71
1EDA
ESFO
4FOL
SESE
CAAd
S2E5
FFE
E0B?
C775
Fla?
C398
CE97
C656
436
£984
2A1B
0403
63B!
109C
COEE
c100
69A5
9761
8E9A
£694
84A2
IF LEN (CHS) 8 THEN A% = VAL ( MIDS (CHS + X$,8)):A% = 1900 +
/ Yvan xoewic — APPLEsoFr /
Ax + CE * (AX <{ 50): GOSUB 330: IF J% > FX THEN POP : GOTO 140 4SB8
300 IF LEN (CH$) = 5 OR LEN (CHS) = 2 THEN X$ = XS + “ * 8A00
310 Q% = 0: RETURN 9761
319 REM “ctJctUDERNIER JOUR DU MOISctJ
320 M4 = MF% + (CR = 5) * (1 - (MFM = 12) * £2) 5028
330 FA = 31 - (MZ = 4 OR MK = 6 OR MX = 9 OR M% = 11): IF M% = 2 THEN
FA = 28:T1 = AA / 4:T1 = T1 - INT (T1):T2 = AX / CE:T2 = 72 - IN
T (12):T3 = AX / 400:T3 = T3 - INT (73): IF T1 + T2 + T3 = 0 ORT
1 = 0 AND T2 THEN F% = 29 Bé3B
340 RETURN $3B1
349 REM "ctJctJIMPRESSION FACTUREctJ
350 LT = 5: FORN = 1 TO 25:LT = LT + NOT NOT QX%<N): NEXT :LT = LT +
3 * NOT NOT R # 2 * NOT NOT (E AND AV) + NOT NOT E+ NOT N
OT AV + 2 * NOT S2 + NOT NOT AK + 2 * AS 9A70
351 MG = 11 7AaCé
354 PRINT TAB( 91)"VALLAURIS le “DF$;: IF LT < 49 THEN PRINT WO$; BADE
356 PRINT : PRINT : PRINT : PRINT SPC MG)CL$: FOR I = 1 TO 5: PRINT
: NEXT ;T0 = O: PRINT SPC¢ MG)"Code ““Quantité ~“Désignation" SPC
¢ 36)"Prix"BS SPC¢ 13)"Prix Total": PRINT 0782
357 FOR N= 1 TO 25; ON NOT Q%<N) GOTO 370 062E
360 PRINT SPC( MG): IF N > 2 THEN PRINT SPC(¢ 3): GOTO 365 8268
362 W = N: GOSUB 60 1ccs
365 PRINT SPC( 6):W = Q%(N): GOSUB 60: PRINT SPC 6)NO$(N) SPCC 48 -
LEN (NO$(N))):W = P(N,S2): GOSUB 70: PRINT WS SPC< 14):W = QK<N) *
P(N,S2): GOSUB 70: PRINT W$:T0 = TO + W B4B0
370 NEXT : IF R THEN PRINT SPC( 88 + MG)SE$:W = TO: GOSUB 70: PRINT
SPC( 43 + MG)AVS SPC¢ 42)W$:W = FN AC(TO * R): GOSUB 70: PRINT SP
C( 48 + MG)"Remise "R® %" SPCC 31 - LEN ¢ STR (R)))WS;TO = TO -
W ESE€1
380 ON NOT E AND NOT AV GOTO 410: PRINT SPC( 88 + MG)SE$:W = TO: GO
SUB 70: PRINT SPC( 43 + MG)"Marchandises "AVS SPC( 29)W$: IF E TH
—N W = E: GOSUB 70: PRINT SPC< 43 + MG)"Port "AVS SPC( 37)W$;T0 =
Ta FE BA7I
400 IF AV THEN W = AV: GOSUB 72: PRINT SPC‘ 43 + MG)"Avoir "AVS" du *
DAS SPC(
Showing the first 100000 of 156490 characters.