Skip to main content

tremplin micro newsletter issue 20

  • PublicationApple Periodicals
  • Pages66
  • Sourcetremplin_micro_newsletter_issue_20.pdf
← Magazines tremplin micro newsletter issue 20
/ 66
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
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.

mp.ls