POUR LA VERSION 0.9.28
PARTIE 1 - LE LANGAGE DE REFERENCE
Ce logiciel est appelé PANORAMIC parce que c'est un langage BASIC "universel" , utilisable dans des domaines différents:
- Monde 3D: charge des objets MD2 et 3DS , des objets 3D primaires, les gère (en position, en taille, en couleur, en texture, ...), pilote une lumière 3D et une caméra 3D,
- Monde 2D: permet de déplacer des SPRITES sur un arrière plan,
- Manipule (charge et joue) des objets multimédia: sons, musiques, images, films,
- Dessine en 2D: cercles, rectangles, ellipses, arcs, lignes, polylignes, points,
- Crée et manipule des objets système (de Windows): bouton, liste, combobox, barres, ...
- Manipule des fichiers texte sur le disque: lire, écrire, créer...
- Pilote le logiciel Excel,
- Permet le calcul mathématique: log, exp, sin, cos...
- etc.
PANORAMIC utilise la syntaxe classique du BASIC.
N'est pas sensible à la casse: NexT et nEXt ont la même signification.
REM
(ou apostrophe) pour les remarques: les caractères après
le mot clé REM
ne sont pas évalués.
Des espaces peuvent être insérés partout sauf à l'intérieur
d'un mot clé ou d'un nom de variable.
Toutes les variables doivent être définies par DIM,
sauf les variables système (par exemple TIME$, DATE$, DIR_CURRENT$).
Plusieurs commandes peuvent être écrites sur la même ligne,
dans ce cas elles sont séparées par ":"
Possède des mots-clés de type : déclaration (DATA,...),
commandes (PRINT,...), fonctions (SIN(30),...), variables système (TIME$,...),
opérateurs (AND,...).
Une commande peut avoir jusqu'à 5 paramètres.
"." est le séparateur décimal pour les nombres.
Si une erreur arrive lors de l'exécution, une fenêtre explicative
est visualisée et le programme s'arrête.
OBJET SYSTEME: objet du Système d'Exploitation:
button, form,
combo,
scene3d, ...
CIBLE: l'objet qui reçoit toutes les commandes.
CIBLE 2D: l'objet (comme
form ou picture)
qui est désigné pour recevoir toutes les commandes
2D.
CIBLE 3D: l'objet (un scene3d
parmi plusieurs scene3d)
désigné pour recevoir toutes les commandes 3D.
OBJET 3D: élément d'un scene3d (3d_sphere,
3d_cone, 3d_torus,
etc)
OBJET SPRITE: image qui peut être déplacée sur un arrière
plan (scene2d) sans
le perturber
COMMANDE: un ordre à exécuter immédiatement.
FONCTION: une expression qui retourne une valeur. Elle est appelée avec
un ou plusieurs paramètres. Exemple: sqr(2)
retourne 1.414...
DECLARATION: mot clé utilisé pour déclarer quelque chose
(une étiquette, une variable,...)
VARIABLE SYSTEME: variable non définie par l'utilisateur, mais utilisée
pour sa valeur propre (time$,
date$, ...)
SOUS-PROGRAMME: groupe de commandes qui commence par
un LABEL et
qui se termine par RETURN et
qui peut être appelé un certain nombre de fois.
Chaque objet système (button,
list, form, ...) doit
être créé avec un numéro associé. Ce numéro
est utilisé pour toute commande appliquée sur cet objet.
Chaque objet 3D doit être créé avec un numéro associé.
Ce numéro est utilisé pour toute commande 3D appliquée
sur cet objet.
Chaque objet SPRITE doit être créé avec un numéro
associé. Ce numéro est utilisé pour toute commande SPRITE
appliquée sur cet objet.
Les numéros d'OBJETS SYSTEME, les numéros d'OBJETS 3D et les numéros
de SPRITES sont indépendants (aucun rapport): un OBJET 3D peut porter
un numéro utilisé par un OBJET SYSTEME ou un OBJET SPRITE.
Les commandes sont regroupées par famille.
Exemple :
Chaque commande sur un objet 3D commence par 3D:
3d_x_position, 3d_z_rotate,
...
Chaque commande pour dessiner commence par 2D:
2d_circle, 2d_pen_color,
...
Chaque commande sur un objet SPRITE commence par SPRITE: sprite_position,
sprite_hide, ...
Une fonction a des parenthèses: sin(x),
width(N)
Une commande n'a aucune parenthèse.
1.2.4 - Commandes et numéro d'objet
Toute commande sur un objet SYSTEME utilise le numéro
de cet objet SYSTEME.
Toute commande sur un objet 3D utilise le numéro de cet objet 3D.
Toute commande sur un objet SPRITE utilise le numéro de cet objet SPRITE.
1.2.5 - Fonctions et numéro d'objet
Toute fonction sur un objet SYSTEME utilise le numéro
de cet objet SYSTEME.
Toute fonction sur un objet 3D utilise le numéro de cet objet 3D.
Toute fonction sur un objet SPRITE utilise le numéro de cet objet SPRITE.
1.2.6 - Cible des commandes de dessin 2D
Les commandes de dessin 2D (pour dessiner sur un objet) ne se
réfèrent pas à un numéro d'objet, mais s'appliquent
à l'objet "cible 2D".
L'objet "cible 2D" est FORM numéro 0 par défaut.
Pour changer d'objet "cible 2D", utiliser la commande "2D_TARGET_IS
N". N sera le nouvel objet "cible 2D".
Il y a 3 types de variables:
Réel,
Entier (le nom est suivi par %),
String (le nom est suivi par $)
a% est un entier (a% = 14)
b$ est un string (b$ = "Salut")
d est réel (d=12.8953)
Toutes les variables (simples et tableaux) doivent être
définies par DIM
DIM Abc
, I%, Name$(20)
Un nom de variable contient des lettres, des chiffres, le caractère souligné (_) et peut se terminer par % ou $. Le premier caractère ne peut pas être un nombre.
Une variable peut être libérée par la commande FREE.
On utilise DIM
pour définir un tableau de variable (entier, réel
ou string).
dim A$(20) crée un tableau de strings de 21 éléments. Le premier élément est a$(0), le dernier est a$(20)
Pour libérer un tableau de variable, utiliser FREE sans indiquer le nombre d'éléments: dim a$(20): free a$
Les fonctions mathématiques classiques du BASIC sont disponibles:
ABS(X) | Retourne la valeur absolue de X. |
ACOS(X) | Retourne l'arc cosinus de X. |
ASIN(X) | Retourne l'arc sinus de X. |
ATN(X) | Retourne l'arc tangente de X. |
COS(X) | Retourne le cosinus de X. |
DEGREES | Les angles sont exprimés en degrés. |
DEGREE_TO_RADIAN(X) | Retourne la valeur en radians de l'angle X exprimé en degrés. |
EVEN(X) |
Retourne 1 si X est pair, 0 sinon. |
EXP(X) | Retourne l'exponentielle de X. |
FRAC(X) | Retourne la partie fractionnaire de X. |
HCOS(X) | Retourne le cosinus hyperbolique de X. |
HEX(V$) | Retourne une valeur décimale à partir d'une valeur hexadécimale V$. |
HEX$(V) | Retourne une valeur hexadécimale à partir d'une valeur décimale V. |
HSIN(X) | Retourne le sinus hyperbolique de X. |
HTAN(X) | Retourne la tangente hyperbolique de X. |
INT(X) | Retourne la partie entière de X. |
LOG(X) | Retourne le logarithme népérien (de base e) de X. |
LOG10(X) | Retourne le logarithme en base 10 de X. |
LOG2(X) | Retourne le logarithme en base 2 de X. |
MAX(X,Y) | Retourne le plus grand de X et Y. |
MIN(X,Y) | Retourne le plus petit de X et Y. |
MOD(X,Y) | Retourne le modulo de X et Y. |
ODD(X) | Retourne 1 si X est impair, 0 sinon. |
PI | Retourne 3.1415926535897932384626433832795 |
POWER(X, Y) | Retourne X élevé à la puissance Y. |
RADIANS | Les angles sont exprimés en radians. |
RADIAN_TO_DEGREE(X) | Retourne la valeur en degrés de l'angle X exprimé en radians. |
RND(X) | Retourne une valeur aléatoire entre 0 et X, mais non égale à X. |
SGN(X) | Retourne le signe de X. |
SIN(X) | Retourne le sinus de X. |
SQR(X) | Retourne la racine carrée de X. |
TAN(X) | Retourne la tangente de X. |
WRAP_VALUE(A) | Retourne une valeur de l'angle A dans l'intervalle 0-360. |
- Les fonctions logiques classiques du BASIC sont disponibles:
AND, OR,
NOT
- Les parenthèses peuvent être utilisées.
Ces fonctions sont utilisées dans une expression IF,
WHILE ou UNTIL et le résultat de
l'évaluation est "VRAI" ou "FAUX".
Ex: IF
((A>1) OR B+3<C-4))
AND ((D<>6
OR NOT(A<B))
THEN - - -
Les comparateurs suivants peuvent être utilisés avec des valeurs numériques:
= | égal à |
> | plus grand que, supérieur à |
< | plus petit que, inférieur à |
<= ou =< | inférieur ou égal à |
>= ou => | supérieur ou égal à |
>< ou <> | non égal à, différent de |
Seuls les comparateurs suivants peuvent être utilisés pour comparer des strings:
= | égal à |
>< ou <> | non égal à, différent de |
Les fonctions "string" classiques du BASIC sont disponibles:
LEFT$(A$, N) | Retourne les N premiers caractères du string A$ (caractères à gauche). |
RIGHT$(A$, N) | Retourne les N derniers caractères du string A$ (caractères à droite). |
LEN(A$) | Retourne la longueur du string A$ (soit le nombre de caractères). |
STRING$(N, C$) | Retourne un string contenant N fois le caractère C$. |
MID$(A$, 4, 2) | Retourne les 2 caractères du string A$ à partir du 4ème caractère. |
UPPER$(A$) | Retourne le string constitué de A$ en majuscules. |
LOWER$(A$) | Retourne le string constitué de A$ en minuscules. |
TRIM$(A$) | Retourne le string constitué de A$ sans les blancs à droite et à gauche. |
LTRIM$(A$) | Retourne le string constitué de A$ sans les blancs à gauche. |
RTRIM$(A$) | Retourne le string constitué de A$ sans les blancs à droite. |
NUMERIC(A$) | Retourne 1 si le string A$ représente une valeur numérique, 0 sinon. |
INSTR(A$,B$) | Retourne la position du premier caractère de B$ dans A$. |
INSTR_LAST(A$,B$) | Retourne la position dans la chaine de caractères A$ de la dernière occurence de la chaine de caractères B$. |
INSTR_POS(A$,B$,P) | Retourne la position de la chaine de caractères B$ dans la chaine de caractères A$ à partir de la position P. |
INSTR_RIGHT(A$,B$) | Retourne la position dans la chaine de caractères A$ du premier caractère de la chaine de caractères B$, à partir de la fin. |
INSERT$(A$, B$, P) | Retourne un string formé de A$ avec B$ inséré en position P. |
REVERSE$(A$) | Retourne la chaîne de caractères dans laquelle l'ordre des caractères de A$ est inversé. |
RIGHT_POS$(A$,P) | Retourne une chaine de caractères composée de la chaine de caractères A$ à partir de la position P. |
Les fonctions de conversion classiques du BASIC sont disponibles:
VAL("123.4") | Convertit le string "123.4" en sa valeur réelle 123.4 |
STR$(123.4) | Convertit la valeur réelle 123.4 en un string "123.4" |
ASC(A$) | Retourne le code ASCII du premier caractère d'A$ |
CHR$(V) | Retourne le caractère correspondant au code ASCII V |
2.5 - Fonctions logiques binaires
BIN_AND(V1, V2) | Retourne la valeur du "ET" binaire logique entre V1 et V2 |
BIN_OR(V1, V2) | Retourne la valeur du "OU" binaire logique entre V1 et V2 |
BIN_XOR(V1, V2) | Retourne la valeur du "OU EXCUSIF" binaire logique entre V1 et V2 |
Des variables système donnent les dimensions de l'écran en pixels:
SCREEN_X | Retourne la largeur de l'écran en pixels. |
SCREEN_Y | Retourne la hauteur de l'écran en pixels. |
2.7 - Lecture et écriture en mémoire
PEEK(A) |
Retourne la valeur (octet de 0 à 255) de l'adresse A. |
PEEK16(A) | Retourne le contenu (valeur sur 16 bits de 0 à 65535) des adresses A et A+1. |
PEEK32(A) | Retourne le contenu (valeur sur 32 bits de 0 à 4294967295) des adresses A, A+1, A+2 et A+3. |
POKE A,V |
Ecrit la valeur V (octet de 0 à 255) à l'adresse A. |
POKE16 A,V |
Ecrit la valeur de 16 bits V (octet de 0 à 255) aux adresses A et A+1. |
POKE32 A,V |
Ecrit la valeur de 32 bits V (octet de 0 à 4294967295) aux adresses A, A+1, A+2 et A+3. |
POKE_NORMAL | Les commandes POKE16 A,V et POKE32 A,V écrivent V avec le poids fort de V à l'adresse A. |
POKE_REVERSE | Les commandes POKE16 A,V et POKE32 A,V écrivent V avec le poids faible de V à l'adresse A. |
PEEK_NORMAL | Les fonctions PEEK16(A) et PEEK32(A) retournent une valeur dont le poids fort est à l'adresse A. |
PEEK_REVERSE | Les fonctions PEEK16(A) et PEEK32(A) retournent une valeur dont le poids faible est à l'adresse A. |
2.8 - Séparateur décimal pour les nombres réels
SEPARATOR_IS_COMMA |
Le séparateur décimal pour les nombres réels est la virgule |
SEPARATOR_IS_POINT |
Le séparateur décimal pour les nombres réels est le point |
IF Condition THEN Instructions |
Exécute "Instructions" si "Condition" est Vraie. |
IF Condition Groupe d'Instructions END_IF |
Exécute "Groupe d'Instructions" si "Condition" est Vraie. |
IF Condition Groupe d'Instructions A ELSE Groupe d'Instructions B END_IF |
Exécute "Groupe d'Instructions A" si "Condition" est Vraie, sinon, exécute "Groupe d'Instructions B". |
FOR variable = Expression1 TO Expression2 Groupe d'Instructions NEXT variable |
Exécute "Groupe d'Instructions" pour Variable variant de la valeur Expression1 à la valeur Expression2. Un STEP est disponible pour la boucle FOR / NEXT: il définit l'incrément de la variable. Une commande EXIT_FOR permet de sortir de la boucle FOR / NEXT. |
WHILE Condition Groupe d'Instructions END_WHILE |
Exécute "Groupe d'Instructions" tant que "Condition" est Vraie. Une commande EXIT_WHILE permet de sortir de la boucle WHILE / END_WHILE. |
REPEAT Groupe d'Instructions UNTIL Condition |
Exécute "Groupe d'Instructions" jusqu'à ce que "Condition" soit Vraie. Une commande EXIT_REPEAT permet de sortir de la boucle REPEAT / UNITL. |
SELECT Expression CASE Valeur Numérique CASE Valeur Numérique - - - - END_SELECT |
Exécute "Groupe d'Instructions" après le CASE dont la Valeur Numérique correspond au résultat de l'évaluation de Expression. |
EXIT_FOR | dans une boucle FOR/NEXT, va exécuter l'instruction juste après NEXT |
EXIT_REPEAT | dans une boucle REPEAT/UNTIL, va exécuter l'instruction juste après UNTIL |
EXIT_WHILE | dans une boucle WHILE/END_WHILE, va exécuter l'instruction juste après END_WHILE |
LABEL NOM | Déclaration d'un label (un label est un point du programme qui reçoit un nom, c'est soit le début d'un sous-programme ou simplement un point à atteindre par un GOTO). |
NOM: | Label (nom donné à un point du programme) |
GOTO NOM | Exécute la partie du programme qui commence par le label NOM |
GOSUB NOM | Exécute le sous-programme qui commence par le label NOM |
RETURN | Fin de sous-programme |
Le sous-programme ABC est appelé par son nom:
ABC()
Il est défini par SUB :
SUB ABC
instructions
END_SUB
On peut lui passer un ou plusieurs paramètres:
IMPRIME(2)
SUB IMPRIME(V)
PRINT V
END_SUB
Il est possible par DIM_LOCAL de définir des variables localisées à un sous-programme
SUB ABC(P1,P2, ...) |
Commence le sous-programme ABC avec les paramètres P1, P2, ... |
END_SUB |
Termine un sous-programme. |
EXIT_SUB |
Termine un sous-programme sans exécuter END_SUB. |
DIM_LOCAL |
Définit une ou plusieurs variables à l'intérieur d'un sous-programme. |
La fonction ABC est utilisée dans une expression:
A = 2 * ABC(6)
Elle est défini par FNC
et retourne une valeur par RESULT :
FNC ABC(X)
instructions
RESULT 5 * X
END_FNC
Il est possible par DIM_LOCAL de définir des variables localisées à une fonction
FNC ABC(P1,P2, ...) |
Commence la fonction ABC avec les paramètres P1, P2, ... |
END_FNC |
Termine une fonction. |
EXIT_FNC |
Termine une fonction sans exécuter END_FNC. |
RESULT |
Retourne la valeur de la fonction. |
DIM_LOCAL |
Définit une ou plusieurs variables à l'intérieur d'une fonction |
REM ou ' (apostrophe) | Introduit un commentaire dans le programme (ne fait rien) |
END | Termine le programme principal qui s'arrête et se met en attente des événements |
STOP | Arrêt de l'exécution du programme. Affiche le numéro de la ligne source |
TERMINATE | Le programme s'arrête, libère la mémoire: tout disparaît |
: | Sépare des instructions sur la même ligne |
Ces variables système sont prédéterminées (pas besoin de les définir).
TIME$ | Retourne l'heure actuelle. |
DATE$ | Retourne la date actuelle. |
DATE_YEAR | Retourne l'année actuelle. |
DATE_MONTH | Retourne le mois actuel. |
DATE_DAY | Retourne le jour actuel. |
TIME_HOUR | Retourne l'heure actuelle. |
TIME_MINUTE | Retourne la minute actuelle. |
TIME_SECOND | Retourne la seconde actuelle. |
WAIT N | Pause de N millisecondes (0 < =N < =30000). Le programme est arrêté jusqu'à ce que le temps soit écoulé. Aucun événement n'est pris en compte. |
PAUSE N | Pause de N millisecondes (0 < =N < =30000). Le programme est arrêté jusqu'à ce que le temps soit écoulé. Cependant, tous les traitements en attente (événements) sont effectués. |
DISPLAY | Met à jour et visualise une scène 3D ou une représentation 2D puis reprend l'exécution du programme. |
BEEP | Emet un son bref. |
BEEP_ERROR | Emet le son système d'une erreur. |
BEEP_EXCLAMATION | Emet le son système d'une exclamation. |
BEEP_INFORMATION | Emet le son système d'une information. |
BEEP_QUESTION | Emet le son système d'une question. |
3.9 - Données à l'intérieur du programme
DATA 10, 34, 71 | Valeurs définies dans le fichier source |
READ a | Lire une valeur dans une ligne DATA |
RESTORE | Force la lecture des données à la première valeur DATA |
RESTORE_LABEL | Force la lecture des données (DATA) à partir du label L. |
3.10 - Données entrées au clavier
INPUT V | La variable V est affectée avec ce qui a été tapé au clavier, lors de l'appui sur ENTER. |
INKEY$ | Lecture d'un caractère en cours de frappe au clavier, puis continue l'exécution. |
La commande INPUT a des options:
INPUT_MARK_ON | Affiche un point d'interrogation lors d'une commande INPUT. |
INPUT_MARK_OFF | N'affiche pas de point d'interrogation lors d'une commande INPUT. |
INPUT_REDO_ON | Exécute à nouveau la commande INPUT si aucune valeur lue. |
INPUT_REDO_OFF | Ne ré-exécute pas la commande INPUT si aucune valeur lue. |
INPUT_VISIBLE_ON | Affiche les caractères saisis lors d'une commande INPUT. |
INPUT_VISIBLE_OFF | N'affiche pas les caractères saisis lors d'une commande INPUT. |
Par défaut, le comportement de la commande INPUT est:
- INPUT_REDO_OFF: si aucune valeur
n'est rentrée (seulement la touche RETURN), il n'y a pas de nouvelle demande
et la variable contiendra:
0 si c'est une variable numérique,
la chaine vide ("") si c'est une variable string.
- INPUT_MARK_OFF: il n'y a pas d'affichage de point
d'interrogation
- INPUT_VISIBLE_ON: il y a affichage des caractères
saisis
- C'est le PRINT classique du BASIC
pour afficher sur un objet système un texte ou la valeur d'une expression.
PRINT V peut être utilisé, PRINT
"Salut" peut être utilisé.
- Le point-virgule ";" peut être utilisé pour accoler
les impressions. Exemple: PRINT "NOMBRE ="; N
- Par défaut, print s'effectue sur FORM
numéro 0, mais un autre objet peut être désigné comme
cible pour l'impression par PRINT_TARGET_IS.
- Il est possible d'imprimer dans un objet système à un endroit
déterminé en X et Y par PRINT_LOCATE.
Va à la ligne suivante (imprime une ligne vide). | |
PRINT variable ou expression | Imprime le résultat sur l'écran ou dans l'objet cible. |
PRINT_LOCATE X, Y | Définit l'endroit du prochain PRINT en X et Y. |
PRINT_X_LOCATE X | Définit l'endroit du prochain PRINT en X. |
PRINT_Y_LOCATE Y | Définit l'endroit du prochain PRINT en Y. |
NUMBER_VARIABLES | Retourne le nombre de variables créées et prédéfinies. |
VARIABLE(T) | Retourne 1 si le string T représente une variable déclarée, 0 sinon. |
LABEL(T) | Retourne 1 si le string T représente un LABEL existant, 0 sinon. |
3.13 – Numéro de ligne courante
NUMBER_CURRENT_LINE | Retourne le numéro de la ligne courante. |
Dernière mise à jour: 25 juin 2018