L'Extended BASIC
Cette page est là principalement pour expliquer ce que contient Extended BASIC.
Variables entière (INTEGER)
Ceux-ci sont entreposés sous forme de quantités signées sur deux octets allant de -32768 à +32767. Ils occupent deux fois moins d'espace que les variables normales et sont environ dix fois plus rapides pour l'arithmétique. Ils sont indiqués en utilisant un signe de pourcentage (%) après le nom de la variable. L'utilisateur n'a pas à se soucier de la conversion et peut mélanger des entiers avec d'autres types de variables dans les expressions. L'amélioration de la vitesse causée par l'utilisation d'entiers pour les variables de boucle, les index de matrice et comme paramètres de fonctions telles que AND, OR ou NOT sera substantielle. Une matrice entière de mêmes dimensions qu'une matrice à virgule flottante nécessitera deux fois moins de mémoire.
Double précision
Les variables réel à double précision sont presque l'opposé des variables entières nécessitant deux fois plus d'espace (8 octets par valeur) et prenant 2 à 3 fois plus de temps pour faire de l'arithmétique que les variables réel à simple précision. Les variables réel à double précision sont signalées par un signe dièse (#) après le nom de la variable. Ils fournissent plus de 16 chiffres de précision. Des fonctions comme SIN, ATN et EXP convertiront leurs paramètres en simple précision, de sorte que les résultats de ces fonctions ne seront bons qu'à 6 chiffres. La négation, l'addition, la soustraction, la multiplication, la division, la comparaison, l'entrée, la sortie et la conversion sont les seules routines traitant des valeurs à double précision. Encore une fois, les formules peuvent mélanger librement des valeurs de double précision avec d'autres valeurs numériques et la conversion des autres valeurs en double précision se fera automatiquement.
PRINT USING
Tout comme les clauses PICTURE de COBOL ou les instructions de format de FORTRAN, PRINT USING fournit à un utilisateur BASIC un contrôle complet sur son format de sortie. L'utilisateur peut contrôler le nombre de chiffres d'un nombre étant affichés, si le nombre est affiché en notation scientifique et le placement du texte dans la sortie. Tout cela peut être fait dans la version 8K en utilisant des fonctions de chaîne de caractères telles que STR$ et MID$, mais PRINT USING le rend beaucoup plus facile.
Entrée/sortie de disque
EXTENDED BASIC est disponible en deux versions, disque et non disque. Seuls les frais de copie sont facturés pour passer de l'un à l'autre. Avec les fonctionnalités de disque, EXTENDED BASIC permet à l'utilisateur de sauvegarder et de rappeler des programmes et des fichiers de données à partir de la disquette ALTAIR. Un accès aléatoire ainsi qu'un accès séquentiel est fournis. L'utilisation simultanée de plusieurs fichiers de données est autorisée. Les utilitaires format de nouveaux disques, supprime des fichiers et affiche des répertoires. Il s'agira de programmes BASIC utilisant des fonctions BASIC spéciales pour accéder aux informations du disque telles que la longueur du fichier,... Les programmes utilisateur peuvent également accéder à ces fonctions de disque, permettant à l'utilisateur d'écrire sa propre méthode d'accès aux fichiers ou une autre routine de disque à usage spécial. Le format de fichier peut être modifié pour permettre l'utilisation d'autres disquettes (non disquettes).
Autres caractéristiques
D'autres fonctionnalités intéressantes étant ajoutées sont :
- Messages d'erreur demonstratif
- Une clause ELSE dans les instructions IF.
- Commandes LIST, DELETE avec des intervalles de lignes comme paramètres
- Suppression de matrices dans un programme
- Commandes de trace ON/OFF (TRON/TROFF) pour surveiller le déroulement du programme
- Instruction d'échange (SWAP) pour changer les valeurs des variables (cela accélérera les tris de chaînes de caractères d'au moins un facteur de deux).
- Multi-paramètre, fonctions définies par l'utilisateur avec des paramètres de chaîne de caractères et des valeurs autorisées.
Les autres fonctionnalités envisagées pour une future version sont :
- Un BASIC multi-utilisateurs
- Manipulation de matrice explicite
- Matrices virtuelles
- Modificateurs de déclaration
- Enregistrer les entrées/sorties
- GOSUB paramétré
- Compilation
- Multiple USR 'fonctions
- "Chaînage"
L'Extended BASIC utilise environ 11 Ko de mémoire pour son propre code (10 Ko pour la version sans disque) laissant 1 Ko de libre sur une machine de 12 Ko. Il faudra près de 20 minutes pour charger à partir d'une bande papier, 7 minutes à partir d'une cassette et moins de 5 secondes pour charger à partir d'un disque.
L'ALTAIR EXTENDED BASIC comprend toutes les fonctionnalités de la version 8K de BASIC, avec quelques variantes. Il existe également un grand nombre de fonctionnalités supplémentaires faisant de cette version l'un des BASIC les plus puissants disponibles.
La section suivante contient les fonctionnalités Extended BASIC et ses variations par rapport au 8K BASIC.
Commandes
Nom | Exemple | Description | |
---|---|---|---|
DELETE | DELETE X | Supprime la ligne dans un programme avec le numéro de ligne "X". L'erreur «ILLEGAL FUNCTION CALL» se produit s'il n'y a pas de ligne «X». | |
DELETE -X | Supprime toutes les lignes d'un programme jusqu'au numéro de ligne "X" inclus. L'erreur «ILLEGAL FUNCTION CALL» se produit s'il n'y a pas de ligne «X». | ||
DELETE Y-X | Supprime toutes les lignes d'un programme à partir du numéro de ligne égal ou supérieur à "Y" et y compris la première ligne égale ou inférieure à "X". L'erreur «ILLEGAL FUNCTION CALL» se produit s'il n'y a pas de ligne «X». | ||
Si la suppression est effectuée, toutes les valeurs des variables sont perdues. De plus, la poursuite n'est pas autorisée et tous les FOR et GOSUB sont rendus inactifs. (C'est le même effet causé chaque fois qu'un programme est modifié.) | |||
LIST | LIST X | Liste la ligne "X" s'il y en a une. | |
LIST ou LIST- | Affiche l'intégralité du programme. | ||
LIST X- | Affiche toutes les lignes d'un programme avec un numéro de ligne égal ou supérieur à "X". | ||
LIST -X | Affiche toutes les lignes d'un programme avec un numéro de ligne inférieur ou égal à "X". | ||
LIST Y-X | Affiche toutes les lignes d'un programme avec des numéros de ligne égaux ou supérieurs à "Y" et inférieurs ou égaux à "X". | ||
ERASE | ERASE J% | Supprime un tableau. Si un tel tableau n'existe pas, une erreur «ILLEGAL FUNCTION CALL» se produit. ERASE doit faire référence à un tableau, et non à un élément de tableau (ERASE B(9) serait illégal). L'espace que le tableau utilise est libéré et mis à disposition pour d'autres utilisations. Le tableau peut être dimensionné à nouveau, mais les valeurs avant ERASE sont perdues. | |
ERASE X$, I# | |||
ERASE A$ | |||
ERASE D#,NMS$ | |||
SWAP | SWAP I%,J% | Échange la valeur de deux variables. (Si X=1 et Y=5, après SWAP X,Y les valeurs seraient commutées ; c'est-à-dire, maintenant X=5 et Y=1). Les deux, une ou aucune des variables peuvent être des éléments de tableau. Si une variable non-tableau à laquelle aucune valeur n'a été affectée est référencée, une erreur «ILLEGAL FUNCTION CALL» se produit. Les deux variables doivent être du même type (les deux entiers, les deux chaînes de caractères, les deux en double précision ou les deux en simple précision), sinon une erreur "TYPE MISMATCH" se produira. | |
SWAP B$(7),T$ | |||
SWAP D#(I),D#(I+1) | |||
TRON | TRON | Active le drapeau de trace. | |
TROFF | TROFF | Désactive le drapeau de trace | |
TRON et TROFF peuvent être donnés en mode direct ou indirect (programme). Lorsque le drapeau de trace est
activé, chaque fois qu'une nouvelle ligne de programme est démarrée, ce numéro de ligne 1 est affiché entre "[]". Aucun espace n'est affiché. Par exemple :
NEW désactivera également le drapeau de trace avec ses autres fonctions. |
|||
IF-THEN-ELSE | IF X>Y THEN PRINT "SUPERIEUR" ELSE PRINT "PAS SUPERIEUR" | Dans cet exemple, la condition relationnelle serait d'abord testée. Si c'est vrai, la clause THEN serait exécutée ("SUPERIEUR" serait affiché). S'il est faux, la clause ELSE serait exécutée ("PAS SUPERIEUR" serait affiché). | |
IF A>B THEN PRINT "A>B" ELSE IF B>A THEN PRINT "B>A" ELSE PRINT "A=B" | L'exemple ci-dessus indiquerait laquelle des deux variables était la plus grande, ou si elles étaient égales. Comme cet exemple l'indique, les instructions IF peuvent être imbriquées à n'importe quel niveau souhaité (régulé uniquement par la longueur de ligne maximale). Une instruction IF-THEN-ELSE peut apparaître n'importe où dans une ligne d'instructions multiples ; la clause THEN étant toujours obligatoire avec chaque clause IF et la clause ELSE facultative. Il faut veiller à ce que les IF sans clauses ELSE n'entraînent pas l'association d'un ELSE au mauvais IF. | ||
IF A=B THEN IF A=C THEN PRINT "A=C ELSE PRINT "A<>C" ELSE PRINT "A<>B" | Dans l'exemple ci-dessus, la partie double soulignée de la ligne est une instruction IF-THEN-ELSE faisant partie de la clause THEN de la première instruction IF de la ligne. Le second ELSE (simple souligné) fait partie du premier IF, et ne sera exécuté que si la première expression relationnelle est fausse (A<>B). Si une ligne ne contient pas le même nombre de clauses ELSE et THEN, la dernière clause ELSE est mise en correspondance avec la clause THEN la plus proche. | ||
(Similaire à l'instruction IF-THEN de la version 8K, uniquement avec l'ajout d'une nouvelle clause "ELSE".) |
Dactylographie
Normalement, les nombres utilisés dans les opérations BASIC sont entreposés et traités comme des nombres à virgule flottante simple précision. Cela permet une précision de 7 chiffres.
Dans la version étendue de BASIC, une plus grande précision peut être obtenue en tapant des nombres en double précision. Cela permet une précision de 16 chiffres. Dans les cas où la vitesse est critique, elle est cependant plus lente que la simple précision.
Le plus grand avantage, à la fois en termes de vitesse et d'espace d'entreposage, peut être obtenu en utilisant des opérations sur les nombres entiers chaque fois que cela est possible. Ceux-ci se situent dans la fourchette <=32767 à >=-32768.
Exemples :
Type | Exemple | Résultat |
---|---|---|
Réel de simple précision | PRINT 1/3 | .3333333 |
Réel de double précision | PRINT 1/3D | .3333333333333333 |
Entier | PRINT 1/3% | 0 |
PRINT 2.76% | 2 |
L'utilisation de ces types de nombres deviendra plus claire plus loin dans le texte.
Exemples :
I%(10) utilises (11 * 2) + 6 + (2 * 1) = 30 I(5,5) utilises (6 * 6 * 4) + 6 + (2 * 2) = 154 |
Il existe quatre types de valeurs utilisées dans la programmation Extended BASIC :
om | Symbole | Nombre d'octets/valeur |
---|---|---|
Chaîne de caractères (0 à 255 caractères) | $ | 3 |
Entiers (doit être -32768 et =< 32767) | % | 2 |
Réel de double précision (exposant : -38 à +38) 16 chiffres | # | 8 |
Réel de simple précision (exposant : -38 à +38) 7 chiffres | ! | 4 |
Le type d'une variable sera explicitement déclaré en utilisant l'un des quatre symboles listés ci-dessus. Sinon, la première lettre de la variable est utilisée pour consulter le tableau indiquant le type par défaut pour cette lettre. Initialement (après CLEAR, après RUN, après NEW ou après avoir modifié un programme), toutes les lettres sont par défaut des réels à simple précision.
Les quatre instructions suivantes peuvent être utilisées pour modifier la table DEFAULT :
Instruction | Variable par défaut pour : |
---|---|
DEFINT r | Entier |
DEFSTR r | Chaîne de caractères |
DEFDBL r | Réel de double précision |
DEFSNG r | Réel de simple précision |
r ci-dessus indique la position de l'intervalle à donner. Celui-ci doit être au format suivant : lettre ou lettre 1-lettre 2. (Dans le deuxième format, le "-" indique de la lettre 1 à la lettre 2 incluse.)
Dans les quatre instructions ci-dessus, le type par défaut de toutes les lettres de l'intervalle est modifié, en fonction du "type" DEF utilisé. Initialement, DEFSNG A-Z est supposé. Des précautions doivent être prises lors de l'utilisation de ces instructions car les variables référencées sans drapeau de type peuvent ne pas être les mêmes après l'exécution de l'instruction. Il est recommandé d'utiliser ces instructions uniquement au début d'un programme, avant l'exécution de toute autre instruction.
Ce qui suit illustrera certaines des informations ci-dessus :
L'exemple affichera :
- 2 à la ligne # 50
- 1 à la ligne # 70
- ABC à la ligne # 90
- 3 à la ligne # 110
Typage des constantes
Le type d'une constante particulière est déterminé par les éléments suivants :
- s'il y a plus de 7 chiffres ou si "D" est utilisé dans l'exposant, alors ce sera un réel de double précision.
- s'il est >32767 ou <-32768, un point décimal (.) est utilisé, ou un "E" est utilisé, alors c'est un réel de simple précision.
- sinon, c'est un entier.
Lorsqu'une opération + ou * ou une comparaison est effectuée, les opérandes sont convertis pour être tous les deux du même type que l'opérande le plus précis. Par conséquent, si un ou les deux opérandes sont en réel de double précision, l'opération est effectuée en réel de double précision (précise mais lente). Si ni l'un ni l'autre n'est en réel de double précision mais qu'un ou plusieurs opérandes sont en virgule flottante simple précision, alors l'opération sera effectuée en virgule flottante simple précision. Sinon, les deux opérandes doivent être des entiers et l'opération est effectuée en représentation entière.
Si le résultat d'un entier + ou * est trop grand pour être un entier, l'opération se fera en simple précision et le résultat sera en réel de simple précision. La division (/) est effectuée de la même manière que l'opérateur ci-dessus, sauf qu'elle n'est jamais effectuée au niveau entier. Si les deux opérandes sont des entiers, l'opération est effectuée comme une division réel de simple précision.
Les opérateurs AND, OR, NOT, \ et MOD forcent les deux opérandes à être des entiers avant que l'opération ne soit effectuée. Si l'un des opérandes est >32767 ou <-32768, une erreur de débordement se produit. Le résultat de ces opérateurs sera toujours un nombre entier. (Sauf que -32768\-1 donne un réel de simple précision.)
Quels que soient les opérandes vers +, ils seront tous deux convertis en simple précision. Les fonctions SIN, COS, ATN, TAN, SQR, LOG, EXP et RND convertissent également leurs paramètres en réel de simple précision et donnent le résultat en tant que tel, précis à 6 chiffres.
L'utilisation d'un index > 32767 et l'attribution à une variable entière d'une valeur trop grande pour être un entier donne une erreur de dépassement.
Conversion de type
Lorsqu'un nombre est converti en nombre entier, il est tronqué (arrondi à l'inférieur).
Par exemple :
- I%=.999
- PRINT I%
on obtiendra le résultat suivant :
0Un autre exemple :
- A%=-.01
- PRINT A%
on obtiendra le résultat suivant :
-1Il fonctionnera comme si la fonction INT était appliquée.
Lorsqu'un nombre réel de double précision est converti en réel de simple précision, il est arrondi. Par exemple :
- D#=77777777
- I!=D#
- PRINT I!
on obtiendra le résultat suivant :
7.77778E+07Aucune conversion automatique n'est effectuée entre les chaînes de caractères et les nombres. Voir les fonctions STR$, NUM, ASC et CHR$ à cet effet.
Nouvelles fonctions
Nom | Description |
---|---|
CINT | Convertir le paramètre en nombre entier. |
CSNG | Convertir le paramètre en un nombre de simple précision. |
CDBL | Convertir le paramètre en un nombre de double précision. |
Exemples :
Remarque : si X<=32767 et =>-32768 alors CINT(X)=INT(X) sinon, CINT donnera une erreur de débordement.
Nouveaux opérateurs
\(antislash=Shift+L), Division entière
L'opérateur de division entière force les deux paramètres à des entiers et donne la valeur entière de l'opération de division. (La seule exception à cette règle est -37268\-1, ce qui donne une valeur trop grande pour être un entier.)
Note : A\B n'est pas égal à INT(A/B) (si A=-1 et B=7, 0 n'est pas égal à -1)
La division entière est environ huit fois plus rapide que la division simple précision. Sa priorité est juste en dessous de celle de *, & et /.
Exemples :
- 1\3=0
- 7\2=3
- -3\-1=3
- 300\7=42
- -8\3=-2
- -1\3=0
MOD
L'opérateur MOD force les deux paramètres à des entiers et renvoie un résultat selon la formule suivante :
A MOD B = A - [B * (A\B)] |
Si B = 0, une erreur de division par zéro se produira. La priorité des MOD est juste en dessous de celle de la division entière et juste au-dessus de + et -.
Exemples :
Fonctions définies par l'utilisateur
Dans la version étendue de BASIC, une fonction définie par l'utilisateur peut être de n'importe quel type et peut prendre n'importe quel nombre de paramètres de n'importe quel type.
Exemples :
- DEF FNRANDOM%=10*RND(1)+1
- DEF FNTWO$(X$)=X$+X$
- DEF FNA(X,Y,Z,I%)=X+Z+I%*Y
Le résultat de la fonction sera forcé au type de fonction avant que la valeur ne soit substituée dans la formule avec l'appel de fonction.
Les boucles FOR (Entier)
La variable de boucle dans une boucle FOR peut être un nombre entier ainsi qu'un nombre simple précision. Toute tentative d'utilisation d'une chaîne de caractères ou d'une variable à double précision comme variable de boucle entraînera une erreur d'incompatibilité de type. Les boucles FOR entières sont environ trois fois plus rapides que les boucles FOR simple précision. Si l'ajout de l'incrément à la variable de boucle donne un résultat trop grand pour être un entier, une erreur de débordement se produira. La valeur de boucle initiale, la valeur d'incrément et la valeur finale doivent toutes être dans l'intervalle légale pour les nombres entiers ou une erreur de débordement se produira lorsque le FOR est exécuté.
Exemple :
on obtiendra le résultat suivant :
20000OVERFLOW IN 3
OK
Ces messages remplacent les anciens messages d'erreur répertoriés dans le manuel Altair BASIC version 4K ou 8K :
NEXT WITHOUT FOR SYNTAX ERROR RETURN WITHOUT GOSUB OUT OF DATA ILLEGAL FUNCTION CALL OVERFLOW OUT OF MEMORY UNDEFINED STATEMENT SUBSCRIPT OUT OF RANGE REDIMENSIONED ARRAY DIVISION BY ZERO ILLEGAL DIRECT TYPE MISMATCH OUT OF STRING SPACE STRING TOO LONG STRING FORMULA TOO COMPLEX CAN'T CONTINUE UNDEFINED USER FUNCTION |
Exemples :
10 GOTO 50 RUN UNDEFINED STATEMENT IN 50 OK PRINT 1/0 DIVISION BY ZERO OK |
Notes supplémentaires sur l'Extended BASIC
PEEK et POKE
Dans la version 8K de BASIC, vous ne pouvez pas PEEK ou POKE dans les emplacements de mémoire au-dessus de 32767. Dans la version étendue, cela peut être fait en utilisant un argument négatif. Si l'adresse à PEEK ou POKE est supérieure à 32767, soustrayez 65536 pour donner le paramètre approprié.
Exemples :
Pour PEEK à 65535 :
- PEEK(-1)
Pour POKE à 32768 :
- POKE -32768,I%
INT
La fonction INT fonctionnera sur des nombres à la fois en simple et en double précision étant trop grands pour être des entiers. Les nombres à double précision conservent une précision totale (voir CINT).
Exemples :
L'Extended BASIC utilise 10,2 Ko de mémoire pour résider. L'espace de chaîne de caractères est défini par défaut sur 100 dans la version étendue. Une virgule avant THEN dans une instruction IF est autorisée.
La routine de passage USR [4,5] passe en [H,L] et non [D,E], et la routine de renvoi [6,7] reçoit en [H,L] et non [A,B]. Les fichiers CSAVE en 8K BASIC ne peuvent pas être CLOAD dans l'Extended BASIC, ni l'inverse.
Mise à jour du matériel existant
Dans les cassettes BASIC (à la fois 8K et étendues), CLOAD à un nom de fichier de caractères, lit le fichier spécifié et le compare au fichier dans le noyau. Si les fichiers ne correspondent pas, le message "NO GOOD" est affiché. S'ils correspondent, BASIC revient au niveau de commande et affiche "OK".
Dans la version Extended BASIC, les boucles FOR actives (entier ou simple précision) nécessitent 17 octets.
En effet, il faut 3 octets pour entreposer le nom d'une variable.
Exemples :
I%(10) utilises (11*2)+6+(2*1)=30 octets I(5,5) utilises (6*6*4)+6+(2*2)=154 octets |
Les programmes entreposés occupent exactement la même quantité d'espace que dans la version 8K de BASIC, sauf que le mot réservé ELSE prend 2 octets au lieu de 1 octet comme avec les autres mots réservés.
Dans Extended Basic et BASIC 8K, si un nombre est compris entre >=1E-2 et <1E-1, le nombre sera affiché comme suit :
.0XXXXXX (zéros de fin supprimés) au lieu de X.XXXXXXE-2 |
Un programme BASIC 8K devrait fonctionner exactement de la même manière sous Extended BASIC. Aucune conversion ne devrait être nécessaire.
USRLOC en étendu est : | 101 octal=65 décimal, encore 111 en 8K et 4K à charger. |
Extended : | L'emplacement (non-disque) 002 dans le BOOT doit être 57 (8K=37, 4K=17) |
Chaque GOSUB actif prend 5 octets.
Chaque boucle FOR active prend 16 octets.
Commande d'édition
La commande EDIT a pour but de permettre des modifications et des ajouts aux lignes de programme existantes sans avoir à retaper la ligne entière à chaque fois.
Les commandes tapées en mode EDIT ne sont, en règle générale, pas renvoyées en écho. La plupart des commandes peuvent être précédées d'un facteur de répétition numérique facultatif pouvant être utilisé pour répéter la commande un certain nombre de fois. Ce facteur de répétition doit être compris entre 0 et 255 (0 équivaut à 1). Si le facteur de répétition est omis, il est supposé être 1. Dans les exemples suivants, un "n" minuscule devant la commande représente le facteur de répétition.
Dans la description suivante des commandes EDIT, le "curseur" fait référence à un pointeur étant positionné sur un caractère dans la ligne en cours d'édition. Pour éditer une ligne, tapez EDIT suivi du numéro de la ligne et appuyez sur le retour chariot. Le numéro de ligne de la ligne en cours d'édition sera affiché, suivi d'un espace. Le curseur sera maintenant positionné à gauche du premier caractère de la ligne.
Remarque : La meilleure façon d'obtenir la "sensation" de la commande EDIT est d'essayer d'éditer vous-même quelques lignes. Les commandes non reconnues comme faisant partie des commandes EDIT seront ignorées.
Déplacer le curseur
Un espace saisi déplacera le curseur vers la droite et entraînera l'affichage du caractère passé. Un nombre précédant l'espace (nS) fera passer le curseur et affichera le nombre (n) de caractères choisis.
Insertion de caractères
Touche | Description | |||||
---|---|---|---|---|---|---|
I | Insère de nouveaux caractères dans la ligne en cours d'édition. Une fois le I tapé, chaque caractère tapé sera inséré à la position actuelle du curseur et tapé sur le terminal. Pour arrêter l'insertion de caractères, tapez "escape" (ou Alt←mode
sur certains terminaux). Si une tentative est faite pour insérer un caractère rendant la ligne plus longue que le maximum autorisé (72 caractères), une cloche sera tapée (commande G) sur le terminal et le caractère ne sera pas inséré. Attention : Il est possible d'utiliser EDIT pour créer un ligne qui, lorsqu'il est listé avec son numéro ligne, est plus long que 72 caractères. Les bandes de papier perforées contenant de telles lignes ne seront pas lues correctement. Cependant, ces lignes peuvent être CSAVE et CLOAD sans erreur. |
|||||
← ou _ | Une flèche arrière (ou un soulignement) tapé lors d'une commande d'insertion supprimera le caractère à gauche du curseur. Les caractères jusqu'au début de la ligne
peuvent être supprimés de cette manière, et une flèche arrière sera renvoyée pour chaque caractère supprimé. Cependant, s'il n'existe aucun caractère à gauche du curseur,
une cloche 1s retentit au lieu d'une flèche arrière. Si un retour chariot est tapé pendant une commande d'insertion, ce sera comme si un échappement puis un retour chariot étaient tapés. Autrement dit, tous les caractères à droite du curseur seront affichés et la ligne éditer remplacera la ligne d'origine. |
|||||
X | X est identique à I, sauf que tous les caractères à droite du curseur sont affichés et que le curseur se déplace jusqu'à la fin de la ligne. À ce stade, il entrera
automatiquement en mode d'insertion (voir la commande I). X est très utile lorsque vous souhaitez ajouter une nouvelle instruction à la fin d'une ligne existante. Par exemple : Tapé par l'utilisateur:
Tapé par ALTAIR :
Tapé par l'utilisateur :
Dans l'exemple ci-dessus, la ligne d'origine #50 était :
La nouvelle ligne éditée #50 se lira désormais :
|
|||||
H | H est identique à I, sauf que tous les caractères à droite du curseur sont supprimés (ils ne seront pas saisis). Le mode insertion (voir commande I) sera alors automatiquement entré. H est particulièrement utile lorsque vous souhaitez remplacer les dernières instructions d'une ligne par de nouvelles. |
Caractères de suppression
Touche | Description | ||||
---|---|---|---|---|---|
D | nD supprime n nombre de caractères à droite du curseur. S'il existe moins de n caractères à droite du curseur, seul ce nombre de caractères sera
supprimé. Le curseur est positif à droite du dernier caractère supprimé. Les caractères supprimés sont entourés de barres obliques inverses (\). Par exemple : Tapé par l'utilisateur :
Tapé par l'utilisateur :
Tapé par ALTAIR :
Tapé par l'utilisateur :
La nouvelle ligne #20 ne contiendra plus les caractères entourés de barres obliques inverses. |
Recherche
Touche | Description | ||||
---|---|---|---|---|---|
S | La commande nSy recherche la nième occurrence du caractère y dans la ligne. La recherche commence au caractère un à droite du curseur. Tous
les caractères ignorés lors de la recherche sont affichés. Si le caractère n'est pas trouvé, le curseur sera à la fin de la ligne. S'il est trouvé, le curseur s'arrêtera
à ce point et tous les caractères à sa gauche auront été affichés. Par exemple : Tapé par l'utilisateur :
Tapé par l'utilisateur :
Tapé par ALTAIR :
Tapé par l'utilisateur :
|
||||
K | nKy est équivalent à S, sauf que tous les caractères passés lors de la recherche sont supprimés. Les caractères supprimés sont entourés de barres obliques
inverses. Par exemple : Tapé par l'utilisateur :
Tapé par l'utilisateur :
Tapé par ALTAIR :
Tapé par l'utilisateur :
|
Remplacement de texte
Touche | Description | ||||
---|---|---|---|---|---|
C | Un caractère dans une ligne peut être modifié à l'aide de la commande C. Cy, où y est un caractère, changera le caractère à droite du curseur en y.
Le y sera tapé sur le terminal et le curseur avancera d'une position. nCy peut être utilisé pour modifier n nombre de caractères dans une ligne au fur et
à mesure qu'ils sont saisis depuis le terminal. (Voir l'exemple ci-dessous.) Si une tentative est faite pour changer un caractère qui n'existe pas, le mode de changement sera quitté. Exemple : Tapé par l'utilisateur :
Tapé par l'utilisateur :
Tapé par ALTAIR :
Tapé par l'utilisateur :
|
Terminer et redémarrer
Touche | Description | |||||
---|---|---|---|---|---|---|
Return | Indique à l'ordinateur de terminer l'édition et d'imprimer le reste de la ligne. La ligne modifiée remplace la ligne d'origine. | |||||
E | E est identique à un retour chariot, sauf que le reste de la ligne n'est pas affiché. | |||||
Q | Quitter. Les modifications apportées à une ligne ne prennent effet qu'après la saisie d'un E ou d'un retour chariot. Q permet à l'utilisateur de restaurer la ligne d'origine sans aucune modification ayant pu être apportée, si un E ou un retour chariot n'a pas encore été tapé. "OK" sera tapé et BASIC attendra d'autres commandes. | |||||
L | Provoque l'affichage du reste de la ligne, puis affiche le numéro de ligne et redémarre l'EDIT au début de la ligne. Le curseur sera positionné à gauche du premier caractère de la ligne. | |||||
/ | L est particulièrement utile lorsque vous souhaitez voir à quoi ressemblent les modifications d'une ligne afin de pouvoir décider si d'autres modifications sont
nécessaires. Exemple : Tapé par l'utilisateur :
Tapé par ALTAIR :
Tapé par l'utilisateur :
Tapé par ALTAIR :
|
|||||
A | Provoque la restauration de la copie originale de la ligne et le redémarrage de l'édition au début de la ligne. Par exemple : Tapé par l'utilisateur :
Tapé par l'utilisateur :
Tapé par ALTAIR :
Tapé par l'utilisateur :
Tapé par ALTAIR :
Dans l'exemple ci-dessus, l'utilisateur a fait une erreur lorsqu'il a supprimé TEST LINE. Supposons qu'il veuille taper "ID" au lieu de "10D". En utilisant la commande A, la ligne d'origine 10 est réintroduite et est prête pour une édition ultérieure. |
Important
Chaque fois qu'une erreur de syntaxe (SYNTAX ERROR) est découverte pendant l'exécution d'un programme source, BASIC commencera automatiquement à EDIT la ligne ayant causé l'erreur comme si une commande EDIT avait été tapée. Par exemple :
10 APPLE RUN SYNTAX ERROR IN 10 10 |
L'édition complète d'une ligne entraîne la réinsertion de la ligne éditée. La réinsertion d'une ligne entraîne la suppression de toutes les valeurs de variable. Par conséquent, vous souhaiterez peut-être quitter la commande EDIT sans corriger la ligne afin de pouvoir examiner les valeurs de variable.
Cela peut être facilement accompli en tapant la commande Q en mode EDIT. Si cela est fait, BASIC tapera OK et toutes les valeurs des variables seront conservées.
PRINT USING
L'instruction PRINT USING peut être utilisée dans les situations où un format de sortie spécifique est souhaité. Cette situation peut se produire dans des applications telles que l'impression de chèques de paie ou d'un rapport comptable. D'autres utilisations de cette déclaration deviendront plus apparentes au fur et à mesure que vous parcourrez le texte.
Le format général de l'instruction PRINT USING est le suivant :
(line number) PRINT USING string; value list |
La "string" peut être soit une variable de chaîne de caractères, une expression de chaîne de caractères ou une constante de chaîne de caractères étant une copie exacte de la ligne à afficher. Tous les caractères de la chaîne de caractères seront affichés tels qu'ils apparaissent, à l'exception des caractères de formatage. La "liste de valeurs" est une liste des éléments à afficher. La chaîne de caractères sera analysée à plusieurs reprises jusqu'à ce que : 1) la chaîne de caractères se termine et qu'il n'y ait plus de valeurs dans la liste de valeurs 2) un champ est analysé dans la chaîne de caractères, mais la liste de valeurs est épuisée.
La chaîne de caractères doit être construite selon les règles suivantes :
Champs de chaîne de caractères
Symbole | Description |
---|---|
! | Spécifie un champ de chaîne de caractères unique. (La chaîne de caractères elle-même est spécifiée dans la liste de valeurs.) |
\n spaces\ | Spécifie un champ de chaîne de caractères composé de 2+n caractères. Des barres obliques inversées sans espace entre elles indiqueraient un champ de 2 caractères de largeur, un espace entre elles indiquerait un champ de 3 caractères de largeur,... |
Dans les deux cas ci-dessus, si la chaîne de caractères contient plus de caractères que la largeur du champ, les caractères supplémentaires seront ignorés. Si la chaîne de caractères contient moins de caractères que la largeur du champ, des espaces supplémentaires seront affichés pour remplir tout le champ.
Essayer d'afficher un nombre dans un champ de chaîne de caractères provoquera une erreur TYPE MISMATCH.
Exemple :
ce qui précède serait affiché :
AFFGHABCD
Notez que là où le "!" a été utilisé, seule la première lettre de chaque chaîne de caractères a été affichée. Là où les barres obliques inverses étaient entourées de deux espaces, quatre lettres de chaque chaîne de caractères étaient affichées (un espace supplémentaire était affiché pour B$ n'ayant que trois caractères). Les caractères supplémentaires dans le premier cas et pour A$ dans le second cas ont été ignorés.
Champs numériques
Avec l'instruction PRINT USING, les affichages numériques peuvent être modifiées pour s'adapter à presque toutes les applications jugées nécessaires. Cela doit être fait selon les règles suivantes :
Symbole | Description |
---|---|
# | Les champs numériques sont spécifiés par le signe #, chacun représentant une position de chiffre. Ces positions numériques sont toujours remplies. Le champ numérique sera justifié à droite ; c'est-à-dire que si le nombre affiché est trop petit pour remplir toutes les positions de chiffres spécifiées, les espaces de tête seront affichés autant que nécessaire pour remplir tout le champ. |
. | La position de la virgule décimale peut être spécifiée dans n'importe quel agencement particulier comme souhaité; l'arrondi est effectué si nécessaire. Si le format
de champ spécifie qu'un chiffre doit précéder la virgule décimale, ce chiffre sera toujours affiché (comme 0 si nécessaire). Le programme suivant aidera à illustrer ces
règles :
on obtiendra un résultat suivant : ? ##,1212 ? ###, 1 2 12 ? #####,12 12 ?##.##,12 12.00 ? ###.,12 12. ? #.###,.02 0.020 ? ##.#,2.36 2.4 |
+ | Ce signe peut être utilisé au début ou à la fin du champ numérique et forcera l'affichage du signe + à chaque extrémité du champ comme spécifié, si le nombre est
positif. S'il est utilisé à la fin du champ et que le nombre est négatif, un signe - sera forcé à la fin du nombre. Remarque : Il y a des cas où forcer le signe d'un nombre à être affiché sur le côté arrière libérera un espace supplémentaire pour les premiers chiffres. (Voir format exponentiel.) |
** | Le ** placé au début d'une désignation de champ numérique entraînera le remplissage par des astérisques de tous les espaces inutilisés dans la première partie du numéro affiché. Le ** spécifie également les positions pour 2 chiffres supplémentaires. (Appelé "remplissage astérisque"). |
$$ | Lorsque le $$ est utilisé au début d'une désignation de champ numérique, un signe $ sera affiché dans l'espace précédant immédiatement le nombre affiché. Notez que le $$ spécifie également des positions pour deux chiffres supplémentaires, mais le $ lui-même occupe l'un de ces espaces. Le format exponentiel ne peut pas être utilisé avant les signes $, et les nombres négatifs ne peuvent pas non plus être sortis à moins que le signe ne soit forcé à être à la fin. |
**$ | Le **$ utilisé au début d'une désignation de champ numérique entraîne l'exécution des deux opérations ci-dessus (** et $$) sur le numéro en cours d'affichage. Toutes les conditions précédentes s'appliquent, sauf que **$ autorise 3 positions numériques supplémentaires, dont l'une est le signe $. |
, | Une virgule apparaissant à gauche du point décimal dans une désignation de champ numérique entraînera l'affichage d'une virgule tous les trois chiffres à gauche du point décimal dans le nombre en cours d'affichage. La virgule spécifie également une autre position de chiffre. Une virgule à droite du point décimal dans une désignation de champ numérique est considérée comme faisant partie de la chaîne de caractères elle-même et sera traitée comme un caractère d'affichage. |
↑↑↑↑ | Format exponentiel. Si le format exponentiel d'un nombre est souhaité dans l'affichage, la désignation du champ numérique doit être suivie de ↑↑↑↑ (laisse de l'espace pour E±XX). Comme pour les autres formats, toute disposition décimale est autorisée. Dans ce cas, les chiffres significatifs sont justifiés à gauche et l'exposant est ajusté. |
% | Si le nombre à afficher est supérieur au champ numérique spécifié, un caractère % sera affiché, puis le nombre lui-même dans son format standard. (L'utilisateur verra le nombre entier.) Si l'arrondi d'un nombre le fait dépasser le champ spécifié, le caractère % sera affiché suivi du nombre arrondi. (Comme le champ= .##, et le nombre est .999 affichera % 1.00.) |
Si le nombre de chiffres spécifié dépasse 24, une erreur FUNCTION CALL se produira.
Essayez de parcourir les exemples suivants pour illustrer les règles précédentes. Un seul programme comme celui-ci est la méthode la plus simple pour apprendre PRINT USING.
Exemples : Tapez le programme court dans votre machine tel qu'il est indiqué ci-dessous. Ce programme continuera à tourner en boucle et vous permettra d'expérimenter avec PRINT USING au fur et à mesure.
Programme :
L'ordinateur commencera par taper un ?. Remplissez l'indicateur de champ numérique et la liste de valeurs comme vous le souhaitez, ou suivez les instructions ci-dessous.
?+#,9 +9 ? +#,10 %+10 ? ##,-2 -2 ? +#,-2 -2 ? #,-2 %-2 ?+.###,.02 +.020 ? ####.#,100 100.0 ?##+,2 2+ ? CECI EST UN NOMBRE ##,2 CECI EST UN NOMBRE 2 ? AVANT ## APRES,12 AVANT 13 APRES ? ####,44444 %44444 ? **##,1 ? **##,12 **12 ? **##,123 *123 ? **##,1234 1234 ? **##,12345 %13345 ? **,1 *1 ? **,22 22 ? **.##,12 12.00 ? **####,1 *****1 ? $####.##,12.34 $ 12.34 ? $$####.##,12.56 $12.56 ? $$.##,1.23 #1.23 ? $$.##,12.34 %$12.34 ? $$###,0.23 $0 ? $$####.##,0 $0.00 ? **$###.##,1.23 ****$1.23 ? **$.##,1.23 *$1.23 ? **$###,1 ****$! ? #,6.9 7 ? #.#,6.99 7.0 ?##-,2 2 ? ##-,-2 2- ?##+,2 2+ ? ##+,-2 2- ? ##↑↑↑↑,2 2E+00 ? ##↑↑↑↑,12 1E+01 ? #####.###↑↑↑↑,2.45678 2456.780E-03 ? #.###↑↑↑↑,123 0.1E3E+03 ? #.##↑↑↑↑,-123 -.12E+03 ? #####,###.#,1234567.89 1,234,567.9 |