Home / experix_r13
Name Modified Size InfoDownloads / Week
Parent folder
readme_r13 2014-08-30 32.0 kB
experix_r13_book.tgz2 2014-08-30 262.6 kB
experix_r13_dist.tgz2 2014-08-30 1.1 MB
Totals: 3 Items   1.4 MB 0
This file is part of experix.
Copyright (C) 2004-2014 William Bayard McConnaughey

experix 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 3 of the Licence, or (at your option)
any later version.

experix 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 Licence for more
details.

You should have received a copy of the GNU General Public Licence along
with experix.  If not, see <http://www.gnu.org/licenses/>.

Author:
William Bayard McConnaughey
Washington University Biochemistry Department
660 S. Euclid Av., Box 8231
St. Louis MO 63110
telephone 314-362-3345     mcconnau@biochem.wustl.edu

The phrase "Copyright (C) 2004-2014" as used in this file and in all files
that are part of experix has exactly the same meaning as "Copyright (C)
2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014"


experix_release_r13 30 AUG 2014
---------------------------- In this file ----------------------------

Major additions/changes      relative to experix_r12.2
Introduction                 what is experix?
Quick installation           just to get started
General stuff                auxiliary programs and experix setup
System setup stuff           some things needed for experix to work well
Trying the program           how to get started
Author contact
Dist                         tree of this distribution
Changelog                    relative to experix_release_r12.2
                             and updates applied to that

--------------------- Major additions and changes ---------------------

The new sock command performs internet i/o. It can copy data between experix
sessions connected to the network, and execute commands in the server session.
It will be expanded to provide remote operation of selected net-connected
devices. Look for a Raspberry-Pi (C) interface in the near future. 

Fourier transform operations using the "kiss_fft" method have been added.
This allows use of any even array length.

New command ppm/X does insertion and extraction of rectangular sections of
2- and 3-dimensional arrays of any data type.

New command ppm/I expands a 2-dimensional single-precision array by linear
interpolation.

The modified nano editor has been improved, and moved to 'xnano'.

---------------------------- Introduction ----------------------------

The experix interface grew out of my command interpreter, written in C for
extended DOS on x86, which we are still using to run one experiment in the
Department of Biochemistry and Molecular Biophysics at Washington
University, and one at the Plant Biology Research Institute at the
University of Montreal. We need to move those to experix, but there is too
much higher priority stuff to do. Meanwhile, experix is running the "cell
poker" (like a primitive atomic force microscope), and has been used on
other experiments including controlling a laser modulator and collecting
photon counts for two-color fluorescence measurements; analyzing
fluorescence intensity distributions in Zeiss Confocor data; and doing
miscellaneous other tasks that arise.

The experix program is written in C and some assembly for GNU/Linux on the
PC platform (i486 or better). The archive (about 1.3 MB) contains source
files and documentation for experix and its graphics server and a few
auxiliary programs, and help files for the commands and operators. There is
also a book started (about 79K bytes total now) and a computational
application (FIDA, about 50K, not included in the distribution but will be
provided on request).

The user interface presents a command prompt and accepts a command string
of arbitrary length. The command string contains commands and operators
which are executed sequentially except when branch operators are
encountered. Commands and operators use objects in a stack which includes
numbers, arrays, strings, and various control blocks. The main user stack,
which is displayed each time a command prompt is given, provides a
mechanism for commands and operators to obtain arguments and pass results
on to the the next command or operator.

Data objects held by experix stacks and in command variables are of many
types: integer, floating-point, complex and polar numbers and arrays with
multiple dimensions; strings used as commands, filenames, filepaths,
command names and messages; and file control objects, device control
objects and thread control objects. Operators and command functions are
coded in C and overloaded to the extent that makes sense, so that they work
on different kinds of numerical or string data. They do calculations in the
binary data types of the operands, which gives a speed advantage relative
to systems that use string numerical represention. Support at the user
command level for numerous binary numerical data types facilitates the
interface to data acquisition hardware.

Command input is obtained in a thread separate from the execution loop, so
that commands activated by timers, signals and devices can be put into the
queues asynchronously with respect to user command execution. In graphic
mode, stdout is directed to a thread that packages characters into graphic
display commands, and these are written to a fifo which is consumed by the
graphics server process.

Help is available by typing a command name or an operator preceeded by '?'.
This displays the relevant section of the help file that discusses the
item, and subsequent sections of the file can then be viewed at any time by
typing <space><enter>. With '??' preceeding the name or operator, the help
system execs an editor in a separate console with the relevant file loaded
and opened to the place of interest. The help files make use of the
"embedded highlighting" feature in the extended version of the GNU nano
text editor (see nano-wbm.tgz2 in the experix_r12 directory on
SourceForge).

In case of error, execution of the command string stops and an error
message is given, with a display showing the execution point in the command
that caused the error and the execution points in all suspended commands.
User input, stack displays and diagnostic messages are recorded in a log
file. Together with recall and editing of previous input, this gives
experix a significant advantage over mouse-and-icon-based command input,
since the user is encouraged to think things through and is provided a
record of the session.

The main objective of this is experiment control and data collection. This
is handled by device drivers (loadable kernel modules) that conform to a
model in which the data is shared by the mmap method, and the read method
is used more like an ioctl. A set of common driver commands is defined,
such as start, stop, configure the data page, define the signal delivery
time, and others. A command and supporting parameters is prepared as a
short array that is passed to the driver in a read call. The driver writes
results back to the array. The driver signal handler scans the registered
drivers to find out which ones need service, and for those drivers it
queues the command strings that have been assigned to them. These commands
would typically perform device operation and data acquisition, display and
storage. They run atomically between tokens of a user command, and so do
not wait on whatever the user is doing. All device data and actions are
accessible by the experix command line, so an expert user is able to do
things that the programmer may not have considered.

USB operations and command threading enable experix to utilize the
tremendous variety of USB-connected devices that have made their appearance
in recent years. These are operated through the 'usb' command, which
executes arbitrarily constructed control transfers and bulk transfers.

It is also possible to make user-space device drivers which are linked by
fifo's to experix and accessed via the 'file' command. When this technique
can get the job done, it saves the very considerable difficulties
associated with kernel device driver construction.

Data can be transferred between files and stack objects in either binary or
formatted form. This uses the 'file' command together with a stack object
which contains the file descriptor, file path and status information. This
can be used to create complicated data archiving and retrieval commands
taylored to each experimental situation.

------------------------- Quick installation  ------------------------- 

This discussion is for a system that does not yet have experix. The
procedure establishs the experix directory under the user's top directory,
downloads and unpacks the distribution files, and builds experix and
svgaserv. Then experix will work in text mode. Getting it to work in
graphics mode should not be any more complicated, but for some screen
geometries you might want to tinker with the fonts and vdr sizes.
See book/install, help/in.experix/hlp and contact the author. This all
assumes you are using a not-too-old Linux system on a PC platform.

See the program building instructions in help/in.experix.hlp. This is to be
considered the authority in program building and it also includes the
single-process option in which the graphics server is built into experix.

# Construct the experix directory tree.
cd <the directory that is to contain the experix tree>
mkdir experix
cd experix
# download the following from Sourceforge:
# experix_r12.2_dist.tgz2  experix_r9_helpers.tgz2  experix_r12.2_book.tgz2
tar -xjf experix_r12.2_dist.tgz2
tar -xjf experix_r12.2_book.tgz2
tar -xjf experix_r9_helpers.tgz2
mkdir bin
cd bin

# Build experixXG. This is the variant that uses an external graphics
# server (svgaserv). But first, see the more detailed instructions in
# help/in.experix.hlp, which also discusses some compilation options.
gcc -c -g -O -pthread -Wall ../dist/source/xpx_local/zdhist.c
gcc -c -g -O -pthread -Wall ../dist/source/xpx_local/stretcher.c
gcc -c -g -O -pthread -Wall ../dist/source/xpx_local/webcam.c
gcc -c -g -O -pthread -Wall ../dist/source/svgalib/exp_svga.c
gcc -c -g -O -pthread -Wall ../dist/source/*.c &> errs; cat errs
# Inspect the errs file to ensure there are no compilation errors.
# There will be warnings. See help/compile_warn, and contact the author
# about problems that are not discussed there.
# Link the program:
gcc -o experixXG *.o -lpthread -lm -lreadline -lcurses -lrt -lusb -lv4l2

# Build the graphics server svgaserv.
gcc -g -O -Wall -o svgaserv \
 ../dist/source/svgalib/svgaserv.c ../dist/source/svgalib/svgafunc.c \
 ../dist/source/svgalib/svgafont.c ../dist/source/svgalib/frbflib.c -lm

# After building experixXG, build experixIG. This is the variant in which
# the graphics server functionality is integrated into experix, rather
# than being a separate process. (in.experix.hlp also shows how to build
# this without first building experixXG)
gcc -D_G_IN_X -c -g -O -pthread -Wall ../dist/source/graphx.c
gcc -D_G_IN_X -c -g -O -pthread -Wall ../dist/source/threads.c
rm -f exp_svga.o
gcc -c -g -O -pthread -Wall ../dist/source/svgalib/exp_svga_G_IN_X.c
gcc -c -g -O -pthread -Wall ../dist/source/svgalib/svgaserv_G_IN_X.c
gcc -D_G_IN_X -c -g -O -pthread -Wall ../dist/source/svgalib/svgafunc.c
gcc -c -g -O -pthread -Wall ../dist/source/svgalib/svgafont.c
gcc -D_G_IN_X -c -g -O -pthread -Wall ../dist/source/svgalib/frbflib.c
gcc -o experixIG *.o -lpthread -lm -lreadline -lcurses -lrt -lusb -lv4l2

Help files (in the experix/dist/help directory and a few in other places)
use ANSI color escape sequences. View these by using 'cat filename' or
'less -R filename'. For editing them you will want the extended nano editor.
This is based on nano-1.2.5, and if that is no longer available from the
nano project, contact the experix maintainer for a copy. The changed files
for nano, and details about it, are in experix_r12/nano-wbm.tgz2 (this has
not changed since release r12, so it is not duplicated in this directory).

---------------------------- General stuff ---------------------------- 

My main building/testing platform is a ThinkPad X60 running Trisquel
"toutatis" (kernel 3.2.0-38-generic-pae). I am also using a Toshiba
Satellite with a Fedora Core 16 (kernel 3.1.0-7.fc16.i686.PAE), a Dell
Latitude with a Fedora Core 6 (kernel 2.6.18), a Compaq Presario with a
Fedora Core 17 (kernel 3.3.4) and other systems from time to time. For
details and installation help, contact me.

My preferred editor is GNU nano with my "embedded highlighting" extension,
and I have used that in the help system. Other editors can be used, but the
help files will be difficult to read if the highlighting escape sequences
are printed out rather than interpreted. The source files for the extended
nano are available from the same archive website that hosts experix.

If the source files seem to lack comments, especially discussion of
functions and variables, look in help/keywords.index and the other keywords
files that it lists. Also see source/structs.h. 

Installation is not automated by a makefile. As long as only one type of
computer and OS is supported, the extra burden of maintaining a makefile
does not seem to be justified. More notes on installation are found in the
file 'install' in the book section of the archive. The authoritative
up-to-date source on program building is near the end of
help/in.experix.hlp.

-------------------------- System setup stuff --------------------------

See hardware/tpad_setup for a detailed setup method applicable to the
Thinkpad X60 with Trisquel, but adapt it to your system.

The present version of svgaserv assumes that a single line of print is
being used for the command prompt and input, so readline should be in
scrolling mode, i.e. the statements
   set horizontal-scroll-mode on
   print-completions-horizontally ON
should be in the file that is indicated by the environment variable
INPUTRC, or the file ~/.inputrc if there is no such environment variable.
Also, due to the partial implementation of console codes in svgaserv, and
unresolved problems with readline, there may be confusing results when
scrolling a long input line and especially when using <CTRL-R> to recall a
previous command (but a recent bug fix has probably corrected this). The
readline "redraw-current-line" command can be used in this situation.
Readline docs don't mention a key binding for that, so it is useful to put
one in inputrc, for example this to use control-F:
   \C-F: redraw-current-line
The double-? help requests attempt to exec nano in another virtual
terminal. This requires permission on the /dev/tty files that are involved.
This is described better in book/install, but the main point is that root
must do a series of commands like
   chmod a+rw /dev/tty7

-------------------------- Trying the program --------------------------

Build experix and svgaserv as described above, then cd to the experix/bin
directory and use one of these commands to start the program (see the help
file dist/help/gh.experix.hlp for details on program starting arguments;
access this from experix by typing ?? ) Here, "experix" means either
"experixXG" or "experixIG".
 
   ./experix -g-      (text mode, without running svgaserv) 
   ./experix          (text mode)
   ./experix -g#      where # is a digit, starts in graphics mode with
                      screen setup as defined by the file screen#
                      (at this point, # could be 0, 1 or 2, and screen0
                      is a link to screen1 or screen2) **NOTE** This will
                      not work in an xterm. Use a text terminal, not an
                      X graphics screen.
   ./experix -h       (show a help message and exit)

(Graphics and text modes can also be changed while the program is running.
See the svlg command.)

There are notes in book/install on use of svgalib, but we are not really
supporting that any more. We use a framebuffer-based svgalib partial
imitation, source/svgalib/frbflib.c.

Debugging experix requires giving these commands to gdb:
  break breakfunc
  handle SIGTTIN SIGTTOU SIGWINCH SIGCHLD SIGUSR1 SIGUSR2 nostop noprint pass
  handle SIGALRM SIGINT SIGQUIT SIGTERM SIGIO SIGABRT nostop noprint pass
  handle SIGUNUSED nostop noprint pass
This is most conveniently done by placing these commands in experix/bin/gdbc
and then using
      gdb experix -x gdbc
to start.
A running experixXG session in graphics mode can be intercepted by using
      gdb experixXG <pid> -x gdbc
in another terminal, where <pid> is the
experixXG process ID. The breakpoint at "breakfunc" is reached by using the
experix command "debug".

This method does not work well with experixIG because stopping experix also
stops the graphics server (since it is just a function in the experixIG
process), and then the terminal switching signals do not work. You can do
this:
      gdb experixIG -x gdbcIG
where gdbcIG has the additional line
      handle SIGSYS SIGPROF nostop noprint pass
then set the startup arguments and run it. Unfortunately, every time you
hit a breakpoint, the graphics screen gets overwritten by the underlying
text. But the big frustration is that while experix is stopped you cannot
switch to other terminals to edit files and so on.

----------------------- Author/Maintainer contact --------------------- 

   William McConnaughey                    314-362-3345
   Biochemistry Dept., Campus Box 8231
   Washington University
   660 So. Euclid Av.
   St. Louis MO 63110

   mcconnau@biochem.wustl.edu

------------------------ the experix/dist tree  -----------------------

The right column has notes, and these codes: c= substantially changed
relative to experix_r12.2; n= new. xpx files with '*' after the name are
shell-executable experix scripts that start experix in graphics mode. You
should have a soft link in experix/bin that points either to experixXG or
experixIG. (Nearly all source files have been changed if just to include
a pthread mutex in command item definitions; such changes are not noted
in this list).

|-- checkfile*                               c
|-- COPYING
|-- experix_icon.gif
|-- experix_icon.ppm.gz
|-- experix_icon.xpx*
|-- experix_logo.gif
|-- experix_logo.ppm.gz
|-- maintainance.xpx
|-- mm_dump_decode.c
|-- readme_r13
|-- hardware/
|   |-- hardware/iron_setup
|   |-- hardware/tpad_setup
|   `-- hardware/XO
|-- help/
|   |-- help/abin.hlp
|   |-- help/amoeba.hlp
|   |-- help/app/
|   |   |-- help/app/poker_card.hlp
|   |   `-- help/app/poker_usb.hlp
|   |-- help/compile_warn                    c
|   |-- help/COPYING -> .COPYING
|   |-- help/def.hlp                         c
|   |-- help/demolist                        c
|   |-- help/exec.hlp
|   |-- help/file.hlp
|   |-- help/fourier.hlp                     c
|   |-- help/fpu_etrack.hlp
|   |-- help/gh.experix.hlp                  c
|   |-- help/globalints.hlp
|   |-- help/graph_ae.hlp
|   |-- help/graph.hlp
|   |-- help/gsmin.hlp
|   |-- help/histogram.hlp
|   |-- help/in.experix.hlp                  c
|   |-- help/interp.hlp                      c
|   |-- help/issues                          c
|   |-- help/keywords.ac                     c
|   |-- help/keywords.dh                     c
|   |-- help/keywords.index                  c
|   |-- help/keywords.ir                     c
|   |-- help/keywords.ss                     c
|   |-- help/keywords.tz
|   |-- help/mandel.hlp
|   |-- help/miscellaneous.hlp
|   |-- help/mod_nano.hlp                    c
|   |-- help/nocolor.c
|   |-- help/Pfit.hlp
|   |-- help/print.hlp
|   |-- help/segfunc.hlp
|   |-- help/sign_on.message                 c
|   |-- help/sock.hlp                        n
|   |-- help/sort.hlp
|   |-- help/ss.arblocks.hlp
|   |-- help/ss.arelemnt.hlp
|   |-- help/ss.binaryop.hlp
|   |-- help/ss.cmndtail.hlp
|   |-- help/ss.comfiles.hlp
|   |-- help/ss.comjumps.hlp
|   |-- help/ss.comquote.hlp
|   |-- help/ss.constant.hlp
|   |-- help/ss.defercom.hlp
|   |-- help/ss.localvar.hlp
|   |-- help/ss.logicops.hlp
|   |-- help/ss.misclops.hlp
|   |-- help/ss.nouseyet.hlp
|   |-- help/ss.numerals.hlp
|   |-- help/ss.stackman.hlp
|   |-- help/ss.statsops.hlp
|   |-- help/ss.threads.hlp
|   |-- help/ss.tilde.hlp
|   |-- help/ss.unaryops.hlp
|   |-- help/ss.valuecmp.hlp
|   |-- help/structs.doc
|   |-- help/svgaplot.hlp
|   |-- help/thread.hlp                      c
|   |-- help/time.hlp
|   |-- help/tthread_mon.hlp
|   |-- help/tu.experix.hlp
|   |-- help/usb.hlp
|   |-- help/xcd.hlp
|   `-- help/xnanorc
|-- into_bin/
|   |-- into_bin/gdbc
|   |-- into_bin/gdbcIG
|   `-- into_bin/readme
|-- maybe_u_need/
|   |-- maybe_u_need/bitops.h
|   `-- maybe_u_need/config.h
|-- obsolete/
|   |-- obsolete/mapper.c
|   |-- obsolete/readme
|   `-- obsolete/xpxdtest.c
|-- source/
|   |-- source/amoeba.c                      c
|   |-- source/amoeba.h
|   |-- source/array2.c                      c
|   |-- source/array.c
|   |-- source/command1.c                    c
|   |-- source/command.c                     c
|   |-- source/defines.h                     c
|   |-- source/display.c                     c
|   |-- source/errors.c                      c
|   |-- source/errors.h                      c
|   |-- source/files.c                       c
|   |-- source/FPUmath.c
|   |-- source/FPUmath.h
|   |-- source/functions.h                   c
|   |-- source/globals.c                     c
|   |-- source/graph.c                       c
|   |-- source/graphx.c
|   |-- source/help.c                        c
|   |-- source/math.c                        c
|   |-- source/math.cx                       n
|   |-- source/mm.c
|   |-- source/numbers.c
|   |-- source/opclist.h
|   |-- source/sockets.c                     n
|   |-- source/stack.c                       c
|   |-- source/structs.h                     c
|   |-- source/threads.c
|   |-- source/try1.c
|   |-- source/updown.c                      c
|   |-- source/usb.c
|   |-- source/vars.c                        c
|   |-- source/xpxdif.c
|   |-- source/xpxdif.h
|   |-- source/xpx_local.h                   c
|   |-- source/svgalib/
|   |   |-- source/svgalib/altcolortest
|   |   |-- source/svgalib/altcolorwrite
|   |   |-- source/svgalib/colors.00
|   |   |-- source/svgalib/colors.xpx
|   |   |-- source/svgalib/exp_svga.c
|   |   |-- source/svgalib/exp_svga_G_IN_X.c
|   |   |-- source/svgalib/filter0.c
|   |   |-- source/svgalib/font11.1
|   |   |-- source/svgalib/font11.1bak
|   |   |-- source/svgalib/font16.0
|   |   |-- source/svgalib/font16.0bak
|   |   |-- source/svgalib/font16c8
|   |   |-- source/svgalib/font16c8bak
|   |   |-- source/svgalib/font18.1
|   |   |-- source/svgalib/font18.1bak
|   |   |-- source/svgalib/font18.2
|   |   |-- source/svgalib/font18.2bak
|   |   |-- source/svgalib/font24.0
|   |   |-- source/svgalib/font24.0bak
|   |   |-- source/svgalib/font24.1
|   |   |-- source/svgalib/font24.1bak
|   |   |-- source/svgalib/font24.2
|   |   |-- source/svgalib/font24.2bak
|   |   |-- source/svgalib/font24c12
|   |   |-- source/svgalib/font24c12bak
|   |   |-- source/svgalib/font7.1
|   |   |-- source/svgalib/font7.1bak
|   |   |-- source/svgalib/frbfdemo.c
|   |   |-- source/svgalib/frbf.h
|   |   |-- source/svgalib/frbflib.c
|   |   |-- source/svgalib/notes
|   |   |-- source/svgalib/read_stdopipe.c
|   |   |-- source/svgalib/rltest.c
|   |   |-- source/svgalib/screen0 -> screen1
|   |   |-- source/svgalib/screen1
|   |   |-- source/svgalib/screen1.1280x1024
|   |   |-- source/svgalib/screen2
|   |   |-- source/svgalib/screen2.1280x1024
|   |   |-- source/svgalib/screen.hlp
|   |   |-- source/svgalib/spectra.xpx
|   |   |-- source/svgalib/ssfgen.c
|   |   |-- source/svgalib/stdcolortest
|   |   |-- source/svgalib/stdcolorwrite
|   |   |-- source/svgalib/svgadefs.h
|   |   |-- source/svgalib/svgafont.c
|   |   |-- source/svgalib/svgafunc.c
|   |   |-- source/svgalib/svgaserv.c
|   |   |-- source/svgalib/svgaserv_G_IN_X.c
|   |   |-- source/svgalib/svgaserv_valid_modes
|   |   `-- source/svgalib/vgatest.c
|   `-- source/xpx_local/
|       |-- source/xpx_local/fpr.c
|       |-- source/xpx_local/fprs.hlp
|       |-- source/xpx_local/fpr.xpx
|       |-- source/xpx_local/ppm.hlp         c
|       |-- source/xpx_local/stretcher.c
|       |-- source/xpx_local/stretcher.hlp
|       |-- source/xpx_local/vgrab.c
|       |-- source/xpx_local/webcam.c        c
|       |-- source/xpx_local/webcam.hlp      c
|       |-- source/xpx_local/zdhist.c
|       `-- source/xpx_local/zdhist.xpx
|-- drivers/
|   |-- drivers/README
|   |-- drivers/card/
|   |   |-- drivers/card/das16/
|   |   |   |-- drivers/card/das16/das160x.h
|   |   |   |-- drivers/card/das16/experix__das1602.c
|   |   |   |-- drivers/card/das16/Makefile
|   |   |   |-- drivers/card/das16/poker_iorec.xpx
|   |   |   `-- drivers/card/das16/start_poker.xpx
|   |   |-- drivers/card/pcdas16/
|   |   |   |-- drivers/card/pcdas16/experix__pcdas16_2.6.29.c
|   |   |   |-- drivers/card/pcdas16/experix__pcdas16_3.c
|   |   |   |-- drivers/card/pcdas16/experix__pcdas16.c
|   |   |   |-- drivers/card/pcdas16/experix__pcdas16_DELL.c
|   |   |   |-- drivers/card/pcdas16/Makefile
|   |   |   |-- drivers/card/pcdas16/pcdas16.h
|   |   |   |-- drivers/card/pcdas16/poker_iorec.xpx
|   |   |   |-- drivers/card/pcdas16/start_poker.xpx
|   |   |   `-- drivers/card/pcdas16/start_stretcher.xpx
|   |   |-- drivers/card/pcm308/
|   |   |   |-- drivers/card/pcm308/experix__pcm308_2.6.29.c
|   |   |   |-- drivers/card/pcm308/experix__pcm308.c
|   |   |   |-- drivers/card/pcm308/Makefile
|   |   |   |-- drivers/card/pcm308/pcm308.h
|   |   |   |-- drivers/card/pcm308/poker_connect
|   |   |   |-- drivers/card/pcm308/poker_iorec.xpx
|   |   |   |-- drivers/card/pcm308/start_poker1.xpx*
|   |   |   `-- drivers/card/pcm308/start_poker2.xpx
|   |   |-- drivers/card/pokerdemo1
|   |   `-- drivers/card/poker.xpx*
|   |-- drivers/misc/
|   |   |-- drivers/misc/burst.txt
|   |   |-- drivers/misc/hello/
|   |   |   |-- drivers/misc/hello/hello.c
|   |   |   |-- drivers/misc/hello/Makefile
|   |   |   `-- drivers/misc/hello/xhello.c
|   |   |-- drivers/misc/missing.c
|   |   |-- drivers/misc/pport/
|   |   |   |-- drivers/misc/pport/experix__pport.c
|   |   |   |-- drivers/misc/pport/Makefile
|   |   |   |-- drivers/misc/pport/notes
|   |   |   |-- drivers/misc/pport/pport.h
|   |   |   |-- drivers/misc/pport/pport.xpx*
|   |   |   `-- drivers/misc/pport/pptype.c
|   |   |-- drivers/misc/prometh/
|   |   |   |-- drivers/misc/prometh/Makefile
|   |   |   |-- drivers/misc/prometh/prometh1.c
|   |   |   |-- drivers/misc/prometh/prometh1.xpx
|   |   |   |-- drivers/misc/prometh/prometh.h
|   |   |   `-- drivers/misc/prometh/README
|   |   |-- drivers/misc/stepper.xpx
|   |   `-- drivers/misc/step.xpx
|   |-- drivers/usb/
|   |   |-- drivers/usb/get_usb_dev_file.c
|   |   `-- drivers/usb/poker.xpx*
|   `-- drivers/userspace/
|       |-- drivers/userspace/fifo1.c
|       |-- drivers/userspace/fifo2.c
|       `-- drivers/userspace/statfiles.c
`-- xpx/
    |-- xpx/arraytrix.xpx
    |-- xpx/bm_ts.xpx
    |-- xpx/bm.xpx
    |-- xpx/calculus.xpx*
    |-- xpx/colorsets.xpx
    |-- xpx/daq.xpx
    |-- xpx/example1.xpx*
    |-- xpx/example2.xpx*
    |-- xpx/funcshell.xpx
    |-- xpx/graftrix.xpx*
    |-- xpx/gtest.xpx
    |-- xpx/ideas.xpx
    |-- xpx/math1.xpx
    |-- xpx/mathtrix.xpx
    `-- xpx/threadwait.xpx

-------------------------- the book directory  ------------------------

 89093 Jan 31  2014 amoeba
 20759 Dec 27  2013 arrays
   912 Sep 28  2013 booktodo
 13509 Oct 10  2013 cellpokercartoon.odg
  3102 Sep 13  2006 circuit_DAS16.pscan
 11270 Oct 10  2013 circuit_PCM308.gz
  3119 Sep 13  2006 circuit_PCM308.pscan
 11402 Aug 27  2007 circuit_poke.gz
 39332 Jul  1 15:59 command                  c
  5865 Dec 27  2013 compare
  7406 Apr 17 09:17 da_demo.xpx
 40886 Dec 27  2013 debugging
  6283 Oct 10  2013 errno.list
 17606 Apr 23 17:04 exec
  7243 Jul  1 16:00 experix.manual           c
 43766 Jul  1 16:02 files                    c
 16896 Jun  4 11:12 graphs                   c
 20774 Jul  1 16:07 help                     c
 36020 Jan 27  2014 install
 22962 Mar 21  2011 LICENSE
  3361 Apr 21 08:25 makedata.c
  3927 Oct 10  2013 mandel
 10073 Dec 27  2013 mathops
  1881 Dec 27  2013 miscellaneous
 16919 Dec 27  2013 numbers
 17190 Apr 15 17:00 performance
 21854 Jun 28 14:45 pictures                 n
 30736 Dec 27  2013 poker
  3101 Sep 14  2006 poker.pscan
 42550 Jun  4 10:18 ptune
  3074 Sep 13  2006 simul1.pscan
 49924 Jun 26 10:45 specialfunctions
 40736 Dec 27  2013 stack
 44767 Jul  1 16:39 starting                 c
 12740 Dec 27  2013 strings
  5985 Mar 20  2013 svgalibnotes
 33755 Dec 27  2013 time
 33406 Dec 27  2013 userspace_daq
 16975 Dec 27  2013 variables
 16014 Dec 27  2013 writing_code


------------------------------------------------------------------------
                 changes since experix_r12.2 16 JUN 2014:
------------------------------------------------------------------------

------------------------ experix policy changes ------------------------

The modified nano editor is now called xnano.

-------------------------- experix api changes -------------------------

The 'sock' command has been added. It can transfer data between net-
connected experix sessions, and do commands remotely in the server session.
Interfaces for operating specialized equipment are to be added.

For each "fft" command, there is now a "fft." command. The new commands
use the kiss_fft method, for which the array length may be any even number,
not restricted to powers of 2. (math.cx math.c functions.h keywords.ac
keywords.ir fourier.hlp ppm.hlp specialfunctions pictures)

New command ppm/X does insertion and extraction of rectangular sections of
2- and 3-dimensional arrays of any data type. (webcam.c ppm.hlp pictures)

New command ppm/I expands a 2-dim. float array by linear interpolation.
(webcam.c ppm.hlp pictures)

------------------------------ bug fixes -------------------------------

The '> operator (extracting name and help strings from a command item) was
not working for some SFT_HAN and SFT_THR objects. (command.c)

---------------------------- non-api changes ---------------------------

Moved from source/xpx_local/webcam.c to source/array2.c; prototypes put
in functions.h and descriptions in keywords: arr_get_rect, arr_put_rect
ppm_xpand renamed arrf_xpand

Checking of ppm file headers and size in webcam.c is tightened up. Comments
are allowed. A mistake in construction of headers has been fixed: linfeed
rather than space after the dimensions.

------------------------- documentation changes ------------------------

interp.hlp: removed reference to non-existent "bm3xpand"

book/pictures: new, moved examples from ppm.hlp and webcam.hlp to here

defines.h: fixed a comment about command queue numbering

sock.hlp: new, the sock command

--------------------------------- xnano --------------------------------

The modified nano is now called xnano, and its associated files are similarly
renamed, such as ~/.xnanorc. These changes are in experix sources help.c and
globals.c, several experix help files and book files and the nano sources.

Shell command capture (the <CTRL>R<CTRL>X sequence) names the buffer with
the command being given, prepended with '# '. For example, typing this:
  <CTRL>R<CTRL>Xls -l *.c
creates a buffer called
  # ls -l *.c

<ALT>F after <CTRL>R (to select loading a file at the edit cursor in the
present buffer rather than making a new buffer) is a one-shot action rather
than a toggle.

<CTRL>R action (without <ALT>F) checks a file by using the unix 'file' command
and issues a warning if it does not look like a text file. The user can then
cancel the request. This is to avoid crashing xnano with certain bad inputs (a
bug that I seem to have introduced and may try to fix someday).
Source: readme_r13, updated 2014-08-30