NAME

roff - concepts and history of roff typesetting

DESCRIPTION

roff is the general name for a set of type-setting programs, known under names like troff, nroff, ditroff, groff, etc. A roff type-setting system consists of an extensible text formatting language and a set of programs for printing and converting to other text formats. Traditionally, it is the main text processing system of Unix; every Unix-like operating system still distributes a roff system as a core package.

The most common roff system today is the free software implementation GNU roff, groff(1) The pre-groff implementations are referred to as classical (dating back as long as 1973). groff implements the look-and-feel and functionality of its classical ancestors, but has many extensions. As groff is the only roff system that is available for every (or almost every) computer system it is the de-facto roff standard today.

In some ancient Unix systems, there was a binary called roff that implemented the even more ancient runoff of the Multics operating system, cf. section HISTORY. The functionality of this program was very restricted even in comparison to ancient troff; it is not supported any longer. Consequently, in this document, the term roff always refers to the general meaning of roff system, not to the ancient roff binary.

In spite of its age, roff is in wide use today, for example, the manual pages on UNIX systems many software books, system documentation, standards, and corporate documents are written in roff. The roff output for text devices is still unmatched, and its graphical output has the same quality as other free type-setting programs and is better than some of the commercial systems.

The most popular application of roff is the concept of manual pages or shortly man pages; this is the standard documentation system on many operating systems.

This document describes the historical facts around the development of the roff system; some usage aspects common to all roff versions, details on the roff pipeline, which is usually hidden behind front-ends like groff(1); an general overview of the formatting language; some tips for editing roff files; and many pointers to further readings.

HISTORY

The roff text processing system has a very long history, dating back to the 1960s. The roff system itself is intimately connected to the Unix operating system, but its roots go back to the earlier operating systems CTSS and Multics.

The Predecessor runoff

The evolution of roff is intimately related to the history of the operating systems. Its predecessor runoff was written by Jerry Saltzer on the CTSS operating system as early as 1961. When CTSS was further developed into the operating system Multics , the famous predecessor of Unix from 1963, runoff became the main format for documentation and text processing. Both operating systems could only be run on very expensive computers at that time, so they were mostly used in research and for official and military tasks.

The possibilities of the runoff language were quite limited as compared to modern roff. Only text output was possible in the 1960s. This could be implemented by a set of requests of length 2, many of which are still identically used in roff. The language was modelled according to the habits of typesetting in the pre-computer age, where lines starting with a dot were used in manuscripts to denote formatting requests to the person who would perform the typesetting manually later on.

The runoff program was written in the PL/1 language first, later on in BCPL, the grandmother of the C programming language. In the Multics operating system, the help system was handled by runoff, similar to roff's task to manage the Unix manual pages. There are still documents written in the runoff language; for examples see Saltzer's home page, cf. section SEE ALSO.

The Classical nroff/troff System

In the 1970s, the Multics off-spring Unix became more and more popular because it could be run on affordable machines and was easily available for universities at that time. At MIT (the Massachusetts Institute of Technology), there was a need to drive the Wang Graphic Systems CAT typesetter, a graphical output device from a PDP-11 computer running Unix. As runoff was too limited for this task it was further developed into a more powerful text formatting system by Josef F. Osanna, a main developer of the Multics operating system and programmer of several runoff ports.

The name runoff was shortened to roff. The greatly enlarged language of Osanna's concept included already all elements of a full roff system. All modern roff systems try to implement compatibility to this system. So Joe Osanna can be called the father of all roff systems.

This first roff system had three formatter programs.

troff
generated a graphical output for the CAT typesetter as its only device.
nroff
produced text output suitable for terminals and line printers.
roff
was the reimplementation of the former runoff program with its limited features; this program was abandoned in later versions. Today, the name roff is used to refer to a troff/nroff sytem as a whole.

Osanna first version was written in the PDP-11 assembly language and released in 1973. Brian Kernighan joined the roff development by rewriting it in the C programming language. The C version was released in 1975.

The syntax of the formatting language of the nroff/troff programs was documented in the famous Troff User's Manual [CSTR #54], first published in 1976, with further revisions up to 1992 by Brian Kernighan. This document is the specification of the classical troff. All later roff systems tried to establish compatibility with this specification.

After Osanna had died in 1977 by a heart-attack at the age of about 50, Kernighan went on with developing troff. The next milestone was to equip troff with a general interface to support more devices, the intermediate output format and the postprocessor system. This completed the structure of a roff system as it is still in use today; see section USING ROFF. In 1979, these novelties were described in the paper [CSTR #97]. This new troff version is the basis for all existing newer troff systems, including groff. On some systems, this device independent troff got a binary of its own, called ditroff(7) All modern troff programs already provide the full ditroff capabilities automatically.

Commercialization

A major degradation occurred when the easily available Unix 7 operating system was commercialized. A whole bunch of divergent operating systems emerged, fighting each other with incompatibilities in their extensions. Luckily, the incompatibilities did not fight the original troff. All of the different commercial roff systems made heavy use of Osanna/Kernighan's open source code and documentation, but sold them as "their" system -- with only minor additions.

The source code of both the ancient Unix and classical troff weren't available for two decades. Fortunately, Caldera bought SCO UNIX in 2001. In the following, Caldera made the ancient source code accessible on-line for non-commercial use, cf. section SEE ALSO.

Free roff

None of the commercial roff systems could attain the status of a successor for the general roff development. Everyone was only interested in their own stuff. This led to a steep downfall of the once excellent Unix operating system during the 1980s.

As a counter-measure to the galopping commercialization, AT&T Bell Labs tried to launch a rescue project with their Plan 9 operating system. It is freely available for non-commercial use, even the source code, but has a proprietary license that impedes the free development. This concept is outdated, so Plan 9 was not accepted as a platform to bundle the main-stream development.

The only remedy came from the emerging free operatings systems (386BSD, GNU/Linux, etc.) and software projects during the 1980s and 1990s. These implemented the ancient Unix features and many extensions, such that the old experience is not lost. In the 21st century, Unix-like systems are again a major factor in computer industry -- thanks to free software.

The most important free roff project was the GNU port of troff, created by James Clark and put under the GNU Public License . It was called groff See groff(1) for an overview.

The groff system is still actively developed. It is compatible to the classical troff, but many extensions were added. It is the first roff system that is available on almost all operating systems -- and it is free. This makes groff the de-facto roff standard today.

USING ROFF

Most people won't even notice that they are actually using roff. When you read a system manual page (man page) roff is working in the background. Roff documents can be viewed with a native viewer called xditview(1x), a standard program of the X window distribution, see X(7x). But using roff explicitly isn't difficult either.

Some roff implementations provide wrapper programs that make it easy to use the roff system on the shell command line. For example, the GNU roff implementation groff(1) provides command line options to avoid the long command pipes of classical troff; a program grog(1) tries to guess from the document which arguments should be used for a run of groff; people who do not like specifying command line options should try the groffer(1) program for graphically displaying groff files and man pages.

The roff Pipe

Each roff system consists of preprocessors, roff formatter programs, and a set of device postprocessors. This concept makes heavy use of the piping mechanism, that is, a series of programs is called one after the other, where the output of each program in the queue is taken as the input for the next program.


_s_h_# cat _f_i_l_e | ... | _p_r_e_p_r_o_c | ... | troff _o_p_t_i_o_n_s | _p_o_s_t_p_r_o_c _<_p_> _T_h_e _p_r_e_p_r_o_c_e_s_s_o_r_s _g_e_n_e_r_a_t_e _r_o_f_f _c_o_d_e _t_h_a_t _i_s _f_e_d _i_n_t_o _a _r_o_f_f _f_o_r_m_a_t_t_e_r _(_e_._g_. _t_r_o_f_f_)_, _w_h_i_c_h _i_n _t_u_r_n _g_e_n_e_r_a_t_e_s _<_i_>_i_n_t_e_r_m_e_d_i_a_t_e _o_u_t_p_u_t_<_/_i_> _t_h_a_t _i_s _f_e_d _i_n_t_o _a _d_e_v_i_c_e _p_o_s_t_p_r_o_c_e_s_s_o_r _p_r_o_g_r_a_m _f_o_r _p_r_i_n_t_i_n_g _o_r _f_i_n_a_l _o_u_t_p_u_t_. _<_p_> _A_l_l _o_f _t_h_e_s_e _p_a_r_t_s _u_s_e _p_r_o_g_r_a_m_m_i_n_g _l_a_n_g_u_a_g_e_s _o_f _t_h_e_i_r _o_w_n_; _e_a_c_h _l_a_n_g_u_a_g_e _i_s _t_o_t_a_l_l_y _u_n_r_e_l_a_t_e_d _t_o _t_h_e _o_t_h_e_r _p_a_r_t_s_. _M_o_r_e_o_v_e_r_, _r_o_f_f _m_a_c_r_o _p_a_c_k_a_g_e_s _t_h_a_t _w_e_r_e _t_a_i_l_o_r_e_d _f_o_r _s_p_e_c_i_a_l _p_u_r_p_o_s_e_s _c_a_n _b_e _i_n_c_l_u_d_e_d_. _<_p_> _M_o_s_t _r_o_f_f _d_o_c_u_m_e_n_t_s _u_s_e _t_h_e _m_a_c_r_o_s _o_f _s_o_m_e _p_a_c_k_a_g_e_, _i_n_t_e_r_m_i_x_e_d _w_i_t_h _c_o_d_e _f_o_r _o_n_e _o_r _m_o_r_e _p_r_e_p_r_o_c_e_s_s_o_r_s_, _s_p_i_c_e_d _w_i_t_h _s_o_m_e _e_l_e_m_e_n_t_s _f_r_o_m _t_h_e _p_l_a_i_n _r_o_f_f _l_a_n_g_u_a_g_e_. _T_h_e _f_u_l_l _p_o_w_e_r _o_f _t_h_e _r_o_f_f _f_o_r_m_a_t_t_i_n_g _l_a_n_g_u_a_g_e _i_s _s_e_l_d_o_m _n_e_e_d_e_d _b_y _u_s_e_r_s_; _o_n_l_y _p_r_o_g_r_a_m_m_e_r_s _o_f _m_a_c_r_o _p_a_c_k_a_g_e_s _n_e_e_d _t_o _k_n_o_w _a_b_o_u_t _t_h_e _g_o_r_y _d_e_t_a_i_l_s_. _<_h_4 _i_d_=_"_P_r_e_p_r_o_c_e_s_s_o_r_s_"_> _P_r_e_p_r_o_c_e_s_s_o_r_s _<_/_h_4_> _A _r_o_f_f _p_r_e_p_r_o_c_e_s_s_o_r _i_s _a_n_y _p_r_o_g_r_a_m _t_h_a_t _g_e_n_e_r_a_t_e_s _o_u_t_p_u_t _t_h_a_t _s_y_n_t_a_c_t_i_c_a_l_l_y _o_b_e_y_s _t_h_e _r_u_l_e_s _o_f _t_h_e _r_o_f_f _f_o_r_m_a_t_t_i_n_g _l_a_n_g_u_a_g_e_. _E_a_c_h _p_r_e_p_r_o_c_e_s_s_o_r _d_e_f_i_n_e_s _a _l_a_n_g_u_a_g_e _o_f _i_t_s _o_w_n _t_h_a_t _i_s _t_r_a_n_s_l_a_t_e_d _i_n_t_o _r_o_f_f _c_o_d_e _w_h_e_n _r_u_n _t_h_r_o_u_g_h _t_h_e _p_r_e_p_r_o_c_e_s_s_o_r _p_r_o_g_r_a_m_. _P_a_r_t_s _w_r_i_t_t_e_n _i_n _t_h_e_s_e _l_a_n_g_u_a_g_e_s _m_a_y _b_e _i_n_c_l_u_d_e_d _w_i_t_h_i_n _a _r_o_f_f _d_o_c_u_m_e_n_t_; _t_h_e_y _a_r_e _i_d_e_n_t_i_f_i_e_d _b_y _s_p_e_c_i_a_l _r_o_f_f _r_e_q_u_e_s_t_s _o_r _m_a_c_r_o_s_. _E_a_c_h _d_o_c_u_m_e_n_t _t_h_a_t _i_s _e_n_h_a_n_c_e_d _b_y _p_r_e_p_r_o_c_e_s_s_o_r _c_o_d_e _m_u_s_t _b_e _r_u_n _t_h_r_o_u_g_h _a_l_l _c_o_r_r_e_s_p_o_n_d_i_n_g _p_r_e_p_r_o_c_e_s_s_o_r_s _b_e_f_o_r_e _i_t _i_s _f_e_d _i_n_t_o _t_h_e _a_c_t_u_a_l _r_o_f_f _f_o_r_m_a_t_t_e_r _p_r_o_g_r_a_m_, _f_o_r _t_h_e _f_o_r_m_a_t_t_e_r _j_u_s_t _i_g_n_o_r_e_s _a_l_l _a_l_i_e_n _c_o_d_e_. _T_h_e _p_r_e_p_r_o_c_e_s_s_o_r _p_r_o_g_r_a_m_s _e_x_t_r_a_c_t _a_n_d _t_r_a_n_s_f_o_r_m _o_n_l_y _t_h_e _d_o_c_u_m_e_n_t _p_a_r_t_s _t_h_a_t _a_r_e _d_e_t_e_r_m_i_n_e_d _f_o_r _t_h_e_m_. _<_p_> _T_h_e_r_e _a_r_e _a _l_o_t _o_f _f_r_e_e _a_n_d _c_o_m_m_e_r_c_i_a_l _r_o_f_f _p_r_e_p_r_o_c_e_s_s_o_r_s_. _S_o_m_e _o_f _t_h_e_m _a_r_e_n_'_t _a_v_a_i_l_a_b_l_e _o_n _e_a_c_h _s_y_s_t_e_m_, _b_u_t _t_h_e_r_e _i_s _a _s_m_a_l_l _s_e_t _o_f _p_r_e_p_r_o_c_e_s_s_o_r_s _t_h_a_t _a_r_e _c_o_n_s_i_d_e_r_e_d _a_s _a_n _i_n_t_e_g_r_a_l _p_a_r_t _o_f _e_a_c_h _r_o_f_f _s_y_s_t_e_m_. _T_h_e _c_l_a_s_s_i_c_a_l _p_r_e_p_r_o_c_e_s_s_o_r_s _a_r_e _<_p_> _<_p_> _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _<_b_>_t_b_l_<_/_b_> _<_d_d_> _f_o_r _t_a_b_l_e_s _<_d_t_> _<_b_>_e_q_n_<_/_b_> _<_d_d_> _f_o_r _m_a_t_h_e_m_a_t_i_c_a_l _f_o_r_m_u_l_æ _<_d_t_> _<_b_>_p_i_c_<_/_b_> _<_d_d_> _f_o_r _d_r_a_w_i_n_g _d_i_a_g_r_a_m_s _<_d_t_> _<_b_>_r_e_f_e_r_<_/_b_> _<_d_d_> _f_o_r _b_i_b_l_i_o_g_r_a_p_h_i_c _r_e_f_e_r_e_n_c_e_s _<_d_t_> _<_b_>_s_o_e_l_i_m_<_/_b_> _<_d_d_> _f_o_r _i_n_c_l_u_d_i_n_g _m_a_c_r_o _f_i_l_e_s _f_r_o_m _s_t_a_n_d_a_r_d _l_o_c_a_t_i_o_n_s _<_/_d_l_> _<_p_> _O_t_h_e_r _k_n_o_w_n _p_r_e_p_r_o_c_e_s_s_o_r_s _t_h_a_t _a_r_e _n_o_t _a_v_a_i_l_a_b_l_e _o_n _a_l_l _s_y_s_t_e_m_s _i_n_c_l_u_d_e _<_p_> _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _<_b_>_c_h_e_m_<_/_b_> _<_d_d_> _f_o_r _d_r_a_w_i_n_g _c_h_e_m_i_c_a_l _f_o_r_m_u_l_æ_. _<_d_t_> _<_b_>_g_r_a_p_<_/_b_> _<_d_d_> _f_o_r _c_o_n_s_t_r_u_c_t_i_n_g _g_r_a_p_h_i_c_a_l _e_l_e_m_e_n_t_s_. _<_d_t_> _<_b_>_g_r_n_<_/_b_> _<_d_d_> _f_o_r _i_n_c_l_u_d_i_n_g _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_g_r_e_m_l_i_n_._h_t_m_l_"_>_g_r_e_m_l_i_n_(_1_)_<_/_a_> _p_i_c_t_u_r_e_s_. _<_/_d_l_> _<_h_4 _i_d_=_"_F_o_r_m_a_t_t_e_r _P_r_o_g_r_a_m_s_"_> _F_o_r_m_a_t_t_e_r _P_r_o_g_r_a_m_s _<_/_h_4_> _A _<_i_>_r_o_f_f _f_o_r_m_a_t_t_e_r_<_/_i_> _i_s _a _p_r_o_g_r_a_m _t_h_a_t _p_a_r_s_e_s _d_o_c_u_m_e_n_t_s _w_r_i_t_t_e_n _i_n _t_h_e _r_o_f_f _f_o_r_m_a_t_t_i_n_g _l_a_n_g_u_a_g_e _o_r _u_s_e_s _s_o_m_e _o_f _t_h_e _r_o_f_f _m_a_c_r_o _p_a_c_k_a_g_e_s_. _I_t _g_e_n_e_r_a_t_e_s _<_i_>_i_n_t_e_r_m_e_d_i_a_t_e _o_u_t_p_u_t_<_/_i_>_, _w_h_i_c_h _i_s _i_n_t_e_n_d_e_d _t_o _b_e _f_e_d _i_n_t_o _a _s_i_n_g_l_e _d_e_v_i_c_e _p_o_s_t_p_r_o_c_e_s_s_o_r _t_h_a_t _m_u_s_t _b_e _s_p_e_c_i_f_i_e_d _b_y _a _c_o_m_m_a_n_d_-_l_i_n_e _o_p_t_i_o_n _t_o _t_h_e _f_o_r_m_a_t_t_e_r _p_r_o_g_r_a_m_. _T_h_e _d_o_c_u_m_e_n_t_s _m_u_s_t _h_a_v_e _b_e_e_n _r_u_n _t_h_r_o_u_g_h _a_l_l _n_e_c_e_s_s_a_r_y _p_r_e_p_r_o_c_e_s_s_o_r_s _b_e_f_o_r_e_. _<_p_> _T_h_e _o_u_t_p_u_t _p_r_o_d_u_c_e_d _b_y _a _r_o_f_f _f_o_r_m_a_t_t_e_r _i_s _r_e_p_r_e_s_e_n_t_e_d _i_n _y_e_t _a_n_o_t_h_e_r _l_a_n_g_u_a_g_e_, _t_h_e _i_n_t_e_r_m_e_d_i_a_t_e _o_u_t_p_u_t _f_o_r_m_a_t _o_r _<_i_>_t_r_o_f_f _o_u_t_p_u_t_<_/_i_>_. _T_h_i_s _l_a_n_g_u_a_g_e _w_a_s _f_i_r_s_t _s_p_e_c_i_f_i_e_d _i_n _<_i_>_[_C_S_T_R _#_9_7_]_<_/_i_>_; _i_t_s _G_N_U _e_x_t_e_n_s_i_o_n _i_s _d_o_c_u_m_e_n_t_e_d _i_n _<_a _h_r_e_f_=_"_._._/_h_t_m_l_5_/_g_r_o_f_f___o_u_t_._h_t_m_l_"_>_g_r_o_f_f___o_u_t_(_5_)_<_/_a_> _T_h_e _i_n_t_e_r_m_e_d_i_a_t_e _o_u_t_p_u_t _l_a_n_g_u_a_g_e _i_s _a _k_i_n_d _o_f _a_s_s_e_m_b_l_y _l_a_n_g_u_a_g_e _c_o_m_p_a_r_e_d _t_o _t_h_e _h_i_g_h_-_l_e_v_e_l _r_o_f_f _l_a_n_g_u_a_g_e_. _T_h_e _g_e_n_e_r_a_t_e_d _i_n_t_e_r_m_e_d_i_a_t_e _o_u_t_p_u_t _i_s _o_p_t_i_m_i_z_e_d _f_o_r _a _s_p_e_c_i_a_l _d_e_v_i_c_e_, _b_u_t _t_h_e _l_a_n_g_u_a_g_e _i_s _t_h_e _s_a_m_e _f_o_r _e_v_e_r_y _d_e_v_i_c_e_. _<_p_> _T_h_e _r_o_f_f _f_o_r_m_a_t_t_e_r _i_s _t_h_e _h_e_a_r_t _o_f _t_h_e _r_o_f_f _s_y_s_t_e_m_. _T_h_e _t_r_a_d_i_t_i_o_n_a_l _r_o_f_f _h_a_d _t_w_o _f_o_r_m_a_t_t_e_r_s_, _<_b_>_n_r_o_f_f_<_/_b_> _f_o_r _t_e_x_t _d_e_v_i_c_e_s _a_n_d _<_b_>_t_r_o_f_f_<_/_b_> _f_o_r _g_r_a_p_h_i_c_a_l _d_e_v_i_c_e_s_. _<_p_> _O_f_t_e_n_, _t_h_e _n_a_m_e _<_i_>_t_r_o_f_f_<_/_i_> _i_s _u_s_e_d _a_s _a _g_e_n_e_r_a_l _t_e_r_m _t_o _r_e_f_e_r _t_o _b_o_t_h _f_o_r_m_a_t_t_e_r_s_. _<_h_4 _i_d_=_"_D_e_v_i_c_e_s _a_n_d _P_o_s_t_p_r_o_c_e_s_s_o_r_s_"_> _D_e_v_i_c_e_s _a_n_d _P_o_s_t_p_r_o_c_e_s_s_o_r_s _<_/_h_4_> _D_e_v_i_c_e_s _a_r_e _h_a_r_d_w_a_r_e _i_n_t_e_r_f_a_c_e_s _l_i_k_e _p_r_i_n_t_e_r_s_, _t_e_x_t _o_r _g_r_a_p_h_i_c_a_l _t_e_r_m_i_n_a_l_s_, _e_t_c_._, _o_r _s_o_f_t_w_a_r_e _i_n_t_e_r_f_a_c_e_s _s_u_c_h _a_s _a _c_o_n_v_e_r_s_i_o_n _i_n_t_o _a _d_i_f_f_e_r_e_n_t _t_e_x_t _o_r _g_r_a_p_h_i_c_a_l _f_o_r_m_a_t_. _<_p_> _A _r_o_f_f _p_o_s_t_p_r_o_c_e_s_s_o_r _i_s _a _p_r_o_g_r_a_m _t_h_a_t _t_r_a_n_s_f_o_r_m_s _t_r_o_f_f _o_u_t_p_u_t _i_n_t_o _a _f_o_r_m _s_u_i_t_a_b_l_e _f_o_r _a _s_p_e_c_i_a_l _d_e_v_i_c_e_. _T_h_e _r_o_f_f _p_o_s_t_p_r_o_c_e_s_s_o_r_s _a_r_e _l_i_k_e _d_e_v_i_c_e _d_r_i_v_e_r_s _f_o_r _t_h_e _o_u_t_p_u_t _t_a_r_g_e_t_. _<_p_> _F_o_r _e_a_c_h _d_e_v_i_c_e _t_h_e_r_e _i_s _a _p_o_s_t_p_r_o_c_e_s_s_o_r _p_r_o_g_r_a_m _t_h_a_t _f_i_t_s _t_h_e _d_e_v_i_c_e _o_p_t_i_m_a_l_l_y_. _T_h_e _p_o_s_t_p_r_o_c_e_s_s_o_r _p_a_r_s_e_s _t_h_e _g_e_n_e_r_a_t_e_d _i_n_t_e_r_m_e_d_i_a_t_e _o_u_t_p_u_t _a_n_d _g_e_n_e_r_a_t_e_s _d_e_v_i_c_e_-_s_p_e_c_i_f_i_c _c_o_d_e _t_h_a_t _i_s _s_e_n_t _d_i_r_e_c_t_l_y _t_o _t_h_e _d_e_v_i_c_e_. _<_p_> _T_h_e _n_a_m_e_s _o_f _t_h_e _d_e_v_i_c_e_s _a_n_d _t_h_e _p_o_s_t_p_r_o_c_e_s_s_o_r _p_r_o_g_r_a_m_s _a_r_e _n_o_t _f_i_x_e_d _b_e_c_a_u_s_e _t_h_e_y _g_r_e_a_t_l_y _d_e_p_e_n_d _o_n _t_h_e _s_o_f_t_w_a_r_e _a_n_d _h_a_r_d_w_a_r_e _a_b_i_l_i_t_i_e_s _o_f _t_h_e _a_c_t_u_a_l _c_o_m_p_u_t_e_r_. _F_o_r _e_x_a_m_p_l_e_, _t_h_e _c_l_a_s_s_i_c_a_l _d_e_v_i_c_e_s _m_e_n_t_i_o_n_e_d _i_n _<_i_>_[_C_S_T_R _#_5_4_]_<_/_i_> _h_a_v_e _g_r_e_a_t_l_y _c_h_a_n_g_e_d _s_i_n_c_e _t_h_e _c_l_a_s_s_i_c_a_l _t_i_m_e_s_. _T_h_e _o_l_d _h_a_r_d_w_a_r_e _d_o_e_s_n_'_t _e_x_i_s_t _a_n_y _l_o_n_g_e_r _a_n_d _t_h_e _o_l_d _g_r_a_p_h_i_c_a_l _c_o_n_v_e_r_s_i_o_n_s _w_e_r_e _q_u_i_t_e _i_m_p_r_e_c_i_s_e _w_h_e_n _c_o_m_p_a_r_e_d _t_o _t_h_e_i_r _m_o_d_e_r_n _c_o_u_n_t_e_r_p_a_r_t_s_. _<_p_> _F_o_r _e_x_a_m_p_l_e_, _t_h_e _P_o_s_t_s_c_r_i_p_t _d_e_v_i_c_e _<_i_>_p_o_s_t_<_/_i_> _i_n _c_l_a_s_s_i_c_a_l _t_r_o_f_f _h_a_d _a _r_e_s_o_l_u_t_i_o_n _o_f _7_2_0_, _w_h_i_l_e _g_r_o_f_f_'_s _<_i_>_p_s_<_/_i_> _d_e_v_i_c_e _h_a_s _7_2_0_0_0_, _a _r_e_f_i_n_e_m_e_n_t _o_f _f_a_c_t_o_r _1_0_0_. _<_p_> _T_o_d_a_y _t_h_e _o_p_e_r_a_t_i_n_g _s_y_s_t_e_m_s _p_r_o_v_i_d_e _d_e_v_i_c_e _d_r_i_v_e_r_s _f_o_r _m_o_s_t _p_r_i_n_t_e_r_-_l_i_k_e _h_a_r_d_w_a_r_e_, _s_o _i_t _i_s_n_'_t _n_e_c_e_s_s_a_r_y _t_o _w_r_i_t_e _a _s_p_e_c_i_a_l _h_a_r_d_w_a_r_e _p_o_s_t_p_r_o_c_e_s_s_o_r _f_o_r _e_a_c_h _p_r_i_n_t_e_r_. _<_h_3 _i_d_=_"_R_O_F_F _P_R_O_G_R_A_M_M_I_N_G_"_> _R_O_F_F _P_R_O_G_R_A_M_M_I_N_G _<_/_h_3_> _D_o_c_u_m_e_n_t_s _u_s_i_n_g _r_o_f_f _a_r_e _n_o_r_m_a_l _t_e_x_t _f_i_l_e_s _d_e_c_o_r_a_t_e_d _b_y _r_o_f_f _f_o_r_m_a_t_t_i_n_g _e_l_e_m_e_n_t_s_. _T_h_e _r_o_f_f _f_o_r_m_a_t_t_i_n_g _l_a_n_g_u_a_g_e _i_s _q_u_i_t_e _p_o_w_e_r_f_u_l_; _i_t _i_s _a_l_m_o_s_t _a _f_u_l_l _p_r_o_g_r_a_m_m_i_n_g _l_a_n_g_u_a_g_e _a_n_d _p_r_o_v_i_d_e_s _e_l_e_m_e_n_t_s _t_o _e_n_l_a_r_g_e _t_h_e _l_a_n_g_u_a_g_e_. _W_i_t_h _t_h_e_s_e_, _i_t _b_e_c_a_m_e _p_o_s_s_i_b_l_e _t_o _d_e_v_e_l_o_p _m_a_c_r_o _p_a_c_k_a_g_e_s _t_h_a_t _a_r_e _t_a_i_l_o_r_e_d _f_o_r _s_p_e_c_i_a_l _a_p_p_l_i_c_a_t_i_o_n_s_. _S_u_c_h _m_a_c_r_o _p_a_c_k_a_g_e_s _a_r_e _m_u_c_h _h_a_n_d_i_e_r _t_h_a_n _p_l_a_i_n _r_o_f_f_. _S_o _m_o_s_t _p_e_o_p_l_e _w_i_l_l _c_h_o_o_s_e _a _m_a_c_r_o _p_a_c_k_a_g_e _w_i_t_h_o_u_t _w_o_r_r_y_i_n_g _a_b_o_u_t _t_h_e _i_n_t_e_r_n_a_l_s _o_f _t_h_e _r_o_f_f _l_a_n_g_u_a_g_e_. _<_h_4 _i_d_=_"_M_a_c_r_o _P_a_c_k_a_g_e_s_"_> _M_a_c_r_o _P_a_c_k_a_g_e_s _<_/_h_4_> _M_a_c_r_o _p_a_c_k_a_g_e_s _a_r_e _c_o_l_l_e_c_t_i_o_n_s _o_f _m_a_c_r_o_s _t_h_a_t _a_r_e _s_u_i_t_a_b_l_e _t_o _f_o_r_m_a_t _a _s_p_e_c_i_a_l _k_i_n_d _o_f _d_o_c_u_m_e_n_t_s _i_n _a _c_o_n_v_e_n_i_e_n_t _w_a_y_. _T_h_i_s _g_r_e_a_t_l_y _e_a_s_e_s _t_h_e _u_s_a_g_e _o_f _r_o_f_f_. _T_h_e _m_a_c_r_o _d_e_f_i_n_i_t_i_o_n_s _o_f _a _p_a_c_k_a_g_e _a_r_e _k_e_p_t _i_n _a _f_i_l_e _c_a_l_l_e_d _<_i_>_n_a_m_e_<_/_i_>_<_b_>_._t_m_a_c_<_/_b_> _(_c_l_a_s_s_i_c_a_l_l_y _<_b_>_t_m_a_c_._<_/_b_>_<_i_>_n_a_m_e_)_. _A_l_l _t_m_a_c _f_i_l_e_s _a_r_e _s_t_o_r_e_d _i_n _o_n_e _o_r _m_o_r_e _d_i_r_e_c_t_o_r_i_e_s _a_t _s_t_a_n_d_a_r_d_i_z_e_d _p_o_s_i_t_i_o_n_s_. _D_e_t_a_i_l_s _o_n _t_h_e _n_a_m_i_n_g _o_f _m_a_c_r_o _p_a_c_k_a_g_e_s _a_n_d _t_h_e_i_r _p_l_a_c_e_m_e_n_t _i_s _f_o_u_n_d _i_n _<_a _h_r_e_f_=_"_._._/_h_t_m_l_5_/_g_r_o_f_f___t_m_a_c_._h_t_m_l_"_>_g_r_o_f_f___t_m_a_c_(_5_)_<_/_a_> _<_p_> _A _m_a_c_r_o _p_a_c_k_a_g_e _t_h_a_t _i_s _t_o _b_e _u_s_e_d _i_n _a _d_o_c_u_m_e_n_t _c_a_n _b_e _a_n_n_o_u_n_c_e_d _t_o _t_h_e _f_o_r_m_a_t_t_e_r _b_y _t_h_e _c_o_m_m_a_n_d _l_i_n_e _o_p_t_i_o_n --mm_, _s_e_e _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_t_r_o_f_f_._h_t_m_l_"_>_t_r_o_f_f_(_1_)_<_/_a_> _o_r _i_t _c_a_n _b_e _s_p_e_c_i_f_i_e_d _w_i_t_h_i_n _a _d_o_c_u_m_e_n_t _u_s_i_n_g _t_h_e _f_i_l_e _i_n_c_l_u_s_i_o_n _r_e_q_u_e_s_t_s _o_f _t_h_e _r_o_f_f _l_a_n_g_u_a_g_e_, _s_e_e _<_a _h_r_e_f_=_"_._._/_h_t_m_l_7_/_g_r_o_f_f_._h_t_m_l_"_>_g_r_o_f_f_(_7_)_<_/_a_> _<_p_> _F_a_m_o_u_s _c_l_a_s_s_i_c_a_l _m_a_c_r_o _p_a_c_k_a_g_e_s _a_r_e _<_i_>_m_a_n_<_/_i_> _f_o_r _t_r_a_d_i_t_i_o_n_a_l _m_a_n _p_a_g_e_s_, _<_i_>_m_d_o_c_<_/_i_> _f_o_r _B_S_D_-_s_t_y_l_e _m_a_n_u_a_l _p_a_g_e_s_; _t_h_e _m_a_c_r_o _s_e_t_s _f_o_r _b_o_o_k_s_, _a_r_t_i_c_l_e_s_, _a_n_d _l_e_t_t_e_r_s _a_r_e _<_i_>_m_e_<_/_i_> _(_p_r_o_b_a_b_l_y _f_r_o_m _t_h_e _f_i_r_s_t _n_a_m_e _o_f _i_t_s _c_r_e_a_t_o_r _<_i_>_E_r_i_c_<_/_i_> _A_l_l_m_a_n_)_, _<_i_>_m_s_<_/_i_> _(_f_r_o_m _<_i_>_M_a_n_u_s_c_r_i_p_t _M_a_c_r_o_s_<_/_i_>_)_, _a_n_d _<_i_>_m_m_<_/_i_> _(_f_r_o_m _<_i_>_M_e_m_o_r_a_n_d_u_m _M_a_c_r_o_s_<_/_i_>_)_. _<_h_4 _i_d_=_"_T_h_e _r_o_f_f _F_o_r_m_a_t_t_i_n_g _L_a_n_g_u_a_g_e_"_> _T_h_e _r_o_f_f _F_o_r_m_a_t_t_i_n_g _L_a_n_g_u_a_g_e _<_/_h_4_> _T_h_e _c_l_a_s_s_i_c_a_l _r_o_f_f _f_o_r_m_a_t_t_i_n_g _l_a_n_g_u_a_g_e _i_s _d_o_c_u_m_e_n_t_e_d _i_n _t_h_e _<_i_>_T_r_o_f_f _U_s_e_r_'_s _M_a_n_u_a_l_<_/_i_> _<_i_>_[_C_S_T_R _#_5_4_]_<_/_i_>_. _T_h_e _r_o_f_f _l_a_n_g_u_a_g_e _i_s _a _f_u_l_l _p_r_o_g_r_a_m_m_i_n_g _l_a_n_g_u_a_g_e _p_r_o_v_i_d_i_n_g _r_e_q_u_e_s_t_s_, _d_e_f_i_n_i_t_i_o_n _o_f _m_a_c_r_o_s_, _e_s_c_a_p_e _s_e_q_u_e_n_c_e_s_, _s_t_r_i_n_g _v_a_r_i_a_b_l_e_s_, _n_u_m_b_e_r _o_r _s_i_z_e _r_e_g_i_s_t_e_r_s_, _a_n_d _f_l_o_w _c_o_n_t_r_o_l_s_. _<_p_> _<_i_>_R_e_q_u_e_s_t_s_<_/_i_> _a_r_e _t_h_e _p_r_e_d_e_f_i_n_e_d _b_a_s_i_c _f_o_r_m_a_t_t_i_n_g _c_o_m_m_a_n_d_s _s_i_m_i_l_a_r _t_o _t_h_e _c_o_m_m_a_n_d_s _a_t _t_h_e _s_h_e_l_l _p_r_o_m_p_t_. _T_h_e _u_s_e_r _c_a_n _d_e_f_i_n_e _r_e_q_u_e_s_t_-_l_i_k_e _e_l_e_m_e_n_t_s _u_s_i_n_g _p_r_e_d_e_f_i_n_e_d _r_o_f_f _e_l_e_m_e_n_t_s_. _T_h_e_s_e _a_r_e _t_h_e_n _c_a_l_l_e_d _<_i_>_m_a_c_r_o_s_<_/_i_>_. _A _d_o_c_u_m_e_n_t _w_r_i_t_e_r _w_i_l_l _n_o_t _n_o_t_e _a_n_y _d_i_f_f_e_r_e_n_c_e _i_n _u_s_a_g_e _f_o_r _r_e_q_u_e_s_t_s _o_r _m_a_c_r_o_s_; _b_o_t_h _a_r_e _w_r_i_t_t_e_n _o_n _a _l_i_n_e _o_n _t_h_e_i_r _o_w_n _s_t_a_r_t_i_n_g _w_i_t_h _a _d_o_t_. _<_p_> _<_i_>_E_s_c_a_p_e _s_e_q_u_e_n_c_e_s_<_/_i_> _a_r_e _r_o_f_f _e_l_e_m_e_n_t_s _s_t_a_r_t_i_n_g _w_i_t_h _a _b_a_c_k_s_l_a_s_h _`\\_'_. _T_h_e_y _c_a_n _b_e _i_n_s_e_r_t_e_d _a_n_y_w_h_e_r_e_, _a_l_s_o _i_n _t_h_e _m_i_d_s_t _o_f _t_e_x_t _i_n _a _l_i_n_e_. _T_h_e_y _a_r_e _u_s_e_d _t_o _i_m_p_l_e_m_e_n_t _v_a_r_i_o_u_s _f_e_a_t_u_r_e_s_, _i_n_c_l_u_d_i_n_g _t_h_e _i_n_s_e_r_t_i_o_n _o_f _n_o_n_-_A_S_C_I_I _c_h_a_r_a_c_t_e_r_s _w_i_t_h \\((_, _f_o_n_t _c_h_a_n_g_e_s _w_i_t_h \\ff_, _i_n_-_l_i_n_e _c_o_m_m_e_n_t_s _w_i_t_h \\""_, _t_h_e _e_s_c_a_p_i_n_g _o_f _s_p_e_c_i_a_l _c_o_n_t_r_o_l _c_h_a_r_a_c_t_e_r_s _l_i_k_e \\\\_, _a_n_d _m_a_n_y _o_t_h_e_r _f_e_a_t_u_r_e_s_. _<_p_> _<_i_>_S_t_r_i_n_g_s_<_/_i_> _a_r_e _v_a_r_i_a_b_l_e_s _t_h_a_t _c_a_n _s_t_o_r_e _a _s_t_r_i_n_g_. _A _s_t_r_i_n_g _i_s _s_t_o_r_e_d _b_y _t_h_e _<_b_>_._d_s_<_/_b_> _r_e_q_u_e_s_t_. _T_h_e _s_t_o_r_e_d _s_t_r_i_n_g _c_a_n _b_e _r_e_t_r_i_e_v_e_d _l_a_t_e_r _b_y _t_h_e _<_b_>_\_*_<_/_b_> _e_s_c_a_p_e _s_e_q_u_e_n_c_e_. _<_p_> _<_i_>_R_e_g_i_s_t_e_r_s_<_/_i_> _s_t_o_r_e _n_u_m_b_e_r_s _a_n_d _s_i_z_e_s_. _A _r_e_g_i_s_t_e_r _c_a_n _b_e _s_e_t _w_i_t_h _t_h_e _r_e_q_u_e_s_t _<_b_>_._n_r_<_/_b_> _a_n_d _i_t_s _v_a_l_u_e _c_a_n _b_e _r_e_t_r_i_e_v_e_d _b_y _t_h_e _e_s_c_a_p_e _s_e_q_u_e_n_c_e _<_b_>_\_n_<_/_b_>_. _<_h_3 _i_d_=_"_F_I_L_E _N_A_M_E _E_X_T_E_N_S_I_O_N_S_"_> _F_I_L_E _N_A_M_E _E_X_T_E_N_S_I_O_N_S _<_/_h_3_> _M_a_n_u_a_l _p_a_g_e_s _(_m_a_n _p_a_g_e_s_) _t_a_k_e _t_h_e _s_e_c_t_i_o_n _n_u_m_b_e_r _a_s _a _f_i_l_e _n_a_m_e _e_x_t_e_n_s_i_o_n_, _e_._g_._, _t_h_e _f_i_l_e_n_a_m_e _f_o_r _t_h_i_s _d_o_c_u_m_e_n_t _i_s _<_i_>_r_o_f_f_._7_<_/_i_>_, _i_._e_._, _i_t _i_s _k_e_p_t _i_n _s_e_c_t_i_o_n _7 _o_f _t_h_e _m_a_n _p_a_g_e_s_. _<_p_> _T_h_e _c_l_a_s_s_i_c_a_l _m_a_c_r_o _p_a_c_k_a_g_e_s _t_a_k_e _t_h_e _p_a_c_k_a_g_e _n_a_m_e _a_s _a_n _e_x_t_e_n_s_i_o_n_, _e_._g_. _<_i_>_f_i_l_e_._<_/_i_>_<_b_>_m_e_<_/_b_> _f_o_r _a _d_o_c_u_m_e_n_t _u_s_i_n_g _t_h_e _<_i_>_m_e_<_/_i_> _m_a_c_r_o _p_a_c_k_a_g_e_, _<_i_>_f_i_l_e_._<_/_i_>_<_b_>_m_m_<_/_b_> _f_o_r _<_i_>_m_m_<_/_i_>_, _<_i_>_f_i_l_e_._<_/_i_>_<_b_>_m_s_<_/_b_> _f_o_r _<_i_>_m_s_<_/_i_>_, _<_i_>_f_i_l_e_._<_/_i_>_<_b_>_p_i_c_<_/_b_> _f_o_r _<_i_>_p_i_c_<_/_i_> _f_i_l_e_s_, _e_t_c_. _<_p_> _B_u_t _t_h_e_r_e _i_s _n_o _g_e_n_e_r_a_l _n_a_m_i_n_g _s_c_h_e_m_e _f_o_r _r_o_f_f _d_o_c_u_m_e_n_t_s_, _t_h_o_u_g_h _<_i_>_f_i_l_e_._<_/_i_>_<_b_>_t_r_<_/_b_> _f_o_r _<_i_>_t_r_o_f_f _f_i_l_e_<_/_i_> _i_s _s_e_e_n _n_o_w _a_n_d _t_h_e_n_. _M_a_y_b_e _t_h_e_r_e _s_h_o_u_l_d _b_e _a _s_t_a_n_d_a_r_d_i_z_a_t_i_o_n _f_o_r _t_h_e _f_i_l_e_n_a_m_e _e_x_t_e_n_s_i_o_n_s _o_f _r_o_f_f _f_i_l_e_s_. _<_p_> _F_i_l_e _n_a_m_e _e_x_t_e_n_s_i_o_n_s _c_a_n _b_e _v_e_r_y _h_a_n_d_y _i_n _c_o_n_j_u_n_c_t_i_o_n _w_i_t_h _t_h_e _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_l_e_s_s_._h_t_m_l_"_>_l_e_s_s_(_1_)_<_/_a_> _p_a_g_e_r_. _I_t _p_r_o_v_i_d_e_s _t_h_e _p_o_s_s_i_b_i_l_i_t_y _t_o _f_e_e_d _a_l_l _i_n_p_u_t _i_n_t_o _a _c_o_m_m_a_n_d_-_l_i_n_e _p_i_p_e _t_h_a_t _i_s _s_p_e_c_i_f_i_e_d _i_n _t_h_e _s_h_e_l_l _e_n_v_i_r_o_n_m_e_n_t _v_a_r_i_a_b_l_e _<_b_>_L_E_S_S_O_P_E_N_<_/_b_>_. _T_h_i_s _p_r_o_c_e_s_s _i_s _n_o_t _w_e_l_l _d_o_c_u_m_e_n_t_e_d_, _s_o _h_e_r_e _a_n _e_x_a_m_p_l_e_: _<_b_r_>_<_b_r_> _<_b_r_> _s_h_# LESSOPEN='|lesspipe %s' _<_b_r_>_<_b_r_> _w_h_e_r_e _<_b_>_l_e_s_s_p_i_p_e_<_/_b_> _i_s _e_i_t_h_e_r _a _s_y_s_t_e_m _s_u_p_p_l_i_e_d _c_o_m_m_a_n_d _o_r _a _s_h_e_l_l _s_c_r_i_p_t _o_f _y_o_u_r _o_w_n_. _<_h_3 _i_d_=_"_E_D_I_T_I_N_G _R_O_F_F_"_> _E_D_I_T_I_N_G _R_O_F_F _<_/_h_3_> _T_h_e _b_e_s_t _p_r_o_g_r_a_m _f_o_r _e_d_i_t_i_n_g _a _r_o_f_f _d_o_c_u_m_e_n_t _i_s _E_m_a_c_s _(_o_r _X_e_m_a_c_s_)_, _s_e_e _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_e_m_a_c_s_._h_t_m_l_"_>_e_m_a_c_s_(_1_)_<_/_a_> _I_t _p_r_o_v_i_d_e_s _a_n _<_i_>_n_r_o_f_f_<_/_i_> _m_o_d_e _t_h_a_t _i_s _s_u_i_t_a_b_l_e _f_o_r _a_l_l _k_i_n_d_s _o_f _r_o_f_f _d_i_a_l_e_c_t_s_. _T_h_i_s _m_o_d_e _c_a_n _b_e _a_c_t_i_v_a_t_e_d _b_y _t_h_e _f_o_l_l_o_w_i_n_g _m_e_t_h_o_d_s_. _<_p_> _W_h_e_n _e_d_i_t_i_n_g _a _f_i_l_e _w_i_t_h_i_n _E_m_a_c_s _t_h_e _m_o_d_e _c_a_n _b_e _c_h_a_n_g_e_d _b_y _t_y_p_i_n_g _w_h_e_r_e _<_b_>_M_-_x_<_/_b_> _m_e_a_n_s _t_o _h_o_l_d _d_o_w_n _t_h_e _<_b_>_M_e_t_a_<_/_b_> _k_e_y _(_o_r _<_b_>_A_l_t_<_/_b_>_) _a_n_d _h_i_t_t_i_n_g _t_h_e _<_b_>_x _<_/_b_>_k_e_y _a_t _t_h_e _s_a_m_e _t_i_m_e_. _<_p_> _B_u_t _i_t _i_s _a_l_s_o _p_o_s_s_i_b_l_e _t_o _h_a_v_e _t_h_e _m_o_d_e _a_u_t_o_m_a_t_i_c_a_l_l_y _s_e_l_e_c_t_e_d _w_h_e_n _t_h_e _f_i_l_e _i_s _l_o_a_d_e_d _i_n_t_o _t_h_e _e_d_i_t_o_r_. _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _· _<_d_d_> _T_h_e _m_o_s_t _g_e_n_e_r_a_l _m_e_t_h_o_d _i_s _t_o _i_n_c_l_u_d_e _t_h_e _f_o_l_l_o_w_i_n_g _3 _c_o_m_m_e_n_t _l_i_n_e_s _a_t _t_h_e _e_n_d _o_f _t_h_e _f_i_l_e_. _<_b_r_>_<_b_r_> _<_b_r_> _<_p_r_e_> _<_b_>_._\_" _L_o_c_a_l _V_a_r_i_a_b_l_e_s_:_<_/_b_> _<_b_>_._\_" _m_o_d_e_: _n_r_o_f_f_<_/_b_> _<_b_>_._\_" _E_n_d_:_<_/_b_> _<_/_p_r_e_> _<_d_t_> _· _<_d_d_> _T_h_e_r_e _i_s _a _s_e_t _o_f _f_i_l_e _n_a_m_e _e_x_t_e_n_s_i_o_n_s_, _e_._g_. _t_h_e _m_a_n _p_a_g_e_s _t_h_a_t _t_r_i_g_g_e_r _t_h_e _a_u_t_o_m_a_t_i_c _a_c_t_i_v_a_t_i_o_n _o_f _t_h_e _n_r_o_f_f _m_o_d_e_. _<_d_t_> _· _<_d_d_> _T_h_e_o_r_e_t_i_c_a_l_l_y_, _i_t _i_s _p_o_s_s_i_b_l_e _t_o _w_r_i_t_e _t_h_e _s_e_q_u_e_n_c_e _<_b_r_>_<_b_r_> _<_b_>_._\_" _-_*_- _n_r_o_f_f _-_*_-_<_/_b_> _<_b_r_>_<_b_r_> _a_s _t_h_e _f_i_r_s_t _l_i_n_e _o_f _a _f_i_l_e _t_o _h_a_v_e _i_t _s_t_a_r_t_e_d _i_n _n_r_o_f_f _m_o_d_e _w_h_e_n _l_o_a_d_e_d_. _U_n_f_o_r_t_u_n_a_t_e_l_y_, _s_o_m_e _a_p_p_l_i_c_a_t_i_o_n_s _s_u_c_h _a_s _t_h_e _<_b_>_m_a_n_<_/_b_> _p_r_o_g_r_a_m _a_r_e _c_o_n_f_u_s_e_d _b_y _t_h_i_s_; _s_o _t_h_i_s _i_s _d_e_p_r_e_c_a_t_e_d_. _<_/_d_l_> _<_p_> _A_l_l _r_o_f_f _f_o_r_m_a_t_t_e_r_s _p_r_o_v_i_d_e _a_u_t_o_m_a_t_e_d _l_i_n_e _b_r_e_a_k_s _a_n_d _h_o_r_i_z_o_n_t_a_l _a_n_d _v_e_r_t_i_c_a_l _s_p_a_c_i_n_g_. _I_n _o_r_d_e_r _t_o _n_o_t _d_i_s_t_u_r_b _t_h_i_s_, _t_h_e _f_o_l_l_o_w_i_n_g _t_i_p_s _c_a_n _b_e _h_e_l_p_f_u_l_. _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _· _<_d_d_> _N_e_v_e_r _i_n_c_l_u_d_e _e_m_p_t_y _o_r _b_l_a_n_k _l_i_n_e_s _i_n _a _r_o_f_f _d_o_c_u_m_e_n_t_. _I_n_s_t_e_a_d_, _u_s_e _t_h_e _e_m_p_t_y _r_e_q_u_e_s_t _(_a _l_i_n_e _c_o_n_s_i_s_t_i_n_g _o_f _a _d_o_t _o_n_l_y_) _o_r _a _l_i_n_e _c_o_m_m_e_n_t _<_b_>_._\_"_<_/_b_> _i_f _a _s_t_r_u_c_t_u_r_i_n_g _e_l_e_m_e_n_t _i_s _n_e_e_d_e_d_. _<_d_t_> _· _<_d_d_> _N_e_v_e_r _s_t_a_r_t _a _l_i_n_e _w_i_t_h _w_h_i_t_e_s_p_a_c_e _b_e_c_a_u_s_e _t_h_i_s _c_a_n _l_e_a_d _t_o _u_n_e_x_p_e_c_t_e_d _b_e_h_a_v_i_o_r_. _I_n_d_e_n_t_e_d _p_a_r_a_g_r_a_p_h_s _c_a_n _b_e _c_o_n_s_t_r_u_c_t_e_d _i_n _a _c_o_n_t_r_o_l_l_e_d _w_a_y _b_y _r_o_f_f _r_e_q_u_e_s_t_s_. _<_d_t_> _· _<_d_d_> _S_t_a_r_t _e_a_c_h _s_e_n_t_e_n_c_e _o_n _a _l_i_n_e _o_f _i_t_s _o_w_n_, _f_o_r _t_h_e _s_p_a_c_i_n_g _a_f_t_e_r _a _d_o_t _i_s _h_a_n_d_l_e_d _d_i_f_f_e_r_e_n_t_l_y _d_e_p_e_n_d_i_n_g _o_n _w_h_e_t_h_e_r _i_t _t_e_r_m_i_n_a_t_e_s _a_n _a_b_b_r_e_v_i_a_t_i_o_n _o_r _a _s_e_n_t_e_n_c_e_. _T_o _d_i_s_t_i_n_g_u_i_s_h _b_o_t_h _c_a_s_e_s_, _d_o _a _l_i_n_e _b_r_e_a_k _a_f_t_e_r _e_a_c_h _s_e_n_t_e_n_c_e_. _<_d_t_> _· _<_d_d_> _T_o _a_d_d_i_t_i_o_n_a_l_l_y _u_s_e _t_h_e _a_u_t_o_-_f_i_l_l _m_o_d_e _i_n _E_m_a_c_s_, _i_t _i_s _b_e_s_t _t_o _i_n_s_e_r_t _a_n _e_m_p_t_y _r_o_f_f _r_e_q_u_e_s_t _(_a _l_i_n_e _c_o_n_s_i_s_t_i_n_g _o_f _a _d_o_t _o_n_l_y_) _a_f_t_e_r _e_a_c_h _s_e_n_t_e_n_c_e_. _<_/_d_l_> _<_p_> _T_h_e _f_o_l_l_o_w_i_n_g _e_x_a_m_p_l_e _s_h_o_w_s _h_o_w _o_p_t_i_m_a_l _r_o_f_f _e_d_i_t_i_n_g _c_o_u_l_d _l_o_o_k_. _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _<_b_>_<_/_b_> _<_b_r_> _<_d_d_> _<_p_r_e_> _T_h_i_s _i_s _a_n _e_x_a_m_p_l_e _f_o_r _a _r_o_f_f _d_o_c_u_m_e_n_t_. _. _T_h_i_s _i_s _t_h_e _n_e_x_t _s_e_n_t_e_n_c_e _i_n _t_h_e _s_a_m_e _p_a_r_a_g_r_a_p_h_. _. _T_h_i_s _i_s _a _l_o_n_g_e_r _s_e_n_t_e_n_c_e _s_t_r_e_t_c_h_i_n_g _o_v_e_r _s_e_v_e_r_a_l _l_i_n_e_s_; _a_b_b_r_e_v_i_a_t_i_o_n_s _l_i_k_e _`_c_f_._' _a_r_e _e_a_s_i_l_y _i_d_e_n_t_i_f_i_e_d _b_e_c_a_u_s_e _t_h_e _d_o_t _i_s _n_o_t _f_o_l_l_o_w_e_d _b_y _a _l_i_n_e _b_r_e_a_k_. _. _I_n _t_h_e _o_u_t_p_u_t_, _t_h_i_s _w_i_l_l _s_t_i_l_l _g_o _t_o _t_h_e _s_a_m_e _p_a_r_a_g_r_a_p_h_. _<_/_p_r_e_> _<_/_d_l_> _<_p_> _B_e_s_i_d_e_s _E_m_a_c_s_, _s_o_m_e _o_t_h_e_r _e_d_i_t_o_r_s _p_r_o_v_i_d_e _n_r_o_f_f _s_t_y_l_e _f_i_l_e_s _t_o_o_, _e_._g_. _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_v_i_m_._h_t_m_l_"_>_v_i_m_(_1_)_<_/_a_> _a_n _e_x_t_e_n_s_i_o_n _o_f _t_h_e _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_v_i_._h_t_m_l_"_>_v_i_(_1_)_<_/_a_> _p_r_o_g_r_a_m_. _<_h_3 _i_d_=_"_B_U_G_S_"_> _B_U_G_S _<_/_h_3_> _<_i_>_U_N_I_X_®_<_/_i_> _i_s _a _r_e_g_i_s_t_e_r_e_d _t_r_a_d_e_m_a_r_k _o_f _t_h_e _O_p_e_n _G_r_o_u_p_. _B_u_t _t_h_i_n_g_s _h_a_v_e _i_m_p_r_o_v_e_d _c_o_n_s_i_d_e_r_a_b_l_y _a_f_t_e_r _C_a_l_d_e_r_a _h_a_d _b_o_u_g_h_t _S_C_O _U_N_I_X _i_n _2_0_0_1_. _<_h_3 _i_d_=_"_S_E_E _A_L_S_O_"_> _S_E_E _A_L_S_O _<_/_h_3_> _T_h_e_r_e _i_s _a _l_o_t _o_f _d_o_c_u_m_e_n_t_a_t_i_o_n _o_n _r_o_f_f_. _T_h_e _o_r_i_g_i_n_a_l _p_a_p_e_r_s _o_n _c_l_a_s_s_i_c_a_l _t_r_o_f_f _a_r_e _s_t_i_l_l _a_v_a_i_l_a_b_l_e_, _a_n_d _a_l_l _a_s_p_e_c_t_s _o_f _g_r_o_f_f _a_r_e _d_o_c_u_m_e_n_t_e_d _i_n _g_r_e_a_t _d_e_t_a_i_l_. _<_h_4 _i_d_=_"_I_n_t_e_r_n_e_t _s_i_t_e_s_"_> _I_n_t_e_r_n_e_t _s_i_t_e_s _<_/_h_4_> _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _t_r_o_f_f_._o_r_g _<_d_d_> _T_h_e _h_i_s_t_o_r_i_c_a_l _t_r_o_f_f _s_i_t_e _<_h_t_t_p_:_/_/_w_w_w_._t_r_o_f_f_._o_r_g_> _p_r_o_v_i_d_e_s _a_n _o_v_e_r_v_i_e_w _a_n_d _p_o_i_n_t_e_r_s _t_o _a_l_l _h_i_s_t_o_r_i_c_a_l _a_s_p_e_c_t_s _o_f _r_o_f_f_. _<_d_t_> _M_u_l_t_i_c_s _<_d_d_> _T_h_e _M_u_l_t_i_c_s _s_i_t_e _<_h_t_t_p_:_/_/_w_w_w_._m_u_l_t_i_c_i_a_n_s_._o_r_g_> _c_o_n_t_a_i_n_s _a _l_o_t _o_f _i_n_f_o_r_m_a_t_i_o_n _o_n _t_h_e _M_I_T _p_r_o_j_e_c_t_s_, _C_T_S_S_, _M_u_l_t_i_c_s_, _e_a_r_l_y _U_n_i_x_, _i_n_c_l_u_d_i_n_g _<_i_>_r_u_n_o_f_f_<_/_i_>_; _e_s_p_e_c_i_a_l_l_y _u_s_e_f_u_l _a_r_e _a _g_l_o_s_s_a_r_y _a_n_d _t_h_e _m_a_n_y _l_i_n_k_s _t_o _a_n_c_i_e_n_t _d_o_c_u_m_e_n_t_s_. _<_d_t_> _U_n_i_x _A_r_c_h_i_v_e _<_d_d_> _T_h_e _A_n_c_i_e_n_t _U_n_i_x_e_s _A_r_c_h_i_v_e _<_h_t_t_p_:_/_/_w_w_w_._t_u_h_s_._o_r_g_/_A_r_c_h_i_v_e_/_> _p_r_o_v_i_d_e_s _t_h_e _s_o_u_r_c_e _c_o_d_e _a_n_d _s_o_m_e _b_i_n_a_r_i_e_s _o_f _t_h_e _a_n_c_i_e_n_t _U_n_i_x_e_s _(_i_n_c_l_u_d_i_n_g _t_h_e _s_o_u_r_c_e _c_o_d_e _o_f _t_r_o_f_f _a_n_d _i_t_s _d_o_c_u_m_e_n_t_a_t_i_o_n_) _t_h_a_t _w_e_r_e _m_a_d_e _p_u_b_l_i_c _b_y _C_a_l_d_e_r_a _s_i_n_c_e _2_0_0_1_, _e_._g_. _o_f _t_h_e _f_a_m_o_u_s _U_n_i_x _v_e_r_s_i_o_n _7 _f_o_r _P_D_P_-_1_1 _a_t _t_h_e _U_n_i_x _V_7 _s_i_t_e _<_h_t_t_p_:_/_/_w_w_w_._t_u_h_s_._o_r_g_/_A_r_c_h_i_v_e_/_P_D_P_-_1_1_/_T_r_e_e_s_/_V_7_>_. _<_d_t_> _D_e_v_e_l_o_p_e_r_s _a_t _A_T_&_T _B_e_l_l _L_a_b_s _<_d_d_> _B_e_l_l _L_a_b_s _C_o_m_p_u_t_i_n_g _a_n_d _M_a_t_h_e_m_a_t_i_c_a_l _S_c_i_e_n_c_e_s _R_e_s_e_a_r_c_h _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_i_n_d_e_x_._h_t_m_l_> _p_r_o_v_i_d_e_s _a _s_e_a_r_c_h _f_a_c_i_l_i_t_y _f_o_r _t_r_a_c_k_i_n_g _i_n_f_o_r_m_a_t_i_o_n _o_n _t_h_e _e_a_r_l_y _d_e_v_e_l_o_p_e_r_s_. _<_d_t_> _P_l_a_n _9 _<_d_d_> _T_h_e _P_l_a_n _9 _o_p_e_r_a_t_i_n_g _s_y_s_t_e_m _<_h_t_t_p_:_/_/_p_l_a_n_9_._b_e_l_l_-_l_a_b_s_._c_o_m_> _b_y _A_T_&_T _B_e_l_l _L_a_b_s_. _<_d_t_> _r_u_n_o_f_f _<_d_d_> _J_e_r_r_y _S_a_l_t_z_e_r_'_s _h_o_m_e _p_a_g_e _<_h_t_t_p_:_/_/_w_e_b_._m_i_t_._e_d_u_/_S_a_l_t_z_e_r_/_w_w_w_/_p_u_b_l_i_c_a_t_i_o_n_s_/_p_u_b_s_._h_t_m_l_> _s_t_o_r_e_s _s_o_m_e _d_o_c_u_m_e_n_t_s _u_s_i_n_g _t_h_e _a_n_c_i_e_n_t _r_u_n_o_f_f _f_o_r_m_a_t_t_i_n_g _l_a_n_g_u_a_g_e_. _<_d_t_> _C_S_T_R _P_a_p_e_r_s _<_d_d_> _T_h_e _B_e_l_l _L_a_b_s _C_S_T_R _s_i_t_e _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_c_s_/_c_s_t_r_._h_t_m_l_> _s_t_o_r_e_s _t_h_e _o_r_i_g_i_n_a_l _t_r_o_f_f _m_a_n_u_a_l_s _(_C_S_T_R _#_5_4_, _#_9_7_, _#_1_1_4_, _#_1_1_6_, _#_1_2_2_) _a_n_d _f_a_m_o_u_s _h_i_s_t_o_r_i_c_a_l _d_o_c_u_m_e_n_t_s _o_n _p_r_o_g_r_a_m_m_i_n_g_. _<_d_t_> _G_N_U _r_o_f_f _<_d_d_> _T_h_e _g_r_o_f_f _w_e_b _s_i_t_e _<_h_t_t_p_:_/_/_w_w_w_._g_n_u_._o_r_g_/_s_o_f_t_w_a_r_e_/_g_r_o_f_f_> _p_r_o_v_i_d_e_s _t_h_e _f_r_e_e _r_o_f_f _i_m_p_l_e_m_e_n_t_a_t_i_o_n _g_r_o_f_f_, _t_h_e _a_c_t_u_a_l _s_t_a_n_d_a_r_d _r_o_f_f_. _<_/_d_l_> _<_h_4 _i_d_=_"_H_i_s_t_o_r_i_c_a_l _r_o_f_f _D_o_c_u_m_e_n_t_a_t_i_o_n_"_> _H_i_s_t_o_r_i_c_a_l _r_o_f_f _D_o_c_u_m_e_n_t_a_t_i_o_n _<_/_h_4_> _M_a_n_y _c_l_a_s_s_i_c_a_l _<_b_>_t_r_o_f_f_<_/_b_> _d_o_c_u_m_e_n_t_s _a_r_e _s_t_i_l_l _a_v_a_i_l_a_b_l_e _o_n_-_l_i_n_e_. _T_h_e _t_w_o _m_a_i_n _m_a_n_u_a_l_s _o_f _t_h_e _t_r_o_f_f _l_a_n_g_u_a_g_e _a_r_e _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _[_C_S_T_R _#_5_4_] _<_d_d_> _J_. _F_. _O_s_a_n_n_a_, _N_r_o_f_f_/_T_r_o_f_f _U_s_e_r_'_s _M_a_n_u_a_l _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_c_s_/_5_4_._p_s_>_; _B_e_l_l _L_a_b_s_, _1_9_7_6_; _r_e_v_i_s_e_d _b_y _B_r_i_a_n _K_e_r_n_i_g_h_a_n_, _1_9_9_2_. _<_p_> _<_d_t_> _[_C_S_T_R _#_9_7_] _<_d_d_> _B_r_i_a_n _K_e_r_n_i_g_h_a_n_, _A _T_y_p_e_s_e_t_t_e_r_-_i_n_d_e_p_e_n_d_e_n_t _T_R_O_F_F _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_c_s_/_9_7_._p_s_>_, _B_e_l_l _L_a_b_s_, _1_9_8_1_, _r_e_v_i_s_e_d _M_a_r_c_h _1_9_8_2_. _<_/_d_l_> _<_p_> _T_h_e _"_l_i_t_t_l_e _l_a_n_g_u_a_g_e_" _r_o_f_f _p_a_p_e_r_s _a_r_e _<_d_l _c_o_m_p_a_c_t_> _<_d_t_> _[_C_S_T_R _#_1_1_4_] _<_d_d_> _J_o_n _L_. _B_e_n_t_l_e_y _a_n_d _B_r_i_a_n _W_. _K_e_r_n_i_g_h_a_n_, _G_R_A_P _-_- _A _L_a_n_g_u_a_g_e _f_o_r _T_y_p_e_s_e_t_t_i_n_g _G_r_a_p_h_s _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_c_s_/_1_1_4_._p_s_>_; _B_e_l_l _L_a_b_s_, _A_u_g_u_s_t _1_9_8_4_. _<_d_t_> _[_C_S_T_R _#_1_1_6_] _<_d_d_> _B_r_i_a_n _W_. _K_e_r_n_i_g_h_a_n_, _P_I_C _-_- _A _G_r_a_p_h_i_c_s _L_a_n_g_u_a_g_e _f_o_r _T_y_p_e_s_e_t_t_i_n_g _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_c_s_/_1_1_6_._p_s_>_; _B_e_l_l _L_a_b_s_, _D_e_c_e_m_b_e_r _1_9_8_4_. _<_d_t_> _[_C_S_T_R _#_1_2_2_] _<_d_d_> _J_. _L_. _B_e_n_t_l_e_y_, _L_. _W_. _J_e_l_i_n_s_k_i_, _a_n_d _B_. _W_. _K_e_r_n_i_g_h_a_n_, _C_H_E_M _-_- _A _P_r_o_g_r_a_m _f_o_r _T_y_p_e_s_e_t_t_i_n_g _C_h_e_m_i_c_a_l _S_t_r_u_c_t_u_r_e _D_i_a_g_r_a_m_s_, _C_o_m_p_u_t_e_r_s _a_n_d _C_h_e_m_i_s_t_r_y _<_h_t_t_p_:_/_/_c_m_._b_e_l_l_-_l_a_b_s_._c_o_m_/_c_m_/_c_s_/_1_2_2_._p_s_>_; _B_e_l_l _L_a_b_s_, _A_p_r_i_l _1_9_8_6_. _<_/_d_l_> _<_h_4 _i_d_=_"_M_a_n_u_a_l _P_a_g_e_s_"_> _M_a_n_u_a_l _P_a_g_e_s _<_/_h_4_> _D_u_e _t_o _i_t_s _c_o_m_p_l_e_x _s_t_r_u_c_t_u_r_e_, _a _f_u_l_l _r_o_f_f _s_y_s_t_e_m _h_a_s _m_a_n_y _m_a_n _p_a_g_e_s_, _e_a_c_h _d_e_s_c_r_i_b_i_n_g _a _s_i_n_g_l_e _a_s_p_e_c_t _o_f _r_o_f_f_. _U_n_f_o_r_t_u_n_a_t_e_l_y_, _t_h_e_r_e _i_s _n_o _g_e_n_e_r_a_l _n_a_m_i_n_g _s_c_h_e_m_e _f_o_r _t_h_e _d_o_c_u_m_e_n_t_a_t_i_o_n _a_m_o_n_g _t_h_e _d_i_f_f_e_r_e_n_t _r_o_f_f _i_m_p_l_e_m_e_n_t_a_t_i_o_n_s_. _<_p_> _I_n _<_i_>_g_r_o_f_f_<_/_i_>_, _t_h_e _m_a_n _p_a_g_e _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_g_r_o_f_f_._h_t_m_l_"_>_g_r_o_f_f_(_1_)_<_/_a_> _c_o_n_t_a_i_n_s _a _s_u_r_v_e_y _o_f _a_l_l _d_o_c_u_m_e_n_t_a_t_i_o_n _a_v_a_i_l_a_b_l_e _i_n _g_r_o_f_f_. _<_p_> _O_n _o_t_h_e_r _s_y_s_t_e_m_s_, _y_o_u _a_r_e _o_n _y_o_u_r _o_w_n_, _b_u_t _<_a _h_r_e_f_=_"_._._/_h_t_m_l_1_/_t_r_o_f_f_._h_t_m_l_"_>_t_r_o_f_f_(_1_)_<_/_a_> _m_i_g_h_t _b_e _a _g_o_o_d _s_t_a_r_t_i_n_g _p_o_i_n_t_. _<_h_3 _i_d_=_"_A_U_T_H_O_R_S_"_> _A_U_T_H_O_R_S _<_/_h_3_> _C_o_p_y_r_i_g_h_t _(_C_) _2_0_0_0_, _2_0_0_1_, _2_0_0_2_, _2_0_0_3_, _2_0_0_4 _F_r_e_e _S_o_f_t_w_a_r_e _F_o_u_n_d_a_t_i_o_n_, _I_n_c_. _<_p_> _T_h_i_s _d_o_c_u_m_e_n_t _i_s _d_i_s_t_r_i_b_u_t_e_d _u_n_d_e_r _t_h_e _t_e_r_m_s _o_f _t_h_e _F_D_L _(_G_N_U _F_r_e_e _D_o_c_u_m_e_n_t_a_t_i_o_n _L_i_c_e_n_s_e_) _v_e_r_s_i_o_n _1_._1 _o_r _l_a_t_e_r_. _Y_o_u _s_h_o_u_l_d _h_a_v_e _r_e_c_e_i_v_e_d _a _c_o_p_y _o_f _t_h_e _F_D_L _o_n _y_o_u_r _s_y_s_t_e_m_, _i_t _i_s _a_l_s_o _a_v_a_i_l_a_b_l_e _o_n_-_l_i_n_e _a_t _t_h_e _G_N_U _c_o_p_y_l_e_f_t _s_i_t_e _<_h_t_t_p_:_/_/_w_w_w_._g_n_u_._o_r_g_/_c_o_p_y_l_e_f_t_/_f_d_l_._h_t_m_l_>_. _<_p_> _T_h_i_s _d_o_c_u_m_e_n_t _i_s _p_a_r_t _o_f _<_i_>_g_r_o_f_f_<_/_i_>_, _t_h_e _G_N_U _r_o_f_f _d_i_s_t_r_i_b_u_t_i_o_n_. _I_t _w_a_s _w_r_i_t_t_e_n _b_y _B_e_r_n_d _W_a_r_k_e_n _<_b_w_a_r_k_e_n_@_m_a_y_n_._d_e_>_; _i_t _i_s _m_a_i_n_t_a_i_n_e_d _b_y _W_e_r_n_e_r _L_e_m_b_e_r_g _<_w_l_@_g_n_u_._o_r_g_>_. _<_/_b_o_d_y_> _<_/_h_t_m_l_>