PC-BASIC, Guide de langage

Guide de langage PC-BASIC

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

Opérations sur les chaînes

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

Le texte et l'écran

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
PRINT 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

La saisie au clavier

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

Calculs et mathématiques

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

Son

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

Remarques

• 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

 

 

 

 

 

 

 

Recherche personnalisée