découverte OPL

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

découverte OPL

Message par tyann »

Bonjour à tous

Après 2 semaines d'utilisation de mon psion série 3a,
j'ai décidé de vous faire un petit topo sur son langage de programmation
appelé OPL, pour voir un peu ce qu'il offre par rapport aux calculatrices modernes.

Certes ce n'est pas le même genre de machine, mais il y a quand même quelques similitudes,
et puis on aurait pu avoir,(cela a peut-être même existé) une application calculatrice
graphique.

Datant des années 90, voyons déja les données techniques:
processeur 16 bits à 7,68 Mhz, 1 Mo de Ram extensible, résolution de 480x160 pixels
avec 1 niveau de gris et capacités sonores.

Déjà là on s'aperçoit que la bête est loin d'être dépassée.

Maintenant un petit test de vitesse:
une boucle exécutée 10 000 fois:
premier essai: 15 secondes
deuxième essai: 4 secondes
Plutôt rapide non ?
Qu'est-ce que cela signifie ? la suite au prochaine épisode.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: découverte OPL

Message par tyann »

Bonjour à tous

OPL est un langage procédural, si si j'ai lu cela quelque part.
Un programme (module dans la doc) est constitué d'une ou plusieurs
procédures.
Après avoir écrit un programme et avant de l'exécuter on doit le transcoder,
OPL est un langage semi-compilé toujours selon la doc.
C'est la première procédure du listing qui est exécutée, les procédures peuvent
s'appeler les unes les autres.
Les procédures peuvent recevoir des paramètres et retourner une seule valeur.
On peut déclarer des variables locales à la procédure ou globales au module.
Ces variables sont typées : entiers%,entiers longs&, flottants pour les numériques,
string$ pour les chaînes.
Un paramètre doit respecter le type de la variable qui l'accueille, si une
procédure renvoie un résultat, elle doit être typée comme la valeur renvoyée:

On doit préciser le nombre de caractères d'une variables chaîne (255 maxi) et on peut
créer des tableaux (1 seule dimension).
On ne peut pas transmettre directement un tableau comme paramètre.

quelques exemples:
local a%,b&(10),s$(5),st$(10,8)

Code : Tout sélectionner

PROC main:
 local a&
 input a&
 print pui3&:(a&)
 get
endp

PROC pui3&:(n&)
 return n&*n&*n&
ENDP
Pour clore ce chapitre sachez que l'on peut appeler une procédure indirectement:

a$="pui3", puis @&(a$):(n&) par exemple
et qu'il est possible depuis un module d'appeler une procédure d'un autre module.

Ah oui dans le premier post la boucle a été exécutée avec une variable de type flottant,
puis avec une variable de type entier.

A+
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: découverte OPL

Message par tyann »

Bonsoir à tous
OPL est un langage structuré, voyons ce qu'il offre:
pour les boucles vous disposez de

WHILE condition
ENDW
et de
DO
UNTIL condition

BREAK permet de sortir d'une de ces boucles à tout moment
CONTINUE de faire une nouvelle itération en ignorant les instructions
suivantes.

Aussi surprenant que cela puisse paraître, OPL ne connait pas les
boucles FOR...NEXT.
Cela rend la vitesse d'exécution de la boucle du post 1 encore plus remarquable
boucle du genre:

Code : Tout sélectionner

LOCAL i%
DO
i%=i%+1
UNTIL i%>10000
J'ai fait un essai sur Ti83+ et Voyage 200, ce genre de boucle est plus lente
qu'une boucle:

Code : Tout sélectionner

FOR i,1,10000
ENDFOR
Pour les tests vous avez droit à:
IF condition.
instructions
ELSE
instructions
ENDIF
et ELSEIF pour les tests multicritères.
le THEN est tout simplement inconnu.

OPL n'a pas de n° de lignes, cependant il autorise le branchement
inconditionnel:
LABEL:: et GOTO LALBEL::
Vous avez droit également au branchement conditionnel avec:
VECTOR var%
label1,label2,label ...
ENDV
équivalent au ON var GOTO label1,label2,label... du Basic.

Enfin OPL sait traiter les erreurs:
TRAP instruction, ne stoppera pas le programme si instruction déclenche une erreur;
ERR et ERR$ vous permettront de connaitre le n° d'erreur et le message associé.
ONERR label:: effectuera un branchement vers label pour toute instruction placée
avant ONERR OFF qui déclenchera une erreur.
RAISE n° permet de simuler une erreur.

Voilà pour ce soir.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
Woodstock
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1969
Enregistré le : 17 mai 2008 11:19
Localisation : Au fin fond du Santerre ...

Re: découverte OPL

Message par Woodstock »

Intéressant, çà... C'est une version bien évoluée de l'OPL des Psion II, mais (semble-t'il) conservant les mêmes ordres de base. Qu'en est-il des commandes graphiques ?
I'm the operator
Of my pocket calculator
I am adding
And substracting...
(Kraftwerk, Computer World, 1981)
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: découverte OPL

Message par tyann »

Bonjour à tous
Qu'en est-il des commandes graphiques ?
Je vais bientôt y venir, mais je peux déjà te dire que c'est assez riche et qu'il y a une petite
particularité. :wink:
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5256
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: découverte OPL

Message par bernouilli92 »

J'ai fait jadis un peu d'OPL sur un psion 3c. C'est vrai que les possibilités sont très vastes, le langage est riche et assez facile à maîtriser, cela ressemble à du pascal.
La seule chose qui m'embêtait c'est qu'il n'y avait pas de police à chasse fixe sur le psion lui même.
Les psion serie3 sont de très bonnes machines qui mériteraient qu'on s'y intéresse plus. D'autant qu'elles sont bon marché.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Okinawok
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 401
Enregistré le : 12 avr. 2011 15:07

Re: découverte OPL

Message par Okinawok »

bernouilli92 a écrit : Les psion serie3 sont de très bonnes machines qui mériteraient qu'on s'y intéresse plus. D'autant qu'elles sont bon marché.
Complètement d'accord !
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: découverte OPL

Message par tyann »

Bonjour à tous
Les psion serie3 sont de très bonnes machines qui mériteraient qu'on s'y intéresse plus. D'autant qu'elles sont bon marché.

Complètement d'accord !
+1.

Voyons un peu maintenant ce que l'on peut faire en entrée/sortie:
En mode texte, on a droit aux classiques PRINT, INPUT et AT pour positionner
ces derniers à l'écran, FONT permet de choisir une fonte et un style pour PRINT.

Passons maintenant aux choses sérieuses avec le graphisme:
OPL gère un pointeur que l'on peut modifier avec gAT en coordonnés absolues,
ou gMOVE en relatif.
Ainsi pour tracé une ligne du point 10,10 au point 50,10.
on peut écrire:
gAT 10,10 :gLINETO 50,10
après ces deux instructions la position du pointeur sera 10,10.
Initialement le pointeur est à 0,0 on peut donc écrire aussi:
gMOVE 10,10 :gLINEBY 40,0 REM qui est ici la version relative de gLINETO

On peut bien sur marier les deux et écrire:
gAT 10,10 :gLINEBY 40,0

On a toujours cette notion de pointeur que les instructions de tracé graphique
ne modifient pas.

Il n y a pas d'instructions spécifiques aux pixels, pour allumer un point
on positionne le pointeur, puis on utilise gLINEBY 0,0 et on ne peut tester
si un point est allumé ou non.

Pour un rectangle:
gAT ou gMOVE x,y :gBOX longueur x,hauteur y

gFILL w,h,m permet de tracé un rectangle plein, m est un mode de tracé :
allumer,éteindre ou inverser.
gMODE permet d'appliquer ce mode de tracé à gLINEXX et gBOX.
On a lde droit à gINVERT qui est une forme pariculère de gBOX.
Parmi les regrets pas de gCIRCLE ni de gELLipse pour le série 3.
gPRINT, gFONT, gSTYLE permettent d'afficher du texte de multiples façons.
gTMODE pour définir le mode d'affichage de ces textes.
gGREY permet de gérer le niveau de gris disponible.
gBORDER permet de tracé des recrangles en relief avec coin arrondis, et
gPOLY permet de tracé des polygones en utilisant un tableau pour les coordonnées.

Enfin GET et KEY permettent de faire des programmes interactifs, avec leur pendant
GET$ et KEY$.

Ce n'est pas terminé pour autant, OPL offre aussi un sytème multifenêtrage ainsi que des
menus et des boites de dialogue, je vous détaillerai cela dans un prochain post.
A bientôt
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
Woodstock
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1969
Enregistré le : 17 mai 2008 11:19
Localisation : Au fin fond du Santerre ...

Re: découverte OPL

Message par Woodstock »

Là, je commence à avoir envie d'en trouver un :slime:
Encore !
I'm the operator
Of my pocket calculator
I am adding
And substracting...
(Kraftwerk, Computer World, 1981)
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: découverte OPL

Message par tyann »

Bonjour à tous

OPL nous permet de gérer des fenêtres, sur le série 3 on peut en ouvrir jusque 7 simultanément
en plus de l'écran principal.
On créer la fenêtre avec var%=gCREATE x,y,w,h,v,g : x,y définissent les coordonnées du
coin gauche de la fenêtre à l'écran, w et h les dimensions, v 0 ou 1 pour dire si la fenêtre
est visible de suite ou pas et g pour le niveau de gris ou pas.
var% reçoit le n° d'idenditification (id) de la fenêtre de 2 à 8, 1 est pour l'écran principal.
A partir de là, toutes les fonctions graphiques se rapportent à cette fenêtre, si vous avez plusieurs
fenêtres de créées ou si vous voulez dessiner sur l'écran principal gUSE id permet de changer
la fenêtre active, gCLOSE ferme une fenêtre qui n'est plus utilisée.
gORDER id,pos permet de donner un ordre d'affichage lorsque plusieurs fenêtres se chevauchent
et gRANK renvoie le n° d'ordre de la fenêtre active,
gVISIBLE on ou off permet de montrer ou cacher une fenêtre
gORIGINX(Y) renvoient la position de la fenêtre active, gWIDTH et gHEIGHT pour les dimensions,
gSETWIN x,y,w,h permet de les modifier, gIDENDITY renvoie l'id de la fenêtre active.
gCOPY id,x,y,w,h,m copie dans la fenêtre active la zone définie par x,y,w,h de la fenêtre id
selon le mode graphique m.
gSCROLL dx,dy,x,y,w,h permet de décaler la zone définie par x,y,w,h de la fenêtre active,
dx et dy specifie le sens de décalage selon que ces valeurs soient positives ou négatives.

Voilà pour les fenêtres.

Pour les menus:
mINIT initialise un menu, mCARD "titre","option1",%raccourci clavier,"option2",...
pour un menu à plusieurs titres, on répète mCARD, et enfin MENU affiche le menu
et renvoie l'option choisie en fait le code de caractère du raccourci qui est obligatoire.

dINIT "titre" initialise une boite de dialogue, dEDIT affiche une ligne de saisie, dCHOICE
affiche une liste de choix, dTEXT affiche une ligne de texte, dLONG et dFLOAT permettent de
saisir une valeur numérique en spécifiant les valeurs mini et maxi acceptables, dFILE permet
de choisir un fichier.
Bref c'est assez complet et même assez original, dDATE et dTIME permettent de saisir l'heure
et la date, dXINPUT pour saisir un texte sans afficher les caractères entrés (mot de pass).
Toutes ces fonctions modifient le contenu d'une variable qui leur est associé.
DIALOG affiche la boite et renvoie le n°ligne ou l'on a pressé ENTER et 0 si ESC.

Il y a encore d'autre chose comme gCLOCK pour afficher une horloge, gCREABIT,gSAVEBIT et gLOADBIT
vous permettent de définir une zone graphique à l'écran de la sauvegarder sous forme de fichier
et de la recharger ensuite en mémoire.
Cela permet aussi de créer des icônes pour vos applications.

Il y a aussi apparemment des instructions pour créer et gérer des sprites, mais j'ai pas encore
étudié la question, cela semble fonctionné un peu comme les fenêtres, création,affichage, déplacement
et fermeture.
J'ai cru comprendre aussi que l'on pouvait geler le rafraîchissement de l'écran pour accélérer les tracés
graphiques.

Voilà il y a donc vraiment de quoi s'amuser, ah j'allais oublier il y a une instruction BEEP bien sur
.
Dans le prochain post je vous parlerai de la gestion de fichier très complète également.
A+.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5643
Enregistré le : 26 mars 2009 13:07
Localisation : Ile de France
Contact :

Re: découverte OPL

Message par ledudu »

Juste pour signaler que je suis un lecteur assidu de ta présentation progressive de l'OPL. :D
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: découverte OPL

Message par Marge »

+1
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: découverte OPL

Message par tyann »

Encore !
,
je suis un lecteur assidu de ta présentation progressive de l'OPL. :D
,
+1
Merci beaucoup , ça fait plaisir :D
le but de ces petits posts n'étant que de partager ma passion pour ces petites machines et leurs possibilités ainsi
que pour ce drôle de loisir qu'est la programmation. :slime:
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5643
Enregistré le : 26 mars 2009 13:07
Localisation : Ile de France
Contact :

Re: découverte OPL

Message par ledudu »

As-tu songé à une mise en oeuvre de tout ça dans un projet de programmation ?
On pourrait se répartir des modules qui, assemblés, feraient quelque chose de sympa avec du calcul et du graphisme.
:slime:
EDIT : quelque chose de simple pour commencer
Modifié en dernier par ledudu le 29 mars 2014 14:36, modifié 1 fois.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: découverte OPL

Message par Marge »

J'avais aussi pensé à reprendre tout cela dans la gazette avec quelques illustrations... si l'auteur est d'accord bien entendu : qui veut s'y coller ? :D

(IF NOBODY THEN REDCHEF)
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Répondre

Retourner vers « Tous les Pockets »