Home / experix_r11
Name Modified Size InfoDownloads / Week
Parent folder
experix_r11_update1.tgz2 2013-10-14 319.3 kB
readme_r11 2013-10-14 39.8 kB
experix_r11_dist.tgz2 2013-08-05 1.1 MB
experix_r11_book.tgz2 2013-08-05 241.3 kB
Totals: 4 Items   1.7 MB 0
This file is part of experix.
Copyright (C) 2004-2013 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-2013" 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"

---------------------------- In this file ----------------------------

experix_r11_update1.tgz2     update to experix_release_r11
Major additions              command-line mutex operators
                             graph command nonlinear axes
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
BUGS and SHORTCOMINGS and NOT DONE
Author contact
Dist                         tree of this distribution
Changelog                    relative to experix_release_r9 20 MAR 2013


experix_r11_update1.tgz2 11 AUG 2013
is an update to be applied on experix_release_r11, which is discussed below.
---------------------------- In this file ----------------------------
readme  (shell script and info)
dist/help/abin.hlp        dist/help/graph1.hlp     dist/help/in.experix.hlp
dist/help/interp.hlp      dist/help/keywords.ac    dist/help/keywords.dh
dist/help/keywords.index  dist/help/keywords.ir    dist/help/keywords.ss
dist/help/keywords.tz     dist/help/thread.hlp     dist/help/compile_warn
dist/source/defines.h     dist/source/functions.h  dist/source/globals.c
dist/source/graph1.c      dist/source/graph1x.c    dist/source/display.c
dist/xpx/bm_ts.xpx        dist/xpx/bm.xpx          dist/xpx/calculus.xpx
dist/xpx/graftrix.xpx     dist/xpx/gtest.xpx       dist/xpx/ideas.xpx
dist/drivers/card/poker.xpx  (as poker_card.xpx)
dist/drivers/usb/poker.xpx   (as poker_usb.xpx)
dist/drivers/misc/pport/pport.xpx
dist/drivers/misc/pport/pport.xpx
dist/drivers/card/pcm308/start_poker2.xpx
book/amoeba    book/graphs    book/specialfunctions    book/starting
-------------------------- Applying the update ------------------------
1) If not done yet, download and expand experix_release_r11 in your experix
   directory. Not necessary to build the program at this point.
2) Download experix_r11_update1.tgz2 to your /tmp directory and expand it.
   It makes the directory /tmp/xup containing the files listed above.
3) Check that the directories used in /tmp/xup/readme are right for your
   installation, and execute that file.
4) Build experix, following instructions in experix/dist/help/in.experix.hlp
-------------------------- What the update does -----------------------
The graph command is improved with better axis labelling, and extended with
nonlinear axis functions. Here are the details:
-------------------------- experix api changes -------------------------
The graph command has been overhauled and extended with nonlinear axis
options. See the description in graph1.hlp. This involves the following
API changes:
These command options are removed because they were not well specified
and not getting used, and what they were supposed to do is better done by
manipulating the graph control arrays directly.   > : ;
The 'Igsa' control array has been changed in several places. This requires
examination of all xpx files (has been done in this release, except for
some old ones in drivers/ that are not being actively maintained). The new
and old Igsa definitions are presented in graph1.hlp.
The graph command accepts option sequences starting with '%' to specify
nonlinear axis transforms. These put transform numbers in Igsa[10] and set
Igsa[0] bit 21. When an Igsa with these items set is used in an ordinary
graph command, it applies the axis transforms.
The method of locating and labelling axis tic marks has changed. The new
method spreads tics evenly over the transformed axis and then adjusts them
to hit nearby un-transformed values that have a low number of significant
digits. Labels are located to avoid "collisions", and given in un-transformed
axis values. Labelled tics can have a different length, to better distinguish
them.
Igsa[0] bits allow many options for placement and direction of the labelled
axes.
The axes (but not labels) are copied over to the opposite sides of the graph
to make it all more readable. This can be suppressed by an Igsa[0] bit (when
speed is critical).
Formerly, graph/S with one array with an Fgsa like this: [ 0 0 0 0 lo hi 0 0 ]
would work "right", effectively filling in Fgsa[1] with N-1. Now the command
hangs for a long time and does not make a good graph. It is necessary to put
index limits in Fgsa[0] and [1].
The changes summarized here affect these files: graph1.c graph1x.c graph1.hlp
defines.h functions.h keywords.*
Accomodating them affects these files: all files in the drivers and xpx
directories that do graphics; all book chapters that use graph commands.
---------------------------- non-api changes ---------------------------
Removed the "trying_logplot" feature trial. (graph1.c keywords.ac)
------------------------------ bug fixes -------------------------------
Initial linefeed on command string exerpts was taken out by mistake,
causing these to fail to display in graphics mode (display.c)
------------------------------ xpx changes -----------------------------
See the discussion of graph command changes under "api changes".
--------------------------- auxiliary changes --------------------------
In the two program build methods (see in.experix.hlp) the differences
that were previously in graph1.c are now in graph1x.c.
------------------------- documentation changes ------------------------
See the discussion of graph command changes under "api changes".
----------------------------- minor issues -----------------------------
drivers/card/pcm308/start_poker2.xpx: removed a redundant command file load



experix_release_r11 2 AUG 2013

-------------------------- Major additions ---------------------------

Mutex operators have been introduced to protect critical sections of
commands. Their use is discussed in help/thread.hlp.

Log file organization has been improved by using a mutex to prevent
interrup- tion of long entries, and entries are identified by the thread of
origin.

---------------------------- 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 800 KB) 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 (archive about 180K) and a computational application
(FIDA, about 50K).

The 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 file-control blocks. The 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 the stack 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 experix_r9_helpers.tgz2 in the experix_release_r10
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. 

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 is for a system that does not yet have experix. It is instructions to
establish the experix directory under the user's top directory, download
and unpack the distribution files, and build experix and svgaserv. Then
experix will work in text mode. Getting it to work in graphics mode will
require selecting the right screen file, or making one, and may require
more effort, depending on your system. See book/install 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 in.experix.hlp. That is to be
considered the authority in program building, and it includes the single-
process option discussed above. After expanding the archives as directed
here, that file is  ~/experix/dist/help/in.experix.hlp

cd ~/
mkdir experix
cd experix
# download the following from Sourceforge (replace ## with the value for
# the latest version of each file):
# experix distribution:  experix_r##_dist.tgz2
# experix book:          experix_r##_book.tgz2
# helpers:               experix_r##_helpers.tgz2
# Expand these archives (again, replace ## with correct version number)
tar -xjf experix_r##_dist.tgz2
tar -xjf experix_r##_book.tgz2
tar -xjf experix_r##_helpers.tgz2
# If there are updates with the same _r##_ as the experix_r##_dist.tgz2,
# they are called  experix_r##_update#.tgz2. For each of these in order,
# that is update1, update2, etc., download and expand in /tmp and follow
# the instructions in its readme file. It will replace selected files
# under experix/.
# Build experix:
cd ~/experix
mkdir bin
cd bin
gcc -c -g -O -Wall ../dist/source/models/zdhist.c
gcc -c -g -O -Wall ../dist/source/svgalib/exp_svga.c
gcc -c -g -O -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.
gcc -o experix *.o -lpthread -lm -lreadline -lcurses -lrt
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


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

My main building/testing platform is a Toshiba Satellite with a Fedora Core
12 (kernel 2.6.29) installation. I am also using a Dell Latitude with a
Fedora Core 6 (kernel 2.6.18) installation, a Compaq Presario with a Fedora
Core 16 (kernel 3.3.4) installation 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.

The organization of all this is provisional. I have put my experix
directory tree in the user's home directory. If that is changed, all
strings in source/globals.c that contain '~' need to be updated.

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. 

Special maintainance markers:
?M?   in the source, documentation and help files: examine issues there
?U?   means the compiler gave uninitialized variable warning. 
?T?   means something done in a temporary way
?A?   means something is architecture-specific
?B?   means a particular byte order (hi- or lo-endian) is assumed
?R?   means something requires root privilege
?X?   means something put in for debugging a specific problem
?H?   means thread-unsafe item we should think about
But I don't guarantee that all such places are marked.

Installation is not automated by a makefile. As long as only one type of
computer is supported, the extra burden of maintaining a makefile does not
seem to be justified. Installation instructions are found in the file
install in the book section of the archive.

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

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. 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 o+rw /dev/tty
   chmod o+rw /dev/tty8

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

Build experix and svgaserv as described in book/install, 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 ?? )
   ./experix -g-      (text mode, without running svgaserv) 
   ./experix          (text mode)
   ./experix -g#      where # is a digit, starts svgaserv with mode and
                      graphics setup as defined by the file screen#
   ./experix -h       (show help message and exit)
(Graphics and text modes can also be changed while the program is running.
See the svlg command.)
Note on svgalib's use of signals for console switching: The documentation
says SIGUSR1 and SIGUSR2 are used, but SIGUNUSED and SIGPROF might be
substi- tuted. I have made experix catch SIGUSR1 and SIGUSR2 for use by the
'signal' command, since my svgalib is using SIGUNUSED and SIGPROF. If
console switch- ing does not work, try starting experix with the 'u'
option, for example "./experix g1 u" so that it catches SIGUNUSED and
SIGPROF. Also, I found console switching to be broken in svgalib-1.9.18
(and on one computer this version totally crashed). I am using
svgalib-1.4.3. (The date for this note is 10 August 2004.)  (26 May 2008) I
have it working with svgalib-1.9.25. But now I prefer to use my
framebuffer-based svgaserv imitation, frbflib, which is in the main source
tarball.
At present we only have graphics support for svgalib (or frbflib). If you
run the program in an xterm and give a 'g' argument, it will start in text
mode and refuse to enter graphics mode.
When the program is running under a debugger, a debug break can be placed
at breakfunc. Then the program command "debug" returns control to the
debugger, and the debugger's "continue" command returns you to the experix
prompt. You should also specify handling for the signals that are used by
experix and svgaserv. You can use    gdb experix -x gdbc    where the file
gdbc contains:
  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
The archive includes command files that give an introduction to most of the
program's features. Load a command file, for example by giving the command
(assuming the working directory is experix/bin)
   &../dist/drivers/pport
This starts experix and runs the file pport.xpx. Follow the instructions in
that to see a demonstration of interrupt-driven "data acquisition" from the
parallel port, using the experix character device interface.
More demonstrations are available, for example--
Array math; graph plotting; small experix programs:
   dist/xpx/gtest.xpx    dist/xpx/calculus.xpx
Timed commands:
   dist/xpx/daq.xpx
Data acquisition using the MeasurementComputing PC-CARD-DAS16/16-AO or the
SuperLogics PCM308 (discontinued and not available); this is specialized
for the cell poker, but can also be used for more general purposes:
   dist/drivers/poker.xpx
Physical model simulation and data fitting:
   dist/source/models/fpr.xpx

------------------ BUGS and SHORTCOMINGS and NOT DONE ---------------------

Using console framebuffer graphics will be a problem for some people. An X
implimentation would be a very good idea. Meanwhile, it is possible to
switch between an X session and an experix-svgalib session and any text
sessions that might be going on by using the control-alt-F keys (but see
the note about svgalib versions under "trying the program" above). I have
not explored all the issues that are involved, but it workes on my laptops,
and on my PC104 system and on a desktop.

The svgalib implementation of svgaserv suspends the experix session when
its console is not the displayed one and it tries to do graphics. There are
notes about this in the svgalib documentation that I need to examine.
However, I am now using my frbflib, which does not have this problem and is
much more reliable and much faster with its v.c. switching.

When experix is started in text-mode in an X-term under gnome, there is a
problem with getting the '??...' help sessions to display properly.

----------------------- 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  -----------------------
1st column:  c= changed  n= new  r= replacement
  .
  |-- ./COPYING
  |-- ./drivers/
  |   |-- ./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*
c |   |   |   `-- ./drivers/card/pcm308/start_poker2.xpx
  |   |   |-- ./drivers/card/pokerdemo1
c |   |   `-- ./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/README
  |   |-- ./drivers/usb/
  |   |   |-- ./drivers/usb/get_usb_dev_file.c
c |   |   `-- ./drivers/usb/poker.xpx*
  |   `-- ./drivers/userspace/
  |       |-- ./drivers/userspace/fifo1.c
  |       |-- ./drivers/userspace/fifo2.c
  |       `-- ./drivers/userspace/statfiles.c
  |-- ./experix_icon.ppm.gz
  |-- ./experix_icon.xpx*
  |-- ./experix_logo.ppm.gz
  |-- ./grepit*
  |-- ./hardware/
  |   `-- ./hardware/XO
  |-- ./help/
  |   |-- ./help/abin.hlp
  |   |-- ./help/amoeba.hlp
  |   |-- ./help/app/
c |   |   |-- ./help/app/poker_card.hlp
c |   |   `-- ./help/app/poker_usb.hlp
  |   |-- ./help/compile_warn
  |   |-- ./help/COPYING -> ../COPYING
  |   |-- ./help/def.hlp
  |   |-- ./help/exec.hlp
  |   |-- ./help/file.hlp
  |   |-- ./help/fourier.hlp
  |   |-- ./help/fpu_etrack.hlp
c |   |-- ./help/gh.experix.hlp
  |   |-- ./help/globalints.hlp
  |   |-- ./help/graph1.hlp
  |   |-- ./help/gsmin.hlp
  |   |-- ./help/histogram.hlp
c |   |-- ./help/in.experix.hlp
  |   |-- ./help/interp.hlp
  |   |-- ./help/keywords.ac
  |   |-- ./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
  |   |-- ./help/nocolor.c
  |   |-- ./help/Pfit.hlp
  |   |-- ./help/print.hlp
  |   |-- ./help/segfunc.hlp
  |   |-- ./help/sign_on.message
  |   |-- ./help/sort.hlp
  |   |-- ./help/ss.arblocks.hlp
  |   |-- ./help/ss.arelemnt.hlp
  |   |-- ./help/ss.binaryop.hlp
  |   |-- ./help/ss.cmndtail.hlp
c |   |-- ./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
c |   |-- ./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
c |   |-- ./help/thread.hlp
  |   |-- ./help/time.hlp
  |   |-- ./help/tthread_mon.hlp
  |   |-- ./help/tu.experix.hlp
  |   |-- ./help/usb.hlp
  |   |-- ./help/xcd_debug.hlp
  |   `-- ./help/xcd.hlp
  |-- ./into_bin/
  |   |-- ./into_bin/cleanup*
  |   |-- ./into_bin/gdbc
  |   `-- ./into_bin/readme
  |-- ./maintainance.xpx
  |-- ./maybe_u_need/
  |   |-- ./maybe_u_need/bitops.h
  |   `-- ./maybe_u_need/config.h
  |-- ./mm_dump_decode.c
  |-- ./obsolete/
  |   |-- ./obsolete/mapper.c
  |   |-- ./obsolete/readme
  |   `-- ./obsolete/xpxdtest.c
  |-- ./performance
r |-- ./readme_r11                     replaces readme_r10
  |-- ./slide.gif
  |-- ./source/
c |   |-- ./source/amoeba.c
  |   |-- ./source/amoeba.h
  |   |-- ./source/array2.c
c |   |-- ./source/array.c
c |   |-- ./source/command1.c
c |   |-- ./source/command.c
c |   |-- ./source/defines.h
c |   |-- ./source/display.c
c |   |-- ./source/errors.c
  |   |-- ./source/errors.h
c |   |-- ./source/files.c
  |   |-- ./source/FPUmath.c
  |   |-- ./source/FPUmath.h
c |   |-- ./source/functions.h
c |   |-- ./source/globals.c
  |   |-- ./source/graph1.c
c |   |-- ./source/help.c
c |   |-- ./source/math.c
  |   |-- ./source/mm.c
  |   |-- ./source/models/
  |   |   |-- ./source/models/fpr.c
  |   |   |-- ./source/models/fprs.hlp
  |   |   |-- ./source/models/fpr.xpx
  |   |   |-- ./source/models/zdhist.c
  |   |   `-- ./source/models/zdhist.xpx
  |   |-- ./source/numbers.c
  |   |-- ./source/opclist.h
c |   |-- ./source/stack.c
c |   |-- ./source/structs.h
  |   |-- ./source/svgalib/
  |   |   |-- ./source/svgalib/altcolortest
  |   |   |-- ./source/svgalib/altcolorwrite
  |   |   |-- ./source/svgalib/colors.00
  |   |   |-- ./source/svgalib/colors.xpx
  |   |   |-- ./source/svgalib/exp_svga.c
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/screen0 -> screen6
  |   |   |-- ./source/svgalib/screen1
  |   |   |-- ./source/svgalib/screen2
  |   |   |-- ./source/svgalib/screen_23
  |   |   |-- ./source/svgalib/screen3
  |   |   |-- ./source/svgalib/screen4
c |   |   |-- ./source/svgalib/screen5
c |   |   |-- ./source/svgalib/screen6
  |   |   |-- ./source/svgalib/screen_7
  |   |   |-- ./source/svgalib/screen8
  |   |   |-- ./source/svgalib/screen9
  |   |   |-- ./source/svgalib/screenI
  |   |   |-- ./source/svgalib/screenS
  |   |   |-- ./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_debug.c
  |   |   |-- ./source/svgalib/svgaserv_G_IN_X.c
  |   |   |-- ./source/svgalib/svgaserv_valid_modes
  |   |   `-- ./source/svgalib/vgatest.c
c |   |-- ./source/threads.c
c |   |-- ./source/try1.c
c |   |-- ./source/updown.c
c |   |-- ./source/usb.c
  |   |-- ./source/vars.c
c |   |-- ./source/xpxdif.c
  |   `-- ./source/xpxdif.h
  `-- ./xpx/
      |-- ./xpx/arraytrix.xpx
n     |-- ./xpx/bm_ts.xpx
c     |-- ./xpx/bm.xpx
c     |-- ./xpx/calculus.xpx*
      |-- ./xpx/daq.xpx
      |-- ./xpx/example1.xpx*
      |-- ./xpx/example2.xpx*
      |-- ./xpx/example3.xpx
      |-- ./xpx/funcshell.xpx
c     |-- ./xpx/graftrix.xpx*
      |-- ./xpx/gtest.xpx
      |-- ./xpx/ideas.xpx
      |-- ./xpx/math1.xpx
      `-- ./xpx/mathtrix.xpx

21 directories, 235 files

-------------------------- the book directory  ------------------------
 88932 Jun  5 14:31 amoeba
 20759 Mar 20 22:26 arrays
   824 Mar 20 22:25 booktodo
 13509 Apr 29 15:36 cellpokercartoon.odg
  3102 Sep 13  2006 circuit_DAS16.pscan
 11270 Mar 19 13:32 circuit_PCM308.gz
  3119 Sep 13  2006 circuit_PCM308.pscan
 11402 Aug 27  2007 circuit_poke.gz
 39332 Mar 20 22:26 command
  5865 Mar 20 22:26 compare
 40886 Mar 20 22:26 debugging
  6283 Mar 17  2011 errno.list
  8569 Jan  2  2012 exec
  6863 Mar 20 22:26 experix.manual
 40165 Mar 20 22:25 files
 16322 Mar 20 22:25 graphs
 20823 Mar 20 22:25 help
 35479 Feb  3 19:38 install
 22962 Mar 21  2011 LICENSE
  3927 Oct 26  2012 mandel
 10073 Mar 20 22:25 mathops
  1881 Mar 20 22:25 miscellaneous
 16919 Mar 20 22:25 numbers
 30736 Aug  1 11:45 poker
  3101 Sep 14  2006 poker.pscan
 41727 Mar 20 22:25 ptune
  3074 Sep 13  2006 simul1.pscan
 37252 Mar 20 22:25 specialfunctions
 40736 Mar 20 22:25 stack
 43346 Mar 20 22:25 starting
 12740 Mar 20 22:25 strings
  5985 Mar 20 22:25 svgalibnotes
 33755 Mar 20 22:24 time
 33406 Mar 20 22:24 userspace_daq
 16975 Mar 20 22:24 variables
 16014 Mar 20 22:24 writing_code

------------------------------- Changelog ----------------------------- 
Changes since experix_release_r10 2 JUN 2013:

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

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

New operators implement command-line mutexes to protect critical sections
in threaded operations:  |Xa## |Xr## |Xi## |Xd##
(defines.h command.c globals.c threads.c thread.hlp in.experix.hlp
ss.misclops.hlp keywords.tz keywords.index)

Pre-processing of command files is now done in the xcomment function. This
makes a stripped version of the command file (with comments and trailing
whitespace removed). The stripped file is deleted after execution. New
versions of the & operator have been made: &, and &&, do not delete the
stripped file, and &; and &&; make the stripped file but do not execute it. 
Command files can have block comments introduced by ;;+ and ended by ;;-
with nesting. These can span lines. They do not work in command lines from
the keyboard.
(functions.h command.c command1.c in.experix.hlp keywords.index
keywords.tz ss.comfiles.hlp)

Semantics of quoted strings in command files has been altered, so that a
string is ended by end-of-line (instead of allowing them to span lines).
Function lenQss has been changed to support this. (command1.c keywords.ir
ss.comfiles.hlp)

A section boundary in an xpx file (line starting ;;sb) is no longer a help
display page-break. (help.c gh.experix.hlp)

------------------------- graphics system changes ----------------------

----------------- changes to driver interface (xcd stuff) --------------

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

In experixIG the fontsize array was not getting initialized because the
statement for that was left out of exp_svga_G_IN_X.c. This made the
labelling of graph axes a little bit different, skipping more ticmarks.

The slclass function was putting a non-NULL pointer in .dinfo for numerical
variables that are not arrays. It caused the \;d operator to make a huge
malloC and then crash in memcpy.  (stack.c)

In processing quoted strings in command lines, escaped quotes (the 2-char.
sequence '\"') were being kept that way. Fix: StackPush2 uses bit 7 of the
type argument as an instruction to edit '\"' into '"'. This is used in the
at 'mcs "' in the main command loop. (stack.c command.c keywords.ss)

Processing of the \" operator in StackOp was going past end of string in
sections from command files. (command1.c)

---------------------- bug detection code changes ----------------------

Error-checking the calls to pthread_mutex_lock and pthread_mutex_unlock
has been made optional, via the MUTEXCHECK macro in defines.h.
(defines.h amoeba.c command.c display.c help.c math.c threads.c updown.c
xpxdif.c )

Error detection for the random number array operators and random number use
in the amoeba procedure is now limited to incrementing a counter in
globalints[17] (gi_RANDOM_ERROR). We never saw any errors, and if they
start happening they should be apparent in the results and we probably
don't want a billion error messages about it. (defines.h globals.c amoeba.c
array.c)

See the thread-identification added to messages in the log file, described
under non-api changes.

---------------------- supported interface issues ----------------------

---------------------------- driver issues -----------------------------

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

Every thread upon starting makes a message in the logfile by calling logtid
(in updown.c) to show its pthread_self.
Messages printed to the logfile (mainly by the lineout function) are
(mostly) thread-protected by lineout_mutex and thread-identified by calling
logtid or doing something similar.
Long messages, such as stack printouts, are thread-protected en bloc.
show_errno and show_usberr include the pthread-self in their messages.
Error printouts in the log file have a header line showing the command ID
string, the pthread_self, which stack the command used (and is the one in
the printout), and the origin of the command (CQEf_source). (updown.c
command.c errors.c threads.c functions.h keywords.ir keywords.index)

------------------------------ xpx changes -----------------------------

Added to math1.xpx:  commands confrac and confracs for evaluating
continued fractions

The poker app commands for setting up screen geometry have been re-worked,
giving much greater flexibility.
usb branch: command=graphset_pokr
files: drivers/usb/poker.xpx  help/app/poker_usb.hlp

A thread-safe version of xpx/bm.xpx has been made:  xpx/bm_ts.xpx

--------------------------- auxiliary changes --------------------------

To conform to recommendations in Kerrisk ch. 29, some #defines were
consolidated into structs.h and -pthread was added to the compilation
switches. Note that Kerrisk seems to be saying to use -pthread in the
compilation and not -lpthread in the linking, but I find that it will
not link without -lpthread, maybe because I am doing the link in a
separate command. Error messages:
   undefined reference to symbol 'pthread_create@@GLIBC_2.1'
   /usr/bin/ld: note: 'pthread_create@@GLIBC_2.1' is defined in DSO
      /lib/libpthread.so.0
   /lib/libpthread.so.0: could not read symbols: Invalid operation
These changes don't seem to make any difference.
(structs.h files.c updown.c in.experix.hlp)

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

Some explanations in calculus.xpx have been updated for a change in the
interp function that was made previously.

Many files in the help directory have been updated, as noted.

Operation with a real USB device is presented in book/poker.

book/amoeba has been re-worked.

----------------------------- major issues -----------------------------

----------------------------- minor issues -----------------------------

VDR coordinates have been slightly adjusted to make it work right in
1024x768 screens. Affected files: in source/svgalib, screen5 screen6; in
xpx: graftrix.xpx calculus.xpx; help/thread.hlp; drivers/usb/poker.xpx

try1.c: corrected a comment

----------------------------- trivial fixes ----------------------------

Source: readme_r11, updated 2013-10-14