Text content (OCR)
tremplin
sen
pee ;
iblit fy
Buel fasceianal i IN ie
LEASES ASH HH) yy I,
bist ae eu ig
Ue HY Wf birt I i sd
Dohledaniahdbvebieel ety Hh
lmuan PAu ia by
bUrce STEFEO ||| il i in el, | Viale
SUr. CS “ih ii it i M1
ie A " i eit hint
Heyy ox pray 7 | | het
OO Ghe nes: Hu '
e : “hed {
I } ; th wT
1 I ‘
Mr”:
alan I hs om
i
' tt fit
ate
Ny q
i t
886L NINE > IWW ~ 02 oN
:
i Hi wl
wil
tremplin | SOMMAIRE
Apple et ProDOS (noms et
logos) sont des marques dépo-
sé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 :
Editions JIBENA
Guy-HACHETTE
La Petite Motte — Senillé —
86100 CHATELLERAULT
T $
49.93.66.66
PUBLICITE :
Raymond JULIEN
(1) 45.75.41.81
Commission Paritaire :
Les revues qui choisissent d’étre réel-
lement au service du Lecteur, en ne
Vobligeant pos & gloner, dons plu-
sieurs mogazines, les renseigne-
ments concernant so machine, ne
bénéficient pas du numéro de Com-
mission Poritaire, et pos d'avantage
des torits postaux réduits.
TREMPLIN MICRO — Bimestriel — Crest une
publication des Editions JIRENA, 4, rue de la
Courdes-Noves, 75120 PARIS — S.A. ov
copital de 3600000 F — Imprimé por
CITE-PRESS/PARIS — Service de vente
Presse-Promotion, tl. 49.99.65.08. —
Dépét légol la date de porution — inscrip-
tion & la Commission Poritaire des Publica-
fions et Agences de Presse : en cours —
Directeur de la Publication : Guy-Clément
COGNE — Diffusion N.M.P.P.
eS
La disquette TREMPLIN MICRO
contient tous les programmes du
numéro, ainsi que les sources
trop longs pour étre publiés
dans les colonnes de la revue.
Avec la collaboration de :
Claude AUBRY, Marc FREFOYE, Yvan KOENIG,
Jean PERROT, Jacques REY, Emile SCHWARZ.
Un jeu simple et amusant : DUEL (Jean PERROT) ..........-..- — 3
Vert compte (Jean FERRON), ssi casseccscecsnics sationeeaesces : 11
J'ai mis un palmier dans mon Apple GS (Claude AUBRY) ..... a 15
INITIATION (APPLESOFT)
RANG : quel est le plus grand nombre d'une série ?
(Marc FREFOYE)
ALEA : mélange aléatoire d'une série de nombres
(Marc FREFOYE)
TOTAUX : double totalisation des nombres d'une table
(Marc FREFOYE)
LANGAGE C D6US 6X MOCHIG x10: cases conmmivecsatoenes 19
avec C. AUBRY L'infernal docteur Malloc ................... 0 21
Stéréophonie sur Apple lIGS (Jacques REY) ........-..-..00000005. 28
QUATRO sur Apple IIGS... avec le PC Transporter
(Mats FREFOYE) xcs cuxsaesestmewenmanmcaonetenmvinnimeiniem 29
INITIATION AU GS Basic
Chargement de caractéres personnalisés
pour Image Writer II et GS Basic (Emile SCHWARZ) . 31
QuickDraw Démo (Emile SCHWARZ) 35
GSB.Hello amélioré (programme revu et corrigé) ..........--. 39
Trois patches pour PICS (Emile SCHWARZ) ..........---. 0000065
IMAGE WRITER II : corrigez votre manuel de référence ........... . 40
FONTES : commande permettant de charger une fonte dans votre
imprimante, sous ProDOS (Yvan KOENIG) ............. 45
Programme source commenté, avec Relopro.
COURRIER DES LECTEURS (Yvan KOENIG) ........... 0000000005 e eee 61
LES LIVRES isiiniticcrn cai ceirinn ehaiaimiun nase 14, 24, 30, 43, 44, 62, 63.
J Paces / —
/ Guy HACHETTE—EeDITO /
Amusez-vous avec votre Apple Il
la programmation est un jeu. Je ne
cesse de le répéter depuis la création
de TREMPLIN MICRO. Un jeu captivant
en diable, mais qui exige une concen-
tration d’esprit peu commune. Quand
on programme, tout est dans la pen-
sée, de la premiére a la derniére ins-
truction. Logique et mémoire sont solli-
citées @ chaque instant. Bref, on ne
pense plus qu’a I’objectif numéro un :
obtenir, lors du run final, le résultat
attendu.
la programmation passe évidemment
par Iétude d'un langage, voire par celle
de plusieurs langages. Nul ne me
démentira si je prétends que cette étude
constitue elle-méme un jeu extraordi-
naire. Et puis, par I'intermédiaire de ces
langages, n‘avons-nous pas Ia possibilité
de communiquer avec des partenaires
du monde entier... grace 4 un nombre
limité de mots-clefs ?
Nouveaux langages
Je sais que bon nombre de nos Lectrices
et Lecteurs s‘intéressent de plus en plus
au langage € . Nous allons évidemment
poursuivre notre patiente initiation,
mais nous rencontrons encore des diffi-
cultés lorsqu’il s‘agit d’adapter le € des
IBM et clones sur notre GS. Souhaitons
que les nouvelles versions de l'APWC
soient plus compatibles. Il reste que
le € est un langage portable par excel-
lence et que son apprentissage est
actuellement conseillé sur toutes les
machines.
Le GS Basic nous donne satisfaction,
méme s’‘il comporte encore quelques
points noirs. Vous le découvrirez plus
facilement avec I'excellent guide de
notre ami Emile SCHWARZ (voir notre
bulletin de commande). Ce livre ne vous
/ pace2 /
sera utile que si vous disposez déja de la
documentation américaine et du logiciel
(diffuseur : DDA).
On ne saurait concevoir de programma-
tion sérieuse sur le GS sans passer par
un langage au moins aussi performant
que le GS Basic (qu‘il sera possible de
compiler).
Applesoft et Assembleur
le bon vieil Applesoft reste le Basic
facile par excellence. Son adaptation ne
pose aucun probléme sur une autre
machine... si l'on se dispense d'utiliser
les accés directs a la mémoire.
Il autorise moult fantaisies et permet de
programmer n‘importe quelle application.
On peut lui reprocher sa lenteur (le GS
Basic ne fait pas mieux !), mais il est facile
de I'accélérer en utilisant ici et la quelques
petites routines en Assembleur.
D’ow la nécessité de comprendre le
langage machine.
Ici, &@ Tremplin Micro, nous avons
déployé des trésors d‘imagination pour
aider les néophytes (mais aussi ceux
qui n’en sont plus) @ résoudre des
dizaines de petits problémes en lan-
gage machine.
Nos recueils de routines (avec disquettes
associées) constituent une base sérieuse
et méme indispensable a tout program-
meur en Basic... soucieux de donner des
ailes 4 ses programmes.
Toutes ces routines tournent sur Apple II
avec 65C02, et la majorité d’entre elles
fonctionnent aussi sur le GS. A quelques
rares instructions prés, elles s‘accommo-
dent également du 6502.
Je conseille vivement nos recueils 4 tous
ceux qui désirent aller plus loin et mieux.
Bonne programmation ! C.-H.
Un jeu simpie
et aqmusant :
Ce programme est en Basic Applesoft et ne
comporte pas de difficultés particuliéres.
Jean Perrot aurait peut-étre pu élaborer une
routine de traitement d’erreurs, mais libre &
vous de détecter les possibles fautes de
manipulation, puis de les traiter comme bon
vous semblera.
e LANCE.DUEL explique la régle du jeu et
n‘est pas indispensable : vous pouvez en
effet la lire ci-contre. Nous vous conseil-
lons néanmoins de taper ce module car il
comporte un écran de présentation
agréable (voir page suivante).
e DUEL est le programme principal.
SON (A$300,L24) porte bien son nom !
FONTE.G est un tableau de formes
(A$6900,L$2F2) contenant les numéros
de G 49 et les caractéres...
e PION3 (A$62F8,L159) est réservé aux pions
noirs et blancs ainsi qu’au carré blanc.
100
105
PRINT CHRS (4)"BLOAD SON"
110
15 PRINT CHR$ (4)"BLOAD FONTE.G"
20 HGR
PRINT CHRS (17): HOME
FOR II = 1 TO 10:
POKE 232,0: POKE 233,96: DIM F(24) ,X(97)
125 HCOLOR= 3: POKE 8,1
130 SCALE= 1: ROT= 0
135 GOSUB 385
140 FOR I = 1 TO 24: READ F<I): NEXT
145 T = 14: HOME : POKE 769,5
150 FOR I = 1 TO 12
155 IF F¢I) = 0 THEN 170
160 DRAW FCI) AT 66 + T,40
165 FOR 11 = 1 TO 5:2 = PEEK (49200): NEXT
170 T=T + 10
175 NEXT
180 T= 14
185
FOR I = 13 TO 20: DRAW F(I) AT 87 + T,55:T = T + 10
= PEEK (49200): NEXT II: NEXT I
/ Jean Perrot —appiesorr / —
DUEL
Ce duel est un combat singulier entre 2 PIONS, évo-
vant dans le cadre d'une grille 9X9.
Le joveur utilise le pion noir et I'ordinateur joue avec le
pion blanc.
Un pion ne peut se déplacer que d'une seule case tout
autour de lui (4 la maniére du RO! aux échecs, c’est-d-dire
dans toutes les directions, y compris en diagonale).
Celui qui joue doit accomplir deux taches successives :
* Déplacer son pion.
* Détruire une case inoccupée.
Un pion ne peut pas jouer sur une case occupée par le
concurrent... ou détruite.
Encercler l'adversaire pour qu'il ne puisse plus se. déplacer.
L’ordinateur tient les comptes et indiquera le nombre de
coups nécessaires pour immobiliser l'adversaire.
POUR DEPLACER UN PION, entrer le nombre de 2 chif-
fres dont le chiffre de gauche est le numéro de Ia ligne
et celui de droite le numéro de Ia colonne.
Sion entre @ on va directement é la fin de jeu.
N.D.L.R. : Attention ! les erreurs peuvent avoir des
conséquences fatales !
4F iF
/ Paces /
SCALE= 2:T = 14
FOR I = 21 TO 24: DRAW F(I) AT 90 + T,80:T = T + 20
FOR I] = 1 TO 10:2 = PEEK (49200): NEXT I]: NEXT I
FOR J= 1702
FOR I = 1 TO 97: READ X¢1): NEXT : GOSUB 420
NEXT J
FOR J = 1 70 10 P LANCE.DUEL
GOSUB 500
HCOLOR= 0: GOSUB 480: HCOLOR= 3: GOSUB 485
FOR I = 1 TO 20: NEXT
HCOLOR= 0: GOSUB 490: HCOLOR= 3: GOSUB 495
GOSUB 505
HCOLOR= 0: GOSUB 485: HCOLOR= 3: GOSUB 480
FOR 1 = 1 TO 20: NEXT
HCOLOR= 0: GOSUB 495: HCOLOR= 3: GOSUB 490
NEXT
VTAB 22: HTAB 1: PRINT "Appuyer ‘R’ pour avoir la REGLE du JEU *
HTAB 4: PRINT “Une autre touche relance le duel ";
GET H$: PRINT : IF H$ = "R" THEN HOME : TEXT : GOTO S15
HOME : GOTO 225
DATA 21,16,12,25,0,0,27,16,29,29,26,31
DATA 27,29,16,30,16,25,31,16,15,32,16,23
:
DATA 58,54,51,40,62,57,63,58, 40 ,66,63,64,72,78,75,73,72
DATA 69,62,78,81,84,83,82,80,77,76,86,86,82,84,89,83
DATA 80,84,87,89,89,84,84,72,75,78,81,74,67,66,64,60
DATA 60,63,66,70,67,78,84,84,87,87,81,87,91,91,87,87,89
DATA 102,103,105,132,105,103,101,102,83,91,91,93,96,96
99 ,102,102,99,100,96,93,87,87,85,81 ,80 ,83,90,96,99,93
208, 212,215,206, 204,209,203, 208,206,200, 203,202,194,188
350
355
360
365
370
375
380
385
390
395
400
405
410
415
420
425
435
440
445
450
455
460
465
470
475
480
485
490
495
500
505
510
430
DATA 191,193,194,197,204,188, 185,182,183, 184,186,189,190,180
DATA 180,184,182,179,183,186,182,179,177,177,182, 182,194,191
DATA 188,185,192,199,200,202,206,206,203, 200,196,199, 188,182
DATA 182,179,179,185,179,175,175,179,179,177, 164,163,161 ,134
DATA 161,163,165,164,173,175,175,173,170,170,167, 164,164,167
DATA 166,170,173,179,179,181 ,185,186,183,176,170,167,173
END
HPLOT 50,20 TO 14,90 TO 14,100 TO 20,158 TO 1,158 TO 1,1 TO 278,1
TO 278,158 TO 259,158 To 265,100 TO 265,90 TO 228,20
HPLOT 14,100 TO 1,95 TO 1,85 TO 14,90: HPLOT 278,95 TO 265,100 TO
265,90 TO 278,85
HPLOT 1,15 T0'3,15: FOR X = 3 TO 270 STEP 30: GOSUB 410: NEXT : H
PLOT 274,15 TO 278,15
HPLOT 1,158 TO 278,158
RETURN
HPLOT X,16 TO X + 2,17 TO X + 8,18 TO X + 10,19 TO X + 13,20 TO x
+ 17,20 TO X + 20,19 TO X + 22,18 TO X + 24,17 TO X + 28,16 TO X
+ 30,16
RETURN
HPLOT X(1),147 TO X(2),152 TO X(3),154 TO X(4),158 TO X(5),157 TO
X¢6) 153 TO X¢7),152 TO X(8),147 TO X(9),142 TO X(10),147 TO XC11
),152
HPLOT X(12),148 TO X(13),144 TO X(14),140 TO X¢15),137 TO X¢16),1
35 TO X(17),132 TO X(18),137 TO X(19),144
HPLOT X(20),140 TO X(21),142 TO X(22),144 TO X(23),146 TO X(24),1
45 TO X(25),143 TO X26) ,153 TO X(27),156 TO X¢28),156 TO X29) 41
54 TO X¢30),153 TO X¢31),150 TO X(32),148 TO X33) ,146
HPLOT X(34),143 TO X(35),150
HPLOT X(36),146 TO X(37),143 TO X¢38),140 TO X39) ,132 TO X¢40),1
35 TO X(41),132 TO X(42),125 TO X(43),122 TO X44) ,116 TO X(45),1
18
HPLOT TO X(46),122 TO X¢47),120 TO X¢48),125 TO X¢49),126 TO X<5
0),128 TO X(51),129 TO X(52),126 TO X(53),124 TO X(54),123 TO X(5
5) ,122
HPLOT X¢56) ,135 TO X(57),128 TO X(58) ,125 TO X(59),117 TO X¢40),1
16 TO X(61),113 TO X(62),115 TO X(63),122 TO X(64),117
HPLOT X(65),125 TO X(66),131 TO X¢67),125 TO X(68) ,128 TO X49) ,1
22 TO X(70),112 TO X¢71),120 TO X(72) 122 TO X(73),119 TO X¢74),1
21 TO X(75),125 TO X76) ,122
HPLOT X(77),115 TO X(78),113 TO X(79),114 TO X(80),112 TO X(81),1
13 TO X(82),110 TO X(83),108 TO X84) ,110 TO X(85),104 TO X(86),1
02 TO X(87),107 TO X(88),104 TO X(89),107
HPLOT TO X¢90),109 TO X(91),109 TO X¢92),111 TO X¢93) 113 TO X(9
4) ,109 TO X95) ,112
HPLOT X96) ,110 TO X¢97),107
RETURN
HPLOT 105,122 TO 132,112 TO 105,120: RETURN
HPLOT 105,122 TO 134,126 TO 105,120: RETURN
HPLOT 161,122 TO 134,112 TO 161,120: RETURN
HPLOT 161,122 TO 132,126 TO 161,120: RETURN
POKE 768,14: POKE 769,30: CALL 770: RETURN
POKE 768,17: POKE 769,15: CALL 771
REM ----------- REGLE DU JEU -------------
HOME : PRINT CHR$ (17)
/ Jean Perrot —appiesorr /
/ paces /
5973
A0SS
4339
9D5B
9BSA
1187
0180
902B
F398
2CA1
BCBA
63B1
6898
6381
1385
AS7F
O9FD
FOFB
69AB
8875
7929
CEEE
B38F
FE26
5507
63B1
8702
0609
6F08
760B
BF66
Cé66C
C828
—
520
525
530
535
540
545
550
555
560
565
570
575
580
585
590
595
600
605
610
615
620
625
630
635
640
645
650
/ over /
INVERSE : HTAB 15: PRINT “ D UE L “: NORMAL : PRINT
PRINT " """"Ce duel est un combat singulier “““entre 2 PIONS évol
uant dans le cadre"
PRINT "d’une grille 9 x 9"
PRINT : PRINT " ~"""Le joueur joue avec le pion noir etAPPLE avec
le blanc"
PRINT : PRINT " “"""Un pion ne peut se déplacer que ~""d’une seul
e case tout autour de lui ~"""¢a la maniere du ROI aux échecs)"
PRINT : PRINT " """"Celui qui joue deyra accomplir deuxtaches suc
cessives :"
HTAB 5: INVERSE : PRINT "<A)";: NORMAL : PRINT " “DEPLACER SON PI
ON"
HTAB 5: INVERSE : PRINT "(B)";: NORMAL : PRINT " “DETRUIRE UNE CA
SE INOCCUPEE"
PRINT : PRINT “ “"""Un pion ne peut pas jouer sur une “case occup
ée ou détruite"
HTAB 28: PRINT "<RET> -->";
GET H$: HOME
HTAB 1: INVERSE : PRINT " BUT DU JEU “: PRINT : NORMAL : PRINT *
“"""Entourer I’adversaire pour qu’il nepuisse plus se déplacer."
PRINT : PRINT " “""I] est interdit a un pion de jouer “sur une ca
se détruite ou occupée"
PRINT : PRINT " ~"” “APPLE tient les comptes et indique le nombre
de coups qu’il aura fallu pourimmobiliser 1’adversaire"
PRINT : PRINT " ~""POUR DEPLACER UN PION :entrer le nombre de 2c
hiffres dont le chiffre de gauche est le numéro de la ligne et ce
lui de droite le numéro de la colonne"
PRINT : PRINT " “""Si on entre 0 on va directement a la fin du je
u"
HTAB 28: VTAB 22: PRINT "<RET> -->";
GET H$: HOME
INVERSE : HTAB 7: PRINT "RENSEIGNEMENTS TECHNIQUES": NORMAL : PRI
NT
INVERSE : PRINT "LANCE.DUEL";: NORMAL : PRINT " lance le prog.pri
ncip. "3: INVERSE : PRINT "DUEL": NORMAL
PRINT : HTAB 2: PRINT "Trois programmes L.M. sont utilisés :": PR
INT
INVERSE : PRINT "SON";: NORMAL : PRINT " ~(A$300,L24)": PRINT
INVERSE : PRINT "FONTE.G";: NORMAL : PRINT “ Tableau de formes “A
$6000,L$2F2) “qui contient,dans 1’ordre 277 ,0,1,2...9 puis A,B,C.
oeXiVidenstns™
PRINT : INVERSE : PRINT “PION3";: NORMAL : PRINT “ (A$62F8,L159)
qui contient 1 pion noir, 1 pion blanc et 1 carré blanc"
HTAB 15: VTAB 22: INVERSE : PRINT "RETURN POUR COMMENCER";: NORMA
L
GET H$: HGR : HOME : TEXT : VTAB 10: HTAB 8: PRINT "BONNE °C
HANCE !": VTAB 22
PRINT CHR$ (4)"RUN DUEL"
0300: 02 02 AD 30 CO 88 DO 05 CE 01 03 FO 09 CA DO FS
0310: AE 00 03 4C 02 03 60 00
/ paces /
DAAL
F91A
A2S5A
OFAg
2B92
1884
SF9D
A35B
F39D
1790
61FB
S69A3
E7B6
1830
41F1
DA48
7700
61FB
7DE8
C244
CE31
2E6B
ABI5
A682
2E5D
OSFB
ABAY
2858
cCé2
115
280
285
290
295
300
305
310
315
320
325
330
335
340
345
PRINT CHR$ (4)"BLOAD SON"
PRINT CHR$ (4)"BLOAD FONTE.G"
PRINT CHR® (4)"BLOAD PION3"
PRINT CHR® (4)"PRE3": PRINT CHRS (17)
HOME
DIM C(121) ,D<8)
1V$ = CHR$ (15):NR$ = CHRS (14)
REM ===== INITIALISATION =====
GOSUB 795
INVERSE : HTAB 12: PRINT "TIRAGE AU SORT": NORMAL : PRINT
PRINT "Je lance un DE et si j’obtiens un :’
PRINT PRINT IV$" 1 "NR$" c’est yous qui comencerez..."
PRINT : PRINT IV$" 2 "NR$" c’est moi..."
FOR I = 1 TO 2000: NEXT
INVERSE : FOR I = 10 TO 12: VTAB I: HTAB 18: PRINT " ~~“: NEXT
NORMAL
FOR 1 = 1 TO 20:K = INT ¢ RND (1) * 2) +1
HTAB 19: VTAB 11: PRINT K
FOR J = 1 TO 12:2 = PEEK (49200): NEXT J,I
VTAB 15
IF K = 1 THEN PRINT "C’EST DONC VOUS QUI COMMENCEZ"
IF K = 2 THEN PRINT "C’EST DONC MOI QUI COMMENCE"
VTAB 21: PRINT "PATIENTEZ QUELQUES INSTANTS...": FOR I =
Q: NEXT
REM ====== LE CADRE
SCALE= 1: ROT= 0
POKE 232,0: POKE 233,96
HGR : HCOLOR= 3
FOR I = 18 TO 153 STEP 15
HPLOT 80,1 TO 215,1:2 = PEEK (49200)
HPLOT 62 + 1,18 TO 62 + 1,153:2 = PEEK (49200)
NEXT
FOR I =1709
DRAW 1 + 2 AT 70 + I * 15,14:2 = PEEK (49200)
DRAW I + 2 AT 70,15 * I + 14:2 = PEEK (49200)
NEXT
SCALE= 2
DRAW 15 AT 15,40: DRAW 32 AT 15,70
DRAW 16 AT 15,100: DRAW 23 AT 15,130
SCALE= 1
POKE 232,248: POKE 233,98
REM -- POSE DES PIONS ==
IF K = 2 THEN 345
HOME : VTAB 22: PRINT "Posez votre pion...Dans quelle case ";
INPUT N
GOSUB 670: IF L < 1 ORL > 9 ORC < 1 ORC > 9 THEN GOSUB 775: C
ALL - 198: GOTO 320
POKE 6,N:A = A + 1: GOSUB 765
DRAW 1 AT X,Y:C<NN) = 5
K = 2: FOR I = 1 TO 2000: NEXT
N = 55: GOSUB 670
/ sean PERROT—APPLESOFT /
ASDC
2700
6855
OAFS
2F97
A2A7
449C
OFSS
97AE
0788
ABBS
3034
290A
Scso
SSB?
4470
6F01
6408
5592
AFD1
9CES
E3CC
10D2
F190
458A
4004
4F36
0582
occs
0168
9468
0582
35CB
7BAS
7B01
37CA
8542
SESA
F605
9702
A092
A67A
2106
3391
0034
040F
/ pace? /
/ ove /
360 IF C(NN) = 5 THEN L = 4:C = INT ¢ RND (1) * 3) + 4:N = 40 + CiNN
=N + INT (N / 10) + 1: GOSUB 670 435E
365 : 0034
370 POKE 7,N:B = B + 1: GOSUB 770 D979
375 DRAW 2 AT X,Y:C(NN) = 5 DAD?
380 REM --- DEROULEMENT DU JEU ---
385 REM <« LE JOUEUR >=======
390 K = 1: HOME : VTAB 22: PRINT "A vous de jouer... Quelle case "; Cé9A
395 M= PEEK (6) C786
400 N = M: GOSUB 670:X1 = X:Y1 = Y:L1 = L:C1 = C:N1 = NN B183
405 INPUT M2: IF M2 = 0 THEN 610 4EC4
410 HCOLOR= 0: DRAW 1 AT X1,Y1:C(N1) = 0 2712
415 N = M2: GOSUB 670:X2 = X:¥2 = Y:L2 = L:C2 = C:N2 = NN AEBA
420 IF A = 0 THEN 430 4E49
425 IF ABS (L1 - L2) > 1 OR ABS (Ci - C2) > 1 OR C(N2) = 5 THEN GO
SUB 775: GOTO 390 O9BA
430 IF L2 < 1 OR L2 > 9 OR C2 < 1 OR C2 > 9 THEN 390 0B71
435 HCOLOR= 3: DRAW 1 AT X2,Y2:C(N2) = 5 F81D
440 POKE 6,N:A = A + 1: GOSUB 765 A67A
445 REM --- CASE A DETRUIRE ---
450 PRINT : HOME : VTAB 22: PRINT "CASE a detruire..Laquelle "; OFOF
455 INPUT M: IF M = 0 THEN 610 0cé0
460 N = M: GOSUB 670:LD = L:CD = C:XD = X:YD = Y:ND = NN SBE2
465 : 003A
470 IF LD < 1 OR LD > 9 OR CD < 1 OR CD > 9 OR C(NN) = 5 THEN GOSUB
775: GOTO 450 38F1
475 GOSUB 730 F948
480 REM === TEST DE FIN DE PARTIE ===
485 N= PEEK (7):NN=N + INT (NZ 10) +1 1BDB
490 FORI=1T08 : OEC4
495 IF CCNN + D(I)) < > 5 AND C(NN + D(ID) < > 9 THEN 510 6A2E
500 NEXT I 90CB
505 K = 1: GOTO 610 45c8
510 REM == JEU DU MICRO ==
SiS K = 2 F 4540
520 HOME : VTAB 22: PRINT "Je joue... Patience !..."3 SEA
525M = PEEK (7) . CD87
530 N = M: GOSUB 670:X1 = X:Y1 = Y:N1 = NN B6EF
535 HCOLOR= 0: DRAW 2 AT X1,Y1:C<(N1) = 0 5213
540 : 0034
545 N = M: GOSUB 685: GOSUB 700 4879
550 GOSUB 670:X2 = X:Y2 = Y:N2 = NN 164D
555 HCOLOR= 3: DRAW 2 AT X,Y:C(N2) = 5 F9BA
560 POKE 7,N:B = B + 1: GOSUB 770 0979
565 N= PEEK (6): GOSUB 685 2014
570 GOSUB 700: GOSUB 670:XD = X:YD = Y:ND = NN 6504
575 GOSUB 730 Fo4A,
580 : § 003A
585 N= PEEK (6):NN=N + _ INT (N/ 10) + 1 27DA
590 FORI=17T08 : OEC4
595 IF C(NN + D(I)) < > 5 AND C(NN + D(I)) <¢ > 9 THEN 380 4C33
600 NEXT 1 9DCB
605 K = 2: GOTO 610 339
/ paces /
/ Jean PERROT— apPLesorT /
610 REM === FIN DE PARTIE ===
615 HOME : VTAB 22: PRINT “C’EST FINI !..LA PARTIE EST TERMINEE !.." A3DC
620 VTAB 23: PRINT "<RETURN) pour obtenir le score"; 62BA
625 FOR J = 1 TO 3: GOSUB 7465: GOSUB 770: NEXT 9A90
630 GET H$: HOME : TEXT 33BE
$635 VTAB 12: HTAB 3 3F08
640 IF K = 1 THEN PRINT "BRAVO !.. Vous avez gagne en “ coups" S98F
645 IF K = 2 THEN PRINT "DESOLE !.. Je suis le plus fort : PRINT
"“J’ai gagne en ";B;" coups" 3863
650 VTAB 20: PRINT "UNE AUTRE PARTIE ? (O/N) “3: GET HS: PRINT HS 6F65
655 IF H$ = "0" THEN RUN 92EC
660 TEXT : HOME : PRINT : PRINT CHR$ (4)"RUN /T20/STARTUP" B94E
665 END 0180
670 REM === TRAITEMENT DES CASES ===
675 L = INT (NZ 10)0:C =N- 10 #L 2A95
680 X= 15 * C + 67:9¥ = 15 *#L + 15 o00D
685 NN =N + INT (N / 10) #1 S919
690 RETURN 6381
695 N = NN - INT (N / 11) - 1: RETURN C407
7oo l= I € RND (1) * 8) #1 S095
705 E=E + 1; IF E > SO THEN 610 360E
710 IF CCNN + D¢1)) = 5 OR CNN + D(I)) = 9 THEN 700 3F90
715 N= NN + D¢I) - INT (<NN + DCID) 4 11) - 136 = 0 8286
720 RETURN 63B1
725 : 003A
730 REM === EFFACEMENT CASE DETRUITE ===
735 IF K = 1 THEN GOSUB 765 680F
740 IF K = 2 THEN GOSUB 770 3£0C
745 HCOLOR= 3 sics
750 DRAW 3 AT XD,YD + 1 ADEA
755 C<ND) = 5 CE2B
760 RETURN 6381
765 POKE 768,255: POKE 769,80: CALL 770: RETURN 7702
770 POKE 768,100: POKE 769,60: CALL 770: RETURN SC95
775 HOME : VTAB 21: CALL - 198: PRINT "ERREUR !... “RECOMMENCEZ !...
i] 185C
780 FOR I = 1 TO 2000: NEXT 290A
785 RETURN 63B1
790 : 003A
795 FOR I = 1 TO 121: READ C¢1I): NEXT DF7A
800 FOR I = 1 TO 8: READ D¢I): NEXT 931F
805 RETURN 63B1
B10 DATA 9495959494949 99 I 59 5F 2DAE
815 DATA 9,0,0,0,0,0,0,0,0,0,9 1234567893 7850
820 DATA 9,0,0,0,0,0,0,0,0,0,9 D 4 7B5D
825 DATA 9,0,0,0,0,0,0,0,0,0,9 2 7B50
830 DATA 9,0,0,0,0,0,0,0,0,0,9 U | 7B5D
835 DATA 7,0,0,0,0,0,0,0,0,0,9 5 7B5D
840 DATA 9,0,0,0,0,0,0,0,0,0,9 E 6 7B5D
845 DATA 9,0,0,0,0,0,0,0,0,0,9 L 7 7B5D
850 DATA 9,0,0,0,0,0,0,0,0,0,9 8 7B5D
855 DATA 9,0,0,0,0,0,0,0,0,0,9 9 7B5D
B60 DATA 9494949494949 49 595959 2DAE
865 DATA 1,12,11,10,-1,-12,-11,-10 7819
/ Paces /
oo
oo
o1
o2
o2
3c
2c
2?
oo
SF
a4
2D
24
24
SE
25
24
2D
2c
25
35
2D
25
24
35
36
36
2E
2D
35
oo
04
a7
oo
3F
3E
25
24
34
3c
24
24
27
24
2D
aa
36
3c
2D
2D
SF
2D
3F
2D
2D
77
os
9B
19
B3
24
24
2D
oa
oa
ao
36
25
3F
36
24
25
25
2d
2D
36
34
36
SF
a6
36
35
2c
2D
36
21
oa
oo
oo
2d
3E
3c
24
36
24
3c
2c
27
27
2D
os
36
24
2c
2D
SF
25
SF
2D
25
SF
oo
o1
o1
02
a2
24
aq
2D
a1
oo
a1
oa
2D
SF.
35
24
2c
25
2D
35
36
26
3c
37
oa
06
2D
2c
34
35
24
a9
20
a9
24
3F
3c
2c
36
34
24
24
27
34
34
as
36
3F
3D
2D
3F
3F
3F
2D
3F
3F
89
16
AS
2D
cé
24
oo
3F
34
4°
34
oo
35
37
2D
3c
2c
3c
oo
35
36
3F
27
2c
21
oo
25
2c
3F
36
24
3c
27
3c
SF
2F
SF
2D
36
36
24
24
34
2E
3F
as
06
3c
3F
2D
2c
3F
27
2D
SF
3F
oo
o1
o1
02
a2
25
49
SF
35
Oo?
35
o1
35
06
35
3c
2E
24
oo
06
36
24
24
2D
24
ao
25
2c
3F
35
24
24
24
24
aa
2E
3c
26
35
35
36
04
2E
36
SF
238
oa
3F
SF
25
20
SF
2D
2d
3F
oo
oA
2c
Bi
41
bs
2D
29
27
2D
24
2b
24
06
og
35
SF
36
25
a9
oa
oa
24
3c
36
24
2D
24
37
27
26
2c
24
24
24
oo
2E
24
3F
2D
36
36
oo
Ze
35
27
3F
49
3E
3F
3F
2D
3F
2D
25
3F
oo
oo
o1
a1
a2
a2
35
3D
25
25
34
25
25
oo
og
3E
3E
35
3c
2D
2D
oo
2F
2D
3E
24
27
24
37
24
2c
36
24
24
24
2D
2E
25
SF
25
35
35
21
2E
36
2c
SF
29
FONTE.G (A$6000,LS2F2)
AP
3D
Ccé
s3
Ea
35
24
25
25
2E
25
2D
ei
3c
3E
36
36
3c
25
20
2?
2D
2D
SE
34
24
24
37
24
24
35
25
3c
25
2?
2E
2D
SF
25
2&
36
2c
2E
2E
2c
ao
3c
37
2c
3F
2D
3F
2D
3F
SF
3F
3E
2D
3F
SF
27
2D
SF
27
3F
937E
3DE0
3E6D
aan
2E3A
Bo14d
AEBS
438A
FA?2
06A4
cs4s
3550
68A0
c893
324E
A290
CDéA
38cs
7866
SEAS
DBCS
ASED
AEBS
859A
8561
ASS
BBOD
2381
7485
8561
B380
0B30
aAcci
F294
7ECD
BCEF
6EC3
CE76
7AS?7
BB3C
8564
FO4F
A30B
OBAS
9B7D
C9FS
pec4
7743
84E2
7651
4S53F
7cD4
4Aic
S54A
S23A
90Fs
/ Jean PERROT—APPLESOFT / —
VERIF-COMPTE
Vous arrive-t-il de contréler vos relevés de compte bancaire ? Sans aucun
doute. Savez-vous pour autant ov vous en étes exactement ? Pas sir ! Il est
rare que le dernier relevé bancaire tienne compte des chéques récents.
De plus, certains débiteurs ne sont pas pressés de présenter leurs chéques 4 I’encais-
sement... d’ot bon nombre de "problémes”.
Le petit programme de Jean Perrot n'a pas la prétention de gérer plusieurs comptes
et ce n’est pas davantage un logiciel “professionnel”. Néanmoins, tel qu'il se pré-
sente, il pourra rendre service 4 bien des Francais moyens. Vous peut-étre ?
Notez que la partie INSTRUCTIONS peut 6tre négligée.
HOME : DIM ND(30) ,ND$<30) ,NC<10) ,NC$<10) C135
IV$ = CHR (15):NR$ = CHRS (14):D$ = CHRS (4) 187A
PRINT CHR* (4)"PRE3": PRINT :ND = O:NC = 0:SB = 0:SC = 0 788C
PRINT Dé"BLOAD SIRENE" 1BAE
VTAB S: POKE 1403,35: PRINT IV$" “MENU “"NRS 079A
VTAB 8: POKE 1403,33: PRINT "Voulez-vous :": PRINT c40c
PRINT IV$" 1 "NR" Consulter les instructions ?": PRINT CD45
PRINT IV$" 2 "NR$" Voir un exemple du tableau final 2": PRINT 4942
PRINT IV$" 3 "NR&" Commencer immédiatement ?": PRINT BDé!
PRINT IV$" 4 "NR$" Quitter le programme ?" 1F65
PRINT : POKE 1403,33: PRINT "VOTRE CHOIX ey 781F
GET H$:H = VAL (H$): IF NOT H OR H < 1 OR H > 4 THEN 155 CéA3
ON H GOTO 580,670,175,165 729E
POKE 6,0: HOME : PRINT : PRINT : PRINT CHR$ (4)"RUN STARTUP" 97FO
REM =======: =: a
HOME : PRINT “Retraits non enregistrés (taper “0” pour ARRETER)" 220F
FOR I = 1 TO 30: INPUT ND¢1):P = ND(I): GOSUB 540:ND(1) = P:ND =
ND + NDCI) C98A
ND$(I1>) = STRS ¢ INT (ND(I))):ND$ = STR$ ¢ INT <ND)) 4F50
CALL - 998: PRINT “ “Numéro ";I3" --> “"SND(1): GOSUB 560 Cé68A
IF ND(I) = 0 THEN D = I: GOTO 205 1A76
NEXT 0582
GOSUB 545 ED4E
P = ND: GOSUB 540:ND = P 3F21
: 003A
PRINT "Sommes non créditées (taper ‘0’ pour ARRETER)" BD27
FOR I = 1 TO 10: INPUT NC(I):P = NC(I): GOSUB 540:NC(1) = P:NC =
NC + NCCI) BD82
NC$(I1) = STR$ ¢ INT (NC(I))):NC$ = STR$ ¢ INT (NCD) 4C4C
CALL - 998: PRINT " “Numéro “313" --> “"3NC(1): GOSUB 5460 A289
IF NC(I) = 0 THEN C = I: GOTO 250 1974
NEXT 0582
/ Paces /
/
440 H
/ verir-compre /
250 GOSUB 545
255 P = NC: GOSUB 540:NC = P
260 :
265 PRINT : INPUT “Solde de mon carnet :";SC:SC$ = STR$ ¢ INT (SC)):
P = SC: GOSUB 540:SC = P: GOSUB 560: CALL - 998
270 POKE 1403,40: INPUT "Solde du relevé bancaire :";SB:SB% = STRS ¢
INT (SB)):P = SB: GOSUB 540:SB = P: GOSUB 560
275 PRINT : HTAB 9: PRINT “Voulez-yous modifier quelque chose ? ¢0/N)
"3: GET H$: PRINT
280 IF H® < > "O" THEN 350
285 PRINT : PRINT "Taper <R> pour un retrait <V> pour un versement"
290 PRINT “ <C> pour corriger le solde du carnet “"""<B> pour le rele
vé bancaire"
295 PRINT : POKE 1403,25: PRINT IV$" R "NR$" ou "IV$" V "NR$" OU “IVS
"C "NR$" ou "IVS" B "NRS" ““: GET 2%
300 IF 2$ = “C" OR Z2$ = "B" THEN 310
305 INPUT "Numéro ? ";N
310 INPUT "Nouveau montant ? ";MO
315 IF 2$ = "R" THEN NZ = ND(N):ND(N) = MO:ND = ND - NZ + NO(N):P = N
D: GOSUB 540:ND = P
320 IF 2% = "V" THEN NZ = NC(N):NC<N) = MO:NC = NC - NZ + NC(N):P = N
C: GOSUB 540:NC = P
325 IF 2$ = "C" THEN SC = MO
330 IF 2% = "B" THEN SB = MO
335 PRINT : PRINT "AUTRE CORRECTION ? <O/N) “: GET HS
340 IF H® = "0" THEN 295
345 REM ==s=ssssssssssssssssasssssssssssasasssaasaSsaSaaassssss
350 REM ======= AFFICHAGE DES RESULTATS ET CONCLUSION =======
355 REM =ssssessssssssssssssssasssssasas sss Saas saa SSSSSSSSSSsas
360 HOME
365 VTAB 1: GOSUB 545: VTAB 3: GOSUB 545: VTAB 19: GOSUB 545: VTAB 21
: GOSUB 545
370 H = 0: GOSUB 550
375 VTAB 2: HTAB 5: PRINT “RETRAITS NON DEBITES";: HTAB 32: PRINT “VE
RS.NON CRED."3;: POKE 1403,57: PRINT "VERIFICATION"
380 FORI=17T0D-1
385 IF 1 < 16 THEN VTAB I + 3: HTAB 2: PRINT 13: POKE 1403,10 - LEN
(ND$(1)): PRINT ND¢I): GOTO 395
390 IF I > 15 THEN VTAB (I - 12): POKE 1403,16: PRINT 13: POKE 1403,
24 - LEN (ND$(I)): PRINT NDI)
395 NEXT
400 GOSUB 555
405 VTAB 20: POKE 1403,2: PRINT IV$" R "NR$;: POKE 1403,12: PRINT ND
410 H = 29: GOSUB S50
415 FORI=1TO0C-1
420 VTAB (I + 3): POKE 1403,30: PRINT I;: POKE 1403,40 - LEN ‘NC$<I)
>: PRINT NCCI)
425 NEXT
430 SO = SC + ND - NC:S0$ = STR$ ¢ INT (SO)):P = SO: GOSUB 540:S0 =
P
435 VTAB 20: POKE 1403,30: PRINT IV$" V "NR$;: POKE 1403,37 - LEN (N
C$(1)): PRINT NC
= 45: GOSUB 550
Pace 12 /
ED4E
3F1F
003A
75C2
SF72
97CC
AAS
9080
E07D
B2C7
107C
99DC
$6682
54c8
6FCS
8448
E946
AEAB
64E0
2F97
0B87
93CC
BD60
2DCA
F468)
F507
0582
044F
C279
SA07
FEC?
21AF
0582
9D02
cgoo
3305
445
450
455
460
465
470
475
480
485
490
495
500
50s
510
515
520
525
530
535
540
545
550
555
560
565
570
575
580
585
590
S95
600
605
610
615
620
625
630
REM =ss==sss====s==s=ssss=ssssssssssessssssss====
REM =====: VERIFICATION
REM sss=s===s=s===s==s=ssssssssssssssessssssseess===
VTAB 6: POKE 1403,47: PRINT "SOLDE CARNET “"==>"5: POKE 1403,74 -
LEN (SC$): PRINT SC
VTAB 8: POKE 1403,51: PRINT IV$" R "NR;" ~""--)> “""4"53 POKE 140
3,74 - LEN (ND$): PRINT ND
VTAB 10: POKE 1403,51: PRINT IV$" V "NR$;"
03,74 - LEN <NC$): PRINT NC
VTAB 11: POKE 1403,68: PRINT * .
VTAB 13: POKE 1403,54: PRINT "TOTAL ~
$0$): PRINT SO
VTAB 16: POKE 1403,47: PRINT "SOLDE REL.BANC. -->";: POKE 1403,74
- LEN (SB$): PRINT SB
H = 79: GOSUB 550
IF SO = SB THEN VTAB 20: POKE 1403,55: PRINT IV$"TOUT EST CORREC
T"NR$: GOSUB 565: GOTO 505
IF SO <¢ > SB THEN VTAB 18: POKE 1403,52: PRINT "DIFFERENCE -->
";¢SO - SB): VTAB 20: POKE 1403,53: PRINT IV$" IL Y A UN PROBLEME
"NR$: GOSUB 570: GOSUB 570: GOSUB 570
VTAB 22: HTAB 4: PRINT IV$" D "NR$" =DEBUT" SPC( 10)IV$" C "NR$"
= CORRIGER (noter les numéros)" SPC¢ 9)IV$" F "NR$" = FIN"
AA = PEEK (¢ - 16384): POKE - 16368,0
--) “""="52 POKE 14
POKE 1403,74 - LEN ¢
IF AA < > 68 AND AA < > 70 AND AA < > 67 THEN 510
IF AA = 68 THEN RUN
IF AA = 67 THEN HOME : GOTO 285
IF AA = 70 THEN 165
P= INT (P * 100 + .5) / 100: RETURN
FOR J = 1 TO 10: PRINT "-------- “3: NEXT : RETURN
FOR J = 1 TO 21: VTAB J: POKE 1403,H: PRINT "!": NEXT : RETURN
FOR J = 4 TO 18: VTAB J: POKE 1403,15: PRINT "!": NEXT : RETURN
FOR II = 1 TO 30:22 = PEEK (49200): NEXT : RETURN
FOR I] = 1 TO 2: CALL 781: NEXT : RETURN
FOR I] = 1 TO 20:BZ2 = PEEK (49200): NEXT : RETURN
POKE 1403,33: PRINT IV$" INSTRUCTIONS "NR$: PRINT
PRINT " “""""""Chacun sait combien i] est pénible de verifier la
gestion d’un compte": PRINT “bancaire . Le solde du relevé envoyé
par la banque ne coincide jamais, hélas! ““avec le solde que vou
S$ avez calcul2."
PRINT " “""""r™ En effet, il y a toujours des chéques non débités
et des ver nts non crédités"
PRINT = *"" “Le but de ce programme est de vérifier qu’aucune e
rreur n’a été commise": PRINT "ni par yous-meme ni par la banque"
: PRINT
PRINT " “""""""I] suffira d’entrer successivement ~:"
PRINT “~1 les montants des retraits non débités par la banque"
PRINT "-2 les montants des versements non crédités"
PRINT "-3 le solde que vous avez calculé ‘par vous-meme ou par or
dinateur)"
/ sean PERROT—ApPLesorr /
557¢
8280
68AD
AS47
6AD0
C901
3F0C
1BIF
23CE
12AB
9174
sc49
7ADD
2848
ABCS
0034
5C61
F970
6E45
306C
9CCF
ED14
FBBS
2F97
S1BB
9BA1
A345
SDF3
OCE?
BIA
4107
3FB9
J Paces /
635
640
675
680
/ verir-compre /
PRINT "-4 le solde du relevé bancaire"
PRINT : PRINT “
ableau final. Dans un cas comme dans l’autre il" Asc3
645 PRINT “faut bien noter les NUMEROS des sommes enregistrées." 2465
650 VTAB 22: POKE 1403,40: PRINT 1V$" T.S.V.P. “--> "NR& 202D
655 GET H$: HOME 61FB
660 GOTO 120 113€
665 END 0180
670 REM ======== EXEMPLE ========
FOR I = 1 TO 20: READ ND¢1):NDS<I) =
ND = ND + ND¢1):P = ND: GOSUB 540:ND = P
Le programme permet de corriger les erreur
s soit a la fin de la SAISIE": PRINT “soit aprés l’affichage du t
STR$ ¢ INT (ND¢I)))
685 NEXT :D = I 3519
690 ND$ = STR$ ¢ INT (ND) 1071
695 FOR I = 1 TO 5: READ NC(I):NC$(I) = STRS ¢ INT (NC(I))) 4480
700 NC = NC + NC(I):P = NC(I): GOSUB 540:NC(I) = P 7572
705 NEXT :C = 1 cE18
710 NC$ = STR$ ¢ INT (NC)) Al 6F
715 SB = 2440.49:SB$ = STR$ ¢ INT (SB)? 6178
720 SC = 7341.85:SC$ = STR$ ¢ INT (SC)? D683
725 $0 = SC + ND - SC:P = SO: GOSUB 540:S0 = P:S0$ = STR$ ¢ INT (SO)
) CEO7
730 RESTORE SDAE
735 DATA 123.5,254.61,1281.75,1500,264.25,32.3,385.45,53.25,2763.51 C8CB
740 DATA 693.37, 259.2,82.9,164.15,281 .5,390.27,345.67,289.34,1200 ,876
+36,872.5 6418
745 DATA 12953.67,795.36,410.2,343.51 ,2512.7 9960
750 GOTO 350 3F43
755 GET H$:H = VAL (H$): HOME : IF NOTH ORH <1 ORH > 3 THEN 155 CE73
SIRENE ,A$0300 ,L$0054 J a]
0300: A9 01 A2 FF AO FF 4C 1F 03 A9 01 A2 FF AD 01 4C AAO
0310: 1F 03 A9 80 A2 06 AD FF 4C 1F 03 00 1F 9D 42 8D CEB
0320: 1B 03 8C 1C 03 BE 1D 03 AY 00 BD 1E 03 08 78 AE 36FC
0330: 1D 03 AD 1E 03 6D 1C 03 8D 1£ 03 A8 8B DO FD AD E202
0340: 30 CO 8A AB 88 DO FD AD 30 CO CA DO ES CE 18 03 AATF
0350: DO DD 28 40 3F35
INTRODUCTION A LA PROGRAMMATION SCIENTIFIQUE
EN TURBO PASCAL (par Thomas Lachand-Robert)
Cette introduction & la programmation scientifique et technique en Turbo Pascal se des-
tine plus particuligrement cux étudiants des deux premiéres années d'université et aux
éleves des classes préparatoires de mathématiques supérieures et spéciales.
Uouteur, Thomas Lachand-Robert, actuellement élave a I'Ecole Polytechnique, a voulu
pporter & tout jeune étudiant une premiére approche de la programmation scientifique
sons toutetois proposer un cours. Le lecteur y trouvera des chapitres traditionnels de
mathématiques abordont, entre autres, l'algébre linéaire, le calcul différentiel et inté-
‘al, et des exemples tirés de la physique et de nombreu:
ies tracés de courbes, les surfaces, les champs diftérentiels.
Les nombreux programmes et modules proposés sont tous accompagnés de commentai-
es qui donneront au lecteur des indications sur la nature d'un certain nombre de proble-
mes et certaines solutions que l'on peut y apporter. L'utilisateur, grace 4 cet ouvrage,
pourra se contruire une premiére couche technique 6 partir de laquelle un travail bien
structuré sera immédiatement profitable.
Livre broché format 190X230 — 286 poges — 178F — SYMEX, 68 posse Coré, 75018 PARIS — Tél (16-1) 42.08 95.98
ogrammes graphiques tels,
En fait, il y a deux sortes de programmeurs, ceux
qui font de l'informatique pour s'amuser ou pour
épater les copains (on les appelle des amateurs),
et puis les autres, les pros, tous ceux qui gagnent
leur vie 4 la sueur de leurs doigts manucurés.
Les premiers ont tout leur temps — quand on aime
on ne compte pas —, ils programment en Basic, en
Pascal, en C ou mieux (ou pire) en Assembleur.
Les autres ont toujours une semaine de retard sur
leur planning et utilisent des outils de programma-
tion puissants tels que DBASE ou MEMSOFT.
Je me souviens du temps archaique od I'importa-
teur de Commodore vendait ses CBM 8032 comme
des grille-pain : quelques pages de doc et une dis-
quette systéme. Pour cing ou six mille francs de
plus, on avait droit & une gestion de fichier en Basic
(bugguée), une compta (archi-bugguée), un traite-
ment de texte (en américain) et un jeu du pendu en
suédois.
Pour les développeurs assoiffés dans ce désert,
MEMSOFT arrivait comme une oasis : pensez donc,
le Basic du CBM gagnait le séquentiel indexé, les
masques de saisie et surtout, on pouvait utiliser
des disques durs de capacité quasi-illimitée 4 une
époque ou les plus courageux échangeaient leurs
lecteurs de cassettes contre des disquettes 360 K.
Cela dit, le CBM n’était pas vraiment un marché
porteur et une deuxiéme version de MEMDOS allait
apparaitre, sur ITT2020 d'abord (le premier clone
Apple) puis sur |’Europlus, le IIE, le IC, I'IBM et puis
tout récemment, sur |'APPLE GS.
Pour éviter la redoutable pompe 4 logiciel qui,
comme chacun feint de I'ignorer, fonctionne a plein
rendement sur |'Apple, les concepteurs futés
allaient distribuer leur produit sous la forme d'une
carte pleine de puces, moins facile 4 copier qu'une
disquette 5 pouces. Voici comment, grace 4 leur
/ Clavde auBry —apPpLEncs / —
ingéniosité commerciale et 4 la qualité de leur logi-
ciel, ils sont encore ld, 4 se faire bronzer le clavier,
au soleil des Alpes-Maritimes.
UN DESIGN D’ENFER
lly a sept ans, lorsque j'ai acheté mon premier MEM-
DOS, j‘avais eu droit 4 une carte imprimée entourée
de scotch et de plastique pustuleux avec une dis-
quette du méme acabit. Aujourd’hui, je dois dire, ils
font fort ! Je suis ressorti de chez mon fournisseur
préféré avec une sorte de petite mallette noire (style
pistolet de collection): sur I'emballage, le sigle
MEMSOFT et un palmier (genre Paris-Dakar) ; dans la
boite, la carte pleine de puces précitée, une disquette
3.5 pouces, et un bouquin de 487 pages décrivant le
BASIC MEMSOFT en détail.
Si vous ne savez pas quoi offrir 4 votre PDG, faites-lui
cadeau de MEMSOFT ; méme s'il n‘utilise pas le logi-
ciel, il pourra garder la boite, c'est classe !
Y-A-T'IL UN ROULEAU
DE SCOTCH DANS LA BOITE ?
Avant tout, ouvrir l'Apple GS. Opération facile si
on dispose de trois mains et que l'on est premier
prix de conservatoire de fldte 4 quinze trous. Voila,
C'est fait. Je constate au passage que ma carte
d'extension mémoire est toujours 14 (condition sine
qua non au fonctionnement de MENDOS) ; intro-
duction de la carte dans le slot 4 comme il est dit a
la page 17 de la doc (dont les pages 1 4 29 viennent
de se détacher...). En plus de la mallette, votre
PDG aura un puzzle...
Terminé. Fermeture de |'Apple dans un bruit de
noisette écrasée. Introduction de la disquette
systéme dans le lecteur 1.
Savez-vous pourquoi j‘aime bien le GS ? Eh bien !
c'est la seule machine actuelle 4 ne pas avoir de
ventilateur ! (suite page 16).
Ss / PACES | —
— / JAIMIS UN PALMI
J'allume donc silencieusement la béte qui sommeil-
lait ; elle avale la jolie petite disquette blanche
avec prodos, la jolie petite disquette bleve (avec
palmier) dans son deuxiéme lecteur... MIAMM,
SLURRRP, RAAACLLLLE, BLURRRRP...
UN REGAL POUR MA POMME
Heureusement les gens de MEMSOFT sont plus
doués pour écrire des logiciels que pour relier
des bouquins. Le temps de cliquer sur l'icéne
"MENU" et je suis convaincu que MEMDOS n'est
pas une nouvelle version de LOAD RUNNER mais
bien un outil de programmation, et je sélec-
tionne MEMSOFT.
Trois-quarts de tour de disquette plus loin, je me
retrouve en paysage familier : a resemble 4 MEM
BASIC IBM comme deux gouttes d'eau.
Alors voila, MEMSOFT ca se compose de trois par-
ties principales. La premiére, c'est MEMBASIC : un
Basic puissant et structuré, un beau Basic de ges-
tion avec une précision de 14 chiffres significatifs
des instructions comme DO..LOOP, SELECT..CASE,
IF..THEN..ELSE multilignes avec la possibilité d'uti-
liser des étiquettes de branchement.
Pour le debbugage, MEMBASIC permet de tracer le
programme dans une fenétre indépendante... un
vrai plaisir.
Mais MEMSOFT, ce n’est pas seulement un BASIC
puissant ; c'est aussi, et surtout, un gestionnaire
de fichiers qui vous libére de la programmation
laborieuse, pénible et répétitive des classiques
créations, recherches, effacements de fiches.
MEM-FILE structure ses données en arbres B,
systéme présentant un bon compromis entre les
i
organisations arborescentes et les organisations
séquentielles. Si vous avez déja écrit une gestion
de fichiers en arbres B, vous savez que |'écriture
des modules de base n’est pas la portée du pre-
mier basicois venu. MEMSOFT permet 4 ce méme
basicois d'utiliser ces structures avec presque
autant de facilité qu’il a écrit, il y a une demi-heure
et pour la premiére fois, PRINT "BONJOUR".
C’en est écceurant : les applications de haut niveau
en gestion compta etc. deviennent d'une telle faci-
lité que l'on se dit que pour continuer & program-
mer dans un autre langage, il faut soit étre maso-
chiste, soit ne pas avoir lu cet article ; d'autant que
les gens de MEMDOS ont crée un autre utilitaire :
MEM-SCREEN qui est, 4 la saisie, ce que MEM-FILE
est au fichier : vous définissez une fenétre, des tex-
tes a afficher, des zones de saisie, des formules de
calcul, des contréles sur les saisies et des formats
d'affichage ; MEM-SCREEN se débrouille pour gérer
tout cela.
NON JE NE SUIS PAS
VENDU A MEMSOFT
Pour ne rien vous cacher, MEMSOFT, ‘aime bien,
comme j'aime bien tous les bons produits qui nous
facilitent la vie & nous autres, pauvres informati-
ciens. C'est vrai quoi, & force de ne penser qu’a
\‘utilisateur final et & son confort, on oublie un peu
que les développeurs passent tout de méme pas
mal de temps devant leur clavier et ont des taux
d'adrénaline inversement proportionnels 4 la
vitesse de leurs compilateurs.
Alors vive BORLAND, bravo MEMSOFT !
Eh oui ! En France, on a plein d'autres bonnes cho-
ses, en dehors du Camembert et du Bourgogne !
Pour devenir un as du GSBasic, offrez-vous :
ALA DECOUVERTE
DU GSBasic
Un ouvrage
TREMPLIN MICRO
de plus de 260 pages.
Utilisez le bulletin de commande, a la fin de la revue
/ pace 16 /
Comment déterminer quel est le R fi NG
plus grand nombre d'une série ? [=
Cette routine-exemple construit d’abord une série de 45 nombres aléatoires, plus petits que 999 (ligne 125). Notez
que la virgule de Ia ligne 130, a droite de N(I), permet un affichage automatique sur 3 colonnes. Pour obtenir un
bon alignement, on augmente la valeur de SP (SPC) quand le numéro du rang est inférieur & 10. La recherche est
effectuée dans la boucle des lignes 135-150. Le cas de plusieurs nombres identiques n’est pas prévu.
TEXT : PRINT CHR® (17): HOME
DIM N(45)
INVERSE : PRINT “ *#* LE PLUS GRAND NOMBRE D’UNE SERIE ** "
NORMAL : VTAB 3
FOR I = 1 TO 45
NCI) = 1 + INT ¢ RND (1) * 998):SP = 2: IF I < 10 THEN SP = 3
PRINT 1; SPC¢ SP) sNCI),: NEXT
FOR I = 2 TO 45
IF NCI) < = NCCHERCHE) THEN 150
CHERCHE = I
NEXT
VTAB 20: INVERSE : PRINT N(CH):: NORMAL
PRINT " est le plus grand - position: ";: INVERSE : PRINT CH: NOR
MAL
VTAB 22: PRINT "PRESSEZ UNE TOUCHE ";: GET R$: VTAB 2: CALL - 95
8: LIST 120,160
PRINT : VTAB 22: PRINT "(E)ncore (Basic (S)tartup disquette:ctG
":: GET R$
IF R$ = “E" OR RS “e" THEN RUN
IF R$ = "B" OR R$ = "b" THEN HOME : END
IF R$ = "S" OR R$ = "s" THEN PRINT CHRS (4);"RUN /T20/STARTUP"
ALEA
Le procédé est classique. II fonctionne de la méme maniére avec des variables alphanumériques. Vous I'utiliserez
dans bien des cas : anagramme d'une phrase, mélange de mots... Notez que la liste de base est détruite, ce qui est
ici sans importance, mais pourrait devenir génant dans bien des cas. |! conviendrait donc de la sauvegarder éven-
tuellement dans une autre variable. A la ligne 155, la variable incrémentée & chaque tour de boucle, est utilisée
pour créer un saut de ligne supplémentaire. On obtiendrait le méme résultat avec IF 1/3 = INT (1/3) THEN PRINT.
Mélange aléatoire d'une série de nombres
100 TEXT : PRINT CHR® (17): HOME BOEE
105 NOMBRE = 24: DIM NBASE(NO) ,NMELE(NO) 6898
110 INVERSE ; PRINT " ** LE MELANGE ALEATOIRE D’UNE SERIE ** " 4469
/ Pace17 /
/ acea /
115 NORMAL : VTAB 3
120 FOR I = 1 TO NO:NBASE<I) = I: NEXT
125 FOR I = NOMBRE TO 1 STEP - 1
130 MELE = 1 + INT ¢ RND (1) * ID
135 NMELE(I) = NBASE<MELE)
140 NBASECMELE) = NBASE(1): REM Attention! liste de base détruite
145 NEXT
150 FOR I = 1 TO NOMBRE:E$ = “ “: IF I > 9 THEN ES = “*
155 PRINT E$;: INVERSE : PRINT 1;: NORMAL : PRINT " "NMELECI),:J = J
+ 1: IF J = 3 THEN PRINT :J = 0
160 NEXT
165 VTAB 22: PRINT "PRESSEZ UNE TOUCHE ";: GET R$: VTAB 2: CALL ~ 95
8: LIST 120,160
170 PRINT : VTAB 22: PRINT "(E)ncore (B)asic (S)tartup disquette:ctG
"3: GET RS
175 IF R$ = "E" OR RB “e" THEN RUN
180 IF R$ = "B" OR R$ = “b" THEN HOME : END
185 IF R$ = "S" OR R$ = “s" THEN PRINT CHR$ (4);"RUN /T20/STARTUP"
190 GOTO 170
Double totalisation TO TA U lM
des nombres d'une table
La encore, il s'agit d'un exemple. Les nombres sont aléatoires, mais pourraient naturellement provenir du clavier.
Le nombre de colonnes peut étre augmenté, mais il serait alors souhaitable, voire nécessaire, de passer en mode
80 colonnes. Vous adopterez facilement cette routine pour vous programmer un mini-tableur !
100 TEXT : PRINT CHR$ (17): HOME
105 LIGNES = 15:COL = 4: DIM TABLE(LIGNES,COL) ,T(LIGNES) ,V<COL + 1)
110 INVERSE : PRINT " ** DOUBLE TOTALISATION D’UNE TABLE “*# "
115 NORMAL : VTAB 3:NALEA = 99998: REM Nbre maximum-1
120 FOR I = 1 TO LIGNES
125 FOR J = 1 TO COL
130 TABLE<(I,J) = 1 + INT ¢ RND (1) * NAD
135 HTAB (J * 7) + 1 - LEN ( STRS (TABLECI,J))): PRINT TABLE‘I,J);
140 TCI) = TCL) + TABLECI,J):V(d) = VCS) + TABLE(1,J)
145 NEXT :V¢COL + 1) = YCCOL + 1) + TCD
150 PRINT " > “; RIGHTS (¢" “°° """" + STRS (T61)9),.7) 5 NEXT
155 FOR I 1 TO 10: PRINT "----"3: NEXT
160 FOR I 1 TO COL + 1:AF$ = RIGHTS (¢" “""" >" " + STRS (YC19)),7)
: IF I = COL + 1 THEN PRINT * > "3
165 PRINT AF$;: NEXT : PRINT
170 PRINT : VTAB 22: PRINT "(Encore (Basic (S)tartup disquette:ctG
GET RS
175 "E™ OR R$ = “e" THEN RUN
180 IF R$ = "BY OR R$ = “bY THEN HOME : END
185 IF R$ = "S" OR R$ = ""s" THEN PRINT CHR$ (4);"RUN /T20/STARTUP"
190 GOTO 170
/ pace 1s /
/ Claude ausry / —
DEUS EX MACHINA
Il y a quelque temps Dieu, ayant décidé d’informatiser le paradis, fit venir un bataillon
d‘archanges-analystes pour définir un projet a la dimension de sa grandeur.
| s‘agissait de calculer la surface de nuages dont disposait chaque élu et de vérifier que cette
surface était bien conforme 4 ses mérites, mesurés en norme ANSY. Le directeur du Projet, un
ange écossais du nom de MAC-INTOSH proposa de stocker en mémoire éthérée (nous, nous
dirions plutét vive), et sous forme de tableau, un nombre fixe de bienheureux, repérables
grace 4 une icéne en forme de paire d’ailes. Dieu pourrait ainsi étudier le cas de chacun en le
désignant 4 l'aide de la souris placée 4 sa droite.
DIEU qui avait d'autres choses en téte dit : “Que cela soit”. Et cela fut.
Or, il advint que MAC-INTOSH, soucieux d’économiser la mémoire éthérée, n‘avait réservé de
place que pour 8 milliards de candidats, et que le 8 milliard uniéme était justement le pape.
Vu I'impossibilité d'expliquer 4 un pape que son admission au paradis était impossible a cause
d'un Bug de l'Ordinateur central, Dieu fut mis au courant, et entra dans une grande colére.
1 convoqua MAC-INTOSH et le renomma MAC Il, puis il dit trés fort afin que chacun entende
Sa Parole : “LA GESTION DE LA MEMOIRE ETHEREE DEVRA ETRE DYNAMIQUE CHAQUE FOIS
QUE LE NOMBRE DE DONNEES NE SERA PAS PREVISIBLE !”.
Puis Dieu créa les listes chainées et les arbres binaires, et Dieu vit que cela était bon et
retourna se coucher.
LA GESTION DYNAMIQUE DES DONNEES
Un probléme angoissant se pose & tout program-
meur consciencieux lorsqu'il désire mémoriser un
certain nombre de données, nombre 4 priori indé-
terminé au moment de I'écriture du programme.
En Basic APPLESOFT, la seule structure existante
étant le tableau dimensionné a I'avance par |'ins-
truction DIM, trois solutions sont possibles :
1. On surdimensionne le tableau et |'on gaspille
ainsi de la place mémoire.
2. On écrit une bidouille en langage machine qui
permettra de redimensionner le tableau au fur
et G mesure des besoins.
3. On écrit un programme en langage machine
qui va réserver de la place 4 une adresse
mémoire 4 laquelle Basic n'a pas accés, stoc-
ker les données, retourner au programme
appelant l'adresse & laquelle sont stockées ces
données.
La premiére approche est codteuse en emplace-
ments mémoire et dangereuse : on n'est jamais sir
que l'on a prévu suffisamment de place.
La deuxiéme technique est une approche peu digne
de la gestion dynamique de I'espace mémoire (je
n'aime pas beaucoup les instructions modifiées).
La troisieme méthode peut vous apporter richesse
et célébrité si vous commercialisez votre pro-
gramme (attention ! je prends 10%) et c'est tras
exactement ce qui se passe dans les autres langa-
ges, moins handicapés moteurs.
MALLOC ET CALLOC SONT DANS UN BATEAU
Pascal et C ont quelques points communs en ce qui
concerne la gestion de la mémoire. L'un et l'autre
disposent d'un espace mémoire disponible pour
allocation dynamique. II s‘agit de la zone appelée
le heap (en francais le tas).
Faites un petit effort de mémoire :
(suite page 20).
KS ee / PACES / —
— /ows xan | ———————
quand je vous avais parlé des pointeurs, je vous
avais mis en garde contre les créations de poin-
teurs sauvages, vous disant que la déclaration
suivante : char *bidule; créait un pointeur vers
un objet nommé bidule, que ledit objet devait
étre de type caractére, mais que pour I’instant il
n‘existait pas et n‘avait pas de place réservée en
mémoire.
Sournoisement, je ne m’étais pas tellement étendu
sur ce qu'il fallait faire pour réserver de la place
pour l'objet, et je suppose que certains
scanf("%s" bidule) ont dé faire des dégats.
€ propose deux instructions essentielles pour utili-
ser le heap. || s‘agit de malloc (memory allocate) et
de calloc (contiguous allocate).
Malloc sert 4 réserver de la place pour un seul
objet et calloc pour plusieurs objets de méme
type.
Malloc admet, comme argument, la taille (unsi-
ned) de l'objet pour lequel on désire réserver de
la place et retourne un pointeur vers la mémoire
réservée, en considérant par convention que ledit
objet est de type CHAR.
L'utilisation de malloc passera donc par le calcul de
la taille de l'objet & mémoriser et par un change-
ment de type (cast) si l'objet en question n’est pas
de type char.
En pratique, le calcul de la taille est effectué par
lopérateur “sizeof” et le changement de type
s'effectue par :
nouveau_type = (nom_de__type) ancien_type.
Si, par exemple, vous voulez réserver de la place
pour un objet de type float, la procédure normale
est:
float *reserve; /* on réserve de la place pour le
pointeur, mais pas pour l'entier */
reserve = (float *) malloc (sizeof(float)); /* Cette
fois de la place pour l'entier */
Calloc fonctionne de la méme fagon, mais un para-
métre “n” permet de réserver de la place pour n
objets de méme type.
reserve = (float *) calloc(109,sizeof(float))
réservera la place nécessaire au stockage de 100
objets de type float.
Je vois des Pascaliens froncer méchamment les
sourcils. Je sais que les changements de type font
dresser tous les poils des adeptes de Saint NIKLAUS...
mais, que voulez-vous, |'efficacité est a ce prix, et
puis vous pouvez toujours écrire :
£detine MALLOC(x) ((x *) malloc apr
£define CALLOC(n,x) ((x *) calloc(n,sizeof(x)))
reserve = CALLOC(100,float); /*pratique, non ? */
Pour une raison qui m’est inconnue, calloc et
malloc font toujours peur aux débutants en C . II
faut absolument se débarrasser de cette phobie
ridicule : moi qui les fréquente réguliérement, je
peux vous Iaftirmer calloc et malloc sont tout &
fait adorables.
LA LIBERATION DES ESPACES RESERVES
Bien que gérée dynamiquement, la zone de heap
n’en est pas pour autant infinie. II faut donc pou-
voir libérer un espace que Ion n’utilise plus et
c'est le rdle de I'instruction free(bloc) ot bloc est
un pointeur vers une zone réservée par malloc
ou calloc.
Dans I'exemple précédent Lag angry restitue
au heap l'espace de stockage des 100 objets de
type float.
UN EXEMPLE SIMPLE DE GESTION
DYNAMIQUE : LA LISTE CHAINEE
Avant de partir explorer le monde infini des allo-
cations dynamiques, je vous propose un petit
exemple trés simple : la liste chainée.
Vous pourrez, partant de cet exemple, cons-
truire des structures de plus en plus complexes,
et gagner 500000$ en faisant le traitement de
texte ou le tableur qui manque le plus au GS.
Une liste chainée est une suite ordonnée d’objets
appelés neeuds. Un noeud est une structure com-
portant un objet (ou un pointeur vers un objet) et
un pointeur vers le noeud suivant.
En C, une telle structure stockant des entiers
peut étre fournie par :
struct noeud
{
int objet;
struct noeud *suivant;
}
— /ac820 f —<—$aM — — ees
—____—_—_—_—_— oo _/ Clave ausry | —
La représentation graphique d'une telle structure est donnée ci-dessous
pointeur vers suivant
t— pointeur vers suivant
+— pointeur vers suivant
pointeur vers élément
pointeur vers élément
NULL
pointeur vers élément
r r
C élément élément
> &
> CC sement >)
Deux nceuds de la liste sont un peu particuliers : le
noeud terminal, facile a identifier puisqu'il ne
pointe vers aucun autre, et le nceud de départ.
Le plus souvent, on localise le noeud de départ &
l'aide d'une structure particuliére, la téte de liste,
qui peut, en plus du pointeur vers le premier élé-
ment, comporter des informations sur la liste consi-
dérée dans sa globalité : nombre d’éléments, poin-
teur vers le dernier élément.
Le petit programme que je vous propose, vous
offre les outils de création de liste chainée. A vous
de l'améliorer, de créer par exemple un algorithme
de suppression d'éléments, de recherche, d’inser-
tion, de modifier la liste en en créant une double
(pointeur vers I'élément suivant et précédent), de
faire une liste des listes, etc.
Vous en avez bien pour deux mois de travail...
| bon courage !
N.D.L.R.: Ce programme a été écrit en TURBO C.
Anos lecteurs de l'adapter sur leur GS !
MINI UINFERNAL DOCTEUR MALLOC //////////////
Compilateur TURBO-C et IBM AT2 a adapter pour GS.
Claude Aubry 1988
#include <stdio.h>
#define MALLOC(x) ((x *) malloc(sizeot (x)))
#define CALLOC(n.x) ((x *)calloc(n.sizeof(x)))
#define VRAI 1
#define FAUX 0
#define BOOLEAN int
I*
** DEFINITION DES STRUCTURES
un noeud de la liste comporte
un pointeur vers une chaine de caractéres
un pointeur vers le noeud suivant
/ peusexmacnina /
struct noeud
{
char *pointeur_element;
struct noeud *suivant;
}
typedef struct noeud type_noeud;
I =
La tete de liste comporte:
un entier correspondant au nombre d'items dans la liste
un pointeur vers le premier élément
un pointeur vers le dernier
struct tete
int nb_items;
type_noeud *premier,*dernier;
typedef struct tete type_tete:
I*
** DEFINITION DES FONCTIONS DE MANIPULATION DE LISTES
4,
Pe eee ie ne ene wae
*
** FONCTION initialise_tete()
**
** Réserve place mémoire pour structure téte de liste
** Initialise nb_items a0
** fait pointer premier et dernier vers NULL
*
** renvoie un pointeur vers la téte de liste
s/
type_tete *initialise_tete()
{
type_tete *nouveau_noeud;
if ((nouveau_noeud=MALLOC (type _tete))!=0)
{
nouveau_noeud->nb_items=0;
nouveau_noeud->premier=nouveau_noeud->dernier=NULL;
}
return(nouveau_noeud);
** FONCTION fabrique_noeud(val,ptr)
** Reserve espace pour un nouveau noeud (seulement pointeurs)
** |'allocation mémoire pour |'élément a insérer doit étre effectuée
** val est un pointeur vers une variable de type char
/ PaGcE22 /
/ Claude ausry /
** ptr est de type pointeur vers structure noeud
** Retourne un pointeur vers structure
type_noeud *fabrique_noeud(pointeur_donnees,pointeur_suivant)
char *pointeur_donnees;
type_noeud *pointeur_suivant;
{
type_noeud *nouveau_noeud:
if ((nouveau_noeud=MALLOC(type_noeud))!=0) /* si mémoire suffisante */
{
Nouveau_noeud->pointeur_element=pointeur_donnees;
nouveau_noeud->suivant=pointeur_suivant;
}
return(nouveau_noeud);
}
** FONCTION ajoute_noeud(donnees, liste);
ae
** ajoute_noeud un noeud en fin de liste
BOOLEAN ajoute_noeud(pointeur_donnees. liste)
char *pointeur_donnees;
type_tete *liste;
{
type_noeud *nouveau_noeud;
/* si allocation possible pour le nouveau noeud */
if((nouveau_noeud=fabrique_noeud(pointeur_donnees,NULL))!=0)
{
/* s'il y a déja des enregistrements on chaine */
if(liste->nb_items) liste->dernier->suivant=nouveau_noeud;
else liste->premier=nouveau_noeud; /* sinon pointeur sur le premier */
liste->dernier=nouveau_noeud;
liste->nb_items++;
return(VRAI); Depuis le numéro 14 de Tremplin
} Micro, Claude Aubry accomplit de
else louables efforts pour initier nos lecteurs
return(FAUX); au langage €:
}
Notre courrier nous prouve chaque jour
davantage qu’il est sur la bonne voie.
(suite du programme au verso).
/ Pace23 /
/ peusexmacnina /
Tia
MM PROGRAMME PRINCIPAL
*
/
MN
TURBO € scwumann Bien débuter
Découvrez la programmation systéme en TURBO C.
les bases du langageC, @ l'aide d’exemples prati-
ques, de trucs, dastuces, et évitez ainsi les pi Jes plus fré-
indispensables : le traitement de chaines
pointeurs, les boucles, les structures... et sachez créer votre
biblioth&que de fonctions personnalisées. Enfin, lancez-vous
dats la programmation sans aucune appréhension : grace & la
liste des erreurs les plus courantes et de leurs solutions, pro-
gressez facilement dans votre étude de TURBO C.
BIEN DEBUTER TURBO C, vous aide d acquérir des bases solides
pour prendre un bon départ dans la programmation du langage.
Version 1.5 incluse. 300 pages — Prix : 149 F
Editions MICRO APPLICATION
13, rue Sainte-Cécile 75009 PARIS — Tél. : (16-1) 47.70.32.44.
type_tete *liste_items;
type_noeud *parcours liste;
main()
{
char *x,*buf;
int random;
/* reserve place pour buffer de données */
buf=CALLOC(80,char);
liste_items=initialise_tete();
/* On mémorise un nombre aléatoire de données */
random=rand();
for (i=0;i<=random;i++)
{
/* On génére un nouvel élément (un nombre aléatoire en base 2) */
itoa(rand(),buf,2);
/* On alloue de la place mémoire au nouvel élément */
if((x=CALLOC(strlen(buf) +1 ,char))!=0)
{
/* sila place peut étre réservée, on ajoute le pointeur vers I'élément ala liste */
strepy(x.buf);
ajoute_noeud(x,liste_items);
else printf(«\nPlus de mémoire !!!»);
}
/* On affiche le contenu de la liste */
parcours liste=liste_items->premier;
i=0;
do
printf(«\nITEM numéro %3d : %8s»,i++,parcours_liste->pointeur_element);
parcours _liste=parcours_liste->suivant;
while(parcours liste);
}
Excusez moi, on m'appelle au téléphone...
Allo, oui, Claude Aubry, qui ¢a ?...
MULTINATIONALE PARADIS PERE ET FILS...surtout ne quittez pas...
Amis lecteurs a dans deux mois...travaillez bien...
/ Pace2a /
/ Jacques REY—aApPLENcs / —
STEREOPHONIE
sur votre Apple liGS
Les capacités sonores de |'Apple //GS sont excep-
tionnelles, mais le haut-parleur interne étant inca-
pable de provesses acoustiques, elles restent coin-
cées dans la boite ; quant 4 la prise de sortie dispo-
nible 4 l'arriére de la machine, elle est monophoni-
que et particuligrement bruyante lors des accés
disque.
Apple a prévu un petit connecteur qui permet
d'accéder directement au synthétiseur Ensoniq et,
pour quelques composants de plus, nous allons voir
qu'il est possible de disposer d'une sortie stéréo
permettant de raccorder notre machine favorite
sur une chaine de qualité Hi-Fi.
Ueffet est saisissant et I'utilisation d'un logiciel
comme Musique Studio devient trés attrayante.
Certains jeux sont aussi particuligrement réussis
‘au niveau sonore.
Examinons le connecteur de |'Ensoniq que l'on
trouve en bas de la carte mére, & gauche du slot
d'extension mémoire.
Nous trouvons : (du bas vers le haut)
broche n°l : entrée de I'Ensoniq (permettant la digitali-
sation des sons).
broche n°2 : masse du circuit sonore.
broche n°3_: sortie du synthétiseur.
broche n°4 : bit @ d’adresse de voie sonore (AQ)
broche n°5 : bit I d'adresse de voie sonore (Al).
broche n% : Strobe d'adressage (STR).
broche n°7 : bit 2d'adresse de voie sonore (A2).
Comment pouvons-nous disposer de deux signaux
sonores indépendants sur I'unique sortie du
synthétiseur ?
En fait, le signal analogique présent sur la broche
n°3 est découpé en tranches représentant chacune
une fraction du signal sonore de la voie de droite
ou de gauche : on dit que le signal est multiplexé.
Il suffit alors d'aiguiller chaque tranche de signal
respectivement 4 droite ou 4 gauche ; un interrup-
teur électronique synchronisé sur la fréquence de
multiplexage remplira ce réle. Un filtre passe-bas
éliminant toute fréquence supérieure 4 15 kHz res-
titue ensuite au signal sonore sa forme originale.
La figure n°1 illustre ces explications.
La réalité est un peu plus complexe car le signal est
en fait découpé en 16 tranches correspondant a
chacune des 16 voies disponibles ; en utilisant le
bit 0 de sélection, qui change d'état 4 chaque incré-
mentation du numéro de voie, nous aiguillons tou-
tes les voies paires 4 droite et les impaires 4 gau-
che, ce qui nous donne bien deux signaux distincts.
La figure n°2 nous donne le schéma de principe
détaillé de la carte stéréo :
* Lampli ICI conditionne le signal de sortie de
l'Ensonig. Celui-ci est ensuite dirigé sur les
entrées X@ et YI de IC2, qui est un démulti-
plexeur 2 fois 4 voies vers 2 (les 6 entrées inuti-
lisées sont reliées 4 la masse), lequel aiguille le
signal sonore vers ses sorties SX ou SY en fonc-
tion de l'état de la broche B (bit d’adresse de
voies AQ).
* Le circuit IC3 ne sert qu’d transformer Ia logique
5 volts en logique 12 volts, le reste des circuits
étant alimenté en + et — 12 V pour une meil-
leure dynamique du signal sonore.
* Nous trouvons ensuite le filtre passe-bas 24 dB
par octave construit autour du double ampli IC4
(IC6 pour la voie de gauche), sa fréquence de
coupure se situant aux environs de 15 kHz.
* Lampli IC5 adapte le niveau de sortie & une
valeur suffisante pour attaquer n‘importe
quelle entrée ‘Auxiliaire’ d'une chaine Hi-Fi. Le
gain peut étre adapté aux besoins, en modi-
fiant la valeur de R15 (et R16) suivant la formule
G=RI15/R9.
* Un petit interrupteur (facultatif) permet de
relier les deux sorties en cas de son monopho-
nique pour qu'il soit tout de méme présent sur
les enceintes droite et gauche.
* La carte préléve son alimentation + et — 12 V
de I'un des slots... (suite page 26).
—_—_—_—_—_—_——_——————— ee / Ps | —
— / sttrtorxons {| ——<_ << <_< __________—__—_-
© (le slot 4 par exemple car la souris étant un
organe indispensable dans tous les logiciels du
GS, il y a peu de chance qu'une autre carte
Les composants sont classiques et disponibles dans
toutes les boutiques d’éléctronique.
vienne s'y loger), deux résistances et deux con- Nomenclature des composants :
densateurs filtrent les bruits présents sur les
tensions d’alimentation du GS; les condensa- RI = 10K Ohms
teurs de 100 nF placés prés des circuits intégrés R2aR14. = 5,6KOhms
a heen pour but de supprimer tout parasite R15, R16 = 0 K Ohms
indésirable. 8
» le +5VdeICé est fabriqué a l'aide d'une diode pease = Lesbos Watt
Zéner; l'utilisation du 5 V de l'ordinateur aurait is ee ,
conduit & la fabrication d'un circuit imprimé a = 68 pF mylar ou céramique
double-face plus difficile @ réaliser par un €2,C3_ = 2,7 nF mylar ou céramique
amateur. C4,C5 = _‘1,5nF "
La figure n°3 représente le circuit imprimé 4 6,C7 = 2,7 nF .
'échelle 1; il est assez simple pour étre réalisé 4 la C8,C9 = _«(1,5nF &
main directement sur la plaque cuivrée. L'auteur C10,C11l_ = 120 pF a
peut fournir un circuit gravé et percé ceux que ce C12 = 4,7 micro F Tantale 10 V
travail rebuterait. C13, C14. = 47 micro F Chimiques 16 V verticaux
Pour le montage des divers composants, se repor- C1522 = 100 nF mylar ou Tantale 16 V
ter au schéma n°4 qui est plus explicite qu'un long (respecter alors le sens de montage)
discours (ne pas oublier les ponts $1 4 $4); quatre Ic1 = LM318 ou LM741
fils suffisent pour relier la carte au connecteur de a
l'Ensoniq; bien respecter le sens de montage \c2 = MC 14052
représenté. 1C3 = 7407
La carte ne nécessite aucun réglage et doit fonction- 14 4 16 = TL 072 ou TL 982
1 prise de sortie Jack stéréo 3,5 mm
ner du premier coup (ne pas oublier de couper |'ali-
mentation de l'ordinateur pour toute manipulation de
mise en place, un incident est trop vite arrivé !).
1 connecteur Molex 7 trous
1 mini-interrupteur.
Nous disposons d'un lot limité de circuits imprimés (y compris les plaquettes annexes pour ceux qui retien-
dront la formule "prise et interrupteur sur facade arriére”). Vous pourrez obtenir ce support en utilisant le
bulletin de commande, 4 la fin de la revue (il ne s‘agit que d'une participation aux frais de port et d’embal-
lage). Attention !| notre stock est limité et ne sera pas renouvelé !
Vous trouverez les composants chez les revendeurs spécialisés. Leur codt total ne devrait pas dépasser 100 F.
Le prototype de la carte de Jacques REY a été testé par Emile SCHWARZ et Yvan KOENIG.
Note d'Y¥van KOENIC
Les schémas électroniques ont été réalisés a I‘aide de VS.DRAW qui est, 4 mes yeux, le meilleur
logiciel GS de VersionSOFT. Je profite de l'occasion pour donner quelques détails sur l'utilisation
de ce programme lors des impressions.
Comme toujours, il faut s‘assurer de la présence dans le ‘directory’ FONT de la (ou des) police(s)
de caractéres employée(s) dans le document. La figure n°2 utilise la police STUTTGART et, en
son absence, les caractéres sont imprimés en SHASTON ce qui provoque des ‘chevauchements’.
Pour obtenir une impression correcte il faut sélectionner :
* mode réduction 50% (il n'y a pas de carte Orange) Le non respect de ces derniéres indications
conduit a I‘absence sur papier d'un des brins
du cable de liaison au connecteur J25.
© impression couleur
© option couleur
/ Pace26 /
me Ty evap
wale Tae, — §
|
Signal ila sutie de FEnsonic |
/ Jacques REY —AppLeucs /
Figure a? 2
/ sTéREoPHONIE /
72 mm Maxi
hie cAte culyre
vue cote Culvre
Sates ate oxi
WTTETTELE EEOC CCD Aiea =
Cette carte présentant une diffé-
rence par rapport au plan publié,
ne pas implanter les composonts
rayés, placer le pont supplémen-
faire $5 et installer correctement
les conducteurs dans la rangée de
percages située au-dessus de C13.
oO a Ts J Connecteur J25
Implantation des Composants
‘ 5 ‘ La ploquette support sera fixée 4 l'aide
Variante de montage de la prise de Sortie dae a ors es don te dos
‘ouvertures situées 4 larriére du lIGS.
les pervoges non cotés seront réalisés
fonction du modéle de prise et
composants dinterrupteur choisi.
Circuit vu du cdte
]
Yee See
Prise de Sortie
D Hono
3 Stereo
We pas instal ler sur
la corte
QUATTRO ix
Bien sér que ¢a fonctionne sur I'Apple IIGS,
éguipé d'un PC Transporter !
Vous savez, depuis le dernier numéro de
Tremplin Micro, qu'il est possible d'utiliser
les logiciels PC sur I'Apple lIGS, grace d une
petite merveille d’Applied Engineering (dif-
fusée par BREJOUX): le PC Transporter.
Comme cela, par curiosité et pour le plaisir,
mais grace 4 la bienveillance de Borland
International, j‘ai donc testé le fameux
QUATTRO sur le GS de Tremplin Micro.
Premiére (agréable) surprise
Qu'est-ce que Quattro ? un tableur. Borland prétend
que c'est le meilleur choix et c'est vrai que l'on est
d'emblée étonné par sa facilité de prise en main et
par ses possibilités.
Personnellement, |'ayant déja longuement essayé (en
version 5'1/4) sur compatible monochrome, je dési-
fais surtout voir comment allait réagir son graphisme
sur mon GS couleur.
Pas de déception ! Quattro dispose en standard de
onze types de graphiques et je vous assure que c'est
joli tout plein ! |
Mieux : ¢a sort sur imprimante IMAGE WRITER II et le
résultat vaut celui que j'avais obtenu sur |'—EPSON
LQ2506 reliée & mon PC. Vous en doutez ? essayez...
Sachez que ces graphiques peuvent aussi sortir via un tra-
ceur ou une photocomposeuse (interface Postcript suppor-
tée)... mais je n'ai pas tenté ces deux expériences.
Calcul rapide
Quattro est un tableur rapide, voire trés rapide. On dit
qu'il doit cette célérité & la maniére intelligente dont il
traite la feuille de calcul. En fait, le gain de temps pro-
vient du fait qu'il calcule en traitant spécifiquement les
seules cellules dont on a modifié les paramétres.
/ Locicie: — Marc FREFOYE / —~
Les macro-commandes
Je ne suis pas rompu au maniement des macro-
commandes, mais il m’a semblé que se familiariser
avec celles de ce tableau ne reléve pas du tour de
force. Le déboguage facilite d'ailleurs |'identification
et la correction des erreurs.
Des trucs sympas
Quattro identifie automatiquement le type de la
machine et de |'écran utilisés. Evidemment, sur
Apple, il a été abusé — comme il convient — par le PC
Transporter, et son identification s'est révélée exacte
puisqu’il n'y a pas eu de plantage !
Le logiciel de Borland lit (et écrit) directement des
fichiers utilisables par Lotus 1.2.3, Symphony, dBase,
Paradox, ou ASCII.
Notez au passage que la sauvegarde automatique des
données (Franscript) est fort utile.
Bref, un tableur de qualité professionnelle, facile
d'emploi, et aux performances remarquables.
Marc FREFOYE
Borland International — 65, rue de la Garenne 92318 Sévres Cedex.
/ Pacezs / —
— / pesuvres /
La synthése
d'images
e LA SYNTHESE D'IMAGES
par Bernard PEROCHE
(collectif)
La synthése d'images est probablement
née en 1963 avec le premier logiciel gra-
phique digne de ce nom: Sketchpad,
développé par |. Sutherland.
Depuis, les progrés n'ont jamais
cessé et cet essor remarquable a
permis a la synthése d'images de
conquérir de nombreux marchés :
ceux de la CAO, du graphique
d'affaires, de la simulation ov de
l'audiovisuel.
Le but de cet ouvrage collectif est de
faire le point sur les techniques, les
méthodes et les algorithmes qui ont
616 développés au cours des vingt-
cing derniéres années pour produire
les images de synthése d'un grand
réalisme.
Il présente les méthodes et les algo-
rithmes utilisés pour la synthése
d'images réalistes tridimensionnel-
les. Il décrit les divers modéles per-
mettant de représenter les scénes
3D en machine et expose les algo-
rithmes permettant d'obtenir des
images d'un grand réalisme (élimi-
nation des parties cachées, lissage,
ombres portées, anti-lissage...)
295 poges — relié — 320F TIC.
Editions HERMES, 51 rue Rennequin .75017 PARIS.
Tél. : (16-1) 43.80.95.71
| « NOUVEAU MEMENTO
| TURBO PASCAL
par Dominique SCHMIT
Ce livre s'adresse au programmeur
| en Turbo Pascal. II traite de Turbo
Pascal version 3 sous MS-DOS/PC-
DOS, et Turbo Pascal versions 2.00
et suivantes sur compatible PC.
C’est un excellent memento, pré-
senté avec sobriété, sous une reliure
trés résistante. On le compulsera
avec plaisir. Chaque chapitre couvre
un théme spécifique. Le livre se
divise comme suit :
1. Générolités sur le langage.
2. Divers types de données.
3. Diverses procédures et fonctions
| classées par utilisation.
4. Recouvrement et
programme.
5. Structure interne d'un programme
avec les appels systéme et les
sous-programmes externes.
« Utilisation du systeme Turbo Pascal.
chainage du
x
Liste des codes d'erreurs renvoyés
par le programme.
8. Liste des codes renvoyés par les
touches du clavier.
Relié — 304 pages — 100 F TTC.
SYBEX, 6-8 Impasse du Curé, 75018 PARIS
Tél : (16-1) 42.03.95.95.
Edmond Couchot
Images
De loptique
au numérique
IMAGES
DE L'OPTIQUE
AU NUMERIQUE
par Edmond COUCHOT
Avec l'ordinateur sont apparus de
nouveaux processus automatiques
de génération et socialisation de
l'image. L'image numérique, en
effet, n'est plus |'enregistrement
d'un objet qui laisse sa trace sur un
support chimique ou magnétique,
mais une synthése : le résultat d'un
calcul ou le nombre et le langage de
la programmation se sont substitués
4 la lumiére.
auteur analyse dans cette étude le
passage de I'optique au numérique
et les relations que les techniques de
figuration entretiennent avec les
arts visuels et la culture. Alors que
les premiéres nous poussaient
représenter le réel, les derniéres
nous invitent 4 le simuler.
U'image numérique s'ouvre sur un
univers virtuel, en puissance, a vivre
et & revivre indéfiniment, jamais
totalement actualisable. Elle boule-
verse radicalement l'économie
symbolique de notre systeme de
figuration du monde. De la capacité
4 comprendre cette nouvelle image,
4 l'expérimenter et @ la réver,
dépend désormais notre culture.
248 poges
Broché
8 pages couleur
MOF TTC.
Editions HERMES, 5) rue Rennequin, 75017 PARIS
— / eace30 f[
/ Emile scHwarz — csBasic / ——
CHARGEMENT
de caracféres personnalisés
pour Image Writer Il et GSBasic
Voici un programme qui vous permettra de télé-
charger des fontes sur votre Image Writer II. Sur la
disquette d'accompagnement, vous trouverez qua-
tre polices de caractéres. Deux difficultés majeures
pour élaborer ce programme :
1. —SetOutGlobals, utilisé avec les masques
appropriés, nous permet d’envoyer les données
sans forcer le bit 841.
2. Inhiber la reconnaissance de la commande
Control-1 — CHR$ (9) — par le port série.
Depuis le n°19 de Tremplin Micro, j'ai utilisé
—SetOutGlobals, mais le CHR$ (9) me poscit
encore probléme. J'ai donc été amené 4 utiliser
PEEK et POKE, tout en sachant que ce n'est pas
recommandé.
¢C.PERSO.CSB
Procédures Ctriizon et CtrliZoff :
On commence par mettre en place le caractére de
contréle port série imprimante, soit CHR$ (9), par
un POKE 1273,9. Ensuite, PEEK(1529) va lire le con-
tenu de cet emplacement et, suivant que la valeur
est supérieure 4 127 ou inférieure 4 128, nous en
déduirons que le port série va filtrer le caractére
de commande contenu en 1273 ou non. Enfin, si
cette valeur est inférieure 4 128, on envoie la com-
mande de non reconnaissance du Control-I.
Avant de quitter le programme, il faut remettre en
place la reconnaissance du Control-l; pour ce
faire, on change le masque contenu en 1529 en
effectuant la soustraction 4 la ligne 62020.
Le programme est commenté et n’appelle pas
d'explications supplémentaires.
REM CARAC.PERSO.GSB Charge une fonte et l'envoie a4 1'imprimante
ES=CHRS (27) :a=19:P$="TM20/FONTES/FAPL/"
DIM Fonte! (255) :REM
PROC tdf:REM
PROC CtrlIZ0ff:REM
PROC presente:REM
LOCATE 3,10: INVERSE
Faux tableau...
Vérifie la présence du fichier texttool.tdf
Ctrl-I Z plus reconnu
Trace un cadre
PRINT "Utilitaire de chargement de fontes de caractéres personalisés";
NORMAL: PRINT
LOCATE 5,a:PRINT "Fontes présentes sur la disquette /TM20/ :"
LOCATE 7,a:PRINT P$"COUNT":LOCATE 9,a:PRINT P$"EPSDROITE"
LOCATE 11,a:PRINT P$"FONETIC":LOCATE 13,a:PRINT P$"ITALEPS"
LOCATE 17,a:PRINT "(c) Avril 1988 Tremplin Micro & Emile Schwarz"
REM
ON ERR GOTO EPRODOS :REM
Si erreur ProDOS...
LOCATE 20:INPUT “Nom ProDOS COMPLET de la fonte a charger: ";Fonte$
x%t=FILE(Fonte$):IF NOT x% THEN erreur:REM Si x% = 0: fichier inconnu
OPEN Fonte$, FILTYP=6 FOR INPUT AS£2:REM Nous ouvrons le fichier
y*=EOFMARK (2) :IF y%>4000 THEN fin:REM
ERASE Fonte! () :DIM Fonte! (y%) :REM
GET£2, y%,0;Fonte! (0) :REM
CLOSE£2:REM
Fichier trop grand --> fin
Dimensionne le tableau
Charge le fichier
Ferme le fichier
/ Pace 31 /
195 REM
200 IF Fonte! (0)<>27 AND Fonte! (1)<>43 OR Fonte! (1)<>45 AND Fonte! (2)<>27
AND Fonte! (3)<>73 THEN fin
210 ON ERR GOTO EIWII:REM A tout hasard
215 REM
220 OPEN ".PRINTER", FOR OUTPUT AS£1:REM Ouvre 1'imprimante
230 _setoutglobals (255, 0) :REM Fixe la nouvelle valeur 'OR'
240 PRINT£1;E$"Z "CHR$ (0); Pas de LF si ligne pleine
250 PRINT£1;E$"11"; :REM Pas de CR avant LF et FF
260 PRINTE£1;E$"Z"CHRS (128) CHR$ (0) 7 :REM Pas de LF aprés CR
270 PRINT£1;E$"Z"CHRS (0)" "7 :REM 8° bit reconnu
280 FOR it=0 TO y%-1:REM Envoie la fonte
290 PRINT£1;CHR$ (Fonte! (i%));
300 NEXT
310 PRINT£1;E$"D "“CHR$(0) 7 :REM LF si ligne compléte
320 PRINT£1;E$"10"; :REM Ajoute CR avant LF et FF
330 PRINT£1;E$"D"CHRS$(0)" "7; :REM Huitiéme bit ignoré
340 PRINT£1;"":REM Retour en début de ligne
350 REM. —==+—<s5=<s+=~ Ecrit la fonte personnalisée --------~--999 9" n-—
355 REM
360 PROC CtrlIZon:PROC recup:REM Active la reconnaissance du CHR$(9)"Z"
370 PRINT£1;E$"!"; :REM On passe en caractéres gras
380 IF INSTR(Fonte$,"EPS") THEN PRINT£1;E$"q"; :REM Compressé si 'EPS'
390 PRINT£1;E$"'"; :REM Début des caractéres perso.
400 PRINTE 1 "CHRS(34)" £ $%&'()*+ 4 -"?
410 PRINTE1;"./0123456789:; <=> 2?"
420 PRINTEI;"AABCDEFGHIIKLMNO P";
430 PRINTEL;"QRSTUVWXYZ°¢CS*_*"
440 PRINTE1;" abcdefghijkimno"
450 PRINTEL;"pqrstuvwxyzéunre™
460 PRINT£1;E$"$"; :REM Fin des caractéres perso.
470 PRINT£1; ESCHRS (34) ; :REM Fin des caractéres gras
480 PRINTE1;ES$"E"; :REM Elite
490 PRINT£1;"":REM Retour a la ligne
500 GOTO EIWII:REM Le programme est fini
505 REM
510 REM ——-S—oosore Traitement des erreurs et fin
515 REM
520 ERREUR:OFF ERR:REM Retour au traitement d'erreur standard
530 TEXT:HOME:INVERSE:PRINT "Le fichier "Fonte$" est inconnu!":NORMAL
540 PRINT:PRINT "<1> pour CATALOG “;:PRINT:PRINT "<2> pour Continuer"
550 PRINT:PRINT "<3> pour Fin "
560 PRINT:PRINT "Votre Choix: ";:GET$x$:PRINT x$
570 x=VAL (CHRS$ (ASC (x$) -128) )
580 ON x>3 OR x<l1 GOTO erreur
590 ON x GOTO 600,40,fin
600 INPUT "Nom du volume: ";Volume$:ON ERR GOTO EPRODOS
610 PRINT "Appuyez sur la barre d'espace pour arréter le défilement"
620 PRINT “=--93cr 7 > Ctr1-c Pour Stopper ese =—s2to= 7 -
630 CATALOG Volume$
640 PRINT "Pressez une touche pour continuer"; :GET$x$:PRINT x$
650 TEXT:HOME:GOTO 40
660 EPRODOS:OFF ERR:REM Retour au traitement d'erreur standard
670 LOCATE, 33: INVERSE: PRINT CHR$(7)"Nom incorrect" :NORMAL
/ pace s2 /
/ Emile scHwarz—csBasic /
680 FOR i%=0 To 1000
690 NEXT: REM Boucle d'attente
700 GOTO 40
710 EIWII:OFF ERR:REM Retour au traitement d'erreur
720 _setoutglobals (255,128) :REM et aux valeurs standards
730 FIN:END:REM Terminus!
740 REM
49980 REM Procédures
60080 REM
60090 REM -- Charge éventuellement 'texttool.tdf' et enléve 'AUTO LF' --
60100 TDF:DEF PROC tdf
60110 LIBFIND "SetOutGlobals",o1%, £2%, x3%
60120 IF 01% THEN 60160:REM Si le fichier a déja été chargé alors...
60130 INVERSE:PRINT "Un instant SVP.":NORMAL
60140 PRINT "Je charge le fichier /gsb/tdfs/texttool.tdf"
60150 LIBRARY APPEND "/gsb/tdfs/texttool.tdf"
60160 ASSIGN ".PRINTER",-1:ASSIGN ".PRINTER",1:REM Pas d'auto LF
60170 END PROC tdf
60190 REM -- Affiche un rectangle de présentation a l'écran -
60200 PRESENTE:DEF PROC presente
60210 TEXT:HOME:PRINT REP$("-",80)"!";
60220 FOR I%=0 TO 15
60230 HPOS=80:PRINT "!!";
60240 NEXT
60250 HPOS=80:PRINT "!"REP$("-", 80);
60260 END PROC presente
61990 REM -- Permet la reconnaissance du CHR$(9)"Z" par le port série --
62000 IZON:DEF PROC CtrlIZon:REM Rétablit la reconnaissance du Ctrl-I "Zz"
62010 CtrlIZ%=PEEK (1529) :REM par le port série
62020 POKE 1529,CtrlIZ%-128
62030 END PROC CtrlIZon
62090 REM -- Inhibe la reconnaissance du CHR$(9)"Z" par le port série --
62100 IZOFF:DEF PROC CtrlIZoff£:REM Supprime la reconnaissance du Ctrl-I "2"
62110 POKE 1273,9:REM par le port série
62120 IF PEEK (1529)>127
62130 THEN OPEN ".PRINTER", AS£1:PRINT£1;CHRS$ (9) "Z"; :CLOSE£1
62140 END PROC CtrlIZoff
62990 REM -- Récupére le nom de la fonte et l'envoie sur l'imprimante --
63000 RECUP:DEF PROC recup
63010 LOCAL at,b%:REM Ce sont des variables locales
63020 at=1:b%=1:REM qui ne servent qu'ici!
63030 WHILE b%<>0
63040 b%=INSTR(Fonte$,"/",a%+1):REM Recherche la présence de "/"
63050 IF bt THEN SWAP a%,b%
63060 UNTIL
63070 PRINT£E1;"Test de la fonte ";MID$(Fonte$,a%+1)
63080 END PROC recup
5 REM DEMO.CAR.PERSO
10 DEBUT:ON ERR GOTO fin:REM A toutes fins utiles...
20 HOME:LOCATE 12,15:E$=CHRS$ (27)
30 PRINT "Démonstration des caractéres personalisés £a°¢Séié™"
40 OPEN ".PRINTER", AS£1:REM Ouvre le port imprimante
/ Paces /
/ cuarcemenr /
50 _setoutglobals(255,0) :REM Nouvelle valeur de 'OR'
60 PRINTE£E1;E$"Z "CHR$(0);:REM Pas de LF si ligne pleine
70 PRINT£1;E$"11"; :REM Pas de CR avant LF et FF
80 PRINTE£1;E$"Z"CHRS (128) CHR$(0);:REM Pas de LF aprés CR
90 PRINTE£1;E$"Z"CHRS$(0)" " 8° bit reconnu
100 BOUCLE:FOR At=0 TO 94:REM Boucle de lecture/
110 READ C%:PRINT£1;CHR$(C%) ;
120 NEXT: REM écriture des datas
130 PRINT£1;ES"D "CHR$(0);:REM LF si ligne pleine
140 PRINTE£1;E$"10"; :REM Ajoute CR avant LF et FF
150 PRINTE£1;ES"D"CHRS$(0)" "; :REM 8° bit ignoré
160 PRINT£1;"":REM Passe a la ligne
170 CLOSE£1:REM Ferme provisoirement
180 OPEN ".PRINTER", AS£1:REM Pour le rouvrir aussitot!
190 PRINT£1;"Démonstration des caractéres: £a°¢Séue™";
200 PRINT£1;E$"!":REM Début des caractéres gras
210 PRINTE£1;E$"'"; "£a°cSéve"";ES"$";
220 PRINT£1;ESCHR$ (34) ; :REM Fin des caractéres gras
230 PRINT£1;"":REM Passe a la ligne
240 FIN: _setoutglobals (255,128) :REM Fixe les valeurs standards
250 CLOSE£1: : Ctest terminé!
260
270
280 REM PROL pour Prologue,
290 REM CAR1 a4 CAR9 pour chaque caractére,
300 REM EPIL pour Epilogue.
310 REM
320 REM ---=--————
330 PROL: DATA 027,045,027,073
340 CAR1: DATA 035,072,020,127,020,020,127,020,000,000
350 CAR2: DATA 064,072,028,034,065,008,085,000,085,014
360 CAR3: DATA 091,072,000,000,000,127,065,065,000,000
370 CAR4: DATA 092,072,000,001, 002,004,008, 016,032,064
380 CARS: DATA 093,072,000,000,000,065,065,127,000,000
390 CAR6: DATA 123,072,000,000,008,054,065,065,000,000
400 CAR7: DATA 124,072,000,000,000,000,127,000,000,000
410 CAR8: DATA 125,072,000,000,065,065,054, 008,000,000
420 CAR9: DATA 126,072,002,001,001,002,002,001,000,000
430 EPIL: DATA 004
440 REM (c) Avril 1988 Tremplin Micro & Emile SCHWARZ
49970 REM nnn nnn nnn nn nr rrr renner nnn nnn nnnnna
49980 REM Procédures
49990 REM anne et er mn mam mn aemian ene en omen mas eps etm orem
60100 TDF: DEF PROC tdf
60110 LIBFIND "SetOutGlobals", 01%, £2%,x3%
60120 IF 01% THEN 60160:REM Si le fichier a déja été chargé alors...
60130 INVERSE:PRINT "Un instant SVP, ";
60140 PRINT "je charge le fichier /gsb/tdfs/texttool.tdf":NORMAL
60150 LIBRARY APPEND "/gsb/tdfs/texttool.td£"
60160 ASSIGN ".PRINTER",-1:ASSIGN ".PRINTER",1:REM Pas d'auto LF
60170 END PROC tdf
Offrez-vous le bouquin d’Emile... Voir notre bulletin
A LA DECOUVERTE DU GSBasic ——
3a /
/ Emile schwarz — cseasic / —
vickDraw Demo ¢sb
Voici comment utiliser certains outils de QuickDraw. Pour une plus grande
rapidité d’exécution, j‘ai défini des procédures d’‘accés aux outils & la place de
sous-programmes “GOSUB / RETURN”.
Chaque appel 4 un outil se présente comme suit :
Pile avant appel
Contenu avant appel
Espace pour résultat
Paramétre 1
Paramétre 2
(éventuellement)
Pile aprés appel
Contenu aprés appel
Résultat
S'ilya lieu
Description du paramétre
Description du paramétre
= Pointeur de pile
Sily alieu
= Pointeur de pile
Chaque paramétre peut étre une valeur, l'adresse
d'une table de paramétres ou I’adresse d'une rou-
tine de traitement.
Dans les programmes QD.DEMO1] et QD.DEMO2,
je vous propose deux facons différentes d’utili-
ser une table de paramétres.
Dans chaque procédure, j'ai incorporé un paramé-
tre ¢% pour numéro de couleur. Vous pouvez cons-
tater qu'une procédure peut en appeler une
autre... (ou en cacher une autre !).
Pour QuickDraw, une figure simple se définit par
les coordonnées des points haut/gauche et
bas/droit d'un rectangle fictif. Les noms de varia-
bles de définition de ces points sont V1,H1,V2,H2
ou, si vous préférez, y,x,v,h.
* y.x définissent le point haut/gauche,
* vh le point bas/droit du rectangle.
J'ai employé plusieurs types de variables dans les
boucles, chacun correspondant 4 une volonté de
lenteur ou de rapidité. En effet, une variable
entiére indice (suffixe %) de boucle demandera un
temps d'exécution plus rapide qu'une variable
entiére longue (suffixe &).
—SetForeColor (stc%)
—SetBackColor (sbe%)
—MoveTo (y%,x%)
—tineTo (y%,x%)
Fixe la couleur de |’écriture.
Fixe la couleur du fond.
Place le crayon a ces coordonnées.
Dessine une ligne depuis la position
actuelle du crayon jusqu’en y%,x%.
Les appels outils suivants ont I'adresse des paramétres en argument :
—DrawString (VARPTR (msg! (@)))
—invertrect (VARPTR (rect! (@)))
—FrameRect (VARPTR (rect! (0)))
—FrameOval (VARPTR (rect! (@)))
—FrameRRect (VARPTR (rect! (@)))
—FrameArc (VARPTR (rect! (@)))
—PaintRect (VARPTR (rect! (@)))
—PaintOval (VARPTR (rect! (@)))
—PaintRRect (VARPTR (rect! (@)))
—PaintArc (VARPTR (rect! (0)))
Dessine le texte stocké dans le tableau msg! (0).
Inverse les couleurs dans le rectangle.
Dessine le contour d'un rectangle.
Dessine le contour d'un ovale.
Dessine le contour d'un rectangle arrondi.
Dessine le contour d'une portion de cercle.
Dessine le contenu d'un rectangle.
Dessine le contenu d'un ovale.
Dessine le contenu d'un rectangle arrondi.
Dessine le contenu d'une portion de cercle.
(suite page 36).
-eeeoe OO eee / Pc | —
— / ovicsrraw 6200, —<—$a— ee
Vous pouvez diminuer la valeur de la ligne 26 si votre GS n'a que 512 K. Dans ce cas, 65536 est une
valeur correcte. Les boucles FOR... NEXT sont sur plusieurs lignes pour plus de clarté et pour contourner
le Bug de I'indention.
Voir d’autre part les programmes de patchs de PICS en ce qui concerne l'affichage des caractéres accentués.
1- @D.DEMOI
5 REM QD.DEMO1
10 DIM rect! (7) :REM Paramétres d'un rectangle
15 PROC outil:REM Charge le fichier quickdraw.tdf
20 GRAF INIT 320:GRAF ON:REM 320 points/ligne + affichage écran SHGR
30 y%=10:x%=10:v%=20:h%=30:REM Ce rectangle contiendra 200 points
40 SET(rect! (0),2)=y%:REM y%,x% = localisation V1/H1 de ltangle haut/droit
50 SET(rect! (2),2)=x%:REM yt = position verticale, xt = position horizontale
60 SET(rect! (4),2)=v%:REM v%,ht = localisation v2/H2 de l'angle bas/droit
70 SET(rect! (6),2)=h%:REM vt = position verticale, ht = position horizontale
80 ptra=VARPTR(rect ! (0)) :REM ptra = adresse de la table rect! (0)
90 _SetSolidPenPat (15) :REM Le crayon écrira en blanc
100 _PaintRect (ptra) :REM Dessine 1 rectangle en utilisant le tableau rect! (0)
110 GETSA$:GRAF OFF:END:REM Attente frappe clavier, puis fin
63100 DEF PROC outil
63110 LIBFIND "QDStartUp", 01%, £2%, x3%
63120 IF o1% THEN 63140
63130 LIBRARY APPEND “/gsb/tdfs/quickdraw.tdf"
63140 END PROC outil
2- Q@D.0EMO2
5 REM QD.DEMO2
10 DIM msg! (255) :REM Nombre de caractéres maximum
15 PROC outil:REM Charge éventuellement quickdraw.tdf
20 GRAF INIT 320:GRAF ON:REM 320 points/ligne + affichage écran SHGR
30 a$="Vive le GS Basic!":REM Chaine a afficher
40 SET(msg! (0))=*a$:REM Stocke la chaine a$ a la Pascal: 1° octet = longueur
45 _MoveTo (10,10) :REM Début de l'écriture en 10,10
50 _SetBackColor(15) :REM Couleur du fond: Blanc
60 _SetForeColor (1) :REM Couleur de l'écriture: Noir
70 _DrawSt ring (VARPTR (msg! (0))) :REM Ecrit le message
80 GETSAS:GRAF OFF:REM Attente clavier, puis fin
90 END
63100 DEF PROC outil
63110 LIBFIND "QDStartUp",o1%, £2%, x3%
63120 IF 01% THEN 63140
63130 LIBRARY APPEND "/gsb/tdfs/quickdraw.td£"
63140 END PROC outil
POURQUOI LE CSBASIC ?
Personne ne vous interdit de programmer en APPLESOFT, mais vous
n’aurez vraiment accés aux outils du GS qu’en utilisant le GSBasic,
lune des plus récentes moutures du Basic... 2
/ pacesc /
/ emile scuwarz— csBasic /
3- QUICKDRAW.GSB
5 REM QUICKDRAW.GSB
10 DEBUT: HOME:ON ERR GOTO erreur
20 CLEAR 165536
30 b$="_Tremplin Micro et Emile Schwarz "
40 c$="Pressez une touche pour continuer"™
50 a$=" IIGS Basic: Quick DrawII Demo ":j%=1
60 DIM msg! (256), rect! (7)
70 LIBFIND "QdStartUp",ql%,q2%,q3%
80 IF ql% THEN saute
90 LIBRARY APPEND "/GSB/TDFS/quickdraw.tdf"
100 SAUTE: GRAF INIT 320:GRAF ON
110 IMAGE1: y%=0:x%=0: v$=200 :ht=320
120 BOUCLE1: FOR I%=0 TO 15
130 PROC framrect (it, yt, xt, v%,h%)
140 yt=yt+10 :xt=x%+10 : vt=v%-10 :h$=ht-10
150 NEXT
160 PROC msg(51,193,5,15,a$)
170 PROC msg(46,14,6,15,b$)
180 PROC pintrect (15,91, 91,109,229)
190 BOUCLE2: FOR i=15 TO 0 STEP-1
200 PROC msg(51,193,15,i,a$)
210 PROC msg(46,14,15,i,b$)
220 PROC msg(102,103,i,15,"(c) 2 Mars 1988")
230 NEXT
240 BOUCLE3: FOR A&=0 TO 5
250 PROC invrect (0,160,200, 320)
260 PROC invrect (0,0,200,160)
270 PROC invrect (100,0,200,320)
280 PROC invrect (0,0,100,320)
290 NEXT
300 PROC invrect (0,0,200, 360)
310 PROC msg (38,103,0,15,c$)
320 GET$x$
330 IMAGE2: GRAF INIT 320:GRAF ON
340 _setsolidpenpat (15) :REM Couleur du crayon: Blanc
350 PROC boite(0,0,200, 320)
360 PROC pintrect (9,10,10, 30,30)
370 PROC msg(5,40,0,15,"paintrect")
380 PROC pintarc(8,10,80,30,240,-90,-90)
390 PROC msg (100, 40,1,14, "paintarc")
400 PROC framarc (15,10, 80,30,240,0,180)
410 PROC msg(160,40,2,13,"framearc")
420 PROC framrect (3,10,290, 30,310)
430 PROC msg (245, 40,3,12,"framerect")
440 PROC pintRrect (5,55,10,90,110,15,15)
450 PROC msg(11,100,0,14,"paintRrect")
460 PROC framRrect (10,55,210,90,310,15,15)
470 PROC msg(228,100,0,14,"frameRrect")
480 PROC pintoval (4,120,10,170,110)
490 PROC msg(25,180,5,9, "paintoval")
500 PROC framoval(2,120,210,170,310)
510 PROC msg (228,180,4,11,"frameoval")
520 BOUCLE4: FOR it=0 TO 13
/ paces7 /
PROC pintarc (j%,80,110,150,209,k%,15)
jt=j%+1:kt=kt+30:IF k%>180 THEN k%=-k%
NEXT
PROC msg (125,180,6,7,"paintarc")
PROC msg(38,195,0,15,c$)
PROC invrect (0,0,200,320)
GET$x$:GOTO fin
ERREUR: OFF ERR:PRINT "?"ERRTXTS$(ERR)" error in line "ERRLIN
FIN: GRAF OFF:END
BOITE: DEF PROC boite(y%,x%,v%,h%)
_Moveto (y%, x%)
_lineto (y%+h%-1, x%)
_lineto (yt+ht-1, xt+v%-1)
_lineto(y%,xt+v%-1)
_ilineto(y%,x%)
_Moveto (y%+1, x%+1)
_lineto (y%+1,xt+v%-2)
_moveto (y$+h%-2, x8+1)
_lineto (yt+h%-2,xt+v%-2)
END PROC boite
MSG: DEF PROC msg (y%,x%,sfc%,sbc%,a$)
SET (msg! (0))=*a$
set forecolor (sfc)
_setbackcolor (sbc%)
_Moveto (y%, xt)
_drawstring (VARPTR(msg! (0)))
END PROC msg
INVERT: DEF PROC invrect (y%,x%,v%,h%)
PROC rect (y%,x%, v%,h%)
_invertrect (ptra)
END PROC invrect
CORECT: DEF PROC rect (y%,x%,v%,h%)
SET(rect! (0),2)=y%
SET(rect! (2) ,2)=x%t
SET (rect! (4) ,2)=v%
SET(rect! (6),2)=h%
ptra=VARPTR (rect! (0))
END PROC rect
FRAMERECT:DEF PROC framrect (ct, y%,x%,v%,h%)
PROC rect (y%,x%, v%,h%)
_setsolidpenpat (c%)
_framerect (ptra)
END PROC framrect
PINTOVAL: DEF PROC pintoval (ct, y%,x%, v%,h%)
PROC rect (yt, x%,v%,h%)
_setsolidpenpat (c%)
_paintoval (ptra)
END PROC pintoval
FRAMOVAL: DEF PROC framoval(c%, y%,x%, v%,h%)
PROC rect (y%,x%,v%,h%)
_setsolidpenpat (c%)
/ Emile scHwarz —csBasic /
62073 _frameoval (ptra)
62074 END PROC framoval
62080 PINTARC: DEF PROC pintarc (ct, y%,x%,v%,h%,adt, va%)
62081 PROC rect (y%,x%,v%,h%)
62082 _setsolidpenpat (c%)
62083 _paintarc (ptra, ad%, vat)
62084 END PROC pintarc
62090 PINTRECT: DEF PROC pintrect (ct, y%,x%, v%,h%)
62091 PROC rect (yt,x%,v%,h%)
62092 _setsolidpenpat (c%)
62093 _paintrect (ptra)
62094 END PROC pintrect .
62100 PINTRRECT:DEF PROC pintrrect (c%, yt, x%, vt, ht, lo%, ho$)
62101 PROC rect (y%,x%,v%,h%)
62102 _setsolidpenpat (c%)
62103 _paintrrect (ptra, lot, hot)
62104 END PROC pintrrect
62110 FRAMRRECT:DEF PROC framrrect (c%, y%,x%,v%,h%, 10%, ho%)
62111 PROC rect (y%,x%,v%,h%)
62112 _setsolidpenpat (c%)
62113 _framerrect (ptra, 10%, ho%)
62114 END PROC framrrect
62120 FRAMARC: DEF PROC framarc (ct, y%,x%,v%t,ht,ad%, vat)
62121 PROC rect (y%,x%, v%,h%)
62122 _setsolidpenpat (c%)
62123 _framearc (pt ra, ad%, va%)
62124 END PROC framarc
10 REM GSB.HELLO amélioré!
20 DEBUT: ASSIGN ".PRINTER",-1:REM Supprime .PRINTER
30 ASSIGN ".PRINTER",1:REM Installe .PRINTER sans AUTO-LF
40 CLEAR 65535:REM Réserve $FFFF de mémoire
50 PREFIX 6,"/gsb/tdfs"
60 PRINT "Un instant SVP, je charge les fichiers .tdf"
70 LIBRARY "6/locator.tdf"
80 LIBRARY APPEND "6/memory.tdf"
90 LIBRARY APPEND "6/misctool.tdf"
100 LIBRARY APPEND "6/quickdraw.td£" Hep ie obinagpegr ora
110 LIBRARY APPEND "6/desk.tdf" Tremplin Micro n°19 n’était qu'une...
120 LIBRARY APPEND "6/event .tdf" ébauche comportant quelques erreurs.
130 LIBRARY APPEND "6/scheduler.tdf" Voici le Hello définitif (qui figurait sur
140 LIBRARY APPEND "6/sound.tdf" la disquette d’accompagnement).
150 LIBRARY APPEND "6/adb.td£" ‘fevoeouibas lek excames"V Eas SCHWARZ:
160 LIBRARY APPEND "6/sane.tdf”
170 LIBRARY APPEND "6/intmath.tdf"
180 LIBRARY APPEND "6/texttool.tdf"
190 ON ERR GOTO erreur:REM Branchement sur ERREUR s'il y a lieu...
200 OPEN “.PRINTER", AS£1:OUTPUT£1
210 _setoutglobals(255,0) :REM Fixe les masques AND et OR
220 PRINT CHR$ (27) "D"CHR$(0)CHR$(1):REM Zéros barrés.
230 CLOSE£1
240 ERREUR:OFF ERR:REM Rétablit le mode standard de traitement d'erreur
250 _setoutglobals (255,128) :REM Valeurs standards des masques.
260 FIN: NEW
/ Pacess /
— / Emile scHwarz—Toustangages /
Image Writer Il
Corrigez votre manuel de référence
Vous avez sérement lu I’annonce de la sortie du
manuel de référence de I'lmage Writer Il en
Frangais, paru chez Inter Editions. Je |'ai acheté.
1. Page 73
Le texte a simplement été traduit, ainsi que
l'erreur relevée dans |'édition américaine.
5. Une mise en garde
Il faut lire :
Esc | 0 pour Insertion de CR avant LF et FF
Esc | 1 pour Pas d’insertion de CR avant LF et FF
soit escape petit! zéro = 27 108 48
escape petit! un = 27 108 49
En effet, la police utilisée pour |'impression
Il n'est pas possible d’envoyer plusieurs
‘backspaces’ consécutifs sur I'lmage Writer
Il. A lorigine, on devait pouvoir en envoyer
deux pour un bon positionnement des
peut laisser un doute : est-ce ESC T 0 ou ESC
10? Si vous lisez les codes en décimal ou
hexadécimal, aucun doute n'est permis,
mais... errare humanum est !
accents circonflexes sur le ‘i’ et sur les autres
lettres. Ce n’est pas le cas : cette possibilité
a été malencontreusement oubliée.
Les points 1, 2 et 5 sont communs aux deux éditions. Les
points 3 et 4 n'existent que dans |'édition francaise.
Si vous ne possédez pas encore ce manuel, vous
pouvez vous le procurer au rayon librairie de votre
concessionaire ou chez :
Inter Editions, 87 Avenue du Maine, 75014 PARIS
Tél : (16-1) 43.27.74.50
2. Pages 111, 112, 153
Ainsi que sur la carte de référence :
Alors qu'Apple avait été informé de ce pro-
bleéme (par un collaborateur de Tremplin
Micro) et avait publié une fiche technique
IMW 1 sur ce point (sous le nom : Custom Font
Selection), aucune mention n’est faite du bug
interdisant le retour au banc 1 des caractéres
assoc tele par ESC ' lorsque I’on a utilisé le
anc 2 par ESC *.
Le remade consiste 4 envoyer les commandes suivantes :
Signification
ESC D Ctrl-aEspoce | 27 68 @ 32) 1B 44 GO 20) Bit Bingnoré
Pierre METIVIER
nommé Responsable Communication Technique
Pour assurer une meilleure information sur
les problémes techniques concernant les logi-
ciels BORLAND, Pierre METIVIER a été nommé
Responsable Communication Technique, 4
destination de la presse et des entreprises.
Pierre METIVIER, 30 ans, est entré chez BOR-
LAND INTERNATIONAL en décembre 1986
pour y créer le Support Technique. C'est éga-
lement lui qui a mis en place le service télé-
matique "Forum des langages” accessible par
le 36.14.
Ingénieur Electronicien diplémé de |'ESME,
Pierre METIVIER est titulaire d'un DESS de ges-
tion de I'lAE et d'un Master of Computer
Science de BGSU (Ohio). Ingénieur informati-
cien chez Micro Application de 1982 4 1985, il
a ensuite été Responsable du Support Techni-
que chez Apricot avant de rejoindre la société
BORLAND INTERNATIONAL. BORLAND INTERNATIONAL
ESC Z.Cirl-a Espoce | 2799 @ 32| 1B SA GO 20| Bit 8reconnu
3. Carte de référence
Caractéres personnalisés, il faut lire :
ESCI 27 73
etnon: 27 43 comme imprimé.
4. Carte de référence
Divers, il faut lire :
ESC D Ctrl-a Espace
— / paceso /
27 680 32 «1B 44 00 20
/ Emile scHwarz — csBasic / —
Trois patches pour PICS
Voici trois patches pour le programme PICS. Pourquoi ces patches ?
Examinons-les un par un.
Comme nous avons vu dans le n°18 de Tremplin
Micro (Janvier), il n'est pas possible d'utiliser en
mode graphique SHGR les caractéres accentués
lorsqu'ils sont pris directement depuis le clavier.
Pour contourner cette impossibilité, il faut recoder
ces caractéres. Ce patch est la pour ¢a !
Syntaxe d'une ligne de data comprenant un (ou
plusieurs) caractéres accentués :
1000 DATA " * ¢LC'est ¢¢136¢ quel sujet?¢N257V« Aa”
1010 DATA " + ¢LC'est ¢¢136¢¢¢136¢ quel sujet?¢N257V+Aa”
La ligne 1000 comprend un ‘d’ ; la ligne 1010 en
comprend deux. On constate la présence d'un ‘¢’
aprés |'astérisque en début de data ; puis deux ‘¢’
suivis du code ASCII étendu du caractére désiré
(ici : '&’) et enfin un '¢' terminateur. D'autre part, en
fin de ligne, j’ai ajouté un équivalent clavier soit :
‘* Aa’ (Pomme-A ou Pomme-a) ; cet équivalent
clavier doit commencer par un astérisque et étre
suivi par deux caractéres :
* soit deux caractéres identiques,
* soit un caractére suivi d'un espace,
¢ soit enfin une majuscule et une minuscule.
2. PUT.PICS.CSB
En Basic Applesoft, nous avons STORE et RESTORE
qui sauvent sur disquette les variables employées
1- ROTBL.PICS.GSB
dans le programme et qui les chargent lorsqu'on se
sert d nouveau de ce méme programme.
En GSBasic, on peut considérer que PUT £n et
GET £n sont dans ce cas. Nous avions vu (dans
Tremplin Micro n°19) une premiere utilisation de
PUT £n et GET £n. En fait, ces instructions permet-
tent de charger dans un tableau d’octets (suffixe
'!’) ou de sauver 4 partir du méme type de tableau
des données. Présentement, il s‘agit des datas de
définition des fenétres, des menus et autres
messages...
On doit : soit saisir le programme 4 partir de la
revue, soit EXECuter le fichier PUT.PICS.TXT
figurant sur la disquette d'accompagnement, puis
lancer le programme.
Une fois les opérations 1 et 2 effectuées, il ne nous
reste plus qu’d mettre en place la récupération des
datas a partir de la disquette.
Procédons de la méme facgon que pour
PUT.PICS.GSB, puis tapons: DEL 15800,24100
pour enlever les routines de reconnaissance des
datas et les datas eux-mémes (dont nous n’avons
plus besoin).
Et maintenant 4 nos chronométres ! On ne peut
que constater la lenteur d’exécution de notre PICS
original par rapport a ce PICS turbo !
16800 DEFDOSET:DEF FN doset% (desta, vstr$)
16900
17000 GOBBLE:
17100
17105
17110
LOCAL at,b%,c%,d%,e%, £%,ht,1%,x%t,a$
IF MID$(vstr$,1,1)=" " THEN vstr$=MID$(vstr$,2):GOTO gobble
x%=INSTR ("!%£a$**6",MIDS (vstr$,1,1))
at=INSTR("¢",MIDS$ (vstr$,2,1))
ON at AND x% GOTO french
/ Paces: /
/ Trois patches pour Pics /
17200 IF xt THEN vstr$=MIDS$(vstr$,2)
17300 IF MID$(vstr$,1,1)="0" THEN vstr$=STR$ (TEN (vstr$) )
17400 ON x% GOTO doint,doint,dbl,doint,bstr,xstr,xstr,doint
17500 SET(t! (0),4)=CONV(vstr$) :1%=4:GOTO done
17600 DBL: SET(t! (0) ,8)=CONVE (vstr$) :1%=8:GOTO done
17700 DOINT: IF MID$(vstr$,1,1)="0" THEN vstr$=STRS$ (TEN (vstr$) )
17800 t&=CONVS (vstr$) :1%=x%:IF t&=0 THEN GOTO dozero
17900 ELSE SET(t! (0),x%)=t&:GOTO done
18000 XSTR: IF x%=6 THEN vstr$=CHR$(LEN(vstr$))+vstr$
18100 ELSE vstr$=vstr$+CHR$ (0)
18200 BSTR: 1%=LEN(vstr$) :SET(t! (0) )=*VARPTRS (vstr$),1%:GOTO done
18210 FRENCH: vstr$=MID$(vstr$,3)+CHRS$ (0)
18215 ct=INSTR(vstr$,"c¢",1)
18220 SET(t! (0) )=MID$(vstr$,1,c%-1)
18225 At=INSTR(vstr$,"¢",ct+2)
18230 bt=VAL (MIDS (vst r$,c%+2, (dt-c%-2) ))
18235 SET (t! (c$-1)) =b%
18240 TEST: eS=INSTR(vstr$, "co", dt+1) :£t=£t+1
18245 IF e% THEN h%t=d%:GOTO suite
18250 ELSE SET(t! (c%))=MID$(vstr$,d%+1)
18255 1%=LEN (vst r$) - (LEN (STRS$ (b%) ) +2) *£%:GOTO done
18260 SUITE: dt=INSTR (vstr$,"¢",e%+3)
18270 IF et>(h%+1) THEN a$=MIDS(vstr$,ht+1,e%-(h%+1)) :SET(t! (c%) )=AS:
c%=c%+LEN (A$)
18300 SET (t! (c%) )=VAL (MIDS (vst r$,e%+2,dt-(e%+2))) :ct=c%+1:GOTO test
18400 DONE: topa=destat1%-1:xt=0
18500 FOR pka=desta TO topa
18600 ze=t ! (xt)
18700 POKE pka, z%
18800 xt=xt+1
18900 NEXT
19000 DOZERO: FN doset%=1%
19100 END FN doset%
2 - PUT.PICS.GSB
14910 TEXT:HOME:PRINT "Un instant, je sauve le contenu des tableaux"
14920 OPEN "PICS.256.F2", FILTYP=242 AS£1,256
14930 PUT£1,256,0;menul! (0)
14940 PUT£1,256,1;menu2! (0)
14950 PUT£1,256,2;menu3! (0)
14960 PUT£1,256,3;message! (0)
14970 PUT£1,256,4;msgl! (0)
14980 PUT£1,256,5;dtitle! (0)
14990 PUT£1,256,6;wititle! (0)
15000 PUT£1,256,7;w2title! (0)
15010 PUT£1,256,8;w3title! (0)
15020 PUTE1,256,9;w4title! (0)
15030 CLOSE£1
15050 OPEN "PICS.78.F3", FILTYP=243 AS£1,78
15060 PUT£1,78,0;dpb! (0)
15070 PUT£1,78,1;wipb! (0)
15080 PUT£1,78,2;w2pb! (0)
15090 PUT£1,78,3;w3pb! (0)
15100 PUT£1,78,4;w4pb! (0)
/ Pacea2 /
/ Emile scHwarz— csBasic / —
15110 PUTE£1,78,5;slinfo! (0)
15120 PUTE£1,78,6;SrcRect! (0)
15130 CLOSE£1 G
15140 END
3 - GET.PICS.GSB
2000 LIBFIND "WindStartUp",q1%,q2%,q3%
2100 IF ql%=0 THEN LIBRARY "6/quickdraw.td£"
2200 PROC please.wait
2300 OPEN "PICS.256.F2", FILTYP=242 FOR INPUT AS£1,256
2400 GET£1, 256, 0;menu1! (0)
2500 GET£1,256,1;menu2! (0)
2600 GET£1,256,2;menu3! (0)
2700 GET£1,256,3;message! (0)
2800 GET£1,256,4;msgl1! (0)
2900 GET£1,256,5;dtitle! (0)
3000 GET£1, 256, 6;wiltitle! (0)
3100 GET£1,256,7;w2title! (0)
3200 GET£1, 256, 8;w3title! (0)
3250 GET£1,256,9;w4title! (0)
3300 CLOSE£1
3310 PROC msg("'Nother Moment Please ...")
3400 OPEN "PICS.78.F3", FILTYP=243 FOR INPUT AS£1,78
3500 GET£1,78,0;dpb! (0) :GET£1,78,1;wipb! (0)
3600 GET£1,78,2;w2pb! (0) :GET£1,78,3;w3pb! (0)
3650 GET£1,78,4;w4pb! (0) :GET£1,78,5;slinfo! (0)
3700 GET£1,78,6;SrcRect ! (0)
3710 CLOSE£1
3800 PROC msg("'Nother ‘Nother Moment Please ...")
© LOTUS 1.2.3 PAR LA PRATIQUE (par Carolyn Jorgensen)
Riche en exemples concrets, ce livre s'adresse 4 tous les utilisateurs de Lotus
1.2.3. Les néophytes y trouveront des guides simples avant chaque theme
important; quant aux utilisateurs chevronnés, ils se lanceront directement
dans le cceur d’explications plus avancées. L'ouvrage fournit aux débutants
des modéles structurés résolvant des problémes financiers et statistiques.
Ces modéles peuvent aussi étre étendus 4 d'autres applications. Aux utilisa-
teurs ayant une demande précise, il offre une structure bien indexée.
Un livee broché de format 190X230, de 588 poges — 298 F. cher SYBEX.
© NOUVELLE ENCYCLOPEDIE LOTUS 1.2.3. (par Greg Harvey)
Voici une référence compléte, couvrant tous les aspects de l'utilisation de Lotus 1.2.3,
version 2. L'auteur s‘est attaché 4 le présenter comme la source d'information devant
venir en aide a
Showing the first 100000 of 146943 characters.