~~~~~~~~~~~~~
BRLTTY on DOS
~~~~~~~~~~~~~

.. include:: prologue.rst

Using BRLTTY
============

Serial Support
--------------

The default DOS serial driver does not support speeds above 9600 baud. For 
higher speeds, a more capable serial driver (like ADF) must be used.

USB Support
-----------

USB isn't supported.

Bluetooth Support
-----------------

Bluetooth isn't supported.

Unpacking the Archive
---------------------

If you'd like to unpack the archive on your DOS system but don't have an 
unzip command on it, you can get one from
`<ftp://ftp.delorie.com/pub/djgpp/current/v2/unzip32.exe>`_.

If you'd like to unpack the archive into your DOS file system from your Linux
system then you need to be able to mount your DOS partition on your Linux
system. If you do this then you must be careful about two things. The first is
that you must ensure that your DOS system is shut down first so that two
systems won't be accessing the same partition at the same time. The second is
that you must mount the partition in a way that prevents the long file names 
that BRLTTY uses from being converted into those cryptic Windows short file 
names - the ones that look like ``longna~1.ext``. One way to do this is to use 
the ``-o nonumtail`` option when mounting your DOS partition. For example::

   mkdir -p /mnt/dos
   mount -o nonumtail /dev/sda1 /mnt/dos

What you most likely have is an image of the whole hard disk, rather than an 
image of just the DOS partition. There are a number of ways to mount the DOS 
partition within the hard disk image. We'll describe some of them here. For our 
examples, we'll assume that the DOS partition is the first primary partition of 
a hard disk whose image is in the file ``disk.img``.

A Simple but Dangerous Way
~~~~~~~~~~~~~~~~~~~~~~~~~~

The simplest, but also the most dangerous, way is to do some simple math and to 
use an obscure mount option. First, use the ``fdisk`` command to find out where
the DOS partition starts within the hard disk image. To do this, use the
command::

   fdisk -l disk.img

You should see output that looks like this::

   Disk disk.img: 1073 MB, 1073741824 bytes, 2097152 sectors
   Units = sectors of 1 * 512 = 512 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disk identifier: 0x00000000

      Device Boot      Start         End      Blocks   Id  System
   disk.img1   *          63     2062367     1031152+   6  FAT16

From the ``Start`` column, you can see that the DOS partition starts in sector
63 of the hard disk. Since a sector is a 512-byte block, you need to multiply
63 by 512 in order to calculate the partition's byte offset::

   63 x 512 = 32256

Now you can mount the DOS partition using that obscure option::

   mount -o offset=32256 disk.img /mnt/dos

But don't forget the afore-mentioned Windows cryptic short file name problem. 
The command you should really use, therefore, is::

   mount -o offset=32256,nonumtail disk.img /mnt/dos

Before you restart your DOS system, don't forget to first unmount the DOS 
partition from your Linux system::

   umount /mnt/dos

Using ``kpatrx``
~~~~~~~~~~~~~~~~

Another way to mount the DOS partition, which is much safer, is to use the 
``kpartx`` command to create a loop device for the desired partition within the 
hard disk image. Use a command like this::

   kpartx -v -s -a disk.img

*  The ``-v`` (verbose) option tells ``kpartx`` to be informative, which is the
   easiest way to find out the name of the loop device that it will create.

*  The ``-s`` (synchronous) option tells ``kpartx`` to wait until the loop
   device has been created by ``udev`` before returning.

*  The ``-a`` (add) option tells ``kpartx`` to create the loop device.

You should see output like this::

   add map loop0p1 (253:11): 0 2062305 linear /dev/loop0 63

So you now know that the loop device you need to mount is
``/dev/mapper/loop0p1``::

   mount -o nonumtail /dev/mapper/loop0p1 /mnt/dos

When you're finished, you need to unmount the partition and to remove the loop 
device::

   umount /mnt/dos
   kpartx -d disk.img

``DOSIDLE``
-----------

``DOSIDLE`` is a DOS application that many users run in order to stop their 
computer or virtual machine from needlessly consuming CPU time when DOS has 
nothing meaningful to do. If you use it, don't use a "cooling strategy" more
invasive than ``weak``. In other words, don't specify more than ``-fm1``. Using
a "cooling strategy" that is too aggressive will cause ``DOSIDLE`` to correctly
deduce that the system is idle when BRLTTY has nothing to do, but that will
cause BRLTTY to stop running, too, which isn't what you want.

Using ``dosemu`` on Linux
-------------------------

If you're using ``dosemu`` on Linux, and the Linux kernel is 3.15, then you'll 
need to explicitly enable 16-bit segment support. This can be done with the 
following command::

   echo 1 >/proc/sys/abi/ldt16

If you'd like this setting to take effect automatically each time you reboot,
then create the file ``ldt16.conf`` in the directory ``/etc/sysctl.d/``, 
and place the following line in it::
   
   abi.ldt16 = 1

Making the Cross Compiler
=========================

The DOS version of BRLTTY can be compiled on Linux by using a cross-compiler. 
To create it, get the following archives:

*  `<ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/gcc410s2.zip>`_
*  `<ftp://ftp.delorie.com/pub/djgpp/current/v2/djcrx203.zip>`_

The ``djcrx203.zip`` archive contains a file named ``cross/howto.32`` that
explains how to build a cross-compiler for gcc 3.2. You can build one for gcc
4.1 by applying the same instructions to the ``gcc410s2.zip`` archive (listed
above) instead of to the ``gcc32s2.zip`` archive (mentioned in the "howto").
You can also use a more recent ``binutils`` package (2.2.24 works fine).

If, when building the cross-compiler, you encounter an error that complains 
about the ``writev`` function and the ``iovec`` structure not being defined,
then you need to upgrade to a newer version of ``djcrx``. Upgrading to
``djcrx204`` is sufficient. It can be downloaded from
`<ftp://ftp.delorie.com/pub/djgpp/beta/v2/djcrx204.zip>`_.

Another complexity when building the cross-compiler is that some parts of the 
process need an older version of ``autoconf`` (2.13) whereas other parts of it
need a newer version (2.57). Also, the build works best when a specific version
of ``automake`` (1.9.6) is used.

We've written a script that builds the cross-compiler, and that also takes care
of all of the idiosyncracies that we encountered when doing so.

The ``mkdostools`` Script
-------------------------

The ``mkdostools`` script builds the cross-compiler that's needed in order to 
build BRLTTY for DOS on Linux. It resides in the ``DOS/`` subdirectory of
BRLTTY's source tree.

Basic Options
~~~~~~~~~~~~~

.. include:: common-options.rst

Build Directories
~~~~~~~~~~~~~~~~~

A number of directories are used during the build process. Each of them can be
explicitly specified via an option, and also has a default subdirectory within
the directory that contains the script itself. Each of the default
subdirectories may be a symbolic link that points somewhere else. These
directories are:

   ========  ======  =========
   Purpose   Option  Default
   --------  ------  ---------
   archives  ``-a``  Archives/
   build     ``-b``  Build/
   install   ``-i``  Tools/
   ========  ======  =========

The **archives** directory is the only one that you need to prepare. It must
contain all of the archives that are needed in order to build the
cross-compiler. DJGPP archives have the ``.zip`` extension, and Gnu archives
have the ``.tar.gz`` extension. See `Required Archives`_ for the list.

The **build** directory will contain all of the files that are intirimly needed
during the build process. It's created if it doesn't already exist. If it does
already exist then it's emptied at the start of the build process. It's also
emptied upon the completion of a successful build. This directory needs to be
on a volume that has at least 1.5GB of free file space.

The **install** directory is where the cross-compiler tools are to be
installed. It's created if it doesn't already exist. If it does already exist
then it's emptied at the start of the build process.

Required Archives
~~~~~~~~~~~~~~~~~

You'll need the following DJGPP archives:

   ================  ==================================================
   Archive Name      Download From
   ----------------  --------------------------------------------------
   ``djcrx204.zip``  `<ftp://ftp.delorie.com/pub/djgpp/beta/v2>`_
   ``gcc432s2.zip``  `<ftp://ftp.delorie.com/pub/djgpp/current/v2gnu>`_
   ================  ==================================================

You'll need the following Gnu archives:

   =========================  ====================================
   Archive Name               Download From
   -------------------------  ------------------------------------
   ``autoconf-2.13.tar.gz``   `<http://ftp.gnu.org/gnu/autoconf>`_
   ``autoconf-2.57.tar.gz``   `<http://ftp.gnu.org/gnu/autoconf>`_
   ``automake-1.9.6.tar.gz``  `<http://ftp.gnu.org/gnu/automake>`_
   ``binutils-2.24.tar.gz``   `<http://ftp.gnu.org/gnu/binutils>`_
   ``gcc-4.3.2.tar.gz``       `<http://gcc.gnu.org/mirrors.html>`_
   =========================  ====================================

If you'd prefer to build a different version of gcc, there are two important
things to know. One is that you need the ``gcc*s2.zip`` archives from 
DJGPP. The other is that the versions of the Gnu and DJGPP gcc archives must 
match. If, for example, you'd like to build gcc-4.1.2, then you'll need 
both ``gcc-4.1.2.tar.gz`` and ``gcc412s2.zip``. The reason we use gcc-4.3.2 in
our examples here is because it's the highest version of gcc for which we could
find an ``s2.zip`` DJGPP archive.

If you only have one Gnu archive for gcc in your **archives** directory then
that version will be built. If you have more than one then you'll need to use
the ``-g`` (gcc) option (e.g. ``-g 4.3.2``) to explicitly specify the version
that is to be built.

Building BRLTTY
===============

Configuring the Build
---------------------

Before configuring BRLTTY, you must add the ``bin/`` subdirectory of the 
cross-compiler tools to your command search path. If, for example, the
cross-compiler is installed in ``/usr/local/dostools``, then add its tools to
your command search path with a command like this::

   export PATH="/usr/local/dostools/bin:$PATH"

You'll also need to ensure that gcc's ``-fgnu89-inline`` option is used. This
is done by setting the ``CFLAGS`` environment variable before configuring. For 
example::

   export CFLAGS="-fgnu89-inline"

You should be able to use a configure command like this one::

   ./configure \
      --prefix=/brltty-dos --host=i586-pc-msdosdjgpp \
      --enable-relocatable-install \
      --disable-api --disable-icu --disable-x \
      --without-usb-package --without-bluetooth-package \
      --without-libbraille --with-braille-driver=-vr,all \
      --without-espeak --without-espeak-ng \
      --without-flite --without-speechd \
      --with-speech-driver=all \
      --with-screen-driver=pb,-all

The ``cfg-dos`` Script
~~~~~~~~~~~~~~~~~~~~~~

We provide a script named ``cfg-dos``, which resides in the top-level directory
of BRLTTY's source tree, that should make configuring BRLTTY for DOS a bit
easier. It runs the ``configure`` script for you, giving it all of the options
that are required for a successful DOS build. You can specify additional
``configure`` options (although that shouldn't be necessary) simply by giving
them to ``cfg-dos``. The only thing you do need to do is to point the
``DOS_TOOLS_ROOT`` environment variable to the top-level directory of your 
cross-compiler tools. For example::

   export DOS_TOOLS_ROOT=/usr/local/dostools

The ``mkdosarc`` Script
-----------------------

The ``mkdosarc`` script, which resides in the ``DOS/`` subdirectory of BRLTTY's
source tree, creates a DOS archive (a ``.zip`` file) of BRLTTY. It does
everything (``configure``, ``make``, ..., ``zip``) except for building the
cross-compiler. If you don't already have a cross-compiler for DOS then see
`Making the Cross Compiler`_ for instructions on how to build one.

Before running this script, ensure that the following commands have been 
installed on your system:

*  linuxdoc
*  unix2dos
*  zip

You'll also need to point the ``DOS_TOOLS_ROOT`` environment variable to the 
top-level directory of the cross-compiler tools. For example::

   export DOS_TOOLS_ROOT=/usr/local/dostools

Parameters
~~~~~~~~~~

The script requires only one parameter - the path to the top-level directory of
BRLTTY's source tree. If, for example, you're in the ``DOS/`` subdirectory of 
BRLTTY's source tree (where the script resides), then invoke it like this::

   ./mkdosarc ..

If you're in the top-level directory of BRLTTY's soruce tree then invoke it
like this::

   DOS/mkdosarc .

Options
~~~~~~~

``-a`` (archive)
   Specify the name of the archive (``.zip``) file that will be created. The
   default archive name is ``brltty-dos``.

``-o`` (overwrite)
   Allow an already-existing archive to be overwritten. The default is that an
   already-existing archive won't be overwritten.

``-i`` (install)
   Specify the name of the subdirectory on the target DOS system into which the
   archive will be unpacked. Its default name is ``BRLTTY``. It will be an
   immediate subdirectory of the current working directory when the archive is
   being unpacked. It will be created if it doesn't already exist.

``-s`` (shell)
   Invoke an interactive shell just before the archive is created so that you
   can inspect and/or modify what will be in the archive. The current working
   directory is set to the top-level directory of the content.
   The shell specified by the ``SHELL`` environment variable is used. If it
   isn't set then ``/bin/sh`` is assumed.

.. include:: common-options.rst

