Utilisation de DISLIN avec FBCroco

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 :

Le fichier se trouve dans le dossier FBCroco.

Programmes exemples

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 (?)

Remarques sur la programmation avec DISLIN

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 :

  1. La directive #INCLUDE "dislin_d.bi" doit figurer en début de programme.

  2. Toutes les variables chaînes de caractères doivent être initialisées, si nécessaire avec des espaces (voir la variable cbuf).

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

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

Passage de fonctions en paramètres

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 :

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.

Installation complète de DISLIN

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 :

  1. Allez sur www.dislin.de, dans la section « Downloads », puis « Distributions » et « Windows 32-bit », et choisissez la version pour FreeBASIC.

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

Documentation

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