Initial commit

This commit is contained in:
Andrew Hyatt 2016-11-19 17:11:38 -08:00
commit f5cf24f11b
845 changed files with 447114 additions and 0 deletions

55
BUG-REPORT Normal file
View File

@ -0,0 +1,55 @@
Groff Bug Report
Please read the PROBLEMS file before sending in a bug report.
Please fill in all fields, even if you think they are not relevant.
Please delete the text in brackets before sending it in.
Please report separate bugs separately.
Send the completed form to bug-groff@gnu.org
GROFF VERSION:
[The version of groff you are using. For example, `1.05']
MACHINE:
[The machine you are using. For example, `Sun SPARCstation 2']
OS:
[The operating system you are using. For example, `SunOS 4.1.1']
COMPILER:
[The compiler you are used to compile groff. For example, `g++ 1.40.3']
INPUT FILES:
[Include all the files necessary to reproduce the problem that are not
part of the standard groff distribution. This includes font
description files, DESC files and macro files (with the exception of
the -ms and -mm macros: we have them). Send them as a shell archive or
as a uuencoded, compressed tar file.
It's easier for us if you can provide an example that doesn't depend on
any macro package, but obviously if you're reporting a problem with a
macro package that won't be possible. Also a short example is more
convenient than a long one, but don't worry if you can't find a short
example. Don't say something like ``any file that X'': Always send a
definite example.]
COMMAND LINE:
[The command line that we should run in order to observe the bug. For
example, `gtroff -Tps bug.tr'. If the command line uses -ms or -mm,
say whether these refer to the groff versions or the Unix versions of
the macros.]
DESCRIPTION OF INCORRECT BEHAVIOUR:
[What goes wrong when that command line is run? For example, `gtroff
gets a segmentation fault', or `The output looks bad because the bar
over the x is too long and is too far over to the left.' If you get an
error message, include it here without modification: Don't edit it to
make it more readable.]
SUGGESTED FIX [optional]:
[If you can suggest a fix for the problem, include a context diff here.
But don't delay sending in a bug report in the hope of finding a fix.
Guesses about the cause of the bug are not usually helpful.]

340
COPYING Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

5253
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

6147
ChangeLog.115 Normal file

File diff suppressed because it is too large Load Diff

1388
ChangeLog.116 Normal file

File diff suppressed because it is too large Load Diff

2190
ChangeLog.117 Normal file

File diff suppressed because it is too large Load Diff

3794
ChangeLog.118 Normal file

File diff suppressed because it is too large Load Diff

397
FDL Normal file
View File

@ -0,0 +1,397 @@
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as "you". You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject. (Thus, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled "History" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the "History" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

50
INSTALL Normal file
View File

@ -0,0 +1,50 @@
To install groff, follow the instructions in the file INSTALL.gen.
This file contains information that supplements those instructions.
(For instructions how to build groff with DJGPP tools for MS-DOS and
MS-Windows, see the file arch/djgpp/README.)
(For instructions how to build groff with the MinGW tools for
MS-Windows, see the file README.MinGW.)
groff is written in C++, so you will need a C++ compiler. The C++
source files use a suffix of `.cpp', so your C++ compiler must be able
to handle this. If you don't already have a C++ compiler, I suggest
gcc 2.7.1 or later (gcc version 2 includes GNU C++ as well as GNU C).
From gcc 2.5, it is no longer necessary to install libg++: the C++
header files needed by groff are created by the gcc installation
process. To override configure's choice of C++ compiler, you can set
the CXX environment variable.
If you have a library that provides a faster malloc than your system's
usual malloc, it is good idea to include it in LIBS. For example,
using the malloc that comes with GNU Emacs version 20 can give a
worthwhile (and sometimes spectacular) performance improvement.
If you want A4 or letter paper format and the configure script produces
an incorrect guess, say
PAGE=xxx ./configure
where `xxx' should be either `A4' or `letter'. Note that this will only
affect the paper selection of some device drivers like grops (which can
be still overridden on the command line). For compatibility with
ditroff, the default page length in gtroff is always 11 inches. The
page length can be changed with the `pl' request.
When you have built groff, you can use the test-groff script to try
groff out on one of the man pages. (Use the .n files not the .man
files.) The test-groff script sets up environment variables to allow
groff to run without being installed. For example, you could do
./test-groff -man -Tascii src/roff/groff/groff.n | less
To get a DVI, PDF, or HTML version of the groff texinfo manual, say `make
groff.dvi', `make groff.pdf', or `make groff.html', respectively, in the
`doc' subdirectory (after configuring the groff package). Note that you
need texinfo version 4.6 as a prerequisite. Neither older versions nor
texinfo 4.7 (due to a bug) will work.
If you have problems, read the PROBLEMS file. If this doesn't help
send a bug report using the form in the file BUG-REPORT.

231
INSTALL.gen Normal file
View File

@ -0,0 +1,231 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PREFIX', the package will
use PREFIX as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the `--target=TYPE' option to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
will cause the specified gcc to be used as the C compiler (unless it is
overridden in the site shell script).
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
LICENSE
The groff program is a free software project. It is licensed under
the GNU General Public License (GNU GPL), version 2 or later.
The file COPYING in the top directory of the groff source package
contains a copy of the GPL that was downloaded from the GNU web site
http://www.gnu.org/copyleft/gpl.txt at 1 dec 2003.
All files of the groff source package are licensed under this version
of the GPL (or licenses which are compatible with the GPL).
You are free to choose version 2 or any subsequent version of the GPL.
The GPL names an address where you can get the actual version by
normal post. Further information is found in the internet at
http://www.gnu.org/copyleft.
The groff program is a GNU package, and the copyright of all files of
the groff source package which are under the GPL has been assigned to
the Free Sofware Foundation (FSF). Information on GNU and FSF is
found at http://www.fsf.org/.

164
MANIFEST Normal file
View File

@ -0,0 +1,164 @@
MANIFEST
Last update: 26 May 2005
This file is part of groff, the GNU roff type-setting system.
Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
written by Bernd Warken <bwarken@mayn.de>
maintained by Werner Lemberg <wl@gnu.org>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
Invariant Sections being this .ig-section and AUTHORS, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
########################################################################
This file gives an overview of the directories and the main files of
the groff source distribution.
1) The top directory.
BUG-REPORT A template for bug-reports.
ChangeLog Log of the changes in the different groff versions.
COPYING The GNU General Public License (GPL).
FDL The Free Documentation License (FDL).
INSTALL Information on compiling and installing groff.
INSTALL.gen Generic information on configuration and compiling.
LICENSE Licensing information.
MANIFEST The file you are reading.
MORE.STUFF Useful stuff in other packages.
NEWS Recent user-visible changes in groff.
PROBLEMS Tips to handle known critical situations.
PROJECTS Long-term additions to groff.
README Availability and contact information for groff.
README.MinGW Build information for MinGW.
TODO Things planned for future groff versions.
All other files in the top directory are related to the configuration,
compilation, and install processes.
2) The directory structure
./arch Data that is special for different architectures.
djgpp Data special for the 32-bit DOS compiler djgpp.
misc Data needed for various platforms.
./contrib Part of groff, but maintained by other people.
eqn2graph Convert equations created with EQN into different
graphical formats.
gdiffmk An improved implementation of the diffmk command to mark
differences between groff/nroff/troff files.
grap2graph Convert grap diagraps into different graphical formats.
groffer A wrapper to conveniently view roff files.
mm The groff mm macro package.
mom The groff mom macro package.
pdfmark A package to add PDF marks to groff documents, together
with a shell script (pdfroff) for easy creation of PDF
documents.
pic2graph Convert PIC diagrams into different graphical formats.
./doc Manuals and tutorials to groff aspects.
./font Device information and fonts.
devX100 100dpi device for X Window System.
devX100-12 100dpi device with narrower font (for 12pt base font).
devX75 75dpi device for X Window System.
devX75-12 75dpi device with narrower font (for 12pt base font).
devascii Text device for ASCII output.
devcp1047 EBCDIC device.
devdvi TeX DVI device.
devhtml HTML device.
devlatin1 Text device for latin-1 (ISO 8859-1) output.
devlbp Device for Canon CAPSL laser printers.
devlj4 Device for HP Laserjet 4, PCL 5, and compatible printers.
devps PostScript device.
devutf8 Text device for Unicode output.
./man Some groff manual pages of more general character.
./src Everything written in programming languages.
./src/devices The postprocessors.
grodvi TeX DVI output.
grohtml HTML output.
grolbp Canon printers.
grolj4 HP Laserjet 4, PCL 5, and compatible printers.
grops PostScript output.
grotty Text output.
xditview A groff (pre)viewer for the X Window system.
./src/include The *.h C/C++ include files.
./src/libs C++ code common to several parts of the groff sources.
libbib Library of bibliographic functions.
libdriver Parser for intermediate output and postprocessor code.
libgroff Library for general support functions used everywhere.
libxutil Utility functions for xditview and xtotroff.
snprintf An implementation of snprintf() and friends.
./src/preproc Preprocessors.
eqn Mathematical formulae.
grn Gremlin pictures.
html The preprocessor part of grohtml.
pic Diagram drawer.
refer Bibliographic references.
soelim File inclusion using tmac path.
tbl Tables.
./src/roff Front-end programs.
groff Wrapper around troff. This is the main user program.
grog Guess groff command line options.
nroff Emulate classical nroff text formatter.
troff Main roff formatter program.
./src/utils Utility programs around groff.
addftinfo Add information to old troff font files for use with groff.
afmtodit Create font description files for the PostScript device.
hpftodit Create font description files for the LJ4 device.
indxbib Make inverted index for bibliographic databases.
lkbib Search bibliographic databases.
lookbib Interactively search bibliographic databases.
pfbtops Translate a PostScript font in PFB format to PFA.
tfmtodit Create font description files for TeX DVI device.
xtotroff Create font description files for xditview.
./tmac Macro files.
3) Documentation
The groff documentation is scattered upon several places.
- The main directory contains documents related to the groff source.
The README file contains the information needed to get the groff
package, report bugs, and contact the developers.
- The man-page of each program (section 1) is kept in the source
directory of the program.
- The man-pages for the other sections are found in `src/man'.
- Documentation in other formats are located in the `doc' directory,
including the groff info file, tutorials, and manuals.
4) The roff parser
The parsing of the roff language is done by troff. The input is converted
to tokens in `src/roff/troff/input.cpp' and transformed into `nodes' by
`src/roff/troff/env.cpp' and `src/roff/troff/node.cpp'. From these, the
intermediate output is generated (also in `node.cpp').
5) Postprocessing
The parser for the intermediate output and the postprocessing is in
`src/libs/libdriver/input.cpp'. This is used by all postprocessors.

198
MORE.STUFF Normal file
View File

@ -0,0 +1,198 @@
More stuff for groff
====================
Windows 32
----------
Here two ports using the gcc compiler and other GNU tools:
. Cygwin:
http://sources.redhat.com/cygwin/
Look for a convenient mirror site in
http://sources.redhat.com/cygwin/mirrors.html
At any of those mirrors, groff can be found in the directory
latest/groff.
. Kees Zeelenberg <c.zeelenberg@hccnet.nl>:
http://gnuwin32.sourceforge.net/packages/groffl.htm
This port includes recent versions of grap and deroff.
dos
---
Binaries for Eli Zaretskii's port using the djgpp compiler are available
from
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gro*b.zip
and its mirrors; for installation details please read `arch/djgpp/README'.
This port also runs on Windows 32 systems, except Windows 2000.
grap
----
An implementation of Kernighan & Bentley's grap language for typesetting
graphs. Written by Ted Faber <faber@lunabase.org>. The actual version
can be found at
http://www.lunabase.org/~faber/Vault/software/grap/
A djgpp port which runs on dos and most Windows 32 systems (Windows 95,
Windows 98, Windows NT) done by Kees Zeelenberg <c.zeelenberg@hccnet.nl>
is available from
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2apps/
It is intended to be used with the djgpp port of groff.
A Windows 32 port is included in the groff package available from
http://gnuwin32.sourceforge.net/
plot2dev
--------
This utility program can convert plot graphics to either pic or gremlin
files. It has been written by Richard Murphey <richard-murphey@rice.edu>
and Daniel Senderowicz <daniel@synchrods.com> (who has added the gremlin
driver). The actual version can be found as
ftp://ftp.ffii.org/pub/groff/plot2dev-x.x.tar.gz
troffcvt
--------
From the web page:
troffcvt is a translator that turns troff input into a form that can be
more easily processed. The troffcvt distribution comes with
postprocessors that turn troffcvt into various destination formats such
as HTML (Hypertext Markup Language), RTF (Rich Text Format) or plain
text.
Note that you need a lot of additional packages to compile troffcvt;
everything is available from
http://www.primate.wisc.edu/software/troffcvt/
unroff
------
From the README file:
Unroff is a Scheme-based, programmable, extensible troff translator with
a back-end for the Hypertext Markup Language. Unroff is free software
and is distributed both as source and as precompiled binaries.
http://www.informatik.uni-bremen.de/~net/unroff/unroff.html
You need als Elk, the Scheme based Extension Language Kit, which is
available from
http://www.informatik.uni-bremen.de/~net/elk
deroff
------
Deroff removes roff constructs from documents for the purpose of indexing,
spell checking etc.
Michael Haardt's <michael@moria.de> implementation is a little smarter
than traditional implementations, because it knows about certain -man and
-mm macros. It is able to generate a word list for spell checking tools
or omit headers for sentence analysis tools. It can further generate
cpp-style #line lines.
http://www.moria.de/deroff/
Version 1.6 compiled with DJGPP (for MS-DOS and all Windows 32 systems,
i.e. Windows 95, Windows 98, Windows NT) is available from
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2apps/
and its mirrors.
A Windows 32 port of version 1.8 is available from
http://gnuwin32.sourceforge.net/
David Frey <dfrey@debian.org> has also written a deroff implementation
for Debian; it is available from
ftp://ftp.debian.org/debian/pool/main/d/deroff/
miscellaneous
-------------
. Ralph Corderoy's excellent page on troff:
www.troff.org
There are links for virtually everything related to troff.
. Dr. Robert Hermann's groff gems are available from
http://www.eas.slu.edu/People/RBHerrmann/GROFF/index.html
At present there are examples for
o creating business cards
o using groff to make large format posters for presentations
. Robert Marks's collection of useful macros and scripts is available from
http://www.agsm.edu.au/~bobm/odds+ends/scripts.html
Description:
o `polish': Is a sed (= the Unix stream editor) script that does many
things to ASCII text. Amongst other things, it breaks lines at new
sentences, reduces upper-case acronyms by one point size, adds
diacriticals, changes simple quotes into smart quotes, and makes a few
simple grammar checks. The best way to see what it does is to run it
as a sed script file (or files) on a text file and then compare the
output file with the original.
o `DropCaps' is a troff script which replaces the initial letters of
paragraphs immediately after H1 and H2 headings with drop-capitals of
specified point size, and automatically flows the text around the new
drop cap.
o `AJM Header' is a set of troff macros used in production of the
Australian Journal of Management. They use the Memorandum Macros (mm)
of AT&T, and so should be invoked with the UNIX troff -mm flag; they
should also work with the GNU troff -mm flag.
. Thomas Baruchel <baruchel@libertysurf.fr> has developed Meta-tbl, a tbl
postprocessor to manipulate table cells (like adding gray shades). The
latest version can be found at
http://perso.libertysurf.fr/baruchel/
. gpresent, written by Bob Diertens <bobd@science.uva.nl>. From the README
file:
gpresent is a package for making presentation with groff and acroread.
It consist of a set of macros to be used with groff and a post-processor
for manipulating the PostScript output of groff. Without the use of the
PAUSE macro, it can also be used for making slides.
It is available from
www.science.uva.nl/~bobd/useful/gpresent/
documentation
-------------
Many documents related to the original versions of troff, ditroff, pic,
and others can be accessed from the following web pages:
http://www.cs.bell-labs.com/cm/cs/cstr.html
http://www.cs.bell-labs.com/cm/cs/papers.html

25
Makefile Normal file
View File

@ -0,0 +1,25 @@
# Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
SHELL=/bin/sh
.PHONY: all
all:
$(SHELL) configure
$(MAKE) all

33
Makefile.ccpg Normal file
View File

@ -0,0 +1,33 @@
# Makefile.ccpg
MAKEFILEPARTS=\
$(top_srcdir)/Makefile.comm \
$(top_builddir)/Makefile.cfg \
$(srcdir)/Makefile.sub \
$(top_srcdir)/Makefile.ccpg \
Makefile.dep
all: $(PROG) $(MANPAGES)
$(PROG): $(OBJS) $(XLIBS)
$(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
install_bin: install_prog
install_prog: $(PROG)
install_data: install_man
install_man: $(MANPAGES)
uninstall_sub: uninstall_prog uninstall_man
depend: depend_src
depend.temp: $(GENSRCS) $(YTABC)
distfiles: $(YTABC)
TAGS: TAGS_src
TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
Makefile: $(MAKEFILEPARTS)
Makefile.dep:
touch Makefile.dep
$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
pure: $(PROG).pure
$(PROG).pure: $(OBJS) $(XLIBS)
$(PURIFY) $(PURIFYCCFLAGS) \
$(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(LIBS) $(MLIB)

304
Makefile.comm Normal file
View File

@ -0,0 +1,304 @@
# Copyright (C) 1989-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
#
# Makefile.comm
#
INCLUDES=-I. -I$(srcdir) \
-I$(top_builddir)/src/include -I$(top_srcdir)/src/include
ALL_CCFLAGS=$(INCLUDES) $(CCDEFINES) $(CCFLAGS) $(CPPFLAGS)
COMPILE.cpp=$(CCC) $(ALL_CCFLAGS) -c
ALL_CFLAGS=$(INCLUDES) $(CDEFINES) $(CFLAGS) $(CPPFLAGS)
COMPILE.c=$(CC) $(ALL_CFLAGS) -c
LINK.cpp=$(CCC) $(CCFLAGS) $(LDFLAGS)
LINK.c=$(CC) $(CFLAGS) $(LDFLAGS)
LIBGROFF=$(top_builddir)/src/libs/libgroff/libgroff.$(LIBEXT)
LIBBIB=$(top_builddir)/src/libs/libbib/libbib.$(LIBEXT)
LIBDRIVER=$(top_builddir)/src/libs/libdriver/libdriver.$(LIBEXT)
LIBXUTIL=$(top_builddir)/src/libs/libxutil/libxutil.$(LIBEXT)
MLIB=
XLIBS=
YTABH=
YTABC=
GRAM=
LIBCLEAN=
CLEANADD=
CLEANDIRADD=
CLEANNOTSRCDIRADD=
MOSTLYCLEANFILES=$(MANCLEAN) $(PROG) $(OBJS) $(GENSRCS) $(GENHDRS) \
depend.temp core y.output $(CLEANADD)
CLEANFILES=$(LIBCLEAN)
DISTCLEANFILES=TAGS Makefile Makefile.dep
REALCLEANFILES=$(YTABC) $(YTABH)
NAMEPREFIX=
HDRS=
MANPAGES=$(MAN1) $(MAN5) $(MAN7)
MANCLEAN=$(MANPAGES)
fontsubdir=$(fontdir)/dev$(DEV)
all install install_bin install_data TAGS depend distfiles uninstall_sub:
install: prefix_must_exist install_bin install_data
uninstall: uninstall_sub
pure:
.PHONY: all clean distclean mostlyclean realclean extraclean depend distfiles
.PHONY: install install_bin install_data prefix_must_exist
.PHONY: uninstall uninstall_sub
.PHONY: pure
prefix_must_exist:
@test -d $(prefix) \
|| (echo ; \
echo The prefix directory \`$(prefix)\' doesn\'t exist; \
echo ; \
exit 1)
mostlyclean:
-rm -f $(MOSTLYCLEANFILES)
-rm -rf $(CLEANDIRADD)
-@if test `cd $(srcdir); pwd` = `pwd`; then \
:; \
else \
rm -f $(CLEANNOTSRCDIRADD); \
fi
clean: mostlyclean
-rm -f $(CLEANFILES)
distclean: clean
-rm -f $(DISTCLEANFILES)
-@if test `cd $(srcdir); pwd` = `pwd`; then \
:; \
else \
rm -f $(YTABC) $(YTABH); \
fi
realclean: distclean
-rm -f $(REALCLEANFILES)
extraclean: distclean
-rm -f \#* *~ =* core junk grot old temp tmp tem *.new *.old *.orig
.SUFFIXES:
.SUFFIXES: .o .obj .cpp .c .y .man .n
.cpp.o:
$(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
.c.o:
$(COMPILE.c) $(EXTRA_CFLAGS) $<
.cpp.obj:
$(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
.c.obj:
$(COMPILE.c) $(EXTRA_CFLAGS) $<
.y.cpp:
if test -n "$(YTABH)"; then \
$(YACC) $(YACCFLAGS) -d $<; \
else \
$(YACC) $(YACCFLAGS) $<; \
fi
-test -f y.tab.h && mv y.tab.h y_tab.h
-test -f y.tab.c && mv y.tab.c y_tab.c
mv y_tab.c $(YTABC)
test -z "$(YTABH)" || mv y_tab.h $(YTABH)
# The next rule is needed for make of Solaris 2.5.1 to override its
# built-in .y.o rule (which takes precedence over the .y.cpp rule above).
.y.o:
if test -n "$(YTABH)"; then \
$(YACC) $(YACCFLAGS) -d $<; \
else \
$(YACC) $(YACCFLAGS) $<; \
fi
-test -f y.tab.h && mv y.tab.h y_tab.h
-test -f y.tab.c && mv y.tab.c y_tab.c
mv y_tab.c $(YTABC)
test -z "$(YTABH)" || mv y_tab.h $(YTABH)
$(COMPILE.cpp) $(EXTRA_CCFLAGS) $(YTABC)
.man.n:
@echo Making $@ from $<
@-rm -f $@
@sed -e "s|@BINDIR@|$(bindir)|g" \
-e "s|@FONTDIR@|$(fontdir)|g" \
-e "s|@LOCALFONTDIR@|$(localfontdir)|g" \
-e "s|@LEGACYFONTDIR@|$(legacyfontdir)|g" \
-e "s|@MACRODIR@|$(tmacdir)|g" \
-e "s|@SYSTEMMACRODIR@|$(systemtmacdir)|g" \
-e "s|@LOCALMACRODIR@|$(localtmacdir)|g" \
-e "s|@DOCDIR@|$(docdir)|g" \
-e "s|@EXAMPLEDIR@|$(exampledir)|g" \
-e "s|@HTMLDOCDIR@|$(htmldocdir)|g" \
-e "s|@PDFDOCDIR@|$(pdfdocdir)|g" \
-e "s|@DEVICE@|$(DEVICE)|g" \
-e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
-e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
-e "s|@INDEX_SUFFIX@|$(indexext)|g" \
-e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \
-e "s|@MAN1EXT@|$(man1ext)|g" \
-e "s|@MAN5EXT@|$(man5ext)|g" \
-e "s|@MAN7EXT@|$(man7ext)|g" \
-e "s|@TMAC_S_PREFIX@|$(tmac_s_prefix)|g" \
-e "s|@TMAC_M_PREFIX@|$(tmac_m_prefix)|g" \
-e "s|@TMAC_AN_PREFIX@|$(tmac_an_prefix)|g" \
-e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
-e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
-e "s|@VERSION@|$(version)$(revision)|g" \
-e "s|@MDATE@|`$(SHELL) $(top_srcdir)/mdate.sh $<`|g" \
-e "s|@g@|$(g)|g" \
-e "s!@G@!`echo $(g) | tr [a-z] [A-Z]`!g" \
$< >$@
.PHONY: install_man
install_man:
-test -d $(manroot) || $(mkinstalldirs) $(manroot)
-test -d $(man1dir) || $(mkinstalldirs) $(man1dir)
@-pages="$(MAN1)"; \
for p in $$pages; do \
prog=`basename $$p .n`; \
target=$(man1dir)/$(NAMEPREFIX)$$prog.$(man1ext); \
rm -f $$target; \
echo $(INSTALL_DATA) $$p $$target; \
$(INSTALL_DATA) $$p $$target; \
done
-test -d $(man5dir) || $(mkinstalldirs) $(man5dir)
@-pages="$(MAN5)"; \
for p in $$pages; do \
target=$(man5dir)/`basename $$p .n`.$(man5ext); \
rm -f $$target; \
echo $(INSTALL_DATA) $$p $$target; \
$(INSTALL_DATA) $$p $$target; \
done
-test -d $(man7dir) || $(mkinstalldirs) $(man7dir)
@-pages="$(MAN7)"; \
for p in $$pages; do \
target=$(man7dir)/`basename $$p .n`.$(man7ext); \
rm -f $$target; \
echo $(INSTALL_DATA) $$p $$target; \
$(INSTALL_DATA) $$p $$target; \
done
.PHONY: uninstall_man
uninstall_man:
@-pages="$(MAN1)"; \
for p in $$pages; do \
target=$(man1dir)/$(NAMEPREFIX)`basename $$p .n`.$(man1ext); \
echo rm -f $$target; \
rm -f $$target; \
done
@-pages="$(MAN5)"; \
for p in $$pages; do \
target=$(man5dir)/`basename $$p .n`.$(man5ext); \
echo rm -f $$target; \
rm -f $$target; \
done
@-pages="$(MAN7)"; \
for p in $$pages; do \
target=$(man7dir)/`basename $$p .n`.$(man7ext); \
echo rm -f $$target; \
rm -f $$target; \
done
.PHONY: install_prog
install_prog:
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
rm -f $(bindir)/$(NAMEPREFIX)$(PROG)
$(INSTALL_PROGRAM) $(PROG) $(bindir)/$(NAMEPREFIX)$(PROG)
.PHONY: uninstall_prog
uninstall_prog:
-rm -f $(bindir)/$(NAMEPREFIX)$(PROG)
.PHONY: install_dev
install_dev:
-test -d $(datadir) || $(mkinstalldirs) $(datadir)
-test -d $(dataprogramdir) || $(mkinstalldirs) $(dataprogramdir)
-test -d $(datasubdir) || $(mkinstalldirs) $(datasubdir)
-test -d $(fontdir) || $(mkinstalldirs) $(fontdir)
-test -d $(fontsubdir) || $(mkinstalldirs) $(fontsubdir)
-if test -d $(srcdir)/generate; then \
test -d $(fontsubdir)/generate \
|| $(mkinstalldirs) $(fontsubdir)/generate; \
fi
-test -z "$(DEVFILES)" \
|| for f in ""$(DEVFILES); do \
rm -f $(fontsubdir)/$$f; \
if test -f $$f; then \
$(INSTALL_DATA) $$f $(fontsubdir)/$$f; \
else \
$(INSTALL_DATA) $(srcdir)/$$f $(fontsubdir)/$$f; \
fi; \
done
-test -z "$(DEVSCRIPTS)" \
|| for f in ""$(DEVSCRIPTS); do \
rm -f $(fontsubdir)/$$f; \
if test -f $$f; then \
$(INSTALL_SCRIPT) $$f $(fontsubdir)/$$f; \
else \
$(INSTALL_SCRIPT) $(srcdir)/$$f $(fontsubdir)/$$f; \
fi; \
done
.PHONY: uninstall_dev
uninstall_dev:
-test -z "$(DEVFILES)$(DEVSCRIPTS)" \
|| for f in ""$(DEVFILES) $(DEVSCRIPTS); do \
rm -f $(fontsubdir)/$$f; \
done
-test -d $(fontsubdir)/generate && rmdir $(fontsubdir)/generate
-rmdir $(fontsubdir)
.PHONY: depend_src
depend_src: depend.temp
mv depend.temp Makefile.dep
depend.temp: FORCE
> depend.temp;
if test -f "$(srcdir)/$(YTABC)"; then \
ytabc="$(srcdir)/$(YTABC)"; \
else \
ytabc="$(YTABC)"; \
fi; \
test -z "$(CCSRCS)$(YTABC)" \
|| $(CCC) $(ALL_CCFLAGS) -MM $(CCSRCS) $$ytabc >>depend.temp
test -z "$(CSRCS)" \
|| $(CC) $(ALL_CFLAGS) -MM $(CSRCS) >>depend.temp
test -z "$(YTABH)" \
|| (sed -e 's|$(YTABH)|$(YTABC)|g' depend.temp >depend1.temp; \
mv depend1.temp depend.temp)
.PHONY: TAGS_src
TAGS_src:
$(ETAGS) $(ETAGSFLAGS) $(CCSRCS) $(CSRCS)
test -z "$(GRAM)$(HDRS)" \
|| $(ETAGS) $(ETAGSFLAGS) -a $(ETAGSCCFLAG) $(GRAM) $(HDRS)
# This rule is only considered for the subdir_Makefile target.
Makefile:
-rm -f Makefile
echo srcdir=$(srcdir) >>Makefile
echo VPATH=$(VPATH) >>Makefile
cat $(MAKEFILEPARTS) /dev/null >>Makefile
FORCE:
.NOEXPORT:

27
Makefile.cpg Normal file
View File

@ -0,0 +1,27 @@
# Makefile.cpg
MAKEFILEPARTS=\
$(top_srcdir)/Makefile.comm \
$(top_builddir)/Makefile.cfg \
$(srcdir)/Makefile.sub \
$(top_srcdir)/Makefile.cpg \
Makefile.dep
all: $(PROG) $(MANPAGES)
$(PROG): $(OBJS) $(XLIBS)
$(LINK.c) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
install_bin: install_prog
install_prog: $(PROG)
install_data: install_man
install_man: $(MANPAGES)
uninstall_sub: uninstall_prog uninstall_man
depend: depend_src
depend.temp: $(GENSRCS) $(YTABC)
distfiles: $(YTABC)
TAGS: TAGS_src
TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
Makefile: $(MAKEFILEPARTS)
Makefile.dep:
touch Makefile.dep
$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION

4
Makefile.dev Normal file
View File

@ -0,0 +1,4 @@
all: $(DEVFILES) $(DEVSCRIPTS)
install_data: install_dev
uninstall_sub: uninstall_dev
install_dev: $(DEVFILES) $(DEVSCRIPTS)

776
Makefile.in Normal file
View File

@ -0,0 +1,776 @@
# Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
SHELL=@SHELL@
srcdir=@srcdir@
top_srcdir=@abs_top_srcdir@
VPATH=@srcdir@
top_builddir=@abs_top_builddir@
# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
# is to be used in runtime PATHs compiled into groff executables.
RT_SEP=@GROFF_PATH_SEPARATOR@
# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
# scripts and makefile rules; it may be the same as `RT_SEP', but,
# particularly in some Microsoft environments, it may differ.
SH_SEP=@PATH_SEPARATOR@
version=`cat $(top_srcdir)/VERSION`
# No additional number if revision is zero.
revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
# Define `page' to be letter if your PostScript printer uses 8.5x11
# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
# world).
PAGE=@PAGE@
# The name of the ghostscript program. Normally, gs, on GNU/Linux
# but it might be different on MS-DOS/MS-WIN32 systems.
GHOSTSCRIPT=@GHOSTSCRIPT@
# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
ALT_GHOSTSCRIPT_PROGS=@ALT_GHOSTSCRIPT_PROGS@
# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
# which can be tried at run time, to identify the awk program.
ALT_AWK_PROGS=@ALT_AWK_PROGS@
# Normally the Postscript driver, grops, produces output that conforms
# to version 3.0 of the Adobe Document Structuring Conventions.
# Unfortunately some spoolers and previewers can't handle such output.
# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
# make its output acceptable to such programs. This variable controls
# only the default behaviour of grops; the behaviour can be changed at
# runtime by the grops -b option (and so by groff -P-b).
# Use a value of 0 if your spoolers and previewers are able to handle
# conforming PostScript correctly.
# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
# this is needed for early versions of TranScript that get confused by
# anything between the %%EndProlog line and the first %%Page: comment.
# Add 2 if lines in included files beginning with %! should be
# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
# stripped out of included files; this is needed for spoolers that
# don't understand the %%{Begin,End}Document comments. I suspect this
# includes early versions of TranScript.
# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
# with a printer that requires page reversal.
BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@
# `DEVICE' is the default device.
DEVICE=ps
# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
XDEVDIRS=@XDEVDIRS@
# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
XPROGDIRS=@XPROGDIRS@
# `XLIBDIRS' is either `src/libs/libxutil' or empty.
XLIBDIRS=@XLIBDIRS@
# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
# empty (for EBCDIC).
OTHERDEVDIRS=@OTHERDEVDIRS@
# `PSPRINT' is the command to use for printing a PostScript file,
# for example `lpr'.
PSPRINT=@PSPRINT@
# `DVIPRINT' is the command to use for printing a TeX dvi file,
# for example `lpr -d'.
DVIPRINT=@DVIPRINT@
# Prefix for names of programs that have Unix counterparts.
# For example, if `g' is `g' then troff will be installed as
# gtroff. This doesn't affect programs like grops or groff that have
# no Unix counterparts. Note that the groff versions of eqn and tbl
# will not work with Unix troff.
g=@g@
# Common prefix for installation directories.
# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
# This must already exist when you do make install.
prefix=@prefix@
exec_prefix=@exec_prefix@
# `bindir' says where to install executables.
bindir=@bindir@
# `libdir' says where to install platform-dependent data.
libdir=@libdir@
libprogramdir=$(libdir)/groff
# `datasubdir' says where to install platform-independent data files.
datadir=@datadir@
dataprogramdir=$(datadir)/groff
datasubdir=$(dataprogramdir)/$(version)$(revision)
# `infodir' says where to install info files.
infodir=@infodir@
# `docdir' says where to install documentation files.
docdir=$(datadir)/doc/groff/$(version)$(revision)
# `exampledir' says where to install example files.
exampledir=$(docdir)/examples
# `htmldocdir' says where to install documentation in HTML format.
htmldocdir=$(docdir)/html
# `pdfdocdir' says where to install documentation in PDF format.
pdfdocdir=$(docdir)/pdf
# `fontdir' says where to install dev*/*.
fontdir=$(datasubdir)/font
# `localfontdir' says where local fonts will be installed (as dev*/*).
localfontdir=$(dataprogramdir)/site-font
# `legacyfontdir' is for compatibility with non-GNU troff.
legacyfontdir=/usr/lib/font
# `fontpath' says where to look for dev*/*.
fontpath=$(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
# `tmacdir' says where to install macros.
tmacdir=$(datasubdir)/tmac
# `systemtmacdir' says where to install platform-dependent macros.
systemtmacdir=$(libprogramdir)/site-tmac
# `localtmacdir' says where local files will be installed.
localtmacdir=$(dataprogramdir)/site-tmac
# `appresdir' says where to install the application resource file for
# gxditview.
appresdir=@appresdir@
# `tmacpath' says where to look for macro files.
# The current directory will be prepended in unsafe mode only; the home
# directory will be always added.
# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
# current nor in the home directory.
tmacpath=$(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
# `sys_tmac_prefix' is prefix (if any) for system macro packages.
sys_tmac_prefix=@sys_tmac_prefix@
# `pnmtops_nosetpage' is the command to be run to generate an eps
# file. Some versions of pnmtops provide the -nosetpage option.
# We detect this and use it if present.
pnmtops_nosetpage=@pnmtops_nosetpage@
# `tmac_wrap' is list of system macro packages that should be made
# available to groff by creating a corresponding macro package
# in the groff macro directory that references the system macro
# package.
tmac_wrap=@tmac_wrap@
# If there is a groff version of a macro package listed in $(tmac_wrap),
# then the groff version will be installed with a prefix of this.
# Don't make this empty.
tmac_prefix=g
# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
tmac_m_prefix=\
`for i in $(tmac_wrap) ""; do case "$$i" in m) echo $(tmac_prefix);; esac; done`
# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
tmac_s_prefix=\
`for i in $(tmac_wrap) ""; do case "$$i" in s) echo $(tmac_prefix);; esac; done`
# The groff -man macros will be available as -m$(tmac_an_prefix)an.
tmac_an_prefix=\
`for i in $(tmac_wrap) ""; do case "$$i" in an) echo $(tmac_prefix);; esac; done`
# Extension to be used for refer index files. Index files are not
# sharable between different architectures, so you might want to use
# different suffixes for different architectures. Choose an extension
# that doesn't conflict with refer or any other indexing program.
indexext=.i
# Directory containing the default index for refer.
indexdir=/usr/dict/papers
# The filename (without suffix) of the default index for refer.
indexname=Ind
# common_words_file is a file containing a list of common words.
# If your system provides /usr/lib/eign it will be copied onto this,
# otherwise the supplied eign file will be used.
common_words_file=$(datasubdir)/eign
# `manroot' is the root of the man page directory tree.
mandir=@mandir@
manroot=$(mandir)
# `man1ext' is the man section for user commands.
man1ext=1
man1dir=$(manroot)/man$(man1ext)
# `man5ext' is the man section for file formats.
man5ext=5
man5dir=$(manroot)/man$(man5ext)
# `man7ext' is the man section for macros.
man7ext=7
man7dir=$(manroot)/man$(man7ext)
# The configure script checks whether all necessary utility programs for
# grohtml are available -- only then we can build the HTML documentation.
make_html=@make_html@
make_install_html=@make_install_html@
# The configure script also checks whether all necessary utility programs
# for pdfroff are available -- only then we can build PDF documentation.
make_pdfdoc=@make_pdfdoc@
make_install_pdfdoc=@make_install_pdfdoc@
# DEFINES should include the following:
# -DHAVE_MMAP if you have mmap() and <sys/mman.h>
# -DARRAY_DELETE_NEEDS_SIZE if your C++ doesn't understand `delete []'
# -DSYS_SIGLIST_DECLARED if you have sys_siglist[]
# -DWCOREFLAG=0200 if the 0200 bit of the status returned by
# wait() indicates whether a core image was
# produced for a process that was terminated
# by a signal
#
# -DHAVE_DIRENT_H if you have <dirent.h>
# -DHAVE_LIMITS_H if you have <limits.h>
# -DHAVE_CC_LIMITS_H if you have a C++ <limits.h>
# -DHAVE_MATH_H if you have <math.h>
# -DHAVE_CC_OSFCN_H if you have a C++ <osfcn.h>
# -DHAVE_CC_INTTYPES_H if you have a C++ <inttypes.h>
# -DHAVE_STDLIB_H if you have <stdlib.h>
# -DHAVE_STRING_H if you have <string.h>
# -DHAVE_STRINGS_H if you have <strings.h>
# -DHAVE_SYS_DIR_H if you have <sys/dir.h>
# -DHAVE_SYS_TIME_H if you have <sys/time.h>
# -DHAVE_UNISTD_H if you have <unistd.h>
#
# -DHAVE_FMOD if you have fmod()
# -DHAVE_GETCWD if you have getcwd()
# -DHAVE_GETTIMEOFDAY if you have gettimeofday()
# -DHAVE_ISATTY if you have isatty()
# -DHAVE_KILL if you have kill()
# -DHAVE_MKSTEMP if you have mkstemp()
# -DHAVE_MMAP if you have mmap()
# -DHAVE_PUTENV if you have putenv()
# -DHAVE_RENAME if you have rename()
# -DHAVE_SETLOCALE if you have setlocale()
# -DHAVE_SNPRINTF if you have snprintf()
# -DHAVE_STRCASECMP if you have strcasecmp()
# -DHAVE_STRNCASECMP if you have strncasecmp()
# -DHAVE_STRERROR if you have strerror()
# -DHAVE_STRSEP if you have strsep()
# -DHAVE_STRTOL if you have strtol()
# -DHAVE_VSNPRINTF if you have vsnprintf()
#
# -DNEED_DECLARATION_GETTIMEOFTODAY
# if your C++ <sys/time.h> doesn't declare
# gettimeofday()
# -DNEED_DECLARATION_HYPOT if your C++ <math.h> doesn't declare hypot()
# -DNEED_DECLARATION_PCLOSE if your C++ <stdio.h> doesn't declare pclose()
# -DNEED_DECLARATION_POPEN if your C++ <stdio.h> doesn't declare popen()
# -DNEED_DECLARATION_PUTENV if your C++ <stdlib.h> doesn't declare
# putenv()
# -DNEED_DECLARATION_RAND if your C++ <stdlib.h> doesn't declare rand()
# -DNEED_DECLARATION_SNPRINTF if your C++ <stdio.h> doesn't declare
# snprintf()
# -DNEED_DECLARATION_SRAND if your C++ <stdlib.h> doesn't declare srand()
# -DNEED_DECLARATION_STRCASECMP if your C++ <string.h> doesn't declare
# strcasecmp()
# -DNEED_DECLARATION_STRNCASECMP
# if your C++ <string.h> doesn't declare
# strncasecmp()
# -DNEED_DECLARATION_VFPRINTF if your C++ <stdio.h> doesn't declare
# vfprintf()
# -DNEED_DECLARATION_VSNPRINTF if your C++ <stdio.h> doesn't declare
# vsnprintf()
#
# -DRET_TYPE_SRAND_IS_VOID if srand() returns void not int
# -DHAVE_SYS_NERR if you have sysnerr in <errno.h> or <stdio.h>
# -DHAVE_SYS_ERRLIST if you have sys_errlist in <errno.h> or
# <stdio.h>
# -DTRADITIONAL_CPP if your C++ compiler uses a traditional
# (Reiser) preprocessor
# -DLONG_FOR_TIME_T if localtime() takes a long * not a time_t *
# -DHAVE_STRUCT_EXCEPTION if <math.h> defines struct exception
# -DRETSIGTYPE=int if signal handlers return int not void
# -DIS_EBCDIC_HOST if the host's encoding is EBCDIC
# -DPAGE=A4 if the the printer's page size is A4
# -DGHOSTSCRIPT=gs the name (and directory if required) of the
# ghostscript program
DEFINES=@DEFS@
# Include
#
# {fmod,getcwd,mkstemp,putenv,snprintf,strcasecmp,
# strerror,strncasecmp,strtol}.$(OBJEXT)
#
# in LIBOBJS if your C library is missing the corresponding function.
# vsnprintf is defined in the snprintf.$(OBJEXT) module.
LIBOBJS=@LIBOBJS@
# `CCC' is the compiler for C++ (.cpp) files.
CCC=@CXX@
CC=@CC@
# CCDEFINES are definitions for C++ compilations.
CCDEFINES=$(DEFINES)
# CDEFINES are definitions for C compilations.
CDEFINES=$(DEFINES)
CCFLAGS=@CXXFLAGS@
CFLAGS=@CFLAGS@
CPPFLAGS=@CPPFLAGS@
LDFLAGS=@LDFLAGS@
X_CFLAGS=@X_CFLAGS@
X_LIBS=@X_LIBS@
X_EXTRA_LIBS=@X_EXTRA_LIBS@
X_PRE_LIBS=@X_PRE_LIBS@
YACC=@YACC@
YACCFLAGS=-v
EXEEXT=@EXEEXT@
OBJEXT=@OBJEXT@
# a simple heuristic assumption
LIBEXT=`case $(OBJEXT) in obj) echo lib;; *) echo a;; esac`
LIBS=@LIBS@
LIBM=@LIBM@
RANLIB=@RANLIB@
INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_SCRIPT=@INSTALL_SCRIPT@
INSTALL_DATA=@INSTALL_DATA@
INSTALL_INFO=@INSTALL_INFO@
LN_S=@LN_S@
AR=ar
ETAGS=etags
ETAGSFLAGS=
# Flag that tells etags to assume C++.
ETAGSCCFLAG=-C
# Full path to perl.
PERLPATH=@PERLPATH@
# Sed command with which to edit sh scripts.
SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@
# Sed script to deal with OS dependencies in sh scripts.
SH_DEPS_SED_SCRIPT=$(top_builddir)/arch/misc/shdeps.sed
# The program to create directory hierarchies.
mkinstalldirs= $(SHELL) $(top_srcdir)/mkinstalldirs
PURIFY=purify
PURIFYCCFLAGS=
#PURIFYCCFLAGS=-g++=yes \
# -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
# Passing down MAKEOVERRIDES prevents $(MAKE) from containing a second
# copy of $(MDEFINES) when making individual directories; this could
# cause the argument list to become too long on some systems.
MDEFINES= \
"ALT_AWK_PROGS=$(ALT_AWK_PROGS)" \
"ALT_GHOSTSCRIPT_PROGS=$(ALT_GHOSTSCRIPT_PROGS)" \
"AR=$(AR)" \
"BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
"CC=$(CC)" \
"CCC=$(CCC)" \
"CCDEFINES=$(CCDEFINES)" \
"CCFLAGS=$(CCFLAGS)" \
"CDEFINES=$(CDEFINES)" \
"CFLAGS=$(CFLAGS)" \
"CPPFLAGS=$(CPPFLAGS)" \
"DEVICE=$(DEVICE)" \
"DVIPRINT=$(DVIPRINT)" \
"ETAGS=$(ETAGS)" \
"ETAGSCCFLAG=$(ETAGSCCFLAG)" \
"ETAGSFLAGS=$(ETAGSFLAGS)" \
"EXEEXT=$(EXEEXT)" \
"INSTALL_DATA=$(INSTALL_DATA)" \
"INSTALL_INFO=$(INSTALL_INFO)" \
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
"LDFLAGS=$(LDFLAGS)" \
"LIBEXT=$(LIBEXT)" \
"LIBM=$(LIBM)" \
"LIBOBJS=$(LIBOBJS)" \
"LIBS=$(LIBS)" \
"MAKEOVERRIDES=$(MAKEOVERRIDES)" \
"OBJEXT=$(OBJEXT)" \
"OTHERDEVDIRS=$(OTHERDEVDIRS)" \
"PAGE=$(PAGE)" \
"GHOSTSCRIPT=$(GHOSTSCRIPT)" \
"PERLPATH=$(PERLPATH)" \
"PSPRINT=$(PSPRINT)" \
"PURIFY=$(PURIFY)" \
"PURIFYCCFLAGS=$(PURIFYCCFLAGS)" \
"RANLIB=$(RANLIB)" \
"RT_SEP=$(RT_SEP)" \
"SH_SEP=$(SH_SEP)" \
"SHELL=$(SHELL)" \
"SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
"SH_DEPS_SED_SCRIPT=$(SH_DEPS_SED_SCRIPT)" \
"TTYDEVDIRS=$(TTYDEVDIRS)" \
"XDEVDIRS=$(XDEVDIRS)" \
"XLIBDIRS=$(XLIBDIRS)" \
"XPROGDIRS=$(XPROGDIRS)" \
"X_CFLAGS=$(X_CFLAGS)" \
"X_LIBS=$(X_LIBS)" \
"X_EXTRA_LIBS=$(X_EXTRA_LIBS)" \
"X_PRE_LIBS=$(X_PRE_LIBS)" \
"YACC=$(YACC)" \
"YACCFLAGS=$(YACCFLAGS)" \
"appresdir=$(appresdir)" \
"bindir=$(bindir)" \
"common_words_file=$(common_words_file)" \
"datadir=$(datadir)" \
"dataprogramdir=$(dataprogramdir)" \
"datasubdir=$(datasubdir)" \
"docdir=$(docdir)" \
"exampledir=$(exampledir)" \
"exec_prefix=$(exec_prefix)" \
"fontdir=$(fontdir)" \
"fontpath=$(fontpath)" \
"g=$(g)" \
"htmldocdir=$(htmldocdir)" \
"pdfdocdir=$(pdfdocdir)" \
"indexdir=$(indexdir)" \
"indexext=$(indexext)" \
"indexname=$(indexname)" \
"infodir=$(infodir)" \
"legacyfontdir=$(legacyfontdir)" \
"libdir=$(libdir)" \
"libprogramdir=$(libprogramdir)" \
"localfontdir=$(localfontdir)" \
"localtmacdir=$(localtmacdir)" \
"make_html=$(make_html)" \
"make_install_html=$(make_install_html)" \
"make_pdfdoc=$(make_pdfdoc)" \
"make_install_pdfdoc=$(make_install_pdfdoc)" \
"man1dir=$(man1dir)" \
"man1ext=$(man1ext)" \
"man5dir=$(man5dir)" \
"man5ext=$(man5ext)" \
"man7dir=$(man7dir)" \
"man7ext=$(man7ext)" \
"manroot=$(manroot)" \
"mkinstalldirs=$(mkinstalldirs)" \
"prefix=$(prefix)" \
"revision=$(revision)" \
"sys_tmac_prefix=$(sys_tmac_prefix)" \
"pnmtops_nosetpage=$(pnmtops_nosetpage)" \
"systemtmacdir=$(systemtmacdir)" \
"tmac_an_prefix=$(tmac_an_prefix)" \
"tmac_m_prefix=$(tmac_m_prefix)" \
"tmac_s_prefix=$(tmac_s_prefix)" \
"tmac_wrap=$(tmac_wrap)" \
"tmacdir=$(tmacdir)" \
"tmacpath=$(tmacpath)" \
"top_builddir=$(top_builddir)" \
"top_srcdir=$(top_srcdir)" \
"version=$(version)"
INCDIRS=src/include
LIBDIRS=\
src/libs/libgroff \
src/libs/libdriver \
src/libs/libbib \
$(XLIBDIRS)
CCPROGDIRS=\
src/roff/groff \
src/roff/troff \
src/preproc/tbl \
src/preproc/pic \
src/preproc/eqn \
src/preproc/grn \
src/preproc/refer \
src/preproc/soelim \
src/preproc/html \
src/devices/grops \
src/devices/grotty \
src/devices/grodvi \
src/devices/grolj4 \
src/devices/grohtml \
src/devices/grolbp \
src/utils/tfmtodit \
src/utils/hpftodit \
src/utils/lookbib \
src/utils/indxbib \
src/utils/lkbib \
src/utils/addftinfo
CPROGDIRS=\
src/utils/pfbtops \
$(XPROGDIRS)
PROGDEPDIRS=arch/misc
PROGDIRS=$(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS)
DEVDIRS=\
font/devps \
font/devdvi \
font/devhtml
ALLTTYDEVDIRS=\
font/devascii \
font/devlatin1 \
font/devutf8 \
font/devcp1047
# `doc' must be processed before `contrib/pdfmark'.
OTHERDIRS=\
man \
tmac \
src/utils/afmtodit \
src/roff/grog \
src/roff/nroff \
doc \
contrib/mm \
contrib/pic2graph \
contrib/eqn2graph \
contrib/grap2graph \
contrib/groffer \
contrib/mom \
contrib/pdfmark \
contrib/gdiffmk
ALLDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) \
$(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS) $(OTHERDIRS)
EXTRADIRS=\
font/devps/generate \
font/devdvi/generate \
font/devlj4/generate \
doc
NOMAKEDIRS=\
arch/djgpp \
contrib/mm/examples \
contrib/mm/mm \
contrib/mom/examples \
contrib/mom/momdoc \
contrib/gdiffmk/tests \
src/libs/snprintf
DISTDIRS=\
$(INCDIRS) $(LIBDIRS) $(PROGDIRS) $(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) \
$(ALLTTYDEVDIRS) $(OTHERDIRS) $(EXTRADIRS) $(NOMAKEDIRS)
TARGETS=all install install_bin install_data clean distclean mostlyclean \
realclean extraclean distfiles TAGS depend uninstall_sub
# This ENVSETUP gork is required by the DJGPP build on Windows 9X,
# where Make needs to be case-sensitive to find files like BI and VERSION.
ENVSETUP=\
if test -f $(srcdir)/makefile.ccpg* && \
test -f $(srcdir)/Makefile.ccpg*; then \
FNCASE=y; export FNCASE; \
else :; \
fi
do=all
dodirs=$(ALLDIRS) dot
# Default target for subdir_Makefile
subdir=src/roff/troff
$(TARGETS):
@$(ENVSETUP); $(MAKE) $(MDEFINES) do=$@ $(dodirs)
dot: FORCE
@$(ENVSETUP); \
$(MAKE) $(MDEFINES) srcdir=$(srcdir) VPATH=$(srcdir) \
-f $(top_srcdir)/Makefile.comm \
-f $(top_srcdir)/Makefile.sub $(do)
$(LIBDIRS): FORCE
@$(ENVSETUP); \
if test $(srcdir) = .; then \
srcdir=.; \
else \
srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
test -f Makefile.dep || touch Makefile.dep; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-f $(top_srcdir)/Makefile.comm \
-f $$srcdir/Makefile.sub \
-f $(top_srcdir)/Makefile.lib \
-f Makefile.dep $(do)
$(CPROGDIRS): FORCE
@$(ENVSETUP); \
if test $(srcdir) = .; then \
srcdir=.; \
else \
srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
test -f Makefile.dep || touch Makefile.dep; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-f $(top_srcdir)/Makefile.comm \
-f $$srcdir/Makefile.sub \
-f $(top_srcdir)/Makefile.cpg \
-f Makefile.dep $(do)
$(CCPROGDIRS): FORCE
@$(ENVSETUP); \
if test $(srcdir) = .; then \
srcdir=.; \
else \
srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
test -f Makefile.dep || touch Makefile.dep; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-f $(top_srcdir)/Makefile.comm \
-f $$srcdir/Makefile.sub \
-f $(top_srcdir)/Makefile.ccpg \
-f Makefile.dep $(do)
$(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS): FORCE
@$(ENVSETUP); \
if test $(srcdir) = .; then \
srcdir=.; \
else \
srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-f $(top_srcdir)/Makefile.comm \
-f $$srcdir/Makefile.sub \
-f $(top_srcdir)/Makefile.dev $(do)
$(INCDIRS) $(PROGDEPDIRS) $(OTHERDIRS): FORCE
@$(ENVSETUP); \
if test $(srcdir) = .; then \
srcdir=.; \
else \
srcdir=`cd $(srcdir); pwd`/$@; \
fi; \
test -d $@ || $(mkinstalldirs) $@; \
cd $@; \
$(MAKE) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-f $(top_srcdir)/Makefile.comm \
-f $$srcdir/Makefile.sub \
-f $(top_srcdir)/Makefile.man $(do)
.PHONY: dist
dist:
-rm -fr tmp
rm -f groff-$(version)$(revision).tar.gz
mkdir tmp
for d in $(DISTDIRS); do \
$(mkinstalldirs) tmp/$$d; \
done
srcdir=`cd $(srcdir); pwd`; \
cd tmp; \
$(LN_S) ../Makefile .; \
$(LN_S) $$srcdir/* . 2>/dev/null || true; \
rm -rf CVS; \
for d in $(DISTDIRS); do \
(cd $$d; \
$(LN_S) $$srcdir/$$d/* . 2>/dev/null; \
rm -rf CVS || true); \
done; \
$(MAKE) srcdir=. VPATH=. distfiles; \
$(MAKE) srcdir=. VPATH=. extraclean; \
for d in $(EXTRADIRS); do \
(cd $$d; \
if test -f Makefile; then \
$(MAKE) extraclean; \
else \
$(MAKE) -f $(top_builddir)/$$d/Makefile extraclean; \
fi); \
done; \
rm -f Makefile; \
$(LN_S) $$srcdir/Makefile.init Makefile
mv tmp groff-$(version)$(revision)
tar cfh - groff-$(version)$(revision) | \
gzip -c >groff-$(version)$(revision).tar.gz
rm -fr groff-$(version)$(revision)
# $(PROGDIRS): libgroff
# grops grotty grodvi: libdriver
# refer lookbib indxbib lkbib: libbib
# $(LIBDIRS) $(PROGDIRS): include
.PHONY: $(ALLDIRS) dot $(TARGETS) FORCE
# Create a Makefile in $(subdir). This is useful for development since it
# avoids running make recursively.
subdir_Makefile: Makefile.cfg
$(MAKE) do=Makefile $(subdir)
Makefile.cfg: Makefile
>Makefile.cfg
for var in $(MDEFINES); do \
echo "$$var" >>Makefile.cfg; \
done
Makefile: Makefile.in
$(SHELL) config.status
.PHONY: uninstall
uninstall: uninstall_sub uninstall_dirs
.PHONY: uninstall_dirs
uninstall_dirs:
# Use `rmdir' here so that the directories are only removed if they are empty.
-rmdir $(man1dir) $(man5dir) $(man7dir) $(manroot) \
$(tmacdir) $(systemtmacdir) $(localtmacdir) \
$(fontdir) $(localfontdir) $(bindir) \
$(datasubdir) $(dataprogramdir) $(infodir) \
$(exampledir) $(htmldocdir) $(pdfdocdir) $(docdir) \
$(libprogramdir) $(libdir) \
$(datadir)/doc/groff $(datadir)/doc $(datadir) 2>/dev/null || :
.PHONY: check docheck
check: site.exp docheck
docheck:
if $(SHELL) -c "runtest --version" > /dev/null 2>&1; then \
runtest; \
else \
echo "WARNING: could not find \`runtest'" 1>&2; \
fi
# This snippet has been taken from the automake package.
site.exp:
@echo "Making a new site.exp file..."
@echo "## these variables are automatically generated by make ##" >site.tmp
@echo "# Do not edit here. If you wish to override these values" >>site.tmp
@echo "# edit the last section" >>site.tmp
@echo "set tool groff" >>site.tmp
@echo "set srcdir $(srcdir)/testsuite" >>site.tmp
@echo "set objdir `pwd`" >> site.tmp
@echo "## All variables above are generated by configure. Do not edit! ##" >> site.tmp
@test ! -f site.exp \
|| sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
@-rm -f site.bak
@test ! -f site.exp || mv site.exp site.bak
@mv site.tmp site.exp
FORCE:
.NOEXPORT:

25
Makefile.init Normal file
View File

@ -0,0 +1,25 @@
# Copyright (C) 1989-2000 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
SHELL=/bin/sh
.PHONY: all
all:
$(SHELL) configure
$(MAKE) all

20
Makefile.lib Normal file
View File

@ -0,0 +1,20 @@
LIBCLEAN=lib$(LIB).$(LIBEXT)
MAKEFILEPARTS=\
$(top_srcdir)/Makefile.comm \
$(top_builddir)/Makefile.cfg \
$(srcdir)/Makefile.sub \
$(top_srcdir)/Makefile.lib \
Makefile.dep
all: lib$(LIB).$(LIBEXT)
lib$(LIB).$(LIBEXT): $(OBJS)
$(AR) r $@ $?
$(RANLIB) $@
depend: depend_src
depend.temp: $(GENSRCS)
TAGS: $(CCSRCS) $(CSRCS)
Makefile: $(MAKEFILEPARTS)
Makefile.dep:
touch Makefile.dep

5
Makefile.man Normal file
View File

@ -0,0 +1,5 @@
all: $(MANPAGES)
install_data: install_man
install_man: $(MANPAGES)
uninstall_sub: uninstall_man
$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION

35
Makefile.sub Normal file
View File

@ -0,0 +1,35 @@
DISTCLEANFILES=\
config.status \
config.log \
config.cache \
stamp-h \
Makefile \
test-groff \
src/include/config.h \
site.exp \
site.bak \
groff.sum \
groff.log
CLEANADD=Makefile.cfg conftest*
distfiles: configure
$(scrdir)/configure: configure.ac aclocal.m4
cd $(srcdir) && autoconf
config.status: configure
$(SHELL) config.status --recheck
# autoheader might not change config.hin, so touch a stamp file.
$(srcdir)/config.hin: stamp-h.in
$(srcdir)/stamp-h.in: configure.ac aclocal.m4
cd $(srcdir) && autoheader
echo timestamp > $(srcdir)/stamp-h.in
config.h: stamp-h
stamp-h: config.hin config.status
$(SHELL) config.status
# Always create the site-font directory as a guide to the user.
install_data:
-test -d $(localfontdir) || $(mkinstalldirs) $(localfontdir)

2307
NEWS Normal file

File diff suppressed because it is too large Load Diff

916
PROBLEMS Normal file
View File

@ -0,0 +1,916 @@
This file describes various problems that have been encountered in
compiling, installing and running groff. Suggestions for additions or
other improvements to this file are welcome.
----------------------------------------------------------------------
Generic Problems
================
* Displaying a man page on a terminal with/without my favourite pager
only gives garbage.
groff by default now uses SGR escape sequences (`ANSI color') to
control the display attributes (bold, underlined, colour) on TTYs.
Some terminals (e.g. `kterm') don't understand SGR, and some pagers
(e.g. older versions of `less' or `less' without the -R option) don't
understand SGR either. There are three solutions to fix this, in order
of preference; please read the grotty man page for more details.
The fourth and probably best option is to update your terminal program
and pager to versions which can handle SGR.
1. Set the GROFF_NO_SGR environment variable.
2. Pass option -c to grotty.
3. Append the following fragment to the `troffrc' file:
--- start ---
.if n \{\
. nr _C \n(.C
. cp 0
.
. \" The following code sets a top-of-page trap to disable grotty's TTY
. \" mode. Since neither \X nor .output can be used before the first
. \" page has started, we must use a trap. To make it work with troff's
. \" -o option, we wait until the first printed page.
.
. de sgr@dummy
. .
.
. rn wh wh@old
.
. \" The stand-alone version. If no other trap is set, we can safely
. \" insert the truncated vertical space caused by the trap (if any).
. \" Otherwise we assume that the document's main macro package takes
. \" care of that. As soon as the trap has been executed, it is removed.
. de1 no@sgr
. if \\n[.P] \{\
. if (\\n[.t] == \\n[.p]) \{\
. rn wh@old wh
. rm no@sgr
. wh 0
. sp \\n[.trunc]
. nop \X'tty: sgr 0'
. sp -1
. \}\}
. .
.
. wh@old 0 no@sgr
.
. \" The piggyback version to be appended to macros planted with the
. \" modified `wh' request.
. de1 no@sgr1
. if \\n[.P] \{\
. rn wh@old wh
. ds no@sgr1
. nop \X'tty: sgr 0'
. sp -1
. \}
. .
.
. \" We redefine the `wh' request so that `no@sgr1' is appended to
. \" the trap macro.
. de1 wh
. am1 \\$2 sgr@dummy
. no@sgr1
. sgr@dummy
. wh@old \\$1 \\$2
. .
.
. cp \n[_C]
.\}
--- end ---
----------------------------------------------------------------------
* The UTF-8 output of grotty has strange characters for the minus, the
hyphen, and the right quote. Why?
The used Unicode characters (U+2212 for the minus sign and U+2010 for
the hyphen) are the correct ones, but many programs can't search them
properly. The same is true for the right quote (U+201D). To map those
characters back to the ASCII characters, insert the following code
snippet into the `troffrc' configuration file:
.if '\*[.T]'utf8' \{\
. char \- \N'45'
. char - \N'45'
. char ' \N'39'
.\}
----------------------------------------------------------------------
* My document says that the current year is 19100, not 2000.
In groff, as in traditional troff, the yr number register yields the
year minus 1900. Unfortunately, there is a longstanding bug in the
Troff User's Manual <http://cm.bell-labs.com/cm/cs/cstr/54.ps.gz>,
which incorrectly claims that yr is the last two digits of the year.
This claim was never true of either Unix troff or of groff.
If your text looks like this:
.\" Wrong:
This document was formatted in 19\n(yr.
you can correct it as follows:
This document was formatted in \n[year].
or, if you want to be portable to older troff versions, as follows:
.nr y4 1900+\n(yr
This document was formatted in \n(y4.
----------------------------------------------------------------------
* groff can't handle my troff document. It works fine with AT&T
troff.
Read the section on incompatibilities in groff_diff(7). Try using
the -C option. Alternatively there's the sed script
`tmac/fixmacros.sed' which will attempt to edit a file of macros so
that it can be used with groff without the -C flag.
----------------------------------------------------------------------
* gtroff doesn't understand lines like `.ce99' with no space between
the name of the request or macro and the arguments.
gtroff requires a space between macro or request and its arguments
because it allows the use of long names for macros and requests. You
can use the -C option or the `cp' request to put gtroff into a
compatibility mode in which it is not possible to use long names for
macros but in which no space is required between macros and their
arguments. The use of compatibility mode is strongly discouraged.
----------------------------------------------------------------------
* groff -Tdvi produces dvi files that use fonts at weird
magnifications.
Yes, it does. You may need to compile fonts with Metafont at these
magnifications. The CompileFonts script in the devdvi/generate
directory may help you to do this. (It will take a *long* time on
slow computers.)
----------------------------------------------------------------------
* Groff doesn't use the font names I'm used to.
Use the `ftr' request. See groff_diff(7).
----------------------------------------------------------------------
* pic output is not centered horizontally; pictures sometimes run off
the bottom of the page.
The macro package you are using is not supplying appropriate
definitions of PS and PE. Give groff a -mpic option.
----------------------------------------------------------------------
* gpic doesn't accept the syntax `chop N M' for chopping both ends of
a line.
The correct syntax is `chop N chop M'.
----------------------------------------------------------------------
* With gpic -t, when I print `line ->; box' using a dvi to ps program,
the arrow head sticks through into the inside of the box.
The dvi to ps program should be modified to set the line cap and line
join parameters to 1 while printing tpic specials.
----------------------------------------------------------------------
* gtroff gives warnings about lines like
.ev \" a comment
(with a tab after the .ev).
A tab character cannot be used as a substitute for a space character
(except in one case: between a control character at the beginning of a
line and the name of a macro or request). For example, in Unix troff
.ps \" restore the previous point size
(with a tab after the .ps) will NOT restore the previous point-size;
instead it will be silently ignored. Since this is very likely to be
an error, gtroff can give a warning about it. If you want to align
comments, you can do it like this:
.ev\" \" a comment
----------------------------------------------------------------------
* I don't like the page headers and footers produced by groff -man.
There seem to be many different styles of page header and footer
produced by different versions of the -man macros. You will need to
put modified macros from tmac/an-old.tmac into man.local. More
information is available in groff_man(7).
----------------------------------------------------------------------
* Where can I get grap?
Ted Faber <faber@lunabase.org> has written a freely available grap:
http://www.lunabase.org/~faber/Vault/software/grap/
----------------------------------------------------------------------
* The \n(st and \n(sb registers don't seem to work. I thought \w set
them to the height and depth of its argument, but the registers
always seem to be 0.
\n(st and \n(sb aren't supposed to give the height and depth of the
string rather they give the minimum and maximum vertical displacement
of the baseline. For example for \v'2u'\v'-3u', \n(st will be 1 and
\n(sb will be -2. The height and depth of the string is available in
the \n[rst] and \n[rsb] registers: these are groff extensions.
----------------------------------------------------------------------
* While formatting a manual page, groff complains about not being able
to break lines. The problem seems to be caused by a line like:
.TP \w'label'+2
The -man documentation says that the default scale indicator for TP
macro is `n'. The groff -man macros implement this correctly, so that
the argument will be evaluated as if it were
\w'label'n+2n
The Unix -man macros don't implement this correctly (probably because
it's hard to do in Unix troff); they just append `n' to the entire
argument, so that it will be evaluated as if it were
\w'label'u+2n
The solution is to fix the manual page:
.TP \w'label'u+2
----------------------------------------------------------------------
* I'm having problems formatting man pages produced by the perl
wrapman script.
Some versions of wrapman have a superfluous blank line before the .TH
line. This must be deleted. Then either use groff -C, or apply the
following patch:
*** wrapman.~2~ Sun Jan 19 12:10:24 1992
--- wrapman Tue Aug 10 02:06:41 1993
***************
*** 35,41 ****
$line1 .= <IN> if $line1 =~ /eval/;
$line1 .= <IN> if $line1 =~ /argv/;
$line2 = <IN>;
! next if $line2 eq "'di';\n";
# Pull the old switcheroo.
--- 35,41 ----
$line1 .= <IN> if $line1 =~ /eval/;
$line1 .= <IN> if $line1 =~ /argv/;
$line2 = <IN>;
! next if $line2 eq "'di ';\n" || $line2 eq "'di';\n";
# Pull the old switcheroo.
***************
*** 49,56 ****
print OUT $line1;
print OUT <<EOF;
! 'di';
! 'ig00';
#
# $header
#
--- 49,58 ----
print OUT $line1;
print OUT <<EOF;
! 'di ';
! 'ds 00 \\"';
! 'eo ';
! 'ig 00 ';
#
# $header
#
***************
*** 72,85 ****
# These next few lines are legal in both Perl and nroff.
! $null.00; # finish .ig
'di \\" finish diversion--previous line must be blank
.nr nl 0-1 \\" fake up transition to first page again
.nr % 0 \\" start at page 1
! '; __END__ ##### From here on it's a standard manual page #####
.TH $PROG 1 "$month $mday, 19$year"
- .AT 3
.SH NAME
$prog \\- whatever
.SH SYNOPSIS
--- 74,87 ----
# These next few lines are legal in both Perl and nroff.
! $null.00 ; # finish .ig
! 'ec \\';
'di \\" finish diversion--previous line must be blank
.nr nl 0-1 \\" fake up transition to first page again
.nr % 0 \\" start at page 1
! .\\"'; __END__ ##### From here on it's a standard manual page #####
.TH $PROG 1 "$month $mday, 19$year"
.SH NAME
$prog \\- whatever
.SH SYNOPSIS
----------------------------------------------------------------------
* groff uses up an enormous amount of memory processing large files.
I'm using 386BSD 0.1.
386BSD includes an old version of g++, 1.39, which has a bug that
causes a major memory leak in gtroff. Apply the following fix to g++
and recompile groff:
*** cplus-decl.c.~1~ Mon Aug 6 05:28:59 1990
--- cplus-decl.c Wed Jun 5 08:55:04 1991
***************
*** 7951,7961 ****
/* At the end, call delete if that's what's requested. */
if (TREE_GETS_DELETE (current_class_type))
exprstmt = build_method_call (build1 (NOP_EXPR, TYPE_POINTER_TO (current_class_type), error_mark_node),
get_identifier (OPERATOR_DELETE_FORMAT),
! build_tree_list (NULL_TREE, integer_zero_node),
NULL_TREE, LOOKUP_NORMAL);
else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
exprstmt = build_x_delete (ptr_type_node, current_class_decl, 0);
else
exprstmt = 0;
--- 7951,7961 ----
/* At the end, call delete if that's what's requested. */
if (TREE_GETS_DELETE (current_class_type))
exprstmt = build_method_call (build1 (NOP_EXPR, TYPE_POINTER_TO (current_class_type), error_mark_node),
get_identifier (OPERATOR_DELETE_FORMAT),
! build_tree_list (NULL_TREE, current_class_decl),
NULL_TREE, LOOKUP_NORMAL);
else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
exprstmt = build_x_delete (ptr_type_node, current_class_decl, 0);
else
exprstmt = 0;
Printing and Display Problems
=============================
* I'm having problems including PostScript illustrations (EPS) using
the PSPIC macro and/or \X'ps: import ...'.
A PostScript document must meet three requirements in order to be
included with the PSPIC macro: it must comply with the Adobe Document
Structuring Conventions; it must contain a BoundingBox line; it must
be `well-behaved'. The BoundingBox line should be of the form:
%%BoundingBox: llx lly urx ury
where llx, lly, urx, ury are the coordinates of the lower left x,
lower left y, upper right x, upper right y of the bounding box of
marks on the page expressed as integers in the default PostScript
coordinate system (72 units per inch, origin at bottom left corner).
The most convenient program to get the bounding box of a document is
the `ps2epsi' script coming with GhostScript.
If you can't use this program, another useful tactic is to print out
the illustration by itself (you may need to add a `showpage' at the
end), and physically measure the bounding box. For more detail on
these requirements, read the specification of Encapsulated PostScript
format. (This is available from the Adobe file server; send a message
with a body of `help' to ps-file-server@adobe.com.)
If an EPS file to be included via \X'ps: import' does not start with
`%!PS-Adobe-...', gtroff will still include the file, but grops will
not add any fonts to the generated output file that are listed in the
EPS file, even though the files are listed in the `download' file and
are available in the devps directory.
----------------------------------------------------------------------
* I've configured groff for A4 paper, but gtroff still seems to think
that the length of a page (as returned by `\n(.p') is 11 inches.
This is intentional. The PAGE option during configuration is used
only by grops. For compatibility with ditroff, the default page
length in gtroff is always 11 inches. The page length can be changed
with the `pl' request.
A convenient way to set paper dimensions is to use the -dpaper option
of groff, together with proper -P options for the postprocessor
(overriding the default). For example, use the following for PS
output on A4 paper in landscape orientation:
groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
See groff_tmac(5) for more information.
----------------------------------------------------------------------
* When I print the output of groff -Tps, the output is always shifted
up by about 0.7 inches; I'm using 8.5x11 inch paper.
Make sure that the paper size is `letter'. See groff_tmac(5).
----------------------------------------------------------------------
* When I try to run gxditview, I get the error:
Error: Widget viewport has zero width and/or height
This error means you haven't correctly installed the application
defaults file, GXditview.ad; `make install' does this for you
automatically, so either you didn't do `make install', or you haven't
passed a good `--appresdir=<DIR>' argument to groff's configure script.
See the X(7) man page for information how and where application resource
files have to be located. Look for the XAPPLRESDIR and XUSERFILESEARCHPATH
environment variables.
----------------------------------------------------------------------
* When I preview documents using -TX75 or -TX100, the layout is not
the same as when I print the document with -Tps: the line and page
breaks come in different places.
Use `groff -X -Tps'.
----------------------------------------------------------------------
* When I try to print the output of groff -Tps, I get no output at all
from the printer, and the log file shows the error
%%[ error: undefined; offendingcommand: BP ]%%
I'm using TranScript spooling software.
This is a bug in the page reversal filter in early versions of
TranScript. Change the `broken' parameter in
/usr/local/lib/groff/font/devps/DESC to 7.
----------------------------------------------------------------------
* When I preview groff -Tps output using the Sun OpenWindows 2.0
pageview program, all the pages are displayed on top of each other.
This is a defect in pageview. Change the `broken' parameter in
/usr/local/lib/groff/font/devps/DESC to 2.
----------------------------------------------------------------------
* With groff -TX75, -TX100 or -X, I can only view the first page.
The left mouse button brings up a menu that allows you to view other
pages.
----------------------------------------------------------------------
* When I print the output of groff -Tdvi, I just get a black dot in
upper left corner.
Some dvi drivers (notably early versions of xtex) do not correctly
handle dvi files that use a resolution different from that used by dvi
files produced by TeX. Try getting a more up to date driver.
----------------------------------------------------------------------
* How can I use groff with an old LaserJet printer that doesn't work
with groff -Tlj4?
You have at least 3 options:
- use groff -Tps with GNU Ghostscript;
- use groff -Tdvi with a TeX .dvi to Laserjet driver;
- use groff with the LaserJet driver in Chris Lewis' psroff package
(available for ftp from:
ftp.uunet.ca:/distrib/chris_lewis/psroff3.0pl17).
----------------------------------------------------------------------
* Groff seems to generate level 3 Postscript, but my printer is only a
level 1 or 2 PostScript printer.
In fact groff generates only level 2 PostScript (or rather level 1
with some extensions; see grops(1) for more information how to disable
them). The `%!PS-Adobe-3.0' comment at the beginning of PostScript
output generated by groff indicates that the file conforms to
version 3.0 of the Adobe Document Structuring Conventions. The output
generated by groff should be printable on any PostScript printer.
Problems with groff output's not printing are most often caused by the
spooling system.
Platform-Dependent Macro Problems
=================================
* I get lots of errors when I use groff with the AT&T -mm macros.
Use the groff -mm macros.
----------------------------------------------------------------------
* groff produces wrapper macros for `ms' and friends which call the
system's original macros. Then, to get groff's ms macro package I
have to use `-mgs' instead `-ms'. Can I avoid this?
Yes. Configure and compile groff as usual, but install it with
make install tmac_wrap=""
Then no wrapper files are produced, and `-ms' will use groff's `ms'
macros.
----------------------------------------------------------------------
* I'm having problems formatting HP-UX 9.0 man pages with groff -man.
Copy HP's tmac.an into /usr/local/share/groff/site-tmac/an.tmac, and
either put `.cp 1' at the beginning or filter it (and any files it
.so's) through tmac/fixmacros.sed.
----------------------------------------------------------------------
* I get errors using the Unix -ms macros with groff -e -C.
Apply this change:
*** /usr/lib/ms/ms.eqn Tue Apr 25 02:14:28 1989
--- ms.eqn Sun Nov 11 10:33:59 1990
***************
*** 22,29 ****
..
. \" EN - end of a displayed equation
.de EN
! .if !\\*(10 .br
.di
.rm EZ
.nr ZN \\n(dn
.if \\n(ZN>0 .if \\n(YE=0 .LP
--- 22,30 ----
..
. \" EN - end of a displayed equation
.de EN
! .if \\n(.k>0 .br
.di
+ .ds 10 \\*(EZ\\
.rm EZ
.nr ZN \\n(dn
.if \\n(ZN>0 .if \\n(YE=0 .LP
----------------------------------------------------------------------
* I'm having problems formatting Ultrix man pages with groff -man.
The Ultrix man pages use a number of non-standard extensions to the
Unix man macros. One solution is to use the Ultrix -man macros with
groff. Copy /usr/lib/tmac/tmac.an to
/usr/local/share/groff/site-tmac/an.tmac and apply the following patch
(from Frank Wortner):
*** /usr/local/lib/groff/tmac/tmac.an Wed Sep 9 12:29:28 1992
--- /usr/lib/tmac/tmac.an Fri Jul 24 19:58:19 1992
***************
*** 489,495 ****
. \" make special case of shift out of italic
.de }S
.ds ]F
! .if \\$12 .if !\\$5 .ds ]F \^
.ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
.el \\$3
.}f
--- 489,495 ----
. \" make special case of shift out of italic
.de }S
.ds ]F
! .if \\$12 .if !\\$5 .ds ]F\^
.ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
.el \\$3
.}f
Another possible solution is to install tmac/man.ultrix as
/usr/local/share/groff/site-tmac/man.local.
----------------------------------------------------------------------
* On an SGI system, how can I make the man command use groff?
From David Hinds <dhinds@allegro.stanford.edu> (some of these steps
are unnecessary if you install with the `g' Makefile variable defined
as empty):
Create a script called 'eqn':
> #! /bin/sh
> if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi
> geqn $*
and a script called 'neqn':
> #! /bin/sh
> if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi
> geqn -Tascii $*
and do:
> ln -s gnroff nroff
and edit the end of the gnroff script to be:
> rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
> exec groff -Wall -mtty-char $T $opts $rest
To get PostScript output from 'man -t', you also need to create a
'psroff' script similar to 'nroff'. Here are the context diffs:
*** /usr/local/bin/nroff Sat Feb 13 15:51:09 1993
--- /usr/local/bin/psroff Sat Feb 13 17:45:46 1993
***************
*** 1,8 ****
#! /bin/sh
! # Emulate nroff with groff.
prog="$0"
! T=-Tascii
opts=
for i
--- 1,8 ----
#! /bin/sh
! # Emulate psroff with groff.
prog="$0"
! T=-Tps
opts=
for i
***************
*** 25,30 ****
--- 25,33 ----
-Tascii|-Tlatin1)
T=$1
;;
+ -t)
+ # ignore -- default is send to stdout
+ ;;
-T*)
# ignore other devices
;;
***************
*** 49,53 ****
rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
# This shell script is intended for use with man, so warnings are
# probably not wanted. Also load nroff-style character definitions.
! exec groff -Wall -mtty-char $T $opts $rest
--- 52,56 ----
rest=`echo ${1+"$@"} | sed -e 's+/usr/lib/tmac+/usr/local/lib/groff/tmac+'`
# This shell script is intended for use with man, so warnings are
! # probably not wanted.
! exec groff -Wall $T $opts $rest
Compilation Problems
====================
* Compilation dies with
y.tab.c: In function `int yyparse()':
y.tab.c: `size_t' undeclared in namespace `std'
* bison reports conflicts (either on stderr or in the `pic.output'
file) while processing `pic.y', and the produced pic binary doesn't
work at all.
You need bison version 1.875b or greater. Alternatively, use yacc or
byacc.
----------------------------------------------------------------------
* There are many empty `Makefile.dep' files. Is this a bug?
No. Real dependency files are created with a `make depend' call.
----------------------------------------------------------------------
* On HP-UX, the compiler complains about missing symbol `alloca'.
Say
export LDFLAGS=-lPW
before starting the configure script.
----------------------------------------------------------------------
* The configure script fails on OS/390 (z/OS) Unix.
[This has been fixed in z/OS V1R3 (aka OS/390 R13).]
There is a bug in the Language Environment (LE) whereby the test
program for static destructors fails. You will see the message
`configure: error: a working C++ compiler is required'
Applying PTF UQ42006 is supposed to fix this, but the test program is
still returning the wrong value (1). To work around this problem, you
can comment out the following in the configure script (near line 2029).
This will effectively bypass the test (static constructors and
destructors do actually work properly):
#if { (eval echo "$as_me:2029: \"$ac_link\"") >&5
# (eval $ac_link) 2>&5
# ac_status=$?
# echo "$as_me:2032: \$? = $ac_status" >&5
# (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
# { (eval echo "$as_me:2034: \"$ac_try\"") >&5
# (eval $ac_try) 2>&5
# ac_status=$?
# echo "$as_me:2037: \$? = $ac_status" >&5
# (exit $ac_status); }; }; then
# echo "$as_me:2039: result: yes" >&5
#echo "${ECHO_T}yes" >&6
#else
# echo "$as_me: program exited with status $ac_status" >&5
#echo "$as_me: failed program was:" >&5
#cat conftest.$ac_ext >&5
#echo "$as_me:2045: result: no" >&5
#echo "${ECHO_T}no" >&6;{ { echo "$as_me:2046: error: a working C++ compiler is required" >&5
#echo "$as_me: error: a working C++ compiler is required" >&2;}
# { (exit 1); exit 1; }; }
#fi
----------------------------------------------------------------------
* I get errors when I try to compile groff with DEC C++.
Fix the declaration of write() in <unistd.h> so that the second
argument is a const char *. Fix the declaration of open() in
<sys/file.h> so that the first argument is a const char *.
----------------------------------------------------------------------
* On a host using Unix make (e.g. Solaris), if you are compiling for
multiple architectures by building in a subdirectory, the make stops
with a message like this:
make: Fatal error: Don't know how to make target `assert.o'
or like this:
make: Fatal error: Can't find /u/src/groff/src/include/Makefile.sub': No such file or directory
This occurs because GNU make and Unix make handle VPATH differently,
and the groff build relies on GNU make's VPATH handling.
Use GNU make <http://www.gnu.org/software/make/> to work around this.
In Solaris 8 and 9, GNU make is on the Software Companion CD in
package SFWgmake and is installed as /opt/sfw/bin/gmake. Prebuilt
versions of GNU make for Solaris are also available from
sunfreeware.com.
----------------------------------------------------------------------
* On Ultrix, the make program stops with the message
*** Error code 1
Stop.
for no apparent reason.
Use GNU make.
----------------------------------------------------------------------
* I'm having problems compiling groff on 386BSD 0.1.
If you're using ash as /bin/sh, you'll need the following patch.
*** gendef.sh.org Sun Jun 30 13:30:36 1991
--- gendef.sh Sun Feb 28 10:23:49 1993
***************
*** 3,9 ****
file=$1
shift
! defs="#define $1"
shift
for def
do
--- 3,10 ----
file=$1
shift
! x=$1
! defs="#define $x"
shift
for def
do
You'll also need to change dirnamemax.c so that it doesn't use
pathconf().
----------------------------------------------------------------------
* While compiling on Xenix, ranlib libgroff.a fails.
The system ranlib can't handle externals longer than 40 characters.
Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1
instead.
----------------------------------------------------------------------
* I get errors when I try to compile groff with Sun C++ version 3 or
earlier.
Groff requires header files that are moderately compatible with AT&T
C++ and ANSI C. With some versions of Sun C++, the supplied header
files need some of the following changes to meet this requirement:
<string.h> must declare the mem* functions, (just add `#include
<memory.h>' to <string.h>); the first argument to fopen and freopen
should be declared as `const char *'; the first argument to fread
should be declared as `void *'; the first argument to fwrite should be
declared as `const void *'; malloc should be declared to return
`void *'; in <alloca.h>, the declaration `extern "C" { void
*__builtin_alloca(int); }' should be added; in <sys/signal.h> the
return type and the second argument type of signal() should be changed
to be `void (*)(int)'.
You can either change them in place, or copy them to some other
directory and include that directory with a -I option.
----------------------------------------------------------------------
* I get errors when I try to compile groff with Forte Development 6
or 6u1, or Sun C++ version 5.0 through 5.2.
This is a known problem; see Sun bug #4301919. See Sun patches
109482, 109490, 109508, and 109509 for fixes.
----------------------------------------------------------------------
* I get warnings from the Sun linker while using gcc 3.4.0:
ld: warning: relocation error: R_SPARC_UA32:
file groff/src/libs/libgroff/libgroff.a(getopt.o): symbol optarg:
external symbolic relocation against non-allocatable
section .debug_info; cannot be processed at runtime:
relocation ignored
This seems to be a known problem (Sun bugs #4910101 and #4910810,
filed in September 2003; gcc bug #15599, filed May 2004) without a
public fix as of this writing. A work-around is to use option
`-gstabs+' instead of `-g' (and a high probability that the output is
only debuggable with gdb but not with Sun's debuggers).
----------------------------------------------------------------------
* I get lots of `numeric overflow' error messages whenever I run
groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler.
Make sure -DCFRONT_ANSI_BUG is included in DEFINES in the top-level
Makefile. If that doesn't solve the problem, define INT_MIN as
-INT_MAX in libgroff/lib.h.
----------------------------------------------------------------------
* When compiling on MacOS X, groff compiles but does not run well,
especially `eqn', causing many `can't break line' messages.
Use ./configure CXX=g++2 then make as usual.

14
PROJECTS Normal file
View File

@ -0,0 +1,14 @@
Here are some things that would be useful additions to groff:
ideal preprocessor
-mv macros (for typesetting viewgraphs and slides)
a deroff that understands long names
a page-makeup postprocessor and associated macro package
(like pm and -mpm)
If you want to work on one of these, you should probably post to
gnu.groff.bug (or send email to bug-groff@gnu.org) to see if anyone else
has gotten there first.

134
README Normal file
View File

@ -0,0 +1,134 @@
This is the GNU `groff' document formatting system. The version
number is given in the file VERSION.
Included in this release are implementations of `troff', `pic', `eqn',
`tbl', `grn', `refer', `-man', `-mdoc', `-mom', and `-ms' macros, and
drivers for `PostScript', `TeX dvi' format, `HP LaserJet 4' printers,
`Canon CAPSL' printers, `HTML' format (beta status), and
typewriter-like devices. Also included is a modified version of the
Berkeley `-me' macros, the enhanced version `gxditview' of the X11
`xditview' previewer, and an implementation of the `-mm' macros
contributed by Joergen Haegg (jh@axis.se).
See the file `INSTALL' for installation instructions. You will
require a C++ compiler.
The file `NEWS' describes recent user-visible changes to `groff'.
`groff' is free software. See the file `COPYING' for copying
permission.
The file `PROBLEMS' describes various problems that have been
encountered in compiling, installing, and running `groff'.
The most recent released version of `groff' is always available by
anonymous ftp from `ftp.gnu.org' in the directory `gnu/groff'.
The current development version of `groff' is available from a `CVS'
repository. You can access it by first selecting a parent directory
in which to create a working copy (call it, say, `~/cvswork'), and
then executing the commands
cd ~/cvswork
CVS_RSH=ssh; export CVS_RSH
cvs -d:ext:anoncvs@savannah.gnu.org/cvsroot/groff -z5 co groff
(Note that you need an `ssh' client for security reasons.)
This will create a subdirectory, `~/cvswork/groff', with a "checked
out" copy of the `CVS' repository. An update of this working copy may
be achieved, at any later time by invoking the commands
cd ~/cvswork/groff
CVS_RSH=ssh cvs -z5 update -dP
Please read the `CVS' info pages for further details.
Finally, it is possible to access the `CVS' with a web browser by
pointing it to
http://savannah.gnu.org/cvs/?group=groff
Alternatively, you can download snapshots (which are updated twice a day).
The complete `groff' source as a single file is available at
http://groff.ffii.org/groff/devel/groff-current.tar.gz
A diff file relative to `groff-<version>', the latest official `groff'
release is available at
http://groff.ffii.org/groff/devel/groff-<version>-current.diff.gz
Assuming that `groff-<version>.tar.gz' and
`groff-<version>-current.diff.gz' are in the same directory, do the
following to apply the diff file:
tar xzvf groff-<version>.tar.gz
cd groff-<version>
gunzip -c ../groff-<version>-current.diff.gz | patch -p1
Depending on your requirements, you may need at least some of the
following tools to build `groff' directly from its source:
ghostscript
the psutils package
the netpbm package
texinfo 4.8
bison >= 1.875b or byacc
Note that `texinfo' and `bison' or `byacc' are required only for
building from `CVS' sources (either a checked out working copy, or a
daily snapshot). They are not required for building from a stable
release tarball. Also note that the version numbers stated are the
minimum supported. No version of `texinfo' < 4.8 will work, and the
original release of `bison' 1.875 is known not to work; you *may* find
that `bison' releases < 1.875 will work, but in case of difficulty,
please update to a later version *before* posting a bug report.
For *all* sources, you need ghostscript for creation of either `PDF' or
`HTML' output; the `netpbm' and `psutils' packages are required only for
`HTML' output. If you don't intend to produce output in either of these
formats, then these packages are unnecessary.
In Linux Debian, the installation of `texinfo' is dangerous. For it
creates a file `install-info' that will block the system installation.
So the created `/usr/local/bin/install-info' must be renamed.
The `groff' configure script searches for the X11 headers and
libraries `Xaw' and `Xmu'. So the corresponding developer packages of
your system must be installed, otherwise `groff' does not install
`gxditview' and the `-TX*' devices. In Debian, the developer packages
are `libxaw7-dev' and `libxmu-dev'.
Please report bugs using the form in the file `BUG-REPORT'; the idea of
this is to make sure that FSF has all the information it needs to fix
the bug. At the very least, read the `BUG-REPORT' form and make sure
that you supply all the information that it asks for. Even if you are
not sure that something is a bug, report it using `BUG-REPORT': this will
enable us to determine whether it really is a bug or not.
Three mailing lists are available:
bug-groff@gnu.org for reporting bugs
groff@gnu.org for general discussion of groff
groff-commit@gnu.org a read-only list showing commitments
to the CVS repository
You can post mails directly to the `bug-groff' list, without subscribing;
to post mails to the `groff' list you must subscribe to it.
To subscribe, send a mail to <list>-request@<domain> (example:
groff-request@gnu.org for the `groff' list) with the word `subscribe'
in either the subject or body of the email (don't include the quotes).
Alternatively, you may subscribe by visiting the web pages at
http://lists.gnu.org/mailman/listinfo/bug-groff
http://lists.gnu.org/mailman/listinfo/groff
http://lists.gnu.org/mailman/listinfo/groff-commit
Each of these web pages also provides a link to a browseable archive of
postings to the corresponding mailing list.
GNU `groff' was written by James Clark <jjc@jclark.com>. It is now
maintained by Ted Harding <ted.harding@nessie.mcc.ac.uk> and Werner
Lemberg <wl@gnu.org>.

277
README.MinGW Normal file
View File

@ -0,0 +1,277 @@
README.MinGW
============
Contributed by Keith Marshall (keith.d.marshall@ntlworld.com)
INTRODUCTION
------------
This file provides recommendations for building a Win32 implementation of
GNU Groff, using the MinGW port of GCC for Microsoft (TM) Windows-32
platforms. It is intended to supplement the standard installation
instructions (see file INSTALL); it does not replace them.
You require both the MinGW implementation of GCC and its supporting MSYS
toolkit, which provides a Win-32 implementation of the GNU bash shell, and a
few other essential utilities; these may be obtained from
http://sourceforge.net/projects/mingw
by following the appropriate download links, where they are available as
self-extracting executable installation packages. If installing both from
scratch, it is recommended that MinGW is installed first, as the MSYS
installer can then automatically set up the proper environment for running
MinGW.
Additionally, if you wish to compile groff with support for its HTML output
capability, some additional tools are required as decribed in the section
PREREQUISITES FOR HTML OUTPUT later in this file.
BUILDING GROFF WITH MINGW
-------------------------
Assuming that you have obtained the appropriate groff distribution, and that
you are already running an MSYS shell, then the configuration, compilation,
and installation of groff, using MinGW, is performed in much the same way as
it is described in the INSTALL file, which is provided with the groff
distribution. The installation steps are summarised below:
1. Change working directory to any suitable location where you may unpack
the groff distribution; you must be authorized for write access.
Approximately 30MB of free disk space are needed.
2. Unpack the groff distribution:
tar xzf <download-path>/groff-<version>.tar.gz
This creates a new sub-directory, groff-<version>, containing an image of
the groff source tree. You should now change directory, to make this
./groff-<version> your working directory.
3. If you are intending to build groff with support for HTML output, then
you must now ensure that the prerequisites described in the later section
PREREQUISITES FOR HTML OUTPUT are satisfied, before proceeding to build
groff; in particular, please ensure that all required support programs
are installed in the current PATH.
4. You are now ready to configure, build, and install groff. This is
accomplished using the conventional procedure, as described in the file
INSTALL, i.e.
./configure --prefix=<win32-install-path> ...
make
make install
Please observe the syntax for the configure command, indicated above; the
default value for --prefix is not suitable for use with MinGW, so the
--prefix=<win32-install-path> option must be specified, where
<win32-install-path> is the chosen MS-Windows directory in which the
groff application files are to be installed (see the later section
entitled CHOOSING AN INSTALLATION PATH). Any other desired configuration
options may also be specified, as described in the standard groff
installation instructions.
5. After completing the above, groff should be successfully installed; the
build directory is no longer required; it may be simply deleted in its
entirety. Alternatively, you may choose to keep it, but to remove all
files which can be reproduced later, by repeating the configure, make and
make install steps; this is readily accomplished by the command
make distclean
This completes the installation of groff; please read the final sections of
this file, GROFF RUNTIME ENVIRONMENT and CAVEATS AND BUGS, for advice on
setting up the runtime environment, and avoiding known runtime problems,
before running groff.
CHOOSING AN INSTALLATION PATH
-----------------------------
It may be noted that the above instructions indicate that the ./configure
command must be invoked with an argument specifying a preference for
--prefix=<win32-install-path>, whereas the standard groff installation
instructions indicate that this may be omitted, in which case it defaults to
--prefix=/usr/local.
In the case of building with MinGW, the default behaviour of configure is
not appropriate for the following reasons.
o The MSYS environment creates a virtual UNIX-like file system, with its
root mapped to the actual MS-Windows directory where MSYS itself is
installed; /usr is also mapped to this MSYS installation directory.
o All of the MSYS tools, and the MinGW implementation of GCC, refer to files
via this virtual file system representation; thus, if the
--prefix=<win32-install-path> is not specified when groff is configured,
`make install' causes groff to be installed in <MSYS-install-path>/local.
o groff needs to know its own installation path, so that it can locate its
own installed components. This information is compiled in, using the
exact form specified with the --prefix=<win32-install-path> option to
configure.
o Knowledge of the MSYS virtual file system is not imparted to groff; it
expects the compiled-in path to its components to be a fully qualified
MS-Windows path name (although UNIX-style slashes are permitted, and
preferred to the MS-Windows style backslashes, to demarcate the directory
hierarchy). Thus, when configuring groff, if
--prefix=<win32-install-path> is not correctly specified, then the
installed groff application looks for its components in /usr/local, and
most likely doesn't find them, because they are actually installed in
<MSYS-install-path>/local.
It is actually convenient, but by no means a requirement, to have groff
installed in the /usr/local directory of the MSYS virtual file system; this
makes it easy to invoke groff from the MSYS shell, since the virtual
/usr/local/bin is normally added automatically to the PATH (the default
PATH, as set in MSYS's /etc/profile), when MSYS is started.
In order to install groff into MSYS's /usr/local directory, it is necessary
to specify the fully qualified absolute MS-Windows path to this directory,
when configuring groff, i.e.
./configure --prefix=<MSYS-install-path>/local ...
For example, on a system where MSYS is installed in the MS-Windows directory
D:\MSYS\1.0, the MSYS virtual path /usr/local resolves to the absolute
MS-Windows native path D:\MSYS\1.0\local (the /usr component of the MSYS
virtual path does not appear in the resolved absolute native path name since
MSYS maps this directly to the root of the MSYS virtual file system). Thus,
the --prefix option should be specified to configure as
./configure --prefix=D:/MSYS/1.0/local ...
Note that the backslash characters, which appear in the native MS-Windows
form of the path name, are replaced by UNIX-style slashes in the argument to
configure; this is the preferred syntax.
Also note that the MS-Windows device designator (D: in this instance) is
prepended to the specified path, in the normal MS-Windows format, and that,
since upper and lower case distinctions are ignored in MS-Windows path
names, any combination of upper and lower case is acceptable.
PREREQUISITES FOR HTML OUTPUT
-----------------------------
If you intend to use groff for production of HTML output, then there are a
few dependencies which must be satisfied. Ideally, these should be resolved
before attempting to configure and build groff, since the configuration
script does check them.
In order to produce HTML output, you first require a working implementation
of Ghostscript; either the AFPL Ghostscript or the GNU Ghostscript
implementation for MS-Windows should be suitable, depending on your
licensing preference. It is highly recommended to use version 8.11 or
higher due to bugs in older versions. These may be obtained, in the form of
self-installing binary packages, by following the download links for the
chosen licensing option, from http://sourceforge.net/projects/ghostscript.
Please note that these packages install the Ghostscript interpreter required
by groff in the ./bin subdirectory of the Ghostscript installation
directory, with the name gswin32c.exe. However, groff expects this
interpreter to be located in the system PATH, with the name gs.exe. Thus,
to ensure that groff can correctly locate the Ghostscript interpreter, it is
recommended that the file gswin32c.exe should be copied from the Ghostscript
installation directory to the MSYS /usr/local/bin directory, where it should
be renamed to gs.exe.
In addition to a working Ghostscript interpreter, you also require several
image manipulation utilities, all of which may be scavenged from various
packages available from http://sourceforge.net/projects/gnuwin32, and which
should be installed in the MSYS /usr/local/bin directory, or any other
suitable directory which is specified in the PATH. These additional
prerequisites are
1. from the netpbm-<version>-bin.zip package:
netpbm.dll
pnmcrop.exe
pnmcut.exe
pnmtopng.exe
pnmtops.exe
2. from the libpng-<version>-bin.zip package:
libpng.dll
3. from the zlib-<version>-bin.zip package:
zlib-1.dll, which must be renamed to zlib.dll
4. from the psutils-<version>-bin.zip package:
psselect.exe
Note that it is not necessary to install the above four packages in their
entirety; of course, you may do so if you wish.
GROFF RUNTIME ENVIRONMENT
-------------------------
The runtime environment, provided to groff by MSYS, is essentially the same
as would be provided under a UNIX or GNU/Linux operating system; thus, any
environment variables which may be used to customize the groff runtime
environment have similar effects under MSYS, as they would in UNIX or
GNU/Linux, with the exception that any variable specifying a path should
adopt the same syntax as a native MS-Windows PATH specification.
There is, however, one known problem which is associated with the
implementation of the MS-Windows file system, and the manner in which the
Microsoft runtime library (which is used by the MinGW implementation of GCC)
generates names for temporary files. This known problem arises when groff
is invoked with a current working directory which refers to a network share,
for which the user does not have write access in the root directory, and
there is no environment variable set to define a writeable location for
creating temporary files. When these conditions arise, groff fails with a
`permission denied' error, as soon as it tries to create any temporary file.
To specify the location for creating temporary files, the standard UNIX or
GNU/Linux implementation of groff provides the GROFF_TMPDIR or TMPDIR
environment variables, whereas MS-Windows applications generally use TMP or
TEMP; furthermore, the MS-Windows implementations of Ghostscript apparently
support the use of only TEMP or TMPDIR.
To avoid problems with creation of temporary files, it is recommended that
you ensure that both TMP and TEMP are defined, with identical values, to
point to a suitable location for creating temporary files; many MS-Windows
boxes have them set already, and groff has been adapted to honour them, when
built in accordance with the preceding instructions, using MinGW.
CAVEATS AND BUGS
----------------
There are two known issues, observed when running groff in the MinGW/MSYS
environment, which would not affect groff in its native UNIX environment:
o Running groff with the working directory set to a subdirectory of a
network share, where the user does not have write permission in the root
directory of the share, causes groff to fail with a `permission denied'
exception, if the TMP environment variable is not appropriately defined;
it may also be necessary to define the TEMP environment variable, to avoid
a similar failure mode, when using the -Thtml output mode of groff. This
problem is more fully discussed in the preceding section, GROFF RUNTIME
ENVIRONMENT.
o When running groff (or nroff) to process standard input, where the
standard input stream is obtained directly from the RXVT console provided
with MSYS, groff cannot detect the end-of-file condition for the standard
input stream, and hangs. This appears to be caused by a fault in the MSYS
implementation of RXVT; it may be worked around by either starting MSYS
without RXVT (see the comments in the MSYS.BAT startup script); in this
case standard input is terminated by typing <Ctrl-Z> followed by <RETURN>,
on a new input line. Alternatively, if you prefer to use MSYS with RXVT,
you can enter the interactive groff command in the form
cat | groff ...
in which case <Ctrl-D> terminates the standard input stream, in just the
same way it does on a UNIX system; the cat executable provided with MSYS
does seem to trap the end-of-file condition, and properly signals groff
that the input stream has terminated.

1
REVISION Normal file
View File

@ -0,0 +1 @@
2

25
TODO Normal file
View File

@ -0,0 +1,25 @@
Unicode input:
Making groff 21bit input-clean.
Make -Tlj4 work with -X.
Guess man5ext and man7ext variables.
Provide man.sun implementing .TX.
Improve GROFF_PRINT macro in aclocal.m4.
Provide a `check' target.
Provide a `bindist' target.
Implement tmac.bib in terms of tmac.s.
Support long options using GNU getopt.
Catch the following error in -me:
.(z
.(l C
.)z
Arrows for next/previous page from R5 xditview.

1
VERSION Normal file
View File

@ -0,0 +1 @@
1.19

1152
aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

346
arch/djgpp/README Normal file
View File

@ -0,0 +1,346 @@
This is a port of GNU Groff to DJGPP v2.03 or later.
Groff is the GNU version of document formatting tools related to
`troff'.
This README file describes how to build and install Groff on MS-DOS or
MS-Windows systems using the DJGPP port of GNU C/C++ compiler and
development tools.
I. Installing the pre-compiled binary package
------------------------------------------
1. Unzip the file groNNNb.zip (where NNN is the version number)
preserving the directory structure (-d switch to PKUNZIP) from
the main DJGPP installation directory. If you will use Groff
on Windows 9X or Windows2000, use an unzip program which
supports long filenames.
2. Groff binaries were configured so that they will look for their
standard directories under the directory pointed to by the
DJDIR environment variable, so it should work automatically if
you have DJGPP installed. If you don't have a standard DJGPP
installation, set the variable DJDIR to point to the directory
where you unzip Groff. In this latter case, you will need to
set additional environment variables:
GROFF_TMAC_PATH=%DJDIR%/share/groff/<version>/tmac:%DJDIR%/share/groff/site-tmac
GROFF_TYPESETTER=ascii
GROFF_FONT_PATH=%DJDIR%/share/groff/<version>/font
<version> is something like `1.16.1' or `1.17'.
In addition, you can set the variable GROFF_TMPDIR to point to
a directory where you want Groff to create temporary files it
needs for running its jobs (these files are automatically
deleted when Groff exits).
All of those variables are automatically set in the file
DJGPP.ENV that is part of the standard DJGPP distribution
djdevNNN.zip (where NNN is the DJGPP version number), so you
only need to set them manually if you don't have DJGPP
installed.
Note that the GROFF_TYPESETTER variable sets the default Groff
device to be `ascii', which is suitable for formatting man
pages to be viewed on the terminal. Use the -T switch to
generate output for other devices (e.g., -Tps for PostScript).
3. If your TMPDIR environment variable points to a RAM drive, you
might consider changing GROFF_TMPDIR to point to a directory on
a real disk drive, especially if you intend to generate
PostScript output, because RAM disks are typically small (2-3
MBytes) which might be not enough for formatting large
documents.
4. Read the docs. It comes as formatted manual pages called *.1,
*.5 and *.7 which unzip into your man/ subdirectory. You
can read them with a pager such as GNU Less (recommended, as
Less will use colors for bold and underlined text) or with
Info (which will remove the bold/underline attributes).
Another alternative is to use Emacs built-in man page reader;
the DJGPP FAQ lists other possibilities.
Beginning with version 1.15, Groff comes with an Info manual;
type "info -f groff" to read it. The Info manual is still
under construction, so some sections are empty.
If you want to add a Groff entry to the main Info menu in the
file DIR, chdir to the `info' subdirectory of the main Groff
installation directory and run this command:
install-info --dir-file=dir groff.info
After you do that, "info groff" will also work.
5. For those who only need Groff to format man pages and don't
like reading the docs, here's a minimal cookbook:
groff -man -s foo.1 > foo.man
where `foo.1' is the troff source of the man page and `foo.man'
is the formatted page. If you need to view the man page, say
this:
groff -man -s foo.1 | less
You can also use the DJGPP clone of the Unix `man' command, in
which case `man' runs the above command for you automatically.
Here's how you print man pages on a PostScript printer:
groff -man -s -Tps foo.1 > prn
And this is for a LaserJet4 printer:
groff -man -s -Tlj4 foo.1 > prn
Printing the documents produced by Groff is possible either by
redirecting Groff's standard output to the local printer
device, like shown above, or by using the `-l' switch to Groff.
The latter possibility causes Groff to pipe its output to a
program whose name and arguments appear in the files named
`DESC' in each of the `devFOO' subdirectories of the
%DJDIR%/share/groff/<version>/font directory; for example, the
file devps/DESC is used by "groff -Tps". The relevant line in
these files begins with the word "print".
As configured, when invoked with the `-l' switch, Groff will
call `cat' (from GNU Textutils) to pipe its output to the
default printer device for -Tps, -Tlbp and -Tlj4 options, and
it will call `dvilj4' (from the dvljNNNb.zip package) for -Tdvi
option. If you don't have these programs installed, you can
edit the respective `DESC' files to replace these commands with
something else. The replacement program must be able to read
its standard input and send its output to whatever printer you
want. The "print" entry is assumed to be a shell command, so
it can use redirection, pipes, and other shell features.
Beginning with version 1.15, Groff can create HTML output, like
this:
groff -man -s -Thtml foo.1 > foo.html
Producing HTML files sometimes requires Ghostscript to be
installed, and, for gif images, ppmquant and ppmtogif as well.
If you do not have these programs installed, Groff will print
an error message, and the produced file will have links which
will fail to resolve when you view it with a Web browser.
6. Some programs in the package are supplied as Unix shell
scripts. While it is relatively easy to write a DOS batch file
which will do the same, DOS doesn't allow to redirect input and
output of a batch file. Since Groff tools are meant to be
invoked in a pipe, the batch files are not very useful. The
batch files are included in the binary distribution
nonetheless.
These scripts need the following utilities to run (in addition
to the Groff programs they invoke):
- bash
- gawk
- egrep
- sed
The `afmtodit' and `mmroff' utilities are Perl scripts, so you
will need a Perl port to run them.
All of these ports should be available from the DJGPP sites.
If you need to run these scripts and batch files, you have to
install the port of bash (or another Unix-like shell) and the
above-mentioned utilities called by the script. Alternatively,
just look inside the shell script and invoke the programs it
calls manually.
To run the scripts with redirection, invoke them via the shell,
like this: "sh mmroff > foo".
7. Note that Groff programs use floating point, so you will need
an FP emulator if your machine doesn't have an FPU. The binary
distribution includes the emulator, in case you don't have the
DJGPP development environment installed. Please refer to the
DJGPP FAQ list in case you have any problems with the emulator.
8. The package does not include the directories under
share/groff/<version>/font whose names begin with "devX": these
are needed on X-Windows for running the gxditview program, which
is not supported by this port.
9. Due to 8+3 limitations of DOS filesystems, several files were
renamed:
- groff_mdoc.samples.7 was renamed to groff-mdoc_samples.7
and groff_mmse.7 to groff-mmse.7. The latter was also
converted from Latin-1 encoding to codepage 437.
II. Building Groff from sources
---------------------------
1. To build Groff, you will need the following tools (the file
name in parentheses is what you need to download from one of
the DJGPP sites):
- Standard DJGPP development environment (djdev203.zip)
- GNU C compiler (gcc2721b.zip)
- GNU C++ compiler (gpp2721b.zip)
- GNU Make 3.79 (mak379b.zip)
- Bash v2.03 (bsh203b.zip)
- Fileutils 3.16 (fil316b.zip)
- Textutils 2.0 (txt20b.zip)
- Sh-utils 1.12 (shl112b.zip)
- Sed 3.02 (sed302b.zip)
- Gawk 3.04 (gwk304b.zip)
- Grep 2.4 (grep24b.zip)
- Bison (only if you change one of the *.y files)
Note that you don't need to install libg++ (lgpNNNb.zip) since
Groff doesn't use any C++ classes except its own.
Any versions of the utilities later than what's mentioned above
should also do; in particular, GCC 2.95.2 was tested and Groff
built okay with it. Versions older than in the above list
might also work, but I don't guarantee that; you are on your
own.
Special considerations apply if you have GCC 2.8.1 installed,
and cannot upgrade to a later version. See paragraph 4 below.
After you install these tools, make sure you have a ``symlink''
to bash.exe called sh.exe and a ``symlink'' to gawk.exe called
awk.exe. If not, go to the DJGPP bin/ subdirectory and type
the following words of wisdom from the DOS prompt:
ln -s bash.exe sh.exe
ln -s gawk.exe awk.exe
(`ln' is part of GNU Fileutils, see above.)
2. Unzip the source distribution groXYZs.zip (where XYZ is the
version number) preserving the directory structure (-d switch
to PKUNZIP) from the main DJGPP installation directory. (If
you are building Groff on Windows 9X or Windows 2000, use an
unzip program which supports long filenames.) This creates
directory gnu/groff-X.YZ and unzips the sources there.
If you are building from the official GNU distribution, unpack
the .tar.gz archive like this:
djtar -x groff-X.YZ.tar.gz
(DJTAR is part of the standard DJGPP development distribution.)
3. Groff sources on DJGPP sites are already configured for the
current version of DJGPP. If that is the version you have,
then you can just chdir to gnu/groff-X.YZ and say "make" to
build the entire package (if you have GCC 2.8.1, see the next
paragraph).
If you have version of DJGPP other than the current one, or if
you build the official GNU distribution, or if you prefer to
configure the package so that it defaults to the directory
structure on your machine, or need to change some options
(e.g., compile with different optimization options), you will
have to reconfigure Groff. To this end, use the CONFIG.BAT
batch file in the DJGPP subdirectory:
arch\djgpp\config
You can configure and build Groff from outside its source
directory. In that case, you need to pass the full path to the
source directory as an argument to CONFIG.BAT, like this:
d:\gnu\groff-1.16\arch\djgpp\config d:/gnu/groff-1.16
Note that you MUST use forward slashes in the path you pass to
CONFIG.BAT, or else it may fail. (For versions of Groff other
than 1.16, change the above command accordingly.)
4. If your version of GCC is 2.8.1, you cannot build the
preconfigured package without some tinkering. The DJGPP port
of GCC 2.8.1 had a bug in its C++ configuration, whereby the
file _G_config.h erroneously indicated that the header
<sys/socket.h> is available, and also undefined the symbol
NULL. This causes several files in the Groff distribution to
fail to compile.
The easiest way to solve this is to upgrade to a later version
of GCC; then you can simply say "make" to build the
preconfigured package. If this is not an option, you will have
to edit the file lang/cxx/_G_config.h and change this line:
#define _G_HAVE_SYS_SOCKET 1
to say this instead:
#define _G_HAVE_SYS_SOCKET 0
The problem with redefining NULL should not happen with DJGPP
v2.03 or later. But if you still see compilation errors which
say "`NULL' undeclared", comment out the line in _G_config.h
that says this:
#undef NULL
Alternatively, you can reconfigure the package as described in
the previous paragraph, before building it.
5. After the configure script exits, say "make" to build Groff.
Groff is a large package, and it might take a few minutes to
build, depending on your CPU, so you might as well go for a
coffee while it grinds away.
6. Test the package that you have built. A batch file T-GROFF.BAT
in the DJGPP subdirectory is supplied for that purpose. Most
of the commands there are commented out, since I cannot
possibly know what kind of printer do you have and which
additional programs, such as Less, do you have installed. The
only command that runs by default will format a large document
and print it to the screen. Read the comments in the batch
file, uncomment additional lines as you see fit and run the
batch file to see that you get the document printed as you'd
expect. (Btw, the document that the batch file prints is an
introduction to the entire Groff package, so you might as well
read it to make yourself familiar with the programs.)
Note that the batch file sets a lot of environment variables;
if you get ``Out of environment space'' messages, launch a
subsidiary COMMAND.COM with plenty of environment space, like
so:
command.com /e:3000
then invoke T-GROFF.BAT from that COMMAND.COM.
7. Install the package by typing "make install". This will copy
all the binaries, the auxiliary files (fonts, macros, etc.) and
the docs into their places. If you configured the package for
your system, these are precisely the directories where the
files should remain (with the exception of the man pages, see
below). If you use the default configuration, the files will
be installed under the top DJGPP installation directory.
Alternatively, you could instruct Make explicitly where to
install the package by setting the `prefix' variable. For
example:
make install prefix=c:/groff
"make install" doesn't format the man pages, it just copies
them into subdirectories of the %DJDIR%\MAN directory. If you
need to keep formatted pages in your man/ subdirectory, you
will need to format them. Use the commands shown in chapter I,
section 5 above to do that, and redirect its output to the
appropriate catN subdirectory. Alternatively, you could format
the pages when you need to view them (the DJGPP clone of `man'
will automatically format them).
Consult the installation instructions for pre-compiled binaries
above, for more info about installing and using Groff.
8. You can safely delete the directories under
share/groff/<version>/font whose names begin with "devX": these
are needed on X-Windows which is not supported by this port.

95
arch/djgpp/config.bat Normal file
View File

@ -0,0 +1,95 @@
@echo off
echo Configuring GNU Groff for DJGPP v2.x...
Rem The SmallEnv tests protect against fixed and too small size
Rem of the environment in stock DOS shell.
Rem Find out where the sources are
set XSRC=.
if not "%XSRC%" == "." goto SmallEnv
if "%1" == "" goto InPlace
set XSRC=%1
if not "%XSRC%" == "%1" goto SmallEnv
redir -e /dev/null update %XSRC%/configure.orig ./configure
if not exist configure update %XSRC%/configure ./configure
:InPlace
Rem Update configuration files
echo Updating configuration scripts...
if not exist configure.orig update configure configure.orig
sed -f %XSRC%/arch/djgpp/config.sed configure.orig > configure
if errorlevel 1 goto SedError
Rem Make sure they have a config.site file
set CONFIG_SITE=%XSRC%/arch/djgpp/config.site
if not "%CONFIG_SITE%" == "%XSRC%/arch/djgpp/config.site" goto SmallEnv
Rem This is required because DOS/Windows are case-insensitive
Rem to file names, and "make install" will do nothing if Make
Rem finds a file called `install'.
if exist INSTALL ren INSTALL INSTALL.txt
Rem Set HOSTNAME so it shows in config.status
if not "%HOSTNAME%" == "" goto hostdone
if "%windir%" == "" goto msdos
set OS=MS-Windows
if not "%OS%" == "MS-Windows" goto SmallEnv
goto haveos
:msdos
set OS=MS-DOS
if not "%OS%" == "MS-DOS" goto SmallEnv
:haveos
if not "%USERNAME%" == "" goto haveuname
if not "%USER%" == "" goto haveuser
echo No USERNAME and no USER found in the environment, using default values
set HOSTNAME=Unknown PC
if not "%HOSTNAME%" == "Unknown PC" goto SmallEnv
:haveuser
set HOSTNAME=%USER%'s PC
if not "%HOSTNAME%" == "%USER%'s PC" goto SmallEnv
goto userdone
:haveuname
set HOSTNAME=%USERNAME%'s PC
if not "%HOSTNAME%" == "%USERNAME%'s PC" goto SmallEnv
:userdone
set _HOSTNAME=%HOSTNAME%, %OS%
if not "%_HOSTNAME%" == "%HOSTNAME%, %OS%" goto SmallEnv
set HOSTNAME=%_HOSTNAME%
:hostdone
set _HOSTNAME=
set OS=
Rem install-sh is required by the configure script but clashes with the
Rem various Makefile install-foo targets, so we MUST have it before the
Rem script runs and rename it afterwards
test -f install-sh
if not errorlevel 1 goto noren1
test -f install-sh.sh
if not errorlevel 1 mv -f install-sh.sh install-sh
:noren1
echo Running the ./configure script...
sh ./configure --src=%XSRC% --disable-nls --without-x
if errorlevel 1 goto CfgError
test -f install-sh.sh
if not errorlevel 1 goto noren2
test -f install-sh
if not errorlevel 1 mv -f install-sh install-sh.sh
:noren2
echo Done.
goto End
:SedError
echo ./configure script editing failed!
goto End
:CfgError
echo ./configure script exited abnormally!
goto End
:SmallEnv
echo Your environment size is too small. Enlarge it and run me again.
echo Configuration NOT done!
:End
set XSRC=
set CONFIG_SITE=
set HOSTNAME=

16
arch/djgpp/config.sed Normal file
View File

@ -0,0 +1,16 @@
# Additional editing of Makefiles and atconfig
/ac_given_INSTALL=/,/^CEOF/ {
/^s%@g@%/a\
/path=/s,:,;,g
}
# DOS-style absolute file names should be supported as well
/\*) srcdir=/s,/\*,[\\\\/]* | [A-z]:[\\\\/]*,
/\$]\*) INSTALL=/s,\[/\$\]\*,[\\\\/$]* | [A-z]:[\\\\/]*,
# Who said each line has only \012 at its end?
/DEFS=`sed -f/s,'\\012','\\012\\015',
# Switch the order of the two Sed commands, since DOS path names
# could include a colon
/ac_file_inputs=/s,\( -e "s%\^%\$ac_given_srcdir/%"\)\( -e "s%:% $ac_given_srcdir/%g"\),\2\1,

33
arch/djgpp/config.site Normal file
View File

@ -0,0 +1,33 @@
#! /bin/sh
# This is the config.site file for configuring GNU packages
# which are to be built with DJGPP tools.
# These two variables are required, otherwise looking for
# programs along the PATH will not work.
PATH_SEPARATOR=:
PATH_EXPAND=y
# This is required in for "test -f foo" to find foo.exe
export TEST_FINDS_EXE=y
# The root of the DJGPP tree serves as the default prefix
test "x$prefix" = xNONE && prefix='/dev/env/DJDIR'
# This is required for config.status script to be run, since
# ./configure runs it by invoking ${CONFIG_SHELL-/bin/sh}
CONFIG_SHELL=${CONFIG_SHELL='sh'}
# These are set here so the generated Makefile's will be good
# for every DJGPP installation, not only the one where the
# package was configured.
# $INSTALL must be an absolute path name, otherwise config.status
# will try to prepend ./ and ../ to it when it goes into subdirs.
INSTALL=${INSTALL='/dev/env/DJDIR/bin/ginstall -c'}
RANLIB=${RANLIB='ranlib'}
LPR=${LPR='cat >>PRN'}
DVIPRINT=${DVIPRINT='dvilj4 - >>PRN'}
PERLPATH=${PERLPATH='/usr/bin/perl'}
# Force `cp' to be used instead of "ln -s".
ac_cv_prog_LN_S="cp -p"

64
arch/djgpp/t-groff.bat Normal file
View File

@ -0,0 +1,64 @@
@echo off
Rem This script runs groff without requiring that it be installed.
Rem The current directory must be the build directory.
test -d ./src/roff/groff
if not errorlevel 1 goto dirOk
echo this batch file must be run with the build directory as the current directory
goto end
:dirOk
test -x ./src/roff/groff/groff
if not errorlevel 1 goto groffOk
echo this batch file must be run with the build directory as the current directory
goto end
:groffOk
Rem chdir to src, to avoid overflowing the DOS limits with a long PATH.
cd src
set GROFF_FONT_PATH=..;../font
set GROFF_TMAC_PATH=../tmac
set PATH1=%PATH%
set PATH=roff\troff;preproc\pic;preproc\eqn;preproc\tbl;preproc\grn;preproc\refer;preproc\soelim;devices\grotty;%PATH1%
Rem
echo I will use this command to format a document and print it on the screen:
roff\groff\groff -V -e -s -t -p -R -m ttchar -me -Tascii ../doc/meintro.me
pause
Rem Make the following command pipe to Less if you have Less installed:
roff\groff\groff -e -s -t -p -R -m ttchar -me -Tascii ../doc/meintro.me
Rem
set PATH=roff\troff;preproc\pic;preproc\eqn;preproc\tbl;preproc\grn;preproc\refer;preproc\soelim;devices\grops;%PATH1%
echo I will use this command to format a document and print it on PS printer:
roff\groff\groff -V -e -s -t -p -R -me -Tps ../doc/meintro.me
pause
Rem Uncomment the following command if you have a PostScript printer:
REM roff\groff\groff -e -s -t -p -R -me -Tps ../doc/meintro.me >>prn
Rem
set PATH=roff\troff;preproc\pic;preproc\eqn;preproc\tbl;preproc\grn;preproc\refer;preproc\soelim;devices\grolj4;%PATH1%
echo I will use this command to format a document and print it on LJ4 printer:
roff\groff\groff -V -e -s -t -p -R -me -Tlj4 ../doc/meintro.me
pause
Rem Uncomment the following command if you have a LaserJet4 printer:
REM roff\groff\groff -e -s -t -p -R -me -Tlj4 ../doc/meintro.me >>prn
Rem
set PATH=roff\troff;preproc\pic;preproc\eqn;preproc\tbl;preproc\grn;preproc\refer;preproc\soelim;devices\grodvi;%PATH1%
echo I will use this command to format a document into a DVI format:
roff\groff\groff -V -e -s -t -p -R -me -Tdvi ../doc/meintro.me
pause
roff\groff\groff -e -s -t -p -R -me -Tdvi ../doc/meintro.me > meintro.dvi
set PATH=roff\troff;preproc\pic;preproc\eqn;preproc\tbl;preproc\grn;preproc\refer;preproc\soelim;devices\grohtml;%PATH1%
echo I will use this command to format a document into HTML format:
roff\groff\groff -V -e -s -t -p -R -me -Thtml ../doc/meintro.me
pause
roff\groff\groff -e -s -t -p -R -me -Thtml ../doc/meintro.me > meintro.html
set PATH=roff\troff;preproc\pic;preproc\eqn;preproc\tbl;preproc\grn;preproc\refer;preproc\soelim;devices\grolbp;%PATH1%
echo I will use this command to format a document and print it on an LBP printer:
roff\groff\groff -V -e -s -t -p -R -me -Tlbp ../doc/meintro.me
pause
Rem Uncomment the following if you have a Canon CAPSL LBP-4 or LBP-8 printer:
REM roff\groff\groff -e -s -t -p -R -me -Tlbp ../doc/meintro.me >>prn
Rem
set PATH=%PATH1%
set GROFF_FONT_PATH=
set GROFF_TMAC_PATH=
set PATH1=
cd ..
:exit

27
arch/misc/Makefile.sub Normal file
View File

@ -0,0 +1,27 @@
# Copyright (C) 2004 Free Software Foundation, Inc.
# Written by Keith Marshall (keith.d.marshall@ntlworld.com)
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
CLEANADD=shdeps.sed
all: shdeps.sed
shdeps.sed: $(srcdir)/shdeps.sh
$(SHELL) $(srcdir)/shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > $@
# eof

118
arch/misc/shdeps.sh Normal file
View File

@ -0,0 +1,118 @@
#! /bin/sh
# shdeps.sh: Generate OS dependency fixups, for `groff' shell scripts
#
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
# Written by Keith Marshall (keith.d.marshall@ntlworld.com)
#
# Invoked only by `make', as:
# $(SHELL) shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > shdeps.sed
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
cat << ETX
# shdeps.sed: Script generated automatically by \`make' -- do not modify!
/^$/N
/@GROFF_BIN_PATH_SETUP@/c\\
ETX
if [ "$1$2" = "::" ]
then
# `PATH_SEPARATOR' is `:' both at `groff' run time, and in `make',
# implying an implementation which is completely POSIX compliant.
# Simply apply the `GROFF_BIN_PATH' and `PATH_SEPARATOR' values
# determined by `configure', in all cases.
cat << ETX
\\
GROFF_RUNTIME="\${GROFF_BIN_PATH=$3}:"
/@PATH_SEARCH_SETUP@/d
ETX
else
# `PATH_SEPARATOR' is NOT always `:',
# which suggests an implementation for a Microsoft platform.
# We need to choose the `GROFF_BIN_PATH' format and `PATH_SEPARATOR'
# which will suit the user's choice of shell.
#
# Note that some Windows users may specify the `--prefix' path
# using backslash characters, instead of `/', preferred by POSIX,
# so we will also fix that up.
POSIX_BINDIR=`echo $3 | tr '\\\\' /`
cat << ETX
# (The value required is dependent on the user's choice of shell,\\
# and its associated POSIX emulation capabilities.)\\
\\
case "\$OSTYPE" in\\
msys)\\
GROFF_RUNTIME=\${GROFF_BIN_PATH="`
case "$POSIX_BINDIR" in
[a-zA-Z]:*)
IFS=':'
set -- $POSIX_BINDIR
case "$2" in
/*) POSIX_BINDIR="/$1$2" ;;
*) POSIX_BINDIR="/$1/$2" ;;
esac
shift 2
for dir
do
POSIX_BINDIR="$POSIX_BINDIR:$dir"
done
;;
esac
echo "$POSIX_BINDIR"`"}":" ;;\\
cygwin)\\
: \${GROFF_BIN_PATH="\`cygpath -w '$POSIX_BINDIR'\`"}\\
GROFF_RUNTIME=\`cygpath "\$GROFF_BIN_PATH"\`":" ;;\\
*)\\
GROFF_RUNTIME=\${GROFF_BIN_PATH="$POSIX_BINDIR"}";" ;;\\
esac
ETX
# On Microsoft platforms, we may also need to configure
# the PATH search function, used in the `pdfroff' script,
# to use ';', instead of ':', as the PATH_SEPARATOR.
cat << ETX
/@PATH_SEARCH_SETUP@/c\\
#\\
# This implementation is configured for a Microsoft platform.\\
# Thus, the default PATH_SEPARATOR is ';', although some shells may\\
# use the POSIX standard ':' instead. Therefore, we need to examine\\
# the OSTYPE environment variable, to identify which is appropriate\\
# to make PATH searches work correctly.\\
#\\
case "\$OSTYPE" in\\
#\\
msys | cygwin)\\
#\\
# These emulate POSIX, and use ':'\\
#\\
PATH_SEPARATOR=\${PATH_SEPARATOR-':'} ;;\\
#\\
*)\\
#\\
# For anything else, default to ';'\\
#\\
PATH_SEPARATOR=\${PATH_SEPARATOR-';'} ;;\\
esac
ETX
fi
# eof

11663
configure vendored Executable file

File diff suppressed because it is too large Load Diff

126
configure.ac Normal file
View File

@ -0,0 +1,126 @@
# Autoconf configuration file for groff.
# Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is part of groff.
#
# groff is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# groff is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with groff; see the file COPYING. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
#
# Process this file with autoconf to produce a configure script.
AC_INIT
AC_PREREQ(2.59)
AC_CONFIG_HEADERS([src/include/config.h:src/include/config.hin])
AC_CONFIG_SRCDIR([src/roff/groff/groff.cpp])
# checks for programs
AC_PROG_CC
AC_PROG_CXX
GROFF_CXX_CHECK
GROFF_EBCDIC
GROFF_OS390
GROFF_X11
GROFF_APPRESDIR_OPTION
GROFF_APPRESDIR_DEFAULT
GROFF_PRINT
AC_PATH_PROG([PERLPATH], [perl], [/usr/bin/perl])
GROFF_PROG_YACC
AC_PROG_RANLIB
GROFF_INSTALL_SH
GROFF_INSTALL_INFO
AC_PROG_INSTALL
AC_PROG_LN_S
# use a dummy substitution if no csh hack is necessary to avoid errors
# with non-GNU sed programs
GROFF_CSH_HACK([SH_SCRIPT_SED_CMD='1s/.*/:/'], [SH_SCRIPT_SED_CMD='1s/a/a/'])
AC_SUBST([SH_SCRIPT_SED_CMD])
# checks for headers
AC_CHECK_HEADERS([stdlib.h unistd.h dirent.h limits.h sys/dir.h \
string.h strings.h math.h sys/time.h direct.h process.h])
GROFF_ISC_SYSV3
GROFF_POSIX
# checks for header stuff
GROFF_SRAND
GROFF_NEED_DECLARATION([gettimeofday])
GROFF_NEED_DECLARATION([hypot])
GROFF_NEED_DECLARATION([popen])
GROFF_NEED_DECLARATION([pclose])
GROFF_NEED_DECLARATION([putenv])
GROFF_NEED_DECLARATION([rand])
GROFF_NEED_DECLARATION([snprintf])
GROFF_NEED_DECLARATION([srand])
GROFF_NEED_DECLARATION([strcasecmp])
GROFF_NEED_DECLARATION([strncasecmp])
GROFF_NEED_DECLARATION([vfprintf])
GROFF_NEED_DECLARATION([vsnprintf])
GROFF_SYS_NERR
GROFF_SYS_ERRLIST
GROFF_OSFCN_H
GROFF_LIMITS_H
GROFF_INTTYPES_H
# checks for typedefs
GROFF_UNSIGNED_LONG_LONG
GROFF_UINTMAX_T
GROFF_TIME_T
GROFF_TYPE_SIGNAL
GROFF_STRUCT_EXCEPTION
# checks for libraries
GROFF_LIBC
GROFF_LIBM
# checks for functions
AC_FUNC_MMAP
saved_libs="$LIBS"
LIBS="$LIBS $LIBC $LIBM"
AC_REPLACE_FUNCS([fmod getcwd putenv snprintf strcasecmp \
strerror strncasecmp strtol])
# vsnprintf is in the same source file as snprintf
AC_CHECK_FUNCS([vsnprintf], [], [AC_LIBOBJ([snprintf])])
LIBS="$saved_libs"
AC_CHECK_FUNCS([gettimeofday isatty kill rename setlocale strsep])
GROFF_MKSTEMP
AC_CHECK_DECLS([sys_siglist])
# checks for compiler characteristics
GROFF_ARRAY_DELETE
GROFF_TRADITIONAL_CPP
# checks for operating system services
GROFF_WCOREFLAG
# other random stuff
GROFF_BROKEN_SPOOLER_FLAGS
GROFF_PAGE
GROFF_G
GROFF_TMAC
GROFF_TARGET_PATH_SEPARATOR
GROFF_HTML_PROGRAMS
GROFF_PDFDOC_PROGRAMS
GROFF_PNMTOPS_NOSETPAGE
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
AC_CONFIG_FILES([Makefile doc/Makefile src/utils/xtotroff/Makefile])
AC_CONFIG_FILES([contrib/gdiffmk/tests/runtests],
[chmod +x contrib/gdiffmk/tests/runtests])
AC_CONFIG_FILES([test-groff], [chmod +x test-groff])
AC_OUTPUT
GROFF_APPRESDIR_CHECK

View File

@ -0,0 +1,19 @@
MAN1=eqn2graph.n
CLEANADD=eqn2graph
all: eqn2graph
eqn2graph: eqn2graph.sh
rm -f $@; \
sed -e "s|@g@|$(g)|g" \
-e "s|@VERSION@|$(version)$(revision)|" \
-e $(SH_SCRIPT_SED_CMD) $(srcdir)/eqn2graph.sh >$@; \
chmod +x $@
install_data: eqn2graph
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/eqn2graph
$(INSTALL_SCRIPT) eqn2graph $(bindir)/eqn2graph
uninstall_sub:
-rm -f $(bindir)/eqn2graph

View File

@ -0,0 +1,115 @@
.\" $Id: eqn2graph.man,v 1.4 2003/10/28 07:46:23 wlemb Exp $
.\" This documentation is released to the public domain.
.
.
.\" Like TP, but if specified indent is more than half
.\" the current line-length - indent, use the default indent.
.de Tp
.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
.el .TP "\\$1"
..
.
.
.TH EQN2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.IX eqn2graph
.SH NAME
eqn2graph \- convert an EQN equation into a cropped image
.
.
.SH SYNOPSIS
.B eqn2graph
[
.B \-unsafe
]
[
.BI \-format\ fmt
]
.
.
.SH DESCRIPTION
Reads an EQN equation (one line) as input; produces an image
file (by default in Portable Network Graphics format) suitable for the
Web as output.
.P
Your input EQN code should \fInot\fR have the \&.EQ/.EN preamble that
that normally precedes it within
.BR groff (@MAN1EXT@)
macros; nor do you need to have dollar-sign or other delimiters
around the equation.
.P
The output image will be a black-on-white graphic clipped to the
smallest possible bounding box that contains all the black pixels.
By specifying command-line options to be passed to
.BR convert (1)
you can give it a border, set the background transparent, set the
image's pixel density, or perform other useful transformations.
.P
This program uses
.BR @g@eqn (@MAN1EXT@),
.BR groff (@MAN1EXT@),
and the ImageMagick
.BR convert (1)
program.
These programs must be installed on your system and accessible on your
$PATH for \fBeqn2graph\fR to work.
.
.
.SH OPTIONS
.TP
.B \-unsafe
Run
.BR groff (@MAN1EXT@)
in the `unsafe' mode enabling the PIC macro
.B sh
to execute arbitrary commands.
The default is to forbid this.
.TP
.BI \-format\ fmt
Specify an output format; the default is PNG (Portable Network Graphics).
Any format that
.BR convert (1)
can emit is supported.
.PP
Command-line switches and arguments not listed above are passed to
.BR convert (1).
.
.
.SH FILES
.Tp \w'\fB@MACRODIR@/eqnrc'u+2n
.B @MACRODIR@/eqnrc
The
.BR @g@eqn (@MAN1EXT@)
initialization file.
.
.
.SH ENVIRONMENT
.TP
.B GROFF_TMPDIR
The directory in which temporary files will be created.
If this is not set
.B eqn2graph
searches the environment variables
.BR \%TMPDIR ,
.BR TMP ,
and
.B TEMP
(in that order).
Otherwise, temporary files will be created in
.BR /tmp .
.
.
.SH "SEE ALSO"
.BR pic2graph (@MAN1EXT@),
.BR grap2graph (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@),
.BR groff (@MAN1EXT@),
.BR gs (1),
.BR convert (1).
.
.
.SH AUTHOR
Eric S. Raymond <esr@thyrsus.com>.
.
.\" Local Variables:
.\" mode: nroff
.\" End:

View File

@ -0,0 +1,91 @@
#! /bin/sh
#
# eqn2graph -- compile EQN equation descriptions to bitmap images
#
# by Eric S. Raymond <esr@thyrsus.com>, July 2002
#
# In Unixland, the magic is in knowing what to string together...
#
# Take an eqn equation on stdin, emit cropped bitmap on stdout.
# The pic markup should *not* be wrapped in .EQ/.EN, this script will do that.
# A -U option on the command line enables gpic/groff "unsafe" mode.
# A -format FOO option changes the image output format to any format
# supported by convert(1). All other options are passed to convert(1).
# The default format is PNG.
#
# This is separate from pic2graph because pic processing has some weird
# clipping effect on the output, mangling equations that are very wide
# or deep. Besides, this tool can supply its own delimiters.
#
# Requires the groff suite and the ImageMagick tools. Both are open source.
# This code is released to the public domain.
#
# Here are the assumptions behind the option processing:
#
# 1. None of the options of eqn(1) are relevant.
#
# 2. Only the -U option of groff(1) is relevant.
#
# 3. Many options of convert(1) are potentially relevant, (especially
# -density, -interlace, -transparency, -border, and -comment).
#
# Thus, we pass -U to groff(1), and everything else to convert(1).
#
# $Id: eqn2graph.sh,v 1.5 2005/05/18 07:03:06 wl Exp $
#
groff_opts=""
convert_opts=""
format="png"
while [ "$1" ]
do
case $1 in
-unsafe)
groff_opts="-U";;
-format)
format=$2
shift;;
-v | --version)
echo "GNU eqn2graph (groff) version @VERSION@"
exit 0;;
--help)
echo "usage: eqn2graph [ option ...] < in > out"
exit 0;;
*)
convert_opts="$convert_opts $1";;
esac
shift
done
# create temporary directory
tmp=
for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
test -z "$d" && continue
tmp=`(umask 077 && mktemp -d -q "$d/eqn2graph-XXXXXX") 2> /dev/null` \
&& test -n "$tmp" && test -d "$tmp" \
&& break
tmp=$d/eqn2graph$$-$RANDOM
(umask 077 && mkdir $tmp) 2> /dev/null && break
done;
if test -z "$tmp"; then
echo "$0: cannot create temporary directory" >&2
{ (exit 1); exit 1; }
fi
trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
# Here goes:
# 1. Add .EQ/.EN.
# 2. Process through eqn(1) to emit troff markup.
# 3. Process through groff(1) to emit Postscript.
# 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
read equation
(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"$equation"'$') | \
groff -e $groff_opts -Tps -P-pletter > $tmp/eqn2graph.ps \
&& convert -trim -crop 0x0 $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \
&& cat $tmp/eqn2graph.$format
# End

63
contrib/gdiffmk/ChangeLog Normal file
View File

@ -0,0 +1,63 @@
2005-01-16 Mike Bianchi <MBianchi@Foveal.com>
* gdiffmk.sh (Usage): Fix typos.
<top>: Allow `-M<arg1> <arg2>' also.
* gdiffmk.man: Updated.
2005-01-13 Mike Bianchi <MBianchi@Foveal.com>
* gdiffmk.sh: Add the -D, -M, and -B options, which provide actions
akin to nrchbar.
Thanks to Larry Kollar (http://home.alltel.net/kollar/groff/).
* gdiffmk.man: Updated.
* tests/runtests.in: Added tests for gdiffmk's -D, -M, and -B
options.
* tests/baseline8, tests/baseline9, tests/baseline10: New files.
2004-12-16 Mike Bianchi <MBianchi@Foveal.com>
* tests/runtests.in: Fix typo (s/$(srcdir)/${srcdir}/).
2004-12-15 Werner LEMBERG <wl@gnu.org>
The configure script now generates tests/runtests.
* tests/tests.sh: Renamed to...
* tests/runtests.in: This.
Add proper $srcdir prefixes to make it run from build directory.
* README, Makefile.sub (CLEANADD), tests/test_baseline7: Updated.
2004-12-14 Werner LEMBERG <wl@gnu.org>
* gdiffmk.sh: Make sed pattern work with alternate result of GNU
diff's -D option, using `!' instead of `not' in #endif comments.
(Exit): Use prefix for each emitted message line.
2004-12-14 Mike Bianchi <MBianchi@Foveal.com>
* tests/*: New files for testing gdiffmk.
* README, gdiffmk.man, gdiffmk.sh: Updated.
Minor fixes.
2004-12-13 Mike Bianchi <MBianchi@Foveal.com>
Add `-x' command line option to select a diff program.
* gdiffmk.sh: Add code to handle `-x'.
Move test for working `diff' down.
Fix sed pattern -- `.mc *' needs to be followed by `.mc .'.
(Usage): Updated.
* gdiffmk.man: Updated.
2004-12-12 Mike Bianchi <MBianchi@Foveal.com>
* README: New file.
2004-12-11 Mike Bianchi <MBianchi@Foveal.com>
First import of gdiffmk files.

View File

@ -0,0 +1,47 @@
# Makefile.sub for `gdiffmk' (integration into the groff source tree)
# File position: <groff-source>/contrib/gdiffmk/Makefile.sub
# Last update: 12 December 2004
# Copyright (C) 2004 Free Software Foundation, Inc.
# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
# This file is part of the gdiffmk utility, which is part of groff.
# groff is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# groff is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
# You should have received a copy of the GNU General Public License
# along with groff; see the files COPYING and LICENSE in the top
# directory of the groff source. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
########################################################################
MAN1=gdiffmk.n
CLEANADD=gdiffmk tests/runtests
all: gdiffmk
gdiffmk: gdiffmk.sh
rm -f $@; \
sed -e "s|@BINDIR@|$(bindir)|g" \
-e "s|@VERSION@|$(version)$(revision)|g" \
-e $(SH_SCRIPT_SED_CMD) $(srcdir)/gdiffmk.sh >$@; \
chmod +x $@
install_data: gdiffmk
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/gdiffmk
$(INSTALL_SCRIPT) gdiffmk $(bindir)/gdiffmk
uninstall_sub:
-rm -f $(bindir)/gdiffmk

46
contrib/gdiffmk/README Normal file
View File

@ -0,0 +1,46 @@
gdiffmk is approximately a recreation of the original Bell Labs/AT&T diffmk
command for troff/nroff documents, with enhancements.
It should not be confused with `diffmk' commands that operate on XML.
The inspiration for this code was a Perl 2 version written in 1989 by Randal
L. Schwartz. See
landfield.com/software/comp.sources.misc/archive-name/volume06/diffmk.p.gz
The command also attempts to reproduce some of the functionality of the old
`nrchbar' command. See
open-systems.ufl.edu/mirrors/ftp.isc.org/usenet/comp.sources.unix/volume10/nrchbar.Z
Thanks to Werner Lemberg for help in making the package more portable and
fit into the GNU groff source structure.
Gnu diff(1) with the -Dname option does all of the work and sed(1)
translates the output into something groff/troff/nroff can handle.
Note the BUGS on the man page.
The `tests' directory contains simple tests. `runtests run' runs them and
compares the output against baseline files. Calling `runtests' without
argument gives the usage.
----------------------------------------------------------------------------
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
This file is part of the gdiffmk utility, which is part of groff.
groff is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
groff is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with groff; see the files COPYING and LICENSE in the top
directory of the groff source. If not, write to the Free Software
Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.

281
contrib/gdiffmk/gdiffmk.man Normal file
View File

@ -0,0 +1,281 @@
.ig \"-*- nroff -*-
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of the gdiffmk utility, which is part of groff.
Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
..
.
.do mso www.tmac
.
.TH GDIFFMK @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.
.
.SH NAME
gdiffmk \- mark differences between groff/nroff/troff files
.
.
.SH SYNOPSIS
.nr a \n(.j
.ad l
.nr i \n(.i
.in +\w'\fBgdiffmk 'u
.ti \niu
.B gdiffmk
.de OP
. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
. el .RB "[\ " "\\$1" "\ ]"
..
.OP \-a \%addmark
.OP \-c \%changemark
.OP \-d \%deletemark
[\ \c
.B \-D
.OP \-B
.OP \-M "mark1 mark2"
]
.OP \-x \%diffcmd
.OP \-\-
.OP \-\-help
.OP \%\-\-version
.I \%file1
.I \%file2
[\ \c
.IR \%output \ \c
]
.br
.ad \na
.
.
.SH DESCRIPTION
.B gdiffmk
compares two
.BR groff (1),
.BR nroff (1),
or
.BR troff (1)
documents,
.I file1
and
.IR file2 ,
and creates an output which is
.I file2
with added `margin character' (.mc) commands that indicate the differences.
.
.LP
If the
.I output
filename is present,
the output is written there.
If it is
.B \-
or absent the output is written to the standard output.
.
.LP
If the
.I file1
or
.I file2
argument is
.B \-
the standard input is read for that input.
Clearly both cannot be
.BR \- .
.
.LP
Note that the output is not necessarily compatible with all macro packages
and all preprocessors.
See the
.B BUGS
section below.
.
.
.SH OPTIONS
.TP
.BI \-a addmark
Use the
.I addmark
for source lines not in
.I file1
but present in
.IR file2 .
Default:
.BR + .
.
.TP
.B \-B
By default, the deleted texts marked by the
.B \-D
option end
with an added troff break command,
.BR .br ,
to ensure that the deletions are marked properly.
This is the only way to guarantee that deletions and small
changes get flagged.
This option directs the program not to insert these breaks; it makes no
sense to use it without
.BR \-D .
.
.TP
.BI \-c changemark
Use the
.I changemark
for changed source lines.
Default:
.BR | .
.
.TP
.BI \-d deletemark
Use the
.I deletemark
for deleted source lines.
Default:
.BR * .
.
.TP
.B \-D
Show the deleted portions from changed and deleted text.
Default delimiting marks:
.BR "[[" " .\&.\&.\&. " "]]" .
.
.TP
.BI \-M "mark1 mark2"
Change the delimiting marks for the
.B \-D
option.
It makes no sense to use this option without
.BR \-D .
.
.TP
.BI \-x diffcmd
Use the
.I diffcmd
command to perform the comparison of
.I file1
and
.IR file2 .
In particular,
.I diffcmd
should accept the GNU
.B diff
.BI \-D name
option.
Default:
.BR diff (1).
.
.TP
.B \-\-
All the following arguments are treated as file names,
even if they begin with
.BR \- .
.
.TP
.B \-\-help
Print a usage message on standard error output and exit.
.
.TP
.B \-\-version
Print version information on the standard output and exit.
.
.
.SH BUGS
The output is not necessarily compatible with all macro packages
and all preprocessors.
A workaround that is often successful against preprocessor problems
is to run
.B gdiffmk
on the output of all the preprocessors instead of the input source.
.
.LP
.B gdiffmk
relies on the
.BI \-D name
option of GNU
.BR diff (1)
to make a merged `#ifdef' output format.
It hasn't been tested whether other versions of
.BR diff (1)
do support this option.
See also the
.BI \-x diffcmd
option.
.
.LP
Report bugs to bug-groff@gnu.org.
Include a complete, self-contained example that will allow the bug to
be reproduced, and say which version of
.B gdiffmk
you are using.
.
.
.SH AUTHORS
This document was written and is maintained by
.MTO MBianchi@Foveal.com "Mike Bianchi" .
.
.LP
This document is distributed under the terms of the FDL (GNU Free
Documentation License) version 1.1 or later.
You should have received a copy of the FDL on your system, it is also
available on-line at the
.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
.
.LP
.B gdiffmk
is part of the
.I groff
GNU free software project.
All parts of the
.I groff package
are protected by GNU copyleft licenses.
The software files are distributed under the terms of the GNU General
Public License (GPL), while the documentation files mostly use the GNU
Free Documentation License (FDL).
.
.
.SH COPYRIGHT
Copyright \(co 2004, 2005 Free Software Foundation, Inc.
.
.LP
.B gdiffmk
is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
.
.LP
.B gdiffmk
is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
.
.LP
You should have received a copy of the GNU General Public License along
with groff; see the file COPYING.
If not, write to the Free Software
Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
.
.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR nroff (@MAN1EXT@),
.BR gtroff (@MAN1EXT@),
.BR diff (@MAN1EXT@)
.
.\" Local Variables:
.\" mode: nroff
.\" End:

346
contrib/gdiffmk/gdiffmk.sh Normal file
View File

@ -0,0 +1,346 @@
#! /bin/sh
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
# This file is part of the gdiffmk utility, which is part of groff.
# groff is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# groff is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
# You should have received a copy of the GNU General Public License
# along with groff; see the files COPYING and LICENSE in the top
# directory of the groff source. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
# This file is part of GNU gdiffmk.
cmd=$( basename $0 )
function Usage {
if test "$#" -gt 0
then
echo >&2 "${cmd}: $@"
fi
echo >&2 "\
Usage: ${cmd} [ OPTIONS ] FILE1 FILE2 [ OUTPUT ]
Place difference marks into the new version of a groff/nroff/troff document.
FILE1 and FILE2 are compared, using \`diff', and FILE2 is output with
groff \`.mc' requests added to indicate how it is different from FILE1.
FILE1 Previous version of the groff file. \`-' means standard input.
FILE2 Current version of the groff file. \`-' means standard input.
Either FILE1 or FILE2 can be standard input, but not both.
OUTPUT Copy of FILE2 with \`.mc' commands added.
\`-' means standard output (the default).
OPTIONS:
-a ADDMARK Mark for added groff source lines. Default: \`+'.
-c CHANGEMARK Mark for changed groff source lines. Default: \`|'.
-d DELETEMARK Mark for deleted groff source lines. Default: \`*'.
-D Show the deleted portions from changed and deleted text.
Default delimiting marks: \`[[' .... \`]]'.
-B By default, the deleted texts marked by the \`-D' option end
with an added troff \`.br' command. This option prevents
the added \`.br'.
-M MARK1 MARK2 Change the delimiting marks for the \`-D' option.
-x DIFFCMD Use a different diff(1) command;
one that accepts the \`-Dname' option, such as GNU diff.
--version Print version information on the standard output and exit.
--help Print this message on the standard error.
"
exit 255
}
function Exit {
exitcode=$1
shift
for arg
do
echo >&2 "${cmd}: $1"
shift
done
exit ${exitcode}
}
# Usage: FileRead exit_code filename
#
# Check for existence and readability of given file name.
# If not found or not readable, print message and exit with EXIT_CODE.
function FileRead {
case "$2" in
-)
return
;;
esac
if test ! -e "$2"
then
Exit $1 "File \`$2' not found."
fi
if test ! -r "$2"
then
Exit $1 "File \`$2' not readable."
fi
}
# Usage: FileCreate exit_code filename
#
# Create the given filename if it doesn't exist.
# If unable to create or write, print message and exit with EXIT_CODE.
function FileCreate {
case "$2" in
-)
return
;;
esac
if ! touch "$2" 2>/dev/null
then
if test ! -e "$2"
then
Exit $1 "File \`$2' not created; " \
"Cannot write directory \`$( dirname "$2" )'."
fi
Exit $1 "File \`$2' not writeable."
fi
}
function WouldClobber {
case "$2" in
-)
return
;;
esac
if test "$1" -ef "$3"
then
Exit 3 \
"The $2 and OUTPUT arguments both point to the same file," \
"\`$1', and it would be overwritten."
fi
}
ADDMARK='+'
CHANGEMARK='|'
DELETEMARK='*'
MARK1='[['
MARK2=']]'
function RequiresArgument {
# Process flags that take either concatenated or
# separated values.
case "$1" in
-??*)
expr "$1" : '-.\(.*\)'
return 1
;;
esac
if test "$#" -lt 2
then
Exit 255 "Option \`$1' requires a value."
fi
echo "$2"
return 0
}
badoption=
DIFFCMD=diff
D_option=
br=.br
for OPTION
do
case "${OPTION}" in
-a*)
ADDMARK=$( RequiresArgument "${OPTION}" $2 ) &&
shift
;;
-c*)
CHANGEMARK=$( RequiresArgument "${OPTION}" $2 ) &&
shift
;;
-d*)
DELETEMARK=$( RequiresArgument "${OPTION}" $2 ) &&
shift
;;
-D )
D_option=D_option
;;
-M* )
MARK1=$( RequiresArgument "${OPTION}" $2 ) &&
shift
if [ $# -lt 2 ]
then
Usage "Option \`-M' is missing the MARK2 value."
fi
MARK2=$2
shift
;;
-B )
br=.
;;
-x* )
DIFFCMD=$( RequiresArgument "${OPTION}" $2 ) &&
shift
;;
--version)
echo "GNU ${cmd} (groff) version @VERSION@"
exit 0
;;
--help)
Usage
;;
--)
# What follows -- are file arguments
shift
break
;;
-)
break
;;
-*)
badoption="${cmd}: invalid option \`$1'"
;;
*)
break
;;
esac
shift
done
${DIFFCMD} -Dx /dev/null /dev/null >/dev/null 2>&1 ||
Usage "The \`${DIFFCMD}' program does not accept" \
"the required \`-Dname' option.
Use GNU diff instead. See the \`-x DIFFCMD' option."
if test -n "${badoption}"
then
Usage "${badoption}"
fi
if test "$#" -lt 2 -o "$#" -gt 3
then
Usage "Incorrect number of arguments."
fi
if test "1$1" = 1- -a "2$2" = 2-
then
Usage "Both FILE1 and FILE2 are \`-'."
fi
FILE1=$1
FILE2=$2
FileRead 1 "${FILE1}"
FileRead 2 "${FILE2}"
if test "$#" = 3
then
case "$3" in
-)
# output goes to standard output
;;
*)
# output goes to a file
WouldClobber "${FILE1}" FILE1 "$3"
WouldClobber "${FILE2}" FILE2 "$3"
FileCreate 3 "$3"
exec >$3
;;
esac
fi
# To make a very unlikely label even more unlikely ...
label=__diffmk_$$__
sed_script='
/^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
/^#ifdef '"${label}"'/ s/.*/.mc '"${ADDMARK}"'/
/^#endif \/\* '"${label}"'/ s/.*/.mc/
p
d
}
/^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
/^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
/^#else \/\* '"${label}"'/ s/.*/.mc '"${CHANGEMARK}"'/
/^#endif \/\* '"${label}"'/ s/.*/.mc/
p
d
}
/^#endif \/\* \(not\|!\) '"${label}"'/ {
s/.*/.mc '"${DELETEMARK}"'/p
a\
.mc
}
d
}
p
'
if [ ${D_option} ]
then
sed_script='
/^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
/^#ifdef '"${label}"'/ s/.*/.mc '"${ADDMARK}"'/
/^#endif \/\* '"${label}"'/ s/.*/.mc/
p
d
}
/^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
/^#ifndef '"${label}"'/ {
i\
'"${MARK1}"'
d
}
/^#else \/\* '"${label}"'/ ! {
/^#endif \/\* [!not ]*'"${label}"'/ ! {
p
d
}
}
/^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
/^#else \/\* '"${label}"'/ {
i\
'"${MARK2}"'\
'"${br}"'
s/.*/.mc '"${CHANGEMARK}"'/
a\
.mc '"${CHANGEMARK}"'
d
}
/^#endif \/\* '"${label}"'/ s/.*/.mc/
p
d
}
/^#endif \/\* \(not\|!\) '"${label}"'/ {
i\
'"${MARK2}"'\
'"${br}"'
s/.*/.mc '"${DELETEMARK}"'/p
a\
.mc
}
d
}
p
'
fi
diff -D"${label}" -- ${FILE1} ${FILE2} |
sed -n "${sed_script}"
# EOF

View File

@ -0,0 +1,11 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
file1 only
file1 and file2 #2
file1 and file2 #3
file1 only
file1 only
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,11 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
file2 only
file2 only
file1 and file2 #2
file2 only
file1 and file2 #3
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,98 @@
#! /bin/sh
# A very simple function test for gdiffmk.sh.
srcdir=@srcdir@
command=../gdiffmk
# Test the number of arguments and the first argument.
case $#-$1 in
1-clean )
rm -fv test_result* tmp_file*
exit 0
;;
1-run )
;;
* )
echo >&2 "$0 [ clean | run ]
Run a few simple tests on \`${command}'."'
clean Remove the test_result? and tmp_file? files.
run Run the tests.
'
exit 255
;;
esac
function TestResult {
if cmp -s $1 $2
then
echo $2 PASSED
else
echo ''
echo $2 TEST FAILED
diff $1 $2
echo ''
fi
}
tmpfile=/tmp/$$
trap 'rm -f ${tmpfile}' 0 1 2 3 15
# Run tests.
# 3 file arguments
ResultFile=test_result1
${command} ${srcdir}/file1 ${srcdir}/file2 ${ResultFile} 2>${tmpfile}
cat ${tmpfile} >>${ResultFile}
TestResult ${srcdir}/test_baseline ${ResultFile}
# OUTPUT to stdout by default
ResultFile=test_result2
${command} ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline ${ResultFile}
# OUTPUT to stdout via - argument
ResultFile=test_result3
${command} ${srcdir}/file1 ${srcdir}/file2 - >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline ${ResultFile}
# FILE1 from standard input via - argument
ResultFile=test_result4
${command} - ${srcdir}/file2 <${srcdir}/file1 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline ${ResultFile}
# FILE2 from standard input via - argument
ResultFile=test_result5
${command} ${srcdir}/file1 - <${srcdir}/file2 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline ${ResultFile}
# Different values for addmark, changemark, deletemark
ResultFile=test_result6
${command} -aA -cC -dD ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline6 ${ResultFile}
# Test for accidental file overwrite.
ResultFile=test_result7
cp ${srcdir}/file2 tmp_file7
${command} -aA -dD -cC ${srcdir}/file1 tmp_file7 tmp_file7 \
>${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline7 ${ResultFile}
# Test -D option
ResultFile=test_result8
${command} -D ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline8 ${ResultFile}
# Test -D and -M options
ResultFile=test_result9
${command} -D -M '<<<<' '>>>>' \
${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline9 ${ResultFile}
# Test -D and -B options
ResultFile=test_result10
${command} -D -B ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
TestResult ${srcdir}/test_baseline10 ${ResultFile}
# EOF

View File

@ -0,0 +1,17 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
.mc |
file2 only
file2 only
.mc
file1 and file2 #2
.mc +
file2 only
.mc
file1 and file2 #3
.mc *
.mc
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,26 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
[[
file1 only
]]
.
.mc |
file2 only
file2 only
.mc
file1 and file2 #2
.mc +
file2 only
.mc
file1 and file2 #3
[[
file1 only
file1 only
]]
.
.mc *
.mc
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,17 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
.mc C
file2 only
file2 only
.mc
file1 and file2 #2
.mc A
file2 only
.mc
file1 and file2 #3
.mc D
.mc
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,2 @@
gdiffmk: The FILE2 and OUTPUT arguments both point to the same file,
gdiffmk: `tmp_file7', and it would be overwritten.

View File

@ -0,0 +1,26 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
[[
file1 only
]]
.br
.mc |
file2 only
file2 only
.mc
file1 and file2 #2
.mc +
file2 only
.mc
file1 and file2 #3
[[
file1 only
file1 only
]]
.br
.mc *
.mc
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,26 @@
.ll 25
.pl 20
.nf
file1 and file2 #1
<<<<
file1 only
>>>>
.br
.mc |
file2 only
file2 only
.mc
file1 and file2 #2
.mc +
file2 only
.mc
file1 and file2 #3
<<<<
file1 only
file1 only
>>>>
.br
.mc *
.mc
file1 and file2 #4
file1 and file2 #5

View File

@ -0,0 +1,19 @@
MAN1=grap2graph.n
CLEANADD=grap2graph
all: grap2graph
grap2graph: grap2graph.sh
rm -f $@; \
sed -e "s|@g@|$(g)|g" \
-e "s|@VERSION@|$(version)$(revision)|" \
-e $(SH_SCRIPT_SED_CMD) $(srcdir)/grap2graph.sh >$@; \
chmod +x $@
install_data: grap2graph
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/grap2graph
$(INSTALL_SCRIPT) grap2graph $(bindir)/grap2graph
uninstall_sub:
-rm -f $(bindir)/grap2graph

View File

@ -0,0 +1,105 @@
.\" $Id: grap2graph.man,v 1.3 2003/10/28 07:46:23 wlemb Exp $
.\" This documentation is released to the public domain.
.
.
.TH GRAP2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.IX grap2graph
.SH NAME
grap2graph \- convert a grap diagram into a cropped bitmap image
.
.
.SH SYNOPSIS
.B grap2graph
[
.B \-unsafe
]
[
.BI \-resolution\ M\fR|\fPMxN
]
[
.BI \-format\ fmt
]
.
.
.SH DESCRIPTION
Reads a grap program as input; produces an image file (by default in
Portable Network Graphics format) suitable for the Web as output.
For a description of the grap language, see
.BR grap (1).
.P
Your graph specification should \fInot\fR be wrapped with the \&.G1 and
\&.G2 macros that normally guard it within
.BR groff (@MAN1EXT@)
macros.
.P
The output image will be a black-on-white graphic clipped to the
smallest possible bounding box that contains all the black pixels.
By specifying command-line options to be passed to
.BR convert (1)
you can give it a border, set the background transparent, set the
image's pixel density, or perform other useful transformations.
.P
This program uses
.BR grap (1),
.BR @g@pic (@MAN1EXT@),
.BR groff (@MAN1EXT@),
and the ImageMagick
.BR convert (1)
program.
These programs must be installed on your system and accessible on your
$PATH for \fBgrap2graph\fR to work.
.
.
.SH OPTIONS
.TP
.B \-unsafe
Run
.BR @g@pic (@MAN1EXT@)
and
.BR groff (@MAN1EXT@)
in the `unsafe' mode enabling the PIC macro
.B sh
to execute arbitrary commands.
The default is to forbid this.
.TP
.BI \-format\ fmt
Specify an output format; the default is PNG (Portable Network Graphics).
Any format that
.BR convert (1)
can emit is supported.
.PP
Command-line switches and arguments not listed above are passed to
.BR convert (1).
.
.
.SH ENVIRONMENT
.TP
.B GROFF_TMPDIR
The directory in which temporary files will be created.
If this is not set
.B grap2graph
searches the environment variables
.BR \%TMPDIR ,
.BR TMP ,
and
.B TEMP
(in that order).
Otherwise, temporary files will be created in
.BR /tmp .
.
.
.SH "SEE ALSO"
.BR pic2graph (@MAN1EXT@),
.BR eqn2graph (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR groff (@MAN1EXT@),
.BR gs (1),
.BR convert (1).
.
.
.SH AUTHOR
Eric S. Raymond <esr@thyrsus.com>
.
.\" Local Variables:
.\" mode: nroff
.\" End:

View File

@ -0,0 +1,85 @@
#! /bin/sh
#
# grap2graph -- compile graph description descriptions to bitmap images
#
# by Eric S. Raymond <esr@thyrsus.com>, May 2003
#
# In Unixland, the magic is in knowing what to string together...
#
# Take grap description on stdin, emit cropped bitmap on stdout.
# The pic markup should *not* be wrapped in .G1/.G2, this script will do that.
# A -U option on the command line enables gpic/groff "unsafe" mode.
# A -format FOO option changes the image output format to any format
# supported by convert(1). All other options are passed to convert(1).
# The default format is PNG.
#
# Requires the groff suite and the ImageMagick tools. Both are open source.
# This code is released to the public domain.
#
# Here are the assumptions behind the option processing:
#
# 1. None of the options of grap(1) are relevant.
#
# 2. Only the -U option of groff(1) is relevant.
#
# 3. Many options of convert(1) are potentially relevant, (especially
# -density, -interlace, -transparency, -border, and -comment).
#
# Thus, we pass -U to groff(1), and everything else to convert(1).
#
# $Id: grap2graph.sh,v 1.4 2005/05/18 07:03:06 wl Exp $
#
groff_opts=""
convert_opts=""
format="png"
while [ "$1" ]
do
case $1 in
-unsafe)
groff_opts="-U";;
-format)
format=$2
shift;;
-v | --version)
echo "GNU grap2graph (groff) version @VERSION@"
exit 0;;
--help)
echo "usage: grap2graph [ option ...] < in > out"
exit 0;;
*)
convert_opts="$convert_opts $1";;
esac
shift
done
# create temporary directory
tmp=
for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
test -z "$d" && continue
tmp=`(umask 077 && mktemp -d -q "$d/grap2graph-XXXXXX") 2> /dev/null` \
&& test -n "$tmp" && test -d "$tmp" \
&& break
tmp=$d/grap2graph$$-$RANDOM
(umask 077 && mkdir $tmp) 2> /dev/null && break
done;
if test -z "$tmp"; then
echo "$0: cannot create temporary directory" >&2
{ (exit 1); exit 1; }
fi
trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
# Here goes:
# 1. Add .G1/.G2.
# 2. Process through grap(1) to emit pic markup.
# 3. Process through groff(1) with pic preprocessing to emit Postscript.
# 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
(echo ".G1"; cat; echo ".G2") | grap | groff -p $groff_opts -Tps -P-pletter | \
convert -trim -crop 0x0 $convert_opts - $tmp/grap2graph.$format \
&& cat $tmp/grap2graph.$format
# End

1546
contrib/groffer/ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,60 @@
# Makefile.sub for `groffer' (integration into the `groff' source tree)
# File position: <groff-source>/contrib/groffer/Makefile.sub
# Copyright (C) 2001,2002,2005 Free Software Foundation, Inc.
# Written by Werner Lemberg <wl@gnu.org> and Bernd Warken.
# Last update: 15 August 2005
# This file is part of `groffer' which is part of `groff'.
# `groff' is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# `groff' is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with `groff'; see the files COPYING and LICENSE in the top
# directory of the `groff' source. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
########################################################################
MAN1=groffer.n
CLEANADD=groffer
# not all make programs have $(RM) predefined.
RM=rm -f
all: groffer
groffer: groffer.sh groffer2.sh $(SH_DEPS_SED_SCRIPT)
$(RM) $@;
sed -f $(SH_DEPS_SED_SCRIPT) \
-e "s|@g@|$(g)|g" \
-e "s|@BINDIR@|$(bindir)|g" \
-e "s|@libdir@|$(libdir)|g" \
-e "s|@VERSION@|$(version)$(revision)|g" \
-e $(SH_SCRIPT_SED_CMD) $(srcdir)/groffer.sh >$@;
chmod +x $@
install_data: groffer
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
-$(RM) $(bindir)/groffer
$(INSTALL_SCRIPT) groffer $(bindir)/groffer
-test -d $(libdir)/groff/groffer || \
$(mkinstalldirs) $(libdir)/groff/groffer
-$(RM) $(libdir)/groff/groffer/groffer2.sh
$(INSTALL_SCRIPT) $(srcdir)/groffer2.sh \
$(libdir)/groff/groffer/groffer2.sh
uninstall_sub:
-$(RM) $(bindir)/groffer
-$(RM) $(libdir)/groff/groffer/groffer2.sh
-rmdir $(libdir)/groff/groffer

104
contrib/groffer/README Normal file
View File

@ -0,0 +1,104 @@
README
The `groffer' program is the easiest way to read documents written in
some `roff' language, such as the `man pages', the manual pages in
many operating systems.
Input
Input comes from either standard input or command line parameters that
represent names of exisiting roff files or standardized specifications
for searching man pages. All of these can be compressed in a format
that is decompressible by `gzip', including `.gz', `bz2', and `.Z'.
`groffer' has many built-in `man' functionalities to find and read the
manual pages on UNIX and similar operating systems. It accepts the
information from an installed `man' program, but tries to find a man
path by itself.
`groffer' bundles all filespec parameters into a single output file in
the same way as `groff'. The disadvantage of this is that all file
name arguments must use the same groff language. To change this, the
option parsing must be revised for large parts. It seems that this
would create incompatibilities, so the actual option strategy is kept.
Output
All input is first sent to `grog' to determine the necessary `groff'
options and then to `groff'. So no special `groff' arguments must be
given. But all `groff' options can be specified when this seems to be
appropriate.
The following displaying modes for the output are available:
- Display formatted input with
-- the X `roff' viewer `gxditview',
-- a Postcript viewer,
-- a PDF viewer,
-- a DVI viewer,
-- a web browser,
-- a pager in a text terminal (tty).
- Generate `groff' output on stdout without a viewer.
- Generate the `groff intermediate output' on standard output without
postprocessing.
- Output the source code without any `groff' processing.
- There are some information outputs without `groff' processing, such
as by option `-V' and the `man' like `whatis' and `apropos'
outputs.
By default, the program tries to display with `gxditview' as graphical
device in X; on non-X text terminals, the `tty' text mode with a pager
is tried by default.
Compatibility
`groffer' consists of two shell scripts. It should run on any POSIX
or Bourne style shell that supports shell functions. See file
`README_SH' for more information.
Mailing lists
For reporting bugs of `groffer', groff's free mailing list
<bug-groff@gnu.org> can be used.
For a general discussion, the mailing list <groff@gnu.org> is more
useful, but one has to subscribe to this list at
http://lists.gnu.org/mailman/listinfo/groff.
See the `README' file in the top directory of the `groff' source
package for more details on these mailing lists.
####### License
Last update: 2 August 2005
Copyright (C) 2003,2004,2005 Free Software Foundation, Inc.
Written by Bernd Warken
This file is part of `groffer', which is part of `groff'.
`groff' is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
`groff' is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with `groff'; see the files COPYING and LICENSE in the top
directory of the `groff' source. If not, write to the Free Software
Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
####### Emacs settings
Local Variables:
mode: text
End:

268
contrib/groffer/README_SH Normal file
View File

@ -0,0 +1,268 @@
Additional description for the shell version of `groffer'
Scripts
The shell version of `groffer' contains two files, `groffer.sh' and
`groffer2.sh'.
`groffer.sh' is a short introductory script without any functions. I
can be run with a very poor Bourne shell. It just contains some basic
variables, the reading of the configuration files, and the
determination of the shell for `groffer2.sh'. This script is
transformed by `make' into `groffer' which will be installed into
@bindir@, which is usually /usr/local/bin.
`groffer2.sh' is a long main script with all functions; it is called
by `groffer.sh' (`groffer' after installation). It is installed
unchanged into @libdir@/groff/groffer, which is usually
/usr/local/lib/groff/groffer. This script can be called with a
different shell, using the `groffer' option `--shell'.
Options
The `groffer' script provides its own option parser. It is compatible
to the usual GNU style command line This includes long option names
with two signs such as `--option', clusters of short options, the
mixing of options and non-option file names, the option `--' to close
the option handling, and it is possible to abbreviate the long option
names.
The flexible mixing of options and file names in GNU style is always
possible, even if the environment variable `$POSIXLY_CORRECT' is set
to a non-empty value. This disables the rather wicked POSIX behavior
to terminate option parsing when the first non-option command line
argument is found.
Error Handling
Error handling and exit behavior is complicated by the fact that
`exit' can only escape from the current shell; trouble occurs in
subshells. This was solved by sending kill signals, see $_PROCESS_ID
and error().
Function Definitions in `groffer2.sh'
Each funtion in groffer2.sh has a description that starts with the
function name and symbols for its arguments in paranthesis `()'. Each
`<>' construction gives an argument name that just gives a hint on
what the argument is meant to be; these argument names are otherwise
irrelevant. The `>' sign can be followed by another character that
shows how many of these arguments are possible.
<arg> exactly 1 of this argument
<arg>? 0 or 1 of these arguments
<arg>* arbitrarily many such arguments, incl. none
<arg>+ one or more such arguments
<arg>... one or more such arguments
[...] optional arguments
A function that starts with an underscore `_' is an internal function
for some other function. The internal functions are defined just
after their corresponding function.
External Environment Variables
The groffer.sh script uses the following external system variables.
It is supposed that these variables are already exported outside of
groffer.sh; otherwise they do not have a value within the script.
external system environment variables that are explicitly used
$DISPLAY: Presets the X display.
$LANG: For language specific man pages.
$LC_ALL: For language specific man pages.
$LC_MESSAGES: For language specific man pages.
$PAGER: Paging program for tty mode.
$PATH: Path for the programs called (`:' separated list).
groffer native environment variables
$GROFFER_OPT preset options for groffer.
all groff environment variables are used, see groff(1)
$GROFF_BIN_PATH: Path for all groff programs.
$GROFF_COMMAND_PREFIX: '' (normally) or 'g' (several troffs).
$GROFF_FONT_PATH: Path to non-default groff fonts.
$GROFF_TMAC_PATH: Path to non-default groff macro files.
$GROFF_TMPDIR: Directory for groff temporary files.
$GROFF_TYPESETTER: Preset default device.
all GNU man environment variables are used, see man(1).
$MANOPT: Preset options for man pages.
$MANPATH: Search path for man pages (: list).
$MANROFFSEQ: Ignored because of grog guessing.
$MANSECT: Search man pages only in sections (:).
$SYSTEM: Man pages for different OS's (, list).
Object-oriented Functions
The groffer script provides an object-oriented construction (OOP). In
object-oriented terminology, a type of object is called a `class'; a
function that handles objects from a class is named `method'.
In the groffer script, the object is a variable name whose content is
the object's data. Methods are functions that have an object as first
argument.
The basic functions for object handling are obj_*().
The class `list' represents an array structure, see list_*().
Shell Compatibility
The `groffer' shell scripts are compatible to both the GNU and the
POSIX shell and utilities. Care was taken to restrict the programming
technics used here in order to achieve POSIX compatibility as far back
as POSIX P1003.2 Draft 11.2 of September 1991. This draft is
available at http://www.funet.fi/pub/doc/posix/p1003.2/d11.2 in the
internet.
The POSIX draft does not include `local' variables for functions. So
this concept was replaced by global variables with a prefix that
differs for each function. The prefix is chosen from the function
name. These quasi-local variables are unset before each return of the
function.
The `groffer' scripts were tested under the shells `ash', `bash',
`bash-minimal', `dash', 'ksh', `mksh', `pdksh', 'posh', and `zsh'
without problems in Linux Debian. A shell can be tested by the
`groffer' option `--shell', but that will run only with groffer2.sh.
To start it directly from the beginning under this shell the following
command can be used.
<shell-name> groffer.sh --shell=<shell-name> <argument>...
Some shells are not fully POSIX compatible. For them the following
restrictions were done. For more information look at the
documentation `Portable shells' in the `info' page of `autoconf'
(look-up in Emacs-Help-Manuals_Info).
- The command parts `then', `else', and `do' must be written each on a
line of their own.
- Replace `for i in "$@"' by `for i' and remove internal `;' (kah).
- Replace `set -- ...' by `set x ...; shift'. After the first
non-option argument, all arguments including those starting with `-'
are accepted as non-option. For variables or `$()' constructs with
line-breaks, use `eval set' without quotes. That transforms a
line-break within a variable to a space.
- The name of the variable in `for' is chosen as a single character
(old ash). The content of such variables is not safe because it can
also occur in other functions. So it is often stored in an
additional quasi-local variable.
- `echo' is not portable on options; some `echo' commands have many
options, others have none. So `echo -n' cannot be used, such that
the output of each function has complete lines. There are two
methods to avoid having `-' as the first character of any argument.
Either a character such as `x' can be prepended to the argument;
this must later on be removed by `sed'. Otherwise, `echo' can be
replaced by `cat <<EOF'.
- `ls' has problems. Old UNIX systems echoed the error message to
standard output. So handle the output with `sed'. If the output
contains `not found' map it to an empty string.
- As `test -e' is not available in Solaris 2.5 replace it by
`test -f || test -d'.
- As `unset' is not supported by all shells replace it by `eval
${_UNSET}' where this variable is `unset' if it exists and `:'
otherwise.
- Some shells have problems with options in `eval'. So quoting must
be done right to hide the options from `eval'.
- In backquote calls `` avoid the backquote ` in comments.
- Replace `true' by `:', `false' isn't used.
- Do not redefine builtins as functions (ash).
- Avoid `[^...]' in `case' patterns (ash).
- `trap' does not allow error code 127.
The scripts call the following commands with all options used:
.
:
apropos
break
bzip2 -c -d -t
cat
catz
cd
continue
echo
eval
expr
grep
groff -v
grog -T -X -Z
gs -c -d -f -q -s
gzip -c -d -f
less -r -R
ls
man -k --apropos
mkdir
mv
pwd
return
rm -f -r
rmdir
sed -e -n
set -e
sh -c
shift
test -c -d -f -r -s -w -x
trap
umask
unset
Bugs
If the `groffer' run is interrupted by Crtl-C the clean up is not done
by all shells. The `trap' commands work for the shells `bash',
`bash-minimal', and 'ksh'; they do not work for `ash', `dash',
`pdksh', `posh', and `zsh'.
####### License
Last update: 19 August 2005
Copyright (C) 2003,2004,2005 Free Software Foundation, Inc.
Written by Bernd Warken
This file is part of `groffer', which is part of `groff'.
`groff' is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
`groff' is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with `groff'; see the files COPYING and LICENSE in the top
directory of the `groff' source. If not, write to the Free Software
Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
####### Emacs settings
Local Variables:
mode: text
End:

58
contrib/groffer/TODO Normal file
View File

@ -0,0 +1,58 @@
TODO file for `groffer'
File position: <groff-source>/contrib/groffer/TODO
####### TODO
Revision:
Optimization:
- Optimize `man' path determination in manpath_add_lang_sys() for speed
by building-up the `man' path only by and by as far as necessary
(not trivial).
- To increase the running speed write part of the `groffer' shell
script in C/C++.
Features of external programs:
- Revise option handling of `grog'.
Documentation:
- Improve the documentation of the search algorithm for `man' pages in
both the `groffer' scripts and the `man' page `groffer.man'.
- In `groffer.man', add more documentation for parts that were taken
over from GNU `man'.
- The documentation in the headers for some function definitions in
`groffer2.sh' needs to be updated.
####### License
Last update: 16 August 2005
Copyright (C) 2003,2004,2005 Free Software Foundation, Inc.
Written by Bernd Warken
This file is part of `groffer', which is part of `groff'.
`groff' is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
`groff' is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with `groff'; see the files COPYING and LICENSE in the top
directory of the `groff' source. If not, write to the Free Software
Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
####### Emacs settings
Local Variables:
mode: text
End:

4018
contrib/groffer/groffer.man Normal file

File diff suppressed because it is too large Load Diff

299
contrib/groffer/groffer.sh Normal file
View File

@ -0,0 +1,299 @@
#! /bin/sh
# groffer - display groff files
# Source file position: <groff-source>/contrib/groffer/groffer.sh
# Copyright (C) 2001,2002,2003,2004,2005
# Free Software Foundation, Inc.
# Written by Bernd Warken
# This file is part of `groffer', which is part of `groff' version
# @VERSION@. See $_GROFF_VERSION.
# `groff' is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# `groff' is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with `groff'; see the files COPYING and LICENSE in the top
# directory of the `groff' source. If not, write to the Free Software
# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301,
# USA.
########################################################################
_PROGRAM_VERSION='0.9.22';
_LAST_UPDATE='22 August 2005';
export _PROGRAM_VERSION;
export _LAST_UPDATE;
export GROFFER_OPT; # option environment for groffer
export _CONF_FILE_ETC; # configuration file in /etc
export _CONF_FILE_HOME; # configuration file in $HOME
export _CONF_FILES; # configuration files
_CONF_FILE_ETC='/etc/groff/groffer.conf';
_CONF_FILE_HOME="${HOME}/.groff/groffer.conf";
_CONF_FILES="${_CONF_FILE_ETC} ${_CONF_FILE_HOME}";
# characters
export _AT;
export _SP;
export _SQ;
export _TAB;
_AT='@';
_SP=' ';
_SQ="'";
_TAB=' ';
export _ERROR;
_ERROR='7'; # for syntax errors; no `-1' in `ash'
# @...@ constructs
export _GROFF_VERSION
_GROFF_VERSION='@VERSION@';
if test _@VERSION@_ = _${_AT}VERSION${_AT}_
then
_GROFF_VERSION='1.19.2';
fi;
export _AT_BINDIR_AT;
export _AT_G_AT;
export _AT_LIBDIR_AT;
export _GROFFER_LIBDIR;
if test _@BINDIR@_ = _${_AT}BINDIR${_AT}_
then
# script before `make'
_AT_BINDIR_AT='.';
_AT_G_AT='';
_AT_LIBDIR_AT='';
_GROFFER_LIBDIR='.';
else
_AT_BINDIR_AT='@BINDIR@';
_AT_G_AT='@g@';
_AT_LIBDIR_AT='@libdir@';
_GROFFER_LIBDIR="${_AT_LIBDIR_AT}"'/groff/groffer';
fi;
export _GROFFER_SH; # file name of this shell script
case "$0" in
*groffer*)
_GROFFER_SH="$0";
# was: _GROFFER_SH="${_AT_BINDIR_AT}/groffer";
;;
*)
echo 'The groffer script should be started directly.' >&2
exit 1;
;;
esac;
export _GROFFER2_SH; # file name of the script that follows up
_GROFFER2_SH="${_GROFFER_LIBDIR}"/groffer2.sh;
export _NULL_DEV;
if test -c /dev/null
then
_NULL_DEV="/dev/null";
else
_NULL_DEV="NUL";
fi;
# Test of the `$()' construct.
if test _"$(echo "$(echo 'test')")"_ \
!= _test_
then
echo 'The "$()" construct did not work.' >&2;
exit "${_ERROR}";
fi;
# Test of sed program
if test _"$(echo red | sed -e 's/r/s/')"_ != _sed_
then
echo 'The sed program did not work.' >&2;
exit "${_ERROR}";
fi;
########################### configuration
# read and transform the configuration files, execute the arising commands
for f in "${_CONF_FILE_HOME}" "${_CONF_FILE_ETC}"
do
if test -f "$f"
then
o=""; # $o means groffer option
# use "" quotes because of ksh and posh
eval "$(cat "$f" | sed -n -e '
# Ignore comments
/^['"${_SP}${_TAB}"']*#/d
# Delete leading and final space
s/^['"${_SP}${_TAB}"']*//
s/['"${_SP}${_TAB}"']*$//
# Print all shell commands
/^[^-]/p
# Replace empty arguments
s/^\(-[^ ]*\)=$/o="${o} \1 '"${_SQ}${_SQ}"'"/p
# Replace division between option and argument by single space
s/[='"${_SP}${_TAB}"']['"${_SP}${_TAB}"']*/'"${_SP}"'/
# Handle lines without spaces
s/^\(-[^'"${_SP}"']*\)$/o="${o} \1"/p
# Print options that have their argument encircled with single quotes
/^-[^ ]* '"${_SQ}"'.*'"${_SQ}"'$/s/^.*$/o="${o} &"/p
# Replace encircled double quotes by single quotes and print the result
s/^\(-[^ ]*\) "\(.*\)"$/o="${o} \1 '"${_SQ}"'\2'"${_SQ}"'"/p
# Encircle the remaining arguments with single quotes
s/^\(-[^ ]*\) \(.*\)$/o="${o} \1 '"${_SQ}"'\2'"${_SQ}"'"/p
')"
if test _"${o}"_ != __
then
if test _"{GROFFER_OPT}"_ = __
then
GROFFER_OPT="${o}";
else
GROFFER_OPT="${o} ${GROFFER_OPT}";
fi;
fi;
fi;
done;
# integrate $GROFFER_OPT into the command line; it isn't needed any more
if test _"${GROFFER_OPT}"_ != __
then
eval set x "${GROFFER_OPT}" '"$@"';
shift;
GROFFER_OPT='';
fi;
########################### Determine the shell
export _SHELL;
# use "``" instead of "$()" for using the case ")" construct
# do not use "" quotes because of ksh
_SHELL=`
# $x means list.
# $s means shell.
# The command line arguments are taken over.
# Shifting herein does not have an effect outside.
export x;
case " $*" in
*\ --sh*) # abbreviation for --shell
x='';
s='';
# determine all --shell arguments, store them in $x in reverse order
while test $# != 0
do
case "$1" in
--shell|--sh|--she|--shel)
if test "$#" -ge 2
then
s="$2";
shift;
fi;
;;
--shell=*|--sh=*|--she=*|--shel=*)
# delete up to first "=" character
s="$(echo x"$1" | sed -e 's/^x[^=]*=//')";
;;
*)
shift;
continue;
esac;
if test _"${x}"_ = __
then
x="'${s}'";
else
x="'${s}' ${x}";
fi;
shift;
done;
# from all possible shells in $x determine the first being a shell
# or being empty
s="$(
# "" quotes because of posh
eval set x "${x}";
shift;
if test $# != 0
then
for i
do
if test _"$i"_ = __
then
# use the empty argument as the default shell
echo empty;
break;
else
# test $i on being a shell program;
# use this kind of quoting for posh
if test _"$(eval "$i -c 'echo ok'" 2>${_NULL_DEV})"_ = _ok_ >&2
then
# shell found
cat <<EOF
${i}
EOF
break;
else
# if not being a shell go on searching
continue;
fi;
fi;
done;
fi;
)";
if test _"${s}"_ != __
then
cat <<EOF
${s}
EOF
fi;
;;
esac;
`
########################### test fast shells for automatic run
if test _"${_SHELL}"_ = __
then
for s in ksh ash dash pdksh zsh posh
do
if test _"$(eval "$s -c 'echo ok'" 2>${_NULL_DEV})"_ = _ok_ >&2
then
_SHELL="$s";
break;
fi;
done;
fi;
########################### start groffer2.sh
if test _"${_SHELL}"_ = _empty_
then
_SHELL='';
fi;
if test _"${_SHELL}"_ = __
then
# no shell found, so start groffer2.sh normally
eval exec "'${_GROFFER2_SH}'" '"$@"';
exit;
else
# start groffer2.sh with the found $_SHELL
# do not quote $_SHELL to allow arguments
eval exec "${_SHELL} '${_GROFFER2_SH}'" '"$@"';
exit;
fi;

5854
contrib/groffer/groffer2.sh Normal file

File diff suppressed because it is too large Load Diff

679
contrib/mm/ChangeLog Normal file
View File

@ -0,0 +1,679 @@
Thu May 26 08:23:40 2005 Werner LEMBERG <wl@gnu.org>
* m.tmac: Load devtag.tmac.
Wed Mar 16 06:56:02 2005 Larry Kollar <kollar@alltel.net>
Add rudimentary support for grohtml.
* m.tmac (H): Call DEVTAG-NH and DEVTAG-EO-H.
(pg@enable-trap, pg@header): Do nothing for devhtml.
Sun Mar 7 16:34:46 2004 Jeff Conrad <jeff_conrad@msn.com>
* m.tmac (S): Improve debug message.
Wed Mar 05:38:57 2004 Joergen Haegg <jh@axis.com>
* Changed default value for Hy in manual to 0
* Check Hy at each new page
Mon Mar 1 22:16:38 2004 Jeff Conrad <jeff_conrad@msn.com>
* m.tmac (S): Fix scaling indicator for vertical spacing.
Tue Nov 05:14:45 2003 Joergen Haegg <jh@axis.com>
* another patch from ulrich lauther to fix the
TOC up to 14 heading levels.
Mon Oct 13:48:25 2003 Joergen Haegg <jh@axis.com>
* problem with more than 7 levels of headings fixed with
patch from ulrich lauther.
Wed Apr 06:42:35 2003 Joergen Haegg <jh@axis.com>
* the footer was not adjusted by VM due to a missing
pg*extra-footer-size in the calculation of pg*last-pos
Wed Apr 06:04:58 2003 Joergen Haegg <jh@axis.com>
* space adjustments in 4.MT to make it more like
the original
Sun Mar 21:45:10 2003 Joergen Haegg <jh@axis.com>
* removed error check i 4.MT, .AF is not mandatory anymore
Sat Mar 21:56:57 2003 Joergen Haegg <jh@axis.com>
* cov*firm now defined only if arg to AF is non-empty
That will also enable cov*default-firm from the mm locale-file
to work.
Sat Mar 21:05:29 2003 Joergen Haegg <jh@axis.com>
* added .ll in pg@set-env to initialize the
header environment properly
Wed Mar 19 23:02:16 2003 Werner LEMBERG <wl@gnu.org>
* groff_mm.man: Some fixes from Robert D. Goulding
<goulding@Princeton.EDU>.
Wed Sep 09:53:06 2002 Joergen Haegg <jh@axis.com>
* added implicit -mm to mmroff, it's now possible
to use mmroff with or without -mm as argument.
Thu Aug 08 00:31:00 Bob Diertens <bobd@science.uva.nl>
* m.tmac (VM): Add missing backslash.
Fri Jun 10:37:58 2002 Joergen Haegg <jh@axis.com>
* added init@reset for LT-macros so .S works for letters
Thu May 06:30:06 2002 Joergen Haegg <jh@axis.com>
* adding -T to VM for setting the total
header and footer size.
* changing pg*extra-header-size unit from v to u in DS-size
calculation
Mon May 05:40:16 2002 Joergen Haegg <jh@axis.com>
* All lists now get an empty line before the list
even if there is no empty lines between the items (bug in LB)
Sat May 07:36:08 2002 Joergen Haegg <jh@axis.com>
* PIC is now drawn 1v higher, making it
possible to put a picture at 0,0.
* Indentbug in P fixed, Pt=2 now behaves as it should
Wed May 10:18:26 2002 Joergen Haegg <jh@axis.com>
* added L, W and O in groff_mm.man
* extra space in expression removed in EPIC
* EPIC can leftadjust with -L
* EPIC was drawing 1v down
* forgot to add mmse.tmac and mm.tmac to cvs
Fri May 20:35:32 2002 Joergen Haegg <jh@axis.com>
* Clarified manual about INITR
* Added mm.tmac and mmse.tmac wrappers
* Fixed bug in mmroff so a .qrf-file always will be created
* .EQ mark was not correctly positioned anymore.
* changed SP to sp in DS/DE to further correct .EQ
Sun Dec 9 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
* Makefile.sim, groff_mm.man, groff_mmse.man: Minor fixes.
* mmroff.man: This is a section 1 man page.
Minor fixes.
* Makefile.sub: Install mmroff.man in section 1.
Wed Nov 28 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
* m.tmac: Assure that the macro package is loaded only once.
Wed Sep 5 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
* m.tmac: Enable all warnings only if no -W or -w option is given on
the command line (or rather, if only the default warnings are
set).
Mon Sep 3 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
* groff_mm.man: Don't use .ne for TTY devices.
Thu Jul 26 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
* groff_mm.man: Start always a new line after end of sentence. Add
some compatibility info to the HF variable.
Thu Jul 26 00:00:00 2001 Larry Jones (larry.jones@sdrc.com)
* m.tmac: Fix initialization of Hps1 and Hps2.
Wed May 16 00:00:00 2001 Bruce Lilly (blilly@erols.com)
* m.tmac (TH): Fix incorrect error message.
Thu Apr 12 00:00:00 2001 Ruslan Ermilov (ru@FreeBSD.org)
* groff_mm.man: Fixing some typos.
Mon Mar 5 09:30:18 2001 Jörgen Hägg (jh@axis.com)
* S didn't reset to default point size
* (dummy line to force cvs update...)
Sat Jan 06 10:30:00 2001 Werner LEMBERG (wl@gnu.org)
* Fixed assignment of page offset given as a command line argument.
Fri Nov 17 05:34:17 2000 Jörgen Hägg (jh@axis.com)
* Renamed tmac.m and tmac.mse to m.tmac and mse.tmac
Thu Sep 14 05:52:48 2000 Jörgen Hägg (jh@axis.com)
* New Changelog-format, it will show changes better.
Easier for other to use. (Somehow I didn't really
understand why the e-mail address was supposed to be
'jh at axis.com' in the Changelog. :-)
Mon Aug 28 00:00:00 2000 Bruno Haible (haible at clisp.cons.org)
* Makefile.sub: New target 'all', makes all prerequisites of
'install'.
Thu Sep 7 06:17:42 2000 Jörgen Hägg (jh at axis.com)
* version 2.0
* Had to do something about my version numbering.
The main CVS archive was not in sync with mine.
So, now it is 2.0. :-)
Sat Jun 17 23:00:00 2000 Eli Zaretskii (eliz@is.elta.co.il)
* Makefile.sim (.man.n): Replace `;' with `|', since DOS/Windows
path lists use the semicolon as a separator.
Sun Jun 4 21:39:00 2000 Kaneda Hiroshi (vanitas at ma3.seikyou.ne.jp)
* Fixing a lot of typos in groff_mm.man
Tue Mar 7 00:00:00 2000 OKAZAKI Tetsurou (okazaki at be.to)
* Makefile.sub: Use $(INSTALL_SCRIPT) for script files.
Sun Jan 30 22:52:20 2000 Jörgen Hägg (jh at axis.com)
* version 1.34
* Changed the version number in the CVS repository
* MC had a bug in column calculation, (thanks to T. Kurt Bond)
Fri Sep 3 07:33:14 1999 Jörgen Hägg (jh at axis.com)
* version 1.33
* At last! I finally tracked down the PGFORM bug!
It didn't setup the @pl, @ll and @po as it should, now it does.
* mgm_ref/mgm_roff renamed to mmroff [-x]
* fixed y2k-bug in \*[DT]
* \n[cov*year] removed, hope noone used that.
* ISODATE added with Iso as command line flag
(iso-date suggested by Paul Eggert)
* Added ISODATE to tmac.mse and removed local settings
of new-date.
* INITI syntax changed and enhanced. Index processing is now
done with mmroff.
* A few examples has been added, new subdirectory 'examples'.
* Fixed bug with SETR, header references are now only saved
when Ref > 0
* Problem with register H1h fixed
* Added test for missing abstract in 4.MT
* Updated Makefile.sub, using tmac_m_prefix.
Mon Mar 15 22:22:42 1999 Jörgen Hägg (jh at axis.com)
* OK, let's release this as a beta, 1.33 will be better. :-)
* version 1.32
* fixed .el-error
* Added number variable Hss
* Changed Hps1 and Hps2 to units
* added hd*h1-text to be used in user defined macro TP.
* -U needed for SETR (I really need 'mv', 'echo', 'rm'
and 'test' builtin!)
* Rewritten the reference system, SETR now prints to stderr
if the number register Qrf > 0. Store in the filename
that is the argument to .INITR
The old behaviour is returned if number register Initr > 0.
* Fixed bug with List of XXXX, long lines messed up the result.
* added number register H1dot.
* added string variable H1txt
* added string variable Tcst
* added number register Dsp.
* added alias APPX for user-defined appendix title.
* added string variable Apptxt
* added H1h for use in TP in headers
* added macro EPIC
* added macro PIC (safe replacement for PSPIC)
* fixed Hps-bug, should be 1, not 1v.
* fixed bug with APPSK, variable not set.
Wed Feb 4 15:46:04 1998 Jörgen Hägg (jh at axis.se)
* version 1.31
* .LI will now honor a space mark.
* Another fix for .AU to let it be used without arguments.
* uninitialized eq*label fixed
Fri Sep 6 07:13:07 1996 Jörgen Hägg (jh at axis.se)
* version 1.30
* This is more like a beta-release, bugs might pop up. :-)
* last line in TOC was not correctly terminated (missing .br)
* changed the indentation for displays, it will now
indent to the current indent, not the one at the definition
of the display.
* Equation marks should now work better, indentation also.
* included these bug fixes from Larry Jones:
* The documentation for the argument to .AS was incorrect for MT 4.
* \*(EM should be a double-dash for nroff.
* \nS is in points, not units.
* If \nO isn't set, the default page offset should be .75i for nroff
and .963i for troff.
* .S D should set the point size to \nS, not 10.
* .S was setting the vertical spacing based on the old point size
instead of the new point size.
* Got rid of a spurrious .br that prevented run-in headings from
working.
* Reset the .SP counters in pg@header so that spacing on one page
won't affect spacing on subsequent pages.
* Allow .AU and .AF with no arguments (real mm does, even though it
isn't documented).
* Do .init@reset first thing to initialize the default environment.
* For MT 4, the title should be 4 points larger than the default size,
not 12 point.
* The cover environment needs to be initialized.
* Printing the abstract on the first page needs to be controlled by
the .AS argument.
* Heading eject should be suppressed if the heading immediately
follows the first page stuff (title, author, etc.).
* support for table of contents numbering style (.nr Oc)
* changes the troff empty line height from .25v to .5v
* fixed section page numbering
* fixed a really nasty bug in footnotes that could cause you
to lose the page footer completely if the very first
footnote on the page occurred at just the wrong place
Wed May 15 07:39:32 1996 Jörgen Hägg (jh at axis.se)
* version 1.29
* Syntax and scaling errror fixed, (thanks to Frazer Williams)
* DF/DE will now do a line-break before printing the display.
* Updated the manual for TB,FG,EX and EC.
* Added support for the ms- (and mgs-)macro .IX
* Added indexmacro IX, INITI, IND and INDP, support for
TXIND, TYIND and TZIND.
* PGFORM will now always really reset to the default
values for unspecified arguments.
* Floating displays tested and repaired, it should
now (finanlly) work exactly as the original (I hope :-).
* Should now set year correctly even after 2000.
* Stupid bug in PGNH fixed.
* Corrected line length for figure caption (FG and friends)
Mon Apr 24 07:37:52 1995 Jörgen Hägg (jh at axis.se)
* version 1.28
* Added AVL (AV without date)
* Fixed nroff scaling for W and L.
* Added support for register E and roman/bold
for all Subject/Date/From strings.
* Added support for register C (1-4), (for DRAFTs and other types)
* Will protest if not used with groff.
* Change of the internal number registers @ps and @vs, they
are now in units, and is set in the new macros .@ps and .@vs.
@ps and @vs is now corrected to the real point and vertical size.
* Macro EQ has now correct pointsize.
* Figures should now get the right page number in the index.
* User-defined macros can now be defined for list of
figures, tables, equations and exhibits (T{X,Y}{FG,TB,EC,EX}.
* Space may be omitted between prefix and mark in automatic lists (.AL)
See .LI
Tue Jan 10 07:51:37 1995 Jörgen Hägg (jh at axis.se)
* version 1.27
* Manual updated
* More bugs fixed in DS/DF
* added alias for :g
* LC can now be used without argument (as the manual says. :-)
* Register :R now supported (RS/RF)
* footnote line was printed even if there was no room for
any footnotes. Fixed.
* Fixed 1C so that it can be used without page eject
* Added support for EOP (TPs twin)
* Hyphenation turned off by default. (Hy == 0)
Fri Nov 4 08:14:50 1994 Jörgen Hägg (jh at axis.se)
* version 1.25
* DS/DF separated and several bugs fixed. Watch out for new though. :-)
* string DT was emptied by mistake in the previous version.
* RD made prettier.
* typo in AV and let@print-head fixed.
Mon Oct 31 08:19:24 1994 Jörgen Hägg (jh at axis.se)
* version 1.24
* Bug fixed and format extended in .SG and .FC.
* date is always printed unless .ND without argument is used.
(I wonder what's the right thing to do, this might change.)
* Swedish letter-standards implemented in tmac.mse.
* .ND can be used to turn off the date. (Empty argument)
Mon Oct 31 08:14:09 1994 Jörgen Hägg (jh at axis.se)
* version 1.23
* An attempt to get in sync with RCS. This is the distributed
version.
Thu Oct 27 08:29:34 1994 Jörgen Hägg (jh at axis.se)
* version 1.22
* (version 1.21 lost... :-)
* Letter macros added!!
* The following macros are added:
* AV, FC, IA ,IE, LT, LO, NE, NS, SG, WA, WE
* nP also added.
Tue Dec 14 16:26:36 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.20
* spelling-corrections
* Makefile.sim updated to the correct version, and a uninstall
target added.
* @cur-lib removed from tmac.m (obsolete)
* fixed check for references i .TC, .RP now resets the flag correctly.
* floating display should now be printed if there is space.
* first version using RCS. I've been avoiding version control until it
became necessary.
* WC WD now works in two-column-mode.
Tue Sep 7 08:37:00 1993 Jörgen Hägg (jh at efd.lth.se)
* version 1.19
* .lt is called in the header for .TP also.
* Variable Pgps added to control the header and footer point-size.
* Error-text printed with .APP removed.
* Error with .FG, .TB, .EC and .EX indentation fixed.
* header and footer line-length is not changed by MC or 2C.
* Default for page-length and page-offset is now taken from
\n[.p] and \n[.o].
* Argument to .ab (abort) is supplied.
* Argument to .1C added.
* Argument to .PGFORM added.
* RP/RS/RF totally rewritten. Should work with 2C now.
Fri Apr 23 10:37:25 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.18
* Height of display is now more exactly calculated.
* tabs and blankspaces where wrong in .VERBON.
* error in manual for escape-character in VERBON.
* Makefile.sub: installed tmac.m as tmac.m and tmac.mse
* Installation of tmac.mse now supports TMAC_M.
* bug with N fixed.
Mon Apr 5 09:36:01 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.17
* MULB preserves size.
* bug in VERBON fixed, causing strange errors.
* section-page footer fixed.
* added support for numberregister S
* fixed bug with floating displays wich made floats to
generate space on a page, but broke page anyway.
* end-of-page trap reinstalled.
Mon Mar 29 10:53:13 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.16
* MUL* now use the previous font and family.
* extra blank page at end-of-text eliminated.
Mon Mar 8 10:27:47 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.15
* Didn't restore pointsize to current size in .H.
* B1/B2 did not work with indent. (MULE and friends)
* fixed old problem with trailing empty pages.
Fri Mar 5 15:20:49 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.14
* Sigh. Amazing what a missing \} can do. If the string
HP was set, then all text disappeared...
Fri Mar 5 14:12:43 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.13
* Fixed bug with handling ps/vs in .H. (again, sigh... )
Wed Mar 3 09:21:20 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.12
* Line-break added to PGFORM.
* added more features to VERBON
* .S is not used anymore in H, it caused confusion with
normal text, but it will still set .vs.
* SK was broken, will now produce the requested number of
empty pages.
* dotted lines added to LIST OF FIGURES adn friends.
Also better linespacing.
Mon Feb 22 12:41:06 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.11
* missing left-parenthesis gave ") .sp" when N=4.
* N=4 removed user-specified header also.
* MOVE made linelength pageoffset wider than wanted.
* fixed (again) parenthesis in RP.
Thu Jan 21 12:10:39 1993 Joergen Haegg (jh at efd.lth.se)
* version 1.10
* changed PROG_PREFIX to g in the manual-pages.
* Better check if new page is needed in .H, when Ej>0.
* Usage of variable Lsp now more complete.
* Space added in TOC when mark is equal to size.
* Usermacro HY moved after font-calulations.
* .S used instead of .ps, which will use .vs correct.
* Now possible to set Hps1/2 inside HX.
* .FD "" 1 is now fixed.
* section-page numbering bug fixed.
* several bugs in VERBON/OFF fixed.
Tue Dec 8 16:43:15 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.09
* N==4 gives no default header
Sat Nov 21 14:28:20 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.08
* Escape-character disabled between
VERBON/VERBOFF (turned on by an argument).
Pointsize and fontchange also added as arguments.
* MULB, MULN and MULE added to get multicolumn output
with different width.
* Number register N can now use 1-5.
* Register Sectp and Sectf added.
* Register P is now updated correctly for "section-page" numbering.
Thu Nov 19 11:19:33 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.07
* .OP fixed to eject a blank page if not odd.
Fri Nov 13 09:46:09 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.06
* Macro TL rewritten. TL depends now on a following .AU.
* NOTES updated.
* .lt is now used more frequent when linelength is changed.
* macro AST added.
* removed PH/EH/OH not needed in ?.MT.
Wed Oct 28 14:35:43 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.05
* .VM implemented.
* Possible bug in page heading fixed. Changed .sp to 'sp in HEADER.
Thu Aug 20 13:56:31 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.04
* page-break in .EQ moved.
* changed unit for footer-size and header-size from units to lines.
Fixes problems with .S and page-breaks.
* \n[%] is now treated as a string, wich makes it possible
to assign new formats to it. Unfortunately, it was necessary
to change the page-number-variable in GETPN to a string.
* Makefile.sub included. (Thank you, James)
Thu May 7 16:14:10 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.03
* Typo and centering in DS/DE fixed.
Even and odd pageheaders were reversed.
* LI: pad and mark-indent was lost in some earlier versions. Now fixed.
* fixed bug in reference to .FG, .TB, ...
* APP did not clear headercounters.
* Pointsize in titles is now only set at the beginning and
when PH, PF, OH, OF, EH and EF are used.
Thu May 6 16:01:35 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.02
* OP fixed.
Fri Mar 6 09:36:09 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.01
* two .LI without text between should not be printed
on the same row. Now fixed.
* figure titles and friends fixed, now possible with many .FG
in a DS/DE. Didn't always position correctly in previous version,
but is now always printed as it should.
* Makefile fixed for Ultrix.
* DS/DF could not handle empty arguments correct
* Missing .br i EQ added.
Sat Jan 25 15:47:21 1992 Joergen Haegg (jh at efd.lth.se)
* version 1.00
* No betaversion anymore!
* Fixed headernumbers within appendixes.
* DS did not keep the same font as before DS.
* mmse did a line break.
Fri Jan 24 14:38:16 1992 Joergen Haegg (jh at efd.lth.se)
* version 0.16
* bug in TC, multiple line headers did not wrap correctly.
* added support for mm/locale and mm/language_locale.
* cov*default-firm in locale sets name of firm in the MT covers.
* cov*location-xxxx in locale sets location xxxx to the contents
of cov*location-xxxx. Used in the MT covers.
* hanging indent in lists fixed.
* use larger empty lines if .nroff is defined.
* macros, like .P, can now be used inside abstracts.
* .S do not reset indentation anymore.
* .RS aA now sets a string, not an integer.
* appendix with .APP or .APPSK added.
Thu Nov 28 22:00:59 1991 Joergen Haegg (jh at efd.lth.se)
* version 0.15
* Fixed .AU in MT 0-3, added support for variable Au.
* Bug in the positioning of the foot-notes.
* lists not indented properly.
* Hps1 and Hps2 added.
* COVER had to have an argument.
* table of contents can now have multiline header.
* .HU now increments headingvariable H?
* added the inclusion of a locale file.
Sat Nov 23 14:40:17 1991 Joergen Haegg (jh at efd.lth.se)
* version 0.14
* bug when using -rO fixed.
* MT 1-4 added.
* default is now MT 1
* .EQ/.EN can be used outside of .DS/.DE without complaints. But
I don't recommend it. Neither does the DWB books.
* LI don't break lines now if arg too big.
* PGFORM did not reset indent.
* Added the numbervariable Hps.
* Rewritten and added MT 0-5 + "string".
* Added TM.
* Indent to AS added
Wed Nov 6 15:18:40 1991 Joergen Haegg (jh at efd.lth.se)
* version 0.13
* ds*format nod defined if PS/PE is used without DS/DE.
* GETST added, fourth argument to EX, FG, TB and EC added.
Mon Nov 4 13:38:01 1991 Joergen Haegg (jh at efd.lth.se)
* version 0.12
* Fixed C,D,P,+-size in .S
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* Next version will have ChangeLog entries...
* Bug in INITR fixed.
* VERBON/VERBOFF added to include programlistings
* Bug in .DE fixed, addition overflow
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* spelling error in month-names.
* WC should work now (no warranty :-)
* FD almost finished, some details missing.
* incorrect calculation of foot-notes fixed.
* DS/DE did not break page when the size was smaller than the paper
* Forward/backward referencesystem added. Se .INITR in README.
* mgmsw changed name to mgmse.
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* embarrassing bug in .P fixed
* .H did always eject page, now fixed.
* lost floating displays now found.
* accents added (from mgs)
* empty line in .EQ/.EN removed
* indentation in .TC corrected.
* indentation of DS/DE in lists fixed.
* .TB and friends now work inside DS/DE and outside.
* .WC partially implemented (WF and WD). Still working on it.
* .mso used if version>=1.02
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* register P was not working.
* support for register Fg, Tb, Ec and Ex.
* list items was left on the previous page at a page break.
* tlevel in .TC now defaults to 2.
* string DT, EM and Tm supported.
* new macro: PGNH, see comments.
* bug in MOVE fixed.
* pagenumber in .TC fixed.
* a blank page was ejected if Ej==1, now fixed
* bug in floating display fixed (did break and SP wrong)
* bug in .SP fixed, no lines is now printed at top of page
* There are still problems with footnotes and displays in two column mode.
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* register P added (same as %)
* bug in floating displays fixed
* MOVE added
* MT added, see comment below
* COVER/COVEND added
* fixed bug in figure titles
* extended S, se comment below
* MT 0 added
* ms-cover added (COVER ms)
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* bugs in RD and comb. fonts fixed
Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
* HC added
* Combined fonts (IB,BI...)
* HM added
* RD added
* OP added
* TP&PX supported
* warnings for unimplemented macros

66
contrib/mm/Makefile.sim Normal file
View File

@ -0,0 +1,66 @@
#
# $Id: Makefile.sim,v 2.3 2002/05/22 06:26:12 jhaegg Exp $
#
# To install mgm separately as gm.tmac:
# make -f Makefile.sub tmacdir=/usr/local/lib/groff/tmac srcdir=. \
# INSTALL_DATA='install -m 644' tmac_m=gm install
#
# or as m.tmac:
#
# tmacdir is the destination for your groff/tmac-directory, srcdir is
# this directory and INSTALL_DATA is the command to install a file with.
# If you dont have 'install': use 'cp'.
# change this to whatever you like
tmacdir=/usr/local/lib/groff/tmac
#tmac_m = gm
tmac_m = m
indexdir = xx
install = install -m 644
# Do not change anything below this line
srcdir = .
version = 2.8
mdate = 2002-05-11
.SUFFIXES: .n .man
all:
install: groff_mm.n groff_mmse.n
$(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
INSTALL_DATA='$(install)' tmac_m=$(tmac_m) install
uninstall: groff_mm.n groff_mmse.n
$(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
INSTALL_DATA='$(install)' tmac_m=$(tmac_m) uninstall_sub
.man.n:
@echo Making $@ from $<
@-rm -f $@
@sed -e "s|@HYPHENFILE@|$(hyphenfile)|g" \
-e "s|@FONTDIR@|$(fontdir)|g" \
-e "s|@FONTPATH@|$(fontpath)|g" \
-e "s|@MACRODIR@|$(tmacdir)|g" \
-e "s|@MACROPATH@|$(tmacpath)|g" \
-e "s|@DEVICE@|$(DEVICE)|g" \
-e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
-e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
-e "s|@INDEX_SUFFIX@|$(indexext)|g" \
-e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \
-e "s|@MAN1EXT@|$(man1ext)|g" \
-e "s|@MAN5EXT@|$(man5ext)|g" \
-e "s|@MAN7EXT@|$(man7ext)|g" \
-e "s|@TMAC_S@|$(tmac_s)|g" \
-e "s|@TMAC_M@|$(tmac_m)|g" \
-e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
-e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
-e "s|@VERSION@|$(version)|g" \
-e "s|@MDATE@|$(mdate)|g" \
-e "s|@g@|$(g)|g" \
-e "s!@G@;`echo $(g) | tr [a-z] [A-Z]`!g" \
$< >$@

62
contrib/mm/Makefile.sub Normal file
View File

@ -0,0 +1,62 @@
#
# $Id: Makefile.sub,v 2.3 2002/05/22 06:26:12 jhaegg Exp $
#
PROG=mmroff
MAN1=\
mmroff.n
MAN7=\
groff_mm.n \
groff_mmse.n
FILES=0.MT 5.MT 4.MT ms.cov se_ms.cov
# Local configuration files with default values.
LOCALE=locale se_locale
CLEANADD=temp
all: mmroff
install: install_mm
install_mm: install_mmroff install_m
-test -d $(tmacdir)/mm || $(mkinstalldirs) $(tmacdir)/mm
-for f in $(FILES); do \
rm -f $(tmacdir)/mm/$$f; \
$(INSTALL_DATA) $(srcdir)/mm/$$f $(tmacdir)/mm/$$f; \
done
-for f in $(LOCALE); do \
test -f $(tmacdir)/mm/$$f || touch $(tmacdir)/mm/$$f; \
done
install_m:
-test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
-rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m
-rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac
$(INSTALL_DATA) $(srcdir)/m.tmac $(tmacdir)/$(tmac_m_prefix)m.tmac
@sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
$(srcdir)/mse.tmac > $(tmacdir)/$(tmac_m_prefix)mse.tmac
@sed -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
$(srcdir)/mmse.tmac > $(tmacdir)/$(tmac_m_prefix)mmse.tmac
@sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
$(srcdir)/mm.tmac > $(tmacdir)/$(tmac_m_prefix)mm.tmac
install_mmroff: mmroff
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/mmroff
$(INSTALL_SCRIPT) mmroff $(bindir)/mmroff
mmroff: mmroff.pl
-rm -f $@
-sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/mmroff.pl >$@
-chmod +x $@
uninstall_sub:
-for f in $(FILES); do rm -f $(tmacdir)/mm/$$f; done
-for f in $(LOCALE); do \
test -s $(tmacdir)/mm/$$f || rm -f $(tmacdir)/mm/$$f; \
done
-rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m
-rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac
-rm -f $(tmacdir)/$(tmac_m_prefix)mm.tmac
-rm -f $(tmacdir)/$(tmac_m_prefix)mse.tmac
-rm -f $(tmacdir)/$(tmac_m_prefix)mmse.tmac
-rmdir $(tmacdir)/mm
-rm -f $(bindir)/mmroff

105
contrib/mm/NOTES Normal file
View File

@ -0,0 +1,105 @@
######################################################################
$Id: NOTES,v 2.0 2000/09/14 03:40:24 jhaegg Exp $
Beware!
This may be old information. Trust only the source. :-)
Implementation notes. (Or how to make your own national mm)
Different commands:
COVER [arg]
MT [arg [addressee]]
The arg is part of a filename in mm/*.MT or mm/*.cov.
This file is read when the macro is executed. Therefore it must be
put before any text output.
In each file there are definitions of all extra macros needed for the
cover sheet. MT files is only for compatibility reasons, and has several
limits due to that it don't know when the cover starts, and cannot
change sizes. Use COVER for new coversheet macros.
But with MT it is possible to write all of the AT&T covers.
An example can be found in mm/0.MT.
When writing a new cover using COVER, have in mind that the cover
should print the page with the COVEND macro. This macro
should be defined by the new macrofile.
Here is a part of ms.cov:
> .\"-----------------
> .de COVEND
> .sp |4.2c
> .cov@print-title
> .cov@print-authors
> .cov@print-firm
> .cov@print-abstract
> .cov@print-date
This is important, since COVER disables the page header.
> .pg@enable-top-trap
Should begin with page one (normally).
> .bp 1
And enable the trap at the page footer.
> .pg@enable-trap
> ..
#########################
Variables for covers:
I = integer
S = string
D = diversion
M = macro
Name Type Desc.
cov*au I The number of authors.
cov*title M Title collected with .TL.
cov*au!x!y S Author(s) given to .AU
cov*at!x!y S Author(s) title given to .AT
x is the author-index [1-cov*au],
y is the argument-index [1-9].
Look at the table with indexes.
cov*firm I Author(s) firm.
cov*abs-arg I Argument to abstract.
cov*abs-ind I Indent for abstract.
cov*abs-name S The string 'ABSTRACT', changed with .AST
cov*abstract M The abstract.
cov*new-date S The date (todays date if ND is not used)
cov*mt-type S MT type
cov*mt-addresse S MT addressee
##########################
Argument-index for cov*au:
Index Desc.
1 name
2 initials
3 location
4 department
5 extension
6 room
7 arg 7
8 arg 8
9 arg 9
The location is set to the contents of string cov*location-xxxx
if location is equal to xxxx and cov*location-xxxx is defined
in the file locale.
Argument-index for cov*at:
Index Desc.
1 title 1
. .
. .
9 title 9

31
contrib/mm/README Normal file
View File

@ -0,0 +1,31 @@
$Id: README,v 2.2 2002/05/22 06:26:12 jhaegg Exp $
This is mgm, a macro package for groff.
It is supposed to be compatible with the DWB mm macros,
and has several extensions.
Send bug reports to jh@axis.com with a description of the problem
and a sample of text which reproduces the error.
Don't forget to mention the version of mgm (look in the beginning
of m.tmac) and the version of groff.
Any new ideas or improvements are welcome.
Newest version is available here or at the groff CVS repository.
ftp://ftp.axis.se/pub/groff/mm<something>.gz
You can install mgm as a separate package without the configure in groff
with the following command:
make -f Makefile.sim install
This README should be bigger :-)
/Jörgen Hägg
Thanks to everyone who have sent me bug-reports and fixes.

352
contrib/mm/examples/APP Normal file
View File

@ -0,0 +1,352 @@
.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
granary
grapheme
graphic
graphite
grapple
grasp
grass
grassland
grassy
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.H 2 "grapefruit grapevine graph grapheme graphic graphite"
granary
grand
graphic
graphite
grapple
grasp
grass
grassland
grassy
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.H 3 "grapple"
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grandma
grandmother
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.H 1 "Graves gravestone graveyard gravid gravitate gravy gray"
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.H 1 "Greenfield greengrocer greenhouse greenish Greenland Greensboro"
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grassy
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.H 1 "greensward greenware Greenwich greenwood Greer greet"
graven
Graves
gravestone
graveyard
gravid
gravitate
gravy
gray
graybeard
grayish
Grayson
graywacke
graze
grease
.APP "" "Graves app a gravestone graveyard gravid gravitate gravy gray"
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.APP "" "Greenfield app b greengrocer greenhouse greenish Greenland Greensboro"
granary
grand
grandchild
grandchildren
granddaughter
grandeur
.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
.H 2 "grandniece grandpa grandparent grandson grandstand granite granitic"
.H 2 "granny granola grant grantee grantor granular granulate"
.H 2 "granule Granville grape"
.H 2 "grapefruit grapevine graph grapheme graphic graphite"
.H 3 "grapple"
grandfather
grandiloquent
grassy
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
.APP ABC "greensward app abc greenware Greenwich greenwood Greer greet"
graven
Graves
.APP "" "handstand app f handwrite handwritten handy handyman handymen"
gravestone
graveyard
gravid
gravitate
gravy
gray
graybeard
grayish
Grayson
graywacke
graze
grease
.APPSK "" 10 "Handel app c 10 handhold handicap handicapped handicapper"
.APPSK "" 23 "handicapping app d 23 handicraftsmen handiwork"
.APPSK "" 99 "handmade app e 99 handset handshake handsome handspike"
.nr Aph 0
.APP "" "handstand app f handwrite handwritten handy handyman handymen"
headsmen
headstand
headstone
headstrong
headwall
headwater
headway
headwind
.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat"
.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
.H 2 "Greenblatt Greenbriar Greene greenery"
.H 3 "Greenfield greengrocer greenhouse greenish Greenland Greensboro"
.H 3 "greensward greenware Greenwich greenwood Greer greet"
heady
heal
Healey
health
healthful
healthy
Healy
heap
hear
heard
hearken
hearsay
hearse
Hearst
heart
heartbeat
heartbreak
hearten
heartfelt
hearth
hearty
heat
heater
heath
heathen
heathenish
Heathkit
heave
heaven
heavenward
heavy
heavyweight
Hebe
hebephrenic
Hebraic
Hebrew
Hecate
hecatomb
heck
heckle
Heckman
hectic
hector
.APP "" "hang hangable app f hangar hangman hangmen hangout hangover hank"
Hecuba
he'd
hedge
.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat"
hedgehog
hedonism
hedonist
heed
heel
.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
heft
hefty
Hegelian
hegemony
Heidelberg
heigh
height
heighten
Heine
Heinrich
Heinz
heir
heiress
Heisenberg
held
Helen
Helena
Helene
Helga
helical
helicopter
heliocentric
heliotrope
helium
helix
he'll
hell
hellbender
hellebore
Hellenic
hellfire
hellgrammite
hellish
hello
helm
helmet
Helmholtz
helmsman
helmsmen
Helmut
help
helpful
helpmate
.APP "" "Hankel app g Hanley Hanlon Hanna Hannah Hannibal Hanoi Hanover"
Helsinki
Helvetica
hem
hematite
Hemingway
hemisphere
hemispheric
hemlock
hemoglobin
hemolytic
hemorrhage
hemorrhoid
hemosiderin
hemp
Hempstead
hen
henbane
hence
henceforth
henchman
henchmen
.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
Henderson
Hendrick
Hendricks
Hendrickson
henequen
Henley
henpeck
Henri
Henrietta
henry
hepatica
hepatitis
Hepburn
heptane
her
Hera
Heraclitus
herald
herb
Herbert
Herculean
Hercules
herd
herdsman
here
hereabout
hereafter
hereby
hereditary
.TC

91
contrib/mm/examples/B1B2 Normal file
View File

@ -0,0 +1,91 @@
abetting
abeyance
abeyant
abhorred
abhorrent
abide
Abidjan
Abigail
abject
ablate
ablaze
able
ablution
Abner
abnormal
Abo
aboard
abode
abolish
.B1
abolition
abominable
abominate
aboriginal
AAA
ABORIGINE
ABORNING
ABORT
ABOUND
ABOUT
ABOVE
ABOVEBOARD
ABOVEGROUND
abovementioned
abrade
Abraham
Abram
Abramson
abrasion
abrasive
abreact
.B2
abreast
abrogate
abrupt
abscess
abscissa
abscissae
absence
absent
absentee
absenteeism
absentia
absentminded
absinthe
absolute
absolution
absolve
absorb
absorbent
absorption
absorptive
abstain
abstention
abstract
abstracter
abstractor
ABSURD
ABUILDING
ABUNDANT
ABUSABLE
ABUSE
ABUSIVE
ABUT
ABUTTED
ABUTTING
ABYSMAL
ABYSS
ABYSSINIA
AC
ACADEME
ACADEMIA
ACADEMIC
ACADEMICIAN
ACADEMY
ACADIA
ACANTHUS
ACAPULCO
ACCEDE
ACCELERATE
ACCELEROMETER

235
contrib/mm/examples/COVER Normal file
View File

@ -0,0 +1,235 @@
.COVER
.ND 911123
.TL "charge" "filing"
This is a test
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grandma
grandmother
grandnephew
grandniece
grandpa
grandparent
grandson
.AU "Nisse Svensson" "DGY" "BF" "Computer Center" "5488" "5-2115" "nisse@vira.sture.elm"
.AF "MT GRANDSTAND GRANITE GRANITIC"
.AS 1 10
grant
grantee
grantor
granular
granulate
granule
Granville
grape
grapefruit
grapevine
graph
grapheme
graphic
graphite
grapple
grasp
grass
grassland
grassy
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
graven
Graves
gravestone
graveyard
gravid
gravitate
gravy
gray
graybeard
grayish
Grayson
graywacke
graze
grease
greasy
great
greatcoat
greater
grebe
Grecian
.AE
.COVEND
Greece
greed
greedy
Greek
green
Greenbelt
Greenberg
Greenblatt
Greenbriar
Greene
greenery
Greenfield
greengrocer
greenhouse
greenish
Greenland
Greensboro
greensward
greenware
Greenwich
greenwood
Greer
greet
Greg
gregarious
Gregg
Gregory
gremlin
grenade
Grendel
Grenoble
Gresham
Greta
Gretchen
grew
grey
greyhound
greylag
grid
griddle
gridiron
grief
grievance
grieve
grievous
griffin
Griffith
grill
grille
grilled
grillwork
grim
grimace
Grimaldi
grime
Grimes
Grimm
grin
grind
grindstone
grip
gripe
grippe
grisly
grist
gristmill
Griswold
grit
gritty
grizzle
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grandma
grandmother
grandnephew
grandniece
grandpa
grandparent
grandson
grandstand
granite
granitic
granny
granola
grant
grantee
grantor
granular
granulate
granule
Granville
grape
grapefruit
grapevine
graph
grapheme
graphic
graphite
grapple
grasp
grass
grassland
grassy
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
graven
Graves
gravestone
graveyard
gravid
gravitate
gravy
gray
graybeard
grayish
Grayson
graywacke
graze
grease
greasy
great
greatcoat
greater
grebe
Grecian
Greece
greed
greedy
Greek
green
Greenbelt
Greenberg
Greenblatt
Greenbriar
Greene
greenery
Greenfield
greengrocer
greenhouse
greenish
Greenland
Greensboro
greensward
greenware

4191
contrib/mm/examples/IND Normal file

File diff suppressed because it is too large Load Diff

1058
contrib/mm/examples/LT Normal file

File diff suppressed because it is too large Load Diff

1062
contrib/mm/examples/LT.se Normal file

File diff suppressed because it is too large Load Diff

169
contrib/mm/examples/ML Normal file
View File

@ -0,0 +1,169 @@
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grandma
grandmother
grandnephew
grandniece
grandpa
.ML MARK
.LI "LOCALMARK"
granola
grant
grantee
grantor
granular
granulate
granule
Granville
grape
grapefruit
grapevine
.LI
.DS
Where shall we put this.
Where shall we put this.
Where shall we put this.
.DE
.LI
granola
grant
grantee
grantor
granular
granulate
granule
Granville
grape
grapefruit
grapevine
.LI
.DS
Where shall we put this.
.DE
.LI
graphic
graphite
grapple
grasp
grass
grassland
grassy
.LI
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
.LI
gratuity
grave
gravel
.LE
.SP 3
.ML $ 1c
.LI
graven
Graves
gravestone
graveyard
gravid
gravitate
gravy
gray
.LI
graybeard
grayish
Grayson
graywacke
graze
grease
greasy
great
greatcoat
.LI
greater
grebe
Grecian
Greece
greed
greedy
Greek
green
.LI
Greenbelt
Greenberg
Greenblatt
Greenbriar
Greene
greenery
.LE
.SP 3
.ML X 1c 1
.LI
Greenfield
greengrocer
grandson
grandstand
granite
granitic
granny
graph
.LI
grapheme
greenhouse
greenish
Greenland
Greensboro
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
.LI
grandma
grandmother
grandnephew
grandniece
grandpa
grandparent
grandson
grandstand
granite
granitic
granny
.LI
granola
grant
grantee
grantor
granular
granulate
granule
Granville
grape
grapefruit
.LI
grapevine
graph
grapheme
graphic
graphite
grapple
grasp
grass
grassland
.LE

175
contrib/mm/examples/MOVE Normal file
View File

@ -0,0 +1,175 @@
.PH "'hej'hopp'i skogen'"
.PF "'livet'är'härligt'"
.OH "'ojämn'%'sida'"
.EH "'ojämn'%'sida'"
.OF "'ojämn'%'sida'"
.EF "'ojämn'%'sida'"
10th
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
a
AAA
AAAS
Aarhus
Aaron
AAU
ABA
Ababa
aback
abacus
abalone
abandon
abase
abash
abate
abater
abbas
abbe
abbey
abbot
Abbott
abbreviate
abc
abdicate
abdomen
abdominal
abet
abetted
abetting
abeyance
abeyant
abhorred
abhorrent
abide
Abidjan
Abigail
abject
ablate
ablaze
able
ablution
Abner
.MOVE 50 20
abnormal
Abo
aboard
abode
abolish
abolition
abominable
abominate
aboriginal
AAA
ABORIGINE
ABORNING
ABORT
ABOUND
ABOUT
ABOVE
ABOVEBOARD
ABOVEGROUND
abovementioned
abrade
Abraham
Abram
Abramson
abrasion
abrasive
abreact
abreast
BBB
ABRIDGE
ABRIDGMENT
ABROAD
abrogate
abrupt
abscess
abscissa
abscissae
absence
absent
absentee
absenteeism
absentia
absentminded
.MOVE 30 10
absinthe
absolute
absolution
absolve
absorb
absorbent
absorption
absorptive
abstain
abstention
abstinent
abstract
abstracter
abstractor
CCC
ABSTRUSE
ABSURD
ABUILDING
ABUNDANT
ABUSABLE
ABUSE
ABUSIVE
ABUT
ABUTTED
ABUTTING
ABYSMAL
ABYSS
ABYSSINIA
AC
ACADEME
ACADEMIA
ACADEMIC
ACADEMICIAN
ACADEMY
ACADIA
ACANTHUS
ACAPULCO
ACCEDE
ACCELERATE
ACCELEROMETER
ACCENT
ACCENTUAL
ACCENTUATE
ACCEPT
ACCEPTANT
acceptor
access
.MOVE 62 0 20
accessible
accession
accessory
accident
accidental
accipiter
acclaim
acclamation
acclimate
accolade
accommodate
accompaniment
accompanist
accompany
accomplice
accomplish
accord
accordant
DDD
ACCORDION
ACCOST
ACCOUNT
ACCOUNTANT
ACCRA
.PGFORM

535
contrib/mm/examples/MUL Normal file
View File

@ -0,0 +1,535 @@
inject
injudicious
Injun
injunct
injunction
injure
injurious
injury
injustice
ink
inkling
inlaid
inland
inlay
inlet
Inman
inmate
inn
innards
innate
inner
innermost
innkeeper
innocent
innocuous
innovate
innuendo
innumerable
inoculate
inoffensive
inoperable
inoperative
inopportune
inordinate
inorganic
input
inputting
inquest
inquire
inquiry
inquisition
inquisitive
inquisitor
inroad
insane
insatiable
inscribe
inscription
inscrutable
insect
insecticide
insecure
inseminate
insensible
insensitive
inseparable
insert
inset
inshore
inside
insidious
insight
insightful
insignia
insignificant
insincere
insinuate
insipid
insist
insistent
insofar
insolent
insoluble
insolvable
insolvent
insomnia
insomniac
insouciant
inspect
inspector
inspiration
inspire
instable
install
installation
instalment
instance
instant
instantaneous
instantiate
instead
instep
instigate
instill
instillation
instinct
instinctual
institute
institution
instruct
instructor
instrument
instrumentation
insubordinate
insubstantial
insufferable
insufficient
insular
insulate
insulin
insult
insuperable
insupportable
insuppressible
insurance
insure
insurgent
insurmountable
insurrect
insurrection
intact
intake
intangible
integer
integrable
.MULB 4c 1 5c 1 4c 1 3c
Grenoble
Gresham
Greta
Gretchen
grew
grieve
grievous
griffin
Griffith
grill
grille
grilled
grillwork
grim
grimace
Grimaldi
grime
Grimes
Grimm
grin
grind
grindstone
grip
gripe
grippe
grisly
grist
gristmill
Griswold
grit
gritty
grizzle
grizzly
groan
groat
grocer
grocery
groggy
groin
grommet
groom
groove
grope
grosbeak
gross
.MULN
h
ha
Haag
Haas
habeas
haberdashery
Haberman
Habib
habit
habitant
habitat
habitation
habitual
habituate
hacienda
hack
hackberry
Hackett
hackle
hackmatack
hackney
hackneyed
hacksaw
had
Hadamard
Haddad
haddock
Hades
Hadley
hadn't
Hadrian
hadron
hafnium
Hagen
Hager
haggard
haggle
Hagstrom
Hague
Hahn
Haifa
haiku
hail
hailstone
hailstorm
Haines
hair
haircut
hairdo
hairpin
hairy
Haiti
Haitian
Hal
halcyon
hale
Haley
half
halfback
halfhearted
halfway
halibut
halide
Halifax
halite
hall
hallelujah
Halley
hallmark
hallow
Halloween
hallucinate
hallway
halma
halo
halocarbon
halogen
Halpern
Halsey
Halstead
halt
halvah
halve
Halverson
ham
Hamal
Hamburg
hamburger
Hamilton
hamlet
Hamlin
hammerhead
hammock
Hammond
hamper
Hampshire
Hampton
hamster
Han
Hancock
hand
handbag
handbook
handclasp
handcuff
.MULN
coliform
coliseum
collaborate
collage
collagen
collapse
collapsible
collar
collarbone
collard
collate
collateral
colleague
collect
collectible
collector
college
collegial
collegian
collegiate
collet
collide
collie
Collier
collimate
collinear
Collins
collision
collocation
colloidal
Colloq
colloquia
colloquial
colloquium
colloquy
command
commandant
commandeer
commando
commemorate
commend
commendation
commendatory
commensurable
commensurate
comment
commentary
commentator
commerce
commercial
commingle
commiserate
commissariat
commissary
commission
commit
committable
committal
committed
committee
committeeman
committeemen
committeewoman
committeewomen
committing
commodious
commodity
commodore
common
commonality
.MULN
locoweed
lunch
luncheon
lunchroom
lunchtime
Lund
Lundberg
Lundquist
lung
lunge
lupine
Lura
lurch
lure
lurid
lurk
Lusaka
luscious
lush
lust
lustful
lustrous
lusty
lutanist
lute
lutetium
Luther
Lutheran
Lutz
lymphocyte
lymphoma
lynch
Lynchburg
Lynn
lynx
Lyon
Lyons
Lyra
lyric
lyricism
Lysenko
lysergic
lysine
.MULE
m
ma
Mabel
Mac
macabre
macaque
MacArthur
Macassar
Macbeth
MacDonald
MacDougall
mace
Macedon
Macedonia
MacGregor
Mach
Machiavelli
machination
machine
machinelike
machinery
machismo
macho
macintosh
mack
MacKenzie
mackerel
Mackey
Mackinac
Mackinaw
mackintosh
MacMillan
Macon
macrame
macro
macromolecular
macromolecule
macrophage
macroprocessor
macroscopic
macrostructure
mad
Madagascar
madam
Madame
madcap
madden
Maddox
made
Madeira
Madeleine
Madeline
madhouse
Madison
madman
madmen
Madonna
Madras
Madrid
madrigal
Madsen
madstone
Mae
Maelstrom
maestro
Mafia
magazine
Magdalene
magenta
Maggie
maggot
maggoty
magi
magic
magician
magisterial
magistrate
magma
magna
magnanimity
magnanimous
magnate
magnesia
magnesite
magnesium
magnet
magnetic
magnetite
magneto
magnetron
magnificent
magnify
magnitude
magnolia
magnum
Magnuson
Magog
magpie
Magruder
Mahayana
Mahayanist
mahogany
Mahoney
maid
maiden
maidenhair
maidservant
Maier
mail
mailbox
mailman
mailmen
maim
main
Maine
mainland
mainline
mainstay
mainstream
maintain
maintenance
maitre
majestic
majesty
major
make
makeshift
makeup
Malabar
maladapt
maladaptive
maladjust
maladroit
malady
Malagasy
malaise
malaprop
malaria
malarial
Malawi
Malay
Malaysia

196
contrib/mm/examples/NCOL Normal file
View File

@ -0,0 +1,196 @@
granary
grand
grandchild
grandchildren
granddaughter
grandeur
grandfather
grandiloquent
grandiose
grandma
grandmother
grandnephew
grandniece
grandpa
grandparent
grandson
grandstand
granite
granitic
granny
granola
grant
grantee
grantor
granular
granulate
granule
Granville
grape
grapefruit
grapevine
graph
grapheme
graphic
graphite
grapple
grasp
grass
grassland
grassy
.MC 3c
grata
grate
grateful
grater
gratify
gratis
gratitude
gratuitous
gratuity
grave
gravel
graven
Graves
gravestone
graveyard
gravid
gravitate
gravy
gray
graybeard
grayish
Grayson
graywacke
graze
grease
greasy
great
greatcoat
greater
grebe
Grecian
Greece
greed
greedy
.NCOL
Greek
green
Greenbelt
Greenberg
Greenblatt
Greenbriar
Greene
greenery
Greenfield
greengrocer
greenhouse
greenish
Greenland
Greensboro
greensward
greenware
Greenwich
greenwood
Greer
greet
Greg
gregarious
Gregg
Gregory
gremlin
grenade
Grendel
Grenoble
Gresham
Greta
Gretchen
grew
grey
greyhound
greylag
grid
griddle
gridiron
grief
grievance
grieve
grievous
griffin
Griffith
grill
grille
grilled
grillwork
.NCOL
grim
grimace
Grimaldi
grime
Grimes
Grimm
grin
grind
grindstone
grip
gripe
grippe
grisly
grist
gristmill
Griswold
grit
gritty
grizzle
grizzly
groan
groat
grocer
grocery
groggy
groin
grommet
groom
groove
grope
grosbeak
gross
Grosset
Grossman
Grosvenor
grotesque
Groton
ground
groundsel
groundskeep
groundwork
group
groupoid
grout
grove
grovel
Grover
grow
growl
grown
grownup
growth
grub
grubby
grudge
gruesome
gruff
grumble
Grumman
grunt
gryphon
g's
GSA
GU
Guam
guanidine
guanine
guano
guarantee
guaranteeing
guarantor

17
contrib/mm/examples/ND Normal file
View File

@ -0,0 +1,17 @@
.nf
----------------------------------------------------------------------
.ce
Testing
----------------------------------------------------------------------
Date = \*[DT]
.ISODATE
Date = \*[DT]
.ISODATE 0
.ND "13 August 1992"
Date = \*[DT]
.ISODATE
.ND "14 August 1992"
Date = \*[DT]
----------------------------------------------------------------------

View File

@ -0,0 +1,32 @@
This directory contains examples of my enhancements to MM.
APP The appendix macro
B1B2 Box macro with text
COVER My general cover macro, this example is using
ms.cov.
IND A general indexing method, see manual for INITI
LT The letter macro
LT.se A swedish example with the extra
swedish macros for getting a letter conforming
to swedish standard letter, both left and right adjusted.
ML Marked list, an extended list type
MOVE The MOVE macro, how to begin to print on an exact position.
MUL Enhanced multicolumn mode.
NCOL Start on next column. (Not for MUL*)
ND New date, with iso date example
References How to use references
SETR General reference system, see manual for INITR
Examples that I should have:
PIC How to include postscript pictures, see manual for PIC
VERBON Begin verbatim output
And remember, check the manual for all string and number registers,
I've made shure that mgm will be useful in several languages
and all english output can be redefined.
Check the manual for groff_mse (swedish format) and the
macro file, tmac.mse.

View File

@ -0,0 +1,975 @@
.PH "'this'is'a header'"
.PF "'this'is'a footer'"
.OH "'odd'%'page'"
.EH "'even'%'page'"
.OF "'odd'%'page'"
.EF "'even'%'page'"
10th
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
a
AAA
.B
AAAS
Aarhus
Aaron
.R
AAU
ABA
Ababa
aback
abacus
abalone
abandon
abase
.H 1 "hej hopp"
abash
abate
abater
abbas
abbe
abbey
abbot
Abbott
abbreviate
abc
abdicate
abdomen
abet
abetted
abetting
abeyance
abeyant
.H 2 "hej hopp"
abhorred
abhorrent
abide
Abidjan
Abigail
abject
ablate
ablaze
able
ablution
Abner
abnormal
.H 2 "hej hopp"
Abo
aboard
abode
abolish
.HU "hej hopp"
.B1
abolition
abominable
abominate\*(Rf
aboriginal
.RS
AAA
ABORIGINE
ABORNING
ABORT
ABOUND
ABOUT
ABOVE
ABOVEBOARD
ABOVEGROUND
.RF
abovementioned
abrade
Abraham\*(Rf
Abram\*(Rf
Abramson\*(Rf
abrasion\*(Rf
abrasive\*(Rf
abreact\*(Rf
.B2
abreast\*(Rf
.RS
BBB
ABRIDGE
ABRIDGMENT
ABROAD
.RF
abrogate
abrupt
abscess\*(Rf
abscissa\*(Rf
abscissae\*(Rf
absence\*(Rf
absent
absentee
absenteeism
absentia
.H 3 "hej hopp"
absentminded
absinthe
absolute
absolution
absolve
absorb
absorbent
absorption
absorptive
abstain
abstention
abstinent\*(Rf
abstract
abstracter
abstractor
.RS nisse
CCC
ABSTRUSE
ABSURD
ABUILDING
ABUNDANT
ABUSABLE
ABUSE
ABUSIVE
ABUT
ABUTTED
ABUTTING
ABYSMAL
ABYSS
ABYSSINIA
AC
ACADEME
ACADEMIA
ACADEMIC
ACADEMICIAN
ACADEMY
ACADIA
ACANTHUS
ACAPULCO
ACCEDE
ACCELERATE
ACCELEROMETER
ACCENT
ACCENTUAL
ACCENTUATE
ACCEPT
ACCEPTANT
.RF
acceptor
access
accessible
accession
Ref \*[nisse]
accessory
.H 4 "hej hopp"
accident
accidental
accipiter
acclaim
acclamation
acclimate
accolade
accommodate
accompaniment
accompanist
accompany
accomplice
accomplish\*(Rf
accord
accordant
.RS
DDD
ACCORDION
ACCOST
ACCOUNT
ACCOUNTANT
ACCRA
ACCREDIT
ACCREDITATE
ACCREDITATION
ACCRETION
ACCRUAL
ACCRUE
.RF
acculturate
accumulate
accuracy
accurate
accusation
accusative
accusatory
accuse
accustom
ace
acerbic
acerbity
acetate
acetic
acetone
acetylene
ache
achieve
Achilles
aching
achromatic
acid
acidic
acidulous
.H 5 "hej hopp"
Ackerman
Ackley
acknowledge
acknowledgeable
ACM
acme
acolyte
acorn
acoustic
acquaint
acquaintance
acquiesce
acquiescent
acquire
acquisition
acquisitive
acquit
acquittal
acquitting
acre
acreage
acrid
acrimonious
acrimony
acrobacy
acrobat
acrobatic
acronym
acropolis
across
acrylate
acrylic
ACS
act
Actaeon
actinic
actinide
actinium
actinolite
actinometer
activate
activation
activism
Acton
actor
actress
Acts
actual
actuarial
actuate
.H 6 "hej hopp"
acuity
acumen
acute
acyclic
ad
Ada
adage
adagio
Adair
Adam
adamant
Adams
Adamson
adapt
adaptation
adaptive
add
added
addend
addenda
addendum
addict
Addis
Addison
addition
additional
additive
addle
address
addressee
Addressograph
adduce
Adelaide
Adele
Adelia
Aden
adenine
adenoma
adenosine
adept
adequacy
adequate
adhere
adherent
adhesion
adhesive
adiabatic
adieu
adipic
Adirondack
.H 7 "hej hopp"
adjacent
adject
adjectival
adjective
adjoin
adjoint
adjourn
adjudge
adjudicate
adjunct
adjust
adjutant
Adkins
Adler
administer
administrable
administrate
administratrix
admiral
admiralty
admiration
admire
admissible
admission
admit
admittance
admitted
admitting
admix
admixture
admonish
admonition
ado
adobe
adolescent
Adolph
Adolphus
Adonis
adopt
adoption
adoptive
adore
adorn
adposition
adrenal
adrenaline
Adrian
Adriatic
Adrienne
adrift
adroit
adsorb
adsorbate
adsorption
adsorptive
adulate
adult
adulterate
adulterous
adultery
adulthood
advance
advantage
advantageous
advent
adventitious
adventure
adventurous
adverb
adverbial
adversary
adverse
advert
advertise
advice
advisable
advise
advisee
advisor
advisory
advocacy
advocate
Aegean
aegis
Aeneas
Aeneid
aeolian
Aeolus
aerate
aerial
Aerobacter
aerobic
aerodynamic
aerogene
aeronautic
aerosol
aerospace
Aeschylus
aesthete
aesthetic
10th
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
a
AAA
AAAS
Aarhus
Aaron
AAU
ABA
Ababa
aback
abacus
abalone
abandon
abase
.H 1 "hej hopp"
abash
abate
abater
abbas
abbe
abbey
abbot
Abbott
abbreviate
abc
abdicate
abdomen
abdominal
abduct
Abe
abed
Abel
Abelian
Abelson
Aberdeen
Abernathy
aberrant
aberrate
abet
abetted
abetting
abeyance
abeyant
.H 2 "hej hopp"
abhorred
abhorrent
abide
Abidjan
Abigail
abject
ablate
ablaze
able
ablution
Abner
abnormal
Abo
aboard
abode
abolish
abolition
abominable
abominate
aboriginal
aborigine
aborning
abort
abound
about
above
aboveboard
aboveground
abovementioned
abrade
Abraham
Abram
Abramson
abrasion
abrasive
abreact
abreast
abridge
abridgment
abroad
abrogate
abrupt
abscess
abscissa
abscissae
absence
absent
absentee
absenteeism
absentia
.H 3 "hej hopp"
absentminded
absinthe
absolute
absolution
absolve
absorb
absorbent
absorption
absorptive
abstain
abstention
abstinent
abstract
abstracter
abstractor
abstruse
absurd
abuilding
abundant
abusable
abuse
abusive
abut
abutted
abutting
abysmal
abyss
Abyssinia
AC
academe
academia
academic
academician
academy
Acadia
acanthus
Acapulco
accede
accelerate
accelerometer
accent
accentual
accentuate
accept
acceptant
acceptor
access
accessible
accession
accessory
.H 4 "hej hopp"
accident
accidental
accipiter
acclaim
acclamation
acclimate
accolade
accommodate
accompaniment
accompanist
accompany
accomplice
accomplish
accord
accordant
accordion
accost
account
accountant
Accra
accredit
accreditate
accreditation
accretion
accrual
accrue
acculturate
accumulate
accuracy
accurate
accusation
accusative
accusatory
accuse
accustom
ace
acerbic
acerbity
acetate
acetic
acetone
acetylene
ache
achieve
Achilles
aching
achromatic
acid
acidic
acidulous
.H 5 "hej hopp"
Ackerman
Ackley
acknowledge
acknowledgeable
ACM
acme
acolyte
acorn
acoustic
acquaint
acquaintance
acquiesce
acquiescent
acquire
acquisition
acquisitive
acquit
acquittal
acquitting
acre
acreage
acrid
acrimonious
acrimony
acrobacy
acrobat
acrobatic
acronym
acropolis
across
acrylate
acrylic
ACS
act
Actaeon
actinic
actinide
actinium
actinolite
actinometer
activate
activation
activism
Acton
actor
actress
Acts
actual
actuarial
actuate
.H 6 "hej hopp"
acuity
acumen
acute
acyclic
ad
Ada
adage
adagio
Adair
Adam
adamant
Adams
Adamson
adapt
adaptation
adaptive
add
added
addend
addenda
addendum
addict
Addis
Addison
addition
additional
additive
addle
address
addressee
Addressograph
adduce
Adelaide
Adele
Adelia
Aden
adenine
adenoma
adenosine
adept
adequacy
adequate
adhere
adherent
adhesion
adhesive
adiabatic
adieu
adipic
Adirondack
.H 7 "hej hopp"
adjacent
adject
adjectival
adjective
adjoin
adjoint
adjourn
adjudge
adjudicate
adjunct
adjust
adjutant
Adkins
Adler
administer
administrable
administrate
administratrix
admiral
admiralty
admiration
admire
admissible
admission
admit
admittance
admitted
admitting
admix
admixture
admonish
admonition
ado
adobe
adolescent
Adolph
Adolphus
Adonis
adopt
adoption
adoptive
adore
adorn
adposition
adrenal
adrenaline
Adrian
Adriatic
Adrienne
adrift
adroit
adsorb
adsorbate
adsorption
adsorptive
adulate
adult
adulterate
adulterous
adultery
adulthood
advance
advantage
advantageous
advent
adventitious
adverse
advert
advertise
advice
advisable
advise
advisee
advisor
advisory
advocacy
advocate
Aegean
aegis
Aeneas
Aeneid
aeolian
Aeolus
aerate
aerial
Aerobacter
aerobic
aerodynamic
aerogene
aeronautic
aerosol
aerospace
Aeschylus
aesthete
aesthetic
.H 1 "hej hopp"
acuity
acumen
acute
acyclic
ad
Ada
adage
adagio
Adair
Adam
adamant
Adams
Adamson
adapt
adaptation
adaptive
add
added
addend
addenda
addendum
addict
Addis
Addison
addition
additional
additive
addle
address
addressee
Addressograph
adduce
Adelaide
Adele
Adelia
Aden
adenine
adenoma
adenosine
adept
adequacy
adequate
adhere
adherent
adhesion
adhesive
adiabatic
adieu
adipic
Adirondack
.H 2 "hej hopp"
adjacent
adject
adjectival
adjective
adjoin
adjoint
adjourn
adjudge
adjudicate
.H 2 "hej hopp"
adjunct
adjust
adjutant
Adkins
Adler
administer
administrable
administrate
administratrix
admiral
admiralty
admiration
admire
admissible
admission
admit
admittance
admitted
admitting
admix
admixture
admonish
admonition
ado
adobe
adolescent
Adolph
Adolphus
Adonis
adopt
adoption
adoptive
adore
adorn
adposition
adrenal
adrenaline
Adrian
Adriatic
Adrienne
adrift
adroit
adsorb
adsorbate
adsorption
adsorptive
adulate
adult
adulterate
adulterous
adultery
adulthood
advance
advantage
advantageous
advent
adventitious
adverse
advert
advertise
advice
advisable
advise
advisee
advisor
advisory
advocacy
advocate
Aegean
aegis
Aeneas
Aeneid
aeolian
Aeolus
aerate
aerial
Aerobacter
aerobic
aerodynamic
aerogene
aeronautic
aerosol
aerospace
Aeschylus
aesthete
aesthetic
.RP 0 1
.TC

109
contrib/mm/examples/SETR Normal file
View File

@ -0,0 +1,109 @@
.nr Cl 6
.INITR setr
.H 1 " granary grand grandchild grandchildren granddaughter grandeur"
.SETR ref1
.H 2 "grandfather grandiloquent grandiose grandma grandmother grandnephew"
.H 2 "grandniece grandpa grandparent grandson grandstand granite granitic"
.H 2 "granny granola grant grantee grantor granular granulate"
.SETR ref2
.H 2 "granule Granville grape"
grant
grantee
grantor
granular
granulate
.br
granule
.B
REF 9:
.GETHN ref9
, page number
.GETPN ref9
.R
Granville
grape
.br
grapefruit
grapevine
graph
grapheme
graphic
graphite
\fBExhibit\fP
.GETHN ex1
grapple
grasp
grass
grassland
grassy
grata
grate
.H 2 "grapefruit grapevine graph grapheme graphic graphite"
.H 3 "grapple"
.SETR ref3
.H 3 "grasp grass grassland grassy grata grate grateful"
.H 3 "grater gratify gratis gratitude"
.H 4 "gratuitous gratuity grave"
.H 4 "gravel graven"
.SETR ref4
.H 1 "Graves gravestone graveyard gravid gravitate gravy gray"
.H 2 "graybeard grayish Grayson graywacke graze grease greasy great greatcoat"
.H 2 "greater grebe Grecian Greece greed greedy Greek green Greenbelt Greenberg"
.H 2 "Greenblatt Greenbriar Greene greenery"
.SETR ref5
.H 1 "Greenfield greengrocer greenhouse greenish Greenland Greensboro"
.H 1 "greensward greenware Greenwich greenwood Greer greet"
grant
grantee
.DS
Advertisements contain the only truths to be relied on in a newspaper.
-- Thomas Jefferson
.EX fortune "" "" ex1
.DE
grantor
granular
.GETR ref1
granulate
granule
.H 2 "Using variables"
.B
REF 2:
.GETHN ref2 c
.GETPN ref2 bbb
\*c, page number \*[bbb]
.R
Granville
grape
grapefruit
grapevine
graph
grapheme
.H 2 "Greg gregarious Gregg Gregory gremlin grenade Grendel"
.H 2 "Grenoble Gresham Greta Gretchen"
.SETR ref6
.H 2 "grew"
.H 1 "grey greyhound greylag grid griddle gridiron grief"
.H 1 "grievance grieve grievous griffin Griffith grill grille grilled grillwork"
.H 3 "grim grimace Grimaldi grime Grimes Grimm grin grind grindstone"
.H 3 "grip gripe grippe grisly grist gristmill Griswold grit"
.SETR ref7
.H 3 "gritty grizzle grizzly groan groat grocer grocery groggy groin"
.H 1 "grommet groom groove grope grosbeak gross Grosset Grossman Grosvenor grotesque"
.H 1 "Groton ground groundsel groundskeep groundwork group groupoid"
.H 4 "grout grove grovel Grover grow growl grown grownup growth grub grubby"
.H 4 "grudge gruesome gruff grumble Grumman grunt gryphon g's"
.SETR ref8
.H 4 "GSA GU Guam guanidine guanine guano guarantee guaranteeing guarantor"
.H 4 "guaranty"
.H 1 "guard guardhouse Guardia guardian Guatemala gubernatorial Guelph Guenther"
.H 1 "guerdon guernsey guerrilla guess guesswork guest guffaw Guggenheim"
.SETR ref9
.H 1 "Guiana guidance guide guidebook guideline guidepost guiding"
.H 1 "guignol"
.GETR ref6
.H 1 "guild guildhall guile Guilford guillemot guillotine guilt"
.SETR ref10
.H 1 "guilty guinea guise guitar gules gulf gull Gullah"
.H 1 "gullet gullible gully gulp gum gumbo gumdrop gummy gumption"

2104
contrib/mm/groff_mm.man Normal file

File diff suppressed because it is too large Load Diff

86
contrib/mm/groff_mmse.man Normal file
View File

@ -0,0 +1,86 @@
.\"
.\" $Id: groff_mmse.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $
.\" Skrivet av Jörgen Hägg, Lund, Sverige
.\"
.TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAMN
groff_mmse \- svenska mm makro för groff
.SH SYNTAX
.B groff
.B \-m@TMAC_M_PREFIX@mse
[
.IR flaggor .\|.\|.
]
[
.IR filer .\|.\|.
]
.SH BESKRIVNING
\fBm@TMAC_M_PREFIX@mse\fP är en svensk variant av \fBm@TMAC_M_PREFIX@m\fP. Alla texter
är översatta. En A4 sida får text som är 13 cm bred, 3.5 cm indragning
samt är 28.5 cm hög.
Det finns stöd för brevuppställning enligt svensk standard
för vänster och högerjusterad text.
.LP
\fBCOVER\fP kan använda \fIse_ms\fP som argument. Detta ger ett
svenskt försättsblad.
Se \fBgroff_mm(@MAN7EXT@)\fP för övriga detaljer.
.SH BREV
Tillgängliga brevtyper:
.TP
.B ".LT SVV"
Vänsterställd löptext med adressat i position T0 (vänsterställt).
.TP
.B ".LT SVH"
Högerställd löptext med adressat i position T4 (passar
fönsterkuvert).
.LP
Följande extra LO-variabler används.
.TP
.B ".LO DNAMN\fI namn\fP"
Anger dokumentets namn.
.TP
.br
.B ".LO MDAT\fI datum\fP"
Mottagarens datum, anges under \fBErt datum:\fP (\fBLetMDAT\fP).
.TP
.br
.B ".LO BIL\fI sträng\fP"
Anger bilaga, nummer eller sträng med \fBBilaga\fP (\fBLetBIL\fP)
som prefix.
.TP
.br
.B ".LO KOMP\fI text\fP"
Anger kompletteringsuppgift.
.TP
.br
.B ".LO DBET\fI beteckning\fP"
Anger dokumentbeteckning eller dokumentnummer.
.TP
.br
.B ".LO BET\fI beteckning\fP"
Anger beteckning (ärendebeteckning i form av diarienummer eller liknande).
.TP
.br
.B ".LO SIDOR\fI antal\fP"
Anger totala antalet sidor och skrivs ut efter sidnumret inom
parenteser.
.LP
Om makrot \fB.TP\fP är definierat anropas det efter utskrift av brevhuvudet.
Där lägger man lämpligen in postadress och annat som brevfot.
.SH "SKRIVET AV"
Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se>
.SH FILER
.B @MACRODIR@/tmac.@TMAC_M_PREFIX@mse
.B @TMAC_MDIR@/se_*.cov
.SH "SE OCKSÅ"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@)
.br
.BR groff_mm (@MAN7EXT@)
.
.\" Local Variables:
.\" mode: nroff
.\" End:

3536
contrib/mm/m.tmac Normal file

File diff suppressed because it is too large Load Diff

3
contrib/mm/mm.tmac Normal file
View File

@ -0,0 +1,3 @@
.\" mm.tmac
.\"
.do mso m.tmac

146
contrib/mm/mm/0.MT Normal file
View File

@ -0,0 +1,146 @@
.\"------------
.\" $Id: 0.MT,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
.\" Cover sheet. Memorandum type 0-3 and "string".
.\"------------
.if !r Au .nr Au 1
.nr cov*mt0-ind 1.1c
.de cov@print-title
.MOVE 4.8c 1.5c
.S 8
subject:
.sp -1.1
.S
.PGFORM
.ft \\*[@sdf_font]
.ll 9c
.fi
.cov*title
.ft
.ll
.nf
.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP
.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP
.fi
..
.\"------------
.de cov@print-authors
.MOVE 5.7c 13.3c
.nf
.S 8
\\$1:
.br
.S
.sp -1
.in 0.8c
.ft \\*[@sdf_font]
.nr cov*i 0 1
.while \\n+[cov*i]<=\\n[cov*au] \{\
. cov@print-au1 \\n[cov*i] 1
. if \\n[Au] \{\
. cov@print-au2 \\n[cov*i] 3 4
. cov@print-au2 \\n[cov*i] 6 5
. cov@print-au1 \\n[cov*i] 7
. cov@print-au1 \\n[cov*i] 8
. cov@print-au1 \\n[cov*i] 9
. \}
. if \\n[cov*i]<\\n[cov*au] .SP 1
.\}
.ft
.if r cov*mt-tm-max \{\
. SP 1
. nr cov*i 0 1
. ft \\*[@sdf_font]
TM
. in 1.5c
. sp -1
. while \\n+[cov*i]<\\n[cov*mt-tm-max] \\*[cov*mt-tm!\\n[cov*i]]
. in
. ft
.\}
.fi
.PGFORM
..
.\"------------
.\" index arg1
.de cov@print-au1
.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2]
..
.\"------------
.de cov@print-au2
.\" index arg1 arg2
.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2] \c
.if \\$3=5 .if d cov*au!\\$1!\\$3 x\c
.if d cov*au!\\$1!\\$3 \\*[cov*au!\\$1!\\$3]\c
.br
..
.\"------------
.de cov@print-date
.MOVE 4.8c 13.3c
.S 8
.nf
\\$1:
.br
.S
.sp -1
.in 0.8c
\f[\\*[@sdf_font]]\\*[cov*new-date]\fP
.br
.fi
.PGFORM
..
.\"------------
.de cov@print-firm
.if d cov*firm \{\
. MOVE 2.8c 0 17.7c
. S 18
. rj 1
\fB\\*[cov*firm]\fP
. S
. PGFORM
.\}
..
.\"------------
.de cov@print-abstract
.SP 3
.if d cov*abstract \{\
. misc@ev-keep cov*ev
. if \\n[cov*abs-ind]>0 \{\
. in +\\n[cov*abs-ind]u
. ll -\\n[cov*abs-ind]u
. \}
. ce
\fI\\$1\fP
. SP 1.5
. fi
. cov*abstract
. br
. ev
.\}
..
.\"-----------------
.ds cov*mt0-txt!1 MEMORANDUM FOR FILE
.ds cov*mt0-txt!2 PROGRAMMER'S NOTES
.ds cov*mt0-txt!3 ENGINEER'S NOTES
.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm]
.\"
.if !d cov*mt-printed \{\
. cov@print-firm
. cov@print-title subject
. cov@print-date date
. cov@print-authors from
. cov@print-abstract \\*[cov*abs-name]
. SP 3
. if (\*[cov*mt-type]>=1)&(\*[cov*mt-type]<=3) \{\
. ce
\fI\*[cov*mt0-txt!\*[cov*mt-type]]\fP
. SP 1.5
. \}
. if \*[cov*mt-type]=6 \{\
. ce
\fI\*[cov*mt-type-text]\fP
. SP 1.5
. \}
. pg@enable-top-trap
. pg@enable-trap
. ds cov*mt-printed
.\}

82
contrib/mm/mm/4.MT Normal file
View File

@ -0,0 +1,82 @@
.\"------------
.\" $Id: 4.MT,v 2.2 2003/04/02 04:06:40 jhaegg Exp $
.\" Cover sheet. Memorandum type 4
.\"------------
.de cov@print-title
.if !d cov*title .@error title (.TL) not defined!
.MOVE 2.8c
.S +2
.ad c
.fi
.B
.cov*title
.br
.S
.R
.ad b
..
.\"------------
.de cov@print-authors
.SP 0.5
.I
.S +1
.nr cov*i 0 1
.while \\n+[cov*i]<=\\n[cov*au] \{\
.ce
\\*[cov*au!\\n[cov*i]!1]
.br
.\}
.S
.R
..
.\"------------
.de cov@print-firm
.if d cov*firm \{\
. SP 0.5
. ce
\\*[cov*firm]
.\}
..
.\"------------
.de cov@print-abstract
.SP 2
.if d cov*abstract \{\
. misc@ev-keep cov*ev
. init@reset
. if \\n[cov*abs-ind]>0 \{\
. in +\\n[cov*abs-ind]u
. ll -\\n[cov*abs-ind]u
. \}
. ce
\fI\\*[cov*abs-name]\fP
. SP 2
. fi
. cov*abstract
. br
. ev
.\}
..
.\"-----------------
.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm]
.if !d cov*mt-printed \{\
. cov@print-title
. cov@print-authors
. cov@print-firm
. if d cov*abstract \{\
. if !\n[cov*abs-arg] .cov@print-abstract
. \}
. SP 2
. nr hd*cur-bline \n[nl]
. ds cov*mt-printed
. pg@enable-top-trap
. pg@enable-trap
.\}
.de CS
.pg@disable-top-trap
.SK
.cov@print-title
.cov@print-authors
.cov@print-firm
.cov@print-abstract
..

34
contrib/mm/mm/5.MT Normal file
View File

@ -0,0 +1,34 @@
.\"------------
.\" $Id: 5.MT,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
.\" Cover sheet. Memorandum type 5
.\"------------
.nr cov*mt0-ind 1.1c
.de cov@print-title
.B
.ll 9c
.fi
.cov*title
.R
.ll
.nf
.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP
.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP
.fi
..
.\"------------
.de cov@print-date
.rj 1
\f[\\*[@sdf_font]]\\*[cov*new-date]\fP
.br
..
.\"------------
.if !d cov*mt-printed \{\
. SP 1.9c
. cov@print-title
. SP 1.2c
. cov@print-date
. SP 3
. pg@enable-top-trap
. pg@enable-trap
. ds cov*mt-printed
.\}

84
contrib/mm/mm/ms.cov Normal file
View File

@ -0,0 +1,84 @@
.\"------------
.\" $Id: ms.cov,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
.\" Cover sheet. Mostly like ms cover.
.\"------------
.de cov@print-title
.in 0
.misc@ev-keep cov*ev
.init@reset
.ad c
.hy 0
.fi
.B
.cov*title
.br
.ad b
.R
.ev
..
.\"------------
.de cov@print-authors
.SP
.nr cov*i 0 1
.while \\n+[cov*i]<=\\n[cov*au] \{\
. ce
\fI\\*[cov*au!\\n[cov*i]!1]\fP
. nr cov*j 0 1
. while \\n+[cov*j]<=9 \{\
. if d cov*at!\\n[cov*i]!\\n[cov*j] \{\
. if \w'\\*[cov*at!\\n[cov*i]!\\n[cov*j]]' \{\
. ce
\s-1\\*[cov*at!\\n[cov*i]!\\n[cov*j]]\s0
. .\}
. \}
. \}
.\}
..
.\"------------
.de cov@print-firm
.SP .5
.ce
\\*[cov*firm]
..
.\"------------
.de cov@print-abstract
.SP 2
.if d cov*abstract \{\
. misc@ev-keep cov*ev
. init@reset
. if \\n[cov*abs-ind]>0 \{\
. in +\\n[cov*abs-ind]u
. ll -\\n[cov*abs-ind]u
. \}
. ce
\fI\\$1\fP
. SP 1.5
. fi
. cov*abstract
. br
. ev
.\}
..
.\"------------
.de cov@print-date
.SP 2
\f[\\*[@sdf_font]]\\*[cov*new-date]\fP
..
.\"-----------------
.de COVEND
.br
.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm]
.sp |4.2c
.cov@print-title
.cov@print-authors
.cov@print-firm
.cov@print-abstract \\*[cov*abs-name]
.cov@print-date
.pg@enable-top-trap
.bp 1
.pg@enable-trap
.if d cov*abs-arg .if \\n[cov*abs-arg] \{\
. cov@print-abstract ABSTRACT
. SP 2
.\}
..

3
contrib/mm/mm/se_ms.cov Normal file
View File

@ -0,0 +1,3 @@
.\" $Id: se_ms.cov,v 2.0 2000/09/14 03:40:25 jhaegg Exp $
.mso mm/ms.cov
.nr cur*abstract-ll 11c

49
contrib/mm/mmroff.man Normal file
View File

@ -0,0 +1,49 @@
.\"
.\" $Id: mmroff.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $
.\"
.TH MMROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
mmroff \- reference preprocessor
.SH SYNOPSIS
.B mmroff
[
.I -x
]
.I groff_arguments
.SH DESCRIPTION
\fBmmroff\fP is a simple preprocessor for \fBgroff\fP, it is
used for expanding references in \fBm@TMAC_M_PREFIX@m\fP, see
\fBgroff_mm(@MAN7EXT@)\fP.
\fBgroff\fP is executed twice, first with \fB-z\fP and \fB-rRef=1\fR
to collect all references and then to do the real processing
when the reference file is up to date.
.TP
\fB\-x\fR
Just create the reference file. This can be used to refresh
the reference file, it isn't always needed to have accurate
references and by using this option \fBgroff\fP will only
be run once.
.\".SH BUGS
.SH AUTHOR
Jörgen Hägg, Lund, Sweden <jh@axis.se>.
.SH FILES
.TP
.B @MACRODIR@/tmac.@TMAC_M_PREFIX@m
.TP
.B @TMAC_MDIR@/*.cov
.TP
.B @TMAC_MDIR@/*.MT
.TP
.B @TMAC_MDIR@/locale
.SH "SEE ALSO"
.BR groff_mm(@MAN7EXT@),
.BR groff_mmse(@MAN7EXT@),
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@)
.
.\" Local Variables:
.\" mode: nroff
.\" End:

137
contrib/mm/mmroff.pl Normal file
View File

@ -0,0 +1,137 @@
#! /usr/bin/perl
use strict;
# runs groff in safe mode, that seems to be the default
# installation now. That means that I have to fix all nice
# features outside groff. Sigh.
# I do agree however that the previous way opened a whole bunch
# of security holes.
my $no_exec;
# check for -x and remove it
if (grep(/^-x$/, @ARGV)) {
$no_exec++;
@ARGV = grep(!/^-x$/, @ARGV);
}
# mmroff should always have -mm, but not twice
@ARGV = grep(!/^-mm$/, @ARGV);
my $check_macro = "groff -rRef=1 -z -mm @ARGV";
my $run_macro = "groff -mm @ARGV";
my (%cur, $rfilename, $max_height, $imacro, $max_width, @out, @indi);
open(MACRO, "$check_macro 2>&1 |") || die "run $check_macro:$!";
while(<MACRO>) {
if (m#^\.\\" Rfilename: (\S+)#) {
# remove all directories just to be more secure
($rfilename = $1) =~ s#.*/##;
next;
}
if (m#^\.\\" Imacro: (\S+)#) {
# remove all directories just to be more secure
($imacro = $1) =~ s#.*/##;
next;
}
if (m#^\.\\" Index: (\S+)#) {
# remove all directories just to be more secure
my $f;
($f = $1) =~ s#.*/##;
&print_index($f, \@indi, $imacro);
@indi = ();
$imacro = '';
next;
}
my $x;
if (($x) = m#^\.\\" IND (.+)#) {
$x =~ s#\\##g;
my @x = split(/\t/, $x);
grep(s/\s+$//, @x);
push(@indi, join("\t", @x));
next;
}
if (m#^\.\\" PIC id (\d+)#) {
%cur = ('id', $1);
next;
}
if (m#^\.\\" PIC file (\S+)#) {
&psbb($1);
&ps_calc($1);
next;
}
if (m#^\.\\" PIC (\w+)\s+(\S+)#) {
eval "\$cur{'$1'} = '$2'";
next;
}
s#\\ \\ $##;
push(@out, $_);
}
close(MACRO);
if ($rfilename) {
push(@out, ".nr pict*max-height $max_height\n") if defined $max_height;
push(@out, ".nr pict*max-width $max_width\n") if defined $max_width;
open(OUT, ">$rfilename") || "create $rfilename:$!";
print OUT '.\" references', "\n";
my $i;
for $i (@out) {
print OUT $i;
}
close(OUT);
}
exit 0 if $no_exec;
exit system($run_macro);
sub print_index {
my ($f, $ind, $macro) = @_;
open(OUT, ">$f") || "create $f:$!";
my $i;
for $i (sort @$ind) {
if ($macro) {
$i = '.'.$macro.' "'.join('" "', split(/\t/, $i)).'"';
}
print OUT "$i\n";
}
close(OUT);
}
sub ps_calc {
my ($f) = @_;
my $w = abs($cur{'llx'}-$cur{'urx'});
my $h = abs($cur{'lly'}-$cur{'ury'});
$max_width = $w if $w > $max_width;
$max_height = $h if $h > $max_height;
my $id = $cur{'id'};
push(@out, ".ds pict*file!$id $f\n");
push(@out, ".ds pict*id!$f $id\n");
push(@out, ".nr pict*llx!$id $cur{'llx'}\n");
push(@out, ".nr pict*lly!$id $cur{'lly'}\n");
push(@out, ".nr pict*urx!$id $cur{'urx'}\n");
push(@out, ".nr pict*ury!$id $cur{'ury'}\n");
push(@out, ".nr pict*w!$id $w\n");
push(@out, ".nr pict*h!$id $h\n");
}
sub psbb {
my ($f) = @_;
unless (open(IN, $f)) {
print STDERR "Warning: Postscript file $f:$!";
next;
}
while(<IN>) {
if (/^%%BoundingBox:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
$cur{'llx'} = $1;
$cur{'lly'} = $2;
$cur{'urx'} = $3;
$cur{'ury'} = $4;
}
}
close(IN);
}

3
contrib/mm/mmse.tmac Normal file
View File

@ -0,0 +1,3 @@
.\" mmse.tmac
.\"
.do mso mse.tmac

Some files were not shown because too many files have changed in this diff Show More