Changes Since Igor Pro 5.0

This file describes significant changes made to Igor Pro and supporting files since the initial release of Igor Pro 5. Here are the updates in reverse chronological order:

August 6, 2006: Update 5.05A
July 10, 2006: Update 5.05
August 22, 2005: Update 5.04B
July 29, 2005: Update 5.04A
July 22, 2005: Update 5.04
November 15, 2004: Update 5.03
July 20, 2004: Update 5.02
February 5, 2004: Update 5.01
Nov 24, 2003: Release 5.00 CD. See IGOR Pro 5 New Feature Details about changes since Igor 4.

How to Update Igor Pro 5

Click here to download standalone updaters from our Updater Web Site.


Update 5.05A

Igor Application

BUGS FIXED

Corrected the Note operation to once again allow no comma between the wave name and the note string (see Update 5.05).

Fixed crash when AnnotationInfo was called for a ctab or cindex ColorScale in a Layout.

KillWaves/A/Z no longer incorrectly kills waves used by ColorScale and DrawPoly objects in Layout windows.

Fixed: Modify Image/Contour dialog as sub-dialog to New Image/Contour erroneously included data folder path to zwave in Modify command if zwave was not in the current data folder.

Windows: During startup, the window position of Igor is restored properly even if it spanned more than one monitor during shutdown.

Extensions

Fixed a problem with Data Browser support for built-in color tables that contain more than 256 colors. Also fixed a problem with remembering sizes of various data browser panes on Windows only.

Update 5.05

Igor Application

BUGS FIXED

Fixed NaNs printed for 0-length wave in the Debugger's Waves in Current or Root Data Folder pane.

Fixed crash that occured when 21 tabs were created for a TabControl.

Fixed a bug that caused misbehavior in a table embedded in a panel embedded in a graph. When you clicked in the entry area of the table, it was inappropriately cleared.

Now a ColorScale displays the correct range of numbers for an f(z) trace that has a z wave subrange such as:

	ModifyGraph zColor(theTrace)={theZWave[0,30],*,*,BlueHot}

Fixed crash when displaying a ColorScale for a complex image plot or f(z) trace with a complex z wave.

The /J flag in the LoadData operation did not work correctly in some cases. For example, if you used /J="Test1" and then loaded a file containing a wave named Test10, it would incorrectly load Test10. This is fixed.

Fixed a bug in Integrate1D where vanishing integrals failed to converge under Romberg and Trapezoidal methods.

Fixed bug in handling of tile and stack checkboxes in Append To Layout dialog.

Changed rounding method in ImageSeedFill. This change affects seed locations for image waves that employ wave scaling.

Windows: The "PrintSettings setPrinter" command now works with long printer names.

Windows: Fixed a bug where table windows did not report the correct keycode parameter to named window hooks. See SetWindow.

Fixed a bug in ParseFilePath that affected paths whose elements consisted of a single character.

Fixed a bug in WaveStats which reported the wrong location for min and max values of complex waves.

Extensions

Fixed an XLLoadWave bug that sometimes caused a crash if the /I flag was used or if the file to be loaded was not fully specified in the command. The crash was caused by a bug in the code that displays the XLLoadWave options during an interactive load.

WaveMetrics briefly shipped the NIDAQmxBaseAccess XOP in this folder. This was intended to provide some small degree of support for data acquisition on Mac OS X. We found NI-DAQmx Base to be buggy, incomplete, and not entirely compatible with Igor (it runs a copy of Labview within Igor's process). It now turns out that the XOP must be re-built for newer versions of the NI-DAQmx Base driver. Consequently, we have concluded that we cannot provide this XOP. We apologize. If you really want this XOP, we can provide you with the source code to build it. Contact us at support@wavemetrics.com. Unfortunately, this leaves no good solution to data acquisition on Macintosh unless National Instruments decides to port the NI-DAQmx driver to Mac OS X. If that happens, then we can make the NIDAQ Tools MX package available on Macintosh and Windows.

The new version of SndLoadSaveWave XOP works on both Mac and PC, and on Windows duplicates (obsoletes) the commands provided by the LoadWAVfile XOP. The new XOP requires QuickTime 7, available by download from http://quicktime.apple.com.

Procedures

Revised New Polar Graphs.ipf to allow calling WMPolarRemoveTrace without the Modify Polar Graphs panel showing.

Examples

Added an example of a procedure that processes multiple experiment files. To see it choose File->Example Experiments->Programming->Multi-Experiment Process.

Update 5.04B

Igor Application

CHANGED FEATURES

ImageLoad now has enhanced support for private tags of type float and double.

Added hideTrace to TraceInfo results.

BUGS FIXED

Fixed behavior of bessj and bessk at x=0 and negative order for algorithm 2; fixed behavior of bessk at negative orders and x=0.

Fixed edit wave via option (alt) click on polygon draw tool (broken since an early beta of 5.04.)

Fixed incorrect results given by Correlate/C when the length of the input waves wasn't a power of two.

Fixed cause of crashes that occasionally occurred when multiple debugger breakpoints were pointing to the same executable code (for example, a breakpoint on a comment line followed by a breakpoint on the next line of code).

Windows: If a certain Geneva font (which is missing a character) was installed on the machine, this caused the text in help windows to be incorrectly wrapped. This is now fixed.

Windows: fixed EPS export of images under 24 bit depth.

Procedures

Changes in 3DWaveDisplay.ipf: fixed sizing and positioning of the display under Windows and reduced the scrolbar upper limit so that Igor does not complain about a parameter out of range.

Extensions

Fixed a few problems with the Windows version of the Graphical Slicer.

Update 5.04A

Igor Application

BUGS FIXED

Fixed a rare crashing bug in the debugger when a procedure window is closed while auto-compile is turned off.

Fixed a rare crashing bug in the Control Properties dialog when closing the dialog while auto-compile is turned off.

A user-defined control action procedure that killed the control's own window during the window kill event no longer endlessly recurses.

Windows: Restored compatibility with Windows 98 and ME (fixed cause of constant crashes).

Update 5.04

Igor Application

CHANGED FEATURES

NVAR_Exists, SVAR_Exists, KillStrings and KillVariables now work when NVAR or SVAR is in a structure. Also, sprintf can now use an SVAR in a structure as the destination.

Added a new event to all controls that have an action procedure. EventCode -1 indicates that the control is about to be killed. Sent only to new-style action procedures that use a structure as input. This event gives you an opportunity to clean up data structures, etc., that may be associated with a control.

Added a new way to save preferences for packages of Igor procedures. See Saving Package Preferences for details.

Added the LoadPackagePreferences and SavePackagePreferences operations.

If you open a plain text file (procedure file or notebook), edit it and then save it, Igor preserves the line terminator (CR, LF or CRLF - as determined by examining the first line in the file). Previously Igor always wrote CR on Macintosh and CRLF on Windows.

When a graph trace is hidden with ModifyGraph hideTrace(theTrace)=1, now the hidden trace's symbol in annotations (and following text) are also hidden. The amount of text that is hidden is the lesser of: 1) the remaining text on the same line 2) the text up to but not including another trace symbol "\s(traceName)".

You can now call a static function using double names without assigning the result to something.

Optimized storing into a string wave when source and dest strings are the same size.

Tweaked markers to give more correct results especially on Windows and for EPS export. Shifted position of triangle markers to the center of the triangle rather than the center of the enclosing rectangle.

Changed the way wave *= works in user functions. Previously since the introduction of Igor 5, the final multiplication was done in the native format of the destination (left-hand side). This causes problems when the right-hand side is fractional and the wave is an integer. Now both multiply and divide are done in double precision floating point. Add and subtract are still done in the native number type.

Improved EPS export of dashed lines for oversampled data. Previously, if there were far too many points than needed to define a curve, dashed styles could appear solid. This was due to Igor breaking the curve up into many smaller segments with the dash restarting on each segment. Now segments are much larger. You can control the max segment length using SetIgorOption maxPSDashPnts= n. n can be set to zero to use the old code if the new code gives new problems. By default, n is 1000.

Added the new flag (/S) to MatrixOP. You can use this flag to retain wave scaling, units and wave notes for waves appearing on the left hand side of the equation.

Added new keyword to ImageTransform (imageOffset).

The /N=name flag for Display, Edit, NewPanel, and Layout commands now ignores window recreation macro names when checking for name conflicts. This means that Display/N=Graph0 will create a graph named "Graph0" even if a window recreation macro with that name exists. Before 5.04 the window would have been named "Graph1".

The number of remembered recent files and recent experiments has been increased to 20.

Changed IntegrateID to limit excessive recursion when using Gaussian Quadrature in adaptive mode. The function returns NaN when reaching the limit and a BUG message is printed in the history.

Added "Go To <constant>" and "Go To <structureType>" to the procedure window contextual menu.

Added PrintTable operation.

Added a Hide Trace and Autoscale [hidden trace] checkbox to the Modify Trace Appearance dialog.

Added the \k(r,g,b) escape code to annotations so that fake legend symbols can be made to look like the real thing when filled and stroked markers are used (such as marker=19):

\k(r,g,b) - use specified color for marker stroke (line color). r, g and b are integers from 0 to 65535. Use with (before) \Wtdd to change marker stroke color from the default of black (0,0,0).

Changed bitmap export types (png, jpg and tif) to use new code that allows for larger width and resolution settings. Previously, espceially on Mac, a (bogus) out of memory error would sometimes be reported when trying to create high resolution bitmap formats. The new code also uses full 32 bit color regardless of the monitor settings. If the new code causes any problems, there is a work-around to cause the old code to be used (inquire.)

Execute can now accept a string expression containing a Macro. The string must start with Macro, Proc or Window and must follow the normal rules for macros. All lines must be terminated with carriage returns including the last line. The name of the macro is not important but must exist. Errors will be reported as usual unless the /Z flag is given in which case no error dialog will be presented and the V_Flag will contain a non-zero number if an error is encountered. Here is an example:

Execute "Macro junk(a,b)\rvariable a=1,b=2\r\rprint \"hello from macro\",a,b\rEnd\r"

You can now duplicate graph, panel, table and page layout windows by choosing "Duplicate Window" from the Edit menu.

You can now hide a trace in a graph using ModifyGraph's new hideTrace keyword. hideTrace=1 hides the trace and removes it from autoscale calculations while hideTrace=2 just hides.

Added three new fields to the ListBox's WMListboxAction STRUCT:

// Next three are new in 5.04 and read back the same named inputs as a convenience
	WAVE/S listWave
	WAVE selWave
	WAVE colorWave

GetWindow now returns more accurate coordinates for rectangles when specifying the Points versions. Previously, values were rounded or truncated to integers but now are floating point.

GetWindow winName wsizeRM returns the window (or subwindow) size as would be used in a window recreation macro. This differs from the actual window size only for subwindows that extend beyond the bounds their host window.

Legend symbol for bar mode now uses optional fill color if it is used. Plus fill color is used unless only minus is on.

PlayMovieAction new keywords:

The SaveTableCopy operation now accepts /T=3 to write file as space-delimited text. However, tab-delimited is a more widely supported format so space-delimited should be used only if necessary.

The /DEST=<simple name> flag used in the FFT, IFFT, WignerTransform and DWT operations used to always automatically create wave references. Now they will create wave references only if there is no pre-existing wave reference for the specified destination wave. See Automatic Creation of Wave References for details.

MatrixSVD: added the flag /INVW which creates the wave W_InvW containing the inverse of the W_W wave.

Added selector bits to EqualWaves for testing wave lock state, data full scale values and wave dimension sizes.

File->Save Notebook and File->Save Procedure will now work even if the notebook or procedure file has not previously been saved to disk.

LoadWave now sets the string variables S_path and S_fileName before executing any commands in an Igor Text file rather than after. This was done because a user wants to use the S_path variable in the Igor Text file commands.

KillDataFolder now sets the variable V_Flag to 0 on success or to an error code on failure. The new /Z flag suppresses the error dialog and allows execution to continue.

Raised the limit on the size of an unpacked experiment file from 1 million to 2 billion bytes.

WaveStats now creates the variable V_Sum and set to the sum of the data in the wave.

New function: stringCRC(inCRC,str)

Returns 32 bit cyclic redundancy check value of bytes in str starting with inCRC which should be zero for the first (or only) set of bytes. Polynomial used is:

x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1

See crc32.c in the public domain source code for zlib for more information.

Changed Extract/O when used in Functions to use the contents of a destination WAVE variable rather than just using the name of the variable.

Changed ModifyGraph width and height to use floating point for better accuracy. Mainly for use on Windows when setting the size of an image to match screen pixels. (See the Autosize Images package.)

Dialogs now remember their positions on both Macintosh and Windows. Resizeable dialogs now remember their sizes. As a bonus, the position of draggable dividers in dialogs are remembered, too. The downside is that old Macintosh dialog position memory is lost; you will have to re-position your dialogs.

Behavior change: Dialog Wave Browser settings of sort order and state of the filter string control are now made globally. That is, if a dialog has more than one Wave Browser, any changes made to one are made to all currently running Wave Browsers.

Dialog Wave Browser settings are now remembered across invocations of Igor.

The WinType function can now take a subwindow path as input.

MatrixOP now supports ln() and log().

The log function (base-10 log) now accepts complex arguments.

Added new flag (/M=rank) to MatrixFilter that allows you to choose the rank of the pixel value used in median filter.

Added to MatrixOP: support for floor(), ceil() and round().

On Macintosh, Igor remembers what you selected in the Enable popup menu of most open file dialogs. This was previously remembered on Windows only.

Macintosh: Improved handling of file name extensions in Save File dialog.

Mac OS X: When printing to a PDF file, the proposed file name will be the name of the top window. This was inconsistent in the past.

Windows: The ChooseColor operation (and the Other... button in color popup menus) now position the Color dialog in the center of Igor's window frame instead of putting the dialog at the top left corner of the main monitor, and now the Define Custom Colors are initially shown.

Windows: In the "Provide Wave Names" dialog that you get when loading data from text files, when you click the Skip Column button, the focus is now set back to the item that was active before you clicked the button so you can press tab to move to the next item. Previously the focus was left on the Skip Column button.

BUGS FIXED

Fixed a crash that occurred very rarely when saving waves containing less than 16 bytes of data.

Fixed a problem where a shared wave stored in the same directory as a packed experiment file was improperly written out as being in the root data folder when the experiment was saved.

Fixed a problem where a shared wave in the same directory as a packed experiment file was improperly changed to packed when the experiment was reopened.

Previously the LoadWave operation did not set V_flag if the user canceled in the Open File dialog presented by LoadWave. Now it sets V_flag to zero in this event. If S_fileName is "" then the user canceled.

MoveSubWindow with keyword fnum didn't work in functions, now it does.

Fixed an obscure OperationHandler bug. If an XOP programmer defined an operation with an array style optional parameter that was not the only parameter in its group, the automatically generated code used the wrong index into the paramSet field.

In a formatted notebook, if you selected text that spanned two or more format runs and pressed Ctrl-up-arrow (to offset text up) or Ctrl-down-arrow (to offset text down), the text offset was incorrect in the format runs after the first.

If you do a Save As of a notebook or procedure file, the current experiment is now marked as needing saving.

Scrolling a table now works correctly even if part of the table is offscreen.

Using the 'as' keyword before the file name in an OpenNotebook command now works. The 'as' keyword is optional.

Fixed a problem in the Modify Trace Appearance dialog where a hidden trace's Hide Trace checkbox wasn't properly checked.

Fixed a minor bug in the Search Igor Files tab of the Igor Help Browser. The topic where a phrase was found was incorrectly reported if the topic contained no subtopics and the help file was not open.

Fixed a bug in DWT that could cause a crash when using /P=2.

A function call myModuleName#foo() in #pragma ModuleName=myModuleName no longer links to a global function foo() when myModuleName#foo() doesn't exist.

Fixed a problem involving plot guides in graphs embedded in panels (but not in graphs.)

Added the %b extension back to printf; it was lost when new printf code was adopted March 29, 2004.

ModifyControlList/Z "nonexistantControlName" no longer crashes Igor.

The Curve Fit dialog Graph Now button does not support the new exponential fit functions that use a constant X offset. And now the error message when you click the button actually says that.

Fixed a bug in the Redimension Waves dialog: clicking in the blank area of the editing list resulted in a bogus title in the Set All button.

MatrixOP fixed a potential crash when using 3D waves.

SetVariable no longer generates commands with doubled commas when it has no value set.

PCA: fixed a bug that could cause a crash if any one of the input waves was not valid.

Sometimes when printing a notebook, procedure file or help file, the last line of the last paragraph is not printed. This problem occurs if there is no return after the last printing line in the document. It is due to line breaks changing because of higher resolution when printing. A tweak was added to minimize this problem but it will still occur in some cases. The workaround is to add a return at the end of the document.

The Modify Axis dialog, Axis Range tab now keeps two more digits of the difference between min and max in the manual range.

The Modify Axis dialog no longer keeps settings changes that result from Live Update alone. In some cases a rounded-off setting could be kept unintentionally because Live Update changed the graph's data structures.

Fixed a bug in the handling of the file type in Load Image dialog. It caused /T=ANY to be used in the command generated by the dialog instead of, for example, /T=TIFF.

Fixed crash in the Debugger if a structure with a NULL wave member was shown in the WAVEs and STRUCTs pane.

Igor no longer calls the IgorQuitHook function(s) twice.

Fixed a bug in the Curve Fit dialog: Constant setting on Function tab was forgotten when returning to Function tab.

Fixed yet another bug in Curve Fit dialog memory of previous state. Under certain circumstances, the weight wave and the mask wave (on the Data Options tab) would be forgotten.

Fixed RemoveFromGraph when trace is plotted using /VERT flag. Did not do the right thing and also could cause a crash.

Fixed a bug in LoadWave/G/L that made the load slower than it should have been when loading a section of a large file.

Fixed a bug in ImageLoad/G where PNG images were loaded but not displayed.

Fixed a bug in PCA which gave wrong error message when the number of rows of the input matrix were smaller than the number of columns.

AddListItem now works correctly when appending to a list lacking the last list separator.

ListMatch now always returns a list with a final list separator.

Fixed bugs in EqualWaves that could give incorrect results for some selector codes.

Fixed a bug in Modify Axis dialog: some popup menus would give erroneous commands or even crash if you popped up the menu and then clicked away without making a selection.

Fixed a bugs in the Redimension dialog: a crash would result the next time you opened the dialog if you moved the divider line. Also, the size of the dialog was not being saved, only the position.

Fixed a bug that caused the Set Tiling Area dialog to malfunction if your screen resolution was an odd number.

Fixed a bug in ImageTransform averageImage which affected waves of double precision.

Choosing Capture Procedures Prefs while the Help Window is the top-most window no longer crashes Igor.

The /J flag in the LoadData operation did not work correctly in some cases. For example, if you used /J="Testing;Test" and then loaded a file containing a wave named Test, it would fail to load that wave because it found Testing first and considered it a mismatch, and did not continue searching for "Test". This is fixed.

ProcText now returns the text of macros and procs again (it worked only for functions in previous versions of Igor 5).

Fixed a problem whereby a wave in a table might not be updated properly if it was controlled by a dependency.

Fixed a problem with Macintosh version of the Data Browser that made it impossible to select commands in the history window after clicking on a variable name.

Fixed a problem in ImageUnwrapPhase /M=1/E which resulted in an inappropriate error message.

Fixed a problem in MatrixInverse that could result in a crash on user abort.

Fixed crash bringing up the New Fit Function sub-dialog from the Curve Fit dialog.

The Annotation Dialog would jump back to default position when you selected a differenct annotation type, and when you clicked the Duplicate button in the Modify Annotation dialog. Sometimes it would leave behind a ghostly image of parts of the dialog window.

Changed ListBox to better deal with the situation where the number of rows shrinks after a previous larger number of rows had been present and had been scrolled down.

Fixed bug where rotated legends had wrong line height if text was in front of the wave symbol.

Date-time axes will not permit a reversed axis range. It never worked, but in some cases Igor tried and failed. In some of these cases, the failure was in the form of an almost-infinite loop.

MatrixSchur: fixed output wave name for real wave input.

Fixed a bug in reading floating point TIFF images with more than one strip.

Windows: plugged user resource leaks that particularly affected the Curve Fit dialog. The problem was potentially severe on Windows 98, not much of a problem on Windows 2000/XP.

Windows: Fixed a bug that made the checkboxes inoperative in the Find In Table dialog.

Windows: Fixed a bug where if the Resize contents while dragging (a window size) effect was enabled by the user and the debugger was activated during a window hook's resize event, the debugger would not respond to mouse clicks.

Windows: Fixed bug that prevented target cell highlight from being drawn when a table was first created.

Windows: Fixed day of week bug. It was off by one when using a common or custom date format that included the day of week.

Windows: Fixed an obscure bug that caused windows to be shortened if the window title was partially under the menu bar and you called MoveWindow.

Windows: Two bugs related to new dialog position and size memory:

Windows: using /= no longer crashes when the left side of the assignment is an integer wave and the right side evaluates to zero.

Windows: fixed a problem involving minimized graphs with special size modes. Previously update would cause the minimized windows to move on the screen. This change should also cause GetWindow on a minimized graph to return correct sizes.

Windows: Fixed crash involving dependencies in panels combined with clicking the procedures popup in a procedure window after a modify but before a compile.

Mac OS 10.4 ("Tiger"): Color, line style, markers, etc popup menus in dialogs now show their current value instead of being blank.

Macintosh: fixed a problem extracting outlines for EPS export with embedded fonts.

Macintosh: Fixed Prompt popups so that even a leading "-" character isn't interpreted as a meta character (a long-standing bug).

Macintosh: Edit menu items (cut, copy, paste, clear, select all) now work in the Axis Label text edit box in the Modify Axis dialog. There might be other edit boxes in other dialogs that have been fixed as well.

Macintosh: Fixed bug in PrintNotebook with the /P flag. Sometimes the wrong pages would be printed.

Extensions

Added support for the HDF5 file format. See HDF5XOP for details.

Added flags to HDF5SaveData to allow appending to an existing dataset, overwriting a section of an existing dataset, and using compression. For general information on HDF5 support, see HDF5XOP.

New XOP: NIDAQmxBaseAccess.xop; provides access to functions defined by National Instruments' NI-DAQmx Base driver for both Windows and Macintosh OS X. NI-DAQmx Base is, in our opinion, missing important functionality, so use of this XOP is unsupported. You can ask questions, and we will most likely answer them, but we reserve the right to say, "Huh. You don't say." On Macintosh, it supports M-series, E-series, S-series, and USB DAQ devices, as well as some others. On Windows, it supports only certain USB devices. There is a help file and two procedure files with examples. Be sure to look over the help file before trying to use it. Requires downloading NI-DAQmx Base driver from National Instruments.

Gizmo: for both Macintosh and Windows versions fixed a bug where the very first line in wireframe surface did not show. Fixed a bug in Windows version where isosurface dialog did not show the isosurface value box.

Gizmo: Added the ability to modify attribute values from the command line.

Gizmo: Fixed a possible crash in the Windows version when clicking OK in the Surface dialog without specifying a surface wave. Added ability to modify FreeAxesCue position and scale.

Gizmo: Added support for named hooks.

Gizmo: Enhanced support for colortables in Surface, Path, Ribbon and Scatter objects. You can now use any of the built in color tables to span not only the Z-range but also the X-range, the Y-range and a couple of radial modes. You can now specify the starting and ending values that will be spanned by the color table as well as the RGBA for values before the first and after the last colortable values. See CTABScaling, minRGBA, maxRGBA and CTABAlpha keywords.

Gizmo: You can now add your own menus to Gizmo's menu (the one in IGOR's menu bar)

Gizmo: You can now load the Gizmo Procedures package directly from that menu. Also Surface, Scatter and Path dialogs can now allow source and attribute waves from different data folders.

Gizmo: You can now use ModifyGizmo with the /N flag to direct the command to a named Gizmo.

Gizmo: Fixed a problem on the Macintosh where it was difficult to control the color of the free axis cue.

Data Browser: Fixed a bug in Data Browser (Windows only) which affected double-clicking on objects when using two monitors. Also fixed a bug (Macintosh only) that affected editing object names under OSX.

Data Browser: Modified Windows version so that it no longer allows to type in the information pane when an empty data folder is selected. Also fixed the new data folder dialog so that it does not stay in front when switching between applications.

Surface Plotter: Fixed a problem on that could cause a crash on the Macintosh if printing was attempted before any drawing took place.

Surface Plotter:Fixed a problem on both Macintosh and Windows versions that could cause a crash when trying to list annotations or objects when none exist.

Procedures

Added HDF5 Browser.ipf to support HDF5XOP.

Fixed bug in Cross Spectral Density.ipf where the output waves were not created as complex.

New procedure file: HierarchicalListWidget.ipf is what the WaveSelectorWidget should have been: a way to make a hierarchical list out of a listbox control. WaveSelectorWidget should have been built using the new HierarchicalListWidget.

Modified HierarchicalListWidget.ipf to add support for coloring the rows in the list. See the comments at the top of the procedure file for details.

WaveSelectorWidget.ipf changed to give notification of selection changed for cases that were missed previously; changed to give notification that a data folder has been opened or closed; extended notification function syntax added to give your notification function the name of the containing window and the name of the listbox; a couple of bug fixes.

Fixed WaveSelectorWidget.ipf to preserve the current data folder when a widget is created.

Improved PieChart.ipf to no longer get confused when a user renames the graph. Fixed "Please Choose another Numeric Wave" bug.

Fixed a bug in cubicQuartic.ipf that caused inaccurate imaginary part of complex solutions of cubic equations.

Added square root transformation to Transform Axis1.2.ipf.

Added AppendContourToGizmo.ipf and GizmoBlending.ipf to Gizmo Procedures. They are automatically loaded when "Load Gizmo Procedures" is chosen from the Gizmo window.

Modified Image Processing procedures to make ImageSlider a self-contained. Changes were made to ImageSlider, Image Common, Image Line Profile.

Fixed Power Spectral Density.ipf's fPowerSpectralDensity() normalization factor deltaF.

Fixed bug in Waves Average.ipf- On the Waves Average control panel, the state of the Append To Graph checkbox was not honored. The result was always appended to the graph even when the checkbox was un-checked.

Added AutomaticallyFindPeaks function and Analysis menu item to Peak AutoFind.ipf.

New procedure file: WindowBrowser.ipf creates a hierarchical list of Igor windows and subwindows, window macros, etc. It lists the controls in control panels, traces and axes in graphs, etc. Double-click to bring a window forward. A menu acts on selected items: Bring them all "forward", save window macros, kill and save, or just kill all the selected windows.

Extract Contours As Waves.ipf now works if the contour data is liberally named (see Liberal Object Names).

Examples

All the examples in the Visualization:Gizmo have been modified.

Four example experiments (all located in the folder Examples:Movies & Audio:Sound Input:) have been slightly modified due to a collision with the new CloseProc operation. They are:

WaveSelectorWidget example experiment added in Examples:Programming.

Update 5.03

Igor Application

CHANGED FEATURES

Added CsrInfo function.

Graphics copied from the drawing layer no longer have an extra 10-pixel halo.

ImageInterpolate Voronoi now allows you to store and reuse the computed Delaunay triangulation.

ListBox controls may now have more than 100 columns. There is no fixed limit, but it isn't reasonable to expect it to work with thousands of columns. Added the widths+= keyword to set more column widths than will fit on one 400-character command line.

The ColorScale operation's tickLen parameter provides crossing and inside tick marks:

tickLen=t t =-2 to -50: tick marks are drawn crossing the edge of the colors box nearest the tick labels. The actual total tick mark length is -t.

t =-100 to -51: tick marks are drawn inside the edge of the colors box nearest the tick labels. The actual tick mark length is -(t +50). For example, -58 results in an inside tick mark that is 8 points long.

Controls now allow the disable value to be 3 to indicate both invisible and grayed out. This is to ease showing and hiding controls in tabs.

Igor now saves and restores the tool palette's current tool around recreation macro generation. This means when you save an experiment while in draw mode, the tool palette will now remain set for that mode.

CheckDisplayed now accepts host-child syntax (subwindows). Check is made of target window or subwindow including any of its children.

Added new flag, /RABS, to DrawPICT:

DrawPICT[/W=winName][/RABS] <x0>,<y0>,<xscale>,<yscale>,<PICT name>

Draws given PICT with top,left at x0,y0 and with the size scaled by xscale and yscale.

If /RABS is provided , xscale and yscale are really x1 and y1 and pict is drawn in the rectangle defined by (x0,y0) and (x1,y1).

New feature, direct rgb with f(z) display mode:

When using ModifyGraph's zColor keyword, you can now provide a 3 column wave of rgb values for each point. Column 0 is red, 1 is green and 2 is blue. If the wave is 8 bit unsigned int, then the color values range from 0 to 255 while other numeric types assume a color range from 0 to 65535.

Note1: To activate this mode you must designate the name of the color table to be directRGB in addition to providing a 3 column wave. The min and max values in the zColor parameters are not used and may be set to '*.'

Note 2: Subranging is not supported at the present time.

Here is an example:

make jack=sin(x/8)
Make/N=(128,3)/B/U jackrgb
display jack
ModifyGraph mode=3,marker=19
jackrgb= enoise(128)+128
ModifyGraph zColor(jack)={jackrgb,*,*,directRGB}

Changed image display code to avoid using individual rectangles for pixels around the edges of image plots except when it is truely necessary. Previously, some data and display types used a bitblit for the interior of an image but drew the pixels around the edges using individual rectangles even when it was not necessary. It is also now possible to force the bitblit method where previously rectangles were used because the image was too small. Use:

SetIgorOption imagedraw,TinyBlitOK=1

This lasts only for the duration of the IGOR session. It is mainly intended to force color scales to use the same draw method as the main image for those unfortunate enough to have printers that render colors in images differently than the same colors in other objects.

Mac OS X: right-click now brings up the same contextual menus that control-click does.

ModifyGraph margin=-1 creates a graph with no margin at all. In the Modify Graph dialog you can enter "none" for any margin value to create a margin-less graph.

Added the ChooseColor operation, which displays a dialog for choosing a color. The chosen color is returned in V_Red, V_Green, V_Blue.

Added the OperationList function.

CHANGED BEHAVIOR: Previously, when you selected Open Experiment from the File menu, the Open File dialog was always pointed at the Home folder (the folder containing the current experiment file). Now you can pre-set the dialog to show a particular folder using PathInfo/S pathname. Since we are nervous about possible ramifications of the test that allows this to happen, you can disable this behavior using SetIgorOption AllowPathInfoSForExperiment=0.

Added a "mix-in" overwrite mode (/O=2) for the LoadData operation.

ImageTransform has the following new keywords: insertXPlane, insertYPlane, insertZPlane, removeXPlane, removeYPlane, removeZPlane, compress, decompress and getBeam.

New operation: CloseProc which can be used for closing a procedure window.

Added Modify Trace f(z) sub-dialog support for new direct color mode for trace color as f(z).

ControlInfo on a ListBox control now reports the height in pixels of a row. This information is in the variable V_rowHeight.

Added .eventName field to named window hooks' WMWinHookStruct. It has the same values as the unnamed window hook's EVENT key. See SetWindow.

Unnamed window hooks set the new HCSPEC keyword:

HCSPEC:winName absolute path of the (sub)window. See Subwindow Command Concepts.

Tables, layouts, and notebooks now send the keyboard event (11) to that window's named hook function(s). See SetWindow.

New function: digamma(x): computes the digamma function, also known as the psi function. It is the logarithmic derivative of the gamma function. The digamma function is implemented for both real and complex argument x.

New keyword for ListBox control: keySelectCol=n. When a listbox has the keyboard focus, typing will cause the listbox to be scanned for matching strings in order to change the selected item. Setting n will select which column of a multi-column listbox is scanned. If keySelectColumn is not used, it defaults to column zero. NOTE: if you set keySelectCol to anything but zero, and save a recreation macro, it will not be compatible with Igor Pro versions older than 5.03b02.

New ListBox SelWave code: setting bit 0x40 in the SelWave value for a cell in a listbox causes that cell to be drawn as a disclosure triangle (Macintosh) or a treeview expansion node (Windows). The 0x10 bit is used to indicate open or closed, just as if the cell were a checkbox cell.

New Checkbox mode: mode=2 makes a checkbox look like a disclosure triangle (Macintosh) or a treeview expansion node (Windows). Value=0 draws the control in the closed appearance, value=1 draws the control in the open appearance.

Changed selection behavior of Dialog WaveBrowser: clicking with no modifier keys now clears selection from closed data folders (that is, clears invisible selections as well as visible selections).

Dialog WaveBrowser now clears hidden selections (selected waves in closed data folders) if you select a new wave with no modifier keys.

Added the following functions to MatrixOP:

Changed ImageGenerateROIMask to more accurately approximate the user's drawn shapes especially for small images. Now only the fill portion of the shape is used while previously a 1 pixel thick line was also involved. Also, compensated for rounding to pixel coordinates.

Windows: Made a SetVariable control's arrows auto-increment more quickly.

BUGS FIXED

Fixed a problem in Pop-Up Menus in Simple Dialogs when a popup had no items in it. Now the popup displays "_none_" just like The Missing Parameter Dialog does.

Fixed handling of file names beginning with dot. Previously ".<file>" was treated as ".\<file>" meaning "<file>" in the current directory. Now ".<file>" is treated as ".<file>" in the current directory.

Fixed problem in tables where the highlighting of the target cell would be wrong after resizing the table.

Fixed debugger crash when breakpoints were in an internal procedure file that was subsequently saved to disk.

Windows: Fixed debugger crash when using the arrow cursor keys to select rows in the Variables list when a value exceeded 255 characters.

Windows: Histogram of +/-inf values bug fixed: they're no longer included in the first bin.

Fixed a problem where changing a TextBox in a page layout while the layout is not 100% size would sometimes cause the textbox size to be wrong.

Saving and restoring the tool palette's current tool around recreation macro generation no longer causes the tool palette to be redrawn into the wrong window.

Windows: Layout popup menus of graphs or tables now can contain more than 30 items.

Windows: resizing a panel is allowed if the panel is not in operate mode (already the policy on Macintosh). This allows resizing a fixed panel when the Ctrl and Alt keys are held down.

Macintosh: Fixed possible hang in various dialogs with editable lists, notably the Control Properties dialog. Hang occurred if you clicked at the very edge of an editable field.

Fixed a bug introduced in 5.01. If you executed commands from a procedure window or from a notebook (by selecting them and pressing control-enter), carriage return characters were sometimes incorrectly suppressed.

Use space instead of bullet in the short-form date/time readout in the info panel in a graph. The bullet character causes problems in the Japanese version of Igor, as do all "high-ASCII" characters.

Use a tilde instead of ellipsis character to indicated an abbreviation of a string in the Japanese version of Igor.

DataFolderExists no longer ignores illegal data folder names.

Windows: Increased table cell height by two pixels. In a table, Japanese non-numeric text was sometimes clipped at the top. This was the result of a subtle bug in table code that shortchanged the height of a table cell by one pixel on top and one on the bottom. Fixing this bug fixes the problem with Japanese text but also means that all table cells on Windows will be two pixels taller than before.

Improved the behavior of legends after a ReorderTraces operation with special emphasis on cases where there are multiple traces associated with the same wave name in the graph.

Fixed crash when creating a graph subwindow encounters an error.

Fixed bug in Concatenate where the list of waves using the {} notation was used in reverse order when used in a function.

Now the Go To menu item in the Debugger's contextual menu will be enabled even when a static function is selected and choosing it will open the correct procedure window with the function selected.

SmoothCustom gave the wrong results when the coefficients wave was double-precision floating point and the data wave was single-precsion floating point.

Changing the name of a static function in an auxiliary procedure in the Control Properties Procedure subdialog would put the new function in the main procedure window instead of the one selected in the dialog's procedure popup. No longer.

Windows: PopupMenus implemented as a combo box drop-down list now support click-and-hold-scroll-and-release to make a selection.

Macintosh: When evaluating an expression such as "val^2+9" the debugger would display the expression as "val+9". The evaluated expression's value, however, was correct.

Fixed a bug introduced in the 5.03b2 release that prevented NewPath from working when you supplied a path to an alias to a folder on Macintosh. This never worked on Windows. Now it works on both Macintosh and Windows.

Fixed problems with line spacing in rotated legends.

Fixed a bug in the Curve Fit dialog that caused it to forget previously selected waves under certain circumstances.

New-style (named) window hooks return the same hs.winName for mousemoved, mousedown, mouseup, and kill when these events occur in (or to) a subwindow: hs.winName is the full spec of the subwindow such as "Graph0#P0".

Dynamic GraphMarquee and LayoutMarquee menu definitions work now (they weren't being updated).

Function References now work with static functions:

	FUNCREF protoFunc f = $"moduleName#functionName"
f(params)	// calls static function in module

See also the ModuleName Pragma.

Fixed WaveRefIndexed to work with table subwindows.

Fixed the debugger's inability to switch from viewing the contents of a wave to the viewing the contents of a structure in the Wave, Structures, and Expressions Pane.

Improved the behavior of legends after a Rename, RemoveFromGraph or ReplaceTrace operation with special emphasis on cases where there are multiple traces associated with the same wave name in the graph.

Fixed bug where FUNCREF in a structure did not work with XFUNCs.

Fixed bug involving expressions using s.w1[s.w2]] where s is a structure variable and w1 and w2 are WAVE references.

The Export Graphics dialog was exporting 1x PICT format at the most recently selected DPI (Dots Per Inch) instead of the selected screen resolution multiplier.

Fixed a bug in computing the FFT of byte waves using a built-in window function.

Changed IFFT so that it does create a real wave reference to the specified /DEST.

Fixed a bug in EqualWaves() that gave wrong results for text waves.

Fixed a bug that in HilbertTransform where /DEST flag did not work correctly.

Fixed an obscure bug that could cause a bogus error if you tried to do something with a file name or path that started with ".".

Previous fix to all-at-once fit functions with held coefficients wasn't complete. This time fixed improper indexing of epsilon values for all-at-once functions with held coefficients.

Curve Fit dialog: equation pictures for new exp_XOffset and dblexp_XOffset lacked minus signs inside the exponential terms.

Fixed problems in Dialog WaveBrowser that caused edit boxes and error frames to fail to track changes when a dialog is resized.

Fixed crash in Dialog WaveBrowser when trying to restore the previous selection and a datafolder in the path no longer exists.

Fixed (mostly) a rare bug where 'KillWaves aWaveRef' would kill the wrong wave if the original contents of aWaveRef was killed using certain methods and then a new wave was created.

Fixed tracking of edit cells and error frame on certain lists in dialogs, notably the Control Properties and New Graph dialogs.

Fixed crash when the Graph Now button in Curve Fit dialog was used with line or poly fits.

Fixed failure of CurveFit to update the autodestination fit curve after a line fit if residuals were also selected.

Fixed MatrixOP conj() function that returned a wrong value when the input was an unsigned complex integer wave.

Fixed a bug in ImageRemoveBackground /F.

The ListBox Control dialog would complain about out-of-range values for "Top Visible Row" and all values were "out-of-range" if the list text wave had zero rows.

The Preview control in the Control Properties dialogs now reflect the state of DefaultGUIFont for the owning window.

Windows: fixed the Control Properties dialog's preview displaying text with the dreaded Marlett font. Also restored the missing "default" font entry in the Font popup.

Macintosh: Fixed a bug that could cause Igor to accept a path to a file when it was looking for a path to a directory.

Windows: using the cursor popup menu when no cursor style functions were defined was producing harmless but annoying "BUG: AppendItemToContextualMenu: menus built in wrong order: detected firstAvailableMenuID decrease." messages.

Extensions

In Interpolate XOP, changed the way the X scaling of the Y destination wave is set when using no X data wave and "Dest X Coords" set to "From Dest Wave". The change avoids a minor roundoff error problem.

In NIGPIB2 XOP, fixed a problem whereby the NI4882 operation did not properly declare the V_flag and S_value output variables.

Windows: Fixed a bug in the IGOR Surface Plotter where the dialog for Surface Fill Waves did not register user changes.

Windows: Fixed a bug that affected the scroll bars in the Data Browser.

Gizmo XOP:

Windows: Fixed a bug in GBLoadWave, XLLoadWave and MLLoadWave that caused the wrong folder to be displayed in the Open File dialog if you executed, for example, GBLoadWave/P=<path>.

Shipped XLLoadWave 5.02 on Windows. 5.02 on Macintosh shipped with Igor Pro 5.02. In theory, 5.02 on Windows should behave the same as 5.01 on Windows. However one user found that 5.01 sometimes failed to load cells at the end of a column and 5.02 does not have this problem. It's a mystery.

Windows: Fixed a problem in NILoadWave that sometimes caused it to display an error message instead of the Open File dialog.

XOP Programming

It is now possible to pass an Igor Pro structure to an external operation or external function. This is a feature for advanced XOP programmers. If you use it, your XOP will require Igor Pro 5.03 or later. This feature also requires XOP Toolkit 5.03 which will be released after Igor Pro 5.03 final is released. If you want a pre-release copy of XOP Toolkit 5.03, send a request to support@wavemetrics.com.

Procedures

New Polar Graphs Cursors.ipf no longer breaks into the debugger when Debugging on Error is set.

Multi-peak fitting 1.4.ipf updated to version 1.42 from 1.41. Fixed a few minor problems and added a few features. See the Multi-peak fit.pxp example experiment or comments in procedure file for details.

Revised PieChart.ipf to reorganize the panel and provide better error messages.

New Polar Graphs.ipf, etc: Added polar coordinates readouts of the A and B cursors. New included procedure New Polar Graphs Cursors.ipf. Fixed bug where on Mac OS X closing a polar graph that wasn't the top polar graph would orphan the top polar graph instead of the polar graph that was being closed.

Added RosePlot.ipf and help file. This adds a simple "rose plot" graph to Igor using the Polar Graphs procedures. Rose plots show the probability of a quantity (often wind speed) associated within groups (or "bins") of directions.

Added ColorWaveEditor.ipf file and made it a package in the Data menu. Provides easy way to edit color values in a three-column (or more) color wave such as you might use for indexed color mode in an image, or for direct color with Color as f(z) on a graph trace.

Revised Global Fit 2.ipf to require the Ctrl key (Macintosh) or right click (Windows) to present contextual menus. Tweaked a couple other minor things.

Added TintedWindowBackground.ipf to the WaveMetrics Procedures:Windows: folder. It provides a way to add a simple gradient or tint to graph and layout backgrounds.Backgrounds resize when the window is resized, thanks to the new DrawPICT/RABS command.

Revised Graph Utility Procs.ipf: added WMGetLayoutWindowBkgColor(), even though it's not for graphs. Removed WMLockGraphSize() because it's redundant with Freeze Graph Size.ipf.

Major revision of Scatter Plot Matrix.ipf resulting in Scatter Plot Matrix 2.ipf:

Added GizmoExtrude.ipf to support extrusion of any 3D triplet path.

Fixed bug in Global Fit 2.ipf that caused an error if you held a fit parameter in a fit with many data sets.

Changed roundoff in LAB conversions in colorSpaceConversions.ipf.

INCOMPATIBLE CHANGE: In WaveSelectorWidget.ipf, changed parameter list of MakeListIntoWaveSelector() to make it more flexible. If you have used this procedure file, you will need to alter your code.

Added EasyOpen.ipf package that allows you to maintain a list of experiments that appear in an Easy Open menu. Sort of like Recent Experiments, but you control what appears in the menu, and what disappears. NOTE: it is not recommended that you use the #include line appearing here to install Easy Open. Instead, use the File->Packages->Load Easy Open menu item.

New version of 3DWaveDisplay.ipf that supports inserting and removing planes in the 3D wave and can display simultaneous line profiles and histograms.

Added Gizmo3DPieChart.ipf and help file to the the WaveMetrics Procedures:Graphing: folder. Added 3D Pie Chart to Windows->New->Packages menu.

Fixed "Smoothing Control Panel.ipf" to work with waves plotted against top or right axes.

Revised PieChart.ipf to work more like Gizmo3DPieChart.ipf and added a help file.

Added FreezeUnfreezeTags.ipf to the WaveMetrics Procedures:Annotations: folder.

Revised Graph Utility Procs.ipf to add new functions: WMGetGraphPlotBkgColor(), WMGetGraphWindowBkgColor() and WMLockGraphSize(). Also removed dependency on the obsolete String Substitution.ipf procedure file.

Added WaveSelectorWidget.ipf to the WaveMetrics Procedures:Utilities folder. Transforms a listbox control into a hierarchical list of waves, strings, variables, or data folders. Provides a way for a control panel to offer a data folder-aware wave selection.

Added WalkFolders.ipf to the WaveMetrics Procedures:Utilities folder. The WM_WalkFolders routine calls a "callback" routine you provide (a FUNCREF of WM_WalkFoldersCallback) for folders (and optionally for files) in the starting directory. If recurse is true, the callback function is called on enclosed subfolders, too.

Fixed Power Spectral Density.ipf to work properly with input waves that weren't single or double-precision floating point (such as all the integer types) resulting from the behavior of Igor 5's new FFT command.

Fixed Global Fit 2.ipf so that it handles data sets with NaN (blank) values properly. Fixed bugs in contextual menu that pops up from the Initial Guess title cell in the coefficient list on the Coefficient Control tab.

Function Grapher: Fixed bug- when first starting up with nothing in the Function Grapher's preferences folder, and no suitable functions in the current experiment, displaying the Function Grapher main graph window caused it to try to #include the folder, causing a compile error.

Added HTML color codes to WMColorPicker.ipf. Fixed incorrect Gizmo color range blue values.

Examples

New example experiment: ODE Friction Demo.pxp in Examples:Analysis folder. Demonstrates the use of IntegrateODE on a really stiff system.

Added another Gizmo related demo: LissajousDemo.pxp.

Revised Scatter Plot Matrix Demo to use Scatter Plot Matrix 2.


Update 5.02

Igor Application

CHANGED FEATURES

StructGet no longer emits an error when the number of rows in the source wave does match the structure size.

Igor now allows x or y to be missing in ModifyGraph offset={x,y} in order to change just x or y. A value of NaN will do the same thing.

The GetFileFolderInfo sets the new S_fileVersion string to something like "5.0.2.17" on Windows.

The ColorScale dialog's User Ticks popup menus can now select waves from any data folder.

Changed the EPS and TIFF CMYK algorithm to create better grays.

Eliminated the suppression of zero line on axis when zero is within 5% of the end. To revert to the old behavior, use Variable/G root:V_UseOldZeroLineZap=1

New ModifyGraph for axes keyword, lblPosMode = m. Affects the meaning and usage of lblPos, lblLatPos and lblMargin. Goal is to allow graphs containing multiple axes on a side to maintain proper label positioning as the graph window is expanded or shrunk.

The cursor info panel now shows z values as (R,G,B) for true color images. If the image data is greater than 8 bits then it is downgraded to 8 bits if the panel is in 5 digit mode due to lack of space for 16 bit readout. A popup menu allows reverting to the previous method (which shows just the red channel).

Free axis position (ModifyGraph freePos) now scales the value as the axis' font size changes if the given side is not fixed (ModifyGraph margin(axname)=0). This allows multiple axes on a side to remain roughly in proper position as a graph window is expanded or contracted. Also increased the limit for axOffset to allow room for multiple axes without having to use fixed margins.

Changed eps export to not include "%%DocumentFonts: (atend) " if all fonts are
to be embedded. (This caused Cadmus RapidInspector to incorrectly reject the file.)

Added optional linesOfContext parameter to ProcedureText.

New feature: Font embedding in EPS export. See PostScript Font Embedding and the revised Save Graphics dialog.

Added true dots-per-inch setting to the Save Graphics and Export Graphics dialogs.

Added Quality popup for QuickTime JPEG format in the Save Graphics dialog.

Added CMYK option for TIFF and EPS formats in the Save Graphics dialog.

Added optional /HELP flag to DoPrompt.

Added optional wantTraceName parameter to CsrWave:
The position of axis labels are now clipped to the graph edges. Previously, axis labels could go offscreen under certain conditions. If this change causes problems, please let us know (there is a workaround.)

NOTE: Added a compile time check of user-function input parameter declarations for attempts to assign values or other extraneous material. This may cause compile errors with existing procedure files. You will need to edit out the improper material:

	 Function foo(param)
Variable param=1  // NO: param=1 no longer allowed

New flag for DrawPoly, DrawBezier: /ABS - Supresses the default subtraction of the first point from the rest of the data.

Added keyboard event to new-style window hooks. New event is 11 and the new 'keycode' field was added to the structure. See SetWindow.

Added a new keyword, activeSW, to GetWindow. Stores the host-child spec of the currently active subwindow in S_Value.

New feature: ModifyGraph plotClip= [0 1]. A value of 1 will cause the trace to be clipped by the operating system (not Igor) to the plot rectange. This has the effect of trimming overhanging markers and thick lines. On Windows, this may not be supported on certain printers or by certain applications when importing. To see the effect, first execute:

	Make/O w1= {-1,1,-1,1}, w2={1,-1,1,-1}
	Display w1,w2
	ModifyGraph mode(w1)=3,marker(w1)=42,msize(w1)=9,lsize(w2)=7
	ModifyGraph mirror=2,standoff=0

And then execute

	ModifyGraph plotClip= 1

Fixed Edit menu to enable Select All if a text edit item is active in a panel.

Added a new field to the standard new-style button proc for all controls that have an action proc:

Int32 eventMod	// bitfield of modifiers.

See classic window hook docs for MODIFIERS (SetWindow.) This is intended to allow a button proc to know the user requests a contextual menu (eventMod&0x10). The proc can then call PopupContextualMenu.

Added "Static Hook Functions" to allow multiple IgorStartOrNewHook functions (or any of the other fixed-named hook functions). Also see Functions (User-defined Hook Functions).

The Debugger's Expressions pane no longer requires a double-click to enter an expression: a single click will do.

Added optimized code for specific case of wave[var]= in user functions. WARNING: this optimized code is not quite backwards compatible. It does not set up the value of p or x. If this causes problems, there is a workaround (inquire.) The overhead for storing a point in a wave is reduced by about a factor of 5.

Added optimized code for for-loops. In 'for(a;b;c)', if the b part is of the form var1<var2 or the c part is of the form var+=1, then optimization is done. The vars have to be local and real. If both optimizations are done, the loop overhead is reduced by a factor of about 4.

Changed graphics drawing to be more accurate on screen. Previously, some graphics elements such as line thickness and marker sizes in graphs were an integer multiple of a base size. Now floating point is used followed by rounding. This has the side effect of making 1 Pt lines in graphs two pixels wide when the screen resolution is 120 (Large fonts setting on Windows or ModifyGraph screenres=120.) The new line thickness code can be forced to give results similar to the old mode using SetIgorOption UseOldLineScaling=1

Tweaked arrow markers to work better with thick lines especially on Windows or Mac/Win with eps export.

Tweaked bar display to work better when bars are offscale. Mainly for Windows but same code used on Mac now. Previously offscale bars could overwrite the axis under some conditions.

New display modes for complex traces:

 	ModifyGraph cmplxMode(trace)= c

c defines how complex waves are displayed. 0 is normal (real and imag with imag offset by dx/2), 1 is real only, 2 is imag only, 3 is magnitude, 4 is phase (radians).

New function: PixelFromAxisVal(grfNameStr,axNameStr,val)
Returns local graph pixel coordinate corresponding to the axis value. grfNameStr may be "" to use the top graph. If the specified axis is not found and if the name is "left" or "bottom" then the first vertical or horizontal axis will be used. Inverse of AxisValFromPixel.

Added option of fractional seconds to cursor info panel via popup menu (if readout is displaying date-time). Adds 1 digit if 10 digit mode, 2 digits if 15 digit mode and no fractional seconds if 5 digit mode.

Now allow substructures to be passed as function call parameters.

Now support multiple polylines and Beziers in DrawPoly and DrawBezier. Use NaN as separators between segments. (Note: there is no user interface to allow drawing these but once created, they can be edited.)

ImageRegistration Added an argument to /BVAL and added (optional) code for users who might want to take advantage of the new W_RegParams wave.

Redesigned the Redimension Dialog. Added an Add All button that moves all displayed waves from the Wave Browser at the top into the editing list. Changed the Set All to Match Selected button to set all to whatever change was last made. If you click on a wave name in the left portion of the list, the button becomes Set All to Match <wave name>. Made the dialog run much faster when working on a list with many waves.

New function: FunctionInfo returns a string containing keyword-value pairs giving information about a user-defined or external function. The information includes a listing of parameter types.

Dialog Wave Browser: Changed meaning of "Creation Order" item to be just like the ordering used in dialog wave lists in Igor Pro 4 and before. That is, it is the order in which waves were added to a data folder; the trick of moving a wave to another data folder and back to change the wave list order, will work as expected with the Creation Order sort option. Added "Creation Date" item to the dialog Wave Browser's sort options. It sorts by true wave creation date, that is, the date and time you first made the wave regardless of where it has been.

The PopupMenu control now displays a color table popup when value="*COLORTABLEPOP*" or when value="*COLORTABLEPOPNONAMES*". ControlInfo for such a control returns the name of the color table in S_Value. StringFromList(V_Value-1, CTabList()) also returns the name of the color table.

Some dialogs use the new color table popup which provide a visual guide to the colors they use.

The ListBox control's columns can be interactively resized by the user if the new userColumnResize keyword's value is non-zero. If userColumnResize is used, the ListBox's recreation macro is not compatible with versions of Igor prior to 5.02.

Other new ListBox control keywords are col and hScroll. See the note about hScroll and recreation macros in the ListBox documentation.

The ListBox action procedure has 4 new event codes:

8 vertical scroll. row gives the new top row, col is the horizontal pixel shift.
9 horizontal scroll. row gives the (unchanged) top row, col gives the new horizontal pixel shift.
10 top row or column changed programmatically. That means listbox <name> row=<new row> changed the top row or ListBox <name> col=<new col> changed the first visible column.
11 user has resized a column divider.

See the ListBox documentation for some warnings about the scrolling events (8 and 9).

Possible incompatible change:
Implemented an event queue for new-style control action procedures. The ListBox control, in particular, can generate more than one event for a given user action. Previously, two events were reported by the ListBox event structure (eventCode and eventCode2), but the other data in the structure related to only one. Now eventCode2 is not used. Instead you will get a cascade of calls to your action procedure. If your code tests eventCode2 and uses it only if it non-zero, the change will not affect your code. If you have empirically determined that you need eventCode2 and always use it in certain cases, this will break your code.

To force Igor to use the old non-queued method:

SetIgorOption useControlEventQueue=0

ControlInfo reports more information about ListBox controls: S_columnWidths returns a comma-separated list of column widths in pixels (as a string) and V_startRow returns the current top visible row.

The New Graph and Append Trace to Graph dialogs now allow a one-point subrange.

Igor's curve fitting operations now interpret a NaN in a mask wave as if it were a zero. That allows you to use the mask wave as an f(z) wave in a graph to prevent the plotting of markers on a trace.

Added to the Edit Font Substitution Dialog the ability to view and override the built-in font substitutions (aka "Igor Replacements").

Added complex versions of some functions:

BessJ (real order, complex argument)
BessK (real order, complex argument)
BessY (real order, complex argument)
BessI (real order, complex argument)
Sinc
Gammln

Added new function: Gamma(x) which returns the gamma function of x. Saves you typing "exp(Gammln)". It will return a complex number if given complex input.

Added new function gammaInc(a, x [, upperTail]) to calculate the incomplete gamma function for real a >= 0 and real x > 0 (the existing functions gammp and gammq calculate the regularized incomplete gamma function). See gammaInc.

Added new code for real Bessel functions. This is code translated from the SLATEC library. The accuracy when compared against Mathematica evaluating to 18 digits, is often but not always better than the old Bessel code accessed using selector=1. It is anywhere from 2 to 5 times faster. Use selector=2 to access this new code. See BessI, BessJ, BessK, BessY.

The Help Browser Search Igor Files pane now displays the name of the help topic or subtopic where the target text was found. On Windows this works only for help files compiled by Igor Pro 5 or later.

Curve Fit changes:

Added support for built-in functions with "constants": user-settable values that don't vary during the fit. The Curve Fit dialog supports setting the value of a single constant, which all that is necessary so far.

Added /K flag to CurveFit operation to support user-settable constants. See CurveFit.

Added two new built-in fit functions: exp_XOffset and dblexp_XOffset. These add a non-fit constant X0 to make it possible to fit data sets that don't start at x=0. See Curve Fitting Using the Curve Fitting Dialog[Notes on the Built-in Fit Functions].

MatrixOP changes:

Added support for the constants Pi and e.

Added the following functions which can take real or complex waves/variables as arguments: exp(), sqrt(), sin(), cos(), tan(), asin(), acos(), atan(),atan2(), abs().

Changed cmplx() to support waves or constants. Added the two power functions powR() and powC() and added support for inline FFT and IFFT.

MatrixEigenV now has a new branch that supports symmetric matrices. To use the new routines you must specify the /SYM flag.

Macintosh: Changed EPSF export suffix to .eps (from .EPSF).

Macintosh: Tab will now pass focus to the list part of a dialog wave browser.

Macintosh: Improved speed of some wave expressions.

Mac OS X only: Changed printer code to request LaserWriter driver 8 compatibility mode. This is necessary if eps graphics are used in the window being printed. The compatibility mode is not available for preview or pdf generation or if the printer is not postscript. This request can be turned off using SetIgorOption WantLW8Compatibility=0.

Mac OS X Only: Extended the UseVeclib option for SetIgorOption to include several matrix operations:

MatrixEigenV
MatrixLinearSolve
MatrixLLS
MatrixSchur
MatrixSVD
MatrixInverse
The Kriging portion of ImageInterpolate
A portion of PCA
The Inv() function in MatrixOP
MatrixRank

On a 400 MHz G4 running OS X 10.3.2, the MatrixEigenV operation ran large problems (16x16 or larger) about 2.5 times faster for single-precision waves, and about 1.8 times faster for double precision. Overhead limits the spead-up for smaller problems.

To turn off this change, execute SetIgorOption UseVecLib=0

Windows: Igor is now compiled with "Improved Floating-Point Consistency". This improves primarily binary-to-decimal conversions, namely printf-related code.

Windows: IgorInfo(3)'s IGORFILEVERSION format has changed to accomodate versions whose digits exceed 9:

IGORFILEVERSION

The actual version number of the Igor application file.

On the Macintosh, this is expressed as a floating point number and possibly a suffix. Igor Pro 5.00, for example, returns "5.00". Igor Pro 5.02A would return "5.02A".

As of Igor 5.02, the Windows format is a period-separated list of four numbers. Igor 5.02 returns "5.0.2.0". A revision to Igor 5.02 would be indicated in the last digit, such as "5.0.2.12".

(Before Igor 5.02, the Windows format was a floating point number similar to the Macintosh. For example, Igor 4.09A returned "4.091". The floating point representation was abandoned because it limited each of the digits to 0-9.)

Windows: Changed the mode used for shrinking bitmaps on Windows. This mostly affects the quality of page layout onscreen graphics on Windows 2000 and Windows XP.

Windows: Added keyboard navigation for dialog wave browsers and their component controls.

Windows only: PopupMenu controls no longer pop up a (slowly) scrolling menu. Now all user PopupMenu controls are implemented as (possibly scrolling) combo boxes.

BUGS FIXED

Static constants are now allowed in structure definitions.

Fixed a problem where clicking outside a SetVariable in a graph while text editing was active would sometmes create a bogus marquee.

The GetFileFolderInfo operation no longer displays an error dialog when the file isn't an executable file.

Fixed a problem where a cursor would disappear if a debugger break occured in a cursor hook function.

Notebooks saved as part of an experiment with double-quote characters in their titles can now be restored during experiment open without error.

Fixed problem where subwindows could be positioned outside their host.

Fixed bug where Duplicate would not copy dimension labels if only the -1 index was used.

Fixed a bug involving appending to a dimension using wave[r][c]={a,b,c} syntax.

Fixed a problem of marquee drawing in wrong window when a user function called via a PopupMenu control creates a new window.

Fixed a bug where moving an annotation in subgraph did not cause the page layout containing the host graph to update.

Fixed a crash invoving named window hooks, modified procedures and right click in a procedure window.

Fixed Extract to do the right thing when dest is same as source. It also had not been honoring the destination data folder.

Fixed crash in GetDefaultFontSize and GetDefaultFontStyle when the graph parameter was "" and no graph existed. Also corrected their behavior to return NaN when a named graph didn't exist (as the documentation states) rather than returning the value for the current active graph.

Changed function compiler to disallow text waves in numeric expressions.

Fixed compile problem with text waves in structures.

Now allow /S flag with WAVE and Make as per docs (not needed but allowed).

Fixed GetWindow in functions when subwindow syntax is used.

SetVariable had not been remembering live setting through recreation macros.

Fixed recursion problem involving window hooks and cursormoved events with subwindows.

Fixed bug where movie-making would use an active subwindow rather than the entire graph.

Changed SetWindow hookcursor to freshen the cursor without the need for the mouse being moved.

Replaced all sprintf code used in Igor with code obtained from FreeBSD. Should fix nagging problems of poor high precision results and the occasional off-by-ten result.

Fixed marquee selection of controls in subpanels.

Fixed compile of statics via modulename#funcname().

Fixed the way static functions are located by Igor. The pre-Igor 5.02 code can be reinstated with SetIgorOption useNewIsUserFunctionCode=num, where num = 0 means use the old (pre-5.02b14) code, =1 means use new code (this is the default), =2 means use new code, but check it against the old code and print bug messages if they're different (sometimes they're supposed to be different: that's the whole point of the change!).

Changed lines or lines and markers mode with color as f(z) to better deal with NaNs in the zwave.

Fixed bug where axis tags would be in the wrong place when printing or exporting.

Fixed grid lines on waterfall y axis.

Tweaked EPS's DSC to placate Adobe Distiller.

Fixed dependency problem with CustomControl.

Restored Igor 4 behavior to strsearch when the searched-for string contained a NUL character (binary 0), needed when determining the length of a 0-terminated string read from a binary file.

Browse Waves Dialog: the data units text could include the last part of the Points text for waves with a lot of Points text (primarily multidimensional waves).

Fixed a problem with the Recent Experiments and Recent Files menus that could cause a crash on launch under rare circumstances.

ImageTransform now copies wave scaling when using the keyword transposeVol.
ImageTransform stackImages now handles /K correctly and has added basename flexibility.

Fixed a bug that caused a crash in image operations when using the /O flag with a source wave that included a wave note.

Fixed crash that occurs after opening the Control Properties Dialog for a control other than the ListBox after previously using it on a ListBox.

Fixed crash in WinList if a procedure file name exceeded 31 characters.

Fixed a bug in ImageAnalyzeParticles which gave inaccurate area for filled particles.

The Substitute Font Dialog didn't remember substituted fonts whose font numbers were negative.

Fixed a bug in PopupContextualMenu which sometimes resulted in the popup menu popping up in the top left corner of the active window instead of where it should have popped up.

MatrixInverse/P fixed a bug that affected double precision waves.

ImageLineProfile fixed a bug that affected 3D waves containing a single layer.

Fixed Date2Secs(-1,-1,-1) (which returns the offset in seconds from local time to Universal time) to take daylight savings into account.

Fixed curve fitting bug: all-at-once functions with held parameters could occasionally halt reporting the the function had returned NaN or INF even though that was not true, and the fit was actually fine.

Fixed an obscure bug that could cause a crash on a Japanese system if part of a word in a notebook were formatted different from the rest of the word. This caused a crash in the Search Igor Files dialog if you searched for "gauss" because, in the found text area, the "gauss" part of "gaussian" was displayed in red, thus triggering the bug.

Added a workaround for an obscure bug that affected users running on Asian operating systems. If you opened a Macintosh experiment on Windows or vice versa and if the experiment included waves with Asian names, the names would be mangled and you would typically get errors during the experiment load. This was caused by Igor trying to translate between Windows and Macintosh character sets. As a workaround, Igor will now not do any character translation during experiment load if the font controlling the main procedure window is non-Roman.

Fixed AppendLayoutObject to return a better error message if object coordinates are out of illegal.

Fixed bogus out-of-memory message if you cut the last row of a text wave in a table.

Scroll bar in table is now correctly repositioned when you change the change the dimensionality of the waves which causes the horizontal index row to be displayed (2D or higher) or hidden (1D only).

Fixed problem with curve fits when the target graph is a subwindow. Caused a crash on Windows. Caused odd results on Macintosh if fitting a 2D function and you select auto trace for the residual.

Mac only: Fixed a crash when a waterfall plot window is made too small.

Macintosh: Fixed bug in the WaveStats dialog that caused the Range controls to be oddly positioned when the dialog was resized.

Macintosh: Fixed crashing bug: with data folders hidden and a very large number of waves, selecting _too many items_ in a popup-style wave browser would crash.

Macintosh: The Modify Trace Appearance Dialog's fill pattern menus weren't updating when a trace was selected in the list.

Mac OS X: Made a change so that Japanese text is better supported if you choose Japanese as your preferred language in the OS International preferences panel. When you change your language preference from English to Japanese, you must log out and back in order for the change to take full effect. For example, Japanese window titles will be wrong until you log out and back in.

Mac OS X: Added a workaround to allow pasting very large amounts of data (> 1 million data points) into a table. This sometimes failed because a Mac OS function that reports the amount of available memory does not work right.

Mac OS X: Closing the last graph while it is not the frontmost window no longer crashes Igor.

Mac OS X: Prints to the history area of the command window will not appear immediately. Previously there could be a delay because of OS buffering of window contents. This will impact only functions that do lots of prints to the history. The prints will appear smooth instead of jerky.

Mac OS X: Fixed an asymptomatic printing-related bug which caused "Attempt to release a printing object without first doing a retain!!!" to be emitted if you had the Console program open while printing from Igor.

Mac OS X: Fixed Igor Tips for Graph menu. Item for Frame submenu was missing.

Mac OS X: Fixed memory leak that occurred when graphs were updated.

Windows: The cursor info popup menu now works with more than 31 traces and cursor styles.

Windows: Fixed printf and ReplaceNumberByKey bug that appeared only in previous 5.02 beta versions: printf ".15g", 1e11 would result in something like "0:0000000000" instead of "100000000000".

Windows: In the Save File dialog, when interactively entering a name for a file, you can now use any extension by choosing "*.*" as the file type.

Windows: Fixed an obscure bug that caused a page layout window to become dysfunctional if you started a print job, activated another application, and then activated Igor, all before the print job was finished.

Windows: Fixed a bug that caused the cursor to not be set when working in a text area in a dialog like the Add Annotation or Browse Waves dialogs.

Windows: Fixed a bug that caused missing scroll bars in the Annotation Dialog's text tab.

Windows: Fixed crash when selecting Redimension Waves from the Data menu.

For XOP Programmers: Fixed a bug in Igor's automatic code generation for external operations. This bug is mostly asymptomatic but you should still fix it. Search your XOP source code and replace any occurrence of:

#pragma XOP_SET_STRUCT_PACKING

with:

#include "XOPStructureAlignmentTwoByte.h"

Also replace any occurrence of:

#pragma XOP_RESET_STRUCT_PACKING

with:

#include "XOPStructureAlignmentReset.h"

Now verify that each #include "XOPStructureAlignmentTwoByte.h" is balanced by a corresponding #include "XOPStructureAlignmentReset.h".

Extensions

Fixed a a bug in Gizmo that could cause a crash if a user specified marker type for scatter plots included an unspecified user defined object.

Fixed a bug in Gizmo that produced wrong scaling in voxelgrams. Voxelgram point size is now saved in the recreation macro.

Gizmo now supports 7 new marker types for scatter plots.

Changed Gizmo's default tickmark length.

Fixed a bug in Data Browser Plot pane that affected plotting of waves after the user selected a 3D complex wave from the main list. Also fixed a bug that affected histogram plots of large number of points.

Data Browser now saves aspect ratio preference.

Data Browser now allows you to add user defined buttons. See Managing User Buttons.

Added a new keyword to ModifyBrowser: echoCommands to allow you to determine if Data Browser generated commands are printed in the history.

If you select multiple waves and choose New Image in the Data Browser's contextual menu you get the equivalent of executing NewImage on each wave in the list.

Fixed a bug in Windows version of the IGOR Surface Plotter which did not allow saving high resolution TIFF files. Also fixed a printing problem in the Windows version.

Windows: Fixed a bug in the HDF Loader XOP that caused it to incorrectly load little-endian, signed 16-bit SDS data.

Changed selection behavior of the trace list in the Reorder Traces dialog. Now if you click and drag, the clicked item is dragged to a new place in the list. This restores behavior that was changed for no known reason in Igor Pro 5.01.

Fixed MLLoadWave/T flag (make table) which was broken in MLLoadWave 5.50.

Mac OS X: Created a new version of MLLoadWave for Mac OS X. It is named MLLoadWave_OSX.xop and it is capable of loading version 5 Matlab MAT-files but only if you do some configuration. See the MLLoadWave Help file for details.

It is now supported to put an alias (Macintosh) or shortcut (Windows) to an XOP help file where the XOP help file itself would normally be found. The name of the alias or shortcut must match the name of the XOP help file exactly. This will be of interest to XOP programmers only.

Macintosh: XLLoadWave on Macintosh can now handle non-Roman text such as Japanese. See Japanese and Other Non-Roman Text. The Windows version of XLLoadWave has supported this for a long time.

Graphical Slicer Mac OS X: fixed a bug that could cause a crash when deselecting an active slice.

Procedures

Updated PieChart.ipf to no longer create and use global waves in the current data folder. Added default fill colors and simple labelling options. Added "Pie Chart" as an option in the Windows New->Packages submenu.

Waterfall.ipf now locks the size of the New Waterfall Plot panel.

Updated Multi-Peak Fit to version 1.41. See the file or the Multi-peak fit.pxp example experiment for details.

Added the procedure 3DWaveDisplay.ipf which allows you to display a 3D wave, to save orthogonal slices and to crop the wave.

Changed All IP Procedures.ipf to include a menu entry for adding a slider to images of 3D and 4D waves as well as a menu entry for invoking the 3DWaveDisplay procedure.

Modified the Image Threshold Panel procedure to support operating on any layer of a 3D wave when the wave is displayed in a window using the slider procedure.

Added Gizmo color range (0-1) to WMColorPicker.

Added new package Function Grapher. See the Packages menu in the Analysis menu; load the package to build the Function Grapher panel; you can select Analysis->Function Grapher->Function Grapher Help.

Added a new procedure file Walsh1D.ipf that contains the code for performing 1D Walsh transforms.

Added a new procedure file colorSpaceConversions.ipf that contains functions for converting between color spaces.

Added new procedure file MatrixFromTable.ipf. Makes a matrix wave from a rectangular selection in a table containing multiple waves. Makes a 1D wave from a selected row in a table. Enter #include <MatrixFromTable> in your procedure window to use it.

Fixed XYZtoMatrix to properly determine the x and y ranges of the x and y triplet columns.

Added new procedure file HistogramUtilities.ipf. It contains functions (and menu items) to adjust the X scaling of a histogram result to center the X values, or to make a companion X wave with centered X values. It also has a function (and menu item) to make a sqrt(N) wave for use as a weighting wave when doing a curve fit to histogram results. Enter "#include <HistogramUtilities> in your procedure window to use it.

New version of Global Fit procedure. So different it is shipping under a new name, Global Fit 2.ipf. This new version is now what you get if you select Analysis->Packages->Global Fit. Adds ability to fit to multiple fit functions in one global analysis. Ability to link fit coefficients arbitrarily, allowing different fit functions to share parameters, or to have a coefficient global with respect to a subset of data sets. Completely new user interface. New example experiment.

Axis Utilities.ipf: corrected default initialization syntax in AxisLabelText().

Revised ProcedureBrowser.ipf to display lines of context around the selected function using the new optional linesOfContext parameter of ProcedureText. Fixed bug in PB_CreateNotebook when the List button was pushed when #include "file" only was selected.

New GIS Utilities procedures to load and manipulate GIS data. Located under Data Manipulation. See the Igor Pro GIS Utilities help file for details. For a short demo, see the GIS Utilities Demo.pxp in the Examples:Feature Demos: folder.

Examples

New experiment for testing suitability of fonts for EPS font embedding: TrueType Outlines.pxp in the Testing & Misc folder.

New example experiment for the new Global Fit 2 procedure. See the File menu, Example Experiments->Curve Fitting->Global Fit Demo.

Added PCADemo.pxp in Examples:Analysis:PCADemo.pxp. The experiment provides an example for computing PC using the built-in PCA operation and a procedure to calculate the Varimax rotation of components.

Added SpectralDeconvolutionDemo.pxp in Examples:Analysis:SpectralDeconvolutionDemo.pxp. The experiment provides procedures and examples of spectral deconvolution based on algorithm by P.A. Jansson.

Fixed egregious errors in the response graphs in the Smooth Operation Responses example.

Added more tests to matrixOPValidation.pxp.

New GIS Utilities Demo.pxp to demonstrate the basics of the new GIS Utilities procedures. Experiment is in the Feature Demos folder.


Update 5.01

Igor Application

CHANGED FEATURES

Changed feature - trace clipping: Using ModifyGraph axisClip(axName)=2, you can allow graph traces to extend outside the plot rectange to the limits of the graph area.

Warning - incompatible change:

Previously, embedded graphs and tables in page layouts were measured relative to the margins but all other layout objects were positioned relative to the paper edges. This caused a shift of subwindows relative to other objects when page setup conditions were changed. Now subwindows also measure relative to the paper edges. This change will require subwindows in page layouts created in 5.00 to be resized when opened in 5.01. It is possible to cause Igor to temporarily revert to the old method by executing:

SetIgorOption UseOldLayoutCoords=1

Also, new subgraphs in layouts use absolute rather than relative mode by default.

ModifyGraph has a new keyword, gfMult, that adds an adjustment to the default font and marker sizes.

The ModifyGraph gfSize and gmSize keywords now accept vaues of -1 to indicate that a subgraph should use the font size and marker size of its parent.

The default font of a subgraph is now obtained from its parent.

Changed the default target for control operations (i.e., when no /W is present) to use the base window if a child graph happens to be active. This is a bit more lenient and allows for more sloppy programming. Also, when a base graph is active but contains a child panel, then the first panel found will be the default target. Under these conditions, you shouldn't put controls in the base graph. Tip: To convert a graph containing controls in the control bar area to one where the controls are in a subpanel, first select all the controls and choose cut. Then drag the control bar to the top and then again drag down the control bar. This will automatically create a panel. With the panel active, choose Paste from the Edit menu

Added a user-level font substitution facility to Igor that kicks in when a font is specified in a command is not installed. A Substitute Font dialog allows you to choose a temporary or permanent replacement font. In the Misc menu a new Font Substitutions item brings up a dialog that edits a list of such substitutions.

A text file font substitution table is maintained in the "Igor5 Font Substitutions" text file in Igor's preferences folder. The file format is:

<name of missing font to replace> = <name of font to use instead>

one entry per line. For example:

Palatino=New Times Roman

spaces or tabs are allowed around the equals sign.

Previously, when used in a user function, SetVariable with the value keyword, Checkbox with the variable keyword and SetFormula all required the actual full path to a variable. Now these can use NVAR, SVAR and WAVE reference variables including those in structures.

When duplicating a control, the automatic naming tries harder to make reasonable numeric suffixes. Previously after a series of duplicates, you could end up with names like Button001010101.

A new flag, /PICT=pictName, was added to SavePICT to allow saving a named picture rather than the target window.

Changed feature - window hooks and mousemoved over cursors: Previously, if the mouse moved over a cursor, the mousemoved event was not sent to window hooks. Now they are. The cursor name is reported in unnamed hooks via the CURSOR:<name>; key-value pair where <name> is the cursor name (A or B) or '-' if not over a cursor. With named hooks, the cursor name is reported in the cursorName field. See SetWindow.

Changed/New feature - user-defined control font issues: On Windows, removed an internal expansion factor for control font sizes that caused a missmatch with draw text in panels. This will cause some fonts to shrink but should match the system sizes. On Macintosh, Igor now gets the default font size from operating system calls rather than being hardwired. You can now override default font using the new DefaultGuiFont operation.

Changed feature - Print operation: Previously, the Print command with a wave would emit a CR before the wave data was printed. Now the CR is produced only if the results line is non-blank. Also, cleaned up handling of CR and spaces in general.

You can now specify that an annotation such as a TextBox or Legend be exterior but not push the margins. Use /E=2 in place of /E or /E=1. In the Annotation dialog /E=2 corresponds to the new "Adjust Margins" checkbox being unchecked.

Changed feature: shift key now constrains annotation drags.

Changed feature: Window hook functions can now be static using modulename#funcname syntax.

Changed feature - AxisInfo: Added new fields: ISTFREE:f;MASTERAXIS:mname;HOOK:hname; where f is non-zero if axis is truly free (i.e., cretated via NewFreeAxis.) mname is the name set by ModifyFreeAxis master= mname and hname is from ModifyFreeAxis hook=hname. Also added in the recreation part are axisOnTop, tickRGB (but only if set), axisEnab and gridEnab.

When you select Redimension Waves or Redimension <wave name> from the contextual menus in a table, the Redimension dialog now pre-selects the appropriate waves.

ImageMorphology now supports a new 3x3 square structure element using /E=6.

ImageRegistration Added new output wave W_RegParams that conatins 20 double precision registration parameters.

The Redimension Dialog has been redesigned to make it easier to select many waves to work on.

Added Igor Pro 5 flow control and miscellaneous programming keywords to the Help Browser Command Help pane.

WaveStats has a new /W flag that lets you save results to a wave even for real valued waves and there are two new entries in M_WaveStats corresponding to V_startRow and V_endRow.

The FuncFit operation now understands user-defined fit function names in Module#Function format. For details on module names, see ModuleName.

BUGS FIXED

Bug fix: Previously, option-click and drag in the plot area of an embedded graph would beep and do nothing (rather than offset the axes). Now, although the desired animation of the plot area being dragged is not done, the axes are properly offset.

Bug fix: compiled ModifyGraph using f(z) keywords and subrange now works.

Bug fix: Exporting from a pagelayout would sometimes include the origin in the enclosing rectangle.

Bug fix: NewFreeAxis/L in a user function would act as if /R was used.

Fixed a crash involving dependencies and named window hooks that could occur while editing procedures.

Eliminated space before the title of a PopupMenu control which prevented allignment with other control types.

Fixed problem with TabControls that could cause a graph background to become gray.

Fixed contextual click on guide in subwindow layout mode to not include graph guides when the host is not a graph. Also included an information item for the guide.

Fixed vary rare color bug in graphs with bars containing more than 197 bars and using f(z) mode.

Bug fix: GetWindow's hook(name) did not work and gave an error.

Fixed crash in Concatenate when dest is also in source

Fixed rare problem where external text box could affect window size even when margins were fixed.

Log axes, when in non-exponential mode, now honor the thousands separator setting (ModifyGraph useTSep(axisname)=1)

Bug fix: Now window hook functions are supressed during kill to avoid possilble recursion crash.

Crash fix: Prevented use of uninitialized pass-by-reference optional variables.

Bug fix: Controls with multiple named userdata could lose data when going through a recreation macro when two userData keywords were used on one line. Now up to 10 may be used on a single line.

Potential bug fix: It has always been possible to create windows with names that should not have been allowed, such as "Macro", "Window", "Constant" etc. Windows with these names created errors when an experiment is loaded. Now, these names do not cause problems (but are not recommended for use.)

Fixed a bug that caused Igor to fail to recognize stationery experiment files, also known as template experiment files.

ImageTransform getPlane now checks the /P flag specification subject to the /PTYP flag.

ImageInterpolate Fixed a computational instability around the edge of the data (Windows). Corrected /U factor for both Macintosh and Windows.

Fixed bug in the New Fit Function dialog in which the tab key failed to advance editing to the next field in the fit coefficient list.

Fixed a possible crash in any dialog that used the Result Chooser. Possible crash if a dialog was viewed, then the same dialog viewed in a new experiment.

Changed selection behavior of (among others) the trace list in the Reorder Traces dialog. Now if you click and drag, you get an extended selection. Previously, a click and drag resulted in dragging a single trace. This was claimed to have been changed during beta testing and no one noticed that I forgot to turn it on in the shipping version!

Fixed a bug in the New Graph dialog- entering a subrange of [i,j][0] acted like you entered [i,j][].

Various dialogs have been modified to restore pre-selection of waves selected in a table when the From Target checkbox is checked. This was a feature in version 4, but lost in the dialog re-write for version 5. Dialogs fixed:

Convolve/Correlate
Fourier Transforms
Integrate/Differentiate
New Graph/Append Traces To Graph
Smooth
Sort

Fixed some resource leaks that had the potential to cause problems after opening and closing dialogs a number of times:

The Curve Fit dialog failed to release certain memory blocks.
The popup-style WaveBrowser failed to release certain resources.

The Sort Topics checkbox in the Help Browser improperly set the Show Topics From popup menu to All Help Files.

Fixed a bug that would cause auto-guess for built-in curve fitting functions to fail if the Y range of data was less than 1e-20.

Fixed a problem in the LoadData operation that caused an error if the name of the file from which you were loading data exceeded 31 characters.

Fixed a problem in Export Graphics for page layouts when exporting as Hi Res PICT (Macintosh) or EMF (Windows). High resolution was not being used for embedded graphs and tables. On Macintosh, high resolution PICT was not recognized when printing a picture from a page layout.

Fixed a hang that could occur if you converted embedded subwindows to page layout objects and then converted them back to embedded subwindows.

WINDOWS: GetWindow kwFrameInner wsize now correctly returns the frame client area in points, not pixels. GetWindow also supports a new wsizeDC parameter.

WINDOWS: Fixed defective TIFF preview in exported EPS files.

WINDOWS: Fixed a bug that caused an error when you opened an experiment which referenced a minimized procedure window whose title exceeded 31 characters. There is still a minor problem. If you save an experiment with a minimized procedure window whose title exceeds 40 characters, it will not be minimized when you reopen the experiment.

WINDOWS: If you used a table selection to pre-set the InsertPoints or DeletePoints dialog, the Do It button was not enabled.

WINDOWS: Fixed a bug that caused the Path Menu at the top of the Dialog Wave Browser to fail to show its drop-down list when running under a Japanese version of Windows.

WINDOWS: Fixed a bug in the dialog Wave Browser that caused the Curve Fit dialog to forget selected waves when the Wave Browser is in Hide Data Folders mode.

MAC OS X: Fixed a problem that caused Igor to sometimes fail to find the help file associated with a Mach XOP.

MAC OS X: the zoom button in editable text areas (such as the text entry area in the Add Annotation dialog) is now colored when the edit area has the focus.

MAC OS X: Made a change to the way Igor determines a file's type. If the file has no valid Macintosh file type property (which is the case with files created by Apple's software!), Igor will try to determine the file type from the file name extension.

MAC OS X: Curve fit with constraints have been made to use the veclib framework, possibly resulting in a doubling of speed depending on the problem. If you wish to disable the use of veclib, use the command SetIgorOption UseVeclib=0. This command gives a syntax error on Windows and on Mac OS 9.

MAC OS X: If Igor was hidden, it would not find the target window so some commands would return an error.

Macintosh: Font names can now be 39 (instead of 31) characters long.

Macintosh: fixed a bug that resulted in a Bug Message, "Error removing dispatch event handler" when any dialog with a popup Wave Browser was closed. The bug was harmless but annoying.

Macintosh: When Find Selection is configured to used control-shift-H, now holding down the shift key actually does find the selection searching in the backwards direction, instead of doing nothing.

Macintosh: Fixed a bug in our source code for LAPACK that caused severe performance problems with certain double-precision matrix operations. Not all matrix operations use the LAPACK library; operations that are affected include MatrixEigenV, MatrixLinearSolve, MatrixLLS, MatrixSchur and MatrixSVD when the input matrices are double-precision waves. Curve fitting with constraints is also affected. The performance improvement may be as much as a few *hundred* times.

Extensions

VDT and VDT2, which do serial I/O, now work on Mac OS X. VDT2 is recommended for new development. Please see the VDT Help or VDT2 Help file for some caveats about use on Mac OS X.

The Windows version of the HDFLoader XOP has been fixed to accept Macintosh-style paths.

The Windows version of the Data Browser now correctly updates the wavestats info button after it is automatically toggled off when the user selects a text wave.

WINDOWS: Fixed a bug in GBLoadWave which caused VAX binary files to be loaded incorrectly on Windows only.

Procedures

Multi-peak fitting 1.4.ipf: Fixed problem with individual peak trace widths for Lorentzian and Voigt.

Axis Utilities.ipf function AxisLabelText() has a new optional variable. See the file comments for more information.

The Transform Axis package has been updated. The new version, in the file Transform Axis 1.2.ipf, adds the ability to add a trace to a transform axis. This new version adds other improvements to the package as well. See the Transform Axis help file in WaveMetrics Procedures:Graphing.

Changed Global Fit package to separate the user interface from the code that does the work. It is now possible to call Global Fit from your own Igor code, through the DoGlobalFit() function. Also added a Global Fit help file (where you will find a description of DoGlobalFit()).

Changed Image Line Profile.ipf and ImageSlider.ipf so that they can work together when displaying an image from a 3D stack.

Examples

Experiments updated to use Igor5 features: FIFO Chart Demo FM.pxp, Live mode.pxp, FIFO File Parse.pxp and Monster Graph.pxp. Also all the sound input demos were changed to ensure they work under OS X.

New example experiment: Testing & Misc:All Controls Demo.pxp

ImageRegistrationDemo.pxp Added an argument to /BVAL and added (optional) code for users who might want to take advantage of the new W_RegParams wave.

Added an example showing how to use AppleScript to send a graph from Igor to Microsoft Word on Macintosh. See "Igor Pro Folder:Miscellaneous:AppleScript:". Thanks to Dan Friedman of NREL for this example.