Nº147 (7/2002)
|
|
|
Download :
|
Vous avez entre les mains un Ceo-Mag de 70 pages. Le record absolu ! Et encore, j'ai été obligé de saucissonner de bien bons articles, arrivés au dernier moment (suite au prochain numéro...). Il devrait donc y en avoir pour tous les goûts. Ceci reflète en grande partie la foison des innovations, dont Fabrice, Thierry, Simon, Mickaël, Jim, etc. ont fait preuve. La dernière Visu a été de ce point de vue tout à fait exceptionnelle et pourtant (coupe du monde?), il y avait bien peu de participants... Cordialement. A |
|
Claude Sittler nous a fait parvenir un bien triste faire-part.
Notre ami René Hutin est décédé le 7 mai 2002. Ancien ingénieur en électronique médicale, il était âgé de 76 ans. Passionné d’Oric, c’était l’un des fidèles parmi les fidèles. Je ne pense pas que nous ayons une photo de lui, mais il a souvent fait le déplacement de Normandie pour participer à nos Visus et les habitués se souviendront de son visage et de sa gentillesse. Nos pensées vont à son épouse et à sa famille.
Ce Ceo-Mag lui est dédié. La paix soit avec lui.
|
|
|
|
|
|
sommaire
|
Adresses CEO / Sommaire / Editorial |
|
Page 2
|
Courrier Oricien / Petites Annonces / Bonnes Adresses |
|
Page 3-6
|
Compilateur C Pour Oric |
|
Page 7-9
|
Un Nouveau Clavier Pour Votre Oric |
|
Page 10-12
|
Anecdote : Je Suis Un Kamikaze |
|
Page 13
|
Atelier : Utilisation Des 65C02, 65C22 & 27C128 |
|
Page 14-15
|
Amélioration Du Programme ‘Miroir Sphérique’ |
|
Page 16-18
|
Répertoires Pour Sedoric |
|
Page 19-20
|
Brèves : Tap2CD & Trigonométrie |
|
Page 21
|
Evoluez ! Première Partie : Programmez Structuré ! |
|
Page 22-24
|
Information : Le Patrimoine De Romuald |
|
Page 25
|
Deep Freeze Mice : I Love You Little Bo Bo |
|
Page 26
|
Hist’Oric : Le Pravetz-8D |
|
Page 27
|
Sommaire Des Listings De Théoric |
|
Page 28-32
|
La ROM V1.3 : Un CLOAD Amélioré |
|
Page 33
|
Oricien, Qui Es-Tu ? : Jim Cuomo |
|
Page 34-35
|
Listing Du Mois : Acrobates |
|
Page 36-38
|
Divertissements Mathématiques et Logiques |
|
Page 39-40
|
Votre Feuilleton : Le VIP3 Forum |
|
Page 41
|
Réponses (22) : K7, Readdsk, Fonts pour Listings |
|
Page 42-44
|
Shoot Again (43) : Bering |
|
Page 45-48
|
Nostalgie... : Graphiscop |
|
Page 49-50
|
Aide New Sokobac et Nouveaux Problèmes Rush Hour |
|
Page 51-55
|
La Libairie Oric (36) : Le Pravetz-8D |
|
Page 56
|
Banc d’Essai : Musigraph |
|
Page 57
|
Compte-Rendu De La Visu Du 8 Juin |
|
Page 58
|
Quelques Photos De La Visu |
|
Page 59-61
|
Réalisez Une Carte Contrôleur pour Microdisc |
|
Page 62-64
|
Oricien, Qui Es-Tu ? : Steve Marshall |
|
Page 65-67
|
Pratique : Table De Conversion Décimal/Hexa/Binaire |
|
Page 68
|
Pratique : Grille Des Adresses de l’Ecran Text |
|
Page 69
|
Abonnements, Anciens Numéros, Anciennes Disquettes |
|
Page 70
|
|
Présenté à la visu de Juin (merci André !), le Basic Evolution est compatible avec 99% (environ ;-) des programmes existants, mais il apporte deux évolutions majeures tout en restant dans l'esprit des Basic Oric :
- des structures de contrôle IF et WHILE structurées à la Pascal ou Ada,
- des «Â subroutines » à la Fortran, avec paramètres d'entrée et de sortie, et variables locales.
Encore une fois, personne ne vous oblige à les utiliser et les programmes écrits en Oric Basic 1.1 tourneront comme à l'accoutumée, vous n'avez donc que des bonnes chose à gagner en remplaçant votre ROM 1.1 par cette rom «Â Oric Evolution Basic v1.0 »â€¦ Et puis, je suis certain que bientôt vous ne pourrez plus vous passer du confort apporté par ce Basic !
Je vais vous présenter les nouveautés de ce Basic sur une série de 3 articles, vous aurez tôt fait de comprendre les différentes significations du terme «Â Evolution Basic » …
1. Le IF structuré
On va commencer par un petit test : à votre avis, qu'affiche l'instruction Basic 1.1 suivante ?
IF 1<2 THEN A=1Â : PRINTÂ ''VRAI'' ELSE A=0Â : PRINT''FAUX''
Facile ? Faîtes le test sur Oric… surprenant, non ? Et oui, si la condition est vraie, l'Oric ne saute qu'une instruction du ELSE… Allez, un autre petit test :
IF 2<1 THEN IF 0=0 THEN PRINT''A'' ELSE PRINT ''B'' ELSE PRINT''C''
Vous avez trouvé ? Notez la différence de comportement sur Oric-1 (Basic 1.0) et Atmos (Basic 1.1) : après avoir constaté que la première condition est fausse, l'Oric-1 ne tient pas compte du IF imbriqué et saute au premier ELSE rencontré, affiche B et saute le deuxième ELSE. L'Atmos, lui, cherche le ELSE, mais lorsqu'il trouve le THEN imbriqué, décide d'aller à la fin de la ligne sans rien interpréter du tout, et n'affiche donc rien…
Bref, la gestion du ELSE dans les Basic de Tangerine a toujours été problématique : le ELSE n'existait pas dans le noyau Microsoft, et le Microtan n'en était donc pas pourvu. En ajoutant un ELSE dans le Basic de l'Oric-1, les développeurs de Tangerine ont eu une approche de bidouilleur, sans se douter sans doute que ce petit ajout à la grammaire du langage introduit une ambiguïté (pour les spécialistes, la grammaire n'est plus «Â context-free », ni même LR(1)), et nécessite donc des modifications importantes dans l'interprétation de cette grammaire. De fait, pour qu'une condition IF…THEN…ELSE marche bien sur Oric, il faut qu'une seule instruction suive le ELSE et qu'il n'y ait pas de IF imbriqué.
Oric Evolution Basic garde le IF du Basic 1.1 et ses bugs (pour la compatibilité avec les programmes existants), mais rajoute un deuxième IF structuré sur plusieurs lignes :
110 IF 1<2
120 THEN A=1Â : PRINT''VRAI''
130 REM LA PARTIE THEN PEUT S'ECRIRE
140 REM SUR PLUSIEURS LIGNES
150 ELSE
160 REM LA PARTIE ELSE AUSSI BIEN SUR
170 A=0Â : PRINT''FAUX''
180 END IF ' VOILA CE QUI INDIQUE LA FIN DU IF
Dans cette nouvelle syntaxe, le THEN est reporté à la ligne suivante, c'est ce qui permet de distinguer l'ancienne et la nouvelle forme du IF puisque les deux sont acceptées. Bien entendu, la nouvelle forme permet d'emboîter des conditions sans ambiguïté ni surprise (de même que pour les boucles FOR, le nombre d'imbrications n'est limité que par la taille de la pile).
200 IF 2<1
210 THEN
220 IF 0=0
230 THEN PRINT''A''
240 ELSE PRINT''B''
250 END IF
260 ELSE
270 PRINT''C''
280 END IF
Il n'y a pas de limitation au nombre d'instructions que l'on peut mettre à l'intérieur de la partie THEN ou de la partie ELSE. De ce fait, et afin d'accélérer la recherche du ELSE (lorsque la condition est fausse) ou du END IF, il faut obligatoirement que les mots clés THEN, ELSE et END IF soient les premiers sur leur ligne : ils ne sont pas recherchés ailleurs (et cela permet aussi de faire la différence avec l'ancienne forme du IF).
2. Le «Â Tant que »
Le WHILE… END WHILE est une structure de contrôle plus générale que le REPEAT…UNTIL : elle permet d'écrire des boucles dont le corps (les instructions qui se trouvent à l'intérieur) peut s'exécuter un nombre de fois quelconque, y compris 0 (alors que le corps d'un REPEAT…UNTIL s'exécute toujours au moins une fois). Si on a REPEAT plutôt que WHILE sur notre Basic Tangerine, c'est bien sûr parce que le REPEAT…UNTIL est plus facile à implémenter (mais quand on a déjà implémenté une routine qui cherche les ELSE ou les END IF tout en comptabilisant les IF THEN ELSE imbriqués, il y a peu de choses à rajouter pour que la recherche puisse se faire aussi sur des END WHILE, en comptabilisant les WHILE imbriqués). Un exemple :
10 WHILE A>0 AND B>0 ' CALCUL DU PGCD
20 IF A
30 THEN B=B-A
40 ELSE A=A-B
50 END IF
60 END WHILE
Comme pour les ELSE et END IF, les WHILE et END WHILE doivent donc être les premières commandes d'une ligne, ce ne devrait pas être une contrainte très difficile à gérer parce qu'on prend vite l'habitude de faire ressortir la structuration d'un programme en le présentant de façon indentée comme dans tous les exemples montrés ici. J'ai parlé d'indentation ? Mais oui…
3. La présentation des programmes
L'entrée des lignes de programme (plus exactement le codage ou «Â tokenisation ») et la commande LIST ont été réécrites pour faciliter une meilleure présentation et donc une meilleure lisibilité des programmes. On oublie souvent qu'une ligne de programme est tapée une fois, mais lue et relue des dizaines de fois : il faut donc faciliter cette lecture. Les Basic Tangerine éliminaient les espaces de début de ligne et gardaient les autres… je fais le contraire. Garder les espaces en début de ligne permet de montrer à quel point une instruction est imbriquée à l'intérieur des structures de contrôle IF, FOR, REPEAT ou WHILE. Rien ne vous oblige à mettre des espaces toutefois (on peut légitimement trouver qu'un espace est un octet gâché…) et le Basic Evolution supprime d'ailleurs tous les espaces qui ne se trouvent pas en tête de ligne, de façon à obtenir une présentation la plus homogène possible. La commande LIST rajoute des espaces à l'affichage, mais rassurez-vous, ils ne sont pas stockés dans votre programme. Amusez-vous à tester cet affichage bien présenté et vous constaterez que la commande ne se débrouille pas trop mal…
Par exemple, vous pourriez avoir une hésitation en lisant la ligne suivante :
10 IFSORTTHENAME=BANDIT
Heureusement, en faisant un LIST, vous n'en aurez plus :
10 IF S OR T THEN AME=B AND IT
Cela me donne envie d'ouvrir une parenthèse et de vous raconter une anecdote à ce propos : contrairement à la plupart des langages, les espaces ne sont pas des séparateurs en Basic, ils sont tout bonnement sautés par l'interprète (par exemple, 1 0 IF A 1=2 THEN3 0 est équivalent à 10 IF A1=2 THEN 30), et les mots clés sont recherchés même à l'intérieur des noms (mais curieusement, les mots clés ne sont pas détectés si un espace les coupe en deux : HI RES provoque une «Â syntax error »). Ceci pose souvent des problèmes pour le choix des noms de variables (les noms de variables doivent être choisis de sorte qu'ils ne contiennent aucun mot-clé : impossible d'utiliser les variables TABLE, SORTE ou FUSION par exemple). C'est très regrettable, à mon avis il faudrait une routine d'encodage des lignes un peu plus sophistiquée qui ne cherche pas les mots clés à l'intérieur des séquences alphanumériques, mais ce faisant, on aurait un comportement non compatible avec les Basic Tangerine (c'est à creuser malgré tout…).
Pour en venir à l'anecdote, je voulais dire que Fortran est un langage qui permet lui aussi d'insérer des espaces non significatifs à l'intérieur des noms de variables, et que cette propriété est à l'origine d'un ratage célèbre : celui de la sonde Voyager 1 qui est passée à 500000 km de sa cible au lieu des 50000 voulus. Il a pourtant suffit d'un simple point tapé au lieu d'une virgule dans une ligne Fortran du style DO 100 I=1,10 (qui veut dire : «Â exécuter les instructions qui suivent, jusqu'à l'étiquette 100, pour I allant de 1 à 10). En remplaçant la virgule par un point, les instructions suivantes n'ont été exécutées qu'une fois car la pauvre boucle s'est transformée en une simple affectation de la variable DO100I par la valeur 1.10 (il faut dire que Fortran partage une autre mauvaise propriété avec Basic : celle de ne pas nécessiter la déclaration des variables ; l'erreur aurait été découverte sinon…)
Programmez propre, programmez structuré avec le Basic Evolution !!
La fois prochaine, nous verrons la deuxième fonctionnalité majeure du Basic Evolution (en terme d'importance, c'est évidemment la première) : les procédures ou «Â subroutines ». Mais déjà , avec les trois points vus aujourd'hui, vous pouvez écrire de beaux programmes bien structurés, à tel point qu'un jour vous ne saurez plus ce qu'est l'instruction GOTO. Même les numéros de lignes ne sont plus utiles si vous écrivez vos programmes avec un éditeur pleine page sur PC : l'utilitaire TXTBAS a été mis à jour pour générer automatiquement des numéros de lignes avant transformation en fichier Basic pour Oric. Sur Oric, parce que l'édition d'un programme se fait ligne par ligne, les numéros de ligne permettent d'identifier quelle ligne doit être éditée, insérée ou supprimée ; mais il suffirait d'avoir un éditeur plein écran (en voilà une idée qu'elle est bonne !) pour que les numéros de ligne n'aient plus aucune raison de se faire remarquer…
Bien sûr, au début, il se peut que vous oubliiez de temps à autre un END IF ou un END WHILE quelque part… Rassurez-vous, un message d'erreur devraient vous aider : dès que l'interprète détectera une erreur d'emboîtement, vous verrez apparaître le message «Â STRUCTURE ERROR », soit en Français : «Â erreur de structuration ». Cette erreur est valable pour les IF THEN ELSE, REPEAT UNTIL, WHILE etc. : toutes ces structures de contrôle doivent être emboîtées et non entrelacées… Par exemple,
IF 1
THEN
REPEATÂ : A=A+1
END IF
UNTIL A=10
est incorrect et sera détecté lors du passage sur le END IF.
Bonne structuration à tous !
|
|
|
|
|
BROWSE
NUMEROS
[152] - [151] - [150] - [149] - [147] - [146] - [145] - [144] - [143] - [142] - [141]
YEAR
2013 - 2012 - 2011 - 2010 - 2009 - 2008 - 2007 - 2006 - 2005 - 2004 - 2003 - 2002 - 2001 - 2000 - 1999 - 1998 - 1997 - 1996 - 1995 - 1994 - 1993 - 1992 - 1991 - 1990
|