Obligement - L'Amiga au maximum

Mardi 12 décembre 2017 - 07:23  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : Amiga E - AmigaGuide
(Article écrit par Pierre Girard et extrait d'Amiga News - juillet/août 1996)


Salut, c'est encore moi. Ce mois-ci, nous allons étudier d'un peu plus près le format AmigaGuide. Nous utiliserons comme support un petit programme qui permet de consulter plusieurs documents grâce à une interface AmigaGuide que nous créerons (c'est clair, non ?). Qui ne connaît pas le format AmigaGuide. Quasiment toutes les documentations issues du domaine public sont dans ce format qui a des avantages certains sur les fichiers ASCII.

Un document AmigaGuide est un ensemble de documents contenu dans un seul fichier. Chaque document peut être en relation avec les autres grâce à des liens. Un document peut comporter n'importe quel nombre de liens pointant sur autant de documents. Quand l'utilisateur clique sur un lien (matérialisé en général par un bouton), le document sur lequel pointe le lien est affiché. C'est ce que l'on appelle l'hypertexte. L'utilisateur a donc l'avantage de pouvoir consulter la documentation dans le sens qu'il veut, sans avoir à faire défiler tout le corps du texte.

Structure du fichier

La structure d'un fichier AmigaGuide est un peu compliquée et c'est pour cela que sont apparus divers utilitaires permettant de réaliser simplement des documentations (comme par exemple AGW ou la création automatique d'aides dans MUIBuilder).

Tout document AmigaGuide doit absolument commencer par @database suivi du nom de la nouvelle base. Ensuite, il faut définir un noeud principal avec @node MAIN "nom" qui prend fin avec @endnode. La structure principale étant définie, il ne reste plus qu'à définir les différents noeuds et les liens qui vont avec. Les noeuds se définissent facilement, comme le noeud principal (mais sans le MAIN). Par contre, les liens sont un peu plus compliqués à réaliser. Un lien commence par @{ suivi du nom affecté au lien et de la commande à exécuter puis finit par }.

Les commandes d'action

Elle peuvent être assignées à un lien. Il en existe deux incontournables : "link" et "system". "Link" établit un lien avec un noeud. Ainsi, si l'on écrit @{"Sommaire" link sommaire}, le fait de cliquer sur "sommaire" affichera le texte inclu dans le noeud "@node Sommaire".

La commande "system" permet d'exécuter une commande AmigaDOS, ce qui sera bien utile pour notre programme. On peut par exemple écrire @{"Liste des fichiers" system c:list}. Je ne ferai pas un inventaire exhaustif de toutes les commandes d'action. Sachez cependant qu'il existe des commandes pour exécuter des macros ARexx, pour ouvrir un noeud dans une nouvelle fenêtre ou encore pour quitter le document AmigaGuide en cours.

Les autres commandes

Elles n'ont pas forcément de rapport avec les liens mais peuvent conditionner la mise en page, la police de caractères... On peut en souligner quelques-unes, comme par exemple @INDEX <nom/ noeud> qui spécifie le nom du noeud à appeler quand l'utilisateur clique sur le bouton INDEX. @FONT <nom> <taille> spécifie la police de caractères à utiliser, ainsi que sa taille, alors que @macro <nom> <commandes> définit une macro-commande qui sera utilisable à tout moment en appelant son nom.

Le programme

Si vous programmez (la preuve !) ou si vous possédez beaucoup de documentations sur votre disque dur de 600 Go, ce petit utilitaire nommé GuideBrowser est fait pour vous ! Il permet de feuilleter tous les textes ASCII ou AmigaGuide d'un répertoire donné. Par exemple, vous avez un répertoire plein de docs, et vous l'avez assigné en "docs:". Il vous suffit de taper GuideBrowser docs: (ou sans argument, car docs: est le répertoire par défaut) pour que tous vos documents apparaissent sous la forme d'un fichier AmigaGuide qu'il ne vous reste plus qu'à explorer ! Pour une fois (bon, disons deux ou trois) qu'un programme de la rubrique Amiga E est utile, profitez-en !

Alors, comment ça marche ? C'est enfantin. Il suffit d'appliquer la méthode expliquée plus haut en créant un fichier AmigaGuide qui sera affiché via Multiview (ou AmigaGuide). Je ne ferai pas beaucoup de commentaires sur le programme lui-même, car pour une fois, le programme est détaillé et commenté. Cependant, voici quelques remarques. Faites bien attention en recopiant (ou si vous changez quelque chose dans la procédure makeguide) de bien compter le nombre de caractères et de modifier le Write() en conséquence.

Il est aussi possible de remplacer les Write(handle,10,1) par des Out(handle,10).

DEF flen,mem,handle=NIL,marque,i=0
DEF dir[120]:STRING
DEF command[120]:STRING

ENUM ER_MEM,ER_USAGE,ER_READ,ER_FILE

PROC makeguide()
IF (handle:=Open('t:GuideDOC.guide',NEWFILE))=NIL THEN Raise(ER_FILE)
-> initialisation de la database
Write(handle,'@database GuideBrowser',22)
Write(handle,10,1)  -> linefeed
-> noeud principal
Write(handle,'@node main "GuideBrowser"',25)
Write(handle,10,1)  -> linefeed
Write(handle,10,1)  -> linefeed
    REPEAT                      -> création du guide
    Write(handle,'a{"',3)   -> début d'un nouveau bouton
        REPEAT                  -> on copie le nom du fichier
        Out(handle,mem[i])
        i++
        UNTIL mem[i]=10 -> jusqu'au prochain linefeed
    i++
-> on insère la commande à appeler + nom répertoire + nom fichier
    Write(handle,'" system "dh0:system/multiview ',31)
    Write(handle,dir,StrLen(dir))
    Write (handle, MidStr (handle, mem, marque, i-marque), (i-marque)-1)
    Write(handle,'"}',2)        -> fin du bouton
    Write(handle,10,1)  -> linefeed
    marque:=i
    UNTIL i>=flen               -> on recommence -> fin du fichier
Write(handle,'@endnode',8)  -> fin du noeud
Write(handle,10,1)  -> linefeed
Close(handle)                   -> on ferme le fichier
ENDPROC

PROC main() HANDLE
IF StrCmp(arg,'',1) THEN dir:='docs:' ELSE IF StrCmp(arg,'?',2) THEN Raise(ER_USAGE) ELSE dir:=arg
-> création de la commande à exécuter
StrCopy(command,'LIST >t:GuideBrowser.temp ',ALL)
StrAdd(command,dir,ALL)
StrAdd(command,' QUICK FILES NOHEAD',ALL)
Execute(command,NIL,NIL)    -> on exécute
flen:=FileLength('t:Guidebrowser.temp')
IF (handle:=Open('t:Guidebrowser.temp',OLDFILE))=NIL THEN Raise(ER_READ)
mem:=New(flen+4)                            -> réservation mémoire
IF mem=NIL THEN Raise(ER_MEM)   -> erreur mémoire ?
IF Read(handle,mem,flen)<>flen THEN Raise(ER_READ)
IF handle THEN Close(handle)    -> on ferme le fichier
handle:=NIL                                     -> réinitialisation de handle

makeguide()                         -> on appelle la procédure de création
Execute('Multiview t:GuideDoc.guide',NIL,NIL) -> visualisation 
Dispose(mem)                        -> on récupère la mémoire

EXCEPT                                              -> GESTION DES ERREURS
IF mem THEN Dispose(mem)            -> on rend la mémoire ?
IF handle THEN Close(handle)        -> on ferme le fichier ?
    SELECT exception
        CASE ER_MEM;    WriteF('Pas assez de mémoire!\\n')
        CASE ER_USAGE;  WriteF('USAGE: GuideBrowser {dir} \\n')
        CASE ER_READ;   WriteF('Erreur de lecture !\\n')
        CASE ER_FILE;   WriteF('Erreur d''écriture !\\n')
    ENDSELECT
ENDPROC
@ENDNODE


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]