PANORAMIC: MANUEL UTILISATEUR

POUR LA VERSION 0.9.28

PARTIE 1 - LE LANGAGE DE REFERENCE


1 - GÉNÉRALITÉS DU LANGAGE

2 - FONCTIONS DU BASIC

3 - COMMANDES DU BASIC


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.
"." 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_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.

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

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 - Fonctions mathématiques

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

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 string/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 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 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
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é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

Haut de page

3.5 - Commentaire

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

Haut de page

3.6 - Arrêt 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 : PRINT

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


Dernière mise à jour: 25 juin 2018