PC-BASIC, Guide de langage
Cette documentation décrit le langage PC-BASIC, qui vise à émuler fidèlement GW- BASIC 3.23, IBM Advanced BASIC, IBM Cartridge BASIC et Tandy 1000 GW-BASIC.
Le Guide de langage BASIC couvre la langage sujet par sujet, regroupant thématiquement les éléments de langage utilisés dans un but connexe. Veuillez vous référer au Guide de langage BASIC pour une description formelle des éléments du langage et de leur syntaxe.
Travailler avec les programmes
Vous pouvez écrire votre programme avec un éditeur de texte comme Bloc-Notes de Windows et ensuite utiliser la commande LOAD" de PC-BASIC. Exemple LOAD"Blackjac pour charger le programme BLACKJAC.BAS.
Commande | Description |
AUTO | Entrer en mode de numérotation automatique des lignes |
CHAIN | Chargez un nouveau programme et exécutez-le en préservant les variables communes |
COMMON | Défini les variables communes |
DELETE | Supprimer des lignes du programme |
EDIT | Imprimer une ligne de programme à l'écran pour l'édition |
LIST | Imprimer des lignes de programme à l'écran |
LLIST | Impression des lignes de programme sur l'imprimante |
LOAD | Lire un nouveau programme à partir du fichier |
MERGE | Superposition d'un fichier de programme sur le programme en cours |
NEW | Efface le programme en cours de la mémoire |
RENUM | Renumérote les numéros de ligne du programme |
RUN | Démarrer le programme en cours |
SAVE | Stocker le programme actuel dans un fichier |
TRON | Activer le suivi des numéros de ligne |
TROFF | Désactiver le suivi des numéros de ligne |
SYSTEM | Quitte l'interpréteur BASIC |
Pour modifier un programme, j'utilise le Bloc-Notes de Windows et ensuite j'utiliser la commande LOAD" (F3) de PC-BASIC. Par la suite, J'exécute le programme avec la commande RUN (F2).
Flux de contrôle
Un programme est normalement exécuté en commençant par son numéro de ligne le plus bas (ou le numéro de ligne appelé par RUN).
Les instructions sur une ligne sont exécutées de gauche à droite.
Lorsque toutes les instructions sur une ligne sont terminées, l'exécution passe au numéro de ligne le plus bas suivant, et ainsi de suite jusqu'à ce qu'il n'y ait plus de ligne.
Les instructions de flux de contrôle peuvent être utilisées pour modifier ce flux normal d'exécution. Les instructions END et STOP servent dans un programme à arrêter son exécution. Lorsque STOP est utilisé, un message Break est imprimé.
En mode direct, CONT peut être exécuté pour reprendre le programme là où il a été arrêté. Alors que END semble destiné à terminer le programme, cela n'empêche pas l'utilisateur de le reprendre avec CONT.
Des sauts inconditionnels peuvent être effectués avec GOTO. Le déroulement du programme se poursuivra à la ligne numéro indiqué dans l'instruction GOTO. En raison du manque de constructions sophistiquées de bouclage du langage PC-BASIC, de branchement et de rupture, les sauts inconditionnels sont essentiels et utilisé fréquemment.
L'instruction GOSUB saute à un sous-programme. Semblable à GOTO, il s'agit d'un saut inconditionnel ; cependant, l'emplacement de l'appel est stocké et le programme et continuera son flux à partir de là, le sous-programme se termine par une instruction RETURN.
Les sous-programmes sont un peu comme des procédures en ce sens qu'elles permettent de séparer des morceaux de code qui exécutent une tâche donnée du corps principal du programme, mais ils n'ont pas de portée distincte puisque toutes les variables de PC-BASIC sont globales. Ils n'ont pas de valeur de retour.
Il est même possible de sauter d'un sous-programme n'importe où dans le programme en fournissant l'instruction RETURN avec une ligne de Numéro.
L'instruction ON fournit une construction de branchement alternative. Une valeur entière est utilisée pour sélectionne l'une d'une liste de numéros de ligne, et l'exécution se poursuit à partir de là. Elle peut être utilisée avec un saut GOTO ainsi qu'avec un appel de sous-programme GOSUB.
ON, GOTO et GOSUB peuvent également être utilisés en mode direct pour démarrer un programme ou un sous-programme sans réinitialiser les variables.
La construction IF–THEN–ELSE teste une condition et exécute différentes branches de code en fonction de sa valeur de vérité. Ce n'est pas une construction de bloc ; tout le code dans THEN et ELSE les branches doivent tenir sur une seule ligne. Pour cette raison, la ramification est souvent utilisée en combinaison avec GOTO.
Par exemple:
10 INPUT "How old are you"; AGE%
20 IF AGE%>30 THEN
100
30 IF AGE%<30 THEN 200 ELSE PRINT "You are 30 years old."
40 END
100 PRINT "You are over 30."
110 END
200 PRINT "You are not yet 30."
210 END
La construction en boucle WHILE–WEND répète le bloc de code entre WHILE et WEND comme tant qu'une condition donnée reste vraie.
La construction FOR–NEXT répète un bloc de code pendant qu'un compteur reste dans une plage donnée. Le compteur est défini sur une valeur de départ à la première passe de l'instruction FOR et incrémenté par la valeur STEP à chaque passage de NEXT.
Par exemple:
10 FOR I=1 TO 10
20 PRINT STRING$(I, "*"); USING "
[##]"; I
30 NEXT I
Les constructions en boucle peuvent être imbriquées. Le flux de contrôle est également affecté par l'interception d'évènements et d'erreurs.
Commande | Description |
CONT | Continue le programme interrompu |
ELSE | Ignore le reste de la ligne (ELSE autonome) |
END | Arrête l'exécution du programme |
FOR | Démarre une boucle FOR |
GOSUB | Appelle un sous-programme |
GOTO | Passe à un autre emplacement dans le programme |
IF | Branche de programme sous condition |
NEXT | Itération d'une boucle FOR |
ON | Saut calculé ou appel de sous-programme |
RETURN | Retour du sous-programme GOSUB |
STOP | Interrompre l'exécution du programme |
WEND | Itération d'une boucle WHILE |
WHILE | Entre dans une boucle WHILE |
Tableaux et variables
Commande | Description |
DEFDBL | Spécifier la plage de noms pour les variables flottantes à double précision |
DEFINT | Spécifiez la plage de noms pour les variables à nombres entiers |
DEFSNG | Spécifier la plage de noms pour les variables flottantes simple précision |
DEFSTR | Spécifier la plage de noms de variables pour les chaînes |
DIM | Allouer un tableau |
ERASE | Libérer un tableau |
LET | Affecter une valeur à une variable |
OPTION BASE | Définir l'index de départ des tableaux |
SWAP | Échange de deux variables |
Conversion de types
Fonction | Description |
ASC | Caractère à valeur ordinale |
CHR$ | Valeur ordinale au caractère |
HEX$ | Représentation d'un entier à une chaîne hexadécimale |
OCT$ | Représentation d'un entier à une chaîne octale |
STR$ | Valeur numérique en représentation sous forme de chaîne décimale |
VAL | Représentation sous forme de chaîne en valeur numérique |
CDBL | Valeur numérique en flottant double précision |
CINT | Valeur numérique en nombre entier |
CSNG | Valeur numérique en flottant simple précision |
CVD | Représentation d'octet en flottant double précision |
CVI | Représentation d'octet en nombre entier |
CVS | Représentation d'octet en flottant simple précision |
MKD$ | Représentation flottante à double précision en octets |
MKI$ | Représentation d'entier à octet |
MKS$ | Représentation flottante en octet simple précision |
Commande | Description |
LSET | Copie une valeur justifiée à gauche dans un tampon de chaîne |
MID$ | Copie une valeur dans une partie d'un tampon de chaîne |
RSET | Copie une valeur justifiée à droite dans un tampon de chaîne |
Fonction | |
INSTR | Trouver |
LEFT$ | Sous-chaîne gauche |
LEN | Longueur de chaine |
MID$ | Sous-chaîne |
RIGHT$ | Sous-chaîne droite |
SPACE$ | Espaces de répétition |
STRING$ | Répéter les caractères |
Commande | Description |
CLS | Efface l'écran |
COLOR | Défini les valeurs de couleur et de palette |
LOCATE | Défini la position et la forme du curseur de l'écran de texte |
PALETTE | Attribue une couleur à un attribut |
PALETTE USING | Affecte un tableau de couleurs aux attributs |
PCOPY | Copie une page écran |
Imprime des expressions à l'écran | |
VIEW PRINT | Défini la zone de défilement du texte |
WIDTH | Défini le nombre de colonnes de texte à l'écran |
Fonction | |
CSRLIN | Ligne actuelle du curseur |
POS | Colonne actuelle du curseur |
SCREEN | Caractère ou attribut à un emplacement donné |
Imprimer
Commande | Description |
LPRINT | Imprime des expressions sur l'imprimante |
Fonction | |
LPOS | Position de la colonne de la tête d'impression |
Commande | Description |
INPUT | Récupérer l'entrée utilisateur sur la console |
LINE INPUT | Récupérer une ligne d'entrée utilisateur sur la console |
Fonction | |
INKEY$ | Lecture non bloquante depuis le clavier |
INPUT$ | Blocage de la lecture depuis le clavier |
Macros de touches de fonction
Commande | Description |
Key | Gérer la visibilité de la liste des macros de touches de fonction |
Key | Définir une macro de touche de fonction |
Fonction | |
ABS | Valeur absolue |
ATN | Arc tangente |
COS | Cosinus |
EXP | Exponentiel |
FIX | Troncature |
INT | Sol |
LOG | Un algorithme naturel |
SIN | Sinus |
SGN | Signe |
SQR | Racine carrée |
TAN | Tangente |
Nombres aléatoires
Commande | Description |
RANDOMIZE | Amorcer le générateur de nombres aléatoires |
Fonction | |
RND | Nombre pseudo-aléatoire |
Périphériques et fichiers
Commande | Description |
CLOSE | Fermer un fichier |
FIELD | Attribuer une chaîne à un tampon d'enregistrement à accès aléatoire |
GET | Lire un enregistrement à partir d'un fichier à accès aléatoire |
INPUT | Lire une variable d'un fichier |
LINE INPUT | Lire une ligne d'un fichier |
LOCK | Verrouille un fichier ou une plage d'enregistrements contre toute autre utilisation |
OPEN | Ouvrir un fichier de données |
PUT | Écrire le tampon d'enregistrement à accès aléatoire sur le disque |
RESET | Fermer tous les fichiers |
UNLOCK | Déverrouille un fichier ou une plage d'enregistrements contre une autre utilisation |
WIDTH | Définir le nombre de colonnes de texte dans un fichier |
WRITE | Écrire des expressions dans un fichier |
Fonction | |
EOF | Fin de fichier |
LOC | Emplacement dans le dossier |
LOF | Longueur du fichier |
INPUT$ | Lire une chaîne à partir d'un fichier |
Graphique
Commande | Description |
CIRCLE | Dessiner une section d'ellipse ou d'arc |
DRAW | Dessiner une forme définie par une chaîne Graphiques de Macro Langage |
GET | Stocker une zone d'écran en tant que sprite |
LINE | Dessiner un segment de ligne |
PAINT | Remplir une région connectée |
PSET | Mettre un pixel |
PRESET | Changer un pixel en attribut d'arrière-plan |
PUT | Dessiner un sprite à l'écran |
SCREEN | Changer le mode vidéo |
VIEW | Défini la fenêtre graphique |
WINDOW | Défini des coordonnées logiques |
Fonction | |
POINT | Coordonnées du pointeur graphique |
POINT | Attribut de pixel |
PMAP | Convertir entre les coordonnées physiques et logiques |
Commande | Description |
BEEP | Bip le haut-parleur |
BEEP | Commutateur de haut-parleur |
NOISE | Générer du bruit |
PLAY | Jouer un morceau encodé en Music Macro Langage |
SOUND | Générer une tonalité |
SOUND | Commutateur de son |
Fonction | |
PLAY | Longueur de la file d'attente de la musique de fond |
Disque et DOS
Commande | Description |
CHDIR | Changer le répertoire courant |
FILES | Lister les fichiers du répertoire courant |
KILL | Supprimer un fichier sur un périphérique de disque |
MKDIR | Créer un nouveau répertoire |
NAME | Renommer un fichier sur disque |
RMDIR | Supprimer un répertoire |
ENVIRON | Définir une chaîne d'environnement shell |
Fonction | |
ENVIRON$ | Chaîne de la table d'environnement shell |
Fonctions définies par l'utilisateur
Commande | Description |
DEF FN | Définir une nouvelle fonction |
Fonction | |
FN | Fonction définie par l'utilisateur |
Date et Heure
Commande | Description |
DATE$ | Définir la date du système |
TIME$ | Régler l'heure du système |
Fonction | |
DATE$ | Date système sous forme de chaîne |
TIME$ | Heure système sous forme de chaîne |
TIMER | Heure système en secondes depuis minuit |
Inclure des données dans un programme
Commande | Description |
DATA | Définir les données à utiliser par le programme |
READ | Récupérer une entrée de données |
RESTORE | Réinitialiser le pointeur de données |
Référence du langage
Méta syntaxe
Dans les descriptions de la syntaxe BASIC, les conventions suivantes
s'appliquent. Rendu exact de la balise peut varier selon le moyen utilisé pour
afficher cette documentation.
Caractère gras
Tapez exactement
comme indiqué.
italique
Remplacez par la méta variable
appropriée.
[a
Les entités entre crochets sont facultatives.
{ a | b }
Alternatives disjointes dont une doit être choisie.
[ a
| b ]
Alternatives facultatives disjointes.
a...
L'entité
précédente peut être répétée.
Définitions
Une ligne de programme se compose d'un numéro de ligne suivi d'une instruction composée.
Les Lignes de programme se terminent par un CR ou ou par la fin du fichier (éventuellement par un caractère EOF).
Tout ce qui se trouve sur une ligne de programme après un caractère NUL est ignoré.
Un numéro de ligne est un nombre entier dans la plage [0—65535]. Notez que les numéros de ligne 65530—65535 ne peut pas être entré à partir de la console ou d'un fichier de programme texte, mais peut faire partie d'un fichier programme tokenisé.
Une instruction composée se compose d'instructions séparées par des deux-points :
instruction [: instruction ]...
Une expression prend l'une des formes suivantes :
opérateur_unaire {littéral | variables | élément_tableau | fonction}
expression expression de l'opérateur_binaire
(expression)
dont les éléments sont décrits dans les sections Littéraux, Variables,
Opérateurs et Fonctions.
Un élément de tableau prend la forme
tableau {[|(} expression_numérique [, expression_numérique ]... {)|]}
Littéraux
Littéraux de chaîne
Les littéraux de chaîne sont de la forme suivante :
"[caractères]{NUL|CR|EOF|"}
où caractères est une chaîne de caractères.
Tout caractère de la page de code actuelle peut être utilisé, avec les exceptions suivantes, qui terminent toutes la chaîne littérale (à part d'autres effets qu'ils peuvent avoir):
NUL ( CHR$(&h00) )
CR ( CHR$(&h0D) )
EOF ( CHR$(&h1A) )
" (
CHR$(&h22) )
Les chaînes sont également légalement terminées à la fin du fichier en l'absence d'un caractère EOF.
En dehors de ceux-ci, les littéraux de chaîne ne doivent contenir aucun des caractères de la plage ASCII &h0D — &h1F , qui conduisent à des résultats imprévisibles.
Il n'y a pas de mécanisme d'échappement. Pour inclure l'un des caractères ci-dessus dans une chaîne, utiliser la concaténation de chaînes et le CHR$ fonction.
Littéraux numériques
Les littéraux numériques ont l'une des formes suivantes :
[+|-] [0|1|2|3|4|5|6|7|8|9]... [.][0|1|2|3|4|5|6|7|8|9]...
[{E|e|D|d}[+|-][0|1|2|3|4|5|6|7|8|9]...]
|#|!|%]
&{H|h}[0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|a|b|c|d|e|f]...
&[O|o]
[0|1|2|3|4|5|6|7]...
Les littéraux hexadécimaux ne doivent pas contenir d'espaces, contrairement aux littéraux décimaux et octaux.
Le o caractère dans les littéraux octaux est facultatif : ils peuvent être spécifiés de la même manière que &o777 ou &777.
Les littéraux hexadécimaux et octaux désignent des entiers et n'incluent pas de signe.
Ils doivent s'étendre entre [ &h0 — &hFFFF ], dont la plage [ &h8000 — &hFFFF ] est interprétée comme un deux complément entier négatif ; par exemple, &hFFFF = -1.
Des signes peuvent apparaître à gauche du & mais ceux-ci forment une expression et ne font pas partie du littéral lui-même.
Les littéraux à virgule flottante doivent être spécifiés en notation décimale. Le séparateur décimal est le point.
Un exposant en base 10 peut être spécifié après E dans les flottants simple précision, ou après D dans flotteurs à double précision.
Le % de fin est ignoré et n'indique pas un entier littéral.
Le ! ou # marquent le littéral comme simple ou double précision, respectivement. Des exemples de littéraux numériques valides sont:
-1 42 42! 42# 1.3523523.235435 -.3 3...e.D 1.1e+7 1.1d+7 1e2 1e-2 &7 &hffff &O20 &h & 65537% 1.1%
Notez que les expressions telles que &o-77 sont légales ; ce ne sont cependant pas des octaux négatifs mais plutôt l'expression &o (octal vide; zéro) moins 77 (décimal 77).
Variables
Les noms de variables doivent commencer par une lettre ; tous les caractères du nom de la variable (sauf le sigil) doit être des lettres A—Z , des chiffres 0—9 , ou un point.
Seuls les 40 premiers caractères du nom sont importants. Un nom de variable ne doit pas être identique à un mot réservé ou un mot réservé plus sceau. Ainsi, par exemple, vous ne pouvez pas nommer une variable TO ! mais vous pouvez la nommer AS !.
Les noms de variables peuvent contenir n'importe quel mot réservé. Les noms de variables peuvent également commencer par un mot réservé, à l'exception de USR et FN.
Ainsi, FNORD% et USRNME$ ne sont pas noms de variable légaux alors que FRECKLE% et LUSR$ le sont.
Pour chaque nom, quatre variables différentes peuvent exister correspondant aux quatre types. C'est-à-dire, vous pouvez avoir A$, A%, A ! et A# comme différentes variables. Lequel d'entre eux est aussi connu sous le nom de A dépend des paramètres dans DEFINT / DEFDBL / DEFSNG / DEFSTR.
Par défaut, A est égal à la simple précision A!. De plus, les tableaux A$() , A%() , A!() , A#() sont séparés des variables scalaires du même nom.
Types et Sigil
PC-BASIC reconnaît quatre types de variables, distingués par leur sigil ou caractère de type, le dernier caractère du nom complet de la variable :
sigil | type | Taille | Intervalle | Précision |
$ | Chaîne de caractères |
3 octets plus caractères espace |
0—255 caractères | |
% | Entier | 2 octets | -32768—32767 | exacte |
! | Flottant simple précision | 4 octets | ±2.938726·10-39 à ±1.701412·1038 |
~6 chiffres significatifs |
# | Flotteur double précision | 8 octets | ±2.938735877055719·10-39 à ±1.701411834604692·1038 |
~16 chiffres significatifs |
Notez que les flottants à double précision peuvent contenir plus de décimales que les flottants à simple précision, mais pas de nombres plus grands ou plus petits.
Bien que tous les entiers soient signés, certaines instructions interprèteront les entiers négatifs comme leurs deux compléments.
Tableaux
Les tableaux sont indexés avec des crochets ou des crochets ; même le mélange des parenthèses est autorisé.
Voici tous les éléments de tableau autorisés : A[0] , A(0) , A(0] , A[0).
Les tableaux multidimensionnels sont spécifiés en séparant les indices par des virgules : A(0, 0) , A[0, 0, 0] , etc.
Par défaut, les tableaux sont indexés à partir de 0. Cela peut être changé à 1 en utilisant OPTION BASE 1.
Les tableaux peuvent être alloués en spécifiant le plus grand index autorisé à l'aide de DIM. Si tous les indices du tableau sont 10 ou moins, ils n'ont pas besoin d'être explicitement alloués.
Le premier accès du tableau (lecture ou écriture) l'allouera automatiquement avec un index maximum de 10 et le même nombre d'indices comme lors du premier accès.
Pour réallouer un tableau, l'ancien tableau doit d'abord être supprimé avec CLEAR ou ERASE.
Les tableaux multidimensionnels sont stockés dans l'ordre des colonnes majeures, de sorte que A % (2,0) immédiatement suit A%(1,0).
Conversions
PC-BASIC effectuera implicitement la conversion entre les trois types de données numériques. Lorsqu'une valeur de un type est affectée à une variable, un élément de tableau ou un paramètre d'un autre type, il est converti selon les règles suivantes :
• Les flottants simple et double précision sont convertis en nombre entier en arrondissant au nombre entier le plus proche. Les moitiés sont arrondies à partir de zéro. Si l'ensemble résultant est nombre en dehors de la plage autorisée pour les entiers, le dépassement de capacité est déclenché.
• Les flottants à double précision sont convertis en flottants à simple précision par arrondissement Gaussien de la mantisse, où le nouveau bit le moins significatif de la mantisse est arrondi si la fraction binaire tronquée est supérieure à la moitié ; les moitiés sont arrondi à pair.
• Les nombres entiers sont convertis dans leur représentation exacte en simple ou double précision flotte.
• Les flottants à simple précision sont convertis en leur représentation exacte en flottants double précision.
• Il n'y a pas de conversion implicite entre les chaînes et les types numériques.
Une tentative d'assignation d'une valeur de chaîne à une variable numérique, un élément de tableau ou un paramètre (ou vice versa) augmentera Type mismatch.
Les opérateurs
Ordre de préséance
L'ordre de priorité des opérateurs est le suivant, de étroitement lié (priorité élevée) à lâche (faible priorité) :
1. ^
2. * /
3. \
4. MOD
5. + - (unaire et binaire)
6. = <>
>< < > <= =< >= =>
7. NOT (unaire)
8. AND
9. OR
10. XOR
11. EQV
12. IMP
Les expressions entre parenthèses () sont évaluées en premier. Tous les opérateurs binaires sont associatif à gauche : les opérateurs de même priorité sont évalués de gauche à droite.
Exemples
• L'exponentiation est plus étroitement liée que la négation : -1^2 = -(1^2) = -1 mais (-1)^2 = 1.
• L'exponentiation est associative à gauche : 2^3^4 = (2^3)^4 = 4096. les erreurs
• Si un opérateur autre que + , - ou NOT est utilisé sans opérande gauche, Syntaxe erreur est levée.
• À la fin d'une instruction, si un opérateur est utilisé sans opérande droit, l'opérande est élevé Missing. Si cela se produit ailleurs dans une instruction, comme dans des crochets, une erreur de syntaxe est générée.
Opérateurs mathématiques
Les opérateurs mathématiques fonctionnent uniquement sur des expressions numériques. Notez cependant que + peut prendre le rôle de l'opérateur de concaténation de chaînes si les deux opérandes sont des chaînes.
Code | Opération | Résultat |
x ^ y | Exponentiation | x élevé à la puissance y |
x * y | Multiplication | Produit de x et y |
x / y | Division | Quotient de x et y |
x \ y | Division tronquée à l'entier | Quotient entier de x et y |
x MOD y | Modulo | Reste entier de x par y (avec le signe de x) |
x + y | Addition | Somme de x et y |
x - y | Soustraction | Différence de x et y |
+ y | Unaire Plus | Valeur de y |
- y | Négation | Valeur négative de y |
• Si nécessaire, le résultat de l'opération sera mis à niveau vers un type de données capable de retenir le résultat. Par exemple, diviser des nombres entiers 3 par 2 donnera une simple précision 1.5.
• Cependant, l'opérateur d'exponentiation ^ donnera au plus un résultat simple précision sauf si l'option double est utilisée.
• L'expression 0^0 renverra 1 et ne génèrera pas d'erreur, même si, mathématiquement, élever zéro à la puissance zéro n'est pas défini.
Les erreurs
• Si l'un ou l'autre des opérandes est une chaîne, l'incompatibilité de type sera déclenchée. L'exception est + qui ne soulèvera une incompatibilité de type que si l'un ou l'autre des opérandes, mais pas les deux, sont des chaînes.
• Si y=0 , x / y , x MOD y et x \ y augmenteront la division par zéro.
• Si x=0 et y<0 , x^y augmentera Division de zéro.
• Si le résultat d'une opération est trop volumineux pour tenir dans un type de données à virgule flottante, Le Overflow est relevé.
• Si les opérandes ou le résultat de \ ou MOD ne sont pas dans [-32768–32767] , Overflow est soulevé.
• Si x<0 et y est un nombre fractionnaire, x ^ y déclenchera Illegal function call.
Opérateurs relationnels
Les opérateurs relationnels peuvent fonctionner sur des opérandes numériques ainsi que sur des opérandes de chaîne ; cependant, si l'un l'opérande est une chaîne et l'autre numérique, l'incompatibilité de type est levée.
Les opérateurs relationnels renvoient soit 0 (pour faux) soit -1 pour vrai.
Code | Opération | Résultat |
= | Égal | Vrai si a est égal à b, faux sinon |
<> >< | Inégal | Faux si a est égal à b, vrai sinon |
< | Moins que | Vrai si a est inférieur à b, faux sinon |
> | Plus grand que | Vrai si a est supérieur à b, faux sinon |
<= =< | Inférieur ou égal | Vrai si a est inférieur ou égal à b, faux sinon |
>= => | Plus grand ou égal | Vrai si a est supérieur ou égalà b, faux sinon |
Lorsque vous travaillez sur des opérandes numériques, les deux opérandes sont comparés en nombres flottants selon l'ordre habituel des nombres.
L'opérateur égal teste l'égalité à la précision près de la machine pour la plus grande précision des deux types d'opérateurs.
Lors de la comparaison de chaînes, l'ordre est le suivant.
• Deux chaînes sont égales uniquement si elles ont la même longueur et chaque code de caractère de la première chaîne correspond au code de caractère correspondant de la seconde. Ceci inclut tout espace ou caractère non imprimable.
• Chaque position de caractère des chaînes est comparée en commençant par le plus à gauche. Lorsqu'une paire de caractères différents est rencontrée, la chaîne avec le caractère de point de code inférieur est inférieur à la chaîne avec le caractère de plus grand point de code.
• Si les chaînes sont de longueur différente, mais égales jusqu'à la longueur de la chaînes la plus courte, alors la chaîne la plus courte est inférieure à la chaîne la plus longue.
Opérateurs de chaîne
L'opérateur de concaténation de chaînes est +. Il a une forme binaire ainsi qu'une forme unaire. L'unaire moins peut également être utilisé sur des chaînes, mais n'a aucun effet.
Code | Opération | Résultat |
x + y | Enchainement | La chaîne formée par x suivi de y |
+ y | Unaire Plus | Valeur de y |
- y | Moins unaire | Valeur de y |
Les erreurs
• Si l'un des opérandes (mais pas les deux) d'une concaténation est numérique, Type mismatch sera relevé.
• Si LEN(x) + LEN(y) > 255 , x + y augmentera La chaîne trop longtemps.
Les fonctions
Les fonctions ne peuvent être utilisées que dans le cadre d'une expression au sein d'une instruction ; ils peuvent prendre l'entrée des valeurs entre parenthèses et produire une valeur de retour.
Par exemple, dans PRINT ABS(-1) la fonction ABS est utilisée dans une expression au sein d'une instruction PRINT ; dans Y = CARRÉ(X) + 2 la fonction SQR est utilisée dans une expression au sein d'une instruction LET.
Certains ouvrages de référence utilisent également des termes tels que variable système pour les fonctions qui ne prennent pas une entrée, probablement puisque dans la syntaxe GW-BASIC, ces fonctions n'ont pas de parenthèses, contrairement aux langages de la famille C (et même à certains BASIC modernes).
Cependant, cela est simplement la syntaxe GW-BASIC pour les fonctions sans entrées.
Par exemple, on peut faire DEF FNA=1 : PRINT FNA dans lequel aucune parenthèse n'est autorisée.
ABS | y = ABS(x) | x est une expression. |
Renvoie la valeur absolue de x si x est un nombre et la valeur de x si x est une chaîne. | ||
ASC | val = ASC(char) | char est une expression avec une valeur de chaîne. |
Renvoie le point de code (valeur
ASCII) pour le premier caractère de char. Les erreurs • char a une valeur numérique : Type mismatch. • char est égal à "" : Illegal function call. |
||
ATN | y = ATN(x) | x est une expression numérique qui donne l'angle en radians. |
Remarques • À moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction renvoie un valeur de précision. • ATN(x) diffère par le chiffre le moins significatif de GW-BASIC. Les erreurs • x a une valeur de chaîne : Type mismatch. |
||
CDBL | y = CDBL(x) | Convertit l'expression numérique x en valeur double précision. |
Les erreurs • x a une valeur de chaîne : Type mismatch. |
||
CHR$ | char = CHR$(x) | x est une expression numérique dans la plage [0—255] |
Renvoie le caractère avec le point
de code x Les erreurs • x a une valeur de chaîne : Type mismatch. • x n'est pas dans [-32768—32767] : Overflow. • x n'est pas dans [0—255] : Illegal function call. |
||
CINT | y = CINT(x) | Convertit l'expression numérique x en entier signé. Les moitiés sont arrondies à partir de zéro, de sorte que par ex. CINT(2.5) = 3 et CINT(-2.5) = -3. |
Les erreurs • x a une valeur de chaîne : Type mismatch. • x n'est pas dans [-32768—32767] : Overflow. |
||
COS | cosine = COS(angle) | angle est une expression numérique qui donne l'angle en radians. |
Renvoie le cosinus de l'angle. A
moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction
renvoie une valeur simple précision. Remarques • La valeur de retour diffère généralement de la valeur renvoyée par GW-BASIC au dernier chiffre significatif. Les erreurs • angle a une valeur de chaîne : Type mismatch. |
||
CSNG | y = CSNG(x) | Convertit l'expression numérique x en une valeur simple précision par arrondi gaussien. |
Les erreurs • x a une valeur de chaîne : Type mismatch. |
||
CSRLIN | y = CSRLIN | Cette fonction ne prend aucun argument. |
Renvoie la ligne d'écran du curseur sur la page active. La valeur de retour est dans la plage [1—25]. | ||
CVI | y = CVI(s) | Convertit une chaîne de deux octets en entier signé. |
s est une expression
de chaîne qui représente un entier en utilisant deux little-endian de
codage complémentaire. Seuls les deux premiers octets sont utilisés.
Les erreurs • s a une valeur numérique : Incompatibilité de type. |
||
CVS | y = CVS(s) | Convertit une chaîne de quatre octets en un nombre à virgule flottante simple précision. |
Paramètres • s est une expression de chaîne qui représente un nombre simple précision dans le Format binaire Microsoft. Seuls les quatre premiers octets sont utilisés. Les erreurs • s a une valeur numérique : Incompatibilité de type. |
||
CVD | y = CVD(s) | Convertit une chaîne de huit octets en nombre à virgule flottante double précision. |
Paramètres • s est une expression de chaîne qui représente un nombre à double précision dans le Format binaire Microsoft. Seuls les huit premiers octets sont utilisés. Les erreurs • s a une valeur numérique : Incompatibilité de type. |
||
DATE$ (fonction) | s = DATE$ | Cette fonction ne prend aucun argument. |
Renvoie la date système sous forme de chaîne au format "mm-dd-yyyy". | ||
ENVIRON$ | value = ENVIRON[ ]$(x) | Renvoie une variable d'environnement. |
Paramètres x est une expression. • Si x a une valeur de chaîne, renvoie la valeur de la variable d'environnement x ou chaîne vide si aucune variable portant le nom x n'est définie dans la table d'environnement. La variable d'environnement doit être une chaîne ASCII et sera convertie en majuscule sur les systèmes sensibles à la casse. • Si x a une valeur numérique, elle doit être dans [1—255]. Renvoie la x ième entrée dans le tableau d'environnement. Les erreurs • x est la chaîne vide : Illegal function call. • x contient des caractères non ASCII : Illegal function call. • x est un nombre qui n'est pas dans [-32768—32767] : Overflow. • x est un nombre qui n'est pas dans [1—255] : Illegal function call. |
||
EOF | file = EOF(file_num) | Renvoie -1 si le fichier portant le numéro file_num a atteint la fin du fichier ; 0 sinon. Le dossier doit être ouvert en mode INPUT ou RANDOM. EOF(0) renvoie 0. |
Remarques • Si num_fichier est ouvert sur KYBD : effectue une lecture bloquante et renvoie -1 si CTRL + Z est entré, 0 sinon. Le caractère saisi est alors renvoyé en écho à la console. Les erreurs • file_num a une valeur de chaîne : Type mismatch. • file_num est un nombre qui n'est pas dans [-32768—32767] : Overflow. • file_num est un nombre qui n'est pas dans [0—255] : Illegal function call. • file_num n'est pas 0 ou le numéro d'un fichier ouvert : Bad file number. • Le fichier portant le numéro file_num est en mode OUTPUT ou APPEND : fichier incorrect. |
||
ERDEV | zero = ERDEV | Renvoi 0 |
Remarques • Dans GW-BASIC, renvoie la valeur d'une erreur de périphérique. • Cette fonction n'est pas implémentée dans PC-BASIC. • Cette fonction ne prend aucun argument. |
||
ERDEV$ | empty = ERDEV[ ]$ | Renvoie une chaîne vide. |
Remarques • Dans GW-BASIC, renvoie le nom de périphérique d'une erreur de périphérique. • Cette fonction n'est pas implémentée dans PC-BASIC. • Cette fonction ne prend aucun argument. |
||
ERL | error_line = ERL | Renvoie le numéro de ligne où la dernière erreur a été déclenchée. |
Remarques • Si l'erreur a été déclenchée par une instruction directe, renvoie 65535. • Si aucune erreur n'a été générée, renvoie 0. • Cette fonction ne prend aucun argument. |
||
ERR | error_code = ERR | Renvoie le numéro de la dernière erreur. |
Remarques • Si aucune erreur n'a été générée, renvoie 0. • Si la dernière erreur était une erreur de syntaxe déclenchée par une instruction directe, renvoie 0. • Cette fonction ne prend aucun argument. |
||
EXP | y = EXP(x) | Renvoie l'exponentielle de x , c'est-à-dire e à la puissance x. |
Paramètres • x est une expression à valeur numérique. Remarques • À moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction renvoie un valeur de précision. • La valeur de retour diffère parfois du chiffre le moins significatif de GW-BASIC. Pour les grandes valeurs de x , la différence peut être de 3 chiffres. Les erreurs • x a une valeur de chaîne : Type mismatch. • x est supérieur au logarithme népérien de la valeur simple précision maximale : Overflow. |
||
EXTERR | zero = EXTERR(x) | Renvoie 0. |
Paramètres • x est une expression numérique dans [0—3]. Remarques • Dans GW-BASIC, cette fonction renvoie des informations d'erreur étendues à partir de MS-DOS. • Cette fonction n'est pas implémentée dans PC-BASIC. Les erreurs • x a une valeur de chaîne : Type mismatch. • x n'est pas dans [-32768—32767] : Overflow. • x n'est pas dans [0—3] : Illegal function call. |
||
FIX | whole = FIX(nombre) | Renvoie le nombre tronqué vers zéro. |
Paramètres • nombre est une expression numérique. Remarques • FIX tronque vers zéro : il supprime la partie fractionnaire. En revanche, INT tronque vers moins l'infini. Les erreurs • nombre est une expression de chaîne : Type mismatch. |
||
FN | result = FN[ ]name [(arg_0 [, arg_1]...)] | |
Évalue la fonction
définie par l'utilisateur précédemment définie avec DEF FN name.
Espaces entre Le FN et le nom sont facultatifs. Paramètres • name est le nom d'une fonction précédemment définie. • arg_0, arg_1,... sont des expressions, données en paramètres à la fonction. Les erreurs • Aucune fonction nommée nom n'est définie : Fonction utilisateur non définie. • Le nombre de paramètres diffère de la définition de la fonction : Erreur de syntaxe. • Le type d'un ou plusieurs paramètres diffère de la définition de la fonction : Type décalage. • Le type de retour est incompatible avec le sigil du nom de la fonction : Type mismatch. • La fonction appelée est récursive ou mutuellement récursive : Mémoire insuffisante. |
||
FRE | free_mem = FRE(x) | Renvoie la mémoire BASIC disponible. |
Paramètres x est une expression. • Si x a une valeur numérique, elle est ignorée. • Si x a une valeur de chaîne, la récupération de place est effectuée avant de renvoyer la mémoire disponible. |
||
HEX$ | hex_repr = HEX$(x) | Renvoie une chaîne avec la représentation hexadécimale de x |
Paramètres • x est une expression numérique dans [-32768—65535]. Les valeurs pour x négatif sont affichées en complément à deux. Les erreurs • x n'est pas dans [-32768—65535] : Overflow. • x a une valeur de chaîne : Type mismatch. |
||
INKEY$ | key = INKEY$ | Renvoie une pression sur une touche à partir du tampon du clavier. Si le tampon du clavier est vide, renvoie la chaîne vide. Sinon, la valeur de retour est une chaîne à un ou deux caractères contenant le code ASCII de la touche enfoncée. |
Remarques
• Cette fonction ne prend aucun argument. • Lorsqu'une touche de fonction F1 – F10 est enfoncée, INKEY$ renverra les lettres de la macro associée - sauf si cette macro a été définie sur vide avec la clé instruction, auquel cas elle renvoie le code e-ASCII de la touche de fonction. |
||
INP | code = INP(port) | Renvoie la valeur d'un port de machine émulé |
Paramètres port est une expression numérique dans [0—65535]. port Effet &h60 Renvoie le scancode du clavier pour la touche actuellement enfoncée ou la dernière touche publié. Les scancodes retournés par INP(&h60) sont ceux listés dans le tableau clavier des scancodes (Voir à la fin du document). Si une clé est actuellement en panne, la valeur de retour est son scancode. Sinon la clé est enfoncée, la valeur de retour est le scancode de la dernière clé relâchée, incrémenté de 128. &h201 Renvoie la valeur du port de jeu (port du joystick). Cette valeur est construite comme suit : Signification des bits 0 joystick 2 axe x 1 joystick 1 axe y 2 joystick 1 axe x 3 joystick 2 axe y 4 joystick 2 bouton 1 5 joystick 1 bouton 2 6 joystick 1 bouton 1 7 joystick 2 bouton 2 Les bits du bouton sont 0 lorsque le bouton est déclenché, 1 sinon. Les valeurs des axes sont normalement 0 mais sont mis à 1 par OUT &h201, x puis retombent à 0 après un délai. Plus le délai est long, plus la valeur de l'axe est élevée. Autre valeurs, Renvoie zéro. Remarques • Seul un nombre limité de ports machine sont émulés dans PC-BASIC. Les erreurs • le port n'est pas dans [-32768—65535] : Overflow. • port a une valeur de chaîne : Type mismatch. |
||
INPUT$ | chars = INPUT[ ]$ (num_chars [, [#] file_num]) | |
Renvoie une chaîne de
num_chars caractères à partir du clavier ou, si file_num est fourni, à
partir d'un fichier texte. Paramètres • num_chars est une expression numérique dans [1—255]. • file_num est une expression numérique qui renvoie le numéro d'un fichier texte ouvert dans Mode INPUT. Le # est facultatif et n'a aucun effet. Remarques • Il s'agit d'une lecture bloquante. Il attendra les caractères s'il n'y en a pas dans le tampon. • Tous les caractères de contrôle sauf Ctrl + Pause , Ctrl + Arrêt défil et Pause sont passé à la chaîne par INPUT$. Ctrl + pause et Ctrl + arrêt du défilement l'exécution tandis que Pause s'arrête jusqu'à ce qu'une autre touche soit enfoncée (et non lue). • Lors de la lecture à partir du clavier directement ou via KYBD : , touches fléchées, Suppr , Home , End , Pg Up , Pg Dn sont passés en tant que caractères NUL. Les touches de fonction sont ignorés s'ils sont interceptés par des évènements, sinon le remplacement de la macro de la touche de fonction est actif normalement. Les erreurs • num_chars n'est pas dans [-32768—32767] : Overflow. • num_chars n'est pas dans [1—255] : Illegal function call. • num_fichier n'est pas un fichier ouvert : numéro de fichier incorrect. • file_num est inférieur à zéro : Illegal function call. • num_fichier est supérieur à 32767 : Overflow. • num_fichier n'est pas ouvert pour INPUT : mode de fichier incorrect. • num_chars ou file_num sont des chaînes : Type mismatch. • file_num est ouvert sur un port COM et il s'agit de la première INPUT , LINE INPUT ou Appel INPUT$ sur ce port car le tampon est complètement rempli (c'est-à-dire LOF(num_fichier) est devenu nul) : Overflow du tampon de communication. |
||
INSTR | position = INSTR([start,] parent, child) | |
Renvoie l'emplacement
de la première occurrence de la sous-chaîne enfant dans parent. Paramètres • parent et child sont des expressions de chaîne. • start est une expression numérique dans [1—255] , spécifiant la position de départ à partir de laquelle chercher ; s'il n'est pas spécifié, la recherche commence au caractère 1. Notes • Si child n'est pas une sous-chaîne de parent apparaissant au début ou avant, INSTR renvoie 0. Les erreurs • start a une valeur de chaîne ou parent ou child a des valeurs numériques : Type mismatch. • start n'est pas dans [-32768—32767] : Overflow. • start n'est pas dans [1—255] : Illegal function call. |
||
INT | whole = INT(number) | Renvoie le nombre tronqué vers moins l'infini. |
Paramètres • nombre est une expression. Remarques • FIX tronque vers zéro : il supprime la partie fractionnaire. En revanche, INT tronque vers l'infini négatif. • Si nombre est une expression de chaîne, INT renvoie sa valeur inchangée. |
||
IOCTL$ | result = IOCTL[ ]$ ([#] file_num) | Raises Illegal function call. |
Remarques • Dans GW-BASIC, IOCTL$ lit la réponse à IOCTL à partir d'un périphérique. • Cette fonction n'est pas implémentée dans PC-BASIC. Les erreurs • file_num a une valeur de chaîne : Type mismatch. • num_fichier n'est pas dans [-32768—32767] : Overflow. • num_fichier n'est pas un fichier ouvert : Bad file number. • Sinon : Illegal function call |
||
LEFT$ | child = LEFT$(parent,num_chars) | Renvoie les num_chars caractères les plus à gauche du parent. |
Paramètres • parent est une expression de chaîne. • num_chars est une expression numérique dans [0—255]. Remarques • Si num_chars est égal à zéro ou si parent est vide, LEFT$ renvoie une chaîne vide. • Si num_chars est supérieur à la longueur de parent , renvoie parent. Les erreurs • parent a une valeur numérique ou num_chars a une valeur de chaîne : Type mismatch. • num_chars n'est pas dans [-32768—32767] : Overflow. • num_chars n'est pas dans [0—255] : Illegal function call. |
||
LEN | length = LEN(string) | Renvoie le nombre de caractères dans string. |
Paramètres • string est une expression de chaîne. Les erreurs • string a une valeur numérique : Type mismatch. |
||
LOC | location = LOC(file_num) | |
Renvoie l'emplacement
actuel dans le fichier ouvert sous le numéro file_num. • Si le fichier est ouvert pour INPUT , OUTPUT ou APPEND , LOC renvoie le nombre de Blocs de 128 octets lus ou écrits depuis l'ouverture du fichier. • Si le fichier est ouvert pour RANDOM , LOC renvoie le dernier numéro d'enregistrement lu ou écrit. • Si le fichier est ouvert sur un périphérique COM, LOC renvoie le nombre de caractères dans le tampon d'entrée, avec un maximum de 255. • Si le fichier est ouvert vers KYBD : , LOC renvoie 0. Paramètres • file_num est une expression numérique dans la plage [0—255]. Remarques • num_fichier ne doit pas être précédé d'un #. • En mode OUTPUT ou APPEND, avant toute écriture, LOC renvoie 0. Après le 128e caractère est écrit, LOC renvoie 1. • En mode INPUT, avant toute lecture, LOC renvoie 1. Une fois le 129e caractère lu, LOC renvoie 2. • Si le codage de texte est défini, les caractères peuvent être codés par des séquences de plus de un octet. LOC renverra le nombre d'octets plutôt que le nombre d'encodés personnages. Les erreurs • file_num a une valeur de chaîne : Type mismatch. • num_fichier n'est pas dans [-32768—32767] : Overflow. • file_num n'est pas dans [0—255] : Illegal function call. • num_fichier n'est pas un fichier ouvert : Bad file number. • file_num est ouvert sur un périphérique LPT : Bad file mode. |
||
LOF | length = LOF(file_num) | Renvoie le nombre d'octets dans le fichier ouvert sous file_num. |
Paramètres • file_num est une expression numérique dans la plage [0—255]. Remarques • Si file_num est ouvert sur un périphérique COM:, LOF renvoie le nombre d'octets libres dans le tampon d'entrée. Les erreurs • file_num a une valeur de chaîne : Type mismatch. • num_fichier n'est pas dans [-32768—32767] : Overflow. • file_num n'est pas dans [0—255] : Illegal function call. • num_fichier n'est pas un fichier ouvert : Bad file number. • file_num est ouvert sur un périphérique LPT : Bad file mode. Remarques • Si le codage de texte est défini, les caractères peuvent être codés par des séquences de plus de un octet. LOF renverra le nombre d'octets plutôt que le nombre de caractères encodés. |
||
LOG | y = LOG(x) | Renvoie le logarithme népérien de x. |
Paramètres • x est une expression numérique supérieure à zéro. Remarques • À moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction renvoie un valeur de simple précision. • LOG(x) peut différer de GW-BASIC de 1 dans le chiffre le moins significatif. Les erreurs • x a une valeur de chaîne : Type mismatch. • x est nul ou négatif : Illegal function call. |
||
LPOS | position = LPOS(printer_number) | Renvoie la position de la colonne pour une imprimante. |
Paramètres • printer_number est une expression numérique dans [0—3]. Si c'est 0 ou 1, la position pour LPT1 : est renvoyé. Si c'est 2, LPT2 : ; 3, LPT3 :. Remarques • Lors du passage en mode direct, LPT1 : (mais pas les autres imprimantes) est vidé et sa position est remise à 1. Les erreurs • printer_number a une valeur de chaîne : Type mismatch. • printer_number n'est pas dans [-32768—32767] : Overflow. • printer_number n'est pas dans [0—3] :Illegal function call. |
||
MID$ (function) | substring = MID$(string, position [,length]) | |
Renvoie une
sous-chaîne de chaîne commençant à la position , en comptant à partir de
1. La sous-chaîne a la longueur de length si spécifié. Si la longueur n'est pas spécifiée, la sous-chaîne s'étend jusqu'à la fin de la chaîne. Paramètres • string est une expression de chaîne. • position est une expression numérique comprise entre 1 et la longueur de la chaîne, inclus. • length est une expression numérique dans [0—255]. Les erreurs • la chaîne a une valeur numérique ou la position ou la longueur a des valeurs de chaîne : Type mismatch. • la position ou la longueur ne sont pas dans [-32768—32767] : Overflow. • la position n'est pas dans [1—255] : Illegal function call. • la longueur n'est pas dans [0—255] : Illegal function call. |
||
MKD$ | bytes = MKD$(double) | Renvoie la représentation interne au format binaire Microsoft sur 8 octets d'un nombre à double précision. |
Les erreurs • double a une valeur de chaîne : Type mismatch. |
||
MKI$ | bytes = MKI$(int) | Renvoie la représentation little-endian interne de 2 octets d'un entier. |
Les erreurs • int a une valeur de chaîne : Type mismatch. • int n'est pas dans [-32768—32767] : Overflow. |
||
MKS$ | bytes = MKS$(single) | Renvoie la représentation interne au format binaire Microsoft sur 8 octets d'un nombre simple précision. |
Les erreurs • single a une valeur de chaîne : Type mismatch. |
||
OCT$ | octal = OCT$(x) | Renvoie une chaîne avec la représentation octale de x. |
Paramètres • x est une expression numérique dans [-32768—65535]. Les valeurs pour x négatif sont affichées comme complément à deux. Les erreurs • x a une valeur de chaîne : Type mismatch. • x n'est pas dans [-32768—65535] : Overflow. |
||
PEEK | value = PEEK(address) | |
Renvoie la valeur de
la mémoire au segment * 16 + adresse où segment est le segment courant
défini avec DEF SEG. Paramètres • adresse est une expression numérique dans [-32768—65535]. Les valeurs négatives sont interprété comme leur complément à deux. Remarques • La mémoire n'est que partiellement émulée en PC-BASIC. Voir Modèle de mémoire pour les adresses prises en charge. En dehors des zones émulées, PEEK renvoie 0. • Les valeurs d'une adresse mémoire particulière peuvent être prédéfinies sur la ligne de commande à l'aide de l'option peek. Cela peut être utilisé pour la compatibilité avec les anciens programmes. Ces valeurs remplaceront les valeurs de vidéo ou de segment de données, si elles se trouvent à ces emplacements. Les erreurs • address a une valeur de chaîne : Type mismatch. • address n'est pas dans [-32768—65535] : Overflow. |
||
PEN (function) | x = PEN(mode) | Lit le crayon
lumineux. Ce que cette fonction retourne dépend de mode : |
mode 0 1 2 3 4 5 6 7 8 9 |
Valeur de retour booléen ; si le crayon lumineux est tombé depuis le dernier poll. Coordonnée x de la dernière position du stylo vers le bas coordonnée y de la dernière position du stylo vers le bas booléen ; si le stylet est actuellement baissé Coordonnée x de la position actuelle du stylet coordonnée y de la position actuelle du stylet coordonnée de rangée de caractères de la dernière position du stylo vers le bas coordonnée de la colonne de caractères de la dernière position du stylo vers le bas coordonnée de ligne de caractères de la position actuelle du stylet coordonnée de la colonne de caractères de la position actuelle du stylet |
|
Paramètres • mode est une expression numérique dans [0—9]. Remarques • Dans PC-BASIC, pour lire le stylet enfoncé, appuyez sur le bouton de la souris. Pour la position du stylo, lit la position du pointeur de la souris. Les erreurs • mode a une valeur de chaîne : Type mismatch. • le mode n'est pas en [-32768—32767] : Overflow. • le mode n'est pas dans [0—9] : Illegal function call. |
||
PLAY (function) | length = PLAY(voice) | |
Renvoie le nombre de
notes dans la file d'attente de la musique de fond. La valeur de retour
est dans [0—32]. Paramètres • voice est une expression numérique dans [0—255]. Si syntax={pcjr|tandy} , indique pour quel canal de voix de tonalité le nombre de notes doit être retourné. Si la voice n'est pas dans [0—2] , la file d'attente pour voice 0 est renvoyée. Pour les autres choix de syntaxe , la valeur vocale n'a aucun effet. Remarques • Il y a au maximum 32 notes dans la file d'attente musicale. Cependant, à moins que l'articulation ne soit réglé sur legato, il y a de courts écarts entre chaque note; ceux-ci sont comptés comme notes séparées dans la file d'attente. Effectivement, la longueur de la file d'attente est donc de 16 pour la valeur par défaut et staccato et 32 pour legato. Les erreurs • voice a une valeur de chaîne : Type mismatch. • la voix n'est pas dans [0—255] : Illegal function call. • la voix n'est pas dans [-32768—32767] : Overflow. |
||
PMAP | transformed_coord = PMAP(original_coord, fn) | |
Cartes entre la
fenêtre d'affichage et les coordonnées logiques ( WINDOW ). Si aucune VUE n'a été définie, les coordonnées de la fenêtre sont des coordonnées physiques. En fonction de la valeur de fn , PMAP passe des coordonnées logiques aux coordonnées de la fenêtre ou vice versa : fn 0 renvoie viewport x donnée logique x 1 renvoie viewport y donnée logique y 2 retour logique x fenêtre viewport x 3 retour logique y donné viewport y Paramètres • fn est une expression numérique dans [0—3]. Remarques • Initialement, en mode texte, PMAP renvoie 0. • Dans GW-BASIC, PMAP se comporte anormalement lors des changements d'ÉCRAN, où il renvoie parfois des résultats comme si le dernier paramètre WINDOW avait persisté. Ce comportement n'est pas implémenté dans PC-BASIC. Les erreurs • N'importe lequel des paramètres a une valeur de chaîne : Type mismatch. • Une coordonnée physique n'est pas dans [-32768—32767] : Overflow. • fn n'est pas dans [-32768—32767] : Overflow. • fn n'est pas dans [0—3] : Illegal function call. |
||
POINT (current coordinate) | coord = POINT(fn) | |
Renvoie une coordonnée
actuellement active de l'écran graphique. Il s'agit généralement de la dernière position à laquelle un pixel a été tracé, du deuxième coin indiqué dans une commande LINE ou du centre de la fenêtre si rien n'a été tracé. fn est une expression numérique dans [0—3]. La coordonnée renvoyée dépend de la valeur de fn : fn 0 viewport x 1 viewport y 2 logical x 3 logical y Paramètres • fn est une expression numérique dans [0—3]. Remarques • En mode texte, renvoie la coordonnée active de tout mode graphique précédent ; si aucun mode graphique n'a été actif, renvoie 0. Les erreurs • fn a une valeur de chaîne : Type mismatch. • fn n'est pas dans [-32768—32767] : Overflow. • fn n'est pas dans [0—3] : Illegal function call. |
||
POINT (pixel attribute) | attrib = POINT(x, y) | |
Renvoie l'attribut du
pixel à la coordonnée logique x , y. Paramètres • x , y sont des expressions numériques dans [-32768—32767]. Remarques • Si x , y est en dehors de l'écran, renvoie -1. Les erreurs • La fonction est appelée en mode texte : Illegal function call. • x ou y a une valeur de chaîne : Type mismatch. • x ou y ou les coordonnées physiques qu'ils traduisent ne sont pas dans [-32768—32767] : Overflow. |
||
POS | pos = POS(dummy) | Renvoie la position actuelle de la colonne du curseur, dans la plage [1—80]. |
Paramètres • dummy est une expression valide de n'importe quel type ; sa valeur n'a aucun effet. |
||
RIGHT$ | child = RIGHT$(parent,num_chars) | |
Renvoie les num_chars
caractères les plus à droite du parent. Si num_chars est égal à zéro ou
parent est vide, RIGHT$ renvoie une chaîne vide. Si num_chars est
supérieur à la longueur de parent , renvoie le parent. Paramètres • parent est une expression de chaîne. • num_chars est une expression numérique dans [0—255]. Les erreurs • num_chars a une valeur de chaîne : Type mismatch. • num_chars n'est pas dans [-32768—32767] : Overflow. • num_chars n'est pas dans [0—255] : Illegal function call. |
||
RND | random = RND[(x)] | Renvoie un
nombre pseudo-aléatoire dans l'intervalle [0—1) |
Paramètres x est une expression numérique. • Si x est zéro, RND répète le dernier nombre pseudo-aléatoire. • Si x est supérieur à zéro, un nouveau nombre pseudo-aléatoire est renvoyé. • Si x est négatif, x est converti en une valeur à virgule flottante simple précision et la graine de nombre aléatoire est définie sur la valeur absolue de sa mantisse. La fonction génère alors un nouveau nombre pseudo-aléatoire avec cette graine. Puisque le seul mantisse de x est utilisée, deux valeurs quelconques dont le rapport est une puissance de 2 produiront la même graine. Notez que cette procédure pour générer une nouvelle graine diffère de celle utilisée par RANDOMIZE. Remarques • La fonction RND de PC-BASIC génère des nombres pseudo-aléatoires via une générateur congruentiel avec modulo 224, multiplicateur 214013 et incrément 2531011. Cela reproduit exactement les nombres aléatoires du RND de GW-BASIC. • Il convient de noter, cependant, qu'il s'agit d'un très mauvais générateur de nombres aléatoires : impliquent une période de récurrence de 224, ce qui signifie qu'après moins de 17 millions d'appels RND s'enroulera et commencera à parcourir exactement le même série de chiffres à nouveau. RND ne doit pas être utilisé pour la cryptographie, simulations scientifiques ou toute autre chose sérieuse à distance. Les erreurs • x a une valeur de chaîne : Type mismatch. |
||
SCREEN (function) | value = SCREEN(row, column [, fn]) | |
Renvoie le point de
code ou l'attribut de couleur du caractère à la position row , col. Paramètres • row est une expression numérique dans la plage [1—25]. • col est une expression numérique comprise entre 1 et la largeur de l'écran (40 ou 80). • fn est une expression numérique dans [0—255]. S'il est nul ou non spécifié, le code point du caractère est renvoyé. S'il est différent de zéro, en mode texte l'attribut est renvoyé; dans les autres écrans, 0 est renvoyé. Les erreurs • Tout paramètre a une valeur de chaîne : Type mismatch. • fn n'est pas dans [0—255] : Illegal function call. • fn n'est pas dans [-32768—32767] : Overflow. • la ligne n'est pas à l'intérieur de la zone VIEW PRINT actuelle : appel de fonction illégal. • KEY ON et ligne=25 : Illegal function call. • col n'est pas dans [1, largeur] : Illegal function call. Remarques • Dans GW-BASIC, la fonction SCREEN a un comportement d'erreur anormal : constructions qui, pour d'autres fonctions, soulèverait une erreur de syntaxe ou un opérande manquant à la place raise Illegal function call. Ce comportement n'est pas reproduit dans PC-BASIC. |
||
SGN | sign = SGN(number) | Renvoie le
signe du nombre : 1 pour positif, 0 pour zéro et -1 pour négatif. |
Paramètres • nombre est une expression numérique. Les erreurs • number a une valeur de chaîne : Type mismatch. |
||
SIN | sine = SIN(angle) | Renvoie le sinus de l'angle. |
Paramètres • angle est une expression numérique donnant l'angle en radians. Remarques • À moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction renvoie un valeur de simple précision. • Le sinus renvoyé diffère généralement de la valeur renvoyée par GW-BASIC dans le chiffre le moins significatif. Les erreurs • angle a une valeur de chaîne : Type mismatch. |
||
SPACE$ | spaces = SPACE$(number) | Renvoie une chaîne d'espaces numériques. |
Paramètres • number est une expression numérique dans [0—255]. Les erreurs • number a une valeur de chaîne : Type mismatch. • le numéro n'est pas dans [-32768—32767] : Overflow. • le numéro n'est pas dans [0—255] : Illegal function call. |
||
SQR | root = SQR(number) | Renvoie la racine carrée du nombre. |
Paramètres • nombre est une expression numérique. Remarques • À moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction renvoie un valeur de simple précision. Les erreurs • le nombre a une valeur de chaîne : Type mismatch |
||
STICK | pos = STICK(axis) | |
Renvoie une coordonnée d'un axe du
joystick. Toutes les coordonnées renvoyées sont dans la plage [1—254]
avec 128 indiquant la position neutre. axe Valeur de retour 0 1er manette x coordonnée 1 1er manette y coordonné 2 2ème manette x coordonnée 3 2ème manette y coordonnée Paramètres • axis est une expression numérique dans [0—3] et indique quel axe lire. Les erreurs • l'axe a une valeur de chaîne : Type mismatch • l'axe n'est pas dans [-32768—32767] : Overflow. • l'axe n'est pas dans [0—3] : Illegal function call. |
||
STR$ | repr = STR$(number) | |
Paramètres • nombre est une expression numérique. Les erreurs • number a une valeur de chaîne : Type mismatch. |
||
STRIG (function) | result = STRIG(mode) | Renvoie l'état des boutons de déclenchement du joystick. |
STRIG renvoie les
résultats suivants, tous sont des valeurs booléennes : 0 1ère manette, la 1ère gâchette a été enfoncée depuis la dernière interrogation. 1 1ère manette, la 1ère gâchette est actuellement enfoncée. 2 2ème manette, 1ère gâchette a été enfoncée depuis la dernière interrogation. 3 2ème manette, la 1ère gâchette est actuellement enfoncée. 4 1ère manette, le 2e déclencheur a été enfoncé depuis la dernière interrogation. 5 1ère manette, la 2ème gâchette est actuellement enfoncée. 6 2e manette, 2e gâchette a été enfoncée depuis la dernière interrogation. 7 2e manette, 2e gâchette est actuellement enfoncée. Paramètres • mode est une expression numérique dans [0—7]. Remarques • La fonction STRIG renvoie des résultats corrects quel que soit l'état STRIG ON ou si STRIG(0) a été appelé en premier. Les erreurs • mode a une valeur de chaîne : Type mismatch. • le mode n'est pas en [-32768—32767] : Overflow. • le mode n'est pas dans [0—7] : Illegal function call. |
||
STRING$ | string = STRING$(length, char) | Renvoie une chaîne dont la longueur est multipliée par le caractère char. |
Paramètres • Si char est une expression numérique, elle doit être comprise entre [0—255] et est interprétée comme point de code du caractère. • Si char est une expression de chaîne, son premier caractère est utilisé. Les erreurs • length a une valeur de chaîne : Type mismatch. • char est la chaîne vide : Illegal function call. • car ou longueur n'est pas dans [-32768—32767] : Overflow. • car ou longueur n'est pas dans [0—255] : Illegal function call. |
||
TAN | tangent = TAN(angle) | Renvoie la tangente de l'angle. |
Paramètres • angle est une expression numérique donnant l'angle en radians. Remarques • À moins que PC-BASIC ne soit exécuté avec l'option double, cette fonction renvoie un valeur simple précision. • La tangente renvoyée diffère généralement de la valeur renvoyée par GW-BASIC dans le chiffre le moins significatif. • Pour des angles proches de multiples de π/2 , la tangente est divergente ou proche de zéro. Les valeurs renvoyées auront une très faible précision dans ces cas. Les erreurs • angle a une valeur de chaîne : Type mismatch. |
||
TIMER (function) | seconds = TIMER | Renvoie le nombre de secondes depuis minuit sur l'horloge BASIC interne. |
Remarques • Mises à jour TIMER en tiques de 1/20 seconde. • Les deux octets les moins significatifs de TIMER sont souvent utilisés comme graine pour le générateur de nombres pseudo-aléatoires via RANDOMIZE TIMER. Étant donné que ces octets ne prendre que des valeurs d'un ensemble limité, ce n'est en fait pas particulièrement un bon générateur de hasard. Cependant, le générateur de nombres pseudo-aléatoires inclus avec GW-BASIC et PC-BASIC est si faible qu'il ne devrait de toute façon pas être utilisé pour quelque chose de sérieux. • Cette fonction ne prend aucun argument. |
||
USR | value = USR[n](expr) | Raises Appel de fonction illégal. |
Paramètres • n est un chiffre [0—9]. • expr est une expression. Remarques • Dans GW-BASIC, appelle une fonction de code machine et renvoie sa valeur de retour. • Cette fonction n'est pas implémentée dans PC-BASIC. Les erreurs • n n'est pas un chiffre [0—9] : Syntax error. |
||
VAL | value = VAL(string) | |
Renvoie la valeur
numérique de l'expression de chaîne chaîne. L'analyse s'arrête dès que
le premier caractère rencontré ne peut pas faire partie d'un nombre. Si aucun caractère n'est analysé, VAL renvoie zéro. Voir la section sur les littéraux numériques pour les formats numériques reconnus. Remarques • Les espaces avant ou même à l'intérieur d'un nombre sont ignorés : VAL(" 1 0") renvoie 10. • Si la chaîne contient l'un des caractères séparateurs ASCII CHR$(28) (fichier séparateur), CHR$(29) (séparateur de groupe) ou CHR$(31) (séparateur d'unité), VAL renvoie zéro. Ce n'est pas le cas avec CHR$(30) (séparateur d'enregistrement). Ce comportement est conforme à GW-BASIC. Les erreurs • chaîne a une valeur numérique : Type mismatch. |
||
VARPTR | pointer = VARPTR({name|#file_num}) | |
Renvoie l'adresse
mémoire du nom de variable ou du bloc de contrôle de fichier du numéro
de fichier num_fichier. Paramètres • name est une variable précédemment définie ou un élément de tableau entièrement indexé. • file_num est un numéro de dossier légal. Remarques • VARPTR peut être utilisé avec PEEK pour lire la représentation interne d'une variable. • Si nom est un élément de tableau indéfini, il sera implicitement alloué de la même manière que s'il avait été utilisé dans une expression. Les erreurs • nom est un scalaire qui n'a pas été défini auparavant : Illegal function call. • file_num a une valeur de chaîne : Type mismatch. • file_num n'est pas dans [1, max_files] , où max_files est le nombre maximum de nombre de fichiers défini par l'option max-files : Bad file number. |
||
VARPTR$ | pointer = VARPTR$(name) | |
Renvoie l'adresse
mémoire de la variable nom sous la forme d'une chaîne de 3 octets. name est un élément de tableau entièrement indexé (qui peut ou non avoir été défini) ou une variable scalaire définie précédemment. Le premier octet est la longueur de l'enregistrement vers lequel pointe le pointeur : 2 pour les entiers 3 pour les chaînes (longueur + pointeur vers l'espace de la chaîne) 4 pour flotteurs simple précision 8 pour flotteurs double précision Les deux derniers octets sont l'adresse du pointeur (telle que renvoyée par VARPTR ) dans l'ordre little-endian. Remarques • Si nom est un élément de tableau indéfini, il sera implicitement alloué de la même manière que s'il avait été utilisé dans une expression. Les erreurs • nom est un scalaire qui n'a pas été défini auparavant : Illegal function call. |
Tableau des scancodes du clavier
Key | Code | Key | Code | Key | Code | Key | Code | |||
Esc | 01 | U | 16 | /| | 2B | F7 | 41 | |||
1/! | 02 | I | 17 | Z | 2C | F8 | 42 | |||
2/@ | 03 | O | 18 | X | 2D | F9 | 43 | |||
3/# | 04 | P | 19 | C | 2E | F10 | 44 | |||
4/$ | 05 | [/{ | 1A | V | 2F | NUM LOCK | 45 | |||
5/% | 06 | ]/} | 1B | B | 30 | SCROLL LOCK | 46 | |||
6/^ | 07 | ENTER | 1C | N | 31 | 7/HOME | 47 | |||
7/& | 08 | CTRL | 1D | M | 32 | 8/CURSOR UP | 48 | |||
8/* | 09 | A | 1E | ,/< | 33 | 9/PG UP | 49 | |||
9/( | 0A | S | 1F | //? | 35 | - | 4A | |||
0/) | 0B | D | 20 | RIGHT SHIFT | 36 | 4/CURSOR LEFT | 4B | |||
-/_ | 0C | F | 21 | */PRTSCR | 37 | 5 | 4C | |||
=/+ | 0D | G | 22 | ALT | 38 | 6/CURSOR RIGHT | 4D | |||
BACKSPACE | 0E | H | 23 | SPACE | 39 | + | 4E | |||
TAB | 0F | J | 24 | CAPS LOCK | 3A | 1/END | 4F | |||
Q | 10 | K | 25 | F1 | 3B | 2/CURSOR DOWN | 50 | |||
W | 11 | L | 26 | F2 | 3C | 3/PG DN | 51 | |||
E | 12 | ;/: | 27 | F3 | 3D | 0/INS | 52 | |||
R | 13 | '/" | 28 | F4 | 3E | ./DEL | 53 | |||
T | 14 | '/~ | 29 | F5 | 3F | SysReq | 54 | |||
Y | 15 | LEFT SHIFT | 2A | F6 | 40 |
Autres
\ | (Non-US 102-key) | 56 | ?? Henkan (Japanese 106-key) | 79 | |
F11 | 57 | ??? Muhenkan (Japanese 106-key) | 7B | |
F12 | 58 | ??/?? Hankaku/Zenkaku (Japanese 106-key) | 29 | |
Left Logo (Windows 104-key) | 5B | ¥ | (Japanese 106-key) | 7D | |
Right Logo (Windows 104-key) | 5C | ?? Hanja (Korean 103-key) | F1 | |
Menu (Windows 104-key) | 5D | ?/? Han/Yeong (Korean 103-key) | F2 | |
????/???? Hiragana/Katakana (Japanese 106-key) |
70 | \ ? ° (Brazilian ABNT2) | 73 | |
\ _ (Japanese 106-key) | 73 | keypad. (Brazilian ABNT2) | 7E |