changes

highlights of modifications for spec release 4.03

RELEASE 4.03.14

These notes summarize the cumulative changes made for spec release 4.03.14 as of August 31, 1998.

More New Options For sock_io()

The sock_io() function now accepts a "listen" option, which allows other programs or instances of spec to make a connection, such that strings can be sent and received between, for example, two instances of spec using the "send" and "read" options to sock_io(). See the sock_io help file for details.

Made Certain Errors Non-Fatal

The functions cnt_name(), cnt_mne(), motor_name() and motor_mne() now return -1 for invalid arguments rather than resetting to command level.

New tw (tweak) Macro For Motors

A new full-featured tw macro is included. It allows multiple motors to be tweaked simultaneously, and can count and display the results after each move. See the tw help file for details.

Minor Changes To Standard Macros

A number of changes to the standard macros - some cosmetic, some functional and some fixes - are included.

New is_using_motor() and is_using_counter() macro functions test whether the corresponding channel is named "unused" or has been disabled with the "disable" option to motor_par() or counter_par() The macro functions are now used to determine whether the corresponding channel should be listed in the various macros that display all the motor or counter channels, such as wa, show_cnts, etc.

The onp, offp, ond, offd macros have a semicolon appended to get rid of certain misleading more> prompts which occur when the last thing spec parses is an else-less if.

A new ifp macro contains tests to see if a PRINTER device is configured. Many of the macros that write info to PRINTER have been simplified using ifp and by using fprintf(PRINTER, ...) rather than onp/offp.

New user_prescan_head and user_postscan_head hooks are included in the standard _head macro.

A new a5scan macro (with 17 arguments) is included with the standard scans.

The updated move macros have been reorganized. A new _update() macro function replaces _update1 through _update6. A new _updateHKL macro replaces _update2hkl through _update5hkl. Definitions for the old names in terms of the new macros are included for backwards compatibility. In addition, the looping in the updated moving and counting macros has been rewritten to simplify the macro code.

Fix For contents Utility

The recently revised version of the contents utility has been fixed so that the data output goes to "standard output" rather than "standard error".

Fix For Princeton CCD

The code for the Princeton Instruments CCD cameras using the ST-138 interface with the SDV card on Sun computers has had one of the problems with timeouts fixed.

MCS mode for Nucleus PCA-3 and PCA-II

The data returned in multichannel scaling mode (MCS) for the Nucleus PCA II, PCA-3 and PCA Multiport devices is changed a bit. Previously, spec automatically discarded the first and last channels of the data when in MCS mode, as they apparently always contain garbage. However, returning two less than the number of channels in the configured size is confusing to the user. It is more appropriate for the user to discard channels or explicitly read only the good channels in the calls to mca_get().

Tsuji PM16C Bug Fix

A bug, introduced with the last bug fix for the Tsuji PM16C motor controller and that made the device unusable in release 4.03.13, has now been fixed.

Support For New ACS SPI-8 Motor Controller

Preliminary support for the new Advanced Control Systems SPI-8 motor controller is included. Each motor controller can drive eight channels. A number of controllers can be daisy chained off one serial port. See the ACS home page for more information on the controller.

Parallel I/O Driver For ILL 2D Detector

A new kernel driver and hardware support code for a 2D detector used at ILL and interfaced to spec through a high-speed 16-bit digital input board is included for use on linux PC platforms.

RELEASE 4.03.13

These notes summarize the cumulative changes made for spec release 4.03.13 as of July 26, 1998.

New Options For syms Command

The syms command now takes options to specify the type of variables displayed and the output format style. The new -v option formats the output so that the variables and their current values are displayed in the form of assignment statements. If that output is saved to a command file, it could be read in later to restore the variables' values. See the syms help file for details.

Multiple Concurrent data_pipe() Processes Implemented

Mmore than one data_pipe() process can now be running at a time. The new option data_pipe("?") lists the active processes.

Added New Cleanup Macros: cleanup_once and cleanup_always

Two new built-in macro names are recognized. If defined, a cleanup_once macro will be executed on errors or ^C and then be undefined. If defined, a cleanup_always macro will be executed on errors and ^C, but will not be removed. Definitions for these macros will be constructed in the standard spec macros using the cdef() (chained macro) function, in order to allow various clean-up actions be added and removed during the flow of block of statements.

Sort Limits For lsdef, prdef, syms Removed

The "too many symbols for sort" message will no longer appear when the lsdef, prdef or syms commands are used when there is a long list of items.

Associative Array Elements Are Printed with print

The print command will now print out all the elements of an associative array.

Fixed Communication Problem With Silena MCA

Communication with the Silena MCA over a GPIB interface has been made a bit more robust.

Fixed Harmless Prompt Bug With else-less if

A bug, where the prompt would incorrectly be more> (to indicate an unclosed curly bracket) has been fixed. The behavior would occur under certain conditions that included having a curly bracket as the next input token after an else-less if statement block.

Fixed Obscure Bug With unix() Function

A bug where spec would hang (ignoring the interrupt and quit keyboard signals) under a particular sequence of commands has been fixed. The sequence required a call to the unix() function using two arguments, where the shell command in the first argument didn't produce any output to place in the string given by the second argument. That call needed to be followed by having either a graphics filter or data-pipe process started up, followed by another unix() call.

edconf Menu Scrolling Improved

The "drop-down" menus in the edconf configuration editor now wrap around smoothly when moving up from the top or down from the bottom of long lists. In addition, the ^F and ^B commands can be used to scroll a screenful at a time. Also, when selecting an item within the menus, the normal up/down keys and arrow keys can be used.

Several ESRF Fixes and Features Added

A number of fixes and additions involving ESRF hardware and device access are included. The esrf_dc() function now works properly with a leading //host in the device names. The esrf_io() function now takes a single "?" option that will list all the devices available on the current NETHOST. An optional second argument can contain a pattern using the * metacharacter to filter the devices listed. See the esrf help file for more information. Also, the ESRF local hardware development for the Frelon camera, Sensicam device server and MCA device server have been incorporated into this release.

Support For XIA HSC-1 Huber Slit Controllers

Initial support for the X-Ray Instrumentation Associates HSC-1 Huber slit controller is included. See the xiahsc help file for details.

RELEASE 4.03.12

These notes summarize the cumulative changes made for spec release 4.03.12 as of June 15, 1998.

New config File Format For Geometry-Linked Scalers

Now individual scaler channels can be associated with particular diffractometer geometries, just as with motors, when linked config files are used. (See the config_adm help file.) To implement this feature, the format for the scaler information in the config file has been changed in a non-backwards compatible manner. Instead of single characters T, M or C to indicate the function of the scaler, a hexadecimal number is used to contain that and other information. Old versions of the config file will be automatically converted to the new format when new versions of spec or the configuration editor edconf are run, but scaler information in config files with the new format will not be read properly by previous releases of spec and edconf.

New Version of z-axis Geometry

The old zaxis geometry code has been replaced with new code that includes support for an orientation matrix, among other features. See the geo_zaxis.c source code for the implementation. The previous zaxis code is in geo_zaxis_old.c

Another gamma Pseudomotor For the sixc Geometry

A second type of pseudomotor configuration for the gamma motion for the six-circle geometry is implemented. This configuration uses a linear screw configuration to translate the gamma motor in an arc as used at UNI-CAT at APS.

Scan-File contents Utility Works Faster

The contents utility, which prints a table of contents of standard spec data files, has been sped up by using new built-in C code in the scans.c and scans.4.c files instead of the awk script used previously.

Minor Updates To scans.4, Including a Bug Fix

The scans utility and the C-PLOT scans.4 user function have new options to print out scan file table of contents. While the -p option still prints out the short format contents, the new -P option prints out the contents in a long format. In addition, if the verbose flag is set using +v, the data file comments are also displayed. Also, a very old bug that randomly (although rarely) caused scans.4 to crash when fclose() was called with an already-closed file pointer has been fixed.

Support For Two RTC-018 Modules

spec now supports two RTC-018 CAMAC modules in use at the same time, with the first module used for counting to time presets and the second module used for counting to monitor presets. Previously, with one module only, users needed to manually change the input source cable. Note, the gates from the two RTC-018 modules need to be properly tied together when connected to scaler inhibit inputs.

New Ethernet-Based NT-2400 Hardware Support

spec now offers preliminary support for the Laboratory Equipment Corporation NT-2400 ethernet-based hardware controller. This device (from Japan) can include motor controllers, timer/counters and MCA modules. See the nt2400 help file for details.

Fixed Crash With Too Many Motors In config File

A bug where spec could crash if there were too many motors in the config file has been fixed.

Fixed Problem With Trailing Space In config File

When using particular utilities other than spec's configuration editor edconf to modify the config file, users found extra space characters got added to the end of each line, which spec inappropriately included in the motor and counter names. The code has been fixed so that such trailing space is removed automatically.

New Options For sock_io()

A timeout can now be set for socket reads with the sock_io() function. In addition, a byte count can be specified for a read in addition to the previous read-until-newline behavior. See the sock_io help file for details.

New Busy-Wait Calibration On Startup (Linux Only, So Far)

On startup on linux versions, spec does a calibration for a busy-wait loop, which is used to implement delays of less than a few tens of milliseconds.

Fixed Problem With Tsuji PM16C On Fast PCs

Older versions of the Tsuji PM16C motor controller have timing problems with GPIB on faster CPUs, such as 200+ MHz pentium with the linux GPIB driver. spec now includes a timing patch that allows spec to work properly, at least on linux.

Fixed Bug With Software Timer

A bug where use of the software timer with powder-mode scans would hang the scan has been fixed.

Fixed Bug With Princeton CCD on SDV Interface

A bug in the timeout feature in spec that automatically restarts the Princeton CCD interface when a bug in Princeton hardware causes the interface to hang has been fixed to account for the added time taken when using kinetics mode. The estimated time for normal acquisition is also obtained more reliably now.

Fixed Bug With More Than 24 CAMAC Scalers

An old bug where spec would crash when the DSP QS-450, the KS 3640 or the KS 3610 CAMAC scaler modules were used with more than 24 channels configured has been fixed.

Fixed Bug Recognizing Certain Versions of PCA Multiport

A bug where the version string returned by certain firmware versions of the PCA Multiport MCA was not recognized such that spec reported the device as unusable has been fixed.

Compiled Under HP-UX 11.0

spec has now been built on HP-UX version 11.0 and awaits a site willing to give it a try.

RELEASE 4.03.11

These notes summarize the cumulative changes made for spec release 4.03.11 as of April 9, 1998.

CPU Usage When Idle Reduced

The mechanism spec uses to allow automatic hardware polling while waiting for user input has been changed to reduce CPU usage when hardware is idle. The CPU usage in the previous versions was not significant except for sites that ran many instances of spec on the same platform. In such an environment, frequent context switching among the processes kept the load average high.

Added Alpha Platform

A new target for DEC Alpha platforms is included in the spec installation script.

SCIPE Actuator Support Included

Preliminary support for the SCIPE protocols over TCP/IP sockets for "actuator" devices is now included. (SCIPE is a simple protocol for device control developed at the DND CAT at the Advanced Photon Source.)

XIA DXP Module Support Included

Preliminary support for the X-Ray Instrumentation Associates DXP MCA module is now included.

LeCroy 4434 CAMAC 32-Channel Scaler Supported

The LeCroy 4434 CAMAC 32-channel Scaler is now supported by spec.

Fixed Block Mode For KS3929 On Solaris Platforms

CAMAC block mode transfers on Solaris 2.x platforms using the CSS kernel driver for the Kinetic Systems 3929 SCSI-to-CAMAC controller now work properly. The new version of the CSS driver needs to be installed.

Bug with HP E/ISA Errors Fixed

A bug that could cause spec to hang when HP E/ISA ports were configured but couldn't be properly opened has been fixed.

Fixed Bug with EPICS Debugging

A recently introduced bug that could result in core dumps if EPICS debugging was turned on has been fixed.

RELEASE 4.03.10

These notes summarize the cumulative changes made for spec release 4.03.10 as of March 16, 1998.

Improvements To the showscans Utility

The showscans utility, which uses C-PLOT to create 12-scans-per-page summary plots of spec data files, has been improved. A new -n flag turns off the default normalization of the data. When normalization is on, the data is checked after normalization to make sure the ranges are plottable. Also, the x-axis labels are now chosen more carefully.

OMS Motor Controller Code Updated

This release contains a rewrite of the code for the OMS motor controllers. The code now supports the unit/channel configuration option in the configuration editor. That means that each motor can be assigned to a particular controller unit and channel number, rather than being assigned consecutively. Because the revised code uses different internal routines for the motor functions, the messages displayed to the user and order and format of commands sent to the controllers will be different than in the previous releases.

Ortec Timer Code Revised

To accommodate changes in the Ortec 974/995 firmware, the handling of these Ortec timers has been modified. In particular, spec no longer uses "alarm mode" with GPIB interface timers, as the behavior associated with that mode differs among firmware versions.

Fixed Bugs In array_pipe

Some bugs associated with using data array arguments with the array_pipe() function have been fixed.

RELEASE 4.03.09

These notes summarize the cumulative changes made for spec release 4.03.09 as of March 9, 1998.

Device Unit Number Configuration Easier

The configuration editor now allows positioning the cursor in the unit-number field for MCA and CCD devices, for GPIB controllers and for generic serial devices. Entering a number in that column will swap rows.

Allow More Than 99 Scalers or Motors Per Unit

The configuration editor now allows entering values greater than 99 in the NUM field for motor and counter devices.

New Warning If Software Timer Not Completely Configured

The configuration editor now warns when exiting if the software timer is not configured on both the device screen and the scaler screen.

Fix a Possible Core Dump When x11filt Exits

A core dump that occurred when the x11filt process exited under certain conditions has been fixed.

Improved Debugging Messages For EPICS

The debugging information shown for EPICS (debug level 128) has been redone.

Fixed Max Number Of EPICS Scalers

The code has been fixed to allow up to sixteen EPICS scalers per unit. Previously the limit was eight.

Preliminary Support For EPICS MCA

Initial support for the standard EPICS MCA device support is included.

Preliminary Support For Jorway 73A SCSI-CAMAC On HP-700

Initial support for the Jorway model 73A SCSI-to-CAMAC controller for HP-700 platforms (HPUX 9.x and 10.x) is included.

Preliminary Psi-Circle Code

A temporary version of geometry code for a new configuration of six-circle diffractometer is included. The diffractometer uses two circles to orient the detector and four circles to orient the sample. Huber calls this diffractometer a psi configuration. Newport has a similar model, but with a kappa-geometry configuration for the sample circles. The code will support both. In the current version, the reciprocal-space-to-angles code is basically that from the traditional six-circle with suitable transformations for the different detector circle configuration.

Improved Signal Blocking Around GPIB Accesses

The signal generated by a ^C at the keyboard is now blocked more robustly surrounding GPIB accesses. In particular, a situation where the semaphore used to control access to the GPIB by multiple instances of spec would became misset after a ^C has been fixed.

Fixed Bug With Using Multiple Joerger VME Scalers

A bug which prevented spec from working correctly with more than one Joerger VSC16/8 VME scaler module has been fixed.

Debug Warning On Nested or Recursive Macro Functions

A message will be printed if the debug level is set to produce warnings (2048) and if a macro function is called recursively.

Error Message Now Printed If Nonexistent Function Called

Entering f(arg) where f is neither a built-in function nor a macro function now generates a syntax error during parsing. Previously, such a construction was treated as a valid instance of the catenation operator.

RELEASE 4.03.08

These notes summarize the cumulative changes made for spec release 4.03.08 as of January 20, 1998.

KS 3388 CAMAC-To-GPIB Support Upgraded

All the standard GPIB operations available with spec are now supported for the Kinetic Systems Model 338 GPIB-to-CAMAC controller. Previously only the gpib_put() and ASCII gpib_get() functions were available.

GPIB Secondary Address Supported

spec now supports GPIB secondary addressing modes from the user-level GPIB functions such as gpib_put(), gpib_get(), etc. To use a secondary address, the address field must be a string of the form "pri_sec", where pri is the primary GPIB address and sec is the secondary GPIB address.

EPICS epics_get() For String Records Fixed

A bug, introduced in spec release 4.03.04, that prevented the user-level epics_get() function from returning the value of a process variable having the type DBF_STRING, has been fixed.

HP Targets Now Linked With libdld

spec for the HP 700 platforms now includes the flags -ldld in the link line. The dynamic loader library is required for certain configurations, such as use of the SICL library on HP 10.2.

HP I/O Port Access Bug Fixed

A bug, where special device nodes in /dev/ioports/ didn't get created automatically if the particular E/ISA device required a long list of port addresses, has been fixed.

RELEASE 4.03.07

These notes summarize the cumulative changes made for spec release 4.03.07 as of January 5, 1998.

file_info() Usage Fixed

The usage file_info(filename, "-e") now returns nonzero if the file exists and zero if it does not, as the documentation states. Previously, the return values were the opposite, which was not what was intended.

Check For Process Existence With file_info()

The function file_info(pid, "alive") returns nonzero if the process associated with the process ID pid exists and zero otherwise.

New read_motors() Function

A new built-in function called read_motors() has been introduced. It replaces both the getangles and getdials built-in commands. For backwards compatibility, the standard macros now contain definitions for the two commands in terms of the new function. The argument to read_motors() is a bit flag with definitions as follows. If bit 1 is set, the function returns dial values, otherwise user values are returned. If bit 2 is set, a forced read of all hardware takes place. (For efficiency, normally most motor controllers are not read if the position hasn't been changed by a move.) If bit 3 is set and if there is a discrepancy between the software and hardware, the software will be silently corrected to match the hardware. Note, the forced-read and "silent-sync" features are not yet implemented for all motor controllers. Contact CSS for hardware-specific information.

Improvements For the @ Operator

It is now possible to create arrays with the @ operator. For example, one could create or refer to a series of arrays with code such as

for (i=0; i<10; i++) {
      s = sprintf("image_%d",i)
      array @s[256][256]
}

New Debugging Modes

A couple of (experimental) debugging modes are implemented to help diagnose runtime errors in macros and command files. DEBUG flag 0x20000 is similar to flag 2, which prints information about nodes during execution of the parse tree, but the new mode prints a somewhat more readable version. DEBUG flag 0x40000 turns on a mode that attempts to print out the context around the input line that generates a run-time error. This mode should not be used during normal operation, as it consumes extra memory and execution time to save all the needed information.

Motor-Listing Macros Updated

Use of the obscure _mo_loop macro in the standard macros has been eliminated. A new show_motor_info() macro function that is more understandable is now used, and the macros that call it, such as wa, lm, _head, etc., have been revised. Note, the _mo_loop macro is still currently included in the standard macros to maintain compatibility with local macros that may call it.

New wu Motor Macro

A new wu (where user) macro is included that is similar to the wa (where all) macro for displaying motor positions, but only prints the mnemonic and the user positions of the motors.

New wiz_passwd Utility

To cope with shadow password files and missing crypt() library routines, spec now comes with its own wiz_passwd utility for setting the specwiz password in the file SPECD/passwd.

Bug In Saving Pseudomotor Positions Fixed

Previously, when a move command only changed the positions of pseudomotors, the positions would not be saved to the settings file until a real motor was moved or some other command that wrote out the motor settings was executed. The problem was manifested when a reconfig command (which reads the settings file) was issued after moving a pseudomotor, at which time the position of the pseudomotor would revert to its previous value.

Raw input() From Pipes Possible

When spec is invoked with the arguments -p *pid fd*, as is the case when running from a GUI front end, if fd (the input file descriptor) is zero, the raw tty modes available with the input() function and used with gethelp() are now available. Previously, the raw tty modes were not available at all when the -p flag was used.

Number Of Queued Command Files Increased, Open Message Deferred

Previously, the "Opened command file ..." message was printed and the file opened when the command file was put on the queue using the dofile() or qdofile() functions. Now, the files are not opened until it is actually time to read them, and the "Opening ..." message isn't printed until the file is actually opened. Also, the number of files that can be queued for input is raised from 8 to 64. A new debugging level of 0x10000 will produce messages that show when input files are queued.

User Names No Longer Truncated For State File Name

The names of the user state files (stored in the userfiles subdirectories of spec's auxiliary file directory) are now formed with the complete user name, rather than just the first six characters (except on the remaining supported platforms that only allow fourteen-character long file names). Thus users such as opid18a and opid18b will now have distinct state files.

OMS PC48 Supported

The Oregon Micro System PC48 PC board motor controller is now supported.

RELEASE 4.03.06

These notes summarize the cumulative changes made for spec release 4.03.06 as of November 17, 1997.

More Significant Digits For Step Size

The motor step size is now saved in the config file with up to twelve significant digits. Previously, six was the maximum. Note, the screen display still shows only six.

Support For PGM Binary File Format

The fmt_read() and fmt_write() functions now recognize the pgm form of the "portable pixmap" file format. Usage might be:

ubyte array image[480][640]
image_get(0, image)
fmt_write("image.pgm", "pgm", image)

Fixed Bug in Not Finding Output Files When Restarting

A bug, where under certain conditions spec would not find a data file if spec was started from a different directory than the one in which the data file was opened, has been fixed.

New surf Configuration For NSLS X22B Beamline

A new flavor of the surf geometry, as used at the NSLS X22B beamline, is included in the spec distribution.

Implemented Standard Features For PCA-3 and Multiport MCAs

The code for the Nucleus PCA-3 and Multiport MCA models now includes support for the new spec standard MCA features such as auto-run and soft-preset modes. See the new mca help file for more information.

Support For Four-Chip Am9513 Counter Boards

spec now supports up to four Am9513 chips on PC ISA-bus counter boards, such as the ComputerBoards CIO-CTR20.

Support For Phytron Motor Controllers

spec now includes support for the Phytron IXE-alpha C motor controller boards.

Preliminary Support For Meteor Frame Grabber on Linux

Preliminary support for the Meteor PCI frame grabber card is now included. The support is only available on linux platforms and requires that the linux driver for the board be installed.

Fixes For Oriel 18092

Several code fixes are included for the Oriel Encoder Mike 18092 motor controller.

Fixed Bug Limiting EPICS Scaler Channels to Eight

A bug, where the number of generic EPICS scalers per controller was limited to eight in the configuration editor, has been fixed. Up to sixteen channels may now be configured.

RELEASE 4.03.05

These notes summarize the cumulative changes made for spec release 4.03.05 as of October 13, 1997.

Bug In data_dump()/array_dump() Fixed

A bug in the parsing of the optional format arguments to the data_dump() and array_dump() functions that sometimes mixed up the field-width specification with the number of points-per-line specification has been fixed.

Bug In Data Group Size Check Fixed

A bug where one of the constraints on data group size was not checked in the internal code has been fixed. The constraint of 65,536 total points in a data group is actually less for certain values of the number-of-elements parameter. The manifestation of the bug was that if a data group was configured which exceeded the lower constraint, it was possible to either create an excessively large data-points file in the userfiles area, or to have the data-group data scrambled. The internal check on the size constraint has been fixed, and the syntax of data_grp() has been expanded to aid in creating maximally sized data groups, as described next.

New Auto-Sizing Feature For data_grp()

A new syntax option for the data_grp() function is available. If the number of points is zero, as many points as are allowed will be configured. If the number of points is negative, as many points as are allowed up to the absolute value of the argument will be configured.

New Option To data_info()

The new option "precision" will return the number of bytes per data group element. The data type is set at installation time. The return value will likely be four for float and eight for double. Any number can be used for the data group argument.

RELEASE 4.03.04

These notes summarize the cumulative changes made for spec release 4.03.04 as of September 30, 1997.

Fix for Colors On X11 Plots

The code for color allocation for the X11 plot windows has been improved so that if a chosen color can't be allocated (usually due to other processes hogging the display's color map) it's more likely the substituted color will maintain contrast between the foreground and background of the plot (unlike previously). In addition, a message will be printed indicating that the selected color was unavailable.

Additions To energy.mac

A new monochromator type is now supported by the standard monochromator macros. The new type is a three-motor monochromator such as is used at several APS beamlines, and is recognized by the motor mnemonics mono, mon_y and mon_z. See the comments in the macros/energy.mac file of the standard spec distribution for additional details.

In addition, the monochromator settings are now stored in a file whose name is returned by the new standard macro function called mono_settings(). The default file is SPECD/mono_settings. (The old name for the file was SPECD/g_mo_d.mac.) The local spec administrator can configure another name or location for the monochromator settings file by putting suitable definitions for the mono_settings() macro in the appropriate site-dependent macro file. See the comments in macros/energy.mac for more information.

Also, the setmono macro has been rewritten to better handle the various permission issues associated with the monochromator settings file. To prevent users from changing the settings, the file should exist but be unwritable by users.

Removed user_getangles Correction From sixc Macros

The following correction to the counts for the sixc geometry:

def user_getcounts 'S[det] /= cos(rad(A[gam]))'

is no longer included in the standard sixc macros. If needed, the correction is more appropriately included in the SPECD/sixc/conf.mac optional site macro file by the local spec administrator.

New Support For Tsuji Motor Controller

spec now supports the Tsuji Electronics Co., Ltd. Model PM16C-02N 16-Channel Stepping Motor Controller over GPIB and RS-232C interfaces.

New Support For Ortec Trump Multichannel Buffer

spec now supports the Ortec Trump 2K/8K Multichannel Buffer ISA PC cards.

Block Mode Implemented For Solaris 2.x KS 3929 SCSI-CAMAC Driver

The CSS driver for the Kinetic Systems 3929 SCSI-to-CAMAC module now supports block mode transfers.

Fixes For ITL-09/MM2500 Motor Controllers

A bug introduced in release 4.02.02 where spec set the origin-search speeds to zero has been fixed. spec now also programs the origin-search "turn-around" time using the value configured for the home-acceleration parameter.

RELEASE 4.03.03

These notes summarize the cumulative changes made for spec release 4.03.03 as of August 13, 1997.

Preliminary Implementation Of New sock_io() Function

The new sock_io() function for sending and reading messages over a UNIX socket has been added to spec. See the sock_io help file for details.

Unused _units, UL, UN References Removed

The standard macros have had obsolete and unused references to the _units macro and the UL and UN symbols removed.

RELEASE 4.03.02

These notes summarize the cumulative changes made for spec release 4.03.02 as of June 24, 1997.

Tilde (~) Expansion Also Included For unix()

The recently added tilde-expansion capability is now also included for the unix() function.

Detector Counts Saved In reflex File

A comment containing the value of S[DET] is now included with each reflection added to the reflex file used when fitting the orientation matrix.

UB Calculation In New twoc Code Fixed

Inconsistencies in the UB code in the new geo_twoc.c have been fixed.

Old Bug With %c Format in sscanf() Fixed

A very old bug, where the %c conversion in sscanf() did not work at all, has been fixed.

Support For E/ISA Boards On HP 700 Substantially Cleaned Up

Problems with spec's support for E/ISA boards on HP 700 platforms have been fixed. In addition, the support is now available on HP-UX 10.20 platforms. All the ISA boards supported by spec should now be usable on the HP 700. See the ioports help file and aux/README.hp file in the spec distribution for more information.

Made raw-mode Serial Interface Really Raw

Previously, when setting raw mode for RS-232C ports, spec left software flow control enabled on certain platforms. That prevented completely raw byte-stream I/O in applications that required it. spec now makes the raw serial lines completely raw.

New Features For MCU-2 Motor Controller Support

The unit/channel configuration feature is now implemented for the ACS MCU-2 motor controllers. In addition, motors can be configured as MCU_O, which means that spec will send instructions based on the old PROMS, which don't require a start character before each command. Previously spec would first try to get a response with the start] character, then without.

New Support For The Nucleus MicroFast MCA PC Boards

spec now supports the MicroFast MCA PC boards from The Nucleus.

New Support For The Ordela AIM Neutron Detector

spec now supports the Ordela AIM/312 2D detector.

RELEASE 4.03.01

These notes summarize the cumulative changes made for spec release 4.03.01 as of June 11, 1997.

First Step in Changing Standard Macros From Data Groups To Arrays

The standard scan macros now call the macro function scan_data() instead of the function data_nput() to store the scan data. This change is the beginning of the the transition from use of data groups to the new data arrays in the standard macros. The plot.mac file includes a definition of scan_data() that calls data_nput(). Shortly, a new plot.mac version will be included in the spec distribution that has the plotting macros also defined in terms of the data arrays.

New and Revised Standard Macros

New onwiz and offwiz macros aid in using "wizard" mode. The onwiz macro prompts for the wizard password and starts a timer that will turn the mode off in ten minutes. An optional argument set the timer duration in seconds. A negative argument prevents installation of the timer.

The FRESH built-in variable is used instead of the test for the "unset" attribute of many global symbols for deciding whether to assign default values when the standard macro files are read in. A new unset macro function simplifies the test for the "unset" attribute in other instances.

The new file_info() function has replaced most of the unix("test ...") calls.

Revisions Relating To Handling Of Orientation Matrix

The built-in code and macros that deal with the orientation matrix, UB, have been modified a bit. The changes should make running spec easier for users who enter values for UB manually.

The calcG macro will now immediately calculate a new orientation matrix from the entered lattice parameters and the entered primary and secondary orientation reflections. (Previously, the macro simply set an internal flag - actual recalculation of UB was deferred until the new values were needed.)

Also, now only macros that change the values of the lattice parameters (setlat, setrlat) or the orientation reflections (or0, setor0, or1, setor1, or_swap) include calcG. (Previously, calcG was included in irrelevant macros.)

A new macro USER_UB, defined as calc(4,1), returns a value of 0 if UB was calculated the conventional way from the lattice constants and two orientation reflections using calcG, a value of 1 if any element of UB was assigned a value directly (if the value is different from that calculated by calcG), and a value of 2 if UB was calculated using the built-in least-squares refinement code.

The save macro now saves the UB values in the save file if USER_UB is set. Otherwise a calcG is included at the end of the file, as before.

The value of LAMBDA corresponding to each of the two orientation reflections is now saved with the save macro and displayed with the pa macro to aid in record keeping (the value is not used in any calculations).

The new macros showUB for displaying the current values for the UB matrix and enterUB for typing in values for the UB matrix are included in the standard distribution.

All the geometry source files that use the orientation matrix (geo_fourc.c, geo_twoc.c, etc.) have been modified to accommodate the changes, as have the macro source files.

HKL Rounding Now Configurable

The rather arbitrary and not universally appreciated "feature" where spec rounded values for H, K, and L (and other geometry values derived from motor positions) to five significant digits has been made optional. By default, the rounding is now turned off. It can be turned on using spec_par("HKL_rounding", 1e5) where the argument indicates the magnitude of the rounding, i.e., one part in 1e5, for example. Note, values with an absolute value less than 1e-10 are still rounded to zero whether or not the optional rounding is turned on.

New @ Indirection Operator

A new indirection operator has been introduced. It allows reference to a variable whose name is the string value of another variable. For example:

SPEC> a = "b"
SPEC> b = PI
SPEC> print a, @a
b 3.14159

Relative Moves For tty_move()

Relative moves are allowed with tty_move() using syntax that requires adding +/-1000 to the number position arguments. Both coordinates must specify either relative or absolute moves. If one coordinate specifies a relative move, the absolute move in the other coordinate will be ignored. Please note, not all terminal types support relative moves.

New "resized?" Option to tty_cntl()

A new "resized?" option to the tty_cntl() updates the ROWS and COLS variables in the event the window size has changed and returns a nonzero value if the window size has changed since the last call to tty_cntl("resized?").

New Sequences For tty_cntl() and tty_move()

The new sequences \[up], \[do], \[le] and \[nd] for up, down, left and right (non-destructive space) are recognized by tty_cntl() and the string argument of tty_move().

Enhanced unix() To Put Command Output In A String

The unix() function can now take a second and third optional argument. The second argument is the name of a variable in which to place the string output of the command in the first argument. The maximum length of the string is 4096 bytes (including a null byte). The optional third argument can be used to specify a larger size.

Array Updated Status Available For Non-Shared Arrays

The array_op("updated?", arr) function will now work with all arrays, not just with shared memory arrays. The function returns nonzero if the data in the array has been accessed for writing since the last check, otherwise returns zero.

Macro Functions Can Return Data Arrays

Macro functions can now return a data array. No new array storage is allocated. The return value refers to the same storage as the array used in the macro function.

Can Use local and global To Make Associative Arrays

By appending empty square brackets to the symbol names following the local and global keywords, the type of the symbol can be forced to be an associative array. Such a feature is useful when using symbols as arguments to macro functions before their type has been established by usage.

Cooked Mode For Tty Automatically Restored

"Cooked" mode is now automatically restored before the main prompt is issued after a call to input(-1), which puts the tty into no-echo, wake-up-on-every-character mode. Previously, a call to input(0) or a ^C-type error reset was required.

Recognize Tilde (~) Escapes In File Names

If spec is linked with the optional GNU readline library during installation, tilde expansion will now be performed in the conventional manner. The sequences ~/ and ~any_user/ will be replaced by the full path names for the current user's and any user's home directory, when those characters are used in the arguments to the open(), close(), on(), off(), dofile(), qdofile(), file_info() and chdir() functions.

delete Command Works With 2D Associative Arrays

The delete command now accepts 2D associative-array element arguments.

New Test If GPIB Controller Is Responsive

The function gpib_cntl(addr, "responsive") will return a nonzero value if the GPIB controller (not device) associated with addr is present in spec's configuration file and responds to spec's presence test.

User-Editable Source Files For Binary File Read/Write

The spec distribution now includes source files that allow users to create their own binary file formats for the new fmt_read() and fmt_write() functions. Note, though, the details of the interface are still evolving. Contact CSS for implementation details.

Fixes In fmt_read() and fmt_write()

A number of fixes are included for various bugs in the fmt_read() and fmt_write() functions.

Partial Fixes For String Arrays

Bugs relating to the use of the new string arrays have been fixed. Display of string arrays with the print command has been fixed to print the elements properly even if the elements are not null-terminated. Note, though, use of the string arrays is not yet completely robust. If rows of the array do not end with a null byte, some spec functions that operate on the arrays may generate a memory fault.

Fixed Broken Feature That Warns Of Disappeared Files

The feature added several years ago that would notify users of open output files that had been removed from the file system had been broken for some time, but is now working again.

Fix For array_plot()

The array_plot() function will now work properly with a one-element array.

Fix For whatis()

The whatis() function has been fixed to return the correct values for array elements, as in whatis("G[0]"). Recent releases of spec did not work correctly, which broke the test for UNSET status in some of the standard macro files.

Fix For getline()

The getline() function has been fixed to reopen a file that has been removed and recreated between calls to getline().

Parity Configurable For Specific Serial Devices

Even or odd parity can now be configured for RS-232C motor controllers, counters, etc. Previously only a no-parity mode was allowed.

Linux I/O Port Access Privilege Handling Revised

spec now handles the problem of gaining I/O port access on linux in a different way, such that the kernel patch previously used is no longer needed. However, spec must now be installed as a set-user-id root program.

Fix for X11 Fonts On Plots

The x11filt program has been changed to ignore any X resource for a nonapplication-specific default font. Only the spec.Font resource will be considered. This fix solves the poor font size selection some users have experienced with spec's X11 plot windows.

Fixes For EPICS Motor Driver

A couple of improvements have been made in the support for the EPICS motor driver. The motor resolution is now read back using the proper numeric type, so it no longer depends on the setting of the precision variable. Also, the offset parameter that relates user and dial units is now correctly set in the EPICS data base.

Preliminary Implementation Of ESRF DC Motor Server

Initial support for the new ESRF DC motor device server is included.