home *** CD-ROM | disk | FTP | other *** search
- .ll 76
- .lt 76
- .pl 66
- .nh
- \" numéro de paragraphe (registre)
- .nr PN 0 1
- \"------------- début de paragraphe
- .de PR
- .nf
- .ne 5
- .fs u1
- \\n+(PN. \\$1
- .fs n
- .fi
-
- ..
- \"------- description d'une requête
- .de RQ
-
- .ne 3
- .ti -4
- \\$1 \\$2
- .br
- Syntaxe\\ \\ \\ \\ \\ :\\ \\$1 \\$3
- .br
- Description\\ :\\ \\
- ..
- .de SP
- .br
- .ti -16
- ..
- \" entête de page
- .de HD
- .ls 2
- .tl "ARoff"Manuel de référence"Page \\n(pn"
- .ls 1
- ..
- \"-------- début de note importante
- .de NI
-
- .ne 4
- .ce
- NOTE IMPORTANTE :
-
- .in 8
- .ll -8
- ..
- \"---------- fin de note importante
- .de FN
-
- .in
- .ll
- ..
- .wh 1 HD
- \"--------------------------- TEXTE
-
- .PR Avertissement
- .ti +8
- Ce manuel décrit la version 1.12 de l'utilitaire ARoff. Ce programme est
- placé dans le domaine public, avec autorisation de le copier librement et
- de le diffuser par n'importe quels moyens, à condition que le produit soit
- diffusé dans son intégralité, et sans aucune modification.
- ARoff est (c)1991 par Denis GOUNELLE, toute utilisation commerciale ou
- vente de ce programme sans autorisation écrite est STRICTEMENT INTERDITE.
- .ti +8
- Malgré de nombreux tests, je ne peux garantir qu'ARoff ne contient aucune
- erreur. VOUS UTILISEZ CE PROGRAMME A VOS RISQUES ET PERILS. Je ne pourrai
- en aucun cas être tenu responsable de tout dommage, direct ou indirect,
- résultant de l'utilisation d'ARoff.
-
- .PR Introduction
- .ti +8
- ARoff est un programme de formatage de texte puissant et complet, avec
- registres, macros, etc... : il prend en entrée un fichier comprenant à
- la fois le texte et les commandes de formatage, et produit en sortie le
- texte mis en page comme vous l'avez demandé.
- .ti +8
- ARoff peut être considéré comme une sorte de portage de l'utilitaire
- "nroff", que l'on trouve habituellement sous système UNIX. Les deux
- programmes sont cependant assez différents, et il y a sûrement beaucoup
- de choses que ARoff ne sait pas faire.
-
- .ti +8
- La syntaxe d'appel de ARoff est la suivante :
-
- .ce
- aroff [-wpile] [-l] <nom de fichier>
-
- <nom de fichier> est le nom du fichier que vous voulez traiter. Si vous
- indiquez "-" comme nom, l'entrée standard sera utilisée.
- .NI
- La version actuelle de ARoff ne peut fonctionner correctement si
- elle est utilisée en sortie de pipe (e.g. "cat toto | aroff -").
- .FN
- .br
- .ti +8
- L'option -w vous permet d'augmenter la taille de la pile de travail
- allouée par ARoff. Par défaut cette taille est de 256 emplacements
- de 8 octets chacun, mais il peut arriver que cela ne suffise pas : vous
- obtiendrez alors un message "Error 2 in file pile.c at line 58". Pour
- faire passer la taille de la pile à 300 emplacements (par exemple),
- appelez ARoff par "aroff -w300 <nom de fichier>".
- .ti +8
- Si vous indiquez l'option -l, le fichier d'entrée sera chargé entièrement
- en mémoire avant d'être traité. Sur Amiga, ceci peut rendre le traitement
- deux à trois fois plus rapide dans certains cas, mais est à déconseiller si
- vous avez peu de mémoire libre.
-
- .ti +8
- Si vous appelez ARoff sans arguments (ou avec des arguments incorrects)
- vous obtiendrez un message indiquant la version du programme et la
- syntaxe à respecter pour les arguments.
-
- .PR Principe\ de\ fonctionnement
- .ti +8
- Comme "nroff", ARoff assemble automatiquement les lignes de texte pour
- obtenir une ligne suffisamment longue. Cela veut dire que votre texte
- est vu comme une suite de mots que ARoff se contente de recopier,
- jusqu'à ce que la taille d'une ligne de sortie soit atteinte, ou que
- vous provoquiez la fin de l'assemblage (soit par une requête, soit par
- une ligne vide). Les requêtes suivantes provoquent automatiquement une
- fin de l'assemblage :
- .nf
- .in 16
-
- bp\tnouvelle page
- br\tnouvelle ligne
- ce\tcentre la(les) ligne(s) suivante(s)
- fi\tactivation du mode "assemblage"
- nf\tdésactivation du mode "assemblage"
- sp\tsaut de ligne
- in\tindentation
- ti\tindentation temporaire
-
- .in
- .fi
- .ti +8
- Une fois cette ligne assemblée, ARoff effectue un ajustement, suivant
- le mode que vous avez indiqué : centrage, justification, cadrage à
- droite ou à gauche. Le résultat constitue une ligne de sortie.
- .ti +8
- Les commandes de formatage (ou requêtes) doivent être indiquées sur
- une ligne à part, commençant par un point. Le nom de la requête suit
- immédiatement, et fait exactement deux caractères. Viennent ensuite les
- arguments éventuels de la requête.
- Pour utiliser une des requêtes ci-dessus sans provoquer de fin
- d'assemblage, utilisez le caractère "quote simple" à la place du
- point (e.g. : "'ti -3" au lieu de ".ti -3").
-
- .PR Liste\ des\ requêtes\ courantes
- .ti +8
- Dans tout ce qui suit, N désigne un entier positif, et ±N désigne soit
- un entier positif (spécification d'une valeur précise), soit le signe
- plus suivi d'un entier positif (spécification d'une incrémentation),
- soit enfin le signe moins suivi d'un entier positif (spécification
- d'une décrémentation).
- .in 8
- .RQ ab ABort message
- affiche le message indiqué, vide le tampon de sortie et termine.
- .RQ ad ADjust [mode]
- change le mode d'ajustement des lignes. Si vous n'indiquez pas
- d'argument, la valeur précédente est reprise. Les valeurs de mode sont :
- .nf
-
- \tl\tcadrage à gauche
- \tr\tcadrage à droite
- \tc\tcentrage
- \tb\tjustification
- .fi
- .RQ bp Begin\ Page [N]
- provoque un saut de page. La page suivante aura le numéro N si
- un argument est indiqué.
- .RQ br BReak
- provoque un saut de ligne. L'assemblage de la ligne courante est
- interrompu, et cette ligne est imprimée sans ajustement.
- .RQ ce CEnter [N]
- centre la ligne suivante, ou les N lignes suivantes si un argument est
- indiqué.
- .RQ ex EXit
- vide le tampon de sortie et termine.
- .RQ fi FIll
- active l'assemblage des lignes.
- .RQ fs Font\ Style style
- modifie le style des caractères. La chaine "style" est une combinaison
- quelconque des spécifications suivantes :
-
- .nf
- \tb0\tfin de caractères gras
- \tb1\tdébut de caractères gras
- \ti0\tfin de caractères italiques
- \ti1\tdébut de caractères italiques
- \tu0\tfin de caractères soulignés
- \tu1\tdébut de caractères soulignés
- \tn\tretour aux caractères normaux
- .fi
- .RQ in INdent [±N]
- change la marge gauche. Sans argument, la valeur précédente est reprise.
- .RQ ll Line\ Length [±N]
- change la longueur des lignes de sortie (indentation comprise). Sans argument,
- la valeur précédente est reprise.
- .RQ ls Line\ Spacing [±N]
- change l'espacement des lignes de sortie. Sans argument, la valeur
- précédente est reprise.
- .RQ lt Title\ Length [±N]
- change la longueur du titre (voir requête "tl"). Sans argument, la valeur
- précédente est reprise.
- .RQ na No\ Adjusting
- désactive l'ajustement des lignes en sortie.
- .RQ ne NEed [N]
- provoque un saut de page s'il reste moins de N lignes (1 si aucun
- argument n'est indiqué) avant la fin de la page ou la prochaine
- trappe.
- .RQ nf No\ Filling
- désactive l'assemblage des lignes.
- .RQ nm line\ NuMbering [±num\ int\ spc\ idt]
- active la numérotation des lignes. La numérotation commence au numero "num",
- et se fera toutes les "int" lignes (1 par défaut). Il y aura "spc" espaces
- (1 par défaut) entre les numéros et le texte, et "idt" espaces (0 par
- défaut) entre la marge et les numéros. Sans arguments, la numérotation
- est désactivée. Un argument non numérique est considéré comme manquant.
- Un argument manquant n'est pas modifié.
- .RQ nn No\ line\ Numbering [N]
- ne numérote pas les N lignes suivantes, ou la ligne suivante si
- aucun argument n'est indiqué.
- .RQ pl Page\ Length [±N]
- change le nombre de lignes par page. Sans argument, la valeur par défaut
- est reprise.
- .RQ pn Page\ Number ±N
- change le numéro de la prochaine page.
- .RQ po Page\ Offset [±N]
- change la marge gauche pour tout le document (différent de l'indentation).
- Sans argument, la valeur précedente est reprise.
- .RQ so SOurce fichier
- insère le contenu du fichier indiqué.
- .RQ sp SPace [N]
- insère N (1 par défaut) lignes blanches.
- .RQ ta TAbulation N
- positionne les arrêts de tabulations aux colonnes 1, N+1, 2N+1, etc...
- .RQ tc Tab\ Character [c]
- indique le caractère à utiliser lors de l'extension des tabulations. Sans
- argument, la valeur par défaut est reprise.
- .RQ ti Temporary\ Indent N
- indente la ligne suivante de la valeur indiquée.
- .RQ tl TitLe 'a'b'c'
- imprime un texte en trois parties : "a" est cadré à gauche, "b" est centré,
- et "c" est cadré à droite. N'importe quel caractère peut être utilisé
- pour séparer les trois parties, et une ou deux parties peuvent être vides.
- .RQ tm Terminal\ Message message
- affiche le message indiqué.
- .RQ tr TRanslate abcd...
- indique une conversion en sortie : a est changé en b, c est changé en d,
- etc... Si un nombre impair de caractères est indiqué, le dernier sera
- changé en un espace.
- .RQ ts Title\ Style str
- indique le style de caractères du titre. "str" est n'importe quelle
- combinaison de :
-
- .nf
- \tb\tpassage en gras
- \ti\tpassage en italiques
- \tu\tpassage en souligné
- .fi
- .in
-
- .PR Le\ format\ des\ lignes
- .ti +8
- ARoff reconnait les constructions suivantes :
-
- .fi
- .in 24
- .SP
- \\t\t\ttabulation
- .SP
- \\<espace>\tespace fixe
- .SP
- \\<newline>\tretour à la ligne à ignorer
- .SP
- \\"\t\tle reste de la ligne est un commentaire
- .SP
- \\!\t\tle reste de la ligne est à lire sans aucune interprétation,
- et à envoyer sur la sortie sans ajustement (ne peut être utilisé qu'en
- début de ligne)
- .SP
- \\n\t\tinsérer la valeur d'un registre
- .SP
- \\*\t\tinsérer la valeur d'une chaine
- .in
-
- Il vous est très vivement conseillé de ne pas mettre de tabulations dans
- votre texte : utilisez plutôt la séquence "\\t".
-
- .ti +8
- Les registres permettent de stocker des valeurs numériques entières. On
- manipule les registres à l'aide des requêtes suivantes :
- .in 8
- .RQ nr New\ Register nom\ val\ [inc]
- crée le registre "nom" et lui donne la valeur initiale "val". Si l'argument
- "inc" est indiqué, il est mémorisé comme valeur de l'incrément du
- registre. Le nom peut faire un ou deux caractères. Les arguments "val" et
- "inc" sont des entiers positifs.
- .RQ rr Remove\ Register nom
- détruit le registre "nom".
- .in
-
- L'utilisation des registres se fait de la manière suivante :
- .nf
- .in 8
-
- \\nx\tinsère la valeur du registre x
- \\n+x\tincrémente puis insère la valeur du registre x
- \\n-x\tdécrémente puis insère la valeur du registre x
- \\n(xx\tinsère la valeur du registre xx
- \\n+(xx\tincrémente puis insère la valeur du registre xx
- \\n-(xx\tdécrémente puis insère la valeur du registre xx
-
- .ti -8
- Les registres suivants sont pré-définis par ARoff :
-
- dw\tjour de la semaine (1 à 7)
- dy\tjour du mois (1 à 31)
- mo\tmois (1 à 12)
- yr\tannée (deux chiffres)
- hr\theure (0 à 23)
- mn\tminutes (0 à 59)
- sc\tsecondes (0 à 59)
- pn\tnuméro de la page courante (en sortie)
- il\tnuméro de la ligne courante (en sortie)
- ol\tnuméro de la ligne courante (en entrée)
-
- .fi
- .in
- Notez que les registres donnant la date et l'heure sont initialisés une
- fois pour toutes lors de l'initialisation de ARoff, et ne sont pas mis à
- jour par la suite.
-
- .ti +8
- Les chaines permettent de stocker des chaines de caractères d'au plus 255
- caractères. On manipule les chaines à l'aide des requêtes suivantes\ :
- .in 8
- .RQ ds Define\ String nom\ chaine
- crée une chaine de nom indiqué, et lui affecte la valeur "chaine". Pour
- conserver les espaces en début de chaine, il suffit de mettre un guillemet
- avant le premier espace. Le nom peut faire un ou deux caractères. Si la
- chaine "nom" existe déjà, ARoff se contente de changer sa valeur.
- .RQ as Append\ String nom\ chaine
- ajoute la chaine indiquée à la chaine "nom". Cette chaine est créée si
- elle n'existe pas. Pour conserver les espaces en début de chaine, il suffit
- de mettre un guillemet avant le premier espace.
- .RQ rs Remove\ String nom
- détruit la chaine indiquée.
- .in
-
- Les chaines s'utilisent de la manière suivante :
-
- .in 8
- \\*x\tinsère la valeur de la chaine x
- .br
- \\*(xx\tinsère la valeur de la chaine xx
- .in
-
- La chaine "fn" est définie automatiquement par ARoff, et contient le nom
- du fichier en cours de traitement.
-
- .PR Les\ macros
- .ti +8
- Les macros permettent de stocker et de rappeler facilement une serie de
- requêtes et/ou un grand morceau de texte. On manipule les macros à
- l'aide des requêtes suivantes :
- .in 8
- .RQ de DEfine\ macro nom
- commence la définition de la macro "nom". Si cette macro existe déjà,
- son contenu est effacé. Les lignes suivantes sont mémorisées en tant que
- définition, jusqu'à ce qu'une ligne commence par ".." (deux points).
- .RQ am Append\ to\ Macro nom
- ajoute les lignes suivantes (jusqu'à ce qu'une ligne commence par "..") à
- la définition de la macro "nom". Si cette macro n'existe pas, elle est
- créée.
- .RQ rm Remove\ Macro nom
- détruit la macro indiquée.
- .RQ pm Print\ Macro [macro]
- affiche la définition de la macro indiquée, ou de toutes les macros si
- aucun argument n'est spécifié.
-
- .in
- L'appel d'une macro se fait exactement de la même manière qu'une
- requête\ : un point en début de ligne, suivi du nom de la macro. On peut
- passer au plus neuf arguments à une macro. Ils sont accessibles dans la
- définition par \\$1, \\$2, ... \\$9. Le nombre d'arguments peut être connu
- en consultant le registre ".$". Le séparateur d'arguments est l'espace.
- Si vous voulez passer un argument comprenant un espace, ajoutez un "\\"
- devant cet espace. Si vous voulez passer un argument comprenant un espace
- fixe, ajoutez trois "\\" devant cet espace.
- .NI
- Lors de la lecture de la définition d'une macro, le texte est interprété
- de la même façon que d'habitude. Pensez donc à doubler les "\\" devant les
- appels de registres, de chaines ou d'arguments, si vous voulez différer
- leur interprétation à l'exécution de la macro.
- .FN
- Contrairement à "nroff", il est d'interdit d'inclure une requête ".de" ou
- ".am" dans une définition de macro. L'appel d'une macro par une autre est
- possible.
-
- .PR Les\ trappes
- .ti +8
- Les trappes permettent de déclencher l'exécution d'une macro à une
- certaine position verticale dans la page. C'est avec ce mécanisme que
- l'on peut ajouter une en-tête ou un pied-de-page. On manipule les trappes
- à l'aide des requêtes suivantes :
- .in 8
- .RQ wh WHen ligne\ nom
- place une trappe à la ligne indiqué. La macro exécutée sera la macro
- "nom". S'il y avait déjà une trappe à cette position, ARoff se contente
- de changer le nom de la macro à exécuter. Si "ligne" est négatif, il
- s'agit d'une position relative à la fin de la page. Si "ligne" est nul, la
- trappe est déclenchée en fin de page.
- .RQ rt Remove\ Trap ligne
- enlève la trappe placée à la ligne indiquée.
- .NI
- Dans la version actuelle de ARoff, la trappe de fin de page n'est jamais
- déclenchée sur la dernière page de texte.
- .FN
- .in 0
- Lorsque ARoff est sur le point d'écrire une ligne, il regarde si une trappe
- est placée sur cette ligne. Si oui, il appelle la macro indiquée avant
- de tenter à nouveau d'écrire la ligne. Ce fonctionnement permet le
- déclenchement en cascade de trappes placées sur des lignes consécutives.
-
- .PR Les\ conditions
- .ti +8
- ARoff permet de rendre conditionnelle l'exécution d'une requête ou d'une
- macro, ou bien encore l'insertion d'une portion de texte. On manipule les
- conditions à l'aide des requêtes suivantes :
- .in 8
- .RQ if If cond\ reste
- Ignore le reste de la ligne si la condition n'est pas verifiée.
- .RQ el Else reste
- Ignore le reste de la ligne si la condition testée par le "if" précédent
- était verifiée. La requête "el" doit suivre IMMEDIATEMENT la requête "if".
- .in
-
- Le format des conditions est le suivant :
-
- .nf
- \to\t\tla page courante est de numéro impaire
- \te\t\tla page courante est de numéro pair
- \tn\t\tle formateur est "nroff" (toujours vrai)
- \tt\t\tle formateur est "troff" (toujours faux)
- \t'ch1'ch2'\tla chaine 'ch1' est identique à la chaine 'ch2'
- \tN<M\t\tl'entier N est inférieur à l'entier M
- \tN>M\t\tl'entier N est supérieur à l'entier M
- \tN=M\t\tl'entier N est égal à l'entier M
- .fi
-
- On peut inverser une condition, en la faisant précéder par un point
- d'exclamation "!". Les arguments des tests peuvent bien entendu être des
- registres ou des chaines. Voici quelques exemples :
-
- .nf
- .in 8
- \!.if o .tl 'Entete de page impaire''\n(pn'
- \!.el .tl 'Entete de page paire''\n(pn'
-
- \!.if '\*(fn'macros' le fichier macros
- \!.el un autre fichier
-
- \!.\" Saut de page si la ligne d'entrée est > 56
- \!.if \n(il>56 .bp
- .in
- .fi
-
- .PR Divers
- .ti +8
- Les registres et les chaines sont insérés dans le texte au fur et à
- mesure de sa lecture. On peut utiliser un registre ou une chaine comme
- argument d'une requête. Un registre inconnu a une valeur égale à zéro,
- une chaine inconnue est remplacée par une chaine vide. Une requête
- inconnue entrainera la recherche d'une macro. L'appel d'une macro non
- définie sera ignoré.
- .ti +8
- A la différence de "nroff", les registres, chaines et macros sont conservés
- dans des listes différentes. Cela veut dire que vous pouvez donner le même
- nom à un registre, à une chaine et à une macro : il n'y aura aucune
- confusion. Par contre, comme la liste des requêtes est parcourue avant la
- liste des macros, si une macro et une requête ont le même nom, c'est la
- requête qui sera exécutée.
-
- .nf
- Voici la liste des codes d'erreurs indiqués par ARoff :
-
- .in 16
- 0\terreur interne
- 1\tpile vide
- 2\tpile pleine
- 3\terreur de syntaxe
- 4\tdébordement de table ou de tampon
- 5\touverture de fichier impossible
- 6\targuments incorrects
- 7\terreur d'écriture
- 8\tplus de mémoire libre
- 9\trequête "el" non précédée par une requête "if"
- 10\timpossible de se déplacer dans le fichier
- 11\terreur de lecture dans le fichier à traiter
- 12\tle fichier à traiter est vide
-
- .in
- Voici les valeurs par défaut des paramètres de mise en page :
-
- .in 16
- ajustement\t\tad\tb
- indentation\t\tin\t0
- longueur des lignes\tll\t80
- espacement des lignes\tls\t1
- longueur des titres\tlt\t80
- longueur des pages\tpl\t66
- numero de page\t\tpn\t1
- marge gauche\t\tpo\t0
- tabulation\t\tta\t8
- caractere tabulation\ttc\tespace
-
- .in
- .fi
- .ti +8
- Vous pouvez me faire part de vos remarques ou critiques sur ce programme,
- en écrivant à l'adresse suivante :
-
- .ne 4
- .ce 4
- M. GOUNELLE Denis
- Boite 71
- 6, rue des cailloux
- 92110 CLICHY - FRANCE
-
- .ti +8
- ARoff a été développé presque entièrement sous système UNIX, puis
- recompilé sur Amiga avec l'Aztec C 3.6a. Les fichiers sources sont
- fournis (il n'y a pas beaucoup de commentaires, désolé !), avec les
- "makefile" pour Unix et pour Aztec. Ce programme devrait pouvoir être
- compilé sans trop de problèmes par n'importe quel compilateur C. Les
- parties spécifiques au compilateur Aztec C sont placées entre "#ifdef".
-
- .PR Historique
- .in 8
- .ti -8
- v1.00\t06-Sep-91, 22144 octets
- .br
- Première version diffusée.
-
- .ti -8
- v1.01\t20-Oct-91, 22524 octets
- .br
- Ajout de la requête "fs".
- .br
- Ajout de la chaine "$VER:" pour la commande Version (OS 2.0).
-
- .ti -8
- v1.02\t11-Nov-91, 22736 octets.
- .br
- Ajout de la requête "ts".
- .br
- Correction d'une erreur dans la numérotation des pages (commençait à 2
- au lieu de 1).
-
- .ti -8
- v1.03\t13-Nov-91, 22896 octets
- .br
- Plusieurs optimisations (6% plus rapide d'après "prof", consomme moins
- de mémoire).
-
- .ti -8
- v1.10\t14-Nov-91, 24020 octets
- .br
- La pile interne est maintenant allouée correctement : depuis le début
- on allouait (TaillePile * 2) octets au lieu de (TaillePile * 8), d'où
- des plantages avec de gros fichiers sources.
- .br
- Ajout des requêtes "if" et "el".
- .br
- La fonction Pop() ne dépilait jamais le dernier élément (s'arrêtait
- quand SP valait 1, au lieu d'aller jusqu'à 0).
- .br
- La fonction myalloc() alloue toujours un nombre pair d'octets (pour
- éviter des problèmes d'alignement), et vérifie qu'on essaye pas
- d'allouer 0 octets.
- .br
- La fonction LigneSuiv() n'allouait pas assez de place pour stocker la
- ligne en cours en cas de trappe (il manquait un octet pour l'octet nul
- à la fin).
- .br
- Lorsqu'on utilise la requête "so", n'oublie plus de revenir au fichier
- précédent en fin de fichier.
- .br
- N'oublie plus l'indentation quand une ligne commence par \\!.
-
- .ti -8
- v1.11\t27-Nov-91, 24028 octets
- .br
- La fonction SetMacArgs() n'allouait pas assez de place pour les arguments
- des macros (il manquait un octet pour l'octet nul à la fin).
- .br
- [Erreur détectée et corrigée grâce à l'aide de Michel SCHINZ]
-
- .ti -8
- v1.12\t29-Nov-91, 24828 octets
- .br
- Ajout de l'option -l (charge le fichier en mémoire) qui permet de rendre
- le traitement deux à trois fois plus rapide dans certains cas (166% à 280%
- constatés sur mon A500).
-
-