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 3 FEB 2014
*** NOTICE This is a re-release. If you downloaded experix_r12_dist.tgz2 ***
*** and experix_r12_book.tgz2 without this notice, you should download ***
*** them now. The following files are changed: ***
*** dist/source/files.c and help/file.hlp (an api change) ***
*** dist/source/svgalib/svgaserv.c ***
*** dist/source/svgalib/svgaserv_G_IN_X.c (this is a bug fix) ***
*** help/demolist (new file) help/sign_on.message ***
*** help/in.experix.hlp (corrects an omission in the build instructions) ***
*** xpx/bm.xpx xpx/bm_ts.xpx book/amoeba book/files book/graphs ***
*** book/specialfunctions ***
---------------------------- In this file ----------------------------
Major additions/changes relative to latest update of experix_r11
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_r11 2 AUG 2013
and updates applied to that
-------------------------- Major additions ---------------------------
The C function that provides the experix graph command has been modified
to accept a struct that provides all of its arguments, as an alternate way
of calling it, so that it can be invoked conveniently from another C
function without referencing the experix stack.
New graphics server commands have been added to duplicate a VDR and to
set the plotting area relative to the VDR dimensions.
Some interesting new tests and remarks on the results have been added in
dist/performance. These include graphics, threads, process exec and file
i/o, and may be useful as benchmarks. There are also some comparisons vs.
octave and MatLab.
An exploration of the experix color system has been done in order to ease
the selection of colors for graph drawing. The techniques and results are
discussed in xpx/colorsets.xpx.
A fix has been applied to my nano version to avoid the ugly mess that
resulted from the two extended characters that gcc puts in its error and
warning reports. Also, nano now remembers the filepath and command strings
given with CTRL-O, even when in insert-to-present-buffer mode. The archive
of new/changed nano files is included in this release.
---------------------------- 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 (archive about 240KB) and a computational
application (FIDA, about 50K).
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 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. These are operated through the usb command,
which enables the execution of 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 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 also includes the
single-process option in which the graphics server is built into experix.
# Construct the experix directory tree.
cd ~/
mkdir experix
cd experix
# download the following from Sourceforge:
# experix_r12_dist.tgz2 experix_r9_helpers.tgz2 experix_r12_book.tgz2
tar -xjf experix_r12_dist.tgz2
tar -xjf experix_r9_book.tgz2
tar -xjf experix_r12_helpers.tgz2
mkdir bin
cd bin
# Build experixXG. This is the variant that uses an external graphics
# server (svgaserv).
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/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.
gcc -o experixXG *.o -lpthread -lm -lreadline -lcurses -lrt -lusb
# 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
# Build experixIG. This is the variant in which the graphics server
# functionality is integrated into experix, rather than being a separate
# process.
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
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 16 (kernel 3.1.0-7.fc16.i686.PAE) 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 17 (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 containg '~' 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.
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 at the end of
help/in.experix.hlp.
---------------------------- 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 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 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 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.
----------------------- 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= changed (not just updating
the copyright); n= new; relative to experix_r11 and its updates.
xpx files with '*' after the name are shell-executable experix scripts
that start experix in graphics mode. You need to have a soft link in
experix/bin that points either to experixXG or experixIG.
.
|-- 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/poker.xpx*
| `-- drivers/userspace/
| |-- drivers/userspace/fifo1.c
| |-- drivers/userspace/fifo2.c
| `-- drivers/userspace/statfiles.c
|-- experix_icon.gif
|-- experix_icon.ppm.gz
|-- experix_icon.xpx*
|-- experix_logo.gif
|-- experix_logo.ppm.gz
|-- 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 c
| |-- help/COPYING -> .COPYING
| |-- help/def.hlp c
| |-- help/demolist n
| |-- help/exec.hlp c
| |-- help/file.hlp c
| |-- help/fourier.hlp
| |-- help/fpu_etrack.hlp
| |-- help/gh.experix.hlp
| |-- help/globalints.hlp
| |-- help/graph_ae.hlp n
| |-- help/graph.hlp (was graph1.hlp) c
| |-- help/gsmin.hlp
| |-- help/histogram.hlp
| |-- help/in.experix.hlp c
| |-- help/interp.hlp
| |-- help/keywords.ac c
| |-- help/keywords.dh c
| |-- help/keywords.index c
| |-- help/keywords.ir c
| |-- help/keywords.ss
| |-- help/keywords.tz
| |-- help/mandel.hlp
| |-- help/miscellaneous.hlp
| |-- help/mod_nano.hlp c
| |-- help/nanorc n
| |-- 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 c
| |-- help/ss.comjumps.hlp
| |-- help/ss.comquote.hlp
| |-- help/ss.constant.hlp
| |-- help/ss.defercom.hlp
| |-- help/ss.localvar.hlp
| |-- help/ss.logicops.hlp
| |-- help/ss.misclops.hlp
| |-- help/ss.nouseyet.hlp
| |-- help/ss.numerals.hlp
| |-- help/ss.stackman.hlp
| |-- help/ss.statsops.hlp
| |-- help/ss.threads.hlp
| |-- help/ss.tilde.hlp
| |-- help/ss.unaryops.hlp
| |-- help/ss.valuecmp.hlp
| |-- help/structs.doc
| |-- help/svgaplot.hlp
| |-- help/thread.hlp c
| |-- help/time.hlp
| |-- help/tthread_mon.hlp
| |-- help/tu.experix.hlp
| |-- help/usb.hlp
| `-- help/xcd.hlp
|-- 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 c
|-- readme_r12 this file
|-- source/
| |-- source/amoeba.c c
| |-- source/amoeba.h c
| |-- 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 c
| |-- source/errors.h
| |-- source/files.c c
| |-- source/FPUmath.c c
| |-- source/FPUmath.h
| |-- source/functions.h c
| |-- source/globals.c c
| |-- source/graph.c (was graph1.c) c
| |-- source/graphx.c (was graph1x.c) c
| |-- source/help.c c
| |-- source/math.c c
| |-- source/mm.c c
| |-- source/numbers.c c
| |-- source/opclist.h
| |-- source/stack.c c
| |-- source/structs.h c
| |-- source/svgalib/
| | |-- source/svgalib/altcolortest
| | |-- source/svgalib/altcolorwrite
| | |-- source/svgalib/colors.00
| | |-- source/svgalib/colors.xpx
| | |-- source/svgalib/exp_svga.c
| | |-- source/svgalib/exp_svga_G_IN_X.c 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 -> screen1 } these replace screen*
| | |-- source/svgalib/screen1 } in this directory
| | |-- source/svgalib/screen2 }
| | |-- 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 c
| | |-- source/svgalib/svgaserv.c c
| | |-- source/svgalib/svgaserv_G_IN_X.c c
| | |-- source/svgalib/svgaserv_valid_modes
| | `-- source/svgalib/vgatest.c
| |-- source/threads.c c
| |-- source/try1.c c
| |-- source/updown.c c
| |-- source/usb.c c
| |-- source/vars.c c
| |-- source/xpxdif.c c
| |-- source/xpxdif.h
| |-- source/xpx_local/ replaces source/models/
| | |-- source/xpx_local/fpr.c c
| | |-- source/xpx_local/fprs.hlp
| | |-- source/xpx_local/fpr.xpx
| | |-- source/xpx_local/stretcher.c n
| | |-- source/xpx_local/stretcher.hlp n
| | |-- source/xpx_local/zdhist.c c
| | `-- source/xpx_local/zdhist.xpx c
| `-- source/xpx_local.h n
`-- xpx/
|-- xpx/arraytrix.xpx
|-- xpx/bm_ts.xpx c
|-- xpx/bm.xpx c
|-- xpx/calculus.xpx*
|-- xpx/colorsets.xpx n
|-- xpx/daq.xpx
|-- xpx/example1.xpx*
|-- xpx/example2.xpx*
|-- xpx/funcshell.xpx
|-- xpx/graftrix.xpx* c
|-- xpx/gtest.xpx c
|-- xpx/ideas.xpx
|-- xpx/math1.xpx
`-- xpx/mathtrix.xpx
Removed: source/svgalib/svgaserv_debug.c
-------------------------- the book directory ------------------------
89093 Jan 31 09:55 amoeba c
20759 Dec 27 16:34 arrays
912 Sep 28 19:10 booktodo
13509 Oct 10 20:09 cellpokercartoon.odg
3102 Sep 13 2006 circuit_DAS16.pscan
11270 Oct 10 20:09 circuit_PCM308.gz
3119 Sep 13 2006 circuit_PCM308.pscan
11402 Aug 27 2007 circuit_poke.gz
39331 Jan 27 10:57 command c
5865 Dec 27 16:34 compare
40886 Dec 27 16:34 debugging
6283 Oct 10 20:09 errno.list
8995 Jan 8 14:50 exec c
6863 Mar 20 2013 experix.manual
43748 Feb 3 08:54 files c
16604 Feb 3 08:54 graphs c
20823 Dec 27 16:34 help
36020 Jan 27 10:59 install c
22962 Mar 21 2011 LICENSE
3927 Oct 10 20:09 mandel
10073 Dec 27 16:34 mathops
1881 Dec 27 16:34 miscellaneous
16919 Dec 27 16:34 numbers
30736 Dec 27 16:34 poker
3101 Sep 14 2006 poker.pscan
41727 Dec 27 16:34 ptune
3074 Sep 13 2006 simul1.pscan
38511 Feb 3 08:54 specialfunctions c
40736 Dec 27 16:34 stack
44749 Dec 27 16:34 starting
12740 Dec 27 16:34 strings
5985 Mar 20 2013 svgalibnotes
33755 Dec 27 16:34 time
33406 Dec 27 16:34 userspace_daq
16975 Dec 27 16:34 variables
16014 Dec 27 16:34 writing_code
-------------------------- the nano directory ------------------------
On Sourceforge I am only providing the source files that I changed and
some comments and my .nanorc file. If somebody can't find the original
nano-1.2.5, I can supply that.
4997 Apr 19 2012 color.c
5580 Aug 30 2012 config.h
83854 Jan 7 20:02 files.c c
32630 Aug 30 2012 global.c
104715 Aug 30 2012 nano.c
14663 Aug 30 2012 nano.h
14250 Nov 14 09:25 nanorc.wbm
15774 Apr 19 2012 proto.h
14515 Jan 7 16:33 readme-nano-wbm c
28762 Apr 19 2012 search.c
56605 Jan 7 16:28 winio.c c
----------------------------- Changelog ------------------------------
------------------------------------------------------------------------
changes since experix_r11 2 AUG 2013 and experix_r11_update 11 OCT 2013 :
------------------------------------------------------------------------
-------------------------- experix api changes -------------------------
Special command '' list (i.e. the "list" command with arg = empty string)
has been added to get the capacity of the command item list.
(vars.c def.hlp keywords.ac keywords.index)
Command items related to the tissue stretcher experiment are included if
XPX_LOCAL_STRETCHER is #defined. This is a highly specialized setup in
our lab.
New graph command option /Z means, use the Igsa and Fgsa provided on stack,
and Igsa[0] bit 20 controls whether or not to re-compute the scale. graph
command options and the vdr number are remembered in the Igsa, so it may
be necessary to adjust some scripts and specify options which were formerly
controlled by defaults.
(graph.c graph.hlp gtest.xpx amoeba)
A C code convenience entry to the graph command (function Cgraph_F) has
been constructed, for doing graphics within C code. When graph.c is
compiled with -DC_AE_GRAPH, several command items are created so that the
user can exercise the new C interface from experix command code, as an aid
to forming the argument struct. Examples have been provided.
(graph.c try1.c functions.h structs.h graph_ae.hlp bm.xpx bm_ts.xpx
in.experix.hlp)
The file/J command has been added, to modify a string by means of insert_dfi
(described below). (files.c file.hlp)
These filenames are now made by insert_dfi or insert_PTSU (described below);
note that the filenames have changed a little.
-- The log filename (pid field now 10 digits) (updown.c, globals.c)
-- stripped command file made by the & operator:
/tmp/PPPPPPPPPP.TTTTTTTTTTxpxSSSSSSSSSS.UUUUUUUUUU.strip
(command.c ss.comfiles.hlp)
-- stdo and stde files from an exec'd command: /tmp/stdoPPPPPPPPPP
(threads.c help.c exec.hlp)
-- display file from a list command: /tmp/item_list.expPPPPPPPPPP
(vars.c def.hlp gh.experix.hlp)
Normal exit (quit command) was causing the message "ERROR in ID=..." to come
out. Changed that to " QUIT in ID=..."
thread/w was returning either the commvar or the flags, depending on who
the target thread is. This confusing misfeature has been fixed so that
thread/w and thread/v return the commvar, and thread/W and thread/V return
a 64-bit integer made of the commvar and the flags.
(threads.c vas.c structs.h thread.hlp)
New form of the graphics server I command makes a new VDR as a duplicate of
an existing one. (svgaserv.c svgaserv_G_IN_X.c threads.c thread.hlp)
New graphics server RK command sets the plotting area location and size as
10000's of the VDR's dimensions. (svgaserv.c svgaserv_G_IN_X.c threads.c
thread.hlp)
These commands have been changed: file/rl --> file/rn and file/rlh -->
file/rnh for consistency with the file/w options. (files.c file.hlp
book/files) When fixing your files, be aware that file options may be in
any order and the file command might be used through a local pointer.
------------------------- created file changes ------------------------
See under "experix api changes"; also:
The file /tmp/experixcolors generated by svgaserv (and its variants) is
replaced by /tmp/xpxPPPPPPPPPPcolor where the P field is the svgaserv PID
when svgaserv is a separate process, or the experix PID when svgaserv is
internal. (svgaserv.c svgaserv_G_IN_X.c)
The fifo generated by svgaserv for getting commands and data from experix
is now /tmp/svgaservPPPPPPPPPP where the P field is the svgaserv PID. If
such a file exists, it is unlinked first.
(svgaserv.c exp_svga.c)
The info file made by the svgaserv BI command is now
/tmp/svgaservPPPPPPPPPPinfo where the P field is the svgaserv PID (for
internal svgaserv there is no such file).
(svgaserv.c exp_svga.c)
The return file made by the svgaserv M command is
/tmp/svgaservPPPPPPPPPPMnnnn where the P field is the svgaserv PID (for
internal svgaserv there is no such file). (svgaserv.c)
The file made when EXP_SVGA_SYSERR is #defined and exp_svga_syserr is 0
is now /tmp/exp_svgaPPPPPPPPPPsyserr (i.e., 10-digit PID instead of 4)
(exp_svga.c
------------------------- graphics system changes ----------------------
The mess of old defunct screen files in source/svgalib has been removed
and replaced by two example screen files and a help file (screen.hlp).
Be sure to put the correct mode number in the B command as explained there,
and make screen0 a link to the one you want to use.
See the new J and RK commands of svgaserv, under "api changes". This makes
screen layout more easy and versatile.
------------------------------ bug fixes -------------------------------
In the graph command, margins (Igsa[2] and Igsa[3]) were being handled
incorrectly. Fixed to conform with descriptions. (graph.c graftrix.xpx)
Initialization of the colordefs array incorrectly used 'NUM_VDRs' instead of
'NUM_VDCs' to fill in after the first 24. Consequences of this are not
known. (svgaserv.c svgaserv_G_IN_X.c)
fixed in the re-release:
The code in svgaserv_G_IN_X.c for updating the pszxy array was trying to do
this for VDRs that do not have plot capability and so are not represented in
that array. This caused changes to items immediately preceeding pszxy in the
memory address space.
fixed in the re-release:
In the build instructions in in.experix.hlp, do this before linking experixXG:
rm -f exp_svga_G_IN_X.o svgafont.o svgafunc.o svgaserv_G_IN_X.o frbflib.o
fixed in the re-release:
xpx/bm.xpx, xpx/bm_ts.xpx: the mandel demo needs graftrix (actually just
the Fgsa and Igsa arrays); the instruction to load this has been added
---------------------- bug detection code changes ----------------------
The command-file execution section of submit_command would have aborted a
command string in the unlikely event that gettimeofday failed (where we
were just using it to generate a unique filepath). Now we generate an error
message, use random numbers for the time (without error checking that) and
continue. (command.c)
---------------------------- non-api changes ---------------------------
Special features have been better organized, as follows:
-- source/models/ has been replaced by source/xpx_local
-- inclusion special features is all controlled in xpx_local.h, which
identifies the relevant source and help files
-- special features are identified by the XPX_LOCAL_... #defines
Affected files: xpx_local.h (new), amoeba.h, amoeba.c, structs.h,
globals.c, help.c, xpx_local/zdhist.xpx, xpx_local/zdhist.c, in.experix.hlp,
xpx_local/stretcher.c (new), xpx_local/stretcher.hlp (new)
New function insert_dfi inserts an integer value in decimal format into a
string, 0-padding on left or chopping off least significant digits to get
a specified field length. (help.c, functions.h, keywords.ir, keywords.index)
New function insert_PTSU uses insert_dfi inserts process ID, pthread_self,
current time seconds and microseconds, in a string at specified offsets.
(help.c, functions.h, keywords.ir, keywords.index)
The updating of the plot-region size array pszxy in the external graphics
server form of experix is improved by making svgaserv update the
/tmp/svgaservPPPPPPPPPPinfo file and notify experix that changes have been
made. (svgaserv.c graph.c keywords.ir)
------------------------- documentation changes ------------------------
help/in.experix.hlp: some more backward-compatibility info in the part on
program building; a summary of threads and processes; a list of created files
help/keywords.ir: updated discussion of randomv and randomdata and pszxy.
help/mod_nano.hlp has been re-worked, and help/nanorc has been added (my
initialization file for nano).
help/keywords.dh: improved discussion of findcomname and GetHelp
/book/exec has been updated for the new file command syntax, so it works,
but is still in an embryonic stage.
/book/install has a note added about code maintainance markers.
help/compile_warn has been completely updated and reworked, and remarks
about warnings we used to have that have disappeared have been removed
from sources. (array2.c command.c display.c files.c math.c updown.c vars.c)
experix/dist/performance has been updated, reworked and expanded.
new in the re-release:
help/demofiles lists experix code demos found in help, book and drivers.
reviewed and improved in the re-release:
xpx/bm.xpx xpx/bm_ts.xpx
book/specialfunctions book/graphs book/files book/amoeba
----------------------------- minor issues -----------------------------
Use of alloca buffers in submit_command has been reviewed and cleaned up
a little. (command.c)
functions.h was #included from structs.h; this is removed because we are
using structs.h in svgaserv.c, which (as a separate process) cannot access
the files listed in functions.h; so functions.h is now #included in all
sources that are linked into experix. (structs.h, *.c in source/, exp_svga.c,
exp_svga_G_IN_X.c, svgaserv_G_IN_X.c, *.c in source/xpx_local/)
Global variables width and height, and local variables ww and hh in
screen_setup, which shadow gi_SVGAWIDTH and gi_SVGAHEIGHT, and the global
variable vgamode (shadows gi_SVGAMODE), have been removed from the version
of svgalib that is linked into experix; and the redundant function tildehome
has been removed. And screen_setup does not set gi_SVGAWIDTH, gi_SVGAHEIGHT,
gi_SVGACOLORS, gi_SVGAMODE, but relies on svgaserv 'B' command to do this.
(exp_svga_G_IN_X.c svgafunc.c svgaserv_G_IN_X.c)
A compiler variable PLOT_ARB_BYTE_LIM was #defined in graph.c and then
never got used (or the code using it got removed-- i'm not sure). Anyway
this #define is removed. (graph.c keywords.index)
The designation "graph1" (intended to mean we would someday make another graph
command) has been dropped. The "alt" and "ALT" particles in some filenames and
#defines have been changed to "ae" and "AE". Files re-named: graph_alt.hlp -->
graph_ae.hlp, graph1.c --> graph.c, graph1x.c --> graphx.c, graph1.hlp -->
graph.hlp; files altered: readme_r12, graph.hlp, graph_ae.hlp, compile_warn,
in.experix.hlp, mod_nano.hlp, keywords.index, svgaserv_G_IN_X.c, try1.c
updown.c, functions.h, defines.h, zdhist.xpx, stretcher.hlp, structs.h,
book/command, book/graphs, book/install
----------------------------- trivial fixes ----------------------------
help/in.experix.hlp: "dones" should be "done" (7 places)
graftrix.xpx: in the Igsa definition:
comment for "gsa_tics0" had "700/10000", should be "70/10000"
comment for "gsa_font" had "black on white", should be "white on black"
---------------------------------- nano --------------------------------
readme-nano-wbm: updated the file manifest
winio.c: Added interpretation of two extended characters that are used by
gcc in its error/warning messages: 0xe2,0x80,0x98 and 0xe2,0x80,0x99.
Both are displayed as ' (apostrophe), but attempting to edit them will
produce funny results.
files.c: When loading files, the user-given path or command was not added to
the history list when 'new buffer' was turned off (by ^F). Fixed this so it
is always added.