=PROGRAMMES EN BASIC ET FICHIERS LEX=

Voici ce que vous attendiez tant !

J'ai horreur de vous désappointer, mais vous avez tant appris dans les pages précédentes que je n'ai plus grand chose à vous enseigner. Vous avez déjà tapé un programme dans le HP-71 et vous l'avez exécuté. Que voulez-vous de plus ?

La maîtrise complète de la programmation en BASIC vient avec l'expérience, pas par des lectures. Cependant on peut accélérer sa propre expérience en examinant attentivement les programmes d'autres personnes. Laissez-moi seulement mentionner quelques bouffées de sagesse avant de vous laisser tomber dans un vrac d'une douzaine de programmes-exemples pour que vous puissiez voir de-ci de-la comment cela marche réellement.

Avant tout, si vous commencez à taper un programme déjà écrit, ne le tapez pas dans le fichier de travail "workfile" ! Au contraire, tapez :

EDIT PASSWORD

si le programme doit s'appeler PASSWORD, ou quel nom que vous voudrez. Rappelez-vous, le fichier "workfile" est réservé à l'usage de brouillon.

Si vous tapez le programme et qu'il semble ne pas marcher, n'oubliez-pas que presser les flèches haut et bas vous permet de vous déplacer dans le programme et d'y changer ce que vous voulez (ce ne sera pris en compte qu'après une pression sur [ENDLINE]). Les commandes TRACE VARS, TRACE FLOW et TRACE OFF sont très utiles pour trouver les erreurs dans les programmes. N'oubliez-pas non plus que vous pouvez exécuter un programme instruction par instruction avec [SST].

Comme l'apprentissage d'un langage se fait au mieux par imitation, voici un pot-pourri de programmes BASIC sélectionnés non seulement pour vous donner un aperçu de différents types de programmation, mais aussi parce que beaucoup d'entre eux vous seront utiles.

Tapez d'abord le programme tel qu'il est listé. Ensuite, vous pourrez essayer le programme et vous y plonger ligne après ligne pour comprendre comment il marche. Essayez alors de le modifier pour le faire marcher un peu différemment. Ou bien essayez une amélioration radicale, vous n'avez rien à perdre et BASIC à gagner !

Vous trouverez le commentaire des programmes ci-dessous et la liste en fin de chapitre.

==CALORIES ==

Un calculateur de calories pour Jogger Après un bon jogging, exécutez ce programme. Il vous demande votre poids, sur quelle distance vous avez couru et combien de temps il vous a fallu. Il calcule alors combien de calories vous avez brûlé pendant cet exercice. C'est un programme simple qui illustre les comparaisons IF/THEN et le principe d'élimination d'entrées indésirables.

NdT : j'ai traduit les mesures anglaises en mesures françaises de la façon la plus simpliste possible. Amusez-vous à améliorer cela.

==CMDSTK ==

Pour étendre ou réduire la pile de commandes. Vous ne pouvez-pas exécuter ce programme avec RUN. Vous devez l'appeler par CALL comme ceci :

CALL CMDSTK(5)

Ce qui donnera une pile de commande de 5 niveaux, comme usuel. Utiliser 10 au lieu de 5 donne une pile de commande à 10 entrées ! Vous pouvez aller jusqu'à une hauteur de 16, et le minimum est 1.

==<TOKENIZE ==

Ce programme ne demande pas de note. Tout ce qu'il fait est de lister sa propre première ligne et la montrer comme elle est stockée de façon interne. Par exemple, tapez :

1 BEEP 153

et CALL A

(deux pressions de touches). Vous verrez d'abord BEEP 153, puis 8EB0351 (7). Ceci signifie que BEEP 153 est "tokénisé" (on appelle "token" le code interne d'une instruction) de façon interne comme 8EB0351 (8E est BEEP, B0351 est 153), au total 7 quartets. Ceci a deux usages. Il est fascinant d'utiliser ce programme pour comprendre comment le HP-71 tokenise les diverses fonctions et commandes. Mais il est spécialement utile quand vous envisagez deux façons différentes de programmer quelque chose et que vous voulez savoir laquelle prend le moins de mémoire. Par exemple :

1 DIM M(3) @ M(1)=1 @ M(2)=2 @ M(3)=3

et

1 DIM M(3) @ READ M @ DATA 1,2,3

font toutes deux la même chose. Laquelle prend le moins de mémoire ? Entrez chaque ligne comme première ligne de TOKENIZE et faites CALL A pour voir le nombre de quartets utilisés.

==CRIBLE ==

L'ancien crible d'Erathostène.

Exécutez le programme et entrez un nombre (disons 100, ou 1000) donnant la limite où il doit s'arrêter. Le programme va lister tous les nombres premiers jusqu'à cette limite de façon incroyablement rapide. Il démarre doucement, puis les nombres premiers jaillissent. Si ce n'est pas le cas, votre DELAY n'est peut-être pas à 0. Ce programme illustre l'usage des tableaux et le truc pour utiliser la variable compteur d'une boucle FOR/NEXT dans la commande STEP.

==ERREURS ==

Exécutez ce programme et il vous demandera un numéro d'erreur. Entrez quelque chose comme 10 ou 20 et voyez le message d'erreur qui correspond à ce nombre. Pressez maintenant la touche flèche en bas pour descendre dans le "catalogue des erreurs" ou la touche flèche en haut pour remonter.

Presser toute autre touche provoque à nouveau la demande d'un numéro d'erreur. Notez comment le programme saisit une touche et voit si elle reste pressée pour répéter comme le fait CAT ALL. Le POKE ligne 10 est nécessaire au cas ou la dernière erreur ayant eu lieu avant l'exécution du programme aurait été celle d'un fichier LEX ou d'un module, auquel cas le POKE l'efface.

==<TELEPHON ==

Ce programme fait beaucoup de travail en peu de place. Il stocke les noms et numéros de téléphone dans un fichier DATA et vous permet de rechercher rapidement un numéro de téléphone. Quand vous exécutez ce programme pour la première fois, il vous demande combien de noms vous voulez au maximum dans votre répertoire. Donnez un nombre raisonnable, disons 30. Pour ajouter un nom & numéro de téléphone, pressez simplement A.

Note : Entrez les numéros de téléphone comme des nombres, ni espace ni parenthèses ni barre de fraction ni rien dans ce genre. Mon numéro de téléphone doit être entré : 7146332041.

Pour chercher de haut en bas à travers les noms, pressez H ou B. Pour voir le numéro de téléphone correspondant au nom affiché, pressez T. Pour voir à nouveau le nom, pressez N.

Pour corriger une personne affichée, pressez C et corrigez son nom ou son numéro de téléphone. Pour supprimer une personne du répertoire, appuyez sur S quand elle est affichée.

Pour rechercher quelqu'un, pressez R. Entrez quelques lettres significatives du nom de cette personne. Un nom va apparaître, suivi d'un point d'interrogation. Si c'est la bonne personne, pressez O ; sinon, pressez N pour continuer la recherche. Pour vider tout le répertoire et démarrer à vide, pressez V. On vous demandera si c'est bien ce que vous voulez, pressez N si la réponse est non, ou O pour oui.

Pour finir l'utilisation courante, pressez Q. Ne pressez pas ON !.

Si jamais vous oubliez le contenu du menu de commandes ci-dessus, pressez seulement M. Les lettres actives apparaîtront à l'affichage.

Ce programme illustre beaucoup d'astuces. Les labels du programme sont directement appariés aux touches pressées, par commodité (regardez la ligne 50 !). Les programmes gérés par menu sont toujours plus agréables d'emploi que ceux ou vous devez tout retenir ou répondre à des centaines de questions avant d'obtenir quelque chose. La gestion des erreurs élimine les erreurs d'entrée les plus communes. L'effacement par compression de fichier est rare en programmation, mais la technique utilisée ici de remplacement par le dernier enregistrement est rapide et commode.

==MENU ==

Ajouter

Bas

Corriger

Effacer

Haut

Menu

Nom

Quitter

Rechercher

Telephone

Vider

==FAITLEX ==

Ce programme a été écrit par le traducteur de ce livre (J-D Dodin). En effet le programme d'origine du livre contenait quelques erreurs. Il faut comprendre que ce type de programme et complexe. En traduisant ce livre j'ai été amené à assembler le travail fait aux USA, en France et au Danemark. Les danois étaient à ma connaissance les premiers à publier ce type de programme pour HP-71, les américains venant ensuite. Plus de détails dans le prochain chapitre.

Exécutez le programme. Entrez d'abord le nombre de quartets imprimé en haut du listage du fichier LEX. Ensuite tapez les codes hexadécimaux donnés, en commençant à la ligne 000. Ne tapez pas les espaces, ils ne sont là que pour faciliter la lecture. Après chaque ligne de code, l'entrée suivante est l'octet de somme de contrôle, tel qu'il est imprimé à droite de la ligne de codes.

Continuez ainsi jusqu'à la dernière ligne, après quoi le programme éteint le HP-71 puis le rallume. Ceci permet le chaînage du nouveau fichier avec les anciens et rend ses fonctions disponibles.

==REVLEX ==

REVLEX est un fichier LEX qui ajoute la fonction REV$ au BASIC. Essayez de l'entrer avec le programme ci-dessus. Dès que REVLEX est en mémoire, la fonction REV$ devient disponible au clavier et dans tous les programmes.

Tapez :

REV$("Ceci est un test") et voyez "tset nu tse iceC" en un éclair !

REV$ peut retourner une chaîne longue de 14000 octets en une seconde ! C'est tellement plus rapide que le BASIC que ce n'est même plus drôle !

==KEYWAIT$ ==

KEYWAIT$ ressemble à KEY$ en ce qu'elle renvoie la dernière touche pressée, telle qu'elle apparaît sur le haut de la mémoire tampon de clavier. Mais il y a une différence importante. Si la mémoire tampon est vide, KEY$ renvoie une chaîne vide.

KEYWAIT$, comme son nom l'indique, au contraire, attend qu'une touche soit pressée. Mieux encore, le HP-71 est placé dans un mode basse consommation de courant, ce qui fait qu'il ne dévore pas vos batteries ! Remplacer KEY$ par KEYWAIT$ dans le programme TELEPHON ci-dessus (en trois endroits) réduit de façon significative la consommation de courant du programme. Ce fichier LEX a été écrit par HP.

==SMATTER ==

"SMATTER" est un sigle pour "Self Modifying Algorithm Transcriptor That's Essentially Random" (Algorithme de transcription pour une auto-modification essentiellement au hasard). Il nécessite le fichier LEX KEYWAIT$, commenté ci-dessus.

Quand vous voyez le menu à l'affichage, pressez la première lettre de la fonction désirée : Code, Decode, Plus (ou le même message), ou Quitter. Quand on vous demandera le numéro clé, entrez un nombre secret que seul vous et votre correspondant connaissez.

Il peut être n'importe quoi, comme SQR(150+PI). Seulement, n'utilisez pas zéro

Tapez une ligne de texte à la fois puis continuez en tapant la ligne suivante. Pressez [ENDLINE] elle même pour revenir au menu. Des crochets sont imprimés autour des lignes codées et décodées pour mettre en évidence des espaces en début ou en fin de ligne. Je pense que ce code est incassable. Il résiste à tous les schémas d'analyse cryptographique que je connaisse. Pouvez-vous le casser ?

==LOCKOFF ==

LOCKOFF n'ajoute aucun mot au BASIC, mais il fait une chose étonnante. Il efface automatiquement le mot de passe créé par LOCK dès que vous allumez le HP-71

Les étudiants trouvent ça particulièrement utile parce que les "amis"

aiment placer des mots de passe bizarres dans votre HP-71, ce qui vous oblige à détruire des programmes importants. Gardez simplement ce fichier LEX en mémoire, et personne ne pourra verrouiller votre machine !

==CURLEX ==

CURLEX n'ajoute pas non plus de nouveau mot-clé, mais il simplifie beaucoup la programmation ! Quand vous voulez regarder une ligne très longue, il faut un moment pour déplacer le curseur. Ne serait-ce pas bien si la touche shiftée bleue [->] déplaçait le curseur non pas au bout de la ligne, mais juste à l'autre extrémité de l'affichage, en un saut de 21 caractères ? Devinez ! Aussi longtemps que CURLEX est en mémoire ET que vous êtes en mode USER, c'est exactement ce que fait la touche ! Essayez. Seulement ne le faîtes pas en mode CALC, ou vous aurez un résultat amusant. Le fichier LEX a été écrit par John Baker, premier magicien en fichier LEX !

==CLOCKDSP ==

CLOCKDSP est un fichier LEX long, mais je ne peux pas m'en passer ! Dès que vous le verrez en action, vous l'aimerez aussi. Il ajoute de nouvelles commandes au BASIC : CLOCK ON et CLOCK OFF. Après l'exécution de CLOCK ON, le HP-71 affiche une montre numérique en fonctionnement à droite de l'affichage, tout en vous permettant par magie de taper et de faire tout ce que vous voulez dans la partie gauche de l'affichage, comme d'habitude ! Il marche même en mode CALC ! CLOCK OFF efface la montre de l'affichage et vous redonne le contrôle de tout l'affichage. Comme il doit protéger la partie montre de l'affichage, le LEX effectue un WINDOW 13 toutes les secondes, ce qui rend la commande WINDOW inutilisable pendant l'utilisation de la montre. CLOCK OFF remet la WINDOW à la normale, que la montre ait été utilisée ou non. Ce fichier LEX a été écrit par HP.

Parlons français?.