Documentation PANORAMIC

Le langage de référence



1 – Généralités du langage

1.1 – Vocabulaire
1.2 – Règles d’utilisation

1.2.1 – Numérotation
1.2.2 – Commandes
1.2.3 – Parenthèses
1.2.4 – Commandes et numéro d’objet
1.2.5 – Fonctions et numéro d’un objet
1.2.6 – Cible des commandes de dessin 2D

1.3 – Variables
1.4 – Tableaux de variables

2 – Fonctions du langage BASIC

2.1 – Fonctions mathématiques
2.2 – Fonctions Logiques
2.3 – Fonctions String
2.4 – Conversions string / nombre
2.5 – Fonctions logiques binaires
2.6 – Ecran
2.7 – Lecture et écriture en mémoire
2.8 – Séparateur décimal pour les nombres réels

3 – Commandes du langage BASIC

3.1 – Structures
3.2 – Label / Goto / Gosub
3.3 – Sous-programmes
3.4 – Fonctions
3.5 – Commentaires
3.6 – Fin de l’exécution
3.7 – Heure et Date
3.8 – Commandes système
3.9 – Données à l’intérieur du programme
3.10 – Données entrées au clavier
3.11 – Impression : Print
3.12 – Variables and labels
3.13 – Numéro de ligne courante



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.

Haut de page

1 – Généralités du langage


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.

Le point « . » 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.

Haut de page

1.1 – Vocabulaire

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_THORUS, 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.

Haut de page

1.2 – Règles d’utilisation

1.2.1 – Numérotation

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.

Haut de page

1.2.2 – Commandes

Les commandes sont regroupées par famille.

Exemple :

  • Chaque commande sur un objet 3D commence par 3D : 3D_X_POSITION, 3D_Z_POSITION, …
  • 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, …

Haut de page

1.2.3 – Parenthèses

Une fonction a des parenthèses : SIN(x), WIDTH(N)

Une commande n’a aucune parenthèse.

Haut de page

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.

Haut de page

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.

Haut de page

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 ».

Haut de page

1.3 – Variables

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.

Haut de page

1.4 – Tableaux de variables

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$

Haut de page


2 – Fonctions du BASIC


2.1 – Mathematical functions

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.

Haut de page

2.2 – Fonctions logiques

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 ».

 Exemple :
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

Haut de page

2.3 – Fonctions string

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.

Haut de page

2.4 – Conversions strings / nombre

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

Haut de page

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

Haut de page

2.6 – Ecran

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.

Haut de page

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.

Haut de page

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.

Haut de page



3 – Commandes du langage BASIC


3.1 – Structures

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 V = Expression1 TO Expression2
    Groupe d’Instructions
NEXT V
Exécute « Groupe d’Instructions » pour V 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
        Groupe d’Instructions
    CASE Valeur Numérique
        Groupe d’Instructions
    – – – –
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.

Haut de page

3.2 – Label / Goto / Gosub

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.

Haut de page

3.3 – Sous-programmes

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.

Haut de page

3.4 – Fonctions

La fonction ABC est utilisée dans une expression :

A = 2 * ABC(6)


Elle est définie 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.

Haut de page

3.5 – Comment

REM ou (apostrophe) Introduit un commentaire dans le programme (ne fait rien).

Haut de page

3.6 – Fin de l’exécution

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.

Haut de page

3.7 – Date et Heure

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.

Haut de page

3.8 – Commandes Système

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.

Haut de page

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.

Haut de page

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.

Haut de page

3.11 – Impression

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.

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

Haut de page

3.12 – Variables and labels

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.

Haut de page

3.13 – Numéro de ligne courante

NUMBER_CURRENT_LINE Retourne le numéro de la ligne courante.

Haut de page



Contenu créé par Jack. Mise à jour le 06 mars 2025