Apres l'installation, il est
temps de programmer notre premier utilitaire avec Dice. La version
enregistrée ayant beaucoup trops d'options pour utiliser les
Alias comme pour la version FreeWare, nous allons donc créer
un programme de configuration ... Il faut ce rappeler que DCC prend
ces options aussi bien dans la ligne de commande que dans DCCOPTS.
Attention : Il s'agit d'une variable de type COMMODORE ( donc
stockée dans ENV: ), en opposition aux variables ARP
utilisées par CSH.
Notre programme vas remplir cette variable
en fonction de l'exécutable que nous voulons créer.
Taper le listing de DiceConfig et compiller avec :
Dcc -2.0 -ms -// -r DiceConfig.c -o DiceConfig
DiceConfig a besoin d'un fichier de configuration nommé DiceConfig.cfg
|
La première ligne
contient toutes les options toujours présentes ( -2.0
pour
l'utilisation des includes et bibliothèques du 2.0, ... ).
Les lignes suivantes indiquent, par groupes de 2, les librairies que
l'on peut linker :
#define DEBUG
pour une compilation
conditionnelle. Nous y reviendrons par la suite ( Toujours des
promesses ... ).
Regardons un peut le code.
D'abord., on
peut voir que les messages peuvent être en français en
mettant la variables Lang
à 'Français'. Je préfère.
cette solution à la locale.library qui n'est pas compatible
avec le 1.3 ( de toutes façon, je n'ai pas les docs ... ).
Il contient aussi quelques particularité de Dice :
Grâce. à
l'option -r, notre exécutable. peut être mis
résident.
Voila une bonne occasion pour ce pencher sur les programmes Pure...
Un programme pure est un
programme qui peut être mis résident. Cette possibilité
est apparue avec le WB 1.3 pour les utilisateurs du shell standard
et depuis beaucoup plus longtemps pour ceux qui préfèrent
les Shells utilisant l'Arp.library ( Csh, Ashell, ... ). Une fois de
plus, grâce à Commodore, les deux résidents ne
sont pas compatibles !! ( mais ils peuvent quand même
cohabiter comme nous avons pu le voir dans le premier épisode
). Pour résumer, la table Commodore est gérée
par 'Res1.3' alors que la table Arp est gérée par
'resident' (le résident. du shell).Or Dcc se trouve dans
l'Arp (pour être accessible depuis le Shell) et ne gère
que la table Commodore où doit donc ce trouver Dc1, Das, Dlink
. Les dernières versions de CSH ( V5.19 par exemple )
permettent d'utiliser aussi la tables Commodore mais ce n'est pas
encore parfait ( & ça ne marche pas sous 2.0 ). Une autre
différence, l'Arp reteste l'intégrité de la
commande à chaque fois qu'il l'éxécute, mais
pas Commodore. Essayez. de rendre résident une commande
non-pure dans le shell du 1.3. La première exécution
passe ... la seconde casse !! Csh nous aurais indiqué que la
commande a été altéré.
Quelles différences y a-t-il entre un programme ordinaire et une
commande pure ?
Un programme normal peut modifier ,comme il le veut,
ces variables, voir son propre code, car à chaque nouvelle
exécution, tous sera rechargé depuis le disque; Pour
un programme résident, ceci n'est plus possible car le même
segment mémoire est utilisé à chaque fois.
Prenons le programme suivant :
|
-r
à la ligne de commande et le tour est joué
... Presque, car si le programme comporte des données en
chips, elles doivent obligatoirement être constantes. Enfin,
Dice permet de partager des variables entre plusieurs taches d'un
même programme s'il est résident, avec l'attribut
__shared mais ca ne marche pas avec les shells Arp ( CheckSum
modifier ).
Bon, c'est fini pour aujourd'hui. La prochaine fois les librairies partageables ...