La bibliothèque DISLIN permet de représenter graphiquement toutes sortes de données.
Une version simplifiée de cette bibliothèque, limitée aux fichiers essentiels, permet son utilisation par FBCroco.
Pour l'installer il suffit de décompacter l'archive dislin_addon.zip
dans le répertoire d'installation de FBCroco (par défaut C:\FBCroco
).
L'archive est disponible sur notre WebDav :
panoramic@jean_debord
panoramic123
Le fichier se trouve dans le dossier FBCroco
.
Tous les exemples fournis avec DISLIN ont été adaptés pour FBCroco et figurent dans cette distribution, à l'exception du programme widgets.bas
(démonstration des widgets de DISLIN) puisque FBCroco utilise les widgets FLTK.
Les exemples se trouvent dans le sous-répertoire exemples\dislin
qui contient aussi la DLL dislnc_d.dll
(compactée avec UPX). La DLL ne semble être reconnue que si elle figure dans le même répertoire que le programme (?)
Prenons l'exemple du programme bars.bas
:
#INCLUDE "dislin_d.bi"
DIM nya% = 2700
DIM x(8), y(8), y1(8), y2(8), y3(8)
DIM i%, ctit$, cbuf$
cbuf = space$(80)
DATA 1., 2., 3., 4., 5., 6., 7., 8., 9.
FOR i = 0 TO 8
READ x(i)
NEXT i
DATA 1., 1.5, 2.5, 1.3, 2.0, 1.2, 0.7, 1.4, 1.1
FOR i = 0 TO 8
READ y1(i)
NEXT i
DATA 2., 2.7, 3.5, 2.1, 3.2, 1.9, 2.0, 2.3, 1.8
FOR i = 0 TO 8
READ y2(i)
NEXT i
DATA 4., 3.5, 4.5, 3.7, 4., 2.9, 3.0, 3.2, 2.6
FOR i = 0 TO 8
READ y3(i)
NEXT i
ctit = "Bar Graphs (BARS)"
Dislin.setpag ("da4p")
Dislin.scrmod ("revers")
Dislin.metafl ("cons")
Dislin.disini ()
Dislin.pagera ()
Dislin.complx ()
Dislin.ticks (1, "x")
Dislin.intax ()
Dislin.axslen (1600, 700)
Dislin.titlin (ctit, 3)
Dislin.legini (cbuf, 3, 8)
Dislin.leglin (cbuf, "FIRST", 1)
Dislin.leglin (cbuf, "SECOND", 2)
Dislin.leglin (cbuf, "THIRD", 3)
Dislin.legtit (" ")
Dislin.shdpat (5)
FOR i = 1 TO 3
IF i > 1 THEN
Dislin.labels ("none","x")
END IF
Dislin.axspos (300, nya-(i-1)*800)
Dislin.graf (0., 10., 0., 1., 0., 5., 0., 1.)
IF i = 1 THEN
Dislin.bargrp (3, 0.15)
Dislin.color ("red")
Dislin.bars (t1adr(x), t1adr(y), t1adr(y1), 9)
Dislin.color ("green")
Dislin.bars (t1adr(x), t1adr(y), t1adr(y2), 9)
Dislin.color ("blue")
Dislin.bars (t1adr(x), t1adr(y), t1adr(y3), 9)
Dislin.color ("fore")
Dislin.reset ("bargrp")
ELSEIF i = 2 THEN
Dislin.height (30)
Dislin.labels ("delta","bars")
Dislin.labpos ("center","bars")
Dislin.color ("red")
Dislin.bars (t1adr(x), t1adr(y), t1adr(y1), 9)
Dislin.color ("green")
Dislin.bars (t1adr(x), t1adr(y1), t1adr(y2), 9)
Dislin.color ("blue")
Dislin.bars (t1adr(x), t1adr(y2), t1adr(y3), 9)
Dislin.color ("fore")
Dislin.reset ("height")
ELSEIF i = 3 THEN
Dislin.labels ("second", "bars")
Dislin.labpos ("outside", "bars")
Dislin.color ("red")
Dislin.bars (t1adr(x), t1adr(y), t1adr(y1), 9)
Dislin.color ("fore")
END IF
IF i <> 3 THEN
Dislin.legend (cbuf, 7)
END IF
IF i = 3 THEN
Dislin.height (50)
Dislin.title ()
END IF
Dislin.endgrf ()
NEXT i
Dislin.disfin ()
END
Nous pouvons faire les remarques suivantes :
La directive #INCLUDE "dislin_d.bi"
doit figurer en début de programme.
Toutes les variables chaînes de caractères doivent être initialisées, si nécessaire avec des espaces (voir la variable cbuf
).
Toutes les procédures de DISLIN sont appelées avec le préfixe Dislin.
afin d'éviter toute confusion avec celles de FreeBASIC ou de FBCroco. Pour la plupart des procédures il est possible d'omettre ce préfixe en écrivant au début du programme :
using Dislin
Cependant, les procédures qui portent le même nom que des instructions de FreeBASIC, comme color
, devront être préfixées. Il est toutefois possible de les renommer à l'aide d'une directive du préprocesseur, par exemple :
#define dcolor Dislin.color
On pourra alors écrire dcolor
au lieu de Dislin.color
Le fichier curve1.bas
donne un exemple de cette syntaxe.
Le passage des paramètres aux procédures se fait suivant les conventions du langage C ; en particulier, pour les tableaux il faut passer l'adresse du premier élément, à l'aide des fonctions t1adr
ou t2adr
selon que les tableaux ont 1 ou 2 dimensions. Notons que les tableaux commencent toujours à l'indice 0.
Deux procédures de DISLIN, surfcp
et surfun
(tracé de surfaces définies par des fonctions), demandent un paramètre de type fonction ; les déclarations de ces fonctions doivent respecter les modèles suivants :
pour surfcp
:
FUNCTION myfunc CDECL (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE, BYVAL iopt AS INTEGER) AS DOUBLE
pour surfun
:
FUNCTION myfunc CDECL (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS DOUBLE
Cette syntaxe est reconnue par FreeBASIC, mais pas par FBCroco ! Il faut donc écrire ces fonctions avec la syntaxe de FreeBASIC et les placer dans un fichier séparé que l'on inclura dans le programme FBPano avec la directive #INCLUDE
. Le passage du paramètre fonction se fait par fadr(myfunc)
. Le programme surfcp.bas
donne un exemple de cette technique.
La version allégée de la bibliothèque DISLIN fournie dans cet addon est suffisante pour une utilisation avec FBCroco. Cependant pour pouvoir profiter de toutes les fonctionnalités de la bibliothèque il faut installer la version complète :
Allez sur www.dislin.de, dans la section « Downloads », puis « Distributions » et « Windows 32-bit », et choisissez la version pour FreeBASIC.
Extrayez l'archive dans un répertoire temporaire et lancez le programme setup.exe
qui installera le logiciel dans un répertoire donné, par défaut C:\dislin
La documentation des fonctions de DISLIN en HTML est disponible sur le site de DISLIN
Si vous avez installé la version complète, la documentation au format TXT se trouve dans le sous-répertoire man
du répertoire DISLIN (par défaut C:\dislin\man
).