Obligement - L'Amiga au maximum

Vendredi 17 mai 2024 - 11:49  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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 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 @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]