Home / experix_r10
Name Modified Size InfoDownloads / Week
Parent folder
readme 2013-06-03 31.5 kB
experix_r10_dist.tgz2 2013-06-03 1.0 MB
experix_r10_book.tgz2 2013-06-03 240.3 kB
Totals: 3 Items   1.3 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"


experix_release_r10 2 JUN 2013
---------------------------- In this file ----------------------------

Major addition               integrated one-process construction option              
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

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

There is an option now to build experix as a single process, rather than
putting the graphics in a separate process connected by fifo. There are
probably gains in overall efficiency from this, but other changes that it
causes in behavior of applications that make very frequent graphics calls may
be more important. There is an example and discussion in help/thread.hlp.

New operators and functions have been added for sorting arrays and computing
binomial coefficients and integer factorials.

---------------------------- 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 K, url at bottom of this
document) 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 help/in.experix.hlp. This is to be
considered the authority in program building, and it includes the single-
process option discussed above.

cd ~/
mkdir experix
cd experix
# download the following from Sourceforge:
#   experix_r9_dist.tgz2  experix_r9_helpers.tgz2  experix_r9_book.tgz2
tar -xjf experix_r9_dist.tgz2
tar -xjf experix_r9_book.tgz2
tar -xjf experix_r9_helpers.tgz2
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
Help files (the experix/dist/help directory) 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 (contact info in this file). The changed files for nano, and details
about it, are in experix_release_r9/experix_r9_helpers.tgz2 (this has not
changed since release r9, so it is not duplicated in this directory).

---------------------------- 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?   in source files 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  -----------------------
.
|-- ./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
|   |   |   `-- ./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/README
|   |-- ./drivers/usb
|   |   |-- ./drivers/usb/get_usb_dev_file.c
|   |   |-- ./drivers/usb/old_ptune
|   |   `-- ./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
|   |   |-- ./help/app/poker_card.hlp
|   |   `-- ./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
|   |-- ./help/gh.experix.hlp
|   |-- ./help/globalints.hlp
|   |-- ./help/graph1.hlp
|   |-- ./help/gsmin.hlp
|   |-- ./help/histogram.hlp
|   |-- ./help/in.experix.hlp
|   |-- ./help/interp.hlp
|   |-- ./help/keywords.ac
|   |-- ./help/keywords.dh
|   |-- ./help/keywords.index
|   |-- ./help/keywords.ir
|   |-- ./help/keywords.ss
|   |-- ./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
|   |-- ./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
|   |-- ./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
|-- ./readme_r10
|-- ./slide.gif
|-- ./source
|   |-- ./source/amoeba.c
|   |-- ./source/amoeba.h
|   |-- ./source/array2.c
|   |-- ./source/array.c
|   |-- ./source/command1.c
|   |-- ./source/command.c
|   |-- ./source/defines.h
|   |-- ./source/display.c
|   |-- ./source/errors.c
|   |-- ./source/errors.h
|   |-- ./source/files.c
|   |-- ./source/FPUmath.c
|   |-- ./source/FPUmath.h
|   |-- ./source/functions.h
|   |-- ./source/globals.c
|   |-- ./source/graph1.c
|   |-- ./source/help.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
|   |-- ./source/stack.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
|   |   |-- ./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
|   |   |-- ./source/svgalib/screen5
|   |   |-- ./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
|   |-- ./source/threads.c
|   |-- ./source/try1.c
|   |-- ./source/updown.c
|   |-- ./source/usb.c
|   |-- ./source/vars.c
|   |-- ./source/xpxdif.c
|   `-- ./source/xpxdif.h
`-- ./xpx
    |-- ./xpx/arraytrix.xpx
    |-- ./xpx/bm.xpx
    |-- ./xpx/calculus.xpx
    |-- ./xpx/daq.xpx
    |-- ./xpx/example1.xpx
    |-- ./xpx/example2.xpx
    |-- ./xpx/example3.xpx
    |-- ./xpx/funcshell.xpx
    |-- ./xpx/graftrix.xpx
    |-- ./xpx/gtest.xpx
    |-- ./xpx/ideas.xpx
    |-- ./xpx/math1.xpx
    `-- ./xpx/mathtrix.xpx

21 directories, 237 files

------------------------------- Changelog ----------------------------- 
Changes since experix_release_r9 20 MAR 2013:

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

The vt switching signals will always be SIGUNUSED and SIGPROF. The -u startup
option (which seems to have been coded incorrectly) is removed. Note that gdb
uses the synonum "SIGSYS" for "SIGUNUSED". ( defines.h
frbf.h frbflib.c svgaserv.c threads.c try1.c updown.c)

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

New help operator  ?/n  opens help/mod_nano.hlp (on modified nano)
(source/help.c  help/gh.experix.hlp  help/mod_nano.hlp)

New command function 'sort' to sort double-precision arrays
(array2.c  math.c  functions.h  sort.hlp  in.experix.hlp  keywords.dh
keywords.ir  keywords.index )

New operator: .! computes integer factorials of numbers
( FPUmath.h  opclist.h  FPUmath.c  command.c  globals.c  numbers.c
updown.c  ss.unaryops.hlp  in.experix.hlp )

New operator: %B computes binomial coefficients.
( FPUmath.h  opclist.h  command.c  numbers.c  FPUmath.c
in.experix.hlp  ss.unaryops.hlp  ss.binaryop.hlp )

experix starting option -u has been removed (see policy changes, above)

svgaserv W command improved, to process "~/" filepaths (svgaserv.c)

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

There is now an option to build experix with its graphics integrated into
one process. The two methods of building experix are described in
help/in.experix.hlp and this description is to be kept up-to-date as the
authoritative program-build instructions. The new method uses some new
source files, identified by "_G_IN_X" in their names, and some other
sources are compiled with -D_G_IN_X when using this method. There is a
long discussion and comparison of the methods in help/thread.hlp.

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

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

There was a persistent problem of getting stuck in certain circumstances
in the pthread_cond_wait at command.c:175. Changed it to timedwait with
1-second timeout.

The .gam operator was doing exp(gamma(x)) because the library gamma function
was really ln(gamma) and the man page was not directing users to tgamma.
Now .gam does tgamma(x).  (numbers.c)

In source/svgalib/frbflib.c:vga_setegacolor() the first '=' should be '=='.
(Who cares? we really should get rid of the ega stuff.)

A multi-threading demo (xpx/threads6.xpx) apparently issued bad 'I' commmands
and other garbage svgaserv, infrequently and irregularly, maybe due to a
thread synchronization issue. That caused deletion of the consoleVDR so that
the prompt line disappeared. The program still responded to commands, and the
'K' svgaserv command restored the prompt line. This undesirable response to
bad 'I' commands has been removed, but the demo continues to generate bad 'I'
and the other garbage, as revealed by some special debugging code. No such
misbehavior was found in the _G_IN_X version.  (svgaserv.c)

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

in source/svgalib/exp_svga.c the code to make a /tmp file for recording any
errors in system calls has been #ifdef'd with EXP_SVGA_SYSERR. If this is not
in the compile options (of this file only) there is no checking of return
status on system calls. (we have not seen any errors for a long time)

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

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

The dpokr command in drivers/xpx/poker.xpx has imperfections. Latest
fixes: made dpokr/w and dpokr/r preserve the ordinal file number in
pokrvars[18]

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

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

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

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

svgaserv.c: updated the explanation at case 'Q'

in.experix.hlp contains the program build instructions. This will be kept
updated as the authority on this subject.

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

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

FPUmath.h: prototypes of math library functions were in here for some
strange reason. Removed.

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

in.experix.hlp
svgaserv.c
try1.c

Source: readme, updated 2013-06-03