1999-01-10 12:04:56 +00:00
|
|
|
.\" Copyright (c) 1998, 1999 Nicolas Souchu
|
1998-10-28 00:44:22 +00:00
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
.\" SUCH DAMAGE.
|
|
|
|
.\"
|
1999-08-28 00:22:10 +00:00
|
|
|
.\" $FreeBSD$
|
1998-10-28 00:44:22 +00:00
|
|
|
.\"
|
|
|
|
.Dd March 1, 1998
|
|
|
|
.Dt PPBUS 4
|
2001-07-10 15:31:11 +00:00
|
|
|
.Os
|
1998-10-28 00:44:22 +00:00
|
|
|
.Sh NAME
|
|
|
|
.Nm ppbus
|
2001-04-18 15:54:10 +00:00
|
|
|
.Nd Parallel Port Bus system
|
1998-10-28 00:44:22 +00:00
|
|
|
.Sh SYNOPSIS
|
2000-01-23 15:04:20 +00:00
|
|
|
.Cd "device ppbus"
|
1998-10-28 00:44:22 +00:00
|
|
|
.Pp
|
2000-01-23 15:04:20 +00:00
|
|
|
.Cd "device lpt"
|
|
|
|
.Cd "device plip"
|
|
|
|
.Cd "device ppi"
|
|
|
|
.Cd "device pps"
|
|
|
|
.Cd "device lpbb"
|
1998-10-28 00:44:22 +00:00
|
|
|
.Sh DESCRIPTION
|
|
|
|
The
|
|
|
|
.Em ppbus
|
|
|
|
system provides a uniform, modular and architecture-independent
|
|
|
|
system for the implementation of drivers to control various parallel devices,
|
|
|
|
and to utilize different parallel port chipsets.
|
|
|
|
.Sh DEVICE DRIVERS
|
|
|
|
In order to write new drivers or port existing drivers, the ppbus system
|
|
|
|
provides the following facilities:
|
2000-12-29 09:18:45 +00:00
|
|
|
.Bl -bullet -offset indent
|
1998-10-28 00:44:22 +00:00
|
|
|
.It
|
|
|
|
architecture-independent macros or functions to access parallel ports
|
|
|
|
.It
|
|
|
|
mechanism to allow various devices to share the same parallel port
|
|
|
|
.It
|
|
|
|
a user interface named
|
|
|
|
.Xr ppi 4
|
1999-03-15 16:01:22 +00:00
|
|
|
that allows parallel port access from outside the kernel without conflicting
|
1998-10-28 00:44:22 +00:00
|
|
|
with kernel-in drivers.
|
|
|
|
.El
|
|
|
|
.Ss Developing new drivers
|
|
|
|
The ppbus system has been designed to support the development of standard
|
|
|
|
and non-standard software:
|
|
|
|
.Pp
|
|
|
|
.Bl -column "Driver" -compact
|
|
|
|
.It Em Driver Ta Em Description
|
|
|
|
.It Sy ppi Ta "Parallel port interface for general I/O"
|
1999-01-10 12:04:56 +00:00
|
|
|
.It Sy pps Ta "Pulse per second Timing Interface"
|
|
|
|
.It Sy lpbb Ta "Philips official parallel port I2C bit-banging interface"
|
1998-10-28 00:44:22 +00:00
|
|
|
.El
|
|
|
|
.Ss Porting existing drivers
|
|
|
|
Another approach to the ppbus system is to port existing drivers.
|
|
|
|
Various drivers have already been ported:
|
|
|
|
.Pp
|
|
|
|
.Bl -column "Driver" -compact
|
|
|
|
.It Em Driver Ta Em Description
|
2000-01-22 10:49:41 +00:00
|
|
|
.It Sy lpt Ta "lpt printer driver"
|
1998-10-28 00:44:22 +00:00
|
|
|
.It Sy plip Ta "lp parallel network interface driver"
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
ppbus should let you port any other software even from other operating systems
|
|
|
|
that provide similar services.
|
|
|
|
.Sh PARALLEL PORT CHIPSETS
|
|
|
|
Parallel port chipset support is provided by
|
|
|
|
.Xr ppc 4 .
|
|
|
|
.Pp
|
|
|
|
The ppbus system provides functions and macros to allocate a new
|
|
|
|
parallel port bus, then initialize it and upper peripheral device drivers.
|
|
|
|
.Pp
|
1999-03-15 16:01:22 +00:00
|
|
|
ppc makes chipset detection and initialization and then calls ppbus attach
|
1998-10-28 00:44:22 +00:00
|
|
|
functions to initialize the ppbus system.
|
|
|
|
.Sh PARALLEL PORT MODEL
|
|
|
|
The logical parallel port model chosen for the ppbus system is the PC's
|
2000-03-01 14:50:24 +00:00
|
|
|
parallel port model.
|
|
|
|
Consequently, for the i386 implementation of ppbus,
|
1998-10-28 00:44:22 +00:00
|
|
|
most of the services provided by ppc are macros for inb()
|
2000-03-01 14:50:24 +00:00
|
|
|
and outb() calls.
|
2020-05-01 10:02:38 +00:00
|
|
|
But, for another architecture, accesses to one of our logical
|
1998-10-28 00:44:22 +00:00
|
|
|
registers (data, status, control...) may require more than one I/O access.
|
|
|
|
.Ss Description
|
|
|
|
The parallel port may operate in the following modes:
|
2000-12-29 09:18:45 +00:00
|
|
|
.Bl -bullet -offset indent
|
1998-10-28 00:44:22 +00:00
|
|
|
.It
|
|
|
|
compatible mode, also called Centronics mode
|
|
|
|
.It
|
|
|
|
bidirectional 8/4-bits mode, also called NIBBLE mode
|
|
|
|
.It
|
|
|
|
byte mode, also called PS/2 mode
|
|
|
|
.It
|
2001-07-14 19:41:16 +00:00
|
|
|
Extended Capability Port mode, ECP
|
1998-10-28 00:44:22 +00:00
|
|
|
.It
|
|
|
|
Enhanced Parallel Port mode, EPP
|
|
|
|
.It
|
|
|
|
mixed ECP+EPP or ECP+PS/2 modes
|
|
|
|
.El
|
|
|
|
.Ss Compatible mode
|
|
|
|
This mode defines the protocol used by most PCs to transfer data to a printer.
|
|
|
|
In this mode, data is placed on the port's data lines, the printer status is
|
|
|
|
checked for no errors and that it is not busy, and then a data Strobe is
|
1999-03-15 16:01:22 +00:00
|
|
|
generated by the software to clock the data to the printer.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Pp
|
|
|
|
Many I/O controllers have implemented a mode that uses a FIFO buffer to
|
2000-03-01 14:50:24 +00:00
|
|
|
transfer data with the Compatibility mode protocol.
|
|
|
|
This mode is referred to as
|
1998-10-28 00:44:22 +00:00
|
|
|
"Fast Centronics" or "Parallel Port FIFO mode".
|
|
|
|
.Ss Bidirectional mode
|
|
|
|
The NIBBLE mode is the most common way to get reverse channel data from a
|
2000-03-01 14:50:24 +00:00
|
|
|
printer or peripheral.
|
|
|
|
Combined with the standard host to printer mode, it
|
1998-10-28 00:44:22 +00:00
|
|
|
provides a complete bidirectional channel.
|
|
|
|
.Pp
|
2000-03-01 14:50:24 +00:00
|
|
|
In this mode, outputs are 8-bits long.
|
|
|
|
Inputs are accomplished by reading
|
1998-10-28 00:44:22 +00:00
|
|
|
4 of the 8 bits of the status register.
|
|
|
|
.Ss Byte mode
|
2000-03-01 14:50:24 +00:00
|
|
|
In this mode, the data register is used either for outputs and inputs.
|
|
|
|
Then,
|
1998-10-28 00:44:22 +00:00
|
|
|
any transfer is 8-bits long.
|
|
|
|
.Ss Extended Capability Port mode
|
|
|
|
The ECP protocol was proposed as an advanced mode for communication with
|
2000-03-01 14:50:24 +00:00
|
|
|
printer and scanner type peripherals.
|
|
|
|
Like the EPP protocol, ECP mode provides
|
1998-10-28 00:44:22 +00:00
|
|
|
for a high performance bidirectional communication path between the host
|
|
|
|
adapter and the peripheral.
|
|
|
|
.Pp
|
|
|
|
ECP protocol features include:
|
|
|
|
.Bl -item -offset indent
|
|
|
|
.It
|
|
|
|
Run_Length_Encoding (RLE) data compression for host adapters
|
|
|
|
.It
|
|
|
|
FIFOs for both the forward and reverse channels
|
|
|
|
.It
|
|
|
|
DMA as well as programmed I/O for the host register interface.
|
|
|
|
.El
|
|
|
|
.Ss Enhanced Parallel Port mode
|
|
|
|
The EPP protocol was originally developed as a means to provide a high
|
|
|
|
performance parallel port link that would still be compatible with the
|
|
|
|
standard parallel port.
|
1999-01-23 14:01:55 +00:00
|
|
|
.Pp
|
2000-03-01 14:50:24 +00:00
|
|
|
The EPP mode has two types of cycle: address and data.
|
2001-07-14 19:41:16 +00:00
|
|
|
What makes the
|
1999-01-23 14:01:55 +00:00
|
|
|
difference at hardware level is the strobe of the byte placed on the data
|
2000-03-01 14:50:24 +00:00
|
|
|
lines.
|
2001-07-14 19:41:16 +00:00
|
|
|
Data are strobed with nAutofeed, addresses are strobed with
|
1999-01-23 14:01:55 +00:00
|
|
|
nSelectin signals.
|
|
|
|
.Pp
|
2001-07-14 19:41:16 +00:00
|
|
|
A particularity of the ISA implementation of the EPP protocol is that an
|
2000-03-01 14:50:24 +00:00
|
|
|
EPP cycle fits in an ISA cycle.
|
|
|
|
In this fashion, parallel port peripherals can
|
1999-01-23 14:01:55 +00:00
|
|
|
operate at close to the same performance levels as an equivalent ISA plug-in
|
|
|
|
card.
|
|
|
|
.Pp
|
|
|
|
At software level, you may implement the protocol you wish, using data and
|
2000-03-02 14:54:02 +00:00
|
|
|
address cycles as you want.
|
|
|
|
This is for the IEEE1284 compatible part.
|
2000-03-01 14:50:24 +00:00
|
|
|
Then,
|
2001-07-14 19:41:16 +00:00
|
|
|
peripheral vendors may implement protocol handshake with the following
|
2000-03-01 14:50:24 +00:00
|
|
|
status lines: PError, nFault and Select.
|
|
|
|
Try to know how these lines toggle
|
1999-01-23 14:01:55 +00:00
|
|
|
with your peripheral, allowing the peripheral to request more data, stop the
|
|
|
|
transfer and so on.
|
|
|
|
.Pp
|
|
|
|
At any time, the peripheral may interrupt the host with the nAck signal without
|
|
|
|
disturbing the current transfer.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Ss Mixed modes
|
|
|
|
Some manufacturers, like SMC, have implemented chipsets that support mixed
|
2000-03-01 14:50:24 +00:00
|
|
|
modes.
|
|
|
|
With such chipsets, mode switching is available at any time by
|
1998-10-28 00:44:22 +00:00
|
|
|
accessing the extended control register.
|
1999-01-10 12:04:56 +00:00
|
|
|
.Sh IEEE1284-1994 Standard
|
|
|
|
.Ss Background
|
|
|
|
This standard is also named "IEEE Standard Signaling Method for a
|
2004-07-03 18:29:24 +00:00
|
|
|
Bidirectional Parallel Peripheral Interface for Personal Computers".
|
|
|
|
It
|
1999-03-15 16:01:22 +00:00
|
|
|
defines a signaling method for asynchronous, fully interlocked, bidirectional
|
2000-03-01 14:50:24 +00:00
|
|
|
parallel communications between hosts and printers or other peripherals.
|
|
|
|
It
|
1999-01-10 12:04:56 +00:00
|
|
|
also specifies a format for a peripheral identification string and a method of
|
|
|
|
returning this string to the host outside of the bidirectional data stream.
|
|
|
|
.Pp
|
1999-03-15 16:01:22 +00:00
|
|
|
This standard is architecture independent and only specifies dialog handshake
|
2000-03-01 14:50:24 +00:00
|
|
|
at signal level.
|
|
|
|
One should refer to architecture specific documentation in
|
1999-03-15 16:01:22 +00:00
|
|
|
order to manipulate machine dependent registers, mapped memory or other
|
|
|
|
methods to control these signals.
|
1999-01-10 12:04:56 +00:00
|
|
|
.Pp
|
|
|
|
The IEEE1284 protocol is fully oriented with all supported parallel port
|
2000-03-01 14:50:24 +00:00
|
|
|
modes.
|
|
|
|
The computer acts as master and the peripheral as slave.
|
1999-01-10 12:04:56 +00:00
|
|
|
.Pp
|
2004-07-08 13:49:39 +00:00
|
|
|
Any transfer is defined as a finite state automaton.
|
2000-03-01 14:50:24 +00:00
|
|
|
It allows software to
|
1999-01-10 12:04:56 +00:00
|
|
|
properly manage the fully interlocked scheme of the signaling method.
|
1999-03-15 16:01:22 +00:00
|
|
|
The compatible mode is supported "as is" without any negotiation because it
|
2000-03-01 14:50:24 +00:00
|
|
|
is compatible.
|
|
|
|
Any other mode must be firstly negotiated by the host to check
|
1999-01-10 12:04:56 +00:00
|
|
|
it is supported by the peripheral, then to enter one of the forward idle
|
|
|
|
states.
|
|
|
|
.Pp
|
2000-03-01 14:50:24 +00:00
|
|
|
At any time, the slave may want to send data to the host.
|
|
|
|
This is only
|
2000-03-02 14:54:02 +00:00
|
|
|
possible from forward idle states (nibble, byte, ecp...).
|
|
|
|
So, the
|
1999-03-15 16:01:22 +00:00
|
|
|
host must have previously negotiated to permit the peripheral to
|
2000-03-01 14:50:24 +00:00
|
|
|
request transfer.
|
|
|
|
Interrupt lines may be dedicated to the requesting signals
|
1999-01-10 12:04:56 +00:00
|
|
|
to prevent time consuming polling methods.
|
|
|
|
.Pp
|
2000-03-01 14:50:24 +00:00
|
|
|
But peripheral requests are only a hint to the master host.
|
|
|
|
If the host
|
1999-03-15 16:01:22 +00:00
|
|
|
accepts the transfer, it must firstly negotiate the reverse mode and then
|
2000-03-01 14:50:24 +00:00
|
|
|
starts the transfer.
|
|
|
|
At any time during reverse transfer, the host may
|
1999-01-10 12:04:56 +00:00
|
|
|
terminate the transfer or the slave may drive wires to signal that no more
|
|
|
|
data is available.
|
|
|
|
.Ss Implementation
|
|
|
|
IEEE1284 Standard support has been implemented at the top of the ppbus system
|
1999-03-15 16:01:22 +00:00
|
|
|
as a set of procedures that perform high level functions like negotiation,
|
1999-01-10 12:04:56 +00:00
|
|
|
termination, transfer in any mode without bothering you with low level
|
1999-03-15 16:01:22 +00:00
|
|
|
characteristics of the standard.
|
1999-01-10 12:04:56 +00:00
|
|
|
.Pp
|
2004-07-08 13:49:39 +00:00
|
|
|
IEEE1284 interacts with the ppbus system as little as possible.
|
2000-03-01 14:50:24 +00:00
|
|
|
That means
|
1999-03-15 16:01:22 +00:00
|
|
|
you still have to request the ppbus when you want to access it, the negotiate
|
2005-02-13 22:25:33 +00:00
|
|
|
function does not do it for you.
|
2000-03-01 14:50:24 +00:00
|
|
|
And of course, release it later.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Sh ARCHITECTURE
|
|
|
|
.Ss adapter, ppbus and device layers
|
|
|
|
First, there is the
|
|
|
|
.Em adapter
|
2000-03-01 14:50:24 +00:00
|
|
|
layer, the lowest of the ppbus system.
|
|
|
|
It provides
|
1998-10-28 00:44:22 +00:00
|
|
|
chipset abstraction throw a set of low level functions that maps the logical
|
|
|
|
model to the underlying hardware.
|
|
|
|
.Pp
|
|
|
|
Secondly, there is the
|
|
|
|
.Em ppbus
|
|
|
|
layer that provides functions to:
|
|
|
|
.Bl -enum -offset indent
|
|
|
|
.It
|
|
|
|
share the parallel port bus among the daisy-chain like connected devices
|
|
|
|
.It
|
|
|
|
manage devices linked to ppbus
|
|
|
|
.It
|
|
|
|
propose an arch-independent interface to access the hardware layer.
|
|
|
|
.El
|
|
|
|
.Pp
|
1999-03-15 16:01:22 +00:00
|
|
|
Finally, the
|
1998-10-28 00:44:22 +00:00
|
|
|
.Em device
|
|
|
|
layer gathers the parallel peripheral device drivers.
|
1999-03-15 16:01:22 +00:00
|
|
|
.Ss Parallel modes management
|
|
|
|
We have to differentiate operating modes at various ppbus system layers.
|
1998-10-28 00:44:22 +00:00
|
|
|
Actually, ppbus and adapter operating modes on one hands and for each
|
1999-03-15 16:01:22 +00:00
|
|
|
one, current and available modes are separated.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Pp
|
|
|
|
With this level of abstraction a particular chipset may commute from any
|
2007-02-23 16:50:17 +00:00
|
|
|
native mode to any other mode emulated with extended modes without
|
2000-03-01 14:50:24 +00:00
|
|
|
disturbing upper layers.
|
|
|
|
For example, most chipsets support NIBBLE mode as
|
1998-10-28 00:44:22 +00:00
|
|
|
native and emulated with ECP and/or EPP.
|
|
|
|
.Pp
|
1999-03-15 16:01:22 +00:00
|
|
|
This architecture should support IEEE1284-1994 modes.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Sh FEATURES
|
|
|
|
.Ss The boot process
|
2004-07-08 13:49:39 +00:00
|
|
|
The boot process starts with the probe stage of the
|
1998-10-28 00:44:22 +00:00
|
|
|
.Xr ppc 4
|
2000-03-01 14:50:24 +00:00
|
|
|
driver during ISA bus (PC architecture) initialization.
|
|
|
|
During attachment of
|
2000-01-22 10:49:41 +00:00
|
|
|
the ppc driver, a new ppbus structure is allocated, then probe and attachment
|
|
|
|
for this new bus node are called.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Pp
|
2000-01-22 10:49:41 +00:00
|
|
|
ppbus attachment tries to detect any PnP parallel peripheral (according to
|
1998-10-28 00:44:22 +00:00
|
|
|
.%T "Plug and Play Parallel Port Devices"
|
|
|
|
draft from (c)1993-4 Microsoft Corporation)
|
|
|
|
then probes and attaches known device drivers.
|
|
|
|
.Pp
|
|
|
|
During probe, device drivers are supposed to request the ppbus and try to
|
2000-03-01 14:50:24 +00:00
|
|
|
set their operating mode.
|
|
|
|
This mode will be saved in the context structure and
|
1998-10-28 00:44:22 +00:00
|
|
|
returned each time the driver requests the ppbus.
|
|
|
|
.Ss Bus allocation and interrupts
|
2000-03-01 14:50:24 +00:00
|
|
|
ppbus allocation is mandatory not to corrupt I/O of other devices.
|
2007-02-23 16:50:17 +00:00
|
|
|
Another
|
1998-10-28 00:44:22 +00:00
|
|
|
usage of ppbus allocation is to reserve the port and receive incoming
|
|
|
|
interrupts.
|
|
|
|
.Pp
|
2000-01-22 10:49:41 +00:00
|
|
|
High level interrupt handlers are connected to the ppbus system thanks to the
|
|
|
|
newbus
|
|
|
|
.Fn BUS_SETUP_INTR
|
|
|
|
and
|
|
|
|
.Fn BUS_TEARDOWN_INTR
|
2000-03-01 14:50:24 +00:00
|
|
|
functions.
|
|
|
|
But, in order to attach a handler, drivers must
|
|
|
|
own the bus.
|
|
|
|
Consequently, a ppbus request is mandatory in order to call the above
|
2004-07-03 18:29:24 +00:00
|
|
|
functions (see existing drivers for more info).
|
|
|
|
Note that the interrupt handler
|
2000-01-22 10:49:41 +00:00
|
|
|
is automatically released when the ppbus is released.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Ss Microsequences
|
|
|
|
.Em Microsequences
|
|
|
|
is a general purpose mechanism to allow fast low-level
|
2000-03-01 14:50:24 +00:00
|
|
|
manipulation of the parallel port.
|
|
|
|
Microsequences may be used to do either
|
|
|
|
standard (in IEEE1284 modes) or non-standard transfers.
|
|
|
|
The philosophy of
|
1998-10-28 00:44:22 +00:00
|
|
|
microsequences is to avoid the overhead of the ppbus layer and do most of
|
|
|
|
the job at adapter level.
|
|
|
|
.Pp
|
2000-03-01 14:50:24 +00:00
|
|
|
A microsequence is an array of opcodes and parameters.
|
|
|
|
Each opcode codes an
|
1998-10-28 00:44:22 +00:00
|
|
|
operation (opcodes are described in
|
2001-01-16 09:32:40 +00:00
|
|
|
.Xr microseq 9 ) .
|
1998-10-28 00:44:22 +00:00
|
|
|
Standard I/O operations are implemented at ppbus level whereas basic I/O
|
1999-03-15 16:01:22 +00:00
|
|
|
operations and microseq language are coded at adapter level for efficiency.
|
1998-10-28 00:44:22 +00:00
|
|
|
.Sh SEE ALSO
|
2000-01-22 10:49:41 +00:00
|
|
|
.Xr lpt 4 ,
|
1999-08-15 10:48:36 +00:00
|
|
|
.Xr plip 4 ,
|
1998-10-28 00:44:22 +00:00
|
|
|
.Xr ppc 4 ,
|
|
|
|
.Xr ppi 4 ,
|
|
|
|
.Sh HISTORY
|
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
manual page first appeared in
|
|
|
|
.Fx 3.0 .
|
1999-08-15 10:48:36 +00:00
|
|
|
.Sh AUTHORS
|
1998-10-28 00:44:22 +00:00
|
|
|
This
|
|
|
|
manual page was written by
|
|
|
|
.An Nicolas Souchu .
|