Skip to main content

magazine poms31

  • PublicationApple Periodicals
  • Pages76
  • Sourcemagazine_poms31.pdf
← Magazines magazine poms31
/ 76
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
Text content (OCR)
ouverture des Apple a la communication dans les pages de Pom's se poursuit par un programme qui allie au «savoir communiquer» de CalyaCom l'indispensable liaison 4 l'ordinateur. CalvaCom Pour les lecteurs non encore au fait des possibilités de CalvaCom, une présentation sommaire s'impose. I] se différencie des serveurs habituellement consultés & l'aide du Minitel par plusieurs points : * on y accéde par le 36 13 (ou 36 00 36 O1, une unité toutes les 6 mn moins réduction d'horaires), le coat de connexion étant réglé directement 4 CalvaCom (prélévement ou carte bancaire) ; * la consultation se fait sans caractére graphique : seuls les caractéres ASCII arrivent au modem ou au Minitel. Ce dernier affiche les messages en mode “rouleau” tel une imprimante ; + passer de menus en menus est bien plus simple et efficace que sur les serveurs kiosque, 'acc’s & l'information est particuligrement rapide ; + il a €té congu dans l'optique de la connexion a l'ordinateur : les informations disponibles sont réellement exploitables par le micro. CalvaCom met & la disposition des abonnés : + une messagerie électronique qui permet 4 chacun de classer ses messages, de répondre simplement, de recevoir des messages directement de Yordinateur de l'abonné pour éviter de perdre du temps 4 les composer en direct ; + le service TELEX, en émission et réception ; des forums électroniques ; un systéme de téléconférence (convi- vialité) ; * un systéme de petites annonces ; * des magazines électroniques ; + des biblioth¢ques de programmes 1éléchargeables ; * les dépéches de l'Agence France Presse ; * les cours de la bourse avec possibilité Apple //, Macintosh. Le programme CLV_POMS Proposé en version Apple // et en version Macintosh, CLV_POMS donne les possibilités suivantes : * enregistrement de consultations CalvaCom. Les fichiers constitués sont récupérables par votre traitement de texte, votre tableur... et ils ne sont limités en dimension que par la capacité de votre support disque ; + mode téléscripteur : impression au fur et 4 mesure de la réception, mode particuligrement efficace lors de Iécoute” des dépéches AFP (qui tombent au fur et 4 mesure de I'actualité) ‘ou des cours de la bourse ; * exportation de fichiers vers CalvaCom : vous voulez passer une petite annonce, nous laisser un message (le code de Pom’s est EMP11), participer 4 un forum, constituer un fichier sur le serveur pour utilisation ultérieure ? Préparez-le en traitement de textes et envoyez-le par cette option : il sera transmis sans protocole mais au bon débit, en respectant la mini-pause de fin de ligne ; + procédures : c'est une utilisation particuligre du mode précédent. Ill est possible de préparer un texte comprenant les options choisies pour une consultation habituelle et de lenvoyer & CalvaCom pour atteindre plus rapidement et sans erreur les informations. Pour consulter automatiquement les publicités du forum Macintosh, la procédure pourrait étre la suivante : N°_abonné Mot_de_passe ci facintosh mac fo pub Des pauses peuvent étre incluses dans le fichier pour tenir compte du temps daffichage des nouveautés aprés le mot de passe par exemple. * impression d'un fichier de textes sur disque : il s'agira souvent du résultat de votre derniére connexion ou d'une demiére vérification de votre texte avant exportation. Bien entendu, les programmes CLV_POMS recodent les minuscules accentuées tant en émission qu'en réception, tant sur le Mac que sur l'Apple //, tant avec un Minitel 40 colonnes que sur le 80 colonnes. Configuration CLV_POMS fonctionne sur : Apple ][+ avec ROM minuscules, carte langage et carte Super Série Apple ; Apple //e avec carte Super Série Apple ; Apple //e; Apple IIGS sur son port modem intégré ou avec une carte SSC ; Macintosh 128, 512, Plus ou SE. Il nécessite : - un modem ou un Minitel (les modéles 80 colonnes sont bien plus agréables), un cable de liaison disponible a la revue. La disquette CLV_POMS, écrit en assembleur, est livré sur une disquette 3'5 pour Macintosh et au choix 5'25 ou 3'S pour T'Apple //. La version Apple // fonctionne sous ProDOS avec tous les volumes (disquettes 140Ko, 800Ko, disque /RAM, Speedisk, disques durs...). La version Mac fonctionne avec tous les supports, tant en MFS qu'en HFS. CLV_POMS : 200,00 F TTC, cable de liaison 225,00 F, bon de commande page 74, Peeks et Pokes Numéro 31 Décompacteur de juillet-aoiit 1987 programmes Basic Julien Thomas Editorial es: = 8 Page 43 Hervé Thiriez Page 5 _ es Disquette Pom’s 31 Mac Page 45 longs sur GS Un accessoire ‘minimum’ CAUET (it+]} [Ze We] es oes fase | |g} Page 9 Christian Piard Page 6 MinAcc fra: Page 46 Le Basic et l'heure Page 8 Alain Boer —— es) Graphes et fonctions Claude- Kino & fas Page 47 Lucien Alain Bohee =D) GOGO ‘Newt HC Gr) He Page 22 5 =| | aaa Les nouvelles version d'InterPom’s Page 52 Ics We PC}; icteee Disquette Pom’s 31 Apple // page 26 Serge Cattan Le voyageur Essai ; une nouvelle carte : Alexandre Speedisk Duback Page 27 IE] I+] [e]]| Page 55 eee | (ES | (ee | Turbo-Pascal : Graphisme, Essai ; une carte vocale : suite... Michel de Crémoux & . Nicolas Martin Valentine P Ue} [e}! 7 pace 5 age 28 Bes Page 59 ag (| ( 3 | | eg Ecriture proportionelle en DHGR Frédéric [Hes ]} _ Rosay WHC f oo% He — Page 31 ee | | CSS || ES | Eas Bibliographie Cs Alexandre Duback Page 62 Un nouveau produit Pom’s : Editeur Vidéotex Page 37 LeMouse : souris & menus Tie Le Pham Hiep Page 63 Essai Macintosh: =) & Writer + — Philippe Mathieu Page 40 Ll-informations % Jean-Michel Gourévitch Page 67 Les annonceurs ; Apple : pages 38 et 39 ; LOGMA S.A. : page 76 ; mak fan : page 4; Q.S.I. : page 44. Editions MEV - 12, rue d’Anjou - 78000 Versailles. Tél. : (1) 39 51 24 43. Directeur de la publication : Hervé Thiriez Pom's n° 31 LA NOUVELLE REVUE DES FANAS DU MACINTOSH C'est LA NOUVELLE REVUE de [utilisateur pointu de "Macintosh". Crest l'espace ou les utilisateurs de 4D, Excel, Writer +, Jazz et TK Solver se retrouvent. C'est le magazine de celui qui veut se dégourdir les doigts et les neurones sur le Clavier, avec les "tutorials" en Pascal, Assembleur, "C", Lisp et Modula. C'est la revue ou vous pouvez écrire si vous avez une belle réalisation d'application a votre actif, c'est Votre revue disponible dans les kiosques. mak fan Bp 33, 94471 - BOISSY Cédex Tél. : 45 99 02 10 SOMMAIRE DU N° 4 (64 pages) actuellement dans les kiosques MAC WORLD WRITER PLUS DESKTOP PUBLISHING TUTORIAL : ASSEMBLEUR 68000 INFOS PRESSE ALOOaH RES MACROS D'EXCEL L'HOMME DU MOIS (UN GRAPHISTE) INTRODUCTION A 48 DIMENSION RECREATIONS ALGORITHMIQUES BASEGEST (48D) CALCULS EN MULTI-PRECISION bulletin d'abonnement (suetin a recopier ou 4 photocopier) aretourner a: Mak fan BP 33, 94471 - BOISSY Cédex Q Oui, je m'abonne pour 1 an [8 numéros] a partir du N° au prix de 260 F au lieu de 280 F Q Abonnement de soutien : 350 F (8 numéros) Frais de port inclus - Etranger : 45 F le numéro. VENTE AU NUMERO. G N13 G N2_— auprixunitaire de 30 F (40 F pour I'Etranger) (@ NP3_— au prix unitaire de 35 F ( 45 F pour I'Etranger). ci-joint un cheque de. . .FF a l'ordre de mak fan Adresse : Ville : Prénom : Code postal : . . Profession Ont collaboré 4 ce numéro Alexandre Avrane — Jean-Luc Bazanegue Alain Bohec — Serge Cattan Claude-Lucien Cauet Michel de Crémoux Alexandre Duback Jean-Michel Gourévitch Olivier Herz - Le Pham Hiep Nicolas Martin — Philippe Mathieu Gérard Michel — Patrice Neveu Christian Piard — Frédéric Rosay Hervé Thiriez — Julien Thomas Directeur de la publication rédacteur en chef Hervé Thiriez Rédacteurs Alexandre Avrane — Olivier Herz Siege social Editions MEV 12, rue d'Anjou 78000 Versailles ® (1) 39.51.24.43 Publicité Editions MEV Diffusion N.M.P.P. Impression Berger-Levrault 18, rue des Glacis 54000 Nancy @ 83.35.61.44 Photos de couverture CP & JLB Photogravure Graphotec 21, chemin de la Tour 92350 Le Plessis-Robinson ® (1) 4630.44.49 Pom's est une revue indépendante non rattachée a Apple Computer, Inc. ni a Apple Computer France S.A.R.L. Apple, le logo Apple, Mac et le logo Macintosh sont des marques déposées d'Apple Computer, Inc. IBM est une marque déposée de International Business Machine. PC et AT sont des marques déposée de la Société IBM. Editorial Une fois n'est pas coutume, voici en couverture — et sur fond de loisirs estivaux - une illustration du fonctionnement de deux programmes que vous pourrez trouver dans ce numéro : Schémateur, volumineux, dans le domaine de la création graphique et Peeks /Pokes longs qui en fait voir de toutes les couleurs — ou presque — sur l’Apple lcs et derriére le logo “Pom's”. Pom’s poursuit sa lancée dans l'exploration des voies communicantes en vous proposant trois disquettes éditées en dehors des pages de la revue : InterPom’s — le programme qui, depuis le numéro 28, relie vos Apple // et/ou Macintosh par téléphone via Minitel - a recu de nombreuses améliorations dans la version 2, version capable de communiquer de la méme maniére avec les micros IBM® et compatibles. CLV_Pom’s vous est proposé pour répondre aux besoins de nombre de lecteurs abonnés & CalvaCom. Que se soit pour Apple // ou Macintosh, CLV_Pom’s se _ présente sous la forme d'une application autonome et est compatible ‘toutes configurations’. Enfin, un éditeur vidéotex en CP/M, pour les Apple |/ munis d'une carte 80 colonnes ainsi que d'une carte Z80. Communiquer n'a pas été facile pour tous nos lecteurs ; vous étes nombreux a avoir attendu longtemps — parfois un mois — la réception de votre cable Apple/Minitel décrit dans les numéros 27 et 28. En effet, nous avions envisagé la distribution de ce type de cable comme un service aux lecteurs qui n‘avaient pas la possibilité d'effectuer la réalisation eux-méme, or, la parution d’articles dithyrambiques dans d'autres pages que celles de Pom's nous a valu un afflux de commandes auquel nous ne nous attendions pas. Tout est désormais rentré dans l'ordre et nous prions ceux d’entre-vous qui ont attendu de bien vouloir nous excuser de ce retard regrettable. Pour revenir au numéro 31 proprement dit, et sans aller jusqu'a décrire chaque article (il y en a beaucoup et ce serait trop long pour un éditorial !), on peut signaler la présence de trois bancs d’essais dont deux ‘hard’ pour l’Apple // : la carte vocale Valentine et le ‘disque-RAM’ Speedisk. Le banc d’essai ‘soft’ est celui de Writer +, traitement de textes pour Macintosh. Hervé Thiriez Pom’'s n° 31 sur Apple IIGS -)Applesoft semble bien perdu devant 254 des 255 bancs = de 64Ko du IIGS. En effet, comment accéder depuis le Basic 4la ROM en page 255, a la page Super Haute Résolution en page 225 (adresses 14 753 792 a 14 778 367) par exemple ? La petite routine présentée ici dote le Basic de PEEK et POKE longs, c'est-a-dire accédant a l'ensemble de la mémoire. Deux programmes de démonstration en illustrent les possibilités. Mode d'emploi La routine s'installe a l'adresse $300, mais ne demande qu'a étre assemblée ailleurs en cas de besoin. L'initialisation se fait en mode direct par : - PIC.POC et dans un programme par : PRINT CHR$(4)"-PIC.POC" Voici la syntaxe des commandes disponibles : & PEEK page, adresse, var% Page est le numéro en décimal du banc oi la lecture se fera. Adresse est l'adresse en décimal dans ladite page. Var% est la variable entiére qui recevra la valeur de l'octet souhaité. Par exemple : & PEEK 255, 65535, GF affectera 4 GF% la valeur de la demiére adresse mémoire. & PEEK 1-1,MLI,A1#(2) affectera 4 la 3éme variable du tableau A1% la valeur 76 si on a définit MLI=48896 ($BFO0) et que ProDOS est actif. Page supérieure 4 255 et adresse supérieure 4 65535 conduisent 4 un «Illegal quantity error» mérité. Si la variable réceptrice n'est pas entiére (%), l'utilisateur sera gratifié du «Type mismatch error». & POKE page, adresse, valeur Méme principe pour Page et Adresse ; Valeur sera comprise entre 0 et 255 sous peine de message d'erreur. Des exemples Le programme LIT.MESS.GS est une illustration du PEEK : il lit et affiche les messages stockés en page 255 (ROM), particuliérement ceux affichés par le tableau de bord. Cette zone est visée par un pointeur dont l'adresse est donnée en $E100C0/E100C2. Sous réserve de bien respecter les conventions “poids fort a 1, poids fort a 0”, il suffit de changer cette adresse et le GS affichera votre table de message en francais par exemple. Le programme GSCOLOR ne fait qu'un dégradé de couleurs en page Super Haute Résolution, semblable a celui de la couverture de ce numéro. II prend son temps (9 minutes en mode rapide...) mais illustre le fonctionnement du Peeks et Pokes longs Christian Piard &POKE par 64000 points 4 l'écran. On peut rappeler succinctement la structure d'une page SHGR. La SHGR Une telle page se situe dans la page $E1 (225) entre $2000 et SOFFF. de $9E00 4 $9FFF 16 palettes de 16 couleurs chacune composée de 2 octets ou 32 bits : 4 bits pour le vert 4 bits pour le bleu 4 bits 20 4 bits pour le rouge On obtient un jaune vif avec : FOOF c'est-a-dire seize 16mes de vert, zéro 16éme de bleu et seize 16émes de rouge. de $9D00 a $9DC7 200 octets (1 par ligne a I'écran) dont les 4 bits de poids faible donnent le numéro de la palette qui sera utilisée par la ligne concemée. Le bit 7 sera a 0 si la ligne comprend 320 point, c'est le cas dans notre exemple. Le bit 6 a 1 provoquerait une interruption en fin de ligne pour changer une couleur de la palette avant affichage de la ligne suivante par exemple. de $2000 4 $9CFF 32000 octets pour les 64000 points a l'écran (200 lignes de 320 pixels). Chaque point est représenté par un demi octet qui indique, de 0 a 15 le numéro de sa couleur dans la palette réservée pour la ligne considéré Pom's n° 31 Source PIC.POC.S Assembleur ProCODE 54 JsR FRNUM a + 2éme paramétre sur deux octets 2 die _ 55 JSR GETADR —; c'est l'adresse 3. duppen-4pone=LONGS“SURCAPPLE|2I6S 56 1x $50 7 on prépare l'adresse du Peek a de = 37 STX ADRESSE; ow du Poke ri 58 STX ADRESSE 5 sk pre.poc 59 STA ADRESSE+1 3 60 ‘STA ADRESSE1+1 7 ANPERV = $385 pavecteurse 61 BIT DP_PEEK ; est-ce Peek ? 8 FRNUM = $DD67 4 calcule une formule ee BAT, (Sc REER: 9 CHKCOM = $DEBE ¢ virgule ? ee a0 cerape: “mw SE78E PTAC» ectier 64 JSR GETBYTC —; 3éme paramétre : octet 4 poker 11 GETBYTC SE6FS 4 formule sur un octet a5. Sue, ROMA 12) PTRGET $DFE3 y recherche d'une variable 66 13° MIsmatcH ‘$0076 ; message type mismatch 67 Me LPOKE 7 on poke 14 VARNAM $81 ; nom de la variable Gs 15 VARPNT $43 { pointeur sur sa valeur 69 5 PEEK JSR cHKcoM —; virgule ? Pe 70 JSR PTRGET |; cherche pointeur sur variable a7 eS 5506 1 STA VARPNT — ; le sauve t8 72 STY VARPNT+1 oy) IDK AMBBAVe? - veceur Aji Install’ 2 73 LDA VARNAM la varfable doit étre entlére 20 Gis. pebEsth ” AND VARNAM#1 7 C8, CAB ou DE(4) par exemple 21 BNE INIT ce ANT: Jt 2 Goa MEAS: 76 JMP MISMATCH ; sinon Type mismatch error 23 CMP = #>DEBUT ay 24 BEQ INITOK 78 jt JSR LPEEK + 0n va chercher I "octet 25 INIT LDA AMPERV+1 ; non, on sauvegarde 1'éventuel 73 wy + et on le stocke 4 J'adresse 26 BPA GAUCVEC ancien vecteut #0 STA (VARPNT),Y ; de 1a vartable cholsie 27 LDA AMPERV+2 1 DEY 26 STA ANCVEC+1 82 TYA 29 LDA #$4c + et on Installe le nouveau 83 STA (VARPNT), ¥ 30 ‘STA AMPERV a4 RTS 31 LDA #<DEBUT 85 . 32 STA AMPERV+1 86 AUTRE SMP (ANCVEC) ; saute a I'ancien vecteur 33 LDA #>DEBUT a7 34 STA AMPERV+2 88 LPOKE FB $18 2 cle 35 INITOK RTS a9 Des SFB 4 XCE passage en 16 bits 36 90 Dra $A9 5 LDA #donnée 27 peau cap #gB9 + est-ce POKE 91 APOKER DFB O 3e BEQ POKE 92 Dra sar + STA $000000 39 CMP #SE2 ; est-ce PEEK 93 ADRESSE DFB 0,0 to BNE AUTRE 94 N_PAGE DFB 0 : a 95 FIN DPA $38 3 SEC Retour au 6502 42 PEEK © LOX SPF + elest PEEK 96 DPB SFB 7 XCE a STX DP_PEEK ; on positionne un drapeau 97 DrB $60 RTS “4 BMI POKE1 98 45 99 LPEEK DPB $18 7 cue 46 POKE = «LD 40 7 clest POKE 100 Dre $FB 7 XCE 7 STX DP_PEEK 101 DEB SAP + LDA $000000 48 POKE] JSR GETAYTC ; ler paramatre = 1 octet 102 ADRESSE] DFB 0,0 49 STX NPAGE ; c'est le n® de page de 64Ko 103 NAGE! DPB 0 50 STX N_PAGEI 104 DEB $80,$F5 —; BRA FIN 51 105 52 JSR CHKCOM —; virgule ? 106 ANCVEC DA $rFS8 + RTS par défaut 53 107 DP PEEK DS 1 Iigs Programme LIT.MESS.GS Efface l'ensemble SHGR, routine SHLAM 17 FOR I=1 TO LEN (A$): POKE 511 + I, A 2 PRINT CHR$ (4)"-PIC.POC SC ( MID$ (A$,I,1)) + 128: NEXT : POKE O FOR I 35374 TO 37261: & PEEK 255,1,G 72,0: CALL - 144 $:G$ = G& - 128 * (G& > 127): ON NOTG 20 REM Construction des palettes % GOSUB 100: IF G& > 31 THEN PRINT CH 30 FOR TI O TO 30: & POKE 225,40448 + I, RS (G8); 240:1 = I + 1: & POKE 225,40448 + I, 20 NEXT / 2: NEXT 30 END 40 FOR I = 0 TO 30: & POKE 225,40448 + I 100 PRINT : RETURN ProDOS + 32,(30 - I) * = I+ 1:-& POKE 22 5,40448 + I + 32,15: NEXT 50 FOR I = 0 TO 30: & POKE 225,40448 + I Programme GSCOLOR "eee Cae 1: & POKE 225,40448 Temps d'exécution : 9 mn... 60 FOR I = 0 TO 30: & POKE 225,40448 + I 1 PRINT CHR$ (4)"-PIC.POC + 96,15:I = I + 1: & POKE 225,40448 + 10 U = PEEK (49204): POKE 49204,0: REM 96, (31 - I) / 2: NEXT Sauvegarde de la couleur des 70 FOR I = 0 TO 30: & POKE 225,40448 + I bords, puis mise au noir + 128,15 +I * 8:I =I + 1: & POKE 225 15 POKE 49193,161 740448 + I + 128,0; NEXT 16 AS = "E1/9 N 0<2000.9FFFZ N 5<9D60.9DC7Z 72 FOR I = 0 TO 30: & POKE 225,40448 + I N 0<9ECO.9EDFZ N 0/9 N D823G" : REM + 160,240 + (30-1) f 2: =I+1:6 Pom's n° 31 225,40448 + I + 128,0: NEXT 40448 + I 73 = 0 70 30: & POKE 225,40448 + I, 78 FOR I = 0 & POKE 225,40448 + & POKE 225,40448 + I + 192,240:1 + 160,246 I) / 2: & POKE 225,4 = I+ 1: & POKE 225,40448 + I,I / 2: & 18 + 192,240 + (30 - I) / 2 POKE 225,40448 + I + 192,I / 2: Me POKE 225,40448 + I 74 FOR I = 0 TO 30: & POKE 225,404 I 225,40448 + I + 126 + + 32, (30 - I) * 8: & POKE 225,40448 + I + 32 + 192,(30- 1) * 8:2 =T +1: 6 1 Installation des pointeurs POKE 225,40448 + I + 32, & POKE 22 1 = 40192 TO 40192 + 176 STEP 16: 5,40448 + I + 32 + 192,1 0 70 15: & POKE 225,1 + J, (i - 75 FOR I = 0 TO 30: & POKE 225,40448 + I 40192) / 16: NEXT : NEXT + 64,1 / 2: & POKE 225,40448 + REM Remplissage de la page + 192,I / 2:1 = 1 + 1: & POKE A = 8192 TO £192 + 5 * 2560 ST 8+ 1 + 64,15: & POKE 225,4044 560 64 + 192,15: NEXT 220 FOR B= 0 TO 15 76 FOR I = 0 T0 30: & POKE 225,40448 + I 230 FOR C = 0 TO 159 + 96,15: & POKE 225,40448 + I + 96 + 1 240 AD =A +B * 160 + C: & POKE 225,AD,B 92,15:I = I + 1: & POKE 225,40 7 +B* 16 + 96, (31 - I) / 2: & POKE 225,40448 + 245 & POKE 225,AD + 15360,B + B * 16 I + 96 + 192, (31 - I) / EXT 250 NEXT : NEXT : NEX’ 77 FOR I = 0 TO 30: & POKE 40448 + I 999 PRINT CHR$ (7): GET R$: POKE 49193,65 + 128,15 + I * 8: & 40448 + I 1000 POKE 49204,U: REM Restaure la + 128 + 192,15 + I +1: & couleur des bords OKE 225,40448 + I + POKE 225, Récapitulation 03 C9 03 FO 1B AD F6 8D 9D 8D Al 03 AD F? 03 @D 20 FS E PIC. POC 03 A9 4C 8D F5 03 AS 03 20 m 8D F6 03 A9 03 8D F7 83 84 60 C9 BO FO OB C9 E2 03 4C 76 DD 20 Apres avoir saisi cette récapitulation 59 A2 FF 8E A3 03 30 01 91 83 88 98 sous moniteur, vous la sauvegarderez A2 00 8E AZ 03 20 FS 291 83 60 6C Al 03 18 FB Par: BSAVE PIC. POC, A$300, LSA4 8E 95 03 8E 9E 03 20 0390:A9 00 8F 00 00 00 38 FB DE 20 67 DD 20 52 E? 0398:60 18 FB AF 00 00 00 80 0300:AD F6 03 C9 2A DO 07 aD 50 8B 93 03 BE 9C 03 03A0:F5 58 FF 00 Le Basic et l'heure En Basic sous ProDOS, il existe un moyen simple d'obtenir l'heure dans le but de mesurer un temps d'exécution par exemple. Nul besoin d'appeler une commande externe ou d'écrire la mini-routine qui appellerait GET_TIME et remettrait a l'heure les octets $BF90 a $BF93. Il suffit d'utiliser la routine de fermeture des fichiers du Basic. Interpreter 1.1 qui se chargera du travail : ProDOS Un conseil ? faire CLOSE ; l'octet 49043 donne alors l'heure, et le 49042 les minutes. Par exemple, le programme : 10 HOME 20 PRINT CHR$ (4) "CLOSE 30 VTAB 10: PRINT PEEK(4 9043)" heures "PEEK ( 4904 2)" minutes 40 GOTO 20 affiche l'heure en permanence. Bien sir, il faut une carte horloge dans l'appareil ; celle intégrée au las ne sera activée qu'avec ProDOS 1.2 et suivants. GC Un probleme ? Un souhait ?... ...24 heures sur 24, laissez votre message sur CalvaCom. Le code diabonné de votre revue, c'est “emp11”. Pom's n° 31 Gra Claude-Lucien CAUET Ce programme se compose de deux parties : + le programme SCHEMATEUR permet de dessiner des figures en haute résolution (rectangles, cercles, ellipses...) avec des textes incorporés (y compris un jeu de caractéres mathématiques). Par ailleurs, il est possible de remplir les surfaces avec des motifs variés, de déplacer l'image (ou une partie) dans toutes les directions : centrage, mixage, image géante de trois écrans. On peut enfin travailler simulta- nément avec deux images superposées, les mettre en réserve (jusqu'a cing en mémoire auxiliaire), inverser la couleur... Bref, un programme ambitieux. * le programme FONCTION permet de tracer le graphe de fonctions mathématiques de tous types, ou leur dérivée, en choisissant 4 loisir I'échelle et la fenétre de visualisation. Les tracés sont continus ou pointillés, et leur création peut étre accélérée. Trois écrans gra- phiques sont disponibles, dont deux superposables. Enfin, une fonction est acceptée méme dans un domaine ot elle n'est pas définie. Ces deux programmes communiquent sans probléme leurs images graphiques, qui peuvent étre imprimées directement sur ImageWriter grace a l'utilitaire GRAVURE. Configuration Un minimum de 64Ko de mémoire est nécessaire ; par ailleurs, une paire de ‘paddles’ (ou un joystick) est recomman- dée. Le programme est initialement congu pour un Apple //le ou //c mais doit pouvoir tourer sans modification sur un I[+. L'essentiel des modules sont écrits en Applesoft et donc facilement modifiables. Plusieurs fichiers en assembleur completent l'ensemble pour assurer les fonctions délicates ou qui nécessitent une grande vitesse. GRAPHISME fonctionne sous DOS 3.3 ; son adaptation a ProDOS nécessiterait de revoir les fonctions de gestion des images en mémoire (actuellement conservées dans la carte langage et l'éventuelle mémoire auxiliaire de la carte 80 colonnes étendues). Le démarrage de GRAPHISME s'effectue par un simple : RUN GRAPHISME qui améne sur un premier menu proposant l'accés aux deux principaux programmes, ainsi qu'une option de configuration : existence de paddles et nombre de lecteurs de disquettes. Utilisation En langant le programme, on se trouve placé en mode graphique et un point lumineux apparait au centre de I'écran. Strophoide RCT =-€ COSC 24T wv qT -Ecrcd =f 29/COSC 1 Pom's n° 31 La touche Q permet d'accéder au menu principal permettant la lecture/écriture d'une image graphique, le catalogue d'une disquette et de quitter SCHEMATEUR. Ctrl-Q permet d'obtenir a I'écran un rappel des fonctions disponibles. Déplacement du curseur Le curseur graphique se déplace sans tracer grace aux fléches du clavier, par saut de douze positions. En appuyant simultanément sur @ (ou le bouton adéquat du joystick), le déplacement s'effectue point par point, donc beaucoup plus lentement. A l'inverse, l'appui de G permet de se déplacer par saut de quart d'écran. La touche TAB (Ctrl-I) permet d'activer (ou de désactiver) le mode joystick. Le déplacement peut alors étre effectué beaucoup plus rapidement vers la position voulue, mais avec moins de précision. I] sera donc commode d'utiliser alternativement ces deux modes. Commandes globales DEL efface l'écran graphique. K_ définit une couleur : 0 47 si vous utilisez réellement la couleur, ou N,B,G pour noir, blanc et gris respec- tivement avec un moniteur monochrome. I _ inverse totalement la couleur de l'écran. W échange le dessin courant avec un dessin stocké en carte langage. U_ superpose le deuxiéme dessin au dessin courant. Commandes de positionnement et de tracé X = marque la position du point, comme étant le début du tracé. Par suite, le dernier point du tracé deviendra le nouveau point de départ. Z marque de maniére perma- nente le point courant comme étant le point de départ de tous les tracés suivants. Utile pour tracer des cercles concentriques ou des droites concourantes. ESPACE trace un segment de droite entre le point de départ défini et le point actuel. H_ trace un segment horizontal entre le point de départ et la verticale passant par le point courant. V_ idem mais trace un segment vertical. R_ trace un rectangle dont les points opposés sont le point de départ et le point courant. C_ trace un cercle centré sur le point de départ et dont la circonférence passe par le point mobile. D_ idem mais trace un disque plein. A trace lentement un cercle dans le sens des aiguilles d'une montre, interruptible par une touche quelconque afin d'obtenir un arc de cercle. Le tracé est définitivement arrété par RETURN. E idem mais trace lentement une ellipse centrée sur le point de départ et dont les demi-axes sont donnés par la position du point courant. Commandes de remplissage S remplit une surface de forme quelconque, définie par la position du point courant et délimitée par des limites pleines (pas de pointillé). Le remplissage peut étre interrompu par une touche quelconque. précise le remplissage : (remplissage complet), (lignes verticales), (lignes horizontales), (points réguliérement espa- cés), (quadrillage), mode de oO wWE<TQ FT (hachures penchées a droite), (idem 4 gauche), (losange). Le pas peut également étre défini, ainsi que I'épaisseur des traits. L_indique si le remplissage est limité par des points allumés ou éteints, ainsi que le mode de superposition (par la commande U). bad On peut gommer par les touches ‘G (gomme horizontale) ou Y (gomme verticale), jusqu’a la fin de ce mode par RETURN. Commandes de texte On entre en mode texte par la touche T, et un curseur apparait. Celui-ci se déplace avec les Heches ainsi qu'avec les touches On peut superposer deux caractéres en revenant en arriére aprés le premier caractére (accent circonflexe, tréma). L'appui simultané de G fournit un jeu de caractéres mathéma- tiques et grecs. DEL efface un caractére. ESC donne un curseur mort : il n'avance pas (utile pour le pivotement), Ctrl-A agrandit le caractére, Ctrl-Z le réduira (s'il a été agrandit). Enfin, Ctrl-W fait pivoter le caractére d'un quart de tour. On sort de ce mode texte par RETURN. Déplacements du dessin La touche M active le mode déplacement les fléches permettent alors de déplacer le dessin, de huit points en huit points. L'appui simultanée de la touche @ permet d'enrouler le dessin : horizontalement, il roule sur une largeur égale & deux écrans ; verticalement, sur une hauteur d'un écran et demi. Soit un total de trois écrans. La touche W reste bien sir opérationnelle pour observer la seconde partie de l'image horizontale. On ressort de 10 Pom's n° 31 ce mode par Return. Définition de fenétre F permet de définir le coin d'une fenétre dont le coin opposé a été défini par la touche X. Plusieurs options sont alors possibles : + — effacer la fenétre (touche G) ; + laremplir uniformément (R) ; + effacer l'extérieur (D) ou * — encadrer la fenétre (E). La touche M permet de déplacer la fenétre en superposition sur le dessin en cours ; la barre d'espace permet ensuite de figer le résultat. Dans ce mode, il est tgcommandé d'utiliser la touche Stockage d'images en mémoire La touche B échange le dessin courant avec un dessin stocké en mémoire. Les fonctions suivantes sont disponibles si l'on dispose d'une carte 80 colonnes étendues (128Ko) : O permet d'observer les dessins stockés (jusqu'a 5) ; Return permet de sortir de ce mode d'observation. N échange le dessin courant avec le demier dessin visualisé par O. J permet de fixer le nombre d'images stockées. Le programme FONCTION Trois types de définitions de fonction sont disponibles : - fonction cartésienne : y = f (x) - fonction polaire : R = f (T) ou T est la variable angulaire en radians, et R le rayon vecteur correspondant - fonction paramétrique : x = f (t) et y = g (t) of x et y sont fonctions d'une variable t. Il est possible d'incorporer un paramétre M dans les équations, afin de tracer une famille de courbes sans ne faisant varier que ce paramétre. Programmation des fonctions Les symboles suivants sont disponibles : +,-,*,/et* (élévation a la puissance) ; ABS, INT, SQR, LOG,EXP,SIN,COS, TAN, ATN sont semblables a leur définition en Applesoft. FNLD (logarithme décimal), FNSH,FNCH et FNTH (sinus, cosinus, tangente hyper- boliques) sont par ailleurs disponibles. N'oubliez pas d'utiliser les parenthéses selon les régles habituelles de l'algébre. Par la suite, il est seulement nécessaire de définir les bornes du graphe (en utilisant éventuellement les valeurs par défaut proposées). Options disponibles au menu P permet d'obtenir la courbe en pointillé D pour tracer la dérivée de la fonction S évite de dessiner les axes C encadre le graphe et RETURN visualise I'écran. Ensuite, les touches suivantes déclenchent I'opération : 1 trace le graphe aprés avoir effacé l'écran, 2 évite l'effacement, 3 autorise la modification des valeurs, 4 permet de changer de fonction, 5 sauve le graphe sur disque (par exemple pour le teprendre sous SCHEMA- TEUR), 6 charge un graphe du disque, 7 donne le catalogue, 8 retourne au menu. Options disponibles au graphe Pendant le cycle de création du graphe, les touches disponibles sont : Return interrompt le tracé, C_ poursuit le tracé, ESC saute dix points de calcul et permet ainsi un tracé plus rapide, TAB revient en arriére de vingt points (corrige l'effet d'ESC). Une fois le tracé terminé, on dispose de : Return revient au menu initial, W échange I'écran courant avec un deuxiéme écran mémorisé, U_ superpose ces deux écrans, B_ échange I'écran courant avec un écran en secondaire T inscrit du texte sur l'écran: pratiquement toutes les sous-options disponibles avec SCHEMATEUR sont disponibles ici. De plus Ctrl-F affiche I'équation sous la position du curseur. mémoire Le programme GRAVURE Le programme GRAVURE permet d'imprimer, sur ImageWriter, les images graphiques créées par SCHEMATEUR ou FONC- TION. Deux hauteurs d'image sont disponibles, ainsi que I'inversion des couleurs. On peut également jouer avec un jeu de déformations horizontales et le positionnement de la feuille de papier et de la téte d'écriture. Fichiers sur la disquette Pom’s Un grand nombre de modules forment l'ensemble de GRAPHISME. Seuls les sources qui n'ont jamais été publiés se trouvent sur la disquette. GRAPHISME initialisation du logiciel, gestion de la configuration Pom's n° 31 11 CONF.C module de configu- ration (manuel de la carte 80 colonnes) HEL.C module de nettoyage de la mémoire auxiliaire T.HEL source de HEL.C MENU programme général de menu (ne doit pas étre verrouillé car il peut s'auto-modifier) SCHEMATEUR le programme SHEM.C module assembleur d'édition des graphiques T.SHEM source de SHEM.C CARAC.SH table des jeux de CHARGE.OBJ module de chargement rapide (Pom's 4 modifié par Pom's 19) FONCTION FONC.C module assembleur de tracé de courbes T.FONC source de FONC.C (adapté de G.Mauffrey dans Pom's 11) ERREUR module classique de gestion d'erreur en Applesoft GRAVURE GRAV.C module d'impression T.GRAV source de GRAV.C (adapté de l'ImageWriter EXEMPLE.PIC image graphique exemple illustrant le jeu alterné de caractéres Conclusion GRAPHISME se veut étre un logiciel complet, 4 vocation quasi-professionnelle ; il devrait rendre de grands services 4 tous ceux qui manipulent fréquemment A la fois des graphiques et des fonctions mathématiques, et ont toujours regretté de ne pouvoir caractéres ToolKit) Jes manipuler simultanément. Programme DOS 3. 3 FONCTION : % del issance 10 oer wre = x: as + 2: naw 1600 | f+ Renartit ion MondiSie eh“ 1s88" =X * 2): REM REM taresvaneresesaee DEF FN G(T) = T: REM : REM ): REM T : REM * 2): REM * T: REM 2: REM *** 2 30 FOR I = 1 TO 3: READ IN$(I): NEXT 40 DS = CHRS (4) 50 IP PEEK (103) + 256 * 60 POKE 103,1: POKE 104,96: 70 PRINT D$"RUN FONCTION" 80 IF PEEK (236) GOTO 140 90 AL = 6000: POKE 233, INT (AL / 256): 256 * ( INT (AL / 256)) 100 PRINT D$"BLOAD FONC.C" 110 PRINT D$"BLOAD CARAC. SH, A"AL 120 PRINT D$"BLOAD ERREUR, A931" 130 POKE 236,1 PEEK (104) = POKE 24576, 140 Al = 776:A2 = 769:A3 = 921:A4 = 853:A5 = 878 AB HT: PRINT V: RETURN 150 SC = 1: SCALE= SC:RO = 0: ROT= RO: HCOLOR= 3 480 V = VAL (V$): RETURN 160 VP = 7:VN = 10:VF = 12:VM = 17:VO = 18:NP = 280:X1 = ~14:x 490 REM ** TABLEAU DONNEES ** 2=14:Yl = - 9.6:¥2 = 9.6:7D = ~ 10:TF = 10 500 VTAB VP + 1: IF REP = 2 THEN PRINT “ANGLE ->": GOTO 520 170 S = O:AX = 1:IM = 0:CO = 0:MM = 0:M = 1:WW = O:NL = 1 510 PRINT "PARAMETRE =>" 180 PL = 0: If PEEK (214) THEN PL = 1 520 VTAB VP + 1: HTAB 14: PRINT "T minima: "TD: HTAB 14: PRINT * 190 ONERR GOTO 2470 T maxima: "TF 200 GOSUB 2000: GOTO 1010 530 VTAB VN: PRINT "NOMBRE DE POINTS: "NP 210 REM ** CALCUL DES COORDONNEES** 540 VTAB VF: PRINT *ENETRE: 220 T4 = T: GOTO 250 VTAB VM: CALL ~ 958: FOR K = 1 TO 40: HTAB K: PRINT "="; 230 W = W+1: IF W> 2" WW +1 THEN W = O:WW = 1 - WW EXT 240 IF WW = 0 THEN T = T + INC: POP : GOTO 1610 550 VTAB VF + 1: PRINT "X minima: "X1;: HTAB 20: PRINT "Y minima 250 IF PEEK (49152) > 127 THEN SS = PEEK (49152) - 128: POKE EMYL: PRINT "X maxima: "K2;: HTAB 20: PRINT "Y maxima: "Y2 49168, 0: GOTO 400 560 RETURN 260 ON REP GOTO 270, 320, 360 570 REM ** ENTREE DONNEES ** 270 X= x1 + (T+ 1) / EX 280 Y = EN F(X) 290 IF NOT DE Goro 310 300 X = X + (x2 - XI) / 10000:YA = 7 (k2 ~ x1) HOT = Tio = (¥~ Yt) * EY = 1: 320 2 = EN F(T) RETURN 330 IF DE THEN T= T+ (12 ~ Tl) / 10000:ZA = ~ 2) * 10000 / (12 - T1) 340 X = 2 * COS (T):1 = EX * (X ~ XI): POP : GOTO 1630 350 Y= 2% SIN (T):J = BY * (Y ~ Y1); RETURN 360 X= FN F(T):¥ = FN G(T) 370 IF DE THEN T = T + (T2 ~ 71) / 10000:xA = G(T):¥ = (YA ~ ¥) / (XA ~ X) 360 I = EX * (X ~ XI); IF I < 0 OR I > 280 THEN POP : 390 J = EY * (¥ - Y1) ~ 1: RETURN 400 IF SS = 13 THEN TS = T ~ INC: POP :: 410 IF SS = 27 THEN T= T +10 * INC: GOTO 430 420 IF SS = 9 THEN T 430 IF T > 72 THEN T = 12 440 IFT < Tl THEN T = TI 450 POP : GOTO 1610 - 20 * INC FN P(X):¥ = (YA = ¥) * 10000 //e //e+ //c IIgs EUROPE EST AUTRES 24577 GOTO 80 ° POKE 232, AL = CEE dont REA 2%. RANCE 55% 24,5) ROVAUNECUNT 4 ‘34 16: usa JAPON (Valeur des productions minié@res et manuPac~ turiéres additionnées> 460 REM ** SAISIE DES DONNEES ** 470 VTAB VT: HTAB HT: INPUT "";V$: 1: GOSUB 470:7D = = 23:V = TF: GOSUB 470:TF = V:Tl = 1D:T2 = TF 600 INC = (T2 610 POKE 33,1 = VE + 22H! PN P(T):2 = (2A < IF I <0 ORI > 280 THEN FN F(T) :YA = EN 3: CALL 18:V = NP: GOSUB 470:NP = V: Goro 610 11) / we vr VE + 2:HT = 10:V = x1: POKE 33,40 IK = UX / 10: GOTO 640 GosuB 470:¥1 = HTAB 1: CALL INT (10 * YM + 0.5) coro 1630 ror< Goro 1700 660 VE = VE + 2:HT = 29:V = Y2: GOSUB 470:Y2 = V:CY = Y2 ~ YI: = 0 GoTo 650 670 EY = 191 / Cy:UY =1 680 IF CY > 40 THEN CY = CY / 10:UY = UY * 10: GOTO 680 690 IF CY < 4 THEN CY = CY * 10:UY = UY / 10: GOTO 690 700 HTAB 1: VTAB VE + 3: CALL "0X: PRINT "Unité en ordonnée:";UY 710 RETURN IF V$ = "" THEN VTAB VT: HT IVD = VB + 2:HT IF REP = 1 THEN IN GosuB 470:x1 = V:vT 10:V = X2: GOSUB 470:X2 = V:CX = X2 ~ X1: = 0 coro 610 620 EX = 279 / CK:UX = 1: 630 IF CX > 40 THEN CX = CX / 10:UX = UX * 10: GOTO 630 640 IF CX < 4 THEN CX = CX * 1 650 VT = VF + 2:HT = 29:V = YI: x1) * 192 / 280: VTAB VE + 4: - 868: PRINT IF Cx LYM = YL + (X2 = = 868: VTAB VE + pour la meme échelle:Y maxima=";0.1 * ~ 868: PRINT "Unité en abscisse: 12 Pom's n° 31 720 REM ** TABLEAU OPTIONS ** 730 VIAB VM: CALL ~ 958: FORK = 1 TO 4 To"2";: NEXT 749 VIAB VO: PRINT "I~ EFFACER ET TRACER". ACER SANS EFPACER 750 VIAB 21: HTAB 1: TAB K: PRIN PRINT "2 TR PRINT "3- MODIFIER LES VALEURS" PRINT "4~ CHANGER DE FONCTION": PR IND "5~ ENREGISTRER 6- CHARGER": PRINT "7~ IMPRI MER 8- CATALOGUE": PRINT "9- QUITTER LE PROGR AME"; 760 RETURN Ty 770 REM ** PARAMETRE ** 780 VIAB VP: PRINT "SI VOUS VOULEZ UTILISER UN PARAMETR © M TAPEZ M (SINON UNE AUTRE TOUCHE): ";: GET PRS: IF PRS < > "M" AND PRS < > "nm" THEN MM = 0: GOTO 795 790 m4 = 795 VTAB VP: HTAB 1: CALL ~ 958: RETURN 800 GOSUB 855: VTAB VP: HTAB 1: PRINT "I~ FAMILLE DE CO URBES": PRINT "2— PARAMETRE A LA DEMANDE": PRINT "CHO IX:2: GET PR$:PR = VAL (PR$) ~ 1: IF PR < 0 OR PR > 1 Goro 800 610 IF PR = 0 GoTo 830 620 VIAB VP: HTAB 1: CALL - 958: INPUT "PREMIERE VALEU RODE 'M':";M: GOTO 850 930 GOSUB 855: VTAB VP: HTAB I: PRINT "M minima:"M1: VT Développement limité ae la Fonction: 5s 7 _ xt 5 xe xt xe x sine 37 #87 > aT Sy 7 Sr Wie AB VP: HTAB 16: PRINT "M maxima: "M2: VTAB VP: HTAB 31 : PRINT "Pas: "PM 840 POKE 33,15:VT = VP:HT = 10:V = Mi: GOSUB 470:M1 = POKE 3 3,30:VT = VP:HT = 25:V = M2: GOSUB 470:M2 = V: POKE 33,40:VP ve:HT = 35:V = PM: GOSUB 470:PM = V 850 RETURN 855 FOR II = vP TO VP + 3: VTAB II: HTAB 1: CALL - 868: NEXT RETURN 860 REM ** MESSAGE DEFILANT ** 870 SPEED= 245:AX = 1:CA = 0:P0 = 0:DE = 0:DF = 1:T$ = A$ (DF): $ FOR J = 1 70 20:N$ = NS +" ": NEXT seo'us ns + 18 ene 990 INVERSE : FOR K = 1 TO LEN (MS): VTAB VM: HTAB 5: PRINT M IDS. (48, K, 30) 900 TC = PEEK (49152): IF TC > 127 THEN POKE 49168,0: SPEED= 2 55: NORMAL : GOTO 930 910 NEXT :DF = 1 + DP: IF DF = DM + 1 THEN DF = 1 920 T$ = AS(DF): GOTO 880 930 IF TC = 196 THEN DE = 1: GoTo 890 940 IF TC = 208 THEN PO = 1: GOTO 890 950 IF TC = 211 THEN AX = 0: GoTo 890 955 IF TC = 195 THEN CA = 1 POKE 49232, 0: POKE 49234,0: POKE 49236, 0: : Goro 1760 970 IF TC > 176 AND TC < 186 THEN R = TC - 176: GoTO 990 980 GOTO 690 990 FOR K = 1 TO 40: VTAB VM: HTAB K: PRINT "=": 1000 REM ** DEBUT ** MENU *# 1010 HOME : VTAB 2: HTAB 4: PRINT "GRAPHES DE FONCTIONS": VTAB 3: HTAB 4: FORT = 1 70 18: PRINT "";: NEXT : PRINT "_" 1020 FOR I = 1 TO 3: GOSUB 1100: NEXT 1030 I = 1; INVERSE : GOSUB 1100: NORMAL, 1040 VTAB 20: PRINT “FLECHES -> CHOISIR 1050 VIAB 21: GET CARS:CH = ASC (CARS) NEXT : RETURN RETURN -> VALIDER" 1060 IF CH = 10 OR CH = 8 THEN GOSUB 1100:I = I + 1: INVERSE : GOSUB 1100: NORMAL 1070 IF CH = 11 OR CH = 21 THEN COSUB 1100:I = I ~ 1: INVERSE GOSUB 1100: NORMAL 1080 IF CH = 13 THEN HOME : 1090 GoTo 1050 1100 IF = 4 TENT =1 1110 IF I= 0 THEN I = 3 1120 VTAB I + 6: HTAB 4: PRINT INS(I): 1130 REP = I: ON I GOTO 1150, 1180, 1210 1140 REM ** ENTREE DES FONCTIONS ** 1150 HOME : HTAB 9: INVERSE : PRINT " FONCTION CARTESIENNE": NO RMAL : VTAB 3: PRINT "Y(x)=": GOSUB 780 1160 HTAB 1: VTAB 3: PRINT "Y(X)=";: CALL Al: Goro 1130 RETURN IP MM THEN GosuB 1170 GOSUB 530: GOSUB 590: GoTo 1240 1180 HOME : HTAB 12: INVERSE : PRINT " FONCTION POLAIRE ": NORM AL : PRINT "(La variable T est l'angle en radians)": VTAB 3: PRINT "R(T)=": GOSUB 780 1190 HTAB 1: VTAB 3: PRINT "R(T) 800 1200 GoTo 1230 1210 INVERSE : HOME : HTAB 9: PRINT " FONCTION PARAMETRIQUE " NORMAL : PRINT "(La variable T est le paramétre courant)": VP AB 3: PRINT "X(T)="; VTAB 5: PRINT "Y(T)=": GOSUB 780: HTAB 1 2 VIAB 3: PRINT "X(T)=";: CALL Al 1220 VIAB 5: PRINT "Y(T)=";: CALL A2: 1230 GOSUB $00: GosuB 580 1240 GOsUB 730 1250 GOSUB 870: ON R GOTO 1350, 1260, 1265, 1300, 1890, 1890, 1290,19 50,1320 1260 POKE 49232,0: POKE 49234,0: POKE 49236, 0: POKE 49239,0: GO TO 1360 1265 IF MM = 0 GoTo 1270 1266 GOSUB 800: IF REP = 1 GOTO 1170 1267 GoTo 1230 7 CALL Al: IF MM THEN GOSUB IF M4 THEN GOSUB 600 1270 IF REP = 1 THEN GOSUB 590: GOTO 1240 1280 GoSsUB 580: GOTO 1240 1290 PRINT D$"RUN GRAVURE, D1" 1300 HOME : GOTO 1010 1310 REM ** PIN ** 1320 HOME : PRINT 1330 PRINT D$"RUN MENU, DI" 1340 REM ** DEBUT DU GRAPHE ** 1350 HGR : HCOLOR= 3: POKE 49234,0 1360 IF AX = 0 GOTO 1565 1370 REM **TRACE DES AXES** 1390 10 = INT ( ~ X1 * EX) 1400 JO= INT ( ~ Yl * EY) 1410 IF JO < 0 OR JO > 191 THEN 1490 1420 HPLOT 0,191 ~ JO TO 279,191 - Jo 1430 IF JO < 2 THEN C = J0:D = 2: GOTO 1460 1440 IF JO > 189 THEN C = 2:D = 191 - JO: Goro 1460 1450 1460 2 INT (X1 / UX) TO INT (X2 / UX): Ux <0 OR 10 +I * EX * UX > 279 THEN 1460 1470 HPLOT 10 + I * EX * UX,191 + C - JO TO 10 +1 * EX * UX,19 1-D~-J0 1480 NEXT 1490 IF 10 < 0 OR 10 > 279 THEN 1570 1500 HPLOT 10,0 TO 10,191 1510 IF 10 < 2 THEN A = 10:B Goro 1540 1520 IF I0 > 277 THEN A = 2:B = 279 ~ 10: GoTo 1540 1530 A = 2:8 = 2 1540 FOR J = INT (Yl / UY) TO INT (Y2 / UY): uy > 191 OR Jo +o * EY * UY < 0 THEN 1560 1550 HPLOT 10 - A,191 - JO~ J * EY * UY TO 10+ B,191 - JO- 9 * BY * oY 1560 NEXT 1565 IF CA 0,0 1570 REM **TRACE DE LA FONCTION** 1580 IF MM = 1 AND PR = 0 THEN M = MI 1590 IF REP = 1 THEN TI = 1:72 = 279 1600 T = TI 1610 GosuB 220 1620 IF J> = 0 AND J< = 191 THEN HPLOT 1,191 - 0 1630 XDRAW 98 AT 10,10: XDRAW 98 AT 10,10 1640 T= 7 + INC: IF T < 72 GOTO 1610 1650 GoTo 1700 1660 GosUB 220 | 1670 IE J < 0 OR J > 191 Goro 1640 1675 IF PO THEN HPLOT 1,191 ~ J: GOTO 1690 1680 MPLOT TO 1,191 - J 1690 T= T + INC: IF T < T2 GOTO 1660 1700 IF M4 = 0 GoTo 1750 1710 IF Nor PR Goro 1740 1720 POKE 49235,0: VTAB 21: HTAB 1: CALL ~ 958: VTAB 22: INPUT "NOUVEAU PARAMETRE (SINON RETURN): ";PR$: IF PRS = "" THEN GO SUB 750: POKE 49234,0: GOTO 1750 1730 M = VAL (PR$): GOSUB 750: POKE 49234,0:T1 = TD: GOTO 1590 1740 IF T > = 12 THEN Tl = TD:M = M+ PM: IF M = < M2 GoTo 15 90 1750 PRINT CHRS (7); 1760 IF PEEK (49152) < 128 GOTO 1760 1770 RR = PEEK (49152) ~ 128: POKE 49168, 0 Goro 1760 1780 IF RR = 85 THEN CALL A4: GOTO 1760 1790 IF RR = 66 THEN CALL AS: GOTO 1760 1800 IF RR = 84 THEN GOSUB 2190: GOTO 1760 1810 IF RR = 13 THEN POKE 49233,0: GOTO 1250 1620 IF RR = 67 THEN T = TS: GOTO 1610 1830 GoTo 1760 IE IO+#1*Ex* IF JO+ 0 * BY * 1 THEN HPLOT 0,0 TO 279,0 TO 279,191 TO 0,191 TO IF RR = 87 THEN CA Pom's n° 31 13 1840 REM ** ENREGISTRER-CHARGER ** 1850 IF NOT PL THEN RETURN 1860 VTAB VO: HTAB 1: CALL ~- 958: PRIN T : PRINT "LECTEUR N°:";: INVERSE : P RINT NL;: NORMAL : CALL - 1008: GET CARS: IF CARS = CHRS (13) THEN RETO RN 1870 IF CAR$ < > "I" AND CARS < > "2" Goro 1850 1880 NL = VAL (CARS): INVERSE : PRINT N L: NORMAL : RETURN 1890 GOSUB 1850 1900 HTAB 1: VTAB VO + 3: INPUT "NOM DE LUIMAGE: "J IM$: IF IM$ = "" GOTO 1940 1910 PG = ASC ( LEFT$ (IM$,1)): IF PG < 65 OR PG > 90 GOTO 1900 1920 IF R= 5 THEN PRINT D$"BSAVE"IMS" 1A$2000, L$2000,D";NL: GOTO 1940 1930 PRINT D$"BLOAD"IM$", AS2000, D*NL 1940 GOTO 1240 1950 POKE 34, VP ~ PRINT 1960 PRINT DS$"CATALOG, D*NL. RINT "FIN": NORMAL 1970 GET CARS: HOME : POKE 34,0: IF REP = 1 THEN GOSUB 530: GOTO 1240 1980 GosuB 500: GOTO 1240 1990 REM **FONCTIONS SPECIALES** HOME : GOSUB 1850: INVERSE : PB 2000 DEF FN SH(x) = ( EXP (X) ~ EXP ( x) 72 2010 DEF FN CH(X) = ( EXP (xX) + EXP ( =x) 72 2020 DEF FN TH(X) = - EXP (~ x) / EXP (X) + EXP (=X) * 241 2030 DEF FN LD(X) = LOG (x) / LOG (1 o 2040 DM = 3: REM **NB DE MESSAGES ** 2050 AS (1) = "TAPEZ VOTRE OPTION DE 1 A 9...'B" POUR COURBE EN POINTILLE...'D ' POUR DERIVEE...'S' SANS AXES...'Ct CADRE... 'RETURN' VOIR L'ECRAN" 2060 AS(2) = "UNE SONNETTE ANNONCERA LA FIN DU GRAPHE...ON PEUT L'INTERROMPRE PAR 'RETURN' ET LE CONTINUER PAR 'C' +. "ESC" SAUTE 10 POINTS... *TAB' REVI ENT DE 20 POINTS” 2070 A$(3) = "QUAND LE GRAPHE EST INTERR oMPU ' T ' MODE TEXTE...‘ W ' PASSE DI'UN ECRAN A UN AUTRE... 'U' PUSIONNE LES DEUX ECRANS...'B' BANQUE ...'RETU RN' RAMENE A CETTE PAGE" 2080 PI = 3.1416:E = EXP (1) 2090 RETURN 2100 REM ** TEXTE ** 2110 VX wes 2120 IF PEBK (49250) > 127 THEN VX = 1 iweed 2130 IF PEEK (49249) > 127 THEN Vx = 7 o:vy = 48 2140 IF R= 21 THEN Xt =X + VX: IF Xt > 279 THEN Xt = 279 2150 IF R= 8 THEN X® < 0 THEN Xt = 0 2160 IF R= 10 THEN Yt = Ye + VY: IF Yt > 191 THEN Yt = 191 2170 IF R = 11 THEN Yt <0 THEN Y# = 0 2180 RETURN 2190 PT = 1:CT = 98:KK = 0:CR = CT:S = S:Yt = 5: XDRAW CT AT X#,Ye PEEK (49152) - 128: IFC < 0G oro 2200 2210 POKE 49168,0:S = C - 29: IF C = 27 THEN TT = 1 - TT: XDRAW CT AT Xt, Yt: cr = 34% (Tr = 1) + CR* (IT = 0): X DRAW CT AT X$, Yb: GOTO 2200 2230 IF C < > 32 OR TT = 0 GoTO 2250 2240 KK = 1: GOTO 2200 2250 IF C < 32 OR C = 127 GoTO 2330 2260 IF PEEK (49249) > 127 AND C > 47 AND C < 91 THEN S = S + 80 2270 XDRAW CT AT X*, Yt: DRAW S AT Xt, Y# 2280 IF TT = 0 THEN CT = CR:KK = 0: GOT 0 2310 2290 CT = 5 2300 GOTO 2200 2310 Kb = X84 7 2320 XDRAW CT AT Xt,Y4: GOTO 2200 2330 IF KK = 1 THEN KK = 0: DRAW CT AT X4,¥#: GOTO 2350 2340 XDRAW CT AT Xt, Y8 2350 IF C= 13 THEN RO = 0: ROT= RO:CT CR:TT = 0:KK = 0: RETURN 2360 IF C = 23 THEN RO = (RO = 56) * 0 Xe UK: IF Xe - vy: IF ye + (RO < 56) * (RO + 8): ROT= RO 2370 IF C = 127 THEN DRAW CT AT Xt, Y8: XDRAW CT AT Xt, Yt 2380 IFC < > 6 GOTO 2450 2390 LD = 1260: GoSUB 2410: IF REP = 3 T HEN LD = 1536:X¢ = Xt - 7 * FF:Y8 = ¥ $+ 8: GosuB 2410 2400 GoTo 2450 2410 FF = 0 2420 S = PEEK (LD + FF) ~ 157: IF S = THEN RETURN 2430 XDRAW S AT X¢,Y8:X8 = X8 + 7:EF = FF +1: IF X¥> 277 THEN RETURN 2440 GoTo 2420 2450 R = C: GOSUB 2110: GOTO 2320 2460 REM ** TRAITEMENT D'ERREUR ** 2470 CALL 931 2480 POP 2490 XDRAW 34 AT 10,10 2500 ER = PEEK (222) 2510 IF ER < > 53 AND ER < 2540 2520 XDRAW 34 AT 10,10 2530 T = T4: GOTO 1640 2540 IF ER = 6 THEN PRINT : PRINT "PAS DI'IMAGE DE CE NOM (RETURN) ": GET CAR $ 2550 IF BR = 16 THEN POKE 49233,0: VTA BVM +1: CALL - 958: PRINT "ERREUR DE SYNTAXE": PRINT "VERIFIER L'ECRITU RE DE LA FONCTION": PRINT "RETURN"; GET CARS 2560 GOTO 1240 2570 DATA FONCTION CARTESIENNE, FONCTIO N POLAIRE, FONCTION PARAMETRIQUE > 133 Goro Programme SCHEMATEUR 5 HIMEM: 36863 10 REM ** SCHEMATEUR ** 20 REM ** M.CAUET ~ NOV 86 ** 30 IF PEEK (103) + 256 * PEEK (104) 24577 GoTo 2240 40 REM ** IMPLANTATION DU PROGRAMME AU -DESSUS DE HGR2 ** 50 POKE 103,1: POKE 104,96. 0 60 PRINT CHR$ (4) "RUN SCHEMATEUR" 70 REM ** COORDONNEES DU POINT ** 80 IF ME AND R= 9 THEN MN = 1 - MN 90 IF MN = 0 GoTo 110 100 X8= PDL (0) / 255 * 279:Y8 = PDL (QQ) / 255 * 191: RETURN 110 VK = 12:v¥ = 12 120 IF PEEK (49250) > 127 THEN VX = 1: wel 130 IF PBEK (49249) > 127 THEN Vx = 70 ivy = 48 140 IF R = 21 THEN X= X8 + VX IF Xt > 279 THEN X¥ = 279 150 IF R= 8 THEN Xb 0 THEN xt = 0 160 IF R= 10 THEN Y# = Ye + vY: IF Yé > 191 THEN Yt = 191 170 IF R= 11 THEN Ys < 0 THEN Yt = 0 POKE 24576, Xb VK IF XA < ye — vy: IF yt 180 RETURN 190 REM ** ANALYSE DE LA COMMANDE ** 200 IF DP AND NOT DH THEN X18 = xezY1t ye 210 DH = 0 220 IF PEEK (49152) > 127 THEN R = PE EK (49152) ~ 128: POKE 49168,0: IF MN OR NOT MN AND (R > 31 OR R= 13 OR R = 17) Goro 250 230 GOSUB 80: IF NOT PT THEN XDRAW CU AT X08, YO® 240 X08 = X#:YO8 = YB: XDRAW CU AT x08, o#:Pr = = 0: Goro 220 250 FOR I = 1 10 2¢: IF R = R(I) THEN ON I GOSUB 290,310, 1030, 350, 400, 420, 4 40, 490, 440, 550,570, 690, 950, 2160, 1070, 1210, 1250, 1580, 1580, 1580, 1580, 1920,19 20,1090, 1130, 980, 810,1150, 510: GOTO 2 00 260 NEXT : IF R > 96 AND R < 123 THEN POKE 49235,0: HOME : VTAB 22: PRINT " PASSEZ EN MAJUSCULES S.V.P. ET RETURN .": GET CARS: POKE 49234,0:R = R ~ 32 Goro 250 270 GOTO 200 280 REM ** 9 4* 290 POP : RETURN 300 REM ** DEL ** 310 POKE 49235,0: HOME : VTAB 23: PRINT "PERTE DU DESSIN (O/N)?: "7: GET CARS IF CARS < > "0" AND CARS < > "o" Goro 330 320 HGR :PT = 1:B = 0:CL = 3: HCOLOR= C Lb: POKE AA + 8,B 330 POKE 49234,0: RETURN 340 REM 8 Le 350 POKE 49235,0: HOME : VTAB 21: PRINT "LIMITE ET FUSION PAR POINTS ";: IF B= 0 THEN PRINT "ALLUMES.": GOTO 37 360 PRINT "ETEINTS." 370 PRINT "TAPEZ C POUR CHANGER": GET C ARS: IP CARS = "C" THEN B = 1 - B: PO KE AA + 8,5 380 POKE 49234, 0: RETURN 390 REM ot ZF 400 GOSUB 420:DP = 0: RETURN 410 REM o** Xx #F 420 HPLOT X08, YO#:X18 = XO8:Y18 = YOU:D P= 1:Pf = 1: RETURN 430 REM #* HeV *® 440 IF R= 86 GOTO 460 450 HPLOT Xb, Y18 TO X18, YI8:X16 = oro 470 460 HPLOT X1%,Y¢ TO X18, YIS:Y18 = Yt 470 DH = 1: RETURN 480 REM ** ESPACE ** 490 HPLOT X¥,Y# TO XIb,YI8:PT = 1: RN 500 REM o** M +e 510 XDRAW CU AT Xt,Y8 520 CALL AG 530 XDRAW CU AT X$,Y8: RETURN 540 REM 77 RF 550 HPLOT X8,Y6 TO X18, Yt TO X14, YI8 TO X4, YI TO x8, Y8seT RETURN RETU 560 REM ** Fe 570 PT = 1: POKE 49235,0: HOME : VTAB 22 : PRINT * G- Gomme -R~ REM PLIT": PRINT " D- DECOUPE © ~ ENCADR Mo MOBIL VIAB 21: HTAB 1: PRINT "FENETRE: 222 GET CARS 580 POKE 49234,0: IF CARS THEN RETURN 590 SP = -CL+3+8* (CL > 3): IF CA "G" OR CARS = "D" OR CARS = "M" HCOLOR= ST CARS = "G" OR CARS = "R" THEN G cHRs (13) OR CARS = "E" THEN G CL: RETURN CARS = "M" THEN POKE 49235,0: # OME : VTAB 23: PRINT "UN INSTANT S.V. P.": CALL AP: GOSUB 640: CALL AE: GOS UB 670: HCOLOR= CL: POKE 49234, 0: CAL L AV: RETURN 630 GoTo 570 640 IF X18 > X* THEN WH = X18:XI8 = Xt: xt = WW 650 IF YIt > Y# THEN Ww = Y1e:YI8 = Ys ye = WW 660 FOR I = 0 70 X18: HPLOT I,0 TO 1,19 1: NEXT : FOR I = X18 TO x8: HPLOT I, 0 TO I,¥1%: HPLOT I,Y* TO 1,191: NEXT : FOR I = X$ TO 279: HPLOT I,0 TO I, 191: NEXT : RETURN 670 FOR I = Y# TO Y1# STEP 2 * (Y1#>¥ 4) = 2: MPLOT X4,I TO X18, I: NEXT :PT = 1: RETURN 660 REM ** KK ¥# 690 cc = 78 * (CL a * (CL C= 0 THEN CL$ 700 POKE 49235,0: HOME : VTAB 21: PRINT "COULEUR (047,0u B blanc, N noir,G gr fs): "CL$;: CALL ~ 1008: GET CLS 710 CB = (CLS = "N") +2 * (CL$ = "G") + 4% (CLS = "BM) - 1: IF CB 0) + 66 * (cL = 3) + CHRS (CC): IF C VAL (CLS) 720 IF CB= ~ 1 GoTo 740 730 CL = cB 740 HCOLOR™ CL: POKE 49234,0: RETURN 750 REM ** P ## 760 INVERSE : PRINT DI;: FOR I = 1 TO LEN ( STR$ (DI)): CALL ~ 1008: NEXT GET R1$: IF RIS = : CHRS (17) THEN C H = 17: GoTo 870 14 Pom's n° 31 770 IF RIS < "0" OR RI$ > "9" THEN DF = DI: NORMAL : YOR) ou: YeX+MNI-X2 CEllipses> X+MNXSQRC1-X*29 PRINT wm: RETURN 780 PRINT R1$;:D1 = VAL (R1$): GET R2$: IF R2$ = CHRS (1 7) ‘THEN CH = 17: GOTO 870 790 IF R2$ < "0" OR R2$ > "9" THEN PRINT " ":DF = D1: NOR MAL : RETURN 800 PRINT R2$:DF = D1 * 10 + VAL (R2$): NORMAL : RETURN 810 POKE 49235,0: HOME : VTAB 21: PRINT "MODE: CV HPQ G DL (AIDE: "Ctrl gt)": = MD 815 HTAB 1: VTAB 23: PRINT "FLECHES -> CHOISIR RETURN -> VALIDER™ 820 IF I = 8 THEN I = 0 630 IF I= ~1 THEN =7 840 VIAB 21: HTAB 7 + 2 * I: GET CARS:CH = ASC (CARS) 850 IF CH = 21 OR CH = 10 THEN I = I + 1: GOTO 20 860 IF CH = 8 OR CH = 11 THEN I = I - 1: GOTO 830 870 IF CH = 17 THEN TEXT : HOME : NORMAL : PRINT INS (24): PRINT : FOR I = 25 TO 32: PRINT IN$(I): NEXT : PRINT : PRINT INS (33): PRINT : PRINT IN$(34): GET CARS: POKE 492 32,0: GOTO 810 875 IF CH < > 13 GoTo 840 880 MD = I: POKE AA + 1,MD 890 IF I = 0 GOTO 930 900 HTAB 1: VTAB 22: CALL ~ 958: PRINT "PAS:";:DI = PA: G OSUB 760:PA = DP: IF PA < = 0 GOTO 900 910 POKE AA + 2,PA 920 PRINT “EPAISSEUR:";:DI = EP: GOSUB 760:EP = DF: POKE AA, EP -1 930 POKE 49234,0: RETURN 940 REM #* 0 ¥# 950 IF MA * NI = 0 THEN RETURN 960 CALL AO: RETURN 970 REM ** Bee 960 HOME : IF MA = 0 THEN XDRAW CU AT X8,Y#: CALL AE:PT = 1: R TURN 990 IF NI > 4 THEN POKE 49235,0: HOME : VTAB 21: PRINT "SATURA TION": GET CAR$: GOTO 1010 1000 XDRAW CU AT X4,Y#:NI = NI + 1: POKE AA + 3,NI: POKE AA +1 5,NI * 32: CALL AB:PT = 1:B = 0:CL = 3: HCOLOR= Cb: POKE AA + 8,8: HOR 1010 POKE 49234,0: RETURN 1020 REM o** N te 1030 IF MA = 0 THEN RETURN 1040 NU = PEEK (AA + 16): XDRAW CU AT X#, Yt: POKE AA + 15,NU * 32: CALL AB:PT = 1:B = 0:CL = 3: HCOLOR= CL: POKE AA + 6,B: C ALL AE 1050 POKE 49234,0: RETURN 1060 REM o** Hote 1070 XDRAW CU AT Xt, Y%: CALL AF:PT = 1: RETURN 1060 REM #8 uote 1090 POKE 49235,0: HOME : VTAB 23: PRINT "SUPERPOSITION CONFIRM EE? (O/N)";: GET CAR$: IF CARS < > "O" AND CARS < > "o" GOT 0 1110 1100 XDRAW CU AT x4, Y#: CALL AU 1110 POKE 49234,0:PT = 1: RETURN 1120 REM ott Tote 1130 CALL AI:CL =~ CL +34 8 * (CL > 3):B = 1 ~ B: HCOLOR= L: POKE AA + 8,5: RETURN 1140 REM tt 1150 IF MA = 0 THEN RETURN 1160 POKE 49235,0: HOME : VTAB 23: PRINT "NOMBRE D'IMAGES EN BA NQUE: "NI;: CALL - 1008: GET NI$: IF NIS < "0" OR NIS > "5" Goro 1190 1170 PRINT NI$:NI 1180 POKE AA + 3,NI 1190 POKE 49234,0: RETURN 1200 REM #* Se 1210 XH = INT (X® / 256):XB = Kb ~ XH * 256 1220 POKE AA + 4,XB: POKE AA + 12,XB: POKE AA + 5,XH: POKE AA + 13,XH: POKE AA + 6,Y4: POKE AA + 7,Y8: POKE AA + 9,0 1230 PT = 1: XDRAW CU AT X%, Yb: CALL AS: RETURN 1240 REM st Toe 1250 PT = 1:¢R = cr:s VAL (NIS) CT: XDRAW CU AT X*, Yb: XDRAW CT AT Xt, Yt 1260 C = PEEK (49152) - 128: IF C < 0 GoTO 1260 1270 POKE 49168,0:S = C ~ 29: IF C = 27 THEN TT = 1 ~ TT: XDRAW CT AT xt, Ye:cP = 34 * (TT = 1) + CR * (TT = 0): XDRAW CT AT X4,Yt: GOTO 1260 1280 IF C= 17 THEN TEXT : HOME : FOR I = 41 TO 51: PRINT INS( I): NEXT : GET CARS: POKE 49232,0: GOTO 1260 1284 IF MB AND C = 9 THEN MN = 1 ~ MN 1290 IFC < > 32 OR TT = 0 Goro 1310 1292 IF MN = 0 GoTO 1300 1293 DRAW CT AT X%, 8: GOSUB 100: XDRAW CT AT Xt,Yt 1294 IF PEEK (49152) > 127 GOTO 1260 1296 XX8 = XB:YYt = Yt: GOSUB 100: IF X® = XX$ AND Y8 = YY# GOTO 1294 1297 XDRAW CT AT XX%,YY%: XDRAW CT AT X4,Y#: GOTO 1294 1300 KK = 1: GOTO 1260 1310 IF ¢ < 32 OR C = 127 Goro 1430 1320 IF PEEK (49249) > 127 AND C > 47 AND C < 91 THENS = $+ 80 1330 XDRAW CT AT X4,Y6: DRAW S AT Xt,Y8 1340 IF TT = 0 THEN CT = CR:KK = 0: GOTO 1370 1350 CT = S: IF MN GoTO 1294 1360 GoTo 1260 1370 X= Xb +7 1380 IF X8 > 277 THEN Yb = Y8 + 8:X8 = XB - 273: IF X¥ > 8 THEN fe xe- 7 1390 IE X8 <2 THEN Y8 = Ye - 8:X8 = X8 + 273: IP XB < 271 THEN w= xe e 7 1400 IF Ye < 4 THEN Ye = 186 1410 IF Y& > 186 THEN Yt = 4 1420 XDRAW CT AT X%,Y$: GoTo 1260 1430 IF KK = 1 THEN KK = 0: DRAW CT AT Xt, Yb: GOTO 1450 1440 XDRAW CT AT x4, Y¢ 1450 IF C = 13 THEN RO = 0: ROT= RO:CT = CR:TT SCAL B= SC:KK = 0: RETURN 1460 IF (C = 1 AND SC < 51) OR (C = 26 AND SC > 1) THEN SC = SC + (C= 1) ~ (C = 26): SCALE= sc 1470 IF C = 23 THEN RO = (RO = 56) * 0 + (RO < 56) * (RO + 8) ROT= RO 1480 IF C = 127 THEN DRAW CT AT X$,Y4: XDRAW CT AT X¥,Y4:C = 8 1485 1 AND MN = 1 THEN XDRAW CT AT X$,Y#: GOTO 1294 1490 a 1500 IF PEEK (49250) > 127 THEN Vx = I:vY = 1 1510 IF PEEK (49249) > 127 THEN VX = 70:VY = 48 1520 IF C = 21 THEN X# = X# + UX 1530 IF C = 8 THEN Xt = x8 - Ux 1540 IF C = 10 THEN Yt = Yt + vY 1550 IF C = 11 THEN Yt = Ye ~ vY 1560 GOTO 1380 1570 REM ** C,D,A,E ** 1580 PP = 1:RX = X08 ~ XI8:RY = YI8 - YOR:RA = INT ( SOR (RX * 2+ RY *2) + .5) 1590 IF RA = 0 THEN RETURN 1600 XDRAW CU AT X08, YOs 1610 IF R = 65 OR R = 69 GoTO 1750 1620 XH = INT (X18 / 256):XB = X18 ~ XH * 256: POKE AA + 4,XB POKE AA + 5,XH: POKE AA + 6,YI18 1630 1640 1650 1660 27 THEN POKE 49168,0: RETURN 1662 1670 1680 1690 1700 1710 192 THEN HPLOT X1% - 1,¥1¢ + I TO X18 + 1,YI8 + 1 1720 1730 HEN HPLOT X14, YI8 + I 1740 1750 1760 1770 1780 ° 1790 1800 1810 1820 1830 1840 1850 49168,0: GOTO 1870 1860 1870 1880 1890 IF RA > 255 THEN RETURN IF R = 68 GOTO 1660 POKE AA + 9,RA: CALL AC: RETURN RM = RA: FOR RA = 1 TO RM: GOSUB 1650: IF PEEK (49152) >1 | NEXT IF RA < 64 GOTO 1730 FOR I= = RA TO ~ 64: GOSUB 1710: NEXT FOR I = 64 TO RA: GOSUB 1710: NEXT RA = 64: GOTO 1730 Ip YIt+ I> ~ 1 AND YI# + I < 192 AND X1¥ > 1 AND X18 < RETURN FORI = ~ RA TO RA: IF YIt+ I> - 1 AND YIt+ 1192 T NEXT : D= .02 IF R = 65 THEN X = XO8:Y = YOR:EX = 1:EY IF RX = 0 OR RY = 0 THEN RETURN IF ABS (RX) > = ABS (RY) THEN X 1800 X= Xltey = yIe - RY EX = ABS (RX / RY) :BY = HPLOT X,Y Y= Y + EY *D* (xX ~ xIb):K =X - EX *D* (¥ ~ IE) IF X < 0 OR X > 279 OR Y < 0 OR ¥ > 191 GOTO 1820 HPLOT 10 X,¥ IF PEEK (49152) > 127 THEN TH = RETURN 1: GOTO 1810 X18 + RX:Y = YI8: Cor ABS (RY / RX) PEEK (49152) ~ 128: POKE GoTo 1820 IF TH = 13 Goro 1900 GET CARS: IF CARS = Goro 1820 CHRS (13) GoTO 1900 Pom's n° 31 15 1900 Xt = X:¥8 = ¥: RETURN 1910 REM ** GY ** 1920 XO8 = Xt:Y0% = Yt: DRAW CG AT xO8,Y oF 1930 IF MN THEN MR = 1:MN = 0 1940 GoTo 1970 1950 IF PEEK (49152) > 127 THEN R = P EEK (49152) - 128: POKE 49168, 0 1960 GOSUB 80: XDRAW CG AT X08, YO#:XO8 X#:Y08 = Yk: DRAW CG AT X08, YO 1970 IF R = 89 THEN XDRAW CG AT xOk,YO %: ROT= 16: DRAW CG AT X08, YO8 1980 IF R= 71 THEN XDRAW CG AT x08, YO 4: ROT= 0: DRAW CG AT XO, You 1990 IF R= 13 THEN XDRAW CG AT x08, ¥0 $2 DRAW CU AT X08, Y0%: ROT= O:MN = MR :MR = 0: RETURN 2000 R = 0: GOTO 1950 2010 REM ** CHARGER, ENREGISTRER, CATALO Gath 2020 IF NOT PL THEN RETURN 2030 HTAB 1: VTAB 14: PRINT "LECTEUR N° "2 INVERSE : PRINT NL;: NORMAL : CA LL ~ 1008: GET CARS: IF CARS = CHRS (23) THEN RETURN 2040 IF CARS < > "I" AND CARS < > "2" Goro 2020 2050 NL = VAL (CARS): INVERSE : PRINT N L: NORMAL : RETURN 2060 GosuB 2020 2070 PRINT : PRINT D$"CATALOG,D"NL: PRI NT : INPUT "NOM DE L'IMAGE:";IM$: IF IM$ = "" GOTO 2110 2080 PG = ASC ( LEFTS (IM$,1)): IF PG < 65 OR PG > 90 THEN VTAB 9: GOTO 207 ° 2090 IF I = 2 THEN XDRAW CU AT X4,Y¢: PRINT DS "BSAVE"IMS",A$2000, L$2000, D' NL: GOTO 2110 2100 PRINT D$"BRUN CHARGE.OBJ,A$9000" 2105 & IMS, 8192 2110 RETURN 2120 HOME : GOSUB 2020: HOME : PRINT 2130 PRINT D$"CATALOG,D"NL: INVERSE : P RINT "EIN": NORMAL 2140 GET CARS: HOME : RETURN 2150 REM ** INFORMATIONS ** 2160 TEXT : HOME : FOR I = 1 70 22 2170 IF (I = 4 OR I = 5) AND ME = 0 GOT 0 2200 2180 IF I = 21 AND MA = 0 THEN I = 25:: PRINT "B -> ECHANGE BIS": GOTO 2200 2190 PRINT INS (F) 2200 NEXT 2210 PRINT INS (23); 2220 GET CARS: POKE 49232, 0: POKE 49239 10: POKE 49236, 0: RETURN 2230 REM ** DEBUT ** 2240 HOME : VTAB 8: HTAB 12: INVERSE : PRINT " SCHEMATEUR ": NORMAL : VTAB 1 4: PRINT "TOUCHE 'Q' POUR ACCEDER AU MENU": VTAB 19: PRINT "TOUCHE ‘Ctrl Q' POUR AIDE-MEMOIRE™ 2250 ZC = 29:IN = SI:N = 6 2260 0: IF PEEK (207) THEN ME = 1 2270 PL = 0: IF PEEK (214) THEN PL = 1 2280 MA = 0: IF PEEK (215) THEN MA = 1 2290 AA = 2817:AL = 6000:AE = AA + 17 2300 DIM R(ZC), INS (IN) 2310 CU 98:KK = 0:5C = 1 RO = utr = 0 2320 DE = 3:MN = O:MR = 0:x8 = 13 9:Y4 = 95:X08 = X¥:Y08 = Ye:PT = 0:DP 0:87 = 1:NL = 1:B = 0:DH = O:NT O:VX = 12:VY = 12:MD = 0:PA = 3:EP 2330 C = 0:5 = 0:PG = 0:RX = 0:RY = 0:RA = 0:D = O:EX = 1:EY = 1:TH = 0:R = 0 H= 0 2340 IMS = "":CARS HRS (4) 2350 FOR T “Des 6 1-70 IN: READ IN$ (I): NEXT 2360 FOR I = 1 TO ZC: READ R(I): NEXT 2370 IF PEEK (235) GOTO 2420 2380 POKE 233, INT (AL / 256): POKE 232 AL = 256 * ( INT (AL / 256)) 2390 PRINT D$"BRUN CHARGE.0BJ,A$9000" 2400 & "CARAC.SH",AL: & "SCHEM.C*,AA 2410 POKE 235,1 2420 AF = AE + 3:AB = AE + 6:20 = AE + 9 IAI = AE + 12:AU = AE + 15:AC = AB + 18:AG = AE + 21:AV = AE + 24:AP = AE + 27:AW = AB + 30:AS = AE + 33 2430 POKE AA + 16,1: POKE AA + 3,NI: PO KE AA + 8,5 2440 POKE AA + 1,MD: POKE AA + 2,PA: PO KE AA, EP - 1 2450 ONERR GOTO 2710 2460 POKE 49232,2: POKE 49239,0: POKE 4 9236, 0: POKE 49234,0 2470 HCOLOR= CL: ROT= RO: SCA 2480 DRAW CU AT X08, YO 2490 GOSUB 200: TEXT : HOME 2500 REM ** MENU ** 2510 FOR I = 1 TO N: GOSUB 2670: NEXT 2520 I = 1: INVERSE : GOSUB 2670: NORMAL 2530 VTAB 22: PRINT "FLECHES -> CHOISIR RETURN -> VALIDER" 2540 VTAB 23: GET CAR$:CH = ASC (CARS) 2550 IF CH = 10 OR CH = 8 THEN GOSUB 2 670:1 = 1 + 1: INVERSE : GOsUB 2670: NORMAL 2560 IF CH= 11 OR CH = 21 THEN GosUB 2670:1 = I = 1; INVERSE ; GOsuB 2670 NORMAL 2570 IF CH = 13 THEN HOME : GOTO 2590 2580 GOTO 2540 2590 ON I GOTO 2600, 2610, 2620, 2660, 2630 12640 2600 POKE 49232,0: POKE 49239,0: POKE 4 9236,0: GOTO 2490 2610 GOSUB 2060: GOTO 2600 2620 GOSUB 2060:PT = 1: GOTO 2600 2630 GOSUB 2120: GOTO 2510 2640 XDRAW 1 AT X$,Y8: TEXT : Int 2650 PRINT D$"RUN MENU, DI": REM Nor 2660 PRINT : PRINT DS$"RUN GRAVURE, D1" 2670 IFI=N+1 THEN I =1 2680 IF I = 0 THENI = N 2690 VTAB I + DE: HTAB 4: PRINT INS(34 + I): RETURN 2700 REM ** ERREUR ** 2710 ER = PEEK (222): IF ER = 6 THEN T EXT : HOME : VTAB 10: PRINT "FICHIER ABSENT": GET CARS 2720 HOME : GOTO 2510 2730 DATA LES FLECHES DEPLACENT LE POI NT, POMME BLANCHE -> RAPIDE, POMME NOIR E ->LENT, Tab -> MANETTES, Tab -> FLEC HES, Del -> EFFACE 2740 DATA K -> COULEUR 1 > IWE RSION,X > POINT DE DEPART, Z -> DEPAR 1 PERMANENT, BARRE ESPACE -> RELIE DEU X POINTS, H -> RELIE HORIZONTALEMENT, V => RELIE VERTICALEMENT 2750 DATA R -> RECTANGLE, C -> CERC LE D -> DISQUE,F -> FENETRES ‘M -> MOUVEMENT, A -> ARC DE CERCLE E -> ELLIPSE,G -> GOMME HORIZONTA LEY ~>VERTICALE 2760 DATA S -> REMPLIT UNE SURFACE, P -> MODE REMPLISSAGE L -> LIMITES, W -> ECHANGE DESSINS — U -> UNION,B => METTRE EN BANQUE 0 -> OBSERVER, N -> REMPLACER EN BANQUE J -> NOMBRES +T -> TEXTE Ctrl Q -> INFORMATIO HOME : PR PT NS 2770 DATA MODE DE REMPLISSAGE DES SUR FACES, C -> REMPLISSAGE COMPLET, V -> L IGNES VERTICALES,H -> LIGNES HORIZONT ALES,P ~> POINTILLES,Q -> QUADRILLAGE /D ~> HACHURES PENCHEES A DROTE,G -> HACHURES PENCHEES A GAUCHE, 1 -> LOSAN cs 2780 DATA L'OPTION 'PAS' DONNE L'ECART ENTRE LES MOTIFS, L'OPTION 'EPAISSEU R' DONNE L'EPAISSEUR DES TRAITS 2790 DATA RETOUR A L' IMAGE, ENREGISTRER L'IMAGE, CHARGER UNE IMAGE, IMPRIMER, C ATALOGUE, QUITTER LE PROGRAMME 2800 DATA VOUS ETES EN MODE TEXTE, T OUT LE CLAVIER AZERTY EST OPERATIONNE L, LES FLECHES DEPLACENT LE CURSEUR, De 1 -> EFPACE,Ctrl A -> AGRANDIT, Ctrl Z -> RAPETISSE, Ctrl W -> FAIT TOURNER 2810 DATA -,Esc -> AFFICHE CARACTERE OU SHAPE, DEPLACEMENT COMME EN MODE GR APHIQUE, BARRE ESPACE -> MARQUE 2820 DATA 81, 127, 78, 76, 90, 88, 86, 32, 72 182, 10, 75, 79,17, 87, 83, 84, 67, 68, 65, 63, 71, 89, 85, 73, 66, 80, 74,77 Programme GRAVURE 5 HIMEM: 36863 10 REM **# GRAVURE *#* 20 DS = CHRS (4):DM = 1 30 ONERR GOTO 890 40 IF PEEK (103) + 256 * 24577 GoTo 70 50 POKE 103,1: POKE 104,96: POKE 24576, ° 60 PRINT DS$*RUN GRAVURE" 70 HOME : VTAB 10: HTAB 6: INVERSE : PR INT " PROGRAMME GRAVURE ": NORMAL : VTAB 15: HTAB 6: PRINT "SORTIE SUR IM PRIMANTE": HTAB 11: PRINT "IMAGEWRITE PEEK (104) = 80 DIM c(a),D(14) 90 FOR I = 1 TO 8: READ C(I): NEXT : FO R I= 1 70 14: READ D(1): NEXT 100 FOR I = 0 T0 3: READ FRS(I): NEXT FOR I= 1 TO 3: READ IN$(I): NEXT 110 TH = 48:18 = 48:MB = 48:MH = 46 120 NL = 1:PL = 0: IF PEEK (214) THEN P bal 130 AG = 2049:AC = 206: REM **ADRESSES DU PROGRAMME COUT ET DU CARACTERE EN vore** 140 AP = AG + 6: REM AMME GRAV.C## 150 IF PEEK (237) GOTO 180 *ADRESSE DU PROGR 160 PRINT : PRINT D$"BLOAD GRAV.C,A"AG 170 POKE 237,1 180 HOME : VTAB 9: PRINT "RETURN POUR I MAGE BN COURS": PRINT "AUTRE TOUCHE P OUR NOUVELLE IMAGE™;: GET CARS: IF CA R$ < > CHR$ (13) GOTO 210 200 POKE 49232,0: POKE 49234,0: POKE 49 236,0: POKE 49239,0: GOTO 270 210 IF NOT PL GOTO 250 220 HTAB 1: VTAB 13: PRINT "LECTEUR N°: INVERSE : PRINT NL;: NORMAL : CAL L = 1008: GET CARS: PRINT CARS: IF C ARS = CHR$ (13) GOTO 250 230 IF CARS < "1" OR CARS > "2" GOTO 22 0 240 NL = VAL (CARS) 250 PRINT : PRINT D$"CATALOG,D"NL: PRIN T : INPUT "NOM DE L'IMAGE:";IM$: IF I MS = "" GOTO 180 260 HGR : POKE 49234,0: PRINT : PRINT D S"BRUN CHARGE.OBJ,A$9000": & IMS, 8192 270 GET CARS: TEXT 280 HOME : PRINT "L'IMPRIMANTE EST-ELLE PRETE (0/N)?:";: INVERSE : PRINT "OM; : NORMAL : CALL ~ 1008: GET CARS: PR INT CARS: IF CARS = "N OR CARS = "n" coro 760 290 TAB 3: PRINT "NOUVELLES DISPOSITIO NS(O/N)?:%;: INVERSE : PRINT "0";: NO RMAL : CALL ~- 1008: GET CARS: PRINT CARS: IF CARS < > "N" AND CARS < > "n" GOTO 310 300 GOTO 560 310 IC = 0: HOME : VTAB 3: PRINT "INVERS ER NORMALEMENT LA COULEUR(O/N) 2", NVERSE : PRINT "O";: NORMAL : CALL ~ IF CARS CHRS ( 13) THEN IC = 1 320 HOME : VTAB 2: PRINT "L'image peut s'imprimer en deux hauteursHauteur si mple(6.7cm) ou double(13.4cm)" 330 HI = 1: VTAB 5: PRINT "IMAGE DE HAUT EUR SIMPLE(O/N) ?:";: INVERSE : PRINT "ON; : NORMAL : CALL ~ 1008: GET CARS : PRINT CARS: IF CARS = "O" OR CARS "o" OR CAR$ = CHR$ (13) THEN HI = 0 340 DM = IC +2 * HI 350 IF DM > 1 AND D(1) = 4.4 THEN FOR I= 1 70 8:D(I) = 2 * DI): NEXT 360 IF DM < 2 AND D(1) = 8.8 THEN FOR I= 1 70 8:D(I) = D(I) / 2: NEXT 370 HOME ; VTAB 3: PRINT FRS (DM): VTAB 5: PRINT "DEFORMATION HORIZONTALE(O/N 222%: INVERSE : PRINT "N*;: NORMAL : CALL ~ 1008: GET CARS: PRINT CARS 380 IF CAR$ = "N" OR CARS = "n" OR CARS CHRS (13) THEN DO = 14:D = DUB, I= 2: Goro 480 390 IT = 14: IF DM > 1 THEN II = 8 400 VTAB 7: PRINT "LARGEUR DE L'IMAGE: " FOR I = 1 TO II: PRINT CHRS (64 + 1) "= (D1) " om)": NEXT : VTAB 15: HT AB 12: INVERSE ; PRINT "NORMAL": NORM Pom's n° 31 AL 410 IF pm > 1 GoTo 460 420 VTAB 23: PRINT "CHOIX(A & N): "2: GE T CARS:DI = ASC (CARS) ~ 64: IF DI < 1 OR DI > 14 GoTo 420 430 DO = 15: IF DI > 6 THEN DO = 14 440 D = D(DI): IF DI > 6 THEN DI = DI ~ 6 450 GoTo 480 460 VTAB 17: PRINT “CHOIX(A 4H): "7: GE T CAR$:DI = ASC (CARS) ~ 64: IF DI < 1 OR DI > 8 GoTo 460 470 DO = 15:D = D(DI) 480 HTAB 1: VTAB 5: CALL ~ 958:cI = c¢ DI): PRINT : PRINT "LARGEUR DE L'IMAG E: "D" cm 6.7 * (DM < 2) + 13.4 * (DM > 1); PRINT "HAUTEUR DE L' IMAGE *H" em 490 VTAB 10: HTAB 1: PRINT "POSITIONNEM ENT DU COIN SUPERIEUR GAUCHE DE L'ECR AN CONTENANT L'IMAGE:" $00 VTAB 13: HTAB 1: PRINT "MARGE HAUTE (DE 0A 24 cm):";: INVERSE : PRINT ™ 0"; : NORMAL : CALL - 1008: INPUT "™; Y$: IF Y$ = "" THEN VTAB 13: HTAB 29 2 PRINT "O":¥ = 0: GOTO 520 $10 Y= VAL (YS): IF ¥ < 0 ORY > 24 GO $20 IL = 3.85 * ¥:IH = INT (IL / 10):18 INT (IL = 10 * Ih) + 48:1H = TH + 48 530 VTAB 15: HTAB 1: PRINT "(10.1 pour raccorder une image simple)" 540 VTAB 14: HTAB 1: PRINT "MARGE GAUCH E (DE 0.3 A 16.S5cm):";: INVERSE : PRI NORMAL : CALL ~ 1008: CAL L = 1008: CALL ~ 1008: INPUT "™:x$: IF X$ = "" THEN VTAB 14: HTAB 32: P RINT "0.3%:X = 0.3: GOTO 560 550 X = VAL (XS): IF X < 0.3 OR X > 16. 5 coro 540 560 MG = 3.6 * (X ~ 0.3):MH = INT (MG / 20):MB = INT (MG - 10 * MH) + 48:MH Mi + 48 570 VTAB 18: PRINT "EST-CE EXACT (O/N)?: "ys INVERSE : PRINT "O";: NORMAL : CA LL ~ 1008: GET CAR$: PRINT CARS: IF CARS = "N" OR CARS = "n™ GOTO 760 560 PRINT ; PRINT D$"PREI" $90 PRINT CHR$ (27); "n™ 600 POKE 6,1: POKE 7,DM 610 POKE AG + 15, CI 620 POKE AC, 27: CALL AG: POKE AC, 114: ALL AG 630 POKE AC, 27: CALL AG: POKE AC, 84: CA LL AG: POKE AC, 50: CALL AG: POKE AC, 5 5: CALL AG: POKE AC,31: CALL AG: POKE AC, 49: CALL AG 640 POKE AC, 27: CALL AG: POKE AC, 102: ALL AG 650 IF IH = 48 AND IB = 48 GoTo 680 660 POKE AG, 27: CALL AG: POKE AC, 84: CA LL AG: POKE AC, IH: CALL AG: POKE AC, 1 B: CALL AG 670 POKE AC, 31: CALL AG: POKE AC, 63: CA LL AG 680 POKE AC, 27: CALL AG: POKE AC, 110: ¢ ALL AG 690 POKE AC, 27: CALL AG: POKE AC, 76: CA LL AG: POKE AC, 48: CALL AG: POKE AC,M H: CALL AG: POKE AC,MB: CALL AG 700 POKE AC, DO: CALL AG 710 POKE 49239,0: POKE 49234,0: POKE 49 232,0 720 POKE 6,1: POKE 7,DM 730 CALL AP 740 PRINT : PRINT DS"PREO" 750 POKE 49233,0 760 HOME : FOR I = 1 TO 3: GOSUB 770: N EXT 761 I = 1: INVERSE : GOSUB 770: NORMAL 762 VTAB 22: PRINT "FLECHES -> CHOISIR RETURN -> VALIDER™ 763 VTAB 23: GET CAR$:CH = ASC (CARS) 764 IF CH = 10 OR CH = 8 THEN GOSUB 77 0:1 = I 4 1: INVERSE : GOSUB 770: NOR MAL 765 IF CH = 11 OR CH = 21 THEN GosuB 7 70:1 = I ~ 1: INVERSE : GOSUB 770: NO RMAL 766 IF CH = 13 THEN HOME : GOTO 775 767 Goro 763 770 IF I= 4 ORI = 0 THEN = aps (I -3) 772 VTAB I + 8: HTAB 4: ETURN 775 ON I GOTO 790,790, 780 780 PRINT : PRINT D$"RUN MENU, D1" 790 HOME : VTAB 10: PRINT "REVENIR AU N IVEAU PRECEDENT (0/N): "7: INVERSE : P RINT "N";: NORMAL : CALL ~- 1008: GET RMS: PRINT RMS: IF RMS = "0" OR RMS = "o" THEN GOSUB 820 600 IF I= 1 THEN HOME : 810 GoTo 210 820 PRINT : PRINT D$*PREI" 830 POKE AC, 27: CALL AG: POKE AC, 114: C ALL AG 840 POKE AC,27: CALL AG: POKE AC, 84: CA PRINT INS (I): R coro 290 LL AG: POKE AC, 55: CALL AG: POKE AC, 5 4: CALL AG 850 POKE AC, 31: CALL AG: POKE AC, 53: CA LL AG 855 POKE AC,27: CALL AG: POKE AC, 84: CA LL AG: POKE AC, 48: CALL AG: POKE AC, 4 9: CALL AG: POKE AC,31: CALL AG: POKE AC, 49: CALL AG 860 POKE AC, 27: CALL AG: POKE AC,102: C ALL AG 870 PRINT : 880 RETURN 890 ER = PEEK (222) 900 IF ER = 6 THEN TEXT : HOME : VTAB 10: PRINT "PAS D'IMAGE DE CE NOM.": P RINT "TAPEZ UNE TOUCHE.": GET CARS: H OME : GOTO 760 910 Goro 760 920 DATA 80,112, 81,113,101, 69, 78,110 930 DATA 4.4, 5,5.3,5-8, 6.6, 7.5, 8-8, 10, 10.6, 11.6, 13.2, 15,17. 6,20 940 DATA HAUTEUR SIMPLE ~ PAS D'INVERS ION, HAUTEUR SIMPLE - INVERSION NORMAL E, HAUTEUR DOUBLE ~ PAS D' INVERSION, HA UTEUR DOUBLE - INVERSION NORMALE 950 DATA IMPRESSION DE LA MEME IMAGE, A UTRE IMAGE, QUITTER LE PROGRAMME PRINT DS$"PREO™ 300 IF 1=N+1 THEN I = ND 310 IF I= ND~1 THEN I =N 320 VTAB I + DE ~ 1: PRINT I;"-":R$(1) RETURN 330 REM ** CONFIGURATION * 340 HOME : VTAB 10: PRINT "CONFIGURATIO WN ACTUELLE: " 350 VTAB 12: HTAB 1: PRINT "PAS DE MANE TES": IF PEEK (207) THEN VTAB 12. HTAB 1: CALL = 868: PRINT "MANETTES” 360 VTAB 13: HTAB 1: PRINT "1 LECTEUR" IF PEEK (214) THEN VTAB 13: HTAB 1 PRINT "2 LECTEURS* 370 VTAB 14: HTAB 1: PRINT "PAS DE MEMO IRE AUXILIAIRE": IF PEEK (215) THEN VTAB 14: HTAB 1: CALL ~ 868: PRINT "MEMOIRE AUXILIAIRE™ 380 VTAB 18: HTAB 1: PRINT "RETURN POUR CONFIRMER.": PRINT "'C' POUR MODIFIE RY: GET CARS: IF CARS < > "C" AND CA RS < > "e™ GOTO 150 390 HOME : VTAB 10: PRINT "AVEZ-VoUS DE S MANETTES? (O/N):";: GET MES: PRINT M ES:ME = ((MES = "N") + (MES = "0Om) * 2) - 1: IF ME = ~ 1 Goro 390 400 VTAB 12: PRINT "AVEZ-VOUS DEUX LECT EURS?(O/N):";: GET PLS: PRINT PL$:PL (PLS = "N") + (PLS = "0") #2) - 1 IF PL = ~ 1 GOTO 400 410 VTAB 14: PRINT "MEMOIRE AUXILIAIRE? (O/m) 2": : GET MAS: PRINT MAS:MA = ((M AS = "N") + (MAS = OM) * 2) = 22 IF MA = ~ 1 GOTO 410 420 POKE 24613,ME + 48: POKE 24620,PL + 48: POKE 24627,MA + 48 430 PRINT CHRS (13); CHRS (4) "SAVE MEN un 440 PRINT CHRS (13); CHRS (4) "RUN MENU Programme MENU 10 REM ** PROGRAMME MENU ** 20 POKE 207,1: POKE 214,1: POKE 215,1: REM *MANETTES, LECTEURS, MEMOIRE AUXIL IAIRE* 30 N= 3: REM 40 REM ** TITRES DU MENU: ** 50 DATA PROGRAMME SCHEMATEUR, GRAPHES DE FONCTIONS, IMPRESSION SUR IMAGEWRI TER 6ON=N+3 70 DATA CONFIGURATION, CATALOGUE DE LA DISQUETTE, QUITTER ** NOMBRE DE PROGRAMMES 80 REM ** NOMS DES PROGRAMMES: ** 90 DATA — SCHEMATEUR, FONCTION, GRAVURE 100 REM ** DISPOSITION DU MENU: ** 110 ND = 1:DE = 12:D$ = CHRS (4) 120 DIM R$(N),FS(N) 130 FOR I = 1 TO N: READ R$(I): NEXT 140 FOR I = 1 TON ~ 3: READ F$(I): NEX ¥ 150 HOME : VTAB 4: PRINT "M.CAUET": PRI NT "OCTOBRE 1986" 160 GosuB 220 170 IF I = .N THEN HOME : END 180 IF I= N-1 THEN PRINT : PRINT DS "CATALOG": PRINT : INVERSE : PRINT "R ETURN": NORMAL : GET CARS: GOTO 150 190 IF I = N- 2 THEN GoTO 340 200 PRINT : PRINT DS*"RUN"FS (1) 210 REM ** APPICHAGE MENU ** 220 FOR J, = ND TO N: GOSUB 300: NEXT :I ND: INVERSE : GOSUB 300: NORMAL 230 VIAB 22: PRINT "FLECHES POUR CHOISI R-RETURN POUR VALIDER" 240 VIAB 23: GET ME$:ME = ASC (MES) 250 IF ME = 10 OR ME = 21 THEN GOSUB 3 00:1 = I + 1: INVERSE : GOSUB 300: NO RMAL 260 IF ME = 11 OR ME = 8 THEN GOSUB 30 0:1 = I~ 1: INVERSE : GOSUB 300: NOR MAL 270 IF MB = 13 THEN HOME : RETURN 280 IF ME > 48 AND ME < 49 +N THEN I = ME ~ 48: HOME : RETURN 290 Goro 240 YOR DSSINC KX O/K et sa dérivée en pointillé Programme GRAPHISME 10 REM 20 HOME 30 HGR2 40 HGR 50 TEXT 60 REM ** NETTOIE MEV COMMUTEE ** 70 PRINT CHRS (4) "BLOAD HEL.C™ 80 CALL 768 90 REM ** POINTEURS PROG.MACHINE: SCHE M/CARAC ~ FONC ~ GRAV ** 100 FOR I = 235 TO 237: POKE 1,0: NEXT 110 REM ** PLACE LES PROGRAMMES AU-DES SUS DE HOR2 ** 120 POKE 103,1: POKE 104,96: POKE 24576 ** HELLO ** 10 130 PRINT CHRS (13); CHRS (4) "RUN MENU 140 END Pom's n° 31 17 41D0:00 38 27 2C 2D F5 AA 36 41D8:1E 3F 1C 04 00 AD F6 3F Récapitulation 41£0:1¢ 24 25 0C oC 35 00 OC CARAC.SH 41E8:0C 3C 3F 77 92 36 05 00 41F0:E7 64 2D 15 BE 15 F6 3F BO 36 36 1E E7 04 00 41F8:1C 2C 00 E? 64 2D 15 36 4200:77 1E 17 3F 04 00 08 16 4208:06 00 08 16 BE 05 00 91 4210:E2 1C 1C OC OC OC 06 00 49218:38 67 89 BS 3F 3F 04 00 Aprés avoir saisi ce code sous moniteur, vous le sauvegarderez par: BSAVE CARAC.SH, A$4000,LS$6C1 4000:8D 00 1C 01 1E 01 23 02 4220:93 62 0C 0C 1C 1C 1C 06 1C 96 36504 (00 41.aF 4008:25 01 2C 01 30 01 3C 01 4228:00 0C 0C 1C 3F 17 95 0A 15 2D 15 1B 3F 27 00 | 4010:49 01 54 01 60 01 64 Ot 4230:16 05 00 43 2B 2D 38 70 BF 67 34.12 36 15 65 | 4018:6C 01 74 01 81 01 89 01 4238:12 36 3E 3F 1C 45 2B 25 00 41 36 36 47 F3 ET | 4020:8D 01 92 01 95 01 9C 01 4240:00 3A 37 6E 09 24 67 E4 24 00 41 36 18 1B 1¢ | 4028:AA 01 B2 01 BC 01 C7 01 4248:1C 1E 1E 2E 00 3F 24 2c 24 04 00 41 36 36 E7 | 4030:01 02 DD 01 £7 01 FO 01 4250:2D 15 BE OE BE 3F 27 2C 1A 27 24 24 00 41 1E | 01 06 02 OA 02 OF 02 4258:00 89 F2 3F 1C 24 24 0C 1B 1E 4D El 1¢ 18 1¢ | 02 20 02 29 02 33 02 4260:2D 15 06 00 09 36 1E 3F 00 41 36 36 1E 3F 4c | 02 4D 02 59 02 64 02 4268:27 24 24 2C 2D 15 3E 00 E7 24 04 00 1B 28 2D 02 7D 02 87 02 92 02 4270:39 B7 3A 24 24 24 2D 2D 1E 1E 1E 2D 2D 04 00 02 A? 02 AF 02 BC 02 4278:96 92 3F 04 00 39 B7 1A 2D 25 1C 44 F3 3E 1E 02 D1 02 DD 02 E9 02 4280:24 24 24 2D 2D 06 00 11 15 2D 25 00 40 £3 9B 02 FF 02 0c 03 17 03 4288:35 3E 3F 1C 24 24 0C 2D AE 65 35 44 23 24 00 | 03 2B 03 36 03 42 03 4290:35 00 2B 2D 24 FC 1B 36 2D 25 1C 27 1C 16 1E | 03 57 03 62 03 67 03 4298:36 36 4D 21 24 00 52 3A 15 2D 25 00 40 C3 OD | 03 83 03 88 03 8F 03 42A0:67 24 24 3C OD 06 00 9B 00 92 4A 24 24 24 3C | 03 AO 03 AB 03 B3 03 42R8:72 2D 0C 24 24 3C 00 73 36 36 3E 24 24 24 3C 03 C9 03 D2 03 DD 03 42B0:0E 15 DF 23 24 24 6C 09 36 36 3E 24 24 24 24 03 EF 03 F8 03 04 04 42B8:1E 1E 06 00 89 12 3F 3F 1E 45 23 £4 F7 36 OF 04 15 04 1 04 28 04 42C0:24 24 24 05 00 E0 1C 36 00 2B ES 24 BC 04 00 | 04 3B 04 46 04 50 04 42C8:36 36 4D 21 24 24 BC 06 3F 0C 45 2B EO BF 04 | 04 63 04 6C 04 76 04 42D0:00 OE 56 24 24 24 DF 33 E7 4D 1C 45 23 3F 27 | 40B8:82 04 8D 04 98 04 AS 04 42D8:2E 18 36 2E 00 92 E7 24 24 24 1F 36 6D 04 00 | 40C0:B0 04 BD 04 C2 04 DA 04 42B0:24 0C 2D 15 36 36 17 05 2D 45 E3 5F 27 2C 2D 40C8:E2 04 E8 04 F1 04 F9 04 42E8:00 65 3C 38 3F 36 2E 1E 00 3F 68 B1 3F 64 2D 40D0:00 05 0A 05 12 05 18 05 42F0:36 05 00 AA 15 1F 3F 20 00 24 45 23 3F 27 00 | 40D8:20 05 29 05 35 05 44 05 42F8:24 64 2D 15 36 36 00 77 4D 1C £7 OC AD 04 00 | 4080:4D 05 61 05 6C 05 7A 05 4300:15 15 DF 23 24 24 2C 2D 2D 45 23 E4 F7 OE 25 40E8:86 05 93 05 A6 05 BS 05 4308:15 BE 06 00 E7 64 2D 15 9B 2D OE 15 40 2B EO 40F0:C2 05 CB 05 D9 05 E7 05 4310:97 15 F6 3F 1C 04 00 24 BB 3F 04 00 1B 15 15 40F8:F8 05 09 06 18 06 24 06 4318:1F 28 2D F5 92 33 2E 00 15 24 24 24 24 2D 2d | 4100:2D 06 39 06 44 06 4E 06 4320:92 B7 24 24 6C 09 36 36 2D 04 00 92 2A E5 23 | 4108:56 06 62 06 6D 06 76 06 4328:BE 05 00 92 1C 1C 24 24 24 2C 25 00 1B 45 63 | 4110:80 06 88 06 92 06 9D 06 4330:4D 31 36 BE 06 00 F6 1E AB 0C 2D 2D 75 0C 0c | 4118:A8 06 BS 06 04 00 1B 2D 4338:24 24 24 4D 31 36 BE 35 47°73 1B SF 3F 3F 04 4120:2D 04 00 03 00 40 43 33 4340:07 00 OC OC FC 1B 76 16 89 92 3F 4D 43 23 24 4128:36 B6 04 00 CO 6C 26 00 4348:17 6E 09 £4 04 00 1¢ 1C¢ 3C 27 00 36 F6 1E 27 4130:40 43 3F 1E 36 6F 1E F6 4350:6C 09 F6 D6 36 05 00 OC 43 43 43 09 24 0C OC 4138:0D 2D 25 00 E7 9C 25 15 17 2E 2D 00 40 43 43 43 FB 2B 4140:F5 AB 15 1F 15 3F 77 29 04 00 4B 6D 1C 16 04 00 2A 28 | 4148:00 0c 0C DC 3B 2E 96 17 2D F5 1B 12 1C 1F 1E 24 24 10 | 4150:4D 2E 24 00 60 1C BF AE 3F 1B OB 04 00 28 OF 1E 15 1B 4158:17 76 65 1C 0D 16 07 00 B3 2A 2D 27 24 0C 96 D2 aF 44 4160:08 24 05 00 92 1C 1C 24 1E 04 00 43 43 11 04 00 45 2B 4168:0C 0C 06 00 92 0C 0c 24 25 00 40 1B 15 16 1B 15 AS 5A 4170:1C 1C 06 00 3C 1C 4¢ 6E 43 2B AD 63 1C 04 00 40 43 2B 4178:1E 16 3F 17 OD OD DE 07 2D 04 90 19 36 3F F715 2D OC 4180:00 20 8D 3A 3F 77 31 05 BF 27 24 00 28 FD F315 F5 AB 4188:00 89 F6 04 00 3F 4c 11 BF 36 15 25 00 B8 15 65 1c D6 4190:35 00 12 05 00 0C 0c D6 BF 36 15 76 1F 40 43 43 23 04 | 4198:DA 1E 06 00 0c 25 1c 3F 00 1A 2D 40 AB 15 DF 63 96 D8 41A0:17 36 2E 1E OE 2D 0c 24 15 2D 25 49 18 3F 3F 04 00 24 41A8:07 00 24 BC 96 31 17 2D 36 FS 36 AB F6 3F 1C 64 56 16 41B0:04 00 65 E4 3F 17 95 BA 2C 28 AD 40 43 43 43 43 23 00 41B8:2E 2D 25 00 25 0C 3C 3F 28:15 36 2C 28 15 15 1B 1E E7 41C0:B7 92 15 2D 0C 24 00 3A 24 00 18 49 73 65 24 1C F7 04 | 4108:27 0C OC 0C 36 36 F5 3E 21 00 58 100 40 43 2B 3D 1B 77 15 18 Pom's n° 31 4610: 4618: 4620: 4628: 4630: 4638: 4640: 4648: 4650: 4658: 4660: 4668: 4670: 4678: 4680: 4688: 4690: 4698: HB 4628: 1B 46A0 4680 46B8: 46C0: 34 16 F8 1E BS 27 20 AB 04 23 24 3F D2 36 2B 20 13 AD 38 E4 36 15 1E 27 27 Récapitulation SCHEM.C Aprés avoir saisi ce code sous moniteur, par: BSAVE SOURIS.C, oBo1 oBo8: oB10 oB1e: 0B20: 0B28 0B30: 0B38: 0B40: oB4a: OB50: OB58: oB60: oB6a: 0B70: 0B78: oBe0: opee: 0B90: 0B98: OBAO: OBAB: OBBO: OBBE: OBCO: OBCE: OBDO: oBDe: OBEO: OBES: OBFO: OBF 8: ocoo 1EA EA EA 4c op :F9 4c OB OB 06 EA EA EA BF 4c OE 42 20 20 oc oB oB 20 oc cE 20 20 FO EA EA ac op De 4c OE 12 06 20 20 OB 5E Do 07 FD 06 20 oB 05 AD cD ED oB OE 20 60 oB OB Fe 07 07 EE EA EA 55 4c op Al 20 oc oc 12 FD AD oc 27 oB OB oc 06 EE oB OA 08 07 AD oB 4E 20 20 20 20 oB oB 06 EA EA OE 54 4c OE FL Do 20 oc op 06 20 AD 20 20 EE oc 07 AD 0B OB oB op aD oc 12 12 06 FD 20 60 oB EA EA 4c 2c 4c OB Fl bo AD 0B FD 02 12 12 07 EE op oc Do 90 ap oB 06 cD oc oc oc 12 EE 60 EA EA FE 4c 14 80 20 4c oB 03 05 8D oB oB oc oc oB 07 AD OB 23 24 07 ep oB 08 FO Do 20 4c oc 05 AD vous le sauvegarderez A$BO1,LS9CE 20 DO 4c oB ap AD Ag oB 05 4c oB oB Fe 12 55 FO oB :D0 :A9 :€0 78D DO E6 AD a5 Ag cl 09 EE Do El 20 AD oF Bl 03 AD 20 co oB 38 Fa 30 60 07 AD 03 cg co c9 20 EF FO AC AD oF AE oc DO Ag 4c oF FO 02 a5 1E Ag 07 20 op op oD AD 65 85 a3 oB 06 a5 ; 06 co oc 26 07 ES 02 BF 0B £2 FO FO FO oc FO 60 oc 3D 05 AE 25 op oB 8D oB 57 AD * 20 op ED BO 00 ag ag 11 85 oB ag Ag 20 30 20 04 05 68 Ag A2 91 AD 06 09 06 ii 07 co Ag AO 8B OA 10 cg AE £0 00 Bl Ag 60 38 60 oc 21 2A 4E 4c 54 20 FO 20 op o1 CE ac 05 18 OF AC Fa 05 08 20 03 60 F8 40 cz: 3D 85 20 o1 92 F3 eB 20 oB 0A 10 8D 00 08 cA 83 Ag A2 Bl 06 E6 60 10 00 co oB AD AD oc AD 07 E6 20 aD 10 OE 09 Aq 11 8A co 20 53 co ce AO AO 06 oA 07 Ag 85 4c 06 oF oB £6 Ag 4c 50 06 AG a5 A2 OB co oF 00 00 AD oB cA 00 07 DB ag A2 oB 91 09 08 20 08 E6 OE cg 10 c9 10 03 Ag 10 aD co DO co Fg 10 20 DO 8D EO E0 EO AZ A2 A2 A2 27 Do co ce 27 co AD oB a3 88 AD 60 Do AD 06 8A Og 4c 53 06 10 80 AB Do AO B? AO AO co 91 OF A2 co 06 D6 Ag DO 20 bo cg Fg oF 20 co 20 20 20 20 20 20 20 20 20 co 11 28 DF 08 00 06 FS OB co AO 08 FS co 00 06 FS 00 co 27 AD 08 00 AD 88 co 06 FE 80 AB AD 27 88 AD £6 AD Bl AD Bl AD 91 83 ce 91 20 83 Do 06 09 85 Ag Bl 08 EF 60 40 20 Do FO 00 20 AO co 20 OE aD DO 03 Ag 10 11 20 DO cg Fg op E0 £0 £0 Do 11 11 11 11 11 11 01 F6 oA 09 BE 06 31 62 06 83 91 OF 07 8B 06 91 83 08 8B 06 co co 08 2F Pom's n° 31 1048:11 1050: 1058: 1060 1068: 1070: 1078: 1080:E5 1088:0A 1090:09 1098: 10A0: 10A8: 10B0: 10B8: 100: 10C8: 10D0: 10D8: 10B0:09 10B8:AD 10F0:0F 10F8:88 1100:CO 1108:AD 1110:0B 1118:AD 1120:C8 1128:0B 1130:37 1138:08 1140:0F 1148:1F 1150:1F 1158:1F 1160:DE 1168:E0 1170:E0 1178:E0 1180:E3 1188:40 1190:40 1198:40 11A0:D0 11A8:E3 11B0:E3 11B8:E3 11C0:E0 11€8:20 11D0:13 11D8:13 11£0:13 11E8:13 11F0:13 11F8:13 1200:09 1208:13 1210:A2 1218:A2 1220:A2 1228:AD 1230:20 1238:20 1240:20 1248:20 1250:20 1258:20 1260:20 E6 co AO Ag 20 20 o7 09 60 AO CF ao Bl AO AD 0B DO co 88 F7 27 co 00 co 06 06 85 39 20 20 20 bc 1E E3 E3 DD oF 3F 3F D1 1E £0 £0 Do BA 55 55 9B 55 80 AD 20 20 20 co 13 13 13 13 13 13 AD 28 20 20 20 20 20 06 27 04 69 EO 85 AD 06 83 08 91 06 Ao 88 E6 BI 00 AB AD 20 AO 27 DO BD AZ 120 120 28 a2 AD 13 13 13 13 13 09 A2 20 a1 20 20 1488:6D OC OB BO 12 AC 06 1490:F0 04 C9 18 BO 19 AA 1498:48 20 57 F4 4C AF 14 14A0:06 OB DO 0B C9 18 BO 14A8:AA C8 68 48 20 57 F4 14B0:AD 05 0B ED OC 0B 90 14B8:AC 06 OB AA 68 20 57 14C0:4C CE 14 AA 68 AC 06 14C8:FO 04 88 20 57 F4 60 Récapitulation GRAV.C Aprés avoir saisi ce code moniteur, vous le sauvegarderez par: BSAVE GRAV.C, A$801,L$25F 0801:A5 CE 20 ED FD 60 20 0808:93 09 A9 1B 20 @1 09 0810:6E 20 81 09 AS 07 29 0818:FO 03 4C 3C 0A AS 07 0820:6A 6A 29 CO 85 07 AD 0828:90 02 A9 40 85 1B AO 0830:84 1A 84 09 A9 OD 20 0838:09 AJ 1B 20 81 09 A 0840:20 81 09 A9 00 20 81 0848:A9 20 20 81 09 A9 1B 0850:81 09 A9 54 20 81 09 0858:31 20 81 09 A9 36 20 0860:09 A9 1B 20 81 09 Ad 0868:20 81 09 AY FF 85 19 0870:1B A4 1A DO OC BA 29 0878:D0 07 66 07 BO 62 38 0880:07 8A 48 98 48 A9 1B 0888:81 09 A9 47 20 81 09 0890:30 20 81 09 24 07 10 0898:A9 35 20 81 09 AY 36 08A0:81 09 38 BO 0A AY 32 08A8:81 09 A9 38 20 81 09 08B0:30 20 81 09 A9 O1 85 08B8:E6 19 A4 19 CO 28 90 08C0:A9 OD 20 81 09 Ag OA 08C8:81 09 68 68 10 9D 68 08D0:85 1A 68 85 1B 48 8A 08D8:A9 00 85 06 A2 08 DO 08E0:B0 74 30 DO 10 £8 Aa 0888:B1 1A 25 08 C9 01 66 08F0:CA 24 07 10 08 AS 09 08F8:01 85 09 DO E9 18 AS 0900:69 04 AO 1C 84 09 24 0908:D0 25 06 1A 90 1D 69 0910:18 AO 04 84 09 24 09 0918:14 AS 1A 69 50 49 FO 0920:02 49 FO 85 1A AS 1B 0928:E0 90 02 69 EO 66 1A 0930:1B AY 00 85 09 EO 00 0938:AD AS 06 24 07 70 02 0940:FF 20 81 09 24 07 10 0948:A5 09 49 01 85 09 DO 08 30 E 10 8E 85 1B 20 81 09 A 41 09 AQ OD 20 81 09 20 81 09 A9 1B 20 AQ 44 20 81 09 A 81 09 A9 20 20 EA sous 20 OE £0 Ag 20 Pom's n° 31 A6 1C 6C FA 00 90E0:A9 11 8D EC B7 20 B6 SC B9 84 CO 29 80 FO 46 20 CB 9C AE AA AD AE AA Ag 80 AE AA C9 Récapitulation SS aa bo we 2 FONC.C 1E DO FO B9 9C B3 po 15 Aprés avoir saisi ce : AA B9 B9 B3 8D ED code sous moniteur, B@ B3 30 C7 8D EC vous le sauvegarderez OE A2 06 8E 5C AA par: 9138:20 F5 9C 20 93 FE 4c DS BSAVE SOURIS.C, A$301,LSA2 9140:A6 8D AF AA 20 CB 9C A2 9148:0C AS 1E A4 1F 20 EE 9c 0301:A9 FO 85 06 4C 0C 03 0308:A9 0B 85 06 A9 60 85 07 0310:A5 B@ 48 AS B9 48 20 2c 0318:D5 AE 00 02 FO 19 A2 00 0320:86 13 20 6D D5 A¥ B2 91 B4 £9 04 85 1E 8D 0328:06 88 AJ 3A 91 06 88 BS AD BC B4 £9 00 85 0330:FC 01 91 06 88 DO F8 68 Fl B7 AS 04 8D DA 0338:85 B9 68 85 BB 60 AD 83 6D BD B4 8D AB AA 0340:CO AD 83 CO A9 00 85 08 8D E2 9C 8D AF AA 0348:85 06 A9 EO 85 07 AY 20 B3 FO 22 20 D9 9C 0350:85 09 A2 20 60 20 3E 03 AA EE Fl B? E6 1F 0358:A0 00 Bl 08 11 06 91 08 E0 FE BO 1D BD BD B3 0360:88 DO F? E6 07 E6 09 CA 20 EA 9C 20 BB 9C 0368:D0 EE AD 81 CO 60 A9 00 85 48 8D DA 9C AD 85 07 8D E2 9C 20 D9 9C AO 00 AD BC B3 FO E3 20 06 91 AD BD B3 8D ED B? 88 DO 5 ii ji * 20 E6 $C AD BC B3 DO £6 Recapitulation B7 4C 19 9C BD BB E03 AD CHARGE.OBJ Aprés avoir saisi ce code sous moniteur, vous le sauvegarderez par: BSAVE CHARGE. OBJ, A$9000,L$22B EC B7 E8 BD BB B3 B7 BE AE AA A9 B7 20 BS B7 90 11 A2 0A 9C AO 00 B9 BB 1E C8 CO 00 DO Fé 33 D0 02 a0 Ba Ad Récapitulation FO B7 8C Fl B7 60 DHEL.C AA 85 1E AD AD AA 9000:A9 00 8D F6 03 AG 9B BD 9008:F7 03 A9 4C 8D F5 03 A2 60 . . 9010:00 BD 2B 90 9D 00 9B £8 Aptesnavels Bates .ce 9018:D0 F7 BD 2B 91 9D 00 9¢ Gods yeous: mont teur, 9020:E8 DO F7 A9 9A BD 01 9D ie 5 . vouside sauvegarderes 9028:4C D4 A? AS 1B 8D AC AA Récapitulation cave HeL.c, aS300,1$36 9030:A5 1F 8D AD AA AO 00 8&C ERREUR vee ’ 9038:EB B7 20 B7 00 C9 22 DO S300TKS BO FF.OVRY BO BSL08 9040:23 A9 06 85 Cl 20 B1 00 7 9048:C9 22 FO OC 09 80 99 75 Aprés avoir saisi ce code sous O3082A2 120.AD:.BE:.60 AD; 8BiCO 9050:AA C8 CO 1E 90 EF BO 34 moniteur, vous le sauvegarderez 0320220 27 ORAS DO 85 08:09 9058:A9 EF 85 Cl 20 B1 00 co par: 0918.00 Bo O8iA2'30 AD 81 :C0 9060:00 DO 4c 60 AS Be 48 AS BSAVE ERREUR, A$3A3,L10 0320:AD 81 CO 20 27 03 60 AS 9068:B9 48 20 7B DD 24 11 30 0328:00 AO 00 91 08 88 DO FB 9070:08 A2 AZ 20 FS 9C 4C 12 03A3:68 A& 68 A6 DF QA30iBe 09 CA DOS 00 9078:D4 68 85 B9 68 85 B& 20 03A8:9A 48 98 48 60 9080:E3 DF 85 1E 84 1F AO 00 9088:B1 1B DO 05 AZ OB 4c OA La qualité de ce programme et son volume le destinaient & étre eee ee eu ee ABLAANG Et ae vendu par Pom’s en “produits édités a part”. sonono a0 ke sn ob ap oye Nous avons préféré vous faire profiter de ses nombreuses GORB-AA.CB COAB-AA DO Fava Possibilités en l'insérant dans ces pages ; la place nous 90B0:A0 99 75 AA C8 CO 1E DO manquant pour les sources, seuls les fichiers nécessaires au 90B8:F8 8D BO AA 20 F5 9c 20 fonctionnement sont listés ici. 90C0:B7 00 FO 12 20 BE DE 20 Les lecteurs qui souhaitent approfondir la programmation ou 90C8:67 DD 20 52 E7 AS 51 C9 90D0:02 90 B9 4E BO AA AG 01 90D8:8D F4 B7 A9 10 8D ED B7 adapter le logiciel 4 leurs besoins trouveront cette fois les sources sur la disquette d'accompagnement. Pom's n° 31 21 22 OGO: es sauts du Basic ui n'a jamais eu de probléme 4 relire un programme complexe, constitué nombreuses sous- routines et donc truffé de GOTOs et GOSUBs, voire de RuNs ? En effet, si beaucoup de Basics autorisent les sauts vers des routines précédées d'un nom, d'une étiquette, l'Applesoft n'accepte que les sauts spécifiés par numéros de ligne, d'ot des listings souvent trés hermétiques. de Le but de cet article est donc de modifier les commandes Goro, GOSUB et RUN par l'intermédiaire de l'ampersand («), afin d'obtenir une plus grande facilité pour réaliser et maintenir les programmes. Fonctionnement Bien que le listing soit entiérement commenté, il est nécessaire de présenter certains sous-programmes de la ROM Applesoft : CHRGET : positionne TXTPTR sur le caractére suivant, puis va le lire. Lorsque c'est un espace, il recommence. On peut donc faire précéder le début du Rem d'autant de blancs que l'on voudra, sans pour autant devoir les remettre dans l'étiquette qui suit le coro ou le GosuB. D'autre part, CHRGET sSignale les fins d'instruction et donc aussi les fins de ligne de programme en mettant la retenue (carry) a 1. DATA : se place 4 la fin de l'instruction en cours. Si on fait un ump, il permet d'exécuter la prochaine instruction. Ainsi, on obtient coucou dans l'exemple suivant avec un saut & GOTO "TRUC : 100 PRINT "SALUT": REM TRU c 110 PRINT "CoucouU" GOTO: va tout d'abord lire le numéro de ligne pointé par TXTPTR, le range en LINNUM, puis continue par GOTOBIS, qui recherche la ligne stockée en LinnuM. GOGO se branche donc automatiquement en GOTOBIS, aprés avoir stocké en LINNUM le numéro de la ligne suivant le REM voulu. GOSUB : place d'abord sur la pile du 6502 la valeur de rxrPrR (2 octets) puis de cuRLIN (2 octets) qui est le numéro de la ligne en cours d’exécution et enfin le type de commande ($B0 pour Gosus). Puis Gosus appelle Goro et exécute la ligne par NEwsTT ($D7D2). Le RETURN reprendra les informations de la pile pour savoir ot il faut reprendre le programme. Pop les supprimera tout simplement, sans les utiliser. Utilisation Il suffit de modifier légérement vos lignes de fagon a répondre a Ja syntaxe suivante : 10 & GOSUB "ROUTINE" 20 & GOTO "FIN 100 REM ROUTINE 110... Patrice Neveu 120 RETURN 500 REM FIN DU PROGRAMME Attention, aprés GOTO, GOSUB OU RUN, il est indispensable d'inscrire les étiquettes a l'intérieur des guillemets (ou, au minimum, de les faire précéder d'un guillemet) car l'Applesoft le décomposerait (par exemple car enc ar, ar étant un mot-clé). Toutefois, la routine offre de la souplesse a l'utilisation puisqu'il est possible d'appeler un : REM Routine d'ouverture par un: & GOSUB Routine ou méme par un : & GOSUB Rout. Le retour d'un sous-programme se fait par le RETURN courant, ce qui permet aussi I'application de POP. Bien entendu, ce qui est valable pour la commande Gosus l'est également pour les GoTos et les RUNs. Ces trois commandes sont aussi utilisables depuis le clavier vers le programme directement. Dans cas ow la syntaxe ne serait pas respectée peut s'afficher l'un des message suivant : UNDEF'D STATEMENT ERROR (l'‘ampersand est omis) IL FAUT UN GOTO, GOSUB ou RUN (aprés I'ampersand) IL FAUT UN GUILLEMET (avant Je label appelé) LE LABEL N'EXISTE PAS (aucun REM ne commence par le label) Enfin, le programme source Pom's n° 31 T.GOGO se trouve sur la disquette . Pom’s au format TEXT, assemblable directement par Merlin/Big Mac. Pour conclure ce mode d'emploi, deux remarques : Afin d'éviter des catastrophes avec le Compacteur de Sylvie Gallet, (Pom's 22), il est nécessaire de supprimer les lignes 287 et 288. En effet, le Compacteur détruit tout ce qui suit le REM, ce qui nuirait naturellement au bon fonction- nement de GOGO ; ¢ GOGO est opérationnel aussi bien sous DOS 3.3 que sous ProDOS. 4 Programme GOGO.DEMO 10 PRINT CHR$ (4) "BRUN GOGO 1000 REM INITIALISATION 1010 TEXT : NORMAL : HOME 1020 INVERSE PRINT " DES SAUTS A GOGO, PROGRAMME DE DEMO. ": NORMAL : POKE 34,2 1030 VTAB 10 1040 PRINT " 1) LISTING DU PROGRAMME 1050 PRINT : PRINT " 2) CATALOGUE DU DISK 1060 PRINT : PRINT " 3) QUITTER 2000 REM CHOIX DU MENU 2010 GET A$:R = VAL (A$): IF R = 0 THEN & GOTO "CHOIX 2020 & R GOSUB "LIST", "CAT", "QUIT" 2025 GET R$ 2030 & RUN "INIT 3000 REM LISTING 3010 HOME LIST : RETURN 4000 REM CATALOG 4010 HOME PRINT 4020 IF PEEK (48896) = 76 THEN PRINT C AR$ (4) "CAT": RETURN 4030 PRINT CHRS$ (4) "CATALOG": RETURN 5000 REM QUIT 5010 END Source T.GOGO Assembleur Big Mac En format TEXT sur la disquette Pom's pour récupération par tout assembleur onc $8000 rene $07 + Stockage temporaire PoNuM scr > Pointeur dans 1a table des pages 4 protéger BUFFER = $0280 2 Buffer pour copier I'instruction aprés & CHRGETI $0300 Adresse de CHRGETO relogée RELOCER $0319 Message d'erreur lors du relogement ERROR $033F Message d'erreur de commande ERRORO $0350 age de manque de guillemet ERROR2 $0375 2 Message de label inconnu ow 50388 2 Tokens de GOTO Gasus RUN LENGTH $039¢ 2 Longueur de 1a commande & TxTPTR2 $0390 ? Sauvegarde de TXTPTR pour Jes GOSUB COMMANDE $039F + GOTO GOSUB ou RUN PLACE =~ $0380, 2 Emplacement du label dans le Ligne INDEX = —S03AL basic = ~— $0300 + Retour au Basic AMPERY = S03F5 + Vecteur de "6. cersurR = $BEFS 2 Pour déplacer les buffers BITMAP = SBFSB 2 Bitmap en Provos cLEARC s066¢ ; Mise 4 zero de 1a pile et des variables. Newstr $0702 Execute une nouvelle instruction Basic. corosrs $0955 Partie de GOTO ($0935): pas de LINGET (SDA0C) para $0995 Met TXTPTR 4 la fin de I'instruction Basic TROUT $50B3A Routine de sortie de chaine de caractéres GETADR $2752 2 LINWOM (entier 4 2 octets) < FAC MOVIN = SEAFS 2 FAC < (YAP TEXT $8539 Home SFCS8 coro = sa + Token de Goro RUN sac > Token de RUN cosua $20 > Token de Gosua EM $82 2 Token de REM * cette routine ¢ ‘environnement qu'elle trouve: S4 le Systeme d'Exploitation du Disque est le DOS 3.3, elle reste en $9400, 14 ot elle a été chargée. 54 le SED est le ProvOs elle abaisse les buffers de deux pages et s'installe entre eux et le Basic.system, puis + protége ces pages. yans les deux cas, 1a page 3 est occupée par des routines jes tables et des messages pour des problemes de logeabilité. Ell a protégée + On se trouve sous ProDos ? pesur LDA $8F00 2 Clest Le vecteur IMP du MII cM Esc BEQ. BUFF MP AMPERSET * On se place entre le Basic.system et les buffers de Provos. ooUFF LDA 63 JSR GETBUFR Bcc MOVER J Descend les buffers du DOS de 3 pages 2 Pour qu'on putsse se protéger 2 Le réserve de place s'est faite sans pb ‘ Conmandes disponibles . + §00T0 “Label” 2 Saute aprés la ligne REM qui * " contient le label E + gc0sUB “label” 2 Va au sous-programme commengant * . aprés 1a Ligne REM qui contient * . Je label. * * GRON “Label” : Execute le programme 14 0d se * . situe le label. * * & vR coro : Saute au label d'ordre vR + + vR cosua 1u sous-progranme d'ordre VR * + 6 VR RUN 2 Run indexé d'ordre VR * LINNUM $50 4 Numéro de la Ligne 08 1'on vi TxTTAR 367 3 Adresse du début du texte Basic. LOMEM 369 2 Adresse de la fin du texte Basic. ARYTAB 368 + Fin des vartables simples HIMEM $73 ) Plus haute adresse disponible, buffer Propos cuRLIN 375 4 Numéro de 1a ligne en cours d'execut ion. LASTVAR $01 + Nom de 1a variable @ rechercher (Sndex) vaRPNr $83 : Adresse de la valeur de la variable (index) cuRcEr $81 + Sous-routine de prise de caractére. curcor $87 2 Prend le caractére actuel. rererR = $88 ) Pointe sur le caractére 4 prendre. + erreur lors d'un des déplacement eReLoc usr TEXT JSR HOME LDA &<RELOCER LDY @>RELOCER JSR sTROUT war MP owAIT MoveR FQU * STA PROGADR+2 STA. pRotect+1 STA AMPINIT+ Tax INK STX PROTECT+2 TNX STX PROTECT+3 2 Prépare le déménagement de 1a routine Pom's n° 31 23 moves STA Tay LDA arr ona STA £0 PROGADR+i coco SEPEF : move! ; moveo over? Moves? FIN Chargement de I'octet pour le remettre 4 lendroit désigné par Props Passe au prochain octet Vérifie si on a termine Moves MOVEHI <FIN Move1 Moves PROGADR+ wove PROGADR+2 Move Ja page $03 et celles du programme relogé. vz] s IL y a 4 pages 4 provéger PoNuM Fon se sert d'un compteur PONUM 2 Quel est le numéro de la page 4 protéger ? PROTECT,Y ; 11 est dans la table 2 Sauvegarde tesporaire on divise par huie pour déterminer I'octet 00 se trouve le bit de 1a page recherchée 4 Dang X pour aller dans 1a table du Probos BITMAP, ( page 16 du pom's 22) TEMP 2 On le sauve pour usage ultérieur Reprise du n° de page rz) 2 Dont on ne garde que le bit de position 2 Qui sert a chercher le masque AITMASK,Y ; Pour mettre a1 le bit de la page occupée TEMP 2 Verifie se clest déje occupe ERELOC TEMP BITMAP,X ; Puls on met a Jour Ja AitMap PoNuM 2 BE on passe @ la prochaine page wxrec + Déplacenent d'une sous-routine du programme pour rester + relogeable en MovertN Loy LDA STA DEY ceY BNE + Inttsalise AMP INIT Loa Loy STA sty ars environnement ProDOs eae J Nombre d'octets 4 mettre en $0300 CHRGETO,¥ ; Ce sont essentiellenent des tables CHRGETI,Y¥ : et des messages, plus deux routines 2 appelées par JSR et donc non-relogeables. SSF MoveRTN le vecteur ampersand sous ProDos SPF 7 Liampersand ira au début du buffer donné £0 2 par Probos AMPERV+2 AMPERV+1 + Initialise le vecteur ampersand sous DOS 3.3 AMPERSET LDA (GOGO: bY STA sty LDA wy STA sry Maintenant, 1'6 ira directement & GoteGosub. <coGo AMPERY+2 AMPERV+1 woesur cevesT HIMEM® BIMEM Fixe HIMEM sous DOS 3.9 pour éviter les variables intenpéstives + péplacement d'une sous-routine du programme en DOS 3.3 MOvERTNI ooo cere Loy LDA sm bey cer BNE verification de 14a 4 Nombre dioctets & mettre en $0300 CHRGETO,¥ ; Ce sont essentiellenent des tables CHRGET!,Y ; et des messages, plus deux routines » appelées par JSR et donc non-relogeables. asFF MovERTNI 2 Retour au Basic. Ja syntaxe des conmandes a cuncot —; Necessaire pour prendre le ler caractére BUFFER; suivant 1's. On stocke le résultat en SUFFER. cuRGET —; Boucle pour Iire et stocker 1a suite de 1a IDENTIFY 7 commande. A=0 si fin d'instruction. STA INK BNE IDENTIFY £00 Dex s1x 1x IDENTIFY LOA cM BNE oMe IDENTIFY2 EQU DEX APL 10x ISINDEX + Lecture de YAINDEX FOU PHA TxA SNOLET STA SRCHVAR FOU cupvar SRCHVAR! EQU NxTVAR vREvEov VAREND VARFOUND EQU Loy INK BUFFER, x cero ener 2 cM, x SUFFER IDENTIFY? LEGAL IDENTIFY! £0 BUFFER, x E070 YAINDEX ecosus YAINDEX RUN YAINDEX LENorH ISINDEX E>ERROR E<ERROR sTROUT BASIC J index £0 BUFFER, ¥ LASTVAR a SNDLET £0 LASTVAR+ SRCHVAR BUEFER, ¥ LASTVAR+ LOMEM LOMEM?2 vaRENT VARPNT+ £0 (WARPNT) »¥ LASTVAR nxrvar VARPNT SRCHVARL VARPNT+ (arent), ¥ LASTVARY VAREND VARPNT £6 ARENT vRFYEOV VARPNT+1 VARPNT+2 ARYTABY CMPVAR NOvAR VARPNT aRYTAB cMPVAR £0 INDEX VARFOUND VARPNT? vARPNT Pour identifier la commande envoyée. On décremente 1a longueur de 1a commande de & > pols on 1a range pour usage ultérieur. 7 IL ¥ a trois conmandes possibles. On commence > par la derniére. 2 EE on compare au token rangé dans le buffer. St clest autorisé, d'accord... Sinon, passe 4 1a prochaine ! PBC Ul n'y ena que 3... 2 On a peut etre un saut indexé Alors sachant que 1a variable est au début, 5 on recherche Je GOTO,cOSUB, RUN 2 C’est bien un saut indexé + Recherche d'un saut quelconque sur toute 2 Ia longueur de ta Ligne 2 SL clest 1'Incennu, 2 de command alors signale I'erreur 2 Bt retourne au basic. 4 Lecture de 1a lére lettre de la variable IL y a une ov plusieur lettre dans le nom ? 2 Va prendre la 2nd 2 On se place au début de la zone des 2 variables simples afin de rechercher 2 notre index + Et on compare 1a variable étudiée avec celle 2 quion a trouvé aprés I'anpersand + On rajoute 6 ou ? celen ce que Ia lere lettre > était convenable ou non ) Va vérifier si on a vu toutes les variables + Acton terminé 1a zone des variables simples 2 La variable n'existe pas, donc 0 2 Pour indiquer 4 FAC 8 se trouve Ja valeur 2 de 1 index 24 Pom's n° 31 PUTINFAC LEGAL LEGAL NosurLe TESTINOX SEEKCOMA coma READY BNE PUTINFAC any no * JSR MOVE JSR GETADR equ * LDA LINNUM STA INDEX Pua PLA ANE LEGALL Fou * Lx £0 STX INDEX ‘STA COMMANDE INK LDA BUFFER, X cup £522 EQ. TESTINDX mu * LOY £>ERRORO LDA &£<ERRORO Usk stRour oMP BASIC Teste #!1 qu * Loy INDEX cer «2 cc READY mu * LDA BUFFER, X cM gt," BEQ. COMA INK eX LENGTH BNE SEEKCOMA RTS INK LDA BUFFER, x cme £522 BNE NOGUILL Dey ceY fl BNE SEEKCOMA zou * INK STX PLACE faut Puls converti¢ FAC en entier dans la variable en FAC LINNUM on a un index Clest bon, IL n'y a pas d'index Alors range le type de commande qu'on a eu. Puls verifie I'existence du guilienet avant le labet- 522 est le code de” S71 y est, on peut aller chercher Je label apréa le REM. Sinon, clest raté, on doit tout arreter. Indexer et si oul alors allens-y On n'indexe que si on doit Iire aprés le ler Sinon, on est déja pret... on recherche Jes virgules car elles marquent 2a fin d'un label a rechercher: c'est un séparateur dans 1a liste de label Mais 41 faut quand mene rester dang les limites de la ligne # étudier St Lindex > nombre de labels, alors on sort Aprés une virgule, on doit trouver un ” Sinon c'est une erreur Passe ay prochain de 1a et sf on est au bon, alors 11 faut y aller on est pret 4 rechercher le label Sauve le début du label + Recherche d'une instruction REM dans le texte. SEEKREM SBERREM2 READLINE PINLAB READREM usr ome EQ use BNE cM EO BNE Fou rxrprR TATPTRE TxTPTRE TXTPTR2+1 TxTTAB Txrrag+1 rxTPTR TXTPTRO cunceTy curcert curcer1 LINwuM cuRGET! LINNOM?2 curser curoer1 READLINE £00 SEERREM SEERREM2 burrER, x Regarde bien ol on en est dans le texte. puls sauve pour plus tard peut-etre. Fixe le pointeur au début du progranme. (moins 1) Va lize les 2 octets qui de 1a prochaine ligne. donnent I ‘adresse Passe aussi et en passant, les 2 octets du numéro de ligne. on stocke. Puts on 14t le début de I ‘instruction. Est-ce un REM? oui ! alors on va aller Je lire. Non alors on pagse a la prochaine instruction Fin de ligne ? oul, va sauter ce qu'il y a avant Je texte. Non alors teste un REM. Le début du label cOMPREM JSR BEQ wy cey BEO cey BEQ ow BNE Nx cex bee + Execute ce! EXECLIN EQU LDA cue EO cue BEQ LDA sR oe EXECRUN EU BO EXECRUN2 JSR aNE EXECRUNI QU JSR ome ExECGOTO FOU Me » curcer qui cHRGETO EU oooer PRNTEND LOY LDA JSR Me cuRoETI FINLAB BUFFER, X BUFFER, X READLINE LENGTH COMP REM tte Ligne 1 cOMMANDE fo0T0 ExECoOTO RON EXECRUN vz) $0306 TXTPTR2+1 revere CORLINGL cuRLIN coMmanoe curcor coroais NewsTT curcor EXECRUNI cuRceT1 PXECRUN2 Newsrr pata controle 1 TXTPIRe! LOMEM!1 coer TxrPTR Lome PRNTEND cuRcer E>ERRORZ E<ERROR2 sTROUT BASIC + Messages divers 41 faut le comparer avec ce qui suit le REM > Fin da REM ? 2 Dans une liste, une virgule ou des 2 guillemets signifient une fin de label 4 2 rechercher- 2 Mais clest différent, donc... ) Si clest identique, essaye plus loin ! ? Mass ce n'est pas la peine d'en faire trop. 4 2 Selon ce que c'est, on n'agit pas paresi: 2 Clest un GOSUB qu'il faut executer, 2 Ceci est le début de Ia routine Gosus, mais y la difference est qu'on ne va pas lire Ie n* 2 de ligne qui suit puisqu'on 1'a remplacé par 2 un label. 2 Dans ia pile, renarquez qu'on place. 2 TXTPTR d’od on part, 2 CURLIN qui stexecute encore, > COMMANDE pour signaler que ce qui se trouve + dans 1a pile vient d'un GOSUB par exemple. 4 Ca y eat au lieu d’aller en GOTO ob on aurait Iu un n° de ligne, on ne le fait pas: on se branche aprés (GOTOBIS) 2 Est-on déja en fin de ligne ? 2 Si out, alors fait le RUN... : Sinon, i] faut se placer en fin de ligne. Mise 4 zero de la pile et des variables > Execution de la prochaine instruct fon. 2 Crest 2 au but un GOTO, et comme on a déja fixe TxTPTR du saut, on execute... a fin au texte. Avant de lize un caractere du prog., on doit ) stassurer qu'on est toujours d

Showing the first 100000 of 260796 characters.

mp.ls