spec

Software for Diffraction

changes

highlights of modifications for spec release 4.01

RELEASE 4.01.17 BETA

These notes summarize the cumulative changes made for spec release 4.01.17 BETA as of February 18, 1997.

Fixed Macro Function Bug From Previous Release

The fix of the obscure else-less if parsing bug in the previous release introduced a new bug relating to the parsing of macro functions. Both bugs are now fixed, with the hope no new bug is created.

No More calcG in gpset

As there is no need for the gpset macro to contain an invocation of calcG, it no longer does.

RELEASE 4.01.16 BETA

These notes summarize the cumulative changes made for spec release 4.01.16 BETA as of February 9, 1997.

mca_par() Calls To Disabled Or Unresponsive Devices Fixed

spec now handles mca_par() calls to user-disabled or to unresponsive MCA hardware devices by printing an error message and returning a -1. Previously, spec's behavior varied for the different MCA devices.

Unresponsive GPIB Controller No Longer Resets To Command Level

When accessing GPIB devices with gpib_get(), gpib_put(), etc., after the configured GPIB controller fails the presence test, spec will no longer silently reset to command level. Instead gpib_get() will return a null string, and the other functions will return -1.

Improvements For the MM2500/ITL09 Motor Controllers

The code for the MM2500/ITL09 motor controller should now do a better job of handling timeouts in reading responses from the controller and in programming parameters for a unit that has had values erased from its non-volatile memory.

Bug With Long Time Presets For Silena MCA Fixed

A couple of bugs in the code for the Silena MCA, where count times longer than 6533.5 seconds were not handled correctly, have been fixed.

RELEASE 4.01.15 BETA

These notes summarize the cumulative changes made for spec release 4.01.15 BETA as of January 31, 1997.

data_pipe() Works With New Arrays

The data_pipe() function can now take array arguments in addition to data groups. See the data_pipe help file.

Fixed Parsing Bug With else-less if

A bug with parsing if statements that didn't have a matching else statement when the body of the if statement contained a call to a macro function has been fixed.

Fixed Parsing Bug With if Block As Macro

A very old and obscure parsing bug, where spec would not accept the else keyword following an if statement when the statement block of the if statement was a macro containing a curly-bracket-delimited statement block, has been fixed.

Fixed Bug Allowing Same Mnemonic For Motor and Counter

A bug, where one could configure the same motor mnemonic for both a motor and counter, has been fixed. spec will now print an error message.

Support For Bit 3 VME Controller on HP

The Bit 3 Model 487-1 E/ISA VME controller with the Bit 3 Model 933 support software is now supported by spec on HP 700 series platforms.

Support For Bit 3 PCI-VME

The Bit 3 Model 616 and 617 PCI-VME controllers are now supported, but only on linux platforms. The Model 617 is the more expensive model as it provides DMA capabilities. Presently, spec does not support DMA transfer, so the new 616 is the recommended controller.

Support For Joerger VSC16/8 VME Scaler

The Joerger VSC16/8 VME scaler module is now supported by spec. This VME device requires a controller with A32/D32 capabilities. Presently, the Bit 3 Model 616/617 controllers on linux and the Bit 3 Model 487-1 on the HP 700 series platforms are the only supported controllers with the capability.

Support For Galil DMC-1000 PC Board Motor Controller

spec now provides preliminary support for the Galil DMC-1000 PC board motor controller, currently, only for stepping motors.

Added vme_get32() and vme_put32()

See the vme help file.

Oriel 18092 GPIB Interface Supported

spec now supports the GPIB interface on the Oriel 18092 Encoder Mike controller, in addition to the serial interface. Also, the unit/channel configuration is supported for this controller. Also, a bug in setting the gain parameter has been fixed. (The manual incorrectly states the gain is set with an SD command. The actual command is SG.) See the oriel help file for more information.

Fixed Oriel 18011 Bug

A bug, which made the Oriel 18011 motor controller unusable with spec and which had gone unnoticed and unreported for the last three years, has been fixed.

Am9513 Looks For Second Chip At Two I/O Ports

The code for the Am9513 based PC boards for timing and counting will now probe for the second Am9513 chip at both the base+4 and the base+2 addresses. The National Instruments board places the second chip at base+2, which now almost makes the board usable with spec. To fully use the board, the prewired connections of the time base to the counter inputs must be changed by modified the printed circuit board.

RELEASE 4.01.14 BETA

No notes.

RELEASE 4.01.13 BETA

These notes summarize the cumulative changes made for spec release 4.01.13 BETA as of December 22, 1996.

New Options To Force Row-Wise or Column-Wise Arrays

For the functions array_dump(), array_fit() and array_plot(), it matters whether each row or each column of a two-dimensional array corresponds to a data point. Previously, spec took the larger dimension of the array to correspond to point number. That is still the default behavior, but now the new "row_wise" and "col_wise" arguments to array_op() can force the sense of the array. See the arrays help file for details.

New Arrays Work With esrf_io()

The new array data type can now be used with the esrf_io() function for device server commands that require D_VAR_CHARARR, D_VAR_SHORTARR, D_VAR_LONGARR, D_VAR_ULONGARR, D_VAR_FLOATARR and D_VAR_DOUBLEARR, data types.

KS 3929 SCSI-To-CAMAC Supported on Solaris 2.x

CSS now provides a driver for the Kinetic Systems 3929 SCSI-to-CAMAC module for Sun Solaris 2.x platforms. See the drivers/sol2_ksc3929/README file included with Solaris 2 distributions.

Signal Blocking For HP-LAN GPIB

Due to problems reported with the HP-LAN GPIB device hanging when transactions are interrupted with a signal generated by a keyboard ^C, that signal is blocked during calls to the HP SICL library for that GPIB controller.

RELEASE 4.01.12 BETA

These notes summarize the cumulative changes made for spec release 4.01.12 BETA as of December 11, 1996.

More Improvements To X11 Font Handling

The default font pattern for the X11 high resolution window is now restricted to mono-spaced fonts. In addition, scalable fonts are now supported. Also, a new "fonts=..." option to the plot_cntl() function is available to select a fixed size or scalable font while running spec. See the x11 and new plot_cntl help files for more information.

RELEASE 4.01.11 BETA

These notes summarize the cumulative changes made for spec release 4.01.11 BETA as of November 16, 1996.

2D Associative Arrays Implemented

The associative arrays that have always been available with spec may now be used with two-dimensional array indices. Internally, The arrays are hashed using the string value of the first index, followed by the character \034 (^\), followed by the string value of the second index. A user can access such a 2D array element using a single index constructed according to the above recipe.

Bugs Fixed For the MM2500/ITL09 Motor Controllers

Two bugs with the Newport MM2500 and MicroControle ITL09 motor controllers have been fixed. spec now allows up to eight seconds for the acceleration ramp to be built. The previous three second timeout was too short. Also, a bug where the multiplier and divisor factors were sometimes incorrectly set has been fixed.

Ortec GPIB Power-On Message Flushed

spec now does a GPIB read with a very short timeout when initializing the Ortec 9XX counter/timers in order to flush out the message sent when the modules are first powered up. Previously, users had to perform a gpib_get() from the spec prompt to flush the message.

Multiple GPIB Controllers Now Allowed

spec now allows up to four GPIB controllers to be configured by the same instance of spec. In the configuration editor, use the ^F and ^B command on the GPIB controller line of the Interfaces screen to configure each controller. In the config file, the unit number is specified as @gpib_0, @gpib_1, etc. GPIB addresses can be entered using the unit:address syntax. If no unit: prefix is given, unit zero is used. In the config file, GPIB unit numbers are coded in the GPIB address as

unit * 100 + address.

From spec, the gpib_get(), gpib_put(), etc., commands can use either the above coding or the "unit:address" syntax. Note that sharing a GPIB controller among multiple instances of spec is still possible, but spec still uses only one semaphore to regulate access to each shared controller. Thus, if there are two GPIB controllers shared by more than one process, when any process accesses either controller, other processes will be blocked from accessing both controllers until the first process releases the semaphore.

Some Improvements for National Instruments GPIB

An old bug, apparently not manifested until recently where a short integer was used to hold transfer counts, which should have limited transfers to 32K or 64K bytes, has been fixed. Also, the error message printed with National Instruments GPIB controllers are now a little more informative. Also, the ECIC error (Not Controller In Charge or lost Controller In Charge during command) no longer causes an error reset. That change is to accommodate sharing of the GPIB-ENET model, which seems to always generate an ECIC error when a new process connects to it.

New Platform Targets

The new installation platforms esrf_linux, and epics_solaris2 are available.

New gmci Geometry

A new gmci geometry, as used at CEA in Grenoble is supported.

Some Improvements To X11 Font Handling

On a number of linux installations, the font data base (consisting of the files /usr/lib/X11/fonts/*/fonts.dir), is often incorrect on new installations, which leads to Bad name errors with the spec X11 graphics. The x11filt program now prints a lengthly error message explaining that the system administrator should fix the problem by running the mkfontdir utility. In addition, some font debugging is available by entering the commands plot_move(0,0," ",9901) to enable font debugging and plot_move(0,0," ",9900) to disable it.

Image Handling Of ROI and Binning Changed

No text.

spec Installation Faster With Respect To GNU Readline

Previously, when spec was installed configured to be linked with the GNU readline library, the library source files were compiled even though the object modules were included in the spec distribution in a library archive. The installation procedure has been modified to avoid the extra time-consuming compilation.

ESRF MCA Bug Fixed

A bug with the ESRF MCA code, where the values reported for real and live time were swapped, has been fixed.

fmt_read()/fmt_write() Bugs Fixed

No text.

calcG Removed From setE Macro

It turns out there is no need for the calcG macro in setE so setE no longer contains calcG.

Silena 7328/7329 MCA Supported

spec now supports the Silena 7328/7329 MCA on a GPIB interface.

New esrf_io() Data Type Added

The D_STATE_FLOAT_READPOINT data type is now supported in the esrf_io() function.

RELEASE 4.01.10 BETA

These notes summarize the cumulative changes made for spec release 4.01.10 BETA as of October 2, 1996.

OMS PC-58 and Bit-3 403 Ported To HP

The Oregon Micro Systems PC-58 ISA motor controller and the Bit-3 Model 403 ISA VME controller can now be used on HP platforms with E/ISA slots. These boards require both I/O port access and memory mapping.

EPICS Unit/Channel Numbering Starts At One

When using the manual unit/channel number configuration, EPICS motor channels are now numbered starting from one, rather than zero, as is the case with most spec motors. The change is to match the conventional motor numbering of an EPICS data base.

EPICS Scaler Enhancements

spec support for the EPICS scaler records now uses callbacks to determine when counting is finished. Previously, the less efficient polling method was used.

SIGINT From Another Process Handled Better

Previously, for spec installations where spec was linked with the GNU readline library, if another process sent spec a SIGINT signal, spec would ignore the next line of input. That should no longer be the case.

RELEASE 4.01.09 BETA

These notes summarize the cumulative changes made for spec release 4.01.09 BETA as of September 17, 1996.

GPIB IFC Can Now Be Asserted

You can now use gpib_cntl(a, "ifc"), to send the IFC (interface clear) message to reset the GPIB bus. See the gpib help file for more information.

array_op("contract") Improved

When used with one-dimensional arrays, the "contract" option of array_op() will now use the first argument after the array name as the contraction factor. Previously, that first argument was ignored, and the following argument was used.

edconf Bug On HP Fixed

A problem, seemingly only manifested on the HP platforms, where the edconf configuration editor would exit prematurely while writing out the configuration and motor settings file when the path name for the files was too long, has been fixed.

RELEASE 4.01.08 BETA

These notes summarize the cumulative changes made for spec release 4.01.08 BETA as of September 10, 1996.

Removed Files No Longer Recreated On Startup

Previously, if a file opened in a spec session was removed before a subsequent session, spec would recreate the file on startup. That no longer happens. Instead a warning message is printed that the old file file has disappeared. Of course, the next time output is directed to a file by the same name, spec will create a new instance of the file.

Parser Bug Fixed

A bug, where spec would expand the macro name in a def or rdef statement immediately following an else-less if statement inside a statement block, has been fixed.

Case Insensitive dev_import() For ESRF Devices

spec now does a case-insensitive hashing of device names to keep track of which devices are in use. Previously, spec would attempt to re-import a device if the name was spelled with a different capitalization scheme.

New image_par() Options

The image_par() function now accepts the options "beg_col", "end_col", "beg_row" and "end_row" with values to set the image_get() region of interest.

New vme_get() and vme_put() Functions

The new functions vme_get() and vme_put() are available for doing A16, D8 transfers to VME modules. A24, A32, D16 and D32 transfers await a future release.

New Array Functions

The new functions array_fit(), array_dump() and array_plot() do for arrays what data_fit(), data_dump() and data_plot() do for data groups.

array_op() "x_at_min" and "x_at_max" Commands Fixed

The "x_at_min" and "x_at_max" options to the array_op() function now work correctly.

New array_op() Options

The array_op() function now accepts the "rows" option to return the number of rows in an array, the "cols" option to return the number of columns in an array and the "updated?" option, which returns nonzero if values in a shared array have been modified by spec or a cooperating external process. In addition, the "?" option lists whats options are available.

EPICS Motor Enhancements

There are now two kinds of EPICS motors available, selected as either EPICS_M1 or EPICS_M2 in the configuration file. The first is for spec-configured motors, where the motor parameters is the spec configuration file are written to the EPICS data base. The second is for EPICS-configured motors, where spec obtains the initial motor parameters from the EPICS data base. In either case, parameter values set using motor_par() while spec is running will be set in the EPICS data base. For EPICS_M2 motors, position discrepancies between spec and the EPICS data base will be always resolved in favor of EPICS. Also, the unit/channel configuration feature is now available for EPICS motors.

OMS PC-58 Motor Controller Now Supported

The Oregon Micro Systems Model PC-58 motor controller is now supported on linux platforms and in driverless mode only. Both the I/O-port address and memory-map address must be set in the configuration file to agree with the board jumpers. The interrupt on the board should be disabled.

Memory-Map Address Configurable For PC Boards

For PC boards requiring both a memory-map address and an I/O port address in their configuration (such as the Bit-3 Model 403 VME controller and the OMS PC-58 motor controller on linux platforms), the configuration editor now allows entry of the memory-mapping address in hexadecimal in the DEVICE column.

RELEASE 4.01.07 BETA

No notes.

RELEASE 4.01.06 BETA

No notes.

RELEASE 4.01.05 BETA

These notes summarize the cumulative changes made for spec release 4.01.05 BETA as of August 20, 1996.

Command Completion Available With GNU Readline Library

The command-completion feature of the GNU readline library is now enabled (if spec is linked with the GNU readline library). In this preliminary implementation, possible completions for the first word of a command are built-in keywords and macro names. Possible completions for subsequent words are filenames. The tab key is what is initially bound to the command-completion function.

Added Protection From State File Corruption

Previously, there was an opportunity for the state file to get corrupted on exiting, if a signal arrived at an indelicate time. Signals are now properly blocked during the save state that occurs when spec exits. The problem seemed to only show up when spec was run as the back end of a GUI program that sent redundant signals when terminating spec.

New FRESH Built-In Variable

A new built-in variable named FRESH exists. It has a nonzero value if spec was invoked with the -f (fresh start) flag or if a fresh start was forced by an incompatible state file version. The value is zero otherwise.

New cdef() Options

The chained-macro function cdef() now accepts two additional flags: cdef("name", "", key, "enable") and cdef("name", "", key, "disable"). The first case enables the parts of the chained macro name associated with key, while the second case disables those parts. If name is the null string "", then all chained macros that have parts associated with key will have those parts enabled or disabled.

New file_info() Built-In Function

A new file_info(file_name [, cmd]) built-in function provides most of the information available about a file or device available from the stat() system call. If invoked with only the first file_name argument, file_info() returns zero if the file exists and nonzero otherwise. If file_name is the string "?", the possible values for cmd are listed. See the funcs help file for more information.

More Attribute Control Strings For tty_cntl()

Attribute strings to set bold, blink, reverse-video and underline mode are now available with the tty_cntl() function. See the funcs help file for more information.

tty_move() Parses New Attribute Escape Strings

New attribute escape sequences have been introduced to simplify designing text screens in spec. The syntax of the sequence is "\[xx]" where xx is one of the two-character control strings recognized by the tty_cntl() function, such as cl to clear the screen or so to start stand-out mode. Presently, only the tty_move() function recognizes these sequences. Adapting the tty_fmt() function to parse the strings is in progress.

Change In Parsing Of \[

To accommodate the "\[xx]" escape sequences, a backslash preceding a left square bracket is now passed through the lexical analyzer.

New Var in  Array Syntax

A syntactical feature for associative arrays (forms of which are available in the standard awk and gawk utilities) is now available in spec. Namely the construction

if (var in assoc_array) {
             ...
}

will evaluate true or false depending on whether the associative array assoc_array contains an element with index var. In addition, the construction

for (var in assoc_array) {
           print assoc_array[var]
}

will run through each element of the associative array assoc_array assigning to var the string value of the index of each element. Note, though, the order in which the elements are assigned is indeterminate and not constant.

New delete Keyword For Associative Arrays

Individual elements of associative arrays may be removed using the new delete keyword, as in

delete misc["foo"]

New array_op() Commands

New commands are available for array_op() to determine whether the array is in shared memory and the number of rows or columns in the array. In addition, array_op("?") lists the possible operations.

New Facility To Read and Write Binary Data

The new fmt_read() and fmt_write() functions are available for reading and writing the new array data type from and to binary files. A variety of binary formats will be supported, and there will be provisions for users to modify existing or add new formats. The facility includes provisions for reading and writing file header information.

String-Array Data Type Introduced

Preliminary implementation of a string-array data type in available. Each row of the array can contain one string. The array must be dimensioned with enough columns to accommodate of the strings anticipated. spec will allocate one extra byte per row to make sure the strings are null terminated.

New image_par() Options

The image_par() function now takes two new options. With the "auto_run" mode turned on, image devices will be started and stopped with spec's built-in counting functions. With the "soft_preset" mode in effect, when in "auto_run" mode, the image device is programmed with the count time passed to spec's counting function. Otherwise, the device is started and stopped when the configured timer starts and stops.

A config_mac Macro Will Be Run After reconfig

If a macro named config_mac is defined, it will be run automatically after reading the hardware configuration file on program startup and after the reconfig command (run from the standard config macro).

No More Unwanted Files Named pipe

Previously the special output file name "pipe" was only special when spec was invoked with the -p flag. At sites where spec is sometimes used with the -p flag, macros that opened "pipe" would leave files named pipe lying about when spec wasn't invoked with the -p flag. Now, the output file name "pipe" is always special. When not invoked with the -p flag, spec ignores commands to send output to "pipe".

Shared Arrays Now Readable By All

The shared-data segment used by the shared arrays is now created with permissions set to allow any user to read the data.

More Robust Method Of Storing Miscellaneous State Parameters

The method for saving certain miscellaneous items in the state file, such as the spec_par() and plot_cntl() options and various hardware parameters, has been improved. Previously relinking spec would generally cause the saved values of the parameters to be lost.

More Robust Handling Of Missing Settings File

Previously, if the motor settings file was missing or empty, spec would automatically switch to simulate mode. That behavior has been changed. Although a missing settings file indicates some sort of administrative or system problem, users have indicated they would prefer spec not to switch to simulate mode, so that they can run the config macro to change the motor settings.

ESRF MCA Start/Stop Functions Enhanced

No text.

Princeton Instruments CCD Support Enhanced

No text.

ESRF MAXE Bug Fixed

A bug relating to using the ESRF MAXE motor controller with the unit/channel configuration, whereby it was possible for the wrong motor to move, has been fixed.

OMS Limit Bug Fixed

An old bug, where motors controlled by any of the supported Oregon Micro Systems motor controllers couldn't be moved off of a limit switch, has been fixed.

Fix for PI Motor Controller

A bug, where use of a too-small buffer for reading a reply from the Physik Instrumente C-804 DC motor controller caused various problems elsewhere in spec, has been fixed.

Unit/Channel Configuration For the E500 Fixed

Bugs in the new unit/channel configuration option for the DSP E500 CAMAC motor controllers have been fixed.

Fix For the Newport MM2000 PC Board Motor Controller

A recently introduced bug that prevented the PC board version of the Newport MM2000 motor controller from working at all has been fixed.

Fixes For the Huber 9000 Motor Controller

Two bugs relating to the Huber SMC 9000 stepping motor controller have been fixed. Step sizes other than 1000 steps per degree are now allowed. A truncation error that sometimes occurred on reading the motor position has been corrected.

RELEASE 4.01.04 BETA

These notes summarize the cumulative changes made for spec release 4.01.04 BETA as of July 17, 1996.

NEW DEVELOPMENTS

The following are new developments for release 4.

Input Push Back Handling Improved

The code that handles the macro expansion has been brought into the modern era. Previously, a temporary file was used to handle very large macro expansion. Now expansion is handled entirely in dynamically allocated memory. The new scheme is more efficient, and allows clear macro debugging messages.

Revised Macro Debugging Format

The output format for macro debugging (DEBUG=256) has been redone.

Source Code Control Introduced

The source code for spec release 4 is now under source code control. Such a change won't mean much to the user, but it does indicate we are getting serious about this release.

CAMAC Driver Ported to linux

The CSS CAMAC driver for the DSP 6001/2 with PC 004 CAMAC controller is now available on linux. See the drivers/README file for more information.

PARALLEL CHANGES FROM RELEASE 3

Special Check For an xterm by edconf

On some platforms, the curses library calls made from the edconf configuration editor from an xterm window caused strange characters to appear on the screen. That problem has been fixed.

show.awk Bug Fixed

A bug in the show.awk script, where there wasn't a pause when there were less than twelve plots on the last page when the -w (wait) flag was used, has been fixed.

Princeton Applied Research 283 Device Supported

Preliminary (and only partial) support for the Princeton Applied Research Model 283 Potentiostat/Galvanostat is available.

Anorad Motor Controllers Supported

Preliminary support for the Anorad I-Series motors controllers is available.

KS 3988 GPIB-To-CAMAC Bug Fixed

A recently introduced bug in the presence test for the Kinetic Systems 3988 GPIB-To-CAMAC controllers has been fixed.