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_r12.2 16 JUN 2014
---------------------------- In this file ----------------------------
Major additions/changes relative to experix_r12.1
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.1
and updates applied to that
--------------------- Major additions and changes ---------------------
New commands: 'webcam' operates a webcam, and 'ppm' manipulates ppm type
image files. The help files for these include demos that operate the
webcam and analyze the data (via fft and other methods) and display the
pictures. This is experimental and subject to change, and at this time
it is included or not, under control of a compiler directive.
Display geometry is auto-detected by examining /sys files. The screen
setup files source/svgalib/screen1 and the like are written to be usable
with different screen geometries.
The non-enforced requirement that experix be in the 'bear' directory has
been reviewed and removed, so now it should work when placed in any
directory as long as the working directory of an experix session is
experix/bin. This makes it easy to maintain parallel installations so
that changes can be tested in one before messing up the others.
---------------------------- 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.1; 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* n
|-- 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_r12.2
|-- hardware/
| |-- hardware/iron_setup n
| |-- hardware/tpad_setup c
| `-- 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
| |-- help/demolist
| |-- help/exec.hlp
| |-- help/file.hlp c
| |-- help/fourier.hlp c
| |-- help/fpu_etrack.hlp
| |-- help/gh.experix.hlp
| |-- help/globalints.hlp
| |-- help/graph_ae.hlp
| |-- help/graph.hlp
| |-- help/gsmin.hlp
| |-- help/histogram.hlp
| |-- help/in.experix.hlp c
| |-- help/interp.hlp
| |-- help/issues c
| |-- help/keywords.ac
| |-- help/keywords.dh
| |-- help/keywords.index
| |-- help/keywords.ir
| |-- help/keywords.ss
| |-- help/keywords.tz
| |-- help/mandel.hlp c
| |-- help/miscellaneous.hlp
| |-- help/mod_nano.hlp
| |-- help/nanorc
| |-- help/nocolor.c
| |-- help/Pfit.hlp
| |-- help/print.hlp
| |-- help/segfunc.hlp
| |-- help/sign_on.message c
| |-- 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 c
| |-- 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
|-- 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
| |-- 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/graph.c
| |-- source/graphx.c
| |-- source/help.c
| |-- source/math.c
| |-- source/mm.c
| |-- source/numbers.c
| |-- source/opclist.h
| |-- source/stack.c
| |-- source/structs.h
| |-- source/threads.c
| |-- source/try1.c
| |-- source/updown.c
| |-- source/usb.c
| |-- source/vars.c
| |-- source/xpxdif.c
| |-- source/xpxdif.h
| |-- source/xpx_local.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 c
| | |-- source/svgalib/frbflib.c c
| | |-- source/svgalib/notes
| | |-- source/svgalib/read_stdopipe.c
| | |-- source/svgalib/rltest.c
| | |-- source/svgalib/screen0 -> screen1
| | |-- source/svgalib/screen1 c
| | |-- source/svgalib/screen1.1280x1024 n
| | |-- source/svgalib/screen2 c
| | |-- source/svgalib/screen2.1280x1024 n
| | |-- 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 c
| | |-- source/svgalib/svgaserv_G_IN_X.c 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 n
| |-- source/xpx_local/stretcher.c
| |-- source/xpx_local/stretcher.hlp
| |-- source/xpx_local/vgrab.c n
| |-- source/xpx_local/webcam.c n
| |-- source/xpx_local/webcam.hlp n
| |-- 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 c
|-- xpx/bm.xpx c
|-- xpx/calculus.xpx* c
|-- xpx/colorsets.xpx
|-- xpx/daq.xpx
|-- xpx/example1.xpx*
|-- xpx/example2.xpx*
|-- xpx/funcshell.xpx
|-- xpx/graftrix.xpx* c
|-- xpx/gtest.xpx
|-- xpx/ideas.xpx
|-- xpx/math1.xpx
|-- xpx/mathtrix.xpx
`-- xpx/threadwait.xpx
-------------------------- the book directory ------------------------
89093 Jan 31 08:55 amoeba
20759 Dec 27 15:34 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
39331 Jan 27 09:57 command
5865 Dec 27 15:34 compare
7406 Apr 17 09:17 da_demo.xpx
40886 Dec 27 15:34 debugging
6283 Oct 10 2013 errno.list
17606 Apr 23 17:04 exec c
6863 Mar 20 2013 experix.manual
43748 Feb 3 07:54 files
16896 Jun 4 11:12 graphs c
20823 Dec 27 15:34 help
36020 Jan 27 09:59 install
22962 Mar 21 2011 LICENSE
3361 Apr 21 08:25 makedata.c n
3927 Oct 10 2013 mandel
10073 Dec 27 15:34 mathops
1881 Dec 27 15:34 miscellaneous
16919 Dec 27 15:34 numbers
17190 Apr 15 17:00 performance
30736 Dec 27 15:34 poker
3101 Sep 14 2006 poker.pscan
42550 Jun 4 10:18 ptune c
3074 Sep 13 2006 simul1.pscan
49092 Jun 14 11:36 specialfunctions c
40736 Dec 27 15:34 stack
44749 Dec 27 15:34 starting
12740 Dec 27 15:34 strings
5985 Mar 20 2013 svgalibnotes
33755 Dec 27 15:34 time
33406 Dec 27 15:34 userspace_daq
16975 Dec 27 15:34 variables
16014 Dec 27 15:34 writing_code
------------------------------------------------------------------------
changes since experix_r12.1 17 APR 2014:
------------------------------------------------------------------------
------------------------ experix policy changes ------------------------
There were statements in various places about putting the experix tree in
/home/bear. This has been cleaned up and now experix can live in any
directory. The restrictions now are: the experix exe's are in the user's
experix/bin directory and that is to be the working directory of an experix
session, and it will look for help files and some other things under
"../dist".
-------------------------- experix api changes -------------------------
The file/w command with "w format" and no FCO (i.e. making a string on
stack with formatted values) can use any string type (except short-string),
and the result string has the same type as the "w format". This allows
it to make command strings. (files.c file.hlp)
New commands (included when XPX_LOCAL_WEBCAM is #defined in xpx_local.h):
'webcam' operates a webcam, enabling experix to take pictures and analyze
them. 'ppm' performs extraction and insertion of rectangular images in
larger images, conversion between ppm data and single-precision color-
separated arrays, and adjustment of borders on the color-separated arrays
to reduce fft artifacts.
(source/amoeba.c source/xpx_local.h source/xpx_local/webcam.c
source/xpx_local/webcam.hlp source/xpx_local/ppm.hlp help/in.experix.hlp
source/xpx_local/vgrab.c help/demolist)
The fft command has been extended to provide ramped low-pass and high-pass
filters (reduce ringing effects).
(source/math.c help/fourier.hlp book/specialfunctions)
------------------------- graphics system changes ----------------------
The display geometery is auto-detected by reading /sys files. A new 'vgamode'
9999 means use the auto-detected values. When a screen setup file starts with
a 'B9999' command, the system tries appending the screen pixel size; for
example if the display geometry is 1024 by 768 and the file "screen1" has
been submitted for setup and it has the B9999 command, experix will try to
substitute "screen1.1024x768".
The screen setup files have been reworked, and new ones for 1280x1024 have
been added. It works, but see notes in help/issues.
(frbf.h frbflib.c svgaserv.c svgaserv_G_IN_X.c in.experix.hlp compile_warn
screen1 screen2 screen1.1280x1024 screen2.1280x1024))
------------------------------ bug fixes -------------------------------
signal_thread_r needs to signal pending_coms_condv after it collects the
status of a child from the exec command, to wake up command_execution_loop if
it is sleeping on pending_coms_condv (at command.c:188). This code was removed
by mistake at some point. And the predicate for that sleep has to include
childdown, because all_queue_count will not reflect the availability of a
child exit command until match_children is called. (threads.c, command.c)
file/o was giving an O_CREAT flag to open() when the filemode included 'p'
(pipe) plus 'x' or 'c' (i.e. opening a fifo, which gets created by mkfifo()
before the open() call). O_CREAT was evidently just being ignored until
this was done under Trisquel 6, where it caused a segfault. (files.c)
When multiple experix command threads used the same command item, the
reference count on that could get messed up. Fixed by adding a mutex to the
struct CIdefcore and using that to protect CI_refs. This does NOT protect the
contents of the command item. Use command mutex operators for that. This
change involves nearly all .c and .h files in source and source/xpx_local.
Following upgrade to newer OS and libraries, after thread/K, thread/c would
not work. Apparently in the new system pthread_timedjoin_np with a NULL
thread ID argument returned an error whereas it had not before. Fixed by
not zeroing the ID in thread/K and checking for cancelled thread in thread/c.
(thread.c, structs.h)
The struct CIdef for 'amoebas' was incorrect so an attempt to use this
variable made experix hang. (amoeba.c)
On the Dell Dimension, a segfault in frbflib was elicited by switching between
terminal sessions while the thread demo number 3 in thread.hlp was running.
(This was not seen on other systems). It has apparently been fixed by doing
the malloc'ing and free'ing of the video data storage in vga_setmode rather
than in flipaway and flipback. This did not affect the other problems on that
system (see help/issues).
---------------------- bug detection code changes ----------------------
minor cleanup of pthreaderr and PTHREADCHECK use in threads.c
------------------------------ xpx changes -----------------------------
Restored previous behavior of graftrix.xpx, making VDRs 27 and 28 each take
half the total plot area (by using svgaserv 'I' commands to copy VDR 25),
and 'RK' commands to set their plot areas).
The bmd1 command has a new option: /s keeps the headerless bitmap.
(bm.xpx bm_ts.xpx)
--------------------------- auxiliary changes --------------------------
new file: dist/checkfile is bash script for use in comparing different experix
dist/ trees and their contents.
------------------------- documentation changes ------------------------
More examples constructed in book/exec
New file, supporting examples in book/exec: book/makedata.c
Notes on a bug affecting unsigned 64-bit integer input (ss.numerals.hlp)
Notes on binary representation of floating-point (ss.numerals.hlp)
correction in hardware/tpad_setup: "experix_r12_nano-wbm.tgz2" should be
"experix_r12/nano-wbm.tgz2"
The multi-thread demo in thread.hlp has been revised to work with different
screen geometry by using 'RK' instead of 'RJ' svgaserv commands.
book/ptune has been re-written a little
the list of graftrix functions in book/graphs has been updated
the /v option for mandel_c is discussed (mandel.hlp)