This is the French translation of the Psion LZ/LZ64 Programming manual. It is also available in Italian.
French
1 Introduction à l'OPL Le menu Prog Création, sauvegarde et exécution d'une procédure Modif, Imprim, Dir, Copier, Efface 2 Procédures et variables 3 Boucles et branchements 4 Opérateurs 5 Manipulation des fichiers de données 6 Manipulation des différents types de fichiers 7 Traitement des erreurs Erreurs courantes Erreurs d'exécution Interception des erreurs 8 Exemples de programmes 9 Commandes et fonctions de l'OPL Récapitulatif Syntaxe des commandes Syntaxe des fonctions Liste des commandes et fonctions Annexes A Jeu de caractères de l'organiser Impression des caractères ne figurant pas sur le clavier Codes des touches spéciales Caractères de contrôle Caractères définis par l'utilisateur B Renseignements techniques C Programmation technique Adresses de mémoire D Messages d'erreur Index
(c) Copyright Psion PLC 1989
Tous droits réserves. Les droits d'auteurs de ce manuel et des programmes auxquels il fait référence sont la propriété de Psion PLC, Londres, Angleterre. Il est interdit de reproduire tout ou partie de ce manuel, y compris sur machine capable de reproduire ou d'extraire, sans le contentement explicite de Psion PLC. Tout désossage est également interdit.
Les renseignements fournis dans ce manuel sont susceptibles d'être modifiés sans préavis.
Psion et le logo-type de Psion sont des marques déposées de Psion PLC.
Psion Organiseur II, Datapak et Rampak sont des marques déposées de Psion PLC.
Part number : 6100-0077
V1Aug89
OPL est le sigle d'Organiseur Programming Language ou, autrement dit, du langage de programmation de l'Organiseur. Il possède un jeu de commandes et fonctions convenant à tous types d'applications - y compris la manipulation d'enregistrements dans les fichiers de données.
Pour accéder à l'OPL :
Le menu Prog vous permet d'écrire de nouveaux programmes et de les modifier par la suite.
Une fois que vous avez écrit des programmes en OPL, vous pouvez les exécuter à partir du menu Prog ou directement à partir du menu principal, même si vous travaillez dans la calculatrice ou dans le Tableur de poche.
Un programme OPL se compose d'une ou plusieurs procédures entrées séparément, selon son degré de complexité. En effet, les programmes simples se contentent bien souvent d'une seule procédure alors que les programmes plus complexes en appellent plusieurs.
En OPL, la méthode la plus efficace consiste à écrire de courtes procédures pouvant être testées individuellement. Chacune d'entre elles doit, idéalement, exécuter une tâche bien spécifique. Ainsi, les programmes ayant des caractéristiques similaires peuvent-ils se partager une procédure commune pour exécuter un même travail.
Ce chapitre vous explique comment écrire, sauvegarder et exécuter une simple procédure et couvre mini toutes les options du menu Prog.
Le menu Prog se présente de la manière suivante :
X 11:32 Modif Nouv Lancer Imprim Dir Copier Efface
Ses options sont les suivantes :
Modif | Vous permet de modifier une procédure existante. |
---|---|
Nouv | Vous permet d'entrer et de sauvegarder une nouvelle procédure. |
Lancer | Exécute une procédure existante. |
Imprim | Liste une procédure sur l'imprimante ou l'ordinateur connecté. |
Dir | Affiche la liste des procédures contenues dans le répertoire. |
Copier | Copie les procédures sur un autre périphérique. |
Efface | Efface des procédures. |
La procédure toute simple définie ci-dessous se contente d'effacer l'écran et d'afficher la date jusqu'à ce que vous appuyez sur une touche quelconque. Elle est appelée DATE:.
DATE: CLS PRINT "NOUS SOMMES LE",DAY;"/";MONTH GET
Nouv A:_
L'unité en cours est indiquée à la suite de Nouv ; ici, il s'agit de l'unité A: (la mémoire interne). Si vous préférez utiliser un autre Pack, appuyez sur MODE pour changer d'unité.
Vous devez tout d'abord entrer le nom de la procédure qui peut contenir jusqu'à 8 caractères et doit commencer par une lettre.
Le nom de la procédure s'affiche, suivi du signe «deux points» et du curseur clignotant.
DATE:_
Si vous n'êtes pas encore familiarisé avec les touches de l'Organiseur, consultez la section consacrée au clavier au chapitre 2 du guide d'utilisation.
Note : dans l'OPL, vous pouvez vous servir des majuscules et des minuscules sans aucune différence.
Vérifiez que la ligne que vous venez de taper est identique à celle-ci. Même les espaces sont importants ! Voici comment se décompose cette ligne :
GET
La fonction GET attend que l'utilisateur appuie sur une touche avant d'exécuter la suite du programme. Ainsi, lorsque vous exécutez DATE; la date reste-elle affichée sur l'écran jusqu'à ce que vous appuyez sur une touche quelconque du clavier.
Vous pouvez modifier le contenu de la procédure â tout instant :
En appuyant sur MODE, vous pouvez en outre vous servir de quatre des options du menu de l'éditeur :
Rech | Vous permet de spécifier un critère de recherche (appuyez sur ON/CLEAR pour supprimer le message Rech). |
---|---|
Début | Positionne le curseur au début du fichier de procédure. |
Fin | Positionne le curseur à la fin du fichier de procédure. |
Vider | Annule toutes les lignes en effaçant le texte de la procédure pour vous permettre de reprendre a zéro. |
Une fois la saisie de la procédure terminée, vous disposez de plusieurs possibilités :
Le schéma ci-dessous illustre les différences qui existent entre les différentes options, les flèches grasses indiquent la procédure normale de transcodage d'une nouvelle procédure :
Vous devez normalement sélectionner l'option Trans pour pouvoir exécuter la procédure. Voyons toutefois ce que font les deux autres options.
La procédure est transcodée en une forme que l'OPL est en mesure d'exécuter. Une fois que la procédure a été transcodée, le message Sauver A:DATE apparaît sur l'écran.
Vous pouvez maintenant sauvegarder la procédure transcodée.
Vous revenez ensuite au menu Prog. Lorsque vous sauvegardez la version transcodée, le texte original l'est également pour vous permettre d'exécuter la procédure et de l'éditer par la suite.
Si vous commettez une erreur de frappe, OPL s'en aperçoit au cours du transcodage. Ainsi, si vous tapez PRONT au lieu de PRINT, ou si vous oubliez des guillemets délimitant une chaîne, le message suivant apparaît :
ERREUR ERR SYNTAXE .................... Pressez SPACE
Lorsque vous sauvegardez directement une procédure sans la transcoder, l'OPL n'exécute aucune vérification d'erreur. Le texte est enregistré tel que vous l'avez entré.
Si vous avez commencé une procédure et que vous avez l'intention de la terminer par la suite, sauvegardez-la au lieu de la transcoder pour ne pas gaspiller de la mémoire en produisant une version transcodée qui ne sert à rien.
Il est préférable de sauvegarder les programmes dans l'unité A: ou dans un Rampak. Ainsi, s'il est nécessaire de produire plusieurs versions avant d'obtenir un programme fonctionnant correctement, les différentes versions n'encombreront pas l'espace mémoire disponible.
Une fois que vous avez produit la version finale de la procédure sur l'unité A:, il est recommandé de la copier sur un Datapak.
Une fois que la procédure a été correctement transcodée, vous pouvez l'exécuter.
Lorsque vous lancez la procédure DATE:, l'écran s'efface et un message similaire au suivant apparaît, selon la date du jour :
NOUS SOMMES LE 19/8
La dernière ligne de la procédure contient la fonction GET. Cette instruction se contente d'attendre que l'utilisateur appuie sur une touche du clavier avant de poursuivre. Vous devez donc appuyer sur une touche quelconque pour mettre fin à la procédure et revenir au menu Prog.
Les autres options du menu Prog, comme Modif, vous demandent de fournir un nom de procédure.
Si vous n'avez pas encore quitté l'éditeur de procédure, le nom de la procédure que vous venez d'utiliser vous est proposé automatiquement par les options Modif et Imprim. Appuyez sur EXE pour l'accepter ou sur ↓ pour obtenir la liste des procédures et sélectionner celle qui vous intéresse. Pour tout renseignement sur la sélection d'un nom dans une liste, consultez le chapitre 12 du guide de l'utilisateur.
L'option Modif du menu Prog vous permet d'accéder à une ancienne procédure pour la modifier ou y ajouter de nouvelles lignes.
Une fois la modification terminée, vous pouvez :
L'option Imprim vous permet de lister le contenu d'une procédure sur imprimante ou sur ordinateur personnel.
Si l'Organiseur n'est pas connecté à une imprimante ou un ordinateur personnel, le message d'erreur suivant apparaît :
PERIPH ABSENT
Pour tout renseignement complémentaire sur l'impression, consultez le chapitre 17 du guide d'utilisation.
L'option Dir du menu Prog affiche le répertoire des procédures enregistrées dans les différentes unités.
Dir A:_
Si nécessaire, choisissez une autre unité en appuyant sur MODE, puis affichez la liste des procédures au moyen de la touche ↓ comme nous l'avons vu avec l'option Dir du menu des outils. Pour tout renseignement complémentaire, consultez le chapitre 15 du Guide d'utilisation.
L'option Copier du menu Prog vous permet de copier une procédure d'une unité à une autre.
Copier Type de fichier .................... Opl Oplobj Opltxt
Opl copie le texte et le code objet transcodé de la procédure.
Oplobj copie uniquement le code objet transcoder
Opltxt copie uniquement le texte modifiable.
L'option Copier du menu Prog fonctionne de la même manière que celle du menu des outils.
Attention : lorsque vous copiez une procédure et que l'unité de destination contient déjà une procédure du même nom, celle-ci est effacée - même si elle ne contient que du texte et que vous copiez uniquement le code objet.
L'option Efface vous permet d'effacer des procédures sur les différentes unités.
Si nécessaire, changez d'unité en appuyant sur MODE. Sélectionnez le ou les fichiers à effacer comme vous avez appris à le faire au moyen de l'option Efface du menu des outils.
Pour insérer le nom d'une procédure dans le menu principal :
Pour exécuter la procédure par la suite, il vous suffit de sélectionner son nom dans le menu principal.
A titre d'exemple, vous pouvez entrer le contenu d'une procédure similaire à la suivante, la convertir, la sauvegarder et entrer son nom. ID, dans le menu principal. S'il vous arrive d'oublier votre Organiseur, la personne le trouvant saura immédiatement à qui le rapporter en exécutant cette option.
ID: CLS PRINT "A RAMENER A P.DUBOIS" PRINT "(POSTE 2522)" GET
Remarque : il n'est pas possible de placer un nom de procédure correspondant à un des menus d'options d'origine du menu principal. Par exemple, la procédure DATE ne peut pas être placée dans le menu principal. Pour plus de détails, consultez le Guide d'utilisation.
Il est parfois nécessaire d'interrompre une procédure en cours d'exécution. Pour ce faire :
La procédure est alors suspendue indéfiniment (sauf si une fonction comme GET attend que vous appuyez sur une touche).
Si la procédure a été exécutée à partir du menu principal, le message suivant apparaît sur l'écran :
ERR DANS A:nomproc ANNULATION .................... Pressez SPACE
Par contre, si vous avez exécuté la procédure à partir du menu Prog, l'écran se présente de la manière suivante :
ERREUR ANNULATION .................... Modif A:nomproc O/N
L'option Copier ne vous permet pas de sauvegarder une procédure sous un nouveau nom. Si vous voulez renommer la procédure A:DATE pour l'appeler A:JOUR, procédez de la manière suivante :
Si la procédure que vous créa doit être exécutée sur un Organiseur modèle CM ou XP à deux lignes :
Lorsque vous exécutez une procédure créée sur un modèle XP ou convertie par l'option Xtrans, les messages imprimés sur l'écran sont entourés d'une bordure, de manière à émuler le mode 2 lignes de 16 caractères, comme c'est le cas dans l'exemple suivant :
XXXXXXXXXXXXXXXXXXXX XX PROCEDURE DE XX XX 2 LIGNES XX XXXXXXXXXXXXXXXXXXXX
La procédure est exécutée automatiquement des que vous sélectionnez son nom.
Interruption d'une procédure en cours d'exécution
Dans le chapitre précédent, nous avons vu comment utiliser le menu Prog. Les cinq chapitres suivants couvrent les principes de base de la programmation en OPL. Si ces principes vous sont déjà familiers, contentez-vous de survoler les chapitres suivants ou consultez les sections de référence.
Une procédure se compose généralement de quatre étapes illustrées par cet exemple simplifié :
1 | Nom | SINE50: |
2 | Déclaration des variables | LOCAL x |
3 | Opérations sur les variables | x=SIN(50) |
4 | Transmission des variables | PRINT x |
Elles sont toutes quatre décrites dans ce chapitre.
ex. : imprime:, actions89:, IMPOTS:
En algèbre, pour ajouter deux valeurs, vous devez procéder de la
manière suivante : «x+y=z».
En OPL, vous devez en revanche entrer la formule z=x+y après
avoir déclare x, y et z en tant que variables afin de leur réserver
de l'espace mémoire. Pour ce faire :
1 Déclarez les variables x, y et z pour réserver 3 espaces en
mémoire.
LOCAL x, y, z
2 Affectez des valeurs à x et y.
x=5
y=2
3 Ajoutez x et y et affectez le résultat à z.
z=x+y
Une variable est donc une zone de mémoire portant un nom que vous devez déclarer au tout début de la procédure. Autrement dit, vous indiquez à l'Organiseur que vous allez utiliser une variable. Il lui réserve alors un espace qui contiendra la valeur ou le texte qui lui sera affecté par la suite. Dans l'exemple SlNE50, la ligne «LOCAL x» réserve un espace mémoire nommé x dans lequel la valeur affectée à x à la ligne suivante va être enregistrée.
Il existe trois types de variables. Elles se distinguent par le format du nom qui leur est affecté au moment de leur déclaration, à savoir :
Variables à virgule flottante | ex. : x |
Variables entières | ex. : x% |
Variables chaînes | ex. : x$ |
Tous les noms de variables peuvent contenir jusqu'à 8 Caractères de longueur. Le premier d'entre eux doit être une lettre. Les suivants peuvent être des lettres ou des valeurs, mais pas des symboles - excepté les identificateurs % et $ à la fin du nom.
Une valeur à virgule flottante est une valeur contenant un point décimal suivi d'un nombre quelconque de chiffres, ex. : 13.567, 8., 0.05319 ou 6.0.
Si vous savez qu'une variable va contenir une valeur a virgule flottante, déclarez-la en tant que telle.
Le nom d'une variable a virgule flottante n'est suivi d'aucun symbole spécial.
Ex. : a, AGE, PROFIT89.
Les variables à virgule flottante peuvent contenir jusqu'à 12 décimales et doivent être comprises dans les intervalles ±9.99999999999E99, ±1E-99, ainsi que 0.
Une variable entière contient un nombre entier. Ex. : 6, 13, -3 ou 11058.
Vous devez utiliser des variables entières à chaque fois que les virgules flottantes ne sont pas nécessaires, mais que la vitesse d'exécution ou l'espace disponible sont en revanche des critères importants. En effet, les calculs de nombres entiers sont plus rapides que les calculs à virgule flottante et ne demandent que deux octets de mémoire au lieu de huit.
Le nom d'une variable entière le termine par un signe %. (Le signe % est compris dans les 8 caractères de longueur.)
Ex. : a%, AGE%, PROFI89%.
Les variables entières doivent être comprises entre -32768 et +32767.
Une chaîne est une suite de caractères alphabétiques, numériques ou symboliques qui est traitée littéralement au lieu d'être évaluée. «x+y=», «(1).32.44.54.33» et «profit» sont autant d'exemples de chaînes.
Le nom d'une variable chaîne se termine par le signe $. (Le signe $ est compté dans les 8 caractères de longueur.)
Ex. : a$, NOM$, NUMERO6$.
Lorsque vous déclarez une variable chaîne, vous devez indiquer la longueur maximum de la chaîne qui pourra lui être affectée. Si elle doit contenir un nom de 15 caractères de longueur maximum, vous devez déclarer NOM$(15). La longueur est définie entre parenthèses.
La longueur maximale d'une chaîne est fixée à 255 caractères.
Vous devez déclarer les variables à la suite du nom de la procédure. Les trois types de variables peuvent être listés dans n'importe quel ordre, à condition toutefois de les séparer par des virgules.
Exemples :
LOCAL x,y,a%,NOMS(15),AN3%.
Pour déclarer des variables, vous disposez de deux commandes : LOCAL et GLOBAL :
LOCAL x, a%, liste$(8)
ou
GLOBAL x, a%, liste$(8)
Les commandes LOCAL et GLOBAL définissent la portée des variables. La différence de base existant entre ces deux commandes est la suivante :
Un programme OPL peut se composer de plusieurs procédures. Vous devez cependant entrer, convertir et sauvegarder chaque procédure séparément.
Dans l'exemple suivant, la quatrième ligne de proca: invoque une autre procédure procb:. Pour obtenir ce résultat, il suffit d'entrer le nom de la procédure (suivi du signe «deux points»).
proca: GLOBAL a% a%=2 procb: PRINT a% | procb: a%=a%+4 |
La variable a% doit être déclarée en tant que variable globale pour pouvoir être utilisée dans la seconde procédure. Dans cet exemple, la valeur 6 est affichée lorsque proca: est exécutée.
L'utilisation des variables globales pose parfois des problèmes dans la mesure où il est relativement facile de choisir accidentellement le même nom de variable à deux reprises. Il est donc préférable d'utiliser la commande LOCAL, sauf lorsqu'une variable globale est véritablement nécessaire.
Si l'OPL rencontre une variable qui n'a pas été déclarée dans la procédure, il suppose qu'elle a été déclarée dans une procédure précédente. S'il n'arrive pas à la trouver dans la procédure d'appel, il signale une erreur de type ERR SUR VAR.
Dix variables à virgule flottante sont disponibles en permanence. Il s'agit des mémoires m0 à m9 de la calculatrice. Vous n'avez pas à les déclarer dans la mesure où elles sont toujours actives.
Il est possible d'affecter une valeur à ces variables à tout moment dans une procédure. Elles sont ensuite accessibles à partir de in calculatrice.
Il est parfois nécessaire de déclarer plusieurs variables similaires au début d'un programme. L'OPL dispose pour cela de variables tableaux.
Au lieu de déclarer séparément les variables a, b, c, d et e, il vous suffit tout simplement de déclarer les variables a1 à a5 par une seule commande en procédant de la manière suivante :
LOCAL a%(5) | (tableau de variables entières) |
LOCAL a(5) | (tableau de variables à virgule flottante) |
LOCAL a$(5,8) | (tableau de variables chaînes) |
A titre d'analogie, les variables numériques de tableau peuvent être comparées à une liste de valeurs portant toutes le même nom mais différenciées par un numéro d'index.
Dans une déclaration de tableau, la valeur spécifiée entre parenthèses indique le nombre d'éléments qu'il contient. L'exemple suivant se contente d'affecter des valeurs aux éléments d'un tableau d'entiers :
nom: GLOBAL num%(4) num%(1)=1 num%(2)=3 num%(3)=5 num%(4)=7 PRINT num%(1)+num%(2)+num%(3)+num%(4)
Cet exemple affiche la somme des quatre éléments contenus dans le tableau num%.
Dans le cas des variables chaînes, vous devez déclarer le nombre d'éléments contenus dans le tableau ainsi que la longueur maximum des chaînes.
A titre d'exemple, GLOBAL TABLEAU$(5,10) réserve de l'espace mémoire pour cinq chaînes de dix caractères maximum sous les noms TABLEAU$(1) à TABLEAU$(5). Pour l'instant, toutes ces variables sont vides (ou, autrement dit, contiennent une chaîne vide), mais la mémoire réservée sera suffisante pour contenir les cinq chaînes remplies.
Une fois que vous avez déclaré les variables, vous pouvez exécuter différents opérations sur celles-ci pour exécuter une combinaison de calculs arithmétiques, communiquer les variables à d'autres procédures qui en ont besoin, ou utiliser des fonctions de l'OPL. Avant de faire quoi que ce soit, il est toutefois préférable de bien comprendre comment les variables réagissent selon leur type et la manière dont vous les combinez.
Il n'est pas possible de diviser une variable chaîne par une variable entière par exemple. En outre, si vous mélangez des variables entières et des variables à virgule flottante dans une addition, il se peut qu'un type de variable convertisse l'autre. Les sections suivantes vous signalent les problèmes susceptibles de se produire tout en vous indiquant comment les éviter.
Dans la procédure ci-dessous, la troisième ligne après le nom risque de provoquer une erreur dans la mesure ou une valeur à virgule flottante est affectée à la variable entière y% :
nom: GLOBAL x%,y% x%=7 y%=3.7+x% PRINT y% GET
L'OPL traite le problème de la manière suivante : au lieu de signaler une erreur, il convertit automatiquement la valeur ne correspondant pas au type de variable.
La partie droite de la formule y%=3.7+x% est évaluée pour donner 10.7, mais la fraction de la valeur est supprimée avant d'affecter le résultat à la section gauche, y%. L'instruction PRINT affiche donc la valeur 10.
Comme l'OPL ne signale pas d'erreur, c'est à vous de vous assurer qu'une telle situation ne risque pas de se produire - sauf si vous y tenez réellement ! Vous devez toujours procéder avec précaution lorsque vous combinez différents types de variables pour vous assurer que le résultat produit est bien celui que vous attendiez.
Dans la procédure ci-dessous qui fait appel à des variables à virgule flottante, un autre type de conversion est exécuté sans modifier pour ayant la valeur :
nom: GLOBAL a,b,c a=1.2 b=2.7 c=3 PRINT a+b+c
Dans cette procédure, la valeur entière 3 est affectée à la variable à virgule flottante c. Dans un cas comme celui-ci, une conversion automatique de type est exécutée. Ici, le résultat est converti pour donner la valeur 3.0. La valeur réelle de la variable ne change donc pas.
Si vous affectez une valeur à virgule flottante à une variable entière, la conversion automatique de type produit un entier arrondi à la valeur inférieure. Ainsi, si a%=2.3, a% a pour valeur 2 mais si a%=2.9, a% a également pour valeur 2. De même, si vous affectez une valeur négative à virgule flottante a une variable entière, elle est également arrondie à la valeur supérieure (en valeur absolue) - au lieu de se rapprocher de zéro. Ainsi, si a%=-2.3, a% prend la valeur -3, ce qui n'est pas toujours désirable.
Si une expression doit produire une valeur a virgule flottante, assurez-vous que vous utilisez des types corrects de valeurs dans l'expression en question.
Il est possible de contrôler la façon dont les valeurs à virgule flottante sont arrondies lors de leur conversion. Ainsi, si vous souhaitez arrondir les nombres à virgule flottante à la valeur la plus proche (de sorte que 2.4 donne 2.5 et 2.2 donne 2), exécutez l'instruction suivante :
r=INT(2*n+0.5)/2
n étant la valeur à arrondir.
Cette formule ne produit toutefois pas le résultat recherché. Pour savoir pourquoi, substituez une valeur de test à n, disons 3.4 :
INT(2*3.4+0.5) c-à-d INT(7.3).
Cette formule produit la valeur entière 7, mais 7/2 arrondi à la valeur inférieure donne 3, et non pas 3.5.
Pour obtenir 3.5, vous devez obliger la division à produire un résultat à virgule flottante. Dans cet exemple, la méthode la plus simple pour y parvenir consiste à diviser par la valeur à virgule flottante 2.0 au lieu de l'entier 2. Ainsi, l'expression :
r=INT(2*n+0.5)/2.0
produit donc le résultat requis.
Un complément d'information sur les variables entières et les variables à virgule flottante est donné au chapitre sur les opérateurs.
Si vous essayez d'affecter une valeur à une variable chaîne, l'OPL signale une erreur. Il n'existe aucune conversion automatique de type entre les variables chaînes et les variables numériques. Cependant, l'OPL dispose de fonctions permettant la conversion des nombres en chaînes et vice versa. Il s'agit des fonctions SCI$. FIX$, GEN$, NUM$ et VAL.
Il est aussi facile d'ajouter des chaînes que des variables numériques :
Il est également possible d'affecter la même valeur à c$ au moyen de l'instruction c$="INFOR"+"MATIQUE".
Le résultat produit par une concaténation de chaînes ne peut dépasser la longueur maximale déclarée.
Il est également possible de décomposer des chaînes. On parle alors de division de chaîne.
Il existe trois fonctions permettant d'y parvenir : LEFT$, RIGHT$ et MID$. Elles vous permettent, respectivement, d'accéder à la section gauche, droite ou centrale d'une chaîne. Exemple :
Les opérations de division de chaînes ne modifient pas la chaîne originale ou, autrement dit, a$ conserve la valeur 16.34.32.45.61 une fois que la valeur 16 a été affectée à b$. La seule exception est lorsque la section gauche de l'expression contient la même chaîne que celle de droite. Ex : a$=LEFT$(a$,4) produit une chaîne contenant les quatre caractères de gauche de a$ et l'affecte à a$, remplaçant ainsi sa valeur originale.
Note : si vous devez définir une chaîne contenant un guillemet (caractère ASCII 34), ce caractère doit être inséré a deux reprises dans la chaîne. Ainsi, si vous déclarez as="x""y""z", le résultat de as est x"y"z.
Dans le premier exemple de procédure que nous avons vu au début de ce chapitre, l'instruction PRINT x se contentait de prélever la valeur enregistrée dans l'espace mémoire réservé a la variable x et de l'imprimer sur l'écran.
Il est également possible de transmettre les valeurs d'une procédure a une autre procédure. Dans l'exemple donné à page 2- 5, la procédure proca: invoquait une autre procédure, procb:, renvoyant la valeur ajustée de a% à proca:. Pour obtenir ce résultat, la variable a% a été déclarée globale.
Dans le reste de ce chapitre, nous allons étudier deux méthodes permettant de communiquer des valeurs : en les entrant au clavier au moyen de la commande INPUT ou en les transmettant d'une procédure à une autre par des paramètres.
Les valeurs peuvent être saisies au clavier au moyen de la commande INPUT, comme dans l'exemple ci-dessous.
Cette simple procédure vous demande tout simplement d'entrer une valeur. Elle est affectée à la variable x, puis affichée sur l'écran dans un message.
INPUT: LOCAL x CLS PRINT "ENTREZ UNE VALEUR" INPUT x CLS PRINT "VOUS AVEZ CHOISI LA VALEUR",x GET
Pour tout renseignement complémentaire sur la commande INPUT, consultez le chapitre 9.
Il est possible de communiquer les valeurs d'une procédure à une autre procédure au moyen de paramètres. Dans l'exemple de TVA ci-dessous, la deuxième procédure TVA1: est suivie d'un nom de paramètre (p).
La dernière ligne de la première procédure PROC1: invoque TVA1 et lui transmet la valeur x qui est affectée au paramètre p. TVA1: affiche ensuite cette valeur majorée de la TVA à 18.6%.
PROC1: LOCAL x CLS PRINT "ENTREZ LE PRIX" INPUT x TVA1:(x)
TVA1:(p) CLS PRINT "PRIX, TVA INCLUSE = ",p*1.186 GET
Dans cet exemple de TVA similaire, la seconde procédure TVA2: contient deux paramètres.
La valeur de la variable prix, x, est transmise au paramètre p1 et le taux de TVA, r, qui est également une variable, est transmis au paramètre p2. TVA2 affiche ensuite le prix majoré de la TVA au taux spécifié.
PROC2: LOCAL x,r CLS PRINT "ENTREZ LE PRIX" INPUT x CLS PRINT "TAUX DE. TVA ?" INPUT r TVA2:(x,r)
TVA2:(p1,p2) CLS PRINT p1+p2/100*p1 GET
Appel de procédure - | PROC:("chaîne a",9,3.7) |
Nom de la procédure - | PROC:(p$,p%,p) |
Cet exemple de calcul de la TVA diffère des deux exemples précédents dans la mesure où il ne se termine pas à la seconde procédure mais revient au contraire à la première.
La commande RETURN est utilisée pour produire la valeur de x majorée de la TVA à r pour cent - le total est affiché par PROC3:. TVA3: se contente tout simplement d'effectuer le calcul sans l'afficher. Cette procédure peut donc être invoquée par une autre procédure ayant besoin de cette valeur sans devoir nécessairement l'afficher.
PROC3: LOCAL x,r CLS PRINT "ENTREZ LE PRIX" INPUT x CLS PRINT "TAUX DE TVA ?" INPUT r CLS PRINT "PRIX, TVA INCLUSE =",TVA3:(x,r) GET
TVA3:(p1,p2) RETURN p1+p2/100*p1
Jusqu'à présent, nous n'avons vu que des exemples de programmes dont les instructions sont exécutées à tour de rôle. Ils se composaient d'instructions exécutées selon leur ordre d'apparition : pour exécuter une instruction plusieurs fois de suite, vous deviez l'entrer autant de fois que nécessaire.
Cette méthode n'est visiblement pas très efficace. Il vaut mieux obliger le programme à exécuter une boucle dans une certaine section du programme autant de fois que nécessaire, ou jusqu'à ce qu'une certaine condition ait été remplie.
L'OPL vous offre différentes façons d'y parvenir.
Les deux premières font appel aux boucles DO/UNTIL et WHILE/ENDWH. Elles sont appelées structures. Elles fonctionnent toutes deux de façon similaire, à une différence près :
Il est possible d'imbriquer jusqu'à huit boucles les unes dans les autres.
Voici un exemple de boucle DO/UNTIL :
a%=10 DO PRINT "A=";a% a%=a%-1 UNTIL a%=0
La valeur 10 est tout d'abord affectée à a%. La boucle commence à la ligne suivante, par l'instruction DO qui demande à l'OPL :
«d'exécuter toutes les instructions jusqu'à ce qu'il rencontre UNTIL. Si la condition suivant UNTIL n'est pas remplie, il doit réexécuter les mêmes instructions jusqu'à ce qu'elle le soit.»
La ligne suivante affiche «A=», suivi de la valeur de a%. Au premier tour de boucle a% a pour valeur 10.
La valeur 1 est ensuite soustraite de a% qui prend alors pour valeur 9. UOPL parvient alors à l'instruction UNTIL, suivie de la condition indiquant que la variable a% doit être égale à 0. Comme ce n'est pas le cas, la boucle reprend à DO pour donner à a% la valeur 8. La condition est toujours fausse. La boucle est répétée jusqu'à ce que a% ait pour valeur O.
Lorsque a% a pour valeur 0, la boucle se termine et le programme exécute les instructions suivant UNTlL.
La boucle WHlLE/ENDWH est similaire à la boucle DO/UNTIL, si ce n'en que la condition est testée au début de la boucle plutôt qu'à la fin. Exemple :
a=4.1 b=2.7 WHILE a>b PRINT "a est supérieur à b" b=b+1.04 ENDWH
L'instruction BREAK peut être utilisée avec IF (voir ci-dessous) pour sortir d'une boucle DO ou WHlLE. Elle accède a l'instruction située après la fin de la boucle.
La commande GOTO permet également de changer l'ordre d'exécution des instructions. Elle accède directement à un label.
Dans cet exemple, lorsque le programme atteint la commande GOTO, il se rend directement à la ligne commençant par le label sortie::.
GOTO sortie:: PRINT "J'IGNORE CETTE LIGNE" PRINT "ET CELLE-CI" sortie::
Un label doit se terminer par deux signes «:».
Le label doit se trouver dans la même procédure que la commande GOTO. Le saut de programme n'est pas conditionnel, il se produit automatiquement.
GOTO permet aussi d'effectuer un branchement, bien qu'il s'agisse là d'un outil rudimentaire risquant de rendre la procédure difficile à suivre.
Il est préférable d'utiliser la structure IF/ELSEIF/ELSE/ENDIF. Cette structure est utilisée pour exécuter une ou plusieurs instructions lorsque la condition définie par l'instruction IF est remplie. Si ce n'est pas le cas, ELSEIF permet de tester une autre condition. Il n'existe aucune restriction au nombre d'instructions ELSEIF définies dans une structure IF/ENDIF.
Une fois que toutes les situations éventuelles ont été définies par ELSEIF, l'instruction ELSE peut définir d'autres possibilités, suivies d'ENDIF pour terminer la structure. En voici un exemple :
touche: LOCAL g% g%=GET PRINT "CETTE TOUCHE" IF g%>64 un g%<91 PRINT "EST UNE MAJUSCULE" ELSEIF g%>96 AND g%<123 PRINT "est une minuscule" ELSE PRINT "N'EST PAS UNE LETTRE" ENDIF GET
Cette procédure attend que vous appuyez sur une touche pour indiquer s'il s'agit d'une majuscule ou d'une minuscule. (Si vous ne comprenez pas la signification des valeurs 64 et 91, consultez l'annexe A.). Si la touche pressée n'est pas une touche alphabétique, l'OPL vous l'indique également grâce à l'instruction ELSE.
Les instructions ELSEIF et ELSE sont facultatives mais à chaque IF doit correspondre un ENDIF.
Les instructions ESCAPE OFF, GET KEY et INPUT doivent être utilisons avec précaution dans les boucles pour les raisons suivantes :
Pour interrompre l'exécution d'une procédure, il suffit normalement d'appuyer sur la touche ON/CLEAR, suivie de Q :
Remarque : | prenez toutes vos précautions lorsque vous testez de nouvelles procédures avec votre Organiseur. Il est recommandé de sauvegarder vos données sur des Packs ou de les transférer vers un ordinateur avant de tester des programmes sophistiqués, car si votre Organiseur est bloqué par l'exécution d'une procédure incorrecte, la seule solution reste parfois d'enlever la pile, ce qui efface tout le contenu de la mémoire interne de votre Organiseur. |
---|
+ | addition |
- | soustraction |
* | multiplication |
/ | division |
** | exposant |
- | moins unaire (rend une valeur négative) |
% | pourcent |
> | supérieur à |
>= | supérieur ou égal à |
< | inférieur à |
<= | inférieur ou égal à |
= | égal à |
<> | différent de |
AND
OR
NOT
Priorité la plus élevée : | ** |
- (moins unaire) NOT | |
* / | |
+ - | |
= > < <> >= <= | |
Priorité la plus faible : | AND OR |
Pourcent (%) est relativement différent des autres opérateurs dans la mesure où son effet dépend de l'opérateur avec lequel il est combiné. Le fonctionnement de % est décrit dans le chapitre consacré à la calculatrice dans le guide d'utilisation.
Une expression de type a+b+c ne présente aucun problème dans
la mesure où le résultat reste le même, quelle que soit l'addition
exécutée en premier. Il est parfois nécessaire d'utiliser des
parenthèses pour définir l'ordre d'exécution des calculs. Ainsi, la
formule :
a+b*c/d
est évaluée dans l'ordre suivant : b multiplié par c, puis divisé
par d, puis ajouté à a. Pour exécuter l'addition et la division
avant la multiplication, utilisez des parenthèses :
(a+b)*(c/d)
En cas de doute, il est préférable d'utiliser des parenthèses.
Vous êtes parfaitement libre de combiner des entiers et des valeurs à virgule flottante dans les expressions. Vous devez cependant savoir comment les traite l'OPL.
mais
Si vous disposez, par exemple, d'une procédure contenant
l'expression :
a%=b%+c
l'OPL la traite de cette façon : b% est converti en valeur à virgule
flottante qui est ajoutée à c. La valeur à virgule flottante
résultante est ensuite convertie automatiquement en nombre
entier afin de pouvoir l'affecter à la variable entière a%.
Ces conversions produisent parfois des résultats inattendus, vous devez donc procéder avec précaution. A titre d'exemple, a%=3.0*(7/2) affecte la valeur 9 à a%, alors que a%=(3.0*7)/2 affecte la valeur 10 à a%.
Les opérateurs de comparaison et les opérateurs logiques se basent sur le principe qu'une certaine situation peut être soit vraie, soit fausse. Ainsi, si a%=6 et b%=8, l'expression a%>b% est fausse. Ces opérateurs sont utiles pour définir des voies alternatives dans les procédures. Exemple :
IF salaire<frais PRINT "mauvaise gestion" ELSE IF salaire>frais PRINT "bonne gestion" ENDIF
Le résultat de ces expressions logiques est représenté par une valeur entière, ce qui peut vous être utile :
Ces entiers peuvent être affectés à une variable ou imprimés sur l'écran pour vous indiquer si une condition particulière est vraie ou fausse. Elle peut aussi être utilisée dans une instruction IF.
A titre d'exemple, il arrive qu'une procédure produise deux sous- totaux, disons a et b. Si vous voulez savoir lequel des deux est le plus élevé, utilisez une instruction du type PRlNT a>b. Si vous obtenez la valeur zéro, c'est que a est égal à b ou que b est supérieur à a. En revanche, la valeur -1 indique que l'expression «a>b» est vraie ou, autrement dit, que a est supérieur à b.
Exemple | Résultat | Entier affiché | |
---|---|---|---|
< | a<b | Cette expression est vraie si a est inférieur à b. | -1 |
Elle est fausse si a est supérieur ou égal à b. | 0 | ||
> | a>b | Cette expression est vraie si a est supérieur à b. | -1 |
Elle est fausse si a est inférieur ou égal a b. | 0 | ||
<= | a<=b | Cette expression est vraie si a est inférieur ou égal à b. | -1 |
Elle est fausse si a est supérieur à b. | 0 | ||
>= | a>=b | Cette expression est vraie si a est supérieur ou égal à b. | -1 |
Elle est fausse si a est inférieur à b. | 0 | ||
<> | a<>b | Cette expression est vraie si a est différent de b. | -1 |
Elle est fausse si a est égal à b. | 0 | ||
= | a=b | Cette expression est vraie si a est égal à b. | -1 |
Elle est fausse si a est différent de b. | 0 |
Vous pouvez combiner ces opérateurs avec des valeurs a virgule flottante et des entiers. Cependant, si une partie de la comparaison contient une virgule flottante et l'autre un entier, l'entier est converti en valeur à virgule flottante. Ainsi, si a%=1 et b=1.2, l'expression b>a% est vraie.
Vous ne pouvez en revanche pas combiner les chaînes et les valeurs numériques. L'expression a$<b est donc invalide.
Les programmeurs n'ont généralement pas besoin des renseignements suivants. S'ils vous semblent trop compliqués, n'hésitez pas à ignorer la suite de ce chapitre.
L'effet des opérateurs logiques AND, OR et NOT varie selon qu'ils sont utilisés avec des valeurs à virgule flottante ou des nombres entiers :
1 Lorsqu'ils sont utilises avec des valeurs à virgule flottante uniquement, les opérateurs logiques ont l'effet suivant :
Exemple | Résultat | Entier affiché |
---|---|---|
a AND b | Cette expression est vraie si a et b ont tous deux une valeur différente de zéro. | -1 |
Elle est fausse si a ou b a pour valeur zéro. | 0 | |
a OR b | Cette impression est vraie si a ou b a une valeur différente de zéro. | -1 |
Elle est fausse si a et b ont tous deux pour valeur zéro. | 0 | |
NOT a | Cette expression est vraie si a est différent de zéro. | -1 |
Elle est fausse si a a une valeur différente de zéro. | 0 |
2 Avec des voleurs entières uniquement, AND, OR et NOT deviennent des opérateurs logiques au niveau du bit.
L'Organiseur enregistre les valeurs entières sous tonne de code
binaire de 16 bits, 7 se présente devient alors :
0000000000000111
La gamme numérique de l'Organiseur va de +32767 à -32768. 32767 est la valeur la plus élevée pouvant être représentée sous forme de 15 bits binaires. Le 16ème bit est utilisé pour le signe + ou -.
Comme les opérateurs agissent au niveau du bit, ils exécutent tout d'abord l'opération sur le 1er bit, puis sur le second, etc., jusqu'au 16ème.
AND | L'instruction PRINT 12 AND 10 affiche la valeur 8. Pour mieux comprendre ce résultat, nous allons écrire 12 et 10 sous forme binaire : |
---|---|
12 | 0000000000001100 |
10 | 0000000000001010 |
AND agit sur chaque paire de bits. De gauche à droite (en ignorant les douze premier bits), il effectue les opérations suivantes :
1 AND 1 → 1
1 AND 0 → 0
0 AND 1 → 0
0 AND 0 → 0
Le résultat est donc la valeur binaire 1000, soit 8 en notation décimale.
OR | Quel résultat donnerait l'instruction PRINT 12 OR 10 ? Là encore, écrivez les deux valeurs sous forme binaire et applique l'opérateur à chaque paire de chiffres : |
---|
1 OR 1 → 1
1 OR 0 → 1
0 OR 1 → 1
0 OR 0 → 0
Cette opération a pour résultat la valeur binaire 1110, soit 14 en notation décimale.
NOT | NOT agit sur une seule valeur dont il produit le complément à un ou, autrement dit, remplace les 0 par des 1 et les 1 par des 0. |
---|
Si 7 s'écrit de la manière suivante en notation | |
binaire : | 0000000000000111 |
NOT 7 donne: | 1111111111111000 |
Il s'agit de la représentation binaire de -8. |
Conseil. Il existe une méthode permettant de calculer rapidement la valeur NOT des nombres entiers. Elle consiste à ajouter 1 à la valeur originale avant d'en inverser le signe. Ainsi, NOT 23 donne -24, NOT 0 donne -1 et NOT-1 donne 0. Les deux derniers résultats sont identiques pour les valeurs à virgule flottante.
Lorsque vous sauvegardez des enregistrements au moyen de l'option Sauver du menu principal, ils sont mémorisés dans un fichier intitulé MAIN. Vous pouvez également créer des fichiers de données supplémentaires grâce à l'option Xfich. Ces fichiers, et les enregistrements qu'il contiennent, sont accessibles à partir de l'OPL. Vous pouvez également créer de nouveaux fichiers et les manipuler. Ce chapitre vous explique comment y parvenir.
Trois exemples de manipulation de fichiers de données sont également fournis à la fin du chapitre contenant des exemples de procédures. Il est conseillé de consulter ces programmes tout en lisant ce chapitre.
Le fichier de données MAIN et les autres fichiers supplémentaires que vous créez contiennent des enregistrements qui sont divisés en zones. Lorsque vous sauvegardez un enregistrement au moyen de l'option SAUVER du menu principal, une nouvelle zone est créée à chaque fois que vous commencez une nouvelle ligne en appuyant sur ↓.
Dans un fichier de noms et adresses, chaque enregistrement peut contenir une zone «nom», une zone «numéro de téléphone» et des zones séparées pour chaque ligne de l'adresse.
Avant d'entrer des données dans un nouveau fichier, vous devez le créer sur une des unités disponibles au moyen de l'option Nouv du menu Xfich, ou de la commande CREATE de l'OPL.
La commande CREATE de l'OPL vous donne un meilleur contrôle de l'opération dans la mesure où elle vous permet de préciser le nombre de zones que peut contenir chaque enregistrement et le type de données à entrer dans chacune d'entre elles. La syntaxe de la commande CREATE est la suivante :
CREATE "<unité>fichier",nomlog,zone1,zone2
"<unité>fichier" indique l'unité (A:, B: ou C:) sur laquelle va figurer le fichier, suivie du nom du fichier en question. Ces informations doivent être entourées de guillemets, ex. : "a:clients". Il est également possible d'affecter l'unité et le nom de fichier a une variable chaîne (ex. : cl$="a:clients"), puis d'utiliser le nom de la variable (cl$) comme paramètre. Dans ce cas, cls ne doit pas être mis entre guillemets. Un nom de fichier peut contenir jusqu'à 8 caractères.
nomlog correspond au nom logique du fichier. Il peut s'agir de A, B, C ou D. Vous vous servirez du nom logique pour désigner le fichier en cours d'utilisation dans un programme. zone1, zone2 sont des noms de zones. Il peut y avoir jusqu'à 16 zones dans chaque enregistrement et chacune d'entre elles peut prendre un qualificatif, % ou $, pour indiquer qu'elles contiennent respectivement des valeurs entières ou des chaînes de données. Les zones contenant des valeurs à virgule flottante n'ont pas besoin de qualificatif particulier. Les noms de zones peuvent contenir jusqu'à 8 caractères, qualificatif éventuel inclus.
Voyons un exemple d'utilisation de la commande CREATE :
CREATE "a:clients",B,nom$,tel$,ad1$,ad2$,ad3$
Une fois le fichier créé, il est ouvert automatiquement. Les enregistrements peuvent donc être sauvegardés immédiatement. Il devient également le fichier en cours ou, autrement dit, le fichier sur lequel agissent les commandes de manipulation des enregistrements.
Les enregistrements sont ajoutés zone par zone dans un fichier de données. Vous devez commencer par affecter des valeurs aux noms de zone en cours, puis vous servir de la commande APPEND pour les ajouter au fichier.
Les noms de zones ont un comportement similaire à celui des variables. Il est donc possible de leur affecter des valeurs et de les utiliser dans les instructions INPUT. Le nom de zone doit être utilisé avec le nom de fichier logique de la manière suivante :
INPUT B.nom$
ou
B.nom$="M. Bruno"
B étant le nom de fichier logique et noms le nom de la zone. Ils sont séparés par un point.
Une fois que vous avez affecté des valeurs aux zones, il vous suffit de les ajouter dans le fichier ouvert au moyen de la commande AFPEND. Elles sont toujours ajoutées de sorte à former le dernier enregistrement du fichier. S'il s'agit d'un tout nouveau fichier, ce dernier enregistrement sera bien entendu le premier.
La commande APPEND ne comporte aucun paramètre - les valeurs de zone sont automatiquement ajoutées au fichier dans l'ordre et le format correct.
Si vous essayez d'affecter une chaîne de texte à un nom de zone numérique, l'OPL simule une erreur.
Un exemple d'addition d'enregistrements dans un fichier de données est donné dans la seconde procédure (insérer:) du programme n° 6 au chapitre 8.
Tant que le fichier de données est ouvert, les noms de zone en cours d'utilisation peuvent être utilisés comme toute autre variable - dans une instruction PRINT, une chaîne ou une expression numérique. Pour agir sur une zone particulière, vous devez toutefois sélectionner l'enregistrement dans lequel elle figure afin d'en faire l'enregistrement en cours.
Avant de pouvoir effacer un enregistrement ou de demander à une instruction d'agir sur une des zones qu'il contient, vous devez le sélectionner pour en faire l'enregistrement en cours. Il existe six commandes et fonctions vous permettant de changer d'enregistrement en cours, à savoir :
FIRST accède nu premier enregistrement du fichier.
NEXT accède à l'enregistrement suivant du fichier. Si l'enregistrement en cours est le dernier enregistrement du fichier. NEXT n'affiche pus de message d'erreur. Au lieu de cela, l'enregistrement en cours est vide. Il est possible de tester cette condition au moyen de in fonction EOF (fin de fichier).
BACK revient à l'enregistrement précédent du fichier. Si l'enregistrement en cours est le premier du fichier, il ne change pas.
LAST accède au dernier enregistrement du fichier.
POSITION accède à un enregistrement particulier. A titre d'exemple l'instruction POSITION 3 fait de l'enregistrement 3 (le premier enregistrement étant le numéro 1) l'enregistrement en cours. Pour connaître le numéro de l'enregistrement en cours, servez-vous de la fonction POS qui en affiche le numéro.
FIND accède au premier enregistrement contenant le critère de recherche spécifié.
La fonction FIND agit de la même manière que l'option Rech du menu principal, à l'exception des Jokers. La différence entre les deux vient du fait que l'option Rech du menu principal affiche l'enregistrement sur l'écran, alors que la fonction FIND en fait l'enregistrement en cours pour vous permettre d'exécuter une opération quelconque sur celui-ci : le modifier, l'effacer ou simplement le consulter.
Ainsi, la ligne :
r%=FIND ("DUBOIS")
fait du premier enregistrement contenant la chaîne "DUBOIS"
l'enregistrement en cours et enregistre le numéro de cet
enregistrement dans la variable r%. Si r% a pour valeur zéro, c'est
que la chaîne n'existe pas.
Il existe une autre fonction, FINDW, qui est identique à FlND
mais permet, elle, l'utilisation des Jokers. Pour rechercher le
premier enregistrement contenant le mot COMMANDE et 89,
utilisez l'instruction suivante :
r%=FINDW("*COMMANDE*89*")
+ Correspond à un caractère, quel qu'il soit.
* Correspond à tout groupe de caractères.
La procédure chercher: du programme n° 6, chapitre 8, contient un exemple permettant de rechercher et de modifier des enregistrements.
Pour effacer un enregistrement, vous devez en faire l'enregistrement en cours au moyen d'une des Commandes FIRST, NEXT, BACK, LAST, POSITION ou FIND, avant d'exécuter la commande ERASE. Celle-ci efface l'enregistrement en cours dans le fichier et renumérote les suivants.
La procédure finale (effacer:) du programme n° 6 du chapitre 8 illustre la manière de rechercher et d'effacer un enregistrement.
Lorsque vous créez un fichier de données, il est ouvert automatiquement mais se referme dès que le programme se termine. Pour l'ouvrir à partir d'un autre programme, vous devez vous servir de la commande OPEN.
La syntaxe de la commande OPEN est la même que celle de la commande CREATE. Vous devez indiquer l'unité et le nom choisi au moment de la création du fichier mais, si vous l'ouvrez à partir d'un programme différent, vous pouvez très bien lui affecter un autre nom logique et donner des noms différents aux zones. Ainsi, un fichier créé par la commande suivante dans un programme particulier :
CREATE "c:adresse",D,nom$,nom$,ad$,ad2$
peut être ouvert par un autre programme au moyen de la commande :
OPEN "c:adresse",A,a$,b$,c$,d$
Il peut y avoir jusqu'à quatre fichiers ouverts simultanément sur les trois unités. Chacun d'entre eux doit être désigné par un nom logique différent dans le programme. Ainsi, si vous avez 4 fichiers ouverts, l'un d'entre eux est appelé A, le deuxième B, le troisième C et le dernier D.
Pour modifier ou effacer des enregistrements dans le fichier, vous devez inclure toutes les zones sur lesquelles vous allez agir dans la commande OPEN. Cependant, si vous souhaitez simplement rechercher des chaînes et consulter des enregistrements, contentez-vous d'inclure la première zone uniquement dans la commande OPEN. Exemple :
OPEN "c:adresse",A,a$
Lorsque vous créez ou que vous ouvrez un fichier, il devient automatiquement le fichier en cours. Toutes les opérations exécutées agissent sur ce fichier, jusqu'à ce que vous décidiez d'en utiliser un autre. La commande USE permet sélectionner un fichier qui doit être désigné par son nom de fichier logique. Exemple :
USE B
Dans cet exemple, le fichier portant le nom logique B (comme indiqué dans la commande OPEN ou CREATE ayant servi à l'ouvrir) devient le fichier en cours. Toutes les opérations effectuées par la suite agissent sur ce fichier jusqu'à ce que vous changiez de fichier en cours au moyen de la commande USE, ou que vous ouvriez ou créiez un autre fichier. Si vous essayez d'utiliser un fichier avant de l'avoir ouvert, un message d'erreur s'affiche pour vous en avertir.
Les fichiers de données sont automatiquement fermés lorsque les programmes se terminent. Il est toutefois possible de fermer le fichier en cours au moyen de la commande CLOSE.
Il est parfois nécessaire d'exécuter explicitement cette commande pour effacer un fichier ou en ouvrir un autre lorsque quatre fichiers sont déjà ouverts. La commande DELETE permet d'effacer des fichiers de données une fois qu'ils ont été refermes.
Un récapitulatif de toutes les commandes et fonctions de manipulation de fichiers de données est fourni au début du chapitre 9. Chaque commande et fonction fait ensuite l'objet d'une description détaillée.
Les programmes 6, 7 et 8 du chapitre 8 sont des exemples de programmes de manipulation de données.
La plupart des commandes et fonctions de manipulation de fichiers sont réservées uniquement aux fichiers de données.
Cependant, il en existe trois agissant sur tous types de fichier. Il s'agit de COPYW, DELETEW et DIRW$. Le type de fichier utilisé doit être précisé par une des extensions suivantes :
Fichier de données et fichier agenda (OBD est le sigle d'Organiseur Data Base - Base de données de l'Organiseur) | .OBD |
---|---|
Procédure OPL | .OPL |
Fichier bloc-note | .NTS |
Fichier de configuration Comms Link | .COM |
Fichier de tableur | .PLN |
Fichier de configuration Pager | .PAG |
Fichier agenda XP ou CM | .DIA |
Il existe aussi deux extensions supplémentaires réservées uniquement à la commande COPYW. Elles ne doivent être utilisées que pour copier une partie d'une procédure OPL. | |
Procédure OPL (texte uniquement) | .OPT |
Procédure OPL (objet uniquement) | .OPO |
Vous pouvez également vous servir des jokers habituels avec COPYW, DELETEW et DIRWs. Ces Jokers sont le signe + pour un caractère individuel et l'astérisque * pour un groupe de caractères.
COPYW "A:*88.OPL","B:"
Cette commande copie toutes les procédures OPL dont le nom se termine par 88 de l'unité A: sur l'unité B:.
DELETEW "C:*.NTS"
Cette commande efface tous les fichiers blocs-notes sur l'unité C:.
DIRWS("A:R*")
Cette commande affiche le nom du premier fichier commençant par la lettre R sur l'unité A, quel qu'en soit le type.
Les fichiers d'agenda sont sauvegardés sous forme de fichiers de données. Chaque entrée constitue un enregistrement à deux zones :
1989042712000100 ANNIVERSAIRE GUY
Dans cet exemple, la première zone contient les informations suivantes :
1989 | Année |
---|---|
04 | Mois |
27 | Date |
1200 | Heure et minute de début |
01 | Durée - un intervalle de 15 minutes |
00 | Minutes précédent l'heure à laquelle doit se déclencher l'alarme. La valeur 00 indique qu'aucune alarme n'a été programmée. |
Vous pouvez ouvrir un fichier d'agenda à partir de Xfich pour y rechercher des enregistrements et les mettre à jour. Vous pouvez, par exemple, rechercher toutes les entrées annuelles, comme les anniversaires, et changer 1989 en 1990. Lorsque vous restaurez l'agenda par la suite et que vous le fusionne: avec l'agenda en cours, vous n'avez pas besoin d'entrer tous les anniversaires à la fin de l'année. Veillez cependant à utiliser un format correct, sinon vous ne parviendra pas a recharger l'agenda.
Vous pouvez également exécuter cette opération dans l'OPL au moyen des commandes de manipulation de chaînes et de fichiers de données. Un des programmes figurant au chapitre 8 vous montre comment.
Ce chapitre couvre les erreurs les plus courantes, ainsi que l'interception des erreurs. La liste des messages d'erreur de l'OPL est fournie dans l'annexe D.
Tous les langages de programmation exigent que les commandes et fonctions soient utilisées d'une manière bien spécifique et, en particulier, que les instructions soient correctement placées.
Les erreurs les plus courantes en OPL sont citées ci-dessous. Les instructions incorrectes sont mises en évidence par des caractères gras et sont suivies, à droite, de la version correcte à utiliser.
Oubli du signe deux points entre deux instructions dans une ligne en contenant plusieurs :
Incorrect | Correct |
a$="texte" PRINT a$ | a$="texte" :PRINT a$ |
Oubli du signe deux points à la suite du nom de la procédure invoquée :
Incorrect | Correct |
proc1: GLOBAL a,b,c . . proc2 |
proc1: GLOBAL a,b,c . . proc2: |
Oubli d'un ou plusieurs sigles deux points après un label :
Incorrect | Correct |
proc1: GOTO dessous: . . dessous:: |
proc1: GOTO dessous:: . . dessous:: |
Oubli de l'espace avant le signe deux points dans une ligne contenant plusieurs instructions :
Incorrect | Correct |
proc1: a$=b$:PRINT a$ |
proc1: a$=b$: PRINT a$ |
Transmission d'une valeur a virgule flottante à une procédure ayant besoin d'un nombre entier - dans cet exemple, la procédure proc2:(x%).
Incorrect | Correct |
2*6+proc2:(PI) | 2*6+proc2:(INT(PI)) |
Ceci se produit également lorsqu'une procédure est invoquée à partir de la calculatrice. La calculatrice convertit tous les nombres en valeurs à virgule flottante :
Incorrect | Correct |
Calc:proc2:(3) | Calc:proc2:(INT(3)) |
Transmission d'un entier à une procédure ayant besoin d'une valeur à virgule flottante - dans cet exemple, la procédure proc3:(x).
Incorrect | Correct |
proc1: . . proc3:(2/3) |
proc1: . . proc3:(2.0/3) |
Transmission du nombre incorrect de paramètres à une procédure - dans cet exemple, proc4:{x,y)
Incorrect | Correct |
proc1: . . proc4:(3.7) |
proc1: . . proc4:(3.7,2.5) |
L'OPL permet d'affecter uniquement les valeurs comprises entre -32768 et +32767 aux variables entières. Toute expression dépassant ces seuils limites provoque donc une erreur :
Incorrect | Correct |
proc1: LOCAL a% a%=100*2468 |
proc1: LOCAL a a=100.0*2468 |
Les structures permises dans l'OPL sont DO/UNTIL, WHILE/ENDWH et IF/ELSEIF/ELSE/ENDIF. Il est possible d'emboîter jusqu'à 8 structures les unes dans les autres. Si cette limite est dépassée, une erreur se produit. Si vous mélangez les structures, en combinant un DO avec un WHILE par exemple, vous obtenez également une erreur :
Incorrect | Correct |
proc1: . DO . WHILE a<2 |
proc1: . DO . UNTIL a>=2 |
Si une erreur se produit durant l'exécution du programme, celui- ci s'interrompt et un message d'erreur apparaît.
Si la procédure a été lancée à partir du menu principal, appuyez sur SPACE pour y revenir.
Par contré, si vous avez lancé la procédure à partir du menu Prog, l'OPL vous propose de l'éditer. Dans cet exemple, vous avez appelé, à partir d'une procédure prog:, une procédure prog1 qui n'existe pas :
PROC ABSENTE PROG1 .................... Modif A:PROG O/N
Appuyez sur O pour éditer la procédure. Si le code source est disponible, vous revenez à l'éditeur OPL pour corriger la ligne contenant l'erreur. Si vous ne souhaitez pas la corriger, appuyez sur N ou sur ON/CLEAR.
Ceci fait, appuyez sur MODE pour obtenir le menu de l'éditeur, et choisissez l'option Trans, Sauver ou Quitter. Si vous choisissez de quitter la procédure, les modifications apportées durant la session sont abandonnées.
Lorsqu'une erreur se produit durant l'exécution d'une procédure - comme c'était le cas ci-dessus - le programme s'interrompt et affiche un message d'erreur. Il est possible d'éviter cette situation en interceptant les erreurs et en les traitant à l'intérieur du programme - auquel cas vous êtes entièrement maître de la situation. Vous devez donc procéder avec précaution. Les outils utilisés pour contrôler les erreurs sont ONERR, TRAP, ERR, ERR$ et RAISE :
La commande ONERR est utilisée pour diriger le contrôle du programme vers un label particulier en présence d'erreur. Ceci est utile si vous préférez fournir votre propre sous-programme de gestion des erreurs pour imprimer, par exemple, un message correspondant à une erreur anticipée. ONERR doit être suivie d'un nom de label se terminant par deux signes «deux points». Le label proprement dit peut se trouver dans la même procédure ou dans une procédure précédente du même programme.
Dans l'exemple ci-dessous, LPRINT est utilisée pour imprimer sur l'imprimante connectée. Lorsqu'aucune imprimante n'est connectée à l'Organiseur, celui-ci affiche généralement le message d'erreur PERIPH ABSENT. Il est toutefois possible de fournir un message plus précis comme c'est le cas dans l'exemple ci-dessous. 'CONNECTEZ L'IMPRIMANTE indique à l'utilisateur ce qu'il doit faire.
ONERR erreur: LPRINT "Monsieur" RETURN erreur:: ONERR OFF IF ERR=230 PRINT "CONNECTEZ L'IMPRIMANTE" :GET ELSE RAISE ERR ENDIF
La première ligne renvoie le contrôle du programme au label erreur:: en présence d'une erreur. Si aucune imprimante n'est connectée à l'Organiseur, la commande LPRINT exécute le branchement et le message "CONNECTEZ L'IMPRIMANTE" s'affiche. Si l'imprimante est bien connectée, le message «Monsieur» est imprimé et les lignes à la suite du label ne sont pas exécutées à cause de la commande RETURN intermédiaire. Si une erreur non prévue se produit, comme PILE FAIBLE, elle est traitée par l'instruction ELSE et la commande RAISE ERR affiche le message associé.
Notez que la première instruction suivant le label erreur: est ONERR OFF. Elle est extrêmement importante. Si vous ne désactivez pas ONERR au moyen de cette commande, toutes les erreurs se produisant par la suite - même dans les autres procédures invoquées - dirigent le contrôle de programme vers le même label. Le schéma suivant illustre de quelle façon deux erreurs totalement différentes provoquent un branchement au même label et produisent donc le même message d'erreur :
proc1: onerr label:: ... -- a=log(-1) | ... ↓ ... => label:: ↑ PRlNT "explication sur la nature de l'erreur" | ... | | proc2: | ... | | proc3: ----------------------------- PRINT 2/0
Comme toutes les erreurs renvoient le contrôle de programme au même label si vous ne désactivez pas ONERR au moyen de ONERR OFF, il est facile de créer accidentellement une boucle sans fin. Dans ce cas, il n'est pas possible d'appuyer sur ON/CLEAR, puis sur Q pour interrompre le programme dans la mesure où ces touches vous ramènent au label comme toute autre erreur - il est donc nécessaire de sortir la pile de l'Organiseur, ce qui efface toutes les données enregistrées en mémoire interne. Pour éviter une telle situation :
TRAP se charge d'intercepter les erreurs produites par la commande spécifiée. Il n'est donc pas nécessaire de la désactiver comme c'était le cas pour ONERR. Elle peut être utilisée avec une des commandes de la liste suivante :
APPEND | BACK | CLOSE |
COPY | COPYW | CREATE |
DELETE | DELETEW | ERASE |
EDlT | FIRST | INPUT |
LAST | NEXT | OPEN |
POSITION | RENAME | UPDATE |
USE |
La commande TRAP doit précéder immédiatement une de ces commandes et en être séparée par un espace. Exemple :
TRAP INPUT a%
Lorsque la commande INPUT est utilisée sans TRAP et que l'utilisateur entre une chaîne de texte alors qu'il faut une valeur, l'écran défile et un point d'interrogation s'affiche pour demander une autre entrée valide. Si, par contre, vous insérez la commande TRAP avant INPUT, celle-ci est exécutée de la manière habituelle mais, en cas d'erreur, la ligne suivante est quand même exécutée. Dans l'exemple ci-dessous, la ligne suivante contient un message signalant la nature de l'erreur :
proc: LOCAL a% debut:: PRINT "ENTREZ VOTRE AGE", TRAP INPUT a% IF ERR=252 PRINT "UNE VALEUR, PAS UN MOT" GOTO debut:: ENDIF
L'exemple ci-dessus utilise également la fonction ERR.
Lorsqu'une erreur se produit dans un programme, il est possible d'en connaître le numéro au moyen de la fonction ERR, ce qui vous permet d'être sûr de savoir à queue erreur vous avez affaire.
L'erreur prévue dans les lignes ci-dessous porte le numéro 246 (PAS DE PACK). Si elle se produit en essayant d'ouvrir le fichier MAIN dans l'unité B:, un message d'erreur explicatif apparaît. Mais si une erreur différente se produit, les lignes suivantes assurent que le message personnalisé est remplace par le message standard.
TRAP OPEN "B:MAIN",A,a$ IF ERR=246 PRINT "PAS DE PACK DANS L'UNITE B:" ELSEIF ERR PRINT ERR$(ERR) ENDIF
Les messages d'erreur de l'OPL sont listés à l'annexe D.
Si vous interceptez les erreurs au moyen des commandes dont vous disposez pour les traiter vous-même, il vous faudra a un moment quelconque tester les routines de traitement d'erreur pour vérifier qu'elles fonctionnent correctement. La commande RAISE vous offre une méthode relativement facile pour y parvenir. Elle vous permet de provoquer une erreur qui, à votre avis, est susceptible de se produire pendant l'utilisation du programme et de voir comment elle est traitée par le sous-programme de gestion des erreurs. A titre d'exemple, cette instruction produit l'erreur PAS DE PACK :
RAISE 246
Ce chapitre contient des exemples de programmes écrits en OPL. Sans chercher a démontrer le fonctionnement de toutes les fonctions disponibles dans l'OPL, ils devraient toutefois vous fournir des conseils et astuces utiles. Pour tout renseignement sur une fonction ou commande particulière, consultez le chapitre 9.
Chacune des procédures doit être entrée séparément. Il n'est pas possible d'entrer deux procédures dans un seul bloc. Pour savoir comment convertir une procédure, la sauvegarder et l'exécuter, consultez le chapitre 1.
Dans les programmes, les variables sont imprimées en minuscules, alors que les commandes et fonctions sont en majuscules. Ceci n'a cependant aucune importance et vous pouvez utiliser les minuscules et majuscules indifféremment pour entrer les procédures dans l'Organiseur.
Veillez à bien reproduire les espaces nécessaires :
Les lignes commençant par la commande REM sont des remarques ; elles servent uniquement à expliquer ce que font les différentes sections d'un programme. Elles n'affectent en aucune façon le fonctionnement d'une procédure. Vous n'êtes donc pas obligé de les reproduire.
Cette procédure détermine le nombre de jours depuis votre naissance. Substituez votre propre date de naissance à celle utilisée.
jours1: LOCAL ne,jour,reponse ne=DAYS(14,6,1957) jour=DAYS(DAY,MONTH,YEAR) reponse=date-ne PRINT repense :GET
Variables
ne représente votre date de naissance.
jour représente la date du jour.
reponse correspond à la date du jour moins votre date de
naissance.
Fonctions de date
Toutes les fonctions de date de l'OPL produisent des valeurs
accessibles à partir de l'horloge et du calendrier de l'Organiseur.
La fonction DAYS calcule le nombre de jours qui se sont écoulés
entre le début du calendrier et une date particulière.
Cette procédure plus flexible détermine le nombre de jours qui se sont écoulés entre deux dates que vous choisissez. Lorsque vous l'exécutez, elle vous demande d'entrer le jour, le mois et l'année représentant la première date, puis la seconde.
jours2: LOCAL j1,m1,a1,j2,m2,a2 PRINT "ENTREZ LE PREMIER JOUR" INPUT j1 PRINT "ENTREZ LE PREMIER MOIS" INPUT m1 PRINT "ENTREZ LA PREMIERE ANNEE" INPUT a1 PRINT "ENTREZ LE DEUXIEME JOUR" INPUT j2 PRINT "ENTREZ LE DEUXIEME MOIS" INPUT m2 PRINT "ENTREZ LA DEUXIEME ANNEE" INPUT a2 PRINT DAYS(j2,m2,a2)-DAYS(j1,m1,a1) GET
Variables
j1, m1 et a1 correspondent, respectivement, au jour, au mois et à
l'armée de la première date.
j2, m2 et a2 correspondent, respectivement, au jour, au mois et à
l'armée de la deuxième date.
Cette procédure transforme l'Organiseur en dé. Lorsque vous l'exécutez, un message s'affiche pour vous indiquer que le dé est lancé - à vous d'appuyer sur A pour l'arrêter. Un chiffre aléatoire de un à six apparaît et vous avez la possibilité de relancer le dé si vous le souhaitez.
de: LOCAL de%,touche% KSTAT 1 debut: CLS :PRINT "**LE DE EST LANCE**" PRINT "APPUYEZ SUR A POUR L'ARRETER" DO de%=(RND*6+1) UNTIL KEY$="A" CLS PRINT "********* ";de%;" *********" BEEP 50,100 AT 1,4 :PRINT "RECOMMENCER O/N?" label:: touche%=GET IF touche%=%O GOTO debut:: ELSEIF touche%=%N RETURN ELSE GOTO label:: ENDIF
Variables
de% est un chiffre aléatoire compris entre 1 et 6.
touche% est la valeur ASCII de la touche choisie lue par la
fonction GET.
Chiffres aléatoires
Pour afficher au hasard le chiffre 1, 2, 3, 4, 5 ou 6, la procédure
de: procède de la manière suivante : la fonction RND produit une
valeur aléatoire à virgule flottante comprise entre 0 et 1 (1 exclu).
Elle est multipliée par 6 et la valeur 1 lui est ajoutée (pour
obtenir des chiffres de 1 a 6 au lieu de 0 à 5). Cette valeur est
ensuite arrondie à l'entier inférieur en l'affectant à de%.
Identification des touches O et N
La valeur ASCII du caractère sur lequel vous appuyé est produite
par la fonction GET et affectée à touche%. Pour obtenir la valeur
ASCII d'un caractère en OPL, il suffit d'insérer le signe % juste
avant. Ainsi, %O produit la valeur ASCII de O et %N la valeur
ASCII de N. L'instruction KSTAT 1, utilisée au début de la
procédure, verrouille le clavier en majuscules (au cas où il serait
verrouillé en majuscules) pour vous éviter de taper o ou n.
Ce programme calcule les remboursements mensuels d'un emprunt. Lorsqu'il est exécuté, vous devez spécifier le montant de l'emprunt, le taux d'intérêt et la durée en années. Spécifiez ensuite la source de prêt en la sélectionnant dans un menu. Le système ne tient pas compte des dégrèvements fiscaux.
Le programme se compose de deux procédures - emprunt: et q: - un sous-programme général de saisie. Vous devez taper chacune d'entre elles séparément. Le sous-programme de saisie peut être invoqué par toute autre procédure ayant besoin d'une valeur à virgule flottante que doit entrer l'utilisateur.
1
emprunt: LOCAL num%,pret,x,duree,taux,mensu,ques$(2) CLS PRINT "EVALUATION DES" PRINT "REMBOURSEMENTS MENSUELS" PAUSE 30 ques$=CHR$(63)+" " REM CHRS(63) est un "?" - voir annexe A pret=q:("ENTREZ LE MONTANT DU PRET"+ques$) DO taux=q:("TAUX D'INTERET % "+ques$) UNTIL taux>0 AND taux<99 DO duree=q:("ENTREZ LA DUREE (ANS)"+ques$) UNTIL duree>.5 AND duree<100 num%=MENU("CAISSE-D'EPARGNE,BANQUE,DIVERS") IF num%=0 :RETURN :ENDIF taux=taux/100 :x=1+11*(num%/2) mensu=pret*taux/12/(1-((1+taux/x)**(-x*duree))) CLS :PRINT "REMBOURSEMENT MENSUEL" PRINT FIX$(mensu,2,-8) GET RETURN
2
q:(a$) LOCAL z CLS :PRINT a$,CHRS(16); INPUT z CLS RETURN (z)
Variables
pret, duree, taux et mensu correspondent, respectivement, au
montant de l'emprunt, à sa durée en années, au taux d'intérêt et
aux mensualités.
ques$ est un point d'interrogation "?"
num% est le numéro de l'option de menu sélectionnée.
x est une variable utilisée dans le calcul final.
z est la variable utilisée pour les valeurs entrées lorsque q: est
exécuté.
Appel de q:
La principale procédure, emprunt:, invoque q: à trois reprises et
lui transmet une chaîne à imprimer sous forme de message. La
chaîne de texte est transmise à q: sous forme de paramètre. Les
valeurs produites sont affectées aux variables pret, taux et duree.
Comment le point d'interrogation est-il imprimé ?
La fonction CHR$ convertit la valeur ASCII 63 en point
d'interrogation.
Comment le bip de saisie se déclenche-t-il ?
La fonction CHR$ convertit la valeur 16 en caractère de contrôle
déclenchant un bip sonore qui est «affiché».
Les deux procédures suivantes composent un jeu qui démontre l'usage des graphiques définis par l'utilisateur. Elles doivent être entrées séparément.
Le but du jeu est d'éviter de se faire rattraper par ses poursuivants. Le petit bonhomme mobile peut sauter. Appuyez sur X pour le faire sauter vers le haut et sur S vers le bas. A la fin du jeu, votre score est affiché sur l'écran.
Pour suspendre le jeu, appuyez sur ON/CLEAR. Une seconde pression sur cette touche le redémarre. Pour abandonner la partie, appuyez sur ON/CLEAR, puis sur Q.
1
Jeu: LOCAL e$(2) LOCAL a%,b%,b1%,c%,c1%,x%,y%,i%,sc% graphe: :CURSOR OFF eS=CHR$(4)+CHR$(6) b%=20 :c%=12 :x%=3 :y%=1 DO CLS :PRINT REPT$(CHR$(158),80) AT x%,y% :PRINT CHRS(7) a%=1 :c%=1+RND*4 DO :c1%=1+RND*4 :UNTIL c%<>c1% DO AT a%,c% :PRiNT CHR$(0) AT a%,c1% :PRiNT CHR$(0) :BEEP b%,10*b% AT a%,c% :PRINT CHR$(1) AT a%,c1% :PRINT CHR$(1) :BEEP b%,10*b% AT a%,c% :PRINT CHR$(2) AT a%,c1% :PRlNT CHR$(2) :BEEP b%,10*b% AT a%,c% :PRINT CHR$(3) AT a%,c1% :PRINT CHR$(3) :BEEP b%,10*b% AT a%,c%: :PRINT e$ AT a%,c1$ :PRINT e$ :BEEP b%,10*b% AT a%,c% :PRINT CHRS(5) AT a%,c1% :PRINT CHR$(5) :BEEP b%,10*b% AT a%,c% :PRINT " " :AT a%,c1% :PRINT " " i%=KEY IF i% IF i%=%S AND y%>1 AT x%,y% :PRINT CHR$(158) y%=y%-1 :AT x%,y% :PRINT CHRS(7) ENDIF IF i%=%X AND y%<4 At x%,y% :PRINT CHR$(158) y%=y%+1 :AT x%,y% :PRINT CHRS(7) ENDIF ENDIF a%=a%+1 IF a%=x% AND (c%=y% OR c1%=y%) :REM Appuyer i%=0 DO AT x%,y% :PRINT CHR$(170+i%) BEEP 10,100+i% i%=i%+1 BEEP 10,100-i% UNTIL i%=30 b%=b%+5 :a%=20 :x%=x%+2 IF x%>20 CLS :PRINT "FIN" PRINT "SCORE:",sc% :PAUSE 40 WHILE KEY :ENDWH :REM vidage du tampon GET :RETURN ENDIF ENDIF UNTIL a%=20 sc%=sc%+1 IF b%>12 b%=b%-2 ELSEIF b%<6 IF b1% b%=b%-1 :b1%=0 ELSE b1%=1 ENDIF ELSE b%=b%-1 ENDIF UNTIL 0
2
graphe: UDG 0,0,0,28,30,30,30,28,0 UDG 1,0,0,14,31,30,31,14,0 UDG 2,0,0,7,14,12,14,7,0 UDG 3,0,0,3,7,6,7,3,0 UDG 4,0,0,1,3,3,1,0,0 UDG 5,0,0,0,1,1,1,0,0 UDG 6,0,0,24,16,4,16,24,0 UDG 7,30,14,4,14,30,14,11,25
Graphiques définis par l'utilisateur
La principale procédure du jeu, jeu:, invoque graphe: qui exécute
la commande UDG à huit reprises pour définir les caractères
graphiques utilisés dans le jeu. La dernière commande UDG est
celle qui définit le petit bonhomme. Les caractères définis par
l'utilisateur sont traités dans l'annexe A.
Dans l'exemple suivant, la principale procédure crée un fichier de données appelé adr sur l'unité A:. Il va contenir des noms, adresses, codes postaux et numéros de téléphone. Il est suivi de quatre autres procédures permettant d'insérer, de rechercher, de modifier et d'effacer des enregistrements dans le fichier. Lorsque vous exécuta fichier:, un menu apparaît pour vous proposer différentes options.
Ces cinq procédures doivent être entrées séparément.
1
fichiers: LOCAL m% IF NOT EXIST ("A:adr") CREATE "A:ADR",A,n$,ad1$,ad2$,ad3$,cp$,tel$ ELSE OPEN "A:ADR",A,n$,ad1$,ad2$,ad3$,cp$,tel$ ENDIF DO m%=MENU("INSERER,CHERCHER,MODIFIER,EFFACER,QUITTER") IF m%=0 or m%=5 :STOP ELSEIF m%=1 :inserer: ELSEIF m%=2 :chercher: ELSEIF m%=3 :modif: ELSEIF m%=4 :effacer: ENDIF UNTIL 0 :REM boucle continuelle
2
inserer: PRINT "ENTREZ LE NOM" :INPUT A.n$ CLS :PRINT "ENTREZ LA RUE" :INPUT A.ad1$ CLS :PRINT "ENTREZ LA VILLE" :INPUT A.ad2$ CLS :PRINT "ENTREZ LA REGION" :INPUT A.ad3$ CLS :PRINT "ENTREZ LE CODE POSTAL" :INPUT A.cp$ CLS :PRINT "ENTREZ LE NO DE TEL." :INPUT A.tel$ APPEND
3
chercher: LOCAL numenr%,cherche$(30) debut:: FIRST :CLS :PRINT "CHERCHER:"; TRAP INPUT cherche$ IF ERR=206 RETURN ENDIF numenr%=FIND(cherche$) IF numenr%=0 CLS :PRINT "INTROUVABLE" :PAUSE 20 GOTO debut:: ENDIF DO DISP(-1,"") :NEXT :numenr%=FIND(cherche$) IF numenr%=0 :CLS PRINT " PAS D'AUTRE ENTREE" PAUSE 20 :RETURN ENDIF UNTIL 0
4
modif: LOCAL numenr%,cherche$(30),k% DO FIRST :CLS PRINT "MODIFIER:"; :TRAP INPUT cherche$ IF ERR=206 :RETURN :ENDIF numenr%=FIND(cherche$) IF numenr%=0 CLS :PRINT "INTROUVABLE" PAUSE 20 :CONTINUE ENDIF DO KSTAT 1 :CLS :AT 1,2 :PRINT "MODIF O/N?" k%=VIEW(1,A.n$) IF k%=%0 :CLS EDIT A.n$ :EDIT A.ad1$ EDIT A.ad2$ :EDIT A.ad3$ EDIT A.cp$ :EDIT A.tel$ :UPDATE :RETURN ELSEIF k%=%N :NEXT :numenr%=FIND(cherche$) IF numenr%=O CLS :PRINT "INTROUVABLE" :PAUSE 20 :BREAK ENDIF ENDIF UNTIL 0 UNTIL 0
5
effacer: LOCAL numenr%,cherche$(30),k% FIRST :CLS :PRINT "EFFACER:"; TRAP INPUT cherche$ IF ERR=206 :RETURN :ENDIF numenr%=FIND(cherche$) DO IF numenr%=0 CLS :PRINT "INTROUVABLE" :PAUSE 20 :RETURN ENDIF quest:: KSTAT 1 :AT 1,2 :PRINT "EFFACER O/N?" k%=VIEW(1,A.n$) IF k%<>%O AND k%<>%N GOTO quest:: ELSEIF k%=%O ERASE ELSEIF k%=%N NEXT :numenr%=FIND(cherche$) ENDIF UNTIL EOF
Variables
m% est le numéro de l'option sélectionnée
numenr% est le numéro d'enregistrement fourni par FIND.
cherche$ est le critère de recherche entré.
k% est la valeur ASCII de la touche sur laquelle vous appuyez
lorsque l'enregistrement est affiché. (%O est la valeur ASCII de O,
%N est la valeur ASCII de N).
Création du fichier de données
La première procédure, fichier:, crée ou ouvre un fichier appelé
adr sur l'unité A:, chacun de ses enregistrements contenant 6
zones. Les six noms de zone sont n$ (nom), ad1$, ad2$ et ad3$
(adresse), cp$ (code postal) et tel$ (numéro de téléphone). Le
fichier porte le nom logique A.
Insertion d'enregistrements
Notez de quelle façon les six zones de l'enregistrement sont
renseignées une par une dans insérer:. Les noms de zone sont
utilisés en tant que variables et précédés du nom de fichier
logique (A) et d'un point. La commande APPEND est ensuite
utilisée pour ajouter l'enregistrement a la fin du fichier.
Affichage de l'enregistrement en cours
Lorsque la commande FIND identifie un enregistrement contenant
une chaîne particulière, celui-ci devient l'enregistrement en cours.
DISP, dont le premier paramètre est -1, l'affiche.
Dans la procédure modif:. VIEW est utilisé pour afficher la première zone uniquement de l'enregistrement et vous proposer de la modifier. Si vous choisissez de le faire, la fonction EDIT affiche les différentes zones tour à tour pour vous permettre de les modifier à l'écran.
Ces trois procédures composent un programme vous permettant de tenir un journal des appels téléphoniques. Il enregistre leur durée et vos commentaires dans un fichier de données. Il peut être facilement modifié pour enregistrer la durée d'autres activités.
La première procédure affiche un menu semblable au suivant, avec un poste de téléphone graphique défini par l'utilisateur et l'horloge. Comme l'horloge fait appel aux commandes UDG 3, 4, 5, 6, 7 et 1, les commandes UDG 0 et 2 sont, elles, réservées au poste de téléphone et au soulignement.
X 11:19 Enregistrer Consulter
1
options: LOCAL m% UDG 0,31,21,14,10,31,31,0,31 UDG 2,0,0,0,0,0,0,0,31 PRINT CHR$(0);REPT$(CHR$(2),14) CLOCK(1) m%=MENUN(2,"Enregistrer,Consulter") IF m%=0 RETURN ELSEIF m%=1 enreg: ELSE m%=2 consult: ENDIF
2
enreg: LOCAL t%,h%,m%,s%,sec%,debut$(8),swof% ESCAPE OFF IF NOT EXIST ("A:JOURNAL") CREATE "A:JOURNAL",B,date$,t$,note$ ELSE OPEN "A:JOURNAL",B,date$,t$,note$ ENDIF swof%=PEEKB($7C) POKEB $007C,0 :REM arret automatique desactive B.t$="00:00:00" B.date$=DATIM$ debut$=RIGHTS(DATIM$,8) h%=0 :m%=0 :s%=0 :sec%=SECOND DO IF sec%<>SECOND BEEP 1,100 sec%=SECOND :s%=s%+1 IF s%=60 :s%=0 :m%=m%+1 IF m%=60 :m%=0 :h%=h%+1 ENDIF ENDIF B.t$=REPT$("0",-(h%<10))+NUMS(h%,2)+":" B.t$=B.t$+REPT$("0",-(m%<10))+NUM$(m%,2)+":" B.t$=B.t$+REPT$("0",-(s%<10))+NUM$(s%,2) ENDIF AT 1,1 :PRINT "Debut:";debut$ PRINT "Heure:";B.t$ PAUSE -1 :REM economise la pile t%=KEY IF t%=1 GOTO sortie:: ENDIF UNTIL t%=13 PRINT "Notes "+CHR$(63) TRAP INPUT B.note$ IF ERR=206 GOTO sortie:: ENDIF CLS :PRINT "Sauvegarde..." :APPEND sortie:: CLOSE POKEB $007C,swof% :REM reactive l'arret automatique ESCAPE ON
3
consult: LOCAL t% TRAP OPEN "A:JOURNAL",B,date$,t$,note$ IF ERR :RETURN :ENDIF DO t%=DISP(-1,"") NEXT IF t%=1 RETURN ENDIF UNTIL EOF AT 1,4 :PRINT " PAS D'AUTRE ENTREE" PAUSE 25 RETURN
Variables
t% est utilisée pour les pressions de touche lues par KEY.
sec% représente le nombre de secondes après la minute au début
de la procédure.
a% correspond au nombre croissant de secondes.
m% correspond au nombre croissant de minutes.
h% correspond au nombre croissant d'heures.
debut$ marque le début de l'appel.
swof% représente le réglage initial de l'arrêt automatique.
Fichier de données
Un fichier de données appelé JOURNAL est créé sur l'unité A:.
Chaque enregistrement de ce fichier contient trois zones : une
pour la date, une pour la durée de l'appel et une pour vos
commentaires. Lorsque vous exécutez le programme et que vous
enregistrez un appel, la date, la durée et les commentaires sont
ajoutés au fichier de données sous forme d'enregistrement. Pour
examiner tous les enregistrements qui ont été ajoutés au fichier,
sélectionnez l'option Consulter.
Vous pouvez également ouvrir le fichier A:JOURNAL dans le menu Xfich et y rechercher des enregistrements au moyen de l'option Rech.
Comment le chronomètre détermine-t-il le tempo écoulé ?
Le nombre de secondes après la minute est lu par la fonction
SECOND sur l'horloge du système et est affecte à la variable sec%
des le début. La fonction SECOND est ensuite réutilisée et, si sa
valeur ne correspond pas à celle de sec% ou, autrement dit,
qu'une seconde s'est écoulée, la valeur 1 est ajoutée a s% et sec%
prend pour valeur le nombre de secondes écoulées. Lorsque la
variable s% parvient à la valeur 60, elle est remise à zéro et une
unité est ajoutée à m%, etc.
ESCAPE OFF
En temps normal, la touche ON/CLEAR suspend l'exécution du
programme qu'il est ensuite possible d'abandonner en appuyant
sur Q. Dans cet exemple, la commande ESCAPE OFF est utilisée
au début de la procédure. Elle empêche ON/CLEAR de suspendre
l'exécution du programme et donc d'être lue par les fonctions KEY
et DISP. Elle provoque un retour (RETURN) au menu PROG, au
lieu d'une erreur ESCAPE.
Affichage des enregistrements
Lorsque le fichier A:JOURNAL est ouvert à partir de l'option
Consulter, le premier enregistrement devient l'enregistrement en
cours et est affiché par la commande DISP ayant pour premier
paramètre -1. L'instruction NEXT est ensuite utilisée pour afficher
les enregistrements suivants tour à tour.
Après avoir sauvegardé l'agenda dans un fichier, vous pouvez vous servir de ce programme pour copier tous les anniversaires d'une année à l'autre. Il peut être facilement adapté pour traiter d'autres entrées annuelles.
Le fichier d'agenda sauvegardé, «ancien», est ouvert. Dans tous les enregistrements contenant la valeur 1989 et un anniversaire. 1989 est converti en 1990. Ces enregistrements sont placés dans un fichier appelé «nouveau». Vous pouvez ensuite recharger «nouveau» dans votre agenda en cours pour le fusionner avec celui-ci.
En reproduisant cette procédure, n'oubliez pas de remplacer le nom «ancien» par celui de l'agenda que vous avez sauvegardé.
anniv: CREATE "a:nouveau",B,date$,texte$ OPEN "a:ancien",A,date$,texte$ WHILE FINDW("1989*anniversaire*") PRINT a.texte$ b.date$="1990"+mid$(a.date$,5,255) b.texte$=a.texteS USE B :APPEND USE A :NEXT ENDWH GET
Fichiers d'agenda
Un fichier d'agenda sauvegardé est semblable à tout autre fichier
de données. Pour tout renseignement complémentaire sur le
format des enregistrements dans les fichiers d'agenda, consultez le
chapitre 6.
Ce récapitulatif des commandes et fonctions de l'OPL vous donne un aperçu des possibilités dont vous disposez. Il est suivi d'une liste alphabétique décrivant séparément chaque commande et fonction.
L'astérisque (*) indique que l'instruction associée ne peut être utilisée que sur un modèle LZ ou LZ64, et donc pas sur l'Organiseur XP ou CM.
Structures
DO/UNTIL exécute une boucle jusqu'à ce que la condition définie
soit remplie.
GOTO label:: effectue un branchement à un label.
IF/ELSEIF/ELSE/ENDIF exécute une boucle tant qu'une
condition est remplie.
BREAK met fin à une boucle.
CONTINUE accède à la condition de test d'une boucle.
Commandes générales
AT positionne le curseur.
BEEP déclenche un bip sonore.
CLS efface l'écran.
CURSOR ON/OFF active/désactive le curseur.
EDIT permet de modifier une chaîne à l'écran.
ESCAPE ON/OFF permet à l'utilisateur de sortir d'un programme.
GLOBAL déclare les variables de toutes les procédures invoquées.
INPUT permet la saisie de données.
KSTAT définit le statut du clavier.
LOCAL déclare les variables de la procédure en cours
uniquement.
OFF éteint l'Organiseur.
OFF x% éteint l'Organiseur pendant un certain temps*.
PAUSE suspend l'exécution du programme.
PRINT affiche à l'écran.
LPRINT imprime sur l'imprimante ou l'ordinateur connecté.
RANDOMIZE définit une nouvelle séquence de valeurs aléatoires.
REM précède une remarque du programmeur.
RETURN revient à la procédure d'appel.
STOP quitte l'OPL.
UDG définit un caractère d'affichage (graphique défini par
l'utilisateur)*.
Commandes de traitement des erreurs
ONERR label:: se rend au label en cas d'erreur.
ONERR OFF annule ONERR label::.
RAISE produit une erreur.
TRAP intercepté les erreurs produites par une commande
spécifiée.
Commande de manipulation de fichier
APPEND ajoute les valeurs de zones en cours au fichier de
données en vigueur.
CLOSE ferme un fichier de données.
COPY copie un fichier de données.
COPYW copie tout type de fichier*.
CREATE crée un fichier de données.
DELETE efface un fichier de données.
DELETEW efface tout type de fichier*.
ERASE efface un enregistrement.
FIRST/LAST/NEXT/BACK sélectionnent, respectivement, le
premier enregistrement, le dernier, le suivant ou le précédent.
OPEN ouvre un fichier de données.
POSITION sélectionne un enregistrement par son numéro.
RENAME renomme un fichier de données.
UPDATE met à jour un enregistrement.
USE change de fichier de données en cours.
Commandes d'adresse de mémoire
POKEB écrit un octet dans une adresse.
POKEW écrit un entier dans deux adresses successives.
Fonctions générales
CHR$ produit le caractère correspondant au code ASCII spécifié.
CLOCK affiche l'horloge.*
FIX$ produit une valeur à virgule flottante.
FREE indique le volume de mémoire interne libre.
GEN$ produit une chaîne.
GET attend que l'utilisateur appuie sur une touche et produit la
valeur ASCII de la touche en question.
GET$ attend que l'utilisateur appuie sur une touche et produit
cette touche sous forme de chaîne.
KEY produit la valeur ASCII de la touche pressée.
KEY$ indique la touche pressée sous forme de chaîne.
NUM$ produit un entier.
MENU affiche un menu.
MENUN affiche un menu de plusieurs lignes.*
SPACE indique le volume de mémoire libre sur une unité.
VIEW affiche une chaîne qui défile sur l'écran.
Fonctions de traitement des erreurs
ERR produit un numéro d'erreur.
ERR$ produit un message d'erreur.
Fonctions de manipulation de fichiers
COUNT indique le nombre d'enregistrements du fichier de
données en cours.
DIR$ indique le nom d'un fichier de données.
DIRW$ indique le nom de tout type de fichier*.
DISP affiche un enregistrement.
EOF teste la fin du fichier de données.
EXIST vérifie si un nom de fichier de données existe.
FIND recherche une enregistrement contenant une chaîne
spécifique.
FINDW est similaire à FIND mais permet d'utiliser des jokers.*
POS indique le numéro de l'enregistrement en cours.
RECSIZE indique le nombre d'octets qu'occupe l'enregistrement on
Fonctions numériques
ABS calcule la valeur absolue (sans signe) d'un nombre à virgule
flottante.
ACOS calcule le cosinus inverse d'un nombre*.
ASIN calcule le sinus inverse d'un nombre*.
ATAN calcule la tangente inverse d'un nombre.
COS calcule le cosinus d'un nombre.
DEG exécute une conversion de radians en degrés.
EXP élève e à la puissance spécifiée.
FLT convertit un entier en valeur à virgule flottante.
IABS calcule la valeur absolue (sans signe) d'un entier.
INT produit une valeur arrondie au nombre entier inférieur.
INTF est similaire à INT, mais produit une valeur à virgule
flottante.
LN calcule le logarithme naturel d'un nombre.
LOG calcule le logarithme d'un nombre.
PI calcule pi (3.1415926535...)
RAD exécute une conversion de degrés en radians.
RND produit une valeur aléatoire à virgule flottante.
SIN calcule le sinus d'un nombre.
SQR calcule la racine carrée d'un nombre.
TAN calcule la tangente d'un nombre.
HEX$ convertit un entier en chaîne hexadécimale.
Fonctions numériques de séries*
MAX produit la valeur la plus élevée.
MIN produit la valeur la plus faible.
MEAN calcule la moyenne.
STD calcule l'écart-type.
SUM calcule la somme.
VAR calcule la variance.
Fonctions de date
DAYS calcule le nombre de jours écoulés depuis le 01/01/1900 -
permet de déterminer le nombre de jours écoulés entre deux
dates*.
DATIM$ produit la date et l'heure sous forme de chaîne.
DAYNAME$ convertit les valeurs 1 à 7 en jours de la semaine*.
DOW indique le jour correspondant à une date sous forme de
valeur comprise entre 1 et 7.
MONTH$ convertit 1-12 en mois*.
SECOND/MINUTE/HOUR/DAY/MONTH/YEAR produisent des
informations sur l'heure et la date en cours.
WEEK indique le numéro de la semaine contenant la date*.
Fonctions de manipulation de chaînes
ASC calcule la valeur ASCII du premier caractère de la chaîne.
LEFT$/MID$/RIGHT$ sélectionnent des caractères d'une chaîne
en fonction de leur position.
LEN calcule la longueur d'une chaîne.
LOC détermine la position d'une chaîne dans une autre chaîne.
LOWER$/UPPER$ changent la chaîne spécifiée en caractères
minuscules/majuscules.
VAL convertit une chaîne numérique en valeur à virgule flottante.
Fonctions d'adressage de mémoire
ADDR calcule l'adresse d'une variable.
PEEKB produit la valeur enregistrée dans une adresse.
PEEKW produit la valeur enregistrée dans deux adresses
consécutives.
Fonctions du microprocesseur
USR transmet des valeurs au microprocesseur et produit un
entier.
USR$ transmet des valeurs au microprocesseur et produit une
chaîne.
La plupart des commandes de l'OPL doivent être suivies d'un ou plusieurs arguments. Il peut s'agir de valeurs constantes ou de variables.
La syntaxe des commandes est spécifiée selon la méthode suivante :
x | expression numérique, variable ou constante. Ex. : prix ou 49.99. |
---|---|
x% | expression entière comprise entre -32768 et +32767, variable ou constante. Ex. : prix% ou 50. |
a$ | expression chaîne, variable ou constante. Ex. : prix$ ou "49.90". |
unité | unité (A:, B: ou C:). |
nomlog | nom logique de fichier (A, B, C ou D). |
Les fonctions sont utilisées pour produire des valeurs qui peuvent être affectées a une variable ou combinées avec des commandes comme PRINT. Exemple :
L'instruction y%=YEAR affecte la valeur entière 1990 (ou l'année en cours) à la variable y%.
L'instruction PRINT YEAR affiche la valeur 1990 a l'écran.
La syntaxe à respecter est la même que pour les commandes.
Vous pouvez déterminer le type de résultat produit par une fonction selon le type de variable utilisé dans la syntaxe :
Les fonctions numériques produisant une valeur à virgule flottante se présentent de la manière suivante : f=FUNCTION.
Les fonctions numériques produisant une valeur entière se présentent de la manière suivante : f%=FUNCTION.
Les fonctions chaînes se présentent de la manière suivante : f$=FUNCTION$.
Produit la valeur absolue, c'est-à-dire sans signe, d'un nombre à
virgule flottante. Ex. : ABS (-10) a pour résultat 10.
Voir aussi IABS.
Calcule le cosinus inverse de l'expression entre parenthèses.
Détermine l'adresse de mémoire à laquelle est enregistrée la variable entre parenthèses. Vous pouvez utiliser un tableau en tant que variable, ex. : ADDR(TABLEAU()), mais vous ne pouvez pas spécifier des éléments individuels d'un tableau.
Ajoute les valeurs de zones en cours a la fin du fichier en vigueur
pour former un nouvel enregistrement.
Voir aussi UPDATE.
Calcule la valeur ASCII du premier caractère d'une expression chaîne. Ex. : A%=ASC("bonjour") produit la valeur 104 (code ASCII de «b»). Pour connaître les codes ASCII, consultez l'annexe A.
Si vous avez simplement besoin du code ASCII d'un caractère particulier, vous pouvez vous servir du signe %. Ainsi, A%=%G enregistre le code ASCII de la lettre G dans la variable A%.
Calcule le sinus inverse de l'expression entre parenthèses.
Positionne le curseur à l'endroit spécifié sur l'écran. x% représente la position sur la largeur de l'écran (de 1 à 20) et y% (1, 2, 3 ou 4) la première, la seconde, la troisième ou la dernière ligne.
Calcule la tangente inverse de l'expression entre parenthèses.
Fait de l'enregistrement précédent du fichier de données l'enregistrement en cours. Si l'enregistrement en cours est le premier du fichier, il ne change pas.
Déclenche l'avertisseur interne de l'Organiseur. La durée du son
est de x% de seconde. La fréquence du son est déterminée par
l'équation.
{Fréquence=921600/(78+2*y%)Hz}
Il est également possible d'utiliser le caractère de contrôle 16 de concert avec la commande PRINT et la fonction CHR$ pour déclencher l'avertisseur, c'est-à-dire PRINT CHR$(16).
Permet au contrôle du programme de sortir d'une boucle DO/UNTIL ou WHILE/ENDWH et de poursuivre l'exécution du programme après l'instruction marquant la fin de la boucle (UNTIL ou ENDWH).
Détermine le caractère ASCII correspondant a la valeur de l'expression entre parenthèses. Vous pouvez vous en servir pour imprimer les caractères n'existant pas sur le clavier - à titre d'exemple, l'instruction PRINT CHR$(63) affiche un point d'interrogation. Pour tout renseignement complémentaire, consultez l'annexe A.
Cette fonction affiche l'horloge continuellement mise à jour au coin supérieur droit de l'écran. x% peut avoir pour valeur 0 ou 1 :
0 | l'horloge n'est pas affichée ou, si l'instruction CLOCK(0) a été utilisée précédemment, elle n'est pas mise à jour. |
1 | horloge affichée. |
Produit le statut précédent de l'horloge (0 ou 1).
Ferme le fichier en cours.
Voir aussi OPEN, CREATE, DELETE et USE.
Efface l'écran et ramène le curseur en position d'origine (premier caractère de la première ligne de l'écran).
Renvoie le contrôle du programme à l'expression de test d'une boucle DO/UNTIL ou WHILE/ENDWH. Ex. :
DO <liste d'instructions> IF x=y CONTINUE ENDIF <liste d'instructions> UNTIL a=b
Dans cet exemple, la commande CONTINUE est exécutée si l'expression suivant l'instruction IF est vraie. Dans ce cas, le contrôle due programme est transféré au test UNTIL.
Syntaxe : | COPY "unité1:nom1","unité2:nom2" COPY "unité1:nom1","unité2:" COPY "unité1:","unité2:" |
1 | Dans le premier exemple, un fichier de données situé sur une
unité est copié sur une autre unité sous un nom différent. En
voici un exemple :
COPY "A:CLIENTS"',"B:CLIENT88" S'il existe déjà un fichier de ce nom (nom2) sur l'unité de destination, les enregistrements du fichier à copier lui sont ajoutés. Dans le cas contraire, un nouveau fichier est créé sous ce nom et les enregistrements du fichier source y sont copiés. |
---|---|
2 | Dans le second exemple, le nom du fichier sur l'unité de destination est le même que celui du fichier source. |
3 | Dans le troisième exemple, tous les fichiers de l'unité source sont copiés sur l'unité de destination en conservant le même nom. |
Syntaxe : | COPYW "unité1:nom1","unité2:nom2" COPYW "unité1:nom1","unité2:" COPYW "unité1:*.*","unité2:" |
Copie tout type de fichier d'une unité à une autre. Les trois variantes sont identiques à celles de la commande COPY, à l'exception des extensions de fichier qui sont utilisées pour indiquer le type de fichier. Vous pouvez également vous servir des Jokers. Si le premier nom contient des jokers, le second nom doit être composé uniquement de l'unité. Ex. : pour copier tous les blocs-notes de B: à C:, utilisez l'instruction COPYW "B:*.NTS","C:". Vous devez spécifier une extension ou .* dans le premier nom. Ainsi, pour copier tous les fichiers, quel qu'en soit le type, dont le nom se termine par un 8 de A: à B:, exécutez la commande COPYW "A:*8.*","B:". Les extensions sont traitées au chapitre 6.
Remarque : Unitè1 et Unité2 doivent obligatoirement être différents.
Calcule le cosinus de l'expression entre parenthèses. Elle représente un angle exprimé en radians.
Détermine le nombre d'enregistrements dans le fichier en cours.
Voir aussi POS et POSITION.
CREATE
Syntaxe : CREATE "unité:nom",nomlog,zone1,zone2
Crée le fichier de données portant le nom de fichier et le nom logique spécifiés sur l'unité choisie. Il peut contenir jusqu'à 16 zones définies par zone1, zone2, etc. Le nom de fichier logique (A, B, C ou D) est utilisé pour désigner ce fichier dans un programme. Chaque nouveau fichier est ouvert automatiquement.
Jusqu'à quatre fichiers peuvent être ouverts simultanément. Voici
une exemple de cette commande :
CREATE "A:CLIENTS",B,NOM$,TEL$,ADRESSE$
Dans cet exemple, le fichier de données CLIENT$, portant le nom
logique B, est créé sur l'unité A:. Chaque enregistrement du
fichier de données peut contenir jusqu'à trois zones.
Voir également OPEN, CLOSE, DELETE et USE.
CURSOR ON/OFF
Syntaxe : CURSOR ON ou CURSOR OFF.
Active ou désactive le curseur. Par défaut, il est désactivé (OFF).
Produit la date et l'heure de l'horloge du système sous forme de
chaîne. Ex. : "LUN 16 OCT 1989 16:25:30".
Voir aussi SECOND, MINUTE, HOUR, DAY, MONTH et YEAR.
Produit la date du mois (1 à 31).
Voir aussi SECOND, MINUTE, HOUR, MONTH, YEAR et DATIM$.
DAYNAME$
Syntaxe : d$=DAYNAME$(x%)
Convertit x%, valeur comprise entre 1 et 7, en jour de la semaine.
Ex. : d$=DAYNAME$(1) produit la valeur Lun.
Voir aussi DOW.
DAYS
Syntaxe : d=DAYS(jour,mois,année)
Calcule le nombre de jours qui se sont écoulés depuis le
01/01/1900. Cette fonction est utile pour déterminer le nombre
de jours qui se sont écoulés entre deux dates en soustrayant un
résultat de l'autre. Exemple :
x=DAYS(1,1,1989)
y=DAYS(DAY,MONTH,YEAR)
z=y-x
Convertit une expression de radians en degrés. Produit la valeur
de l'expression entre parenthèses (un angle mesure en radians) en
degrés.
Voir aussi RAD.
DELETE
Syntaxe : DELETE "unité:nom"
Efface le fichier de données «nom» sur l'unité spécifiée. Exemple :
DELETE "B:CLIENTS". Le fichier doit être fermé avant d'exécuter
cette commande.
Voir aussi CREATE, OPEN, CLOSE et USE.
DELETEW
Syntaxe : DELETEW "unité:nom.ext"
Efface tout type de fichier portant le nom spécifié sur l'unité
choisie. La syntaxe à respecter est la même que pour DELETE, si
ce n'est que le type de fichier doit être indiqué par une extension.
Vous pouvez également vous servir des jokers. Ex. : pour effacer
tous les fichiers blocs-notes sur C:
DELETEW "C:*.NTS"
Pour tout renseignement sur les extensions de fichier, consultez le
chapitre 6.
DELETEW est une commande extrêmement puissante. Tous les fichiers doivent être fermés lorsqu'elle est utilisée. Dans le cas contraire, la commande les fermé automatiquement.
Syntaxe : | d$=DIR$("unité")
d$=DIR$("") |
Produit le nom d'un fichier de données :
1 | DIR$(unité:) produit le nom du premier fichier de données sur l'unité spécifiée. Le nom d'unité (A, B ou C) doit être spécifié entre guillemets et parenthèses. Ex. : D$=DIR$("A"). |
---|---|
2 | Lorsque cette fonction est exécutée par la suite sur une chaîne vide entre parenthèses, elle produit le nom des fichiers suivants sur l'unité. Lorsqu'il n'en reste plus aucun, elle produit une chaîne vide. |
DIRW$
Syntaxe : d$=DIRW$("unité:nom.ext")
d$=DIRW$("")
Produit le nom de tout type de fichier. Cette fonction est similaire à DIR$, mais vous devez spécifier un nom de fichier et une extension en plus de l'unité. Vous pouvez également vous servir de jokers. Pour produire le nom du premier bloc-note sur B:, exécutez la commande D$=DIRW$("B:*.NTS"). Pour tout renseignement complémentaire sur les extensions de fichier, consultez le chapitre 6.
Affiche une chaîne ou un enregistrement en fonction de la valeur de x%. x% peut avoir pour valeur -1, 0 ou 1.
-1 as est ignoré et l'enregistrement en cours est affiché, avec une zone différente sur chaque ligne de l'écran. Les touches du curseur permettent de faire défiler l'enregistrement.
1 as est affiché comme indiqué ci-dessus. Si a$ contient des caractères de tabulation (caractère ASCII 9), ceux-ci divisent la chaîne en plusieurs zones de sorte à l'afficher sur plusieurs lignes.
0 as est ignoré et le dernier enregistrement ou chaîne affiche est poursuivi. Si l'utilisateur appuie sur une touche autre que les touches fléchées. L'OPL produit la valeur de la touche en question.
Aucune autre commande, ni fonction, ne doit être utilisée entre DISP avec x% égal à 1 ou -1 et DISP avec x% égal à 0. Exemple :
A%=DISP(1,A$) WHILE A%<>13 A%=DISP(0,"") ENDWH
Cet exemple affiche la valeur de A$ jusqu'à ce que l'utilisateur
appuie sur une touche. Il n'y a visiblement aucune raison
d'utiliser une autre commande ou fonction accédant à l'écran
entre les deux commandes DISP. Une telle commande risquerait
d'ailleurs d'avoir des résultats imprévisible. (Le code de la touche
EXE est 13 ; pour tout renseignement complémentaire, voir
l'annexe A).
Voir aussi VIEW et EDIT.
Syntaxe : | DO
<liste d'instruction> UNTIL x=y |
La commande DO indique le début d'une liste d'une ou plusieurs instructions qui se termine à la commande UNTIL. La liste d'instructions est répétée jusqu'à ce que la commande UNTIL produise une valeur vraie.
DOW
Syntaxe : d%=DOW(jour%,mois%,année%)
Indique le jour de la semaine correspondant à la date spécifiée
sous forme de valeur comprise entre 1 et 7. (Lundi correspond à
la valeur 1). Exemple :
D%=DOW(25,12,1990) produit la valeur 2, mardi.
Affiche une chaîne que vous pouvez éditer à l'écran au moyen des touches fléchées et de DEL, var$ peut être un nom de variable chaîne ou de zone.
Une fois que vous avez terminé l'édition, appuyez sur EXE pour
conserver la chaîne éditée. Si vous appuyez sur EXE avant
d'apporter les modifications nécessaires, la chaîne spécifiée dans
var$ est conservée. En appuyant sur ON/CLEAR pendant
l'édition, vous effacez la chaîne pour pouvoir entrer le texte
requis. A noter toutefois que si TRAP est utilisée avec cette
commande et que vous appuyez à deux reprises sur ON/CLEAR,
la saisie est annulée et le contrôle du programme passe à la ligne
définissant la condition d'erreur ESCAPE.
Voir aussi DISP et VIEW.
ELSE Voir IF.
ENDIF Voir IF.
ENDWH Voir WHILE.
Vérifie la présence d'une fin de fichier. Une instruction de
programme essayant de lire au-delà du dernier enregistrement
contenu dans un fichier de données provoque une fin de fichier
(EOF). Il est possible de vérifier cette condition en procédant de la
manière suivante :
DO
<liste d'instructions>
UNTIL EOF
La fonction EOF produit la valeur -1 (vraie) si la fin du fichier a
été atteinte ou 0 (fausse) dans le cas contraire.
Efface l'enregistrement en cours dans le fichier en vigueur. A la suite de cette commande, l'enregistrement situé à la suite de celui que vous venez d'effacer devient l'enregistrement en cours. S'il s'agissait du dernier enregistrement du fichier, l'enregistrement en cours est vide et la fonction EOF est vraie.
Fournit le numéro de la dernière erreur qui s'est produite.
L'annexe D contient la liste de tous les messages d'erreur en
ordre numérique. La valeur produite est comprise entre 0 et 255.
S'il s'agit de 0, aucune erreur n'est intervenue.
Voir aussi ERR$, RAISE, ONERR.
Produit un message d'erreur sous forme de chaîne, x% peut avoir
pour valeur un nombre - ex. : E$=ERR$(240) - pour produire le
message d'erreur associé ou ERR - ex. : PRINT ERR$(ERR) - pour
imprimer le message correspondant à la dernière erreur qui s'est
produite. Si la valeur se situe hors de la gamme 192-255, la
fonction a pour résultat "ERR INCONNUE" suivie du numéro
spécifié. La liste des messages d'erreurs est donnée dans l'annexe
D.
Voir aussi ERR, ONERR, et RAISE.
ESCAPE OFF/ESCAPE ON
Syntaxe : ESCAPE OFF ou ESCAPE ON
Désactive et active la touche ON/CLEAR, il est normalement possible de sortir d'un programme en cours d'exécution en appuyant sur ON/CLEAR, puis sur Q. ESCAPE OFF annule cet usage de la touche ON/CLEAR et ESCAPE ON lui permet de le reprendre. ESCAPE ON est la condition par défaut.
Attention : si le programme commence une boucle ne comportant pas de fin logique et que vous avez exécuté la commande ESCAPE OFF, vous ne pourrez en sortir qu'en retirant la pile de l'Organiseur. Toutes les données enregistrées dans la mémoire vive de la machine seront alors effacées.
EXIST
Syntaxe : e%=EXIST("unité:nom")
Vérifie l'existence du fichier de données «nom» sur l'unité spécifiée.
Cette fonction est vraie lorsque le fichier existe et fausse dans le
cas contraire - EXIST peut donc être utilisée dans une instruction
IF, exemple :
IF EXIST ("a:clients")
<liste d'instructions>
ENDIF
Voir aussi DIR$.
Élève la valeur de la constante arithmétique e (2.71828...) à la puissance x.
Recherche la chaîne spécifiée entre parenthèses dans le fichier de
données en cours. Si la fonction trouve la chaîne en question, elle
produit le numéro de l'enregistrement dans lequel elle figure et
fait de celui-ci l'enregistrement en cours. Dans le cas contraire,
elle a pour valeur zéro.
Voir aussi NEXT.
Comme FIND, cette fonction recherche la chaîne spécifiée entre
parenthèses dans le fichier de données en cours. La seule
différence entre les deux fonctions est que FINDW vous permet
d'utiliser des jokers dans l'expression chaîne. Ainsi, pour
rechercher un enregistrement contenant à la fois «Dr» et «DUBOIS»
ou «DUPUIS», vous utiliserez l'instruction :
f%=FINDW("*DR*DU++IS*")
Avec cette fonction, le premier enregistrement du fichier de
données devient l'enregistrement en cours.
Voir aussi ERASE, NEXT, POSITION, LAST, BACK et POS.
FIX$
Syntaxe : f$=FIX$(x,y%,z%)
Produit la représentation chaîne de x, avec y% de décimales dans une zone contenant z% caractères de longueur. Si z% est négatif, la chaîne est justifiée à droite. Ainsi :
FIX$(123456.127,2,9) = "123456.13" FIX$(1,2,-5) = " 1.00"
Si la valeur ne tient pas dans la longueur de zone spécifiée, la
chaîne produite contient des astérisques.
Voir aussi GEN$, NUM$ et SCI$.
Convertit l'expression entière entre parenthèses en valeur a virgule flottante.
Produit le nombre d'octets libres dans la zone de travail.
Voir aussi SPACE.
Cette instruction produit une représentation chaîne x dans une
zone de y% caractères de longueur. GEN$ s'efforce de représenter
la valeur sous forme d'entier, de nombre décimal ou scientifique
(dans cet ordre). Si la valeur de y% est négative, le résultat est
justifié à droite. Si le résultat ne tient pas dans la longueur de
zone spécifiée, la chaîne produite contient des astérisques.
Voir aussi FIX$, NUM$ et SCI$.
Cette instruction attend que l'utilisateur appuie sur une touche et
produit la valeur ASCII ou un code spécial associé à la touche en
question. Ainsi, si vous appuyez sur la touche A minuscule, cette
instruction a pour résultat 97. En revanche, si vous appuyez sur
EXE, le résultat est 13. Une table des valeurs ASCII et des codes
spéciaux est donnée à l'annexe A.
Voir aussi GET$, KEY, KEY$ et PAUSE.
Cette instruction attend que l'utilisateur appuie sur une touche et
indique la touche en question sous forme de chaîne. Ainsi, si
vous appuyez sur la touche A minuscule, la chaîne résultante est
«a».
Voir aussi GET, KEY et KEY$.
GLOBAL
Syntaxe : GLOBAL var1,var2%,var3$(longueur),var4(n)
Cette instruction permet de déclarer les variables utilisées dans la procédure en cours et celles qu'elle invoque.
Les noms de variable ne se terminant pas par un signe spécial désignent des variables à virgule flottante, alors que ceux qui se terminent par le signe pourcent (%) contiennent des entiers et ceux qui se terminent par le signe (s) représentent des variables chaînes. Les noms des variables chaînes doivent être suivis de la longueur maximum de la chaîne entre parenthèses.
La dernière variable de l'exemple ci-dessus est un tableau a virgule flottante. La valeur entre parenthèses indique le nombre d'éléments contenus dans le tableau. Il existe trois types de variables de tableau.
Les noms de variables peuvent contenir jusqu'à 8 caractères
alphanumériques dont le premier doit être une lettre. Les signes
% et $ sont compris dans la longueur. Il est possible d'utiliser
plus d'une instruction GLOBAL ou LOCAL, mais elles doivent être
placées sur les premières lignes de la procédure. Pour tout
renseignement complémentaire, consultez le chapitre consacré aux
variables.
Voir aussi LOCAL.
Renvoie le contrôle du programme a la ligne contenant le label::. Il doit se trouver dans la procédure en cours et son nom doit se terminer par deux signes «deux points». Un nom de label peut contenir jusqu'à 8 caractères de longueur, signes «deux points» exclus.
Produit la version hexadécimale (base 16) de l'expression entière entre parenthèses. Exemple : HEX$(255) produit la valeur "FF".
(Il est possible d'entrer des valeurs hexadécimales en les faisant précéder du signe $. Ainsi, PRINT $FF produit la valeur 255.)
Produit l'heure du jour indiquée par l'horloge du système (0 à 23).
Voir aussi SECOND, MINUTE, DAY, MONTH, YEAR, DATIM$.
Produit la valeur absolue ou, autrement dit, sans signe d'un
entier. Ex. : IABS(-10) a pour valeur 10.
Voir aussi ABS.
Syntaxe : | IF x=y
<liste d'instruction» ELSEIF x=z <liste d'instruction» ELSE <liste d'instruction» ENDIF |
L'instruction IF doit être immédiatement suivie d'une expression. Si le résultat de l'expression est une valeur logique vraie (différente de zéro), les instructions suivantes sont exécutées. En revanche, si l'expression a pour résultat une valeur logique fausse (zéro), ces instructions sont ignorées. La liste d'instructions doit être suivie de la commande ENDIF.
L'instruction ELSEIF est facultative. Lorsqu'elle est utilisée et que l'expression suivante produit une valeur logique vraie - alors que les précédentes étaient fausses, la liste suivante d'instructions est exécutée. Il peut y avoir plusieurs instructions ELSEIF accompagnées, chacune, de sa propre liste d'instructions.
L'instruction ELSE est également facultative. Si aucune des expressions précédentes n'a produit de valeur vraie, la liste d'instructions située entre ELSE et ENDIF est exécutée.
Syntaxe : | INPUT var%
INPUT var INPUT var$ INPUT zone.log |
Permet de saisir des données au clavier durant l'exécution d'un programme. Il existe quatre variantes de cette commande.
La variable fournie doit avoir été déclarée précédemment au moyen d'une commande GLOBAL ou LOCAL, ou former une variable de zone dans le fichier en cours. Si les caractères saisis sont enregistrés dans une variable chaîne, il ne faut pas en dépasser la longueur maximum.
Si l'entrée saisie est incorrecte (par exemple, une chaîne dans une variable entière), un point d'interrogation "?" s'affiche et vous pouvez recommencer. Cependant, si vous avez utilisé la commande TRAP, le contrôle du programme est renvoyé à la ligne de la procédure définissant une condition d'erreur ESCAPE (n 206).
Produit la partie entière de x. Les valeurs négatives sont arrondies
à la valeur inférieure. Ainsi, l'instruction INT (-5.3) produit-elle
la valeur -6. Cette instruction doit être utilisée lorsque la valeur
produite est comprise dans la gamme d'entiers autorisée sur
l'Organiseur.
Voir aussi INTF.
Cette fonction s'utilise comme INT, mais la valeur produite est un nombre à virgule flottante. Elle est donc nécessaire lorsqu'un calcul d'entier dépasse la gamme d'entiers de l'Organiseur. Exemple: PRINT INTF(320000/3)*100.
Produit la valeur ASCII de la touche pressée. Si l'utilisateur
n'appuie sur aucune touche, cette instruction a pour valeur zéro.
Elle n'attend pas qu'une touche soit pressée.
Voir aussi PAUSE, GET, GET$, KEY$.
Produit une chaîne contenant la touche pressée. Si l'utilisateur
m'appuie sur aucune touche, cette instruction produit une chaîne
vide. Elle n'attend pas qu'une touche soit pressée.
Voir aussi KEY, GET et GET$.
Verrouille le clavier en mode majuscule SHIFT, CAPS, etc. x% doit être une valeur comprise entre 1 et 4.
1 | Alphabétique - majuscule |
2 | Alphabétique - minuscule |
3 | Numérique - majuscule |
4 | Numérique - minuscule |
LEFT$
Syntaxe : b$=LEFT$(a$,x%)
Produit les x% caractères de gauche de la chaîne spécifiée par a$.
Voir aussi RIGHT$, MID$, LEN et LOC.
Produit la longueur de l'expression chaîne a$.
Produit le logarithme naturel (base e) de l'expression entre
parenthèses.
Voir aussi LOG.
Indique à quel endroit b$ se produit dans a$. Ex. :
LOC ("PETIT", "ET") produit la valeur 2 dans la mesure où la
sous chaîne "ET" commence au deuxième caractère de la chaîne
principale. Si b$ ne se produit pas dans a$, l'instruction a pour
valeur zéro.
Voir aussi LEFT$, RIGHT$, MID$ et LEN.
LOCAL
Syntaxe : LOCAL var1%,var2,var3$(longueur),var4(n)
Cette instruction déclare les variables utilisées uniquement dans la procédure en cours. D'autres procédures peuvent donc utiliser des variables du même nom. Pour tout renseignement sur la déclaration des variables, consultez la description de GLOBAL.
Produit le logarithme de base 10 de l'expression entre
parenthèses.
Voir aussi LN.
LOWER$
Syntaxe : b$=LOWER$(a$)
Convertit en minuscules les caractères majuscules de l'expression
chaîne entre parenthèses et produit une chaîne entièrement en
minuscules.
Voir aussi UPPER$.
LPRINT
Syntaxe : LPRINT x,y%;a$
Imprime sur l'imprimante ou vers le port série (Comms Link). S'il n'y pas d'imprimante, ni de câble Comms Link, connecté à l'Organiseur, le message d'erreur PERIPH ABSENT apparaît. Si l'imprimante Psion Printer II est connectée à l'Organiseur et que vous obtenez ce message d'erreur, appuyez sur ON/CLEAR à partir du menu principal pour charger le logiciel d'imprimante.
Si les éléments à imprimer sont séparés par des virgules, un
espace est introduit entre chacun d'entre eux à l'impression. En
revanche, s'ils sont séparés par un point-virgule, ils sont
imprimés les uns à la suite des autres. Le point-virgule final
indique que les prochains éléments à imprimer au moyen d'une
commande LPRINT doivent commencer immédiatement. La virgule
finale a le même effet mais introduit un espace. Sinon,
l'impression se poursuit à la ligne suivante. Ainsi, l'instruction :
LPRINT "Nous sommes en",YEAR
imprime
Nous sommes en 1989
La commande PRINT fonctionne de la même manière que LPRINT, mais affiche les éléments sur l'écran au lieu de les lister sur imprimante.
Syntaxe : | m=MAX(élément1,élément2,èlément3)
m=MAX(tableau(),n) |
Produit la valeur la plus élevée de la série. Celle-ci peut contenir des éléments séparés les uns des autres par une virgule ou les éléments d'un tableau a virgule flottante. Pour tout renseignement sur le format des fonctions de séries, consultez la description de MEAN.
Syntaxe : | m=MEAN(élément1,élément2,èlément3)
m=MEAN(tableau(),n) |
Produit la moyenne des éléments de la série. La série peut contenir soit des éléments séparés les uns des autres par une virgule, soit les éléments d'un tableau à virgule flottante.
1 Les éléments d'une série peuvent être une combinaison de valeurs réelles et de variables entières et à virgule flottante. Ex. : m=MEAN(12,x,y%,3.6)
2 Dans un tableau, les deux arguments entre parenthèses représentent le nom du tableau et le nombre d'éléments du tableau sur lesquels la commande doit agir. Ex. : Pour produire la moyenne des trois premiers éléments d'un tableau nommé tab, exécutez la commande m=MEAN(tab(),3). L'exemple suivant produit la valeur 12.5 :
LOCAL a(3) a(1)=10 a(2)=15 a(3)=20 PRINT MEAN(a(),2)
MENU
Syntaxe : m%=MENU(option1,option2,...)
Affiche un menu dont les options peuvent être sélectionnées de la manière habituelle. Cette commande produit le numéro de l'option sélectionnée (1 à ...). Si vous appuyez sur ON/CLEAR, MENU produit la valeur 0.
Les options du menu sont affichées à partir de la première ligne de l'écran.
Remarque : si toutes les options du menu ont au maximum 6 caractères, le menu est affiché en 3 colonnes. Sinon, le menu est affiché en 2 colonnes.
MENUN
Syntaxe : m%=MENUN(n%,option1,option2,...)
Comme MENU, MENUN affiche un menu d'options. Des options sont toutefois affichées différemment selon la valeur de n% :
n%=0 donne le même résultat que MENU
n%=1 affiche un menu d'une ligne
n%=2 affiche un menu multiligne commençant sur la ligne
contenant le curseur. Le texte déjà affiché sur la ligne au-dessus
du curseur est conservé sur l'écran.
MID$
Syntaxe : m$=MID$(a$,x%,y%)
Produit une chaîne de y% caractères à partir du caractère en
position x% dans a$.
Voir aussi LEFT$, RIGHT$, LEN et LOC.
Syntaxe : | m=MIN(élément1,élément2,èlément3)
m=MIN(tableau(),n) |
Produit le plus petit élément de la série. Il peut s'agir d'une série d'éléments séparés par des virgules ou des éléments d'un tableau à virgule flottante. Pour tout renseignement sur le format des fonctions de séries, consultez la description de MEAN.
Produit le nombre de minutes indiqué sur l'horloge du système (0
à 59).
Voir aussi SECOND, HOUR, DAY, MONTH, YEAR et DATIM$.
Produit le mois en cours indiqué par l'horloge du système (1 à
12).
Voir aussi SECOND, MINUTE, HOUR, DAY, YEAR et DATIM$.
MONTH$
Syntaxe : m$=MONTH$(x%)
Convertit x%, une valeur comprise entre 1 et 12, en mois. Ex. : M$=MONTH$(1) produit la valeur JAN.
Avec cette fonction, l'enregistrement suivant du fichier devient
l'enregistrement en cours. Si l'utilisation de NEXT se poursuit au-
delà de la fin du fichier, aucune erreur n'est signalée mais
l'enregistrement en cours est vide et la fonction EOF est vraie.
Voir aussi FIRST, LAST, BACK, POSITION et POS.
Produit une représentation chaîne du nombre à virgule flottante x
sous forme d'entier dans une zone de y% caractères de longueur.
Si y% est une valeur négative, la chaîne est justifiée à droite. Si la
valeur ne tient pas dans la longueur de zone spécifiée, la chaîne
résultante contient des astérisques.
Voir également FIX$, GEN$ et SCI$.
Éteint l'Organiseur. Pour reprendre l'exécution du programme à la ligne suivant la commande OFF dans le programme, il suffit d'appuyer sur ON/CLEAR. x% doit avoir une valeur comprise entre 1 et 1800. Si vous spécifiez cette valeur, l'Organiseur s'éteint pendant le nombre de secondes correspondant avant de se rallumer automatiquement.
OPEN
Syntaxe : OPEN "unité:nom",nomlog,zone1,zone2
Ouvre le fichier de données portant le nom logique "nomlog" et
contenant les zones1, zone2, etc., sur l'unité spécifiée. Ce fichier
peut être ensuite désigné par son nom logique (A, B, C ou D)
dans la suite du programme. Il est possible d'ouvrir jusqu'à 4
fichiers simultanément. Pour tout renseignement complémentaire,
consultez la section consacrée à l'ouverture des fichiers dans le
chapitre de manipulation des fichiers de données.
Voir aussi CREATE, CLOSE, DELETE et USE.
ONERR
Syntaxe : ONERR label:: et ONERR OFF
Si une erreur se produit durant l'exécution du programme, l'instruction ONERR label: transfère le contrôle du programme à la ligne contenant le label. ONERR OFF annule l'instruction ONERR label:: de sorte que toute erreur se produisant par la suite ne soit pas renvoyée au label::. Il est conseillé de placer la commande ONERR OFF juste après le label et de tester explicitement la condition de la pile.
Suspend l'exécution du programme en fonction de la valeur de x% :
0 | attend que l'utilisateur appuie sur une touche. |
---|---|
<0 | fait une pause de x% (rendu positif) vingtièmes de secondes, ou jusqu'à ce qu'une touche soit pressée. |
>0 | fait une pause de x% vingtièmes de seconde. |
PAUSE 100 oblige donc le programme à faire une pause de cinq
secondes. Dans les deux premiers cas, la touche pressée est
enregistrée dans un tampon. Il est donc préférable de l'en retirer
au moyen de la fonction KEY :
<liste d'instructions>
PAUSE 0
KEY
<liste d'instructions)
La touche enregistrée dans le tampon au moyen de la commande
PAUSE 0 sert d'entrée à la fonction KEY.
Produit la valeur (0 à 255) enregistrée à l'adresse spécifiée par l'expression entre parenthèses.
Produit la valeur de l'entier de deux octets enregistré aux adresses x% et x%+1.
Calcule Pi (3.14...).
Écrit la valeur y%, qui doit être comprise entre 0 et 255, à l'adresse de mémoire x%, qui doit être un entier. Les adresses supérieures à 32767 sont accessibles au moyen de valeurs négatives ou hexadécimales. Ex. : $FFFF =-1, ce qui correspond à l'adresse 65535.
Attention : cette commande doit être utilisée avec précaution pour éviter la perte des données enregistrées dans l'Organiseur.
Écrit l'entier y% dans deux adresses successives de mémoire, en commençant par l'adresse x% et en plaçant l'octet de poids faible à l'adresse la plus basse.
Attention : cette commande doit être utilisée avec précaution pour éviter la perte des données enregistrées dans l'Organiseur.
Produit le numéro de l'enregistrement en cours dans le fichier de données.
POSITION
Syntaxe : POSITION x%
Fait de l'enregistrement numéro x% l'enregistrement en cours
dans le fichier de données en vigueur. Si la valeur de x% est
supérieure au nombre d'enregistrements contenus dans le fichier.
POSITION a pour résultat une fin de fichier EOF.
Voir aussi FIRST, NEXT, LAST, BACK et POS.
Affiche des valeurs ou du texte sur l'écran.
Si les éléments à afficher sont séparés par des virgules, un espace
est inséré entre chacun d'entre eux à l'impression. En revanche,
s'ils sont séparés par des points-virgules, ils sont imprimés les
uns a la suite des autres.
Le point-virgule final indique que les éléments suivants à
imprimer au moyen d'une commande PRINT doivent commencer
immédiatement. La virgule finale a le même effet mais insère un
espace. Si aucun de ces signes de ponctuation n'est utilisé, les
nouveaux éléments à imprimer commencent à la ligne suivante.
Ainsi, l'instruction :
PRINT "Nous sommes en",YEAR
affiche
Nous sommes en 1989
La commande LPRINT agit de la même manière que la commande PRINT, mais liste les données sur une imprimante au lieu de les afficher sur l'écran.
Convertit x de degrés en radians.
Voir aussi DEG.
Produit une erreur artificielle, même si celle-ci ne s'est pas produite. Si une instruction ONERR a été utilisée précédemment, le message correspondant au numéro de l'erreur est affiché. Les numéros d'erreur internes pouvant être affectés à x% doivent être compris entre 192 et 255.
Pour tout renseignement complémentaire, consultez le chapitre
sur le traitement des erreurs. La liste complète des messages
d'erreur est donnée dans l'annexe D.
Voir aussi ONERR, ERR et ERR$.
RANDOMIZE
Syntaxe : RANDOMIZE x
Donne une nouvelle valeur de base au générateur de nombres
aléatoires de sorte à créer une nouvelle séquence de nombres
aléatoires. Servez-vous de cette fonction si vous souhaitez utiliser
la même séquence de nombres aléatoires à plusieurs reprises.
Voir aussi RND.
Indique le nombre d'octets contenus dans l'enregistrement en cours. Un enregistrement ne peut contenir plus de 254 caractères. Cette fonction peut donc être utilisée pour vérifier s'il est possible d'ajouter des données dans un enregistrement sans dépasser cette limite.
L'instruction REM précède une remarque destinée à expliquer le déroulement du programme. L'Organiseur ignore le texte suivant l'instruction REM jusqu'à la fin de la ligne sur laquelle elle figure.
RENAME
Syntaxe : RENAME "unité:nom1","nom2"
Renomme le fichier nom1 en fichier nom2 sur l'unité spécifiée. Ex. : RENAME "B:ADR", "ANCADR"
REPT$
Syntaxe : r$=REPT$(a$,x%)
Produit une chaîne contenant x% répétitions de a%.
Voir aussi LEFT$, RIGHT$, MID$, UPPER$, LOWER$, LEN et LOC.
RETURN
Syntaxe : RETURN ou RETURN x
Utilisée seule, la commande RETURN termine l'exécution d'une procédure et renvoie le contrôle du programme à l'endroit où la procédure a été invoquée. L'emploi de cette commande à la fin d'une procédure est facultatif.
La commande RETURN peut également être utilisée pour renvoyer une valeur au niveau à partir duquel la procédure a été appelée. La valeur en question doit être indiquée a la suite de la commande RETURN : RETURN X% ou RETURN X ou RETURN A$.
Une procédure ne peut renvoyer qu'un seul type de valeur déterminé par l'identificateur terminant le nom de la procédure. Ainsi, proc$: ne peut renvoyer qu'une chaîne.
RIGHT$
Syntaxe : r$=RIGHT$(a$,x%)
Produit les x% caractères de droite de a$.
Voir aussi LEFT$, MID$, REPT$, LEN et LOC.
Produit une valeur aléatoire à virgule flottante comprise entre 0
(incluse) et 1 (exclue).
Voir aussi RANDOMIZE.
SCI$
Syntaxe : s$=SCI$(x,y%,z%)
Produit une représentation chaîne de x en notation scientifique
avec y% décimales dans une zone de z% caractères de longueur.
Exemple:
SCI$(123456,2,8) ="1.23E+05"
SCI$(1,2,8) ="1.00E+00"
SCI$(123456789,2,-9) ="1.23E+08"
Si la valeur ne tient pas dans la longueur de zone spécifiée, la
chaîne produite contient des astérisques.
Voir aussi FIX$, GEN$ et NUM$.
Produit le nombre de secondes indiqué par l'horloge du système (0
à 59).
Voir aussi MINUTE, HOUR, DAY, MONTH et YEAR.
Calcule le sinus de l'expression entre parenthèses. L'expression représente un angle exprimé en radians.
Produit le nombre d'octets libres sur l'unité en cours. Vous devez
tout d'abord ouvrir un fichier sur l'unité.
Voir aussi FREE.
Calcule la racine carrée de l'expression entre parenthèses.
STD
Syntaxe : s=STD(élément1,élément2,élément3)
s=STD[tableau(),n)
Produit l'écart-type des éléments de la série. La série peut être
composée soit d'éléments séparés par des virgules, soit d'éléments
d'un tableau à virgule flottante.
Pour tout renseignement sur le format des fonctions de listage,
consultez la description de la commande MEAN.
Interrompt l'exécution du programme et revient à l'endroit à partir duquel il a été lancé sur l'Organiseur, c'est-à-dire le menu principal ou la calculatrice.
Syntaxe : | s=SUM(élément1,élément2,èlément3)
s=SUM(tableau(),n) |
Calcule la somme des éléments de la série. La série peut contenir soit des éléments séparés par une virgule, soit des éléments d'un tableau à virgule flottante. Pour tout renseignement sur le format des fonctions de séries, consultez la description de la commande MEAN.
Produit la tangente de l'expression entre parenthèses. L'expression représente un angle exprimé en radians.
TRAP peut précéder une des commandes suivantes :
APPEND/BACK/CLOSE/COPY/COPYW/CREATE/
DELETE/DELETEW/ERASE/EDIT/FIRST/INPUT/LAST/
NEXT/OPEN/POSITION/RENAME/UPDATE/USE
Exemple : TRAP FIRST. Toute erreur résultant de l'exécution de la
commande est interceptée - la ligne suivante du programme est
exécutée, que l'erreur affiche ou non un message d'erreur en
temps normal.
UDG
Syntaxe : UDG x%,a%,b%,c%,d%,e%,f%,g%,h%
Définit un caractère d'affichage. x% représente le numéro du
caractère (0 à 7), alors que les entiers a% à h% définissent
chaque ligne du caractère. Ainsi, l'instruction :
UDG 7,0,0,0,0,0,0,0,31
affecte-t-elle le caractère de soulignement à UDG 7.
Pour tout renseignement complémentaire sur cette commande,
consultez l'annexe A.
UNTIL
Voir la description de la commande DO.
L'enregistrement en cours dans le fichier de données est effacé et
les valeurs de la zone en cours sont ajoutées à la fin du fichier
sous forme d'enregistrement.
Voir aussi APPEND.
UPPER$
Syntaxe : u$=UPPER$(a$)
Convertit en majuscules les caractères minuscules contenus dans
l'expression chaîne spécifiée entre parenthèses. La chaîne
résultante est entièrement en majuscules.
Voir aussi LOWER$.
Sélectionne le fichier de données portant le nom logique spécifié
(A, B, C ou D) qui doit avoir été ouvert tout d'abord au moyen
d'une commande OPEN ou CREATE.
Voir aussi OPEN, CLOSE, CREATE et DELETE.
La valeur de y% est transmise au registre D et la valeur de x%
est transmise au registre PC du microprocesseur HD6303X. Le
microprocesseur exécute ensuite le programme en langage
machine à partir de l'adresse x%. A la fin de la routine, la valeur
du registre X est renvoyée au langage sous forme de nombre
entier.
Attention : cette fonction doit être employée avec précaution
pour éviter la perte de toutes les données enregistrées dans
l'Organiseur.
Voir aussi USR$ et ADDR.
La valeur de y% est transmise au registre D et la valeur de x% est transmise au registre PC du microprocesseur HD6303X. Le microprocesseur exécute ensuite le programme en langage machine à partir de l'adresse x%.
À la fin du sous-programme, la valeur du registre X doit désigner
une chaîne précédée d'un octet de longueur. Cette chaîne est
alors renvoyée.
Attention : cette commande doit être employée avec
précaution pour éviter la perte de toutes les données
enregistrées dans l'Organiseur.
Voir aussi USR et ADDR.
Produit un nombre à virgule flottante correspondant à la valeur de l'expression chaîne entre parenthèses. Ex. : VAL("470.0") produit la valeur 470.0. La chaîne doit uniquement contenir des caractères numériques. La notation scientifique est autorisée et VAL("1.3E10") produit donc la valeur 1.3E10.
VAR
Syntaxe : v=VAR(élément1,élément2,élément3)
v=VAR(tableau(),n)
Produit la variance des éléments de la série. Celle-ci peut contenir
soit des éléments séparés par des virgules, soit des éléments d'un
tableau a virgule flottante.
Pour tout renseignement complémentaire sur le format des
fonctions de séries, consultez la description de la commande
MEAN.
Affiche a$ à la ligne numéro x% (1, 2, 3 ou 4) sur l'écran. a$ peut être une chaîne, une variable chaîne ou un nom de zone.
Si le texte contient plus de 20 caractères, l'écran d'affichage défile
automatiquement vers la gauche. En appuyant sur la touche ← ou
→, vous pouvez changer la direction du défilement. Toute autre
touche interrompt le défilement du texte et produit la valeur ASCII
de la touche pressée. Si VIEW est utilisée à nouveau alors que a$
contient une chaîne vide, l'affichage se poursuit à l'endroit ou il a
été interrompu par une pression sur une touche.
Voir aussi DISP.
WEEK
Syntaxe : w%=WEEK(jour%,mois%,année%)
Produit le numéro de la semaine contenant la date spécifiée. Une semaine commence le lundi. Le premier lundi du mois de janvier marque donc le début de la semaine 1.
Syntaxe : | WHILE x<>y <liste d'instruction> ENDWH |
Cette structure commence par la commande WHILE qui précède une expression numérique.
La liste d'instructions suivante, qui doit se terminer par ENDWH,
est exécutée tant que l'expression a pour résultat une valeur
logique vraie (différente de zéro).
Voir aussi DO/UNTIL.
Produit l'année à en cours à partir de la date du système (1900 à 2155). Voir aussi SECOND, MINUTE, HOUR, DAY et MONTH.
Le jeu complet de caractères de l'Organiseur est illustré sur le tableau ci-contre. Les plus fréquents d'entre eux peuvent bien entendu être saisis directement au clavier, mais il en existe d'autres qui ne sont pas représentés par des touches. Ils sont toutefois accessibles au moyen de la fonction CHR$ de l'OPL.
En complétant la fonction CHR$ de la valeur appropriée comme
indiqué dans le tableau ci-contre, vous pouvez imprimer sur
l'écran ou sur imprimante les caractères qui y sont illustrés ou
les affecter à des variables chaînes. A titre d'exemple, l'instruction
permettant d'afficher le point d'interrogation est la suivante :
PRINT CHR$(63)
Pour afficher le caractère «é», exécutez :
PRINT CHR$(130)
Comment déterminer le code ASCII d'un caractère du clavier
La valeur ASCII d'un caractère du clavier peut être déterminée
sans consulter le tableau. Il suffit pour cela d'entrer le signe %,
suivi du caractère en question dans la calculatrice. En entrant
%P, par exemple, dans la calculatrice, vous obtenez la valeur 80.
Le tableau illustré contient les caractères portant les codes 32 à 255. La valeur 32 correspond à l'espace.
Les codes 0 à 7 sont réservés aux caractères définis par l'utilisateur (page A-6).
Les codes 8 à 31 sont réservés aux caractères de contrôle (page A-5).
Il est souvent utile de connaître la valeur ASCII d'un caractère dans une procédure - pour savoir si l'utilisateur a appuyé sur O ou sur N par exemple.
Pour y parvenir, il vous suffit d'entrer le signe % suivi du caractère, ex. : %O. L'exemple ci-dessous fait partie d'une procédure qui vous demande si vous souhaitez ou non effacer un élément quelconque. Si vous appuyez sur N, le programme s'interrompt. En revanche, la touche O appelle une autre procédure nommée effacer:. Toute autre touche renvoie la procédure à un label pour vous donner la possibilité de recommencer.
PRINT "EFFACER O/N?" label:: KSTAT 1 g%=GET IF g%=%N OR g%=%n :STOP ELSEIF g%=O OR g%=%o :effacer: ELSE GOTO label:: ENDIF
KSTAT 1 verrouille le clavier en alphabétique majuscule.
Lorsque des fonctions comme GET et KEY sont utilisées, elles produisent généralement le code ASCII du caractère correspondant à la touche pressée. Les touches ne figurant pas dans le jeu ASCII produisent les valeurs suivantes :
ON/CLEAR | 1 |
MODE | 2 |
↑ | 3 |
↓ | 4 |
← | 5 |
→ | 6 |
SHIFT et DEL | 7 |
DEL | 8 |
EXE | 13 |
Les codes 8 à 26 assurent des fonctions spéciales à l'écran. Ils ne produisent pas de caractères visibles mais peuvent être utilisés avec la commande PRINT pour produire les effets décrits ci- dessous. A titre d'exemple, l'instruction PRINT CHRS(22) efface la troisième ligne de l'écran.
CHR$(8) | Déplace le curseur d'un caractère vers la gauche. |
CHR$(9) | Positionne le curseur sur la tabulation suivante (positions 0 et 10 sur l'écran). |
CHR$(10) | Positionne le curseur sur la ligne suivante. |
CHR$(11) | Place le curseur en position «d'origine» (coin supérieur gauche de l'écran). |
CHR$(12) | Efface l'écran (équivalent à une commande CLS). |
CHR$(13) | Positionne le curseur à gauche de la ligne en cours. |
CHR$(14) | Efface la première ligne de l'écran et positionne le curseur au coin supérieur gauche. |
CHR$(15) | Efface la deuxième ligne de l'écran et positionne le curseur à l'extrême gauche. |
CHR$(16) | Déclenche un bip sonore. |
CHR$(17) | Regénère la 1ère et la 2ème ligne. |
CHR$(18) | Regénère la 1ère ligne. |
CHR$(19) | Regénère la 2ème ligne. |
CHR$(20) | Regénère la 3ème ligne. |
CHR$(21) | Regénère la 4ème ligne. |
CHR$(22) | Efface la 3ème ligne. |
CHR$(23) | Efface la 4ème ligne. |
CHR$(24) | Imprime des pointillés, comme ceux qui s'affichent au-dessous d'un menu multiligne, sur la seconde ligne (en utilisant UDG 2). |
CHR$(25) | Imprime des points, comme ceux qui s'affichent au- dessus d'une ligne, sur la troisième ligne (en utilisant UDG 2). |
CHR$(26) | Efface la fin de la ligne. |
CHR$(27) à CHRS(31) sont réservés.
Les codes 0 a 7 sont réservés aux caractères définis par l'utilisateur. Vous pouvez vous servir de la commande UDG pour définir le modèle de points s'affichant lorsque vous imprimez un de ces caractères au moyen de la fonction CHR$.
Chaque caractère doit être défini ligne par ligne au moyen d'une séquence de huit octets, en commençant par la ligne du haut. (Seuls les cinq derniers bits 16 à 1 sont utilisés dans chacun des huit octets composant un caractère, dans la mesure où ils l'occupent que cinq points de largeur.)
Pour définir un personnage en mouvement en tant que caractère numéro un, utilisez l'instruction ci-dessous. La première valeur définit le numéro du caractère et les 8 valeurs suivantes chaque ligne du caractère.
UDG 1,30,14,4,14,30,14,11,25
Vous pourrez ensuite afficher le personnage en vous servant de l'instruction suivante :
PRINT CHR$(1)
L'horloge, les symboles affichés au coin supérieur gauche de l'écran et les lignes en pointillés au-dessus ou au-dessous des menus font tous appel à des caractères définis par l'utilisateur. A chaque fois qu'ils sont affichés, ils remplacent les caractères que vous avez définis. Il est donc nécessaire de les redéfinir à chaque fois que vous en avez besoin.
L'illustration ci-dessous indique les numéros UDG utilises par l'horloge, le symbole et le soulignement.
0 2 345671 | | |||||| X 12:55a Modif Nouv Lancer Imprim Dir Copier Efface
Pour afficher un menu souligné contenant un symbole et l'horloge, vous devez vous servir des caractères UDG 0 et 2 pour le symbole et le soulignement. Le programme d'enregistrement des appels téléphoniques décrit au chapitre 8 vous explique comment y parvenir.
Longueur | 142 mm |
Largeur | 78 mm |
Profondeur | 29,3 mm |
Poids (à l'origine) | 250 grammes |
Affichage
Écran d'affichage alphanumérique par points à cristaux liquides,
quatre lignes de vingt caractères.
Clavier
Trente-six touches alphanumériques au total, y compris touches
d'édition, fléchées, alphabétiques, numériques, MODE et
ON/CLEAR.
Microprocesseur
HD6303X a quartz de fréquence 3.6864 Mhz.
Mémoire
Mémoire morte : 64 Ko
Mémoire vive : 32 Ko LZ, 64 Ko LZ64
Mémoire morte programmable électriquement supplémentaire
8/16/32/64/128 Ko - Datapak.
Mémoire vive supplémentaire - Rampak.
Horloge
Horloge en temps réel avec source de fréquence par quartz 32768
Hz.
Support d'enregistrement
Mémoire morte programmable électriquement.
Conservation des données
«Durée moyenne sans pannes» 50 ans à une température allant
jusqu'à 100 C.
Formatage
Le Formateur de Psion efface un Datapak en 30 minutes. Le
Datapak peut être reformaté jusqu'à 100 fois.
Datapak 8 Ko | 8192 octets |
Datapak 16 Ko | 16 384 octets |
Datapak 32 Ko | 32 768 octets |
Datapak 64 Ko | 65 536 octets |
Datapak 128 Ko | 131 072 octets |
Support d'enregistrement
Mémoire vive protégée par pile.
Formatage
L'option de formatage Format du menu Outils efface le Rampak.
Capacité de mémoire
32 768 octets.
Pile alcaline standard longue durée de 9 Volts. Adaptateur secteur disponible.
Psion poursuit une politique de développement des produits susceptible de donner lieu à de légères modifications qui ne sont pas nécessairement reflétées dans ce manuel.
Ces adresses sont utilisées pour certaines variables du système. Elles sont accessibles au moyen des commandes PEEKB, PEEKW, POKEB et POKEW. N'utilisez ces commandes que si vous êtes sûr de savoir vous en servir.
Adresse | Défaut | Utilisation |
---|---|---|
$0069,$006A | ($04) | Compteur de retardement de défilement horizontal |
$006B,$006C | ($0A) | Compteur de retardement de défilement vertical |
$0077 | ($0E) | Délai avant auto-répétition du clavier |
$0078 | ($00) | Compteur d'auto-répétition du clavier |
$007C | différente | Indicateur de mise hors de zéro tension automatique,
0=désactivé |
$20CB,$20CC | Compteur de trame incrémenté tous les 50 ms. | |
$20CD,$20CE | ($0120) | Nombre de secondes par défaut avant mise hors tension automatique |
$00A4 | ($00) | Avertisseur désactivé. |
$2099 | ($F5) | Caractère d'encadrement des procédures en mode 2 lignes. |
$20C0 | ($01) | Durée d'un clic de touche, 0=silencieux. |
$20A7 | ($1F) | Définit les bits d'alarmes de jour ouvrable. La valeur par défaut est $1F - lundi au vendredi :
Bit de poids Bit de poids fort faible 1 | F | 0 0 0 1 | 1 1 1 1 Dim Sam Ven Jeu Mer Mar Lun |
L'Organiseur, modèle LZ, bénéficie de 64 Ko de mémoire morte et de 32 Ko de mémoire vite organisés de la manière suivante. Le modèle LZ64 dispose de deux rangées de mémoire vive supplémentaire de 16 Ko, comme indiqué.
Pour obtenir une valeur hexadécimale dans l'OPL, préfixez-la de l'identificateur $ - ainsi $FF représente 255.
Le microprocesseur HD6303X forme l'unité centrale de l'Organiseur. Ce processeur sophistiqué peut être programmé directement dans son propre langage appelé langage machine ou code machine.
Les programmes en langage machine sont plus rapides que les programmes OPL à l'exécution et occupent aussi moins de mémoire. En contre-partie, ils sont plus difficiles à écrire et a mettre au point. En outre, une simple erreur dans un programme en langage machine suffit parfois à effacer toutes les informations contenues dans la mémoire interne de l'Organiseur dans la mesure où de tels programmes prennent la contrôle total de la puce servant de «cerveau» à la machine.
Pour éviter une telle situation, il est préférable de sauvegarder toutes les données importantes dans un Pack de mémoire avant de tester les programmes en langage machine, pour ne pas perdre toutes les données en cas d'incident.
Les messages d'erreur sont listés en ordre numérique. Si vous ne parvenez pas à localiser un message parce que vous n'en connais- sez pas le numéro, consultez l'index pour savoir à quelle page il est traité. L'interception des erreurs est décrite au chapitre 7.
192 ERR ECRIT PERIPH
Cette erreur se produit généralement en présence d'un Pack de
mémoire défectueux ou lorsque vous essayez d'enregistrer des
données dans un Pack de programme protégé en écriture. Elle se
produit également lorsque vous essayez de formater un Datapak
au lieu d'un Rampak au moyen de l'option Format du menu des
outils, ou en cas d'échec de Comms Link.
193 ERR LECTR PERIPH
Cette erreur se produit généralement en présence d'un Pack
défectueux ou lorsque vous essayez de copier des données dans
un Pack protégé contre les copies.
194 PILE FAIBLE
La pile est usée. Éteignez l'Organiseur et consultez le chapitre 1
du manuel d'exploitation pour savoir comment changer la pile.
195 ERR SUR ENTIER
La gamme de valeurs autorisées pour les variables entières
(-32768 à +32767) a été dépassée.
196 FICH FERME
Vous avez essayé décrire dans un fichier qui n'est pas ouvert, ou
d'en lire le contenu.
197 NOM PROC ELEGAL
Cette erreur se produit lorsque vous choisissez un nom incorrect
de procédure avec l'option Nouv du menu Prog par exemple, ou
en essayant de l'insérer dans le menu principal.
198 ENGT TROP LONG
La longueur d'un enregistrement est limitée à 254 caractères.
199 FICH UTILISE
Vous avez essayé d'ouvrir ou d'effacer un fichier déjà ouvert.
200 ERR DE LECTURE
L'Organiseur ne parvient pas à lire les données d'un Datapak. Il
doit être reformaté.
201 ERR TYPE RUB
Cette erreur se produit lorsqu'une variable de zone utilisée ne
correspond à aucune des zones du fichier en cours.
202 MENU TROP LONG
La chaîne transmise à la fonction MENU est trop longue et doit
être réduite.
203 PROC ABSENTE
La procédure invoquée n'existe sur aucune unité.
Une variable utilisée n'a pas été déclarée en tant que variable globale dans la procédure d'appel et n'a pas non plus été déclarée en tant que variable locale ou globale dans la procédure en cours.
205 ERR NMB ARG
Un nombre incorrect d'argument a été transmis à la procédure.
206 ANNULATION
Vous avez appuyé sur la touche ON/CLEAR, suivie de Q, durant
l'exécution du programme qui s'est interrompu.
207 ERR NBRE RUB
Un fichier doit contenir au moins une zone, mais pas plus de
seize. Cette erreur se produit lorsque ces limites ne sont pas
respectées.
208 ERR ASSIGNATION
Vous avez essayé d'affecter une valeur au mauvais type de
variable - avec l'instruction a$=4.3 par exemple.
209 ERR NOM DOGIQUE
Vous avez utilisé un nom logique illégal ou, autrement dit, autre
que A, B, C ou D.
210 . ABSENTE
Vous avez oublié une virgule dans une liste on une série dont
chaque élément doit être limité par une virgule.
211 LABEL INCONNU
Vous avez essayé d'exécuter un branchement GOTO vers un label
qui n'existe pas dans la procédure en cours.
212 TROP DE NIVEAUX
Trop de structures sont imbriquées dans une procédure. La limite
est fixée à 8.
213 ERR DE STRUCTURE
Vous avez incorrectement imbriqué une structure IF/ENDIF,
WHlLE/ENDWH ou DO/UNTIL.
214 NOM DUPLIQUE
Le nom de fichier, procédure ou variable existe déjà dans l'unité
en COUPS.
215 ERR DE DIM
La déclaration de tableau contient une dimension (nombre
d'éléments) incorrecte. Ex. GLOBAL nom$(0,15).
216 ERR DECLARATION
Une variable n'a pas été correctement déclarée - ex. GLOBAL
nom$(300) - dans la mesure où la longueur de la chaîne dépasse
le maximum autorisé.
217 NOM PROC ABSENT
La première ligne du fichier programme externe qui a été produit
ne contient pas un nom correct de procédure.
218 NMB INCORRECT
Une valeur ne pouvant pas être évaluée correctement a été
utilisée. Ex. : 2.3.4.
219 MAUVAIS CAR
Un caractère illégal, comme ? ou @, a été utilisé dans une chaîne
ou une expression de calcul.
220 CHAINE TROP LONG
La chaîne produite dépasse l'espace affecté au moyen de la
commande GDOBAL ou UOCAL.
Ex. : LOCAL a$(10)
A$="123456789ABCDEF"
221 " MAL PLACE
Cette erreur se produit lorsqu'il n'existe pas de guillemet
correspondant.
222 MAUVAIS NOM
Un nom de variable incorrect est utilisé. Ex. : nom$$.
223 NOM TROP LONG
Le nom de fichier, procédure ou variable spécifié dépasse le
nombre maximum de caractères autorisés : c'est-à-dire huit
caractères, qualificatif $ ou % y compris.
224 TYPE INCORRECT
Une valeur de type incorrect a été affectée à une variable - ex. :
a$=12 ou a="texte" - ou une valeur de type incorrect a été affectée
à un paramètre de procédure.
225 ERR INDICE
Un indice hors gamme a été spécifié pour une variable de tableau
- ex. a(0) ou a(10) - alors que dans sa déclaration, le tableau a()
contient 9 éléments.
226 MAUVAIS ARG FNC
Le type ou le nombre d'arguments fournis à la fonction est
incorrect. Ex. : LOG(-1].
227 ERR ()
Les parenthèses ne sont pas correctement assorties.
228 ERR SYNTAXE
Une erreur de syntaxe a été rencontrée durant le transcodage de
la procédure.
229 PERIPH INACESS
Un Pack de programme ou de périphérique a été enlevé durant sa
vérification par l'Organiseur, ou s'est altéré.
230 PERIPH ABSENT
Vous avez essayé d'accéder à un périphérique qui n'est pas
disponible, comme l'imprimante par exemple. Lorsqu'aucune
imprimante n'est connectée, la commande LPRINT produit ce
message d'erreur.
231 ERR DE PERIPH
Cette erreur se produit lorsqu'une opération illégale doit être
exécutée sur un périphérique.
232 PAK FROTEGE
Vous avez essayé de copier le contenu d'un Pack protégé contre
les copies.
233 CAT PLEIN
Il ne peut y avoir plus de 110 fichiers de données sur chaque
unité. Vous avez essayé de créer un fichier alors que la limite
maximum a déjà été atteinte.
234 FICH INCONNU _
Vous avez essayé d'accéder à un fichier qui n'existe pas sur
l'unité spécifiée.
235 FIC EXISTANT
Vous avez essayé de créer un fichier ou une procédure existant
déjà sur l'unité spécifiée.
236 NOM FICH ILLEGAL
De nom de fichier choisi est incorrect (il ne doit pas contenir plus
de 8 caractères alphanumériques, le premier étant une lettre).
237 ERR TYPE RECORD
Cette erreur peut uniquement se produire en exécutant un
programme en langage machine.
238 FIN DU FICHIER
Cette erreur se produit lorsqu'une commande exécutée essaie de
lire au-delà de la fin du fichier.
239 PACK PLEIN
Vous avez essayé d'écrire dans un Datapak déjà complet.
240 PACK INCONNU
Une des unités est équipée d'un Pack qui n'est pas pris en charge
par l'Organiseur II.
241 PACK NON-VIERGE
Le Datapak contient encore des données et doit être reformaté.
242 PACK ECHANGE
Cette erreur peut se produire en appelant un sous-programme en
langage machine du système d'exploitation, ou lorsque vous
changez un Pack durant une opération de copie.
243 MAUV NOM PERIPH
Vous avez utilisé un nom de périphérique autre que A, B ou C.
244 PROTEGE EN ECRIT
Vous avez essayé d'écrire des données dans un Pack de
programme. Il est accessible en lecture, mais pas en couture.
245 ERR EN ECRITURE
L'Organiseur ne parvient pas à écrire des données dans un des
Datapaks. Essayez de le remettre en place.
246 PAS DE PACK
Le périphérique spécifié dans une instruction telle que CREATE,
OPEN, etc., ne contient pas de Datapak ou celui-ci a été retiré
pendant que l'Organiseur y accédait.
247 ERR ARGUMENT FNC
Un type incorrect d'argument a été transmis à une fonction ou à
une procédure d'utilisateur.
248 STACK UNDERFLOW
Cette erreur se produit uniquement lorsqu'un programme en
langage machine détruit la pile de l'Organiseur.
249 STACK OVERFLOW
Comme ci-dessus.
250 ERR CAR A NUM
Cette erreur se produit uniquement en appelant un sous-
programme en langage machine du système d'exploitation.
251 DIVISEUR NUL
Vous avez essayé d'effectuer une division par zéro.
252 ERR NUM-CAR
Une chaîne non numérique a été transmise à la fonction VAL.
253 EXP ILLEGAL
Une valeur dépasse la limite d'exposant autorisée (+ ou -99).
254 PLUS DE MEMOIRE
La mémoire interne de la machine est entièrement occupée par
des programmes, des entrées d'agenda et des fichiers de données,
ou le programme en cours a utilisé toute la mémoire disponible.
255 ERR ARGUMENT FNC
Cette erreur se produit uniquement en exécutant des sous-
programmes en langage machine accédant au tampon interne.
A Abandon d'une procédure en cours d'exécution Adresses, en mémoire Affichage Renseignements techniques AND, opérateur logique Description ARG COUNT ERR B Boucles Comment éviter les boucles sans fin Nombre maximum d'emboîtements Sortie Branchements C Caractère ? Affichage Caractères Accès aux codes ASCII Contrôle Définis par l'utilisateur Définis par l'utilisateur, exemple Impression de caractères supplémentaires Caractères de contrôle Caractères définis par l'utilisateur Description Cartes de mémoire Chaînes concaténation Description Division Longueur maximum Utilisation de guillemets CM Procédures de transcodage Codes ASCII Accès par % COM, extension de fichier Commande APPEND Description Syntaxe et récapitulatif Commande AT Syntaxe et récapitulatif Commande BACK Description Syntaxe et récapitulatif Commande BEEP Syntaxe et récapitulatif Commande BREAK Description Syntaxe et récapitulatif Commande CLOCK Exemple Syntaxe et récapitulatif Commande CLOSE Description Syntaxe et récapitulatif Commande CLS Description Syntaxe et récapitulatif Commande CONTINUE Syntaxe et récapitulatif Commande COPY Syntaxe et récapitulatif Commande COPYW Extensions de fichiers Syntaxe et récapitulatif Commande CREATE Description Syntaxe et récapitulatif Commande CURSOR Syntaxe et récapitulatif Commande DELETE Syntaxe et récapitulatif Commande DELETEW Extensions de fichiers Syntaxe et récapitulatif Commande DO/UNTIL Syntaxe et récapitulatif Commande EDIT Syntaxe et récapitulatif Commande ERASE Description Commande ERASE (OPL) Description Commande ESCAPE ON/OFF Génération pour la mise au point Risques Commande FIRST Description Syntaxe et récapitulatif Commande GLOBAL Description Syntaxe et récapitulatif Commande GOTO Description Syntaxe et récapitulatif Commande IF/ELSEIF/ELSE/ENDIF Description Syntaxe et récapitulatif Commande INPUT Description Dans un exemple de routine de saisie Syntaxe et récapitulatif Commande KSTAT Syntaxe et récapitulatif Commande LAST Description Commande LOCAL Description Syntaxe et récapitulatif Commande LPRINT Syntaxe et récapitulatif Commande NEXT Description Syntaxe et récapitulatif Commande OFF Syntaxe et récapitulatif Commande ONERR Description Syntaxe et récapitulatif Commande OPEN Description Syntaxe et récapitulatif Commande PAUSE Syntaxe et récapitulatif Commande POKEB Syntaxe et récapitulatif Commande POKEW Syntaxe et récapitulatif Commande POSITION Description Commande PRINT Description Syntaxe et récapitulatif Commande RAISE Description Syntaxe et récapitulatif Commande RANDOMIZE Syntaxe et récapitulatif Commande REM Syntaxe et récapitulatif Commande RENAME Syntaxe et récapitulatif Commande RETURN Syntaxe et récapitulatif Commande RETURN (OPL) Description Commande STOP Syntaxe et récapitulatif Commande TRAP Description Syntaxe et récapitulatif Commande UDG Description Syntaxe et récapitulatif Commande UNTIL Syntaxe et récapitulatif Commande UPDATE Syntaxe et récapitulatif Commande USE Description Syntaxe et récapitulatif Commande WHILE/ENDWH Description Syntaxe et récapitulatif Commandes DO/UNTIL Description Syntaxe et récapitulatif Concaténation de chaîne Conversion de type, automatique Conversion de type, chaîne/numérique Copie Procédures Copier Option du menu Prog D Datapaks Renseignements techniques Début, option du menu de l'éditeur OPL Déclaration de variables Description LOCAL et GLOBAL DIA, extension de fichier Dimensions de l'organiser Dir Option du menu Prog DIRW$ Division de chaînes E Échappement d'une procédure (2) Édition Procédures Effacement Procédures Effacer Option du menu Prog Enregistrements Addition dans un fichier en OPL Changement d'enregistrement en cours dans l'OPL Effacement dans l'OPL Recherche dans l'OPL Erreur " MAL PLACE Erreur , ABSENTE Erreur ANNULATION Erreur CAT PLEIN Erreur CHAINE TROP LONG Erreur DIVISEUR NUL Erreur ENGT TROP LONG Erreur ERR () Erreur ERR ARGUMENT FNC Erreur ERR ASSIGNATION Erreur ERR CAR A NUM Erreur ERR DE DIM Erreur ERR DE LECTURE Erreur ERR DE PERIPH Erreur ERR DE STRUCTURE Erreur ERR DECLARATION Erreur ERR DIM Erreur ERR ECRIT PERIPH Erreur ERR EN ECRITURE Erreur ERR INDICE Erreur ERR LECTR PERIPH Erreur ERR NBRE RUB Erreur ERR NMB ARG Erreur ERR NOM LOGIQUE Erreur ERR NUM-CAR Erreur ERR SUR ENTIER Erreur ERR SUR VAR Erreur ERR SYNTAXE Erreur ERR TYPE RECORD Erreur ERR TYPE RUB Erreur EXP ILLEGAL Erreur FIC EXISTANT Erreur FICH FERME Erreur FICH INCONNU Erreur FICH UTILISE Erreur FIN DU FICHIER Erreur LABEL INCONNU Erreur MAUV NOM PERIPH Erreur MAUVAIS ARG FNC Erreur MAUVAIS CAR Erreur MAUVAIS NOM Erreur MAUVAIS NOM PERIPH Erreur MENU TROP LONG Erreur NMB INCORRECT Erreur NMB INCORRECT Erreur NOM DUPLIQUE Erreur NOM FICH ILLEGAL Erreur NOM PROC ABSENT Erreur NOM PROC ILLEGAL Erreur NOM TROP LONG Erreur PACK ECHANGE Erreur PACK INCONNU Erreur PACK NON-VIERGE Erreur PACK PLEIN Erreur PAK PROTEGE Erreur PAS DE PACK Erreur PERIPH ABSENT Erreur PERIPH INACESS Erreur PILE FAIBLE Erreur PLUS DE MEMOIRE Erreur PROC ABSENTE Erreur PROTEGE EN ECRIT Erreur STACK OVERFLOW Erreur STACK UNDERFLOW Erreur TROP DE NIVEAUX Erreur TYPE INCORRECT Erreurs Exécution de procédures Exemples de programmes Expressions logiques dans l'OPL Extensions de fichier F Fichiers d'agenda Exemple de programme de manipulation Format des enregistrements Fichiers de données Changement du fichier en cours dans l'OPL Création dans l'OPL Exemple de programme de manipulation Fermeture dans l'OPL Manipulation dans l'OPL Ouverture dans l'OPL Fichiers, tous types Manipulation dans l'OPL Fin Option du menu d'éditeur de l'OPL Fonction ABS Syntaxe et récapitulatif Fonction ACOS Syntaxe et récapitulatif Fonction ADDR Syntaxe et récapitulatif Fonction ASC Syntaxe et récapitulatif Fonction ASIN Syntaxe et récapitulatif Fonction ATAN Syntaxe et récapitulatif Fonction CHR$ Description Syntaxe et récapitulatif Fonction COS Syntaxe et récapitulatif Fonction COUNT Syntaxe et récapitulatif Fonction DATIM$ Syntaxe et récapitulatif Fonction DAY Description Syntaxe et récapitulatif Fonction DAYNAME$ Syntaxe et récapitulatif Fonction DAYS Syntaxe et récapitulatif Fonction DEG Syntaxe et récapitulatif Fonction DIR$ Syntaxe et récapitulatif Fonction DIRW$ Syntaxe et récapitulatif Fonction DISP Syntaxe et récapitulatif Fonction DOW Syntaxe et récapitulatif Fonction ERR Description Syntaxe et récapitulatif Fonction ERR$ Syntaxe et récapitulatif Fonction EXIST Syntaxe et récapitulatif Fonction EXP Syntaxe et récapitulatif Fonction FIND Description Syntaxe et récapitulatif Fonction FINDW Exemple Syntaxe et récapitulatif Fonction FIX$ Syntaxe et récapitulatif Fonction FLT Syntaxe et récapitulatif Fonction FREE Syntaxe et récapitulatif Fonction GEN$ Syntaxe et récapitulatif Fonction GET Accès aux codes ASCII Description Syntaxe et récapitulatif Valeurs produites Fonction GET$ Syntaxe et récapitulatif Fonction HEX$ Syntaxe et récapitulatif Fonction HOUR Syntaxe et récapitulatif Fonction IABS Syntaxe et récapitulatif Fonction INT Syntaxe et récapitulatif Fonction INTF Syntaxe et récapitulatif Fonction KEY Valeurs produite Syntaxe et récapitulatif Fonction KEY$ Syntaxe et récapitulatif Fonction LEFT$ Description Syntaxe et récapitulatif Fonction LEN Syntaxe et récapitulatif Fonction LN Syntaxe et récapitulatif Fonction LOC Syntaxe et récapitulatif Fonction LOG Syntaxe et récapitulatif Fonction LOWER$ Syntaxe et récapitulatif Fonction MAX Syntaxe et récapitulatif Fonction MEAN Syntaxe et récapitulatif Fonction MID$ Description Syntaxe et récapitulatif Fonction MIN Syntaxe et récapitulatif Fonction MINUTE Syntaxe et récapitulatif Fonction MONTH Syntaxe et récapitulatif Fonction MONTH$ Syntaxe et récapitulatif Fonction NUM$ Syntaxe et récapitulatif Fonction PEEKB Syntaxe et récapitulatif Fonction PEEKW Syntaxe et récapitulatif Fonction PI Syntaxe et récapitulatif Fonction POS Syntaxe et récapitulatif Fonction POS (OPL) Description Fonction RAD Syntaxe et récapitulatif Fonction RECSIZE Syntaxe et récapitulatif Fonction REPT$ Syntaxe et récapitulatif Fonction RIGHT$ Description Syntaxe et récapitulatif Fonction RND Syntaxe et récapitulatif Fonction SCI$ Syntaxe et récapitulatif Fonction SECOND Syntaxe et récapitulatif Fonction SIN Syntaxe et récapitulatif Fonction SPACE Syntaxe et récapitulatif Fonction SQR Syntaxe et récapitulatif Fonction STD Syntaxe et récapitulatif Fonction SUM Syntaxe et récapitulatif Fonction TAN Syntaxe et récapitulatif Fonction UPPER$ Syntaxe et récapitulatif Fonction USR Syntaxe et récapitulatif Fonction USR$ Syntaxe et récapitulatif Fonction VAL Syntaxe et récapitulatif Fonction VAR Syntaxe et récapitulatif Fonction VIEW Syntaxe et récapitulatif Fonction WEEK Syntaxe et récapitulatif Fonction YEAR Syntaxe et récapitulatif G Graphiques définis par l'utilisateur Exemple de programme H Horloge Renseignements techniques Utilisation d'UDG I Impression de procédures Instruction ELSE Syntaxe et récapitulatif Interception d'erreurs en OPL L Labels Avec la commande ONERR Labels dans la commande GOTO Labels de programme Lancer Option du menu Prog Langage machine M Mémoires de calculatrice Comme variables OPL Menu principal Exécution de procédures Menu Prog Récapitulatif Messages d'erreur Modification Procédures N Noms Procédures Variables Noms de fichiers logiques Noms de procédures Longueur et format NTS, extension de fichier O ODB, extension de fichier Opérateur logique NOT Description Opérateur logique OR Description Opérateurs Dans l'OPL Priorité dans l'OPL Opérateurs arithmétiques Opérateurs logiques OPL, extension de fichier OPO, extension de fichier OPT, extension de fichier Option Nouv P PAG, extension de fichier Paramètres Description Multiples Transfert PERIPH INACESS PLN, extension de fichier Poids de l'Organiseur Renseignements techniques Point d'interrogation Affichage Points-virgules dans la syntaxe de l'OPL Procédures Abandon Changement de nom Copie Création Exécution à partir du menu principal Effacement Exemples Formats de noms Introduction Listage/impression Modification d'anciennes procédures Modification de nouvelles procédures Noms Sauvegarde Sortie (2) Transcodage Transcodage XP/CM Procédures de changement de nom Programmes Voir l'entrée Procédures Q Quitter, option du menu Prog R Recherche Option du menu d'éditeur de l'OPL Répertoire Procédures S Sauts dans les procédures -3 Sauvegarde Procédures Sauver Option du menu Prog Signe $ Dans les valeurs hexadécimales Dans les variables chaînes Dans les noms de procédures Signe % Dans les variables entières Dans les noms de procédures Accès aux valeurs ASCII Signe é, affichage T Trans, option du menu Prog Transcodage de procédures U UDG Exemples de programmes d'utilisation (2) Description V Valeurs ASCII, accès Valeurs hexadécimales Variables A virgule flottante Chaînes Conversion entre valeurs entière/à virgule flottante Description Entières GLOBALE/ LOCALE Noms Opérations Tableaux Variables à virgule flottante Arrondissement à la valeur inférieure Conversion de type Description Gamme Priorité dans l'OPL Variables chaînes Concaténation Description Longueur maximum Guillemets Division Variables du système Variables entières Description Gamme Conversion de type Variables tableaux Exemple de tableau entier Vider Option du menu d'éditeur de l'OPL Virgules, dans la syntaxe OPL X XP Transcodage de procédures Xtrans Option de l'éditeur OPL Z Zones Entrée Manipulation de zones dans l'OPL Noms de zones Qualificatifs de zones
Part No: 6100-0077
VI Aug 89
French