started converting documentation to LaTeX

The documentation in the README was becoming a bit
cumbersome to write given Markdowns limited capabilities.
To resolve this the documentation is being converted
to LaTeX.  Then diagrams and source code can be easily
added and the result will look much nicer.
data driver changed cleanup() to goto style

The cleanup() function has been removed from data
driver in favor of the simpler and more common
goto style.
documentation for the data_chr driver updated
reworked documentation introduction
merged changes from data_chr in to data_rw and data_sk
simplified data driver to eliminate looping

The data driver has been simplified so that it
no longer loops to the beginning when it reaches the
end.  Looping is a unique behavior and reaching
an end is more typical.
updated documentation of all the data drivers

The documentation of all the data drivers has been updated.
The code has been simplified and cleaned up to make it
more concise to describe (no DEBUG statements, etc).
created seekable cat program for testing data_sk

This seekable cat program can be used to test the seek
operation of the data driver by first seeking before
it cats the input.
fixed a possible bug involving size_t and loff_t

Previously the file offset was stored as an unsigned type (size_t).
However the offset should support negative values (loff_t).
For example SEEK_SET with -1 would have resulted in a very large
integer.  While this still would have been caught it was being
caught for being too large when it should have been because it was
too small.
updated ioctl example, renamed ioctlx -> data_ioctl

The recent changes made to the data driver have been
merged with the ioctl driver.  The ioctl driver is
most similar to the data_chr driver.  It has also
been renamed to data_ioctl to reflect its similarity.
updated data_ioctl test program example
updated the /dev/null and /dev/zero examples
created a cats example to describe data_sk (seek)
continued cleaup() remove and updates, added diff

The recent changes to the data drivers which removed
the cleanup() have been merged in to the fifo drivers.

Most of the drivers have diffs describing what has
changed relative to their nearest similar driver.
Generating these diffs has now been added to the
Makefile's.
updated installation instructions
documented packages required to build doc/main.pdf
fixed "warning: format '%lu' expects" message

Under 3.10 686 a format warning is generated.
However on a 3.9 amd64 system no such error is generated.

make -C /lib/modules/3.10-2-686-pae/build M=/home/jeri/ldd/fifo_sysfs modules
make[1]: Entering directory `/usr/src/linux-headers-3.10-2-686-pae'
  CC [M]  /home/jeri/ldd/fifo_sysfs/fifo.o
/home/jeri/ldd/fifo_sysfs/fifo.c: In function ‘read_offset_show’:
/home/jeri/ldd/fifo_sysfs/fifo.c:121:2: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘int’ [-Wformat]
/home/jeri/ldd/fifo_sysfs/fifo.c: In function ‘write_offset_show’:
/home/jeri/ldd/fifo_sysfs/fifo.c:139:2: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘int’ [-Wformat]
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/jeri/ldd/fifo_sysfs/fifo.mod.o
  LD [M]  /home/jeri/ldd/fifo_sysfs/fifo.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.10-2-686-pae'
jeri@ripley:~/ldd/fifo_sysfs$

The code involves subtracting two pointers.  Since pointers may be different
sizes on different systems the warning message occur on systems
with a different size.  To fix the problem the result is cast
to a size that printf expects.
updated documentation of fifo_rw driver
updated documentation of fifo_sysfs example
fixed missing dev_set_drvdata() bug

The show/store functions for the sysfs attributes use
dev_get_drvdata to retrieve the file structure from drvdata.
But drvdata wasn't being set during init.  An oops and
screen corruption would occur any time attributes were
read.

cat /sys/devices/virtual/fifo/fifo0/read_offset
(oops)